Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
261 commits
Select commit Hold shift + click to select a range
05f9b69
arm64: lower complete raw half-precision fused multiply family
cpunion Sep 25, 2026
b98f1cb
arm64: lower complete raw scalar FP16 unary family
cpunion Sep 25, 2026
d00d72f
arm64: lower scalar SIMD FCVTZS and FCVTZU families
cpunion Sep 25, 2026
bb23b5d
arm64: normalize raw LDPSW pair operands in memory order
cpunion Sep 25, 2026
e7f0d2b
cli: bound compile-only LLVM modules for large assembly files
cpunion Sep 25, 2026
e1d902a
docs: refresh PR 40 CI and ecosystem coverage handoff
cpunion Sep 25, 2026
00b9bc1
docs: record validated full candidate replay and shard progress
cpunion Sep 25, 2026
5b24b13
arm64: decode complete raw SVE scalar replicate-load family
cpunion Sep 25, 2026
d78d293
docs: refresh PR40 CI evidence and integration handoff
cpunion Sep 25, 2026
d43ee2c
arm64: decode raw SVE predicated integer unary family
cpunion Sep 25, 2026
d63423b
amd64: ignore unreachable raw data tails with layout guard
cpunion Sep 25, 2026
045f342
Decode complete x86 raw half-vector memory move family
cpunion Sep 25, 2026
3d02ebe
Lower complete ARM64 fixed-point integer-to-float raw family
cpunion Sep 25, 2026
d3a93e3
Cover ARM64 raw SME and SVE Go-highway families
cpunion Sep 25, 2026
f6c3a5e
Lower complete SME tile load and store raw family
cpunion Sep 25, 2026
81eef82
Decode complete raw AVX-512 BF16 narrowing conversion forms
cpunion Sep 25, 2026
4668f72
Lower complete ARM64 MSR PSTATE immediate forms
cpunion Sep 25, 2026
94f26b1
Refresh PR40 CI handoff after verified candidate replays
cpunion Sep 25, 2026
5a04926
Record shard-zero raw control-flow diagnostic
cpunion Sep 25, 2026
b5f265a
amd64: resolve source-local RIP literals for raw broadcasts and VMOV …
cpunion Sep 25, 2026
0773e0a
amd64: resolve source-local scalar broadcast constants in raw text
cpunion Sep 25, 2026
c378a2b
amd64: materialize raw vector RIP constants as validated data globals
cpunion Sep 25, 2026
7598481
amd64: resolve raw VBROADCASTI128 source-local constants
cpunion Sep 25, 2026
f717d00
amd64: resolve raw packed logical RIP constants across VEX and EVEX
cpunion Sep 25, 2026
59014e2
amd64: materialize raw VMOVSS and VMOVSD RIP constants
cpunion Sep 25, 2026
e6e2bc8
amd64: resolve packed integer min/max raw RIP constants
cpunion Sep 25, 2026
8e83ca2
amd64: resolve packed integer compare raw RIP constants
cpunion Sep 25, 2026
97f9ac7
amd64: resolve per-lane shift raw RIP constants
cpunion Sep 25, 2026
82426d7
amd64: specialize source-local VPSHUFB controls
cpunion Sep 25, 2026
59eb5e7
docs: checkpoint current PR40 CI replay and remaining gates
cpunion Sep 25, 2026
79a9d70
amd64: resolve packed integer arithmetic raw RIP constants
cpunion Sep 25, 2026
5d724da
amd64: resolve FMA3 raw RIP constants
cpunion Sep 25, 2026
3de3b70
amd64: resolve binary floating raw RIP constants
cpunion Sep 25, 2026
1884850
docs: checkpoint 22 simd objects and current test provenance
cpunion Sep 25, 2026
cdc12eb
amd64: resolve scalar flag compare raw RIP constants
cpunion Sep 25, 2026
6752e90
amd64: resolve vector float compare RIP constants with imm8
cpunion Sep 25, 2026
fad0953
amd64: resolve packed multiply RIP literal sources
cpunion Sep 25, 2026
f2525bc
amd64: resolve packed multiply-add RIP literal sources
cpunion Sep 25, 2026
5dc5a23
amd64: resolve legacy packed move RIP constant loads
cpunion Sep 25, 2026
1c27c7a
amd64: include high registers in legacy packed RIP loads
cpunion Sep 25, 2026
d81a5c1
amd64: resolve legacy scalar SIMD RIP constant loads
cpunion Sep 25, 2026
b727cdc
amd64: decode complete raw BZHI family
cpunion Sep 25, 2026
ea2571b
amd64: decode complete VPABS raw family and RIP constants
cpunion Sep 25, 2026
5ecb36c
amd64: decode complete VEX round family and RIP constants
cpunion Sep 25, 2026
1ec672b
amd64: resolve duplicate-move RIP constant sources
cpunion Sep 25, 2026
a699020
amd64: preserve raw implicit mul-div byte widths
cpunion Sep 25, 2026
793531c
amd64: preserve raw MOVBE operand widths
cpunion Sep 25, 2026
58fafc3
amd64: decode vector byte shifts and RIP sources
cpunion Sep 25, 2026
f945a29
amd64: materialize VEX floating logical RIP constants
cpunion Sep 25, 2026
9336793
amd64: materialize immediate packed blend RIP constants
cpunion Sep 25, 2026
f5dffee
amd64: decode complete raw carryless multiply family
cpunion Sep 25, 2026
629def8
amd64: decode VEX floating 128-bit broadcasts
cpunion Sep 25, 2026
28dda9a
amd64: decode VEX alternating float add/subtract
cpunion Sep 25, 2026
bbbb86d
docs: refresh PR 40 CI handoff and simd progress
cpunion Sep 25, 2026
7553938
amd64: decode complete raw K-register operation family
cpunion Sep 25, 2026
e85b300
amd64: decode complete EVEX mask blend family
cpunion Sep 25, 2026
dcd5841
docs: refresh current CI validation checkpoint
cpunion Sep 25, 2026
9bc996d
amd64: decode complete EVEX floating logical family
cpunion Sep 25, 2026
b3c1c58
amd64: decode complete raw QWORD-to-float conversion families
cpunion Sep 25, 2026
7a9534b
amd64: decode EVEX packed multiply-add family
cpunion Sep 25, 2026
9480d60
amd64: decode complete EVEX variable rotate family
cpunion Sep 25, 2026
3da2f32
amd64: decode complete EVEX block broadcast family
cpunion Sep 25, 2026
b53cf81
amd64: decode complete EVEX packed unpack family
cpunion Sep 25, 2026
9f3da16
amd64: decode complete EVEX scaled round and reduce family
cpunion Sep 25, 2026
c61f2d9
amd64: decode complete EVEX immediate mask compare family
cpunion Sep 25, 2026
d8a3888
amd64: decode complete raw EVEX indexed permute family
cpunion Sep 25, 2026
4f8e5f4
amd64: decode complete raw EVEX packed compress family
cpunion Sep 25, 2026
fa4a311
amd64: decode complete raw EVEX packed expand family
cpunion Sep 25, 2026
2bbcb73
amd64: decode EVEX variable dword permute family
cpunion Sep 25, 2026
e4f7654
amd64: decode complete EVEX VSIB scatter family
cpunion Sep 25, 2026
efad9c3
amd64: decode complete EVEX VPINSR family
cpunion Sep 25, 2026
fce8919
amd64: preserve source-local raw addresses and shared literal pools
cpunion Sep 25, 2026
9611cd8
amd64: decode packed float-to-qword raw conversion family
cpunion Sep 25, 2026
e450768
amd64: preserve mixed raw and named SSE source layout
cpunion Sep 25, 2026
aacbcc6
amd64: preserve physical MOVD32 memory width
cpunion Sep 26, 2026
4ef1ead
amd64: decode complete raw AVX-512 FP16 packed binary family
cpunion Sep 26, 2026
9833f21
amd64: support raw FP16 scalar moves and binary families
cpunion Sep 26, 2026
22e9519
amd64: support complete raw FP16 fused multiply-add family
cpunion Sep 26, 2026
1ea0da2
amd64: support raw FP16 scalar and packed square roots
cpunion Sep 26, 2026
d79d416
docs: refresh CI repair checkpoint and remaining corpus blockers
cpunion Sep 26, 2026
86dffda
amd64: decode and lower complete raw BF16 dot-product forms
cpunion Sep 26, 2026
32511d0
amd64: support complete raw VMOVW scalar integer moves
cpunion Sep 26, 2026
e11a98d
amd64: complete raw FP16 packed precision conversions and rounding
cpunion Sep 26, 2026
74b02be
amd64: complete raw FP16 scalar precision conversion family
cpunion Sep 26, 2026
569f8e3
test: publish verified partial shard 10 assembly evidence
cpunion Sep 26, 2026
04feffc
arm64: complete raw SVE index and scalar element counts
cpunion Sep 26, 2026
505f464
arm64: resolve proven raw constant pools and scalar FABD/FMULX
cpunion Sep 26, 2026
d779df4
test: publish completed shard 10 verification evidence
cpunion Sep 26, 2026
97c89a0
arm64: fix raw SVE floating semantics and complete comparisons
cpunion Sep 26, 2026
71ad27b
arm64: prove raw constant-pool loads across branches and loops
cpunion Sep 26, 2026
052a7f6
arm64: choose fixed-point float width from the destination
cpunion Sep 26, 2026
1a6252c
arm64: complete raw SVE floating unary formats
cpunion Sep 26, 2026
c144677
arm64: decode all predicate-count forms and PTRUE patterns
cpunion Sep 26, 2026
4a57deb
Merge completed shard 10 evidence without claiming current-source ver…
cpunion Sep 26, 2026
02a1850
docs: refresh verified CI repair checkpoint and remaining blockers
cpunion Sep 26, 2026
9166b33
arm64: complete raw SVE floating minmax formats
cpunion Sep 26, 2026
16db100
arm64: share predicate select and logical instruction grammar
cpunion Sep 26, 2026
44a6713
arm64: decode complete predicate permutation family through shared gr…
cpunion Sep 26, 2026
a1c4f30
arm64: cover all raw SVE compact widths and predicate fields
cpunion Sep 26, 2026
e5762e6
arm64: decode predicated scalar and immediate copy families
cpunion Sep 26, 2026
4503be5
arm64: unify complete raw integer unary and reversal grammars
cpunion Sep 26, 2026
a11aeab
test: isolate SVE vector-length changes from live scalable frames
cpunion Sep 26, 2026
d0ead42
arm64: share whole vector and predicate memory grammars
cpunion Sep 26, 2026
91c912d
corpus: record frozen shard 0 results with one JIT layout failure
cpunion Sep 26, 2026
87457ea
arm64: decode complete raw SVE structured memory families
cpunion Sep 26, 2026
65dd830
corpus: retain validated frozen shard 0 evidence
cpunion Sep 26, 2026
f292cb3
arm64: cover raw integer dot products with typed widths and runtime o…
cpunion Sep 26, 2026
bc4c7cb
ci: pin corrected QEMU and retain checksummed module proxy fallback
cpunion Sep 26, 2026
1b43a4e
arm64: decode complete SVE XAR rotations including full-width raw enc…
cpunion Sep 26, 2026
7bc1db0
arm64: decode both SVE SPLICE forms with shared semantic lowering
cpunion Sep 26, 2026
65c6d9f
arm64: decode complete SVE logical and quad reduction families
cpunion Sep 26, 2026
e30558b
arm64: decode all SVE ternary bitwise operations using shared specs
cpunion Sep 26, 2026
1f2d6d6
arm64: decode predicated and indexed SVE integer multiply-accumulate
cpunion Sep 26, 2026
a023a58
arm64: cover vector INC and DEC count patterns and multipliers
cpunion Sep 26, 2026
01688b7
arm64: scale contiguous SVE offsets by actual memory footprint
cpunion Sep 26, 2026
b6ccde3
docs: refresh CI repair checkpoint and frozen verification evidence
cpunion Sep 26, 2026
0734bbe
arm64: unify destructive MAD and MSB with typed multiply-accumulate f…
cpunion Sep 26, 2026
a5b0605
arm64: cover complete raw SVE extra-shift family with shared typed se…
cpunion Sep 26, 2026
e920d8a
arm64: cover full signed SVE load family including gather address forms
cpunion Sep 26, 2026
db4e655
test: batch SVE shift assembly and share native runtime oracle loops
cpunion Sep 26, 2026
1780b49
test: record complete passing discovery shard 25 at frozen source bc4…
cpunion Sep 26, 2026
4885851
Merge branch 'codex/pr40-shard25-evidence-20260926' into codex/pr40-a…
cpunion Sep 26, 2026
e002ae5
arm64: decode full SVE widening add-subtract family with runtime oracles
cpunion Sep 26, 2026
968a0f6
docs: refresh verified family batches and completed shard evidence
cpunion Sep 26, 2026
41279bb
docs: identify remaining raw opcodes from LLVM disassembly
cpunion Sep 26, 2026
c34a168
arm64: cover signed and unsigned SVE multiply-high encodings
cpunion Sep 26, 2026
81d787a
arm64: unify raw SVE floating arithmetic across immediate and indexed…
cpunion Sep 26, 2026
cd8d1d6
arm64: complete raw SVE vector address generation forms
cpunion Sep 26, 2026
e54160f
corpus: record verified shard 17 results and remaining simd failure
cpunion Sep 26, 2026
acf334b
arm64: complete ordinary raw SVE unsigned load grammar and runtime co…
cpunion Sep 26, 2026
7b13d39
Merge branch 'codex/pr40-shard17-evidence-20260926' into codex/pr40-a…
cpunion Sep 26, 2026
6a7ad09
arm64: share raw and named SVE floating divide and scale grammar
cpunion Sep 26, 2026
eafa6a8
arm64: prove raw constant pools against explicit return and register …
cpunion Sep 26, 2026
f70af81
arm64: complete raw SVE saturating arithmetic and fix unsigned immedi…
cpunion Sep 26, 2026
630cdef
arm64: cover predicated SVE floating immediates and their full value …
cpunion Sep 26, 2026
f7cb75f
arm64: model pool address kills and reject exclusive monitor escapes
cpunion Sep 26, 2026
e0d4b4d
arm64: preserve observable result registers in raw pool proofs
cpunion Sep 26, 2026
6e03524
docs: refresh CI repair checkpoint and frozen verification boundaries
cpunion Sep 26, 2026
6d5bf16
arm64: prove unrelated typed SVE effects across raw pools
cpunion Sep 26, 2026
422a906
arm64: track predicate counts and arithmetic pool-pointer kills
cpunion Sep 26, 2026
5cec520
test: record frozen 6e03524 shard 17 assembly evidence
cpunion Sep 26, 2026
186ca03
arm64: bound constant-pool pointer offsets and load footprints
cpunion Sep 26, 2026
e67462c
Merge commit '5cec520' into codex/pr40-arm64-raw-20260926
cpunion Sep 26, 2026
3549877
arm64: reuse typed vector grammars in raw pool flow proofs
cpunion Sep 26, 2026
a48a4fd
docs: checkpoint bounded pool CI repairs and validated shard evidence
cpunion Sep 26, 2026
95f9251
arm64: carry pool proofs across validated MOVPRFX forms
cpunion Sep 26, 2026
f19a49d
arm64: model predicate logical effects in raw pool proofs
cpunion Sep 26, 2026
ed613ca
arm64: track unrelated scalable spills and address registers
cpunion Sep 26, 2026
e2de140
arm64: prove bounded indexed constant-pool loads across control flow
cpunion Sep 26, 2026
692fad1
arm64: model vector extraction and immediate duplication in pool proofs
cpunion Sep 26, 2026
0dd9631
docs: checkpoint indexed pool CI repairs and frozen reruns
cpunion Sep 26, 2026
432314f
Audit exact-version invalid machine code skips in discovery
cpunion Sep 26, 2026
73bde91
Pin separately discovered gmgo fork invalid words
cpunion Sep 26, 2026
fc589c8
Bound discovery LLVM memory by translating per package
cpunion Sep 26, 2026
69de1ff
Audit per-package discovery translation coverage
cpunion Sep 26, 2026
2769fc1
Require skip reports to match pinned invalid-source manifest
cpunion Sep 26, 2026
0f71e51
Record verified CI repair state and remaining failures
cpunion Sep 26, 2026
d7fa0e2
Bound corpus LLVM modules by assembly instruction count
cpunion Sep 26, 2026
f80fb8f
Retry transient corpus dependency fetches without hiding failures
cpunion Sep 26, 2026
666b88c
Update CI repair handoff and discovery report schema
cpunion Sep 26, 2026
6c583a9
Prove missing AMD64 raw RIP constants before exact-version skip
cpunion Sep 26, 2026
9aa59b1
Use matching Go toolchain for invalid-source object proof
cpunion Sep 26, 2026
e7d12c7
Track superseded historical module skips separately from passes
cpunion Sep 26, 2026
2d17842
Build corpus tools reproducibly across worktrees
cpunion Sep 26, 2026
1ab555b
Refresh PR 40 CI repair handoff
cpunion Sep 26, 2026
d5690af
Cover fiber AI SME outer-product encoding
cpunion Sep 26, 2026
697414b
Audit exact private-extension gaps without skipping other assembly
cpunion Sep 26, 2026
e509472
Resolve Go assembly headers in trimpath binaries
cpunion Sep 26, 2026
f888f58
Use matching Go root in trimpath corpus tools
cpunion Sep 26, 2026
126ca53
Use selected Go root for scanner paths
cpunion Sep 26, 2026
e1c3b46
Document current discovery report schema
cpunion Sep 26, 2026
72114d2
Keep trimpath test helper readable
cpunion Sep 26, 2026
d64a529
Pin active Go root for corpus subprocesses
cpunion Sep 26, 2026
8134b3e
Record audited shard 22 and current test gates
cpunion Sep 26, 2026
7299f51
corpus: audit missing GoAT RIP constants in go-highway dev9
cpunion Sep 26, 2026
f3e7b37
docs: record go-highway dev9 source proof and remaining CI gap
cpunion Sep 26, 2026
cc307d5
corpus: bind candidate builds to the recorded Go toolchain
cpunion Sep 26, 2026
dc92a66
docs: record audited CI shard replays and toolchain guard
cpunion Sep 26, 2026
ba157c3
ci: pin discovery evidence to Go 1.27.1
cpunion Sep 27, 2026
a440c1a
docs: record audited CI reproduction of KnoxDB and SIMD aliases
cpunion Sep 27, 2026
89c43b5
docs: record audited large-corpus CI shard passes
cpunion Sep 27, 2026
f151495
fix(arm64): track bounded constant-pool pointer aliases
cpunion Sep 27, 2026
0f08122
fix(corpus): retry transient module download failures within deadline
cpunion Sep 27, 2026
596b147
fix(arm64): prove constant-pool index bounds on guarded CFG edges
cpunion Sep 27, 2026
e436667
docs: condense PR40 checkpoint and distinguish remaining CI failures
cpunion Sep 27, 2026
c2567c6
fix(x86): preserve private threaded TEXT continuations and writable t…
cpunion Sep 27, 2026
43a576e
fix(x86): preserve all packed-broadcast register views and masked mem…
cpunion Sep 27, 2026
1c42a95
docs: record verified KnoxDB continuations and remaining CI work
cpunion Sep 27, 2026
c9122cf
fix(arm64): prove guarded affine constant-pool indexes across wraparound
cpunion Sep 27, 2026
ba98cb2
fix(arm64): retain guarded range intersections through exact masks
cpunion Sep 27, 2026
03f70b8
fix(arm64): prove final pool reads after transient pointer arithmetic
cpunion Sep 27, 2026
acead65
fix(arm64): combine guarded differences with independent pool origins
cpunion Sep 27, 2026
24708cd
fix(arm64): retain tested-bit constraints across guarded index paths
cpunion Sep 27, 2026
e9f131a
fix(arm64): intersect address guards before projection and preserve o…
cpunion Sep 27, 2026
198307f
docs: checkpoint affine proof gates and passing KnoxDB shards
cpunion Sep 27, 2026
9acb690
fix(arm64): follow preserved comparison flags without recursive budge…
cpunion Sep 27, 2026
487fed6
fix(arm64): prove bounded pool loops and pre/post-indexed load footpr…
cpunion Sep 27, 2026
4ed0872
fix(arm64): retain loop flags across long integer and SIMD schedules
cpunion Sep 27, 2026
b134799
docs: checkpoint bounded pool proofs and recovered shard 4
cpunion Sep 27, 2026
8eab02c
fix(arm64): preserve one relocation across repeated pool origins
cpunion Sep 27, 2026
1176d16
docs: record five passing shards and remaining SIMD proof gaps
cpunion Sep 27, 2026
3ed6437
fix(arm64): defer dependent residual proofs until guard normalization
cpunion Sep 27, 2026
c043b91
fix(arm64): retry inconclusive bounds with a fresh proof budget
cpunion Sep 27, 2026
c0652bb
Prove disjoint ARM64 logical indexes and retain mask bounds
cpunion Sep 27, 2026
22ffd2d
Prove bounded ordered ARM64 counter loops
cpunion Sep 27, 2026
b41c426
Bound ARM64 proof work before speculative residual queries
cpunion Sep 27, 2026
4fe7c89
Keep ARM64 flag constraints at their defining program point
cpunion Sep 27, 2026
99fbba8
Prove carried ARM64 pool addresses through counter invariants
cpunion Sep 27, 2026
a740c74
Checkpoint ordered-loop and carried-address CI repairs
cpunion Sep 27, 2026
a9000c0
Prove ARM64 stack-saved indexes without alias assumptions
cpunion Sep 27, 2026
5810948
Checkpoint SIMD parser progress and remaining formatting proof
cpunion Sep 27, 2026
5bbda9b
fix(arm64): honor Go multiply-accumulate operand order
cpunion Sep 27, 2026
7f5f838
fix(arm64): prove exact reciprocal pool indexes and remainders
cpunion Sep 27, 2026
634b122
docs: checkpoint reciprocal proof and multiply semantic repair
cpunion Sep 27, 2026
81bbd5e
fix(ci): refresh assembly evidence for current source snapshot
cpunion Sep 27, 2026
2559760
fix(ci): refresh assembly evidence for current source snapshot
cpunion Sep 27, 2026
7627c40
Merge commit '81bbd5e' into codex/pr40-arm64-raw-20260926
cpunion Sep 27, 2026
aa956eb
test(arm64): honor non-faulting load FFR at page boundaries
cpunion Sep 27, 2026
6f7c192
chore(corpus): align evidence fingerprint with FFR regression
cpunion Sep 27, 2026
860769b
fix(arm64): size local stacks for manual and scalable SP movement
cpunion Sep 27, 2026
5f1de93
chore(corpus): refresh provenance after stack allocation repair
cpunion Sep 27, 2026
4185707
fix(corpus): keep download bootstrap compatible with supported Go ver…
cpunion Sep 27, 2026
92f44b4
fix(corpus): keep download bootstrap compatible with supported Go ver…
cpunion Sep 27, 2026
320c751
chore(corpus): refresh provenance after download bootstrap repair
cpunion Sep 27, 2026
924f4f1
Merge branch 'codex/pr40-ci-hotfix-20260927' into codex/pr40-arm64-ra…
cpunion Sep 27, 2026
130cf47
fix(arm64): preserve scalable memory and indexed structure forms in s…
cpunion Sep 27, 2026
b05c9ee
chore(corpus): refresh provenance after scalable stack sizing repair
cpunion Sep 27, 2026
79e31ac
fix(arm64): track bounded scalable constant-pool address aliases
cpunion Sep 27, 2026
e6a3a5f
Merge commit 'b05c9ee' into codex/pr40-arm64-raw-20260926
cpunion Sep 27, 2026
997aaf7
fix(arm64): distinguish unresolved offset macros from concrete memory…
cpunion Sep 27, 2026
75eba97
fix(arm64): preserve private frames across runtime-sized stack extens…
cpunion Sep 27, 2026
d1408d7
Merge commit '75eba97' into codex/pr40-arm64-raw-20260926
cpunion Sep 27, 2026
34aef52
test(ci): make policy and toolchain fixtures portable to Windows
cpunion Sep 27, 2026
ebf6579
test(ci): make policy and toolchain fixtures portable to Windows
cpunion Sep 27, 2026
620a4b3
docs: checkpoint standard-library and Windows CI repairs
cpunion Sep 27, 2026
0d96d26
chore(corpus): refresh provenance for dynamic stack and Windows CI re…
cpunion Sep 27, 2026
ea8520a
Merge commit '0d96d26' into codex/pr40-arm64-raw-20260926
cpunion Sep 27, 2026
735fa37
fix(arm64): reject hidden effective-address aliases before stack relo…
cpunion Sep 27, 2026
fe70f20
fix(arm64): prove scalable pool offsets across every vector length
cpunion Sep 27, 2026
38305da
fix(arm64): share widening-unpack effects with pool proofs
cpunion Sep 27, 2026
b0f4b05
fix(arm64): recognize multiply-accumulate pool register effects
cpunion Sep 27, 2026
bc67343
fix(arm64): preserve pool addresses across integer vector reductions
cpunion Sep 27, 2026
6104e5f
fix(arm64): bound whole SVE pool loads for every vector length
cpunion Sep 27, 2026
ecc71e6
docs: checkpoint passing CI lanes and scalable pool proof progress
cpunion Sep 27, 2026
dd4716e
docs: record repaired CI jobs and completed scalable pool regression
cpunion Sep 27, 2026
4e3aa3d
chore(corpus): refresh provenance for verified scalable pool fixes
cpunion Sep 27, 2026
a7e98cc
fix: accept single-character named stack displacements
cpunion Sep 27, 2026
6b3a20c
fix(arm64): preserve scalar flag proofs through typed SVE families
cpunion Sep 27, 2026
afad7d1
docs: checkpoint verified stack and SVE CI repair batch
cpunion Sep 27, 2026
b93666f
chore(corpus): bind pending evidence to repaired CI source
cpunion Sep 27, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
260 changes: 188 additions & 72 deletions .github/workflows/go-ci.yml

Large diffs are not rendered by default.

1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
/_out/
98 changes: 98 additions & 0 deletions AGENTS.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,98 @@
# plan9asm development guide

plan9asm translates Go Plan 9 assembly to LLVM IR. A change is complete only
when its accepted forms match Go, LLVM 22 compiles the affected targets, and
tests establish the relevant runtime semantics.

## Start here

1. Inspect `git status --short`, `git worktree list`, and `git remote -v`.
Preserve existing changes and use a persistent development worktree.
2. Read [current work](docs/development/current-work.md) when continuing PR 40.
3. Read the guide for the task before editing:
- [Instruction families](docs/development/instructions.md): TDD, Go tables,
typed grammars, raw decoding, platform and semantic tests.
- [Validation and PR completion](docs/development/validation.md): tool setup,
full tests, benchmark, frozen reports, CI and review gates.
- [Discovery operations](testdata/discovery/README.md): scanning, automatic
deduplication/sorting, bidirectional cursors, traffic and ledger format.
- [Discovery verification](docs/development/discovery-verification.md):
standalone inventory, imports, applicability, cache cleanup and provenance.

## Non-negotiable rules

- Inspect the destination remote before writing. Push this contribution only
to the allowed `cpunion` fork, never to `origin` or `xgo-dev`. Do not merge,
approve or close upstream PRs, publish tags/releases, or change upstream
settings. Creating/updating this contribution PR is allowed.
- Keep code and fixtures readable: use multi-line control flow and moderate
blank lines between logical phases. Use `apply_patch`, then `gofmt`.
- Never commit personal paths, private hostnames/accounts or deployment
settings. Use relative paths, configurable variables and placeholders.
- Develop with current Go 1.27 and LLVM 22 **only**. Never fall back to another
LLVM release. Missing required compilers, linkers or backends fail tests.
- All five architectures are supported: `386`, `amd64`, `arm`, `arm64`,
`wasm`. Do not skip a form because it differs from the host architecture.
Host-inapplicable runtime tests need a required cross-runtime counterpart.
- Run tests with Go while llgo support is incomplete; do not add `!llgo` tags.
Never generate LLVM `blockaddress` for wasm.
- Use TDD and implement complete instruction families and Go operand formats,
not just an observed spelling. Consult full Go tables before implementation.
- Never disguise unsupported instructions, translation/LLVM failures, missing
tools or infrastructure errors as success or source N/A.
- An exact external module version may be `skipped_invalid_source` only when
`testdata/corpus/invalid-machine-code.json` pins the source SHA-256 and
executable evidence: either LLVM 22 rejects the evaluated raw ARM64 WORD,
or Go's own object places an unrelocated raw AMD64 RIP target outside every
TEXT symbol with its named constant absent. The report/ledger retain the
reason. A skip is never a pass.
- A frozen historical mirror/fork may be `skipped_superseded` only when
`testdata/corpus/superseded-modules.json` names an exact newer version
already in the scan ledger and gives reviewable project-identity evidence.
This is separate from both source N/A and assembly success; the replacement
is independently scanned and, if it has assembly, tested.
- A private-extension gap may be `skipped_private_extension` only for the
exact file and target pinned in `testdata/corpus/private-extensions.json`.
Verify the source hash and current Go assembler, compile every other
applicable file, and count the candidate separately from passes.
- Freeze source, tools and ledger during corpus verification. A changed input
invalidates the run. Do not rebase, rewrite or import records into that tree
while tests are running; use a separate persistent worktree for development.
- Keep reports/binaries under ignored `_out/`. Never commit caches, ZIPs,
compressed discovery results or obsolete per-run ledgers, even in history.
- Commit verified development promptly. Keep PR 40 draft until current-head
tests, CI, review and coverage meet the completion gates.

## Common commands

Run from the repository root after selecting the tools described in
[validation](docs/development/validation.md). Keep focused red/green logs.

```sh
go test . -run '<focused-family-regex>' -count=1
go test ./... -count=1 -timeout=20m
(cd cmd/plan9asm && go test ./... -count=1)
(cd cmd/plan9asmll && go test ./... -count=1)

scripts/check-go-asm-coverage.sh
scripts/check-arm64-plan9-corpus.sh
scripts/check-stdlib-corpus.sh
scripts/benchmark-compile.sh

go run ./cmd/plan9asmdiscover -status -out-dir testdata/discovery/ledger
bash scripts/discovery-status.sh
scripts/update-assembly-ledger.sh
```

New external-library scans and compilation use current Go 1.27, not the whole
Go 1.20–1.27 matrix. That compatibility matrix belongs to the official corpus.
Discovery records prove inspection; corpus reports prove translation/object
compilation; runtime tests prove only their executed semantics. Keep these
claims separate.

## Documentation maintenance

Keep this file a short entry point. Put durable procedures in the linked
guides and replace, rather than append to, the current-work checkpoint. Keep
scan/coverage funnel tables in the PR body; derive them from validated reports.
Old progress narratives remain in Git history, not in this guide.
92 changes: 92 additions & 0 deletions amd64_abi.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,92 @@
package plan9asm

import "fmt"

func (c *amd64Ctx) abi0CallStackPtr(off int64) (string, error) {
sp, err := c.loadReg(SP)
if err != nil {
return "", fmt.Errorf("ABI0 call stack: %w", err)
}
addr := sp
if off != 0 {
next := c.newTmp()
fmt.Fprintf(c.b, " %%%s = add i64 %s, %d\n", next, sp, off)
addr = "%" + next
}
ptr := c.newTmp()
fmt.Fprintf(c.b, " %%%s = inttoptr i64 %s to ptr\n", ptr, addr)
return "%" + ptr, nil
}

func (c *amd64Ctx) abi0CallArgs(callee string, sig FuncSig) ([]string, error) {
slotsByArg := make([][]FrameSlot, len(sig.Args))
for _, slot := range sig.Frame.Params {
if slot.Index < 0 || slot.Index >= len(sig.Args) {
return nil, fmt.Errorf("amd64 call %q: ABI0 parameter at +%d has invalid argument index %d", callee, slot.Offset, slot.Index)
}
slotsByArg[slot.Index] = append(slotsByArg[slot.Index], slot)
}
args := make([]string, 0, len(sig.Args))
for argIndex, argType := range sig.Args {
slots := slotsByArg[argIndex]
if len(slots) == 0 {
return nil, fmt.Errorf("amd64 call %q: ABI0 argument %d has no frame slot", callee, argIndex)
}
if len(slots) == 1 && len(frameSlotFields(slots[0])) == 0 {
if slots[0].Type != argType {
return nil, fmt.Errorf("amd64 call %q: ABI0 argument %d frame type %s does not match %s", callee, argIndex, slots[0].Type, argType)
}
ptr, err := c.abi0CallStackPtr(slots[0].Offset)
if err != nil {
return nil, err
}
value := c.newTmp()
fmt.Fprintf(c.b, " %%%s = load %s, ptr %s, align 1\n", value, argType, ptr)
args = append(args, fmt.Sprintf("%s %%%s", argType, value))
continue
}
aggregate := "undef"
for _, slot := range slots {
if len(frameSlotFields(slot)) == 0 {
return nil, fmt.Errorf("amd64 call %q: ABI0 aggregate argument %d has a scalar frame slot", callee, argIndex)
}
ptr, err := c.abi0CallStackPtr(slot.Offset)
if err != nil {
return nil, err
}
value := c.newTmp()
fmt.Fprintf(c.b, " %%%s = load %s, ptr %s, align 1\n", value, slot.Type, ptr)
inserted := c.newTmp()
fmt.Fprintf(c.b, " %%%s = insertvalue %s %s, %s %%%s%s\n", inserted, argType, aggregate, slot.Type, value, frameSlotExtractSuffix(slot))
aggregate = "%" + inserted
}
args = append(args, fmt.Sprintf("%s %s", argType, aggregate))
}
return args, nil
}

func (c *amd64Ctx) storeABI0CallResult(callee string, sig FuncSig, result string) error {
if len(sig.Frame.Results) == 0 {
return fmt.Errorf("amd64 call %q: ABI0 result %s has no frame slot", callee, sig.Ret)
}
fields, aggregate := parseLiteralStructFields(sig.Ret)
for _, slot := range sig.Frame.Results {
value := result
if aggregate {
if slot.Index < 0 || slot.Index >= len(fields) || fields[slot.Index] != slot.Type {
return fmt.Errorf("amd64 call %q: ABI0 result slot %d does not match %s", callee, slot.Index, sig.Ret)
}
extracted := c.newTmp()
fmt.Fprintf(c.b, " %%%s = extractvalue %s %s, %d\n", extracted, sig.Ret, result, slot.Index)
value = "%" + extracted
} else if slot.Index != 0 || slot.Type != sig.Ret {
return fmt.Errorf("amd64 call %q: ABI0 scalar result frame does not match %s", callee, sig.Ret)
}
ptr, err := c.abi0CallStackPtr(slot.Offset)
if err != nil {
return err
}
fmt.Fprintf(c.b, " store %s %s, ptr %s, align 1\n", slot.Type, value, ptr)
}
return nil
}
111 changes: 111 additions & 0 deletions amd64_abi0_anchor_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,111 @@
package plan9asm

import (
"fmt"
"os"
"os/exec"
"path/filepath"
"regexp"
"strings"
"testing"
)

func TestAMD64ABI0AnchorPreservesTailJumpRelocation(t *testing.T) {
args := make([]LLVMType, 15)
for i := range args {
args[i] = I32
}
for _, anchorName := range []string{"gcasmABI0Keep", "relocationKeep"} {
source := fmt.Sprintf("TEXT ·%s(SB),NOSPLIT,$0-0\n", anchorName) +
"JMP ·Fn(SB)\nJMP ·FnTwo(SB)\nJMP ·FnThree(SB)\n"
file, err := Parse(ArchAMD64, source)
if err != nil {
t.Fatal(err)
}
sigs := map[string]FuncSig{
"example." + anchorName: {Name: "example." + anchorName, Ret: Void},
"example.Fn": {Name: "example.Fn", Args: args, Ret: I32},
"example.FnTwo": {Name: "example.FnTwo", Args: args, Ret: I32},
"example.FnThree": {Name: "example.FnThree", Args: args, Ret: I32},
}
for _, target := range []struct {
goarch string
triple string
}{
{"amd64", "x86_64-unknown-linux-gnu"},
{"amd64", "x86_64-apple-darwin"},
{"amd64", "x86_64-pc-windows-msvc"},
{"386", "i386-unknown-linux-gnu"},
{"386", "i386-apple-darwin"},
{"386", "i686-pc-windows-msvc"},
} {
triple := target.triple
t.Run(anchorName+"/"+triple, func(t *testing.T) {
ir, err := Translate(file, Options{
Goarch: target.goarch, TargetTriple: triple,
ResolveSym: testResolveSym("example"), Sigs: sigs,
})
if err != nil {
t.Fatal(err)
}
for _, symbol := range []string{"example.Fn", "example.FnTwo", "example.FnThree"} {
if !strings.Contains(ir, "ptr @"+symbol) {
t.Fatalf("ABI0 anchor omitted direct symbol relocation for %s", symbol)
}
}
llc := findLLVM22Tool("llc")
if llc == "" {
t.Fatal("LLVM 22 llc not found")
}
objdump := findLLVM22Tool("llvm-objdump")
if objdump == "" {
t.Fatal("LLVM 22 llvm-objdump not found")
}
dir := t.TempDir()
llPath := filepath.Join(dir, "anchor.ll")
object := filepath.Join(dir, "anchor.o")
if err := os.WriteFile(llPath, []byte(ir), 0644); err != nil {
t.Fatal(err)
}
if output, err := exec.Command(llc, "-mtriple="+triple, "-filetype=obj", llPath, "-o", object).CombinedOutput(); err != nil {
t.Fatalf("LLVM 22 object compile: %v\n%s", err, output)
}
output, err := exec.Command(objdump, "-dr", object).CombinedOutput()
if err != nil {
t.Fatalf("LLVM 22 object dump: %v\n%s", err, output)
}
if !regexp.MustCompile(`(?m)^\s*0: e9 `).Match(output) {
t.Fatalf("anchor is not an entry-point tail jump with target relocation:\n%s", output)
}
for _, symbol := range []string{"example.Fn", "example.FnTwo", "example.FnThree"} {
if !strings.Contains(string(output), symbol) {
t.Fatalf("object omitted relocation for %s:\n%s", symbol, output)
}
}
})
}
}
}

func TestAMD64NonAnchorStillRejectsUnmappedTailArguments(t *testing.T) {
const source = "TEXT ·forward(SB),NOSPLIT,$0-0\nJMP ·Fn(SB)\n"
file, err := Parse(ArchAMD64, source)
if err != nil {
t.Fatal(err)
}
args := make([]LLVMType, 7)
for i := range args {
args[i] = I32
}
_, err = Translate(file, Options{
Goarch: "amd64", TargetTriple: "x86_64-unknown-linux-gnu",
ResolveSym: testResolveSym("example"),
Sigs: map[string]FuncSig{
"example.forward": {Name: "example.forward", Ret: Void},
"example.Fn": {Name: "example.Fn", Args: args, Ret: I32},
},
})
if err == nil || !strings.Contains(err.Error(), "missing arg reg") {
t.Fatalf("unmapped non-anchor tail arguments unexpectedly accepted: %v", err)
}
}
Loading
Loading