feat(phase-31): S79 #9 (7) — ov_SC05_010: func_8017FFA8 (88 ins, 6-way jtbl switch) banked from a Sonnet agent's fresh draft (loop index s32 not s16 — §241 fused sign-extend; the D_801922B8 lookup into its own temp before the found/zero stores); tail jtbl carve at gate time; worktree gate + in-tree byte-identical

This commit is contained in:
Drew T
2026-09-04 19:45:16 -06:00
parent cdf50f96d7
commit 96c0fc02a7
3 changed files with 74 additions and 6 deletions
+2 -2
View File
@@ -3894,7 +3894,7 @@ ov_SC05_010_ELF := $(ov_SC05_010_OUT).elf
ov_SC05_010_MAPFILE := $(ov_SC05_010_OUT).map
ov_SC05_010_LD_SCRIPT := $(ov_SC05_010_OUT).ld
ov_SC05_010_SPLAT_YAML := config/splat.ov_SC05_010.yaml
ov_SC05_010_JTBL_INTERLEAVE := --order tail.data.o,ov_SC05_010.o,ov_SC05_010_jr_8012ACE0.o,tail2.data.o,ov_SC05_010_jr_80135888.o,tail3.data.o,ov_SC05_010_jr_80135A4C.o,tail4.data.o,ov_SC05_010_jr_80135D20.o,tail5.data.o,ov_SC05_010_jr_801380E0.o,ov_SC05_010_o0c.o,tail6.data.o,ov_SC05_010_jr_8013F350.o,tail7.data.o,ov_SC05_010_jr_8013FFD8.o,tail8.data.o,ov_SC05_010_jr_80140608.o,tail9.data.o,ov_SC05_010_jr_8015444C.o,ov_SC05_010_jr_80154C24.o,ov_SC05_010_jr_801588CC.o,ov_SC05_010_jr_80159C84.o,tail10.data.o,ov_SC05_010_jr_8015A3C8.o,tail11.data.o,ov_SC05_010_jr_8015AE2C.o,tail12.data.o,ov_SC05_010_jr_8015C32C.o,tail13.data.o,ov_SC05_010_jr_8016AB6C.o,tail14.data.o,ov_SC05_010_jr_80171B4C.o,ov_SC05_010_jr_801734BC.o,tail15.data.o,ov_SC05_010_jr_801789AC.o,ov_SC05_010_jr_80178D40.o,tail16.data.o,ov_SC05_010_jr_8017A4AC.o,tail17.data.o,ov_SC05_010_jr_8017AE2C.o,tail18.data.o,ov_SC05_010_jr_8017C8D0.o,tail19.data.o,ov_SC05_010_jr_80180F84.o,ov_SC05_010_jr_80181CDC.o,tail20.data.o,ov_SC05_010_jr_8018473C.o,tail21.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve
ov_SC05_010_JTBL_INTERLEAVE := --order tail.data.o,ov_SC05_010.o,ov_SC05_010_jr_8012ACE0.o,tail2.data.o,ov_SC05_010_jr_80135888.o,tail3.data.o,ov_SC05_010_jr_80135A4C.o,tail4.data.o,ov_SC05_010_jr_80135D20.o,tail5.data.o,ov_SC05_010_jr_801380E0.o,ov_SC05_010_o0c.o,tail6.data.o,ov_SC05_010_jr_8013F350.o,tail7.data.o,ov_SC05_010_jr_8013FFD8.o,tail8.data.o,ov_SC05_010_jr_80140608.o,tail9.data.o,ov_SC05_010_jr_8015444C.o,ov_SC05_010_jr_80154C24.o,ov_SC05_010_jr_801588CC.o,ov_SC05_010_jr_80159C84.o,tail10.data.o,ov_SC05_010_jr_8015A3C8.o,tail11.data.o,ov_SC05_010_jr_8015AE2C.o,tail12.data.o,ov_SC05_010_jr_8015C32C.o,tail13.data.o,ov_SC05_010_jr_8016AB6C.o,tail14.data.o,ov_SC05_010_jr_80171B4C.o,ov_SC05_010_jr_801734BC.o,tail15.data.o,ov_SC05_010_jr_801789AC.o,ov_SC05_010_jr_80178D40.o,tail16.data.o,ov_SC05_010_jr_8017A4AC.o,tail17.data.o,ov_SC05_010_jr_8017AE2C.o,tail18.data.o,ov_SC05_010_jr_8017C8D0.o,ov_SC05_010_jr_80180F84.o,ov_SC05_010_jr_80181CDC.o,tail19.data.o,ov_SC05_010_jr_8018473C.o,tail20.data.o,trailing.o # Phase-26 §8 jtbl-rodata carve
build/src/ov_SC05_010/ov_SC05_010.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x14
build/src/ov_SC05_010/ov_SC05_010_jr_8012ACE0.o: JTBL_PADS := 0,0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0xcc,+0xe0
build/src/ov_SC05_010/ov_SC05_010_jr_80135D20.o: JTBL_PADS := 0,4 # §8e pads (jtbl_carve.py) tables=+0x0,+0x18
@@ -3907,7 +3907,7 @@ build/src/ov_SC05_010/ov_SC05_010_jr_80159C84.o: JTBL_PADS := 0,4 # §8e pads (
build/src/ov_SC05_010/ov_SC05_010_jr_8015AE2C.o: JTBL_PADS := 0,4 # §8e pads (jtbl_carve.py) tables=+0x0,+0x20
build/src/ov_SC05_010/ov_SC05_010_jr_8016AB6C.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x20
build/src/ov_SC05_010/ov_SC05_010_jr_80178D40.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x178
build/src/ov_SC05_010/ov_SC05_010_jr_8017C8D0.o: JTBL_PADS := 0,0,4,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x20,+0x48,+0x60
build/src/ov_SC05_010/ov_SC05_010_jr_8017C8D0.o: JTBL_PADS := 0,0,4,0,4 # §8e pads (jtbl_carve.py) tables=+0x0,+0x20,+0x48,+0x60,+0x78
build/src/ov_SC05_010/ov_SC05_010_jr_80181CDC.o: JTBL_PADS := 0,0 # §8e pads (jtbl_carve.py) tables=+0x0,+0x18
build/src/ov_SC05_010/ov_SC05_010_o0c.o: JTBL_PADS := 0,4,4,4 # §8e pads (jtbl_carve.py) tables=+0x0,+0x38,+0xa8,+0x118
ov_SC05_010_CHECK_SHA := config/check.ov_SC05_010.sha
+2 -3
View File
@@ -167,12 +167,11 @@ segments:
- [0x9d7f8, .rodata, ov_SC05_010_jr_8017AE2C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py)
- [0x9d80c, data, tail18]
- [0x9d944, .rodata, ov_SC05_010_jr_8017C8D0] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py)
- [0x9d9b8, data, tail19]
- [0x9d9d4, .rodata, ov_SC05_010_jr_80180F84] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py)
- [0x9d9f4, .rodata, ov_SC05_010_jr_80181CDC] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py)
- [0x9da28, data, tail20]
- [0x9da28, data, tail19]
- [0x9da34, .rodata, ov_SC05_010_jr_8018473C] # Phase-26 §8 jtbl-rodata carve (jtbl_carve.py)
- [0x9da48, data, tail21]
- [0x9da48, data, tail20]
- [0x9FED4, bin, trailing] # final 3 bytes (EOF not 4-aligned; spimdisasm drops a partial word)
- [0x9FED7] # EOF marker = the 0.4.dec byte length
# @TRAILING@ (above) is replaced by tools/new_overlay.sh: for a non-4-aligned overlay it becomes
+70 -1
View File
@@ -4756,7 +4756,76 @@ void func_8017FDE0(s32 param_1)
}
INCLUDE_ASM("asm/ov_SC05_010/nonmatchings/ov_SC05_010_jr_8017C8D0", func_8017FFA8);
void func_8017FFA8(s32 param_1)
{
extern volatile s32 D_801C7E30;
extern volatile s32 D_801C7E4C;
extern s32 D_801C7E60;
extern u8 D_80192478[];
extern u16 D_801922B8;
extern u16 D_80126B62;
extern s32 D_8019231C;
extern s32 func_8012C588(s32 a0, s32 a1);
extern s32 func_80178B18(s32 param_1, s32 param_2);
extern void func_801746DC(void);
extern int func_80178970(void);
extern void func_80178D18(void);
s32 found;
s32 i;
s32 *tbl;
s16 *b62;
s32 q;
s32 sub;
s32 a;
u16 b;
u16 lookup;
switch (*(u16 *)(param_1 + 0x34)) {
case 0:
found = 0;
i = 0;
tbl = (s32 *)&D_801C7E30;
b62 = (s16 *)&D_80126B62;
for (; i < 6; i++) {
q = tbl[D_80192478[i]];
sub = *(s32 *)(q + 0x6C);
if (*(u8 *)(sub + 0x74) != 0) {
a = *(s16 *)(sub + 0x70);
b = *(u16 *)(sub + 0xA);
lookup = *(u16 *)((u8 *)&D_801922B8 + (a << 4));
found = 1;
*(s32 *)((u8 *)b62 + 0xA) = 0;
*b62 = b + lookup;
}
}
if (!found) {
break;
}
func_80178B18(param_1, (s32)&D_8019231C);
func_801746DC();
goto tail_inc;
case 4:
D_801C7E60 = func_8012C588(0x27C, param_1);
/* fallthrough */
case 2:
tail_inc:
*(u16 *)(param_1 + 0x34) += 1;
break;
case 1:
case 3:
case 5:
break;
}
if (((s32 (*)(s32))func_80178970)(param_1)) {
((void (*)(s32))func_80178D18)(param_1);
*(u16 *)(param_1 + 2) = 1;
*(u16 *)(param_1 + 0x34) = 0;
*(s32 *)(param_1 + 0x1C) = 0x1E;
*(s32 *)(D_801C7E4C + 0xE0) = 0;
}
}
extern s32 *D_80126B78;