test(v4.0.0): execute C@ and C! on the golden model
Both run exactly as written in DECOMPOSITION.md 5.3 and need no change: four bytes to a cell, little-endian, byte address = 4 * word address + byte index, at either cell width. Checked at 32- and 64-bit cells, optimised and ASan+UBSan (`make test`, `make sanitize`): every byte of two adjacent words, eight values including ones wider than a byte, with the other bytes of the word, the upper half of a 64-bit cell and the neighbouring words left untouched. Breaking C!'s mask or C@'s mask fails. Headroom (data under args / return): C@ 6/4, C! 5/4. Test results on the amd64 host only. This is a development check, not acceptance (JUSTIFICATION.md section 16). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5.5
parent
f030edcd08
commit
2e4d1330ea
@@ -330,15 +330,17 @@ Section numbers match the v3 primitive reference.
|
||||
| `-!` | CAP | `a! NEGATE @ + !` |
|
||||
| `2@` | CAP | `a! @+ @` (low cell at `addr`, high at `addr+1`, as in v3) |
|
||||
| `2!` | CAP | `a! SWAP !+ !` |
|
||||
| `C@` | CAP | See below (D-1). |
|
||||
| `C!` | CAP | See below (D-1). |
|
||||
| `C@` | CAP | See below (D-1). Executed on the golden model (2026-10-03). |
|
||||
| `C!` | CAP | See below (D-1). Executed on the golden model (2026-10-03). |
|
||||
| `FILL` | CAP | See below. |
|
||||
| `MOVE` | CAP | `push 2DUP U< IF pop CMOVE> ELSE pop CMOVE THEN` |
|
||||
| `ERASE` | CAP | `0 FILL` |
|
||||
| `CELLS` | IN | Empty (word-addressed). Becomes `2* 2*` if D-1 chooses bytes. |
|
||||
|
||||
```forth
|
||||
\ byte access on a word-addressed node, little-endian
|
||||
\ byte access on a word-addressed node, little-endian: four bytes to a cell at
|
||||
\ either cell width (so compiled code is the same, D-9), byte address = 4 * word
|
||||
\ address + byte index. `@` and `!` inside are the opcodes, addressing through A.
|
||||
: C@ ( baddr -- c )
|
||||
dup 3 and 3 LSHIFT SWAP 2 RSHIFT a! @ SWAP RSHIFT 255 and ;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user