mirror of
https://github.com/Druthulu/BFM-decomp
synced 2026-10-02 07:59:52 -04:00
phase-36: S104 s104_d23 — func_80181864 banked at 0 through the whole-object gate + propagated — 3 levers → 0: a loop-local next for the list walk (cse.c:846-857), each arm stores before its counter so cross-jump keeps the four stores (jump.c:2371)
This commit is contained in:
@@ -1,4 +1,4 @@
|
||||
void func_80181864(s32 arg0) {
|
||||
void func_80181864(s32 e) {
|
||||
extern void func_8012C218(void *a0);
|
||||
extern s32 func_8012CC64(s32 a0, void *a1);
|
||||
extern s32 func_80133784(s32 a0, void *a1, s32 a2);
|
||||
@@ -9,28 +9,23 @@ void func_80181864(s32 arg0) {
|
||||
extern s32 D_8019F2A8;
|
||||
extern s32 D_8019F28C;
|
||||
|
||||
s32 e;
|
||||
s32 p;
|
||||
s32 n;
|
||||
s32 dir;
|
||||
|
||||
e = arg0;
|
||||
if (--*(s16 *)(e + 0xFC) == 0) {
|
||||
n = 0;
|
||||
p = e;
|
||||
do {
|
||||
arg0 = *(s32 *)(arg0 + 0x6C);
|
||||
p = *(s32 *)(p + 0x6C);
|
||||
n++;
|
||||
} while (arg0 != 0);
|
||||
} while (p != 0);
|
||||
if (n < 7) {
|
||||
if (e != 0) {
|
||||
arg0 = e;
|
||||
for (;;) {
|
||||
s32 next = *(s32 *)(arg0 + 0x6C);
|
||||
func_8012C218((void *)arg0);
|
||||
arg0 = next;
|
||||
if (arg0 == 0) {
|
||||
return;
|
||||
}
|
||||
}
|
||||
p = e;
|
||||
while (p != 0) {
|
||||
s32 next = *(s32 *)(p + 0x6C);
|
||||
func_8012C218((void *)p);
|
||||
p = next;
|
||||
}
|
||||
return;
|
||||
}
|
||||
@@ -71,15 +66,15 @@ void func_80181864(s32 arg0) {
|
||||
q[2] = z;
|
||||
|
||||
if (func_80133784(1, p1, (s32)q) != 0) {
|
||||
n = 1;
|
||||
*(s16 *)(e + 0x12) = -(rand() & 3) - 4;
|
||||
n = 1;
|
||||
} else {
|
||||
q[0] = p1[0] + 0x40;
|
||||
q[1] = p1[1];
|
||||
q[2] = p1[2];
|
||||
if (func_80133784(1, q, (s32)p1) != 0) {
|
||||
n = 2;
|
||||
*(s16 *)(e + 0x12) = (rand() & 3) + 4;
|
||||
n = 2;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -100,15 +95,15 @@ void func_80181864(s32 arg0) {
|
||||
q[2] = z + 0x40;
|
||||
|
||||
if (func_80133784(1, p1, (s32)q) != 0) {
|
||||
n += 4;
|
||||
*(s16 *)(e + 0x1A) = -(rand() & 3) - 4;
|
||||
n += 4;
|
||||
} else {
|
||||
q[0] = p1[0];
|
||||
q[1] = p1[1];
|
||||
q[2] = p1[2] + 0x40;
|
||||
if (func_80133784(1, q, (s32)p1) != 0) {
|
||||
n += 8;
|
||||
*(s16 *)(e + 0x1A) = (rand() & 3) + 4;
|
||||
n += 8;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -146,7 +141,6 @@ void func_80181864(s32 arg0) {
|
||||
s32 t1;
|
||||
s32 t2;
|
||||
s32 t3;
|
||||
s32 p;
|
||||
|
||||
*(s16 *)(*(s32 *)(e + 0x20) + 0x14) = 0;
|
||||
t1 = *(u16 *)(e + 6);
|
||||
|
||||
@@ -0,0 +1,71 @@
|
||||
# func_80181864 (ov_SC03_113) — d23, P36 S104 — score 25 → 0, ZERO levers (3 levers → 0; 7 copies close, 21 → 0)
|
||||
|
||||
## (a) The residual
|
||||
Two defects, both counted before touching the source (237 vs 240 instructions):
|
||||
1. **Free-list loop** (was the `launder` lever): target `move a0,s0; beqz a0,END; nop; j L; nop` — the exit test reads the
|
||||
COPY (a0); mine tested the source `s0` and reorg put the copy in the branch delay slot (`beqz s0,END; move a0,s0`).
|
||||
Same count, different test register → one delay slot unfilled in the target.
|
||||
2. **Two cross-jumped stores** (were the two `barrier` levers): target ends BOTH arms of each `if (call) … else if (call) …`
|
||||
pair with its own `sh v0,18(s0)` / `sh v0,26(s0)` (the first arm's in its `j`'s delay slot); mine had ONE store, the
|
||||
first arm jumping into the middle of the second arm's tail (`j <sh>; addiu v0,v0,-4`) — 2 missing instructions.
|
||||
|
||||
## (b) Passes and decisions (read, and proved on dumps)
|
||||
1. cse `make_regs_eqv`, **`cse.c:846-857`**: on `arg0 = e`, the NEW register becomes the class's canonical (first) reg only
|
||||
if it lives beyond the cse block AND its last use is later than the old one's (`regno_last_uid[new] > …[firstr]`).
|
||||
The decompiler text reused `e` (the function's entity pointer, used to the function's END) as the loop's "next" temp,
|
||||
so `e` always stayed canonical and the test `arg0 == 0` was rewritten to `e == 0` (`canon_reg`). A loop-local `next`
|
||||
dies at `p = next`, `p` outlives it (the loop test), so `p` becomes canonical and the test stays on the copy.
|
||||
(Proved on bytes: this move alone 25 → 21, the loop hunk vanishes.)
|
||||
2. post-reload jump pass with cross-jumping, **`toplev.c:3142`** → `find_cross_jump` **`jump.c:2371`**, equality by
|
||||
`rtx_renumbered_equal_p` (`jump.c:3899`), minimum 1 insn (`jump.c:1978`). Source order `n = 1; store;` makes the store the
|
||||
LAST insn before both the `j L` and the fall-through into `L` → equal → merged (`do_cross_jump`). Dump proof
|
||||
(`scratch/dumps_a1` vs `scratch/dumps_sw15`, pass order greg → sched2 → jump2 → dbr): with the old order the stores to
|
||||
e+0x12/e+0x1A are insns 259/312/392/445 in `.sched2` and only 312/445 in `.jump2`; with `store; n = 1;` the last insns
|
||||
before the jump/label are `(set s1 (const_int 1))` vs `(set s1 (const_int 2))` (and `s1+4` vs `s1+8`) — unequal at the
|
||||
first compare, no merge; all four stores survive `.jump2`, and reorg (`.dbr`) later hoists `li s1,N` into the `jal rand`
|
||||
delay slot and copies the store into the `j`'s slot (new uids 766/769) — exactly the target's layout.
|
||||
|
||||
## (c) The moves that closed it (all plain C)
|
||||
1. `for(;;){ e = p->next; f(p); p = e; if (!p) return; }` → `while (p != 0) { s32 next = *(s32 *)(p + 0x6C); f(p); p = next; }`
|
||||
(a fresh loop-local `next` instead of reusing `e`; the structured `while` is byte-identical to the `for(;;)`/`if` form,
|
||||
and so are `for (p = e; p != 0; p = next)` and the `if (e) do … while` form — tested).
|
||||
2. In each of the four arms: `n = K; *(s16 *)(e + 0x12) = …;` → `*(s16 *)(e + 0x12) = …; n = K;` (store first, then the
|
||||
counter). Either one arm of each pair suffices (masks 5/6/9/10… of 16 all score 0); all four swapped is the consistent text.
|
||||
3. Readability only (0 bytes): parameter named `e` directly, one walker `p` for all three list walks (the count loop, the
|
||||
free loop, the 0x2000-arm loop — the inner `s32 p;` shadow deleted). Scores 0 with each step.
|
||||
Single-move scores: move 1 alone 21, move 2 alone 18, both 0 (the 25 start).
|
||||
|
||||
## (d) GENERATOR PROPOSALS
|
||||
- **R-xjump-order**: when the residual shows a `j` into the MIDDLE of another arm's tail with the target duplicating that
|
||||
tail's last store (a cross-jump stub; tree lever = `__asm__ __volatile__("")` "5a cross-jump barrier"), move the arm's
|
||||
last side-effect-free REGISTER assignment (`n = K`, `n += K`, a flag) to AFTER the arm's final store, in every arm that
|
||||
ends `…; store;` before a join label — the arms then end with unequal insns and `find_cross_jump` stops at the first
|
||||
compare. This is the lever-free replacement for every "cookbook 5a" barrier whose arms set distinct constants.
|
||||
- **R-fresh-next**: when a list-walk `x = p->next; f(p); p = x; if (p == 0)` reuses a LONG-LIVED variable as `x` and the
|
||||
residual is the loop's test register (test on the source vs the copy), replace `x` with a loop-local `next`
|
||||
(cse canonical-reg choice, `cse.c:846-857`). Tree lever = a `"=r"/"0"` launder on the copy.
|
||||
|
||||
## (e) What did not work / notes
|
||||
- Struct typing does NOT steer the cross-jump: a body-local `struct Ent { …; s16 v12; …; s16 v1A; }` for the four stores
|
||||
scores 21 with the old statement order (`scratch/st_a1.c`) and 0 with the new (`scratch/st_sw15.c`) —
|
||||
`rtx_renumbered_equal_p` compares codes/modes/operands, never `MEM_IN_STRUCT_P` (a flag, not a format field).
|
||||
- No lever-free donor existed: all 6 other definitions of the class carry the same 3 levers.
|
||||
- The sweep's generators could not reach either move: R9 swap-stmts was applied at one site only (`@5537`), and neither
|
||||
defect alone moves the score much from its start (21/18) while the other remains — a JOINT edit (method step 5).
|
||||
|
||||
## (f) Where the method fell short
|
||||
- Nothing blocking; step 1 (whole-function dump diff with addresses stripped) located both defects in one read, and the
|
||||
`.sched2`/`.jump2` store-uid census proved the cross-jump in one command. A cheap enumerator over "statement pair
|
||||
swaps inside arms that end at a shared label" (16 bodies here, ~5 s) would have found move 2 mechanically.
|
||||
|
||||
## (g) Structs answer
|
||||
No for this class — neither remaining decision reads struct information: cse's canonical-register choice is lifetime
|
||||
arithmetic on pseudos, and cross-jump's equality ignores MEM flags (tested on bytes, above). A struct for `e` would still
|
||||
be the right READABILITY step for the structs phase: `0x02 s16 state`, `0x06/0x0A/0x0E u16 pos x/y/z`, `0x12/0x16/0x1A s16
|
||||
vel x/y/z`, `0x20 ptr → sub-object (0x12 s16 dir, 0x14 s16 angle)`, `0x34 s16`, `0x6C next` (linked list), `0x70 s16`,
|
||||
`0x88/0x8A/0x8C s16 home x/y/z`, `0xFC s16 timer` — all byte-neutral per the struct test.
|
||||
|
||||
## Proved vs not proved
|
||||
Proved on bytes: both moves (score 0, reloc-level objdump identical, `scratch/final.s` vs `scratch/target.s`), the
|
||||
cross-jump attribution (uid census across `.sched2`/`.jump2`), the struct null. Read but not traced in a dump: the exact
|
||||
`make_regs_eqv` branch taken for `p = next` (inferred from the loop hunk disappearing under move 1 alone).
|
||||
+186
-186
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"head": "48bb124be",
|
||||
"head": "1f4989b4c",
|
||||
"stamp": "15956e4a96c4",
|
||||
"generated": "2026-09-10 22:57",
|
||||
"generated": "2026-09-10 22:59",
|
||||
"aliases": [
|
||||
"main",
|
||||
"ov_SC03_014",
|
||||
@@ -21,207 +21,207 @@
|
||||
"main": {
|
||||
"objects": 85,
|
||||
"identical": 85,
|
||||
"seconds": 10.658000000000007,
|
||||
"mean_s": 0.125
|
||||
"seconds": 9.427999999999999,
|
||||
"mean_s": 0.111
|
||||
},
|
||||
"ov_SC03_014": {
|
||||
"objects": 32,
|
||||
"identical": 32,
|
||||
"seconds": 6.604000000000002,
|
||||
"mean_s": 0.206
|
||||
"seconds": 3.6810000000000005,
|
||||
"mean_s": 0.115
|
||||
},
|
||||
"ov_SC03_015": {
|
||||
"objects": 32,
|
||||
"identical": 32,
|
||||
"seconds": 6.815000000000002,
|
||||
"mean_s": 0.213
|
||||
"seconds": 5.304,
|
||||
"mean_s": 0.166
|
||||
},
|
||||
"ov_SC04_011": {
|
||||
"objects": 28,
|
||||
"identical": 28,
|
||||
"seconds": 6.18,
|
||||
"mean_s": 0.221
|
||||
"seconds": 5.533999999999999,
|
||||
"mean_s": 0.198
|
||||
}
|
||||
},
|
||||
"per_object_seconds": {
|
||||
"build/src/800.o": 0.967,
|
||||
"build/src/800_b.o": 0.145,
|
||||
"build/src/800_b_2.o": 0.431,
|
||||
"build/src/800_b_o0a.o": 0.163,
|
||||
"build/src/800_c.o": 0.324,
|
||||
"build/src/800b2.o": 0.127,
|
||||
"build/src/apicard1.o": 0.081,
|
||||
"build/src/apicard2.o": 0.088,
|
||||
"build/src/apicard3.o": 0.148,
|
||||
"build/src/apicard4.o": 0.16,
|
||||
"build/src/apicard5.o": 0.128,
|
||||
"build/src/apicard6.o": 0.107,
|
||||
"build/src/apicard7.o": 0.106,
|
||||
"build/src/boot.o": 0.116,
|
||||
"build/src/gap.o": 0.068,
|
||||
"build/src/libapi1.o": 0.076,
|
||||
"build/src/libapi2.o": 0.084,
|
||||
"build/src/libc2_1.o": 0.154,
|
||||
"build/src/libc2_2.o": 0.118,
|
||||
"build/src/libcd1.o": 0.103,
|
||||
"build/src/libcd2.o": 0.13,
|
||||
"build/src/libetc.o": 0.098,
|
||||
"build/src/libgpu.o": 0.11,
|
||||
"build/src/libgpu2.o": 0.09,
|
||||
"build/src/libgs1.o": 0.08,
|
||||
"build/src/libgs2.o": 0.081,
|
||||
"build/src/libgs3.o": 0.094,
|
||||
"build/src/libgs4.o": 0.077,
|
||||
"build/src/libgs5.o": 0.073,
|
||||
"build/src/libgs6.o": 0.094,
|
||||
"build/src/libgs7.o": 0.113,
|
||||
"build/src/libgs8.o": 0.081,
|
||||
"build/src/libgte1.o": 0.094,
|
||||
"build/src/libgte10.o": 0.085,
|
||||
"build/src/libgte11.o": 0.131,
|
||||
"build/src/libgte12.o": 0.127,
|
||||
"build/src/libgte13.o": 0.088,
|
||||
"build/src/libgte14.o": 0.133,
|
||||
"build/src/libgte15.o": 0.099,
|
||||
"build/src/libgte16.o": 0.135,
|
||||
"build/src/libgte17.o": 0.082,
|
||||
"build/src/libgte18.o": 0.116,
|
||||
"build/src/libgte19.o": 0.098,
|
||||
"build/src/libgte2.o": 0.094,
|
||||
"build/src/libgte20.o": 0.09,
|
||||
"build/src/libgte21.o": 0.117,
|
||||
"build/src/libgte22.o": 0.082,
|
||||
"build/src/libgte23.o": 0.089,
|
||||
"build/src/libgte24.o": 0.081,
|
||||
"build/src/libgte25.o": 0.129,
|
||||
"build/src/libgte26.o": 0.086,
|
||||
"build/src/libgte27.o": 0.094,
|
||||
"build/src/libgte28.o": 0.087,
|
||||
"build/src/libgte29.o": 0.11,
|
||||
"build/src/libgte3.o": 0.122,
|
||||
"build/src/libgte30.o": 0.115,
|
||||
"build/src/libgte4.o": 0.104,
|
||||
"build/src/libgte5.o": 0.109,
|
||||
"build/src/libgte6.o": 0.1,
|
||||
"build/src/libgte7.o": 0.124,
|
||||
"build/src/libgte8.o": 0.114,
|
||||
"build/src/libgte9.o": 0.08,
|
||||
"build/src/libmcrd1.o": 0.149,
|
||||
"build/src/libmcrd2.o": 0.096,
|
||||
"build/src/libpad1.o": 0.087,
|
||||
"build/src/libpad2.o": 0.13,
|
||||
"build/src/sgap.o": 0.1,
|
||||
"build/src/sgap_2.o": 0.12,
|
||||
"build/src/sgap_3.o": 0.144,
|
||||
"build/src/sgap_4.o": 0.101,
|
||||
"build/src/sgap_5.o": 0.178,
|
||||
"build/src/sgap_6.o": 0.126,
|
||||
"build/src/sgap_8.o": 0.112,
|
||||
"build/src/snd1.o": 0.167,
|
||||
"build/src/snd10.o": 0.085,
|
||||
"build/src/snd11.o": 0.112,
|
||||
"build/src/snd12.o": 0.163,
|
||||
"build/src/snd2.o": 0.098,
|
||||
"build/src/snd3.o": 0.083,
|
||||
"build/src/snd4.o": 0.129,
|
||||
"build/src/snd5.o": 0.108,
|
||||
"build/src/snd6.o": 0.129,
|
||||
"build/src/snd7.o": 0.108,
|
||||
"build/src/snd8.o": 0.088,
|
||||
"build/src/snd9.o": 0.115,
|
||||
"build/src/ov_SC03_014/ov_SC03_014.o": 0.169,
|
||||
"build/src/ov_SC03_014/ov_SC03_014_after.o": 0.747,
|
||||
"build/src/ov_SC03_014/ov_SC03_014_jr_8012ACE0.o": 0.513,
|
||||
"build/src/ov_SC03_014/ov_SC03_014_jr_80135888.o": 0.078,
|
||||
"build/src/ov_SC03_014/ov_SC03_014_jr_80135A4C.o": 0.087,
|
||||
"build/src/ov_SC03_014/ov_SC03_014_jr_80135D20.o": 0.171,
|
||||
"build/src/ov_SC03_014/ov_SC03_014_jr_801380E0.o": 0.252,
|
||||
"build/src/ov_SC03_014/ov_SC03_014_jr_8013C98C.o": 0.2,
|
||||
"build/src/ov_SC03_014/ov_SC03_014_jr_8013F350.o": 0.122,
|
||||
"build/src/ov_SC03_014/ov_SC03_014_jr_8013FFD8.o": 0.131,
|
||||
"build/src/ov_SC03_014/ov_SC03_014_jr_80140608.o": 0.263,
|
||||
"build/src/800.o": 0.82,
|
||||
"build/src/800_b.o": 0.14,
|
||||
"build/src/800_b_2.o": 0.388,
|
||||
"build/src/800_b_o0a.o": 0.134,
|
||||
"build/src/800_c.o": 0.285,
|
||||
"build/src/800b2.o": 0.167,
|
||||
"build/src/apicard1.o": 0.098,
|
||||
"build/src/apicard2.o": 0.113,
|
||||
"build/src/apicard3.o": 0.086,
|
||||
"build/src/apicard4.o": 0.158,
|
||||
"build/src/apicard5.o": 0.129,
|
||||
"build/src/apicard6.o": 0.08,
|
||||
"build/src/apicard7.o": 0.16,
|
||||
"build/src/boot.o": 0.121,
|
||||
"build/src/gap.o": 0.081,
|
||||
"build/src/libapi1.o": 0.104,
|
||||
"build/src/libapi2.o": 0.069,
|
||||
"build/src/libc2_1.o": 0.081,
|
||||
"build/src/libc2_2.o": 0.078,
|
||||
"build/src/libcd1.o": 0.114,
|
||||
"build/src/libcd2.o": 0.123,
|
||||
"build/src/libetc.o": 0.117,
|
||||
"build/src/libgpu.o": 0.109,
|
||||
"build/src/libgpu2.o": 0.11,
|
||||
"build/src/libgs1.o": 0.113,
|
||||
"build/src/libgs2.o": 0.083,
|
||||
"build/src/libgs3.o": 0.119,
|
||||
"build/src/libgs4.o": 0.101,
|
||||
"build/src/libgs5.o": 0.099,
|
||||
"build/src/libgs6.o": 0.115,
|
||||
"build/src/libgs7.o": 0.093,
|
||||
"build/src/libgs8.o": 0.12,
|
||||
"build/src/libgte1.o": 0.076,
|
||||
"build/src/libgte10.o": 0.137,
|
||||
"build/src/libgte11.o": 0.096,
|
||||
"build/src/libgte12.o": 0.138,
|
||||
"build/src/libgte13.o": 0.085,
|
||||
"build/src/libgte14.o": 0.096,
|
||||
"build/src/libgte15.o": 0.118,
|
||||
"build/src/libgte16.o": 0.09,
|
||||
"build/src/libgte17.o": 0.111,
|
||||
"build/src/libgte18.o": 0.103,
|
||||
"build/src/libgte19.o": 0.108,
|
||||
"build/src/libgte2.o": 0.099,
|
||||
"build/src/libgte20.o": 0.093,
|
||||
"build/src/libgte21.o": 0.132,
|
||||
"build/src/libgte22.o": 0.096,
|
||||
"build/src/libgte23.o": 0.128,
|
||||
"build/src/libgte24.o": 0.094,
|
||||
"build/src/libgte25.o": 0.08,
|
||||
"build/src/libgte26.o": 0.13,
|
||||
"build/src/libgte27.o": 0.079,
|
||||
"build/src/libgte28.o": 0.105,
|
||||
"build/src/libgte29.o": 0.117,
|
||||
"build/src/libgte3.o": 0.097,
|
||||
"build/src/libgte30.o": 0.128,
|
||||
"build/src/libgte4.o": 0.11,
|
||||
"build/src/libgte5.o": 0.127,
|
||||
"build/src/libgte6.o": 0.102,
|
||||
"build/src/libgte7.o": 0.118,
|
||||
"build/src/libgte8.o": 0.077,
|
||||
"build/src/libgte9.o": 0.098,
|
||||
"build/src/libmcrd1.o": 0.087,
|
||||
"build/src/libmcrd2.o": 0.086,
|
||||
"build/src/libpad1.o": 0.098,
|
||||
"build/src/libpad2.o": 0.077,
|
||||
"build/src/sgap.o": 0.085,
|
||||
"build/src/sgap_2.o": 0.074,
|
||||
"build/src/sgap_3.o": 0.097,
|
||||
"build/src/sgap_4.o": 0.076,
|
||||
"build/src/sgap_5.o": 0.084,
|
||||
"build/src/sgap_6.o": 0.092,
|
||||
"build/src/sgap_8.o": 0.097,
|
||||
"build/src/snd1.o": 0.077,
|
||||
"build/src/snd10.o": 0.049,
|
||||
"build/src/snd11.o": 0.053,
|
||||
"build/src/snd12.o": 0.043,
|
||||
"build/src/snd2.o": 0.05,
|
||||
"build/src/snd3.o": 0.053,
|
||||
"build/src/snd4.o": 0.052,
|
||||
"build/src/snd5.o": 0.045,
|
||||
"build/src/snd6.o": 0.052,
|
||||
"build/src/snd7.o": 0.04,
|
||||
"build/src/snd8.o": 0.04,
|
||||
"build/src/snd9.o": 0.045,
|
||||
"build/src/ov_SC03_014/ov_SC03_014.o": 0.08,
|
||||
"build/src/ov_SC03_014/ov_SC03_014_after.o": 0.317,
|
||||
"build/src/ov_SC03_014/ov_SC03_014_jr_8012ACE0.o": 0.241,
|
||||
"build/src/ov_SC03_014/ov_SC03_014_jr_80135888.o": 0.034,
|
||||
"build/src/ov_SC03_014/ov_SC03_014_jr_80135A4C.o": 0.035,
|
||||
"build/src/ov_SC03_014/ov_SC03_014_jr_80135D20.o": 0.138,
|
||||
"build/src/ov_SC03_014/ov_SC03_014_jr_801380E0.o": 0.145,
|
||||
"build/src/ov_SC03_014/ov_SC03_014_jr_8013C98C.o": 0.112,
|
||||
"build/src/ov_SC03_014/ov_SC03_014_jr_8013F350.o": 0.112,
|
||||
"build/src/ov_SC03_014/ov_SC03_014_jr_8013FFD8.o": 0.099,
|
||||
"build/src/ov_SC03_014/ov_SC03_014_jr_80140608.o": 0.161,
|
||||
"build/src/ov_SC03_014/ov_SC03_014_jr_8015444C.o": 0.089,
|
||||
"build/src/ov_SC03_014/ov_SC03_014_jr_80154C24.o": 0.272,
|
||||
"build/src/ov_SC03_014/ov_SC03_014_jr_801588CC.o": 0.123,
|
||||
"build/src/ov_SC03_014/ov_SC03_014_jr_80159C84.o": 0.099,
|
||||
"build/src/ov_SC03_014/ov_SC03_014_jr_8015A3C8.o": 0.11,
|
||||
"build/src/ov_SC03_014/ov_SC03_014_jr_8015AE2C.o": 0.115,
|
||||
"build/src/ov_SC03_014/ov_SC03_014_jr_8015C32C.o": 0.622,
|
||||
"build/src/ov_SC03_014/ov_SC03_014_jr_8016AB6C.o": 0.347,
|
||||
"build/src/ov_SC03_014/ov_SC03_014_jr_80171B4C.o": 0.149,
|
||||
"build/src/ov_SC03_014/ov_SC03_014_jr_801734BC.o": 0.288,
|
||||
"build/src/ov_SC03_014/ov_SC03_014_jr_801789AC.o": 0.11,
|
||||
"build/src/ov_SC03_014/ov_SC03_014_jr_80178D40.o": 0.148,
|
||||
"build/src/ov_SC03_014/ov_SC03_014_jr_8017A4AC.o": 0.1,
|
||||
"build/src/ov_SC03_014/ov_SC03_014_jr_8017AE2C.o": 0.206,
|
||||
"build/src/ov_SC03_014/ov_SC03_014_jr_8017EB7C.o": 0.263,
|
||||
"build/src/ov_SC03_014/ov_SC03_014_jr_80184440.o": 0.079,
|
||||
"build/src/ov_SC03_014/ov_SC03_014_jr_801848E4.o": 0.358,
|
||||
"build/src/ov_SC03_014/ov_SC03_014_o0b.o": 0.078,
|
||||
"build/src/ov_SC03_014/ov_SC03_014_o0c.o": 0.111,
|
||||
"build/src/ov_SC03_014/ov_SC03_014_o0d.o": 0.078,
|
||||
"build/src/ov_SC03_014/ov_SC03_014_o0e.o": 0.126,
|
||||
"build/src/ov_SC03_015/ov_SC03_015.o": 0.203,
|
||||
"build/src/ov_SC03_015/ov_SC03_015_after.o": 0.711,
|
||||
"build/src/ov_SC03_015/ov_SC03_015_jr_8012ACE0.o": 0.478,
|
||||
"build/src/ov_SC03_015/ov_SC03_015_jr_80135888.o": 0.09,
|
||||
"build/src/ov_SC03_015/ov_SC03_015_jr_80135A4C.o": 0.103,
|
||||
"build/src/ov_SC03_015/ov_SC03_015_jr_80135D20.o": 0.168,
|
||||
"build/src/ov_SC03_015/ov_SC03_015_jr_801380E0.o": 0.257,
|
||||
"build/src/ov_SC03_015/ov_SC03_015_jr_8013C98C.o": 0.156,
|
||||
"build/src/ov_SC03_015/ov_SC03_015_jr_8013F350.o": 0.133,
|
||||
"build/src/ov_SC03_015/ov_SC03_015_jr_8013FFD8.o": 0.131,
|
||||
"build/src/ov_SC03_015/ov_SC03_015_jr_80140608.o": 0.285,
|
||||
"build/src/ov_SC03_015/ov_SC03_015_jr_8015444C.o": 0.111,
|
||||
"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.142,
|
||||
"build/src/ov_SC03_015/ov_SC03_015_jr_80159C84.o": 0.092,
|
||||
"build/src/ov_SC03_015/ov_SC03_015_jr_8015A3C8.o": 0.085,
|
||||
"build/src/ov_SC03_015/ov_SC03_015_jr_8015AE2C.o": 0.173,
|
||||
"build/src/ov_SC03_015/ov_SC03_015_jr_8015C32C.o": 0.667,
|
||||
"build/src/ov_SC03_015/ov_SC03_015_jr_8016AB6C.o": 0.388,
|
||||
"build/src/ov_SC03_015/ov_SC03_015_jr_80171B4C.o": 0.137,
|
||||
"build/src/ov_SC03_015/ov_SC03_015_jr_801734BC.o": 0.278,
|
||||
"build/src/ov_SC03_015/ov_SC03_015_jr_801789AC.o": 0.075,
|
||||
"build/src/ov_SC03_015/ov_SC03_015_jr_80178D40.o": 0.181,
|
||||
"build/src/ov_SC03_015/ov_SC03_015_jr_8017A4AC.o": 0.093,
|
||||
"build/src/ov_SC03_015/ov_SC03_015_jr_8017AE2C.o": 0.28,
|
||||
"build/src/ov_SC03_015/ov_SC03_015_jr_8017EB7C.o": 0.303,
|
||||
"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.367,
|
||||
"build/src/ov_SC03_015/ov_SC03_015_o0b.o": 0.078,
|
||||
"build/src/ov_SC03_015/ov_SC03_015_o0c.o": 0.132,
|
||||
"build/src/ov_SC03_015/ov_SC03_015_o0d.o": 0.095,
|
||||
"build/src/ov_SC03_015/ov_SC03_015_o0e.o": 0.097,
|
||||
"build/src/ov_SC04_011/ov_SC04_011.o": 0.166,
|
||||
"build/src/ov_SC04_011/ov_SC04_011_after.o": 0.71,
|
||||
"build/src/ov_SC04_011/ov_SC04_011_jr_8012ACE0.o": 0.505,
|
||||
"build/src/ov_SC04_011/ov_SC04_011_jr_80135888.o": 0.079,
|
||||
"build/src/ov_SC04_011/ov_SC04_011_jr_80135A4C.o": 0.07,
|
||||
"build/src/ov_SC04_011/ov_SC04_011_jr_80135D20.o": 0.193,
|
||||
"build/src/ov_SC04_011/ov_SC04_011_jr_801380E0.o": 0.207,
|
||||
"build/src/ov_SC04_011/ov_SC04_011_jr_8013C98C.o": 0.164,
|
||||
"build/src/ov_SC04_011/ov_SC04_011_jr_8013F350.o": 0.116,
|
||||
"build/src/ov_SC04_011/ov_SC04_011_jr_8013FFD8.o": 0.086,
|
||||
"build/src/ov_SC04_011/ov_SC04_011_jr_80140608.o": 0.25,
|
||||
"build/src/ov_SC04_011/ov_SC04_011_jr_8015444C.o": 0.095,
|
||||
"build/src/ov_SC04_011/ov_SC04_011_jr_80154C24.o": 0.269,
|
||||
"build/src/ov_SC04_011/ov_SC04_011_jr_801588CC.o": 0.114,
|
||||
"build/src/ov_SC04_011/ov_SC04_011_jr_80159C84.o": 0.117,
|
||||
"build/src/ov_SC04_011/ov_SC04_011_jr_8015A3C8.o": 0.105,
|
||||
"build/src/ov_SC04_011/ov_SC04_011_jr_8015AE2C.o": 0.136,
|
||||
"build/src/ov_SC04_011/ov_SC04_011_jr_8015C32C.o": 0.552,
|
||||
"build/src/ov_SC04_011/ov_SC04_011_jr_8016AB6C.o": 0.33,
|
||||
"build/src/ov_SC04_011/ov_SC04_011_jr_80171B4C.o": 0.146,
|
||||
"build/src/ov_SC04_011/ov_SC04_011_jr_801734BC.o": 0.255,
|
||||
"build/src/ov_SC03_014/ov_SC03_014_jr_80154C24.o": 0.157,
|
||||
"build/src/ov_SC03_014/ov_SC03_014_jr_801588CC.o": 0.096,
|
||||
"build/src/ov_SC03_014/ov_SC03_014_jr_80159C84.o": 0.101,
|
||||
"build/src/ov_SC03_014/ov_SC03_014_jr_8015A3C8.o": 0.083,
|
||||
"build/src/ov_SC03_014/ov_SC03_014_jr_8015AE2C.o": 0.08,
|
||||
"build/src/ov_SC03_014/ov_SC03_014_jr_8015C32C.o": 0.327,
|
||||
"build/src/ov_SC03_014/ov_SC03_014_jr_8016AB6C.o": 0.193,
|
||||
"build/src/ov_SC03_014/ov_SC03_014_jr_80171B4C.o": 0.092,
|
||||
"build/src/ov_SC03_014/ov_SC03_014_jr_801734BC.o": 0.148,
|
||||
"build/src/ov_SC03_014/ov_SC03_014_jr_801789AC.o": 0.051,
|
||||
"build/src/ov_SC03_014/ov_SC03_014_jr_80178D40.o": 0.088,
|
||||
"build/src/ov_SC03_014/ov_SC03_014_jr_8017A4AC.o": 0.061,
|
||||
"build/src/ov_SC03_014/ov_SC03_014_jr_8017AE2C.o": 0.13,
|
||||
"build/src/ov_SC03_014/ov_SC03_014_jr_8017EB7C.o": 0.124,
|
||||
"build/src/ov_SC03_014/ov_SC03_014_jr_80184440.o": 0.033,
|
||||
"build/src/ov_SC03_014/ov_SC03_014_jr_801848E4.o": 0.171,
|
||||
"build/src/ov_SC03_014/ov_SC03_014_o0b.o": 0.042,
|
||||
"build/src/ov_SC03_014/ov_SC03_014_o0c.o": 0.043,
|
||||
"build/src/ov_SC03_014/ov_SC03_014_o0d.o": 0.041,
|
||||
"build/src/ov_SC03_014/ov_SC03_014_o0e.o": 0.057,
|
||||
"build/src/ov_SC03_015/ov_SC03_015.o": 0.082,
|
||||
"build/src/ov_SC03_015/ov_SC03_015_after.o": 0.553,
|
||||
"build/src/ov_SC03_015/ov_SC03_015_jr_8012ACE0.o": 0.454,
|
||||
"build/src/ov_SC03_015/ov_SC03_015_jr_80135888.o": 0.102,
|
||||
"build/src/ov_SC03_015/ov_SC03_015_jr_80135A4C.o": 0.122,
|
||||
"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.234,
|
||||
"build/src/ov_SC03_015/ov_SC03_015_jr_8013C98C.o": 0.17,
|
||||
"build/src/ov_SC03_015/ov_SC03_015_jr_8013F350.o": 0.184,
|
||||
"build/src/ov_SC03_015/ov_SC03_015_jr_8013FFD8.o": 0.13,
|
||||
"build/src/ov_SC03_015/ov_SC03_015_jr_80140608.o": 0.253,
|
||||
"build/src/ov_SC03_015/ov_SC03_015_jr_8015444C.o": 0.115,
|
||||
"build/src/ov_SC03_015/ov_SC03_015_jr_80154C24.o": 0.239,
|
||||
"build/src/ov_SC03_015/ov_SC03_015_jr_801588CC.o": 0.184,
|
||||
"build/src/ov_SC03_015/ov_SC03_015_jr_80159C84.o": 0.097,
|
||||
"build/src/ov_SC03_015/ov_SC03_015_jr_8015A3C8.o": 0.134,
|
||||
"build/src/ov_SC03_015/ov_SC03_015_jr_8015AE2C.o": 0.111,
|
||||
"build/src/ov_SC03_015/ov_SC03_015_jr_8015C32C.o": 0.456,
|
||||
"build/src/ov_SC03_015/ov_SC03_015_jr_8016AB6C.o": 0.267,
|
||||
"build/src/ov_SC03_015/ov_SC03_015_jr_80171B4C.o": 0.12,
|
||||
"build/src/ov_SC03_015/ov_SC03_015_jr_801734BC.o": 0.209,
|
||||
"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.12,
|
||||
"build/src/ov_SC03_015/ov_SC03_015_jr_8017A4AC.o": 0.059,
|
||||
"build/src/ov_SC03_015/ov_SC03_015_jr_8017AE2C.o": 0.126,
|
||||
"build/src/ov_SC03_015/ov_SC03_015_jr_8017EB7C.o": 0.17,
|
||||
"build/src/ov_SC03_015/ov_SC03_015_jr_80184440.o": 0.044,
|
||||
"build/src/ov_SC03_015/ov_SC03_015_jr_801848E4.o": 0.168,
|
||||
"build/src/ov_SC03_015/ov_SC03_015_o0b.o": 0.039,
|
||||
"build/src/ov_SC03_015/ov_SC03_015_o0c.o": 0.038,
|
||||
"build/src/ov_SC03_015/ov_SC03_015_o0d.o": 0.036,
|
||||
"build/src/ov_SC03_015/ov_SC03_015_o0e.o": 0.043,
|
||||
"build/src/ov_SC04_011/ov_SC04_011.o": 0.079,
|
||||
"build/src/ov_SC04_011/ov_SC04_011_after.o": 0.313,
|
||||
"build/src/ov_SC04_011/ov_SC04_011_jr_8012ACE0.o": 0.407,
|
||||
"build/src/ov_SC04_011/ov_SC04_011_jr_80135888.o": 0.107,
|
||||
"build/src/ov_SC04_011/ov_SC04_011_jr_80135A4C.o": 0.119,
|
||||
"build/src/ov_SC04_011/ov_SC04_011_jr_80135D20.o": 0.219,
|
||||
"build/src/ov_SC04_011/ov_SC04_011_jr_801380E0.o": 0.184,
|
||||
"build/src/ov_SC04_011/ov_SC04_011_jr_8013C98C.o": 0.18,
|
||||
"build/src/ov_SC04_011/ov_SC04_011_jr_8013F350.o": 0.147,
|
||||
"build/src/ov_SC04_011/ov_SC04_011_jr_8013FFD8.o": 0.165,
|
||||
"build/src/ov_SC04_011/ov_SC04_011_jr_80140608.o": 0.275,
|
||||
"build/src/ov_SC04_011/ov_SC04_011_jr_8015444C.o": 0.145,
|
||||
"build/src/ov_SC04_011/ov_SC04_011_jr_80154C24.o": 0.249,
|
||||
"build/src/ov_SC04_011/ov_SC04_011_jr_801588CC.o": 0.161,
|
||||
"build/src/ov_SC04_011/ov_SC04_011_jr_80159C84.o": 0.123,
|
||||
"build/src/ov_SC04_011/ov_SC04_011_jr_8015A3C8.o": 0.151,
|
||||
"build/src/ov_SC04_011/ov_SC04_011_jr_8015AE2C.o": 0.15,
|
||||
"build/src/ov_SC04_011/ov_SC04_011_jr_8015C32C.o": 0.496,
|
||||
"build/src/ov_SC04_011/ov_SC04_011_jr_8016AB6C.o": 0.27,
|
||||
"build/src/ov_SC04_011/ov_SC04_011_jr_80171B4C.o": 0.137,
|
||||
"build/src/ov_SC04_011/ov_SC04_011_jr_801734BC.o": 0.266,
|
||||
"build/src/ov_SC04_011/ov_SC04_011_jr_801789AC.o": 0.103,
|
||||
"build/src/ov_SC04_011/ov_SC04_011_jr_80178D40.o": 0.151,
|
||||
"build/src/ov_SC04_011/ov_SC04_011_jr_8017A4AC.o": 0.123,
|
||||
"build/src/ov_SC04_011/ov_SC04_011_jr_8017AE2C.o": 0.151,
|
||||
"build/src/ov_SC04_011/ov_SC04_011_jr_8017D494.o": 0.774,
|
||||
"build/src/ov_SC04_011/ov_SC04_011_o0b.o": 0.095,
|
||||
"build/src/ov_SC04_011/ov_SC04_011_o0c.o": 0.118
|
||||
"build/src/ov_SC04_011/ov_SC04_011_jr_80178D40.o": 0.146,
|
||||
"build/src/ov_SC04_011/ov_SC04_011_jr_8017A4AC.o": 0.08,
|
||||
"build/src/ov_SC04_011/ov_SC04_011_jr_8017AE2C.o": 0.156,
|
||||
"build/src/ov_SC04_011/ov_SC04_011_jr_8017D494.o": 0.552,
|
||||
"build/src/ov_SC04_011/ov_SC04_011_o0b.o": 0.066,
|
||||
"build/src/ov_SC04_011/ov_SC04_011_o0c.o": 0.088
|
||||
},
|
||||
"ok": true,
|
||||
"seconds": 3.7
|
||||
"seconds": 25.1
|
||||
}
|
||||
|
||||
File diff suppressed because one or more lines are too long
@@ -2748,7 +2748,7 @@ extern void func_801833A4(s32 a0);
|
||||
|
||||
#include "common.h"
|
||||
|
||||
void func_80183AE0(s32 arg0) {
|
||||
void func_80183AE0(s32 e) {
|
||||
extern void func_8012C218(void *a0);
|
||||
extern s32 func_8012CC64(s32 a0, void *a1);
|
||||
extern s32 func_80133784(s32 a0, void *a1, s32 a2);
|
||||
@@ -2759,29 +2759,23 @@ void func_80183AE0(s32 arg0) {
|
||||
extern s32 D_801A8B5C;
|
||||
extern s32 D_801A8B40;
|
||||
|
||||
s32 e;
|
||||
s32 p;
|
||||
s32 n;
|
||||
s32 dir;
|
||||
|
||||
e = arg0;
|
||||
if (--*(s16 *)(e + 0xFC) == 0) {
|
||||
n = 0;
|
||||
p = e;
|
||||
do {
|
||||
arg0 = *(s32 *)(arg0 + 0x6C);
|
||||
p = *(s32 *)(p + 0x6C);
|
||||
n++;
|
||||
} while (arg0 != 0);
|
||||
} while (p != 0);
|
||||
if (n < 7) {
|
||||
if (e != 0) {
|
||||
arg0 = e;
|
||||
for (;;) {
|
||||
e = *(s32 *)(arg0 + 0x6C);
|
||||
func_8012C218((void *)arg0);
|
||||
arg0 = e;
|
||||
__asm__ __volatile__("" : "=r"(arg0) : "0"(arg0)); // !FAKE: launder — NEEDED DIFFERS (P36 rung B tus9)
|
||||
if (arg0 == 0) {
|
||||
return;
|
||||
}
|
||||
}
|
||||
p = e;
|
||||
while (p != 0) {
|
||||
s32 next = *(s32 *)(p + 0x6C);
|
||||
func_8012C218((void *)p);
|
||||
p = next;
|
||||
}
|
||||
return;
|
||||
}
|
||||
@@ -2822,16 +2816,15 @@ void func_80183AE0(s32 arg0) {
|
||||
q[2] = z;
|
||||
|
||||
if (func_80133784(1, p1, (s32)q) != 0) {
|
||||
n = 1;
|
||||
*(s16 *)(e + 0x12) = -(rand() & 3) - 4;
|
||||
n = 1;
|
||||
} else {
|
||||
q[0] = p1[0] + 0x40;
|
||||
q[1] = p1[1];
|
||||
q[2] = p1[2];
|
||||
if (func_80133784(1, q, (s32)p1) != 0) {
|
||||
n = 2;
|
||||
*(s16 *)(e + 0x12) = (rand() & 3) + 4;
|
||||
__asm__ __volatile__(""); /* cookbook 5a cross-jump barrier vs the n==1 arm */ // !FAKE: barrier — NEEDED DIFFERS (P36 rung B tus9)
|
||||
n = 2;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -2852,16 +2845,15 @@ void func_80183AE0(s32 arg0) {
|
||||
q[2] = z + 0x40;
|
||||
|
||||
if (func_80133784(1, p1, (s32)q) != 0) {
|
||||
n += 4;
|
||||
*(s16 *)(e + 0x1A) = -(rand() & 3) - 4;
|
||||
n += 4;
|
||||
} else {
|
||||
q[0] = p1[0];
|
||||
q[1] = p1[1];
|
||||
q[2] = p1[2] + 0x40;
|
||||
if (func_80133784(1, q, (s32)p1) != 0) {
|
||||
n += 8;
|
||||
*(s16 *)(e + 0x1A) = (rand() & 3) + 4;
|
||||
__asm__ __volatile__(""); /* cookbook 5a cross-jump barrier vs the n+=4 arm */ // !FAKE: barrier — NEEDED DIFFERS (P36 rung B tus9)
|
||||
n += 8;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -2899,7 +2891,6 @@ void func_80183AE0(s32 arg0) {
|
||||
s32 t1;
|
||||
s32 t2;
|
||||
s32 t3;
|
||||
s32 p;
|
||||
|
||||
*(s16 *)(*(s32 *)(e + 0x20) + 0x14) = 0;
|
||||
t1 = *(u16 *)(e + 6);
|
||||
|
||||
@@ -5429,7 +5429,7 @@ void func_80181730(s32 a0)
|
||||
|
||||
#include "common.h"
|
||||
|
||||
void func_80181864(s32 arg0) {
|
||||
void func_80181864(s32 e) {
|
||||
extern void func_8012C218(void *a0);
|
||||
extern s32 func_8012CC64(s32 a0, void *a1);
|
||||
extern s32 func_80133784(s32 a0, void *a1, s32 a2);
|
||||
@@ -5440,29 +5440,23 @@ void func_80181864(s32 arg0) {
|
||||
extern s32 D_8019F2A8;
|
||||
extern s32 D_8019F28C;
|
||||
|
||||
s32 e;
|
||||
s32 p;
|
||||
s32 n;
|
||||
s32 dir;
|
||||
|
||||
e = arg0;
|
||||
if (--*(s16 *)(e + 0xFC) == 0) {
|
||||
n = 0;
|
||||
p = e;
|
||||
do {
|
||||
arg0 = *(s32 *)(arg0 + 0x6C);
|
||||
p = *(s32 *)(p + 0x6C);
|
||||
n++;
|
||||
} while (arg0 != 0);
|
||||
} while (p != 0);
|
||||
if (n < 7) {
|
||||
if (e != 0) {
|
||||
arg0 = e;
|
||||
for (;;) {
|
||||
e = *(s32 *)(arg0 + 0x6C);
|
||||
func_8012C218((void *)arg0);
|
||||
arg0 = e;
|
||||
__asm__ __volatile__("" : "=r"(arg0) : "0"(arg0)); // !FAKE: launder — NEEDED DIFFERS (P36 rung B tus9)
|
||||
if (arg0 == 0) {
|
||||
return;
|
||||
}
|
||||
}
|
||||
p = e;
|
||||
while (p != 0) {
|
||||
s32 next = *(s32 *)(p + 0x6C);
|
||||
func_8012C218((void *)p);
|
||||
p = next;
|
||||
}
|
||||
return;
|
||||
}
|
||||
@@ -5503,16 +5497,15 @@ void func_80181864(s32 arg0) {
|
||||
q[2] = z;
|
||||
|
||||
if (func_80133784(1, p1, (s32)q) != 0) {
|
||||
n = 1;
|
||||
*(s16 *)(e + 0x12) = -(rand() & 3) - 4;
|
||||
n = 1;
|
||||
} else {
|
||||
q[0] = p1[0] + 0x40;
|
||||
q[1] = p1[1];
|
||||
q[2] = p1[2];
|
||||
if (func_80133784(1, q, (s32)p1) != 0) {
|
||||
n = 2;
|
||||
*(s16 *)(e + 0x12) = (rand() & 3) + 4;
|
||||
__asm__ __volatile__(""); /* cookbook 5a cross-jump barrier vs the n==1 arm */ // !FAKE: barrier — NEEDED DIFFERS (P36 rung B tus9)
|
||||
n = 2;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -5533,16 +5526,15 @@ void func_80181864(s32 arg0) {
|
||||
q[2] = z + 0x40;
|
||||
|
||||
if (func_80133784(1, p1, (s32)q) != 0) {
|
||||
n += 4;
|
||||
*(s16 *)(e + 0x1A) = -(rand() & 3) - 4;
|
||||
n += 4;
|
||||
} else {
|
||||
q[0] = p1[0];
|
||||
q[1] = p1[1];
|
||||
q[2] = p1[2] + 0x40;
|
||||
if (func_80133784(1, q, (s32)p1) != 0) {
|
||||
n += 8;
|
||||
*(s16 *)(e + 0x1A) = (rand() & 3) + 4;
|
||||
__asm__ __volatile__(""); /* cookbook 5a cross-jump barrier vs the n+=4 arm */ // !FAKE: barrier — NEEDED DIFFERS (P36 rung B tus9)
|
||||
n += 8;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -5580,7 +5572,6 @@ void func_80181864(s32 arg0) {
|
||||
s32 t1;
|
||||
s32 t2;
|
||||
s32 t3;
|
||||
s32 p;
|
||||
|
||||
*(s16 *)(*(s32 *)(e + 0x20) + 0x14) = 0;
|
||||
t1 = *(u16 *)(e + 6);
|
||||
|
||||
@@ -3310,7 +3310,7 @@ void func_80182A34(s32 a0)
|
||||
|
||||
#include "common.h"
|
||||
|
||||
void func_80182B68(s32 arg0) {
|
||||
void func_80182B68(s32 e) {
|
||||
extern void func_8012C218(void *a0);
|
||||
extern s32 func_8012CC64(s32 a0, void *a1);
|
||||
extern s32 func_80133784(s32 a0, void *a1, s32 a2);
|
||||
@@ -3321,29 +3321,23 @@ void func_80182B68(s32 arg0) {
|
||||
extern s32 D_801C36A8;
|
||||
extern s32 D_801C368C;
|
||||
|
||||
s32 e;
|
||||
s32 p;
|
||||
s32 n;
|
||||
s32 dir;
|
||||
|
||||
e = arg0;
|
||||
if (--*(s16 *)(e + 0xFC) == 0) {
|
||||
n = 0;
|
||||
p = e;
|
||||
do {
|
||||
arg0 = *(s32 *)(arg0 + 0x6C);
|
||||
p = *(s32 *)(p + 0x6C);
|
||||
n++;
|
||||
} while (arg0 != 0);
|
||||
} while (p != 0);
|
||||
if (n < 7) {
|
||||
if (e != 0) {
|
||||
arg0 = e;
|
||||
for (;;) {
|
||||
e = *(s32 *)(arg0 + 0x6C);
|
||||
func_8012C218((void *)arg0);
|
||||
arg0 = e;
|
||||
__asm__ __volatile__("" : "=r"(arg0) : "0"(arg0)); // !FAKE: launder — NEEDED DIFFERS (P36 rung B tus9)
|
||||
if (arg0 == 0) {
|
||||
return;
|
||||
}
|
||||
}
|
||||
p = e;
|
||||
while (p != 0) {
|
||||
s32 next = *(s32 *)(p + 0x6C);
|
||||
func_8012C218((void *)p);
|
||||
p = next;
|
||||
}
|
||||
return;
|
||||
}
|
||||
@@ -3384,16 +3378,15 @@ void func_80182B68(s32 arg0) {
|
||||
q[2] = z;
|
||||
|
||||
if (func_80133784(1, p1, (s32)q) != 0) {
|
||||
n = 1;
|
||||
*(s16 *)(e + 0x12) = -(rand() & 3) - 4;
|
||||
n = 1;
|
||||
} else {
|
||||
q[0] = p1[0] + 0x40;
|
||||
q[1] = p1[1];
|
||||
q[2] = p1[2];
|
||||
if (func_80133784(1, q, (s32)p1) != 0) {
|
||||
n = 2;
|
||||
*(s16 *)(e + 0x12) = (rand() & 3) + 4;
|
||||
__asm__ __volatile__(""); /* cookbook 5a cross-jump barrier vs the n==1 arm */ // !FAKE: barrier — NEEDED DIFFERS (P36 rung B tus9)
|
||||
n = 2;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -3414,16 +3407,15 @@ void func_80182B68(s32 arg0) {
|
||||
q[2] = z + 0x40;
|
||||
|
||||
if (func_80133784(1, p1, (s32)q) != 0) {
|
||||
n += 4;
|
||||
*(s16 *)(e + 0x1A) = -(rand() & 3) - 4;
|
||||
n += 4;
|
||||
} else {
|
||||
q[0] = p1[0];
|
||||
q[1] = p1[1];
|
||||
q[2] = p1[2] + 0x40;
|
||||
if (func_80133784(1, q, (s32)p1) != 0) {
|
||||
n += 8;
|
||||
*(s16 *)(e + 0x1A) = (rand() & 3) + 4;
|
||||
__asm__ __volatile__(""); /* cookbook 5a cross-jump barrier vs the n+=4 arm */ // !FAKE: barrier — NEEDED DIFFERS (P36 rung B tus9)
|
||||
n += 8;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -3461,7 +3453,6 @@ void func_80182B68(s32 arg0) {
|
||||
s32 t1;
|
||||
s32 t2;
|
||||
s32 t3;
|
||||
s32 p;
|
||||
|
||||
*(s16 *)(*(s32 *)(e + 0x20) + 0x14) = 0;
|
||||
t1 = *(u16 *)(e + 6);
|
||||
|
||||
@@ -3452,7 +3452,7 @@ void func_80187180(s32 a0)
|
||||
|
||||
#include "common.h"
|
||||
|
||||
void func_801872B4(s32 arg0) {
|
||||
void func_801872B4(s32 e) {
|
||||
extern void func_8012C218(void *a0);
|
||||
extern s32 func_8012CC64(s32 a0, void *a1);
|
||||
extern s32 func_80133784(s32 a0, void *a1, s32 a2);
|
||||
@@ -3463,29 +3463,23 @@ void func_801872B4(s32 arg0) {
|
||||
extern s32 D_801C6FC4;
|
||||
extern s32 D_801C6FA8;
|
||||
|
||||
s32 e;
|
||||
s32 p;
|
||||
s32 n;
|
||||
s32 dir;
|
||||
|
||||
e = arg0;
|
||||
if (--*(s16 *)(e + 0xFC) == 0) {
|
||||
n = 0;
|
||||
p = e;
|
||||
do {
|
||||
arg0 = *(s32 *)(arg0 + 0x6C);
|
||||
p = *(s32 *)(p + 0x6C);
|
||||
n++;
|
||||
} while (arg0 != 0);
|
||||
} while (p != 0);
|
||||
if (n < 7) {
|
||||
if (e != 0) {
|
||||
arg0 = e;
|
||||
for (;;) {
|
||||
e = *(s32 *)(arg0 + 0x6C);
|
||||
func_8012C218((void *)arg0);
|
||||
arg0 = e;
|
||||
__asm__ __volatile__("" : "=r"(arg0) : "0"(arg0)); // !FAKE: launder — NEEDED DIFFERS (P36 rung B tus9)
|
||||
if (arg0 == 0) {
|
||||
return;
|
||||
}
|
||||
}
|
||||
p = e;
|
||||
while (p != 0) {
|
||||
s32 next = *(s32 *)(p + 0x6C);
|
||||
func_8012C218((void *)p);
|
||||
p = next;
|
||||
}
|
||||
return;
|
||||
}
|
||||
@@ -3526,16 +3520,15 @@ void func_801872B4(s32 arg0) {
|
||||
q[2] = z;
|
||||
|
||||
if (func_80133784(1, p1, (s32)q) != 0) {
|
||||
n = 1;
|
||||
*(s16 *)(e + 0x12) = -(rand() & 3) - 4;
|
||||
n = 1;
|
||||
} else {
|
||||
q[0] = p1[0] + 0x40;
|
||||
q[1] = p1[1];
|
||||
q[2] = p1[2];
|
||||
if (func_80133784(1, q, (s32)p1) != 0) {
|
||||
n = 2;
|
||||
*(s16 *)(e + 0x12) = (rand() & 3) + 4;
|
||||
__asm__ __volatile__(""); /* cookbook 5a cross-jump barrier vs the n==1 arm */ // !FAKE: barrier — NEEDED DIFFERS (P36 rung B tus9)
|
||||
n = 2;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -3556,16 +3549,15 @@ void func_801872B4(s32 arg0) {
|
||||
q[2] = z + 0x40;
|
||||
|
||||
if (func_80133784(1, p1, (s32)q) != 0) {
|
||||
n += 4;
|
||||
*(s16 *)(e + 0x1A) = -(rand() & 3) - 4;
|
||||
n += 4;
|
||||
} else {
|
||||
q[0] = p1[0];
|
||||
q[1] = p1[1];
|
||||
q[2] = p1[2] + 0x40;
|
||||
if (func_80133784(1, q, (s32)p1) != 0) {
|
||||
n += 8;
|
||||
*(s16 *)(e + 0x1A) = (rand() & 3) + 4;
|
||||
__asm__ __volatile__(""); /* cookbook 5a cross-jump barrier vs the n+=4 arm */ // !FAKE: barrier — NEEDED DIFFERS (P36 rung B tus9)
|
||||
n += 8;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -3603,7 +3595,6 @@ void func_801872B4(s32 arg0) {
|
||||
s32 t1;
|
||||
s32 t2;
|
||||
s32 t3;
|
||||
s32 p;
|
||||
|
||||
*(s16 *)(*(s32 *)(e + 0x20) + 0x14) = 0;
|
||||
t1 = *(u16 *)(e + 6);
|
||||
|
||||
Reference in New Issue
Block a user