kit

kit
git clone https://git.ryansepassi.com/git/kit.git
Log | Files | Refs | README

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:
Mdoc/NATIVE_ARCH_COMPLETENESS.md | 44+++++++++++++++++++++++++++-----------------
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).