feat(phase-30 S49): propagate func_8017E404 (adapt lane)

This commit is contained in:
Drew T
2026-08-14 14:27:10 -06:00
parent c897c4cf28
commit 40ee73ba75
4 changed files with 101 additions and 92 deletions
+7
View File
@@ -14558,3 +14558,10 @@ groups:
func: DEFINE_func_8017D808
vram: 0x8017D808
binaries: [ov_SC01_005, ov_SC01_006]
- id: E_func_8017E404
tier: h_exact
hash: 7c41de81900f591c42e025527551c45c3580913c
source: src/shared/engine_core.h
func: DEFINE_func_8017E404
vram: 0x8017E404
binaries: [ov_SC02_000, ov_SC02_003]
+1 -46
View File
@@ -4529,52 +4529,7 @@ void func_8017D538(s32 arg0)
// @class: regalloc-order
// @stuck: none — MATCH (relocation-masked, 70 ins). pins $s0/$s1 + precomputed a0v anchored in a zero-byte barrier fix the prologue schedule.
extern s32 func_8012BC60(struct Vec *a0, struct Vec *a1);
extern s32 ratan2(s32, s32);
extern void func_8012B0B4(SVEC *, s32, s32);
extern s32 func_8012CEB0(s32 a0, s32 a1, s32 a2);
extern void func_8012ADE4(u8 *a0);
s32 func_8017E404(s32 param_1, s32 param_2)
{
register s32 p1 __asm__("$16") = param_1;
register s32 p2 __asm__("$17") = param_2;
SVEC in;
SVEC out;
SVEC buf;
s32 d;
s32 ang;
u16 px, pz;
s32 a0v;
a0v = p1 + 4;
__asm__ __volatile__("" : : "r"(p2), "r"(a0v));
if (((s32 (*)(s32, s32))func_8012BC60)(a0v, p2 + 4) >= 0x1000) {
return 0;
}
ang = ratan2((s32)*(s16 *)(p1 + 0xe) - (s32)*(s16 *)(p2 + 0xe),
(s32)*(s16 *)(p2 + 6) - (s32)*(s16 *)(p1 + 6));
func_8012B0B4(&buf, (ang - 0x400) & 0xfff, 0x41);
d = *(s32 *)&buf;
px = *(u16 *)(p2 + 6);
out.vx = px;
out.vy = *(u16 *)(p2 + 0xa);
pz = *(u16 *)(p2 + 0xe);
out.vz = pz;
out.vx = px + d;
out.vz = pz + (d >> 16);
in.vx = *(u16 *)(p1 + 0x3a);
in.vy = *(u16 *)(p1 + 0x3e);
in.vz = *(u16 *)(p1 + 0x42);
if ((((s32 (*)(SVEC *, SVEC *, s32))func_8012CEB0)(&in, &out, 0) & 0x2000) == 0) {
((void (*)(s32))func_8012ADE4)(p1);
return 1;
}
*(s16 *)(p1 + 6) = out.vx;
*(s16 *)(p1 + 0xa) = out.vy;
*(s16 *)(p1 + 0xe) = out.vz;
return 1;
}
DEFINE_func_8017E404() /* dedup: shared engine-core @0x8017E404 (src/shared) */
+1 -46
View File
@@ -4529,52 +4529,7 @@ void func_8017D538(s32 arg0)
// @class: regalloc-order
// @stuck: none — MATCH (relocation-masked, 70 ins). pins $s0/$s1 + precomputed a0v anchored in a zero-byte barrier fix the prologue schedule.
extern s32 func_8012BC60(struct Vec *a0, struct Vec *a1);
extern s32 ratan2(s32, s32);
extern void func_8012B0B4(SVEC *, s32, s32);
extern s32 func_8012CEB0(s32 a0, s32 a1, s32 a2);
extern void func_8012ADE4(u8 *a0);
s32 func_8017E404(s32 param_1, s32 param_2)
{
register s32 p1 __asm__("$16") = param_1;
register s32 p2 __asm__("$17") = param_2;
SVEC in;
SVEC out;
SVEC buf;
s32 d;
s32 ang;
u16 px, pz;
s32 a0v;
a0v = p1 + 4;
__asm__ __volatile__("" : : "r"(p2), "r"(a0v));
if (((s32 (*)(s32, s32))func_8012BC60)(a0v, p2 + 4) >= 0x1000) {
return 0;
}
ang = ratan2((s32)*(s16 *)(p1 + 0xe) - (s32)*(s16 *)(p2 + 0xe),
(s32)*(s16 *)(p2 + 6) - (s32)*(s16 *)(p1 + 6));
func_8012B0B4(&buf, (ang - 0x400) & 0xfff, 0x41);
d = *(s32 *)&buf;
px = *(u16 *)(p2 + 6);
out.vx = px;
out.vy = *(u16 *)(p2 + 0xa);
pz = *(u16 *)(p2 + 0xe);
out.vz = pz;
out.vx = px + d;
out.vz = pz + (d >> 16);
in.vx = *(u16 *)(p1 + 0x3a);
in.vy = *(u16 *)(p1 + 0x3e);
in.vz = *(u16 *)(p1 + 0x42);
if ((((s32 (*)(SVEC *, SVEC *, s32))func_8012CEB0)(&in, &out, 0) & 0x2000) == 0) {
((void (*)(s32))func_8012ADE4)(p1);
return 1;
}
*(s16 *)(p1 + 6) = out.vx;
*(s16 *)(p1 + 0xa) = out.vy;
*(s16 *)(p1 + 0xe) = out.vz;
return 1;
}
DEFINE_func_8017E404() /* dedup: shared engine-core @0x8017E404 (src/shared) */
+92
View File
@@ -60394,6 +60394,52 @@
*(s32 *)(param_1 + 0x44) = (s32)svec_out.vz; \
}
#define DEFINE_func_8017E404() \
extern s32 func_8012BC60(struct Vec *a0, struct Vec *a1); \
extern s32 ratan2(s32, s32); \
extern void func_8012B0B4(SVEC *, s32, s32); \
extern s32 func_8012CEB0(s32 a0, s32 a1, s32 a2); \
extern void func_8012ADE4(u8 *a0); \
s32 func_8017E404(s32 param_1, s32 param_2) \
{ \
register s32 p1 __asm__("$16") = param_1; \
register s32 p2 __asm__("$17") = param_2; \
SVEC in; \
SVEC out; \
SVEC buf; \
s32 d; \
s32 ang; \
u16 px, pz; \
s32 a0v; \
a0v = p1 + 4; \
__asm__ __volatile__("" : : "r"(p2), "r"(a0v)); \
if (((s32 (*)(s32, s32))func_8012BC60)(a0v, p2 + 4) >= 0x1000) { \
return 0; \
} \
ang = ratan2((s32)*(s16 *)(p1 + 0xe) - (s32)*(s16 *)(p2 + 0xe), \
(s32)*(s16 *)(p2 + 6) - (s32)*(s16 *)(p1 + 6)); \
func_8012B0B4(&buf, (ang - 0x400) & 0xfff, 0x41); \
d = *(s32 *)&buf; \
px = *(u16 *)(p2 + 6); \
out.vx = px; \
out.vy = *(u16 *)(p2 + 0xa); \
pz = *(u16 *)(p2 + 0xe); \
out.vz = pz; \
out.vx = px + d; \
out.vz = pz + (d >> 16); \
in.vx = *(u16 *)(p1 + 0x3a); \
in.vy = *(u16 *)(p1 + 0x3e); \
in.vz = *(u16 *)(p1 + 0x42); \
if ((((s32 (*)(SVEC *, SVEC *, s32))func_8012CEB0)(&in, &out, 0) & 0x2000) == 0) { \
((void (*)(s32))func_8012ADE4)(p1); \
return 1; \
} \
*(s16 *)(p1 + 6) = out.vx; \
*(s16 *)(p1 + 0xa) = out.vy; \
*(s16 *)(p1 + 0xe) = out.vz; \
return 1; \
}
#endif
#define DEFINE_func_80128EA8() \
@@ -150193,4 +150239,50 @@
*(s32 *)(param_1 + 0x44) = (s32)svec_out.vz; \
}
#define DEFINE_func_8017E404() \
extern s32 func_8012BC60(struct Vec *a0, struct Vec *a1); \
extern s32 ratan2(s32, s32); \
extern void func_8012B0B4(SVEC *, s32, s32); \
extern s32 func_8012CEB0(s32 a0, s32 a1, s32 a2); \
extern void func_8012ADE4(u8 *a0); \
s32 func_8017E404(s32 param_1, s32 param_2) \
{ \
register s32 p1 __asm__("$16") = param_1; \
register s32 p2 __asm__("$17") = param_2; \
SVEC in; \
SVEC out; \
SVEC buf; \
s32 d; \
s32 ang; \
u16 px, pz; \
s32 a0v; \
a0v = p1 + 4; \
__asm__ __volatile__("" : : "r"(p2), "r"(a0v)); \
if (((s32 (*)(s32, s32))func_8012BC60)(a0v, p2 + 4) >= 0x1000) { \
return 0; \
} \
ang = ratan2((s32)*(s16 *)(p1 + 0xe) - (s32)*(s16 *)(p2 + 0xe), \
(s32)*(s16 *)(p2 + 6) - (s32)*(s16 *)(p1 + 6)); \
func_8012B0B4(&buf, (ang - 0x400) & 0xfff, 0x41); \
d = *(s32 *)&buf; \
px = *(u16 *)(p2 + 6); \
out.vx = px; \
out.vy = *(u16 *)(p2 + 0xa); \
pz = *(u16 *)(p2 + 0xe); \
out.vz = pz; \
out.vx = px + d; \
out.vz = pz + (d >> 16); \
in.vx = *(u16 *)(p1 + 0x3a); \
in.vy = *(u16 *)(p1 + 0x3e); \
in.vz = *(u16 *)(p1 + 0x42); \
if ((((s32 (*)(SVEC *, SVEC *, s32))func_8012CEB0)(&in, &out, 0) & 0x2000) == 0) { \
((void (*)(s32))func_8012ADE4)(p1); \
return 1; \
} \
*(s16 *)(p1 + 6) = out.vx; \
*(s16 *)(p1 + 0xa) = out.vy; \
*(s16 *)(p1 + 0xe) = out.vz; \
return 1; \
}
#endif