re: ISL bytecode encoding decoded; phase-end call sites located in Stage02

Read the encoding off the interpreter rather than guessing: instruction is a
big-endian u32 whose LOW byte is the opcode (25 of them, table 0x822635FC),
byte[2] is the instruction length -- every handler advances the pc by it -- and
bytes[0..1] are operand kinds. Op 12 is a jump whose operand is relative to the
code base [phase+232], which settles that offsets are code-base-relative for
this opcode. Op 19 is the built-in call: id in word@+4, and word@+8 is a
monotonically increasing STATEMENT id (0x245, 0x248, 0x24A, ...).

Confirmed by disassembling Stage02.ssb: the stream decodes cleanly from the code
base and routines terminate on ret exactly where expected.

Scanning the code region on the call encoding: 2846 call sites, 73 of the 147
built-ins used. The phase-control ones are located -- built-in 6 (end phase) at
12 sites, 62 at 3, 39 (mark last phase) at 8 -- so a phase has several exit
paths, as a mission with win and lose branches should.

New tool tools/re-capture/isl.py with --calls and --to (resync-into-target,
needed because instructions are variable-length so you cannot walk backwards).

Not settled: the 147 built-ins are uncharacterised, so this is structure without
meaning -- we can see THAT a phase ends, not WHAT was tested.
This commit is contained in:
Sylpheed RE agent
2026-08-25 12:21:44 +00:00
parent aa5fe09d01
commit 7b445916bc
3 changed files with 405 additions and 0 deletions

View File

@@ -0,0 +1,130 @@
# Stage02.ssb — ISL built-in call sites
2846 call sites, 73 distinct built-ins
builtin 11 372 site(s)
builtin 69 255 site(s)
builtin 1 216 site(s)
builtin 64 213 site(s)
builtin 30 179 site(s)
builtin 20 167 site(s)
builtin 47 137 site(s)
builtin 15 127 site(s)
builtin 108 117 site(s)
builtin 18 92 site(s)
builtin 12 86 site(s)
builtin 5 83 site(s)
builtin 70 71 site(s)
builtin 92 63 site(s)
builtin 56 52 site(s)
builtin 103 39 site(s)
builtin 105 38 site(s)
builtin 4 34 site(s)
builtin 26 33 site(s)
builtin 91 27 site(s)
builtin 80 25 site(s)
builtin 58 24 site(s)
builtin 79 23 site(s)
builtin 63 21 site(s)
builtin 3 20 site(s)
builtin 116 18 site(s)
builtin 19 18 site(s)
builtin 29 17 site(s)
builtin 118 15 site(s)
builtin 124 15 site(s)
builtin 120 14 site(s)
builtin 8 12 site(s)
builtin 101 12 site(s)
builtin 100 12 site(s)
builtin 93 12 site(s)
builtin 59 12 site(s)
builtin 85 12 site(s)
builtin 6 12 site(s)
builtin 9 12 site(s)
builtin 95 9 site(s)
builtin 115 9 site(s)
builtin 7 9 site(s)
builtin 57 9 site(s)
builtin 48 8 site(s)
builtin 39 8 site(s)
builtin 82 8 site(s)
builtin 90 8 site(s)
builtin 17 6 site(s)
builtin 35 6 site(s)
builtin 10 6 site(s)
builtin 123 5 site(s)
builtin 40 4 site(s)
builtin 137 3 site(s)
builtin 75 3 site(s)
builtin 52 3 site(s)
builtin 38 3 site(s)
builtin 106 3 site(s)
builtin 76 3 site(s)
builtin 14 3 site(s)
builtin 119 3 site(s)
builtin 62 3 site(s)
builtin 81 2 site(s)
builtin 25 2 site(s)
builtin 135 2 site(s)
builtin 78 2 site(s)
builtin 83 2 site(s)
builtin 77 1 site(s)
builtin 127 1 site(s)
builtin 130 1 site(s)
builtin 89 1 site(s)
builtin 117 1 site(s)
builtin 99 1 site(s)
builtin 28 1 site(s)
## the phase-control built-ins, by site
builtin 6 END PHASE 12 site(s): 0x51e4 0x5828 0x6010 0x6260 0x19640 0x19934 0x1ac44 0x2b96c 0x2bfb0 0x2c1e0 0x2cf74 0x2d1dc
builtin 62 force-end 3 site(s): 0x1482c 0x249f0 0x34a10
builtin 39 mark LAST phase 8 site(s): 0x4dfc 0x52c8 0x60fc 0x19258 0x19724 0x2b584 0x2ba50 0x2c054
builtin 40 result=1 4 site(s): 0x5a10 0x1a270 0x2c578 0x2d06c
## disassembly into the first END PHASE
resync from 0x5058
005058: 0000080C jmp len=8 k=00,00 0000507C -> code+0x507C (file 0x50A0)
005060: 01020C00 set.i len=12 k=01,02 00000000 00000042
00506C: 02030C00 set.i len=12 k=02,03 00000000 00000000
005078: 01020C00 set.i len=12 k=01,02 00000000 00000002
005084: 02030C00 set.i len=12 k=02,03 00000004 00000000
005090: 01020C00 set.i len=12 k=01,02 00000000 00000001
00509C: 02030C00 set.i len=12 k=02,03 00000008 00000000
0050A8: 01020C00 set.i len=12 k=01,02 00000000 00000009
0050B4: 02030C00 set.i len=12 k=02,03 0000000C 00000000
0050C0: 01020C00 set.i len=12 k=01,02 00000000 00000001
0050CC: 02030C00 set.i len=12 k=02,03 00000010 00000000
0050D8: 01021001 set.f len=16 k=01,02 00000000 BFF00000 00000000
0050E8: 02030C01 set.f len=12 k=02,03 00000018 00000000
0050F4: 00000C13 call len=12 k=00,00 00000040 00000245 builtin=64
005100: 0000080C jmp len=8 k=00,00 0000507C -> code+0x507C (file 0x50A0)
005108: 0000080C jmp len=8 k=00,00 0000507C -> code+0x507C (file 0x50A0)
005110: 01020C0A op10 len=12 k=01,02 00000000 00000000
00511C: 0000080D op13 len=8 k=00,00 00004D84
005124: 01020C0A op10 len=12 k=01,02 00000000 00000001
005130: 0000080D op13 len=8 k=00,00 00004E2C
005138: 01020C0A op10 len=12 k=01,02 00000000 00000002
005144: 0000080D op13 len=8 k=00,00 00004ED4
00514C: 01020C0A op10 len=12 k=01,02 00000000 00000003
005158: 0000080D op13 len=8 k=00,00 00004F7C
005160: 00000C13 call len=12 k=00,00 00000078 00000248 builtin=120
00516C: 01021001 set.f len=16 k=01,02 00000000 40080000 00000000
00517C: 02030C01 set.f len=12 k=02,03 00000000 00000000
005188: 00000C13 call len=12 k=00,00 0000003B 0000024A builtin=59
005194: 01021001 set.f len=16 k=01,02 00000000 40080000 00000000
0051A4: 02030C01 set.f len=12 k=02,03 00000000 00000000
0051B0: 00000C13 call len=12 k=00,00 00000055 0000024B builtin=85
0051BC: 01021001 set.f len=16 k=01,02 00000000 40080000 00000000
0051CC: 02030C01 set.f len=12 k=02,03 00000000 00000000
0051D8: 00000C13 call len=12 k=00,00 00000004 0000024C builtin=4
0051E4: 00000C13 call len=12 k=00,00 00000006 0000024D builtin=6
0051F0: 00000C13 call len=12 k=00,00 0000000B 0000024E builtin=11
0051FC: 01030C00 set.i len=12 k=01,03 00000000 00000001
005208: 01030C00 set.i len=12 k=01,03 00000004 00000056
005214: 01021001 set.f len=16 k=01,02 00000000 00000000 00000000
005224: 02030C01 set.f len=12 k=02,03 00000008 00000000
005230: 00000C13 call len=12 k=00,00 00000014 00000252 builtin=20
00523C: 01020C0A op10 len=12 k=01,02 00000000 00000001
005248: 0000080E op14 len=8 k=00,00 0000575C
005250: 01020C00 set.i len=12 k=01,02 00000000 00000000
00525C: 02030C00 set.i len=12 k=02,03 00000000 00000000