fix(asm): scale the FLDPQ and FSTPQ pair offsets by sixteen

The pair encoder derived the imm7 divisor from the width suffix alone, so
the 128-bit FP pairs divided their offsets by eight and encoded twice the
distance.  The Q spellings scale by sixteen like every other 128-bit
access; the differential kernel carries them now.

Assisted-by: GLM 5.3 Flash
This commit is contained in:
petrbalvin committed 2026-10-07 02:36:24 +02:00
1 parent daf7fad5b9
commit 2bd52eb7ad
5 files changed
+14 -5

No files matched your search

+5 -2
View File
@@ -3147,8 +3147,11 @@ func encodeARM64Pair(mnem string, baseOp uint32, ops []*ast.Operand, fi arm64Fra
return nil, fmt.Errorf("%s expects 2 operands, got %d", mnem, len(ops))
}
scale := int64(8)
if strings.HasSuffix(mnem, "W") {
scale = 4
switch {
case strings.HasSuffix(mnem, "W"):
scale = 4 // the 32-bit pairs, signed and unsigned
case strings.HasSuffix(mnem, "Q"):
scale = 16 // the 128-bit FP pairs
}
load := strings.Contains(mnem, "LDP")
memOp, pairOp := ops[0], ops[1]