feat(decomp): free A-prop sibling lane (maintenance pass) — zero model tokens

This commit is contained in:
Drew T
2026-08-24 14:57:23 -06:00
parent 24bd259931
commit 3e9ef768b4
3 changed files with 197 additions and 3 deletions
+104 -1
View File
@@ -6368,7 +6368,110 @@ void func_8001D3FC(s32 arg0)
}
}
INCLUDE_ASM("asm/nonmatchings/800", func_8001D70C);
void func_8001D70C(s32 param_1)
{
s32 matrix[8]; /* sp+0x10 */
s16 sc[20]; /* sp+0x30 */
func_8004978C((s16 *)(param_1 + 0x10), (void *)matrix);
/* build the diagonal scale matrix at sp+0x30 */
sc[0] = *(u16 *)(param_1 + 0x18);
sc[1] = 0;
sc[2] = 0;
sc[3] = 0;
sc[4] = *(u16 *)(param_1 + 0x1A);
sc[5] = 0;
sc[6] = 0;
sc[7] = 0;
sc[8] = 0x1000;
__asm__ volatile (
"lw $12, 0(%0);"
"lw $13, 4(%0);"
"ctc2 $12, $0;"
"ctc2 $13, $1;"
"lw $12, 8(%0);"
"lw $13, 12(%0);"
"lw $14, 16(%0);"
"ctc2 $12, $2;"
"ctc2 $13, $3;"
"ctc2 $14, $4;"
"addiu $2, $sp, 0x30;"
"lhu $12, 0($2);"
"lhu $13, 6($2);"
"lhu $14, 12($2);"
"mtc2 $12, $9;"
"mtc2 $13, $10;"
"mtc2 $14, $11;"
"nop;"
"nop;"
"mvmva 1, 0, 3, 3, 0;"
"mfc2 $12, $9;"
"mfc2 $13, $10;"
"mfc2 $14, $11;"
"sh $12, 0(%0);"
"sh $13, 6(%0);"
"sh $14, 12(%0);"
"addiu $2, $sp, 0x32;"
"lhu $12, 0($2);"
"lhu $13, 6($2);"
"lhu $14, 12($2);"
"mtc2 $12, $9;"
"mtc2 $13, $10;"
"mtc2 $14, $11;"
"nop;"
"nop;"
"mvmva 1, 0, 3, 3, 0;"
"addiu $2, $sp, 0x12;"
"mfc2 $12, $9;"
"mfc2 $13, $10;"
"mfc2 $14, $11;"
"sh $12, 0($2);"
"sh $13, 6($2);"
"sh $14, 12($2);"
"addiu $2, $sp, 0x34;"
"lhu $12, 0($2);"
"lhu $13, 6($2);"
"lhu $14, 12($2);"
"mtc2 $12, $9;"
"mtc2 $13, $10;"
"mtc2 $14, $11;"
"nop;"
"nop;"
"mvmva 1, 0, 3, 3, 0;"
"addiu $2, $sp, 0x14;"
"mfc2 $12, $9;"
"mfc2 $13, $10;"
"mfc2 $14, $11;"
"sh $12, 0($2);"
"sh $13, 6($2);"
"sh $14, 12($2);"
: : "r"((s32)matrix) : "$12", "$13", "$14", "$2", "memory");
*(s32 *)((u8 *)matrix + 0x14) = *(s16 *)(param_1 + 8);
*(s32 *)((u8 *)matrix + 0x18) = *(s16 *)(param_1 + 10);
*(s32 *)((u8 *)matrix + 0x1C) = *(s16 *)(param_1 + 12);
__asm__ volatile (
"lw $12, 0(%0);"
"lw $13, 4(%0);"
"ctc2 $12, $0;"
"ctc2 $13, $1;"
"lw $12, 8(%0);"
"lw $13, 12(%0);"
"lw $14, 16(%0);"
"ctc2 $12, $2;"
"ctc2 $13, $3;"
"ctc2 $14, $4;"
"lw $12, 20(%0);"
"lw $13, 24(%0);"
"ctc2 $12, $5;"
"lw $14, 28(%0);"
"ctc2 $13, $6;"
"ctc2 $14, $7"
: : "r"((s32)matrix) : "$12", "$13", "$14", "$2");
}
/* ---- PsyQ GTE inline macros (same spelling as func_8001F730 / ov_SC03_* / 800.c gte_ldv0) ---- */
+63 -1
View File
@@ -563,7 +563,69 @@ __asm__(
".end\tfunc_80059FC0\n"
);
INCLUDE_ASM("asm/nonmatchings/800c", SYS_OBJ_E34);
__asm__(
".text\n"
".align\t2\n"
".globl\tSYS_OBJ_E34\n"
".ent\tSYS_OBJ_E34\n"
"SYS_OBJ_E34:\n"
".set\tnoreorder\n"
"or $4, $2, $3\n"
"lui $2, %hi(D_80072780)\n"
"lw $2, %lo(D_80072780)($2)\n"
"nop\n"
"lw $2, 16($2)\n"
"nop\n"
"jalr $2\n"
"nop\n"
"lui $2, %hi(D_800727FC)\n"
"addiu $2, $2, %lo(D_800727FC)\n"
"lhu $2, 0($2)\n"
"lh $3, 8($16)\n"
"sll $2, $2, 16\n"
"sra $2, $2, 16\n"
"bne $2, $3, .L8005A0FC\n"
"nop\n"
"lui $2, %hi(D_800727FE)\n"
"lhu $2, %lo(D_800727FE)($2)\n"
"lh $3, 10($16)\n"
"sll $2, $2, 16\n"
"sra $2, $2, 16\n"
"bne $2, $3, .L8005A0FC\n"
"nop\n"
"lui $2, %hi(D_80072800)\n"
"lhu $2, %lo(D_80072800)($2)\n"
"lh $3, 12($16)\n"
"sll $2, $2, 16\n"
"sra $2, $2, 16\n"
"bne $2, $3, .L8005A0FC\n"
"nop\n"
"lui $2, %hi(D_80072802)\n"
"lhu $2, %lo(D_80072802)($2)\n"
"lh $3, 14($16)\n"
"sll $2, $2, 16\n"
"sra $2, $2, 16\n"
"beq $2, $3, .L8005A2C4\n"
"nop\n"
".L8005A0FC:\n"
"jal func_80043078\n"
"nop\n"
"lh $4, 8($16)\n"
"sb $2, 18($16)\n"
"andi $2, $2, 0xFF\n"
"sll $3, $4, 2\n"
"addu $3, $3, $4\n"
"sll $3, $3, 1\n"
"lh $4, 10($16)\n"
"beqz $2, .L8005A130\n"
"addiu $3, $3, 0x260\n"
"j SYS_OBJ_F00\n"
"addiu $17, $4, 0x13\n"
".L8005A130:\n"
"addiu $17, $4, 0x10\n"
".set\treorder\n"
".end\tSYS_OBJ_E34\n"
);
INCLUDE_ASM("asm/nonmatchings/800c", SYS_OBJ_F00);
+30 -1
View File
@@ -4927,7 +4927,36 @@ void func_8017F10C(s32 a0) {
INCLUDE_ASM("asm/ov_SC07_010/nonmatchings/ov_SC07_010_jr_8017AE2C", func_8017F1CC);
INCLUDE_ASM("asm/ov_SC07_010/nonmatchings/ov_SC07_010_jr_8017AE2C", func_8017F214);
extern s32 func_8012AD50(void*);
extern void func_8017DCB8(s32 a0);
extern void func_8017F2BC(void);
void func_8017F214(s32 a0) {
u8 *s0;
u16 val16;
s0 = *(u8 **)(a0 + 0x20);
func_8017F2BC();
val16 = *(u16 *)(s0 + 0x18);
val16 += 0x80;
*(u16 *)(s0 + 0x18) = val16;
{
s16 temp = (s16)val16;
if (temp >= 0x4001) {
*(u16 *)(s0 + 0x18) = 0x4000;
}
}
*(u16 *)(s0 + 0x1A) = *(u16 *)(s0 + 0x18);
if (*(s16 *)(s0 + 0x18) == 0x4000) {
func_8017DCB8(0x5);
((void (*)(s32))func_8012AD50)(a0);
}
}
extern void func_8017F2BC();
void func_8017F29C(void) {