feat(asm): pool the arm64 offsets the split bands cannot carry
Offsets beyond the split bands ride a per-function literal pool the way the toolchain lays one out: a PC-relative literal load into REGTMP, then the register-offset access (the pair family adds the base addition), the pooled words appended after the last instruction behind the UNDEF guard, deduplicated by value with the sign- and width-aware load selection. The same differential pass against the corpus exposed three wrong-code bugs and fixes them: the logical-immediate period marker rode the wrong position for every element below 64 bits, so the 32-bit forms encoded a different constant than written; the plain register operand of an ADD/SUB against SP took the shifted-register form where the toolchain uses the extended one with the identity extend, silently truncating through UXTB; and the AUTIA1716 and AUTIB1716 hint constants were the PACIA and PACIB encodings. An offset sweep across every band boundary now pins all three against the live oracle. Assisted-by: GLM 5.3 Flash
This commit is contained in:
1 parent
71e8dd550d
commit
a0fa7e802c
4 files changed
+381
-38
No files matched your search
Vendored
+1
@@ -69,6 +69,7 @@ TEXT ·pairs(SB), NOSPLIT, $0-0
|
||||
FLDPD (R8), (F1, F2)
|
||||
FLDPD 8(R8), (F3, F4)
|
||||
FSTPD (F3, F4),-8(R9)
|
||||
FLDPS 4(R8), (F1, F2)
|
||||
FLDPQ 16(R8), (F1, F2)
|
||||
FSTPQ (F1, F2), 48(R9)
|
||||
RET
|
||||
Reference in new issue
Block a user