mirror of
https://github.com/Druthulu/BFM-decomp
synced 2026-09-27 22:45:39 -04:00
e17fac9411
I wrote §430 this morning from a NEAR agent's report: 'a source goto into a loop kills loop.c's invariant hoisting, so duplicate the statements per arm instead.' The MATCH on CdReadSectorReadyCB (424/424) refutes it. The goto is what the original source had — writing it took the residual 318 -> 28 instantly with length exact — and the lost hoist is REPAIRABLE by hand-hoisting the constants into pre-loop locals (cse cannot fold them back because MIPS bne/sb need registers): 28 -> 13. Declaration order matters. The corrected law is better than the guess: a disabled optimizer pass is a job you can take over, not a wall. The general lesson, and it is the second instance today: a law derived from a NEAR is a hypothesis about why something did NOT work; a law derived from a MATCH is evidence about what does. §428a needed the same correction this morning. Also banks two more laws this function paid for: cc1 -df's ';; regs to allocate' is a free allocno-priority oracle (q 10refs/33live beat i 7/24 for $s2; six reshapes failed, §17 merge + a register pin fixed it), and a stale card tu= cost the last 6 instructions (func_80018714 is K&R 'void *', not '(void)').