feat(phase-30 S48-0b): jtbl family func_8012AAAC — 3/3 blocked-binary siblings banked

This commit is contained in:
Drew T
2026-08-11 15:48:09 -06:00
parent bda1adcd6e
commit b80ccb2012
7 changed files with 252 additions and 6 deletions
+82 -1
View File
@@ -911,7 +911,88 @@ DEFINE_func_8012A908() /* dedup: shared engine-core @0x8012a908 (src/shared) */
DEFINE_func_8012A988() /* dedup: shared engine-core @0x8012a988 (src/shared) */
INCLUDE_ASM("asm/ov_MAIN_012/nonmatchings/ov_MAIN_012", func_8012AAAC);
extern void func_8012AAAC(void *arg0);
void func_8012AAAC(void *arg0) {
void *ptr;
s32 link;
s32 next;
s32 saved;
s32 cnt;
s32 back;
s32 head;
M2C_FIELD(arg0, u16 *, 0x72) = (u16) (M2C_FIELD(arg0, u16 *, 0x72) & 0xBFFF);
ptr = (void *) (M2C_FIELD(arg0, s32 *, 0x90) + (M2C_FIELD(arg0, s32 *, 0x94) * 8));
if (M2C_FIELD(ptr, s16 *, 4) < 0) {
switch (M2C_FIELD(ptr, s16 *, 4)) {
case -2:
link = M2C_FIELD(arg0, s32 *, 0x9C);
if (link == 0) {
M2C_FIELD(arg0, s16 *, 0x98) = 0;
break;
}
goto pop;
case -1:
link = M2C_FIELD(arg0, s32 *, 0x9C);
if (link != 0) {
pop:
back = M2C_FIELD(arg0, s16 *, 0x9A);
M2C_FIELD(arg0, s32 *, 0x90) = link;
M2C_FIELD(arg0, s32 *, 0x9C) = 0;
M2C_FIELD(arg0, s16 *, 0x9A) = 0;
M2C_FIELD(arg0, s32 *, 0x94) = back;
func_8012AAAC(arg0);
break;
}
M2C_FIELD(arg0, s32 *, 0x94) = 0;
func_8012AAAC(arg0);
M2C_FIELD(arg0, u16 *, 0x72) = (u16) (M2C_FIELD(arg0, u16 *, 0x72) | 0x4000);
break;
case -4:
head = M2C_FIELD(ptr, s32 *, 0);
M2C_FIELD(arg0, s32 *, 0x94) = 0;
M2C_FIELD(arg0, s32 *, 0x9C) = 0;
M2C_FIELD(arg0, s16 *, 0x9A) = 0;
M2C_FIELD(arg0, s32 *, 0x90) = head;
M2C_FIELD(arg0, u16 *, 0x72) = (u16) (M2C_FIELD(arg0, u16 *, 0x72) & 0xF9FF);
func_8012AAAC(arg0);
break;
case -3:
cnt = M2C_FIELD(arg0, s32 *, 0x94) + 1;
M2C_FIELD(arg0, s32 *, 0x94) = cnt;
if (M2C_FIELD(arg0, s32 *, 0x9C) != 0) {
func_8012AAAC(arg0);
break;
}
saved = M2C_FIELD(arg0, s32 *, 0x90);
next = M2C_FIELD(ptr, s32 *, 0);
M2C_FIELD(arg0, s32 *, 0x94) = 0;
M2C_FIELD(arg0, s32 *, 0x9C) = 0;
M2C_FIELD(arg0, s16 *, 0x9A) = 0;
M2C_FIELD(arg0, s32 *, 0x90) = next;
M2C_FIELD(arg0, u16 *, 0x72) = (u16) (M2C_FIELD(arg0, u16 *, 0x72) & 0xF9FF);
func_8012AAAC(arg0);
M2C_FIELD(arg0, s32 *, 0x9C) = saved;
M2C_FIELD(arg0, s16 *, 0x9A) = (s16) cnt;
break;
case -50:
M2C_FIELD(arg0, s32 *, 0x94) = M2C_FIELD(arg0, s32 *, 0x94) + 1;
func_8012AAAC(arg0);
M2C_FIELD(arg0, u16 *, 0x72) = (u16) (M2C_FIELD(arg0, u16 *, 0x72) | 0x2000);
break;
case -5:
M2C_FIELD(arg0, u16 *, 0x72) = (u16) (M2C_FIELD(arg0, u16 *, 0x72) | 0x400);
M2C_FIELD(arg0, s32 *, 0x94) = M2C_FIELD(arg0, s32 *, 0x94) - 1;
func_8012AAAC(arg0);
break;
}
} else {
M2C_FIELD(M2C_FIELD(arg0, void **, 0x20), s32 *, 0x20) = M2C_FIELD(ptr, s32 *, 0);
M2C_FIELD(arg0, s16 *, 0x98) = M2C_FIELD(ptr, s16 *, 4);
}
}
+82 -1
View File
@@ -894,7 +894,88 @@ DEFINE_func_8012A908() /* dedup: shared engine-core @0x8012a908 (src/shared) */
DEFINE_func_8012A988() /* dedup: shared engine-core @0x8012a988 (src/shared) */
INCLUDE_ASM("asm/ov_SC02_037/nonmatchings/ov_SC02_037", func_8012AAAC);
extern void func_8012AAAC(void *arg0);
void func_8012AAAC(void *arg0) {
void *ptr;
s32 link;
s32 next;
s32 saved;
s32 cnt;
s32 back;
s32 head;
M2C_FIELD(arg0, u16 *, 0x72) = (u16) (M2C_FIELD(arg0, u16 *, 0x72) & 0xBFFF);
ptr = (void *) (M2C_FIELD(arg0, s32 *, 0x90) + (M2C_FIELD(arg0, s32 *, 0x94) * 8));
if (M2C_FIELD(ptr, s16 *, 4) < 0) {
switch (M2C_FIELD(ptr, s16 *, 4)) {
case -2:
link = M2C_FIELD(arg0, s32 *, 0x9C);
if (link == 0) {
M2C_FIELD(arg0, s16 *, 0x98) = 0;
break;
}
goto pop;
case -1:
link = M2C_FIELD(arg0, s32 *, 0x9C);
if (link != 0) {
pop:
back = M2C_FIELD(arg0, s16 *, 0x9A);
M2C_FIELD(arg0, s32 *, 0x90) = link;
M2C_FIELD(arg0, s32 *, 0x9C) = 0;
M2C_FIELD(arg0, s16 *, 0x9A) = 0;
M2C_FIELD(arg0, s32 *, 0x94) = back;
func_8012AAAC(arg0);
break;
}
M2C_FIELD(arg0, s32 *, 0x94) = 0;
func_8012AAAC(arg0);
M2C_FIELD(arg0, u16 *, 0x72) = (u16) (M2C_FIELD(arg0, u16 *, 0x72) | 0x4000);
break;
case -4:
head = M2C_FIELD(ptr, s32 *, 0);
M2C_FIELD(arg0, s32 *, 0x94) = 0;
M2C_FIELD(arg0, s32 *, 0x9C) = 0;
M2C_FIELD(arg0, s16 *, 0x9A) = 0;
M2C_FIELD(arg0, s32 *, 0x90) = head;
M2C_FIELD(arg0, u16 *, 0x72) = (u16) (M2C_FIELD(arg0, u16 *, 0x72) & 0xF9FF);
func_8012AAAC(arg0);
break;
case -3:
cnt = M2C_FIELD(arg0, s32 *, 0x94) + 1;
M2C_FIELD(arg0, s32 *, 0x94) = cnt;
if (M2C_FIELD(arg0, s32 *, 0x9C) != 0) {
func_8012AAAC(arg0);
break;
}
saved = M2C_FIELD(arg0, s32 *, 0x90);
next = M2C_FIELD(ptr, s32 *, 0);
M2C_FIELD(arg0, s32 *, 0x94) = 0;
M2C_FIELD(arg0, s32 *, 0x9C) = 0;
M2C_FIELD(arg0, s16 *, 0x9A) = 0;
M2C_FIELD(arg0, s32 *, 0x90) = next;
M2C_FIELD(arg0, u16 *, 0x72) = (u16) (M2C_FIELD(arg0, u16 *, 0x72) & 0xF9FF);
func_8012AAAC(arg0);
M2C_FIELD(arg0, s32 *, 0x9C) = saved;
M2C_FIELD(arg0, s16 *, 0x9A) = (s16) cnt;
break;
case -50:
M2C_FIELD(arg0, s32 *, 0x94) = M2C_FIELD(arg0, s32 *, 0x94) + 1;
func_8012AAAC(arg0);
M2C_FIELD(arg0, u16 *, 0x72) = (u16) (M2C_FIELD(arg0, u16 *, 0x72) | 0x2000);
break;
case -5:
M2C_FIELD(arg0, u16 *, 0x72) = (u16) (M2C_FIELD(arg0, u16 *, 0x72) | 0x400);
M2C_FIELD(arg0, s32 *, 0x94) = M2C_FIELD(arg0, s32 *, 0x94) - 1;
func_8012AAAC(arg0);
break;
}
} else {
M2C_FIELD(M2C_FIELD(arg0, void **, 0x20), s32 *, 0x20) = M2C_FIELD(ptr, s32 *, 0);
M2C_FIELD(arg0, s16 *, 0x98) = M2C_FIELD(ptr, s16 *, 4);
}
}
+82 -1
View File
@@ -911,7 +911,88 @@ DEFINE_func_8012A908() /* dedup: shared engine-core @0x8012a908 (src/shared) */
DEFINE_func_8012A988() /* dedup: shared engine-core @0x8012a988 (src/shared) */
INCLUDE_ASM("asm/ov_SC03_107/nonmatchings/ov_SC03_107", func_8012AAAC);
extern void func_8012AAAC(void *arg0);
void func_8012AAAC(void *arg0) {
void *ptr;
s32 link;
s32 next;
s32 saved;
s32 cnt;
s32 back;
s32 head;
M2C_FIELD(arg0, u16 *, 0x72) = (u16) (M2C_FIELD(arg0, u16 *, 0x72) & 0xBFFF);
ptr = (void *) (M2C_FIELD(arg0, s32 *, 0x90) + (M2C_FIELD(arg0, s32 *, 0x94) * 8));
if (M2C_FIELD(ptr, s16 *, 4) < 0) {
switch (M2C_FIELD(ptr, s16 *, 4)) {
case -2:
link = M2C_FIELD(arg0, s32 *, 0x9C);
if (link == 0) {
M2C_FIELD(arg0, s16 *, 0x98) = 0;
break;
}
goto pop;
case -1:
link = M2C_FIELD(arg0, s32 *, 0x9C);
if (link != 0) {
pop:
back = M2C_FIELD(arg0, s16 *, 0x9A);
M2C_FIELD(arg0, s32 *, 0x90) = link;
M2C_FIELD(arg0, s32 *, 0x9C) = 0;
M2C_FIELD(arg0, s16 *, 0x9A) = 0;
M2C_FIELD(arg0, s32 *, 0x94) = back;
func_8012AAAC(arg0);
break;
}
M2C_FIELD(arg0, s32 *, 0x94) = 0;
func_8012AAAC(arg0);
M2C_FIELD(arg0, u16 *, 0x72) = (u16) (M2C_FIELD(arg0, u16 *, 0x72) | 0x4000);
break;
case -4:
head = M2C_FIELD(ptr, s32 *, 0);
M2C_FIELD(arg0, s32 *, 0x94) = 0;
M2C_FIELD(arg0, s32 *, 0x9C) = 0;
M2C_FIELD(arg0, s16 *, 0x9A) = 0;
M2C_FIELD(arg0, s32 *, 0x90) = head;
M2C_FIELD(arg0, u16 *, 0x72) = (u16) (M2C_FIELD(arg0, u16 *, 0x72) & 0xF9FF);
func_8012AAAC(arg0);
break;
case -3:
cnt = M2C_FIELD(arg0, s32 *, 0x94) + 1;
M2C_FIELD(arg0, s32 *, 0x94) = cnt;
if (M2C_FIELD(arg0, s32 *, 0x9C) != 0) {
func_8012AAAC(arg0);
break;
}
saved = M2C_FIELD(arg0, s32 *, 0x90);
next = M2C_FIELD(ptr, s32 *, 0);
M2C_FIELD(arg0, s32 *, 0x94) = 0;
M2C_FIELD(arg0, s32 *, 0x9C) = 0;
M2C_FIELD(arg0, s16 *, 0x9A) = 0;
M2C_FIELD(arg0, s32 *, 0x90) = next;
M2C_FIELD(arg0, u16 *, 0x72) = (u16) (M2C_FIELD(arg0, u16 *, 0x72) & 0xF9FF);
func_8012AAAC(arg0);
M2C_FIELD(arg0, s32 *, 0x9C) = saved;
M2C_FIELD(arg0, s16 *, 0x9A) = (s16) cnt;
break;
case -50:
M2C_FIELD(arg0, s32 *, 0x94) = M2C_FIELD(arg0, s32 *, 0x94) + 1;
func_8012AAAC(arg0);
M2C_FIELD(arg0, u16 *, 0x72) = (u16) (M2C_FIELD(arg0, u16 *, 0x72) | 0x2000);
break;
case -5:
M2C_FIELD(arg0, u16 *, 0x72) = (u16) (M2C_FIELD(arg0, u16 *, 0x72) | 0x400);
M2C_FIELD(arg0, s32 *, 0x94) = M2C_FIELD(arg0, s32 *, 0x94) - 1;
func_8012AAAC(arg0);
break;
}
} else {
M2C_FIELD(M2C_FIELD(arg0, void **, 0x20), s32 *, 0x20) = M2C_FIELD(ptr, s32 *, 0);
M2C_FIELD(arg0, s16 *, 0x98) = M2C_FIELD(ptr, s16 *, 4);
}
}