From 0de650cd317e8f306b7429e3615a1e46ad53be32 Mon Sep 17 00:00:00 2001 From: water111 Date: Sun, 30 Aug 2026 21:47:20 -0700 Subject: [PATCH] remove more mips2c --- game/CMakeLists.txt | 5 +- game/mips2c/jak1_functions/draw_string.cpp | 1623 ----------------- game/mips2c/jak1_functions/sparticle.cpp | 690 ------- .../jak1_functions/sparticle_launcher.cpp | 841 --------- game/mips2c/mips2c_table.cpp | 10 +- 5 files changed, 3 insertions(+), 3166 deletions(-) delete mode 100644 game/mips2c/jak1_functions/draw_string.cpp delete mode 100644 game/mips2c/jak1_functions/sparticle.cpp delete mode 100644 game/mips2c/jak1_functions/sparticle_launcher.cpp diff --git a/game/CMakeLists.txt b/game/CMakeLists.txt index e0fcfb9bba..a6a2de4664 100644 --- a/game/CMakeLists.txt +++ b/game/CMakeLists.txt @@ -156,23 +156,22 @@ set(RUNTIME_SOURCE kernel/jakx/kscheme.cpp kernel/jakx/ksocket.cpp kernel/jakx/ksound.cpp + mips2c/jak1_functions/bones.cpp mips2c/jak1_functions/collide_cache.cpp mips2c/jak1_functions/collide_edge_grab.cpp mips2c/jak1_functions/collide_mesh.cpp mips2c/jak1_functions/collide_probe.cpp - mips2c/jak1_functions/draw_string.cpp mips2c/jak1_functions/generic_merc.cpp mips2c/jak1_functions/merc_blend_shape.cpp mips2c/jak1_functions/ocean_vu0.cpp mips2c/jak1_functions/ocean.cpp mips2c/jak1_functions/shadow.cpp mips2c/jak1_functions/sky_tng.cpp - mips2c/jak1_functions/sparticle_launcher.cpp - mips2c/jak1_functions/sparticle.cpp mips2c/jak1_functions/test_func.cpp mips2c/jak1_functions/texture.cpp mips2c/jak1_functions/time_of_day.cpp + mips2c/jak2_functions/bones.cpp mips2c/jak2_functions/collide_cache.cpp mips2c/jak2_functions/collide_edge_grab.cpp diff --git a/game/mips2c/jak1_functions/draw_string.cpp b/game/mips2c/jak1_functions/draw_string.cpp deleted file mode 100644 index a24034277b..0000000000 --- a/game/mips2c/jak1_functions/draw_string.cpp +++ /dev/null @@ -1,1623 +0,0 @@ -//--------------------------MIPS2C--------------------- -// clang-format off -#include "game/mips2c/mips2c_private.h" -#include "game/kernel/jak1/kscheme.h" -using namespace jak1; -namespace Mips2C::jak1 { -namespace draw_string { -struct Cache { - void* font_work; // *font-work* - void* font12_table; // *font12-table* - void* font24_table; // *font24-table* - void* math_camera; // *math-camera* - void* video_parms; // *video-parms* -} cache; - -u64 execute(void* ctxt) { - auto* c = (ExecutionContext*)ctxt; - bool bc = false; c->load_symbol(v1, cache.math_camera); // lw v1, *math-camera*(s7) - c->lqc2(vf26, 732, v1); // lqc2 vf26, 732(v1) - c->lqc2(vf27, 732, v1); // lqc2 vf27, 732(v1) - c->vadd_bc(DEST::xy, BC::w, vf26, vf26, vf0); // vaddw.xy vf26, vf26, vf0 - c->vadd_bc(DEST::x, BC::w, vf26, vf26, vf0); // vaddw.x vf26, vf26, vf0 - c->lw(v1, 72, a2); // lw v1, 72(a2) - c->lqc2(vf25, 44, a2); // lqc2 vf25, 44(a2) - c->lqc2(vf23, 12, a2); // lqc2 vf23, 12(a2) - c->lqc2(vf24, 12, a2); // lqc2 vf24, 12(a2) - c->lqc2(vf28, 0, v1); // lqc2 vf28, 0(v1) - c->lqc2(vf29, 16, v1); // lqc2 vf29, 16(v1) - c->lqc2(vf30, 32, v1); // lqc2 vf30, 32(v1) - c->lqc2(vf31, 48, v1); // lqc2 vf31, 48(v1) - c->load_symbol(v1, cache.video_parms); // lw v1, *video-parms*(s7) - c->mov64(v1, v1); // or v1, v1, r0 - c->lqc2(vf1, 64, v1); // lqc2 vf1, 64(v1) - c->vmul(DEST::xy, vf25, vf25, vf1); // vmul.xy vf25, vf25, vf1 - c->vmul(DEST::xy, vf23, vf23, vf1); // vmul.xy vf23, vf23, vf1 - c->vmul(DEST::xy, vf24, vf24, vf1); // vmul.xy vf24, vf24, vf1 - c->load_symbol(v1, cache.font_work); // lw v1, *font-work*(s7) - c->mov64(v1, v1); // or v1, v1, r0 - c->sw(a1, 3024, v1); // sw a1, 3024(v1) - c->lw(a1, 4, a1); // lw a1, 4(a1) - c->sw(a0, 3028, v1); // sw a0, 3028(v1) - c->lw(t2, 68, a2); // lw t2, 68(a2) - c->vmove(DEST::xyzw, vf1, vf0); // vmove.xyzw vf1, vf0 - c->vmove(DEST::xyzw, vf2, vf0); // vmove.xyzw vf2, vf0 - c->vmove(DEST::xyzw, vf3, vf0); // vmove.xyzw vf3, vf0 - c->vmove(DEST::xyzw, vf4, vf0); // vmove.xyzw vf4, vf0 - c->sw(t2, 3032, v1); // sw t2, 3032(v1) - c->lqc2(vf16, 240, v1); // lqc2 vf16, 240(v1) - c->lqc2(vf17, 256, v1); // lqc2 vf17, 256(v1) - c->lqc2(vf18, 272, v1); // lqc2 vf18, 272(v1) - c->andi(a3, t2, 32); // andi a3, t2, 32 - // nop // sll r0, r0, 0 - bc = c->sgpr64(a3) != 0; // bne a3, r0, L22 - c->load_symbol(a3, cache.font12_table); // lw a3, *font12-table*(s7) - if (bc) {goto block_2;} // branch non-likely - - c->mov64(a3, a3); // or a3, a3, r0 - // nop // sll r0, r0, 0 - c->lqc2(vf13, 144, v1); // lqc2 vf13, 144(v1) - // nop // sll r0, r0, 0 - c->lqc2(vf14, 160, v1); // lqc2 vf14, 160(v1) - // nop // sll r0, r0, 0 - c->lqc2(vf15, 176, v1); // lqc2 vf15, 176(v1) - // nop // sll r0, r0, 0 - c->lq(t0, 80, v1); // lq t0, 80(v1) - //beq r0, r0, L23 // beq r0, r0, L23 - c->lq(t1, 96, v1); // lq t1, 96(v1) - goto block_3; // branch always - - - block_2: - // nop // sll r0, r0, 0 - c->load_symbol(a3, cache.font24_table); // lw a3, *font24-table*(s7) - c->mov64(a3, a3); // or a3, a3, r0 - // nop // sll r0, r0, 0 - c->lqc2(vf13, 192, v1); // lqc2 vf13, 192(v1) - // nop // sll r0, r0, 0 - c->lqc2(vf14, 208, v1); // lqc2 vf14, 208(v1) - // nop // sll r0, r0, 0 - c->lqc2(vf15, 224, v1); // lqc2 vf15, 224(v1) - // nop // sll r0, r0, 0 - c->lq(t0, 112, v1); // lq t0, 112(v1) - // nop // sll r0, r0, 0 - c->lq(t1, 128, v1); // lq t1, 128(v1) - - block_3: - c->lw(t3, 60, a2); // lw t3, 60(a2) - // nop // sll r0, r0, 0 - c->sw(t3, 3008, v1); // sw t3, 3008(v1) - // nop // sll r0, r0, 0 - c->sll(t3, t3, 4); // sll t3, t3, 4 - // nop // sll r0, r0, 0 - c->daddu(t4, t3, v1); // daddu t4, t3, v1 - // nop // sll r0, r0, 0 - // nop // sll r0, r0, 0 - c->lwu(t3, 1984, t4); // lwu t3, 1984(t4) - // nop // sll r0, r0, 0 - c->lwu(t5, 1988, t4); // lwu t5, 1988(t4) - c->pextlb(t6, r0, t3); // pextlb t6, r0, t3 - c->lwu(t3, 1992, t4); // lwu t3, 1992(t4) - c->pextlh(t6, r0, t6); // pextlh t6, r0, t6 - c->lwu(t4, 1996, t4); // lwu t4, 1996(t4) - c->pextlb(t5, r0, t5); // pextlb t5, r0, t5 - c->sq(t6, 432, v1); // sq t6, 432(v1) - c->pextlh(t5, r0, t5); // pextlh t5, r0, t5 - c->sq(t6, 816, v1); // sq t6, 816(v1) - c->pextlb(t3, r0, t3); // pextlb t3, r0, t3 - c->sq(t5, 448, v1); // sq t5, 448(v1) - c->pextlh(t3, r0, t3); // pextlh t3, r0, t3 - c->sq(t5, 832, v1); // sq t5, 832(v1) - c->pextlb(t4, r0, t4); // pextlb t4, r0, t4 - c->sq(t3, 464, v1); // sq t3, 464(v1) - c->pextlh(t4, r0, t4); // pextlh t4, r0, t4 - c->sq(t3, 848, v1); // sq t3, 848(v1) - // nop // sll r0, r0, 0 - c->sq(t4, 480, v1); // sq t4, 480(v1) - // nop // sll r0, r0, 0 - c->sq(t4, 864, v1); // sq t4, 864(v1) - c->mov64(t3, v1); // or t3, v1, r0 - // nop // sll r0, r0, 0 - - block_4: - c->lbu(t4, 4, a0); // lbu t4, 4(a0) - c->daddiu(a0, a0, 1); // daddiu a0, a0, 1 - bc = c->sgpr64(t4) == 0; // beq t4, r0, L47 - c->daddiu(t5, t4, -1); // daddiu t5, t4, -1 - if (bc) {goto block_67;} // branch non-likely - - bc = c->sgpr64(t5) == 0; // beq t5, r0, L39 - c->daddiu(t5, t4, -126); // daddiu t5, t4, -126 - if (bc) {goto block_54;} // branch non-likely - - bc = c->sgpr64(t5) != 0; // bne t5, r0, L40 - // nop // sll r0, r0, 0 - if (bc) {goto block_55;} // branch non-likely - - c->lbu(t4, 4, a0); // lbu t4, 4(a0) - c->daddiu(a0, a0, 1); // daddiu a0, a0, 1 - c->addiu(t5, r0, 0); // addiu t5, r0, 0 - c->addiu(t6, r0, 0); // addiu t6, r0, 0 - bc = c->sgpr64(t4) == 0; // beq t4, r0, L47 - c->daddiu(t7, t4, -43); // daddiu t7, t4, -43 - if (bc) {goto block_67;} // branch non-likely - - c->movz(t5, t4, t7); // movz t5, t4, t7 - c->daddiu(t7, t4, -45); // daddiu t7, t4, -45 - c->movz(t5, t4, t7); // movz t5, t4, t7 - // nop // sll r0, r0, 0 - bc = c->sgpr64(t5) != 0; // bne t5, r0, L25 - c->daddiu(t7, t4, -121); // daddiu t7, t4, -121 - if (bc) {goto block_15;} // branch non-likely - - bc = c->sgpr64(t7) == 0; // beq t7, r0, L37 - c->daddiu(t6, t4, -89); // daddiu t6, t4, -89 - if (bc) {goto block_52;} // branch non-likely - - bc = c->sgpr64(t6) == 0; // beq t6, r0, L37 - c->daddiu(t6, t4, -122); // daddiu t6, t4, -122 - if (bc) {goto block_52;} // branch non-likely - - bc = c->sgpr64(t6) == 0; // beq t6, r0, L38 - c->daddiu(t6, t4, -90); // daddiu t6, t4, -90 - if (bc) {goto block_53;} // branch non-likely - - bc = c->sgpr64(t6) == 0; // beq t6, r0, L38 - c->daddiu(t6, t4, -48); // daddiu t6, t4, -48 - if (bc) {goto block_53;} // branch non-likely - - bc = ((s64)c->sgpr64(t6)) < 0; // bltz t6, L40 - c->daddiu(t6, t4, -57); // daddiu t6, t4, -57 - if (bc) {goto block_55;} // branch non-likely - - bc = ((s64)c->sgpr64(t6)) > 0; // bgtz t6, L40 - c->daddiu(t6, t4, -48); // daddiu t6, t4, -48 - if (bc) {goto block_55;} // branch non-likely - - - block_15: - c->lbu(t4, 4, a0); // lbu t4, 4(a0) - c->daddiu(a0, a0, 1); // daddiu a0, a0, 1 - bc = c->sgpr64(t4) == 0; // beq t4, r0, L47 - c->daddiu(t7, t4, -110); // daddiu t7, t4, -110 - if (bc) {goto block_67;} // branch non-likely - - bc = c->sgpr64(t7) == 0; // beq t7, r0, L26 - c->daddiu(t7, t4, -78); // daddiu t7, t4, -78 - if (bc) {goto block_33;} // branch non-likely - - bc = c->sgpr64(t7) == 0; // beq t7, r0, L26 - c->daddiu(t7, t4, -108); // daddiu t7, t4, -108 - if (bc) {goto block_33;} // branch non-likely - - bc = c->sgpr64(t7) == 0; // beq t7, r0, L24 - c->daddiu(t7, t4, -76); // daddiu t7, t4, -76 - if (bc) {goto block_4;} // branch non-likely - - bc = c->sgpr64(t7) == 0; // beq t7, r0, L24 - c->daddiu(t7, t4, -119); // daddiu t7, t4, -119 - if (bc) {goto block_4;} // branch non-likely - - bc = c->sgpr64(t7) == 0; // beq t7, r0, L24 - c->daddiu(t7, t4, -87); // daddiu t7, t4, -87 - if (bc) {goto block_4;} // branch non-likely - - bc = c->sgpr64(t7) == 0; // beq t7, r0, L24 - c->daddiu(t7, t4, -107); // daddiu t7, t4, -107 - if (bc) {goto block_4;} // branch non-likely - - bc = c->sgpr64(t7) == 0; // beq t7, r0, L28 - c->daddiu(t7, t4, -75); // daddiu t7, t4, -75 - if (bc) {goto block_36;} // branch non-likely - - bc = c->sgpr64(t7) == 0; // beq t7, r0, L28 - c->daddiu(t7, t4, -106); // daddiu t7, t4, -106 - if (bc) {goto block_36;} // branch non-likely - - bc = c->sgpr64(t7) == 0; // beq t7, r0, L29 - c->daddiu(t7, t4, -74); // daddiu t7, t4, -74 - if (bc) {goto block_38;} // branch non-likely - - bc = c->sgpr64(t7) == 0; // beq t7, r0, L29 - c->daddiu(t7, t4, -104); // daddiu t7, t4, -104 - if (bc) {goto block_38;} // branch non-likely - - bc = c->sgpr64(t7) == 0; // beq t7, r0, L31 - c->daddiu(t7, t4, -72); // daddiu t7, t4, -72 - if (bc) {goto block_42;} // branch non-likely - - bc = c->sgpr64(t7) == 0; // beq t7, r0, L31 - c->daddiu(t7, t4, -118); // daddiu t7, t4, -118 - if (bc) {goto block_42;} // branch non-likely - - bc = c->sgpr64(t7) == 0; // beq t7, r0, L34 - c->daddiu(t7, t4, -86); // daddiu t7, t4, -86 - if (bc) {goto block_47;} // branch non-likely - - bc = c->sgpr64(t7) == 0; // beq t7, r0, L34 - c->daddiu(t7, t4, -48); // daddiu t7, t4, -48 - if (bc) {goto block_47;} // branch non-likely - - bc = ((s64)c->sgpr64(t7)) < 0; // bltz t7, L40 - c->daddiu(t8, t4, -57); // daddiu t8, t4, -57 - if (bc) {goto block_55;} // branch non-likely - - bc = ((s64)c->sgpr64(t8)) > 0; // bgtz t8, L40 - c->sll(t8, t6, 2); // sll t8, t6, 2 - if (bc) {goto block_55;} // branch non-likely - - c->daddu(t4, t6, t8); // daddu t4, t6, t8 - // nop // sll r0, r0, 0 - c->sll(t4, t4, 1); // sll t4, t4, 1 - // nop // sll r0, r0, 0 - //beq r0, r0, L25 // beq r0, r0, L25 - c->daddu(t6, t4, t7); // daddu t6, t4, t7 - goto block_15; // branch always - - - block_33: - bc = c->sgpr64(t6) != 0; // bne t6, r0, L27 - c->addiu(t0, r0, -33); // addiu t0, r0, -33 - if (bc) {goto block_35;} // branch non-likely - - c->load_symbol(a3, cache.font12_table); // lw a3, *font12-table*(s7) - c->mov64(a3, a3); // or a3, a3, r0 - c->lqc2(vf13, 144, v1); // lqc2 vf13, 144(v1) - // nop // sll r0, r0, 0 - c->lqc2(vf14, 160, v1); // lqc2 vf14, 160(v1) - // nop // sll r0, r0, 0 - c->lqc2(vf15, 176, v1); // lqc2 vf15, 176(v1) - c->and_(t2, t2, t0); // and t2, t2, t0 - c->lq(t0, 80, v1); // lq t0, 80(v1) - //beq r0, r0, L24 // beq r0, r0, L24 - c->lq(t1, 96, v1); // lq t1, 96(v1) - goto block_4; // branch always - - - block_35: - // nop // sll r0, r0, 0 - c->load_symbol(a3, cache.font24_table); // lw a3, *font24-table*(s7) - c->mov64(a3, a3); // or a3, a3, r0 - // nop // sll r0, r0, 0 - c->lqc2(vf13, 192, v1); // lqc2 vf13, 192(v1) - // nop // sll r0, r0, 0 - c->lqc2(vf14, 208, v1); // lqc2 vf14, 208(v1) - // nop // sll r0, r0, 0 - c->lqc2(vf15, 224, v1); // lqc2 vf15, 224(v1) - c->ori(t2, t2, 32); // ori t2, t2, 32 - c->lq(t0, 112, v1); // lq t0, 112(v1) - //beq r0, r0, L24 // beq r0, r0, L24 - c->lq(t1, 128, v1); // lq t1, 128(v1) - goto block_4; // branch always - - - block_36: - c->addiu(t4, r0, -3); // addiu t4, r0, -3 - // nop // sll r0, r0, 0 - bc = c->sgpr64(t6) == 0; // beq t6, r0, L24 - c->and_(t2, t2, t4); // and t2, t2, t4 - if (bc) {goto block_4;} // branch non-likely - - //beq r0, r0, L24 // beq r0, r0, L24 - c->ori(t2, t2, 2); // ori t2, t2, 2 - goto block_4; // branch always - - - block_38: - c->addiu(t4, r0, -21); // addiu t4, r0, -21 - c->daddiu(t5, t6, -2); // daddiu t5, t6, -2 - bc = c->sgpr64(t6) == 0; // beq t6, r0, L24 - c->and_(t2, t2, t4); // and t2, t2, t4 - if (bc) {goto block_4;} // branch non-likely - - bc = c->sgpr64(t5) == 0; // beq t5, r0, L30 - // nop // sll r0, r0, 0 - if (bc) {goto block_41;} // branch non-likely - - //beq r0, r0, L24 // beq r0, r0, L24 - c->ori(t2, t2, 16); // ori t2, t2, 16 - goto block_4; // branch always - - - block_41: - //beq r0, r0, L24 // beq r0, r0, L24 - c->ori(t2, t2, 4); // ori t2, t2, 4 - goto block_4; // branch always - - - block_42: - c->mov128_vf_gpr(vf1, t6); // qmtc2.i vf1, t6 - c->daddiu(t4, t5, -45); // daddiu t4, t5, -45 - bc = c->sgpr64(t5) == 0; // beq t5, r0, L33 - c->vitof0(DEST::xyzw, vf1, vf1); // vitof0.xyzw vf1, vf1 - if (bc) {goto block_46;} // branch non-likely - - bc = c->sgpr64(t4) == 0; // beq t4, r0, L32 - // nop // sll r0, r0, 0 - if (bc) {goto block_45;} // branch non-likely - - //beq r0, r0, L24 // beq r0, r0, L24 - c->vadd_bc(DEST::x, BC::x, vf23, vf23, vf1); // vaddx.x vf23, vf23, vf1 - goto block_4; // branch always - - - block_45: - //beq r0, r0, L24 // beq r0, r0, L24 - c->vsub_bc(DEST::x, BC::x, vf23, vf23, vf1); // vsubx.x vf23, vf23, vf1 - goto block_4; // branch always - - - block_46: - //beq r0, r0, L24 // beq r0, r0, L24 - c->vadd_bc(DEST::x, BC::x, vf23, vf0, vf1); // vaddx.x vf23, vf0, vf1 - goto block_4; // branch always - - - block_47: - c->mov128_vf_gpr(vf1, t6); // qmtc2.i vf1, t6 - c->daddiu(t4, t5, -45); // daddiu t4, t5, -45 - bc = c->sgpr64(t5) == 0; // beq t5, r0, L36 - c->vitof0(DEST::xyzw, vf1, vf1); // vitof0.xyzw vf1, vf1 - if (bc) {goto block_51;} // branch non-likely - - bc = c->sgpr64(t4) == 0; // beq t4, r0, L35 - // nop // sll r0, r0, 0 - if (bc) {goto block_50;} // branch non-likely - - //beq r0, r0, L24 // beq r0, r0, L24 - c->vadd_bc(DEST::y, BC::x, vf23, vf23, vf1); // vaddx.y vf23, vf23, vf1 - goto block_4; // branch always - - - block_50: - //beq r0, r0, L24 // beq r0, r0, L24 - c->vsub_bc(DEST::y, BC::x, vf23, vf23, vf1); // vsubx.y vf23, vf23, vf1 - goto block_4; // branch always - - - block_51: - //beq r0, r0, L24 // beq r0, r0, L24 - c->vadd_bc(DEST::y, BC::x, vf23, vf0, vf1); // vaddx.y vf23, vf0, vf1 - goto block_4; // branch always - - - block_52: - //beq r0, r0, L24 // beq r0, r0, L24 - c->sqc2(vf23, 288, v1); // sqc2 vf23, 288(v1) - goto block_4; // branch always - - - block_53: - //beq r0, r0, L24 // beq r0, r0, L24 - c->lqc2(vf23, 288, v1); // lqc2 vf23, 288(v1) - goto block_4; // branch always - - - block_54: - c->lbu(t4, 4, a0); // lbu t4, 4(a0) - c->daddiu(a0, a0, 1); // daddiu a0, a0, 1 - c->vadd(DEST::xyz, vf4, vf23, vf15); // vadd.xyz vf4, vf23, vf15 - c->andi(t4, t4, 127); // andi t4, t4, 127 - c->vsub(DEST::xyzw, vf1, vf25, vf23); // vsub.xyzw vf1, vf25, vf23 - c->daddiu(t4, t4, 255); // daddiu t4, t4, 255 - //beq r0, r0, L44 // beq r0, r0, L44 - c->sll(t5, t4, 4); // sll t5, t4, 4 - goto block_62; // branch always - - - block_55: - c->vadd(DEST::xyz, vf4, vf23, vf15); // vadd.xyz vf4, vf23, vf15 - c->sll(t5, t4, 4); // sll t5, t4, 4 - c->vsub(DEST::xyzw, vf1, vf25, vf23); // vsub.xyzw vf1, vf25, vf23 - c->daddiu(t6, t4, -10); // daddiu t6, t4, -10 - bc = c->sgpr64(t6) == 0; // beq t6, r0, L41 - c->daddiu(t4, t4, -13); // daddiu t4, t4, -13 - if (bc) {goto block_57;} // branch non-likely - - bc = c->sgpr64(t4) != 0; // bne t4, r0, L44 - // nop // sll r0, r0, 0 - if (bc) {goto block_62;} // branch non-likely - - - block_57: - c->vsub(DEST::xyzw, vf1, vf23, vf24); // vsub.xyzw vf1, vf23, vf24 - c->andi(t4, t2, 16); // andi t4, t2, 16 - bc = c->sgpr64(t4) != 0; // bne t4, r0, L42 - c->andi(t4, t2, 4); // andi t4, t2, 4 - if (bc) {goto block_60;} // branch non-likely - - bc = c->sgpr64(t4) != 0; // bne t4, r0, L43 - // nop // sll r0, r0, 0 - if (bc) {goto block_61;} // branch non-likely - - c->vadd_bc(DEST::x, BC::x, vf23, vf0, vf24); // vaddx.x vf23, vf0, vf24 - // nop // sll r0, r0, 0 - c->sqc2(vf23, 944, t3); // sqc2 vf23, 944(t3) - c->vadd_bc(DEST::y, BC::w, vf23, vf23, vf15); // vaddw.y vf23, vf23, vf15 - //beq r0, r0, L24 // beq r0, r0, L24 - c->daddiu(t3, t3, 16); // daddiu t3, t3, 16 - goto block_4; // branch always - - - block_60: - c->vsub(DEST::x, vf23, vf24, vf1); // vsub.x vf23, vf24, vf1 - c->sqc2(vf23, 944, t3); // sqc2 vf23, 944(t3) - c->vadd_bc(DEST::x, BC::x, vf23, vf0, vf24); // vaddx.x vf23, vf0, vf24 - c->vadd_bc(DEST::y, BC::w, vf23, vf23, vf15); // vaddw.y vf23, vf23, vf15 - //beq r0, r0, L24 // beq r0, r0, L24 - c->daddiu(t3, t3, 16); // daddiu t3, t3, 16 - goto block_4; // branch always - - - block_61: - c->vmul_bc(DEST::x, BC::w, vf1, vf1, vf16); // vmulw.x vf1, vf1, vf16 - // nop // sll r0, r0, 0 - c->vsub(DEST::x, vf23, vf24, vf1); // vsub.x vf23, vf24, vf1 - c->sqc2(vf23, 944, t3); // sqc2 vf23, 944(t3) - c->vadd_bc(DEST::x, BC::x, vf23, vf0, vf24); // vaddx.x vf23, vf0, vf24 - c->vadd_bc(DEST::y, BC::w, vf23, vf23, vf15); // vaddw.y vf23, vf23, vf15 - //beq r0, r0, L24 // beq r0, r0, L24 - c->daddiu(t3, t3, 16); // daddiu t3, t3, 16 - goto block_4; // branch always - - - block_62: - c->addu(t4, t5, a3); // addu t4, t5, a3 - // nop // sll r0, r0, 0 - c->lqc2(vf5, -256, t4); // lqc2 vf5, -256(t4) - c->mov128_gpr_vf(t4, vf1); // qmfc2.i t4, vf1 - bc = ((s64)c->sgpr64(t4)) < 0; // bltz t4, L47 - c->sra(t4, t4, 31); // sra t4, t4, 31 - if (bc) {goto block_67;} // branch non-likely - - c->vmul(DEST::xyzw, vf19, vf5, vf13); // vmul.xyzw vf19, vf5, vf13 - c->andi(t4, t2, 2); // andi t4, t2, 2 - bc = c->sgpr64(t4) == 0; // beq t4, r0, L45 - // nop // sll r0, r0, 0 - if (bc) {goto block_65;} // branch non-likely - - //beq r0, r0, L46 // beq r0, r0, L46 - c->vadd_bc(DEST::x, BC::w, vf23, vf23, vf19); // vaddw.x vf23, vf23, vf19 - goto block_66; // branch always - - - block_65: - // nop // sll r0, r0, 0 - c->vadd_bc(DEST::x, BC::w, vf23, vf23, vf14); // vaddw.x vf23, vf23, vf14 - - block_66: - //beq r0, r0, L24 // beq r0, r0, L24 - // nop // sll r0, r0, 0 - goto block_4; // branch always - - - block_67: - c->vsub(DEST::xyzw, vf1, vf23, vf24); // vsub.xyzw vf1, vf23, vf24 - c->andi(a0, t2, 16); // andi a0, t2, 16 - bc = c->sgpr64(a0) != 0; // bne a0, r0, L48 - c->andi(a0, t2, 4); // andi a0, t2, 4 - if (bc) {goto block_70;} // branch non-likely - - bc = c->sgpr64(a0) != 0; // bne a0, r0, L49 - // nop // sll r0, r0, 0 - if (bc) {goto block_71;} // branch non-likely - - c->vadd_bc(DEST::x, BC::x, vf23, vf0, vf24); // vaddx.x vf23, vf0, vf24 - // nop // sll r0, r0, 0 - //beq r0, r0, L50 // beq r0, r0, L50 - c->sqc2(vf23, 944, t3); // sqc2 vf23, 944(t3) - goto block_72; // branch always - - - block_70: - c->vsub(DEST::x, vf23, vf24, vf1); // vsub.x vf23, vf24, vf1 - // nop // sll r0, r0, 0 - //beq r0, r0, L50 // beq r0, r0, L50 - c->sqc2(vf23, 944, t3); // sqc2 vf23, 944(t3) - goto block_72; // branch always - - - block_71: - c->vmul_bc(DEST::x, BC::w, vf1, vf1, vf16); // vmulw.x vf1, vf1, vf16 - // nop // sll r0, r0, 0 - c->vsub(DEST::x, vf23, vf24, vf1); // vsub.x vf23, vf24, vf1 - c->sqc2(vf23, 944, t3); // sqc2 vf23, 944(t3) - - block_72: - c->lw(a0, 3032, v1); // lw a0, 3032(v1) - c->mov64(t2, v1); // or t2, v1, r0 - c->lw(t3, 3028, v1); // lw t3, 3028(v1) - c->lqc2(vf23, 944, t2); // lqc2 vf23, 944(t2) - - block_73: - c->lbu(t4, 4, t3); // lbu t4, 4(t3) - c->daddiu(t3, t3, 1); // daddiu t3, t3, 1 - bc = c->sgpr64(t4) == 0; // beq t4, r0, L71 - c->daddiu(t5, t4, -1); // daddiu t5, t4, -1 - if (bc) {goto block_131;} // branch non-likely - - bc = c->sgpr64(t5) == 0; // beq t5, r0, L65 - c->daddiu(t5, t4, -126); // daddiu t5, t4, -126 - if (bc) {goto block_121;} // branch non-likely - - bc = c->sgpr64(t5) != 0; // bne t5, r0, L66 - // nop // sll r0, r0, 0 - if (bc) {goto block_122;} // branch non-likely - - c->lbu(t4, 4, t3); // lbu t4, 4(t3) - c->daddiu(t3, t3, 1); // daddiu t3, t3, 1 - c->addiu(t5, r0, 0); // addiu t5, r0, 0 - c->addiu(t6, r0, 0); // addiu t6, r0, 0 - bc = c->sgpr64(t4) == 0; // beq t4, r0, L71 - c->daddiu(t7, t4, -43); // daddiu t7, t4, -43 - if (bc) {goto block_131;} // branch non-likely - - c->movz(t5, t4, t7); // movz t5, t4, t7 - c->daddiu(t7, t4, -45); // daddiu t7, t4, -45 - c->movz(t5, t4, t7); // movz t5, t4, t7 - // nop // sll r0, r0, 0 - bc = c->sgpr64(t5) != 0; // bne t5, r0, L52 - c->daddiu(t7, t4, -121); // daddiu t7, t4, -121 - if (bc) {goto block_84;} // branch non-likely - - bc = c->sgpr64(t7) == 0; // beq t7, r0, L63 - c->daddiu(t6, t4, -89); // daddiu t6, t4, -89 - if (bc) {goto block_119;} // branch non-likely - - bc = c->sgpr64(t6) == 0; // beq t6, r0, L63 - c->daddiu(t6, t4, -122); // daddiu t6, t4, -122 - if (bc) {goto block_119;} // branch non-likely - - bc = c->sgpr64(t6) == 0; // beq t6, r0, L64 - c->daddiu(t6, t4, -90); // daddiu t6, t4, -90 - if (bc) {goto block_120;} // branch non-likely - - bc = c->sgpr64(t6) == 0; // beq t6, r0, L64 - c->daddiu(t6, t4, -48); // daddiu t6, t4, -48 - if (bc) {goto block_120;} // branch non-likely - - bc = ((s64)c->sgpr64(t6)) < 0; // bltz t6, L66 - c->daddiu(t6, t4, -57); // daddiu t6, t4, -57 - if (bc) {goto block_122;} // branch non-likely - - bc = ((s64)c->sgpr64(t6)) > 0; // bgtz t6, L66 - c->daddiu(t6, t4, -48); // daddiu t6, t4, -48 - if (bc) {goto block_122;} // branch non-likely - - - block_84: - c->lbu(t4, 4, t3); // lbu t4, 4(t3) - c->daddiu(t3, t3, 1); // daddiu t3, t3, 1 - bc = c->sgpr64(t4) == 0; // beq t4, r0, L71 - c->daddiu(t7, t4, -110); // daddiu t7, t4, -110 - if (bc) {goto block_131;} // branch non-likely - - bc = c->sgpr64(t7) == 0; // beq t7, r0, L53 - c->daddiu(t7, t4, -78); // daddiu t7, t4, -78 - if (bc) {goto block_102;} // branch non-likely - - bc = c->sgpr64(t7) == 0; // beq t7, r0, L53 - c->daddiu(t7, t4, -108); // daddiu t7, t4, -108 - if (bc) {goto block_102;} // branch non-likely - - bc = c->sgpr64(t7) == 0; // beq t7, r0, L51 - c->daddiu(t7, t4, -76); // daddiu t7, t4, -76 - if (bc) {goto block_73;} // branch non-likely - - bc = c->sgpr64(t7) == 0; // beq t7, r0, L51 - c->daddiu(t7, t4, -119); // daddiu t7, t4, -119 - if (bc) {goto block_73;} // branch non-likely - - bc = c->sgpr64(t7) == 0; // beq t7, r0, L55 - c->daddiu(t7, t4, -87); // daddiu t7, t4, -87 - if (bc) {goto block_105;} // branch non-likely - - bc = c->sgpr64(t7) == 0; // beq t7, r0, L55 - c->daddiu(t7, t4, -107); // daddiu t7, t4, -107 - if (bc) {goto block_105;} // branch non-likely - - bc = c->sgpr64(t7) == 0; // beq t7, r0, L56 - c->daddiu(t7, t4, -75); // daddiu t7, t4, -75 - if (bc) {goto block_107;} // branch non-likely - - bc = c->sgpr64(t7) == 0; // beq t7, r0, L56 - c->daddiu(t7, t4, -106); // daddiu t7, t4, -106 - if (bc) {goto block_107;} // branch non-likely - - bc = c->sgpr64(t7) == 0; // beq t7, r0, L51 - c->daddiu(t7, t4, -74); // daddiu t7, t4, -74 - if (bc) {goto block_73;} // branch non-likely - - bc = c->sgpr64(t7) == 0; // beq t7, r0, L51 - c->daddiu(t7, t4, -104); // daddiu t7, t4, -104 - if (bc) {goto block_73;} // branch non-likely - - bc = c->sgpr64(t7) == 0; // beq t7, r0, L57 - c->daddiu(t7, t4, -72); // daddiu t7, t4, -72 - if (bc) {goto block_109;} // branch non-likely - - bc = c->sgpr64(t7) == 0; // beq t7, r0, L57 - c->daddiu(t7, t4, -118); // daddiu t7, t4, -118 - if (bc) {goto block_109;} // branch non-likely - - bc = c->sgpr64(t7) == 0; // beq t7, r0, L60 - c->daddiu(t7, t4, -86); // daddiu t7, t4, -86 - if (bc) {goto block_114;} // branch non-likely - - bc = c->sgpr64(t7) == 0; // beq t7, r0, L60 - c->daddiu(t7, t4, -48); // daddiu t7, t4, -48 - if (bc) {goto block_114;} // branch non-likely - - bc = ((s64)c->sgpr64(t7)) < 0; // bltz t7, L66 - c->daddiu(t8, t4, -57); // daddiu t8, t4, -57 - if (bc) {goto block_122;} // branch non-likely - - bc = ((s64)c->sgpr64(t8)) > 0; // bgtz t8, L66 - c->sll(t8, t6, 2); // sll t8, t6, 2 - if (bc) {goto block_122;} // branch non-likely - - c->daddu(t4, t6, t8); // daddu t4, t6, t8 - // nop // sll r0, r0, 0 - c->sll(t4, t4, 1); // sll t4, t4, 1 - // nop // sll r0, r0, 0 - //beq r0, r0, L52 // beq r0, r0, L52 - c->daddu(t6, t4, t7); // daddu t6, t4, t7 - goto block_84; // branch always - - - block_102: - bc = c->sgpr64(t6) != 0; // bne t6, r0, L54 - c->load_symbol(a3, cache.font12_table); // lw a3, *font12-table*(s7) - if (bc) {goto block_104;} // branch non-likely - - c->mov64(a3, a3); // or a3, a3, r0 - c->addiu(t0, r0, -33); // addiu t0, r0, -33 - c->lqc2(vf13, 144, v1); // lqc2 vf13, 144(v1) - // nop // sll r0, r0, 0 - c->lqc2(vf14, 160, v1); // lqc2 vf14, 160(v1) - // nop // sll r0, r0, 0 - c->lqc2(vf15, 176, v1); // lqc2 vf15, 176(v1) - c->and_(a0, a0, t0); // and a0, a0, t0 - c->lq(t0, 80, v1); // lq t0, 80(v1) - //beq r0, r0, L51 // beq r0, r0, L51 - c->lq(t1, 96, v1); // lq t1, 96(v1) - goto block_73; // branch always - - - block_104: - // nop // sll r0, r0, 0 - c->load_symbol(a3, cache.font24_table); // lw a3, *font24-table*(s7) - c->mov64(a3, a3); // or a3, a3, r0 - // nop // sll r0, r0, 0 - c->lqc2(vf13, 192, v1); // lqc2 vf13, 192(v1) - // nop // sll r0, r0, 0 - c->lqc2(vf14, 208, v1); // lqc2 vf14, 208(v1) - // nop // sll r0, r0, 0 - c->lqc2(vf15, 224, v1); // lqc2 vf15, 224(v1) - c->ori(a0, a0, 32); // ori a0, a0, 32 - c->lq(t0, 112, v1); // lq t0, 112(v1) - //beq r0, r0, L51 // beq r0, r0, L51 - c->lq(t1, 128, v1); // lq t1, 128(v1) - goto block_73; // branch always - - - block_105: - c->addiu(t4, r0, -2); // addiu t4, r0, -2 - // nop // sll r0, r0, 0 - bc = c->sgpr64(t6) == 0; // beq t6, r0, L51 - c->and_(a0, a0, t4); // and a0, a0, t4 - if (bc) {goto block_73;} // branch non-likely - - //beq r0, r0, L51 // beq r0, r0, L51 - c->ori(a0, a0, 1); // ori a0, a0, 1 - goto block_73; // branch always - - - block_107: - c->addiu(t4, r0, -3); // addiu t4, r0, -3 - // nop // sll r0, r0, 0 - bc = c->sgpr64(t6) == 0; // beq t6, r0, L51 - c->and_(a0, a0, t4); // and a0, a0, t4 - if (bc) {goto block_73;} // branch non-likely - - //beq r0, r0, L51 // beq r0, r0, L51 - c->ori(a0, a0, 2); // ori a0, a0, 2 - goto block_73; // branch always - - - block_109: - c->mov128_vf_gpr(vf1, t6); // qmtc2.i vf1, t6 - c->daddiu(t4, t5, -45); // daddiu t4, t5, -45 - bc = c->sgpr64(t5) == 0; // beq t5, r0, L59 - c->vitof0(DEST::xyzw, vf1, vf1); // vitof0.xyzw vf1, vf1 - if (bc) {goto block_113;} // branch non-likely - - bc = c->sgpr64(t4) == 0; // beq t4, r0, L58 - // nop // sll r0, r0, 0 - if (bc) {goto block_112;} // branch non-likely - - //beq r0, r0, L51 // beq r0, r0, L51 - c->vadd_bc(DEST::x, BC::x, vf23, vf23, vf1); // vaddx.x vf23, vf23, vf1 - goto block_73; // branch always - - - block_112: - //beq r0, r0, L51 // beq r0, r0, L51 - c->vsub_bc(DEST::x, BC::x, vf23, vf23, vf1); // vsubx.x vf23, vf23, vf1 - goto block_73; // branch always - - - block_113: - //beq r0, r0, L51 // beq r0, r0, L51 - c->vadd_bc(DEST::x, BC::x, vf23, vf0, vf1); // vaddx.x vf23, vf0, vf1 - goto block_73; // branch always - - - block_114: - c->mov128_vf_gpr(vf1, t6); // qmtc2.i vf1, t6 - c->daddiu(t4, t5, -45); // daddiu t4, t5, -45 - bc = c->sgpr64(t5) == 0; // beq t5, r0, L62 - c->vitof0(DEST::xyzw, vf1, vf1); // vitof0.xyzw vf1, vf1 - if (bc) {goto block_118;} // branch non-likely - - bc = c->sgpr64(t4) == 0; // beq t4, r0, L61 - // nop // sll r0, r0, 0 - if (bc) {goto block_117;} // branch non-likely - - //beq r0, r0, L51 // beq r0, r0, L51 - c->vadd_bc(DEST::y, BC::x, vf23, vf23, vf1); // vaddx.y vf23, vf23, vf1 - goto block_73; // branch always - - - block_117: - //beq r0, r0, L51 // beq r0, r0, L51 - c->vsub_bc(DEST::y, BC::x, vf23, vf23, vf1); // vsubx.y vf23, vf23, vf1 - goto block_73; // branch always - - - block_118: - //beq r0, r0, L51 // beq r0, r0, L51 - c->vadd_bc(DEST::y, BC::x, vf23, vf0, vf1); // vaddx.y vf23, vf0, vf1 - goto block_73; // branch always - - - block_119: - //beq r0, r0, L51 // beq r0, r0, L51 - c->sqc2(vf23, 288, v1); // sqc2 vf23, 288(v1) - goto block_73; // branch always - - - block_120: - //beq r0, r0, L51 // beq r0, r0, L51 - c->lqc2(vf23, 288, v1); // lqc2 vf23, 288(v1) - goto block_73; // branch always - - - block_121: - c->lbu(t4, 4, t3); // lbu t4, 4(t3) - c->daddiu(t3, t3, 1); // daddiu t3, t3, 1 - c->vadd(DEST::xyz, vf4, vf23, vf15); // vadd.xyz vf4, vf23, vf15 - c->andi(t5, t4, 127); // andi t5, t4, 127 - c->vsub(DEST::xyzw, vf1, vf25, vf23); // vsub.xyzw vf1, vf25, vf23 - c->daddiu(t5, t5, 255); // daddiu t5, t5, 255 - //beq r0, r0, L68 // beq r0, r0, L68 - c->sll(t5, t5, 4); // sll t5, t5, 4 - goto block_125; // branch always - - - block_122: - c->vadd(DEST::xyz, vf4, vf23, vf15); // vadd.xyz vf4, vf23, vf15 - c->sll(t5, t4, 4); // sll t5, t4, 4 - c->vsub(DEST::xyzw, vf1, vf25, vf23); // vsub.xyzw vf1, vf25, vf23 - c->daddiu(t6, t4, -10); // daddiu t6, t4, -10 - bc = c->sgpr64(t6) == 0; // beq t6, r0, L67 - c->daddiu(t6, t4, -13); // daddiu t6, t4, -13 - if (bc) {goto block_124;} // branch non-likely - - bc = c->sgpr64(t6) != 0; // bne t6, r0, L68 - c->andi(t6, a0, 1); // andi t6, a0, 1 - if (bc) {goto block_125;} // branch non-likely - - - block_124: - c->daddiu(t2, t2, 16); // daddiu t2, t2, 16 - // nop // sll r0, r0, 0 - //beq r0, r0, L51 // beq r0, r0, L51 - c->lqc2(vf23, 944, t2); // lqc2 vf23, 944(t2) - goto block_73; // branch always - - - block_125: - c->addu(t5, t5, a3); // addu t5, t5, a3 - // nop // sll r0, r0, 0 - c->lqc2(vf5, -256, t5); // lqc2 vf5, -256(t5) - c->mov128_gpr_vf(t5, vf1); // qmfc2.i t5, vf1 - bc = ((s64)c->sgpr64(t5)) < 0; // bltz t5, L71 - c->vadd(DEST::xyz, vf6, vf5, vf16); // vadd.xyz vf6, vf5, vf16 - if (bc) {goto block_131;} // branch non-likely - - c->sra(t5, t5, 31); // sra t5, t5, 31 - c->vadd(DEST::xyz, vf7, vf5, vf17); // vadd.xyz vf7, vf5, vf17 - bc = ((s64)c->sgpr64(t5)) < 0; // bltz t5, L51 - c->vadd(DEST::xyz, vf8, vf5, vf18); // vadd.xyz vf8, vf5, vf18 - if (bc) {goto block_73;} // branch non-likely - - c->vadd(DEST::xyz, vf1, vf23, vf0); // vadd.xyz vf1, vf23, vf0 - // nop // sll r0, r0, 0 - c->vadd(DEST::xyz, vf2, vf23, vf13); // vadd.xyz vf2, vf23, vf13 - c->sqc2(vf5, 496, v1); // sqc2 vf5, 496(v1) - c->vadd(DEST::xyz, vf3, vf23, vf14); // vadd.xyz vf3, vf23, vf14 - c->sqc2(vf6, 512, v1); // sqc2 vf6, 512(v1) - c->vmul(DEST::xyzw, vf19, vf5, vf13); // vmul.xyzw vf19, vf5, vf13 - c->sqc2(vf7, 528, v1); // sqc2 vf7, 528(v1) - // nop // sll r0, r0, 0 - c->sqc2(vf8, 544, v1); // sqc2 vf8, 544(v1) - // nop // sll r0, r0, 0 - c->sqc2(vf1, 368, v1); // sqc2 vf1, 368(v1) - // nop // sll r0, r0, 0 - c->sqc2(vf2, 384, v1); // sqc2 vf2, 384(v1) - // nop // sll r0, r0, 0 - c->sqc2(vf3, 400, v1); // sqc2 vf3, 400(v1) - // nop // sll r0, r0, 0 - c->sqc2(vf4, 416, v1); // sqc2 vf4, 416(v1) - c->lqc2(vf1, 368, v1); // lqc2 vf1, 368(v1) - // nop // sll r0, r0, 0 - c->lqc2(vf2, 384, v1); // lqc2 vf2, 384(v1) - c->vmula_bc(DEST::xyzw, BC::w, vf31, vf0); // vmulaw.xyzw acc, vf31, vf0 - c->lqc2(vf3, 400, v1); // lqc2 vf3, 400(v1) - c->vmadda_bc(DEST::xyzw, BC::x, vf28, vf1); // vmaddax.xyzw acc, vf28, vf1 - c->lqc2(vf4, 416, v1); // lqc2 vf4, 416(v1) - c->vmadda_bc(DEST::xyzw, BC::y, vf29, vf1); // vmadday.xyzw acc, vf29, vf1 - // nop // sll r0, r0, 0 - c->vmadd_bc(DEST::xyzw, BC::z, vf1, vf30, vf1); // vmaddz.xyzw vf1, vf30, vf1 - // nop // sll r0, r0, 0 - c->vmula_bc(DEST::xyzw, BC::w, vf31, vf0); // vmulaw.xyzw acc, vf31, vf0 - // nop // sll r0, r0, 0 - c->vmadda_bc(DEST::xyzw, BC::x, vf28, vf2); // vmaddax.xyzw acc, vf28, vf2 - // nop // sll r0, r0, 0 - c->vmadda_bc(DEST::xyzw, BC::y, vf29, vf2); // vmadday.xyzw acc, vf29, vf2 - // nop // sll r0, r0, 0 - c->vmadd_bc(DEST::xyzw, BC::z, vf2, vf30, vf2); // vmaddz.xyzw vf2, vf30, vf2 - // nop // sll r0, r0, 0 - c->vmula_bc(DEST::xyzw, BC::w, vf31, vf0); // vmulaw.xyzw acc, vf31, vf0 - // nop // sll r0, r0, 0 - c->vmadda_bc(DEST::xyzw, BC::x, vf28, vf3); // vmaddax.xyzw acc, vf28, vf3 - // nop // sll r0, r0, 0 - c->vmadda_bc(DEST::xyzw, BC::y, vf29, vf3); // vmadday.xyzw acc, vf29, vf3 - // nop // sll r0, r0, 0 - c->vmadd_bc(DEST::xyzw, BC::z, vf3, vf30, vf3); // vmaddz.xyzw vf3, vf30, vf3 - // nop // sll r0, r0, 0 - c->vmula_bc(DEST::xyzw, BC::w, vf31, vf0); // vmulaw.xyzw acc, vf31, vf0 - // nop // sll r0, r0, 0 - c->vmadda_bc(DEST::xyzw, BC::x, vf28, vf4); // vmaddax.xyzw acc, vf28, vf4 - // nop // sll r0, r0, 0 - c->vmadda_bc(DEST::xyzw, BC::y, vf29, vf4); // vmadday.xyzw acc, vf29, vf4 - // nop // sll r0, r0, 0 - c->vmadd_bc(DEST::xyzw, BC::z, vf4, vf30, vf4); // vmaddz.xyzw vf4, vf30, vf4 - c->vdiv(vf25, BC::z, vf1, BC::w); // vdiv Q, vf25.z, vf1.w - c->lq(t5, 32, v1); // lq t5, 32(v1) - // nop // sll r0, r0, 0 - c->lq(t6, 48, v1); // lq t6, 48(v1) - // nop // sll r0, r0, 0 - c->sq(t5, 0, a1); // sq t5, 0(a1) - // nop // sll r0, r0, 0 - c->sq(t6, 16, a1); // sq t6, 16(a1) - c->lqc2(vf5, 496, v1); // lqc2 vf5, 496(v1) - c->mov128_gpr_gpr(t5, t0); // por t5, t0, r0 - c->lqc2(vf6, 512, v1); // lqc2 vf6, 512(v1) - c->andi(t4, t4, 128); // andi t4, t4, 128 - c->lqc2(vf7, 528, v1); // lqc2 vf7, 528(v1) - c->movn(t5, t1, t4); // movn t5, t1, t4 - c->vmulq(DEST::xyz, vf1, vf1); // vmulq.xyz vf1, vf1, Q - c->sq(t5, 32, a1); // sq t5, 32(a1) - c->vmulq(DEST::xyz, vf5, vf5); // vmulq.xyz vf5, vf5, Q - // nop // sll r0, r0, 0 - // nop // vnop - // nop // sll r0, r0, 0 - // nop // vnop - // nop // sll r0, r0, 0 - c->vdiv(vf25, BC::z, vf2, BC::w); // vdiv Q, vf25.z, vf2.w - // nop // sll r0, r0, 0 - c->lqc2(vf8, 544, v1); // lqc2 vf8, 544(v1) - // nop // sll r0, r0, 0 - c->vadd(DEST::xyzw, vf1, vf1, vf26); // vadd.xyzw vf1, vf1, vf26 - // nop // sll r0, r0, 0 - c->lqc2(vf9, 1968, v1); // lqc2 vf9, 1968(v1) - // 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->vftoi4(DEST::xyzw, vf1, vf1); // vftoi4.xyzw vf1, vf1 - // nop // sll r0, r0, 0 - c->vmulq(DEST::xyz, vf2, vf2); // vmulq.xyz vf2, vf2, Q - // nop // sll r0, r0, 0 - c->vmulq(DEST::xyz, vf6, vf6); // vmulq.xyz vf6, vf6, Q - c->sqc2(vf5, 48, a1); // sqc2 vf5, 48(a1) - // nop // vnop - // nop // sll r0, r0, 0 - // nop // vnop - // nop // sll r0, r0, 0 - c->vdiv(vf25, BC::z, vf3, BC::w); // vdiv Q, vf25.z, vf3.w - c->sqc2(vf9, 64, a1); // sqc2 vf9, 64(a1) - // nop // sll r0, r0, 0 - c->sqc2(vf1, 80, a1); // sqc2 vf1, 80(a1) - c->vadd(DEST::xyzw, vf2, vf2, vf26); // vadd.xyzw vf2, vf2, vf26 - // 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 - // nop // sll r0, r0, 0 - // nop // sll r0, r0, 0 - c->vftoi4(DEST::xyzw, vf2, vf2); // vftoi4.xyzw vf2, vf2 - // nop // sll r0, r0, 0 - c->vmulq(DEST::xyz, vf3, vf3); // vmulq.xyz vf3, vf3, Q - // nop // sll r0, r0, 0 - c->vmulq(DEST::xyz, vf7, vf7); // vmulq.xyz vf7, vf7, Q - c->sqc2(vf6, 96, a1); // sqc2 vf6, 96(a1) - // nop // vnop - // nop // sll r0, r0, 0 - // nop // vnop - // nop // sll r0, r0, 0 - c->vdiv(vf25, BC::z, vf4, BC::w); // vdiv Q, vf25.z, vf4.w - c->sqc2(vf9, 112, a1); // sqc2 vf9, 112(a1) - // nop // sll r0, r0, 0 - c->sqc2(vf2, 128, a1); // sqc2 vf2, 128(a1) - c->vadd(DEST::xyzw, vf3, vf3, vf26); // vadd.xyzw vf3, vf3, vf26 - // 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 - // nop // sll r0, r0, 0 - // nop // sll r0, r0, 0 - c->vftoi4(DEST::xyzw, vf3, vf3); // vftoi4.xyzw vf3, vf3 - // nop // sll r0, r0, 0 - c->vmulq(DEST::xyz, vf4, vf4); // vmulq.xyz vf4, vf4, Q - // nop // sll r0, r0, 0 - c->vmulq(DEST::xyz, vf8, vf8); // vmulq.xyz vf8, vf8, Q - c->sqc2(vf7, 144, a1); // sqc2 vf7, 144(a1) - // nop // sll r0, r0, 0 - c->sqc2(vf9, 160, a1); // sqc2 vf9, 160(a1) - c->vadd(DEST::xyzw, vf4, vf4, vf26); // vadd.xyzw vf4, vf4, vf26 - c->sqc2(vf3, 176, a1); // sqc2 vf3, 176(a1) - c->andi(t4, a0, 2); // andi t4, a0, 2 - // nop // sll r0, r0, 0 - bc = c->sgpr64(t4) == 0; // beq t4, r0, L69 - // nop // sll r0, r0, 0 - if (bc) {goto block_129;} // branch non-likely - - //beq r0, r0, L70 // beq r0, r0, L70 - c->vadd_bc(DEST::x, BC::w, vf23, vf23, vf19); // vaddw.x vf23, vf23, vf19 - goto block_130; // branch always - - - block_129: - // nop // sll r0, r0, 0 - c->vadd_bc(DEST::x, BC::w, vf23, vf23, vf14); // vaddw.x vf23, vf23, vf14 - - block_130: - c->vftoi4(DEST::xyzw, vf4, vf4); // vftoi4.xyzw vf4, vf4 - // nop // sll r0, r0, 0 - // nop // sll r0, r0, 0 - // nop // sll r0, r0, 0 - // nop // sll r0, r0, 0 - c->sqc2(vf8, 192, a1); // sqc2 vf8, 192(a1) - // nop // sll r0, r0, 0 - c->sqc2(vf9, 208, a1); // sqc2 vf9, 208(a1) - // nop // sll r0, r0, 0 - c->sqc2(vf4, 224, a1); // sqc2 vf4, 224(a1) - //beq r0, r0, L51 // beq r0, r0, L51 - c->daddiu(a1, a1, 240); // daddiu a1, a1, 240 - goto block_73; // branch always - - - block_131: - c->lw(a0, 3032, v1); // lw a0, 3032(v1) - c->mov64(t2, v1); // or t2, v1, r0 - c->lw(t3, 3028, v1); // lw t3, 3028(v1) - c->lqc2(vf23, 944, t2); // lqc2 vf23, 944(t2) - - block_132: - c->lbu(t4, 4, t3); // lbu t4, 4(t3) - c->daddiu(t3, t3, 1); // daddiu t3, t3, 1 - bc = c->sgpr64(t4) == 0; // beq t4, r0, L92 - c->daddiu(t5, t4, -1); // daddiu t5, t4, -1 - if (bc) {goto block_189;} // branch non-likely - - bc = c->sgpr64(t5) == 0; // beq t5, r0, L86 - c->daddiu(t5, t4, -126); // daddiu t5, t4, -126 - if (bc) {goto block_179;} // branch non-likely - - bc = c->sgpr64(t5) != 0; // bne t5, r0, L87 - // nop // sll r0, r0, 0 - if (bc) {goto block_180;} // branch non-likely - - c->lbu(t4, 4, t3); // lbu t4, 4(t3) - c->daddiu(t3, t3, 1); // daddiu t3, t3, 1 - c->addiu(t5, r0, 0); // addiu t5, r0, 0 - c->addiu(t6, r0, 0); // addiu t6, r0, 0 - bc = c->sgpr64(t4) == 0; // beq t4, r0, L92 - c->daddiu(t7, t4, -43); // daddiu t7, t4, -43 - if (bc) {goto block_189;} // branch non-likely - - c->movz(t5, t4, t7); // movz t5, t4, t7 - c->daddiu(t7, t4, -45); // daddiu t7, t4, -45 - c->movz(t5, t4, t7); // movz t5, t4, t7 - // nop // sll r0, r0, 0 - bc = c->sgpr64(t5) != 0; // bne t5, r0, L73 - c->daddiu(t7, t4, -121); // daddiu t7, t4, -121 - if (bc) {goto block_143;} // branch non-likely - - bc = c->sgpr64(t7) == 0; // beq t7, r0, L84 - c->daddiu(t6, t4, -89); // daddiu t6, t4, -89 - if (bc) {goto block_177;} // branch non-likely - - bc = c->sgpr64(t6) == 0; // beq t6, r0, L84 - c->daddiu(t6, t4, -122); // daddiu t6, t4, -122 - if (bc) {goto block_177;} // branch non-likely - - bc = c->sgpr64(t6) == 0; // beq t6, r0, L85 - c->daddiu(t6, t4, -90); // daddiu t6, t4, -90 - if (bc) {goto block_178;} // branch non-likely - - bc = c->sgpr64(t6) == 0; // beq t6, r0, L85 - c->daddiu(t6, t4, -48); // daddiu t6, t4, -48 - if (bc) {goto block_178;} // branch non-likely - - bc = ((s64)c->sgpr64(t6)) < 0; // bltz t6, L87 - c->daddiu(t6, t4, -57); // daddiu t6, t4, -57 - if (bc) {goto block_180;} // branch non-likely - - bc = ((s64)c->sgpr64(t6)) > 0; // bgtz t6, L87 - c->daddiu(t6, t4, -48); // daddiu t6, t4, -48 - if (bc) {goto block_180;} // branch non-likely - - - block_143: - c->lbu(t4, 4, t3); // lbu t4, 4(t3) - c->daddiu(t3, t3, 1); // daddiu t3, t3, 1 - bc = c->sgpr64(t4) == 0; // beq t4, r0, L92 - c->daddiu(t7, t4, -110); // daddiu t7, t4, -110 - if (bc) {goto block_189;} // branch non-likely - - bc = c->sgpr64(t7) == 0; // beq t7, r0, L74 - c->daddiu(t7, t4, -78); // daddiu t7, t4, -78 - if (bc) {goto block_161;} // branch non-likely - - bc = c->sgpr64(t7) == 0; // beq t7, r0, L74 - c->daddiu(t7, t4, -108); // daddiu t7, t4, -108 - if (bc) {goto block_161;} // branch non-likely - - bc = c->sgpr64(t7) == 0; // beq t7, r0, L76 - c->daddiu(t7, t4, -76); // daddiu t7, t4, -76 - if (bc) {goto block_164;} // branch non-likely - - bc = c->sgpr64(t7) == 0; // beq t7, r0, L76 - c->daddiu(t7, t4, -119); // daddiu t7, t4, -119 - if (bc) {goto block_164;} // branch non-likely - - bc = c->sgpr64(t7) == 0; // beq t7, r0, L72 - c->daddiu(t7, t4, -87); // daddiu t7, t4, -87 - if (bc) {goto block_132;} // branch non-likely - - bc = c->sgpr64(t7) == 0; // beq t7, r0, L72 - c->daddiu(t7, t4, -107); // daddiu t7, t4, -107 - if (bc) {goto block_132;} // branch non-likely - - bc = c->sgpr64(t7) == 0; // beq t7, r0, L77 - c->daddiu(t7, t4, -75); // daddiu t7, t4, -75 - if (bc) {goto block_165;} // branch non-likely - - bc = c->sgpr64(t7) == 0; // beq t7, r0, L77 - c->daddiu(t7, t4, -106); // daddiu t7, t4, -106 - if (bc) {goto block_165;} // branch non-likely - - bc = c->sgpr64(t7) == 0; // beq t7, r0, L72 - c->daddiu(t7, t4, -74); // daddiu t7, t4, -74 - if (bc) {goto block_132;} // branch non-likely - - bc = c->sgpr64(t7) == 0; // beq t7, r0, L72 - c->daddiu(t7, t4, -104); // daddiu t7, t4, -104 - if (bc) {goto block_132;} // branch non-likely - - bc = c->sgpr64(t7) == 0; // beq t7, r0, L78 - c->daddiu(t7, t4, -72); // daddiu t7, t4, -72 - if (bc) {goto block_167;} // branch non-likely - - bc = c->sgpr64(t7) == 0; // beq t7, r0, L78 - c->daddiu(t7, t4, -118); // daddiu t7, t4, -118 - if (bc) {goto block_167;} // branch non-likely - - bc = c->sgpr64(t7) == 0; // beq t7, r0, L81 - c->daddiu(t7, t4, -86); // daddiu t7, t4, -86 - if (bc) {goto block_172;} // branch non-likely - - bc = c->sgpr64(t7) == 0; // beq t7, r0, L81 - c->daddiu(t7, t4, -48); // daddiu t7, t4, -48 - if (bc) {goto block_172;} // branch non-likely - - bc = ((s64)c->sgpr64(t7)) < 0; // bltz t7, L87 - c->daddiu(t8, t4, -57); // daddiu t8, t4, -57 - if (bc) {goto block_180;} // branch non-likely - - bc = ((s64)c->sgpr64(t8)) > 0; // bgtz t8, L87 - c->sll(t8, t6, 2); // sll t8, t6, 2 - if (bc) {goto block_180;} // branch non-likely - - c->daddu(t4, t6, t8); // daddu t4, t6, t8 - // nop // sll r0, r0, 0 - c->sll(t4, t4, 1); // sll t4, t4, 1 - // nop // sll r0, r0, 0 - //beq r0, r0, L73 // beq r0, r0, L73 - c->daddu(t6, t4, t7); // daddu t6, t4, t7 - goto block_143; // branch always - - - block_161: - bc = c->sgpr64(t6) != 0; // bne t6, r0, L75 - c->load_symbol(a3, cache.font12_table); // lw a3, *font12-table*(s7) - if (bc) {goto block_163;} // branch non-likely - - c->mov64(a3, a3); // or a3, a3, r0 - c->addiu(t0, r0, -33); // addiu t0, r0, -33 - c->lqc2(vf13, 144, v1); // lqc2 vf13, 144(v1) - // nop // sll r0, r0, 0 - c->lqc2(vf14, 160, v1); // lqc2 vf14, 160(v1) - // nop // sll r0, r0, 0 - c->lqc2(vf15, 176, v1); // lqc2 vf15, 176(v1) - c->and_(a0, a0, t0); // and a0, a0, t0 - c->lq(t0, 80, v1); // lq t0, 80(v1) - //beq r0, r0, L72 // beq r0, r0, L72 - c->lq(t1, 96, v1); // lq t1, 96(v1) - goto block_132; // branch always - - - block_163: - // nop // sll r0, r0, 0 - c->load_symbol(a3, cache.font24_table); // lw a3, *font24-table*(s7) - c->mov64(a3, a3); // or a3, a3, r0 - // nop // sll r0, r0, 0 - c->lqc2(vf13, 192, v1); // lqc2 vf13, 192(v1) - // nop // sll r0, r0, 0 - c->lqc2(vf14, 208, v1); // lqc2 vf14, 208(v1) - // nop // sll r0, r0, 0 - c->lqc2(vf15, 224, v1); // lqc2 vf15, 224(v1) - c->ori(a0, a0, 32); // ori a0, a0, 32 - c->lq(t0, 112, v1); // lq t0, 112(v1) - //beq r0, r0, L72 // beq r0, r0, L72 - c->lq(t1, 128, v1); // lq t1, 128(v1) - goto block_132; // branch always - - - block_164: - // nop // sll r0, r0, 0 - c->sw(t6, 3008, v1); // sw t6, 3008(v1) - c->sll(t4, t6, 4); // sll t4, t6, 4 - c->lq(t5, 432, v1); // lq t5, 432(v1) - c->daddu(t4, t4, v1); // daddu t4, t4, v1 - c->lq(t6, 448, v1); // lq t6, 448(v1) - // nop // sll r0, r0, 0 - c->sq(t5, 624, v1); // sq t5, 624(v1) - // nop // sll r0, r0, 0 - c->sq(t6, 640, v1); // sq t6, 640(v1) - // nop // sll r0, r0, 0 - c->lq(t5, 464, v1); // lq t5, 464(v1) - // nop // sll r0, r0, 0 - c->lq(t6, 480, v1); // lq t6, 480(v1) - // nop // sll r0, r0, 0 - c->sq(t5, 656, v1); // sq t5, 656(v1) - // nop // sll r0, r0, 0 - c->sq(t6, 672, v1); // sq t6, 672(v1) - // nop // sll r0, r0, 0 - c->lwu(t6, 1984, t4); // lwu t6, 1984(t4) - // nop // sll r0, r0, 0 - c->lwu(t5, 1988, t4); // lwu t5, 1988(t4) - c->pextlb(t6, r0, t6); // pextlb t6, r0, t6 - c->mfc1(r0, f31); // mfc1 r0, f31 - c->pextlh(t6, r0, t6); // pextlh t6, r0, t6 - c->mfc1(r0, f31); // mfc1 r0, f31 - c->pextlb(t5, r0, t5); // pextlb t5, r0, t5 - c->sq(t6, 432, v1); // sq t6, 432(v1) - c->pextlh(t5, r0, t5); // pextlh t5, r0, t5 - c->sq(t6, 816, v1); // sq t6, 816(v1) - // nop // sll r0, r0, 0 - c->sq(t5, 448, v1); // sq t5, 448(v1) - // nop // sll r0, r0, 0 - c->sq(t5, 832, v1); // sq t5, 832(v1) - // nop // sll r0, r0, 0 - c->lwu(t5, 1992, t4); // lwu t5, 1992(t4) - // nop // sll r0, r0, 0 - c->lwu(t4, 1996, t4); // lwu t4, 1996(t4) - c->pextlb(t5, r0, t5); // pextlb t5, r0, t5 - c->mfc1(r0, f31); // mfc1 r0, f31 - c->pextlh(t5, r0, t5); // pextlh t5, r0, t5 - c->mfc1(r0, f31); // mfc1 r0, f31 - c->pextlb(t4, r0, t4); // pextlb t4, r0, t4 - c->sq(t5, 464, v1); // sq t5, 464(v1) - c->pextlh(t4, r0, t4); // pextlh t4, r0, t4 - c->sq(t5, 848, v1); // sq t5, 848(v1) - // nop // sll r0, r0, 0 - c->sq(t4, 480, v1); // sq t4, 480(v1) - //beq r0, r0, L72 // beq r0, r0, L72 - c->sq(t4, 864, v1); // sq t4, 864(v1) - goto block_132; // branch always - - - block_165: - c->addiu(t4, r0, -3); // addiu t4, r0, -3 - // nop // sll r0, r0, 0 - bc = c->sgpr64(t6) == 0; // beq t6, r0, L72 - c->and_(a0, a0, t4); // and a0, a0, t4 - if (bc) {goto block_132;} // branch non-likely - - //beq r0, r0, L72 // beq r0, r0, L72 - c->ori(a0, a0, 2); // ori a0, a0, 2 - goto block_132; // branch always - - - block_167: - c->mov128_vf_gpr(vf1, t6); // qmtc2.i vf1, t6 - c->daddiu(t4, t5, -45); // daddiu t4, t5, -45 - bc = c->sgpr64(t5) == 0; // beq t5, r0, L80 - c->vitof0(DEST::xyzw, vf1, vf1); // vitof0.xyzw vf1, vf1 - if (bc) {goto block_171;} // branch non-likely - - bc = c->sgpr64(t4) == 0; // beq t4, r0, L79 - // nop // sll r0, r0, 0 - if (bc) {goto block_170;} // branch non-likely - - //beq r0, r0, L72 // beq r0, r0, L72 - c->vadd_bc(DEST::x, BC::x, vf23, vf23, vf1); // vaddx.x vf23, vf23, vf1 - goto block_132; // branch always - - - block_170: - //beq r0, r0, L72 // beq r0, r0, L72 - c->vsub_bc(DEST::x, BC::x, vf23, vf23, vf1); // vsubx.x vf23, vf23, vf1 - goto block_132; // branch always - - - block_171: - //beq r0, r0, L72 // beq r0, r0, L72 - c->vadd_bc(DEST::x, BC::x, vf23, vf0, vf1); // vaddx.x vf23, vf0, vf1 - goto block_132; // branch always - - - block_172: - c->mov128_vf_gpr(vf1, t6); // qmtc2.i vf1, t6 - c->daddiu(t4, t5, -45); // daddiu t4, t5, -45 - bc = c->sgpr64(t5) == 0; // beq t5, r0, L83 - c->vitof0(DEST::xyzw, vf1, vf1); // vitof0.xyzw vf1, vf1 - if (bc) {goto block_176;} // branch non-likely - - bc = c->sgpr64(t4) == 0; // beq t4, r0, L82 - // nop // sll r0, r0, 0 - if (bc) {goto block_175;} // branch non-likely - - //beq r0, r0, L72 // beq r0, r0, L72 - c->vadd_bc(DEST::y, BC::x, vf23, vf23, vf1); // vaddx.y vf23, vf23, vf1 - goto block_132; // branch always - - - block_175: - //beq r0, r0, L72 // beq r0, r0, L72 - c->vsub_bc(DEST::y, BC::x, vf23, vf23, vf1); // vsubx.y vf23, vf23, vf1 - goto block_132; // branch always - - - block_176: - //beq r0, r0, L72 // beq r0, r0, L72 - c->vadd_bc(DEST::y, BC::x, vf23, vf0, vf1); // vaddx.y vf23, vf0, vf1 - goto block_132; // branch always - - - block_177: - // nop // sll r0, r0, 0 - c->lw(t4, 3008, v1); // lw t4, 3008(v1) - // nop // sll r0, r0, 0 - c->lqc2(vf9, 432, v1); // lqc2 vf9, 432(v1) - // nop // sll r0, r0, 0 - c->lqc2(vf10, 448, v1); // lqc2 vf10, 448(v1) - // nop // sll r0, r0, 0 - c->lqc2(vf11, 464, v1); // lqc2 vf11, 464(v1) - // nop // sll r0, r0, 0 - c->lqc2(vf12, 480, v1); // lqc2 vf12, 480(v1) - // nop // sll r0, r0, 0 - c->sw(t4, 3016, v1); // sw t4, 3016(v1) - // nop // sll r0, r0, 0 - c->sqc2(vf9, 304, v1); // sqc2 vf9, 304(v1) - // nop // sll r0, r0, 0 - c->sqc2(vf10, 320, v1); // sqc2 vf10, 320(v1) - // nop // sll r0, r0, 0 - c->sqc2(vf11, 336, v1); // sqc2 vf11, 336(v1) - // nop // sll r0, r0, 0 - c->sqc2(vf12, 352, v1); // sqc2 vf12, 352(v1) - //beq r0, r0, L72 // beq r0, r0, L72 - c->sqc2(vf23, 288, v1); // sqc2 vf23, 288(v1) - goto block_132; // branch always - - - block_178: - // nop // sll r0, r0, 0 - c->lw(t4, 3016, v1); // lw t4, 3016(v1) - // nop // sll r0, r0, 0 - c->lqc2(vf9, 304, v1); // lqc2 vf9, 304(v1) - // nop // sll r0, r0, 0 - c->lqc2(vf10, 320, v1); // lqc2 vf10, 320(v1) - // nop // sll r0, r0, 0 - c->lqc2(vf11, 336, v1); // lqc2 vf11, 336(v1) - // nop // sll r0, r0, 0 - c->lqc2(vf12, 352, v1); // lqc2 vf12, 352(v1) - // nop // sll r0, r0, 0 - c->sw(t4, 3008, v1); // sw t4, 3008(v1) - // nop // sll r0, r0, 0 - c->sqc2(vf9, 432, v1); // sqc2 vf9, 432(v1) - // nop // sll r0, r0, 0 - c->sqc2(vf9, 816, v1); // sqc2 vf9, 816(v1) - // nop // sll r0, r0, 0 - c->sqc2(vf10, 448, v1); // sqc2 vf10, 448(v1) - // nop // sll r0, r0, 0 - c->sqc2(vf10, 832, v1); // sqc2 vf10, 832(v1) - // nop // sll r0, r0, 0 - c->sqc2(vf11, 464, v1); // sqc2 vf11, 464(v1) - // nop // sll r0, r0, 0 - c->sqc2(vf11, 848, v1); // sqc2 vf11, 848(v1) - // nop // sll r0, r0, 0 - c->sqc2(vf12, 480, v1); // sqc2 vf12, 480(v1) - // nop // sll r0, r0, 0 - c->sqc2(vf12, 864, v1); // sqc2 vf12, 864(v1) - //beq r0, r0, L72 // beq r0, r0, L72 - c->lqc2(vf23, 288, v1); // lqc2 vf23, 288(v1) - goto block_132; // branch always - - - block_179: - c->lbu(t4, 4, t3); // lbu t4, 4(t3) - c->daddiu(t3, t3, 1); // daddiu t3, t3, 1 - c->vadd(DEST::xyz, vf4, vf23, vf15); // vadd.xyz vf4, vf23, vf15 - c->andi(t5, t4, 127); // andi t5, t4, 127 - c->vsub(DEST::xyzw, vf1, vf25, vf23); // vsub.xyzw vf1, vf25, vf23 - c->daddiu(t5, t5, 255); // daddiu t5, t5, 255 - //beq r0, r0, L89 // beq r0, r0, L89 - c->sll(t5, t5, 4); // sll t5, t5, 4 - goto block_183; // branch always - - - block_180: - c->vadd(DEST::xyz, vf4, vf23, vf15); // vadd.xyz vf4, vf23, vf15 - c->sll(t5, t4, 4); // sll t5, t4, 4 - c->vsub(DEST::xyzw, vf1, vf25, vf23); // vsub.xyzw vf1, vf25, vf23 - c->daddiu(t6, t4, -10); // daddiu t6, t4, -10 - bc = c->sgpr64(t6) == 0; // beq t6, r0, L88 - c->daddiu(t6, t4, -13); // daddiu t6, t4, -13 - if (bc) {goto block_182;} // branch non-likely - - bc = c->sgpr64(t6) != 0; // bne t6, r0, L89 - // nop // sll r0, r0, 0 - if (bc) {goto block_183;} // branch non-likely - - - block_182: - c->daddiu(t2, t2, 16); // daddiu t2, t2, 16 - // nop // sll r0, r0, 0 - //beq r0, r0, L72 // beq r0, r0, L72 - c->lqc2(vf23, 944, t2); // lqc2 vf23, 944(t2) - goto block_132; // branch always - - - block_183: - c->addu(t5, t5, a3); // addu t5, t5, a3 - // nop // sll r0, r0, 0 - c->lqc2(vf5, -256, t5); // lqc2 vf5, -256(t5) - c->mov128_gpr_vf(t5, vf1); // qmfc2.i t5, vf1 - bc = ((s64)c->sgpr64(t5)) < 0; // bltz t5, L92 - c->vadd(DEST::xyz, vf6, vf5, vf16); // vadd.xyz vf6, vf5, vf16 - if (bc) {goto block_189;} // branch non-likely - - c->sra(t5, t5, 31); // sra t5, t5, 31 - c->vadd(DEST::xyz, vf7, vf5, vf17); // vadd.xyz vf7, vf5, vf17 - bc = ((s64)c->sgpr64(t5)) < 0; // bltz t5, L72 - c->vadd(DEST::xyz, vf8, vf5, vf18); // vadd.xyz vf8, vf5, vf18 - if (bc) {goto block_132;} // branch non-likely - - c->vadd(DEST::xyz, vf1, vf23, vf0); // vadd.xyz vf1, vf23, vf0 - // nop // sll r0, r0, 0 - c->vadd(DEST::xyz, vf2, vf23, vf13); // vadd.xyz vf2, vf23, vf13 - // nop // sll r0, r0, 0 - c->vadd(DEST::xyz, vf3, vf23, vf14); // vadd.xyz vf3, vf23, vf14 - c->sqc2(vf5, 496, v1); // sqc2 vf5, 496(v1) - c->vadd(DEST::xyz, vf4, vf23, vf15); // vadd.xyz vf4, vf23, vf15 - c->sqc2(vf6, 512, v1); // sqc2 vf6, 512(v1) - c->vmul(DEST::xyzw, vf19, vf5, vf13); // vmul.xyzw vf19, vf5, vf13 - c->sqc2(vf7, 528, v1); // sqc2 vf7, 528(v1) - // nop // sll r0, r0, 0 - c->sqc2(vf8, 544, v1); // sqc2 vf8, 544(v1) - // nop // sll r0, r0, 0 - c->sqc2(vf1, 368, v1); // sqc2 vf1, 368(v1) - // nop // sll r0, r0, 0 - c->sqc2(vf2, 384, v1); // sqc2 vf2, 384(v1) - // nop // sll r0, r0, 0 - c->sqc2(vf3, 400, v1); // sqc2 vf3, 400(v1) - // nop // sll r0, r0, 0 - c->sqc2(vf4, 416, v1); // sqc2 vf4, 416(v1) - c->lqc2(vf1, 368, v1); // lqc2 vf1, 368(v1) - // nop // sll r0, r0, 0 - c->lqc2(vf2, 384, v1); // lqc2 vf2, 384(v1) - c->vmula_bc(DEST::xyzw, BC::w, vf31, vf0); // vmulaw.xyzw acc, vf31, vf0 - c->lqc2(vf3, 400, v1); // lqc2 vf3, 400(v1) - c->vmadda_bc(DEST::xyzw, BC::x, vf28, vf1); // vmaddax.xyzw acc, vf28, vf1 - c->lqc2(vf4, 416, v1); // lqc2 vf4, 416(v1) - c->vmadda_bc(DEST::xyzw, BC::y, vf29, vf1); // vmadday.xyzw acc, vf29, vf1 - // nop // sll r0, r0, 0 - c->vmadd_bc(DEST::xyzw, BC::z, vf1, vf30, vf1); // vmaddz.xyzw vf1, vf30, vf1 - // nop // sll r0, r0, 0 - c->vmula_bc(DEST::xyzw, BC::w, vf31, vf0); // vmulaw.xyzw acc, vf31, vf0 - // nop // sll r0, r0, 0 - c->vmadda_bc(DEST::xyzw, BC::x, vf28, vf2); // vmaddax.xyzw acc, vf28, vf2 - // nop // sll r0, r0, 0 - c->vmadda_bc(DEST::xyzw, BC::y, vf29, vf2); // vmadday.xyzw acc, vf29, vf2 - // nop // sll r0, r0, 0 - c->vmadd_bc(DEST::xyzw, BC::z, vf2, vf30, vf2); // vmaddz.xyzw vf2, vf30, vf2 - // nop // sll r0, r0, 0 - c->vmula_bc(DEST::xyzw, BC::w, vf31, vf0); // vmulaw.xyzw acc, vf31, vf0 - // nop // sll r0, r0, 0 - c->vmadda_bc(DEST::xyzw, BC::x, vf28, vf3); // vmaddax.xyzw acc, vf28, vf3 - // nop // sll r0, r0, 0 - c->vmadda_bc(DEST::xyzw, BC::y, vf29, vf3); // vmadday.xyzw acc, vf29, vf3 - // nop // sll r0, r0, 0 - c->vmadd_bc(DEST::xyzw, BC::z, vf3, vf30, vf3); // vmaddz.xyzw vf3, vf30, vf3 - // nop // sll r0, r0, 0 - c->vmula_bc(DEST::xyzw, BC::w, vf31, vf0); // vmulaw.xyzw acc, vf31, vf0 - // nop // sll r0, r0, 0 - c->vmadda_bc(DEST::xyzw, BC::x, vf28, vf4); // vmaddax.xyzw acc, vf28, vf4 - // nop // sll r0, r0, 0 - c->vmadda_bc(DEST::xyzw, BC::y, vf29, vf4); // vmadday.xyzw acc, vf29, vf4 - // nop // sll r0, r0, 0 - c->vmadd_bc(DEST::xyzw, BC::z, vf4, vf30, vf4); // vmaddz.xyzw vf4, vf30, vf4 - c->vdiv(vf25, BC::z, vf1, BC::w); // vdiv Q, vf25.z, vf1.w - c->lq(t5, 32, v1); // lq t5, 32(v1) - // nop // sll r0, r0, 0 - c->lq(t6, 48, v1); // lq t6, 48(v1) - // nop // sll r0, r0, 0 - c->sq(t5, 0, a1); // sq t5, 0(a1) - // nop // sll r0, r0, 0 - c->sq(t6, 16, a1); // sq t6, 16(a1) - c->lqc2(vf5, 496, v1); // lqc2 vf5, 496(v1) - c->mov128_gpr_gpr(t5, t0); // por t5, t0, r0 - c->lqc2(vf6, 512, v1); // lqc2 vf6, 512(v1) - c->andi(t4, t4, 128); // andi t4, t4, 128 - c->lqc2(vf7, 528, v1); // lqc2 vf7, 528(v1) - c->movn(t5, t1, t4); // movn t5, t1, t4 - c->vmulq(DEST::xyz, vf1, vf1); // vmulq.xyz vf1, vf1, Q - c->sq(t5, 32, a1); // sq t5, 32(a1) - c->vmulq(DEST::xyz, vf5, vf5); // vmulq.xyz vf5, vf5, Q - // nop // sll r0, r0, 0 - // nop // vnop - // nop // sll r0, r0, 0 - // nop // vnop - // nop // sll r0, r0, 0 - c->vdiv(vf25, BC::z, vf2, BC::w); // vdiv Q, vf25.z, vf2.w - // nop // sll r0, r0, 0 - c->lqc2(vf8, 544, v1); // lqc2 vf8, 544(v1) - // nop // sll r0, r0, 0 - c->vadd(DEST::xyzw, vf1, vf1, vf27); // vadd.xyzw vf1, vf1, vf27 - // nop // sll r0, r0, 0 - c->lqc2(vf9, 432, v1); // lqc2 vf9, 432(v1) - // nop // sll r0, r0, 0 - c->lqc2(vf10, 448, v1); // lqc2 vf10, 448(v1) - // nop // sll r0, r0, 0 - c->lqc2(vf11, 464, v1); // lqc2 vf11, 464(v1) - // nop // sll r0, r0, 0 - c->vftoi4(DEST::xyzw, vf1, vf1); // vftoi4.xyzw vf1, vf1 - // nop // sll r0, r0, 0 - c->vmulq(DEST::xyz, vf2, vf2); // vmulq.xyz vf2, vf2, Q - // nop // sll r0, r0, 0 - c->vmulq(DEST::xyz, vf6, vf6); // vmulq.xyz vf6, vf6, Q - c->sqc2(vf5, 48, a1); // sqc2 vf5, 48(a1) - // nop // vnop - // nop // sll r0, r0, 0 - // nop // vnop - // nop // sll r0, r0, 0 - c->vdiv(vf25, BC::z, vf3, BC::w); // vdiv Q, vf25.z, vf3.w - c->sqc2(vf9, 64, a1); // sqc2 vf9, 64(a1) - c->lqc2(vf12, 480, v1); // lqc2 vf12, 480(v1) - c->sqc2(vf1, 80, a1); // sqc2 vf1, 80(a1) - c->vadd(DEST::xyzw, vf2, vf2, vf27); // vadd.xyzw vf2, vf2, vf27 - // 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 - // nop // sll r0, r0, 0 - // nop // sll r0, r0, 0 - c->vftoi4(DEST::xyzw, vf2, vf2); // vftoi4.xyzw vf2, vf2 - // nop // sll r0, r0, 0 - c->vmulq(DEST::xyz, vf3, vf3); // vmulq.xyz vf3, vf3, Q - // nop // sll r0, r0, 0 - c->vmulq(DEST::xyz, vf7, vf7); // vmulq.xyz vf7, vf7, Q - c->sqc2(vf6, 96, a1); // sqc2 vf6, 96(a1) - // nop // vnop - // nop // sll r0, r0, 0 - // nop // vnop - // nop // sll r0, r0, 0 - c->vdiv(vf25, BC::z, vf4, BC::w); // vdiv Q, vf25.z, vf4.w - c->sqc2(vf10, 112, a1); // sqc2 vf10, 112(a1) - // nop // sll r0, r0, 0 - c->sqc2(vf2, 128, a1); // sqc2 vf2, 128(a1) - c->vadd(DEST::xyzw, vf3, vf3, vf27); // vadd.xyzw vf3, vf3, vf27 - // 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 - // nop // sll r0, r0, 0 - // nop // sll r0, r0, 0 - c->vftoi4(DEST::xyzw, vf3, vf3); // vftoi4.xyzw vf3, vf3 - // nop // sll r0, r0, 0 - c->vmulq(DEST::xyz, vf4, vf4); // vmulq.xyz vf4, vf4, Q - // nop // sll r0, r0, 0 - c->vmulq(DEST::xyz, vf8, vf8); // vmulq.xyz vf8, vf8, Q - c->sqc2(vf7, 144, a1); // sqc2 vf7, 144(a1) - // nop // sll r0, r0, 0 - c->sqc2(vf11, 160, a1); // sqc2 vf11, 160(a1) - c->vadd(DEST::xyzw, vf4, vf4, vf27); // vadd.xyzw vf4, vf4, vf27 - c->sqc2(vf3, 176, a1); // sqc2 vf3, 176(a1) - c->andi(t4, a0, 2); // andi t4, a0, 2 - // nop // sll r0, r0, 0 - bc = c->sgpr64(t4) == 0; // beq t4, r0, L90 - // nop // sll r0, r0, 0 - if (bc) {goto block_187;} // branch non-likely - - //beq r0, r0, L91 // beq r0, r0, L91 - c->vadd_bc(DEST::x, BC::w, vf23, vf23, vf19); // vaddw.x vf23, vf23, vf19 - goto block_188; // branch always - - - block_187: - // nop // sll r0, r0, 0 - c->vadd_bc(DEST::x, BC::w, vf23, vf23, vf14); // vaddw.x vf23, vf23, vf14 - - block_188: - c->vftoi4(DEST::xyzw, vf4, vf4); // vftoi4.xyzw vf4, vf4 - // nop // sll r0, r0, 0 - // nop // sll r0, r0, 0 - // nop // sll r0, r0, 0 - // nop // sll r0, r0, 0 - c->sqc2(vf8, 192, a1); // sqc2 vf8, 192(a1) - // nop // sll r0, r0, 0 - c->sqc2(vf12, 208, a1); // sqc2 vf12, 208(a1) - // nop // sll r0, r0, 0 - c->sqc2(vf4, 224, a1); // sqc2 vf4, 224(a1) - //beq r0, r0, L72 // beq r0, r0, L72 - c->daddiu(a1, a1, 240); // daddiu a1, a1, 240 - goto block_132; // branch always - - - block_189: - c->lw(v1, 3024, v1); // lw v1, 3024(v1) - c->sw(a1, 4, v1); // sw a1, 4(v1) - c->lqc2(vf24, 12, a2); // lqc2 vf24, 12(a2) - c->vsub(DEST::xyzw, vf23, vf23, vf24); // vsub.xyzw vf23, vf23, vf24 - c->mov128_gpr_vf(v0, vf23); // qmfc2.i v0, vf23 - //jr ra // jr ra - c->daddu(sp, sp, r0); // daddu sp, sp, r0 - goto end_of_function; // return - - end_of_function: - return c->gprs[v0].du64[0]; -} - -void link() { - cache.font_work = intern_from_c("*font-work*").c(); - cache.font12_table = intern_from_c("*font12-table*").c(); - cache.font24_table = intern_from_c("*font24-table*").c(); - cache.math_camera = intern_from_c("*math-camera*").c(); - cache.video_parms = intern_from_c("*video-parms*").c(); - gLinkedFunctionTable.reg("draw-string", execute, 0); -} - -} // namespace draw_string -} // namespace Mips2C -// clang-format on \ No newline at end of file diff --git a/game/mips2c/jak1_functions/sparticle.cpp b/game/mips2c/jak1_functions/sparticle.cpp deleted file mode 100644 index 5c23977d1f..0000000000 --- a/game/mips2c/jak1_functions/sparticle.cpp +++ /dev/null @@ -1,690 +0,0 @@ -// clang-format off -//--------------------------MIPS2C--------------------- -#include "game/mips2c/mips2c_private.h" -#include "game/kernel/jak1/kscheme.h" -using namespace jak1; -namespace Mips2C::jak1 { -namespace sp_process_block_3d { -struct Cache { - void* sp_frame_time; // *sp-frame-time* - void* quaternion; // quaternion*! - void* sp_free_particle; // sp-free-particle - void* sp_relaunch_particle_3d; // sp-relaunch-particle-3d -} cache; - -u64 execute(void* ctxt) { - auto* c = (ExecutionContext*)ctxt; - bool bc = false; - u32 call_addr = 0; - bool cop1_bc = false; - c->daddiu(sp, sp, -160); // daddiu sp, sp, -160 - c->sd(ra, 0, sp); // sd ra, 0(sp) - c->sd(fp, 8, sp); // sd fp, 8(sp) - c->mov64(fp, t9); // or fp, t9, r0 - c->sq(s0, 48, sp); // sq s0, 48(sp) - c->sq(s1, 64, sp); // sq s1, 64(sp) - c->sq(s2, 80, sp); // sq s2, 80(sp) - c->sq(s3, 96, sp); // sq s3, 96(sp) - c->sq(s4, 112, sp); // sq s4, 112(sp) - c->sq(s5, 128, sp); // sq s5, 128(sp) - c->sq(gp, 144, sp); // sq gp, 144(sp) - c->mov64(gp, a0); // or gp, a0, r0 - c->mov64(s5, a1); // or s5, a1, r0 - c->mov64(s4, a2); // or s4, a2, r0 - c->mov64(s0, a3); // or s0, a3, r0 - c->mov64(s3, t0); // or s3, t0, r0 - c->mov64(s2, t1); // or s2, t1, r0 - c->daddiu(s1, sp, 16); // daddiu s1, sp, 16 - c->sq(r0, 0, s1); // sq r0, 0(s1) - c->load_symbol(v1, cache.sp_frame_time); // lw v1, *sp-frame-time*(s7) - c->lqc2(vf16, 0, v1); // lqc2 vf16, 0(v1) - c->mov128_gpr_vf(v1, vf16); // qmfc2.i v1, vf16 - c->andi(v1, v1, 255); // andi v1, v1, 255 - c->sq(v1, 32, sp); // sq v1, 32(sp) - // nop // sll r0, r0, 0 - - block_1: - c->lw(v1, 128, s5); // lw v1, 128(s5) - bc = c->sgpr64(v1) == c->sgpr64(s7); // beq v1, s7, L83 - // nop // sll r0, r0, 0 - if (bc) {goto block_34;} // branch non-likely - - bc = c->sgpr64(s2) == c->sgpr64(s7); // beq s2, s7, L71 - c->lw(v1, 104, s5); // lw v1, 104(s5) - if (bc) {goto block_8;} // branch non-likely - - c->andi(v1, v1, 8192); // andi v1, v1, 8192 - bc = c->sgpr64(v1) != 0; // bne v1, r0, L71 - // nop // sll r0, r0, 0 - if (bc) {goto block_8;} // branch non-likely - - c->lw(v1, 100, s5); // lw v1, 100(s5) - c->addiu(a0, r0, -1); // addiu a0, r0, -1 - bc = c->sgpr64(v1) == c->sgpr64(a0); // beq v1, a0, L70 - // nop // sll r0, r0, 0 - if (bc) {goto block_6;} // branch non-likely - - bc = c->sgpr64(v1) == 0; // beq v1, r0, L82 - // nop // sll r0, r0, 0 - if (bc) {goto block_33;} // branch non-likely - - - block_6: - c->lw(a0, 104, s5); // lw a0, 104(s5) - c->andi(v1, a0, 64); // andi v1, a0, 64 - c->xor_(a0, a0, v1); // xor a0, a0, v1 - bc = c->sgpr64(v1) == 0; // beq v1, r0, L83 - c->sw(a0, 104, s5); // sw a0, 104(s5) - if (bc) {goto block_34;} // branch non-likely - - c->lw(v1, 124, s5); // lw v1, 124(s5) - //beq r0, r0, L83 // beq r0, r0, L83 - c->sw(v1, 44, s4); // sw v1, 44(s4) - goto block_34; // branch always - - - block_8: - c->lw(v1, 100, s5); // lw v1, 100(s5) - c->addiu(a0, r0, -1); // addiu a0, r0, -1 - bc = c->sgpr64(v1) == c->sgpr64(a0); // beq v1, a0, L72 - c->lq(a0, 32, sp); // lq a0, 32(sp) - if (bc) {goto block_11;} // branch non-likely - - c->dsubu(a0, v1, a0); // dsubu a0, v1, a0 - bc = c->sgpr64(v1) == 0; // beq v1, r0, L82 - c->pmaxw(v1, a0, r0); // pmaxw v1, a0, r0 - if (bc) {goto block_33;} // branch non-likely - - c->sw(v1, 100, s5); // sw v1, 100(s5) - - block_11: - c->lw(a0, 104, s5); // lw a0, 104(s5) - c->andi(v1, a0, 64); // andi v1, a0, 64 - c->xor_(a0, a0, v1); // xor a0, a0, v1 - bc = c->sgpr64(v1) == 0; // beq v1, r0, L73 - c->sw(a0, 104, s5); // sw a0, 104(s5) - if (bc) {goto block_13;} // branch non-likely - - c->lw(v1, 124, s5); // lw v1, 124(s5) - c->sw(v1, 44, s4); // sw v1, 44(s4) - - block_13: - c->lw(t9, 112, s5); // lw t9, 112(s5) - bc = c->sgpr64(t9) == 0; // beq t9, r0, L74 - // nop // sll r0, r0, 0 - if (bc) {goto block_15;} // branch non-likely - - c->daddiu(sp, sp, -96); // daddiu sp, sp, -96 - c->sq(gp, 0, sp); // sq gp, 0(sp) - c->sq(s5, 16, sp); // sq s5, 16(sp) - c->sq(s4, 32, sp); // sq s4, 32(sp) - c->sq(s0, 48, sp); // sq s0, 48(sp) - c->sq(s3, 64, sp); // sq s3, 64(sp) - c->mov64(a0, gp); // or a0, gp, r0 - c->mov64(a1, s5); // or a1, s5, r0 - c->mov64(a2, s4); // or a2, s4, r0 - call_addr = c->gprs[t9].du32[0]; // function call: - c->sq(s2, 80, sp); // sq s2, 80(sp) - c->jalr(call_addr); // jalr ra, t9 - c->lq(gp, 0, sp); // lq gp, 0(sp) - c->lq(s5, 16, sp); // lq s5, 16(sp) - c->lq(s4, 32, sp); // lq s4, 32(sp) - c->lq(s0, 48, sp); // lq s0, 48(sp) - c->lq(s3, 64, sp); // lq s3, 64(sp) - c->lq(s2, 80, sp); // lq s2, 80(sp) - c->daddiu(sp, sp, 96); // daddiu sp, sp, 96 - - block_15: - c->lw(a1, 120, s5); // lw a1, 120(s5) - c->lw(v1, 116, s5); // lw v1, 116(s5) - bc = c->sgpr64(a1) == 0; // beq a1, r0, L75 - c->lq(a0, 32, sp); // lq a0, 32(sp) - if (bc) {goto block_18;} // branch non-likely - - c->dsubu(v1, v1, a0); // dsubu v1, v1, a0 - bc = ((s64)c->sgpr64(v1)) >= 0; // bgez v1, L75 - c->sw(v1, 116, s5); // sw v1, 116(s5) - if (bc) {goto block_18;} // branch non-likely - - c->daddiu(sp, sp, -96); // daddiu sp, sp, -96 - c->sq(gp, 0, sp); // sq gp, 0(sp) - c->sq(s5, 16, sp); // sq s5, 16(sp) - c->sq(s4, 32, sp); // sq s4, 32(sp) - c->sq(s0, 48, sp); // sq s0, 48(sp) - c->sq(s3, 64, sp); // sq s3, 64(sp) - c->sq(s2, 80, sp); // sq s2, 80(sp) - c->mov64(a0, gp); // or a0, gp, r0 - c->mov64(a3, s4); // or a3, s4, r0 - c->mov64(a2, s5); // or a2, s5, r0 - c->load_symbol(t9, cache.sp_relaunch_particle_3d);// lw t9, sp-relaunch-particle-3d(s7) - call_addr = c->gprs[t9].du32[0]; // function call: - c->sll(v0, ra, 0); // sll v0, ra, 0 - c->jalr(call_addr); // jalr ra, t9 - c->lq(gp, 0, sp); // lq gp, 0(sp) - c->lq(s5, 16, sp); // lq s5, 16(sp) - c->lq(s4, 32, sp); // lq s4, 32(sp) - c->lq(s0, 48, sp); // lq s0, 48(sp) - c->lq(s3, 64, sp); // lq s3, 64(sp) - c->lq(s2, 80, sp); // lq s2, 80(sp) - c->daddiu(sp, sp, 96); // daddiu sp, sp, 96 - - block_18: - c->lqc2(vf8, 0, s4); // lqc2 vf8, 0(s4) - c->lqc2(vf9, 16, s4); // lqc2 vf9, 16(s4) - c->lqc2(vf10, 32, s4); // lqc2 vf10, 32(s4) - c->lqc2(vf11, 16, s5); // lqc2 vf11, 16(s5) - c->lqc2(vf12, 32, s5); // lqc2 vf12, 32(s5) - c->lqc2(vf13, 48, s5); // lqc2 vf13, 48(s5) - c->lqc2(vf14, 64, s5); // lqc2 vf14, 64(s5) - c->lwc1(f0, 96, s5); // lwc1 f0, 96(s5) - c->mfc1(v1, f0); // mfc1 v1, f0 - c->vmul_bc(DEST::xyzw, BC::z, vf14, vf14, vf16); // vmulz.xyzw vf14, vf14, vf16 - bc = c->sgpr64(v1) == 0; // beq v1, r0, L76 - c->vadd(DEST::xyz, vf11, vf11, vf14); // vadd.xyz vf11, vf11, vf14 - if (bc) {goto block_20;} // branch non-likely - - c->mov128_vf_gpr(vf15, v1); // qmtc2.i vf15, v1 - c->vsub_bc(DEST::w, BC::x, vf15, vf0, vf15); // vsubx.w vf15, vf0, vf15 - c->vmul_bc(DEST::xyzw, BC::w, vf15, vf15, vf16); // vmulw.xyzw vf15, vf15, vf16 - c->vsub_bc(DEST::w, BC::w, vf15, vf0, vf15); // vsubw.w vf15, vf0, vf15 - c->vmul_bc(DEST::xyz, BC::w, vf11, vf11, vf15); // vmulw.xyz vf11, vf11, vf15 - - block_20: - c->vmul_bc(DEST::xyzw, BC::y, vf17, vf11, vf16); // vmuly.xyzw vf17, vf11, vf16 - c->vmul_bc(DEST::xyzw, BC::y, vf18, vf12, vf16); // vmuly.xyzw vf18, vf12, vf16 - c->vmul_bc(DEST::xyzw, BC::y, vf19, vf13, vf16); // vmuly.xyzw vf19, vf13, vf16 - c->vadd(DEST::xyzw, vf8, vf8, vf17); // vadd.xyzw vf8, vf8, vf17 - c->vadd_bc(DEST::w, BC::w, vf9, vf9, vf18); // vaddw.w vf9, vf9, vf18 - c->vadd(DEST::xyzw, vf10, vf10, vf19); // vadd.xyzw vf10, vf10, vf19 - c->vmax_bc(DEST::xyzw, BC::x, vf10, vf10, vf0); // vmaxx.xyzw vf10, vf10, vf0 - c->sqc2(vf11, 16, s5); // sqc2 vf11, 16(s5) - c->sqc2(vf8, 0, s4); // sqc2 vf8, 0(s4) - c->sqc2(vf9, 16, s4); // sqc2 vf9, 16(s4) - c->sqc2(vf10, 32, s4); // sqc2 vf10, 32(s4) - c->mov64(v1, s1); // or v1, s1, r0 - c->mov64(a0, s4); // or a0, s4, r0 - c->lwc1(f0, 16, a0); // lwc1 f0, 16(a0) - c->lwc1(f1, 20, a0); // lwc1 f1, 20(a0) - c->lwc1(f3, 24, a0); // lwc1 f3, 24(a0) - c->swc1(f0, 0, v1); // swc1 f0, 0(v1) - c->swc1(f1, 4, v1); // swc1 f1, 4(v1) - c->swc1(f3, 8, v1); // swc1 f3, 8(v1) - c->fprs[f2] = 1.0; // lwc1 f2, L157(fp) - c->muls(f3, f3, f3); // mul.s f3, f3, f3 - c->subs(f2, f2, f3); // sub.s f2, f2, f3 - c->muls(f1, f1, f1); // mul.s f1, f1, f1 - c->subs(f1, f2, f1); // sub.s f1, f2, f1 - c->muls(f0, f0, f0); // mul.s f0, f0, f0 - c->subs(f0, f1, f0); // sub.s f0, f1, f0 - c->sqrts(f0, f0); // sqrt.s f0, f0 - c->swc1(f0, 12, v1); // swc1 f0, 12(v1) - c->mfc1(a0, f0); // mfc1 a0, f0 - c->load_symbol(v1, cache.sp_frame_time); // lw v1, *sp-frame-time*(s7) - c->lwc1(f0, 0, v1); // lwc1 f0, 0(v1) - c->mfc1(v1, f0); // mfc1 v1, f0 - c->andi(v1, v1, 255); // andi v1, v1, 255 - c->daddiu(v1, v1, -10); // daddiu v1, v1, -10 - bc = ((s64)c->sgpr64(v1)) < 0; // bltz v1, L77 - // nop // sll r0, r0, 0 - if (bc) {goto block_22;} // branch non-likely - - c->load_symbol(t9, cache.quaternion); // lw t9, quaternion*!(s7) - c->mov64(a0, s1); // or a0, s1, r0 - c->mov64(a1, s1); // or a1, s1, r0 - c->daddiu(a2, s5, 80); // daddiu a2, s5, 80 - call_addr = c->gprs[t9].du32[0]; // function call: - c->sll(v0, ra, 0); // sll v0, ra, 0 - c->jalr(call_addr); // jalr ra, t9 - - block_22: - c->load_symbol(t9, cache.quaternion); // lw t9, quaternion*!(s7) - c->mov64(a0, s1); // or a0, s1, r0 - c->mov64(a1, s1); // or a1, s1, r0 - c->daddiu(a2, s5, 80); // daddiu a2, s5, 80 - call_addr = c->gprs[t9].du32[0]; // function call: - c->sll(v0, ra, 0); // sll v0, ra, 0 - c->jalr(call_addr); // jalr ra, t9 - c->mov64(a0, s4); // or a0, s4, r0 - c->mov64(v1, s1); // or v1, s1, r0 - c->lwc1(f0, 12, v1); // lwc1 f0, 12(v1) - c->mtc1(f1, r0); // mtc1 f1, r0 - cop1_bc = c->fprs[f0] < c->fprs[f1]; // c.lt.s f0, f1 - bc = !cop1_bc; // bc1f L78 - // nop // sll r0, r0, 0 - if (bc) {goto block_24;} // branch non-likely - - c->lqc2(vf1, 16, a0); // lqc2 vf1, 16(a0) - c->lqc2(vf2, 0, v1); // lqc2 vf2, 0(v1) - c->vsub(DEST::xyz, vf1, vf0, vf2); // vsub.xyz vf1, vf0, vf2 - c->sqc2(vf1, 16, a0); // sqc2 vf1, 16(a0) - c->mov128_gpr_vf(a0, vf1); // qmfc2.i a0, vf1 - //beq r0, r0, L79 // beq r0, r0, L79 - // nop // sll r0, r0, 0 - goto block_25; // branch always - - - block_24: - c->lqc2(vf1, 16, a0); // lqc2 vf1, 16(a0) - c->lqc2(vf2, 0, v1); // lqc2 vf2, 0(v1) - c->vadd(DEST::xyz, vf1, vf0, vf2); // vadd.xyz vf1, vf0, vf2 - c->sqc2(vf1, 16, a0); // sqc2 vf1, 16(a0) - c->mov128_gpr_vf(a0, vf1); // qmfc2.i a0, vf1 - - block_25: - c->mov128_gpr_vf(v1, vf10); // qmfc2.i v1, vf10 - c->lw(a0, 104, s5); // lw a0, 104(s5) - c->andi(a1, a0, 2); // andi a1, a0, 2 - bc = c->sgpr64(a1) == 0; // beq a1, r0, L80 - c->andi(a1, a0, 4); // andi a1, a0, 4 - if (bc) {goto block_28;} // branch non-likely - - bc = c->sgpr64(v1) != 0; // bne v1, r0, L80 - c->pextuw(a2, v1, r0); // pextuw a2, v1, r0 - if (bc) {goto block_28;} // branch non-likely - - bc = c->sgpr64(a2) == 0; // beq a2, r0, L82 - // nop // sll r0, r0, 0 - if (bc) {goto block_33;} // branch non-likely - - - block_28: - bc = c->sgpr64(a1) == 0; // beq a1, r0, L81 - c->andi(a0, a0, 1); // andi a0, a0, 1 - if (bc) {goto block_30;} // branch non-likely - - c->pcpyud(v1, v1, r0); // pcpyud v1, v1, r0 - c->pexew(v1, v1); // pexew v1, v1 - bc = ((s64)c->sgpr64(v1)) <= 0; // blez v1, L82 - // nop // sll r0, r0, 0 - if (bc) {goto block_33;} // branch non-likely - - - block_30: - bc = c->sgpr64(a0) == 0; // beq a0, r0, L83 - // nop // sll r0, r0, 0 - if (bc) {goto block_34;} // branch non-likely - - c->mov128_gpr_vf(v1, vf8); // qmfc2.i v1, vf8 - c->pcpyud(v1, v1, r0); // pcpyud v1, v1, r0 - c->pexew(v1, v1); // pexew v1, v1 - bc = ((s64)c->sgpr64(v1)) < 0; // bltz v1, L82 - c->mov128_gpr_vf(v1, vf9); // qmfc2.i v1, vf9 - if (bc) {goto block_33;} // branch non-likely - - c->pcpyud(v1, v1, r0); // pcpyud v1, v1, r0 - c->pexew(v1, v1); // pexew v1, v1 - bc = ((s64)c->sgpr64(v1)) >= 0; // bgez v1, L83 - // nop // sll r0, r0, 0 - if (bc) {goto block_34;} // branch non-likely - - - block_33: - c->load_symbol(t9, cache.sp_free_particle); // lw t9, sp-free-particle(s7) - c->mov64(a0, gp); // or a0, gp, r0 - c->mov64(a1, s0); // or a1, s0, r0 - c->mov64(a2, s5); // or a2, s5, r0 - c->mov64(a3, s4); // or a3, s4, r0 - call_addr = c->gprs[t9].du32[0]; // function call: - c->sll(v0, ra, 0); // sll v0, ra, 0 - c->jalr(call_addr); // jalr ra, t9 - - block_34: - c->daddiu(s3, s3, -1); // daddiu s3, s3, -1 - c->daddiu(s5, s5, 144); // daddiu s5, s5, 144 - c->daddiu(s4, s4, 48); // daddiu s4, s4, 48 - bc = c->sgpr64(s3) != 0; // bne s3, r0, L69 - c->daddiu(s0, s0, 1); // daddiu s0, s0, 1 - if (bc) {goto block_1;} // branch non-likely - - c->mov64(v0, s0); // or v0, s0, r0 - c->ld(ra, 0, sp); // ld ra, 0(sp) - c->ld(fp, 8, sp); // ld fp, 8(sp) - c->lq(gp, 144, sp); // lq gp, 144(sp) - c->lq(s5, 128, sp); // lq s5, 128(sp) - c->lq(s4, 112, sp); // lq s4, 112(sp) - c->lq(s3, 96, sp); // lq s3, 96(sp) - c->lq(s2, 80, sp); // lq s2, 80(sp) - c->lq(s1, 64, sp); // lq s1, 64(sp) - c->lq(s0, 48, sp); // lq s0, 48(sp) - //jr ra // jr ra - c->daddiu(sp, sp, 160); // daddiu sp, sp, 160 - 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.sp_frame_time = intern_from_c("*sp-frame-time*").c(); - cache.quaternion = intern_from_c("quaternion*!").c(); - cache.sp_free_particle = intern_from_c("sp-free-particle").c(); - cache.sp_relaunch_particle_3d = intern_from_c("sp-relaunch-particle-3d").c(); - gLinkedFunctionTable.reg("sp-process-block-3d", execute, 256); -} - -} // namespace sp_process_block_3d -} // namespace Mips2C - -//--------------------------MIPS2C--------------------- -#include "game/mips2c/mips2c_private.h" - -namespace Mips2C::jak1 { -namespace sp_process_block_2d { -struct Cache { - void* sp_frame_time; // *sp-frame-time* - void* sp_free_particle; // sp-free-particle - void* sp_orbiter; // sp-orbiter - void* sp_relaunch_particle_2d; // sp-relaunch-particle-2d -} cache; - -u64 execute(void* ctxt) { - auto* c = (ExecutionContext*)ctxt; - bool bc = false; - u32 call_addr = 0; - 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) - c->mov64(gp, a0); // or gp, a0, r0 - c->mov64(s5, a1); // or s5, a1, r0 - c->mov64(s4, a2); // or s4, a2, r0 - c->mov64(s1, a3); // or s1, a3, r0 - c->mov64(s3, t0); // or s3, t0, r0 - c->mov64(s2, t1); // or s2, t1, r0 - c->load_symbol(v1, cache.sp_frame_time); // lw v1, *sp-frame-time*(s7) - c->lqc2(vf9, 0, v1); // lqc2 vf9, 0(v1) - c->mov128_gpr_vf(v1, vf9); // qmfc2.i v1, vf9 - c->andi(s0, v1, 255); // andi s0, v1, 255 - - block_1: - c->lw(v1, 128, s5); // lw v1, 128(s5) - bc = c->sgpr64(v1) == c->sgpr64(s7); // beq v1, s7, L97 - // nop // sll r0, r0, 0 - if (bc) {goto block_31;} // branch non-likely - - bc = c->sgpr64(s2) == c->sgpr64(s7); // beq s2, s7, L87 - c->lw(v1, 104, s5); // lw v1, 104(s5) - if (bc) {goto block_8;} // branch non-likely - - c->andi(v1, v1, 8192); // andi v1, v1, 8192 - bc = c->sgpr64(v1) != 0; // bne v1, r0, L87 - // nop // sll r0, r0, 0 - if (bc) {goto block_8;} // branch non-likely - - c->lw(v1, 100, s5); // lw v1, 100(s5) - c->addiu(a0, r0, -1); // addiu a0, r0, -1 - bc = c->sgpr64(v1) == c->sgpr64(a0); // beq v1, a0, L86 - // nop // sll r0, r0, 0 - if (bc) {goto block_6;} // branch non-likely - - bc = c->sgpr64(v1) == 0; // beq v1, r0, L96 - // nop // sll r0, r0, 0 - if (bc) {goto block_30;} // branch non-likely - - - block_6: - c->lw(a0, 104, s5); // lw a0, 104(s5) - c->andi(v1, a0, 64); // andi v1, a0, 64 - c->xor_(a0, a0, v1); // xor a0, a0, v1 - bc = c->sgpr64(v1) == 0; // beq v1, r0, L97 - c->sw(a0, 104, s5); // sw a0, 104(s5) - if (bc) {goto block_31;} // branch non-likely - - c->lw(v1, 124, s5); // lw v1, 124(s5) - //beq r0, r0, L97 // beq r0, r0, L97 - c->sw(v1, 44, s4); // sw v1, 44(s4) - goto block_31; // branch always - - - block_8: - c->lw(v1, 100, s5); // lw v1, 100(s5) - c->addiu(a0, r0, -1); // addiu a0, r0, -1 - bc = c->sgpr64(v1) == c->sgpr64(a0); // beq v1, a0, L88 - c->dsubu(a0, v1, s0); // dsubu a0, v1, s0 - if (bc) {goto block_11;} // branch non-likely - - bc = c->sgpr64(v1) == 0; // beq v1, r0, L96 - c->pmaxw(v1, a0, r0); // pmaxw v1, a0, r0 - if (bc) {goto block_30;} // branch non-likely - - c->sw(v1, 100, s5); // sw v1, 100(s5) - - block_11: - c->lw(a0, 104, s5); // lw a0, 104(s5) - c->andi(v1, a0, 64); // andi v1, a0, 64 - c->xor_(a0, a0, v1); // xor a0, a0, v1 - bc = c->sgpr64(v1) == 0; // beq v1, r0, L89 - c->sw(a0, 104, s5); // sw a0, 104(s5) - if (bc) {goto block_13;} // branch non-likely - - c->lw(v1, 124, s5); // lw v1, 124(s5) - c->sw(v1, 44, s4); // sw v1, 44(s4) - - block_13: - c->lw(t9, 112, s5); // lw t9, 112(s5) - bc = c->sgpr64(t9) == 0; // beq t9, r0, L90 - // nop // sll r0, r0, 0 - if (bc) {goto block_15;} // branch non-likely - - c->daddiu(sp, sp, -80); // daddiu sp, sp, -80 - c->sq(gp, 0, sp); // sq gp, 0(sp) - c->sq(s5, 16, sp); // sq s5, 16(sp) - c->sq(s4, 32, sp); // sq s4, 32(sp) - c->sq(s1, 48, sp); // sq s1, 48(sp) - c->mov64(a0, gp); // or a0, gp, r0 - c->mov64(a1, s5); // or a1, s5, r0 - c->mov64(a2, s4); // or a2, s4, r0 - call_addr = c->gprs[t9].du32[0]; // function call: - c->sq(s3, 64, sp); // sq s3, 64(sp) - c->jalr(call_addr); // jalr ra, t9 - c->lq(gp, 0, sp); // lq gp, 0(sp) - c->lq(s5, 16, sp); // lq s5, 16(sp) - c->lq(s4, 32, sp); // lq s4, 32(sp) - c->lq(s1, 48, sp); // lq s1, 48(sp) - c->lq(s3, 64, sp); // lq s3, 64(sp) - c->daddiu(sp, sp, 80); // daddiu sp, sp, 80 - - block_15: - c->lw(a1, 120, s5); // lw a1, 120(s5) - c->lw(v1, 116, s5); // lw v1, 116(s5) - bc = c->sgpr64(a1) == 0; // beq a1, r0, L91 - c->dsubu(a0, v1, s0); // dsubu a0, v1, s0 - if (bc) {goto block_18;} // branch non-likely - - c->daddiu(v1, a0, -1); // daddiu v1, a0, -1 - bc = ((s64)c->sgpr64(v1)) >= 0; // bgez v1, L91 - c->sw(a0, 116, s5); // sw a0, 116(s5) - if (bc) {goto block_18;} // branch non-likely - - c->daddiu(sp, sp, -96); // daddiu sp, sp, -96 - c->sq(gp, 0, sp); // sq gp, 0(sp) - c->sq(s5, 16, sp); // sq s5, 16(sp) - c->sq(s4, 32, sp); // sq s4, 32(sp) - c->sq(s1, 48, sp); // sq s1, 48(sp) - c->sq(s3, 64, sp); // sq s3, 64(sp) - c->sq(s2, 80, sp); // sq s2, 80(sp) - c->mov64(a0, gp); // or a0, gp, r0 - c->mov64(a3, s4); // or a3, s4, r0 - c->mov64(a2, s5); // or a2, s5, r0 - c->load_symbol(t9, cache.sp_relaunch_particle_2d);// lw t9, sp-relaunch-particle-2d(s7) - call_addr = c->gprs[t9].du32[0]; // function call: - c->sll(v0, ra, 0); // sll v0, ra, 0 - c->jalr(call_addr); // jalr ra, t9 - c->lq(gp, 0, sp); // lq gp, 0(sp) - c->lq(s5, 16, sp); // lq s5, 16(sp) - c->lq(s4, 32, sp); // lq s4, 32(sp) - c->lq(s1, 48, sp); // lq s1, 48(sp) - c->lq(s3, 64, sp); // lq s3, 64(sp) - c->lq(s2, 80, sp); // lq s2, 80(sp) - c->daddiu(sp, sp, 96); // daddiu sp, sp, 96 - - block_18: - c->lqc2(vf1, 0, s4); // lqc2 vf1, 0(s4) - c->lqc2(vf2, 16, s4); // lqc2 vf2, 16(s4) - c->lqc2(vf3, 32, s4); // lqc2 vf3, 32(s4) - c->lqc2(vf4, 16, s5); // lqc2 vf4, 16(s5) - c->lqc2(vf5, 32, s5); // lqc2 vf5, 32(s5) - c->lqc2(vf6, 48, s5); // lqc2 vf6, 48(s5) - c->lqc2(vf7, 64, s5); // lqc2 vf7, 64(s5) - c->lwc1(f0, 96, s5); // lwc1 f0, 96(s5) - c->mfc1(v1, f0); // mfc1 v1, f0 - c->vmul_bc(DEST::xyzw, BC::z, vf7, vf7, vf9); // vmulz.xyzw vf7, vf7, vf9 - bc = c->sgpr64(v1) == 0; // beq v1, r0, L92 - c->vadd(DEST::xyz, vf4, vf4, vf7); // vadd.xyz vf4, vf4, vf7 - if (bc) {goto block_20;} // branch non-likely - - c->mov128_vf_gpr(vf8, v1); // qmtc2.i vf8, v1 - c->vsub_bc(DEST::w, BC::x, vf8, vf0, vf8); // vsubx.w vf8, vf0, vf8 - c->vmul_bc(DEST::xyzw, BC::w, vf8, vf8, vf9); // vmulw.xyzw vf8, vf8, vf9 - c->vsub_bc(DEST::w, BC::w, vf8, vf0, vf8); // vsubw.w vf8, vf0, vf8 - c->vmul_bc(DEST::xyz, BC::w, vf4, vf4, vf8); // vmulw.xyz vf4, vf4, vf8 - - block_20: - c->vmul_bc(DEST::xyzw, BC::y, vf10, vf4, vf9); // vmuly.xyzw vf10, vf4, vf9 - c->vmul_bc(DEST::xyzw, BC::y, vf11, vf5, vf9); // vmuly.xyzw vf11, vf5, vf9 - c->vmul_bc(DEST::xyzw, BC::y, vf12, vf6, vf9); // vmuly.xyzw vf12, vf6, vf9 - c->vadd(DEST::xyzw, vf1, vf1, vf10); // vadd.xyzw vf1, vf1, vf10 - c->vadd(DEST::zw, vf2, vf2, vf11); // vadd.zw vf2, vf2, vf11 - c->vadd(DEST::xyzw, vf3, vf3, vf12); // vadd.xyzw vf3, vf3, vf12 - c->vmax_bc(DEST::xyzw, BC::x, vf3, vf3, vf0); // vmaxx.xyzw vf3, vf3, vf0 - c->sqc2(vf4, 16, s5); // sqc2 vf4, 16(s5) - c->sqc2(vf1, 0, s4); // sqc2 vf1, 0(s4) - c->sqc2(vf2, 16, s4); // sqc2 vf2, 16(s4) - c->sqc2(vf3, 32, s4); // sqc2 vf3, 32(s4) - c->lwc1(f0, 24, s4); // lwc1 f0, 24(s4) - c->cvtws(f0, f0); // cvt.w.s f0, f0 - c->mfc1(v1, f0); // mfc1 v1, f0 - c->dsll32(v1, v1, 16); // dsll32 v1, v1, 16 - c->dsra32(v1, v1, 16); // dsra32 v1, v1, 16 - c->mtc1(f0, v1); // mtc1 f0, v1 - c->cvtsw(f0, f0); // cvt.s.w f0, f0 - c->swc1(f0, 24, s4); // swc1 f0, 24(s4) - c->lw(v1, 104, s5); // lw v1, 104(s5) - c->andi(v1, v1, 128); // andi v1, v1, 128 - bc = c->sgpr64(v1) == 0; // beq v1, r0, L93 - c->load_symbol(t9, cache.sp_orbiter); // lw t9, sp-orbiter(s7) - if (bc) {goto block_22;} // branch non-likely - - c->daddiu(sp, sp, -96); // daddiu sp, sp, -96 - c->sq(gp, 0, sp); // sq gp, 0(sp) - c->sq(s5, 16, sp); // sq s5, 16(sp) - c->sq(s4, 32, sp); // sq s4, 32(sp) - c->sq(s1, 48, sp); // sq s1, 48(sp) - c->sq(s3, 64, sp); // sq s3, 64(sp) - c->mov64(a0, gp); // or a0, gp, r0 - c->mov64(a1, s5); // or a1, s5, r0 - c->mov64(a2, s4); // or a2, s4, r0 - call_addr = c->gprs[t9].du32[0]; // function call: - c->sq(s2, 80, sp); // sq s2, 80(sp) - c->jalr(call_addr); // jalr ra, t9 - c->lq(gp, 0, sp); // lq gp, 0(sp) - c->lq(s5, 16, sp); // lq s5, 16(sp) - c->lq(s4, 32, sp); // lq s4, 32(sp) - c->lq(s1, 48, sp); // lq s1, 48(sp) - c->lq(s3, 64, sp); // lq s3, 64(sp) - c->lq(s2, 80, sp); // lq s2, 80(sp) - c->daddiu(sp, sp, 96); // daddiu sp, sp, 96 - - block_22: - c->lq(v1, 32, s4); // lq v1, 32(s4) - c->lw(a0, 104, s5); // lw a0, 104(s5) - c->andi(a1, a0, 2); // andi a1, a0, 2 - bc = c->sgpr64(a1) == 0; // beq a1, r0, L94 - c->andi(a1, a0, 4); // andi a1, a0, 4 - if (bc) {goto block_25;} // branch non-likely - - bc = c->sgpr64(v1) != 0; // bne v1, r0, L94 - c->pextuw(t4, v1, r0); // pextuw t4, v1, r0 - if (bc) {goto block_25;} // branch non-likely - - bc = c->sgpr64(t4) == 0; // beq t4, r0, L96 - // nop // sll r0, r0, 0 - if (bc) {goto block_30;} // branch non-likely - - - block_25: - bc = c->sgpr64(a1) == 0; // beq a1, r0, L95 - c->andi(a0, a0, 1); // andi a0, a0, 1 - if (bc) {goto block_27;} // branch non-likely - - c->pcpyud(t4, v1, r0); // pcpyud t4, v1, r0 - c->pexew(t4, t4); // pexew t4, r0, t4 - bc = ((s64)c->sgpr64(t4)) <= 0; // blez t4, L96 - // nop // sll r0, r0, 0 - if (bc) {goto block_30;} // branch non-likely - - - block_27: - bc = c->sgpr64(a0) == 0; // beq a0, r0, L97 - // nop // sll r0, r0, 0 - if (bc) {goto block_31;} // branch non-likely - - c->mov128_gpr_vf(v1, vf1); // qmfc2.i v1, vf1 - c->pcpyud(v1, v1, r0); // pcpyud v1, v1, r0 - c->pexew(v1, v1); // pexew v1, r0, v1 - bc = ((s64)c->sgpr64(v1)) < 0; // bltz v1, L96 - c->mov128_gpr_vf(v1, vf2); // qmfc2.i v1, vf2 - if (bc) {goto block_30;} // branch non-likely - - c->pcpyud(v1, v1, r0); // pcpyud v1, v1, r0 - c->pexew(v1, v1); // pexew v1, r0, v1 - bc = ((s64)c->sgpr64(v1)) >= 0; // bgez v1, L97 - // nop // sll r0, r0, 0 - if (bc) {goto block_31;} // branch non-likely - - block_30: - c->load_symbol(t9, cache.sp_free_particle); // lw t9, sp-free-particle(s7) - c->mov64(a0, gp); // or a0, gp, r0 - c->mov64(a1, s1); // or a1, s1, r0 - c->mov64(a2, s5); // or a2, s5, r0 - c->mov64(a3, s4); // or a3, s4, r0 - call_addr = c->gprs[t9].du32[0]; // function call: - c->sll(v0, ra, 0); // sll v0, ra, 0 - c->jalr(call_addr); // jalr ra, t9 - - block_31: - c->daddiu(s3, s3, -1); // daddiu s3, s3, -1 - c->daddiu(s5, s5, 144); // daddiu s5, s5, 144 - c->daddiu(s4, s4, 48); // daddiu s4, s4, 48 - bc = c->sgpr64(s3) != 0; // bne s3, r0, L85 - c->daddiu(s1, s1, 1); // daddiu s1, s1, 1 - if (bc) {goto block_1;} // branch non-likely - - c->mov64(v0, s1); // or v0, s1, 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.sp_frame_time = intern_from_c("*sp-frame-time*").c(); - cache.sp_free_particle = intern_from_c("sp-free-particle").c(); - cache.sp_orbiter = intern_from_c("sp-orbiter").c(); - cache.sp_relaunch_particle_2d = intern_from_c("sp-relaunch-particle-2d").c(); - gLinkedFunctionTable.reg("sp-process-block-2d", execute, 256); -} - -} // namespace sp_process_block_2d -} // namespace Mips2C diff --git a/game/mips2c/jak1_functions/sparticle_launcher.cpp b/game/mips2c/jak1_functions/sparticle_launcher.cpp deleted file mode 100644 index d6f0d33d31..0000000000 --- a/game/mips2c/jak1_functions/sparticle_launcher.cpp +++ /dev/null @@ -1,841 +0,0 @@ -//--------------------------MIPS2C--------------------- -// clang-format off -#include "game/mips2c/mips2c_private.h" -#include "game/kernel/jak1/kscheme.h" -using namespace jak1; - -namespace Mips2C::jak1 { -namespace particle_adgif { -struct Cache { - void* particle_adgif_cache; // *particle-adgif-cache* - void* particle_setup_adgif; // particle-setup-adgif -} cache; - -u64 execute(void* ctxt) { - auto* c = (ExecutionContext*)ctxt; - bool bc = false; - u32 call_addr = 0; - c->mov64(v1, a0); // or v1, a0, r0 - c->mov64(v1, a1); // or v1, a1, r0 - // nop // sll r0, r0, 0 - c->dsra(a3, a1, 20); // dsra a3, a1, 20 - c->load_symbol(t1, cache.particle_adgif_cache); // lw t1, *particle-adgif-cache*(s7) - c->dsra(t0, a1, 8); // dsra t0, a1, 8 - c->lw(t2, 0, t1); // lw t2, 0(t1) - c->xor_(a3, a3, t0); // xor a3, a3, t0 - c->lhu(v1, 4, t1); // lhu v1, 4(t1) - c->andi(a3, a3, 65535); // andi a3, a3, 65535 - c->lw(t4, 8, t1); // lw t4, 8(t1) - bc = c->sgpr64(v1) == c->sgpr64(a3); // beq v1, a3, L151 - c->daddiu(t3, t1, 12); // daddiu t3, t1, 12 - if (bc) { - if (c->sgpr64(t4) != 0) { - goto block_6; - } else { - printf("HACK: ignoring cached adgif to avoid crash on particle with unset texture.\n"); - } - } // branch non-likely - - bc = c->sgpr64(t2) == 0; // beq t2, r0, L150 - c->daddiu(t4, t1, 172); // daddiu t4, t1, 172 - if (bc) {goto block_4;} // branch non-likely - - - block_2: - c->lhu(v1, 0, t3); // lhu v1, 0(t3) - c->daddiu(t3, t3, 2); // daddiu t3, t3, 2 - // nop // sll r0, r0, 0 - // nop // sll r0, r0, 0 - bc = c->sgpr64(v1) == c->sgpr64(a3); // beq v1, a3, L151 - c->daddiu(t2, t2, -1); // daddiu t2, t2, -1 - if (bc) {goto block_6;} // branch non-likely - - bc = c->sgpr64(t2) != 0; // bne t2, r0, L149 - c->daddiu(t4, t4, 80); // daddiu t4, t4, 80 - if (bc) {goto block_2;} // branch non-likely - - - block_4: - c->daddiu(sp, sp, -16); // daddiu sp, sp, -16 - c->lw(v1, 0, t1); // lw v1, 0(t1) - c->daddiu(v1, v1, -80); // daddiu v1, v1, -80 - c->sw(a0, 0, sp); // sw a0, 0(sp) - bc = c->sgpr64(v1) == 0; // beq v1, r0, L152 - c->daddiu(v1, v1, 81); // daddiu v1, v1, 81 - if (bc) {goto block_7;} // branch non-likely - - c->sh(a3, 0, t3); // sh a3, 0(t3) - // nop // sll r0, r0, 0 - c->sw(t4, 4, sp); // sw t4, 4(sp) - c->mov64(a0, t4); // or a0, t4, r0 - c->load_symbol(t9, cache.particle_setup_adgif); // lw t9, particle-setup-adgif(s7) - // nop // sll r0, r0, 0 - c->sw(ra, 8, sp); // sw ra, 8(sp) - // nop // sll r0, r0, 0 - call_addr = c->gprs[t9].du32[0]; // function call: - c->sw(v1, 0, t1); // sw v1, 0(t1) - c->jalr(call_addr); // jalr ra, t9 - c->lw(a0, 0, sp); // lw a0, 0(sp) - // nop // sll r0, r0, 0 - c->lw(t4, 4, sp); // lw t4, 4(sp) - // nop // sll r0, r0, 0 - c->lw(ra, 8, sp); // lw ra, 8(sp) - c->daddiu(sp, sp, 16); // daddiu sp, sp, 16 - - block_6: - c->lqc2(vf16, 0, t4); // lqc2 vf16, 0(t4) - c->lqc2(vf17, 16, t4); // lqc2 vf17, 16(t4) - c->lqc2(vf18, 32, t4); // lqc2 vf18, 32(t4) - c->lqc2(vf19, 48, t4); // lqc2 vf19, 48(t4) - c->lqc2(vf20, 64, t4); // lqc2 vf20, 64(t4) - c->sqc2(vf16, 0, a0); // sqc2 vf16, 0(a0) - c->sqc2(vf17, 16, a0); // sqc2 vf17, 16(a0) - c->sqc2(vf18, 32, a0); // sqc2 vf18, 32(a0) - c->sqc2(vf19, 48, a0); // sqc2 vf19, 48(a0) - c->sqc2(vf20, 64, a0); // sqc2 vf20, 64(a0) - c->sw(t4, 8, t1); // sw t4, 8(t1) - c->sh(a3, 4, t1); // sh a3, 4(t1) - //jr ra // jr ra - // nop // sll r0, r0, 0 - goto end_of_function; // return - - - block_7: - c->sw(t4, 4, sp); // sw t4, 4(sp) - // nop // sll r0, r0, 0 - c->load_symbol(t9, cache.particle_setup_adgif); // lw t9, particle-setup-adgif(s7) - // nop // sll r0, r0, 0 - c->sw(ra, 8, sp); // sw ra, 8(sp) - // nop // sll r0, r0, 0 - call_addr = c->gprs[t9].du32[0]; // function call: - // nop // sll r0, r0, 0 - c->jalr(call_addr); // jalr ra, t9 - c->lw(t4, 4, sp); // lw t4, 4(sp) - // nop // sll r0, r0, 0 - c->lw(ra, 8, sp); // lw ra, 8(sp) - c->daddiu(sp, sp, 16); // daddiu sp, sp, 16 - //jr ra // jr ra - // nop // sll r0, r0, 0 - goto end_of_function; // return - - //jr ra // jr ra - c->daddu(sp, sp, r0); // daddu sp, sp, r0 - 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.particle_adgif_cache = intern_from_c("*particle-adgif-cache*").c(); - cache.particle_setup_adgif = intern_from_c("particle-setup-adgif").c(); - gLinkedFunctionTable.reg("particle-adgif", execute, 128); -} - -} // namespace particle_adgif -} // namespace Mips2C - -//--------------------------MIPS2C--------------------- -#include "game/mips2c/mips2c_private.h" - -namespace Mips2C::jak1 { -namespace sp_launch_particles_var { -struct Cache { - void* level; // *level* - void* sp_launcher_enable; // *sp-launcher-enable* - void* sp_launcher_lock; // *sp-launcher-lock* - void* time_of_day_context; // *time-of-day-context* - void* add_to_sprite_aux_list; // add-to-sprite-aux-list - void* cos; // cos - void* new_sound_id; // new-sound-id - void* particle_adgif; // particle-adgif - void* quaternion_axis_angle; // quaternion-axis-angle! - void* sin; // sin - void* sound_play_by_spec; // sound-play-by-spec - void* sp_adjust_launch; // sp-adjust-launch - void* sp_euler_convert; // sp-euler-convert - void* sp_get_particle; // sp-get-particle - void* sp_init_fields; // sp-init-fields! - void* sp_queue_launch; // sp-queue-launch - void* sp_rotate_system; // sp-rotate-system -} cache; - -u64 execute(void* ctxt) { - auto* c = (ExecutionContext*)ctxt; - bool bc = false; - u32 call_addr = 0; - c->mov64(v1, a0); // or v1, a0, r0 - c->mov64(v1, a1); // or v1, a1, r0 - c->mov64(v1, a2); // or v1, a2, r0 - c->mov64(v1, a3); // or v1, a3, r0 - c->mov64(v1, t0); // or v1, t0, r0 - c->mov64(v1, t1); // or v1, t1, r0 - // nop // sll r0, r0, 0 - c->daddiu(sp, sp, -256); // daddiu sp, sp, -256 - // nop // sll r0, r0, 0 - c->load_symbol(v1, cache.sp_launcher_enable); // lw v1, *sp-launcher-enable*(s7) - c->sw(ra, 0, sp); // sw ra, 0(sp) - bc = c->sgpr64(v1) == c->sgpr64(s7); // beq v1, s7, L106 - c->sq(s0, 16, sp); // sq s0, 16(sp) - if (bc) {goto block_6;} // branch non-likely - - c->load_symbol(v1, cache.sp_launcher_lock); // lw v1, *sp-launcher-lock*(s7) - c->sq(s1, 32, sp); // sq s1, 32(sp) - bc = c->sgpr64(v1) == c->sgpr64(s7); // beq v1, s7, L108 - c->sq(s2, 48, sp); // sq s2, 48(sp) - if (bc) {goto block_8;} // branch non-likely - - bc = c->sgpr64(a3) != c->sgpr64(s7); // bne a3, s7, L107 - c->lui(v1, 16256); // lui v1, 16256 - if (bc) {goto block_7;} // branch non-likely - - bc = c->sgpr64(t0) != c->sgpr64(s7); // bne t0, s7, L107 - // nop // sll r0, r0, 0 - if (bc) {goto block_7;} // branch non-likely - - bc = c->sgpr64(t1) != c->sgpr64(v1); // bne t1, v1, L107 - // nop // sll r0, r0, 0 - if (bc) {goto block_7;} // branch non-likely - - c->load_symbol(t9, cache.sp_queue_launch); // lw t9, sp-queue-launch(s7) - // nop // sll r0, r0, 0 - call_addr = c->gprs[t9].du32[0]; // function call: - // nop // sll r0, r0, 0 - c->jalr(call_addr); // jalr ra, t9 - c->lw(ra, 0, sp); // lw ra, 0(sp) - // nop // sll r0, r0, 0 - - block_6: - //jr ra // jr ra - c->daddiu(sp, sp, 256); // daddiu sp, sp, 256 - goto end_of_function; // return - - - block_7: - c->sd(r0, 2, r0); // sd r0, 2(r0) - // nop // sll r0, r0, 0 - - block_8: - c->sq(s3, 176, sp); // sq s3, 176(sp) - // nop // sll r0, r0, 0 - c->sq(s4, 192, sp); // sq s4, 192(sp) - // nop // sll r0, r0, 0 - c->sq(s5, 208, sp); // sq s5, 208(sp) - // nop // sll r0, r0, 0 - c->sq(s6, 224, sp); // sq s6, 224(sp) - // nop // sll r0, r0, 0 - c->lqc2(vf30, 0, a2); // lqc2 vf30, 0(a2) - c->mtc1(f1, t1); // mtc1 f1, t1 - c->sqc2(vf30, 64, sp); // sqc2 vf30, 64(sp) - c->lui(v1, 17279); // lui v1, 17279 - c->mov64(s3, a0); // or s3, a0, r0 - c->mov128_vf_gpr(vf31, v1); // qmtc2.i vf31, v1 - c->mov64(s4, a1); // or s4, a1, r0 - c->lw(s6, 24, s3); // lw s6, 24(s3) - c->mov64(s0, a3); // or s0, a3, r0 - c->mov64(s1, t0); // or s1, t0, r0 - c->lw(a1, 8, a1); // lw a1, 8(a1) - c->daddiu(a0, sp, 96); // daddiu a0, sp, 96 - c->addiu(a2, r0, 0); // addiu a2, r0, 0 - c->addiu(a3, r0, 8); // addiu a3, r0, 8 - c->load_symbol(t9, cache.sp_init_fields); // lw t9, sp-init-fields!(s7) - c->daddiu(t0, s7, 8); // daddiu t0, s7, 8 - call_addr = c->gprs[t9].du32[0]; // function call: - // nop // sll r0, r0, 0 - c->jalr(call_addr); // jalr ra, t9 - c->sw(v0, 12, sp); // sw v0, 12(sp) - // nop // sll r0, r0, 0 - c->lwc1(f2, 116, sp); // lwc1 f2, 116(sp) - // nop // sll r0, r0, 0 - bc = c->sgpr64(s0) == c->sgpr64(s7); // beq s0, s7, L109 - c->muls(f1, f2, f1); // mul.s f1, f2, f1 - if (bc) {goto block_11;} // branch non-likely - - c->lwc1(f2, 24, s0); // lwc1 f2, 24(s0) - // nop // sll r0, r0, 0 - c->adds(f2, f2, f1); // add.s f2, f2, f1 - // nop // sll r0, r0, 0 - c->swc1(f2, 24, s0); // swc1 f2, 24(s0) - // nop // sll r0, r0, 0 - c->cvtws(f2, f2); // cvt.w.s f2, f2 - // nop // sll r0, r0, 0 - c->mfc1(v1, f2); // mfc1 v1, f2 - // nop // sll r0, r0, 0 - bc = c->sgpr64(v1) == 0; // beq v1, r0, L132 - // nop // sll r0, r0, 0 - if (bc) {goto block_66;} // branch non-likely - - //beq r0, r0, L110 // beq r0, r0, L110 - // nop // sll r0, r0, 0 - goto block_12; // branch always - - - block_11: - // nop // sll r0, r0, 0 - c->lwc1(f2, 0, s4); // lwc1 f2, 0(s4) - // nop // sll r0, r0, 0 - c->adds(f2, f2, f1); // add.s f2, f2, f1 - // nop // sll r0, r0, 0 - c->swc1(f2, 0, s4); // swc1 f2, 0(s4) - // nop // sll r0, r0, 0 - c->cvtws(f2, f2); // cvt.w.s f2, f2 - // nop // sll r0, r0, 0 - c->mfc1(v1, f2); // mfc1 v1, f2 - // nop // sll r0, r0, 0 - bc = c->sgpr64(v1) == 0; // beq v1, r0, L132 - // nop // sll r0, r0, 0 - if (bc) {goto block_66;} // branch non-likely - - - block_12: - c->addiu(a1, r0, 0); // addiu a1, r0, 0 - c->mov64(a2, s7); // or a2, s7, r0 - bc = c->sgpr64(s1) == c->sgpr64(s7); // beq s1, s7, L111 - c->lw(v1, 12, s1); // lw v1, 12(s1) - if (bc) {goto block_15;} // branch non-likely - - bc = c->sgpr64(v1) == c->sgpr64(s7); // beq v1, s7, L111 - c->lh(v1, 6, v1); // lh v1, 6(v1) - if (bc) {goto block_15;} // branch non-likely - - c->andi(a0, v1, 4); // andi a0, v1, 4 - c->addiu(a3, r0, 1); // addiu a3, r0, 1 - c->movn(a1, a3, a0); // movn a1, a3, a0 - c->andi(a0, v1, 8); // andi a0, v1, 8 - c->movn(a2, s0, a0); // movn a2, s0, a0 - // nop // sll r0, r0, 0 - - block_15: - c->load_symbol(t9, cache.sp_get_particle); // lw t9, sp-get-particle(s7) - c->mov64(a0, s3); // or a0, s3, r0 - call_addr = c->gprs[t9].du32[0]; // function call: - // nop // sll r0, r0, 0 - c->jalr(call_addr); // jalr ra, t9 - bc = c->sgpr64(v0) == c->sgpr64(s7); // beq v0, s7, L132 - c->mov64(s2, v0); // or s2, v0, r0 - if (bc) {goto block_66;} // branch non-likely - - c->daddiu(a0, sp, 128); // daddiu a0, sp, 128 - c->lw(a1, 12, sp); // lw a1, 12(sp) - c->addiu(a2, r0, 9); // addiu a2, r0, 9 - c->addiu(a3, r0, 22); // addiu a3, r0, 22 - c->load_symbol(t9, cache.sp_init_fields); // lw t9, sp-init-fields!(s7) - c->daddiu(t0, s7, 8); // daddiu t0, s7, 8 - call_addr = c->gprs[t9].du32[0]; // function call: - // nop // sll r0, r0, 0 - c->jalr(call_addr); // jalr ra, t9 - c->daddiu(a0, s2, 12); // daddiu a0, s2, 12 - c->mov64(a1, v0); // or a1, v0, r0 - c->addiu(a2, r0, 23); // addiu a2, r0, 23 - c->addiu(a3, r0, 52); // addiu a3, r0, 52 - call_addr = c->gprs[t9].du32[0]; // function call: - c->daddiu(t0, s7, 8); // daddiu t0, s7, 8 - c->jalr(call_addr); // jalr ra, t9 - c->sw(v0, 80, sp); // sw v0, 80(sp) - // nop // sll r0, r0, 0 - c->lw(s5, 104, s2); // lw s5, 104(s2) - // nop // sll r0, r0, 0 - bc = c->sgpr64(s6) != c->sgpr64(s7); // bne s6, s7, L114 - // nop // sll r0, r0, 0 - if (bc) {goto block_23;} // branch non-likely - - bc = c->sgpr64(s1) == c->sgpr64(s7); // beq s1, s7, L112 - c->lw(v1, 12, s1); // lw v1, 12(s1) - if (bc) {goto block_21;} // branch non-likely - - bc = c->sgpr64(v1) == c->sgpr64(s7); // beq v1, s7, L112 - c->lh(v1, 6, v1); // lh v1, 6(v1) - if (bc) {goto block_21;} // branch non-likely - - c->andi(v1, v1, 4); // andi v1, v1, 4 - c->mov64(a0, s5); // or a0, s5, r0 - bc = c->sgpr64(v1) == 0; // beq v1, r0, L112 - c->lw(v1, 28, s1); // lw v1, 28(s1) - if (bc) {goto block_21;} // branch non-likely - - c->andi(a0, a0, 256); // andi a0, a0, 256 - c->addiu(a1, r0, 1); // addiu a1, r0, 1 - c->movn(v1, a1, a0); // movn v1, a1, a0 - // nop // sll r0, r0, 0 - //beq r0, r0, L113 // beq r0, r0, L113 - c->sw(v1, 148, sp); // sw v1, 148(sp) - goto block_22; // branch always - - - block_21: - c->andi(v1, s5, 16384); // andi v1, s5, 16384 - // nop // sll r0, r0, 0 - c->dsra(v1, v1, 14); // dsra v1, v1, 14 - // nop // sll r0, r0, 0 - c->sw(v1, 148, sp); // sw v1, 148(sp) - // nop // sll r0, r0, 0 - - block_22: - c->lwc1(f2, 152, sp); // lwc1 f2, 152(sp) - // nop // sll r0, r0, 0 - c->cvtws(f2, f2); // cvt.w.s f2, f2 - // nop // sll r0, r0, 0 - c->mfc1(v1, f2); // mfc1 v1, f2 - // nop // sll r0, r0, 0 - c->dsll32(v1, v1, 16); // dsll32 v1, v1, 16 - // nop // sll r0, r0, 0 - c->dsra32(v1, v1, 16); // dsra32 v1, v1, 16 - // nop // sll r0, r0, 0 - c->mtc1(f2, v1); // mtc1 f2, v1 - // nop // sll r0, r0, 0 - c->cvtsw(f2, f2); // cvt.s.w f2, f2 - // nop // sll r0, r0, 0 - c->swc1(f2, 152, sp); // swc1 f2, 152(sp) - // nop // sll r0, r0, 0 - - block_23: - c->andi(v1, s5, 256); // andi v1, s5, 256 - c->lqc2(vf4, 160, sp); // lqc2 vf4, 160(sp) - bc = c->sgpr64(v1) != 0; // bne v1, r0, L115 - c->vmini_bc(DEST::xyz, BC::x, vf4, vf4, vf31); // vminix.xyz vf4, vf4, vf31 - if (bc) {goto block_25;} // branch non-likely - - c->sqc2(vf4, 160, sp); // sqc2 vf4, 160(sp) - // nop // sll r0, r0, 0 - - block_25: - bc = c->sgpr64(s1) == c->sgpr64(s7); // beq s1, s7, L116 - c->andi(v1, s5, 128); // andi v1, s5, 128 - if (bc) {goto block_28;} // branch non-likely - - bc = c->sgpr64(v1) == 0; // beq v1, r0, L116 - c->lw(a0, 128, sp); // lw a0, 128(sp) - if (bc) {goto block_28;} // branch non-likely - - c->load_symbol(t9, cache.cos); // lw t9, cos(s7) - // nop // sll r0, r0, 0 - call_addr = c->gprs[t9].du32[0]; // function call: - // nop // sll r0, r0, 0 - c->jalr(call_addr); // jalr ra, t9 - c->mov64(a1, v0); // or a1, v0, r0 - c->lw(a0, 128, sp); // lw a0, 128(sp) - c->load_symbol(t9, cache.sin); // lw t9, sin(s7) - // nop // sll r0, r0, 0 - call_addr = c->gprs[t9].du32[0]; // function call: - // nop // sll r0, r0, 0 - c->jalr(call_addr); // jalr ra, t9 - c->ori(v1, r0, 32768); // ori v1, r0, 32768 - c->dsll(v1, v1, 16); // dsll v1, v1, 16 - c->lw(a0, 136, sp); // lw a0, 136(sp) - c->xor_(a3, v0, v1); // xor a3, v0, v1 - c->sw(a0, 8, s2); // sw a0, 8(s2) - c->gprs[a2].du64[0] = 0; // or a2, r0, r0 - c->lw(t0, 132, sp); // lw t0, 132(sp) - c->load_symbol(t9, cache.quaternion_axis_angle); // lw t9, quaternion-axis-angle!(s7) - c->daddiu(a0, s2, 80); // daddiu a0, s2, 80 - call_addr = c->gprs[t9].du32[0]; // function call: - // nop // sll r0, r0, 0 - c->jalr(call_addr); // jalr ra, t9 - c->lw(v1, 16, s0); // lw v1, 16(s0) - // nop // sll r0, r0, 0 - c->lw(v1, 0, v1); // lw v1, 0(v1) - // nop // sll r0, r0, 0 - c->sw(v1, 108, s2); // sw v1, 108(s2) - // nop // sll r0, r0, 0 - - block_28: - c->sw(s7, 136, s2); // sw s7, 136(s2) - // nop // sll r0, r0, 0 - bc = c->sgpr64(s0) == c->sgpr64(s7); // beq s0, s7, L120 - c->lw(a0, 0, s0); // lw a0, 0(s0) - if (bc) {goto block_37;} // branch non-likely - - c->lw(a1, 24, a0); // lw a1, 24(a0) - // nop // sll r0, r0, 0 - bc = c->sgpr64(a1) == 0; // beq a1, r0, L120 - // nop // sll r0, r0, 0 - if (bc) {goto block_37;} // branch non-likely - - c->lw(a2, 0, s1); // lw a2, 0(s1) - c->daddiu(a3, s1, 60); // daddiu a3, s1, 60 - - block_31: - c->lw(v1, 0, a3); // lw v1, 0(a3) - c->daddiu(a2, a2, -1); // daddiu a2, a2, -1 - c->lw(v1, 0, v1); // lw v1, 0(v1) - // nop // sll r0, r0, 0 - bc = c->sgpr64(v1) != c->sgpr64(a1); // bne v1, a1, L119 - c->lh(v1, 4, a3); // lh v1, 4(a3) - if (bc) {goto block_36;} // branch non-likely - - c->andi(a0, v1, 1); // andi a0, v1, 1 - c->ori(v1, v1, 1); // ori v1, v1, 1 - bc = c->sgpr64(a0) != 0; // bne a0, r0, L119 - // nop // sll r0, r0, 0 - if (bc) {goto block_36;} // branch non-likely - - c->sh(v1, 4, a3); // sh v1, 4(a3) - // nop // sll r0, r0, 0 - c->lw(v1, 0, s2); // lw v1, 0(s2) - // nop // sll r0, r0, 0 - c->sw(v1, 8, a3); // sw v1, 8(a3) - c->mov64(a0, s7); // or a0, s7, r0 - if (((s64)c->sgpr64(s6)) != ((s64)c->sgpr64(s7))) {// bnel s6, s7, L118 - c->lw(a0, 0, s2); // lw a0, 0(s2) - goto block_35; - } - - block_35: - c->sw(a0, 12, a3); // sw a0, 12(a3) - // nop // sll r0, r0, 0 - c->sw(s2, 16, a3); // sw s2, 16(a3) - // nop // sll r0, r0, 0 - c->sw(a3, 136, s2); // sw a3, 136(s2) - // nop // sll r0, r0, 0 - //beq r0, r0, L120 // beq r0, r0, L120 - // nop // sll r0, r0, 0 - goto block_37; // branch always - - - block_36: - bc = c->sgpr64(a2) != 0; // bne a2, r0, L117 - c->daddiu(a3, a3, 32); // daddiu a3, a3, 32 - if (bc) {goto block_31;} // branch non-likely - - - block_37: - c->lw(a2, 80, sp); // lw a2, 80(sp) - c->daddiu(a0, sp, 128); // daddiu a0, sp, 128 - c->lh(v1, 0, a2); // lh v1, 0(a2) - c->mov64(a1, s2); // or a1, s2, r0 - c->load_symbol(t9, cache.sp_adjust_launch); // lw t9, sp-adjust-launch(s7) - c->daddiu(v1, v1, -64); // daddiu v1, v1, -64 - bc = ((s64)c->sgpr64(v1)) >= 0; // bgez v1, L121 - // nop // sll r0, r0, 0 - if (bc) {goto block_39;} // branch non-likely - - call_addr = c->gprs[t9].du32[0]; // function call: - // nop // sll r0, r0, 0 - c->jalr(call_addr); // jalr ra, t9 - - block_39: - bc = c->sgpr64(s6) == c->sgpr64(s7); // beq s6, s7, L122 - // nop // sll r0, r0, 0 - if (bc) {goto block_41;} // branch non-likely - - c->load_symbol(t9, cache.sp_euler_convert); // lw t9, sp-euler-convert(s7) - c->daddiu(a0, sp, 128); // daddiu a0, sp, 128 - call_addr = c->gprs[t9].du32[0]; // function call: - c->mov64(a1, s2); // or a1, s2, r0 - c->jalr(call_addr); // jalr ra, t9 - - block_41: - bc = c->sgpr64(s0) == c->sgpr64(s7); // beq s0, s7, L123 - c->lw(a2, 12, s0); // lw a2, 12(s0) - if (bc) {goto block_45;} // branch non-likely - - bc = c->sgpr64(a2) == c->sgpr64(s7); // beq a2, s7, L123 - c->daddiu(a0, sp, 128); // daddiu a0, sp, 128 - if (bc) {goto block_45;} // branch non-likely - - bc = c->sgpr64(a2) == 0; // beq a2, r0, L123 - c->mov64(a1, s2); // or a1, s2, r0 - if (bc) {goto block_45;} // branch non-likely - - c->load_symbol(t9, cache.sp_rotate_system); // lw t9, sp-rotate-system(s7) - // nop // sll r0, r0, 0 - call_addr = c->gprs[t9].du32[0]; // function call: - // nop // sll r0, r0, 0 - c->jalr(call_addr); // jalr ra, t9 - - block_45: - c->lqc2(vf4, 128, sp); // lqc2 vf4, 128(sp) - // nop // sll r0, r0, 0 - c->vadd(DEST::xyz, vf4, vf4, vf30); // vadd.xyz vf4, vf4, vf30 - c->lw(a0, 4, s2); // lw a0, 4(s2) - c->lw(a1, 96, sp); // lw a1, 96(sp) - // nop // sll r0, r0, 0 - c->load_symbol(t9, cache.particle_adgif); // lw t9, particle-adgif(s7) - // nop // sll r0, r0, 0 - c->sqc2(vf4, 128, sp); // sqc2 vf4, 128(sp) - // nop // sll r0, r0, 0 - call_addr = c->gprs[t9].du32[0]; // function call: - // nop // sll r0, r0, 0 - c->jalr(call_addr); // jalr ra, t9 - c->lw(a2, 4, s2); // lw a2, 4(s2) - c->lui(a3, 256); // lui a3, 256 - c->lw(v1, 64, a2); // lw v1, 64(a2) - c->andi(a0, s5, 32); // andi a0, s5, 32 - c->addiu(a1, r0, 134); // addiu a1, r0, 134 - // nop // sll r0, r0, 0 - c->movn(v1, a1, a0); // movn v1, a1, a0 - c->andi(a0, s5, 16); // andi a0, s5, 16 - c->addiu(a1, r0, 66); // addiu a1, r0, 66 - // nop // sll r0, r0, 0 - c->movn(v1, a1, a0); // movn v1, a1, a0 - c->andi(a0, s5, 8); // andi a0, s5, 8 - c->addiu(a1, r0, 72); // addiu a1, r0, 72 - // nop // sll r0, r0, 0 - c->movn(v1, a1, a0); // movn v1, a1, a0 - c->andi(a0, s5, 512); // andi a0, s5, 512 - c->sw(v1, 64, a2); // sw v1, 64(a2) - c->ori(a1, a3, 448); // ori a1, a3, 448 - if (((s64)c->sgpr64(a0)) != ((s64)0)) { // bnel a0, r0, L124 - c->sd(a1, 48, a2); // sd a1, 48(a2) - goto block_47; - } - - block_47: - c->lw(t9, 108, sp); // lw t9, 108(sp) - c->mov64(a1, s2); // or a1, s2, r0 - c->mov64(a0, s3); // or a0, s3, r0 - c->mov64(t0, s0); // or t0, s0, r0 - bc = c->sgpr64(t9) == 0; // beq t9, r0, L125 - c->daddiu(a2, sp, 128); // daddiu a2, sp, 128 - if (bc) {goto block_49;} // branch non-likely - - call_addr = c->gprs[t9].du32[0]; // function call: - c->mov64(a3, s4); // or a3, s4, r0 - c->jalr(call_addr); // jalr ra, t9 - - block_49: - c->lw(a0, 120, sp); // lw a0, 120(sp) - // nop // sll r0, r0, 0 - c->lwc1(f2, 4, s4); // lwc1 f2, 4(s4) - c->lui(a1, 16256); // lui a1, 16256 - bc = c->sgpr64(a0) == 0; // beq a0, r0, L126 - // nop // sll r0, r0, 0 - if (bc) {goto block_52;} // branch non-likely - - c->lwc1(f3, 4, a0); // lwc1 f3, 4(a0) - // nop // sll r0, r0, 0 - c->adds(f2, f2, f3); // add.s f2, f2, f3 - // nop // sll r0, r0, 0 - c->swc1(f2, 4, s4); // swc1 f2, 4(s4) - c->mtc1(f3, a1); // mtc1 f3, a1 - c->subs(f2, f2, f3); // sub.s f2, f2, f3 - // nop // sll r0, r0, 0 - c->mfc1(a1, f2); // mfc1 a1, f2 - // nop // sll r0, r0, 0 - bc = ((s64)c->sgpr64(a1)) < 0; // bltz a1, L126 - c->load_symbol(t9, cache.new_sound_id); // lw t9, new-sound-id(s7) - if (bc) {goto block_52;} // branch non-likely - - c->sw(a1, 4, s4); // sw a1, 4(s4) - // nop // sll r0, r0, 0 - call_addr = c->gprs[t9].du32[0]; // function call: - // nop // sll r0, r0, 0 - c->jalr(call_addr); // jalr ra, t9 - c->lw(a0, 120, sp); // lw a0, 120(sp) - c->mov64(a1, v0); // or a1, v0, r0 - c->load_symbol(t9, cache.sound_play_by_spec); // lw t9, sound-play-by-spec(s7) - c->daddiu(a2, sp, 64); // daddiu a2, sp, 64 - call_addr = c->gprs[t9].du32[0]; // function call: - // nop // sll r0, r0, 0 - c->jalr(call_addr); // jalr ra, t9 - - block_52: - c->addiu(a0, r0, 4); // addiu a0, r0, 4 - c->andi(v1, s5, 256); // andi v1, s5, 256 - bc = c->sgpr64(v1) == 0; // beq v1, r0, L127 - c->dsubu(a0, r0, a0); // dsubu a0, r0, a0 - if (bc) {goto block_54;} // branch non-likely - - c->load_symbol(v1, cache.add_to_sprite_aux_list); // lw v1, add-to-sprite-aux-list(s7) - c->daddiu(a0, a0, -1); // daddiu a0, a0, -1 - c->sw(v1, 112, s2); // sw v1, 112(s2) - c->and_(s5, s5, a0); // and s5, s5, a0 - c->sw(r0, 172, sp); // sw r0, 172(sp) - // nop // sll r0, r0, 0 - c->sw(r0, 60, s2); // sw r0, 60(s2) - // nop // sll r0, r0, 0 - c->lw(v1, 144, sp); // lw v1, 144(sp) - c->addiu(a0, r0, 3); // addiu a0, r0, 3 - c->pmaxw(v1, v1, a0); // pmaxw v1, v1, a0 - c->addiu(a0, r0, 11); // addiu a0, r0, 11 - c->pminw(v1, v1, a0); // pminw v1, v1, a0 - // nop // sll r0, r0, 0 - c->sw(v1, 144, sp); // sw v1, 144(sp) - // nop // sll r0, r0, 0 - - block_54: - c->load_symbol(a0, cache.level); // lw a0, *level*(s7) - // nop // sll r0, r0, 0 - c->lw(v1, 124, a0); // lw v1, 124(a0) - // nop // sll r0, r0, 0 - c->dsubu(v1, s4, v1); // dsubu v1, s4, v1 - // nop // sll r0, r0, 0 - bc = ((s64)c->sgpr64(v1)) < 0; // bltz v1, L128 - // nop // sll r0, r0, 0 - if (bc) {goto block_57;} // branch non-likely - - c->lw(v1, 128, a0); // lw v1, 128(a0) - // nop // sll r0, r0, 0 - c->dsubu(v1, s4, v1); // dsubu v1, s4, v1 - // nop // sll r0, r0, 0 - bc = ((s64)c->sgpr64(v1)) >= 0; // bgez v1, L128 - // nop // sll r0, r0, 0 - if (bc) {goto block_57;} // branch non-likely - - //beq r0, r0, L129 // beq r0, r0, L129 - c->ori(s5, s5, 1024); // ori s5, s5, 1024 - goto block_60; // branch always - - - block_57: - c->lw(v1, 2732, a0); // lw v1, 2732(a0) - // nop // sll r0, r0, 0 - c->dsubu(v1, s4, v1); // dsubu v1, s4, v1 - // nop // sll r0, r0, 0 - bc = ((s64)c->sgpr64(v1)) < 0; // bltz v1, L129 - // nop // sll r0, r0, 0 - if (bc) {goto block_60;} // branch non-likely - - c->lw(v1, 2736, a0); // lw v1, 2736(a0) - // nop // sll r0, r0, 0 - c->dsubu(v1, s4, v1); // dsubu v1, s4, v1 - // nop // sll r0, r0, 0 - bc = ((s64)c->sgpr64(v1)) >= 0; // bgez v1, L129 - // nop // sll r0, r0, 0 - if (bc) {goto block_60;} // branch non-likely - - c->ori(s5, s5, 2048); // ori s5, s5, 2048 - // nop // sll r0, r0, 0 - - block_60: - c->andi(v1, s5, 4352); // andi v1, s5, 4352 - c->addiu(a0, r0, 4096); // addiu a0, r0, 4096 - bc = c->sgpr64(v1) != c->sgpr64(a0); // bne v1, a0, L130 - c->load_symbol(a0, cache.time_of_day_context); // lw a0, *time-of-day-context*(s7) - if (bc) {goto block_62;} // branch non-likely - - c->lqc2(vf4, 108, a0); // lqc2 vf4, 108(a0) - // nop // sll r0, r0, 0 - c->lqc2(vf5, 160, sp); // lqc2 vf5, 160(sp) - // nop // sll r0, r0, 0 - c->lqc2(vf6, 48, s2); // lqc2 vf6, 48(s2) - // nop // sll r0, r0, 0 - c->vmul(DEST::xyz, vf5, vf5, vf4); // vmul.xyz vf5, vf5, vf4 - // nop // sll r0, r0, 0 - c->vmul(DEST::xyz, vf6, vf6, vf4); // vmul.xyz vf6, vf6, vf4 - // nop // sll r0, r0, 0 - c->sqc2(vf5, 160, sp); // sqc2 vf5, 160(sp) - // nop // sll r0, r0, 0 - c->sqc2(vf6, 48, s2); // sqc2 vf6, 48(s2) - // nop // sll r0, r0, 0 - - block_62: - c->mov64(v1, s1); // or v1, s1, r0 - c->dsubu(a0, s1, s7); // dsubu a0, s1, s7 - c->movz(v1, r0, a0); // movz v1, r0, a0 - // nop // sll r0, r0, 0 - c->sw(v1, 132, s2); // sw v1, 132(s2) - // nop // sll r0, r0, 0 - c->lw(v1, 0, s2); // lw v1, 0(s2) - // nop // sll r0, r0, 0 - c->lqc2(vf4, 128, sp); // lqc2 vf4, 128(sp) - // nop // sll r0, r0, 0 - c->lqc2(vf5, 144, sp); // lqc2 vf5, 144(sp) - // nop // sll r0, r0, 0 - c->lqc2(vf6, 160, sp); // lqc2 vf6, 160(sp) - // nop // sll r0, r0, 0 - c->sqc2(vf4, 0, v1); // sqc2 vf4, 0(v1) - // nop // sll r0, r0, 0 - c->sqc2(vf5, 16, v1); // sqc2 vf5, 16(v1) - // nop // sll r0, r0, 0 - c->vsub_bc(DEST::w, BC::w, vf6, vf0, vf0); // vsubw.w vf6, vf0, vf0 - // nop // sll r0, r0, 0 - c->sqc2(vf6, 32, v1); // sqc2 vf6, 32(v1) - // nop // sll r0, r0, 0 - c->ori(s5, s5, 64); // ori s5, s5, 64 - c->lw(a0, 172, sp); // lw a0, 172(sp) - c->sw(s5, 104, s2); // sw s5, 104(s2) - // nop // sll r0, r0, 0 - c->sw(a0, 124, s2); // sw a0, 124(s2) - // nop // sll r0, r0, 0 - bc = c->sgpr64(s0) == c->sgpr64(s7); // beq s0, s7, L131 - c->lui(v1, 16256); // lui v1, 16256 - if (bc) {goto block_65;} // branch non-likely - - c->lwc1(f2, 24, s0); // lwc1 f2, 24(s0) - c->mtc1(f3, v1); // mtc1 f3, v1 - c->subs(f2, f2, f3); // sub.s f2, f2, f3 - // nop // sll r0, r0, 0 - c->swc1(f2, 24, s0); // swc1 f2, 24(s0) - c->cvtws(f2, f2); // cvt.w.s f2, f2 - c->mfc1(v1, f2); // mfc1 v1, f2 - // nop // sll r0, r0, 0 - bc = c->sgpr64(v1) != 0; // bne v1, r0, L110 - // nop // sll r0, r0, 0 - if (bc) {goto block_12;} // branch non-likely - - //beq r0, r0, L132 // beq r0, r0, L132 - // nop // sll r0, r0, 0 - goto block_66; // branch always - - - block_65: - c->lwc1(f2, 0, s4); // lwc1 f2, 0(s4) - c->mtc1(f3, v1); // mtc1 f3, v1 - c->subs(f2, f2, f3); // sub.s f2, f2, f3 - // nop // sll r0, r0, 0 - c->swc1(f2, 0, s4); // swc1 f2, 0(s4) - c->cvtws(f2, f2); // cvt.w.s f2, f2 - c->mfc1(v1, f2); // mfc1 v1, f2 - // nop // sll r0, r0, 0 - bc = c->sgpr64(v1) != 0; // bne v1, r0, L110 - // nop // sll r0, r0, 0 - if (bc) {goto block_12;} // branch non-likely - - - block_66: - c->lw(ra, 0, sp); // lw ra, 0(sp) - // nop // sll r0, r0, 0 - c->lq(s0, 16, sp); // lq s0, 16(sp) - // nop // sll r0, r0, 0 - c->lq(s1, 32, sp); // lq s1, 32(sp) - // nop // sll r0, r0, 0 - c->lq(s2, 48, sp); // lq s2, 48(sp) - // nop // sll r0, r0, 0 - c->lq(s3, 176, sp); // lq s3, 176(sp) - // nop // sll r0, r0, 0 - c->lq(s4, 192, sp); // lq s4, 192(sp) - // nop // sll r0, r0, 0 - c->lq(s5, 208, sp); // lq s5, 208(sp) - // nop // sll r0, r0, 0 - c->lq(s6, 224, sp); // lq s6, 224(sp) - // nop // sll r0, r0, 0 - //jr ra // jr ra - c->daddiu(sp, sp, 256); // daddiu sp, sp, 256 - goto end_of_function; // return - - //jr ra // jr ra - c->daddu(sp, sp, r0); // daddu sp, sp, r0 - 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.level = intern_from_c("*level*").c(); - cache.sp_launcher_enable = intern_from_c("*sp-launcher-enable*").c(); - cache.sp_launcher_lock = intern_from_c("*sp-launcher-lock*").c(); - cache.time_of_day_context = intern_from_c("*time-of-day-context*").c(); - cache.add_to_sprite_aux_list = intern_from_c("add-to-sprite-aux-list").c(); - cache.cos = intern_from_c("cos").c(); - cache.new_sound_id = intern_from_c("new-sound-id").c(); - cache.particle_adgif = intern_from_c("particle-adgif").c(); - cache.quaternion_axis_angle = intern_from_c("quaternion-axis-angle!").c(); - cache.sin = intern_from_c("sin").c(); - cache.sound_play_by_spec = intern_from_c("sound-play-by-spec").c(); - cache.sp_adjust_launch = intern_from_c("sp-adjust-launch").c(); - cache.sp_euler_convert = intern_from_c("sp-euler-convert").c(); - cache.sp_get_particle = intern_from_c("sp-get-particle").c(); - cache.sp_init_fields = intern_from_c("sp-init-fields!").c(); - cache.sp_queue_launch = intern_from_c("sp-queue-launch").c(); - cache.sp_rotate_system = intern_from_c("sp-rotate-system").c(); - gLinkedFunctionTable.reg("sp-launch-particles-var", execute, 512); -} - -} // namespace sp_launch_particles_var -} // namespace Mips2C diff --git a/game/mips2c/mips2c_table.cpp b/game/mips2c/mips2c_table.cpp index d27b485460..4d184c248e 100644 --- a/game/mips2c/mips2c_table.cpp +++ b/game/mips2c/mips2c_table.cpp @@ -23,11 +23,6 @@ void _mips2c_call_windows(); namespace Mips2C { namespace jak1 { -namespace draw_string { extern void link(); } -namespace particle_adgif { extern void link(); } -namespace sp_launch_particles_var { extern void link(); } -namespace sp_process_block_3d { extern void link(); } -namespace sp_process_block_2d { extern void link(); } namespace draw_large_polygon { extern void link(); } namespace init_sky_regs { extern void link(); } namespace clip_polygon_against_positive_hyperplane { extern void link(); } @@ -381,10 +376,7 @@ LinkedFunctionTable gLinkedFunctionTable; Rng gRng; PerGameVersion>> gMips2CLinkCallbacks = { //////// JAK 1 - {{"font", {jak1::draw_string::link}}, - {"sparticle-launcher", {jak1::particle_adgif::link, jak1::sp_launch_particles_var::link}}, - {"sparticle", {jak1::sp_process_block_3d::link, jak1::sp_process_block_2d::link}}, - {"texture", {jak1::adgif_shader_texture_with_update::link}}, + {{"texture", {jak1::adgif_shader_texture_with_update::link}}, {"sky-tng", {jak1::draw_large_polygon::link, jak1::init_sky_regs::link, jak1::clip_polygon_against_positive_hyperplane::link, jak1::render_sky_quad::link,