The first UM/MOD was exact but called 0<, U<, SWAP and OR inside its loop, so it left its caller only 3 return-stack entries. SM/REM pushes two signs before calling it, so under /MOD, M/MOD or */MOD the caller's return address would be silently overwritten (D-2 circular stacks). The loop now makes no calls. It branches on hi's top bit with -if, does the unsigned hi' >= d test as U< does but with in-line sign tests, subtracts with `inv a + inv`, and sets the quotient bit with `1 +` on an even lo'. The final SWAP is in line. Measured on the golden model at 32- and 64-bit cells: headroom data 3 -> 6 cells under args, return 3 -> 6 entries speed ~1355-1605 -> ~227-313 instruction words per call Still exact for every uhi < ud (edge-vector triples and 20000 random cases, optimised and ASan+UBSan). Retargeting each of the four in-loop branches to the wrong label fails more than 12000 checks each. DECOMPOSITION.md: section 4 UM/MOD replaced, with its derivation and stack limits. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
v4/
StarForth v4: the 32-instruction F18-derived core. The design lives in
docs/v4.0.0/JUSTIFICATION.md (why) and docs/v4.0.0/DECOMPOSITION.md
(every v3 word mapped to a v4 fate).
The first deliverable is the hosted C99 golden model (JUSTIFICATION.md §10,
step 1). It must pass POST and hold K≡1.0 with 32- and 64-bit cells on all
three host ISAs.
What exists so far is the single node: registers, circular stacks, memory, all
32 opcodes, and per-opcode and per-call-target heat. make -C v4 test builds
and runs the tests at both cell widths; make -C v4 sanitize repeats them
under ASan and UBSan. There is no compiler capsule, no POST and no K
measurement yet.