phase-36: S104 s104_d22 — func_801861FC banked at 0 through the whole-object gate + propagated — $2 pin → 0: one variable per value across switch cases (flow.c:2058-2061 made the shared t global; per-case t is local and ties to $2, local-alloc.c:1722)

This commit is contained in:
Drew T
2026-09-10 22:55:40 -06:00
parent eadfa5977d
commit 66eafc8a54
16 changed files with 519 additions and 261 deletions
@@ -1,38 +1,30 @@
void func_801861FC(s32 a0) {
s32 ent = a0;
s32 state = *(u16 *)(ent + 0x34);
s32 sub;
void func_801861FC(s32 ent) {
s32 t;
s32 cnt;
switch (state) {
case 0: {
s32 t = func_8004787C(*(s32 *)(ent + 0x1C) << 6);
switch (*(u16 *)(ent + 0x34)) {
case 0:
t = func_8004787C(*(s32 *)(ent + 0x1C) << 6);
*(s16 *)(*(s32 *)(ent + 0x20) + 0x18) = t * 7;
sub = *(s32 *)(ent + 0x20);
*(s16 *)(sub + 0x1A) = t << 1;
*(s16 *)(*(s32 *)(ent + 0x20) + 0x1A) = t << 1;
cnt = *(s32 *)(ent + 0x1C) + 1;
*(s32 *)(ent + 0x1C) = cnt;
if (cnt < 0x10) {
break;
}
sub = *(s32 *)(ent + 0x20);
*(s16 *)(sub + 0x1A) = 0x7000;
sub = *(s32 *)(ent + 0x20);
*(s16 *)(sub + 0x1A) = 0x2000;
*(s16 *)(*(s32 *)(ent + 0x20) + 0x1A) = 0x7000;
*(s16 *)(*(s32 *)(ent + 0x20) + 0x1A) = 0x2000;
*(s32 *)(ent + 0x1C) = 0x40;
*(u16 *)(ent + 0x34) = *(u16 *)(ent + 0x34) + 1;
break;
}
case 1:
if (func_8012BEE8(ent) != 0) {
*(s32 *)(ent + 0x1C) = 0x10;
*(u16 *)(ent + 0x34) = *(u16 *)(ent + 0x34) + 1;
}
break;
case 2: {
s32 t = func_8004787C(*(s32 *)(ent + 0x1C) << 6);
sub = *(s32 *)(ent + 0x20);
*(s16 *)(sub + 0x1A) = t << 1;
case 2:
*(s16 *)(*(s32 *)(ent + 0x20) + 0x1A) = func_8004787C(*(s32 *)(ent + 0x1C) << 6) << 1;
cnt = *(s32 *)(ent + 0x1C) - 1;
*(s32 *)(ent + 0x1C) = cnt;
if (cnt == 0) {
@@ -41,7 +33,6 @@ void func_801861FC(s32 a0) {
}
break;
}
}
func_8018632C(ent);
}
@@ -0,0 +1,56 @@
# func_801861FC (ov_SC03_091_jr_8018326C.c) — P36 S104 agent d22
**Result: score 0 in plain C, zero levers** (was 1 NEEDED lever: `register s32 t __asm__("$2")`). Levers 1 → 0.
Closed on the FIRST `--try`. Best body: `PACK/body.c` (76/76 ins, MATCH). It also closes the class's three other copies
(`scratch/copies.md`): func_80185678 (ov_SC03_089), func_80185354 (ov_SC03_090), func_801831E8 (ov_SC03_104) — all 0.
## (a) The residual
Counted first: mine 77, target 76 — ONE extra instruction, `move a0,v0` after the case-0 `jal func_8004787C`; the target
computes `t*7` (`sll v1,v0,3; subu v1,v1,v0`) and `t<<1` straight out of `$v0`. Every other hunk is a branch offset
shifted by that one instruction. So: a call-result copy that should have been tied to `$2` and was not.
## (b) The pass and the decision (read in the dumps, proven on bytes)
The lever-free body reuses ONE `t` for the call result in case 0 and in case 2 — two basic blocks. flow marks it
`REG_BLOCK_GLOBAL` (`flow.c:2058-2061`, the second block that sets it), so local-alloc never sees it (block_alloc takes only
pseudos local to the block) and cannot tie it to the dying `$2` with `combine_regs` (`local-alloc.c:1722`). Local-alloc
first gives case 0's block-local temps (`t<<3`, the `ent+0x20` loads) `$2`/`$3`; global allocation then records those hard
registers as conflicts of `t` (`global.c:1428` via the locals' `reg_renumber`) — `.greg`, free body:
`;; 77 conflicts: 73 76 77 2 3 29` — so `find_reg` (`global.c:904`) hands `t` `$4` and the copy `move a0,v0` survives.
With one `t` per case, case 0's `t` is local to block 6 (`.lreg`: "Register 78 used 4 times across 7 insns in block 6",
"Register 78 in 2.") and is tied to `$2`; the copy becomes `move v0,v0` and is deleted. Dumps:
`scratch/dumps_free/free.i.{lreg,greg}` vs `scratch/dumps_body/body.i.{lreg,greg}`.
## (c) The move that closed it
One name per value for the call result: the case-2 `t` is either inlined into its single use
(`*(s16 *)(sub + 0x1A) = func_8004787C(...) << 1;`, the shipped body) or declared in its own case block. Byte-proven
equivalent spellings, all 0: `{ s32 t = …; }` inside BOTH cases (`scratch/c1.c`); two function-scope names `t`, `t2`
(`scratch/vA.c`); only case 0 block-scoped (`vB.c`); only case 2 block-scoped (`vC.c`). The shipped body also drops the
decompiler's `ent = a0` / `state` / `sub` temps (readability; they were not the defect — r2 = 0).
## (d) Generator proposal
R23 (split a reused local) already covers this move but REFUSED `t`: its definition test requires the text before
`v = E;` to end in `;`/`{`/`}` (`tools/delever.py` `split_reused_locals`, the `before.endswith((";", "{", "}"))` check),
and case 2's `t = func_8004787C(...)` follows `case 2:` — so the sweep split `sub` and `cnt` (free_115/116, best 9) but
never `t`. Rule: **accept a `case K:` / `default:` label (a `:` that closes a case label) as a statement boundary in R23**
— the definition is the first statement of the case, so every later use in that segment is dominated by it whether the
case is entered by dispatch or by fall-through. Also offer "declare the value inside the case's own `{ }`" as the R23
spelling when the segments are switch cases (d7's per-arm local).
## (e) What did not work (byte evidence)
- `scratch/r1.c` (case-2 call inlined but `sub = *(s32 *)(ent + 0x20);` left ABOVE the call): wrong — `sub` then lives across
the call and takes `$s1` (frame 32, +1 callee-saved). The `ent+0x20` load must stay after the call, as in the target.
- The history's 9–12 candidates: they split/inlined `sub`/`cnt` and swapped statements — none separated the two `t`s.
- Struct accesses with the reused `t` (`scratch/st_reused.c`): 15, unchanged.
## (f) Where the method fell short
Nothing structural — count (1 extra `move`) → "a call-result copy not tied to `$2`" → the only non-local pseudo in the
case → the `.greg` conflict line. This is the S103 c1/c8 "local reused across statement groups → one name per value" move;
the sweep's generator for it had a text-shape gap at a `case` label, not a compiler-model gap. The pin was faking exactly
the `$2` tie that a block-local pseudo gets for free.
## (g) Structs question
Neutral. Tested on bytes with body-local `struct Ent { u8 pad0[0x1C]; s32 timer; struct Sub *sub; u8 pad24[0x10]; u16 state; }`
/ `struct Sub { u8 pad0[0x18]; s16 sx; s16 sy; }` and `e->state++`: reused `t` = 15 (`scratch/st_reused.c`), split `t` = 0
(`scratch/st_split.c`). The decision is flow's block-global marking of one pseudo set in two cases; aggregate vs scalar
MEM flags (`expr.c:4568-4577`) never enter it. The struct would read better (timer +0x1C, sub-object +0x20 with s16 +0x18/+0x1A,
state u16 +0x34) but does not close the bytes.
@@ -0,0 +1,14 @@
void func_8017E060(s32 *param_1)
{
extern s8 D_80191C70;
int new_var;
s32 p;
s32 r;
p = (s32) (&D_80191C70);
r = param_1[0x34 / 4];
new_var = r;
p += new_var;
*((s8 *) p) = 0;
((void (*)(void)) func_801292C8)();
}
@@ -0,0 +1,14 @@
void func_8017E060(s32 *param_1)
{
extern s8 D_80191C70;
int new_var;
register s32 p __asm__("$4"); // !FAKE: pin $4 — NEEDED DIFFERS (P36 rung B tus7)
s32 r;
p = (s32) (&D_80191C70);
r = param_1[0x34 / 4];
new_var = r;
p += new_var;
*((s8 *) p) = 0;
((void (*)(void)) func_801292C8)();
}
@@ -0,0 +1,14 @@
g6b: verdict NO-MATCH start 4 best 2 compiles 190 path R9 swap-stmts @4172
best-scoring single candidates of the last trace (move -> score [residual class]):
R9 swap-stmts @4172 -> 2 [COUNT] (from 4)
R12 width new_var int->u16 @4166 -> 2 [COUNT] (from 2)
R6 inline r @4170 -> 2 [COUNT] (from 2)
R7 block @4169 -> 2 [COUNT] (from 2)
R9 swap-stmts @4169 -> 2 [COUNT] (from 2)
R10 param-copy param_1 @4169 -> 2 [COUNT] (from 2)
R4 decl-move p 2->0 -> 2 [COUNT] (from 2)
R12 width new_var int->s16 @4166 -> 2 [COUNT] (from 2)
R6 inline new_var @4171 -> 2 [COUNT] (from 2)
R7 do-while @4169 -> 2 [COUNT] (from 2)
R9 swap-stmts @4170 -> 2 [COUNT] (from 2)
R4 decl-move p 2->1 -> 2 [COUNT] (from 2)
@@ -0,0 +1,31 @@
--- every @class/@stuck/@crack note in this translation unit ---
// @class: plumbing
// @stuck: none — MATCH
// @class: regalloc-order — simplified sibling of matched func_8017B614.
// @stuck: none. Block-moves are align-1 struct-assigns (u8[8]) -> emit_block_move
// @class: struct
// @stuck: none — MATCH (74 ins)
// @class: regalloc-order + T1 memcpy-builtin→call re-crack
// @stuck: 0 (iso). Register lever = $16 pin + in-place re-tie on the memcpy-branch src (keeps
// @class: plumbing
// @stuck: none — MATCH
// @class: schedule
// @stuck: none — MATCH
// @class: struct
// @stuck: none — MATCH
// @class: struct
// @stuck: none — MATCH (63 ins)
// @class: struct
// @stuck: none — MATCH (62 ins)
// @class: struct
// @stuck: none — MATCH (65 ins)
// @class: regalloc-order
// @stuck: pending self-check — register order param=$s2 counter=$s1 ptr=$s0
// @class: plumbing
// @stuck: none — MATCH (expected); short-typed global increment + signed compare, store-2 on overflow
// @class: plumbing
// @stuck: none — MATCH expected (simple short-increment + guarded call)
// @class: regalloc-order
// @stuck: none — MATCH (branch-polarity invert: fn-ptr non-zero call is the fall-through arm)
// @class: schedule
// @stuck: none — MATCH (102 ins). MATRIX(0x20:m@0,t@0x14)+SVECTOR in/out stack layout; the only
@@ -0,0 +1,155 @@
=== lever-free bodies in ov_SC04_012 sharing a callee or global with func_8017E060 (6 found; top 6 by shared symbols) — read them for the SHAPE ===
--- func_8012927C (src/shared/ov/func_8012927C.h:5) shares 1: func_801292C8 ---
void func_8012927C(void) {
s32 i;
u8 *p = (u8 *)&D_8011DB30;
for (i = 0; i < 0x80; i++) {
func_801292C8(p);
p += 0x38;
}
}
--- func_801433F0 (src/shared/ov/func_801433F0.h:7) shares 1: func_801292C8 ---
void func_801433F0(s32 a0) {
if (*(u16 *)(a0 + 2) == 0) {
func_80143458();
} else {
func_8012931C((struct vec *)a0);
if (func_80128ED8(*(void **)(a0 + 0x20), (u8 *)a0 + 0x24) != 0) {
func_801292C8((u8 *)a0);
}
}
}
--- func_8014350C (src/shared/ov/func_8014350C.h:7) shares 1: func_801292C8 ---
void func_8014350C(s32 *a0) {
if (*(u16 *)((u8 *)a0 + 2) == 0) {
func_8014358C();
return;
}
func_8012931C((struct vec *)a0);
if (func_80128ED8((void *)a0[0x20 / 4], (void *)((u8 *)a0 + 0x24)) != 0) {
func_801292C8((u8 *)a0);
return;
}
*(u8 *)(a0[0x20 / 4] + 0x27) = *(u8 *)((u8 *)a0 + 0x28) - 0x70;
}
--- func_8017DAE4 (src/ov_SC04_012/ov_SC04_012_jr_8017AE2C.c:3916) shares 1: D_80191C70 ---
void func_8017DAE4(s32 a0) {
extern u8 D_80126B5C;
extern s32 D_801930C0;
extern s8 D_80191C70;
s16 buf[4];
s32 i;
s32 j;
s32 slot;
u8 *obj;
slot = -1;
func_80015978((s32)&D_80126B5C, (s32 *)buf);
buf[1] = *(u16 *)(a0 + 0xA);
for (j = 0, i = 0; j < D_801930C0; j++, i++) {
if (slot != -1) {
break;
}
if (*((u8 *)&D_80191C70 + i) == 0) {
slot = i;
}
}
if (slot != -1) {
obj = func_801290DC(0x61, (u8 *)buf);
if (obj != 0) {
*(&D_80191C70 + slot) = 1;
*(s32 *)(obj + 0x34) = slot;
}
}
}
--- func_8017E4C8 (src/ov_SC04_012/ov_SC04_012_jr_8017AE2C.c:4400) shares 1: func_801292C8 ---
void func_8017E4C8(int param_1)
{
UVec_8017EA1C_8017E4C8 v;
int p;
short ang;
int siz;
int wid;
int col;
p = *(int *)(param_1 + 0x20);
ang = *(unsigned short *)(param_1 + 0x2c) + 0x40;
*(unsigned short *)(param_1 + 0x2c) = ang;
v.vz = func_8004787C(ang) / 256;
v.vy = 0;
v.vx = 0;
func_800139C8(*(short *)(p + 0x12), &v, &v);
*(unsigned short *)(param_1 + 6) = *(unsigned short *)(param_1 + 0x12) + v.vx;
*(unsigned short *)(param_1 + 0xe) = *(unsigned short *)(param_1 + 0x1a) + v.vz;
*(unsigned short *)(param_1 + 0xa) = *(unsigned short *)(param_1 + 0xa) - *(unsigned short *)(param_1 + 0x30);
siz = *(unsigned short *)(param_1 + 0x2e) + 0x10;
*(unsigned short *)(param_1 + 0x2e) = siz;
wid = *(unsigned short *)(p + 0x1a) + siz;
*(unsigned short *)(p + 0x1a) = wid;
*(unsigned short *)(p + 0x18) = wid;
col = *(unsigned char *)(p + 0x26) - 4;
*(unsigned char *)(p + 0x26) = col;
*(unsigned char *)(p + 0x25) = col;
*(unsigned char *)(p + 0x24) = col;
if (func_80146E98(param_1) != 0) {
((void (*)(int))func_801292C8)(param_1);
}
}
--- func_8017D99C (src/ov_SC04_012/ov_SC04_012_jr_8017AE2C.c:3867) shares 1: D_80191C70 ---
void func_8017D99C(s32 a0) {
extern u8 D_80126B5C;
extern s32 D_801930C0;
extern s16 D_801930C4;
extern s32 D_801930C8;
extern s32 D_801930CC;
extern u8 D_80182290[];
extern u8 D_80182298[];
extern s8 D_80191C70;
extern s8 D_80191CBF;
s16 buf[4];
s32 i;
s8 *p;
u8 *obj;
/* [] form (not *(T *)(a0 + K)) -- see the MEM_IN_STRUCT_P note above. */
D_801930C0 = ((s16 *)a0)[0xFC / 2];
D_801930C4 = ((s32 *)a0)[0xDC / 4];
D_801930C8 = (s32)(D_80182290 + ((s16 *)a0)[0x70 / 2] * 4);
D_801930CC = (s32)(D_80182298 + ((s16 *)a0)[0x70 / 2] * 8);
func_80015978((s32)&D_80126B5C, (s32 *)buf);
buf[1] = *(u16 *)(a0 + 0xA);
p = &D_80191CBF;
for (i = 0x4F; i >= 0; i--) {
*p = 0;
p--;
}
for (i = 0; i < D_801930C0; i++) {
obj = func_801290DC(0x61, (u8 *)buf);
if (obj != 0) {
*(&D_80191C70 + i) = 1;
*(s32 *)(obj + 0x34) = i;
func_8017DED4((s32)obj);
*(u16 *)(obj + 0xA) += (rand() & 0xF) * 3 * 16;
}
}
func_8012AD50((void *)a0);
}
@@ -0,0 +1,7 @@
src/ov_SC04_012/ov_SC04_012_jr_8017AE2C.c:func_8017E060: score 4 (OTHER; mine 12 ins, target 12) — not yet
replace mine[0:2] target[0:2]
0 addiu sp,sp,-32 | addiu sp,sp,-24
1 sw ra,24(sp) | sw ra,16(sp)
replace mine[8:10] target[8:10]
8 lw ra,24(sp) | lw ra,16(sp)
9 addiu sp,sp,32 | addiu sp,sp,24
@@ -0,0 +1,2 @@
NEEDED pin $4 line 4262
REMOVED pin $3 line 4263
@@ -0,0 +1,2 @@
src/ov_SC04_012/ov_SC04_012_jr_8017AE2C.c
func_8017E060
+182 -182
View File
@@ -1,7 +1,7 @@
{
"head": "954e06093",
"head": "eadfa5977",
"stamp": "15956e4a96c4",
"generated": "2026-09-10 22:38",
"generated": "2026-09-10 22:54",
"aliases": [
"main",
"ov_SC03_014",
@@ -21,207 +21,207 @@
"main": {
"objects": 85,
"identical": 85,
"seconds": 10.036000000000001,
"seconds": 10.013999999999996,
"mean_s": 0.118
},
"ov_SC03_014": {
"objects": 32,
"identical": 32,
"seconds": 6.339,
"mean_s": 0.198
"seconds": 6.761,
"mean_s": 0.211
},
"ov_SC03_015": {
"objects": 32,
"identical": 32,
"seconds": 6.549000000000002,
"mean_s": 0.205
"seconds": 6.607,
"mean_s": 0.206
},
"ov_SC04_011": {
"objects": 28,
"identical": 28,
"seconds": 6.021999999999999,
"mean_s": 0.215
"seconds": 6.0649999999999995,
"mean_s": 0.217
}
},
"per_object_seconds": {
"build/src/800.o": 0.981,
"build/src/800_b.o": 0.132,
"build/src/800_b_2.o": 0.482,
"build/src/800_b_o0a.o": 0.129,
"build/src/800_c.o": 0.288,
"build/src/800b2.o": 0.091,
"build/src/apicard1.o": 0.14,
"build/src/apicard2.o": 0.149,
"build/src/apicard3.o": 0.108,
"build/src/apicard4.o": 0.073,
"build/src/apicard5.o": 0.148,
"build/src/apicard6.o": 0.091,
"build/src/apicard7.o": 0.15,
"build/src/boot.o": 0.179,
"build/src/gap.o": 0.103,
"build/src/libapi1.o": 0.13,
"build/src/libapi2.o": 0.084,
"build/src/libc2_1.o": 0.112,
"build/src/libc2_2.o": 0.085,
"build/src/libcd1.o": 0.085,
"build/src/libcd2.o": 0.093,
"build/src/libetc.o": 0.072,
"build/src/800.o": 0.971,
"build/src/800_b.o": 0.107,
"build/src/800_b_2.o": 0.498,
"build/src/800_b_o0a.o": 0.139,
"build/src/800_c.o": 0.306,
"build/src/800b2.o": 0.085,
"build/src/apicard1.o": 0.076,
"build/src/apicard2.o": 0.099,
"build/src/apicard3.o": 0.085,
"build/src/apicard4.o": 0.102,
"build/src/apicard5.o": 0.136,
"build/src/apicard6.o": 0.084,
"build/src/apicard7.o": 0.097,
"build/src/boot.o": 0.2,
"build/src/gap.o": 0.082,
"build/src/libapi1.o": 0.127,
"build/src/libapi2.o": 0.086,
"build/src/libc2_1.o": 0.099,
"build/src/libc2_2.o": 0.125,
"build/src/libcd1.o": 0.1,
"build/src/libcd2.o": 0.08,
"build/src/libetc.o": 0.089,
"build/src/libgpu.o": 0.087,
"build/src/libgpu2.o": 0.086,
"build/src/libgs1.o": 0.073,
"build/src/libgs2.o": 0.124,
"build/src/libgs3.o": 0.064,
"build/src/libgs4.o": 0.072,
"build/src/libgs5.o": 0.106,
"build/src/libgs6.o": 0.141,
"build/src/libgs7.o": 0.088,
"build/src/libgs8.o": 0.082,
"build/src/libgte1.o": 0.123,
"build/src/libgte10.o": 0.093,
"build/src/libgte11.o": 0.071,
"build/src/libgte12.o": 0.087,
"build/src/libgte13.o": 0.085,
"build/src/libgte14.o": 0.087,
"build/src/libgte15.o": 0.124,
"build/src/libgte16.o": 0.108,
"build/src/libgte17.o": 0.074,
"build/src/libgte18.o": 0.077,
"build/src/libgte19.o": 0.091,
"build/src/libgte2.o": 0.084,
"build/src/libgte20.o": 0.099,
"build/src/libgte21.o": 0.065,
"build/src/libgte22.o": 0.078,
"build/src/libgte23.o": 0.078,
"build/src/libgte24.o": 0.132,
"build/src/libgte25.o": 0.13,
"build/src/libgte26.o": 0.08,
"build/src/libgte27.o": 0.076,
"build/src/libgte28.o": 0.073,
"build/src/libgte29.o": 0.086,
"build/src/libgte3.o": 0.104,
"build/src/libgte30.o": 0.088,
"build/src/libgte4.o": 0.088,
"build/src/libgte5.o": 0.115,
"build/src/libgte6.o": 0.092,
"build/src/libgte7.o": 0.102,
"build/src/libgte8.o": 0.126,
"build/src/libgte9.o": 0.075,
"build/src/libmcrd1.o": 0.186,
"build/src/libmcrd2.o": 0.093,
"build/src/libpad1.o": 0.101,
"build/src/libpad2.o": 0.098,
"build/src/sgap.o": 0.146,
"build/src/sgap_2.o": 0.089,
"build/src/sgap_3.o": 0.081,
"build/src/sgap_4.o": 0.124,
"build/src/sgap_5.o": 0.091,
"build/src/sgap_6.o": 0.114,
"build/src/sgap_8.o": 0.097,
"build/src/snd1.o": 0.122,
"build/src/snd10.o": 0.1,
"build/src/snd11.o": 0.111,
"build/src/snd12.o": 0.068,
"build/src/snd2.o": 0.119,
"build/src/snd3.o": 0.13,
"build/src/snd4.o": 0.084,
"build/src/snd5.o": 0.072,
"build/src/snd6.o": 0.096,
"build/src/snd7.o": 0.093,
"build/src/snd8.o": 0.094,
"build/src/snd9.o": 0.108,
"build/src/ov_SC03_014/ov_SC03_014.o": 0.146,
"build/src/ov_SC03_014/ov_SC03_014_after.o": 0.597,
"build/src/ov_SC03_014/ov_SC03_014_jr_8012ACE0.o": 0.551,
"build/src/ov_SC03_014/ov_SC03_014_jr_80135888.o": 0.077,
"build/src/ov_SC03_014/ov_SC03_014_jr_80135A4C.o": 0.069,
"build/src/libgpu2.o": 0.171,
"build/src/libgs1.o": 0.091,
"build/src/libgs2.o": 0.078,
"build/src/libgs3.o": 0.078,
"build/src/libgs4.o": 0.098,
"build/src/libgs5.o": 0.063,
"build/src/libgs6.o": 0.136,
"build/src/libgs7.o": 0.079,
"build/src/libgs8.o": 0.088,
"build/src/libgte1.o": 0.115,
"build/src/libgte10.o": 0.091,
"build/src/libgte11.o": 0.101,
"build/src/libgte12.o": 0.079,
"build/src/libgte13.o": 0.084,
"build/src/libgte14.o": 0.111,
"build/src/libgte15.o": 0.068,
"build/src/libgte16.o": 0.112,
"build/src/libgte17.o": 0.115,
"build/src/libgte18.o": 0.085,
"build/src/libgte19.o": 0.079,
"build/src/libgte2.o": 0.111,
"build/src/libgte20.o": 0.068,
"build/src/libgte21.o": 0.128,
"build/src/libgte22.o": 0.069,
"build/src/libgte23.o": 0.112,
"build/src/libgte24.o": 0.079,
"build/src/libgte25.o": 0.075,
"build/src/libgte26.o": 0.095,
"build/src/libgte27.o": 0.095,
"build/src/libgte28.o": 0.092,
"build/src/libgte29.o": 0.093,
"build/src/libgte3.o": 0.108,
"build/src/libgte30.o": 0.094,
"build/src/libgte4.o": 0.09,
"build/src/libgte5.o": 0.085,
"build/src/libgte6.o": 0.074,
"build/src/libgte7.o": 0.099,
"build/src/libgte8.o": 0.072,
"build/src/libgte9.o": 0.125,
"build/src/libmcrd1.o": 0.151,
"build/src/libmcrd2.o": 0.12,
"build/src/libpad1.o": 0.127,
"build/src/libpad2.o": 0.092,
"build/src/sgap.o": 0.127,
"build/src/sgap_2.o": 0.099,
"build/src/sgap_3.o": 0.072,
"build/src/sgap_4.o": 0.106,
"build/src/sgap_5.o": 0.144,
"build/src/sgap_6.o": 0.142,
"build/src/sgap_8.o": 0.129,
"build/src/snd1.o": 0.09,
"build/src/snd10.o": 0.075,
"build/src/snd11.o": 0.081,
"build/src/snd12.o": 0.077,
"build/src/snd2.o": 0.138,
"build/src/snd3.o": 0.113,
"build/src/snd4.o": 0.117,
"build/src/snd5.o": 0.076,
"build/src/snd6.o": 0.083,
"build/src/snd7.o": 0.084,
"build/src/snd8.o": 0.1,
"build/src/snd9.o": 0.125,
"build/src/ov_SC03_014/ov_SC03_014.o": 0.211,
"build/src/ov_SC03_014/ov_SC03_014_after.o": 0.684,
"build/src/ov_SC03_014/ov_SC03_014_jr_8012ACE0.o": 0.543,
"build/src/ov_SC03_014/ov_SC03_014_jr_80135888.o": 0.099,
"build/src/ov_SC03_014/ov_SC03_014_jr_80135A4C.o": 0.074,
"build/src/ov_SC03_014/ov_SC03_014_jr_80135D20.o": 0.196,
"build/src/ov_SC03_014/ov_SC03_014_jr_801380E0.o": 0.208,
"build/src/ov_SC03_014/ov_SC03_014_jr_8013C98C.o": 0.141,
"build/src/ov_SC03_014/ov_SC03_014_jr_8013F350.o": 0.142,
"build/src/ov_SC03_014/ov_SC03_014_jr_8013FFD8.o": 0.082,
"build/src/ov_SC03_014/ov_SC03_014_jr_80140608.o": 0.226,
"build/src/ov_SC03_014/ov_SC03_014_jr_8015444C.o": 0.098,
"build/src/ov_SC03_014/ov_SC03_014_jr_80154C24.o": 0.229,
"build/src/ov_SC03_014/ov_SC03_014_jr_801588CC.o": 0.154,
"build/src/ov_SC03_014/ov_SC03_014_jr_80159C84.o": 0.08,
"build/src/ov_SC03_014/ov_SC03_014_jr_8015A3C8.o": 0.084,
"build/src/ov_SC03_014/ov_SC03_014_jr_8015AE2C.o": 0.134,
"build/src/ov_SC03_014/ov_SC03_014_jr_8015C32C.o": 0.631,
"build/src/ov_SC03_014/ov_SC03_014_jr_8016AB6C.o": 0.407,
"build/src/ov_SC03_014/ov_SC03_014_jr_80171B4C.o": 0.118,
"build/src/ov_SC03_014/ov_SC03_014_jr_801734BC.o": 0.24,
"build/src/ov_SC03_014/ov_SC03_014_jr_801789AC.o": 0.079,
"build/src/ov_SC03_014/ov_SC03_014_jr_80178D40.o": 0.179,
"build/src/ov_SC03_014/ov_SC03_014_jr_8017A4AC.o": 0.095,
"build/src/ov_SC03_014/ov_SC03_014_jr_801380E0.o": 0.205,
"build/src/ov_SC03_014/ov_SC03_014_jr_8013C98C.o": 0.19,
"build/src/ov_SC03_014/ov_SC03_014_jr_8013F350.o": 0.108,
"build/src/ov_SC03_014/ov_SC03_014_jr_8013FFD8.o": 0.11,
"build/src/ov_SC03_014/ov_SC03_014_jr_80140608.o": 0.236,
"build/src/ov_SC03_014/ov_SC03_014_jr_8015444C.o": 0.11,
"build/src/ov_SC03_014/ov_SC03_014_jr_80154C24.o": 0.282,
"build/src/ov_SC03_014/ov_SC03_014_jr_801588CC.o": 0.114,
"build/src/ov_SC03_014/ov_SC03_014_jr_80159C84.o": 0.124,
"build/src/ov_SC03_014/ov_SC03_014_jr_8015A3C8.o": 0.099,
"build/src/ov_SC03_014/ov_SC03_014_jr_8015AE2C.o": 0.128,
"build/src/ov_SC03_014/ov_SC03_014_jr_8015C32C.o": 0.615,
"build/src/ov_SC03_014/ov_SC03_014_jr_8016AB6C.o": 0.421,
"build/src/ov_SC03_014/ov_SC03_014_jr_80171B4C.o": 0.172,
"build/src/ov_SC03_014/ov_SC03_014_jr_801734BC.o": 0.26,
"build/src/ov_SC03_014/ov_SC03_014_jr_801789AC.o": 0.119,
"build/src/ov_SC03_014/ov_SC03_014_jr_80178D40.o": 0.174,
"build/src/ov_SC03_014/ov_SC03_014_jr_8017A4AC.o": 0.089,
"build/src/ov_SC03_014/ov_SC03_014_jr_8017AE2C.o": 0.22,
"build/src/ov_SC03_014/ov_SC03_014_jr_8017EB7C.o": 0.244,
"build/src/ov_SC03_014/ov_SC03_014_jr_80184440.o": 0.077,
"build/src/ov_SC03_014/ov_SC03_014_jr_801848E4.o": 0.445,
"build/src/ov_SC03_014/ov_SC03_014_o0b.o": 0.073,
"build/src/ov_SC03_014/ov_SC03_014_o0c.o": 0.104,
"build/src/ov_SC03_014/ov_SC03_014_o0d.o": 0.078,
"build/src/ov_SC03_014/ov_SC03_014_o0e.o": 0.135,
"build/src/ov_SC03_015/ov_SC03_015.o": 0.164,
"build/src/ov_SC03_015/ov_SC03_015_after.o": 0.683,
"build/src/ov_SC03_015/ov_SC03_015_jr_8012ACE0.o": 0.528,
"build/src/ov_SC03_015/ov_SC03_015_jr_80135888.o": 0.091,
"build/src/ov_SC03_015/ov_SC03_015_jr_80135A4C.o": 0.102,
"build/src/ov_SC03_015/ov_SC03_015_jr_80135D20.o": 0.165,
"build/src/ov_SC03_015/ov_SC03_015_jr_801380E0.o": 0.186,
"build/src/ov_SC03_015/ov_SC03_015_jr_8013C98C.o": 0.187,
"build/src/ov_SC03_015/ov_SC03_015_jr_8013F350.o": 0.102,
"build/src/ov_SC03_015/ov_SC03_015_jr_8013FFD8.o": 0.145,
"build/src/ov_SC03_015/ov_SC03_015_jr_80140608.o": 0.266,
"build/src/ov_SC03_015/ov_SC03_015_jr_8015444C.o": 0.098,
"build/src/ov_SC03_015/ov_SC03_015_jr_80154C24.o": 0.232,
"build/src/ov_SC03_015/ov_SC03_015_jr_801588CC.o": 0.132,
"build/src/ov_SC03_015/ov_SC03_015_jr_80159C84.o": 0.087,
"build/src/ov_SC03_015/ov_SC03_015_jr_8015A3C8.o": 0.098,
"build/src/ov_SC03_015/ov_SC03_015_jr_8015AE2C.o": 0.153,
"build/src/ov_SC03_015/ov_SC03_015_jr_8015C32C.o": 0.651,
"build/src/ov_SC03_015/ov_SC03_015_jr_8016AB6C.o": 0.471,
"build/src/ov_SC03_015/ov_SC03_015_jr_80171B4C.o": 0.131,
"build/src/ov_SC03_015/ov_SC03_015_jr_801734BC.o": 0.281,
"build/src/ov_SC03_015/ov_SC03_015_jr_801789AC.o": 0.073,
"build/src/ov_SC03_015/ov_SC03_015_jr_80178D40.o": 0.139,
"build/src/ov_SC03_015/ov_SC03_015_jr_8017A4AC.o": 0.091,
"build/src/ov_SC03_015/ov_SC03_015_jr_8017AE2C.o": 0.2,
"build/src/ov_SC03_015/ov_SC03_015_jr_8017EB7C.o": 0.26,
"build/src/ov_SC03_015/ov_SC03_015_jr_80184440.o": 0.073,
"build/src/ov_SC03_015/ov_SC03_015_jr_801848E4.o": 0.368,
"build/src/ov_SC03_014/ov_SC03_014_jr_8017EB7C.o": 0.294,
"build/src/ov_SC03_014/ov_SC03_014_jr_80184440.o": 0.083,
"build/src/ov_SC03_014/ov_SC03_014_jr_801848E4.o": 0.349,
"build/src/ov_SC03_014/ov_SC03_014_o0b.o": 0.083,
"build/src/ov_SC03_014/ov_SC03_014_o0c.o": 0.136,
"build/src/ov_SC03_014/ov_SC03_014_o0d.o": 0.106,
"build/src/ov_SC03_014/ov_SC03_014_o0e.o": 0.127,
"build/src/ov_SC03_015/ov_SC03_015.o": 0.268,
"build/src/ov_SC03_015/ov_SC03_015_after.o": 0.61,
"build/src/ov_SC03_015/ov_SC03_015_jr_8012ACE0.o": 0.458,
"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.116,
"build/src/ov_SC03_015/ov_SC03_015_jr_80135D20.o": 0.172,
"build/src/ov_SC03_015/ov_SC03_015_jr_801380E0.o": 0.189,
"build/src/ov_SC03_015/ov_SC03_015_jr_8013C98C.o": 0.164,
"build/src/ov_SC03_015/ov_SC03_015_jr_8013F350.o": 0.1,
"build/src/ov_SC03_015/ov_SC03_015_jr_8013FFD8.o": 0.119,
"build/src/ov_SC03_015/ov_SC03_015_jr_80140608.o": 0.268,
"build/src/ov_SC03_015/ov_SC03_015_jr_8015444C.o": 0.121,
"build/src/ov_SC03_015/ov_SC03_015_jr_80154C24.o": 0.212,
"build/src/ov_SC03_015/ov_SC03_015_jr_801588CC.o": 0.138,
"build/src/ov_SC03_015/ov_SC03_015_jr_80159C84.o": 0.11,
"build/src/ov_SC03_015/ov_SC03_015_jr_8015A3C8.o": 0.111,
"build/src/ov_SC03_015/ov_SC03_015_jr_8015AE2C.o": 0.136,
"build/src/ov_SC03_015/ov_SC03_015_jr_8015C32C.o": 0.708,
"build/src/ov_SC03_015/ov_SC03_015_jr_8016AB6C.o": 0.392,
"build/src/ov_SC03_015/ov_SC03_015_jr_80171B4C.o": 0.166,
"build/src/ov_SC03_015/ov_SC03_015_jr_801734BC.o": 0.302,
"build/src/ov_SC03_015/ov_SC03_015_jr_801789AC.o": 0.08,
"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.103,
"build/src/ov_SC03_015/ov_SC03_015_jr_8017AE2C.o": 0.225,
"build/src/ov_SC03_015/ov_SC03_015_jr_8017EB7C.o": 0.256,
"build/src/ov_SC03_015/ov_SC03_015_jr_80184440.o": 0.083,
"build/src/ov_SC03_015/ov_SC03_015_jr_801848E4.o": 0.347,
"build/src/ov_SC03_015/ov_SC03_015_o0b.o": 0.077,
"build/src/ov_SC03_015/ov_SC03_015_o0c.o": 0.105,
"build/src/ov_SC03_015/ov_SC03_015_o0d.o": 0.106,
"build/src/ov_SC03_015/ov_SC03_015_o0e.o": 0.104,
"build/src/ov_SC04_011/ov_SC04_011.o": 0.217,
"build/src/ov_SC04_011/ov_SC04_011_after.o": 0.611,
"build/src/ov_SC03_015/ov_SC03_015_o0c.o": 0.096,
"build/src/ov_SC03_015/ov_SC03_015_o0d.o": 0.122,
"build/src/ov_SC03_015/ov_SC03_015_o0e.o": 0.123,
"build/src/ov_SC04_011/ov_SC04_011.o": 0.174,
"build/src/ov_SC04_011/ov_SC04_011_after.o": 0.587,
"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.112,
"build/src/ov_SC04_011/ov_SC04_011_jr_80135A4C.o": 0.092,
"build/src/ov_SC04_011/ov_SC04_011_jr_80135D20.o": 0.158,
"build/src/ov_SC04_011/ov_SC04_011_jr_801380E0.o": 0.213,
"build/src/ov_SC04_011/ov_SC04_011_jr_8013C98C.o": 0.142,
"build/src/ov_SC04_011/ov_SC04_011_jr_8013F350.o": 0.109,
"build/src/ov_SC04_011/ov_SC04_011_jr_8013FFD8.o": 0.114,
"build/src/ov_SC04_011/ov_SC04_011_jr_80140608.o": 0.227,
"build/src/ov_SC04_011/ov_SC04_011_jr_8015444C.o": 0.125,
"build/src/ov_SC04_011/ov_SC04_011_jr_80154C24.o": 0.202,
"build/src/ov_SC04_011/ov_SC04_011_jr_801588CC.o": 0.117,
"build/src/ov_SC04_011/ov_SC04_011_jr_80159C84.o": 0.114,
"build/src/ov_SC04_011/ov_SC04_011_jr_8015A3C8.o": 0.09,
"build/src/ov_SC04_011/ov_SC04_011_jr_8015AE2C.o": 0.113,
"build/src/ov_SC04_011/ov_SC04_011_jr_8015C32C.o": 0.575,
"build/src/ov_SC04_011/ov_SC04_011_jr_8016AB6C.o": 0.328,
"build/src/ov_SC04_011/ov_SC04_011_jr_80171B4C.o": 0.177,
"build/src/ov_SC04_011/ov_SC04_011_jr_801734BC.o": 0.258,
"build/src/ov_SC04_011/ov_SC04_011_jr_801789AC.o": 0.086,
"build/src/ov_SC04_011/ov_SC04_011_jr_80178D40.o": 0.153,
"build/src/ov_SC04_011/ov_SC04_011_jr_8017A4AC.o": 0.122,
"build/src/ov_SC04_011/ov_SC04_011_jr_8017AE2C.o": 0.142,
"build/src/ov_SC04_011/ov_SC04_011_jr_8017D494.o": 0.747,
"build/src/ov_SC04_011/ov_SC04_011_o0b.o": 0.074,
"build/src/ov_SC04_011/ov_SC04_011_o0c.o": 0.093
"build/src/ov_SC04_011/ov_SC04_011_jr_80135888.o": 0.067,
"build/src/ov_SC04_011/ov_SC04_011_jr_80135A4C.o": 0.108,
"build/src/ov_SC04_011/ov_SC04_011_jr_80135D20.o": 0.165,
"build/src/ov_SC04_011/ov_SC04_011_jr_801380E0.o": 0.189,
"build/src/ov_SC04_011/ov_SC04_011_jr_8013C98C.o": 0.127,
"build/src/ov_SC04_011/ov_SC04_011_jr_8013F350.o": 0.091,
"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.274,
"build/src/ov_SC04_011/ov_SC04_011_jr_8015444C.o": 0.119,
"build/src/ov_SC04_011/ov_SC04_011_jr_80154C24.o": 0.226,
"build/src/ov_SC04_011/ov_SC04_011_jr_801588CC.o": 0.177,
"build/src/ov_SC04_011/ov_SC04_011_jr_80159C84.o": 0.125,
"build/src/ov_SC04_011/ov_SC04_011_jr_8015A3C8.o": 0.157,
"build/src/ov_SC04_011/ov_SC04_011_jr_8015AE2C.o": 0.131,
"build/src/ov_SC04_011/ov_SC04_011_jr_8015C32C.o": 0.561,
"build/src/ov_SC04_011/ov_SC04_011_jr_8016AB6C.o": 0.343,
"build/src/ov_SC04_011/ov_SC04_011_jr_80171B4C.o": 0.174,
"build/src/ov_SC04_011/ov_SC04_011_jr_801734BC.o": 0.262,
"build/src/ov_SC04_011/ov_SC04_011_jr_801789AC.o": 0.076,
"build/src/ov_SC04_011/ov_SC04_011_jr_80178D40.o": 0.145,
"build/src/ov_SC04_011/ov_SC04_011_jr_8017A4AC.o": 0.094,
"build/src/ov_SC04_011/ov_SC04_011_jr_8017AE2C.o": 0.183,
"build/src/ov_SC04_011/ov_SC04_011_jr_8017D494.o": 0.726,
"build/src/ov_SC04_011/ov_SC04_011_o0b.o": 0.076,
"build/src/ov_SC04_011/ov_SC04_011_o0c.o": 0.09
},
"ok": true,
"seconds": 4.0
"seconds": 3.7
}
File diff suppressed because one or more lines are too long
+7 -15
View File
@@ -6411,28 +6411,22 @@ extern s32 func_8004787C(s32 a0);
extern void func_8012C218(void *a0);
extern void func_801857A8(s32 a0);
void func_80185678(s32 a0) {
s32 ent = a0;
s32 state = *(u16 *)(ent + 0x34);
s32 sub;
register s32 t __asm__("$2"); // !FAKE: pin $2 — NEEDED DIFFERS (P36 rung B tus9)
void func_80185678(s32 ent) {
s32 t;
s32 cnt;
switch (state) {
switch (*(u16 *)(ent + 0x34)) {
case 0:
t = func_8004787C(*(s32 *)(ent + 0x1C) << 6);
*(s16 *)(*(s32 *)(ent + 0x20) + 0x18) = t * 7;
sub = *(s32 *)(ent + 0x20);
*(s16 *)(sub + 0x1A) = t << 1;
*(s16 *)(*(s32 *)(ent + 0x20) + 0x1A) = t << 1;
cnt = *(s32 *)(ent + 0x1C) + 1;
*(s32 *)(ent + 0x1C) = cnt;
if (cnt < 0x10) {
break;
}
sub = *(s32 *)(ent + 0x20);
*(s16 *)(sub + 0x1A) = 0x7000;
sub = *(s32 *)(ent + 0x20);
*(s16 *)(sub + 0x1A) = 0x2000;
*(s16 *)(*(s32 *)(ent + 0x20) + 0x1A) = 0x7000;
*(s16 *)(*(s32 *)(ent + 0x20) + 0x1A) = 0x2000;
*(s32 *)(ent + 0x1C) = 0x40;
*(u16 *)(ent + 0x34) = *(u16 *)(ent + 0x34) + 1;
break;
@@ -6443,9 +6437,7 @@ void func_80185678(s32 a0) {
}
break;
case 2:
t = func_8004787C(*(s32 *)(ent + 0x1C) << 6);
sub = *(s32 *)(ent + 0x20);
*(s16 *)(sub + 0x1A) = t << 1;
*(s16 *)(*(s32 *)(ent + 0x20) + 0x1A) = func_8004787C(*(s32 *)(ent + 0x1C) << 6) << 1;
cnt = *(s32 *)(ent + 0x1C) - 1;
*(s32 *)(ent + 0x1C) = cnt;
if (cnt == 0) {
+7 -15
View File
@@ -6380,28 +6380,22 @@ extern s32 func_8012BEE8(s32 a0);
extern void func_8012C218(void *a0);
extern void func_80185484(s32 a0);
void func_80185354(s32 a0) {
s32 ent = a0;
s32 state = *(u16 *)(ent + 0x34);
s32 sub;
register s32 t __asm__("$2"); // !FAKE: pin $2 — NEEDED DIFFERS (P36 rung B tus9)
void func_80185354(s32 ent) {
s32 t;
s32 cnt;
switch (state) {
switch (*(u16 *)(ent + 0x34)) {
case 0:
t = func_8004787C(*(s32 *)(ent + 0x1C) << 6);
*(s16 *)(*(s32 *)(ent + 0x20) + 0x18) = t * 7;
sub = *(s32 *)(ent + 0x20);
*(s16 *)(sub + 0x1A) = t << 1;
*(s16 *)(*(s32 *)(ent + 0x20) + 0x1A) = t << 1;
cnt = *(s32 *)(ent + 0x1C) + 1;
*(s32 *)(ent + 0x1C) = cnt;
if (cnt < 0x10) {
break;
}
sub = *(s32 *)(ent + 0x20);
*(s16 *)(sub + 0x1A) = 0x7000;
sub = *(s32 *)(ent + 0x20);
*(s16 *)(sub + 0x1A) = 0x2000;
*(s16 *)(*(s32 *)(ent + 0x20) + 0x1A) = 0x7000;
*(s16 *)(*(s32 *)(ent + 0x20) + 0x1A) = 0x2000;
*(s32 *)(ent + 0x1C) = 0x40;
*(u16 *)(ent + 0x34) = *(u16 *)(ent + 0x34) + 1;
break;
@@ -6412,9 +6406,7 @@ void func_80185354(s32 a0) {
}
break;
case 2:
t = func_8004787C(*(s32 *)(ent + 0x1C) << 6);
sub = *(s32 *)(ent + 0x20);
*(s16 *)(sub + 0x1A) = t << 1;
*(s16 *)(*(s32 *)(ent + 0x20) + 0x1A) = func_8004787C(*(s32 *)(ent + 0x1C) << 6) << 1;
cnt = *(s32 *)(ent + 0x1C) - 1;
*(s32 *)(ent + 0x1C) = cnt;
if (cnt == 0) {
+7 -15
View File
@@ -4711,28 +4711,22 @@ extern s32 func_8004787C(s32 a0);
extern void func_8012C218(void *a0);
extern void func_8018632C(s32 a0);
void func_801861FC(s32 a0) {
s32 ent = a0;
s32 state = *(u16 *)(ent + 0x34);
s32 sub;
register s32 t __asm__("$2"); // !FAKE: pin $2 — NEEDED DIFFERS (P36 rung B tus9)
void func_801861FC(s32 ent) {
s32 t;
s32 cnt;
switch (state) {
switch (*(u16 *)(ent + 0x34)) {
case 0:
t = func_8004787C(*(s32 *)(ent + 0x1C) << 6);
*(s16 *)(*(s32 *)(ent + 0x20) + 0x18) = t * 7;
sub = *(s32 *)(ent + 0x20);
*(s16 *)(sub + 0x1A) = t << 1;
*(s16 *)(*(s32 *)(ent + 0x20) + 0x1A) = t << 1;
cnt = *(s32 *)(ent + 0x1C) + 1;
*(s32 *)(ent + 0x1C) = cnt;
if (cnt < 0x10) {
break;
}
sub = *(s32 *)(ent + 0x20);
*(s16 *)(sub + 0x1A) = 0x7000;
sub = *(s32 *)(ent + 0x20);
*(s16 *)(sub + 0x1A) = 0x2000;
*(s16 *)(*(s32 *)(ent + 0x20) + 0x1A) = 0x7000;
*(s16 *)(*(s32 *)(ent + 0x20) + 0x1A) = 0x2000;
*(s32 *)(ent + 0x1C) = 0x40;
*(u16 *)(ent + 0x34) = *(u16 *)(ent + 0x34) + 1;
break;
@@ -4743,9 +4737,7 @@ void func_801861FC(s32 a0) {
}
break;
case 2:
t = func_8004787C(*(s32 *)(ent + 0x1C) << 6);
sub = *(s32 *)(ent + 0x20);
*(s16 *)(sub + 0x1A) = t << 1;
*(s16 *)(*(s32 *)(ent + 0x20) + 0x1A) = func_8004787C(*(s32 *)(ent + 0x1C) << 6) << 1;
cnt = *(s32 *)(ent + 0x1C) - 1;
*(s32 *)(ent + 0x1C) = cnt;
if (cnt == 0) {
+7 -15
View File
@@ -3598,28 +3598,22 @@ extern s32 func_8004787C(s32 a0);
extern void func_8012C218(void *a0);
extern void func_80183318(s32 a0);
void func_801831E8(s32 a0) {
s32 ent = a0;
s32 state = *(u16 *)(ent + 0x34);
s32 sub;
register s32 t __asm__("$2"); // !FAKE: pin $2 — NEEDED DIFFERS (P36 rung B tus9)
void func_801831E8(s32 ent) {
s32 t;
s32 cnt;
switch (state) {
switch (*(u16 *)(ent + 0x34)) {
case 0:
t = func_8004787C(*(s32 *)(ent + 0x1C) << 6);
*(s16 *)(*(s32 *)(ent + 0x20) + 0x18) = t * 7;
sub = *(s32 *)(ent + 0x20);
*(s16 *)(sub + 0x1A) = t << 1;
*(s16 *)(*(s32 *)(ent + 0x20) + 0x1A) = t << 1;
cnt = *(s32 *)(ent + 0x1C) + 1;
*(s32 *)(ent + 0x1C) = cnt;
if (cnt < 0x10) {
break;
}
sub = *(s32 *)(ent + 0x20);
*(s16 *)(sub + 0x1A) = 0x7000;
sub = *(s32 *)(ent + 0x20);
*(s16 *)(sub + 0x1A) = 0x2000;
*(s16 *)(*(s32 *)(ent + 0x20) + 0x1A) = 0x7000;
*(s16 *)(*(s32 *)(ent + 0x20) + 0x1A) = 0x2000;
*(s32 *)(ent + 0x1C) = 0x40;
*(u16 *)(ent + 0x34) = *(u16 *)(ent + 0x34) + 1;
break;
@@ -3630,9 +3624,7 @@ void func_801831E8(s32 a0) {
}
break;
case 2:
t = func_8004787C(*(s32 *)(ent + 0x1C) << 6);
sub = *(s32 *)(ent + 0x20);
*(s16 *)(sub + 0x1A) = t << 1;
*(s16 *)(*(s32 *)(ent + 0x20) + 0x1A) = func_8004787C(*(s32 *)(ent + 0x1C) << 6) << 1;
cnt = *(s32 *)(ent + 0x1C) - 1;
*(s32 *)(ent + 0x1C) = cnt;
if (cnt == 0) {