VU micro mode disassembler (#517)

* wip

* more

* the rest of the disassembler
This commit is contained in:
water111
2021-05-23 16:59:09 -04:00
committed by GitHub
parent 3fbdd662dc
commit a96710f0c5
48 changed files with 38666 additions and 1 deletions
+4
View File
@@ -56,6 +56,10 @@ add_library(
util/DecompilerTypeSystem.cpp
util/TP_Type.cpp
VuDisasm/VuDisassembler.cpp
VuDisasm/VuInstruction.cpp
VuDisasm/VuProgram.cpp
config.cpp)
target_link_libraries(decomp
+708
View File
@@ -0,0 +1,708 @@
#include <cstring>
#include <algorithm>
#include "VuDisassembler.h"
#include "third-party/fmt/core.h"
#include "common/util/assert.h"
#include "common/util/print_float.h"
namespace decompiler {
namespace {
int upper_op6(u32 in) {
return in & 0b111111;
}
int upper_op11(u32 in) {
return in & 0b11111111111;
}
int upper_dest_mask(u32 in) {
return 0b1111 & (in >> 21);
}
int upper_ft(u32 in) {
return 0b11111 & (in >> 16);
}
int upper_fs(u32 in) {
return 0b11111 & (in >> 11);
}
int upper_fd(u32 in) {
return 0b11111 & (in >> 6);
}
int upper_bc(u32 in) {
return 0b11 & in;
}
int lower_op(u32 in) {
return (in >> 25);
}
int upper_imm15_unsigned(u32 in) {
u32 p1 = (in & 0b11111111111);
u32 p2 = (in >> 21) & 0b1111;
return p1 | (p2 << 11);
}
} // namespace
VuDisassembler::VuDisassembler() {
m_upper_op6_table[0b000000].set(VuInstrK::ADDbc); // 0
m_upper_op6_table[0b000001].set(VuInstrK::ADDbc); // 1
m_upper_op6_table[0b000010].set(VuInstrK::ADDbc); // 2
m_upper_op6_table[0b000011].set(VuInstrK::ADDbc); // 3
m_upper_op6_table[0b000100].set(VuInstrK::SUBbc); // 4
m_upper_op6_table[0b000101].set(VuInstrK::SUBbc); // 5
m_upper_op6_table[0b000110].set(VuInstrK::SUBbc); // 6
m_upper_op6_table[0b000111].set(VuInstrK::SUBbc); // 7
m_upper_op6_table[0b001000].set(VuInstrK::MADDbc); // 8
m_upper_op6_table[0b001001].set(VuInstrK::MADDbc); // 9
m_upper_op6_table[0b001010].set(VuInstrK::MADDbc); // 10
m_upper_op6_table[0b001011].set(VuInstrK::MADDbc); // 11
m_upper_op6_table[0b001100].set(VuInstrK::MSUBbc); // 12
m_upper_op6_table[0b001101].set(VuInstrK::MSUBbc); // 13
m_upper_op6_table[0b001110].set(VuInstrK::MSUBbc); // 14
m_upper_op6_table[0b001111].set(VuInstrK::MSUBbc); // 15
m_upper_op6_table[0b010000].set(VuInstrK::MAXbc); // 16
m_upper_op6_table[0b010001].set(VuInstrK::MAXbc); // 17
m_upper_op6_table[0b010010].set(VuInstrK::MAXbc); // 18
m_upper_op6_table[0b010011].set(VuInstrK::MAXbc); // 19
m_upper_op6_table[0b010100].set(VuInstrK::MINIbc); // 20
m_upper_op6_table[0b010101].set(VuInstrK::MINIbc); // 21
m_upper_op6_table[0b010110].set(VuInstrK::MINIbc); // 22
m_upper_op6_table[0b010111].set(VuInstrK::MINIbc); // 23
m_upper_op6_table[0b011000].set(VuInstrK::MULbc); // 24
m_upper_op6_table[0b011001].set(VuInstrK::MULbc); // 25
m_upper_op6_table[0b011010].set(VuInstrK::MULbc); // 26
m_upper_op6_table[0b011011].set(VuInstrK::MULbc); // 27
m_upper_op6_table[0b011100].set(VuInstrK::MULq); // 28
m_upper_op6_table[0b011101].set(VuInstrK::MAXi); // 29
m_upper_op6_table[0b011110].set(VuInstrK::MULi); // 30
m_upper_op6_table[0b011111].set(VuInstrK::MINIi); // 31
m_upper_op6_table[0b100000].set(VuInstrK::ADDq); // 32
// m_upper_op6_table[0b100001].set(VuInstrK::MADDq); // 33
m_upper_op6_table[0b100010].set(VuInstrK::ADDi); // 34
// m_upper_op6_table[0b100011].set(VuInstrK::MADDi); // 35
// m_upper_op6_table[0b100100].set(VuInstrK::SUBq); // 36
// m_upper_op6_table[0b100101].set(VuInstrK::MSUBq); // 37
// m_upper_op6_table[0b100110].set(VuInstrK::SUBi); // 38
// m_upper_op6_table[0b100111].set(VuInstrK::MSUBi); // 39
m_upper_op6_table[0b101000].set(VuInstrK::ADD); // 40
m_upper_op6_table[0b101001].set(VuInstrK::MADD); // 41
m_upper_op6_table[0b101010].set(VuInstrK::MUL); // 42
m_upper_op6_table[0b101011].set(VuInstrK::MAX); // 43
m_upper_op6_table[0b101100].set(VuInstrK::SUB); // 44
// m_upper_op6_table[0b101101].set(VuInstrK::MSUB); // 45
m_upper_op6_table[0b101110].set(VuInstrK::OPMSUB); // 46
m_upper_op6_table[0b101111].set(VuInstrK::MINI); // 47
// ???
m_upper_op6_table[0b111100].set_11(); // 60
m_upper_op6_table[0b111101].set_11(); // 61
m_upper_op6_table[0b111110].set_11(); // 62
m_upper_op6_table[0b111111].set_11(); // 63
add_op(VuInstrK::NOP, "nop").iemdt();
add_op(VuInstrK::LOWER_NOP, "nop");
add_op(VuInstrK::FTOI4, "ftoi4").iemdt().dst_mask().dst_vf_ft().src_vf_fs();
add_op(VuInstrK::FTOI0, "ftoi0").iemdt().dst_mask().dst_vf_ft().src_vf_fs();
add_op(VuInstrK::ITOF0, "itof0").iemdt().dst_mask().dst_vf_ft().src_vf_fs();
add_op(VuInstrK::ITOF12, "itof12").iemdt().dst_mask().dst_vf_ft().src_vf_fs();
add_op(VuInstrK::ITOF15, "itof15").iemdt().dst_mask().dst_vf_ft().src_vf_fs();
add_op(VuInstrK::FTOI12, "ftoi12").iemdt().dst_mask().dst_vf_ft().src_vf_fs();
add_op(VuInstrK::ADD, "add").iemdt().dst_mask().dss_fd_fs_ft();
add_op(VuInstrK::MULbc, "mul").iemdt().dst_mask().bc().dss_fd_fs_ft();
add_op(VuInstrK::ADDbc, "add").iemdt().dst_mask().dss_fd_fs_ft().bc();
add_op(VuInstrK::MAXbc, "max").iemdt().dst_mask().dss_fd_fs_ft().bc();
add_op(VuInstrK::MULAbc, "mula").iemdt().bc().dst_mask().dst_acc().src_vfs().src_vft();
add_op(VuInstrK::MADDAbc, "madda").iemdt().bc().dst_mask().dst_acc().src_vfs().src_vft();
add_op(VuInstrK::MSUBAbc, "msuba").iemdt().bc().dst_mask().dst_acc().src_vfs().src_vft();
add_op(VuInstrK::MADDbc, "madd").iemdt().dst_mask().dss_fd_fs_ft().bc();
add_op(VuInstrK::SUBbc, "sub").iemdt().dst_mask().dss_fd_fs_ft().bc();
add_op(VuInstrK::OPMULA, "opmula").iemdt().dst_mask().dst_acc().src_vfs().src_vft();
add_op(VuInstrK::OPMSUB, "opmsub").iemdt().dst_mask().dss_fd_fs_ft();
add_op(VuInstrK::MUL, "mul").iemdt().dst_mask().dss_fd_fs_ft();
add_op(VuInstrK::MULq, "mul").iemdt().dst_mask().dst_vfd().src_vfs().src_q().vft_zero();
add_op(VuInstrK::SUB, "sub").iemdt().dst_mask().dss_fd_fs_ft();
add_op(VuInstrK::MSUBbc, "msub").iemdt().dst_mask().dss_fd_fs_ft();
add_op(VuInstrK::MADDA, "madda").iemdt().dst_mask().dst_acc().src_vfs().src_vft();
add_op(VuInstrK::MULA, "mula").iemdt().dst_mask().dst_acc().src_vfs().src_vft();
add_op(VuInstrK::MINIbc, "mini").iemdt().dst_mask().bc().dss_fd_fs_ft();
add_op(VuInstrK::MAXi, "maxi").iemdt().dst_mask().dst_vfd().src_vfs().vft_zero().src_i();
add_op(VuInstrK::MINIi, "minii").iemdt().dst_mask().dst_vfd().src_vfs().vft_zero().src_i();
add_op(VuInstrK::ADDAbc, "adda").iemdt().dst_mask().bc().dst_vfs().src_vft();
add_op(VuInstrK::CLIP, "clip").iemdt().dst_mask().bc().src_vfs().src_vft();
add_op(VuInstrK::MINI, "mini").iemdt().dst_mask().dss_fd_fs_ft();
add_op(VuInstrK::MAX, "max").iemdt().dst_mask().dss_fd_fs_ft();
add_op(VuInstrK::ADDA, "adda").iemdt().dst_mask().dst_acc().src_vfs().src_vft();
add_op(VuInstrK::MADD, "madd").iemdt().dst_mask().dss_fd_fs_ft();
add_op(VuInstrK::ADDq, "addq").iemdt().dst_mask().vft_zero().dst_vfd().src_vfs().src_q();
add_op(VuInstrK::MULi, "muli").iemdt().dst_mask().vft_zero().dst_vfd().src_vfs().src_i();
add_op(VuInstrK::ADDi, "addi").iemdt().dst_mask().vft_zero().dst_vfd().src_vfs().src_i();
m_lower_op6_table[0b000000].set(VuInstrK::LQ);
m_lower_op6_table[0b000001].set(VuInstrK::SQ);
m_lower_op6_table[0b000100].set(VuInstrK::ILW);
m_lower_op6_table[0b000101].set(VuInstrK::ISW);
m_lower_op6_table[0b001000].set(VuInstrK::IADDIU);
m_lower_op6_table[0b001001].set(VuInstrK::ISUBIU);
// m_lower_op6_table[0b010000].set(VuInstrK::FCEQ);
m_lower_op6_table[0b010001].set(VuInstrK::FCSET);
m_lower_op6_table[0b010010].set(VuInstrK::FCAND);
m_lower_op6_table[0b010011].set(VuInstrK::FCOR);
// m_lower_op6_table[0b010100].set(VuInstrK::FSEQ);
// m_lower_op6_table[0b010101].set(VuInstrK::FSSET);
m_lower_op6_table[0b010110].set(VuInstrK::FSAND);
// m_lower_op6_table[0b010111].set(VuInstrK::FSOR);
// m_lower_op6_table[0b011000].set(VuInstrK::FMEQ);
// ??
m_lower_op6_table[0b011010].set(VuInstrK::FMAND);
// m_lower_op6_table[0b011011].set(VuInstrK::FMOR);
m_lower_op6_table[0b011100].set(VuInstrK::FCGET);
// ??
m_lower_op6_table[0b100000].set(VuInstrK::B);
m_lower_op6_table[0b100001].set(VuInstrK::BAL);
m_lower_op6_table[0b100100].set(VuInstrK::JR);
m_lower_op6_table[0b100101].set(VuInstrK::JALR);
m_lower_op6_table[0b101000].set(VuInstrK::IBEQ);
m_lower_op6_table[0b101001].set(VuInstrK::IBNE);
m_lower_op6_table[0b101100].set(VuInstrK::IBLTZ);
m_lower_op6_table[0b101101].set(VuInstrK::IBGTZ);
m_lower_op6_table[0b101110].set(VuInstrK::IBLEZ);
m_lower_op6_table[0b101111].set(VuInstrK::IBGEZ);
add_op(VuInstrK::IBNE, "ibne").dst_mask_zero().src_vit().src_vis().rel_branch11();
add_op(VuInstrK::LQ, "lq").dst_mask().dst_vft().src_imm11_load_store().src_vis();
add_op(VuInstrK::ILW, "ilw").dst_mask().dst_vit().src_imm11_load_store().src_vis();
add_op(VuInstrK::IADDIU, "iaddiu").dst_vit().src_vis().src_imm15_unsigned();
add_op(VuInstrK::IADDI, "iaddi").dst_vit().src_vis().src_imm5_signed().dst_mask_zero();
add_op(VuInstrK::IOR, "ior").dst_vid().src_vis().src_vit().dst_mask_zero();
add_op(VuInstrK::SQI, "sqi").dst_vfs().src_vit().dst_mask();
add_op(VuInstrK::ISW, "isw").src_vit().src_imm11_load_store().src_vis().dst_mask();
add_op(VuInstrK::LQI, "lqi").dst_mask().dst_vft().src_vis();
add_op(VuInstrK::IADD, "iadd").dst_mask_zero().dst_vid().src_vis().src_vit();
add_op(VuInstrK::XGKICK, "xgkick").dst_mask_zero().vft_zero().src_vis();
add_op(VuInstrK::ISUB, "isub").dst_mask_zero().dst_vid().src_vis().src_vit();
add_op(VuInstrK::SQ, "sq").dst_mask().dst_vfs().src_imm11_load_store().src_vit();
add_op(VuInstrK::FMAND, "fmand").imm15_zero().dst_vit().src_vis();
add_op(VuInstrK::DIV, "div").ftf_1().fsf_0().dst_q().src_vfs().src_vft();
add_op(VuInstrK::MOVE, "move").dst_mask().dst_vft().src_vfs();
add_op(VuInstrK::MR32, "mr32").dst_mask().dst_vft().src_vfs();
add_op(VuInstrK::RSQRT, "rsqrt").ftf_1().fsf_0().dst_q().src_vfs().src_vft();
add_op(VuInstrK::ILWR, "ilwr").dst_mask().dst_vit().src_vis();
add_op(VuInstrK::MTIR, "mtir").ftf_zero().fsf_0().dst_vit().src_vfs();
add_op(VuInstrK::JR, "jr").dst_mask_zero().vit_zero().src_vis().imm11_zero();
add_op(VuInstrK::IAND, "iand").dst_mask_zero().dst_vid().src_vis().src_vit();
add_op(VuInstrK::IBEQ, "ibeq").src_vit().src_vis().dst_mask_zero().rel_branch11();
add_op(VuInstrK::B, "b").dst_mask_zero().vit_zero().vis_zero().rel_branch11();
// add_op(VuInstrK::XITOP, "xitop").dst_mask_zero().vis_zero().src_vit();
add_op(VuInstrK::XTOP, "xtop").dst_mask_zero().vis_zero().src_vit();
add_op(VuInstrK::BAL, "bal").dst_mask_zero().vis_zero().dst_vit().rel_branch11();
add_op(VuInstrK::MFIR, "mfir").dst_mask().dst_vft().src_vis();
add_op(VuInstrK::IBGTZ, "ibgtz").dst_mask_zero().vit_zero().src_vis().rel_branch11();
add_op(VuInstrK::FCGET, "fcget").imm15_zero().vis_zero().dst_vit();
add_op(VuInstrK::ISUBIU, "isubiu").dst_vit().src_vis().imm15_unsigned();
add_op(VuInstrK::FSAND, "fsand").dst_vit().imm15_unsigned().vis_zero(); // really imm12.
add_op(VuInstrK::IBLTZ, "ibltz").dst_mask_zero().vit_zero().src_vis().rel_branch11();
add_op(VuInstrK::FCSET, "fcset").src_imm24_unsigned();
add_op(VuInstrK::FCAND, "fcand vi01,").src_imm24_unsigned();
add_op(VuInstrK::FCOR, "fcor vi01,").src_imm24_unsigned();
add_op(VuInstrK::IBGEZ, "ibgez").dst_mask_zero().vit_zero().src_vis().rel_branch11();
add_op(VuInstrK::ISWR, "iswr").dst_mask().src_vit().src_vis();
add_op(VuInstrK::JALR, "jalr").dst_mask_zero().dst_vit().src_vis().imm11_zero();
add_op(VuInstrK::WAITQ, "waitq").dst_mask_zero().vft_zero().vis_zero();
add_op(VuInstrK::IBLEZ, "iblez").dst_mask_zero().vit_zero().src_vis().rel_branch11();
add_op(VuInstrK::SQRT, "sqrt").fsf_zero().ftf_0().vis_zero().dst_q().src_vft();
add_op(VuInstrK::SQD, "sqd").dst_mask().src_vfs().src_vit();
add_op(VuInstrK::ERLENG, "erleng").dst_mask().vft_zero().src_vfs().dst_p();
add_op(VuInstrK::MFP, "mfp").dst_mask().dst_vft().src_p();
}
VuDisassembler::OpInfo& VuDisassembler::add_op(VuInstrK kind, const std::string& name) {
assert((int)kind < (int)VuInstrK::INVALID);
auto& elt = m_op_info[(int)kind];
elt.name = name;
elt.known = true;
return elt;
}
VuInstrK VuDisassembler::lower_kind(u32 in) {
auto op = lower_op(in);
if (in == 0b10000000000000000000000000110000) {
return VuInstrK::LOWER_NOP;
}
if (op == 0b1000000) {
switch (in & 0b111111) {
case 0b110010:
return VuInstrK::IADDI;
case 0b110101:
return VuInstrK::IOR;
case 0b110000:
return VuInstrK::IADD;
case 0b110001:
return VuInstrK::ISUB;
case 0b110100:
return VuInstrK::IAND;
}
switch (in & 0b11111111111) {
case 0b01100'1111'00:
return VuInstrK::MOVE;
case 0b01100'1111'01:
return VuInstrK::MR32;
case 0b01101'1111'00:
return VuInstrK::LQI;
case 0b01101'1111'01:
return VuInstrK::SQI;
case 0b01101'1111'11:
return VuInstrK::SQD;
case 0b01110'1111'00:
return VuInstrK::DIV;
case 0b01110'1111'01:
return VuInstrK::SQRT;
case 0b01110'1111'10:
return VuInstrK::RSQRT;
case 0b01110'1111'11:
return VuInstrK::WAITQ;
case 0b01111'1111'00:
return VuInstrK::MTIR;
case 0b01111'1111'01:
return VuInstrK::MFIR;
case 0b01111'1111'10:
return VuInstrK::ILWR;
case 0b01111'1111'11:
return VuInstrK::ISWR;
case 0b11001'1111'00:
return VuInstrK::MFP;
case 0b11010'1111'00:
return VuInstrK::XTOP;
case 0b11011'1111'00:
return VuInstrK::XGKICK;
case 0b11100'1111'11:
return VuInstrK::ERLENG;
}
fmt::print("Unknown lower special: 0b{:b}\n", in);
assert(false);
} else {
assert((op & 0b1000000) == 0);
assert(op < 64);
auto elt = m_lower_op6_table[(int)op];
if (!elt.known) {
fmt::print("Invalid lower op6: 0b{:b} 0b{:b} 0x{:x}\n", op, in, in);
assert(false);
}
return elt.kind;
}
}
VuInstrK VuDisassembler::upper_kind(u32 in) {
auto& upper_info = m_upper_op6_table[upper_op6(in)];
if (upper_info.goto_11) {
switch (upper_op11(in)) {
case 0b00000'1111'00:
case 0b00000'1111'01:
case 0b00000'1111'10:
case 0b00000'1111'11:
return VuInstrK::ADDAbc;
case 0b00010'1111'00:
case 0b00010'1111'01:
case 0b00010'1111'10:
case 0b00010'1111'11:
return VuInstrK::MADDAbc;
case 0b00011'1111'00:
case 0b00011'1111'01:
case 0b00011'1111'10:
case 0b00011'1111'11:
return VuInstrK::MSUBAbc;
case 0b00100'1111'00:
return VuInstrK::ITOF0;
case 0b00100'1111'10:
return VuInstrK::ITOF12;
case 0b00100'1111'11:
return VuInstrK::ITOF15;
case 0b00101'1111'00:
return VuInstrK::FTOI0;
case 0b00101'1111'01:
return VuInstrK::FTOI4;
case 0b00101'1111'10:
return VuInstrK::FTOI12;
case 0b00110'1111'00:
case 0b00110'1111'01:
case 0b00110'1111'10:
case 0b00110'1111'11:
return VuInstrK::MULAbc;
case 0b00111'1111'11:
return VuInstrK::CLIP;
case 0b01010'1111'00:
return VuInstrK::ADDA;
case 0b01010'1111'01:
return VuInstrK::MADDA;
case 0b01010'1111'10:
return VuInstrK::MULA;
case 0b01011'1111'10:
return VuInstrK::OPMULA;
case 0b01011'1111'11:
assert(upper_dest_mask(in) == 0);
assert(upper_fs(in) == 0);
assert(upper_ft(in) == 0);
return VuInstrK::NOP;
break;
default:
fmt::print("Invalid op11: 0b{:b}\n", upper_op11(in));
assert(false);
}
}
if (!upper_info.known) {
fmt::print("Invalid upper op6: 0b{:b}\n", upper_op6(in));
assert(false);
}
return upper_info.kind;
}
VuProgram VuDisassembler::disassemble(void* data, int size_bytes, bool debug_print) {
auto bytes = (u8*)data;
// should be 8 byte aligned size.
assert((size_bytes & 0x7) == 0);
VuProgram prog;
int instruction_count = size_bytes / 8;
for (int i = 0; i < instruction_count; i++) {
u32 lower, upper;
memcpy(&lower, bytes + i * 8, 4);
memcpy(&upper, bytes + i * 8 + 4, 4);
// decode
auto upper_instr = decode(upper_kind(upper), upper, i);
auto lower_instr = upper_instr.i_bit() ? VuInstruction::make_fp_constant(lower)
: decode(lower_kind(lower), lower, i);
prog.add_instruction(upper_instr, lower_instr);
// debug
if (debug_print) {
fmt::print("{}\n", to_string(VuInstructionPair{upper_instr, lower_instr}));
}
}
name_labels();
if (debug_print) {
fmt::print("----------------------------------\n");
fmt::print("{}\n", to_string(prog));
}
return prog;
}
VuInstruction VuDisassembler::decode(VuInstrK kind, u32 data, int instr_idx) {
VuInstruction instr;
instr.kind = kind;
auto& inst = info(kind);
if (!inst.known) {
fmt::print("instr idx {} is unknown\n", (int)kind);
assert(false);
}
for (auto& step : inst.decode) {
s64 value = -1;
switch (step.field) {
case VuDecodeStep::FieldK::IEMDT:
value = data >> 25;
assert((value & 3) == 0);
break;
case VuDecodeStep::FieldK::DST_MASK:
value = upper_dest_mask(data);
break;
case VuDecodeStep::FieldK::FS:
value = upper_fs(data);
break;
case VuDecodeStep::FieldK::FT:
value = upper_ft(data);
break;
case VuDecodeStep::FieldK::FD:
value = upper_fd(data);
break;
case VuDecodeStep::FieldK::BC:
value = upper_bc(data);
break;
case VuDecodeStep::FieldK::NONE:
break;
case VuDecodeStep::FieldK::IMM11_BRANCH: {
s32 signed_11 = upper_op11(data) << 21;
signed_11 >>= 21;
value = add_label(signed_11 + instr_idx + 1);
} break;
case VuDecodeStep::FieldK::IMM11_SIGNED: {
s32 signed_value = (data << 21);
signed_value = (signed_value >> 21);
value = signed_value;
} break;
case VuDecodeStep::FieldK::IMM15_UNSIGNED:
value = upper_imm15_unsigned(data);
break;
case VuDecodeStep::FieldK::IMM5_SIGNED: {
s32 signed_value = (data << 21);
value = (signed_value >> 27);
break;
}
case VuDecodeStep::FieldK::FTF:
value = (data >> 23) & 0b11;
break;
case VuDecodeStep::FieldK::FSF:
value = (data >> 21) & 0b11;
break;
case VuDecodeStep::FieldK::IMM24_UNSIGNED:
value = (data & 0b1111'1111'1111'1111'1111'1111);
break;
default:
assert(false);
}
switch (step.atom) {
case VuDecodeStep::AtomK::IEMDT:
instr.iemdt = value;
break;
case VuDecodeStep::AtomK::DST_MASK:
instr.mask = value;
break;
case VuDecodeStep::AtomK::DST_VF:
assert(!instr.dst);
instr.dst = VuInstructionAtom::make_vf(value);
break;
case VuDecodeStep::AtomK::DST_VI:
assert(!instr.dst);
instr.dst = VuInstructionAtom::make_vi(value);
break;
case VuDecodeStep::AtomK::SRC_VF:
instr.src.push_back(VuInstructionAtom::make_vf(value));
break;
case VuDecodeStep::AtomK::BC:
assert(!instr.bc);
instr.bc = value;
break;
case VuDecodeStep::AtomK::ASSERT_ZERO:
assert(value == 0);
break;
case VuDecodeStep::AtomK::SRC_VI:
instr.src.push_back(VuInstructionAtom::make_vi(value));
break;
case VuDecodeStep::AtomK::BRANCH_TARGET:
instr.src.push_back(VuInstructionAtom::make_label(value));
break;
case VuDecodeStep::AtomK::LOAD_STORE_OFFSET:
instr.src.push_back(VuInstructionAtom::make_load_store_imm(value));
break;
case VuDecodeStep::AtomK::SRC_IMM:
instr.src.push_back(VuInstructionAtom::make_imm(value));
break;
case VuDecodeStep::AtomK::DST_ACC:
assert(!instr.dst);
instr.dst = VuInstructionAtom::make_acc();
break;
case VuDecodeStep::AtomK::DST_Q:
assert(!instr.dst);
instr.dst = VuInstructionAtom::make_q();
break;
case VuDecodeStep::AtomK::DST_P:
assert(!instr.dst);
instr.dst = VuInstructionAtom::make_p();
break;
case VuDecodeStep::AtomK::SRC_Q:
instr.src.push_back(VuInstructionAtom::make_q());
break;
case VuDecodeStep::AtomK::SRC_I:
instr.src.push_back(VuInstructionAtom::make_i());
break;
case VuDecodeStep::AtomK::SRC_P:
instr.src.push_back(VuInstructionAtom::make_p());
break;
case VuDecodeStep::AtomK::SECOND_SOURCE_FIELD:
instr.second_src_field = value;
break;
case VuDecodeStep::AtomK::FIRST_SOURCE_FIELD:
instr.first_src_field = value;
break;
default:
assert(false);
}
}
return instr;
}
namespace {
char bc_to_part(int x) {
switch (x) {
case 0:
return 'x';
case 1:
return 'y';
case 2:
return 'z';
case 3:
return 'w';
default:
return '?';
}
}
} // namespace
std::string VuDisassembler::to_string(const VuInstruction& instr) const {
if (instr.kind == VuInstrK::FP_CONSTANT) {
return float_to_string(instr.fp);
}
auto& in = info(instr.kind);
if (!in.known) {
assert(false);
}
std::string result;
result += in.name;
if (instr.bc) {
result += bc_to_part(*instr.bc);
}
if (instr.mask) {
u8 val = *instr.mask;
result += '.';
if (val & 8) {
result += 'x';
}
if (val & 4) {
result += 'y';
}
if (val & 2) {
result += 'z';
}
if (val & 1) {
result += 'w';
}
}
bool comma = false;
if (instr.dst) {
result += " ";
result += instr.dst->to_string(m_label_names);
result += ',';
comma = true;
}
bool close = false;
int idx = 0;
for (auto& src : instr.src) {
if (close) {
} else {
result += " ";
}
result += src.to_string(m_label_names);
if (idx == 0 && instr.first_src_field) {
result += '.';
result += bc_to_part(*instr.first_src_field);
}
if (idx == 1 && instr.second_src_field) {
result += '.';
result += bc_to_part(*instr.second_src_field);
}
if (src.kind() == VuInstructionAtom::Kind::LOAD_STORE_IMM) {
result += '(';
close = true;
} else {
if (close) {
result += ")";
close = false;
comma = false;
} else {
result += ',';
comma = true;
}
}
idx++;
}
assert(!close);
if (comma) {
result.pop_back();
}
if (instr.iemdt) {
u8 val = *instr.iemdt;
if (val & 0b100) {
result += " :t";
}
if (val & 0b1000) {
result += " :d";
}
if (val & 0b10000) {
result += " :m";
}
if (val & 0b100000) {
result += " :e";
}
if (val & 0b1000000) {
result += " :i";
}
}
return result;
}
std::string VuDisassembler::to_string(const VuInstructionPair& pair) const {
return fmt::format(" {:25s} | {:25s}", to_string(pair.lower), to_string(pair.upper));
}
std::string VuDisassembler::to_string(const VuProgram& prog) const {
std::string result;
for (int i = 0; i < (int)prog.instructions().size(); i++) {
auto lab = m_labels.find(i);
if (lab != m_labels.end()) {
result += m_label_names.at(lab->second);
result += ':';
result += '\n';
}
result += to_string(prog.instructions().at(i));
result += '\n';
}
return result;
}
int VuDisassembler::add_label(int instr) {
auto existing = m_labels.find(instr);
if (existing == m_labels.end()) {
int new_idx = m_labels.size();
m_labels[instr] = new_idx;
return new_idx;
} else {
return existing->second;
}
}
void VuDisassembler::name_labels() {
std::vector<int> instrs_with_labels;
for (auto [instr, label_idx] : m_labels) {
instrs_with_labels.push_back(instr);
}
m_label_names.resize(instrs_with_labels.size());
std::sort(instrs_with_labels.begin(), instrs_with_labels.end());
int idx = 1;
for (auto& instr : instrs_with_labels) {
auto label_idx = m_labels.at(instr);
m_label_names.at(label_idx) = fmt::format("L{}", idx++);
}
}
} // namespace decompiler
+228
View File
@@ -0,0 +1,228 @@
#pragma once
#include <unordered_map>
#include "decompiler/VuDisasm/VuProgram.h"
#include "common/util/assert.h"
namespace decompiler {
struct VuDecodeStep {
enum class FieldK {
IEMDT,
DST_MASK,
FT,
FS,
FD,
BC,
IMM11_BRANCH,
IMM11_SIGNED,
IMM15_UNSIGNED,
IMM5_SIGNED,
IMM24_UNSIGNED,
FTF,
FSF,
NONE,
} field;
enum class AtomK {
IEMDT,
DST_MASK,
DST_VF,
DST_VI,
DST_ACC,
DST_Q,
DST_P,
SRC_P,
SRC_Q,
SRC_I,
SRC_VF,
SRC_VI,
SRC_IMM,
BC,
ASSERT_ZERO,
LOAD_STORE_OFFSET,
SECOND_SOURCE_FIELD,
FIRST_SOURCE_FIELD,
BRANCH_TARGET
} atom;
};
class VuDisassembler {
public:
VuDisassembler();
VuProgram disassemble(void* data, int size_bytes, bool debug_print = false);
std::string to_string(const VuInstruction& instr) const;
std::string to_string(const VuInstructionPair& pair) const;
std::string to_string(const VuProgram& prog) const;
private:
VuInstrK upper_kind(u32 in);
VuInstrK lower_kind(u32 in);
VuInstruction decode(VuInstrK kind, u32 data, int instr_idx);
struct VuUpperOp6 {
bool goto_11 = false;
VuInstrK kind = VuInstrK::INVALID;
bool known = false;
void set_11() {
known = true;
goto_11 = true;
}
void set(VuInstrK _kind) {
known = true;
kind = _kind;
}
};
struct VuLowerOp6 {
bool goto_other = false;
VuInstrK kind = VuInstrK::INVALID;
bool known = false;
void set_other() {
known = true;
goto_other = true;
}
void set(VuInstrK _kind) {
known = true;
kind = _kind;
}
};
struct OpInfo {
OpInfo() = default;
OpInfo(const std::string& _name) : name(_name) {}
OpInfo& iemdt() { return step({VuDecodeStep::FieldK::IEMDT, VuDecodeStep::AtomK::IEMDT}); }
OpInfo& bc() { return step({VuDecodeStep::FieldK::BC, VuDecodeStep::AtomK::BC}); }
OpInfo& dst_vf_ft() { return step({VuDecodeStep::FieldK::FT, VuDecodeStep::AtomK::DST_VF}); }
OpInfo& src_vf_fs() { return step({VuDecodeStep::FieldK::FS, VuDecodeStep::AtomK::SRC_VF}); }
OpInfo& dss_fd_fs_ft() {
return step({VuDecodeStep::FieldK::FD, VuDecodeStep::AtomK::DST_VF})
.step({VuDecodeStep::FieldK::FS, VuDecodeStep::AtomK::SRC_VF})
.step({VuDecodeStep::FieldK::FT, VuDecodeStep::AtomK::SRC_VF});
}
OpInfo& dst_mask() {
return step({VuDecodeStep::FieldK::DST_MASK, VuDecodeStep::AtomK::DST_MASK});
}
OpInfo& dst_acc() { return step({VuDecodeStep::FieldK::NONE, VuDecodeStep::AtomK::DST_ACC}); }
OpInfo& dst_vfd() { return step({VuDecodeStep::FieldK::FD, VuDecodeStep::AtomK::DST_VF}); }
OpInfo& dst_q() { return step({VuDecodeStep::FieldK::NONE, VuDecodeStep::AtomK::DST_Q}); }
OpInfo& dst_p() { return step({VuDecodeStep::FieldK::NONE, VuDecodeStep::AtomK::DST_P}); }
OpInfo& src_q() { return step({VuDecodeStep::FieldK::NONE, VuDecodeStep::AtomK::SRC_Q}); }
OpInfo& src_i() { return step({VuDecodeStep::FieldK::NONE, VuDecodeStep::AtomK::SRC_I}); }
OpInfo& src_p() { return step({VuDecodeStep::FieldK::NONE, VuDecodeStep::AtomK::SRC_P}); }
OpInfo& step(VuDecodeStep x) {
decode.push_back(x);
return *this;
}
OpInfo& dst_mask_zero() {
return step({VuDecodeStep::FieldK::DST_MASK, VuDecodeStep::AtomK::ASSERT_ZERO});
}
OpInfo& vft_zero() {
return step({VuDecodeStep::FieldK::FT, VuDecodeStep::AtomK::ASSERT_ZERO});
}
OpInfo& vit_zero() { return vft_zero(); }
OpInfo& vis_zero() {
return step({VuDecodeStep::FieldK::FS, VuDecodeStep::AtomK::ASSERT_ZERO});
}
OpInfo& ftf_zero() {
return step({VuDecodeStep::FieldK::FTF, VuDecodeStep::AtomK::ASSERT_ZERO});
}
OpInfo& fsf_zero() {
return step({VuDecodeStep::FieldK::FSF, VuDecodeStep::AtomK::ASSERT_ZERO});
}
OpInfo& src_vit() { return step({VuDecodeStep::FieldK::FT, VuDecodeStep::AtomK::SRC_VI}); }
OpInfo& src_vis() { return step({VuDecodeStep::FieldK::FS, VuDecodeStep::AtomK::SRC_VI}); }
OpInfo& src_vft() { return step({VuDecodeStep::FieldK::FT, VuDecodeStep::AtomK::SRC_VF}); }
OpInfo& src_vfs() { return step({VuDecodeStep::FieldK::FS, VuDecodeStep::AtomK::SRC_VF}); }
OpInfo& rel_branch11() {
return step({VuDecodeStep::FieldK::IMM11_BRANCH, VuDecodeStep::AtomK::BRANCH_TARGET});
}
OpInfo& imm15_unsigned() {
return step({VuDecodeStep::FieldK::IMM15_UNSIGNED, VuDecodeStep::AtomK::SRC_IMM});
}
OpInfo& dst_vft() { return step({VuDecodeStep::FieldK::FT, VuDecodeStep::AtomK::DST_VF}); }
OpInfo& dst_vfs() { return step({VuDecodeStep::FieldK::FS, VuDecodeStep::AtomK::DST_VF}); }
OpInfo& dst_vit() { return step({VuDecodeStep::FieldK::FT, VuDecodeStep::AtomK::DST_VI}); }
OpInfo& dst_vid() { return step({VuDecodeStep::FieldK::FD, VuDecodeStep::AtomK::DST_VI}); }
OpInfo& ftf_1() {
return step({VuDecodeStep::FieldK::FTF, VuDecodeStep::AtomK::SECOND_SOURCE_FIELD});
}
OpInfo& ftf_0() {
return step({VuDecodeStep::FieldK::FTF, VuDecodeStep::AtomK::FIRST_SOURCE_FIELD});
}
OpInfo& fsf_0() {
return step({VuDecodeStep::FieldK::FSF, VuDecodeStep::AtomK::FIRST_SOURCE_FIELD});
}
OpInfo& src_imm11_load_store() {
return step({VuDecodeStep::FieldK::IMM11_SIGNED, VuDecodeStep::AtomK::LOAD_STORE_OFFSET});
}
OpInfo& imm11_zero() {
return step({VuDecodeStep::FieldK::IMM11_SIGNED, VuDecodeStep::AtomK::ASSERT_ZERO});
}
OpInfo& src_imm15_unsigned() {
return step({VuDecodeStep::FieldK::IMM15_UNSIGNED, VuDecodeStep::AtomK::SRC_IMM});
}
OpInfo& src_imm24_unsigned() {
return step({VuDecodeStep::FieldK::IMM24_UNSIGNED, VuDecodeStep::AtomK::SRC_IMM});
}
OpInfo& src_imm5_signed() {
return step({VuDecodeStep::FieldK::IMM5_SIGNED, VuDecodeStep::AtomK::SRC_IMM});
}
OpInfo& imm15_zero() {
return step({VuDecodeStep::FieldK::IMM15_UNSIGNED, VuDecodeStep::AtomK::ASSERT_ZERO});
}
std::string name;
std::vector<VuDecodeStep> decode;
bool known = false;
};
const OpInfo& info(VuInstrK op) const {
assert((int)op < (int)VuInstrK::INVALID);
return m_op_info[(int)op];
}
VuUpperOp6 m_upper_op6_table[64];
VuLowerOp6 m_lower_op6_table[64];
OpInfo m_op_info[(int)VuInstrK::INVALID];
std::unordered_map<int, int> m_labels;
std::vector<std::string> m_label_names;
int add_label(int instr);
void name_labels();
OpInfo& add_op(VuInstrK kind, const std::string& name);
};
} // namespace decompiler
+92
View File
@@ -0,0 +1,92 @@
#include "common/util/assert.h"
#include "third-party/fmt/core.h"
#include "VuInstruction.h"
namespace decompiler {
VuInstructionAtom VuInstructionAtom::make_vf(int idx) {
assert(idx >= 0 && idx <= 31);
return {Kind::VF, idx};
}
VuInstructionAtom VuInstructionAtom::make_vi(int idx) {
assert(idx >= 0 && idx <= 15);
return {Kind::VI, idx};
}
VuInstructionAtom VuInstructionAtom::make_label(int idx) {
return {Kind::LABEL, idx};
}
VuInstructionAtom VuInstructionAtom::make_q() {
return {Kind::Q};
}
VuInstructionAtom VuInstructionAtom::make_acc() {
return {Kind::ACC};
}
VuInstructionAtom VuInstructionAtom::make_imm(u64 value) {
return {Kind::IMM, (s64)value};
}
VuInstructionAtom VuInstructionAtom::make_load_store_imm(s64 value) {
return {Kind::LOAD_STORE_IMM, value};
}
VuInstructionAtom VuInstructionAtom::make_i() {
return {Kind::I};
}
VuInstructionAtom VuInstructionAtom::make_p() {
return {Kind::P};
}
VuInstructionAtom VuInstructionAtom::make_r() {
return {Kind::R};
}
std::string VuInstructionAtom::to_string(const std::vector<std::string>& labels) const {
switch (m_kind) {
case Kind::VF:
return fmt::format("vf{:02d}", m_value);
case Kind::Q:
return "Q";
case Kind::ACC:
return "ACC";
case Kind::IMM:
if (m_value < 0) {
return fmt::format("-0x{:x}", -m_value);
} else {
return fmt::format("0x{:x}", m_value);
}
case Kind::I:
return "I";
case Kind::P:
return "P";
case Kind::R:
return "R";
case Kind::LABEL:
if (m_value < (int)labels.size()) {
return labels.at(m_value);
} else {
return "BAD-LABEL";
}
case Kind::LOAD_STORE_IMM:
return fmt::format("{}", m_value);
case Kind::VI:
return fmt::format("vi{:02d}", m_value);
case Kind::INVALID:
default:
assert(false);
}
}
VuInstruction VuInstruction::make_fp_constant(u32 value) {
VuInstruction result;
memcpy(&result.fp, &value, sizeof(float));
result.kind = VuInstrK::FP_CONSTANT;
return result;
}
} // namespace decompiler
+209
View File
@@ -0,0 +1,209 @@
#pragma once
#include <string>
#include <optional>
#include "common/common_types.h"
namespace decompiler {
enum class VuInstrK {
// upper
// ABS,
ADD,
ADDi,
ADDq,
ADDbc,
ADDA,
// ADDAi,
// ADDAq,
ADDAbc,
SUB,
// SUBi, // 10
// SUBq,
SUBbc,
// SUBA,
// SUBAi,
// SUBAq,
// SUBAbc,
MUL,
MULi,
MULq,
MULbc, // 20
MULA,
// MULAi,
// MULAq,
MULAbc,
MADD,
// MADDi,
// MADDq,
MADDbc,
MADDA,
// MADDAi, // 30
// MADDAq,
MADDAbc,
// MSUB,
// MSUBi,
// MSUBq,
MSUBbc,
// MSUBA,
// MSUBAi,
// MSUBAq,
MSUBAbc, // 40
MAX,
MAXi,
MAXbc,
MINI,
MINIi,
MINIbc,
OPMULA,
OPMSUB,
NOP, // 49
FTOI0, // 50
FTOI4,
FTOI12,
// FTOI15,
ITOF0,
// ITOF4,
ITOF12,
ITOF15,
CLIP,
// lower
DIV,
SQRT, // 60
RSQRT,
IADD,
IADDI,
IADDIU,
IAND,
IOR,
ISUB,
ISUBIU,
MOVE,
MFIR, // 70
MTIR,
MR32,
LQ,
LQD,
LQI,
SQ,
SQD,
SQI,
ILW,
ISW, // 80
ILWR,
ISWR,
// LOI,
// RINIT,
// RGET,
// RNEXT,
// RXOR,
WAITQ,
FSAND,
// FSEQ, // 90
// FSOR,
// FSSET,
FMAND,
// FMEQ,
// FMOR,
FCAND,
// FCEQ,
FCOR,
FCSET,
FCGET, // 100
IBEQ,
// IBEZ,
IBGEZ,
IBGTZ,
IBLEZ,
IBLTZ,
IBNE,
B,
BAL,
JR, // 110
JALR,
MFP,
// WAITP,
// ESADD,
// ERSADD,
// ELENG,
ERLENG,
// EATANxy,
// EATANxz,
// ESUM,
// ERCPR,
// ESQRT,
// ERSQRT,
// ESIN,
// IATAN,
// EEXP,
XGKICK,
XTOP,
// XITOP,
LOWER_NOP, // really iadd vi0 vi0 vi0
FP_CONSTANT,
INVALID
};
/*!
* Represents an operand in a VU instruction.
*/
class VuInstructionAtom {
public:
enum class Kind {
VF,
VI,
Q,
ACC,
IMM,
LOAD_STORE_IMM,
I,
P,
R,
LABEL,
INVALID,
};
static VuInstructionAtom make_vf(int idx);
static VuInstructionAtom make_vi(int idx);
static VuInstructionAtom make_label(int idx);
static VuInstructionAtom make_q();
static VuInstructionAtom make_acc();
static VuInstructionAtom make_imm(u64 value);
static VuInstructionAtom make_load_store_imm(s64 value);
static VuInstructionAtom make_i();
static VuInstructionAtom make_p();
static VuInstructionAtom make_r();
std::string to_string(const std::vector<std::string>& labels) const;
Kind kind() const { return m_kind; }
private:
VuInstructionAtom(Kind kind, s64 idx = -1) : m_kind(kind), m_value(idx) {}
Kind m_kind = Kind::INVALID;
s64 m_value = -1;
};
struct VuInstruction {
VuInstrK kind = VuInstrK::INVALID;
std::optional<VuInstructionAtom> dst;
std::vector<VuInstructionAtom> src;
std::optional<int> bc;
std::optional<int> mask;
std::optional<int> iemdt;
std::optional<int> first_src_field, second_src_field;
float fp;
bool i_bit() const { return iemdt && (*iemdt & 0b1000000); }
static VuInstruction make_fp_constant(u32 value);
};
struct VuInstructionPair {
VuInstruction upper, lower;
};
} // namespace decompiler
+3
View File
@@ -0,0 +1,3 @@
#include "VuProgram.h"
+22
View File
@@ -0,0 +1,22 @@
#pragma once
#include <vector>
#include "decompiler/VuDisasm/VuInstruction.h"
namespace decompiler {
class VuProgram {
public:
VuProgram() = default;
void add_instruction(const VuInstruction& upper, const VuInstruction& lower) {
VuInstructionPair p;
p.upper = upper;
p.lower = lower;
m_instructions.push_back(p);
}
const std::vector<VuInstructionPair>& instructions() const { return m_instructions; }
private:
std::vector<VuInstructionPair> m_instructions;
};
} // namespace decompiler
+1
View File
@@ -30,6 +30,7 @@ add_executable(goalc-test
${CMAKE_CURRENT_LIST_DIR}/decompiler/test_math_decomp.cpp
${CMAKE_CURRENT_LIST_DIR}/decompiler/test_DataParser.cpp
${CMAKE_CURRENT_LIST_DIR}/decompiler/test_DisasmVifDecompile.cpp
${CMAKE_CURRENT_LIST_DIR}/decompiler/test_VuDisasm.cpp
${GOALC_TEST_FRAMEWORK_SOURCES}
${GOALC_TEST_CASES})
+1 -1
View File
@@ -384,4 +384,4 @@ TEST_F(DataDecompTest, KernelContext) {
" :current-process #f\n"
" :relocating-process #f\n"
" :low-memory-message #t)\n");
}
}
+162
View File
@@ -0,0 +1,162 @@
#include "third-party/fmt/core.h"
#include "gtest/gtest.h"
#include "decompiler/util/DataParser.h"
#include "decompiler/VuDisasm/VuDisassembler.h"
#include "common/util/FileUtil.h"
using namespace decompiler;
namespace {
std::vector<u32> get_test_data(const std::string& name) {
auto text = file_util::read_text_file(
file_util::get_file_path({fmt::format("test/decompiler/vu_reference/{}.txt", name)}));
auto parsed = parse_data(text);
std::vector<u32> data;
for (auto& w : parsed.words) {
EXPECT_EQ(w.kind, LinkedWord::Kind::PLAIN_DATA);
data.push_back(w.data);
}
return data;
}
std::string get_expected(const std::string& name) {
return file_util::read_text_file(
file_util::get_file_path({fmt::format("test/decompiler/vu_reference/{}-result.txt", name)}));
}
} // namespace
TEST(VuDisasm, SpriteDistort) {
auto data = get_test_data("sprite-distort");
VuDisassembler disasm;
auto prog = disasm.disassemble(data.data(), data.size() * 4, false);
EXPECT_EQ(disasm.to_string(prog), get_expected("sprite-distort"));
}
TEST(VuDisasm, BackgroundVu0) {
auto data = get_test_data("background-vu0");
VuDisassembler disasm;
auto prog = disasm.disassemble(data.data(), data.size() * 4, false);
EXPECT_EQ(disasm.to_string(prog), get_expected("background-vu0"));
}
TEST(VuDisasm, CollideVu0) {
auto data = get_test_data("collide-vu0");
VuDisassembler disasm;
auto prog = disasm.disassemble(data.data(), data.size() * 4, false);
EXPECT_EQ(disasm.to_string(prog), get_expected("collide-vu0"));
}
TEST(VuDisasm, BonesVu0) {
auto data = get_test_data("bones-vu0");
VuDisassembler disasm;
auto prog = disasm.disassemble(data.data(), data.size() * 4, false);
EXPECT_EQ(disasm.to_string(prog), get_expected("bones-vu0"));
}
TEST(VuDisasm, ShadowVu0) {
auto data = get_test_data("shadow-vu0");
VuDisassembler disasm;
auto prog = disasm.disassemble(data.data(), data.size() * 4, false);
EXPECT_EQ(disasm.to_string(prog), get_expected("shadow-vu0"));
}
TEST(VuDisasm, OceanVu0) {
auto data = get_test_data("ocean-vu0");
VuDisassembler disasm;
auto prog = disasm.disassemble(data.data(), data.size() * 4, false);
EXPECT_EQ(disasm.to_string(prog), get_expected("ocean-vu0"));
}
TEST(VuDisasm, GenericVu0) {
auto data = get_test_data("generic-vu0");
VuDisassembler disasm;
auto prog = disasm.disassemble(data.data(), data.size() * 4, false);
EXPECT_EQ(disasm.to_string(prog), get_expected("generic-vu0"));
}
TEST(VuDisasm, MercnericVu0) {
auto data = get_test_data("mercneric-vu0");
VuDisassembler disasm;
auto prog = disasm.disassemble(data.data(), data.size() * 4, false);
EXPECT_EQ(disasm.to_string(prog), get_expected("mercneric-vu0"));
}
TEST(VuDisasm, OceanTexture) {
auto data = get_test_data("ocean-texture");
VuDisassembler disasm;
auto prog = disasm.disassemble(data.data(), data.size() * 4, false);
EXPECT_EQ(disasm.to_string(prog), get_expected("ocean-texture"));
}
TEST(VuDisasm, Sky) {
auto data = get_test_data("sky");
VuDisassembler disasm;
auto prog = disasm.disassemble(data.data(), data.size() * 4, false);
EXPECT_EQ(disasm.to_string(prog), get_expected("sky"));
}
TEST(VuDisasm, Shrub) {
auto data = get_test_data("shrub");
VuDisassembler disasm;
auto prog = disasm.disassemble(data.data(), data.size() * 4, false);
EXPECT_EQ(disasm.to_string(prog), get_expected("shrub"));
}
TEST(VuDisasm, Shadow) {
auto data = get_test_data("shadow");
VuDisassembler disasm;
auto prog = disasm.disassemble(data.data(), data.size() * 4, false);
EXPECT_EQ(disasm.to_string(prog), get_expected("shadow"));
}
TEST(VuDisasm, TNear) {
auto data = get_test_data("tnear");
VuDisassembler disasm;
auto prog = disasm.disassemble(data.data(), data.size() * 4, false);
EXPECT_EQ(disasm.to_string(prog), get_expected("tnear"));
}
TEST(VuDisasm, Sprite) {
auto data = get_test_data("sprite");
VuDisassembler disasm;
auto prog = disasm.disassemble(data.data(), data.size() * 4, false);
EXPECT_EQ(disasm.to_string(prog), get_expected("sprite"));
}
TEST(VuDisasm, Tie) {
auto data = get_test_data("tie");
VuDisassembler disasm;
auto prog = disasm.disassemble(data.data(), data.size() * 4, false);
EXPECT_EQ(disasm.to_string(prog), get_expected("tie"));
}
TEST(VuDisasm, Generic) {
auto data = get_test_data("generic");
VuDisassembler disasm;
auto prog = disasm.disassemble(data.data(), data.size() * 4, false);
EXPECT_EQ(disasm.to_string(prog), get_expected("generic"));
}
TEST(VuDisasm, TieNear) {
auto data = get_test_data("tie-near");
VuDisassembler disasm;
auto prog = disasm.disassemble(data.data(), data.size() * 4, false);
EXPECT_EQ(disasm.to_string(prog), get_expected("tie-near"));
}
TEST(VuDisasm, Tfrag) {
auto data = get_test_data("tfrag");
VuDisassembler disasm;
auto prog = disasm.disassemble(data.data(), data.size() * 4, false);
EXPECT_EQ(disasm.to_string(prog), get_expected("tfrag"));
}
TEST(VuDisasm, Merc) {
auto data = get_test_data("merc");
VuDisassembler disasm;
auto prog = disasm.disassemble(data.data(), data.size() * 4, false);
EXPECT_EQ(disasm.to_string(prog), get_expected("merc"));
}
@@ -0,0 +1,59 @@
sq.xyzw vf24, 4(vi00) | maxw.xyzw vf01, vf00, vf00
sq.xyzw vf25, 5(vi00) | nop
sq.xyzw vf26, 6(vi00) | nop
sq.xyzw vf27, 7(vi00) | nop
sq.xyzw vf16, 0(vi00) | mulz.xyzw vf24, vf01, vf24
sq.xyzw vf17, 1(vi00) | mulz.xyzw vf25, vf01, vf25
sq.xyzw vf18, 2(vi00) | mulz.xyzw vf26, vf01, vf26
sq.xyzw vf19, 3(vi00) | mulz.xyzw vf27, vf01, vf27
sq.xyzw vf24, 12(vi00) | nop
sq.xyzw vf25, 13(vi00) | nop
sq.xyzw vf26, 14(vi00) | nop
sq.xyzw vf27, 15(vi00) | nop
sq.xyzw vf28, 8(vi00) | nop
sq.xyzw vf29, 9(vi00) | nop
sq.xyzw vf30, 10(vi00) | nop
sq.xyzw vf31, 11(vi00) | nop :e
iaddiu vi02, vi00, 0xf0 | nop
lq.xyzw vf16, 0(vi00) | nop
lq.xyzw vf17, 1(vi00) | nop
lq.xyzw vf18, 2(vi00) | nop
lq.xyzw vf19, 3(vi00) | nop
lq.xyzw vf24, 12(vi00) | nop
lq.xyzw vf25, 13(vi00) | nop
lq.xyzw vf26, 14(vi00) | nop :e
lq.xyzw vf27, 15(vi00) | nop
lq.xyzw vf16, 0(vi00) | nop
lq.xyzw vf17, 1(vi00) | nop
lq.xyzw vf18, 2(vi00) | nop :e
lq.xyzw vf19, 3(vi00) | nop
lq.xyzw vf24, 4(vi00) | nop
lq.xyzw vf25, 5(vi00) | nop
lq.xyzw vf26, 6(vi00) | nop :e
lq.xyzw vf27, 7(vi00) | nop
lq.xyzw vf24, 12(vi00) | mulax.xyzw ACC, vf16, vf02
lq.xyzw vf25, 13(vi00) | madday.xyzw ACC, vf17, vf02
lq.xyzw vf26, 14(vi00) | maddaz.xyzw ACC, vf18, vf02
lq.xyzw vf27, 15(vi00) | msubaw.xyzw ACC, vf19, vf00
nop | maddw.xyzw vf04, vf01, vf02
nop | mulax.xyzw ACC, vf24, vf02
nop | madday.xyzw ACC, vf25, vf02
nop | maddaz.xyzw ACC, vf26, vf02 :e
fmand vi01, vi02 | maddw.xyzw vf06, vf27, vf00
lq.xyzw vf16, 0(vi00) | nop
lq.xyzw vf17, 1(vi00) | nop
lq.xyzw vf18, 2(vi00) | nop
lq.xyzw vf19, 3(vi00) | nop
lq.xyzw vf28, 8(vi00) | mulax.xyzw ACC, vf16, vf02
lq.xyzw vf29, 9(vi00) | madday.xyzw ACC, vf17, vf02
lq.xyzw vf30, 10(vi00) | maddaz.xyzw ACC, vf18, vf02
lq.xyzw vf31, 11(vi00) | msubaw.xyzw ACC, vf19, vf00
lq.xyzw vf24, 4(vi00) | maddw.xyzw vf04, vf01, vf02
lq.xyzw vf25, 5(vi00) | mulax.xyzw ACC, vf28, vf02
lq.xyzw vf26, 6(vi00) | madday.xyzw ACC, vf29, vf02
lq.xyzw vf27, 7(vi00) | maddaz.xyzw ACC, vf30, vf02
fmand vi01, vi02 | maddw.xyzw vf05, vf31, vf00
nop | mulax.xyzw ACC, vf24, vf02
nop | madday.xyzw ACC, vf25, vf02
nop | maddaz.xyzw ACC, vf26, vf02 :e
nop | maddw.xyzw vf06, vf27, vf00
@@ -0,0 +1,118 @@
.word 0x3e0c004
.word 0x1e00053
.word 0x3e0c805
.word 0x2ff
.word 0x3e0d006
.word 0x2ff
.word 0x3e0d807
.word 0x2ff
.word 0x3e08000
.word 0x1f80e1a
.word 0x3e08801
.word 0x1f90e5a
.word 0x3e09002
.word 0x1fa0e9a
.word 0x3e09803
.word 0x1fb0eda
.word 0x3e0c00c
.word 0x2ff
.word 0x3e0c80d
.word 0x2ff
.word 0x3e0d00e
.word 0x2ff
.word 0x3e0d80f
.word 0x2ff
.word 0x3e0e008
.word 0x2ff
.word 0x3e0e809
.word 0x2ff
.word 0x3e0f00a
.word 0x2ff
.word 0x3e0f80b
.word 0x400002ff
.word 0x100200f0
.word 0x2ff
.word 0x1f00000
.word 0x2ff
.word 0x1f10001
.word 0x2ff
.word 0x1f20002
.word 0x2ff
.word 0x1f30003
.word 0x2ff
.word 0x1f8000c
.word 0x2ff
.word 0x1f9000d
.word 0x2ff
.word 0x1fa000e
.word 0x400002ff
.word 0x1fb000f
.word 0x2ff
.word 0x1f00000
.word 0x2ff
.word 0x1f10001
.word 0x2ff
.word 0x1f20002
.word 0x400002ff
.word 0x1f30003
.word 0x2ff
.word 0x1f80004
.word 0x2ff
.word 0x1f90005
.word 0x2ff
.word 0x1fa0006
.word 0x400002ff
.word 0x1fb0007
.word 0x2ff
.word 0x1f8000c
.word 0x1e281bc
.word 0x1f9000d
.word 0x1e288bd
.word 0x1fa000e
.word 0x1e290be
.word 0x1fb000f
.word 0x1e098ff
.word 0x80000030
.word 0x1e2090b
.word 0x80000030
.word 0x1e2c1bc
.word 0x80000030
.word 0x1e2c8bd
.word 0x80000030
.word 0x41e2d0be
.word 0x34011000
.word 0x1e0d98b
.word 0x1f00000
.word 0x2ff
.word 0x1f10001
.word 0x2ff
.word 0x1f20002
.word 0x2ff
.word 0x1f30003
.word 0x2ff
.word 0x1fc0008
.word 0x1e281bc
.word 0x1fd0009
.word 0x1e288bd
.word 0x1fe000a
.word 0x1e290be
.word 0x1ff000b
.word 0x1e098ff
.word 0x1f80004
.word 0x1e2090b
.word 0x1f90005
.word 0x1e2e1bc
.word 0x1fa0006
.word 0x1e2e8bd
.word 0x1fb0007
.word 0x1e2f0be
.word 0x34011000
.word 0x1e0f94b
.word 0x80000030
.word 0x1e2c1bc
.word 0x80000030
.word 0x1e2c8bd
.word 0x80000030
.word 0x41e2d0be
.word 0x80000030
.word 0x1e0d98b
@@ -0,0 +1,63 @@
nop | mulax.xyzw ACC, vf05, vf01
nop | madday.xyzw ACC, vf06, vf01
nop | maddaz.xyzw ACC, vf07, vf01
nop | maddw.xyzw vf13, vf08, vf01
nop | mulax.xyzw ACC, vf05, vf02
nop | madday.xyzw ACC, vf06, vf02
nop | maddaz.xyzw ACC, vf07, vf02
nop | maddw.xyzw vf14, vf08, vf02
nop | mulax.xyzw ACC, vf05, vf03
nop | madday.xyzw ACC, vf06, vf03
nop | maddaz.xyzw ACC, vf07, vf03
nop | maddw.xyzw vf15, vf08, vf03
nop | mulax.xyzw ACC, vf05, vf04
nop | madday.xyzw ACC, vf06, vf04
nop | maddaz.xyzw ACC, vf07, vf04
nop | maddw.xyzw vf16, vf08, vf04
nop | opmula.xyz ACC, vf14, vf15
nop | opmsub.xyz vf09, vf15, vf14
nop | opmula.xyz ACC, vf15, vf13
nop | opmsub.xyz vf10, vf13, vf15
nop | opmula.xyz ACC, vf13, vf14
nop | mul.xyz vf12, vf13, vf09
nop | opmsub.xyz vf11, vf14, vf13
nop | mulax.xyzw ACC, vf28, vf13
nop | madday.xyzw ACC, vf29, vf13
nop | maddaz.xyzw ACC, vf30, vf13
nop | maddw.xyzw vf13, vf31, vf13
nop | mulax.w ACC, vf00, vf12
nop | madday.w ACC, vf00, vf12
nop | maddz.w vf12, vf00, vf12
nop | mulax.xyzw ACC, vf28, vf14
nop | madday.xyzw ACC, vf29, vf14
nop | maddaz.xyzw ACC, vf30, vf14
div Q, vf00.w, vf12.w | maddw.xyzw vf14, vf31, vf14
nop | mulax.xyzw ACC, vf28, vf15
nop | madday.xyzw ACC, vf29, vf15
nop | maddaz.xyzw ACC, vf30, vf15
nop | maddw.xyzw vf15, vf31, vf15
nop | mulax.xyzw ACC, vf28, vf16
nop | madday.xyzw ACC, vf29, vf16
nop | maddaz.xyzw ACC, vf30, vf16
nop | maddw.xyzw vf16, vf31, vf16
nop | mul.xyzw vf09, vf09, Q
nop | mul.xyzw vf10, vf10, Q
nop | mul.xyzw vf11, vf11, Q
nop | mulax.xyzw ACC, vf25, vf09
nop | madday.xyzw ACC, vf26, vf09
nop | maddz.xyzw vf09, vf27, vf09
nop | mulax.xyzw ACC, vf25, vf10
nop | madday.xyzw ACC, vf26, vf10
nop | maddz.xyzw vf10, vf27, vf10
nop | mulax.xyzw ACC, vf25, vf11
nop | madday.xyzw ACC, vf26, vf11 :e
nop | maddz.xyzw vf11, vf27, vf11
nop | mulax.xyzw ACC, vf01, vf04
nop | madday.xyzw ACC, vf02, vf04
nop | maddz.xyzw vf07, vf03, vf04
nop | mulax.xyzw ACC, vf01, vf05
nop | madday.xyzw ACC, vf02, vf05
nop | maddz.xyzw vf08, vf03, vf05
nop | mulax.xyzw ACC, vf01, vf06
nop | madday.xyzw ACC, vf02, vf06 :e
nop | maddz.xyzw vf09, vf03, vf06
+126
View File
@@ -0,0 +1,126 @@
.word 0x80000030
.word 0x1e129bc
.word 0x80000030
.word 0x1e130bd
.word 0x80000030
.word 0x1e138be
.word 0x80000030
.word 0x1e1434b
.word 0x80000030
.word 0x1e229bc
.word 0x80000030
.word 0x1e230bd
.word 0x80000030
.word 0x1e238be
.word 0x80000030
.word 0x1e2438b
.word 0x80000030
.word 0x1e329bc
.word 0x80000030
.word 0x1e330bd
.word 0x80000030
.word 0x1e338be
.word 0x80000030
.word 0x1e343cb
.word 0x80000030
.word 0x1e429bc
.word 0x80000030
.word 0x1e430bd
.word 0x80000030
.word 0x1e438be
.word 0x80000030
.word 0x1e4440b
.word 0x80000030
.word 0x1cf72fe
.word 0x80000030
.word 0x1ce7a6e
.word 0x80000030
.word 0x1cd7afe
.word 0x80000030
.word 0x1cf6aae
.word 0x80000030
.word 0x1ce6afe
.word 0x80000030
.word 0x1c96b2a
.word 0x80000030
.word 0x1cd72ee
.word 0x80000030
.word 0x1ede1bc
.word 0x80000030
.word 0x1ede8bd
.word 0x80000030
.word 0x1edf0be
.word 0x80000030
.word 0x1edfb4b
.word 0x80000030
.word 0x2c01bc
.word 0x80000030
.word 0x2c00bd
.word 0x80000030
.word 0x2c030a
.word 0x80000030
.word 0x1eee1bc
.word 0x80000030
.word 0x1eee8bd
.word 0x80000030
.word 0x1eef0be
.word 0x81ec03bc
.word 0x1eefb8b
.word 0x80000030
.word 0x1efe1bc
.word 0x80000030
.word 0x1efe8bd
.word 0x80000030
.word 0x1eff0be
.word 0x80000030
.word 0x1effbcb
.word 0x80000030
.word 0x1f0e1bc
.word 0x80000030
.word 0x1f0e8bd
.word 0x80000030
.word 0x1f0f0be
.word 0x80000030
.word 0x1f0fc0b
.word 0x80000030
.word 0x1e04a5c
.word 0x80000030
.word 0x1e0529c
.word 0x80000030
.word 0x1e05adc
.word 0x80000030
.word 0x1e9c9bc
.word 0x80000030
.word 0x1e9d0bd
.word 0x80000030
.word 0x1e9da4a
.word 0x80000030
.word 0x1eac9bc
.word 0x80000030
.word 0x1ead0bd
.word 0x80000030
.word 0x1eada8a
.word 0x80000030
.word 0x1ebc9bc
.word 0x80000030
.word 0x41ebd0bd
.word 0x80000030
.word 0x1ebdaca
.word 0x80000030
.word 0x1e409bc
.word 0x80000030
.word 0x1e410bd
.word 0x80000030
.word 0x1e419ca
.word 0x80000030
.word 0x1e509bc
.word 0x80000030
.word 0x1e510bd
.word 0x80000030
.word 0x1e51a0a
.word 0x80000030
.word 0x1e609bc
.word 0x80000030
.word 0x41e610bd
.word 0x80000030
.word 0x1e61a4a
@@ -0,0 +1,90 @@
nop | mulaw.xyzw ACC, vf04, vf00
nop | maddax.xyzw ACC, vf01, vf05
nop | madday.xyzw ACC, vf02, vf05
nop | maddz.xyz vf05, vf03, vf05
nop | mulaw.xyzw ACC, vf04, vf00
nop | maddax.xyzw ACC, vf01, vf06
nop | madday.xyzw ACC, vf02, vf06
nop | maddz.xyz vf06, vf03, vf06
nop | mulaw.xyzw ACC, vf04, vf00
nop | maddax.xyzw ACC, vf01, vf07
nop | madday.xyzw ACC, vf02, vf07
nop | maddz.xyz vf07, vf03, vf07
nop | mulaw.xyzw ACC, vf04, vf00
nop | maddax.xyzw ACC, vf01, vf08
nop | madday.xyzw ACC, vf02, vf08
nop | maddz.xyz vf08, vf03, vf08
nop | subw.xyz vf09, vf05, vf05
nop | subw.xyz vf11, vf06, vf06
nop | subw.xyz vf13, vf07, vf07
nop | subw.xyz vf15, vf08, vf08
nop | addw.xyz vf10, vf05, vf05
nop | addw.xyz vf12, vf06, vf06
nop | addw.xyz vf14, vf07, vf07
nop | addw.xyz vf16, vf08, vf08
nop | ftoi0.xyzw vf09, vf09
nop | ftoi0.xyzw vf11, vf11
nop | ftoi0.xyzw vf13, vf13
nop | ftoi0.xyzw vf15, vf15
nop | ftoi0.xyzw vf10, vf10
nop | ftoi0.xyzw vf12, vf12
nop | ftoi0.xyzw vf14, vf14 :e
nop | ftoi0.xyzw vf16, vf16
nop | itof0.xyzw vf20, vf20
nop | itof12.xyzw vf17, vf17
nop | itof12.xyzw vf18, vf18
nop | itof12.xyzw vf19, vf19
nop | add.xyz vf20, vf20, vf23
nop | itof12.xyzw vf21, vf21
nop | mulax.xyzw ACC, vf01, vf20
nop | madday.xyzw ACC, vf02, vf20
nop | maddaz.xyzw ACC, vf03, vf20
nop | maddw.xyz vf20, vf04, vf00
nop | mulax.xyzw ACC, vf01, vf17
nop | madday.xyzw ACC, vf02, vf17
nop | maddaz.xyzw ACC, vf03, vf17
nop | maddx.xyz vf17, vf04, vf00
nop | mulax.xyzw ACC, vf01, vf18
nop | madday.xyzw ACC, vf02, vf18
nop | maddaz.xyzw ACC, vf03, vf18
nop | maddx.xyz vf18, vf04, vf00
nop | mulax.xyzw ACC, vf01, vf19
nop | madday.xyzw ACC, vf02, vf19
nop | maddaz.xyzw ACC, vf03, vf19 :e
nop | maddx.xyz vf19, vf04, vf00
nop | mulaw.xyzw ACC, vf20, vf00
nop | maddax.xyzw ACC, vf17, vf05
nop | madday.xyzw ACC, vf18, vf05
nop | maddz.xyzw vf09, vf19, vf05
nop | mulaw.xyzw ACC, vf20, vf00
nop | maddax.xyzw ACC, vf17, vf06
nop | madday.xyzw ACC, vf18, vf06
nop | maddz.xyzw vf11, vf19, vf06
nop | mulaw.xyzw ACC, vf20, vf00
nop | maddax.xyzw ACC, vf17, vf07
nop | madday.xyzw ACC, vf18, vf07
nop | maddz.xyzw vf13, vf19, vf07
nop | mulaw.xyzw ACC, vf20, vf00
nop | maddax.xyzw ACC, vf17, vf08
nop | madday.xyzw ACC, vf18, vf08
nop | maddz.xyzw vf15, vf19, vf08
nop | mulw.x vf22, vf21, vf05
nop | mulw.y vf22, vf21, vf06
nop | mulw.z vf22, vf21, vf07
nop | mulw.w vf22, vf21, vf08
nop | addx.xyz vf10, vf09, vf22
nop | subx.xyz vf09, vf09, vf22
nop | addy.xyz vf12, vf11, vf22
nop | suby.xyz vf11, vf11, vf22
nop | addz.xyz vf14, vf13, vf22
nop | subz.xyz vf13, vf13, vf22
nop | addw.xyz vf16, vf15, vf22
nop | subw.xyz vf15, vf15, vf22
nop | ftoi0.xyzw vf10, vf10
nop | ftoi0.xyzw vf09, vf09
nop | ftoi0.xyzw vf12, vf12
nop | ftoi0.xyzw vf11, vf11
nop | ftoi0.xyzw vf14, vf14
nop | ftoi0.xyzw vf13, vf13
nop | ftoi0.xyzw vf16, vf16 :e
nop | ftoi0.xyzw vf15, vf15
@@ -0,0 +1,180 @@
.word 0x80000030
.word 0x1e021bf
.word 0x80000030
.word 0x1e508bc
.word 0x80000030
.word 0x1e510bd
.word 0x80000030
.word 0x1c5194a
.word 0x80000030
.word 0x1e021bf
.word 0x80000030
.word 0x1e608bc
.word 0x80000030
.word 0x1e610bd
.word 0x80000030
.word 0x1c6198a
.word 0x80000030
.word 0x1e021bf
.word 0x80000030
.word 0x1e708bc
.word 0x80000030
.word 0x1e710bd
.word 0x80000030
.word 0x1c719ca
.word 0x80000030
.word 0x1e021bf
.word 0x80000030
.word 0x1e808bc
.word 0x80000030
.word 0x1e810bd
.word 0x80000030
.word 0x1c81a0a
.word 0x80000030
.word 0x1c52a47
.word 0x80000030
.word 0x1c632c7
.word 0x80000030
.word 0x1c73b47
.word 0x80000030
.word 0x1c843c7
.word 0x80000030
.word 0x1c52a83
.word 0x80000030
.word 0x1c63303
.word 0x80000030
.word 0x1c73b83
.word 0x80000030
.word 0x1c84403
.word 0x80000030
.word 0x1e9497c
.word 0x80000030
.word 0x1eb597c
.word 0x80000030
.word 0x1ed697c
.word 0x80000030
.word 0x1ef797c
.word 0x80000030
.word 0x1ea517c
.word 0x80000030
.word 0x1ec617c
.word 0x80000030
.word 0x41ee717c
.word 0x80000030
.word 0x1f0817c
.word 0x80000030
.word 0x1f4a13c
.word 0x80000030
.word 0x1f1893e
.word 0x80000030
.word 0x1f2913e
.word 0x80000030
.word 0x1f3993e
.word 0x80000030
.word 0x1d7a528
.word 0x80000030
.word 0x1f5a93e
.word 0x80000030
.word 0x1f409bc
.word 0x80000030
.word 0x1f410bd
.word 0x80000030
.word 0x1f418be
.word 0x80000030
.word 0x1c0250b
.word 0x80000030
.word 0x1f109bc
.word 0x80000030
.word 0x1f110bd
.word 0x80000030
.word 0x1f118be
.word 0x80000030
.word 0x1c02448
.word 0x80000030
.word 0x1f209bc
.word 0x80000030
.word 0x1f210bd
.word 0x80000030
.word 0x1f218be
.word 0x80000030
.word 0x1c02488
.word 0x80000030
.word 0x1f309bc
.word 0x80000030
.word 0x1f310bd
.word 0x80000030
.word 0x41f318be
.word 0x80000030
.word 0x1c024c8
.word 0x80000030
.word 0x1e0a1bf
.word 0x80000030
.word 0x1e588bc
.word 0x80000030
.word 0x1e590bd
.word 0x80000030
.word 0x1e59a4a
.word 0x80000030
.word 0x1e0a1bf
.word 0x80000030
.word 0x1e688bc
.word 0x80000030
.word 0x1e690bd
.word 0x80000030
.word 0x1e69aca
.word 0x80000030
.word 0x1e0a1bf
.word 0x80000030
.word 0x1e788bc
.word 0x80000030
.word 0x1e790bd
.word 0x80000030
.word 0x1e79b4a
.word 0x80000030
.word 0x1e0a1bf
.word 0x80000030
.word 0x1e888bc
.word 0x80000030
.word 0x1e890bd
.word 0x80000030
.word 0x1e89bca
.word 0x80000030
.word 0x105ad9b
.word 0x80000030
.word 0x86ad9b
.word 0x80000030
.word 0x47ad9b
.word 0x80000030
.word 0x28ad9b
.word 0x80000030
.word 0x1d64a80
.word 0x80000030
.word 0x1d64a44
.word 0x80000030
.word 0x1d65b01
.word 0x80000030
.word 0x1d65ac5
.word 0x80000030
.word 0x1d66b82
.word 0x80000030
.word 0x1d66b46
.word 0x80000030
.word 0x1d67c03
.word 0x80000030
.word 0x1d67bc7
.word 0x80000030
.word 0x1ea517c
.word 0x80000030
.word 0x1e9497c
.word 0x80000030
.word 0x1ec617c
.word 0x80000030
.word 0x1eb597c
.word 0x80000030
.word 0x1ee717c
.word 0x80000030
.word 0x1ed697c
.word 0x80000030
.word 0x41f0817c
.word 0x80000030
.word 0x1ef797c
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,295 @@
move.xyzw vf21, vf17 | mulax.xyzw ACC, vf10, vf01
move.xyzw vf22, vf18 | madday.xyzw ACC, vf11, vf01
move.xyzw vf23, vf19 | maddz.xyzw vf01, vf12, vf01
move.xyzw vf24, vf20 | mulax.xyzw ACC, vf10, vf02
nop | itof0.xyzw vf17, vf05
nop | itof0.xyzw vf18, vf06
nop | itof0.xyzw vf19, vf07
nop | itof0.xyzw vf20, vf08
nop | madday.xyzw ACC, vf11, vf02
nop | maddz.xyzw vf02, vf12, vf02
nop | mulax.xyzw ACC, vf10, vf03
nop | madday.xyzw ACC, vf11, vf03
nop | maddz.xyzw vf03, vf12, vf03
nop | mulax.xyzw ACC, vf10, vf04
nop | madday.xyzw ACC, vf11, vf04
nop | maddz.xyzw vf04, vf12, vf04
nop | maxx.xyzw vf01, vf01, vf00
nop | maxx.xyzw vf02, vf02, vf00
nop | maxx.xyzw vf03, vf03, vf00
nop | maxx.xyzw vf04, vf04, vf00
nop | mulaw.xyzw ACC, vf13, vf00
nop | maddax.xyzw ACC, vf14, vf01
nop | madday.xyzw ACC, vf15, vf01
nop | maddz.xyzw vf01, vf16, vf01
nop | mulaw.xyzw ACC, vf13, vf00
nop | maddax.xyzw ACC, vf14, vf02
nop | madday.xyzw ACC, vf15, vf02
nop | maddz.xyzw vf02, vf16, vf02
nop | mulaw.xyzw ACC, vf13, vf00
nop | maddax.xyzw ACC, vf14, vf03
nop | madday.xyzw ACC, vf15, vf03
nop | maddz.xyzw vf03, vf16, vf03
nop | mulaw.xyzw ACC, vf13, vf00
nop | maddax.xyzw ACC, vf14, vf04
nop | madday.xyzw ACC, vf15, vf04
nop | maddz.xyzw vf04, vf16, vf04
nop | mul.xyzw vf17, vf17, vf01
nop | mul.xyzw vf18, vf18, vf02
nop | mul.xyzw vf19, vf19, vf03
nop | mul.xyzw vf20, vf20, vf04
nop | minix.xyzw vf17, vf17, vf09
nop | minix.xyzw vf18, vf18, vf09
nop | minix.xyzw vf19, vf19, vf09
nop | minix.xyzw vf20, vf20, vf09
nop | ftoi0.xyzw vf17, vf17
nop | ftoi0.xyzw vf18, vf18
nop | ftoi0.xyzw vf19, vf19 :e
nop | ftoi0.xyzw vf20, vf20
nop | mulx.xyzw vf13, vf09, vf31
nop | subw.z vf21, vf21, vf00
nop | addy.x vf29, vf29, vf29
nop | mulx.xyz vf08, vf08, vf30
nop | addw.xy vf05, vf05, vf31
nop | mul.xyz vf30, vf21, vf13
nop | addz.x vf29, vf29, vf29
nop | add.xyz vf08, vf08, vf16
move.xyzw vf28, vf27 | ftoi12.xy vf17, vf05
move.xyzw vf02, vf22 | addy.x vf30, vf30, vf30
rsqrt Q, vf31.z, vf29.x | mul.xyz vf06, vf06, Q
nop | mul.xyz vf29, vf08, vf08
nop | mulx.xyz vf01, vf21, vf28
nop | addz.x vf30, vf30, vf30
nop | mulx.xyzw vf14, vf10, vf31
nop | subw.z vf02, vf02, vf00
nop | addy.x vf29, vf29, vf29
nop | mulx.xyz vf01, vf01, vf30
nop | addw.xy vf06, vf06, vf31
nop | mul.xyz vf30, vf02, vf14
nop | addz.x vf29, vf29, vf29
nop | add.xyz vf01, vf01, vf13
nop | ftoi12.xy vf18, vf06
nop | addy.x vf30, vf30, vf30
rsqrt Q, vf31.z, vf29.x | mul.xyz vf07, vf07, Q
move.xyzw vf03, vf23 | mul.xyz vf29, vf01, vf01
nop | muly.xyz vf02, vf02, vf28
nop | addz.x vf30, vf30, vf30
nop | mulx.xyzw vf15, vf11, vf31
nop | subw.z vf03, vf03, vf00
nop | addy.x vf29, vf29, vf29
nop | mulx.xyz vf02, vf02, vf30
nop | addw.xy vf07, vf07, vf31
nop | mul.xyz vf30, vf03, vf15
nop | addz.x vf29, vf29, vf29
nop | add.xyz vf02, vf02, vf14
nop | ftoi12.xy vf19, vf07
nop | addy.x vf30, vf30, vf30
rsqrt Q, vf31.z, vf29.x | mul.xyz vf08, vf08, Q
move.xyzw vf04, vf24 | mul.xyz vf29, vf02, vf02
nop | mulz.xyz vf03, vf03, vf28
nop | addz.x vf30, vf30, vf30
nop | mulx.xyzw vf16, vf12, vf31
nop | subw.z vf04, vf04, vf00
nop | addy.x vf29, vf29, vf29
nop | mulx.xyz vf03, vf03, vf30
nop | addw.xy vf08, vf08, vf31
nop | mul.xyz vf30, vf04, vf16
nop | addz.x vf29, vf29, vf29
nop | add.xyz vf03, vf03, vf15
nop | ftoi12.xy vf20, vf08
nop | addy.x vf30, vf30, vf30
rsqrt Q, vf31.z, vf29.x | mul.xyz vf05, vf01, Q
move.xyzw vf06, vf02 | mul.xyz vf29, vf03, vf03
move.xyzw vf07, vf03 | mulw.xyz vf08, vf04, vf28 :e
nop | addz.x vf30, vf30, vf30
iaddi vi02, vi00, 0x0 | nop
iadd vi03, vi02, vi08 | nop
iaddiu vi03, vi03, 0x10 | nop
iadd vi01, vi03, vi09 | nop
iadd vi01, vi01, vi09 | nop
iaddiu vi01, vi01, 0x10 | nop
iaddi vi10, vi00, 0x0 | nop
ior vi11, vi03, vi00 | nop
ior vi12, vi01, vi00 | nop :e
iadd vi13, vi01, vi08 | nop
nop | itof12.xyzw vf09, vf05
nop | itof12.xyzw vf10, vf06
nop | itof12.xyzw vf11, vf07
nop | itof12.xyzw vf12, vf08
sqi.xyzw vf09, vi01 | nop
sqi.xyzw vf10, vi01 | nop
sqi.xyzw vf11, vi01 | nop :e
sqi.xyzw vf12, vi01 | nop
mr32.w vf17, vf13 | itof0.xyz vf09, vf01
mr32.w vf18, vf14 | itof0.xyz vf10, vf02
mr32.w vf19, vf15 | itof0.xyz vf11, vf03
mr32.w vf20, vf16 | itof0.xyz vf12, vf04
move.w vf09, vf17 | nop
move.w vf10, vf18 | nop
move.w vf11, vf19 | nop
move.w vf12, vf20 | nop
sqi.xyzw vf09, vi02 | nop
sqi.xyzw vf10, vi02 | nop
sqi.xyzw vf11, vi02 | nop :e
sqi.xyzw vf12, vi02 | nop
mr32.w vf17, vf13 | itof0.xyz vf09, vf01
mr32.w vf18, vf14 | itof0.xyz vf10, vf02
nop | itof0.xyz vf11, vf03
nop | nop
move.w vf09, vf17 | nop
move.w vf10, vf18 | nop
nop | nop
iaddi vi03, vi03, 0x2 | nop
sqi.xyzw vf09, vi02 | nop
sq.xyzw vf10, -2(vi03) | nop :e
sq.xyzw vf11, -1(vi03) | nop
mr32.w vf17, vf13 | itof0.xyz vf09, vf01
mr32.w vf18, vf14 | itof0.xyz vf10, vf02
mr32.w vf19, vf15 | itof0.xyz vf11, vf03
nop | itof0.xyz vf12, vf04
move.w vf09, vf17 | nop
move.w vf10, vf18 | nop
move.w vf11, vf19 | nop
iaddi vi03, vi03, 0x2 | nop
sqi.xyzw vf09, vi02 | nop
sqi.xyzw vf10, vi02 | nop
sq.xyzw vf11, -2(vi03) | nop :e
sq.xyzw vf12, -1(vi03) | nop
mr32.w vf17, vf13 | itof0.xyz vf09, vf01
mr32.w vf18, vf14 | itof0.xyz vf10, vf02
mr32.w vf19, vf15 | itof0.xyz vf11, vf03
nop | nop
move.w vf09, vf17 | nop
move.w vf10, vf18 | nop
move.w vf11, vf19 | nop
nop | nop
sqi.xyzw vf09, vi02 | nop
sqi.xyzw vf10, vi02 | nop :e
sqi.xyzw vf11, vi02 | nop
mr32.w vf17, vf13 | itof0.xyz vf09, vf01
mr32.w vf19, vf14 | itof0.xyz vf10, vf02
nop | itof0.xyz vf11, vf03
iaddi vi03, vi03, 0x4 | itof0.xyz vf12, vf04
move.w vf09, vf17 | nop
move.w vf11, vf19 | nop
sq.xyz vf10, -3(vi03) | nop
sq.xyz vf12, -1(vi03) | nop
sq.xyzw vf09, -4(vi03) | nop :e
sq.xyzw vf11, -2(vi03) | nop
ior vi02, vi10, vi00 | nop
ior vi01, vi12, vi00 | nop
lqi.xyzw vf05, vi02 | nop
nop | nop
nop | nop
lqi.xyzw vf09, vi01 | mulaw.xyzw ACC, vf04, vf00
move.xyzw vf19, vf21 | maddax.xyzw ACC, vf01, vf05
move.xyzw vf16, vf22 | madday.xyzw ACC, vf02, vf05
move.xyzw vf20, vf23 | maddz.xyz vf13, vf03, vf05
lqi.xyzw vf06, vi02 | mulax.xyzw ACC, vf01, vf09
move.xyzw vf15, vf24 | madday.xyzw ACC, vf02, vf09
nop | maddz.xyzw vf17, vf03, vf09
lqi.xyzw vf10, vi01 | mulaw.xyzw ACC, vf04, vf00
move.w vf13, vf05 | maddax.xyzw ACC, vf01, vf06
nop | madday.xyzw ACC, vf02, vf06
nop | maddz.xyz vf14, vf03, vf06
lqi.xyzw vf07, vi02 | mulax.xyzw ACC, vf01, vf10
nop | madday.xyzw ACC, vf02, vf10
nop | maddz.xyzw vf18, vf03, vf10
lqi.xyzw vf11, vi01 | mulaw.xyzw ACC, vf04, vf00
move.w vf14, vf06 | maddax.xyzw ACC, vf01, vf07
nop | madday.xyzw ACC, vf02, vf07
nop | maddz.xyz vf24, vf03, vf07
lqi.xyzw vf08, vi02 | mulax.xyzw ACC, vf01, vf11
nop | madday.xyzw ACC, vf02, vf11
nop | maddz.xyzw vf21, vf03, vf11
lqi.xyzw vf12, vi01 | mulaw.xyzw ACC, vf04, vf00
move.w vf24, vf07 | maddax.xyzw ACC, vf01, vf08
nop | madday.xyzw ACC, vf02, vf08
nop | maddz.xyz vf22, vf03, vf08
lqi.xyzw vf05, vi02 | mulax.xyzw ACC, vf01, vf12
move.w vf22, vf08 | madday.xyzw ACC, vf02, vf12 :e
nop | maddz.xyzw vf23, vf03, vf12
move.xyzw vf19, vf21 | nop
move.xyzw vf16, vf22 | nop
move.xyzw vf20, vf23 | nop :e
move.xyzw vf15, vf24 | nop
ior vi03, vi11, vi00 | nop
ior vi01, vi13, vi00 | nop
lqi.xyzw vf05, vi03 | nop
lqi.xyzw vf25, vi03 | nop
lqi.xyzw vf09, vi01 | nop
nop | nop
move.xyzw vf16, vf21 | mulax.xyz ACC, vf05, vf29
nop | maddw.xyz vf30, vf25, vf00
nop | mulax.xyzw ACC, vf01, vf09
nop | madday.xyzw ACC, vf02, vf09
move.w vf13, vf05 | maddz.xyz vf17, vf03, vf09
lqi.xyzw vf06, vi03 | mulaw.xyzw ACC, vf04, vf00
lqi.xyzw vf26, vi03 | maddax.xyzw ACC, vf01, vf30
lqi.xyzw vf10, vi01 | madday.xyzw ACC, vf02, vf30
nop | maddz.xyz vf13, vf03, vf30
nop | mulax.xyz ACC, vf06, vf29
nop | maddw.xyz vf30, vf26, vf00
nop | mulax.xyzw ACC, vf01, vf10
nop | madday.xyzw ACC, vf02, vf10
move.w vf14, vf06 | maddz.xyz vf18, vf03, vf10
lqi.xyzw vf07, vi03 | mulaw.xyzw ACC, vf04, vf00
lqi.xyzw vf27, vi03 | maddax.xyzw ACC, vf01, vf30
lqi.xyzw vf11, vi01 | madday.xyzw ACC, vf02, vf30
nop | maddz.xyz vf14, vf03, vf30
nop | mulax.xyz ACC, vf07, vf29
nop | maddw.xyz vf30, vf27, vf00
nop | mulax.xyzw ACC, vf01, vf11
nop | madday.xyzw ACC, vf02, vf11
move.w vf15, vf07 | maddz.xyz vf19, vf03, vf11
lqi.xyzw vf08, vi03 | mulaw.xyzw ACC, vf04, vf00
lqi.xyzw vf28, vi03 | maddax.xyzw ACC, vf01, vf30
lqi.xyzw vf12, vi01 | madday.xyzw ACC, vf02, vf30
nop | maddz.xyz vf15, vf03, vf30
nop | mulax.xyz ACC, vf08, vf29
nop | maddw.xyz vf30, vf28, vf00
nop | mulax.xyzw ACC, vf01, vf12
nop | madday.xyzw ACC, vf02, vf12
move.w vf21, vf08 | maddz.xyz vf20, vf03, vf12
lqi.xyzw vf05, vi03 | mulaw.xyzw ACC, vf04, vf00
lqi.xyzw vf25, vi03 | maddax.xyzw ACC, vf01, vf30
lqi.xyzw vf09, vi01 | madday.xyzw ACC, vf02, vf30 :e
nop | maddz.xyz vf21, vf03, vf30
move.xyzw vf16, vf21 | nop :e
nop | nop
ior vi01, vi13, vi00 | nop
lqi.xyzw vf09, vi01 | nop
ior vi03, vi11, vi00 | nop
lq.xyzw vf05, 1(vi03) | nop
iaddi vi03, vi03, 0x2 | nop
move.xyzw vf15, vf21 | mulax.xyzw ACC, vf01, vf09
move.xyzw vf20, vf22 | madday.xyzw ACC, vf02, vf09
lq.w vf13, -2(vi03) | maddz.xyz vf17, vf03, vf09
lqi.xyzw vf10, vi01 | mulaw.xyzw ACC, vf04, vf00
move.xyzw vf16, vf23 | maddax.xyzw ACC, vf01, vf05
lq.xyzw vf06, 1(vi03) | madday.xyzw ACC, vf02, vf05
iaddi vi03, vi03, 0x2 | maddz.xyz vf13, vf03, vf05
nop | mulax.xyzw ACC, vf01, vf10
nop | madday.xyzw ACC, vf02, vf10
lq.w vf14, -2(vi03) | maddz.xyz vf18, vf03, vf10
lqi.xyzw vf11, vi01 | mulaw.xyzw ACC, vf04, vf00
nop | maddax.xyzw ACC, vf01, vf06
lq.xyzw vf07, 1(vi03) | madday.xyzw ACC, vf02, vf06
iaddi vi03, vi03, 0x2 | maddz.xyz vf14, vf03, vf06
nop | mulax.xyzw ACC, vf01, vf11
nop | madday.xyzw ACC, vf02, vf11
lq.w vf21, -2(vi03) | maddz.xyz vf19, vf03, vf11
lqi.xyzw vf12, vi01 | mulaw.xyzw ACC, vf04, vf00
nop | maddax.xyzw ACC, vf01, vf07
lq.xyzw vf08, 1(vi03) | madday.xyzw ACC, vf02, vf07
iaddi vi03, vi03, 0x2 | maddz.xyz vf21, vf03, vf07
nop | mulax.xyzw ACC, vf01, vf12
nop | madday.xyzw ACC, vf02, vf12
lq.w vf23, -2(vi03) | maddz.xyz vf22, vf03, vf12
lqi.xyzw vf09, vi01 | mulaw.xyzw ACC, vf04, vf00
nop | maddax.xyzw ACC, vf01, vf08
lq.xyzw vf05, 1(vi03) | madday.xyzw ACC, vf02, vf08 :e
iaddi vi03, vi03, 0x2 | maddz.xyz vf23, vf03, vf08
move.xyzw vf15, vf21 | nop
move.xyzw vf20, vf22 | nop :e
move.xyzw vf16, vf23 | nop
@@ -0,0 +1,591 @@
.word 0x81f58b3c
.word 0x1e151bc
.word 0x81f6933c
.word 0x1e158bd
.word 0x81f79b3c
.word 0x1e1604a
.word 0x81f8a33c
.word 0x1e251bc
.word 0x80000030
.word 0x1f1293c
.word 0x80000030
.word 0x1f2313c
.word 0x80000030
.word 0x1f3393c
.word 0x80000030
.word 0x1f4413c
.word 0x80000030
.word 0x1e258bd
.word 0x80000030
.word 0x1e2608a
.word 0x80000030
.word 0x1e351bc
.word 0x80000030
.word 0x1e358bd
.word 0x80000030
.word 0x1e360ca
.word 0x80000030
.word 0x1e451bc
.word 0x80000030
.word 0x1e458bd
.word 0x80000030
.word 0x1e4610a
.word 0x80000030
.word 0x1e00850
.word 0x80000030
.word 0x1e01090
.word 0x80000030
.word 0x1e018d0
.word 0x80000030
.word 0x1e02110
.word 0x80000030
.word 0x1e069bf
.word 0x80000030
.word 0x1e170bc
.word 0x80000030
.word 0x1e178bd
.word 0x80000030
.word 0x1e1804a
.word 0x80000030
.word 0x1e069bf
.word 0x80000030
.word 0x1e270bc
.word 0x80000030
.word 0x1e278bd
.word 0x80000030
.word 0x1e2808a
.word 0x80000030
.word 0x1e069bf
.word 0x80000030
.word 0x1e370bc
.word 0x80000030
.word 0x1e378bd
.word 0x80000030
.word 0x1e380ca
.word 0x80000030
.word 0x1e069bf
.word 0x80000030
.word 0x1e470bc
.word 0x80000030
.word 0x1e478bd
.word 0x80000030
.word 0x1e4810a
.word 0x80000030
.word 0x1e18c6a
.word 0x80000030
.word 0x1e294aa
.word 0x80000030
.word 0x1e39cea
.word 0x80000030
.word 0x1e4a52a
.word 0x80000030
.word 0x1e98c54
.word 0x80000030
.word 0x1e99494
.word 0x80000030
.word 0x1e99cd4
.word 0x80000030
.word 0x1e9a514
.word 0x80000030
.word 0x1f1897c
.word 0x80000030
.word 0x1f2917c
.word 0x80000030
.word 0x41f3997c
.word 0x80000030
.word 0x1f4a17c
.word 0x80000030
.word 0x1ff4b58
.word 0x80000030
.word 0x40ad47
.word 0x80000030
.word 0x11def41
.word 0x80000030
.word 0x1de4218
.word 0x80000030
.word 0x19f2943
.word 0x80000030
.word 0x1cdafaa
.word 0x80000030
.word 0x11def42
.word 0x80000030
.word 0x1d04228
.word 0x81fcdb3c
.word 0x191297e
.word 0x81e2b33c
.word 0x11ef781
.word 0x805dfbbe
.word 0x1c0319c
.word 0x80000030
.word 0x1c8476a
.word 0x80000030
.word 0x1dca858
.word 0x80000030
.word 0x11ef782
.word 0x80000030
.word 0x1ff5398
.word 0x80000030
.word 0x401087
.word 0x80000030
.word 0x11def41
.word 0x80000030
.word 0x1de0858
.word 0x80000030
.word 0x19f3183
.word 0x80000030
.word 0x1ce17aa
.word 0x80000030
.word 0x11def42
.word 0x80000030
.word 0x1cd0868
.word 0x80000030
.word 0x192317e
.word 0x80000030
.word 0x11ef781
.word 0x805dfbbe
.word 0x1c039dc
.word 0x81e3bb3c
.word 0x1c10f6a
.word 0x80000030
.word 0x1dc1099
.word 0x80000030
.word 0x11ef782
.word 0x80000030
.word 0x1ff5bd8
.word 0x80000030
.word 0x4018c7
.word 0x80000030
.word 0x11def41
.word 0x80000030
.word 0x1de1098
.word 0x80000030
.word 0x19f39c3
.word 0x80000030
.word 0x1cf1faa
.word 0x80000030
.word 0x11def42
.word 0x80000030
.word 0x1ce10a8
.word 0x80000030
.word 0x193397e
.word 0x80000030
.word 0x11ef781
.word 0x805dfbbe
.word 0x1c0421c
.word 0x81e4c33c
.word 0x1c2176a
.word 0x80000030
.word 0x1dc18da
.word 0x80000030
.word 0x11ef782
.word 0x80000030
.word 0x1ff6418
.word 0x80000030
.word 0x402107
.word 0x80000030
.word 0x11def41
.word 0x80000030
.word 0x1de18d8
.word 0x80000030
.word 0x19f4203
.word 0x80000030
.word 0x1d027aa
.word 0x80000030
.word 0x11def42
.word 0x80000030
.word 0x1cf18e8
.word 0x80000030
.word 0x194417e
.word 0x80000030
.word 0x11ef781
.word 0x805dfbbe
.word 0x1c0095c
.word 0x81e6133c
.word 0x1c31f6a
.word 0x81e71b3c
.word 0x41dc221b
.word 0x80000030
.word 0x11ef782
.word 0x80020032
.word 0x2ff
.word 0x800810f0
.word 0x2ff
.word 0x10031810
.word 0x2ff
.word 0x80091870
.word 0x2ff
.word 0x80090870
.word 0x2ff
.word 0x10010810
.word 0x2ff
.word 0x800a0032
.word 0x2ff
.word 0x80001af5
.word 0x2ff
.word 0x80000b35
.word 0x400002ff
.word 0x80080b70
.word 0x2ff
.word 0x80000030
.word 0x1e9293e
.word 0x80000030
.word 0x1ea313e
.word 0x80000030
.word 0x1eb393e
.word 0x80000030
.word 0x1ec413e
.word 0x81e14b7d
.word 0x2ff
.word 0x81e1537d
.word 0x2ff
.word 0x81e15b7d
.word 0x400002ff
.word 0x81e1637d
.word 0x2ff
.word 0x80316b3d
.word 0x1c9093c
.word 0x8032733d
.word 0x1ca113c
.word 0x80337b3d
.word 0x1cb193c
.word 0x8034833d
.word 0x1cc213c
.word 0x80298b3c
.word 0x2ff
.word 0x802a933c
.word 0x2ff
.word 0x802b9b3c
.word 0x2ff
.word 0x802ca33c
.word 0x2ff
.word 0x81e24b7d
.word 0x2ff
.word 0x81e2537d
.word 0x2ff
.word 0x81e25b7d
.word 0x400002ff
.word 0x81e2637d
.word 0x2ff
.word 0x80316b3d
.word 0x1c9093c
.word 0x8032733d
.word 0x1ca113c
.word 0x80000030
.word 0x1cb193c
.word 0x80000030
.word 0x2ff
.word 0x80298b3c
.word 0x2ff
.word 0x802a933c
.word 0x2ff
.word 0x80000030
.word 0x2ff
.word 0x800318b2
.word 0x2ff
.word 0x81e24b7d
.word 0x2ff
.word 0x3e357fe
.word 0x400002ff
.word 0x3e35fff
.word 0x2ff
.word 0x80316b3d
.word 0x1c9093c
.word 0x8032733d
.word 0x1ca113c
.word 0x80337b3d
.word 0x1cb193c
.word 0x80000030
.word 0x1cc213c
.word 0x80298b3c
.word 0x2ff
.word 0x802a933c
.word 0x2ff
.word 0x802b9b3c
.word 0x2ff
.word 0x800318b2
.word 0x2ff
.word 0x81e24b7d
.word 0x2ff
.word 0x81e2537d
.word 0x2ff
.word 0x3e35ffe
.word 0x400002ff
.word 0x3e367ff
.word 0x2ff
.word 0x80316b3d
.word 0x1c9093c
.word 0x8032733d
.word 0x1ca113c
.word 0x80337b3d
.word 0x1cb193c
.word 0x80000030
.word 0x2ff
.word 0x80298b3c
.word 0x2ff
.word 0x802a933c
.word 0x2ff
.word 0x802b9b3c
.word 0x2ff
.word 0x80000030
.word 0x2ff
.word 0x81e24b7d
.word 0x2ff
.word 0x81e2537d
.word 0x400002ff
.word 0x81e25b7d
.word 0x2ff
.word 0x80316b3d
.word 0x1c9093c
.word 0x8033733d
.word 0x1ca113c
.word 0x80000030
.word 0x1cb193c
.word 0x80031932
.word 0x1cc213c
.word 0x80298b3c
.word 0x2ff
.word 0x802b9b3c
.word 0x2ff
.word 0x3c357fd
.word 0x2ff
.word 0x3c367ff
.word 0x2ff
.word 0x3e34ffc
.word 0x400002ff
.word 0x3e35ffe
.word 0x2ff
.word 0x800050b5
.word 0x2ff
.word 0x80006075
.word 0x2ff
.word 0x81e5137c
.word 0x2ff
.word 0x80000030
.word 0x2ff
.word 0x80000030
.word 0x2ff
.word 0x81e90b7c
.word 0x1e021bf
.word 0x81f3ab3c
.word 0x1e508bc
.word 0x81f0b33c
.word 0x1e510bd
.word 0x81f4bb3c
.word 0x1c51b4a
.word 0x81e6137c
.word 0x1e909bc
.word 0x81efc33c
.word 0x1e910bd
.word 0x80000030
.word 0x1e91c4a
.word 0x81ea0b7c
.word 0x1e021bf
.word 0x802d2b3c
.word 0x1e608bc
.word 0x80000030
.word 0x1e610bd
.word 0x80000030
.word 0x1c61b8a
.word 0x81e7137c
.word 0x1ea09bc
.word 0x80000030
.word 0x1ea10bd
.word 0x80000030
.word 0x1ea1c8a
.word 0x81eb0b7c
.word 0x1e021bf
.word 0x802e333c
.word 0x1e708bc
.word 0x80000030
.word 0x1e710bd
.word 0x80000030
.word 0x1c71e0a
.word 0x81e8137c
.word 0x1eb09bc
.word 0x80000030
.word 0x1eb10bd
.word 0x80000030
.word 0x1eb1d4a
.word 0x81ec0b7c
.word 0x1e021bf
.word 0x80383b3c
.word 0x1e808bc
.word 0x80000030
.word 0x1e810bd
.word 0x80000030
.word 0x1c81d8a
.word 0x81e5137c
.word 0x1ec09bc
.word 0x8036433c
.word 0x41ec10bd
.word 0x80000030
.word 0x1ec1dca
.word 0x81f3ab3c
.word 0x2ff
.word 0x81f0b33c
.word 0x2ff
.word 0x81f4bb3c
.word 0x400002ff
.word 0x81efc33c
.word 0x2ff
.word 0x800058f5
.word 0x2ff
.word 0x80006875
.word 0x2ff
.word 0x81e51b7c
.word 0x2ff
.word 0x81f91b7c
.word 0x2ff
.word 0x81e90b7c
.word 0x2ff
.word 0x80000030
.word 0x2ff
.word 0x81f0ab3c
.word 0x1dd29bc
.word 0x80000030
.word 0x1c0cf8b
.word 0x80000030
.word 0x1e909bc
.word 0x80000030
.word 0x1e910bd
.word 0x802d2b3c
.word 0x1c91c4a
.word 0x81e61b7c
.word 0x1e021bf
.word 0x81fa1b7c
.word 0x1fe08bc
.word 0x81ea0b7c
.word 0x1fe10bd
.word 0x80000030
.word 0x1de1b4a
.word 0x80000030
.word 0x1dd31bc
.word 0x80000030
.word 0x1c0d78b
.word 0x80000030
.word 0x1ea09bc
.word 0x80000030
.word 0x1ea10bd
.word 0x802e333c
.word 0x1ca1c8a
.word 0x81e71b7c
.word 0x1e021bf
.word 0x81fb1b7c
.word 0x1fe08bc
.word 0x81eb0b7c
.word 0x1fe10bd
.word 0x80000030
.word 0x1de1b8a
.word 0x80000030
.word 0x1dd39bc
.word 0x80000030
.word 0x1c0df8b
.word 0x80000030
.word 0x1eb09bc
.word 0x80000030
.word 0x1eb10bd
.word 0x802f3b3c
.word 0x1cb1cca
.word 0x81e81b7c
.word 0x1e021bf
.word 0x81fc1b7c
.word 0x1fe08bc
.word 0x81ec0b7c
.word 0x1fe10bd
.word 0x80000030
.word 0x1de1bca
.word 0x80000030
.word 0x1dd41bc
.word 0x80000030
.word 0x1c0e78b
.word 0x80000030
.word 0x1ec09bc
.word 0x80000030
.word 0x1ec10bd
.word 0x8035433c
.word 0x1cc1d0a
.word 0x81e51b7c
.word 0x1e021bf
.word 0x81f91b7c
.word 0x1fe08bc
.word 0x81e90b7c
.word 0x41fe10bd
.word 0x80000030
.word 0x1de1d4a
.word 0x81f0ab3c
.word 0x400002ff
.word 0x80000030
.word 0x2ff
.word 0x80006875
.word 0x2ff
.word 0x81e90b7c
.word 0x2ff
.word 0x800058f5
.word 0x2ff
.word 0x1e51801
.word 0x2ff
.word 0x800318b2
.word 0x2ff
.word 0x81efab3c
.word 0x1e909bc
.word 0x81f4b33c
.word 0x1e910bd
.word 0x2d1ffe
.word 0x1c91c4a
.word 0x81ea0b7c
.word 0x1e021bf
.word 0x81f0bb3c
.word 0x1e508bc
.word 0x1e61801
.word 0x1e510bd
.word 0x800318b2
.word 0x1c51b4a
.word 0x80000030
.word 0x1ea09bc
.word 0x80000030
.word 0x1ea10bd
.word 0x2e1ffe
.word 0x1ca1c8a
.word 0x81eb0b7c
.word 0x1e021bf
.word 0x80000030
.word 0x1e608bc
.word 0x1e71801
.word 0x1e610bd
.word 0x800318b2
.word 0x1c61b8a
.word 0x80000030
.word 0x1eb09bc
.word 0x80000030
.word 0x1eb10bd
.word 0x351ffe
.word 0x1cb1cca
.word 0x81ec0b7c
.word 0x1e021bf
.word 0x80000030
.word 0x1e708bc
.word 0x1e81801
.word 0x1e710bd
.word 0x800318b2
.word 0x1c71d4a
.word 0x80000030
.word 0x1ec09bc
.word 0x80000030
.word 0x1ec10bd
.word 0x371ffe
.word 0x1cc1d8a
.word 0x81e90b7c
.word 0x1e021bf
.word 0x80000030
.word 0x1e808bc
.word 0x1e51801
.word 0x41e810bd
.word 0x800318b2
.word 0x1c81dca
.word 0x81efab3c
.word 0x2ff
.word 0x81f4b33c
.word 0x400002ff
.word 0x81f0bb3c
.word 0x2ff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,201 @@
0.003921569 | maxw.x vf17, vf00, vf00 :i
-65537.0 | maxi.y vf17, vf00, I :i
iaddiu vi10, vi10, 0x88 | minii.z vf05, vf00, I
iaddiu vi08, vi00, 0x8c | minii.z vf06, vf00, I
sqi.xyzw vf01, vi08 | minii.z vf07, vf00, I
sqi.xyzw vf02, vi08 | minix.w vf05, vf00, vf27
sqi.xyzw vf03, vi08 | miniy.w vf06, vf00, vf27
sqi.xyzw vf04, vi08 | miniz.w vf07, vf00, vf27
ibne vi00, vi13, L1 | nop
iaddiu vi05, vi00, 0x182 | nop
iaddiu vi05, vi00, 0x1ab | nop
L1:
ibne vi00, vi12, L2 | nop
iaddiu vi03, vi00, 0x146 | nop
ior vi03, vi05, vi00 | nop
L2:
ibne vi00, vi11, L3 | nop
iaddiu vi01, vi00, 0x13a | nop
ior vi01, vi03, vi00 | nop
L3:
lqi.xyzw vf29, vi10 | nop
iadd vi02, vi08, vi11 | nop
iadd vi04, vi02, vi12 | nop
iadd vi06, vi04, vi13 | nop
mtir vi13, vf29.w | itof0.xyzw vf18, vf29 :e
iaddiu vi09, vi00, 0x7f | nop
sq.xyzw vf23, 3(vi14) | mulx.xyzw vf11, vf20, vf19
sq.xyzw vf24, 4(vi14) | mulx.xyzw vf12, vf21, vf19
sq.xyzw vf25, 5(vi14) | mulx.xyzw vf13, vf22, vf19
sq.xyzw vf26, 6(vi14) | nop
sq.xyzw vf11, 0(vi14) | nop
sq.xyzw vf12, 1(vi14) | nop
sq.xyzw vf13, 2(vi14) | nop :e
nop | nop
mtir vi11, vf01.x | maddz.xyzw vf11, vf26, vf10
jr vi01 | mul.xyzw vf14, vf13, Q
sqi.xyzw vf04, vi08 | mulaw.xyzw ACC, vf20, vf08
rsqrt Q, vf00.w, vf16.x | maddaw.xyzw ACC, vf21, vf09
lq.xyzw vf24, -124(vi11) | maddaw.xyzw ACC, vf22, vf10
lq.xyzw vf25, -123(vi11) | maddw.xyzw vf15, vf23, vf00
lq.xyzw vf26, -122(vi11) | mul.xyzw vf16, vf11, vf11
lq.xyzw vf20, -128(vi11) | add.xyzw vf08, vf01, vf05
lq.xyzw vf21, -127(vi11) | add.xyzw vf09, vf02, vf06
lq.xyzw vf22, -126(vi11) | add.xyzw vf10, vf03, vf07
ibne vi08, vi02, L4 | adday.xyzw vf16, vf16
lq.xyzw vf23, -125(vi11) | maddz.xyzw vf16, vf17, vf16
ior vi01, vi03, vi00 | nop
L4:
move.xyzw vf13, vf12 | mulaz.xyzw ACC, vf24, vf08 :e
move.xyzw vf12, vf11 | maddaz.xyzw ACC, vf25, vf09
rsqrt Q, vf00.w, vf16.x | maddaw.xyzw ACC, vf21, vf09
mtir vi12, vf01.y | maddaw.xyzw ACC, vf22, vf10
iand vi11, vi11, vi09 | maddw.xyzw vf15, vf23, vf00
lq.xyzw vf19, 4(vi11) | mul.xyzw vf16, vf11, vf11
ibeq vi09, vi11, L7 | add.xyzw vf08, vf01, vf05
iand vi12, vi12, vi09 | add.xyzw vf09, vf02, vf06
nop | muly.xyzw vf18, vf18, vf17
lq.xyzw vf24, 4(vi12) | add.xyzw vf10, vf03, vf07
lq.xyzw vf27, 5(vi11) | adday.xyzw vf16, vf16
lq.xyzw vf25, 5(vi12) | maddz.xyzw vf16, vf17, vf16
lq.xyzw vf28, 6(vi11) | mulax.xyzw ACC, vf19, vf18
lq.xyzw vf26, 6(vi12) | maddy.xyzw vf24, vf24, vf18
lq.xyzw vf29, 0(vi11) | mulax.xyzw ACC, vf27, vf18
lq.xyzw vf20, 0(vi12) | maddy.xyzw vf25, vf25, vf18
lq.xyzw vf19, 1(vi11) | mulax.xyzw ACC, vf28, vf18
lq.xyzw vf21, 1(vi12) | maddy.xyzw vf26, vf26, vf18
lq.xyzw vf27, 2(vi11) | mulax.xyzw ACC, vf29, vf18
lq.xyzw vf22, 2(vi12) | maddy.xyzw vf20, vf20, vf18
lq.xyzw vf28, 3(vi11) | mulax.xyzw ACC, vf19, vf18
lq.xyzw vf23, 3(vi12) | maddy.xyzw vf21, vf21, vf18
nop | mulax.xyzw ACC, vf27, vf18
iaddiu vi01, vi00, 0x161 | maddy.xyzw vf22, vf22, vf18
ibne vi08, vi04, L5 | mulax.xyzw ACC, vf28, vf18
nop | maddy.xyzw vf23, vf23, vf18
ior vi01, vi05, vi00 | nop
L5:
move.xyzw vf13, vf12 | mulaz.xyzw ACC, vf24, vf08 :e
move.xyzw vf12, vf11 | maddaz.xyzw ACC, vf25, vf09
rsqrt Q, vf00.w, vf16.x | maddaw.xyzw ACC, vf21, vf09
mtir vi12, vf01.y | maddaw.xyzw ACC, vf22, vf10
iand vi11, vi11, vi09 | maddw.xyzw vf15, vf23, vf00
lq.xyzw vf19, 4(vi11) | mul.xyzw vf16, vf11, vf11
ibeq vi09, vi11, L7 | add.xyzw vf08, vf01, vf05
iand vi12, vi12, vi09 | add.xyzw vf09, vf02, vf06
lq.xyzw vf24, 4(vi12) | add.xyzw vf10, vf03, vf07
lq.xyzw vf27, 5(vi11) | adday.xyzw vf16, vf16
lq.xyzw vf25, 5(vi12) | maddz.xyzw vf16, vf17, vf16
lq.xyzw vf28, 6(vi11) | mulaz.xyzw ACC, vf19, vf18
lq.xyzw vf26, 6(vi12) | maddw.xyzw vf24, vf24, vf18
lq.xyzw vf29, 0(vi11) | mulaz.xyzw ACC, vf27, vf18
lq.xyzw vf20, 0(vi12) | maddw.xyzw vf25, vf25, vf18
lq.xyzw vf19, 1(vi11) | mulaz.xyzw ACC, vf28, vf18
lq.xyzw vf21, 1(vi12) | maddw.xyzw vf26, vf26, vf18
lq.xyzw vf27, 2(vi11) | mulaz.xyzw ACC, vf29, vf18
lq.xyzw vf22, 2(vi12) | maddw.xyzw vf20, vf20, vf18
lq.xyzw vf28, 3(vi11) | mulaz.xyzw ACC, vf19, vf18
lq.xyzw vf23, 3(vi12) | maddw.xyzw vf21, vf21, vf18
lqi.xyzw vf29, vi10 | mulaz.xyzw ACC, vf27, vf18
iaddiu vi01, vi00, 0x146 | maddw.xyzw vf22, vf22, vf18
ibne vi08, vi04, L6 | mulaz.xyzw ACC, vf28, vf18
nop | maddw.xyzw vf23, vf23, vf18
ior vi01, vi05, vi00 | nop
L6:
mtir vi13, vf29.w | itof0.xyzw vf18, vf29
move.xyzw vf13, vf12 | mulaz.xyzw ACC, vf24, vf08 :e
move.xyzw vf12, vf11 | maddaz.xyzw ACC, vf25, vf09
L7:
nop | add.xyzw vf10, vf03, vf07
ibne vi08, vi04, L8 | adday.xyzw vf16, vf16
nop | maddz.xyzw vf16, vf17, vf16
ior vi01, vi05, vi00 | nop
L8:
move.xyzw vf13, vf12 | mulaz.xyzw ACC, vf24, vf08 :e
move.xyzw vf12, vf11 | maddaz.xyzw ACC, vf25, vf09
rsqrt Q, vf00.w, vf16.x | maddaw.xyzw ACC, vf21, vf09
mtir vi12, vf01.y | maddaw.xyzw ACC, vf22, vf10
iand vi11, vi11, vi09 | maddw.xyzw vf15, vf23, vf00
lq.xyzw vf19, 4(vi11) | mul.xyzw vf16, vf11, vf11
ibeq vi09, vi11, L10 | add.xyzw vf08, vf01, vf05
iand vi12, vi12, vi09 | add.xyzw vf09, vf02, vf06
nop | muly.xyzw vf18, vf18, vf17
lq.xyzw vf27, 4(vi12) | add.xyzw vf10, vf03, vf07
lq.xyzw vf24, 4(vi13) | adday.xyzw vf16, vf16
lq.xyzw vf28, 5(vi11) | maddz.xyzw vf16, vf17, vf16
lq.xyzw vf19, 5(vi12) | mulax.xyzw ACC, vf19, vf18
lq.xyzw vf25, 5(vi13) | madday.xyzw ACC, vf27, vf18
lq.xyzw vf27, 6(vi11) | maddz.xyzw vf24, vf24, vf18
lq.xyzw vf28, 6(vi12) | mulax.xyzw ACC, vf28, vf18
lq.xyzw vf26, 6(vi13) | madday.xyzw ACC, vf19, vf18
lq.xyzw vf19, 0(vi11) | maddz.xyzw vf25, vf25, vf18
lq.xyzw vf27, 0(vi12) | mulax.xyzw ACC, vf27, vf18
lq.xyzw vf20, 0(vi13) | madday.xyzw ACC, vf28, vf18
lq.xyzw vf28, 1(vi11) | maddz.xyzw vf26, vf26, vf18
lq.xyzw vf19, 1(vi12) | mulax.xyzw ACC, vf19, vf18
lq.xyzw vf21, 1(vi13) | madday.xyzw ACC, vf27, vf18
lq.xyzw vf27, 2(vi11) | maddz.xyzw vf20, vf20, vf18
lq.xyzw vf28, 2(vi12) | mulax.xyzw ACC, vf28, vf18
lq.xyzw vf22, 2(vi13) | madday.xyzw ACC, vf19, vf18
lq.xyzw vf19, 3(vi11) | maddz.xyzw vf21, vf21, vf18
lq.xyzw vf27, 3(vi12) | mulax.xyzw ACC, vf27, vf18
lq.xyzw vf23, 3(vi13) | madday.xyzw ACC, vf28, vf18
lqi.xyzw vf29, vi10 | maddz.xyzw vf22, vf22, vf18
ibne vi08, vi06, L9 | mulax.xyzw ACC, vf19, vf18
nop | madday.xyzw ACC, vf27, vf18
iaddiu vi01, vi00, 0x1ab | nop
L9:
nop | maddz.xyzw vf23, vf23, vf18
mtir vi13, vf29.w | itof0.xyz vf18, vf29
move.xyzw vf13, vf12 | mulaz.xyzw ACC, vf24, vf08 :e
move.xyzw vf12, vf11 | maddaz.xyzw ACC, vf25, vf09
L10:
nop | add.xyzw vf10, vf03, vf07
ibne vi08, vi06, L11 | adday.xyzw vf16, vf16
nop | maddz.xyzw vf16, vf17, vf16
iaddiu vi01, vi00, 0x1ab | nop
L11:
move.xyzw vf13, vf12 | mulaz.xyzw ACC, vf24, vf08 :e
move.xyzw vf12, vf11 | maddaz.xyzw ACC, vf25, vf09
rsqrt Q, vf00.w, vf16.x | maddaw.xyzw ACC, vf21, vf09
nop | maddaw.xyzw ACC, vf22, vf10
nop | maddw.xyzw vf15, vf23, vf00
nop | mul.xyzw vf16, vf11, vf11
nop | add.xyzw vf08, vf01, vf05
nop | add.xyzw vf09, vf02, vf06
nop | add.xyzw vf10, vf03, vf07
nop | adday.xyzw vf16, vf16
nop | maddz.xyzw vf16, vf17, vf16
move.xyzw vf13, vf12 | mulaz.xyzw ACC, vf24, vf08 :e
move.xyzw vf12, vf11 | maddaz.xyzw ACC, vf25, vf09
nop | mulaz.xyzw ACC, vf09, vf01
nop | maddax.xyzw ACC, vf10, vf01
nop | maddy.xyzw vf01, vf11, vf01
nop | mulaz.xyzw ACC, vf09, vf02
nop | maddax.xyzw ACC, vf10, vf02
nop | maddy.xyzw vf02, vf11, vf02
fmand vi01, vi09 | mulaz.xyzw ACC, vf09, vf03
nop | maddax.xyzw ACC, vf10, vf03
nop | maddy.xyzw vf03, vf11, vf03
fmand vi02, vi09 | mulaz.xyzw ACC, vf09, vf04
nop | maddax.xyzw ACC, vf10, vf04
nop | maddy.xyzw vf04, vf11, vf04
fmand vi03, vi09 | nop
nop | nop
nop | nop :e
fmand vi04, vi09 | nop
nop | mulaz.xyzw ACC, vf09, vf05
nop | maddax.xyzw ACC, vf10, vf05
nop | maddy.xyzw vf05, vf11, vf05
nop | mulaz.xyzw ACC, vf09, vf06
nop | maddax.xyzw ACC, vf10, vf06
nop | maddy.xyzw vf06, vf11, vf06
fmand vi05, vi09 | mulaz.xyzw ACC, vf09, vf07
nop | maddax.xyzw ACC, vf10, vf07
nop | maddy.xyzw vf07, vf11, vf07
fmand vi06, vi09 | mulaz.xyzw ACC, vf09, vf08
nop | maddax.xyzw ACC, vf10, vf08
nop | maddy.xyzw vf08, vf11, vf08
fmand vi07, vi09 | nop
nop | nop
nop | nop :e
fmand vi08, vi09 | nop
@@ -0,0 +1,380 @@
.word 0x3b808081
.word 0x81000453
.word 0xc7800080
.word 0x8080045d
.word 0x100a5088
.word 0x40015f
.word 0x1008008c
.word 0x40019f
.word 0x81e80b7d
.word 0x4001df
.word 0x81e8137d
.word 0x3b0154
.word 0x81e81b7d
.word 0x3b0195
.word 0x81e8237d
.word 0x3b01d6
.word 0x52006802
.word 0x2ff
.word 0x10050182
.word 0x2ff
.word 0x100501ab
.word 0x2ff
.word 0x52006002
.word 0x2ff
.word 0x10030146
.word 0x2ff
.word 0x800028f5
.word 0x2ff
.word 0x52005802
.word 0x2ff
.word 0x1001013a
.word 0x2ff
.word 0x80001875
.word 0x2ff
.word 0x81fd537c
.word 0x2ff
.word 0x800b40b0
.word 0x2ff
.word 0x800c1130
.word 0x2ff
.word 0x800d21b0
.word 0x2ff
.word 0x806debfc
.word 0x41f2e93c
.word 0x1009007f
.word 0x2ff
.word 0x3eeb803
.word 0x1f3a2d8
.word 0x3eec004
.word 0x1f3ab18
.word 0x3eec805
.word 0x1f3b358
.word 0x3eed006
.word 0x2ff
.word 0x3ee5800
.word 0x2ff
.word 0x3ee6001
.word 0x2ff
.word 0x3ee6802
.word 0x400002ff
.word 0x80000030
.word 0x2ff
.word 0x800b0bfc
.word 0x1ead2ca
.word 0x48000800
.word 0x1e06b9c
.word 0x81e8237d
.word 0x1e8a1bf
.word 0x807003be
.word 0x1e9a8bf
.word 0x1f85f84
.word 0x1eab0bf
.word 0x1f95f85
.word 0x1e0bbcb
.word 0x1fa5f86
.word 0x1eb5c2a
.word 0x1f45f80
.word 0x1e50a28
.word 0x1f55f81
.word 0x1e61268
.word 0x1f65f82
.word 0x1e71aa8
.word 0x52081002
.word 0x1f0803d
.word 0x1f75f83
.word 0x1f08c0a
.word 0x80001875
.word 0x2ff
.word 0x81ed633c
.word 0x41e8c1be
.word 0x81ec5b3c
.word 0x1e9c8be
.word 0x807003be
.word 0x1e9a8bf
.word 0x802c0bfc
.word 0x1eab0bf
.word 0x80095af4
.word 0x1e0bbcb
.word 0x1f35804
.word 0x1eb5c2a
.word 0x50095831
.word 0x1e50a28
.word 0x80096334
.word 0x1e61268
.word 0x80000030
.word 0x1f19499
.word 0x1f86004
.word 0x1e71aa8
.word 0x1fb5805
.word 0x1f0803d
.word 0x1f96005
.word 0x1f08c0a
.word 0x1fc5806
.word 0x1f299bc
.word 0x1fa6006
.word 0x1f2c609
.word 0x1fd5800
.word 0x1f2d9bc
.word 0x1f46000
.word 0x1f2ce49
.word 0x1f35801
.word 0x1f2e1bc
.word 0x1f56001
.word 0x1f2d689
.word 0x1fb5802
.word 0x1f2e9bc
.word 0x1f66002
.word 0x1f2a509
.word 0x1fc5803
.word 0x1f299bc
.word 0x1f76003
.word 0x1f2ad49
.word 0x80000030
.word 0x1f2d9bc
.word 0x10010161
.word 0x1f2b589
.word 0x52082002
.word 0x1f2e1bc
.word 0x80000030
.word 0x1f2bdc9
.word 0x80002875
.word 0x2ff
.word 0x81ed633c
.word 0x41e8c1be
.word 0x81ec5b3c
.word 0x1e9c8be
.word 0x807003be
.word 0x1e9a8bf
.word 0x802c0bfc
.word 0x1eab0bf
.word 0x80095af4
.word 0x1e0bbcb
.word 0x1f35804
.word 0x1eb5c2a
.word 0x50095816
.word 0x1e50a28
.word 0x80096334
.word 0x1e61268
.word 0x1f86004
.word 0x1e71aa8
.word 0x1fb5805
.word 0x1f0803d
.word 0x1f96005
.word 0x1f08c0a
.word 0x1fc5806
.word 0x1f299be
.word 0x1fa6006
.word 0x1f2c60b
.word 0x1fd5800
.word 0x1f2d9be
.word 0x1f46000
.word 0x1f2ce4b
.word 0x1f35801
.word 0x1f2e1be
.word 0x1f56001
.word 0x1f2d68b
.word 0x1fb5802
.word 0x1f2e9be
.word 0x1f66002
.word 0x1f2a50b
.word 0x1fc5803
.word 0x1f299be
.word 0x1f76003
.word 0x1f2ad4b
.word 0x81fd537c
.word 0x1f2d9be
.word 0x10010146
.word 0x1f2b58b
.word 0x52082002
.word 0x1f2e1be
.word 0x80000030
.word 0x1f2bdcb
.word 0x80002875
.word 0x2ff
.word 0x806debfc
.word 0x1f2e93c
.word 0x81ed633c
.word 0x41e8c1be
.word 0x81ec5b3c
.word 0x1e9c8be
.word 0x80000030
.word 0x1e71aa8
.word 0x52082002
.word 0x1f0803d
.word 0x80000030
.word 0x1f08c0a
.word 0x80002875
.word 0x2ff
.word 0x81ed633c
.word 0x41e8c1be
.word 0x81ec5b3c
.word 0x1e9c8be
.word 0x807003be
.word 0x1e9a8bf
.word 0x802c0bfc
.word 0x1eab0bf
.word 0x80095af4
.word 0x1e0bbcb
.word 0x1f35804
.word 0x1eb5c2a
.word 0x5009581e
.word 0x1e50a28
.word 0x80096334
.word 0x1e61268
.word 0x80000030
.word 0x1f19499
.word 0x1fb6004
.word 0x1e71aa8
.word 0x1f86804
.word 0x1f0803d
.word 0x1fc5805
.word 0x1f08c0a
.word 0x1f36005
.word 0x1f299bc
.word 0x1f96805
.word 0x1f2d8bd
.word 0x1fb5806
.word 0x1f2c60a
.word 0x1fc6006
.word 0x1f2e1bc
.word 0x1fa6806
.word 0x1f298bd
.word 0x1f35800
.word 0x1f2ce4a
.word 0x1fb6000
.word 0x1f2d9bc
.word 0x1f46800
.word 0x1f2e0bd
.word 0x1fc5801
.word 0x1f2d68a
.word 0x1f36001
.word 0x1f299bc
.word 0x1f56801
.word 0x1f2d8bd
.word 0x1fb5802
.word 0x1f2a50a
.word 0x1fc6002
.word 0x1f2e1bc
.word 0x1f66802
.word 0x1f298bd
.word 0x1f35803
.word 0x1f2ad4a
.word 0x1fb6003
.word 0x1f2d9bc
.word 0x1f76803
.word 0x1f2e0bd
.word 0x81fd537c
.word 0x1f2b58a
.word 0x52083002
.word 0x1f299bc
.word 0x80000030
.word 0x1f2d8bd
.word 0x100101ab
.word 0x2ff
.word 0x80000030
.word 0x1f2bdca
.word 0x806debfc
.word 0x1d2e93c
.word 0x81ed633c
.word 0x41e8c1be
.word 0x81ec5b3c
.word 0x1e9c8be
.word 0x80000030
.word 0x1e71aa8
.word 0x52083002
.word 0x1f0803d
.word 0x80000030
.word 0x1f08c0a
.word 0x100101ab
.word 0x2ff
.word 0x81ed633c
.word 0x41e8c1be
.word 0x81ec5b3c
.word 0x1e9c8be
.word 0x807003be
.word 0x1e9a8bf
.word 0x80000030
.word 0x1eab0bf
.word 0x80000030
.word 0x1e0bbcb
.word 0x80000030
.word 0x1eb5c2a
.word 0x80000030
.word 0x1e50a28
.word 0x80000030
.word 0x1e61268
.word 0x80000030
.word 0x1e71aa8
.word 0x80000030
.word 0x1f0803d
.word 0x80000030
.word 0x1f08c0a
.word 0x81ed633c
.word 0x41e8c1be
.word 0x81ec5b3c
.word 0x1e9c8be
.word 0x80000030
.word 0x1e149be
.word 0x80000030
.word 0x1e150bc
.word 0x80000030
.word 0x1e15849
.word 0x80000030
.word 0x1e249be
.word 0x80000030
.word 0x1e250bc
.word 0x80000030
.word 0x1e25889
.word 0x34014800
.word 0x1e349be
.word 0x80000030
.word 0x1e350bc
.word 0x80000030
.word 0x1e358c9
.word 0x34024800
.word 0x1e449be
.word 0x80000030
.word 0x1e450bc
.word 0x80000030
.word 0x1e45909
.word 0x34034800
.word 0x2ff
.word 0x80000030
.word 0x2ff
.word 0x80000030
.word 0x400002ff
.word 0x34044800
.word 0x2ff
.word 0x80000030
.word 0x1e549be
.word 0x80000030
.word 0x1e550bc
.word 0x80000030
.word 0x1e55949
.word 0x80000030
.word 0x1e649be
.word 0x80000030
.word 0x1e650bc
.word 0x80000030
.word 0x1e65989
.word 0x34054800
.word 0x1e749be
.word 0x80000030
.word 0x1e750bc
.word 0x80000030
.word 0x1e759c9
.word 0x34064800
.word 0x1e849be
.word 0x80000030
.word 0x1e850bc
.word 0x80000030
.word 0x1e85a09
.word 0x34074800
.word 0x2ff
.word 0x80000030
.word 0x2ff
.word 0x80000030
.word 0x400002ff
.word 0x34084800
.word 0x2ff
@@ -0,0 +1,152 @@
b L1 | nop
nop | nop
b L2 | nop
nop | nop
nop | nop :e
nop | nop
L1:
lq.xyzw vf14, 988(vi00) | maxw.xyzw vf01, vf00, vf00
lq.xyzw vf02, 989(vi00) | nop
lq.xyzw vf03, 986(vi00) | nop
lq.xyzw vf04, 987(vi00) | nop
lq.xyzw vf05, 985(vi00) | nop
lq.xyzw vf06, 991(vi00) | nop
lq.xyzw vf07, 990(vi00) | nop
iaddiu vi11, vi00, 0x80 | nop
mtir vi08, vf03.x | nop
mtir vi09, vf03.x | nop
mr32.xyzw vf03, vf03 | nop
xtop vi05 | nop
mtir vi06, vf04.x | nop
bal vi12, L3 | nop
mr32.xyzw vf04, vf04 | nop
mtir vi06, vf04.x | nop
bal vi12, L3 | nop
mr32.xyzw vf04, vf04 | nop
mtir vi03, vf04.x | nop
bal vi12, L5 | nop
mtir vi04, vf04.y | nop
mtir vi06, vf04.x | nop
bal vi12, L3 | nop
mr32.xyzw vf04, vf04 | nop
mtir vi03, vf04.x | nop
bal vi12, L5 | nop
mtir vi04, vf04.y | nop
nop | nop :e
nop | nop
L2:
xtop vi05 | nop
mtir vi06, vf04.x | nop
bal vi12, L3 | nop
mr32.xyzw vf04, vf04 | nop
mtir vi03, vf04.x | nop
bal vi12, L5 | nop
mtir vi04, vf04.y | nop
mtir vi06, vf04.x | nop
bal vi12, L3 | nop
mr32.xyzw vf04, vf04 | nop
mtir vi03, vf04.x | nop
bal vi12, L5 | nop
mtir vi04, vf04.y | nop
mtir vi06, vf04.x | nop
bal vi12, L3 | nop
mr32.xyzw vf04, vf04 | nop
mtir vi03, vf04.x | nop
bal vi12, L5 | nop
mtir vi04, vf04.y | nop
nop | nop :e
nop | nop
L3:
ior vi07, vi06, vi00 | nop
move.xyzw vf15, vf14 | nop
iaddi vi01, vi00, 0x8 | nop
lq.xyzw vf24, 1(vi05) | mulw.xyzw vf20, vf15, vf00
lq.xyzw vf25, 3(vi05) | mulw.xyzw vf21, vf15, vf00
lq.xyzw vf26, 5(vi05) | mulw.xyzw vf22, vf15, vf00
nop | mulw.xyzw vf23, vf15, vf00
nop | mulax.xyzw ACC, vf24, vf06
nop | madday.xyzw ACC, vf25, vf06
nop | maddz.xyzw vf27, vf26, vf06
nop | addx.x vf21, vf21, vf02
nop | addy.x vf22, vf22, vf02
L4:
nop | addz.x vf23, vf23, vf02
nop | addw.x vf15, vf15, vf02
sq.xyzw vf20, 2(vi06) | mulx.x vf28, vf01, vf24
sq.xyzw vf21, 5(vi06) | muly.x vf29, vf01, vf24
sq.xyzw vf22, 8(vi06) | mulz.x vf30, vf01, vf24
sq.xyzw vf23, 11(vi06) | mulw.x vf31, vf01, vf24
lq.xyzw vf16, 0(vi05) | mulx.y vf28, vf01, vf25
lq.xyzw vf17, 2(vi05) | muly.y vf29, vf01, vf25
lq.xyzw vf18, 4(vi05) | mulz.y vf30, vf01, vf25
lq.xyzw vf19, 6(vi05) | mulw.y vf31, vf01, vf25
iaddi vi05, vi05, 0x8 | mulx.xy vf28, vf28, vf27
nop | muly.xy vf29, vf29, vf27
nop | mulz.xy vf30, vf30, vf27
nop | mulw.xy vf31, vf31, vf27
nop | mulw.xy vf28, vf28, vf16
nop | mulw.xy vf29, vf29, vf17
nop | mulw.xy vf30, vf30, vf18
nop | mulw.xy vf31, vf31, vf19
nop | ftoi0.xyzw vf16, vf16
nop | ftoi0.xyzw vf17, vf17
nop | ftoi0.xyzw vf18, vf18
iaddi vi01, vi01, -0x1 | ftoi0.xyzw vf19, vf19
mfir.w vf16, vi11 | add.xyzw vf28, vf28, vf06
mfir.w vf17, vi11 | add.xyzw vf29, vf29, vf06
mfir.w vf18, vi11 | add.xyzw vf30, vf30, vf06
mfir.w vf19, vi11 | add.xyzw vf31, vf31, vf06
nop | mulx.xyzw vf28, vf28, vf07
nop | mulx.xyzw vf29, vf29, vf07
nop | mulx.xyzw vf30, vf30, vf07
nop | mulx.xyzw vf31, vf31, vf07
nop | addy.xyzw vf28, vf28, vf07
nop | addy.xyzw vf29, vf29, vf07
nop | addy.xyzw vf30, vf30, vf07
nop | addy.xyzw vf31, vf31, vf07
sq.xyzw vf16, 1(vi06) | sub.zw vf28, vf01, vf00
sq.xyzw vf17, 4(vi06) | sub.zw vf29, vf01, vf00
sq.xyzw vf18, 7(vi06) | sub.zw vf30, vf01, vf00
sq.xyzw vf19, 10(vi06) | sub.zw vf31, vf01, vf00
lq.xyzw vf24, 1(vi05) | mulw.xyzw vf20, vf15, vf00
lq.xyzw vf25, 3(vi05) | mulw.xyzw vf21, vf15, vf00
lq.xyzw vf26, 5(vi05) | mulw.xyzw vf22, vf15, vf00
sq.xyzw vf28, 0(vi06) | mulw.xyzw vf23, vf15, vf00
sq.xyzw vf29, 3(vi06) | mulax.xyzw ACC, vf24, vf06
sq.xyzw vf30, 6(vi06) | madday.xyzw ACC, vf25, vf06
sq.xyzw vf31, 9(vi06) | maddz.xyzw vf27, vf26, vf06
ibgtz vi01, L4 | addx.x vf21, vf21, vf02
iaddi vi06, vi06, 0xc | addy.x vf22, vf22, vf02
lq.xyzw vf28, 0(vi07) | addx.y vf14, vf14, vf02
lq.xyzw vf16, 1(vi07) | nop
sq.xyzw vf20, 2(vi06) | nop
sq.xyzw vf28, 0(vi06) | nop
jr vi12 | nop
sq.xyzw vf16, 1(vi06) | nop
L5:
iaddiu vi01, vi00, 0x21 | nop
sq.xyzw vf05, 0(vi08) | nop
iaddi vi08, vi08, 0x1 | nop
L6:
iaddi vi01, vi01, -0x1 | nop
lq.xyzw vf20, 2(vi03) | nop
lq.xyzw vf21, 2(vi04) | nop
lq.xyzw vf28, 0(vi03) | nop
lq.xyzw vf16, 1(vi03) | nop
lq.xyzw vf29, 0(vi04) | ftoi4.xyzw vf20, vf20
lq.xyzw vf17, 1(vi04) | ftoi4.xyzw vf21, vf21
sq.xyzw vf28, 0(vi08) | nop
sq.xyzw vf16, 1(vi08) | nop
sq.xyzw vf20, 2(vi08) | nop
sq.xyzw vf29, 3(vi08) | nop
sq.xyzw vf17, 4(vi08) | nop
sq.xyzw vf21, 5(vi08) | nop
iaddi vi03, vi03, 0x3 | nop
iaddi vi04, vi04, 0x3 | nop
ibgtz vi01, L6 | nop
iaddi vi08, vi08, 0x6 | nop
xgkick vi09 | nop
mtir vi08, vf03.x | nop
mtir vi09, vf03.x | nop
jr vi12 | nop
mr32.xyzw vf03, vf03 | nop
@@ -0,0 +1,292 @@
.word 0x40000005
.word 0x2ff
.word 0x80000030
.word 0x2ff
.word 0x40000020
.word 0x2ff
.word 0x80000030
.word 0x2ff
.word 0x80000030
.word 0x400002ff
.word 0x80000030
.word 0x2ff
.word 0x1ee03dc
.word 0x1e00053
.word 0x1e203dd
.word 0x2ff
.word 0x1e303da
.word 0x2ff
.word 0x1e403db
.word 0x2ff
.word 0x1e503d9
.word 0x2ff
.word 0x1e603df
.word 0x2ff
.word 0x1e703de
.word 0x2ff
.word 0x100b0080
.word 0x2ff
.word 0x80081bfc
.word 0x2ff
.word 0x80091bfc
.word 0x2ff
.word 0x81e31b3d
.word 0x2ff
.word 0x800506bc
.word 0x2ff
.word 0x800623fc
.word 0x2ff
.word 0x420c0024
.word 0x2ff
.word 0x81e4233d
.word 0x2ff
.word 0x800623fc
.word 0x2ff
.word 0x420c0021
.word 0x2ff
.word 0x81e4233d
.word 0x2ff
.word 0x800323fc
.word 0x2ff
.word 0x420c005f
.word 0x2ff
.word 0x802423fc
.word 0x2ff
.word 0x800623fc
.word 0x2ff
.word 0x420c001b
.word 0x2ff
.word 0x81e4233d
.word 0x2ff
.word 0x800323fc
.word 0x2ff
.word 0x420c0059
.word 0x2ff
.word 0x802423fc
.word 0x2ff
.word 0x80000030
.word 0x400002ff
.word 0x80000030
.word 0x2ff
.word 0x800506bc
.word 0x2ff
.word 0x800623fc
.word 0x2ff
.word 0x420c0012
.word 0x2ff
.word 0x81e4233d
.word 0x2ff
.word 0x800323fc
.word 0x2ff
.word 0x420c0050
.word 0x2ff
.word 0x802423fc
.word 0x2ff
.word 0x800623fc
.word 0x2ff
.word 0x420c000c
.word 0x2ff
.word 0x81e4233d
.word 0x2ff
.word 0x800323fc
.word 0x2ff
.word 0x420c004a
.word 0x2ff
.word 0x802423fc
.word 0x2ff
.word 0x800623fc
.word 0x2ff
.word 0x420c0006
.word 0x2ff
.word 0x81e4233d
.word 0x2ff
.word 0x800323fc
.word 0x2ff
.word 0x420c0044
.word 0x2ff
.word 0x802423fc
.word 0x2ff
.word 0x80000030
.word 0x400002ff
.word 0x80000030
.word 0x2ff
.word 0x800031f5
.word 0x2ff
.word 0x81ef733c
.word 0x2ff
.word 0x80010232
.word 0x2ff
.word 0x1f82801
.word 0x1e07d1b
.word 0x1f92803
.word 0x1e07d5b
.word 0x1fa2805
.word 0x1e07d9b
.word 0x80000030
.word 0x1e07ddb
.word 0x80000030
.word 0x1e6c1bc
.word 0x80000030
.word 0x1e6c8bd
.word 0x80000030
.word 0x1e6d6ca
.word 0x80000030
.word 0x102ad40
.word 0x80000030
.word 0x102b581
.word 0x80000030
.word 0x102bdc2
.word 0x80000030
.word 0x1027bc3
.word 0x3e6a002
.word 0x1180f18
.word 0x3e6a805
.word 0x1180f59
.word 0x3e6b008
.word 0x1180f9a
.word 0x3e6b80b
.word 0x1180fdb
.word 0x1f02800
.word 0x990f18
.word 0x1f12802
.word 0x990f59
.word 0x1f22804
.word 0x990f9a
.word 0x1f32806
.word 0x990fdb
.word 0x80052a32
.word 0x19be718
.word 0x80000030
.word 0x19bef59
.word 0x80000030
.word 0x19bf79a
.word 0x80000030
.word 0x19bffdb
.word 0x80000030
.word 0x190e71b
.word 0x80000030
.word 0x191ef5b
.word 0x80000030
.word 0x192f79b
.word 0x80000030
.word 0x193ffdb
.word 0x80000030
.word 0x1f0817c
.word 0x80000030
.word 0x1f1897c
.word 0x80000030
.word 0x1f2917c
.word 0x80010ff2
.word 0x1f3997c
.word 0x80305bfd
.word 0x1e6e728
.word 0x80315bfd
.word 0x1e6ef68
.word 0x80325bfd
.word 0x1e6f7a8
.word 0x80335bfd
.word 0x1e6ffe8
.word 0x80000030
.word 0x1e7e718
.word 0x80000030
.word 0x1e7ef58
.word 0x80000030
.word 0x1e7f798
.word 0x80000030
.word 0x1e7ffd8
.word 0x80000030
.word 0x1e7e701
.word 0x80000030
.word 0x1e7ef41
.word 0x80000030
.word 0x1e7f781
.word 0x80000030
.word 0x1e7ffc1
.word 0x3e68001
.word 0x600f2c
.word 0x3e68804
.word 0x600f6c
.word 0x3e69007
.word 0x600fac
.word 0x3e6980a
.word 0x600fec
.word 0x1f82801
.word 0x1e07d1b
.word 0x1f92803
.word 0x1e07d5b
.word 0x1fa2805
.word 0x1e07d9b
.word 0x3e6e000
.word 0x1e07ddb
.word 0x3e6e803
.word 0x1e6c1bc
.word 0x3e6f006
.word 0x1e6c8bd
.word 0x3e6f809
.word 0x1e6d6ca
.word 0x5a000fd2
.word 0x102ad40
.word 0x80063332
.word 0x102b581
.word 0x1fc3800
.word 0x827380
.word 0x1f03801
.word 0x2ff
.word 0x3e6a002
.word 0x2ff
.word 0x3e6e000
.word 0x2ff
.word 0x48006000
.word 0x2ff
.word 0x3e68001
.word 0x2ff
.word 0x10010021
.word 0x2ff
.word 0x3e82800
.word 0x2ff
.word 0x80084072
.word 0x2ff
.word 0x80010ff2
.word 0x2ff
.word 0x1f41802
.word 0x2ff
.word 0x1f52002
.word 0x2ff
.word 0x1fc1800
.word 0x2ff
.word 0x1f01801
.word 0x2ff
.word 0x1fd2000
.word 0x1f4a17d
.word 0x1f12001
.word 0x1f5a97d
.word 0x3e8e000
.word 0x2ff
.word 0x3e88001
.word 0x2ff
.word 0x3e8a002
.word 0x2ff
.word 0x3e8e803
.word 0x2ff
.word 0x3e88804
.word 0x2ff
.word 0x3e8a805
.word 0x2ff
.word 0x800318f2
.word 0x2ff
.word 0x800420f2
.word 0x2ff
.word 0x5a000ff0
.word 0x2ff
.word 0x800841b2
.word 0x2ff
.word 0x80004efc
.word 0x2ff
.word 0x80081bfc
.word 0x2ff
.word 0x80091bfc
.word 0x2ff
.word 0x48006000
.word 0x2ff
.word 0x81e31b3d
.word 0x2ff
@@ -0,0 +1,72 @@
nop | mulay.x ACC, vf12, vf02
nop | mulax.z ACC, vf12, vf03
nop | msub.xz vf24, vf12, vf02
nop | mulaz.x ACC, vf12, vf02
nop | mulay.z ACC, vf12, vf03
nop | msub.xz vf25, vf12, vf02
nop | mulaw.x ACC, vf12, vf02
nop | mulaz.z ACC, vf12, vf03
nop | msub.xz vf26, vf12, vf02
nop | mulax.x ACC, vf12, vf04
nop | mulaw.z ACC, vf12, vf03
nop | msub.xz vf27, vf12, vf02
nop | mul.xz vf28, vf24, vf24
nop | mul.xz vf29, vf25, vf25
nop | mul.xz vf30, vf26, vf26
nop | mul.xz vf31, vf27, vf27
nop | subx.y vf24, vf01, vf28
nop | subx.y vf25, vf01, vf29
nop | subx.y vf26, vf01, vf30
nop | subx.y vf27, vf01, vf31
nop | subz.y vf24, vf24, vf28
nop | subz.y vf25, vf25, vf29
nop | subz.y vf26, vf26, vf30
nop | subz.y vf27, vf27, vf31
nop | mulx.w vf24, vf01, vf02
nop | muly.w vf25, vf01, vf02
nop | mulz.w vf26, vf01, vf02
nop | mulw.w vf27, vf01, vf02
nop | mulax.xyzw ACC, vf05, vf24
nop | madday.xyzw ACC, vf06, vf24
nop | maddz.xyz vf16, vf07, vf24
nop | subw.z vf24, vf24, vf00
nop | mulax.xyzw ACC, vf05, vf25
nop | madday.xyzw ACC, vf06, vf25
nop | maddz.xyz vf17, vf07, vf25
div Q, vf00.w, vf24.z | subw.z vf25, vf25, vf00
nop | mulax.xyzw ACC, vf05, vf26
nop | madday.xyzw ACC, vf06, vf26
nop | maddz.xyz vf18, vf07, vf26
nop | subw.z vf26, vf26, vf00
nop | mulax.xyzw ACC, vf05, vf27
nop | madday.xyzw ACC, vf06, vf27
nop | mul.w vf20, vf00, Q
div Q, vf00.w, vf25.z | maddz.xyz vf19, vf07, vf27
nop | subw.z vf27, vf27, vf00
nop | maxx.xyz vf16, vf16, vf00
nop | maxx.xyz vf17, vf17, vf00
nop | maxx.xyz vf18, vf18, vf00
nop | maxx.xyz vf19, vf19, vf00
nop | mul.w vf21, vf00, Q
div Q, vf00.w, vf26.z | mula.xyzw ACC, vf01, vf11
nop | maddax.xyz ACC, vf08, vf16
nop | madday.xyz ACC, vf09, vf16
nop | maddz.xyz vf20, vf10, vf16
nop | mula.xyzw ACC, vf01, vf11
nop | maddax.xyz ACC, vf08, vf17
nop | madday.xyz ACC, vf09, vf17
nop | mul.w vf22, vf00, Q
nop | maddz.xyz vf21, vf10, vf17
div Q, vf00.w, vf27.z | mula.xyzw ACC, vf01, vf11
nop | maddax.xyz ACC, vf08, vf18
nop | madday.xyz ACC, vf09, vf18
nop | maddz.xyz vf22, vf10, vf18
nop | mula.xyzw ACC, vf01, vf11
nop | maddax.xyz ACC, vf08, vf19
nop | madday.xyz ACC, vf09, vf19
nop | maddz.xyz vf23, vf10, vf19
nop | mul.w vf23, vf00, Q
nop | miniy.xyz vf20, vf20, vf12
nop | miniy.xyz vf21, vf21, vf12
nop | miniy.xyz vf22, vf22, vf12 :e
nop | miniy.xyz vf23, vf23, vf12
+144
View File
@@ -0,0 +1,144 @@
.word 0x80000030
.word 0x10261bd
.word 0x80000030
.word 0x4361bc
.word 0x80000030
.word 0x142660c
.word 0x80000030
.word 0x10261be
.word 0x80000030
.word 0x4361bd
.word 0x80000030
.word 0x142664d
.word 0x80000030
.word 0x10261bf
.word 0x80000030
.word 0x4361be
.word 0x80000030
.word 0x142668e
.word 0x80000030
.word 0x10461bc
.word 0x80000030
.word 0x4361bf
.word 0x80000030
.word 0x14266cf
.word 0x80000030
.word 0x158c72a
.word 0x80000030
.word 0x159cf6a
.word 0x80000030
.word 0x15ad7aa
.word 0x80000030
.word 0x15bdfea
.word 0x80000030
.word 0x9c0e04
.word 0x80000030
.word 0x9d0e44
.word 0x80000030
.word 0x9e0e84
.word 0x80000030
.word 0x9f0ec4
.word 0x80000030
.word 0x9cc606
.word 0x80000030
.word 0x9dce46
.word 0x80000030
.word 0x9ed686
.word 0x80000030
.word 0x9fdec6
.word 0x80000030
.word 0x220e18
.word 0x80000030
.word 0x220e59
.word 0x80000030
.word 0x220e9a
.word 0x80000030
.word 0x220edb
.word 0x80000030
.word 0x1f829bc
.word 0x80000030
.word 0x1f830bd
.word 0x80000030
.word 0x1d83c0a
.word 0x80000030
.word 0x40c607
.word 0x80000030
.word 0x1f929bc
.word 0x80000030
.word 0x1f930bd
.word 0x80000030
.word 0x1d93c4a
.word 0x817803bc
.word 0x40ce47
.word 0x80000030
.word 0x1fa29bc
.word 0x80000030
.word 0x1fa30bd
.word 0x80000030
.word 0x1da3c8a
.word 0x80000030
.word 0x40d687
.word 0x80000030
.word 0x1fb29bc
.word 0x80000030
.word 0x1fb30bd
.word 0x80000030
.word 0x20051c
.word 0x817903bc
.word 0x1db3cca
.word 0x80000030
.word 0x40dec7
.word 0x80000030
.word 0x1c08410
.word 0x80000030
.word 0x1c08c50
.word 0x80000030
.word 0x1c09490
.word 0x80000030
.word 0x1c09cd0
.word 0x80000030
.word 0x20055c
.word 0x817a03bc
.word 0x1eb0abe
.word 0x80000030
.word 0x1d040bc
.word 0x80000030
.word 0x1d048bd
.word 0x80000030
.word 0x1d0550a
.word 0x80000030
.word 0x1eb0abe
.word 0x80000030
.word 0x1d140bc
.word 0x80000030
.word 0x1d148bd
.word 0x80000030
.word 0x20059c
.word 0x80000030
.word 0x1d1554a
.word 0x817b03bc
.word 0x1eb0abe
.word 0x80000030
.word 0x1d240bc
.word 0x80000030
.word 0x1d248bd
.word 0x80000030
.word 0x1d2558a
.word 0x80000030
.word 0x1eb0abe
.word 0x80000030
.word 0x1d340bc
.word 0x80000030
.word 0x1d348bd
.word 0x80000030
.word 0x1d355ca
.word 0x80000030
.word 0x2005dc
.word 0x80000030
.word 0x1cca515
.word 0x80000030
.word 0x1ccad55
.word 0x80000030
.word 0x41ccb595
.word 0x80000030
.word 0x1ccbdd5
@@ -0,0 +1,792 @@
b L1 | nop
nop | nop
b L2 | nop
nop | nop
b L13 | nop
nop | nop
b L21 | nop
nop | nop
nop | nop :e
nop | nop
L1:
iaddiu vi01, vi00, 0x358 | nop
iaddiu vi02, vi00, 0x364 | nop
mfir.x vf01, vi01 | nop
mfir.y vf01, vi02 | nop
mfir.z vf01, vi01 | nop
mfir.w vf01, vi02 | nop
lq.xyzw vf02, 880(vi00) | nop
lq.xyzw vf03, 882(vi00) | nop
lq.xyzw vf04, 883(vi00) | nop
lq.xyzw vf05, 884(vi00) | nop
lq.xyzw vf12, 885(vi00) | nop :e
lq.xyzw vf13, 881(vi00) | nop
L2:
iaddiu vi03, vi00, 0x158 | nop
ilwr.x vi08, vi03 | nop
mtir vi02, vf01.x | nop
iaddi vi03, vi03, 0x1 | addw.z vf25, vf00, vf00
lq.xyzw vf25, 888(vi00) | addw.z vf26, vf00, vf00
lq.xyzw vf29, 889(vi00) | addw.z vf27, vf00, vf00
lq.xyzw vf30, 891(vi00) | addw.z vf28, vf00, vf00
lq.xyzw vf06, 0(vi00) | nop
lq.xyzw vf07, 1(vi00) | nop
lq.xyzw vf08, 2(vi00) | nop
lq.xyzw vf09, 3(vi00) | nop
mtir vi01, vf01.y | nop
sq.xyzw vf25, 0(vi02) | nop
sq.xyzw vf29, 1(vi02) | nop
sq.xyzw vf30, 2(vi02) | nop
sq.xyzw vf25, 0(vi01) | nop
sq.xyzw vf29, 1(vi01) | nop
sq.xyzw vf30, 2(vi01) | nop
L3:
lqi.xyzw vf16, vi03 | nop
nop | nop
nop | nop
nop | nop
mtir vi04, vf16.x | nop
mtir vi05, vf16.y | nop
mtir vi06, vf16.z | nop
nop | nop
lq.xyzw vf17, 4(vi04) | nop
lq.xyzw vf18, 4(vi05) | nop
lq.xyzw vf19, 4(vi06) | nop
nop | mulaw.xyzw ACC, vf09, vf00
move.xyzw vf15, vf17 | maddax.xyzw ACC, vf06, vf17
nop | madday.xyzw ACC, vf07, vf17
nop | maddz.xyzw vf17, vf08, vf17
nop | mulaw.xyzw ACC, vf09, vf00
nop | sub.xyzw vf29, vf18, vf15
nop | sub.xyzw vf30, vf19, vf15
div Q, vf12.x, vf17.w | maddax.xyzw ACC, vf06, vf18
nop | mul.xyzw vf21, vf17, vf02
nop | madday.xyzw ACC, vf07, vf18
nop | maddz.xyzw vf18, vf08, vf18
nop | mulaw.xyzw ACC, vf09, vf00
nop | maddax.xyzw ACC, vf06, vf19
nop | madday.xyzw ACC, vf07, vf19
div Q, vf12.x, vf18.w | mul.xyz vf17, vf17, Q
nop | maddz.xyzw vf19, vf08, vf19
nop | mul.xyzw vf22, vf18, vf02
nop | opmula.xyz ACC, vf29, vf30
nop | opmsub.xyz vf29, vf30, vf29
nop | add.xy vf25, vf17, vf03
nop | add.xyzw vf17, vf17, vf05
div Q, vf12.x, vf19.w | mul.xyz vf18, vf18, Q
nop | mul.xyzw vf23, vf19, vf02
nop | mul.xyz vf29, vf29, vf15
nop | mul.xy vf25, vf25, vf04
nop | mini.xyzw vf10, vf10, vf17
nop | max.xyzw vf11, vf11, vf17
nop | ftoi4.xyzw vf17, vf17
nop | add.xy vf26, vf18, vf03
nop | add.xyzw vf18, vf18, vf05
fcset 0x0 | addy.x vf29, vf29, vf29
nop | mul.xyz vf19, vf19, Q
sq.xyzw vf25, 4(vi02) | mini.xyzw vf10, vf10, vf18
sq.xyzw vf17, 5(vi02) | max.xyzw vf11, vf11, vf18
nop | clipw.xyz vf21, vf21
nop | mul.xy vf26, vf26, vf04
nop | addz.x vf29, vf29, vf29
nop | ftoi4.xyzw vf18, vf18
nop | add.xy vf27, vf19, vf03
sq.xyzw vf26, 6(vi02) | add.xyzw vf19, vf19, vf05
fsand vi01, 0x2 | clipw.xyz vf22, vf22
sq.xyzw vf18, 7(vi02) | clipw.xyz vf23, vf23
ibeq vi00, vi01, L4 | mul.xy vf27, vf27, vf04
nop | mini.xyzw vf10, vf10, vf19
b L5 | nop
lq.xyzw vf31, 887(vi00) | max.xyzw vf11, vf11, vf19
L4:
lq.xyzw vf31, 886(vi00) | max.xyzw vf11, vf11, vf19
L5:
fcand vi01, 0x3ffff | ftoi4.xyzw vf19, vf19
ibne vi00, vi01, L11 | nop
iaddi vi08, vi08, -0x1 | nop
sq.xyzw vf27, 8(vi02) | nop
sq.xyzw vf31, 3(vi02) | nop
sq.xyzw vf19, 9(vi02) | nop
xgkick vi02 | nop
mtir vi02, vf01.y | nop
mr32.xyzw vf01, vf01 | nop
L6:
ibgtz vi08, L3 | nop
nop | nop
iaddiu vi03, vi00, 0x158 | nop
ilwr.x vi08, vi03 | nop
iaddi vi03, vi03, 0x1 | nop
L7:
lqi.xyzw vf16, vi03 | nop
nop | nop
nop | nop
nop | nop
mtir vi04, vf16.x | nop
mtir vi05, vf16.y | nop
mtir vi06, vf16.z | nop
nop | nop
lq.xyzw vf17, 174(vi04) | nop
lq.xyzw vf18, 174(vi06) | nop
lq.xyzw vf19, 174(vi05) | nop
nop | mulaw.xyzw ACC, vf09, vf00
move.xyzw vf15, vf17 | maddax.xyzw ACC, vf06, vf17
nop | madday.xyzw ACC, vf07, vf17
nop | maddz.xyzw vf17, vf08, vf17
nop | mulaw.xyzw ACC, vf09, vf00
nop | sub.xyzw vf29, vf18, vf15
nop | sub.xyzw vf30, vf19, vf15
div Q, vf12.x, vf17.w | maddax.xyzw ACC, vf06, vf18
nop | mul.xyzw vf21, vf17, vf02
nop | madday.xyzw ACC, vf07, vf18
nop | maddz.xyzw vf18, vf08, vf18
nop | mulaw.xyzw ACC, vf09, vf00
nop | maddax.xyzw ACC, vf06, vf19
nop | madday.xyzw ACC, vf07, vf19
div Q, vf12.x, vf18.w | mul.xyz vf17, vf17, Q
nop | maddz.xyzw vf19, vf08, vf19
nop | mul.xyzw vf22, vf18, vf02
nop | opmula.xyz ACC, vf29, vf30
nop | opmsub.xyz vf29, vf30, vf29
nop | add.xy vf25, vf17, vf03
nop | add.xyzw vf17, vf17, vf05
div Q, vf12.x, vf19.w | mul.xyz vf18, vf18, Q
nop | mul.xyzw vf23, vf19, vf02
nop | mul.xyz vf29, vf29, vf15
nop | mul.xy vf25, vf25, vf04
nop | mini.xyzw vf10, vf10, vf17
nop | max.xyzw vf11, vf11, vf17
nop | ftoi4.xyzw vf17, vf17
nop | add.xy vf26, vf18, vf03
nop | add.xyzw vf18, vf18, vf05
fcset 0x0 | addy.x vf29, vf29, vf29
nop | mul.xyz vf19, vf19, Q
sq.xyzw vf25, 4(vi02) | mini.xyzw vf10, vf10, vf18
sq.xyzw vf17, 5(vi02) | max.xyzw vf11, vf11, vf18
nop | clipw.xyz vf21, vf21
nop | mul.xy vf26, vf26, vf04
iaddi vi08, vi08, -0x1 | addz.x vf29, vf29, vf29
nop | ftoi4.xyzw vf18, vf18
nop | add.xy vf27, vf19, vf03
sq.xyzw vf26, 6(vi02) | add.xyzw vf19, vf19, vf05
fsand vi01, 0x2 | clipw.xyz vf22, vf22
sq.xyzw vf18, 7(vi02) | clipw.xyz vf23, vf23
ibeq vi00, vi01, L8 | mul.xy vf27, vf27, vf04
nop | mini.xyzw vf10, vf10, vf19
b L9 | nop
lq.xyzw vf31, 887(vi00) | max.xyzw vf11, vf11, vf19
L8:
lq.xyzw vf31, 886(vi00) | max.xyzw vf11, vf11, vf19
L9:
fcand vi01, 0x3ffff | ftoi4.xyzw vf19, vf19
ibne vi00, vi01, L12 | nop
sq.xyzw vf27, 8(vi02) | nop
sq.xyzw vf31, 3(vi02) | nop
sq.xyzw vf19, 9(vi02) | nop
xgkick vi02 | nop
mtir vi02, vf01.y | nop
mr32.xyzw vf01, vf01 | nop
L10:
ibgtz vi08, L7 | nop
nop | nop
nop | nop :e
nop | nop
L11:
sq.xyzw vf21, 1000(vi00) | nop
sq.xyzw vf22, 1003(vi00) | nop
sq.xyzw vf23, 1006(vi00) | nop
sq.xyzw vf31, 942(vi00) | nop
mfir.x vf29, vi02 | nop
mfir.y vf29, vi03 | nop
mfir.z vf29, vi07 | nop
bal vi15, L36 | nop
mfir.w vf29, vi08 | nop
mtir vi08, vf29.w | nop
mtir vi03, vf29.y | nop
mtir vi07, vf29.z | nop
b L6 | nop
mtir vi02, vf29.x | nop
L12:
sq.xyzw vf21, 1000(vi00) | nop
sq.xyzw vf22, 1003(vi00) | nop
sq.xyzw vf23, 1006(vi00) | nop
sq.xyzw vf31, 942(vi00) | nop
mfir.x vf29, vi02 | nop
mfir.y vf29, vi03 | nop
mfir.z vf29, vi07 | nop
bal vi15, L36 | nop
mfir.w vf29, vi08 | nop
mtir vi08, vf29.w | nop
mtir vi03, vf29.y | nop
mtir vi07, vf29.z | nop
b L10 | nop
mtir vi02, vf29.x | nop
L13:
iaddiu vi03, vi00, 0x258 | nop
ilwr.x vi08, vi03 | nop
mtir vi02, vf01.x | nop
iaddi vi03, vi03, 0x1 | addw.z vf25, vf00, vf00
lq.xyzw vf25, 888(vi00) | addw.z vf26, vf00, vf00
lq.xyzw vf29, 889(vi00) | addw.z vf27, vf00, vf00
lq.xyzw vf30, 892(vi00) | nop
lq.xyzw vf06, 0(vi00) | nop
lq.xyzw vf07, 1(vi00) | nop
lq.xyzw vf08, 2(vi00) | nop
lq.xyzw vf09, 3(vi00) | nop
mtir vi01, vf01.y | nop
sq.xyzw vf25, 0(vi02) | nop
sq.xyzw vf29, 1(vi02) | nop
sq.xyzw vf30, 2(vi02) | nop
sq.xyzw vf25, 0(vi01) | nop
sq.xyzw vf29, 1(vi01) | nop
sq.xyzw vf30, 2(vi01) | nop
L14:
lqi.xyzw vf16, vi03 | nop
nop | nop
nop | nop
nop | nop
mtir vi06, vf16.z | nop
mtir vi04, vf16.x | nop
mtir vi05, vf16.y | nop
ibeq vi00, vi06, L15 | nop
nop | nop
lq.xyzw vf17, 4(vi04) | nop
lq.xyzw vf18, 4(vi05) | nop
lq.xyzw vf19, 174(vi05) | nop
b L16 | nop
lq.xyzw vf20, 174(vi04) | nop
L15:
lq.xyzw vf17, 4(vi05) | nop
lq.xyzw vf18, 4(vi04) | nop
lq.xyzw vf19, 174(vi04) | nop
lq.xyzw vf20, 174(vi05) | nop
L16:
move.xyzw vf15, vf17 | mulaw.xyzw ACC, vf09, vf00
nop | maddax.xyzw ACC, vf06, vf17
nop | madday.xyzw ACC, vf07, vf17
nop | maddz.xyzw vf17, vf08, vf17
nop | mulaw.xyzw ACC, vf09, vf00
nop | sub.xyzw vf29, vf18, vf15
nop | sub.xyzw vf30, vf19, vf15
div Q, vf12.x, vf17.w | maddax.xyzw ACC, vf06, vf18
nop | mul.xyzw vf21, vf17, vf02
nop | madday.xyzw ACC, vf07, vf18
nop | maddz.xyzw vf18, vf08, vf18
nop | mulaw.xyzw ACC, vf09, vf00
nop | maddax.xyzw ACC, vf06, vf19
nop | madday.xyzw ACC, vf07, vf19
div Q, vf12.x, vf18.w | mul.xyz vf17, vf17, Q
nop | maddz.xyzw vf19, vf08, vf19
nop | mulaw.xyzw ACC, vf09, vf00
nop | maddax.xyzw ACC, vf06, vf20
nop | madday.xyzw ACC, vf07, vf20
nop | maddz.xyzw vf20, vf08, vf20
nop | mul.xyzw vf22, vf18, vf02
div Q, vf12.x, vf19.w | mul.xyz vf18, vf18, Q
nop | add.xy vf25, vf17, vf03
nop | add.xyzw vf17, vf17, vf05
nop | opmula.xyz ACC, vf29, vf30
nop | opmsub.xyz vf29, vf30, vf29
nop | mul.xyzw vf23, vf19, vf02
nop | mul.xyz vf29, vf29, vf15
div Q, vf12.x, vf20.w | mul.xyz vf19, vf19, Q
nop | mul.xyzw vf24, vf20, vf02
nop | mul.xy vf25, vf25, vf04
nop | mini.xyzw vf10, vf10, vf17
nop | max.xyzw vf11, vf11, vf17
nop | ftoi4.xyzw vf17, vf17
nop | add.xy vf26, vf18, vf03
nop | mul.xyz vf20, vf20, Q
nop | add.xyzw vf18, vf18, vf05
nop | addy.x vf29, vf29, vf29
sq.xyzw vf25, 4(vi02) | mini.xyzw vf10, vf10, vf18
sq.xyzw vf17, 5(vi02) | max.xyzw vf11, vf11, vf18
nop | clipw.xyz vf21, vf21
nop | mul.xy vf26, vf26, vf04
nop | addz.x vf29, vf29, vf29
nop | ftoi4.xyzw vf18, vf18
nop | add.xy vf27, vf19, vf03
sq.xyzw vf26, 6(vi02) | add.xyzw vf19, vf19, vf05
fsand vi01, 0x2 | clipw.xyz vf22, vf22
sq.xyzw vf18, 7(vi02) | clipw.xyz vf23, vf23
nop | clipw.xyz vf24, vf24
nop | add.xy vf28, vf20, vf03
nop | add.xyzw vf20, vf20, vf05
nop | mul.xy vf27, vf27, vf04
nop | mini.xyzw vf10, vf10, vf19
nop | max.xyzw vf11, vf11, vf19
ibeq vi00, vi01, L17 | mul.xy vf28, vf28, vf04
nop | mini.xyzw vf10, vf10, vf20
b L18 | nop
lq.xyzw vf31, 887(vi00) | max.xyzw vf11, vf11, vf20
L17:
lq.xyzw vf31, 886(vi00) | max.xyzw vf11, vf11, vf20
L18:
fcand vi01, 0xffffff | ftoi4.xyzw vf19, vf19
ibne vi00, vi01, L20 | max.xyzw vf11, vf11, vf20
iaddi vi08, vi08, -0x1 | nop
sq.xyzw vf27, 8(vi02) | ftoi4.xyzw vf20, vf20
sq.xyzw vf31, 3(vi02) | nop
sq.xyzw vf19, 9(vi02) | nop
sq.xyzw vf28, 10(vi02) | nop
sq.xyzw vf20, 11(vi02) | nop
xgkick vi02 | nop
mtir vi02, vf01.y | nop
mr32.xyzw vf01, vf01 | nop
L19:
ibgtz vi08, L14 | nop
nop | nop
nop | nop :e
nop | nop
L20:
sq.xyzw vf21, 1000(vi00) | nop
sq.xyzw vf22, 1003(vi00) | nop
sq.xyzw vf23, 1006(vi00) | nop
sq.xyzw vf24, 1009(vi00) | nop
sq.xyzw vf31, 942(vi00) | nop
mfir.x vf29, vi02 | nop
mfir.y vf29, vi03 | nop
mfir.z vf29, vi07 | nop
bal vi15, L37 | nop
mfir.w vf29, vi08 | nop
mtir vi08, vf29.w | nop
mtir vi03, vf29.y | nop
mtir vi07, vf29.z | nop
b L19 | nop
mtir vi02, vf29.x | nop
L21:
iaddiu vi03, vi00, 0x158 | nop
ilwr.x vi08, vi03 | nop
mtir vi02, vf01.x | nop
iaddi vi03, vi03, 0x1 | addw.z vf25, vf00, vf00
lq.xyzw vf25, 888(vi00) | addw.z vf26, vf00, vf00
lq.xyzw vf29, 889(vi00) | addw.z vf27, vf00, vf00
lq.xyzw vf30, 891(vi00) | addw.z vf28, vf00, vf00
lq.xyzw vf06, 0(vi00) | nop
lq.xyzw vf07, 1(vi00) | nop
lq.xyzw vf08, 2(vi00) | nop
lq.xyzw vf09, 3(vi00) | nop
mtir vi01, vf01.y | nop
sq.xyzw vf25, 0(vi02) | nop
sq.xyzw vf29, 1(vi02) | nop
sq.xyzw vf30, 2(vi02) | nop
sq.xyzw vf25, 0(vi01) | nop
sq.xyzw vf29, 1(vi01) | nop
sq.xyzw vf30, 2(vi01) | nop
L22:
lqi.xyzw vf16, vi03 | nop
nop | nop
nop | nop
nop | nop
mtir vi01, vf16.w | nop
mtir vi04, vf16.x | nop
mtir vi05, vf16.y | nop
mtir vi06, vf16.z | nop
ibeq vi00, vi01, L23 | nop
lq.xyzw vf17, 4(vi04) | nop
lq.xyzw vf18, 4(vi05) | nop
b L24 | nop
lq.xyzw vf19, 4(vi06) | nop
L23:
lq.xyzw vf19, 4(vi05) | nop
lq.xyzw vf18, 4(vi06) | nop
L24:
nop | mulaw.xyzw ACC, vf09, vf00
move.xyzw vf15, vf17 | maddax.xyzw ACC, vf06, vf17
nop | madday.xyzw ACC, vf07, vf17
nop | sub.xyzw vf29, vf18, vf17
nop | sub.xyzw vf30, vf19, vf17
nop | maddz.xyzw vf17, vf08, vf17
nop | mulaw.xyzw ACC, vf09, vf00
div Q, vf12.x, vf17.w | maddax.xyzw ACC, vf06, vf18
nop | madday.xyzw ACC, vf07, vf18
nop | mul.xyzw vf21, vf17, vf02
nop | maddz.xyzw vf18, vf08, vf18
nop | mulaw.xyzw ACC, vf09, vf00
nop | maddax.xyzw ACC, vf06, vf19
nop | madday.xyzw ACC, vf07, vf19
div Q, vf12.x, vf18.w | mul.xyz vf17, vf17, Q
nop | maddz.xyzw vf19, vf08, vf19
nop | mul.xyzw vf22, vf18, vf02
nop | opmula.xyz ACC, vf29, vf30
nop | opmsub.xyz vf29, vf30, vf29
nop | add.xy vf25, vf17, vf03
nop | add.xyzw vf17, vf17, vf05
div Q, vf12.x, vf19.w | mul.xyz vf18, vf18, Q
nop | mul.xyzw vf23, vf19, vf02
nop | mul.xyz vf29, vf29, vf15
nop | mul.xy vf25, vf25, vf04
nop | mini.xyzw vf10, vf10, vf17
nop | max.xyzw vf11, vf11, vf17
nop | ftoi4.xyzw vf17, vf17
nop | add.xy vf26, vf18, vf03
nop | add.xyzw vf18, vf18, vf05
fcset 0x0 | addy.x vf29, vf29, vf29
nop | mul.xyz vf19, vf19, Q
sq.xyzw vf25, 4(vi02) | mini.xyzw vf10, vf10, vf18
sq.xyzw vf17, 5(vi02) | max.xyzw vf11, vf11, vf18
nop | clipw.xyz vf21, vf21
nop | mul.xy vf26, vf26, vf04
nop | addz.x vf29, vf29, vf29
nop | ftoi4.xyzw vf18, vf18
nop | add.xy vf27, vf19, vf03
sq.xyzw vf26, 6(vi02) | add.xyzw vf19, vf19, vf05
fsand vi01, 0x2 | clipw.xyz vf22, vf22
sq.xyzw vf18, 7(vi02) | clipw.xyz vf23, vf23
ibeq vi00, vi01, L25 | mul.xy vf27, vf27, vf04
nop | mini.xyzw vf10, vf10, vf19
b L26 | nop
lq.xyzw vf31, 887(vi00) | max.xyzw vf11, vf11, vf19
L25:
lq.xyzw vf31, 886(vi00) | max.xyzw vf11, vf11, vf19
L26:
fcand vi01, 0x3ffff | ftoi4.xyzw vf19, vf19
ibne vi00, vi01, L34 | nop
iaddi vi08, vi08, -0x1 | nop
sq.xyzw vf27, 8(vi02) | nop
sq.xyzw vf31, 3(vi02) | nop
sq.xyzw vf19, 9(vi02) | nop
xgkick vi02 | nop
mtir vi02, vf01.y | nop
mr32.xyzw vf01, vf01 | nop
L27:
ibgtz vi08, L22 | nop
nop | nop
iaddiu vi03, vi00, 0x158 | nop
ilwr.x vi08, vi03 | nop
iaddi vi03, vi03, 0x1 | nop
L28:
lqi.xyzw vf16, vi03 | nop
nop | nop
nop | nop
nop | nop
mtir vi01, vf16.w | nop
mtir vi04, vf16.x | nop
mtir vi05, vf16.y | nop
mtir vi06, vf16.z | nop
ibne vi00, vi01, L29 | nop
lq.xyzw vf17, 174(vi04) | nop
lq.xyzw vf18, 174(vi05) | nop
b L30 | nop
lq.xyzw vf19, 174(vi06) | nop
L29:
lq.xyzw vf19, 174(vi05) | nop
lq.xyzw vf18, 174(vi06) | nop
L30:
nop | mulaw.xyzw ACC, vf09, vf00
move.xyzw vf15, vf17 | maddax.xyzw ACC, vf06, vf17
nop | madday.xyzw ACC, vf07, vf17
nop | maddz.xyzw vf17, vf08, vf17
nop | mulaw.xyzw ACC, vf09, vf00
nop | sub.xyzw vf29, vf18, vf15
nop | sub.xyzw vf30, vf19, vf15
div Q, vf12.x, vf17.w | maddax.xyzw ACC, vf06, vf18
nop | mul.xyzw vf21, vf17, vf02
nop | madday.xyzw ACC, vf07, vf18
nop | maddz.xyzw vf18, vf08, vf18
nop | mulaw.xyzw ACC, vf09, vf00
nop | maddax.xyzw ACC, vf06, vf19
nop | madday.xyzw ACC, vf07, vf19
div Q, vf12.x, vf18.w | mul.xyz vf17, vf17, Q
nop | maddz.xyzw vf19, vf08, vf19
nop | mul.xyzw vf22, vf18, vf02
nop | opmula.xyz ACC, vf29, vf30
nop | opmsub.xyz vf29, vf30, vf29
nop | add.xy vf25, vf17, vf03
nop | add.xyzw vf17, vf17, vf05
div Q, vf12.x, vf19.w | mul.xyz vf18, vf18, Q
nop | mul.xyzw vf23, vf19, vf02
nop | mul.xyz vf29, vf29, vf15
nop | mul.xy vf25, vf25, vf04
nop | mini.xyzw vf10, vf10, vf17
nop | max.xyzw vf11, vf11, vf17
nop | ftoi4.xyzw vf17, vf17
nop | add.xy vf26, vf18, vf03
nop | add.xyzw vf18, vf18, vf05
fcset 0x0 | addy.x vf29, vf29, vf29
nop | mul.xyz vf19, vf19, Q
sq.xyzw vf25, 4(vi02) | mini.xyzw vf10, vf10, vf18
sq.xyzw vf17, 5(vi02) | max.xyzw vf11, vf11, vf18
nop | clipw.xyz vf21, vf21
nop | mul.xy vf26, vf26, vf04
nop | addz.x vf29, vf29, vf29
nop | ftoi4.xyzw vf18, vf18
nop | add.xy vf27, vf19, vf03
sq.xyzw vf26, 6(vi02) | add.xyzw vf19, vf19, vf05
fsand vi01, 0x2 | clipw.xyz vf22, vf22
sq.xyzw vf18, 7(vi02) | clipw.xyz vf23, vf23
ibeq vi00, vi01, L31 | mul.xy vf27, vf27, vf04
nop | mini.xyzw vf10, vf10, vf19
b L32 | nop
lq.xyzw vf31, 887(vi00) | max.xyzw vf11, vf11, vf19
L31:
lq.xyzw vf31, 886(vi00) | max.xyzw vf11, vf11, vf19
L32:
fcand vi01, 0x3ffff | ftoi4.xyzw vf19, vf19
ibne vi00, vi01, L35 | nop
iaddi vi08, vi08, -0x1 | nop
sq.xyzw vf27, 8(vi02) | nop
sq.xyzw vf31, 3(vi02) | nop
sq.xyzw vf19, 9(vi02) | nop
xgkick vi02 | nop
mtir vi02, vf01.y | nop
mr32.xyzw vf01, vf01 | nop
L33:
ibgtz vi08, L28 | nop
nop | nop
nop | nop :e
nop | nop
L34:
sq.xyzw vf21, 1000(vi00) | nop
sq.xyzw vf22, 1003(vi00) | nop
sq.xyzw vf23, 1006(vi00) | nop
sq.xyzw vf31, 942(vi00) | nop
mfir.x vf29, vi02 | nop
mfir.y vf29, vi03 | nop
mfir.z vf29, vi07 | nop
bal vi15, L36 | nop
mfir.w vf29, vi08 | nop
mtir vi08, vf29.w | nop
mtir vi03, vf29.y | nop
mtir vi07, vf29.z | nop
b L27 | nop
mtir vi02, vf29.x | nop
L35:
sq.xyzw vf21, 1000(vi00) | nop
sq.xyzw vf22, 1003(vi00) | nop
sq.xyzw vf23, 1006(vi00) | nop
sq.xyzw vf31, 942(vi00) | nop
mfir.x vf29, vi02 | nop
mfir.y vf29, vi03 | nop
mfir.z vf29, vi07 | nop
bal vi15, L36 | nop
mfir.w vf29, vi08 | nop
mtir vi08, vf29.w | nop
mtir vi03, vf29.y | nop
mtir vi07, vf29.z | nop
b L33 | nop
mtir vi02, vf29.x | nop
L36:
sq.xyzw vf00, 893(vi00) | nop
sq.xyzw vf00, 900(vi00) | nop
sq.xyzw vf00, 907(vi00) | nop
sq.xyzw vf00, 914(vi00) | nop
sq.xyzw vf00, 921(vi00) | nop
sq.xyzw vf00, 928(vi00) | nop
iaddiu vi01, vi00, 0x2d4 | nop
isw.z vi01, 893(vi00) | nop
iaddiu vi01, vi00, 0x2d6 | nop
isw.z vi01, 900(vi00) | nop
iaddiu vi01, vi00, 0x2d8 | nop
isw.z vi01, 907(vi00) | nop
iaddiu vi01, vi00, 0x2da | nop
isw.z vi01, 914(vi00) | nop
iaddiu vi01, vi00, 0x2dc | nop
isw.z vi01, 921(vi00) | nop
iaddiu vi01, vi00, 0x2de | nop
isw.z vi01, 928(vi00) | nop
iaddiu vi03, vi00, 0x3b0 | nop
iaddiu vi04, vi00, 0x3af | nop
mfir.x vf31, vi15 | nop
iaddi vi05, vi00, 0x0 | nop
bal vi15, L38 | nop
iaddiu vi07, vi00, 0x3e8 | nop
bal vi15, L38 | nop
iaddiu vi07, vi00, 0x3eb | nop
bal vi15, L38 | nop
iaddiu vi07, vi00, 0x3ee | nop
b L47 | nop
nop | nop
L37:
sq.xyzw vf00, 893(vi00) | nop
sq.xyzw vf00, 900(vi00) | nop
sq.xyzw vf00, 907(vi00) | nop
sq.xyzw vf00, 914(vi00) | nop
sq.xyzw vf00, 921(vi00) | nop
sq.xyzw vf00, 928(vi00) | nop
iaddiu vi01, vi00, 0x2d4 | nop
isw.z vi01, 893(vi00) | nop
iaddiu vi01, vi00, 0x2d6 | nop
isw.z vi01, 900(vi00) | nop
iaddiu vi01, vi00, 0x2d8 | nop
isw.z vi01, 907(vi00) | nop
iaddiu vi01, vi00, 0x2da | nop
isw.z vi01, 914(vi00) | nop
iaddiu vi01, vi00, 0x2dc | nop
isw.z vi01, 921(vi00) | nop
iaddiu vi01, vi00, 0x2de | nop
isw.z vi01, 928(vi00) | nop
iaddiu vi03, vi00, 0x3b0 | nop
iaddiu vi04, vi00, 0x3af | nop
mfir.x vf31, vi15 | nop
iaddi vi05, vi00, 0x0 | nop
bal vi15, L38 | nop
iaddiu vi07, vi00, 0x3e8 | nop
bal vi15, L38 | nop
iaddiu vi07, vi00, 0x3eb | nop
bal vi15, L38 | nop
iaddiu vi07, vi00, 0x3ee | nop
bal vi15, L38 | nop
iaddiu vi07, vi00, 0x3f1 | nop
b L47 | nop
nop | nop
L38:
iaddiu vi09, vi00, 0x37d | nop
L39:
iaddi vi10, vi00, 0x0 | nop
L40:
isubiu vi01, vi09, 0x3a7 | nop
ilwr.y vi08, vi09 | nop
ibgez vi01, L44 | nop
ilwr.z vi06, vi09 | nop
lq.xyzw vf15, 0(vi07) | nop
lq.xyzw vf14, 0(vi08) | nop
ibne vi00, vi08, L41 | nop
iswr.y vi07, vi09 | nop
jalr vi11, vi06 | nop
iswr.x vi07, vi09 | nop
nop | nop
nop | nop
nop | nop
fsand vi02, 0x2 | nop
ibne vi00, vi02, L45 | nop
nop | nop
b L40 | nop
iaddi vi09, vi09, 0x7 | nop
L41:
jalr vi11, vi06 | nop
nop | nop
nop | nop
nop | nop
fsand vi01, 0x2 | nop
fsand vi02, 0x2 | subw.w vf31, vf30, vf31
ibne vi00, vi01, L43 | nop
nop | nop
ibne vi00, vi02, L42 | nop
div Q, vf30.w, vf31.w | nop
b L40 | nop
iaddi vi09, vi09, 0x7 | nop
L42:
bal vi11, L52 | nop
iaddi vi07, vi09, 0x1 | nop
sq.xyzw vf16, 1(vi09) | nop
b L40 | nop
iaddi vi09, vi09, 0x7 | nop
L43:
ibne vi00, vi02, L45 | nop
div Q, vf30.w, vf31.w | nop
bal vi11, L52 | nop
nop | nop
sq.xyzw vf16, 4(vi09) | nop
iaddi vi09, vi09, 0x7 | nop
isw.x vi09, 935(vi10) | nop
isw.y vi07, 935(vi10) | nop
iaddi vi10, vi10, 0x1 | nop
b L40 | nop
iaddi vi07, vi09, -0x3 | nop
L44:
lq.xyzw vf14, 0(vi07) | nop
iaddi vi05, vi05, 0x1 | nop
div Q, vf00.w, vf14.w | nop
nop | mul.xyzw vf14, vf14, vf13
iaddi vi03, vi03, 0x2 | nop
waitq | subw.w vf14, vf00, vf00
nop | mul.xyz vf14, vf14, Q
nop | add.xy vf26, vf14, vf03
nop | add.xyzw vf14, vf14, vf05
nop | mul.xy vf26, vf26, vf04
nop | mini.xyzw vf10, vf10, vf14
nop | max.xyzw vf11, vf11, vf14
sq.xyzw vf26, -2(vi03) | ftoi4.xyzw vf14, vf14
sq.xyzw vf14, -1(vi03) | nop
L45:
iblez vi10, L46 | nop
nop | nop
ilw.x vi09, 934(vi10) | nop
ilw.y vi07, 934(vi10) | nop
b L40 | nop
iaddi vi10, vi10, -0x1 | nop
L46:
jr vi15 | nop
nop | nop
L47:
iaddiu vi09, vi00, 0x37d | nop
L48:
ilwr.x vi08, vi09 | nop
ilwr.y vi07, vi09 | nop
ilwr.z vi06, vi09 | nop
nop | nop
ibeq vi00, vi08, L50 | nop
lq.xyzw vf14, 0(vi07) | nop
ibeq vi07, vi08, L50 | nop
lq.xyzw vf15, 0(vi08) | nop
jalr vi11, vi06 | nop
nop | nop
nop | nop
nop | nop
fsand vi01, 0x2 | nop
fsand vi02, 0x2 | subw.w vf31, vf30, vf31
ibeq vi02, vi01, L50 | nop
nop | nop
ibeq vi00, vi01, L49 | nop
div Q, vf30.w, vf31.w | nop
bal vi11, L52 | nop
nop | nop
sq.xyzw vf16, 4(vi09) | nop
iaddi vi07, vi09, 0x4 | nop
ior vi12, vi09, vi00 | nop
bal vi15, L39 | nop
iaddi vi09, vi09, 0x7 | nop
b L50 | nop
ior vi09, vi12, vi00 | nop
L49:
bal vi11, L52 | nop
nop | nop
sq.xyzw vf16, 1(vi09) | nop
iaddi vi07, vi09, 0x1 | nop
ior vi12, vi09, vi00 | nop
bal vi15, L39 | nop
iaddi vi09, vi09, 0x7 | nop
ior vi09, vi12, vi00 | nop
L50:
isubiu vi01, vi09, 0x3a0 | nop
iswr.x vi00, vi09 | nop
iswr.y vi00, vi09 | nop
ibltz vi01, L48 | nop
iaddi vi09, vi09, 0x7 | nop
ibeq vi00, vi05, L51 | nop
mtir vi15, vf31.x | nop
iaddiu vi05, vi05, 0x4000 | nop
iaddiu vi05, vi05, 0x4000 | nop
iswr.x vi05, vi04 | nop
iaddiu vi01, vi00, 0x3ac | nop
xgkick vi01 | nop
lq.xyzw vf30, 888(vi00) | nop
lq.xyzw vf31, 890(vi00) | nop
iaddiu vi01, vi00, 0x3fe | nop
isubiu vi02, vi00, 0x7fff | nop
sq.xyzw vf30, 0(vi01) | nop
iswr.x vi02, vi01 | nop
sq.xyzw vf31, 1(vi01) | nop
nop | nop
xgkick vi01 | nop
L51:
nop | nop
jr vi15 | nop
nop | nop
jr vi11 | addx.w vf30, vf14, vf14
nop | addx.w vf31, vf15, vf15
jr vi11 | subx.w vf30, vf14, vf14
nop | subx.w vf31, vf15, vf15
jr vi11 | addy.w vf30, vf14, vf14
nop | addy.w vf31, vf15, vf15
jr vi11 | suby.w vf30, vf14, vf14
nop | suby.w vf31, vf15, vf15
jr vi11 | addz.w vf30, vf14, vf14
nop | addz.w vf31, vf15, vf15
jr vi11 | subz.w vf30, vf14, vf14
nop | subz.w vf31, vf15, vf15
L52:
nop | sub.xyzw vf16, vf15, vf14
waitq | mul.xyzw vf16, vf16, Q
jr vi11 | add.xyzw vf16, vf14, vf16
nop | nop
@@ -0,0 +1,88 @@
nop | sub.xyzw vf05, vf03, vf02
nop | sub.xyzw vf06, vf04, vf02
nop | sub.xyzw vf10, vf08, vf07
nop | sub.xyzw vf11, vf09, vf07
nop | sub.xyzw vf15, vf13, vf12
nop | sub.xyzw vf16, vf14, vf12
nop | sub.xyzw vf20, vf18, vf17
nop | sub.xyzw vf21, vf19, vf17
nop | opmula.xyz ACC, vf05, vf06
nop | opmsub.xyz vf05, vf06, vf05
nop | opmula.xyz ACC, vf10, vf11
nop | opmsub.xyz vf10, vf11, vf10
nop | opmula.xyz ACC, vf15, vf16
nop | opmsub.xyz vf15, vf16, vf15
nop | opmula.xyz ACC, vf20, vf21
nop | opmsub.xyz vf20, vf21, vf20
nop | mul.xyz vf05, vf05, vf01
nop | mul.xyz vf10, vf10, vf01
nop | mul.xyz vf15, vf15, vf01
nop | mul.xyz vf20, vf20, vf01
nop | addx.y vf05, vf05, vf05
nop | addx.y vf10, vf10, vf10
nop | addx.y vf15, vf15, vf15
nop | addx.y vf20, vf20, vf20
nop | addz.y vf22, vf05, vf05
nop | addz.y vf23, vf10, vf10
nop | addz.y vf24, vf15, vf15 :e
nop | addz.y vf25, vf20, vf20
nop | mul.xyzw vf27, vf20, Q
div Q, vf13.x, vf17.x | sub.xyzw vf19, vf01, vf03
move.xyzw vf23, vf07 | sub.xyzw vf20, vf01, vf04
nop | sub.xyzw vf21, vf01, vf05
move.xyzw vf25, vf09 | sub.xyzw vf22, vf01, vf06
move.xyzw vf26, vf10 | sub.xyzw vf24, vf08, vf27
nop | mul.xyzw vf11, vf03, vf02
nop | mul.xyz vf15, vf19, vf02
div Q, vf14.x, vf18.x | mul.xyzw vf12, vf04, vf02
move.xyzw vf07, vf03 | mul.xyzw vf28, vf28, Q
move.xyzw vf08, vf04 | mul.xyz vf16, vf20, vf02
move.xyzw vf09, vf05 | addy.x vf11, vf11, vf11
move.xyzw vf10, vf06 | addy.x vf15, vf15, vf15
nop | sub.xyzw vf25, vf25, vf28
nop | addy.x vf12, vf12, vf12
nop | mul.xyzw vf29, vf29, Q
nop | addy.x vf16, vf16, vf16
nop | addz.x vf11, vf11, vf11
nop | addz.x vf15, vf15, vf15
nop | sub.xyzw vf26, vf26, vf29
nop | addz.x vf12, vf12, vf12
nop | addz.x vf16, vf16, vf16
nop | addw.x vf11, vf11, vf11
nop | mul.xyzw vf13, vf09, vf02
nop | addw.x vf12, vf12, vf12
nop | mul.xyz vf17, vf21, vf02
nop | mul.xyzw vf14, vf10, vf02
div Q, vf11.x, vf15.x | mul.xyz vf18, vf22, vf02
nop | addy.x vf13, vf13, vf13
nop | addy.x vf17, vf17, vf17
nop | addy.x vf14, vf14, vf14
nop | addy.x vf18, vf18, vf18
nop | addz.x vf13, vf13, vf13
nop | addz.x vf17, vf17, vf17
div Q, vf12.x, vf16.x | addz.x vf14, vf14, vf14
nop | mul.xyzw vf19, vf19, Q
move.xyzw vf28, vf21 | addz.x vf18, vf18, vf18
move.xyzw vf29, vf22 | addw.x vf13, vf13, vf13
nop | addw.x vf14, vf14, vf14 :e
nop | sub.xyzw vf07, vf07, vf19
nop | mul.xyzw vf27, vf20, Q
div Q, vf13.x, vf17.x | nop
move.xyzw vf23, vf07 | nop
nop | nop
move.xyzw vf25, vf09 | nop
move.xyzw vf26, vf10 | sub.xyzw vf24, vf08, vf27
nop | nop
nop | nop
div Q, vf14.x, vf18.x | nop
nop | mul.xyzw vf28, vf28, Q
nop | nop
nop | nop
nop | nop
nop | sub.xyzw vf25, vf25, vf28
nop | nop
nop | mul.xyzw vf29, vf29, Q
nop | nop
nop | nop
nop | nop :e
nop | sub.xyzw vf26, vf26, vf29
+176
View File
@@ -0,0 +1,176 @@
.word 0x80000030
.word 0x1e2196c
.word 0x80000030
.word 0x1e221ac
.word 0x80000030
.word 0x1e742ac
.word 0x80000030
.word 0x1e74aec
.word 0x80000030
.word 0x1ec6bec
.word 0x80000030
.word 0x1ec742c
.word 0x80000030
.word 0x1f1952c
.word 0x80000030
.word 0x1f19d6c
.word 0x80000030
.word 0x1c62afe
.word 0x80000030
.word 0x1c5316e
.word 0x80000030
.word 0x1cb52fe
.word 0x80000030
.word 0x1ca5aae
.word 0x80000030
.word 0x1d07afe
.word 0x80000030
.word 0x1cf83ee
.word 0x80000030
.word 0x1d5a2fe
.word 0x80000030
.word 0x1d4ad2e
.word 0x80000030
.word 0x1c1296a
.word 0x80000030
.word 0x1c152aa
.word 0x80000030
.word 0x1c17bea
.word 0x80000030
.word 0x1c1a52a
.word 0x80000030
.word 0x852940
.word 0x80000030
.word 0x8a5280
.word 0x80000030
.word 0x8f7bc0
.word 0x80000030
.word 0x94a500
.word 0x80000030
.word 0x852d82
.word 0x80000030
.word 0x8a55c2
.word 0x80000030
.word 0x408f7e02
.word 0x80000030
.word 0x94a642
.word 0x80000030
.word 0x1e0a6dc
.word 0x80116bbc
.word 0x1e30cec
.word 0x81f73b3c
.word 0x1e40d2c
.word 0x80000030
.word 0x1e50d6c
.word 0x81f94b3c
.word 0x1e60dac
.word 0x81fa533c
.word 0x1fb462c
.word 0x80000030
.word 0x1e21aea
.word 0x80000030
.word 0x1c29bea
.word 0x801273bc
.word 0x1e2232a
.word 0x81e71b3c
.word 0x1e0e71c
.word 0x81e8233c
.word 0x1c2a42a
.word 0x81e92b3c
.word 0x10b5ac1
.word 0x81ea333c
.word 0x10f7bc1
.word 0x80000030
.word 0x1fcce6c
.word 0x80000030
.word 0x10c6301
.word 0x80000030
.word 0x1e0ef5c
.word 0x80000030
.word 0x1108401
.word 0x80000030
.word 0x10b5ac2
.word 0x80000030
.word 0x10f7bc2
.word 0x80000030
.word 0x1fdd6ac
.word 0x80000030
.word 0x10c6302
.word 0x80000030
.word 0x1108402
.word 0x80000030
.word 0x10b5ac3
.word 0x80000030
.word 0x1e24b6a
.word 0x80000030
.word 0x10c6303
.word 0x80000030
.word 0x1c2ac6a
.word 0x80000030
.word 0x1e253aa
.word 0x800f5bbc
.word 0x1c2b4aa
.word 0x80000030
.word 0x10d6b41
.word 0x80000030
.word 0x1118c41
.word 0x80000030
.word 0x10e7381
.word 0x80000030
.word 0x1129481
.word 0x80000030
.word 0x10d6b42
.word 0x80000030
.word 0x1118c42
.word 0x801063bc
.word 0x10e7382
.word 0x80000030
.word 0x1e09cdc
.word 0x81fcab3c
.word 0x1129482
.word 0x81fdb33c
.word 0x10d6b43
.word 0x80000030
.word 0x410e7383
.word 0x80000030
.word 0x1f339ec
.word 0x80000030
.word 0x1e0a6dc
.word 0x80116bbc
.word 0x2ff
.word 0x81f73b3c
.word 0x2ff
.word 0x80000030
.word 0x2ff
.word 0x81f94b3c
.word 0x2ff
.word 0x81fa533c
.word 0x1fb462c
.word 0x80000030
.word 0x2ff
.word 0x80000030
.word 0x2ff
.word 0x801273bc
.word 0x2ff
.word 0x80000030
.word 0x1e0e71c
.word 0x80000030
.word 0x2ff
.word 0x80000030
.word 0x2ff
.word 0x80000030
.word 0x2ff
.word 0x80000030
.word 0x1fcce6c
.word 0x80000030
.word 0x2ff
.word 0x80000030
.word 0x1e0ef5c
.word 0x80000030
.word 0x2ff
.word 0x80000030
.word 0x2ff
.word 0x80000030
.word 0x400002ff
.word 0x80000030
.word 0x1fdd6ac
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,681 @@
lq.xyzw vf31, 0(vi00) | nop
lq.xyzw vf30, 1(vi00) | nop
lq.xyzw vf29, 2(vi00) | nop
iaddiu vi11, vi00, 0xa2 | nop
iaddiu vi01, vi00, 0x338 | nop
mfir.x vf17, vi01 | nop
mfir.z vf17, vi01 | nop
iaddiu vi01, vi00, 0x1a8 | nop
mfir.y vf17, vi01 | nop
mfir.w vf17, vi01 | nop
iaddi vi01, vi00, 0x1 | nop
mfir.z vf25, vi01 | nop
iaddi vi01, vi00, 0x1 | itof0.xyzw vf17, vf17
mfir.z vf26, vi01 | nop
iaddi vi01, vi00, 0x1 | nop
mfir.z vf27, vi01 | nop :e
nop | addy.xyzw vf17, vf17, vf30
iaddiu vi01, vi00, 0xa4 | subx.xz vf17, vf00, vf17
isub vi11, vi01, vi11 | addy.xyzw vf28, vf00, vf30
b L1 | nop
iaddiu vi13, vi00, 0x175 | nop
iaddiu vi01, vi00, 0xa4 | subx.xz vf17, vf00, vf17
isub vi11, vi01, vi11 | addy.xyzw vf28, vf00, vf30
iaddiu vi13, vi00, 0x142 | nop
L1:
isw.y vi13, 1(vi00) | nop
iaddi vi09, vi11, 0x1 | suby.xz vf17, vf17, vf17
ilwr.y vi05, vi11 | nop
ilwr.x vi15, vi11 | nop
lqi.xyzw vf01, vi09 | nop
nop | addx.xz vf17, vf17, vf30
nop | nop
iaddi vi15, vi15, -0x1 | nop
mtir vi04, vf01.w | nop
mtir vi02, vf17.x | nop
ibne vi00, vi15, L2 | nop
mtir vi03, vf17.y | nop
nop | addz.y vf28, vf28, vf31
L2:
lqi.xyzw vf02, vi09 | nop
iadd vi01, vi04, vi02 | nop
iadd vi14, vi04, vi03 | nop
iaddi vi05, vi05, -0x1 | nop
mtir vi04, vf02.w | nop
sq.xyzw vf01, 0(vi01) | nop
ibeq vi00, vi05, L3 | nop
sq.xyzw vf01, 0(vi14) | nop
lqi.xyzw vf01, vi09 | nop
iadd vi01, vi04, vi02 | nop
iadd vi14, vi04, vi03 | nop
iaddi vi05, vi05, -0x1 | nop
mtir vi04, vf01.w | nop
sq.xyzw vf02, 0(vi01) | nop
ibne vi00, vi05, L2 | nop
sq.xyzw vf02, 0(vi14) | nop
L3:
iaddi vi09, vi09, -0x1 | nop
ilwr.x vi05, vi11 | nop
L4:
lqi.xyzw vf01, vi09 | nop
lqi.xyzw vf02, vi09 | nop
lqi.xyzw vf03, vi09 | nop
lqi.xyzw vf04, vi09 | nop
mtir vi04, vf01.w | nop
iaddi vi05, vi05, -0x1 | nop
nop | nop
nop | nop
iadd vi01, vi04, vi02 | nop
sq.xyzw vf31, 0(vi01) | nop
sq.xyzw vf01, 1(vi01) | nop
sq.xyzw vf02, 2(vi01) | nop
sq.xyzw vf03, 3(vi01) | nop
sq.xyzw vf04, 4(vi01) | nop
iadd vi01, vi04, vi03 | nop
sq.xyzw vf31, 0(vi01) | nop
sq.xyzw vf01, 1(vi01) | nop
sq.xyzw vf02, 2(vi01) | nop
sq.xyzw vf03, 3(vi01) | nop
ibne vi00, vi05, L4 | nop
sq.xyzw vf04, 4(vi01) | nop
ilwr.z vi12, vi11 | nop
ilwr.w vi06, vi11 | nop
isw.x vi09, 1(vi00) | nop
iaddi vi15, vi00, 0x1 | nop
ior vi05, vi12, vi00 | nop
iadd vi06, vi06, vi11 | nop
iadd vi07, vi06, vi12 | nop
iadd vi08, vi07, vi12 | nop
iaddi vi05, vi05, 0x1 | nop
L5:
lq.xyzw vf01, 0(vi06) | nop
lq.xyz vf03, 0(vi07) | nop
lq.xyz vf05, 0(vi08) | nop
iaddi vi05, vi05, -0x2 | nop
lq.xyzw vf08, 1(vi06) | itof0.xyzw vf01, vf01
lq.xyz vf10, 1(vi07) | itof0.xyzw vf03, vf03
lq.xyz vf12, 1(vi08) | itof12.xyzw vf05, vf05
nop | nop
sqi.xyzw vf01, vi06 | itof0.xyzw vf08, vf08
sqi.xyz vf03, vi07 | itof0.xyzw vf10, vf10
ibeq vi00, vi05, L6 | itof12.xyzw vf12, vf12
sqi.xyz vf05, vi08 | nop
sqi.xyzw vf08, vi06 | nop
sqi.xyz vf10, vi07 | nop
ibne vi15, vi05, L5 | nop
sqi.xyz vf12, vi08 | nop
L6:
nop | nop :e
nop | nop
ilw.y vi13, 1(vi00) | nop
iaddiu vi01, vi00, 0x2b7 | nop
ilwr.w vi06, vi11 | nop
ilw.x vi09, 1(vi00) | nop
isub vi13, vi01, vi13 | nop
isw.y vi13, 1(vi00) | nop
ilwr.x vi14, vi13 | nop
lq.xyzw vf21, 4(vi13) | nop
lq.xyzw vf18, 1(vi13) | nop
lq.xyzw vf19, 2(vi13) | nop
lq.xyzw vf20, 3(vi13) | nop
lq.xyzw vf22, 5(vi13) | mulaz.w ACC, vf21, vf30
iaddi vi13, vi13, 0x6 | maddw.w vf09, vf30, vf00
iadd vi06, vi06, vi11 | nop
iadd vi07, vi06, vi12 | nop
iadd vi08, vi07, vi12 | nop
move.w vf04, vf22 | miniy.w vf09, vf09, vf29
move.w vf11, vf22 | nop
lqi.xyzw vf01, vi06 | nop
lqi.xyzw vf05, vi08 | nop
lqi.xyzw vf03, vi07 | ftoi4.w vf02, vf09
lqi.xyzw vf08, vi06 | ftoi4.w vf09, vf09
lqi.xyzw vf12, vi08 | add.xyzw vf07, vf01, vf17
lqi.xyzw vf10, vi07 | mulaw.xyzw ACC, vf21, vf00
nop | maddax.xyzw ACC, vf18, vf01
nop | madday.xyzw ACC, vf19, vf01
nop | maddz.xyzw vf01, vf20, vf01
nop | add.xyzw vf14, vf08, vf17
nop | mulaw.xyzw ACC, vf21, vf00
nop | maddax.xyzw ACC, vf18, vf08
div Q, vf00.w, vf01.w | madday.xyzw ACC, vf19, vf08
nop | maddz.xyzw vf08, vf20, vf08
nop | nop
nop | nop
nop | nop
nop | nop
nop | nop
nop | mul.xyz vf02, vf01, Q
nop | mul.xyzw vf06, vf05, Q
lqi.xyzw vf01, vi06 | mul.xyz vf04, vf03, vf22
div Q, vf00.w, vf08.w | nop
lqi.xyzw vf05, vi08 | nop
mtir vi02, vf07.w | nop
lqi.xyzw vf03, vi07 | nop
nop | nop
nop | add.xyzw vf07, vf01, vf17
nop | mulaw.xyzw ACC, vf21, vf00
nop | maddax.xyzw ACC, vf18, vf01
nop | madday.xyzw ACC, vf19, vf01
nop | maddz.xyzw vf01, vf20, vf01
nop | mul.xyz vf09, vf08, Q
nop | mul.xyzw vf13, vf12, Q
L7:
lqi.xyzw vf08, vi06 | mul.xyz vf11, vf10, vf22
div Q, vf00.w, vf01.w | nop
lqi.xyzw vf12, vi08 | nop
mtir vi05, vf14.w | nop
lqi.xyzw vf10, vi07 | sub.xyzw vf15, vf02, vf09
sq.xyzw vf06, 1(vi02) | ftoi4.xyz vf02, vf02
sq.xyzw vf04, 2(vi02) | add.xyzw vf14, vf08, vf17
lqi.xyzw vf23, vi09 | mulaw.xyzw ACC, vf21, vf00
lqi.xyzw vf24, vi09 | maddax.xyzw ACC, vf18, vf08
sq.xyzw vf02, 3(vi02) | madday.xyzw ACC, vf19, vf08
isubiu vi10, vi00, 0x40 | maddz.xyzw vf08, vf20, vf08
L8:
mtir vi01, vf03.w | mul.xyz vf02, vf01, Q
sq.xyzw vf25, 0(vi02) | mul.xyzw vf06, vf05, Q
lqi.xyzw vf01, vi06 | mul.xyz vf04, vf03, vf22
div Q, vf00.w, vf08.w | nop
lqi.xyzw vf05, vi08 | nop
mtir vi02, vf07.w | nop
lqi.xyzw vf03, vi07 | sub.xyzw vf16, vf09, vf02
sq.xyzw vf13, 1(vi05) | ftoi4.xyz vf09, vf09
sq.xyzw vf11, 2(vi05) | add.xyzw vf07, vf01, vf17
nop | mulaw.xyzw ACC, vf21, vf00
nop | maddax.xyzw ACC, vf18, vf01
sq.xyzw vf09, 3(vi05) | madday.xyzw ACC, vf19, vf01
nop | maddz.xyzw vf01, vf20, vf01
mtir vi04, vf10.w | mul.xyz vf09, vf08, Q
sq.xyzw vf25, 0(vi05) | mul.xyzw vf13, vf12, Q
lqi.xyzw vf08, vi06 | mul.xyz vf11, vf10, vf22
div Q, vf00.w, vf01.w | nop
lqi.xyzw vf12, vi08 | mulay.x ACC, vf15, vf16
mtir vi05, vf14.w | msubay.x ACC, vf16, vf15
lqi.xyzw vf10, vi07 | sub.xyzw vf15, vf02, vf09
sq.xyzw vf06, 1(vi02) | ftoi4.xyz vf02, vf02
sq.xyzw vf04, 2(vi02) | add.xyzw vf14, vf08, vf17
fsand vi03, 0x2 | mulaw.xyzw ACC, vf21, vf00
ibltz vi01, L27 | maddax.xyzw ACC, vf18, vf08
sq.xyzw vf02, 3(vi02) | madday.xyzw ACC, vf19, vf08
L9:
ibeq vi01, vi03, L16 | maddz.xyzw vf08, vf20, vf08
mtir vi01, vf03.w | mul.xyz vf02, vf01, Q
b L14 | nop
sq.xyzw vf23, 0(vi02) | mul.xyzw vf06, vf05, Q
nop | mul.xyzw vf06, vf05, Q
L10:
lqi.xyzw vf01, vi06 | mul.xyz vf04, vf03, vf22
div Q, vf00.w, vf08.w | nop
lqi.xyzw vf05, vi08 | nop
mtir vi02, vf07.w | nop
lqi.xyzw vf03, vi07 | sub.xyzw vf16, vf09, vf02
sq.xyzw vf13, 1(vi05) | ftoi4.xyz vf09, vf09
sq.xyzw vf11, 2(vi05) | add.xyzw vf07, vf01, vf17
lqi.xyzw vf23, vi09 | mulaw.xyzw ACC, vf21, vf00
lqi.xyzw vf24, vi09 | maddax.xyzw ACC, vf18, vf01
sq.xyzw vf09, 3(vi05) | madday.xyzw ACC, vf19, vf01
isubiu vi10, vi00, 0x40 | maddz.xyzw vf01, vf20, vf01
L11:
mtir vi04, vf10.w | mul.xyz vf09, vf08, Q
sq.xyzw vf25, 0(vi05) | mul.xyzw vf13, vf12, Q
lqi.xyzw vf08, vi06 | mul.xyz vf11, vf10, vf22
div Q, vf00.w, vf01.w | nop
lqi.xyzw vf12, vi08 | nop
mtir vi05, vf14.w | nop
lqi.xyzw vf10, vi07 | sub.xyzw vf15, vf02, vf09
sq.xyzw vf06, 1(vi02) | ftoi4.xyz vf02, vf02
sq.xyzw vf04, 2(vi02) | add.xyzw vf14, vf08, vf17
nop | mulaw.xyzw ACC, vf21, vf00
nop | maddax.xyzw ACC, vf18, vf08
sq.xyzw vf02, 3(vi02) | madday.xyzw ACC, vf19, vf08
nop | maddz.xyzw vf08, vf20, vf08
mtir vi01, vf03.w | mul.xyz vf02, vf01, Q
sq.xyzw vf25, 0(vi02) | mul.xyzw vf06, vf05, Q
lqi.xyzw vf01, vi06 | mul.xyz vf04, vf03, vf22
div Q, vf00.w, vf08.w | nop
lqi.xyzw vf05, vi08 | mulay.x ACC, vf15, vf16
mtir vi02, vf07.w | msubay.x ACC, vf16, vf15
lqi.xyzw vf03, vi07 | sub.xyzw vf16, vf09, vf02
sq.xyzw vf13, 1(vi05) | ftoi4.xyz vf09, vf09
sq.xyzw vf11, 2(vi05) | add.xyzw vf07, vf01, vf17
fsand vi03, 0x2 | mulaw.xyzw ACC, vf21, vf00
ibltz vi04, L26 | maddax.xyzw ACC, vf18, vf01
sq.xyzw vf09, 3(vi05) | madday.xyzw ACC, vf19, vf01
L12:
ibeq vi04, vi03, L17 | maddz.xyzw vf01, vf20, vf01
mtir vi04, vf10.w | mul.xyz vf09, vf08, Q
b L15 | nop
sq.xyzw vf23, 0(vi05) | mul.xyzw vf13, vf12, Q
L13:
sq.xyzw vf26, 0(vi02) | mul.xyzw vf06, vf05, Q
L14:
lqi.xyzw vf01, vi06 | mul.xyz vf04, vf03, vf22
div Q, vf00.w, vf08.w | nop
lqi.xyzw vf05, vi08 | mulay.x ACC, vf15, vf16
mtir vi02, vf07.w | msubay.x ACC, vf16, vf15
lqi.xyzw vf03, vi07 | sub.xyzw vf16, vf09, vf02
sq.xyzw vf13, 1(vi05) | ftoi4.xyz vf09, vf09
sq.xyzw vf11, 2(vi05) | add.xyzw vf07, vf01, vf17
fsand vi03, 0x2 | mulaw.xyzw ACC, vf21, vf00
ibltz vi04, L22 | maddax.xyzw ACC, vf18, vf01
sq.xyzw vf09, 3(vi05) | madday.xyzw ACC, vf19, vf01
ibeq vi04, vi03, L17 | maddz.xyzw vf01, vf20, vf01
mtir vi04, vf10.w | mul.xyz vf09, vf08, Q
sq.xyzw vf26, 0(vi05) | mul.xyzw vf13, vf12, Q
L15:
lqi.xyzw vf08, vi06 | mul.xyz vf11, vf10, vf22
div Q, vf00.w, vf01.w | nop
lqi.xyzw vf12, vi08 | mulay.x ACC, vf15, vf16
mtir vi05, vf14.w | msubay.x ACC, vf16, vf15
lqi.xyzw vf10, vi07 | sub.xyzw vf15, vf02, vf09
sq.xyzw vf06, 1(vi02) | ftoi4.xyz vf02, vf02
sq.xyzw vf04, 2(vi02) | add.xyzw vf14, vf08, vf17
fsand vi03, 0x2 | mulaw.xyzw ACC, vf21, vf00
ibltz vi01, L23 | maddax.xyzw ACC, vf18, vf08
sq.xyzw vf02, 3(vi02) | madday.xyzw ACC, vf19, vf08
ibne vi01, vi03, L13 | maddz.xyzw vf08, vf20, vf08
mtir vi01, vf03.w | mul.xyz vf02, vf01, Q
L16:
b L19 | nop
sq.xyzw vf24, 0(vi02) | mul.xyzw vf06, vf05, Q
L17:
b L20 | nop
sq.xyzw vf24, 0(vi05) | mul.xyzw vf13, vf12, Q
L18:
sq.xyzw vf27, 0(vi02) | mul.xyzw vf06, vf05, Q
L19:
lqi.xyzw vf01, vi06 | mul.xyz vf04, vf03, vf22
div Q, vf00.w, vf08.w | nop
lqi.xyzw vf05, vi08 | mulax.y ACC, vf15, vf16
mtir vi02, vf07.w | msubax.y ACC, vf16, vf15
lqi.xyzw vf03, vi07 | sub.xyzw vf16, vf09, vf02
sq.xyzw vf13, 1(vi05) | ftoi4.xyz vf09, vf09
sq.xyzw vf11, 2(vi05) | add.xyzw vf07, vf01, vf17
fsand vi03, 0x2 | mulaw.xyzw ACC, vf21, vf00
ibltz vi04, L24 | maddax.xyzw ACC, vf18, vf01
sq.xyzw vf09, 3(vi05) | madday.xyzw ACC, vf19, vf01
ibeq vi04, vi03, L21 | maddz.xyzw vf01, vf20, vf01
mtir vi04, vf10.w | mul.xyz vf09, vf08, Q
sq.xyzw vf27, 0(vi05) | mul.xyzw vf13, vf12, Q
L20:
lqi.xyzw vf08, vi06 | mul.xyz vf11, vf10, vf22
div Q, vf00.w, vf01.w | nop
lqi.xyzw vf12, vi08 | mulax.y ACC, vf15, vf16
mtir vi05, vf14.w | msubax.y ACC, vf16, vf15
lqi.xyzw vf10, vi07 | sub.xyzw vf15, vf02, vf09
sq.xyzw vf06, 1(vi02) | ftoi4.xyz vf02, vf02
sq.xyzw vf04, 2(vi02) | add.xyzw vf14, vf08, vf17
fsand vi03, 0x2 | mulaw.xyzw ACC, vf21, vf00
ibltz vi01, L25 | maddax.xyzw ACC, vf18, vf08
sq.xyzw vf02, 3(vi02) | madday.xyzw ACC, vf19, vf08
ibne vi01, vi03, L18 | maddz.xyzw vf08, vf20, vf08
mtir vi01, vf03.w | mul.xyz vf02, vf01, Q
b L14 | nop
sq.xyzw vf23, 0(vi02) | mul.xyzw vf06, vf05, Q
L21:
b L15 | nop
sq.xyzw vf23, 0(vi05) | mul.xyzw vf13, vf12, Q
L22:
ibne vi10, vi04, L28 | nop
iaddiu vi04, vi04, 0x80 | nop
lqi.xyzw vf23, vi09 | nop
b L11 | nop
lqi.xyzw vf24, vi09 | maddz.xyzw vf01, vf20, vf01
L23:
ibne vi10, vi01, L33 | nop
iaddiu vi01, vi01, 0x80 | nop
lqi.xyzw vf23, vi09 | nop
b L8 | nop
lqi.xyzw vf24, vi09 | maddz.xyzw vf08, vf20, vf08
L24:
ibne vi10, vi04, L38 | nop
iaddiu vi04, vi04, 0x80 | nop
lqi.xyzw vf23, vi09 | nop
b L11 | nop
lqi.xyzw vf24, vi09 | maddz.xyzw vf01, vf20, vf01
L25:
ibne vi10, vi01, L43 | nop
iaddiu vi01, vi01, 0x80 | nop
lqi.xyzw vf23, vi09 | nop
b L8 | nop
lqi.xyzw vf24, vi09 | maddz.xyzw vf08, vf20, vf08
L26:
ibeq vi10, vi04, L12 | nop
iaddiu vi04, vi04, 0x80 | nop
ilwr.w vi06, vi11 | maddz.xyzw vf01, vf20, vf01
mr32.xyzw vf17, vf17 | mul.xyz vf09, vf08, Q
lqi.xyzw vf18, vi13 | nop
lqi.xyzw vf19, vi13 | nop
lqi.xyzw vf20, vi13 | nop
lqi.xyzw vf21, vi13 | nop
iadd vi06, vi06, vi11 | nop
iadd vi07, vi06, vi12 | nop
iadd vi08, vi07, vi12 | nop
ibeq vi04, vi03, L48 | nop
mtir vi04, vf10.w | nop
b L29 | nop
sq.xyzw vf23, 0(vi05) | mul.xyzw vf13, vf12, Q
L27:
ibeq vi10, vi01, L9 | nop
iaddiu vi01, vi01, 0x80 | nop
ilwr.w vi06, vi11 | maddz.xyzw vf08, vf20, vf08
mr32.xyzw vf17, vf17 | mul.xyz vf02, vf01, Q
lqi.xyzw vf18, vi13 | nop
lqi.xyzw vf19, vi13 | nop
lqi.xyzw vf20, vi13 | nop
lqi.xyzw vf21, vi13 | nop
iadd vi06, vi06, vi11 | nop
iadd vi07, vi06, vi12 | nop
iadd vi08, vi07, vi12 | nop
ibeq vi01, vi03, L52 | nop
mtir vi01, vf03.w | nop
b L34 | nop
sq.xyzw vf23, 0(vi02) | mul.xyzw vf06, vf05, Q
L28:
ilwr.w vi06, vi11 | maddz.xyzw vf01, vf20, vf01
mr32.xyzw vf17, vf17 | mul.xyz vf09, vf08, Q
lqi.xyzw vf18, vi13 | nop
lqi.xyzw vf19, vi13 | nop
lqi.xyzw vf20, vi13 | nop
lqi.xyzw vf21, vi13 | nop
iadd vi06, vi06, vi11 | nop
iadd vi07, vi06, vi12 | nop
iadd vi08, vi07, vi12 | nop
ibeq vi04, vi03, L48 | nop
mtir vi04, vf10.w | nop
sq.xyzw vf26, 0(vi05) | mul.xyzw vf13, vf12, Q
L29:
lqi.xyzw vf08, vi06 | mul.xyz vf11, vf10, vf22
div Q, vf00.w, vf01.w | nop
lqi.xyzw vf12, vi08 | mulay.x ACC, vf15, vf16
mtir vi05, vf14.w | msubay.x ACC, vf16, vf15
lqi.xyzw vf10, vi07 | sub.xyzw vf15, vf02, vf09
sq.xyzw vf06, 1(vi02) | ftoi4.xyz vf02, vf02
sq.xyzw vf04, 2(vi02) | add.xyzw vf14, vf08, vf17
fsand vi03, 0x2 | mulaw.xyzw ACC, vf21, vf00
ilw.x vi09, 1(vi00) | maddax.xyzw ACC, vf18, vf08
sq.xyzw vf02, 3(vi02) | madday.xyzw ACC, vf19, vf08
ibeq vi01, vi03, L49 | maddz.xyzw vf08, vf20, vf08
mtir vi01, vf03.w | mul.xyz vf02, vf01, Q
sq.xyzw vf26, 0(vi02) | mul.xyzw vf06, vf05, Q
L30:
lqi.xyzw vf01, vi06 | mul.xyz vf04, vf03, vf22
div Q, vf00.w, vf08.w | nop
lqi.xyzw vf05, vi08 | mulay.x ACC, vf15, vf16
mtir vi02, vf07.w | msubay.x ACC, vf16, vf15
lqi.xyzw vf03, vi07 | sub.xyzw vf16, vf09, vf02
sq.xyzw vf13, 1(vi05) | ftoi4.xyz vf09, vf09
sq.xyzw vf11, 2(vi05) | add.xyzw vf07, vf01, vf17
fsand vi03, 0x2 | mulaw.xyzw ACC, vf21, vf00
mtir vi10, vf28.x | maddax.xyzw ACC, vf18, vf01
sq.xyzw vf09, 3(vi05) | madday.xyzw ACC, vf19, vf01
lqi.xyzw vf22, vi13 | mulz.w vf09, vf21, vf30
ibeq vi04, vi03, L50 | maddz.xyzw vf01, vf20, vf01
mtir vi04, vf10.w | mul.xyz vf09, vf08, Q
sq.xyzw vf26, 0(vi05) | mul.xyzw vf13, vf12, Q
L31:
lqi.xyzw vf08, vi06 | mul.xyz vf11, vf10, vf22
div Q, vf00.w, vf01.w | mulay.x ACC, vf15, vf16
lqi.xyzw vf12, vi08 | addw.w vf09, vf30, vf09
mtir vi05, vf14.w | msubay.x ACC, vf16, vf15
lqi.xyzw vf10, vi07 | sub.xyzw vf15, vf02, vf09
sq.xyzw vf06, 1(vi02) | ftoi4.xyz vf02, vf02
sq.xyzw vf04, 2(vi02) | add.xyzw vf14, vf08, vf17
fsand vi03, 0x2 | mulaw.xyzw ACC, vf21, vf00
iaddi vi14, vi14, -0x1 | maddax.xyzw ACC, vf18, vf08
sq.xyzw vf02, 3(vi02) | madday.xyzw ACC, vf19, vf08
mtir vi15, vf17.x | miniy.w vf09, vf09, vf29
ibeq vi01, vi03, L51 | maddz.xyzw vf08, vf20, vf08
mtir vi01, vf03.w | mul.xyz vf02, vf01, Q
sq.xyzw vf26, 0(vi02) | mul.xyzw vf06, vf05, Q
L32:
move.w vf04, vf22 | addy.x vf28, vf00, vf28
move.w vf11, vf22 | nop
iadd vi15, vi15, vi10 | nop
ibne vi00, vi14, L10 | ftoi4.w vf02, vf09
xgkick vi15 | ftoi4.w vf09, vf09
nop | nop :e
nop | nop
L33:
ilwr.w vi06, vi11 | maddz.xyzw vf08, vf20, vf08
mr32.xyzw vf17, vf17 | mul.xyz vf02, vf01, Q
lqi.xyzw vf18, vi13 | nop
lqi.xyzw vf19, vi13 | nop
lqi.xyzw vf20, vi13 | nop
lqi.xyzw vf21, vi13 | nop
iadd vi06, vi06, vi11 | nop
iadd vi07, vi06, vi12 | nop
iadd vi08, vi07, vi12 | nop
ibeq vi01, vi03, L52 | nop
mtir vi01, vf03.w | nop
sq.xyzw vf26, 0(vi02) | mul.xyzw vf06, vf05, Q
L34:
lqi.xyzw vf01, vi06 | mul.xyz vf04, vf03, vf22
div Q, vf00.w, vf08.w | nop
lqi.xyzw vf05, vi08 | mulay.x ACC, vf15, vf16
mtir vi02, vf07.w | msubay.x ACC, vf16, vf15
lqi.xyzw vf03, vi07 | sub.xyzw vf16, vf09, vf02
sq.xyzw vf13, 1(vi05) | ftoi4.xyz vf09, vf09
sq.xyzw vf11, 2(vi05) | add.xyzw vf07, vf01, vf17
fsand vi03, 0x2 | mulaw.xyzw ACC, vf21, vf00
ilw.x vi09, 1(vi00) | maddax.xyzw ACC, vf18, vf01
sq.xyzw vf09, 3(vi05) | madday.xyzw ACC, vf19, vf01
ibeq vi04, vi03, L53 | maddz.xyzw vf01, vf20, vf01
mtir vi04, vf10.w | mul.xyz vf09, vf08, Q
sq.xyzw vf26, 0(vi05) | mul.xyzw vf13, vf12, Q
L35:
lqi.xyzw vf08, vi06 | mul.xyz vf11, vf10, vf22
div Q, vf00.w, vf01.w | nop
lqi.xyzw vf12, vi08 | mulay.x ACC, vf15, vf16
mtir vi05, vf14.w | msubay.x ACC, vf16, vf15
lqi.xyzw vf10, vi07 | sub.xyzw vf15, vf02, vf09
sq.xyzw vf06, 1(vi02) | ftoi4.xyz vf02, vf02
sq.xyzw vf04, 2(vi02) | add.xyzw vf14, vf08, vf17
fsand vi03, 0x2 | mulaw.xyzw ACC, vf21, vf00
mtir vi10, vf28.x | maddax.xyzw ACC, vf18, vf08
sq.xyzw vf02, 3(vi02) | madday.xyzw ACC, vf19, vf08
lqi.xyzw vf22, vi13 | mulz.w vf02, vf21, vf30
ibeq vi01, vi03, L54 | maddz.xyzw vf08, vf20, vf08
mtir vi01, vf03.w | mul.xyz vf02, vf01, Q
sq.xyzw vf26, 0(vi02) | mul.xyzw vf06, vf05, Q
L36:
lqi.xyzw vf01, vi06 | mul.xyz vf04, vf03, vf22
div Q, vf00.w, vf08.w | mulay.x ACC, vf15, vf16
lqi.xyzw vf05, vi08 | addw.w vf02, vf30, vf02
mtir vi02, vf07.w | msubay.x ACC, vf16, vf15
lqi.xyzw vf03, vi07 | sub.xyzw vf16, vf09, vf02
sq.xyzw vf13, 1(vi05) | ftoi4.xyz vf09, vf09
sq.xyzw vf11, 2(vi05) | add.xyzw vf07, vf01, vf17
fsand vi03, 0x2 | mulaw.xyzw ACC, vf21, vf00
iaddi vi14, vi14, -0x1 | maddax.xyzw ACC, vf18, vf01
sq.xyzw vf09, 3(vi05) | madday.xyzw ACC, vf19, vf01
mtir vi15, vf17.x | miniy.w vf02, vf02, vf29
ibeq vi04, vi03, L55 | maddz.xyzw vf01, vf20, vf01
mtir vi04, vf10.w | mul.xyz vf09, vf08, Q
sq.xyzw vf26, 0(vi05) | mul.xyzw vf13, vf12, Q
L37:
move.w vf04, vf22 | addy.x vf28, vf00, vf28
move.w vf11, vf22 | nop
iadd vi15, vi15, vi10 | nop
ibne vi00, vi14, L7 | ftoi4.w vf09, vf02
xgkick vi15 | ftoi4.w vf02, vf02
nop | nop :e
nop | nop
L38:
ilwr.w vi06, vi11 | maddz.xyzw vf01, vf20, vf01
mr32.xyzw vf17, vf17 | mul.xyz vf09, vf08, Q
lqi.xyzw vf18, vi13 | nop
lqi.xyzw vf19, vi13 | nop
lqi.xyzw vf20, vi13 | nop
lqi.xyzw vf21, vi13 | nop
iadd vi06, vi06, vi11 | nop
iadd vi07, vi06, vi12 | nop
iadd vi08, vi07, vi12 | nop
ibeq vi04, vi03, L56 | nop
mtir vi04, vf10.w | nop
sq.xyzw vf27, 0(vi05) | mul.xyzw vf13, vf12, Q
L39:
lqi.xyzw vf08, vi06 | mul.xyz vf11, vf10, vf22
div Q, vf00.w, vf01.w | nop
lqi.xyzw vf12, vi08 | mulax.y ACC, vf15, vf16
mtir vi05, vf14.w | msubax.y ACC, vf16, vf15
lqi.xyzw vf10, vi07 | sub.xyzw vf15, vf02, vf09
sq.xyzw vf06, 1(vi02) | ftoi4.xyz vf02, vf02
sq.xyzw vf04, 2(vi02) | add.xyzw vf14, vf08, vf17
fsand vi03, 0x2 | mulaw.xyzw ACC, vf21, vf00
ilw.x vi09, 1(vi00) | maddax.xyzw ACC, vf18, vf08
sq.xyzw vf02, 3(vi02) | madday.xyzw ACC, vf19, vf08
ibeq vi01, vi03, L57 | maddz.xyzw vf08, vf20, vf08
mtir vi01, vf03.w | mul.xyz vf02, vf01, Q
sq.xyzw vf27, 0(vi02) | mul.xyzw vf06, vf05, Q
L40:
lqi.xyzw vf01, vi06 | mul.xyz vf04, vf03, vf22
div Q, vf00.w, vf08.w | nop
lqi.xyzw vf05, vi08 | mulax.y ACC, vf15, vf16
mtir vi02, vf07.w | msubax.y ACC, vf16, vf15
lqi.xyzw vf03, vi07 | sub.xyzw vf16, vf09, vf02
sq.xyzw vf13, 1(vi05) | ftoi4.xyz vf09, vf09
sq.xyzw vf11, 2(vi05) | add.xyzw vf07, vf01, vf17
fsand vi03, 0x2 | mulaw.xyzw ACC, vf21, vf00
mtir vi10, vf28.x | maddax.xyzw ACC, vf18, vf01
sq.xyzw vf09, 3(vi05) | madday.xyzw ACC, vf19, vf01
lqi.xyzw vf22, vi13 | mulz.w vf09, vf21, vf30
ibeq vi04, vi03, L58 | maddz.xyzw vf01, vf20, vf01
mtir vi04, vf10.w | mul.xyz vf09, vf08, Q
sq.xyzw vf27, 0(vi05) | mul.xyzw vf13, vf12, Q
L41:
lqi.xyzw vf08, vi06 | mul.xyz vf11, vf10, vf22
div Q, vf00.w, vf01.w | mulax.y ACC, vf15, vf16
lqi.xyzw vf12, vi08 | addw.w vf09, vf30, vf09
mtir vi05, vf14.w | msubax.y ACC, vf16, vf15
lqi.xyzw vf10, vi07 | sub.xyzw vf15, vf02, vf09
sq.xyzw vf06, 1(vi02) | ftoi4.xyz vf02, vf02
sq.xyzw vf04, 2(vi02) | add.xyzw vf14, vf08, vf17
fsand vi03, 0x2 | mulaw.xyzw ACC, vf21, vf00
iaddi vi14, vi14, -0x1 | maddax.xyzw ACC, vf18, vf08
sq.xyzw vf02, 3(vi02) | madday.xyzw ACC, vf19, vf08
mtir vi15, vf17.x | miniy.w vf09, vf09, vf29
ibeq vi01, vi03, L59 | maddz.xyzw vf08, vf20, vf08
mtir vi01, vf03.w | mul.xyz vf02, vf01, Q
sq.xyzw vf27, 0(vi02) | mul.xyzw vf06, vf05, Q
L42:
move.w vf04, vf22 | addy.x vf28, vf00, vf28
move.w vf11, vf22 | nop
iadd vi15, vi15, vi10 | nop
ibne vi00, vi14, L10 | ftoi4.w vf02, vf09
xgkick vi15 | ftoi4.w vf09, vf09
nop | nop :e
nop | nop
L43:
ilwr.w vi06, vi11 | maddz.xyzw vf08, vf20, vf08
mr32.xyzw vf17, vf17 | mul.xyz vf02, vf01, Q
lqi.xyzw vf18, vi13 | nop
lqi.xyzw vf19, vi13 | nop
lqi.xyzw vf20, vi13 | nop
lqi.xyzw vf21, vi13 | nop
iadd vi06, vi06, vi11 | nop
iadd vi07, vi06, vi12 | nop
iadd vi08, vi07, vi12 | nop
ibeq vi01, vi03, L60 | nop
mtir vi01, vf03.w | nop
sq.xyzw vf27, 0(vi02) | mul.xyzw vf06, vf05, Q
L44:
lqi.xyzw vf01, vi06 | mul.xyz vf04, vf03, vf22
div Q, vf00.w, vf08.w | nop
lqi.xyzw vf05, vi08 | mulax.y ACC, vf15, vf16
mtir vi02, vf07.w | msubax.y ACC, vf16, vf15
lqi.xyzw vf03, vi07 | sub.xyzw vf16, vf09, vf02
sq.xyzw vf13, 1(vi05) | ftoi4.xyz vf09, vf09
sq.xyzw vf11, 2(vi05) | add.xyzw vf07, vf01, vf17
fsand vi03, 0x2 | mulaw.xyzw ACC, vf21, vf00
ilw.x vi09, 1(vi00) | maddax.xyzw ACC, vf18, vf01
sq.xyzw vf09, 3(vi05) | madday.xyzw ACC, vf19, vf01
ibeq vi04, vi03, L61 | maddz.xyzw vf01, vf20, vf01
mtir vi04, vf10.w | mul.xyz vf09, vf08, Q
sq.xyzw vf27, 0(vi05) | mul.xyzw vf13, vf12, Q
L45:
lqi.xyzw vf08, vi06 | mul.xyz vf11, vf10, vf22
div Q, vf00.w, vf01.w | nop
lqi.xyzw vf12, vi08 | mulax.y ACC, vf15, vf16
mtir vi05, vf14.w | msubax.y ACC, vf16, vf15
lqi.xyzw vf10, vi07 | sub.xyzw vf15, vf02, vf09
sq.xyzw vf06, 1(vi02) | ftoi4.xyz vf02, vf02
sq.xyzw vf04, 2(vi02) | add.xyzw vf14, vf08, vf17
fsand vi03, 0x2 | mulaw.xyzw ACC, vf21, vf00
mtir vi10, vf28.x | maddax.xyzw ACC, vf18, vf08
sq.xyzw vf02, 3(vi02) | madday.xyzw ACC, vf19, vf08
lqi.xyzw vf22, vi13 | mulz.w vf02, vf21, vf30
ibeq vi01, vi03, L62 | maddz.xyzw vf08, vf20, vf08
mtir vi01, vf03.w | mul.xyz vf02, vf01, Q
sq.xyzw vf27, 0(vi02) | mul.xyzw vf06, vf05, Q
L46:
lqi.xyzw vf01, vi06 | mul.xyz vf04, vf03, vf22
div Q, vf00.w, vf08.w | mulax.y ACC, vf15, vf16
lqi.xyzw vf05, vi08 | addw.w vf02, vf30, vf02
mtir vi02, vf07.w | msubax.y ACC, vf16, vf15
lqi.xyzw vf03, vi07 | sub.xyzw vf16, vf09, vf02
sq.xyzw vf13, 1(vi05) | ftoi4.xyz vf09, vf09
sq.xyzw vf11, 2(vi05) | add.xyzw vf07, vf01, vf17
fsand vi03, 0x2 | mulaw.xyzw ACC, vf21, vf00
iaddi vi14, vi14, -0x1 | maddax.xyzw ACC, vf18, vf01
sq.xyzw vf09, 3(vi05) | madday.xyzw ACC, vf19, vf01
mtir vi15, vf17.x | miniy.w vf02, vf02, vf29
ibeq vi04, vi03, L63 | maddz.xyzw vf01, vf20, vf01
mtir vi04, vf10.w | mul.xyz vf09, vf08, Q
sq.xyzw vf27, 0(vi05) | mul.xyzw vf13, vf12, Q
L47:
move.w vf04, vf22 | addy.x vf28, vf00, vf28
move.w vf11, vf22 | nop
iadd vi15, vi15, vi10 | nop
ibne vi00, vi14, L7 | ftoi4.w vf09, vf02
xgkick vi15 | ftoi4.w vf02, vf02
nop | nop :e
nop | nop
L48:
b L39 | nop
sq.xyzw vf24, 0(vi05) | mul.xyzw vf13, vf12, Q
L49:
b L40 | nop
sq.xyzw vf24, 0(vi02) | mul.xyzw vf06, vf05, Q
L50:
b L41 | nop
sq.xyzw vf24, 0(vi05) | mul.xyzw vf13, vf12, Q
L51:
b L42 | nop
sq.xyzw vf24, 0(vi02) | mul.xyzw vf06, vf05, Q
L52:
b L44 | nop
sq.xyzw vf24, 0(vi02) | mul.xyzw vf06, vf05, Q
L53:
b L45 | nop
sq.xyzw vf24, 0(vi05) | mul.xyzw vf13, vf12, Q
L54:
b L46 | nop
sq.xyzw vf24, 0(vi02) | mul.xyzw vf06, vf05, Q
L55:
b L47 | nop
sq.xyzw vf24, 0(vi05) | mul.xyzw vf13, vf12, Q
L56:
b L29 | nop
sq.xyzw vf23, 0(vi05) | mul.xyzw vf13, vf12, Q
L57:
b L30 | nop
sq.xyzw vf23, 0(vi02) | mul.xyzw vf06, vf05, Q
L58:
b L31 | nop
sq.xyzw vf23, 0(vi05) | mul.xyzw vf13, vf12, Q
L59:
b L32 | nop
sq.xyzw vf23, 0(vi02) | mul.xyzw vf06, vf05, Q
L60:
b L34 | nop
sq.xyzw vf23, 0(vi02) | mul.xyzw vf06, vf05, Q
L61:
b L35 | nop
sq.xyzw vf23, 0(vi05) | mul.xyzw vf13, vf12, Q
L62:
b L36 | nop
sq.xyzw vf23, 0(vi02) | mul.xyzw vf06, vf05, Q
L63:
b L37 | nop
sq.xyzw vf23, 0(vi05) | mul.xyzw vf13, vf12, Q
File diff suppressed because it is too large Load Diff
+215
View File
@@ -0,0 +1,215 @@
iaddi vi14, vi00, 0x0 | nop
lq.xyzw vf28, 291(vi00) | nop
lq.xyzw vf29, 292(vi00) | nop
lq.xyzw vf30, 293(vi00) | nop
lq.xyzw vf31, 294(vi00) | nop
lq.xyzw vf27, 295(vi00) | nop
lq.xyzw vf26, 296(vi00) | nop :e
lq.xyzw vf25, 297(vi00) | nop
L1:
lq.xyzw vf05, 299(vi00) | nop
lq.xyzw vf07, 308(vi00) | nop
lq.xyzw vf08, 307(vi00) | nop
ior vi04, vi14, vi00 | nop
iaddiu vi02, vi00, 0x100 | mulax.xyzw ACC, vf28, vf01
lq.xyzw vf04, 305(vi00) | madday.xyzw ACC, vf29, vf01
iaddiu vi03, vi00, 0x11 | maddz.xyzw vf01, vf30, vf01
sqi.xyzw vf07, vi04 | nop
sqi.xyzw vf08, vi04 | nop
sqi.xyzw vf04, vi04 | nop
sqi.xyzw vf05, vi04 | nop
sq.x vf03, -1(vi04) | nop
sqi.xyzw vf01, vi04 | nop
L2:
lqi.xyzw vf06, vi02 | nop
sqi.xyzw vf05, vi04 | nop
sq.x vf09, -1(vi04) | nop
nop | nop
nop | mulx.xyzw vf06, vf06, vf02
nop | nop
nop | nop
nop | nop
nop | add.xyzw vf06, vf06, vf01
iaddi vi03, vi03, -0x1 | nop
nop | nop
ibne vi00, vi03, L2 | nop
sqi.xyzw vf06, vi04 | nop
iaddi vi04, vi14, 0x3 | nop
iaddi vi05, vi00, 0x0 | nop
iaddi vi06, vi00, 0x0 | nop
iaddiu vi03, vi00, 0x11 | nop
lq.xyzw vf07, 1(vi04) | nop
iaddi vi04, vi04, 0x2 | nop
nop | nop
nop | nop
div Q, vf25.x, vf07.w | mul.xyzw vf08, vf07, vf27
move.z vf07, vf00 | nop
nop | nop
nop | nop
nop | clipw.xyz vf08, vf08
nop | nop
nop | nop
iaddiu vi01, vi00, 0x2f | mul.xy vf07, vf07, Q
fcget vi05 | nop
iand vi05, vi05, vi01 | nop
nop | nop
nop | add.xyzw vf07, vf07, vf26
nop | nop
nop | nop
nop | nop
nop | maxx.w vf07, vf07, vf00
nop | nop
nop | nop
nop | nop
nop | ftoi4.xyzw vf07, vf07
nop | nop
nop | nop
nop | nop
sq.xyzw vf07, -1(vi04) | nop
L3:
lq.xyzw vf07, 1(vi04) | nop
iaddi vi04, vi04, 0x2 | nop
nop | nop
nop | nop
div Q, vf25.x, vf07.w | mul.xyzw vf08, vf07, vf27
move.z vf07, vf00 | nop
nop | nop
nop | nop
nop | clipw.xyz vf08, vf08
nop | nop
nop | nop
iaddiu vi01, vi00, 0x2f | mul.xy vf07, vf07, Q
fcget vi07 | nop
iand vi07, vi07, vi01 | nop
iand vi06, vi06, vi05 | nop
iand vi06, vi06, vi07 | add.xyzw vf07, vf07, vf26
nop | nop
ibne vi00, vi06, L4 | nop
nop | nop
nop | maxx.w vf07, vf07, vf00
nop | nop
nop | nop
nop | nop
nop | ftoi4.xyzw vf07, vf07
iaddi vi03, vi03, -0x1 | nop
ior vi06, vi07, vi00 | nop
ibne vi00, vi03, L3 | nop
sq.xyzw vf07, -1(vi04) | nop
b L5 | nop
xgkick vi14 | nop
L4:
nop | maxx.w vf07, vf07, vf00
nop | nop
nop | nop
nop | nop
nop | addw.w vf07, vf07, vf25
nop | nop
nop | nop
nop | nop
nop | ftoi4.xyzw vf07, vf07
iaddi vi03, vi03, -0x1 | nop
ior vi06, vi07, vi00 | nop
ibne vi00, vi03, L3 | nop
sq.xyzw vf07, -1(vi04) | nop
xgkick vi14 | nop
L5:
iaddiu vi01, vi00, 0x80 | nop
isub vi14, vi01, vi14 | nop
iaddi vi08, vi00, 0x2 | nop
L6:
iaddiu vi02, vi00, 0x100 | nop
lq.xyzw vf04, 306(vi00) | nop
iaddiu vi03, vi00, 0x11 | nop
ior vi04, vi14, vi00 | nop
mr32.xyzw vf03, vf03 | nop
mr32.xyzw vf09, vf09 | nop
sqi.xyzw vf04, vi04 | nop
nop | nop
L7:
lqi.xyzw vf06, vi02 | nop
sq.xyzw vf05, 0(vi04) | nop
sq.x vf03, 0(vi04) | nop
sq.xyzw vf05, 2(vi04) | nop
sq.x vf09, 2(vi04) | mulx.xyzw vf10, vf06, vf02
iaddi vi04, vi04, 0x4 | muly.xyzw vf06, vf06, vf02
nop | nop
nop | nop
nop | add.xyzw vf10, vf10, vf01
nop | add.xyzw vf06, vf06, vf01
nop | nop
iaddi vi03, vi03, -0x1 | nop
sq.xyzw vf10, -3(vi04) | nop
ibne vi00, vi03, L7 | nop
sq.xyzw vf06, -1(vi04) | nop
iaddi vi04, vi14, 0x1 | nop
iaddi vi05, vi00, 0x0 | nop
iaddi vi06, vi00, 0x0 | nop
iaddiu vi03, vi00, 0x22 | nop
L8:
lq.xyzw vf07, 1(vi04) | nop
iaddi vi04, vi04, 0x2 | nop
nop | nop
nop | nop
div Q, vf25.x, vf07.w | mul.xyzw vf08, vf07, vf27
move.z vf07, vf00 | nop
nop | nop
nop | nop
nop | clipw.xyz vf08, vf08
nop | nop
nop | nop
iaddiu vi01, vi00, 0x2f | mul.xy vf07, vf07, Q
fcget vi07 | nop
iand vi07, vi07, vi01 | nop
iand vi05, vi05, vi06 | nop
iand vi05, vi05, vi07 | add.xyzw vf07, vf07, vf26
nop | nop
ibne vi00, vi05, L9 | nop
nop | nop
nop | maxx.w vf07, vf07, vf00
nop | nop
nop | nop
nop | nop
ior vi05, vi06, vi00 | ftoi4.xyzw vf07, vf07
iaddi vi03, vi03, -0x1 | nop
ior vi06, vi07, vi00 | nop
ibne vi00, vi03, L8 | nop
sq.xyzw vf07, -1(vi04) | nop
b L10 | nop
xgkick vi14 | nop
L9:
nop | maxx.w vf07, vf07, vf00
nop | nop
nop | nop
nop | nop
nop | addw.w vf07, vf07, vf25
nop | nop
nop | nop
nop | nop
ior vi05, vi06, vi00 | ftoi4.xyzw vf07, vf07
iaddi vi03, vi03, -0x1 | nop
ior vi06, vi07, vi00 | nop
ibne vi00, vi03, L8 | nop
sq.xyzw vf07, -1(vi04) | nop
xgkick vi14 | nop
L10:
iaddi vi08, vi08, -0x1 | nop
iaddiu vi01, vi00, 0x80 | nop
isub vi14, vi01, vi14 | nop
ibne vi00, vi08, L6 | nop
mr32.xyzw vf02, vf02 | nop
jr vi15 | nop
nop | nop
lq.xyzw vf01, 273(vi00) | nop
lq.xyzw vf02, 274(vi00) | nop
lq.xyzw vf03, 275(vi00) | nop
lq.xyzw vf09, 276(vi00) | nop
bal vi15, L1 | nop
nop | nop
lq.xyzw vf01, 277(vi00) | nop
lq.xyzw vf02, 278(vi00) | nop
lq.xyzw vf03, 279(vi00) | nop
lq.xyzw vf09, 280(vi00) | nop
bal vi15, L1 | nop
nop | nop
nop | nop :e
nop | nop
+410
View File
@@ -0,0 +1,410 @@
.word 0x800e0032
.word 0x2ff
.word 0x1fc0123
.word 0x2ff
.word 0x1fd0124
.word 0x2ff
.word 0x1fe0125
.word 0x2ff
.word 0x1ff0126
.word 0x2ff
.word 0x1fb0127
.word 0x2ff
.word 0x1fa0128
.word 0x400002ff
.word 0x1f90129
.word 0x2ff
.word 0x1e5012b
.word 0x2ff
.word 0x1e70134
.word 0x2ff
.word 0x1e80133
.word 0x2ff
.word 0x80007135
.word 0x2ff
.word 0x10020100
.word 0x1e1e1bc
.word 0x1e40131
.word 0x1e1e8bd
.word 0x10030011
.word 0x1e1f04a
.word 0x81e43b7d
.word 0x2ff
.word 0x81e4437d
.word 0x2ff
.word 0x81e4237d
.word 0x2ff
.word 0x81e42b7d
.word 0x2ff
.word 0x3041fff
.word 0x2ff
.word 0x81e40b7d
.word 0x2ff
.word 0x81e6137c
.word 0x2ff
.word 0x81e42b7d
.word 0x2ff
.word 0x3044fff
.word 0x2ff
.word 0x80000030
.word 0x2ff
.word 0x80000030
.word 0x1e23198
.word 0x80000030
.word 0x2ff
.word 0x80000030
.word 0x2ff
.word 0x80000030
.word 0x2ff
.word 0x80000030
.word 0x1e131a8
.word 0x80031ff2
.word 0x2ff
.word 0x80000030
.word 0x2ff
.word 0x52001ff4
.word 0x2ff
.word 0x81e4337d
.word 0x2ff
.word 0x800470f2
.word 0x2ff
.word 0x80050032
.word 0x2ff
.word 0x80060032
.word 0x2ff
.word 0x10030011
.word 0x2ff
.word 0x1e72001
.word 0x2ff
.word 0x800420b2
.word 0x2ff
.word 0x80000030
.word 0x2ff
.word 0x80000030
.word 0x2ff
.word 0x8187cbbc
.word 0x1fb3a2a
.word 0x8047033c
.word 0x2ff
.word 0x80000030
.word 0x2ff
.word 0x80000030
.word 0x2ff
.word 0x80000030
.word 0x1c841ff
.word 0x80000030
.word 0x2ff
.word 0x80000030
.word 0x2ff
.word 0x1001002f
.word 0x18039dc
.word 0x38050000
.word 0x2ff
.word 0x80012974
.word 0x2ff
.word 0x80000030
.word 0x2ff
.word 0x80000030
.word 0x1fa39e8
.word 0x80000030
.word 0x2ff
.word 0x80000030
.word 0x2ff
.word 0x80000030
.word 0x2ff
.word 0x80000030
.word 0x2039d0
.word 0x80000030
.word 0x2ff
.word 0x80000030
.word 0x2ff
.word 0x80000030
.word 0x2ff
.word 0x80000030
.word 0x1e7397d
.word 0x80000030
.word 0x2ff
.word 0x80000030
.word 0x2ff
.word 0x80000030
.word 0x2ff
.word 0x3e43fff
.word 0x2ff
.word 0x1e72001
.word 0x2ff
.word 0x800420b2
.word 0x2ff
.word 0x80000030
.word 0x2ff
.word 0x80000030
.word 0x2ff
.word 0x8187cbbc
.word 0x1fb3a2a
.word 0x8047033c
.word 0x2ff
.word 0x80000030
.word 0x2ff
.word 0x80000030
.word 0x2ff
.word 0x80000030
.word 0x1c841ff
.word 0x80000030
.word 0x2ff
.word 0x80000030
.word 0x2ff
.word 0x1001002f
.word 0x18039dc
.word 0x38070000
.word 0x2ff
.word 0x800139f4
.word 0x2ff
.word 0x800531b4
.word 0x2ff
.word 0x800731b4
.word 0x1fa39e8
.word 0x80000030
.word 0x2ff
.word 0x5200300c
.word 0x2ff
.word 0x80000030
.word 0x2ff
.word 0x80000030
.word 0x2039d0
.word 0x80000030
.word 0x2ff
.word 0x80000030
.word 0x2ff
.word 0x80000030
.word 0x2ff
.word 0x80000030
.word 0x1e7397d
.word 0x80031ff2
.word 0x2ff
.word 0x800039b5
.word 0x2ff
.word 0x52001fe5
.word 0x2ff
.word 0x3e43fff
.word 0x2ff
.word 0x4000000f
.word 0x2ff
.word 0x800076fc
.word 0x2ff
.word 0x80000030
.word 0x2039d0
.word 0x80000030
.word 0x2ff
.word 0x80000030
.word 0x2ff
.word 0x80000030
.word 0x2ff
.word 0x80000030
.word 0x3939c3
.word 0x80000030
.word 0x2ff
.word 0x80000030
.word 0x2ff
.word 0x80000030
.word 0x2ff
.word 0x80000030
.word 0x1e7397d
.word 0x80031ff2
.word 0x2ff
.word 0x800039b5
.word 0x2ff
.word 0x52001fd6
.word 0x2ff
.word 0x3e43fff
.word 0x2ff
.word 0x800076fc
.word 0x2ff
.word 0x10010080
.word 0x2ff
.word 0x800e0bb1
.word 0x2ff
.word 0x800800b2
.word 0x2ff
.word 0x10020100
.word 0x2ff
.word 0x1e40132
.word 0x2ff
.word 0x10030011
.word 0x2ff
.word 0x80007135
.word 0x2ff
.word 0x81e31b3d
.word 0x2ff
.word 0x81e94b3d
.word 0x2ff
.word 0x81e4237d
.word 0x2ff
.word 0x80000030
.word 0x2ff
.word 0x81e6137c
.word 0x2ff
.word 0x3e42800
.word 0x2ff
.word 0x3041800
.word 0x2ff
.word 0x3e42802
.word 0x2ff
.word 0x3044802
.word 0x1e23298
.word 0x80042132
.word 0x1e23199
.word 0x80000030
.word 0x2ff
.word 0x80000030
.word 0x2ff
.word 0x80000030
.word 0x1e152a8
.word 0x80000030
.word 0x1e131a8
.word 0x80000030
.word 0x2ff
.word 0x80031ff2
.word 0x2ff
.word 0x3e457fd
.word 0x2ff
.word 0x52001ff2
.word 0x2ff
.word 0x3e437ff
.word 0x2ff
.word 0x80047072
.word 0x2ff
.word 0x80050032
.word 0x2ff
.word 0x80060032
.word 0x2ff
.word 0x10030022
.word 0x2ff
.word 0x1e72001
.word 0x2ff
.word 0x800420b2
.word 0x2ff
.word 0x80000030
.word 0x2ff
.word 0x80000030
.word 0x2ff
.word 0x8187cbbc
.word 0x1fb3a2a
.word 0x8047033c
.word 0x2ff
.word 0x80000030
.word 0x2ff
.word 0x80000030
.word 0x2ff
.word 0x80000030
.word 0x1c841ff
.word 0x80000030
.word 0x2ff
.word 0x80000030
.word 0x2ff
.word 0x1001002f
.word 0x18039dc
.word 0x38070000
.word 0x2ff
.word 0x800139f4
.word 0x2ff
.word 0x80062974
.word 0x2ff
.word 0x80072974
.word 0x1fa39e8
.word 0x80000030
.word 0x2ff
.word 0x5200280c
.word 0x2ff
.word 0x80000030
.word 0x2ff
.word 0x80000030
.word 0x2039d0
.word 0x80000030
.word 0x2ff
.word 0x80000030
.word 0x2ff
.word 0x80000030
.word 0x2ff
.word 0x80003175
.word 0x1e7397d
.word 0x80031ff2
.word 0x2ff
.word 0x800039b5
.word 0x2ff
.word 0x52001fe5
.word 0x2ff
.word 0x3e43fff
.word 0x2ff
.word 0x4000000f
.word 0x2ff
.word 0x800076fc
.word 0x2ff
.word 0x80000030
.word 0x2039d0
.word 0x80000030
.word 0x2ff
.word 0x80000030
.word 0x2ff
.word 0x80000030
.word 0x2ff
.word 0x80000030
.word 0x3939c3
.word 0x80000030
.word 0x2ff
.word 0x80000030
.word 0x2ff
.word 0x80000030
.word 0x2ff
.word 0x80003175
.word 0x1e7397d
.word 0x80031ff2
.word 0x2ff
.word 0x800039b5
.word 0x2ff
.word 0x52001fd6
.word 0x2ff
.word 0x3e43fff
.word 0x2ff
.word 0x800076fc
.word 0x2ff
.word 0x800847f2
.word 0x2ff
.word 0x10010080
.word 0x2ff
.word 0x800e0bb1
.word 0x2ff
.word 0x520047b5
.word 0x2ff
.word 0x81e2133d
.word 0x2ff
.word 0x48007800
.word 0x2ff
.word 0x80000030
.word 0x2ff
.word 0x1e10111
.word 0x2ff
.word 0x1e20112
.word 0x2ff
.word 0x1e30113
.word 0x2ff
.word 0x1e90114
.word 0x2ff
.word 0x420f0744
.word 0x2ff
.word 0x80000030
.word 0x2ff
.word 0x1e10115
.word 0x2ff
.word 0x1e20116
.word 0x2ff
.word 0x1e30117
.word 0x2ff
.word 0x1e90118
.word 0x2ff
.word 0x420f073e
.word 0x2ff
.word 0x80000030
.word 0x2ff
.word 0x80000030
.word 0x400002ff
.word 0x80000030
.word 0x2ff
@@ -0,0 +1,65 @@
lq.xyzw vf01, 489(vi00) | nop
lq.xyzw vf05, 490(vi00) | nop
ilw.x vi01, 511(vi00) | nop
iaddiu vi04, vi00, 0x200 | nop
iaddi vi02, vi00, 0x0 | nop
L1:
ilw.w vi07, 1(vi04) | nop
ior vi05, vi02, vi00 | nop
ilw.x vi06, 477(vi07) | nop
sqi.xyzw vf01, vi05 | nop
iaddiu vi08, vi07, 0x4000 | nop
iaddiu vi08, vi08, 0x4000 | nop
isw.x vi08, -1(vi05) | nop
lqi.xyzw vf02, vi04 | nop
lqi.xyzw vf03, vi04 | nop
lqi.xyzw vf04, vi04 | nop
nop | ftoi4.xyzw vf14, vf02
L2:
lqi.xyzw vf06, vi06 | nop
lqi.xyzw vf07, vi06 | nop
lq.xyzw vf08, 0(vi06) | nop
lq.xyzw vf09, 1(vi06) | nop
iaddi vi07, vi07, -0x1 | muly.xyzw vf10, vf06, vf04
nop | mulz.xyzw vf11, vf07, vf04
nop | muly.xyzw vf12, vf08, vf04
nop | mulz.xyzw vf13, vf09, vf04
nop | mulx.xyzw vf06, vf06, vf04
nop | mulx.xyzw vf07, vf07, vf04
nop | mulx.xyzw vf08, vf08, vf04
nop | mulx.xyzw vf09, vf09, vf04
nop | add.xyzw vf10, vf10, vf02
nop | add.xyzw vf11, vf11, vf03
nop | add.xyzw vf12, vf12, vf02
nop | add.xyzw vf13, vf13, vf03
nop | add.xyzw vf06, vf06, vf02
nop | add.xyzw vf07, vf07, vf03
nop | add.xyzw vf08, vf08, vf02
nop | add.xyzw vf09, vf09, vf03
nop | ftoi4.xyzw vf10, vf10
nop | ftoi4.xyzw vf12, vf12
nop | ftoi4.xyzw vf06, vf06
nop | ftoi4.xyzw vf08, vf08
sqi.xyzw vf07, vi05 | nop
sqi.xyzw vf05, vi05 | nop
sqi.xyzw vf06, vi05 | nop
sqi.xyzw vf09, vi05 | nop
sqi.xyzw vf05, vi05 | nop
sqi.xyzw vf08, vi05 | nop
sqi.xyzw vf11, vi05 | nop
sqi.xyzw vf05, vi05 | nop
sqi.xyzw vf10, vi05 | nop
sqi.xyzw vf13, vi05 | nop
sqi.xyzw vf05, vi05 | nop
sqi.xyzw vf12, vi05 | nop
sqi.xyzw vf03, vi05 | nop
sqi.xyzw vf05, vi05 | nop
ibne vi00, vi07, L2 | nop
sqi.xyzw vf14, vi05 | nop
xgkick vi02 | nop
iaddi vi01, vi01, -0x1 | nop
iaddiu vi03, vi00, 0xb0 | nop
ibne vi00, vi01, L1 | nop
isub vi02, vi03, vi02 | nop
nop | nop :e
nop | nop
@@ -0,0 +1,126 @@
.word 0x1e101e9
.word 0x2ff
.word 0x1e501ea
.word 0x2ff
.word 0x90101ff
.word 0x2ff
.word 0x10040200
.word 0x2ff
.word 0x80020032
.word 0x2ff
.word 0x8272001
.word 0x2ff
.word 0x80001175
.word 0x2ff
.word 0x90639dd
.word 0x2ff
.word 0x81e50b7d
.word 0x2ff
.word 0x11083800
.word 0x2ff
.word 0x11084000
.word 0x2ff
.word 0xb082fff
.word 0x2ff
.word 0x81e2237c
.word 0x2ff
.word 0x81e3237c
.word 0x2ff
.word 0x81e4237c
.word 0x2ff
.word 0x80000030
.word 0x1ee117d
.word 0x81e6337c
.word 0x2ff
.word 0x81e7337c
.word 0x2ff
.word 0x1e83000
.word 0x2ff
.word 0x1e93001
.word 0x2ff
.word 0x80073ff2
.word 0x1e43299
.word 0x80000030
.word 0x1e43ada
.word 0x80000030
.word 0x1e44319
.word 0x80000030
.word 0x1e44b5a
.word 0x80000030
.word 0x1e43198
.word 0x80000030
.word 0x1e439d8
.word 0x80000030
.word 0x1e44218
.word 0x80000030
.word 0x1e44a58
.word 0x80000030
.word 0x1e252a8
.word 0x80000030
.word 0x1e35ae8
.word 0x80000030
.word 0x1e26328
.word 0x80000030
.word 0x1e36b68
.word 0x80000030
.word 0x1e231a8
.word 0x80000030
.word 0x1e339e8
.word 0x80000030
.word 0x1e24228
.word 0x80000030
.word 0x1e34a68
.word 0x80000030
.word 0x1ea517d
.word 0x80000030
.word 0x1ec617d
.word 0x80000030
.word 0x1e6317d
.word 0x80000030
.word 0x1e8417d
.word 0x81e53b7d
.word 0x2ff
.word 0x81e52b7d
.word 0x2ff
.word 0x81e5337d
.word 0x2ff
.word 0x81e54b7d
.word 0x2ff
.word 0x81e52b7d
.word 0x2ff
.word 0x81e5437d
.word 0x2ff
.word 0x81e55b7d
.word 0x2ff
.word 0x81e52b7d
.word 0x2ff
.word 0x81e5537d
.word 0x2ff
.word 0x81e56b7d
.word 0x2ff
.word 0x81e52b7d
.word 0x2ff
.word 0x81e5637d
.word 0x2ff
.word 0x81e51b7d
.word 0x2ff
.word 0x81e52b7d
.word 0x2ff
.word 0x52003fd9
.word 0x2ff
.word 0x81e5737d
.word 0x2ff
.word 0x800016fc
.word 0x2ff
.word 0x80010ff2
.word 0x2ff
.word 0x100300b0
.word 0x2ff
.word 0x52000fc9
.word 0x2ff
.word 0x800218b1
.word 0x2ff
.word 0x80000030
.word 0x400002ff
.word 0x80000030
.word 0x2ff
@@ -0,0 +1,898 @@
lq.xyzw vf29, 996(vi00) | nop
lq.xyzw vf31, 997(vi00) | nop :e
iaddiu vi15, vi00, 0x320 | nop
xtop vi02 | nop
nop | nop
ilwr.x vi04, vi02 | nop
iaddi vi02, vi02, 0x1 | nop
iaddiu vi03, vi02, 0x90 | nop
L1:
ilw.y vi08, 1(vi02) | nop
lq.xyzw vf25, 900(vi00) | nop
lq.xyzw vf26, 901(vi00) | nop
lq.xyzw vf27, 902(vi00) | nop
lq.xyzw vf28, 903(vi00) | nop
lq.xyzw vf30, 904(vi00) | nop
lqi.xyzw vf01, vi02 | nop
lqi.xyzw vf05, vi02 | nop
lqi.xyzw vf11, vi02 | nop
lq.xyzw vf12, 1020(vi00) | mulaw.xyzw ACC, vf28, vf00
nop | maddax.xyzw ACC, vf25, vf01
nop | madday.xyzw ACC, vf26, vf01
nop | maddz.xyzw vf02, vf27, vf01
move.w vf05, vf00 | addw.z vf01, vf00, vf05
nop | nop
div Q, vf31.x, vf02.w | muly.z vf05, vf05, vf31
nop | mul.xyzw vf03, vf02, vf29
nop | nop
nop | nop
nop | mulz.z vf04, vf05, vf05
lq.xyzw vf14, 1001(vi00) | clipw.xyz vf03, vf03
iaddi vi06, vi00, 0x1 | adda.xyzw ACC, vf11, vf11
L2:
ior vi05, vi15, vi00 | mul.zw vf01, vf01, Q
lq.xyzw vf06, 998(vi00) | mulz.xyzw vf15, vf05, vf04
lq.xyzw vf14, 1002(vi00) | mula.xyzw ACC, vf05, vf14
fmand vi01, vi06 | mul.xyz vf02, vf02, Q
ibne vi00, vi01, L5 | addz.x vf01, vf00, vf01
lqi.xyzw vf07, vi03 | mulz.xyzw vf16, vf15, vf04
lq.xyzw vf14, 1003(vi00) | madda.xyzw ACC, vf15, vf14
lqi.xyzw vf08, vi03 | add.xyzw vf10, vf02, vf30
lqi.xyzw vf09, vi03 | mulw.x vf01, vf01, vf01
sqi.xyzw vf06, vi05 | mulz.xyzw vf15, vf16, vf04
lq.xyzw vf14, 1004(vi00) | madda.xyzw ACC, vf16, vf14
sqi.xyzw vf07, vi05 | maxx.w vf10, vf10, vf12
sqi.xyzw vf08, vi05 | maxz.zw vf01, vf01, vf31
sqi.xyzw vf09, vi05 | mulz.xyzw vf16, vf15, vf04
lq.xyzw vf14, 1005(vi00) | madda.xyzw ACC, vf15, vf14
lqi.xyzw vf06, vi03 | mulw.x vf01, vf01, vf31
lqi.xyzw vf07, vi03 | miniy.w vf10, vf10, vf12
lq.xyzw vf08, 999(vi08) | miniz.zw vf01, vf01, vf12
ilw.x vi07, -2(vi02) | madd.xyzw vf05, vf16, vf14
lqi.xyzw vf23, vi02 | miniw.x vf01, vf01, vf00
nop | suby.w vf02, vf10, vf12
lqi.xyzw vf24, vi02 | mulx.w vf11, vf11, vf01
fcand vi01, 0x3f | mulaw.xyzw ACC, vf28, vf00
lq.xyzw vf17, 1006(vi00) | maddax.xyzw ACC, vf25, vf23
fmand vi09, vi06 | nop
ibne vi00, vi09, L6 | nop
lq.xyzw vf18, 1007(vi00) | madday.xyzw ACC, vf26, vf23
L3:
lq.xyzw vf19, 980(vi07) | ftoi0.xyzw vf11, vf11
lq.xyzw vf20, 981(vi07) | maddz.xyzw vf02, vf27, vf23
lq.xyzw vf21, 982(vi07) | mulaw.xyzw ACC, vf17, vf05
lq.xyzw vf22, 983(vi07) | msub.xyzw vf12, vf18, vf05
sq.xyzw vf11, 3(vi05) | mulaz.xyzw ACC, vf17, vf05
lqi.xyzw vf11, vi02 | maddw.xyzw vf13, vf18, vf05
move.w vf24, vf00 | addw.z vf23, vf00, vf24
div Q, vf31.x, vf02.w | mulw.xyzw vf12, vf12, vf01
ibne vi00, vi01, L4 | muly.z vf24, vf24, vf31
ilw.y vi08, -2(vi02) | mulz.xyzw vf13, vf13, vf01
sqi.xyzw vf06, vi05 | mul.xyzw vf03, vf02, vf29
sqi.xyzw vf07, vi05 | mulaw.xyzw ACC, vf10, vf00
sqi.xyzw vf08, vi05 | maddax.xyzw ACC, vf12, vf19
lq.xyzw vf06, 988(vi00) | maddy.xyzw vf19, vf13, vf19
lq.xyzw vf07, 989(vi00) | mulaw.xyzw ACC, vf10, vf00
lq.xyzw vf08, 990(vi00) | maddax.xyzw ACC, vf12, vf20
lq.xyzw vf09, 991(vi00) | maddy.xyzw vf20, vf13, vf20
sq.xyzw vf06, 1(vi05) | mulaw.xyzw ACC, vf10, vf00
sq.xyzw vf07, 3(vi05) | maddax.xyzw ACC, vf12, vf21
sq.xyzw vf08, 5(vi05) | maddy.xyzw vf21, vf13, vf21
sq.xyzw vf09, 7(vi05) | mulaw.xyzw ACC, vf10, vf00
nop | maddax.xyzw ACC, vf12, vf22
nop | maddy.xyzw vf22, vf13, vf22
lq.xyzw vf12, 1020(vi00) | ftoi4.xyzw vf19, vf19
lq.xyzw vf14, 1001(vi00) | ftoi4.xyzw vf20, vf20
move.xyzw vf05, vf24 | ftoi4.xyzw vf21, vf21
move.xyzw vf01, vf23 | ftoi4.xyzw vf22, vf22
sq.xyzw vf19, 2(vi05) | mulz.z vf04, vf24, vf24
sq.xyzw vf20, 4(vi05) | clipw.xyz vf03, vf03
sq.xyzw vf21, 6(vi05) | nop
sq.xyzw vf22, 8(vi05) | nop
xgkick vi15 | nop
iaddi vi04, vi04, -0x1 | nop
iaddiu vi01, vi00, 0x672 | nop
ibne vi00, vi04, L2 | nop
isub vi15, vi01, vi15 | adda.xyzw ACC, vf11, vf11
nop | nop :e
nop | nop
L4:
iaddi vi04, vi04, -0x1 | nop
iaddi vi02, vi02, -0x3 | nop
ibne vi00, vi04, L1 | nop
nop | nop
nop | nop :e
nop | nop
L5:
iaddi vi04, vi04, -0x1 | nop
iaddi vi03, vi03, 0x4 | nop
ibne vi00, vi04, L1 | nop
nop | nop
nop | nop :e
nop | nop
L6:
b L3 | nop
lq.xyzw vf08, 1000(vi00) | nop
xtop vi02 | nop
nop | nop
ilwr.x vi04, vi02 | nop
iaddi vi02, vi02, 0x1 | nop
iaddiu vi03, vi02, 0x90 | nop
L7:
ilw.y vi08, 1(vi02) | nop
lq.xyzw vf25, 900(vi00) | nop
lq.xyzw vf26, 901(vi00) | nop
lq.xyzw vf27, 902(vi00) | nop
lq.xyzw vf28, 903(vi00) | nop
lq.xyzw vf30, 904(vi08) | nop
lqi.xyzw vf01, vi02 | nop
lqi.xyzw vf05, vi02 | nop
lqi.xyzw vf11, vi02 | nop
lq.xyzw vf12, 1020(vi00) | mulaw.xyzw ACC, vf28, vf00
ilw.y vi08, 1(vi02) | maddax.xyzw ACC, vf25, vf01
nop | madday.xyzw ACC, vf26, vf01
nop | maddz.xyzw vf02, vf27, vf01
move.w vf05, vf00 | addw.z vf01, vf00, vf05
nop | nop
div Q, vf31.x, vf02.w | muly.z vf05, vf05, vf31
nop | mul.xyzw vf03, vf02, vf29
nop | nop
nop | nop
nop | mulz.z vf04, vf05, vf05
lq.xyzw vf14, 1001(vi00) | clipw.xyz vf03, vf03
iaddi vi06, vi00, 0x1 | adda.xyzw ACC, vf11, vf11
L8:
ior vi05, vi15, vi00 | mul.zw vf01, vf01, Q
lq.xyzw vf06, 998(vi00) | mulz.xyzw vf15, vf05, vf04
lq.xyzw vf14, 1002(vi00) | mula.xyzw ACC, vf05, vf14
fmand vi01, vi06 | mul.xyz vf02, vf02, Q
ibne vi00, vi01, L10 | addz.x vf01, vf00, vf01
lqi.xyzw vf07, vi03 | mulz.xyzw vf16, vf15, vf04
lq.xyzw vf14, 1003(vi00) | madda.xyzw ACC, vf15, vf14
lqi.xyzw vf08, vi03 | add.xyzw vf10, vf02, vf30
lqi.xyzw vf09, vi03 | mulw.x vf01, vf01, vf01
sqi.xyzw vf06, vi05 | mulz.xyzw vf15, vf16, vf04
lq.xyzw vf14, 1004(vi00) | madda.xyzw ACC, vf16, vf14
sqi.xyzw vf07, vi05 | maxx.w vf10, vf10, vf12
sqi.xyzw vf08, vi05 | maxz.zw vf01, vf01, vf31
sqi.xyzw vf09, vi05 | mulz.xyzw vf16, vf15, vf04
lq.xyzw vf14, 1005(vi00) | madda.xyzw ACC, vf15, vf14
lqi.xyzw vf06, vi03 | mulw.x vf01, vf01, vf31
lqi.xyzw vf07, vi03 | miniy.w vf10, vf10, vf12
lq.xyzw vf08, 1000(vi00) | nop
ilw.x vi07, -2(vi02) | madd.xyzw vf05, vf16, vf14
lq.xyzw vf30, 904(vi08) | nop
lqi.xyzw vf23, vi02 | miniw.x vf01, vf01, vf00
lqi.xyzw vf24, vi02 | mulx.w vf11, vf11, vf01
fcand vi01, 0x3f | mulaw.xyzw ACC, vf28, vf00
lq.xyzw vf17, 1006(vi00) | maddax.xyzw ACC, vf25, vf23
lq.xyzw vf18, 1007(vi00) | madday.xyzw ACC, vf26, vf23
lq.xyzw vf19, 980(vi07) | ftoi0.xyzw vf11, vf11
lq.xyzw vf20, 981(vi07) | maddz.xyzw vf02, vf27, vf23
lq.xyzw vf21, 982(vi07) | mulaw.xyzw ACC, vf17, vf05
lq.xyzw vf22, 983(vi07) | msub.xyzw vf12, vf18, vf05
sq.xyzw vf11, 3(vi05) | mulaz.xyzw ACC, vf17, vf05
lqi.xyzw vf11, vi02 | maddw.xyzw vf13, vf18, vf05
move.w vf24, vf00 | addw.z vf23, vf00, vf24
div Q, vf31.x, vf02.w | mulw.xyzw vf12, vf12, vf01
ibne vi00, vi01, L9 | muly.z vf24, vf24, vf31
ilw.y vi08, 1(vi02) | mulz.xyzw vf13, vf13, vf01
sqi.xyzw vf06, vi05 | mul.xyzw vf03, vf02, vf29
sqi.xyzw vf07, vi05 | mulaw.xyzw ACC, vf10, vf00
sqi.xyzw vf08, vi05 | maddax.xyzw ACC, vf12, vf19
lq.xyzw vf06, 988(vi00) | maddy.xyzw vf19, vf13, vf19
lq.xyzw vf07, 989(vi00) | mulaw.xyzw ACC, vf10, vf00
lq.xyzw vf08, 990(vi00) | maddax.xyzw ACC, vf12, vf20
lq.xyzw vf09, 991(vi00) | maddy.xyzw vf20, vf13, vf20
sq.xyzw vf06, 1(vi05) | mulaw.xyzw ACC, vf10, vf00
sq.xyzw vf07, 3(vi05) | maddax.xyzw ACC, vf12, vf21
sq.xyzw vf08, 5(vi05) | maddy.xyzw vf21, vf13, vf21
sq.xyzw vf09, 7(vi05) | mulaw.xyzw ACC, vf10, vf00
nop | maddax.xyzw ACC, vf12, vf22
nop | maddy.xyzw vf22, vf13, vf22
lq.xyzw vf12, 1020(vi00) | ftoi4.xyzw vf19, vf19
lq.xyzw vf14, 1001(vi00) | ftoi4.xyzw vf20, vf20
move.xyzw vf05, vf24 | ftoi4.xyzw vf21, vf21
move.xyzw vf01, vf23 | ftoi4.xyzw vf22, vf22
sq.xyzw vf19, 2(vi05) | mulz.z vf04, vf24, vf24
sq.xyzw vf20, 4(vi05) | clipw.xyz vf03, vf03
sq.xyzw vf21, 6(vi05) | nop
sq.xyzw vf22, 8(vi05) | nop
xgkick vi15 | nop
iaddi vi04, vi04, -0x1 | nop
iaddiu vi01, vi00, 0x672 | nop
ibne vi00, vi04, L8 | nop
isub vi15, vi01, vi15 | adda.xyzw ACC, vf11, vf11
nop | nop :e
nop | nop
L9:
iaddi vi04, vi04, -0x1 | nop
iaddi vi02, vi02, -0x3 | nop
ibne vi00, vi04, L7 | nop
nop | nop
nop | nop :e
nop | nop
L10:
iaddi vi04, vi04, -0x1 | nop
iaddi vi03, vi03, 0x4 | nop
ibne vi00, vi04, L7 | nop
nop | nop
nop | nop :e
nop | nop
lq.xyzw vf25, 900(vi00) | nop
lq.xyzw vf26, 901(vi00) | nop
lq.xyzw vf27, 902(vi00) | nop
lq.xyzw vf28, 903(vi00) | nop
lq.xyzw vf30, 904(vi00) | nop
xtop vi02 | nop
nop | nop
ilwr.x vi04, vi02 | nop
iaddi vi02, vi02, 0x1 | nop
iaddiu vi03, vi02, 0x90 | nop
lq.xyzw vf23, 1020(vi00) | nop
iaddi vi06, vi00, 0x1 | nop
L11:
lq.xyzw vf06, 1(vi02) | nop
lq.xyzw vf07, 2(vi02) | nop
iaddi vi01, vi00, 0x2 | nop
nop | nop
nop | mul.xyzw vf05, vf06, vf06
nop | addw.y vf08, vf00, vf06
nop | subw.w vf06, vf06, vf06
nop | adda.xyzw ACC, vf07, vf07
nop | addy.x vf05, vf05, vf05
nop | nop
nop | nop
fmand vi01, vi06 | nop
ibne vi00, vi01, L15 | addz.x vf05, vf05, vf05
nop | nop
nop | nop
nop | nop
nop | subx.w vf05, vf00, vf05
nop | nop
nop | nop
nop | nop
sqrt Q, vf05.w | nop
nop | nop
nop | nop
nop | nop
nop | nop
nop | nop
nop | nop
nop | addq.w vf06, vf06, Q
nop | nop
nop | nop
nop | nop
nop | add.xyzw vf13, vf06, vf06
nop | addw.x vf09, vf00, vf06
nop | addz.y vf09, vf00, vf06
nop | suby.z vf09, vf00, vf06
nop | subw.w vf09, vf00, vf00
nop | subz.x vf10, vf00, vf06
nop | addw.y vf10, vf00, vf06
nop | addx.z vf10, vf00, vf06
nop | subw.w vf10, vf00, vf00
nop | addy.x vf11, vf00, vf06
nop | subx.y vf11, vf00, vf06
nop | addw.z vf11, vf00, vf06
nop | subw.w vf11, vf00, vf00
L12:
lq.xyzw vf12, 0(vi02) | opmula.xyz ACC, vf13, vf09
lq.xyzw vf07, 2(vi02) | opmsub.xyz vf09, vf09, vf13
iaddi vi02, vi02, 0x3 | opmula.xyz ACC, vf13, vf10
lq.xyzw vf06, 1(vi02) | opmsub.xyz vf10, vf10, vf13
ior vi05, vi15, vi00 | opmula.xyz ACC, vf13, vf11
lq.xyzw vf01, 998(vi00) | opmsub.xyz vf11, vf11, vf13
lqi.xyzw vf02, vi03 | addw.x vf09, vf09, vf00
lqi.xyzw vf03, vi03 | addw.y vf10, vf10, vf00
lqi.xyzw vf04, vi03 | addw.z vf11, vf11, vf00
sqi.xyzw vf01, vi05 | mul.xyzw vf05, vf06, vf06
move.w vf12, vf00 | mulw.xyzw vf09, vf09, vf12
iaddi vi06, vi00, 0x1 | muly.xyzw vf11, vf11, vf08
lq.xyzw vf14, 992(vi00) | adda.xyzw ACC, vf07, vf07
lq.xyzw vf15, 993(vi00) | ftoi0.xyzw vf07, vf07
lq.xyzw vf16, 994(vi00) | addw.y vf08, vf00, vf06
lq.xyzw vf17, 995(vi00) | subw.w vf06, vf06, vf06
fmand vi01, vi06 | mulax.xyzw ACC, vf09, vf14
ibne vi00, vi01, L14 | madday.xyzw ACC, vf10, vf14
sq.xyzw vf07, 7(vi05) | maddaz.xyzw ACC, vf11, vf14
sq.xyzw vf07, 10(vi05) | maddw.xyzw vf14, vf12, vf00
sqi.xyzw vf02, vi05 | addy.x vf05, vf05, vf05
sq.xyzw vf07, 12(vi05) | mulax.xyzw ACC, vf09, vf15
sq.xyzw vf07, 15(vi05) | madday.xyzw ACC, vf10, vf15
sqi.xyzw vf03, vi05 | maddaz.xyzw ACC, vf11, vf15
sqi.xyzw vf04, vi05 | addz.x vf05, vf05, vf05
lqi.xyzw vf01, vi03 | maddw.xyzw vf15, vf12, vf00
lqi.xyzw vf02, vi03 | mulax.xyzw ACC, vf09, vf16
lq.xyzw vf03, 1008(vi00) | madday.xyzw ACC, vf10, vf16
nop | subx.w vf05, vf00, vf05
sqi.xyzw vf01, vi05 | maddaz.xyzw ACC, vf11, vf16
sqi.xyzw vf02, vi05 | maddw.xyzw vf16, vf12, vf00
sqi.xyzw vf03, vi05 | mulax.xyzw ACC, vf09, vf17
sqrt Q, vf05.w | madday.xyzw ACC, vf10, vf17
nop | maddaz.xyzw ACC, vf11, vf17
nop | maddw.xyzw vf17, vf12, vf00
lq.xyzw vf18, 988(vi00) | mulax.xyzw ACC, vf25, vf14
lq.xyzw vf19, 989(vi00) | madday.xyzw ACC, vf26, vf14
lq.xyzw vf20, 990(vi00) | maddaz.xyzw ACC, vf27, vf14
lq.xyzw vf21, 991(vi00) | maddw.xyzw vf14, vf28, vf00
nop | addq.w vf06, vf06, Q
nop | mulax.xyzw ACC, vf25, vf15
nop | madday.xyzw ACC, vf26, vf15
nop | maddaz.xyzw ACC, vf27, vf15
div Q, vf31.x, vf14.w | mul.xyzw vf09, vf14, vf29
nop | maddw.xyzw vf15, vf28, vf00
nop | mulax.xyzw ACC, vf25, vf16
nop | madday.xyzw ACC, vf26, vf16
nop | maddaz.xyzw ACC, vf27, vf16
nop | mul.xyzw vf10, vf15, vf29
nop | maddw.xyzw vf16, vf28, vf00
div Q, vf31.x, vf15.w | mul.xyz vf14, vf14, Q
nop | mul.xyzw vf18, vf18, Q
nop | mulax.xyzw ACC, vf25, vf17
nop | madday.xyzw ACC, vf26, vf17
nop | maddaz.xyzw ACC, vf27, vf17
sq.xyzw vf18, 0(vi05) | mul.xyzw vf11, vf16, vf29
nop | maddw.xyzw vf17, vf28, vf00
div Q, vf31.x, vf16.w | mul.xyz vf15, vf15, Q
nop | mul.xyzw vf19, vf19, Q
nop | add.xyzw vf14, vf14, vf30
nop | add.xyzw vf15, vf15, vf30
nop | mul.xyzw vf12, vf17, vf29
sq.xyzw vf19, 3(vi05) | clipw.xyz vf09, vf09
nop | clipw.xyz vf10, vf10
div Q, vf31.x, vf17.w | mul.xyz vf16, vf16, Q
nop | mul.xyzw vf20, vf20, Q
nop | clipw.xyz vf11, vf11
nop | clipw.xyz vf12, vf12
nop | add.xyzw vf16, vf16, vf30
sq.xyzw vf20, 6(vi05) | maxx.w vf14, vf14, vf23
nop | maxx.w vf15, vf15, vf23
fcand vi01, 0x410410 | mul.xyz vf17, vf17, Q
ibne vi00, vi01, L13 | mul.xyzw vf21, vf21, Q
fcand vi01, 0xffffff | maxx.w vf16, vf16, vf23
ibne vi00, vi01, L16 | miniy.w vf14, vf14, vf23
nop | add.xyzw vf17, vf17, vf30
sq.xyzw vf21, 9(vi05) | miniy.w vf15, vf15, vf23
nop | miniy.w vf16, vf16, vf23
nop | ftoi4.xyzw vf14, vf14
nop | maxx.w vf17, vf17, vf23
nop | ftoi4.xyzw vf15, vf15
nop | ftoi4.xyzw vf16, vf16
sq.xyzw vf14, 2(vi05) | add.xyzw vf13, vf06, vf06
nop | miniy.w vf17, vf17, vf23
sq.xyzw vf15, 5(vi05) | addw.x vf09, vf00, vf06
sq.xyzw vf16, 8(vi05) | addz.y vf09, vf00, vf06
nop | suby.z vf09, vf00, vf06
nop | ftoi4.xyzw vf17, vf17
nop | subw.w vf09, vf00, vf00
nop | subz.x vf10, vf00, vf06
nop | addw.y vf10, vf00, vf06
sq.xyzw vf17, 11(vi05) | addx.z vf10, vf00, vf06
xgkick vi15 | subw.w vf10, vf00, vf00
iaddi vi04, vi04, -0x1 | addy.x vf11, vf00, vf06
iaddiu vi01, vi00, 0x672 | subx.y vf11, vf00, vf06
ibne vi00, vi04, L12 | addw.z vf11, vf00, vf06
isub vi15, vi01, vi15 | subw.w vf11, vf00, vf00
nop | nop :e
nop | nop
L13:
iaddi vi04, vi04, -0x1 | nop
nop | nop
ibne vi00, vi04, L11 | nop
nop | nop
nop | nop :e
nop | nop
L14:
iaddi vi04, vi04, -0x1 | nop
iaddi vi03, vi03, 0x2 | nop
ibne vi00, vi04, L11 | nop
nop | nop
nop | nop :e
nop | nop
L15:
iaddi vi04, vi04, -0x1 | nop
iaddi vi03, vi03, 0x5 | nop
ibne vi00, vi04, L11 | nop
iaddi vi02, vi02, 0x3 | nop
nop | nop :e
nop | nop
L16:
fcor vi01, 0x7df7df | nop
ibne vi00, vi01, L13 | nop
fcor vi01, 0xdf7df7 | nop
ibne vi00, vi01, L13 | nop
fcor vi01, 0xefbefb | nop
ibne vi00, vi01, L13 | nop
fcor vi01, 0xf7df7d | nop
ibne vi00, vi01, L13 | nop
fcor vi01, 0xfbefbe | nop
ibne vi00, vi01, L13 | nop
ior vi07, vi05, vi00 | nop
nop | itof0.xyzw vf07, vf07
sq.xyzw vf09, 2(vi07) | nop
sq.xyzw vf10, 5(vi07) | nop
sq.xyzw vf11, 8(vi07) | nop
sq.xyzw vf12, 11(vi07) | nop
sq.xyzw vf09, 14(vi07) | nop
lq.xyzw vf18, 988(vi00) | nop
lq.xyzw vf19, 989(vi00) | nop
lq.xyzw vf20, 990(vi00) | nop
lq.xyzw vf21, 991(vi00) | nop
sq.xyzw vf18, 0(vi07) | nop
sq.xyzw vf19, 3(vi07) | nop
sq.xyzw vf20, 6(vi07) | nop
sq.xyzw vf21, 9(vi07) | nop
sq.xyzw vf18, 12(vi07) | nop
sq.xyzw vf07, 1(vi07) | nop
sq.xyzw vf07, 4(vi07) | nop
sq.xyzw vf07, 7(vi07) | nop
sq.xyzw vf07, 10(vi07) | nop
sq.xyzw vf07, 13(vi07) | nop
iaddi vi09, vi00, 0x4 | nop
bal vi11, L18 | nop
nop | nop
lq.xyzw vf01, 1014(vi00) | nop
ibeq vi00, vi09, L13 | nop
iaddiu vi10, vi09, 0x4000 | nop
iaddiu vi10, vi10, 0x4000 | nop
sqd.xyzw vf01, vi05 | nop
iswr.x vi10, vi05 | nop
iaddi vi05, vi05, 0x1 | nop
lq.xyzw vf29, 1015(vi00) | nop
L17:
lqi.xyzw vf17, vi05 | nop
lqi.xyzw vf20, vi05 | nop
lqi.xyzw vf14, vi05 | nop
nop | nop
nop | nop
nop | nop
div Q, vf00.w, vf14.w | mul.xyzw vf14, vf14, vf29
nop | nop
nop | nop
nop | nop
nop | nop
nop | nop
nop | nop
nop | mul.xyz vf14, vf14, Q
nop | mul.xyzw vf17, vf17, Q
nop | nop
nop | nop
nop | add.xyzw vf14, vf14, vf30
nop | nop
nop | nop
nop | nop
nop | maxx.w vf14, vf14, vf23
nop | nop
nop | nop
nop | nop
nop | miniy.w vf14, vf14, vf23
nop | nop
nop | nop
nop | ftoi0.xyzw vf20, vf20
nop | ftoi4.xyzw vf14, vf14
nop | nop
sq.xyzw vf17, -3(vi05) | nop
sq.xyzw vf20, -2(vi05) | nop
sq.xyzw vf14, -1(vi05) | nop
iaddi vi09, vi09, -0x1 | nop
nop | nop
ibne vi00, vi09, L17 | nop
nop | nop
lq.xyzw vf29, 996(vi00) | nop
xgkick vi15 | nop
iaddi vi04, vi04, -0x1 | nop
iaddiu vi01, vi00, 0x672 | nop
ibne vi00, vi04, L11 | nop
isub vi15, vi01, vi15 | nop
nop | nop :e
nop | nop
L18:
ior vi08, vi07, vi00 | nop
lq.xyzw vf14, 2(vi07) | nop
ior vi10, vi09, vi00 | nop
lq.xyzw vf17, 0(vi07) | nop
lq.xyzw vf20, 1(vi07) | nop
iaddi vi07, vi07, 0x3 | clipw.xyz vf14, vf14
L19:
lq.xyzw vf15, 2(vi07) | nop
lq.xyzw vf18, 0(vi07) | nop
lq.xyzw vf21, 1(vi07) | nop
iaddi vi07, vi07, 0x3 | nop
nop | clipw.xyz vf15, vf15
nop | nop
nop | nop
nop | nop
fcor vi01, 0xfff7df | nop
ibne vi00, vi01, L30 | nop
fcand vi01, 0x20 | nop
ibne vi00, vi01, L31 | nop
fcand vi01, 0x800 | nop
ibne vi00, vi01, L32 | nop
nop | nop
sqi.xyzw vf17, vi08 | nop
sqi.xyzw vf20, vi08 | nop
sqi.xyzw vf14, vi08 | nop
L20:
move.xyzw vf17, vf18 | nop
iaddi vi09, vi09, -0x1 | nop
move.xyzw vf20, vf21 | nop
ibne vi00, vi09, L19 | nop
move.xyzw vf14, vf15 | nop
lq.xyzw vf17, 0(vi05) | nop
lq.xyzw vf20, 1(vi05) | nop
lq.xyzw vf14, 2(vi05) | nop
ior vi07, vi05, vi00 | nop
sqi.xyzw vf17, vi08 | nop
sqi.xyzw vf20, vi08 | nop
sqi.xyzw vf14, vi08 | nop
ibeq vi00, vi10, L29 | nop
ior vi09, vi10, vi00 | nop
ior vi08, vi07, vi00 | nop
lq.xyzw vf14, 2(vi07) | nop
ior vi10, vi09, vi00 | nop
lq.xyzw vf17, 0(vi07) | nop
lq.xyzw vf20, 1(vi07) | nop
iaddi vi07, vi07, 0x3 | clipw.xyz vf14, vf14
L21:
lq.xyzw vf15, 2(vi07) | nop
lq.xyzw vf18, 0(vi07) | nop
lq.xyzw vf21, 1(vi07) | nop
iaddi vi07, vi07, 0x3 | nop
nop | clipw.xyz vf15, vf15
nop | nop
nop | nop
nop | nop
fcor vi01, 0xfffdf7 | nop
ibne vi00, vi01, L33 | nop
fcand vi01, 0x8 | nop
ibne vi00, vi01, L34 | nop
fcand vi01, 0x200 | nop
ibne vi00, vi01, L35 | nop
nop | nop
sqi.xyzw vf17, vi08 | nop
sqi.xyzw vf20, vi08 | nop
sqi.xyzw vf14, vi08 | nop
L22:
move.xyzw vf17, vf18 | nop
iaddi vi09, vi09, -0x1 | nop
move.xyzw vf20, vf21 | nop
ibne vi00, vi09, L21 | nop
move.xyzw vf14, vf15 | nop
lq.xyzw vf17, 0(vi05) | nop
lq.xyzw vf20, 1(vi05) | nop
lq.xyzw vf14, 2(vi05) | nop
ior vi07, vi05, vi00 | nop
sqi.xyzw vf17, vi08 | nop
sqi.xyzw vf20, vi08 | nop
sqi.xyzw vf14, vi08 | nop
ibeq vi00, vi10, L29 | nop
ior vi09, vi10, vi00 | nop
ior vi08, vi07, vi00 | nop
lq.xyzw vf14, 2(vi07) | nop
ior vi10, vi09, vi00 | nop
lq.xyzw vf17, 0(vi07) | nop
lq.xyzw vf20, 1(vi07) | nop
iaddi vi07, vi07, 0x3 | clipw.xyz vf14, vf14
L23:
lq.xyzw vf15, 2(vi07) | nop
lq.xyzw vf18, 0(vi07) | nop
lq.xyzw vf21, 1(vi07) | nop
iaddi vi07, vi07, 0x3 | nop
nop | clipw.xyz vf15, vf15
nop | nop
nop | nop
nop | nop
fcor vi01, 0xfffefb | nop
ibne vi00, vi01, L36 | nop
fcand vi01, 0x4 | nop
ibne vi00, vi01, L37 | nop
fcand vi01, 0x100 | nop
ibne vi00, vi01, L38 | nop
nop | nop
sqi.xyzw vf17, vi08 | nop
sqi.xyzw vf20, vi08 | nop
sqi.xyzw vf14, vi08 | nop
L24:
move.xyzw vf17, vf18 | nop
iaddi vi09, vi09, -0x1 | nop
move.xyzw vf20, vf21 | nop
ibne vi00, vi09, L23 | nop
move.xyzw vf14, vf15 | nop
lq.xyzw vf17, 0(vi05) | nop
lq.xyzw vf20, 1(vi05) | nop
lq.xyzw vf14, 2(vi05) | nop
ior vi07, vi05, vi00 | nop
sqi.xyzw vf17, vi08 | nop
sqi.xyzw vf20, vi08 | nop
sqi.xyzw vf14, vi08 | nop
ibeq vi00, vi10, L29 | nop
ior vi09, vi10, vi00 | nop
ior vi08, vi07, vi00 | nop
lq.xyzw vf14, 2(vi07) | nop
ior vi10, vi09, vi00 | nop
lq.xyzw vf17, 0(vi07) | nop
lq.xyzw vf20, 1(vi07) | nop
iaddi vi07, vi07, 0x3 | clipw.xyz vf14, vf14
L25:
lq.xyzw vf15, 2(vi07) | nop
lq.xyzw vf18, 0(vi07) | nop
lq.xyzw vf21, 1(vi07) | nop
iaddi vi07, vi07, 0x3 | nop
nop | clipw.xyz vf15, vf15
nop | nop
nop | nop
nop | nop
fcor vi01, 0xffff7d | nop
ibne vi00, vi01, L39 | nop
fcand vi01, 0x2 | nop
ibne vi00, vi01, L40 | nop
fcand vi01, 0x80 | nop
ibne vi00, vi01, L41 | nop
nop | nop
sqi.xyzw vf17, vi08 | nop
sqi.xyzw vf20, vi08 | nop
sqi.xyzw vf14, vi08 | nop
L26:
move.xyzw vf17, vf18 | nop
iaddi vi09, vi09, -0x1 | nop
move.xyzw vf20, vf21 | nop
ibne vi00, vi09, L25 | nop
move.xyzw vf14, vf15 | nop
lq.xyzw vf17, 0(vi05) | nop
lq.xyzw vf20, 1(vi05) | nop
lq.xyzw vf14, 2(vi05) | nop
ior vi07, vi05, vi00 | nop
sqi.xyzw vf17, vi08 | nop
sqi.xyzw vf20, vi08 | nop
sqi.xyzw vf14, vi08 | nop
ibeq vi00, vi10, L29 | nop
ior vi09, vi10, vi00 | nop
ior vi08, vi07, vi00 | nop
lq.xyzw vf14, 2(vi07) | nop
ior vi10, vi09, vi00 | nop
lq.xyzw vf17, 0(vi07) | nop
lq.xyzw vf20, 1(vi07) | nop
iaddi vi07, vi07, 0x3 | clipw.xyz vf14, vf14
L27:
lq.xyzw vf15, 2(vi07) | nop
lq.xyzw vf18, 0(vi07) | nop
lq.xyzw vf21, 1(vi07) | nop
iaddi vi07, vi07, 0x3 | nop
nop | clipw.xyz vf15, vf15
nop | nop
nop | nop
nop | nop
fcor vi01, 0xffffbe | nop
ibne vi00, vi01, L42 | nop
fcand vi01, 0x1 | nop
ibne vi00, vi01, L43 | nop
fcand vi01, 0x40 | nop
ibne vi00, vi01, L44 | nop
nop | nop
sqi.xyzw vf17, vi08 | nop
sqi.xyzw vf20, vi08 | nop
sqi.xyzw vf14, vi08 | nop
L28:
move.xyzw vf17, vf18 | nop
iaddi vi09, vi09, -0x1 | nop
move.xyzw vf20, vf21 | nop
ibne vi00, vi09, L27 | nop
move.xyzw vf14, vf15 | nop
lq.xyzw vf17, 0(vi05) | nop
lq.xyzw vf20, 1(vi05) | nop
lq.xyzw vf14, 2(vi05) | nop
ior vi07, vi05, vi00 | nop
sqi.xyzw vf17, vi08 | nop
sqi.xyzw vf20, vi08 | nop
sqi.xyzw vf14, vi08 | nop
ibeq vi00, vi10, L29 | nop
ior vi09, vi10, vi00 | nop
L29:
jr vi11 | nop
nop | nop
L30:
b L20 | nop
iaddi vi10, vi10, -0x1 | nop
L31:
sqi.xyzw vf17, vi08 | sub.xyzw vf16, vf15, vf14
sqi.xyzw vf20, vi08 | sub.xyzw vf19, vf18, vf17
sqi.xyzw vf14, vi08 | sub.xyzw vf22, vf21, vf20
ibeq vi07, vi08, L20 | nop
nop | addz.w vf13, vf16, vf16
nop | addw.z vf13, vf14, vf14
div Q, vf13.z, vf13.w | nop
waitq | nop
nop | mul.xyzw vf19, vf19, Q
nop | mul.xyzw vf22, vf22, Q
nop | mul.xyzw vf16, vf16, Q
nop | sub.xyzw vf19, vf17, vf19
nop | sub.xyzw vf22, vf20, vf22
nop | sub.xyzw vf16, vf14, vf16
iaddi vi10, vi10, 0x1 | nop
sqi.xyzw vf19, vi08 | nop
sqi.xyzw vf22, vi08 | nop
b L20 | nop
sqi.xyzw vf16, vi08 | nop
L32:
nop | sub.xyzw vf16, vf14, vf15
nop | sub.xyzw vf19, vf17, vf18
nop | sub.xyzw vf22, vf20, vf21
nop | addz.w vf13, vf16, vf16
nop | addw.z vf13, vf15, vf15
div Q, vf13.z, vf13.w | nop
waitq | nop
nop | mul.xyzw vf19, vf19, Q
nop | mul.xyzw vf22, vf22, Q
nop | mul.xyzw vf16, vf16, Q
nop | sub.xyzw vf19, vf18, vf19
nop | sub.xyzw vf22, vf21, vf22
nop | sub.xyzw vf16, vf15, vf16
sqi.xyzw vf19, vi08 | nop
sqi.xyzw vf22, vi08 | nop
b L20 | nop
sqi.xyzw vf16, vi08 | nop
L33:
b L22 | nop
iaddi vi10, vi10, -0x1 | nop
L34:
sqi.xyzw vf17, vi08 | sub.xyzw vf16, vf15, vf14
sqi.xyzw vf20, vi08 | sub.xyzw vf19, vf18, vf17
sqi.xyzw vf14, vi08 | sub.xyzw vf22, vf21, vf20
ibeq vi07, vi08, L22 | nop
nop | addy.w vf13, vf16, vf16
nop | addw.y vf13, vf14, vf14
div Q, vf13.y, vf13.w | nop
waitq | nop
nop | mul.xyzw vf19, vf19, Q
nop | mul.xyzw vf22, vf22, Q
nop | mul.xyzw vf16, vf16, Q
nop | sub.xyzw vf19, vf17, vf19
nop | sub.xyzw vf22, vf20, vf22
nop | sub.xyzw vf16, vf14, vf16
iaddi vi10, vi10, 0x1 | nop
sqi.xyzw vf19, vi08 | nop
sqi.xyzw vf22, vi08 | nop
b L22 | nop
sqi.xyzw vf16, vi08 | nop
L35:
nop | sub.xyzw vf16, vf14, vf15
nop | sub.xyzw vf19, vf17, vf18
nop | sub.xyzw vf22, vf20, vf21
nop | addy.w vf13, vf16, vf16
nop | addw.y vf13, vf15, vf15
div Q, vf13.y, vf13.w | nop
waitq | nop
nop | mul.xyzw vf19, vf19, Q
nop | mul.xyzw vf22, vf22, Q
nop | mul.xyzw vf16, vf16, Q
nop | sub.xyzw vf19, vf18, vf19
nop | sub.xyzw vf22, vf21, vf22
nop | sub.xyzw vf16, vf15, vf16
sqi.xyzw vf19, vi08 | nop
sqi.xyzw vf22, vi08 | nop
b L22 | nop
sqi.xyzw vf16, vi08 | nop
L36:
b L24 | nop
iaddi vi10, vi10, -0x1 | nop
L37:
sqi.xyzw vf17, vi08 | sub.xyzw vf16, vf15, vf14
sqi.xyzw vf20, vi08 | sub.xyzw vf19, vf18, vf17
sqi.xyzw vf14, vi08 | sub.xyzw vf22, vf21, vf20
ibeq vi07, vi08, L24 | nop
nop | suby.w vf13, vf16, vf16
nop | subw.y vf13, vf14, vf14
div Q, vf13.y, vf13.w | nop
waitq | nop
nop | mul.xyzw vf19, vf19, Q
nop | mul.xyzw vf22, vf22, Q
nop | mul.xyzw vf16, vf16, Q
nop | add.xyzw vf19, vf17, vf19
nop | add.xyzw vf22, vf20, vf22
nop | add.xyzw vf16, vf14, vf16
iaddi vi10, vi10, 0x1 | nop
sqi.xyzw vf19, vi08 | nop
sqi.xyzw vf22, vi08 | nop
b L24 | nop
sqi.xyzw vf16, vi08 | nop
L38:
nop | sub.xyzw vf16, vf14, vf15
nop | sub.xyzw vf19, vf17, vf18
nop | sub.xyzw vf22, vf20, vf21
nop | suby.w vf13, vf16, vf16
nop | subw.y vf13, vf15, vf15
div Q, vf13.y, vf13.w | nop
waitq | nop
nop | mul.xyzw vf19, vf19, Q
nop | mul.xyzw vf22, vf22, Q
nop | mul.xyzw vf16, vf16, Q
nop | add.xyzw vf19, vf18, vf19
nop | add.xyzw vf22, vf21, vf22
nop | add.xyzw vf16, vf15, vf16
sqi.xyzw vf19, vi08 | nop
sqi.xyzw vf22, vi08 | nop
b L24 | nop
sqi.xyzw vf16, vi08 | nop
L39:
b L26 | nop
iaddi vi10, vi10, -0x1 | nop
L40:
sqi.xyzw vf17, vi08 | sub.xyzw vf16, vf15, vf14
sqi.xyzw vf20, vi08 | sub.xyzw vf19, vf18, vf17
sqi.xyzw vf14, vi08 | sub.xyzw vf22, vf21, vf20
ibeq vi07, vi08, L26 | nop
nop | addx.w vf13, vf16, vf16
nop | addw.x vf13, vf14, vf14
div Q, vf13.x, vf13.w | nop
waitq | nop
nop | mul.xyzw vf19, vf19, Q
nop | mul.xyzw vf22, vf22, Q
nop | mul.xyzw vf16, vf16, Q
nop | sub.xyzw vf19, vf17, vf19
nop | sub.xyzw vf22, vf20, vf22
nop | sub.xyzw vf16, vf14, vf16
iaddi vi10, vi10, 0x1 | nop
sqi.xyzw vf19, vi08 | nop
sqi.xyzw vf22, vi08 | nop
b L26 | nop
sqi.xyzw vf16, vi08 | nop
L41:
nop | sub.xyzw vf16, vf14, vf15
nop | sub.xyzw vf19, vf17, vf18
nop | sub.xyzw vf22, vf20, vf21
nop | addx.w vf13, vf16, vf16
nop | addw.x vf13, vf15, vf15
div Q, vf13.x, vf13.w | nop
waitq | nop
nop | mul.xyzw vf19, vf19, Q
nop | mul.xyzw vf22, vf22, Q
nop | mul.xyzw vf16, vf16, Q
nop | sub.xyzw vf19, vf18, vf19
nop | sub.xyzw vf22, vf21, vf22
nop | sub.xyzw vf16, vf15, vf16
sqi.xyzw vf19, vi08 | nop
sqi.xyzw vf22, vi08 | nop
b L26 | nop
sqi.xyzw vf16, vi08 | nop
L42:
b L28 | nop
iaddi vi10, vi10, -0x1 | nop
L43:
sqi.xyzw vf17, vi08 | sub.xyzw vf16, vf15, vf14
sqi.xyzw vf20, vi08 | sub.xyzw vf19, vf18, vf17
sqi.xyzw vf14, vi08 | sub.xyzw vf22, vf21, vf20
ibeq vi07, vi08, L28 | nop
nop | subx.w vf13, vf16, vf16
nop | subw.x vf13, vf14, vf14
div Q, vf13.x, vf13.w | nop
waitq | nop
nop | mul.xyzw vf19, vf19, Q
nop | mul.xyzw vf22, vf22, Q
nop | mul.xyzw vf16, vf16, Q
nop | add.xyzw vf19, vf17, vf19
nop | add.xyzw vf22, vf20, vf22
nop | add.xyzw vf16, vf14, vf16
iaddi vi10, vi10, 0x1 | nop
sqi.xyzw vf19, vi08 | nop
sqi.xyzw vf22, vi08 | nop
b L28 | nop
sqi.xyzw vf16, vi08 | nop
L44:
nop | sub.xyzw vf16, vf14, vf15
nop | sub.xyzw vf19, vf17, vf18
nop | sub.xyzw vf22, vf20, vf21
nop | subx.w vf13, vf16, vf16
nop | subw.x vf13, vf15, vf15
div Q, vf13.x, vf13.w | nop
waitq | nop
nop | mul.xyzw vf19, vf19, Q
nop | mul.xyzw vf22, vf22, Q
nop | mul.xyzw vf16, vf16, Q
nop | add.xyzw vf19, vf18, vf19
nop | add.xyzw vf22, vf21, vf22
nop | add.xyzw vf16, vf15, vf16
sqi.xyzw vf19, vi08 | nop
sqi.xyzw vf22, vi08 | nop
b L28 | nop
sqi.xyzw vf16, vi08 | nop
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,957 @@
b L2 | nop
nop | nop
b L8 | nop
xtop vi14 | nop
b L1 | nop
xtop vi14 | nop
L1:
lq.xyzw vf04, 664(vi00) | nop :e
nop | nop
L2:
iaddiu vi14, vi00, 0x2a0 | nop
iaddiu vi01, vi00, 0x337 | nop
mfir.x vf03, vi14 | nop
mfir.y vf03, vi01 | nop
mfir.z vf03, vi14 | nop
mfir.w vf03, vi01 | nop
lq.xyzw vf04, 664(vi00) | nop
iaddiu vi14, vi00, 0x3ce | nop
sq.xyzw vf00, 0(vi14) | nop
sq.xyzw vf00, 7(vi14) | nop
sq.xyzw vf00, 14(vi14) | nop
sq.xyzw vf00, 21(vi14) | nop
sq.xyzw vf00, 28(vi14) | nop
sq.xyzw vf00, 35(vi14) | nop
iaddiu vi01, vi00, 0x373 | nop
iswr.z vi01, vi14 | nop
iaddiu vi01, vi00, 0x375 | nop
isw.z vi01, 7(vi14) | nop
iaddiu vi01, vi00, 0x377 | nop
isw.z vi01, 14(vi14) | nop
iaddiu vi01, vi00, 0x379 | nop
isw.z vi01, 21(vi14) | nop
iaddiu vi01, vi00, 0x37b | nop
isw.z vi01, 28(vi14) | nop
iaddiu vi01, vi00, 0x37d | nop :e
isw.z vi01, 35(vi14) | nop
L3:
iaddi vi07, vi00, -0x1 | nop
iblez vi12, L4 | nop
iaddi vi09, vi09, 0x1 | nop
ior vi10, vi06, vi00 | nop
iadd vi01, vi12, vi12 | nop
iadd vi01, vi01, vi12 | nop
iadd vi05, vi06, vi01 | nop
sqi.xyzw vf06, vi06 | nop
isw.x vi12, -1(vi06) | nop
jr vi15 | nop
ilwr.x vi12, vi09 | nop
L4:
ilw.y vi01, -1(vi09) | nop
ilw.z vi13, -1(vi09) | nop
ibeq vi00, vi12, L7 | nop
ilwr.x vi14, vi10 | nop
ibltz vi01, L5 | nop
iaddiu vi12, vi12, 0x80 | nop
iadd vi13, vi13, vi08 | nop
lqi.xyzw vf29, vi13 | nop
lqi.xyzw vf30, vi13 | nop
lqi.xyzw vf31, vi13 | nop
sqi.xyzw vf05, vi06 | nop
sqi.xyzw vf29, vi06 | nop
sqi.xyzw vf30, vi06 | nop
sqi.xyzw vf31, vi06 | nop
lqi.xyzw vf29, vi13 | nop
lqi.xyzw vf30, vi13 | nop
iadd vi01, vi12, vi12 | nop
iadd vi01, vi01, vi12 | nop
sqi.xyzw vf29, vi06 | nop
sqi.xyzw vf30, vi06 | nop
ior vi10, vi06, vi00 | nop
iadd vi05, vi06, vi01 | nop
sqi.xyzw vf06, vi06 | nop
isw.x vi12, -1(vi06) | nop
jr vi15 | nop
ilwr.x vi12, vi09 | nop
L5:
mtir vi01, vf24.w | nop
mtir vi06, vf03.y | nop
mr32.xyzw vf03, vf03 | nop
iadd vi14, vi14, vi11 | nop
ibgez vi13, L6 | nop
iswr.x vi14, vi10 | nop
xgkick vi01 | nop
ior vi10, vi06, vi00 | nop
mfir.w vf24, vi06 | nop
iadd vi01, vi12, vi12 | nop
iadd vi01, vi01, vi12 | nop
iadd vi05, vi06, vi01 | nop
sqi.xyzw vf06, vi06 | nop
isw.x vi12, -1(vi06) | nop
jr vi15 | nop
ilwr.x vi12, vi09 | nop
L6:
iadd vi13, vi13, vi08 | nop
xgkick vi01 | nop
lqi.xyzw vf29, vi13 | nop
lqi.xyzw vf30, vi13 | nop
lqi.xyzw vf31, vi13 | nop
mfir.w vf24, vi06 | nop
sqi.xyzw vf05, vi06 | nop
sqi.xyzw vf29, vi06 | nop
sqi.xyzw vf30, vi06 | nop
sqi.xyzw vf31, vi06 | nop
lqi.xyzw vf29, vi13 | nop
lqi.xyzw vf30, vi13 | nop
iadd vi01, vi12, vi12 | nop
iadd vi01, vi01, vi12 | nop
sqi.xyzw vf29, vi06 | nop
sqi.xyzw vf30, vi06 | nop
nop | nop
ior vi10, vi06, vi00 | nop
iadd vi05, vi06, vi01 | nop
sqi.xyzw vf06, vi06 | nop
isw.x vi12, -1(vi06) | nop
jr vi15 | nop
ilwr.x vi12, vi09 | nop
L7:
mtir vi01, vf24.w | nop
mr32.xyzw vf03, vf03 | nop
iadd vi14, vi14, vi11 | nop
iswr.x vi14, vi10 | nop
lq.xyzw vf04, 664(vi00) | nop
xgkick vi01 | nop
nop | nop :e
nop | nop
L8:
ilw.w vi08, 4(vi14) | nop
lq.xyzw vf02, 665(vi00) | addw.z vf28, vf00, vf00
lq.xyzw vf05, 660(vi00) | nop
lq.xyzw vf06, 658(vi00) | nop
iadd vi08, vi08, vi14 | nop
lq.xyzw vf11, 662(vi00) | nop
lq.w vf29, 1(vi08) | nop
lq.xyzw vf10, 661(vi00) | nop
ilw.z vi09, 4(vi14) | nop
ilw.y vi03, 3(vi14) | nop
nop | addy.w vf25, vf29, vf00
iaddi vi07, vi00, -0x1 | addw.z vf28, vf28, vf29
lq.xyzw vf04, 5(vi14) | mulw.xyzw vf16, vf00, vf00
lq.xyzw vf07, 6(vi14) | mulw.xyzw vf17, vf00, vf00
ibne vi00, vi14, L23 | mulw.xyzw vf18, vf00, vf00
lq.xyzw vf08, 7(vi14) | mulw.xyzw vf19, vf00, vf00
ilwr.x vi02, vi03 | nop
lq.xyzw vf09, 8(vi14) | nop
lq.xyzw vf01, 656(vi00) | nop
iadd vi09, vi09, vi14 | nop
lq.xyw vf28, 0(vi02) | nop
mtir vi06, vf03.x | nop
ilwr.x vi12, vi09 | nop
ilwr.z vi13, vi09 | nop
mtir vi04, vf28.w | subw.xyz vf24, vf28, vf25
iaddiu vi11, vi00, 0x4000 | nop
iaddiu vi11, vi11, 0x4000 | nop
ilwr.y vi02, vi03 | nop
lq.xyzw vf12, 0(vi04) | nop
lq.xyzw vf20, 1(vi04) | nop
iaddiu vi12, vi12, 0x80 | nop
iadd vi13, vi13, vi08 | nop
lq.xyw vf28, 0(vi02) | itof0.xyzw vf12, vf12
mfir.w vf24, vi06 | nop
lqi.xyzw vf29, vi13 | nop
lqi.xyzw vf30, vi13 | nop
lqi.xyzw vf31, vi13 | nop
sqi.xyzw vf05, vi06 | subw.xyz vf25, vf28, vf25
sqi.xyzw vf29, vi06 | mulaw.xyzw ACC, vf09, vf00
mtir vi04, vf28.w | nop
sqi.xyzw vf30, vi06 | maddax.xyzw ACC, vf04, vf12
sqi.xyzw vf31, vi06 | nop
ilwr.z vi02, vi03 | nop
lq.xyzw vf13, 0(vi04) | madday.xyzw ACC, vf07, vf12
lq.xyzw vf21, 1(vi04) | maddz.xyzw vf12, vf08, vf12
lqi.xyzw vf29, vi13 | nop
lqi.xyzw vf30, vi13 | nop
lq.xyw vf28, 0(vi02) | itof0.xyzw vf13, vf13
div Q, vf01.x, vf12.w | mul.xyzw vf16, vf12, vf11
sqi.xyzw vf29, vi06 | nop
sqi.xyzw vf30, vi06 | nop
iadd vi01, vi12, vi12 | subw.xyz vf26, vf28, vf25
iadd vi01, vi01, vi12 | mulaw.xyzw ACC, vf09, vf00
mtir vi04, vf28.w | nop
iadd vi05, vi06, vi01 | maddax.xyzw ACC, vf04, vf13
ior vi10, vi06, vi00 | mul.xyz vf12, vf12, Q
ilwr.w vi02, vi03 | mul.xyz vf24, vf24, Q
lq.xyzw vf14, 0(vi04) | madday.xyzw ACC, vf07, vf13
lq.xyzw vf22, 1(vi04) | maddz.xyzw vf13, vf08, vf13
sqi.xyzw vf06, vi06 | add.xyzw vf12, vf12, vf10
isw.x vi12, -1(vi06) | nop
lq.xyw vf28, 0(vi02) | itof0.xyzw vf14, vf14
div Q, vf01.x, vf13.w | mul.xyzw vf17, vf13, vf11
iaddi vi09, vi09, 0x1 | miniz.w vf12, vf12, vf01
ilwr.x vi12, vi09 | clipw.xyz vf16, vf16
L9:
iaddi vi03, vi03, 0x1 | subw.xyz vf27, vf28, vf25
iaddi vi07, vi07, 0x1 | mulaw.xyzw ACC, vf09, vf00
mtir vi04, vf28.w | maxy.w vf12, vf12, vf01
fcand vi01, 0x3ffff | maddax.xyzw ACC, vf04, vf14
ibne vi00, vi01, L19 | mul.xyz vf13, vf13, Q
ilwr.x vi02, vi03 | mul.xyz vf25, vf25, Q
L10:
lq.xyzw vf15, 0(vi04) | madday.xyzw ACC, vf07, vf14
lq.xyzw vf23, 1(vi04) | maddz.xyzw vf14, vf08, vf14
sqi.xyz vf24, vi06 | add.xyzw vf13, vf13, vf10
sqi.xyzw vf20, vi06 | ftoi4.xyzw vf12, vf12
lq.xyw vf28, 0(vi02) | itof0.xyzw vf15, vf15
div Q, vf01.x, vf14.w | mul.xyzw vf18, vf14, vf11
ibeq vi05, vi06, L14 | miniz.w vf13, vf13, vf01
sqi.xyzw vf12, vi06 | clipw.xyz vf17, vf17
nop | subw.xyz vf24, vf28, vf25
iaddi vi07, vi07, 0x1 | mulaw.xyzw ACC, vf09, vf00
mtir vi04, vf28.w | maxy.w vf13, vf13, vf01
fcand vi01, 0x3ffff | maddax.xyzw ACC, vf04, vf15
ibne vi00, vi01, L20 | mul.xyz vf14, vf14, Q
ilwr.y vi02, vi03 | mul.xyz vf26, vf26, Q
L11:
lq.xyzw vf12, 0(vi04) | madday.xyzw ACC, vf07, vf15
lq.xyzw vf20, 1(vi04) | maddz.xyzw vf15, vf08, vf15
sqi.xyzw vf25, vi06 | add.xyzw vf14, vf14, vf10
sqi.xyzw vf21, vi06 | ftoi4.xyzw vf13, vf13
lq.xyw vf28, 0(vi02) | itof0.xyzw vf12, vf12
div Q, vf01.x, vf15.w | mul.xyzw vf19, vf15, vf11
ibeq vi05, vi06, L15 | miniz.w vf14, vf14, vf01
sqi.xyzw vf13, vi06 | clipw.xyz vf18, vf18
nop | subw.xyz vf25, vf28, vf25
iaddi vi07, vi07, 0x1 | mulaw.xyzw ACC, vf09, vf00
mtir vi04, vf28.w | maxy.w vf14, vf14, vf01
fcand vi01, 0x3ffff | maddax.xyzw ACC, vf04, vf12
ibne vi00, vi01, L21 | mul.xyz vf15, vf15, Q
ilwr.z vi02, vi03 | mul.xyz vf27, vf27, Q
L12:
lq.xyzw vf13, 0(vi04) | madday.xyzw ACC, vf07, vf12
lq.xyzw vf21, 1(vi04) | maddz.xyzw vf12, vf08, vf12
sqi.xyzw vf26, vi06 | add.xyzw vf15, vf15, vf10
sqi.xyzw vf22, vi06 | ftoi4.xyzw vf14, vf14
lq.xyw vf28, 0(vi02) | itof0.xyzw vf13, vf13
div Q, vf01.x, vf12.w | mul.xyzw vf16, vf12, vf11
ibeq vi05, vi06, L16 | miniz.w vf15, vf15, vf01
sqi.xyzw vf14, vi06 | clipw.xyz vf19, vf19
nop | subw.xyz vf26, vf28, vf25
iaddi vi07, vi07, 0x1 | mulaw.xyzw ACC, vf09, vf00
mtir vi04, vf28.w | maxy.w vf15, vf15, vf01
fcand vi01, 0x3ffff | maddax.xyzw ACC, vf04, vf13
ibne vi00, vi01, L22 | mul.xyz vf12, vf12, Q
ilwr.w vi02, vi03 | mul.xyz vf24, vf24, Q
L13:
lq.xyzw vf14, 0(vi04) | madday.xyzw ACC, vf07, vf13
lq.xyzw vf22, 1(vi04) | maddz.xyzw vf13, vf08, vf13
sqi.xyzw vf27, vi06 | add.xyzw vf12, vf12, vf10
sqi.xyzw vf23, vi06 | ftoi4.xyzw vf15, vf15
lq.xyw vf28, 0(vi02) | itof0.xyzw vf14, vf14
div Q, vf01.x, vf13.w | mul.xyzw vf17, vf13, vf11
ibne vi05, vi06, L9 | miniz.w vf12, vf12, vf01
sqi.xyzw vf15, vi06 | clipw.xyz vf16, vf16
b L3 | nop
iaddiu vi15, vi00, 0xb7 | nop
L14:
b L3 | nop
iaddiu vi15, vi00, 0xc5 | nop
L15:
b L3 | nop
iaddiu vi15, vi00, 0xd3 | nop
L16:
b L3 | nop
iaddiu vi15, vi00, 0xe1 | nop
L17:
iaddiu vi14, vi07, 0x4000 | nop
iaddiu vi14, vi14, 0x4000 | nop
isw.y vi13, 1022(vi00) | nop
isw.z vi05, 1021(vi00) | nop
isw.x vi06, 1020(vi00) | nop
isw.y vi07, 1020(vi00) | nop
isw.z vi08, 1020(vi00) | nop
isw.w vi09, 1020(vi00) | nop
isw.x vi10, 1021(vi00) | nop
isw.y vi12, 1021(vi00) | nop
iswr.x vi14, vi10 | nop
lq.xyzw vf06, 659(vi00) | nop
xgkick vi01 | nop
mtir vi11, vf03.y | nop
iaddiu vi01, vi00, 0x4000 | nop
iaddiu vi01, vi01, 0x4000 | nop
sq.xyzw vf06, 0(vi11) | nop
jr vi15 | nop
iswr.x vi01, vi11 | nop
L18:
ilw.y vi14, 1022(vi00) | nop
ilw.z vi05, 1021(vi00) | nop
ilw.x vi06, 1020(vi00) | nop
ilw.y vi07, 1020(vi00) | nop
ilw.z vi08, 1020(vi00) | nop
ilw.w vi09, 1020(vi00) | nop
ilw.x vi10, 1021(vi00) | nop
ilw.y vi12, 1021(vi00) | nop
lq.xyzw vf06, 658(vi00) | nop
mtir vi11, vf03.y | nop
iaddi vi01, vi06, -0x4 | nop
isub vi14, vi14, vi07 | nop
iaddi vi14, vi14, 0x1 | nop
xgkick vi11 | nop
mfir.w vf24, vi01 | nop
ior vi10, vi01, vi00 | nop
sq.xyzw vf06, 0(vi01) | nop
iswr.x vi14, vi01 | nop
jr vi15 | nop
iaddi vi07, vi00, 0x1 | nop
L19:
iaddi vi01, vi07, -0x2 | mul.xyzw vf29, vf18, vf02
isw.w vi15, 1021(vi00) | mul.xyzw vf30, vf19, vf02
ibltz vi01, L10 | mul.xyzw vf31, vf16, vf02
nop | addw.w vf12, vf12, vf01
nop | clipw.xyz vf29, vf29
nop | clipw.xyz vf30, vf30
nop | clipw.xyz vf31, vf31
iaddiu vi11, vi00, 0x3f | nop
fcget vi01 | nop
fcget vi13 | nop
fcget vi14 | nop
iand vi01, vi01, vi13 | clipw.xyz vf18, vf18
iand vi01, vi01, vi14 | clipw.xyz vf19, vf19
iand vi01, vi01, vi11 | clipw.xyz vf16, vf16
iaddiu vi11, vi00, 0x4000 | nop
ibne vi00, vi01, L10 | nop
iaddiu vi11, vi11, 0x4000 | nop
ilwr.x vi13, vi10 | nop
bal vi15, L17 | nop
mtir vi01, vf24.w | nop
ilw.z vi14, -2(vi03) | nop
sq.xyzw vf16, 28(vi11) | nop
sq.xyzw vf20, 29(vi11) | nop
sq.xyzw vf19, 31(vi11) | nop
ilwr.w vi13, vi14 | nop
sq.xyzw vf23, 32(vi11) | nop
sq.xyzw vf18, 34(vi11) | nop
ilw.x vi01, -1(vi03) | nop
lq.xyzw vf29, 1(vi13) | nop
bal vi15, L36 | nop
ilw.w vi13, -2(vi03) | nop
bal vi15, L18 | nop
nop | nop
ilw.w vi15, 1021(vi00) | nop
mtir vi04, vf28.w | nop
iaddiu vi11, vi00, 0x4000 | nop
b L10 | nop
iaddiu vi11, vi11, 0x4000 | nop
L20:
iaddi vi01, vi07, -0x2 | mul.xyzw vf29, vf19, vf02
isw.w vi15, 1021(vi00) | mul.xyzw vf30, vf16, vf02
ibltz vi01, L11 | mul.xyzw vf31, vf17, vf02
nop | addw.w vf13, vf13, vf01
nop | clipw.xyz vf29, vf29
nop | clipw.xyz vf30, vf30
nop | clipw.xyz vf31, vf31
iaddiu vi11, vi00, 0x3f | nop
fcget vi01 | nop
fcget vi13 | nop
fcget vi14 | nop
iand vi01, vi01, vi13 | clipw.xyz vf19, vf19
iand vi01, vi01, vi14 | clipw.xyz vf16, vf16
iand vi01, vi01, vi11 | clipw.xyz vf17, vf17
iaddiu vi11, vi00, 0x4000 | nop
ibne vi00, vi01, L11 | nop
iaddiu vi11, vi11, 0x4000 | nop
ilwr.x vi13, vi10 | nop
bal vi15, L17 | nop
mtir vi01, vf24.w | nop
ilw.w vi14, -2(vi03) | nop
sq.xyzw vf17, 28(vi11) | nop
sq.xyzw vf21, 29(vi11) | nop
sq.xyzw vf16, 31(vi11) | nop
ilwr.w vi13, vi14 | nop
sq.xyzw vf20, 32(vi11) | nop
sq.xyzw vf19, 34(vi11) | nop
ilw.y vi01, -1(vi03) | nop
lq.xyzw vf29, 1(vi13) | nop
bal vi15, L36 | nop
ilw.x vi13, -1(vi03) | nop
bal vi15, L18 | nop
nop | nop
ilw.w vi15, 1021(vi00) | nop
mtir vi04, vf28.w | nop
iaddiu vi11, vi00, 0x4000 | nop
b L11 | nop
iaddiu vi11, vi11, 0x4000 | nop
L21:
iaddi vi01, vi07, -0x2 | mul.xyzw vf29, vf16, vf02
isw.w vi15, 1021(vi00) | mul.xyzw vf30, vf17, vf02
ibltz vi01, L12 | mul.xyzw vf31, vf18, vf02
nop | addw.w vf14, vf14, vf01
nop | clipw.xyz vf29, vf29
nop | clipw.xyz vf30, vf30
nop | clipw.xyz vf31, vf31
iaddiu vi11, vi00, 0x3f | nop
fcget vi01 | nop
fcget vi13 | nop
fcget vi14 | nop
iand vi01, vi01, vi13 | clipw.xyz vf16, vf16
iand vi01, vi01, vi14 | clipw.xyz vf17, vf17
iand vi01, vi01, vi11 | clipw.xyz vf18, vf18
iaddiu vi11, vi00, 0x4000 | nop
ibne vi00, vi01, L12 | nop
iaddiu vi11, vi11, 0x4000 | nop
ilwr.x vi13, vi10 | nop
bal vi15, L17 | nop
mtir vi01, vf24.w | nop
ilw.x vi14, -1(vi03) | nop
sq.xyzw vf18, 28(vi11) | nop
sq.xyzw vf22, 29(vi11) | nop
sq.xyzw vf17, 31(vi11) | nop
ilwr.w vi13, vi14 | nop
sq.xyzw vf21, 32(vi11) | nop
sq.xyzw vf16, 34(vi11) | nop
ilw.z vi01, -1(vi03) | nop
lq.xyzw vf29, 1(vi13) | nop
bal vi15, L36 | nop
ilw.y vi13, -1(vi03) | nop
bal vi15, L18 | nop
nop | nop
ilw.w vi15, 1021(vi00) | nop
mtir vi04, vf28.w | nop
iaddiu vi11, vi00, 0x4000 | nop
b L12 | nop
iaddiu vi11, vi11, 0x4000 | nop
L22:
iaddi vi01, vi07, -0x2 | mul.xyzw vf29, vf17, vf02
isw.w vi15, 1021(vi00) | mul.xyzw vf30, vf18, vf02
ibltz vi01, L13 | mul.xyzw vf31, vf19, vf02
nop | addw.w vf15, vf15, vf01
nop | clipw.xyz vf29, vf29
nop | clipw.xyz vf30, vf30
nop | clipw.xyz vf31, vf31
iaddiu vi11, vi00, 0x3f | nop
fcget vi01 | nop
fcget vi13 | nop
fcget vi14 | nop
iand vi01, vi01, vi13 | clipw.xyz vf17, vf17
iand vi01, vi01, vi14 | clipw.xyz vf18, vf18
iand vi01, vi01, vi11 | clipw.xyz vf19, vf19
iaddiu vi11, vi00, 0x4000 | nop
ibne vi00, vi01, L13 | nop
iaddiu vi11, vi11, 0x4000 | nop
ilwr.x vi13, vi10 | nop
bal vi15, L17 | nop
mtir vi01, vf24.w | nop
ilw.y vi14, -1(vi03) | nop
sq.xyzw vf19, 28(vi11) | nop
sq.xyzw vf23, 29(vi11) | nop
sq.xyzw vf18, 31(vi11) | nop
ilwr.w vi13, vi14 | nop
sq.xyzw vf22, 32(vi11) | nop
sq.xyzw vf17, 34(vi11) | nop
ilw.w vi01, -1(vi03) | nop
lq.xyzw vf29, 1(vi13) | nop
bal vi15, L36 | nop
ilw.z vi13, -1(vi03) | nop
bal vi15, L18 | nop
nop | nop
ilw.w vi15, 1021(vi00) | nop
mtir vi04, vf28.w | nop
iaddiu vi11, vi00, 0x4000 | nop
b L13 | nop
iaddiu vi11, vi11, 0x4000 | addw.w vf15, vf15, vf01
L23:
ilw.x vi02, 328(vi03) | nop
lq.xyzw vf09, 8(vi14) | nop
lq.xyzw vf01, 656(vi00) | nop
iadd vi09, vi09, vi14 | nop
lq.xyw vf28, 328(vi02) | nop
mtir vi06, vf03.x | nop
ilwr.x vi12, vi09 | nop
ilwr.z vi13, vi09 | nop
mtir vi04, vf28.w | subw.xyz vf24, vf28, vf25
iaddiu vi11, vi00, 0x4000 | nop
iaddiu vi11, vi11, 0x4000 | nop
ilw.y vi02, 328(vi03) | nop
lq.xyzw vf12, 328(vi04) | nop
lq.xyzw vf20, 329(vi04) | nop
iaddiu vi12, vi12, 0x80 | nop
iadd vi13, vi13, vi08 | nop
lq.xyw vf28, 328(vi02) | itof0.xyzw vf12, vf12
mfir.w vf24, vi06 | nop
lqi.xyzw vf29, vi13 | nop
lqi.xyzw vf30, vi13 | nop
lqi.xyzw vf31, vi13 | nop
sqi.xyzw vf05, vi06 | subw.xyz vf25, vf28, vf25
sqi.xyzw vf29, vi06 | mulaw.xyzw ACC, vf09, vf00
mtir vi04, vf28.w | nop
sqi.xyzw vf30, vi06 | maddax.xyzw ACC, vf04, vf12
sqi.xyzw vf31, vi06 | nop
ilw.z vi02, 328(vi03) | nop
lq.xyzw vf13, 328(vi04) | madday.xyzw ACC, vf07, vf12
lq.xyzw vf21, 329(vi04) | maddz.xyzw vf12, vf08, vf12
lqi.xyzw vf29, vi13 | nop
lqi.xyzw vf30, vi13 | nop
lq.xyw vf28, 328(vi02) | itof0.xyzw vf13, vf13
div Q, vf01.x, vf12.w | mul.xyzw vf16, vf12, vf11
sqi.xyzw vf29, vi06 | nop
sqi.xyzw vf30, vi06 | nop
iadd vi01, vi12, vi12 | subw.xyz vf26, vf28, vf25
iadd vi01, vi01, vi12 | mulaw.xyzw ACC, vf09, vf00
mtir vi04, vf28.w | nop
iadd vi05, vi06, vi01 | maddax.xyzw ACC, vf04, vf13
ior vi10, vi06, vi00 | mul.xyz vf12, vf12, Q
ilw.w vi02, 328(vi03) | mul.xyz vf24, vf24, Q
lq.xyzw vf14, 328(vi04) | madday.xyzw ACC, vf07, vf13
lq.xyzw vf22, 329(vi04) | maddz.xyzw vf13, vf08, vf13
sqi.xyzw vf06, vi06 | add.xyzw vf12, vf12, vf10
isw.x vi12, -1(vi06) | nop
lq.xyw vf28, 328(vi02) | itof0.xyzw vf14, vf14
div Q, vf01.x, vf13.w | mul.xyzw vf17, vf13, vf11
iaddi vi09, vi09, 0x1 | miniz.w vf12, vf12, vf01
ilwr.x vi12, vi09 | clipw.xyz vf16, vf16
L24:
iaddi vi03, vi03, 0x1 | subw.xyz vf27, vf28, vf25
iaddi vi07, vi07, 0x1 | mulaw.xyzw ACC, vf09, vf00
mtir vi04, vf28.w | maxy.w vf12, vf12, vf01
fcand vi01, 0x3ffff | maddax.xyzw ACC, vf04, vf14
ibne vi00, vi01, L32 | mul.xyz vf13, vf13, Q
ilw.x vi02, 328(vi03) | mul.xyz vf25, vf25, Q
L25:
lq.xyzw vf15, 328(vi04) | madday.xyzw ACC, vf07, vf14
lq.xyzw vf23, 329(vi04) | maddz.xyzw vf14, vf08, vf14
sqi.xyz vf24, vi06 | add.xyzw vf13, vf13, vf10
sqi.xyzw vf20, vi06 | ftoi4.xyzw vf12, vf12
lq.xyw vf28, 328(vi02) | itof0.xyzw vf15, vf15
div Q, vf01.x, vf14.w | mul.xyzw vf18, vf14, vf11
ibeq vi05, vi06, L29 | miniz.w vf13, vf13, vf01
sqi.xyzw vf12, vi06 | clipw.xyz vf17, vf17
nop | subw.xyz vf24, vf28, vf25
iaddi vi07, vi07, 0x1 | mulaw.xyzw ACC, vf09, vf00
mtir vi04, vf28.w | maxy.w vf13, vf13, vf01
fcand vi01, 0x3ffff | maddax.xyzw ACC, vf04, vf15
ibne vi00, vi01, L33 | mul.xyz vf14, vf14, Q
ilw.y vi02, 328(vi03) | mul.xyz vf26, vf26, Q
L26:
lq.xyzw vf12, 328(vi04) | madday.xyzw ACC, vf07, vf15
lq.xyzw vf20, 329(vi04) | maddz.xyzw vf15, vf08, vf15
sqi.xyzw vf25, vi06 | add.xyzw vf14, vf14, vf10
sqi.xyzw vf21, vi06 | ftoi4.xyzw vf13, vf13
lq.xyw vf28, 328(vi02) | itof0.xyzw vf12, vf12
div Q, vf01.x, vf15.w | mul.xyzw vf19, vf15, vf11
ibeq vi05, vi06, L30 | miniz.w vf14, vf14, vf01
sqi.xyzw vf13, vi06 | clipw.xyz vf18, vf18
nop | subw.xyz vf25, vf28, vf25
iaddi vi07, vi07, 0x1 | mulaw.xyzw ACC, vf09, vf00
mtir vi04, vf28.w | maxy.w vf14, vf14, vf01
fcand vi01, 0x3ffff | maddax.xyzw ACC, vf04, vf12
ibne vi00, vi01, L34 | mul.xyz vf15, vf15, Q
ilw.z vi02, 328(vi03) | mul.xyz vf27, vf27, Q
L27:
lq.xyzw vf13, 328(vi04) | madday.xyzw ACC, vf07, vf12
lq.xyzw vf21, 329(vi04) | maddz.xyzw vf12, vf08, vf12
sqi.xyzw vf26, vi06 | add.xyzw vf15, vf15, vf10
sqi.xyzw vf22, vi06 | ftoi4.xyzw vf14, vf14
lq.xyw vf28, 328(vi02) | itof0.xyzw vf13, vf13
div Q, vf01.x, vf12.w | mul.xyzw vf16, vf12, vf11
ibeq vi05, vi06, L31 | miniz.w vf15, vf15, vf01
sqi.xyzw vf14, vi06 | clipw.xyz vf19, vf19
nop | subw.xyz vf26, vf28, vf25
iaddi vi07, vi07, 0x1 | mulaw.xyzw ACC, vf09, vf00
mtir vi04, vf28.w | maxy.w vf15, vf15, vf01
fcand vi01, 0x3ffff | maddax.xyzw ACC, vf04, vf13
ibne vi00, vi01, L35 | mul.xyz vf12, vf12, Q
ilw.w vi02, 328(vi03) | mul.xyz vf24, vf24, Q
L28:
lq.xyzw vf14, 328(vi04) | madday.xyzw ACC, vf07, vf13
lq.xyzw vf22, 329(vi04) | maddz.xyzw vf13, vf08, vf13
sqi.xyzw vf27, vi06 | add.xyzw vf12, vf12, vf10
sqi.xyzw vf23, vi06 | ftoi4.xyzw vf15, vf15
lq.xyw vf28, 328(vi02) | itof0.xyzw vf14, vf14
div Q, vf01.x, vf13.w | mul.xyzw vf17, vf13, vf11
ibne vi05, vi06, L24 | miniz.w vf12, vf12, vf01
sqi.xyzw vf15, vi06 | clipw.xyz vf16, vf16
b L3 | nop
iaddiu vi15, vi00, 0x1e7 | nop
L29:
b L3 | nop
iaddiu vi15, vi00, 0x1f5 | nop
L30:
b L3 | nop
iaddiu vi15, vi00, 0x203 | nop
L31:
b L3 | nop
iaddiu vi15, vi00, 0x211 | nop
L32:
iaddi vi01, vi07, -0x2 | mul.xyzw vf29, vf18, vf02
isw.w vi15, 1021(vi00) | mul.xyzw vf30, vf19, vf02
ibltz vi01, L25 | mul.xyzw vf31, vf16, vf02
nop | addw.w vf12, vf12, vf01
nop | clipw.xyz vf29, vf29
nop | clipw.xyz vf30, vf30
nop | clipw.xyz vf31, vf31
iaddiu vi11, vi00, 0x3f | nop
fcget vi01 | nop
fcget vi13 | nop
fcget vi14 | nop
iand vi01, vi01, vi13 | clipw.xyz vf18, vf18
iand vi01, vi01, vi14 | clipw.xyz vf19, vf19
iand vi01, vi01, vi11 | clipw.xyz vf16, vf16
iaddiu vi11, vi00, 0x4000 | nop
ibne vi00, vi01, L25 | nop
iaddiu vi11, vi11, 0x4000 | nop
ilwr.x vi13, vi10 | nop
bal vi15, L17 | nop
mtir vi01, vf24.w | nop
ilw.z vi14, 326(vi03) | nop
sq.xyzw vf16, 28(vi11) | nop
sq.xyzw vf20, 29(vi11) | nop
sq.xyzw vf19, 31(vi11) | nop
ilw.w vi13, 328(vi14) | nop
sq.xyzw vf23, 32(vi11) | nop
sq.xyzw vf18, 34(vi11) | nop
ilw.x vi01, 327(vi03) | nop
lq.xyzw vf29, 329(vi13) | nop
bal vi15, L37 | nop
ilw.w vi13, 326(vi03) | nop
bal vi15, L18 | nop
nop | nop
ilw.w vi15, 1021(vi00) | nop
mtir vi04, vf28.w | nop
iaddiu vi11, vi00, 0x4000 | nop
b L25 | nop
iaddiu vi11, vi11, 0x4000 | nop
L33:
iaddi vi01, vi07, -0x2 | mul.xyzw vf29, vf19, vf02
isw.w vi15, 1021(vi00) | mul.xyzw vf30, vf16, vf02
ibltz vi01, L26 | mul.xyzw vf31, vf17, vf02
nop | addw.w vf13, vf13, vf01
nop | clipw.xyz vf29, vf29
nop | clipw.xyz vf30, vf30
nop | clipw.xyz vf31, vf31
iaddiu vi11, vi00, 0x3f | nop
fcget vi01 | nop
fcget vi13 | nop
fcget vi14 | nop
iand vi01, vi01, vi13 | clipw.xyz vf19, vf19
iand vi01, vi01, vi14 | clipw.xyz vf16, vf16
iand vi01, vi01, vi11 | clipw.xyz vf17, vf17
iaddiu vi11, vi00, 0x4000 | nop
ibne vi00, vi01, L26 | nop
iaddiu vi11, vi11, 0x4000 | nop
ilwr.x vi13, vi10 | nop
bal vi15, L17 | nop
mtir vi01, vf24.w | nop
ilw.w vi14, 326(vi03) | nop
sq.xyzw vf17, 28(vi11) | nop
sq.xyzw vf21, 29(vi11) | nop
sq.xyzw vf16, 31(vi11) | nop
ilw.w vi13, 328(vi14) | nop
sq.xyzw vf20, 32(vi11) | nop
sq.xyzw vf19, 34(vi11) | nop
ilw.y vi01, 327(vi03) | nop
lq.xyzw vf29, 329(vi13) | nop
bal vi15, L37 | nop
ilw.x vi13, 327(vi03) | nop
bal vi15, L18 | nop
nop | nop
ilw.w vi15, 1021(vi00) | nop
mtir vi04, vf28.w | nop
iaddiu vi11, vi00, 0x4000 | nop
b L26 | nop
iaddiu vi11, vi11, 0x4000 | nop
L34:
iaddi vi01, vi07, -0x2 | mul.xyzw vf29, vf16, vf02
isw.w vi15, 1021(vi00) | mul.xyzw vf30, vf17, vf02
ibltz vi01, L27 | mul.xyzw vf31, vf18, vf02
nop | addw.w vf14, vf14, vf01
nop | clipw.xyz vf29, vf29
nop | clipw.xyz vf30, vf30
nop | clipw.xyz vf31, vf31
iaddiu vi11, vi00, 0x3f | nop
fcget vi01 | nop
fcget vi13 | nop
fcget vi14 | nop
iand vi01, vi01, vi13 | clipw.xyz vf16, vf16
iand vi01, vi01, vi14 | clipw.xyz vf17, vf17
iand vi01, vi01, vi11 | clipw.xyz vf18, vf18
iaddiu vi11, vi00, 0x4000 | nop
ibne vi00, vi01, L27 | nop
iaddiu vi11, vi11, 0x4000 | nop
ilwr.x vi13, vi10 | nop
bal vi15, L17 | nop
mtir vi01, vf24.w | nop
ilw.x vi14, 327(vi03) | nop
sq.xyzw vf18, 28(vi11) | nop
sq.xyzw vf22, 29(vi11) | nop
sq.xyzw vf17, 31(vi11) | nop
ilw.w vi13, 328(vi14) | nop
sq.xyzw vf21, 32(vi11) | nop
sq.xyzw vf16, 34(vi11) | nop
ilw.z vi01, 327(vi03) | nop
lq.xyzw vf29, 329(vi13) | nop
bal vi15, L37 | nop
ilw.y vi13, 327(vi03) | nop
bal vi15, L18 | nop
nop | nop
ilw.w vi15, 1021(vi00) | nop
mtir vi04, vf28.w | nop
iaddiu vi11, vi00, 0x4000 | nop
b L27 | nop
iaddiu vi11, vi11, 0x4000 | nop
L35:
iaddi vi01, vi07, -0x2 | mul.xyzw vf29, vf17, vf02
isw.w vi15, 1021(vi00) | mul.xyzw vf30, vf18, vf02
ibltz vi01, L28 | mul.xyzw vf31, vf19, vf02
nop | addw.w vf15, vf15, vf01
nop | clipw.xyz vf29, vf29
nop | clipw.xyz vf30, vf30
nop | clipw.xyz vf31, vf31
iaddiu vi11, vi00, 0x3f | nop
fcget vi01 | nop
fcget vi13 | nop
fcget vi14 | nop
iand vi01, vi01, vi13 | clipw.xyz vf17, vf17
iand vi01, vi01, vi14 | clipw.xyz vf18, vf18
iand vi01, vi01, vi11 | clipw.xyz vf19, vf19
iaddiu vi11, vi00, 0x4000 | nop
ibne vi00, vi01, L28 | nop
iaddiu vi11, vi11, 0x4000 | nop
ilwr.x vi13, vi10 | nop
bal vi15, L17 | nop
mtir vi01, vf24.w | nop
ilw.y vi14, 327(vi03) | nop
sq.xyzw vf19, 28(vi11) | nop
sq.xyzw vf23, 29(vi11) | nop
sq.xyzw vf18, 31(vi11) | nop
ilw.w vi13, 328(vi14) | nop
sq.xyzw vf22, 32(vi11) | nop
sq.xyzw vf17, 34(vi11) | nop
ilw.w vi01, 327(vi03) | nop
lq.xyzw vf29, 329(vi13) | nop
bal vi15, L37 | nop
ilw.z vi13, 327(vi03) | nop
bal vi15, L18 | nop
nop | nop
ilw.w vi15, 1021(vi00) | nop
mtir vi04, vf28.w | nop
iaddiu vi11, vi00, 0x4000 | nop
b L28 | nop
iaddiu vi11, vi11, 0x4000 | nop
L36:
sq.xyzw vf16, 45(vi11) | nop
sq.xyzw vf17, 46(vi11) | nop
sq.xyzw vf18, 47(vi11) | nop
lq.xy vf16, 0(vi01) | nop
lq.xy vf17, 0(vi13) | addw.z vf16, vf00, vf00
b L38 | nop
lq.xy vf18, 0(vi14) | addw.z vf17, vf00, vf00
L37:
sq.xyzw vf16, 45(vi11) | nop
sq.xyzw vf17, 46(vi11) | nop
sq.xyzw vf18, 47(vi11) | nop
lq.xy vf16, 328(vi01) | nop
lq.xy vf17, 328(vi13) | addw.z vf16, vf00, vf00
b L38 | nop
lq.xy vf18, 328(vi14) | addw.z vf17, vf00, vf00
L38:
sq.xyzw vf20, 42(vi11) | addw.z vf18, vf00, vf00
sq.xyzw vf21, 43(vi11) | nop
sq.xyzw vf22, 44(vi11) | nop
lq.xyzw vf20, 29(vi11) | subw.xy vf16, vf16, vf25
lq.xyzw vf21, 32(vi11) | subw.xy vf17, vf17, vf25
sq.xyzw vf12, 39(vi11) | subw.xy vf18, vf18, vf25
sq.xyzw vf13, 40(vi11) | nop
sq.xyzw vf16, 30(vi11) | itof0.xyzw vf20, vf20
sq.xyzw vf17, 33(vi11) | itof0.xyzw vf21, vf21
sq.xyzw vf18, 36(vi11) | itof0.xyzw vf22, vf29
sq.xyzw vf14, 41(vi11) | nop
sq.xyzw vf20, 29(vi11) | nop
sq.xyzw vf21, 32(vi11) | nop
sq.xyzw vf22, 35(vi11) | nop
iaddi vi14, vi11, 0x1 | nop
lq.xyzw vf31, 663(vi00) | nop
isw.x vi15, 1022(vi00) | nop
iaddi vi04, vi00, 0x0 | nop
bal vi15, L39 | nop
iaddiu vi06, vi11, 0x1c | nop
bal vi15, L39 | nop
iaddiu vi06, vi11, 0x1f | nop
bal vi15, L39 | nop
iaddiu vi06, vi11, 0x22 | nop
b L48 | nop
nop | nop
L39:
iaddiu vi08, vi00, 0x3ce | nop
L40:
iaddi vi09, vi00, 0x0 | nop
L41:
isubiu vi01, vi08, 0x3f8 | nop
ilwr.y vi07, vi08 | nop
ibeq vi00, vi01, L45 | nop
ilwr.z vi05, vi08 | nop
lq.xyzw vf13, 0(vi06) | nop
lq.xyzw vf12, 0(vi07) | nop
ibne vi00, vi07, L42 | nop
iswr.y vi06, vi08 | nop
jalr vi10, vi05 | nop
iswr.x vi06, vi08 | nop
nop | nop
nop | nop
nop | nop
fsand vi13, 0x2 | nop
ibne vi00, vi13, L46 | nop
nop | nop
b L41 | nop
iaddi vi08, vi08, 0x7 | nop
L42:
jalr vi10, vi05 | nop
lq.xyzw vf20, 1(vi07) | nop
lq.xyzw vf21, 1(vi06) | nop
lq.xyzw vf16, 2(vi07) | nop
fsand vi01, 0x2 | nop
fsand vi13, 0x2 | subw.w vf30, vf29, vf30
ibne vi00, vi01, L44 | nop
lq.xyzw vf17, 2(vi06) | nop
ibne vi00, vi13, L43 | nop
div Q, vf29.w, vf30.w | nop
b L41 | nop
iaddi vi08, vi08, 0x7 | nop
L43:
bal vi10, L53 | nop
iaddi vi06, vi08, 0x1 | nop
sq.xyzw vf14, 1(vi08) | nop
sq.xyzw vf22, 2(vi08) | nop
sq.xyzw vf18, 3(vi08) | nop
b L41 | nop
iaddi vi08, vi08, 0x7 | nop
L44:
ibne vi00, vi13, L46 | nop
div Q, vf29.w, vf30.w | nop
bal vi10, L53 | nop
nop | nop
sq.xyzw vf14, 4(vi08) | nop
sq.xyzw vf22, 5(vi08) | nop
sq.xyzw vf18, 6(vi08) | nop
iaddi vi08, vi08, 0x7 | nop
isw.x vi08, 1016(vi09) | nop
isw.y vi06, 1016(vi09) | nop
iaddi vi09, vi09, 0x1 | nop
b L41 | nop
iaddi vi06, vi08, -0x3 | nop
L45:
lq.xyzw vf12, 0(vi06) | nop
lq.xyzw vf20, 1(vi06) | nop
lq.xyzw vf16, 2(vi06) | nop
iaddi vi04, vi04, 0x1 | nop
nop | nop
div Q, vf00.w, vf12.w | mul.xyzw vf12, vf12, vf31
nop | ftoi0.xyzw vf20, vf20
nop | nop
iaddi vi14, vi14, 0x3 | nop
waitq | mul.xyz vf16, vf16, Q
sq.xyzw vf20, -2(vi14) | mul.xyz vf12, vf12, Q
nop | add.xyzw vf12, vf12, vf10
nop | maxy.w vf12, vf12, vf01
nop | miniz.w vf12, vf12, vf01
sq.xyzw vf16, -3(vi14) | ftoi4.xyzw vf12, vf12
sq.xyzw vf12, -1(vi14) | nop
L46:
iblez vi09, L47 | nop
nop | nop
ilw.x vi08, 1015(vi09) | nop
ilw.y vi06, 1015(vi09) | nop
b L41 | nop
iaddi vi09, vi09, -0x1 | nop
L47:
jr vi15 | nop
nop | nop
L48:
iaddiu vi08, vi00, 0x3ce | nop
L49:
ilwr.x vi07, vi08 | nop
ilwr.y vi06, vi08 | nop
ilwr.z vi05, vi08 | nop
nop | nop
ibeq vi00, vi07, L51 | nop
lq.xyzw vf12, 0(vi06) | nop
ibeq vi06, vi07, L51 | nop
lq.xyzw vf13, 0(vi07) | nop
jalr vi10, vi05 | nop
lq.xyzw vf20, 1(vi06) | nop
lq.xyzw vf21, 1(vi07) | nop
lq.xyzw vf16, 2(vi06) | nop
fsand vi01, 0x2 | nop
fsand vi13, 0x2 | subw.w vf30, vf29, vf30
ibeq vi13, vi01, L51 | nop
lq.xyzw vf17, 2(vi07) | nop
ibeq vi00, vi01, L50 | nop
div Q, vf29.w, vf30.w | nop
bal vi10, L53 | nop
nop | nop
sq.xyzw vf14, 4(vi08) | nop
sq.xyzw vf22, 5(vi08) | nop
sq.xyzw vf18, 6(vi08) | nop
iaddi vi06, vi08, 0x4 | nop
ior vi12, vi08, vi00 | nop
bal vi15, L40 | nop
iaddi vi08, vi08, 0x7 | nop
b L51 | nop
ior vi08, vi12, vi00 | nop
L50:
bal vi10, L53 | nop
nop | nop
sq.xyzw vf14, 1(vi08) | nop
sq.xyzw vf22, 2(vi08) | nop
sq.xyzw vf18, 3(vi08) | nop
iaddi vi06, vi08, 0x1 | nop
ior vi12, vi08, vi00 | nop
bal vi15, L40 | nop
iaddi vi08, vi08, 0x7 | nop
ior vi08, vi12, vi00 | nop
L51:
isubiu vi01, vi08, 0x3f1 | nop
iswr.x vi00, vi08 | nop
iswr.y vi00, vi08 | nop
ibltz vi01, L49 | nop
iaddi vi08, vi08, 0x7 | nop
ibeq vi00, vi04, L52 | nop
nop | nop
iaddiu vi04, vi04, 0x4000 | nop
iaddiu vi04, vi04, 0x4000 | nop
iswr.x vi04, vi11 | nop
L52:
ilw.x vi15, 1022(vi00) | nop
lq.xyzw vf29, 37(vi11) | nop
lq.xyzw vf30, 38(vi11) | nop
lq.xyzw vf12, 39(vi11) | nop
lq.xyzw vf13, 40(vi11) | nop
lq.xyzw vf14, 41(vi11) | nop
lq.xyzw vf20, 42(vi11) | nop
lq.xyzw vf21, 43(vi11) | nop
lq.xyzw vf22, 44(vi11) | nop
lq.xyzw vf16, 45(vi11) | nop
lq.xyzw vf17, 46(vi11) | nop
lq.xyzw vf18, 47(vi11) | nop
jr vi15 | nop
lq.xyzw vf31, 48(vi11) | nop
jr vi10 | addx.w vf29, vf12, vf12
nop | addx.w vf30, vf13, vf13
jr vi10 | subx.w vf29, vf12, vf12
nop | subx.w vf30, vf13, vf13
jr vi10 | addy.w vf29, vf12, vf12
nop | addy.w vf30, vf13, vf13
jr vi10 | suby.w vf29, vf12, vf12
nop | suby.w vf30, vf13, vf13
jr vi10 | addz.w vf29, vf12, vf12
nop | addz.w vf30, vf13, vf13
jr vi10 | subz.w vf29, vf12, vf12
nop | subz.w vf30, vf13, vf13
L53:
nop | sub.xyzw vf14, vf13, vf12
nop | sub.xyzw vf22, vf21, vf20
nop | sub.xyzw vf18, vf17, vf16
waitq | mul.xyzw vf14, vf14, Q
nop | mul.xyzw vf22, vf22, Q
nop | mul.xyzw vf18, vf18, Q
nop | add.xyzw vf14, vf12, vf14
jr vi10 | add.xyzw vf22, vf20, vf22
nop | add.xyzw vf18, vf16, vf18
File diff suppressed because it is too large Load Diff