#include "OceanMid.h"

namespace {
u32 clip(const Vf& vector, float val, u32 old_clip) {
  u32 result = (old_clip << 6);
  float plus = std::abs(val);
  float minus = -plus;

  if (vector.x() > plus) {
    result |= 0b1;
  }
  if (vector.x() < minus) {
    result |= 0b10;
  }

  if (vector.y() > plus) {
    result |= 0b100;
  }
  if (vector.y() < minus) {
    result |= 0b1000;
  }

  if (vector.z() > plus) {
    result |= 0b10000;
  }
  if (vector.z() < minus) {
    result |= 0b100000;
  }
  return result & 0xffffff;  // only 24 bits
}
void fcand(u16& dest, u32 imm, u32 cf) {
  // dest = (cf & imm) ? 1 : 0;
  if ((cf & 0xFFFFFF) & (imm & 0xFFFFFF))
    dest = 1;
  else
    dest = 0;
  //  dest = cf & imm; // wrong
}

void fcor(u16& dest, u32 imm, u32 cf) {
  // dest = ((0xffffff & (cf | imm)) == 0xffffff) ? 1 : 0;
  u32 hold = (cf & 0xFFFFFF) | (imm & 0xFFFFFF);
  if (hold == 0xFFFFFF)
    dest = 1;
  else
    dest = 0;

  //  dest = cf | imm;
}

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)));
}
}  // namespace

void OceanMid::run_call0_vu2c() {
  bool bc;
  // lq.xyzw vf01, 733(vi00)    |  nop                            0
  lq_buffer(Mask::xyzw, vu.vf01, 733);
  // lq.xyzw vf02, 735(vi00)    |  nop                            1
  lq_buffer(Mask::xyzw, vu.vf02, 735);
  // lq.xyzw vf03, 736(vi00)    |  nop                            2
  lq_buffer(Mask::xyzw, vu.vf03, 736);
  // lq.xyzw vf05, 737(vi00)    |  nop                            3
  lq_buffer(Mask::xyzw, vu.vf05, 737);
  // lq.xyzw vf06, 738(vi00)    |  nop                            4
  lq_buffer(Mask::xyzw, vu.vf06, 738);
  // iaddiu vi09, vi00, 0x14f   |  nop                            5
  vu.vi09 = 0x14f; /* 335 */
  // iaddi vi01, vi00, 0x6      |  nop                            6
  vu.vi01 = 6;
L1:
  // lq.xyzw vf20, 741(vi01)    |  nop                            7
  lq_buffer(Mask::xyzw, vu.vf20, vu.vi01 + 741);
  // lq.xyzw vf21, 749(vi01)    |  nop                            8
  lq_buffer(Mask::xyzw, vu.vf21, vu.vi01 + 749);
  // sq.xyzw vf20, 335(vi01)    |  nop                            9
  sq_buffer(Mask::xyzw, vu.vf20, vu.vi01 + 335);
  // sq.xyzw vf20, 457(vi01)    |  nop                            10
  sq_buffer(Mask::xyzw, vu.vf20, vu.vi01 + 457);
  // sq.xyzw vf21, 396(vi01)    |  nop                            11
  sq_buffer(Mask::xyzw, vu.vf21, vu.vi01 + 396);
  // sq.xyzw vf21, 518(vi01)    |  nop                            12
  sq_buffer(Mask::xyzw, vu.vf21, vu.vi01 + 518);
  // BRANCH!
  // ibgtz vi01, L1             |  nop                            13
  bc = ((s16)vu.vi01) > 0;
  // iaddi vi01, vi01, -0x1     |  nop                            14
  vu.vi01 = vu.vi01 + -1;
  if (bc) {
    goto L1;
  }

  // iaddi vi05, vi00, 0x0      |  mul.xyzw vf16, vf00, vf00      15
  vu.vf16.mul(Mask::xyzw, vu.vf00, vu.vf00);
  vu.vi05 = 0;
  // iaddi vi07, vi00, 0x8      |  nop                            16
  vu.vi07 = 8;
L2:
  // iaddi vi06, vi00, 0x8      |  mul.x vf16, vf00, vf00         17
  vu.vf16.mul(Mask::x, vu.vf00, vu.vf00);
  vu.vi06 = 8;
L3:
  // sq.xyzw vf16, 236(vi05)    |  nop                            18
  sq_buffer(Mask::xyzw, vu.vf16, vu.vi05 + 236);
  // iaddi vi05, vi05, 0x1      |  addw.x vf16, vf16, vf05        19
  vu.vf16.add(Mask::x, vu.vf16, vu.vf05.w());
  vu.vi05 = vu.vi05 + 1;
  // BRANCH!
  // ibgtz vi06, L3             |  nop                            20
  bc = ((s16)vu.vi06) > 0;
  // iaddi vi06, vi06, -0x1     |  nop                            21
  vu.vi06 = vu.vi06 + -1;
  if (bc) {
    goto L3;
  }

  // BRANCH!
  // ibgtz vi07, L2             |  addw.z vf16, vf16, vf05        22
  vu.vf16.add(Mask::z, vu.vf16, vu.vf05.w());
  bc = ((s16)vu.vi07) > 0;
  // iaddi vi07, vi07, -0x1     |  nop                            23
  vu.vi07 = vu.vi07 + -1;
  if (bc) {
    goto L2;
  }

  // nop                        |  sub.xyzw vf20, vf20, vf20      24
  vu.vf20.set_zero();
  // nop                        |  sub.xyzw vf21, vf21, vf21      25
  vu.vf21.set_zero();
  // iaddi vi03, vi00, 0x0      |  addw.z vf20, vf20, vf00        26
  vu.vf20.add(Mask::z, vu.vf20, vu.vf00.w());
  vu.vi03 = 0;
  // iaddi vi06, vi00, 0x8      |  addw.yz vf21, vf21, vf00       27
  vu.vf21.add(Mask::yz, vu.vf21, vu.vf00.w());
  vu.vi06 = 8;
L4:
  // sq.xyzw vf20, 317(vi03)    |  nop                            28
  sq_buffer(Mask::xyzw, vu.vf20, vu.vi03 + 317);
  // sq.xyzw vf21, 318(vi03)    |  addw.x vf20, vf20, vf00        29
  vu.vf20.add(Mask::x, vu.vf20, vu.vf00.w());
  sq_buffer(Mask::xyzw, vu.vf21, vu.vi03 + 318);
  // iaddi vi03, vi03, 0x2      |  addw.x vf21, vf21, vf00        30
  vu.vf21.add(Mask::x, vu.vf21, vu.vf00.w());
  vu.vi03 = vu.vi03 + 2;
  // BRANCH!
  // ibgtz vi06, L4             |  nop                            31
  bc = ((s16)vu.vi06) > 0;
  // iaddi vi06, vi06, -0x1     |  nop                            32
  vu.vi06 = vu.vi06 + -1;
  if (bc) {
    goto L4;
  }

  // lq.xyzw vf08, 756(vi00)    |  nop                            33
  lq_buffer(Mask::xyzw, vu.vf08, 756);
  // iaddi vi04, vi00, 0x8      |  nop                            34
  vu.vi04 = 8;
  // iaddiu vi06, vi00, 0x11    |  ftoi0.xyzw vf08, vf08          35
  vu.vf08.ftoi0(Mask::xyzw, vu.vf08);
  vu.vi06 = 0x11; /* 17 */
L5:
  // sq.xyzw vf08, 396(vi04)    |  nop                            36
  sq_buffer(Mask::xyzw, vu.vf08, vu.vi04 + 396);
  // sq.xyzw vf08, 518(vi04)    |  nop                            37
  sq_buffer(Mask::xyzw, vu.vf08, vu.vi04 + 518);
  // iaddi vi04, vi04, 0x3      |  nop                            38
  vu.vi04 = vu.vi04 + 3;
  // BRANCH!
  // ibgtz vi06, L5             |  nop                            39
  bc = ((s16)vu.vi06) > 0;
  // iaddi vi06, vi06, -0x1     |  nop                            40
  vu.vi06 = vu.vi06 + -1;
  if (bc) {
    goto L5;
  }

  // nop                        |  nop :e                         41

  // nop                        |  nop                            42

  return;
}

void OceanMid::run_call41_vu2c() {
  // nop                        |  nop :e                         41

  // nop                        |  nop                            42

  return;
}

void OceanMid::run_call43_vu2c() {
  // iaddiu vi10, vi00, 0x243   |  nop                            43
  vu.vi10 = 0x243; /* 579 */
  // nop                        |  nop :e                         44

  // nop                        |  nop                            45

  return;
}

void OceanMid::run_call46_vu2c() {
  bool bc;
  // xtop vi02                  |  nop                            46
  vu.vi02 = xtop();
  // lq.xyzw vf07, 748(vi00)    |  nop                            47
  lq_buffer(Mask::xyzw, vu.vf07, 748);
  // lq.xyzw vf12, 4(vi02)      |  nop                            48
  lq_buffer(Mask::xyzw, vu.vf12, vu.vi02 + 4);
  // lq.xyzw vf13, 5(vi02)      |  nop                            49
  lq_buffer(Mask::xyzw, vu.vf13, vu.vi02 + 5);
  // lq.xyzw vf14, 6(vi02)      |  nop                            50
  lq_buffer(Mask::xyzw, vu.vf14, vu.vi02 + 6);
  // lq.xyzw vf15, 7(vi02)      |  nop                            51
  lq_buffer(Mask::xyzw, vu.vf15, vu.vi02 + 7);
  // sq.xyzw vf07, 341(vi00)    |  nop                            52
  sq_buffer(Mask::xyzw, vu.vf07, 341);
  // sq.xyzw vf07, 463(vi00)    |  nop                            53
  sq_buffer(Mask::xyzw, vu.vf07, 463);
  // iaddi vi07, vi00, 0x7      |  nop                            54
  vu.vi07 = 7;
  // lq.xyzw vf04, 116(vi02)    |  nop                            55
  lq_buffer(Mask::xyzw, vu.vf04, vu.vi02 + 116);
L9:
  // iaddi vi01, vi07, -0x4     |  nop                            56
  vu.vi01 = vu.vi07 + -4;
  // mtir vi10, vf04.x          |  nop                            57
  vu.vi10 = vu.vf04.x_as_u16();
  // iaddiu vi11, vi00, 0xff    |  nop                            58
  vu.vi11 = 0xff; /* 255 */
  // BRANCH!
  // ibne vi00, vi01, L10       |  nop                            59
  bc = (vu.vi01 != 0);
  // mr32.xyzw vf04, vf04       |  nop                            60
  vu.vf04.mr32(Mask::xyzw, vu.vf04);
  if (bc) {
    goto L10;
  }

  // lq.xyzw vf04, 117(vi02)    |  nop                            61
  lq_buffer(Mask::xyzw, vu.vf04, vu.vi02 + 117);
L10:
  // BRANCH!
  // ibeq vi11, vi10, L11       |  nop                            62
  bc = (vu.vi11 == vu.vi10);
  // iaddi vi08, vi09, 0x7      |  nop                            63
  vu.vi08 = vu.vi09 + 7;
  if (bc) {
    goto L11;
  }

  // BRANCH!
  // bal vi15, L26              |  nop                            64
  // ASSERT(false);
  // nop                        |  nop                            65

  // if (bc) { goto L26; }
  run_L26_vu2c();

  // iaddiu vi01, vi00, 0x318   |  nop                            66
  vu.vi01 = 0x318; /* 792 */
  // xgkick vi09                |  nop                            67
  xgkick(vu.vi09);
  // isub vi09, vi01, vi09      |  nop                            68
  vu.vi09 = vu.vi01 - vu.vi09;
L11:
  // BRANCH!
  // ibgtz vi07, L9             |  nop                            69
  bc = ((s16)vu.vi07) > 0;
  // iaddi vi07, vi07, -0x1     |  nop                            70
  vu.vi07 = vu.vi07 + -1;
  if (bc) {
    goto L9;
  }

  // nop                        |  nop :e                         71

  // nop                        |  nop                            72

  return;
}

void OceanMid::run_call73_vu2c() {
  bool bc;
  // xtop vi02                  |  nop                            73
  vu.vi02 = xtop();
  // lq.xyzw vf07, 747(vi00)    |  nop                            74
  lq_buffer(Mask::xyzw, vu.vf07, 747);
  // lq.xyzw vf08, 0(vi02)      |  nop                            75
  lq_buffer(Mask::xyzw, vu.vf08, vu.vi02);
  // lq.xyzw vf09, 1(vi02)      |  nop                            76
  lq_buffer(Mask::xyzw, vu.vf09, vu.vi02 + 1);
  // lq.xyzw vf10, 2(vi02)      |  nop                            77
  lq_buffer(Mask::xyzw, vu.vf10, vu.vi02 + 2);
  // lq.xyzw vf11, 3(vi02)      |  nop                            78
  lq_buffer(Mask::xyzw, vu.vf11, vu.vi02 + 3);
  // lq.xyzw vf12, 4(vi02)      |  nop                            79
  lq_buffer(Mask::xyzw, vu.vf12, vu.vi02 + 4);
  // lq.xyzw vf13, 5(vi02)      |  nop                            80
  lq_buffer(Mask::xyzw, vu.vf13, vu.vi02 + 5);
  // lq.xyzw vf14, 6(vi02)      |  nop                            81
  lq_buffer(Mask::xyzw, vu.vf14, vu.vi02 + 6);
  // lq.xyzw vf15, 7(vi02)      |  nop                            82
  lq_buffer(Mask::xyzw, vu.vf15, vu.vi02 + 7);
  // sq.xyzw vf07, 341(vi00)    |  nop                            83
  sq_buffer(Mask::xyzw, vu.vf07, 341);
  // sq.xyzw vf07, 463(vi00)    |  nop                            84
  sq_buffer(Mask::xyzw, vu.vf07, 463);
  // iaddi vi07, vi00, 0x7      |  nop                            85
  vu.vi07 = 7;
  // lq.xyzw vf04, 116(vi02)    |  nop                            86
  lq_buffer(Mask::xyzw, vu.vf04, vu.vi02 + 116);
L13:
  // iaddi vi01, vi07, -0x4     |  nop                            87
  vu.vi01 = vu.vi07 + -4;
  // mtir vi10, vf04.x          |  nop                            88
  vu.vi10 = vu.vf04.x_as_u16();
  // iaddiu vi11, vi00, 0xff    |  nop                            89
  vu.vi11 = 0xff; /* 255 */
  // BRANCH!
  // ibne vi00, vi01, L14       |  nop                            90
  bc = (vu.vi01 != 0);
  // mr32.xyzw vf04, vf04       |  nop                            91
  vu.vf04.mr32(Mask::xyzw, vu.vf04);
  if (bc) {
    goto L14;
  }

  // lq.xyzw vf04, 117(vi02)    |  nop                            92
  lq_buffer(Mask::xyzw, vu.vf04, vu.vi02 + 117);
L14:
  // BRANCH!
  // ibeq vi11, vi10, L15       |  nop                            93
  bc = (vu.vi11 == vu.vi10);
  // iaddi vi08, vi09, 0x7      |  nop                            94
  vu.vi08 = vu.vi09 + 7;
  if (bc) {
    goto L15;
  }

  // BRANCH!
  // bal vi15, L32              |  nop                            95
  // ASSERT(false);
  // nop                        |  nop                            96

  // if (bc) { goto L32; }
  run_L32_vu2c();

  // iaddiu vi01, vi00, 0x318   |  nop                            97
  vu.vi01 = 0x318; /* 792 */
  // xgkick vi09                |  nop                            98
  xgkick(vu.vi09);  // draws envmapped ocean
  // BRANCH!
  // ibeq vi00, vi14, L15       |  nop                            99
  bc = (vu.vi14 == 0);
  // isub vi09, vi01, vi09      |  nop                            100
  vu.vi09 = vu.vi01 - vu.vi09;
  if (bc) {
    goto L15;
  }

  // BRANCH!
  // bal vi15, L38              |  nop                            101
  // ASSERT(false);
  // nop                        |  nop                            102

  // if (bc) { goto L38; }
  run_L38_vu2c();

L15:
  // BRANCH!
  // ibgtz vi07, L13            |  nop                            103
  bc = ((s16)vu.vi07) > 0;
  // iaddi vi07, vi07, -0x1     |  nop                            104
  vu.vi07 = vu.vi07 + -1;
  if (bc) {
    goto L13;
  }

  // nop                        |  nop :e                         105

  // nop                        |  nop                            106

  return;
}

void OceanMid::run_call107_vu2c() {
  bool bc;
  // xtop vi02                  |  nop                            107
  vu.vi02 = xtop();
  // xtop vi03                  |  nop                            108
  vu.vi03 = vu.vi02;  // xtop();
  // ior vi04, vi00, vi00       |  nop                            109
  vu.vi04 = 0;
  // ilw.x vi05, 8(vi02)        |  nop                            110
  ilw_buffer(Mask::x, vu.vi05, vu.vi02 + 8);
  // lq.xyzw vf08, 0(vi02)      |  nop                            111
  lq_buffer(Mask::xyzw, vu.vf08, vu.vi02);
  // lq.xyzw vf09, 1(vi02)      |  nop                            112
  lq_buffer(Mask::xyzw, vu.vf09, vu.vi02 + 1);
  // lq.xyzw vf10, 2(vi02)      |  nop                            113
  lq_buffer(Mask::xyzw, vu.vf10, vu.vi02 + 2);
  // lq.xyzw vf11, 3(vi02)      |  nop                            114
  lq_buffer(Mask::xyzw, vu.vf11, vu.vi02 + 3);
  // lq.xyzw vf12, 4(vi02)      |  nop                            115
  lq_buffer(Mask::xyzw, vu.vf12, vu.vi02 + 4);
  // lq.xyzw vf13, 5(vi02)      |  nop                            116
  lq_buffer(Mask::xyzw, vu.vf13, vu.vi02 + 5);
  // lq.xyzw vf14, 6(vi02)      |  nop                            117
  lq_buffer(Mask::xyzw, vu.vf14, vu.vi02 + 6);
  // lq.xyzw vf15, 7(vi02)      |  nop                            118
  lq_buffer(Mask::xyzw, vu.vf15, vu.vi02 + 7);
L17:
  // lq.xyzw vf16, 17(vi03)     |  nop                            119
  lq_buffer(Mask::xyzw, vu.vf16, vu.vi03 + 17);
  // lq.xyzw vf28, 765(vi00)    |  nop                            120
  lq_buffer(Mask::xyzw, vu.vf28, 765);
  // lq.xyzw vf29, 766(vi00)    |  nop                            121
  lq_buffer(Mask::xyzw, vu.vf29, 766);
  // lq.xyzw vf30, 767(vi00)    |  nop                            122
  lq_buffer(Mask::xyzw, vu.vf30, 767);
  // lq.xyzw vf31, 768(vi00)    |  nop                            123
  lq_buffer(Mask::xyzw, vu.vf31, 768);
  // lq.xyzw vf24, 9(vi02)      |  mulax.xyzw ACC, vf28, vf16     124
  vu.acc.mula(Mask::xyzw, vu.vf28, vu.vf16.x());
  lq_buffer(Mask::xyzw, vu.vf24, vu.vi02 + 9);
  // lq.xyzw vf25, 10(vi02)     |  madday.xyzw ACC, vf29, vf16    125
  vu.acc.madda(Mask::xyzw, vu.vf29, vu.vf16.y());
  lq_buffer(Mask::xyzw, vu.vf25, vu.vi02 + 10);
  // lq.xyzw vf26, 11(vi02)     |  maddaz.xyzw ACC, vf30, vf16    126
  vu.acc.madda(Mask::xyzw, vu.vf30, vu.vf16.z());
  lq_buffer(Mask::xyzw, vu.vf26, vu.vi02 + 11);
  // lq.xyzw vf27, 12(vi02)     |  maddw.xyzw vf28, vf31, vf16    127
  vu.acc.madd(Mask::xyzw, vu.vf28, vu.vf31, vu.vf16.w());
  lq_buffer(Mask::xyzw, vu.vf27, vu.vi02 + 12);
  // lq.xyzw vf22, 13(vi02)     |  mulax.xyzw ACC, vf24, vf16     128
  vu.acc.mula(Mask::xyzw, vu.vf24, vu.vf16.x());
  lq_buffer(Mask::xyzw, vu.vf22, vu.vi02 + 13);
  // lq.xyzw vf23, 14(vi02)     |  madday.xyzw ACC, vf25, vf16    129
  vu.acc.madda(Mask::xyzw, vu.vf25, vu.vf16.y());
  lq_buffer(Mask::xyzw, vu.vf23, vu.vi02 + 14);
  // lq.xyzw vf18, 15(vi02)     |  maddaz.xyzw ACC, vf26, vf16    130
  vu.acc.madda(Mask::xyzw, vu.vf26, vu.vf16.z());
  lq_buffer(Mask::xyzw, vu.vf18, vu.vi02 + 15);
  // lq.xyzw vf19, 16(vi02)     |  maddw.xyzw vf20, vf27, vf16    131
  vu.acc.madd(Mask::xyzw, vu.vf20, vu.vf27, vu.vf16.w());
  lq_buffer(Mask::xyzw, vu.vf19, vu.vi02 + 16);
  // iaddi vi05, vi05, -0x1     |  mulax.xyzw ACC, vf08, vf28     132
  vu.acc.mula(Mask::xyzw, vu.vf08, vu.vf28.x());
  vu.vi05 = vu.vi05 + -1;
  // nop                        |  madday.xyzw ACC, vf09, vf28    133
  vu.acc.madda(Mask::xyzw, vu.vf09, vu.vf28.y());
  // nop                        |  maddaz.xyzw ACC, vf10, vf28    134
  vu.acc.madda(Mask::xyzw, vu.vf10, vu.vf28.z());
  // nop                        |  maddw.xyzw vf24, vf11, vf00    135
  vu.acc.madd(Mask::xyzw, vu.vf24, vu.vf11, vu.vf00.w());
  // nop                        |  mulax.xyzw ACC, vf12, vf28     136
  vu.acc.mula(Mask::xyzw, vu.vf12, vu.vf28.x());
  // nop                        |  madday.xyzw ACC, vf13, vf28    137
  vu.acc.madda(Mask::xyzw, vu.vf13, vu.vf28.y());
  // nop                        |  maddaz.xyzw ACC, vf14, vf28    138
  vu.acc.madda(Mask::xyzw, vu.vf14, vu.vf28.z());
  // erleng.xyz P, vf24         |  maddw.xyzw vf28, vf15, vf00    139
  vu.acc.madd(Mask::xyzw, vu.vf28, vu.vf15, vu.vf00.w());
  vu.P = erleng(vu.vf24);
  // waitp                      |  addz.y vf24, vf00, vf24        140
  vu.vf24.add(Mask::y, vu.vf00, vu.vf24.z());
  // nop                        |  mul.xyzw vf28, vf28, vf01      141
  vu.vf28.mul(Mask::xyzw, vu.vf28, vu.vf01);
  // mfp.w vf24, P              |  mulax.xyzw ACC, vf22, vf16     142
  vu.acc.mula(Mask::xyzw, vu.vf22, vu.vf16.x());
  vu.vf24.mfp(Mask::w, vu.P);
  // iaddi vi03, vi03, 0x1      |  madday.xyzw ACC, vf23, vf16    143
  vu.acc.madda(Mask::xyzw, vu.vf23, vu.vf16.y());
  vu.vi03 = vu.vi03 + 1;
  // nop                        |  maddaz.xyzw ACC, vf18, vf16    144
  vu.acc.madda(Mask::xyzw, vu.vf18, vu.vf16.z());
  // sq.xyzw vf20, 791(vi04)    |  maddw.xyzw vf22, vf19, vf16    145
  vu.acc.madd(Mask::xyzw, vu.vf22, vu.vf19, vu.vf16.w());
  sq_buffer(Mask::xyzw, vu.vf20, vu.vi04 + 791);
  // sq.xyzw vf28, 793(vi04)    |  mulw.xy vf24, vf24, vf24       146
  vu.vf24.mul(Mask::xy, vu.vf24, vu.vf24.w());
  sq_buffer(Mask::xyzw, vu.vf28, vu.vi04 + 793);
  // sq.xyzw vf22, 792(vi04)    |  mula.xyzw ACC, vf24, vf05      147
  vu.acc.mula(Mask::xyzw, vu.vf24, vu.vf05);
  sq_buffer(Mask::xyzw, vu.vf22, vu.vi04 + 792);
  // iaddi vi04, vi04, 0x4      |  maddw.xyzw vf24, vf06, vf00    148
  vu.acc.madd(Mask::xyzw, vu.vf24, vu.vf06, vu.vf00.w());
  vu.vi04 = vu.vi04 + 4;
  // BRANCH!
  // ibgtz vi05, L17            |  nop                            149
  bc = ((s16)vu.vi05) > 0;
  // sq.xyzw vf24, 790(vi04)    |  nop                            150
  sq_buffer(Mask::xyzw, vu.vf24, vu.vi04 + 790);
  if (bc) {
    goto L17;
  }

  // ior vi14, vi00, vi00       |  nop                            151
  vu.vi14 = 0;
  // lq.xyzw vf31, 734(vi00)    |  nop                            152
  lq_buffer(Mask::xyzw, vu.vf31, 734);
  // ilw.x vi11, 8(vi02)        |  nop                            153
  ilw_buffer(Mask::x, vu.vi11, vu.vi02 + 8);
  // ilw.y vi07, 8(vi02)        |  nop                            154
  ilw_buffer(Mask::y, vu.vi07, vu.vi02 + 8);
  // iaddi vi15, vi00, 0x1      |  nop                            155
  vu.vi15 = 1;
  // lq.xyzw vf28, 741(vi00)    |  nop                            156
  lq_buffer(Mask::xyzw, vu.vf28, 741);
  // lq.xyzw vf29, 742(vi00)    |  nop                            157
  lq_buffer(Mask::xyzw, vu.vf29, 742);
  // lq.xyzw vf30, 743(vi00)    |  nop                            158
  lq_buffer(Mask::xyzw, vu.vf30, 743);
  // lq.xyzw vf24, 744(vi00)    |  nop                            159
  lq_buffer(Mask::xyzw, vu.vf24, 744);
  // lq.xyzw vf25, 745(vi00)    |  nop                            160
  lq_buffer(Mask::xyzw, vu.vf25, 745);
  // lq.xyzw vf26, 746(vi00)    |  nop                            161
  lq_buffer(Mask::xyzw, vu.vf26, 746);
  // lq.xyzw vf07, 739(vi00)    |  nop                            162
  lq_buffer(Mask::xyzw, vu.vf07, 739);
  // sq.xyzw vf28, 579(vi00)    |  nop                            163
  sq_buffer(Mask::xyzw, vu.vf28, 579);
  // sq.xyzw vf29, 580(vi00)    |  nop                            164
  sq_buffer(Mask::xyzw, vu.vf29, 580);
  // sq.xyzw vf30, 581(vi00)    |  nop                            165
  sq_buffer(Mask::xyzw, vu.vf30, 581);
  // sq.xyzw vf24, 582(vi00)    |  nop                            166
  sq_buffer(Mask::xyzw, vu.vf24, 582);
  // sq.xyzw vf25, 583(vi00)    |  nop                            167
  sq_buffer(Mask::xyzw, vu.vf25, 583);
  // sq.xyzw vf26, 584(vi00)    |  nop                            168
  sq_buffer(Mask::xyzw, vu.vf26, 584);
  // sq.xyzw vf28, 656(vi00)    |  nop                            169
  sq_buffer(Mask::xyzw, vu.vf28, 656);
  // sq.xyzw vf29, 657(vi00)    |  nop                            170
  sq_buffer(Mask::xyzw, vu.vf29, 657);
  // sq.xyzw vf30, 658(vi00)    |  nop                            171
  sq_buffer(Mask::xyzw, vu.vf30, 658);
  // sq.xyzw vf24, 659(vi00)    |  nop                            172
  sq_buffer(Mask::xyzw, vu.vf24, 659);
  // sq.xyzw vf25, 660(vi00)    |  nop                            173
  sq_buffer(Mask::xyzw, vu.vf25, 660);
  // sq.xyzw vf26, 661(vi00)    |  nop                            174
  sq_buffer(Mask::xyzw, vu.vf26, 661);
  // iaddi vi11, vi11, -0x2     |  nop                            175
  vu.vi11 = vu.vi11 + -2;
L18:
  // iand vi01, vi07, vi15      |  nop                            176
  vu.vi01 = vu.vi07 & vu.vi15;
  // iaddi vi11, vi11, -0x2     |  nop                            177
  vu.vi11 = vu.vi11 + -2;
  // BRANCH!
  // ibne vi00, vi01, L19       |  nop                            178
  bc = (vu.vi01 != 0);
  // iadd vi15, vi15, vi15      |  nop                            179
  vu.vi15 = vu.vi15 + vu.vi15;
  if (bc) {
    goto L19;
  }

  // iaddi vi08, vi10, 0x7      |  nop                            180
  vu.vi08 = vu.vi10 + 7;
  // iaddi vi03, vi10, 0x7      |  nop                            181
  vu.vi03 = vu.vi10 + 7;
  // iaddi vi05, vi00, 0x4      |  nop                            182
  vu.vi05 = 4;
  // lq.xyzw vf20, 791(vi14)    |  nop                            183
  lq_buffer(Mask::xyzw, vu.vf20, vu.vi14 + 791);
  // lq.xyzw vf22, 792(vi14)    |  nop                            184
  lq_buffer(Mask::xyzw, vu.vf22, vu.vi14 + 792);
  // lq.xyzw vf28, 793(vi14)    |  nop                            185
  lq_buffer(Mask::xyzw, vu.vf28, vu.vi14 + 793);
  // lq.xyzw vf21, 795(vi14)    |  nop                            186
  lq_buffer(Mask::xyzw, vu.vf21, vu.vi14 + 795);
  // lq.xyzw vf23, 796(vi14)    |  nop                            187
  lq_buffer(Mask::xyzw, vu.vf23, vu.vi14 + 796);
  // lq.xyzw vf29, 797(vi14)    |  nop                            188
  lq_buffer(Mask::xyzw, vu.vf29, vu.vi14 + 797);
  // sq.xyzw vf20, 0(vi08)      |  nop                            189
  sq_buffer(Mask::xyzw, vu.vf20, vu.vi08);
  // sq.xyzw vf22, 1(vi08)      |  nop                            190
  sq_buffer(Mask::xyzw, vu.vf22, vu.vi08 + 1);
  // sq.xyzw vf28, 2(vi08)      |  nop                            191
  sq_buffer(Mask::xyzw, vu.vf28, vu.vi08 + 2);
  // sq.xyzw vf21, 3(vi08)      |  nop                            192
  sq_buffer(Mask::xyzw, vu.vf21, vu.vi08 + 3);
  // sq.xyzw vf23, 4(vi08)      |  nop                            193
  sq_buffer(Mask::xyzw, vu.vf23, vu.vi08 + 4);
  // sq.xyzw vf29, 5(vi08)      |  nop                            194
  sq_buffer(Mask::xyzw, vu.vf29, vu.vi08 + 5);
  // sq.xyzw vf20, 12(vi08)     |  nop                            195
  sq_buffer(Mask::xyzw, vu.vf20, vu.vi08 + 12);
  // sq.xyzw vf22, 13(vi08)     |  nop                            196
  sq_buffer(Mask::xyzw, vu.vf22, vu.vi08 + 13);
  // sq.xyzw vf28, 14(vi08)     |  nop                            197
  sq_buffer(Mask::xyzw, vu.vf28, vu.vi08 + 14);
  // lq.xyzw vf20, 803(vi14)    |  nop                            198
  lq_buffer(Mask::xyzw, vu.vf20, vu.vi14 + 803);
  // lq.xyzw vf22, 804(vi14)    |  nop                            199
  lq_buffer(Mask::xyzw, vu.vf22, vu.vi14 + 804);
  // lq.xyzw vf28, 805(vi14)    |  nop                            200
  lq_buffer(Mask::xyzw, vu.vf28, vu.vi14 + 805);
  // lq.xyzw vf21, 799(vi14)    |  nop                            201
  lq_buffer(Mask::xyzw, vu.vf21, vu.vi14 + 799);
  // lq.xyzw vf23, 800(vi14)    |  nop                            202
  lq_buffer(Mask::xyzw, vu.vf23, vu.vi14 + 800);
  // lq.xyzw vf29, 801(vi14)    |  nop                            203
  lq_buffer(Mask::xyzw, vu.vf29, vu.vi14 + 801);
  // sq.xyzw vf20, 6(vi08)      |  nop                            204
  sq_buffer(Mask::xyzw, vu.vf20, vu.vi08 + 6);
  // sq.xyzw vf22, 7(vi08)      |  nop                            205
  sq_buffer(Mask::xyzw, vu.vf22, vu.vi08 + 7);
  // sq.xyzw vf28, 8(vi08)      |  nop                            206
  sq_buffer(Mask::xyzw, vu.vf28, vu.vi08 + 8);
  // sq.xyzw vf21, 9(vi08)      |  nop                            207
  sq_buffer(Mask::xyzw, vu.vf21, vu.vi08 + 9);
  // sq.xyzw vf23, 10(vi08)     |  nop                            208
  sq_buffer(Mask::xyzw, vu.vf23, vu.vi08 + 10);
  // BRANCH!
  // bal vi13, L45              |  nop                            209
  // ASSERT(false);
  // sq.xyzw vf29, 11(vi08)     |  nop                            210
  sq_buffer(Mask::xyzw, vu.vf29, vu.vi08 + 11);
  // if (bc) { goto L45; }
  run_L45_vu2c();

  // BRANCH!
  // ibeq vi00, vi05, L19       |  nop                            211
  bc = (vu.vi05 == 0);
  // iaddiu vi06, vi05, 0x4000  |  nop                            212
  vu.vi06 = vu.vi05 + 0x4000; /* 16384 */
  if (bc) {
    goto L19;
  }

  // BRANCH!
  // bal vi13, L43              |  nop                            213
  // ASSERT(false);
  // iaddiu vi06, vi06, 0x4000  |  nop                            214
  vu.vi06 = vu.vi06 + 0x4000; /* 16384 */
  // if (bc) { goto L43; }
  run_L43_vu2c();

L19:
  // BRANCH!
  // ibgtz vi11, L18            |  nop                            215
  bc = ((s16)vu.vi11) > 0;
  // iaddi vi14, vi14, 0x8      |  nop                            216
  vu.vi14 = vu.vi14 + 8;
  if (bc) {
    goto L18;
  }

  // ior vi14, vi00, vi00       |  nop                            217
  vu.vi14 = 0;
  // ilw.x vi11, 8(vi02)        |  nop                            218
  ilw_buffer(Mask::x, vu.vi11, vu.vi02 + 8);
  // ilw.y vi07, 8(vi02)        |  nop                            219
  ilw_buffer(Mask::y, vu.vi07, vu.vi02 + 8);
  // iaddi vi15, vi00, 0x1      |  nop                            220
  vu.vi15 = 1;
  // lq.xyzw vf07, 740(vi00)    |  nop                            221
  lq_buffer(Mask::xyzw, vu.vf07, 740);
  // iaddi vi11, vi11, -0x2     |  nop                            222
  vu.vi11 = vu.vi11 + -2;
L20:
  // iand vi01, vi07, vi15      |  nop                            223
  vu.vi01 = vu.vi07 & vu.vi15;
  // iaddi vi11, vi11, -0x2     |  nop                            224
  vu.vi11 = vu.vi11 + -2;
  // BRANCH!
  // ibne vi00, vi01, L21       |  nop                            225
  bc = (vu.vi01 != 0);
  // iadd vi15, vi15, vi15      |  nop                            226
  vu.vi15 = vu.vi15 + vu.vi15;
  if (bc) {
    goto L21;
  }

  // iaddi vi08, vi10, 0x7      |  nop                            227
  vu.vi08 = vu.vi10 + 7;
  // iaddi vi03, vi10, 0x7      |  nop                            228
  vu.vi03 = vu.vi10 + 7;
  // iaddi vi05, vi00, 0x4      |  nop                            229
  vu.vi05 = 4;
  // lq.xyzw vf24, 794(vi14)    |  nop                            230
  lq_buffer(Mask::xyzw, vu.vf24, vu.vi14 + 794);
  // lq.xyzw vf22, 756(vi00)    |  nop                            231
  lq_buffer(Mask::xyzw, vu.vf22, 756);
  // lq.xyzw vf28, 793(vi14)    |  nop                            232
  lq_buffer(Mask::xyzw, vu.vf28, vu.vi14 + 793);
  // lq.xyzw vf25, 798(vi14)    |  nop                            233
  lq_buffer(Mask::xyzw, vu.vf25, vu.vi14 + 798);
  // lq.xyzw vf29, 797(vi14)    |  nop                            234
  lq_buffer(Mask::xyzw, vu.vf29, vu.vi14 + 797);
  // sq.xyzw vf24, 0(vi08)      |  nop                            235
  sq_buffer(Mask::xyzw, vu.vf24, vu.vi08);
  // sq.xyzw vf22, 1(vi08)      |  nop                            236
  sq_buffer(Mask::xyzw, vu.vf22, vu.vi08 + 1);
  // sq.xyzw vf28, 2(vi08)      |  nop                            237
  sq_buffer(Mask::xyzw, vu.vf28, vu.vi08 + 2);
  // sq.xyzw vf25, 3(vi08)      |  nop                            238
  sq_buffer(Mask::xyzw, vu.vf25, vu.vi08 + 3);
  // sq.xyzw vf22, 4(vi08)      |  nop                            239
  sq_buffer(Mask::xyzw, vu.vf22, vu.vi08 + 4);
  // sq.xyzw vf29, 5(vi08)      |  nop                            240
  sq_buffer(Mask::xyzw, vu.vf29, vu.vi08 + 5);
  // sq.xyzw vf24, 12(vi08)     |  nop                            241
  sq_buffer(Mask::xyzw, vu.vf24, vu.vi08 + 12);
  // sq.xyzw vf22, 13(vi08)     |  nop                            242
  sq_buffer(Mask::xyzw, vu.vf22, vu.vi08 + 13);
  // sq.xyzw vf28, 14(vi08)     |  nop                            243
  sq_buffer(Mask::xyzw, vu.vf28, vu.vi08 + 14);
  // lq.xyzw vf24, 806(vi14)    |  nop                            244
  lq_buffer(Mask::xyzw, vu.vf24, vu.vi14 + 806);
  // lq.xyzw vf28, 805(vi14)    |  nop                            245
  lq_buffer(Mask::xyzw, vu.vf28, vu.vi14 + 805);
  // lq.xyzw vf25, 802(vi14)    |  nop                            246
  lq_buffer(Mask::xyzw, vu.vf25, vu.vi14 + 802);
  // lq.xyzw vf29, 801(vi14)    |  nop                            247
  lq_buffer(Mask::xyzw, vu.vf29, vu.vi14 + 801);
  // sq.xyzw vf24, 6(vi08)      |  nop                            248
  sq_buffer(Mask::xyzw, vu.vf24, vu.vi08 + 6);
  // sq.xyzw vf22, 7(vi08)      |  nop                            249
  sq_buffer(Mask::xyzw, vu.vf22, vu.vi08 + 7);
  // sq.xyzw vf28, 8(vi08)      |  nop                            250
  sq_buffer(Mask::xyzw, vu.vf28, vu.vi08 + 8);
  // sq.xyzw vf25, 9(vi08)      |  nop                            251
  sq_buffer(Mask::xyzw, vu.vf25, vu.vi08 + 9);
  // sq.xyzw vf22, 10(vi08)     |  nop                            252
  sq_buffer(Mask::xyzw, vu.vf22, vu.vi08 + 10);
  // BRANCH!
  // bal vi13, L45              |  nop                            253
  // ASSERT(false);
  // sq.xyzw vf29, 11(vi08)     |  nop                            254
  sq_buffer(Mask::xyzw, vu.vf29, vu.vi08 + 11);
  // if (bc) { goto L45; }
  run_L45_vu2c();

  // lq.xyzw vf28, 749(vi00)    |  nop                            255
  lq_buffer(Mask::xyzw, vu.vf28, 749);
  // BRANCH!
  // ibeq vi00, vi05, L21       |  nop                            256
  bc = (vu.vi05 == 0);
  // lq.xyzw vf29, 750(vi00)    |  nop                            257
  lq_buffer(Mask::xyzw, vu.vf29, 750);
  if (bc) {
    goto L21;
  }

  // lq.xyzw vf30, 751(vi00)    |  nop                            258
  lq_buffer(Mask::xyzw, vu.vf30, 751);
  // lq.xyzw vf24, 752(vi00)    |  nop                            259
  lq_buffer(Mask::xyzw, vu.vf24, 752);
  // lq.xyzw vf25, 753(vi00)    |  nop                            260
  lq_buffer(Mask::xyzw, vu.vf25, 753);
  // lq.xyzw vf26, 754(vi00)    |  nop                            261
  lq_buffer(Mask::xyzw, vu.vf26, 754);
  // sq.xyzw vf28, 0(vi10)      |  nop                            262
  sq_buffer(Mask::xyzw, vu.vf28, vu.vi10);
  // sq.xyzw vf29, 1(vi10)      |  nop                            263
  sq_buffer(Mask::xyzw, vu.vf29, vu.vi10 + 1);
  // sq.xyzw vf30, 2(vi10)      |  nop                            264
  sq_buffer(Mask::xyzw, vu.vf30, vu.vi10 + 2);
  // sq.xyzw vf24, 3(vi10)      |  nop                            265
  sq_buffer(Mask::xyzw, vu.vf24, vu.vi10 + 3);
  // sq.xyzw vf25, 4(vi10)      |  nop                            266
  sq_buffer(Mask::xyzw, vu.vf25, vu.vi10 + 4);
  // sq.xyzw vf26, 5(vi10)      |  nop                            267
  sq_buffer(Mask::xyzw, vu.vf26, vu.vi10 + 5);
  // iaddiu vi06, vi05, 0x4000  |  nop                            268
  vu.vi06 = vu.vi05 + 0x4000; /* 16384 */
  // BRANCH!
  // bal vi13, L43              |  nop                            269
  // ASSERT(false);
  // iaddiu vi06, vi06, 0x4000  |  nop                            270
  vu.vi06 = vu.vi06 + 0x4000; /* 16384 */
  // if (bc) { goto L43; }
  run_L43_vu2c();

L21:
  // BRANCH!
  // ibgtz vi11, L20            |  nop                            271
  bc = ((s16)vu.vi11) > 0;
  // iaddi vi14, vi14, 0x8      |  nop                            272
  vu.vi14 = vu.vi14 + 8;
  if (bc) {
    goto L20;
  }

  // nop                        |  nop :e                         273

  // nop                        |  nop                            274

  return;
}

void OceanMid::run_call275_vu2c() {
  bool bc;
  // fmt::print("call 275\n");
  // xtop vi02                  |  nop                            275
  vu.vi02 = xtop();
  // xtop vi03                  |  nop                            276
  vu.vi03 = vu.vi02;  // xtop();
  // ior vi04, vi00, vi00       |  nop                            277
  vu.vi04 = 0;
  // iaddi vi08, vi10, 0x7      |  nop                            278
  vu.vi08 = vu.vi10 + 7;
  // ilw.x vi05, 8(vi02)        |  nop                            279
  ilw_buffer(Mask::x, vu.vi05, vu.vi02 + 8);
  // lq.xyzw vf08, 0(vi02)      |  nop                            280
  lq_buffer(Mask::xyzw, vu.vf08, vu.vi02);
  // lq.xyzw vf09, 1(vi02)      |  nop                            281
  lq_buffer(Mask::xyzw, vu.vf09, vu.vi02 + 1);
  // lq.xyzw vf10, 2(vi02)      |  nop                            282
  lq_buffer(Mask::xyzw, vu.vf10, vu.vi02 + 2);
  // lq.xyzw vf11, 3(vi02)      |  nop                            283
  lq_buffer(Mask::xyzw, vu.vf11, vu.vi02 + 3);
  // lq.xyzw vf12, 4(vi02)      |  nop                            284
  lq_buffer(Mask::xyzw, vu.vf12, vu.vi02 + 4);
  // lq.xyzw vf13, 5(vi02)      |  nop                            285
  lq_buffer(Mask::xyzw, vu.vf13, vu.vi02 + 5);
  // lq.xyzw vf14, 6(vi02)      |  nop                            286
  lq_buffer(Mask::xyzw, vu.vf14, vu.vi02 + 6);
  // lq.xyzw vf15, 7(vi02)      |  nop                            287
  lq_buffer(Mask::xyzw, vu.vf15, vu.vi02 + 7);
L23:
  // lq.xyzw vf16, 17(vi03)     |  nop                            288
  lq_buffer(Mask::xyzw, vu.vf16, vu.vi03 + 17);
  // lq.xyzw vf28, 765(vi00)    |  nop                            289
  lq_buffer(Mask::xyzw, vu.vf28, 765);
  // lq.xyzw vf29, 766(vi00)    |  nop                            290
  lq_buffer(Mask::xyzw, vu.vf29, 766);
  // lq.xyzw vf30, 767(vi00)    |  nop                            291
  lq_buffer(Mask::xyzw, vu.vf30, 767);
  // lq.xyzw vf31, 768(vi00)    |  nop                            292
  lq_buffer(Mask::xyzw, vu.vf31, 768);
  // lq.xyzw vf24, 9(vi02)      |  mulax.xyzw ACC, vf28, vf16     293
  vu.acc.mula(Mask::xyzw, vu.vf28, vu.vf16.x());
  lq_buffer(Mask::xyzw, vu.vf24, vu.vi02 + 9);
  // lq.xyzw vf25, 10(vi02)     |  madday.xyzw ACC, vf29, vf16    294
  vu.acc.madda(Mask::xyzw, vu.vf29, vu.vf16.y());
  lq_buffer(Mask::xyzw, vu.vf25, vu.vi02 + 10);
  // lq.xyzw vf26, 11(vi02)     |  maddaz.xyzw ACC, vf30, vf16    295
  vu.acc.madda(Mask::xyzw, vu.vf30, vu.vf16.z());
  lq_buffer(Mask::xyzw, vu.vf26, vu.vi02 + 11);
  // lq.xyzw vf27, 12(vi02)     |  maddw.xyzw vf28, vf31, vf16    296
  vu.acc.madd(Mask::xyzw, vu.vf28, vu.vf31, vu.vf16.w());
  lq_buffer(Mask::xyzw, vu.vf27, vu.vi02 + 12);
  // lq.xyzw vf22, 13(vi02)     |  mulax.xyzw ACC, vf24, vf16     297
  vu.acc.mula(Mask::xyzw, vu.vf24, vu.vf16.x());
  lq_buffer(Mask::xyzw, vu.vf22, vu.vi02 + 13);
  // lq.xyzw vf23, 14(vi02)     |  madday.xyzw ACC, vf25, vf16    298
  vu.acc.madda(Mask::xyzw, vu.vf25, vu.vf16.y());
  lq_buffer(Mask::xyzw, vu.vf23, vu.vi02 + 14);
  // lq.xyzw vf18, 15(vi02)     |  maddaz.xyzw ACC, vf26, vf16    299
  vu.acc.madda(Mask::xyzw, vu.vf26, vu.vf16.z());
  lq_buffer(Mask::xyzw, vu.vf18, vu.vi02 + 15);
  // lq.xyzw vf19, 16(vi02)     |  maddw.xyzw vf20, vf27, vf16    300
  vu.acc.madd(Mask::xyzw, vu.vf20, vu.vf27, vu.vf16.w());
  lq_buffer(Mask::xyzw, vu.vf19, vu.vi02 + 16);
  // iaddi vi05, vi05, -0x1     |  mulax.xyzw ACC, vf08, vf28     301
  vu.acc.mula(Mask::xyzw, vu.vf08, vu.vf28.x());
  vu.vi05 = vu.vi05 + -1;
  // nop                        |  madday.xyzw ACC, vf09, vf28    302
  vu.acc.madda(Mask::xyzw, vu.vf09, vu.vf28.y());
  // nop                        |  maddaz.xyzw ACC, vf10, vf28    303
  vu.acc.madda(Mask::xyzw, vu.vf10, vu.vf28.z());
  // nop                        |  maddw.xyzw vf24, vf11, vf00    304
  vu.acc.madd(Mask::xyzw, vu.vf24, vu.vf11, vu.vf00.w());
  // nop                        |  mulax.xyzw ACC, vf12, vf28     305
  vu.acc.mula(Mask::xyzw, vu.vf12, vu.vf28.x());
  // nop                        |  madday.xyzw ACC, vf13, vf28    306
  vu.acc.madda(Mask::xyzw, vu.vf13, vu.vf28.y());
  // nop                        |  maddaz.xyzw ACC, vf14, vf28    307
  vu.acc.madda(Mask::xyzw, vu.vf14, vu.vf28.z());
  // erleng.xyz P, vf24         |  maddw.xyzw vf28, vf15, vf00    308
  vu.acc.madd(Mask::xyzw, vu.vf28, vu.vf15, vu.vf00.w());
  vu.P = erleng(vu.vf24);
  // waitp                      |  addz.y vf24, vf00, vf24        309
  vu.vf24.add(Mask::y, vu.vf00, vu.vf24.z());
  // nop                        |  mul.xyzw vf28, vf28, vf01      310
  vu.vf28.mul(Mask::xyzw, vu.vf28, vu.vf01);
  // mfp.w vf24, P              |  mulax.xyzw ACC, vf22, vf16     311
  vu.acc.mula(Mask::xyzw, vu.vf22, vu.vf16.x());
  vu.vf24.mfp(Mask::w, vu.P);
  // iaddi vi03, vi03, 0x1      |  madday.xyzw ACC, vf23, vf16    312
  vu.acc.madda(Mask::xyzw, vu.vf23, vu.vf16.y());
  vu.vi03 = vu.vi03 + 1;
  // nop                        |  maddaz.xyzw ACC, vf18, vf16    313
  vu.acc.madda(Mask::xyzw, vu.vf18, vu.vf16.z());
  // sq.xyzw vf20, 0(vi08)      |  maddw.xyzw vf22, vf19, vf16    314
  vu.acc.madd(Mask::xyzw, vu.vf22, vu.vf19, vu.vf16.w());
  sq_buffer(Mask::xyzw, vu.vf20, vu.vi08);
  // sq.xyzw vf28, 2(vi08)      |  mulw.xy vf24, vf24, vf24       315
  vu.vf24.mul(Mask::xy, vu.vf24, vu.vf24.w());
  sq_buffer(Mask::xyzw, vu.vf28, vu.vi08 + 2);
  // sq.xyzw vf28, 792(vi04)    |  nop                            316
  sq_buffer(Mask::xyzw, vu.vf28, vu.vi04 + 792);
  // sq.xyzw vf22, 1(vi08)      |  mula.xyzw ACC, vf24, vf05      317
  vu.acc.mula(Mask::xyzw, vu.vf24, vu.vf05);
  sq_buffer(Mask::xyzw, vu.vf22, vu.vi08 + 1);
  // iaddi vi04, vi04, 0x2      |  maddw.xyzw vf24, vf06, vf00    318
  vu.acc.madd(Mask::xyzw, vu.vf24, vu.vf06, vu.vf00.w());
  vu.vi04 = vu.vi04 + 2;
  // iaddi vi08, vi08, 0x3      |  nop                            319
  vu.vi08 = vu.vi08 + 3;
  // BRANCH!
  // ibgtz vi05, L23            |  nop                            320
  bc = ((s16)vu.vi05) > 0;
  // sq.xyzw vf24, 789(vi04)    |  nop                            321
  sq_buffer(Mask::xyzw, vu.vf24, vu.vi04 + 789);
  if (bc) {
    goto L23;
  }

  // lq.xyzw vf31, 734(vi00)    |  nop                            322
  lq_buffer(Mask::xyzw, vu.vf31, 734);
  // ilw.x vi05, 8(vi02)        |  nop                            323
  ilw_buffer(Mask::x, vu.vi05, vu.vi02 + 8);
  // fmt::print("loaded vi05: {}\n", vu.vi05);
  // lq.xyzw vf20, 7(vi10)      |  nop                            324
  lq_buffer(Mask::xyzw, vu.vf20, vu.vi10 + 7);
  // lq.xyzw vf22, 8(vi10)      |  nop                            325
  lq_buffer(Mask::xyzw, vu.vf22, vu.vi10 + 8);
  // lq.xyzw vf28, 9(vi10)      |  nop                            326
  lq_buffer(Mask::xyzw, vu.vf28, vu.vi10 + 9);
  // sq.xyzw vf20, 0(vi08)      |  nop                            327
  sq_buffer(Mask::xyzw, vu.vf20, vu.vi08);
  // sq.xyzw vf22, 1(vi08)      |  nop                            328
  sq_buffer(Mask::xyzw, vu.vf22, vu.vi08 + 1);
  // sq.xyzw vf28, 2(vi08)      |  nop                            329
  sq_buffer(Mask::xyzw, vu.vf28, vu.vi08 + 2);
  // iaddi vi08, vi10, 0x7      |  nop                            330
  vu.vi08 = vu.vi10 + 7;
  // BRANCH!
  // bal vi13, L45              |  nop                            331
  // ASSERT(false);
  // iaddi vi03, vi10, 0x7      |  nop                            332
  vu.vi03 = vu.vi10 + 7;
  // if (bc) { goto L45; }
  run_L45_vu2c();

  // lq.xyzw vf28, 741(vi00)    |  nop                            333
  lq_buffer(Mask::xyzw, vu.vf28, 741);
  // BRANCH!
  // ibeq vi00, vi05, L25       |  nop                            334
  // fmt::print("vu.vi05 = {}\n", vu.vi05);
  bc = (vu.vi05 == 0);
  // lq.xyzw vf29, 742(vi00)    |  nop                            335
  lq_buffer(Mask::xyzw, vu.vf29, 742);
  if (bc) {
    goto L25;
  }

  // lq.xyzw vf30, 743(vi00)    |  nop                            336
  lq_buffer(Mask::xyzw, vu.vf30, 743);
  // lq.xyzw vf24, 744(vi00)    |  nop                            337
  lq_buffer(Mask::xyzw, vu.vf24, 744);
  // lq.xyzw vf25, 745(vi00)    |  nop                            338
  lq_buffer(Mask::xyzw, vu.vf25, 745);
  // lq.xyzw vf26, 746(vi00)    |  nop                            339
  lq_buffer(Mask::xyzw, vu.vf26, 746);
  // lq.xyzw vf07, 739(vi00)    |  nop                            340
  lq_buffer(Mask::xyzw, vu.vf07, 739);
  // sq.xyzw vf28, 0(vi10)      |  nop                            341
  sq_buffer(Mask::xyzw, vu.vf28, vu.vi10);
  // sq.xyzw vf29, 1(vi10)      |  nop                            342
  sq_buffer(Mask::xyzw, vu.vf29, vu.vi10 + 1);
  // sq.xyzw vf30, 2(vi10)      |  nop                            343
  sq_buffer(Mask::xyzw, vu.vf30, vu.vi10 + 2);
  // sq.xyzw vf24, 3(vi10)      |  nop                            344
  sq_buffer(Mask::xyzw, vu.vf24, vu.vi10 + 3);
  // sq.xyzw vf25, 4(vi10)      |  nop                            345
  sq_buffer(Mask::xyzw, vu.vf25, vu.vi10 + 4);
  // sq.xyzw vf26, 5(vi10)      |  nop                            346
  sq_buffer(Mask::xyzw, vu.vf26, vu.vi10 + 5);
  // iaddiu vi06, vi05, 0x4000  |  nop                            347
  vu.vi06 = vu.vi05 + 0x4000; /* 16384 */
  // BRANCH!
  // bal vi13, L43              |  nop                            348
  // ASSERT(false);
  // iaddiu vi06, vi06, 0x4000  |  nop                            349
  vu.vi06 = vu.vi06 + 0x4000; /* 16384 */
                              //  if (bc) {
                              //    goto L43;
                              //  }
  run_L43_vu2c();

  // ior vi03, vi00, vi00       |  nop                            350
  vu.vi03 = 0;
  // lq.xyzw vf22, 756(vi00)    |  nop                            351
  lq_buffer(Mask::xyzw, vu.vf22, 756);
  // ilw.x vi05, 8(vi02)        |  nop                            352
  ilw_buffer(Mask::x, vu.vi05, vu.vi02 + 8);
  // iaddi vi08, vi10, 0x7      |  nop                            353
  vu.vi08 = vu.vi10 + 7;
L24:
  // lq.xyzw vf28, 792(vi03)    |  nop                            354
  lq_buffer(Mask::xyzw, vu.vf28, vu.vi03 + 792);
  // lq.xyzw vf24, 791(vi03)    |  nop                            355
  lq_buffer(Mask::xyzw, vu.vf24, vu.vi03 + 791);
  // iaddi vi03, vi03, 0x2      |  nop                            356
  vu.vi03 = vu.vi03 + 2;
  // iaddi vi05, vi05, -0x1     |  nop                            357
  vu.vi05 = vu.vi05 + -1;
  // sq.xyzw vf22, 1(vi08)      |  nop                            358
  sq_buffer(Mask::xyzw, vu.vf22, vu.vi08 + 1);
  // sq.xyzw vf28, 2(vi08)      |  nop                            359
  sq_buffer(Mask::xyzw, vu.vf28, vu.vi08 + 2);
  // sq.xyzw vf24, 0(vi08)      |  nop                            360
  sq_buffer(Mask::xyzw, vu.vf24, vu.vi08);
  // BRANCH!
  // ibgtz vi05, L24            |  nop                            361
  bc = ((s16)vu.vi05) > 0;
  // iaddi vi08, vi08, 0x3      |  nop                            362
  vu.vi08 = vu.vi08 + 3;
  if (bc) {
    goto L24;
  }

  // ilw.x vi05, 8(vi02)        |  nop                            363
  ilw_buffer(Mask::x, vu.vi05, vu.vi02 + 8);
  // lq.xyzw vf20, 7(vi10)      |  nop                            364
  lq_buffer(Mask::xyzw, vu.vf20, vu.vi10 + 7);
  // lq.xyzw vf22, 8(vi10)      |  nop                            365
  lq_buffer(Mask::xyzw, vu.vf22, vu.vi10 + 8);
  // lq.xyzw vf24, 9(vi10)      |  nop                            366
  lq_buffer(Mask::xyzw, vu.vf24, vu.vi10 + 9);
  // sq.xyzw vf24, 0(vi08)      |  nop                            367
  sq_buffer(Mask::xyzw, vu.vf24, vu.vi08);
  // sq.xyzw vf22, 1(vi08)      |  nop                            368
  sq_buffer(Mask::xyzw, vu.vf22, vu.vi08 + 1);
  // sq.xyzw vf28, 2(vi08)      |  nop                            369
  sq_buffer(Mask::xyzw, vu.vf28, vu.vi08 + 2);
  // iaddi vi08, vi10, 0x7      |  nop                            370
  vu.vi08 = vu.vi10 + 7;
  // BRANCH!
  // bal vi13, L45              |  nop                            371
  // ASSERT(false);
  // iaddi vi03, vi10, 0x7      |  nop                            372
  vu.vi03 = vu.vi10 + 7;
  //  if (bc) {
  //    goto L45;
  //  }
  run_L45_vu2c();

  // lq.xyzw vf28, 749(vi00)    |  nop                            373
  lq_buffer(Mask::xyzw, vu.vf28, 749);
  // lq.xyzw vf29, 750(vi00)    |  nop                            374
  lq_buffer(Mask::xyzw, vu.vf29, 750);
  // lq.xyzw vf30, 751(vi00)    |  nop                            375
  lq_buffer(Mask::xyzw, vu.vf30, 751);
  // lq.xyzw vf24, 752(vi00)    |  nop                            376
  lq_buffer(Mask::xyzw, vu.vf24, 752);
  // lq.xyzw vf25, 753(vi00)    |  nop                            377
  lq_buffer(Mask::xyzw, vu.vf25, 753);
  // lq.xyzw vf26, 754(vi00)    |  nop                            378
  lq_buffer(Mask::xyzw, vu.vf26, 754);
  // lq.xyzw vf07, 740(vi00)    |  nop                            379
  lq_buffer(Mask::xyzw, vu.vf07, 740);
  // sq.xyzw vf28, 0(vi10)      |  nop                            380
  sq_buffer(Mask::xyzw, vu.vf28, vu.vi10);
  // sq.xyzw vf29, 1(vi10)      |  nop                            381
  sq_buffer(Mask::xyzw, vu.vf29, vu.vi10 + 1);
  // sq.xyzw vf30, 2(vi10)      |  nop                            382
  sq_buffer(Mask::xyzw, vu.vf30, vu.vi10 + 2);
  // sq.xyzw vf24, 3(vi10)      |  nop                            383
  sq_buffer(Mask::xyzw, vu.vf24, vu.vi10 + 3);
  // sq.xyzw vf25, 4(vi10)      |  nop                            384
  sq_buffer(Mask::xyzw, vu.vf25, vu.vi10 + 4);
  // sq.xyzw vf26, 5(vi10)      |  nop                            385
  sq_buffer(Mask::xyzw, vu.vf26, vu.vi10 + 5);
  // iaddiu vi06, vi05, 0x4000  |  nop                            386
  vu.vi06 = vu.vi05 + 0x4000; /* 16384 */
  // BRANCH!
  // bal vi13, L43              |  nop                            387
  // ASSERT(false);
  // iaddiu vi06, vi06, 0x4000  |  nop                            388
  vu.vi06 = vu.vi06 + 0x4000; /* 16384 */
                              //  if (bc) {
                              //    goto L43;
                              //  }
  run_L43_vu2c();

L25:
  // nop                        |  nop :e                         389

  // nop                        |  nop                            390

  return;
}

void OceanMid::run_L26_vu2c() {
  bool bc = false;
  u32 cf = 0;
  // L26:
  // ilw.x vi05, 757(vi07)      |  nop                            391
  ilw_buffer(Mask::x, vu.vi05, vu.vi07 + 757);
  // ilw.y vi04, 757(vi07)      |  nop                            392
  ilw_buffer(Mask::y, vu.vi04, vu.vi07 + 757);
  // iaddi vi03, vi00, 0x0      |  nop                            393
  vu.vi03 = 0;
  // iadd vi04, vi04, vi02      |  nop                            394
  vu.vi04 = vu.vi04 + vu.vi02;
  // iaddi vi06, vi00, 0x8      |  nop                            395
  vu.vi06 = 8;
  // lq.xyzw vf28, 236(vi05)    |  nop                            396
  lq_buffer(Mask::xyzw, vu.vf28, vu.vi05 + 236);
  // lq.xyzw vf29, 245(vi05)    |  mulax.xyzw ACC, vf12, vf28     397
  vu.acc.mula(Mask::xyzw, vu.vf12, vu.vf28.x());
  lq_buffer(Mask::xyzw, vu.vf29, vu.vi05 + 245);
  // iaddi vi05, vi05, 0x1      |  madday.xyzw ACC, vf13, vf28    398
  vu.acc.madda(Mask::xyzw, vu.vf13, vu.vf28.y());
  vu.vi05 = vu.vi05 + 1;
  // fcset 0x0                  |  maddaz.xyzw ACC, vf14, vf28    399
  vu.acc.madda(Mask::xyzw, vu.vf14, vu.vf28.z());
  cf = 0x0;

  // nop                        |  maddw.xyzw vf30, vf15, vf00    400
  vu.acc.madd(Mask::xyzw, vu.vf30, vu.vf15, vu.vf00.w());
  // div Q, vf03.x, vf30.w      |  mulax.xyzw ACC, vf12, vf29     401
  vu.acc.mula(Mask::xyzw, vu.vf12, vu.vf29.x());
  vu.Q = vu.vf03.x() / vu.vf30.w();
  // lq.xyzw vf28, 236(vi05)    |  madday.xyzw ACC, vf13, vf29    402
  vu.acc.madda(Mask::xyzw, vu.vf13, vu.vf29.y());
  lq_buffer(Mask::xyzw, vu.vf28, vu.vi05 + 236);
  // lq.xyzw vf20, 317(vi03)    |  maddaz.xyzw ACC, vf14, vf29    403
  vu.acc.madda(Mask::xyzw, vu.vf14, vu.vf29.z());
  lq_buffer(Mask::xyzw, vu.vf20, vu.vi03 + 317);
  // lq.xyzw vf22, 8(vi04)      |  maddw.xyzw vf31, vf15, vf00    404
  vu.acc.madd(Mask::xyzw, vu.vf31, vu.vf15, vu.vf00.w());
  lq_buffer(Mask::xyzw, vu.vf22, vu.vi04 + 8);
  // nop                        |  mul.xyzw vf18, vf30, vf01      405
  vu.vf18.mul(Mask::xyzw, vu.vf30, vu.vf01);
  // waitq                      |  mulaw.w ACC, vf30, vf00        406
  vu.acc.mula(Mask::w, vu.vf30, vu.vf00.w());
  // nop                        |  mula.xyz ACC, vf30, Q          407
  vu.acc.mula(Mask::xyz, vu.vf30, vu.Q);
  // nop                        |  maddw.xyzw vf16, vf02, vf00    408
  vu.acc.madd(Mask::xyzw, vu.vf16, vu.vf02, vu.vf00.w());
  // nop                        |  clipw.xyz vf18, vf18           409
  cf = clip(vu.vf18, vu.vf18.w(), cf);
  // nop                        |  mul.xyzw vf19, vf31, vf01      410
  vu.vf19.mul(Mask::xyzw, vu.vf31, vu.vf01);
  // div Q, vf03.x, vf31.w      |  mul.xyzw vf20, vf20, Q         411
  vu.vf20.mul(Mask::xyzw, vu.vf20, vu.Q);
  vu.Q = vu.vf03.x() / vu.vf31.w();
  // nop                        |  mulax.xyzw ACC, vf12, vf28     412
  vu.acc.mula(Mask::xyzw, vu.vf12, vu.vf28.x());
  // nop                        |  madday.xyzw ACC, vf13, vf28    413
  vu.acc.madda(Mask::xyzw, vu.vf13, vu.vf28.y());
  // iaddi vi13, vi00, 0x0      |  clipw.xyz vf19, vf19           414
  cf = clip(vu.vf19, vu.vf19.w(), cf);
  vu.vi13 = 0;
  // iaddi vi12, vi00, 0x1      |  maxy.w vf16, vf16, vf03        415
  vu.vf16.max(Mask::w, vu.vf16, vu.vf03.y());
  vu.vi12 = 1;
  // lq.xyzw vf29, 245(vi05)    |  maddaz.xyzw ACC, vf14, vf28    416
  vu.acc.madda(Mask::xyzw, vu.vf14, vu.vf28.z());
  lq_buffer(Mask::xyzw, vu.vf29, vu.vi05 + 245);
  // iaddi vi01, vi00, 0x0      |  nop                            417
  vu.vi01 = 0;
  // BRANCH!
  // b L29                      |  maddw.xyzw vf30, vf15, vf00    418
  vu.acc.madd(Mask::xyzw, vu.vf30, vu.vf15, vu.vf00.w());
  bc = true;
  // iaddi vi05, vi05, 0x1      |  miniz.w vf16, vf16, vf03       419
  vu.vf16.mini(Mask::w, vu.vf16, vu.vf03.z());
  vu.vi05 = vu.vi05 + 1;
  if (bc) {
    goto L29;
  }

L27:
  // iand vi13, vi10, vi12      |  nop                            420
  vu.vi13 = vu.vi10 & vu.vi12;
  // BRANCH!
  // ibeq vi00, vi01, L28       |  mulaw.w ACC, vf30, vf00        421
  vu.acc.mula(Mask::w, vu.vf30, vu.vf00.w());
  bc = (vu.vi01 == 0);
  // lq.xyzw vf20, 317(vi03)    |  mula.xyz ACC, vf30, Q          422
  vu.acc.mula(Mask::xyz, vu.vf30, vu.Q);
  lq_buffer(Mask::xyzw, vu.vf20, vu.vi03 + 317);
  if (bc) {
    goto L28;
  }

  // nop                        |  addw.w vf17, vf17, vf03        423
  vu.vf17.add(Mask::w, vu.vf17, vu.vf03.w());
L28:
  // lq.xyzw vf22, 8(vi04)      |  maddw.xyzw vf16, vf02, vf00    424
  vu.acc.madd(Mask::xyzw, vu.vf16, vu.vf02, vu.vf00.w());
  lq_buffer(Mask::xyzw, vu.vf22, vu.vi04 + 8);
  // fcand vi01, 0x3ffff        |  mul.xyzw vf19, vf31, vf01      425
  vu.vf19.mul(Mask::xyzw, vu.vf31, vu.vf01);
  fcand(vu.vi01, 0x3ffff, cf);

  // div Q, vf03.x, vf31.w      |  mul.xyzw vf20, vf20, Q         426
  vu.vf20.mul(Mask::xyzw, vu.vf20, vu.Q);
  vu.Q = vu.vf03.x() / vu.vf31.w();
  // ior vi01, vi01, vi13       |  ftoi4.xyzw vf17, vf17          427
  vu.vf17.ftoi4(Mask::xyzw, vu.vf17);
  vu.vi01 = vu.vi01 | vu.vi13;
  // iadd vi12, vi12, vi12      |  maxy.w vf16, vf16, vf03        428
  vu.vf16.max(Mask::w, vu.vf16, vu.vf03.y());
  vu.vi12 = vu.vi12 + vu.vi12;
  // sq.xyzw vf21, 3(vi08)      |  mulax.xyzw ACC, vf12, vf28     429
  vu.acc.mula(Mask::xyzw, vu.vf12, vu.vf28.x());
  sq_buffer(Mask::xyzw, vu.vf21, vu.vi08 + 3);
  // sq.xyzw vf23, 4(vi08)      |  madday.xyzw ACC, vf13, vf28    430
  vu.acc.madda(Mask::xyzw, vu.vf13, vu.vf28.y());
  sq_buffer(Mask::xyzw, vu.vf23, vu.vi08 + 4);
  // sq.xyzw vf17, 5(vi08)      |  clipw.xyz vf19, vf19           431
  cf = clip(vu.vf19, vu.vf19.w(), cf);
  sq_buffer(Mask::xyzw, vu.vf17, vu.vi08 + 5);
  // lq.xyzw vf29, 245(vi05)    |  miniz.w vf16, vf16, vf03       432
  vu.vf16.mini(Mask::w, vu.vf16, vu.vf03.z());
  lq_buffer(Mask::xyzw, vu.vf29, vu.vi05 + 245);
  // iaddi vi08, vi08, 0x6      |  maddaz.xyzw ACC, vf14, vf28    433
  vu.acc.madda(Mask::xyzw, vu.vf14, vu.vf28.z());
  vu.vi08 = vu.vi08 + 6;
  // iaddi vi05, vi05, 0x1      |  maddw.xyzw vf30, vf15, vf00    434
  vu.acc.madd(Mask::xyzw, vu.vf30, vu.vf15, vu.vf00.w());
  vu.vi05 = vu.vi05 + 1;
L29:
  // BRANCH!
  // ibeq vi00, vi01, L30       |  mulaw.w ACC, vf31, vf00        435
  vu.acc.mula(Mask::w, vu.vf31, vu.vf00.w());
  bc = (vu.vi01 == 0);
  // lq.xyzw vf21, 318(vi03)    |  mula.xyz ACC, vf31, Q          436
  vu.acc.mula(Mask::xyz, vu.vf31, vu.Q);
  lq_buffer(Mask::xyzw, vu.vf21, vu.vi03 + 318);
  if (bc) {
    goto L30;
  }

  // nop                        |  addw.w vf16, vf16, vf03        437
  vu.vf16.add(Mask::w, vu.vf16, vu.vf03.w());
L30:
  // lq.xyzw vf23, 20(vi04)     |  maddw.xyzw vf17, vf02, vf00    438
  vu.acc.madd(Mask::xyzw, vu.vf17, vu.vf02, vu.vf00.w());
  lq_buffer(Mask::xyzw, vu.vf23, vu.vi04 + 20);
  // fcand vi01, 0x3ffff        |  mul.xyzw vf18, vf30, vf01      439
  vu.vf18.mul(Mask::xyzw, vu.vf30, vu.vf01);
  fcand(vu.vi01, 0x3ffff, cf);

  // div Q, vf03.x, vf30.w      |  mul.xyzw vf21, vf21, Q         440
  vu.vf21.mul(Mask::xyzw, vu.vf21, vu.Q);
  vu.Q = vu.vf03.x() / vu.vf30.w();
  // iaddi vi03, vi03, 0x2      |  ftoi4.xyzw vf16, vf16          441
  vu.vf16.ftoi4(Mask::xyzw, vu.vf16);
  vu.vi03 = vu.vi03 + 2;
  // ior vi01, vi01, vi13       |  nop                            442
  vu.vi01 = vu.vi01 | vu.vi13;
  // iaddi vi04, vi04, 0x1      |  maxy.w vf17, vf17, vf03        443
  vu.vf17.max(Mask::w, vu.vf17, vu.vf03.y());
  vu.vi04 = vu.vi04 + 1;
  // sq.xyzw vf20, 0(vi08)      |  mulax.xyzw ACC, vf12, vf29     444
  vu.acc.mula(Mask::xyzw, vu.vf12, vu.vf29.x());
  sq_buffer(Mask::xyzw, vu.vf20, vu.vi08);
  // sq.xyzw vf22, 1(vi08)      |  madday.xyzw ACC, vf13, vf29    445
  vu.acc.madda(Mask::xyzw, vu.vf13, vu.vf29.y());
  sq_buffer(Mask::xyzw, vu.vf22, vu.vi08 + 1);
  // sq.xyzw vf16, 2(vi08)      |  clipw.xyz vf18, vf18           446
  cf = clip(vu.vf18, vu.vf18.w(), cf);
  sq_buffer(Mask::xyzw, vu.vf16, vu.vi08 + 2);
  // lq.xyzw vf28, 236(vi05)    |  miniz.w vf17, vf17, vf03       447
  vu.vf17.mini(Mask::w, vu.vf17, vu.vf03.z());
  lq_buffer(Mask::xyzw, vu.vf28, vu.vi05 + 236);
  // BRANCH!
  // ibgtz vi06, L27            |  maddaz.xyzw ACC, vf14, vf29    448
  vu.acc.madda(Mask::xyzw, vu.vf14, vu.vf29.z());
  bc = ((s16)vu.vi06) > 0;
  // iaddi vi06, vi06, -0x1     |  maddw.xyzw vf31, vf15, vf00    449
  vu.acc.madd(Mask::xyzw, vu.vf31, vu.vf15, vu.vf00.w());
  vu.vi06 = vu.vi06 + -1;
  if (bc) {
    goto L27;
  }

  // BRANCH!
  // ibeq vi00, vi01, L31       |  nop                            450
  bc = (vu.vi01 == 0);
  // nop                        |  nop                            451

  if (bc) {
    goto L31;
  }

  // nop                        |  addw.w vf17, vf17, vf03        452
  vu.vf17.add(Mask::w, vu.vf17, vu.vf03.w());
L31:
  // nop                        |  ftoi4.xyzw vf17, vf17          453
  vu.vf17.ftoi4(Mask::xyzw, vu.vf17);
  // vu.vf17.fill(0);
  //  sq.xyzw vf21, 3(vi08)      |  nop                            454
  sq_buffer(Mask::xyzw, vu.vf21, vu.vi08 + 3);
  // sq.xyzw vf23, 4(vi08)      |  nop                            455
  sq_buffer(Mask::xyzw, vu.vf23, vu.vi08 + 4);
  // sq.xyzw vf17, 5(vi08)      |  nop                            456
  sq_buffer(Mask::xyzw, vu.vf17, vu.vi08 + 5);
  // jr vi15                    |  nop                            457
  return;
  // nop                        |  nop                            458
}

/*!
 * packet generation for plain envmapped ocean
 */
void OceanMid::run_L32_vu2c() {
  bool bc = false;
  u32 cf = 0;
  // ilw.x vi05, 757(vi07)      |  nop                            459
  ilw_buffer(Mask::x, vu.vi05, vu.vi07 + 757);
  // ilw.y vi04, 757(vi07)      |  nop                            460
  ilw_buffer(Mask::y, vu.vi04, vu.vi07 + 757);
  // iaddi vi03, vi00, 0x0      |  nop                            461
  vu.vi03 = 0;
  // iadd vi04, vi04, vi02      |  nop                            462
  vu.vi04 = vu.vi04 + vu.vi02;
  // iaddi vi06, vi00, 0x8      |  nop                            463
  vu.vi06 = 8;
  // lq.xyzw vf28, 236(vi05)    |  nop                            464
  lq_buffer(Mask::xyzw, vu.vf28, vu.vi05 + 236);
  // lq.xyzw vf29, 245(vi05)    |  mulax.xyzw ACC, vf12, vf28     465
  vu.acc.mula(Mask::xyzw, vu.vf12, vu.vf28.x());
  lq_buffer(Mask::xyzw, vu.vf29, vu.vi05 + 245);
  // iaddi vi05, vi05, 0x1      |  madday.xyzw ACC, vf13, vf28    466
  vu.acc.madda(Mask::xyzw, vu.vf13, vu.vf28.y());
  vu.vi05 = vu.vi05 + 1;
  // fcset 0x0                  |  maddaz.xyzw ACC, vf14, vf28    467
  vu.acc.madda(Mask::xyzw, vu.vf14, vu.vf28.z());
  cf = 0x0;

  // nop                        |  maddw.xyzw vf30, vf15, vf00    468
  vu.acc.madd(Mask::xyzw, vu.vf30, vu.vf15, vu.vf00.w());
  // nop                        |  mulax.xyzw ACC, vf08, vf28     469
  vu.acc.mula(Mask::xyzw, vu.vf08, vu.vf28.x());
  // nop                        |  madday.xyzw ACC, vf09, vf28    470
  vu.acc.madda(Mask::xyzw, vu.vf09, vu.vf28.y());
  // nop                        |  maddaz.xyzw ACC, vf10, vf28    471
  vu.acc.madda(Mask::xyzw, vu.vf10, vu.vf28.z());
  // nop                        |  maddw.xyzw vf26, vf11, vf00    472
  vu.acc.madd(Mask::xyzw, vu.vf26, vu.vf11, vu.vf00.w());
  // lq.xyzw vf20, 317(vi03)    |  mulax.xyzw ACC, vf12, vf29     473
  vu.acc.mula(Mask::xyzw, vu.vf12, vu.vf29.x());
  lq_buffer(Mask::xyzw, vu.vf20, vu.vi03 + 317);
  // lq.xyzw vf22, 8(vi04)      |  madday.xyzw ACC, vf13, vf29    474
  vu.acc.madda(Mask::xyzw, vu.vf13, vu.vf29.y());
  lq_buffer(Mask::xyzw, vu.vf22, vu.vi04 + 8);
  // div Q, vf03.x, vf30.w      |  maddaz.xyzw ACC, vf14, vf29    475
  vu.acc.madda(Mask::xyzw, vu.vf14, vu.vf29.z());
  vu.Q = vu.vf03.x() / vu.vf30.w();
  // erleng.xyz P, vf26         |  maddw.xyzw vf31, vf15, vf00    476
  vu.acc.madd(Mask::xyzw, vu.vf31, vu.vf15, vu.vf00.w());
  vu.P = erleng(vu.vf26);
  // nop                        |  mulax.xyzw ACC, vf08, vf29     477
  vu.acc.mula(Mask::xyzw, vu.vf08, vu.vf29.x());
  // nop                        |  madday.xyzw ACC, vf09, vf29    478
  vu.acc.madda(Mask::xyzw, vu.vf09, vu.vf29.y());
  // lq.xyzw vf28, 236(vi05)    |  maddaz.xyzw ACC, vf10, vf29    479
  vu.acc.madda(Mask::xyzw, vu.vf10, vu.vf29.z());
  lq_buffer(Mask::xyzw, vu.vf28, vu.vi05 + 236);
  // lq.xyzw vf29, 245(vi05)    |  maddw.xyzw vf27, vf11, vf00    480
  vu.acc.madd(Mask::xyzw, vu.vf27, vu.vf11, vu.vf00.w());
  lq_buffer(Mask::xyzw, vu.vf29, vu.vi05 + 245);
  // nop                        |  mul.xyzw vf18, vf30, vf01      481
  vu.vf18.mul(Mask::xyzw, vu.vf30, vu.vf01);
  // nop                        |  mul.xyzw vf19, vf31, vf01      482
  vu.vf19.mul(Mask::xyzw, vu.vf31, vu.vf01);
  // nop                        |  mulaw.w ACC, vf30, vf00        483
  vu.acc.mula(Mask::w, vu.vf30, vu.vf00.w());
  // nop                        |  mula.xyz ACC, vf30, Q          484
  vu.acc.mula(Mask::xyz, vu.vf30, vu.Q);
  // nop                        |  maddw.xyzw vf16, vf02, vf00    485
  vu.acc.madd(Mask::xyzw, vu.vf16, vu.vf02, vu.vf00.w());
  // div Q, vf03.x, vf31.w      |  mul.xyzw vf20, vf20, Q         486
  vu.vf20.mul(Mask::xyzw, vu.vf20, vu.Q);
  vu.Q = vu.vf03.x() / vu.vf31.w();
  // nop                        |  addz.y vf26, vf00, vf26        487
  vu.vf26.add(Mask::y, vu.vf00, vu.vf26.z());
  // waitp                      |  maxy.w vf16, vf16, vf03        488
  vu.vf16.max(Mask::w, vu.vf16, vu.vf03.y());  // fog amx
  // mfp.w vf26, P              |  mulax.xyzw ACC, vf12, vf28     489
  vu.acc.mula(Mask::xyzw, vu.vf12, vu.vf28.x());
  vu.vf26.mfp(Mask::w, vu.P);
  // erleng.xyz P, vf27         |  madday.xyzw ACC, vf13, vf28    490
  vu.acc.madda(Mask::xyzw, vu.vf13, vu.vf28.y());
  vu.P = erleng(vu.vf27);
  // iaddi vi12, vi00, 0x1      |  maddaz.xyzw ACC, vf14, vf28    491
  vu.acc.madda(Mask::xyzw, vu.vf14, vu.vf28.z());
  vu.vi12 = 1;
  // iaddi vi01, vi00, 0x0      |  maddw.xyzw vf30, vf15, vf00    492
  vu.acc.madd(Mask::xyzw, vu.vf30, vu.vf15, vu.vf00.w());
  vu.vi01 = 0;
  // iaddi vi13, vi00, 0x0      |  mulw.xy vf24, vf26, vf26       493
  vu.vf24.mul(Mask::xy, vu.vf26, vu.vf26.w());
  vu.vi13 = 0;
  // iaddi vi11, vi00, 0x0      |  miniz.w vf16, vf16, vf03       494
  vu.vf16.mini(Mask::w, vu.vf16, vu.vf03.z());
  vu.vi11 = 0;
  // iaddi vi14, vi00, 0x0      |  addz.y vf27, vf00, vf27        495
  vu.vf27.add(Mask::y, vu.vf00, vu.vf27.z());
  vu.vi14 = 0;
  // nop                        |  mulax.xyzw ACC, vf08, vf28     496
  vu.acc.mula(Mask::xyzw, vu.vf08, vu.vf28.x());
  // nop                        |  madday.xyzw ACC, vf09, vf28    497
  vu.acc.madda(Mask::xyzw, vu.vf09, vu.vf28.y());
  // nop                        |  maddaz.xyzw ACC, vf10, vf28    498
  vu.acc.madda(Mask::xyzw, vu.vf10, vu.vf28.z());
  // nop                        |  maddw.xyzw vf26, vf11, vf00    499
  vu.acc.madd(Mask::xyzw, vu.vf26, vu.vf11, vu.vf00.w());
  // nop                        |  clipw.xyz vf18, vf18           500
  cf = clip(vu.vf18, vu.vf18.w(), cf);
  // waitp                      |  clipw.xyz vf19, vf19           501
  cf = clip(vu.vf19, vu.vf19.w(), cf);
  // BRANCH!
  // b L35                      |  mula.xyzw ACC, vf24, vf05      502
  vu.acc.mula(Mask::xyzw, vu.vf24, vu.vf05);
  bc = true;
  // iaddi vi05, vi05, 0x1      |  maddw.xyzw vf24, vf06, vf00    503
  vu.acc.madd(Mask::xyzw, vu.vf24, vu.vf06, vu.vf00.w());
  vu.vi05 = vu.vi05 + 1;
  if (bc) {
    goto L35;
  }

L33:
  // BRANCH!
  // ibeq vi00, vi01, L34       |  mulaw.w ACC, vf30, vf00        504
  vu.acc.mula(Mask::w, vu.vf30, vu.vf00.w());
  bc = (vu.vi01 == 0);
  // lq.xyzw vf20, 317(vi03)    |  mula.xyz ACC, vf30, Q          505
  vu.acc.mula(Mask::xyz, vu.vf30, vu.Q);
  lq_buffer(Mask::xyzw, vu.vf20, vu.vi03 + 317);
  if (bc) {
    goto L34;
  }

  // BRANCH!
  // ibne vi00, vi13, L34       |  addw.w vf17, vf17, vf03        506
  vu.vf17.add(Mask::w, vu.vf17, vu.vf03.w());
  bc = (vu.vi13 != 0);
  // fcor vi01, 0x7df7ff        |  nop                            507
  fcor(vu.vi01, 0x7df7ff, cf);

  if (bc) {
    goto L34;
  }

  // isw.x vi12, 775(vi14)      |  nop                            508
  isw_buffer(Mask::x, vu.vi12, vu.vi14 + 775);
  // BRANCH!
  // ibne vi00, vi01, L34       |  nop                            509
  bc = (vu.vi01 != 0);
  // fcor vi01, 0xdf7dff        |  nop                            510
  fcor(vu.vi01, 0xdf7dff, cf);

  if (bc) {
    goto L34;
  }

  // isw.y vi05, 775(vi14)      |  nop                            511
  isw_buffer(Mask::y, vu.vi05, vu.vi14 + 775);
  // BRANCH!
  // ibne vi00, vi01, L34       |  nop                            512
  bc = (vu.vi01 != 0);
  // fcor vi01, 0xefbeff        |  nop                            513
  fcor(vu.vi01, 0xefbeff, cf);
  if (bc) {
    goto L34;
  }

  // ilw.z vi11, 757(vi07)      |  nop                            514
  ilw_buffer(Mask::z, vu.vi11, vu.vi07 + 757);
  // BRANCH!
  // ibne vi00, vi01, L34       |  nop                            515
  bc = (vu.vi01 != 0);
  // fcor vi01, 0xf7df7f        |  nop                            516
  fcor(vu.vi01, 0xf7df7f, cf);

  if (bc) {
    goto L34;
  }

  // isw.z vi04, 775(vi14)      |  nop                            517
  isw_buffer(Mask::z, vu.vi04, vu.vi14 + 775);
  // BRANCH!
  // ibne vi00, vi01, L34       |  nop                            518
  bc = (vu.vi01 != 0);
  // fcor vi01, 0xfbefbf        |  nop                            519
  fcor(vu.vi01, 0xfbefbf, cf);

  if (bc) {
    goto L34;
  }

  // isub vi11, vi05, vi11      |  nop                            520
  vu.vi11 = vu.vi05 - vu.vi11;
  // BRANCH!
  // ibne vi00, vi01, L34       |  nop                            521
  bc = (vu.vi01 != 0);
  // nop                        |  nop                            522

  if (bc) {
    goto L34;
  }

  // BRANCH!
  // ibltz vi11, L34            |  nop                            523
  bc = ((s16)vu.vi11) < 0;
  // nop                        |  nop                            524

  if (bc) {
    goto L34;
  }

  // iaddi vi14, vi14, 0x1      |  nop                            525
  vu.vi14 = vu.vi14 + 1;
L34:
  // lq.xyzw vf22, 8(vi04)      |  maddw.xyzw vf16, vf02, vf00    526
  vu.acc.madd(Mask::xyzw, vu.vf16, vu.vf02, vu.vf00.w());
  lq_buffer(Mask::xyzw, vu.vf22, vu.vi04 + 8);
  // div Q, vf03.x, vf31.w      |  mul.xyzw vf20, vf20, Q         527
  vu.vf20.mul(Mask::xyzw, vu.vf20, vu.Q);
  vu.Q = vu.vf03.x() / vu.vf31.w();
  // fcand vi01, 0x3ffff        |  mul.xyzw vf19, vf31, vf01      528
  vu.vf19.mul(Mask::xyzw, vu.vf31, vu.vf01);
  fcand(vu.vi01, 0x3ffff, cf);

  // waitp                      |  ftoi4.xyzw vf17, vf17          529
  vu.vf17.ftoi4(Mask::xyzw, vu.vf17);
  // vu.vf17.fill(0);
  // mfp.w vf26, P              |  maxy.w vf16, vf16, vf03        530
  vu.vf16.max(Mask::w, vu.vf16, vu.vf03.y());
  vu.vf26.mfp(Mask::w, vu.P);
  // erleng.xyz P, vf27         |  clipw.xyz vf19, vf19           531
  cf = clip(vu.vf19, vu.vf19.w(), cf);
  vu.P = erleng(vu.vf27);
  // iand vi13, vi10, vi12      |  addz.y vf27, vf00, vf27        532
  vu.vf27.add(Mask::y, vu.vf00, vu.vf27.z());
  vu.vi13 = vu.vi10 & vu.vi12;
  // sq.xyzw vf21, 3(vi08)      |  mulz.xyzw vf25, vf25, vf21     533
  vu.vf25.z() = 1;  // TODO hack
  vu.vf25.mul(Mask::xyzw, vu.vf25, vu.vf21.z());
  sq_buffer(Mask::xyzw, vu.vf21, vu.vi08 + 3);
  // sq.xyzw vf23, 4(vi08)      |  mulw.xy vf24, vf26, vf26       534
  vu.vf24.mul(Mask::xy, vu.vf26, vu.vf26.w());
  sq_buffer(Mask::xyzw, vu.vf23, vu.vi08 + 4);
  // sq.xyzw vf17, 5(vi08)      |  mulax.xyzw ACC, vf12, vf28     535
  vu.acc.mula(Mask::xyzw, vu.vf12, vu.vf28.x());
  sq_buffer(Mask::xyzw, vu.vf17, vu.vi08 + 5);
  // sq.xyzw vf17, 66(vi08)     |  madday.xyzw ACC, vf13, vf28    536
  vu.acc.madda(Mask::xyzw, vu.vf13, vu.vf28.y());
  sq_buffer(Mask::xyzw, vu.vf17, vu.vi08 + 66);
  // sq.xyzw vf25, 64(vi08)     |  maddaz.xyzw ACC, vf14, vf28    537
  vu.acc.madda(Mask::xyzw, vu.vf14, vu.vf28.z());
  sq_buffer(Mask::xyzw, vu.vf25, vu.vi08 + 64);
  // iaddi vi08, vi08, 0x6      |  maddw.xyzw vf30, vf15, vf00    538
  vu.acc.madd(Mask::xyzw, vu.vf30, vu.vf15, vu.vf00.w());
  vu.vi08 = vu.vi08 + 6;
  // iadd vi12, vi12, vi12      |  mulax.xyzw ACC, vf08, vf28     539
  vu.acc.mula(Mask::xyzw, vu.vf08, vu.vf28.x());
  vu.vi12 = vu.vi12 + vu.vi12;
  // ior vi01, vi01, vi13       |  madday.xyzw ACC, vf09, vf28    540
  vu.acc.madda(Mask::xyzw, vu.vf09, vu.vf28.y());
  vu.vi01 = vu.vi01 | vu.vi13;
  // nop                        |  maddaz.xyzw ACC, vf10, vf28    541
  vu.acc.madda(Mask::xyzw, vu.vf10, vu.vf28.z());
  // nop                        |  maddw.xyzw vf26, vf11, vf00    542
  vu.acc.madd(Mask::xyzw, vu.vf26, vu.vf11, vu.vf00.w());
  // lq.xyzw vf29, 245(vi05)    |  miniz.w vf16, vf16, vf03       543
  vu.vf16.mini(Mask::w, vu.vf16, vu.vf03.z());
  lq_buffer(Mask::xyzw, vu.vf29, vu.vi05 + 245);
  // iaddi vi05, vi05, 0x1      |  mula.xyzw ACC, vf24, vf05      544
  vu.acc.mula(Mask::xyzw, vu.vf24, vu.vf05);
  vu.vi05 = vu.vi05 + 1;
  // nop                        |  maddw.xyzw vf24, vf06, vf00    545
  vu.acc.madd(Mask::xyzw, vu.vf24, vu.vf06, vu.vf00.w());
L35:
  // BRANCH!
  // ibeq vi00, vi01, L36       |  mulaw.w ACC, vf31, vf00        546
  vu.acc.mula(Mask::w, vu.vf31, vu.vf00.w());
  bc = (vu.vi01 == 0);
  // lq.xyzw vf21, 318(vi03)    |  mula.xyz ACC, vf31, Q          547
  vu.acc.mula(Mask::xyz, vu.vf31, vu.Q);
  lq_buffer(Mask::xyzw, vu.vf21, vu.vi03 + 318);
  if (bc) {
    goto L36;
  }

  // BRANCH!
  // ibne vi00, vi13, L36       |  addw.w vf16, vf16, vf03        548
  vu.vf16.add(Mask::w, vu.vf16, vu.vf03.w());
  bc = (vu.vi13 != 0);
  // fcor vi01, 0x7df7ff        |  nop                            549
  fcor(vu.vi01, 0x7df7ff, cf);

  if (bc) {
    goto L36;
  }

  // isw.x vi00, 775(vi14)      |  nop                            550
  isw_buffer(Mask::x, 0, vu.vi14 + 775);
  // BRANCH!
  // ibne vi00, vi01, L36       |  nop                            551
  bc = (vu.vi01 != 0);
  // fcor vi01, 0xdf7dff        |  nop                            552
  fcor(vu.vi01, 0xdf7dff, cf);

  if (bc) {
    goto L36;
  }

  // isw.y vi05, 775(vi14)      |  nop                            553
  isw_buffer(Mask::y, vu.vi05, vu.vi14 + 775);
  // BRANCH!
  // ibne vi00, vi01, L36       |  nop                            554
  bc = (vu.vi01 != 0);
  // fcor vi01, 0xefbeff        |  nop                            555
  fcor(vu.vi01, 0xefbeff, cf);

  if (bc) {
    goto L36;
  }

  // isw.z vi04, 775(vi14)      |  nop                            556
  isw_buffer(Mask::z, vu.vi04, vu.vi14 + 775);
  // BRANCH!
  // ibne vi00, vi01, L36       |  nop                            557
  bc = (vu.vi01 != 0);
  // fcor vi01, 0xf7df7f        |  nop                            558
  fcor(vu.vi01, 0xf7df7f, cf);

  if (bc) {
    goto L36;
  }

  // nop                        |  nop                            559

  // BRANCH!
  // ibne vi00, vi01, L36       |  nop                            560
  bc = (vu.vi01 != 0);
  // fcor vi01, 0xfbefbf        |  nop                            561
  fcor(vu.vi01, 0xfbefbf, cf);

  if (bc) {
    goto L36;
  }

  // nop                        |  nop                            562

  // BRANCH!
  // ibne vi00, vi01, L36       |  nop                            563
  bc = (vu.vi01 != 0);
  // nop                        |  nop                            564

  if (bc) {
    goto L36;
  }

  // iaddi vi14, vi14, 0x1      |  nop                            565
  vu.vi14 = vu.vi14 + 1;
L36:
  // lq.xyzw vf23, 20(vi04)     |  maddw.xyzw vf17, vf02, vf00    566
  vu.acc.madd(Mask::xyzw, vu.vf17, vu.vf02, vu.vf00.w());
  lq_buffer(Mask::xyzw, vu.vf23, vu.vi04 + 20);
  // div Q, vf03.x, vf30.w      |  mul.xyzw vf21, vf21, Q         567
  vu.vf21.mul(Mask::xyzw, vu.vf21, vu.Q);
  vu.Q = vu.vf03.x() / vu.vf30.w();
  // fcand vi01, 0x3ffff        |  mul.xyzw vf18, vf30, vf01      568
  vu.vf18.mul(Mask::xyzw, vu.vf30, vu.vf01);
  fcand(vu.vi01, 0x3ffff, cf);

  // waitp                      |  ftoi4.xyzw vf16, vf16          569
  vu.vf16.ftoi4(Mask::xyzw, vu.vf16);  // possible 1
  // vu.vf16.fill(0);
  // mfp.w vf27, P              |  maxy.w vf17, vf17, vf03        570
  vu.vf17.max(Mask::w, vu.vf17, vu.vf03.y());
  vu.vf27.mfp(Mask::w, vu.P);
  // erleng.xyz P, vf26         |  clipw.xyz vf18, vf18           571
  cf = clip(vu.vf18, vu.vf18.w(), cf);
  vu.P = erleng(vu.vf26);
  // nop                        |  addz.y vf26, vf00, vf26        572
  vu.vf26.add(Mask::y, vu.vf00, vu.vf26.z());
  // sq.xyzw vf20, 0(vi08)      |  mulz.xyzw vf24, vf24, vf20     573
  // todo hack
  vu.vf24.z() = 1;
  vu.vf24.mul(Mask::xyzw, vu.vf24, vu.vf20.z());
  sq_buffer(Mask::xyzw, vu.vf20, vu.vi08);
  // sq.xyzw vf22, 1(vi08)      |  mulw.xy vf25, vf27, vf27       574
  vu.vf25.mul(Mask::xy, vu.vf27, vu.vf27.w());
  sq_buffer(Mask::xyzw, vu.vf22, vu.vi08 + 1);
  // sq.xyzw vf16, 2(vi08)      |  mulax.xyzw ACC, vf12, vf29     575
  vu.acc.mula(Mask::xyzw, vu.vf12, vu.vf29.x());
  sq_buffer(Mask::xyzw, vu.vf16, vu.vi08 + 2);
  // sq.xyzw vf16, 63(vi08)     |  madday.xyzw ACC, vf13, vf29    576
  vu.acc.madda(Mask::xyzw, vu.vf13, vu.vf29.y());
  sq_buffer(Mask::xyzw, vu.vf16, vu.vi08 + 63);
  // sq.xyzw vf24, 61(vi08)     |  maddaz.xyzw ACC, vf14, vf29    577
  vu.acc.madda(Mask::xyzw, vu.vf14, vu.vf29.z());
  sq_buffer(Mask::xyzw, vu.vf24, vu.vi08 + 61);
  // iaddi vi04, vi04, 0x1      |  maddw.xyzw vf31, vf15, vf00    578
  vu.acc.madd(Mask::xyzw, vu.vf31, vu.vf15, vu.vf00.w());
  vu.vi04 = vu.vi04 + 1;
  // iaddi vi03, vi03, 0x2      |  mulax.xyzw ACC, vf08, vf29     579
  vu.acc.mula(Mask::xyzw, vu.vf08, vu.vf29.x());
  vu.vi03 = vu.vi03 + 2;
  // ior vi01, vi01, vi13       |  madday.xyzw ACC, vf09, vf29    580
  vu.acc.madda(Mask::xyzw, vu.vf09, vu.vf29.y());
  vu.vi01 = vu.vi01 | vu.vi13;
  // nop                        |  maddaz.xyzw ACC, vf10, vf29    581
  vu.acc.madda(Mask::xyzw, vu.vf10, vu.vf29.z());
  // nop                        |  maddw.xyzw vf27, vf11, vf00    582
  vu.acc.madd(Mask::xyzw, vu.vf27, vu.vf11, vu.vf00.w());
  // lq.xyzw vf28, 236(vi05)    |  miniz.w vf17, vf17, vf03       583
  vu.vf17.mini(Mask::w, vu.vf17, vu.vf03.z());
  lq_buffer(Mask::xyzw, vu.vf28, vu.vi05 + 236);
  // BRANCH!
  // ibgtz vi06, L33            |  mula.xyzw ACC, vf25, vf05      584
  vu.acc.mula(Mask::xyzw, vu.vf25, vu.vf05);
  bc = ((s16)vu.vi06) > 0;
  // iaddi vi06, vi06, -0x1     |  maddw.xyzw vf25, vf06, vf00    585
  vu.acc.madd(Mask::xyzw, vu.vf25, vu.vf06, vu.vf00.w());
  vu.vi06 = vu.vi06 + -1;
  if (bc) {
    goto L33;
  }

  // BRANCH!
  // ibeq vi00, vi01, L37       |  nop                            586
  bc = (vu.vi01 == 0);
  // nop                        |  nop                            587

  if (bc) {
    goto L37;
  }

  // BRANCH!
  // ibne vi00, vi13, L37       |  addw.w vf17, vf17, vf03        588
  vu.vf17.add(Mask::w, vu.vf17, vu.vf03.w());
  bc = (vu.vi13 != 0);
  // fcor vi01, 0x7df7ff        |  nop                            589
  fcor(vu.vi01, 0x7df7ff, cf);

  if (bc) {
    goto L37;
  }

  // isw.x vi12, 775(vi14)      |  nop                            590
  isw_buffer(Mask::x, vu.vi12, vu.vi14 + 775);
  // BRANCH!
  // ibne vi00, vi01, L37       |  nop                            591
  bc = (vu.vi01 != 0);
  // fcor vi01, 0xdf7dff        |  nop                            592
  fcor(vu.vi01, 0xdf7dff, cf);

  if (bc) {
    goto L37;
  }

  // isw.y vi05, 775(vi14)      |  nop                            593
  isw_buffer(Mask::y, vu.vi05, vu.vi14 + 775);
  // BRANCH!
  // ibne vi00, vi01, L37       |  nop                            594
  bc = (vu.vi01 != 0);
  // fcor vi01, 0xefbeff        |  nop                            595
  fcor(vu.vi01, 0xefbeff, cf);

  if (bc) {
    goto L37;
  }

  // isw.z vi04, 775(vi14)      |  nop                            596
  isw_buffer(Mask::z, vu.vi04, vu.vi14 + 775);
  // BRANCH!
  // ibne vi00, vi01, L37       |  nop                            597
  bc = (vu.vi01 != 0);
  // fcor vi01, 0xf7df7f        |  nop                            598
  fcor(vu.vi01, 0xf7df7f, cf);

  if (bc) {
    goto L37;
  }

  // nop                        |  nop                            599

  // BRANCH!
  // ibne vi00, vi01, L37       |  nop                            600
  bc = (vu.vi01 != 0);
  // fcor vi01, 0xfbefbf        |  nop                            601
  fcor(vu.vi01, 0xfbefbf, cf);

  if (bc) {
    goto L37;
  }

  // nop                        |  nop                            602

  // BRANCH!
  // ibne vi00, vi01, L37       |  nop                            603
  bc = (vu.vi01 != 0);
  // nop                        |  nop                            604

  if (bc) {
    goto L37;
  }

  // iaddi vi14, vi14, 0x1      |  nop                            605
  vu.vi14 = vu.vi14 + 1;
L37:
  // nop                        |  ftoi4.xyzw vf17, vf17          606
  vu.vf17.ftoi4(Mask::xyzw, vu.vf17);
  // vu.vf17.fill(0);
  // sq.xyzw vf21, 3(vi08)      |  mulz.xyzw vf25, vf25, vf21     607
  vu.vf25.mul(Mask::xyzw, vu.vf25, vu.vf21.z());
  sq_buffer(Mask::xyzw, vu.vf21, vu.vi08 + 3);
  // sq.xyzw vf23, 4(vi08)      |  nop                            608
  sq_buffer(Mask::xyzw, vu.vf23, vu.vi08 + 4);
  // sq.xyzw vf17, 5(vi08)      |  nop                            609
  sq_buffer(Mask::xyzw, vu.vf17, vu.vi08 + 5);
  // sq.xyzw vf17, 66(vi08)     |  nop                            610
  sq_buffer(Mask::xyzw, vu.vf17, vu.vi08 + 66);
  // sq.xyzw vf25, 64(vi08)     |  nop                            611
  sq_buffer(Mask::xyzw, vu.vf25, vu.vi08 + 64);
  // jr vi15                    |  nop                            612
  // nop                        |  nop                            613
}

void OceanMid::run_L38_vu2c() {
  bool bc;

  // lq.xyzw vf31, 734(vi00)    |  nop                            614
  lq_buffer(Mask::xyzw, vu.vf31, 734);
  // iaddiu vi10, vi00, 0x243   |  nop                            615
  vu.vi10 = 0x243; /* 579 */
L39:
  // iaddi vi14, vi14, -0x1     |  nop                            616
  vu.vi14 = vu.vi14 + -1;
  // iaddi vi08, vi10, 0x7      |  nop                            617
  vu.vi08 = vu.vi10 + 7;
  // ilw.x vi12, 775(vi14)      |  nop                            618
  ilw_buffer(Mask::x, vu.vi12, vu.vi14 + 775);
  // ilw.y vi05, 775(vi14)      |  nop                            619
  ilw_buffer(Mask::y, vu.vi05, vu.vi14 + 775);
  // ilw.z vi04, 775(vi14)      |  nop                            620
  ilw_buffer(Mask::z, vu.vi04, vu.vi14 + 775);
  // BRANCH!
  // ibne vi00, vi12, L40       |  nop                            621
  bc = (vu.vi12 != 0);
  // nop                        |  nop                            622

  if (bc) {
    goto L40;
  }

  // lq.xyzw vf28, 233(vi05)    |  nop                            623
  lq_buffer(Mask::xyzw, vu.vf28, vu.vi05 + 233);
  // lq.xyzw vf29, 242(vi05)    |  nop                            624
  lq_buffer(Mask::xyzw, vu.vf29, vu.vi05 + 242);
  // lq.xyzw vf30, 234(vi05)    |  nop                            625
  lq_buffer(Mask::xyzw, vu.vf30, vu.vi05 + 234);
  // lq.xyzw vf22, 7(vi04)      |  nop                            626
  lq_buffer(Mask::xyzw, vu.vf22, vu.vi04 + 7);
  // lq.xyzw vf23, 19(vi04)     |  mulax.xyzw ACC, vf08, vf28     627
  vu.acc.mula(Mask::xyzw, vu.vf08, vu.vf28.x());
  lq_buffer(Mask::xyzw, vu.vf23, vu.vi04 + 19);
  // lq.xyzw vf16, 8(vi04)      |  madday.xyzw ACC, vf09, vf28    628
  vu.acc.madda(Mask::xyzw, vu.vf09, vu.vf28.y());
  lq_buffer(Mask::xyzw, vu.vf16, vu.vi04 + 8);
  // lq.xyzw vf20, 317(vi00)    |  maddaz.xyzw ACC, vf10, vf28    629
  vu.acc.madda(Mask::xyzw, vu.vf10, vu.vf28.z());
  lq_buffer(Mask::xyzw, vu.vf20, 317);
  // lq.xyzw vf21, 318(vi00)    |  maddw.xyzw vf24, vf11, vf00    630
  vu.acc.madd(Mask::xyzw, vu.vf24, vu.vf11, vu.vf00.w());
  lq_buffer(Mask::xyzw, vu.vf21, 318);
  // BRANCH!
  // b L41                      |  mulax.xyzw ACC, vf12, vf28     631
  vu.acc.mula(Mask::xyzw, vu.vf12, vu.vf28.x());
  bc = true;
  // lq.xyzw vf07, 319(vi00)    |  madday.xyzw ACC, vf13, vf28    632
  vu.acc.madda(Mask::xyzw, vu.vf13, vu.vf28.y());
  lq_buffer(Mask::xyzw, vu.vf07, 319);
  if (bc) {
    goto L41;
  }

L40:
  // lq.xyzw vf28, 242(vi05)    |  nop                            633
  lq_buffer(Mask::xyzw, vu.vf28, vu.vi05 + 242);
  // lq.xyzw vf29, 234(vi05)    |  nop                            634
  lq_buffer(Mask::xyzw, vu.vf29, vu.vi05 + 234);
  // lq.xyzw vf30, 243(vi05)    |  nop                            635
  lq_buffer(Mask::xyzw, vu.vf30, vu.vi05 + 243);
  // lq.xyzw vf22, 18(vi04)     |  nop                            636
  lq_buffer(Mask::xyzw, vu.vf22, vu.vi04 + 18);
  // lq.xyzw vf23, 7(vi04)      |  mulax.xyzw ACC, vf08, vf28     637
  vu.acc.mula(Mask::xyzw, vu.vf08, vu.vf28.x());
  lq_buffer(Mask::xyzw, vu.vf23, vu.vi04 + 7);
  // lq.xyzw vf16, 19(vi04)     |  madday.xyzw ACC, vf09, vf28    638
  vu.acc.madda(Mask::xyzw, vu.vf09, vu.vf28.y());
  lq_buffer(Mask::xyzw, vu.vf16, vu.vi04 + 19);
  // lq.xyzw vf20, 318(vi00)    |  maddaz.xyzw ACC, vf10, vf28    639
  vu.acc.madda(Mask::xyzw, vu.vf10, vu.vf28.z());
  lq_buffer(Mask::xyzw, vu.vf20, 318);
  // lq.xyzw vf21, 319(vi00)    |  maddw.xyzw vf24, vf11, vf00    640
  vu.acc.madd(Mask::xyzw, vu.vf24, vu.vf11, vu.vf00.w());
  lq_buffer(Mask::xyzw, vu.vf21, 319);
  // nop                        |  mulax.xyzw ACC, vf12, vf28     641
  vu.acc.mula(Mask::xyzw, vu.vf12, vu.vf28.x());
  // lq.xyzw vf07, 320(vi00)    |  madday.xyzw ACC, vf13, vf28    642
  vu.acc.madda(Mask::xyzw, vu.vf13, vu.vf28.y());
  lq_buffer(Mask::xyzw, vu.vf07, 320);
L41:
  // nop                        |  maddaz.xyzw ACC, vf14, vf28    643
  vu.acc.madda(Mask::xyzw, vu.vf14, vu.vf28.z());
  // erleng.xyz P, vf24         |  maddw.xyzw vf28, vf15, vf00    644
  vu.acc.madd(Mask::xyzw, vu.vf28, vu.vf15, vu.vf00.w());
  vu.P = erleng(vu.vf24);
  // nop                        |  addz.y vf24, vf00, vf24        645
  vu.vf24.add(Mask::y, vu.vf00, vu.vf24.z());
  // nop                        |  itof0.xyzw vf22, vf22          646
  vu.vf22.itof0(Mask::xyzw, vu.vf22);
  // nop                        |  itof0.xyzw vf23, vf23          647
  vu.vf23.itof0(Mask::xyzw, vu.vf23);
  // nop                        |  itof0.xyzw vf16, vf16          648
  vu.vf16.itof0(Mask::xyzw, vu.vf16);
  // sq.xyzw vf20, 0(vi08)      |  mulax.xyzw ACC, vf08, vf29     649
  vu.acc.mula(Mask::xyzw, vu.vf08, vu.vf29.x());
  sq_buffer(Mask::xyzw, vu.vf20, vu.vi08);
  // sq.xyzw vf22, 1(vi08)      |  madday.xyzw ACC, vf09, vf29    650
  vu.acc.madda(Mask::xyzw, vu.vf09, vu.vf29.y());
  sq_buffer(Mask::xyzw, vu.vf22, vu.vi08 + 1);
  // sq.xyzw vf21, 3(vi08)      |  maddaz.xyzw ACC, vf10, vf29    651
  vu.acc.madda(Mask::xyzw, vu.vf10, vu.vf29.z());
  sq_buffer(Mask::xyzw, vu.vf21, vu.vi08 + 3);
  // sq.xyzw vf23, 4(vi08)      |  maddw.xyzw vf25, vf11, vf00    652
  vu.acc.madd(Mask::xyzw, vu.vf25, vu.vf11, vu.vf00.w());
  sq_buffer(Mask::xyzw, vu.vf23, vu.vi08 + 4);
  // sq.xyzw vf07, 6(vi08)      |  mulax.xyzw ACC, vf12, vf29     653
  vu.acc.mula(Mask::xyzw, vu.vf12, vu.vf29.x());
  sq_buffer(Mask::xyzw, vu.vf07, vu.vi08 + 6);
  // sq.xyzw vf16, 7(vi08)      |  madday.xyzw ACC, vf13, vf29    654
  vu.acc.madda(Mask::xyzw, vu.vf13, vu.vf29.y());
  sq_buffer(Mask::xyzw, vu.vf16, vu.vi08 + 7);
  // sq.xyzw vf20, 9(vi08)      |  maddaz.xyzw ACC, vf14, vf29    655
  vu.acc.madda(Mask::xyzw, vu.vf14, vu.vf29.z());
  sq_buffer(Mask::xyzw, vu.vf20, vu.vi08 + 9);
  // sq.xyzw vf22, 10(vi08)     |  maddw.xyzw vf29, vf15, vf00    656
  vu.acc.madd(Mask::xyzw, vu.vf29, vu.vf15, vu.vf00.w());
  sq_buffer(Mask::xyzw, vu.vf22, vu.vi08 + 10);
  // waitp                      |  mul.xyzw vf28, vf28, vf01      657
  vu.vf28.mul(Mask::xyzw, vu.vf28, vu.vf01);
  // mfp.w vf24, P              |  nop                            658
  vu.vf24.mfp(Mask::w, vu.P);
  // erleng.xyz P, vf25         |  nop                            659
  vu.P = erleng(vu.vf25);
  // nop                        |  addz.y vf25, vf00, vf25        660
  vu.vf25.add(Mask::y, vu.vf00, vu.vf25.z());
  // sq.xyzw vf28, 2(vi08)      |  mulax.xyzw ACC, vf08, vf30     661
  vu.acc.mula(Mask::xyzw, vu.vf08, vu.vf30.x());
  sq_buffer(Mask::xyzw, vu.vf28, vu.vi08 + 2);
  // sq.xyzw vf28, 11(vi08)     |  mulw.xy vf24, vf24, vf24       662
  vu.vf24.mul(Mask::xy, vu.vf24, vu.vf24.w());
  sq_buffer(Mask::xyzw, vu.vf28, vu.vi08 + 11);
  // sq.xyzw vf28, 772(vi00)    |  madday.xyzw ACC, vf09, vf30    663
  vu.acc.madda(Mask::xyzw, vu.vf09, vu.vf30.y());
  sq_buffer(Mask::xyzw, vu.vf28, 772);
  // nop                        |  maddaz.xyzw ACC, vf10, vf30    664
  vu.acc.madda(Mask::xyzw, vu.vf10, vu.vf30.z());
  // nop                        |  maddw.xyzw vf26, vf11, vf00    665
  vu.acc.madd(Mask::xyzw, vu.vf26, vu.vf11, vu.vf00.w());
  // nop                        |  mula.xyzw ACC, vf24, vf05      666
  vu.acc.mula(Mask::xyzw, vu.vf24, vu.vf05);
  // nop                        |  maddw.xyzw vf24, vf06, vf00    667
  vu.acc.madd(Mask::xyzw, vu.vf24, vu.vf06, vu.vf00.w());
  // nop                        |  mulax.xyzw ACC, vf12, vf30     668
  vu.acc.mula(Mask::xyzw, vu.vf12, vu.vf30.x());
  // nop                        |  madday.xyzw ACC, vf13, vf30    669
  vu.acc.madda(Mask::xyzw, vu.vf13, vu.vf30.y());
  // nop                        |  maddaz.xyzw ACC, vf14, vf30    670
  vu.acc.madda(Mask::xyzw, vu.vf14, vu.vf30.z());
  // sq.xyzw vf24, 769(vi00)    |  maddw.xyzw vf30, vf15, vf00    671
  vu.acc.madd(Mask::xyzw, vu.vf30, vu.vf15, vu.vf00.w());
  sq_buffer(Mask::xyzw, vu.vf24, 769);
  // waitp                      |  mul.xyzw vf29, vf29, vf01      672
  vu.vf29.mul(Mask::xyzw, vu.vf29, vu.vf01);
  // mfp.w vf25, P              |  nop                            673
  vu.vf25.mfp(Mask::w, vu.P);
  // erleng.xyz P, vf26         |  nop                            674
  vu.P = erleng(vu.vf26);
  // nop                        |  addz.y vf26, vf00, vf26        675
  vu.vf26.add(Mask::y, vu.vf00, vu.vf26.z());
  // sq.xyzw vf29, 5(vi08)      |  nop                            676
  sq_buffer(Mask::xyzw, vu.vf29, vu.vi08 + 5);
  // sq.xyzw vf29, 773(vi00)    |  mulw.xy vf25, vf25, vf25       677
  vu.vf25.mul(Mask::xy, vu.vf25, vu.vf25.w());
  sq_buffer(Mask::xyzw, vu.vf29, 773);
  // nop                        |  mula.xyzw ACC, vf25, vf05      678
  vu.acc.mula(Mask::xyzw, vu.vf25, vu.vf05);
  // nop                        |  maddw.xyzw vf25, vf06, vf00    679
  vu.acc.madd(Mask::xyzw, vu.vf25, vu.vf06, vu.vf00.w());
  // waitp                      |  mul.xyzw vf30, vf30, vf01      680
  vu.vf30.mul(Mask::xyzw, vu.vf30, vu.vf01);
  // mfp.w vf26, P              |  nop                            681
  vu.vf26.mfp(Mask::w, vu.P);
  // sq.xyzw vf30, 8(vi08)      |  nop                            682
  sq_buffer(Mask::xyzw, vu.vf30, vu.vi08 + 8);
  // sq.xyzw vf30, 774(vi00)    |  mulw.xy vf26, vf26, vf26       683
  vu.vf26.mul(Mask::xy, vu.vf26, vu.vf26.w());
  sq_buffer(Mask::xyzw, vu.vf30, 774);
  // sq.xyzw vf25, 770(vi00)    |  mula.xyzw ACC, vf26, vf05      684
  vu.acc.mula(Mask::xyzw, vu.vf26, vu.vf05);
  sq_buffer(Mask::xyzw, vu.vf25, 770);
  // lq.xyzw vf07, 739(vi00)    |  maddw.xyzw vf26, vf06, vf00    685
  vu.acc.madd(Mask::xyzw, vu.vf26, vu.vf06, vu.vf00.w());
  lq_buffer(Mask::xyzw, vu.vf07, 739);
  // ior vi03, vi08, vi00       |  nop                            686
  vu.vi03 = vu.vi08;
  // iaddi vi05, vi00, 0x3      |  nop                            687
  vu.vi05 = 3;
  // BRANCH!
  // bal vi13, L45              |  nop                            688

  // sq.xyzw vf26, 771(vi00)    |  nop                            689
  sq_buffer(Mask::xyzw, vu.vf26, 771);
  // if (bc) { goto L45; }
  run_L45_vu2c();

  // lq.xyzw vf28, 741(vi00)    |  nop                            690
  lq_buffer(Mask::xyzw, vu.vf28, 741);
  // BRANCH!
  // ibeq vi00, vi05, L42       |  nop                            691
  bc = (vu.vi05 == 0);
  // lq.xyzw vf29, 742(vi00)    |  nop                            692
  lq_buffer(Mask::xyzw, vu.vf29, 742);
  if (bc) {
    goto L42;
  }

  // lq.xyzw vf30, 743(vi00)    |  nop                            693
  lq_buffer(Mask::xyzw, vu.vf30, 743);
  // lq.xyzw vf24, 744(vi00)    |  nop                            694
  lq_buffer(Mask::xyzw, vu.vf24, 744);
  // lq.xyzw vf25, 745(vi00)    |  nop                            695
  lq_buffer(Mask::xyzw, vu.vf25, 745);
  // lq.xyzw vf26, 746(vi00)    |  nop                            696
  lq_buffer(Mask::xyzw, vu.vf26, 746);
  // sq.xyzw vf28, 0(vi10)      |  nop                            697
  sq_buffer(Mask::xyzw, vu.vf28, vu.vi10);
  // sq.xyzw vf29, 1(vi10)      |  nop                            698
  sq_buffer(Mask::xyzw, vu.vf29, vu.vi10 + 1);
  // sq.xyzw vf30, 2(vi10)      |  nop                            699
  sq_buffer(Mask::xyzw, vu.vf30, vu.vi10 + 2);
  // sq.xyzw vf24, 3(vi10)      |  nop                            700
  sq_buffer(Mask::xyzw, vu.vf24, vu.vi10 + 3);
  // sq.xyzw vf25, 4(vi10)      |  nop                            701
  sq_buffer(Mask::xyzw, vu.vf25, vu.vi10 + 4);
  // sq.xyzw vf26, 5(vi10)      |  nop                            702
  sq_buffer(Mask::xyzw, vu.vf26, vu.vi10 + 5);
  // iaddiu vi06, vi05, 0x4000  |  nop                            703
  vu.vi06 = vu.vi05 + 0x4000; /* 16384 */
  // BRANCH!
  // bal vi13, L43              |  nop                            704
  // ASSERT(false);
  // iaddiu vi06, vi06, 0x4000  |  nop                            705
  vu.vi06 = vu.vi06 + 0x4000; /* 16384 */
  // if (bc) { goto L43; }
  run_L43_vu2c();

  // iaddi vi08, vi10, 0x7      |  nop                            706
  vu.vi08 = vu.vi10 + 7;
  // lq.xyzw vf24, 769(vi00)    |  nop                            707
  lq_buffer(Mask::xyzw, vu.vf24, 769);
  // lq.xyzw vf25, 770(vi00)    |  nop                            708
  lq_buffer(Mask::xyzw, vu.vf25, 770);
  // lq.xyzw vf26, 771(vi00)    |  nop                            709
  lq_buffer(Mask::xyzw, vu.vf26, 771);
  // lq.xyzw vf22, 756(vi00)    |  nop                            710
  lq_buffer(Mask::xyzw, vu.vf22, 756);
  // lq.xyzw vf28, 772(vi00)    |  nop                            711
  lq_buffer(Mask::xyzw, vu.vf28, 772);
  // lq.xyzw vf29, 773(vi00)    |  nop                            712
  lq_buffer(Mask::xyzw, vu.vf29, 773);
  // lq.xyzw vf30, 774(vi00)    |  nop                            713
  lq_buffer(Mask::xyzw, vu.vf30, 774);
  // sq.xyzw vf24, 0(vi08)      |  nop                            714
  sq_buffer(Mask::xyzw, vu.vf24, vu.vi08);
  // sq.xyzw vf22, 1(vi08)      |  nop                            715
  sq_buffer(Mask::xyzw, vu.vf22, vu.vi08 + 1);
  // sq.xyzw vf28, 2(vi08)      |  nop                            716
  sq_buffer(Mask::xyzw, vu.vf28, vu.vi08 + 2);
  // sq.xyzw vf25, 3(vi08)      |  nop                            717
  sq_buffer(Mask::xyzw, vu.vf25, vu.vi08 + 3);
  // sq.xyzw vf22, 4(vi08)      |  nop                            718
  sq_buffer(Mask::xyzw, vu.vf22, vu.vi08 + 4);
  // sq.xyzw vf29, 5(vi08)      |  nop                            719
  sq_buffer(Mask::xyzw, vu.vf29, vu.vi08 + 5);
  // sq.xyzw vf26, 6(vi08)      |  nop                            720
  sq_buffer(Mask::xyzw, vu.vf26, vu.vi08 + 6);
  // sq.xyzw vf22, 7(vi08)      |  nop                            721
  sq_buffer(Mask::xyzw, vu.vf22, vu.vi08 + 7);
  // sq.xyzw vf30, 8(vi08)      |  nop                            722
  sq_buffer(Mask::xyzw, vu.vf30, vu.vi08 + 8);
  // sq.xyzw vf24, 9(vi08)      |  nop                            723
  sq_buffer(Mask::xyzw, vu.vf24, vu.vi08 + 9);
  // sq.xyzw vf22, 10(vi08)     |  nop                            724
  sq_buffer(Mask::xyzw, vu.vf22, vu.vi08 + 10);
  // sq.xyzw vf28, 11(vi08)     |  nop                            725
  sq_buffer(Mask::xyzw, vu.vf28, vu.vi08 + 11);
  // ior vi03, vi08, vi00       |  nop                            726
  vu.vi03 = vu.vi08;
  // iaddi vi05, vi00, 0x3      |  nop                            727
  vu.vi05 = 3;
  // BRANCH!
  // bal vi13, L45              |  nop                            728
  // ASSERT(false);
  // lq.xyzw vf07, 740(vi00)    |  nop                            729
  lq_buffer(Mask::xyzw, vu.vf07, 740);
  // if (bc) { goto L45; }
  run_L45_vu2c();

  // lq.xyzw vf28, 749(vi00)    |  nop                            730
  lq_buffer(Mask::xyzw, vu.vf28, 749);
  // lq.xyzw vf29, 750(vi00)    |  nop                            731
  lq_buffer(Mask::xyzw, vu.vf29, 750);
  // lq.xyzw vf30, 751(vi00)    |  nop                            732
  lq_buffer(Mask::xyzw, vu.vf30, 751);
  // lq.xyzw vf24, 752(vi00)    |  nop                            733
  lq_buffer(Mask::xyzw, vu.vf24, 752);
  // lq.xyzw vf25, 753(vi00)    |  nop                            734
  lq_buffer(Mask::xyzw, vu.vf25, 753);
  // lq.xyzw vf26, 754(vi00)    |  nop                            735
  lq_buffer(Mask::xyzw, vu.vf26, 754);
  // sq.xyzw vf28, 0(vi10)      |  nop                            736
  sq_buffer(Mask::xyzw, vu.vf28, vu.vi10);
  // sq.xyzw vf29, 1(vi10)      |  nop                            737
  sq_buffer(Mask::xyzw, vu.vf29, vu.vi10 + 1);
  // sq.xyzw vf30, 2(vi10)      |  nop                            738
  sq_buffer(Mask::xyzw, vu.vf30, vu.vi10 + 2);
  // sq.xyzw vf24, 3(vi10)      |  nop                            739
  sq_buffer(Mask::xyzw, vu.vf24, vu.vi10 + 3);
  // sq.xyzw vf25, 4(vi10)      |  nop                            740
  sq_buffer(Mask::xyzw, vu.vf25, vu.vi10 + 4);
  // sq.xyzw vf26, 5(vi10)      |  nop                            741
  sq_buffer(Mask::xyzw, vu.vf26, vu.vi10 + 5);
  // iaddiu vi06, vi05, 0x4000  |  nop                            742
  vu.vi06 = vu.vi05 + 0x4000; /* 16384 */
  // BRANCH!
  // bal vi13, L43              |  nop                            743
  // ASSERT(false);
  // iaddiu vi06, vi06, 0x4000  |  nop                            744
  vu.vi06 = vu.vi06 + 0x4000; /* 16384 */
  // if (bc) { goto L43; }
  run_L43_vu2c();

L42:
  // BRANCH!
  // ibgtz vi14, L39            |  nop                            745
  bc = ((s16)vu.vi14) > 0;
  // nop                        |  nop                            746

  if (bc) {
    goto L39;
  }

  // jr vi15                    |  nop                            747
  // nop                        |  nop                            748
}
void OceanMid::run_L43_vu2c() {
  bool bc;
  // sq.xyzw vf07, -1(vi08)     |  nop                            749
  sq_buffer(Mask::xyzw, vu.vf07, vu.vi08 + -1);
  // isw.x vi06, -1(vi08)       |  nop                            750
  isw_buffer(Mask::x, vu.vi06, vu.vi08 + -1);
L44:
  // lqi.xyzw vf24, vi08        |  nop                            751
  lq_buffer(Mask::xyzw, vu.vf24, vu.vi08++);
  // lqi.xyzw vf27, vi08        |  nop                            752
  lq_buffer(Mask::xyzw, vu.vf27, vu.vi08++);
  // lqi.xyzw vf21, vi08        |  nop                            753
  lq_buffer(Mask::xyzw, vu.vf21, vu.vi08++);
  // nop                        |  nop                            754

  // nop                        |  nop                            755

  // nop                        |  nop                            756

  // div Q, vf00.w, vf21.w      |  mul.xyzw vf21, vf21, vf31      757
  vu.Q = vu.vf00.w() / vu.vf21.w();
  vu.vf21.mul(Mask::xyzw, vu.vf21, vu.vf31);
  // nop                        |  nop                            758

  // nop                        |  nop                            759

  // nop                        |  nop                            760

  // nop                        |  nop                            761

  // nop                        |  nop                            762

  // nop                        |  nop                            763

  // nop                        |  mul.xyz vf21, vf21, Q          764
  vu.vf21.mul(Mask::xyz, vu.vf21, vu.Q);
  // nop                        |  mul.xyzw vf24, vf24, Q         765
  vu.vf24.mul(Mask::xyzw, vu.vf24, vu.Q);
  // nop                        |  nop                            766

  // nop                        |  nop                            767

  // nop                        |  add.xyzw vf21, vf21, vf02      768
  vu.vf21.add(Mask::xyzw, vu.vf21, vu.vf02);
  // nop                        |  nop                            769

  // nop                        |  nop                            770

  // nop                        |  nop                            771

  // nop                        |  maxy.w vf21, vf21, vf03        772
  vu.vf21.max(Mask::w, vu.vf21, vu.vf03.y());
  // nop                        |  nop                            773

  // nop                        |  nop                            774

  // nop                        |  nop                            775

  // nop                        |  miniz.w vf21, vf21, vf03       776
  vu.vf21.mini(Mask::w, vu.vf21, vu.vf03.z());
  // nop                        |  nop                            777

  // nop                        |  nop                            778

  // nop                        |  ftoi0.xyzw vf27, vf27          779
  vu.vf27.ftoi0(Mask::xyzw, vu.vf27);
  // nop                        |  ftoi4.xyzw vf21, vf21          780
  vu.vf21.ftoi4(Mask::xyzw, vu.vf21);

  // nop                        |  nop                            781

  // sq.xyzw vf24, -3(vi08)     |  nop                            782
  sq_buffer(Mask::xyzw, vu.vf24, vu.vi08 + -3);
  // sq.xyzw vf27, -2(vi08)     |  nop                            783
  sq_buffer(Mask::xyzw, vu.vf27, vu.vi08 + -2);
  // sq.xyzw vf21, -1(vi08)     |  nop                            784
  sq_buffer(Mask::xyzw, vu.vf21, vu.vi08 + -1);
  // iaddi vi05, vi05, -0x1     |  nop                            785
  vu.vi05 = vu.vi05 + -1;
  // nop                        |  nop                            786

  // BRANCH!
  // ibne vi00, vi05, L44       |  nop                            787
  bc = (vu.vi05 != 0);
  // nop                        |  nop                            788

  if (bc) {
    goto L44;
  }

  // iaddiu vi01, vi00, 0x4d3   |  nop                            789
  vu.vi01 = 0x4d3; /* 1235 */
  // xgkick vi10                |  nop                            790
  xgkick(vu.vi10);
  // jr vi13                    |  nop                            791
  // ASSERT(false);
  // isub vi10, vi01, vi10      |  nop                            792
  vu.vi10 = vu.vi01 - vu.vi10;
}

void OceanMid::run_L45_vu2c() {
  // fmt::print("run L45\n");

  bool bc = false;
  u32 cf = 0;
  // ior vi04, vi03, vi00       |  nop                            793
  vu.vi04 = vu.vi03;
  // lq.xyzw vf21, 2(vi03)      |  nop                            794
  lq_buffer(Mask::xyzw, vu.vf21, vu.vi03 + 2);
  // ior vi06, vi05, vi00       |  nop                            795
  vu.vi06 = vu.vi05;
  // lq.xyzw vf24, 0(vi03)      |  nop                            796
  lq_buffer(Mask::xyzw, vu.vf24, vu.vi03);
  // lq.xyzw vf27, 1(vi03)      |  nop                            797
  lq_buffer(Mask::xyzw, vu.vf27, vu.vi03 + 1);
  // iaddi vi03, vi03, 0x3      |  clipw.xyz vf21, vf21           798
  cf = clip(vu.vf21, vu.vf21.w(), cf);
  vu.vi03 = vu.vi03 + 3;
L46:
  // lq.xyzw vf22, 2(vi03)      |  nop                            799
  lq_buffer(Mask::xyzw, vu.vf22, vu.vi03 + 2);
  // lq.xyzw vf25, 0(vi03)      |  nop                            800
  lq_buffer(Mask::xyzw, vu.vf25, vu.vi03);
  // lq.xyzw vf28, 1(vi03)      |  nop                            801
  lq_buffer(Mask::xyzw, vu.vf28, vu.vi03 + 1);
  // iaddi vi03, vi03, 0x3      |  nop                            802
  vu.vi03 = vu.vi03 + 3;
  // nop                        |  clipw.xyz vf22, vf22           803
  cf = clip(vu.vf22, vu.vf22.w(), cf);
  // nop                        |  nop                            804

  // nop                        |  nop                            805

  // nop                        |  nop                            806

  // fcor vi01, 0xfff7df        |  nop                            807
  fcor(vu.vi01, 0xfff7df, cf);

  // BRANCH!
  // ibne vi00, vi01, L57       |  nop                            808
  bc = (vu.vi01 != 0);
  // fcand vi01, 0x20           |  nop                            809
  fcand(vu.vi01, 0x20, cf);

  if (bc) {
    goto L57;
  }

  // BRANCH!
  // ibne vi00, vi01, L58       |  nop                            810
  bc = (vu.vi01 != 0);
  // fcand vi01, 0x800          |  nop                            811
  fcand(vu.vi01, 0x800, cf);

  if (bc) {
    goto L58;
  }

  // BRANCH!
  // ibne vi00, vi01, L59       |  nop                            812
  bc = (vu.vi01 != 0);
  // nop                        |  nop                            813

  if (bc) {
    goto L59;
  }

  // sqi.xyzw vf24, vi04        |  nop                            814
  sq_buffer(Mask::xyzw, vu.vf24, vu.vi04++);
  // sqi.xyzw vf27, vi04        |  nop                            815
  sq_buffer(Mask::xyzw, vu.vf27, vu.vi04++);
  // sqi.xyzw vf21, vi04        |  nop                            816
  sq_buffer(Mask::xyzw, vu.vf21, vu.vi04++);
L47:
  // move.xyzw vf24, vf25       |  nop                            817
  vu.vf24.move(Mask::xyzw, vu.vf25);
  // iaddi vi05, vi05, -0x1     |  nop                            818
  vu.vi05 = vu.vi05 + -1;
  // move.xyzw vf27, vf28       |  nop                            819
  vu.vf27.move(Mask::xyzw, vu.vf28);
  // BRANCH!
  // ibne vi00, vi05, L46       |  nop                            820
  bc = (vu.vi05 != 0);
  // move.xyzw vf21, vf22       |  nop                            821
  vu.vf21.move(Mask::xyzw, vu.vf22);
  if (bc) {
    goto L46;
  }

  // lq.xyzw vf24, 0(vi08)      |  nop                            822
  lq_buffer(Mask::xyzw, vu.vf24, vu.vi08);
  // lq.xyzw vf27, 1(vi08)      |  nop                            823
  lq_buffer(Mask::xyzw, vu.vf27, vu.vi08 + 1);
  // lq.xyzw vf21, 2(vi08)      |  nop                            824
  lq_buffer(Mask::xyzw, vu.vf21, vu.vi08 + 2);
  // ior vi03, vi08, vi00       |  nop                            825
  vu.vi03 = vu.vi08;
  // sqi.xyzw vf24, vi04        |  nop                            826
  sq_buffer(Mask::xyzw, vu.vf24, vu.vi04++);
  // sqi.xyzw vf27, vi04        |  nop                            827
  sq_buffer(Mask::xyzw, vu.vf27, vu.vi04++);
  // sqi.xyzw vf21, vi04        |  nop                            828
  sq_buffer(Mask::xyzw, vu.vf21, vu.vi04++);
  // BRANCH!
  // ibeq vi00, vi06, L56       |  nop                            829
  bc = (vu.vi06 == 0);
  // ior vi05, vi06, vi00       |  nop                            830
  vu.vi05 = vu.vi06;
  if (bc) {
    goto L56;
  }

  // ior vi04, vi03, vi00       |  nop                            831
  vu.vi04 = vu.vi03;
  // lq.xyzw vf21, 2(vi03)      |  nop                            832
  lq_buffer(Mask::xyzw, vu.vf21, vu.vi03 + 2);
  // ior vi06, vi05, vi00       |  nop                            833
  vu.vi06 = vu.vi05;
  // lq.xyzw vf24, 0(vi03)      |  nop                            834
  lq_buffer(Mask::xyzw, vu.vf24, vu.vi03);
  // lq.xyzw vf27, 1(vi03)      |  nop                            835
  lq_buffer(Mask::xyzw, vu.vf27, vu.vi03 + 1);
  // iaddi vi03, vi03, 0x3      |  clipw.xyz vf21, vf21           836
  cf = clip(vu.vf21, vu.vf21.w(), cf);
  vu.vi03 = vu.vi03 + 3;
L48:
  // lq.xyzw vf22, 2(vi03)      |  nop                            837
  lq_buffer(Mask::xyzw, vu.vf22, vu.vi03 + 2);
  // lq.xyzw vf25, 0(vi03)      |  nop                            838
  lq_buffer(Mask::xyzw, vu.vf25, vu.vi03);
  // lq.xyzw vf28, 1(vi03)      |  nop                            839
  lq_buffer(Mask::xyzw, vu.vf28, vu.vi03 + 1);
  // iaddi vi03, vi03, 0x3      |  nop                            840
  vu.vi03 = vu.vi03 + 3;
  // nop                        |  clipw.xyz vf22, vf22           841
  cf = clip(vu.vf22, vu.vf22.w(), cf);
  // nop                        |  nop                            842

  // nop                        |  nop                            843

  // nop                        |  nop                            844

  // fcor vi01, 0xfffdf7        |  nop                            845
  fcor(vu.vi01, 0xfffdf7, cf);

  // BRANCH!
  // ibne vi00, vi01, L60       |  nop                            846
  bc = (vu.vi01 != 0);
  // fcand vi01, 0x8            |  nop                            847
  fcand(vu.vi01, 0x8, cf);

  if (bc) {
    goto L60;
  }

  // BRANCH!
  // ibne vi00, vi01, L61       |  nop                            848
  bc = (vu.vi01 != 0);
  // fcand vi01, 0x200          |  nop                            849
  fcand(vu.vi01, 0x200, cf);

  if (bc) {
    goto L61;
  }

  // BRANCH!
  // ibne vi00, vi01, L62       |  nop                            850
  bc = (vu.vi01 != 0);
  // nop                        |  nop                            851

  if (bc) {
    goto L62;
  }

  // sqi.xyzw vf24, vi04        |  nop                            852
  sq_buffer(Mask::xyzw, vu.vf24, vu.vi04++);
  // sqi.xyzw vf27, vi04        |  nop                            853
  sq_buffer(Mask::xyzw, vu.vf27, vu.vi04++);
  // sqi.xyzw vf21, vi04        |  nop                            854
  sq_buffer(Mask::xyzw, vu.vf21, vu.vi04++);
L49:
  // move.xyzw vf24, vf25       |  nop                            855
  vu.vf24.move(Mask::xyzw, vu.vf25);
  // iaddi vi05, vi05, -0x1     |  nop                            856
  vu.vi05 = vu.vi05 + -1;
  // move.xyzw vf27, vf28       |  nop                            857
  vu.vf27.move(Mask::xyzw, vu.vf28);
  // BRANCH!
  // ibne vi00, vi05, L48       |  nop                            858
  bc = (vu.vi05 != 0);
  // move.xyzw vf21, vf22       |  nop                            859
  vu.vf21.move(Mask::xyzw, vu.vf22);
  if (bc) {
    goto L48;
  }

  // lq.xyzw vf24, 0(vi08)      |  nop                            860
  lq_buffer(Mask::xyzw, vu.vf24, vu.vi08);
  // lq.xyzw vf27, 1(vi08)      |  nop                            861
  lq_buffer(Mask::xyzw, vu.vf27, vu.vi08 + 1);
  // lq.xyzw vf21, 2(vi08)      |  nop                            862
  lq_buffer(Mask::xyzw, vu.vf21, vu.vi08 + 2);
  // ior vi03, vi08, vi00       |  nop                            863
  vu.vi03 = vu.vi08;
  // sqi.xyzw vf24, vi04        |  nop                            864
  sq_buffer(Mask::xyzw, vu.vf24, vu.vi04++);
  // sqi.xyzw vf27, vi04        |  nop                            865
  sq_buffer(Mask::xyzw, vu.vf27, vu.vi04++);
  // sqi.xyzw vf21, vi04        |  nop                            866
  sq_buffer(Mask::xyzw, vu.vf21, vu.vi04++);
  // BRANCH!
  // ibeq vi00, vi06, L56       |  nop                            867
  bc = (vu.vi06 == 0);
  // ior vi05, vi06, vi00       |  nop                            868
  vu.vi05 = vu.vi06;
  if (bc) {
    goto L56;
  }

  // ior vi04, vi03, vi00       |  nop                            869
  vu.vi04 = vu.vi03;
  // lq.xyzw vf21, 2(vi03)      |  nop                            870
  lq_buffer(Mask::xyzw, vu.vf21, vu.vi03 + 2);
  // ior vi06, vi05, vi00       |  nop                            871
  vu.vi06 = vu.vi05;
  // lq.xyzw vf24, 0(vi03)      |  nop                            872
  lq_buffer(Mask::xyzw, vu.vf24, vu.vi03);
  // lq.xyzw vf27, 1(vi03)      |  nop                            873
  lq_buffer(Mask::xyzw, vu.vf27, vu.vi03 + 1);
  // iaddi vi03, vi03, 0x3      |  clipw.xyz vf21, vf21           874
  cf = clip(vu.vf21, vu.vf21.w(), cf);
  vu.vi03 = vu.vi03 + 3;
L50:
  // lq.xyzw vf22, 2(vi03)      |  nop                            875
  lq_buffer(Mask::xyzw, vu.vf22, vu.vi03 + 2);
  // lq.xyzw vf25, 0(vi03)      |  nop                            876
  lq_buffer(Mask::xyzw, vu.vf25, vu.vi03);
  // lq.xyzw vf28, 1(vi03)      |  nop                            877
  lq_buffer(Mask::xyzw, vu.vf28, vu.vi03 + 1);
  // iaddi vi03, vi03, 0x3      |  nop                            878
  vu.vi03 = vu.vi03 + 3;
  // nop                        |  clipw.xyz vf22, vf22           879
  cf = clip(vu.vf22, vu.vf22.w(), cf);
  // nop                        |  nop                            880

  // nop                        |  nop                            881

  // nop                        |  nop                            882

  // fcor vi01, 0xfffefb        |  nop                            883
  fcor(vu.vi01, 0xfffefb, cf);

  // BRANCH!
  // ibne vi00, vi01, L63       |  nop                            884
  bc = (vu.vi01 != 0);
  // fcand vi01, 0x4            |  nop                            885
  fcand(vu.vi01, 0x4, cf);

  if (bc) {
    goto L63;
  }

  // BRANCH!
  // ibne vi00, vi01, L64       |  nop                            886
  bc = (vu.vi01 != 0);
  // fcand vi01, 0x100          |  nop                            887
  fcand(vu.vi01, 0x100, cf);

  if (bc) {
    goto L64;
  }

  // BRANCH!
  // ibne vi00, vi01, L65       |  nop                            888
  bc = (vu.vi01 != 0);
  // nop                        |  nop                            889

  if (bc) {
    goto L65;
  }

  // sqi.xyzw vf24, vi04        |  nop                            890
  sq_buffer(Mask::xyzw, vu.vf24, vu.vi04++);
  // sqi.xyzw vf27, vi04        |  nop                            891
  sq_buffer(Mask::xyzw, vu.vf27, vu.vi04++);
  // sqi.xyzw vf21, vi04        |  nop                            892
  sq_buffer(Mask::xyzw, vu.vf21, vu.vi04++);
L51:
  // move.xyzw vf24, vf25       |  nop                            893
  vu.vf24.move(Mask::xyzw, vu.vf25);
  // iaddi vi05, vi05, -0x1     |  nop                            894
  vu.vi05 = vu.vi05 + -1;
  // move.xyzw vf27, vf28       |  nop                            895
  vu.vf27.move(Mask::xyzw, vu.vf28);
  // BRANCH!
  // ibne vi00, vi05, L50       |  nop                            896
  bc = (vu.vi05 != 0);
  // move.xyzw vf21, vf22       |  nop                            897
  vu.vf21.move(Mask::xyzw, vu.vf22);
  if (bc) {
    goto L50;
  }

  // lq.xyzw vf24, 0(vi08)      |  nop                            898
  lq_buffer(Mask::xyzw, vu.vf24, vu.vi08);
  // lq.xyzw vf27, 1(vi08)      |  nop                            899
  lq_buffer(Mask::xyzw, vu.vf27, vu.vi08 + 1);
  // lq.xyzw vf21, 2(vi08)      |  nop                            900
  lq_buffer(Mask::xyzw, vu.vf21, vu.vi08 + 2);
  // ior vi03, vi08, vi00       |  nop                            901
  vu.vi03 = vu.vi08;
  // sqi.xyzw vf24, vi04        |  nop                            902
  sq_buffer(Mask::xyzw, vu.vf24, vu.vi04++);
  // sqi.xyzw vf27, vi04        |  nop                            903
  sq_buffer(Mask::xyzw, vu.vf27, vu.vi04++);
  // sqi.xyzw vf21, vi04        |  nop                            904
  sq_buffer(Mask::xyzw, vu.vf21, vu.vi04++);
  // BRANCH!
  // ibeq vi00, vi06, L56       |  nop                            905
  bc = (vu.vi06 == 0);
  // ior vi05, vi06, vi00       |  nop                            906
  vu.vi05 = vu.vi06;
  if (bc) {
    goto L56;
  }

  // ior vi04, vi03, vi00       |  nop                            907
  vu.vi04 = vu.vi03;
  // lq.xyzw vf21, 2(vi03)      |  nop                            908
  lq_buffer(Mask::xyzw, vu.vf21, vu.vi03 + 2);
  // ior vi06, vi05, vi00       |  nop                            909
  vu.vi06 = vu.vi05;
  // lq.xyzw vf24, 0(vi03)      |  nop                            910
  lq_buffer(Mask::xyzw, vu.vf24, vu.vi03);
  // lq.xyzw vf27, 1(vi03)      |  nop                            911
  lq_buffer(Mask::xyzw, vu.vf27, vu.vi03 + 1);
  // iaddi vi03, vi03, 0x3      |  clipw.xyz vf21, vf21           912
  cf = clip(vu.vf21, vu.vf21.w(), cf);
  vu.vi03 = vu.vi03 + 3;
L52:
  // lq.xyzw vf22, 2(vi03)      |  nop                            913
  lq_buffer(Mask::xyzw, vu.vf22, vu.vi03 + 2);
  // lq.xyzw vf25, 0(vi03)      |  nop                            914
  lq_buffer(Mask::xyzw, vu.vf25, vu.vi03);
  // lq.xyzw vf28, 1(vi03)      |  nop                            915
  lq_buffer(Mask::xyzw, vu.vf28, vu.vi03 + 1);
  // iaddi vi03, vi03, 0x3      |  nop                            916
  vu.vi03 = vu.vi03 + 3;
  // nop                        |  clipw.xyz vf22, vf22           917
  cf = clip(vu.vf22, vu.vf22.w(), cf);
  // nop                        |  nop                            918

  // nop                        |  nop                            919

  // nop                        |  nop                            920

  // fcor vi01, 0xffff7d        |  nop                            921
  fcor(vu.vi01, 0xffff7d, cf);

  // BRANCH!
  // ibne vi00, vi01, L66       |  nop                            922
  bc = (vu.vi01 != 0);
  // fcand vi01, 0x2            |  nop                            923
  fcand(vu.vi01, 0x2, cf);

  if (bc) {
    goto L66;
  }

  // BRANCH!
  // ibne vi00, vi01, L67       |  nop                            924
  bc = (vu.vi01 != 0);
  // fcand vi01, 0x80           |  nop                            925
  fcand(vu.vi01, 0x80, cf);

  if (bc) {
    goto L67;
  }

  // BRANCH!
  // ibne vi00, vi01, L68       |  nop                            926
  bc = (vu.vi01 != 0);
  // nop                        |  nop                            927

  if (bc) {
    goto L68;
  }

  // sqi.xyzw vf24, vi04        |  nop                            928
  sq_buffer(Mask::xyzw, vu.vf24, vu.vi04++);
  // sqi.xyzw vf27, vi04        |  nop                            929
  sq_buffer(Mask::xyzw, vu.vf27, vu.vi04++);
  // sqi.xyzw vf21, vi04        |  nop                            930
  sq_buffer(Mask::xyzw, vu.vf21, vu.vi04++);
L53:
  // move.xyzw vf24, vf25       |  nop                            931
  vu.vf24.move(Mask::xyzw, vu.vf25);
  // iaddi vi05, vi05, -0x1     |  nop                            932
  vu.vi05 = vu.vi05 + -1;
  // move.xyzw vf27, vf28       |  nop                            933
  vu.vf27.move(Mask::xyzw, vu.vf28);
  // BRANCH!
  // ibne vi00, vi05, L52       |  nop                            934
  bc = (vu.vi05 != 0);
  // move.xyzw vf21, vf22       |  nop                            935
  vu.vf21.move(Mask::xyzw, vu.vf22);
  if (bc) {
    goto L52;
  }

  // lq.xyzw vf24, 0(vi08)      |  nop                            936
  lq_buffer(Mask::xyzw, vu.vf24, vu.vi08);
  // lq.xyzw vf27, 1(vi08)      |  nop                            937
  lq_buffer(Mask::xyzw, vu.vf27, vu.vi08 + 1);
  // lq.xyzw vf21, 2(vi08)      |  nop                            938
  lq_buffer(Mask::xyzw, vu.vf21, vu.vi08 + 2);
  // ior vi03, vi08, vi00       |  nop                            939
  vu.vi03 = vu.vi08;
  // sqi.xyzw vf24, vi04        |  nop                            940
  sq_buffer(Mask::xyzw, vu.vf24, vu.vi04++);
  // sqi.xyzw vf27, vi04        |  nop                            941
  sq_buffer(Mask::xyzw, vu.vf27, vu.vi04++);
  // sqi.xyzw vf21, vi04        |  nop                            942
  sq_buffer(Mask::xyzw, vu.vf21, vu.vi04++);
  // BRANCH!
  // ibeq vi00, vi06, L56       |  nop                            943
  bc = (vu.vi06 == 0);
  // ior vi05, vi06, vi00       |  nop                            944
  vu.vi05 = vu.vi06;
  if (bc) {
    goto L56;
  }

  // ior vi04, vi03, vi00       |  nop                            945
  vu.vi04 = vu.vi03;
  // lq.xyzw vf21, 2(vi03)      |  nop                            946
  lq_buffer(Mask::xyzw, vu.vf21, vu.vi03 + 2);
  // ior vi06, vi05, vi00       |  nop                            947
  vu.vi06 = vu.vi05;
  // lq.xyzw vf24, 0(vi03)      |  nop                            948
  lq_buffer(Mask::xyzw, vu.vf24, vu.vi03);
  // lq.xyzw vf27, 1(vi03)      |  nop                            949
  lq_buffer(Mask::xyzw, vu.vf27, vu.vi03 + 1);
  // iaddi vi03, vi03, 0x3      |  clipw.xyz vf21, vf21           950
  cf = clip(vu.vf21, vu.vf21.w(), cf);
  vu.vi03 = vu.vi03 + 3;
L54:
  // lq.xyzw vf22, 2(vi03)      |  nop                            951
  lq_buffer(Mask::xyzw, vu.vf22, vu.vi03 + 2);
  // lq.xyzw vf25, 0(vi03)      |  nop                            952
  lq_buffer(Mask::xyzw, vu.vf25, vu.vi03);
  // lq.xyzw vf28, 1(vi03)      |  nop                            953
  lq_buffer(Mask::xyzw, vu.vf28, vu.vi03 + 1);
  // iaddi vi03, vi03, 0x3      |  nop                            954
  vu.vi03 = vu.vi03 + 3;
  // nop                        |  clipw.xyz vf22, vf22           955
  cf = clip(vu.vf22, vu.vf22.w(), cf);
  // nop                        |  nop                            956

  // nop                        |  nop                            957

  // nop                        |  nop                            958

  // fcor vi01, 0xffffbe        |  nop                            959
  fcor(vu.vi01, 0xffffbe, cf);

  // BRANCH!
  // ibne vi00, vi01, L69       |  nop                            960
  bc = (vu.vi01 != 0);
  // fcand vi01, 0x1            |  nop                            961
  fcand(vu.vi01, 0x1, cf);

  if (bc) {
    goto L69;
  }

  // BRANCH!
  // ibne vi00, vi01, L70       |  nop                            962
  bc = (vu.vi01 != 0);
  // fcand vi01, 0x40           |  nop                            963
  fcand(vu.vi01, 0x40, cf);

  if (bc) {
    goto L70;
  }

  // BRANCH!
  // ibne vi00, vi01, L71       |  nop                            964
  bc = (vu.vi01 != 0);
  // nop                        |  nop                            965

  if (bc) {
    goto L71;
  }

  // sqi.xyzw vf24, vi04        |  nop                            966
  sq_buffer(Mask::xyzw, vu.vf24, vu.vi04++);
  // sqi.xyzw vf27, vi04        |  nop                            967
  sq_buffer(Mask::xyzw, vu.vf27, vu.vi04++);
  // sqi.xyzw vf21, vi04        |  nop                            968
  sq_buffer(Mask::xyzw, vu.vf21, vu.vi04++);
L55:
  // move.xyzw vf24, vf25       |  nop                            969
  vu.vf24.move(Mask::xyzw, vu.vf25);
  // iaddi vi05, vi05, -0x1     |  nop                            970
  vu.vi05 = vu.vi05 + -1;
  // move.xyzw vf27, vf28       |  nop                            971
  vu.vf27.move(Mask::xyzw, vu.vf28);
  // BRANCH!
  // ibne vi00, vi05, L54       |  nop                            972
  bc = (vu.vi05 != 0);
  // move.xyzw vf21, vf22       |  nop                            973
  vu.vf21.move(Mask::xyzw, vu.vf22);
  if (bc) {
    goto L54;
  }

  // lq.xyzw vf24, 0(vi08)      |  nop                            974
  lq_buffer(Mask::xyzw, vu.vf24, vu.vi08);
  // lq.xyzw vf27, 1(vi08)      |  nop                            975
  lq_buffer(Mask::xyzw, vu.vf27, vu.vi08 + 1);
  // lq.xyzw vf21, 2(vi08)      |  nop                            976
  lq_buffer(Mask::xyzw, vu.vf21, vu.vi08 + 2);
  // ior vi03, vi08, vi00       |  nop                            977
  vu.vi03 = vu.vi08;
  // sqi.xyzw vf24, vi04        |  nop                            978
  sq_buffer(Mask::xyzw, vu.vf24, vu.vi04++);
  // sqi.xyzw vf27, vi04        |  nop                            979
  sq_buffer(Mask::xyzw, vu.vf27, vu.vi04++);
  // sqi.xyzw vf21, vi04        |  nop                            980
  sq_buffer(Mask::xyzw, vu.vf21, vu.vi04++);
  // BRANCH!
  // ibeq vi00, vi06, L56       |  nop                            981
  bc = (vu.vi06 == 0);
  // ior vi05, vi06, vi00       |  nop                            982
  vu.vi05 = vu.vi06;
  if (bc) {
    goto L56;
  }

L56:
  // jr vi13                    |  nop                            983
  // ASSERT(false);
  return;
  // nop                        |  nop                            984

L57:
  // BRANCH!
  // b L47                      |  nop                            985
  bc = true;
  // iaddi vi06, vi06, -0x1     |  nop                            986
  vu.vi06 = vu.vi06 + -1;
  if (bc) {
    goto L47;
  }

L58:
  // sqi.xyzw vf24, vi04        |  sub.xyzw vf23, vf22, vf21      987
  vu.vf23.sub(Mask::xyzw, vu.vf22, vu.vf21);
  sq_buffer(Mask::xyzw, vu.vf24, vu.vi04++);
  // sqi.xyzw vf27, vi04        |  sub.xyzw vf26, vf25, vf24      988
  vu.vf26.sub(Mask::xyzw, vu.vf25, vu.vf24);
  sq_buffer(Mask::xyzw, vu.vf27, vu.vi04++);
  // sqi.xyzw vf21, vi04        |  sub.xyzw vf29, vf28, vf27      989
  vu.vf29.sub(Mask::xyzw, vu.vf28, vu.vf27);
  sq_buffer(Mask::xyzw, vu.vf21, vu.vi04++);
  // BRANCH!
  // ibeq vi03, vi04, L47       |  nop                            990
  bc = (vu.vi03 == vu.vi04);
  // nop                        |  addz.w vf30, vf23, vf23        991
  vu.vf30.add(Mask::w, vu.vf23, vu.vf23.z());
  if (bc) {
    goto L47;
  }

  // nop                        |  addw.z vf30, vf21, vf21        992
  vu.vf30.add(Mask::z, vu.vf21, vu.vf21.w());
  // div Q, vf30.z, vf30.w      |  nop                            993
  vu.Q = vu.vf30.z() / vu.vf30.w();
  // waitq                      |  nop                            994
  // ASSERT(false);
  // nop                        |  mul.xyzw vf26, vf26, Q         995
  vu.vf26.mul(Mask::xyzw, vu.vf26, vu.Q);
  // nop                        |  mul.xyzw vf29, vf29, Q         996
  vu.vf29.mul(Mask::xyzw, vu.vf29, vu.Q);
  // nop                        |  mul.xyzw vf23, vf23, Q         997
  vu.vf23.mul(Mask::xyzw, vu.vf23, vu.Q);
  // nop                        |  sub.xyzw vf26, vf24, vf26      998
  vu.vf26.sub(Mask::xyzw, vu.vf24, vu.vf26);
  // nop                        |  sub.xyzw vf29, vf27, vf29      999
  vu.vf29.sub(Mask::xyzw, vu.vf27, vu.vf29);
  // nop                        |  sub.xyzw vf23, vf21, vf23      1000
  vu.vf23.sub(Mask::xyzw, vu.vf21, vu.vf23);
  // iaddi vi06, vi06, 0x1      |  nop                            1001
  vu.vi06 = vu.vi06 + 1;
  // sqi.xyzw vf26, vi04        |  nop                            1002
  sq_buffer(Mask::xyzw, vu.vf26, vu.vi04++);
  // sqi.xyzw vf29, vi04        |  nop                            1003
  sq_buffer(Mask::xyzw, vu.vf29, vu.vi04++);
  // BRANCH!
  // b L47                      |  nop                            1004
  bc = true;
  // sqi.xyzw vf23, vi04        |  nop                            1005
  sq_buffer(Mask::xyzw, vu.vf23, vu.vi04++);
  if (bc) {
    goto L47;
  }

L59:
  // nop                        |  sub.xyzw vf23, vf21, vf22      1006
  vu.vf23.sub(Mask::xyzw, vu.vf21, vu.vf22);
  // nop                        |  sub.xyzw vf26, vf24, vf25      1007
  vu.vf26.sub(Mask::xyzw, vu.vf24, vu.vf25);
  // nop                        |  sub.xyzw vf29, vf27, vf28      1008
  vu.vf29.sub(Mask::xyzw, vu.vf27, vu.vf28);
  // nop                        |  addz.w vf30, vf23, vf23        1009
  vu.vf30.add(Mask::w, vu.vf23, vu.vf23.z());
  // nop                        |  addw.z vf30, vf22, vf22        1010
  vu.vf30.add(Mask::z, vu.vf22, vu.vf22.w());
  // div Q, vf30.z, vf30.w      |  nop                            1011
  vu.Q = vu.vf30.z() / vu.vf30.w();
  // waitq                      |  nop                            1012
  // ASSERT(false);
  // nop                        |  mul.xyzw vf26, vf26, Q         1013
  vu.vf26.mul(Mask::xyzw, vu.vf26, vu.Q);
  // nop                        |  mul.xyzw vf29, vf29, Q         1014
  vu.vf29.mul(Mask::xyzw, vu.vf29, vu.Q);
  // nop                        |  mul.xyzw vf23, vf23, Q         1015
  vu.vf23.mul(Mask::xyzw, vu.vf23, vu.Q);
  // nop                        |  sub.xyzw vf26, vf25, vf26      1016
  vu.vf26.sub(Mask::xyzw, vu.vf25, vu.vf26);
  // nop                        |  sub.xyzw vf29, vf28, vf29      1017
  vu.vf29.sub(Mask::xyzw, vu.vf28, vu.vf29);
  // nop                        |  sub.xyzw vf23, vf22, vf23      1018
  vu.vf23.sub(Mask::xyzw, vu.vf22, vu.vf23);
  // sqi.xyzw vf26, vi04        |  nop                            1019
  sq_buffer(Mask::xyzw, vu.vf26, vu.vi04++);
  // sqi.xyzw vf29, vi04        |  nop                            1020
  sq_buffer(Mask::xyzw, vu.vf29, vu.vi04++);
  // BRANCH!
  // b L47                      |  nop                            1021
  bc = true;
  // sqi.xyzw vf23, vi04        |  nop                            1022
  sq_buffer(Mask::xyzw, vu.vf23, vu.vi04++);
  if (bc) {
    goto L47;
  }

L60:
  // BRANCH!
  // b L49                      |  nop                            1023
  bc = true;
  // iaddi vi06, vi06, -0x1     |  nop                            1024
  vu.vi06 = vu.vi06 + -1;
  if (bc) {
    goto L49;
  }

L61:
  // sqi.xyzw vf24, vi04        |  sub.xyzw vf23, vf22, vf21      1025
  vu.vf23.sub(Mask::xyzw, vu.vf22, vu.vf21);
  sq_buffer(Mask::xyzw, vu.vf24, vu.vi04++);
  // sqi.xyzw vf27, vi04        |  sub.xyzw vf26, vf25, vf24      1026
  vu.vf26.sub(Mask::xyzw, vu.vf25, vu.vf24);
  sq_buffer(Mask::xyzw, vu.vf27, vu.vi04++);
  // sqi.xyzw vf21, vi04        |  sub.xyzw vf29, vf28, vf27      1027
  vu.vf29.sub(Mask::xyzw, vu.vf28, vu.vf27);
  sq_buffer(Mask::xyzw, vu.vf21, vu.vi04++);
  // BRANCH!
  // ibeq vi03, vi04, L49       |  nop                            1028
  bc = (vu.vi03 == vu.vi04);
  // nop                        |  addy.w vf30, vf23, vf23        1029
  vu.vf30.add(Mask::w, vu.vf23, vu.vf23.y());
  if (bc) {
    goto L49;
  }

  // nop                        |  addw.y vf30, vf21, vf21        1030
  vu.vf30.add(Mask::y, vu.vf21, vu.vf21.w());
  // div Q, vf30.y, vf30.w      |  nop                            1031
  vu.Q = vu.vf30.y() / vu.vf30.w();
  // waitq                      |  nop                            1032
  // ASSERT(false);
  // nop                        |  mul.xyzw vf26, vf26, Q         1033
  vu.vf26.mul(Mask::xyzw, vu.vf26, vu.Q);
  // nop                        |  mul.xyzw vf29, vf29, Q         1034
  vu.vf29.mul(Mask::xyzw, vu.vf29, vu.Q);
  // nop                        |  mul.xyzw vf23, vf23, Q         1035
  vu.vf23.mul(Mask::xyzw, vu.vf23, vu.Q);
  // nop                        |  sub.xyzw vf26, vf24, vf26      1036
  vu.vf26.sub(Mask::xyzw, vu.vf24, vu.vf26);
  // nop                        |  sub.xyzw vf29, vf27, vf29      1037
  vu.vf29.sub(Mask::xyzw, vu.vf27, vu.vf29);
  // nop                        |  sub.xyzw vf23, vf21, vf23      1038
  vu.vf23.sub(Mask::xyzw, vu.vf21, vu.vf23);
  // iaddi vi06, vi06, 0x1      |  nop                            1039
  vu.vi06 = vu.vi06 + 1;
  // sqi.xyzw vf26, vi04        |  nop                            1040
  sq_buffer(Mask::xyzw, vu.vf26, vu.vi04++);
  // sqi.xyzw vf29, vi04        |  nop                            1041
  sq_buffer(Mask::xyzw, vu.vf29, vu.vi04++);
  // BRANCH!
  // b L49                      |  nop                            1042
  bc = true;
  // sqi.xyzw vf23, vi04        |  nop                            1043
  sq_buffer(Mask::xyzw, vu.vf23, vu.vi04++);
  if (bc) {
    goto L49;
  }

L62:
  // nop                        |  sub.xyzw vf23, vf21, vf22      1044
  vu.vf23.sub(Mask::xyzw, vu.vf21, vu.vf22);
  // nop                        |  sub.xyzw vf26, vf24, vf25      1045
  vu.vf26.sub(Mask::xyzw, vu.vf24, vu.vf25);
  // nop                        |  sub.xyzw vf29, vf27, vf28      1046
  vu.vf29.sub(Mask::xyzw, vu.vf27, vu.vf28);
  // nop                        |  addy.w vf30, vf23, vf23        1047
  vu.vf30.add(Mask::w, vu.vf23, vu.vf23.y());
  // nop                        |  addw.y vf30, vf22, vf22        1048
  vu.vf30.add(Mask::y, vu.vf22, vu.vf22.w());
  // div Q, vf30.y, vf30.w      |  nop                            1049
  vu.Q = vu.vf30.y() / vu.vf30.w();
  // waitq                      |  nop                            1050
  // ASSERT(false);
  // nop                        |  mul.xyzw vf26, vf26, Q         1051
  vu.vf26.mul(Mask::xyzw, vu.vf26, vu.Q);
  // nop                        |  mul.xyzw vf29, vf29, Q         1052
  vu.vf29.mul(Mask::xyzw, vu.vf29, vu.Q);
  // nop                        |  mul.xyzw vf23, vf23, Q         1053
  vu.vf23.mul(Mask::xyzw, vu.vf23, vu.Q);
  // nop                        |  sub.xyzw vf26, vf25, vf26      1054
  vu.vf26.sub(Mask::xyzw, vu.vf25, vu.vf26);
  // nop                        |  sub.xyzw vf29, vf28, vf29      1055
  vu.vf29.sub(Mask::xyzw, vu.vf28, vu.vf29);
  // nop                        |  sub.xyzw vf23, vf22, vf23      1056
  vu.vf23.sub(Mask::xyzw, vu.vf22, vu.vf23);
  // sqi.xyzw vf26, vi04        |  nop                            1057
  sq_buffer(Mask::xyzw, vu.vf26, vu.vi04++);
  // sqi.xyzw vf29, vi04        |  nop                            1058
  sq_buffer(Mask::xyzw, vu.vf29, vu.vi04++);
  // BRANCH!
  // b L49                      |  nop                            1059
  bc = true;
  // sqi.xyzw vf23, vi04        |  nop                            1060
  sq_buffer(Mask::xyzw, vu.vf23, vu.vi04++);
  if (bc) {
    goto L49;
  }

L63:
  // BRANCH!
  // b L51                      |  nop                            1061
  bc = true;
  // iaddi vi06, vi06, -0x1     |  nop                            1062
  vu.vi06 = vu.vi06 + -1;
  if (bc) {
    goto L51;
  }

L64:
  // sqi.xyzw vf24, vi04        |  sub.xyzw vf23, vf22, vf21      1063
  vu.vf23.sub(Mask::xyzw, vu.vf22, vu.vf21);
  sq_buffer(Mask::xyzw, vu.vf24, vu.vi04++);
  // sqi.xyzw vf27, vi04        |  sub.xyzw vf26, vf25, vf24      1064
  vu.vf26.sub(Mask::xyzw, vu.vf25, vu.vf24);
  sq_buffer(Mask::xyzw, vu.vf27, vu.vi04++);
  // sqi.xyzw vf21, vi04        |  sub.xyzw vf29, vf28, vf27      1065
  vu.vf29.sub(Mask::xyzw, vu.vf28, vu.vf27);
  sq_buffer(Mask::xyzw, vu.vf21, vu.vi04++);
  // BRANCH!
  // ibeq vi03, vi04, L51       |  nop                            1066
  bc = (vu.vi03 == vu.vi04);
  // nop                        |  suby.w vf30, vf23, vf23        1067
  vu.vf30.sub(Mask::w, vu.vf23, vu.vf23.y());
  if (bc) {
    goto L51;
  }

  // nop                        |  subw.y vf30, vf21, vf21        1068
  vu.vf30.sub(Mask::y, vu.vf21, vu.vf21.w());
  // div Q, vf30.y, vf30.w      |  nop                            1069
  vu.Q = vu.vf30.y() / vu.vf30.w();
  // waitq                      |  nop                            1070
  // ASSERT(false);
  // nop                        |  mul.xyzw vf26, vf26, Q         1071
  vu.vf26.mul(Mask::xyzw, vu.vf26, vu.Q);
  // nop                        |  mul.xyzw vf29, vf29, Q         1072
  vu.vf29.mul(Mask::xyzw, vu.vf29, vu.Q);
  // nop                        |  mul.xyzw vf23, vf23, Q         1073
  vu.vf23.mul(Mask::xyzw, vu.vf23, vu.Q);
  // nop                        |  add.xyzw vf26, vf24, vf26      1074
  vu.vf26.add(Mask::xyzw, vu.vf24, vu.vf26);
  // nop                        |  add.xyzw vf29, vf27, vf29      1075
  vu.vf29.add(Mask::xyzw, vu.vf27, vu.vf29);
  // nop                        |  add.xyzw vf23, vf21, vf23      1076
  vu.vf23.add(Mask::xyzw, vu.vf21, vu.vf23);
  // iaddi vi06, vi06, 0x1      |  nop                            1077
  vu.vi06 = vu.vi06 + 1;
  // sqi.xyzw vf26, vi04        |  nop                            1078
  sq_buffer(Mask::xyzw, vu.vf26, vu.vi04++);
  // sqi.xyzw vf29, vi04        |  nop                            1079
  sq_buffer(Mask::xyzw, vu.vf29, vu.vi04++);
  // BRANCH!
  // b L51                      |  nop                            1080
  bc = true;
  // sqi.xyzw vf23, vi04        |  nop                            1081
  sq_buffer(Mask::xyzw, vu.vf23, vu.vi04++);
  if (bc) {
    goto L51;
  }

L65:
  // nop                        |  sub.xyzw vf23, vf21, vf22      1082
  vu.vf23.sub(Mask::xyzw, vu.vf21, vu.vf22);
  // nop                        |  sub.xyzw vf26, vf24, vf25      1083
  vu.vf26.sub(Mask::xyzw, vu.vf24, vu.vf25);
  // nop                        |  sub.xyzw vf29, vf27, vf28      1084
  vu.vf29.sub(Mask::xyzw, vu.vf27, vu.vf28);
  // nop                        |  suby.w vf30, vf23, vf23        1085
  vu.vf30.sub(Mask::w, vu.vf23, vu.vf23.y());
  // nop                        |  subw.y vf30, vf22, vf22        1086
  vu.vf30.sub(Mask::y, vu.vf22, vu.vf22.w());
  // div Q, vf30.y, vf30.w      |  nop                            1087
  vu.Q = vu.vf30.y() / vu.vf30.w();
  // waitq                      |  nop                            1088
  // ASSERT(false);
  // nop                        |  mul.xyzw vf26, vf26, Q         1089
  vu.vf26.mul(Mask::xyzw, vu.vf26, vu.Q);
  // nop                        |  mul.xyzw vf29, vf29, Q         1090
  vu.vf29.mul(Mask::xyzw, vu.vf29, vu.Q);
  // nop                        |  mul.xyzw vf23, vf23, Q         1091
  vu.vf23.mul(Mask::xyzw, vu.vf23, vu.Q);
  // nop                        |  add.xyzw vf26, vf25, vf26      1092
  vu.vf26.add(Mask::xyzw, vu.vf25, vu.vf26);
  // nop                        |  add.xyzw vf29, vf28, vf29      1093
  vu.vf29.add(Mask::xyzw, vu.vf28, vu.vf29);
  // nop                        |  add.xyzw vf23, vf22, vf23      1094
  vu.vf23.add(Mask::xyzw, vu.vf22, vu.vf23);
  // sqi.xyzw vf26, vi04        |  nop                            1095
  sq_buffer(Mask::xyzw, vu.vf26, vu.vi04++);
  // sqi.xyzw vf29, vi04        |  nop                            1096
  sq_buffer(Mask::xyzw, vu.vf29, vu.vi04++);
  // BRANCH!
  // b L51                      |  nop                            1097
  bc = true;
  // sqi.xyzw vf23, vi04        |  nop                            1098
  sq_buffer(Mask::xyzw, vu.vf23, vu.vi04++);
  if (bc) {
    goto L51;
  }

L66:
  // BRANCH!
  // b L53                      |  nop                            1099
  bc = true;
  // iaddi vi06, vi06, -0x1     |  nop                            1100
  vu.vi06 = vu.vi06 + -1;
  if (bc) {
    goto L53;
  }

L67:
  // sqi.xyzw vf24, vi04        |  sub.xyzw vf23, vf22, vf21      1101
  vu.vf23.sub(Mask::xyzw, vu.vf22, vu.vf21);
  sq_buffer(Mask::xyzw, vu.vf24, vu.vi04++);
  // sqi.xyzw vf27, vi04        |  sub.xyzw vf26, vf25, vf24      1102
  vu.vf26.sub(Mask::xyzw, vu.vf25, vu.vf24);
  sq_buffer(Mask::xyzw, vu.vf27, vu.vi04++);
  // sqi.xyzw vf21, vi04        |  sub.xyzw vf29, vf28, vf27      1103
  vu.vf29.sub(Mask::xyzw, vu.vf28, vu.vf27);
  sq_buffer(Mask::xyzw, vu.vf21, vu.vi04++);
  // BRANCH!
  // ibeq vi03, vi04, L53       |  nop                            1104
  bc = (vu.vi03 == vu.vi04);
  // nop                        |  addx.w vf30, vf23, vf23        1105
  vu.vf30.add(Mask::w, vu.vf23, vu.vf23.x());
  if (bc) {
    goto L53;
  }

  // nop                        |  addw.x vf30, vf21, vf21        1106
  vu.vf30.add(Mask::x, vu.vf21, vu.vf21.w());
  // div Q, vf30.x, vf30.w      |  nop                            1107
  vu.Q = vu.vf30.x() / vu.vf30.w();
  // waitq                      |  nop                            1108
  // ASSERT(false);
  // nop                        |  mul.xyzw vf26, vf26, Q         1109
  vu.vf26.mul(Mask::xyzw, vu.vf26, vu.Q);
  // nop                        |  mul.xyzw vf29, vf29, Q         1110
  vu.vf29.mul(Mask::xyzw, vu.vf29, vu.Q);
  // nop                        |  mul.xyzw vf23, vf23, Q         1111
  vu.vf23.mul(Mask::xyzw, vu.vf23, vu.Q);
  // nop                        |  sub.xyzw vf26, vf24, vf26      1112
  vu.vf26.sub(Mask::xyzw, vu.vf24, vu.vf26);
  // nop                        |  sub.xyzw vf29, vf27, vf29      1113
  vu.vf29.sub(Mask::xyzw, vu.vf27, vu.vf29);
  // nop                        |  sub.xyzw vf23, vf21, vf23      1114
  vu.vf23.sub(Mask::xyzw, vu.vf21, vu.vf23);
  // iaddi vi06, vi06, 0x1      |  nop                            1115
  vu.vi06 = vu.vi06 + 1;
  // sqi.xyzw vf26, vi04        |  nop                            1116
  sq_buffer(Mask::xyzw, vu.vf26, vu.vi04++);
  // sqi.xyzw vf29, vi04        |  nop                            1117
  sq_buffer(Mask::xyzw, vu.vf29, vu.vi04++);
  // BRANCH!
  // b L53                      |  nop                            1118
  bc = true;
  // sqi.xyzw vf23, vi04        |  nop                            1119
  sq_buffer(Mask::xyzw, vu.vf23, vu.vi04++);
  if (bc) {
    goto L53;
  }

L68:
  // nop                        |  sub.xyzw vf23, vf21, vf22      1120
  vu.vf23.sub(Mask::xyzw, vu.vf21, vu.vf22);
  // nop                        |  sub.xyzw vf26, vf24, vf25      1121
  vu.vf26.sub(Mask::xyzw, vu.vf24, vu.vf25);
  // nop                        |  sub.xyzw vf29, vf27, vf28      1122
  vu.vf29.sub(Mask::xyzw, vu.vf27, vu.vf28);
  // nop                        |  addx.w vf30, vf23, vf23        1123
  vu.vf30.add(Mask::w, vu.vf23, vu.vf23.x());
  // nop                        |  addw.x vf30, vf22, vf22        1124
  vu.vf30.add(Mask::x, vu.vf22, vu.vf22.w());
  // div Q, vf30.x, vf30.w      |  nop                            1125
  vu.Q = vu.vf30.x() / vu.vf30.w();
  // waitq                      |  nop                            1126
  // ASSERT(false);
  // nop                        |  mul.xyzw vf26, vf26, Q         1127
  vu.vf26.mul(Mask::xyzw, vu.vf26, vu.Q);
  // nop                        |  mul.xyzw vf29, vf29, Q         1128
  vu.vf29.mul(Mask::xyzw, vu.vf29, vu.Q);
  // nop                        |  mul.xyzw vf23, vf23, Q         1129
  vu.vf23.mul(Mask::xyzw, vu.vf23, vu.Q);
  // nop                        |  sub.xyzw vf26, vf25, vf26      1130
  vu.vf26.sub(Mask::xyzw, vu.vf25, vu.vf26);
  // nop                        |  sub.xyzw vf29, vf28, vf29      1131
  vu.vf29.sub(Mask::xyzw, vu.vf28, vu.vf29);
  // nop                        |  sub.xyzw vf23, vf22, vf23      1132
  vu.vf23.sub(Mask::xyzw, vu.vf22, vu.vf23);
  // sqi.xyzw vf26, vi04        |  nop                            1133
  sq_buffer(Mask::xyzw, vu.vf26, vu.vi04++);
  // sqi.xyzw vf29, vi04        |  nop                            1134
  sq_buffer(Mask::xyzw, vu.vf29, vu.vi04++);
  // BRANCH!
  // b L53                      |  nop                            1135
  bc = true;
  // sqi.xyzw vf23, vi04        |  nop                            1136
  sq_buffer(Mask::xyzw, vu.vf23, vu.vi04++);
  if (bc) {
    goto L53;
  }

L69:
  // BRANCH!
  // b L55                      |  nop                            1137
  bc = true;
  // iaddi vi06, vi06, -0x1     |  nop                            1138
  vu.vi06 = vu.vi06 + -1;
  if (bc) {
    goto L55;
  }

L70:
  // sqi.xyzw vf24, vi04        |  sub.xyzw vf23, vf22, vf21      1139
  vu.vf23.sub(Mask::xyzw, vu.vf22, vu.vf21);
  sq_buffer(Mask::xyzw, vu.vf24, vu.vi04++);
  // sqi.xyzw vf27, vi04        |  sub.xyzw vf26, vf25, vf24      1140
  vu.vf26.sub(Mask::xyzw, vu.vf25, vu.vf24);
  sq_buffer(Mask::xyzw, vu.vf27, vu.vi04++);
  // sqi.xyzw vf21, vi04        |  sub.xyzw vf29, vf28, vf27      1141
  vu.vf29.sub(Mask::xyzw, vu.vf28, vu.vf27);
  sq_buffer(Mask::xyzw, vu.vf21, vu.vi04++);
  // BRANCH!
  // ibeq vi03, vi04, L55       |  nop                            1142
  bc = (vu.vi03 == vu.vi04);
  // nop                        |  subx.w vf30, vf23, vf23        1143
  vu.vf30.sub(Mask::w, vu.vf23, vu.vf23.x());
  if (bc) {
    goto L55;
  }

  // nop                        |  subw.x vf30, vf21, vf21        1144
  vu.vf30.sub(Mask::x, vu.vf21, vu.vf21.w());
  // div Q, vf30.x, vf30.w      |  nop                            1145
  vu.Q = vu.vf30.x() / vu.vf30.w();
  // waitq                      |  nop                            1146
  // ASSERT(false);
  // nop                        |  mul.xyzw vf26, vf26, Q         1147
  vu.vf26.mul(Mask::xyzw, vu.vf26, vu.Q);
  // nop                        |  mul.xyzw vf29, vf29, Q         1148
  vu.vf29.mul(Mask::xyzw, vu.vf29, vu.Q);
  // nop                        |  mul.xyzw vf23, vf23, Q         1149
  vu.vf23.mul(Mask::xyzw, vu.vf23, vu.Q);
  // nop                        |  add.xyzw vf26, vf24, vf26      1150
  vu.vf26.add(Mask::xyzw, vu.vf24, vu.vf26);
  // nop                        |  add.xyzw vf29, vf27, vf29      1151
  vu.vf29.add(Mask::xyzw, vu.vf27, vu.vf29);
  // nop                        |  add.xyzw vf23, vf21, vf23      1152
  vu.vf23.add(Mask::xyzw, vu.vf21, vu.vf23);
  // iaddi vi06, vi06, 0x1      |  nop                            1153
  vu.vi06 = vu.vi06 + 1;
  // sqi.xyzw vf26, vi04        |  nop                            1154
  sq_buffer(Mask::xyzw, vu.vf26, vu.vi04++);
  // sqi.xyzw vf29, vi04        |  nop                            1155
  sq_buffer(Mask::xyzw, vu.vf29, vu.vi04++);
  // BRANCH!
  // b L55                      |  nop                            1156
  bc = true;
  // sqi.xyzw vf23, vi04        |  nop                            1157
  sq_buffer(Mask::xyzw, vu.vf23, vu.vi04++);
  if (bc) {
    goto L55;
  }

L71:
  // nop                        |  sub.xyzw vf23, vf21, vf22      1158
  vu.vf23.sub(Mask::xyzw, vu.vf21, vu.vf22);
  // nop                        |  sub.xyzw vf26, vf24, vf25      1159
  vu.vf26.sub(Mask::xyzw, vu.vf24, vu.vf25);
  // nop                        |  sub.xyzw vf29, vf27, vf28      1160
  vu.vf29.sub(Mask::xyzw, vu.vf27, vu.vf28);
  // nop                        |  subx.w vf30, vf23, vf23        1161
  vu.vf30.sub(Mask::w, vu.vf23, vu.vf23.x());
  // nop                        |  subw.x vf30, vf22, vf22        1162
  vu.vf30.sub(Mask::x, vu.vf22, vu.vf22.w());
  // div Q, vf30.x, vf30.w      |  nop                            1163
  vu.Q = vu.vf30.x() / vu.vf30.w();
  // waitq                      |  nop                            1164
  // ASSERT(false);
  // nop                        |  mul.xyzw vf26, vf26, Q         1165
  vu.vf26.mul(Mask::xyzw, vu.vf26, vu.Q);
  // nop                        |  mul.xyzw vf29, vf29, Q         1166
  vu.vf29.mul(Mask::xyzw, vu.vf29, vu.Q);
  // nop                        |  mul.xyzw vf23, vf23, Q         1167
  vu.vf23.mul(Mask::xyzw, vu.vf23, vu.Q);
  // nop                        |  add.xyzw vf26, vf25, vf26      1168
  vu.vf26.add(Mask::xyzw, vu.vf25, vu.vf26);
  // nop                        |  add.xyzw vf29, vf28, vf29      1169
  vu.vf29.add(Mask::xyzw, vu.vf28, vu.vf29);
  // nop                        |  add.xyzw vf23, vf22, vf23      1170
  vu.vf23.add(Mask::xyzw, vu.vf22, vu.vf23);
  // sqi.xyzw vf26, vi04        |  nop                            1171
  sq_buffer(Mask::xyzw, vu.vf26, vu.vi04++);
  // sqi.xyzw vf29, vi04        |  nop                            1172
  sq_buffer(Mask::xyzw, vu.vf29, vu.vi04++);
  // BRANCH!
  // b L55                      |  nop                            1173
  bc = true;
  // sqi.xyzw vf23, vi04        |  nop                            1174
  sq_buffer(Mask::xyzw, vu.vf23, vu.vi04++);
  if (bc) {
    goto L55;
  }
}