# sx Inline Assembly — Checkpoint (ASM stream) Companion to `current/PLAN-ASM.md`; design in [docs/inline-asm-design.md](../docs/inline-asm-design.md). Update after every commit, one step at a time per the cadence rule (no commit may both add a test and make it pass). ## Last completed step **0.0** — corpus runner target-gating + `.build` JSON config. Added `BuildConfig` (`std.json.parseFromSliceLeaky` → `struct { aot, target }`, unknown-key ⇒ `error.UnknownField`) replacing the standalone `.aot` marker; migrated the 2 existing `.aot` markers (1226/1227) to `{ "aot": true }`; threaded `--target` into the `run`/`build`/`ir` spawns via `withTarget`; added `hostMatchesTarget` (shorthand-expand + arch/os token match, `arm64`→`aarch64`) gating the execute path. Cross-target mismatch fails **loudly** (placeholder until 0.1's ir-only branch) — verified the bail fires (`target=linux, host=aarch64-macos`). Locked with `examples/1638-platform-target-host.sx` (`.build` `{ "target": "macos" }`, runs natively + asserts stdout) + unit tests for the JSON parse and `hostMatchesTarget`. `zig build test` green (646 corpus, 0 failed; 444 unit, 0 failed). Files: `src/corpus_run.test.zig`, `examples/1638-*`, `examples/expected/{1226,1227,1638}-*`. ## Current state Phase 0 step 0.0 landed (test-infra only — no compiler code touched). The corpus runner now reads `expected/.build` and threads/gates `--target`; an arch-pinned example whose target matches the host **executes**, a mismatch currently **bails loudly** ("cross-target ir-only mode not yet implemented"). Phase A–E feasibility already confirmed against the live tree (`LLVMGetInlineAsm` / `LLVMBuildCall2` / `LLVMAppendModuleInlineAsm` in LLVM@19 `Core.h`; ERR-stream `extractvalue`→tuple machinery in `emit_llvm.zig:726-927`; lib-less `extern`, 60 sites; `--target` a global CLI flag). ## Next step **0.1** — implement the **mismatch ⇒ ir-only** branch in `sweepRoot` (replace the loud placeholder bail): when `cfg.target` doesn't match the host, skip run/build/exec and assert only `.exit`+`.ir`+`.stderr` from `sx ir --target`; require an `.ir` snapshot (loud failure if absent). Lock with `examples/16xx-platform-target-cross.sx` (asm-free `() -> i64 { return 0; }`), `.build` `{ "target": "x86_64-linux" }`, + a checked-in `.ir` snapshot. Then 0.2 (CLAUDE.md §Testing/§Test-layout docs for `.build`), then Phase A (`kw_asm`). See `PLAN-ASM.md` Phase 0. ## Log - (init) Plan + design doc written; ASM stream opened. - (0.0) Corpus runner target-gating: `.build` JSON config (replaces `.aot` marker), `--target` threading, `hostMatchesTarget` execute-gate, loud cross-target placeholder bail. Migrated 1226/1227 `.aot`→`.build`; locked with 1638 fixture + unit tests. `zig build test` green. ## Known issues None yet.