Files
BFM-decomp/docs/worklist.md
T
Drew T 41e454ec1f chore(phase-25): T0 — refresh sigs/surveys, regen worklist+backlog, fix sig_image h_norm doc
- housekeeping: deleted stale root gccdump.lreg (gcc default -da RTL dump, dumpbase
  "gccdump"; a one-off RTL-inspection run at root CWD, NOT a committed tool). Practice:
  RTL dumps go to a .run/ CWD or -dumpbase .run/gccdump (R12)
- make sig-overlays (134 sigs); worklist.py --refresh -> build_fuel_manifest + backlog
  render: docs/worklist.md + docs/backlog.md regenerated (stale Jun-26 ranking killed;
  the banked whale func_80144B9C dropped from backlog, P9)
- fix tools/sig_image.py docstring: h_norm is the live norm_stream normalizer, not a
  "T5 placeholder" (R21/R30)
- CURRENT_PHASE.md: Phase-25 plan-of-record + T0 frontier survey (R14): h_norm 2,764
  multi-member families / 11.1 MB; 46% of large solo monsters (3,989/8,670) are family
  members; reach-134 h_exact warm-up = 130 classes / 4.11 MB
2026-07-08 01:02:58 -06:00

187 lines
22 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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 ×134 — 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:** 130 · **total remaining gain:** 339,070 ins (1,356,280 bytes ×-fleet)
## Idiom-class summary (the groups)
| class | count | gain_ins | % of remaining |
|-------|------:|---------:|---------------:|
| GIANT | 1 | 26,532 | 7.8% |
| STRUCT | 20 | 30,501 | 9.0% |
| PINS | 8 | 24,438 | 7.2% |
| WAVE | 80 | 227,714 | 67.2% |
| O0 | 9 | 4,750 | 1.4% |
| STUB | 12 | 25,135 | 7.4% |
## 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 | 134 | 198 | 26532 | 7.82 | 7.8 | 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_80137DD4 | STRUCT | 134 | 129 | 17286 | 5.10 | 12.9 | Y | a | 107 | regalloc fully matches (frame -0x30; s4/s3/s5=params, s2=mask, s1=ptr w/ in-place +0x24 reuse, s0=acc+reused … | `.run/backlog_drafts/func_80137DD4.c` |
| 3 | func_801325B8 | WAVE | 134 | 113 | 15142 | 4.47 | 17.4 | Y | a | 4 | 4/113 — prologue save-order of the $s0(cur/p3) vs $s5(p1) pair; gcc emits | `.run/backlog_drafts/func_801325B8.c` |
| 4 | func_801330E0 | STUB | 134 | 110 | 14740 | 4.35 | 21.7 | Y | a | 79 | none — MATCH (110/110 words byte-identical via objcopy raw .text, reloc-masked on jal+%hi/%lo(D_800AF648)). m… | `.run/backlog_drafts/func_801330E0.c` |
| 5 | func_8012CC88 | WAVE | 134 | 105 | 14070 | 4.15 | 25.9 | Y | a | 0 | none — MATCH (105 ins, relocation-masked) | `.run/backlog_drafts/func_8012CC88.c` |
| 6 | func_801387B8 | WAVE | 134 | 100 | 13400 | 3.95 | 29.8 | Y | a | 50 | the two scanned bytes land in $a0/$a1 not $a1/$a2 (gcc-2.7.2 grabs the freed incoming-arg $a0 for the first l… | `.run/backlog_drafts/func_801387B8.c` |
| 7 | func_801379FC | WAVE | 134 | 97 | 12998 | 3.83 | 33.7 | Y | a | 0 | none — MATCH (match_one 97/97) | `.run/backlog_drafts/func_801379FC.c` |
| 8 | func_8012B4B8 | WAVE | 134 | 84 | 11256 | 3.32 | 37.0 | Y | a | 0 | none — MATCH | `.run/backlog_drafts/func_8012B4B8.c` |
| 9 | func_8012E138 | WAVE | 134 | 81 | 10854 | 3.20 | 40.2 | Y | a | 0 | none — MATCH (81/81 ins, match_one proxy); reloaded ptr pinned to $a0 | `.run/backlog_drafts/func_8012E138.c` |
| 10 | func_8012A1BC | WAVE | 134 | 78 | 10452 | 3.08 | 43.3 | 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` |
| 11 | func_80137178 | WAVE | 134 | 78 | 10452 | 3.08 | 46.4 | Y | a | 15 | reg values all correct; prologue independent-addiu order + lazy sw placement differ | `.run/backlog_drafts/func_80137178.c` |
| 12 | func_8012E014 | WAVE | 134 | 73 | 9782 | 2.88 | 49.2 | Y | a | 0 | none — MATCH (expected; straightforward struct-field + global-copy body) | `.run/backlog_drafts/func_8012E014.c` |
| 13 | func_80132F40 | STRUCT | 134 | 72 | 9648 | 2.85 | 52.1 | Y | a | | gcc gives src (sp+0x10) a 5th saved reg ($s3, frame 0x38 not 0x40); target rematerializes | `.run/backlog_drafts/func_80132F40.c` |
| 14 | func_80130C08 | WAVE | 134 | 65 | 8710 | 2.57 | 54.7 | Y | a | 5 | tail shares one jal func_80131CA8 between the a1=5 and a1=0x38 arms via `j .L80130CEC` with a DUPLICATED `mov… | `.run/backlog_drafts/func_80130C08.c` |
| 15 | func_80133298 | WAVE | 134 | 65 | 8710 | 2.57 | 57.2 | Y | a | 0 | none — MATCH (65 ins, relocation-masked) | `.run/backlog_drafts/func_80133298.c` |
| 16 | func_80140D68 | WAVE | 134 | 65 | 8710 | 2.57 | 59.8 | 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` |
| 17 | func_80136F3C | WAVE | 134 | 61 | 8174 | 2.41 | 62.2 | Y | a | 10 | 10/61 — regalloc EXACT (param-copy + corner register-pins). residual = gcc list-scheduler permutation of the … | `.run/backlog_drafts/func_80136F3C.c` |
| 18 | func_8012A328 | WAVE | 134 | 60 | 8040 | 2.37 | 64.6 | Y | a | 0 | none — MATCH (60 ins, relocation-masked) | `.run/backlog_drafts/func_8012A328.c` |
| 19 | func_80130650 | WAVE | 134 | 60 | 8040 | 2.37 | 66.9 | Y | a | | none — MATCH (60 ins). ((void (*)(void))func_801319E0)() called with NO arg in the >=0x10 branch (target jal+… | `.run/backlog_drafts/func_80130650.c` |
| 20 | func_80138DE0 | WAVE | 134 | 60 | 8040 | 2.37 | 69.3 | Y | a | 0 | none — MATCH (60 ins) | `.run/backlog_drafts/func_80138DE0.c` |
| 21 | func_8012B77C | WAVE | 134 | 58 | 7772 | 2.29 | 71.6 | Y | a | 33 | gcc instruction-scheduler load-ordering + 1st-ratan2 delay-slot fill differ (s2 subtraction lands early inste… | `.run/backlog_drafts/func_8012B77C.c` |
| 22 | func_8012F49C | WAVE | 134 | 51 | 6834 | 2.02 | 73.6 | Y | a | 29 | gcc CSEs the two &D_800AF648 into one call-crossing pseudo and allocates it the | `.run/backlog_drafts/func_8012F49C.c` |
| 23 | func_801376E8 | WAVE | 134 | 51 | 6834 | 2.02 | 75.6 | Y | a | 0 | none — MATCH (51 ins). 3 levers: (1) adjacent-field array u16 D_80126A14[] for A14/A16 | `.run/backlog_drafts/func_801376E8.c` |
| 24 | func_80136DFC | PINS | 134 | 50 | 6700 | 1.98 | 77.6 | Y | a | 0 | none — MATCH | `.run/backlog_drafts/func_80136DFC.c` |
| 25 | func_80129C40 | PINS | 134 | 46 | 6164 | 1.82 | 79.4 | Y | a | 0 | none — MATCH (array-of-struct %lo-fold for the two 3-element 0xA4-stride bases) | `.run/backlog_drafts/func_80129C40.c` |
| 26 | func_80130A18 | WAVE | 134 | 43 | 5762 | 1.70 | 81.1 | Y | a | | none — MATCH (two separate Vec3s locals give the 8-byte-spaced sp+0x10/sp+0x18 blocks) | `.run/backlog_drafts/func_80130A18.c` |
| 27 | func_80131D68 | WAVE | 134 | 38 | 5092 | 1.50 | 82.6 | Y | a | 0 | return value held in $v0 per-path (no $s1 frame); using explicit returns | `.run/backlog_drafts/func_80131D68.c` |
| 28 | func_80131A34 | PINS | 134 | 37 | 4958 | 1.46 | 84.1 | Y | a | 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` |
| 29 | func_8012F40C | WAVE | 134 | 36 | 4824 | 1.42 | 85.5 | Y | a | 0 | none — MATCH (address rematerialized per call via caller-saved $a0 pin) | `.run/backlog_drafts/func_8012F40C.c` |
| 30 | func_8012A6D0 | STUB | 134 | 34 | 4556 | 1.34 | 86.9 | Y | a | 0 | none — MATCH (sum order p[2]^2 + p[0]^2, then ratan2(p1[1]-p2[1], (s16)dist)) | `.run/backlog_drafts/func_8012A6D0.c` |
| 31 | func_80144B14 | WAVE | 134 | 34 | 4556 | 1.34 | 88.2 | Y | main | 31 | none — MATCH (34 ins). Two stack structs (s16[3] each) passed by addr to | `.run/backlog_drafts/func_80144B14.c` |
| 32 | func_8012EFB8 | STUB | 134 | 32 | 4288 | 1.26 | 89.5 | Y | a | 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` |
| 33 | func_8012F274 | WAVE | 134 | 29 | 3886 | 1.15 | 90.6 | Y | a | 0 | none — MATCH (29 ins, match_one byte-clean via relocation-masked pipeline) | `.run/backlog_drafts/func_8012F274.c` |
| 34 | func_80131CF4 | WAVE | 134 | 29 | 3886 | 1.15 | 91.8 | Y | a | 15 | 15 mismatches cascade from a 2-instruction gap — target reloads *param_1 (lw v0,0(a0)) into v0 before the loo… | `.run/backlog_drafts/func_80131CF4.c` |
| 35 | func_80141B90 | PINS | 134 | 29 | 3886 | 1.15 | 92.9 | Y | main | 24 | none — MATCH (29 ins); array-of-int %lo-fold + call + u16 if-block; volatile-double reserves the target's 8-b… | `.run/backlog_drafts/func_80141B90.c` |
| 36 | func_8013C08C | O0 | 134 | 27 | 3618 | 1.07 | 94.0 | Y | o0 | | | |
| 37 | func_80137614 | WAVE | 134 | 26 | 3484 | 1.03 | 95.0 | Y | a | 0 | none — MATCH (sibling func_8013767C pattern; all 3 params live across the call) | `.run/backlog_drafts/func_80137614.c` |
| 38 | func_8012A598 | WAVE | 134 | 24 | 3216 | 0.95 | 96.0 | Y | a | 0 | none — MATCH (24 ins, relocation-masked) | `.run/backlog_drafts/func_8012A598.c` |
| 39 | func_80131CA8 | PINS | 134 | 19 | 2546 | 0.75 | 96.7 | Y | a | 0 | none — MATCH (call-through-fnptr dispatcher: explicit return 1/return 0) | `.run/backlog_drafts/func_80131CA8.c` |
| 40 | func_8013F350 | STRUCT | 1 | 490 | 490 | 0.14 | 96.8 | Y | main | | | |
## GIANT hand-decomp queue — 1 fns, 7.8% of all remaining gain
| # | name | class | reach | nins | gain_ins | %rem | cached | region | close | where it stuck | best draft |
|--:|------|-------|------:|-----:|---------:|-----:|--------|--------|------:|----------------|------------|
| 1 | func_801412A8 | GIANT | 134 | 198 | 26532 | 7.82 | 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` |
## Idiom-group tables
### STRUCT — 20 fns, 9.0% of remaining gain
| # | name | class | reach | nins | gain_ins | %rem | cached | region | close | where it stuck | best draft |
|--:|------|-------|------:|-----:|---------:|-----:|--------|--------|------:|----------------|------------|
| 1 | func_80137DD4 | STRUCT | 134 | 129 | 17286 | 5.10 | Y | a | 107 | regalloc fully matches (frame -0x30; s4/s3/s5=params, s2=mask, s1=ptr w/ in-place +0x24 reuse, s0=acc+reused … | `.run/backlog_drafts/func_80137DD4.c` |
| 2 | func_80132F40 | STRUCT | 134 | 72 | 9648 | 2.85 | Y | a | | gcc gives src (sp+0x10) a 5th saved reg ($s3, frame 0x38 not 0x40); target rematerializes | `.run/backlog_drafts/func_80132F40.c` |
| 3 | func_8013F350 | STRUCT | 1 | 490 | 490 | 0.14 | Y | main | | | |
| 4 | func_801380E0 | STRUCT | 1 | 438 | 438 | 0.13 | n | a | | | |
| 5 | func_80131340 | STRUCT | 1 | 424 | 424 | 0.13 | n | a | | | |
| 6 | func_80135EB0 | STRUCT | 1 | 289 | 289 | 0.09 | n | a | | | |
| 7 | func_80134C20 | STRUCT | 1 | 230 | 230 | 0.07 | n | a | | | |
| 8 | func_8013FFD8 | STRUCT | 1 | 213 | 213 | 0.06 | Y | main | | | |
| 9 | func_8014032C | STRUCT | 1 | 183 | 183 | 0.05 | Y | main | | | |
| 10 | func_80135A4C | STRUCT | 1 | 181 | 181 | 0.05 | n | a | | | |
| 11 | func_801347A0 | STRUCT | 1 | 162 | 162 | 0.05 | n | a | | | |
| 12 | func_801299C8 | STRUCT | 1 | 158 | 158 | 0.05 | n | a | | | |
| 13 | func_8012C890 | STRUCT | 1 | 149 | 149 | 0.04 | n | a | | | |
| 14 | func_80135260 | STRUCT | 1 | 136 | 136 | 0.04 | n | a | | | |
| 15 | func_8012AAAC | STRUCT | 1 | 125 | 125 | 0.04 | n | a | | | |
| 16 | func_80140608 | STRUCT | 1 | 123 | 123 | 0.04 | Y | main | | | |
| 17 | func_80135888 | STRUCT | 1 | 113 | 113 | 0.03 | n | a | | | |
| 18 | func_80135D20 | STRUCT | 1 | 100 | 100 | 0.03 | n | a | | | |
| 19 | func_80142A10 | STRUCT | 1 | 28 | 28 | 0.01 | Y | main | 1 | none — MATCH (pending byte-gate) | `.run/backlog_drafts/func_80142A10.c` |
| 20 | func_8012ACE0 | STRUCT | 1 | 25 | 25 | 0.01 | n | a | 21 | STRUCT: 21 mismatch | `.run/backlog_drafts/func_8012ACE0.c` |
### PINS — 8 fns, 7.2% of remaining gain
| # | name | class | reach | nins | gain_ins | %rem | cached | region | close | where it stuck | best draft |
|--:|------|-------|------:|-----:|---------:|-----:|--------|--------|------:|----------------|------------|
| 1 | func_80136DFC | PINS | 134 | 50 | 6700 | 1.98 | Y | a | 0 | none — MATCH | `.run/backlog_drafts/func_80136DFC.c` |
| 2 | func_80129C40 | PINS | 134 | 46 | 6164 | 1.82 | Y | a | 0 | none — MATCH (array-of-struct %lo-fold for the two 3-element 0xA4-stride bases) | `.run/backlog_drafts/func_80129C40.c` |
| 3 | func_80131A34 | PINS | 134 | 37 | 4958 | 1.46 | Y | a | 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` |
| 4 | func_80141B90 | PINS | 134 | 29 | 3886 | 1.15 | Y | main | 24 | none — MATCH (29 ins); array-of-int %lo-fold + call + u16 if-block; volatile-double reserves the target's 8-b… | `.run/backlog_drafts/func_80141B90.c` |
| 5 | func_80131CA8 | PINS | 134 | 19 | 2546 | 0.75 | Y | a | 0 | none — MATCH (call-through-fnptr dispatcher: explicit return 1/return 0) | `.run/backlog_drafts/func_80131CA8.c` |
| 6 | func_80141A60 | PINS | 1 | 76 | 76 | 0.02 | Y | main | 63 | none — MATCH (76 ins, relocation-masked). Body byte-identical; target reserves an 8-byte | `.run/backlog_drafts/func_80141A60.c` |
| 7 | func_8013E83C | PINS | 1 | 71 | 71 | 0.02 | Y | main | | none — MATCH (scalar global stores + 2 conditional calls; §3-T4 branch-polarity invert on the &0xFF test) | `.run/backlog_drafts/func_8013E83C.c` |
| 8 | func_80140E6C | PINS | 1 | 37 | 37 | 0.01 | Y | main | 4 | 4 ins — each save-across-call copy (move s1,v0 / move s0,v0) should fill the NEXT jal's delay slot (target) b… | `.run/backlog_drafts/func_80140E6C.c` |
### WAVE — 80 fns, 67.2% of remaining gain
| # | name | class | reach | nins | gain_ins | %rem | cached | region | close | where it stuck | best draft |
|--:|------|-------|------:|-----:|---------:|-----:|--------|--------|------:|----------------|------------|
| 1 | func_801325B8 | WAVE | 134 | 113 | 15142 | 4.47 | Y | a | 4 | 4/113 — prologue save-order of the $s0(cur/p3) vs $s5(p1) pair; gcc emits | `.run/backlog_drafts/func_801325B8.c` |
| 2 | func_8012CC88 | WAVE | 134 | 105 | 14070 | 4.15 | Y | a | 0 | none — MATCH (105 ins, relocation-masked) | `.run/backlog_drafts/func_8012CC88.c` |
| 3 | func_801387B8 | WAVE | 134 | 100 | 13400 | 3.95 | Y | a | 50 | the two scanned bytes land in $a0/$a1 not $a1/$a2 (gcc-2.7.2 grabs the freed incoming-arg $a0 for the first l… | `.run/backlog_drafts/func_801387B8.c` |
| 4 | func_801379FC | WAVE | 134 | 97 | 12998 | 3.83 | Y | a | 0 | none — MATCH (match_one 97/97) | `.run/backlog_drafts/func_801379FC.c` |
| 5 | func_8012B4B8 | WAVE | 134 | 84 | 11256 | 3.32 | Y | a | 0 | none — MATCH | `.run/backlog_drafts/func_8012B4B8.c` |
| 6 | func_8012E138 | WAVE | 134 | 81 | 10854 | 3.20 | Y | a | 0 | none — MATCH (81/81 ins, match_one proxy); reloaded ptr pinned to $a0 | `.run/backlog_drafts/func_8012E138.c` |
| 7 | func_8012A1BC | WAVE | 134 | 78 | 10452 | 3.08 | 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` |
| 8 | func_80137178 | WAVE | 134 | 78 | 10452 | 3.08 | Y | a | 15 | reg values all correct; prologue independent-addiu order + lazy sw placement differ | `.run/backlog_drafts/func_80137178.c` |
| 9 | func_8012E014 | WAVE | 134 | 73 | 9782 | 2.88 | Y | a | 0 | none — MATCH (expected; straightforward struct-field + global-copy body) | `.run/backlog_drafts/func_8012E014.c` |
| 10 | func_80130C08 | WAVE | 134 | 65 | 8710 | 2.57 | Y | a | 5 | tail shares one jal func_80131CA8 between the a1=5 and a1=0x38 arms via `j .L80130CEC` with a DUPLICATED `mov… | `.run/backlog_drafts/func_80130C08.c` |
| 11 | func_80133298 | WAVE | 134 | 65 | 8710 | 2.57 | Y | a | 0 | none — MATCH (65 ins, relocation-masked) | `.run/backlog_drafts/func_80133298.c` |
| 12 | func_80140D68 | WAVE | 134 | 65 | 8710 | 2.57 | 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` |
| 13 | func_80136F3C | WAVE | 134 | 61 | 8174 | 2.41 | Y | a | 10 | 10/61 — regalloc EXACT (param-copy + corner register-pins). residual = gcc list-scheduler permutation of the … | `.run/backlog_drafts/func_80136F3C.c` |
| 14 | func_8012A328 | WAVE | 134 | 60 | 8040 | 2.37 | Y | a | 0 | none — MATCH (60 ins, relocation-masked) | `.run/backlog_drafts/func_8012A328.c` |
| 15 | func_80130650 | WAVE | 134 | 60 | 8040 | 2.37 | Y | a | | none — MATCH (60 ins). ((void (*)(void))func_801319E0)() called with NO arg in the >=0x10 branch (target jal+… | `.run/backlog_drafts/func_80130650.c` |
| 16 | func_80138DE0 | WAVE | 134 | 60 | 8040 | 2.37 | Y | a | 0 | none — MATCH (60 ins) | `.run/backlog_drafts/func_80138DE0.c` |
| 17 | func_8012B77C | WAVE | 134 | 58 | 7772 | 2.29 | Y | a | 33 | gcc instruction-scheduler load-ordering + 1st-ratan2 delay-slot fill differ (s2 subtraction lands early inste… | `.run/backlog_drafts/func_8012B77C.c` |
| 18 | func_8012F49C | WAVE | 134 | 51 | 6834 | 2.02 | Y | a | 29 | gcc CSEs the two &D_800AF648 into one call-crossing pseudo and allocates it the | `.run/backlog_drafts/func_8012F49C.c` |
| 19 | func_801376E8 | WAVE | 134 | 51 | 6834 | 2.02 | Y | a | 0 | none — MATCH (51 ins). 3 levers: (1) adjacent-field array u16 D_80126A14[] for A14/A16 | `.run/backlog_drafts/func_801376E8.c` |
| 20 | func_80130A18 | WAVE | 134 | 43 | 5762 | 1.70 | Y | a | | none — MATCH (two separate Vec3s locals give the 8-byte-spaced sp+0x10/sp+0x18 blocks) | `.run/backlog_drafts/func_80130A18.c` |
| 21 | func_80131D68 | WAVE | 134 | 38 | 5092 | 1.50 | Y | a | 0 | return value held in $v0 per-path (no $s1 frame); using explicit returns | `.run/backlog_drafts/func_80131D68.c` |
| 22 | func_8012F40C | WAVE | 134 | 36 | 4824 | 1.42 | Y | a | 0 | none — MATCH (address rematerialized per call via caller-saved $a0 pin) | `.run/backlog_drafts/func_8012F40C.c` |
| 23 | func_80144B14 | WAVE | 134 | 34 | 4556 | 1.34 | Y | main | 31 | none — MATCH (34 ins). Two stack structs (s16[3] each) passed by addr to | `.run/backlog_drafts/func_80144B14.c` |
| 24 | func_8012F274 | WAVE | 134 | 29 | 3886 | 1.15 | Y | a | 0 | none — MATCH (29 ins, match_one byte-clean via relocation-masked pipeline) | `.run/backlog_drafts/func_8012F274.c` |
| 25 | func_80131CF4 | WAVE | 134 | 29 | 3886 | 1.15 | Y | a | 15 | 15 mismatches cascade from a 2-instruction gap — target reloads *param_1 (lw v0,0(a0)) into v0 before the loo… | `.run/backlog_drafts/func_80131CF4.c` |
| 26 | func_80137614 | WAVE | 134 | 26 | 3484 | 1.03 | Y | a | 0 | none — MATCH (sibling func_8013767C pattern; all 3 params live across the call) | `.run/backlog_drafts/func_80137614.c` |
| 27 | func_8012A598 | WAVE | 134 | 24 | 3216 | 0.95 | Y | a | 0 | none — MATCH (24 ins, relocation-masked) | `.run/backlog_drafts/func_8012A598.c` |
| 28 | func_8013FAF8 | WAVE | 1 | 312 | 312 | 0.09 | Y | main | | | |
| 29 | func_80130D48 | WAVE | 1 | 266 | 266 | 0.08 | n | a | | | |
| 30 | func_80140958 | WAVE | 1 | 260 | 260 | 0.08 | Y | main | | | |
| 31 | func_80135480 | WAVE | 1 | 258 | 258 | 0.08 | n | a | | | |
| 32 | func_8012956C | WAVE | 1 | 226 | 226 | 0.07 | n | a | | | |
| 33 | func_80133784 | WAVE | 1 | 203 | 203 | 0.06 | n | a | | | |
| 34 | func_8013DD68 | WAVE | 1 | 187 | 187 | 0.06 | Y | main | | | |
| 35 | func_80136334 | WAVE | 1 | 161 | 161 | 0.05 | n | a | | | |
| 36 | func_80136824 | WAVE | 1 | 156 | 156 | 0.05 | n | a | | | |
| 37 | func_801365B8 | WAVE | 1 | 155 | 155 | 0.05 | n | a | | | |
| 38 | func_80133AB0 | WAVE | 1 | 137 | 137 | 0.04 | n | a | | | |
| 39 | func_8013EB7C | WAVE | 1 | 124 | 124 | 0.04 | Y | main | | | |
| 40 | func_8013D178 | WAVE | 1 | 110 | 110 | 0.03 | Y | main | | | |
*(+40 more WAVE fns — see `.run/worklist.json`)*
### O0 — 9 fns, 1.4% of remaining gain
| # | name | class | reach | nins | gain_ins | %rem | cached | region | close | where it stuck | best draft |
|--:|------|-------|------:|-----:|---------:|-----:|--------|--------|------:|----------------|------------|
| 1 | func_8013C08C | O0 | 134 | 27 | 3618 | 1.07 | Y | o0 | | | |
| 2 | func_8013C414 | O0 | 1 | 329 | 329 | 0.10 | Y | o0 | | | |
| 3 | func_8013B83C | O0 | 1 | 272 | 272 | 0.08 | Y | o0 | | | |
| 4 | func_8013BD74 | O0 | 1 | 198 | 198 | 0.06 | Y | o0 | | | |
| 5 | func_8013C0F8 | O0 | 1 | 154 | 154 | 0.05 | Y | o0 | | | |
| 6 | func_8013B6A0 | O0 | 1 | 67 | 67 | 0.02 | Y | o0 | | | |
| 7 | func_8013B598 | O0 | 1 | 66 | 66 | 0.02 | Y | o0 | | | |
| 8 | func_8013BC7C | O0 | 1 | 24 | 24 | 0.01 | Y | o0 | | | |
| 9 | func_8013BCDC | O0 | 1 | 22 | 22 | 0.01 | Y | o0 | | | |
### STUB — 12 fns, 7.4% of remaining gain
| # | name | class | reach | nins | gain_ins | %rem | cached | region | close | where it stuck | best draft |
|--:|------|-------|------:|-----:|---------:|-----:|--------|--------|------:|----------------|------------|
| 1 | func_801330E0 | STUB | 134 | 110 | 14740 | 4.35 | Y | a | 79 | none — MATCH (110/110 words byte-identical via objcopy raw .text, reloc-masked on jal+%hi/%lo(D_800AF648)). m… | `.run/backlog_drafts/func_801330E0.c` |
| 2 | func_8012A6D0 | STUB | 134 | 34 | 4556 | 1.34 | Y | a | 0 | none — MATCH (sum order p[2]^2 + p[0]^2, then ratan2(p1[1]-p2[1], (s16)dist)) | `.run/backlog_drafts/func_8012A6D0.c` |
| 3 | func_8012EFB8 | STUB | 134 | 32 | 4288 | 1.26 | Y | a | 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_80133CD4 | STUB | 1 | 399 | 399 | 0.12 | n | a | | | |
| 5 | func_8013CB84 | STUB | 1 | 249 | 249 | 0.07 | Y | main | | | |
| 6 | func_8013D53C | STUB | 1 | 240 | 240 | 0.07 | Y | main | | | |
| 7 | func_8013B274 | STUB | 1 | 189 | 189 | 0.06 | n | a | | | |
| 8 | func_8013D9B0 | STUB | 1 | 141 | 141 | 0.04 | Y | main | | | |
| 9 | func_80140F00 | STUB | 1 | 128 | 128 | 0.04 | Y | main | | | |
| 10 | func_8013AD38 | STUB | 1 | 122 | 122 | 0.04 | n | a | | | |
| 11 | func_80138C60 | STUB | 1 | 62 | 62 | 0.02 | n | a | | | |
| 12 | func_801336E8 | STUB | 1 | 21 | 21 | 0.01 | n | a | | won't compile standalone (loose-typing / missing decl) | |