phase-36: S104 s104_e22 — func_8017C954 banked at 0 through the whole-object gate + propagated — barrier → 0: a reused value split into s16 wq (local-alloc.c:472; sched.c:2469-2490) + g.opz in both arms (an integer tie, global.c:594-607)

This commit is contained in:
Drew T
2026-09-11 03:53:34 -06:00
parent 8733d36da8
commit 4792daaaef
11 changed files with 1002 additions and 196 deletions
+8 -9
View File
@@ -2895,6 +2895,7 @@ void func_8017C954(s32 arg0)
u8 *va, *vb, *vc, *vd;
u32 w, code;
u32 wx, wy, wz;
s16 wq; /* P36 S104 e22: the box's high z half, its own s16 (see mechanism.md) */
s32 xa32, xb32, t32;
s32 xmn1, xmx1, xmn2, xmx2;
s32 mnc, mxc;
@@ -2933,15 +2934,15 @@ void func_8017C954(s32 arg0)
box[5].vx = mx; box[5].vy = my;
box[6].vx = mn; box[6].vy = my;
box[7].vx = mx; box[7].vy = my;
wy = wz >> 16;
wq = wz >> 16;
box[0].vz = wz;
box[1].vz = wz;
box[4].vz = wz;
box[5].vz = wz;
box[2].vz = wy;
box[3].vz = wy;
box[6].vz = wy;
box[7].vz = wy;
box[2].vz = wq;
box[3].vz = wq;
box[6].vz = wq;
box[7].vz = wq;
gte_ldv3c(&box[0]);
gte_rtpt();
@@ -3088,11 +3089,12 @@ void func_8017C954(s32 arg0)
if (g.sz0 > g.sz1) {
za = g.sz0;
if (za < g.sz2) za = g.sz2;
g.opz = za;
} else {
za = g.sz1;
if (za < g.sz2) za = g.sz2;
g.opz = za;
}
g.opz = za;
if (code == 7) g.opz = za + 0x200;
tp = (u32 *)prim->w0;
((PolyFT3 *)pkt)->rgbc = tp[0];
@@ -3240,9 +3242,6 @@ void func_8017C954(s32 arg0)
}
if (tmpxy[2].vy > my) my = tmpxy[2].vy;
else if (tmpxy[2].vy < mny) mny = tmpxy[2].vy;
/* L1: zero-byte $v1 conflict dial -- keeps my/mny off $v1 so the
* my/mny/mx/mn quad lands on $a2/$a3/$t0/$t1 (see header). */
__asm__ __volatile__ ("" ::: "$3"); // !FAKE: barrier — NEEDED DIFFERS (P36 rung B tus10)
gte_stflg(&g.flag);
if (!(g.flag & 0x7F85E000)) {
gte_stsz4(&g.sz0, &g.sz1, &g.sz2, &g.sz3);