mirror of
https://github.com/Druthulu/BFM-decomp
synced 2026-09-26 21:36:06 -04:00
acba5c59df
- the move: delete the hand-walked pointer's self-increment and recompute p = &tbl[i] from the loop counter each iteration. The lever-free body had TWO induction variables — the loop dump says 'Cannot eliminate biv 73: biv used in insn 50' (loop.c:5976) because the pointer is itself a call argument — and combine_givs (loop.c:5494/:5527) then merged the three +12 field addresses into one giv whose benefit clears the not-worth-while gate at loop.c:3822-3828, reducing it to a THIRD walking register and forcing a fourth callee-saved one: the +4 instructions and the whole recolouring. Indexing instead leaves one biv, the +12 rides as an immediate, and the body is byte-identical. delever --propagate: 126 of 126 sibling(s) banked, 0 refused. 26,456 -> 26,202 sites. - THE HEADLINE IS THE METHOD, not the crack: the answer was written in English thirty lines above, in the // @class: header of an already-matched sibling in the same file, which spells out 'recompute p = &D[i] each iteration (NOT p++) so gcc reduces base+i*0x10 into a SINGLE pointer IV'. The pack sent agents to the cookbook and to the compiler source and never to the target's own neighbours. This project has been leaving itself notes for months and nobody was reading them. - delever_pack.py now writes PACK/neighbours.txt — the comment headers of the three matched functions either side of the target, plus every @class/@stuck/@crack note in the translation unit — and the brief makes reading it step 0.