Files
BFM-decomp/cookbook/C0198.md
T

3.2 KiB

Considered and NOT banked

Rejected Why
§70's "walk the parameter directly" direction (L5639) Already banked. Kept only as the explicit contrast note inside §179-A, which is its mirror — a future agent needs both directions side by side to choose.
__asm__ __volatile__("" ::: "memory") as a CSE defeat Already banked at L1816-1819 (§21) and L13300, and §178-G2 already warns it is a full barrier. Deliberately stripped from the §179-H lever description.
"=r"(x) : "0"(x) as an address-rematerialisation launder Already banked near-verbatim as §153 (L10463, "THE ADDRESS-REMATERIALISATION LAUNDER"). Note: §179-A uses the same instrument against a different governing predicate (valid_initial_value_p, not cse's qty_const), so only that new application is banked.
≤2*MAX_MOVE_BYTES single movstrsi_internal copies; -O0 memcpy library call Already banked at L2428 and L2531. §179-E covers only the >2*MAX_MOVE_BYTES loop-with-remainder shape.
The trampoline's three maspsx rules (no nop after jal; %%hi/%%lo escaping; no trailing .set reorder) Already banked at L1848-1858. The third one is contradicted by wave P/Q, so §179-B carries the conflict-resolution note rather than a restatement.
maspsx "forces noreorder per function" (the func_80185B44 vetting note, __init__.py:857-859) Already banked — but it is misleading on its own, since .ent does not update self.is_reorder. §179-B rule 2 corrects it rather than re-banking it.
Everything in §174–§178 and §176a–§176j Excluded by instruction: PsyQ names, match_one relocation masking, statement order around a call, pins-cannot-cross-a-call, declaration form as a scheduling lever, the $0-add opaque copy, return-const priority, birthing_insn_p, narrow-type copy elision, the zero-offset alias hole, MEM_IN_STRUCT_P, mips_epilogue_delay_slots. Several readers surfaced near-restatements of these; all dropped.
§177's epilogue return-delay-slot class (mips.c:5376, L17156) Adjacent but genuinely different: that is a within-function scheduling gate steerable by callee-saved count. §179-C is a cross-function frame-sharing phenomenon with no compiler pass involved at all. Both kept, neither merged.
The raw findings' loop.c:3571 giv-skip citation ⚠ Corrected, not dropped — the test is at :3572-3573.
The raw findings' loop.c:3499 SET_SRC citation ⚠ Corrected to :3500 (the valid_initial_value_p call at :3509 and bl->initial_value = src at :3511 both check out exactly).
"func_8005A9FC0" ⚠ Typo in the raw finding; the real symbol is func_80059FC0 (confirmed from the draft path and asm/nonmatchings/800c/func_80059FC0.s). Banked under the correct name in §179-C.
"expand_function_end unconditionally appends, with no noreturn guard" Softened. function.c:5224 and the return emission at :5432-5437 are confirmed present, and function_epilogue (mips.c:5072) is the final-time emitter — but the "no guard anywhere on the path" claim was not traced line-by-line. §179-C states the observable (three byte-proofs) and cites the location, not a derived proof.