mirror of
https://github.com/Druthulu/BFM-decomp
synced 2026-09-27 22:45:39 -04:00
feat(phase-29): ov_SC07_006 reach-138 crack-wave batch-1 — 6 x1 banks
Option (b) from the SESSION-12 checkpoint: fresh-exemplar crack-wave on the P27-onboarded ov_SC07_006 (84.6% -> 84.8%). New reusable builder tools/build_wave_args.py emits wave_binary.js args from a fuel manifest. - Drafting wave (wave_binary.js, 24 xHigh drafters over the top-24 reach-138 WAVE families by leverage): 16 self-assessed MATCH, 8 hit the session usage limit (redraft later). - Byte-gate: plain harvest_verify banked 2 (func_801325B8, func_80165CA0); gate_stage reconcile ladder (arity pre-pass + cast/sig_unify) banked +4 (func_8014FE60, func_8014A048, func_801678F0, func_80167540). 7 near, 6 reconcile-fail, 2 CC1-FAIL, 2 DIFF (the incomplete session-limit drafts). - R14/R35 leverage reality-check: nins*reach over-counts. 5 of 6 are already matched in ~135 overlays (only the onboarded SC07 tail ov_SC07_007/010/011 is live, +2-3 each). func_80165CA0 is a TRUE fresh family (135 live) — the x135 sweep prize, propagated next. - R22 clean-fleet 140/140 (engine_core.h arity edit fleet-safe); tools-health green (dedup 1849/0). Propagation is the next commit (§55b: banks first).
This commit is contained in:
@@ -6718,3 +6718,16 @@
|
||||
{"ts": "2026-07-22 21:43:49", "addr": null, "name": "func_80187DD0", "reach": null, "klass": "regalloc-order", "nins": null, "status": "near", "closeness": 0, "where_stuck": "none \u2014 MATCH (174 ins). Levers: obj = *(*(b+0x20)+0x20) reads via b not a (store side uses a);", "best_draft": ".run/backlog_drafts/func_80187DD0.c", "binary": "ov_SC06_018", "source": "worker", "residual": null, "passes_tried": null}
|
||||
{"ts": "2026-07-22 21:43:49", "addr": null, "name": "func_801886B0", "reach": null, "klass": "struct", "nins": null, "status": "near", "closeness": 0, "where_stuck": "none \u2014 MATCH (276 ins, relocation-masked)", "best_draft": ".run/backlog_drafts/func_801886B0.c", "binary": "ov_SC06_018", "source": "worker", "residual": null, "passes_tried": null}
|
||||
{"ts": "2026-07-22 21:43:49", "addr": null, "name": "func_8018D870", "reach": null, "klass": "regalloc-order", "nins": null, "status": "failed", "closeness": null, "where_stuck": "none \u2014 MATCH (match_one 380/380, relocation-masked). Levers: &&-DeMorgan for the mult block layout; lhu-corrected reads; split temps (t=func_8012C658 ret->v1, d8p=d8 load-temp->a0, s60/amt pinned $v1/$a1 for the mult chain); accumulate-in-place for the 0xe add; unsigned-short store for ori 0x8800; d8-load-via-temp to force the addu s3,a0 copy (fixes -1 length drift).", "best_draft": ".run/backlog_drafts/func_8018D870.c", "binary": "ov_SC06_018", "source": "worker", "residual": null, "passes_tried": null}
|
||||
{"ts": "2026-07-23 10:36:44", "addr": "0x8012cc88", "name": "func_8012CC88", "reach": 138, "klass": "struct", "nins": 105, "status": "failed", "closeness": null, "where_stuck": "none \u2014 MATCH", "best_draft": ".run/backlog_drafts/func_8012CC88.c", "binary": "ov_SC07_006", "source": "worker", "residual": null, "passes_tried": null}
|
||||
{"ts": "2026-07-23 10:36:44", "addr": "0x801463a0", "name": "func_801463A0", "reach": 138, "klass": "schedule", "nins": 101, "status": "failed", "closeness": null, "where_stuck": "none \u2014 MATCH (101 ins, relocation-masked)", "best_draft": ".run/backlog_drafts/func_801463A0.c", "binary": "ov_SC07_006", "source": "worker", "residual": null, "passes_tried": null}
|
||||
{"ts": "2026-07-23 10:36:45", "addr": "0x8014cd80", "name": "func_8014CD80", "reach": 138, "klass": "regalloc-order", "nins": 97, "status": "failed", "closeness": null, "where_stuck": "none \u2014 MATCH (97 ins). Levers: (1) goto-into-if to place the early-return", "best_draft": ".run/backlog_drafts/func_8014CD80.c", "binary": "ov_SC07_006", "source": "worker", "residual": null, "passes_tried": null}
|
||||
{"ts": "2026-07-23 10:36:45", "addr": "0x8014d12c", "name": "func_8014D12C", "reach": 138, "klass": "schedule", "nins": 93, "status": "failed", "closeness": null, "where_stuck": "block-placement \u2014 goto forces then-block to end (cookbook \u00a721 coupled join-placement)", "best_draft": ".run/backlog_drafts/func_8014D12C.c", "binary": "ov_SC07_006", "source": "worker", "residual": null, "passes_tried": null}
|
||||
{"ts": "2026-07-23 10:36:45", "addr": "0x8014f4c0", "name": "func_8014F4C0", "reach": 138, "klass": "struct", "nins": 141, "status": "near", "closeness": 130, "where_stuck": "none \u2014 MATCH (expansion of proven DEFINE_func_8014F4C0 macro, matched in 137 sibling overlays)", "best_draft": ".run/backlog_drafts/func_8014F4C0.c", "binary": "ov_SC07_006", "source": "worker", "residual": [[0, "27bdffd8 addiu\tsp,sp,-40", "27bdffd0 addiu $sp, $sp, -0x30"], [3, "afbf0024 sw\tra,36(sp)", "afbf0028 sw $ra, 0x28($sp)"], [4, "96020088 lhu\tv0,136(s0)", "afb10024 sw $s1, 0x24($sp)"], [5, "00000000 nop", "86020146 lh $v0, 0x146($s0)"], [6, "a7a20010 sh\tv0,16(sp)", "00000000 nop"], [7, "9602008a lhu\tv0,138(s0)", "10400005 beqz $v0, .L8014F4F4"], [9, "a7a20012 sh\tv0,18(sp)", "0c053dd3 jal func_8014F74C"], [10, "9602008c lhu\tv0,140(s0)", "00000000 nop"], [11, "00000000 nop", "08053db7 j .L8014F6DC"], [12, "a7a20014 sh\tv0,20(sp)", "00000000 nop"], [13, "96030006 lhu\tv1,6(s0)", "96020088 lhu $v0, 0x88($s0)"], [15, "a7a30018 sh\tv1,24(sp)", "a7a20010 sh $v0, 0x10($sp)"], [16, "9602000a lhu\tv0,10(s0)", "9602008a lhu $v0, 0x8A($s0)"], [18, "24440008 addiu\ta0,v0,8", "a7a20012 sh $v0, 0x12($sp)"], [19, "a7a4001a sh\ta0,26(sp)", "9602008c lhu $v0, 0x8C($s0)"], [20, "9605000e lhu\ta1,14(s0)", "00000000 nop"], [21, "00000000 nop", "a7a20014 sh $v0, 0x14($sp)"], [22, "a7a5001c sh\ta1,28(sp)", "96030006 lhu $v1, 0x6($s0)"], [23, "86020146 lh\tv0,326(s0)", "00000000 nop"], [24, "00000000 nop", "a7a30018 sh $v1, 0x18($sp)"], [25, "1040000d beqz\tv0,9c <func_8014F4C0+0x9c>", "9602000a lhu $v0, 0xA($s0)"], [27, "96020140 lhu\tv0,320(s0)", "24440008 addiu $a0, $v0, 0x8"], [28, "00000000 nop", "a7a4001a sh $a0, 0x1A($sp)"], [29, "00621021 addu\tv0,v1,v0", "9605000e lhu $a1, 0xE($s0)"]], "passes_tried": null}
|
||||
{"ts": "2026-07-23 10:36:45", "addr": null, "name": "func_80155800", "reach": null, "klass": "other", "nins": null, "status": "failed", "closeness": null, "where_stuck": "none \u2014 MATCH", "best_draft": ".run/backlog_drafts/func_80155800.c", "binary": "ov_SC07_006", "source": "worker", "residual": null, "passes_tried": null}
|
||||
{"ts": "2026-07-23 10:36:45", "addr": null, "name": "func_80166054", "reach": null, "klass": "regalloc-order", "nins": null, "status": "near", "closeness": 41, "where_stuck": "untested v2 \u2014 force eager shift+negate of call1 result BEFORE call2 (2 saved regs s3/s4)", "best_draft": ".run/backlog_drafts/func_80166054.c", "binary": "ov_SC07_006", "source": "worker", "residual": [[1, "afb10014 sw\ts1,20(sp)", "afb20018 sw $s2, 0x18($sp)"], [2, "00808821 move\ts1,a0", "00809021 addu $s2, $a0, $zero"], [6, "afb20018 sw\ts2,24(sp)", "afb10014 sw $s1, 0x14($sp)"], [8, "8e300034 lw\ts0,52(s1)", "8e500034 lw $s0, 0x34($s2)"], [9, "26250004 addiu\ta1,s1,4", "26450004 addiu $a1, $s2, 0x4"], [12, "8e23002c lw\tv1,44(s1)", "8e43002c lw $v1, 0x2C($s2)"], [17, "24120008 li\ts2,8", "24110008 addiu $s1, $zero, 0x8"], [23, "8e220030 lw\tv0,48(s1)", "8e420030 lw $v0, 0x30($s2)"], [27, "3052000f andi\ts2,v0,0xf", "3051000f andi $s1, $v0, 0xF"], [32, "02429804 sllv\ts3,v0,s2", "02229804 sllv $s3, $v0, $s1"], [36, "02422804 sllv\ta1,v0,s2", "02222804 sllv $a1, $v0, $s1"], [37, "8e23002c lw\tv1,44(s1)", "8e43002c lw $v1, 0x2C($s2)"], [43, "ae340010 sw\ts4,16(s1)", "ae540010 sw $s4, 0x10($s2)"], [44, "ae240018 sw\ta0,24(s1)", "ae440018 sw $a0, 0x18($s2)"], [46, "ae220014 sw\tv0,20(s1)", "ae420014 sw $v0, 0x14($s2)"], [47, "02202021 move\ta0,s1", "02402021 addu $a0, $s2, $zero"], [50, "02202021 move\ta0,s1", "02402021 addu $a0, $s2, $zero"], [56, "14800005 bnez\ta0,f8 <func_80166054+0xf8>", "1080001a beqz $a0, .L801661A0"], [59, "02202021 move\ta0,s1", "8c820004 lw $v0, 0x4($a0)"], [61, "00000000 nop", "00431025 or $v0, $v0, $v1"], [62, "34630040 ori\tv1,v1,0x40", "ac820004 sw $v0, 0x4($a0)"], [63, "ae240020 sw\ta0,32(s1)", "8e43002c lw $v1, 0x2C($s2)"], [64, "8c820004 lw\tv0,4(a0)", "24020003 addiu $v0, $zero, 0x3"], [65, "00000000 nop", "14620002 bne $v1, $v0, .L80166164"]], "passes_tried": null}
|
||||
{"ts": "2026-07-23 10:36:45", "addr": "0x80167714", "name": "func_80167714", "reach": 138, "klass": "schedule", "nins": 104, "status": "failed", "closeness": null, "where_stuck": "reload (move vs lw) + iVar2 a0-vs-v0 register cascade at the +0x1c merge", "best_draft": ".run/backlog_drafts/func_80167714.c", "binary": "ov_SC07_006", "source": "worker", "residual": null, "passes_tried": null}
|
||||
{"ts": "2026-07-23 10:36:45", "addr": null, "name": "func_80168070", "reach": null, "klass": "regalloc-order", "nins": null, "status": "near", "closeness": 0, "where_stuck": "none \u2014 MATCH (adapted from proven sibling func_8016A290; matrix is param_4 not a local)", "best_draft": ".run/backlog_drafts/func_80168070.c", "binary": "ov_SC07_006", "source": "worker", "residual": null, "passes_tried": null}
|
||||
{"ts": "2026-07-23 10:36:45", "addr": null, "name": "func_80168BDC", "reach": null, "klass": "regalloc-order", "nins": null, "status": "near", "closeness": 53, "where_stuck": "loop-increment materialization (target keeps i+1 in temp, dup in delay slot)", "best_draft": ".run/backlog_drafts/func_80168BDC.c", "binary": "ov_SC07_006", "source": "worker", "residual": [[0, "27bdff98 addiu\tsp,sp,-104", "27bdffa0 addiu $sp, $sp, -0x60"], [1, "afb00050 sw\ts0,80(sp)", "afb00048 sw $s0, 0x48($sp)"], [3, "afb3005c sw\ts3,92(sp)", "afb40058 sw $s4, 0x58($sp)"], [4, "00a09821 move\ts3,a1", "00a0a021 addu $s4, $a1, $zero"], [5, "afb40060 sw\ts4,96(sp)", "afb30054 sw $s3, 0x54($sp)"], [6, "00c0a021 move\ts4,a2", "00c09821 addu $s3, $a2, $zero"], [7, "afb20058 sw\ts2,88(sp)", "afb20050 sw $s2, 0x50($sp)"], [9, "afbf0064 sw\tra,100(sp)", "afbf005c sw $ra, 0x5C($sp)"], [11, "afb10054 sw\ts1,84(sp)", "afb1004c sw $s1, 0x4C($sp)"], [48, "00008821 move\ts1,zero", "00000000 nop"], [50, "1a40001c blez\ts2,13c <func_80168BDC+0x13c>", "a602000e sh $v0, 0xE($s0)"], [51, "a602000e sh\tv0,14(s0)", "00121400 sll $v0, $s2, 16"], [52, "02602021 move\ta0,s3", "00021c03 sra $v1, $v0, 16"], [53, "86060006 lh\ta2,6(s0)", "18600020 blez $v1, .L80168D34"], [54, "8607000a lh\ta3,10(s0)", "00008821 addu $s1, $zero, $zero"], [55, "8602000e lh\tv0,14(s0)", "00131400 sll $v0, $s3, 16"], [56, "02002821 move\ta1,s0", "00029c03 sra $s3, $v0, 16"], [57, "afb40014 sw\ts4,20(sp)", "00609021 addu $s2, $v1, $zero"], [58, "afa00018 sw\tzero,24(sp)", "3284ffff andi $a0, $s4, 0xFFFF"], [60, "afa20010 sw\tv0,16(sp)", "8607000a lh $a3, 0xA($s0)"], [61, "00401821 move\tv1,v0", "8602000e lh $v0, 0xE($s0)"], [62, "1060000a beqz\tv1,124 <func_80168BDC+0x124>", "02002821 addu $a1, $s0, $zero"], [63, "00000000 nop", "afb30014 sw $s3, 0x14($sp)"], [64, "96020012 lhu\tv0,18(s0)", "afa00018 sw $zero, 0x18($sp)"]], "passes_tried": null}
|
||||
{"ts": "2026-07-23 10:36:45", "addr": null, "name": "func_80169058", "reach": null, "klass": "plumbing", "nins": null, "status": "near", "closeness": 0, "where_stuck": "none \u2014 MATCH (verbatim from matched sibling ov_SC07_010 func_80169058)", "best_draft": ".run/backlog_drafts/func_80169058.c", "binary": "ov_SC07_006", "source": "worker", "residual": null, "passes_tried": null}
|
||||
{"ts": "2026-07-23 10:36:45", "addr": null, "name": "func_801749C8", "reach": null, "klass": "regalloc-order", "nins": null, "status": "near", "closeness": 75, "where_stuck": "s1/s2 saved-reg pair for (*(short *)&D_80126B5E) vs D_80126B66 + single-blob stack frame layout", "best_draft": ".run/backlog_drafts/func_801749C8.c", "binary": "ov_SC07_006", "source": "worker", "residual": [[0, "27bdffa8 addiu\tsp,sp,-88", "27bdffb0 addiu $sp, $sp, -0x50"], [3, "afbf0050 sw\tra,80(sp)", "afbf004c sw $ra, 0x4C($sp)"], [4, "afb3004c sw\ts3,76(sp)", "afb20048 sw $s2, 0x48($sp)"], [5, "afb20048 sw\ts2,72(sp)", "afb10044 sw $s1, 0x44($sp)"], [6, "afb10044 sw\ts1,68(sp)", "86040008 lh $a0, 0x8($s0)"], [7, "86040008 lh\ta0,8(s0)", "8605000c lh $a1, 0xC($s0)"], [8, "8605000c lh\ta1,12(s0)", "0c004b1b jal func_80012C6C"], [11, "24060004 li\ta2,4", "00021400 sll $v0, $v0, 16"], [12, "00021400 sll\tv0,v0,0x10", "86040010 lh $a0, 0x10($s0)"], [13, "86040010 lh\ta0,16(s0)", "86050014 lh $a1, 0x14($s0)"], [14, "86050014 lh\ta1,20(s0)", "00021403 sra $v0, $v0, 16"], [15, "00021403 sra\tv0,v0,0x10", "0c004b1b jal func_80012C6C"], [17, "ae020008 sw\tv0,8(s0)", "24060004 addiu $a2, $zero, 0x4"], [18, "24060004 li\ta2,4", "00021400 sll $v0, $v0, 16"], [19, "00021400 sll\tv0,v0,0x10", "86040018 lh $a0, 0x18($s0)"], [20, "86040018 lh\ta0,24(s0)", "86050020 lh $a1, 0x20($s0)"], [21, "86050020 lh\ta1,32(s0)", "00021403 sra $v0, $v0, 16"], [22, "00021403 sra\tv0,v0,0x10", "0c004aaf jal func_80012ABC"], [24, "ae020010 sw\tv0,16(s0)", "8604001a lh $a0, 0x1A($s0)"], [25, "8604001a lh\ta0,26(s0)", "86050022 lh $a1, 0x22($s0)"], [26, "86050022 lh\ta1,34(s0)", "24060004 addiu $a2, $zero, 0x4"], [27, "24060004 li\ta2,4", "0c004aaf jal func_80012ABC"], [29, "a6020018 sh\tv0,24(s0)", "8604001c lh $a0, 0x1C($s0)"], [30, "8604001c lh\ta0,28(s0)", "86050024 lh $a1, 0x24($s0)"]], "passes_tried": null}
|
||||
{"ts": "2026-07-23 10:36:45", "addr": "0x80174cb0", "name": "func_80174CB0", "reach": 138, "klass": "regalloc-order", "nins": 123, "status": "near", "closeness": 46, "where_stuck": "none \u2014 MATCH (pin &D_80126940 to $s2 via `register short* __asm__(\"$18\")` reproduces the address-CSE the natural 3-scalar form refuses; then t0,t1,t2,vx,vy,vz source order gives the target schedule)", "best_draft": ".run/backlog_drafts/func_80174CB0.c", "binary": "ov_SC07_006", "source": "worker", "residual": [[74, "8605001a lh\ta1,26(s0)", "27a40010 addiu $a0, $sp, 0x10"], [75, "27a40010 addiu\ta0,sp,16", "00118c00 sll $s1, $s1, 16"], [76, "00b12821 addu\ta1,a1,s1", "8605001a lh $a1, 0x1A($s0)"], [78, "30a50fff andi\ta1,a1,0xfff", "00b12821 addu $a1, $a1, $s1"], [79, "86050018 lh\ta1,24(s0)", "0c004956 jal func_80012558"], [81, "27a40010 addiu\ta0,sp,16", "86050018 lh $a1, 0x18($s0)"], [82, "86020028 lh\tv0,40(s0)", "0c0049b1 jal func_800126C4"], [83, "86430000 lh\tv1,0(s2)", "27a40010 addiu $a0, $sp, 0x10"], [84, "00000000 nop", "86020028 lh $v0, 0x28($s0)"], [85, "00431021 addu\tv0,v0,v1", "86430000 lh $v1, 0x0($s2)"], [86, "afa20024 sw\tv0,36(sp)", "00000000 nop"], [87, "8602002a lh\tv0,42(s0)", "00431021 addu $v0, $v0, $v1"], [88, "3c030000 lui\tv1,0x0", "afa20024 sw $v0, 0x24($sp)"], [89, "84630000 lh\tv1,0(v1)", "8602002a lh $v0, 0x2A($s0)"], [90, "27a40010 addiu\ta0,sp,16", "3c038012 lui $v1, %hi(D_80126942)"], [91, "00431021 addu\tv0,v0,v1", "84636942 lh $v1, %lo(D_80126942)($v1)"], [92, "afa20028 sw\tv0,40(sp)", "27a40010 addiu $a0, $sp, 0x10"], [93, "8602002c lh\tv0,44(s0)", "00431021 addu $v0, $v0, $v1"], [94, "3c030000 lui\tv1,0x0", "afa20028 sw $v0, 0x28($sp)"], [95, "84630000 lh\tv1,0(v1)", "8602002c lh $v0, 0x2C($s0)"], [96, "27a50030 addiu\ta1,sp,48", "3c038012 lui $v1, %hi(D_80126944)"], [97, "a7a00030 sh\tzero,48(sp)", "84636944 lh $v1, %lo(D_80126944)($v1)"], [98, "a7a00032 sh\tzero,50(sp)", "27a50030 addiu $a1, $sp, 0x30"], [99, "00431021 addu\tv0,v0,v1", "a7a00030 sh $zero, 0x30($sp)"]], "passes_tried": null}
|
||||
|
||||
+1747
-1741
File diff suppressed because it is too large
Load Diff
+2
-2
@@ -2,11 +2,11 @@
|
||||
|
||||
> Generated by `tools/family_hseq.py` from the 134 overlay sigs + per-overlay src stubs. Ranked by TEMPLATABLE byte-weight (PURE+IMM members × nins × 4). The byte-gate is the arbiter.
|
||||
|
||||
**Fleet (overlays):** 88.4% fn / 79.0% instr / 68.3% distinct-code matched. Unmatched: 40,650 instances / 2,747,377 ins (22,642 distinct classes).
|
||||
**Fleet (overlays):** 88.4% fn / 79.0% instr / 68.4% distinct-code matched. Unmatched: 40,629 instances / 2,744,690 ins (22,621 distinct classes).
|
||||
|
||||
**Tail cross-check (Phase-25 close):** 27,520 tail fns / 1,103,065 ins → 574 h_seq families ≥2, **158 substantial (nins≥80) / 616,402 ins**.
|
||||
|
||||
**Full frontier (all unmatched by h_seq):** 2726 target families (≥2 members or a matched sibling) + 3780 singletons (Step-D residue). Substantial: **563 families / 1,452,986 templatable ins**, 79 with a matched sibling (zero-crack). Substantial member classes: 9,140 PURE · 40 IMM · 6 STRUCT-excluded.
|
||||
**Full frontier (all unmatched by h_seq):** 2722 target families (≥2 members or a matched sibling) + 3780 singletons (Step-D residue). Substantial: **559 families / 1,450,299 templatable ins**, 75 with a matched sibling (zero-crack). Substantial member classes: 9,119 PURE · 40 IMM · 6 STRUCT-excluded.
|
||||
|
||||
|
||||
## Top substantial families (by templatable byte-weight)
|
||||
|
||||
@@ -4,16 +4,16 @@
|
||||
# cross-binary collapsible-byte leverage: docs/duplicates.cross.md.
|
||||
|
||||
# THREE progress metrics (all matter — see the labels):
|
||||
FLEET fn-count byte-ident: 312038 / 353722 = 88.22% (REAL+LINKED+empties; FUNCTION-count, ×134-inflated — one crack counts per overlay)
|
||||
FLEET instr-weighted : 10335670 / 13141652 = 78.6% (shipped .text across main + resident + 138 overlays; the decomp.dev-DISPLAY number)
|
||||
FLEET fn-count byte-ident: 312044 / 353722 = 88.22% (REAL+LINKED+empties; FUNCTION-count, ×134-inflated — one crack counts per overlay)
|
||||
FLEET instr-weighted : 10336291 / 13141652 = 78.7% (shipped .text across main + resident + 138 overlays; the decomp.dev-DISPLAY number)
|
||||
FLEET distinct-code(uniq): 3810787 / 5634875 = 67.6% (64824/87459 unique fns; the DISTINCT-RE number)
|
||||
MAIN game-code weighted : 436 / 60201 = 0.7% (INCLUDED in the fleet numbers above since 2026-07-22 — roadmap §1 metrics contract; LINKED-excluding Ghidra sig dated 2026-06-14; caveat is R34: no independent second oracle for a PS-X EXE, NOT drift)
|
||||
(fleet EXCLUDING main, for continuity with pre-2026-07-22 readings: 10335234 / 13081451 = 79.0%)
|
||||
(fleet EXCLUDING main, for continuity with pre-2026-07-22 readings: 10335855 / 13081451 = 79.0%)
|
||||
|
||||
FLEET REAL substantive : 310183 (of which dedup-shared 234571 via 1849 groups / 234615 instances)
|
||||
FLEET REAL substantive : 310189 (of which dedup-shared 234571 via 1849 groups / 234615 instances)
|
||||
FLEET LINKED PsyQ objs : 959
|
||||
FLEET NON_MATCHING : 7 (0 in any default build — G4)
|
||||
FLEET INCLUDE_ASM stubs : 41677
|
||||
FLEET INCLUDE_ASM stubs : 41671
|
||||
FLEET matchable : 353722
|
||||
|
||||
| binary | REAL | shared | LINKED | byte-ident | matchable | byte-ident % |
|
||||
@@ -152,7 +152,7 @@ FLEET matchable : 353722
|
||||
| ov_SC07_000 | 2246 | 1706 | 0 | 2248 | 2521 | 89.2% |
|
||||
| ov_SC07_001 | 2230 | 1702 | 0 | 2232 | 2454 | 91.0% |
|
||||
| ov_SC07_002 | 2257 | 1702 | 0 | 2261 | 2579 | 87.7% |
|
||||
| ov_SC07_006 | 1997 | 1549 | 0 | 2077 | 2456 | 84.6% |
|
||||
| ov_SC07_006 | 2003 | 1549 | 0 | 2083 | 2456 | 84.8% |
|
||||
| ov_SC07_007 | 2014 | 1550 | 0 | 2098 | 2614 | 80.3% |
|
||||
| ov_SC07_008 | 2215 | 1702 | 0 | 2215 | 2386 | 92.8% |
|
||||
| ov_SC07_009 | 2224 | 1702 | 0 | 2226 | 2430 | 91.6% |
|
||||
|
||||
@@ -318,14 +318,14 @@ extern s32 func_8012C750(s32 a0);
|
||||
extern s32 func_8012C820(u8 *a0);
|
||||
extern u16 D_801274E4[];
|
||||
extern s32 func_8012CB64(s32 arg0, s32 arg1, s32 arg2, s32 arg3, s32 arg4);
|
||||
extern void func_8012CC88(s32 a, s32 b, s32 c);
|
||||
extern void func_8012CC88();
|
||||
extern u8 D_800D3918[];
|
||||
extern void func_8012CBA4(s32 a0);
|
||||
extern void func_8012CBCC(s32 a0);
|
||||
extern void func_8012CBF4(s32 a0);
|
||||
extern void func_8012CC1C(s32 arg0, s32 arg1);
|
||||
extern void func_8012CC40(s32 arg0, s32 arg1);
|
||||
extern void func_8012CC88(s32 a0, s32 a1, s32 a2);
|
||||
extern void func_8012CC88();
|
||||
extern void func_8012CC64(s32 a0, s32 a1);
|
||||
extern s32 func_80133784(s32 a0, void *a1, s32 a2);
|
||||
extern s32 func_8012CE2C(s32 a0);
|
||||
@@ -1082,7 +1082,67 @@ DEFINE_func_80132288() /* dedup: shared engine-core @0x80132288 (src/shared) */
|
||||
DEFINE_func_8013240C() /* dedup: shared engine-core @0x8013240c (src/shared) */
|
||||
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC07_006/nonmatchings/ov_SC07_006_jr_80131340", func_801325B8);
|
||||
// @class: plumbing
|
||||
// @stuck: none — MATCH (reuse of proven DEFINE_func_801325B8 body, engine_core.h h_exact)
|
||||
extern void memcpy();
|
||||
extern void gteMIMefunc();
|
||||
void func_801325B8(int dst, int src, int m0, int mm, int arg5)
|
||||
{
|
||||
register int p __asm__("$4");
|
||||
register int m __asm__("$16");
|
||||
register int n __asm__("$17");
|
||||
register int dv __asm__("$18");
|
||||
int sv;
|
||||
int ofs;
|
||||
int c;
|
||||
m = m0;
|
||||
p = src;
|
||||
if (*(int *)(p + 4) == 1) {
|
||||
sv = *(int *)(p + 0xC);
|
||||
} else {
|
||||
ofs = (int)((*(unsigned int *)(p + 0xC) >> 2) << 2) + 0xC;
|
||||
sv = p + ofs;
|
||||
}
|
||||
p = dst;
|
||||
sv += *(int *)(m + 8) * 8;
|
||||
if (*(int *)(p + 4) == 1) {
|
||||
dv = *(int *)(p + 0xC);
|
||||
} else {
|
||||
ofs = (int)((*(unsigned int *)(p + 0xC) >> 2) << 2) + 0xC;
|
||||
dv = p + ofs;
|
||||
}
|
||||
c = *(int *)(m + 8);
|
||||
dv += c * 8;
|
||||
n = *(int *)(m + 0xC);
|
||||
m += 0x10;
|
||||
memcpy(dv, sv, n * 8);
|
||||
gteMIMefunc(dv, m, n, arg5);
|
||||
if (mm != 0) {
|
||||
m = mm;
|
||||
p = src;
|
||||
if (*(int *)(p + 4) == 1) {
|
||||
sv = *(int *)(p + 0x14);
|
||||
} else {
|
||||
ofs = (int)((*(unsigned int *)(p + 0x14) >> 2) << 2) + 0xC;
|
||||
sv = p + ofs;
|
||||
}
|
||||
p = dst;
|
||||
sv += *(int *)(m + 8) * 8;
|
||||
if (*(int *)(p + 4) == 1) {
|
||||
dv = *(int *)(p + 0x14);
|
||||
} else {
|
||||
ofs = (int)((*(unsigned int *)(p + 0x14) >> 2) << 2) + 0xC;
|
||||
dv = p + ofs;
|
||||
}
|
||||
c = *(int *)(m + 8);
|
||||
dv += c * 8;
|
||||
n = *(int *)(m + 0xC);
|
||||
m += 0x10;
|
||||
memcpy(dv, sv, n * 8);
|
||||
gteMIMefunc(dv, m, n, arg5);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void func_8013277C(void) {
|
||||
}
|
||||
|
||||
@@ -320,14 +320,14 @@ extern s32 func_8012C750(s32 a0);
|
||||
extern s32 func_8012C820(u8 *a0);
|
||||
extern u16 D_801274E4[];
|
||||
extern s32 func_8012CB64(s32 arg0, s32 arg1, s32 arg2, s32 arg3, s32 arg4);
|
||||
extern void func_8012CC88(s32 a, s32 b, s32 c);
|
||||
extern void func_8012CC88();
|
||||
extern u8 D_800D3918[];
|
||||
extern void func_8012CBA4(s32 a0);
|
||||
extern void func_8012CBCC(s32 a0);
|
||||
extern void func_8012CBF4(s32 a0);
|
||||
extern void func_8012CC1C(s32 arg0, s32 arg1);
|
||||
extern void func_8012CC40(s32 arg0, s32 arg1);
|
||||
extern void func_8012CC88(s32 a0, s32 a1, s32 a2);
|
||||
extern void func_8012CC88();
|
||||
extern void func_8012CC64(s32 a0, s32 a1);
|
||||
extern s32 func_80133784(s32 a0, void *a1, s32 a2);
|
||||
extern s32 func_8012CE2C(s32 a0);
|
||||
|
||||
@@ -320,14 +320,14 @@ extern s32 func_8012C750(s32 a0);
|
||||
extern s32 func_8012C820(u8 *a0);
|
||||
extern u16 D_801274E4[];
|
||||
extern s32 func_8012CB64(s32 arg0, s32 arg1, s32 arg2, s32 arg3, s32 arg4);
|
||||
extern void func_8012CC88(s32 a, s32 b, s32 c);
|
||||
extern void func_8012CC88();
|
||||
extern u8 D_800D3918[];
|
||||
extern void func_8012CBA4(s32 a0);
|
||||
extern void func_8012CBCC(s32 a0);
|
||||
extern void func_8012CBF4(s32 a0);
|
||||
extern void func_8012CC1C(s32 arg0, s32 arg1);
|
||||
extern void func_8012CC40(s32 arg0, s32 arg1);
|
||||
extern void func_8012CC88(s32 a0, s32 a1, s32 a2);
|
||||
extern void func_8012CC88();
|
||||
extern void func_8012CC64(s32 a0, s32 a1);
|
||||
extern s32 func_80133784(s32 a0, void *a1, s32 a2);
|
||||
extern s32 func_8012CE2C(s32 a0);
|
||||
|
||||
@@ -320,14 +320,14 @@ extern s32 func_8012C750(s32 a0);
|
||||
extern s32 func_8012C820(u8 *a0);
|
||||
extern u16 D_801274E4[];
|
||||
extern s32 func_8012CB64(s32 arg0, s32 arg1, s32 arg2, s32 arg3, s32 arg4);
|
||||
extern void func_8012CC88(s32 a, s32 b, s32 c);
|
||||
extern void func_8012CC88();
|
||||
extern u8 D_800D3918[];
|
||||
extern void func_8012CBA4(s32 a0);
|
||||
extern void func_8012CBCC(s32 a0);
|
||||
extern void func_8012CBF4(s32 a0);
|
||||
extern void func_8012CC1C(s32 arg0, s32 arg1);
|
||||
extern void func_8012CC40(s32 arg0, s32 arg1);
|
||||
extern void func_8012CC88(s32 a0, s32 a1, s32 a2);
|
||||
extern void func_8012CC88();
|
||||
extern void func_8012CC64(s32 a0, s32 a1);
|
||||
extern s32 func_80133784(s32 a0, void *a1, s32 a2);
|
||||
extern s32 func_8012CE2C(s32 a0);
|
||||
|
||||
@@ -321,14 +321,14 @@ extern s32 func_8012C750(s32 a0);
|
||||
extern s32 func_8012C820(u8 *a0);
|
||||
extern u16 D_801274E4[];
|
||||
extern s32 func_8012CB64(s32 arg0, s32 arg1, s32 arg2, s32 arg3, s32 arg4);
|
||||
extern void func_8012CC88(s32 a, s32 b, s32 c);
|
||||
extern void func_8012CC88();
|
||||
extern u8 D_800D3918[];
|
||||
extern void func_8012CBA4(s32 a0);
|
||||
extern void func_8012CBCC(s32 a0);
|
||||
extern void func_8012CBF4(s32 a0);
|
||||
extern void func_8012CC1C(s32 arg0, s32 arg1);
|
||||
extern void func_8012CC40(s32 arg0, s32 arg1);
|
||||
extern void func_8012CC88(s32 a0, s32 a1, s32 a2);
|
||||
extern void func_8012CC88();
|
||||
extern void func_8012CC64(s32 a0, s32 a1);
|
||||
extern s32 func_80133784(s32 a0, void *a1, s32 a2);
|
||||
extern s32 func_8012CE2C(s32 a0);
|
||||
|
||||
@@ -325,14 +325,14 @@ extern s32 func_8012C750(s32 a0);
|
||||
extern s32 func_8012C820(u8 *a0);
|
||||
extern u16 D_801274E4[];
|
||||
extern s32 func_8012CB64(s32 arg0, s32 arg1, s32 arg2, s32 arg3, s32 arg4);
|
||||
extern void func_8012CC88(s32 a, s32 b, s32 c);
|
||||
extern void func_8012CC88();
|
||||
extern u8 D_800D3918[];
|
||||
extern void func_8012CBA4(s32 a0);
|
||||
extern void func_8012CBCC(s32 a0);
|
||||
extern void func_8012CBF4(s32 a0);
|
||||
extern void func_8012CC1C(s32 arg0, s32 arg1);
|
||||
extern void func_8012CC40(s32 arg0, s32 arg1);
|
||||
extern void func_8012CC88(s32 a0, s32 a1, s32 a2);
|
||||
extern void func_8012CC88();
|
||||
extern void func_8012CC64(s32 a0, s32 a1);
|
||||
extern s32 func_80133784(s32 a0, void *a1, s32 a2);
|
||||
extern s32 func_8012CE2C(s32 a0);
|
||||
@@ -2317,7 +2317,7 @@ void func_80146074(void) {
|
||||
|
||||
extern s32 func_80146128(void);
|
||||
extern void func_80146360(void);
|
||||
extern void func_801463A0(void);
|
||||
extern void func_801463A0();
|
||||
|
||||
void func_8014607C(void)
|
||||
{
|
||||
@@ -3102,7 +3102,67 @@ s32 func_80149FB0(s32 a0) {
|
||||
}
|
||||
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC07_006/nonmatchings/ov_SC07_006_jr_80140608", func_8014A048);
|
||||
// @class: struct
|
||||
// @stuck: none — MATCH (exact sibling ov_SC07_010_jr_80140608.c: Loc struct layout + s0 asm barrier)
|
||||
|
||||
|
||||
|
||||
extern u8 func_8014BEF8(void);
|
||||
extern void func_8012F14C(s32, s32, s32);
|
||||
extern s32 func_80135260(s32, s32, s32, s32);
|
||||
extern void func_8014A1B0(s32 a0, s32 a1);
|
||||
|
||||
s32 func_8014A048(s32 param_1) {
|
||||
|
||||
extern u8 D_801202A0[];
|
||||
Loc L;
|
||||
s32 s0;
|
||||
s32 s2;
|
||||
u32 s3;
|
||||
if ((*(u32 *)(param_1 + 0x44) & 0x400) != 0) {
|
||||
return 0;
|
||||
}
|
||||
if ((*(u16 *)(param_1 + 0xAC) & 0x80) == 0) {
|
||||
if ((*(u16 *)(param_1 + 0xAC) & 0x10) == 0) {
|
||||
return 0;
|
||||
}
|
||||
if (((s32 (*)(s32))func_8014BEF8)(param_1) == 0) {
|
||||
goto ret0;
|
||||
}
|
||||
}
|
||||
L.a30 = *(s16 *)(param_1 + 6);
|
||||
L.a2e = *(s16 *)(param_1 + 0xA);
|
||||
L.a2c = *(s16 *)(param_1 + 0xE);
|
||||
L.a1e = -0x10;
|
||||
L.a20 = 0;
|
||||
L.a1c = -0x20;
|
||||
((void (*)(s32, s32, s32))func_8012F14C)(*(s32 *)(param_1 + 0x20) + 0x34, (s32)&L.a20, (s32)L.buf);
|
||||
s3 = 0;
|
||||
s2 = 0;
|
||||
while (1) {
|
||||
s0 = (s32)D_801202A0 + s2;
|
||||
__asm__ __volatile__("" : "=r"(s0) : "0"(s0));
|
||||
if ((*(u16 *)s0 != 0) &&
|
||||
(*(s32 *)(s0 + 0x58) != 0) &&
|
||||
(*(s16 *)(s0 + 0xAA) == 0) &&
|
||||
(*(s32 *)(param_1 + 0x184) != s0) &&
|
||||
((*(u16 *)(s0 + 0x5C) & 0x200) != 0) &&
|
||||
(((s32 (*)(s32, s32, s32, s32))func_80135260)(*(s32 *)(s0 + 0x20), *(s32 *)(s0 + 0x58), (s32)&L.a30, (s32)L.buf) != 0)) {
|
||||
break;
|
||||
}
|
||||
s3++;
|
||||
s2 += 0x10C;
|
||||
if (s3 >= 0x60) {
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
*(s32 *)(param_1 + 0x178) = s0;
|
||||
func_8014A1B0(param_1, s0);
|
||||
return 1;
|
||||
ret0:
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
DEFINE_func_8014A1B0() /* dedup: shared engine-core @0x8014a1b0 (src/shared) */
|
||||
|
||||
@@ -3633,7 +3693,7 @@ DEFINE_func_8014F2E0() /* dedup: shared engine-core @0x8014f2e0 (src/shared) */
|
||||
INCLUDE_ASM("asm/ov_SC07_006/nonmatchings/ov_SC07_006_jr_80140608", func_8014F3E8);
|
||||
|
||||
|
||||
extern void func_8014F4C0(u8 *a0);
|
||||
extern void func_8014F4C0();
|
||||
|
||||
void func_8014F468(void)
|
||||
{
|
||||
@@ -3728,7 +3788,66 @@ DEFINE_func_8014FD54() /* dedup: shared engine-core @0x8014fd54 (src/shared) */
|
||||
DEFINE_func_8014FDF4() /* dedup: shared engine-core @0x8014fdf4 (src/shared) */
|
||||
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC07_006/nonmatchings/ov_SC07_006_jr_80140608", func_8014FE60);
|
||||
// @class: regalloc-order
|
||||
// @stuck: none — MATCH
|
||||
|
||||
#include "common.h"
|
||||
|
||||
extern s32 func_8014FFDC(s32 param_1, void *a1, void *a2);
|
||||
extern s32 func_80150150(s32, s32);
|
||||
|
||||
typedef struct {
|
||||
u8 b[8];
|
||||
} Blob8;
|
||||
|
||||
extern u8 D_801152A8[];
|
||||
|
||||
typedef struct {
|
||||
u16 x;
|
||||
s16 y;
|
||||
u16 z;
|
||||
} Vec3h;
|
||||
|
||||
s32 func_8014FE60(int param_1) {
|
||||
s32 iVar5;
|
||||
s32 iVar6;
|
||||
Vec3h a;
|
||||
Vec3h b;
|
||||
Blob8 c;
|
||||
|
||||
b.x = *(u16 *)(param_1 + 6);
|
||||
a.x = b.x;
|
||||
b.y = *(short *)(param_1 + 10) + -0x10;
|
||||
a.y = b.y;
|
||||
b.z = *(u16 *)(param_1 + 0xe);
|
||||
a.z = b.z;
|
||||
iVar5 = func_8014FFDC(param_1, &a, &c);
|
||||
iVar6 = ((s32 (*)(s32, void *))func_80150150)(param_1, &b);
|
||||
if (iVar6 == 0) {
|
||||
b.y = 0x7fff;
|
||||
}
|
||||
if ((iVar5 | iVar6) != 0) {
|
||||
if (a.y < b.y) {
|
||||
*(short *)(param_1 + 0x78) = a.x;
|
||||
*(short *)(param_1 + 0x7a) = a.y;
|
||||
*(short *)(param_1 + 0x7c) = a.z;
|
||||
*(Blob8 *)(param_1 + 0x80) = c;
|
||||
} else {
|
||||
*(short *)(param_1 + 0x78) = b.x;
|
||||
*(short *)(param_1 + 0x7a) = b.y;
|
||||
*(short *)(param_1 + 0x7c) = b.z;
|
||||
*(Blob8 *)(param_1 + 0x80) = (*(Blob8 *)D_801152A8);
|
||||
}
|
||||
*(u16 *)(param_1 + 0x7e) = *(u16 *)(param_1 + 0x7e) & 0xfffe;
|
||||
return 1;
|
||||
}
|
||||
*(short *)(param_1 + 0x78) = a.x;
|
||||
*(short *)(param_1 + 0x7a) = 0x7fff;
|
||||
*(short *)(param_1 + 0x7c) = a.z;
|
||||
*(u16 *)(param_1 + 0x7e) = *(u16 *)(param_1 + 0x7e) | 1;
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC07_006/nonmatchings/ov_SC07_006_jr_80140608", func_8014FFDC);
|
||||
|
||||
|
||||
@@ -325,14 +325,14 @@ extern s32 func_8012C750(s32 a0);
|
||||
extern s32 func_8012C820(u8 *a0);
|
||||
extern u16 D_801274E4[];
|
||||
extern s32 func_8012CB64(s32 arg0, s32 arg1, s32 arg2, s32 arg3, s32 arg4);
|
||||
extern void func_8012CC88(s32 a, s32 b, s32 c);
|
||||
extern void func_8012CC88();
|
||||
extern u8 D_800D3918[];
|
||||
extern void func_8012CBA4(s32 a0);
|
||||
extern void func_8012CBCC(s32 a0);
|
||||
extern void func_8012CBF4(s32 a0);
|
||||
extern void func_8012CC1C(s32 arg0, s32 arg1);
|
||||
extern void func_8012CC40(s32 arg0, s32 arg1);
|
||||
extern void func_8012CC88(s32 a0, s32 a1, s32 a2);
|
||||
extern void func_8012CC88();
|
||||
extern void func_8012CC64(s32 a0, s32 a1);
|
||||
extern s32 func_80133784(s32 a0, void *a1, s32 a2);
|
||||
extern s32 func_8012CE2C(s32 a0);
|
||||
@@ -1037,7 +1037,7 @@ extern void func_80145EE8(s32 param_1);
|
||||
extern void MoveImage(void *a0, s32 a1, s32 a2);
|
||||
extern s32 func_80146128(void);
|
||||
extern void func_80146360(void);
|
||||
extern void func_801463A0(void);
|
||||
extern void func_801463A0();
|
||||
extern u8 D_80078EC1;
|
||||
extern s32 D_80078EC8;
|
||||
extern s32 D_80126B9C;
|
||||
@@ -1503,9 +1503,9 @@ extern void func_8014CCB4(void);
|
||||
extern void func_8014CC28(s32 a0);
|
||||
extern void func_8014CD0C(u8 *a0);
|
||||
extern void func_8014CF04(s32 a0, void *a1, void *a2);
|
||||
extern void func_8014CD80(s32 a0, void *a1, void *a2);
|
||||
extern void func_8014CD80();
|
||||
extern void func_8014D2A0(s32 a0, void *a1, void *a2);
|
||||
extern void func_8014D12C(s32 a0, void *a1, void *a2);
|
||||
extern void func_8014D12C();
|
||||
extern void func_8014D0A4(s32 a0);
|
||||
extern void func_8014D610(s32 a0, void *a1, void *a2);
|
||||
extern void func_8014D4C0(s32 a0, void *a1, void *a2);
|
||||
@@ -1543,7 +1543,7 @@ extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2);
|
||||
extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2);
|
||||
extern s32 func_8014F24C(struct SubF24C *a0);
|
||||
extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2);
|
||||
extern void func_8014F4C0(u8 *a0);
|
||||
extern void func_8014F4C0();
|
||||
extern void func_8014F468(void);
|
||||
extern s32 D_801152BC;
|
||||
extern int func_8014F74C(s32 arg0);
|
||||
@@ -1552,7 +1552,7 @@ extern void func_8014FA04(s32 a0);
|
||||
extern s32 func_8014FC18(u8 *self);
|
||||
extern int func_8014FD54(int param_1);
|
||||
extern s32 func_80150170(void *a0);
|
||||
extern s32 func_8014FE60(void *a0);
|
||||
extern s32 func_8014FE60();
|
||||
extern void func_8014FDF4(struct S8014FDF4 *a0);
|
||||
extern s32 func_80150150(s32 a, s32 b);
|
||||
extern s32 func_801502EC(s32 e, void *a1, void *a2);
|
||||
|
||||
@@ -325,14 +325,14 @@ extern s32 func_8012C750(s32 a0);
|
||||
extern s32 func_8012C820(u8 *a0);
|
||||
extern u16 D_801274E4[];
|
||||
extern s32 func_8012CB64(s32 arg0, s32 arg1, s32 arg2, s32 arg3, s32 arg4);
|
||||
extern void func_8012CC88(s32 a, s32 b, s32 c);
|
||||
extern void func_8012CC88();
|
||||
extern u8 D_800D3918[];
|
||||
extern void func_8012CBA4(s32 a0);
|
||||
extern void func_8012CBCC(s32 a0);
|
||||
extern void func_8012CBF4(s32 a0);
|
||||
extern void func_8012CC1C(s32 arg0, s32 arg1);
|
||||
extern void func_8012CC40(s32 arg0, s32 arg1);
|
||||
extern void func_8012CC88(s32 a0, s32 a1, s32 a2);
|
||||
extern void func_8012CC88();
|
||||
extern void func_8012CC64(s32 a0, s32 a1);
|
||||
extern s32 func_80133784(s32 a0, void *a1, s32 a2);
|
||||
extern s32 func_8012CE2C(s32 a0);
|
||||
@@ -1037,7 +1037,7 @@ extern void func_80145EE8(s32 param_1);
|
||||
extern void MoveImage(void *a0, s32 a1, s32 a2);
|
||||
extern s32 func_80146128(void);
|
||||
extern void func_80146360(void);
|
||||
extern void func_801463A0(void);
|
||||
extern void func_801463A0();
|
||||
extern u8 D_80078EC1;
|
||||
extern s32 D_80078EC8;
|
||||
extern s32 D_80126B9C;
|
||||
@@ -1503,9 +1503,9 @@ extern void func_8014CCB4(void);
|
||||
extern void func_8014CC28(s32 a0);
|
||||
extern void func_8014CD0C(u8 *a0);
|
||||
extern void func_8014CF04(s32 a0, void *a1, void *a2);
|
||||
extern void func_8014CD80(s32 a0, void *a1, void *a2);
|
||||
extern void func_8014CD80();
|
||||
extern void func_8014D2A0(s32 a0, void *a1, void *a2);
|
||||
extern void func_8014D12C(s32 a0, void *a1, void *a2);
|
||||
extern void func_8014D12C();
|
||||
extern void func_8014D0A4(s32 a0);
|
||||
extern void func_8014D610(s32 a0, void *a1, void *a2);
|
||||
extern void func_8014D4C0(s32 a0, void *a1, void *a2);
|
||||
@@ -1543,7 +1543,7 @@ extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2);
|
||||
extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2);
|
||||
extern s32 func_8014F24C(struct SubF24C *a0);
|
||||
extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2);
|
||||
extern void func_8014F4C0(u8 *a0);
|
||||
extern void func_8014F4C0();
|
||||
extern void func_8014F468(void);
|
||||
extern s32 D_801152BC;
|
||||
extern int func_8014F74C(s32 arg0);
|
||||
@@ -1552,7 +1552,7 @@ extern void func_8014FA04(s32 a0);
|
||||
extern s32 func_8014FC18(u8 *self);
|
||||
extern int func_8014FD54(int param_1);
|
||||
extern s32 func_80150170(void *a0);
|
||||
extern s32 func_8014FE60(void *a0);
|
||||
extern s32 func_8014FE60();
|
||||
extern void func_8014FDF4(struct S8014FDF4 *a0);
|
||||
extern s32 func_80150150(s32 a, s32 b);
|
||||
extern s32 func_801502EC(s32 e, void *a1, void *a2);
|
||||
|
||||
@@ -325,14 +325,14 @@ extern s32 func_8012C750(s32 a0);
|
||||
extern s32 func_8012C820(u8 *a0);
|
||||
extern u16 D_801274E4[];
|
||||
extern s32 func_8012CB64(s32 arg0, s32 arg1, s32 arg2, s32 arg3, s32 arg4);
|
||||
extern void func_8012CC88(s32 a, s32 b, s32 c);
|
||||
extern void func_8012CC88();
|
||||
extern u8 D_800D3918[];
|
||||
extern void func_8012CBA4(s32 a0);
|
||||
extern void func_8012CBCC(s32 a0);
|
||||
extern void func_8012CBF4(s32 a0);
|
||||
extern void func_8012CC1C(s32 arg0, s32 arg1);
|
||||
extern void func_8012CC40(s32 arg0, s32 arg1);
|
||||
extern void func_8012CC88(s32 a0, s32 a1, s32 a2);
|
||||
extern void func_8012CC88();
|
||||
extern void func_8012CC64(s32 a0, s32 a1);
|
||||
extern s32 func_80133784(s32 a0, void *a1, s32 a2);
|
||||
extern s32 func_8012CE2C(s32 a0);
|
||||
@@ -1037,7 +1037,7 @@ extern void func_80145EE8(s32 param_1);
|
||||
extern void MoveImage(void *a0, s32 a1, s32 a2);
|
||||
extern s32 func_80146128(void);
|
||||
extern void func_80146360(void);
|
||||
extern void func_801463A0(void);
|
||||
extern void func_801463A0();
|
||||
extern u8 D_80078EC1;
|
||||
extern s32 D_80078EC8;
|
||||
extern s32 D_80126B9C;
|
||||
@@ -1503,9 +1503,9 @@ extern void func_8014CCB4(void);
|
||||
extern void func_8014CC28(s32 a0);
|
||||
extern void func_8014CD0C(u8 *a0);
|
||||
extern void func_8014CF04(s32 a0, void *a1, void *a2);
|
||||
extern void func_8014CD80(s32 a0, void *a1, void *a2);
|
||||
extern void func_8014CD80();
|
||||
extern void func_8014D2A0(s32 a0, void *a1, void *a2);
|
||||
extern void func_8014D12C(s32 a0, void *a1, void *a2);
|
||||
extern void func_8014D12C();
|
||||
extern void func_8014D0A4(s32 a0);
|
||||
extern void func_8014D610(s32 a0, void *a1, void *a2);
|
||||
extern void func_8014D4C0(s32 a0, void *a1, void *a2);
|
||||
@@ -1543,7 +1543,7 @@ extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2);
|
||||
extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2);
|
||||
extern s32 func_8014F24C(struct SubF24C *a0);
|
||||
extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2);
|
||||
extern void func_8014F4C0(u8 *a0);
|
||||
extern void func_8014F4C0();
|
||||
extern void func_8014F468(void);
|
||||
extern s32 D_801152BC;
|
||||
extern int func_8014F74C(s32 arg0);
|
||||
@@ -1552,7 +1552,7 @@ extern void func_8014FA04(s32 a0);
|
||||
extern s32 func_8014FC18(u8 *self);
|
||||
extern int func_8014FD54(int param_1);
|
||||
extern s32 func_80150170(void *a0);
|
||||
extern s32 func_8014FE60(void *a0);
|
||||
extern s32 func_8014FE60();
|
||||
extern void func_8014FDF4(struct S8014FDF4 *a0);
|
||||
extern s32 func_80150150(s32 a, s32 b);
|
||||
extern s32 func_801502EC(s32 e, void *a1, void *a2);
|
||||
@@ -5237,7 +5237,48 @@ DEFINE_func_80165C58() /* dedup: shared engine-core @0x80165c58 (src/shared) */
|
||||
DEFINE_func_80165C78() /* dedup: shared engine-core @0x80165c78 (src/shared) */
|
||||
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC07_006/nonmatchings/ov_SC07_006_jr_8015C32C", func_80165CA0);
|
||||
// @class: regalloc-order
|
||||
// @stuck: none — MATCH (reuse of proven func_80165CA0 body from ov_SC01_000 sibling; $17/$2/$3 pins + SHB barriers)
|
||||
extern s32 D_8011D030;
|
||||
extern s32 D_80126728;
|
||||
#define SHB(x) __asm__ __volatile__("" : "=r"(x) : "0"(x))
|
||||
|
||||
void func_80165CA0(void) {
|
||||
register s32 i __asm__("$17");
|
||||
s32 off;
|
||||
u16 *q;
|
||||
s32 a1, base;
|
||||
short *p;
|
||||
register short v __asm__("$2");
|
||||
register short w __asm__("$3");
|
||||
i = 0; q = &D_8011D030;
|
||||
do {
|
||||
if (*q != 0) (*(void (**)(u16 *))((u32)*q * 4 + D_80126728))(q);
|
||||
i = i + 1; q = q + 0x2c;
|
||||
} while (i < 0x1e);
|
||||
i = 0; off = 0;
|
||||
do {
|
||||
base = (s32)&D_8011D030; SHB(base);
|
||||
a1 = off + base;
|
||||
p = *(short **)(a1 + 0x20);
|
||||
if (p != 0) {
|
||||
s32 q2;
|
||||
if ((u16)*p == 1) {
|
||||
v = *(short *)(a1 + 6); p[4] = v; SHB(v); *(int *)(p + 0x24) = v;
|
||||
v = *(short *)(a1 + 0xa); p[5] = v; SHB(v); *(int *)(p + 0x26) = v;
|
||||
w = *(short *)(a1 + 0xe); p[6] = w; v = p[0x16] | 1; SHB(w); p[0x16] = v; *(int *)(p + 0x28) = w;
|
||||
} else if ((q2 = *(int *)(p + 0x1a)) != 0) {
|
||||
v = *(short *)(a1 + 6); p[4] = v; SHB(v); *(int *)(q2 + 0x14) = v;
|
||||
v = *(short *)(a1 + 0xa); p[5] = v; q2 = *(int *)(p + 0x1a); SHB(v); *(int *)(q2 + 0x18) = v;
|
||||
v = *(short *)(a1 + 0xe); p[6] = v; q2 = *(int *)(p + 0x1a); SHB(v); *(int *)(q2 + 0x1c) = v;
|
||||
} else {
|
||||
p[4] = *(short *)(a1 + 6); p[5] = *(short *)(a1 + 0xa); p[6] = *(short *)(a1 + 0xe);
|
||||
}
|
||||
}
|
||||
i = i + 1; off = off + 0x58;
|
||||
} while (i < 0x1e);
|
||||
}
|
||||
|
||||
|
||||
|
||||
void func_80165E2C(u16 *arg0) {
|
||||
@@ -5494,7 +5535,92 @@ s32 func_801670E4(s32 arg0, s32 arg1, s32 arg2, s32 arg3) {
|
||||
}
|
||||
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC07_006/nonmatchings/ov_SC07_006_jr_8015C32C", func_80167540);
|
||||
// @class: plumbing
|
||||
// @stuck: none — MATCH (replicated proven-banked sibling src/ov_SC03_006/ov_SC03_006_jr_8015C32C.c:5098)
|
||||
#include "common.h"
|
||||
|
||||
extern int rand(void);
|
||||
extern s32 func_801670E4(s32, s32, s32, s32);
|
||||
extern s32 func_80146A6C(s32, void*, s32, s32, s32, s32, s32);
|
||||
extern void func_80146C3C();
|
||||
|
||||
typedef struct { s32 m[8]; } Mat_80167540; /* 0x20 bytes */
|
||||
|
||||
struct Src_80167540 {
|
||||
u8 pad0[0x34];
|
||||
Mat_80167540 mat; /* 0x34 */
|
||||
};
|
||||
|
||||
struct Sub2_80167540 {
|
||||
u8 pad0[0x44];
|
||||
s32 unk44; /* 0x44 */
|
||||
};
|
||||
|
||||
struct Node_80167540 {
|
||||
/* 0x0 */ u16 unk0;
|
||||
u8 pad2[0x4];
|
||||
/* 0x6 */ s16 unk6;
|
||||
u8 pad8[0x2];
|
||||
/* 0xA */ s16 unkA;
|
||||
u8 padC[0x2];
|
||||
/* 0xE */ s16 unkE;
|
||||
u8 pad10[0x10];
|
||||
/* 0x20 */ struct Src_80167540 *unk20;
|
||||
u8 pad24[0x28];
|
||||
/* 0x4C */ struct Sub2_80167540 *unk4C;
|
||||
};
|
||||
|
||||
struct Entity_80167540 {
|
||||
/* 0x0 */ s16 unk0;
|
||||
/* 0x2 */ u16 unk2;
|
||||
u8 pad4[0xC];
|
||||
/* 0x10 */ s16 unk10;
|
||||
/* 0x12 */ s16 unk12;
|
||||
u8 pad14[0x8];
|
||||
/* 0x1C */ s32 unk1C;
|
||||
u8 pad20[0x10];
|
||||
/* 0x30 */ s32 unk30;
|
||||
/* 0x34 */ struct Node_80167540 *unk34;
|
||||
/* 0x38 */ Mat_80167540 mat;
|
||||
};
|
||||
|
||||
|
||||
s32 func_80167540(s32 arg0) {
|
||||
|
||||
struct Node_80167540 *node;
|
||||
struct Entity_80167540 *ent;
|
||||
s32 v;
|
||||
|
||||
node = ((struct Entity_80167540 *)arg0)->unk34;
|
||||
if (node->unk0 == 1) {
|
||||
if (((struct Entity_80167540 *)arg0)->unk12 > ((struct Entity_80167540 *)arg0)->unk10) {
|
||||
if (((struct Entity_80167540 *)arg0)->unk1C > 0) {
|
||||
((struct Entity_80167540 *)arg0)->unk10 = (s16) (rand() & 0x30);
|
||||
v = -0x30;
|
||||
goto shared;
|
||||
}
|
||||
} else if (((struct Entity_80167540 *)arg0)->unk1C < 0) {
|
||||
((struct Entity_80167540 *)arg0)->unk10 = (s16) ((rand() & 0x30) + 0x40);
|
||||
v = 0x30;
|
||||
shared:
|
||||
((struct Entity_80167540 *)arg0)->unk1C = v;
|
||||
}
|
||||
((struct Entity_80167540 *)arg0)->unk12 = (s16) (((struct Entity_80167540 *)arg0)->unk12 + ((struct Entity_80167540 *)arg0)->unk1C);
|
||||
((struct Entity_80167540 *)arg0)->mat = node->unk20->mat;
|
||||
((void (*)(struct Entity_80167540 *, s32, s32, s32))func_801670E4)(((struct Entity_80167540 *)arg0), 0, 0, 0);
|
||||
ent = ((struct Entity_80167540 *(*)(s32, struct Entity_80167540 *, s16, s16, s32, s32, s32))func_80146A6C)(0xE, ((struct Entity_80167540 *)arg0), node->unk6, node->unkA, node->unkE, 0, 0);
|
||||
if (ent != 0) {
|
||||
ent->mat = node->unk20->mat;
|
||||
}
|
||||
if (((struct Entity_80167540 *)arg0)->unk34->unk4C->unk44 & 0x20) {
|
||||
((struct Entity_80167540 *)arg0)->unk30 = 0x600;
|
||||
((struct Entity_80167540 *)arg0)->unk2 = (u16) (((struct Entity_80167540 *)arg0)->unk2 + 1);
|
||||
}
|
||||
} else {
|
||||
((void(*)(struct Entity_80167540 *))func_80146C3C)(((struct Entity_80167540 *)arg0));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC07_006/nonmatchings/ov_SC07_006_jr_8015C32C", func_80167714);
|
||||
|
||||
@@ -5507,7 +5633,56 @@ void func_801678B4(void *a0) {
|
||||
}
|
||||
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC07_006/nonmatchings/ov_SC07_006_jr_8015C32C", func_801678F0);
|
||||
// @class: plumbing
|
||||
// @stuck: none — MATCH (replicated proven-banked shared macro DEFINE_func_801678F0 @ src/shared/engine_core.h:27065; reach 138)
|
||||
#include "common.h"
|
||||
|
||||
|
||||
|
||||
extern s32 rand(void);
|
||||
extern void RotMatrixYXZ(void *a0, void *a1);
|
||||
extern void func_80048EAC(void *a0, void *a1);
|
||||
extern s32 func_801670E4(s32 a0, s32 a1, s32 a2, s32 a3);
|
||||
extern s32 func_80146A6C(s32 a0, void *a1, s32 a2, s32 a3, s32 a4, s32 a5, s32 a6);
|
||||
extern void func_80146C3C(u8*);
|
||||
extern u16 D_800B99DA;
|
||||
|
||||
void func_801678F0(s32 a0) {
|
||||
s32 p;
|
||||
s32 r;
|
||||
s16 buf[4];
|
||||
p = *(s32 *)(a0 + 0x34);
|
||||
if ((*(s32 *)(p + 0x44) & 0x10) != 0) {
|
||||
if (*(s16 *)(a0 + 0x12) > *(s16 *)(a0 + 0x10)) {
|
||||
if (*(s32 *)(a0 + 0x1C) > 0) {
|
||||
*(u16 *)(a0 + 0x10) = rand() & 0x30;
|
||||
*(s32 *)(a0 + 0x1C) = -0x30;
|
||||
}
|
||||
} else {
|
||||
if (*(s32 *)(a0 + 0x1C) < 0) {
|
||||
*(u16 *)(a0 + 0x10) = (rand() & 0x30) + 0x40;
|
||||
*(s32 *)(a0 + 0x1C) = 0x30;
|
||||
}
|
||||
}
|
||||
*(s16 *)(a0 + 0x12) = *(u16 *)(a0 + 0x12) + *(s32 *)(a0 + 0x1C);
|
||||
if (*(s32 *)(a0 + 0x30) != 0) {
|
||||
*(s32 *)(a0 + 0x30) = *(s32 *)(a0 + 0x30) - 0xC0;
|
||||
}
|
||||
buf[0] = 0x400;
|
||||
buf[1] = 0;
|
||||
buf[2] = D_800B99DA << 8;
|
||||
RotMatrixYXZ((void *)buf, (void *)(a0 + 0x38));
|
||||
((void (*)(s32, s32))func_80048EAC)(*(s32 *)(p + 0x20) + 0x34, a0 + 0x38);
|
||||
func_801670E4(a0, -6, -0x44, -0x18);
|
||||
r = ((s32 (*)(s32, s32, s32, s32, s32, s32, s32))func_80146A6C)(0xE, a0, *(s16 *)(a0 + 6), *(s16 *)(a0 + 0xA), *(s16 *)(a0 + 0xE), 0, 0);
|
||||
if (r != 0) {
|
||||
*(Blk32 *)(r + 0x38) = *(Blk32 *)(a0 + 0x38);
|
||||
}
|
||||
} else {
|
||||
((void (*)(s32))func_80146C3C)(a0);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -5530,7 +5705,7 @@ extern int func_80029178(int);
|
||||
// @class: schedule
|
||||
// @stuck: none — MATCH. The between-loops f1/f2 store-swap (0x55/0x56) is fixed by writing f2's assign first, then the chained `buf[0x44] = buf[0x45] = buf[0x45] << 1;` — the chain keeps f1's read first (read order fixed by -0x12 in $v0) while emitting f2's store (0x56) ahead of the f1/f0 pair (0x55,0x54). 173/173.
|
||||
|
||||
extern void func_80168070(s32 a0, s16 *a1, s16 *a2, void *a3);
|
||||
extern void func_80168070();
|
||||
|
||||
s32 func_80167DBC(s32 arg0, s32 arg1, s32 arg2) {
|
||||
|
||||
|
||||
@@ -335,14 +335,14 @@ extern s32 func_8012C750(s32 a0);
|
||||
extern s32 func_8012C820(u8 *a0);
|
||||
extern u16 D_801274E4[];
|
||||
extern s32 func_8012CB64(s32 arg0, s32 arg1, s32 arg2, s32 arg3, s32 arg4);
|
||||
extern void func_8012CC88(s32 a, s32 b, s32 c);
|
||||
extern void func_8012CC88();
|
||||
extern u8 D_800D3918[];
|
||||
extern void func_8012CBA4(s32 a0);
|
||||
extern void func_8012CBCC(s32 a0);
|
||||
extern void func_8012CBF4(s32 a0);
|
||||
extern void func_8012CC1C(s32 arg0, s32 arg1);
|
||||
extern void func_8012CC40(s32 arg0, s32 arg1);
|
||||
extern void func_8012CC88(s32 a0, s32 a1, s32 a2);
|
||||
extern void func_8012CC88();
|
||||
extern void func_8012CC64(s32 a0, s32 a1);
|
||||
extern s32 func_80133784(s32 a0, void *a1, s32 a2);
|
||||
extern s32 func_8012CE2C(s32 a0);
|
||||
@@ -1047,7 +1047,7 @@ extern void func_80145EE8(s32 param_1);
|
||||
extern void MoveImage(void *a0, s32 a1, s32 a2);
|
||||
extern s32 func_80146128(void);
|
||||
extern void func_80146360(void);
|
||||
extern void func_801463A0(void);
|
||||
extern void func_801463A0();
|
||||
extern u8 D_80078EC1;
|
||||
extern s32 D_80078EC8;
|
||||
extern s32 D_80126B9C;
|
||||
@@ -1513,9 +1513,9 @@ extern void func_8014CCB4(void);
|
||||
extern void func_8014CC28(s32 a0);
|
||||
extern void func_8014CD0C(u8 *a0);
|
||||
extern void func_8014CF04(s32 a0, void *a1, void *a2);
|
||||
extern void func_8014CD80(s32 a0, void *a1, void *a2);
|
||||
extern void func_8014CD80();
|
||||
extern void func_8014D2A0(s32 a0, void *a1, void *a2);
|
||||
extern void func_8014D12C(s32 a0, void *a1, void *a2);
|
||||
extern void func_8014D12C();
|
||||
extern void func_8014D0A4(s32 a0);
|
||||
extern void func_8014D610(s32 a0, void *a1, void *a2);
|
||||
extern void func_8014D4C0(s32 a0, void *a1, void *a2);
|
||||
@@ -1553,7 +1553,7 @@ extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2);
|
||||
extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2);
|
||||
extern s32 func_8014F24C(struct SubF24C *a0);
|
||||
extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2);
|
||||
extern void func_8014F4C0(u8 *a0);
|
||||
extern void func_8014F4C0();
|
||||
extern void func_8014F468(void);
|
||||
extern s32 D_801152BC;
|
||||
extern int func_8014F74C(s32 arg0);
|
||||
@@ -1562,7 +1562,7 @@ extern void func_8014FA04(s32 a0);
|
||||
extern s32 func_8014FC18(u8 *self);
|
||||
extern int func_8014FD54(int param_1);
|
||||
extern s32 func_80150170(void *a0);
|
||||
extern s32 func_8014FE60(void *a0);
|
||||
extern s32 func_8014FE60();
|
||||
extern void func_8014FDF4(struct S8014FDF4 *a0);
|
||||
extern s32 func_80150150(s32 a, s32 b);
|
||||
extern s32 func_801502EC(s32 e, void *a1, void *a2);
|
||||
@@ -2515,7 +2515,7 @@ extern void func_801678B4(void *a0);
|
||||
extern void func_80167A9C(void *a0);
|
||||
extern void func_80167AD8(void);
|
||||
extern int func_80029178(int);
|
||||
extern void func_80168070(s32 a0, s16 *a1, s16 *a2, void *a3);
|
||||
extern void func_80168070();
|
||||
extern s32 func_80167DBC(s32 arg0, s32 arg1, s32 arg2);
|
||||
extern void func_80166F58(s32 arg0, s32 arg1, s32 arg2, s32 arg3);
|
||||
extern void func_801681FC(s32 param_1);
|
||||
@@ -3103,7 +3103,7 @@ extern s16 D_80126976;
|
||||
extern s16 D_80126978;
|
||||
extern s16 D_8012697A;
|
||||
extern void func_801748EC(void);
|
||||
extern s32 func_801749C8(s32);
|
||||
extern s32 func_801749C8();
|
||||
extern s32 func_801749A8(s32 a0);
|
||||
extern void func_80174BBC(void *a0);
|
||||
extern void func_80174BF4(void *a0);
|
||||
|
||||
@@ -335,14 +335,14 @@ extern s32 func_8012C750(s32 a0);
|
||||
extern s32 func_8012C820(u8 *a0);
|
||||
extern u16 D_801274E4[];
|
||||
extern s32 func_8012CB64(s32 arg0, s32 arg1, s32 arg2, s32 arg3, s32 arg4);
|
||||
extern void func_8012CC88(s32 a, s32 b, s32 c);
|
||||
extern void func_8012CC88();
|
||||
extern u8 D_800D3918[];
|
||||
extern void func_8012CBA4(s32 a0);
|
||||
extern void func_8012CBCC(s32 a0);
|
||||
extern void func_8012CBF4(s32 a0);
|
||||
extern void func_8012CC1C(s32 arg0, s32 arg1);
|
||||
extern void func_8012CC40(s32 arg0, s32 arg1);
|
||||
extern void func_8012CC88(s32 a0, s32 a1, s32 a2);
|
||||
extern void func_8012CC88();
|
||||
extern void func_8012CC64(s32 a0, s32 a1);
|
||||
extern s32 func_80133784(s32 a0, void *a1, s32 a2);
|
||||
extern s32 func_8012CE2C(s32 a0);
|
||||
@@ -1019,7 +1019,7 @@ extern void func_80145EE8(s32 param_1);
|
||||
extern void MoveImage(void *a0, s32 a1, s32 a2);
|
||||
extern s32 func_80146128(void);
|
||||
extern void func_80146360(void);
|
||||
extern void func_801463A0(void);
|
||||
extern void func_801463A0();
|
||||
extern u8 D_80078EC1;
|
||||
extern s32 D_80078EC8;
|
||||
extern s32 D_80126B9C;
|
||||
@@ -1487,9 +1487,9 @@ extern void func_8014CCB4(void);
|
||||
extern void func_8014CC28(s32 a0);
|
||||
extern void func_8014CD0C(u8 *a0);
|
||||
extern void func_8014CF04(s32 a0, void *a1, void *a2);
|
||||
extern void func_8014CD80(s32 a0, void *a1, void *a2);
|
||||
extern void func_8014CD80();
|
||||
extern void func_8014D2A0(s32 a0, void *a1, void *a2);
|
||||
extern void func_8014D12C(s32 a0, void *a1, void *a2);
|
||||
extern void func_8014D12C();
|
||||
extern void func_8014D0A4(s32 a0);
|
||||
extern void func_8014D610(s32 a0, void *a1, void *a2);
|
||||
extern void func_8014D4C0(s32 a0, void *a1, void *a2);
|
||||
@@ -1527,7 +1527,7 @@ extern s32 func_8014EE14(s32 arg0, s16 * arg1, s16 * arg2);
|
||||
extern s32 func_8014F2E0(s32 a0, s16 *a1, s16 *a2);
|
||||
extern s32 func_8014F24C(struct SubF24C *a0);
|
||||
extern s32 func_8014F2E0(s32 arg0, s16 * arg1, s16 * arg2);
|
||||
extern void func_8014F4C0(u8 *a0);
|
||||
extern void func_8014F4C0();
|
||||
extern void func_8014F468(void);
|
||||
extern s32 D_801152BC;
|
||||
extern int func_8014F74C(s32 arg0);
|
||||
@@ -1536,7 +1536,7 @@ extern void func_8014FA04(s32 a0);
|
||||
extern s32 func_8014FC18(u8 *self);
|
||||
extern int func_8014FD54(int param_1);
|
||||
extern void func_80150170(void *a0);
|
||||
extern s32 func_8014FE60(void *a0);
|
||||
extern s32 func_8014FE60();
|
||||
extern void func_8014FDF4(struct S8014FDF4 *a0);
|
||||
extern s32 func_80150150(s32 a, s32 b);
|
||||
extern s32 func_80150460(s32 a, s32 b);
|
||||
@@ -2446,7 +2446,7 @@ extern void func_80167A9C(void *a0);
|
||||
extern void func_80167AD8(void);
|
||||
extern s32 func_80017758(void *a0, void *a1);
|
||||
extern int func_80029178(int);
|
||||
extern void func_80168070(s32 a0, s16 *a1, s16 *a2, void *a3);
|
||||
extern void func_80168070();
|
||||
extern s32 func_80167DBC(s32 arg0, s32 arg1, s32 arg2);
|
||||
extern void func_80166F58(s32 arg0, s32 arg1, s32 arg2, s32 arg3);
|
||||
extern void func_801681FC(s32 param_1);
|
||||
@@ -3026,7 +3026,7 @@ extern s16 D_80126976;
|
||||
extern s16 D_80126978;
|
||||
extern s16 D_8012697A;
|
||||
extern void func_801748EC(void);
|
||||
extern s32 func_801749C8(s32);
|
||||
extern s32 func_801749C8();
|
||||
extern s32 func_801749A8(s32 a0);
|
||||
extern void func_80174BBC(void *a0);
|
||||
extern void func_80174BF4(void *a0);
|
||||
|
||||
@@ -13265,7 +13265,7 @@
|
||||
|
||||
#define DEFINE_func_8014FDF4() \
|
||||
extern s32 func_80150170(void *a0); \
|
||||
extern s32 func_8014FE60(void *a0); \
|
||||
extern s32 func_8014FE60(); \
|
||||
void func_8014FDF4(struct S8014FDF4 *a0) { \
|
||||
if (a0->f6 != a0->f88 || a0->fA != a0->f8A || a0->fE != a0->f8C) { \
|
||||
func_80150170(a0); \
|
||||
|
||||
@@ -0,0 +1,89 @@
|
||||
#!/usr/bin/env python3
|
||||
"""Emit wave_binary.js args from a fuel manifest (build_fuel_manifest.py output).
|
||||
|
||||
Selects draft-now targets (WAVE class, reach>=REACH, Ghidra-C cached), resolves the
|
||||
per-function asm / asm_subdir / ghidra_c paths by globbing the overlay's asm tree,
|
||||
and detects own_jtbl (an in-body computed jump: a `jr` to a register other than $ra).
|
||||
|
||||
Splits output into a NON-JTBL list (plain harvest_verify / family_sweep --hseq path)
|
||||
and a JTBL list (needs the §8e carve path), sorted by leverage desc. Writes a
|
||||
batch-sized wave-args file plus the full pool for later batches.
|
||||
|
||||
Usage:
|
||||
build_wave_args.py --fuel .run/fuel_ov_SC07_006.json --binary ov_SC07_006 \
|
||||
--batch 24 --out-prefix .run/wave_sc07006 --draft-dir .run/drafts-sc07006-b1
|
||||
"""
|
||||
import argparse, glob, json, os, re, sys
|
||||
|
||||
JR = re.compile(r"\bjr\s+\$(\w+)")
|
||||
|
||||
def has_own_jtbl(asm_path):
|
||||
try:
|
||||
with open(asm_path) as f:
|
||||
for line in f:
|
||||
for m in JR.finditer(line):
|
||||
if m.group(1) != "ra":
|
||||
return True
|
||||
except OSError:
|
||||
return False
|
||||
return False
|
||||
|
||||
def resolve_asm(binary, name):
|
||||
"""Find func_<ADDR>.s under asm/<binary>/nonmatchings/*/. Returns (asm, subdir) or (None,None)."""
|
||||
hits = glob.glob(f"asm/{binary}/nonmatchings/*/{name}.s")
|
||||
if not hits:
|
||||
return None, None
|
||||
asm = hits[0]
|
||||
return asm, os.path.dirname(asm)
|
||||
|
||||
def main():
|
||||
ap = argparse.ArgumentParser()
|
||||
ap.add_argument("--fuel", required=True)
|
||||
ap.add_argument("--binary", required=True)
|
||||
ap.add_argument("--reach", type=int, default=134)
|
||||
ap.add_argument("--batch", type=int, default=24)
|
||||
ap.add_argument("--out-prefix", required=True)
|
||||
ap.add_argument("--draft-dir", required=True)
|
||||
ap.add_argument("--klass", default="WAVE")
|
||||
ap.add_argument("--max-nins", type=int, default=150, help="skip GIANT-sized bodies")
|
||||
args = ap.parse_args()
|
||||
|
||||
targets = json.load(open(args.fuel))["targets"]
|
||||
pool = [t for t in targets
|
||||
if t["class"] == args.klass and t["reach"] >= args.reach
|
||||
and t.get("cached") and t["nins"] <= args.max_nins]
|
||||
pool.sort(key=lambda t: -t["leverage"])
|
||||
|
||||
recs_nonjtbl, recs_jtbl, missing = [], [], []
|
||||
for t in pool:
|
||||
name = t["name"]
|
||||
asm, subdir = resolve_asm(args.binary, name)
|
||||
if asm is None:
|
||||
missing.append(name)
|
||||
continue
|
||||
rec = {
|
||||
"name": name, "addr": t["addr"], "nins": t["nins"], "reach": t["reach"],
|
||||
"asm": asm, "asm_subdir": subdir, "ghidra_c": f".run/ghidra_c/{name}.c",
|
||||
"own_jtbl": has_own_jtbl(asm), "o0": False, "sibling_ov077": None,
|
||||
"leverage": t["leverage"], "region": t.get("region"),
|
||||
}
|
||||
(recs_jtbl if rec["own_jtbl"] else recs_nonjtbl).append(rec)
|
||||
|
||||
batch = recs_nonjtbl[:args.batch]
|
||||
b1 = {"binary": args.binary, "draftDir": args.draft_dir, "targets": batch}
|
||||
json.dump(b1, open(f"{args.out_prefix}_b1_args.json", "w"), indent=1)
|
||||
json.dump(recs_nonjtbl, open(f"{args.out_prefix}_nonjtbl_pool.json", "w"), indent=1)
|
||||
json.dump(recs_jtbl, open(f"{args.out_prefix}_jtbl_pool.json", "w"), indent=1)
|
||||
|
||||
print(f"binary={args.binary} reach>={args.reach} class={args.klass} cached-pool={len(pool)}")
|
||||
print(f" non-jtbl: {len(recs_nonjtbl)} jtbl: {len(recs_jtbl)} asm-missing: {len(missing)}")
|
||||
if missing:
|
||||
print(f" missing asm (skipped): {missing[:8]}{'...' if len(missing)>8 else ''}")
|
||||
print(f" batch-1 = top {len(batch)} non-jtbl by leverage "
|
||||
f"(sum leverage {sum(r['leverage'] for r in batch)}):")
|
||||
for r in batch:
|
||||
print(f" {r['name']} {r['addr']} nins={r['nins']} reach={r['reach']} lever={r['leverage']}")
|
||||
print(f" -> {args.out_prefix}_b1_args.json / _nonjtbl_pool.json / _jtbl_pool.json")
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
Reference in New Issue
Block a user