jak-project/game/mips2c/jak2_functions/nav_control.cpp
2023-03-26 18:41:59 -04:00

275 lines
16 KiB
C++

//--------------------------MIPS2C---------------------
// clang-format off
#include "game/mips2c/mips2c_private.h"
#include "game/kernel/jak2/kscheme.h"
using ::jak2::intern_from_c;
namespace Mips2C::jak2 {
namespace method_39_nav_state {
u64 execute(void* ctxt) {
auto* c = (ExecutionContext*)ctxt;
bool bc = false;
bool cop1_bc = false;
c->daddiu(sp, sp, -96); // daddiu sp, sp, -96
c->swc1(f20, 80, sp); // swc1 f20, 80(sp)
c->swc1(f22, 84, sp); // swc1 f22, 84(sp)
c->lwc1(f0, 32, a0); // lwc1 f0, 32(a0)
c->lwu(v1, 4, a0); // lwu v1, 4(a0)
c->lwc1(f1, 28, v1); // lwc1 f1, 28(v1)
c->muls(f1, f0, f1); // mul.s f1, f0, f1
c->daddiu(v1, a0, 48); // daddiu v1, a0, 48
c->lwc1(f0, 0, v1); // lwc1 f0, 0(v1)
c->lwc1(f2, 0, v1); // lwc1 f2, 0(v1)
c->muls(f0, f0, f2); // mul.s f0, f0, f2
c->lwc1(f2, 8, v1); // lwc1 f2, 8(v1)
c->lwc1(f3, 8, v1); // lwc1 f3, 8(v1)
c->muls(f2, f2, f3); // mul.s f2, f2, f3
c->adds(f0, f0, f2); // add.s f0, f0, f2
c->sqrts(f0, f0); // sqrt.s f0, f0
c->mfc1(v1, f0); // mfc1 v1, f0
c->mtc1(f0, v1); // mtc1 f0, v1
c->daddiu(v1, sp, 16); // daddiu v1, sp, 16
c->daddiu(a1, sp, 32); // daddiu a1, sp, 32
c->lwu(a2, 12, a0); // lwu a2, 12(a0)
c->lwu(a3, 0, a2); // lwu a3, 0(a2)
c->lwu(a2, 12, a0); // lwu a2, 12(a0)
c->lwu(a2, 0, a2); // lwu a2, 0(a2)
c->lwc1(f2, 28, a2); // lwc1 f2, 28(a2)
cop1_bc = c->fprs[f2] < c->fprs[f0]; // c.lt.s f2, f0
bc = !cop1_bc; // bc1f L154
c->mov64(v0, s7); // or v0, s7, r0
if (bc) {goto block_6;} // branch non-likely
c->mov64(a2, v1); // or a2, v1, r0
c->daddiu(t0, a0, 48); // daddiu t0, a0, 48
c->lui(t1, 16256); // lui t1, 16256
c->mtc1(f2, t1); // mtc1 f2, t1
c->divs(f2, f2, f0); // div.s f2, f2, f0
c->lqc2(vf1, 0, t0); // lqc2 vf1, 0(t0)
c->mfc1(t0, f2); // mfc1 t0, f2
c->mov128_vf_gpr(vf2, t0); // qmtc2.i vf2, t0
c->vadd_bc(DEST::w, BC::x, vf1, vf0, vf0); // vaddx.w vf1, vf0, vf0
c->vmul_bc(DEST::xyz, BC::x, vf1, vf1, vf2); // vmulx.xyz vf1, vf1, vf2
c->sqc2(vf1, 0, a2); // sqc2 vf1, 0(a2)
c->mtc1(f2, r0); // mtc1 f2, r0
c->swc1(f2, 4, v1); // swc1 f2, 4(v1)
c->mov64(a2, a1); // or a2, a1, r0
c->lwc1(f2, 16, a3); // lwc1 f2, 16(a3)
c->cvtws(f1, f1); // cvt.w.s f1, f1
c->mfc1(a3, f1); // mfc1 a3, f1
c->dsll32(a3, a3, 16); // dsll32 a3, a3, 16
c->dsra32(a3, a3, 16); // dsra32 a3, a3, 16
c->mtc1(f1, a3); // mtc1 f1, a3
c->cvtsw(f1, f1); // cvt.s.w f1, f1
c->muls(f1, f2, f1); // mul.s f1, f2, f1
c->lui(a3, 16255); // lui a3, 16255
c->lui(t0, -16854); // lui t0, -16854
c->ori(a3, a3, 65502); // ori a3, a3, 65502
c->ori(t0, t0, 43253); // ori t0, t0, 43253
c->subs(f22, f22, f22); // sub.s f22, f22, f22
c->lui(t1, 15368); // lui t1, 15368
c->mtc1(f10, a3); // mtc1 f10, a3
c->ori(a3, t1, 27638); // ori a3, t1, 27638
c->mtc1(f11, t0); // mtc1 f11, t0
c->lui(t0, -18099); // lui t0, -18099
c->muls(f2, f1, f1); // mul.s f2, f1, f1
c->ori(t0, t0, 8306); // ori t0, t0, 8306
c->mtc1(f12, a3); // mtc1 f12, a3
c->lui(a3, 13850); // lui a3, 13850
c->mtc1(f14, t0); // mtc1 f14, t0
c->ori(t0, a3, 41599); // ori t0, a3, 41599
// Unknown instr: mula.s f1, f10
float acc;
acc = c->fprs[f1] * c->fprs[f10];
c->lui(a3, 16256); // lui a3, 16256
c->muls(f3, f2, f1); // mul.s f3, f2, f1
c->mov64(a3, a3); // or a3, a3, r0
c->muls(f4, f2, f2); // mul.s f4, f2, f2
c->lui(t1, -16641); // lui t1, -16641
c->mtc1(f15, t0); // mtc1 f15, t0
c->lui(t0, -16641); // lui t0, -16641
c->or_(t0, t1, t0); // or t0, t1, t0
c->mtc1(f16, a3); // mtc1 f16, a3
// nop // sll r0, r0, 0
c->mtc1(f17, t0); // mtc1 f17, t0
// nop // sll r0, r0, 0
c->muls(f5, f3, f2); // mul.s f5, f3, f2
// nop // sll r0, r0, 0
c->muls(f6, f3, f3); // mul.s f6, f3, f3
// nop // sll r0, r0, 0
c->muls(f7, f4, f3); // mul.s f7, f4, f3
// nop // sll r0, r0, 0
c->muls(f8, f4, f4); // mul.s f8, f4, f4
// nop // sll r0, r0, 0
c->muls(f9, f5, f4); // mul.s f9, f5, f4
c->lui(a3, 15658); // lui a3, 15658
// Unknown instr: madda.s f3, f11
acc += c->fprs[f3] * c->fprs[f11];
c->ori(a3, a3, 31272); // ori a3, a3, 31272
// Unknown instr: madda.s f5, f12
acc += c->fprs[f5] * c->fprs[f12];
c->lui(t0, -17742); // lui t0, -17742
// Unknown instr: madda.s f7, f14
acc += c->fprs[f7] * c->fprs[f14];
c->ori(t0, t0, 48177); // ori t0, t0, 48177
// Unknown instr: madd.s f21, f9, f15
c->fprs[f21] = acc + (c->fprs[f9] * c->fprs[f15]);
c->lui(t1, 14249); // lui t1, 14249
c->mtc1(f18, a3); // mtc1 f18, a3
c->ori(a3, t1, 13291); // ori a3, t1, 13291
c->mtc1(f19, t0); // mtc1 f19, t0
// nop // sll r0, r0, 0
c->mtc1(f20, a3); // mtc1 f20, a3
// nop // sll r0, r0, 0
// Unknown instr: mula.s f16, f16
acc = c->fprs[f16] * c->fprs[f16];
// nop // sll r0, r0, 0
// Unknown instr: madda.s f2, f17
acc += c->fprs[f2] * c->fprs[f17];
// nop // sll r0, r0, 0
// Unknown instr: madda.s f4, f18
acc += c->fprs[f4] * c->fprs[f18];
// nop // sll r0, r0, 0
// Unknown instr: madda.s f6, f19
acc += c->fprs[f6] * c->fprs[f19];
// nop // sll r0, r0, 0
// Unknown instr: madd.s f22, f8, f20
c->fprs[f22] = acc + (c->fprs[f8] * c->fprs[f20]);
// nop // sll r0, r0, 0
c->swc1(f21, 0, a2); // swc1 f21, 0(a2)
// nop // sll r0, r0, 0
c->swc1(f22, 4, a2); // swc1 f22, 4(a2)
c->gprs[a2].du64[0] = 0; // or a2, r0, r0
c->mov64(a3, v1); // or a3, v1, r0
c->daddiu(a2, a0, 144); // daddiu a2, a0, 144
c->lwc1(f1, 0, a3); // lwc1 f1, 0(a3)
c->lwc1(f2, 4, a3); // lwc1 f2, 4(a3)
c->lwc1(f3, 8, a3); // lwc1 f3, 8(a3)
c->lwc1(f4, 0, a2); // lwc1 f4, 0(a2)
c->lwc1(f5, 4, a2); // lwc1 f5, 4(a2)
c->lwc1(f6, 8, a2); // lwc1 f6, 8(a2)
// Unknown instr: mula.s f1, f4
// Unknown instr: madda.s f2, f5
// Unknown instr: madd.s f1, f3, f6
c->fprs[f1] = (c->fprs[f3] * c->fprs[f6]) + (c->fprs[f2] * c->fprs[f5]) + (c->fprs[f1] * c->fprs[f4]);
c->mfc1(a2, f1); // mfc1 a2, f1
c->mtc1(f1, a2); // mtc1 f1, a2
c->lwc1(f2, 4, a1); // lwc1 f2, 4(a1)
cop1_bc = c->fprs[f1] < c->fprs[f2]; // c.lt.s f1, f2
bc = !cop1_bc; // bc1f L154
c->mov64(v0, s7); // or v0, s7, r0
if (bc) {goto block_6;} // branch non-likely
c->daddiu(a2, sp, 48); // daddiu a2, sp, 48
c->daddiu(a3, sp, 64); // daddiu a3, sp, 64
c->mov64(t0, a2); // or t0, a2, r0
c->daddiu(t1, a0, 144); // daddiu t1, a0, 144
c->lwc1(f1, 0, a1); // lwc1 f1, 0(a1)
c->lwc1(f3, 4, a1); // lwc1 f3, 4(a1)
c->lwc1(f2, 0, t1); // lwc1 f2, 0(t1)
c->lwc1(f4, 8, t1); // lwc1 f4, 8(t1)
c->muls(f5, f3, f2); // mul.s f5, f3, f2
c->muls(f6, f1, f4); // mul.s f6, f1, f4
c->adds(f5, f5, f6); // add.s f5, f5, f6
c->swc1(f5, 0, t0); // swc1 f5, 0(t0)
c->lwc1(f5, 4, t1); // lwc1 f5, 4(t1)
c->swc1(f5, 4, t0); // swc1 f5, 4(t0)
c->muls(f3, f3, f4); // mul.s f3, f3, f4
c->muls(f1, f1, f2); // mul.s f1, f1, f2
c->subs(f1, f3, f1); // sub.s f1, f3, f1
c->swc1(f1, 8, t0); // swc1 f1, 8(t0)
c->mfc1(t0, f1); // mfc1 t0, f1
c->mov64(t0, a3); // or t0, a3, r0
c->daddiu(t1, a0, 144); // daddiu t1, a0, 144
c->lwc1(f1, 0, a1); // lwc1 f1, 0(a1)
c->negs(f1, f1); // neg.s f1, f1
c->lwc1(f3, 4, a1); // lwc1 f3, 4(a1)
c->lwc1(f2, 0, t1); // lwc1 f2, 0(t1)
c->lwc1(f4, 8, t1); // lwc1 f4, 8(t1)
c->muls(f5, f3, f2); // mul.s f5, f3, f2
c->muls(f6, f1, f4); // mul.s f6, f1, f4
c->adds(f5, f5, f6); // add.s f5, f5, f6
c->swc1(f5, 0, t0); // swc1 f5, 0(t0)
c->lwc1(f5, 4, t1); // lwc1 f5, 4(t1)
c->swc1(f5, 4, t0); // swc1 f5, 4(t0)
c->muls(f3, f3, f4); // mul.s f3, f3, f4
c->muls(f1, f1, f2); // mul.s f1, f1, f2
c->subs(f1, f3, f1); // sub.s f1, f3, f1
c->swc1(f1, 8, t0); // swc1 f1, 8(t0)
c->mfc1(a1, f1); // mfc1 a1, f1
c->mov64(t0, a2); // or t0, a2, r0
c->mov64(a1, v1); // or a1, v1, r0
c->lwc1(f1, 0, t0); // lwc1 f1, 0(t0)
c->lwc1(f2, 4, t0); // lwc1 f2, 4(t0)
c->lwc1(f3, 8, t0); // lwc1 f3, 8(t0)
c->lwc1(f4, 0, a1); // lwc1 f4, 0(a1)
c->lwc1(f5, 4, a1); // lwc1 f5, 4(a1)
c->lwc1(f6, 8, a1); // lwc1 f6, 8(a1)
// Unknown instr: mula.s f1, f4
// Unknown instr: madda.s f2, f5
// Unknown instr: madd.s f1, f3, f6
c->fprs[f1] = (c->fprs[f3] * c->fprs[f6]) + (c->fprs[f2] * c->fprs[f5]) + (c->fprs[f1] * c->fprs[f4]);
c->mfc1(a1, f1); // mfc1 a1, f1
c->mtc1(f1, a1); // mtc1 f1, a1
c->mov64(t0, a3); // or t0, a3, r0
c->mov64(a1, v1); // or a1, v1, r0
c->lwc1(f2, 0, t0); // lwc1 f2, 0(t0)
c->lwc1(f3, 4, t0); // lwc1 f3, 4(t0)
c->lwc1(f4, 8, t0); // lwc1 f4, 8(t0)
c->lwc1(f5, 0, a1); // lwc1 f5, 0(a1)
c->lwc1(f6, 4, a1); // lwc1 f6, 4(a1)
c->lwc1(f7, 8, a1); // lwc1 f7, 8(a1)
// Unknown instr: mula.s f2, f5
// Unknown instr: madda.s f3, f6
// Unknown instr: madd.s f2, f4, f7
c->fprs[f2] = (c->fprs[f4] * c->fprs[f7]) + (c->fprs[f3] * c->fprs[f6]) + (c->fprs[f2] * c->fprs[f5]);
c->mfc1(a1, f2); // mfc1 a1, f2
c->mtc1(f2, a1); // mtc1 f2, a1
cop1_bc = c->fprs[f2] < c->fprs[f1]; // c.lt.s f2, f1
bc = !cop1_bc; // bc1f L152
// nop // sll r0, r0, 0
if (bc) {goto block_4;} // branch non-likely
c->mov64(a1, v1); // or a1, v1, r0
c->lq(a2, 0, a2); // lq a2, 0(a2)
c->sq(a2, 0, a1); // sq a2, 0(a1)
//beq r0, r0, L153 // beq r0, r0, L153
// nop // sll r0, r0, 0
goto block_5; // branch always
block_4:
c->mov64(a1, v1); // or a1, v1, r0
c->lq(a2, 0, a3); // lq a2, 0(a3)
c->sq(a2, 0, a1); // sq a2, 0(a1)
block_5:
c->daddiu(a0, a0, 48); // daddiu a0, a0, 48
c->lqc2(vf1, 0, v1); // lqc2 vf1, 0(v1)
c->mfc1(v1, f0); // mfc1 v1, f0
c->mov128_vf_gpr(vf2, v1); // qmtc2.i vf2, v1
c->vadd_bc(DEST::w, BC::x, vf1, vf0, vf0); // vaddx.w vf1, vf0, vf0
c->vmul_bc(DEST::xyz, BC::x, vf1, vf1, vf2); // vmulx.xyz vf1, vf1, vf2
c->sqc2(vf1, 0, a0); // sqc2 vf1, 0(a0)
c->daddiu(v0, s7, 4); // daddiu v0, s7, #t
block_6:
c->lwc1(f22, 84, sp); // lwc1 f22, 84(sp)
c->lwc1(f20, 80, sp); // lwc1 f20, 80(sp)
//jr ra // jr ra
c->daddiu(sp, sp, 96); // daddiu sp, sp, 96
goto end_of_function; // return
// nop // sll r0, r0, 0
// nop // sll r0, r0, 0
// nop // sll r0, r0, 0
end_of_function:
return c->gprs[v0].du64[0];
}
void link() {
gLinkedFunctionTable.reg("(method 39 nav-state)", execute, 96);
}
} // namespace method_39_nav_state
} // namespace Mips2C