mirror of
https://github.com/Druthulu/BFM-decomp
synced 2026-09-27 05:56:00 -04:00
1004668405
- Stale spine claimed 223 live stubs / 870,668 ins and ranked 3 already-banked fns in its top 7 (func_801325B8, func_8014ADE0, func_8012CC88-in-077 verified 0-live in src). - TRUE state: 160 live stubs / 583,077 ins remaining gain. - SHARP EDGE (R35): worklist.py --assert-partition exits at the assertion and does NOT rewrite the doc, so 'regenerating' with it leaves the stale file in place and still exits 0. Run it bare to write.
212 lines
28 KiB
Markdown
212 lines
28 KiB
Markdown
# Worklist — remaining functions ranked by byte-weighted project gain
|
||
|
||
> Generated by `tools/worklist.py` from `.run/fuel_manifest.json` + `.run/backlog.jsonl`. Ranked by **byte-weighted gain** `gain_ins = reach × nins` (fleet instructions made byte-identical once matched **and** propagated ×138 — the decomp.dev-comparable metric the giants move, NOT function-count). `%rem` = share of ALL remaining gain; `cum%` = running total (shows how few giants capture most of it). `close` = backlog match_one mismatch count (lower = nearer; blank = not yet attempted). Byte-gate (harvest_verify) is the sole arbiter (G3/P9).
|
||
|
||
**Live stubs:** 160 · **total remaining gain:** 583,077 ins (2,332,308 bytes ×-fleet)
|
||
|
||
## Idiom-class summary (the groups)
|
||
|
||
| class | count | gain_ins | % of remaining |
|
||
|-------|------:|---------:|---------------:|
|
||
| GIANT | 2 | 50,094 | 8.6% |
|
||
| STRUCT | 36 | 15,274 | 2.6% |
|
||
| PINS | 19 | 61,426 | 10.5% |
|
||
| WAVE | 91 | 408,422 | 70.0% |
|
||
| O0 | 5 | 4,329 | 0.7% |
|
||
| O1 | 1 | 4,692 | 0.8% |
|
||
| STUB | 6 | 38,840 | 6.7% |
|
||
|
||
## Top 40 remaining gains (all classes)
|
||
|
||
| # | name | class | reach | nins | gain_ins | %rem | cum% | cached | region | close | where it stuck | best draft |
|
||
|--:|------|-------|------:|-----:|---------:|-----:|-----:|--------|--------|------:|----------------|------------|
|
||
| 1 | func_801412A8 | GIANT | 138 | 198 | 27324 | 4.69 | 4.7 | Y | main | 110 | 110 mismatch (count-exact 198/198). S11 LUID(x)alloc: register-assignment permutation + prim2 store-schedule.… | `.run/backlog_drafts/func_801412A8.c` |
|
||
| 2 | func_80178004 | GIANT | 138 | 165 | 22770 | 3.91 | 8.6 | Y | jr_801734BC | 91 | [Phase-27 T8 corrected] close=91 pure local-alloc regalloc wall (§52 flagship; the 'MATCH' claim was a retrac… | `.run/backlog_drafts/func_80178004.c` |
|
||
| 3 | func_80174CB0 | WAVE | 138 | 123 | 16974 | 2.91 | 11.5 | Y | jr_801734BC | 0 | close=0 match_one MATCH but its anon typedef is named 'Buf' which COLLIDES with the existing 'Buf' (s16 h[8],… | `.run/backlog_drafts/func_80174CB0.c` |
|
||
| 4 | func_801330E0 | STUB | 138 | 110 | 15180 | 2.60 | 14.1 | Y | jr_8012ACE0 | 7 | STUB: 7 mismatch | `.run/backlog_drafts/func_801330E0.c` |
|
||
| 5 | func_8012CC88 | WAVE | 138 | 105 | 14490 | 2.49 | 16.6 | Y | jr_8012ACE0 | 0 | none — MATCH (105 ins, relocation-masked) | `.run/backlog_drafts/func_8012CC88.c` |
|
||
| 6 | func_80169228 | WAVE | 138 | 105 | 14490 | 2.49 | 19.1 | Y | jr_8015C32C | 0 | none — MATCH (105 ins, relocation-masked). Key levers: arg0/p pinned $s1/$s0, | `.run/backlog_drafts/func_80169228.c` |
|
||
| 7 | func_801463A0 | WAVE | 138 | 101 | 13938 | 2.39 | 21.5 | Y | after | 0 | none — MATCH (101 ins, match_one); real symbol names; misaligned 8B copy + s16 stores + masked B9C last | `.run/backlog_drafts/func_801463A0.c` |
|
||
| 8 | func_8014D12C | WAVE | 138 | 93 | 12834 | 2.20 | 23.7 | Y | after | 53 | WAVE: 53 mismatch | `.run/backlog_drafts/func_8014D12C.c` |
|
||
| 9 | func_8014C6F4 | WAVE | 138 | 91 | 12558 | 2.15 | 25.8 | Y | after | 14 | WAVE: 14 mismatch | `.run/backlog_drafts/func_8014C6F4.c` |
|
||
| 10 | func_80158638 | STUB | 138 | 87 | 12006 | 2.06 | 27.9 | Y | jr_80154C24 | 1 | STUB: 1 mismatch | `.run/backlog_drafts/func_80158638.c` |
|
||
| 11 | func_8012B4B8 | WAVE | 138 | 84 | 11592 | 1.99 | 29.9 | Y | jr_8012ACE0 | 0 | none — MATCH | `.run/backlog_drafts/func_8012B4B8.c` |
|
||
| 12 | func_8014D4C0 | WAVE | 138 | 84 | 11592 | 1.99 | 31.9 | Y | after | 15 | initial draft — modeled on the byte-matched sibling DEFINE_func_8014CD80 (engine_core.h) | `.run/backlog_drafts/func_8014D4C0.c` |
|
||
| 13 | func_80156670 | WAVE | 138 | 83 | 11454 | 1.96 | 33.8 | Y | jr_80154C24 | | none — MATCH (83 ins). Key: hoist `iVar1 = uVar3*4;` as its OWN statement before the if so gcc schedules `sll… | `.run/backlog_drafts/func_80156670.c` |
|
||
| 14 | func_8014CF04 | WAVE | 138 | 82 | 11316 | 1.94 | 35.8 | Y | after | 27 | WAVE: 27 mismatch | `.run/backlog_drafts/func_8014CF04.c` |
|
||
| 15 | func_8014D2A0 | WAVE | 138 | 80 | 11040 | 1.89 | 37.7 | Y | after | 2 | first draft — u8* IV walk over D_801202A0 with 0x10C stride, sibling-shaped after DEFINE_func_80163950() | `.run/backlog_drafts/func_8014D2A0.c` |
|
||
| 16 | func_8012A1BC | WAVE | 138 | 78 | 10764 | 1.85 | 39.5 | Y | a | 42 | 42/78 — block-copy bytes correct (char[8] => lwl/lwr/swl/swr); residual is gcc's load-hoist split. Target hoi… | `.run/backlog_drafts/func_8012A1BC.c` |
|
||
| 17 | func_8016163C | WAVE | 138 | 78 | 10764 | 1.85 | 41.3 | Y | jr_8015C32C | 50 | none — MATCH (78 ins). First arm calls func_801599A4 with NO arg (asm nop delay slot) via fn-ptr cast ((void(… | `.run/backlog_drafts/func_8016163C.c` |
|
||
| 18 | func_80163534 | WAVE | 138 | 76 | 10488 | 1.80 | 43.1 | Y | jr_8015C32C | 0 | none — MATCH (76 ins, relocation-masked) | `.run/backlog_drafts/func_80163534.c` |
|
||
| 19 | func_8014D610 | WAVE | 138 | 74 | 10212 | 1.75 | 44.9 | Y | after | 60 | WAVE: 60 mismatch | `.run/backlog_drafts/func_8014D610.c` |
|
||
| 20 | func_8012E014 | WAVE | 138 | 73 | 10074 | 1.73 | 46.6 | Y | jr_8012ACE0 | 0 | none — MATCH (expected; straightforward struct-field + global-copy body) | `.run/backlog_drafts/func_8012E014.c` |
|
||
| 21 | func_80132F40 | STRUCT | 138 | 72 | 9936 | 1.70 | 48.3 | Y | jr_8012ACE0 | 59 | STRUCT: 59 mismatch | `.run/backlog_drafts/func_80132F40.c` |
|
||
| 22 | func_80161774 | WAVE | 138 | 69 | 9522 | 1.63 | 50.0 | Y | jr_8015C32C | 53 | none — MATCH (69 ins, match_one verified; clean nested-if; param_1 -> $s0 call-crossing) | `.run/backlog_drafts/func_80161774.c` |
|
||
| 23 | func_80133298 | WAVE | 138 | 65 | 8970 | 1.54 | 51.5 | Y | jr_8012ACE0 | 0 | none — MATCH (65 ins, relocation-masked) | `.run/backlog_drafts/func_80133298.c` |
|
||
| 24 | func_80140D68 | WAVE | 138 | 65 | 8970 | 1.54 | 53.0 | Y | main | 5 | 5-ins near-miss — gcc hoists `lui 0xff00` (the 0xFF000000 mask) one slot too early in the first AddPrim block… | `.run/backlog_drafts/func_80140D68.c` |
|
||
| 25 | func_8014A738 | WAVE | 138 | 62 | 8556 | 1.47 | 54.5 | Y | after | 11 | wip | `.run/backlog_drafts/func_8014A738.c` |
|
||
| 26 | func_8012A328 | WAVE | 138 | 60 | 8280 | 1.42 | 55.9 | Y | a | 0 | none — MATCH (60 ins, relocation-masked) | `.run/backlog_drafts/func_8012A328.c` |
|
||
| 27 | func_80138DE0 | WAVE | 138 | 60 | 8280 | 1.42 | 57.3 | Y | jr_801380E0 | 0 | none — MATCH (60 ins) | `.run/backlog_drafts/func_80138DE0.c` |
|
||
| 28 | func_8014E5B4 | PINS | 138 | 59 | 8142 | 1.40 | 58.7 | Y | after | 23 | none — MATCH | `.run/backlog_drafts/func_8014E5B4.c` |
|
||
| 29 | func_801777BC | WAVE | 138 | 59 | 8142 | 1.40 | 60.1 | Y | jr_801734BC | 29 | body byte-matches; residual ~3 ins = prologue instruction-scheduling (final `sll t8,16` / `lw param_7` / `add… | `.run/backlog_drafts/func_801777BC.c` |
|
||
| 30 | func_8012B77C | WAVE | 138 | 58 | 8004 | 1.37 | 61.5 | Y | jr_8012ACE0 | 33 | gcc instruction-scheduler load-ordering + 1st-ratan2 delay-slot fill differ (s2 subtraction lands early inste… | `.run/backlog_drafts/func_8012B77C.c` |
|
||
| 31 | func_801759D8 | WAVE | 138 | 56 | 7728 | 1.33 | 62.8 | Y | jr_801734BC | 0 | none — MATCH (56 ins) | `.run/backlog_drafts/func_801759D8.c` |
|
||
| 32 | func_80175820 | WAVE | 138 | 55 | 7590 | 1.30 | 64.1 | Y | jr_801734BC | 4 | body BYTE-EXACT (52 ins match); only residual is target's phantom 0x10 stack frame (args_size=16 from an elim… | `.run/backlog_drafts/func_80175820.c` |
|
||
| 33 | func_801758FC | WAVE | 138 | 55 | 7590 | 1.30 | 65.4 | Y | jr_801734BC | 0 | none — MATCH (55 ins) | `.run/backlog_drafts/func_801758FC.c` |
|
||
| 34 | func_80176144 | WAVE | 138 | 53 | 7314 | 1.25 | 66.7 | Y | jr_801734BC | 0 | none — MATCH | `.run/backlog_drafts/func_80176144.c` |
|
||
| 35 | func_80151C54 | PINS | 138 | 52 | 7176 | 1.23 | 67.9 | Y | after | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_80151C54.c` |
|
||
| 36 | func_8012F49C | WAVE | 138 | 51 | 7038 | 1.21 | 69.1 | Y | jr_8012ACE0 | 0 | none — MATCH (51 ins, relocation-masked) | `.run/backlog_drafts/func_8012F49C.c` |
|
||
| 37 | func_801376E8 | WAVE | 138 | 51 | 7038 | 1.21 | 70.3 | Y | jr_80135D20 | 0 | none — MATCH (51 ins). 3 levers: (1) adjacent-field array u16 D_80126A14[] for A14/A16 | `.run/backlog_drafts/func_801376E8.c` |
|
||
| 38 | func_80146750 | WAVE | 138 | 47 | 6486 | 1.11 | 71.5 | Y | after | 45 | WAVE: 45 mismatch | `.run/backlog_drafts/func_80146750.c` |
|
||
| 39 | func_8014C4AC | WAVE | 138 | 47 | 6486 | 1.11 | 72.6 | Y | after | 0 | none — MATCH | `.run/backlog_drafts/func_8014C4AC.c` |
|
||
| 40 | func_80151B98 | PINS | 138 | 47 | 6486 | 1.11 | 73.7 | Y | after | 15 | PINS: 15 mismatch | `.run/backlog_drafts/func_80151B98.c` |
|
||
|
||
## GIANT hand-decomp queue — 2 fns, 8.6% of all remaining gain
|
||
|
||
| # | name | class | reach | nins | gain_ins | %rem | cached | region | close | where it stuck | best draft |
|
||
|--:|------|-------|------:|-----:|---------:|-----:|--------|--------|------:|----------------|------------|
|
||
| 1 | func_801412A8 | GIANT | 138 | 198 | 27324 | 4.69 | Y | main | 110 | 110 mismatch (count-exact 198/198). S11 LUID(x)alloc: register-assignment permutation + prim2 store-schedule.… | `.run/backlog_drafts/func_801412A8.c` |
|
||
| 2 | func_80178004 | GIANT | 138 | 165 | 22770 | 3.91 | Y | jr_801734BC | 91 | [Phase-27 T8 corrected] close=91 pure local-alloc regalloc wall (§52 flagship; the 'MATCH' claim was a retrac… | `.run/backlog_drafts/func_80178004.c` |
|
||
|
||
## Idiom-group tables
|
||
|
||
### STRUCT — 36 fns, 2.6% of remaining gain
|
||
|
||
| # | name | class | reach | nins | gain_ins | %rem | cached | region | close | where it stuck | best draft |
|
||
|--:|------|-------|------:|-----:|---------:|-----:|--------|--------|------:|----------------|------------|
|
||
| 1 | func_80132F40 | STRUCT | 138 | 72 | 9936 | 1.70 | Y | jr_8012ACE0 | 59 | STRUCT: 59 mismatch | `.run/backlog_drafts/func_80132F40.c` |
|
||
| 2 | func_8017C974 | STRUCT | 1 | 947 | 947 | 0.16 | Y | jr_8017AE2C | | | |
|
||
| 3 | func_8018103C | STRUCT | 1 | 579 | 579 | 0.10 | Y | jr_8017AE2C | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8018103C.c` |
|
||
| 4 | func_80183324 | STRUCT | 1 | 324 | 324 | 0.06 | Y | jr_80182268 | | | |
|
||
| 5 | func_80135EB0 | STRUCT | 1 | 289 | 289 | 0.05 | Y | jr_80135D20 | | | |
|
||
| 6 | func_8015B950 | STRUCT | 1 | 271 | 271 | 0.05 | Y | jr_8015AE2C | | | |
|
||
| 7 | func_8017FD14 | STRUCT | 1 | 249 | 249 | 0.04 | Y | jr_8017AE2C | | | |
|
||
| 8 | func_80181BE4 | STRUCT | 1 | 201 | 201 | 0.03 | Y | jr_8017AE2C | | | |
|
||
| 9 | func_8018308C | STRUCT | 1 | 166 | 166 | 0.03 | Y | jr_80182268 | | | |
|
||
| 10 | func_80180C90 | STRUCT | 1 | 160 | 160 | 0.03 | Y | jr_8017AE2C | | | |
|
||
| 11 | func_80135260 | STRUCT | 1 | 136 | 136 | 0.02 | Y | jr_8012ACE0 | 5 | none — MATCH | `.run/backlog_drafts/func_80135260.c` |
|
||
| 12 | func_80183834 | STRUCT | 1 | 135 | 135 | 0.02 | Y | jr_80182268 | | | |
|
||
| 13 | func_80181948 | STRUCT | 1 | 132 | 132 | 0.02 | Y | jr_8017AE2C | | | |
|
||
| 14 | func_80185E68 | STRUCT | 1 | 132 | 132 | 0.02 | Y | jr_80182268 | 131 | STRUCT: 131 mismatch | `.run/backlog_drafts/func_80185E68.c` |
|
||
| 15 | func_8015CD20 | STRUCT | 1 | 129 | 129 | 0.02 | Y | jr_8015C32C | | | |
|
||
| 16 | func_8012AAAC | STRUCT | 1 | 125 | 125 | 0.02 | Y | a | 0 | none — MATCH (125 ins, relocation-masked) | `.run/backlog_drafts/func_8012AAAC.c` |
|
||
| 17 | func_80181F08 | STRUCT | 1 | 117 | 117 | 0.02 | Y | jr_8017AE2C | | | |
|
||
| 18 | func_80179B74 | STRUCT | 1 | 111 | 111 | 0.02 | Y | jr_80178D40 | | | |
|
||
| 19 | func_80182C9C | STRUCT | 1 | 101 | 101 | 0.02 | Y | jr_80182268 | | none — MATCH (101 ins). Inner-switch break-to-shared-tail must be written as | `.run/backlog_drafts/func_80182C9C.c` |
|
||
| 20 | func_801820DC | STRUCT | 1 | 94 | 94 | 0.02 | Y | jr_8017AE2C | 0 | none — MATCH (switch on entity state at 0x34, inner jtbl on (s8)(u70>>8)) | `.run/backlog_drafts/func_801820DC.c` |
|
||
| 21 | func_801789AC | STRUCT | 1 | 91 | 91 | 0.02 | Y | jr_801734BC | | none — MATCH (91 ins, relocation-masked) | `.run/backlog_drafts/func_801789AC.c` |
|
||
| 22 | func_8016AE5C | STRUCT | 1 | 85 | 85 | 0.01 | Y | jr_8016AB6C | 0 | none — MATCH (85 ins, match_one). switch/jtbl STRUCT fn. The tail's | `.run/backlog_drafts/func_8016AE5C.c` |
|
||
| 23 | func_80182E7C | STRUCT | 1 | 85 | 85 | 0.01 | Y | jr_80182268 | 0 | none — MATCH (85 ins, relocation-masked). Two switch-codegen levers: | `.run/backlog_drafts/func_80182E7C.c` |
|
||
| 24 | func_8018281C | STRUCT | 1 | 76 | 76 | 0.01 | Y | jr_80182268 | 0 | none — MATCH (76 ins). jtbl forced via explicit case 4/6 (count>=5 over MIPS tablejump threshold); case-5 blo… | `.run/backlog_drafts/func_8018281C.c` |
|
||
| 25 | func_80180B64 | STRUCT | 1 | 75 | 75 | 0.01 | Y | jr_8017AE2C | | none — MATCH (75 ins, relocation-masked) | `.run/backlog_drafts/func_80180B64.c` |
|
||
| 26 | func_80171B4C | STRUCT | 1 | 70 | 70 | 0.01 | Y | jr_8016AB6C | 3 | 3-off in the tail only (body+prologue MATCH via $s1 pin on arg1). gcc fills the | `.run/backlog_drafts/func_80171B4C.c` |
|
||
| 27 | func_80151944 | STRUCT | 4 | 15 | 60 | 0.01 | Y | after | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_80151944.c` |
|
||
| 28 | func_80159A20 | STRUCT | 1 | 58 | 58 | 0.01 | Y | jr_801588CC | | none — MATCH. Key lever: block tail-MERGE (gcc shared `bne ...,$L1` cross-jump) by making the two return-test… | `.run/backlog_drafts/func_80159A20.c` |
|
||
| 29 | func_8015FBE0 | STRUCT | 1 | 58 | 58 | 0.01 | Y | jr_8015C32C | 1 | none — MATCH | `.run/backlog_drafts/func_8015FBE0.c` |
|
||
| 30 | func_80183CF4 | STRUCT | 1 | 57 | 57 | 0.01 | Y | jr_80182268 | 0 | none — MATCH (clean switch + jtbl; orchestrator owns jtbl/rodata migration) | `.run/backlog_drafts/func_80183CF4.c` |
|
||
| 31 | func_80183AF0 | STRUCT | 1 | 47 | 47 | 0.01 | Y | jr_80182268 | 0 | none — MATCH (mask pinned $a1/$5 + p pinned $v0/$2; switch w/ distributed func_8012C218 tail via dup calls + … | `.run/backlog_drafts/func_80183AF0.c` |
|
||
| 32 | func_80183BAC | STRUCT | 1 | 41 | 41 | 0.01 | Y | jr_80182268 | 0 | switch jump-table dispatch (jtbl_801D9420); verifying case grouping 0,1,2,5,6/3,7/4 emits the target table + … | `.run/backlog_drafts/func_80183BAC.c` |
|
||
| 33 | func_80183C50 | STRUCT | 1 | 41 | 41 | 0.01 | Y | jr_80182268 | 0 | none — MATCH (cross-jump exploit §cookbook L1543: dup func_8012C218 into case3/7 + case4 → merged jal;nop) | `.run/backlog_drafts/func_80183C50.c` |
|
||
| 34 | func_801754A8 | STRUCT | 1 | 37 | 37 | 0.01 | Y | jr_801734BC | 0 | none — MATCH (37 ins, relocation-masked proxy) | `.run/backlog_drafts/func_801754A8.c` |
|
||
| 35 | func_801549F8 | STRUCT | 1 | 31 | 31 | 0.01 | Y | jr_8015444C | 3 | 3-off at -O2 (match_one + gate flags). The n=byte keep-alive copy (addu $a3,$v0,$zero) emits BEFORE the hoist… | `.run/backlog_drafts/func_801549F8.c` |
|
||
| 36 | func_80142A10 | STRUCT | 1 | 28 | 28 | 0.00 | Y | main | 1 | none — MATCH (pending byte-gate) | `.run/backlog_drafts/func_80142A10.c` |
|
||
|
||
### PINS — 19 fns, 10.5% of remaining gain
|
||
|
||
| # | name | class | reach | nins | gain_ins | %rem | cached | region | close | where it stuck | best draft |
|
||
|--:|------|-------|------:|-----:|---------:|-----:|--------|--------|------:|----------------|------------|
|
||
| 1 | func_8014E5B4 | PINS | 138 | 59 | 8142 | 1.40 | Y | after | 23 | none — MATCH | `.run/backlog_drafts/func_8014E5B4.c` |
|
||
| 2 | func_80151C54 | PINS | 138 | 52 | 7176 | 1.23 | Y | after | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_80151C54.c` |
|
||
| 3 | func_80151B98 | PINS | 138 | 47 | 6486 | 1.11 | Y | after | 15 | PINS: 15 mismatch | `.run/backlog_drafts/func_80151B98.c` |
|
||
| 4 | func_80163764 | PINS | 138 | 42 | 5796 | 0.99 | Y | jr_8015C32C | 10 | none — MATCH (42 ins). pins $s2/$s1/$s0/$s3 + u32 counter (sltiu) + init order s2,s3,i,p | `.run/backlog_drafts/func_80163764.c` |
|
||
| 5 | func_80146AFC | PINS | 138 | 40 | 5520 | 0.95 | Y | after | 13 | none — MATCH | `.run/backlog_drafts/func_80146AFC.c` |
|
||
| 6 | func_80131A34 | PINS | 138 | 37 | 5106 | 0.88 | Y | jr_8012ACE0 | 3 | 3-off — (a) prologue saves $ra before $s0 (target: $s0 then $ra) and (b) return-0 path reuses $a1's proven-ze… | `.run/backlog_drafts/func_80131A34.c` |
|
||
| 7 | func_80151664 | PINS | 138 | 35 | 4830 | 0.83 | Y | after | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_80151664.c` |
|
||
| 8 | func_80170CF0 | PINS | 138 | 30 | 4140 | 0.71 | Y | jr_8016AB6C | 17 | PINS: 17 mismatch | `.run/backlog_drafts/func_80170CF0.c` |
|
||
| 9 | func_8016F0E4 | PINS | 138 | 26 | 3588 | 0.62 | Y | jr_8016AB6C | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_8016F0E4.c` |
|
||
| 10 | func_801733FC | PINS | 138 | 25 | 3450 | 0.59 | Y | jr_8016AB6C | 0 | none — modeled on sibling func_80173460 (packed 8-byte struct copy + two s16=1 stores) | `.run/backlog_drafts/func_801733FC.c` |
|
||
| 11 | func_80131CA8 | PINS | 138 | 19 | 2622 | 0.45 | Y | jr_8012ACE0 | 0 | none — MATCH (call-through-fnptr dispatcher: explicit return 1/return 0) | `.run/backlog_drafts/func_80131CA8.c` |
|
||
| 12 | func_80156600 | PINS | 138 | 18 | 2484 | 0.43 | Y | jr_80154C24 | | none — MATCH (simple counted scan, do-while form per Ghidra-C) | `.run/backlog_drafts/func_80156600.c` |
|
||
| 13 | func_80161208 | PINS | 138 | 14 | 1932 | 0.33 | Y | jr_8015C32C | 0 | none — MATCH expected (param saved across call → natural $s0, no pin needed) | `.run/backlog_drafts/func_80161208.c` |
|
||
| 14 | func_80184C0C | PINS | 1 | 48 | 48 | 0.01 | Y | jr_80182268 | 1 | none — MATCH (array-of-struct %lo-fold for &D_8018AEB8[idx], stride 0x34) | `.run/backlog_drafts/func_80184C0C.c` |
|
||
| 15 | func_80161C24 | PINS | 1 | 29 | 29 | 0.00 | Y | jr_8015C32C | 1 | none — MATCH (array-of-struct %lo-fold; even/odd u16 fields at off 0/2, stride 4) | `.run/backlog_drafts/func_80161C24.c` |
|
||
| 16 | func_80182988 | PINS | 1 | 22 | 22 | 0.00 | Y | jr_80182268 | 6 | none — MATCH (0x5c store must be unsigned short so 0xaa10 stays +43536 → ori, not addiu/sign-extend) | `.run/backlog_drafts/func_80182988.c` |
|
||
| 17 | func_80157D20 | PINS | 1 | 21 | 21 | 0.00 | Y | jr_80154C24 | 0 | none — MATCH expected (call, indexed u16-global load as 2nd arg, then call; param_1 saved across all three ca… | `.run/backlog_drafts/func_80157D20.c` |
|
||
| 18 | func_80161CD0 | PINS | 1 | 20 | 20 | 0.00 | Y | jr_8015C32C | 14 | param_2 must survive the call in $s0; try plain C first then pin to $16 | `.run/backlog_drafts/func_80161CD0.c` |
|
||
| 19 | func_80161D20 | PINS | 1 | 14 | 14 | 0.00 | Y | jr_8015C32C | 1 | none — MATCH (array-of-u16 %lo-fold, §18) | `.run/backlog_drafts/func_80161D20.c` |
|
||
|
||
### WAVE — 91 fns, 70.0% of remaining gain
|
||
|
||
| # | name | class | reach | nins | gain_ins | %rem | cached | region | close | where it stuck | best draft |
|
||
|--:|------|-------|------:|-----:|---------:|-----:|--------|--------|------:|----------------|------------|
|
||
| 1 | func_80174CB0 | WAVE | 138 | 123 | 16974 | 2.91 | Y | jr_801734BC | 0 | close=0 match_one MATCH but its anon typedef is named 'Buf' which COLLIDES with the existing 'Buf' (s16 h[8],… | `.run/backlog_drafts/func_80174CB0.c` |
|
||
| 2 | func_8012CC88 | WAVE | 138 | 105 | 14490 | 2.49 | Y | jr_8012ACE0 | 0 | none — MATCH (105 ins, relocation-masked) | `.run/backlog_drafts/func_8012CC88.c` |
|
||
| 3 | func_80169228 | WAVE | 138 | 105 | 14490 | 2.49 | Y | jr_8015C32C | 0 | none — MATCH (105 ins, relocation-masked). Key levers: arg0/p pinned $s1/$s0, | `.run/backlog_drafts/func_80169228.c` |
|
||
| 4 | func_801463A0 | WAVE | 138 | 101 | 13938 | 2.39 | Y | after | 0 | none — MATCH (101 ins, match_one); real symbol names; misaligned 8B copy + s16 stores + masked B9C last | `.run/backlog_drafts/func_801463A0.c` |
|
||
| 5 | func_8014D12C | WAVE | 138 | 93 | 12834 | 2.20 | Y | after | 53 | WAVE: 53 mismatch | `.run/backlog_drafts/func_8014D12C.c` |
|
||
| 6 | func_8014C6F4 | WAVE | 138 | 91 | 12558 | 2.15 | Y | after | 14 | WAVE: 14 mismatch | `.run/backlog_drafts/func_8014C6F4.c` |
|
||
| 7 | func_8012B4B8 | WAVE | 138 | 84 | 11592 | 1.99 | Y | jr_8012ACE0 | 0 | none — MATCH | `.run/backlog_drafts/func_8012B4B8.c` |
|
||
| 8 | func_8014D4C0 | WAVE | 138 | 84 | 11592 | 1.99 | Y | after | 15 | initial draft — modeled on the byte-matched sibling DEFINE_func_8014CD80 (engine_core.h) | `.run/backlog_drafts/func_8014D4C0.c` |
|
||
| 9 | func_80156670 | WAVE | 138 | 83 | 11454 | 1.96 | Y | jr_80154C24 | | none — MATCH (83 ins). Key: hoist `iVar1 = uVar3*4;` as its OWN statement before the if so gcc schedules `sll… | `.run/backlog_drafts/func_80156670.c` |
|
||
| 10 | func_8014CF04 | WAVE | 138 | 82 | 11316 | 1.94 | Y | after | 27 | WAVE: 27 mismatch | `.run/backlog_drafts/func_8014CF04.c` |
|
||
| 11 | func_8014D2A0 | WAVE | 138 | 80 | 11040 | 1.89 | Y | after | 2 | first draft — u8* IV walk over D_801202A0 with 0x10C stride, sibling-shaped after DEFINE_func_80163950() | `.run/backlog_drafts/func_8014D2A0.c` |
|
||
| 12 | func_8012A1BC | WAVE | 138 | 78 | 10764 | 1.85 | Y | a | 42 | 42/78 — block-copy bytes correct (char[8] => lwl/lwr/swl/swr); residual is gcc's load-hoist split. Target hoi… | `.run/backlog_drafts/func_8012A1BC.c` |
|
||
| 13 | func_8016163C | WAVE | 138 | 78 | 10764 | 1.85 | Y | jr_8015C32C | 50 | none — MATCH (78 ins). First arm calls func_801599A4 with NO arg (asm nop delay slot) via fn-ptr cast ((void(… | `.run/backlog_drafts/func_8016163C.c` |
|
||
| 14 | func_80163534 | WAVE | 138 | 76 | 10488 | 1.80 | Y | jr_8015C32C | 0 | none — MATCH (76 ins, relocation-masked) | `.run/backlog_drafts/func_80163534.c` |
|
||
| 15 | func_8014D610 | WAVE | 138 | 74 | 10212 | 1.75 | Y | after | 60 | WAVE: 60 mismatch | `.run/backlog_drafts/func_8014D610.c` |
|
||
| 16 | func_8012E014 | WAVE | 138 | 73 | 10074 | 1.73 | Y | jr_8012ACE0 | 0 | none — MATCH (expected; straightforward struct-field + global-copy body) | `.run/backlog_drafts/func_8012E014.c` |
|
||
| 17 | func_80161774 | WAVE | 138 | 69 | 9522 | 1.63 | Y | jr_8015C32C | 53 | none — MATCH (69 ins, match_one verified; clean nested-if; param_1 -> $s0 call-crossing) | `.run/backlog_drafts/func_80161774.c` |
|
||
| 18 | func_80133298 | WAVE | 138 | 65 | 8970 | 1.54 | Y | jr_8012ACE0 | 0 | none — MATCH (65 ins, relocation-masked) | `.run/backlog_drafts/func_80133298.c` |
|
||
| 19 | func_80140D68 | WAVE | 138 | 65 | 8970 | 1.54 | Y | main | 5 | 5-ins near-miss — gcc hoists `lui 0xff00` (the 0xFF000000 mask) one slot too early in the first AddPrim block… | `.run/backlog_drafts/func_80140D68.c` |
|
||
| 20 | func_8014A738 | WAVE | 138 | 62 | 8556 | 1.47 | Y | after | 11 | wip | `.run/backlog_drafts/func_8014A738.c` |
|
||
| 21 | func_8012A328 | WAVE | 138 | 60 | 8280 | 1.42 | Y | a | 0 | none — MATCH (60 ins, relocation-masked) | `.run/backlog_drafts/func_8012A328.c` |
|
||
| 22 | func_80138DE0 | WAVE | 138 | 60 | 8280 | 1.42 | Y | jr_801380E0 | 0 | none — MATCH (60 ins) | `.run/backlog_drafts/func_80138DE0.c` |
|
||
| 23 | func_801777BC | WAVE | 138 | 59 | 8142 | 1.40 | Y | jr_801734BC | 29 | body byte-matches; residual ~3 ins = prologue instruction-scheduling (final `sll t8,16` / `lw param_7` / `add… | `.run/backlog_drafts/func_801777BC.c` |
|
||
| 24 | func_8012B77C | WAVE | 138 | 58 | 8004 | 1.37 | Y | jr_8012ACE0 | 33 | gcc instruction-scheduler load-ordering + 1st-ratan2 delay-slot fill differ (s2 subtraction lands early inste… | `.run/backlog_drafts/func_8012B77C.c` |
|
||
| 25 | func_801759D8 | WAVE | 138 | 56 | 7728 | 1.33 | Y | jr_801734BC | 0 | none — MATCH (56 ins) | `.run/backlog_drafts/func_801759D8.c` |
|
||
| 26 | func_80175820 | WAVE | 138 | 55 | 7590 | 1.30 | Y | jr_801734BC | 4 | body BYTE-EXACT (52 ins match); only residual is target's phantom 0x10 stack frame (args_size=16 from an elim… | `.run/backlog_drafts/func_80175820.c` |
|
||
| 27 | func_801758FC | WAVE | 138 | 55 | 7590 | 1.30 | Y | jr_801734BC | 0 | none — MATCH (55 ins) | `.run/backlog_drafts/func_801758FC.c` |
|
||
| 28 | func_80176144 | WAVE | 138 | 53 | 7314 | 1.25 | Y | jr_801734BC | 0 | none — MATCH | `.run/backlog_drafts/func_80176144.c` |
|
||
| 29 | func_8012F49C | WAVE | 138 | 51 | 7038 | 1.21 | Y | jr_8012ACE0 | 0 | none — MATCH (51 ins, relocation-masked) | `.run/backlog_drafts/func_8012F49C.c` |
|
||
| 30 | func_801376E8 | WAVE | 138 | 51 | 7038 | 1.21 | Y | jr_80135D20 | 0 | none — MATCH (51 ins). 3 levers: (1) adjacent-field array u16 D_80126A14[] for A14/A16 | `.run/backlog_drafts/func_801376E8.c` |
|
||
| 31 | func_80146750 | WAVE | 138 | 47 | 6486 | 1.11 | Y | after | 45 | WAVE: 45 mismatch | `.run/backlog_drafts/func_80146750.c` |
|
||
| 32 | func_8014C4AC | WAVE | 138 | 47 | 6486 | 1.11 | Y | after | 0 | none — MATCH | `.run/backlog_drafts/func_8014C4AC.c` |
|
||
| 33 | func_80161374 | WAVE | 138 | 41 | 5658 | 0.97 | Y | jr_8015C32C | 10 | none — MATCH (41/41 relocation-masked) | `.run/backlog_drafts/func_80161374.c` |
|
||
| 34 | func_801778A8 | WAVE | 138 | 38 | 5244 | 0.90 | Y | jr_801734BC | 36 | WAVE: 36 mismatch | `.run/backlog_drafts/func_801778A8.c` |
|
||
| 35 | func_80161888 | WAVE | 138 | 37 | 5106 | 0.88 | Y | jr_8015C32C | 30 | none — MATCH (proxy verified) | `.run/backlog_drafts/func_80161888.c` |
|
||
| 36 | func_8012F40C | WAVE | 138 | 36 | 4968 | 0.85 | Y | jr_8012ACE0 | 0 | none — MATCH (address rematerialized per call via caller-saved $a0 pin) | `.run/backlog_drafts/func_8012F40C.c` |
|
||
| 37 | func_80144B14 | WAVE | 138 | 34 | 4692 | 0.80 | Y | main | 31 | none — MATCH (34 ins). Two stack structs (s16[3] each) passed by addr to | `.run/backlog_drafts/func_80144B14.c` |
|
||
| 38 | func_8014F3E8 | WAVE | 138 | 32 | 4416 | 0.76 | Y | after | 0 | none — MATCH | `.run/backlog_drafts/func_8014F3E8.c` |
|
||
| 39 | func_80147364 | WAVE | 138 | 30 | 4140 | 0.71 | Y | after | 4 | none — MATCH (30 ins). Lever: hoist &D_80126B58 into a local ptr `u8 *p=&D_80126B58;` so gcc | `.run/backlog_drafts/func_80147364.c` |
|
||
| 40 | func_8016706C | WAVE | 138 | 30 | 4140 | 0.71 | Y | jr_8015C32C | 0 | none — MATCH (pending gate) | `.run/backlog_drafts/func_8016706C.c` |
|
||
|
||
*(+51 more WAVE fns — see `.run/worklist.json`)*
|
||
|
||
### O0 — 5 fns, 0.7% of remaining gain
|
||
|
||
| # | name | class | reach | nins | gain_ins | %rem | cached | region | close | where it stuck | best draft |
|
||
|--:|------|-------|------:|-----:|---------:|-----:|--------|--------|------:|----------------|------------|
|
||
| 1 | func_8013C08C | O0 | 138 | 27 | 3726 | 0.64 | Y | o0 | 26 | WAVE: 26 mismatch | `.run/backlog_drafts/func_8013C08C.c` |
|
||
| 2 | func_8013B83C | O0 | 1 | 272 | 272 | 0.05 | Y | o0 | | | |
|
||
| 3 | func_8013BD74 | O0 | 1 | 198 | 198 | 0.03 | Y | o0 | 192 | none — MATCH | `.run/backlog_drafts/func_8013BD74.c` |
|
||
| 4 | func_8013B6A0 | O0 | 1 | 67 | 67 | 0.01 | Y | o0 | | | |
|
||
| 5 | func_8013B598 | O0 | 1 | 66 | 66 | 0.01 | Y | o0 | 66 | WAVE: 66 mismatch | `.run/backlog_drafts/func_8013B598.c` |
|
||
|
||
### O1 — 1 fns, 0.8% of remaining gain
|
||
|
||
| # | name | class | reach | nins | gain_ins | %rem | cached | region | close | where it stuck | best draft |
|
||
|--:|------|-------|------:|-----:|---------:|-----:|--------|--------|------:|----------------|------------|
|
||
| 1 | func_80161A90 | O1 | 138 | 34 | 4692 | 0.80 | Y | jr_8015C32C | 26 | WAVE: 26 mismatch | `.run/backlog_drafts/func_80161A90.c` |
|
||
|
||
### STUB — 6 fns, 6.7% of remaining gain
|
||
|
||
| # | name | class | reach | nins | gain_ins | %rem | cached | region | close | where it stuck | best draft |
|
||
|--:|------|-------|------:|-----:|---------:|-----:|--------|--------|------:|----------------|------------|
|
||
| 1 | func_801330E0 | STUB | 138 | 110 | 15180 | 2.60 | Y | jr_8012ACE0 | 7 | STUB: 7 mismatch | `.run/backlog_drafts/func_801330E0.c` |
|
||
| 2 | func_80158638 | STUB | 138 | 87 | 12006 | 2.06 | Y | jr_80154C24 | 1 | STUB: 1 mismatch | `.run/backlog_drafts/func_80158638.c` |
|
||
| 3 | func_8012EFB8 | STUB | 138 | 32 | 4416 | 0.76 | Y | jr_8012ACE0 | 11 | none — MATCH (32 ins, byte-verified via objdump -dz; match_one's default objdump elides the 2 consecutive rtp… | `.run/backlog_drafts/func_8012EFB8.c` |
|
||
| 4 | func_8016BA68 | STUB | 138 | 29 | 4002 | 0.69 | Y | jr_8016AB6C | 1 | STUB: 1 mismatch | `.run/backlog_drafts/func_8016BA68.c` |
|
||
| 5 | func_80162CCC | STUB | 138 | 23 | 3174 | 0.54 | Y | jr_8015C32C | 0 | match_one MATCH but gate rejected (declaration/TU plumbing) | `.run/backlog_drafts/func_80162CCC.c` |
|
||
| 6 | func_80138C60 | STUB | 1 | 62 | 62 | 0.01 | n | jr_801380E0 | | | |
|
||
|