diff options
| author | 2026-10-14 16:47:08 +0330 | |
|---|---|---|
| committer | 2026-10-14 16:47:08 +0330 | |
| commit | 58c6edb92426852253d5f246e16710b636c93c70 (patch) | |
| tree | 7230ee8829cc2c9de12add23460bbb024bec997f /src/runtime | |
| parent | globals: an integer constant initializing a float or f32 global converts to f... (diff) | |
| parent | merge work/jit2: x86-64 jit inline enhancements (diff) | |
Merge branch 'main' into work/spec
Diffstat (limited to 'src/runtime')
| -rw-r--r-- | src/runtime/rt.zc | 4 |
1 files changed, 4 insertions, 0 deletions
diff --git a/src/runtime/rt.zc b/src/runtime/rt.zc index a181387..44f3570 100644 --- a/src/runtime/rt.zc +++ b/src/runtime/rt.zc @@ -87,6 +87,10 @@ enhance ishl(a, b) micro "a = shl a b"; enhance lfa(k) micro "r1 = ld 589824; k = add r1 k"; // 1 when i is outside 0..n-1 (the unsigned compare also catches negative i), else 0. enhance outside(i, n) micro "i = ltu i n; i = xor i 1"; +//: the block length has exactly two definitions, which must agree: the r7 lines of this +//: recipe (the inline check on every backend; the x86-64 and arm64 jits lower it to +//: registers, with nothing pointer-specific of their own) and paylen below (bchk's report). +//: an exact-size check or a new header layout changes those two places and nothing else. // the index check of a pointer, as one instruction: 1 when p is the start of a heap // block (its check word p[-3] is p ^ MAGIC) and the byte or word offset i * m is not // inside the block's payload (q units per word: 1 for word elements, 8 for packed |
