# 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 | | | |