re: read the ISL branch handlers -- it is a condition-code machine
Closes the backlog item that was the last thing between the flat decode and a per-phase clear condition, and closes isl-builtins.md's standing "op10 + op13 look like a switch -- NOT confirmed". op10 resolves two operands, issues a SIGNED cmp, and writes three condition bits to a bitset at phase+24: bit 0 = EQ, bit 1 = GT, bit 2 = LT. op11 is the same machine for floats via fcmpu. op13-op18 branch on those bits to [phase+232] + word@+4 -- the same phase-relative target form as the unconditional op12: 13 bit0 set beq 16 bits 2 then 0 ble 14 bit0 clear bne 18 bits 1 then 0 bge 15 bit2 set blt 17 bit1 set bgt 13/14/15/17 are byte-identical apart from the bit index and the polarity. All six relations are present and each appears exactly once; that completeness is the check that the reading is right, rather than the usage pattern -- which the item explicitly warned against. Operand order recorded because it is easy to reverse: LHS = (kind byte[1], word@+4), RHS = (kind byte[0], word@+8). Method note in the doc: the jump table at 0x822635FC holds THUNKS, and the handler is the bl target inside each. My first pass guessed handler addresses at a fixed stride, landed mid-function, and produced a 20-line "difference" that was pure misalignment. isl.py names the ops; data/isl-stage02.txt is regenerated and every diff line pairs exactly, only the op-name column changing (op10->cmp.i x5, op13->beq x4, op14->bne x1). data/isl-stage02-phase-ends.txt now shows the phase-3 poll loop reading as one: unit_state(ADT308) -> op23 -> cmp.i -> beq back to 0xFEB4. Left unnamed on purpose: op23 (0x82271C30) and op21 (0x82175C20).
This commit is contained in:
@@ -8,12 +8,12 @@ phase code bases: 0xe4 0x14aa8 0x24b4c
|
||||
15 phase-ending call(s): 12 END_PHASE, 3 FORCE_END_PHASE
|
||||
|
||||
## phase 1 — builtin 6 (END_PHASE) at 0x51E4
|
||||
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
|
||||
005124: 01020C0A cmp.i len=12 k=01,02 00000000 00000001
|
||||
005130: 0000080D beq len=8 k=00,00 00004E2C
|
||||
005138: 01020C0A cmp.i len=12 k=01,02 00000000 00000002
|
||||
005144: 0000080D beq len=8 k=00,00 00004ED4
|
||||
00514C: 01020C0A cmp.i len=12 k=01,02 00000000 00000003
|
||||
005158: 0000080D beq len=8 k=00,00 00004F7C
|
||||
005160: 00000C13 call len=12 k=00,00 00000078 00000248 wait_cmds_drained
|
||||
00516C: 01021001 set.f len=16 k=01,02 00000000 40080000 00000000 special[0] = imm 3
|
||||
00517C: 02030C01 set.f len=12 k=02,03 00000000 00000000 local[0] = special[0]
|
||||
@@ -32,12 +32,12 @@ phase code bases: 0xe4 0x14aa8 0x24b4c
|
||||
005224: 02030C01 set.f len=12 k=02,03 00000008 00000000 local[8] = special[0]
|
||||
|
||||
## phase 1 — builtin 6 (END_PHASE) at 0x5828
|
||||
005768: 01020C0A op10 len=12 k=01,02 00000000 00000003
|
||||
005774: 0000080D op13 len=8 k=00,00 00005448
|
||||
00577C: 01020C0A op10 len=12 k=01,02 00000000 00000004
|
||||
005788: 0000080D op13 len=8 k=00,00 000054F0
|
||||
005790: 01020C0A op10 len=12 k=01,02 00000000 00000005
|
||||
00579C: 0000080D op13 len=8 k=00,00 00005598
|
||||
005768: 01020C0A cmp.i len=12 k=01,02 00000000 00000003
|
||||
005774: 0000080D beq len=8 k=00,00 00005448
|
||||
00577C: 01020C0A cmp.i len=12 k=01,02 00000000 00000004
|
||||
005788: 0000080D beq len=8 k=00,00 000054F0
|
||||
005790: 01020C0A cmp.i len=12 k=01,02 00000000 00000005
|
||||
00579C: 0000080D beq len=8 k=00,00 00005598
|
||||
0057A4: 00000C13 call len=12 k=00,00 00000078 00000272 wait_cmds_drained
|
||||
0057B0: 01021001 set.f len=16 k=01,02 00000000 40080000 00000000 special[0] = imm 3
|
||||
0057C0: 02030C01 set.f len=12 k=02,03 00000000 00000000 local[0] = special[0]
|
||||
@@ -128,12 +128,12 @@ phase code bases: 0xe4 0x14aa8 0x24b4c
|
||||
014858: 0000081A op26? len=8 k=00,00 00000000
|
||||
|
||||
## phase 2 — builtin 6 (END_PHASE) at 0x19640
|
||||
019580: 01020C0A op10 len=12 k=01,02 00000000 00000001
|
||||
01958C: 0000080D op13 len=8 k=00,00 000048C4
|
||||
019594: 01020C0A op10 len=12 k=01,02 00000000 00000002
|
||||
0195A0: 0000080D op13 len=8 k=00,00 0000496C
|
||||
0195A8: 01020C0A op10 len=12 k=01,02 00000000 00000003
|
||||
0195B4: 0000080D op13 len=8 k=00,00 00004A14
|
||||
019580: 01020C0A cmp.i len=12 k=01,02 00000000 00000001
|
||||
01958C: 0000080D beq len=8 k=00,00 000048C4
|
||||
019594: 01020C0A cmp.i len=12 k=01,02 00000000 00000002
|
||||
0195A0: 0000080D beq len=8 k=00,00 0000496C
|
||||
0195A8: 01020C0A cmp.i len=12 k=01,02 00000000 00000003
|
||||
0195B4: 0000080D beq len=8 k=00,00 00004A14
|
||||
0195BC: 00000C13 call len=12 k=00,00 00000078 00000204 wait_cmds_drained
|
||||
0195C8: 01021001 set.f len=16 k=01,02 00000000 40080000 00000000 special[0] = imm 3
|
||||
0195D8: 02030C01 set.f len=12 k=02,03 00000000 00000000 local[0] = special[0]
|
||||
@@ -200,7 +200,7 @@ phase code bases: 0xe4 0x14aa8 0x24b4c
|
||||
01AC74: 01030C00 set.i len=12 k=01,03 00000000 00000001 local[0] = imm 0x1
|
||||
|
||||
## phase 2 — builtin 62 (FORCE_END_PHASE) at 0x249F0
|
||||
024938: 0000080E op14 len=8 k=00,00 0000FF44
|
||||
024938: 0000080E bne len=8 k=00,00 0000FF44
|
||||
024940: 01020C00 set.i len=12 k=01,02 00000000 000000F1 special[0] = imm 0xF1
|
||||
02494C: 02030C00 set.i len=12 k=02,03 00000000 00000000 local[0] = special[0]
|
||||
024958: 01020C00 set.i len=12 k=01,02 00000000 00000000 special[0] = imm 0x0
|
||||
@@ -224,12 +224,12 @@ phase code bases: 0xe4 0x14aa8 0x24b4c
|
||||
024A1C: 0000081A op26? len=8 k=00,00 00000000
|
||||
|
||||
## phase 3 — builtin 6 (END_PHASE) at 0x2B96C
|
||||
02B8AC: 01020C0A op10 len=12 k=01,02 00000000 00000001
|
||||
02B8B8: 0000080D op13 len=8 k=00,00 00006B4C
|
||||
02B8C0: 01020C0A op10 len=12 k=01,02 00000000 00000002
|
||||
02B8CC: 0000080D op13 len=8 k=00,00 00006BF4
|
||||
02B8D4: 01020C0A op10 len=12 k=01,02 00000000 00000003
|
||||
02B8E0: 0000080D op13 len=8 k=00,00 00006C9C
|
||||
02B8AC: 01020C0A cmp.i len=12 k=01,02 00000000 00000001
|
||||
02B8B8: 0000080D beq len=8 k=00,00 00006B4C
|
||||
02B8C0: 01020C0A cmp.i len=12 k=01,02 00000000 00000002
|
||||
02B8CC: 0000080D beq len=8 k=00,00 00006BF4
|
||||
02B8D4: 01020C0A cmp.i len=12 k=01,02 00000000 00000003
|
||||
02B8E0: 0000080D beq len=8 k=00,00 00006C9C
|
||||
02B8E8: 00000C13 call len=12 k=00,00 00000078 00000270 wait_cmds_drained
|
||||
02B8F4: 01021001 set.f len=16 k=01,02 00000000 40080000 00000000 special[0] = imm 3
|
||||
02B904: 02030C01 set.f len=12 k=02,03 00000000 00000000 local[0] = special[0]
|
||||
@@ -248,12 +248,12 @@ phase code bases: 0xe4 0x14aa8 0x24b4c
|
||||
02B9AC: 02030C01 set.f len=12 k=02,03 00000008 00000000 local[8] = special[0]
|
||||
|
||||
## phase 3 — builtin 6 (END_PHASE) at 0x2BFB0
|
||||
02BEF0: 01020C0A op10 len=12 k=01,02 00000000 00000003
|
||||
02BEFC: 0000080D op13 len=8 k=00,00 00007168
|
||||
02BF04: 01020C0A op10 len=12 k=01,02 00000000 00000004
|
||||
02BF10: 0000080D op13 len=8 k=00,00 00007210
|
||||
02BF18: 01020C0A op10 len=12 k=01,02 00000000 00000005
|
||||
02BF24: 0000080D op13 len=8 k=00,00 000072B8
|
||||
02BEF0: 01020C0A cmp.i len=12 k=01,02 00000000 00000003
|
||||
02BEFC: 0000080D beq len=8 k=00,00 00007168
|
||||
02BF04: 01020C0A cmp.i len=12 k=01,02 00000000 00000004
|
||||
02BF10: 0000080D beq len=8 k=00,00 00007210
|
||||
02BF18: 01020C0A cmp.i len=12 k=01,02 00000000 00000005
|
||||
02BF24: 0000080D beq len=8 k=00,00 000072B8
|
||||
02BF2C: 00000C13 call len=12 k=00,00 00000078 0000029A wait_cmds_drained
|
||||
02BF38: 01021001 set.f len=16 k=01,02 00000000 40080000 00000000 special[0] = imm 3
|
||||
02BF48: 02030C01 set.f len=12 k=02,03 00000000 00000000 local[0] = special[0]
|
||||
@@ -266,8 +266,8 @@ phase code bases: 0xe4 0x14aa8 0x24b4c
|
||||
02BFA4: 00000C13 call len=12 k=00,00 00000004 0000029E wait_s(3)
|
||||
02BFB0: 00000C13 call len=12 k=00,00 00000006 0000029F END_PHASE
|
||||
02BFBC: 00000C13 call len=12 k=00,00 0000000B 000002A0 end_coroutine
|
||||
02BFC8: 01000C0A op10 len=12 k=01,00 00000070 00000004
|
||||
02BFD4: 0000080F op15 len=8 k=00,00 000076AC
|
||||
02BFC8: 01000C0A cmp.i len=12 k=01,00 00000070 00000004
|
||||
02BFD4: 0000080F blt len=8 k=00,00 000076AC
|
||||
02BFDC: 01020C00 set.i len=12 k=01,02 00000000 00000000 special[0] = imm 0x0
|
||||
02BFE8: 02030C00 set.i len=12 k=02,03 00000000 00000000 local[0] = special[0]
|
||||
|
||||
@@ -300,8 +300,8 @@ phase code bases: 0xe4 0x14aa8 0x24b4c
|
||||
02CEC8: 02000415 op21 len=4 k=02,00
|
||||
02CECC: 00000C13 call len=12 k=00,00 00000063 00000306 builtin99
|
||||
02CED8: 00020417 op23 len=4 k=00,02
|
||||
02CEDC: 02020C0A op10 len=12 k=02,02 00000000 00000001
|
||||
02CEE8: 0000080D op13 len=8 k=00,00 000083B0
|
||||
02CEDC: 02020C0A cmp.i len=12 k=02,02 00000000 00000001
|
||||
02CEE8: 0000080D beq len=8 k=00,00 000083B0
|
||||
02CEF0: 01000C00 set.i len=12 k=01,00 00000074 00000002 global[116] = imm 0x2
|
||||
02CEFC: 01021001 set.f len=16 k=01,02 00000000 40080000 00000000 special[0] = imm 3
|
||||
02CF0C: 02030C01 set.f len=12 k=02,03 00000000 00000000 local[0] = special[0]
|
||||
@@ -344,10 +344,10 @@ phase code bases: 0xe4 0x14aa8 0x24b4c
|
||||
02D210: 01021001 set.f len=16 k=01,02 00000000 00000000 00000000 special[0] = imm 0
|
||||
|
||||
## phase 3 — builtin 62 (FORCE_END_PHASE) at 0x34A10
|
||||
034974: 0000080D op13 len=8 k=00,00 0000FE3C
|
||||
034974: 0000080D beq len=8 k=00,00 0000FE3C
|
||||
03497C: 00000C13 call len=12 k=00,00 0000000B 00000728 end_coroutine
|
||||
034988: 01000C0A op10 len=12 k=01,00 00000014 00000007
|
||||
034994: 0000080E op14 len=8 k=00,00 0000FEB4
|
||||
034988: 01000C0A cmp.i len=12 k=01,00 00000014 00000007
|
||||
034994: 0000080E bne len=8 k=00,00 0000FEB4
|
||||
03499C: 01020C00 set.i len=12 k=01,02 00000000 00000001 special[0] = imm 0x1
|
||||
0349A8: 02020C00 set.i len=12 k=02,02 00000001 00000000 special[1] = special[0]
|
||||
0349B4: 02000415 op21 len=4 k=02,00
|
||||
@@ -355,8 +355,8 @@ phase code bases: 0xe4 0x14aa8 0x24b4c
|
||||
0349C4: 01030C00 set.i len=12 k=01,03 00000004 00000049 local[4] = imm 0x49
|
||||
0349D0: 00000C13 call len=12 k=00,00 00000045 0000072C unit_state(ADT308)
|
||||
0349DC: 00020417 op23 len=4 k=00,02
|
||||
0349E0: 02020C0A op10 len=12 k=02,02 00000000 00000001
|
||||
0349EC: 0000080D op13 len=8 k=00,00 0000FEB4
|
||||
0349E0: 02020C0A cmp.i len=12 k=02,02 00000000 00000001
|
||||
0349EC: 0000080D beq len=8 k=00,00 0000FEB4
|
||||
0349F4: 00000C13 call len=12 k=00,00 0000000B 0000072D end_coroutine
|
||||
034A00: 00000C13 call len=12 k=00,00 0000000B 00000731 end_coroutine
|
||||
034A0C: 00000414 ret len=4 k=00,00
|
||||
|
||||
@@ -150,14 +150,14 @@ resync from 0x5058
|
||||
0050F4: 00000C13 call len=12 k=00,00 00000040 00000245 request_script_message(MSG_VOICE_D_257, 0x2, 0x1, 0x9, 0x1, -1)
|
||||
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
|
||||
005110: 01020C0A cmp.i len=12 k=01,02 00000000 00000000
|
||||
00511C: 0000080D beq len=8 k=00,00 00004D84
|
||||
005124: 01020C0A cmp.i len=12 k=01,02 00000000 00000001
|
||||
005130: 0000080D beq len=8 k=00,00 00004E2C
|
||||
005138: 01020C0A cmp.i len=12 k=01,02 00000000 00000002
|
||||
005144: 0000080D beq len=8 k=00,00 00004ED4
|
||||
00514C: 01020C0A cmp.i len=12 k=01,02 00000000 00000003
|
||||
005158: 0000080D beq len=8 k=00,00 00004F7C
|
||||
005160: 00000C13 call len=12 k=00,00 00000078 00000248 wait_cmds_drained
|
||||
00516C: 01021001 set.f len=16 k=01,02 00000000 40080000 00000000 special[0] = imm 3
|
||||
00517C: 02030C01 set.f len=12 k=02,03 00000000 00000000 local[0] = special[0]
|
||||
@@ -175,8 +175,8 @@ resync from 0x5058
|
||||
005214: 01021001 set.f len=16 k=01,02 00000000 00000000 00000000 special[0] = imm 0
|
||||
005224: 02030C01 set.f len=12 k=02,03 00000008 00000000 local[8] = special[0]
|
||||
005230: 00000C13 call len=12 k=00,00 00000014 00000252 hp_pct_test(TCN004, 0)
|
||||
00523C: 01020C0A op10 len=12 k=01,02 00000000 00000001
|
||||
005248: 0000080E op14 len=8 k=00,00 0000575C
|
||||
00523C: 01020C0A cmp.i len=12 k=01,02 00000000 00000001
|
||||
005248: 0000080E bne len=8 k=00,00 0000575C
|
||||
005250: 01020C00 set.i len=12 k=01,02 00000000 00000000 special[0] = imm 0x0
|
||||
00525C: 02030C00 set.i len=12 k=02,03 00000000 00000000 local[0] = special[0]
|
||||
005268: 00000C13 call len=12 k=00,00 00000074 00000253 builtin116(0x0)
|
||||
|
||||
Reference in New Issue
Block a user