phase-36: S104 banks — the R23(case-label)/R34/R35/R36 pass: 915 classes in 1,757 s, MATCH 16 (bank line above); d20's minimum-lever func_80180324 (8 → 2 marked dead branches) PARKED for Drew — an invented always-false condition is not covered by ruling (a)

This commit is contained in:
Drew T
2026-09-10 23:50:01 -06:00
parent 2e05e1238d
commit 93e2a9170c
19 changed files with 518 additions and 280 deletions
@@ -0,0 +1,123 @@
void func_80180324(void *ent, void *spr, u32 *q, u32 *ot)
{
extern u8 *D_800A5E60;
Ft4_801833F0 *poly;
Drm_801833F0 *dm;
s32 vtx;
u32 flags;
s32 tp, abr, code, shift;
u16 x;
u32 y;
s32 tpage, clut, cy;
s32 su, sv, uu, vv;
s32 e; /* the sprite's far texel edge, u then v: read only by the dead arms */
u16 fl;
s32 i; /* also the second loop's counter (one variable: $t3 in both loops) */
u32 b;
poly = (Ft4_801833F0 *)D_800A5E60;
fl = *(u16 *)((s32)ent + 0x1E) & 0x8000;
flags = *(u32 *)((s32)ent + 4);
tp = (flags >> 24) & 3;
shift = 2 - tp;
x = *(u16 *)((s32)ent + 0x28) + (*(s16 *)((s32)spr + 4) >> shift);
y = *(u16 *)((s32)ent + 0x2A) + *(u16 *)((s32)spr + 6);
vtx = *(s32 *)((s32)ent + 0x20);
D_800A5E60 += 0xF0;
if (flags & 0x40000000) {
code = 0x2E;
abr = (flags >> 28) & 3;
} else {
code = 0x2C;
abr = 1;
}
tpage = (tp << 7) | (abr << 5) | ((y & 0x100) >> 4) | ((x & 0x3C0) >> 6) |
((y & 0x200) << 2);
b = *(u8 *)((s32)ent + 0x27);
cy = (b + 0x100) << 6;
if (b < 0xE0) {
clut = cy | 0x16;
} else {
clut = cy | 0x10;
}
{
s32 t = ((x - ((tpage & 0xF) << 6)) << shift) +
(*(u16 *)((s32)spr + 4) & ((1 << shift) - 1));
e = t + *(u8 *)((s32)spr + 2) - 1;
su = t;
if (tpage & 0x200) su = e; // !FAKE: dead-branch su (u edge) — combine folds the always-false tpage bit via nonzero_bits (combine.c:8716/6803) into an unconditional jump (combine.c:2353), jump2 deletes the arm after flow (toplev.c:3142), leaving `t + spr[2] - 1` dead as in the target (P36 S104 d20 minimum-lever)
}
y &= 0xFFFF;
if (tpage & 0x10) {
y -= 0x100;
sv = y;
} else {
sv = y;
}
e = sv + *(u8 *)((s32)spr + 3) - 1;
if (tpage & 0x200) su = e; // !FAKE: dead-branch su (v edge) — same mechanism; keeps `sv + spr[3] - 1` (P36 S104 d20 minimum-lever)
i = 1;
uu = su;
vv = sv;
for (; i < 13; i += 2, poly++) {
s32 k = (i - 1) * 4;
poly->tag.len = 9;
poly->code = code;
poly->tpage = tpage;
poly->u2 = su;
poly->v2 = sv;
poly->u0 = SR3_801833F0(vtx + k + 0x10) + uu;
poly->v0 = SR3_801833F0(vtx + k + 0x12) + vv;
poly->u1 = SR3_801833F0(vtx + i * 4 + 0x10) + uu;
poly->v1 = SR3_801833F0(vtx + i * 4 + 0x12) + vv;
/* k2 is recorded as a giv HERE, AFTER the u1/v1 mem giv - see (1). */
{
s32 k2 = (i + 1) * 4;
poly->u3 = SR3_801833F0(vtx + k2 + 0x10) + uu;
poly->v3 = SR3_801833F0(vtx + k2 + 0x12) + vv;
}
poly->clut = clut;
poly->r0 = *(u8 *)((s32)ent + 0x24);
poly->g0 = *(u8 *)((s32)ent + 0x25);
poly->b0 = *(u8 *)((s32)ent + 0x26);
poly->x0 = ((u16 *)q)[i * 2];
poly->y0 = ((u16 *)q)[i * 2 + 1];
poly->x1 = ((u16 *)q)[i * 2 + 2];
poly->y1 = ((u16 *)q)[i * 2 + 3];
poly->x2 = ((u16 *)q)[0];
poly->y2 = ((u16 *)q)[1];
poly->x3 = ((u16 *)q)[i * 2 + 4];
poly->y3 = ((u16 *)q)[i * 2 + 5];
if (fl != 0) {
ADDPRIM_801833F0(&ot[*(s32 *)((s32)q + 0x34 + (i >> 1) * 4)], poly);
} else {
ADDPRIM_801833F0(ot, poly);
}
}
poly[-1].x3 = ((u16 *)q)[2];
poly[-1].y3 = ((u16 *)q)[3];
poly[-1].u3 = su + SR3_801833F0(vtx + 0x10);
poly[-1].v3 = sv + SR3_801833F0(vtx + 0x12);
if (flags & 0x40000000) {
dm = (Drm_801833F0 *)poly;
if (fl != 0) {
i = 0;
D_800A5E60 += 0x30;
do {
i++;
dm->tag.len = 1;
dm->code0 = (abr << 5) | 0xE100000A;
ADDPRIM_801833F0(&ot[*(volatile s32 *)((s32)q + 0x34)], dm);
q = (u32 *)((s32)q + 4);
dm++;
} while (i < 6);
} else {
dm->code0 = (abr << 5) | 0xE100000A;
D_800A5E60 += 8;
dm->tag.len = 1;
ADDPRIM_801833F0(ot, dm);
}
}
}
@@ -0,0 +1,116 @@
# func_80180324 (ov_SC04_007) — agent d20, P36 T7 S104
**Result: `--try` score 0 (328/328), on this function AND all ten other members of its family (table:
`scratch/copies/TABLE.md`).** No register pin, no `asm` of any kind, no `volatile` added (the loop-2
`*(volatile s32 *)` cast was already in body_free.c and is still needed: without it 7, see (e)).
**It is NOT a lever-free close, and I do not claim one.** The body keeps two `if (tpage & 0x200) su = e;`
statements. `tpage` never has bit 9 set, so each test is always false: an invented identically-zero
condition, which step 6 refuses. Both are marked `// !FAKE: dead-branch` as the step-9 minimum-lever body.
Lever count 8 → 2 (tree: 1 `$0` pin + 6 asm keepalives + the pre-existing volatile cast; now: 2
C-level dead branches + the same volatile cast; 0 pins, 0 asm).
Drew's ruling needed: is a C-level dead branch that reproduces a real late-dead branch in the original an
acceptable marked lever, or should it go back to asm keepalives?
## (a) The residual
The lever-free text is 10 instructions short (318 vs 328):
- the target computes `t + spr[2] - 1` and `sv + spr[3] - 1` (lbu/addu/addiu each, the second with its
load-delay nop) and never reads either;
- it keeps `move s3,a0` (su := t) in the lbu delay slot, and the chain reads `a0` (t), not `s3`;
- it keeps the sv if/else as `beqz; j; addiu s2,a1,-256 | move s2,a1`, where the free text gets
if-converted;
- in the loop, the counter `i` / the 0xFFFFFF mask / the vtx+4 giv are permuted over t3/t4/t5, and
sv/uu/vv/0xFF000000 are permuted over a1/s0/s1/s2.
## (b) Mechanism: passes and decisions (every claim here tested on bytes unless it says otherwise)
1. **Dead code survives only if its consumer disappears AFTER flow.** flow's final pass deletes dead sets
(`flow.c:1478-1490`), and nothing re-runs flow later. combine (after flow) folds a test on a pseudo whose
`nonzero_bits` (`combine.c:6803`, `simplify_comparison` `:8716`) prove it constant. That turns the
conditional jump into `(set (pc) (label_ref))` (`combine.c:2353`; seen in `.combine`: jump_insn 164).
jump2 (`toplev.c:3142`, after sched2) then deletes the unreachable arm. The chain that fed only that arm
stays as dead code, byte-exact. Micro-reproduced (`scratch/micro/t3.c`) and on the real function.
This REFUTES the family exemplar's note 1 (ov_SC02_028 `func_801833F0` header, "gcc-2.7.2 deletes any
pure-C spelling").
2. **The copy must follow the chain's read of t in sched1's order, in the same block.** If the copy comes
first and t does not die in it, local-alloc's `optimize_reg_copy_1` (`local-alloc.c:700`) rewrites the
chain to read su. Every separate-temp variant read `s3`/`s2`. The copy is placed last only if it wins
sched1's tie:
- `adjust_priority` boosts a "birthing" insn (`sched.c:2469`, `:2539`: dest set once and live after).
With a fresh `ue`, the chain's final addiu is birthing and wins, and the copy lands above it.
- Declaring ONE variable `e` for both edges (two live sets) un-boosts it. The tie then goes to
`INSN_LUID` (`sched.c:2428`), so the copy, textually later, is scheduled last.
- t then dies in the copy. `combine_regs` refuses to tie it to the global su (`local-alloc.c:1774`), so
`move s3,a0` survives. sched2 moves it into the lbu delay slot.
3. **sv if/else kept as j+else.** jump.c's `if (...) x = a; else x = b` → `x = b; if (...) x = a` rewrite
(`jump.c:699`) needs a ONE-insn then-arm (`jump.c:748-749`). Writing the then-arm as
`y -= 0x100; sv = y;` gives two insns in every pre-flow jump pass. cse's `(set REG0 REG1)` swap
(`cse.c:7440`) plus flow then fold it back to one `addiu s2,a1,-256`.
4. **Loop permutation t3/t4/t5.** `allocno_compare` (`global.c:587-600`) ranks by `floor_log2(refs)·refs/live`.
`i` (9/114 → 2368) ranked below the hoisted 0xFFFFFF (13/111 → 3513). Using `i` as the second loop's
counter too (the target has i and m in the SAME `$t3`, so they are one variable) gives 16/152 → 4210.
i is then allocated first and takes t3. This also puts vtx (8/184 → 1304) back below the k2 giv
(1320.8), so the tree's vtx keepalive becomes unnecessary.
5. **a1/s0/s1/s2 permutation.** A v dead arm written as `sv = e` gives sv 8 refs → 1764, so sv takes a1
before vv. Writing the v arm into `su` instead gives sv 7/135 → 1037. That drops sv below vv (1250),
uu (1238.9) and the 0xFF000000 constant (1238.5), which is the target's order: vv=a1, uu=s0, const=s1,
sv=s2, su=s3.
## (c) The moves (from body_free.c, 43)
- one `s32 e` holds both edge values: `e = t + w - 1; su = t; if (C) su = e;` and, after the tpage
if/else, `e = sv + h - 1; if (C) su = e;` (C = `tpage & 0x200`, always false). 43 → 32.
- loop 2's counter `m` replaced by `i` (declaration of `m` deleted). 32 → 18.
- the v dead arm writes `su`, not `sv`. 18 → 1.
- then-arm `y -= 0x100; sv = y;` (else `sv = y;`, the `(u16)` cast gone). 1 → 0.
- conditions that also give 0: any pair drawn from {`tp & 4`, `tpage & 0x200`, `tpage & 0x400`,
`tpage & 0x1000`} (13 of 256 pairs scored 0; `scratch/c2search.py`).
## (d) Generator proposals
- **G-a (natural, broad):** when a tree has `x = y + zr` (a `$0`-pin copy) in an else-arm whose then-arm is
`x = y OP K`, rewrite the then-arm as `y OP= K; x = y;` and the else as `x = y`. The two-insn arm blocks
jump.c:748's if-conversion; cse.c:7440 and flow fold it back to one insn.
- **G-b (natural):** when a tree keeps `asm("" :: "r"(i))` density reads on a loop counter, and a LATER
loop's counter lands in the same hard register in the target, merge the two counters into one variable
(refs and live length add; global.c:595).
- **G-c (lever-to-lever, marked):** when a tree keeps `asm("" :: "r"(expr))` for a value the target
computes and never reads, replace it with `if (<test combine proves false>) X = expr;`. X is a variable
set on the live path and live afterwards; enumerate X, and enumerate the test over bits a live pseudo
provably lacks. Same lever count, but it moves the lever from asm to C and lets the other levers go.
## (e) What did not work (byte evidence)
- A fresh `ue`/`ve` per edge: the chain reads s3 (optimize_reg_copy_1), 60-87.
- `su = C ? e : t` with C always true (`if (!C) su = t; else su = e;`): combine leaves
`move v0,zero; bnez v0`, 60.
- The same test on `fl` twice: cse shares the and-result and combine cannot fold both jumps (`move v1,zero`).
Tests on `fl` also add refs to fl and change which pseudos spill.
- The v arm writing `sv`/`vv`/`uu`/`y`, or a su/sv swap: 29-38.
- `i = 1` before the dead branch with the branch holding the copies: a loop-entry test appears
(slti/beqz), 96-141.
- sv else-arm `(u16)y`, `(u32)(u16)y`, `y & 0xFFFF`: blocks the if-conversion but leaves
`andi s2,a1,0xffff`, 1. combine only simplifies inside a LOG_LINK pair, and the else block has one insn.
A fresh masked `yy` reshuffles the whole allocation (109-126). Ternary / `y -= ((c) ? 0x100 : 0)`: 29.
Inverted test, `== 0` test or switch: the arms swap, 3.
- Dropping the loop-2 volatile, or spelling that read as `((s32 *)q)[13]` + `q++`, a struct field, a local
`z` pointer, `ot + …`, or indexing by the counter: 5-7. loop.c eliminates the q biv.
## (f) Where the method fell short
- Neither the method nor the cookbook explains how a dead value can survive, and the exemplar header said
it cannot. The "DEAD CODE IS REAL" keepalive is a reproducible pass sequence (flow → combine fold →
jump2), testable in a 10-line micro. A `.combine` grep for `(set (pc) (label_ref` would have shown it.
- The allocation table misled until I matched pseudo numbers to variables by hand (declaration order).
The tool should print variable names.
- `pkill -f` killed my own shell once (the memory note is right). The coordinator's regen fleet was running
(40 `--try` processes), so compiles took ~2 s each.
## (g) Structs
Struct typing does not plausibly change what keeps the two dead-branch levers. They exist because the
target contains unread arithmetic, and only a consumer removed after flow (or an asm use) produces that.
Tested: a UV pair as a local struct goes to the stack (stores kept); as a union it vanishes but leaves an
orphan 48-byte frame (`scratch/micro/t4.c`). Neither is the target shape.
For the pre-existing loop-2 volatile, a body-local `struct { u32 a[13]; s32 z; } *` field read scores 7,
the same as the plain read: loop.c's biv elimination does not look at MEM_IN_STRUCT_P, so a struct is not
the missing piece there either.
The one struct question left open: the original likely had real flip/UV-edge code (a sprite RECT struct
or flag field) whose test the compiler could prove false. Finding that field in the entity or sprite
layout would turn the invented `tpage & 0x200` into the original's test.
+185 -185
View File
@@ -1,7 +1,7 @@
{
"head": "97e5d721b",
"head": "2e05e1238",
"stamp": "15956e4a96c4",
"generated": "2026-09-10 23:47",
"generated": "2026-09-10 23:48",
"aliases": [
"main",
"ov_SC03_014",
@@ -21,207 +21,207 @@
"main": {
"objects": 85,
"identical": 85,
"seconds": 10.692999999999998,
"mean_s": 0.126
"seconds": 9.173999999999998,
"mean_s": 0.108
},
"ov_SC03_014": {
"objects": 32,
"identical": 32,
"seconds": 7.435,
"mean_s": 0.232
"seconds": 6.347,
"mean_s": 0.198
},
"ov_SC03_015": {
"objects": 32,
"identical": 32,
"seconds": 6.612000000000001,
"mean_s": 0.207
"seconds": 6.3530000000000015,
"mean_s": 0.199
},
"ov_SC04_011": {
"objects": 28,
"identical": 28,
"seconds": 6.183000000000002,
"mean_s": 0.221
"seconds": 5.93,
"mean_s": 0.212
}
},
"per_object_seconds": {
"build/src/800.o": 1.092,
"build/src/800_b.o": 0.105,
"build/src/800_b_2.o": 0.443,
"build/src/800_b_o0a.o": 0.139,
"build/src/800_c.o": 0.284,
"build/src/800b2.o": 0.139,
"build/src/apicard1.o": 0.104,
"build/src/apicard2.o": 0.153,
"build/src/apicard3.o": 0.102,
"build/src/apicard4.o": 0.106,
"build/src/apicard5.o": 0.103,
"build/src/apicard6.o": 0.121,
"build/src/apicard7.o": 0.078,
"build/src/boot.o": 0.129,
"build/src/gap.o": 0.086,
"build/src/libapi1.o": 0.103,
"build/src/libapi2.o": 0.159,
"build/src/800.o": 0.572,
"build/src/800_b.o": 0.111,
"build/src/800_b_2.o": 0.294,
"build/src/800_b_o0a.o": 0.179,
"build/src/800_c.o": 0.209,
"build/src/800b2.o": 0.144,
"build/src/apicard1.o": 0.107,
"build/src/apicard2.o": 0.167,
"build/src/apicard3.o": 0.088,
"build/src/apicard4.o": 0.2,
"build/src/apicard5.o": 0.172,
"build/src/apicard6.o": 0.085,
"build/src/apicard7.o": 0.1,
"build/src/boot.o": 0.125,
"build/src/gap.o": 0.066,
"build/src/libapi1.o": 0.201,
"build/src/libapi2.o": 0.084,
"build/src/libc2_1.o": 0.101,
"build/src/libc2_2.o": 0.117,
"build/src/libcd1.o": 0.15,
"build/src/libcd2.o": 0.123,
"build/src/libetc.o": 0.079,
"build/src/libgpu.o": 0.084,
"build/src/libgpu2.o": 0.125,
"build/src/libgs1.o": 0.124,
"build/src/libgs2.o": 0.082,
"build/src/libgs3.o": 0.116,
"build/src/libgs4.o": 0.1,
"build/src/libgs5.o": 0.085,
"build/src/libgs6.o": 0.094,
"build/src/libgs7.o": 0.088,
"build/src/libgs8.o": 0.113,
"build/src/libgte1.o": 0.108,
"build/src/libgte10.o": 0.068,
"build/src/libgte11.o": 0.111,
"build/src/libgte12.o": 0.108,
"build/src/libgte13.o": 0.101,
"build/src/libgte14.o": 0.085,
"build/src/libgte15.o": 0.086,
"build/src/libgte16.o": 0.102,
"build/src/libgte17.o": 0.085,
"build/src/libgte18.o": 0.154,
"build/src/libgte19.o": 0.087,
"build/src/libgte2.o": 0.079,
"build/src/libgte20.o": 0.112,
"build/src/libgte21.o": 0.124,
"build/src/libgte22.o": 0.091,
"build/src/libgte23.o": 0.077,
"build/src/libgte24.o": 0.108,
"build/src/libgte25.o": 0.095,
"build/src/libgte26.o": 0.1,
"build/src/libgte27.o": 0.133,
"build/src/libgte28.o": 0.115,
"build/src/libgte29.o": 0.123,
"build/src/libgte3.o": 0.073,
"build/src/libgte30.o": 0.124,
"build/src/libgte4.o": 0.095,
"build/src/libgte5.o": 0.133,
"build/src/libgte6.o": 0.102,
"build/src/libgte7.o": 0.132,
"build/src/libgte8.o": 0.083,
"build/src/libgte9.o": 0.148,
"build/src/libmcrd1.o": 0.109,
"build/src/libmcrd2.o": 0.122,
"build/src/libpad1.o": 0.078,
"build/src/libpad2.o": 0.121,
"build/src/sgap.o": 0.097,
"build/src/sgap_2.o": 0.084,
"build/src/sgap_3.o": 0.116,
"build/src/sgap_4.o": 0.124,
"build/src/sgap_5.o": 0.137,
"build/src/sgap_6.o": 0.085,
"build/src/sgap_8.o": 0.18,
"build/src/snd1.o": 0.095,
"build/src/snd10.o": 0.105,
"build/src/snd11.o": 0.09,
"build/src/snd12.o": 0.099,
"build/src/snd2.o": 0.116,
"build/src/snd3.o": 0.117,
"build/src/snd4.o": 0.113,
"build/src/snd5.o": 0.117,
"build/src/snd6.o": 0.128,
"build/src/snd7.o": 0.099,
"build/src/snd8.o": 0.077,
"build/src/snd9.o": 0.115,
"build/src/ov_SC03_014/ov_SC03_014.o": 0.2,
"build/src/ov_SC03_014/ov_SC03_014_after.o": 0.731,
"build/src/ov_SC03_014/ov_SC03_014_jr_8012ACE0.o": 0.486,
"build/src/ov_SC03_014/ov_SC03_014_jr_80135888.o": 0.119,
"build/src/ov_SC03_014/ov_SC03_014_jr_80135A4C.o": 0.091,
"build/src/ov_SC03_014/ov_SC03_014_jr_80135D20.o": 0.318,
"build/src/ov_SC03_014/ov_SC03_014_jr_801380E0.o": 0.234,
"build/src/ov_SC03_014/ov_SC03_014_jr_8013C98C.o": 0.182,
"build/src/ov_SC03_014/ov_SC03_014_jr_8013F350.o": 0.113,
"build/src/ov_SC03_014/ov_SC03_014_jr_8013FFD8.o": 0.15,
"build/src/ov_SC03_014/ov_SC03_014_jr_80140608.o": 0.219,
"build/src/ov_SC03_014/ov_SC03_014_jr_8015444C.o": 0.143,
"build/src/ov_SC03_014/ov_SC03_014_jr_80154C24.o": 0.327,
"build/src/ov_SC03_014/ov_SC03_014_jr_801588CC.o": 0.167,
"build/src/ov_SC03_014/ov_SC03_014_jr_80159C84.o": 0.139,
"build/src/ov_SC03_014/ov_SC03_014_jr_8015A3C8.o": 0.118,
"build/src/ov_SC03_014/ov_SC03_014_jr_8015AE2C.o": 0.155,
"build/src/ov_SC03_014/ov_SC03_014_jr_8015C32C.o": 0.674,
"build/src/ov_SC03_014/ov_SC03_014_jr_8016AB6C.o": 0.338,
"build/src/ov_SC03_014/ov_SC03_014_jr_80171B4C.o": 0.14,
"build/src/ov_SC03_014/ov_SC03_014_jr_801734BC.o": 0.327,
"build/src/ov_SC03_014/ov_SC03_014_jr_801789AC.o": 0.114,
"build/src/ov_SC03_014/ov_SC03_014_jr_80178D40.o": 0.128,
"build/src/ov_SC03_014/ov_SC03_014_jr_8017A4AC.o": 0.114,
"build/src/ov_SC03_014/ov_SC03_014_jr_8017AE2C.o": 0.372,
"build/src/ov_SC03_014/ov_SC03_014_jr_8017EB7C.o": 0.316,
"build/src/ov_SC03_014/ov_SC03_014_jr_80184440.o": 0.159,
"build/src/ov_SC03_014/ov_SC03_014_jr_801848E4.o": 0.391,
"build/src/ov_SC03_014/ov_SC03_014_o0b.o": 0.115,
"build/src/ov_SC03_014/ov_SC03_014_o0c.o": 0.112,
"build/src/libc2_2.o": 0.084,
"build/src/libcd1.o": 0.084,
"build/src/libcd2.o": 0.069,
"build/src/libetc.o": 0.073,
"build/src/libgpu.o": 0.064,
"build/src/libgpu2.o": 0.046,
"build/src/libgs1.o": 0.043,
"build/src/libgs2.o": 0.034,
"build/src/libgs3.o": 0.063,
"build/src/libgs4.o": 0.07,
"build/src/libgs5.o": 0.053,
"build/src/libgs6.o": 0.093,
"build/src/libgs7.o": 0.063,
"build/src/libgs8.o": 0.066,
"build/src/libgte1.o": 0.08,
"build/src/libgte10.o": 0.082,
"build/src/libgte11.o": 0.076,
"build/src/libgte12.o": 0.089,
"build/src/libgte13.o": 0.086,
"build/src/libgte14.o": 0.098,
"build/src/libgte15.o": 0.091,
"build/src/libgte16.o": 0.075,
"build/src/libgte17.o": 0.093,
"build/src/libgte18.o": 0.126,
"build/src/libgte19.o": 0.115,
"build/src/libgte2.o": 0.11,
"build/src/libgte20.o": 0.105,
"build/src/libgte21.o": 0.084,
"build/src/libgte22.o": 0.098,
"build/src/libgte23.o": 0.094,
"build/src/libgte24.o": 0.103,
"build/src/libgte25.o": 0.093,
"build/src/libgte26.o": 0.084,
"build/src/libgte27.o": 0.099,
"build/src/libgte28.o": 0.123,
"build/src/libgte29.o": 0.11,
"build/src/libgte3.o": 0.125,
"build/src/libgte30.o": 0.087,
"build/src/libgte4.o": 0.084,
"build/src/libgte5.o": 0.117,
"build/src/libgte6.o": 0.118,
"build/src/libgte7.o": 0.104,
"build/src/libgte8.o": 0.074,
"build/src/libgte9.o": 0.072,
"build/src/libmcrd1.o": 0.13,
"build/src/libmcrd2.o": 0.124,
"build/src/libpad1.o": 0.085,
"build/src/libpad2.o": 0.107,
"build/src/sgap.o": 0.114,
"build/src/sgap_2.o": 0.073,
"build/src/sgap_3.o": 0.125,
"build/src/sgap_4.o": 0.136,
"build/src/sgap_5.o": 0.092,
"build/src/sgap_6.o": 0.1,
"build/src/sgap_8.o": 0.088,
"build/src/snd1.o": 0.119,
"build/src/snd10.o": 0.116,
"build/src/snd11.o": 0.074,
"build/src/snd12.o": 0.107,
"build/src/snd2.o": 0.081,
"build/src/snd3.o": 0.081,
"build/src/snd4.o": 0.072,
"build/src/snd5.o": 0.137,
"build/src/snd6.o": 0.088,
"build/src/snd7.o": 0.091,
"build/src/snd8.o": 0.099,
"build/src/snd9.o": 0.13,
"build/src/ov_SC03_014/ov_SC03_014.o": 0.18,
"build/src/ov_SC03_014/ov_SC03_014_after.o": 0.659,
"build/src/ov_SC03_014/ov_SC03_014_jr_8012ACE0.o": 0.541,
"build/src/ov_SC03_014/ov_SC03_014_jr_80135888.o": 0.097,
"build/src/ov_SC03_014/ov_SC03_014_jr_80135A4C.o": 0.107,
"build/src/ov_SC03_014/ov_SC03_014_jr_80135D20.o": 0.174,
"build/src/ov_SC03_014/ov_SC03_014_jr_801380E0.o": 0.216,
"build/src/ov_SC03_014/ov_SC03_014_jr_8013C98C.o": 0.181,
"build/src/ov_SC03_014/ov_SC03_014_jr_8013F350.o": 0.109,
"build/src/ov_SC03_014/ov_SC03_014_jr_8013FFD8.o": 0.083,
"build/src/ov_SC03_014/ov_SC03_014_jr_80140608.o": 0.22,
"build/src/ov_SC03_014/ov_SC03_014_jr_8015444C.o": 0.127,
"build/src/ov_SC03_014/ov_SC03_014_jr_80154C24.o": 0.239,
"build/src/ov_SC03_014/ov_SC03_014_jr_801588CC.o": 0.118,
"build/src/ov_SC03_014/ov_SC03_014_jr_80159C84.o": 0.105,
"build/src/ov_SC03_014/ov_SC03_014_jr_8015A3C8.o": 0.076,
"build/src/ov_SC03_014/ov_SC03_014_jr_8015AE2C.o": 0.156,
"build/src/ov_SC03_014/ov_SC03_014_jr_8015C32C.o": 0.57,
"build/src/ov_SC03_014/ov_SC03_014_jr_8016AB6C.o": 0.305,
"build/src/ov_SC03_014/ov_SC03_014_jr_80171B4C.o": 0.175,
"build/src/ov_SC03_014/ov_SC03_014_jr_801734BC.o": 0.346,
"build/src/ov_SC03_014/ov_SC03_014_jr_801789AC.o": 0.102,
"build/src/ov_SC03_014/ov_SC03_014_jr_80178D40.o": 0.139,
"build/src/ov_SC03_014/ov_SC03_014_jr_8017A4AC.o": 0.12,
"build/src/ov_SC03_014/ov_SC03_014_jr_8017AE2C.o": 0.183,
"build/src/ov_SC03_014/ov_SC03_014_jr_8017EB7C.o": 0.243,
"build/src/ov_SC03_014/ov_SC03_014_jr_80184440.o": 0.068,
"build/src/ov_SC03_014/ov_SC03_014_jr_801848E4.o": 0.375,
"build/src/ov_SC03_014/ov_SC03_014_o0b.o": 0.069,
"build/src/ov_SC03_014/ov_SC03_014_o0c.o": 0.085,
"build/src/ov_SC03_014/ov_SC03_014_o0d.o": 0.077,
"build/src/ov_SC03_014/ov_SC03_014_o0e.o": 0.166,
"build/src/ov_SC03_015/ov_SC03_015.o": 0.171,
"build/src/ov_SC03_015/ov_SC03_015_after.o": 0.631,
"build/src/ov_SC03_015/ov_SC03_015_jr_8012ACE0.o": 0.538,
"build/src/ov_SC03_015/ov_SC03_015_jr_80135888.o": 0.089,
"build/src/ov_SC03_015/ov_SC03_015_jr_80135A4C.o": 0.098,
"build/src/ov_SC03_015/ov_SC03_015_jr_80135D20.o": 0.161,
"build/src/ov_SC03_015/ov_SC03_015_jr_801380E0.o": 0.225,
"build/src/ov_SC03_015/ov_SC03_015_jr_8013C98C.o": 0.176,
"build/src/ov_SC03_015/ov_SC03_015_jr_8013F350.o": 0.141,
"build/src/ov_SC03_015/ov_SC03_015_jr_8013FFD8.o": 0.091,
"build/src/ov_SC03_015/ov_SC03_015_jr_80140608.o": 0.258,
"build/src/ov_SC03_015/ov_SC03_015_jr_8015444C.o": 0.136,
"build/src/ov_SC03_015/ov_SC03_015_jr_80154C24.o": 0.206,
"build/src/ov_SC03_015/ov_SC03_015_jr_801588CC.o": 0.121,
"build/src/ov_SC03_015/ov_SC03_015_jr_80159C84.o": 0.08,
"build/src/ov_SC03_015/ov_SC03_015_jr_8015A3C8.o": 0.092,
"build/src/ov_SC03_015/ov_SC03_015_jr_8015AE2C.o": 0.146,
"build/src/ov_SC03_015/ov_SC03_015_jr_8015C32C.o": 0.629,
"build/src/ov_SC03_015/ov_SC03_015_jr_8016AB6C.o": 0.404,
"build/src/ov_SC03_015/ov_SC03_015_jr_80171B4C.o": 0.13,
"build/src/ov_SC03_015/ov_SC03_015_jr_801734BC.o": 0.31,
"build/src/ov_SC03_015/ov_SC03_015_jr_801789AC.o": 0.115,
"build/src/ov_SC03_015/ov_SC03_015_jr_80178D40.o": 0.146,
"build/src/ov_SC03_015/ov_SC03_015_jr_8017A4AC.o": 0.131,
"build/src/ov_SC03_015/ov_SC03_015_jr_8017AE2C.o": 0.203,
"build/src/ov_SC03_015/ov_SC03_015_jr_8017EB7C.o": 0.252,
"build/src/ov_SC03_015/ov_SC03_015_jr_80184440.o": 0.07,
"build/src/ov_SC03_015/ov_SC03_015_jr_801848E4.o": 0.405,
"build/src/ov_SC03_015/ov_SC03_015_o0b.o": 0.081,
"build/src/ov_SC03_015/ov_SC03_015_o0c.o": 0.124,
"build/src/ov_SC03_015/ov_SC03_015_o0d.o": 0.101,
"build/src/ov_SC03_015/ov_SC03_015_o0e.o": 0.151,
"build/src/ov_SC04_011/ov_SC04_011.o": 0.182,
"build/src/ov_SC04_011/ov_SC04_011_after.o": 0.651,
"build/src/ov_SC04_011/ov_SC04_011_jr_8012ACE0.o": 0.511,
"build/src/ov_SC04_011/ov_SC04_011_jr_80135888.o": 0.095,
"build/src/ov_SC04_011/ov_SC04_011_jr_80135A4C.o": 0.094,
"build/src/ov_SC03_014/ov_SC03_014_o0e.o": 0.102,
"build/src/ov_SC03_015/ov_SC03_015.o": 0.184,
"build/src/ov_SC03_015/ov_SC03_015_after.o": 0.624,
"build/src/ov_SC03_015/ov_SC03_015_jr_8012ACE0.o": 0.516,
"build/src/ov_SC03_015/ov_SC03_015_jr_80135888.o": 0.111,
"build/src/ov_SC03_015/ov_SC03_015_jr_80135A4C.o": 0.11,
"build/src/ov_SC03_015/ov_SC03_015_jr_80135D20.o": 0.138,
"build/src/ov_SC03_015/ov_SC03_015_jr_801380E0.o": 0.226,
"build/src/ov_SC03_015/ov_SC03_015_jr_8013C98C.o": 0.136,
"build/src/ov_SC03_015/ov_SC03_015_jr_8013F350.o": 0.091,
"build/src/ov_SC03_015/ov_SC03_015_jr_8013FFD8.o": 0.081,
"build/src/ov_SC03_015/ov_SC03_015_jr_80140608.o": 0.237,
"build/src/ov_SC03_015/ov_SC03_015_jr_8015444C.o": 0.091,
"build/src/ov_SC03_015/ov_SC03_015_jr_80154C24.o": 0.217,
"build/src/ov_SC03_015/ov_SC03_015_jr_801588CC.o": 0.125,
"build/src/ov_SC03_015/ov_SC03_015_jr_80159C84.o": 0.104,
"build/src/ov_SC03_015/ov_SC03_015_jr_8015A3C8.o": 0.091,
"build/src/ov_SC03_015/ov_SC03_015_jr_8015AE2C.o": 0.154,
"build/src/ov_SC03_015/ov_SC03_015_jr_8015C32C.o": 0.665,
"build/src/ov_SC03_015/ov_SC03_015_jr_8016AB6C.o": 0.364,
"build/src/ov_SC03_015/ov_SC03_015_jr_80171B4C.o": 0.138,
"build/src/ov_SC03_015/ov_SC03_015_jr_801734BC.o": 0.291,
"build/src/ov_SC03_015/ov_SC03_015_jr_801789AC.o": 0.12,
"build/src/ov_SC03_015/ov_SC03_015_jr_80178D40.o": 0.161,
"build/src/ov_SC03_015/ov_SC03_015_jr_8017A4AC.o": 0.107,
"build/src/ov_SC03_015/ov_SC03_015_jr_8017AE2C.o": 0.216,
"build/src/ov_SC03_015/ov_SC03_015_jr_8017EB7C.o": 0.268,
"build/src/ov_SC03_015/ov_SC03_015_jr_80184440.o": 0.094,
"build/src/ov_SC03_015/ov_SC03_015_jr_801848E4.o": 0.345,
"build/src/ov_SC03_015/ov_SC03_015_o0b.o": 0.072,
"build/src/ov_SC03_015/ov_SC03_015_o0c.o": 0.086,
"build/src/ov_SC03_015/ov_SC03_015_o0d.o": 0.092,
"build/src/ov_SC03_015/ov_SC03_015_o0e.o": 0.098,
"build/src/ov_SC04_011/ov_SC04_011.o": 0.162,
"build/src/ov_SC04_011/ov_SC04_011_after.o": 0.597,
"build/src/ov_SC04_011/ov_SC04_011_jr_8012ACE0.o": 0.497,
"build/src/ov_SC04_011/ov_SC04_011_jr_80135888.o": 0.102,
"build/src/ov_SC04_011/ov_SC04_011_jr_80135A4C.o": 0.08,
"build/src/ov_SC04_011/ov_SC04_011_jr_80135D20.o": 0.153,
"build/src/ov_SC04_011/ov_SC04_011_jr_801380E0.o": 0.205,
"build/src/ov_SC04_011/ov_SC04_011_jr_8013C98C.o": 0.14,
"build/src/ov_SC04_011/ov_SC04_011_jr_8013F350.o": 0.128,
"build/src/ov_SC04_011/ov_SC04_011_jr_8013FFD8.o": 0.107,
"build/src/ov_SC04_011/ov_SC04_011_jr_80140608.o": 0.241,
"build/src/ov_SC04_011/ov_SC04_011_jr_8015444C.o": 0.112,
"build/src/ov_SC04_011/ov_SC04_011_jr_80154C24.o": 0.235,
"build/src/ov_SC04_011/ov_SC04_011_jr_801588CC.o": 0.14,
"build/src/ov_SC04_011/ov_SC04_011_jr_80159C84.o": 0.116,
"build/src/ov_SC04_011/ov_SC04_011_jr_8015A3C8.o": 0.112,
"build/src/ov_SC04_011/ov_SC04_011_jr_8015AE2C.o": 0.174,
"build/src/ov_SC04_011/ov_SC04_011_jr_8015C32C.o": 0.589,
"build/src/ov_SC04_011/ov_SC04_011_jr_8016AB6C.o": 0.35,
"build/src/ov_SC04_011/ov_SC04_011_jr_80171B4C.o": 0.125,
"build/src/ov_SC04_011/ov_SC04_011_jr_801734BC.o": 0.279,
"build/src/ov_SC04_011/ov_SC04_011_jr_801789AC.o": 0.082,
"build/src/ov_SC04_011/ov_SC04_011_jr_80178D40.o": 0.129,
"build/src/ov_SC04_011/ov_SC04_011_jr_8017A4AC.o": 0.135,
"build/src/ov_SC04_011/ov_SC04_011_jr_8017AE2C.o": 0.155,
"build/src/ov_SC04_011/ov_SC04_011_jr_8017D494.o": 0.755,
"build/src/ov_SC04_011/ov_SC04_011_o0b.o": 0.062,
"build/src/ov_SC04_011/ov_SC04_011_o0c.o": 0.126
"build/src/ov_SC04_011/ov_SC04_011_jr_801380E0.o": 0.212,
"build/src/ov_SC04_011/ov_SC04_011_jr_8013C98C.o": 0.139,
"build/src/ov_SC04_011/ov_SC04_011_jr_8013F350.o": 0.131,
"build/src/ov_SC04_011/ov_SC04_011_jr_8013FFD8.o": 0.083,
"build/src/ov_SC04_011/ov_SC04_011_jr_80140608.o": 0.225,
"build/src/ov_SC04_011/ov_SC04_011_jr_8015444C.o": 0.118,
"build/src/ov_SC04_011/ov_SC04_011_jr_80154C24.o": 0.279,
"build/src/ov_SC04_011/ov_SC04_011_jr_801588CC.o": 0.187,
"build/src/ov_SC04_011/ov_SC04_011_jr_80159C84.o": 0.089,
"build/src/ov_SC04_011/ov_SC04_011_jr_8015A3C8.o": 0.113,
"build/src/ov_SC04_011/ov_SC04_011_jr_8015AE2C.o": 0.121,
"build/src/ov_SC04_011/ov_SC04_011_jr_8015C32C.o": 0.553,
"build/src/ov_SC04_011/ov_SC04_011_jr_8016AB6C.o": 0.345,
"build/src/ov_SC04_011/ov_SC04_011_jr_80171B4C.o": 0.16,
"build/src/ov_SC04_011/ov_SC04_011_jr_801734BC.o": 0.257,
"build/src/ov_SC04_011/ov_SC04_011_jr_801789AC.o": 0.083,
"build/src/ov_SC04_011/ov_SC04_011_jr_80178D40.o": 0.135,
"build/src/ov_SC04_011/ov_SC04_011_jr_8017A4AC.o": 0.09,
"build/src/ov_SC04_011/ov_SC04_011_jr_8017AE2C.o": 0.16,
"build/src/ov_SC04_011/ov_SC04_011_jr_8017D494.o": 0.683,
"build/src/ov_SC04_011/ov_SC04_011_o0b.o": 0.077,
"build/src/ov_SC04_011/ov_SC04_011_o0c.o": 0.099
},
"ok": true,
"seconds": 3.8
"seconds": 8.7
}
File diff suppressed because one or more lines are too long
+3 -4
View File
@@ -7598,13 +7598,12 @@ void CdReadSectorReadyCB(u8 reason) {
XRECT dead;
u32 *q;
XRECT *r;
register s32 i __asm__("$18"); // !FAKE: pin $18 — NEEDED DIFFERS (P36 rung B tus9)
s32 i;
s32 n, pos, res, b;
s32 tmp;
s32 k80;
s32 one;
s32 dst;
s32 cnt;
s32 dst4;
if (reason != 1) goto endReason;
@@ -7753,8 +7752,8 @@ void CdReadSectorReadyCB(u8 reason) {
break;
case 4:
if (p->words < 0x801) {
cnt = (p->words + 3) / 4;
func_80043994(lzss_sectorStagingBuf, cnt);
i = (p->words + 3) / 4;
func_80043994(lzss_sectorStagingBuf, i);
if (func_8002FC64(p->words, lzss_sectorStagingBuf) == 0) goto stageFail;
p->count++;
if (p->flags != 0) goto phaseDone;
+2 -3
View File
@@ -694,7 +694,7 @@ extern s32 func_8004787C(s32 a0);
void func_80183790(s32 a0) {
s32 sum1;
register s32 sum2 __asm__("$17"); // !FAKE: pin $17 — NEEDED DIFFERS (P36 rung B tus9)
s32 sum2;
s32 frac;
s32 threshold;
s32 ret;
@@ -707,8 +707,7 @@ void func_80183790(s32 a0) {
sum1 = D_801C7748 + D_8018ABA4;
frac = sum1 & 0xFFF;
sum2 = D_801C774A;
sum2 += D_8018ABA6;
sum2 = D_801C774A + D_8018ABA6;
threshold = -(sum1 * 1536) / 12288 - 0x22;
+2 -3
View File
@@ -3897,12 +3897,11 @@ extern s8 D_801B42D8;
void func_801826F0(s32 *param_1)
{
int new_var;
register s32 p __asm__("$4"); // !FAKE: pin $4 — NEEDED DIFFERS (P36 rung B tus9)
s32 p;
s32 r;
p = (s32) (&D_801B42D8);
r = param_1[0x2c / 4];
new_var = r;
p += new_var;
p = (s32) (&D_801B42D8) + new_var;
*((s8 *) p) = 0;
((void (*)(void)) func_80146C3C)();
}
+5 -5
View File
@@ -2838,7 +2838,7 @@ extern void func_80181D3C(void *a0);
void func_80181D78(s32 a0) {
s32 r;
s32 r2;
register s32 *self __asm__("$16"); // !FAKE: pin $16 — NEEDED DIFFERS (P36 rung B tus9)
s32 *self, *self2, *self3;
u16 arr[6];
extern s32 rand(void);
@@ -2947,8 +2947,8 @@ void func_80181D78(s32 a0) {
func_801821B4((s32)a0);
return;
case 6:
self = (s32 *)(a0 + 4);
r = func_8012B6D4((s16 *)self, (s16 *)(*(s32 *)(a0 + 0x64) + 4));
self2 = (s32 *)(a0 + 4);
r = func_8012B6D4((s16 *)self2, (s16 *)(*(s32 *)(a0 + 0x64) + 4));
r2 = func_8012B608(*(s16 *)(*(s32 *)(a0 + 0x20) + 0x12), r, 8);
*(u16 *)(*(s32 *)(a0 + 0x20) + 0x12) += r2;
func_8012B178((s32)a0, (s32)0xFFFA0000);
@@ -2962,8 +2962,8 @@ void func_80181D78(s32 a0) {
*(s32 *)(a0 + 0x1C) = 0x10;
break;
case 7:
self = (s32 *)(a0 + 4);
r = func_8012B6D4((s16 *)self, (s16 *)(*(s32 *)(a0 + 0x64) + 4));
self3 = (s32 *)(a0 + 4);
r = func_8012B6D4((s16 *)self3, (s16 *)(*(s32 *)(a0 + 0x64) + 4));
r2 = func_8012B608(*(s16 *)(*(s32 *)(a0 + 0x20) + 0x12), r, 8);
*(u16 *)(*(s32 *)(a0 + 0x20) + 0x12) += r2;
func_8012B178((s32)a0, (s32)0xFFFA0000);
+4 -5
View File
@@ -3433,9 +3433,8 @@ s32 a0;
s16 s0;
s32 obj;
s32 ang0;
s32 ang1;
s32 x;
register s32 m1 __asm__("$3"); // !FAKE: pin $3 — NEEDED DIFFERS (P36 rung B tus9)
s32 m1;
s32 m2;
s16 d;
s32 q;
@@ -3494,11 +3493,11 @@ L474:
}
x = ratan2(-*(s16 *)(a0 + 0xE), *(s16 *)(a0 + 6)) - 0x400;
m2 = x & 0xFFF;
ang1 = m2;
m1 = m2;
if (x & 0x800) {
ang1 = m2 | 0xF000;
m1 = m2 | 0xF000;
}
x = ang1 - ang0;
x = m1 - ang0;
m2 = x & 0xFFF;
d = m2;
if (x & 0x800) {
+3 -4
View File
@@ -2981,8 +2981,7 @@ extern void func_8012CAE4(void *a0);
void func_8017F920(s32 a0) {
s32 v0;
s32 v1;
register s32 addr __asm__("$3"); // !FAKE: pin $3 — NEEDED DIFFERS (P36 rung B tus9)
s32 addr;
addr = (s32)&D_8019C7EC;
*(s32 *)(a0 + 0x78) = addr;
@@ -3006,8 +3005,8 @@ void func_8017F920(s32 a0) {
*(s32 *)(a0 + 0x58) = D_8019C7F4 | 0x60000000;
}
v1 = *(s32 *)(a0 + 0x20);
*(s32 *)(v1 + 0x4) |= 0x8040;
addr = *(s32 *)(a0 + 0x20);
*(s32 *)(addr + 0x4) |= 0x8040;
*(u16 *)(a0 + 0x5C) = 0xCC00;
func_8012A828(a0, (void *)&D_8019D200);
+3 -4
View File
@@ -4678,8 +4678,7 @@ extern s32 func_8012C588(s32 a0, s32 a1);
void func_8017F9CC(s32 a0) {
s32 v0;
s32 v1;
register s32 addr __asm__("$3"); // !FAKE: pin $3 — NEEDED DIFFERS (P36 rung B tus8)
s32 addr;
addr = (s32)&D_8018547C;
*(s32 *)(a0 + 0x78) = addr;
@@ -4703,8 +4702,8 @@ void func_8017F9CC(s32 a0) {
*(s32 *)(a0 + 0x58) = D_80185484 | 0x60000000;
}
v1 = *(s32 *)(a0 + 0x20);
*(s32 *)(v1 + 0x4) |= 0x8040;
addr = *(s32 *)(a0 + 0x20);
*(s32 *)(addr + 0x4) |= 0x8040;
*(s8 *)(a0 + 0xC0) = 1;
*(s32 *)(a0 + 0xB4) = 1;
func_8012A828(a0, (void *)&D_80181594);
+3 -4
View File
@@ -2998,8 +2998,7 @@ extern void func_8012A828(s32 a0, void *a1);
void func_80180958(s32 a0) {
s32 v0;
s32 v1;
register s32 addr __asm__("$3"); // !FAKE: pin $3 — NEEDED DIFFERS (P36 rung B tus9)
s32 addr;
addr = (s32)&D_801A52E4;
*(s32 *)(a0 + 0x78) = addr;
@@ -3023,8 +3022,8 @@ void func_80180958(s32 a0) {
*(s32 *)(a0 + 0x58) = D_801A52EC | 0x60000000;
}
v1 = *(s32 *)(a0 + 0x20);
*(s32 *)(v1 + 0x4) |= 0x8040;
addr = *(s32 *)(a0 + 0x20);
*(s32 *)(addr + 0x4) |= 0x8040;
*(u16 *)(a0 + 0x5C) = 0xCC00;
func_8012A828(a0, (void *)&D_801A5CF8);
+4 -5
View File
@@ -3287,8 +3287,7 @@ extern u16 func_80148800(s32 *a0);
void func_8017F304(s32 a0) {
Blk8_80126940_8017D6D0_8017F48C sp10;
u8 t;
register s16 lo __asm__("$4"); // !FAKE: pin $4 — NEEDED DIFFERS (P36 rung B tus9)
s16 hi;
s16 lo;
if (func_80148800(&D_80126B58) & 3) {
t = (*(u8 *)(a0 + 5) + 1) & 1;
@@ -3302,9 +3301,9 @@ void func_8017F304(s32 a0) {
if (sp10.v[0] < lo) {
sp10.v[0] = lo;
}
hi = -0x10c0;
if (sp10.v[0] > hi) {
sp10.v[0] = hi;
lo = -0x10c0;
if (sp10.v[0] > lo) {
sp10.v[0] = lo;
}
func_8017F53C(a0, sp10.v);
}
+4 -6
View File
@@ -3749,7 +3749,6 @@ void func_8017E71C(void *a0) {
if (s1 != 0) {
s32 sx;
s32 pan;
s32 vol;
v[0] = *(u16 *)(s0 + 0x6);
v[1] = *(u16 *)(s0 + 0xA);
@@ -3759,15 +3758,14 @@ void func_8017E71C(void *a0) {
sx = (s16)*(u16 *)&sxy;
pan = (sx + 0xA0) / 0x14;
if (sx < 0) {
vol = (sx >> 1) + 0x7F;
v1 = (sx >> 1) + 0x7F;
} else {
vol = 0x7F - (sx >> 1);
v1 = 0x7F - (sx >> 1);
}
if ((u32)(pan & 0xFFFF) < 0x10) {
s32 row = vol - 0x2F;
__asm__("" : "=r"(row) : "0"(row)); // !FAKE: launder — NEEDED DIFFERS (P36 rung B tus10)
s32 row = v1 - 0x2F;
if ((u32)(row & 0xFFFF) < 0x51) {
func_8002D4C8(s1, (vol | 0x3000 | (pan << 8)) & 0xFFFF);
func_8002D4C8(s1, (v1 | 0x3000 | (pan << 8)) & 0xFFFF);
}
}
}
+5 -6
View File
@@ -3950,8 +3950,7 @@ void func_80189F24(s16 *arg0, s32 arg1)
u8 sp10[4];
s32 size;
s32 prod;
register s32 h __asm__("$2"); // !FAKE: pin $2 — NEEDED DIFFERS (P36 rung B tus9)
s32 w;
s32 h;
if (D_801E67A0[D_800B99DA & 0xF] == 0) {
size = 0x60;
@@ -3961,10 +3960,10 @@ void func_80189F24(s16 *arg0, s32 arg1)
arg1++;
prod = size * arg1;
w = prod / 32;
h = w / 2;
sp10[0] = w;
sp10[1] = w;
size = prod / 32;
h = size / 2;
sp10[0] = size;
sp10[1] = size;
sp10[2] = h;
sp10[3] = 0;
+19 -22
View File
@@ -3589,9 +3589,8 @@ extern s32 D_801E1158;
void func_8017E1F0(s32 param_)
{
s32 s1;
register s32 ent __asm__("$16"); // !FAKE: pin $16 — NEEDED DIFFERS (P36 rung B tus9)
register s32 i __asm__("$18"); // !FAKE: pin $18 — NEEDED DIFFERS (P36 rung B tus9)
s32 k;
s32 ent;
s32 i;
struct {
s16 m[16];
s16 out[4];
@@ -3658,10 +3657,10 @@ void func_8017E1F0(s32 param_)
frm.f07 = 0x7FFF;
*(u16 *)(s1 + 0x108) = 0;
func_8012EC04(s1, tmp, (s32 *)frm.m);
k = 0;
while (k < 4) {
func_8012F14C((s32)frm.m, (s32)&D_80193448[k * 4], (s32)frm.out);
frm.idx = k;
i = 0;
while (i < 4) {
func_8012F14C((s32)frm.m, (s32)&D_80193448[i * 4], (s32)frm.out);
frm.idx = i;
frm.ax = frm.out[0];
frm.ay = frm.out[1];
frm.az = frm.out[2];
@@ -3675,7 +3674,7 @@ void func_8017E1F0(s32 param_)
*(s16 *)(ent + 0xA) = frm.out[1];
*(s16 *)(ent + 0xE) = frm.out[2];
}
k++;
i++;
}
func_8002D4C8(0x953, 0);
cnt = *(s32 *)(s1 + 0xE0) + 1;
@@ -5002,29 +5001,27 @@ extern u8 D_801936C8[];
void func_801809A8(s32 a0)
{
s32 s0 = a0;
s32 v1;
if (func_8012C354(a0, &D_80193688) != 0) {
*(u8 *)(s0 + 0xC0) = 1;
*(s32 *)(s0 + 0xB4) = -1;
*(s16 *)(s0 + 0xAE) = -1;
*(u8 *)(s0 + 0x75) = 8;
func_8012A828(s0, &D_801936C8);
__asm__("" : "=r"(s0) : "0"(s0)); // !FAKE: launder — NEEDED DIFFERS (P36 rung B tus9)
if (*(s16 *)(s0 + 0x70) != 0) {
*(s16 *)(s0 + 2) = 4;
*(u8 *)(a0 + 0xC0) = 1;
*(s32 *)(a0 + 0xB4) = -1;
*(s16 *)(a0 + 0xAE) = -1;
*(u8 *)(a0 + 0x75) = 8;
func_8012A828(a0, &D_801936C8);
if (*(s16 *)(a0 + 0x70) != 0) {
*(s16 *)(a0 + 2) = 4;
} else {
*(s16 *)(s0 + 2) = 1;
*(u32 *)(*(s32 *)(s0 + 0x20) + 4) |= 0x80000000;
func_8012B2CC(s0);
v1 = func_8012C658(0x346, 1, s0);
*(s16 *)(a0 + 2) = 1;
*(u32 *)(*(s32 *)(a0 + 0x20) + 4) |= 0x80000000;
func_8012B2CC(a0);
v1 = func_8012C658(0x346, 1, a0);
if (v1 != 0) {
*(s16 *)(v1 + 6) = -0x660;
*(s16 *)(v1 + 0xA) = -0x682;
*(s16 *)(v1 + 0xE) = 0x80;
}
v1 = func_8012C658(0x346, 1, s0);
v1 = func_8012C658(0x346, 1, a0);
if (v1 != 0) {
*(s16 *)(v1 + 6) = -0xA60;
*(s16 *)(v1 + 0xA) = -0x882;
+5 -6
View File
@@ -3704,8 +3704,7 @@ void func_80180DCC(void *a0)
void *s3 = a0;
void *s2;
void *p;
s32 v1;
register s32 v0 __asm__("$2"); // !FAKE: pin $2 — NEEDED DIFFERS (P36 rung B tus9)
s32 v0;
s32 bits;
s32 s0;
s32 s1;
@@ -3725,9 +3724,9 @@ void func_80180DCC(void *a0)
}
s1 = func_80012A60(s0, 0x400);
v0 = func_80012A60(s0, 0xC00);
v1 = (s16)s1;
bits = (s16)s1;
v0 = (s16)v0;
v0 = (v0 < v1);
v0 = (v0 < bits);
if (v0 != 0) {
goto TRUE1;
}
@@ -3739,9 +3738,9 @@ TRUE1:
ELSE:
s1 = func_80012A60(s0, 0);
v0 = func_80012A60(s0, 0x800);
v1 = (s16)s1;
bits = (s16)s1;
v0 = (s16)v0;
v0 = (v0 < v1);
v0 = (v0 < bits);
if (v0 != 0) {
goto TRUE2;
}
+6 -8
View File
@@ -4512,7 +4512,6 @@ void func_8017FCA8(s32 a0)
s16 clamped;
s16 va;
s16 vb;
register s32 sc __asm__("$2"); // !FAKE: pin $2 — NEEDED DIFFERS (P36 rung B tus10)
cur = *(PosFCA8 *) D_80126940;
ret = func_8012E544(0x306);
@@ -4535,8 +4534,8 @@ void func_8017FCA8(s32 a0)
*(s16 *) (a0 + 0x20) = va;
vb = ((clamped * 111) / 0x300) - 0x70;
*(s16 *) (a0 + 0x30) = vb;
sc = ((clamped * 800) / 0x300) + 0x190;
*(s32 *) (a0 + 0x14) = (s16) sc;
ret = ((clamped * 800) / 0x300) + 0x190;
*(s32 *) (a0 + 0x14) = (s16) ret;
} else {
target = *(PosFCA8 *) D_80126940;
}
@@ -6234,13 +6233,12 @@ extern void func_80182038(s32 param_1);
extern void func_8018247C(void);
void func_80182DF0(s32 arg0) {
register s32 s0 __asm__("$16") = arg0; // !FAKE: pin $16 — NEEDED DIFFERS (P36 rung B tus10)
*(s16 *)(s0 + 0x52) = (rand() & 3) * 2 - 3;
if (func_8012BEE8(s0) != 0) {
func_80182038(s0);
*(s16 *)(arg0 + 0x52) = (rand() & 3) * 2 - 3;
if (func_8012BEE8(arg0) != 0) {
func_80182038(arg0);
}
((void (*)(s32))func_8018247C)(s0);
((void (*)(s32))func_8018247C)(arg0);
}
+9 -10
View File
@@ -8,23 +8,22 @@ extern void func_8012A828(s32 a0, void *a1);
extern s32 D_801DF700;
extern s32 D_8018EFDC;
void func_801860E4(void *a0) {
register s32 s0 __asm__("$16") = (s32)a0; // !FAKE: pin $16 — NEEDED DIFFERS (P36 rung B headers2)
s32 s1;
s32 v0;
v0 = ((s32 (*)(void))func_8012C1B8)();
s1 = v0;
*(s32 *)((s8 *)s0 + 0x20) = v0;
*(s32 *)((s8 *)a0 + 0x20) = v0;
if (v0 == 0) {
func_8012CAE4((void *)s0);
func_8012CAE4((void *)a0);
} else {
func_8001C214(s1, (s32)&D_801DF700);
func_8001D0E8(s1, 0x800, 0x800);
func_8012A828(s0, &D_8018EFDC);
*(s32 *)((s8 *)s0 + 0x14) = 0xFFFC0000;
*(s32 *)((s8 *)s0 + 0x48) = 0x20000;
*(s32 *)((s8 *)s0 + 0x44) = 0;
*(s32 *)((s8 *)s0 + 0x4C) = 0;
*(s16 *)((s8 *)s0 + 0xDC) = 0x40;
*(u16 *)((s8 *)s0 + 0x2) = *(u16 *)((s8 *)s0 + 0x2) + 1;
func_8012A828(a0, &D_8018EFDC);
*(s32 *)((s8 *)a0 + 0x14) = 0xFFFC0000;
*(s32 *)((s8 *)a0 + 0x48) = 0x20000;
*(s32 *)((s8 *)a0 + 0x44) = 0;
*(s32 *)((s8 *)a0 + 0x4C) = 0;
*(s16 *)((s8 *)a0 + 0xDC) = 0x40;
*(u16 *)((s8 *)a0 + 0x2) = *(u16 *)((s8 *)a0 + 0x2) + 1;
}
}