mirror of
https://github.com/Druthulu/BFM-decomp
synced 2026-10-07 09:27:55 -04:00
feat(phase-29 crack-wave): func_801670E4 partial sweep (4 members; 133 blocked on def-sig)
This commit is contained in:
@@ -9140,7 +9140,178 @@ INCLUDE_ASM("asm/ov_SC07_006/nonmatchings/ov_SC07_006_jr_8013F350", func_80166F5
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC07_006/nonmatchings/ov_SC07_006_jr_8013F350", func_8016706C);
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC07_006/nonmatchings/ov_SC07_006_jr_8013F350", func_801670E4);
|
||||
|
||||
// @class: schedule
|
||||
// @stuck: 16/279 masked. 3 runs, ONE residual class: gcc's list-scheduler puts `la $s2` (p=DATA) + `addu $s4,$zero,$zero` (i=0) BEFORE the callee-arg address setup (addiu $a1,$sp,0x10 / addu $a2,$a1,$zero); the target emits them AFTER. Inert to ~40 statement-order permutations + pin/barrier combos (sched priority dominates the LUID tie-break, sched.c rank_for_schedule). Runs: 19-24 (blk1), 111-114 (region-B cx-load rotation), 177-182 (blk3). Permuter fuel.
|
||||
|
||||
|
||||
|
||||
|
||||
extern void func_80149350(s32);
|
||||
extern void func_800D20C0(void *a0, void *a1, s32 a2);
|
||||
extern void func_80017E68(void *a0, void *a1);
|
||||
extern void func_800D23D0(void *a0);
|
||||
extern void RotMatrixYXZ(void *a0, void *a1);
|
||||
extern s32 func_80017758(void *a0, void *a1);
|
||||
extern s32 func_80017DC4(void *a0, void *a1);
|
||||
extern void func_80048EAC(void *a0, void *a1);
|
||||
|
||||
|
||||
s32 func_801670E4(s32 arg0, s32 arg1, s32 arg2, s32 arg3) {
|
||||
|
||||
extern u8 D_8018D310[];
|
||||
extern u8 D_8018D2FC[];
|
||||
extern u8 D_8018D324[];
|
||||
extern s32 D_801269A4;
|
||||
extern s32 D_801269A8;
|
||||
extern s32 D_801269AC;
|
||||
extern u16 D_80126CE0;
|
||||
Fr_801670E4 f;
|
||||
register u8 *p __asm__("$18"); /* $s2 */
|
||||
register s32 ent __asm__("$19"); /* $s3 */
|
||||
s16 i;
|
||||
s32 d;
|
||||
s32 node;
|
||||
u16 c;
|
||||
u8 cv;
|
||||
u8 cv2;
|
||||
register s32 gA __asm__("$2");
|
||||
register s32 cxv __asm__("$4");
|
||||
register s32 czv __asm__("$5");
|
||||
u8 *vc;
|
||||
u8 *ap;
|
||||
u8 *mp;
|
||||
u8 *va;
|
||||
u8 *vb;
|
||||
|
||||
ent = arg0;
|
||||
node = *(s32 *)(ent + 0x34);
|
||||
f.v[1].z = 0;
|
||||
f.v[1].y = 0;
|
||||
f.v[1].x = 0;
|
||||
f.v[3].z = 0;
|
||||
f.v[2].z = 0;
|
||||
f.v[0].z = 0;
|
||||
f.col[1].b = 0x70;
|
||||
cv = *(u8 *)(ent + 0x12);
|
||||
f.cx = arg1;
|
||||
__asm__ __volatile__("");
|
||||
va = (u8 *)&f.cx;
|
||||
__asm__ __volatile__("" : "=r"(va) : "0"(va));
|
||||
f.cy = arg2;
|
||||
vb = va;
|
||||
__asm__ __volatile__("" : "=r"(vb) : "0"(vb));
|
||||
p = D_8018D310;
|
||||
i = 0;
|
||||
f.col[0].b = 0;
|
||||
f.col[0].g = 0;
|
||||
f.col[0].r = 0;
|
||||
f.col[2].b = 0;
|
||||
f.col[2].g = 0;
|
||||
f.col[2].r = 0;
|
||||
f.col[3].b = 0;
|
||||
f.col[3].g = 0;
|
||||
f.col[3].r = 0;
|
||||
f.code = 0x50000000;
|
||||
f.cz = arg3;
|
||||
f.col[1].r = cv;
|
||||
f.col[1].g = cv;
|
||||
((void (*)(s32, void *, void *))func_80149350)(node, va, vb);
|
||||
|
||||
c = f.cx;
|
||||
*(s16 *)(ent + 0x06) = c;
|
||||
*(s32 *)(ent + 0x4C) = (s16)c;
|
||||
c = f.cy;
|
||||
*(s16 *)(ent + 0x0A) = c;
|
||||
*(s32 *)(ent + 0x50) = (s16)c;
|
||||
c = f.cz;
|
||||
*(s16 *)(ent + 0x0E) = c;
|
||||
*(s32 *)(ent + 0x54) = (s16)c;
|
||||
func_800D20C0(&f.cx, f.a8, 7);
|
||||
func_80017E68(&f.cx, f.m1);
|
||||
func_800D23D0(f.a8);
|
||||
RotMatrixYXZ(f.a8, f.m1);
|
||||
|
||||
do {
|
||||
f.v[0].x = (s8)*p++;
|
||||
f.v[0].y = (s8)*p++;
|
||||
f.v[2].x = (s8)*p++;
|
||||
f.v[2].y = (s8)*p++;
|
||||
f.v[3].x = (s8)*p++;
|
||||
f.v[3].y = (s8)*p--;
|
||||
func_80017758(f.v, f.m1);
|
||||
} while ((i = i + 1) < 4);
|
||||
|
||||
p = D_8018D2FC;
|
||||
gA = 0xA0;
|
||||
cxv = (s16)f.cx;
|
||||
f.col[1].g = gA;
|
||||
gA = D_801269A4;
|
||||
czv = (s16)f.cz;
|
||||
f.col[1].b = 0x10;
|
||||
f.col[1].r = 0x10;
|
||||
f.pos[0] = gA - cxv;
|
||||
i = 0;
|
||||
f.v[3].y = 0;
|
||||
f.v[2].y = 0;
|
||||
f.v[0].y = 0;
|
||||
f.pos[1] = D_801269A8 - (s16)f.cy;
|
||||
f.pos[2] = D_801269AC - czv;
|
||||
|
||||
do {
|
||||
f.v[0].x = (s8)*p++;
|
||||
f.v[0].z = (s8)*p++;
|
||||
f.v[2].x = (s8)*p++;
|
||||
f.v[2].z = (s8)*p++;
|
||||
f.v[3].x = (s8)*p++;
|
||||
f.v[3].z = (s8)*p--;
|
||||
func_80017758(f.v, (void *)(ent + 0x38));
|
||||
} while ((i = i + 1) < 4);
|
||||
|
||||
if (*(s32 *)(ent + 0x30) > 0) {
|
||||
vc = (u8 *)&f.cx;
|
||||
__asm__ __volatile__("" : "=r"(vc) : "0"(vc));
|
||||
mp = f.m1;
|
||||
ap = mp;
|
||||
__asm__ __volatile__("" : "=r"(ap) : "0"(ap));
|
||||
p = D_8018D324;
|
||||
i = 0;
|
||||
d = (s16)f.a8[0] >> 6;
|
||||
f.cx += d;
|
||||
f.cy += d;
|
||||
f.cz += d;
|
||||
func_80017E68(vc, ap);
|
||||
f.cx = f.cy = f.cz = ((u32)*(s32 *)(ent + 0x30) >> 1) + D_80126CE0 * 0x20;
|
||||
func_80017DC4(&f.cx, f.m2);
|
||||
func_80048EAC(f.m2, mp);
|
||||
f.v[3].z = 0;
|
||||
f.v[2].z = 0;
|
||||
f.v[0].z = 0;
|
||||
cv2 = *(u8 *)(ent + 0x12);
|
||||
f.col[1].b = 0x20;
|
||||
f.col[1].r = 0x20;
|
||||
f.col[3].b = 0;
|
||||
f.col[3].r = 0;
|
||||
f.col[2].b = 0;
|
||||
f.col[2].r = 0;
|
||||
f.col[0].b = 0;
|
||||
f.col[0].r = 0;
|
||||
f.col[3].g = 0;
|
||||
f.col[2].g = 0;
|
||||
f.col[0].g = 0;
|
||||
f.col[1].g = cv2 + 0x60;
|
||||
do {
|
||||
f.v[0].x = (s8)*p++;
|
||||
f.v[0].y = (s8)*p++;
|
||||
f.v[2].x = (s8)*p++;
|
||||
f.v[2].y = (s8)*p++;
|
||||
f.v[3].x = (s8)*p++;
|
||||
f.v[3].y = (s8)*p--;
|
||||
func_80017758(f.v, f.m1);
|
||||
} while ((i = i + 1) < 8);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC07_006/nonmatchings/ov_SC07_006_jr_8013F350", func_80167540);
|
||||
|
||||
|
||||
@@ -9140,7 +9140,178 @@ INCLUDE_ASM("asm/ov_SC07_007/nonmatchings/ov_SC07_007_jr_8013F350", func_80166F5
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC07_007/nonmatchings/ov_SC07_007_jr_8013F350", func_8016706C);
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC07_007/nonmatchings/ov_SC07_007_jr_8013F350", func_801670E4);
|
||||
|
||||
// @class: schedule
|
||||
// @stuck: 16/279 masked. 3 runs, ONE residual class: gcc's list-scheduler puts `la $s2` (p=DATA) + `addu $s4,$zero,$zero` (i=0) BEFORE the callee-arg address setup (addiu $a1,$sp,0x10 / addu $a2,$a1,$zero); the target emits them AFTER. Inert to ~40 statement-order permutations + pin/barrier combos (sched priority dominates the LUID tie-break, sched.c rank_for_schedule). Runs: 19-24 (blk1), 111-114 (region-B cx-load rotation), 177-182 (blk3). Permuter fuel.
|
||||
|
||||
|
||||
|
||||
|
||||
extern void func_80149350(s32);
|
||||
extern void func_800D20C0(void *a0, void *a1, s32 a2);
|
||||
extern void func_80017E68(void *a0, void *a1);
|
||||
extern void func_800D23D0(void *a0);
|
||||
extern void RotMatrixYXZ(void *a0, void *a1);
|
||||
extern s32 func_80017758(void *a0, void *a1);
|
||||
extern s32 func_80017DC4(void *a0, void *a1);
|
||||
extern void func_80048EAC(void *a0, void *a1);
|
||||
|
||||
|
||||
s32 func_801670E4(s32 arg0, s32 arg1, s32 arg2, s32 arg3) {
|
||||
|
||||
extern u8 D_80185E34[];
|
||||
extern u8 D_80185E20[];
|
||||
extern u8 D_80185E48[];
|
||||
extern s32 D_801269A4;
|
||||
extern s32 D_801269A8;
|
||||
extern s32 D_801269AC;
|
||||
extern u16 D_80126CE0;
|
||||
Fr_801670E4 f;
|
||||
register u8 *p __asm__("$18"); /* $s2 */
|
||||
register s32 ent __asm__("$19"); /* $s3 */
|
||||
s16 i;
|
||||
s32 d;
|
||||
s32 node;
|
||||
u16 c;
|
||||
u8 cv;
|
||||
u8 cv2;
|
||||
register s32 gA __asm__("$2");
|
||||
register s32 cxv __asm__("$4");
|
||||
register s32 czv __asm__("$5");
|
||||
u8 *vc;
|
||||
u8 *ap;
|
||||
u8 *mp;
|
||||
u8 *va;
|
||||
u8 *vb;
|
||||
|
||||
ent = arg0;
|
||||
node = *(s32 *)(ent + 0x34);
|
||||
f.v[1].z = 0;
|
||||
f.v[1].y = 0;
|
||||
f.v[1].x = 0;
|
||||
f.v[3].z = 0;
|
||||
f.v[2].z = 0;
|
||||
f.v[0].z = 0;
|
||||
f.col[1].b = 0x70;
|
||||
cv = *(u8 *)(ent + 0x12);
|
||||
f.cx = arg1;
|
||||
__asm__ __volatile__("");
|
||||
va = (u8 *)&f.cx;
|
||||
__asm__ __volatile__("" : "=r"(va) : "0"(va));
|
||||
f.cy = arg2;
|
||||
vb = va;
|
||||
__asm__ __volatile__("" : "=r"(vb) : "0"(vb));
|
||||
p = D_80185E34;
|
||||
i = 0;
|
||||
f.col[0].b = 0;
|
||||
f.col[0].g = 0;
|
||||
f.col[0].r = 0;
|
||||
f.col[2].b = 0;
|
||||
f.col[2].g = 0;
|
||||
f.col[2].r = 0;
|
||||
f.col[3].b = 0;
|
||||
f.col[3].g = 0;
|
||||
f.col[3].r = 0;
|
||||
f.code = 0x50000000;
|
||||
f.cz = arg3;
|
||||
f.col[1].r = cv;
|
||||
f.col[1].g = cv;
|
||||
((void (*)(s32, void *, void *))func_80149350)(node, va, vb);
|
||||
|
||||
c = f.cx;
|
||||
*(s16 *)(ent + 0x06) = c;
|
||||
*(s32 *)(ent + 0x4C) = (s16)c;
|
||||
c = f.cy;
|
||||
*(s16 *)(ent + 0x0A) = c;
|
||||
*(s32 *)(ent + 0x50) = (s16)c;
|
||||
c = f.cz;
|
||||
*(s16 *)(ent + 0x0E) = c;
|
||||
*(s32 *)(ent + 0x54) = (s16)c;
|
||||
func_800D20C0(&f.cx, f.a8, 7);
|
||||
func_80017E68(&f.cx, f.m1);
|
||||
func_800D23D0(f.a8);
|
||||
RotMatrixYXZ(f.a8, f.m1);
|
||||
|
||||
do {
|
||||
f.v[0].x = (s8)*p++;
|
||||
f.v[0].y = (s8)*p++;
|
||||
f.v[2].x = (s8)*p++;
|
||||
f.v[2].y = (s8)*p++;
|
||||
f.v[3].x = (s8)*p++;
|
||||
f.v[3].y = (s8)*p--;
|
||||
func_80017758(f.v, f.m1);
|
||||
} while ((i = i + 1) < 4);
|
||||
|
||||
p = D_80185E20;
|
||||
gA = 0xA0;
|
||||
cxv = (s16)f.cx;
|
||||
f.col[1].g = gA;
|
||||
gA = D_801269A4;
|
||||
czv = (s16)f.cz;
|
||||
f.col[1].b = 0x10;
|
||||
f.col[1].r = 0x10;
|
||||
f.pos[0] = gA - cxv;
|
||||
i = 0;
|
||||
f.v[3].y = 0;
|
||||
f.v[2].y = 0;
|
||||
f.v[0].y = 0;
|
||||
f.pos[1] = D_801269A8 - (s16)f.cy;
|
||||
f.pos[2] = D_801269AC - czv;
|
||||
|
||||
do {
|
||||
f.v[0].x = (s8)*p++;
|
||||
f.v[0].z = (s8)*p++;
|
||||
f.v[2].x = (s8)*p++;
|
||||
f.v[2].z = (s8)*p++;
|
||||
f.v[3].x = (s8)*p++;
|
||||
f.v[3].z = (s8)*p--;
|
||||
func_80017758(f.v, (void *)(ent + 0x38));
|
||||
} while ((i = i + 1) < 4);
|
||||
|
||||
if (*(s32 *)(ent + 0x30) > 0) {
|
||||
vc = (u8 *)&f.cx;
|
||||
__asm__ __volatile__("" : "=r"(vc) : "0"(vc));
|
||||
mp = f.m1;
|
||||
ap = mp;
|
||||
__asm__ __volatile__("" : "=r"(ap) : "0"(ap));
|
||||
p = D_80185E48;
|
||||
i = 0;
|
||||
d = (s16)f.a8[0] >> 6;
|
||||
f.cx += d;
|
||||
f.cy += d;
|
||||
f.cz += d;
|
||||
func_80017E68(vc, ap);
|
||||
f.cx = f.cy = f.cz = ((u32)*(s32 *)(ent + 0x30) >> 1) + D_80126CE0 * 0x20;
|
||||
func_80017DC4(&f.cx, f.m2);
|
||||
func_80048EAC(f.m2, mp);
|
||||
f.v[3].z = 0;
|
||||
f.v[2].z = 0;
|
||||
f.v[0].z = 0;
|
||||
cv2 = *(u8 *)(ent + 0x12);
|
||||
f.col[1].b = 0x20;
|
||||
f.col[1].r = 0x20;
|
||||
f.col[3].b = 0;
|
||||
f.col[3].r = 0;
|
||||
f.col[2].b = 0;
|
||||
f.col[2].r = 0;
|
||||
f.col[0].b = 0;
|
||||
f.col[0].r = 0;
|
||||
f.col[3].g = 0;
|
||||
f.col[2].g = 0;
|
||||
f.col[0].g = 0;
|
||||
f.col[1].g = cv2 + 0x60;
|
||||
do {
|
||||
f.v[0].x = (s8)*p++;
|
||||
f.v[0].y = (s8)*p++;
|
||||
f.v[2].x = (s8)*p++;
|
||||
f.v[2].y = (s8)*p++;
|
||||
f.v[3].x = (s8)*p++;
|
||||
f.v[3].y = (s8)*p--;
|
||||
func_80017758(f.v, f.m1);
|
||||
} while ((i = i + 1) < 8);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC07_007/nonmatchings/ov_SC07_007_jr_8013F350", func_80167540);
|
||||
|
||||
|
||||
@@ -9875,7 +9875,178 @@ INCLUDE_ASM("asm/ov_SC07_010/nonmatchings/ov_SC07_010_o2b", func_80166F58);
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC07_010/nonmatchings/ov_SC07_010_o2b", func_8016706C);
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC07_010/nonmatchings/ov_SC07_010_o2b", func_801670E4);
|
||||
|
||||
// @class: schedule
|
||||
// @stuck: 16/279 masked. 3 runs, ONE residual class: gcc's list-scheduler puts `la $s2` (p=DATA) + `addu $s4,$zero,$zero` (i=0) BEFORE the callee-arg address setup (addiu $a1,$sp,0x10 / addu $a2,$a1,$zero); the target emits them AFTER. Inert to ~40 statement-order permutations + pin/barrier combos (sched priority dominates the LUID tie-break, sched.c rank_for_schedule). Runs: 19-24 (blk1), 111-114 (region-B cx-load rotation), 177-182 (blk3). Permuter fuel.
|
||||
|
||||
|
||||
|
||||
|
||||
extern void func_80149350(s32);
|
||||
extern void func_800D20C0(void *a0, void *a1, s32 a2);
|
||||
extern void func_80017E68(void *a0, void *a1);
|
||||
extern void func_800D23D0(void *a0);
|
||||
extern void RotMatrixYXZ(void *a0, void *a1);
|
||||
extern s32 func_80017758(void *a0, void *a1);
|
||||
extern s32 func_80017DC4(void *a0, void *a1);
|
||||
extern void func_80048EAC(void *a0, void *a1);
|
||||
|
||||
|
||||
s32 func_801670E4(s32 arg0, s32 arg1, s32 arg2, s32 arg3) {
|
||||
|
||||
extern u8 D_80184EC4[];
|
||||
extern u8 D_80184EB0[];
|
||||
extern u8 D_80184ED8[];
|
||||
extern s32 D_801269A4;
|
||||
extern s32 D_801269A8;
|
||||
extern s32 D_801269AC;
|
||||
extern u16 D_80126CE0;
|
||||
Fr_801670E4 f;
|
||||
register u8 *p __asm__("$18"); /* $s2 */
|
||||
register s32 ent __asm__("$19"); /* $s3 */
|
||||
s16 i;
|
||||
s32 d;
|
||||
s32 node;
|
||||
u16 c;
|
||||
u8 cv;
|
||||
u8 cv2;
|
||||
register s32 gA __asm__("$2");
|
||||
register s32 cxv __asm__("$4");
|
||||
register s32 czv __asm__("$5");
|
||||
u8 *vc;
|
||||
u8 *ap;
|
||||
u8 *mp;
|
||||
u8 *va;
|
||||
u8 *vb;
|
||||
|
||||
ent = arg0;
|
||||
node = *(s32 *)(ent + 0x34);
|
||||
f.v[1].z = 0;
|
||||
f.v[1].y = 0;
|
||||
f.v[1].x = 0;
|
||||
f.v[3].z = 0;
|
||||
f.v[2].z = 0;
|
||||
f.v[0].z = 0;
|
||||
f.col[1].b = 0x70;
|
||||
cv = *(u8 *)(ent + 0x12);
|
||||
f.cx = arg1;
|
||||
__asm__ __volatile__("");
|
||||
va = (u8 *)&f.cx;
|
||||
__asm__ __volatile__("" : "=r"(va) : "0"(va));
|
||||
f.cy = arg2;
|
||||
vb = va;
|
||||
__asm__ __volatile__("" : "=r"(vb) : "0"(vb));
|
||||
p = D_80184EC4;
|
||||
i = 0;
|
||||
f.col[0].b = 0;
|
||||
f.col[0].g = 0;
|
||||
f.col[0].r = 0;
|
||||
f.col[2].b = 0;
|
||||
f.col[2].g = 0;
|
||||
f.col[2].r = 0;
|
||||
f.col[3].b = 0;
|
||||
f.col[3].g = 0;
|
||||
f.col[3].r = 0;
|
||||
f.code = 0x50000000;
|
||||
f.cz = arg3;
|
||||
f.col[1].r = cv;
|
||||
f.col[1].g = cv;
|
||||
((void (*)(s32, void *, void *))func_80149350)(node, va, vb);
|
||||
|
||||
c = f.cx;
|
||||
*(s16 *)(ent + 0x06) = c;
|
||||
*(s32 *)(ent + 0x4C) = (s16)c;
|
||||
c = f.cy;
|
||||
*(s16 *)(ent + 0x0A) = c;
|
||||
*(s32 *)(ent + 0x50) = (s16)c;
|
||||
c = f.cz;
|
||||
*(s16 *)(ent + 0x0E) = c;
|
||||
*(s32 *)(ent + 0x54) = (s16)c;
|
||||
func_800D20C0(&f.cx, f.a8, 7);
|
||||
func_80017E68(&f.cx, f.m1);
|
||||
func_800D23D0(f.a8);
|
||||
RotMatrixYXZ(f.a8, f.m1);
|
||||
|
||||
do {
|
||||
f.v[0].x = (s8)*p++;
|
||||
f.v[0].y = (s8)*p++;
|
||||
f.v[2].x = (s8)*p++;
|
||||
f.v[2].y = (s8)*p++;
|
||||
f.v[3].x = (s8)*p++;
|
||||
f.v[3].y = (s8)*p--;
|
||||
func_80017758(f.v, f.m1);
|
||||
} while ((i = i + 1) < 4);
|
||||
|
||||
p = D_80184EB0;
|
||||
gA = 0xA0;
|
||||
cxv = (s16)f.cx;
|
||||
f.col[1].g = gA;
|
||||
gA = D_801269A4;
|
||||
czv = (s16)f.cz;
|
||||
f.col[1].b = 0x10;
|
||||
f.col[1].r = 0x10;
|
||||
f.pos[0] = gA - cxv;
|
||||
i = 0;
|
||||
f.v[3].y = 0;
|
||||
f.v[2].y = 0;
|
||||
f.v[0].y = 0;
|
||||
f.pos[1] = D_801269A8 - (s16)f.cy;
|
||||
f.pos[2] = D_801269AC - czv;
|
||||
|
||||
do {
|
||||
f.v[0].x = (s8)*p++;
|
||||
f.v[0].z = (s8)*p++;
|
||||
f.v[2].x = (s8)*p++;
|
||||
f.v[2].z = (s8)*p++;
|
||||
f.v[3].x = (s8)*p++;
|
||||
f.v[3].z = (s8)*p--;
|
||||
func_80017758(f.v, (void *)(ent + 0x38));
|
||||
} while ((i = i + 1) < 4);
|
||||
|
||||
if (*(s32 *)(ent + 0x30) > 0) {
|
||||
vc = (u8 *)&f.cx;
|
||||
__asm__ __volatile__("" : "=r"(vc) : "0"(vc));
|
||||
mp = f.m1;
|
||||
ap = mp;
|
||||
__asm__ __volatile__("" : "=r"(ap) : "0"(ap));
|
||||
p = D_80184ED8;
|
||||
i = 0;
|
||||
d = (s16)f.a8[0] >> 6;
|
||||
f.cx += d;
|
||||
f.cy += d;
|
||||
f.cz += d;
|
||||
func_80017E68(vc, ap);
|
||||
f.cx = f.cy = f.cz = ((u32)*(s32 *)(ent + 0x30) >> 1) + D_80126CE0 * 0x20;
|
||||
func_80017DC4(&f.cx, f.m2);
|
||||
func_80048EAC(f.m2, mp);
|
||||
f.v[3].z = 0;
|
||||
f.v[2].z = 0;
|
||||
f.v[0].z = 0;
|
||||
cv2 = *(u8 *)(ent + 0x12);
|
||||
f.col[1].b = 0x20;
|
||||
f.col[1].r = 0x20;
|
||||
f.col[3].b = 0;
|
||||
f.col[3].r = 0;
|
||||
f.col[2].b = 0;
|
||||
f.col[2].r = 0;
|
||||
f.col[0].b = 0;
|
||||
f.col[0].r = 0;
|
||||
f.col[3].g = 0;
|
||||
f.col[2].g = 0;
|
||||
f.col[0].g = 0;
|
||||
f.col[1].g = cv2 + 0x60;
|
||||
do {
|
||||
f.v[0].x = (s8)*p++;
|
||||
f.v[0].y = (s8)*p++;
|
||||
f.v[2].x = (s8)*p++;
|
||||
f.v[2].y = (s8)*p++;
|
||||
f.v[3].x = (s8)*p++;
|
||||
f.v[3].y = (s8)*p--;
|
||||
func_80017758(f.v, f.m1);
|
||||
} while ((i = i + 1) < 8);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC07_010/nonmatchings/ov_SC07_010_o2b", func_80167540);
|
||||
|
||||
|
||||
@@ -9136,7 +9136,178 @@ INCLUDE_ASM("asm/ov_SC07_011/nonmatchings/ov_SC07_011_jr_8013F350", func_80166F5
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC07_011/nonmatchings/ov_SC07_011_jr_8013F350", func_8016706C);
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC07_011/nonmatchings/ov_SC07_011_jr_8013F350", func_801670E4);
|
||||
|
||||
// @class: schedule
|
||||
// @stuck: 16/279 masked. 3 runs, ONE residual class: gcc's list-scheduler puts `la $s2` (p=DATA) + `addu $s4,$zero,$zero` (i=0) BEFORE the callee-arg address setup (addiu $a1,$sp,0x10 / addu $a2,$a1,$zero); the target emits them AFTER. Inert to ~40 statement-order permutations + pin/barrier combos (sched priority dominates the LUID tie-break, sched.c rank_for_schedule). Runs: 19-24 (blk1), 111-114 (region-B cx-load rotation), 177-182 (blk3). Permuter fuel.
|
||||
|
||||
|
||||
|
||||
|
||||
extern void func_80149350(s32);
|
||||
extern void func_800D20C0(void *a0, void *a1, s32 a2);
|
||||
extern void func_80017E68(void *a0, void *a1);
|
||||
extern void func_800D23D0(void *a0);
|
||||
extern void RotMatrixYXZ(void *a0, void *a1);
|
||||
extern s32 func_80017758(void *a0, void *a1);
|
||||
extern s32 func_80017DC4(void *a0, void *a1);
|
||||
extern void func_80048EAC(void *a0, void *a1);
|
||||
|
||||
|
||||
s32 func_801670E4(s32 arg0, s32 arg1, s32 arg2, s32 arg3) {
|
||||
|
||||
extern u8 D_80181584[];
|
||||
extern u8 D_80181570[];
|
||||
extern u8 D_80181598[];
|
||||
extern s32 D_801269A4;
|
||||
extern s32 D_801269A8;
|
||||
extern s32 D_801269AC;
|
||||
extern u16 D_80126CE0;
|
||||
Fr_801670E4 f;
|
||||
register u8 *p __asm__("$18"); /* $s2 */
|
||||
register s32 ent __asm__("$19"); /* $s3 */
|
||||
s16 i;
|
||||
s32 d;
|
||||
s32 node;
|
||||
u16 c;
|
||||
u8 cv;
|
||||
u8 cv2;
|
||||
register s32 gA __asm__("$2");
|
||||
register s32 cxv __asm__("$4");
|
||||
register s32 czv __asm__("$5");
|
||||
u8 *vc;
|
||||
u8 *ap;
|
||||
u8 *mp;
|
||||
u8 *va;
|
||||
u8 *vb;
|
||||
|
||||
ent = arg0;
|
||||
node = *(s32 *)(ent + 0x34);
|
||||
f.v[1].z = 0;
|
||||
f.v[1].y = 0;
|
||||
f.v[1].x = 0;
|
||||
f.v[3].z = 0;
|
||||
f.v[2].z = 0;
|
||||
f.v[0].z = 0;
|
||||
f.col[1].b = 0x70;
|
||||
cv = *(u8 *)(ent + 0x12);
|
||||
f.cx = arg1;
|
||||
__asm__ __volatile__("");
|
||||
va = (u8 *)&f.cx;
|
||||
__asm__ __volatile__("" : "=r"(va) : "0"(va));
|
||||
f.cy = arg2;
|
||||
vb = va;
|
||||
__asm__ __volatile__("" : "=r"(vb) : "0"(vb));
|
||||
p = D_80181584;
|
||||
i = 0;
|
||||
f.col[0].b = 0;
|
||||
f.col[0].g = 0;
|
||||
f.col[0].r = 0;
|
||||
f.col[2].b = 0;
|
||||
f.col[2].g = 0;
|
||||
f.col[2].r = 0;
|
||||
f.col[3].b = 0;
|
||||
f.col[3].g = 0;
|
||||
f.col[3].r = 0;
|
||||
f.code = 0x50000000;
|
||||
f.cz = arg3;
|
||||
f.col[1].r = cv;
|
||||
f.col[1].g = cv;
|
||||
((void (*)(s32, void *, void *))func_80149350)(node, va, vb);
|
||||
|
||||
c = f.cx;
|
||||
*(s16 *)(ent + 0x06) = c;
|
||||
*(s32 *)(ent + 0x4C) = (s16)c;
|
||||
c = f.cy;
|
||||
*(s16 *)(ent + 0x0A) = c;
|
||||
*(s32 *)(ent + 0x50) = (s16)c;
|
||||
c = f.cz;
|
||||
*(s16 *)(ent + 0x0E) = c;
|
||||
*(s32 *)(ent + 0x54) = (s16)c;
|
||||
func_800D20C0(&f.cx, f.a8, 7);
|
||||
func_80017E68(&f.cx, f.m1);
|
||||
func_800D23D0(f.a8);
|
||||
RotMatrixYXZ(f.a8, f.m1);
|
||||
|
||||
do {
|
||||
f.v[0].x = (s8)*p++;
|
||||
f.v[0].y = (s8)*p++;
|
||||
f.v[2].x = (s8)*p++;
|
||||
f.v[2].y = (s8)*p++;
|
||||
f.v[3].x = (s8)*p++;
|
||||
f.v[3].y = (s8)*p--;
|
||||
func_80017758(f.v, f.m1);
|
||||
} while ((i = i + 1) < 4);
|
||||
|
||||
p = D_80181570;
|
||||
gA = 0xA0;
|
||||
cxv = (s16)f.cx;
|
||||
f.col[1].g = gA;
|
||||
gA = D_801269A4;
|
||||
czv = (s16)f.cz;
|
||||
f.col[1].b = 0x10;
|
||||
f.col[1].r = 0x10;
|
||||
f.pos[0] = gA - cxv;
|
||||
i = 0;
|
||||
f.v[3].y = 0;
|
||||
f.v[2].y = 0;
|
||||
f.v[0].y = 0;
|
||||
f.pos[1] = D_801269A8 - (s16)f.cy;
|
||||
f.pos[2] = D_801269AC - czv;
|
||||
|
||||
do {
|
||||
f.v[0].x = (s8)*p++;
|
||||
f.v[0].z = (s8)*p++;
|
||||
f.v[2].x = (s8)*p++;
|
||||
f.v[2].z = (s8)*p++;
|
||||
f.v[3].x = (s8)*p++;
|
||||
f.v[3].z = (s8)*p--;
|
||||
func_80017758(f.v, (void *)(ent + 0x38));
|
||||
} while ((i = i + 1) < 4);
|
||||
|
||||
if (*(s32 *)(ent + 0x30) > 0) {
|
||||
vc = (u8 *)&f.cx;
|
||||
__asm__ __volatile__("" : "=r"(vc) : "0"(vc));
|
||||
mp = f.m1;
|
||||
ap = mp;
|
||||
__asm__ __volatile__("" : "=r"(ap) : "0"(ap));
|
||||
p = D_80181598;
|
||||
i = 0;
|
||||
d = (s16)f.a8[0] >> 6;
|
||||
f.cx += d;
|
||||
f.cy += d;
|
||||
f.cz += d;
|
||||
func_80017E68(vc, ap);
|
||||
f.cx = f.cy = f.cz = ((u32)*(s32 *)(ent + 0x30) >> 1) + D_80126CE0 * 0x20;
|
||||
func_80017DC4(&f.cx, f.m2);
|
||||
func_80048EAC(f.m2, mp);
|
||||
f.v[3].z = 0;
|
||||
f.v[2].z = 0;
|
||||
f.v[0].z = 0;
|
||||
cv2 = *(u8 *)(ent + 0x12);
|
||||
f.col[1].b = 0x20;
|
||||
f.col[1].r = 0x20;
|
||||
f.col[3].b = 0;
|
||||
f.col[3].r = 0;
|
||||
f.col[2].b = 0;
|
||||
f.col[2].r = 0;
|
||||
f.col[0].b = 0;
|
||||
f.col[0].r = 0;
|
||||
f.col[3].g = 0;
|
||||
f.col[2].g = 0;
|
||||
f.col[0].g = 0;
|
||||
f.col[1].g = cv2 + 0x60;
|
||||
do {
|
||||
f.v[0].x = (s8)*p++;
|
||||
f.v[0].y = (s8)*p++;
|
||||
f.v[2].x = (s8)*p++;
|
||||
f.v[2].y = (s8)*p++;
|
||||
f.v[3].x = (s8)*p++;
|
||||
f.v[3].y = (s8)*p--;
|
||||
func_80017758(f.v, f.m1);
|
||||
} while ((i = i + 1) < 8);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
INCLUDE_ASM("asm/ov_SC07_011/nonmatchings/ov_SC07_011_jr_8013F350", func_80167540);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user