feat(decomp): serial idiom lane — func_8017FA84 (115 ins, extend-tell, group worth 563)

This commit is contained in:
Drew T
2026-08-25 19:28:40 -06:00
parent 8541238e60
commit 76b34fb7bd
+40 -1
View File
@@ -3713,7 +3713,46 @@ void func_8017FA2C(s32 a0)
}
INCLUDE_ASM("asm/ov_SC03_029/nonmatchings/ov_SC03_029_jr_8017DC70", func_8017FA84);
extern s32 func_80012C6C(s32, s32, s32);
extern s16 func_80012ABC(s16 a0, s16 a1, s32 a2);
extern void func_80187478(u16*, s16*);
extern void ApplyMatrixSV(void *m, void *vin, void *vout);
void func_8017FA84(s32 a0, s16* a1, u32 a2)
{
s32 sp10[8];
s16 sp30[3];
u16 sp38[3];
u16 sp40[3];
*(s32 *)((s32)a0 + 0x08) = ((s16 (*)(s16, s16, s32))func_80012C6C)(*(s16 *)((s32)a0 + 0x08), *(s16 *)((s32)a0 + 0x0C), 4);
*(s32 *)((s32)a0 + 0x10) = ((s16 (*)(s16, s16, s32))func_80012C6C)(*(s16 *)((s32)a0 + 0x10), *(s16 *)((s32)a0 + 0x14), 4);
*(s16 *)((s32)a0 + 0x18) = func_80012ABC(*(s16 *)((s32)a0 + 0x18), *(s16 *)((s32)a0 + 0x20), 4);
*(s16 *)((s32)a0 + 0x1A) = func_80012ABC(*(s16 *)((s32)a0 + 0x1A), *(s16 *)((s32)a0 + 0x22), 4);
*(s16 *)((s32)a0 + 0x1C) = func_80012ABC(*(s16 *)((s32)a0 + 0x1C), *(s16 *)((s32)a0 + 0x24), 4);
*(s16 *)((s32)a0 + 0x28) = ((s16 (*)(s16, s16, s32))func_80012C6C)(*(s16 *)((s32)a0 + 0x28), *(s16 *)((s32)a0 + 0x2E), 0x10);
*(s16 *)((s32)a0 + 0x2A) = ((s16 (*)(s16, s16, s32))func_80012C6C)(*(s16 *)((s32)a0 + 0x2A), *(s16 *)((s32)a0 + 0x30), 0x10);
*(s16 *)((s32)a0 + 0x2C) = ((s16 (*)(s16, s16, s32))func_80012C6C)(*(s16 *)((s32)a0 + 0x2C), *(s16 *)((s32)a0 + 0x32), 0x10);
*(s32 *)((s32)a0 + 0x48) = *(s16 *)((s32)a0 + 0x28) + *(s16 *)((s32)a1 + 0);
*(s32 *)((s32)a0 + 0x4C) = *(s16 *)((s32)a0 + 0x2A) + *(s16 *)((s32)a1 + 2);
*(s32 *)((s32)a0 + 0x50) = *(s16 *)((s32)a0 + 0x2C) + *(s16 *)((s32)a1 + 4);
sp40[0] = *(u16 *)((s32)a0 + 0x18);
sp40[1] = *(u16 *)((s32)a0 + 0x1A) + a2;
sp40[2] = *(u16 *)((s32)a0 + 0x1C);
((void (*)(u16 *, void *))func_80187478)(sp40, sp10);
sp30[0] = 0;
sp30[1] = 0;
sp30[2] = *(s32 *)((s32)a0 + 0x10);
ApplyMatrixSV(sp10, sp30, sp38);
*(s32 *)((s32)a0 + 0x3C) = ((s16)sp38[0] >> 3) + *(s16 *)((s32)a0 + 0x28) + *(s16 *)((s32)a1 + 0);
*(s32 *)((s32)a0 + 0x40) = ((s16)sp38[1] >> 3) + *(s16 *)((s32)a0 + 0x2A) + *(s16 *)((s32)a1 + 2);
*(s32 *)((s32)a0 + 0x44) = ((s16)sp38[2] >> 3) + *(s16 *)((s32)a0 + 0x2C) + *(s16 *)((s32)a1 + 4);
}
extern void (*D_8018B754[])(void *);
extern void (*D_8018B768[])(void *);