commit 6aae454b985ecf450278abcdd5ae4c66d465fd99
parent 8fc2220a22d992bfc53306be9c34ffa9ef6c5601
Author: Ryan Sepassi <rsepassi@gmail.com>
Date: Fri, 29 May 2026 14:26:54 -0700
doc: record aa64 asm-encode progress (FP/bitfield/DP1/sub-word ldst done)
Diffstat:
1 file changed, 27 insertions(+), 17 deletions(-)
diff --git a/doc/NATIVE_ARCH_COMPLETENESS.md b/doc/NATIVE_ARCH_COMPLETENESS.md
@@ -87,20 +87,30 @@ whole-module link model).
- [x] FP decode tests — DONE (aa64 FP decode corpus runs by default; x64 SSE
decode corpus runs in the x64 lane).
-## Remaining (the large, lowest-severity slice — standalone `as` encode)
-
-The remaining gaps are all in the **text assembler's encode path** (the
-`cfree as` tool and inline-`asm()` template handling). The compiler's codegen
-emits machine code directly and never routes through the text assembler, and
-the shipped runtime `.s`/`.S` files don't use these forms, so none of this
-breaks any build — it is GNU-as parity for hand-written assembly:
-
-- aa64 asm encode: FP-scalar mnemonics, byte/half + pre/post-index ldr/str,
- atomics/exclusive, bitfield/clz/rev (the **decode** side of all of these now
- works; only the kTable parse rows are missing).
-- x64 asm encode: SIB index/scale + `(%rip)` memory operands, ALU reg→mem /
- imm→mem stores.
-- Relocation-operator operand syntax (`:lo12:`/`%hi`/`@GOTPCREL`/…) on all archs.
-- rv64 `call/tail/la/lla` pseudos, multi-word `li`.
-- x64 debugger step-out RA recovery (needs a memory-reading unwind variant; also
- blocked on the JIT debugger not populating `.eh_frame` for in-process images).
+## Standalone `as` encode (GNU-as parity for hand-written asm)
+
+These are all in the **text assembler's encode path** (the `cfree as` tool and
+inline-`asm()` template handling). The compiler's codegen emits machine code
+directly and never routes through the text assembler, and the shipped runtime
+`.s`/`.S` files don't use these forms, so none of this breaks any build.
+
+Done (all byte-identical to clang/llvm-mc, with default-suite corpus cases):
+- [x] aa64 FP-scalar (`fadd/fsub/fmul/fdiv/fneg/fabs/fsqrt/fmov[reg,gpr<->fp]/
+ fcmp/fcvt/scvtf/ucvtf/fcvtzs/fcvtzu`).
+- [x] aa64 bitfield (`sbfm/ubfm/bfm`) + DP1 (`clz/rbit/rev/rev16`).
+- [x] aa64 byte/half + signed sub-word ldst (`ldrb/strb/ldrh/strh/ldrsb/ldrsh/
+ ldrsw`).
+
+Remaining:
+- [ ] aa64 asm encode: atomics/exclusive (`ldxr/stxr/ldar/stlr/cas/...`),
+ register-offset `[Xn, Xm, LSL #s]`, pre/post-index `[Xn, #i]!` / `[Xn], #i`.
+- [ ] x64 asm encode: SIB index/scale + `(%rip)` memory operands, ALU reg→mem /
+ imm→mem stores. (`(%rip)` entangles with reloc-operator syntax for `sym(%rip)`.)
+- [ ] Relocation-operator operand syntax (`:lo12:`/`%hi`/`@GOTPCREL`/…) on all
+ archs — the largest, cross-cutting piece; gates PIC/GOT/TLS hand-written asm.
+- [ ] rv64 `call/tail/la/lla` pseudos + multi-word `li` (needs multi-word emit).
+- [ ] ldrsb/ldrsh/ldrsw DECODE rows (encode done; signed sub-word loads still
+ render as `.inst`).
+- [ ] x64 debugger step-out RA recovery (needs a memory-reading unwind variant;
+ also blocked on the JIT debugger not populating `.eh_frame` for in-process
+ images).