phase-36: S104 s104_e30 — func_801836D4 banked at 0 through the whole-object gate + propagated — 2 pins → 0: the test + copy in each case on a case-local tw (cse.c:4836; local-alloc.c:1486-1500)

This commit is contained in:
Drew T
2026-09-11 04:46:22 -06:00
parent fa72721566
commit f85baa2baa
3 changed files with 206 additions and 195 deletions
+29 -19
View File
@@ -7046,13 +7046,10 @@ void func_801835B0(s32 a0)
*/
s32 func_801836D4(void *a0, void *a1) {
s16 buf[16]; /* dead-store scratch: forces frame 0x28 */
register u16 b __asm__("$3"); // !FAKE: pin $3 — NEEDED DIFFERS (P36 rung B t3_tus1)
u16 a;
s16 diff;
s16 v1;
register s32 tw __asm__("$2"); /* SImode -> lh */ // !FAKE: pin $2 — NEEDED DIFFERS (P36 rung B t3_tus1)
s16 t16; /* HImode copy of tw -> addu $a1,$v0,$0 */
s16 xr; /* xor result back in $v0 */
s16 t16;
s16 xr;
if (*(s16 *)((s32)a0 + 0xEA) != 0) {
*(s16 *)((s32)a0 + 0xEA) = *(s16 *)((s32)a0 + 0xEA) - 1;
@@ -7060,33 +7057,46 @@ s32 func_801836D4(void *a0, void *a1) {
v1 = *(s16 *)((s32)a0 + 0xE2);
switch (v1) {
case 0:
a = *(u16 *)((s32)a0 + 0xE4);
b = *(u16 *)((s32)a1 + 0x6);
diff = a - b;
case 0: {
s32 tw;
diff = *(u16 *)((s32)a0 + 0xE4) - *(u16 *)((s32)a1 + 0x6);
buf[0] = diff;
tw = *(s16 *)((s32)a0 + 0xEC);
t16 = tw;
if (tw == 0) {
return 1;
}
break;
case 1:
a = *(u16 *)((s32)a0 + 0xE6);
b = *(u16 *)((s32)a1 + 0xA);
diff = a - b;
}
case 1: {
s32 tw;
diff = *(u16 *)((s32)a0 + 0xE6) - *(u16 *)((s32)a1 + 0xA);
buf[1] = diff;
tw = *(s16 *)((s32)a0 + 0xEE);
t16 = tw;
if (tw == 0) {
return 1;
}
break;
case 2:
a = *(u16 *)((s32)a0 + 0xE8);
b = *(u16 *)((s32)a1 + 0xE);
diff = a - b;
}
case 2: {
s32 tw;
diff = *(u16 *)((s32)a0 + 0xE8) - *(u16 *)((s32)a1 + 0xE);
buf[2] = diff;
tw = *(s16 *)((s32)a0 + 0xF0);
t16 = tw;
if (tw == 0) {
return 1;
}
break;
}
default:
goto default_case;
}
if (tw == 0) goto ret1;
t16 = tw;
if (diff == 0) goto ret1;
xr = diff ^ t16;
if (xr >= 0) goto default_case;