diff --git a/game/CMakeLists.txt b/game/CMakeLists.txt index 1a3175406c..32e25afcba 100644 --- a/game/CMakeLists.txt +++ b/game/CMakeLists.txt @@ -107,8 +107,6 @@ set(RUNTIME_SOURCE graphics/opengl_renderer/DirectRenderer2.cpp graphics/opengl_renderer/EyeRenderer.cpp graphics/opengl_renderer/dma_helpers.cpp - graphics/opengl_renderer/MercProgram.cpp - graphics/opengl_renderer/MercRenderer.cpp graphics/opengl_renderer/opengl_utils.cpp graphics/opengl_renderer/OpenGLRenderer.cpp graphics/opengl_renderer/Profiler.cpp diff --git a/game/graphics/opengl_renderer/BucketRenderer.h b/game/graphics/opengl_renderer/BucketRenderer.h index b6de247212..c2b5b234ab 100644 --- a/game/graphics/opengl_renderer/BucketRenderer.h +++ b/game/graphics/opengl_renderer/BucketRenderer.h @@ -37,11 +37,9 @@ struct SharedRenderState { bool use_sky_cpu = true; bool use_occlusion_culling = true; bool enable_merc_xgkick = true; - bool use_direct2 = true; math::Vector fog_color; float fog_intensity = 1.f; bool no_multidraw = false; - bool merc2 = true; void reset(); bool has_pc_data = false; diff --git a/game/graphics/opengl_renderer/MercProgram.cpp b/game/graphics/opengl_renderer/MercProgram.cpp deleted file mode 100644 index 4a149472db..0000000000 --- a/game/graphics/opengl_renderer/MercProgram.cpp +++ /dev/null @@ -1,5396 +0,0 @@ -#include "game/graphics/opengl_renderer/MercRenderer.h" - -void MercRenderer::mscal(int enter_address, - SharedRenderState* render_state, - ScopedProfilerNode& prof) { - mscal_impl(enter_address, render_state, prof); -} - -static inline REALLY_INLINE float erleng(const Vf& in) { - float len = in.x() * in.x() + in.y() * in.y() + in.z() * in.z(); - return _mm_cvtss_f32(_mm_rsqrt_ss(_mm_set_ss(len))); -} - -u16 MercRenderer::xitop() { - return m_dbf ? BUFFER_BASE : 0; -} - -u16 MercRenderer::xtop() { - return m_dbf ? 0 : BUFFER_BASE; -} - -void MercRenderer::lq_buffer(Mask mask, Vf& dest, u16 addr) { - ASSERT(addr * 16 < sizeof(m_buffer.data)); - for (int i = 0; i < 4; i++) { - if ((u64)mask & (1 << i)) { - memcpy(dest.data + i, m_buffer.data + addr * 16 + i * 4, 4); - } - } -} - -template -REALLY_INLINE void MercRenderer::lq_buffer_xyzw(Vf& dest, u16 addr) { - if constexpr (DEBUG) { - ASSERT(addr * 16 < sizeof(m_buffer.data)); - } - copy_vector(dest.data, m_buffer.data + addr * 16); -} - -template -REALLY_INLINE void MercRenderer::lq_buffer_xyz(Vf& dest, u16 addr) { - if constexpr (DEBUG) { - ASSERT(addr * 16 < sizeof(m_buffer.data)); - } - auto reg = _mm_load_ps(dest.data); - auto mem = _mm_load_ps((const float*)(m_buffer.data + addr * 16)); - _mm_store_ps(dest.data, _mm_blend_ps(mem, reg, 0b1000)); -} - -template -REALLY_INLINE void MercRenderer::sq_buffer_xyzw(const Vf& src, u16 addr) { - if constexpr (DEBUG) { - ASSERT(addr * 16 < sizeof(m_buffer.data)); - } - copy_vector(m_buffer.data + addr * 16, src.data); -} - -void MercRenderer::isw_buffer(Mask mask, u16 val, u16 addr) { - ASSERT(addr * 16 < sizeof(m_buffer.data)); - u32 val32 = val; - int offset; - switch (mask) { - case Mask::x: - offset = 0; - break; - case Mask::y: - offset = 4; - break; - case Mask::z: - offset = 8; - break; - case Mask::w: - offset = 12; - break; - default: - ASSERT(false); - } - memcpy(m_buffer.data + addr * 16 + offset, &val32, 4); -} - -void MercRenderer::ilw_buffer(Mask mask, u16& dest, u16 addr) { - // fmt::print("addr is {}\n", addr); - ASSERT(addr * 16 < sizeof(m_buffer.data)); - int offset; - switch (mask) { - case Mask::x: - offset = 0; - break; - case Mask::y: - offset = 4; - break; - case Mask::z: - offset = 8; - break; - case Mask::w: - offset = 12; - break; - default: - ASSERT(false); - } - memcpy(&dest, m_buffer.data + addr * 16 + offset, 2); -} - -// clang-format off -template -void MercRenderer::mscal_impl(int enter_address, - SharedRenderState* render_state, - ScopedProfilerNode& prof) { - bool bc = false; - // bool bc = false; - switch (enter_address) { - case 0: - goto ENTER_0; - case 17: - goto ENTER_17; - case 20: - goto ENTER_20; - case 32: - goto ENTER_32; - case 35: - goto ENTER_35; - default: - ASSERT(false); - } - ENTER_0: - // lq.xyzw vf01, 7(vi00) | nop - lq_buffer_xyzw(vu.vf01, 7); - // lq.xyzw vf25, 3(vi00) | nop - lq_buffer_xyzw(vu.vf25, 3); - // lq.xyzw vf26, 4(vi00) | nop - lq_buffer_xyzw(vu.vf26, 4); - // lq.xyzw vf27, 5(vi00) | nop - lq_buffer_xyzw(vu.vf27, 5); - // lq.xyzw vf28, 6(vi00) | nop - lq_buffer_xyzw(vu.vf28, 6); - // mr32.xyzw vf01, vf01 | nop - vu.vf01.mr32(Mask::xyzw, vu.vf01); - // move.y vf25, vf26 | nop - vu.vf25.move(Mask::y, vu.vf26); - // move.zw vf25, vf27 | nop - vu.vf25.move(Mask::zw, vu.vf27); - // sq.xyzw vf25, 3(vi00) | nop - sq_buffer_xyzw(vu.vf25, 3); - // 2048.0 | nop :i - vu.I = 2048.0; - // 255.0 | maxi.x vf17, vf00, I :i - vu.vf17.maxi(Mask::x, vu.vf00, vu.I); vu.I = 255.0; - // -65537.0 | maxi.y vf17, vf00, I :i - vu.vf17.maxi(Mask::y, vu.vf00, vu.I); vu.I = -65537.0; - // mr32.xyzw vf02, vf01 | minii.z vf17, vf00, I - vu.vf17.minii(Mask::z, vu.vf00, vu.I); vu.vf02.mr32(Mask::xyzw, vu.vf01); - // lq.xyzw vf22, 2(vi00) | minii.z vf18, vf00, I - vu.vf18.minii(Mask::z, vu.vf00, vu.I); lq_buffer_xyzw(vu.vf22, 2); - // 0.003921569 | minii.z vf19, vf00, I :i - vu.vf19.minii(Mask::z, vu.vf00, vu.I); vu.I = 0.003921569; - // sq.xyzw vf28, 4(vi00) | minii.w vf29, vf00, I :e - vu.vf29.minii(Mask::w, vu.vf00, vu.I); sq_buffer_xyzw(vu.vf28, 4); - // mr32.xyzw vf03, vf02 | nop - vu.vf03.mr32(Mask::xyzw, vu.vf02); - return; - - ENTER_17: - // iaddi vi07, vi00, 0x1 | nop - vu.vi07 = 1; -// BRANCH! - // b L2 | nop - bc = true; - // isw.w vi07, 1(vi00) | nop - isw_buffer(Mask::w, vu.vi07, 1); - if (bc) { goto L2; } - - - ENTER_20: - // iaddi vi07, vi00, 0x0 | nop - vu.vi07 = 0; - L2: - // lq.xyzw vf25, 139(vi00) | nop - lq_buffer_xyzw(vu.vf25, 139); - // lq.xyzw vf26, 3(vi00) | nop - lq_buffer_xyzw(vu.vf26, 3); - // lq.xyz vf01, 132(vi00) | nop - lq_buffer_xyz(vu.vf01, 132); - // lq.xyz vf02, 133(vi00) | nop - lq_buffer_xyz(vu.vf02, 133); - // lq.xyz vf03, 134(vi00) | addy.xy vf19, vf00, vf25 - vu.vf19.add(Mask::xy, vu.vf00, vu.vf25.y()); lq_buffer_xyz(vu.vf03, 134); - // lq.xyzw vf04, 135(vi00) | mulx.xyzw vf26, vf26, vf25 - vu.vf26.mul_xyzw(vu.vf26, vu.vf25.x()); lq_buffer_xyzw(vu.vf04, 135); - // lq.xyzw vf05, 136(vi00) | nop - lq_buffer_xyzw(vu.vf05, 136); - // lq.xyzw vf06, 137(vi00) | nop - lq_buffer_xyzw(vu.vf06, 137); - // lq.xyzw vf07, 138(vi00) | nop - lq_buffer_xyzw(vu.vf07, 138); -// BRANCH! - // b L4 | nop - bc = true; - // sq.xyzw vf26, 5(vi00) | nop - sq_buffer_xyzw(vu.vf26, 5); - if (bc) { goto L4; } - - ENTER_32: - - // iaddi vi07, vi00, 0x1 | nop - vu.vi07 = 1; -// BRANCH! - // b L4 | nop - bc = true; - // isw.w vi07, 1(vi00) | nop - isw_buffer(Mask::w, vu.vi07, 1); - if (bc) { goto L4; } - - - ENTER_35: - // iaddi vi07, vi00, 0x0 | nop - vu.vi07 = 0; - L4: - // lq.xyzw vf28, 139(vi00) | minix.xyzw vf15, vf00, vf00 - vu.vf15.mini_xyzw(vu.vf00, vu.vf00.x()); lq_buffer_xyzw(vu.vf28, 139); - // xtop vi15 | nop - vu.vi15 = xtop(); - // iaddiu vi12, vi15, 0x8c | nop - vu.vi12 = vu.vi15 + 0x8c; /* 140 */ -// BRANCH! - // ibeq vi00, vi15, L5 | nop - bc = (vu.vi15 == 0); - // ilwr.w vi03, vi12 | maxz.xy vf18, vf00, vf28 - vu.vf18.max(Mask::xy, vu.vf00, vu.vf28.z()); ilw_buffer(Mask::w, vu.vi03, vu.vi12); - if (bc) { goto L5; } - - - // nop | maxw.xy vf18, vf00, vf28 - vu.vf18.max(Mask::xy, vu.vf00, vu.vf28.w()); - L5: - // ilw.w vi10, 133(vi00) | nop - ilw_buffer(Mask::w, vu.vi10, 133); - // iaddiu vi15, vi15, 0x173 | nop - vu.vi15 = vu.vi15 + 0x173; /* 371 */ - // ilw.y vi02, 2(vi12) | nop - ilw_buffer(Mask::y, vu.vi02, vu.vi12 + 2); - // lq.xyzw vf14, 0(vi00) | nop - lq_buffer_xyzw(vu.vf14, 0); -// BRANCH! - // ibeq vi00, vi10, L6 | nop - bc = (vu.vi10 == 0); - // iadd vi03, vi03, vi12 | nop - vu.vi03 = vu.vi03 + vu.vi12; - if (bc) { goto L6; } - - - // mr32.xyzw vf27, vf14 | nop - vu.vf27.mr32(Mask::xyzw, vu.vf14); - // ilw.w vi11, 134(vi00) | nop - ilw_buffer(Mask::w, vu.vi11, 134); - // iaddiu vi13, vi00, 0x42 | nop - vu.vi13 = 0x42; /* 66 */ - - // mr32.y vf14, vf27 | nop - vu.vf14.mr32(Mask::y, vu.vf27); - L6: - // ilwr.w vi09, vi03 | nop - ilw_buffer(Mask::w, vu.vi09, vu.vi03); - // lqi.xyzw vf27, vi03 | nop - lq_buffer_xyzw(vu.vf27, vu.vi03++); - // ilw.x vi04, 1(vi12) | nop - ilw_buffer(Mask::x, vu.vi04, vu.vi12 + 1); - // iaddiu vi05, vi00, 0x7f | addw.xyz vf15, vf15, vf00 - vu.vf15.add(Mask::xyz, vu.vf15, vu.vf00.w()); vu.vi05 = 0x7f; /* 127 */ - - // iand vi09, vi09, vi05 | nop - vu.vi09 = vu.vi09 & vu.vi05; - // ilw.y vi06, 1(vi12) | miniz.w vf19, vf00, vf27 - vu.vf19.mini(Mask::w, vu.vf00, vu.vf27.z()); ilw_buffer(Mask::y, vu.vi06, vu.vi12 + 1); -// BRANCH! - // ibeq vi00, vi02, L8 | miniy.w vf18, vf00, vf27 - vu.vf18.mini(Mask::w, vu.vf00, vu.vf27.y()); bc = (vu.vi02 == 0); - // ilwr.z vi01, vi12 | minix.w vf17, vf00, vf27 - vu.vf17.mini(Mask::w, vu.vf00, vu.vf27.x()); ilw_buffer(Mask::z, vu.vi01, vu.vi12); - if (bc) { goto L8; } - - -// BRANCH! - // ibne vi00, vi09, L7 | nop - bc = (vu.vi09 != 0); - // sq.yzw vf14, 0(vi15) | nop - sq_buffer(Mask::yzw, vu.vf14, vu.vi15); - if (bc) { goto L7; } - - - // iaddiu vi02, vi02, 0x4000 | nop - vu.vi02 = vu.vi02 + 0x4000; /* 16384 */ - // iaddiu vi02, vi02, 0x4000 | nop - vu.vi02 = vu.vi02 + 0x4000; /* 16384 */ - // iswr.x vi02, vi15 | nop - isw_buffer(Mask::x, vu.vi02, vu.vi15); -// BRANCH! - // b L11 | nop - bc = true; - // nop | nop - - if (bc) { goto L11; } - - - L7: - // iswr.x vi02, vi15 | nop - isw_buffer(Mask::x, vu.vi02, vu.vi15); - L8: - // lq.xyzw vf13, 1(vi00) | nop - lq_buffer_xyzw(vu.vf13, 1); - L9: - // ilwr.w vi02, vi03 | nop - ilw_buffer(Mask::w, vu.vi02, vu.vi03); - // lqi.xyzw vf08, vi03 | nop - lq_buffer_xyzw(vu.vf08, vu.vi03++); - // lqi.xyzw vf09, vi03 | nop - lq_buffer_xyzw(vu.vf09, vu.vi03++); - // lqi.xyzw vf10, vi03 | nop - lq_buffer_xyzw(vu.vf10, vu.vi03++); - // lqi.xyzw vf11, vi03 | nop - lq_buffer_xyzw(vu.vf11, vu.vi03++); - // lqi.xyzw vf12, vi03 | nop - lq_buffer_xyzw(vu.vf12, vu.vi03++); - // iadd vi02, vi02, vi15 | nop - vu.vi02 = vu.vi02 + vu.vi15; - // mtir vi08, vf09.w | nop - vu.vi08 = vu.vf09.w_as_u16(); - // sqi.xyzw vf13, vi02 | nop - sq_buffer_xyzw(vu.vf13, vu.vi02++); - // sqi.xyzw vf08, vi02 | nop - sq_buffer_xyzw(vu.vf08, vu.vi02++); - // sqi.xyzw vf09, vi02 | nop - sq_buffer_xyzw(vu.vf09, vu.vi02++); - // mfir.x vf14, vi08 | nop - vu.vf14.mfir(Mask::x, vu.vi08); - // sqi.xyzw vf10, vi02 | nop - sq_buffer_xyzw(vu.vf10, vu.vi02++); - // sqi.xyzw vf11, vi02 | nop - sq_buffer_xyzw(vu.vf11, vu.vi02++); -// BRANCH! - // ibeq vi00, vi10, L10 | nop - bc = (vu.vi10 == 0); - // sqi.xyzw vf12, vi02 | nop - sq_buffer_xyzw(vu.vf12, vu.vi02++); - if (bc) { goto L10; } - - - // mtir vi14, vf12.z | nop - vu.vi14 = vu.vf12.z_as_u16(); - // isw.x vi10, -1(vi02) | nop - isw_buffer(Mask::x, vu.vi10, vu.vi02 + -1); -// BRANCH! - // ibeq vi14, vi13, L10 | nop - bc = (vu.vi14 == vu.vi13); - // isw.y vi11, -1(vi02) | nop - isw_buffer(Mask::y, vu.vi11, vu.vi02 + -1); - if (bc) { goto L10; } - - - // ilw.x vi13, -4(vi02) | nop - ilw_buffer(Mask::x, vu.vi13, vu.vi02 + -4); - // isubiu vi14, vi00, 0x1d | nop - vu.vi14 = -29; - - // iand vi13, vi13, vi14 | nop - vu.vi13 = vu.vi13 & vu.vi14; - // iaddi vi13, vi13, 0xc | nop - vu.vi13 = vu.vi13 + 12; - // isw.x vi13, -4(vi02) | nop - isw_buffer(Mask::x, vu.vi13, vu.vi02 + -4); - // iaddiu vi13, vi00, 0x42 | nop - vu.vi13 = 0x42; /* 66 */ - - // isw.z vi13, -1(vi02) | nop - isw_buffer(Mask::z, vu.vi13, vu.vi02 + -1); - L10: -// BRANCH! - // ibgtz vi08, L9 | nop - bc = ((s16)vu.vi08) > 0; - // sq.xyzw vf14, 0(vi02) | nop - sq_buffer_xyzw(vu.vf14, vu.vi02); - if (bc) { goto L9; } - - - L11: - // lq.xyzw vf28, 3(vi00) | nop - lq_buffer_xyzw(vu.vf28, 3); - // ilw.y vi08, 3(vi12) | nop - ilw_buffer(Mask::y, vu.vi08, vu.vi12 + 3); - // lq.xyzw vf16, 5(vi00) | nop - lq_buffer_xyzw(vu.vf16, 5); - // lq.xyzw vf20, 4(vi00) | nop - lq_buffer_xyzw(vu.vf20, 4); - // ilw.z vi09, 3(vi12) | mul.xyzw vf27, vf28, vf15 - vu.vf27.mul_xyzw(vu.vf28, vu.vf15); ilw_buffer(Mask::z, vu.vi09, vu.vi12 + 3); - // ior vi11, vi08, vi00 | mul.xyzw vf28, vf28, vf00 - vu.vf28.mul_xyzw(vu.vf28, vu.vf00); vu.vi11 = vu.vi08; -// BRANCH! - // ibeq vi00, vi08, L13 | mul.xyzw vf15, vf16, vf15 - vu.vf15.mul_xyzw(vu.vf16, vu.vf15); bc = (vu.vi08 == 0); - // iaddi vi13, vi12, 0x3 | mul.xyzw vf16, vf16, vf00 - vu.vf16.mul_xyzw(vu.vf16, vu.vf00); vu.vi13 = vu.vi12 + 3; - if (bc) { goto L13; } - - - L12: - // lq.xyzw vf08, 0(vi08) | addax.xyzw vf20, vf00 - vu.acc.adda(Mask::xyzw, vu.vf20, vu.vf00.x()); lq_buffer_xyzw(vu.vf08, vu.vi08); - // lq.xyzw vf10, 1(vi08) | madda.xyzw ACC, vf27, vf25 - vu.acc.madda_xyzw(vu.vf27, vu.vf25); lq_buffer_xyzw(vu.vf10, vu.vi08 + 1); - // lq.xyzw vf12, 2(vi08) | maddz.xyzw vf26, vf28, vf25 - vu.acc.madd_xyzw(vu.vf26, vu.vf28, vu.vf25.z()); lq_buffer_xyzw(vu.vf12, vu.vi08 + 2); - // lq.xyzw vf25, 3(vi08) | nop - lq_buffer_xyzw(vu.vf25, vu.vi08 + 3); - // sq.xyzw vf09, 0(vi11) | mula.xyzw ACC, vf15, vf08 - vu.acc.mula_xyzw(vu.vf15, vu.vf08); sq_buffer_xyzw(vu.vf09, vu.vi11); - // sq.xyzw vf11, 1(vi11) | maddz.xyzw vf09, vf16, vf08 - vu.acc.madd_xyzw(vu.vf09, vu.vf16, vu.vf08.z()); sq_buffer_xyzw(vu.vf11, vu.vi11 + 1); - // sq.xyzw vf13, 2(vi11) | mula.xyzw ACC, vf15, vf10 - vu.acc.mula_xyzw(vu.vf15, vu.vf10); sq_buffer_xyzw(vu.vf13, vu.vi11 + 2); - // sq.xyzw vf26, 3(vi11) | maddz.xyzw vf11, vf16, vf10 - vu.acc.madd_xyzw(vu.vf11, vu.vf16, vu.vf10.z()); sq_buffer_xyzw(vu.vf26, vu.vi11 + 3); -// BRANCH! - // ibeq vi00, vi08, L13 | mula.xyzw ACC, vf15, vf12 - vu.acc.mula_xyzw(vu.vf15, vu.vf12); bc = (vu.vi08 == 0); - // ilwr.w vi10, vi13 | maddz.xyzw vf13, vf16, vf12 - vu.acc.madd_xyzw(vu.vf13, vu.vf16, vu.vf12.z()); ilw_buffer(Mask::w, vu.vi10, vu.vi13); - if (bc) { goto L13; } - - - // lq.xyzw vf08, 0(vi09) | addax.xyzw vf20, vf00 - vu.acc.adda(Mask::xyzw, vu.vf20, vu.vf00.x()); lq_buffer_xyzw(vu.vf08, vu.vi09); - // lq.xyzw vf10, 1(vi09) | madda.xyzw ACC, vf27, vf25 - vu.acc.madda_xyzw(vu.vf27, vu.vf25); lq_buffer_xyzw(vu.vf10, vu.vi09 + 1); - // lq.xyzw vf12, 2(vi09) | maddz.xyzw vf26, vf28, vf25 - vu.acc.madd_xyzw(vu.vf26, vu.vf28, vu.vf25.z()); lq_buffer_xyzw(vu.vf12, vu.vi09 + 2); - // lq.xyzw vf25, 3(vi09) | nop - lq_buffer_xyzw(vu.vf25, vu.vi09 + 3); - // sq.xyzw vf09, 0(vi08) | mula.xyzw ACC, vf15, vf08 - vu.acc.mula_xyzw(vu.vf15, vu.vf08); sq_buffer_xyzw(vu.vf09, vu.vi08); - // sq.xyzw vf11, 1(vi08) | maddz.xyzw vf09, vf16, vf08 - vu.acc.madd_xyzw(vu.vf09, vu.vf16, vu.vf08.z()); sq_buffer_xyzw(vu.vf11, vu.vi08 + 1); - // sq.xyzw vf13, 2(vi08) | mula.xyzw ACC, vf15, vf10 - vu.acc.mula_xyzw(vu.vf15, vu.vf10); sq_buffer_xyzw(vu.vf13, vu.vi08 + 2); - // sq.xyzw vf26, 3(vi08) | maddz.xyzw vf11, vf16, vf10 - vu.acc.madd_xyzw(vu.vf11, vu.vf16, vu.vf10.z()); sq_buffer_xyzw(vu.vf26, vu.vi08 + 3); -// BRANCH! - // ibeq vi00, vi09, L13 | mula.xyzw ACC, vf15, vf12 - vu.acc.mula_xyzw(vu.vf15, vu.vf12); bc = (vu.vi09 == 0); - // ilw.x vi11, 1(vi13) | maddz.xyzw vf13, vf16, vf12 - vu.acc.madd_xyzw(vu.vf13, vu.vf16, vu.vf12.z()); ilw_buffer(Mask::x, vu.vi11, vu.vi13 + 1); - if (bc) { goto L13; } - - - // lq.xyzw vf08, 0(vi10) | addax.xyzw vf20, vf00 - vu.acc.adda(Mask::xyzw, vu.vf20, vu.vf00.x()); lq_buffer_xyzw(vu.vf08, vu.vi10); - // lq.xyzw vf10, 1(vi10) | madda.xyzw ACC, vf27, vf25 - vu.acc.madda_xyzw(vu.vf27, vu.vf25); lq_buffer_xyzw(vu.vf10, vu.vi10 + 1); - // lq.xyzw vf12, 2(vi10) | maddz.xyzw vf26, vf28, vf25 - vu.acc.madd_xyzw(vu.vf26, vu.vf28, vu.vf25.z()); lq_buffer_xyzw(vu.vf12, vu.vi10 + 2); - // lq.xyzw vf25, 3(vi10) | nop - lq_buffer_xyzw(vu.vf25, vu.vi10 + 3); - // sq.xyzw vf09, 0(vi09) | mula.xyzw ACC, vf15, vf08 - vu.acc.mula_xyzw(vu.vf15, vu.vf08); sq_buffer_xyzw(vu.vf09, vu.vi09); - // sq.xyzw vf11, 1(vi09) | maddz.xyzw vf09, vf16, vf08 - vu.acc.madd_xyzw(vu.vf09, vu.vf16, vu.vf08.z()); sq_buffer_xyzw(vu.vf11, vu.vi09 + 1); - // sq.xyzw vf13, 2(vi09) | mula.xyzw ACC, vf15, vf10 - vu.acc.mula_xyzw(vu.vf15, vu.vf10); sq_buffer_xyzw(vu.vf13, vu.vi09 + 2); - // sq.xyzw vf26, 3(vi09) | maddz.xyzw vf11, vf16, vf10 - vu.acc.madd_xyzw(vu.vf11, vu.vf16, vu.vf10.z()); sq_buffer_xyzw(vu.vf26, vu.vi09 + 3); -// BRANCH! - // ibeq vi00, vi10, L13 | mula.xyzw ACC, vf15, vf12 - vu.acc.mula_xyzw(vu.vf15, vu.vf12); bc = (vu.vi10 == 0); - // ilw.y vi08, 1(vi13) | maddz.xyzw vf13, vf16, vf12 - vu.acc.madd_xyzw(vu.vf13, vu.vf16, vu.vf12.z()); ilw_buffer(Mask::y, vu.vi08, vu.vi13 + 1); - if (bc) { goto L13; } - - - // lq.xyzw vf08, 0(vi11) | addax.xyzw vf20, vf00 - vu.acc.adda(Mask::xyzw, vu.vf20, vu.vf00.x()); lq_buffer_xyzw(vu.vf08, vu.vi11); - // lq.xyzw vf10, 1(vi11) | madda.xyzw ACC, vf27, vf25 - vu.acc.madda_xyzw(vu.vf27, vu.vf25); lq_buffer_xyzw(vu.vf10, vu.vi11 + 1); - // lq.xyzw vf12, 2(vi11) | maddz.xyzw vf26, vf28, vf25 - vu.acc.madd_xyzw(vu.vf26, vu.vf28, vu.vf25.z()); lq_buffer_xyzw(vu.vf12, vu.vi11 + 2); - // lq.xyzw vf25, 3(vi11) | nop - lq_buffer_xyzw(vu.vf25, vu.vi11 + 3); - // sq.xyzw vf09, 0(vi10) | mula.xyzw ACC, vf15, vf08 - vu.acc.mula_xyzw(vu.vf15, vu.vf08); sq_buffer_xyzw(vu.vf09, vu.vi10); - // sq.xyzw vf11, 1(vi10) | maddz.xyzw vf09, vf16, vf08 - vu.acc.madd_xyzw(vu.vf09, vu.vf16, vu.vf08.z()); sq_buffer_xyzw(vu.vf11, vu.vi10 + 1); - // sq.xyzw vf13, 2(vi10) | mula.xyzw ACC, vf15, vf10 - vu.acc.mula_xyzw(vu.vf15, vu.vf10); sq_buffer_xyzw(vu.vf13, vu.vi10 + 2); - // sq.xyzw vf26, 3(vi10) | maddz.xyzw vf11, vf16, vf10 - vu.acc.madd_xyzw(vu.vf11, vu.vf16, vu.vf10.z()); sq_buffer_xyzw(vu.vf26, vu.vi10 + 3); - // iaddi vi13, vi13, 0x1 | nop - vu.vi13 = vu.vi13 + 1; -// BRANCH! - // ibne vi00, vi11, L12 | mula.xyzw ACC, vf15, vf12 - vu.acc.mula_xyzw(vu.vf15, vu.vf12); bc = (vu.vi11 != 0); - // ilwr.z vi09, vi13 | maddz.xyzw vf13, vf16, vf12 - vu.acc.madd_xyzw(vu.vf13, vu.vf16, vu.vf12.z()); ilw_buffer(Mask::z, vu.vi09, vu.vi13); - if (bc) { goto L12; } - - - L13: - // ilw.x vi02, 3(vi12) | nop - ilw_buffer(Mask::x, vu.vi02, vu.vi12 + 3); -// BRANCH! - // ibeq vi00, vi04, L25 | nop - bc = (vu.vi04 == 0); - // iadd vi01, vi01, vi12 | nop - vu.vi01 = vu.vi01 + vu.vi12; - if (bc) { goto L25; } - - - // ilwr.x vi08, vi01 | nop - ilw_buffer(Mask::x, vu.vi08, vu.vi01); - // lqi.xyzw vf08, vi01 | nop - lq_buffer_xyzw(vu.vf08, vu.vi01++); - // lqi.xyzw vf11, vi01 | nop - lq_buffer_xyzw(vu.vf11, vu.vi01++); - // lqi.xyzw vf14, vi01 | nop - lq_buffer_xyzw(vu.vf14, vu.vi01++); - // lq.xyz vf29, 4(vi08) | nop - lq_buffer_xyz(vu.vf29, vu.vi08 + 4); - // lq.xyz vf30, 5(vi08) | add.zw vf08, vf08, vf17 - vu.vf08.add(Mask::zw, vu.vf08, vu.vf17); lq_buffer_xyz(vu.vf30, vu.vi08 + 5); - // lq.xyzw vf31, 6(vi08) | add.xyzw vf11, vf11, vf18 - vu.vf11.add_xyzw(vu.vf11, vu.vf18); lq_buffer_xyzw(vu.vf31, vu.vi08 + 6); - // iaddi vi04, vi04, -0x1 | add.xyzw vf14, vf14, vf19 - vu.vf14.add_xyzw(vu.vf14, vu.vf19); vu.vi04 = vu.vi04 + -1; - // iadd vi02, vi02, vi12 | nop - vu.vi02 = vu.vi02 + vu.vi12; - // lqi.xyzw vf24, vi02 | mulaz.xyzw ACC, vf29, vf08 - vu.acc.mula_xyzw(vu.vf29, vu.vf08.z()); lq_buffer_xyzw(vu.vf24, vu.vi02++); - // mtir vi10, vf11.x | maddaz.xyzw ACC, vf30, vf11 - vu.acc.madda_xyzw(vu.vf30, vu.vf11.z()); vu.vi10 = vu.vf11.x_as_u16(); - // mtir vi13, vf11.y | maddz.xyz vf11, vf31, vf14 - vu.vi13 = vu.vf11.y_as_u16(); vu.acc.madd_xyz(vu.vf11, vu.vf31, vu.vf14.z()); - // lq.xyzw vf25, 0(vi08) | nop - lq_buffer_xyzw(vu.vf25, vu.vi08); - // lq.xyzw vf26, 1(vi08) | itof0.xyzw vf24, vf24 - vu.vf24.itof0(Mask::xyzw, vu.vf24); lq_buffer_xyzw(vu.vf26, vu.vi08 + 1); - // lq.xyzw vf27, 2(vi08) | nop - lq_buffer_xyzw(vu.vf27, vu.vi08 + 2); - // erleng.xyz P, vf11 | nop - vu.P = erleng(vu.vf11); /* TODO erleng */ - // lq.xyzw vf28, 3(vi08) | mulaw.xyzw ACC, vf25, vf08 - vu.acc.mula_xyzw(vu.vf25, vu.vf08.w()); lq_buffer_xyzw(vu.vf28, vu.vi08 + 3); - // ior vi15, vi07, vi00 | maddaw.xyzw ACC, vf26, vf11 - vu.acc.madda_xyzw(vu.vf26, vu.vf11.w()); vu.vi15 = vu.vi07; - // mr32.z vf14, vf00 | maddw.xyzw vf08, vf27, vf14 - vu.acc.madd_xyzw(vu.vf08, vu.vf27, vu.vf14.w()); vu.vf14.z() = 1.f; - // lqi.xyzw vf09, vi01 | nop - lq_buffer_xyzw(vu.vf09, vu.vi01++); - // ilwr.y vi03, vi12 | nop - ilw_buffer(Mask::y, vu.vi03, vu.vi12); - // ilw.z vi07, 1(vi12) | nop - ilw_buffer(Mask::z, vu.vi07, vu.vi12 + 1); - // lqi.xyzw vf12, vi01 | add.xyzw vf08, vf08, vf28 - vu.vf08.add_xyzw(vu.vf08, vu.vf28); lq_buffer_xyzw(vu.vf12, vu.vi01++); - // lqi.xyzw vf15, vi01 | nop - lq_buffer_xyzw(vu.vf15, vu.vi01++); - // mtir vi08, vf09.x | nop - vu.vi08 = vu.vf09.x_as_u16(); -// BRANCH! - // ibeq vi00, vi15, L14 | nop - bc = (vu.vi15 == 0); - // iadd vi03, vi03, vi12 | nop - vu.vi03 = vu.vi03 + vu.vi12; - if (bc) { goto L14; } - - - // nop | miniw.w vf08, vf08, vf01 - vu.vf08.mini(Mask::w, vu.vf08, vu.vf01.w()); - L14: - // div Q, vf01.w, vf08.w | add.zw vf09, vf09, vf17 - vu.vf09.add(Mask::zw, vu.vf09, vu.vf17); vu.Q = vu.vf01.w() / vu.vf08.w(); - - // iadd vi04, vi04, vi03 | add.xyzw vf12, vf12, vf18 - vu.vf12.add_xyzw(vu.vf12, vu.vf18); vu.vi04 = vu.vi04 + vu.vi03; - // lq.xyz vf29, 4(vi08) | add.xyzw vf15, vf15, vf19 - vu.vf15.add_xyzw(vu.vf15, vu.vf19); lq_buffer_xyz(vu.vf29, vu.vi08 + 4); - // lq.xyz vf30, 5(vi08) | nop - lq_buffer_xyz(vu.vf30, vu.vi08 + 5); - // iadd vi06, vi06, vi04 | nop - vu.vi06 = vu.vi06 + vu.vi04; - // lq.xyzw vf31, 6(vi08) | nop - lq_buffer_xyzw(vu.vf31, vu.vi08 + 6); - // lq.xyzw vf25, 0(vi08) | nop - lq_buffer_xyzw(vu.vf25, vu.vi08); - // lq.xyzw vf26, 1(vi08) | mul.xyz vf08, vf08, Q - vu.vf08.mul(Mask::xyz, vu.vf08, vu.Q); /* TODO mulq */ lq_buffer_xyzw(vu.vf26, vu.vi08 + 1); - // mtir vi11, vf12.x | mul.xyzw vf14, vf14, Q - vu.vf14.mul_xyzw(vu.vf14, vu.Q); /* TODO mulq */ vu.vi11 = vu.vf12.x_as_u16(); - // mtir vi14, vf12.y | nop - vu.vi14 = vu.vf12.y_as_u16(); - // lq.xyzw vf27, 2(vi08) | nop - lq_buffer_xyzw(vu.vf27, vu.vi08 + 2); - // lqi.xyzw vf23, vi03 | add.xyzw vf08, vf08, vf22 - vu.vf08.add_xyzw(vu.vf08, vu.vf22); lq_buffer_xyzw(vu.vf23, vu.vi03++); - // iadd vi07, vi07, vi06 | mulaz.xyzw ACC, vf29, vf09 - vu.acc.mula_xyzw(vu.vf29, vu.vf09.z()); vu.vi07 = vu.vi07 + vu.vi06; - // lq.xyzw vf28, 3(vi08) | maddaz.xyzw ACC, vf30, vf12 - vu.acc.madda_xyzw(vu.vf30, vu.vf12.z()); lq_buffer_xyzw(vu.vf28, vu.vi08 + 3); - // mfp.w vf20, P | maddz.xyz vf12, vf31, vf15 - vu.acc.madd_xyz(vu.vf12, vu.vf31, vu.vf15.z()); vu.vf20.mfp(Mask::w, vu.P); - // nop | nop - - // 1024.0 | miniw.w vf08, vf08, vf03 :i - vu.vf08.mini(Mask::w, vu.vf08, vu.vf03.w()); vu.I = 1024.0; -// BRANCH! - // ibne vi00, vi15, L82 | mulaw.xyzw ACC, vf25, vf09 - vu.acc.mula_xyzw(vu.vf25, vu.vf09.w()); bc = (vu.vi15 != 0); - // ilw.y vi09, -6(vi01) | mulw.xyzw vf11, vf11, vf20 - vu.vf11.mul_xyzw(vu.vf11, vu.vf20.w()); ilw_buffer(Mask::y, vu.vi09, vu.vi01 + -6); - if (bc) { goto L82; } - - - // erleng.xyz P, vf12 | nop - vu.P = erleng(vu.vf12); /* TODO erleng */ - // nop | maddaw.xyzw ACC, vf26, vf12 - vu.acc.madda_xyzw(vu.vf26, vu.vf12.w()); - // mr32.z vf15, vf00 | maddw.xyzw vf09, vf27, vf15 - vu.acc.madd_xyzw(vu.vf09, vu.vf27, vu.vf15.w()); vu.vf15.z() = 1.f; - // lqi.xyzw vf10, vi01 | mulax.xyzw ACC, vf01, vf11 - vu.acc.mula_xyzw(vu.vf01, vu.vf11.x()); lq_buffer_xyzw(vu.vf10, vu.vi01++); -// BRANCH! - // ibne vi04, vi03, L16 | madday.xyzw ACC, vf02, vf11 - vu.acc.madda_xyzw(vu.vf02, vu.vf11.y()); bc = (vu.vi04 != vu.vi03); - // nop | maddz.xyzw vf11, vf03, vf11 - vu.acc.madd_xyzw(vu.vf11, vu.vf03, vu.vf11.z()); - if (bc) { goto L16; } - - -// BRANCH! - // ibne vi06, vi03, JUMP_1A1 | nop - bc = (vu.vi06 != vu.vi03); - // nop | nop - - if (bc) { goto JUMP_1A1; } - - -// BRANCH! - // b L67 | nop - bc = true; - // nop | nop - - if (bc) { goto L67; } - - - L15: - // lqi.xyzw vf10, vi01 | mulax.xyzw ACC, vf01, vf11 - vu.acc.mula_xyzw(vu.vf01, vu.vf11.x()); lq_buffer_xyzw(vu.vf10, vu.vi01++); - // sq.xyzw vf13, 1(vi12) | madday.xyzw ACC, vf02, vf11 - vu.acc.madda_xyzw(vu.vf02, vu.vf11.y()); sq_buffer_xyzw(vu.vf13, vu.vi12 + 1); - // sq.xyzw vf13, 1(vi15) | maddz.xyzw vf11, vf03, vf11 - vu.acc.madd_xyzw(vu.vf11, vu.vf03, vu.vf11.z()); sq_buffer_xyzw(vu.vf13, vu.vi15 + 1); - L16: - // lqi.xyzw vf13, vi01 | add.xyzw vf09, vf09, vf28 - vu.vf09.add_xyzw(vu.vf09, vu.vf28); lq_buffer_xyzw(vu.vf13, vu.vi01++); - // lqi.xyzw vf16, vi01 | maxw.w vf08, vf08, vf02 - vu.vf08.max(Mask::w, vu.vf08, vu.vf02.w()); lq_buffer_xyzw(vu.vf16, vu.vi01++); - // mtir vi08, vf10.x | itof0.xyzw vf23, vf23 - vu.vf23.itof0(Mask::xyzw, vu.vf23); vu.vi08 = vu.vf10.x_as_u16(); - // ilw.y vi09, -9(vi01) | maxx.xyzw vf11, vf11, vf00 - vu.vf11.max_xyzw(vu.vf11, vu.vf00.x()); ilw_buffer(Mask::y, vu.vi09, vu.vi01 + -9); - // div Q, vf01.w, vf09.w | add.zw vf10, vf10, vf17 - vu.vf10.add(Mask::zw, vu.vf10, vu.vf17); vu.Q = vu.vf01.w() / vu.vf09.w(); - - // move.xyzw vf21, vf08 | add.xyzw vf13, vf13, vf18 - vu.vf13.add_xyzw(vu.vf13, vu.vf18); vu.vf21.move_xyzw(vu.vf08); - // lq.xyz vf29, 4(vi08) | add.xyzw vf16, vf16, vf19 - vu.vf16.add_xyzw(vu.vf16, vu.vf19); lq_buffer_xyz(vu.vf29, vu.vi08 + 4); - // lq.xyz vf30, 5(vi08) | mulax.xyzw ACC, vf04, vf11 - vu.acc.mula_xyzw(vu.vf04, vu.vf11.x()); lq_buffer_xyz(vu.vf30, vu.vi08 + 5); -// BRANCH! - // ibgtz vi09, L17 | madday.xyzw ACC, vf05, vf11 - vu.acc.madda_xyzw(vu.vf05, vu.vf11.y()); bc = ((s16)vu.vi09) > 0; - // lq.xyzw vf31, 6(vi08) | maddaz.xyzw ACC, vf06, vf11 - vu.acc.madda_xyzw(vu.vf06, vu.vf11.z()); lq_buffer_xyzw(vu.vf31, vu.vi08 + 6); - if (bc) { goto L17; } - - - // nop | addx.w vf21, vf21, vf17 - vu.vf21.add(Mask::w, vu.vf21, vu.vf17.x()); - L17: - // lq.xyzw vf25, 0(vi08) | maddw.xyzw vf11, vf07, vf00 - vu.acc.madd_xyzw(vu.vf11, vu.vf07, vu.vf00.w()); lq_buffer_xyzw(vu.vf25, vu.vi08); - // lq.xyzw vf26, 1(vi08) | mul.xyz vf09, vf09, Q - vu.vf09.mul(Mask::xyz, vu.vf09, vu.Q); /* TODO mulq */ lq_buffer_xyzw(vu.vf26, vu.vi08 + 1); - // mtir vi12, vf13.x | mul.xyzw vf15, vf15, Q - vu.vf15.mul_xyzw(vu.vf15, vu.Q); /* TODO mulq */ vu.vi12 = vu.vf13.x_as_u16(); - // mtir vi15, vf13.y | ftoi4.xyzw vf21, vf21 - vu.vf21.ftoi4(Mask::xyzw, vu.vf21); vu.vi15 = vu.vf13.y_as_u16(); - // lq.xyzw vf27, 2(vi08) | mul.xyzw vf11, vf11, vf23 - vu.vf11.mul_xyzw(vu.vf11, vu.vf23); lq_buffer_xyzw(vu.vf27, vu.vi08 + 2); - // lqi.xyzw vf23, vi03 | add.xyzw vf09, vf09, vf22 - vu.vf09.add_xyzw(vu.vf09, vu.vf22); lq_buffer_xyzw(vu.vf23, vu.vi03++); -// BRANCH! - // ibne vi00, vi09, L18 | mulaz.xyzw ACC, vf29, vf10 - vu.acc.mula_xyzw(vu.vf29, vu.vf10.z()); bc = (vu.vi09 != 0); - // sq.xyzw vf21, 2(vi10) | maddaz.xyzw ACC, vf30, vf13 - vu.acc.madda_xyzw(vu.vf30, vu.vf13.z()); sq_buffer_xyzw(vu.vf21, vu.vi10 + 2); - if (bc) { goto L18; } - - - // nop | ftoi4.xyzw vf21, vf08 - vu.vf21.ftoi4(Mask::xyzw, vu.vf08); - L18: - // mfp.w vf20, P | maddz.xyz vf13, vf31, vf16 - vu.acc.madd_xyz(vu.vf13, vu.vf31, vu.vf16.z()); vu.vf20.mfp(Mask::w, vu.P); - // sq.xyzw vf14, 0(vi10) | miniy.xyzw vf11, vf11, vf17 - vu.vf11.mini_xyzw(vu.vf11, vu.vf17.y()); sq_buffer_xyzw(vu.vf14, vu.vi10); - // sq.xyzw vf14, 0(vi13) | miniw.w vf09, vf09, vf03 - vu.vf09.mini(Mask::w, vu.vf09, vu.vf03.w()); sq_buffer_xyzw(vu.vf14, vu.vi13); - // sq.xyzw vf21, 2(vi13) | mulaw.xyzw ACC, vf25, vf10 - vu.acc.mula_xyzw(vu.vf25, vu.vf10.w()); sq_buffer_xyzw(vu.vf21, vu.vi13 + 2); - // lq.xyzw vf28, 3(vi08) | mulw.xyzw vf12, vf12, vf20 - vu.vf12.mul_xyzw(vu.vf12, vu.vf20.w()); lq_buffer_xyzw(vu.vf28, vu.vi08 + 3); - // erleng.xyz P, vf13 | ftoi0.xyzw vf11, vf11 - vu.vf11.ftoi0(Mask::xyzw, vu.vf11); vu.P = erleng(vu.vf13); /* TODO erleng */ -// BRANCH! - // ibne vi04, vi03, L19 | maddaw.xyzw ACC, vf26, vf13 - vu.acc.madda_xyzw(vu.vf26, vu.vf13.w()); bc = (vu.vi04 != vu.vi03); - // mr32.z vf16, vf00 | maddw.xyzw vf10, vf27, vf16 - vu.acc.madd_xyzw(vu.vf10, vu.vf27, vu.vf16.w()); vu.vf16.z() = 1.f; - if (bc) { goto L19; } - - -// BRANCH! - // ibne vi06, vi03, L35 | nop - bc = (vu.vi06 != vu.vi03); - // ilw.y vi09, -6(vi01) | nop - ilw_buffer(Mask::y, vu.vi09, vu.vi01 + -6); - if (bc) { goto L35; } - - -// BRANCH! - // ibne vi07, vi03, L72 | nop - bc = (vu.vi07 != vu.vi03); - // nop | nop - - if (bc) { goto L72; } - - -// BRANCH! - // b L143 | nop - bc = true; - // nop | nop - - if (bc) { goto L143; } - - - L19: - // lqi.xyzw vf08, vi01 | mulax.xyzw ACC, vf01, vf12 - vu.acc.mula_xyzw(vu.vf01, vu.vf12.x()); lq_buffer_xyzw(vu.vf08, vu.vi01++); - // sq.xyzw vf11, 1(vi10) | madday.xyzw ACC, vf02, vf12 - vu.acc.madda_xyzw(vu.vf02, vu.vf12.y()); sq_buffer_xyzw(vu.vf11, vu.vi10 + 1); - // sq.xyzw vf11, 1(vi13) | maddz.xyzw vf12, vf03, vf12 - vu.acc.madd_xyzw(vu.vf12, vu.vf03, vu.vf12.z()); sq_buffer_xyzw(vu.vf11, vu.vi13 + 1); - // lqi.xyzw vf11, vi01 | add.xyzw vf10, vf10, vf28 - vu.vf10.add_xyzw(vu.vf10, vu.vf28); lq_buffer_xyzw(vu.vf11, vu.vi01++); - // lqi.xyzw vf14, vi01 | maxw.w vf09, vf09, vf02 - vu.vf09.max(Mask::w, vu.vf09, vu.vf02.w()); lq_buffer_xyzw(vu.vf14, vu.vi01++); - // mtir vi08, vf08.x | itof0.xyzw vf23, vf23 - vu.vf23.itof0(Mask::xyzw, vu.vf23); vu.vi08 = vu.vf08.x_as_u16(); - // ilw.y vi09, -9(vi01) | maxx.xyzw vf12, vf12, vf00 - vu.vf12.max_xyzw(vu.vf12, vu.vf00.x()); ilw_buffer(Mask::y, vu.vi09, vu.vi01 + -9); - // div Q, vf01.w, vf10.w | add.zw vf08, vf08, vf17 - vu.vf08.add(Mask::zw, vu.vf08, vu.vf17); vu.Q = vu.vf01.w() / vu.vf10.w(); - - // move.xyzw vf21, vf09 | add.xyzw vf11, vf11, vf18 - vu.vf11.add_xyzw(vu.vf11, vu.vf18); vu.vf21.move_xyzw(vu.vf09); - // lq.xyz vf29, 4(vi08) | add.xyzw vf14, vf14, vf19 - vu.vf14.add_xyzw(vu.vf14, vu.vf19); lq_buffer_xyz(vu.vf29, vu.vi08 + 4); - // lq.xyz vf30, 5(vi08) | mulax.xyzw ACC, vf04, vf12 - vu.acc.mula_xyzw(vu.vf04, vu.vf12.x()); lq_buffer_xyz(vu.vf30, vu.vi08 + 5); -// BRANCH! - // ibgtz vi09, L20 | madday.xyzw ACC, vf05, vf12 - vu.acc.madda_xyzw(vu.vf05, vu.vf12.y()); bc = ((s16)vu.vi09) > 0; - // lq.xyzw vf31, 6(vi08) | maddaz.xyzw ACC, vf06, vf12 - vu.acc.madda_xyzw(vu.vf06, vu.vf12.z()); lq_buffer_xyzw(vu.vf31, vu.vi08 + 6); - if (bc) { goto L20; } - - - // nop | addx.w vf21, vf21, vf17 - vu.vf21.add(Mask::w, vu.vf21, vu.vf17.x()); - L20: - // lq.xyzw vf25, 0(vi08) | maddw.xyzw vf12, vf07, vf00 - vu.acc.madd_xyzw(vu.vf12, vu.vf07, vu.vf00.w()); lq_buffer_xyzw(vu.vf25, vu.vi08); - // lq.xyzw vf26, 1(vi08) | mul.xyz vf10, vf10, Q - vu.vf10.mul(Mask::xyz, vu.vf10, vu.Q); /* TODO mulq */ lq_buffer_xyzw(vu.vf26, vu.vi08 + 1); - // mtir vi10, vf11.x | mul.xyzw vf16, vf16, Q - vu.vf16.mul_xyzw(vu.vf16, vu.Q); /* TODO mulq */ vu.vi10 = vu.vf11.x_as_u16(); - // mtir vi13, vf11.y | ftoi4.xyzw vf21, vf21 - vu.vf21.ftoi4(Mask::xyzw, vu.vf21); vu.vi13 = vu.vf11.y_as_u16(); - // lq.xyzw vf27, 2(vi08) | mul.xyzw vf12, vf12, vf23 - vu.vf12.mul_xyzw(vu.vf12, vu.vf23); lq_buffer_xyzw(vu.vf27, vu.vi08 + 2); - // lqi.xyzw vf23, vi03 | add.xyzw vf10, vf10, vf22 - vu.vf10.add_xyzw(vu.vf10, vu.vf22); lq_buffer_xyzw(vu.vf23, vu.vi03++); -// BRANCH! - // ibne vi00, vi09, L21 | mulaz.xyzw ACC, vf29, vf08 - vu.acc.mula_xyzw(vu.vf29, vu.vf08.z()); bc = (vu.vi09 != 0); - // sq.xyzw vf21, 2(vi11) | maddaz.xyzw ACC, vf30, vf11 - vu.acc.madda_xyzw(vu.vf30, vu.vf11.z()); sq_buffer_xyzw(vu.vf21, vu.vi11 + 2); - if (bc) { goto L21; } - - - // nop | ftoi4.xyzw vf21, vf09 - vu.vf21.ftoi4(Mask::xyzw, vu.vf09); - L21: - // mfp.w vf20, P | maddz.xyz vf11, vf31, vf14 - vu.acc.madd_xyz(vu.vf11, vu.vf31, vu.vf14.z()); vu.vf20.mfp(Mask::w, vu.P); - // sq.xyzw vf15, 0(vi11) | miniy.xyzw vf12, vf12, vf17 - vu.vf12.mini_xyzw(vu.vf12, vu.vf17.y()); sq_buffer_xyzw(vu.vf15, vu.vi11); - // sq.xyzw vf15, 0(vi14) | miniw.w vf10, vf10, vf03 - vu.vf10.mini(Mask::w, vu.vf10, vu.vf03.w()); sq_buffer_xyzw(vu.vf15, vu.vi14); - // sq.xyzw vf21, 2(vi14) | mulaw.xyzw ACC, vf25, vf08 - vu.acc.mula_xyzw(vu.vf25, vu.vf08.w()); sq_buffer_xyzw(vu.vf21, vu.vi14 + 2); - // lq.xyzw vf28, 3(vi08) | mulw.xyzw vf13, vf13, vf20 - vu.vf13.mul_xyzw(vu.vf13, vu.vf20.w()); lq_buffer_xyzw(vu.vf28, vu.vi08 + 3); - // erleng.xyz P, vf11 | ftoi0.xyzw vf12, vf12 - vu.vf12.ftoi0(Mask::xyzw, vu.vf12); vu.P = erleng(vu.vf11); /* TODO erleng */ -// BRANCH! - // ibne vi04, vi03, L22 | maddaw.xyzw ACC, vf26, vf11 - vu.acc.madda_xyzw(vu.vf26, vu.vf11.w()); bc = (vu.vi04 != vu.vi03); - // mr32.z vf14, vf00 | maddw.xyzw vf08, vf27, vf14 - vu.acc.madd_xyzw(vu.vf08, vu.vf27, vu.vf14.w()); vu.vf14.z() = 1.f; - if (bc) { goto L22; } - - -// BRANCH! - // ibne vi06, vi03, L40 | nop - bc = (vu.vi06 != vu.vi03); - // ilw.y vi09, -6(vi01) | nop - ilw_buffer(Mask::y, vu.vi09, vu.vi01 + -6); - if (bc) { goto L40; } - - -// BRANCH! - // ibne vi07, vi03, L77 | nop - bc = (vu.vi07 != vu.vi03); - // nop | nop - - if (bc) { goto L77; } - - -// BRANCH! - // b L153 | nop - bc = true; - // nop | nop - - if (bc) { goto L153; } - - - L22: - // lqi.xyzw vf09, vi01 | mulax.xyzw ACC, vf01, vf13 - vu.acc.mula_xyzw(vu.vf01, vu.vf13.x()); lq_buffer_xyzw(vu.vf09, vu.vi01++); - // sq.xyzw vf12, 1(vi11) | madday.xyzw ACC, vf02, vf13 - vu.acc.madda_xyzw(vu.vf02, vu.vf13.y()); sq_buffer_xyzw(vu.vf12, vu.vi11 + 1); - // sq.xyzw vf12, 1(vi14) | maddz.xyzw vf13, vf03, vf13 - vu.acc.madd_xyzw(vu.vf13, vu.vf03, vu.vf13.z()); sq_buffer_xyzw(vu.vf12, vu.vi14 + 1); - // lqi.xyzw vf12, vi01 | add.xyzw vf08, vf08, vf28 - vu.vf08.add_xyzw(vu.vf08, vu.vf28); lq_buffer_xyzw(vu.vf12, vu.vi01++); - // lqi.xyzw vf15, vi01 | maxw.w vf10, vf10, vf02 - vu.vf10.max(Mask::w, vu.vf10, vu.vf02.w()); lq_buffer_xyzw(vu.vf15, vu.vi01++); - // mtir vi08, vf09.x | itof0.xyzw vf23, vf23 - vu.vf23.itof0(Mask::xyzw, vu.vf23); vu.vi08 = vu.vf09.x_as_u16(); - // ilw.y vi09, -9(vi01) | maxx.xyzw vf13, vf13, vf00 - vu.vf13.max_xyzw(vu.vf13, vu.vf00.x()); ilw_buffer(Mask::y, vu.vi09, vu.vi01 + -9); - // div Q, vf01.w, vf08.w | add.zw vf09, vf09, vf17 - vu.vf09.add(Mask::zw, vu.vf09, vu.vf17); vu.Q = vu.vf01.w() / vu.vf08.w(); - - // move.xyzw vf21, vf10 | add.xyzw vf12, vf12, vf18 - vu.vf12.add_xyzw(vu.vf12, vu.vf18); vu.vf21.move_xyzw(vu.vf10); - // lq.xyz vf29, 4(vi08) | add.xyzw vf15, vf15, vf19 - vu.vf15.add_xyzw(vu.vf15, vu.vf19); lq_buffer_xyz(vu.vf29, vu.vi08 + 4); - // lq.xyz vf30, 5(vi08) | mulax.xyzw ACC, vf04, vf13 - vu.acc.mula_xyzw(vu.vf04, vu.vf13.x()); lq_buffer_xyz(vu.vf30, vu.vi08 + 5); -// BRANCH! - // ibgtz vi09, L23 | madday.xyzw ACC, vf05, vf13 - vu.acc.madda_xyzw(vu.vf05, vu.vf13.y()); bc = ((s16)vu.vi09) > 0; - // lq.xyzw vf31, 6(vi08) | maddaz.xyzw ACC, vf06, vf13 - vu.acc.madda_xyzw(vu.vf06, vu.vf13.z()); lq_buffer_xyzw(vu.vf31, vu.vi08 + 6); - if (bc) { goto L23; } - - - // nop | addx.w vf21, vf21, vf17 - vu.vf21.add(Mask::w, vu.vf21, vu.vf17.x()); - L23: - // lq.xyzw vf25, 0(vi08) | maddw.xyzw vf13, vf07, vf00 - vu.acc.madd_xyzw(vu.vf13, vu.vf07, vu.vf00.w()); lq_buffer_xyzw(vu.vf25, vu.vi08); - // lq.xyzw vf26, 1(vi08) | mul.xyz vf08, vf08, Q - vu.vf08.mul(Mask::xyz, vu.vf08, vu.Q); /* TODO mulq */ lq_buffer_xyzw(vu.vf26, vu.vi08 + 1); - // mtir vi11, vf12.x | mul.xyzw vf14, vf14, Q - vu.vf14.mul_xyzw(vu.vf14, vu.Q); /* TODO mulq */ vu.vi11 = vu.vf12.x_as_u16(); - // mtir vi14, vf12.y | ftoi4.xyzw vf21, vf21 - vu.vf21.ftoi4(Mask::xyzw, vu.vf21); vu.vi14 = vu.vf12.y_as_u16(); - // lq.xyzw vf27, 2(vi08) | mul.xyzw vf13, vf13, vf23 - vu.vf13.mul_xyzw(vu.vf13, vu.vf23); lq_buffer_xyzw(vu.vf27, vu.vi08 + 2); - // lqi.xyzw vf23, vi03 | add.xyzw vf08, vf08, vf22 - vu.vf08.add_xyzw(vu.vf08, vu.vf22); lq_buffer_xyzw(vu.vf23, vu.vi03++); -// BRANCH! - // ibne vi00, vi09, L24 | mulaz.xyzw ACC, vf29, vf09 - vu.acc.mula_xyzw(vu.vf29, vu.vf09.z()); bc = (vu.vi09 != 0); - // sq.xyzw vf21, 2(vi12) | maddaz.xyzw ACC, vf30, vf12 - vu.acc.madda_xyzw(vu.vf30, vu.vf12.z()); sq_buffer_xyzw(vu.vf21, vu.vi12 + 2); - if (bc) { goto L24; } - - - // nop | ftoi4.xyzw vf21, vf10 - vu.vf21.ftoi4(Mask::xyzw, vu.vf10); - L24: - // mfp.w vf20, P | maddz.xyz vf12, vf31, vf15 - vu.acc.madd_xyz(vu.vf12, vu.vf31, vu.vf15.z()); vu.vf20.mfp(Mask::w, vu.P); - // sq.xyzw vf16, 0(vi12) | miniy.xyzw vf13, vf13, vf17 - vu.vf13.mini_xyzw(vu.vf13, vu.vf17.y()); sq_buffer_xyzw(vu.vf16, vu.vi12); - // sq.xyzw vf16, 0(vi15) | miniw.w vf08, vf08, vf03 - vu.vf08.mini(Mask::w, vu.vf08, vu.vf03.w()); sq_buffer_xyzw(vu.vf16, vu.vi15); - // sq.xyzw vf21, 2(vi15) | mulaw.xyzw ACC, vf25, vf09 - vu.acc.mula_xyzw(vu.vf25, vu.vf09.w()); sq_buffer_xyzw(vu.vf21, vu.vi15 + 2); - // lq.xyzw vf28, 3(vi08) | mulw.xyzw vf11, vf11, vf20 - vu.vf11.mul_xyzw(vu.vf11, vu.vf20.w()); lq_buffer_xyzw(vu.vf28, vu.vi08 + 3); - // erleng.xyz P, vf12 | ftoi0.xyzw vf13, vf13 - vu.vf13.ftoi0(Mask::xyzw, vu.vf13); vu.P = erleng(vu.vf12); /* TODO erleng */ -// BRANCH! - // ibne vi04, vi03, L15 | maddaw.xyzw ACC, vf26, vf12 - vu.acc.madda_xyzw(vu.vf26, vu.vf12.w()); bc = (vu.vi04 != vu.vi03); - // mr32.z vf15, vf00 | maddw.xyzw vf09, vf27, vf15 - vu.acc.madd_xyzw(vu.vf09, vu.vf27, vu.vf15.w()); vu.vf15.z() = 1.f; - if (bc) { goto L15; } - - -// BRANCH! - // ibne vi06, vi03, L29 | nop - bc = (vu.vi06 != vu.vi03); - // ilw.y vi09, -6(vi01) | nop - ilw_buffer(Mask::y, vu.vi09, vu.vi01 + -6); - if (bc) { goto L29; } - - -// BRANCH! - // ibne vi07, vi03, L66 | nop - bc = (vu.vi07 != vu.vi03); - // nop | nop - - if (bc) { goto L66; } - - -// BRANCH! - // b L163 | nop - bc = true; - // nop | nop - - if (bc) { goto L163; } - - - L25: -// BRANCH! - // ibeq vi00, vi06, L61 | nop - bc = (vu.vi06 == 0); - // iadd vi02, vi02, vi12 | nop - vu.vi02 = vu.vi02 + vu.vi12; - if (bc) { goto L61; } - - - // lqi.xyzw vf08, vi01 | nop - lq_buffer_xyzw(vu.vf08, vu.vi01++); - // lqi.xyzw vf24, vi02 | nop - lq_buffer_xyzw(vu.vf24, vu.vi02++); - // lqi.xyzw vf11, vi01 | nop - lq_buffer_xyzw(vu.vf11, vu.vi01++); - // lqi.xyzw vf14, vi01 | nop - lq_buffer_xyzw(vu.vf14, vu.vi01++); - // mtir vi10, vf08.x | nop - vu.vi10 = vu.vf08.x_as_u16(); - // mtir vi13, vf08.y | itof0.xyzw vf24, vf24 - vu.vf24.itof0(Mask::xyzw, vu.vf24); vu.vi13 = vu.vf08.y_as_u16(); - // iaddi vi06, vi06, -0x1 | add.zw vf08, vf08, vf17 - vu.vf08.add(Mask::zw, vu.vf08, vu.vf17); vu.vi06 = vu.vi06 + -1; - // nop | add.xyzw vf11, vf11, vf18 - vu.vf11.add_xyzw(vu.vf11, vu.vf18); - // iand vi10, vi10, vi05 | add.xyzw vf14, vf14, vf19 - vu.vf14.add_xyzw(vu.vf14, vu.vf19); vu.vi10 = vu.vi10 & vu.vi05; - // nop | mulw.xyzw vf24, vf24, vf29 - vu.vf24.mul_xyzw(vu.vf24, vu.vf29.w()); - // iand vi13, vi13, vi05 | nop - vu.vi13 = vu.vi13 & vu.vi05; - // lq.xyzw vf20, 0(vi10) | nop - lq_buffer_xyzw(vu.vf20, vu.vi10); - // lq.xyzw vf25, 0(vi13) | nop - lq_buffer_xyzw(vu.vf25, vu.vi13); - // lq.xyzw vf23, 1(vi10) | nop - lq_buffer_xyzw(vu.vf23, vu.vi10 + 1); - // lq.xyzw vf26, 1(vi13) | nop - lq_buffer_xyzw(vu.vf26, vu.vi13 + 1); - // lq.xyzw vf20, 2(vi10) | mulax.xyzw ACC, vf20, vf24 - vu.acc.mula_xyzw(vu.vf20, vu.vf24.x()); lq_buffer_xyzw(vu.vf20, vu.vi10 + 2); - // lq.xyzw vf27, 2(vi13) | maddy.xyzw vf25, vf25, vf24 - vu.acc.madd_xyzw(vu.vf25, vu.vf25, vu.vf24.y()); lq_buffer_xyzw(vu.vf27, vu.vi13 + 2); - // lq.xyzw vf23, 3(vi10) | mulax.xyzw ACC, vf23, vf24 - vu.acc.mula_xyzw(vu.vf23, vu.vf24.x()); lq_buffer_xyzw(vu.vf23, vu.vi10 + 3); - // lq.xyzw vf28, 3(vi13) | maddy.xyzw vf26, vf26, vf24 - vu.acc.madd_xyzw(vu.vf26, vu.vf26, vu.vf24.y()); lq_buffer_xyzw(vu.vf28, vu.vi13 + 3); - // lq.xyzw vf20, 4(vi10) | mulax.xyzw ACC, vf20, vf24 - vu.acc.mula_xyzw(vu.vf20, vu.vf24.x()); lq_buffer_xyzw(vu.vf20, vu.vi10 + 4); - // lq.xyz vf29, 4(vi13) | maddy.xyzw vf27, vf27, vf24 - vu.acc.madd_xyzw(vu.vf27, vu.vf27, vu.vf24.y()); lq_buffer_xyz(vu.vf29, vu.vi13 + 4); - // lq.xyzw vf23, 5(vi10) | mulax.xyzw ACC, vf23, vf24 - vu.acc.mula_xyzw(vu.vf23, vu.vf24.x()); lq_buffer_xyzw(vu.vf23, vu.vi10 + 5); - // lq.xyz vf30, 5(vi13) | maddy.xyzw vf28, vf28, vf24 - vu.acc.madd_xyzw(vu.vf28, vu.vf28, vu.vf24.y()); lq_buffer_xyz(vu.vf30, vu.vi13 + 5); - // lq.xyzw vf20, 6(vi10) | mulax.xyzw ACC, vf20, vf24 - vu.acc.mula_xyzw(vu.vf20, vu.vf24.x()); lq_buffer_xyzw(vu.vf20, vu.vi10 + 6); - // lq.xyzw vf31, 6(vi13) | maddy.xyz vf29, vf29, vf24 - vu.acc.madd_xyz(vu.vf29, vu.vf29, vu.vf24.y()); lq_buffer_xyzw(vu.vf31, vu.vi13 + 6); - // mtir vi10, vf11.x | mulax.xyzw ACC, vf23, vf24 - vu.acc.mula_xyzw(vu.vf23, vu.vf24.x()); vu.vi10 = vu.vf11.x_as_u16(); - // mtir vi13, vf11.y | maddy.xyz vf30, vf30, vf24 - vu.acc.madd_xyz(vu.vf30, vu.vf30, vu.vf24.y()); vu.vi13 = vu.vf11.y_as_u16(); - // nop | mulax.xyzw ACC, vf20, vf24 - vu.acc.mula_xyzw(vu.vf20, vu.vf24.x()); - // nop | maddy.xyzw vf31, vf31, vf24 - vu.acc.madd_xyzw(vu.vf31, vu.vf31, vu.vf24.y()); - // nop | mulaz.xyzw ACC, vf29, vf08 - vu.acc.mula_xyzw(vu.vf29, vu.vf08.z()); - // nop | maddaz.xyzw ACC, vf30, vf11 - vu.acc.madda_xyzw(vu.vf30, vu.vf11.z()); - // nop | maddz.xyz vf11, vf31, vf14 - vu.acc.madd_xyz(vu.vf11, vu.vf31, vu.vf14.z()); - // nop | nop - - // nop | nop - - // nop | mulaw.xyzw ACC, vf25, vf08 - vu.acc.mula_xyzw(vu.vf25, vu.vf08.w()); - // iaddiu vi08, vi00, 0x243 | nop - vu.vi08 = 0x243; /* 579 */ - - // erleng.xyz P, vf11 | nop - vu.P = erleng(vu.vf11); /* TODO erleng */ - // ior vi15, vi07, vi00 | maddaw.xyzw ACC, vf26, vf11 - vu.acc.madda_xyzw(vu.vf26, vu.vf11.w()); vu.vi15 = vu.vi07; - // mr32.z vf14, vf00 | maddw.xyzw vf08, vf27, vf14 - vu.acc.madd_xyzw(vu.vf08, vu.vf27, vu.vf14.w()); vu.vf14.z() = 1.f; - // lqi.xyzw vf09, vi01 | nop - lq_buffer_xyzw(vu.vf09, vu.vi01++); - // ilwr.y vi03, vi12 | nop - ilw_buffer(Mask::y, vu.vi03, vu.vi12); - // ilw.z vi07, 1(vi12) | nop - ilw_buffer(Mask::z, vu.vi07, vu.vi12 + 1); - // lqi.xyzw vf12, vi01 | add.xyzw vf08, vf08, vf28 - vu.vf08.add_xyzw(vu.vf08, vu.vf28); lq_buffer_xyzw(vu.vf12, vu.vi01++); - // lqi.xyzw vf15, vi01 | nop - lq_buffer_xyzw(vu.vf15, vu.vi01++); - // mtir vi11, vf09.x | nop - vu.vi11 = vu.vf09.x_as_u16(); -// BRANCH! - // ibeq vi00, vi15, L26 | nop - bc = (vu.vi15 == 0); - // mtir vi14, vf09.y | nop - vu.vi14 = vu.vf09.y_as_u16(); - if (bc) { goto L26; } - - - // iaddiu vi08, vi00, 0x539 | miniw.w vf08, vf08, vf01 - vu.vf08.mini(Mask::w, vu.vf08, vu.vf01.w()); vu.vi08 = 0x539; /* 1337 */ - - L26: - // div Q, vf01.w, vf08.w | add.zw vf09, vf09, vf17 - vu.vf09.add(Mask::zw, vu.vf09, vu.vf17); vu.Q = vu.vf01.w() / vu.vf08.w(); - - // iadd vi03, vi03, vi12 | add.xyzw vf12, vf12, vf18 - vu.vf12.add_xyzw(vu.vf12, vu.vf18); vu.vi03 = vu.vi03 + vu.vi12; - // iand vi11, vi11, vi05 | add.xyzw vf15, vf15, vf19 - vu.vf15.add_xyzw(vu.vf15, vu.vf19); vu.vi11 = vu.vi11 & vu.vi05; - // iadd vi06, vi06, vi03 | nop - vu.vi06 = vu.vi06 + vu.vi03; - // iadd vi07, vi07, vi06 | nop - vu.vi07 = vu.vi07 + vu.vi06; - // iand vi14, vi14, vi05 | nop - vu.vi14 = vu.vi14 & vu.vi05; -// BRANCH! - // ibne vi05, vi11, L27 | nop - bc = (vu.vi05 != vu.vi11); - // nop | mul.xyz vf08, vf08, Q - vu.vf08.mul(Mask::xyz, vu.vf08, vu.Q); /* TODO mulq */ - if (bc) { goto L27; } - - - // mtir vi11, vf12.x | mul.xyzw vf14, vf14, Q - vu.vf14.mul_xyzw(vu.vf14, vu.Q); /* TODO mulq */ vu.vi11 = vu.vf12.x_as_u16(); - // mtir vi14, vf12.y | nop - vu.vi14 = vu.vf12.y_as_u16(); -// BRANCH! - // b L28 | nop - bc = true; - // lqi.xyzw vf23, vi03 | add.xyzw vf08, vf08, vf22 - vu.vf08.add_xyzw(vu.vf08, vu.vf22); lq_buffer_xyzw(vu.vf23, vu.vi03++); - if (bc) { goto L28; } - - - L27: - // lq.xyzw vf20, 0(vi11) | mul.xyzw vf14, vf14, Q - vu.vf14.mul_xyzw(vu.vf14, vu.Q); /* TODO mulq */ lq_buffer_xyzw(vu.vf20, vu.vi11); - // lq.xyzw vf25, 0(vi14) | nop - lq_buffer_xyzw(vu.vf25, vu.vi14); - // lq.xyzw vf23, 1(vi11) | nop - lq_buffer_xyzw(vu.vf23, vu.vi11 + 1); - // lq.xyzw vf26, 1(vi14) | add.xyzw vf08, vf08, vf22 - vu.vf08.add_xyzw(vu.vf08, vu.vf22); lq_buffer_xyzw(vu.vf26, vu.vi14 + 1); - // lq.xyzw vf20, 2(vi11) | mulaz.xyzw ACC, vf20, vf24 - vu.acc.mula_xyzw(vu.vf20, vu.vf24.z()); lq_buffer_xyzw(vu.vf20, vu.vi11 + 2); - // lq.xyzw vf27, 2(vi14) | maddw.xyzw vf25, vf25, vf24 - vu.acc.madd_xyzw(vu.vf25, vu.vf25, vu.vf24.w()); lq_buffer_xyzw(vu.vf27, vu.vi14 + 2); - // lq.xyzw vf23, 3(vi11) | mulaz.xyzw ACC, vf23, vf24 - vu.acc.mula_xyzw(vu.vf23, vu.vf24.z()); lq_buffer_xyzw(vu.vf23, vu.vi11 + 3); - // lq.xyzw vf28, 3(vi14) | maddw.xyzw vf26, vf26, vf24 - vu.acc.madd_xyzw(vu.vf26, vu.vf26, vu.vf24.w()); lq_buffer_xyzw(vu.vf28, vu.vi14 + 3); - // lq.xyzw vf20, 4(vi11) | mulaz.xyzw ACC, vf20, vf24 - vu.acc.mula_xyzw(vu.vf20, vu.vf24.z()); lq_buffer_xyzw(vu.vf20, vu.vi11 + 4); - // lq.xyz vf29, 4(vi14) | maddw.xyzw vf27, vf27, vf24 - vu.acc.madd_xyzw(vu.vf27, vu.vf27, vu.vf24.w()); lq_buffer_xyz(vu.vf29, vu.vi14 + 4); - // lq.xyzw vf23, 5(vi11) | mulaz.xyzw ACC, vf23, vf24 - vu.acc.mula_xyzw(vu.vf23, vu.vf24.z()); lq_buffer_xyzw(vu.vf23, vu.vi11 + 5); - // lq.xyz vf30, 5(vi14) | maddw.xyzw vf28, vf28, vf24 - vu.acc.madd_xyzw(vu.vf28, vu.vf28, vu.vf24.w()); lq_buffer_xyz(vu.vf30, vu.vi14 + 5); - // lq.xyzw vf20, 6(vi11) | mulaz.xyzw ACC, vf20, vf24 - vu.acc.mula_xyzw(vu.vf20, vu.vf24.z()); lq_buffer_xyzw(vu.vf20, vu.vi11 + 6); - // lq.xyzw vf31, 6(vi14) | maddw.xyz vf29, vf29, vf24 - vu.acc.madd_xyz(vu.vf29, vu.vf29, vu.vf24.w()); lq_buffer_xyzw(vu.vf31, vu.vi14 + 6); - // lqi.xyzw vf23, vi02 | mulaz.xyzw ACC, vf23, vf24 - vu.acc.mula_xyzw(vu.vf23, vu.vf24.z()); lq_buffer_xyzw(vu.vf23, vu.vi02++); - // mtir vi11, vf12.x | maddw.xyz vf30, vf30, vf24 - vu.acc.madd_xyz(vu.vf30, vu.vf30, vu.vf24.w()); vu.vi11 = vu.vf12.x_as_u16(); - // mtir vi14, vf12.y | mulaz.xyzw ACC, vf20, vf24 - vu.acc.mula_xyzw(vu.vf20, vu.vf24.z()); vu.vi14 = vu.vf12.y_as_u16(); - // iaddiu vi08, vi00, 0x1a1 | maddw.xyzw vf31, vf31, vf24 - vu.acc.madd_xyzw(vu.vf31, vu.vf31, vu.vf24.w()); vu.vi08 = 0x1a1; /* 417 */ - -// BRANCH! - // ibeq vi00, vi15, L28 | nop - bc = (vu.vi15 == 0); - // lqi.xyzw vf23, vi03 | itof0.xyzw vf24, vf23 - vu.vf24.itof0(Mask::xyzw, vu.vf23); lq_buffer_xyzw(vu.vf23, vu.vi03++); - if (bc) { goto L28; } - - - // iaddiu vi08, vi00, 0x48e | nop - vu.vi08 = 0x48e; /* 1166 */ - - L28: - // nop | mulaz.xyzw ACC, vf29, vf09 - vu.acc.mula_xyzw(vu.vf29, vu.vf09.z()); - // nop | maddaz.xyzw ACC, vf30, vf12 - vu.acc.madda_xyzw(vu.vf30, vu.vf12.z()); - // mfp.w vf20, P | maddz.xyz vf12, vf31, vf15 - vu.acc.madd_xyz(vu.vf12, vu.vf31, vu.vf15.z()); vu.vf20.mfp(Mask::w, vu.P); - // nop | nop - - // 1024.0 | miniw.w vf08, vf08, vf03 :i - vu.vf08.mini(Mask::w, vu.vf08, vu.vf03.w()); vu.I = 1024.0; -// BRANCH! - // ibne vi00, vi15, L93 | mulaw.xyzw ACC, vf25, vf09 - vu.acc.mula_xyzw(vu.vf25, vu.vf09.w()); bc = (vu.vi15 != 0); - // ilw.y vi09, -6(vi01) | mulw.xyzw vf11, vf11, vf20 - vu.vf11.mul_xyzw(vu.vf11, vu.vf20.w()); ilw_buffer(Mask::y, vu.vi09, vu.vi01 + -6); - if (bc) { goto L93; } - - - // erleng.xyz P, vf12 | nop - vu.P = erleng(vu.vf12); /* TODO erleng */ -// BRANCH! - // ibeq vi06, vi03, L65 | maddaw.xyzw ACC, vf26, vf12 - vu.acc.madda_xyzw(vu.vf26, vu.vf12.w()); bc = (vu.vi06 == vu.vi03); - // mr32.z vf15, vf00 | maddw.xyzw vf09, vf27, vf15 - vu.acc.madd_xyzw(vu.vf09, vu.vf27, vu.vf15.w()); vu.vf15.z() = 1.f; - if (bc) { goto L65; } - - - // lqi.xyzw vf10, vi01 | mulax.xyzw ACC, vf01, vf11 - vu.acc.mula_xyzw(vu.vf01, vu.vf11.x()); lq_buffer_xyzw(vu.vf10, vu.vi01++); - // jr vi08 | madday.xyzw ACC, vf02, vf11 - vu.acc.madda_xyzw(vu.vf02, vu.vf11.y()); - // nop | maddz.xyzw vf11, vf03, vf11 - vu.acc.madd_xyzw(vu.vf11, vu.vf03, vu.vf11.z()); - switch (vu.vi08) { - case 0x1a1: - goto JUMP_1A1; - case 0x48e: - goto JUMP_48E; -case 0x243: -goto JUMP_243; -default: -ASSERT(false); -} - L29: - // lqi.xyzw vf10, vi01 | mulax.xyzw ACC, vf01, vf11 - vu.acc.mula_xyzw(vu.vf01, vu.vf11.x()); lq_buffer_xyzw(vu.vf10, vu.vi01++); - // sq.xyzw vf13, 1(vi12) | madday.xyzw ACC, vf02, vf11 - vu.acc.madda_xyzw(vu.vf02, vu.vf11.y()); sq_buffer_xyzw(vu.vf13, vu.vi12 + 1); - // sq.xyzw vf13, 1(vi15) | maddz.xyzw vf11, vf03, vf11 - vu.acc.madd_xyzw(vu.vf11, vu.vf03, vu.vf11.z()); sq_buffer_xyzw(vu.vf13, vu.vi15 + 1); - JUMP_1A1: - // lqi.xyzw vf13, vi01 | add.xyzw vf09, vf09, vf28 - vu.vf09.add_xyzw(vu.vf09, vu.vf28); lq_buffer_xyzw(vu.vf13, vu.vi01++); - // lqi.xyzw vf16, vi01 | maxw.w vf08, vf08, vf02 - vu.vf08.max(Mask::w, vu.vf08, vu.vf02.w()); lq_buffer_xyzw(vu.vf16, vu.vi01++); - // mtir vi12, vf10.x | itof0.xyzw vf23, vf23 - vu.vf23.itof0(Mask::xyzw, vu.vf23); vu.vi12 = vu.vf10.x_as_u16(); - // mtir vi15, vf10.y | maxx.xyzw vf11, vf11, vf00 - vu.vf11.max_xyzw(vu.vf11, vu.vf00.x()); vu.vi15 = vu.vf10.y_as_u16(); - // div Q, vf01.w, vf09.w | add.zw vf10, vf10, vf17 - vu.vf10.add(Mask::zw, vu.vf10, vu.vf17); vu.Q = vu.vf01.w() / vu.vf09.w(); - - // move.xyzw vf21, vf08 | add.xyzw vf13, vf13, vf18 - vu.vf13.add_xyzw(vu.vf13, vu.vf18); vu.vf21.move_xyzw(vu.vf08); - // iand vi12, vi12, vi05 | add.xyzw vf16, vf16, vf19 - vu.vf16.add_xyzw(vu.vf16, vu.vf19); vu.vi12 = vu.vi12 & vu.vi05; - // nop | mulax.xyzw ACC, vf04, vf11 - vu.acc.mula_xyzw(vu.vf04, vu.vf11.x()); -// BRANCH! - // ibgtz vi09, L31 | madday.xyzw ACC, vf05, vf11 - vu.acc.madda_xyzw(vu.vf05, vu.vf11.y()); bc = ((s16)vu.vi09) > 0; - // iand vi15, vi15, vi05 | maddaz.xyzw ACC, vf06, vf11 - vu.acc.madda_xyzw(vu.vf06, vu.vf11.z()); vu.vi15 = vu.vi15 & vu.vi05; - if (bc) { goto L31; } - - - // nop | addx.w vf21, vf21, vf17 - vu.vf21.add(Mask::w, vu.vf21, vu.vf17.x()); - L31: -// BRANCH! - // ibne vi05, vi12, L32 | maddw.xyzw vf11, vf07, vf00 - vu.acc.madd_xyzw(vu.vf11, vu.vf07, vu.vf00.w()); bc = (vu.vi05 != vu.vi12); - // ilw.x vi09, -9(vi01) | mul.xyz vf09, vf09, Q - vu.vf09.mul(Mask::xyz, vu.vf09, vu.Q); /* TODO mulq */ ilw_buffer(Mask::x, vu.vi09, vu.vi01 + -9); - if (bc) { goto L32; } - - - // mtir vi12, vf13.x | mul.xyzw vf15, vf15, Q - vu.vf15.mul_xyzw(vu.vf15, vu.Q); /* TODO mulq */ vu.vi12 = vu.vf13.x_as_u16(); - // mtir vi15, vf13.y | ftoi4.xyzw vf21, vf21 - vu.vf21.ftoi4(Mask::xyzw, vu.vf21); vu.vi15 = vu.vf13.y_as_u16(); -// BRANCH! - // b L33 | mul.xyzw vf11, vf11, vf23 - vu.vf11.mul_xyzw(vu.vf11, vu.vf23); bc = true; - // lqi.xyzw vf23, vi03 | add.xyzw vf09, vf09, vf22 - vu.vf09.add_xyzw(vu.vf09, vu.vf22); lq_buffer_xyzw(vu.vf23, vu.vi03++); - if (bc) { goto L33; } - - - L32: - // lq.xyzw vf20, 0(vi12) | mul.xyzw vf15, vf15, Q - vu.vf15.mul_xyzw(vu.vf15, vu.Q); /* TODO mulq */ lq_buffer_xyzw(vu.vf20, vu.vi12); - // nop | mulw.xyzw vf24, vf24, vf29 - vu.vf24.mul_xyzw(vu.vf24, vu.vf29.w()); - // lq.xyzw vf25, 0(vi15) | ftoi4.xyzw vf21, vf21 - vu.vf21.ftoi4(Mask::xyzw, vu.vf21); lq_buffer_xyzw(vu.vf25, vu.vi15); - // lq.xyzw vf23, 1(vi12) | mul.xyzw vf11, vf11, vf23 - vu.vf11.mul_xyzw(vu.vf11, vu.vf23); lq_buffer_xyzw(vu.vf23, vu.vi12 + 1); - // lq.xyzw vf26, 1(vi15) | add.xyzw vf09, vf09, vf22 - vu.vf09.add_xyzw(vu.vf09, vu.vf22); lq_buffer_xyzw(vu.vf26, vu.vi15 + 1); - // lq.xyzw vf20, 2(vi12) | mulax.xyzw ACC, vf20, vf24 - vu.acc.mula_xyzw(vu.vf20, vu.vf24.x()); lq_buffer_xyzw(vu.vf20, vu.vi12 + 2); - // lq.xyzw vf27, 2(vi15) | maddy.xyzw vf25, vf25, vf24 - vu.acc.madd_xyzw(vu.vf25, vu.vf25, vu.vf24.y()); lq_buffer_xyzw(vu.vf27, vu.vi15 + 2); - // lq.xyzw vf23, 3(vi12) | mulax.xyzw ACC, vf23, vf24 - vu.acc.mula_xyzw(vu.vf23, vu.vf24.x()); lq_buffer_xyzw(vu.vf23, vu.vi12 + 3); - // lq.xyzw vf28, 3(vi15) | maddy.xyzw vf26, vf26, vf24 - vu.acc.madd_xyzw(vu.vf26, vu.vf26, vu.vf24.y()); lq_buffer_xyzw(vu.vf28, vu.vi15 + 3); - // lq.xyzw vf20, 4(vi12) | mulax.xyzw ACC, vf20, vf24 - vu.acc.mula_xyzw(vu.vf20, vu.vf24.x()); lq_buffer_xyzw(vu.vf20, vu.vi12 + 4); - // lq.xyz vf29, 4(vi15) | maddy.xyzw vf27, vf27, vf24 - vu.acc.madd_xyzw(vu.vf27, vu.vf27, vu.vf24.y()); lq_buffer_xyz(vu.vf29, vu.vi15 + 4); - // lq.xyzw vf23, 5(vi12) | mulax.xyzw ACC, vf23, vf24 - vu.acc.mula_xyzw(vu.vf23, vu.vf24.x()); lq_buffer_xyzw(vu.vf23, vu.vi12 + 5); - // lq.xyz vf30, 5(vi15) | maddy.xyzw vf28, vf28, vf24 - vu.acc.madd_xyzw(vu.vf28, vu.vf28, vu.vf24.y()); lq_buffer_xyz(vu.vf30, vu.vi15 + 5); - // lq.xyzw vf20, 6(vi12) | mulax.xyzw ACC, vf20, vf24 - vu.acc.mula_xyzw(vu.vf20, vu.vf24.x()); lq_buffer_xyzw(vu.vf20, vu.vi12 + 6); - // lq.xyzw vf31, 6(vi15) | maddy.xyz vf29, vf29, vf24 - vu.acc.madd_xyz(vu.vf29, vu.vf29, vu.vf24.y()); lq_buffer_xyzw(vu.vf31, vu.vi15 + 6); - // mtir vi12, vf13.x | mulax.xyzw ACC, vf23, vf24 - vu.acc.mula_xyzw(vu.vf23, vu.vf24.x()); vu.vi12 = vu.vf13.x_as_u16(); - // mtir vi15, vf13.y | maddy.xyz vf30, vf30, vf24 - vu.acc.madd_xyz(vu.vf30, vu.vf30, vu.vf24.y()); vu.vi15 = vu.vf13.y_as_u16(); -// BRANCH! - // b L49 | mulax.xyzw ACC, vf20, vf24 - vu.acc.mula_xyzw(vu.vf20, vu.vf24.x()); bc = true; - // lqi.xyzw vf23, vi03 | maddy.xyzw vf31, vf31, vf24 - vu.acc.madd_xyzw(vu.vf31, vu.vf31, vu.vf24.y()); lq_buffer_xyzw(vu.vf23, vu.vi03++); - if (bc) { goto L49; } - - - L33: -// BRANCH! - // ibgez vi09, L34 | mulaz.xyzw ACC, vf29, vf10 - vu.acc.mula_xyzw(vu.vf29, vu.vf10.z()); bc = ((s16)vu.vi09) >= 0; - // sq.xyzw vf21, 2(vi10) | maddaz.xyzw ACC, vf30, vf13 - vu.acc.madda_xyzw(vu.vf30, vu.vf13.z()); sq_buffer_xyzw(vu.vf21, vu.vi10 + 2); - if (bc) { goto L34; } - - - // nop | ftoi4.xyzw vf21, vf08 - vu.vf21.ftoi4(Mask::xyzw, vu.vf08); - L34: - // mfp.w vf20, P | maddz.xyz vf13, vf31, vf16 - vu.acc.madd_xyz(vu.vf13, vu.vf31, vu.vf16.z()); vu.vf20.mfp(Mask::w, vu.P); - // sq.xyzw vf14, 0(vi10) | miniy.xyzw vf11, vf11, vf17 - vu.vf11.mini_xyzw(vu.vf11, vu.vf17.y()); sq_buffer_xyzw(vu.vf14, vu.vi10); - // sq.xyzw vf14, 0(vi13) | miniw.w vf09, vf09, vf03 - vu.vf09.mini(Mask::w, vu.vf09, vu.vf03.w()); sq_buffer_xyzw(vu.vf14, vu.vi13); - // sq.xyzw vf21, 2(vi13) | mulaw.xyzw ACC, vf25, vf10 - vu.acc.mula_xyzw(vu.vf25, vu.vf10.w()); sq_buffer_xyzw(vu.vf21, vu.vi13 + 2); - // ilw.y vi09, -6(vi01) | mulw.xyzw vf12, vf12, vf20 - vu.vf12.mul_xyzw(vu.vf12, vu.vf20.w()); ilw_buffer(Mask::y, vu.vi09, vu.vi01 + -6); - // erleng.xyz P, vf13 | ftoi0.xyzw vf11, vf11 - vu.vf11.ftoi0(Mask::xyzw, vu.vf11); vu.P = erleng(vu.vf13); /* TODO erleng */ -// BRANCH! - // ibne vi06, vi03, L35 | maddaw.xyzw ACC, vf26, vf13 - vu.acc.madda_xyzw(vu.vf26, vu.vf13.w()); bc = (vu.vi06 != vu.vi03); - // mr32.z vf16, vf00 | maddw.xyzw vf10, vf27, vf16 - vu.acc.madd_xyzw(vu.vf10, vu.vf27, vu.vf16.w()); vu.vf16.z() = 1.f; - if (bc) { goto L35; } - - -// BRANCH! - // ibne vi07, vi03, L72 | nop - bc = (vu.vi07 != vu.vi03); - // nop | nop - - if (bc) { goto L72; } - - -// BRANCH! - // b L143 | nop - bc = true; - // nop | nop - - if (bc) { goto L143; } - - - L35: - // lqi.xyzw vf08, vi01 | mulax.xyzw ACC, vf01, vf12 - vu.acc.mula_xyzw(vu.vf01, vu.vf12.x()); lq_buffer_xyzw(vu.vf08, vu.vi01++); - // sq.xyzw vf11, 1(vi10) | madday.xyzw ACC, vf02, vf12 - vu.acc.madda_xyzw(vu.vf02, vu.vf12.y()); sq_buffer_xyzw(vu.vf11, vu.vi10 + 1); - // sq.xyzw vf11, 1(vi13) | maddz.xyzw vf12, vf03, vf12 - vu.acc.madd_xyzw(vu.vf12, vu.vf03, vu.vf12.z()); sq_buffer_xyzw(vu.vf11, vu.vi13 + 1); - // lqi.xyzw vf11, vi01 | add.xyzw vf10, vf10, vf28 - vu.vf10.add_xyzw(vu.vf10, vu.vf28); lq_buffer_xyzw(vu.vf11, vu.vi01++); - // lqi.xyzw vf14, vi01 | maxw.w vf09, vf09, vf02 - vu.vf09.max(Mask::w, vu.vf09, vu.vf02.w()); lq_buffer_xyzw(vu.vf14, vu.vi01++); - // mtir vi10, vf08.x | itof0.xyzw vf23, vf23 - vu.vf23.itof0(Mask::xyzw, vu.vf23); vu.vi10 = vu.vf08.x_as_u16(); - // mtir vi13, vf08.y | maxx.xyzw vf12, vf12, vf00 - vu.vf12.max_xyzw(vu.vf12, vu.vf00.x()); vu.vi13 = vu.vf08.y_as_u16(); - // div Q, vf01.w, vf10.w | add.zw vf08, vf08, vf17 - vu.vf08.add(Mask::zw, vu.vf08, vu.vf17); vu.Q = vu.vf01.w() / vu.vf10.w(); - - // move.xyzw vf21, vf09 | add.xyzw vf11, vf11, vf18 - vu.vf11.add_xyzw(vu.vf11, vu.vf18); vu.vf21.move_xyzw(vu.vf09); - // iand vi10, vi10, vi05 | add.xyzw vf14, vf14, vf19 - vu.vf14.add_xyzw(vu.vf14, vu.vf19); vu.vi10 = vu.vi10 & vu.vi05; - // nop | mulax.xyzw ACC, vf04, vf12 - vu.acc.mula_xyzw(vu.vf04, vu.vf12.x()); -// BRANCH! - // ibgtz vi09, L36 | madday.xyzw ACC, vf05, vf12 - vu.acc.madda_xyzw(vu.vf05, vu.vf12.y()); bc = ((s16)vu.vi09) > 0; - // iand vi13, vi13, vi05 | maddaz.xyzw ACC, vf06, vf12 - vu.acc.madda_xyzw(vu.vf06, vu.vf12.z()); vu.vi13 = vu.vi13 & vu.vi05; - if (bc) { goto L36; } - - - // nop | addx.w vf21, vf21, vf17 - vu.vf21.add(Mask::w, vu.vf21, vu.vf17.x()); - L36: -// BRANCH! - // ibne vi05, vi10, L37 | maddw.xyzw vf12, vf07, vf00 - vu.acc.madd_xyzw(vu.vf12, vu.vf07, vu.vf00.w()); bc = (vu.vi05 != vu.vi10); - // ilw.x vi09, -9(vi01) | mul.xyz vf10, vf10, Q - vu.vf10.mul(Mask::xyz, vu.vf10, vu.Q); /* TODO mulq */ ilw_buffer(Mask::x, vu.vi09, vu.vi01 + -9); - if (bc) { goto L37; } - - - // mtir vi10, vf11.x | mul.xyzw vf16, vf16, Q - vu.vf16.mul_xyzw(vu.vf16, vu.Q); /* TODO mulq */ vu.vi10 = vu.vf11.x_as_u16(); - // mtir vi13, vf11.y | ftoi4.xyzw vf21, vf21 - vu.vf21.ftoi4(Mask::xyzw, vu.vf21); vu.vi13 = vu.vf11.y_as_u16(); -// BRANCH! - // b L38 | mul.xyzw vf12, vf12, vf23 - vu.vf12.mul_xyzw(vu.vf12, vu.vf23); bc = true; - // lqi.xyzw vf23, vi03 | add.xyzw vf10, vf10, vf22 - vu.vf10.add_xyzw(vu.vf10, vu.vf22); lq_buffer_xyzw(vu.vf23, vu.vi03++); - if (bc) { goto L38; } - - - L37: - // lq.xyzw vf20, 0(vi10) | mul.xyzw vf16, vf16, Q - vu.vf16.mul_xyzw(vu.vf16, vu.Q); /* TODO mulq */ lq_buffer_xyzw(vu.vf20, vu.vi10); - // nop | mulw.xyzw vf24, vf24, vf29 - vu.vf24.mul_xyzw(vu.vf24, vu.vf29.w()); - // lq.xyzw vf25, 0(vi13) | ftoi4.xyzw vf21, vf21 - vu.vf21.ftoi4(Mask::xyzw, vu.vf21); lq_buffer_xyzw(vu.vf25, vu.vi13); - // lq.xyzw vf23, 1(vi10) | mul.xyzw vf12, vf12, vf23 - vu.vf12.mul_xyzw(vu.vf12, vu.vf23); lq_buffer_xyzw(vu.vf23, vu.vi10 + 1); - // lq.xyzw vf26, 1(vi13) | add.xyzw vf10, vf10, vf22 - vu.vf10.add_xyzw(vu.vf10, vu.vf22); lq_buffer_xyzw(vu.vf26, vu.vi13 + 1); - // lq.xyzw vf20, 2(vi10) | mulax.xyzw ACC, vf20, vf24 - vu.acc.mula_xyzw(vu.vf20, vu.vf24.x()); lq_buffer_xyzw(vu.vf20, vu.vi10 + 2); - // lq.xyzw vf27, 2(vi13) | maddy.xyzw vf25, vf25, vf24 - vu.acc.madd_xyzw(vu.vf25, vu.vf25, vu.vf24.y()); lq_buffer_xyzw(vu.vf27, vu.vi13 + 2); - // lq.xyzw vf23, 3(vi10) | mulax.xyzw ACC, vf23, vf24 - vu.acc.mula_xyzw(vu.vf23, vu.vf24.x()); lq_buffer_xyzw(vu.vf23, vu.vi10 + 3); - // lq.xyzw vf28, 3(vi13) | maddy.xyzw vf26, vf26, vf24 - vu.acc.madd_xyzw(vu.vf26, vu.vf26, vu.vf24.y()); lq_buffer_xyzw(vu.vf28, vu.vi13 + 3); - // lq.xyzw vf20, 4(vi10) | mulax.xyzw ACC, vf20, vf24 - vu.acc.mula_xyzw(vu.vf20, vu.vf24.x()); lq_buffer_xyzw(vu.vf20, vu.vi10 + 4); - // lq.xyz vf29, 4(vi13) | maddy.xyzw vf27, vf27, vf24 - vu.acc.madd_xyzw(vu.vf27, vu.vf27, vu.vf24.y()); lq_buffer_xyz(vu.vf29, vu.vi13 + 4); - // lq.xyzw vf23, 5(vi10) | mulax.xyzw ACC, vf23, vf24 - vu.acc.mula_xyzw(vu.vf23, vu.vf24.x()); lq_buffer_xyzw(vu.vf23, vu.vi10 + 5); - // lq.xyz vf30, 5(vi13) | maddy.xyzw vf28, vf28, vf24 - vu.acc.madd_xyzw(vu.vf28, vu.vf28, vu.vf24.y()); lq_buffer_xyz(vu.vf30, vu.vi13 + 5); - // lq.xyzw vf20, 6(vi10) | mulax.xyzw ACC, vf20, vf24 - vu.acc.mula_xyzw(vu.vf20, vu.vf24.x()); lq_buffer_xyzw(vu.vf20, vu.vi10 + 6); - // lq.xyzw vf31, 6(vi13) | maddy.xyz vf29, vf29, vf24 - vu.acc.madd_xyz(vu.vf29, vu.vf29, vu.vf24.y()); lq_buffer_xyzw(vu.vf31, vu.vi13 + 6); - // mtir vi10, vf11.x | mulax.xyzw ACC, vf23, vf24 - vu.acc.mula_xyzw(vu.vf23, vu.vf24.x()); vu.vi10 = vu.vf11.x_as_u16(); - // mtir vi13, vf11.y | maddy.xyz vf30, vf30, vf24 - vu.acc.madd_xyz(vu.vf30, vu.vf30, vu.vf24.y()); vu.vi13 = vu.vf11.y_as_u16(); -// BRANCH! - // b L54 | mulax.xyzw ACC, vf20, vf24 - vu.acc.mula_xyzw(vu.vf20, vu.vf24.x()); bc = true; - // lqi.xyzw vf23, vi03 | maddy.xyzw vf31, vf31, vf24 - vu.acc.madd_xyzw(vu.vf31, vu.vf31, vu.vf24.y()); lq_buffer_xyzw(vu.vf23, vu.vi03++); - if (bc) { goto L54; } - - - L38: -// BRANCH! - // ibgez vi09, L39 | mulaz.xyzw ACC, vf29, vf08 - vu.acc.mula_xyzw(vu.vf29, vu.vf08.z()); bc = ((s16)vu.vi09) >= 0; - // sq.xyzw vf21, 2(vi11) | maddaz.xyzw ACC, vf30, vf11 - vu.acc.madda_xyzw(vu.vf30, vu.vf11.z()); sq_buffer_xyzw(vu.vf21, vu.vi11 + 2); - if (bc) { goto L39; } - - - // nop | ftoi4.xyzw vf21, vf09 - vu.vf21.ftoi4(Mask::xyzw, vu.vf09); - L39: - // mfp.w vf20, P | maddz.xyz vf11, vf31, vf14 - vu.acc.madd_xyz(vu.vf11, vu.vf31, vu.vf14.z()); vu.vf20.mfp(Mask::w, vu.P); - // sq.xyzw vf15, 0(vi11) | miniy.xyzw vf12, vf12, vf17 - vu.vf12.mini_xyzw(vu.vf12, vu.vf17.y()); sq_buffer_xyzw(vu.vf15, vu.vi11); - // sq.xyzw vf15, 0(vi14) | miniw.w vf10, vf10, vf03 - vu.vf10.mini(Mask::w, vu.vf10, vu.vf03.w()); sq_buffer_xyzw(vu.vf15, vu.vi14); - // sq.xyzw vf21, 2(vi14) | mulaw.xyzw ACC, vf25, vf08 - vu.acc.mula_xyzw(vu.vf25, vu.vf08.w()); sq_buffer_xyzw(vu.vf21, vu.vi14 + 2); - // ilw.y vi09, -6(vi01) | mulw.xyzw vf13, vf13, vf20 - vu.vf13.mul_xyzw(vu.vf13, vu.vf20.w()); ilw_buffer(Mask::y, vu.vi09, vu.vi01 + -6); - // erleng.xyz P, vf11 | ftoi0.xyzw vf12, vf12 - vu.vf12.ftoi0(Mask::xyzw, vu.vf12); vu.P = erleng(vu.vf11); /* TODO erleng */ -// BRANCH! - // ibne vi06, vi03, L40 | maddaw.xyzw ACC, vf26, vf11 - vu.acc.madda_xyzw(vu.vf26, vu.vf11.w()); bc = (vu.vi06 != vu.vi03); - // mr32.z vf14, vf00 | maddw.xyzw vf08, vf27, vf14 - vu.acc.madd_xyzw(vu.vf08, vu.vf27, vu.vf14.w()); vu.vf14.z() = 1.f; - if (bc) { goto L40; } - - -// BRANCH! - // ibne vi07, vi03, L77 | nop - bc = (vu.vi07 != vu.vi03); - // nop | nop - - if (bc) { goto L77; } - - -// BRANCH! - // b L153 | nop - bc = true; - // nop | nop - - if (bc) { goto L153; } - - - L40: - // lqi.xyzw vf09, vi01 | mulax.xyzw ACC, vf01, vf13 - vu.acc.mula_xyzw(vu.vf01, vu.vf13.x()); lq_buffer_xyzw(vu.vf09, vu.vi01++); - // sq.xyzw vf12, 1(vi11) | madday.xyzw ACC, vf02, vf13 - vu.acc.madda_xyzw(vu.vf02, vu.vf13.y()); sq_buffer_xyzw(vu.vf12, vu.vi11 + 1); - // sq.xyzw vf12, 1(vi14) | maddz.xyzw vf13, vf03, vf13 - vu.acc.madd_xyzw(vu.vf13, vu.vf03, vu.vf13.z()); sq_buffer_xyzw(vu.vf12, vu.vi14 + 1); - // lqi.xyzw vf12, vi01 | add.xyzw vf08, vf08, vf28 - vu.vf08.add_xyzw(vu.vf08, vu.vf28); lq_buffer_xyzw(vu.vf12, vu.vi01++); - // lqi.xyzw vf15, vi01 | maxw.w vf10, vf10, vf02 - vu.vf10.max(Mask::w, vu.vf10, vu.vf02.w()); lq_buffer_xyzw(vu.vf15, vu.vi01++); - // mtir vi11, vf09.x | itof0.xyzw vf23, vf23 - vu.vf23.itof0(Mask::xyzw, vu.vf23); vu.vi11 = vu.vf09.x_as_u16(); - // mtir vi14, vf09.y | maxx.xyzw vf13, vf13, vf00 - vu.vf13.max_xyzw(vu.vf13, vu.vf00.x()); vu.vi14 = vu.vf09.y_as_u16(); - // div Q, vf01.w, vf08.w | add.zw vf09, vf09, vf17 - vu.vf09.add(Mask::zw, vu.vf09, vu.vf17); vu.Q = vu.vf01.w() / vu.vf08.w(); - - // move.xyzw vf21, vf10 | add.xyzw vf12, vf12, vf18 - vu.vf12.add_xyzw(vu.vf12, vu.vf18); vu.vf21.move_xyzw(vu.vf10); - // iand vi11, vi11, vi05 | add.xyzw vf15, vf15, vf19 - vu.vf15.add_xyzw(vu.vf15, vu.vf19); vu.vi11 = vu.vi11 & vu.vi05; - // nop | mulax.xyzw ACC, vf04, vf13 - vu.acc.mula_xyzw(vu.vf04, vu.vf13.x()); -// BRANCH! - // ibgtz vi09, L41 | madday.xyzw ACC, vf05, vf13 - vu.acc.madda_xyzw(vu.vf05, vu.vf13.y()); bc = ((s16)vu.vi09) > 0; - // iand vi14, vi14, vi05 | maddaz.xyzw ACC, vf06, vf13 - vu.acc.madda_xyzw(vu.vf06, vu.vf13.z()); vu.vi14 = vu.vi14 & vu.vi05; - if (bc) { goto L41; } - - - // nop | addx.w vf21, vf21, vf17 - vu.vf21.add(Mask::w, vu.vf21, vu.vf17.x()); - L41: -// BRANCH! - // ibne vi05, vi11, L42 | maddw.xyzw vf13, vf07, vf00 - vu.acc.madd_xyzw(vu.vf13, vu.vf07, vu.vf00.w()); bc = (vu.vi05 != vu.vi11); - // ilw.x vi09, -9(vi01) | mul.xyz vf08, vf08, Q - vu.vf08.mul(Mask::xyz, vu.vf08, vu.Q); /* TODO mulq */ ilw_buffer(Mask::x, vu.vi09, vu.vi01 + -9); - if (bc) { goto L42; } - - - // mtir vi11, vf12.x | mul.xyzw vf14, vf14, Q - vu.vf14.mul_xyzw(vu.vf14, vu.Q); /* TODO mulq */ vu.vi11 = vu.vf12.x_as_u16(); - // mtir vi14, vf12.y | ftoi4.xyzw vf21, vf21 - vu.vf21.ftoi4(Mask::xyzw, vu.vf21); vu.vi14 = vu.vf12.y_as_u16(); -// BRANCH! - // b L43 | mul.xyzw vf13, vf13, vf23 - vu.vf13.mul_xyzw(vu.vf13, vu.vf23); bc = true; - // lqi.xyzw vf23, vi03 | add.xyzw vf08, vf08, vf22 - vu.vf08.add_xyzw(vu.vf08, vu.vf22); lq_buffer_xyzw(vu.vf23, vu.vi03++); - if (bc) { goto L43; } - - - L42: - // lq.xyzw vf20, 0(vi11) | mul.xyzw vf14, vf14, Q - vu.vf14.mul_xyzw(vu.vf14, vu.Q); /* TODO mulq */ lq_buffer_xyzw(vu.vf20, vu.vi11); - // nop | mulw.xyzw vf24, vf24, vf29 - vu.vf24.mul_xyzw(vu.vf24, vu.vf29.w()); - // lq.xyzw vf25, 0(vi14) | ftoi4.xyzw vf21, vf21 - vu.vf21.ftoi4(Mask::xyzw, vu.vf21); lq_buffer_xyzw(vu.vf25, vu.vi14); - // lq.xyzw vf23, 1(vi11) | mul.xyzw vf13, vf13, vf23 - vu.vf13.mul_xyzw(vu.vf13, vu.vf23); lq_buffer_xyzw(vu.vf23, vu.vi11 + 1); - // lq.xyzw vf26, 1(vi14) | add.xyzw vf08, vf08, vf22 - vu.vf08.add_xyzw(vu.vf08, vu.vf22); lq_buffer_xyzw(vu.vf26, vu.vi14 + 1); - // lq.xyzw vf20, 2(vi11) | mulax.xyzw ACC, vf20, vf24 - vu.acc.mula_xyzw(vu.vf20, vu.vf24.x()); lq_buffer_xyzw(vu.vf20, vu.vi11 + 2); - // lq.xyzw vf27, 2(vi14) | maddy.xyzw vf25, vf25, vf24 - vu.acc.madd_xyzw(vu.vf25, vu.vf25, vu.vf24.y()); lq_buffer_xyzw(vu.vf27, vu.vi14 + 2); - // lq.xyzw vf23, 3(vi11) | mulax.xyzw ACC, vf23, vf24 - vu.acc.mula_xyzw(vu.vf23, vu.vf24.x()); lq_buffer_xyzw(vu.vf23, vu.vi11 + 3); - // lq.xyzw vf28, 3(vi14) | maddy.xyzw vf26, vf26, vf24 - vu.acc.madd_xyzw(vu.vf26, vu.vf26, vu.vf24.y()); lq_buffer_xyzw(vu.vf28, vu.vi14 + 3); - // lq.xyzw vf20, 4(vi11) | mulax.xyzw ACC, vf20, vf24 - vu.acc.mula_xyzw(vu.vf20, vu.vf24.x()); lq_buffer_xyzw(vu.vf20, vu.vi11 + 4); - // lq.xyz vf29, 4(vi14) | maddy.xyzw vf27, vf27, vf24 - vu.acc.madd_xyzw(vu.vf27, vu.vf27, vu.vf24.y()); lq_buffer_xyz(vu.vf29, vu.vi14 + 4); - // lq.xyzw vf23, 5(vi11) | mulax.xyzw ACC, vf23, vf24 - vu.acc.mula_xyzw(vu.vf23, vu.vf24.x()); lq_buffer_xyzw(vu.vf23, vu.vi11 + 5); - // lq.xyz vf30, 5(vi14) | maddy.xyzw vf28, vf28, vf24 - vu.acc.madd_xyzw(vu.vf28, vu.vf28, vu.vf24.y()); lq_buffer_xyz(vu.vf30, vu.vi14 + 5); - // lq.xyzw vf20, 6(vi11) | mulax.xyzw ACC, vf20, vf24 - vu.acc.mula_xyzw(vu.vf20, vu.vf24.x()); lq_buffer_xyzw(vu.vf20, vu.vi11 + 6); - // lq.xyzw vf31, 6(vi14) | maddy.xyz vf29, vf29, vf24 - vu.acc.madd_xyz(vu.vf29, vu.vf29, vu.vf24.y()); lq_buffer_xyzw(vu.vf31, vu.vi14 + 6); - // mtir vi11, vf12.x | mulax.xyzw ACC, vf23, vf24 - vu.acc.mula_xyzw(vu.vf23, vu.vf24.x()); vu.vi11 = vu.vf12.x_as_u16(); - // mtir vi14, vf12.y | maddy.xyz vf30, vf30, vf24 - vu.acc.madd_xyz(vu.vf30, vu.vf30, vu.vf24.y()); vu.vi14 = vu.vf12.y_as_u16(); -// BRANCH! - // b L59 | mulax.xyzw ACC, vf20, vf24 - vu.acc.mula_xyzw(vu.vf20, vu.vf24.x()); bc = true; - // lqi.xyzw vf23, vi03 | maddy.xyzw vf31, vf31, vf24 - vu.acc.madd_xyzw(vu.vf31, vu.vf31, vu.vf24.y()); lq_buffer_xyzw(vu.vf23, vu.vi03++); - if (bc) { goto L59; } - - - L43: -// BRANCH! - // ibgez vi09, L44 | mulaz.xyzw ACC, vf29, vf09 - vu.acc.mula_xyzw(vu.vf29, vu.vf09.z()); bc = ((s16)vu.vi09) >= 0; - // sq.xyzw vf21, 2(vi12) | maddaz.xyzw ACC, vf30, vf12 - vu.acc.madda_xyzw(vu.vf30, vu.vf12.z()); sq_buffer_xyzw(vu.vf21, vu.vi12 + 2); - if (bc) { goto L44; } - - - // nop | ftoi4.xyzw vf21, vf10 - vu.vf21.ftoi4(Mask::xyzw, vu.vf10); - L44: - // mfp.w vf20, P | maddz.xyz vf12, vf31, vf15 - vu.acc.madd_xyz(vu.vf12, vu.vf31, vu.vf15.z()); vu.vf20.mfp(Mask::w, vu.P); - // sq.xyzw vf16, 0(vi12) | miniy.xyzw vf13, vf13, vf17 - vu.vf13.mini_xyzw(vu.vf13, vu.vf17.y()); sq_buffer_xyzw(vu.vf16, vu.vi12); - // sq.xyzw vf16, 0(vi15) | miniw.w vf08, vf08, vf03 - vu.vf08.mini(Mask::w, vu.vf08, vu.vf03.w()); sq_buffer_xyzw(vu.vf16, vu.vi15); - // sq.xyzw vf21, 2(vi15) | mulaw.xyzw ACC, vf25, vf09 - vu.acc.mula_xyzw(vu.vf25, vu.vf09.w()); sq_buffer_xyzw(vu.vf21, vu.vi15 + 2); - // ilw.y vi09, -6(vi01) | mulw.xyzw vf11, vf11, vf20 - vu.vf11.mul_xyzw(vu.vf11, vu.vf20.w()); ilw_buffer(Mask::y, vu.vi09, vu.vi01 + -6); - // erleng.xyz P, vf12 | ftoi0.xyzw vf13, vf13 - vu.vf13.ftoi0(Mask::xyzw, vu.vf13); vu.P = erleng(vu.vf12); /* TODO erleng */ -// BRANCH! - // ibne vi06, vi03, L29 | maddaw.xyzw ACC, vf26, vf12 - vu.acc.madda_xyzw(vu.vf26, vu.vf12.w()); bc = (vu.vi06 != vu.vi03); - // mr32.z vf15, vf00 | maddw.xyzw vf09, vf27, vf15 - vu.acc.madd_xyzw(vu.vf09, vu.vf27, vu.vf15.w()); vu.vf15.z() = 1.f; - if (bc) { goto L29; } - - -// BRANCH! - // ibne vi07, vi03, L66 | nop - bc = (vu.vi07 != vu.vi03); - // nop | nop - - if (bc) { goto L66; } - - -// BRANCH! - // b L163 | nop - bc = true; - // nop | nop - - if (bc) { goto L163; } - - - L45: - // lqi.xyzw vf10, vi01 | mulax.xyzw ACC, vf01, vf11 - vu.acc.mula_xyzw(vu.vf01, vu.vf11.x()); lq_buffer_xyzw(vu.vf10, vu.vi01++); - // sq.xyzw vf13, 1(vi12) | madday.xyzw ACC, vf02, vf11 - vu.acc.madda_xyzw(vu.vf02, vu.vf11.y()); sq_buffer_xyzw(vu.vf13, vu.vi12 + 1); - // sq.xyzw vf13, 1(vi15) | maddz.xyzw vf11, vf03, vf11 - vu.acc.madd_xyzw(vu.vf11, vu.vf03, vu.vf11.z()); sq_buffer_xyzw(vu.vf13, vu.vi15 + 1); - JUMP_243: - // lqi.xyzw vf13, vi01 | add.xyzw vf09, vf09, vf28 - vu.vf09.add_xyzw(vu.vf09, vu.vf28); lq_buffer_xyzw(vu.vf13, vu.vi01++); - // lqi.xyzw vf16, vi01 | maxw.w vf08, vf08, vf02 - vu.vf08.max(Mask::w, vu.vf08, vu.vf02.w()); lq_buffer_xyzw(vu.vf16, vu.vi01++); - // mtir vi12, vf10.x | itof0.xyzw vf23, vf23 - vu.vf23.itof0(Mask::xyzw, vu.vf23); vu.vi12 = vu.vf10.x_as_u16(); - // mtir vi15, vf10.y | maxx.xyzw vf11, vf11, vf00 - vu.vf11.max_xyzw(vu.vf11, vu.vf00.x()); vu.vi15 = vu.vf10.y_as_u16(); - // div Q, vf01.w, vf09.w | add.zw vf10, vf10, vf17 - vu.vf10.add(Mask::zw, vu.vf10, vu.vf17); vu.Q = vu.vf01.w() / vu.vf09.w(); - - // move.xyzw vf21, vf08 | add.xyzw vf13, vf13, vf18 - vu.vf13.add_xyzw(vu.vf13, vu.vf18); vu.vf21.move_xyzw(vu.vf08); - // iand vi12, vi12, vi05 | add.xyzw vf16, vf16, vf19 - vu.vf16.add_xyzw(vu.vf16, vu.vf19); vu.vi12 = vu.vi12 & vu.vi05; - // nop | mulax.xyzw ACC, vf04, vf11 - vu.acc.mula_xyzw(vu.vf04, vu.vf11.x()); -// BRANCH! - // ibgtz vi09, L47 | madday.xyzw ACC, vf05, vf11 - vu.acc.madda_xyzw(vu.vf05, vu.vf11.y()); bc = ((s16)vu.vi09) > 0; - // iand vi15, vi15, vi05 | maddaz.xyzw ACC, vf06, vf11 - vu.acc.madda_xyzw(vu.vf06, vu.vf11.z()); vu.vi15 = vu.vi15 & vu.vi05; - if (bc) { goto L47; } - - - // nop | addx.w vf21, vf21, vf17 - vu.vf21.add(Mask::w, vu.vf21, vu.vf17.x()); - L47: -// BRANCH! - // ibne vi05, vi12, L48 | maddw.xyzw vf11, vf07, vf00 - vu.acc.madd_xyzw(vu.vf11, vu.vf07, vu.vf00.w()); bc = (vu.vi05 != vu.vi12); - // ilw.x vi09, -9(vi01) | mul.xyz vf09, vf09, Q - vu.vf09.mul(Mask::xyz, vu.vf09, vu.Q); /* TODO mulq */ ilw_buffer(Mask::x, vu.vi09, vu.vi01 + -9); - if (bc) { goto L48; } - - - // mtir vi12, vf13.x | mul.xyzw vf15, vf15, Q - vu.vf15.mul_xyzw(vu.vf15, vu.Q); /* TODO mulq */ vu.vi12 = vu.vf13.x_as_u16(); - // mtir vi15, vf13.y | ftoi4.xyzw vf21, vf21 - vu.vf21.ftoi4(Mask::xyzw, vu.vf21); vu.vi15 = vu.vf13.y_as_u16(); -// BRANCH! - // b L49 | mul.xyzw vf11, vf11, vf23 - vu.vf11.mul_xyzw(vu.vf11, vu.vf23); bc = true; - // lqi.xyzw vf23, vi03 | add.xyzw vf09, vf09, vf22 - vu.vf09.add_xyzw(vu.vf09, vu.vf22); lq_buffer_xyzw(vu.vf23, vu.vi03++); - if (bc) { goto L49; } - - - L48: - // lq.xyzw vf20, 0(vi12) | mul.xyzw vf15, vf15, Q - vu.vf15.mul_xyzw(vu.vf15, vu.Q); /* TODO mulq */ lq_buffer_xyzw(vu.vf20, vu.vi12); - // lq.xyzw vf25, 0(vi15) | ftoi4.xyzw vf21, vf21 - vu.vf21.ftoi4(Mask::xyzw, vu.vf21); lq_buffer_xyzw(vu.vf25, vu.vi15); - // lq.xyzw vf23, 1(vi12) | mul.xyzw vf11, vf11, vf23 - vu.vf11.mul_xyzw(vu.vf11, vu.vf23); lq_buffer_xyzw(vu.vf23, vu.vi12 + 1); - // lq.xyzw vf26, 1(vi15) | add.xyzw vf09, vf09, vf22 - vu.vf09.add_xyzw(vu.vf09, vu.vf22); lq_buffer_xyzw(vu.vf26, vu.vi15 + 1); - // lq.xyzw vf20, 2(vi12) | mulaz.xyzw ACC, vf20, vf24 - vu.acc.mula_xyzw(vu.vf20, vu.vf24.z()); lq_buffer_xyzw(vu.vf20, vu.vi12 + 2); - // lq.xyzw vf27, 2(vi15) | maddw.xyzw vf25, vf25, vf24 - vu.acc.madd_xyzw(vu.vf25, vu.vf25, vu.vf24.w()); lq_buffer_xyzw(vu.vf27, vu.vi15 + 2); - // lq.xyzw vf23, 3(vi12) | mulaz.xyzw ACC, vf23, vf24 - vu.acc.mula_xyzw(vu.vf23, vu.vf24.z()); lq_buffer_xyzw(vu.vf23, vu.vi12 + 3); - // lq.xyzw vf28, 3(vi15) | maddw.xyzw vf26, vf26, vf24 - vu.acc.madd_xyzw(vu.vf26, vu.vf26, vu.vf24.w()); lq_buffer_xyzw(vu.vf28, vu.vi15 + 3); - // lq.xyzw vf20, 4(vi12) | mulaz.xyzw ACC, vf20, vf24 - vu.acc.mula_xyzw(vu.vf20, vu.vf24.z()); lq_buffer_xyzw(vu.vf20, vu.vi12 + 4); - // lq.xyz vf29, 4(vi15) | maddw.xyzw vf27, vf27, vf24 - vu.acc.madd_xyzw(vu.vf27, vu.vf27, vu.vf24.w()); lq_buffer_xyz(vu.vf29, vu.vi15 + 4); - // lq.xyzw vf23, 5(vi12) | mulaz.xyzw ACC, vf23, vf24 - vu.acc.mula_xyzw(vu.vf23, vu.vf24.z()); lq_buffer_xyzw(vu.vf23, vu.vi12 + 5); - // lq.xyz vf30, 5(vi15) | maddw.xyzw vf28, vf28, vf24 - vu.acc.madd_xyzw(vu.vf28, vu.vf28, vu.vf24.w()); lq_buffer_xyz(vu.vf30, vu.vi15 + 5); - // lq.xyzw vf20, 6(vi12) | mulaz.xyzw ACC, vf20, vf24 - vu.acc.mula_xyzw(vu.vf20, vu.vf24.z()); lq_buffer_xyzw(vu.vf20, vu.vi12 + 6); - // lq.xyzw vf31, 6(vi15) | maddw.xyz vf29, vf29, vf24 - vu.acc.madd_xyz(vu.vf29, vu.vf29, vu.vf24.w()); lq_buffer_xyzw(vu.vf31, vu.vi15 + 6); - // lqi.xyzw vf23, vi02 | mulaz.xyzw ACC, vf23, vf24 - vu.acc.mula_xyzw(vu.vf23, vu.vf24.z()); lq_buffer_xyzw(vu.vf23, vu.vi02++); - // mtir vi12, vf13.x | maddw.xyz vf30, vf30, vf24 - vu.acc.madd_xyz(vu.vf30, vu.vf30, vu.vf24.w()); vu.vi12 = vu.vf13.x_as_u16(); - // mtir vi15, vf13.y | mulaz.xyzw ACC, vf20, vf24 - vu.acc.mula_xyzw(vu.vf20, vu.vf24.z()); vu.vi15 = vu.vf13.y_as_u16(); -// BRANCH! - // b L33 | maddw.xyzw vf31, vf31, vf24 - vu.acc.madd_xyzw(vu.vf31, vu.vf31, vu.vf24.w()); bc = true; - // lqi.xyzw vf23, vi03 | itof0.xyzw vf24, vf23 - vu.vf24.itof0(Mask::xyzw, vu.vf23); lq_buffer_xyzw(vu.vf23, vu.vi03++); - if (bc) { goto L33; } - - - L49: -// BRANCH! - // ibgez vi09, L50 | mulaz.xyzw ACC, vf29, vf10 - vu.acc.mula_xyzw(vu.vf29, vu.vf10.z()); bc = ((s16)vu.vi09) >= 0; - // sq.xyzw vf21, 2(vi10) | maddaz.xyzw ACC, vf30, vf13 - vu.acc.madda_xyzw(vu.vf30, vu.vf13.z()); sq_buffer_xyzw(vu.vf21, vu.vi10 + 2); - if (bc) { goto L50; } - - - // nop | ftoi4.xyzw vf21, vf08 - vu.vf21.ftoi4(Mask::xyzw, vu.vf08); - L50: - // mfp.w vf20, P | maddz.xyz vf13, vf31, vf16 - vu.acc.madd_xyz(vu.vf13, vu.vf31, vu.vf16.z()); vu.vf20.mfp(Mask::w, vu.P); - // sq.xyzw vf14, 0(vi10) | miniy.xyzw vf11, vf11, vf17 - vu.vf11.mini_xyzw(vu.vf11, vu.vf17.y()); sq_buffer_xyzw(vu.vf14, vu.vi10); - // sq.xyzw vf14, 0(vi13) | miniw.w vf09, vf09, vf03 - vu.vf09.mini(Mask::w, vu.vf09, vu.vf03.w()); sq_buffer_xyzw(vu.vf14, vu.vi13); - // sq.xyzw vf21, 2(vi13) | mulaw.xyzw ACC, vf25, vf10 - vu.acc.mula_xyzw(vu.vf25, vu.vf10.w()); sq_buffer_xyzw(vu.vf21, vu.vi13 + 2); - // ilw.y vi09, -6(vi01) | mulw.xyzw vf12, vf12, vf20 - vu.vf12.mul_xyzw(vu.vf12, vu.vf20.w()); ilw_buffer(Mask::y, vu.vi09, vu.vi01 + -6); - // erleng.xyz P, vf13 | ftoi0.xyzw vf11, vf11 - vu.vf11.ftoi0(Mask::xyzw, vu.vf11); vu.P = erleng(vu.vf13); /* TODO erleng */ -// BRANCH! - // ibne vi06, vi03, L51 | maddaw.xyzw ACC, vf26, vf13 - vu.acc.madda_xyzw(vu.vf26, vu.vf13.w()); bc = (vu.vi06 != vu.vi03); - // mr32.z vf16, vf00 | maddw.xyzw vf10, vf27, vf16 - vu.acc.madd_xyzw(vu.vf10, vu.vf27, vu.vf16.w()); vu.vf16.z() = 1.f; - if (bc) { goto L51; } - - -// BRANCH! - // ibne vi07, vi03, L72 | nop - bc = (vu.vi07 != vu.vi03); - // nop | nop - - if (bc) { goto L72; } - - -// BRANCH! - // b L143 | nop - bc = true; - // nop | nop - - if (bc) { goto L143; } - - - L51: - // lqi.xyzw vf08, vi01 | mulax.xyzw ACC, vf01, vf12 - vu.acc.mula_xyzw(vu.vf01, vu.vf12.x()); lq_buffer_xyzw(vu.vf08, vu.vi01++); - // sq.xyzw vf11, 1(vi10) | madday.xyzw ACC, vf02, vf12 - vu.acc.madda_xyzw(vu.vf02, vu.vf12.y()); sq_buffer_xyzw(vu.vf11, vu.vi10 + 1); - // sq.xyzw vf11, 1(vi13) | maddz.xyzw vf12, vf03, vf12 - vu.acc.madd_xyzw(vu.vf12, vu.vf03, vu.vf12.z()); sq_buffer_xyzw(vu.vf11, vu.vi13 + 1); - // lqi.xyzw vf11, vi01 | add.xyzw vf10, vf10, vf28 - vu.vf10.add_xyzw(vu.vf10, vu.vf28); lq_buffer_xyzw(vu.vf11, vu.vi01++); - // lqi.xyzw vf14, vi01 | maxw.w vf09, vf09, vf02 - vu.vf09.max(Mask::w, vu.vf09, vu.vf02.w()); lq_buffer_xyzw(vu.vf14, vu.vi01++); - // mtir vi10, vf08.x | itof0.xyzw vf23, vf23 - vu.vf23.itof0(Mask::xyzw, vu.vf23); vu.vi10 = vu.vf08.x_as_u16(); - // mtir vi13, vf08.y | maxx.xyzw vf12, vf12, vf00 - vu.vf12.max_xyzw(vu.vf12, vu.vf00.x()); vu.vi13 = vu.vf08.y_as_u16(); - // div Q, vf01.w, vf10.w | add.zw vf08, vf08, vf17 - vu.vf08.add(Mask::zw, vu.vf08, vu.vf17); vu.Q = vu.vf01.w() / vu.vf10.w(); - - // move.xyzw vf21, vf09 | add.xyzw vf11, vf11, vf18 - vu.vf11.add_xyzw(vu.vf11, vu.vf18); vu.vf21.move_xyzw(vu.vf09); - // iand vi10, vi10, vi05 | add.xyzw vf14, vf14, vf19 - vu.vf14.add_xyzw(vu.vf14, vu.vf19); vu.vi10 = vu.vi10 & vu.vi05; - // nop | mulax.xyzw ACC, vf04, vf12 - vu.acc.mula_xyzw(vu.vf04, vu.vf12.x()); -// BRANCH! - // ibgtz vi09, L52 | madday.xyzw ACC, vf05, vf12 - vu.acc.madda_xyzw(vu.vf05, vu.vf12.y()); bc = ((s16)vu.vi09) > 0; - // iand vi13, vi13, vi05 | maddaz.xyzw ACC, vf06, vf12 - vu.acc.madda_xyzw(vu.vf06, vu.vf12.z()); vu.vi13 = vu.vi13 & vu.vi05; - if (bc) { goto L52; } - - - // nop | addx.w vf21, vf21, vf17 - vu.vf21.add(Mask::w, vu.vf21, vu.vf17.x()); - L52: -// BRANCH! - // ibne vi05, vi10, L53 | maddw.xyzw vf12, vf07, vf00 - vu.acc.madd_xyzw(vu.vf12, vu.vf07, vu.vf00.w()); bc = (vu.vi05 != vu.vi10); - // ilw.x vi09, -9(vi01) | mul.xyz vf10, vf10, Q - vu.vf10.mul(Mask::xyz, vu.vf10, vu.Q); /* TODO mulq */ ilw_buffer(Mask::x, vu.vi09, vu.vi01 + -9); - if (bc) { goto L53; } - - - // mtir vi10, vf11.x | mul.xyzw vf16, vf16, Q - vu.vf16.mul_xyzw(vu.vf16, vu.Q); /* TODO mulq */ vu.vi10 = vu.vf11.x_as_u16(); - // mtir vi13, vf11.y | ftoi4.xyzw vf21, vf21 - vu.vf21.ftoi4(Mask::xyzw, vu.vf21); vu.vi13 = vu.vf11.y_as_u16(); -// BRANCH! - // b L54 | mul.xyzw vf12, vf12, vf23 - vu.vf12.mul_xyzw(vu.vf12, vu.vf23); bc = true; - // lqi.xyzw vf23, vi03 | add.xyzw vf10, vf10, vf22 - vu.vf10.add_xyzw(vu.vf10, vu.vf22); lq_buffer_xyzw(vu.vf23, vu.vi03++); - if (bc) { goto L54; } - - - L53: - // lq.xyzw vf20, 0(vi10) | mul.xyzw vf16, vf16, Q - vu.vf16.mul_xyzw(vu.vf16, vu.Q); /* TODO mulq */ lq_buffer_xyzw(vu.vf20, vu.vi10); - // lq.xyzw vf25, 0(vi13) | ftoi4.xyzw vf21, vf21 - vu.vf21.ftoi4(Mask::xyzw, vu.vf21); lq_buffer_xyzw(vu.vf25, vu.vi13); - // lq.xyzw vf23, 1(vi10) | mul.xyzw vf12, vf12, vf23 - vu.vf12.mul_xyzw(vu.vf12, vu.vf23); lq_buffer_xyzw(vu.vf23, vu.vi10 + 1); - // lq.xyzw vf26, 1(vi13) | add.xyzw vf10, vf10, vf22 - vu.vf10.add_xyzw(vu.vf10, vu.vf22); lq_buffer_xyzw(vu.vf26, vu.vi13 + 1); - // lq.xyzw vf20, 2(vi10) | mulaz.xyzw ACC, vf20, vf24 - vu.acc.mula_xyzw(vu.vf20, vu.vf24.z()); lq_buffer_xyzw(vu.vf20, vu.vi10 + 2); - // lq.xyzw vf27, 2(vi13) | maddw.xyzw vf25, vf25, vf24 - vu.acc.madd_xyzw(vu.vf25, vu.vf25, vu.vf24.w()); lq_buffer_xyzw(vu.vf27, vu.vi13 + 2); - // lq.xyzw vf23, 3(vi10) | mulaz.xyzw ACC, vf23, vf24 - vu.acc.mula_xyzw(vu.vf23, vu.vf24.z()); lq_buffer_xyzw(vu.vf23, vu.vi10 + 3); - // lq.xyzw vf28, 3(vi13) | maddw.xyzw vf26, vf26, vf24 - vu.acc.madd_xyzw(vu.vf26, vu.vf26, vu.vf24.w()); lq_buffer_xyzw(vu.vf28, vu.vi13 + 3); - // lq.xyzw vf20, 4(vi10) | mulaz.xyzw ACC, vf20, vf24 - vu.acc.mula_xyzw(vu.vf20, vu.vf24.z()); lq_buffer_xyzw(vu.vf20, vu.vi10 + 4); - // lq.xyz vf29, 4(vi13) | maddw.xyzw vf27, vf27, vf24 - vu.acc.madd_xyzw(vu.vf27, vu.vf27, vu.vf24.w()); lq_buffer_xyz(vu.vf29, vu.vi13 + 4); - // lq.xyzw vf23, 5(vi10) | mulaz.xyzw ACC, vf23, vf24 - vu.acc.mula_xyzw(vu.vf23, vu.vf24.z()); lq_buffer_xyzw(vu.vf23, vu.vi10 + 5); - // lq.xyz vf30, 5(vi13) | maddw.xyzw vf28, vf28, vf24 - vu.acc.madd_xyzw(vu.vf28, vu.vf28, vu.vf24.w()); lq_buffer_xyz(vu.vf30, vu.vi13 + 5); - // lq.xyzw vf20, 6(vi10) | mulaz.xyzw ACC, vf20, vf24 - vu.acc.mula_xyzw(vu.vf20, vu.vf24.z()); lq_buffer_xyzw(vu.vf20, vu.vi10 + 6); - // lq.xyzw vf31, 6(vi13) | maddw.xyz vf29, vf29, vf24 - vu.acc.madd_xyz(vu.vf29, vu.vf29, vu.vf24.w()); lq_buffer_xyzw(vu.vf31, vu.vi13 + 6); - // lqi.xyzw vf23, vi02 | mulaz.xyzw ACC, vf23, vf24 - vu.acc.mula_xyzw(vu.vf23, vu.vf24.z()); lq_buffer_xyzw(vu.vf23, vu.vi02++); - // mtir vi10, vf11.x | maddw.xyz vf30, vf30, vf24 - vu.acc.madd_xyz(vu.vf30, vu.vf30, vu.vf24.w()); vu.vi10 = vu.vf11.x_as_u16(); - // mtir vi13, vf11.y | mulaz.xyzw ACC, vf20, vf24 - vu.acc.mula_xyzw(vu.vf20, vu.vf24.z()); vu.vi13 = vu.vf11.y_as_u16(); -// BRANCH! - // b L38 | maddw.xyzw vf31, vf31, vf24 - vu.acc.madd_xyzw(vu.vf31, vu.vf31, vu.vf24.w()); bc = true; - // lqi.xyzw vf23, vi03 | itof0.xyzw vf24, vf23 - vu.vf24.itof0(Mask::xyzw, vu.vf23); lq_buffer_xyzw(vu.vf23, vu.vi03++); - if (bc) { goto L38; } - - - L54: -// BRANCH! - // ibgez vi09, L55 | mulaz.xyzw ACC, vf29, vf08 - vu.acc.mula_xyzw(vu.vf29, vu.vf08.z()); bc = ((s16)vu.vi09) >= 0; - // sq.xyzw vf21, 2(vi11) | maddaz.xyzw ACC, vf30, vf11 - vu.acc.madda_xyzw(vu.vf30, vu.vf11.z()); sq_buffer_xyzw(vu.vf21, vu.vi11 + 2); - if (bc) { goto L55; } - - - // nop | ftoi4.xyzw vf21, vf09 - vu.vf21.ftoi4(Mask::xyzw, vu.vf09); - L55: - // mfp.w vf20, P | maddz.xyz vf11, vf31, vf14 - vu.acc.madd_xyz(vu.vf11, vu.vf31, vu.vf14.z()); vu.vf20.mfp(Mask::w, vu.P); - // sq.xyzw vf15, 0(vi11) | miniy.xyzw vf12, vf12, vf17 - vu.vf12.mini_xyzw(vu.vf12, vu.vf17.y()); sq_buffer_xyzw(vu.vf15, vu.vi11); - // sq.xyzw vf15, 0(vi14) | miniw.w vf10, vf10, vf03 - vu.vf10.mini(Mask::w, vu.vf10, vu.vf03.w()); sq_buffer_xyzw(vu.vf15, vu.vi14); - // sq.xyzw vf21, 2(vi14) | mulaw.xyzw ACC, vf25, vf08 - vu.acc.mula_xyzw(vu.vf25, vu.vf08.w()); sq_buffer_xyzw(vu.vf21, vu.vi14 + 2); - // ilw.y vi09, -6(vi01) | mulw.xyzw vf13, vf13, vf20 - vu.vf13.mul_xyzw(vu.vf13, vu.vf20.w()); ilw_buffer(Mask::y, vu.vi09, vu.vi01 + -6); - // erleng.xyz P, vf11 | ftoi0.xyzw vf12, vf12 - vu.vf12.ftoi0(Mask::xyzw, vu.vf12); vu.P = erleng(vu.vf11); /* TODO erleng */ -// BRANCH! - // ibne vi06, vi03, L56 | maddaw.xyzw ACC, vf26, vf11 - vu.acc.madda_xyzw(vu.vf26, vu.vf11.w()); bc = (vu.vi06 != vu.vi03); - // mr32.z vf14, vf00 | maddw.xyzw vf08, vf27, vf14 - vu.acc.madd_xyzw(vu.vf08, vu.vf27, vu.vf14.w()); vu.vf14.z() = 1.f; - if (bc) { goto L56; } - - -// BRANCH! - // ibne vi07, vi03, L77 | nop - bc = (vu.vi07 != vu.vi03); - // nop | nop - - if (bc) { goto L77; } - - -// BRANCH! - // b L153 | nop - bc = true; - // nop | nop - - if (bc) { goto L153; } - - - L56: - // lqi.xyzw vf09, vi01 | mulax.xyzw ACC, vf01, vf13 - vu.acc.mula_xyzw(vu.vf01, vu.vf13.x()); lq_buffer_xyzw(vu.vf09, vu.vi01++); - // sq.xyzw vf12, 1(vi11) | madday.xyzw ACC, vf02, vf13 - vu.acc.madda_xyzw(vu.vf02, vu.vf13.y()); sq_buffer_xyzw(vu.vf12, vu.vi11 + 1); - // sq.xyzw vf12, 1(vi14) | maddz.xyzw vf13, vf03, vf13 - vu.acc.madd_xyzw(vu.vf13, vu.vf03, vu.vf13.z()); sq_buffer_xyzw(vu.vf12, vu.vi14 + 1); - // lqi.xyzw vf12, vi01 | add.xyzw vf08, vf08, vf28 - vu.vf08.add_xyzw(vu.vf08, vu.vf28); lq_buffer_xyzw(vu.vf12, vu.vi01++); - // lqi.xyzw vf15, vi01 | maxw.w vf10, vf10, vf02 - vu.vf10.max(Mask::w, vu.vf10, vu.vf02.w()); lq_buffer_xyzw(vu.vf15, vu.vi01++); - // mtir vi11, vf09.x | itof0.xyzw vf23, vf23 - vu.vf23.itof0(Mask::xyzw, vu.vf23); vu.vi11 = vu.vf09.x_as_u16(); - // mtir vi14, vf09.y | maxx.xyzw vf13, vf13, vf00 - vu.vf13.max_xyzw(vu.vf13, vu.vf00.x()); vu.vi14 = vu.vf09.y_as_u16(); - // div Q, vf01.w, vf08.w | add.zw vf09, vf09, vf17 - vu.vf09.add(Mask::zw, vu.vf09, vu.vf17); vu.Q = vu.vf01.w() / vu.vf08.w(); - - // move.xyzw vf21, vf10 | add.xyzw vf12, vf12, vf18 - vu.vf12.add_xyzw(vu.vf12, vu.vf18); vu.vf21.move_xyzw(vu.vf10); - // iand vi11, vi11, vi05 | add.xyzw vf15, vf15, vf19 - vu.vf15.add_xyzw(vu.vf15, vu.vf19); vu.vi11 = vu.vi11 & vu.vi05; - // nop | mulax.xyzw ACC, vf04, vf13 - vu.acc.mula_xyzw(vu.vf04, vu.vf13.x()); -// BRANCH! - // ibgtz vi09, L57 | madday.xyzw ACC, vf05, vf13 - vu.acc.madda_xyzw(vu.vf05, vu.vf13.y()); bc = ((s16)vu.vi09) > 0; - // iand vi14, vi14, vi05 | maddaz.xyzw ACC, vf06, vf13 - vu.acc.madda_xyzw(vu.vf06, vu.vf13.z()); vu.vi14 = vu.vi14 & vu.vi05; - if (bc) { goto L57; } - - - // nop | addx.w vf21, vf21, vf17 - vu.vf21.add(Mask::w, vu.vf21, vu.vf17.x()); - L57: -// BRANCH! - // ibne vi05, vi11, L58 | maddw.xyzw vf13, vf07, vf00 - vu.acc.madd_xyzw(vu.vf13, vu.vf07, vu.vf00.w()); bc = (vu.vi05 != vu.vi11); - // ilw.x vi09, -9(vi01) | mul.xyz vf08, vf08, Q - vu.vf08.mul(Mask::xyz, vu.vf08, vu.Q); /* TODO mulq */ ilw_buffer(Mask::x, vu.vi09, vu.vi01 + -9); - if (bc) { goto L58; } - - - // mtir vi11, vf12.x | mul.xyzw vf14, vf14, Q - vu.vf14.mul_xyzw(vu.vf14, vu.Q); /* TODO mulq */ vu.vi11 = vu.vf12.x_as_u16(); - // mtir vi14, vf12.y | ftoi4.xyzw vf21, vf21 - vu.vf21.ftoi4(Mask::xyzw, vu.vf21); vu.vi14 = vu.vf12.y_as_u16(); -// BRANCH! - // b L59 | mul.xyzw vf13, vf13, vf23 - vu.vf13.mul_xyzw(vu.vf13, vu.vf23); bc = true; - // lqi.xyzw vf23, vi03 | add.xyzw vf08, vf08, vf22 - vu.vf08.add_xyzw(vu.vf08, vu.vf22); lq_buffer_xyzw(vu.vf23, vu.vi03++); - if (bc) { goto L59; } - - - L58: - // lq.xyzw vf20, 0(vi11) | mul.xyzw vf14, vf14, Q - vu.vf14.mul_xyzw(vu.vf14, vu.Q); /* TODO mulq */ lq_buffer_xyzw(vu.vf20, vu.vi11); - // lq.xyzw vf25, 0(vi14) | ftoi4.xyzw vf21, vf21 - vu.vf21.ftoi4(Mask::xyzw, vu.vf21); lq_buffer_xyzw(vu.vf25, vu.vi14); - // lq.xyzw vf23, 1(vi11) | mul.xyzw vf13, vf13, vf23 - vu.vf13.mul_xyzw(vu.vf13, vu.vf23); lq_buffer_xyzw(vu.vf23, vu.vi11 + 1); - // lq.xyzw vf26, 1(vi14) | add.xyzw vf08, vf08, vf22 - vu.vf08.add_xyzw(vu.vf08, vu.vf22); lq_buffer_xyzw(vu.vf26, vu.vi14 + 1); - // lq.xyzw vf20, 2(vi11) | mulaz.xyzw ACC, vf20, vf24 - vu.acc.mula_xyzw(vu.vf20, vu.vf24.z()); lq_buffer_xyzw(vu.vf20, vu.vi11 + 2); - // lq.xyzw vf27, 2(vi14) | maddw.xyzw vf25, vf25, vf24 - vu.acc.madd_xyzw(vu.vf25, vu.vf25, vu.vf24.w()); lq_buffer_xyzw(vu.vf27, vu.vi14 + 2); - // lq.xyzw vf23, 3(vi11) | mulaz.xyzw ACC, vf23, vf24 - vu.acc.mula_xyzw(vu.vf23, vu.vf24.z()); lq_buffer_xyzw(vu.vf23, vu.vi11 + 3); - // lq.xyzw vf28, 3(vi14) | maddw.xyzw vf26, vf26, vf24 - vu.acc.madd_xyzw(vu.vf26, vu.vf26, vu.vf24.w()); lq_buffer_xyzw(vu.vf28, vu.vi14 + 3); - // lq.xyzw vf20, 4(vi11) | mulaz.xyzw ACC, vf20, vf24 - vu.acc.mula_xyzw(vu.vf20, vu.vf24.z()); lq_buffer_xyzw(vu.vf20, vu.vi11 + 4); - // lq.xyz vf29, 4(vi14) | maddw.xyzw vf27, vf27, vf24 - vu.acc.madd_xyzw(vu.vf27, vu.vf27, vu.vf24.w()); lq_buffer_xyz(vu.vf29, vu.vi14 + 4); - // lq.xyzw vf23, 5(vi11) | mulaz.xyzw ACC, vf23, vf24 - vu.acc.mula_xyzw(vu.vf23, vu.vf24.z()); lq_buffer_xyzw(vu.vf23, vu.vi11 + 5); - // lq.xyz vf30, 5(vi14) | maddw.xyzw vf28, vf28, vf24 - vu.acc.madd_xyzw(vu.vf28, vu.vf28, vu.vf24.w()); lq_buffer_xyz(vu.vf30, vu.vi14 + 5); - // lq.xyzw vf20, 6(vi11) | mulaz.xyzw ACC, vf20, vf24 - vu.acc.mula_xyzw(vu.vf20, vu.vf24.z()); lq_buffer_xyzw(vu.vf20, vu.vi11 + 6); - // lq.xyzw vf31, 6(vi14) | maddw.xyz vf29, vf29, vf24 - vu.acc.madd_xyz(vu.vf29, vu.vf29, vu.vf24.w()); lq_buffer_xyzw(vu.vf31, vu.vi14 + 6); - // lqi.xyzw vf23, vi02 | mulaz.xyzw ACC, vf23, vf24 - vu.acc.mula_xyzw(vu.vf23, vu.vf24.z()); lq_buffer_xyzw(vu.vf23, vu.vi02++); - // mtir vi11, vf12.x | maddw.xyz vf30, vf30, vf24 - vu.acc.madd_xyz(vu.vf30, vu.vf30, vu.vf24.w()); vu.vi11 = vu.vf12.x_as_u16(); - // mtir vi14, vf12.y | mulaz.xyzw ACC, vf20, vf24 - vu.acc.mula_xyzw(vu.vf20, vu.vf24.z()); vu.vi14 = vu.vf12.y_as_u16(); -// BRANCH! - // b L43 | maddw.xyzw vf31, vf31, vf24 - vu.acc.madd_xyzw(vu.vf31, vu.vf31, vu.vf24.w()); bc = true; - // lqi.xyzw vf23, vi03 | itof0.xyzw vf24, vf23 - vu.vf24.itof0(Mask::xyzw, vu.vf23); lq_buffer_xyzw(vu.vf23, vu.vi03++); - if (bc) { goto L43; } - - - L59: -// BRANCH! - // ibgez vi09, L60 | mulaz.xyzw ACC, vf29, vf09 - vu.acc.mula_xyzw(vu.vf29, vu.vf09.z()); bc = ((s16)vu.vi09) >= 0; - // sq.xyzw vf21, 2(vi12) | maddaz.xyzw ACC, vf30, vf12 - vu.acc.madda_xyzw(vu.vf30, vu.vf12.z()); sq_buffer_xyzw(vu.vf21, vu.vi12 + 2); - if (bc) { goto L60; } - - - // nop | ftoi4.xyzw vf21, vf10 - vu.vf21.ftoi4(Mask::xyzw, vu.vf10); - L60: - // mfp.w vf20, P | maddz.xyz vf12, vf31, vf15 - vu.acc.madd_xyz(vu.vf12, vu.vf31, vu.vf15.z()); vu.vf20.mfp(Mask::w, vu.P); - // sq.xyzw vf16, 0(vi12) | miniy.xyzw vf13, vf13, vf17 - vu.vf13.mini_xyzw(vu.vf13, vu.vf17.y()); sq_buffer_xyzw(vu.vf16, vu.vi12); - // sq.xyzw vf16, 0(vi15) | miniw.w vf08, vf08, vf03 - vu.vf08.mini(Mask::w, vu.vf08, vu.vf03.w()); sq_buffer_xyzw(vu.vf16, vu.vi15); - // sq.xyzw vf21, 2(vi15) | mulaw.xyzw ACC, vf25, vf09 - vu.acc.mula_xyzw(vu.vf25, vu.vf09.w()); sq_buffer_xyzw(vu.vf21, vu.vi15 + 2); - // ilw.y vi09, -6(vi01) | mulw.xyzw vf11, vf11, vf20 - vu.vf11.mul_xyzw(vu.vf11, vu.vf20.w()); ilw_buffer(Mask::y, vu.vi09, vu.vi01 + -6); - // erleng.xyz P, vf12 | ftoi0.xyzw vf13, vf13 - vu.vf13.ftoi0(Mask::xyzw, vu.vf13); vu.P = erleng(vu.vf12); /* TODO erleng */ -// BRANCH! - // ibne vi06, vi03, L45 | maddaw.xyzw ACC, vf26, vf12 - vu.acc.madda_xyzw(vu.vf26, vu.vf12.w()); bc = (vu.vi06 != vu.vi03); - // mr32.z vf15, vf00 | maddw.xyzw vf09, vf27, vf15 - vu.acc.madd_xyzw(vu.vf09, vu.vf27, vu.vf15.w()); vu.vf15.z() = 1.f; - if (bc) { goto L45; } - - -// BRANCH! - // ibne vi07, vi03, L72 | nop - bc = (vu.vi07 != vu.vi03); - // nop | nop - - if (bc) { goto L72; } - - -// BRANCH! - // b L163 | nop - bc = true; - // nop | nop - - if (bc) { goto L163; } - - - L61: - // lqi.xyzw vf08, vi01 | nop - lq_buffer_xyzw(vu.vf08, vu.vi01++); - // lqi.xyzw vf24, vi02 | nop - lq_buffer_xyzw(vu.vf24, vu.vi02++); - // lqi.xyzw vf11, vi01 | nop - lq_buffer_xyzw(vu.vf11, vu.vi01++); - // lqi.xyzw vf14, vi01 | nop - lq_buffer_xyzw(vu.vf14, vu.vi01++); - // mtir vi10, vf08.x | nop - vu.vi10 = vu.vf08.x_as_u16(); - // mtir vi13, vf08.y | itof0.xyzw vf24, vf24 - vu.vf24.itof0(Mask::xyzw, vu.vf24); vu.vi13 = vu.vf08.y_as_u16(); - // nop | add.zw vf08, vf08, vf17 - vu.vf08.add(Mask::zw, vu.vf08, vu.vf17); - // nop | add.xyzw vf11, vf11, vf18 - vu.vf11.add_xyzw(vu.vf11, vu.vf18); - // iand vi10, vi10, vi05 | add.xyzw vf14, vf14, vf19 - vu.vf14.add_xyzw(vu.vf14, vu.vf19); vu.vi10 = vu.vi10 & vu.vi05; - // ilw.w vi08, -1(vi02) | mulw.xyzw vf24, vf24, vf29 - vu.vf24.mul_xyzw(vu.vf24, vu.vf29.w()); ilw_buffer(Mask::w, vu.vi08, vu.vi02 + -1); - // iand vi13, vi13, vi05 | nop - vu.vi13 = vu.vi13 & vu.vi05; - // lq.xyzw vf20, 0(vi10) | nop - lq_buffer_xyzw(vu.vf20, vu.vi10); - // lq.xyzw vf31, 0(vi13) | nop - lq_buffer_xyzw(vu.vf31, vu.vi13); - // lq.xyzw vf25, 0(vi08) | nop - lq_buffer_xyzw(vu.vf25, vu.vi08); - // lq.xyzw vf23, 1(vi10) | nop - lq_buffer_xyzw(vu.vf23, vu.vi10 + 1); - // lq.xyzw vf20, 1(vi13) | mulax.xyzw ACC, vf20, vf24 - vu.acc.mula_xyzw(vu.vf20, vu.vf24.x()); lq_buffer_xyzw(vu.vf20, vu.vi13 + 1); - // lq.xyzw vf26, 1(vi08) | madday.xyzw ACC, vf31, vf24 - vu.acc.madda_xyzw(vu.vf31, vu.vf24.y()); lq_buffer_xyzw(vu.vf26, vu.vi08 + 1); - // lq.xyzw vf31, 2(vi10) | maddz.xyzw vf25, vf25, vf24 - vu.acc.madd_xyzw(vu.vf25, vu.vf25, vu.vf24.z()); lq_buffer_xyzw(vu.vf31, vu.vi10 + 2); - // lq.xyzw vf23, 2(vi13) | mulax.xyzw ACC, vf23, vf24 - vu.acc.mula_xyzw(vu.vf23, vu.vf24.x()); lq_buffer_xyzw(vu.vf23, vu.vi13 + 2); - // lq.xyzw vf27, 2(vi08) | madday.xyzw ACC, vf20, vf24 - vu.acc.madda_xyzw(vu.vf20, vu.vf24.y()); lq_buffer_xyzw(vu.vf27, vu.vi08 + 2); - // lq.xyzw vf20, 3(vi10) | maddz.xyzw vf26, vf26, vf24 - vu.acc.madd_xyzw(vu.vf26, vu.vf26, vu.vf24.z()); lq_buffer_xyzw(vu.vf20, vu.vi10 + 3); - // lq.xyzw vf31, 3(vi13) | mulax.xyzw ACC, vf31, vf24 - vu.acc.mula_xyzw(vu.vf31, vu.vf24.x()); lq_buffer_xyzw(vu.vf31, vu.vi13 + 3); - // lq.xyzw vf28, 3(vi08) | madday.xyzw ACC, vf23, vf24 - vu.acc.madda_xyzw(vu.vf23, vu.vf24.y()); lq_buffer_xyzw(vu.vf28, vu.vi08 + 3); - // lq.xyzw vf23, 4(vi10) | maddz.xyzw vf27, vf27, vf24 - vu.acc.madd_xyzw(vu.vf27, vu.vf27, vu.vf24.z()); lq_buffer_xyzw(vu.vf23, vu.vi10 + 4); - // lq.xyzw vf20, 4(vi13) | mulax.xyzw ACC, vf20, vf24 - vu.acc.mula_xyzw(vu.vf20, vu.vf24.x()); lq_buffer_xyzw(vu.vf20, vu.vi13 + 4); - // lq.xyz vf29, 4(vi08) | madday.xyzw ACC, vf31, vf24 - vu.acc.madda_xyzw(vu.vf31, vu.vf24.y()); lq_buffer_xyz(vu.vf29, vu.vi08 + 4); - // lq.xyzw vf31, 5(vi10) | maddz.xyzw vf28, vf28, vf24 - vu.acc.madd_xyzw(vu.vf28, vu.vf28, vu.vf24.z()); lq_buffer_xyzw(vu.vf31, vu.vi10 + 5); - // lq.xyzw vf23, 5(vi13) | mulax.xyzw ACC, vf23, vf24 - vu.acc.mula_xyzw(vu.vf23, vu.vf24.x()); lq_buffer_xyzw(vu.vf23, vu.vi13 + 5); - // lq.xyz vf30, 5(vi08) | madday.xyzw ACC, vf20, vf24 - vu.acc.madda_xyzw(vu.vf20, vu.vf24.y()); lq_buffer_xyz(vu.vf30, vu.vi08 + 5); - // lq.xyzw vf20, 6(vi10) | maddz.xyz vf29, vf29, vf24 - vu.acc.madd_xyz(vu.vf29, vu.vf29, vu.vf24.z()); lq_buffer_xyzw(vu.vf20, vu.vi10 + 6); - // lq.xyzw vf22, 6(vi13) | mulax.xyzw ACC, vf31, vf24 - vu.acc.mula_xyzw(vu.vf31, vu.vf24.x()); lq_buffer_xyzw(vu.vf22, vu.vi13 + 6); - // lq.xyzw vf31, 6(vi08) | madday.xyzw ACC, vf23, vf24 - vu.acc.madda_xyzw(vu.vf23, vu.vf24.y()); lq_buffer_xyzw(vu.vf31, vu.vi08 + 6); - // lqi.xyzw vf23, vi02 | maddz.xyz vf30, vf30, vf24 - vu.acc.madd_xyz(vu.vf30, vu.vf30, vu.vf24.z()); lq_buffer_xyzw(vu.vf23, vu.vi02++); - // mtir vi10, vf11.x | mulax.xyzw ACC, vf20, vf24 - vu.acc.mula_xyzw(vu.vf20, vu.vf24.x()); vu.vi10 = vu.vf11.x_as_u16(); - // mtir vi13, vf11.y | madday.xyzw ACC, vf22, vf24 - vu.acc.madda_xyzw(vu.vf22, vu.vf24.y()); vu.vi13 = vu.vf11.y_as_u16(); - // lq.xyzw vf22, 2(vi00) | maddz.xyzw vf31, vf31, vf24 - vu.acc.madd_xyzw(vu.vf31, vu.vf31, vu.vf24.z()); lq_buffer_xyzw(vu.vf22, 2); - // nop | itof0.xyzw vf24, vf23 - vu.vf24.itof0(Mask::xyzw, vu.vf23); - // nop | mulaz.xyzw ACC, vf29, vf08 - vu.acc.mula_xyzw(vu.vf29, vu.vf08.z()); - // nop | maddaz.xyzw ACC, vf30, vf11 - vu.acc.madda_xyzw(vu.vf30, vu.vf11.z()); - // nop | maddz.xyz vf11, vf31, vf14 - vu.acc.madd_xyz(vu.vf11, vu.vf31, vu.vf14.z()); - // nop | nop - - // nop | nop - - // nop | mulaw.xyzw ACC, vf25, vf08 - vu.acc.mula_xyzw(vu.vf25, vu.vf08.w()); - // nop | nop - - // erleng.xyz P, vf11 | nop - vu.P = erleng(vu.vf11); /* TODO erleng */ - // ior vi15, vi07, vi00 | maddaw.xyzw ACC, vf26, vf11 - vu.acc.madda_xyzw(vu.vf26, vu.vf11.w()); vu.vi15 = vu.vi07; - // mr32.z vf14, vf00 | maddw.xyzw vf08, vf27, vf14 - vu.acc.madd_xyzw(vu.vf08, vu.vf27, vu.vf14.w()); vu.vf14.z() = 1.f; - // lqi.xyzw vf09, vi01 | nop - lq_buffer_xyzw(vu.vf09, vu.vi01++); - // ilwr.y vi03, vi12 | nop - ilw_buffer(Mask::y, vu.vi03, vu.vi12); - // ilw.z vi07, 1(vi12) | nop - ilw_buffer(Mask::z, vu.vi07, vu.vi12 + 1); - // lqi.xyzw vf12, vi01 | add.xyzw vf08, vf08, vf28 - vu.vf08.add_xyzw(vu.vf08, vu.vf28); lq_buffer_xyzw(vu.vf12, vu.vi01++); - // lqi.xyzw vf15, vi01 | nop - lq_buffer_xyzw(vu.vf15, vu.vi01++); - // mtir vi11, vf09.x | nop - vu.vi11 = vu.vf09.x_as_u16(); -// BRANCH! - // ibeq vi00, vi15, L62 | nop - bc = (vu.vi15 == 0); - // mtir vi14, vf09.y | nop - vu.vi14 = vu.vf09.y_as_u16(); - if (bc) { goto L62; } - - - // nop | miniw.w vf08, vf08, vf01 - vu.vf08.mini(Mask::w, vu.vf08, vu.vf01.w()); - L62: - // div Q, vf01.w, vf08.w | add.zw vf09, vf09, vf17 - vu.vf09.add(Mask::zw, vu.vf09, vu.vf17); vu.Q = vu.vf01.w() / vu.vf08.w(); - - // iadd vi03, vi03, vi12 | add.xyzw vf12, vf12, vf18 - vu.vf12.add_xyzw(vu.vf12, vu.vf18); vu.vi03 = vu.vi03 + vu.vi12; - // iand vi11, vi11, vi05 | add.xyzw vf15, vf15, vf19 - vu.vf15.add_xyzw(vu.vf15, vu.vf19); vu.vi11 = vu.vi11 & vu.vi05; - // ilw.w vi08, -1(vi02) | nop - ilw_buffer(Mask::w, vu.vi08, vu.vi02 + -1); - // iadd vi07, vi07, vi03 | nop - vu.vi07 = vu.vi07 + vu.vi03; - // iand vi14, vi14, vi05 | nop - vu.vi14 = vu.vi14 & vu.vi05; -// BRANCH! - // ibne vi05, vi11, L63 | nop - bc = (vu.vi05 != vu.vi11); - // iaddi vi07, vi07, -0x1 | mul.xyz vf08, vf08, Q - vu.vf08.mul(Mask::xyz, vu.vf08, vu.Q); /* TODO mulq */ vu.vi07 = vu.vi07 + -1; - if (bc) { goto L63; } - - - // mtir vi11, vf12.x | mul.xyzw vf14, vf14, Q - vu.vf14.mul_xyzw(vu.vf14, vu.Q); /* TODO mulq */ vu.vi11 = vu.vf12.x_as_u16(); - // mtir vi14, vf12.y | nop - vu.vi14 = vu.vf12.y_as_u16(); -// BRANCH! - // b L64 | nop - bc = true; - // lqi.xyzw vf23, vi03 | add.xyzw vf08, vf08, vf22 - vu.vf08.add_xyzw(vu.vf08, vu.vf22); lq_buffer_xyzw(vu.vf23, vu.vi03++); - if (bc) { goto L64; } - - - L63: - // lq.xyzw vf20, 0(vi11) | mul.xyzw vf14, vf14, Q - vu.vf14.mul_xyzw(vu.vf14, vu.Q); /* TODO mulq */ lq_buffer_xyzw(vu.vf20, vu.vi11); - // nop | mulw.xyzw vf24, vf24, vf29 - vu.vf24.mul_xyzw(vu.vf24, vu.vf29.w()); - // lq.xyzw vf31, 0(vi14) | nop - lq_buffer_xyzw(vu.vf31, vu.vi14); - // lq.xyzw vf25, 0(vi08) | nop - lq_buffer_xyzw(vu.vf25, vu.vi08); - // lq.xyzw vf23, 1(vi11) | add.xyzw vf08, vf08, vf22 - vu.vf08.add_xyzw(vu.vf08, vu.vf22); lq_buffer_xyzw(vu.vf23, vu.vi11 + 1); - // lq.xyzw vf20, 1(vi14) | mulax.xyzw ACC, vf20, vf24 - vu.acc.mula_xyzw(vu.vf20, vu.vf24.x()); lq_buffer_xyzw(vu.vf20, vu.vi14 + 1); - // lq.xyzw vf26, 1(vi08) | madday.xyzw ACC, vf31, vf24 - vu.acc.madda_xyzw(vu.vf31, vu.vf24.y()); lq_buffer_xyzw(vu.vf26, vu.vi08 + 1); - // lq.xyzw vf31, 2(vi11) | maddz.xyzw vf25, vf25, vf24 - vu.acc.madd_xyzw(vu.vf25, vu.vf25, vu.vf24.z()); lq_buffer_xyzw(vu.vf31, vu.vi11 + 2); - // lq.xyzw vf23, 2(vi14) | mulax.xyzw ACC, vf23, vf24 - vu.acc.mula_xyzw(vu.vf23, vu.vf24.x()); lq_buffer_xyzw(vu.vf23, vu.vi14 + 2); - // lq.xyzw vf27, 2(vi08) | madday.xyzw ACC, vf20, vf24 - vu.acc.madda_xyzw(vu.vf20, vu.vf24.y()); lq_buffer_xyzw(vu.vf27, vu.vi08 + 2); - // lq.xyzw vf20, 3(vi11) | maddz.xyzw vf26, vf26, vf24 - vu.acc.madd_xyzw(vu.vf26, vu.vf26, vu.vf24.z()); lq_buffer_xyzw(vu.vf20, vu.vi11 + 3); - // lq.xyzw vf31, 3(vi14) | mulax.xyzw ACC, vf31, vf24 - vu.acc.mula_xyzw(vu.vf31, vu.vf24.x()); lq_buffer_xyzw(vu.vf31, vu.vi14 + 3); - // lq.xyzw vf28, 3(vi08) | madday.xyzw ACC, vf23, vf24 - vu.acc.madda_xyzw(vu.vf23, vu.vf24.y()); lq_buffer_xyzw(vu.vf28, vu.vi08 + 3); - // lq.xyzw vf23, 4(vi11) | maddz.xyzw vf27, vf27, vf24 - vu.acc.madd_xyzw(vu.vf27, vu.vf27, vu.vf24.z()); lq_buffer_xyzw(vu.vf23, vu.vi11 + 4); - // lq.xyzw vf20, 4(vi14) | mulax.xyzw ACC, vf20, vf24 - vu.acc.mula_xyzw(vu.vf20, vu.vf24.x()); lq_buffer_xyzw(vu.vf20, vu.vi14 + 4); - // lq.xyz vf29, 4(vi08) | madday.xyzw ACC, vf31, vf24 - vu.acc.madda_xyzw(vu.vf31, vu.vf24.y()); lq_buffer_xyz(vu.vf29, vu.vi08 + 4); - // lq.xyzw vf31, 5(vi11) | maddz.xyzw vf28, vf28, vf24 - vu.acc.madd_xyzw(vu.vf28, vu.vf28, vu.vf24.z()); lq_buffer_xyzw(vu.vf31, vu.vi11 + 5); - // lq.xyzw vf23, 5(vi14) | mulax.xyzw ACC, vf23, vf24 - vu.acc.mula_xyzw(vu.vf23, vu.vf24.x()); lq_buffer_xyzw(vu.vf23, vu.vi14 + 5); - // lq.xyz vf30, 5(vi08) | madday.xyzw ACC, vf20, vf24 - vu.acc.madda_xyzw(vu.vf20, vu.vf24.y()); lq_buffer_xyz(vu.vf30, vu.vi08 + 5); - // lq.xyzw vf20, 6(vi11) | maddz.xyz vf29, vf29, vf24 - vu.acc.madd_xyz(vu.vf29, vu.vf29, vu.vf24.z()); lq_buffer_xyzw(vu.vf20, vu.vi11 + 6); - // lq.xyzw vf22, 6(vi14) | mulax.xyzw ACC, vf31, vf24 - vu.acc.mula_xyzw(vu.vf31, vu.vf24.x()); lq_buffer_xyzw(vu.vf22, vu.vi14 + 6); - // lq.xyzw vf31, 6(vi08) | madday.xyzw ACC, vf23, vf24 - vu.acc.madda_xyzw(vu.vf23, vu.vf24.y()); lq_buffer_xyzw(vu.vf31, vu.vi08 + 6); - // lqi.xyzw vf23, vi02 | maddz.xyz vf30, vf30, vf24 - vu.acc.madd_xyz(vu.vf30, vu.vf30, vu.vf24.z()); lq_buffer_xyzw(vu.vf23, vu.vi02++); - // mtir vi11, vf12.x | mulax.xyzw ACC, vf20, vf24 - vu.acc.mula_xyzw(vu.vf20, vu.vf24.x()); vu.vi11 = vu.vf12.x_as_u16(); - // mtir vi14, vf12.y | madday.xyzw ACC, vf22, vf24 - vu.acc.madda_xyzw(vu.vf22, vu.vf24.y()); vu.vi14 = vu.vf12.y_as_u16(); - // lq.xyzw vf22, 2(vi00) | maddz.xyzw vf31, vf31, vf24 - vu.acc.madd_xyzw(vu.vf31, vu.vf31, vu.vf24.z()); lq_buffer_xyzw(vu.vf22, 2); - // lqi.xyzw vf23, vi03 | itof0.xyzw vf24, vf23 - vu.vf24.itof0(Mask::xyzw, vu.vf23); lq_buffer_xyzw(vu.vf23, vu.vi03++); - L64: - // nop | mulaz.xyzw ACC, vf29, vf09 - vu.acc.mula_xyzw(vu.vf29, vu.vf09.z()); - // nop | maddaz.xyzw ACC, vf30, vf12 - vu.acc.madda_xyzw(vu.vf30, vu.vf12.z()); - // mfp.w vf20, P | maddz.xyz vf12, vf31, vf15 - vu.acc.madd_xyz(vu.vf12, vu.vf31, vu.vf15.z()); vu.vf20.mfp(Mask::w, vu.P); - // nop | nop - - // 1024.0 | miniw.w vf08, vf08, vf03 :i - vu.vf08.mini(Mask::w, vu.vf08, vu.vf03.w()); vu.I = 1024.0; -// BRANCH! - // ibne vi00, vi15, L125 | mulaw.xyzw ACC, vf25, vf09 - vu.acc.mula_xyzw(vu.vf25, vu.vf09.w()); bc = (vu.vi15 != 0); - // ilw.y vi09, -6(vi01) | mulw.xyzw vf11, vf11, vf20 - vu.vf11.mul_xyzw(vu.vf11, vu.vf20.w()); ilw_buffer(Mask::y, vu.vi09, vu.vi01 + -6); - if (bc) { goto L125; } - - - // erleng.xyz P, vf12 | nop - vu.P = erleng(vu.vf12); /* TODO erleng */ - // nop | maddaw.xyzw ACC, vf26, vf12 - vu.acc.madda_xyzw(vu.vf26, vu.vf12.w()); - // mr32.z vf15, vf00 | maddw.xyzw vf09, vf27, vf15 - vu.acc.madd_xyzw(vu.vf09, vu.vf27, vu.vf15.w()); vu.vf15.z() = 1.f; - L65: - // lqi.xyzw vf10, vi01 | mulax.xyzw ACC, vf01, vf11 - vu.acc.mula_xyzw(vu.vf01, vu.vf11.x()); lq_buffer_xyzw(vu.vf10, vu.vi01++); -// BRANCH! - // b L67 | madday.xyzw ACC, vf02, vf11 - vu.acc.madda_xyzw(vu.vf02, vu.vf11.y()); bc = true; - // nop | maddz.xyzw vf11, vf03, vf11 - vu.acc.madd_xyzw(vu.vf11, vu.vf03, vu.vf11.z()); - if (bc) { goto L67; } - - - L66: - // lqi.xyzw vf10, vi01 | mulax.xyzw ACC, vf01, vf11 - vu.acc.mula_xyzw(vu.vf01, vu.vf11.x()); lq_buffer_xyzw(vu.vf10, vu.vi01++); - // sq.xyzw vf13, 1(vi12) | madday.xyzw ACC, vf02, vf11 - vu.acc.madda_xyzw(vu.vf02, vu.vf11.y()); sq_buffer_xyzw(vu.vf13, vu.vi12 + 1); - // sq.xyzw vf13, 1(vi15) | maddz.xyzw vf11, vf03, vf11 - vu.acc.madd_xyzw(vu.vf11, vu.vf03, vu.vf11.z()); sq_buffer_xyzw(vu.vf13, vu.vi15 + 1); - L67: - // lqi.xyzw vf13, vi01 | add.xyzw vf09, vf09, vf28 - vu.vf09.add_xyzw(vu.vf09, vu.vf28); lq_buffer_xyzw(vu.vf13, vu.vi01++); - // lqi.xyzw vf16, vi01 | maxw.w vf08, vf08, vf02 - vu.vf08.max(Mask::w, vu.vf08, vu.vf02.w()); lq_buffer_xyzw(vu.vf16, vu.vi01++); - // mtir vi12, vf10.x | itof0.xyzw vf23, vf23 - vu.vf23.itof0(Mask::xyzw, vu.vf23); vu.vi12 = vu.vf10.x_as_u16(); - // mtir vi15, vf10.y | maxx.xyzw vf11, vf11, vf00 - vu.vf11.max_xyzw(vu.vf11, vu.vf00.x()); vu.vi15 = vu.vf10.y_as_u16(); - // div Q, vf01.w, vf09.w | add.zw vf10, vf10, vf17 - vu.vf10.add(Mask::zw, vu.vf10, vu.vf17); vu.Q = vu.vf01.w() / vu.vf09.w(); - - // move.xyzw vf21, vf08 | add.xyzw vf13, vf13, vf18 - vu.vf13.add_xyzw(vu.vf13, vu.vf18); vu.vf21.move_xyzw(vu.vf08); - // iand vi12, vi12, vi05 | add.xyzw vf16, vf16, vf19 - vu.vf16.add_xyzw(vu.vf16, vu.vf19); vu.vi12 = vu.vi12 & vu.vi05; - // ilw.w vi08, -1(vi02) | mulax.xyzw ACC, vf04, vf11 - vu.acc.mula_xyzw(vu.vf04, vu.vf11.x()); ilw_buffer(Mask::w, vu.vi08, vu.vi02 + -1); -// BRANCH! - // ibgtz vi09, L68 | madday.xyzw ACC, vf05, vf11 - vu.acc.madda_xyzw(vu.vf05, vu.vf11.y()); bc = ((s16)vu.vi09) > 0; - // iand vi15, vi15, vi05 | maddaz.xyzw ACC, vf06, vf11 - vu.acc.madda_xyzw(vu.vf06, vu.vf11.z()); vu.vi15 = vu.vi15 & vu.vi05; - if (bc) { goto L68; } - - - // nop | addx.w vf21, vf21, vf17 - vu.vf21.add(Mask::w, vu.vf21, vu.vf17.x()); - L68: -// BRANCH! - // ibne vi05, vi12, L69 | maddw.xyzw vf11, vf07, vf00 - vu.acc.madd_xyzw(vu.vf11, vu.vf07, vu.vf00.w()); bc = (vu.vi05 != vu.vi12); - // ilw.x vi09, -9(vi01) | mul.xyz vf09, vf09, Q - vu.vf09.mul(Mask::xyz, vu.vf09, vu.Q); /* TODO mulq */ ilw_buffer(Mask::x, vu.vi09, vu.vi01 + -9); - if (bc) { goto L69; } - - - // mtir vi12, vf13.x | mul.xyzw vf15, vf15, Q - vu.vf15.mul_xyzw(vu.vf15, vu.Q); /* TODO mulq */ vu.vi12 = vu.vf13.x_as_u16(); - // mtir vi15, vf13.y | ftoi4.xyzw vf21, vf21 - vu.vf21.ftoi4(Mask::xyzw, vu.vf21); vu.vi15 = vu.vf13.y_as_u16(); -// BRANCH! - // b L70 | mul.xyzw vf11, vf11, vf23 - vu.vf11.mul_xyzw(vu.vf11, vu.vf23); bc = true; - // lqi.xyzw vf23, vi03 | add.xyzw vf09, vf09, vf22 - vu.vf09.add_xyzw(vu.vf09, vu.vf22); lq_buffer_xyzw(vu.vf23, vu.vi03++); - if (bc) { goto L70; } - - - L69: - // lq.xyzw vf20, 0(vi12) | mul.xyzw vf15, vf15, Q - vu.vf15.mul_xyzw(vu.vf15, vu.Q); /* TODO mulq */ lq_buffer_xyzw(vu.vf20, vu.vi12); - // nop | mulw.xyzw vf24, vf24, vf29 - vu.vf24.mul_xyzw(vu.vf24, vu.vf29.w()); - // lq.xyzw vf31, 0(vi15) | ftoi4.xyzw vf21, vf21 - vu.vf21.ftoi4(Mask::xyzw, vu.vf21); lq_buffer_xyzw(vu.vf31, vu.vi15); - // lq.xyzw vf25, 0(vi08) | mul.xyzw vf11, vf11, vf23 - vu.vf11.mul_xyzw(vu.vf11, vu.vf23); lq_buffer_xyzw(vu.vf25, vu.vi08); - // lq.xyzw vf23, 1(vi12) | add.xyzw vf09, vf09, vf22 - vu.vf09.add_xyzw(vu.vf09, vu.vf22); lq_buffer_xyzw(vu.vf23, vu.vi12 + 1); - // lq.xyzw vf20, 1(vi15) | mulax.xyzw ACC, vf20, vf24 - vu.acc.mula_xyzw(vu.vf20, vu.vf24.x()); lq_buffer_xyzw(vu.vf20, vu.vi15 + 1); - // lq.xyzw vf26, 1(vi08) | madday.xyzw ACC, vf31, vf24 - vu.acc.madda_xyzw(vu.vf31, vu.vf24.y()); lq_buffer_xyzw(vu.vf26, vu.vi08 + 1); - // lq.xyzw vf31, 2(vi12) | maddz.xyzw vf25, vf25, vf24 - vu.acc.madd_xyzw(vu.vf25, vu.vf25, vu.vf24.z()); lq_buffer_xyzw(vu.vf31, vu.vi12 + 2); - // lq.xyzw vf23, 2(vi15) | mulax.xyzw ACC, vf23, vf24 - vu.acc.mula_xyzw(vu.vf23, vu.vf24.x()); lq_buffer_xyzw(vu.vf23, vu.vi15 + 2); - // lq.xyzw vf27, 2(vi08) | madday.xyzw ACC, vf20, vf24 - vu.acc.madda_xyzw(vu.vf20, vu.vf24.y()); lq_buffer_xyzw(vu.vf27, vu.vi08 + 2); - // lq.xyzw vf20, 3(vi12) | maddz.xyzw vf26, vf26, vf24 - vu.acc.madd_xyzw(vu.vf26, vu.vf26, vu.vf24.z()); lq_buffer_xyzw(vu.vf20, vu.vi12 + 3); - // lq.xyzw vf31, 3(vi15) | mulax.xyzw ACC, vf31, vf24 - vu.acc.mula_xyzw(vu.vf31, vu.vf24.x()); lq_buffer_xyzw(vu.vf31, vu.vi15 + 3); - // lq.xyzw vf28, 3(vi08) | madday.xyzw ACC, vf23, vf24 - vu.acc.madda_xyzw(vu.vf23, vu.vf24.y()); lq_buffer_xyzw(vu.vf28, vu.vi08 + 3); - // lq.xyzw vf23, 4(vi12) | maddz.xyzw vf27, vf27, vf24 - vu.acc.madd_xyzw(vu.vf27, vu.vf27, vu.vf24.z()); lq_buffer_xyzw(vu.vf23, vu.vi12 + 4); - // lq.xyzw vf20, 4(vi15) | mulax.xyzw ACC, vf20, vf24 - vu.acc.mula_xyzw(vu.vf20, vu.vf24.x()); lq_buffer_xyzw(vu.vf20, vu.vi15 + 4); - // lq.xyz vf29, 4(vi08) | madday.xyzw ACC, vf31, vf24 - vu.acc.madda_xyzw(vu.vf31, vu.vf24.y()); lq_buffer_xyz(vu.vf29, vu.vi08 + 4); - // lq.xyzw vf31, 5(vi12) | maddz.xyzw vf28, vf28, vf24 - vu.acc.madd_xyzw(vu.vf28, vu.vf28, vu.vf24.z()); lq_buffer_xyzw(vu.vf31, vu.vi12 + 5); - // lq.xyzw vf23, 5(vi15) | mulax.xyzw ACC, vf23, vf24 - vu.acc.mula_xyzw(vu.vf23, vu.vf24.x()); lq_buffer_xyzw(vu.vf23, vu.vi15 + 5); - // lq.xyz vf30, 5(vi08) | madday.xyzw ACC, vf20, vf24 - vu.acc.madda_xyzw(vu.vf20, vu.vf24.y()); lq_buffer_xyz(vu.vf30, vu.vi08 + 5); - // lq.xyzw vf20, 6(vi12) | maddz.xyz vf29, vf29, vf24 - vu.acc.madd_xyz(vu.vf29, vu.vf29, vu.vf24.z()); lq_buffer_xyzw(vu.vf20, vu.vi12 + 6); - // lq.xyzw vf22, 6(vi15) | mulax.xyzw ACC, vf31, vf24 - vu.acc.mula_xyzw(vu.vf31, vu.vf24.x()); lq_buffer_xyzw(vu.vf22, vu.vi15 + 6); - // lq.xyzw vf31, 6(vi08) | madday.xyzw ACC, vf23, vf24 - vu.acc.madda_xyzw(vu.vf23, vu.vf24.y()); lq_buffer_xyzw(vu.vf31, vu.vi08 + 6); - // lqi.xyzw vf23, vi02 | maddz.xyz vf30, vf30, vf24 - vu.acc.madd_xyz(vu.vf30, vu.vf30, vu.vf24.z()); lq_buffer_xyzw(vu.vf23, vu.vi02++); - // mtir vi12, vf13.x | mulax.xyzw ACC, vf20, vf24 - vu.acc.mula_xyzw(vu.vf20, vu.vf24.x()); vu.vi12 = vu.vf13.x_as_u16(); - // mtir vi15, vf13.y | madday.xyzw ACC, vf22, vf24 - vu.acc.madda_xyzw(vu.vf22, vu.vf24.y()); vu.vi15 = vu.vf13.y_as_u16(); - // lq.xyzw vf22, 2(vi00) | maddz.xyzw vf31, vf31, vf24 - vu.acc.madd_xyzw(vu.vf31, vu.vf31, vu.vf24.z()); lq_buffer_xyzw(vu.vf22, 2); - // lqi.xyzw vf23, vi03 | itof0.xyzw vf24, vf23 - vu.vf24.itof0(Mask::xyzw, vu.vf23); lq_buffer_xyzw(vu.vf23, vu.vi03++); - L70: -// BRANCH! - // ibgez vi09, L71 | mulaz.xyzw ACC, vf29, vf10 - vu.acc.mula_xyzw(vu.vf29, vu.vf10.z()); bc = ((s16)vu.vi09) >= 0; - // sq.xyzw vf21, 2(vi10) | maddaz.xyzw ACC, vf30, vf13 - vu.acc.madda_xyzw(vu.vf30, vu.vf13.z()); sq_buffer_xyzw(vu.vf21, vu.vi10 + 2); - if (bc) { goto L71; } - - - // nop | ftoi4.xyzw vf21, vf08 - vu.vf21.ftoi4(Mask::xyzw, vu.vf08); - L71: - // mfp.w vf20, P | maddz.xyz vf13, vf31, vf16 - vu.acc.madd_xyz(vu.vf13, vu.vf31, vu.vf16.z()); vu.vf20.mfp(Mask::w, vu.P); - // sq.xyzw vf14, 0(vi10) | miniy.xyzw vf11, vf11, vf17 - vu.vf11.mini_xyzw(vu.vf11, vu.vf17.y()); sq_buffer_xyzw(vu.vf14, vu.vi10); - // sq.xyzw vf14, 0(vi13) | miniw.w vf09, vf09, vf03 - vu.vf09.mini(Mask::w, vu.vf09, vu.vf03.w()); sq_buffer_xyzw(vu.vf14, vu.vi13); - // sq.xyzw vf21, 2(vi13) | mulaw.xyzw ACC, vf25, vf10 - vu.acc.mula_xyzw(vu.vf25, vu.vf10.w()); sq_buffer_xyzw(vu.vf21, vu.vi13 + 2); - // ilw.y vi09, -6(vi01) | mulw.xyzw vf12, vf12, vf20 - vu.vf12.mul_xyzw(vu.vf12, vu.vf20.w()); ilw_buffer(Mask::y, vu.vi09, vu.vi01 + -6); - // erleng.xyz P, vf13 | ftoi0.xyzw vf11, vf11 - vu.vf11.ftoi0(Mask::xyzw, vu.vf11); vu.P = erleng(vu.vf13); /* TODO erleng */ -// BRANCH! - // ibeq vi07, vi03, L143 | maddaw.xyzw ACC, vf26, vf13 - vu.acc.madda_xyzw(vu.vf26, vu.vf13.w()); bc = (vu.vi07 == vu.vi03); - // mr32.z vf16, vf00 | maddw.xyzw vf10, vf27, vf16 - vu.acc.madd_xyzw(vu.vf10, vu.vf27, vu.vf16.w()); vu.vf16.z() = 1.f; - if (bc) { goto L143; } - - - L72: - // lqi.xyzw vf08, vi01 | mulax.xyzw ACC, vf01, vf12 - vu.acc.mula_xyzw(vu.vf01, vu.vf12.x()); lq_buffer_xyzw(vu.vf08, vu.vi01++); - // sq.xyzw vf11, 1(vi10) | madday.xyzw ACC, vf02, vf12 - vu.acc.madda_xyzw(vu.vf02, vu.vf12.y()); sq_buffer_xyzw(vu.vf11, vu.vi10 + 1); - // sq.xyzw vf11, 1(vi13) | maddz.xyzw vf12, vf03, vf12 - vu.acc.madd_xyzw(vu.vf12, vu.vf03, vu.vf12.z()); sq_buffer_xyzw(vu.vf11, vu.vi13 + 1); - // lqi.xyzw vf11, vi01 | add.xyzw vf10, vf10, vf28 - vu.vf10.add_xyzw(vu.vf10, vu.vf28); lq_buffer_xyzw(vu.vf11, vu.vi01++); - // lqi.xyzw vf14, vi01 | maxw.w vf09, vf09, vf02 - vu.vf09.max(Mask::w, vu.vf09, vu.vf02.w()); lq_buffer_xyzw(vu.vf14, vu.vi01++); - // mtir vi10, vf08.x | itof0.xyzw vf23, vf23 - vu.vf23.itof0(Mask::xyzw, vu.vf23); vu.vi10 = vu.vf08.x_as_u16(); - // mtir vi13, vf08.y | maxx.xyzw vf12, vf12, vf00 - vu.vf12.max_xyzw(vu.vf12, vu.vf00.x()); vu.vi13 = vu.vf08.y_as_u16(); - // div Q, vf01.w, vf10.w | add.zw vf08, vf08, vf17 - vu.vf08.add(Mask::zw, vu.vf08, vu.vf17); vu.Q = vu.vf01.w() / vu.vf10.w(); - - // move.xyzw vf21, vf09 | add.xyzw vf11, vf11, vf18 - vu.vf11.add_xyzw(vu.vf11, vu.vf18); vu.vf21.move_xyzw(vu.vf09); - // iand vi10, vi10, vi05 | add.xyzw vf14, vf14, vf19 - vu.vf14.add_xyzw(vu.vf14, vu.vf19); vu.vi10 = vu.vi10 & vu.vi05; - // ilw.w vi08, -1(vi02) | mulax.xyzw ACC, vf04, vf12 - vu.acc.mula_xyzw(vu.vf04, vu.vf12.x()); ilw_buffer(Mask::w, vu.vi08, vu.vi02 + -1); -// BRANCH! - // ibgtz vi09, L73 | madday.xyzw ACC, vf05, vf12 - vu.acc.madda_xyzw(vu.vf05, vu.vf12.y()); bc = ((s16)vu.vi09) > 0; - // iand vi13, vi13, vi05 | maddaz.xyzw ACC, vf06, vf12 - vu.acc.madda_xyzw(vu.vf06, vu.vf12.z()); vu.vi13 = vu.vi13 & vu.vi05; - if (bc) { goto L73; } - - - // nop | addx.w vf21, vf21, vf17 - vu.vf21.add(Mask::w, vu.vf21, vu.vf17.x()); - L73: -// BRANCH! - // ibne vi05, vi10, L74 | maddw.xyzw vf12, vf07, vf00 - vu.acc.madd_xyzw(vu.vf12, vu.vf07, vu.vf00.w()); bc = (vu.vi05 != vu.vi10); - // ilw.x vi09, -9(vi01) | mul.xyz vf10, vf10, Q - vu.vf10.mul(Mask::xyz, vu.vf10, vu.Q); /* TODO mulq */ ilw_buffer(Mask::x, vu.vi09, vu.vi01 + -9); - if (bc) { goto L74; } - - - // mtir vi10, vf11.x | mul.xyzw vf16, vf16, Q - vu.vf16.mul_xyzw(vu.vf16, vu.Q); /* TODO mulq */ vu.vi10 = vu.vf11.x_as_u16(); - // mtir vi13, vf11.y | ftoi4.xyzw vf21, vf21 - vu.vf21.ftoi4(Mask::xyzw, vu.vf21); vu.vi13 = vu.vf11.y_as_u16(); -// BRANCH! - // b L75 | mul.xyzw vf12, vf12, vf23 - vu.vf12.mul_xyzw(vu.vf12, vu.vf23); bc = true; - // lqi.xyzw vf23, vi03 | add.xyzw vf10, vf10, vf22 - vu.vf10.add_xyzw(vu.vf10, vu.vf22); lq_buffer_xyzw(vu.vf23, vu.vi03++); - if (bc) { goto L75; } - - - L74: - // lq.xyzw vf20, 0(vi10) | mul.xyzw vf16, vf16, Q - vu.vf16.mul_xyzw(vu.vf16, vu.Q); /* TODO mulq */ lq_buffer_xyzw(vu.vf20, vu.vi10); - // nop | mulw.xyzw vf24, vf24, vf29 - vu.vf24.mul_xyzw(vu.vf24, vu.vf29.w()); - // lq.xyzw vf31, 0(vi13) | ftoi4.xyzw vf21, vf21 - vu.vf21.ftoi4(Mask::xyzw, vu.vf21); lq_buffer_xyzw(vu.vf31, vu.vi13); - // lq.xyzw vf25, 0(vi08) | mul.xyzw vf12, vf12, vf23 - vu.vf12.mul_xyzw(vu.vf12, vu.vf23); lq_buffer_xyzw(vu.vf25, vu.vi08); - // lq.xyzw vf23, 1(vi10) | add.xyzw vf10, vf10, vf22 - vu.vf10.add_xyzw(vu.vf10, vu.vf22); lq_buffer_xyzw(vu.vf23, vu.vi10 + 1); - // lq.xyzw vf20, 1(vi13) | mulax.xyzw ACC, vf20, vf24 - vu.acc.mula_xyzw(vu.vf20, vu.vf24.x()); lq_buffer_xyzw(vu.vf20, vu.vi13 + 1); - // lq.xyzw vf26, 1(vi08) | madday.xyzw ACC, vf31, vf24 - vu.acc.madda_xyzw(vu.vf31, vu.vf24.y()); lq_buffer_xyzw(vu.vf26, vu.vi08 + 1); - // lq.xyzw vf31, 2(vi10) | maddz.xyzw vf25, vf25, vf24 - vu.acc.madd_xyzw(vu.vf25, vu.vf25, vu.vf24.z()); lq_buffer_xyzw(vu.vf31, vu.vi10 + 2); - // lq.xyzw vf23, 2(vi13) | mulax.xyzw ACC, vf23, vf24 - vu.acc.mula_xyzw(vu.vf23, vu.vf24.x()); lq_buffer_xyzw(vu.vf23, vu.vi13 + 2); - // lq.xyzw vf27, 2(vi08) | madday.xyzw ACC, vf20, vf24 - vu.acc.madda_xyzw(vu.vf20, vu.vf24.y()); lq_buffer_xyzw(vu.vf27, vu.vi08 + 2); - // lq.xyzw vf20, 3(vi10) | maddz.xyzw vf26, vf26, vf24 - vu.acc.madd_xyzw(vu.vf26, vu.vf26, vu.vf24.z()); lq_buffer_xyzw(vu.vf20, vu.vi10 + 3); - // lq.xyzw vf31, 3(vi13) | mulax.xyzw ACC, vf31, vf24 - vu.acc.mula_xyzw(vu.vf31, vu.vf24.x()); lq_buffer_xyzw(vu.vf31, vu.vi13 + 3); - // lq.xyzw vf28, 3(vi08) | madday.xyzw ACC, vf23, vf24 - vu.acc.madda_xyzw(vu.vf23, vu.vf24.y()); lq_buffer_xyzw(vu.vf28, vu.vi08 + 3); - // lq.xyzw vf23, 4(vi10) | maddz.xyzw vf27, vf27, vf24 - vu.acc.madd_xyzw(vu.vf27, vu.vf27, vu.vf24.z()); lq_buffer_xyzw(vu.vf23, vu.vi10 + 4); - // lq.xyzw vf20, 4(vi13) | mulax.xyzw ACC, vf20, vf24 - vu.acc.mula_xyzw(vu.vf20, vu.vf24.x()); lq_buffer_xyzw(vu.vf20, vu.vi13 + 4); - // lq.xyz vf29, 4(vi08) | madday.xyzw ACC, vf31, vf24 - vu.acc.madda_xyzw(vu.vf31, vu.vf24.y()); lq_buffer_xyz(vu.vf29, vu.vi08 + 4); - // lq.xyzw vf31, 5(vi10) | maddz.xyzw vf28, vf28, vf24 - vu.acc.madd_xyzw(vu.vf28, vu.vf28, vu.vf24.z()); lq_buffer_xyzw(vu.vf31, vu.vi10 + 5); - // lq.xyzw vf23, 5(vi13) | mulax.xyzw ACC, vf23, vf24 - vu.acc.mula_xyzw(vu.vf23, vu.vf24.x()); lq_buffer_xyzw(vu.vf23, vu.vi13 + 5); - // lq.xyz vf30, 5(vi08) | madday.xyzw ACC, vf20, vf24 - vu.acc.madda_xyzw(vu.vf20, vu.vf24.y()); lq_buffer_xyz(vu.vf30, vu.vi08 + 5); - // lq.xyzw vf20, 6(vi10) | maddz.xyz vf29, vf29, vf24 - vu.acc.madd_xyz(vu.vf29, vu.vf29, vu.vf24.z()); lq_buffer_xyzw(vu.vf20, vu.vi10 + 6); - // lq.xyzw vf22, 6(vi13) | mulax.xyzw ACC, vf31, vf24 - vu.acc.mula_xyzw(vu.vf31, vu.vf24.x()); lq_buffer_xyzw(vu.vf22, vu.vi13 + 6); - // lq.xyzw vf31, 6(vi08) | madday.xyzw ACC, vf23, vf24 - vu.acc.madda_xyzw(vu.vf23, vu.vf24.y()); lq_buffer_xyzw(vu.vf31, vu.vi08 + 6); - // lqi.xyzw vf23, vi02 | maddz.xyz vf30, vf30, vf24 - vu.acc.madd_xyz(vu.vf30, vu.vf30, vu.vf24.z()); lq_buffer_xyzw(vu.vf23, vu.vi02++); - // mtir vi10, vf11.x | mulax.xyzw ACC, vf20, vf24 - vu.acc.mula_xyzw(vu.vf20, vu.vf24.x()); vu.vi10 = vu.vf11.x_as_u16(); - // mtir vi13, vf11.y | madday.xyzw ACC, vf22, vf24 - vu.acc.madda_xyzw(vu.vf22, vu.vf24.y()); vu.vi13 = vu.vf11.y_as_u16(); - // lq.xyzw vf22, 2(vi00) | maddz.xyzw vf31, vf31, vf24 - vu.acc.madd_xyzw(vu.vf31, vu.vf31, vu.vf24.z()); lq_buffer_xyzw(vu.vf22, 2); - // lqi.xyzw vf23, vi03 | itof0.xyzw vf24, vf23 - vu.vf24.itof0(Mask::xyzw, vu.vf23); lq_buffer_xyzw(vu.vf23, vu.vi03++); - L75: -// BRANCH! - // ibgez vi09, L76 | mulaz.xyzw ACC, vf29, vf08 - vu.acc.mula_xyzw(vu.vf29, vu.vf08.z()); bc = ((s16)vu.vi09) >= 0; - // sq.xyzw vf21, 2(vi11) | maddaz.xyzw ACC, vf30, vf11 - vu.acc.madda_xyzw(vu.vf30, vu.vf11.z()); sq_buffer_xyzw(vu.vf21, vu.vi11 + 2); - if (bc) { goto L76; } - - - // nop | ftoi4.xyzw vf21, vf09 - vu.vf21.ftoi4(Mask::xyzw, vu.vf09); - L76: - // mfp.w vf20, P | maddz.xyz vf11, vf31, vf14 - vu.acc.madd_xyz(vu.vf11, vu.vf31, vu.vf14.z()); vu.vf20.mfp(Mask::w, vu.P); - // sq.xyzw vf15, 0(vi11) | miniy.xyzw vf12, vf12, vf17 - vu.vf12.mini_xyzw(vu.vf12, vu.vf17.y()); sq_buffer_xyzw(vu.vf15, vu.vi11); - // sq.xyzw vf15, 0(vi14) | miniw.w vf10, vf10, vf03 - vu.vf10.mini(Mask::w, vu.vf10, vu.vf03.w()); sq_buffer_xyzw(vu.vf15, vu.vi14); - // sq.xyzw vf21, 2(vi14) | mulaw.xyzw ACC, vf25, vf08 - vu.acc.mula_xyzw(vu.vf25, vu.vf08.w()); sq_buffer_xyzw(vu.vf21, vu.vi14 + 2); - // ilw.y vi09, -6(vi01) | mulw.xyzw vf13, vf13, vf20 - vu.vf13.mul_xyzw(vu.vf13, vu.vf20.w()); ilw_buffer(Mask::y, vu.vi09, vu.vi01 + -6); - // erleng.xyz P, vf11 | ftoi0.xyzw vf12, vf12 - vu.vf12.ftoi0(Mask::xyzw, vu.vf12); vu.P = erleng(vu.vf11); /* TODO erleng */ -// BRANCH! - // ibeq vi07, vi03, L153 | maddaw.xyzw ACC, vf26, vf11 - vu.acc.madda_xyzw(vu.vf26, vu.vf11.w()); bc = (vu.vi07 == vu.vi03); - // mr32.z vf14, vf00 | maddw.xyzw vf08, vf27, vf14 - vu.acc.madd_xyzw(vu.vf08, vu.vf27, vu.vf14.w()); vu.vf14.z() = 1.f; - if (bc) { goto L153; } - - - L77: - // lqi.xyzw vf09, vi01 | mulax.xyzw ACC, vf01, vf13 - vu.acc.mula_xyzw(vu.vf01, vu.vf13.x()); lq_buffer_xyzw(vu.vf09, vu.vi01++); - // sq.xyzw vf12, 1(vi11) | madday.xyzw ACC, vf02, vf13 - vu.acc.madda_xyzw(vu.vf02, vu.vf13.y()); sq_buffer_xyzw(vu.vf12, vu.vi11 + 1); - // sq.xyzw vf12, 1(vi14) | maddz.xyzw vf13, vf03, vf13 - vu.acc.madd_xyzw(vu.vf13, vu.vf03, vu.vf13.z()); sq_buffer_xyzw(vu.vf12, vu.vi14 + 1); - // lqi.xyzw vf12, vi01 | add.xyzw vf08, vf08, vf28 - vu.vf08.add_xyzw(vu.vf08, vu.vf28); lq_buffer_xyzw(vu.vf12, vu.vi01++); - // lqi.xyzw vf15, vi01 | maxw.w vf10, vf10, vf02 - vu.vf10.max(Mask::w, vu.vf10, vu.vf02.w()); lq_buffer_xyzw(vu.vf15, vu.vi01++); - // mtir vi11, vf09.x | itof0.xyzw vf23, vf23 - vu.vf23.itof0(Mask::xyzw, vu.vf23); vu.vi11 = vu.vf09.x_as_u16(); - // mtir vi14, vf09.y | maxx.xyzw vf13, vf13, vf00 - vu.vf13.max_xyzw(vu.vf13, vu.vf00.x()); vu.vi14 = vu.vf09.y_as_u16(); - // div Q, vf01.w, vf08.w | add.zw vf09, vf09, vf17 - vu.vf09.add(Mask::zw, vu.vf09, vu.vf17); vu.Q = vu.vf01.w() / vu.vf08.w(); - - // move.xyzw vf21, vf10 | add.xyzw vf12, vf12, vf18 - vu.vf12.add_xyzw(vu.vf12, vu.vf18); vu.vf21.move_xyzw(vu.vf10); - // iand vi11, vi11, vi05 | add.xyzw vf15, vf15, vf19 - vu.vf15.add_xyzw(vu.vf15, vu.vf19); vu.vi11 = vu.vi11 & vu.vi05; - // ilw.w vi08, -1(vi02) | mulax.xyzw ACC, vf04, vf13 - vu.acc.mula_xyzw(vu.vf04, vu.vf13.x()); ilw_buffer(Mask::w, vu.vi08, vu.vi02 + -1); -// BRANCH! - // ibgtz vi09, L78 | madday.xyzw ACC, vf05, vf13 - vu.acc.madda_xyzw(vu.vf05, vu.vf13.y()); bc = ((s16)vu.vi09) > 0; - // iand vi14, vi14, vi05 | maddaz.xyzw ACC, vf06, vf13 - vu.acc.madda_xyzw(vu.vf06, vu.vf13.z()); vu.vi14 = vu.vi14 & vu.vi05; - if (bc) { goto L78; } - - - // nop | addx.w vf21, vf21, vf17 - vu.vf21.add(Mask::w, vu.vf21, vu.vf17.x()); - L78: -// BRANCH! - // ibne vi05, vi11, L79 | maddw.xyzw vf13, vf07, vf00 - vu.acc.madd_xyzw(vu.vf13, vu.vf07, vu.vf00.w()); bc = (vu.vi05 != vu.vi11); - // ilw.x vi09, -9(vi01) | mul.xyz vf08, vf08, Q - vu.vf08.mul(Mask::xyz, vu.vf08, vu.Q); /* TODO mulq */ ilw_buffer(Mask::x, vu.vi09, vu.vi01 + -9); - if (bc) { goto L79; } - - - // mtir vi11, vf12.x | mul.xyzw vf14, vf14, Q - vu.vf14.mul_xyzw(vu.vf14, vu.Q); /* TODO mulq */ vu.vi11 = vu.vf12.x_as_u16(); - // mtir vi14, vf12.y | ftoi4.xyzw vf21, vf21 - vu.vf21.ftoi4(Mask::xyzw, vu.vf21); vu.vi14 = vu.vf12.y_as_u16(); -// BRANCH! - // b L80 | mul.xyzw vf13, vf13, vf23 - vu.vf13.mul_xyzw(vu.vf13, vu.vf23); bc = true; - // lqi.xyzw vf23, vi03 | add.xyzw vf08, vf08, vf22 - vu.vf08.add_xyzw(vu.vf08, vu.vf22); lq_buffer_xyzw(vu.vf23, vu.vi03++); - if (bc) { goto L80; } - - - L79: - // lq.xyzw vf20, 0(vi11) | mul.xyzw vf14, vf14, Q - vu.vf14.mul_xyzw(vu.vf14, vu.Q); /* TODO mulq */ lq_buffer_xyzw(vu.vf20, vu.vi11); - // nop | mulw.xyzw vf24, vf24, vf29 - vu.vf24.mul_xyzw(vu.vf24, vu.vf29.w()); - // lq.xyzw vf31, 0(vi14) | ftoi4.xyzw vf21, vf21 - vu.vf21.ftoi4(Mask::xyzw, vu.vf21); lq_buffer_xyzw(vu.vf31, vu.vi14); - // lq.xyzw vf25, 0(vi08) | mul.xyzw vf13, vf13, vf23 - vu.vf13.mul_xyzw(vu.vf13, vu.vf23); lq_buffer_xyzw(vu.vf25, vu.vi08); - // lq.xyzw vf23, 1(vi11) | add.xyzw vf08, vf08, vf22 - vu.vf08.add_xyzw(vu.vf08, vu.vf22); lq_buffer_xyzw(vu.vf23, vu.vi11 + 1); - // lq.xyzw vf20, 1(vi14) | mulax.xyzw ACC, vf20, vf24 - vu.acc.mula_xyzw(vu.vf20, vu.vf24.x()); lq_buffer_xyzw(vu.vf20, vu.vi14 + 1); - // lq.xyzw vf26, 1(vi08) | madday.xyzw ACC, vf31, vf24 - vu.acc.madda_xyzw(vu.vf31, vu.vf24.y()); lq_buffer_xyzw(vu.vf26, vu.vi08 + 1); - // lq.xyzw vf31, 2(vi11) | maddz.xyzw vf25, vf25, vf24 - vu.acc.madd_xyzw(vu.vf25, vu.vf25, vu.vf24.z()); lq_buffer_xyzw(vu.vf31, vu.vi11 + 2); - // lq.xyzw vf23, 2(vi14) | mulax.xyzw ACC, vf23, vf24 - vu.acc.mula_xyzw(vu.vf23, vu.vf24.x()); lq_buffer_xyzw(vu.vf23, vu.vi14 + 2); - // lq.xyzw vf27, 2(vi08) | madday.xyzw ACC, vf20, vf24 - vu.acc.madda_xyzw(vu.vf20, vu.vf24.y()); lq_buffer_xyzw(vu.vf27, vu.vi08 + 2); - // lq.xyzw vf20, 3(vi11) | maddz.xyzw vf26, vf26, vf24 - vu.acc.madd_xyzw(vu.vf26, vu.vf26, vu.vf24.z()); lq_buffer_xyzw(vu.vf20, vu.vi11 + 3); - // lq.xyzw vf31, 3(vi14) | mulax.xyzw ACC, vf31, vf24 - vu.acc.mula_xyzw(vu.vf31, vu.vf24.x()); lq_buffer_xyzw(vu.vf31, vu.vi14 + 3); - // lq.xyzw vf28, 3(vi08) | madday.xyzw ACC, vf23, vf24 - vu.acc.madda_xyzw(vu.vf23, vu.vf24.y()); lq_buffer_xyzw(vu.vf28, vu.vi08 + 3); - // lq.xyzw vf23, 4(vi11) | maddz.xyzw vf27, vf27, vf24 - vu.acc.madd_xyzw(vu.vf27, vu.vf27, vu.vf24.z()); lq_buffer_xyzw(vu.vf23, vu.vi11 + 4); - // lq.xyzw vf20, 4(vi14) | mulax.xyzw ACC, vf20, vf24 - vu.acc.mula_xyzw(vu.vf20, vu.vf24.x()); lq_buffer_xyzw(vu.vf20, vu.vi14 + 4); - // lq.xyz vf29, 4(vi08) | madday.xyzw ACC, vf31, vf24 - vu.acc.madda_xyzw(vu.vf31, vu.vf24.y()); lq_buffer_xyz(vu.vf29, vu.vi08 + 4); - // lq.xyzw vf31, 5(vi11) | maddz.xyzw vf28, vf28, vf24 - vu.acc.madd_xyzw(vu.vf28, vu.vf28, vu.vf24.z()); lq_buffer_xyzw(vu.vf31, vu.vi11 + 5); - // lq.xyzw vf23, 5(vi14) | mulax.xyzw ACC, vf23, vf24 - vu.acc.mula_xyzw(vu.vf23, vu.vf24.x()); lq_buffer_xyzw(vu.vf23, vu.vi14 + 5); - // lq.xyz vf30, 5(vi08) | madday.xyzw ACC, vf20, vf24 - vu.acc.madda_xyzw(vu.vf20, vu.vf24.y()); lq_buffer_xyz(vu.vf30, vu.vi08 + 5); - // lq.xyzw vf20, 6(vi11) | maddz.xyz vf29, vf29, vf24 - vu.acc.madd_xyz(vu.vf29, vu.vf29, vu.vf24.z()); lq_buffer_xyzw(vu.vf20, vu.vi11 + 6); - // lq.xyzw vf22, 6(vi14) | mulax.xyzw ACC, vf31, vf24 - vu.acc.mula_xyzw(vu.vf31, vu.vf24.x()); lq_buffer_xyzw(vu.vf22, vu.vi14 + 6); - // lq.xyzw vf31, 6(vi08) | madday.xyzw ACC, vf23, vf24 - vu.acc.madda_xyzw(vu.vf23, vu.vf24.y()); lq_buffer_xyzw(vu.vf31, vu.vi08 + 6); - // lqi.xyzw vf23, vi02 | maddz.xyz vf30, vf30, vf24 - vu.acc.madd_xyz(vu.vf30, vu.vf30, vu.vf24.z()); lq_buffer_xyzw(vu.vf23, vu.vi02++); - // mtir vi11, vf12.x | mulax.xyzw ACC, vf20, vf24 - vu.acc.mula_xyzw(vu.vf20, vu.vf24.x()); vu.vi11 = vu.vf12.x_as_u16(); - // mtir vi14, vf12.y | madday.xyzw ACC, vf22, vf24 - vu.acc.madda_xyzw(vu.vf22, vu.vf24.y()); vu.vi14 = vu.vf12.y_as_u16(); - // lq.xyzw vf22, 2(vi00) | maddz.xyzw vf31, vf31, vf24 - vu.acc.madd_xyzw(vu.vf31, vu.vf31, vu.vf24.z()); lq_buffer_xyzw(vu.vf22, 2); - // lqi.xyzw vf23, vi03 | itof0.xyzw vf24, vf23 - vu.vf24.itof0(Mask::xyzw, vu.vf23); lq_buffer_xyzw(vu.vf23, vu.vi03++); - L80: -// BRANCH! - // ibgez vi09, L81 | mulaz.xyzw ACC, vf29, vf09 - vu.acc.mula_xyzw(vu.vf29, vu.vf09.z()); bc = ((s16)vu.vi09) >= 0; - // sq.xyzw vf21, 2(vi12) | maddaz.xyzw ACC, vf30, vf12 - vu.acc.madda_xyzw(vu.vf30, vu.vf12.z()); sq_buffer_xyzw(vu.vf21, vu.vi12 + 2); - if (bc) { goto L81; } - - - // nop | ftoi4.xyzw vf21, vf10 - vu.vf21.ftoi4(Mask::xyzw, vu.vf10); - L81: - // mfp.w vf20, P | maddz.xyz vf12, vf31, vf15 - vu.acc.madd_xyz(vu.vf12, vu.vf31, vu.vf15.z()); vu.vf20.mfp(Mask::w, vu.P); - // sq.xyzw vf16, 0(vi12) | miniy.xyzw vf13, vf13, vf17 - vu.vf13.mini_xyzw(vu.vf13, vu.vf17.y()); sq_buffer_xyzw(vu.vf16, vu.vi12); - // sq.xyzw vf16, 0(vi15) | miniw.w vf08, vf08, vf03 - vu.vf08.mini(Mask::w, vu.vf08, vu.vf03.w()); sq_buffer_xyzw(vu.vf16, vu.vi15); - // sq.xyzw vf21, 2(vi15) | mulaw.xyzw ACC, vf25, vf09 - vu.acc.mula_xyzw(vu.vf25, vu.vf09.w()); sq_buffer_xyzw(vu.vf21, vu.vi15 + 2); - // ilw.y vi09, -6(vi01) | mulw.xyzw vf11, vf11, vf20 - vu.vf11.mul_xyzw(vu.vf11, vu.vf20.w()); ilw_buffer(Mask::y, vu.vi09, vu.vi01 + -6); - // erleng.xyz P, vf12 | ftoi0.xyzw vf13, vf13 - vu.vf13.ftoi0(Mask::xyzw, vu.vf13); vu.P = erleng(vu.vf12); /* TODO erleng */ -// BRANCH! - // ibne vi07, vi03, L66 | maddaw.xyzw ACC, vf26, vf12 - vu.acc.madda_xyzw(vu.vf26, vu.vf12.w()); bc = (vu.vi07 != vu.vi03); - // mr32.z vf15, vf00 | maddw.xyzw vf09, vf27, vf15 - vu.acc.madd_xyzw(vu.vf09, vu.vf27, vu.vf15.w()); vu.vf15.z() = 1.f; - if (bc) { goto L66; } - - -// BRANCH! - // b L163 | nop - bc = true; - // nop | nop - - if (bc) { goto L163; } - - - L82: - // erleng.xyz P, vf12 | maxi.xy vf08, vf08, I - vu.vf08.maxi(Mask::xy, vu.vf08, vu.I); vu.P = erleng(vu.vf12); /* TODO erleng */ - // 3072.0 | nop :i - vu.I = 3072.0; - // nop | minii.xy vf08, vf08, I - vu.vf08.minii(Mask::xy, vu.vf08, vu.I); - // nop | maddaw.xyzw ACC, vf26, vf12 - vu.acc.madda_xyzw(vu.vf26, vu.vf12.w()); - // mr32.z vf15, vf00 | maddw.xyzw vf09, vf27, vf15 - vu.acc.madd_xyzw(vu.vf09, vu.vf27, vu.vf15.w()); vu.vf15.z() = 1.f; - // lqi.xyzw vf10, vi01 | mulax.xyzw ACC, vf01, vf11 - vu.acc.mula_xyzw(vu.vf01, vu.vf11.x()); lq_buffer_xyzw(vu.vf10, vu.vi01++); -// BRANCH! - // ibne vi04, vi03, L84 | madday.xyzw ACC, vf02, vf11 - vu.acc.madda_xyzw(vu.vf02, vu.vf11.y()); bc = (vu.vi04 != vu.vi03); - // nop | maddz.xyzw vf11, vf03, vf11 - vu.acc.madd_xyzw(vu.vf11, vu.vf03, vu.vf11.z()); - if (bc) { goto L84; } - - -// BRANCH! - // ibne vi06, vi03, JUMP_48E | nop - bc = (vu.vi06 != vu.vi03); - // nop | nop - - if (bc) { goto JUMP_48E; } - - -// BRANCH! - // b L128 | nop - bc = true; - // nop | nop - - if (bc) { goto L128; } - - - L83: - // 3072.0 | mulax.xyzw ACC, vf01, vf11 :i - vu.acc.mula_xyzw(vu.vf01, vu.vf11.x()); vu.I = 3072.0; - // lqi.xyzw vf10, vi01 | minii.xy vf08, vf08, I - vu.vf08.minii(Mask::xy, vu.vf08, vu.I); lq_buffer_xyzw(vu.vf10, vu.vi01++); - // sq.xyzw vf13, 1(vi12) | madday.xyzw ACC, vf02, vf11 - vu.acc.madda_xyzw(vu.vf02, vu.vf11.y()); sq_buffer_xyzw(vu.vf13, vu.vi12 + 1); - // sq.xyzw vf13, 1(vi15) | maddz.xyzw vf11, vf03, vf11 - vu.acc.madd_xyzw(vu.vf11, vu.vf03, vu.vf11.z()); sq_buffer_xyzw(vu.vf13, vu.vi15 + 1); - L84: - // lqi.xyzw vf13, vi01 | add.xyzw vf09, vf09, vf28 - vu.vf09.add_xyzw(vu.vf09, vu.vf28); lq_buffer_xyzw(vu.vf13, vu.vi01++); - // lqi.xyzw vf16, vi01 | maxw.w vf08, vf08, vf02 - vu.vf08.max(Mask::w, vu.vf08, vu.vf02.w()); lq_buffer_xyzw(vu.vf16, vu.vi01++); - // mtir vi08, vf10.x | itof0.xyzw vf23, vf23 - vu.vf23.itof0(Mask::xyzw, vu.vf23); vu.vi08 = vu.vf10.x_as_u16(); - // ilw.y vi09, -9(vi01) | maxx.xyzw vf11, vf11, vf00 - vu.vf11.max_xyzw(vu.vf11, vu.vf00.x()); ilw_buffer(Mask::y, vu.vi09, vu.vi01 + -9); - // nop | miniw.w vf09, vf09, vf01 - vu.vf09.mini(Mask::w, vu.vf09, vu.vf01.w()); - // div Q, vf01.w, vf09.w | add.zw vf10, vf10, vf17 - vu.vf10.add(Mask::zw, vu.vf10, vu.vf17); vu.Q = vu.vf01.w() / vu.vf09.w(); - - // move.xyzw vf21, vf08 | add.xyzw vf13, vf13, vf18 - vu.vf13.add_xyzw(vu.vf13, vu.vf18); vu.vf21.move_xyzw(vu.vf08); - // lq.xyz vf29, 4(vi08) | add.xyzw vf16, vf16, vf19 - vu.vf16.add_xyzw(vu.vf16, vu.vf19); lq_buffer_xyz(vu.vf29, vu.vi08 + 4); - // lq.xyz vf30, 5(vi08) | mulax.xyzw ACC, vf04, vf11 - vu.acc.mula_xyzw(vu.vf04, vu.vf11.x()); lq_buffer_xyz(vu.vf30, vu.vi08 + 5); -// BRANCH! - // ibgtz vi09, L85 | madday.xyzw ACC, vf05, vf11 - vu.acc.madda_xyzw(vu.vf05, vu.vf11.y()); bc = ((s16)vu.vi09) > 0; - // lq.xyzw vf31, 6(vi08) | maddaz.xyzw ACC, vf06, vf11 - vu.acc.madda_xyzw(vu.vf06, vu.vf11.z()); lq_buffer_xyzw(vu.vf31, vu.vi08 + 6); - if (bc) { goto L85; } - - - // nop | addx.w vf21, vf21, vf17 - vu.vf21.add(Mask::w, vu.vf21, vu.vf17.x()); - L85: - // lq.xyzw vf25, 0(vi08) | maddw.xyzw vf11, vf07, vf00 - vu.acc.madd_xyzw(vu.vf11, vu.vf07, vu.vf00.w()); lq_buffer_xyzw(vu.vf25, vu.vi08); - // lq.xyzw vf26, 1(vi08) | mul.xyz vf09, vf09, Q - vu.vf09.mul(Mask::xyz, vu.vf09, vu.Q); /* TODO mulq */ lq_buffer_xyzw(vu.vf26, vu.vi08 + 1); - // mtir vi12, vf13.x | mul.xyzw vf15, vf15, Q - vu.vf15.mul_xyzw(vu.vf15, vu.Q); /* TODO mulq */ vu.vi12 = vu.vf13.x_as_u16(); - // mtir vi15, vf13.y | ftoi4.xyzw vf21, vf21 - vu.vf21.ftoi4(Mask::xyzw, vu.vf21); vu.vi15 = vu.vf13.y_as_u16(); - // lq.xyzw vf27, 2(vi08) | mul.xyzw vf11, vf11, vf23 - vu.vf11.mul_xyzw(vu.vf11, vu.vf23); lq_buffer_xyzw(vu.vf27, vu.vi08 + 2); - // lqi.xyzw vf23, vi03 | add.xyzw vf09, vf09, vf22 - vu.vf09.add_xyzw(vu.vf09, vu.vf22); lq_buffer_xyzw(vu.vf23, vu.vi03++); -// BRANCH! - // ibne vi00, vi09, L86 | mulaz.xyzw ACC, vf29, vf10 - vu.acc.mula_xyzw(vu.vf29, vu.vf10.z()); bc = (vu.vi09 != 0); - // sq.xyzw vf21, 2(vi10) | maddaz.xyzw ACC, vf30, vf13 - vu.acc.madda_xyzw(vu.vf30, vu.vf13.z()); sq_buffer_xyzw(vu.vf21, vu.vi10 + 2); - if (bc) { goto L86; } - - - // nop | ftoi4.xyzw vf21, vf08 - vu.vf21.ftoi4(Mask::xyzw, vu.vf08); - L86: - // mfp.w vf20, P | maddz.xyz vf13, vf31, vf16 - vu.acc.madd_xyz(vu.vf13, vu.vf31, vu.vf16.z()); vu.vf20.mfp(Mask::w, vu.P); - // sq.xyzw vf14, 0(vi10) | miniy.xyzw vf11, vf11, vf17 - vu.vf11.mini_xyzw(vu.vf11, vu.vf17.y()); sq_buffer_xyzw(vu.vf14, vu.vi10); - // sq.xyzw vf14, 0(vi13) | miniw.w vf09, vf09, vf03 - vu.vf09.mini(Mask::w, vu.vf09, vu.vf03.w()); sq_buffer_xyzw(vu.vf14, vu.vi13); - // sq.xyzw vf21, 2(vi13) | mulaw.xyzw ACC, vf25, vf10 - vu.acc.mula_xyzw(vu.vf25, vu.vf10.w()); sq_buffer_xyzw(vu.vf21, vu.vi13 + 2); - // lq.xyzw vf28, 3(vi08) | mulw.xyzw vf12, vf12, vf20 - vu.vf12.mul_xyzw(vu.vf12, vu.vf20.w()); lq_buffer_xyzw(vu.vf28, vu.vi08 + 3); - // 1024.0 | ftoi0.xyzw vf11, vf11 :i - vu.vf11.ftoi0(Mask::xyzw, vu.vf11); vu.I = 1024.0; - // erleng.xyz P, vf13 | maxi.xy vf09, vf09, I - vu.vf09.maxi(Mask::xy, vu.vf09, vu.I); vu.P = erleng(vu.vf13); /* TODO erleng */ -// BRANCH! - // ibne vi04, vi03, L87 | maddaw.xyzw ACC, vf26, vf13 - vu.acc.madda_xyzw(vu.vf26, vu.vf13.w()); bc = (vu.vi04 != vu.vi03); - // mr32.z vf16, vf00 | maddw.xyzw vf10, vf27, vf16 - vu.acc.madd_xyzw(vu.vf10, vu.vf27, vu.vf16.w()); vu.vf16.z() = 1.f; - if (bc) { goto L87; } - - -// BRANCH! - // ibne vi06, vi03, L100 | nop - bc = (vu.vi06 != vu.vi03); - // ilw.y vi09, -6(vi01) | nop - ilw_buffer(Mask::y, vu.vi09, vu.vi01 + -6); - if (bc) { goto L100; } - - -// BRANCH! - // ibne vi07, vi03, L133 | nop - bc = (vu.vi07 != vu.vi03); - // nop | nop - - if (bc) { goto L133; } - - -// BRANCH! - // b L143 | nop - bc = true; - // nop | nop - - if (bc) { goto L143; } - - - L87: - // 3072.0 | mulax.xyzw ACC, vf01, vf12 :i - vu.acc.mula_xyzw(vu.vf01, vu.vf12.x()); vu.I = 3072.0; - // lqi.xyzw vf08, vi01 | minii.xy vf09, vf09, I - vu.vf09.minii(Mask::xy, vu.vf09, vu.I); lq_buffer_xyzw(vu.vf08, vu.vi01++); - // sq.xyzw vf11, 1(vi10) | madday.xyzw ACC, vf02, vf12 - vu.acc.madda_xyzw(vu.vf02, vu.vf12.y()); sq_buffer_xyzw(vu.vf11, vu.vi10 + 1); - // sq.xyzw vf11, 1(vi13) | maddz.xyzw vf12, vf03, vf12 - vu.acc.madd_xyzw(vu.vf12, vu.vf03, vu.vf12.z()); sq_buffer_xyzw(vu.vf11, vu.vi13 + 1); - // lqi.xyzw vf11, vi01 | add.xyzw vf10, vf10, vf28 - vu.vf10.add_xyzw(vu.vf10, vu.vf28); lq_buffer_xyzw(vu.vf11, vu.vi01++); - // lqi.xyzw vf14, vi01 | maxw.w vf09, vf09, vf02 - vu.vf09.max(Mask::w, vu.vf09, vu.vf02.w()); lq_buffer_xyzw(vu.vf14, vu.vi01++); - // mtir vi08, vf08.x | itof0.xyzw vf23, vf23 - vu.vf23.itof0(Mask::xyzw, vu.vf23); vu.vi08 = vu.vf08.x_as_u16(); - // ilw.y vi09, -9(vi01) | maxx.xyzw vf12, vf12, vf00 - vu.vf12.max_xyzw(vu.vf12, vu.vf00.x()); ilw_buffer(Mask::y, vu.vi09, vu.vi01 + -9); - // nop | miniw.w vf10, vf10, vf01 - vu.vf10.mini(Mask::w, vu.vf10, vu.vf01.w()); - // div Q, vf01.w, vf10.w | add.zw vf08, vf08, vf17 - vu.vf08.add(Mask::zw, vu.vf08, vu.vf17); vu.Q = vu.vf01.w() / vu.vf10.w(); - - // move.xyzw vf21, vf09 | add.xyzw vf11, vf11, vf18 - vu.vf11.add_xyzw(vu.vf11, vu.vf18); vu.vf21.move_xyzw(vu.vf09); - // lq.xyz vf29, 4(vi08) | add.xyzw vf14, vf14, vf19 - vu.vf14.add_xyzw(vu.vf14, vu.vf19); lq_buffer_xyz(vu.vf29, vu.vi08 + 4); - // lq.xyz vf30, 5(vi08) | mulax.xyzw ACC, vf04, vf12 - vu.acc.mula_xyzw(vu.vf04, vu.vf12.x()); lq_buffer_xyz(vu.vf30, vu.vi08 + 5); -// BRANCH! - // ibgtz vi09, L88 | madday.xyzw ACC, vf05, vf12 - vu.acc.madda_xyzw(vu.vf05, vu.vf12.y()); bc = ((s16)vu.vi09) > 0; - // lq.xyzw vf31, 6(vi08) | maddaz.xyzw ACC, vf06, vf12 - vu.acc.madda_xyzw(vu.vf06, vu.vf12.z()); lq_buffer_xyzw(vu.vf31, vu.vi08 + 6); - if (bc) { goto L88; } - - - // nop | addx.w vf21, vf21, vf17 - vu.vf21.add(Mask::w, vu.vf21, vu.vf17.x()); - L88: - // lq.xyzw vf25, 0(vi08) | maddw.xyzw vf12, vf07, vf00 - vu.acc.madd_xyzw(vu.vf12, vu.vf07, vu.vf00.w()); lq_buffer_xyzw(vu.vf25, vu.vi08); - // lq.xyzw vf26, 1(vi08) | mul.xyz vf10, vf10, Q - vu.vf10.mul(Mask::xyz, vu.vf10, vu.Q); /* TODO mulq */ lq_buffer_xyzw(vu.vf26, vu.vi08 + 1); - // mtir vi10, vf11.x | mul.xyzw vf16, vf16, Q - vu.vf16.mul_xyzw(vu.vf16, vu.Q); /* TODO mulq */ vu.vi10 = vu.vf11.x_as_u16(); - // mtir vi13, vf11.y | ftoi4.xyzw vf21, vf21 - vu.vf21.ftoi4(Mask::xyzw, vu.vf21); vu.vi13 = vu.vf11.y_as_u16(); - // lq.xyzw vf27, 2(vi08) | mul.xyzw vf12, vf12, vf23 - vu.vf12.mul_xyzw(vu.vf12, vu.vf23); lq_buffer_xyzw(vu.vf27, vu.vi08 + 2); - // lqi.xyzw vf23, vi03 | add.xyzw vf10, vf10, vf22 - vu.vf10.add_xyzw(vu.vf10, vu.vf22); lq_buffer_xyzw(vu.vf23, vu.vi03++); -// BRANCH! - // ibne vi00, vi09, L89 | mulaz.xyzw ACC, vf29, vf08 - vu.acc.mula_xyzw(vu.vf29, vu.vf08.z()); bc = (vu.vi09 != 0); - // sq.xyzw vf21, 2(vi11) | maddaz.xyzw ACC, vf30, vf11 - vu.acc.madda_xyzw(vu.vf30, vu.vf11.z()); sq_buffer_xyzw(vu.vf21, vu.vi11 + 2); - if (bc) { goto L89; } - - - // nop | ftoi4.xyzw vf21, vf09 - vu.vf21.ftoi4(Mask::xyzw, vu.vf09); - L89: - // mfp.w vf20, P | maddz.xyz vf11, vf31, vf14 - vu.acc.madd_xyz(vu.vf11, vu.vf31, vu.vf14.z()); vu.vf20.mfp(Mask::w, vu.P); - // sq.xyzw vf15, 0(vi11) | miniy.xyzw vf12, vf12, vf17 - vu.vf12.mini_xyzw(vu.vf12, vu.vf17.y()); sq_buffer_xyzw(vu.vf15, vu.vi11); - // sq.xyzw vf15, 0(vi14) | miniw.w vf10, vf10, vf03 - vu.vf10.mini(Mask::w, vu.vf10, vu.vf03.w()); sq_buffer_xyzw(vu.vf15, vu.vi14); - // sq.xyzw vf21, 2(vi14) | mulaw.xyzw ACC, vf25, vf08 - vu.acc.mula_xyzw(vu.vf25, vu.vf08.w()); sq_buffer_xyzw(vu.vf21, vu.vi14 + 2); - // lq.xyzw vf28, 3(vi08) | mulw.xyzw vf13, vf13, vf20 - vu.vf13.mul_xyzw(vu.vf13, vu.vf20.w()); lq_buffer_xyzw(vu.vf28, vu.vi08 + 3); - // 1024.0 | ftoi0.xyzw vf12, vf12 :i - vu.vf12.ftoi0(Mask::xyzw, vu.vf12); vu.I = 1024.0; - // erleng.xyz P, vf11 | maxi.xy vf10, vf10, I - vu.vf10.maxi(Mask::xy, vu.vf10, vu.I); vu.P = erleng(vu.vf11); /* TODO erleng */ -// BRANCH! - // ibne vi04, vi03, L90 | maddaw.xyzw ACC, vf26, vf11 - vu.acc.madda_xyzw(vu.vf26, vu.vf11.w()); bc = (vu.vi04 != vu.vi03); - // mr32.z vf14, vf00 | maddw.xyzw vf08, vf27, vf14 - vu.acc.madd_xyzw(vu.vf08, vu.vf27, vu.vf14.w()); vu.vf14.z() = 1.f; - if (bc) { goto L90; } - - -// BRANCH! - // ibne vi06, vi03, L105 | nop - bc = (vu.vi06 != vu.vi03); - // ilw.y vi09, -6(vi01) | nop - ilw_buffer(Mask::y, vu.vi09, vu.vi01 + -6); - if (bc) { goto L105; } - - -// BRANCH! - // ibne vi07, vi03, L138 | nop - bc = (vu.vi07 != vu.vi03); - // nop | nop - - if (bc) { goto L138; } - - -// BRANCH! - // b L153 | nop - bc = true; - // nop | nop - - if (bc) { goto L153; } - - - L90: - // 3072.0 | mulax.xyzw ACC, vf01, vf13 :i - vu.acc.mula_xyzw(vu.vf01, vu.vf13.x()); vu.I = 3072.0; - // lqi.xyzw vf09, vi01 | minii.xy vf10, vf10, I - vu.vf10.minii(Mask::xy, vu.vf10, vu.I); lq_buffer_xyzw(vu.vf09, vu.vi01++); - // sq.xyzw vf12, 1(vi11) | madday.xyzw ACC, vf02, vf13 - vu.acc.madda_xyzw(vu.vf02, vu.vf13.y()); sq_buffer_xyzw(vu.vf12, vu.vi11 + 1); - // sq.xyzw vf12, 1(vi14) | maddz.xyzw vf13, vf03, vf13 - vu.acc.madd_xyzw(vu.vf13, vu.vf03, vu.vf13.z()); sq_buffer_xyzw(vu.vf12, vu.vi14 + 1); - // lqi.xyzw vf12, vi01 | add.xyzw vf08, vf08, vf28 - vu.vf08.add_xyzw(vu.vf08, vu.vf28); lq_buffer_xyzw(vu.vf12, vu.vi01++); - // lqi.xyzw vf15, vi01 | maxw.w vf10, vf10, vf02 - vu.vf10.max(Mask::w, vu.vf10, vu.vf02.w()); lq_buffer_xyzw(vu.vf15, vu.vi01++); - // mtir vi08, vf09.x | itof0.xyzw vf23, vf23 - vu.vf23.itof0(Mask::xyzw, vu.vf23); vu.vi08 = vu.vf09.x_as_u16(); - // ilw.y vi09, -9(vi01) | maxx.xyzw vf13, vf13, vf00 - vu.vf13.max_xyzw(vu.vf13, vu.vf00.x()); ilw_buffer(Mask::y, vu.vi09, vu.vi01 + -9); - // nop | miniw.w vf08, vf08, vf01 - vu.vf08.mini(Mask::w, vu.vf08, vu.vf01.w()); - // div Q, vf01.w, vf08.w | add.zw vf09, vf09, vf17 - vu.vf09.add(Mask::zw, vu.vf09, vu.vf17); vu.Q = vu.vf01.w() / vu.vf08.w(); - - // move.xyzw vf21, vf10 | add.xyzw vf12, vf12, vf18 - vu.vf12.add_xyzw(vu.vf12, vu.vf18); vu.vf21.move_xyzw(vu.vf10); - // lq.xyz vf29, 4(vi08) | add.xyzw vf15, vf15, vf19 - vu.vf15.add_xyzw(vu.vf15, vu.vf19); lq_buffer_xyz(vu.vf29, vu.vi08 + 4); - // lq.xyz vf30, 5(vi08) | mulax.xyzw ACC, vf04, vf13 - vu.acc.mula_xyzw(vu.vf04, vu.vf13.x()); lq_buffer_xyz(vu.vf30, vu.vi08 + 5); -// BRANCH! - // ibgtz vi09, L91 | madday.xyzw ACC, vf05, vf13 - vu.acc.madda_xyzw(vu.vf05, vu.vf13.y()); bc = ((s16)vu.vi09) > 0; - // lq.xyzw vf31, 6(vi08) | maddaz.xyzw ACC, vf06, vf13 - vu.acc.madda_xyzw(vu.vf06, vu.vf13.z()); lq_buffer_xyzw(vu.vf31, vu.vi08 + 6); - if (bc) { goto L91; } - - - // nop | addx.w vf21, vf21, vf17 - vu.vf21.add(Mask::w, vu.vf21, vu.vf17.x()); - L91: - // lq.xyzw vf25, 0(vi08) | maddw.xyzw vf13, vf07, vf00 - vu.acc.madd_xyzw(vu.vf13, vu.vf07, vu.vf00.w()); lq_buffer_xyzw(vu.vf25, vu.vi08); - // lq.xyzw vf26, 1(vi08) | mul.xyz vf08, vf08, Q - vu.vf08.mul(Mask::xyz, vu.vf08, vu.Q); /* TODO mulq */ lq_buffer_xyzw(vu.vf26, vu.vi08 + 1); - // mtir vi11, vf12.x | mul.xyzw vf14, vf14, Q - vu.vf14.mul_xyzw(vu.vf14, vu.Q); /* TODO mulq */ vu.vi11 = vu.vf12.x_as_u16(); - // mtir vi14, vf12.y | ftoi4.xyzw vf21, vf21 - vu.vf21.ftoi4(Mask::xyzw, vu.vf21); vu.vi14 = vu.vf12.y_as_u16(); - // lq.xyzw vf27, 2(vi08) | mul.xyzw vf13, vf13, vf23 - vu.vf13.mul_xyzw(vu.vf13, vu.vf23); lq_buffer_xyzw(vu.vf27, vu.vi08 + 2); - // lqi.xyzw vf23, vi03 | add.xyzw vf08, vf08, vf22 - vu.vf08.add_xyzw(vu.vf08, vu.vf22); lq_buffer_xyzw(vu.vf23, vu.vi03++); -// BRANCH! - // ibne vi00, vi09, L92 | mulaz.xyzw ACC, vf29, vf09 - vu.acc.mula_xyzw(vu.vf29, vu.vf09.z()); bc = (vu.vi09 != 0); - // sq.xyzw vf21, 2(vi12) | maddaz.xyzw ACC, vf30, vf12 - vu.acc.madda_xyzw(vu.vf30, vu.vf12.z()); sq_buffer_xyzw(vu.vf21, vu.vi12 + 2); - if (bc) { goto L92; } - - - // nop | ftoi4.xyzw vf21, vf10 - vu.vf21.ftoi4(Mask::xyzw, vu.vf10); - L92: - // mfp.w vf20, P | maddz.xyz vf12, vf31, vf15 - vu.acc.madd_xyz(vu.vf12, vu.vf31, vu.vf15.z()); vu.vf20.mfp(Mask::w, vu.P); - // sq.xyzw vf16, 0(vi12) | miniy.xyzw vf13, vf13, vf17 - vu.vf13.mini_xyzw(vu.vf13, vu.vf17.y()); sq_buffer_xyzw(vu.vf16, vu.vi12); - // sq.xyzw vf16, 0(vi15) | miniw.w vf08, vf08, vf03 - vu.vf08.mini(Mask::w, vu.vf08, vu.vf03.w()); sq_buffer_xyzw(vu.vf16, vu.vi15); - // sq.xyzw vf21, 2(vi15) | mulaw.xyzw ACC, vf25, vf09 - vu.acc.mula_xyzw(vu.vf25, vu.vf09.w()); sq_buffer_xyzw(vu.vf21, vu.vi15 + 2); - // lq.xyzw vf28, 3(vi08) | mulw.xyzw vf11, vf11, vf20 - vu.vf11.mul_xyzw(vu.vf11, vu.vf20.w()); lq_buffer_xyzw(vu.vf28, vu.vi08 + 3); - // 1024.0 | ftoi0.xyzw vf13, vf13 :i - vu.vf13.ftoi0(Mask::xyzw, vu.vf13); vu.I = 1024.0; - // erleng.xyz P, vf12 | maxi.xy vf08, vf08, I - vu.vf08.maxi(Mask::xy, vu.vf08, vu.I); vu.P = erleng(vu.vf12); /* TODO erleng */ -// BRANCH! - // ibne vi04, vi03, L83 | maddaw.xyzw ACC, vf26, vf12 - vu.acc.madda_xyzw(vu.vf26, vu.vf12.w()); bc = (vu.vi04 != vu.vi03); - // mr32.z vf15, vf00 | maddw.xyzw vf09, vf27, vf15 - vu.acc.madd_xyzw(vu.vf09, vu.vf27, vu.vf15.w()); vu.vf15.z() = 1.f; - if (bc) { goto L83; } - - -// BRANCH! - // ibne vi06, vi03, L94 | nop - bc = (vu.vi06 != vu.vi03); - // ilw.y vi09, -6(vi01) | nop - ilw_buffer(Mask::y, vu.vi09, vu.vi01 + -6); - if (bc) { goto L94; } - - -// BRANCH! - // ibne vi07, vi03, L127 | nop - bc = (vu.vi07 != vu.vi03); - // nop | nop - - if (bc) { goto L127; } - - -// BRANCH! - // b L163 | nop - bc = true; - // nop | nop - - if (bc) { goto L163; } - - - L93: - // erleng.xyz P, vf12 | maxi.xy vf08, vf08, I - vu.vf08.maxi(Mask::xy, vu.vf08, vu.I); vu.P = erleng(vu.vf12); /* TODO erleng */ - // 3072.0 | nop :i - vu.I = 3072.0; - // nop | minii.xy vf08, vf08, I - vu.vf08.minii(Mask::xy, vu.vf08, vu.I); -// BRANCH! - // ibeq vi06, vi03, L126 | maddaw.xyzw ACC, vf26, vf12 - vu.acc.madda_xyzw(vu.vf26, vu.vf12.w()); bc = (vu.vi06 == vu.vi03); - // mr32.z vf15, vf00 | maddw.xyzw vf09, vf27, vf15 - vu.acc.madd_xyzw(vu.vf09, vu.vf27, vu.vf15.w()); vu.vf15.z() = 1.f; - if (bc) { goto L126; } - - - // lqi.xyzw vf10, vi01 | mulax.xyzw ACC, vf01, vf11 - vu.acc.mula_xyzw(vu.vf01, vu.vf11.x()); lq_buffer_xyzw(vu.vf10, vu.vi01++); - // jr vi08 | madday.xyzw ACC, vf02, vf11 - vu.acc.madda_xyzw(vu.vf02, vu.vf11.y()); - // nop | maddz.xyzw vf11, vf03, vf11 - vu.acc.madd_xyzw(vu.vf11, vu.vf03, vu.vf11.z()); - switch (vu.vi08) { - case 0x1a1: - goto JUMP_1A1; - case 0x48e: - goto JUMP_48E; - case 0x243: - goto JUMP_243; - case 0x539: - goto JUMP_539; - default: - ASSERT_MSG(false, fmt::format("bad jump to {:x}", vu.vi08)); - } - L94: - // 3072.0 | mulax.xyzw ACC, vf01, vf11 :i - vu.acc.mula_xyzw(vu.vf01, vu.vf11.x()); vu.I = 3072.0; - // lqi.xyzw vf10, vi01 | minii.xy vf08, vf08, I - vu.vf08.minii(Mask::xy, vu.vf08, vu.I); lq_buffer_xyzw(vu.vf10, vu.vi01++); - // sq.xyzw vf13, 1(vi12) | madday.xyzw ACC, vf02, vf11 - vu.acc.madda_xyzw(vu.vf02, vu.vf11.y()); sq_buffer_xyzw(vu.vf13, vu.vi12 + 1); - // sq.xyzw vf13, 1(vi15) | maddz.xyzw vf11, vf03, vf11 - vu.acc.madd_xyzw(vu.vf11, vu.vf03, vu.vf11.z()); sq_buffer_xyzw(vu.vf13, vu.vi15 + 1); - JUMP_48E: - // lqi.xyzw vf13, vi01 | add.xyzw vf09, vf09, vf28 - vu.vf09.add_xyzw(vu.vf09, vu.vf28); lq_buffer_xyzw(vu.vf13, vu.vi01++); - // lqi.xyzw vf16, vi01 | maxw.w vf08, vf08, vf02 - vu.vf08.max(Mask::w, vu.vf08, vu.vf02.w()); lq_buffer_xyzw(vu.vf16, vu.vi01++); - // mtir vi12, vf10.x | itof0.xyzw vf23, vf23 - vu.vf23.itof0(Mask::xyzw, vu.vf23); vu.vi12 = vu.vf10.x_as_u16(); - // mtir vi15, vf10.y | maxx.xyzw vf11, vf11, vf00 - vu.vf11.max_xyzw(vu.vf11, vu.vf00.x()); vu.vi15 = vu.vf10.y_as_u16(); - // nop | miniw.w vf09, vf09, vf01 - vu.vf09.mini(Mask::w, vu.vf09, vu.vf01.w()); - // div Q, vf01.w, vf09.w | add.zw vf10, vf10, vf17 - vu.vf10.add(Mask::zw, vu.vf10, vu.vf17); vu.Q = vu.vf01.w() / vu.vf09.w(); - - // move.xyzw vf21, vf08 | add.xyzw vf13, vf13, vf18 - vu.vf13.add_xyzw(vu.vf13, vu.vf18); vu.vf21.move_xyzw(vu.vf08); - // iand vi12, vi12, vi05 | add.xyzw vf16, vf16, vf19 - vu.vf16.add_xyzw(vu.vf16, vu.vf19); vu.vi12 = vu.vi12 & vu.vi05; - // nop | mulax.xyzw ACC, vf04, vf11 - vu.acc.mula_xyzw(vu.vf04, vu.vf11.x()); -// BRANCH! - // ibgtz vi09, L96 | madday.xyzw ACC, vf05, vf11 - vu.acc.madda_xyzw(vu.vf05, vu.vf11.y()); bc = ((s16)vu.vi09) > 0; - // iand vi15, vi15, vi05 | maddaz.xyzw ACC, vf06, vf11 - vu.acc.madda_xyzw(vu.vf06, vu.vf11.z()); vu.vi15 = vu.vi15 & vu.vi05; - if (bc) { goto L96; } - - - // nop | addx.w vf21, vf21, vf17 - vu.vf21.add(Mask::w, vu.vf21, vu.vf17.x()); - L96: -// BRANCH! - // ibne vi05, vi12, L97 | maddw.xyzw vf11, vf07, vf00 - vu.acc.madd_xyzw(vu.vf11, vu.vf07, vu.vf00.w()); bc = (vu.vi05 != vu.vi12); - // ilw.x vi09, -9(vi01) | mul.xyz vf09, vf09, Q - vu.vf09.mul(Mask::xyz, vu.vf09, vu.Q); /* TODO mulq */ ilw_buffer(Mask::x, vu.vi09, vu.vi01 + -9); - if (bc) { goto L97; } - - - // mtir vi12, vf13.x | mul.xyzw vf15, vf15, Q - vu.vf15.mul_xyzw(vu.vf15, vu.Q); /* TODO mulq */ vu.vi12 = vu.vf13.x_as_u16(); - // mtir vi15, vf13.y | ftoi4.xyzw vf21, vf21 - vu.vf21.ftoi4(Mask::xyzw, vu.vf21); vu.vi15 = vu.vf13.y_as_u16(); -// BRANCH! - // b L98 | mul.xyzw vf11, vf11, vf23 - vu.vf11.mul_xyzw(vu.vf11, vu.vf23); bc = true; - // lqi.xyzw vf23, vi03 | add.xyzw vf09, vf09, vf22 - vu.vf09.add_xyzw(vu.vf09, vu.vf22); lq_buffer_xyzw(vu.vf23, vu.vi03++); - if (bc) { goto L98; } - - - L97: - // lq.xyzw vf20, 0(vi12) | mul.xyzw vf15, vf15, Q - vu.vf15.mul_xyzw(vu.vf15, vu.Q); /* TODO mulq */ lq_buffer_xyzw(vu.vf20, vu.vi12); - // nop | mulw.xyzw vf24, vf24, vf29 - vu.vf24.mul_xyzw(vu.vf24, vu.vf29.w()); - // lq.xyzw vf25, 0(vi15) | ftoi4.xyzw vf21, vf21 - vu.vf21.ftoi4(Mask::xyzw, vu.vf21); lq_buffer_xyzw(vu.vf25, vu.vi15); - // lq.xyzw vf23, 1(vi12) | mul.xyzw vf11, vf11, vf23 - vu.vf11.mul_xyzw(vu.vf11, vu.vf23); lq_buffer_xyzw(vu.vf23, vu.vi12 + 1); - // lq.xyzw vf26, 1(vi15) | add.xyzw vf09, vf09, vf22 - vu.vf09.add_xyzw(vu.vf09, vu.vf22); lq_buffer_xyzw(vu.vf26, vu.vi15 + 1); - // lq.xyzw vf20, 2(vi12) | mulax.xyzw ACC, vf20, vf24 - vu.acc.mula_xyzw(vu.vf20, vu.vf24.x()); lq_buffer_xyzw(vu.vf20, vu.vi12 + 2); - // lq.xyzw vf27, 2(vi15) | maddy.xyzw vf25, vf25, vf24 - vu.acc.madd_xyzw(vu.vf25, vu.vf25, vu.vf24.y()); lq_buffer_xyzw(vu.vf27, vu.vi15 + 2); - // lq.xyzw vf23, 3(vi12) | mulax.xyzw ACC, vf23, vf24 - vu.acc.mula_xyzw(vu.vf23, vu.vf24.x()); lq_buffer_xyzw(vu.vf23, vu.vi12 + 3); - // lq.xyzw vf28, 3(vi15) | maddy.xyzw vf26, vf26, vf24 - vu.acc.madd_xyzw(vu.vf26, vu.vf26, vu.vf24.y()); lq_buffer_xyzw(vu.vf28, vu.vi15 + 3); - // lq.xyzw vf20, 4(vi12) | mulax.xyzw ACC, vf20, vf24 - vu.acc.mula_xyzw(vu.vf20, vu.vf24.x()); lq_buffer_xyzw(vu.vf20, vu.vi12 + 4); - // lq.xyz vf29, 4(vi15) | maddy.xyzw vf27, vf27, vf24 - vu.acc.madd_xyzw(vu.vf27, vu.vf27, vu.vf24.y()); lq_buffer_xyz(vu.vf29, vu.vi15 + 4); - // lq.xyzw vf23, 5(vi12) | mulax.xyzw ACC, vf23, vf24 - vu.acc.mula_xyzw(vu.vf23, vu.vf24.x()); lq_buffer_xyzw(vu.vf23, vu.vi12 + 5); - // lq.xyz vf30, 5(vi15) | maddy.xyzw vf28, vf28, vf24 - vu.acc.madd_xyzw(vu.vf28, vu.vf28, vu.vf24.y()); lq_buffer_xyz(vu.vf30, vu.vi15 + 5); - // lq.xyzw vf20, 6(vi12) | mulax.xyzw ACC, vf20, vf24 - vu.acc.mula_xyzw(vu.vf20, vu.vf24.x()); lq_buffer_xyzw(vu.vf20, vu.vi12 + 6); - // lq.xyzw vf31, 6(vi15) | maddy.xyz vf29, vf29, vf24 - vu.acc.madd_xyz(vu.vf29, vu.vf29, vu.vf24.y()); lq_buffer_xyzw(vu.vf31, vu.vi15 + 6); - // mtir vi12, vf13.x | mulax.xyzw ACC, vf23, vf24 - vu.acc.mula_xyzw(vu.vf23, vu.vf24.x()); vu.vi12 = vu.vf13.x_as_u16(); - // mtir vi15, vf13.y | maddy.xyz vf30, vf30, vf24 - vu.acc.madd_xyz(vu.vf30, vu.vf30, vu.vf24.y()); vu.vi15 = vu.vf13.y_as_u16(); -// BRANCH! - // b L113 | mulax.xyzw ACC, vf20, vf24 - vu.acc.mula_xyzw(vu.vf20, vu.vf24.x()); bc = true; - // lqi.xyzw vf23, vi03 | maddy.xyzw vf31, vf31, vf24 - vu.acc.madd_xyzw(vu.vf31, vu.vf31, vu.vf24.y()); lq_buffer_xyzw(vu.vf23, vu.vi03++); - if (bc) { goto L113; } - - - L98: -// BRANCH! - // ibgez vi09, L99 | mulaz.xyzw ACC, vf29, vf10 - vu.acc.mula_xyzw(vu.vf29, vu.vf10.z()); bc = ((s16)vu.vi09) >= 0; - // sq.xyzw vf21, 2(vi10) | maddaz.xyzw ACC, vf30, vf13 - vu.acc.madda_xyzw(vu.vf30, vu.vf13.z()); sq_buffer_xyzw(vu.vf21, vu.vi10 + 2); - if (bc) { goto L99; } - - - // nop | ftoi4.xyzw vf21, vf08 - vu.vf21.ftoi4(Mask::xyzw, vu.vf08); - L99: - // mfp.w vf20, P | maddz.xyz vf13, vf31, vf16 - vu.acc.madd_xyz(vu.vf13, vu.vf31, vu.vf16.z()); vu.vf20.mfp(Mask::w, vu.P); - // sq.xyzw vf14, 0(vi10) | miniy.xyzw vf11, vf11, vf17 - vu.vf11.mini_xyzw(vu.vf11, vu.vf17.y()); sq_buffer_xyzw(vu.vf14, vu.vi10); - // sq.xyzw vf14, 0(vi13) | miniw.w vf09, vf09, vf03 - vu.vf09.mini(Mask::w, vu.vf09, vu.vf03.w()); sq_buffer_xyzw(vu.vf14, vu.vi13); - // sq.xyzw vf21, 2(vi13) | mulaw.xyzw ACC, vf25, vf10 - vu.acc.mula_xyzw(vu.vf25, vu.vf10.w()); sq_buffer_xyzw(vu.vf21, vu.vi13 + 2); - // ilw.y vi09, -6(vi01) | mulw.xyzw vf12, vf12, vf20 - vu.vf12.mul_xyzw(vu.vf12, vu.vf20.w()); ilw_buffer(Mask::y, vu.vi09, vu.vi01 + -6); - // 1024.0 | ftoi0.xyzw vf11, vf11 :i - vu.vf11.ftoi0(Mask::xyzw, vu.vf11); vu.I = 1024.0; - // erleng.xyz P, vf13 | maxi.xy vf09, vf09, I - vu.vf09.maxi(Mask::xy, vu.vf09, vu.I); vu.P = erleng(vu.vf13); /* TODO erleng */ -// BRANCH! - // ibne vi06, vi03, L100 | maddaw.xyzw ACC, vf26, vf13 - vu.acc.madda_xyzw(vu.vf26, vu.vf13.w()); bc = (vu.vi06 != vu.vi03); - // mr32.z vf16, vf00 | maddw.xyzw vf10, vf27, vf16 - vu.acc.madd_xyzw(vu.vf10, vu.vf27, vu.vf16.w()); vu.vf16.z() = 1.f; - if (bc) { goto L100; } - - -// BRANCH! - // ibne vi07, vi03, L133 | nop - bc = (vu.vi07 != vu.vi03); - // nop | nop - - if (bc) { goto L133; } - - -// BRANCH! - // b L143 | nop - bc = true; - // nop | nop - - if (bc) { goto L143; } - - - L100: - // 3072.0 | mulax.xyzw ACC, vf01, vf12 :i - vu.acc.mula_xyzw(vu.vf01, vu.vf12.x()); vu.I = 3072.0; - // lqi.xyzw vf08, vi01 | minii.xy vf09, vf09, I - vu.vf09.minii(Mask::xy, vu.vf09, vu.I); lq_buffer_xyzw(vu.vf08, vu.vi01++); - // sq.xyzw vf11, 1(vi10) | madday.xyzw ACC, vf02, vf12 - vu.acc.madda_xyzw(vu.vf02, vu.vf12.y()); sq_buffer_xyzw(vu.vf11, vu.vi10 + 1); - // sq.xyzw vf11, 1(vi13) | maddz.xyzw vf12, vf03, vf12 - vu.acc.madd_xyzw(vu.vf12, vu.vf03, vu.vf12.z()); sq_buffer_xyzw(vu.vf11, vu.vi13 + 1); - // lqi.xyzw vf11, vi01 | add.xyzw vf10, vf10, vf28 - vu.vf10.add_xyzw(vu.vf10, vu.vf28); lq_buffer_xyzw(vu.vf11, vu.vi01++); - // lqi.xyzw vf14, vi01 | maxw.w vf09, vf09, vf02 - vu.vf09.max(Mask::w, vu.vf09, vu.vf02.w()); lq_buffer_xyzw(vu.vf14, vu.vi01++); - // mtir vi10, vf08.x | itof0.xyzw vf23, vf23 - vu.vf23.itof0(Mask::xyzw, vu.vf23); vu.vi10 = vu.vf08.x_as_u16(); - // mtir vi13, vf08.y | maxx.xyzw vf12, vf12, vf00 - vu.vf12.max_xyzw(vu.vf12, vu.vf00.x()); vu.vi13 = vu.vf08.y_as_u16(); - // nop | miniw.w vf10, vf10, vf01 - vu.vf10.mini(Mask::w, vu.vf10, vu.vf01.w()); - // div Q, vf01.w, vf10.w | add.zw vf08, vf08, vf17 - vu.vf08.add(Mask::zw, vu.vf08, vu.vf17); vu.Q = vu.vf01.w() / vu.vf10.w(); - - // move.xyzw vf21, vf09 | add.xyzw vf11, vf11, vf18 - vu.vf11.add_xyzw(vu.vf11, vu.vf18); vu.vf21.move_xyzw(vu.vf09); - // iand vi10, vi10, vi05 | add.xyzw vf14, vf14, vf19 - vu.vf14.add_xyzw(vu.vf14, vu.vf19); vu.vi10 = vu.vi10 & vu.vi05; - // nop | mulax.xyzw ACC, vf04, vf12 - vu.acc.mula_xyzw(vu.vf04, vu.vf12.x()); -// BRANCH! - // ibgtz vi09, L101 | madday.xyzw ACC, vf05, vf12 - vu.acc.madda_xyzw(vu.vf05, vu.vf12.y()); bc = ((s16)vu.vi09) > 0; - // iand vi13, vi13, vi05 | maddaz.xyzw ACC, vf06, vf12 - vu.acc.madda_xyzw(vu.vf06, vu.vf12.z()); vu.vi13 = vu.vi13 & vu.vi05; - if (bc) { goto L101; } - - - // nop | addx.w vf21, vf21, vf17 - vu.vf21.add(Mask::w, vu.vf21, vu.vf17.x()); - L101: -// BRANCH! - // ibne vi05, vi10, L102 | maddw.xyzw vf12, vf07, vf00 - vu.acc.madd_xyzw(vu.vf12, vu.vf07, vu.vf00.w()); bc = (vu.vi05 != vu.vi10); - // ilw.x vi09, -9(vi01) | mul.xyz vf10, vf10, Q - vu.vf10.mul(Mask::xyz, vu.vf10, vu.Q); /* TODO mulq */ ilw_buffer(Mask::x, vu.vi09, vu.vi01 + -9); - if (bc) { goto L102; } - - - // mtir vi10, vf11.x | mul.xyzw vf16, vf16, Q - vu.vf16.mul_xyzw(vu.vf16, vu.Q); /* TODO mulq */ vu.vi10 = vu.vf11.x_as_u16(); - // mtir vi13, vf11.y | ftoi4.xyzw vf21, vf21 - vu.vf21.ftoi4(Mask::xyzw, vu.vf21); vu.vi13 = vu.vf11.y_as_u16(); -// BRANCH! - // b L103 | mul.xyzw vf12, vf12, vf23 - vu.vf12.mul_xyzw(vu.vf12, vu.vf23); bc = true; - // lqi.xyzw vf23, vi03 | add.xyzw vf10, vf10, vf22 - vu.vf10.add_xyzw(vu.vf10, vu.vf22); lq_buffer_xyzw(vu.vf23, vu.vi03++); - if (bc) { goto L103; } - - - L102: - // lq.xyzw vf20, 0(vi10) | mul.xyzw vf16, vf16, Q - vu.vf16.mul_xyzw(vu.vf16, vu.Q); /* TODO mulq */ lq_buffer_xyzw(vu.vf20, vu.vi10); - // nop | mulw.xyzw vf24, vf24, vf29 - vu.vf24.mul_xyzw(vu.vf24, vu.vf29.w()); - // lq.xyzw vf25, 0(vi13) | ftoi4.xyzw vf21, vf21 - vu.vf21.ftoi4(Mask::xyzw, vu.vf21); lq_buffer_xyzw(vu.vf25, vu.vi13); - // lq.xyzw vf23, 1(vi10) | mul.xyzw vf12, vf12, vf23 - vu.vf12.mul_xyzw(vu.vf12, vu.vf23); lq_buffer_xyzw(vu.vf23, vu.vi10 + 1); - // lq.xyzw vf26, 1(vi13) | add.xyzw vf10, vf10, vf22 - vu.vf10.add_xyzw(vu.vf10, vu.vf22); lq_buffer_xyzw(vu.vf26, vu.vi13 + 1); - // lq.xyzw vf20, 2(vi10) | mulax.xyzw ACC, vf20, vf24 - vu.acc.mula_xyzw(vu.vf20, vu.vf24.x()); lq_buffer_xyzw(vu.vf20, vu.vi10 + 2); - // lq.xyzw vf27, 2(vi13) | maddy.xyzw vf25, vf25, vf24 - vu.acc.madd_xyzw(vu.vf25, vu.vf25, vu.vf24.y()); lq_buffer_xyzw(vu.vf27, vu.vi13 + 2); - // lq.xyzw vf23, 3(vi10) | mulax.xyzw ACC, vf23, vf24 - vu.acc.mula_xyzw(vu.vf23, vu.vf24.x()); lq_buffer_xyzw(vu.vf23, vu.vi10 + 3); - // lq.xyzw vf28, 3(vi13) | maddy.xyzw vf26, vf26, vf24 - vu.acc.madd_xyzw(vu.vf26, vu.vf26, vu.vf24.y()); lq_buffer_xyzw(vu.vf28, vu.vi13 + 3); - // lq.xyzw vf20, 4(vi10) | mulax.xyzw ACC, vf20, vf24 - vu.acc.mula_xyzw(vu.vf20, vu.vf24.x()); lq_buffer_xyzw(vu.vf20, vu.vi10 + 4); - // lq.xyz vf29, 4(vi13) | maddy.xyzw vf27, vf27, vf24 - vu.acc.madd_xyzw(vu.vf27, vu.vf27, vu.vf24.y()); lq_buffer_xyz(vu.vf29, vu.vi13 + 4); - // lq.xyzw vf23, 5(vi10) | mulax.xyzw ACC, vf23, vf24 - vu.acc.mula_xyzw(vu.vf23, vu.vf24.x()); lq_buffer_xyzw(vu.vf23, vu.vi10 + 5); - // lq.xyz vf30, 5(vi13) | maddy.xyzw vf28, vf28, vf24 - vu.acc.madd_xyzw(vu.vf28, vu.vf28, vu.vf24.y()); lq_buffer_xyz(vu.vf30, vu.vi13 + 5); - // lq.xyzw vf20, 6(vi10) | mulax.xyzw ACC, vf20, vf24 - vu.acc.mula_xyzw(vu.vf20, vu.vf24.x()); lq_buffer_xyzw(vu.vf20, vu.vi10 + 6); - // lq.xyzw vf31, 6(vi13) | maddy.xyz vf29, vf29, vf24 - vu.acc.madd_xyz(vu.vf29, vu.vf29, vu.vf24.y()); lq_buffer_xyzw(vu.vf31, vu.vi13 + 6); - // mtir vi10, vf11.x | mulax.xyzw ACC, vf23, vf24 - vu.acc.mula_xyzw(vu.vf23, vu.vf24.x()); vu.vi10 = vu.vf11.x_as_u16(); - // mtir vi13, vf11.y | maddy.xyz vf30, vf30, vf24 - vu.acc.madd_xyz(vu.vf30, vu.vf30, vu.vf24.y()); vu.vi13 = vu.vf11.y_as_u16(); -// BRANCH! - // b L118 | mulax.xyzw ACC, vf20, vf24 - vu.acc.mula_xyzw(vu.vf20, vu.vf24.x()); bc = true; - // lqi.xyzw vf23, vi03 | maddy.xyzw vf31, vf31, vf24 - vu.acc.madd_xyzw(vu.vf31, vu.vf31, vu.vf24.y()); lq_buffer_xyzw(vu.vf23, vu.vi03++); - if (bc) { goto L118; } - - - L103: -// BRANCH! - // ibgez vi09, L104 | mulaz.xyzw ACC, vf29, vf08 - vu.acc.mula_xyzw(vu.vf29, vu.vf08.z()); bc = ((s16)vu.vi09) >= 0; - // sq.xyzw vf21, 2(vi11) | maddaz.xyzw ACC, vf30, vf11 - vu.acc.madda_xyzw(vu.vf30, vu.vf11.z()); sq_buffer_xyzw(vu.vf21, vu.vi11 + 2); - if (bc) { goto L104; } - - - // nop | ftoi4.xyzw vf21, vf09 - vu.vf21.ftoi4(Mask::xyzw, vu.vf09); - L104: - // mfp.w vf20, P | maddz.xyz vf11, vf31, vf14 - vu.acc.madd_xyz(vu.vf11, vu.vf31, vu.vf14.z()); vu.vf20.mfp(Mask::w, vu.P); - // sq.xyzw vf15, 0(vi11) | miniy.xyzw vf12, vf12, vf17 - vu.vf12.mini_xyzw(vu.vf12, vu.vf17.y()); sq_buffer_xyzw(vu.vf15, vu.vi11); - // sq.xyzw vf15, 0(vi14) | miniw.w vf10, vf10, vf03 - vu.vf10.mini(Mask::w, vu.vf10, vu.vf03.w()); sq_buffer_xyzw(vu.vf15, vu.vi14); - // sq.xyzw vf21, 2(vi14) | mulaw.xyzw ACC, vf25, vf08 - vu.acc.mula_xyzw(vu.vf25, vu.vf08.w()); sq_buffer_xyzw(vu.vf21, vu.vi14 + 2); - // ilw.y vi09, -6(vi01) | mulw.xyzw vf13, vf13, vf20 - vu.vf13.mul_xyzw(vu.vf13, vu.vf20.w()); ilw_buffer(Mask::y, vu.vi09, vu.vi01 + -6); - // 1024.0 | ftoi0.xyzw vf12, vf12 :i - vu.vf12.ftoi0(Mask::xyzw, vu.vf12); vu.I = 1024.0; - // erleng.xyz P, vf11 | maxi.xy vf10, vf10, I - vu.vf10.maxi(Mask::xy, vu.vf10, vu.I); vu.P = erleng(vu.vf11); /* TODO erleng */ -// BRANCH! - // ibne vi06, vi03, L105 | maddaw.xyzw ACC, vf26, vf11 - vu.acc.madda_xyzw(vu.vf26, vu.vf11.w()); bc = (vu.vi06 != vu.vi03); - // mr32.z vf14, vf00 | maddw.xyzw vf08, vf27, vf14 - vu.acc.madd_xyzw(vu.vf08, vu.vf27, vu.vf14.w()); vu.vf14.z() = 1.f; - if (bc) { goto L105; } - - -// BRANCH! - // ibne vi07, vi03, L138 | nop - bc = (vu.vi07 != vu.vi03); - // nop | nop - - if (bc) { goto L138; } - - -// BRANCH! - // b L153 | nop - bc = true; - // nop | nop - - if (bc) { goto L153; } - - - L105: - // 3072.0 | mulax.xyzw ACC, vf01, vf13 :i - vu.acc.mula_xyzw(vu.vf01, vu.vf13.x()); vu.I = 3072.0; - // lqi.xyzw vf09, vi01 | minii.xy vf10, vf10, I - vu.vf10.minii(Mask::xy, vu.vf10, vu.I); lq_buffer_xyzw(vu.vf09, vu.vi01++); - // sq.xyzw vf12, 1(vi11) | madday.xyzw ACC, vf02, vf13 - vu.acc.madda_xyzw(vu.vf02, vu.vf13.y()); sq_buffer_xyzw(vu.vf12, vu.vi11 + 1); - // sq.xyzw vf12, 1(vi14) | maddz.xyzw vf13, vf03, vf13 - vu.acc.madd_xyzw(vu.vf13, vu.vf03, vu.vf13.z()); sq_buffer_xyzw(vu.vf12, vu.vi14 + 1); - // lqi.xyzw vf12, vi01 | add.xyzw vf08, vf08, vf28 - vu.vf08.add_xyzw(vu.vf08, vu.vf28); lq_buffer_xyzw(vu.vf12, vu.vi01++); - // lqi.xyzw vf15, vi01 | maxw.w vf10, vf10, vf02 - vu.vf10.max(Mask::w, vu.vf10, vu.vf02.w()); lq_buffer_xyzw(vu.vf15, vu.vi01++); - // mtir vi11, vf09.x | itof0.xyzw vf23, vf23 - vu.vf23.itof0(Mask::xyzw, vu.vf23); vu.vi11 = vu.vf09.x_as_u16(); - // mtir vi14, vf09.y | maxx.xyzw vf13, vf13, vf00 - vu.vf13.max_xyzw(vu.vf13, vu.vf00.x()); vu.vi14 = vu.vf09.y_as_u16(); - // nop | miniw.w vf08, vf08, vf01 - vu.vf08.mini(Mask::w, vu.vf08, vu.vf01.w()); - // div Q, vf01.w, vf08.w | add.zw vf09, vf09, vf17 - vu.vf09.add(Mask::zw, vu.vf09, vu.vf17); vu.Q = vu.vf01.w() / vu.vf08.w(); - - // move.xyzw vf21, vf10 | add.xyzw vf12, vf12, vf18 - vu.vf12.add_xyzw(vu.vf12, vu.vf18); vu.vf21.move_xyzw(vu.vf10); - // iand vi11, vi11, vi05 | add.xyzw vf15, vf15, vf19 - vu.vf15.add_xyzw(vu.vf15, vu.vf19); vu.vi11 = vu.vi11 & vu.vi05; - // nop | mulax.xyzw ACC, vf04, vf13 - vu.acc.mula_xyzw(vu.vf04, vu.vf13.x()); -// BRANCH! - // ibgtz vi09, L106 | madday.xyzw ACC, vf05, vf13 - vu.acc.madda_xyzw(vu.vf05, vu.vf13.y()); bc = ((s16)vu.vi09) > 0; - // iand vi14, vi14, vi05 | maddaz.xyzw ACC, vf06, vf13 - vu.acc.madda_xyzw(vu.vf06, vu.vf13.z()); vu.vi14 = vu.vi14 & vu.vi05; - if (bc) { goto L106; } - - - // nop | addx.w vf21, vf21, vf17 - vu.vf21.add(Mask::w, vu.vf21, vu.vf17.x()); - L106: -// BRANCH! - // ibne vi05, vi11, L107 | maddw.xyzw vf13, vf07, vf00 - vu.acc.madd_xyzw(vu.vf13, vu.vf07, vu.vf00.w()); bc = (vu.vi05 != vu.vi11); - // ilw.x vi09, -9(vi01) | mul.xyz vf08, vf08, Q - vu.vf08.mul(Mask::xyz, vu.vf08, vu.Q); /* TODO mulq */ ilw_buffer(Mask::x, vu.vi09, vu.vi01 + -9); - if (bc) { goto L107; } - - - // mtir vi11, vf12.x | mul.xyzw vf14, vf14, Q - vu.vf14.mul_xyzw(vu.vf14, vu.Q); /* TODO mulq */ vu.vi11 = vu.vf12.x_as_u16(); - // mtir vi14, vf12.y | ftoi4.xyzw vf21, vf21 - vu.vf21.ftoi4(Mask::xyzw, vu.vf21); vu.vi14 = vu.vf12.y_as_u16(); -// BRANCH! - // b L108 | mul.xyzw vf13, vf13, vf23 - vu.vf13.mul_xyzw(vu.vf13, vu.vf23); bc = true; - // lqi.xyzw vf23, vi03 | add.xyzw vf08, vf08, vf22 - vu.vf08.add_xyzw(vu.vf08, vu.vf22); lq_buffer_xyzw(vu.vf23, vu.vi03++); - if (bc) { goto L108; } - - - L107: - // lq.xyzw vf20, 0(vi11) | mul.xyzw vf14, vf14, Q - vu.vf14.mul_xyzw(vu.vf14, vu.Q); /* TODO mulq */ lq_buffer_xyzw(vu.vf20, vu.vi11); - // nop | mulw.xyzw vf24, vf24, vf29 - vu.vf24.mul_xyzw(vu.vf24, vu.vf29.w()); - // lq.xyzw vf25, 0(vi14) | ftoi4.xyzw vf21, vf21 - vu.vf21.ftoi4(Mask::xyzw, vu.vf21); lq_buffer_xyzw(vu.vf25, vu.vi14); - // lq.xyzw vf23, 1(vi11) | mul.xyzw vf13, vf13, vf23 - vu.vf13.mul_xyzw(vu.vf13, vu.vf23); lq_buffer_xyzw(vu.vf23, vu.vi11 + 1); - // lq.xyzw vf26, 1(vi14) | add.xyzw vf08, vf08, vf22 - vu.vf08.add_xyzw(vu.vf08, vu.vf22); lq_buffer_xyzw(vu.vf26, vu.vi14 + 1); - // lq.xyzw vf20, 2(vi11) | mulax.xyzw ACC, vf20, vf24 - vu.acc.mula_xyzw(vu.vf20, vu.vf24.x()); lq_buffer_xyzw(vu.vf20, vu.vi11 + 2); - // lq.xyzw vf27, 2(vi14) | maddy.xyzw vf25, vf25, vf24 - vu.acc.madd_xyzw(vu.vf25, vu.vf25, vu.vf24.y()); lq_buffer_xyzw(vu.vf27, vu.vi14 + 2); - // lq.xyzw vf23, 3(vi11) | mulax.xyzw ACC, vf23, vf24 - vu.acc.mula_xyzw(vu.vf23, vu.vf24.x()); lq_buffer_xyzw(vu.vf23, vu.vi11 + 3); - // lq.xyzw vf28, 3(vi14) | maddy.xyzw vf26, vf26, vf24 - vu.acc.madd_xyzw(vu.vf26, vu.vf26, vu.vf24.y()); lq_buffer_xyzw(vu.vf28, vu.vi14 + 3); - // lq.xyzw vf20, 4(vi11) | mulax.xyzw ACC, vf20, vf24 - vu.acc.mula_xyzw(vu.vf20, vu.vf24.x()); lq_buffer_xyzw(vu.vf20, vu.vi11 + 4); - // lq.xyz vf29, 4(vi14) | maddy.xyzw vf27, vf27, vf24 - vu.acc.madd_xyzw(vu.vf27, vu.vf27, vu.vf24.y()); lq_buffer_xyz(vu.vf29, vu.vi14 + 4); - // lq.xyzw vf23, 5(vi11) | mulax.xyzw ACC, vf23, vf24 - vu.acc.mula_xyzw(vu.vf23, vu.vf24.x()); lq_buffer_xyzw(vu.vf23, vu.vi11 + 5); - // lq.xyz vf30, 5(vi14) | maddy.xyzw vf28, vf28, vf24 - vu.acc.madd_xyzw(vu.vf28, vu.vf28, vu.vf24.y()); lq_buffer_xyz(vu.vf30, vu.vi14 + 5); - // lq.xyzw vf20, 6(vi11) | mulax.xyzw ACC, vf20, vf24 - vu.acc.mula_xyzw(vu.vf20, vu.vf24.x()); lq_buffer_xyzw(vu.vf20, vu.vi11 + 6); - // lq.xyzw vf31, 6(vi14) | maddy.xyz vf29, vf29, vf24 - vu.acc.madd_xyz(vu.vf29, vu.vf29, vu.vf24.y()); lq_buffer_xyzw(vu.vf31, vu.vi14 + 6); - // mtir vi11, vf12.x | mulax.xyzw ACC, vf23, vf24 - vu.acc.mula_xyzw(vu.vf23, vu.vf24.x()); vu.vi11 = vu.vf12.x_as_u16(); - // mtir vi14, vf12.y | maddy.xyz vf30, vf30, vf24 - vu.acc.madd_xyz(vu.vf30, vu.vf30, vu.vf24.y()); vu.vi14 = vu.vf12.y_as_u16(); -// BRANCH! - // b L123 | mulax.xyzw ACC, vf20, vf24 - vu.acc.mula_xyzw(vu.vf20, vu.vf24.x()); bc = true; - // lqi.xyzw vf23, vi03 | maddy.xyzw vf31, vf31, vf24 - vu.acc.madd_xyzw(vu.vf31, vu.vf31, vu.vf24.y()); lq_buffer_xyzw(vu.vf23, vu.vi03++); - if (bc) { goto L123; } - - - L108: -// BRANCH! - // ibgez vi09, L109 | mulaz.xyzw ACC, vf29, vf09 - vu.acc.mula_xyzw(vu.vf29, vu.vf09.z()); bc = ((s16)vu.vi09) >= 0; - // sq.xyzw vf21, 2(vi12) | maddaz.xyzw ACC, vf30, vf12 - vu.acc.madda_xyzw(vu.vf30, vu.vf12.z()); sq_buffer_xyzw(vu.vf21, vu.vi12 + 2); - if (bc) { goto L109; } - - - // nop | ftoi4.xyzw vf21, vf10 - vu.vf21.ftoi4(Mask::xyzw, vu.vf10); - L109: - // mfp.w vf20, P | maddz.xyz vf12, vf31, vf15 - vu.acc.madd_xyz(vu.vf12, vu.vf31, vu.vf15.z()); vu.vf20.mfp(Mask::w, vu.P); - // sq.xyzw vf16, 0(vi12) | miniy.xyzw vf13, vf13, vf17 - vu.vf13.mini_xyzw(vu.vf13, vu.vf17.y()); sq_buffer_xyzw(vu.vf16, vu.vi12); - // sq.xyzw vf16, 0(vi15) | miniw.w vf08, vf08, vf03 - vu.vf08.mini(Mask::w, vu.vf08, vu.vf03.w()); sq_buffer_xyzw(vu.vf16, vu.vi15); - // sq.xyzw vf21, 2(vi15) | mulaw.xyzw ACC, vf25, vf09 - vu.acc.mula_xyzw(vu.vf25, vu.vf09.w()); sq_buffer_xyzw(vu.vf21, vu.vi15 + 2); - // ilw.y vi09, -6(vi01) | mulw.xyzw vf11, vf11, vf20 - vu.vf11.mul_xyzw(vu.vf11, vu.vf20.w()); ilw_buffer(Mask::y, vu.vi09, vu.vi01 + -6); - // 1024.0 | ftoi0.xyzw vf13, vf13 :i - vu.vf13.ftoi0(Mask::xyzw, vu.vf13); vu.I = 1024.0; - // erleng.xyz P, vf12 | maxi.xy vf08, vf08, I - vu.vf08.maxi(Mask::xy, vu.vf08, vu.I); vu.P = erleng(vu.vf12); /* TODO erleng */ -// BRANCH! - // ibne vi06, vi03, L94 | maddaw.xyzw ACC, vf26, vf12 - vu.acc.madda_xyzw(vu.vf26, vu.vf12.w()); bc = (vu.vi06 != vu.vi03); - // mr32.z vf15, vf00 | maddw.xyzw vf09, vf27, vf15 - vu.acc.madd_xyzw(vu.vf09, vu.vf27, vu.vf15.w()); vu.vf15.z() = 1.f; - if (bc) { goto L94; } - - -// BRANCH! - // ibne vi07, vi03, L127 | nop - bc = (vu.vi07 != vu.vi03); - // nop | nop - - if (bc) { goto L127; } - - -// BRANCH! - // b L163 | nop - bc = true; - // nop | nop - - if (bc) { goto L163; } - - - L110: - // 3072.0 | mulax.xyzw ACC, vf01, vf11 :i - vu.acc.mula_xyzw(vu.vf01, vu.vf11.x()); vu.I = 3072.0; - // lqi.xyzw vf10, vi01 | minii.xy vf08, vf08, I - vu.vf08.minii(Mask::xy, vu.vf08, vu.I); lq_buffer_xyzw(vu.vf10, vu.vi01++); - // sq.xyzw vf13, 1(vi12) | madday.xyzw ACC, vf02, vf11 - vu.acc.madda_xyzw(vu.vf02, vu.vf11.y()); sq_buffer_xyzw(vu.vf13, vu.vi12 + 1); - // sq.xyzw vf13, 1(vi15) | maddz.xyzw vf11, vf03, vf11 - vu.acc.madd_xyzw(vu.vf11, vu.vf03, vu.vf11.z()); sq_buffer_xyzw(vu.vf13, vu.vi15 + 1); - JUMP_539: - // lqi.xyzw vf13, vi01 | add.xyzw vf09, vf09, vf28 - vu.vf09.add_xyzw(vu.vf09, vu.vf28); lq_buffer_xyzw(vu.vf13, vu.vi01++); - // lqi.xyzw vf16, vi01 | maxw.w vf08, vf08, vf02 - vu.vf08.max(Mask::w, vu.vf08, vu.vf02.w()); lq_buffer_xyzw(vu.vf16, vu.vi01++); - // mtir vi12, vf10.x | itof0.xyzw vf23, vf23 - vu.vf23.itof0(Mask::xyzw, vu.vf23); vu.vi12 = vu.vf10.x_as_u16(); - // mtir vi15, vf10.y | maxx.xyzw vf11, vf11, vf00 - vu.vf11.max_xyzw(vu.vf11, vu.vf00.x()); vu.vi15 = vu.vf10.y_as_u16(); - // nop | miniw.w vf09, vf09, vf01 - vu.vf09.mini(Mask::w, vu.vf09, vu.vf01.w()); - // div Q, vf01.w, vf09.w | add.zw vf10, vf10, vf17 - vu.vf10.add(Mask::zw, vu.vf10, vu.vf17); vu.Q = vu.vf01.w() / vu.vf09.w(); - - // move.xyzw vf21, vf08 | add.xyzw vf13, vf13, vf18 - vu.vf13.add_xyzw(vu.vf13, vu.vf18); vu.vf21.move_xyzw(vu.vf08); - // iand vi12, vi12, vi05 | add.xyzw vf16, vf16, vf19 - vu.vf16.add_xyzw(vu.vf16, vu.vf19); vu.vi12 = vu.vi12 & vu.vi05; - // nop | mulax.xyzw ACC, vf04, vf11 - vu.acc.mula_xyzw(vu.vf04, vu.vf11.x()); -// BRANCH! - // ibgtz vi09, L111 | madday.xyzw ACC, vf05, vf11 - vu.acc.madda_xyzw(vu.vf05, vu.vf11.y()); bc = ((s16)vu.vi09) > 0; - // iand vi15, vi15, vi05 | maddaz.xyzw ACC, vf06, vf11 - vu.acc.madda_xyzw(vu.vf06, vu.vf11.z()); vu.vi15 = vu.vi15 & vu.vi05; - if (bc) { goto L111; } - - - // nop | addx.w vf21, vf21, vf17 - vu.vf21.add(Mask::w, vu.vf21, vu.vf17.x()); - L111: -// BRANCH! - // ibne vi05, vi12, L112 | maddw.xyzw vf11, vf07, vf00 - vu.acc.madd_xyzw(vu.vf11, vu.vf07, vu.vf00.w()); bc = (vu.vi05 != vu.vi12); - // ilw.x vi09, -9(vi01) | mul.xyz vf09, vf09, Q - vu.vf09.mul(Mask::xyz, vu.vf09, vu.Q); /* TODO mulq */ ilw_buffer(Mask::x, vu.vi09, vu.vi01 + -9); - if (bc) { goto L112; } - - - // mtir vi12, vf13.x | mul.xyzw vf15, vf15, Q - vu.vf15.mul_xyzw(vu.vf15, vu.Q); /* TODO mulq */ vu.vi12 = vu.vf13.x_as_u16(); - // mtir vi15, vf13.y | ftoi4.xyzw vf21, vf21 - vu.vf21.ftoi4(Mask::xyzw, vu.vf21); vu.vi15 = vu.vf13.y_as_u16(); -// BRANCH! - // b L113 | mul.xyzw vf11, vf11, vf23 - vu.vf11.mul_xyzw(vu.vf11, vu.vf23); bc = true; - // lqi.xyzw vf23, vi03 | add.xyzw vf09, vf09, vf22 - vu.vf09.add_xyzw(vu.vf09, vu.vf22); lq_buffer_xyzw(vu.vf23, vu.vi03++); - if (bc) { goto L113; } - - - L112: - // lq.xyzw vf20, 0(vi12) | mul.xyzw vf15, vf15, Q - vu.vf15.mul_xyzw(vu.vf15, vu.Q); /* TODO mulq */ lq_buffer_xyzw(vu.vf20, vu.vi12); - // lq.xyzw vf25, 0(vi15) | ftoi4.xyzw vf21, vf21 - vu.vf21.ftoi4(Mask::xyzw, vu.vf21); lq_buffer_xyzw(vu.vf25, vu.vi15); - // lq.xyzw vf23, 1(vi12) | mul.xyzw vf11, vf11, vf23 - vu.vf11.mul_xyzw(vu.vf11, vu.vf23); lq_buffer_xyzw(vu.vf23, vu.vi12 + 1); - // lq.xyzw vf26, 1(vi15) | add.xyzw vf09, vf09, vf22 - vu.vf09.add_xyzw(vu.vf09, vu.vf22); lq_buffer_xyzw(vu.vf26, vu.vi15 + 1); - // lq.xyzw vf20, 2(vi12) | mulaz.xyzw ACC, vf20, vf24 - vu.acc.mula_xyzw(vu.vf20, vu.vf24.z()); lq_buffer_xyzw(vu.vf20, vu.vi12 + 2); - // lq.xyzw vf27, 2(vi15) | maddw.xyzw vf25, vf25, vf24 - vu.acc.madd_xyzw(vu.vf25, vu.vf25, vu.vf24.w()); lq_buffer_xyzw(vu.vf27, vu.vi15 + 2); - // lq.xyzw vf23, 3(vi12) | mulaz.xyzw ACC, vf23, vf24 - vu.acc.mula_xyzw(vu.vf23, vu.vf24.z()); lq_buffer_xyzw(vu.vf23, vu.vi12 + 3); - // lq.xyzw vf28, 3(vi15) | maddw.xyzw vf26, vf26, vf24 - vu.acc.madd_xyzw(vu.vf26, vu.vf26, vu.vf24.w()); lq_buffer_xyzw(vu.vf28, vu.vi15 + 3); - // lq.xyzw vf20, 4(vi12) | mulaz.xyzw ACC, vf20, vf24 - vu.acc.mula_xyzw(vu.vf20, vu.vf24.z()); lq_buffer_xyzw(vu.vf20, vu.vi12 + 4); - // lq.xyz vf29, 4(vi15) | maddw.xyzw vf27, vf27, vf24 - vu.acc.madd_xyzw(vu.vf27, vu.vf27, vu.vf24.w()); lq_buffer_xyz(vu.vf29, vu.vi15 + 4); - // lq.xyzw vf23, 5(vi12) | mulaz.xyzw ACC, vf23, vf24 - vu.acc.mula_xyzw(vu.vf23, vu.vf24.z()); lq_buffer_xyzw(vu.vf23, vu.vi12 + 5); - // lq.xyz vf30, 5(vi15) | maddw.xyzw vf28, vf28, vf24 - vu.acc.madd_xyzw(vu.vf28, vu.vf28, vu.vf24.w()); lq_buffer_xyz(vu.vf30, vu.vi15 + 5); - // lq.xyzw vf20, 6(vi12) | mulaz.xyzw ACC, vf20, vf24 - vu.acc.mula_xyzw(vu.vf20, vu.vf24.z()); lq_buffer_xyzw(vu.vf20, vu.vi12 + 6); - // lq.xyzw vf31, 6(vi15) | maddw.xyz vf29, vf29, vf24 - vu.acc.madd_xyz(vu.vf29, vu.vf29, vu.vf24.w()); lq_buffer_xyzw(vu.vf31, vu.vi15 + 6); - // lqi.xyzw vf23, vi02 | mulaz.xyzw ACC, vf23, vf24 - vu.acc.mula_xyzw(vu.vf23, vu.vf24.z()); lq_buffer_xyzw(vu.vf23, vu.vi02++); - // mtir vi12, vf13.x | maddw.xyz vf30, vf30, vf24 - vu.acc.madd_xyz(vu.vf30, vu.vf30, vu.vf24.w()); vu.vi12 = vu.vf13.x_as_u16(); - // mtir vi15, vf13.y | mulaz.xyzw ACC, vf20, vf24 - vu.acc.mula_xyzw(vu.vf20, vu.vf24.z()); vu.vi15 = vu.vf13.y_as_u16(); -// BRANCH! - // b L98 | maddw.xyzw vf31, vf31, vf24 - vu.acc.madd_xyzw(vu.vf31, vu.vf31, vu.vf24.w()); bc = true; - // lqi.xyzw vf23, vi03 | itof0.xyzw vf24, vf23 - vu.vf24.itof0(Mask::xyzw, vu.vf23); lq_buffer_xyzw(vu.vf23, vu.vi03++); - if (bc) { goto L98; } - - - L113: -// BRANCH! - // ibgez vi09, L114 | mulaz.xyzw ACC, vf29, vf10 - vu.acc.mula_xyzw(vu.vf29, vu.vf10.z()); bc = ((s16)vu.vi09) >= 0; - // sq.xyzw vf21, 2(vi10) | maddaz.xyzw ACC, vf30, vf13 - vu.acc.madda_xyzw(vu.vf30, vu.vf13.z()); sq_buffer_xyzw(vu.vf21, vu.vi10 + 2); - if (bc) { goto L114; } - - - // nop | ftoi4.xyzw vf21, vf08 - vu.vf21.ftoi4(Mask::xyzw, vu.vf08); - L114: - // mfp.w vf20, P | maddz.xyz vf13, vf31, vf16 - vu.acc.madd_xyz(vu.vf13, vu.vf31, vu.vf16.z()); vu.vf20.mfp(Mask::w, vu.P); - // sq.xyzw vf14, 0(vi10) | miniy.xyzw vf11, vf11, vf17 - vu.vf11.mini_xyzw(vu.vf11, vu.vf17.y()); sq_buffer_xyzw(vu.vf14, vu.vi10); - // sq.xyzw vf14, 0(vi13) | miniw.w vf09, vf09, vf03 - vu.vf09.mini(Mask::w, vu.vf09, vu.vf03.w()); sq_buffer_xyzw(vu.vf14, vu.vi13); - // sq.xyzw vf21, 2(vi13) | mulaw.xyzw ACC, vf25, vf10 - vu.acc.mula_xyzw(vu.vf25, vu.vf10.w()); sq_buffer_xyzw(vu.vf21, vu.vi13 + 2); - // ilw.y vi09, -6(vi01) | mulw.xyzw vf12, vf12, vf20 - vu.vf12.mul_xyzw(vu.vf12, vu.vf20.w()); ilw_buffer(Mask::y, vu.vi09, vu.vi01 + -6); - // 1024.0 | ftoi0.xyzw vf11, vf11 :i - vu.vf11.ftoi0(Mask::xyzw, vu.vf11); vu.I = 1024.0; - // erleng.xyz P, vf13 | maxi.xy vf09, vf09, I - vu.vf09.maxi(Mask::xy, vu.vf09, vu.I); vu.P = erleng(vu.vf13); /* TODO erleng */ -// BRANCH! - // ibne vi06, vi03, L115 | maddaw.xyzw ACC, vf26, vf13 - vu.acc.madda_xyzw(vu.vf26, vu.vf13.w()); bc = (vu.vi06 != vu.vi03); - // mr32.z vf16, vf00 | maddw.xyzw vf10, vf27, vf16 - vu.acc.madd_xyzw(vu.vf10, vu.vf27, vu.vf16.w()); vu.vf16.z() = 1.f; - if (bc) { goto L115; } - - -// BRANCH! - // ibne vi07, vi03, L133 | nop - bc = (vu.vi07 != vu.vi03); - // nop | nop - - if (bc) { goto L133; } - - -// BRANCH! - // b L143 | nop - bc = true; - // nop | nop - - if (bc) { goto L143; } - - - L115: - // 3072.0 | mulax.xyzw ACC, vf01, vf12 :i - vu.acc.mula_xyzw(vu.vf01, vu.vf12.x()); vu.I = 3072.0; - // lqi.xyzw vf08, vi01 | minii.xy vf09, vf09, I - vu.vf09.minii(Mask::xy, vu.vf09, vu.I); lq_buffer_xyzw(vu.vf08, vu.vi01++); - // sq.xyzw vf11, 1(vi10) | madday.xyzw ACC, vf02, vf12 - vu.acc.madda_xyzw(vu.vf02, vu.vf12.y()); sq_buffer_xyzw(vu.vf11, vu.vi10 + 1); - // sq.xyzw vf11, 1(vi13) | maddz.xyzw vf12, vf03, vf12 - vu.acc.madd_xyzw(vu.vf12, vu.vf03, vu.vf12.z()); sq_buffer_xyzw(vu.vf11, vu.vi13 + 1); - // lqi.xyzw vf11, vi01 | add.xyzw vf10, vf10, vf28 - vu.vf10.add_xyzw(vu.vf10, vu.vf28); lq_buffer_xyzw(vu.vf11, vu.vi01++); - // lqi.xyzw vf14, vi01 | maxw.w vf09, vf09, vf02 - vu.vf09.max(Mask::w, vu.vf09, vu.vf02.w()); lq_buffer_xyzw(vu.vf14, vu.vi01++); - // mtir vi10, vf08.x | itof0.xyzw vf23, vf23 - vu.vf23.itof0(Mask::xyzw, vu.vf23); vu.vi10 = vu.vf08.x_as_u16(); - // mtir vi13, vf08.y | maxx.xyzw vf12, vf12, vf00 - vu.vf12.max_xyzw(vu.vf12, vu.vf00.x()); vu.vi13 = vu.vf08.y_as_u16(); - // nop | miniw.w vf10, vf10, vf01 - vu.vf10.mini(Mask::w, vu.vf10, vu.vf01.w()); - // div Q, vf01.w, vf10.w | add.zw vf08, vf08, vf17 - vu.vf08.add(Mask::zw, vu.vf08, vu.vf17); vu.Q = vu.vf01.w() / vu.vf10.w(); - - // move.xyzw vf21, vf09 | add.xyzw vf11, vf11, vf18 - vu.vf11.add_xyzw(vu.vf11, vu.vf18); vu.vf21.move_xyzw(vu.vf09); - // iand vi10, vi10, vi05 | add.xyzw vf14, vf14, vf19 - vu.vf14.add_xyzw(vu.vf14, vu.vf19); vu.vi10 = vu.vi10 & vu.vi05; - // nop | mulax.xyzw ACC, vf04, vf12 - vu.acc.mula_xyzw(vu.vf04, vu.vf12.x()); -// BRANCH! - // ibgtz vi09, L116 | madday.xyzw ACC, vf05, vf12 - vu.acc.madda_xyzw(vu.vf05, vu.vf12.y()); bc = ((s16)vu.vi09) > 0; - // iand vi13, vi13, vi05 | maddaz.xyzw ACC, vf06, vf12 - vu.acc.madda_xyzw(vu.vf06, vu.vf12.z()); vu.vi13 = vu.vi13 & vu.vi05; - if (bc) { goto L116; } - - - // nop | addx.w vf21, vf21, vf17 - vu.vf21.add(Mask::w, vu.vf21, vu.vf17.x()); - L116: -// BRANCH! - // ibne vi05, vi10, L117 | maddw.xyzw vf12, vf07, vf00 - vu.acc.madd_xyzw(vu.vf12, vu.vf07, vu.vf00.w()); bc = (vu.vi05 != vu.vi10); - // ilw.x vi09, -9(vi01) | mul.xyz vf10, vf10, Q - vu.vf10.mul(Mask::xyz, vu.vf10, vu.Q); /* TODO mulq */ ilw_buffer(Mask::x, vu.vi09, vu.vi01 + -9); - if (bc) { goto L117; } - - - // mtir vi10, vf11.x | mul.xyzw vf16, vf16, Q - vu.vf16.mul_xyzw(vu.vf16, vu.Q); /* TODO mulq */ vu.vi10 = vu.vf11.x_as_u16(); - // mtir vi13, vf11.y | ftoi4.xyzw vf21, vf21 - vu.vf21.ftoi4(Mask::xyzw, vu.vf21); vu.vi13 = vu.vf11.y_as_u16(); -// BRANCH! - // b L118 | mul.xyzw vf12, vf12, vf23 - vu.vf12.mul_xyzw(vu.vf12, vu.vf23); bc = true; - // lqi.xyzw vf23, vi03 | add.xyzw vf10, vf10, vf22 - vu.vf10.add_xyzw(vu.vf10, vu.vf22); lq_buffer_xyzw(vu.vf23, vu.vi03++); - if (bc) { goto L118; } - - - L117: - // lq.xyzw vf20, 0(vi10) | mul.xyzw vf16, vf16, Q - vu.vf16.mul_xyzw(vu.vf16, vu.Q); /* TODO mulq */ lq_buffer_xyzw(vu.vf20, vu.vi10); - // lq.xyzw vf25, 0(vi13) | ftoi4.xyzw vf21, vf21 - vu.vf21.ftoi4(Mask::xyzw, vu.vf21); lq_buffer_xyzw(vu.vf25, vu.vi13); - // lq.xyzw vf23, 1(vi10) | mul.xyzw vf12, vf12, vf23 - vu.vf12.mul_xyzw(vu.vf12, vu.vf23); lq_buffer_xyzw(vu.vf23, vu.vi10 + 1); - // lq.xyzw vf26, 1(vi13) | add.xyzw vf10, vf10, vf22 - vu.vf10.add_xyzw(vu.vf10, vu.vf22); lq_buffer_xyzw(vu.vf26, vu.vi13 + 1); - // lq.xyzw vf20, 2(vi10) | mulaz.xyzw ACC, vf20, vf24 - vu.acc.mula_xyzw(vu.vf20, vu.vf24.z()); lq_buffer_xyzw(vu.vf20, vu.vi10 + 2); - // lq.xyzw vf27, 2(vi13) | maddw.xyzw vf25, vf25, vf24 - vu.acc.madd_xyzw(vu.vf25, vu.vf25, vu.vf24.w()); lq_buffer_xyzw(vu.vf27, vu.vi13 + 2); - // lq.xyzw vf23, 3(vi10) | mulaz.xyzw ACC, vf23, vf24 - vu.acc.mula_xyzw(vu.vf23, vu.vf24.z()); lq_buffer_xyzw(vu.vf23, vu.vi10 + 3); - // lq.xyzw vf28, 3(vi13) | maddw.xyzw vf26, vf26, vf24 - vu.acc.madd_xyzw(vu.vf26, vu.vf26, vu.vf24.w()); lq_buffer_xyzw(vu.vf28, vu.vi13 + 3); - // lq.xyzw vf20, 4(vi10) | mulaz.xyzw ACC, vf20, vf24 - vu.acc.mula_xyzw(vu.vf20, vu.vf24.z()); lq_buffer_xyzw(vu.vf20, vu.vi10 + 4); - // lq.xyz vf29, 4(vi13) | maddw.xyzw vf27, vf27, vf24 - vu.acc.madd_xyzw(vu.vf27, vu.vf27, vu.vf24.w()); lq_buffer_xyz(vu.vf29, vu.vi13 + 4); - // lq.xyzw vf23, 5(vi10) | mulaz.xyzw ACC, vf23, vf24 - vu.acc.mula_xyzw(vu.vf23, vu.vf24.z()); lq_buffer_xyzw(vu.vf23, vu.vi10 + 5); - // lq.xyz vf30, 5(vi13) | maddw.xyzw vf28, vf28, vf24 - vu.acc.madd_xyzw(vu.vf28, vu.vf28, vu.vf24.w()); lq_buffer_xyz(vu.vf30, vu.vi13 + 5); - // lq.xyzw vf20, 6(vi10) | mulaz.xyzw ACC, vf20, vf24 - vu.acc.mula_xyzw(vu.vf20, vu.vf24.z()); lq_buffer_xyzw(vu.vf20, vu.vi10 + 6); - // lq.xyzw vf31, 6(vi13) | maddw.xyz vf29, vf29, vf24 - vu.acc.madd_xyz(vu.vf29, vu.vf29, vu.vf24.w()); lq_buffer_xyzw(vu.vf31, vu.vi13 + 6); - // lqi.xyzw vf23, vi02 | mulaz.xyzw ACC, vf23, vf24 - vu.acc.mula_xyzw(vu.vf23, vu.vf24.z()); lq_buffer_xyzw(vu.vf23, vu.vi02++); - // mtir vi10, vf11.x | maddw.xyz vf30, vf30, vf24 - vu.acc.madd_xyz(vu.vf30, vu.vf30, vu.vf24.w()); vu.vi10 = vu.vf11.x_as_u16(); - // mtir vi13, vf11.y | mulaz.xyzw ACC, vf20, vf24 - vu.acc.mula_xyzw(vu.vf20, vu.vf24.z()); vu.vi13 = vu.vf11.y_as_u16(); -// BRANCH! - // b L103 | maddw.xyzw vf31, vf31, vf24 - vu.acc.madd_xyzw(vu.vf31, vu.vf31, vu.vf24.w()); bc = true; - // lqi.xyzw vf23, vi03 | itof0.xyzw vf24, vf23 - vu.vf24.itof0(Mask::xyzw, vu.vf23); lq_buffer_xyzw(vu.vf23, vu.vi03++); - if (bc) { goto L103; } - - - L118: -// BRANCH! - // ibgez vi09, L119 | mulaz.xyzw ACC, vf29, vf08 - vu.acc.mula_xyzw(vu.vf29, vu.vf08.z()); bc = ((s16)vu.vi09) >= 0; - // sq.xyzw vf21, 2(vi11) | maddaz.xyzw ACC, vf30, vf11 - vu.acc.madda_xyzw(vu.vf30, vu.vf11.z()); sq_buffer_xyzw(vu.vf21, vu.vi11 + 2); - if (bc) { goto L119; } - - - // nop | ftoi4.xyzw vf21, vf09 - vu.vf21.ftoi4(Mask::xyzw, vu.vf09); - L119: - // mfp.w vf20, P | maddz.xyz vf11, vf31, vf14 - vu.acc.madd_xyz(vu.vf11, vu.vf31, vu.vf14.z()); vu.vf20.mfp(Mask::w, vu.P); - // sq.xyzw vf15, 0(vi11) | miniy.xyzw vf12, vf12, vf17 - vu.vf12.mini_xyzw(vu.vf12, vu.vf17.y()); sq_buffer_xyzw(vu.vf15, vu.vi11); - // sq.xyzw vf15, 0(vi14) | miniw.w vf10, vf10, vf03 - vu.vf10.mini(Mask::w, vu.vf10, vu.vf03.w()); sq_buffer_xyzw(vu.vf15, vu.vi14); - // sq.xyzw vf21, 2(vi14) | mulaw.xyzw ACC, vf25, vf08 - vu.acc.mula_xyzw(vu.vf25, vu.vf08.w()); sq_buffer_xyzw(vu.vf21, vu.vi14 + 2); - // ilw.y vi09, -6(vi01) | mulw.xyzw vf13, vf13, vf20 - vu.vf13.mul_xyzw(vu.vf13, vu.vf20.w()); ilw_buffer(Mask::y, vu.vi09, vu.vi01 + -6); - // 1024.0 | ftoi0.xyzw vf12, vf12 :i - vu.vf12.ftoi0(Mask::xyzw, vu.vf12); vu.I = 1024.0; - // erleng.xyz P, vf11 | maxi.xy vf10, vf10, I - vu.vf10.maxi(Mask::xy, vu.vf10, vu.I); vu.P = erleng(vu.vf11); /* TODO erleng */ -// BRANCH! - // ibne vi06, vi03, L120 | maddaw.xyzw ACC, vf26, vf11 - vu.acc.madda_xyzw(vu.vf26, vu.vf11.w()); bc = (vu.vi06 != vu.vi03); - // mr32.z vf14, vf00 | maddw.xyzw vf08, vf27, vf14 - vu.acc.madd_xyzw(vu.vf08, vu.vf27, vu.vf14.w()); vu.vf14.z() = 1.f; - if (bc) { goto L120; } - - -// BRANCH! - // ibne vi07, vi03, L138 | nop - bc = (vu.vi07 != vu.vi03); - // nop | nop - - if (bc) { goto L138; } - - -// BRANCH! - // b L153 | nop - bc = true; - // nop | nop - - if (bc) { goto L153; } - - - L120: - // 3072.0 | mulax.xyzw ACC, vf01, vf13 :i - vu.acc.mula_xyzw(vu.vf01, vu.vf13.x()); vu.I = 3072.0; - // lqi.xyzw vf09, vi01 | minii.xy vf10, vf10, I - vu.vf10.minii(Mask::xy, vu.vf10, vu.I); lq_buffer_xyzw(vu.vf09, vu.vi01++); - // sq.xyzw vf12, 1(vi11) | madday.xyzw ACC, vf02, vf13 - vu.acc.madda_xyzw(vu.vf02, vu.vf13.y()); sq_buffer_xyzw(vu.vf12, vu.vi11 + 1); - // sq.xyzw vf12, 1(vi14) | maddz.xyzw vf13, vf03, vf13 - vu.acc.madd_xyzw(vu.vf13, vu.vf03, vu.vf13.z()); sq_buffer_xyzw(vu.vf12, vu.vi14 + 1); - // lqi.xyzw vf12, vi01 | add.xyzw vf08, vf08, vf28 - vu.vf08.add_xyzw(vu.vf08, vu.vf28); lq_buffer_xyzw(vu.vf12, vu.vi01++); - // lqi.xyzw vf15, vi01 | maxw.w vf10, vf10, vf02 - vu.vf10.max(Mask::w, vu.vf10, vu.vf02.w()); lq_buffer_xyzw(vu.vf15, vu.vi01++); - // mtir vi11, vf09.x | itof0.xyzw vf23, vf23 - vu.vf23.itof0(Mask::xyzw, vu.vf23); vu.vi11 = vu.vf09.x_as_u16(); - // mtir vi14, vf09.y | maxx.xyzw vf13, vf13, vf00 - vu.vf13.max_xyzw(vu.vf13, vu.vf00.x()); vu.vi14 = vu.vf09.y_as_u16(); - // nop | miniw.w vf08, vf08, vf01 - vu.vf08.mini(Mask::w, vu.vf08, vu.vf01.w()); - // div Q, vf01.w, vf08.w | add.zw vf09, vf09, vf17 - vu.vf09.add(Mask::zw, vu.vf09, vu.vf17); vu.Q = vu.vf01.w() / vu.vf08.w(); - - // move.xyzw vf21, vf10 | add.xyzw vf12, vf12, vf18 - vu.vf12.add_xyzw(vu.vf12, vu.vf18); vu.vf21.move_xyzw(vu.vf10); - // iand vi11, vi11, vi05 | add.xyzw vf15, vf15, vf19 - vu.vf15.add_xyzw(vu.vf15, vu.vf19); vu.vi11 = vu.vi11 & vu.vi05; - // nop | mulax.xyzw ACC, vf04, vf13 - vu.acc.mula_xyzw(vu.vf04, vu.vf13.x()); -// BRANCH! - // ibgtz vi09, L121 | madday.xyzw ACC, vf05, vf13 - vu.acc.madda_xyzw(vu.vf05, vu.vf13.y()); bc = ((s16)vu.vi09) > 0; - // iand vi14, vi14, vi05 | maddaz.xyzw ACC, vf06, vf13 - vu.acc.madda_xyzw(vu.vf06, vu.vf13.z()); vu.vi14 = vu.vi14 & vu.vi05; - if (bc) { goto L121; } - - - // nop | addx.w vf21, vf21, vf17 - vu.vf21.add(Mask::w, vu.vf21, vu.vf17.x()); - L121: -// BRANCH! - // ibne vi05, vi11, L122 | maddw.xyzw vf13, vf07, vf00 - vu.acc.madd_xyzw(vu.vf13, vu.vf07, vu.vf00.w()); bc = (vu.vi05 != vu.vi11); - // ilw.x vi09, -9(vi01) | mul.xyz vf08, vf08, Q - vu.vf08.mul(Mask::xyz, vu.vf08, vu.Q); /* TODO mulq */ ilw_buffer(Mask::x, vu.vi09, vu.vi01 + -9); - if (bc) { goto L122; } - - - // mtir vi11, vf12.x | mul.xyzw vf14, vf14, Q - vu.vf14.mul_xyzw(vu.vf14, vu.Q); /* TODO mulq */ vu.vi11 = vu.vf12.x_as_u16(); - // mtir vi14, vf12.y | ftoi4.xyzw vf21, vf21 - vu.vf21.ftoi4(Mask::xyzw, vu.vf21); vu.vi14 = vu.vf12.y_as_u16(); -// BRANCH! - // b L123 | mul.xyzw vf13, vf13, vf23 - vu.vf13.mul_xyzw(vu.vf13, vu.vf23); bc = true; - // lqi.xyzw vf23, vi03 | add.xyzw vf08, vf08, vf22 - vu.vf08.add_xyzw(vu.vf08, vu.vf22); lq_buffer_xyzw(vu.vf23, vu.vi03++); - if (bc) { goto L123; } - - - L122: - // lq.xyzw vf20, 0(vi11) | mul.xyzw vf14, vf14, Q - vu.vf14.mul_xyzw(vu.vf14, vu.Q); /* TODO mulq */ lq_buffer_xyzw(vu.vf20, vu.vi11); - // lq.xyzw vf25, 0(vi14) | ftoi4.xyzw vf21, vf21 - vu.vf21.ftoi4(Mask::xyzw, vu.vf21); lq_buffer_xyzw(vu.vf25, vu.vi14); - // lq.xyzw vf23, 1(vi11) | mul.xyzw vf13, vf13, vf23 - vu.vf13.mul_xyzw(vu.vf13, vu.vf23); lq_buffer_xyzw(vu.vf23, vu.vi11 + 1); - // lq.xyzw vf26, 1(vi14) | add.xyzw vf08, vf08, vf22 - vu.vf08.add_xyzw(vu.vf08, vu.vf22); lq_buffer_xyzw(vu.vf26, vu.vi14 + 1); - // lq.xyzw vf20, 2(vi11) | mulaz.xyzw ACC, vf20, vf24 - vu.acc.mula_xyzw(vu.vf20, vu.vf24.z()); lq_buffer_xyzw(vu.vf20, vu.vi11 + 2); - // lq.xyzw vf27, 2(vi14) | maddw.xyzw vf25, vf25, vf24 - vu.acc.madd_xyzw(vu.vf25, vu.vf25, vu.vf24.w()); lq_buffer_xyzw(vu.vf27, vu.vi14 + 2); - // lq.xyzw vf23, 3(vi11) | mulaz.xyzw ACC, vf23, vf24 - vu.acc.mula_xyzw(vu.vf23, vu.vf24.z()); lq_buffer_xyzw(vu.vf23, vu.vi11 + 3); - // lq.xyzw vf28, 3(vi14) | maddw.xyzw vf26, vf26, vf24 - vu.acc.madd_xyzw(vu.vf26, vu.vf26, vu.vf24.w()); lq_buffer_xyzw(vu.vf28, vu.vi14 + 3); - // lq.xyzw vf20, 4(vi11) | mulaz.xyzw ACC, vf20, vf24 - vu.acc.mula_xyzw(vu.vf20, vu.vf24.z()); lq_buffer_xyzw(vu.vf20, vu.vi11 + 4); - // lq.xyz vf29, 4(vi14) | maddw.xyzw vf27, vf27, vf24 - vu.acc.madd_xyzw(vu.vf27, vu.vf27, vu.vf24.w()); lq_buffer_xyz(vu.vf29, vu.vi14 + 4); - // lq.xyzw vf23, 5(vi11) | mulaz.xyzw ACC, vf23, vf24 - vu.acc.mula_xyzw(vu.vf23, vu.vf24.z()); lq_buffer_xyzw(vu.vf23, vu.vi11 + 5); - // lq.xyz vf30, 5(vi14) | maddw.xyzw vf28, vf28, vf24 - vu.acc.madd_xyzw(vu.vf28, vu.vf28, vu.vf24.w()); lq_buffer_xyz(vu.vf30, vu.vi14 + 5); - // lq.xyzw vf20, 6(vi11) | mulaz.xyzw ACC, vf20, vf24 - vu.acc.mula_xyzw(vu.vf20, vu.vf24.z()); lq_buffer_xyzw(vu.vf20, vu.vi11 + 6); - // lq.xyzw vf31, 6(vi14) | maddw.xyz vf29, vf29, vf24 - vu.acc.madd_xyz(vu.vf29, vu.vf29, vu.vf24.w()); lq_buffer_xyzw(vu.vf31, vu.vi14 + 6); - // lqi.xyzw vf23, vi02 | mulaz.xyzw ACC, vf23, vf24 - vu.acc.mula_xyzw(vu.vf23, vu.vf24.z()); lq_buffer_xyzw(vu.vf23, vu.vi02++); - // mtir vi11, vf12.x | maddw.xyz vf30, vf30, vf24 - vu.acc.madd_xyz(vu.vf30, vu.vf30, vu.vf24.w()); vu.vi11 = vu.vf12.x_as_u16(); - // mtir vi14, vf12.y | mulaz.xyzw ACC, vf20, vf24 - vu.acc.mula_xyzw(vu.vf20, vu.vf24.z()); vu.vi14 = vu.vf12.y_as_u16(); -// BRANCH! - // b L108 | maddw.xyzw vf31, vf31, vf24 - vu.acc.madd_xyzw(vu.vf31, vu.vf31, vu.vf24.w()); bc = true; - // lqi.xyzw vf23, vi03 | itof0.xyzw vf24, vf23 - vu.vf24.itof0(Mask::xyzw, vu.vf23); lq_buffer_xyzw(vu.vf23, vu.vi03++); - if (bc) { goto L108; } - - - L123: -// BRANCH! - // ibgez vi09, L124 | mulaz.xyzw ACC, vf29, vf09 - vu.acc.mula_xyzw(vu.vf29, vu.vf09.z()); bc = ((s16)vu.vi09) >= 0; - // sq.xyzw vf21, 2(vi12) | maddaz.xyzw ACC, vf30, vf12 - vu.acc.madda_xyzw(vu.vf30, vu.vf12.z()); sq_buffer_xyzw(vu.vf21, vu.vi12 + 2); - if (bc) { goto L124; } - - - // nop | ftoi4.xyzw vf21, vf10 - vu.vf21.ftoi4(Mask::xyzw, vu.vf10); - L124: - // mfp.w vf20, P | maddz.xyz vf12, vf31, vf15 - vu.acc.madd_xyz(vu.vf12, vu.vf31, vu.vf15.z()); vu.vf20.mfp(Mask::w, vu.P); - // sq.xyzw vf16, 0(vi12) | miniy.xyzw vf13, vf13, vf17 - vu.vf13.mini_xyzw(vu.vf13, vu.vf17.y()); sq_buffer_xyzw(vu.vf16, vu.vi12); - // sq.xyzw vf16, 0(vi15) | miniw.w vf08, vf08, vf03 - vu.vf08.mini(Mask::w, vu.vf08, vu.vf03.w()); sq_buffer_xyzw(vu.vf16, vu.vi15); - // sq.xyzw vf21, 2(vi15) | mulaw.xyzw ACC, vf25, vf09 - vu.acc.mula_xyzw(vu.vf25, vu.vf09.w()); sq_buffer_xyzw(vu.vf21, vu.vi15 + 2); - // ilw.y vi09, -6(vi01) | mulw.xyzw vf11, vf11, vf20 - vu.vf11.mul_xyzw(vu.vf11, vu.vf20.w()); ilw_buffer(Mask::y, vu.vi09, vu.vi01 + -6); - // 1024.0 | ftoi0.xyzw vf13, vf13 :i - vu.vf13.ftoi0(Mask::xyzw, vu.vf13); vu.I = 1024.0; - // erleng.xyz P, vf12 | maxi.xy vf08, vf08, I - vu.vf08.maxi(Mask::xy, vu.vf08, vu.I); vu.P = erleng(vu.vf12); /* TODO erleng */ -// BRANCH! - // ibne vi06, vi03, L110 | maddaw.xyzw ACC, vf26, vf12 - vu.acc.madda_xyzw(vu.vf26, vu.vf12.w()); bc = (vu.vi06 != vu.vi03); - // mr32.z vf15, vf00 | maddw.xyzw vf09, vf27, vf15 - vu.acc.madd_xyzw(vu.vf09, vu.vf27, vu.vf15.w()); vu.vf15.z() = 1.f; - if (bc) { goto L110; } - - -// BRANCH! - // ibne vi07, vi03, L133 | nop - bc = (vu.vi07 != vu.vi03); - // nop | nop - - if (bc) { goto L133; } - - -// BRANCH! - // b L163 | nop - bc = true; - // nop | nop - - if (bc) { goto L163; } - - - L125: - // erleng.xyz P, vf12 | maxi.xy vf08, vf08, I - vu.vf08.maxi(Mask::xy, vu.vf08, vu.I); vu.P = erleng(vu.vf12); /* TODO erleng */ - // 3072.0 | nop :i - vu.I = 3072.0; - // nop | minii.xy vf08, vf08, I - vu.vf08.minii(Mask::xy, vu.vf08, vu.I); - // nop | maddaw.xyzw ACC, vf26, vf12 - vu.acc.madda_xyzw(vu.vf26, vu.vf12.w()); - // mr32.z vf15, vf00 | maddw.xyzw vf09, vf27, vf15 - vu.acc.madd_xyzw(vu.vf09, vu.vf27, vu.vf15.w()); vu.vf15.z() = 1.f; - L126: - // lqi.xyzw vf10, vi01 | mulax.xyzw ACC, vf01, vf11 - vu.acc.mula_xyzw(vu.vf01, vu.vf11.x()); lq_buffer_xyzw(vu.vf10, vu.vi01++); -// BRANCH! - // b L128 | madday.xyzw ACC, vf02, vf11 - vu.acc.madda_xyzw(vu.vf02, vu.vf11.y()); bc = true; - // nop | maddz.xyzw vf11, vf03, vf11 - vu.acc.madd_xyzw(vu.vf11, vu.vf03, vu.vf11.z()); - if (bc) { goto L128; } - - - L127: - // 3072.0 | mulax.xyzw ACC, vf01, vf11 :i - vu.acc.mula_xyzw(vu.vf01, vu.vf11.x()); vu.I = 3072.0; - // lqi.xyzw vf10, vi01 | minii.xy vf08, vf08, I - vu.vf08.minii(Mask::xy, vu.vf08, vu.I); lq_buffer_xyzw(vu.vf10, vu.vi01++); - // sq.xyzw vf13, 1(vi12) | madday.xyzw ACC, vf02, vf11 - vu.acc.madda_xyzw(vu.vf02, vu.vf11.y()); sq_buffer_xyzw(vu.vf13, vu.vi12 + 1); - // sq.xyzw vf13, 1(vi15) | maddz.xyzw vf11, vf03, vf11 - vu.acc.madd_xyzw(vu.vf11, vu.vf03, vu.vf11.z()); sq_buffer_xyzw(vu.vf13, vu.vi15 + 1); - L128: - // lqi.xyzw vf13, vi01 | add.xyzw vf09, vf09, vf28 - vu.vf09.add_xyzw(vu.vf09, vu.vf28); lq_buffer_xyzw(vu.vf13, vu.vi01++); - // lqi.xyzw vf16, vi01 | maxw.w vf08, vf08, vf02 - vu.vf08.max(Mask::w, vu.vf08, vu.vf02.w()); lq_buffer_xyzw(vu.vf16, vu.vi01++); - // mtir vi12, vf10.x | itof0.xyzw vf23, vf23 - vu.vf23.itof0(Mask::xyzw, vu.vf23); vu.vi12 = vu.vf10.x_as_u16(); - // mtir vi15, vf10.y | maxx.xyzw vf11, vf11, vf00 - vu.vf11.max_xyzw(vu.vf11, vu.vf00.x()); vu.vi15 = vu.vf10.y_as_u16(); - // nop | miniw.w vf09, vf09, vf01 - vu.vf09.mini(Mask::w, vu.vf09, vu.vf01.w()); - // div Q, vf01.w, vf09.w | add.zw vf10, vf10, vf17 - vu.vf10.add(Mask::zw, vu.vf10, vu.vf17); vu.Q = vu.vf01.w() / vu.vf09.w(); - - // move.xyzw vf21, vf08 | add.xyzw vf13, vf13, vf18 - vu.vf13.add_xyzw(vu.vf13, vu.vf18); vu.vf21.move_xyzw(vu.vf08); - // iand vi12, vi12, vi05 | add.xyzw vf16, vf16, vf19 - vu.vf16.add_xyzw(vu.vf16, vu.vf19); vu.vi12 = vu.vi12 & vu.vi05; - // ilw.w vi08, -1(vi02) | mulax.xyzw ACC, vf04, vf11 - vu.acc.mula_xyzw(vu.vf04, vu.vf11.x()); ilw_buffer(Mask::w, vu.vi08, vu.vi02 + -1); -// BRANCH! - // ibgtz vi09, L129 | madday.xyzw ACC, vf05, vf11 - vu.acc.madda_xyzw(vu.vf05, vu.vf11.y()); bc = ((s16)vu.vi09) > 0; - // iand vi15, vi15, vi05 | maddaz.xyzw ACC, vf06, vf11 - vu.acc.madda_xyzw(vu.vf06, vu.vf11.z()); vu.vi15 = vu.vi15 & vu.vi05; - if (bc) { goto L129; } - - - // nop | addx.w vf21, vf21, vf17 - vu.vf21.add(Mask::w, vu.vf21, vu.vf17.x()); - L129: -// BRANCH! - // ibne vi05, vi12, L130 | maddw.xyzw vf11, vf07, vf00 - vu.acc.madd_xyzw(vu.vf11, vu.vf07, vu.vf00.w()); bc = (vu.vi05 != vu.vi12); - // ilw.x vi09, -9(vi01) | mul.xyz vf09, vf09, Q - vu.vf09.mul(Mask::xyz, vu.vf09, vu.Q); /* TODO mulq */ ilw_buffer(Mask::x, vu.vi09, vu.vi01 + -9); - if (bc) { goto L130; } - - - // mtir vi12, vf13.x | mul.xyzw vf15, vf15, Q - vu.vf15.mul_xyzw(vu.vf15, vu.Q); /* TODO mulq */ vu.vi12 = vu.vf13.x_as_u16(); - // mtir vi15, vf13.y | ftoi4.xyzw vf21, vf21 - vu.vf21.ftoi4(Mask::xyzw, vu.vf21); vu.vi15 = vu.vf13.y_as_u16(); -// BRANCH! - // b L131 | mul.xyzw vf11, vf11, vf23 - vu.vf11.mul_xyzw(vu.vf11, vu.vf23); bc = true; - // lqi.xyzw vf23, vi03 | add.xyzw vf09, vf09, vf22 - vu.vf09.add_xyzw(vu.vf09, vu.vf22); lq_buffer_xyzw(vu.vf23, vu.vi03++); - if (bc) { goto L131; } - - - L130: - // lq.xyzw vf20, 0(vi12) | mul.xyzw vf15, vf15, Q - vu.vf15.mul_xyzw(vu.vf15, vu.Q); /* TODO mulq */ lq_buffer_xyzw(vu.vf20, vu.vi12); - // nop | mulw.xyzw vf24, vf24, vf29 - vu.vf24.mul_xyzw(vu.vf24, vu.vf29.w()); - // lq.xyzw vf31, 0(vi15) | ftoi4.xyzw vf21, vf21 - vu.vf21.ftoi4(Mask::xyzw, vu.vf21); lq_buffer_xyzw(vu.vf31, vu.vi15); - // lq.xyzw vf25, 0(vi08) | mul.xyzw vf11, vf11, vf23 - vu.vf11.mul_xyzw(vu.vf11, vu.vf23); lq_buffer_xyzw(vu.vf25, vu.vi08); - // lq.xyzw vf23, 1(vi12) | add.xyzw vf09, vf09, vf22 - vu.vf09.add_xyzw(vu.vf09, vu.vf22); lq_buffer_xyzw(vu.vf23, vu.vi12 + 1); - // lq.xyzw vf20, 1(vi15) | mulax.xyzw ACC, vf20, vf24 - vu.acc.mula_xyzw(vu.vf20, vu.vf24.x()); lq_buffer_xyzw(vu.vf20, vu.vi15 + 1); - // lq.xyzw vf26, 1(vi08) | madday.xyzw ACC, vf31, vf24 - vu.acc.madda_xyzw(vu.vf31, vu.vf24.y()); lq_buffer_xyzw(vu.vf26, vu.vi08 + 1); - // lq.xyzw vf31, 2(vi12) | maddz.xyzw vf25, vf25, vf24 - vu.acc.madd_xyzw(vu.vf25, vu.vf25, vu.vf24.z()); lq_buffer_xyzw(vu.vf31, vu.vi12 + 2); - // lq.xyzw vf23, 2(vi15) | mulax.xyzw ACC, vf23, vf24 - vu.acc.mula_xyzw(vu.vf23, vu.vf24.x()); lq_buffer_xyzw(vu.vf23, vu.vi15 + 2); - // lq.xyzw vf27, 2(vi08) | madday.xyzw ACC, vf20, vf24 - vu.acc.madda_xyzw(vu.vf20, vu.vf24.y()); lq_buffer_xyzw(vu.vf27, vu.vi08 + 2); - // lq.xyzw vf20, 3(vi12) | maddz.xyzw vf26, vf26, vf24 - vu.acc.madd_xyzw(vu.vf26, vu.vf26, vu.vf24.z()); lq_buffer_xyzw(vu.vf20, vu.vi12 + 3); - // lq.xyzw vf31, 3(vi15) | mulax.xyzw ACC, vf31, vf24 - vu.acc.mula_xyzw(vu.vf31, vu.vf24.x()); lq_buffer_xyzw(vu.vf31, vu.vi15 + 3); - // lq.xyzw vf28, 3(vi08) | madday.xyzw ACC, vf23, vf24 - vu.acc.madda_xyzw(vu.vf23, vu.vf24.y()); lq_buffer_xyzw(vu.vf28, vu.vi08 + 3); - // lq.xyzw vf23, 4(vi12) | maddz.xyzw vf27, vf27, vf24 - vu.acc.madd_xyzw(vu.vf27, vu.vf27, vu.vf24.z()); lq_buffer_xyzw(vu.vf23, vu.vi12 + 4); - // lq.xyzw vf20, 4(vi15) | mulax.xyzw ACC, vf20, vf24 - vu.acc.mula_xyzw(vu.vf20, vu.vf24.x()); lq_buffer_xyzw(vu.vf20, vu.vi15 + 4); - // lq.xyz vf29, 4(vi08) | madday.xyzw ACC, vf31, vf24 - vu.acc.madda_xyzw(vu.vf31, vu.vf24.y()); lq_buffer_xyz(vu.vf29, vu.vi08 + 4); - // lq.xyzw vf31, 5(vi12) | maddz.xyzw vf28, vf28, vf24 - vu.acc.madd_xyzw(vu.vf28, vu.vf28, vu.vf24.z()); lq_buffer_xyzw(vu.vf31, vu.vi12 + 5); - // lq.xyzw vf23, 5(vi15) | mulax.xyzw ACC, vf23, vf24 - vu.acc.mula_xyzw(vu.vf23, vu.vf24.x()); lq_buffer_xyzw(vu.vf23, vu.vi15 + 5); - // lq.xyz vf30, 5(vi08) | madday.xyzw ACC, vf20, vf24 - vu.acc.madda_xyzw(vu.vf20, vu.vf24.y()); lq_buffer_xyz(vu.vf30, vu.vi08 + 5); - // lq.xyzw vf20, 6(vi12) | maddz.xyz vf29, vf29, vf24 - vu.acc.madd_xyz(vu.vf29, vu.vf29, vu.vf24.z()); lq_buffer_xyzw(vu.vf20, vu.vi12 + 6); - // lq.xyzw vf22, 6(vi15) | mulax.xyzw ACC, vf31, vf24 - vu.acc.mula_xyzw(vu.vf31, vu.vf24.x()); lq_buffer_xyzw(vu.vf22, vu.vi15 + 6); - // lq.xyzw vf31, 6(vi08) | madday.xyzw ACC, vf23, vf24 - vu.acc.madda_xyzw(vu.vf23, vu.vf24.y()); lq_buffer_xyzw(vu.vf31, vu.vi08 + 6); - // lqi.xyzw vf23, vi02 | maddz.xyz vf30, vf30, vf24 - vu.acc.madd_xyz(vu.vf30, vu.vf30, vu.vf24.z()); lq_buffer_xyzw(vu.vf23, vu.vi02++); - // mtir vi12, vf13.x | mulax.xyzw ACC, vf20, vf24 - vu.acc.mula_xyzw(vu.vf20, vu.vf24.x()); vu.vi12 = vu.vf13.x_as_u16(); - // mtir vi15, vf13.y | madday.xyzw ACC, vf22, vf24 - vu.acc.madda_xyzw(vu.vf22, vu.vf24.y()); vu.vi15 = vu.vf13.y_as_u16(); - // lq.xyzw vf22, 2(vi00) | maddz.xyzw vf31, vf31, vf24 - vu.acc.madd_xyzw(vu.vf31, vu.vf31, vu.vf24.z()); lq_buffer_xyzw(vu.vf22, 2); - // lqi.xyzw vf23, vi03 | itof0.xyzw vf24, vf23 - vu.vf24.itof0(Mask::xyzw, vu.vf23); lq_buffer_xyzw(vu.vf23, vu.vi03++); - L131: -// BRANCH! - // ibgez vi09, L132 | mulaz.xyzw ACC, vf29, vf10 - vu.acc.mula_xyzw(vu.vf29, vu.vf10.z()); bc = ((s16)vu.vi09) >= 0; - // sq.xyzw vf21, 2(vi10) | maddaz.xyzw ACC, vf30, vf13 - vu.acc.madda_xyzw(vu.vf30, vu.vf13.z()); sq_buffer_xyzw(vu.vf21, vu.vi10 + 2); - if (bc) { goto L132; } - - - // nop | ftoi4.xyzw vf21, vf08 - vu.vf21.ftoi4(Mask::xyzw, vu.vf08); - L132: - // mfp.w vf20, P | maddz.xyz vf13, vf31, vf16 - vu.acc.madd_xyz(vu.vf13, vu.vf31, vu.vf16.z()); vu.vf20.mfp(Mask::w, vu.P); - // sq.xyzw vf14, 0(vi10) | miniy.xyzw vf11, vf11, vf17 - vu.vf11.mini_xyzw(vu.vf11, vu.vf17.y()); sq_buffer_xyzw(vu.vf14, vu.vi10); - // sq.xyzw vf14, 0(vi13) | miniw.w vf09, vf09, vf03 - vu.vf09.mini(Mask::w, vu.vf09, vu.vf03.w()); sq_buffer_xyzw(vu.vf14, vu.vi13); - // sq.xyzw vf21, 2(vi13) | mulaw.xyzw ACC, vf25, vf10 - vu.acc.mula_xyzw(vu.vf25, vu.vf10.w()); sq_buffer_xyzw(vu.vf21, vu.vi13 + 2); - // ilw.y vi09, -6(vi01) | mulw.xyzw vf12, vf12, vf20 - vu.vf12.mul_xyzw(vu.vf12, vu.vf20.w()); ilw_buffer(Mask::y, vu.vi09, vu.vi01 + -6); - // 1024.0 | ftoi0.xyzw vf11, vf11 :i - vu.vf11.ftoi0(Mask::xyzw, vu.vf11); vu.I = 1024.0; - // erleng.xyz P, vf13 | maxi.xy vf09, vf09, I - vu.vf09.maxi(Mask::xy, vu.vf09, vu.I); vu.P = erleng(vu.vf13); /* TODO erleng */ -// BRANCH! - // ibeq vi07, vi03, L143 | maddaw.xyzw ACC, vf26, vf13 - vu.acc.madda_xyzw(vu.vf26, vu.vf13.w()); bc = (vu.vi07 == vu.vi03); - // mr32.z vf16, vf00 | maddw.xyzw vf10, vf27, vf16 - vu.acc.madd_xyzw(vu.vf10, vu.vf27, vu.vf16.w()); vu.vf16.z() = 1.f; - if (bc) { goto L143; } - - - L133: - // 3072.0 | mulax.xyzw ACC, vf01, vf12 :i - vu.acc.mula_xyzw(vu.vf01, vu.vf12.x()); vu.I = 3072.0; - // lqi.xyzw vf08, vi01 | minii.xy vf09, vf09, I - vu.vf09.minii(Mask::xy, vu.vf09, vu.I); lq_buffer_xyzw(vu.vf08, vu.vi01++); - // sq.xyzw vf11, 1(vi10) | madday.xyzw ACC, vf02, vf12 - vu.acc.madda_xyzw(vu.vf02, vu.vf12.y()); sq_buffer_xyzw(vu.vf11, vu.vi10 + 1); - // sq.xyzw vf11, 1(vi13) | maddz.xyzw vf12, vf03, vf12 - vu.acc.madd_xyzw(vu.vf12, vu.vf03, vu.vf12.z()); sq_buffer_xyzw(vu.vf11, vu.vi13 + 1); - // lqi.xyzw vf11, vi01 | add.xyzw vf10, vf10, vf28 - vu.vf10.add_xyzw(vu.vf10, vu.vf28); lq_buffer_xyzw(vu.vf11, vu.vi01++); - // lqi.xyzw vf14, vi01 | maxw.w vf09, vf09, vf02 - vu.vf09.max(Mask::w, vu.vf09, vu.vf02.w()); lq_buffer_xyzw(vu.vf14, vu.vi01++); - // mtir vi10, vf08.x | itof0.xyzw vf23, vf23 - vu.vf23.itof0(Mask::xyzw, vu.vf23); vu.vi10 = vu.vf08.x_as_u16(); - // mtir vi13, vf08.y | maxx.xyzw vf12, vf12, vf00 - vu.vf12.max_xyzw(vu.vf12, vu.vf00.x()); vu.vi13 = vu.vf08.y_as_u16(); - // nop | miniw.w vf10, vf10, vf01 - vu.vf10.mini(Mask::w, vu.vf10, vu.vf01.w()); - // div Q, vf01.w, vf10.w | add.zw vf08, vf08, vf17 - vu.vf08.add(Mask::zw, vu.vf08, vu.vf17); vu.Q = vu.vf01.w() / vu.vf10.w(); - - // move.xyzw vf21, vf09 | add.xyzw vf11, vf11, vf18 - vu.vf11.add_xyzw(vu.vf11, vu.vf18); vu.vf21.move_xyzw(vu.vf09); - // iand vi10, vi10, vi05 | add.xyzw vf14, vf14, vf19 - vu.vf14.add_xyzw(vu.vf14, vu.vf19); vu.vi10 = vu.vi10 & vu.vi05; - // ilw.w vi08, -1(vi02) | mulax.xyzw ACC, vf04, vf12 - vu.acc.mula_xyzw(vu.vf04, vu.vf12.x()); ilw_buffer(Mask::w, vu.vi08, vu.vi02 + -1); -// BRANCH! - // ibgtz vi09, L134 | madday.xyzw ACC, vf05, vf12 - vu.acc.madda_xyzw(vu.vf05, vu.vf12.y()); bc = ((s16)vu.vi09) > 0; - // iand vi13, vi13, vi05 | maddaz.xyzw ACC, vf06, vf12 - vu.acc.madda_xyzw(vu.vf06, vu.vf12.z()); vu.vi13 = vu.vi13 & vu.vi05; - if (bc) { goto L134; } - - - // nop | addx.w vf21, vf21, vf17 - vu.vf21.add(Mask::w, vu.vf21, vu.vf17.x()); - L134: -// BRANCH! - // ibne vi05, vi10, L135 | maddw.xyzw vf12, vf07, vf00 - vu.acc.madd_xyzw(vu.vf12, vu.vf07, vu.vf00.w()); bc = (vu.vi05 != vu.vi10); - // ilw.x vi09, -9(vi01) | mul.xyz vf10, vf10, Q - vu.vf10.mul(Mask::xyz, vu.vf10, vu.Q); /* TODO mulq */ ilw_buffer(Mask::x, vu.vi09, vu.vi01 + -9); - if (bc) { goto L135; } - - - // mtir vi10, vf11.x | mul.xyzw vf16, vf16, Q - vu.vf16.mul_xyzw(vu.vf16, vu.Q); /* TODO mulq */ vu.vi10 = vu.vf11.x_as_u16(); - // mtir vi13, vf11.y | ftoi4.xyzw vf21, vf21 - vu.vf21.ftoi4(Mask::xyzw, vu.vf21); vu.vi13 = vu.vf11.y_as_u16(); -// BRANCH! - // b L136 | mul.xyzw vf12, vf12, vf23 - vu.vf12.mul_xyzw(vu.vf12, vu.vf23); bc = true; - // lqi.xyzw vf23, vi03 | add.xyzw vf10, vf10, vf22 - vu.vf10.add_xyzw(vu.vf10, vu.vf22); lq_buffer_xyzw(vu.vf23, vu.vi03++); - if (bc) { goto L136; } - - - L135: - // lq.xyzw vf20, 0(vi10) | mul.xyzw vf16, vf16, Q - vu.vf16.mul_xyzw(vu.vf16, vu.Q); /* TODO mulq */ lq_buffer_xyzw(vu.vf20, vu.vi10); - // nop | mulw.xyzw vf24, vf24, vf29 - vu.vf24.mul_xyzw(vu.vf24, vu.vf29.w()); - // lq.xyzw vf31, 0(vi13) | ftoi4.xyzw vf21, vf21 - vu.vf21.ftoi4(Mask::xyzw, vu.vf21); lq_buffer_xyzw(vu.vf31, vu.vi13); - // lq.xyzw vf25, 0(vi08) | mul.xyzw vf12, vf12, vf23 - vu.vf12.mul_xyzw(vu.vf12, vu.vf23); lq_buffer_xyzw(vu.vf25, vu.vi08); - // lq.xyzw vf23, 1(vi10) | add.xyzw vf10, vf10, vf22 - vu.vf10.add_xyzw(vu.vf10, vu.vf22); lq_buffer_xyzw(vu.vf23, vu.vi10 + 1); - // lq.xyzw vf20, 1(vi13) | mulax.xyzw ACC, vf20, vf24 - vu.acc.mula_xyzw(vu.vf20, vu.vf24.x()); lq_buffer_xyzw(vu.vf20, vu.vi13 + 1); - // lq.xyzw vf26, 1(vi08) | madday.xyzw ACC, vf31, vf24 - vu.acc.madda_xyzw(vu.vf31, vu.vf24.y()); lq_buffer_xyzw(vu.vf26, vu.vi08 + 1); - // lq.xyzw vf31, 2(vi10) | maddz.xyzw vf25, vf25, vf24 - vu.acc.madd_xyzw(vu.vf25, vu.vf25, vu.vf24.z()); lq_buffer_xyzw(vu.vf31, vu.vi10 + 2); - // lq.xyzw vf23, 2(vi13) | mulax.xyzw ACC, vf23, vf24 - vu.acc.mula_xyzw(vu.vf23, vu.vf24.x()); lq_buffer_xyzw(vu.vf23, vu.vi13 + 2); - // lq.xyzw vf27, 2(vi08) | madday.xyzw ACC, vf20, vf24 - vu.acc.madda_xyzw(vu.vf20, vu.vf24.y()); lq_buffer_xyzw(vu.vf27, vu.vi08 + 2); - // lq.xyzw vf20, 3(vi10) | maddz.xyzw vf26, vf26, vf24 - vu.acc.madd_xyzw(vu.vf26, vu.vf26, vu.vf24.z()); lq_buffer_xyzw(vu.vf20, vu.vi10 + 3); - // lq.xyzw vf31, 3(vi13) | mulax.xyzw ACC, vf31, vf24 - vu.acc.mula_xyzw(vu.vf31, vu.vf24.x()); lq_buffer_xyzw(vu.vf31, vu.vi13 + 3); - // lq.xyzw vf28, 3(vi08) | madday.xyzw ACC, vf23, vf24 - vu.acc.madda_xyzw(vu.vf23, vu.vf24.y()); lq_buffer_xyzw(vu.vf28, vu.vi08 + 3); - // lq.xyzw vf23, 4(vi10) | maddz.xyzw vf27, vf27, vf24 - vu.acc.madd_xyzw(vu.vf27, vu.vf27, vu.vf24.z()); lq_buffer_xyzw(vu.vf23, vu.vi10 + 4); - // lq.xyzw vf20, 4(vi13) | mulax.xyzw ACC, vf20, vf24 - vu.acc.mula_xyzw(vu.vf20, vu.vf24.x()); lq_buffer_xyzw(vu.vf20, vu.vi13 + 4); - // lq.xyz vf29, 4(vi08) | madday.xyzw ACC, vf31, vf24 - vu.acc.madda_xyzw(vu.vf31, vu.vf24.y()); lq_buffer_xyz(vu.vf29, vu.vi08 + 4); - // lq.xyzw vf31, 5(vi10) | maddz.xyzw vf28, vf28, vf24 - vu.acc.madd_xyzw(vu.vf28, vu.vf28, vu.vf24.z()); lq_buffer_xyzw(vu.vf31, vu.vi10 + 5); - // lq.xyzw vf23, 5(vi13) | mulax.xyzw ACC, vf23, vf24 - vu.acc.mula_xyzw(vu.vf23, vu.vf24.x()); lq_buffer_xyzw(vu.vf23, vu.vi13 + 5); - // lq.xyz vf30, 5(vi08) | madday.xyzw ACC, vf20, vf24 - vu.acc.madda_xyzw(vu.vf20, vu.vf24.y()); lq_buffer_xyz(vu.vf30, vu.vi08 + 5); - // lq.xyzw vf20, 6(vi10) | maddz.xyz vf29, vf29, vf24 - vu.acc.madd_xyz(vu.vf29, vu.vf29, vu.vf24.z()); lq_buffer_xyzw(vu.vf20, vu.vi10 + 6); - // lq.xyzw vf22, 6(vi13) | mulax.xyzw ACC, vf31, vf24 - vu.acc.mula_xyzw(vu.vf31, vu.vf24.x()); lq_buffer_xyzw(vu.vf22, vu.vi13 + 6); - // lq.xyzw vf31, 6(vi08) | madday.xyzw ACC, vf23, vf24 - vu.acc.madda_xyzw(vu.vf23, vu.vf24.y()); lq_buffer_xyzw(vu.vf31, vu.vi08 + 6); - // lqi.xyzw vf23, vi02 | maddz.xyz vf30, vf30, vf24 - vu.acc.madd_xyz(vu.vf30, vu.vf30, vu.vf24.z()); lq_buffer_xyzw(vu.vf23, vu.vi02++); - // mtir vi10, vf11.x | mulax.xyzw ACC, vf20, vf24 - vu.acc.mula_xyzw(vu.vf20, vu.vf24.x()); vu.vi10 = vu.vf11.x_as_u16(); - // mtir vi13, vf11.y | madday.xyzw ACC, vf22, vf24 - vu.acc.madda_xyzw(vu.vf22, vu.vf24.y()); vu.vi13 = vu.vf11.y_as_u16(); - // lq.xyzw vf22, 2(vi00) | maddz.xyzw vf31, vf31, vf24 - vu.acc.madd_xyzw(vu.vf31, vu.vf31, vu.vf24.z()); lq_buffer_xyzw(vu.vf22, 2); - // lqi.xyzw vf23, vi03 | itof0.xyzw vf24, vf23 - vu.vf24.itof0(Mask::xyzw, vu.vf23); lq_buffer_xyzw(vu.vf23, vu.vi03++); - L136: -// BRANCH! - // ibgez vi09, L137 | mulaz.xyzw ACC, vf29, vf08 - vu.acc.mula_xyzw(vu.vf29, vu.vf08.z()); bc = ((s16)vu.vi09) >= 0; - // sq.xyzw vf21, 2(vi11) | maddaz.xyzw ACC, vf30, vf11 - vu.acc.madda_xyzw(vu.vf30, vu.vf11.z()); sq_buffer_xyzw(vu.vf21, vu.vi11 + 2); - if (bc) { goto L137; } - - - // nop | ftoi4.xyzw vf21, vf09 - vu.vf21.ftoi4(Mask::xyzw, vu.vf09); - L137: - // mfp.w vf20, P | maddz.xyz vf11, vf31, vf14 - vu.acc.madd_xyz(vu.vf11, vu.vf31, vu.vf14.z()); vu.vf20.mfp(Mask::w, vu.P); - // sq.xyzw vf15, 0(vi11) | miniy.xyzw vf12, vf12, vf17 - vu.vf12.mini_xyzw(vu.vf12, vu.vf17.y()); sq_buffer_xyzw(vu.vf15, vu.vi11); - // sq.xyzw vf15, 0(vi14) | miniw.w vf10, vf10, vf03 - vu.vf10.mini(Mask::w, vu.vf10, vu.vf03.w()); sq_buffer_xyzw(vu.vf15, vu.vi14); - // sq.xyzw vf21, 2(vi14) | mulaw.xyzw ACC, vf25, vf08 - vu.acc.mula_xyzw(vu.vf25, vu.vf08.w()); sq_buffer_xyzw(vu.vf21, vu.vi14 + 2); - // ilw.y vi09, -6(vi01) | mulw.xyzw vf13, vf13, vf20 - vu.vf13.mul_xyzw(vu.vf13, vu.vf20.w()); ilw_buffer(Mask::y, vu.vi09, vu.vi01 + -6); - // 1024.0 | ftoi0.xyzw vf12, vf12 :i - vu.vf12.ftoi0(Mask::xyzw, vu.vf12); vu.I = 1024.0; - // erleng.xyz P, vf11 | maxi.xy vf10, vf10, I - vu.vf10.maxi(Mask::xy, vu.vf10, vu.I); vu.P = erleng(vu.vf11); /* TODO erleng */ -// BRANCH! - // ibeq vi07, vi03, L153 | maddaw.xyzw ACC, vf26, vf11 - vu.acc.madda_xyzw(vu.vf26, vu.vf11.w()); bc = (vu.vi07 == vu.vi03); - // mr32.z vf14, vf00 | maddw.xyzw vf08, vf27, vf14 - vu.acc.madd_xyzw(vu.vf08, vu.vf27, vu.vf14.w()); vu.vf14.z() = 1.f; - if (bc) { goto L153; } - - - L138: - // 3072.0 | mulax.xyzw ACC, vf01, vf13 :i - vu.acc.mula_xyzw(vu.vf01, vu.vf13.x()); vu.I = 3072.0; - // lqi.xyzw vf09, vi01 | minii.xy vf10, vf10, I - vu.vf10.minii(Mask::xy, vu.vf10, vu.I); lq_buffer_xyzw(vu.vf09, vu.vi01++); - // sq.xyzw vf12, 1(vi11) | madday.xyzw ACC, vf02, vf13 - vu.acc.madda_xyzw(vu.vf02, vu.vf13.y()); sq_buffer_xyzw(vu.vf12, vu.vi11 + 1); - // sq.xyzw vf12, 1(vi14) | maddz.xyzw vf13, vf03, vf13 - vu.acc.madd_xyzw(vu.vf13, vu.vf03, vu.vf13.z()); sq_buffer_xyzw(vu.vf12, vu.vi14 + 1); - // lqi.xyzw vf12, vi01 | add.xyzw vf08, vf08, vf28 - vu.vf08.add_xyzw(vu.vf08, vu.vf28); lq_buffer_xyzw(vu.vf12, vu.vi01++); - // lqi.xyzw vf15, vi01 | maxw.w vf10, vf10, vf02 - vu.vf10.max(Mask::w, vu.vf10, vu.vf02.w()); lq_buffer_xyzw(vu.vf15, vu.vi01++); - // mtir vi11, vf09.x | itof0.xyzw vf23, vf23 - vu.vf23.itof0(Mask::xyzw, vu.vf23); vu.vi11 = vu.vf09.x_as_u16(); - // mtir vi14, vf09.y | maxx.xyzw vf13, vf13, vf00 - vu.vf13.max_xyzw(vu.vf13, vu.vf00.x()); vu.vi14 = vu.vf09.y_as_u16(); - // nop | miniw.w vf08, vf08, vf01 - vu.vf08.mini(Mask::w, vu.vf08, vu.vf01.w()); - // div Q, vf01.w, vf08.w | add.zw vf09, vf09, vf17 - vu.vf09.add(Mask::zw, vu.vf09, vu.vf17); vu.Q = vu.vf01.w() / vu.vf08.w(); - - // move.xyzw vf21, vf10 | add.xyzw vf12, vf12, vf18 - vu.vf12.add_xyzw(vu.vf12, vu.vf18); vu.vf21.move_xyzw(vu.vf10); - // iand vi11, vi11, vi05 | add.xyzw vf15, vf15, vf19 - vu.vf15.add_xyzw(vu.vf15, vu.vf19); vu.vi11 = vu.vi11 & vu.vi05; - // ilw.w vi08, -1(vi02) | mulax.xyzw ACC, vf04, vf13 - vu.acc.mula_xyzw(vu.vf04, vu.vf13.x()); ilw_buffer(Mask::w, vu.vi08, vu.vi02 + -1); -// BRANCH! - // ibgtz vi09, L139 | madday.xyzw ACC, vf05, vf13 - vu.acc.madda_xyzw(vu.vf05, vu.vf13.y()); bc = ((s16)vu.vi09) > 0; - // iand vi14, vi14, vi05 | maddaz.xyzw ACC, vf06, vf13 - vu.acc.madda_xyzw(vu.vf06, vu.vf13.z()); vu.vi14 = vu.vi14 & vu.vi05; - if (bc) { goto L139; } - - - // nop | addx.w vf21, vf21, vf17 - vu.vf21.add(Mask::w, vu.vf21, vu.vf17.x()); - L139: -// BRANCH! - // ibne vi05, vi11, L140 | maddw.xyzw vf13, vf07, vf00 - vu.acc.madd_xyzw(vu.vf13, vu.vf07, vu.vf00.w()); bc = (vu.vi05 != vu.vi11); - // ilw.x vi09, -9(vi01) | mul.xyz vf08, vf08, Q - vu.vf08.mul(Mask::xyz, vu.vf08, vu.Q); /* TODO mulq */ ilw_buffer(Mask::x, vu.vi09, vu.vi01 + -9); - if (bc) { goto L140; } - - - // mtir vi11, vf12.x | mul.xyzw vf14, vf14, Q - vu.vf14.mul_xyzw(vu.vf14, vu.Q); /* TODO mulq */ vu.vi11 = vu.vf12.x_as_u16(); - // mtir vi14, vf12.y | ftoi4.xyzw vf21, vf21 - vu.vf21.ftoi4(Mask::xyzw, vu.vf21); vu.vi14 = vu.vf12.y_as_u16(); -// BRANCH! - // b L141 | mul.xyzw vf13, vf13, vf23 - vu.vf13.mul_xyzw(vu.vf13, vu.vf23); bc = true; - // lqi.xyzw vf23, vi03 | add.xyzw vf08, vf08, vf22 - vu.vf08.add_xyzw(vu.vf08, vu.vf22); lq_buffer_xyzw(vu.vf23, vu.vi03++); - if (bc) { goto L141; } - - - L140: - // lq.xyzw vf20, 0(vi11) | mul.xyzw vf14, vf14, Q - vu.vf14.mul_xyzw(vu.vf14, vu.Q); /* TODO mulq */ lq_buffer_xyzw(vu.vf20, vu.vi11); - // nop | mulw.xyzw vf24, vf24, vf29 - vu.vf24.mul_xyzw(vu.vf24, vu.vf29.w()); - // lq.xyzw vf31, 0(vi14) | ftoi4.xyzw vf21, vf21 - vu.vf21.ftoi4(Mask::xyzw, vu.vf21); lq_buffer_xyzw(vu.vf31, vu.vi14); - // lq.xyzw vf25, 0(vi08) | mul.xyzw vf13, vf13, vf23 - vu.vf13.mul_xyzw(vu.vf13, vu.vf23); lq_buffer_xyzw(vu.vf25, vu.vi08); - // lq.xyzw vf23, 1(vi11) | add.xyzw vf08, vf08, vf22 - vu.vf08.add_xyzw(vu.vf08, vu.vf22); lq_buffer_xyzw(vu.vf23, vu.vi11 + 1); - // lq.xyzw vf20, 1(vi14) | mulax.xyzw ACC, vf20, vf24 - vu.acc.mula_xyzw(vu.vf20, vu.vf24.x()); lq_buffer_xyzw(vu.vf20, vu.vi14 + 1); - // lq.xyzw vf26, 1(vi08) | madday.xyzw ACC, vf31, vf24 - vu.acc.madda_xyzw(vu.vf31, vu.vf24.y()); lq_buffer_xyzw(vu.vf26, vu.vi08 + 1); - // lq.xyzw vf31, 2(vi11) | maddz.xyzw vf25, vf25, vf24 - vu.acc.madd_xyzw(vu.vf25, vu.vf25, vu.vf24.z()); lq_buffer_xyzw(vu.vf31, vu.vi11 + 2); - // lq.xyzw vf23, 2(vi14) | mulax.xyzw ACC, vf23, vf24 - vu.acc.mula_xyzw(vu.vf23, vu.vf24.x()); lq_buffer_xyzw(vu.vf23, vu.vi14 + 2); - // lq.xyzw vf27, 2(vi08) | madday.xyzw ACC, vf20, vf24 - vu.acc.madda_xyzw(vu.vf20, vu.vf24.y()); lq_buffer_xyzw(vu.vf27, vu.vi08 + 2); - // lq.xyzw vf20, 3(vi11) | maddz.xyzw vf26, vf26, vf24 - vu.acc.madd_xyzw(vu.vf26, vu.vf26, vu.vf24.z()); lq_buffer_xyzw(vu.vf20, vu.vi11 + 3); - // lq.xyzw vf31, 3(vi14) | mulax.xyzw ACC, vf31, vf24 - vu.acc.mula_xyzw(vu.vf31, vu.vf24.x()); lq_buffer_xyzw(vu.vf31, vu.vi14 + 3); - // lq.xyzw vf28, 3(vi08) | madday.xyzw ACC, vf23, vf24 - vu.acc.madda_xyzw(vu.vf23, vu.vf24.y()); lq_buffer_xyzw(vu.vf28, vu.vi08 + 3); - // lq.xyzw vf23, 4(vi11) | maddz.xyzw vf27, vf27, vf24 - vu.acc.madd_xyzw(vu.vf27, vu.vf27, vu.vf24.z()); lq_buffer_xyzw(vu.vf23, vu.vi11 + 4); - // lq.xyzw vf20, 4(vi14) | mulax.xyzw ACC, vf20, vf24 - vu.acc.mula_xyzw(vu.vf20, vu.vf24.x()); lq_buffer_xyzw(vu.vf20, vu.vi14 + 4); - // lq.xyz vf29, 4(vi08) | madday.xyzw ACC, vf31, vf24 - vu.acc.madda_xyzw(vu.vf31, vu.vf24.y()); lq_buffer_xyz(vu.vf29, vu.vi08 + 4); - // lq.xyzw vf31, 5(vi11) | maddz.xyzw vf28, vf28, vf24 - vu.acc.madd_xyzw(vu.vf28, vu.vf28, vu.vf24.z()); lq_buffer_xyzw(vu.vf31, vu.vi11 + 5); - // lq.xyzw vf23, 5(vi14) | mulax.xyzw ACC, vf23, vf24 - vu.acc.mula_xyzw(vu.vf23, vu.vf24.x()); lq_buffer_xyzw(vu.vf23, vu.vi14 + 5); - // lq.xyz vf30, 5(vi08) | madday.xyzw ACC, vf20, vf24 - vu.acc.madda_xyzw(vu.vf20, vu.vf24.y()); lq_buffer_xyz(vu.vf30, vu.vi08 + 5); - // lq.xyzw vf20, 6(vi11) | maddz.xyz vf29, vf29, vf24 - vu.acc.madd_xyz(vu.vf29, vu.vf29, vu.vf24.z()); lq_buffer_xyzw(vu.vf20, vu.vi11 + 6); - // lq.xyzw vf22, 6(vi14) | mulax.xyzw ACC, vf31, vf24 - vu.acc.mula_xyzw(vu.vf31, vu.vf24.x()); lq_buffer_xyzw(vu.vf22, vu.vi14 + 6); - // lq.xyzw vf31, 6(vi08) | madday.xyzw ACC, vf23, vf24 - vu.acc.madda_xyzw(vu.vf23, vu.vf24.y()); lq_buffer_xyzw(vu.vf31, vu.vi08 + 6); - // lqi.xyzw vf23, vi02 | maddz.xyz vf30, vf30, vf24 - vu.acc.madd_xyz(vu.vf30, vu.vf30, vu.vf24.z()); lq_buffer_xyzw(vu.vf23, vu.vi02++); - // mtir vi11, vf12.x | mulax.xyzw ACC, vf20, vf24 - vu.acc.mula_xyzw(vu.vf20, vu.vf24.x()); vu.vi11 = vu.vf12.x_as_u16(); - // mtir vi14, vf12.y | madday.xyzw ACC, vf22, vf24 - vu.acc.madda_xyzw(vu.vf22, vu.vf24.y()); vu.vi14 = vu.vf12.y_as_u16(); - // lq.xyzw vf22, 2(vi00) | maddz.xyzw vf31, vf31, vf24 - vu.acc.madd_xyzw(vu.vf31, vu.vf31, vu.vf24.z()); lq_buffer_xyzw(vu.vf22, 2); - // lqi.xyzw vf23, vi03 | itof0.xyzw vf24, vf23 - vu.vf24.itof0(Mask::xyzw, vu.vf23); lq_buffer_xyzw(vu.vf23, vu.vi03++); - L141: -// BRANCH! - // ibgez vi09, L142 | mulaz.xyzw ACC, vf29, vf09 - vu.acc.mula_xyzw(vu.vf29, vu.vf09.z()); bc = ((s16)vu.vi09) >= 0; - // sq.xyzw vf21, 2(vi12) | maddaz.xyzw ACC, vf30, vf12 - vu.acc.madda_xyzw(vu.vf30, vu.vf12.z()); sq_buffer_xyzw(vu.vf21, vu.vi12 + 2); - if (bc) { goto L142; } - - - // nop | ftoi4.xyzw vf21, vf10 - vu.vf21.ftoi4(Mask::xyzw, vu.vf10); - L142: - // mfp.w vf20, P | maddz.xyz vf12, vf31, vf15 - vu.acc.madd_xyz(vu.vf12, vu.vf31, vu.vf15.z()); vu.vf20.mfp(Mask::w, vu.P); - // sq.xyzw vf16, 0(vi12) | miniy.xyzw vf13, vf13, vf17 - vu.vf13.mini_xyzw(vu.vf13, vu.vf17.y()); sq_buffer_xyzw(vu.vf16, vu.vi12); - // sq.xyzw vf16, 0(vi15) | miniw.w vf08, vf08, vf03 - vu.vf08.mini(Mask::w, vu.vf08, vu.vf03.w()); sq_buffer_xyzw(vu.vf16, vu.vi15); - // sq.xyzw vf21, 2(vi15) | mulaw.xyzw ACC, vf25, vf09 - vu.acc.mula_xyzw(vu.vf25, vu.vf09.w()); sq_buffer_xyzw(vu.vf21, vu.vi15 + 2); - // ilw.y vi09, -6(vi01) | mulw.xyzw vf11, vf11, vf20 - vu.vf11.mul_xyzw(vu.vf11, vu.vf20.w()); ilw_buffer(Mask::y, vu.vi09, vu.vi01 + -6); - // 1024.0 | ftoi0.xyzw vf13, vf13 :i - vu.vf13.ftoi0(Mask::xyzw, vu.vf13); vu.I = 1024.0; - // erleng.xyz P, vf12 | maxi.xy vf08, vf08, I - vu.vf08.maxi(Mask::xy, vu.vf08, vu.I); vu.P = erleng(vu.vf12); /* TODO erleng */ -// BRANCH! - // ibne vi07, vi03, L127 | maddaw.xyzw ACC, vf26, vf12 - vu.acc.madda_xyzw(vu.vf26, vu.vf12.w()); bc = (vu.vi07 != vu.vi03); - // mr32.z vf15, vf00 | maddw.xyzw vf09, vf27, vf15 - vu.acc.madd_xyzw(vu.vf09, vu.vf27, vu.vf15.w()); vu.vf15.z() = 1.f; - if (bc) { goto L127; } - - -// BRANCH! - // b L163 | nop - bc = true; - // nop | nop - - if (bc) { goto L163; } - - - L143: - // ilw.w vi08, 1(vi00) | nop - ilw_buffer(Mask::w, vu.vi08, 1); - // xtop vi02 | mulax.xyzw ACC, vf01, vf12 - vu.acc.mula_xyzw(vu.vf01, vu.vf12.x()); vu.vi02 = xtop(); - // sq.xyzw vf11, 1(vi10) | madday.xyzw ACC, vf02, vf12 - vu.acc.madda_xyzw(vu.vf02, vu.vf12.y()); sq_buffer_xyzw(vu.vf11, vu.vi10 + 1); - // sq.xyzw vf11, 1(vi13) | maddz.xyzw vf12, vf03, vf12 - vu.acc.madd_xyzw(vu.vf12, vu.vf03, vu.vf12.z()); sq_buffer_xyzw(vu.vf11, vu.vi13 + 1); - // iaddiu vi04, vi02, 0x8c | add.xyzw vf10, vf10, vf28 - vu.vf10.add_xyzw(vu.vf10, vu.vf28); vu.vi04 = vu.vi02 + 0x8c; /* 140 */ - // ilwr.x vi05, vi04 | maxw.w vf09, vf09, vf02 - vu.vf09.max(Mask::w, vu.vf09, vu.vf02.w()); ilw_buffer(Mask::x, vu.vi05, vu.vi04); - // ilw.w vi06, 1(vi04) | itof0.xyzw vf23, vf23 - vu.vf23.itof0(Mask::xyzw, vu.vf23); ilw_buffer(Mask::w, vu.vi06, vu.vi04 + 1); -// BRANCH! - // ibne vi00, vi08, L151 | nop - bc = (vu.vi08 != 0); - // ilw.x vi07, 2(vi04) | maxx.xyzw vf12, vf12, vf00 - vu.vf12.max_xyzw(vu.vf12, vu.vf00.x()); ilw_buffer(Mask::x, vu.vi07, vu.vi04 + 2); - if (bc) { goto L151; } - - - L144: - // div Q, vf01.w, vf10.w | minix.xyzw vf25, vf00, vf00 - vu.vf25.mini_xyzw(vu.vf00, vu.vf00.x()); vu.Q = vu.vf01.w() / vu.vf10.w(); - - // move.xyzw vf21, vf09 | minix.xyzw vf26, vf00, vf00 - vu.vf26.mini_xyzw(vu.vf00, vu.vf00.x()); vu.vf21.move_xyzw(vu.vf09); - // iadd vi05, vi05, vi04 | nop - vu.vi05 = vu.vi05 + vu.vi04; - // iaddiu vi04, vi02, 0x173 | mulax.xyzw ACC, vf04, vf12 - vu.acc.mula_xyzw(vu.vf04, vu.vf12.x()); vu.vi04 = vu.vi02 + 0x173; /* 371 */ -// BRANCH! - // ibgtz vi09, L145 | madday.xyzw ACC, vf05, vf12 - vu.acc.madda_xyzw(vu.vf05, vu.vf12.y()); bc = ((s16)vu.vi09) > 0; - // iadd vi06, vi06, vi05 | maddaz.xyzw ACC, vf06, vf12 - vu.acc.madda_xyzw(vu.vf06, vu.vf12.z()); vu.vi06 = vu.vi06 + vu.vi05; - if (bc) { goto L145; } - - - // nop | addx.w vf21, vf21, vf17 - vu.vf21.add(Mask::w, vu.vf21, vu.vf17.x()); - L145: - // iadd vi07, vi07, vi06 | maddw.xyzw vf12, vf07, vf00 - vu.acc.madd_xyzw(vu.vf12, vu.vf07, vu.vf00.w()); vu.vi07 = vu.vi07 + vu.vi06; - // ilw.x vi09, -6(vi01) | mul.xyz vf10, vf10, Q - vu.vf10.mul(Mask::xyz, vu.vf10, vu.Q); /* TODO mulq */ ilw_buffer(Mask::x, vu.vi09, vu.vi01 + -6); - // iaddiu vi08, vi00, 0x1ba | mul.xyzw vf16, vf16, Q - vu.vf16.mul_xyzw(vu.vf16, vu.Q); /* TODO mulq */ vu.vi08 = 0x1ba; /* 442 */ - - // isub vi08, vi08, vi02 | ftoi4.xyzw vf21, vf21 - vu.vf21.ftoi4(Mask::xyzw, vu.vf21); vu.vi08 = vu.vi08 - vu.vi02; - // iaddiu vi08, vi08, 0x173 | mul.xyzw vf12, vf12, vf23 - vu.vf12.mul_xyzw(vu.vf12, vu.vf23); vu.vi08 = vu.vi08 + 0x173; /* 371 */ - // lqi.xyzw vf23, vi03 | add.xyzw vf10, vf10, vf22 - vu.vf10.add_xyzw(vu.vf10, vu.vf22); lq_buffer_xyzw(vu.vf23, vu.vi03++); -// BRANCH! - // ibgez vi09, L146 | nop - bc = ((s16)vu.vi09) >= 0; - // sq.xyzw vf21, 2(vi11) | nop - sq_buffer_xyzw(vu.vf21, vu.vi11 + 2); - if (bc) { goto L146; } - - - // nop | ftoi4.xyzw vf21, vf09 - vu.vf21.ftoi4(Mask::xyzw, vu.vf09); - L146: - // mfp.w vf20, P | nop - vu.vf20.mfp(Mask::w, vu.P); - // sq.xyzw vf15, 0(vi11) | miniy.xyzw vf12, vf12, vf17 - vu.vf12.mini_xyzw(vu.vf12, vu.vf17.y()); sq_buffer_xyzw(vu.vf15, vu.vi11); - // sq.xyzw vf15, 0(vi14) | miniw.w vf10, vf10, vf03 - vu.vf10.mini(Mask::w, vu.vf10, vu.vf03.w()); sq_buffer_xyzw(vu.vf15, vu.vi14); - // sq.xyzw vf21, 2(vi14) | nop - sq_buffer_xyzw(vu.vf21, vu.vi14 + 2); - // ilw.y vi09, -3(vi01) | mulw.xyzw vf13, vf13, vf20 - vu.vf13.mul_xyzw(vu.vf13, vu.vf20.w()); ilw_buffer(Mask::y, vu.vi09, vu.vi01 + -3); - // mfir.x vf25, vi04 | ftoi0.xyzw vf12, vf12 - vu.vf12.ftoi0(Mask::xyzw, vu.vf12); vu.vf25.mfir(Mask::x, vu.vi04); - // mfir.y vf25, vi04 | nop - vu.vf25.mfir(Mask::y, vu.vi04); - // mfir.x vf26, vi08 | nop - vu.vf26.mfir(Mask::x, vu.vi08); - // ilw.w vi02, 1(vi00) | nop - ilw_buffer(Mask::w, vu.vi02, 1); - // mfir.y vf26, vi04 | mulax.xyzw ACC, vf01, vf13 - vu.acc.mula_xyzw(vu.vf01, vu.vf13.x()); vu.vf26.mfir(Mask::y, vu.vi04); - // sq.xyzw vf12, 1(vi11) | madday.xyzw ACC, vf02, vf13 - vu.acc.madda_xyzw(vu.vf02, vu.vf13.y()); sq_buffer_xyzw(vu.vf12, vu.vi11 + 1); - // sq.xyzw vf12, 1(vi14) | maddz.xyzw vf13, vf03, vf13 - vu.acc.madd_xyzw(vu.vf13, vu.vf03, vu.vf13.z()); sq_buffer_xyzw(vu.vf12, vu.vi14 + 1); - // nop | nop - -// BRANCH! - // ibne vi00, vi02, L152 | maxw.w vf10, vf10, vf02 - vu.vf10.max(Mask::w, vu.vf10, vu.vf02.w()); bc = (vu.vi02 != 0); - // nop | itof0.xyzw vf23, vf23 - vu.vf23.itof0(Mask::xyzw, vu.vf23); - if (bc) { goto L152; } - - - L147: - // 8388608.0 | maxx.xyzw vf13, vf13, vf00 :i - vu.vf13.max_xyzw(vu.vf13, vu.vf00.x()); vu.I = 8388608.0; - // 256.0 | maxi.xy vf27, vf00, I :i - vu.vf27.maxi(Mask::xy, vu.vf00, vu.I); vu.I = 256.0; - // move.xyzw vf21, vf10 | maxi.w vf27, vf00, I - vu.vf27.maxi(Mask::w, vu.vf00, vu.I); vu.vf21.move_xyzw(vu.vf10); - // nop | nop - - // nop | mulax.xyzw ACC, vf04, vf13 - vu.acc.mula_xyzw(vu.vf04, vu.vf13.x()); -// BRANCH! - // ibgtz vi09, L148 | madday.xyzw ACC, vf05, vf13 - vu.acc.madda_xyzw(vu.vf05, vu.vf13.y()); bc = ((s16)vu.vi09) > 0; - // nop | maddaz.xyzw ACC, vf06, vf13 - vu.acc.madda_xyzw(vu.vf06, vu.vf13.z()); - if (bc) { goto L148; } - - - // nop | addx.w vf21, vf21, vf17 - vu.vf21.add(Mask::w, vu.vf21, vu.vf17.x()); - L148: - // nop | maddw.xyzw vf13, vf07, vf00 - vu.acc.madd_xyzw(vu.vf13, vu.vf07, vu.vf00.w()); - // ilw.x vi09, -3(vi01) | itof0.xyzw vf25, vf25 - vu.vf25.itof0(Mask::xyzw, vu.vf25); ilw_buffer(Mask::x, vu.vi09, vu.vi01 + -3); - // nop | itof0.xyzw vf26, vf26 - vu.vf26.itof0(Mask::xyzw, vu.vf26); - // nop | ftoi4.xyzw vf21, vf21 - vu.vf21.ftoi4(Mask::xyzw, vu.vf21); - // nop | mul.xyzw vf13, vf13, vf23 - vu.vf13.mul_xyzw(vu.vf13, vu.vf23); - // ior vi02, vi05, vi00 | add.xyzw vf25, vf25, vf27 - vu.vf25.add_xyzw(vu.vf25, vu.vf27); vu.vi02 = vu.vi05; -// BRANCH! - // ibgez vi09, L149 | add.xyzw vf26, vf26, vf27 - vu.vf26.add_xyzw(vu.vf26, vu.vf27); bc = ((s16)vu.vi09) >= 0; - // sq.xyzw vf21, 2(vi12) | nop - sq_buffer_xyzw(vu.vf21, vu.vi12 + 2); - if (bc) { goto L149; } - - - // nop | ftoi4.xyzw vf21, vf10 - vu.vf21.ftoi4(Mask::xyzw, vu.vf10); - L149: -// BRANCH! - // ibne vi06, vi05, L150 | nop - bc = (vu.vi06 != vu.vi05); - // sq.xyzw vf16, 0(vi12) | miniy.xyzw vf13, vf13, vf17 - vu.vf13.mini_xyzw(vu.vf13, vu.vf17.y()); sq_buffer_xyzw(vu.vf16, vu.vi12); - if (bc) { goto L150; } - - - // ior vi06, vi07, vi00 | max.xyzw vf25, vf26, vf26 - vu.vf25.max_xyzw(vu.vf26, vu.vf26); vu.vi06 = vu.vi07; - L150: - // sq.xyzw vf16, 0(vi15) | nop - sq_buffer_xyzw(vu.vf16, vu.vi15); - // sq.xyzw vf21, 2(vi15) | nop - sq_buffer_xyzw(vu.vf21, vu.vi15 + 2); - // lqi.xyzw vf27, vi05 | nop - lq_buffer_xyzw(vu.vf27, vu.vi05++); - // nop | ftoi0.xyzw vf13, vf13 - vu.vf13.ftoi0(Mask::xyzw, vu.vf13); - // nop | nop - - // nop | nop - - // nop | itof0.xyzw vf27, vf27 - vu.vf27.itof0(Mask::xyzw, vu.vf27); - // sq.xyzw vf13, 1(vi12) | nop - sq_buffer_xyzw(vu.vf13, vu.vi12 + 1); -// BRANCH! - // b L173 | nop - bc = true; - // sq.xyzw vf13, 1(vi15) | nop - sq_buffer_xyzw(vu.vf13, vu.vi15 + 1); - if (bc) { goto L173; } - - - L151: - // 3072.0 | miniw.w vf10, vf10, vf01 :i - vu.vf10.mini(Mask::w, vu.vf10, vu.vf01.w()); vu.I = 3072.0; -// BRANCH! - // b L144 | minii.xy vf09, vf09, I - vu.vf09.minii(Mask::xy, vu.vf09, vu.I); bc = true; - // nop | nop - - if (bc) { goto L144; } - - - L152: - // 1024.0 | nop :i - vu.I = 1024.0; - // 3072.0 | maxi.xy vf10, vf10, I :i - vu.vf10.maxi(Mask::xy, vu.vf10, vu.I); vu.I = 3072.0; -// BRANCH! - // b L147 | minii.xy vf10, vf10, I - vu.vf10.minii(Mask::xy, vu.vf10, vu.I); bc = true; - // isw.w vi00, 1(vi00) | nop - isw_buffer(Mask::w, vu.vi00, 1); - if (bc) { goto L147; } - - - L153: - // ilw.w vi08, 1(vi00) | nop - ilw_buffer(Mask::w, vu.vi08, 1); - // xtop vi02 | mulax.xyzw ACC, vf01, vf13 - vu.acc.mula_xyzw(vu.vf01, vu.vf13.x()); vu.vi02 = xtop(); - // sq.xyzw vf12, 1(vi11) | madday.xyzw ACC, vf02, vf13 - vu.acc.madda_xyzw(vu.vf02, vu.vf13.y()); sq_buffer_xyzw(vu.vf12, vu.vi11 + 1); - // sq.xyzw vf12, 1(vi14) | maddz.xyzw vf13, vf03, vf13 - vu.acc.madd_xyzw(vu.vf13, vu.vf03, vu.vf13.z()); sq_buffer_xyzw(vu.vf12, vu.vi14 + 1); - // iaddiu vi04, vi02, 0x8c | add.xyzw vf08, vf08, vf28 - vu.vf08.add_xyzw(vu.vf08, vu.vf28); vu.vi04 = vu.vi02 + 0x8c; /* 140 */ - // ilwr.x vi05, vi04 | maxw.w vf10, vf10, vf02 - vu.vf10.max(Mask::w, vu.vf10, vu.vf02.w()); ilw_buffer(Mask::x, vu.vi05, vu.vi04); - // ilw.w vi06, 1(vi04) | itof0.xyzw vf23, vf23 - vu.vf23.itof0(Mask::xyzw, vu.vf23); ilw_buffer(Mask::w, vu.vi06, vu.vi04 + 1); -// BRANCH! - // ibne vi00, vi08, L161 | nop - bc = (vu.vi08 != 0); - // ilw.x vi07, 2(vi04) | maxx.xyzw vf13, vf13, vf00 - vu.vf13.max_xyzw(vu.vf13, vu.vf00.x()); ilw_buffer(Mask::x, vu.vi07, vu.vi04 + 2); - if (bc) { goto L161; } - - - L154: - // div Q, vf01.w, vf08.w | minix.xyzw vf25, vf00, vf00 - vu.vf25.mini_xyzw(vu.vf00, vu.vf00.x()); vu.Q = vu.vf01.w() / vu.vf08.w(); - - // move.xyzw vf21, vf10 | minix.xyzw vf26, vf00, vf00 - vu.vf26.mini_xyzw(vu.vf00, vu.vf00.x()); vu.vf21.move_xyzw(vu.vf10); - // iadd vi05, vi05, vi04 | nop - vu.vi05 = vu.vi05 + vu.vi04; - // iaddiu vi04, vi02, 0x173 | mulax.xyzw ACC, vf04, vf13 - vu.acc.mula_xyzw(vu.vf04, vu.vf13.x()); vu.vi04 = vu.vi02 + 0x173; /* 371 */ -// BRANCH! - // ibgtz vi09, L155 | madday.xyzw ACC, vf05, vf13 - vu.acc.madda_xyzw(vu.vf05, vu.vf13.y()); bc = ((s16)vu.vi09) > 0; - // iadd vi06, vi06, vi05 | maddaz.xyzw ACC, vf06, vf13 - vu.acc.madda_xyzw(vu.vf06, vu.vf13.z()); vu.vi06 = vu.vi06 + vu.vi05; - if (bc) { goto L155; } - - - // nop | addx.w vf21, vf21, vf17 - vu.vf21.add(Mask::w, vu.vf21, vu.vf17.x()); - L155: - // iadd vi07, vi07, vi06 | maddw.xyzw vf13, vf07, vf00 - vu.acc.madd_xyzw(vu.vf13, vu.vf07, vu.vf00.w()); vu.vi07 = vu.vi07 + vu.vi06; - // ilw.x vi09, -6(vi01) | mul.xyz vf08, vf08, Q - vu.vf08.mul(Mask::xyz, vu.vf08, vu.Q); /* TODO mulq */ ilw_buffer(Mask::x, vu.vi09, vu.vi01 + -6); - // iaddiu vi08, vi00, 0x1ba | mul.xyzw vf14, vf14, Q - vu.vf14.mul_xyzw(vu.vf14, vu.Q); /* TODO mulq */ vu.vi08 = 0x1ba; /* 442 */ - - // isub vi08, vi08, vi02 | ftoi4.xyzw vf21, vf21 - vu.vf21.ftoi4(Mask::xyzw, vu.vf21); vu.vi08 = vu.vi08 - vu.vi02; - // iaddiu vi08, vi08, 0x173 | mul.xyzw vf13, vf13, vf23 - vu.vf13.mul_xyzw(vu.vf13, vu.vf23); vu.vi08 = vu.vi08 + 0x173; /* 371 */ - // lqi.xyzw vf23, vi03 | add.xyzw vf08, vf08, vf22 - vu.vf08.add_xyzw(vu.vf08, vu.vf22); lq_buffer_xyzw(vu.vf23, vu.vi03++); -// BRANCH! - // ibgez vi09, L156 | nop - bc = ((s16)vu.vi09) >= 0; - // sq.xyzw vf21, 2(vi12) | nop - sq_buffer_xyzw(vu.vf21, vu.vi12 + 2); - if (bc) { goto L156; } - - - // nop | ftoi4.xyzw vf21, vf10 - vu.vf21.ftoi4(Mask::xyzw, vu.vf10); - L156: - // mfp.w vf20, P | nop - vu.vf20.mfp(Mask::w, vu.P); - // sq.xyzw vf16, 0(vi12) | miniy.xyzw vf13, vf13, vf17 - vu.vf13.mini_xyzw(vu.vf13, vu.vf17.y()); sq_buffer_xyzw(vu.vf16, vu.vi12); - // sq.xyzw vf16, 0(vi15) | miniw.w vf08, vf08, vf03 - vu.vf08.mini(Mask::w, vu.vf08, vu.vf03.w()); sq_buffer_xyzw(vu.vf16, vu.vi15); - // sq.xyzw vf21, 2(vi15) | nop - sq_buffer_xyzw(vu.vf21, vu.vi15 + 2); - // ilw.y vi09, -3(vi01) | mulw.xyzw vf11, vf11, vf20 - vu.vf11.mul_xyzw(vu.vf11, vu.vf20.w()); ilw_buffer(Mask::y, vu.vi09, vu.vi01 + -3); - // mfir.x vf25, vi04 | ftoi0.xyzw vf13, vf13 - vu.vf13.ftoi0(Mask::xyzw, vu.vf13); vu.vf25.mfir(Mask::x, vu.vi04); - // mfir.y vf25, vi04 | nop - vu.vf25.mfir(Mask::y, vu.vi04); - // mfir.x vf26, vi08 | nop - vu.vf26.mfir(Mask::x, vu.vi08); - // ilw.w vi02, 1(vi00) | nop - ilw_buffer(Mask::w, vu.vi02, 1); - // mfir.y vf26, vi04 | mulax.xyzw ACC, vf01, vf11 - vu.acc.mula_xyzw(vu.vf01, vu.vf11.x()); vu.vf26.mfir(Mask::y, vu.vi04); - // sq.xyzw vf13, 1(vi12) | madday.xyzw ACC, vf02, vf11 - vu.acc.madda_xyzw(vu.vf02, vu.vf11.y()); sq_buffer_xyzw(vu.vf13, vu.vi12 + 1); - // sq.xyzw vf13, 1(vi15) | maddz.xyzw vf11, vf03, vf11 - vu.acc.madd_xyzw(vu.vf11, vu.vf03, vu.vf11.z()); sq_buffer_xyzw(vu.vf13, vu.vi15 + 1); - // nop | nop - -// BRANCH! - // ibne vi00, vi02, L162 | maxw.w vf08, vf08, vf02 - vu.vf08.max(Mask::w, vu.vf08, vu.vf02.w()); bc = (vu.vi02 != 0); - // nop | itof0.xyzw vf23, vf23 - vu.vf23.itof0(Mask::xyzw, vu.vf23); - if (bc) { goto L162; } - - - L157: - // 8388608.0 | maxx.xyzw vf11, vf11, vf00 :i - vu.vf11.max_xyzw(vu.vf11, vu.vf00.x()); vu.I = 8388608.0; - // 256.0 | maxi.xy vf27, vf00, I :i - vu.vf27.maxi(Mask::xy, vu.vf00, vu.I); vu.I = 256.0; - // move.xyzw vf21, vf08 | maxi.w vf27, vf00, I - vu.vf27.maxi(Mask::w, vu.vf00, vu.I); vu.vf21.move_xyzw(vu.vf08); - // nop | nop - - // nop | mulax.xyzw ACC, vf04, vf11 - vu.acc.mula_xyzw(vu.vf04, vu.vf11.x()); -// BRANCH! - // ibgtz vi09, L158 | madday.xyzw ACC, vf05, vf11 - vu.acc.madda_xyzw(vu.vf05, vu.vf11.y()); bc = ((s16)vu.vi09) > 0; - // nop | maddaz.xyzw ACC, vf06, vf11 - vu.acc.madda_xyzw(vu.vf06, vu.vf11.z()); - if (bc) { goto L158; } - - - // nop | addx.w vf21, vf21, vf17 - vu.vf21.add(Mask::w, vu.vf21, vu.vf17.x()); - L158: - // nop | maddw.xyzw vf11, vf07, vf00 - vu.acc.madd_xyzw(vu.vf11, vu.vf07, vu.vf00.w()); - // ilw.x vi09, -3(vi01) | itof0.xyzw vf25, vf25 - vu.vf25.itof0(Mask::xyzw, vu.vf25); ilw_buffer(Mask::x, vu.vi09, vu.vi01 + -3); - // nop | itof0.xyzw vf26, vf26 - vu.vf26.itof0(Mask::xyzw, vu.vf26); - // nop | ftoi4.xyzw vf21, vf21 - vu.vf21.ftoi4(Mask::xyzw, vu.vf21); - // nop | mul.xyzw vf11, vf11, vf23 - vu.vf11.mul_xyzw(vu.vf11, vu.vf23); - // ior vi02, vi05, vi00 | add.xyzw vf25, vf25, vf27 - vu.vf25.add_xyzw(vu.vf25, vu.vf27); vu.vi02 = vu.vi05; -// BRANCH! - // ibgez vi09, L159 | add.xyzw vf26, vf26, vf27 - vu.vf26.add_xyzw(vu.vf26, vu.vf27); bc = ((s16)vu.vi09) >= 0; - // sq.xyzw vf21, 2(vi10) | nop - sq_buffer_xyzw(vu.vf21, vu.vi10 + 2); - if (bc) { goto L159; } - - - // nop | ftoi4.xyzw vf21, vf08 - vu.vf21.ftoi4(Mask::xyzw, vu.vf08); - L159: -// BRANCH! - // ibne vi06, vi05, L160 | nop - bc = (vu.vi06 != vu.vi05); - // sq.xyzw vf14, 0(vi10) | miniy.xyzw vf11, vf11, vf17 - vu.vf11.mini_xyzw(vu.vf11, vu.vf17.y()); sq_buffer_xyzw(vu.vf14, vu.vi10); - if (bc) { goto L160; } - - - // ior vi06, vi07, vi00 | max.xyzw vf25, vf26, vf26 - vu.vf25.max_xyzw(vu.vf26, vu.vf26); vu.vi06 = vu.vi07; - L160: - // sq.xyzw vf14, 0(vi13) | nop - sq_buffer_xyzw(vu.vf14, vu.vi13); - // sq.xyzw vf21, 2(vi13) | nop - sq_buffer_xyzw(vu.vf21, vu.vi13 + 2); - // lqi.xyzw vf27, vi05 | nop - lq_buffer_xyzw(vu.vf27, vu.vi05++); - // nop | ftoi0.xyzw vf11, vf11 - vu.vf11.ftoi0(Mask::xyzw, vu.vf11); - // nop | nop - - // nop | nop - - // nop | itof0.xyzw vf27, vf27 - vu.vf27.itof0(Mask::xyzw, vu.vf27); - // sq.xyzw vf11, 1(vi10) | nop - sq_buffer_xyzw(vu.vf11, vu.vi10 + 1); -// BRANCH! - // b L173 | nop - bc = true; - // sq.xyzw vf11, 1(vi13) | nop - sq_buffer_xyzw(vu.vf11, vu.vi13 + 1); - if (bc) { goto L173; } - - - L161: - // 3072.0 | miniw.w vf08, vf08, vf01 :i - vu.vf08.mini(Mask::w, vu.vf08, vu.vf01.w()); vu.I = 3072.0; -// BRANCH! - // b L154 | minii.xy vf10, vf10, I - vu.vf10.minii(Mask::xy, vu.vf10, vu.I); bc = true; - // nop | nop - - if (bc) { goto L154; } - - - L162: - // 1024.0 | nop :i - vu.I = 1024.0; - // 3072.0 | maxi.xy vf08, vf08, I :i - vu.vf08.maxi(Mask::xy, vu.vf08, vu.I); vu.I = 3072.0; -// BRANCH! - // b L157 | minii.xy vf08, vf08, I - vu.vf08.minii(Mask::xy, vu.vf08, vu.I); bc = true; - // isw.w vi00, 1(vi00) | nop - isw_buffer(Mask::w, vu.vi00, 1); - if (bc) { goto L157; } - - - L163: - // ilw.w vi08, 1(vi00) | nop - ilw_buffer(Mask::w, vu.vi08, 1); - // xtop vi02 | mulax.xyzw ACC, vf01, vf11 - vu.acc.mula_xyzw(vu.vf01, vu.vf11.x()); vu.vi02 = xtop(); - // sq.xyzw vf13, 1(vi12) | madday.xyzw ACC, vf02, vf11 - vu.acc.madda_xyzw(vu.vf02, vu.vf11.y()); sq_buffer_xyzw(vu.vf13, vu.vi12 + 1); - // sq.xyzw vf13, 1(vi15) | maddz.xyzw vf11, vf03, vf11 - vu.acc.madd_xyzw(vu.vf11, vu.vf03, vu.vf11.z()); sq_buffer_xyzw(vu.vf13, vu.vi15 + 1); - // iaddiu vi04, vi02, 0x8c | add.xyzw vf09, vf09, vf28 - vu.vf09.add_xyzw(vu.vf09, vu.vf28); vu.vi04 = vu.vi02 + 0x8c; /* 140 */ - // ilwr.x vi05, vi04 | maxw.w vf08, vf08, vf02 - vu.vf08.max(Mask::w, vu.vf08, vu.vf02.w()); ilw_buffer(Mask::x, vu.vi05, vu.vi04); - // ilw.w vi06, 1(vi04) | itof0.xyzw vf23, vf23 - vu.vf23.itof0(Mask::xyzw, vu.vf23); ilw_buffer(Mask::w, vu.vi06, vu.vi04 + 1); -// BRANCH! - // ibne vi00, vi08, L171 | nop - bc = (vu.vi08 != 0); - // ilw.x vi07, 2(vi04) | maxx.xyzw vf11, vf11, vf00 - vu.vf11.max_xyzw(vu.vf11, vu.vf00.x()); ilw_buffer(Mask::x, vu.vi07, vu.vi04 + 2); - if (bc) { goto L171; } - - - L164: - // div Q, vf01.w, vf09.w | minix.xyzw vf25, vf00, vf00 - vu.vf25.mini_xyzw(vu.vf00, vu.vf00.x()); vu.Q = vu.vf01.w() / vu.vf09.w(); - - // move.xyzw vf21, vf08 | minix.xyzw vf26, vf00, vf00 - vu.vf26.mini_xyzw(vu.vf00, vu.vf00.x()); vu.vf21.move_xyzw(vu.vf08); - // iadd vi05, vi05, vi04 | nop - vu.vi05 = vu.vi05 + vu.vi04; - // iaddiu vi04, vi02, 0x173 | mulax.xyzw ACC, vf04, vf11 - vu.acc.mula_xyzw(vu.vf04, vu.vf11.x()); vu.vi04 = vu.vi02 + 0x173; /* 371 */ -// BRANCH! - // ibgtz vi09, L165 | madday.xyzw ACC, vf05, vf11 - vu.acc.madda_xyzw(vu.vf05, vu.vf11.y()); bc = ((s16)vu.vi09) > 0; - // iadd vi06, vi06, vi05 | maddaz.xyzw ACC, vf06, vf11 - vu.acc.madda_xyzw(vu.vf06, vu.vf11.z()); vu.vi06 = vu.vi06 + vu.vi05; - if (bc) { goto L165; } - - - // nop | addx.w vf21, vf21, vf17 - vu.vf21.add(Mask::w, vu.vf21, vu.vf17.x()); - L165: - // iadd vi07, vi07, vi06 | maddw.xyzw vf11, vf07, vf00 - vu.acc.madd_xyzw(vu.vf11, vu.vf07, vu.vf00.w()); vu.vi07 = vu.vi07 + vu.vi06; - // ilw.x vi09, -6(vi01) | mul.xyz vf09, vf09, Q - vu.vf09.mul(Mask::xyz, vu.vf09, vu.Q); /* TODO mulq */ ilw_buffer(Mask::x, vu.vi09, vu.vi01 + -6); - // iaddiu vi08, vi00, 0x1ba | mul.xyzw vf15, vf15, Q - vu.vf15.mul_xyzw(vu.vf15, vu.Q); /* TODO mulq */ vu.vi08 = 0x1ba; /* 442 */ - - // isub vi08, vi08, vi02 | ftoi4.xyzw vf21, vf21 - vu.vf21.ftoi4(Mask::xyzw, vu.vf21); vu.vi08 = vu.vi08 - vu.vi02; - // iaddiu vi08, vi08, 0x173 | mul.xyzw vf11, vf11, vf23 - vu.vf11.mul_xyzw(vu.vf11, vu.vf23); vu.vi08 = vu.vi08 + 0x173; /* 371 */ - // lqi.xyzw vf23, vi03 | add.xyzw vf09, vf09, vf22 - vu.vf09.add_xyzw(vu.vf09, vu.vf22); lq_buffer_xyzw(vu.vf23, vu.vi03++); -// BRANCH! - // ibgez vi09, L166 | nop - bc = ((s16)vu.vi09) >= 0; - // sq.xyzw vf21, 2(vi10) | nop - sq_buffer_xyzw(vu.vf21, vu.vi10 + 2); - if (bc) { goto L166; } - - - // nop | ftoi4.xyzw vf21, vf08 - vu.vf21.ftoi4(Mask::xyzw, vu.vf08); - L166: - // mfp.w vf20, P | nop - vu.vf20.mfp(Mask::w, vu.P); - // sq.xyzw vf14, 0(vi10) | miniy.xyzw vf11, vf11, vf17 - vu.vf11.mini_xyzw(vu.vf11, vu.vf17.y()); sq_buffer_xyzw(vu.vf14, vu.vi10); - // sq.xyzw vf14, 0(vi13) | miniw.w vf09, vf09, vf03 - vu.vf09.mini(Mask::w, vu.vf09, vu.vf03.w()); sq_buffer_xyzw(vu.vf14, vu.vi13); - // sq.xyzw vf21, 2(vi13) | nop - sq_buffer_xyzw(vu.vf21, vu.vi13 + 2); - // ilw.y vi09, -3(vi01) | mulw.xyzw vf12, vf12, vf20 - vu.vf12.mul_xyzw(vu.vf12, vu.vf20.w()); ilw_buffer(Mask::y, vu.vi09, vu.vi01 + -3); - // mfir.x vf25, vi04 | ftoi0.xyzw vf11, vf11 - vu.vf11.ftoi0(Mask::xyzw, vu.vf11); vu.vf25.mfir(Mask::x, vu.vi04); - // mfir.y vf25, vi04 | nop - vu.vf25.mfir(Mask::y, vu.vi04); - // mfir.x vf26, vi08 | nop - vu.vf26.mfir(Mask::x, vu.vi08); - // ilw.w vi02, 1(vi00) | nop - ilw_buffer(Mask::w, vu.vi02, 1); - // mfir.y vf26, vi04 | mulax.xyzw ACC, vf01, vf12 - vu.acc.mula_xyzw(vu.vf01, vu.vf12.x()); vu.vf26.mfir(Mask::y, vu.vi04); - // sq.xyzw vf11, 1(vi10) | madday.xyzw ACC, vf02, vf12 - vu.acc.madda_xyzw(vu.vf02, vu.vf12.y()); sq_buffer_xyzw(vu.vf11, vu.vi10 + 1); - // sq.xyzw vf11, 1(vi13) | maddz.xyzw vf12, vf03, vf12 - vu.acc.madd_xyzw(vu.vf12, vu.vf03, vu.vf12.z()); sq_buffer_xyzw(vu.vf11, vu.vi13 + 1); - // nop | nop - -// BRANCH! - // ibne vi00, vi02, L172 | maxw.w vf09, vf09, vf02 - vu.vf09.max(Mask::w, vu.vf09, vu.vf02.w()); bc = (vu.vi02 != 0); - // nop | itof0.xyzw vf23, vf23 - vu.vf23.itof0(Mask::xyzw, vu.vf23); - if (bc) { goto L172; } - - - L167: - // 8388608.0 | maxx.xyzw vf12, vf12, vf00 :i - vu.vf12.max_xyzw(vu.vf12, vu.vf00.x()); vu.I = 8388608.0; - // 256.0 | maxi.xy vf27, vf00, I :i - vu.vf27.maxi(Mask::xy, vu.vf00, vu.I); vu.I = 256.0; - // move.xyzw vf21, vf09 | maxi.w vf27, vf00, I - vu.vf27.maxi(Mask::w, vu.vf00, vu.I); vu.vf21.move_xyzw(vu.vf09); - // nop | nop - - // nop | mulax.xyzw ACC, vf04, vf12 - vu.acc.mula_xyzw(vu.vf04, vu.vf12.x()); -// BRANCH! - // ibgtz vi09, L168 | madday.xyzw ACC, vf05, vf12 - vu.acc.madda_xyzw(vu.vf05, vu.vf12.y()); bc = ((s16)vu.vi09) > 0; - // nop | maddaz.xyzw ACC, vf06, vf12 - vu.acc.madda_xyzw(vu.vf06, vu.vf12.z()); - if (bc) { goto L168; } - - - // nop | addx.w vf21, vf21, vf17 - vu.vf21.add(Mask::w, vu.vf21, vu.vf17.x()); - L168: - // nop | maddw.xyzw vf12, vf07, vf00 - vu.acc.madd_xyzw(vu.vf12, vu.vf07, vu.vf00.w()); - // ilw.x vi09, -3(vi01) | itof0.xyzw vf25, vf25 - vu.vf25.itof0(Mask::xyzw, vu.vf25); ilw_buffer(Mask::x, vu.vi09, vu.vi01 + -3); - // nop | itof0.xyzw vf26, vf26 - vu.vf26.itof0(Mask::xyzw, vu.vf26); - // nop | ftoi4.xyzw vf21, vf21 - vu.vf21.ftoi4(Mask::xyzw, vu.vf21); - // nop | mul.xyzw vf12, vf12, vf23 - vu.vf12.mul_xyzw(vu.vf12, vu.vf23); - // ior vi02, vi05, vi00 | add.xyzw vf25, vf25, vf27 - vu.vf25.add_xyzw(vu.vf25, vu.vf27); vu.vi02 = vu.vi05; -// BRANCH! - // ibgez vi09, L169 | add.xyzw vf26, vf26, vf27 - vu.vf26.add_xyzw(vu.vf26, vu.vf27); bc = ((s16)vu.vi09) >= 0; - // sq.xyzw vf21, 2(vi11) | nop - sq_buffer_xyzw(vu.vf21, vu.vi11 + 2); - if (bc) { goto L169; } - - - // nop | ftoi4.xyzw vf21, vf09 - vu.vf21.ftoi4(Mask::xyzw, vu.vf09); - L169: -// BRANCH! - // ibne vi06, vi05, L170 | nop - bc = (vu.vi06 != vu.vi05); - // sq.xyzw vf15, 0(vi11) | miniy.xyzw vf12, vf12, vf17 - vu.vf12.mini_xyzw(vu.vf12, vu.vf17.y()); sq_buffer_xyzw(vu.vf15, vu.vi11); - if (bc) { goto L170; } - - - // ior vi06, vi07, vi00 | max.xyzw vf25, vf26, vf26 - vu.vf25.max_xyzw(vu.vf26, vu.vf26); vu.vi06 = vu.vi07; - L170: - // sq.xyzw vf15, 0(vi14) | nop - sq_buffer_xyzw(vu.vf15, vu.vi14); - // sq.xyzw vf21, 2(vi14) | nop - sq_buffer_xyzw(vu.vf21, vu.vi14 + 2); - // lqi.xyzw vf27, vi05 | nop - lq_buffer_xyzw(vu.vf27, vu.vi05++); - // nop | ftoi0.xyzw vf12, vf12 - vu.vf12.ftoi0(Mask::xyzw, vu.vf12); - // nop | nop - - // nop | nop - - // nop | itof0.xyzw vf27, vf27 - vu.vf27.itof0(Mask::xyzw, vu.vf27); - // sq.xyzw vf12, 1(vi11) | nop - sq_buffer_xyzw(vu.vf12, vu.vi11 + 1); -// BRANCH! - // b L173 | nop - bc = true; - // sq.xyzw vf12, 1(vi14) | nop - sq_buffer_xyzw(vu.vf12, vu.vi14 + 1); - if (bc) { goto L173; } - - - L171: - // 3072.0 | miniw.w vf09, vf09, vf01 :i - vu.vf09.mini(Mask::w, vu.vf09, vu.vf01.w()); vu.I = 3072.0; -// BRANCH! - // b L164 | minii.xy vf08, vf08, I - vu.vf08.minii(Mask::xy, vu.vf08, vu.I); bc = true; - // nop | nop - - if (bc) { goto L164; } - - - L172: - // 1024.0 | nop :i - vu.I = 1024.0; - // 3072.0 | maxi.xy vf09, vf09, I :i - vu.vf09.maxi(Mask::xy, vu.vf09, vu.I); vu.I = 3072.0; -// BRANCH! - // b L167 | minii.xy vf09, vf09, I - vu.vf09.minii(Mask::xy, vu.vf09, vu.I); bc = true; - // isw.w vi00, 1(vi00) | nop - isw_buffer(Mask::w, vu.vi00, 1); - if (bc) { goto L167; } - - - L173: -// BRANCH! - // ibeq vi07, vi02, L179 | nop - bc = (vu.vi07 == vu.vi02); - // ilw.w vi15, 132(vi00) | nop - vu.hack_old_vi15 = vu.vi15; - ilw_buffer(Mask::w, vu.vi15, 132); - if (bc) { goto L179; } - - -// BRANCH! - // ibne vi06, vi05, L174 | add.xyzw vf11, vf27, vf25 - vu.vf11.add_xyzw(vu.vf27, vu.vf25); bc = (vu.vi06 != vu.vi05); - // nop | nop - - if (bc) { goto L174; } - - -// BRANCH! - // ibne vi07, vi06, L174 | nop - bc = (vu.vi07 != vu.vi06); - // ior vi06, vi07, vi00 | max.xyzw vf25, vf26, vf26 - vu.vf25.max_xyzw(vu.vf26, vu.vf26); vu.vi06 = vu.vi07; - if (bc) { goto L174; } - - - // nop | nop - - // nop | nop - - // mtir vi08, vf11.x | nop - vu.vi08 = vu.vf11.x_as_u16(); - // mtir vi10, vf11.y | nop - vu.vi10 = vu.vf11.y_as_u16(); - // nop | nop - - // nop | nop - - // lq.xyzw vf16, 2(vi08) | maxx.xyzw vf15, vf11, vf00 - vu.vf15.max_xyzw(vu.vf11, vu.vf00.x()); lq_buffer_xyzw(vu.vf16, vu.vi08 + 2); - // lq.xyzw vf13, 0(vi08) | nop - lq_buffer_xyzw(vu.vf13, vu.vi08); -// BRANCH! - // b L178 | nop - bc = true; - // nop | nop - - if (bc) { goto L178; } - - - L174: - // lqi.xyzw vf27, vi05 | nop - lq_buffer_xyzw(vu.vf27, vu.vi05++); - // nop | nop - - // mtir vi08, vf11.x | nop - vu.vi08 = vu.vf11.x_as_u16(); - // mtir vi09, vf11.y | nop - vu.vi09 = vu.vf11.y_as_u16(); - // nop | itof0.xyzw vf27, vf27 - vu.vf27.itof0(Mask::xyzw, vu.vf27); - // nop | nop - - // lq.xyzw vf12, 2(vi08) | maxx.xyzw vf15, vf11, vf00 - vu.vf15.max_xyzw(vu.vf11, vu.vf00.x()); lq_buffer_xyzw(vu.vf12, vu.vi08 + 2); - // lq.xyzw vf13, 0(vi08) | nop - lq_buffer_xyzw(vu.vf13, vu.vi08); -// BRANCH! - // ibne vi06, vi05, L175 | add.xyzw vf11, vf27, vf25 - vu.vf11.add_xyzw(vu.vf27, vu.vf25); bc = (vu.vi06 != vu.vi05); - // nop | nop - - if (bc) { goto L175; } - - -// BRANCH! - // ibeq vi07, vi06, L177 | nop - bc = (vu.vi07 == vu.vi06); - // ior vi06, vi07, vi00 | max.xyzw vf25, vf26, vf26 - vu.vf25.max_xyzw(vu.vf26, vu.vf26); vu.vi06 = vu.vi07; - if (bc) { goto L177; } - - - L175: - // lqi.xyzw vf27, vi05 | itof15.w vf12, vf12 - vu.vf12.itof15(Mask::w, vu.vf12); lq_buffer_xyzw(vu.vf27, vu.vi05++); - // lq.xyzw vf14, 1(vi08) | nop - lq_buffer_xyzw(vu.vf14, vu.vi08 + 1); - // mtir vi08, vf11.x | nop - vu.vi08 = vu.vf11.x_as_u16(); - // mtir vi10, vf11.y | nop - vu.vi10 = vu.vf11.y_as_u16(); - // sq.xyzw vf13, 0(vi09) | itof0.xyzw vf27, vf27 - vu.vf27.itof0(Mask::xyzw, vu.vf27); sq_buffer_xyzw(vu.vf13, vu.vi09); - // sq.xyzw vf14, 1(vi09) | add.w vf12, vf12, vf15 - vu.vf12.add(Mask::w, vu.vf12, vu.vf15); sq_buffer_xyzw(vu.vf14, vu.vi09 + 1); - // lq.xyzw vf16, 2(vi08) | maxx.xyzw vf15, vf11, vf00 - vu.vf15.max_xyzw(vu.vf11, vu.vf00.x()); lq_buffer_xyzw(vu.vf16, vu.vi08 + 2); - // lq.xyzw vf13, 0(vi08) | nop - lq_buffer_xyzw(vu.vf13, vu.vi08); -// BRANCH! - // ibne vi06, vi05, L176 | add.xyzw vf11, vf27, vf25 - vu.vf11.add_xyzw(vu.vf27, vu.vf25); bc = (vu.vi06 != vu.vi05); - // sq.xyzw vf12, 2(vi09) | nop - sq_buffer_xyzw(vu.vf12, vu.vi09 + 2); - if (bc) { goto L176; } - - -// BRANCH! - // ibne vi07, vi06, L176 | nop - bc = (vu.vi07 != vu.vi06); - // ior vi06, vi07, vi00 | max.xyzw vf25, vf26, vf26 - vu.vf25.max_xyzw(vu.vf26, vu.vf26); vu.vi06 = vu.vi07; - if (bc) { goto L176; } - - - // move.xyzw vf12, vf16 | nop - vu.vf12.move_xyzw(vu.vf16); -// BRANCH! - // b L177 | nop - bc = true; - // ior vi09, vi10, vi00 | nop - vu.vi09 = vu.vi10; - if (bc) { goto L177; } - - - L176: - // lqi.xyzw vf27, vi05 | itof15.w vf16, vf16 - vu.vf16.itof15(Mask::w, vu.vf16); lq_buffer_xyzw(vu.vf27, vu.vi05++); - // lq.xyzw vf14, 1(vi08) | nop - lq_buffer_xyzw(vu.vf14, vu.vi08 + 1); - // mtir vi08, vf11.x | nop - vu.vi08 = vu.vf11.x_as_u16(); - // mtir vi09, vf11.y | nop - vu.vi09 = vu.vf11.y_as_u16(); - // sq.xyzw vf13, 0(vi10) | itof0.xyzw vf27, vf27 - vu.vf27.itof0(Mask::xyzw, vu.vf27); sq_buffer_xyzw(vu.vf13, vu.vi10); - // sq.xyzw vf14, 1(vi10) | add.w vf16, vf16, vf15 - vu.vf16.add(Mask::w, vu.vf16, vu.vf15); sq_buffer_xyzw(vu.vf14, vu.vi10 + 1); - // lq.xyzw vf12, 2(vi08) | maxx.xyzw vf15, vf11, vf00 - vu.vf15.max_xyzw(vu.vf11, vu.vf00.x()); lq_buffer_xyzw(vu.vf12, vu.vi08 + 2); - // lq.xyzw vf13, 0(vi08) | nop - lq_buffer_xyzw(vu.vf13, vu.vi08); -// BRANCH! - // ibne vi06, vi05, L175 | add.xyzw vf11, vf27, vf25 - vu.vf11.add_xyzw(vu.vf27, vu.vf25); bc = (vu.vi06 != vu.vi05); - // sq.xyzw vf16, 2(vi10) | nop - sq_buffer_xyzw(vu.vf16, vu.vi10 + 2); - if (bc) { goto L175; } - - -// BRANCH! - // ibne vi07, vi06, L175 | nop - bc = (vu.vi07 != vu.vi06); - // ior vi06, vi07, vi00 | max.xyzw vf25, vf26, vf26 - vu.vf25.max_xyzw(vu.vf26, vu.vf26); vu.vi06 = vu.vi07; - if (bc) { goto L175; } - - - L177: - // nop | itof15.w vf12, vf12 - vu.vf12.itof15(Mask::w, vu.vf12); - // lq.xyzw vf14, 1(vi08) | nop - lq_buffer_xyzw(vu.vf14, vu.vi08 + 1); - // mtir vi08, vf11.x | nop - vu.vi08 = vu.vf11.x_as_u16(); - // mtir vi10, vf11.y | nop - vu.vi10 = vu.vf11.y_as_u16(); - // sq.xyzw vf13, 0(vi09) | nop - sq_buffer_xyzw(vu.vf13, vu.vi09); - // sq.xyzw vf14, 1(vi09) | add.w vf12, vf12, vf15 - vu.vf12.add(Mask::w, vu.vf12, vu.vf15); sq_buffer_xyzw(vu.vf14, vu.vi09 + 1); - // lq.xyzw vf16, 2(vi08) | maxx.xyzw vf15, vf11, vf00 - vu.vf15.max_xyzw(vu.vf11, vu.vf00.x()); lq_buffer_xyzw(vu.vf16, vu.vi08 + 2); - // lq.xyzw vf13, 0(vi08) | nop - lq_buffer_xyzw(vu.vf13, vu.vi08); - // nop | nop - - // sq.xyzw vf12, 2(vi09) | nop - sq_buffer_xyzw(vu.vf12, vu.vi09 + 2); - L178: - // nop | itof15.w vf16, vf16 - vu.vf16.itof15(Mask::w, vu.vf16); - // lq.xyzw vf14, 1(vi08) | nop - lq_buffer_xyzw(vu.vf14, vu.vi08 + 1); - // nop | nop - - // nop | nop - - // sq.xyzw vf13, 0(vi10) | nop - sq_buffer_xyzw(vu.vf13, vu.vi10); - // sq.xyzw vf14, 1(vi10) | add.w vf16, vf16, vf15 - vu.vf16.add(Mask::w, vu.vf16, vu.vf15); sq_buffer_xyzw(vu.vf14, vu.vi10 + 1); - // nop | nop - - // nop | nop - - // nop | nop - - // sq.xyzw vf16, 2(vi10) | nop - sq_buffer_xyzw(vu.vf16, vu.vi10 + 2); - L179: -// BRANCH! - // ibne vi00, vi15, L180 | nop - bc = (vu.vi15 != 0); - // nop | nop - - if (bc) { goto L180; } - - - // xgkick vi04 | nop - xgkick(vu.vi04, render_state, prof); - // nop | nop :e - return; - - // nop | nop - - L180: - // lq.xyzw vf20, 132(vi00) | nop - lq_buffer_xyzw(vu.vf20, 132); - // lq.xyzw vf21, 1(vi00) | nop - lq_buffer_xyzw(vu.vf21, 1); - // iaddi vi01, vi00, 0x1 | nop - vu.vi01 = 1; - // isw.x vi01, -2(vi04) | nop - isw_buffer(Mask::x, vu.vi01, vu.vi04 + -2); - // iaddiu vi02, vi00, 0x47 | maxw.x vf20, vf00, vf20 - vu.vf20.max(Mask::x, vu.vf00, vu.vf20.w()); vu.vi02 = 0x47; /* 71 */ - - // isw.z vi02, -1(vi04) | nop - isw_buffer(Mask::z, vu.vi02, vu.vi04 + -1); - // sq.yzw vf21, -2(vi04) | nop - sq_buffer(Mask::yzw, vu.vf21, vu.vi04 + -2); - // isw.w vi00, 132(vi00) | nop - isw_buffer(Mask::w, vu.vi00, 132); - // sq.x vf20, -1(vi04) | nop - sq_buffer(Mask::x, vu.vf20, vu.vi04 + -1); - // iaddi vi04, vi04, -0x2 | nop - vu.vi04 = vu.vi04 + -2; - // xgkick vi04 | nop - xgkick(vu.vi04, render_state, prof); - // nop | nop :e -} - diff --git a/game/graphics/opengl_renderer/MercRenderer.cpp b/game/graphics/opengl_renderer/MercRenderer.cpp deleted file mode 100644 index 96303bd271..0000000000 --- a/game/graphics/opengl_renderer/MercRenderer.cpp +++ /dev/null @@ -1,367 +0,0 @@ -#include "MercRenderer.h" - -#include "third-party/imgui/imgui.h" - -MercRenderer::MercRenderer(const std::string& name, BucketId my_id) - : BucketRenderer(name, my_id), - m_direct(fmt::format("{}-dir", name), my_id, 0x30000), - m_direct2(20000, 40000, 1000, name, false) { - memset(m_buffer.data, 0, sizeof(m_buffer.data)); -} - -void MercRenderer::init_shaders(ShaderLibrary& shaders) { - m_direct2.init_shaders(shaders); -} - -void MercRenderer::render(DmaFollower& dma, - SharedRenderState* render_state, - ScopedProfilerNode& prof) { - m_stats = Stats(); - - // skip if disabled - if (!m_enabled) { - while (dma.current_tag_offset() != render_state->next_bucket) { - dma.read_and_advance(); - } - return; - } - - // process the first tag. this is just jumping to the merc-specific dma. - auto data0 = dma.read_and_advance(); - ASSERT(data0.vif1() == 0); - ASSERT(data0.vif0() == 0); - ASSERT(data0.size_bytes == 0); - if (dma.current_tag().kind == DmaTag::Kind::CALL) { - // renderer didn't run, let's just get out of here. - for (int i = 0; i < 4; i++) { - dma.read_and_advance(); - } - ASSERT(dma.current_tag_offset() == render_state->next_bucket); - return; - } - m_stats.had_data = true; - ASSERT(data0.size_bytes == 0); - ASSERT(data0.vif0() == 0); - ASSERT(data0.vif1() == 0); - - // if we reach here, there's stuff to draw - handle_setup(dma, render_state, prof); - - m_direct2.reset_state(); - m_direct.reset_state(); - - while (dma.current_tag_offset() != render_state->next_bucket) { - handle_merc_chain(dma, render_state, prof); - } - ASSERT(dma.current_tag_offset() == render_state->next_bucket); - m_direct2.flush_pending(render_state, prof); - - m_direct.flush_pending(render_state, prof); -} - -namespace { -bool tag_is_nothing_next(const DmaFollower& dma) { - return dma.current_tag().kind == DmaTag::Kind::NEXT && dma.current_tag().qwc == 0 && - dma.current_tag_vif0() == 0 && dma.current_tag_vif1() == 0; -} -} // namespace - -void MercRenderer::unpack32(const VifCodeUnpack& up, const u8* data, u32 imm) { - ASSERT(!up.is_unsigned); - u32 addr = up.addr_qw; - ASSERT(imm != 0); - ASSERT(!m_vif.stmod); - if (up.use_tops_flag) { - addr += xitop(); - } - - u32 start_in_buff = (addr)*16; - u32 end_in_buff = start_in_buff + imm * 16; - ASSERT(start_in_buff < sizeof(m_buffer.data)); - ASSERT(end_in_buff <= sizeof(m_buffer.data)); - memcpy(m_buffer.data + start_in_buff, data, imm * 16); -} - -void MercRenderer::unpack8(const VifCodeUnpack& up, const u8* data, u32 imm) { - // ASSERT(m_vif.stmod); - - ASSERT(up.is_unsigned); - u32 addr = up.addr_qw; - if (up.use_tops_flag) { - addr += xitop(); - } - ASSERT(imm != 0); - - u32 start_in_buff = (addr)*16; - u32 end_in_buff = start_in_buff + imm * 16; - ASSERT(start_in_buff < sizeof(m_buffer.data)); - ASSERT(end_in_buff <= sizeof(m_buffer.data)); - - u8* out_ptr = m_buffer.data + start_in_buff; - - if (m_vif.stmod) { - // use row - auto row = _mm_loadu_si128((const __m128i*)m_vif.row); - for (u32 qw = 0; qw < imm; qw++) { - _mm_storeu_si128((__m128i*)out_ptr, - _mm_add_epi32(row, _mm_cvtepu8_epi32(_mm_loadu_si64(data)))); - data += 4; - out_ptr += 16; - } - } else { - // no row - for (u32 qw = 0; qw < imm; qw++) { - _mm_storeu_si128((__m128i*)out_ptr, _mm_cvtepu8_epi32(_mm_loadu_si64(data))); - data += 4; - out_ptr += 16; - } - } - - /* - u32 row[4]; - if (m_vif.stmod) { - memcpy(row, m_vif.row, 16); - } else { - memset(row, 0, 16); - } - - u32 temp[4]; - for (u32 i = 0; i < imm; i++) { - for (u32 j = 0; j < 4; j++) { - temp[j] = row[j] + data[4 * i + j]; - } - memcpy(m_buffer.data + start_in_buff + i * 16, temp, 16); - } - */ -} - -void MercRenderer::handle_merc_chain(DmaFollower& dma, - SharedRenderState* render_state, - ScopedProfilerNode& prof) { - // fmt::print("DMA: {}\n", dma.current_tag().print()); - while (tag_is_nothing_next(dma)) { - auto nothing = dma.read_and_advance(); - ASSERT(nothing.size_bytes == 0); - } - if (dma.current_tag().kind == DmaTag::Kind::CALL) { - for (int i = 0; i < 4; i++) { - dma.read_and_advance(); - } - return; - } - - auto init = dma.read_and_advance(); - - // skip pc port stuff - if (init.vifcode1().kind == VifCode::Kind::PC_PORT) { - dma.read_and_advance(); - init = dma.read_and_advance(); - } - ASSERT(init.vifcode0().kind == VifCode::Kind::STROW); - ASSERT(init.size_bytes == 16); - m_vif.row[0] = init.vif1(); - memcpy(m_vif.row + 1, init.data, 12); - // now used in pc renderer. - // u32 extra; - // memcpy(&extra, init.data + 12, 4); - // ASSERT(extra == 0); - DmaTransfer next; - - bool setting_up = true; - u32 mscal_addr = -1; - while (setting_up) { - next = dma.read_and_advance(); - u32 offset_in_data = 0; - // fmt::print("START {} : {} {}\n", next.size_bytes, next.vifcode0().print(), - // next.vifcode1().print()); - auto vif0 = next.vifcode0(); - switch (vif0.kind) { - case VifCode::Kind::NOP: - case VifCode::Kind::FLUSHE: - break; - case VifCode::Kind::STMOD: - ASSERT(vif0.immediate == 0 || vif0.immediate == 1); - m_vif.stmod = vif0.immediate; - break; - default: - ASSERT(false); - } - - auto vif1 = next.vifcode1(); - switch (vif1.kind) { - case VifCode::Kind::UNPACK_V4_8: { - // todo unpack - m_stats.unpack_count++; - m_stats.unpack_bytes += vif1.num * 4; - VifCodeUnpack up(vif1); - unpack8(up, next.data, vif1.num); - offset_in_data += 4 * vif1.num; - } break; - case VifCode::Kind::UNPACK_V4_32: { - // todo unpack - VifCodeUnpack up(vif1); - unpack32(up, next.data, vif1.num); - m_stats.unpack_bytes += vif1.num * 16; - offset_in_data += 16 * vif1.num; - } break; - case VifCode::Kind::MSCAL: - mscal_addr = vif1.immediate; - ASSERT(next.size_bytes == 0); - setting_up = false; - break; - default: - ASSERT(false); - } - - ASSERT(offset_in_data <= next.size_bytes); - if (offset_in_data < next.size_bytes) { - ASSERT((offset_in_data % 4) == 0); - u32 leftover = next.size_bytes - offset_in_data; - if (leftover < 16) { - for (u32 i = 0; i < leftover; i++) { - ASSERT(next.data[offset_in_data + i] == 0); - } - } else { - ASSERT(false); - } - } - } - - m_dbf = !m_dbf; - switch (mscal_addr) { - case 17: - m_stats.mscal_17++; - if (m_enable_prime_mscals) { - mscal(17, render_state, prof); - } - break; - case 32: - m_stats.mscal_32++; - if (m_enable_prime_mscals) { - mscal(32, render_state, prof); - } - break; - - case 20: - m_stats.mscal_20++; - if (m_enable_normal_mscals) { - mscal(20, render_state, prof); - } - break; - case 35: - m_stats.mscal_35++; - if (m_enable_normal_mscals) { - mscal(35, render_state, prof); - } - break; - default: - ASSERT_MSG(false, fmt::format("unknown mscal: {}", mscal_addr)); - } - - // while (true) { - // next = dma.read_and_advance(); - // if (next.vif0() == 0 && next.vifcode1().kind == VifCode::Kind::UNPACK_V4_8) { - // - // } else { - // fmt::print("{} : {} {}\n", next.size_bytes, next.vifcode0().print(), - // next.vifcode1().print()); ASSERT(false); - // } - // } -} - -/*! - * Handle the setup DMA data prepared by merc-vu1-init-buffer in GOAL - */ -void MercRenderer::handle_setup(DmaFollower& dma, - SharedRenderState* render_state, - ScopedProfilerNode& prof) { - auto first = dma.read_and_advance(); - - // 10 quadword setup packet - ASSERT(first.size_bytes == 10 * 16); - // m_stats.str += fmt::format("Setup 0: {} {} {}", first.size_bytes / 16, - // first.vifcode0().print(), first.vifcode1().print()); - - // transferred vifcodes - { - auto vif0 = first.vifcode0(); - auto vif1 = first.vifcode1(); - // STCYCL 4, 4 - ASSERT(vif0.kind == VifCode::Kind::STCYCL); - auto vif0_st = VifCodeStcycl(vif0); - ASSERT(vif0_st.cl == 4 && vif0_st.wl == 4); - // STMOD - ASSERT(vif1.kind == VifCode::Kind::STMOD); - ASSERT(vif1.immediate == 0); - } - - // 1 qw with 4 vifcodes. - u32 vifcode_data[4]; - memcpy(vifcode_data, first.data, 16); - { - auto vif0 = VifCode(vifcode_data[0]); - ASSERT(vif0.kind == VifCode::Kind::BASE); - ASSERT(vif0.immediate == MercDataMemory::BUFFER_BASE); - auto vif1 = VifCode(vifcode_data[1]); - ASSERT(vif1.kind == VifCode::Kind::OFFSET); - ASSERT((s16)vif1.immediate == MercDataMemory::BUFFER_OFFSET); - auto vif2 = VifCode(vifcode_data[2]); - ASSERT(vif2.kind == VifCode::Kind::NOP); - auto vif3 = VifCode(vifcode_data[3]); - ASSERT(vif3.kind == VifCode::Kind::UNPACK_V4_32); - VifCodeUnpack up(vif3); - ASSERT(up.addr_qw == MercDataMemory::LOW_MEMORY); - ASSERT(!up.use_tops_flag); - ASSERT(vif3.num == 8); - } - - // 8 qw's of low memory data - memcpy(&m_low_memory, first.data + 16, sizeof(LowMemory)); - m_stats.str += fmt::format("Fog: {}\n", m_low_memory.fog.to_string_aligned()); - - // 1 qw with another 4 vifcodes. - u32 vifcode_final_data[4]; - memcpy(vifcode_final_data, first.data + 16 + sizeof(LowMemory), 16); - { - ASSERT(VifCode(vifcode_final_data[0]).kind == VifCode::Kind::FLUSHE); - ASSERT(vifcode_final_data[1] == 0); - ASSERT(vifcode_final_data[2] == 0); - VifCode mscal(vifcode_final_data[3]); - ASSERT(mscal.kind == VifCode::Kind::MSCAL); - ASSERT(mscal.immediate == 0); - } - - // copy low memory into the VU "emulation" RAM. - memcpy(m_buffer.data, &m_low_memory, sizeof(LowMemory)); - mscal(0, render_state, prof); - - auto second = dma.read_and_advance(); - ASSERT(second.size_bytes == 32); // setting up test register. - m_direct.render_gif(second.data, 32, render_state, prof); - auto nothing = dma.read_and_advance(); - ASSERT(nothing.size_bytes == 0); - ASSERT(nothing.vif0() == 0); - ASSERT(nothing.vif1() == 0); -} - -void MercRenderer::draw_debug_window() { - ImGui::Text("Ran? %d\n", m_stats.had_data); - ImGui::Text("%d unpacks, %d bytes\n", m_stats.unpack_count, m_stats.unpack_bytes); - ImGui::Text("MSCAL: [17] %d [20] %d [32] %d [35] %d \n", m_stats.mscal_17, m_stats.mscal_20, - m_stats.mscal_32, m_stats.mscal_35); - ImGui::Text("Debug:\n%s\n", m_stats.str.c_str()); - ImGui::Checkbox("Normal MSCAL enable", &m_enable_normal_mscals); - ImGui::Checkbox("Prime MSCAL enable", &m_enable_prime_mscals); - ImGui::Checkbox("Send to direct", &m_enable_send_to_direct); - m_direct2.draw_debug_window(); -} - -void MercRenderer::xgkick(u16 addr, SharedRenderState* render_state, ScopedProfilerNode& prof) { - if (m_enable_send_to_direct && render_state->enable_merc_xgkick) { - if (render_state->use_direct2) { - m_direct2.render_gif_data(m_buffer.data + (16 * addr), render_state, prof); - } else { - m_direct.render_gif(m_buffer.data + (16 * addr), UINT32_MAX, render_state, prof); - } - } -} diff --git a/game/graphics/opengl_renderer/MercRenderer.h b/game/graphics/opengl_renderer/MercRenderer.h deleted file mode 100644 index fe5e88dae5..0000000000 --- a/game/graphics/opengl_renderer/MercRenderer.h +++ /dev/null @@ -1,124 +0,0 @@ -#pragma once - -#include "game/graphics/opengl_renderer/BucketRenderer.h" -#include "common/math/Vector.h" -#include "game/graphics/opengl_renderer/DirectRenderer.h" -#include "game/common/vu.h" -#include "game/graphics/opengl_renderer/DirectRenderer2.h" - -class MercRenderer : public BucketRenderer { - public: - MercRenderer(const std::string& name, BucketId my_id); - void init_shaders(ShaderLibrary& shaders) override; - - void render(DmaFollower& dma, SharedRenderState* render_state, ScopedProfilerNode& prof) override; - void draw_debug_window() override; - - private: - void handle_setup(DmaFollower& dma, SharedRenderState* render_state, ScopedProfilerNode& prof); - void handle_merc_chain(DmaFollower& dma, - SharedRenderState* render_state, - ScopedProfilerNode& prof); - void unpack8(const VifCodeUnpack& up, const u8* data, u32 imm); - void unpack32(const VifCodeUnpack& up, const u8* data, u32 imm); - - void mscal(int enter_address, SharedRenderState* render_state, ScopedProfilerNode& prof); - - template - void mscal_impl(int enter_address, SharedRenderState* render_state, ScopedProfilerNode& prof); - - void xgkick(u16 addr, SharedRenderState* render_state, ScopedProfilerNode& prof); - - enum MercDataMemory { - LOW_MEMORY = 0, - BUFFER_BASE = 442, - // this negative offset is what broke jak graphics in Dobiestation for a long time. - BUFFER_OFFSET = -442 - }; - - struct LowMemory { - u8 tri_strip_tag[16]; - u8 ad_gif_tag[16]; - math::Vector4f hvdf_offset; - math::Vector4f perspective[4]; - math::Vector4f fog; - } m_low_memory; - static_assert(sizeof(LowMemory) == 0x80); - - struct alignas(16) BufferMemory { - u8 data[1024 * 16]; - } m_buffer; - - void sq_buffer(Mask mask, const Vf& data, u32 qw) { - // if (data.x_as_u32() == 0x80000000 && data.y_as_u32() == 0x80000000) { - // fmt::print("big store line {}: {} : {} {} {} {}\n", line_number, qw, data.x(), data.y(), - // data.z(), data.w()); - // } - // sketchy... - // qw &= 1023; - ASSERT(qw * 16 < sizeof(m_buffer.data)); - for (int i = 0; i < 4; i++) { - if ((u64)mask & (1 << i)) { - memcpy(m_buffer.data + qw * 16 + i * 4, data.data + i, 4); - } - } - } - - void lq_buffer(Mask mask, Vf& dest, u16 addr); - - template - void lq_buffer_xyzw(Vf& dest, u16 addr); - - template - void lq_buffer_xyz(Vf& dest, u16 addr); - - template - void sq_buffer_xyzw(const Vf& src, u16 addr); - - void isw_buffer(Mask mask, u16 val, u16 addr); - void ilw_buffer(Mask mask, u16& dest, u16 addr); - - u16 xtop(); - u16 xitop(); - - DirectRenderer m_direct; - DirectRenderer2 m_direct2; - - struct { - u32 row[4] = {0, 0, 0, 0}; - bool stmod = false; - } m_vif; - - struct Stats { - int unpack_count = 0; - int unpack_bytes = 0; - int mscal_35 = 0; - int mscal_20 = 0; - int mscal_17 = 0; - int mscal_32 = 0; - bool had_data = false; - std::string str; - } m_stats; - - bool m_dbf = false; - - bool m_enable_prime_mscals = true; - bool m_enable_normal_mscals = true; - bool m_enable_send_to_direct = true; - - struct Vu { - Vf vf01, vf02, vf03, vf04, vf05, vf06, vf07, vf08, vf09, vf10, vf11, vf12, vf13, vf14, vf15, - vf16, vf17, vf18, vf19, vf20, vf21, vf22, vf23, vf24, vf25, vf26, vf27, vf28, vf29, vf30, - vf31; - const Vf vf00; - u16 vi01, vi02, vi03, vi04, vi05, vi06, vi07, vi09, vi08, vi11, vi12, vi13, vi10, vi14, vi15; - float I, P, Q; - - Accumulator acc; - const u16 vi00 = 0; - - u16 hack_old_vi15 = 0; - - Vu() : vf00(0, 0, 0, 1) {} - } vu; -}; diff --git a/game/graphics/opengl_renderer/OpenGLRenderer.cpp b/game/graphics/opengl_renderer/OpenGLRenderer.cpp index 145ff8f072..daf707ee02 100644 --- a/game/graphics/opengl_renderer/OpenGLRenderer.cpp +++ b/game/graphics/opengl_renderer/OpenGLRenderer.cpp @@ -12,7 +12,6 @@ #include "game/graphics/opengl_renderer/background/TFragment.h" #include "game/graphics/opengl_renderer/background/Tie3.h" #include "game/graphics/opengl_renderer/background/Shrub.h" -#include "game/graphics/opengl_renderer/MercRenderer.h" #include "game/graphics/opengl_renderer/EyeRenderer.h" #include "game/graphics/opengl_renderer/ShadowRenderer.h" #include "game/graphics/opengl_renderer/foreground/Generic2.h" @@ -69,15 +68,6 @@ OpenGLRenderer::OpenGLRenderer(std::shared_ptr texture_pool, init_bucket_renderers(); } -void OpenGLRenderer::init_merc_renderer(const std::string& name, BucketId id) { - std::vector> merc_renderers; - merc_renderers.push_back(std::make_unique(name, id)); - merc_renderers.push_back(std::make_unique(name, id)); - - m_mercs.push_back( - init_bucket_renderer(name, BucketCategory::MERC, id, std::move(merc_renderers))); -} - /*! * Construct bucket renderers. We can specify different renderers for different buckets */ @@ -116,7 +106,8 @@ void OpenGLRenderer::init_bucket_renderers() { // 9 : TIE_LEVEL0 init_bucket_renderer("l0-tfrag-tie", BucketCategory::TIE, BucketId::TIE_LEVEL0, 0); // 10 : MERC_TFRAG_TEX_LEVEL0 - init_merc_renderer("l0-tfrag-merc", BucketId::MERC_TFRAG_TEX_LEVEL0); + init_bucket_renderer("l0-tfrag-merc", BucketCategory::MERC, + BucketId::MERC_TFRAG_TEX_LEVEL0); // 11 : GMERC_TFRAG_TEX_LEVEL0 init_bucket_renderer("l0-tfrag-generic", BucketCategory::GENERIC, BucketId::GENERIC_TFRAG_TEX_LEVEL0, 1500000, 10000, 10000, 800); @@ -135,7 +126,8 @@ void OpenGLRenderer::init_bucket_renderers() { // 16 : TIE_LEVEL1 init_bucket_renderer("l1-tfrag-tie", BucketCategory::TIE, BucketId::TIE_LEVEL1, 1); // 17 : MERC_TFRAG_TEX_LEVEL1 - init_merc_renderer("l1-tfrag-merc", BucketId::MERC_TFRAG_TEX_LEVEL1); + init_bucket_renderer("l1-tfrag-merc", BucketCategory::MERC, + BucketId::MERC_TFRAG_TEX_LEVEL1); // 18 : GMERC_TFRAG_TEX_LEVEL1 init_bucket_renderer("l1-tfrag-generic", BucketCategory::GENERIC, BucketId::GENERIC_TFRAG_TEX_LEVEL1, 1500000, 10000, 10000, 800); @@ -202,7 +194,8 @@ void OpenGLRenderer::init_bucket_renderers() { BucketId::TFRAG_ICE_LEVEL1, ice_tfrags, false, 1); // 44 - init_merc_renderer("common-alpha-merc", BucketId::MERC_AFTER_ALPHA); + init_bucket_renderer("common-alpha-merc", BucketCategory::MERC, + BucketId::MERC_AFTER_ALPHA); init_bucket_renderer("common-alpha-generic", BucketCategory::GENERIC, BucketId::GENERIC_ALPHA); // 46 @@ -213,7 +206,8 @@ void OpenGLRenderer::init_bucket_renderers() { //----------------------- init_bucket_renderer("l0-pris-tex", BucketCategory::TEX, BucketId::PRIS_TEX_LEVEL0); // 48 - init_merc_renderer("l0-pris-merc", BucketId::MERC_PRIS_LEVEL0); // 49 + init_bucket_renderer("l0-pris-merc", BucketCategory::MERC, + BucketId::MERC_PRIS_LEVEL0); // 49 init_bucket_renderer("l0-pris-generic", BucketCategory::GENERIC, BucketId::GENERIC_PRIS_LEVEL0); // 50 @@ -222,7 +216,8 @@ void OpenGLRenderer::init_bucket_renderers() { //----------------------- init_bucket_renderer("l1-pris-tex", BucketCategory::TEX, BucketId::PRIS_TEX_LEVEL1); // 51 - init_merc_renderer("l1-pris-merc", BucketId::MERC_PRIS_LEVEL1); // 52 + init_bucket_renderer("l1-pris-merc", BucketCategory::MERC, + BucketId::MERC_PRIS_LEVEL1); // 52 init_bucket_renderer("l1-pris-generic", BucketCategory::GENERIC, BucketId::GENERIC_PRIS_LEVEL1); // 53 @@ -231,7 +226,8 @@ void OpenGLRenderer::init_bucket_renderers() { "common-pris-eyes", BucketCategory::OTHER, BucketId::MERC_EYES_AFTER_PRIS); // 54 // hack: set to merc2 for debugging - init_merc_renderer("common-pris-merc", BucketId::MERC_AFTER_PRIS); // 55 + init_bucket_renderer("common-pris-merc", BucketCategory::MERC, + BucketId::MERC_AFTER_PRIS); // 55 init_bucket_renderer("common-pris-generic", BucketCategory::GENERIC, BucketId::GENERIC_PRIS); // 56 @@ -240,7 +236,8 @@ void OpenGLRenderer::init_bucket_renderers() { //----------------------- init_bucket_renderer("l0-water-tex", BucketCategory::TEX, BucketId::WATER_TEX_LEVEL0); // 57 - init_merc_renderer("l0-water-merc", BucketId::MERC_WATER_LEVEL0); // 58 + init_bucket_renderer("l0-water-merc", BucketCategory::MERC, + BucketId::MERC_WATER_LEVEL0); // 58 init_bucket_renderer("l0-water-generic", BucketCategory::GENERIC, BucketId::GENERIC_WATER_LEVEL0); // 59 @@ -249,7 +246,8 @@ void OpenGLRenderer::init_bucket_renderers() { //----------------------- init_bucket_renderer("l1-water-tex", BucketCategory::TEX, BucketId::WATER_TEX_LEVEL1); // 60 - init_merc_renderer("l1-water-merc", BucketId::MERC_WATER_LEVEL1); // 61 + init_bucket_renderer("l1-water-merc", BucketCategory::MERC, + BucketId::MERC_WATER_LEVEL1); // 61 init_bucket_renderer("l1-water-generic", BucketCategory::GENERIC, BucketId::GENERIC_WATER_LEVEL1); // 62 @@ -299,11 +297,6 @@ void OpenGLRenderer::render(DmaFollower dma, const RenderOptions& settings) { m_render_state.ee_main_memory = g_ee_main_mem; m_render_state.offset_of_s7 = offset_of_s7(); - // hack to toggle all mercs, todo remove once we finish merc2 - for (auto merc : m_mercs) { - merc->set_idx(m_render_state.merc2 ? 1 : 0); - } - { auto prof = m_profiler.root()->make_scoped_child("frame-setup"); setup_frame(settings.window_width_px, settings.window_height_px, settings.lbox_width_px, @@ -378,14 +371,12 @@ void OpenGLRenderer::render(DmaFollower dma, const RenderOptions& settings) { void OpenGLRenderer::draw_renderer_selection_window() { ImGui::Begin("Renderer Debug"); - ImGui::Checkbox("Merc2", &m_render_state.merc2); ImGui::Checkbox("Use old single-draw", &m_render_state.no_multidraw); ImGui::SliderFloat("Fog Adjust", &m_render_state.fog_intensity, 0, 10); ImGui::Checkbox("Sky CPU", &m_render_state.use_sky_cpu); ImGui::Checkbox("Occlusion Cull", &m_render_state.use_occlusion_culling); ImGui::Checkbox("Merc XGKICK", &m_render_state.enable_merc_xgkick); ImGui::Checkbox("Blackout Loads", &m_enable_fast_blackout_loads); - ImGui::Checkbox("Direct 2", &m_render_state.use_direct2); for (size_t i = 0; i < m_bucket_renderers.size(); i++) { auto renderer = m_bucket_renderers[i].get(); diff --git a/game/graphics/opengl_renderer/OpenGLRenderer.h b/game/graphics/opengl_renderer/OpenGLRenderer.h index 6c01ab9950..124cd1a55e 100644 --- a/game/graphics/opengl_renderer/OpenGLRenderer.h +++ b/game/graphics/opengl_renderer/OpenGLRenderer.h @@ -49,9 +49,6 @@ class OpenGLRenderer { void init_bucket_renderers(); void draw_renderer_selection_window(); void finish_screenshot(const std::string& output_name, int px, int py, int x, int y); - - void init_merc_renderer(const std::string& name, BucketId id); - template T* init_bucket_renderer(const std::string& name, BucketCategory cat, @@ -72,8 +69,6 @@ class OpenGLRenderer { std::array, (int)BucketId::MAX_BUCKETS> m_bucket_renderers; std::array m_bucket_categories; - std::vector m_mercs; - std::array m_category_times; FullScreenDraw m_blackout_renderer; CollideMeshRenderer m_collide_renderer; diff --git a/game/graphics/opengl_renderer/foreground/Generic2.cpp b/game/graphics/opengl_renderer/foreground/Generic2.cpp index e9d8b42899..cd79f162ff 100644 --- a/game/graphics/opengl_renderer/foreground/Generic2.cpp +++ b/game/graphics/opengl_renderer/foreground/Generic2.cpp @@ -30,6 +30,18 @@ void Generic2::draw_debug_window() { ImGui::Checkbox("Alpha 4", &m_alpha_draw_enable[3]); ImGui::Checkbox("Alpha 5", &m_alpha_draw_enable[4]); ImGui::Checkbox("Alpha 6", &m_alpha_draw_enable[5]); + + ImGui::Text("Max Seen:"); + ImGui::Text(" frag: %d/%d %.1f%%", m_max_frags_seen, (int)m_fragments.size(), + 100.f * m_max_frags_seen / (float)m_fragments.size()); + ImGui::Text(" vert: %d/%d %.1f%%", m_max_verts_seen, (int)m_verts.size(), + 100.f * m_max_verts_seen / (float)m_verts.size()); + ImGui::Text(" adgif: %d/%d %.1f%%", m_max_frags_seen, (int)m_adgifs.size(), + 100.f * m_max_adgifs_seen / (float)m_adgifs.size()); + ImGui::Text(" idx: %d/%d %.1f%%", m_max_frags_seen, (int)m_indices.size(), + 100.f * m_max_indices_seen / (float)m_indices.size()); + ImGui::Text(" bucket: %d/%d %.1f%%", m_max_frags_seen, (int)m_fragments.size(), + 100.f * m_max_frags_seen / (float)m_fragments.size()); } /*! diff --git a/game/graphics/opengl_renderer/foreground/Generic2.h b/game/graphics/opengl_renderer/foreground/Generic2.h index 8d1fc8c41e..dc1107e266 100644 --- a/game/graphics/opengl_renderer/foreground/Generic2.h +++ b/game/graphics/opengl_renderer/foreground/Generic2.h @@ -6,8 +6,8 @@ class Generic2 : public BucketRenderer { public: Generic2(const std::string& name, BucketId my_id, - u32 num_verts = 1500000, - u32 num_frags = 10000, + u32 num_verts = 200000, + u32 num_frags = 2000, u32 num_adgif = 3000, u32 num_buckets = 800); ~Generic2(); @@ -150,18 +150,23 @@ class Generic2 : public BucketRenderer { u32 m_next_free_frag = 0; std::vector m_fragments; + u32 m_max_frags_seen = 0; u32 m_next_free_vert = 0; std::vector m_verts; + u32 m_max_verts_seen = 0; u32 m_next_free_adgif = 0; std::vector m_adgifs; + u32 m_max_adgifs_seen = 0; u32 m_next_free_bucket = 0; std::vector m_buckets; + u32 m_max_buckets_seen = 0; u32 m_next_free_idx = 0; std::vector m_indices; + u32 m_max_indices_seen = 0; Fragment& next_frag() { ASSERT(m_next_free_frag < m_fragments.size()); diff --git a/game/graphics/opengl_renderer/foreground/Generic2_DMA.cpp b/game/graphics/opengl_renderer/foreground/Generic2_DMA.cpp index 3f61a57c87..f534702772 100644 --- a/game/graphics/opengl_renderer/foreground/Generic2_DMA.cpp +++ b/game/graphics/opengl_renderer/foreground/Generic2_DMA.cpp @@ -100,6 +100,12 @@ bool Generic2::handle_bucket_setup_dma(DmaFollower& dma, u32 next_bucket) { } void Generic2::reset_buffers() { + m_max_frags_seen = std::max(m_next_free_frag, m_max_frags_seen); + m_max_verts_seen = std::max(m_next_free_vert, m_max_verts_seen); + m_max_adgifs_seen = std::max(m_next_free_adgif, m_max_adgifs_seen); + m_max_buckets_seen = std::max(m_next_free_bucket, m_max_buckets_seen); + m_max_indices_seen = std::max(m_next_free_idx, m_max_indices_seen); + m_next_free_frag = 0; m_next_free_vert = 0; m_next_free_adgif = 0; diff --git a/game/graphics/pipelines/opengl.cpp b/game/graphics/pipelines/opengl.cpp index 04e551236a..e59b59247d 100644 --- a/game/graphics/pipelines/opengl.cpp +++ b/game/graphics/pipelines/opengl.cpp @@ -63,6 +63,8 @@ struct GraphicsData { double last_engine_time = 1. / 60.; float pmode_alp = 0.f; + std::string imgui_log_filename, imgui_filename; + GraphicsData() : dma_copier(EE_MAIN_MEM_SIZE), texture_pool(std::make_shared()), @@ -236,9 +238,11 @@ static std::shared_ptr gl_make_display(int width, ImGui::CreateContext(); // Init ImGui settings + g_gfx_data->imgui_filename = file_util::get_file_path({"imgui.ini"}); + g_gfx_data->imgui_log_filename = file_util::get_file_path({"imgui_log.txt"}); ImGuiIO& io = ImGui::GetIO(); - io.IniFilename = file_util::get_file_path({"imgui.ini"}).c_str(); - io.LogFilename = file_util::get_file_path({"imgui_log.txt"}).c_str(); + io.IniFilename = g_gfx_data->imgui_filename.c_str(); + io.LogFilename = g_gfx_data->imgui_log_filename.c_str(); // set up to get inputs for this window ImGui_ImplGlfw_InitForOpenGL(window, true); @@ -260,6 +264,9 @@ GLDisplay::GLDisplay(GLFWwindow* window, bool is_main) : m_window(window) { } GLDisplay::~GLDisplay() { + ImGuiIO& io = ImGui::GetIO(); + io.IniFilename = nullptr; + io.LogFilename = nullptr; glfwSetWindowUserPointer(m_window, nullptr); ImGui_ImplOpenGL3_Shutdown(); ImGui_ImplGlfw_Shutdown(); diff --git a/game/runtime.cpp b/game/runtime.cpp index 8758933212..675f455aea 100644 --- a/game/runtime.cpp +++ b/game/runtime.cpp @@ -169,8 +169,6 @@ void ee_runner(SystemThreadInterface& iface) { // // kill the IOP todo iop::LIBRARY_kill(); - munmap(g_ee_main_mem, EE_MAIN_MEM_SIZE); - // after main returns, trigger a shutdown. iface.trigger_shutdown(); } @@ -341,5 +339,6 @@ RuntimeExitStatus exec_runtime(int argc, char** argv) { // join and exit tm.join(); lg::info("GOAL Runtime Shutdown (code {})", MasterExit); + munmap(g_ee_main_mem, EE_MAIN_MEM_SIZE); return MasterExit; } diff --git a/goalc/main.cpp b/goalc/main.cpp index 0832a25e52..cb3246797f 100644 --- a/goalc/main.cpp +++ b/goalc/main.cpp @@ -12,17 +12,11 @@ #include #include "common/nrepl/ReplServer.h" -void setup_logging(bool verbose) { +void setup_logging() { lg::set_file(file_util::get_file_path({"log/compiler.txt"})); - if (verbose) { - lg::set_file_level(lg::level::info); - lg::set_stdout_level(lg::level::info); - lg::set_flush_level(lg::level::info); - } else { - lg::set_file_level(lg::level::warn); - lg::set_stdout_level(lg::level::warn); - lg::set_flush_level(lg::level::warn); - } + lg::set_file_level(lg::level::info); + lg::set_stdout_level(lg::level::info); + lg::set_flush_level(lg::level::info); lg::initialize(); } @@ -40,7 +34,6 @@ int main(int argc, char** argv) { app.add_option("-u,--user", username, "Specify the username to use for your user profile in 'goal_src/user/'"); app.add_option("-p,--port", nrepl_port, "Specify the nREPL port. Defaults to 8181"); - app.add_flag("-v,--verbose", verbose, "Enable verbose output"); app.add_flag("--auto-lt", auto_listen, "Attempt to automatically connect to the listener on startup"); app.add_flag("--auto-dbg", auto_debug, @@ -78,7 +71,7 @@ int main(int argc, char** argv) { } } - setup_logging(verbose); + setup_logging(); lg::info("OpenGOAL Compiler {}.{}", versions::GOAL_VERSION_MAJOR, versions::GOAL_VERSION_MINOR);