Skip to content

build: integrate Plan9 assembly preprocessing and ABI0 contracts - #2694

Draft
cpunion wants to merge 144 commits into
xgo-dev:mainfrom
cpunion:codex/fix-issue2691-struct-asm-20260929
Draft

cpunion wants to merge 144 commits into
xgo-dev:mainfrom
cpunion:codex/fix-issue2691-struct-asm-20260929

Conversation

@cpunion

@cpunion cpunion commented Sep 29, 2026 •

Copy link
Copy Markdown
Collaborator

Refs #2691, #2708, #2707, xgo-dev/plan9asm#40 and xgo-dev/plan9asm#44.

Behavior

Compile selected Plan9 assembly with the same SDK, target, overlays and Go feature selection used by LLGo. Preprocessing, signature discovery, native routing and translation consume the same selected source. Missing or changed ownership is an error; an inferred declaration does not establish an ABI contract.

  • Forward complete package/import types and selected syntax; bind ABI0 frame/results and ARM64 private tails to actual Go declarations and source bytes.
  • Route cgo/native assembly through the native compiler, retaining Go quoting, package-relative includes and compiler-observed headers, overlays and target flags.
  • Supply LLGo-owned bridges for typed equality environments, ARM64/386 atomics, AMD64 GC scans and Windows dynamic StdCall frames. Keep physical/native carriers distinct from ordinary Go signatures.
  • Dispose LLVM builders and bound retained Go heap before optimization. Retain Python initialization builder lifetime and CDP cancellation ownership.
  • Preserve complete partitioned target/profile CI, raw outcomes, coverage collection, bounded processes and owned cleanup. Benchmark folding affects presentation only.

Current revision and dependency

Keep draft. Current contribution head: 7be828f55b9005f13f768b4a8a07aae4c57e6798, rebased onto upstream main 610075be034817b0f386d109926fd9a93db41a48. Its own new CI and independent raw/native/profile/coverage acceptance are complete: 13 workflows, 140 SUCCESS +2 exact conditional publisher SKIPs, zero FAIL, attempt1, no reruns/cancellations. Codecov patch 97.06% >=95.82%. Previous F1 CI remains historical.

Rebase retains the contribution and upstream ESP archive/system-package split. Full policy testing exposed an obsolete four-build assertion; the repair now checks all six exact build identities and their separate archive/package consumers. The actual failed check remains retained.

replace github.com/xgo-dev/plan9asm => github.com/cpunion/plan9asm v0.0.0-20261031190033-9285ff89ab60

The pin changes only go.mod and go.sum. Normal Go 1.27.3 authenticated the public module through sum.golang.org, with no private/insecure/exclusion bypass. After the pin, exact module selection and go mod verify passed. Module checksum: h1:VxdavuA/5JTs9ipbB3PxoQ52QzEwJeZwQ7jEdCNfmP8=. All 5,273 module files match the 5,484-file Git archive, excluding exactly 211 nested CLI-module files. Proxy ZIP, extracted content and Apache notices agree; there is no local-directory replacement. An initial direct-network timeout is retained separately; retry used the existing system proxy, without changing authentication.

Pinned translator 9285ff89a completed its own Go CI naturally on the first attempt: 325/325 SUCCESS, no reruns or cancellations. Official function coverage 88.1%; exact-head Codecov patch 91.80% >= 87.83%. Independent exact-head source/raw/profile/runtime acceptance is complete:286 source artifacts,240 partitions,23 groups; Windows/race22 packages and168 raw streams each;71 required runtime PASS nodes;289 ZIPs full SHA/size/CRC;22 profiles independently match official function coverage. Its completed x86 source inventory joins 4,986/4,986 current and 4,985/4,985 minimum identities; source joins do not mean complete IR/object/runtime coverage.

Before merging, incorporate and pin a tagged upstream release of github.com/xgo-dev/plan9asm. The authenticated fork pseudo-version does not satisfy the unresolved official-dependency P1. Keep that thread unresolved and retain draft status.

Fresh local validation

Compiler execution below binds AAED/latest main610/new9285 dependency, with frozen source, tools, selectors and raw outcomes. Changes since that qualified compiler are limited to CI dependency transport, the Windows GC fixture and its two-mode invocation, the release recipe/validation/documentation, and benchmark JSON transport/validation. Every normal compiler/library/header/module semantic input remains byte-exact; the Windows release recipe now omits DWARF. The changed C fixture is separately recompiled and executed in native Windows CI. This explicit bridge retains the actual AAED compiler qualification; it is not fresh Go/LLVM execution on this child.

Scope Actual result and limit
Darwin/arm64 host Go1.27.3, LLVM22.1.8, explicit macOS SDK26.5: 15 groups /213 roots /1,065 nodes =1,062 PASS +3 explicit WASM leaf SKIPs, zero FAIL. Original195 roots retained plus18 bounded upstream-rebase regressions; exact compiler-selected inventories and unique terminals checked.
Pure policies All three exact CI policy discovery commands 216 PASS, plus eight release-ZIP and three APT methods (227 unique methods); zero FAIL/SKIP. The prior six focused suites overlap these commands; their results are not added again. The obsolete target assertion first failed and was repaired without removing any build target.
Linux compiler Fresh ELF amd64 compiler built from the qualified AAED Git tree using Go1.27.3/LLVM22.1.8. Compiler SHA256 6e05c5eb7793b995bed169252c9e97b45bc154365e6c3c98b32f12135088aa82; build info selects the authenticated new module version and checksum.
#2708 crc32 v1.3.0 1 actual PASS, 0 FAIL/N/A, original assembly selection/symabis/final symbols, final executable link and independent bitwise execution oracle.
#2691 / plan9asm#44 libc v1.75.7 1 actual PASS, 0 FAIL/N/A, selected ABI0 wrappers with uint128 overflow, output pointers and float32/64 copysign; original assembly, final symbols, executable and checked stdout retained.
Native ABI0 integration 1 root RUN/PASS, zero SKIP, real compilation, link and executable output.
Float-bit conversions/function values/round trips 3 roots RUN/PASS, zero SKIP.
Complex division 1 root +23 children RUN/PASS, zero SKIP.
GCC versus LLGo/Clang layout 1 root RUN/PASS, zero SKIP.

The three host skips are precisely TestCgoTypesLLVMLayout for wasm32 Emscripten, wasm32 WASI and wasm64 Emscripten; they are not passes. Host object/layout checks do not establish target execution.

Linux ran in an owned Docker linux/amd64 container under Darwin/arm64 emulation, not native cloud hardware. All required executions passed in 259.235 seconds; its container exited naturally and was removed. The complete source tree, immutable15,657-file SDK, sixteen compatibility-runner files, new compiler and drivers remain hash-bound. Only compiler/module caches were reused; all compiler/probe outputs and execution receipts are new. A separate strict raw auditor checks exact RUN/terminal sets, numerical stdout, build info, source/tool identities and cleanup. This is not a claim of a new independent human review or all-green compatibility-repository CI.

CI dependency-installation repair

The preceding BA60 round exposed repeated Ubuntu archive TLS failures before Go tests. Preserve that failed round; do not call those setup errors instruction or ABI failures.

The shared mirror-list writer now separates architecture endpoint selection from transport selection. amd64/i386 use Ubuntu archive/security; other Ubuntu architectures use ports. Both receive the same HTTP priority1/HTTPS priority2 mechanism. APT Release signatures, package hashes, signing-key paths, strict update errors, retries and deadlines are unchanged; no insecure/unauthenticated or TLS-verification bypass is added. Source suites/components and third-party repositories remain untouched.

Actual TDD retains two x86 failures, then two ports failures, followed by three passing unit methods covering all four architecture cases. Final six complete policy suites pass107 methods. Real pinned Ubuntu24 containers deliberately fail their first HTTPS endpoint, then successfully fetch four signed Release documents each for amd64 and arm64 ports. All eight signatures are independently checked against the original Ubuntu keyring; both containers exit0 and are removed. The ARM64 metadata check uses an amd64 APT client and proves transport/profile behavior, not ARM64 machine execution. These bounded tests omit package indexes; an earlier full-index fixture hit its240-second budget and remains failed. A separate nominal check also passes in9.600 seconds: full selected Ubuntu indexes, four authenticated Release documents and two real zlib .deb downloads. It does not install packages. This head's full Ubuntu dependency and cross-compiler jobs now pass, including the amd64 lane that previously rejected inconsistent signed mirror indexes; no trust checks were weakened.

Windows GC fixture readiness repair

Native thread capture reproduced the original Win32 timeout: the collector's pre-stop callback held the GC lock while waiting for a heap helper that had not finished GC_register_my_thread. A returned thread handle did not imply readiness. Wait for both registered user routines before starting collection; retain the original heap-lock interval, timeouts and exception-handler assertions. The production GC patch is unchanged.

An explicit 100ms registration delay fails twice before the repair, with the same blocked-registration stacks. The final committed fixture passes205 native Windows executions: 200 heap-lock executions and five explicitly separate no-heap controls, including70 uninstrumented original-source executions and30 delayed registrations. Two separately classified broken-barrier controls fail with exits5/6 and matching registration-deadlock stacks; they are not passing fixture executions. No positive failures, skips, timeouts or process kills. The ordinary CI job now runs both normal and intentionally delayed registration. Temporary thread-dump and diagnostic workflows remain only in the fork branch. Prior250 passing executions did not reproduce the race and were not called a repair.

Windows release package budget

The complete BA60 round also exposed a real packaging failure: the386 MSVC ZIP was136,522,351 bytes, exceeding the unchanged128MiB budget by2,304,623 bytes. Increasing ZIP compression saved only396,133 bytes, so it was not used as the repair.

Release host compilers use Go's -w linker flag; the symbol-removing -s flag is not used. SDK/runtime payloads and licenses remain. A shared flag constructor feeds the production build and a real cgo regression. The native test first fails without debug omission.

Full147 CI exposed a test assumption: MSVC external linking need not emit the COFF symbol table read by go tool nm. Replace that check with actual execution of each host-architecture fixture, requiring the runtime function name, stack frame, module build info and embedded version/time linker settings. MinGW386, MSVCamd64 and MSVCarm64 pass six real build/link/execute cases, including normal and spaced library paths, no-DWARF inspection and the existing integrity rejections. No host skips. The earlier diagnostic's relative log-path failure remains failed; native Windows CRLF source hashes match the canonical files. The three actual production compiler jobs now pass too: their six real host build/link/execute fixtures retain runtime names and build metadata. The386 release producer runs its cgo fixture with the running amd64 Go tool; actual386 release execution is separately established by the completed386 installation jobs.

The six actual new release ZIPs pass the unchanged128MiB budget, sidecar/SHA checks, full ZIP CRC, source-pinned ESP payload hashes and compiler checksums. Both ABI profiles use identical compiler bytes for each architecture; licenses and bundled ESP payloads are present.

Architecture MSVC ZIP bytes MinGW ZIP bytes
amd64 108,621,173 108,621,167
arm64 97,845,028 97,845,024
386 126,200,339 126,200,342

The largest ZIP is 120.354MiB, with8,017,386 bytes below the original limit. All six archive installation jobs, actual native Go/C/C++ compilation/link/execution profiles and24 bundled ESP firmware builds pass. Firmware ELF checks are build evidence, not device execution. prepare-winget passes with all six real archives. No already-published release was changed.

Benchmark JSON transport

A complete local policy run reproduced a valid Go benchmark result split into separate name and measurement output events. The old runner rejected it as incomplete; a collector could also miss a duplicate whose first result was fragmented. One shared per-test line normalizer now feeds both consumers. Deterministic regressions cover partial names/metrics, interleaved packages, optional bench frames, multiple result lines, missing metrics and duplicate results. They fail before the repair and pass afterward; the real Go process/coverage fixture and all227 policy methods pass. Raw output is preserved, and incomplete/duplicate results still fail.

CI and review acceptance

The previous BA60 round naturally completed all13 workflows /142 jobs:119 SUCCESS,21 FAIL,2 exact conditional publisher SKIPs, with no reruns/cancellations. Its failures comprise18 APT setup errors, the GC fixture registration race, one dependent coverage gate and the package-budget error; all remain recorded.

The147 round also ended naturally:123 SUCCESS,4 FAIL,7 SKIP across134 materialized jobs. Three compiler jobs failed the same COFF-only assertion, one setup job rejected inconsistent signed Ubuntu mirror metadata. Twelve planned downstream matrix targets did not expand and are not counted as passes. Those failed/skipped results are retained.

This contribution's new round ended naturally and passed complete independent acceptance. The expected142 named jobs and actual GitHub Actions check IDs agree exactly, including every expanded target; only the two PR-inapplicable publisher jobs are skipped. No failed round, old artifact or old PASS is substituted.

Fresh exact-head evidence Accepted result
Complete CI 13 workflows;140 SUCCESS +2 exact conditional publisher SKIPs; zero FAIL/rerun/cancellation
Policies 216 exact source-AST methods actually PASS; zero method skip/error/failure
Core tests Four current Go profiles: original raw Go JSON, timing reports and command exit status agree; no hidden raw failure or incomplete case
macOS build coverage All945 selected roots across8 shards, two parts and an independent inventory;930 PASS +15 explicit source-bound SKIPs, plus3 explicit WASM child SKIPs; no missing/duplicate root
Linux ABI0/package assembly 28 roots +48 children actually RUN/PASS, including native ABI0 integration; zero SKIP
Native integration Eight actual profiles,612 original successful stages:262 host builds +262 host runs,66 embedded build/run stages and22 Windows ARM64 embedded build-only stages
Windows GC regression Actual Win32 normal and intentionally delayed-registration modes both PASS
Windows release Three producers, six actual ZIPs below128MiB, six installed native execution profiles and24 firmware builds PASS
Coverage Exact-head Codecov patch97.06% >=95.82%; independently reproduced strict coverage union and actual collector upload verified

Current Go CI, LLGo CI and Release CI bind contribution7be828f55 to actual merge82cf94e52; its tree exactly equals the contribution tree and main remains610075be0. Cloud profiles follow the committed Go1.27.0 pin; local qualification used Go1.27.3. These are recorded separately. Final independent acceptance SHA256: 165672d829a5bad27e42926d65e23b7b5b57c5fce85ce122f214f3387fb913f4.

Keep draft: the only unresolved review thread is the official-dependency P1; the latest official plan9asm release/tag is stillv0.6.2. No formal approval is recorded. Platform/hardware exclusions and broader runtime gaps remain explicit.

Historical F1/d905 completed thirteen workflows and142 named jobs: 140 SUCCESS +2 exact PR-only publisher SKIPs, no failures/reruns/cancellations, patch97.06%>=95.84%. Its complete raw/native/profile acceptance remains retained but does not certify this contribution head.

Broader contract Retained boundary
Full modernc/sqlite v1.58.0 Earlier build/link passed; mutex initialization failed at runtime. Not reclassified by the bounded libc probe.
CCGo function values Earlier Go probe passed; LLGo function-value representation differed.
#2707 purego v0.9.1 Dlopen/RegisterLibFunc/strlen Earlier Go probe passed; LLGo assembly translation failed; Turso/callbacks remain unqualified.

Those broader probes used another compiler/translator and do not determine this head's behavior. Function boxes, callbacks, system stacks, native386 and AVX512/ER hardware acceptance require separate evidence. Bounded CRC/libc and ABI0 successes do not close every related issue or prove execution on every architecture.

@codecov

codecov Bot commented Sep 29, 2026 •

Copy link
Copy Markdown

@cpunion cpunion changed the title Support modernc.org/libc Uint128 ABI0 wrapper (#2691) WIP: Diagnose modernc.org/libc ABI0 wrappers (#2691) Sep 29, 2026
@github-actions

github-actions Bot commented Sep 29, 2026 •

Copy link
Copy Markdown

LLGo baseline benchmarks

7be828f55b90 | workflow run | long-term charts

Program measurements

Platform Workload File size vs base Text size vs base Build vs base Run vs base
Linux cprintf 8336 B 0 B / +0.0% 387 B 0 B / +0.0% 904.746 ms -14.16 ms / -1.5% (better) 1.263 ms -41.38 us / -3.2% (better)
Linux cprintf-lto 8120 B 0 B / +0.0% 368 B 0 B / +0.0% 873.117 ms -242.9 ms / -21.8% (better) 1.265 ms -72.57 us / -5.4% (better)
Linux fmtprintf 2060856 B +4464 B / +0.2% (worse) 322524 B +2324 B / +0.7% (worse) 6.195 s -1.137 s / -15.5% (better) 3.604 ms -787.8 us / -17.9% (better)
Linux fmtprintf-lto 1157976 B +720 B / +0.1% (worse) 237463 B +44 B / +0.01853% (worse) 16.313 s -2.077 s / -11.3% (better) 3.302 ms -3.336 us / -0.1% (better)
Linux println 253808 B +232 B / +0.1% (worse) 18304 B -52 B / -0.3% (better) 958.471 ms -121.4 ms / -11.2% (better) 1.699 ms +38.12 us / +2.3% (worse)
Linux println-lto 99216 B +32 B / +0.03226% (worse) 15516 B -55 B / -0.4% (better) 1.639 s -167.6 ms / -9.3% (better) 1.607 ms -8.93 us / -0.6% (better)
macOS cprintf 50672 B 0 B / +0.0% 4409 B 0 B / +0.0% 1.288 s +360.5 ms / +38.9% (worse) 5.573 ms +2.802 ms / +101.1% (worse)
macOS cprintf-lto 50592 B -16 B / -0.03162% (better) 161 B 0 B / +0.0% 980.822 ms +61.15 ms / +6.6% (worse) 2.535 ms -160.1 us / -5.9% (better)
macOS fmtprintf 1281104 B +128 B / +0.009992% (worse) 699021 B +2940 B / +0.4% (worse) 4.697 s +450.2 ms / +10.6% (worse) 46.529 ms +10.13 ms / +27.8% (worse)
macOS fmtprintf-lto 968448 B +96 B / +0.009914% (worse) 558233 B +2096 B / +0.4% (worse) 7.478 s -703.7 ms / -8.6% (better) 45.142 ms -13.65 ms / -23.2% (better)
macOS println 98112 B +48 B / +0.04895% (worse) 25206 B -68 B / -0.3% (better) 1.013 s +24.71 ms / +2.5% (worse) 4.155 ms -194.5 us / -4.5% (better)
macOS println-lto 84368 B +48 B / +0.1% (worse) 22151 B -68 B / -0.3% (better) 1.333 s +264.1 ms / +24.7% (worse) 3.749 ms +418.9 us / +12.6% (worse)
Windows MinGW cprintf 734720 B +1024 B / +0.1% (worse) 4230 B 0 B / +0.0% 1.962 s -188.1 ms / -8.7% (better) 3.974 ms -62.9 us / -1.6% (better)
Windows MinGW cprintf-lto 59392 B 0 B / +0.0% 4182 B 0 B / +0.0% 2.003 s -164.2 ms / -7.6% (better) 3.541 ms -566.9 us / -13.8% (better)
Windows MinGW fmtprintf 5144576 B +9216 B / +0.2% (worse) 409894 B +528 B / +0.1% (worse) 6.264 s +241.4 ms / +4.0% (worse) 9.685 ms -762.6 us / -7.3% (better)
Windows MinGW fmtprintf-lto 2857472 B +1024 B / +0.03585% (worse) 331158 B -800 B / -0.2% (better) 10.791 s +173.4 ms / +1.6% (worse) 9.844 ms -160.9 us / -1.6% (better)
Windows MinGW println 792576 B +1024 B / +0.1% (worse) 26278 B -48 B / -0.2% (better) 1.939 s -207.2 ms / -9.7% (better) 7.455 ms -2.168 ms / -22.5% (better)
Windows MinGW println-lto 226816 B +512 B / +0.2% (worse) 22406 B -48 B / -0.2% (better) 2.253 s -285.4 ms / -11.2% (better) 6.379 ms -94.3 us / -1.5% (better)
Windows MinGW 386 cprintf 678912 B +1024 B / +0.2% (worse) 5592 B 0 B / +0.0% 1.820 s +6.344 ms / +0.3% (worse) 5.270 ms -515.2 us / -8.9% (better)
Windows MinGW 386 cprintf-lto 119808 B 0 B / +0.0% 5112 B 0 B / +0.0% 1.878 s +34.9 ms / +1.9% (worse) 5.280 ms -344.6 us / -6.1% (better)
Windows MinGW 386 fmtprintf 4541952 B +19968 B / +0.4% (worse) 326570 B +64 B / +0.0196% (worse) 5.822 s +69.5 ms / +1.2% (worse) 12.907 ms -220.5 us / -1.7% (better)
Windows MinGW 386 fmtprintf-lto 2977280 B +4096 B / +0.1% (worse) 283428 B +172 B / +0.1% (worse) 10.367 s +280.1 ms / +2.8% (worse) 13.527 ms +115.7 us / +0.9% (worse)
Windows MinGW 386 println 734720 B +1024 B / +0.1% (worse) 22832 B -42 B / -0.2% (better) 1.820 s +5.811 ms / +0.3% (worse) 8.986 ms -509 us / -5.4% (better)
Windows MinGW 386 println-lto 279552 B 0 B / +0.0% 20000 B -46 B / -0.2% (better) 2.147 s +21.75 ms / +1.0% (worse) 9.590 ms +546 us / +6.0% (worse)
Windows MinGW ARM64 cprintf 744448 B +1536 B / +0.2% (worse) 4032 B 0 B / +0.0% 2.205 s +67.58 ms / +3.2% (worse) 6.250 ms -1.124 ms / -15.2% (better)
Windows MinGW ARM64 cprintf-lto 58880 B 0 B / +0.0% 3984 B 0 B / +0.0% 2.217 s -2.574 ms / -0.1% (better) 6.798 ms -107.9 us / -1.6% (better)
Windows MinGW ARM64 fmtprintf 5098496 B +25088 B / +0.5% (worse) 344908 B -300 B / -0.1% (better) 6.205 s +51.37 ms / +0.8% (worse) 13.851 ms -1.177 ms / -7.8% (better)
Windows MinGW ARM64 fmtprintf-lto 2990592 B +4096 B / +0.1% (worse) 286492 B -300 B / -0.1% (better) 10.204 s +70.45 ms / +0.7% (worse) 14.115 ms -389.4 us / -2.7% (better)
Windows MinGW ARM64 println 799744 B +1024 B / +0.1% (worse) 24716 B -68 B / -0.3% (better) 2.160 s -19.5 ms / -0.9% (better) 10.662 ms -997.8 us / -8.6% (better)
Windows MinGW ARM64 println-lto 235008 B -512 B / -0.2% (better) 21576 B -68 B / -0.3% (better) 2.407 s -64.63 ms / -2.6% (better) 11.448 ms +153.9 us / +1.4% (worse)
Windows MSVC cprintf 978944 B +1024 B / +0.1% (worse) 66003 B 0 B / +0.0% 2.158 s +326.3 ms / +17.8% (worse) 3.380 ms +88.8 us / +2.7% (worse)
Windows MSVC cprintf-lto 307200 B 0 B / +0.0% 65971 B 0 B / +0.0% 1.899 s +17.17 ms / +0.9% (worse) 3.461 ms +22.5 us / +0.7% (worse)
Windows MSVC fmtprintf 5445120 B +9728 B / +0.2% (worse) 505958 B +528 B / +0.1% (worse) 6.201 s +229.5 ms / +3.8% (worse) 11.865 ms -769.3 us / -6.1% (better)
Windows MSVC fmtprintf-lto 3179008 B +512 B / +0.01611% (worse) 428534 B -816 B / -0.2% (better) 10.285 s +256.6 ms / +2.6% (worse) 12.701 ms +1.085 ms / +9.3% (worse)
Windows MSVC println 1106432 B +2048 B / +0.2% (worse) 122630 B +160 B / +0.1% (worse) 1.880 s +44.64 ms / +2.4% (worse) 7.291 ms +375.4 us / +5.4% (worse)
Windows MSVC println-lto 549376 B +1024 B / +0.2% (worse) 119382 B +144 B / +0.1% (worse) 2.142 s +33.71 ms / +1.6% (worse) 6.985 ms -410.4 us / -5.5% (better)
Windows MSVC 386 cprintf 589312 B +1536 B / +0.3% (worse) 3947 B 0 B / +0.0% 1.836 s -41.24 ms / -2.2% (better) 5.567 ms -443.5 us / -7.4% (better)
Windows MSVC 386 cprintf-lto 59904 B 0 B / +0.0% 3901 B 0 B / +0.0% 1.876 s -1.237 ms / -0.1% (better) 5.792 ms +138.5 us / +2.4% (worse)
Windows MSVC 386 fmtprintf 4270080 B +18944 B / +0.4% (worse) 309980 B +16 B / +0.005162% (worse) 6.073 s -114.9 ms / -1.9% (better) 13.005 ms -1.216 ms / -8.6% (better)
Windows MSVC 386 fmtprintf-lto 2779136 B +3072 B / +0.1% (worse) 261093 B +26 B / +0.009959% (worse) 9.987 s -560.5 ms / -5.3% (better) 13.749 ms -453.3 us / -3.2% (better)
Windows MSVC 386 println 645120 B -512 B / -0.1% (better) 21496 B -42 B / -0.2% (better) 1.858 s -45.09 ms / -2.4% (better) 10.033 ms +58.9 us / +0.6% (worse)
Windows MSVC 386 println-lto 218112 B 0 B / +0.0% 19257 B -42 B / -0.2% (better) 2.096 s -29.92 ms / -1.4% (better) 9.367 ms -239.7 us / -2.5% (better)
Windows MSVC ARM64 cprintf 747520 B +2048 B / +0.3% (worse) 4240 B 0 B / +0.0% 1.954 s +8.077 ms / +0.4% (worse) 7.045 ms -224.2 us / -3.1% (better)
Windows MSVC ARM64 cprintf-lto 64512 B 0 B / +0.0% 4140 B 0 B / +0.0% 1.956 s -19.28 ms / -1.0% (better) 6.422 ms -634.1 us / -9.0% (better)
Windows MSVC ARM64 fmtprintf 5095936 B +25088 B / +0.5% (worse) 345256 B -304 B / -0.1% (better) 6.015 s +231.1 ms / +4.0% (worse) 16.470 ms +136.9 us / +0.8% (worse)
Windows MSVC ARM64 fmtprintf-lto 2998784 B +4608 B / +0.2% (worse) 287388 B -296 B / -0.1% (better) 9.985 s +98.89 ms / +1.0% (worse) 16.590 ms +84.9 us / +0.5% (worse)
Windows MSVC ARM64 println 804352 B +1024 B / +0.1% (worse) 25212 B -68 B / -0.3% (better) 1.935 s +32.99 ms / +1.7% (worse) 12.332 ms -45.5 us / -0.4% (better)
Windows MSVC ARM64 println-lto 240640 B 0 B / +0.0% 22112 B -68 B / -0.3% (better) 2.172 s +1.044 ms / +0.0481% (worse) 11.918 ms -151.1 us / -1.3% (better)
Core language and compiler benchmarks
Platform Benchmark ns/op vs base
Linux BenchmarkLookupPCRandom 14.640 ns/op +0.03 ns/op / +0.2% (worse)
Linux BenchmarkMergeCompilerFlags 194.200 ns/op -17.1 ns/op / -8.1% (better)
Linux BenchmarkMergeLinkerFlags 125.400 ns/op -24.4 ns/op / -16.3% (better)
Linux BenchmarkChannelBuffered 57.970 ns/op -0.43 ns/op / -0.7% (better)
Linux BenchmarkChannelHandoff 13826 ns/op -5748 ns/op / -29.4% (better)
Linux BenchmarkDefer 47.680 ns/op -8.37 ns/op / -14.9% (better)
Linux BenchmarkDirectCall 1.164 ns/op -0.003 ns/op / -0.3% (better)
Linux BenchmarkGlobalRead 1.162 ns/op -0.002 ns/op / -0.2% (better)
Linux BenchmarkGlobalWrite 7.756 ns/op -0.027 ns/op / -0.3% (better)
Linux BenchmarkGoroutine 32023 ns/op +508 ns/op / +1.6% (worse)
Linux BenchmarkInterfaceCall 5.824 ns/op -0.435 ns/op / -6.9% (better)
Linux BenchmarkRuntimeGetG 2.891 ns/op -0.069 ns/op / -2.3% (better)
macOS BenchmarkLookupPCRandom 17.170 ns/op +2.98 ns/op / +21.0% (worse)
macOS BenchmarkMergeCompilerFlags 127 ns/op +3.7 ns/op / +3.0% (worse)
macOS BenchmarkMergeLinkerFlags 89.020 ns/op +10.65 ns/op / +13.6% (worse)
macOS BenchmarkChannelBuffered 27.210 ns/op -2.19 ns/op / -7.4% (better)
macOS BenchmarkChannelHandoff 8138 ns/op -2415 ns/op / -22.9% (better)
macOS BenchmarkDefer 35.810 ns/op -2.21 ns/op / -5.8% (better)
macOS BenchmarkDirectCall 1.101 ns/op -0.083 ns/op / -7.0% (better)
macOS BenchmarkGlobalRead 1.078 ns/op -0.071 ns/op / -6.2% (better)
macOS BenchmarkGlobalWrite 1.216 ns/op +0.114 ns/op / +10.3% (worse)
macOS BenchmarkGoroutine 33973 ns/op -20037 ns/op / -37.1% (better)
macOS BenchmarkInterfaceCall 4.226 ns/op -0.232 ns/op / -5.2% (better)
macOS BenchmarkRuntimeGetG 2.304 ns/op -0.503 ns/op / -17.9% (better)
Windows MinGW BenchmarkLookupPCRandom 13.290 ns/op +0.23 ns/op / +1.8% (worse)
Windows MinGW BenchmarkMergeCompilerFlags 612.300 ns/op -19.7 ns/op / -3.1% (better)
Windows MinGW BenchmarkMergeLinkerFlags 542.400 ns/op -4.1 ns/op / -0.8% (better)
Windows MinGW BenchmarkChannelBuffered 33.910 ns/op -0.05 ns/op / -0.1% (better)
Windows MinGW BenchmarkChannelHandoff 1169 ns/op +16 ns/op / +1.4% (worse)
Windows MinGW BenchmarkDefer 52.710 ns/op -1.75 ns/op / -3.2% (better)
Windows MinGW BenchmarkDirectCall 1.865 ns/op +0.004 ns/op / +0.2% (worse)
Windows MinGW BenchmarkGlobalRead 1.861 ns/op -0.001 ns/op / -0.1% (better)
Windows MinGW BenchmarkGlobalWrite 2.475 ns/op +0.001 ns/op / +0.04042% (worse)
Windows MinGW BenchmarkGoroutine 91485 ns/op -3053 ns/op / -3.2% (better)
Windows MinGW BenchmarkInterfaceCall 8.687 ns/op -0.006 ns/op / -0.1% (better)
Windows MinGW BenchmarkRuntimeGetG 2.174 ns/op -0.306 ns/op / -12.3% (better)
Windows MinGW 386 BenchmarkLookupPCRandom 67.550 ns/op -0.44 ns/op / -0.6% (better)
Windows MinGW 386 BenchmarkMergeCompilerFlags 757.200 ns/op -6.1 ns/op / -0.8% (better)
Windows MinGW 386 BenchmarkMergeLinkerFlags 705.500 ns/op -26 ns/op / -3.6% (better)
Windows MinGW 386 BenchmarkChannelBuffered 53.150 ns/op +0.01 ns/op / +0.01882% (worse)
Windows MinGW 386 BenchmarkChannelHandoff 1959 ns/op -393 ns/op / -16.7% (better)
Windows MinGW 386 BenchmarkDefer 55.560 ns/op +6.65 ns/op / +13.6% (worse)
Windows MinGW 386 BenchmarkDirectCall 0.953 ns/op -0.0866 ns/op / -8.3% (better)
Windows MinGW 386 BenchmarkGlobalRead 1.079 ns/op +0.115 ns/op / +11.9% (worse)
Windows MinGW 386 BenchmarkGlobalWrite 16.600 ns/op -0.11 ns/op / -0.7% (better)
Windows MinGW 386 BenchmarkGoroutine 221019 ns/op -1420 ns/op / -0.6% (better)
Windows MinGW 386 BenchmarkInterfaceCall 6.170 ns/op -0.326 ns/op / -5.0% (better)
Windows MinGW 386 BenchmarkRuntimeGetG 1.354 ns/op +0.065 ns/op / +5.0% (worse)
Windows MinGW ARM64 BenchmarkLookupPCRandom 12.060 ns/op 0 ns/op / +0.0%
Windows MinGW ARM64 BenchmarkMergeCompilerFlags 555.900 ns/op -8.2 ns/op / -1.5% (better)
Windows MinGW ARM64 BenchmarkMergeLinkerFlags 529 ns/op -3 ns/op / -0.6% (better)
Windows MinGW ARM64 BenchmarkChannelBuffered 38.380 ns/op -0.39 ns/op / -1.0% (better)
Windows MinGW ARM64 BenchmarkChannelHandoff 3804 ns/op +505 ns/op / +15.3% (worse)
Windows MinGW ARM64 BenchmarkDefer 52.570 ns/op -3.73 ns/op / -6.6% (better)
Windows MinGW ARM64 BenchmarkDirectCall 0.590 ns/op 0 ns/op / +0.0%
Windows MinGW ARM64 BenchmarkGlobalRead 0.590 ns/op -0.0001 ns/op / -0.01695% (better)
Windows MinGW ARM64 BenchmarkGlobalWrite 0.663 ns/op -0.0001 ns/op / -0.01507% (better)
Windows MinGW ARM64 BenchmarkGoroutine 62898 ns/op +2399 ns/op / +4.0% (worse)
Windows MinGW ARM64 BenchmarkInterfaceCall 4.269 ns/op +0.125 ns/op / +3.0% (worse)
Windows MinGW ARM64 BenchmarkRuntimeGetG 1.799 ns/op +0.003 ns/op / +0.2% (worse)
Windows MSVC BenchmarkLookupPCRandom 13.130 ns/op +0.09 ns/op / +0.7% (worse)
Windows MSVC BenchmarkMergeCompilerFlags 643.900 ns/op +13.7 ns/op / +2.2% (worse)
Windows MSVC BenchmarkMergeLinkerFlags 536.400 ns/op -10.4 ns/op / -1.9% (better)
Windows MSVC BenchmarkChannelBuffered 32.910 ns/op -1.24 ns/op / -3.6% (better)
Windows MSVC BenchmarkChannelHandoff 1362 ns/op -4 ns/op / -0.3% (better)
Windows MSVC BenchmarkDefer 53.010 ns/op +0.58 ns/op / +1.1% (worse)
Windows MSVC BenchmarkDirectCall 1.550 ns/op +0.003 ns/op / +0.2% (worse)
Windows MSVC BenchmarkGlobalRead 1.859 ns/op -0.002 ns/op / -0.1% (better)
Windows MSVC BenchmarkGlobalWrite 2.449 ns/op -0.011 ns/op / -0.4% (better)
Windows MSVC BenchmarkGoroutine 88988 ns/op -1649 ns/op / -1.8% (better)
Windows MSVC BenchmarkInterfaceCall 8.688 ns/op +0.305 ns/op / +3.6% (worse)
Windows MSVC BenchmarkRuntimeGetG 1.862 ns/op -0.003 ns/op / -0.2% (better)
Windows MSVC 386 BenchmarkLookupPCRandom 26.480 ns/op -0.11 ns/op / -0.4% (better)
Windows MSVC 386 BenchmarkMergeCompilerFlags 753.200 ns/op +14.4 ns/op / +1.9% (worse)
Windows MSVC 386 BenchmarkMergeLinkerFlags 687.300 ns/op +23.1 ns/op / +3.5% (worse)
Windows MSVC 386 BenchmarkChannelBuffered 41.840 ns/op +0.75 ns/op / +1.8% (worse)
Windows MSVC 386 BenchmarkChannelHandoff 922.300 ns/op +0.2 ns/op / +0.02169% (worse)
Windows MSVC 386 BenchmarkDefer 49.410 ns/op -1.18 ns/op / -2.3% (better)
Windows MSVC 386 BenchmarkDirectCall 1.549 ns/op -0.003 ns/op / -0.2% (better)
Windows MSVC 386 BenchmarkGlobalRead 1.551 ns/op -0.004 ns/op / -0.3% (better)
Windows MSVC 386 BenchmarkGlobalWrite 7.797 ns/op +0.013 ns/op / +0.2% (worse)
Windows MSVC 386 BenchmarkGoroutine 108709 ns/op -1959 ns/op / -1.8% (better)
Windows MSVC 386 BenchmarkInterfaceCall 8.383 ns/op +0.071 ns/op / +0.9% (worse)
Windows MSVC 386 BenchmarkRuntimeGetG 1.927 ns/op -0.249 ns/op / -11.4% (better)
Windows MSVC ARM64 BenchmarkLookupPCRandom 12.040 ns/op -0.03 ns/op / -0.2% (better)
Windows MSVC ARM64 BenchmarkMergeCompilerFlags 572.600 ns/op +2 ns/op / +0.4% (worse)
Windows MSVC ARM64 BenchmarkMergeLinkerFlags 538.600 ns/op +10.5 ns/op / +2.0% (worse)
Windows MSVC ARM64 BenchmarkChannelBuffered 38.720 ns/op +0.22 ns/op / +0.6% (worse)
Windows MSVC ARM64 BenchmarkChannelHandoff 2098 ns/op -17 ns/op / -0.8% (better)
Windows MSVC ARM64 BenchmarkDefer 64.450 ns/op -0.01 ns/op / -0.01551% (better)
Windows MSVC ARM64 BenchmarkDirectCall 0.590 ns/op -0.0001 ns/op / -0.01696% (better)
Windows MSVC ARM64 BenchmarkGlobalRead 0.590 ns/op +0.0001 ns/op / +0.01695% (worse)
Windows MSVC ARM64 BenchmarkGlobalWrite 3.796 ns/op +0.001 ns/op / +0.02635% (worse)
Windows MSVC ARM64 BenchmarkGoroutine 60007 ns/op +142 ns/op / +0.2% (worse)
Windows MSVC ARM64 BenchmarkInterfaceCall 4.234 ns/op +0.089 ns/op / +2.1% (worse)
Windows MSVC ARM64 BenchmarkRuntimeGetG 1.802 ns/op +0.002 ns/op / +0.1% (worse)
Timer runtime benchmarks
Platform Operation and runtime ns/op vs base
Linux AfterFuncZeroDelivery/Go 909.800 ns/op -5.4 ns/op / -0.6% (better)
Linux AfterFuncZeroDelivery/LLGo 37341 ns/op -2167 ns/op / -5.5% (better)
Linux CreateStop/Go 290 ns/op -9.7 ns/op / -3.2% (better)
Linux CreateStop/LLGo 1603 ns/op +53 ns/op / +3.4% (worse)
Linux RearmStopped/Go 115.900 ns/op +1.1 ns/op / +1.0% (worse)
Linux RearmStopped/LLGo 873.400 ns/op -348.6 ns/op / -28.5% (better)
Linux ResetActive/Go 68.600 ns/op -0.19 ns/op / -0.3% (better)
Linux ResetActive/LLGo 645.600 ns/op -174 ns/op / -21.2% (better)
Linux ResetHeap1024/Go 67.260 ns/op +0.06 ns/op / +0.1% (worse)
Linux ResetHeap1024/LLGo 155.600 ns/op -1.9 ns/op / -1.2% (better)
macOS AfterFuncZeroDelivery/Go 520.300 ns/op +27.5 ns/op / +5.6% (worse)
macOS AfterFuncZeroDelivery/LLGo 37423 ns/op +3332 ns/op / +9.8% (worse)
macOS CreateStop/Go 145.500 ns/op +5.2 ns/op / +3.7% (worse)
macOS CreateStop/LLGo 399.800 ns/op -12.9 ns/op / -3.1% (better)
macOS RearmStopped/Go 64.410 ns/op +2.28 ns/op / +3.7% (worse)
macOS RearmStopped/LLGo 262.300 ns/op -16.3 ns/op / -5.9% (better)
macOS ResetActive/Go 47.130 ns/op -0.08 ns/op / -0.2% (better)
macOS ResetActive/LLGo 160.300 ns/op -11.9 ns/op / -6.9% (better)
macOS ResetHeap1024/Go 46.640 ns/op +2.62 ns/op / +6.0% (worse)
macOS ResetHeap1024/LLGo 76.900 ns/op -9.43 ns/op / -10.9% (better)
Windows MinGW AfterFuncZeroDelivery/Go 547.900 ns/op -2.2 ns/op / -0.4% (better)
Windows MinGW AfterFuncZeroDelivery/LLGo 187531 ns/op +3355 ns/op / +1.8% (worse)
Windows MinGW CreateStop/Go 114.900 ns/op -2.1 ns/op / -1.8% (better)
Windows MinGW CreateStop/LLGo 742.500 ns/op +60.4 ns/op / +8.9% (worse)
Windows MinGW RearmStopped/Go 31.530 ns/op -0.07 ns/op / -0.2% (better)
Windows MinGW RearmStopped/LLGo 241.200 ns/op -2.1 ns/op / -0.9% (better)
Windows MinGW ResetActive/Go 20.090 ns/op +0.06 ns/op / +0.3% (worse)
Windows MinGW ResetActive/LLGo 200.600 ns/op +36.1 ns/op / +21.9% (worse)
Windows MinGW ResetHeap1024/Go 20.510 ns/op +0.01 ns/op / +0.04878% (worse)
Windows MinGW ResetHeap1024/LLGo 119.400 ns/op +2.3 ns/op / +2.0% (worse)
Windows MinGW 386 AfterFuncZeroDelivery/Go 978.500 ns/op -3.9 ns/op / -0.4% (better)
Windows MinGW 386 AfterFuncZeroDelivery/LLGo 483859 ns/op +7688 ns/op / +1.6% (worse)
Windows MinGW 386 CreateStop/Go 251.100 ns/op -5 ns/op / -2.0% (better)
Windows MinGW 386 CreateStop/LLGo 135418 ns/op -1412 ns/op / -1.0% (better)
Windows MinGW 386 RearmStopped/Go 89.880 ns/op -1.04 ns/op / -1.1% (better)
Windows MinGW 386 RearmStopped/LLGo 68919 ns/op +2006 ns/op / +3.0% (worse)
Windows MinGW 386 ResetActive/Go 43.240 ns/op -0.48 ns/op / -1.1% (better)
Windows MinGW 386 ResetActive/LLGo 67145 ns/op +125 ns/op / +0.2% (worse)
Windows MinGW 386 ResetHeap1024/Go 43.820 ns/op -0.22 ns/op / -0.5% (better)
Windows MinGW 386 ResetHeap1024/LLGo 75640 ns/op +933 ns/op / +1.2% (worse)
Windows MinGW ARM64 AfterFuncZeroDelivery/Go 656 ns/op -14.3 ns/op / -2.1% (better)
Windows MinGW ARM64 AfterFuncZeroDelivery/LLGo 143245 ns/op -3475 ns/op / -2.4% (better)
Windows MinGW ARM64 CreateStop/Go 194.900 ns/op -1 ns/op / -0.5% (better)
Windows MinGW ARM64 CreateStop/LLGo 354.600 ns/op -31 ns/op / -8.0% (better)
Windows MinGW ARM64 RearmStopped/Go 70.600 ns/op +0.06 ns/op / +0.1% (worse)
Windows MinGW ARM64 RearmStopped/LLGo 181.500 ns/op -15.3 ns/op / -7.8% (better)
Windows MinGW ARM64 ResetActive/Go 31.040 ns/op -0.09 ns/op / -0.3% (better)
Windows MinGW ARM64 ResetActive/LLGo 113.700 ns/op +2.3 ns/op / +2.1% (worse)
Windows MinGW ARM64 ResetHeap1024/Go 31.100 ns/op +0.01 ns/op / +0.03216% (worse)
Windows MinGW ARM64 ResetHeap1024/LLGo 107.700 ns/op -2.8 ns/op / -2.5% (better)
Windows MSVC AfterFuncZeroDelivery/Go 561.600 ns/op +0.6 ns/op / +0.1% (worse)
Windows MSVC AfterFuncZeroDelivery/LLGo 181038 ns/op +1208 ns/op / +0.7% (worse)
Windows MSVC CreateStop/Go 122.800 ns/op +7.2 ns/op / +6.2% (worse)
Windows MSVC CreateStop/LLGo 452.800 ns/op +22.1 ns/op / +5.1% (worse)
Windows MSVC RearmStopped/Go 31.390 ns/op +0.03 ns/op / +0.1% (worse)
Windows MSVC RearmStopped/LLGo 239.900 ns/op +15.8 ns/op / +7.1% (worse)
Windows MSVC ResetActive/Go 20.180 ns/op +0.04 ns/op / +0.2% (worse)
Windows MSVC ResetActive/LLGo 158.800 ns/op -10.2 ns/op / -6.0% (better)
Windows MSVC ResetHeap1024/Go 20.530 ns/op +0.1 ns/op / +0.5% (worse)
Windows MSVC ResetHeap1024/LLGo 113.800 ns/op -2.6 ns/op / -2.2% (better)
Windows MSVC 386 AfterFuncZeroDelivery/Go 962.700 ns/op +5.2 ns/op / +0.5% (worse)
Windows MSVC 386 AfterFuncZeroDelivery/LLGo 209349 ns/op -2051 ns/op / -1.0% (better)
Windows MSVC 386 CreateStop/Go 192 ns/op -0.3 ns/op / -0.2% (better)
Windows MSVC 386 CreateStop/LLGo 2455 ns/op -66 ns/op / -2.6% (better)
Windows MSVC 386 RearmStopped/Go 63.360 ns/op +0.13 ns/op / +0.2% (worse)
Windows MSVC 386 RearmStopped/LLGo 1750 ns/op 0 ns/op / +0.0%
Windows MSVC 386 ResetActive/Go 38.940 ns/op -0.12 ns/op / -0.3% (better)
Windows MSVC 386 ResetActive/LLGo 3794 ns/op +33 ns/op / +0.9% (worse)
Windows MSVC 386 ResetHeap1024/Go 39.420 ns/op -0.27 ns/op / -0.7% (better)
Windows MSVC 386 ResetHeap1024/LLGo 1095 ns/op +38 ns/op / +3.6% (worse)
Windows MSVC ARM64 AfterFuncZeroDelivery/Go 666.700 ns/op -24.2 ns/op / -3.5% (better)
Windows MSVC ARM64 AfterFuncZeroDelivery/LLGo 147670 ns/op -977 ns/op / -0.7% (better)
Windows MSVC ARM64 CreateStop/Go 203.800 ns/op +6 ns/op / +3.0% (worse)
Windows MSVC ARM64 CreateStop/LLGo 410.200 ns/op +18.4 ns/op / +4.7% (worse)
Windows MSVC ARM64 RearmStopped/Go 70.570 ns/op -0.06 ns/op / -0.1% (better)
Windows MSVC ARM64 RearmStopped/LLGo 202.200 ns/op -2.9 ns/op / -1.4% (better)
Windows MSVC ARM64 ResetActive/Go 30.980 ns/op -0.18 ns/op / -0.6% (better)
Windows MSVC ARM64 ResetActive/LLGo 122.300 ns/op -7.1 ns/op / -5.5% (better)
Windows MSVC ARM64 ResetHeap1024/Go 30.970 ns/op -0.15 ns/op / -0.5% (better)
Windows MSVC ARM64 ResetHeap1024/LLGo 114.600 ns/op -1.5 ns/op / -1.3% (better)

Compared with 610075be0348 measured in the same runner job.

@cpunion
cpunion marked this pull request as ready for review September 30, 2026 07:50
@cpunion cpunion changed the title WIP: Diagnose modernc.org/libc ABI0 wrappers (#2691) plan9asm: support Uint128 signatures in modernc libc assembly wrappers Sep 30, 2026

@fennoai fennoai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Review summary

PR #2694 ("WIP: Diagnose modernc.org/libc ABI0 wrappers", #2691) adds one translation test plus a replace that redirects github.com/xgo-dev/plan9asm to a personal fork. The test is well-structured and consistent with the package's existing tests (mustTestPackage, TranslateSourceModuleForPkg, defer tr.Module.Dispose(), llvm.VerifyModule), and the ABI0 frame arithmetic ($56-52) is internally consistent. The two concerns are the committed fork redirect and a brittle/under-specified IR assertion — both inline below.

Findings: 1 merge-relevant (go.mod fork replace), 2 test-quality. No performance issues found.

Not placeable inline (outside the diff): THIRD_PARTY_NOTICES.md:70 still lists only github.com/xgo-dev/plan9asm, while the effective module graph (go.sum) now builds github.com/cpunion/plan9asm — the provenance notice no longer matches what ships.

Not buildable locally (LLVM headers unavailable), so this was judged by reading, not by running.

Comment thread go.mod Outdated

replace github.com/xgo-dev/llgo/runtime => ./runtime

replace github.com/xgo-dev/plan9asm => github.com/cpunion/plan9asm v0.0.0-20260929013439-34a93b2081cf

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 — a committed replace redirects a first-party compiler dependency to a personal fork. This shadows the github.com/xgo-dev/plan9asm v0.6.1 requirement for every build of the module (not only this test), moving control of compiled codegen from the xgo-dev org to an untagged personal-fork pseudo-version (v0.0.0-...). The shipped code differs from the org release — the module zip hashes differ (fork h1:6gLAPwaW... at go.sum:1 vs org v0.6.1 h1:WcwHdcNK... at go.sum:29) — so this is an unreviewed divergence on a compiler path, not a no-op. The replace also silently overrides any future go get -u of the real module until removed. For a WIP diagnostic, prefer a non-committed override (e.g. go.work) or upstream the fork and bump the require to a tagged release before merge; the fork redirect should not land in committed go.mod.

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Agreed: this replacement must not land on main, and I am leaving this P1 unresolved. I verified the latest official release is still v0.6.1 and reran the regression using a separate modfile without the fork override: it fails with unsupported struct type struct{Lo uint64; Hi uint64}. Removing the override now would break the regression; skipping it would hide the gap. The PR body now explicitly gates merge on an upstream dependency containing the fix, together with the API/ABI0 integration and execution tests. 71d85c0 also addresses the separate provenance finding in THIRD_PARTY_NOTICES.md; the pinned fork LICENSE is byte-identical to the bundled Plan9Asm license. This documentation does not resolve the dependency blocker.

Comment thread internal/plan9asm/uint128_asm_test.go Resolved
Comment thread internal/plan9asm/uint128_asm_test.go Resolved
@github-actions

github-actions Bot commented Sep 30, 2026 •

Copy link
Copy Markdown

LLGo WebAssembly build benchmarks

14705327d6fe | workflow run | long-term charts

WebAssembly output sizes
Example, profile and compiler Wasm module vs base Generated JS glue vs base
cprintf/j32-emscripten/LLGo 147026 B 0 B / +0.0% 88932 B 0 B / +0.0%
cprintf/j32-goos-js/LLGo 145435 B 0 B / +0.0% 72985 B 0 B / +0.0%
cprintf/j64-emscripten-memory64/LLGo 134411 B 0 B / +0.0% 92103 B 0 B / +0.0%
cprintf/w32-goos-wasip1/LLGo 15937 B 0 B / +0.0% 0 B 0 B / 0.0%
cprintf/w32-wasi/LLGo 15937 B 0 B / +0.0% 0 B 0 B / 0.0%
fmtprintf/j32-emscripten/LLGo 1833275 B +131 B / +0.007146% (worse) 119484 B 0 B / +0.0%
fmtprintf/j32-goos-js/Go 2526852 B 0 B / +0.0% 0 B 0 B / 0.0%
fmtprintf/j32-goos-js/LLGo 1897707 B +116 B / +0.006113% (worse) 90155 B 0 B / +0.0%
fmtprintf/j64-emscripten-memory64/LLGo 1700352 B +124 B / +0.007293% (worse) 122077 B 0 B / +0.0%
fmtprintf/w32-goos-wasip1/Go 2500019 B 0 B / +0.0% 0 B 0 B / 0.0%
fmtprintf/w32-goos-wasip1/LLGo 1255959 B 0 B / +0.0% 0 B 0 B / 0.0%
fmtprintf/w32-wasi/LLGo 1256541 B 0 B / +0.0% 0 B 0 B / 0.0%
j32-emscripten/LLGo 146224 B 0 B / +0.0% 88932 B 0 B / +0.0%
j32-goos-js/Go 1895533 B 0 B / +0.0% 0 B 0 B / 0.0%
j32-goos-js/LLGo 144890 B 0 B / +0.0% 72985 B 0 B / +0.0%
j64-emscripten-memory64/LLGo 133664 B 0 B / +0.0% 92103 B 0 B / +0.0%
reflectcall/j32-emscripten/LLGo 1337357 B +136 B / +0.01017% (worse) 95624 B 0 B / +0.0%
reflectcall/j32-goos-js/Go 2191221 B 0 B / +0.0% 0 B 0 B / 0.0%
reflectcall/j32-goos-js/LLGo 1352449 B +135 B / +0.009983% (worse) 79673 B 0 B / +0.0%
reflectcall/j64-emscripten-memory64/LLGo 1224661 B +125 B / +0.01021% (worse) 99045 B 0 B / +0.0%
reflectcall/w32-goos-wasip1/Go 2205707 B 0 B / +0.0% 0 B 0 B / 0.0%
reflectcall/w32-goos-wasip1/LLGo 988896 B 0 B / +0.0% 0 B 0 B / 0.0%
reflectcall/w32-wasi/LLGo 989460 B 0 B / +0.0% 0 B 0 B / 0.0%
w32-goos-wasip1/Go 1909947 B 0 B / +0.0% 0 B 0 B / 0.0%
w32-goos-wasip1/LLGo 18855 B 0 B / +0.0% 0 B 0 B / 0.0%
w32-wasi/LLGo 18855 B 0 B / +0.0% 0 B 0 B / 0.0%
LLGo WebAssembly build measurements
Example and profile Build vs base
j32-emscripten 7.938 s -233 ms / -2.9% (better)
j32-goos-js 7.583 s -553.5 ms / -6.8% (better)
j64-emscripten-memory64 7.025 s -179.3 ms / -2.5% (better)
reflectcall/w32-wasi 25.411 s -247.7 ms / -1.0% (better)
w32-goos-wasip1 3.804 s -159.3 ms / -4.0% (better)
w32-wasi 3.640 s -20.38 ms / -0.6% (better)

Compared with 610075be0348 measured in the same runner job.

@cpunion
cpunion marked this pull request as draft October 1, 2026 02:30
@cpunion cpunion changed the title plan9asm: support Uint128 signatures in modernc libc assembly wrappers plan9asm: integrate PR40 preprocessing, ABI0 regressions and ARM64 fixes Oct 23, 2026
@cpunion
cpunion force-pushed the codex/fix-issue2691-struct-asm-20260929 branch 5 times, most recently from 5cbf9da to f1c1571 Compare October 30, 2026 18:18
@cpunion cpunion changed the title plan9asm: integrate PR40 preprocessing, ABI0 regressions and ARM64 fixes build: integrate Plan9 assembly preprocessing and ABI0 contracts Oct 30, 2026
@cpunion
cpunion force-pushed the codex/fix-issue2691-struct-asm-20260929 branch from f1c1571 to ba60fff Compare October 31, 2026 23:51
@cpunion
cpunion force-pushed the codex/fix-issue2691-struct-asm-20260929 branch from ba60fff to 1470532 Compare November 1, 2026 02:39
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant