mirror of
https://github.com/Druthulu/BFM-decomp
synced 2026-09-26 13:33:34 -04:00
f5d2cd017e
9 mechanism-advertising transcripts of 19, from the session's hardest draw (23 of 25 over 120 ins) and the first wave whose packs auto-carried the residual class's cookbook bucket. 16/16 agents. §319 (NEW) — duplicate 'return v;' tails let combine fold the OR into $v0. The sharpest addendum extends §164-26 (func_8017D89C). That section closes 'It is the only spelling that reaches it' about the 2-D extern retype, and §185b hardens the failure into a recorded blocker — so a function whose TU forbids the retype was written off. A THIRD spelling reaches the same no-movable state with no retype at all: do the address arithmetic in INTEGER space and cast, *(s32*)((s32)SYM + (j<<2)). The array never decays, expand_expr's ARRAY_REF case is never entered, no ADDR_EXPR base pseudo is emitted, and scan_loop has nothing to record. §164-26's own byte-refuted control stays valid and is the discriminator: *(char**)(SYM + b*8) still hoists, because pointer_int_sum rebuilds it as a pointer add — a cast to s32 BEFORE the add is not the same edit as a cast to char** AFTER it. That addendum also records a second, cheaper tell: instead of counting the frame for an extra callee-saved register, look for a DISTANT straight-line read of the same array's element 0 coming out as 3 instructions (lui/addiu/lw 0()) where the clean 2-instruction lui %hi / lw %lo fold belongs — the loop's subscript form corrupts an unrelated access blocks earlier. Closeness 37 -> 4 from that one respelling, with a different-symbol control proving the loop is the cause.