feat(asm): add AArch64 arm64 encoder with ground-truth verification
Assisted-by: MiMo V2.5 Pro
This commit is contained in:
@@ -212,6 +212,17 @@ relocations). Like the RISC-V encoder it is validated byte-for-byte against
|
||||
`GOARCH=loong64 go tool asm`, and its GOOBJ output is proven end-to-end by
|
||||
substituting it into a cross-compiled `go build` and linking with `cmd/link`.
|
||||
|
||||
An **AArch64 encoder** (Phase 5, arm64) encodes the integer instruction set
|
||||
with the data-processing (shifted register and immediate forms), load/store
|
||||
(scaled unsigned immediate and unscaled9-bit immediate), conditional and
|
||||
unconditional branches, the MOV pseudo-instruction and its constant
|
||||
materialisation (MOVZ/MOVN/MOVK for wide immediates, ORR with logical bitmask
|
||||
encoding for values like `$1`), the FP/SP frame mapping (autosize =
|
||||
align16(frame+8), prologue using pre-index store for small frames and
|
||||
STP+SUB for large frames) and SB/global symbol references (ADRP+ADD pairs with
|
||||
R_ADDRARM64 relocations). Like the other encoders it is validated
|
||||
byte-for-byte against `GOARCH=arm64 go tool asm`.
|
||||
|
||||
On top of the encoder, `Assemble` walks a parsed `TEXT` body, converts each
|
||||
operand to an encoder operand, and lays the instructions out so local labels
|
||||
resolve to relative jump offsets: jumps start in the short (rel8) form and
|
||||
|
||||
Reference in New Issue
Block a user