//--------------------------MIPS2C--------------------- #include "game/kernel/jak1/kscheme.h" #include "game/mips2c/mips2c_private.h" using namespace jak1; namespace Mips2C::jak1 { namespace draw_inline_array_instance_tie { struct Cache { void* fake_scratchpad_data; // *fake-scratchpad-data* void* instance_tie_work_copy; // *instance-tie-work-copy* void* wind_work; // *wind-work* void* math_camera; // *math-camera* } cache; Vf background_vu0_data[16]; u16 vcallms_42(ExecutionContext* c) { // TODO // lq.xyzw vf16, 0(vi00) | nop c->vfs[vf16].vf = background_vu0_data[0]; // lq.xyzw vf17, 1(vi00) | nop c->vfs[vf17].vf = background_vu0_data[1]; // lq.xyzw vf18, 2(vi00) | nop c->vfs[vf18].vf = background_vu0_data[2]; // lq.xyzw vf19, 3(vi00) | nop c->vfs[vf19].vf = background_vu0_data[3]; // lq.xyzw vf28, 8(vi00) | mulax.xyzw ACC, vf16, vf02 c->vfs[vf28].vf = background_vu0_data[8]; c->acc.vf.mula(Mask::xyzw, c->vfs[vf16].vf, c->vfs[vf02].vf.x()); // lq.xyzw vf29, 9(vi00) | madday.xyzw ACC, vf17, vf02 c->vfs[vf29].vf = background_vu0_data[9]; c->acc.vf.madda(Mask::xyzw, c->vfs[vf17].vf, c->vfs[vf02].vf.y()); // lq.xyzw vf30, 10(vi00) | maddaz.xyzw ACC, vf18, vf02 c->vfs[vf30].vf = background_vu0_data[10]; c->acc.vf.madda(Mask::xyzw, c->vfs[vf18].vf, c->vfs[vf02].vf.z()); // lq.xyzw vf31, 11(vi00) | msubaw.xyzw ACC, vf19, vf00 c->vfs[vf31].vf = background_vu0_data[11]; c->acc.vf.msuba(Mask::xyzw, c->vfs[vf19].vf, 1.f); // lq.xyzw vf24, 4(vi00) | maddw.xyzw vf04, vf01, vf02 c->vfs[vf24].vf = background_vu0_data[4]; u16 vi01 = c->acc.vf.madd_flag(Mask::xyzw, c->vfs[vf04].vf, c->vfs[vf01].vf, c->vfs[vf02].vf.w()) & 0xf0; // lq.xyzw vf25, 5(vi00) | mulax.xyzw ACC, vf28, vf02 c->vfs[vf25].vf = background_vu0_data[5]; c->acc.vf.mula(Mask::xyzw, c->vfs[vf28].vf, c->vfs[vf02].vf.x()); // lq.xyzw vf26, 6(vi00) | madday.xyzw ACC, vf29, vf02 c->vfs[vf26].vf = background_vu0_data[6]; c->acc.vf.madda(Mask::xyzw, c->vfs[vf29].vf, c->vfs[vf02].vf.y()); // lq.xyzw vf27, 7(vi00) | maddaz.xyzw ACC, vf30, vf02 c->vfs[vf27].vf = background_vu0_data[7]; c->acc.vf.madda(Mask::xyzw, c->vfs[vf30].vf, c->vfs[vf02].vf.z()); // fmand vi01, vi02 | maddw.xyzw vf05, vf31, vf00 c->acc.vf.madd(Mask::xyzw, c->vfs[vf05].vf, c->vfs[vf31].vf, 1.f); // nop | mulax.xyzw ACC, vf24, vf02 c->acc.vf.mula(Mask::xyzw, c->vfs[vf24].vf, c->vfs[vf02].vf.x()); // nop | madday.xyzw ACC, vf25, vf02 c->acc.vf.madda(Mask::xyzw, c->vfs[vf25].vf, c->vfs[vf02].vf.y()); // nop | maddaz.xyzw ACC, vf26, vf02 :e c->acc.vf.madda(Mask::xyzw, c->vfs[vf26].vf, c->vfs[vf02].vf.z()); // nop | maddw.xyzw vf06, vf27, vf00 c->acc.vf.madd(Mask::xyzw, c->vfs[vf06].vf, c->vfs[vf27].vf, 1.f); return vi01; } void vcallms_29(ExecutionContext* c) { // lq.xyzw vf24, 4(vi00) | nop c->vfs[vf24].vf = background_vu0_data[4]; // lq.xyzw vf25, 5(vi00) | nop c->vfs[vf25].vf = background_vu0_data[5]; // lq.xyzw vf26, 6(vi00) | nop :e c->vfs[vf26].vf = background_vu0_data[6]; // lq.xyzw vf27, 7(vi00) | nop c->vfs[vf27].vf = background_vu0_data[7]; } /*! * Set up the VU0 context like it would be for background. See background-upload-vu0 in * background.gc for more details. */ void init_background(ExecutionContext* c) { // this first part is GOAL to init VU1 vf registers from the math camera. // lw v1, *math-camera*(s7) c->load_symbol(v1, cache.math_camera); // lqc2 vf16, 860(v1) c->lqc2(vf16, 860, v1); // lqc2 vf17, 876(v1) c->lqc2(vf17, 876, v1); // lqc2 vf18, 892(v1) c->lqc2(vf18, 892, v1); // lqc2 vf19, 908(v1) c->lqc2(vf19, 908, v1); // lqc2 vf20, 988(v1) c->lqc2(vf20, 988, v1); // lqc2 vf21, 1004(v1) c->lqc2(vf21, 1004, v1); // lqc2 vf22, 1020(v1) c->lqc2(vf22, 1020, v1); // lqc2 vf23, 1036(v1) c->lqc2(vf23, 1036, v1); // lqc2 vf24, 364(v1) c->lqc2(vf24, 364, v1); // lqc2 vf25, 380(v1) c->lqc2(vf25, 380, v1); // lqc2 vf26, 396(v1) c->lqc2(vf26, 396, v1); // lqc2 vf27, 412(v1) c->lqc2(vf27, 412, v1); // lqc2 vf28, 572(v1) c->lqc2(vf28, 572, v1); // lqc2 vf29, 588(v1) c->lqc2(vf29, 588, v1); // lqc2 vf30, 604(v1) c->lqc2(vf30, 604, v1); // lqc2 vf31, 620(v1) c->lqc2(vf31, 620, v1); // lqc2 vf31, 620(v1) c->lqc2(vf31, 620, v1); // dump them in VU0 data memory for fast access later. // sq.xyzw vf24, 4(vi00) | maxw.xyzw vf01, vf00, vf00 c->vfs[vf01].vf.fill(1.f); background_vu0_data[4] = c->vfs[vf24].vf; // sq.xyzw vf25, 5(vi00) | nop background_vu0_data[5] = c->vfs[vf25].vf; // sq.xyzw vf26, 6(vi00) | nop background_vu0_data[6] = c->vfs[vf26].vf; // sq.xyzw vf27, 7(vi00) | nop background_vu0_data[7] = c->vfs[vf27].vf; // sq.xyzw vf16, 0(vi00) | mulz.xyzw vf24, vf01, vf24 background_vu0_data[0] = c->vfs[vf16].vf; c->vfs[vf24].vf.mul(Mask::xyzw, c->vfs[vf01].vf, c->vfs[vf24].vf.z()); // sq.xyzw vf17, 1(vi00) | mulz.xyzw vf25, vf01, vf25 background_vu0_data[1] = c->vfs[vf17].vf; c->vfs[vf25].vf.mul(Mask::xyzw, c->vfs[vf01].vf, c->vfs[vf25].vf.z()); // sq.xyzw vf18, 2(vi00) | mulz.xyzw vf26, vf01, vf26 background_vu0_data[2] = c->vfs[vf18].vf; c->vfs[vf26].vf.mul(Mask::xyzw, c->vfs[vf01].vf, c->vfs[vf26].vf.z()); // sq.xyzw vf19, 3(vi00) | mulz.xyzw vf27, vf01, vf27 background_vu0_data[3] = c->vfs[vf19].vf; c->vfs[vf27].vf.mul(Mask::xyzw, c->vfs[vf01].vf, c->vfs[vf27].vf.z()); // sq.xyzw vf24, 12(vi00) | nop background_vu0_data[12] = c->vfs[vf24].vf; // sq.xyzw vf25, 13(vi00) | nop background_vu0_data[13] = c->vfs[vf25].vf; // sq.xyzw vf26, 14(vi00) | nop background_vu0_data[14] = c->vfs[vf26].vf; // sq.xyzw vf27, 15(vi00) | nop background_vu0_data[15] = c->vfs[vf27].vf; // sq.xyzw vf28, 8(vi00) | nop background_vu0_data[8] = c->vfs[vf28].vf; // sq.xyzw vf29, 9(vi00) | nop background_vu0_data[9] = c->vfs[vf29].vf; // sq.xyzw vf30, 10(vi00) | nop background_vu0_data[10] = c->vfs[vf30].vf; // sq.xyzw vf31, 11(vi00) | nop :e background_vu0_data[11] = c->vfs[vf31].vf; // iaddiu vi02, vi00, 0xf0 | nop } // clang-format off u64 execute(void* ctxt) { auto* c = (ExecutionContext*)ctxt; init_background(c); bool bc = false; u16 vi01 = 0; u32 madr, sadr, qwc; c->daddiu(sp, sp, -128); // daddiu sp, sp, -128 c->sd(ra, 0, sp); // sd ra, 0(sp) c->sq(s0, 16, sp); // sq s0, 16(sp) c->sq(s1, 32, sp); // sq s1, 32(sp) c->sq(s2, 48, sp); // sq s2, 48(sp) c->sq(s3, 64, sp); // sq s3, 64(sp) c->sq(s4, 80, sp); // sq s4, 80(sp) c->sq(s5, 96, sp); // sq s5, 96(sp) c->sq(gp, 112, sp); // sq gp, 112(sp) get_fake_spad_addr(t4, cache.fake_scratchpad_data, 0, c);// lui t4, 28672 c->lw(v1, 4, a3); // lw v1, 4(a3) c->lui(t1, 4096); // lui t1, 4096 c->lui(t2, 4096); // lui t2, 4096 // sync.l // cache dxwbin v1, 0 // sync.l // cache dxwbin v1, 1 // sync.l c->load_symbol(t0, cache.instance_tie_work_copy); // lw t0, *instance-tie-work-copy*(s7) c->ori(t1, t1, 54272); // ori t1, t1, 54272 SPR TO c->sw(a3, 396, t0); // sw a3, 396(t0) c->ori(a3, t2, 53248); // ori a3, t2, 53248 SPR FROM c->load_symbol(t5, cache.wind_work); // lw t5, *wind-work*(s7) c->lw(t6, 0, a0); // lw t6, 0(a0) c->ori(t2, t4, 16); // ori t2, t4, 16 c->vmax_bc(DEST::xyzw, BC::w, vf1, vf0, vf0); // vmaxw.xyzw vf1, vf0, vf0 c->addiu(t3, a1, -4); // addiu t3, a1, -4 c->ori(a1, t4, 4112); // ori a1, t4, 4112 c->sw(t1, 400, t0); // sw t1, 400(t0) c->addiu(t9, r0, 0); // addiu t9, r0, 0 c->sw(a3, 404, t0); // sw a3, 404(t0) c->mov64(t8, a1); // or t8, a1, r0 c->sw(t5, 408, t0); // sw t5, 408(t0) // nop // sll r0, r0, 0 c->lqc2(vf3, 64, t0); // lqc2 vf3, 64(t0) // nop // sll r0, r0, 0 c->sw(r0, 432, t0); // sw r0, 432(t0) block_1: bc = c->sgpr64(t6) != 0; // bne t6, r0, L139 // nop // sll r0, r0, 0 if (bc) {goto block_4;} // branch non-likely c->addiu(a0, a0, 4); // addiu a0, a0, 4 c->addiu(t3, t3, 2048); // addiu t3, t3, 2048 c->daddiu(a2, a2, -32); // daddiu a2, a2, -32 c->lw(t6, 0, a0); // lw t6, 0(a0) bc = ((s64)c->sgpr64(a2)) <= 0; // blez a2, L177 // nop // sll r0, r0, 0 if (bc) {goto block_70;} // branch non-likely //beq r0, r0, L138 // beq r0, r0, L138 // nop // sll r0, r0, 0 goto block_1; // branch always block_4: /* Wait for SPR TO to be free. c->lw(t4, 0, t1); // lw t4, 0(t1) // nop // sll r0, r0, 0 // nop // sll r0, r0, 0 // nop // sll r0, r0, 0 c->andi(t4, t4, 256); // andi t4, t4, 256 // nop // sll r0, r0, 0 bc = c->sgpr64(t4) != 0; // bne t4, r0, L139 // nop // sll r0, r0, 0 if (bc) {goto block_4;} // branch non-likely */ // c->sw(t3, 16, t1); // sw t3, 16(t1) madr = c->sgpr64(t3); c->xori(t4, t2, 2048); // xori t4, t2, 2048 // c->sw(t4, 128, t1); // sw t4, 128(t1) sadr = c->sgpr64(t4); c->addiu(t4, r0, 128); // addiu t4, r0, 128 // c->sw(t4, 32, t1); // sw t4, 32(t1) qwc = c->sgpr64(t4); c->addiu(t4, r0, 256); // addiu t4, r0, 256 // c->sw(t4, 0, t1); // sw t4, 0(t1) spad_to_dma(cache.fake_scratchpad_data, madr, sadr, qwc); // nop // sll r0, r0, 0 block_6: c->mov64(ra, a0); // or ra, a0, r0 c->xori(t2, t2, 2048); // xori t2, t2, 2048 c->daddiu(a0, a0, 4); // daddiu a0, a0, 4 c->mov64(t7, a0); // or t7, a0, r0 c->mov64(t4, t2); // or t4, t2, r0 c->daddiu(t6, a2, -32); // daddiu t6, a2, -32 bc = ((s64)c->sgpr64(t6)) > 0; // bgtz t6, L142 c->lw(t6, 0, a0); // lw t6, 0(a0) if (bc) {goto block_11;} // branch non-likely //beq r0, r0, L145 // beq r0, r0, L145 // nop // sll r0, r0, 0 goto block_15; // branch always // nop // sll r0, r0, 0 c->lw(v1, 400, r0); // lw v1, 400(r0) block_9: c->daddiu(a2, a2, -32); // daddiu a2, a2, -32 c->addiu(a0, a0, 4); // addiu a0, a0, 4 bc = ((s64)c->sgpr64(a2)) <= 0; // blez a2, L145 c->lw(t6, 0, a0); // lw t6, 0(a0) if (bc) {goto block_15;} // branch non-likely // nop // sll r0, r0, 0 // nop // sll r0, r0, 0 block_11: bc = c->sgpr64(t6) == 0; // beq t6, r0, L141 c->addiu(t3, t3, 2048); // addiu t3, t3, 2048 if (bc) {goto block_9;} // branch non-likely /* Wait on DMA TO block_12: c->lw(t6, 0, t1); // lw t6, 0(t1) // nop // sll r0, r0, 0 // nop // sll r0, r0, 0 // nop // sll r0, r0, 0 c->andi(t6, t6, 256); // andi t6, t6, 256 // nop // sll r0, r0, 0 bc = c->sgpr64(t6) == 0; // beq t6, r0, L144 // nop // sll r0, r0, 0 if (bc) {goto block_14;} // branch non-likely // nop // sll r0, r0, 0 c->lw(t6, 444, t0); // lw t6, 444(t0) // nop // sll r0, r0, 0 // nop // sll r0, r0, 0 // nop // sll r0, r0, 0 c->daddiu(t6, t6, 1); // daddiu t6, t6, 1 // nop // sll r0, r0, 0 c->sw(t6, 444, t0); // sw t6, 444(t0) //beq r0, r0, L143 // beq r0, r0, L143 // nop // sll r0, r0, 0 goto block_12; // branch always */ // block_14: // c->sw(t3, 16, t1); // sw t3, 16(t1) madr = c->sgpr64(t3); c->xori(t6, t2, 2048); // xori t6, t2, 2048 // c->sw(t6, 128, t1); // sw t6, 128(t1) sadr = c->sgpr64(t6); c->addiu(t6, r0, 128); // addiu t6, r0, 128 // c->sw(t6, 32, t1); // sw t6, 32(t1) qwc = c->sgpr64(t6); c->addiu(t6, r0, 256); // addiu t6, r0, 256 //beq r0, r0, L146 // beq r0, r0, L146 // c->sw(t6, 0, t1); // sw t6, 0(t1) spad_to_dma(cache.fake_scratchpad_data, madr, sadr, qwc); goto block_17; // branch always block_15: /* c->lw(t6, 0, t1); // lw t6, 0(t1) // nop // sll r0, r0, 0 // nop // sll r0, r0, 0 // nop // sll r0, r0, 0 c->andi(t6, t6, 256); // andi t6, t6, 256 // nop // sll r0, r0, 0 bc = c->sgpr64(t6) == 0; // beq t6, r0, L146 // nop // sll r0, r0, 0 if (bc) {goto block_17;} // branch non-likely // nop // sll r0, r0, 0 c->lw(t6, 444, t0); // lw t6, 444(t0) // nop // sll r0, r0, 0 // nop // sll r0, r0, 0 // nop // sll r0, r0, 0 c->daddiu(t6, t6, 1); // daddiu t6, t6, 1 // nop // sll r0, r0, 0 c->sw(t6, 444, t0); // sw t6, 444(t0) //beq r0, r0, L145 // beq r0, r0, L145 // nop // sll r0, r0, 0 goto block_15; // branch always */ block_17: c->lb(t6, 0, ra); // lb t6, 0(ra) c->addiu(ra, ra, 1); // addiu ra, ra, 1 // nop // sll r0, r0, 0 c->sw(ra, 412, t0); // sw ra, 412(t0) bc = c->sgpr64(t6) != 0; // bne t6, r0, L147 c->sw(t7, 416, t0); // sw t7, 416(t0) if (bc) {goto block_19;} // branch non-likely c->daddiu(a2, a2, -8); // daddiu a2, a2, -8 c->addiu(t4, t4, 512); // addiu t4, t4, 512 //beq r0, r0, L173 // beq r0, r0, L173 // nop // sll r0, r0, 0 goto block_62; // branch always block_19: c->addiu(t7, r0, 128); // addiu t7, r0, 128 c->lqc2(vf2, 16, t4); // lqc2 vf2, 16(t4) block_20: c->daddiu(ra, t9, -246); // daddiu ra, t9, -246 // nop // sll r0, r0, 0 bc = ((s64)c->sgpr64(ra)) <= 0; // blez ra, L151 // vcallms 42 vi01 = vcallms_42(c); if (bc) {goto block_24;} // branch non-likely /* block_21: c->lw(t8, 0, a3); // lw t8, 0(a3) // nop // sll r0, r0, 0 // nop // sll r0, r0, 0 // nop // sll r0, r0, 0 c->andi(t8, t8, 256); // andi t8, t8, 256 // nop // sll r0, r0, 0 bc = c->sgpr64(t8) == 0; // beq t8, r0, L150 // nop // sll r0, r0, 0 if (bc) {goto block_23;} // branch non-likely // nop // sll r0, r0, 0 c->lw(t8, 440, t0); // lw t8, 440(t0) // nop // sll r0, r0, 0 // nop // sll r0, r0, 0 // nop // sll r0, r0, 0 c->daddiu(t8, t8, 1); // daddiu t8, t8, 1 // nop // sll r0, r0, 0 c->sw(t8, 440, t0); // sw t8, 440(t0) //beq r0, r0, L149 // beq r0, r0, L149 // nop // sll r0, r0, 0 goto block_21; // branch always */ // block_23: // c->sw(a1, 128, a3); // sw a1, 128(a3) sadr = c->sgpr64(a1); c->xori(a1, a1, 12288); // xori a1, a1, 12288 // c->sw(v1, 16, a3); // sw v1, 16(a3) madr = c->sgpr64(v1); c->sll(t8, t9, 4); // sll t8, t9, 4 c->addu(v1, v1, t8); // addu v1, v1, t8 c->mov64(t8, a1); // or t8, a1, r0 // c->sw(t9, 32, a3); // sw t9, 32(a3) qwc = c->sgpr64(t9); c->addiu(t9, r0, 256); // addiu t9, r0, 256 // c->sw(t9, 0, a3); // sw t9, 0(a3) spad_from_dma(cache.fake_scratchpad_data, madr, sadr, qwc); c->addiu(t9, r0, 0); // addiu t9, r0, 0 block_24: // nop // sll r0, r0, 0 c->lw(ra, 12, t4); // lw ra, 12(t4) c->and_(gp, t6, t7); // and gp, t6, t7 c->ld(s5, 56, t4); // ld s5, 56(t4) bc = c->sgpr64(gp) == 0; // beq gp, r0, L172 c->ld(s2, 32, t4); // ld s2, 32(t4) if (bc) {goto block_61;} // branch non-likely c->sll(gp, t9, 4); // sll gp, t9, 4 c->ld(s4, 40, t4); // ld s4, 40(t4) c->pextlh(s3, s5, r0); // pextlh s3, s5, r0 c->ld(s5, 48, t4); // ld s5, 48(t4) c->psraw(s3, s3, 10); // psraw s3, s3, 10 c->lq(s1, 28, ra); // lq s1, 28(ra) c->pextlh(s2, s2, r0); // pextlh s2, s2, r0 c->lq(s0, 44, ra); // lq s0, 44(ra) c->psraw(s2, s2, 16); // psraw s2, s2, 16 c->mov128_vf_gpr(vf14, s1); // qmtc2.ni vf14, s1 c->pextlh(s4, s4, r0); // pextlh s4, s4, r0 c->mov128_vf_gpr(vf15, s0); // qmtc2.ni vf15, s0 c->psraw(s4, s4, 16); // psraw s4, s4, 16 c->mov128_vf_gpr(vf13, s3); // qmtc2.ni vf13, s3 c->pextlh(s5, s5, r0); // pextlh s5, s5, r0 c->mov128_vf_gpr(vf10, s2); // qmtc2.ni vf10, s2 c->psraw(s3, s5, 16); // psraw s3, s5, 16 c->lhu(s2, 62, t4); // lhu s2, 62(t4) c->addu(gp, gp, v1); // addu gp, gp, v1 c->mov128_vf_gpr(vf11, s4); // qmtc2.ni vf11, s4 c->dsll(s5, s2, 4); // dsll s5, s2, 4 c->mov128_vf_gpr(vf12, s3); // qmtc2.ni vf12, s3 c->daddu(s4, s2, t5); // daddu s4, s2, t5 c->lw(s2, 408, t0); // lw s2, 408(t0) c->andi(s4, s4, 63); // andi s4, s4, 63 c->lw(s3, 384, t0); // lw s3, 384(t0) c->sll(s1, s4, 4); // sll s1, s4, 4 c->lw(s4, 4, ra); // lw s4, 4(ra) c->daddu(s5, s3, s5); // daddu s5, s3, s5 c->addu(s3, s1, s2); // addu s3, s1, s2 c->andi(s1, s4, 1); // andi s1, s4, 1 c->andi(s4, s4, 2); // andi s4, s4, 2 bc = c->sgpr64(s1) != 0; // bne s1, r0, L172 c->gprs[s1].du64[0] = vi01; // cfc2.ni s1, vi1 if (bc) {goto block_61;} // branch non-likely c->vitof0(DEST::xyzw, vf13, vf13); // vitof0.xyzw vf13, vf13 c->lw(t5, 1324, s2); // lw t5, 1324(s2) bc = c->sgpr64(s1) != 0; // bne s1, r0, L172 c->lqc2(vf25, 112, t0); // lqc2 vf25, 112(t0) if (bc) {goto block_61;} // branch non-likely // nop // sll r0, r0, 0 c->lqc2(vf16, 16, t0); // lqc2 vf16, 16(t0) // nop // sll r0, r0, 0 c->lqc2(vf17, 32, t0); // lqc2 vf17, 32(t0) c->vmula_bc(DEST::xyzw, BC::z, vf1, vf6); // vmulaz.xyzw acc, vf1, vf6 c->sw(gp, 196, t0); // sw gp, 196(t0) c->vmsub_bc(DEST::xyzw, BC::w, vf8, vf1, vf2); // vmsubw.xyzw vf8, vf1, vf2 c->sw(gp, 276, t0); // sw gp, 276(t0) c->vadd(DEST::xyz, vf5, vf0, vf0); // vadd.xyz vf5, vf0, vf0 // nop // sll r0, r0, 0 c->vadd(DEST::xyz, vf13, vf13, vf2); // vadd.xyz vf13, vf13, vf2 // nop // sll r0, r0, 0 // Unknown instr: vmula.xyzw acc, vf1, vf1 c->vmula(DEST::xyzw, vf1, vf1); // nop // sll r0, r0, 0 c->vsub(DEST::xyzw, vf14, vf8, vf14); // vsub.xyzw vf14, vf8, vf14 // nop // sll r0, r0, 0 c->vadd_bc(DEST::w, BC::w, vf5, vf5, vf17); // vaddw.w vf5, vf5, vf17 // nop // sll r0, r0, 0 // nop // sll r0, r0, 0 c->lqc2(vf30, 80, t0); // lqc2 vf30, 80(t0) c->vmini(DEST::xyzw, vf25, vf8, vf25); // vmini.xyzw vf25, vf8, vf25 // nop // sll r0, r0, 0 // Unknown instr: vmsub.xyz vf15, vf14, vf15 c->vmsub(DEST::xyz, vf15, vf14, vf15); // nop // sll r0, r0, 0 c->vmini_bc(DEST::w, BC::y, vf5, vf5, vf16); // vminiy.w vf5, vf5, vf16 // nop // sll r0, r0, 0 // nop // sll r0, r0, 0 c->lqc2(vf24, 128, t0); // lqc2 vf24, 128(t0) // nop // sll r0, r0, 0 c->sqc2(vf25, 112, t0); // sqc2 vf25, 112(t0) c->vmini(DEST::xyz, vf15, vf15, vf1); // vmini.xyz vf15, vf15, vf1 // nop // sll r0, r0, 0 c->vmax_bc(DEST::w, BC::x, vf5, vf5, vf16); // vmaxx.w vf5, vf5, vf16 // nop // sll r0, r0, 0 c->vsub_bc(DEST::xyzw, BC::z, vf16, vf8, vf16); // vsubz.xyzw vf16, vf8, vf16 // nop // sll r0, r0, 0 // nop // sll r0, r0, 0 c->lqc2(vf25, 144, t0); // lqc2 vf25, 144(t0) // nop // sll r0, r0, 0 c->lqc2(vf26, 160, t0); // lqc2 vf26, 160(t0) // nop // sll r0, r0, 0 c->lqc2(vf27, 176, t0); // lqc2 vf27, 176(t0) c->vmula_bc(DEST::xyzw, BC::x, vf24, vf2); // vmulax.xyzw acc, vf24, vf2 // nop // sll r0, r0, 0 c->vmadda_bc(DEST::xyzw, BC::y, vf25, vf2); // vmadday.xyzw acc, vf25, vf2 // nop // sll r0, r0, 0 c->vmadda_bc(DEST::xyzw, BC::z, vf26, vf2); // vmaddaz.xyzw acc, vf26, vf2 // nop // sll r0, r0, 0 c->vmsuba_bc(DEST::xyzw, BC::w, vf27, vf0); // vmsubaw.xyzw acc, vf27, vf0 // nop // sll r0, r0, 0 c->vmsub_bc(DEST::xyzw, BC::w, vf24, vf1, vf2); // vmsubw.xyzw vf24, vf1, vf2 // nop // sll r0, r0, 0 // nop // sll r0, r0, 0 c->mov128_gpr_vf(s2, vf16); // qmfc2.i s2, vf16 c->vmul_bc(DEST::xyzw, BC::w, vf28, vf15, vf30); // vmulw.xyzw vf28, vf15, vf30 // nop // sll r0, r0, 0 c->vmul_bc(DEST::xyzw, BC::w, vf29, vf15, vf30); // vmulw.xyzw vf29, vf15, vf30 // nop // sll r0, r0, 0 // nop // sll r0, r0, 0 c->lqc2(vf19, 0, t0); // lqc2 vf19, 0(t0) c->vitof12(DEST::xyzw, vf10, vf10); // vitof12.xyzw vf10, vf10 // nop // sll r0, r0, 0 c->pcgtw(s1, r0, s2); // pcgtw s1, r0, s2 c->mov128_gpr_vf(s0, vf24); // qmfc2.i s0, vf24 c->vmul_bc(DEST::xyzw, BC::x, vf28, vf1, vf28); // vmulx.xyzw vf28, vf1, vf28 // nop // sll r0, r0, 0 c->vmul_bc(DEST::xyzw, BC::z, vf29, vf1, vf29); // vmulz.xyzw vf29, vf1, vf29 c->lw(s2, 56, ra); // lw s2, 56(ra) c->pcgtw(s0, r0, s0); // pcgtw s0, r0, s0 c->sqc2(vf5, 80, t8); // sqc2 vf5, 80(t8) c->ppach(s0, r0, s0); // ppach s0, r0, s0 c->sw(s4, 80, t8); // sw s4, 80(t8) c->or_(s1, s0, s1); // or s1, s0, s1 c->sqc2(vf14, 96, t0); // sqc2 vf14, 96(t0) c->ppacb(s1, r0, s1); // ppacb s1, r0, s1 c->mfc1(r0, f31); // mfc1 r0, f31 bc = c->sgpr64(s2) == 0; // beq s2, r0, L153 c->sw(s1, 84, t8); // sw s1, 84(t8) if (bc) {goto block_33;} // branch non-likely c->vftoi0(DEST::zw, vf28, vf28); // vftoi0.zw vf28, vf28 c->ld(s1, 8, s5); // ld s1, 8(s5) c->vftoi0(DEST::zw, vf29, vf29); // vftoi0.zw vf29, vf29 c->ld(s2, 0, s5); // ld s2, 0(s5) c->pextlw(s1, r0, s1); // pextlw s1, r0, s1 c->lqc2(vf16, 12, s3); // lqc2 vf16, 12(s3) c->pextlw(s3, r0, s2); // pextlw s3, r0, s2 c->mov128_vf_gpr(vf18, s1); // qmtc2.i vf18, s1 // nop // sll r0, r0, 0 c->mov128_vf_gpr(vf17, s3); // qmtc2.i vf17, s3 // Unknown instr: vmula.xyzw acc, vf16, vf1 c->vmula(DEST::xyzw, vf16, vf1); // nop // sll r0, r0, 0 c->vmsuba_bc(DEST::xyzw, BC::x, vf18, vf19); // vmsubax.xyzw acc, vf18, vf19 // nop // sll r0, r0, 0 c->vmsub_bc(DEST::xyzw, BC::y, vf16, vf17, vf19); // vmsuby.xyzw vf16, vf17, vf19 // nop // sll r0, r0, 0 c->vsub_bc(DEST::x, BC::x, vf28, vf30, vf15); // vsubx.x vf28, vf30, vf15 // nop // sll r0, r0, 0 c->vsub_bc(DEST::x, BC::z, vf29, vf1, vf15); // vsubz.x vf29, vf1, vf15 // nop // sll r0, r0, 0 c->vitof0(DEST::zw, vf28, vf28); // vitof0.zw vf28, vf28 // nop // sll r0, r0, 0 c->vmula_bc(DEST::xyzw, BC::z, vf16, vf19); // vmulaz.xyzw acc, vf16, vf19 // nop // sll r0, r0, 0 c->vmadd(DEST::xyzw, vf18, vf1, vf18); // vmadd.xyzw vf18, vf1, vf18 // nop // sll r0, r0, 0 c->vitof0(DEST::zw, vf29, vf29); // vitof0.zw vf29, vf29 // nop // sll r0, r0, 0 c->vadd_bc(DEST::y, BC::y, vf28, vf0, vf0); // vaddy.y vf28, vf0, vf0 // nop // sll r0, r0, 0 c->vadd_bc(DEST::y, BC::y, vf29, vf0, vf0); // vaddy.y vf29, vf0, vf0 // nop // sll r0, r0, 0 c->vmula_bc(DEST::xyzw, BC::z, vf18, vf19); // vmulaz.xyzw acc, vf18, vf19 // nop // sll r0, r0, 0 c->vmadd(DEST::xyzw, vf17, vf17, vf1); // vmadd.xyzw vf17, vf17, vf1 // nop // sll r0, r0, 0 c->vitof12(DEST::xyzw, vf11, vf11); // vitof12.xyzw vf11, vf11 // nop // sll r0, r0, 0 c->vitof12(DEST::xyzw, vf12, vf12); // vitof12.xyzw vf12, vf12 // nop // sll r0, r0, 0 c->vsub_bc(DEST::w, BC::w, vf28, vf30, vf28); // vsubw.w vf28, vf30, vf28 // nop // sll r0, r0, 0 c->vmini_bc(DEST::xyzw, BC::w, vf17, vf17, vf0); // vminiw.xyzw vf17, vf17, vf0 // nop // sll r0, r0, 0 c->vsub_bc(DEST::w, BC::w, vf29, vf30, vf29); // vsubw.w vf29, vf30, vf29 // nop // sll r0, r0, 0 // nop // sll r0, r0, 0 // nop // sll r0, r0, 0 // nop // sll r0, r0, 0 c->mov128_gpr_vf(s3, vf18); // qmfc2.i s3, vf18 c->vmax_bc(DEST::xyzw, BC::w, vf27, vf17, vf19); // vmaxw.xyzw vf27, vf17, vf19 // nop // sll r0, r0, 0 c->ppacw(s3, r0, s3); // ppacw s3, r0, s3 c->mfc1(r0, f31); // mfc1 r0, f31 // nop // sll r0, r0, 0 // nop // sll r0, r0, 0 // nop // sll r0, r0, 0 // nop // sll r0, r0, 0 c->vmul_bc(DEST::xyzw, BC::w, vf27, vf27, vf15); // vmulw.xyzw vf27, vf27, vf15 // nop // sll r0, r0, 0 // nop // sll r0, r0, 0 // nop // sll r0, r0, 0 // nop // sll r0, r0, 0 // nop // sll r0, r0, 0 c->vmula_bc(DEST::yw, BC::x, vf0, vf0); // vmulax.yw acc, vf0, vf0 // nop // sll r0, r0, 0 c->vmula_bc(DEST::xz, BC::y, vf27, vf10); // vmulay.xz acc, vf27, vf10 // nop // sll r0, r0, 0 c->vmadd(DEST::xyzw, vf10, vf1, vf10); // vmadd.xyzw vf10, vf1, vf10 // nop // sll r0, r0, 0 // nop // sll r0, r0, 0 c->mov128_gpr_vf(s2, vf27); // qmfc2.i s2, vf27 c->vmula_bc(DEST::yw, BC::x, vf0, vf0); // vmulax.yw acc, vf0, vf0 c->lw(s1, 436, t0); // lw s1, 436(t0) c->vmula_bc(DEST::xz, BC::y, vf27, vf11); // vmulay.xz acc, vf27, vf11 // nop // sll r0, r0, 0 c->vmadd(DEST::xyzw, vf11, vf1, vf11); // vmadd.xyzw vf11, vf1, vf11 // nop // sll r0, r0, 0 bc = c->sgpr64(s1) != c->sgpr64(s7); // bne s1, s7, L152 c->ppacw(s2, r0, s2); // ppacw s2, r0, s2 if (bc) {goto block_31;} // branch non-likely c->vmula_bc(DEST::yw, BC::x, vf0, vf0); // vmulax.yw acc, vf0, vf0 c->sd(s3, 8, s5); // sd s3, 8(s5) c->vmula_bc(DEST::xz, BC::y, vf27, vf12); // vmulay.xz acc, vf27, vf12 c->sd(s2, 0, s5); // sd s2, 0(s5) bc = c->sgpr64(s4) != 0; // bne s4, r0, L164 c->vmadd(DEST::xyzw, vf12, vf1, vf12); // vmadd.xyzw vf12, vf1, vf12 if (bc) {goto block_49;} // branch non-likely //beq r0, r0, L154 // beq r0, r0, L154 // nop // sll r0, r0, 0 goto block_34; // branch always block_31: c->vmula_bc(DEST::yw, BC::x, vf0, vf0); // vmulax.yw acc, vf0, vf0 // nop // sll r0, r0, 0 c->vmula_bc(DEST::xz, BC::y, vf27, vf12); // vmulay.xz acc, vf27, vf12 // nop // sll r0, r0, 0 bc = c->sgpr64(s4) != 0; // bne s4, r0, L164 c->vmadd(DEST::xyzw, vf12, vf1, vf12); // vmadd.xyzw vf12, vf1, vf12 if (bc) {goto block_49;} // branch non-likely //beq r0, r0, L154 // beq r0, r0, L154 // nop // sll r0, r0, 0 goto block_34; // branch always block_33: c->vftoi0(DEST::zw, vf28, vf28); // vftoi0.zw vf28, vf28 // nop // sll r0, r0, 0 c->vftoi0(DEST::zw, vf29, vf29); // vftoi0.zw vf29, vf29 // nop // sll r0, r0, 0 c->vsub_bc(DEST::x, BC::x, vf28, vf30, vf15); // vsubx.x vf28, vf30, vf15 // nop // sll r0, r0, 0 c->vsub_bc(DEST::x, BC::z, vf29, vf1, vf15); // vsubz.x vf29, vf1, vf15 // nop // sll r0, r0, 0 c->vitof0(DEST::zw, vf28, vf28); // vitof0.zw vf28, vf28 // nop // sll r0, r0, 0 c->vitof0(DEST::zw, vf29, vf29); // vitof0.zw vf29, vf29 // nop // sll r0, r0, 0 c->vadd_bc(DEST::y, BC::y, vf28, vf0, vf0); // vaddy.y vf28, vf0, vf0 // nop // sll r0, r0, 0 c->vadd_bc(DEST::y, BC::y, vf29, vf0, vf0); // vaddy.y vf29, vf0, vf0 // nop // sll r0, r0, 0 c->vsub_bc(DEST::w, BC::w, vf28, vf30, vf28); // vsubw.w vf28, vf30, vf28 // nop // sll r0, r0, 0 c->vsub_bc(DEST::w, BC::w, vf29, vf30, vf29); // vsubw.w vf29, vf30, vf29 // nop // sll r0, r0, 0 c->vitof12(DEST::xyzw, vf11, vf11); // vitof12.xyzw vf11, vf11 // nop // sll r0, r0, 0 bc = c->sgpr64(s4) != 0; // bne s4, r0, L164 c->vitof12(DEST::xyzw, vf12, vf12); // vitof12.xyzw vf12, vf12 if (bc) {goto block_49;} // branch non-likely block_34: // nop // sll r0, r0, 0 c->lw(s5, 84, t8); // lw s5, 84(t8) // nop // sll r0, r0, 0 c->lw(s4, 108, t0); // lw s4, 108(t0) c->addiu(t9, t9, 6); // addiu t9, t9, 6 c->lw(s3, 104, t0); // lw s3, 104(t0) bc = c->sgpr64(s5) != 0; // bne s5, r0, L158 c->vsub_bc(DEST::w, BC::w, vf10, vf10, vf10); // vsubw.w vf10, vf10, vf10 if (bc) {goto block_41;} // branch non-likely bc = ((s64)c->sgpr64(s4)) > 0; // bgtz s4, L156 // nop // sll r0, r0, 0 if (bc) {goto block_39;} // branch non-likely bc = ((s64)c->sgpr64(s3)) > 0; // bgtz s3, L155 // nop // sll r0, r0, 0 if (bc) {goto block_38;} // branch non-likely // nop // sll r0, r0, 0 c->lh(s4, 78, ra); // lh s4, 78(ra) // nop // sll r0, r0, 0 c->lw(s5, 64, ra); // lw s5, 64(ra) c->daddiu(s4, s4, 1); // daddiu s4, s4, 1 c->sqc2(vf28, 64, t8); // sqc2 vf28, 64(t8) c->vmula_bc(DEST::xyzw, BC::x, vf20, vf10); // vmulax.xyzw acc, vf20, vf10 c->addiu(gp, gp, 96); // addiu gp, gp, 96 c->vmadda_bc(DEST::xyzw, BC::y, vf21, vf10); // vmadday.xyzw acc, vf21, vf10 c->sw(gp, 64, ra); // sw gp, 64(ra) c->vmadd_bc(DEST::xyzw, BC::z, vf10, vf22, vf10); // vmaddz.xyzw vf10, vf22, vf10 c->sh(s4, 78, ra); // sh s4, 78(ra) c->vmula_bc(DEST::xyzw, BC::x, vf20, vf11); // vmulax.xyzw acc, vf20, vf11 c->lbu(s4, 109, ra); // lbu s4, 109(ra) c->vmadda_bc(DEST::xyzw, BC::y, vf21, vf11); // vmadday.xyzw acc, vf21, vf11 c->lhu(gp, 118, ra); // lhu gp, 118(ra) c->vmadd_bc(DEST::xyzw, BC::z, vf11, vf22, vf11); // vmaddz.xyzw vf11, vf22, vf11 c->lbu(s3, 113, ra); // lbu s3, 113(ra) //beq r0, r0, L157 // beq r0, r0, L157 // nop // sll r0, r0, 0 goto block_40; // branch always block_38: // nop // sll r0, r0, 0 c->lh(s4, 80, ra); // lh s4, 80(ra) // nop // sll r0, r0, 0 c->lw(s5, 68, ra); // lw s5, 68(ra) c->daddiu(s4, s4, 1); // daddiu s4, s4, 1 c->sqc2(vf29, 64, t8); // sqc2 vf29, 64(t8) c->vmula_bc(DEST::xyzw, BC::x, vf20, vf10); // vmulax.xyzw acc, vf20, vf10 c->addiu(gp, gp, 96); // addiu gp, gp, 96 c->vmadda_bc(DEST::xyzw, BC::y, vf21, vf10); // vmadday.xyzw acc, vf21, vf10 c->sw(gp, 68, ra); // sw gp, 68(ra) c->vmadd_bc(DEST::xyzw, BC::z, vf10, vf22, vf10); // vmaddz.xyzw vf10, vf22, vf10 c->sh(s4, 80, ra); // sh s4, 80(ra) c->vmula_bc(DEST::xyzw, BC::x, vf20, vf11); // vmulax.xyzw acc, vf20, vf11 c->lbu(s4, 110, ra); // lbu s4, 110(ra) c->vmadda_bc(DEST::xyzw, BC::y, vf21, vf11); // vmadday.xyzw acc, vf21, vf11 c->lhu(gp, 120, ra); // lhu gp, 120(ra) c->vmadd_bc(DEST::xyzw, BC::z, vf11, vf22, vf11); // vmaddz.xyzw vf11, vf22, vf11 c->lbu(s3, 114, ra); // lbu s3, 114(ra) //beq r0, r0, L157 // beq r0, r0, L157 // nop // sll r0, r0, 0 goto block_40; // branch always block_39: // nop // sll r0, r0, 0 c->lh(s4, 82, ra); // lh s4, 82(ra) // nop // sll r0, r0, 0 c->lw(s5, 72, ra); // lw s5, 72(ra) c->daddiu(s4, s4, 1); // daddiu s4, s4, 1 c->sqc2(vf30, 64, t8); // sqc2 vf30, 64(t8) c->vmula_bc(DEST::xyzw, BC::x, vf20, vf10); // vmulax.xyzw acc, vf20, vf10 c->addiu(gp, gp, 96); // addiu gp, gp, 96 c->vmadda_bc(DEST::xyzw, BC::y, vf21, vf10); // vmadday.xyzw acc, vf21, vf10 c->sw(gp, 72, ra); // sw gp, 72(ra) c->vmadd_bc(DEST::xyzw, BC::z, vf10, vf22, vf10); // vmaddz.xyzw vf10, vf22, vf10 c->sh(s4, 82, ra); // sh s4, 82(ra) c->vmula_bc(DEST::xyzw, BC::x, vf20, vf11); // vmulax.xyzw acc, vf20, vf11 c->lbu(s4, 111, ra); // lbu s4, 111(ra) c->vmadda_bc(DEST::xyzw, BC::y, vf21, vf11); // vmadday.xyzw acc, vf21, vf11 c->lhu(gp, 122, ra); // lhu gp, 122(ra) c->vmadd_bc(DEST::xyzw, BC::z, vf11, vf22, vf11); // vmaddz.xyzw vf11, vf22, vf11 c->lbu(s3, 115, ra); // lbu s3, 115(ra) block_40: c->vmula_bc(DEST::xyzw, BC::x, vf20, vf12); // vmulax.xyzw acc, vf20, vf12 c->lq(s2, 224, t0); // lq s2, 224(t0) c->vmadda_bc(DEST::xyzw, BC::y, vf21, vf12); // vmadday.xyzw acc, vf21, vf12 c->lq(s1, 240, t0); // lq s1, 240(t0) c->vmadd_bc(DEST::xyzw, BC::z, vf12, vf22, vf12); // vmaddz.xyzw vf12, vf22, vf12 c->dsll(gp, gp, 4); // dsll gp, gp, 4 c->vmula_bc(DEST::xyzw, BC::x, vf20, vf13); // vmulax.xyzw acc, vf20, vf13 c->daddu(s3, s3, ra); // daddu s3, s3, ra c->vmadda_bc(DEST::xyzw, BC::y, vf21, vf13); // vmadday.xyzw acc, vf21, vf13 // nop // sll r0, r0, 0 c->vmadda_bc(DEST::xyzw, BC::z, vf22, vf13); // vmaddaz.xyzw acc, vf22, vf13 // nop // sll r0, r0, 0 c->vmadd_bc(DEST::xyzw, BC::w, vf13, vf23, vf0); // vmaddw.xyzw vf13, vf23, vf0 // nop // sll r0, r0, 0 c->sqc2(vf10, 0, t8); // sqc2 vf10, 0(t8) // nop // sll r0, r0, 0 c->sqc2(vf11, 16, t8); // sqc2 vf11, 16(t8) c->movz(s2, s1, s5); // movz s2, s1, s5 c->sqc2(vf12, 32, t8); // sqc2 vf12, 32(t8) c->daddiu(t8, t8, 96); // daddiu t8, t8, 96 //beq r0, r0, L159 // beq r0, r0, L159 c->sqc2(vf13, -48, t8); // sqc2 vf13, -48(t8) goto block_42; // branch always block_41: // nop // sll r0, r0, 0 c->lqc2(vf24, 320, t0); // lqc2 vf24, 320(t0) // nop // sll r0, r0, 0 c->lqc2(vf25, 336, t0); // lqc2 vf25, 336(t0) // nop // sll r0, r0, 0 c->lqc2(vf26, 352, t0); // lqc2 vf26, 352(t0) // nop // sll r0, r0, 0 c->lqc2(vf27, 368, t0); // lqc2 vf27, 368(t0) // nop // sll r0, r0, 0 c->lh(s4, 76, ra); // lh s4, 76(ra) // nop // sll r0, r0, 0 c->lw(s5, 60, ra); // lw s5, 60(ra) c->daddiu(s4, s4, 1); // daddiu s4, s4, 1 c->sqc2(vf28, 64, t8); // sqc2 vf28, 64(t8) c->vmula_bc(DEST::xyzw, BC::x, vf24, vf10); // vmulax.xyzw acc, vf24, vf10 c->addiu(gp, gp, 96); // addiu gp, gp, 96 c->vmadda_bc(DEST::xyzw, BC::y, vf25, vf10); // vmadday.xyzw acc, vf25, vf10 c->sw(gp, 60, ra); // sw gp, 60(ra) c->vmadd_bc(DEST::xyzw, BC::z, vf10, vf26, vf10); // vmaddz.xyzw vf10, vf26, vf10 c->sh(s4, 76, ra); // sh s4, 76(ra) c->vmula_bc(DEST::xyzw, BC::x, vf24, vf11); // vmulax.xyzw acc, vf24, vf11 c->lbu(s4, 108, ra); // lbu s4, 108(ra) c->vmadda_bc(DEST::xyzw, BC::y, vf25, vf11); // vmadday.xyzw acc, vf25, vf11 c->lhu(gp, 116, ra); // lhu gp, 116(ra) c->vmadd_bc(DEST::xyzw, BC::z, vf11, vf26, vf11); // vmaddz.xyzw vf11, vf26, vf11 c->lbu(s3, 112, ra); // lbu s3, 112(ra) c->vmula_bc(DEST::xyzw, BC::x, vf24, vf12); // vmulax.xyzw acc, vf24, vf12 c->lq(s2, 224, t0); // lq s2, 224(t0) c->vmadda_bc(DEST::xyzw, BC::y, vf25, vf12); // vmadday.xyzw acc, vf25, vf12 c->lq(s1, 240, t0); // lq s1, 240(t0) c->vmadd_bc(DEST::xyzw, BC::z, vf12, vf26, vf12); // vmaddz.xyzw vf12, vf26, vf12 c->dsll(gp, gp, 4); // dsll gp, gp, 4 c->vmula_bc(DEST::xyzw, BC::x, vf24, vf13); // vmulax.xyzw acc, vf24, vf13 c->daddu(s3, s3, ra); // daddu s3, s3, ra c->vmadda_bc(DEST::xyzw, BC::y, vf25, vf13); // vmadday.xyzw acc, vf25, vf13 // nop // sll r0, r0, 0 c->vmadda_bc(DEST::xyzw, BC::z, vf26, vf13); // vmaddaz.xyzw acc, vf26, vf13 // nop // sll r0, r0, 0 c->vmadd_bc(DEST::xyzw, BC::w, vf13, vf27, vf0); // vmaddw.xyzw vf13, vf27, vf0 // nop // sll r0, r0, 0 c->sqc2(vf10, 0, t8); // sqc2 vf10, 0(t8) // nop // sll r0, r0, 0 c->sqc2(vf11, 16, t8); // sqc2 vf11, 16(t8) // nop // sll r0, r0, 0 c->sqc2(vf12, 32, t8); // sqc2 vf12, 32(t8) c->movz(s2, s1, s5); // movz s2, s1, s5 c->sqc2(vf13, 48, t8); // sqc2 vf13, 48(t8) c->daddiu(t8, t8, 96); // daddiu t8, t8, 96 block_42: // nop // sll r0, r0, 0 c->lw(ra, 8, t4); // lw ra, 8(t4) // nop // sll r0, r0, 0 c->sq(s2, 256, t0); // sq s2, 256(t0) // nop // sll r0, r0, 0 c->lbu(s2, 144, s3); // lbu s2, 144(s3) c->addu(s1, gp, ra); // addu s1, gp, ra c->sw(s5, 260, t0); // sw s5, 260(t0) c->daddiu(t9, t9, 3); // daddiu t9, t9, 3 c->sw(s1, 212, t0); // sw s1, 212(t0) c->sll(s1, s2, 2); // sll s1, s2, 2 c->sh(s2, 208, t0); // sh s2, 208(t0) c->sll(s2, s2, 4); // sll s2, s2, 4 c->sb(s1, 222, t0); // sb s1, 222(t0) c->daddu(gp, gp, s2); // daddu gp, gp, s2 c->lq(s2, 192, t0); // lq s2, 192(t0) c->daddiu(s5, s5, 48); // daddiu s5, s5, 48 c->lq(s1, 208, t0); // lq s1, 208(t0) c->daddiu(t8, t8, 48); // daddiu t8, t8, 48 c->lq(s0, 256, t0); // lq s0, 256(t0) c->daddiu(s3, s3, 1); // daddiu s3, s3, 1 c->sq(s2, -48, t8); // sq s2, -48(t8) c->daddiu(s4, s4, -1); // daddiu s4, s4, -1 c->sq(s1, -32, t8); // sq s1, -32(t8) bc = ((s64)c->sgpr64(s4)) <= 0; // blez s4, L172 c->sq(s0, -16, t8); // sq s0, -16(t8) if (bc) {goto block_61;} // branch non-likely block_43: c->daddiu(s2, t9, -252); // daddiu s2, t9, -252 // nop // sll r0, r0, 0 bc = ((s64)c->sgpr64(s2)) <= 0; // blez s2, L163 // nop // sll r0, r0, 0 if (bc) {goto block_47;} // branch non-likely /* block_44: c->lw(t8, 0, a3); // lw t8, 0(a3) // nop // sll r0, r0, 0 // nop // sll r0, r0, 0 // nop // sll r0, r0, 0 c->andi(t8, t8, 256); // andi t8, t8, 256 // nop // sll r0, r0, 0 bc = c->sgpr64(t8) == 0; // beq t8, r0, L162 // nop // sll r0, r0, 0 if (bc) {goto block_46;} // branch non-likely // nop // sll r0, r0, 0 c->lw(t8, 440, t0); // lw t8, 440(t0) // nop // sll r0, r0, 0 // nop // sll r0, r0, 0 // nop // sll r0, r0, 0 c->daddiu(t8, t8, 1); // daddiu t8, t8, 1 // nop // sll r0, r0, 0 c->sw(t8, 440, t0); // sw t8, 440(t0) //beq r0, r0, L161 // beq r0, r0, L161 // nop // sll r0, r0, 0 goto block_44; // branch always */ // block_46: // c->sw(a1, 128, a3); // sw a1, 128(a3) sadr = c->sgpr64(a1); c->xori(a1, a1, 12288); // xori a1, a1, 12288 // c->sw(v1, 16, a3); // sw v1, 16(a3) madr = c->sgpr64(v1); c->sll(t8, t9, 4); // sll t8, t9, 4 c->addu(v1, v1, t8); // addu v1, v1, t8 c->mov64(t8, a1); // or t8, a1, r0 // c->sw(t9, 32, a3); // sw t9, 32(a3) qwc = c->sgpr64(t9); c->addiu(t9, r0, 256); // addiu t9, r0, 256 // c->sw(t9, 0, a3); // sw t9, 0(a3) spad_from_dma(cache.fake_scratchpad_data, madr, sadr, qwc); c->addiu(t9, r0, 0); // addiu t9, r0, 0 block_47: // nop // sll r0, r0, 0 c->lbu(s2, 144, s3); // lbu s2, 144(s3) c->addu(s1, gp, ra); // addu s1, gp, ra c->sw(s5, 260, t0); // sw s5, 260(t0) c->daddiu(t9, t9, 3); // daddiu t9, t9, 3 c->sw(s1, 212, t0); // sw s1, 212(t0) c->sll(s1, s2, 2); // sll s1, s2, 2 c->sh(s2, 208, t0); // sh s2, 208(t0) c->sll(s2, s2, 4); // sll s2, s2, 4 c->sb(s1, 222, t0); // sb s1, 222(t0) c->daddu(gp, gp, s2); // daddu gp, gp, s2 c->lq(s2, 192, t0); // lq s2, 192(t0) c->daddiu(s5, s5, 48); // daddiu s5, s5, 48 c->lq(s1, 208, t0); // lq s1, 208(t0) c->daddiu(t8, t8, 48); // daddiu t8, t8, 48 c->lq(s0, 256, t0); // lq s0, 256(t0) c->daddiu(s3, s3, 1); // daddiu s3, s3, 1 c->sq(s2, -48, t8); // sq s2, -48(t8) c->daddiu(s4, s4, -1); // daddiu s4, s4, -1 c->sq(s1, -32, t8); // sq s1, -32(t8) bc = ((s64)c->sgpr64(s4)) > 0; // bgtz s4, L160 c->sq(s0, -16, t8); // sq s0, -16(t8) if (bc) {goto block_43;} // branch non-likely //beq r0, r0, L172 // beq r0, r0, L172 // nop // sll r0, r0, 0 goto block_61; // branch always block_49: c->vmul(DEST::xyz, vf16, vf6, vf6); // vmul.xyz vf16, vf6, vf6 // nop // sll r0, r0, 0 // nop // sll r0, r0, 0 c->lqc2(vf9, 124, ra); // lqc2 vf9, 124(ra) c->vsub_bc(DEST::w, BC::w, vf10, vf10, vf10); // vsubw.w vf10, vf10, vf10 // nop // sll r0, r0, 0 // nop // sll r0, r0, 0 // nop // sll r0, r0, 0 c->vadda_bc(DEST::x, BC::y, vf16, vf16); // vadday.x acc, vf16, vf16 // nop // sll r0, r0, 0 c->vmadd_bc(DEST::x, BC::z, vf16, vf1, vf16); // vmaddz.x vf16, vf1, vf16 // nop // sll r0, r0, 0 c->vsqrt(vf16, BC::x); // vsqrt Q, vf16.x // nop // sll r0, r0, 0 c->vmula_bc(DEST::xyzw, BC::y, vf1, vf9); // vmulay.xyzw acc, vf1, vf9 // nop // sll r0, r0, 0 c->vmadda_bc(DEST::xyzw, BC::w, vf1, vf2); // vmaddaw.xyzw acc, vf1, vf2 // nop // sll r0, r0, 0 // nop // sll r0, r0, 0 c->vwaitq(); // vwaitq // Unknown instr: vmsubq.xyzw vf16, vf1, Q c->vmsubq(DEST::xyzw, vf16, vf1); // nop // sll r0, r0, 0 c->vmul_bc(DEST::xyzw, BC::x, vf16, vf16, vf9); // vmulx.xyzw vf16, vf16, vf9 // nop // sll r0, r0, 0 c->vmax_bc(DEST::x, BC::x, vf16, vf16, vf0); // vmaxx.x vf16, vf16, vf0 // nop // sll r0, r0, 0 c->vmini_bc(DEST::x, BC::y, vf16, vf16, vf3); // vminiy.x vf16, vf16, vf3 // nop // sll r0, r0, 0 c->vftoi0(DEST::xyzw, vf16, vf16); // vftoi0.xyzw vf16, vf16 // nop // sll r0, r0, 0 // nop // sll r0, r0, 0 c->mov128_gpr_vf(s5, vf16); // qmfc2.i s5, vf16 // nop // sll r0, r0, 0 // nop // sll r0, r0, 0 c->andi(s5, s5, 255); // andi s5, s5, 255 // nop // sll r0, r0, 0 bc = c->sgpr64(s5) == 0; // beq s5, r0, L154 // nop // sll r0, r0, 0 if (bc) {goto block_34;} // branch non-likely // Unknown instr: vcallms 29 vcallms_29(c); c->sw(s4, 432, t0); // sw s4, 432(t0) // nop // sll r0, r0, 0 c->lw(s4, 108, t0); // lw s4, 108(t0) c->addiu(t9, t9, 6); // addiu t9, t9, 6 c->lw(s3, 104, t0); // lw s3, 104(t0) // nop // sll r0, r0, 0 c->sw(s5, 80, t8); // sw s5, 80(t8) bc = ((s64)c->sgpr64(s4)) > 0; // bgtz s4, L166 // nop // sll r0, r0, 0 if (bc) {goto block_54;} // branch non-likely bc = ((s64)c->sgpr64(s3)) > 0; // bgtz s3, L165 // nop // sll r0, r0, 0 if (bc) {goto block_53;} // branch non-likely // nop // sll r0, r0, 0 c->lh(s4, 86, ra); // lh s4, 86(ra) // nop // sll r0, r0, 0 c->lw(s5, 96, ra); // lw s5, 96(ra) c->daddiu(s4, s4, 1); // daddiu s4, s4, 1 c->sqc2(vf28, 64, t8); // sqc2 vf28, 64(t8) c->vmula_bc(DEST::xyzw, BC::x, vf24, vf10); // vmulax.xyzw acc, vf24, vf10 c->addiu(gp, gp, 96); // addiu gp, gp, 96 c->vmadda_bc(DEST::xyzw, BC::y, vf25, vf10); // vmadday.xyzw acc, vf25, vf10 c->sw(gp, 96, ra); // sw gp, 96(ra) c->vmadd_bc(DEST::xyzw, BC::z, vf10, vf26, vf10); // vmaddz.xyzw vf10, vf26, vf10 c->sh(s4, 86, ra); // sh s4, 86(ra) c->vmula_bc(DEST::xyzw, BC::x, vf24, vf11); // vmulax.xyzw acc, vf24, vf11 c->lbu(s3, 109, ra); // lbu s3, 109(ra) c->vmadda_bc(DEST::xyzw, BC::y, vf25, vf11); // vmadday.xyzw acc, vf25, vf11 c->lhu(gp, 118, ra); // lhu gp, 118(ra) c->vmadd_bc(DEST::xyzw, BC::z, vf11, vf26, vf11); // vmaddz.xyzw vf11, vf26, vf11 c->lbu(s4, 113, ra); // lbu s4, 113(ra) //beq r0, r0, L167 // beq r0, r0, L167 // nop // sll r0, r0, 0 goto block_55; // branch always block_53: // nop // sll r0, r0, 0 c->lh(s4, 88, ra); // lh s4, 88(ra) // nop // sll r0, r0, 0 c->lw(s5, 100, ra); // lw s5, 100(ra) c->daddiu(s4, s4, 1); // daddiu s4, s4, 1 c->sqc2(vf29, 64, t8); // sqc2 vf29, 64(t8) c->vmula_bc(DEST::xyzw, BC::x, vf24, vf10); // vmulax.xyzw acc, vf24, vf10 c->addiu(gp, gp, 96); // addiu gp, gp, 96 c->vmadda_bc(DEST::xyzw, BC::y, vf25, vf10); // vmadday.xyzw acc, vf25, vf10 c->sw(gp, 100, ra); // sw gp, 100(ra) c->vmadd_bc(DEST::xyzw, BC::z, vf10, vf26, vf10); // vmaddz.xyzw vf10, vf26, vf10 c->sh(s4, 88, ra); // sh s4, 88(ra) c->vmula_bc(DEST::xyzw, BC::x, vf24, vf11); // vmulax.xyzw acc, vf24, vf11 c->lbu(s3, 110, ra); // lbu s3, 110(ra) c->vmadda_bc(DEST::xyzw, BC::y, vf25, vf11); // vmadday.xyzw acc, vf25, vf11 c->lhu(gp, 120, ra); // lhu gp, 120(ra) c->vmadd_bc(DEST::xyzw, BC::z, vf11, vf26, vf11); // vmaddz.xyzw vf11, vf26, vf11 c->lbu(s4, 114, ra); // lbu s4, 114(ra) //beq r0, r0, L167 // beq r0, r0, L167 // nop // sll r0, r0, 0 goto block_55; // branch always block_54: // nop // sll r0, r0, 0 c->lh(s4, 90, ra); // lh s4, 90(ra) // nop // sll r0, r0, 0 c->lw(s5, 104, ra); // lw s5, 104(ra) c->daddiu(s4, s4, 1); // daddiu s4, s4, 1 c->sqc2(vf30, 64, t8); // sqc2 vf30, 64(t8) c->vmula_bc(DEST::xyzw, BC::x, vf24, vf10); // vmulax.xyzw acc, vf24, vf10 c->addiu(gp, gp, 96); // addiu gp, gp, 96 c->vmadda_bc(DEST::xyzw, BC::y, vf25, vf10); // vmadday.xyzw acc, vf25, vf10 c->sw(gp, 104, ra); // sw gp, 104(ra) c->vmadd_bc(DEST::xyzw, BC::z, vf10, vf26, vf10); // vmaddz.xyzw vf10, vf26, vf10 c->sh(s4, 90, ra); // sh s4, 90(ra) c->vmula_bc(DEST::xyzw, BC::x, vf24, vf11); // vmulax.xyzw acc, vf24, vf11 c->lbu(s3, 111, ra); // lbu s3, 111(ra) c->vmadda_bc(DEST::xyzw, BC::y, vf25, vf11); // vmadday.xyzw acc, vf25, vf11 c->lhu(gp, 122, ra); // lhu gp, 122(ra) c->vmadd_bc(DEST::xyzw, BC::z, vf11, vf26, vf11); // vmaddz.xyzw vf11, vf26, vf11 c->lbu(s4, 115, ra); // lbu s4, 115(ra) block_55: c->vmula_bc(DEST::xyzw, BC::x, vf24, vf12); // vmulax.xyzw acc, vf24, vf12 c->dsll(gp, gp, 4); // dsll gp, gp, 4 c->vmadda_bc(DEST::xyzw, BC::y, vf25, vf12); // vmadday.xyzw acc, vf25, vf12 c->daddu(s4, s4, ra); // daddu s4, s4, ra c->vmadd_bc(DEST::xyzw, BC::z, vf12, vf26, vf12); // vmaddz.xyzw vf12, vf26, vf12 // nop // sll r0, r0, 0 c->vmula_bc(DEST::xyzw, BC::x, vf24, vf13); // vmulax.xyzw acc, vf24, vf13 // nop // sll r0, r0, 0 c->vmadda_bc(DEST::xyzw, BC::y, vf25, vf13); // vmadday.xyzw acc, vf25, vf13 // nop // sll r0, r0, 0 c->vmadda_bc(DEST::xyzw, BC::z, vf26, vf13); // vmaddaz.xyzw acc, vf26, vf13 // nop // sll r0, r0, 0 c->vmadd_bc(DEST::xyzw, BC::w, vf13, vf27, vf0); // vmaddw.xyzw vf13, vf27, vf0 // nop // sll r0, r0, 0 c->sqc2(vf10, 0, t8); // sqc2 vf10, 0(t8) // nop // sll r0, r0, 0 c->sqc2(vf11, 16, t8); // sqc2 vf11, 16(t8) // nop // sll r0, r0, 0 c->sqc2(vf12, 32, t8); // sqc2 vf12, 32(t8) // nop // sll r0, r0, 0 c->sqc2(vf13, 48, t8); // sqc2 vf13, 48(t8) c->daddiu(t8, t8, 96); // daddiu t8, t8, 96 // nop // sll r0, r0, 0 c->lw(ra, 8, t4); // lw ra, 8(t4) // nop // sll r0, r0, 0 c->lbu(s2, 144, s4); // lbu s2, 144(s4) c->addu(s1, gp, ra); // addu s1, gp, ra c->sw(s5, 284, t0); // sw s5, 284(t0) c->daddiu(t9, t9, 3); // daddiu t9, t9, 3 c->sw(s1, 292, t0); // sw s1, 292(t0) c->sll(s1, s2, 4); // sll s1, s2, 4 c->sh(s2, 288, t0); // sh s2, 288(t0) c->daddu(gp, gp, s1); // daddu gp, gp, s1 c->lq(s2, 272, t0); // lq s2, 272(t0) c->daddiu(s5, s5, 48); // daddiu s5, s5, 48 c->lq(s1, 288, t0); // lq s1, 288(t0) c->daddiu(t8, t8, 48); // daddiu t8, t8, 48 c->lq(s0, 304, t0); // lq s0, 304(t0) c->daddiu(s4, s4, 1); // daddiu s4, s4, 1 c->sq(s2, -48, t8); // sq s2, -48(t8) c->daddiu(s3, s3, -1); // daddiu s3, s3, -1 c->sq(s1, -32, t8); // sq s1, -32(t8) bc = ((s64)c->sgpr64(s3)) <= 0; // blez s3, L172 c->sq(s0, -16, t8); // sq s0, -16(t8) if (bc) {goto block_61;} // branch non-likely block_56: c->daddiu(s2, t9, -252); // daddiu s2, t9, -252 // nop // sll r0, r0, 0 bc = ((s64)c->sgpr64(s2)) <= 0; // blez s2, L171 // nop // sll r0, r0, 0 if (bc) {goto block_60;} // branch non-likely /* block_57: c->lw(t8, 0, a3); // lw t8, 0(a3) // nop // sll r0, r0, 0 // nop // sll r0, r0, 0 // nop // sll r0, r0, 0 c->andi(t8, t8, 256); // andi t8, t8, 256 // nop // sll r0, r0, 0 bc = c->sgpr64(t8) == 0; // beq t8, r0, L170 // nop // sll r0, r0, 0 if (bc) {goto block_59;} // branch non-likely // nop // sll r0, r0, 0 c->lw(t8, 440, t0); // lw t8, 440(t0) // nop // sll r0, r0, 0 // nop // sll r0, r0, 0 // nop // sll r0, r0, 0 c->daddiu(t8, t8, 1); // daddiu t8, t8, 1 // nop // sll r0, r0, 0 c->sw(t8, 440, t0); // sw t8, 440(t0) //beq r0, r0, L169 // beq r0, r0, L169 // nop // sll r0, r0, 0 goto block_57; // branch always */ // block_59: // c->sw(a1, 128, a3); // sw a1, 128(a3) sadr = c->sgpr64(a1); c->xori(a1, a1, 12288); // xori a1, a1, 12288 // c->sw(v1, 16, a3); // sw v1, 16(a3) madr = c->sgpr64(v1); c->sll(t8, t9, 4); // sll t8, t9, 4 c->addu(v1, v1, t8); // addu v1, v1, t8 c->mov64(t8, a1); // or t8, a1, r0 // c->sw(t9, 32, a3); // sw t9, 32(a3) qwc = c->sgpr64(t9); c->addiu(t9, r0, 256); // addiu t9, r0, 256 // c->sw(t9, 0, a3); // sw t9, 0(a3) spad_from_dma(cache.fake_scratchpad_data, madr, sadr, qwc); c->addiu(t9, r0, 0); // addiu t9, r0, 0 block_60: // nop // sll r0, r0, 0 c->lbu(s2, 144, s4); // lbu s2, 144(s4) c->addu(s1, gp, ra); // addu s1, gp, ra c->sw(s5, 284, t0); // sw s5, 284(t0) c->daddiu(t9, t9, 3); // daddiu t9, t9, 3 c->sw(s1, 292, t0); // sw s1, 292(t0) c->sll(s1, s2, 4); // sll s1, s2, 4 c->sh(s2, 288, t0); // sh s2, 288(t0) c->daddu(gp, gp, s1); // daddu gp, gp, s1 c->lq(s2, 272, t0); // lq s2, 272(t0) c->daddiu(s5, s5, 48); // daddiu s5, s5, 48 c->lq(s1, 288, t0); // lq s1, 288(t0) c->daddiu(t8, t8, 48); // daddiu t8, t8, 48 c->lq(s0, 304, t0); // lq s0, 304(t0) c->daddiu(s4, s4, 1); // daddiu s4, s4, 1 c->sq(s2, -48, t8); // sq s2, -48(t8) c->daddiu(s3, s3, -1); // daddiu s3, s3, -1 c->sq(s1, -32, t8); // sq s1, -32(t8) bc = ((s64)c->sgpr64(s3)) > 0; // bgtz s3, L168 c->sq(s0, -16, t8); // sq s0, -16(t8) if (bc) {goto block_56;} // branch non-likely block_61: c->addiu(a2, a2, -1); // addiu a2, a2, -1 c->srl(t7, t7, 1); // srl t7, t7, 1 c->daddiu(t4, t4, 64); // daddiu t4, t4, 64 // nop // sll r0, r0, 0 bc = c->sgpr64(t7) != 0; // bne t7, r0, L148 c->lqc2(vf2, 16, t4); // lqc2 vf2, 16(t4) if (bc) {goto block_20;} // branch non-likely block_62: // nop // sll r0, r0, 0 c->lw(ra, 412, t0); // lw ra, 412(t0) // nop // sll r0, r0, 0 c->lw(t7, 416, t0); // lw t7, 416(t0) bc = c->sgpr64(ra) != c->sgpr64(t7); // bne ra, t7, L146 // nop // sll r0, r0, 0 if (bc) {goto block_17;} // branch non-likely bc = ((s64)c->sgpr64(a2)) > 0; // bgtz a2, L140 // nop // sll r0, r0, 0 if (bc) {goto block_6;} // branch non-likely bc = c->sgpr64(t9) == 0; // beq t9, r0, L176 // nop // sll r0, r0, 0 if (bc) {goto block_68;} // branch non-likely /* block_65: c->lw(a0, 0, a3); // lw a0, 0(a3) // nop // sll r0, r0, 0 // nop // sll r0, r0, 0 // nop // sll r0, r0, 0 c->andi(a0, a0, 256); // andi a0, a0, 256 // nop // sll r0, r0, 0 bc = c->sgpr64(a0) == 0; // beq a0, r0, L175 // nop // sll r0, r0, 0 if (bc) {goto block_67;} // branch non-likely // nop // sll r0, r0, 0 c->lw(a0, 440, t0); // lw a0, 440(t0) // nop // sll r0, r0, 0 // nop // sll r0, r0, 0 // nop // sll r0, r0, 0 c->daddiu(a0, a0, 1); // daddiu a0, a0, 1 // nop // sll r0, r0, 0 c->sw(a0, 440, t0); // sw a0, 440(t0) //beq r0, r0, L174 // beq r0, r0, L174 // nop // sll r0, r0, 0 goto block_65; // branch always */ // block_67: // c->sw(a1, 128, a3); // sw a1, 128(a3) sadr = c->sgpr64(a1); c->xori(a0, a1, 12288); // xori a0, a1, 12288 // c->sw(v1, 16, a3); // sw v1, 16(a3) madr = c->sgpr64(v1); c->sll(a1, t9, 4); // sll a1, t9, 4 c->addu(v1, v1, a1); // addu v1, v1, a1 c->mov64(a0, a0); // or a0, a0, r0 // c->sw(t9, 32, a3); // sw t9, 32(a3) qwc = c->sgpr64(t9); c->addiu(a0, r0, 256); // addiu a0, r0, 256 // c->sw(a0, 0, a3); // sw a0, 0(a3) spad_from_dma(cache.fake_scratchpad_data, madr, sadr, qwc); c->addiu(a0, r0, 0); // addiu a0, r0, 0 block_68: /* c->lw(a0, 0, a3); // lw a0, 0(a3) // nop // sll r0, r0, 0 // nop // sll r0, r0, 0 // nop // sll r0, r0, 0 c->andi(a0, a0, 256); // andi a0, a0, 256 // nop // sll r0, r0, 0 bc = c->sgpr64(a0) == 0; // beq a0, r0, L177 // nop // sll r0, r0, 0 if (bc) {goto block_70;} // branch non-likely // nop // sll r0, r0, 0 c->lw(a0, 440, t0); // lw a0, 440(t0) // nop // sll r0, r0, 0 // nop // sll r0, r0, 0 // nop // sll r0, r0, 0 c->daddiu(a0, a0, 1); // daddiu a0, a0, 1 // nop // sll r0, r0, 0 c->sw(a0, 440, t0); // sw a0, 440(t0) //beq r0, r0, L176 // beq r0, r0, L176 // nop // sll r0, r0, 0 goto block_68; // branch always */ block_70: c->lw(a0, 396, t0); // lw a0, 396(t0) // nop // sll r0, r0, 0 c->sw(v1, 4, a0); // sw v1, 4(a0) // nop // sll r0, r0, 0 c->gprs[v0].du64[0] = 0; // or v0, r0, r0 c->ld(ra, 0, sp); // ld ra, 0(sp) c->lq(gp, 112, sp); // lq gp, 112(sp) c->lq(s5, 96, sp); // lq s5, 96(sp) c->lq(s4, 80, sp); // lq s4, 80(sp) c->lq(s3, 64, sp); // lq s3, 64(sp) c->lq(s2, 48, sp); // lq s2, 48(sp) c->lq(s1, 32, sp); // lq s1, 32(sp) c->lq(s0, 16, sp); // lq s0, 16(sp) //jr ra // jr ra c->daddiu(sp, sp, 128); // daddiu sp, sp, 128 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() { cache.fake_scratchpad_data = intern_from_c("*fake-scratchpad-data*").c(); cache.instance_tie_work_copy = intern_from_c("*instance-tie-work-copy*").c(); cache.wind_work = intern_from_c("*wind-work*").c(); cache.math_camera = intern_from_c("*math-camera*").c(); gLinkedFunctionTable.reg("draw-inline-array-instance-tie", execute, 512); } } // namespace draw_inline_array_instance_tie } // namespace Mips2C //--------------------------MIPS2C--------------------- #include "game/mips2c/mips2c_private.h" namespace Mips2C::jak1 { namespace draw_inline_array_prototype_tie_generic_asm { struct Cache { void* fake_scratchpad_data; // *fake-scratchpad-data* void* prototype_tie_work; // *prototype-tie-work* } cache; void block29_call(ExecutionContext* c) { bool bc; u32 sadr, madr, qwc; // block_29: c->addiu(t6, t6, 32); // addiu t6, t6, 32 c->sw(t5, 232, t0); // sw t5, 232(t0) block_30: c->addiu(t7, a0, 4); // addiu t7, a0, 4 c->addiu(t8, r0, 255); // addiu t8, r0, 255 c->dsubu(t8, t8, t7); // dsubu t8, t8, t7 c->lw(t7, 0, t6); // lw t7, 0(t6) bc = ((s64)c->sgpr64(t8)) >= 0; // bgez t8, L131 c->lhu(t8, 30, t6); // lhu t8, 30(t6) if (bc) {goto block_34;} // branch non-likely /* block_31: c->lw(a1, 0, t1); // lw a1, 0(t1) // nop // sll r0, r0, 0 // nop // sll r0, r0, 0 // nop // sll r0, r0, 0 c->andi(a1, a1, 256); // andi a1, a1, 256 // nop // sll r0, r0, 0 bc = c->sgpr64(a1) == 0; // beq a1, r0, L130 // nop // sll r0, r0, 0 if (bc) {goto block_33;} // branch non-likely // nop // sll r0, r0, 0 c->lw(a1, 284, t0); // lw a1, 284(t0) // nop // sll r0, r0, 0 // nop // sll r0, r0, 0 // nop // sll r0, r0, 0 c->daddiu(a1, a1, 1); // daddiu a1, a1, 1 // nop // sll r0, r0, 0 c->sw(a1, 284, t0); // sw a1, 284(t0) //beq r0, r0, L129 // beq r0, r0, L129 // nop // sll r0, r0, 0 goto block_31; // branch always */ // block_33: // c->sw(t2, 128, t1); // sw t2, 128(t1) sadr = c->sgpr64(t2); c->xori(t2, t2, 4096); // xori t2, t2, 4096 // c->sw(v1, 16, t1); // sw v1, 16(t1) madr = c->sgpr64(v1); c->sll(a1, a0, 4); // sll a1, a0, 4 c->addu(v1, v1, a1); // addu v1, v1, a1 c->mov64(a1, t2); // or a1, t2, r0 // c->sw(a0, 32, t1); // sw a0, 32(t1) qwc = c->sgpr64(a0); c->addiu(a0, r0, 256); // addiu a0, r0, 256 // c->sw(a0, 0, t1); // sw a0, 0(t1) spad_from_dma(cache.fake_scratchpad_data, madr, sadr, qwc); c->addiu(a0, r0, 0); // addiu a0, r0, 0 block_34: // nop // sll r0, r0, 0 c->lhu(t9, 28, t6); // lhu t9, 28(t6) c->daddu(t8, t8, t9); // daddu t8, t8, t9 c->lw(t9, 4, t6); // lw t9, 4(t6) c->daddiu(a0, a0, 4); // daddiu a0, a0, 4 c->lhu(gp, 32, t6); // lhu gp, 32(t6) c->sll(s5, a0, 4); // sll s5, a0, 4 c->sw(t7, 212, t0); // sw t7, 212(t0) c->daddu(t7, s5, v1); // daddu t7, s5, v1 c->sh(t8, 208, t0); // sh t8, 208(t0) // nop // sll r0, r0, 0 c->sw(t7, 220, t0); // sw t7, 220(t0) // nop // sll r0, r0, 0 c->sw(a2, 260, t0); // sw a2, 260(t0) // nop // sll r0, r0, 0 c->sw(t9, 228, t0); // sw t9, 228(t0) // nop // sll r0, r0, 0 c->sh(gp, 224, t0); // sh gp, 224(t0) // nop // sll r0, r0, 0 c->lw(t7, 48, t6); // lw t7, 48(t6) // nop // sll r0, r0, 0 c->lhu(t8, 52, t6); // lhu t8, 52(t6) // nop // sll r0, r0, 0 c->sw(t7, 244, t0); // sw t7, 244(t0) // nop // sll r0, r0, 0 c->sh(t8, 240, t0); // sh t8, 240(t0) // nop // sll r0, r0, 0 c->lq(t7, 208, t0); // lq t7, 208(t0) // nop // sll r0, r0, 0 c->lq(t8, 224, t0); // lq t8, 224(t0) // nop // sll r0, r0, 0 c->lq(t9, 240, t0); // lq t9, 240(t0) // nop // sll r0, r0, 0 c->lq(gp, 256, t0); // lq gp, 256(t0) // nop // sll r0, r0, 0 c->sq(t7, 0, a1); // sq t7, 0(a1) c->daddiu(t5, t5, -1); // daddiu t5, t5, -1 c->sq(t8, 16, a1); // sq t8, 16(a1) c->daddiu(a2, a2, 48); // daddiu a2, a2, 48 c->sq(t9, 32, a1); // sq t9, 32(a1) c->sq(gp, 48, a1); // sq gp, 48(a1) c->daddiu(a1, a1, 64); // daddiu a1, a1, 64 bc = ((s64)c->sgpr64(t5)) > 0; // bgtz t5, L128 c->daddiu(t6, t6, 64); // daddiu t6, t6, 64 if (bc) {goto block_30;} // branch non-likely //jr ra // jr ra // nop // sll r0, r0, 0 } u64 execute(void* ctxt) { auto* c = (ExecutionContext*)ctxt; bool bc = false; u32 madr, sadr, qwc; c->daddiu(sp, sp, -112); // daddiu sp, sp, -112 c->sd(ra, 0, sp); // sd ra, 0(sp) c->sq(s1, 16, sp); // sq s1, 16(sp) c->sq(s2, 32, sp); // sq s2, 32(sp) c->sq(s3, 48, sp); // sq s3, 48(sp) c->sq(s4, 64, sp); // sq s4, 64(sp) c->sq(s5, 80, sp); // sq s5, 80(sp) c->sq(gp, 96, sp); // sq gp, 96(sp) // nop // sll r0, r0, 0 get_fake_spad_addr(a3, cache.fake_scratchpad_data, 0, c);// lui a3, 28672 c->lw(v1, 4, a0); // lw v1, 4(a0) c->lui(t1, 4096); // lui t1, 4096 c->lui(t2, 4096); // lui t2, 4096 // sync.l // cache dxwbin v1, 0 // sync.l // cache dxwbin v1, 1 // sync.l c->load_symbol(t0, cache.prototype_tie_work); // lw t0, *prototype-tie-work*(s7) c->ori(t1, t1, 53248); // ori t1, t1, 53248 c->ori(t4, t2, 54272); // ori t4, t2, 54272 SPR TO c->ori(t3, a3, 16); // ori t3, a3, 16 c->ori(t2, a3, 2064); // ori t2, a3, 2064 c->sw(a0, 10260, a3); // sw a0, 10260(a3) c->daddiu(t7, a1, -1); // daddiu t7, a1, -1 // nop // sll r0, r0, 0 c->lw(t6, 12, a2); // lw t6, 12(a2) c->addiu(a0, r0, 0); // addiu a0, r0, 0 c->mov64(a1, t2); // or a1, t2, r0 block_1: // nop // sll r0, r0, 0 c->lq(t5, 92, t6); // lq t5, 92(t6) c->daddiu(t8, a2, 4); // daddiu t8, a2, 4 c->sw(t7, 10256, a3); // sw t7, 10256(a3) c->dsrl32(a2, t5, 0); // dsrl32 a2, t5, 0 c->sw(t8, 280, t0); // sw t8, 280(t0) c->pcpyud(t7, t5, t5); // pcpyud t7, t5, t5 c->lw(t9, 140, t6); // lw t9, 140(t6) c->or_(t7, a2, t7); // or t7, a2, t7 c->lw(a2, 108, t6); // lw a2, 108(t6) bc = c->sgpr64(t7) == 0; // beq t7, r0, L126 c->lw(t8, 4, a3); // lw t8, 4(a3) if (bc) {goto block_27;} // branch non-likely // nop // sll r0, r0, 0 c->lq(t7, 12, t6); // lq t7, 12(t6) // nop // sll r0, r0, 0 c->sq(t5, 10272, a3); // sq t5, 10272(a3) // nop // sll r0, r0, 0 c->sw(a2, 10304, a3); // sw a2, 10304(a3) // nop // sll r0, r0, 0 c->sq(t7, 10288, a3); // sq t7, 10288(a3) // nop // sll r0, r0, 0 c->ld(a2, 272, t0); // ld a2, 272(t0) // nop // sll r0, r0, 0 c->lw(t7, 4, t9); // lw t7, 4(t9) c->daddiu(ra, t9, 12); // daddiu ra, t9, 12 c->lq(t5, 1852, t8); // lq t5, 1852(t8) c->sra(t9, t7, 2); // sra t9, t7, 2 // nop // sll r0, r0, 0 c->addu(t9, t9, a0); // addu t9, t9, a0 c->addiu(gp, r0, 221); // addiu gp, r0, 221 c->dsubu(t9, gp, t9); // dsubu t9, gp, t9 // nop // sll r0, r0, 0 bc = ((s64)c->sgpr64(t9)) >= 0; // bgez t9, L114 // nop // sll r0, r0, 0 if (bc) {goto block_6;} // branch non-likely /* block_3: c->lw(a1, 0, t1); // lw a1, 0(t1) // nop // sll r0, r0, 0 // nop // sll r0, r0, 0 // nop // sll r0, r0, 0 c->andi(a1, a1, 256); // andi a1, a1, 256 // nop // sll r0, r0, 0 bc = c->sgpr64(a1) == 0; // beq a1, r0, L113 // nop // sll r0, r0, 0 if (bc) {goto block_5;} // branch non-likely // nop // sll r0, r0, 0 c->lw(a1, 284, t0); // lw a1, 284(t0) // nop // sll r0, r0, 0 // nop // sll r0, r0, 0 // nop // sll r0, r0, 0 c->daddiu(a1, a1, 1); // daddiu a1, a1, 1 // nop // sll r0, r0, 0 c->sw(a1, 284, t0); // sw a1, 284(t0) //beq r0, r0, L112 // beq r0, r0, L112 // nop // sll r0, r0, 0 goto block_3; // branch always */ // block_5: // c->sw(t2, 128, t1); // sw t2, 128(t1) sadr = c->sgpr64(t2); c->xori(t2, t2, 4096); // xori t2, t2, 4096 // c->sw(v1, 16, t1); // sw v1, 16(t1) madr = c->sgpr64(v1); c->sll(a1, a0, 4); // sll a1, a0, 4 c->addu(v1, v1, a1); // addu v1, v1, a1 c->mov64(a1, t2); // or a1, t2, r0 // c->sw(a0, 32, t1); // sw a0, 32(t1) qwc = c->sgpr64(a0); c->addiu(a0, r0, 256); // addiu a0, r0, 256 // c->sw(a0, 0, t1); // sw a0, 0(t1) spad_from_dma(cache.fake_scratchpad_data, madr, sadr, qwc); c->addiu(a0, r0, 0); // addiu a0, r0, 0 block_6: c->addiu(t7, t7, 31); // addiu t7, t7, 31 c->lw(t6, 132, t6); // lw t6, 132(t6) c->sra(t7, t7, 5); // sra t7, t7, 5 c->addiu(a0, a0, 1); // addiu a0, a0, 1 c->sll(t7, t7, 3); // sll t7, t7, 3 c->sw(t6, 200, t0); // sw t6, 200(t0) c->addu(a0, a0, t7); // addu a0, a0, t7 c->sh(t7, 192, t0); // sh t7, 192(t0) c->sll(t9, t7, 2); // sll t9, t7, 2 c->lq(t6, 1868, t8); // lq t6, 1868(t8) // nop // sll r0, r0, 0 c->lq(gp, 192, t0); // lq gp, 192(t0) // nop // sll r0, r0, 0 c->lq(t7, 1884, t8); // lq t7, 1884(t8) // nop // sll r0, r0, 0 c->sq(gp, 0, a1); // sq gp, 0(a1) c->addiu(a1, a1, 16); // addiu a1, a1, 16 c->lq(t8, 1900, t8); // lq t8, 1900(t8) /* block_7: c->lw(gp, 0, t4); // lw gp, 0(t4) // nop // sll r0, r0, 0 // nop // sll r0, r0, 0 // nop // sll r0, r0, 0 c->andi(gp, gp, 256); // andi gp, gp, 256 // nop // sll r0, r0, 0 bc = c->sgpr64(gp) == 0; // beq gp, r0, L116 // nop // sll r0, r0, 0 if (bc) {goto block_9;} // branch non-likely // nop // sll r0, r0, 0 c->lw(gp, 288, t0); // lw gp, 288(t0) // nop // sll r0, r0, 0 // nop // sll r0, r0, 0 // nop // sll r0, r0, 0 c->daddiu(gp, gp, 1); // daddiu gp, gp, 1 // nop // sll r0, r0, 0 c->sw(gp, 288, t0); // sw gp, 288(t0) //beq r0, r0, L115 // beq r0, r0, L115 // nop // sll r0, r0, 0 goto block_7; // branch always */ // block_9: // c->sw(ra, 16, t4); // sw ra, 16(t4) madr = c->sgpr64(ra); c->daddiu(t9, t9, -32); // daddiu t9, t9, -32 // c->sw(t3, 128, t4); // sw t3, 128(t4) sadr = c->sgpr64(t3); c->addiu(gp, r0, 64); // addiu gp, r0, 64 // c->sw(gp, 32, t4); // sw gp, 32(t4) qwc = c->sgpr64(gp); c->addiu(gp, r0, 256); // addiu gp, r0, 256 // c->sw(gp, 0, t4); // sw gp, 0(t4) spad_to_dma(cache.fake_scratchpad_data, madr, sadr, qwc); c->daddiu(ra, ra, 1024); // daddiu ra, ra, 1024 block_10: c->mov64(s5, t3); // or s5, t3, r0 c->xori(t3, t3, 1024); // xori t3, t3, 1024 bc = ((s64)c->sgpr64(t9)) <= 0; // blez t9, L120 c->daddiu(t9, t9, -32); // daddiu t9, t9, -32 if (bc) {goto block_14;} // branch non-likely /* block_11: c->lw(gp, 0, t4); // lw gp, 0(t4) // nop // sll r0, r0, 0 // nop // sll r0, r0, 0 // nop // sll r0, r0, 0 c->andi(gp, gp, 256); // andi gp, gp, 256 // nop // sll r0, r0, 0 bc = c->sgpr64(gp) == 0; // beq gp, r0, L119 // nop // sll r0, r0, 0 if (bc) {goto block_13;} // branch non-likely // nop // sll r0, r0, 0 c->lw(gp, 288, t0); // lw gp, 288(t0) // nop // sll r0, r0, 0 // nop // sll r0, r0, 0 // nop // sll r0, r0, 0 c->daddiu(gp, gp, 1); // daddiu gp, gp, 1 // nop // sll r0, r0, 0 c->sw(gp, 288, t0); // sw gp, 288(t0) //beq r0, r0, L118 // beq r0, r0, L118 // nop // sll r0, r0, 0 goto block_11; // branch always */ // block_13: // c->sw(ra, 16, t4); // sw ra, 16(t4) madr = c->sgpr64(ra); // nop // sll r0, r0, 0 // c->sw(t3, 128, t4); // sw t3, 128(t4) sadr = c->sgpr64(t3); c->addiu(gp, r0, 64); // addiu gp, r0, 64 // c->sw(gp, 32, t4); // sw gp, 32(t4) qwc = c->sgpr64(gp); c->addiu(gp, r0, 256); // addiu gp, r0, 256 // c->sw(gp, 0, t4); // sw gp, 0(t4) spad_to_dma(cache.fake_scratchpad_data, madr, sadr, qwc); c->daddiu(ra, ra, 1024); // daddiu ra, ra, 1024 //beq r0, r0, L121 // beq r0, r0, L121 // nop // sll r0, r0, 0 goto block_16; // branch always block_14: /* c->lw(gp, 0, t4); // lw gp, 0(t4) // nop // sll r0, r0, 0 // nop // sll r0, r0, 0 // nop // sll r0, r0, 0 c->andi(gp, gp, 256); // andi gp, gp, 256 // nop // sll r0, r0, 0 bc = c->sgpr64(gp) == 0; // beq gp, r0, L121 // nop // sll r0, r0, 0 if (bc) {goto block_16;} // branch non-likely // nop // sll r0, r0, 0 c->lw(gp, 288, t0); // lw gp, 288(t0) // nop // sll r0, r0, 0 // nop // sll r0, r0, 0 // nop // sll r0, r0, 0 c->daddiu(gp, gp, 1); // daddiu gp, gp, 1 // nop // sll r0, r0, 0 c->sw(gp, 288, t0); // sw gp, 288(t0) //beq r0, r0, L120 // beq r0, r0, L120 // nop // sll r0, r0, 0 goto block_14; // branch always */ block_16: c->addiu(gp, a1, 128); // addiu gp, a1, 128 c->lq(s2, 12, s5); // lq s2, 12(s5) // nop // sll r0, r0, 0 c->lq(s4, 28, s5); // lq s4, 28(s5) c->pextlb(s3, r0, s2); // pextlb s3, r0, s2 c->mfc1(r0, f31); // mfc1 r0, f31 c->pextub(s2, r0, s2); // pextub s2, r0, s2 c->mfc1(r0, f31); // mfc1 r0, f31 c->pmulth(r0, s3, t5); // pmulth r0, s3, t5 c->mfc1(r0, f31); // mfc1 r0, f31 c->pextlb(s3, r0, s4); // pextlb s3, r0, s4 c->mfc1(r0, f31); // mfc1 r0, f31 c->pmaddh(r0, s2, t6); // pmaddh r0, s2, t6 c->mfc1(r0, f31); // mfc1 r0, f31 c->pextub(s4, r0, s4); // pextub s4, r0, s4 c->mfc1(r0, f31); // mfc1 r0, f31 c->pmaddh(r0, s3, t7); // pmaddh r0, s3, t7 c->lq(s3, 44, s5); // lq s3, 44(s5) c->addiu(s5, s5, 32); // addiu s5, s5, 32 // nop // sll r0, r0, 0 c->pmaddh(r0, s4, t8); // pmaddh r0, s4, t8 c->lq(s4, 28, s5); // lq s4, 28(s5) c->pextlb(s2, r0, s3); // pextlb s2, r0, s3 c->mfc1(r0, f31); // mfc1 r0, f31 block_17: c->pextub(s3, r0, s3); // pextub s3, r0, s3 c->mfc1(r0, f31); // mfc1 r0, f31 c->pmfhl_lh(s1); // pmfhl.lh s1 c->mfc1(r0, f31); // mfc1 r0, f31 c->pmulth(r0, s2, t5); // pmulth r0, s2, t5 c->mfc1(r0, f31); // mfc1 r0, f31 c->psrlh(s2, s1, 6); // psrlh s2, s1, 6 c->mfc1(r0, f31); // mfc1 r0, f31 c->pcpyud(s1, s2, s2); // pcpyud s1, s2, s2 c->mfc1(r0, f31); // mfc1 r0, f31 c->paddh(s2, s1, s2); // paddh s2, s1, s2 c->mfc1(r0, f31); // mfc1 r0, f31 c->pminh(s2, s2, a2); // pminh s2, s2, a2 c->mfc1(r0, f31); // mfc1 r0, f31 c->ppacb(s1, r0, s2); // ppacb s1, r0, s2 c->mfc1(r0, f31); // mfc1 r0, f31 c->pextlb(s2, r0, s4); // pextlb s2, r0, s4 c->mfc1(r0, f31); // mfc1 r0, f31 c->pmaddh(r0, s3, t6); // pmaddh r0, s3, t6 c->sw(s1, 0, a1); // sw s1, 0(a1) c->pextub(s4, r0, s4); // pextub s4, r0, s4 c->mfc1(r0, f31); // mfc1 r0, f31 c->pmaddh(r0, s2, t7); // pmaddh r0, s2, t7 c->lq(s3, 44, s5); // lq s3, 44(s5) c->addiu(s5, s5, 32); // addiu s5, s5, 32 c->addiu(a1, a1, 4); // addiu a1, a1, 4 c->pmaddh(r0, s4, t8); // pmaddh r0, s4, t8 c->lq(s4, 28, s5); // lq s4, 28(s5) bc = c->sgpr64(a1) != c->sgpr64(gp); // bne a1, gp, L122 c->pextlb(s2, r0, s3); // pextlb s2, r0, s3 if (bc) {goto block_17;} // branch non-likely bc = ((s64)c->sgpr64(t9)) >= 0; // bgez t9, L117 // nop // sll r0, r0, 0 if (bc) {goto block_10;} // branch non-likely // nop // sll r0, r0, 0 c->lw(a2, 10272, a3); // lw a2, 10272(a3) // nop // sll r0, r0, 0 c->lw(t6, 10292, a3); // lw t6, 10292(a3) bc = c->sgpr64(a2) == 0; // beq a2, r0, L123 c->lbu(t5, 10305, a3); // lbu t5, 10305(a3) if (bc) {goto block_21;} // branch non-likely // Unknown instr: bgezal r0, L127 block29_call(c); // nop // sll r0, r0, 0 block_21: // nop // sll r0, r0, 0 c->lw(a2, 10276, a3); // lw a2, 10276(a3) // nop // sll r0, r0, 0 c->lw(t6, 10292, a3); // lw t6, 10292(a3) bc = c->sgpr64(a2) == 0; // beq a2, r0, L124 c->lbu(t5, 10305, a3); // lbu t5, 10305(a3) if (bc) {goto block_23;} // branch non-likely // Unknown instr: bgezal r0, L127 // nop // sll r0, r0, 0 block29_call(c); block_23: // nop // sll r0, r0, 0 c->lw(a2, 10280, a3); // lw a2, 10280(a3) // nop // sll r0, r0, 0 c->lw(t6, 10296, a3); // lw t6, 10296(a3) bc = c->sgpr64(a2) == 0; // beq a2, r0, L125 c->lbu(t5, 10306, a3); // lbu t5, 10306(a3) if (bc) {goto block_25;} // branch non-likely // Unknown instr: bgezal r0, L127 // nop // sll r0, r0, 0 block29_call(c); block_25: // nop // sll r0, r0, 0 c->lw(a2, 10284, a3); // lw a2, 10284(a3) // nop // sll r0, r0, 0 c->lw(t6, 10300, a3); // lw t6, 10300(a3) bc = c->sgpr64(a2) == 0; // beq a2, r0, L126 c->lbu(t5, 10307, a3); // lbu t5, 10307(a3) if (bc) {goto block_27;} // branch non-likely // Unknown instr: bgezal r0, L127 // nop // sll r0, r0, 0 block29_call(c); block_27: // nop // sll r0, r0, 0 c->lw(a2, 280, t0); // lw a2, 280(t0) // nop // sll r0, r0, 0 c->lw(t5, 10256, a3); // lw t5, 10256(a3) // nop // sll r0, r0, 0 c->lw(t6, 12, a2); // lw t6, 12(a2) // nop // sll r0, r0, 0 c->sw(r0, -56, a1); // sw r0, -56(a1) bc = c->sgpr64(t5) != 0; // bne t5, r0, L111 c->daddiu(t7, t5, -1); // daddiu t7, t5, -1 if (bc) {goto block_1;} // branch non-likely //beq r0, r0, L132 // beq r0, r0, L132 c->sw(r0, -52, a1); // sw r0, -52(a1) goto block_36; // branch always ASSERT(false); block_36: bc = c->sgpr64(a0) == 0; // beq a0, r0, L135 // nop // sll r0, r0, 0 if (bc) {goto block_40;} // branch non-likely /* block_37: c->lw(a1, 0, t1); // lw a1, 0(t1) // nop // sll r0, r0, 0 // nop // sll r0, r0, 0 // nop // sll r0, r0, 0 c->andi(a1, a1, 256); // andi a1, a1, 256 // nop // sll r0, r0, 0 bc = c->sgpr64(a1) == 0; // beq a1, r0, L134 // nop // sll r0, r0, 0 if (bc) {goto block_39;} // branch non-likely // nop // sll r0, r0, 0 c->lw(a1, 284, t0); // lw a1, 284(t0) // nop // sll r0, r0, 0 // nop // sll r0, r0, 0 // nop // sll r0, r0, 0 c->daddiu(a1, a1, 1); // daddiu a1, a1, 1 // nop // sll r0, r0, 0 c->sw(a1, 284, t0); // sw a1, 284(t0) //beq r0, r0, L133 // beq r0, r0, L133 // nop // sll r0, r0, 0 goto block_37; // branch always */ // block_39: // c->sw(t2, 128, t1); // sw t2, 128(t1) sadr = c->sgpr64(t2); // nop // sll r0, r0, 0 // c->sw(v1, 16, t1); // sw v1, 16(t1) madr = c->sgpr64(v1); c->sll(a1, a0, 4); // sll a1, a0, 4 c->addu(v1, v1, a1); // addu v1, v1, a1 // nop // sll r0, r0, 0 // c->sw(a0, 32, t1); // sw a0, 32(t1) qwc = c->sgpr64(a0); c->addiu(a0, r0, 256); // addiu a0, r0, 256 // c->sw(a0, 0, t1); // sw a0, 0(t1) spad_from_dma(cache.fake_scratchpad_data, madr, sadr, qwc); // nop // sll r0, r0, 0 block_40: /* c->lw(a0, 0, t1); // lw a0, 0(t1) // nop // sll r0, r0, 0 // nop // sll r0, r0, 0 // nop // sll r0, r0, 0 c->andi(a0, a0, 256); // andi a0, a0, 256 // nop // sll r0, r0, 0 bc = c->sgpr64(a0) == 0; // beq a0, r0, L136 // nop // sll r0, r0, 0 if (bc) {goto block_42;} // branch non-likely // nop // sll r0, r0, 0 c->lw(a0, 284, t0); // lw a0, 284(t0) // nop // sll r0, r0, 0 // nop // sll r0, r0, 0 // nop // sll r0, r0, 0 c->daddiu(a0, a0, 1); // daddiu a0, a0, 1 // nop // sll r0, r0, 0 c->sw(a0, 284, t0); // sw a0, 284(t0) //beq r0, r0, L135 // beq r0, r0, L135 // nop // sll r0, r0, 0 goto block_40; // branch always */ // block_42: c->lw(a0, 10260, a3); // lw a0, 10260(a3) // nop // sll r0, r0, 0 c->sw(v1, 4, a0); // sw v1, 4(a0) // nop // sll r0, r0, 0 c->gprs[v0].du64[0] = 0; // or v0, r0, r0 c->ld(ra, 0, sp); // ld ra, 0(sp) c->lq(gp, 96, sp); // lq gp, 96(sp) c->lq(s5, 80, sp); // lq s5, 80(sp) c->lq(s4, 64, sp); // lq s4, 64(sp) c->lq(s3, 48, sp); // lq s3, 48(sp) c->lq(s2, 32, sp); // lq s2, 32(sp) c->lq(s1, 16, sp); // lq s1, 16(sp) //jr ra // jr ra c->daddiu(sp, sp, 112); // daddiu sp, sp, 112 goto end_of_function; // return // nop // sll r0, r0, 0 // nop // sll r0, r0, 0 end_of_function: return c->gprs[v0].du64[0]; } void link() { cache.fake_scratchpad_data = intern_from_c("*fake-scratchpad-data*").c(); cache.prototype_tie_work = intern_from_c("*prototype-tie-work*").c(); gLinkedFunctionTable.reg("draw-inline-array-prototype-tie-generic-asm", execute, 256); } } // namespace draw_inline_array_prototype_tie_generic_asm } // namespace Mips2C