mirror of
https://github.com/Druthulu/BFM-decomp
synced 2026-10-02 07:59:52 -04:00
phase-36: S104 d3 — func_8017FB4C at 0 levers (was 1 $2 pin): the goto chain as structured if/else with one constant store per arm, the flag test before the angle mask (sched.c:2428 tie-break → allocno_compare 8333 > 8000), one variable for the global and its child; 4 bodies, gate IDENTICAL each
This commit is contained in:
@@ -1,55 +1,37 @@
|
||||
void func_8017FB4C(void *a0)
|
||||
{
|
||||
void *s3 = a0;
|
||||
void *s2;
|
||||
void *s2 = *(void **)((s32)a0 + 0x20);
|
||||
void *p;
|
||||
s32 v1;
|
||||
s32 v0;
|
||||
s32 bits;
|
||||
s32 s0;
|
||||
s32 s1;
|
||||
s32 rot;
|
||||
s32 flag;
|
||||
s32 angle;
|
||||
s32 a;
|
||||
s32 b;
|
||||
|
||||
s2 = *(void **)((s32)s3 + 0x20);
|
||||
func_8017FD74(s3);
|
||||
p = (*(void * *)&D_801A14A8);
|
||||
if (p == 0) {
|
||||
goto END;
|
||||
func_8017FD74(a0);
|
||||
p = (void *)D_801A14A8;
|
||||
if (p != 0) {
|
||||
rot = *(u16 *)((s32)s2 + 0x12) + 0x800;
|
||||
p = *(void **)((s32)p + 0x20);
|
||||
flag = *(u16 *)((s32)p + 0x12) & 0x400;
|
||||
angle = rot & 0xFFF;
|
||||
if (flag) {
|
||||
a = func_80012A60(angle, 0x400);
|
||||
b = func_80012A60(angle, 0xC00);
|
||||
if ((s16)a <= (s16)b) {
|
||||
*(u16 *)((s32)s2 + 0x12) = 0x400;
|
||||
} else {
|
||||
*(u16 *)((s32)s2 + 0x12) = 0xC00;
|
||||
}
|
||||
} else {
|
||||
a = func_80012A60(angle, 0);
|
||||
b = func_80012A60(angle, 0x800);
|
||||
if ((s16)a <= (s16)b) {
|
||||
*(u16 *)((s32)s2 + 0x12) = 0;
|
||||
} else {
|
||||
*(u16 *)((s32)s2 + 0x12) = 0x800;
|
||||
}
|
||||
}
|
||||
}
|
||||
v0 = *(u16 *)((s32)s2 + 0x12) + 0x800;
|
||||
p = *(void **)((s32)p + 0x20);
|
||||
bits = *(u16 *)((s32)p + 0x12) & 0x400;
|
||||
s0 = v0 & 0xFFF;
|
||||
if (bits == 0) {
|
||||
goto ELSE;
|
||||
}
|
||||
s1 = func_80012A60(s0, 0x400);
|
||||
v0 = func_80012A60(s0, 0xC00);
|
||||
v1 = (s16)s1;
|
||||
v0 = (s16)v0;
|
||||
v0 = (v0 < v1);
|
||||
if (v0 != 0) {
|
||||
goto TRUE1;
|
||||
}
|
||||
v0 = 0x400;
|
||||
goto STORE;
|
||||
TRUE1:
|
||||
v0 = 0xC00;
|
||||
goto STORE;
|
||||
ELSE:
|
||||
s1 = func_80012A60(s0, 0);
|
||||
v0 = func_80012A60(s0, 0x800);
|
||||
v1 = (s16)s1;
|
||||
v0 = (s16)v0;
|
||||
v0 = (v0 < v1);
|
||||
if (v0 != 0) {
|
||||
goto TRUE2;
|
||||
}
|
||||
*(u16 *)((s32)s2 + 0x12) = 0;
|
||||
goto END;
|
||||
TRUE2:
|
||||
v0 = 0x800;
|
||||
STORE:
|
||||
*(u16 *)((s32)s2 + 0x12) = v0;
|
||||
END:
|
||||
func_80171990((u8 *)s3);
|
||||
func_80171990((u8 *)a0);
|
||||
}
|
||||
|
||||
@@ -0,0 +1,82 @@
|
||||
# func_8017FB4C (ov_SC06_014_jr_8017BEBC.c, 4 copies) — P36 S104 agent d3
|
||||
|
||||
**Result: score 0 in plain C** (no pin, no asm, no volatile, no do-while, no dead initialiser). Lever count 1 -> 0.
|
||||
Body: `PACK/body.c` (= `scratch/n11.c`). The same body with body-local struct types (`scratch/n15.c`) also scores 0.
|
||||
|
||||
## (a) The residual
|
||||
Starting text (`body_free.c`, score 22) and the sweep's `free_048.c` (score 4) are goto transliterations. Counting
|
||||
first: 66 vs 66 instructions every time, so it is a pure register residual at the start, but the goto shape hid three
|
||||
separate decisions. Once rewritten as structured C they came apart one at a time:
|
||||
|
||||
| step | text | score | what still differed |
|
||||
|---|---|---|---|
|
||||
| n4b | if/else, one shared `v` temp stored once | 4 | the stored value in `$a0`, the target has `$v0` |
|
||||
| n5 | one constant store per arm (no shared temp) | 9 | `$s0`/`$s1` swapped between `angle` and `a` |
|
||||
| n10 | flag computed before `angle = rot & 0xFFF` | 10 | `D_801A14A8`'s value in `$v0`, the target has `$v1` |
|
||||
| n11 | `p` reused: `p = D; if (p) { … p = p->+0x20; … }` | **0** | — |
|
||||
|
||||
Every intermediate score is worse than free_048's 4, and the close is the JOINT of the three moves (METHOD step 5).
|
||||
|
||||
## (b) The passes and decisions (read, and proved on bytes)
|
||||
1. **Stored value `$a0` vs `$v0`: jump.c's if/else hoist + sched1.** `if (c) v = a; else v = b;` becomes
|
||||
`v = b; if (c) v = a;` (`jump.c:699-835`, conditions `:727-761`, move at `:811`). sched1 then moves the hoisted
|
||||
`v = 0xC00` above the sign-extension of the second call's result, which still occupies the hard `$v0`
|
||||
(`.lreg` insn 142 comes before insn 62 in n4b). So `v` conflicts with `$v0` and `find_reg` hands it `$a0`. The target
|
||||
never had a shared temp. Each arm stores its own constant, and the post-reload cross-jump pass (`toplev.c:3142`,
|
||||
`find_cross_jump` `jump.c:2371`) merges the three identical `sh $v0,18($s2)` tails into the one the bytes show. The
|
||||
`sh $zero` arm stays separate because its tail differs. PROVED (n4b -> n5 removed exactly those 4 hunks).
|
||||
2. **`$s0`/`$s1` swap: sched1's LUID tie-break feeding global.c's priority.** `angle` has 5 refs and `a` has 4. With
|
||||
`angle`'s `& 0xFFF` computed BEFORE the flag's `& 0x400`, both are ready at T-2 with equal priority (7f000001) and
|
||||
`rank_for_schedule` (`sched.c:2385`, final tie `INSN_LUID`, `:2428`) puts the higher LUID, the flag, next to the
|
||||
branch. `angle`'s def moves one insn earlier, so its live length goes from 12 to 13, and sched1's live lengths
|
||||
replace flow's (`sched.c:4946-4947`). The priority is then 2*5/13 = 7692 < `a`'s 2*4/10 = 8000
|
||||
(`allocno_compare`, `global.c:587-607`, priority first, allocno number only on a tie), so `a` takes `$s0` first. Writing the flag before `angle = rot & 0xFFF`
|
||||
puts `angle` next to the branch: live 12, 8333 > 8000, and `angle` gets `$s0`. A separate `rot` temp is needed for the
|
||||
`+0x800` value: folding it into `angle` (n9) makes `angle` the addiu's destination (`addiu s0,…`). PROVED: the tables
|
||||
of n5 and n11 give the numbers above, identical to the pinned tree's table (20000 / 8333 / 8000).
|
||||
3. **`D_801A14A8` in `$v0` vs `$v1`: one pseudo for the walked pointer (the S103 c18 MERGE move).** sched1 puts the
|
||||
`lw +0x20` first in block 1. With a separate pseudo for the global's value, that value dies before the
|
||||
`lhu 18($s2)` temp (which local-alloc gives `$v0`) is born. So nothing conflicts with `$v0`, and global.c's lowest
|
||||
free register is `$v0`. Reusing ONE variable `p` for both the global's value and the loaded child pointer keeps
|
||||
the pseudo live up to the `lhu 0x12(p)` (5 refs, live 5, "conflicts v0" in n11's table), so it lands in `$v1`, as
|
||||
in the target. The pinned tree body already had this shape. Its `p` was reused the same way, and the `$2` pin only
|
||||
stood in for decisions 1 and 2. PROVED (n10 -> n11).
|
||||
|
||||
## (c) The source moves that closed it
|
||||
- Rewrote the goto chain as if/else, with one constant store per arm and no shared `v` temp (cross-jump rebuilds the shared `sh`).
|
||||
- Kept both call results in `s32` locals `a`, `b` and compared `(s16)a <= (s16)b` (with direct calls, or with `s16` locals, the first result is extended before the second call — n6/n7, score 30).
|
||||
- `rot = lhu + 0x800; p = p->0x20; flag = … & 0x400; angle = rot & 0xFFF; if (flag)`: this source order is the sched tie-break.
|
||||
- Reused `p` for the global and the child pointer.
|
||||
|
||||
## (d) Generator proposal
|
||||
When a goto body's `$2`/`$3` pin feeds a temp that only carries constants to ONE store after an if/else join, rewrite
|
||||
the join as one constant store per arm (cross-jump re-merges the tails after reload). When a `$sN` pair is swapped
|
||||
between two call-crossing values, reorder the source so the insn defining the higher-ref value has the higher LUID
|
||||
among the ready-at-branch insns: move independent test computations (flag masks) BEFORE its def. Check it with
|
||||
`2·refs/live` in `alloc_table.py`.
|
||||
|
||||
## (e) What did not work (byte evidence)
|
||||
- n1 (`s16 a`, `(s16)call < a` inline): score 37. The sign extension moved before the second call.
|
||||
- n2/n3/n4b (shared `v` temp, either branch sense): scores 13 / 5 / 4. The jump.c hoist, see (b)1.
|
||||
- n6 (both calls inline in the comparison) and n7 (`s16 a, b` locals): score 30. The extension came before the second call, and the frame and callee-saved set changed.
|
||||
- n8 (flag line before the whole `angle` expression): score 10. The `lw +0x20` ordering changed in block 1.
|
||||
- n9 (`angle = lhu+0x800; …; angle &= 0xFFF`): score 5. One pseudo, so `addiu s0`.
|
||||
- n12 (no `rot`, `angle` after flag): 10. n13 (no `flag`, test inline): 18.
|
||||
- n14 (natural `(s16)a > (s16)b` with the arms swapped): score 11, 69 insns. jump sense and block layout change, so `<=` with the 0x400 / 0 arm first stays.
|
||||
|
||||
## (f) Where the method fell short
|
||||
- The residual's hunk view reported ONE register class at each step. The real defect was three independent decisions, and
|
||||
the goto transliteration (body_free / free_048) hides decision 1 completely: a shared temp is exactly what the goto
|
||||
form forces. The generator families all mutate the goto text, so R2-R26 could not reach a per-arm-store spelling.
|
||||
A "de-goto to structured if/else with per-arm stores" generator is the missing family.
|
||||
- alloc_table.py was decisive for (b)2 and (b)3. The live lengths it prints are sched1's, and the tie-break that sets
|
||||
them is only visible in the `.sched` ready-list trace ("now 38 36"), so pair the two when priorities are within one insn.
|
||||
|
||||
## (g) Structs question
|
||||
Not needed here. Test on bytes: `scratch/n15.c` gives `a0` a body-local `struct Obj { u8 pad[0x20]; void *xf; }` and
|
||||
`s2` `struct Xform { u8 pad[0x12]; u16 rot; }` (all 6 field accesses through them), and it also scores 0. None of the
|
||||
three decisions goes through the aggregate-vs-scalar channel (`expr.c:4568-4577`, `sched.c` true_dependence): the only
|
||||
stores come after every load, and the decisions are the jump.c hoist, a LUID tie-break and pseudo identity.
|
||||
One caveat for the STRUCTS phase: decision 3 needs ONE variable for both `D_801A14A8`'s object and its `+0x20` child
|
||||
(`p = p->xf`). Once those get distinct struct types, the reuse needs a common pointer type or a cast. Splitting them into two
|
||||
typed locals re-opens the `$v0`/`$v1` residual (n10, score 10).
|
||||
+186
-186
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"head": "55ef71b95",
|
||||
"head": "547571fd1",
|
||||
"stamp": "15956e4a96c4",
|
||||
"generated": "2026-09-10 21:07",
|
||||
"generated": "2026-09-10 21:10",
|
||||
"aliases": [
|
||||
"main",
|
||||
"ov_SC03_014",
|
||||
@@ -21,207 +21,207 @@
|
||||
"main": {
|
||||
"objects": 85,
|
||||
"identical": 85,
|
||||
"seconds": 11.27,
|
||||
"mean_s": 0.133
|
||||
"seconds": 10.635000000000002,
|
||||
"mean_s": 0.125
|
||||
},
|
||||
"ov_SC03_014": {
|
||||
"objects": 32,
|
||||
"identical": 32,
|
||||
"seconds": 7.015,
|
||||
"mean_s": 0.219
|
||||
"seconds": 7.177999999999999,
|
||||
"mean_s": 0.224
|
||||
},
|
||||
"ov_SC03_015": {
|
||||
"objects": 32,
|
||||
"identical": 32,
|
||||
"seconds": 6.8740000000000006,
|
||||
"mean_s": 0.215
|
||||
"seconds": 6.9430000000000005,
|
||||
"mean_s": 0.217
|
||||
},
|
||||
"ov_SC04_011": {
|
||||
"objects": 28,
|
||||
"identical": 28,
|
||||
"seconds": 6.5649999999999995,
|
||||
"mean_s": 0.234
|
||||
"seconds": 6.312,
|
||||
"mean_s": 0.225
|
||||
}
|
||||
},
|
||||
"per_object_seconds": {
|
||||
"build/src/800.o": 1.055,
|
||||
"build/src/800_b.o": 0.111,
|
||||
"build/src/800_b_2.o": 0.479,
|
||||
"build/src/800_b_o0a.o": 0.092,
|
||||
"build/src/800_c.o": 0.284,
|
||||
"build/src/800b2.o": 0.189,
|
||||
"build/src/apicard1.o": 0.152,
|
||||
"build/src/apicard2.o": 0.106,
|
||||
"build/src/apicard3.o": 0.139,
|
||||
"build/src/apicard4.o": 0.094,
|
||||
"build/src/apicard5.o": 0.207,
|
||||
"build/src/apicard6.o": 0.178,
|
||||
"build/src/apicard7.o": 0.137,
|
||||
"build/src/boot.o": 0.204,
|
||||
"build/src/gap.o": 0.101,
|
||||
"build/src/libapi1.o": 0.11,
|
||||
"build/src/libapi2.o": 0.142,
|
||||
"build/src/libc2_1.o": 0.116,
|
||||
"build/src/libc2_2.o": 0.08,
|
||||
"build/src/libcd1.o": 0.12,
|
||||
"build/src/libcd2.o": 0.074,
|
||||
"build/src/libetc.o": 0.126,
|
||||
"build/src/libgpu.o": 0.089,
|
||||
"build/src/libgpu2.o": 0.117,
|
||||
"build/src/libgs1.o": 0.168,
|
||||
"build/src/libgs2.o": 0.108,
|
||||
"build/src/libgs3.o": 0.132,
|
||||
"build/src/libgs4.o": 0.127,
|
||||
"build/src/libgs5.o": 0.125,
|
||||
"build/src/libgs6.o": 0.114,
|
||||
"build/src/libgs7.o": 0.126,
|
||||
"build/src/libgs8.o": 0.082,
|
||||
"build/src/libgte1.o": 0.097,
|
||||
"build/src/libgte10.o": 0.08,
|
||||
"build/src/libgte11.o": 0.092,
|
||||
"build/src/libgte12.o": 0.102,
|
||||
"build/src/libgte13.o": 0.132,
|
||||
"build/src/libgte14.o": 0.115,
|
||||
"build/src/libgte15.o": 0.116,
|
||||
"build/src/libgte16.o": 0.077,
|
||||
"build/src/libgte17.o": 0.148,
|
||||
"build/src/libgte18.o": 0.122,
|
||||
"build/src/libgte19.o": 0.105,
|
||||
"build/src/libgte2.o": 0.077,
|
||||
"build/src/libgte20.o": 0.087,
|
||||
"build/src/libgte21.o": 0.101,
|
||||
"build/src/800.o": 1.183,
|
||||
"build/src/800_b.o": 0.169,
|
||||
"build/src/800_b_2.o": 0.616,
|
||||
"build/src/800_b_o0a.o": 0.128,
|
||||
"build/src/800_c.o": 0.32,
|
||||
"build/src/800b2.o": 0.188,
|
||||
"build/src/apicard1.o": 0.084,
|
||||
"build/src/apicard2.o": 0.104,
|
||||
"build/src/apicard3.o": 0.093,
|
||||
"build/src/apicard4.o": 0.129,
|
||||
"build/src/apicard5.o": 0.097,
|
||||
"build/src/apicard6.o": 0.117,
|
||||
"build/src/apicard7.o": 0.109,
|
||||
"build/src/boot.o": 0.146,
|
||||
"build/src/gap.o": 0.081,
|
||||
"build/src/libapi1.o": 0.083,
|
||||
"build/src/libapi2.o": 0.086,
|
||||
"build/src/libc2_1.o": 0.094,
|
||||
"build/src/libc2_2.o": 0.075,
|
||||
"build/src/libcd1.o": 0.111,
|
||||
"build/src/libcd2.o": 0.079,
|
||||
"build/src/libetc.o": 0.094,
|
||||
"build/src/libgpu.o": 0.143,
|
||||
"build/src/libgpu2.o": 0.101,
|
||||
"build/src/libgs1.o": 0.077,
|
||||
"build/src/libgs2.o": 0.146,
|
||||
"build/src/libgs3.o": 0.07,
|
||||
"build/src/libgs4.o": 0.106,
|
||||
"build/src/libgs5.o": 0.083,
|
||||
"build/src/libgs6.o": 0.1,
|
||||
"build/src/libgs7.o": 0.094,
|
||||
"build/src/libgs8.o": 0.114,
|
||||
"build/src/libgte1.o": 0.084,
|
||||
"build/src/libgte10.o": 0.077,
|
||||
"build/src/libgte11.o": 0.113,
|
||||
"build/src/libgte12.o": 0.092,
|
||||
"build/src/libgte13.o": 0.118,
|
||||
"build/src/libgte14.o": 0.099,
|
||||
"build/src/libgte15.o": 0.082,
|
||||
"build/src/libgte16.o": 0.091,
|
||||
"build/src/libgte17.o": 0.087,
|
||||
"build/src/libgte18.o": 0.121,
|
||||
"build/src/libgte19.o": 0.168,
|
||||
"build/src/libgte2.o": 0.092,
|
||||
"build/src/libgte20.o": 0.118,
|
||||
"build/src/libgte21.o": 0.12,
|
||||
"build/src/libgte22.o": 0.096,
|
||||
"build/src/libgte23.o": 0.094,
|
||||
"build/src/libgte24.o": 0.16,
|
||||
"build/src/libgte25.o": 0.08,
|
||||
"build/src/libgte26.o": 0.126,
|
||||
"build/src/libgte27.o": 0.109,
|
||||
"build/src/libgte28.o": 0.088,
|
||||
"build/src/libgte29.o": 0.144,
|
||||
"build/src/libgte3.o": 0.13,
|
||||
"build/src/libgte30.o": 0.141,
|
||||
"build/src/libgte4.o": 0.106,
|
||||
"build/src/libgte5.o": 0.079,
|
||||
"build/src/libgte6.o": 0.09,
|
||||
"build/src/libgte7.o": 0.094,
|
||||
"build/src/libgte8.o": 0.1,
|
||||
"build/src/libgte9.o": 0.103,
|
||||
"build/src/libmcrd1.o": 0.171,
|
||||
"build/src/libmcrd2.o": 0.098,
|
||||
"build/src/libpad1.o": 0.1,
|
||||
"build/src/libpad2.o": 0.09,
|
||||
"build/src/sgap.o": 0.094,
|
||||
"build/src/sgap_2.o": 0.141,
|
||||
"build/src/sgap_3.o": 0.075,
|
||||
"build/src/sgap_4.o": 0.112,
|
||||
"build/src/sgap_5.o": 0.14,
|
||||
"build/src/sgap_6.o": 0.087,
|
||||
"build/src/sgap_8.o": 0.131,
|
||||
"build/src/snd1.o": 0.139,
|
||||
"build/src/snd10.o": 0.076,
|
||||
"build/src/snd11.o": 0.176,
|
||||
"build/src/snd12.o": 0.08,
|
||||
"build/src/snd2.o": 0.086,
|
||||
"build/src/snd3.o": 0.11,
|
||||
"build/src/snd4.o": 0.153,
|
||||
"build/src/snd5.o": 0.125,
|
||||
"build/src/snd6.o": 0.112,
|
||||
"build/src/snd7.o": 0.109,
|
||||
"build/src/snd8.o": 0.101,
|
||||
"build/src/snd9.o": 0.089,
|
||||
"build/src/ov_SC03_014/ov_SC03_014.o": 0.219,
|
||||
"build/src/ov_SC03_014/ov_SC03_014_after.o": 0.785,
|
||||
"build/src/ov_SC03_014/ov_SC03_014_jr_8012ACE0.o": 0.616,
|
||||
"build/src/ov_SC03_014/ov_SC03_014_jr_80135888.o": 0.116,
|
||||
"build/src/ov_SC03_014/ov_SC03_014_jr_80135A4C.o": 0.121,
|
||||
"build/src/ov_SC03_014/ov_SC03_014_jr_80135D20.o": 0.17,
|
||||
"build/src/ov_SC03_014/ov_SC03_014_jr_801380E0.o": 0.195,
|
||||
"build/src/ov_SC03_014/ov_SC03_014_jr_8013C98C.o": 0.173,
|
||||
"build/src/ov_SC03_014/ov_SC03_014_jr_8013F350.o": 0.129,
|
||||
"build/src/ov_SC03_014/ov_SC03_014_jr_8013FFD8.o": 0.111,
|
||||
"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.109,
|
||||
"build/src/ov_SC03_014/ov_SC03_014_jr_80154C24.o": 0.24,
|
||||
"build/src/ov_SC03_014/ov_SC03_014_jr_801588CC.o": 0.194,
|
||||
"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.1,
|
||||
"build/src/ov_SC03_014/ov_SC03_014_jr_8015AE2C.o": 0.151,
|
||||
"build/src/ov_SC03_014/ov_SC03_014_jr_8015C32C.o": 0.638,
|
||||
"build/src/ov_SC03_014/ov_SC03_014_jr_8016AB6C.o": 0.345,
|
||||
"build/src/ov_SC03_014/ov_SC03_014_jr_80171B4C.o": 0.134,
|
||||
"build/src/ov_SC03_014/ov_SC03_014_jr_801734BC.o": 0.305,
|
||||
"build/src/ov_SC03_014/ov_SC03_014_jr_801789AC.o": 0.094,
|
||||
"build/src/ov_SC03_014/ov_SC03_014_jr_80178D40.o": 0.168,
|
||||
"build/src/ov_SC03_014/ov_SC03_014_jr_8017A4AC.o": 0.117,
|
||||
"build/src/ov_SC03_014/ov_SC03_014_jr_8017AE2C.o": 0.288,
|
||||
"build/src/ov_SC03_014/ov_SC03_014_jr_8017EB7C.o": 0.309,
|
||||
"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.402,
|
||||
"build/src/ov_SC03_014/ov_SC03_014_o0b.o": 0.079,
|
||||
"build/src/ov_SC03_014/ov_SC03_014_o0c.o": 0.137,
|
||||
"build/src/ov_SC03_014/ov_SC03_014_o0d.o": 0.075,
|
||||
"build/src/ov_SC03_014/ov_SC03_014_o0e.o": 0.087,
|
||||
"build/src/ov_SC03_015/ov_SC03_015.o": 0.229,
|
||||
"build/src/ov_SC03_015/ov_SC03_015_after.o": 0.651,
|
||||
"build/src/ov_SC03_015/ov_SC03_015_jr_8012ACE0.o": 0.654,
|
||||
"build/src/ov_SC03_015/ov_SC03_015_jr_80135888.o": 0.133,
|
||||
"build/src/ov_SC03_015/ov_SC03_015_jr_80135A4C.o": 0.099,
|
||||
"build/src/ov_SC03_015/ov_SC03_015_jr_80135D20.o": 0.159,
|
||||
"build/src/ov_SC03_015/ov_SC03_015_jr_801380E0.o": 0.206,
|
||||
"build/src/ov_SC03_015/ov_SC03_015_jr_8013C98C.o": 0.137,
|
||||
"build/src/ov_SC03_015/ov_SC03_015_jr_8013F350.o": 0.108,
|
||||
"build/src/ov_SC03_015/ov_SC03_015_jr_8013FFD8.o": 0.094,
|
||||
"build/src/ov_SC03_015/ov_SC03_015_jr_80140608.o": 0.284,
|
||||
"build/src/ov_SC03_015/ov_SC03_015_jr_8015444C.o": 0.141,
|
||||
"build/src/ov_SC03_015/ov_SC03_015_jr_80154C24.o": 0.227,
|
||||
"build/src/ov_SC03_015/ov_SC03_015_jr_801588CC.o": 0.164,
|
||||
"build/src/ov_SC03_015/ov_SC03_015_jr_80159C84.o": 0.114,
|
||||
"build/src/ov_SC03_015/ov_SC03_015_jr_8015A3C8.o": 0.093,
|
||||
"build/src/ov_SC03_015/ov_SC03_015_jr_8015AE2C.o": 0.127,
|
||||
"build/src/ov_SC03_015/ov_SC03_015_jr_8015C32C.o": 0.606,
|
||||
"build/src/ov_SC03_015/ov_SC03_015_jr_8016AB6C.o": 0.402,
|
||||
"build/src/ov_SC03_015/ov_SC03_015_jr_80171B4C.o": 0.149,
|
||||
"build/src/ov_SC03_015/ov_SC03_015_jr_801734BC.o": 0.301,
|
||||
"build/src/ov_SC03_015/ov_SC03_015_jr_801789AC.o": 0.089,
|
||||
"build/src/ov_SC03_015/ov_SC03_015_jr_80178D40.o": 0.137,
|
||||
"build/src/ov_SC03_015/ov_SC03_015_jr_8017A4AC.o": 0.088,
|
||||
"build/src/ov_SC03_015/ov_SC03_015_jr_8017AE2C.o": 0.227,
|
||||
"build/src/ov_SC03_015/ov_SC03_015_jr_8017EB7C.o": 0.296,
|
||||
"build/src/ov_SC03_015/ov_SC03_015_jr_80184440.o": 0.108,
|
||||
"build/src/ov_SC03_015/ov_SC03_015_jr_801848E4.o": 0.389,
|
||||
"build/src/ov_SC03_015/ov_SC03_015_o0b.o": 0.075,
|
||||
"build/src/ov_SC03_015/ov_SC03_015_o0c.o": 0.095,
|
||||
"build/src/ov_SC03_015/ov_SC03_015_o0d.o": 0.112,
|
||||
"build/src/ov_SC03_015/ov_SC03_015_o0e.o": 0.18,
|
||||
"build/src/ov_SC04_011/ov_SC04_011.o": 0.208,
|
||||
"build/src/ov_SC04_011/ov_SC04_011_after.o": 0.693,
|
||||
"build/src/ov_SC04_011/ov_SC04_011_jr_8012ACE0.o": 0.561,
|
||||
"build/src/ov_SC04_011/ov_SC04_011_jr_80135888.o": 0.125,
|
||||
"build/src/ov_SC04_011/ov_SC04_011_jr_80135A4C.o": 0.132,
|
||||
"build/src/ov_SC04_011/ov_SC04_011_jr_80135D20.o": 0.19,
|
||||
"build/src/ov_SC04_011/ov_SC04_011_jr_801380E0.o": 0.211,
|
||||
"build/src/ov_SC04_011/ov_SC04_011_jr_8013C98C.o": 0.163,
|
||||
"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.116,
|
||||
"build/src/ov_SC04_011/ov_SC04_011_jr_80140608.o": 0.281,
|
||||
"build/src/ov_SC04_011/ov_SC04_011_jr_8015444C.o": 0.11,
|
||||
"build/src/ov_SC04_011/ov_SC04_011_jr_80154C24.o": 0.256,
|
||||
"build/src/ov_SC04_011/ov_SC04_011_jr_801588CC.o": 0.158,
|
||||
"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.1,
|
||||
"build/src/ov_SC04_011/ov_SC04_011_jr_8015AE2C.o": 0.146,
|
||||
"build/src/ov_SC04_011/ov_SC04_011_jr_8015C32C.o": 0.668,
|
||||
"build/src/ov_SC04_011/ov_SC04_011_jr_8016AB6C.o": 0.394,
|
||||
"build/src/ov_SC04_011/ov_SC04_011_jr_80171B4C.o": 0.152,
|
||||
"build/src/ov_SC04_011/ov_SC04_011_jr_801734BC.o": 0.297,
|
||||
"build/src/ov_SC04_011/ov_SC04_011_jr_801789AC.o": 0.093,
|
||||
"build/src/ov_SC04_011/ov_SC04_011_jr_80178D40.o": 0.138,
|
||||
"build/src/ov_SC04_011/ov_SC04_011_jr_8017A4AC.o": 0.094,
|
||||
"build/src/libgte23.o": 0.124,
|
||||
"build/src/libgte24.o": 0.07,
|
||||
"build/src/libgte25.o": 0.081,
|
||||
"build/src/libgte26.o": 0.095,
|
||||
"build/src/libgte27.o": 0.122,
|
||||
"build/src/libgte28.o": 0.09,
|
||||
"build/src/libgte29.o": 0.097,
|
||||
"build/src/libgte3.o": 0.086,
|
||||
"build/src/libgte30.o": 0.08,
|
||||
"build/src/libgte4.o": 0.089,
|
||||
"build/src/libgte5.o": 0.105,
|
||||
"build/src/libgte6.o": 0.123,
|
||||
"build/src/libgte7.o": 0.092,
|
||||
"build/src/libgte8.o": 0.15,
|
||||
"build/src/libgte9.o": 0.088,
|
||||
"build/src/libmcrd1.o": 0.098,
|
||||
"build/src/libmcrd2.o": 0.118,
|
||||
"build/src/libpad1.o": 0.077,
|
||||
"build/src/libpad2.o": 0.093,
|
||||
"build/src/sgap.o": 0.137,
|
||||
"build/src/sgap_2.o": 0.095,
|
||||
"build/src/sgap_3.o": 0.094,
|
||||
"build/src/sgap_4.o": 0.122,
|
||||
"build/src/sgap_5.o": 0.13,
|
||||
"build/src/sgap_6.o": 0.088,
|
||||
"build/src/sgap_8.o": 0.111,
|
||||
"build/src/snd1.o": 0.107,
|
||||
"build/src/snd10.o": 0.109,
|
||||
"build/src/snd11.o": 0.124,
|
||||
"build/src/snd12.o": 0.11,
|
||||
"build/src/snd2.o": 0.083,
|
||||
"build/src/snd3.o": 0.088,
|
||||
"build/src/snd4.o": 0.081,
|
||||
"build/src/snd5.o": 0.114,
|
||||
"build/src/snd6.o": 0.126,
|
||||
"build/src/snd7.o": 0.084,
|
||||
"build/src/snd8.o": 0.081,
|
||||
"build/src/snd9.o": 0.095,
|
||||
"build/src/ov_SC03_014/ov_SC03_014.o": 0.289,
|
||||
"build/src/ov_SC03_014/ov_SC03_014_after.o": 0.665,
|
||||
"build/src/ov_SC03_014/ov_SC03_014_jr_8012ACE0.o": 0.571,
|
||||
"build/src/ov_SC03_014/ov_SC03_014_jr_80135888.o": 0.158,
|
||||
"build/src/ov_SC03_014/ov_SC03_014_jr_80135A4C.o": 0.088,
|
||||
"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.221,
|
||||
"build/src/ov_SC03_014/ov_SC03_014_jr_8013C98C.o": 0.162,
|
||||
"build/src/ov_SC03_014/ov_SC03_014_jr_8013F350.o": 0.166,
|
||||
"build/src/ov_SC03_014/ov_SC03_014_jr_8013FFD8.o": 0.101,
|
||||
"build/src/ov_SC03_014/ov_SC03_014_jr_80140608.o": 0.304,
|
||||
"build/src/ov_SC03_014/ov_SC03_014_jr_8015444C.o": 0.106,
|
||||
"build/src/ov_SC03_014/ov_SC03_014_jr_80154C24.o": 0.228,
|
||||
"build/src/ov_SC03_014/ov_SC03_014_jr_801588CC.o": 0.161,
|
||||
"build/src/ov_SC03_014/ov_SC03_014_jr_80159C84.o": 0.098,
|
||||
"build/src/ov_SC03_014/ov_SC03_014_jr_8015A3C8.o": 0.097,
|
||||
"build/src/ov_SC03_014/ov_SC03_014_jr_8015AE2C.o": 0.131,
|
||||
"build/src/ov_SC03_014/ov_SC03_014_jr_8015C32C.o": 0.665,
|
||||
"build/src/ov_SC03_014/ov_SC03_014_jr_8016AB6C.o": 0.423,
|
||||
"build/src/ov_SC03_014/ov_SC03_014_jr_80171B4C.o": 0.144,
|
||||
"build/src/ov_SC03_014/ov_SC03_014_jr_801734BC.o": 0.322,
|
||||
"build/src/ov_SC03_014/ov_SC03_014_jr_801789AC.o": 0.1,
|
||||
"build/src/ov_SC03_014/ov_SC03_014_jr_80178D40.o": 0.156,
|
||||
"build/src/ov_SC03_014/ov_SC03_014_jr_8017A4AC.o": 0.13,
|
||||
"build/src/ov_SC03_014/ov_SC03_014_jr_8017AE2C.o": 0.257,
|
||||
"build/src/ov_SC03_014/ov_SC03_014_jr_8017EB7C.o": 0.313,
|
||||
"build/src/ov_SC03_014/ov_SC03_014_jr_80184440.o": 0.114,
|
||||
"build/src/ov_SC03_014/ov_SC03_014_jr_801848E4.o": 0.424,
|
||||
"build/src/ov_SC03_014/ov_SC03_014_o0b.o": 0.088,
|
||||
"build/src/ov_SC03_014/ov_SC03_014_o0c.o": 0.104,
|
||||
"build/src/ov_SC03_014/ov_SC03_014_o0d.o": 0.09,
|
||||
"build/src/ov_SC03_014/ov_SC03_014_o0e.o": 0.128,
|
||||
"build/src/ov_SC03_015/ov_SC03_015.o": 0.241,
|
||||
"build/src/ov_SC03_015/ov_SC03_015_after.o": 0.637,
|
||||
"build/src/ov_SC03_015/ov_SC03_015_jr_8012ACE0.o": 0.582,
|
||||
"build/src/ov_SC03_015/ov_SC03_015_jr_80135888.o": 0.094,
|
||||
"build/src/ov_SC03_015/ov_SC03_015_jr_80135A4C.o": 0.083,
|
||||
"build/src/ov_SC03_015/ov_SC03_015_jr_80135D20.o": 0.178,
|
||||
"build/src/ov_SC03_015/ov_SC03_015_jr_801380E0.o": 0.196,
|
||||
"build/src/ov_SC03_015/ov_SC03_015_jr_8013C98C.o": 0.143,
|
||||
"build/src/ov_SC03_015/ov_SC03_015_jr_8013F350.o": 0.157,
|
||||
"build/src/ov_SC03_015/ov_SC03_015_jr_8013FFD8.o": 0.087,
|
||||
"build/src/ov_SC03_015/ov_SC03_015_jr_80140608.o": 0.283,
|
||||
"build/src/ov_SC03_015/ov_SC03_015_jr_8015444C.o": 0.143,
|
||||
"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.122,
|
||||
"build/src/ov_SC03_015/ov_SC03_015_jr_80159C84.o": 0.111,
|
||||
"build/src/ov_SC03_015/ov_SC03_015_jr_8015A3C8.o": 0.103,
|
||||
"build/src/ov_SC03_015/ov_SC03_015_jr_8015AE2C.o": 0.161,
|
||||
"build/src/ov_SC03_015/ov_SC03_015_jr_8015C32C.o": 0.712,
|
||||
"build/src/ov_SC03_015/ov_SC03_015_jr_8016AB6C.o": 0.408,
|
||||
"build/src/ov_SC03_015/ov_SC03_015_jr_80171B4C.o": 0.18,
|
||||
"build/src/ov_SC03_015/ov_SC03_015_jr_801734BC.o": 0.288,
|
||||
"build/src/ov_SC03_015/ov_SC03_015_jr_801789AC.o": 0.085,
|
||||
"build/src/ov_SC03_015/ov_SC03_015_jr_80178D40.o": 0.128,
|
||||
"build/src/ov_SC03_015/ov_SC03_015_jr_8017A4AC.o": 0.098,
|
||||
"build/src/ov_SC03_015/ov_SC03_015_jr_8017AE2C.o": 0.245,
|
||||
"build/src/ov_SC03_015/ov_SC03_015_jr_8017EB7C.o": 0.344,
|
||||
"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.393,
|
||||
"build/src/ov_SC03_015/ov_SC03_015_o0b.o": 0.14,
|
||||
"build/src/ov_SC03_015/ov_SC03_015_o0c.o": 0.1,
|
||||
"build/src/ov_SC03_015/ov_SC03_015_o0d.o": 0.107,
|
||||
"build/src/ov_SC03_015/ov_SC03_015_o0e.o": 0.112,
|
||||
"build/src/ov_SC04_011/ov_SC04_011.o": 0.205,
|
||||
"build/src/ov_SC04_011/ov_SC04_011_after.o": 0.631,
|
||||
"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.073,
|
||||
"build/src/ov_SC04_011/ov_SC04_011_jr_80135A4C.o": 0.077,
|
||||
"build/src/ov_SC04_011/ov_SC04_011_jr_80135D20.o": 0.211,
|
||||
"build/src/ov_SC04_011/ov_SC04_011_jr_801380E0.o": 0.243,
|
||||
"build/src/ov_SC04_011/ov_SC04_011_jr_8013C98C.o": 0.141,
|
||||
"build/src/ov_SC04_011/ov_SC04_011_jr_8013F350.o": 0.106,
|
||||
"build/src/ov_SC04_011/ov_SC04_011_jr_8013FFD8.o": 0.144,
|
||||
"build/src/ov_SC04_011/ov_SC04_011_jr_80140608.o": 0.233,
|
||||
"build/src/ov_SC04_011/ov_SC04_011_jr_8015444C.o": 0.15,
|
||||
"build/src/ov_SC04_011/ov_SC04_011_jr_80154C24.o": 0.245,
|
||||
"build/src/ov_SC04_011/ov_SC04_011_jr_801588CC.o": 0.115,
|
||||
"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.116,
|
||||
"build/src/ov_SC04_011/ov_SC04_011_jr_8015AE2C.o": 0.137,
|
||||
"build/src/ov_SC04_011/ov_SC04_011_jr_8015C32C.o": 0.587,
|
||||
"build/src/ov_SC04_011/ov_SC04_011_jr_8016AB6C.o": 0.363,
|
||||
"build/src/ov_SC04_011/ov_SC04_011_jr_80171B4C.o": 0.14,
|
||||
"build/src/ov_SC04_011/ov_SC04_011_jr_801734BC.o": 0.273,
|
||||
"build/src/ov_SC04_011/ov_SC04_011_jr_801789AC.o": 0.109,
|
||||
"build/src/ov_SC04_011/ov_SC04_011_jr_80178D40.o": 0.173,
|
||||
"build/src/ov_SC04_011/ov_SC04_011_jr_8017A4AC.o": 0.115,
|
||||
"build/src/ov_SC04_011/ov_SC04_011_jr_8017AE2C.o": 0.147,
|
||||
"build/src/ov_SC04_011/ov_SC04_011_jr_8017D494.o": 0.779,
|
||||
"build/src/ov_SC04_011/ov_SC04_011_o0b.o": 0.075,
|
||||
"build/src/ov_SC04_011/ov_SC04_011_o0c.o": 0.098
|
||||
"build/src/ov_SC04_011/ov_SC04_011_jr_8017D494.o": 0.743,
|
||||
"build/src/ov_SC04_011/ov_SC04_011_o0b.o": 0.111,
|
||||
"build/src/ov_SC04_011/ov_SC04_011_o0c.o": 0.11
|
||||
},
|
||||
"ok": true,
|
||||
"seconds": 4.1
|
||||
"seconds": 3.8
|
||||
}
|
||||
|
||||
@@ -29051,3 +29051,7 @@
|
||||
{"ts": "2026-09-10 21:08:21", "label": "s104_d1", "rung": "E", "calib": {"head": "55ef71b95", "stamp": "15956e4a96c4"}, "tu": "src/ov_SC06_024/ov_SC06_024_jr_80181D34.c", "fn": "func_80183408", "addr": 2149069832, "aliases": null, "header": false, "includers": 0, "nhash_before": "6f9b635381cfed4e65260e98d4a16f64f97515c2", "nhash_after": "c935c2c51102d9037d3fbb3a711bf772b71f2efc", "source": "propagate:src/ov_SC04_011/ov_SC04_011_jr_8017D494.c:func_80185960", "verdict": "LEVER-FREE", "sites": [], "compiles": 1, "seconds": 0.14, "objects": ["build/src/ov_SC06_024/ov_SC06_024_jr_80181D34.o"], "before_text": "void func_80183408(s32 target, u16 *cur, s32 step)\n{\n s32 t;\n s32 diff;\n s32 mag;\n\n t = (target - *cur) & 0xFFF;\n if (t < 0x800) {\n diff = t;\n } else {\n diff = t | 0xF000;\n }\n mag = diff;\n if ((s16)diff < 0) {\n mag = -diff;\n }\n __asm__ __volatile__(\"\" : \"=r\"(diff) : \"0\"(diff) : \"memory\"); // !FAKE: launder \u2014 NEEDED DIFFERS (P36 rung B tus9)\n if ((s16)mag > (u16)step) {\n if ((s16)diff < 0) {\n *cur = *cur - step;\n } else {\n *cur = *cur + step;\n }\n } else {\n *cur = target;\n }\n}\n", "after_text": "void func_80183408(s32 target, u16 *cur, s32 step)\n{\n s32 t;\n s32 diff;\n s32 mag;\n\n t = (target - *cur) & 0xFFF;\n if (t < 0x800) {\n diff = t;\n } else {\n diff = t | 0xF000;\n }\n if ((s16)diff >= 0) {\n mag = diff;\n } else {\n mag = -diff;\n }\n if ((s16)mag > (u16)step) {\n if ((s16)diff < 0) {\n *cur = *cur - step;\n } else {\n *cur = *cur + step;\n }\n } else {\n *cur = target;\n }\n}\n"}
|
||||
{"ts": "2026-09-10 21:08:21", "label": "s104_d1", "rung": "E", "calib": {"head": "55ef71b95", "stamp": "15956e4a96c4"}, "tu": "src/ov_SC02_005/ov_SC02_005_jr_80185060.c", "fn": "func_80185DD0", "addr": 2149080528, "aliases": null, "header": false, "includers": 0, "nhash_before": "6f9b635381cfed4e65260e98d4a16f64f97515c2", "nhash_after": "c935c2c51102d9037d3fbb3a711bf772b71f2efc", "source": "propagate:src/ov_SC04_011/ov_SC04_011_jr_8017D494.c:func_80185960", "verdict": "LEVER-FREE", "sites": [], "compiles": 1, "seconds": 0.072, "objects": ["build/src/ov_SC02_005/ov_SC02_005_jr_80185060.o"], "before_text": "void func_80185DD0(s32 target, u16 *cur, s32 step)\n{\n s32 t;\n s32 diff;\n s32 mag;\n\n t = (target - *cur) & 0xFFF;\n if (t < 0x800) {\n diff = t;\n } else {\n diff = t | 0xF000;\n }\n mag = diff;\n if ((s16)diff < 0) {\n mag = -diff;\n }\n __asm__ __volatile__(\"\" : \"=r\"(diff) : \"0\"(diff) : \"memory\"); // !FAKE: launder \u2014 NEEDED DIFFERS (P36 rung B tus9)\n if ((s16)mag > (u16)step) {\n if ((s16)diff < 0) {\n *cur = *cur - step;\n } else {\n *cur = *cur + step;\n }\n } else {\n *cur = target;\n }\n}\n", "after_text": "void func_80185DD0(s32 target, u16 *cur, s32 step)\n{\n s32 t;\n s32 diff;\n s32 mag;\n\n t = (target - *cur) & 0xFFF;\n if (t < 0x800) {\n diff = t;\n } else {\n diff = t | 0xF000;\n }\n if ((s16)diff >= 0) {\n mag = diff;\n } else {\n mag = -diff;\n }\n if ((s16)mag > (u16)step) {\n if ((s16)diff < 0) {\n *cur = *cur - step;\n } else {\n *cur = *cur + step;\n }\n } else {\n *cur = target;\n }\n}\n"}
|
||||
{"ts": "2026-09-10 21:08:23", "label": "s104_d1", "rung": "E", "calib": {"head": "55ef71b95", "stamp": "15956e4a96c4"}, "tu": "src/md_SC07_004/md_SC07_004.c", "fn": "func_801A3624", "addr": 2149201444, "aliases": null, "header": false, "includers": 0, "nhash_before": "6f9b635381cfed4e65260e98d4a16f64f97515c2", "nhash_after": "c935c2c51102d9037d3fbb3a711bf772b71f2efc", "source": "propagate:src/ov_SC04_011/ov_SC04_011_jr_8017D494.c:func_80185960", "verdict": "LEVER-FREE", "sites": [], "compiles": 1, "seconds": 0.557, "objects": ["build/src/md_SC07_004/md_SC07_004.o"], "before_text": "void func_801A3624(s32 target, u16 *cur, s32 step)\n{\n s32 t;\n s32 diff;\n s32 mag;\n\n t = (target - *cur) & 0xFFF;\n if (t < 0x800) {\n diff = t;\n } else {\n diff = t | 0xF000;\n }\n mag = diff;\n if ((s16)diff < 0) {\n mag = -diff;\n }\n __asm__ __volatile__(\"\" : \"=r\"(diff) : \"0\"(diff) : \"memory\"); // !FAKE: launder \u2014 NEEDED DIFFERS (P36 rung B tus9)\n if ((s16)mag > (u16)step) {\n if ((s16)diff < 0) {\n *cur = *cur - step;\n } else {\n *cur = *cur + step;\n }\n } else {\n *cur = target;\n }\n}\n", "after_text": "void func_801A3624(s32 target, u16 *cur, s32 step)\n{\n s32 t;\n s32 diff;\n s32 mag;\n\n t = (target - *cur) & 0xFFF;\n if (t < 0x800) {\n diff = t;\n } else {\n diff = t | 0xF000;\n }\n if ((s16)diff >= 0) {\n mag = diff;\n } else {\n mag = -diff;\n }\n if ((s16)mag > (u16)step) {\n if ((s16)diff < 0) {\n *cur = *cur - step;\n } else {\n *cur = *cur + step;\n }\n } else {\n *cur = target;\n }\n}\n"}
|
||||
{"ts": "2026-09-10 21:11:29", "label": "s104_d3", "rung": "E", "calib": {"head": "547571fd1", "stamp": "15956e4a96c4"}, "tu": "src/ov_SC06_014/ov_SC06_014_jr_8017BEBC.c", "fn": "func_8017FB4C", "addr": 2149055308, "aliases": null, "header": false, "includers": 0, "nhash_before": "0ca9f9d76b6711cb03e1602d2b539a6316fec523", "nhash_after": "eb6dd7bc00bbee44c90267704ec1a8ba9707336e", "source": ".run/P36/agents/ov_SC06_014__func_8017FB4C/body.c", "verdict": "LEVER-FREE", "sites": [], "compiles": 1, "seconds": 0.119, "objects": ["build/src/ov_SC06_014/ov_SC06_014_jr_8017BEBC.o"], "before_text": "void func_8017FB4C(void *a0)\n{\n void *s3 = a0;\n void *s2;\n void *p;\n s32 v1;\n register s32 v0 __asm__(\"$2\"); // !FAKE: pin $2 \u2014 NEEDED DIFFERS (P36 rung B tus9)\n s32 bits;\n s32 s0;\n s32 s1;\n\n s2 = *(void **)((s32)s3 + 0x20);\n func_8017FD74(s3);\n p = (*(void * *)&D_801A14A8);\n if (p == 0) {\n goto END;\n }\n v0 = *(u16 *)((s32)s2 + 0x12) + 0x800;\n p = *(void **)((s32)p + 0x20);\n bits = *(u16 *)((s32)p + 0x12) & 0x400;\n s0 = v0 & 0xFFF;\n if (bits == 0) {\n goto ELSE;\n }\n s1 = func_80012A60(s0, 0x400);\n v0 = func_80012A60(s0, 0xC00);\n v1 = (s16)s1;\n v0 = (s16)v0;\n v0 = (v0 < v1);\n if (v0 != 0) {\n goto TRUE1;\n }\n v0 = 0x400;\n goto STORE;\nTRUE1:\n v0 = 0xC00;\n goto STORE;\nELSE:\n s1 = func_80012A60(s0, 0);\n v0 = func_80012A60(s0, 0x800);\n v1 = (s16)s1;\n v0 = (s16)v0;\n v0 = (v0 < v1);\n if (v0 != 0) {\n goto TRUE2;\n }\n *(u16 *)((s32)s2 + 0x12) = 0;\n goto END;\nTRUE2:\n v0 = 0x800;\nSTORE:\n *(u16 *)((s32)s2 + 0x12) = v0;\nEND:\n func_80171990((u8 *)s3);\n}\n", "after_text": "void func_8017FB4C(void *a0)\n{\n void *s2 = *(void **)((s32)a0 + 0x20);\n void *p;\n s32 rot;\n s32 flag;\n s32 angle;\n s32 a;\n s32 b;\n\n func_8017FD74(a0);\n p = (void *)D_801A14A8;\n if (p != 0) {\n rot = *(u16 *)((s32)s2 + 0x12) + 0x800;\n p = *(void **)((s32)p + 0x20);\n flag = *(u16 *)((s32)p + 0x12) & 0x400;\n angle = rot & 0xFFF;\n if (flag) {\n a = func_80012A60(angle, 0x400);\n b = func_80012A60(angle, 0xC00);\n if ((s16)a <= (s16)b) {\n *(u16 *)((s32)s2 + 0x12) = 0x400;\n } else {\n *(u16 *)((s32)s2 + 0x12) = 0xC00;\n }\n } else {\n a = func_80012A60(angle, 0);\n b = func_80012A60(angle, 0x800);\n if ((s16)a <= (s16)b) {\n *(u16 *)((s32)s2 + 0x12) = 0;\n } else {\n *(u16 *)((s32)s2 + 0x12) = 0x800;\n }\n }\n }\n func_80171990((u8 *)a0);\n}\n"}
|
||||
{"ts": "2026-09-10 21:11:44", "label": "s104_d3", "rung": "E", "calib": {"head": "547571fd1", "stamp": "15956e4a96c4"}, "tu": "src/ov_SC06_011/ov_SC06_011_jr_8017EEEC.c", "fn": "func_8017F3C8", "addr": 2149053384, "aliases": null, "header": false, "includers": 0, "nhash_before": "0ca9f9d76b6711cb03e1602d2b539a6316fec523", "nhash_after": "eb6dd7bc00bbee44c90267704ec1a8ba9707336e", "source": "propagate:src/ov_SC06_014/ov_SC06_014_jr_8017BEBC.c:func_8017FB4C", "verdict": "LEVER-FREE", "sites": [], "compiles": 1, "seconds": 0.066, "objects": ["build/src/ov_SC06_011/ov_SC06_011_jr_8017EEEC.o"], "before_text": "void func_8017F3C8(void *a0)\n{\n void *s3 = a0;\n void *s2;\n void *p;\n s32 v1;\n register s32 v0 __asm__(\"$2\"); // !FAKE: pin $2 \u2014 NEEDED DIFFERS (P36 rung B tus9)\n s32 bits;\n s32 s0;\n s32 s1;\n\n s2 = *(void **)((s32)s3 + 0x20);\n func_8017F5F0(s3);\n p = (*(void * *)&D_801ABBD8);\n if (p == 0) {\n goto END;\n }\n v0 = *(u16 *)((s32)s2 + 0x12) + 0x800;\n p = *(void **)((s32)p + 0x20);\n bits = *(u16 *)((s32)p + 0x12) & 0x400;\n s0 = v0 & 0xFFF;\n if (bits == 0) {\n goto ELSE;\n }\n s1 = func_80012A60(s0, 0x400);\n v0 = func_80012A60(s0, 0xC00);\n v1 = (s16)s1;\n v0 = (s16)v0;\n v0 = (v0 < v1);\n if (v0 != 0) {\n goto TRUE1;\n }\n v0 = 0x400;\n goto STORE;\nTRUE1:\n v0 = 0xC00;\n goto STORE;\nELSE:\n s1 = func_80012A60(s0, 0);\n v0 = func_80012A60(s0, 0x800);\n v1 = (s16)s1;\n v0 = (s16)v0;\n v0 = (v0 < v1);\n if (v0 != 0) {\n goto TRUE2;\n }\n *(u16 *)((s32)s2 + 0x12) = 0;\n goto END;\nTRUE2:\n v0 = 0x800;\nSTORE:\n *(u16 *)((s32)s2 + 0x12) = v0;\nEND:\n func_80171990((u8 *)s3);\n}\n", "after_text": "void func_8017F3C8(void *a0)\n{\n void *s2 = *(void **)((s32)a0 + 0x20);\n void *p;\n s32 rot;\n s32 flag;\n s32 angle;\n s32 a;\n s32 b;\n\n func_8017F5F0(a0);\n p = (void *)D_801ABBD8;\n if (p != 0) {\n rot = *(u16 *)((s32)s2 + 0x12) + 0x800;\n p = *(void **)((s32)p + 0x20);\n flag = *(u16 *)((s32)p + 0x12) & 0x400;\n angle = rot & 0xFFF;\n if (flag) {\n a = func_80012A60(angle, 0x400);\n b = func_80012A60(angle, 0xC00);\n if ((s16)a <= (s16)b) {\n *(u16 *)((s32)s2 + 0x12) = 0x400;\n } else {\n *(u16 *)((s32)s2 + 0x12) = 0xC00;\n }\n } else {\n a = func_80012A60(angle, 0);\n b = func_80012A60(angle, 0x800);\n if ((s16)a <= (s16)b) {\n *(u16 *)((s32)s2 + 0x12) = 0;\n } else {\n *(u16 *)((s32)s2 + 0x12) = 0x800;\n }\n }\n }\n func_80171990((u8 *)a0);\n}\n"}
|
||||
{"ts": "2026-09-10 21:11:45", "label": "s104_d3", "rung": "E", "calib": {"head": "547571fd1", "stamp": "15956e4a96c4"}, "tu": "src/ov_SC06_013/ov_SC06_013_jr_8017BEBC.c", "fn": "func_8017E7E8", "addr": 2149050344, "aliases": null, "header": false, "includers": 0, "nhash_before": "0ca9f9d76b6711cb03e1602d2b539a6316fec523", "nhash_after": "eb6dd7bc00bbee44c90267704ec1a8ba9707336e", "source": "propagate:src/ov_SC06_014/ov_SC06_014_jr_8017BEBC.c:func_8017FB4C", "verdict": "LEVER-FREE", "sites": [], "compiles": 1, "seconds": 0.152, "objects": ["build/src/ov_SC06_013/ov_SC06_013_jr_8017BEBC.o"], "before_text": "void func_8017E7E8(void *a0)\n{\n void *s3 = a0;\n void *s2;\n void *p;\n s32 v1;\n register s32 v0 __asm__(\"$2\"); // !FAKE: pin $2 \u2014 NEEDED DIFFERS (P36 rung B tus9)\n s32 bits;\n s32 s0;\n s32 s1;\n\n s2 = *(void **)((s32)s3 + 0x20);\n func_8017EA10(s3);\n p = (*(void * *)&D_8019AA90);\n if (p == 0) {\n goto END;\n }\n v0 = *(u16 *)((s32)s2 + 0x12) + 0x800;\n p = *(void **)((s32)p + 0x20);\n bits = *(u16 *)((s32)p + 0x12) & 0x400;\n s0 = v0 & 0xFFF;\n if (bits == 0) {\n goto ELSE;\n }\n s1 = func_80012A60(s0, 0x400);\n v0 = func_80012A60(s0, 0xC00);\n v1 = (s16)s1;\n v0 = (s16)v0;\n v0 = (v0 < v1);\n if (v0 != 0) {\n goto TRUE1;\n }\n v0 = 0x400;\n goto STORE;\nTRUE1:\n v0 = 0xC00;\n goto STORE;\nELSE:\n s1 = func_80012A60(s0, 0);\n v0 = func_80012A60(s0, 0x800);\n v1 = (s16)s1;\n v0 = (s16)v0;\n v0 = (v0 < v1);\n if (v0 != 0) {\n goto TRUE2;\n }\n *(u16 *)((s32)s2 + 0x12) = 0;\n goto END;\nTRUE2:\n v0 = 0x800;\nSTORE:\n *(u16 *)((s32)s2 + 0x12) = v0;\nEND:\n func_80171990((u8 *)s3);\n}\n", "after_text": "void func_8017E7E8(void *a0)\n{\n void *s2 = *(void **)((s32)a0 + 0x20);\n void *p;\n s32 rot;\n s32 flag;\n s32 angle;\n s32 a;\n s32 b;\n\n func_8017EA10(a0);\n p = (void *)D_8019AA90;\n if (p != 0) {\n rot = *(u16 *)((s32)s2 + 0x12) + 0x800;\n p = *(void **)((s32)p + 0x20);\n flag = *(u16 *)((s32)p + 0x12) & 0x400;\n angle = rot & 0xFFF;\n if (flag) {\n a = func_80012A60(angle, 0x400);\n b = func_80012A60(angle, 0xC00);\n if ((s16)a <= (s16)b) {\n *(u16 *)((s32)s2 + 0x12) = 0x400;\n } else {\n *(u16 *)((s32)s2 + 0x12) = 0xC00;\n }\n } else {\n a = func_80012A60(angle, 0);\n b = func_80012A60(angle, 0x800);\n if ((s16)a <= (s16)b) {\n *(u16 *)((s32)s2 + 0x12) = 0;\n } else {\n *(u16 *)((s32)s2 + 0x12) = 0x800;\n }\n }\n }\n func_80171990((u8 *)a0);\n}\n"}
|
||||
{"ts": "2026-09-10 21:11:45", "label": "s104_d3", "rung": "E", "calib": {"head": "547571fd1", "stamp": "15956e4a96c4"}, "tu": "src/ov_SC06_015/ov_SC06_015_jr_8017BEBC.c", "fn": "func_8017E6A4", "addr": 2149050020, "aliases": null, "header": false, "includers": 0, "nhash_before": "0ca9f9d76b6711cb03e1602d2b539a6316fec523", "nhash_after": "eb6dd7bc00bbee44c90267704ec1a8ba9707336e", "source": "propagate:src/ov_SC06_014/ov_SC06_014_jr_8017BEBC.c:func_8017FB4C", "verdict": "LEVER-FREE", "sites": [], "compiles": 1, "seconds": 0.121, "objects": ["build/src/ov_SC06_015/ov_SC06_015_jr_8017BEBC.o"], "before_text": "void func_8017E6A4(void *a0)\n{\n void *s3 = a0;\n void *s2;\n void *p;\n s32 v1;\n register s32 v0 __asm__(\"$2\"); // !FAKE: pin $2 \u2014 NEEDED DIFFERS (P36 rung B tus9)\n s32 bits;\n s32 s0;\n s32 s1;\n\n s2 = *(void **)((s32)s3 + 0x20);\n func_8017E8CC(s3);\n p = (*(void * *)&D_80194888);\n if (p == 0) {\n goto END;\n }\n v0 = *(u16 *)((s32)s2 + 0x12) + 0x800;\n p = *(void **)((s32)p + 0x20);\n bits = *(u16 *)((s32)p + 0x12) & 0x400;\n s0 = v0 & 0xFFF;\n if (bits == 0) {\n goto ELSE;\n }\n s1 = func_80012A60(s0, 0x400);\n v0 = func_80012A60(s0, 0xC00);\n v1 = (s16)s1;\n v0 = (s16)v0;\n v0 = (v0 < v1);\n if (v0 != 0) {\n goto TRUE1;\n }\n v0 = 0x400;\n goto STORE;\nTRUE1:\n v0 = 0xC00;\n goto STORE;\nELSE:\n s1 = func_80012A60(s0, 0);\n v0 = func_80012A60(s0, 0x800);\n v1 = (s16)s1;\n v0 = (s16)v0;\n v0 = (v0 < v1);\n if (v0 != 0) {\n goto TRUE2;\n }\n *(u16 *)((s32)s2 + 0x12) = 0;\n goto END;\nTRUE2:\n v0 = 0x800;\nSTORE:\n *(u16 *)((s32)s2 + 0x12) = v0;\nEND:\n func_80171990((u8 *)s3);\n}\n", "after_text": "void func_8017E6A4(void *a0)\n{\n void *s2 = *(void **)((s32)a0 + 0x20);\n void *p;\n s32 rot;\n s32 flag;\n s32 angle;\n s32 a;\n s32 b;\n\n func_8017E8CC(a0);\n p = (void *)D_80194888;\n if (p != 0) {\n rot = *(u16 *)((s32)s2 + 0x12) + 0x800;\n p = *(void **)((s32)p + 0x20);\n flag = *(u16 *)((s32)p + 0x12) & 0x400;\n angle = rot & 0xFFF;\n if (flag) {\n a = func_80012A60(angle, 0x400);\n b = func_80012A60(angle, 0xC00);\n if ((s16)a <= (s16)b) {\n *(u16 *)((s32)s2 + 0x12) = 0x400;\n } else {\n *(u16 *)((s32)s2 + 0x12) = 0xC00;\n }\n } else {\n a = func_80012A60(angle, 0);\n b = func_80012A60(angle, 0x800);\n if ((s16)a <= (s16)b) {\n *(u16 *)((s32)s2 + 0x12) = 0;\n } else {\n *(u16 *)((s32)s2 + 0x12) = 0x800;\n }\n }\n }\n func_80171990((u8 *)a0);\n}\n"}
|
||||
|
||||
@@ -228,58 +228,40 @@ extern s32 D_801ABBD8;
|
||||
|
||||
void func_8017F3C8(void *a0)
|
||||
{
|
||||
void *s3 = a0;
|
||||
void *s2;
|
||||
void *s2 = *(void **)((s32)a0 + 0x20);
|
||||
void *p;
|
||||
s32 v1;
|
||||
register s32 v0 __asm__("$2"); // !FAKE: pin $2 — NEEDED DIFFERS (P36 rung B tus9)
|
||||
s32 bits;
|
||||
s32 s0;
|
||||
s32 s1;
|
||||
s32 rot;
|
||||
s32 flag;
|
||||
s32 angle;
|
||||
s32 a;
|
||||
s32 b;
|
||||
|
||||
s2 = *(void **)((s32)s3 + 0x20);
|
||||
func_8017F5F0(s3);
|
||||
p = (*(void * *)&D_801ABBD8);
|
||||
if (p == 0) {
|
||||
goto END;
|
||||
func_8017F5F0(a0);
|
||||
p = (void *)D_801ABBD8;
|
||||
if (p != 0) {
|
||||
rot = *(u16 *)((s32)s2 + 0x12) + 0x800;
|
||||
p = *(void **)((s32)p + 0x20);
|
||||
flag = *(u16 *)((s32)p + 0x12) & 0x400;
|
||||
angle = rot & 0xFFF;
|
||||
if (flag) {
|
||||
a = func_80012A60(angle, 0x400);
|
||||
b = func_80012A60(angle, 0xC00);
|
||||
if ((s16)a <= (s16)b) {
|
||||
*(u16 *)((s32)s2 + 0x12) = 0x400;
|
||||
} else {
|
||||
*(u16 *)((s32)s2 + 0x12) = 0xC00;
|
||||
}
|
||||
} else {
|
||||
a = func_80012A60(angle, 0);
|
||||
b = func_80012A60(angle, 0x800);
|
||||
if ((s16)a <= (s16)b) {
|
||||
*(u16 *)((s32)s2 + 0x12) = 0;
|
||||
} else {
|
||||
*(u16 *)((s32)s2 + 0x12) = 0x800;
|
||||
}
|
||||
}
|
||||
}
|
||||
v0 = *(u16 *)((s32)s2 + 0x12) + 0x800;
|
||||
p = *(void **)((s32)p + 0x20);
|
||||
bits = *(u16 *)((s32)p + 0x12) & 0x400;
|
||||
s0 = v0 & 0xFFF;
|
||||
if (bits == 0) {
|
||||
goto ELSE;
|
||||
}
|
||||
s1 = func_80012A60(s0, 0x400);
|
||||
v0 = func_80012A60(s0, 0xC00);
|
||||
v1 = (s16)s1;
|
||||
v0 = (s16)v0;
|
||||
v0 = (v0 < v1);
|
||||
if (v0 != 0) {
|
||||
goto TRUE1;
|
||||
}
|
||||
v0 = 0x400;
|
||||
goto STORE;
|
||||
TRUE1:
|
||||
v0 = 0xC00;
|
||||
goto STORE;
|
||||
ELSE:
|
||||
s1 = func_80012A60(s0, 0);
|
||||
v0 = func_80012A60(s0, 0x800);
|
||||
v1 = (s16)s1;
|
||||
v0 = (s16)v0;
|
||||
v0 = (v0 < v1);
|
||||
if (v0 != 0) {
|
||||
goto TRUE2;
|
||||
}
|
||||
*(u16 *)((s32)s2 + 0x12) = 0;
|
||||
goto END;
|
||||
TRUE2:
|
||||
v0 = 0x800;
|
||||
STORE:
|
||||
*(u16 *)((s32)s2 + 0x12) = v0;
|
||||
END:
|
||||
func_80171990((u8 *)s3);
|
||||
func_80171990((u8 *)a0);
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -3844,58 +3844,40 @@ extern s32 D_8019AA90;
|
||||
|
||||
void func_8017E7E8(void *a0)
|
||||
{
|
||||
void *s3 = a0;
|
||||
void *s2;
|
||||
void *s2 = *(void **)((s32)a0 + 0x20);
|
||||
void *p;
|
||||
s32 v1;
|
||||
register s32 v0 __asm__("$2"); // !FAKE: pin $2 — NEEDED DIFFERS (P36 rung B tus9)
|
||||
s32 bits;
|
||||
s32 s0;
|
||||
s32 s1;
|
||||
s32 rot;
|
||||
s32 flag;
|
||||
s32 angle;
|
||||
s32 a;
|
||||
s32 b;
|
||||
|
||||
s2 = *(void **)((s32)s3 + 0x20);
|
||||
func_8017EA10(s3);
|
||||
p = (*(void * *)&D_8019AA90);
|
||||
if (p == 0) {
|
||||
goto END;
|
||||
func_8017EA10(a0);
|
||||
p = (void *)D_8019AA90;
|
||||
if (p != 0) {
|
||||
rot = *(u16 *)((s32)s2 + 0x12) + 0x800;
|
||||
p = *(void **)((s32)p + 0x20);
|
||||
flag = *(u16 *)((s32)p + 0x12) & 0x400;
|
||||
angle = rot & 0xFFF;
|
||||
if (flag) {
|
||||
a = func_80012A60(angle, 0x400);
|
||||
b = func_80012A60(angle, 0xC00);
|
||||
if ((s16)a <= (s16)b) {
|
||||
*(u16 *)((s32)s2 + 0x12) = 0x400;
|
||||
} else {
|
||||
*(u16 *)((s32)s2 + 0x12) = 0xC00;
|
||||
}
|
||||
} else {
|
||||
a = func_80012A60(angle, 0);
|
||||
b = func_80012A60(angle, 0x800);
|
||||
if ((s16)a <= (s16)b) {
|
||||
*(u16 *)((s32)s2 + 0x12) = 0;
|
||||
} else {
|
||||
*(u16 *)((s32)s2 + 0x12) = 0x800;
|
||||
}
|
||||
}
|
||||
}
|
||||
v0 = *(u16 *)((s32)s2 + 0x12) + 0x800;
|
||||
p = *(void **)((s32)p + 0x20);
|
||||
bits = *(u16 *)((s32)p + 0x12) & 0x400;
|
||||
s0 = v0 & 0xFFF;
|
||||
if (bits == 0) {
|
||||
goto ELSE;
|
||||
}
|
||||
s1 = func_80012A60(s0, 0x400);
|
||||
v0 = func_80012A60(s0, 0xC00);
|
||||
v1 = (s16)s1;
|
||||
v0 = (s16)v0;
|
||||
v0 = (v0 < v1);
|
||||
if (v0 != 0) {
|
||||
goto TRUE1;
|
||||
}
|
||||
v0 = 0x400;
|
||||
goto STORE;
|
||||
TRUE1:
|
||||
v0 = 0xC00;
|
||||
goto STORE;
|
||||
ELSE:
|
||||
s1 = func_80012A60(s0, 0);
|
||||
v0 = func_80012A60(s0, 0x800);
|
||||
v1 = (s16)s1;
|
||||
v0 = (s16)v0;
|
||||
v0 = (v0 < v1);
|
||||
if (v0 != 0) {
|
||||
goto TRUE2;
|
||||
}
|
||||
*(u16 *)((s32)s2 + 0x12) = 0;
|
||||
goto END;
|
||||
TRUE2:
|
||||
v0 = 0x800;
|
||||
STORE:
|
||||
*(u16 *)((s32)s2 + 0x12) = v0;
|
||||
END:
|
||||
func_80171990((u8 *)s3);
|
||||
func_80171990((u8 *)a0);
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -4542,58 +4542,40 @@ extern s32 D_801A14A8;
|
||||
|
||||
void func_8017FB4C(void *a0)
|
||||
{
|
||||
void *s3 = a0;
|
||||
void *s2;
|
||||
void *s2 = *(void **)((s32)a0 + 0x20);
|
||||
void *p;
|
||||
s32 v1;
|
||||
register s32 v0 __asm__("$2"); // !FAKE: pin $2 — NEEDED DIFFERS (P36 rung B tus9)
|
||||
s32 bits;
|
||||
s32 s0;
|
||||
s32 s1;
|
||||
s32 rot;
|
||||
s32 flag;
|
||||
s32 angle;
|
||||
s32 a;
|
||||
s32 b;
|
||||
|
||||
s2 = *(void **)((s32)s3 + 0x20);
|
||||
func_8017FD74(s3);
|
||||
p = (*(void * *)&D_801A14A8);
|
||||
if (p == 0) {
|
||||
goto END;
|
||||
func_8017FD74(a0);
|
||||
p = (void *)D_801A14A8;
|
||||
if (p != 0) {
|
||||
rot = *(u16 *)((s32)s2 + 0x12) + 0x800;
|
||||
p = *(void **)((s32)p + 0x20);
|
||||
flag = *(u16 *)((s32)p + 0x12) & 0x400;
|
||||
angle = rot & 0xFFF;
|
||||
if (flag) {
|
||||
a = func_80012A60(angle, 0x400);
|
||||
b = func_80012A60(angle, 0xC00);
|
||||
if ((s16)a <= (s16)b) {
|
||||
*(u16 *)((s32)s2 + 0x12) = 0x400;
|
||||
} else {
|
||||
*(u16 *)((s32)s2 + 0x12) = 0xC00;
|
||||
}
|
||||
} else {
|
||||
a = func_80012A60(angle, 0);
|
||||
b = func_80012A60(angle, 0x800);
|
||||
if ((s16)a <= (s16)b) {
|
||||
*(u16 *)((s32)s2 + 0x12) = 0;
|
||||
} else {
|
||||
*(u16 *)((s32)s2 + 0x12) = 0x800;
|
||||
}
|
||||
}
|
||||
}
|
||||
v0 = *(u16 *)((s32)s2 + 0x12) + 0x800;
|
||||
p = *(void **)((s32)p + 0x20);
|
||||
bits = *(u16 *)((s32)p + 0x12) & 0x400;
|
||||
s0 = v0 & 0xFFF;
|
||||
if (bits == 0) {
|
||||
goto ELSE;
|
||||
}
|
||||
s1 = func_80012A60(s0, 0x400);
|
||||
v0 = func_80012A60(s0, 0xC00);
|
||||
v1 = (s16)s1;
|
||||
v0 = (s16)v0;
|
||||
v0 = (v0 < v1);
|
||||
if (v0 != 0) {
|
||||
goto TRUE1;
|
||||
}
|
||||
v0 = 0x400;
|
||||
goto STORE;
|
||||
TRUE1:
|
||||
v0 = 0xC00;
|
||||
goto STORE;
|
||||
ELSE:
|
||||
s1 = func_80012A60(s0, 0);
|
||||
v0 = func_80012A60(s0, 0x800);
|
||||
v1 = (s16)s1;
|
||||
v0 = (s16)v0;
|
||||
v0 = (v0 < v1);
|
||||
if (v0 != 0) {
|
||||
goto TRUE2;
|
||||
}
|
||||
*(u16 *)((s32)s2 + 0x12) = 0;
|
||||
goto END;
|
||||
TRUE2:
|
||||
v0 = 0x800;
|
||||
STORE:
|
||||
*(u16 *)((s32)s2 + 0x12) = v0;
|
||||
END:
|
||||
func_80171990((u8 *)s3);
|
||||
func_80171990((u8 *)a0);
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -3723,58 +3723,40 @@ extern s32 D_80194888;
|
||||
|
||||
void func_8017E6A4(void *a0)
|
||||
{
|
||||
void *s3 = a0;
|
||||
void *s2;
|
||||
void *s2 = *(void **)((s32)a0 + 0x20);
|
||||
void *p;
|
||||
s32 v1;
|
||||
register s32 v0 __asm__("$2"); // !FAKE: pin $2 — NEEDED DIFFERS (P36 rung B tus9)
|
||||
s32 bits;
|
||||
s32 s0;
|
||||
s32 s1;
|
||||
s32 rot;
|
||||
s32 flag;
|
||||
s32 angle;
|
||||
s32 a;
|
||||
s32 b;
|
||||
|
||||
s2 = *(void **)((s32)s3 + 0x20);
|
||||
func_8017E8CC(s3);
|
||||
p = (*(void * *)&D_80194888);
|
||||
if (p == 0) {
|
||||
goto END;
|
||||
func_8017E8CC(a0);
|
||||
p = (void *)D_80194888;
|
||||
if (p != 0) {
|
||||
rot = *(u16 *)((s32)s2 + 0x12) + 0x800;
|
||||
p = *(void **)((s32)p + 0x20);
|
||||
flag = *(u16 *)((s32)p + 0x12) & 0x400;
|
||||
angle = rot & 0xFFF;
|
||||
if (flag) {
|
||||
a = func_80012A60(angle, 0x400);
|
||||
b = func_80012A60(angle, 0xC00);
|
||||
if ((s16)a <= (s16)b) {
|
||||
*(u16 *)((s32)s2 + 0x12) = 0x400;
|
||||
} else {
|
||||
*(u16 *)((s32)s2 + 0x12) = 0xC00;
|
||||
}
|
||||
} else {
|
||||
a = func_80012A60(angle, 0);
|
||||
b = func_80012A60(angle, 0x800);
|
||||
if ((s16)a <= (s16)b) {
|
||||
*(u16 *)((s32)s2 + 0x12) = 0;
|
||||
} else {
|
||||
*(u16 *)((s32)s2 + 0x12) = 0x800;
|
||||
}
|
||||
}
|
||||
}
|
||||
v0 = *(u16 *)((s32)s2 + 0x12) + 0x800;
|
||||
p = *(void **)((s32)p + 0x20);
|
||||
bits = *(u16 *)((s32)p + 0x12) & 0x400;
|
||||
s0 = v0 & 0xFFF;
|
||||
if (bits == 0) {
|
||||
goto ELSE;
|
||||
}
|
||||
s1 = func_80012A60(s0, 0x400);
|
||||
v0 = func_80012A60(s0, 0xC00);
|
||||
v1 = (s16)s1;
|
||||
v0 = (s16)v0;
|
||||
v0 = (v0 < v1);
|
||||
if (v0 != 0) {
|
||||
goto TRUE1;
|
||||
}
|
||||
v0 = 0x400;
|
||||
goto STORE;
|
||||
TRUE1:
|
||||
v0 = 0xC00;
|
||||
goto STORE;
|
||||
ELSE:
|
||||
s1 = func_80012A60(s0, 0);
|
||||
v0 = func_80012A60(s0, 0x800);
|
||||
v1 = (s16)s1;
|
||||
v0 = (s16)v0;
|
||||
v0 = (v0 < v1);
|
||||
if (v0 != 0) {
|
||||
goto TRUE2;
|
||||
}
|
||||
*(u16 *)((s32)s2 + 0x12) = 0;
|
||||
goto END;
|
||||
TRUE2:
|
||||
v0 = 0x800;
|
||||
STORE:
|
||||
*(u16 *)((s32)s2 + 0x12) = v0;
|
||||
END:
|
||||
func_80171990((u8 *)s3);
|
||||
func_80171990((u8 *)a0);
|
||||
}
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user