mirror of
https://github.com/Druthulu/BFM-decomp
synced 2026-09-28 06:49:47 -04:00
feat(phase-29): func_8013D53C 14/137 + NSD hardened (rewrite-to-canonical, (void) fix) + Cmd lift
- func_8013D53C: NSD (self-decl caller-thread) + a byte-neutral Cmd_8013D53C type-lift clear the plumbing -> 14/137 h_seq members bank; 123 have genuine per-member codegen DIFFs (hard cse.c-wall crack -> permuter fuel). Reverted the 123 bankless byte-neutral NSD edits (churn on matched code, §57a NB). - NSD hardened, 2 bug-fixes validated on D53C: REWRITE the divergent decl to canonical instead of DROPPING it (drop broke def-after-caller forward visibility -> 'func undeclared'); and '(void)' is a genuine 0-param conflict, not skippable like a true no-proto '()' (the bug that filed D53C's arity class as 'not this pass'). - earlier this session: broad --fix-def-sig sweep = HONEST +137 only (staging != banking, R14/R35); NSD is SURGICAL-ONLY (broad application poisons whole groups; --fix-def-sig is broad-safe). cookbook §57a. - R22 clean-fleet 140/140 byte-identical; tools-health OK (dedup 1846/0, C1 234205/234205); 0 NON_MATCHING (G4). fleet 75.2% instr / 60.6% distinct / 87.04% fn-count. session-total from 74.6: +0.6pp instr, ~+421 members.
This commit is contained in:
@@ -4278,3 +4278,43 @@ ACTUAL blocker (splice one member, read cc1) before stacking plumbing flags (R35
|
||||
**Not every type-lifted family needs this:** `func_8016CBC0` (also 137-member, also blocked) has NO divergent
|
||||
self-decl (survey the members: `grep 'func_X(' the-member-TUs`) — its blocker is a local-typedef lift (§ type-lift,
|
||||
like func_8012956C), a different lever. Route by the real cc1 error, not by "it's a stuck 137-family."
|
||||
|
||||
### §57a — Two NSD corrections + the SURGICAL-ONLY law + the honest broad-sweep yield (Phase 29, 2026-07-18)
|
||||
|
||||
Three findings from applying §57 at scale, all byte-grounded:
|
||||
|
||||
**(1) REWRITE the divergent decl to canonical — do NOT drop it (the def-after-caller trap).** The first §57
|
||||
build DROPPED the divergent decl. That is byte-neutral only when F's def sits ABOVE the caller in the TU (so the
|
||||
def itself provides the caller's forward visibility — `func_801670E4`, def-before-caller). `func_8013D53C` is
|
||||
def-AFTER-caller: a FILE-scope `void f(void)` forward decl, F's def spliced BELOW it — drop the decl and the
|
||||
caller gets `func_8013D53C undeclared`. The fix is exactly what `cast_call_sites` does: **rewrite** the decl to
|
||||
the def's canonical sig (matches the def → no conflict, AND keeps forward visibility), then cast the calls to the
|
||||
decl's ORIGINAL sig (byte-exact). Works both ways (a canonical forward decl above/below the def is compatible).
|
||||
|
||||
**(2) `(void)` is NOT no-proto — do not skip it.** The first build skipped `params in ('', 'void')`. But `void
|
||||
f(void)` is a 0-param PROTOTYPE that genuinely conflicts with a >0-param def (`cdecl.compatible(void f(void*),
|
||||
void f(void)) == False`), while a true no-proto `void f()` is compatible in either order (§51g). Skip ONLY the
|
||||
literal empty `()` (also the §32 no-proto-mis-cast guard); let `cdecl.compatible` judge `(void)`. This was why the
|
||||
BUILD SPEC filed D53C's `(void)`/(T) arity class as "not this pass" — it was a tool gap, now closed.
|
||||
|
||||
**(3) NSD is SURGICAL-ONLY; `--fix-def-sig` is broad-safe — the blast-radius asymmetry.** `--normalize-self-decls`
|
||||
edits the **TU file** (F's callers live in F's own TU), so a non-neutral edit poisons the ENTIRE `(overlay,split)`
|
||||
group — and unlike a bad DRAFT (which `harvest_verify` bisects away per-member), a bad TU edit can't be isolated;
|
||||
the whole group's build MISMATCHes and the backstop reverts all of it. A broad `--band substantial
|
||||
--normalize-self-decls` (esp. combined with `--fix-def-sig`, whose canonical-rewrite changes NSD's reference sig)
|
||||
banked **7** with ~752 groups backstop-reverted. `--fix-def-sig` edits DRAFTS (bisect-safe per member), so it IS
|
||||
broad-safe. **Law: apply NSD per-family (`--only`, on a surveyed self-decl blocker); apply `--fix-def-sig` broadly.**
|
||||
The backstop makes broad NSD SAFE (0 false banks) but useless.
|
||||
|
||||
**(4) The honest broad-sweep yield (R14/R35): staging ≠ banking.** The 60 substantial matched-ov077 families with
|
||||
2,163 stubbed members STAGE 2,169 drafts, but a broad `--fix-def-sig` sweep banks only **137** (one def-sig family +
|
||||
stragglers) — 2,032 fail. The substantial-family frontier is NOT broadly mechanical; each family carries its own
|
||||
blocker (self-decl / type-lift / def-sig+caller / genuine codegen). **Gate-probe a SAMPLE before scaling a yield
|
||||
estimate off the STAGED count** — the phase's own invariant, which I violated by projecting ~1,500 from 2,169 staged.
|
||||
`func_8013D53C` is the archetype: NSD + a `Cmd_8013D53C` type-lift clear its plumbing (it now COMPILES), and the
|
||||
sweep banks **14/137** — the h_seq members whose bodies happen to match the exemplar — while **123** carry a genuine
|
||||
per-member codegen DIFF (the hard cse.c-wall crack does not fully template). So it is a PARTLY-mechanical family:
|
||||
the plumbing levers harvest the easy fraction ×0 tokens, the residual 123 are permuter/Fable fuel. **NB the NSD
|
||||
edits are byte-neutral even where the member does NOT bank (the caller's canonical decl + cast matches with F still
|
||||
a stub), so they persist on all 137 TUs — revert the ones that didn't bank (still carry the stub) so you commit
|
||||
banks, not churn on matched code.** The classifier's `PLUMBING` count is a §56 memcpy red-herring; read full cc1 stderr.
|
||||
|
||||
+142
-142
@@ -4,156 +4,156 @@
|
||||
# cross-binary collapsible-byte leverage: docs/duplicates.cross.md.
|
||||
|
||||
# THREE progress metrics (all matter — see the labels):
|
||||
FLEET fn-count byte-ident: 307733 / 353722 = 87.00% (REAL+LINKED+empties; FUNCTION-count, ×134-inflated — one crack counts per overlay)
|
||||
FLEET instr-weighted : 9826239 / 13081451 = 75.1% (shipped .text across resident+138 overlays; the decomp.dev-DISPLAY number)
|
||||
FLEET distinct-code(uniq): 3375766 / 5574674 = 60.6% (61329/87459 unique fns; the DISTINCT-RE number)
|
||||
FLEET fn-count byte-ident: 307884 / 353722 = 87.04% (REAL+LINKED+empties; FUNCTION-count, ×134-inflated — one crack counts per overlay)
|
||||
FLEET instr-weighted : 9842328 / 13081451 = 75.2% (shipped .text across resident+138 overlays; the decomp.dev-DISPLAY number)
|
||||
FLEET distinct-code(uniq): 3379153 / 5574674 = 60.6% (61345/87459 unique fns; the DISTINCT-RE number)
|
||||
MAIN game-code weighted : 436 / 60201 = 0.7% (Phase-27 T10; SEPARATE — LINKED-excluding Ghidra sig dated 2026-06-14, PROVISIONAL until a fresh/complete main sig; NOT folded into the fleet number)
|
||||
|
||||
FLEET REAL substantive : 305878 (of which dedup-shared 234161 via 1846 groups / 234205 instances)
|
||||
FLEET REAL substantive : 306029 (of which dedup-shared 234161 via 1846 groups / 234205 instances)
|
||||
FLEET LINKED PsyQ objs : 959
|
||||
FLEET NON_MATCHING : 7 (0 in any default build — G4)
|
||||
FLEET INCLUDE_ASM stubs : 45982
|
||||
FLEET INCLUDE_ASM stubs : 45831
|
||||
FLEET matchable : 353722
|
||||
|
||||
| binary | REAL | shared | LINKED | byte-ident | matchable | byte-ident % |
|
||||
|---|---:|---:|---:|---:|---:|---:|
|
||||
| main | 54 | 2 | 959 | 1055 | 2096 | 50.3% |
|
||||
| resident | 129 | 0 | 0 | 131 | 145 | 90.3% |
|
||||
| ov_SC01_000 | 2190 | 1704 | 0 | 2190 | 2403 | 91.1% |
|
||||
| ov_SC01_001 | 2195 | 1704 | 0 | 2197 | 2466 | 89.1% |
|
||||
| ov_SC01_004 | 2188 | 1695 | 0 | 2189 | 2414 | 90.7% |
|
||||
| ov_SC01_005 | 2217 | 1717 | 0 | 2217 | 2503 | 88.6% |
|
||||
| ov_SC01_006 | 2217 | 1717 | 0 | 2217 | 2503 | 88.6% |
|
||||
| ov_SC01_008 | 2188 | 1695 | 0 | 2190 | 2426 | 90.3% |
|
||||
| ov_SC01_009 | 2213 | 1696 | 0 | 2214 | 2507 | 88.3% |
|
||||
| ov_SC01_074 | 2191 | 1696 | 0 | 2193 | 2425 | 90.4% |
|
||||
| ov_SC01_000 | 2191 | 1704 | 0 | 2191 | 2403 | 91.2% |
|
||||
| ov_SC01_001 | 2196 | 1704 | 0 | 2198 | 2466 | 89.1% |
|
||||
| ov_SC01_004 | 2189 | 1695 | 0 | 2190 | 2414 | 90.7% |
|
||||
| ov_SC01_005 | 2218 | 1717 | 0 | 2218 | 2503 | 88.6% |
|
||||
| ov_SC01_006 | 2218 | 1717 | 0 | 2218 | 2503 | 88.6% |
|
||||
| ov_SC01_008 | 2189 | 1695 | 0 | 2191 | 2426 | 90.3% |
|
||||
| ov_SC01_009 | 2214 | 1696 | 0 | 2215 | 2507 | 88.4% |
|
||||
| ov_SC01_074 | 2192 | 1696 | 0 | 2194 | 2425 | 90.5% |
|
||||
| ov_SC01_077 | 2384 | 1664 | 0 | 2386 | 2585 | 92.3% |
|
||||
| ov_SC01_080 | 2229 | 1699 | 0 | 2229 | 2512 | 88.7% |
|
||||
| ov_SC01_084 | 2237 | 1699 | 0 | 2242 | 2579 | 86.9% |
|
||||
| ov_SC02_000 | 2288 | 1734 | 0 | 2288 | 2683 | 85.3% |
|
||||
| ov_SC02_003 | 2288 | 1734 | 0 | 2288 | 2683 | 85.3% |
|
||||
| ov_SC02_004 | 2196 | 1699 | 0 | 2196 | 2401 | 91.5% |
|
||||
| ov_SC02_005 | 2303 | 1695 | 0 | 2313 | 2927 | 79.0% |
|
||||
| ov_SC02_011 | 2312 | 1702 | 0 | 2323 | 2893 | 80.3% |
|
||||
| ov_SC02_015 | 2197 | 1701 | 0 | 2197 | 2414 | 91.0% |
|
||||
| ov_SC02_016 | 2227 | 1701 | 0 | 2230 | 2545 | 87.6% |
|
||||
| ov_SC02_017 | 2273 | 1701 | 0 | 2281 | 2732 | 83.5% |
|
||||
| ov_SC02_021 | 2203 | 1701 | 0 | 2203 | 2437 | 90.4% |
|
||||
| ov_SC02_026 | 2218 | 1699 | 0 | 2224 | 2572 | 86.5% |
|
||||
| ov_SC02_027 | 2241 | 1699 | 0 | 2250 | 2692 | 83.6% |
|
||||
| ov_SC02_028 | 2242 | 1699 | 0 | 2252 | 2701 | 83.4% |
|
||||
| ov_SC02_031 | 2228 | 1700 | 0 | 2233 | 2562 | 87.2% |
|
||||
| ov_SC02_035 | 2204 | 1699 | 0 | 2207 | 2520 | 87.6% |
|
||||
| ov_SC02_039 | 2189 | 1699 | 0 | 2189 | 2416 | 90.6% |
|
||||
| ov_SC02_041 | 2224 | 1699 | 0 | 2227 | 2561 | 87.0% |
|
||||
| ov_SC03_001 | 2323 | 1700 | 0 | 2340 | 2869 | 81.6% |
|
||||
| ov_SC03_002 | 2250 | 1704 | 0 | 2265 | 2631 | 86.1% |
|
||||
| ov_SC03_003 | 2199 | 1699 | 0 | 2200 | 2423 | 90.8% |
|
||||
| ov_SC03_006 | 2262 | 1705 | 0 | 2271 | 2767 | 82.1% |
|
||||
| ov_SC03_007 | 2243 | 1699 | 0 | 2247 | 2623 | 85.7% |
|
||||
| ov_SC03_010 | 2205 | 1699 | 0 | 2205 | 2470 | 89.3% |
|
||||
| ov_SC03_011 | 2213 | 1699 | 0 | 2219 | 2527 | 87.8% |
|
||||
| ov_SC03_012 | 2191 | 1699 | 0 | 2192 | 2406 | 91.1% |
|
||||
| ov_SC03_013 | 2210 | 1699 | 0 | 2210 | 2492 | 88.7% |
|
||||
| ov_SC03_014 | 2268 | 1724 | 0 | 2268 | 2685 | 84.5% |
|
||||
| ov_SC03_015 | 2269 | 1724 | 0 | 2269 | 2685 | 84.5% |
|
||||
| ov_SC03_023 | 2197 | 1699 | 0 | 2198 | 2435 | 90.3% |
|
||||
| ov_SC03_024 | 2255 | 1704 | 0 | 2262 | 2641 | 85.6% |
|
||||
| ov_SC03_028 | 2237 | 1699 | 0 | 2241 | 2664 | 84.1% |
|
||||
| ov_SC03_029 | 2239 | 1701 | 0 | 2249 | 2644 | 85.1% |
|
||||
| ov_SC03_030 | 2211 | 1704 | 0 | 2213 | 2495 | 88.7% |
|
||||
| ov_SC03_031 | 2209 | 1699 | 0 | 2212 | 2514 | 88.0% |
|
||||
| ov_SC03_089 | 2223 | 1699 | 0 | 2230 | 2581 | 86.4% |
|
||||
| ov_SC03_090 | 2225 | 1699 | 0 | 2233 | 2625 | 85.1% |
|
||||
| ov_SC03_091 | 2228 | 1699 | 0 | 2236 | 2640 | 84.7% |
|
||||
| ov_SC03_092 | 2239 | 1699 | 0 | 2251 | 2587 | 87.0% |
|
||||
| ov_SC03_093 | 2215 | 1699 | 0 | 2219 | 2563 | 86.6% |
|
||||
| ov_SC03_094 | 2210 | 1699 | 0 | 2216 | 2577 | 86.0% |
|
||||
| ov_SC03_095 | 2200 | 1699 | 0 | 2203 | 2474 | 89.0% |
|
||||
| ov_SC03_096 | 2200 | 1699 | 0 | 2203 | 2465 | 89.4% |
|
||||
| ov_SC03_097 | 2229 | 1699 | 0 | 2236 | 2603 | 85.9% |
|
||||
| ov_SC03_098 | 2208 | 1699 | 0 | 2211 | 2541 | 87.0% |
|
||||
| ov_SC03_099 | 2201 | 1699 | 0 | 2204 | 2504 | 88.0% |
|
||||
| ov_SC03_100 | 2211 | 1699 | 0 | 2215 | 2539 | 87.2% |
|
||||
| ov_SC03_101 | 2211 | 1699 | 0 | 2215 | 2528 | 87.6% |
|
||||
| ov_SC03_102 | 2203 | 1699 | 0 | 2206 | 2492 | 88.5% |
|
||||
| ov_SC03_103 | 2206 | 1701 | 0 | 2209 | 2510 | 88.0% |
|
||||
| ov_SC03_104 | 2231 | 1699 | 0 | 2238 | 2616 | 85.6% |
|
||||
| ov_SC03_105 | 2224 | 1699 | 0 | 2231 | 2597 | 85.9% |
|
||||
| ov_SC03_108 | 2193 | 1699 | 0 | 2193 | 2443 | 89.8% |
|
||||
| ov_SC03_109 | 2194 | 1699 | 0 | 2196 | 2424 | 90.6% |
|
||||
| ov_SC03_110 | 2199 | 1699 | 0 | 2199 | 2468 | 89.1% |
|
||||
| ov_SC03_111 | 2211 | 1699 | 0 | 2214 | 2510 | 88.2% |
|
||||
| ov_SC03_112 | 2204 | 1701 | 0 | 2206 | 2526 | 87.3% |
|
||||
| ov_SC03_113 | 2197 | 1701 | 0 | 2200 | 2468 | 89.1% |
|
||||
| ov_SC03_114 | 2187 | 1699 | 0 | 2189 | 2415 | 90.6% |
|
||||
| ov_SC03_115 | 2204 | 1699 | 0 | 2206 | 2472 | 89.2% |
|
||||
| ov_SC03_116 | 2194 | 1699 | 0 | 2197 | 2438 | 90.1% |
|
||||
| ov_SC03_117 | 2222 | 1699 | 0 | 2228 | 2557 | 87.1% |
|
||||
| ov_SC03_118 | 2269 | 1723 | 0 | 2270 | 2685 | 84.5% |
|
||||
| ov_SC03_119 | 2267 | 1723 | 0 | 2268 | 2685 | 84.5% |
|
||||
| ov_SC03_121 | 2201 | 1699 | 0 | 2204 | 2459 | 89.6% |
|
||||
| ov_SC03_124 | 2280 | 1695 | 0 | 2300 | 2741 | 83.9% |
|
||||
| ov_SC03_125 | 2237 | 1699 | 0 | 2249 | 2588 | 86.9% |
|
||||
| ov_SC03_126 | 2200 | 1701 | 0 | 2200 | 2423 | 90.8% |
|
||||
| ov_SC04_000 | 2216 | 1703 | 0 | 2225 | 2546 | 87.4% |
|
||||
| ov_SC04_002 | 2232 | 1699 | 0 | 2236 | 2636 | 84.8% |
|
||||
| ov_SC04_003 | 2210 | 1699 | 0 | 2214 | 2502 | 88.5% |
|
||||
| ov_SC04_004 | 2219 | 1699 | 0 | 2221 | 2558 | 86.8% |
|
||||
| ov_SC04_005 | 2227 | 1699 | 0 | 2233 | 2612 | 85.5% |
|
||||
| ov_SC04_006 | 2200 | 1699 | 0 | 2202 | 2454 | 89.7% |
|
||||
| ov_SC04_007 | 2220 | 1699 | 0 | 2224 | 2569 | 86.6% |
|
||||
| ov_SC04_008 | 2190 | 1699 | 0 | 2190 | 2415 | 90.7% |
|
||||
| ov_SC04_009 | 2206 | 1699 | 0 | 2209 | 2441 | 90.5% |
|
||||
| ov_SC04_010 | 2197 | 1699 | 0 | 2198 | 2419 | 90.9% |
|
||||
| ov_SC04_011 | 2253 | 1699 | 0 | 2259 | 2803 | 80.6% |
|
||||
| ov_SC04_012 | 2193 | 1699 | 0 | 2194 | 2420 | 90.7% |
|
||||
| ov_SC04_015 | 2256 | 1700 | 0 | 2267 | 2611 | 86.8% |
|
||||
| ov_SC04_016 | 2196 | 1699 | 0 | 2198 | 2440 | 90.1% |
|
||||
| ov_SC04_018 | 2307 | 1734 | 0 | 2307 | 2857 | 80.7% |
|
||||
| ov_SC04_019 | 2312 | 1734 | 0 | 2312 | 2857 | 80.9% |
|
||||
| ov_SC04_020 | 2224 | 1699 | 0 | 2236 | 2567 | 87.1% |
|
||||
| ov_SC04_021 | 2201 | 1701 | 0 | 2201 | 2423 | 90.8% |
|
||||
| ov_SC05_000 | 2197 | 1703 | 0 | 2200 | 2422 | 90.8% |
|
||||
| ov_SC05_001 | 2220 | 1699 | 0 | 2225 | 2574 | 86.4% |
|
||||
| ov_SC05_002 | 2202 | 1699 | 0 | 2205 | 2442 | 90.3% |
|
||||
| ov_SC05_003 | 2199 | 1699 | 0 | 2200 | 2481 | 88.7% |
|
||||
| ov_SC05_004 | 2194 | 1699 | 0 | 2196 | 2464 | 89.1% |
|
||||
| ov_SC05_005 | 2201 | 1699 | 0 | 2202 | 2491 | 88.4% |
|
||||
| ov_SC05_006 | 2193 | 1699 | 0 | 2193 | 2430 | 90.2% |
|
||||
| ov_SC05_007 | 2203 | 1699 | 0 | 2208 | 2482 | 89.0% |
|
||||
| ov_SC05_008 | 2220 | 1699 | 0 | 2222 | 2543 | 87.4% |
|
||||
| ov_SC05_009 | 2198 | 1699 | 0 | 2202 | 2438 | 90.3% |
|
||||
| ov_SC05_010 | 2224 | 1699 | 0 | 2228 | 2588 | 86.1% |
|
||||
| ov_SC05_011 | 2196 | 1699 | 0 | 2197 | 2409 | 91.2% |
|
||||
| ov_SC05_017 | 2303 | 1696 | 0 | 2314 | 2842 | 81.4% |
|
||||
| ov_SC05_018 | 2250 | 1699 | 0 | 2263 | 2673 | 84.7% |
|
||||
| ov_SC05_019 | 2201 | 1701 | 0 | 2201 | 2423 | 90.8% |
|
||||
| ov_SC06_000 | 2261 | 1708 | 0 | 2264 | 2691 | 84.1% |
|
||||
| ov_SC06_006 | 2216 | 1699 | 0 | 2217 | 2511 | 88.3% |
|
||||
| ov_SC06_008 | 2226 | 1701 | 0 | 2232 | 2542 | 87.8% |
|
||||
| ov_SC06_010 | 2210 | 1699 | 0 | 2215 | 2517 | 88.0% |
|
||||
| ov_SC06_011 | 2204 | 1699 | 0 | 2208 | 2468 | 89.5% |
|
||||
| ov_SC06_013 | 2198 | 1699 | 0 | 2199 | 2425 | 90.7% |
|
||||
| ov_SC06_014 | 2204 | 1699 | 0 | 2206 | 2453 | 89.9% |
|
||||
| ov_SC06_015 | 2201 | 1699 | 0 | 2201 | 2421 | 90.9% |
|
||||
| ov_SC06_016 | 2218 | 1699 | 0 | 2220 | 2549 | 87.1% |
|
||||
| ov_SC06_018 | 2215 | 1702 | 0 | 2222 | 2665 | 83.4% |
|
||||
| ov_SC06_020 | 2208 | 1701 | 0 | 2209 | 2518 | 87.7% |
|
||||
| ov_SC06_022 | 2222 | 1699 | 0 | 2230 | 2642 | 84.4% |
|
||||
| ov_SC06_024 | 2227 | 1699 | 0 | 2233 | 2667 | 83.7% |
|
||||
| ov_SC06_025 | 2219 | 1699 | 0 | 2224 | 2572 | 86.5% |
|
||||
| ov_SC06_027 | 2187 | 1699 | 0 | 2188 | 2408 | 90.9% |
|
||||
| ov_SC06_029 | 2245 | 1699 | 0 | 2257 | 2662 | 84.8% |
|
||||
| ov_SC06_030 | 2200 | 1699 | 0 | 2200 | 2456 | 89.6% |
|
||||
| ov_SC06_032 | 2212 | 1700 | 0 | 2219 | 2658 | 83.5% |
|
||||
| ov_SC06_033 | 2215 | 1700 | 0 | 2222 | 2631 | 84.5% |
|
||||
| ov_SC07_000 | 2214 | 1703 | 0 | 2216 | 2521 | 87.9% |
|
||||
| ov_SC07_001 | 2200 | 1699 | 0 | 2202 | 2454 | 89.7% |
|
||||
| ov_SC07_002 | 2227 | 1699 | 0 | 2231 | 2579 | 86.5% |
|
||||
| ov_SC07_006 | 1970 | 1547 | 0 | 2050 | 2456 | 83.5% |
|
||||
| ov_SC07_007 | 1986 | 1548 | 0 | 2070 | 2614 | 79.2% |
|
||||
| ov_SC07_008 | 2184 | 1699 | 0 | 2184 | 2386 | 91.5% |
|
||||
| ov_SC07_009 | 2194 | 1699 | 0 | 2196 | 2430 | 90.4% |
|
||||
| ov_SC07_010 | 2000 | 1548 | 0 | 2083 | 2526 | 82.5% |
|
||||
| ov_SC07_011 | 1986 | 1547 | 0 | 2066 | 2450 | 84.3% |
|
||||
| ov_SC01_080 | 2230 | 1699 | 0 | 2230 | 2512 | 88.8% |
|
||||
| ov_SC01_084 | 2238 | 1699 | 0 | 2243 | 2579 | 87.0% |
|
||||
| ov_SC02_000 | 2289 | 1734 | 0 | 2289 | 2683 | 85.3% |
|
||||
| ov_SC02_003 | 2289 | 1734 | 0 | 2289 | 2683 | 85.3% |
|
||||
| ov_SC02_004 | 2197 | 1699 | 0 | 2197 | 2401 | 91.5% |
|
||||
| ov_SC02_005 | 2304 | 1695 | 0 | 2314 | 2927 | 79.1% |
|
||||
| ov_SC02_011 | 2313 | 1702 | 0 | 2324 | 2893 | 80.3% |
|
||||
| ov_SC02_015 | 2198 | 1701 | 0 | 2198 | 2414 | 91.1% |
|
||||
| ov_SC02_016 | 2228 | 1701 | 0 | 2231 | 2545 | 87.7% |
|
||||
| ov_SC02_017 | 2274 | 1701 | 0 | 2282 | 2732 | 83.5% |
|
||||
| ov_SC02_021 | 2204 | 1701 | 0 | 2204 | 2437 | 90.4% |
|
||||
| ov_SC02_026 | 2219 | 1699 | 0 | 2225 | 2572 | 86.5% |
|
||||
| ov_SC02_027 | 2242 | 1699 | 0 | 2251 | 2692 | 83.6% |
|
||||
| ov_SC02_028 | 2243 | 1699 | 0 | 2253 | 2701 | 83.4% |
|
||||
| ov_SC02_031 | 2229 | 1700 | 0 | 2234 | 2562 | 87.2% |
|
||||
| ov_SC02_035 | 2205 | 1699 | 0 | 2208 | 2520 | 87.6% |
|
||||
| ov_SC02_039 | 2190 | 1699 | 0 | 2190 | 2416 | 90.6% |
|
||||
| ov_SC02_041 | 2225 | 1699 | 0 | 2228 | 2561 | 87.0% |
|
||||
| ov_SC03_001 | 2325 | 1700 | 0 | 2342 | 2869 | 81.6% |
|
||||
| ov_SC03_002 | 2252 | 1704 | 0 | 2267 | 2631 | 86.2% |
|
||||
| ov_SC03_003 | 2200 | 1699 | 0 | 2201 | 2423 | 90.8% |
|
||||
| ov_SC03_006 | 2263 | 1705 | 0 | 2272 | 2767 | 82.1% |
|
||||
| ov_SC03_007 | 2244 | 1699 | 0 | 2248 | 2623 | 85.7% |
|
||||
| ov_SC03_010 | 2206 | 1699 | 0 | 2206 | 2470 | 89.3% |
|
||||
| ov_SC03_011 | 2214 | 1699 | 0 | 2220 | 2527 | 87.9% |
|
||||
| ov_SC03_012 | 2192 | 1699 | 0 | 2193 | 2406 | 91.1% |
|
||||
| ov_SC03_013 | 2211 | 1699 | 0 | 2211 | 2492 | 88.7% |
|
||||
| ov_SC03_014 | 2269 | 1724 | 0 | 2269 | 2685 | 84.5% |
|
||||
| ov_SC03_015 | 2270 | 1724 | 0 | 2270 | 2685 | 84.5% |
|
||||
| ov_SC03_023 | 2198 | 1699 | 0 | 2199 | 2435 | 90.3% |
|
||||
| ov_SC03_024 | 2256 | 1704 | 0 | 2263 | 2641 | 85.7% |
|
||||
| ov_SC03_028 | 2238 | 1699 | 0 | 2242 | 2664 | 84.2% |
|
||||
| ov_SC03_029 | 2240 | 1701 | 0 | 2250 | 2644 | 85.1% |
|
||||
| ov_SC03_030 | 2212 | 1704 | 0 | 2214 | 2495 | 88.7% |
|
||||
| ov_SC03_031 | 2210 | 1699 | 0 | 2213 | 2514 | 88.0% |
|
||||
| ov_SC03_089 | 2224 | 1699 | 0 | 2231 | 2581 | 86.4% |
|
||||
| ov_SC03_090 | 2226 | 1699 | 0 | 2234 | 2625 | 85.1% |
|
||||
| ov_SC03_091 | 2229 | 1699 | 0 | 2237 | 2640 | 84.7% |
|
||||
| ov_SC03_092 | 2240 | 1699 | 0 | 2252 | 2587 | 87.1% |
|
||||
| ov_SC03_093 | 2216 | 1699 | 0 | 2220 | 2563 | 86.6% |
|
||||
| ov_SC03_094 | 2211 | 1699 | 0 | 2217 | 2577 | 86.0% |
|
||||
| ov_SC03_095 | 2201 | 1699 | 0 | 2204 | 2474 | 89.1% |
|
||||
| ov_SC03_096 | 2201 | 1699 | 0 | 2204 | 2465 | 89.4% |
|
||||
| ov_SC03_097 | 2230 | 1699 | 0 | 2237 | 2603 | 85.9% |
|
||||
| ov_SC03_098 | 2209 | 1699 | 0 | 2212 | 2541 | 87.1% |
|
||||
| ov_SC03_099 | 2202 | 1699 | 0 | 2205 | 2504 | 88.1% |
|
||||
| ov_SC03_100 | 2212 | 1699 | 0 | 2216 | 2539 | 87.3% |
|
||||
| ov_SC03_101 | 2212 | 1699 | 0 | 2216 | 2528 | 87.7% |
|
||||
| ov_SC03_102 | 2204 | 1699 | 0 | 2207 | 2492 | 88.6% |
|
||||
| ov_SC03_103 | 2207 | 1701 | 0 | 2210 | 2510 | 88.0% |
|
||||
| ov_SC03_104 | 2232 | 1699 | 0 | 2239 | 2616 | 85.6% |
|
||||
| ov_SC03_105 | 2226 | 1699 | 0 | 2233 | 2597 | 86.0% |
|
||||
| ov_SC03_108 | 2194 | 1699 | 0 | 2194 | 2443 | 89.8% |
|
||||
| ov_SC03_109 | 2195 | 1699 | 0 | 2197 | 2424 | 90.6% |
|
||||
| ov_SC03_110 | 2200 | 1699 | 0 | 2200 | 2468 | 89.1% |
|
||||
| ov_SC03_111 | 2212 | 1699 | 0 | 2215 | 2510 | 88.2% |
|
||||
| ov_SC03_112 | 2205 | 1701 | 0 | 2207 | 2526 | 87.4% |
|
||||
| ov_SC03_113 | 2198 | 1701 | 0 | 2201 | 2468 | 89.2% |
|
||||
| ov_SC03_114 | 2188 | 1699 | 0 | 2190 | 2415 | 90.7% |
|
||||
| ov_SC03_115 | 2205 | 1699 | 0 | 2207 | 2472 | 89.3% |
|
||||
| ov_SC03_116 | 2195 | 1699 | 0 | 2198 | 2438 | 90.2% |
|
||||
| ov_SC03_117 | 2223 | 1699 | 0 | 2229 | 2557 | 87.2% |
|
||||
| ov_SC03_118 | 2270 | 1723 | 0 | 2271 | 2685 | 84.6% |
|
||||
| ov_SC03_119 | 2268 | 1723 | 0 | 2269 | 2685 | 84.5% |
|
||||
| ov_SC03_121 | 2202 | 1699 | 0 | 2205 | 2459 | 89.7% |
|
||||
| ov_SC03_124 | 2282 | 1695 | 0 | 2302 | 2741 | 84.0% |
|
||||
| ov_SC03_125 | 2239 | 1699 | 0 | 2251 | 2588 | 87.0% |
|
||||
| ov_SC03_126 | 2201 | 1701 | 0 | 2201 | 2423 | 90.8% |
|
||||
| ov_SC04_000 | 2217 | 1703 | 0 | 2226 | 2546 | 87.4% |
|
||||
| ov_SC04_002 | 2233 | 1699 | 0 | 2237 | 2636 | 84.9% |
|
||||
| ov_SC04_003 | 2211 | 1699 | 0 | 2215 | 2502 | 88.5% |
|
||||
| ov_SC04_004 | 2220 | 1699 | 0 | 2222 | 2558 | 86.9% |
|
||||
| ov_SC04_005 | 2228 | 1699 | 0 | 2234 | 2612 | 85.5% |
|
||||
| ov_SC04_006 | 2201 | 1699 | 0 | 2203 | 2454 | 89.8% |
|
||||
| ov_SC04_007 | 2221 | 1699 | 0 | 2225 | 2569 | 86.6% |
|
||||
| ov_SC04_008 | 2191 | 1699 | 0 | 2191 | 2415 | 90.7% |
|
||||
| ov_SC04_009 | 2207 | 1699 | 0 | 2210 | 2441 | 90.5% |
|
||||
| ov_SC04_010 | 2198 | 1699 | 0 | 2199 | 2419 | 90.9% |
|
||||
| ov_SC04_011 | 2254 | 1699 | 0 | 2260 | 2803 | 80.6% |
|
||||
| ov_SC04_012 | 2194 | 1699 | 0 | 2195 | 2420 | 90.7% |
|
||||
| ov_SC04_015 | 2258 | 1700 | 0 | 2269 | 2611 | 86.9% |
|
||||
| ov_SC04_016 | 2197 | 1699 | 0 | 2199 | 2440 | 90.1% |
|
||||
| ov_SC04_018 | 2309 | 1734 | 0 | 2309 | 2857 | 80.8% |
|
||||
| ov_SC04_019 | 2314 | 1734 | 0 | 2314 | 2857 | 81.0% |
|
||||
| ov_SC04_020 | 2226 | 1699 | 0 | 2238 | 2567 | 87.2% |
|
||||
| ov_SC04_021 | 2202 | 1701 | 0 | 2202 | 2423 | 90.9% |
|
||||
| ov_SC05_000 | 2198 | 1703 | 0 | 2201 | 2422 | 90.9% |
|
||||
| ov_SC05_001 | 2221 | 1699 | 0 | 2226 | 2574 | 86.5% |
|
||||
| ov_SC05_002 | 2203 | 1699 | 0 | 2206 | 2442 | 90.3% |
|
||||
| ov_SC05_003 | 2200 | 1699 | 0 | 2201 | 2481 | 88.7% |
|
||||
| ov_SC05_004 | 2195 | 1699 | 0 | 2197 | 2464 | 89.2% |
|
||||
| ov_SC05_005 | 2202 | 1699 | 0 | 2203 | 2491 | 88.4% |
|
||||
| ov_SC05_006 | 2194 | 1699 | 0 | 2194 | 2430 | 90.3% |
|
||||
| ov_SC05_007 | 2204 | 1699 | 0 | 2209 | 2482 | 89.0% |
|
||||
| ov_SC05_008 | 2221 | 1699 | 0 | 2223 | 2543 | 87.4% |
|
||||
| ov_SC05_009 | 2199 | 1699 | 0 | 2203 | 2438 | 90.4% |
|
||||
| ov_SC05_010 | 2225 | 1699 | 0 | 2229 | 2588 | 86.1% |
|
||||
| ov_SC05_011 | 2197 | 1699 | 0 | 2198 | 2409 | 91.2% |
|
||||
| ov_SC05_017 | 2305 | 1696 | 0 | 2316 | 2842 | 81.5% |
|
||||
| ov_SC05_018 | 2252 | 1699 | 0 | 2265 | 2673 | 84.7% |
|
||||
| ov_SC05_019 | 2202 | 1701 | 0 | 2202 | 2423 | 90.9% |
|
||||
| ov_SC06_000 | 2262 | 1708 | 0 | 2265 | 2691 | 84.2% |
|
||||
| ov_SC06_006 | 2217 | 1699 | 0 | 2218 | 2511 | 88.3% |
|
||||
| ov_SC06_008 | 2227 | 1701 | 0 | 2233 | 2542 | 87.8% |
|
||||
| ov_SC06_010 | 2211 | 1699 | 0 | 2216 | 2517 | 88.0% |
|
||||
| ov_SC06_011 | 2206 | 1699 | 0 | 2210 | 2468 | 89.5% |
|
||||
| ov_SC06_013 | 2199 | 1699 | 0 | 2200 | 2425 | 90.7% |
|
||||
| ov_SC06_014 | 2205 | 1699 | 0 | 2207 | 2453 | 90.0% |
|
||||
| ov_SC06_015 | 2202 | 1699 | 0 | 2202 | 2421 | 91.0% |
|
||||
| ov_SC06_016 | 2219 | 1699 | 0 | 2221 | 2549 | 87.1% |
|
||||
| ov_SC06_018 | 2216 | 1702 | 0 | 2223 | 2665 | 83.4% |
|
||||
| ov_SC06_020 | 2209 | 1701 | 0 | 2210 | 2518 | 87.8% |
|
||||
| ov_SC06_022 | 2223 | 1699 | 0 | 2231 | 2642 | 84.4% |
|
||||
| ov_SC06_024 | 2228 | 1699 | 0 | 2234 | 2667 | 83.8% |
|
||||
| ov_SC06_025 | 2220 | 1699 | 0 | 2225 | 2572 | 86.5% |
|
||||
| ov_SC06_027 | 2188 | 1699 | 0 | 2189 | 2408 | 90.9% |
|
||||
| ov_SC06_029 | 2246 | 1699 | 0 | 2258 | 2662 | 84.8% |
|
||||
| ov_SC06_030 | 2201 | 1699 | 0 | 2201 | 2456 | 89.6% |
|
||||
| ov_SC06_032 | 2213 | 1700 | 0 | 2220 | 2658 | 83.5% |
|
||||
| ov_SC06_033 | 2216 | 1700 | 0 | 2223 | 2631 | 84.5% |
|
||||
| ov_SC07_000 | 2216 | 1703 | 0 | 2218 | 2521 | 88.0% |
|
||||
| ov_SC07_001 | 2201 | 1699 | 0 | 2203 | 2454 | 89.8% |
|
||||
| ov_SC07_002 | 2228 | 1699 | 0 | 2232 | 2579 | 86.5% |
|
||||
| ov_SC07_006 | 1971 | 1547 | 0 | 2051 | 2456 | 83.5% |
|
||||
| ov_SC07_007 | 1988 | 1548 | 0 | 2072 | 2614 | 79.3% |
|
||||
| ov_SC07_008 | 2185 | 1699 | 0 | 2185 | 2386 | 91.6% |
|
||||
| ov_SC07_009 | 2195 | 1699 | 0 | 2197 | 2430 | 90.4% |
|
||||
| ov_SC07_010 | 2001 | 1548 | 0 | 2084 | 2526 | 82.5% |
|
||||
| ov_SC07_011 | 1987 | 1547 | 0 | 2067 | 2450 | 84.4% |
|
||||
|
||||
@@ -482,3 +482,26 @@ conditional) · main-EXE/B9 + GLM/B6 + resident's 14 walls (P30) · behemoths B7
|
||||
> (the DISTINCT void*-def-sig + per-sibling caller-thread class — NOT the self-decl pass), the SC07 span-composition
|
||||
> tails (§8e-2), and the permuter/Fable close-1..N backlog (Task 6). The decl-normalize pass is now a standing
|
||||
> `family_sweep` stage for any future family whose members' own callers declare F divergently.
|
||||
|
||||
- **✅ 2026-07-18 — BROAD SWEEP (honest yield +137) + func_8013D53C (14/137) + NSD HARDENED (2 bug-fixes).**
|
||||
After the SESSION-3 checkpoint: ran the broad substantial-family sweep, then attacked func_8013D53C. All findings
|
||||
→ cookbook **§57a**. **(1) The substantial-family frontier is NOT broadly mechanical (R14/R35):** 60 families /
|
||||
2,169 stubbed members STAGE but only **137 bank** with --fix-def-sig — staging ≠ banking; I over-projected ~1,500
|
||||
from the staged count instead of gate-probing a sample (the phase's own invariant, violated). Banked func_801502EC
|
||||
×134 + func_80131B14 ×3 (commit `commit:0714`). **(2) NSD is SURGICAL-ONLY:** broad `--normalize-self-decls` (esp.
|
||||
combined with `--fix-def-sig`, which changes NSD's reference sig) makes byte-neutral-but-wrong TU edits that poison
|
||||
whole (overlay,split) groups — the backstop reverts them (0 false banks) but banked **7** / reverted **752**.
|
||||
`--fix-def-sig` edits DRAFTS (bisect-safe per member) so it IS broad-safe. Law: NSD per-family, --fix-def-sig broad.
|
||||
**(3) NSD HARDENED — 2 real bug-fixes (validated on D53C):** rewrite-to-canonical instead of DROP (dropping broke
|
||||
def-AFTER-caller forward visibility → `func undeclared`); and `(void)` is a genuine 0-param conflict, NOT skippable
|
||||
like a true no-proto `()` (the bug that filed D53C's arity class as "not this pass"). **(4) func_8013D53C =
|
||||
PARTLY-mechanical:** NSD + a byte-neutral `Cmd_8013D53C` type-lift clear its plumbing → **14/137 bank** (the h_seq
|
||||
members whose bodies template); **123** carry genuine per-member codegen DIFFs (the hard cse.c-wall crack does not
|
||||
fully template → permuter/Fable fuel). Reverted the 123 bankless NSD edits (byte-neutral but churn on matched code
|
||||
— §57a NB). R22 clean-fleet **140/140**; tools-health OK (dedup 1846/0, C1 234205/234205); 0 NON_MATCHING (G4).
|
||||
Fleet **75.2% instr · 60.6% distinct · 87.04% fn-count**. **SESSION-TOTAL from 74.6/59.4/86.92: +0.6pp instr,
|
||||
+1.2pp distinct, ~+421 members** across 4 commits (commit:0711, commit:0712, commit:0714, + this).
|
||||
**REFRAME (the session's strategic finding):** the family campaign is **per-family cracking, not one broad sweep** —
|
||||
each substantial family carries its own blocker (self-decl / type-lift / def-sig+caller / genuine codegen), and the
|
||||
mechanical fraction is small (~137 broad + 14 D53C). Remaining Task-4/6 levers: the permuter backlog (551 close-1..4
|
||||
drafts, high-reach) + per-family type-lift/crack of the ~50 remaining substantial families + the tiny/mid bands.
|
||||
|
||||
@@ -493,15 +493,6 @@ void func_8013D3D4(int param_1, int param_2)
|
||||
|
||||
typedef struct { u8 b[9]; } S9; /* 9-byte, align-1 -> unaligned block copy */
|
||||
|
||||
typedef struct {
|
||||
u16 cmd; /* 0x0 */
|
||||
u16 pad2; /* 0x2 */
|
||||
u16 pad4; /* 0x4 */
|
||||
u16 pad6; /* 0x6 */
|
||||
s16 w; /* 0x8 */
|
||||
s16 h; /* 0xA */
|
||||
u16 *data; /* 0xC */
|
||||
} Cmd; /* 0x10 */
|
||||
|
||||
extern s32 D_801D95A0;
|
||||
extern u8 D_80078EAF;
|
||||
@@ -530,7 +521,7 @@ extern s32 D_801D95A8;
|
||||
extern void *D_801D9578;
|
||||
|
||||
void func_8013D53C(void *arg0v) {
|
||||
Cmd *arg0 = arg0v;
|
||||
Cmd_8013D53C *arg0 = arg0v;
|
||||
|
||||
extern u8 D_80187488[];
|
||||
extern u8 D_8018748C[];
|
||||
@@ -583,7 +574,7 @@ void func_8013D53C(void *arg0v) {
|
||||
t8v = p[2];
|
||||
}
|
||||
|
||||
(*(Cmd * *)&D_801D957C) = arg0;
|
||||
(*(Cmd_8013D53C * *)&D_801D957C) = arg0;
|
||||
if (arg0 != 0) {
|
||||
if (D_801D95A8 != 0) {
|
||||
s32 *p = (s32 *)(D_801D9588 * 12 + (s32) (*(s32 * *)&D_801D9578));
|
||||
|
||||
@@ -1933,7 +1933,7 @@ extern u8 D_8018DDA0[];
|
||||
extern u8 D_8018DE20[];
|
||||
extern u8 D_8018DCF8[];
|
||||
|
||||
extern void func_8013D53C(void);
|
||||
extern void func_8013D53C(void *arg0v);
|
||||
extern void func_8013DD68(void);
|
||||
extern void func_8013D8FC(void);
|
||||
extern void func_8013CF68(void);
|
||||
@@ -1954,7 +1954,7 @@ void func_8013D3D4(int param_1, int param_2)
|
||||
D_801ED434 = D_8018DE20;
|
||||
D_801ED438 = D_8018DCF8;
|
||||
}
|
||||
func_8013D53C();
|
||||
((void (*)(void))func_8013D53C)();
|
||||
if ((param_2 & 1) != 0) {
|
||||
if (D_801ED468 != 0) {
|
||||
func_8013DD68();
|
||||
@@ -1978,7 +1978,138 @@ void func_8013D3D4(int param_1, int param_2)
|
||||
}
|
||||
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_801380E0", func_8013D53C);
|
||||
|
||||
typedef struct { u8 b[9]; } S9; /* 9-byte, align-1 -> unaligned block copy */
|
||||
|
||||
|
||||
extern s32 D_801ED460;
|
||||
extern s32 D_801ED448;
|
||||
|
||||
|
||||
extern u8 D_801EF3F2;
|
||||
extern u8 D_801EF466;
|
||||
extern u8 D_801EF2F2;
|
||||
extern u8 D_801EF3BC;
|
||||
extern u8 D_801EF2C8;
|
||||
extern u8 D_801EF2F1;
|
||||
|
||||
|
||||
extern s32 D_801EF3C0;
|
||||
extern s32 D_801ED45C;
|
||||
extern s32 D_801ED458;
|
||||
extern s32 D_801ED440;
|
||||
extern s32 D_801ED44C;
|
||||
extern s32 D_801ED450;
|
||||
|
||||
extern void *D_801ED430;
|
||||
extern s32 D_801ED468;
|
||||
extern void *D_801ED438;
|
||||
|
||||
void func_8013D53C(void *arg0v) {
|
||||
|
||||
extern Rec9 D_8018DE3C[];
|
||||
extern Rec12 D_8018DE74[];
|
||||
extern u8 D_80078EAF;
|
||||
extern u8 D_801EF398;
|
||||
extern s32 D_801ED454;
|
||||
Cmd_8013D53C *arg0 = arg0v;
|
||||
|
||||
extern u8 D_8018DE78[];
|
||||
extern u8 D_8018DE7C[];
|
||||
extern unsigned char D_801EF2E8;
|
||||
extern s16 *D_801ED43C;
|
||||
extern s32 D_801ED46C;
|
||||
extern s32 D_801ED470;
|
||||
extern s32 D_801ED474;
|
||||
s32 s0v;
|
||||
s32 t9v;
|
||||
s32 t8v;
|
||||
u8 b0, b1, b2;
|
||||
u8 pad[8]; /* dead BLKmode local: frame 0x10 -> 0x18, zero code */
|
||||
|
||||
if (!(D_801ED460 & 1)) {
|
||||
D_801ED448 = 1;
|
||||
} else {
|
||||
D_801ED448 = D_80078EAF;
|
||||
}
|
||||
|
||||
b0 = ((u8 *)D_8018DE74)[D_801ED448 * 12];
|
||||
D_801EF3F2 = b0;
|
||||
D_801EF466 = b0;
|
||||
b1 = D_8018DE78[D_801ED448 * 12];
|
||||
D_801EF2F2 = b1;
|
||||
D_801EF3BC = b1;
|
||||
b2 = D_8018DE7C[D_801ED448 * 12];
|
||||
D_801EF2C8 = b2;
|
||||
D_801EF2F1 = b2;
|
||||
|
||||
(*(S9 *)&D_801EF2E8) = ((S9 *)D_8018DE3C)[D_801ED448];
|
||||
(*(S9 *)&D_801EF398) = *(S9 *)(&D_801EF2C8 + 0x20); /* same addr as (*(S9 *)&D_801EF2E8); distinct sym defeats cse, keeps %hi/%lo */
|
||||
|
||||
D_801EF3C0 = 1;
|
||||
D_801ED45C = -1;
|
||||
D_801ED458 = 0;
|
||||
D_801ED454 = -1;
|
||||
D_801ED440 = 0;
|
||||
D_801ED44C = 0;
|
||||
D_801ED450 = 0;
|
||||
|
||||
if ((D_801ED460 & 2) && (D_801ED448 == 4)) {
|
||||
s0v = (*(s32 * *)&D_801ED430)[18];
|
||||
t9v = (*(s32 * *)&D_801ED430)[19];
|
||||
t8v = (*(s32 * *)&D_801ED430)[20];
|
||||
} else {
|
||||
s32 *p = (s32 *)(D_801ED448 * 12 + (s32) (*(s32 * *)&D_801ED430)); /* block-local: local-alloc ties sum into mul chain */
|
||||
s0v = p[0];
|
||||
t9v = p[1];
|
||||
t8v = p[2];
|
||||
}
|
||||
|
||||
(*(Cmd_8013D53C * *)&D_801ED43C) = arg0;
|
||||
if (arg0 != 0) {
|
||||
if (D_801ED468 != 0) {
|
||||
s32 *p = (s32 *)(D_801ED448 * 12 + (s32) (*(s32 * *)&D_801ED438));
|
||||
D_801ED46C = p[0];
|
||||
D_801ED470 = p[1];
|
||||
D_801ED474 = p[2];
|
||||
} else {
|
||||
while ((arg0->cmd & 0xFFFF) != 0xFF) {
|
||||
if ((arg0->cmd & 0xFFFF) == 9) {
|
||||
s32 n;
|
||||
s32 i;
|
||||
u16 *src;
|
||||
u16 *dst;
|
||||
n = arg0->w * arg0->h;
|
||||
i = 0;
|
||||
src = arg0->data;
|
||||
__asm__("" :: "r"(src)); /* +2 refs on src (depth-2): keeps src above i, below the mfhi temp */
|
||||
dst = src + n;
|
||||
if (n > 0) {
|
||||
do {
|
||||
u16 px;
|
||||
s32 r, g, b, out;
|
||||
__asm__("" :: "r"(i)); /* +3 refs on i (depth-3): lifts i over dst in the $t2 race */
|
||||
px = *src;
|
||||
r = ((px & 0x1F) * s0v) / 2560;
|
||||
g = (((px & 0x3E0) * t9v) / 2560) & 0x3E0;
|
||||
b = (((px & 0x7C00) * t8v) / 2560) & 0x7C00;
|
||||
out = r | g | b | (px & 0x8000);
|
||||
if (out == 0 && px != 0) {
|
||||
out = 0x8000;
|
||||
}
|
||||
*dst = out;
|
||||
dst++;
|
||||
i++;
|
||||
src++;
|
||||
} while (i < n);
|
||||
}
|
||||
}
|
||||
arg0++;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC03_001/nonmatchings/ov_SC03_001_jr_801380E0", func_8013D8FC);
|
||||
|
||||
|
||||
@@ -1933,7 +1933,7 @@ extern u8 D_80185D90[];
|
||||
extern u8 D_80185E10[];
|
||||
extern u8 D_80185CE8[];
|
||||
|
||||
extern void func_8013D53C(void);
|
||||
extern void func_8013D53C(void *arg0v);
|
||||
extern void func_8013DD68(void);
|
||||
extern void func_8013D8FC(void);
|
||||
extern void func_8013CF68(void);
|
||||
@@ -1954,7 +1954,7 @@ void func_8013D3D4(int param_1, int param_2)
|
||||
D_801CA4B4 = D_80185E10;
|
||||
D_801CA4B8 = D_80185CE8;
|
||||
}
|
||||
func_8013D53C();
|
||||
((void (*)(void))func_8013D53C)();
|
||||
if ((param_2 & 1) != 0) {
|
||||
if (D_801CA4E8 != 0) {
|
||||
func_8013DD68();
|
||||
@@ -1978,7 +1978,138 @@ void func_8013D3D4(int param_1, int param_2)
|
||||
}
|
||||
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_801380E0", func_8013D53C);
|
||||
|
||||
typedef struct { u8 b[9]; } S9; /* 9-byte, align-1 -> unaligned block copy */
|
||||
|
||||
|
||||
extern s32 D_801CA4E0;
|
||||
extern s32 D_801CA4C8;
|
||||
|
||||
|
||||
extern u8 D_801CBADA;
|
||||
extern u8 D_801CBB4E;
|
||||
extern u8 D_801CB9DA;
|
||||
extern u8 D_801CBAA4;
|
||||
extern u8 D_801CB9B0;
|
||||
extern u8 D_801CB9D9;
|
||||
|
||||
|
||||
extern s32 D_801CBAA8;
|
||||
extern s32 D_801CA4DC;
|
||||
extern s32 D_801CA4D8;
|
||||
extern s32 D_801CA4C0;
|
||||
extern s32 D_801CA4CC;
|
||||
extern s32 D_801CA4D0;
|
||||
|
||||
extern void *D_801CA4B0;
|
||||
extern s32 D_801CA4E8;
|
||||
extern void *D_801CA4B8;
|
||||
|
||||
void func_8013D53C(void *arg0v) {
|
||||
|
||||
extern Rec9 D_80185E2C[];
|
||||
extern Rec12 D_80185E64[];
|
||||
extern u8 D_80078EAF;
|
||||
extern u8 D_801CBA80;
|
||||
extern s32 D_801CA4D4;
|
||||
Cmd_8013D53C *arg0 = arg0v;
|
||||
|
||||
extern u8 D_80185E68[];
|
||||
extern u8 D_80185E6C[];
|
||||
extern unsigned char D_801CB9D0;
|
||||
extern s16 *D_801CA4BC;
|
||||
extern s32 D_801CA4EC;
|
||||
extern s32 D_801CA4F0;
|
||||
extern s32 D_801CA4F4;
|
||||
s32 s0v;
|
||||
s32 t9v;
|
||||
s32 t8v;
|
||||
u8 b0, b1, b2;
|
||||
u8 pad[8]; /* dead BLKmode local: frame 0x10 -> 0x18, zero code */
|
||||
|
||||
if (!(D_801CA4E0 & 1)) {
|
||||
D_801CA4C8 = 1;
|
||||
} else {
|
||||
D_801CA4C8 = D_80078EAF;
|
||||
}
|
||||
|
||||
b0 = ((u8 *)D_80185E64)[D_801CA4C8 * 12];
|
||||
D_801CBADA = b0;
|
||||
D_801CBB4E = b0;
|
||||
b1 = D_80185E68[D_801CA4C8 * 12];
|
||||
D_801CB9DA = b1;
|
||||
D_801CBAA4 = b1;
|
||||
b2 = D_80185E6C[D_801CA4C8 * 12];
|
||||
D_801CB9B0 = b2;
|
||||
D_801CB9D9 = b2;
|
||||
|
||||
(*(S9 *)&D_801CB9D0) = ((S9 *)D_80185E2C)[D_801CA4C8];
|
||||
(*(S9 *)&D_801CBA80) = *(S9 *)(&D_801CB9B0 + 0x20); /* same addr as (*(S9 *)&D_801CB9D0); distinct sym defeats cse, keeps %hi/%lo */
|
||||
|
||||
D_801CBAA8 = 1;
|
||||
D_801CA4DC = -1;
|
||||
D_801CA4D8 = 0;
|
||||
D_801CA4D4 = -1;
|
||||
D_801CA4C0 = 0;
|
||||
D_801CA4CC = 0;
|
||||
D_801CA4D0 = 0;
|
||||
|
||||
if ((D_801CA4E0 & 2) && (D_801CA4C8 == 4)) {
|
||||
s0v = (*(s32 * *)&D_801CA4B0)[18];
|
||||
t9v = (*(s32 * *)&D_801CA4B0)[19];
|
||||
t8v = (*(s32 * *)&D_801CA4B0)[20];
|
||||
} else {
|
||||
s32 *p = (s32 *)(D_801CA4C8 * 12 + (s32) (*(s32 * *)&D_801CA4B0)); /* block-local: local-alloc ties sum into mul chain */
|
||||
s0v = p[0];
|
||||
t9v = p[1];
|
||||
t8v = p[2];
|
||||
}
|
||||
|
||||
(*(Cmd_8013D53C * *)&D_801CA4BC) = arg0;
|
||||
if (arg0 != 0) {
|
||||
if (D_801CA4E8 != 0) {
|
||||
s32 *p = (s32 *)(D_801CA4C8 * 12 + (s32) (*(s32 * *)&D_801CA4B8));
|
||||
D_801CA4EC = p[0];
|
||||
D_801CA4F0 = p[1];
|
||||
D_801CA4F4 = p[2];
|
||||
} else {
|
||||
while ((arg0->cmd & 0xFFFF) != 0xFF) {
|
||||
if ((arg0->cmd & 0xFFFF) == 9) {
|
||||
s32 n;
|
||||
s32 i;
|
||||
u16 *src;
|
||||
u16 *dst;
|
||||
n = arg0->w * arg0->h;
|
||||
i = 0;
|
||||
src = arg0->data;
|
||||
__asm__("" :: "r"(src)); /* +2 refs on src (depth-2): keeps src above i, below the mfhi temp */
|
||||
dst = src + n;
|
||||
if (n > 0) {
|
||||
do {
|
||||
u16 px;
|
||||
s32 r, g, b, out;
|
||||
__asm__("" :: "r"(i)); /* +3 refs on i (depth-3): lifts i over dst in the $t2 race */
|
||||
px = *src;
|
||||
r = ((px & 0x1F) * s0v) / 2560;
|
||||
g = (((px & 0x3E0) * t9v) / 2560) & 0x3E0;
|
||||
b = (((px & 0x7C00) * t8v) / 2560) & 0x7C00;
|
||||
out = r | g | b | (px & 0x8000);
|
||||
if (out == 0 && px != 0) {
|
||||
out = 0x8000;
|
||||
}
|
||||
*dst = out;
|
||||
dst++;
|
||||
i++;
|
||||
src++;
|
||||
} while (i < n);
|
||||
}
|
||||
}
|
||||
arg0++;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC03_002/nonmatchings/ov_SC03_002_jr_801380E0", func_8013D8FC);
|
||||
|
||||
|
||||
@@ -1938,7 +1938,7 @@ extern u8 D_8018ABDC[];
|
||||
extern u8 D_8018AC5C[];
|
||||
extern u8 D_8018AB34[];
|
||||
|
||||
extern void func_8013D53C(void);
|
||||
extern void func_8013D53C(void *arg0v);
|
||||
extern void func_8013DD68(void);
|
||||
extern void func_8013D8FC(void);
|
||||
extern void func_8013CF68(void);
|
||||
@@ -1959,7 +1959,7 @@ void func_8013D3D4(int param_1, int param_2)
|
||||
D_801B83F4 = D_8018AC5C;
|
||||
D_801B83F8 = D_8018AB34;
|
||||
}
|
||||
func_8013D53C();
|
||||
((void (*)(void))func_8013D53C)();
|
||||
if ((param_2 & 1) != 0) {
|
||||
if (D_801B8428 != 0) {
|
||||
func_8013DD68();
|
||||
@@ -1983,7 +1983,138 @@ void func_8013D3D4(int param_1, int param_2)
|
||||
}
|
||||
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_801380E0", func_8013D53C);
|
||||
|
||||
typedef struct { u8 b[9]; } S9; /* 9-byte, align-1 -> unaligned block copy */
|
||||
|
||||
|
||||
extern s32 D_801B8420;
|
||||
extern s32 D_801B8408;
|
||||
|
||||
|
||||
extern u8 D_801BCCAA;
|
||||
extern u8 D_801BCD1E;
|
||||
extern u8 D_801BCBD2;
|
||||
extern u8 D_801BCC8C;
|
||||
extern u8 D_801BCBA8;
|
||||
extern u8 D_801BCBD1;
|
||||
|
||||
|
||||
extern s32 D_801BCC90;
|
||||
extern s32 D_801B841C;
|
||||
extern s32 D_801B8418;
|
||||
extern s32 D_801B8400;
|
||||
extern s32 D_801B840C;
|
||||
extern s32 D_801B8410;
|
||||
|
||||
extern void *D_801B83F0;
|
||||
extern s32 D_801B8428;
|
||||
extern void *D_801B83F8;
|
||||
|
||||
void func_8013D53C(void *arg0v) {
|
||||
|
||||
extern Rec9 D_8018AC78[];
|
||||
extern Rec12 D_8018ACB0[];
|
||||
extern u8 D_80078EAF;
|
||||
extern u8 D_801BCC68;
|
||||
extern s32 D_801B8414;
|
||||
Cmd_8013D53C *arg0 = arg0v;
|
||||
|
||||
extern u8 D_8018ACB4[];
|
||||
extern u8 D_8018ACB8[];
|
||||
extern unsigned char D_801BCBC8;
|
||||
extern s16 *D_801B83FC;
|
||||
extern s32 D_801B842C;
|
||||
extern s32 D_801B8430;
|
||||
extern s32 D_801B8434;
|
||||
s32 s0v;
|
||||
s32 t9v;
|
||||
s32 t8v;
|
||||
u8 b0, b1, b2;
|
||||
u8 pad[8]; /* dead BLKmode local: frame 0x10 -> 0x18, zero code */
|
||||
|
||||
if (!(D_801B8420 & 1)) {
|
||||
D_801B8408 = 1;
|
||||
} else {
|
||||
D_801B8408 = D_80078EAF;
|
||||
}
|
||||
|
||||
b0 = ((u8 *)D_8018ACB0)[D_801B8408 * 12];
|
||||
D_801BCCAA = b0;
|
||||
D_801BCD1E = b0;
|
||||
b1 = D_8018ACB4[D_801B8408 * 12];
|
||||
D_801BCBD2 = b1;
|
||||
D_801BCC8C = b1;
|
||||
b2 = D_8018ACB8[D_801B8408 * 12];
|
||||
D_801BCBA8 = b2;
|
||||
D_801BCBD1 = b2;
|
||||
|
||||
(*(S9 *)&D_801BCBC8) = ((S9 *)D_8018AC78)[D_801B8408];
|
||||
(*(S9 *)&D_801BCC68) = *(S9 *)(&D_801BCBA8 + 0x20); /* same addr as (*(S9 *)&D_801BCBC8); distinct sym defeats cse, keeps %hi/%lo */
|
||||
|
||||
D_801BCC90 = 1;
|
||||
D_801B841C = -1;
|
||||
D_801B8418 = 0;
|
||||
D_801B8414 = -1;
|
||||
D_801B8400 = 0;
|
||||
D_801B840C = 0;
|
||||
D_801B8410 = 0;
|
||||
|
||||
if ((D_801B8420 & 2) && (D_801B8408 == 4)) {
|
||||
s0v = (*(s32 * *)&D_801B83F0)[18];
|
||||
t9v = (*(s32 * *)&D_801B83F0)[19];
|
||||
t8v = (*(s32 * *)&D_801B83F0)[20];
|
||||
} else {
|
||||
s32 *p = (s32 *)(D_801B8408 * 12 + (s32) (*(s32 * *)&D_801B83F0)); /* block-local: local-alloc ties sum into mul chain */
|
||||
s0v = p[0];
|
||||
t9v = p[1];
|
||||
t8v = p[2];
|
||||
}
|
||||
|
||||
(*(Cmd_8013D53C * *)&D_801B83FC) = arg0;
|
||||
if (arg0 != 0) {
|
||||
if (D_801B8428 != 0) {
|
||||
s32 *p = (s32 *)(D_801B8408 * 12 + (s32) (*(s32 * *)&D_801B83F8));
|
||||
D_801B842C = p[0];
|
||||
D_801B8430 = p[1];
|
||||
D_801B8434 = p[2];
|
||||
} else {
|
||||
while ((arg0->cmd & 0xFFFF) != 0xFF) {
|
||||
if ((arg0->cmd & 0xFFFF) == 9) {
|
||||
s32 n;
|
||||
s32 i;
|
||||
u16 *src;
|
||||
u16 *dst;
|
||||
n = arg0->w * arg0->h;
|
||||
i = 0;
|
||||
src = arg0->data;
|
||||
__asm__("" :: "r"(src)); /* +2 refs on src (depth-2): keeps src above i, below the mfhi temp */
|
||||
dst = src + n;
|
||||
if (n > 0) {
|
||||
do {
|
||||
u16 px;
|
||||
s32 r, g, b, out;
|
||||
__asm__("" :: "r"(i)); /* +3 refs on i (depth-3): lifts i over dst in the $t2 race */
|
||||
px = *src;
|
||||
r = ((px & 0x1F) * s0v) / 2560;
|
||||
g = (((px & 0x3E0) * t9v) / 2560) & 0x3E0;
|
||||
b = (((px & 0x7C00) * t8v) / 2560) & 0x7C00;
|
||||
out = r | g | b | (px & 0x8000);
|
||||
if (out == 0 && px != 0) {
|
||||
out = 0x8000;
|
||||
}
|
||||
*dst = out;
|
||||
dst++;
|
||||
i++;
|
||||
src++;
|
||||
} while (i < n);
|
||||
}
|
||||
}
|
||||
arg0++;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC03_105/nonmatchings/ov_SC03_105_jr_801380E0", func_8013D8FC);
|
||||
|
||||
|
||||
@@ -1938,7 +1938,7 @@ extern u8 D_8018B444[];
|
||||
extern u8 D_8018B4C4[];
|
||||
extern u8 D_8018B39C[];
|
||||
|
||||
extern void func_8013D53C(void);
|
||||
extern void func_8013D53C(void *arg0v);
|
||||
extern void func_8013DD68(void);
|
||||
extern void func_8013D8FC(void);
|
||||
extern void func_8013CF68(void);
|
||||
@@ -1959,7 +1959,7 @@ void func_8013D3D4(int param_1, int param_2)
|
||||
D_801E05AC = D_8018B4C4;
|
||||
D_801E05B0 = D_8018B39C;
|
||||
}
|
||||
func_8013D53C();
|
||||
((void (*)(void))func_8013D53C)();
|
||||
if ((param_2 & 1) != 0) {
|
||||
if (D_801E05E0 != 0) {
|
||||
func_8013DD68();
|
||||
@@ -1983,7 +1983,138 @@ void func_8013D3D4(int param_1, int param_2)
|
||||
}
|
||||
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_801380E0", func_8013D53C);
|
||||
|
||||
typedef struct { u8 b[9]; } S9; /* 9-byte, align-1 -> unaligned block copy */
|
||||
|
||||
|
||||
extern s32 D_801E05D8;
|
||||
extern s32 D_801E05C0;
|
||||
|
||||
|
||||
extern u8 D_801E2572;
|
||||
extern u8 D_801E25E6;
|
||||
extern u8 D_801E2472;
|
||||
extern u8 D_801E253C;
|
||||
extern u8 D_801E2448;
|
||||
extern u8 D_801E2471;
|
||||
|
||||
|
||||
extern s32 D_801E2540;
|
||||
extern s32 D_801E05D4;
|
||||
extern s32 D_801E05D0;
|
||||
extern s32 D_801E05B8;
|
||||
extern s32 D_801E05C4;
|
||||
extern s32 D_801E05C8;
|
||||
|
||||
extern void *D_801E05A8;
|
||||
extern s32 D_801E05E0;
|
||||
extern void *D_801E05B0;
|
||||
|
||||
void func_8013D53C(void *arg0v) {
|
||||
|
||||
extern Rec9 D_8018B4E0[];
|
||||
extern Rec12 D_8018B518[];
|
||||
extern u8 D_80078EAF;
|
||||
extern u8 D_801E2518;
|
||||
extern s32 D_801E05CC;
|
||||
Cmd_8013D53C *arg0 = arg0v;
|
||||
|
||||
extern u8 D_8018B51C[];
|
||||
extern u8 D_8018B520[];
|
||||
extern unsigned char D_801E2468;
|
||||
extern s16 *D_801E05B4;
|
||||
extern s32 D_801E05E4;
|
||||
extern s32 D_801E05E8;
|
||||
extern s32 D_801E05EC;
|
||||
s32 s0v;
|
||||
s32 t9v;
|
||||
s32 t8v;
|
||||
u8 b0, b1, b2;
|
||||
u8 pad[8]; /* dead BLKmode local: frame 0x10 -> 0x18, zero code */
|
||||
|
||||
if (!(D_801E05D8 & 1)) {
|
||||
D_801E05C0 = 1;
|
||||
} else {
|
||||
D_801E05C0 = D_80078EAF;
|
||||
}
|
||||
|
||||
b0 = ((u8 *)D_8018B518)[D_801E05C0 * 12];
|
||||
D_801E2572 = b0;
|
||||
D_801E25E6 = b0;
|
||||
b1 = D_8018B51C[D_801E05C0 * 12];
|
||||
D_801E2472 = b1;
|
||||
D_801E253C = b1;
|
||||
b2 = D_8018B520[D_801E05C0 * 12];
|
||||
D_801E2448 = b2;
|
||||
D_801E2471 = b2;
|
||||
|
||||
(*(S9 *)&D_801E2468) = ((S9 *)D_8018B4E0)[D_801E05C0];
|
||||
(*(S9 *)&D_801E2518) = *(S9 *)(&D_801E2448 + 0x20); /* same addr as (*(S9 *)&D_801E2468); distinct sym defeats cse, keeps %hi/%lo */
|
||||
|
||||
D_801E2540 = 1;
|
||||
D_801E05D4 = -1;
|
||||
D_801E05D0 = 0;
|
||||
D_801E05CC = -1;
|
||||
D_801E05B8 = 0;
|
||||
D_801E05C4 = 0;
|
||||
D_801E05C8 = 0;
|
||||
|
||||
if ((D_801E05D8 & 2) && (D_801E05C0 == 4)) {
|
||||
s0v = (*(s32 * *)&D_801E05A8)[18];
|
||||
t9v = (*(s32 * *)&D_801E05A8)[19];
|
||||
t8v = (*(s32 * *)&D_801E05A8)[20];
|
||||
} else {
|
||||
s32 *p = (s32 *)(D_801E05C0 * 12 + (s32) (*(s32 * *)&D_801E05A8)); /* block-local: local-alloc ties sum into mul chain */
|
||||
s0v = p[0];
|
||||
t9v = p[1];
|
||||
t8v = p[2];
|
||||
}
|
||||
|
||||
(*(Cmd_8013D53C * *)&D_801E05B4) = arg0;
|
||||
if (arg0 != 0) {
|
||||
if (D_801E05E0 != 0) {
|
||||
s32 *p = (s32 *)(D_801E05C0 * 12 + (s32) (*(s32 * *)&D_801E05B0));
|
||||
D_801E05E4 = p[0];
|
||||
D_801E05E8 = p[1];
|
||||
D_801E05EC = p[2];
|
||||
} else {
|
||||
while ((arg0->cmd & 0xFFFF) != 0xFF) {
|
||||
if ((arg0->cmd & 0xFFFF) == 9) {
|
||||
s32 n;
|
||||
s32 i;
|
||||
u16 *src;
|
||||
u16 *dst;
|
||||
n = arg0->w * arg0->h;
|
||||
i = 0;
|
||||
src = arg0->data;
|
||||
__asm__("" :: "r"(src)); /* +2 refs on src (depth-2): keeps src above i, below the mfhi temp */
|
||||
dst = src + n;
|
||||
if (n > 0) {
|
||||
do {
|
||||
u16 px;
|
||||
s32 r, g, b, out;
|
||||
__asm__("" :: "r"(i)); /* +3 refs on i (depth-3): lifts i over dst in the $t2 race */
|
||||
px = *src;
|
||||
r = ((px & 0x1F) * s0v) / 2560;
|
||||
g = (((px & 0x3E0) * t9v) / 2560) & 0x3E0;
|
||||
b = (((px & 0x7C00) * t8v) / 2560) & 0x7C00;
|
||||
out = r | g | b | (px & 0x8000);
|
||||
if (out == 0 && px != 0) {
|
||||
out = 0x8000;
|
||||
}
|
||||
*dst = out;
|
||||
dst++;
|
||||
i++;
|
||||
src++;
|
||||
} while (i < n);
|
||||
}
|
||||
}
|
||||
arg0++;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC03_124/nonmatchings/ov_SC03_124_jr_801380E0", func_8013D8FC);
|
||||
|
||||
|
||||
@@ -1938,7 +1938,7 @@ extern u8 D_80184614[];
|
||||
extern u8 D_80184694[];
|
||||
extern u8 D_8018456C[];
|
||||
|
||||
extern void func_8013D53C(void);
|
||||
extern void func_8013D53C(void *arg0v);
|
||||
extern void func_8013DD68(void);
|
||||
extern void func_8013D8FC(void);
|
||||
extern void func_8013CF68(void);
|
||||
@@ -1959,7 +1959,7 @@ void func_8013D3D4(int param_1, int param_2)
|
||||
D_801C2EA4 = D_80184694;
|
||||
D_801C2EA8 = D_8018456C;
|
||||
}
|
||||
func_8013D53C();
|
||||
((void (*)(void))func_8013D53C)();
|
||||
if ((param_2 & 1) != 0) {
|
||||
if (D_801C2ED8 != 0) {
|
||||
func_8013DD68();
|
||||
@@ -1983,7 +1983,138 @@ void func_8013D3D4(int param_1, int param_2)
|
||||
}
|
||||
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_801380E0", func_8013D53C);
|
||||
|
||||
typedef struct { u8 b[9]; } S9; /* 9-byte, align-1 -> unaligned block copy */
|
||||
|
||||
|
||||
extern s32 D_801C2ED0;
|
||||
extern s32 D_801C2EB8;
|
||||
|
||||
|
||||
extern u8 D_801C44CA;
|
||||
extern u8 D_801C453E;
|
||||
extern u8 D_801C43CA;
|
||||
extern u8 D_801C4494;
|
||||
extern u8 D_801C43A0;
|
||||
extern u8 D_801C43C9;
|
||||
|
||||
|
||||
extern s32 D_801C4498;
|
||||
extern s32 D_801C2ECC;
|
||||
extern s32 D_801C2EC8;
|
||||
extern s32 D_801C2EB0;
|
||||
extern s32 D_801C2EBC;
|
||||
extern s32 D_801C2EC0;
|
||||
|
||||
extern void *D_801C2EA0;
|
||||
extern s32 D_801C2ED8;
|
||||
extern void *D_801C2EA8;
|
||||
|
||||
void func_8013D53C(void *arg0v) {
|
||||
|
||||
extern Rec9 D_801846B0[];
|
||||
extern Rec12 D_801846E8[];
|
||||
extern u8 D_80078EAF;
|
||||
extern u8 D_801C4470;
|
||||
extern s32 D_801C2EC4;
|
||||
Cmd_8013D53C *arg0 = arg0v;
|
||||
|
||||
extern u8 D_801846EC[];
|
||||
extern u8 D_801846F0[];
|
||||
extern unsigned char D_801C43C0;
|
||||
extern s16 *D_801C2EAC;
|
||||
extern s32 D_801C2EDC;
|
||||
extern s32 D_801C2EE0;
|
||||
extern s32 D_801C2EE4;
|
||||
s32 s0v;
|
||||
s32 t9v;
|
||||
s32 t8v;
|
||||
u8 b0, b1, b2;
|
||||
u8 pad[8]; /* dead BLKmode local: frame 0x10 -> 0x18, zero code */
|
||||
|
||||
if (!(D_801C2ED0 & 1)) {
|
||||
D_801C2EB8 = 1;
|
||||
} else {
|
||||
D_801C2EB8 = D_80078EAF;
|
||||
}
|
||||
|
||||
b0 = ((u8 *)D_801846E8)[D_801C2EB8 * 12];
|
||||
D_801C44CA = b0;
|
||||
D_801C453E = b0;
|
||||
b1 = D_801846EC[D_801C2EB8 * 12];
|
||||
D_801C43CA = b1;
|
||||
D_801C4494 = b1;
|
||||
b2 = D_801846F0[D_801C2EB8 * 12];
|
||||
D_801C43A0 = b2;
|
||||
D_801C43C9 = b2;
|
||||
|
||||
(*(S9 *)&D_801C43C0) = ((S9 *)D_801846B0)[D_801C2EB8];
|
||||
(*(S9 *)&D_801C4470) = *(S9 *)(&D_801C43A0 + 0x20); /* same addr as (*(S9 *)&D_801C43C0); distinct sym defeats cse, keeps %hi/%lo */
|
||||
|
||||
D_801C4498 = 1;
|
||||
D_801C2ECC = -1;
|
||||
D_801C2EC8 = 0;
|
||||
D_801C2EC4 = -1;
|
||||
D_801C2EB0 = 0;
|
||||
D_801C2EBC = 0;
|
||||
D_801C2EC0 = 0;
|
||||
|
||||
if ((D_801C2ED0 & 2) && (D_801C2EB8 == 4)) {
|
||||
s0v = (*(s32 * *)&D_801C2EA0)[18];
|
||||
t9v = (*(s32 * *)&D_801C2EA0)[19];
|
||||
t8v = (*(s32 * *)&D_801C2EA0)[20];
|
||||
} else {
|
||||
s32 *p = (s32 *)(D_801C2EB8 * 12 + (s32) (*(s32 * *)&D_801C2EA0)); /* block-local: local-alloc ties sum into mul chain */
|
||||
s0v = p[0];
|
||||
t9v = p[1];
|
||||
t8v = p[2];
|
||||
}
|
||||
|
||||
(*(Cmd_8013D53C * *)&D_801C2EAC) = arg0;
|
||||
if (arg0 != 0) {
|
||||
if (D_801C2ED8 != 0) {
|
||||
s32 *p = (s32 *)(D_801C2EB8 * 12 + (s32) (*(s32 * *)&D_801C2EA8));
|
||||
D_801C2EDC = p[0];
|
||||
D_801C2EE0 = p[1];
|
||||
D_801C2EE4 = p[2];
|
||||
} else {
|
||||
while ((arg0->cmd & 0xFFFF) != 0xFF) {
|
||||
if ((arg0->cmd & 0xFFFF) == 9) {
|
||||
s32 n;
|
||||
s32 i;
|
||||
u16 *src;
|
||||
u16 *dst;
|
||||
n = arg0->w * arg0->h;
|
||||
i = 0;
|
||||
src = arg0->data;
|
||||
__asm__("" :: "r"(src)); /* +2 refs on src (depth-2): keeps src above i, below the mfhi temp */
|
||||
dst = src + n;
|
||||
if (n > 0) {
|
||||
do {
|
||||
u16 px;
|
||||
s32 r, g, b, out;
|
||||
__asm__("" :: "r"(i)); /* +3 refs on i (depth-3): lifts i over dst in the $t2 race */
|
||||
px = *src;
|
||||
r = ((px & 0x1F) * s0v) / 2560;
|
||||
g = (((px & 0x3E0) * t9v) / 2560) & 0x3E0;
|
||||
b = (((px & 0x7C00) * t8v) / 2560) & 0x7C00;
|
||||
out = r | g | b | (px & 0x8000);
|
||||
if (out == 0 && px != 0) {
|
||||
out = 0x8000;
|
||||
}
|
||||
*dst = out;
|
||||
dst++;
|
||||
i++;
|
||||
src++;
|
||||
} while (i < n);
|
||||
}
|
||||
}
|
||||
arg0++;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC03_125/nonmatchings/ov_SC03_125_jr_801380E0", func_8013D8FC);
|
||||
|
||||
|
||||
@@ -1938,7 +1938,7 @@ extern u8 D_80184DCC[];
|
||||
extern u8 D_80184E4C[];
|
||||
extern u8 D_80184D24[];
|
||||
|
||||
extern void func_8013D53C(void);
|
||||
extern void func_8013D53C(void *arg0v);
|
||||
extern void func_8013DD68(void);
|
||||
extern void func_8013D8FC(void);
|
||||
extern void func_8013CF68(void);
|
||||
@@ -1959,7 +1959,7 @@ void func_8013D3D4(int param_1, int param_2)
|
||||
D_801C770C = D_80184E4C;
|
||||
D_801C7710 = D_80184D24;
|
||||
}
|
||||
func_8013D53C();
|
||||
((void (*)(void))func_8013D53C)();
|
||||
if ((param_2 & 1) != 0) {
|
||||
if (D_801C7740 != 0) {
|
||||
func_8013DD68();
|
||||
@@ -1983,7 +1983,138 @@ void func_8013D3D4(int param_1, int param_2)
|
||||
}
|
||||
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_801380E0", func_8013D53C);
|
||||
|
||||
typedef struct { u8 b[9]; } S9; /* 9-byte, align-1 -> unaligned block copy */
|
||||
|
||||
|
||||
extern s32 D_801C7738;
|
||||
extern s32 D_801C7720;
|
||||
|
||||
|
||||
extern u8 D_801C936A;
|
||||
extern u8 D_801C93DE;
|
||||
extern u8 D_801C926A;
|
||||
extern u8 D_801C9334;
|
||||
extern u8 D_801C9240;
|
||||
extern u8 D_801C9269;
|
||||
|
||||
|
||||
extern s32 D_801C9338;
|
||||
extern s32 D_801C7734;
|
||||
extern s32 D_801C7730;
|
||||
extern s32 D_801C7718;
|
||||
extern s32 D_801C7724;
|
||||
extern s32 D_801C7728;
|
||||
|
||||
extern void *D_801C7708;
|
||||
extern s32 D_801C7740;
|
||||
extern void *D_801C7710;
|
||||
|
||||
void func_8013D53C(void *arg0v) {
|
||||
|
||||
extern Rec9 D_80184E68[];
|
||||
extern Rec12 D_80184EA0[];
|
||||
extern u8 D_80078EAF;
|
||||
extern u8 D_801C9310;
|
||||
extern s32 D_801C772C;
|
||||
Cmd_8013D53C *arg0 = arg0v;
|
||||
|
||||
extern u8 D_80184EA4[];
|
||||
extern u8 D_80184EA8[];
|
||||
extern unsigned char D_801C9260;
|
||||
extern s16 *D_801C7714;
|
||||
extern s32 D_801C7744;
|
||||
extern s32 D_801C7748;
|
||||
extern s32 D_801C774C;
|
||||
s32 s0v;
|
||||
s32 t9v;
|
||||
s32 t8v;
|
||||
u8 b0, b1, b2;
|
||||
u8 pad[8]; /* dead BLKmode local: frame 0x10 -> 0x18, zero code */
|
||||
|
||||
if (!(D_801C7738 & 1)) {
|
||||
D_801C7720 = 1;
|
||||
} else {
|
||||
D_801C7720 = D_80078EAF;
|
||||
}
|
||||
|
||||
b0 = ((u8 *)D_80184EA0)[D_801C7720 * 12];
|
||||
D_801C936A = b0;
|
||||
D_801C93DE = b0;
|
||||
b1 = D_80184EA4[D_801C7720 * 12];
|
||||
D_801C926A = b1;
|
||||
D_801C9334 = b1;
|
||||
b2 = D_80184EA8[D_801C7720 * 12];
|
||||
D_801C9240 = b2;
|
||||
D_801C9269 = b2;
|
||||
|
||||
(*(S9 *)&D_801C9260) = ((S9 *)D_80184E68)[D_801C7720];
|
||||
(*(S9 *)&D_801C9310) = *(S9 *)(&D_801C9240 + 0x20); /* same addr as (*(S9 *)&D_801C9260); distinct sym defeats cse, keeps %hi/%lo */
|
||||
|
||||
D_801C9338 = 1;
|
||||
D_801C7734 = -1;
|
||||
D_801C7730 = 0;
|
||||
D_801C772C = -1;
|
||||
D_801C7718 = 0;
|
||||
D_801C7724 = 0;
|
||||
D_801C7728 = 0;
|
||||
|
||||
if ((D_801C7738 & 2) && (D_801C7720 == 4)) {
|
||||
s0v = (*(s32 * *)&D_801C7708)[18];
|
||||
t9v = (*(s32 * *)&D_801C7708)[19];
|
||||
t8v = (*(s32 * *)&D_801C7708)[20];
|
||||
} else {
|
||||
s32 *p = (s32 *)(D_801C7720 * 12 + (s32) (*(s32 * *)&D_801C7708)); /* block-local: local-alloc ties sum into mul chain */
|
||||
s0v = p[0];
|
||||
t9v = p[1];
|
||||
t8v = p[2];
|
||||
}
|
||||
|
||||
(*(Cmd_8013D53C * *)&D_801C7714) = arg0;
|
||||
if (arg0 != 0) {
|
||||
if (D_801C7740 != 0) {
|
||||
s32 *p = (s32 *)(D_801C7720 * 12 + (s32) (*(s32 * *)&D_801C7710));
|
||||
D_801C7744 = p[0];
|
||||
D_801C7748 = p[1];
|
||||
D_801C774C = p[2];
|
||||
} else {
|
||||
while ((arg0->cmd & 0xFFFF) != 0xFF) {
|
||||
if ((arg0->cmd & 0xFFFF) == 9) {
|
||||
s32 n;
|
||||
s32 i;
|
||||
u16 *src;
|
||||
u16 *dst;
|
||||
n = arg0->w * arg0->h;
|
||||
i = 0;
|
||||
src = arg0->data;
|
||||
__asm__("" :: "r"(src)); /* +2 refs on src (depth-2): keeps src above i, below the mfhi temp */
|
||||
dst = src + n;
|
||||
if (n > 0) {
|
||||
do {
|
||||
u16 px;
|
||||
s32 r, g, b, out;
|
||||
__asm__("" :: "r"(i)); /* +3 refs on i (depth-3): lifts i over dst in the $t2 race */
|
||||
px = *src;
|
||||
r = ((px & 0x1F) * s0v) / 2560;
|
||||
g = (((px & 0x3E0) * t9v) / 2560) & 0x3E0;
|
||||
b = (((px & 0x7C00) * t8v) / 2560) & 0x7C00;
|
||||
out = r | g | b | (px & 0x8000);
|
||||
if (out == 0 && px != 0) {
|
||||
out = 0x8000;
|
||||
}
|
||||
*dst = out;
|
||||
dst++;
|
||||
i++;
|
||||
src++;
|
||||
} while (i < n);
|
||||
}
|
||||
}
|
||||
arg0++;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC04_015/nonmatchings/ov_SC04_015_jr_801380E0", func_8013D8FC);
|
||||
|
||||
|
||||
@@ -1933,7 +1933,7 @@ extern u8 D_8018DAA8[];
|
||||
extern u8 D_8018DB28[];
|
||||
extern u8 D_8018DA00[];
|
||||
|
||||
extern void func_8013D53C(void);
|
||||
extern void func_8013D53C(void *arg0v);
|
||||
extern void func_8013DD68(void);
|
||||
extern void func_8013D8FC(void);
|
||||
extern void func_8013CF68(void);
|
||||
@@ -1954,7 +1954,7 @@ void func_8013D3D4(int param_1, int param_2)
|
||||
D_801E5B04 = D_8018DB28;
|
||||
D_801E5B08 = D_8018DA00;
|
||||
}
|
||||
func_8013D53C();
|
||||
((void (*)(void))func_8013D53C)();
|
||||
if ((param_2 & 1) != 0) {
|
||||
if (D_801E5B38 != 0) {
|
||||
func_8013DD68();
|
||||
@@ -1978,7 +1978,138 @@ void func_8013D3D4(int param_1, int param_2)
|
||||
}
|
||||
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801380E0", func_8013D53C);
|
||||
|
||||
typedef struct { u8 b[9]; } S9; /* 9-byte, align-1 -> unaligned block copy */
|
||||
|
||||
|
||||
extern s32 D_801E5B30;
|
||||
extern s32 D_801E5B18;
|
||||
|
||||
|
||||
extern u8 D_801E7AB2;
|
||||
extern u8 D_801E7B26;
|
||||
extern u8 D_801E79B2;
|
||||
extern u8 D_801E7A7C;
|
||||
extern u8 D_801E7988;
|
||||
extern u8 D_801E79B1;
|
||||
|
||||
|
||||
extern s32 D_801E7A80;
|
||||
extern s32 D_801E5B2C;
|
||||
extern s32 D_801E5B28;
|
||||
extern s32 D_801E5B10;
|
||||
extern s32 D_801E5B1C;
|
||||
extern s32 D_801E5B20;
|
||||
|
||||
extern void *D_801E5B00;
|
||||
extern s32 D_801E5B38;
|
||||
extern void *D_801E5B08;
|
||||
|
||||
void func_8013D53C(void *arg0v) {
|
||||
|
||||
extern Rec9 D_8018DB44[];
|
||||
extern Rec12 D_8018DB7C[];
|
||||
extern u8 D_80078EAF;
|
||||
extern u8 D_801E7A58;
|
||||
extern s32 D_801E5B24;
|
||||
Cmd_8013D53C *arg0 = arg0v;
|
||||
|
||||
extern u8 D_8018DB80[];
|
||||
extern u8 D_8018DB84[];
|
||||
extern unsigned char D_801E79A8;
|
||||
extern s16 *D_801E5B0C;
|
||||
extern s32 D_801E5B3C;
|
||||
extern s32 D_801E5B40;
|
||||
extern s32 D_801E5B44;
|
||||
s32 s0v;
|
||||
s32 t9v;
|
||||
s32 t8v;
|
||||
u8 b0, b1, b2;
|
||||
u8 pad[8]; /* dead BLKmode local: frame 0x10 -> 0x18, zero code */
|
||||
|
||||
if (!(D_801E5B30 & 1)) {
|
||||
D_801E5B18 = 1;
|
||||
} else {
|
||||
D_801E5B18 = D_80078EAF;
|
||||
}
|
||||
|
||||
b0 = ((u8 *)D_8018DB7C)[D_801E5B18 * 12];
|
||||
D_801E7AB2 = b0;
|
||||
D_801E7B26 = b0;
|
||||
b1 = D_8018DB80[D_801E5B18 * 12];
|
||||
D_801E79B2 = b1;
|
||||
D_801E7A7C = b1;
|
||||
b2 = D_8018DB84[D_801E5B18 * 12];
|
||||
D_801E7988 = b2;
|
||||
D_801E79B1 = b2;
|
||||
|
||||
(*(S9 *)&D_801E79A8) = ((S9 *)D_8018DB44)[D_801E5B18];
|
||||
(*(S9 *)&D_801E7A58) = *(S9 *)(&D_801E7988 + 0x20); /* same addr as (*(S9 *)&D_801E79A8); distinct sym defeats cse, keeps %hi/%lo */
|
||||
|
||||
D_801E7A80 = 1;
|
||||
D_801E5B2C = -1;
|
||||
D_801E5B28 = 0;
|
||||
D_801E5B24 = -1;
|
||||
D_801E5B10 = 0;
|
||||
D_801E5B1C = 0;
|
||||
D_801E5B20 = 0;
|
||||
|
||||
if ((D_801E5B30 & 2) && (D_801E5B18 == 4)) {
|
||||
s0v = (*(s32 * *)&D_801E5B00)[18];
|
||||
t9v = (*(s32 * *)&D_801E5B00)[19];
|
||||
t8v = (*(s32 * *)&D_801E5B00)[20];
|
||||
} else {
|
||||
s32 *p = (s32 *)(D_801E5B18 * 12 + (s32) (*(s32 * *)&D_801E5B00)); /* block-local: local-alloc ties sum into mul chain */
|
||||
s0v = p[0];
|
||||
t9v = p[1];
|
||||
t8v = p[2];
|
||||
}
|
||||
|
||||
(*(Cmd_8013D53C * *)&D_801E5B0C) = arg0;
|
||||
if (arg0 != 0) {
|
||||
if (D_801E5B38 != 0) {
|
||||
s32 *p = (s32 *)(D_801E5B18 * 12 + (s32) (*(s32 * *)&D_801E5B08));
|
||||
D_801E5B3C = p[0];
|
||||
D_801E5B40 = p[1];
|
||||
D_801E5B44 = p[2];
|
||||
} else {
|
||||
while ((arg0->cmd & 0xFFFF) != 0xFF) {
|
||||
if ((arg0->cmd & 0xFFFF) == 9) {
|
||||
s32 n;
|
||||
s32 i;
|
||||
u16 *src;
|
||||
u16 *dst;
|
||||
n = arg0->w * arg0->h;
|
||||
i = 0;
|
||||
src = arg0->data;
|
||||
__asm__("" :: "r"(src)); /* +2 refs on src (depth-2): keeps src above i, below the mfhi temp */
|
||||
dst = src + n;
|
||||
if (n > 0) {
|
||||
do {
|
||||
u16 px;
|
||||
s32 r, g, b, out;
|
||||
__asm__("" :: "r"(i)); /* +3 refs on i (depth-3): lifts i over dst in the $t2 race */
|
||||
px = *src;
|
||||
r = ((px & 0x1F) * s0v) / 2560;
|
||||
g = (((px & 0x3E0) * t9v) / 2560) & 0x3E0;
|
||||
b = (((px & 0x7C00) * t8v) / 2560) & 0x7C00;
|
||||
out = r | g | b | (px & 0x8000);
|
||||
if (out == 0 && px != 0) {
|
||||
out = 0x8000;
|
||||
}
|
||||
*dst = out;
|
||||
dst++;
|
||||
i++;
|
||||
src++;
|
||||
} while (i < n);
|
||||
}
|
||||
}
|
||||
arg0++;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC04_018/nonmatchings/ov_SC04_018_jr_801380E0", func_8013D8FC);
|
||||
|
||||
|
||||
@@ -1933,7 +1933,7 @@ extern u8 D_8018DAA8[];
|
||||
extern u8 D_8018DB28[];
|
||||
extern u8 D_8018DA00[];
|
||||
|
||||
extern void func_8013D53C(void);
|
||||
extern void func_8013D53C(void *arg0v);
|
||||
extern void func_8013DD68(void);
|
||||
extern void func_8013D8FC(void);
|
||||
extern void func_8013CF68(void);
|
||||
@@ -1954,7 +1954,7 @@ void func_8013D3D4(int param_1, int param_2)
|
||||
D_801E5B04 = D_8018DB28;
|
||||
D_801E5B08 = D_8018DA00;
|
||||
}
|
||||
func_8013D53C();
|
||||
((void (*)(void))func_8013D53C)();
|
||||
if ((param_2 & 1) != 0) {
|
||||
if (D_801E5B38 != 0) {
|
||||
func_8013DD68();
|
||||
@@ -1978,7 +1978,138 @@ void func_8013D3D4(int param_1, int param_2)
|
||||
}
|
||||
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801380E0", func_8013D53C);
|
||||
|
||||
typedef struct { u8 b[9]; } S9; /* 9-byte, align-1 -> unaligned block copy */
|
||||
|
||||
|
||||
extern s32 D_801E5B30;
|
||||
extern s32 D_801E5B18;
|
||||
|
||||
|
||||
extern u8 D_801E7AB2;
|
||||
extern u8 D_801E7B26;
|
||||
extern u8 D_801E79B2;
|
||||
extern u8 D_801E7A7C;
|
||||
extern u8 D_801E7988;
|
||||
extern u8 D_801E79B1;
|
||||
|
||||
|
||||
extern s32 D_801E7A80;
|
||||
extern s32 D_801E5B2C;
|
||||
extern s32 D_801E5B28;
|
||||
extern s32 D_801E5B10;
|
||||
extern s32 D_801E5B1C;
|
||||
extern s32 D_801E5B20;
|
||||
|
||||
extern void *D_801E5B00;
|
||||
extern s32 D_801E5B38;
|
||||
extern void *D_801E5B08;
|
||||
|
||||
void func_8013D53C(void *arg0v) {
|
||||
|
||||
extern Rec9 D_8018DB44[];
|
||||
extern Rec12 D_8018DB7C[];
|
||||
extern u8 D_80078EAF;
|
||||
extern u8 D_801E7A58;
|
||||
extern s32 D_801E5B24;
|
||||
Cmd_8013D53C *arg0 = arg0v;
|
||||
|
||||
extern u8 D_8018DB80[];
|
||||
extern u8 D_8018DB84[];
|
||||
extern unsigned char D_801E79A8;
|
||||
extern s16 *D_801E5B0C;
|
||||
extern s32 D_801E5B3C;
|
||||
extern s32 D_801E5B40;
|
||||
extern s32 D_801E5B44;
|
||||
s32 s0v;
|
||||
s32 t9v;
|
||||
s32 t8v;
|
||||
u8 b0, b1, b2;
|
||||
u8 pad[8]; /* dead BLKmode local: frame 0x10 -> 0x18, zero code */
|
||||
|
||||
if (!(D_801E5B30 & 1)) {
|
||||
D_801E5B18 = 1;
|
||||
} else {
|
||||
D_801E5B18 = D_80078EAF;
|
||||
}
|
||||
|
||||
b0 = ((u8 *)D_8018DB7C)[D_801E5B18 * 12];
|
||||
D_801E7AB2 = b0;
|
||||
D_801E7B26 = b0;
|
||||
b1 = D_8018DB80[D_801E5B18 * 12];
|
||||
D_801E79B2 = b1;
|
||||
D_801E7A7C = b1;
|
||||
b2 = D_8018DB84[D_801E5B18 * 12];
|
||||
D_801E7988 = b2;
|
||||
D_801E79B1 = b2;
|
||||
|
||||
(*(S9 *)&D_801E79A8) = ((S9 *)D_8018DB44)[D_801E5B18];
|
||||
(*(S9 *)&D_801E7A58) = *(S9 *)(&D_801E7988 + 0x20); /* same addr as (*(S9 *)&D_801E79A8); distinct sym defeats cse, keeps %hi/%lo */
|
||||
|
||||
D_801E7A80 = 1;
|
||||
D_801E5B2C = -1;
|
||||
D_801E5B28 = 0;
|
||||
D_801E5B24 = -1;
|
||||
D_801E5B10 = 0;
|
||||
D_801E5B1C = 0;
|
||||
D_801E5B20 = 0;
|
||||
|
||||
if ((D_801E5B30 & 2) && (D_801E5B18 == 4)) {
|
||||
s0v = (*(s32 * *)&D_801E5B00)[18];
|
||||
t9v = (*(s32 * *)&D_801E5B00)[19];
|
||||
t8v = (*(s32 * *)&D_801E5B00)[20];
|
||||
} else {
|
||||
s32 *p = (s32 *)(D_801E5B18 * 12 + (s32) (*(s32 * *)&D_801E5B00)); /* block-local: local-alloc ties sum into mul chain */
|
||||
s0v = p[0];
|
||||
t9v = p[1];
|
||||
t8v = p[2];
|
||||
}
|
||||
|
||||
(*(Cmd_8013D53C * *)&D_801E5B0C) = arg0;
|
||||
if (arg0 != 0) {
|
||||
if (D_801E5B38 != 0) {
|
||||
s32 *p = (s32 *)(D_801E5B18 * 12 + (s32) (*(s32 * *)&D_801E5B08));
|
||||
D_801E5B3C = p[0];
|
||||
D_801E5B40 = p[1];
|
||||
D_801E5B44 = p[2];
|
||||
} else {
|
||||
while ((arg0->cmd & 0xFFFF) != 0xFF) {
|
||||
if ((arg0->cmd & 0xFFFF) == 9) {
|
||||
s32 n;
|
||||
s32 i;
|
||||
u16 *src;
|
||||
u16 *dst;
|
||||
n = arg0->w * arg0->h;
|
||||
i = 0;
|
||||
src = arg0->data;
|
||||
__asm__("" :: "r"(src)); /* +2 refs on src (depth-2): keeps src above i, below the mfhi temp */
|
||||
dst = src + n;
|
||||
if (n > 0) {
|
||||
do {
|
||||
u16 px;
|
||||
s32 r, g, b, out;
|
||||
__asm__("" :: "r"(i)); /* +3 refs on i (depth-3): lifts i over dst in the $t2 race */
|
||||
px = *src;
|
||||
r = ((px & 0x1F) * s0v) / 2560;
|
||||
g = (((px & 0x3E0) * t9v) / 2560) & 0x3E0;
|
||||
b = (((px & 0x7C00) * t8v) / 2560) & 0x7C00;
|
||||
out = r | g | b | (px & 0x8000);
|
||||
if (out == 0 && px != 0) {
|
||||
out = 0x8000;
|
||||
}
|
||||
*dst = out;
|
||||
dst++;
|
||||
i++;
|
||||
src++;
|
||||
} while (i < n);
|
||||
}
|
||||
}
|
||||
arg0++;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC04_019/nonmatchings/ov_SC04_019_jr_801380E0", func_8013D8FC);
|
||||
|
||||
|
||||
@@ -1938,7 +1938,7 @@ extern u8 D_80183BE0[];
|
||||
extern u8 D_80183C60[];
|
||||
extern u8 D_80183B38[];
|
||||
|
||||
extern void func_8013D53C(void);
|
||||
extern void func_8013D53C(void *arg0v);
|
||||
extern void func_8013DD68(void);
|
||||
extern void func_8013D8FC(void);
|
||||
extern void func_8013CF68(void);
|
||||
@@ -1959,7 +1959,7 @@ void func_8013D3D4(int param_1, int param_2)
|
||||
D_801BB114 = D_80183C60;
|
||||
D_801BB118 = D_80183B38;
|
||||
}
|
||||
func_8013D53C();
|
||||
((void (*)(void))func_8013D53C)();
|
||||
if ((param_2 & 1) != 0) {
|
||||
if (D_801BB148 != 0) {
|
||||
func_8013DD68();
|
||||
@@ -1983,7 +1983,138 @@ void func_8013D3D4(int param_1, int param_2)
|
||||
}
|
||||
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_801380E0", func_8013D53C);
|
||||
|
||||
typedef struct { u8 b[9]; } S9; /* 9-byte, align-1 -> unaligned block copy */
|
||||
|
||||
|
||||
extern s32 D_801BB140;
|
||||
extern s32 D_801BB128;
|
||||
|
||||
|
||||
extern u8 D_801BC73A;
|
||||
extern u8 D_801BC7AE;
|
||||
extern u8 D_801BC63A;
|
||||
extern u8 D_801BC704;
|
||||
extern u8 D_801BC610;
|
||||
extern u8 D_801BC639;
|
||||
|
||||
|
||||
extern s32 D_801BC708;
|
||||
extern s32 D_801BB13C;
|
||||
extern s32 D_801BB138;
|
||||
extern s32 D_801BB120;
|
||||
extern s32 D_801BB12C;
|
||||
extern s32 D_801BB130;
|
||||
|
||||
extern void *D_801BB110;
|
||||
extern s32 D_801BB148;
|
||||
extern void *D_801BB118;
|
||||
|
||||
void func_8013D53C(void *arg0v) {
|
||||
|
||||
extern Rec9 D_80183C7C[];
|
||||
extern Rec12 D_80183CB4[];
|
||||
extern u8 D_80078EAF;
|
||||
extern u8 D_801BC6E0;
|
||||
extern s32 D_801BB134;
|
||||
Cmd_8013D53C *arg0 = arg0v;
|
||||
|
||||
extern u8 D_80183CB8[];
|
||||
extern u8 D_80183CBC[];
|
||||
extern unsigned char D_801BC630;
|
||||
extern s16 *D_801BB11C;
|
||||
extern s32 D_801BB14C;
|
||||
extern s32 D_801BB150;
|
||||
extern s32 D_801BB154;
|
||||
s32 s0v;
|
||||
s32 t9v;
|
||||
s32 t8v;
|
||||
u8 b0, b1, b2;
|
||||
u8 pad[8]; /* dead BLKmode local: frame 0x10 -> 0x18, zero code */
|
||||
|
||||
if (!(D_801BB140 & 1)) {
|
||||
D_801BB128 = 1;
|
||||
} else {
|
||||
D_801BB128 = D_80078EAF;
|
||||
}
|
||||
|
||||
b0 = ((u8 *)D_80183CB4)[D_801BB128 * 12];
|
||||
D_801BC73A = b0;
|
||||
D_801BC7AE = b0;
|
||||
b1 = D_80183CB8[D_801BB128 * 12];
|
||||
D_801BC63A = b1;
|
||||
D_801BC704 = b1;
|
||||
b2 = D_80183CBC[D_801BB128 * 12];
|
||||
D_801BC610 = b2;
|
||||
D_801BC639 = b2;
|
||||
|
||||
(*(S9 *)&D_801BC630) = ((S9 *)D_80183C7C)[D_801BB128];
|
||||
(*(S9 *)&D_801BC6E0) = *(S9 *)(&D_801BC610 + 0x20); /* same addr as (*(S9 *)&D_801BC630); distinct sym defeats cse, keeps %hi/%lo */
|
||||
|
||||
D_801BC708 = 1;
|
||||
D_801BB13C = -1;
|
||||
D_801BB138 = 0;
|
||||
D_801BB134 = -1;
|
||||
D_801BB120 = 0;
|
||||
D_801BB12C = 0;
|
||||
D_801BB130 = 0;
|
||||
|
||||
if ((D_801BB140 & 2) && (D_801BB128 == 4)) {
|
||||
s0v = (*(s32 * *)&D_801BB110)[18];
|
||||
t9v = (*(s32 * *)&D_801BB110)[19];
|
||||
t8v = (*(s32 * *)&D_801BB110)[20];
|
||||
} else {
|
||||
s32 *p = (s32 *)(D_801BB128 * 12 + (s32) (*(s32 * *)&D_801BB110)); /* block-local: local-alloc ties sum into mul chain */
|
||||
s0v = p[0];
|
||||
t9v = p[1];
|
||||
t8v = p[2];
|
||||
}
|
||||
|
||||
(*(Cmd_8013D53C * *)&D_801BB11C) = arg0;
|
||||
if (arg0 != 0) {
|
||||
if (D_801BB148 != 0) {
|
||||
s32 *p = (s32 *)(D_801BB128 * 12 + (s32) (*(s32 * *)&D_801BB118));
|
||||
D_801BB14C = p[0];
|
||||
D_801BB150 = p[1];
|
||||
D_801BB154 = p[2];
|
||||
} else {
|
||||
while ((arg0->cmd & 0xFFFF) != 0xFF) {
|
||||
if ((arg0->cmd & 0xFFFF) == 9) {
|
||||
s32 n;
|
||||
s32 i;
|
||||
u16 *src;
|
||||
u16 *dst;
|
||||
n = arg0->w * arg0->h;
|
||||
i = 0;
|
||||
src = arg0->data;
|
||||
__asm__("" :: "r"(src)); /* +2 refs on src (depth-2): keeps src above i, below the mfhi temp */
|
||||
dst = src + n;
|
||||
if (n > 0) {
|
||||
do {
|
||||
u16 px;
|
||||
s32 r, g, b, out;
|
||||
__asm__("" :: "r"(i)); /* +3 refs on i (depth-3): lifts i over dst in the $t2 race */
|
||||
px = *src;
|
||||
r = ((px & 0x1F) * s0v) / 2560;
|
||||
g = (((px & 0x3E0) * t9v) / 2560) & 0x3E0;
|
||||
b = (((px & 0x7C00) * t8v) / 2560) & 0x7C00;
|
||||
out = r | g | b | (px & 0x8000);
|
||||
if (out == 0 && px != 0) {
|
||||
out = 0x8000;
|
||||
}
|
||||
*dst = out;
|
||||
dst++;
|
||||
i++;
|
||||
src++;
|
||||
} while (i < n);
|
||||
}
|
||||
}
|
||||
arg0++;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC04_020/nonmatchings/ov_SC04_020_jr_801380E0", func_8013D8FC);
|
||||
|
||||
|
||||
@@ -1938,7 +1938,7 @@ extern u8 D_8018DA6C[];
|
||||
extern u8 D_8018DAEC[];
|
||||
extern u8 D_8018D9C4[];
|
||||
|
||||
extern void func_8013D53C(void);
|
||||
extern void func_8013D53C(void *arg0v);
|
||||
extern void func_8013DD68(void);
|
||||
extern void func_8013D8FC(void);
|
||||
extern void func_8013CF68(void);
|
||||
@@ -1959,7 +1959,7 @@ void func_8013D3D4(int param_1, int param_2)
|
||||
D_801EB95C = D_8018DAEC;
|
||||
D_801EB960 = D_8018D9C4;
|
||||
}
|
||||
func_8013D53C();
|
||||
((void (*)(void))func_8013D53C)();
|
||||
if ((param_2 & 1) != 0) {
|
||||
if (D_801EB990 != 0) {
|
||||
func_8013DD68();
|
||||
@@ -1983,7 +1983,138 @@ void func_8013D3D4(int param_1, int param_2)
|
||||
}
|
||||
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801380E0", func_8013D53C);
|
||||
|
||||
typedef struct { u8 b[9]; } S9; /* 9-byte, align-1 -> unaligned block copy */
|
||||
|
||||
|
||||
extern s32 D_801EB988;
|
||||
extern s32 D_801EB970;
|
||||
|
||||
|
||||
extern u8 D_801ED912;
|
||||
extern u8 D_801ED986;
|
||||
extern u8 D_801ED812;
|
||||
extern u8 D_801ED8DC;
|
||||
extern u8 D_801ED7E8;
|
||||
extern u8 D_801ED811;
|
||||
|
||||
|
||||
extern s32 D_801ED8E0;
|
||||
extern s32 D_801EB984;
|
||||
extern s32 D_801EB980;
|
||||
extern s32 D_801EB968;
|
||||
extern s32 D_801EB974;
|
||||
extern s32 D_801EB978;
|
||||
|
||||
extern void *D_801EB958;
|
||||
extern s32 D_801EB990;
|
||||
extern void *D_801EB960;
|
||||
|
||||
void func_8013D53C(void *arg0v) {
|
||||
|
||||
extern Rec9 D_8018DB08[];
|
||||
extern Rec12 D_8018DB40[];
|
||||
extern u8 D_80078EAF;
|
||||
extern u8 D_801ED8B8;
|
||||
extern s32 D_801EB97C;
|
||||
Cmd_8013D53C *arg0 = arg0v;
|
||||
|
||||
extern u8 D_8018DB44[];
|
||||
extern u8 D_8018DB48[];
|
||||
extern unsigned char D_801ED808;
|
||||
extern s16 *D_801EB964;
|
||||
extern s32 D_801EB994;
|
||||
extern s32 D_801EB998;
|
||||
extern s32 D_801EB99C;
|
||||
s32 s0v;
|
||||
s32 t9v;
|
||||
s32 t8v;
|
||||
u8 b0, b1, b2;
|
||||
u8 pad[8]; /* dead BLKmode local: frame 0x10 -> 0x18, zero code */
|
||||
|
||||
if (!(D_801EB988 & 1)) {
|
||||
D_801EB970 = 1;
|
||||
} else {
|
||||
D_801EB970 = D_80078EAF;
|
||||
}
|
||||
|
||||
b0 = ((u8 *)D_8018DB40)[D_801EB970 * 12];
|
||||
D_801ED912 = b0;
|
||||
D_801ED986 = b0;
|
||||
b1 = D_8018DB44[D_801EB970 * 12];
|
||||
D_801ED812 = b1;
|
||||
D_801ED8DC = b1;
|
||||
b2 = D_8018DB48[D_801EB970 * 12];
|
||||
D_801ED7E8 = b2;
|
||||
D_801ED811 = b2;
|
||||
|
||||
(*(S9 *)&D_801ED808) = ((S9 *)D_8018DB08)[D_801EB970];
|
||||
(*(S9 *)&D_801ED8B8) = *(S9 *)(&D_801ED7E8 + 0x20); /* same addr as (*(S9 *)&D_801ED808); distinct sym defeats cse, keeps %hi/%lo */
|
||||
|
||||
D_801ED8E0 = 1;
|
||||
D_801EB984 = -1;
|
||||
D_801EB980 = 0;
|
||||
D_801EB97C = -1;
|
||||
D_801EB968 = 0;
|
||||
D_801EB974 = 0;
|
||||
D_801EB978 = 0;
|
||||
|
||||
if ((D_801EB988 & 2) && (D_801EB970 == 4)) {
|
||||
s0v = (*(s32 * *)&D_801EB958)[18];
|
||||
t9v = (*(s32 * *)&D_801EB958)[19];
|
||||
t8v = (*(s32 * *)&D_801EB958)[20];
|
||||
} else {
|
||||
s32 *p = (s32 *)(D_801EB970 * 12 + (s32) (*(s32 * *)&D_801EB958)); /* block-local: local-alloc ties sum into mul chain */
|
||||
s0v = p[0];
|
||||
t9v = p[1];
|
||||
t8v = p[2];
|
||||
}
|
||||
|
||||
(*(Cmd_8013D53C * *)&D_801EB964) = arg0;
|
||||
if (arg0 != 0) {
|
||||
if (D_801EB990 != 0) {
|
||||
s32 *p = (s32 *)(D_801EB970 * 12 + (s32) (*(s32 * *)&D_801EB960));
|
||||
D_801EB994 = p[0];
|
||||
D_801EB998 = p[1];
|
||||
D_801EB99C = p[2];
|
||||
} else {
|
||||
while ((arg0->cmd & 0xFFFF) != 0xFF) {
|
||||
if ((arg0->cmd & 0xFFFF) == 9) {
|
||||
s32 n;
|
||||
s32 i;
|
||||
u16 *src;
|
||||
u16 *dst;
|
||||
n = arg0->w * arg0->h;
|
||||
i = 0;
|
||||
src = arg0->data;
|
||||
__asm__("" :: "r"(src)); /* +2 refs on src (depth-2): keeps src above i, below the mfhi temp */
|
||||
dst = src + n;
|
||||
if (n > 0) {
|
||||
do {
|
||||
u16 px;
|
||||
s32 r, g, b, out;
|
||||
__asm__("" :: "r"(i)); /* +3 refs on i (depth-3): lifts i over dst in the $t2 race */
|
||||
px = *src;
|
||||
r = ((px & 0x1F) * s0v) / 2560;
|
||||
g = (((px & 0x3E0) * t9v) / 2560) & 0x3E0;
|
||||
b = (((px & 0x7C00) * t8v) / 2560) & 0x7C00;
|
||||
out = r | g | b | (px & 0x8000);
|
||||
if (out == 0 && px != 0) {
|
||||
out = 0x8000;
|
||||
}
|
||||
*dst = out;
|
||||
dst++;
|
||||
i++;
|
||||
src++;
|
||||
} while (i < n);
|
||||
}
|
||||
}
|
||||
arg0++;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC05_017/nonmatchings/ov_SC05_017_jr_801380E0", func_8013D8FC);
|
||||
|
||||
|
||||
@@ -1938,7 +1938,7 @@ extern u8 D_801871C8[];
|
||||
extern u8 D_80187248[];
|
||||
extern u8 D_80187120[];
|
||||
|
||||
extern void func_8013D53C(void);
|
||||
extern void func_8013D53C(void *arg0v);
|
||||
extern void func_8013DD68(void);
|
||||
extern void func_8013D8FC(void);
|
||||
extern void func_8013CF68(void);
|
||||
@@ -1959,7 +1959,7 @@ void func_8013D3D4(int param_1, int param_2)
|
||||
D_801E509C = D_80187248;
|
||||
D_801E50A0 = D_80187120;
|
||||
}
|
||||
func_8013D53C();
|
||||
((void (*)(void))func_8013D53C)();
|
||||
if ((param_2 & 1) != 0) {
|
||||
if (D_801E50D0 != 0) {
|
||||
func_8013DD68();
|
||||
@@ -1983,7 +1983,138 @@ void func_8013D3D4(int param_1, int param_2)
|
||||
}
|
||||
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_801380E0", func_8013D53C);
|
||||
|
||||
typedef struct { u8 b[9]; } S9; /* 9-byte, align-1 -> unaligned block copy */
|
||||
|
||||
|
||||
extern s32 D_801E50C8;
|
||||
extern s32 D_801E50B0;
|
||||
|
||||
|
||||
extern u8 D_801E681A;
|
||||
extern u8 D_801E688E;
|
||||
extern u8 D_801E6712;
|
||||
extern u8 D_801E67E4;
|
||||
extern u8 D_801E66E8;
|
||||
extern u8 D_801E6711;
|
||||
|
||||
|
||||
extern s32 D_801E67E8;
|
||||
extern s32 D_801E50C4;
|
||||
extern s32 D_801E50C0;
|
||||
extern s32 D_801E50A8;
|
||||
extern s32 D_801E50B4;
|
||||
extern s32 D_801E50B8;
|
||||
|
||||
extern void *D_801E5098;
|
||||
extern s32 D_801E50D0;
|
||||
extern void *D_801E50A0;
|
||||
|
||||
void func_8013D53C(void *arg0v) {
|
||||
|
||||
extern Rec9 D_80187264[];
|
||||
extern Rec12 D_8018729C[];
|
||||
extern u8 D_80078EAF;
|
||||
extern u8 D_801E67C0;
|
||||
extern s32 D_801E50BC;
|
||||
Cmd_8013D53C *arg0 = arg0v;
|
||||
|
||||
extern u8 D_801872A0[];
|
||||
extern u8 D_801872A4[];
|
||||
extern unsigned char D_801E6708;
|
||||
extern s16 *D_801E50A4;
|
||||
extern s32 D_801E50D4;
|
||||
extern s32 D_801E50D8;
|
||||
extern s32 D_801E50DC;
|
||||
s32 s0v;
|
||||
s32 t9v;
|
||||
s32 t8v;
|
||||
u8 b0, b1, b2;
|
||||
u8 pad[8]; /* dead BLKmode local: frame 0x10 -> 0x18, zero code */
|
||||
|
||||
if (!(D_801E50C8 & 1)) {
|
||||
D_801E50B0 = 1;
|
||||
} else {
|
||||
D_801E50B0 = D_80078EAF;
|
||||
}
|
||||
|
||||
b0 = ((u8 *)D_8018729C)[D_801E50B0 * 12];
|
||||
D_801E681A = b0;
|
||||
D_801E688E = b0;
|
||||
b1 = D_801872A0[D_801E50B0 * 12];
|
||||
D_801E6712 = b1;
|
||||
D_801E67E4 = b1;
|
||||
b2 = D_801872A4[D_801E50B0 * 12];
|
||||
D_801E66E8 = b2;
|
||||
D_801E6711 = b2;
|
||||
|
||||
(*(S9 *)&D_801E6708) = ((S9 *)D_80187264)[D_801E50B0];
|
||||
(*(S9 *)&D_801E67C0) = *(S9 *)(&D_801E66E8 + 0x20); /* same addr as (*(S9 *)&D_801E6708); distinct sym defeats cse, keeps %hi/%lo */
|
||||
|
||||
D_801E67E8 = 1;
|
||||
D_801E50C4 = -1;
|
||||
D_801E50C0 = 0;
|
||||
D_801E50BC = -1;
|
||||
D_801E50A8 = 0;
|
||||
D_801E50B4 = 0;
|
||||
D_801E50B8 = 0;
|
||||
|
||||
if ((D_801E50C8 & 2) && (D_801E50B0 == 4)) {
|
||||
s0v = (*(s32 * *)&D_801E5098)[18];
|
||||
t9v = (*(s32 * *)&D_801E5098)[19];
|
||||
t8v = (*(s32 * *)&D_801E5098)[20];
|
||||
} else {
|
||||
s32 *p = (s32 *)(D_801E50B0 * 12 + (s32) (*(s32 * *)&D_801E5098)); /* block-local: local-alloc ties sum into mul chain */
|
||||
s0v = p[0];
|
||||
t9v = p[1];
|
||||
t8v = p[2];
|
||||
}
|
||||
|
||||
(*(Cmd_8013D53C * *)&D_801E50A4) = arg0;
|
||||
if (arg0 != 0) {
|
||||
if (D_801E50D0 != 0) {
|
||||
s32 *p = (s32 *)(D_801E50B0 * 12 + (s32) (*(s32 * *)&D_801E50A0));
|
||||
D_801E50D4 = p[0];
|
||||
D_801E50D8 = p[1];
|
||||
D_801E50DC = p[2];
|
||||
} else {
|
||||
while ((arg0->cmd & 0xFFFF) != 0xFF) {
|
||||
if ((arg0->cmd & 0xFFFF) == 9) {
|
||||
s32 n;
|
||||
s32 i;
|
||||
u16 *src;
|
||||
u16 *dst;
|
||||
n = arg0->w * arg0->h;
|
||||
i = 0;
|
||||
src = arg0->data;
|
||||
__asm__("" :: "r"(src)); /* +2 refs on src (depth-2): keeps src above i, below the mfhi temp */
|
||||
dst = src + n;
|
||||
if (n > 0) {
|
||||
do {
|
||||
u16 px;
|
||||
s32 r, g, b, out;
|
||||
__asm__("" :: "r"(i)); /* +3 refs on i (depth-3): lifts i over dst in the $t2 race */
|
||||
px = *src;
|
||||
r = ((px & 0x1F) * s0v) / 2560;
|
||||
g = (((px & 0x3E0) * t9v) / 2560) & 0x3E0;
|
||||
b = (((px & 0x7C00) * t8v) / 2560) & 0x7C00;
|
||||
out = r | g | b | (px & 0x8000);
|
||||
if (out == 0 && px != 0) {
|
||||
out = 0x8000;
|
||||
}
|
||||
*dst = out;
|
||||
dst++;
|
||||
i++;
|
||||
src++;
|
||||
} while (i < n);
|
||||
}
|
||||
}
|
||||
arg0++;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC05_018/nonmatchings/ov_SC05_018_jr_801380E0", func_8013D8FC);
|
||||
|
||||
|
||||
@@ -1938,7 +1938,7 @@ extern u8 D_80180CE4[];
|
||||
extern u8 D_80180D64[];
|
||||
extern u8 D_80180C3C[];
|
||||
|
||||
extern void func_8013D53C(void);
|
||||
extern void func_8013D53C(void *arg0v);
|
||||
extern void func_8013DD68(void);
|
||||
extern void func_8013D8FC(void);
|
||||
extern void func_8013CF68(void);
|
||||
@@ -1959,7 +1959,7 @@ void func_8013D3D4(int param_1, int param_2)
|
||||
D_801AA98C = D_80180D64;
|
||||
D_801AA990 = D_80180C3C;
|
||||
}
|
||||
func_8013D53C();
|
||||
((void (*)(void))func_8013D53C)();
|
||||
if ((param_2 & 1) != 0) {
|
||||
if (D_801AA9C0 != 0) {
|
||||
func_8013DD68();
|
||||
@@ -1983,7 +1983,138 @@ void func_8013D3D4(int param_1, int param_2)
|
||||
}
|
||||
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC06_011/nonmatchings/ov_SC06_011_jr_801380E0", func_8013D53C);
|
||||
|
||||
typedef struct { u8 b[9]; } S9; /* 9-byte, align-1 -> unaligned block copy */
|
||||
|
||||
|
||||
extern s32 D_801AA9B8;
|
||||
extern s32 D_801AA9A0;
|
||||
|
||||
|
||||
extern u8 D_801ABCE2;
|
||||
extern u8 D_801ABD56;
|
||||
extern u8 D_801ABC0A;
|
||||
extern u8 D_801ABCC4;
|
||||
extern u8 D_801ABBE0;
|
||||
extern u8 D_801ABC09;
|
||||
|
||||
|
||||
extern s32 D_801ABCC8;
|
||||
extern s32 D_801AA9B4;
|
||||
extern s32 D_801AA9B0;
|
||||
extern s32 D_801AA998;
|
||||
extern s32 D_801AA9A4;
|
||||
extern s32 D_801AA9A8;
|
||||
|
||||
extern void *D_801AA988;
|
||||
extern s32 D_801AA9C0;
|
||||
extern void *D_801AA990;
|
||||
|
||||
void func_8013D53C(void *arg0v) {
|
||||
|
||||
extern Rec9 D_80180D80[];
|
||||
extern Rec12 D_80180DB8[];
|
||||
extern u8 D_80078EAF;
|
||||
extern u8 D_801ABCA0;
|
||||
extern s32 D_801AA9AC;
|
||||
Cmd_8013D53C *arg0 = arg0v;
|
||||
|
||||
extern u8 D_80180DBC[];
|
||||
extern u8 D_80180DC0[];
|
||||
extern unsigned char D_801ABC00;
|
||||
extern s16 *D_801AA994;
|
||||
extern s32 D_801AA9C4;
|
||||
extern s32 D_801AA9C8;
|
||||
extern s32 D_801AA9CC;
|
||||
s32 s0v;
|
||||
s32 t9v;
|
||||
s32 t8v;
|
||||
u8 b0, b1, b2;
|
||||
u8 pad[8]; /* dead BLKmode local: frame 0x10 -> 0x18, zero code */
|
||||
|
||||
if (!(D_801AA9B8 & 1)) {
|
||||
D_801AA9A0 = 1;
|
||||
} else {
|
||||
D_801AA9A0 = D_80078EAF;
|
||||
}
|
||||
|
||||
b0 = ((u8 *)D_80180DB8)[D_801AA9A0 * 12];
|
||||
D_801ABCE2 = b0;
|
||||
D_801ABD56 = b0;
|
||||
b1 = D_80180DBC[D_801AA9A0 * 12];
|
||||
D_801ABC0A = b1;
|
||||
D_801ABCC4 = b1;
|
||||
b2 = D_80180DC0[D_801AA9A0 * 12];
|
||||
D_801ABBE0 = b2;
|
||||
D_801ABC09 = b2;
|
||||
|
||||
(*(S9 *)&D_801ABC00) = ((S9 *)D_80180D80)[D_801AA9A0];
|
||||
(*(S9 *)&D_801ABCA0) = *(S9 *)(&D_801ABBE0 + 0x20); /* same addr as (*(S9 *)&D_801ABC00); distinct sym defeats cse, keeps %hi/%lo */
|
||||
|
||||
D_801ABCC8 = 1;
|
||||
D_801AA9B4 = -1;
|
||||
D_801AA9B0 = 0;
|
||||
D_801AA9AC = -1;
|
||||
D_801AA998 = 0;
|
||||
D_801AA9A4 = 0;
|
||||
D_801AA9A8 = 0;
|
||||
|
||||
if ((D_801AA9B8 & 2) && (D_801AA9A0 == 4)) {
|
||||
s0v = (*(s32 * *)&D_801AA988)[18];
|
||||
t9v = (*(s32 * *)&D_801AA988)[19];
|
||||
t8v = (*(s32 * *)&D_801AA988)[20];
|
||||
} else {
|
||||
s32 *p = (s32 *)(D_801AA9A0 * 12 + (s32) (*(s32 * *)&D_801AA988)); /* block-local: local-alloc ties sum into mul chain */
|
||||
s0v = p[0];
|
||||
t9v = p[1];
|
||||
t8v = p[2];
|
||||
}
|
||||
|
||||
(*(Cmd_8013D53C * *)&D_801AA994) = arg0;
|
||||
if (arg0 != 0) {
|
||||
if (D_801AA9C0 != 0) {
|
||||
s32 *p = (s32 *)(D_801AA9A0 * 12 + (s32) (*(s32 * *)&D_801AA990));
|
||||
D_801AA9C4 = p[0];
|
||||
D_801AA9C8 = p[1];
|
||||
D_801AA9CC = p[2];
|
||||
} else {
|
||||
while ((arg0->cmd & 0xFFFF) != 0xFF) {
|
||||
if ((arg0->cmd & 0xFFFF) == 9) {
|
||||
s32 n;
|
||||
s32 i;
|
||||
u16 *src;
|
||||
u16 *dst;
|
||||
n = arg0->w * arg0->h;
|
||||
i = 0;
|
||||
src = arg0->data;
|
||||
__asm__("" :: "r"(src)); /* +2 refs on src (depth-2): keeps src above i, below the mfhi temp */
|
||||
dst = src + n;
|
||||
if (n > 0) {
|
||||
do {
|
||||
u16 px;
|
||||
s32 r, g, b, out;
|
||||
__asm__("" :: "r"(i)); /* +3 refs on i (depth-3): lifts i over dst in the $t2 race */
|
||||
px = *src;
|
||||
r = ((px & 0x1F) * s0v) / 2560;
|
||||
g = (((px & 0x3E0) * t9v) / 2560) & 0x3E0;
|
||||
b = (((px & 0x7C00) * t8v) / 2560) & 0x7C00;
|
||||
out = r | g | b | (px & 0x8000);
|
||||
if (out == 0 && px != 0) {
|
||||
out = 0x8000;
|
||||
}
|
||||
*dst = out;
|
||||
dst++;
|
||||
i++;
|
||||
src++;
|
||||
} while (i < n);
|
||||
}
|
||||
}
|
||||
arg0++;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC06_011/nonmatchings/ov_SC06_011_jr_801380E0", func_8013D8FC);
|
||||
|
||||
|
||||
@@ -1933,7 +1933,7 @@ extern u8 D_80182F10[];
|
||||
extern u8 D_80182F90[];
|
||||
extern u8 D_80182E68[];
|
||||
|
||||
extern void func_8013D53C(void);
|
||||
extern void func_8013D53C(void *arg0v);
|
||||
extern void func_8013DD68(void);
|
||||
extern void func_8013D8FC(void);
|
||||
extern void func_8013CF68(void);
|
||||
@@ -1954,7 +1954,7 @@ void func_8013D3D4(int param_1, int param_2)
|
||||
D_801CE8A4 = D_80182F90;
|
||||
D_801CE8A8 = D_80182E68;
|
||||
}
|
||||
func_8013D53C();
|
||||
((void (*)(void))func_8013D53C)();
|
||||
if ((param_2 & 1) != 0) {
|
||||
if (D_801CE8D8 != 0) {
|
||||
func_8013DD68();
|
||||
@@ -1978,7 +1978,138 @@ void func_8013D3D4(int param_1, int param_2)
|
||||
}
|
||||
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_jr_801380E0", func_8013D53C);
|
||||
|
||||
typedef struct { u8 b[9]; } S9; /* 9-byte, align-1 -> unaligned block copy */
|
||||
|
||||
|
||||
extern s32 D_801CE8D0;
|
||||
extern s32 D_801CE8B8;
|
||||
|
||||
|
||||
extern u8 D_801D0C72;
|
||||
extern u8 D_801D0CE6;
|
||||
extern u8 D_801D0B92;
|
||||
extern u8 D_801D0C54;
|
||||
extern u8 D_801D0B68;
|
||||
extern u8 D_801D0B91;
|
||||
|
||||
|
||||
extern s32 D_801D0C58;
|
||||
extern s32 D_801CE8CC;
|
||||
extern s32 D_801CE8C8;
|
||||
extern s32 D_801CE8B0;
|
||||
extern s32 D_801CE8BC;
|
||||
extern s32 D_801CE8C0;
|
||||
|
||||
extern void *D_801CE8A0;
|
||||
extern s32 D_801CE8D8;
|
||||
extern void *D_801CE8A8;
|
||||
|
||||
void func_8013D53C(void *arg0v) {
|
||||
|
||||
extern Rec9 D_80182FAC[];
|
||||
extern Rec12 D_80182FE4[];
|
||||
extern u8 D_80078EAF;
|
||||
extern u8 D_801D0C30;
|
||||
extern s32 D_801CE8C4;
|
||||
Cmd_8013D53C *arg0 = arg0v;
|
||||
|
||||
extern u8 D_80182FE8[];
|
||||
extern u8 D_80182FEC[];
|
||||
extern unsigned char D_801D0B88;
|
||||
extern s16 *D_801CE8AC;
|
||||
extern s32 D_801CE8DC;
|
||||
extern s32 D_801CE8E0;
|
||||
extern s32 D_801CE8E4;
|
||||
s32 s0v;
|
||||
s32 t9v;
|
||||
s32 t8v;
|
||||
u8 b0, b1, b2;
|
||||
u8 pad[8]; /* dead BLKmode local: frame 0x10 -> 0x18, zero code */
|
||||
|
||||
if (!(D_801CE8D0 & 1)) {
|
||||
D_801CE8B8 = 1;
|
||||
} else {
|
||||
D_801CE8B8 = D_80078EAF;
|
||||
}
|
||||
|
||||
b0 = ((u8 *)D_80182FE4)[D_801CE8B8 * 12];
|
||||
D_801D0C72 = b0;
|
||||
D_801D0CE6 = b0;
|
||||
b1 = D_80182FE8[D_801CE8B8 * 12];
|
||||
D_801D0B92 = b1;
|
||||
D_801D0C54 = b1;
|
||||
b2 = D_80182FEC[D_801CE8B8 * 12];
|
||||
D_801D0B68 = b2;
|
||||
D_801D0B91 = b2;
|
||||
|
||||
(*(S9 *)&D_801D0B88) = ((S9 *)D_80182FAC)[D_801CE8B8];
|
||||
(*(S9 *)&D_801D0C30) = *(S9 *)(&D_801D0B68 + 0x20); /* same addr as (*(S9 *)&D_801D0B88); distinct sym defeats cse, keeps %hi/%lo */
|
||||
|
||||
D_801D0C58 = 1;
|
||||
D_801CE8CC = -1;
|
||||
D_801CE8C8 = 0;
|
||||
D_801CE8C4 = -1;
|
||||
D_801CE8B0 = 0;
|
||||
D_801CE8BC = 0;
|
||||
D_801CE8C0 = 0;
|
||||
|
||||
if ((D_801CE8D0 & 2) && (D_801CE8B8 == 4)) {
|
||||
s0v = (*(s32 * *)&D_801CE8A0)[18];
|
||||
t9v = (*(s32 * *)&D_801CE8A0)[19];
|
||||
t8v = (*(s32 * *)&D_801CE8A0)[20];
|
||||
} else {
|
||||
s32 *p = (s32 *)(D_801CE8B8 * 12 + (s32) (*(s32 * *)&D_801CE8A0)); /* block-local: local-alloc ties sum into mul chain */
|
||||
s0v = p[0];
|
||||
t9v = p[1];
|
||||
t8v = p[2];
|
||||
}
|
||||
|
||||
(*(Cmd_8013D53C * *)&D_801CE8AC) = arg0;
|
||||
if (arg0 != 0) {
|
||||
if (D_801CE8D8 != 0) {
|
||||
s32 *p = (s32 *)(D_801CE8B8 * 12 + (s32) (*(s32 * *)&D_801CE8A8));
|
||||
D_801CE8DC = p[0];
|
||||
D_801CE8E0 = p[1];
|
||||
D_801CE8E4 = p[2];
|
||||
} else {
|
||||
while ((arg0->cmd & 0xFFFF) != 0xFF) {
|
||||
if ((arg0->cmd & 0xFFFF) == 9) {
|
||||
s32 n;
|
||||
s32 i;
|
||||
u16 *src;
|
||||
u16 *dst;
|
||||
n = arg0->w * arg0->h;
|
||||
i = 0;
|
||||
src = arg0->data;
|
||||
__asm__("" :: "r"(src)); /* +2 refs on src (depth-2): keeps src above i, below the mfhi temp */
|
||||
dst = src + n;
|
||||
if (n > 0) {
|
||||
do {
|
||||
u16 px;
|
||||
s32 r, g, b, out;
|
||||
__asm__("" :: "r"(i)); /* +3 refs on i (depth-3): lifts i over dst in the $t2 race */
|
||||
px = *src;
|
||||
r = ((px & 0x1F) * s0v) / 2560;
|
||||
g = (((px & 0x3E0) * t9v) / 2560) & 0x3E0;
|
||||
b = (((px & 0x7C00) * t8v) / 2560) & 0x7C00;
|
||||
out = r | g | b | (px & 0x8000);
|
||||
if (out == 0 && px != 0) {
|
||||
out = 0x8000;
|
||||
}
|
||||
*dst = out;
|
||||
dst++;
|
||||
i++;
|
||||
src++;
|
||||
} while (i < n);
|
||||
}
|
||||
}
|
||||
arg0++;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC07_000/nonmatchings/ov_SC07_000_jr_801380E0", func_8013D8FC);
|
||||
|
||||
|
||||
@@ -3365,7 +3365,7 @@ void func_8013D330(void) {
|
||||
|
||||
|
||||
|
||||
extern void func_8013D53C(void);
|
||||
extern void func_8013D53C(void *arg0v);
|
||||
extern void func_8013DD68(void);
|
||||
extern void func_8013D8FC(void);
|
||||
extern void func_8013CF68(void);
|
||||
@@ -3401,7 +3401,7 @@ void func_8013D3D4(int param_1, int param_2)
|
||||
D_801C65B4 = D_80183844;
|
||||
D_801C65B8 = D_8018371C;
|
||||
}
|
||||
func_8013D53C();
|
||||
((void (*)(void))func_8013D53C)();
|
||||
if ((param_2 & 1) != 0) {
|
||||
if (D_801C65E8 != 0) {
|
||||
func_8013DD68();
|
||||
@@ -3425,7 +3425,138 @@ void func_8013D3D4(int param_1, int param_2)
|
||||
}
|
||||
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC07_007/nonmatchings/ov_SC07_007_jr_80131340", func_8013D53C);
|
||||
|
||||
typedef struct { u8 b[9]; } S9; /* 9-byte, align-1 -> unaligned block copy */
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
void func_8013D53C(void *arg0v) {
|
||||
|
||||
extern Rec9 D_80183860[];
|
||||
extern Rec12 D_80183898[];
|
||||
extern s32 D_801C65E0;
|
||||
extern u8 D_80078EAF;
|
||||
extern s32 D_801C65C8;
|
||||
extern u8 D_801C7AC2;
|
||||
extern u8 D_801C7B36;
|
||||
extern u8 D_801C79E2;
|
||||
extern u8 D_801C7AA4;
|
||||
extern u8 D_801C79B8;
|
||||
extern u8 D_801C79E1;
|
||||
extern u8 D_801C7A80;
|
||||
extern s32 D_801C7AA8;
|
||||
extern s32 D_801C65DC;
|
||||
extern s32 D_801C65D8;
|
||||
extern s32 D_801C65D4;
|
||||
extern s32 D_801C65C0;
|
||||
extern s32 D_801C65CC;
|
||||
extern s32 D_801C65D0;
|
||||
extern void *D_801C65B0;
|
||||
extern s32 D_801C65E8;
|
||||
extern void *D_801C65B8;
|
||||
Cmd_8013D53C *arg0 = arg0v;
|
||||
|
||||
extern u8 D_8018389C[];
|
||||
extern u8 D_801838A0[];
|
||||
extern unsigned char D_801C79D8;
|
||||
extern s16 *D_801C65BC;
|
||||
extern s32 D_801C65EC;
|
||||
extern s32 D_801C65F0;
|
||||
extern s32 D_801C65F4;
|
||||
s32 s0v;
|
||||
s32 t9v;
|
||||
s32 t8v;
|
||||
u8 b0, b1, b2;
|
||||
u8 pad[8]; /* dead BLKmode local: frame 0x10 -> 0x18, zero code */
|
||||
|
||||
if (!(D_801C65E0 & 1)) {
|
||||
D_801C65C8 = 1;
|
||||
} else {
|
||||
D_801C65C8 = D_80078EAF;
|
||||
}
|
||||
|
||||
b0 = ((u8 *)D_80183898)[D_801C65C8 * 12];
|
||||
D_801C7AC2 = b0;
|
||||
D_801C7B36 = b0;
|
||||
b1 = D_8018389C[D_801C65C8 * 12];
|
||||
D_801C79E2 = b1;
|
||||
D_801C7AA4 = b1;
|
||||
b2 = D_801838A0[D_801C65C8 * 12];
|
||||
D_801C79B8 = b2;
|
||||
D_801C79E1 = b2;
|
||||
|
||||
(*(S9 *)&D_801C79D8) = ((S9 *)D_80183860)[D_801C65C8];
|
||||
(*(S9 *)&D_801C7A80) = *(S9 *)(&D_801C79B8 + 0x20); /* same addr as (*(S9 *)&D_801C79D8); distinct sym defeats cse, keeps %hi/%lo */
|
||||
|
||||
D_801C7AA8 = 1;
|
||||
D_801C65DC = -1;
|
||||
D_801C65D8 = 0;
|
||||
D_801C65D4 = -1;
|
||||
D_801C65C0 = 0;
|
||||
D_801C65CC = 0;
|
||||
D_801C65D0 = 0;
|
||||
|
||||
if ((D_801C65E0 & 2) && (D_801C65C8 == 4)) {
|
||||
s0v = (*(s32 * *)&D_801C65B0)[18];
|
||||
t9v = (*(s32 * *)&D_801C65B0)[19];
|
||||
t8v = (*(s32 * *)&D_801C65B0)[20];
|
||||
} else {
|
||||
s32 *p = (s32 *)(D_801C65C8 * 12 + (s32) (*(s32 * *)&D_801C65B0)); /* block-local: local-alloc ties sum into mul chain */
|
||||
s0v = p[0];
|
||||
t9v = p[1];
|
||||
t8v = p[2];
|
||||
}
|
||||
|
||||
(*(Cmd_8013D53C * *)&D_801C65BC) = arg0;
|
||||
if (arg0 != 0) {
|
||||
if (D_801C65E8 != 0) {
|
||||
s32 *p = (s32 *)(D_801C65C8 * 12 + (s32) (*(s32 * *)&D_801C65B8));
|
||||
D_801C65EC = p[0];
|
||||
D_801C65F0 = p[1];
|
||||
D_801C65F4 = p[2];
|
||||
} else {
|
||||
while ((arg0->cmd & 0xFFFF) != 0xFF) {
|
||||
if ((arg0->cmd & 0xFFFF) == 9) {
|
||||
s32 n;
|
||||
s32 i;
|
||||
u16 *src;
|
||||
u16 *dst;
|
||||
n = arg0->w * arg0->h;
|
||||
i = 0;
|
||||
src = arg0->data;
|
||||
__asm__("" :: "r"(src)); /* +2 refs on src (depth-2): keeps src above i, below the mfhi temp */
|
||||
dst = src + n;
|
||||
if (n > 0) {
|
||||
do {
|
||||
u16 px;
|
||||
s32 r, g, b, out;
|
||||
__asm__("" :: "r"(i)); /* +3 refs on i (depth-3): lifts i over dst in the $t2 race */
|
||||
px = *src;
|
||||
r = ((px & 0x1F) * s0v) / 2560;
|
||||
g = (((px & 0x3E0) * t9v) / 2560) & 0x3E0;
|
||||
b = (((px & 0x7C00) * t8v) / 2560) & 0x7C00;
|
||||
out = r | g | b | (px & 0x8000);
|
||||
if (out == 0 && px != 0) {
|
||||
out = 0x8000;
|
||||
}
|
||||
*dst = out;
|
||||
dst++;
|
||||
i++;
|
||||
src++;
|
||||
} while (i < n);
|
||||
}
|
||||
}
|
||||
arg0++;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC07_007/nonmatchings/ov_SC07_007_jr_80131340", func_8013D8FC);
|
||||
|
||||
|
||||
@@ -680,3 +680,14 @@ typedef struct
|
||||
{
|
||||
s32 w[8];
|
||||
} Mtx8_8016CBC0;
|
||||
|
||||
/* Phase-29 decl-normalize+lift (func_8013D53C family) */
|
||||
typedef struct {
|
||||
u16 cmd; /* 0x0 */
|
||||
u16 pad2; /* 0x2 */
|
||||
u16 pad4; /* 0x4 */
|
||||
u16 pad6; /* 0x6 */
|
||||
s16 w; /* 0x8 */
|
||||
s16 h; /* 0xA */
|
||||
u16 *data; /* 0xC */
|
||||
} Cmd_8013D53C; /* 0x10 */
|
||||
|
||||
@@ -130,7 +130,18 @@ def fix(tu_text, fn, ref_decl=None):
|
||||
lines = tu_text.split('\n')
|
||||
depths = _brace_depths(tu_text)
|
||||
|
||||
remove = set() # decl line indices to drop
|
||||
# The canonical forward decl we REWRITE each divergent decl to. It matches the def (so no
|
||||
# `conflicting types`) AND keeps forward visibility for a caller whose reference precedes the def
|
||||
# in the TU — the func_8013D53C case (a file-scope `void f(void)` forward decl, def spliced BELOW
|
||||
# it) that *dropping* the decl broke (`func_8013D53C undeclared`). This is cast_call_sites' proven
|
||||
# shape: rewrite the decl to canonical, then cast every call to its original sig (byte-exact).
|
||||
canon_line = ref_decl.strip()
|
||||
if not canon_line.startswith('extern '):
|
||||
canon_line = 'extern ' + canon_line
|
||||
if not canon_line.endswith(';'):
|
||||
canon_line += ';'
|
||||
|
||||
rewrite = {} # decl line idx -> canonical decl replacement
|
||||
casts = [] # (start, end, cast_type_str)
|
||||
notes = []
|
||||
for i, ln in enumerate(lines):
|
||||
@@ -140,9 +151,13 @@ def fix(tu_text, fn, ref_decl=None):
|
||||
indent, _extern, ret, name, params = m.groups()
|
||||
if name != fn:
|
||||
continue
|
||||
# A no-prototype `void fn()` NEVER conflicts with a prototyped def in either TU order
|
||||
# (cdecl §51g) — skip it; only prototypes can be the `conflicting types` culprit here.
|
||||
if params.strip() in ('', 'void'):
|
||||
# A TRUE no-prototype `void fn()` (empty param list) NEVER conflicts with a prototyped def in
|
||||
# either TU order (cdecl §51g), and casting it is the §32 no-proto mis-cast trap — so skip it.
|
||||
# But `(void)` is NOT no-proto: it is a 0-param PROTOTYPE that genuinely conflicts with a
|
||||
# >0-param def (func_8013D53C: sibling `void f(void)` vs def `void f(void *)` — cdecl.compatible
|
||||
# returns False), so let the compatibility check below judge it. Skipping `(void)` here was the
|
||||
# bug that made this pass miss the (void)/(T) arity class (the BUILD SPEC's "distinct" D53C).
|
||||
if params.strip() == '':
|
||||
continue
|
||||
clean = f'extern {ret.strip()} {fn}({params});'
|
||||
try:
|
||||
@@ -154,24 +169,25 @@ def fix(tu_text, fn, ref_decl=None):
|
||||
dret, dptypes = _ccs.parse_sig(ret, params)
|
||||
cty = _ccs.cast_type(dret, dptypes)
|
||||
s, e = _scope_of(depths, i, len(lines))
|
||||
remove.add(i)
|
||||
rewrite[i] = indent + canon_line
|
||||
casts.append((s, e, cty))
|
||||
notes.append(f'{fn}@{i + 1}: dropped `{clean}`; cast calls in lines {s + 1}..{e + 1} to ({cty})')
|
||||
notes.append(f'{fn}@{i + 1}: `{clean}` -> `{canon_line}`; cast calls in lines {s + 1}..{e + 1} to ({cty})')
|
||||
|
||||
if not remove:
|
||||
if not rewrite:
|
||||
return tu_text, 0, notes
|
||||
|
||||
call_re = re.compile(rf'\b{re.escape(fn)}\s*\(')
|
||||
out = []
|
||||
for i, ln in enumerate(lines):
|
||||
if i in remove:
|
||||
continue # drop the divergent decl
|
||||
if i in rewrite:
|
||||
out.append(rewrite[i]) # rewrite the divergent decl to canonical (keeps visibility)
|
||||
continue
|
||||
if not _is_def_or_decl_line(ln, fn): # never cast a decl/def line's `fn(`
|
||||
for (s, e, cty) in casts:
|
||||
if s <= i <= e:
|
||||
ln = call_re.sub(f'(({cty}){fn})(', ln)
|
||||
out.append(ln)
|
||||
return '\n'.join(out), len(remove), notes
|
||||
return '\n'.join(out), len(rewrite), notes
|
||||
|
||||
|
||||
def main():
|
||||
|
||||
Reference in New Issue
Block a user