Files
BFM-decomp/docs/difficulty.resident.md
T
Drew T a480d83bee feat(phase-12): T3a — extern-conflict recovery, +20 (REAL 102->123, 85.6%)
The pass-4 functions that match_one matched standalone but the single-TU build rejected
on conflicting shared-symbol extern types are recovered by UNIFYING those types in
resident.c (widening definitions' return types where byte-identical — u16 f(){return
u16g} ≡ s32 f(){...} both lhu;jr; choosing asm-correct widths for globals; per-site
*(u16*)&g tricks where a neighbor pins the type). ~20 symbols reconciled
(func_800291B4/CFD68/D1714/D1078/801465C0/... + D_800AE6A8/80078E50/...).

20 of 21 recovered; func_800D00E4 stays an honest INCLUDE_ASM stub (its switch needs the
external jtbl_80113ED8 relocation, not a C-source fix — analysis preserved under #if 0).
REAL 102 -> 123 (85.62% byte-identical); resident 8e17e02f, main 143dbb89 (R22 clean).
22 stubs remain: ~20 documented compiler-internal residuals (permuter/§3a) + D00E4 + dedup.
2026-06-16 14:05:20 -06:00

1.3 KiB

Unmatched difficulty inventory (generated by tools/difficulty.py — harvest queue)

unmatched functions : 21 trivial (<=5 ins) : 0 non-jtbl leaves : 7 (best harvest targets) jump-table funcs : 5 (deferred — need the rodata-island workflow, Task 2')

Easiest 21 unmatched (score asc) — the work queue

score name nins br calls jtbl leaf
30 func_800D1984 22 2 1 - -
30 func_800D1B80 22 2 1 - -
43 func_800D0E30 37 2 0 - Y
54 func_800D0214 43 3 1 - -
57 func_800D0D7C 45 4 0 - Y
57 func_800D2D10 39 6 0 - Y
59 func_800CFAD0 59 0 0 - Y
68 func_800D1E28 37 7 5 - -
73 func_800D1658 47 6 4 - -
73 func_800D1FC8 62 3 1 - -
99 func_800D24A0 87 2 3 - -
109 func_800CEFD0 77 6 7 - -
123 func_800D0488 64 10 2 Y -
141 func_800D2650 99 14 0 - Y
148 func_800D00E4 76 15 1 Y -
162 func_800D27DC 135 9 0 - Y
193 func_800D29F8 172 7 0 - Y
234 func_800CFE60 161 19 8 - -
238 func_800D02D0 110 33 2 Y -
446 func_800D128C 243 40 29 Y -
637 func_800D06E8 344 82 11 Y -