]> git.ipfire.org Git - thirdparty/LuaJIT.git/commitdiff
PPC: Add dual-number mode interpreter.
authorMike Pall <mike>
Wed, 13 Jul 2011 19:36:17 +0000 (21:36 +0200)
committerMike Pall <mike>
Wed, 13 Jul 2011 19:36:17 +0000 (21:36 +0200)
src/buildvm_ppc.dasc
src/buildvm_ppc.h
src/lj_arch.h
src/lj_frame.h

index 2964e0e2df7d6f28bf7d0aa64a4742279330823c..de3346cbf09b222c972aa8e1a5d5a56cb8e36b31 100644 (file)
 |.define LREG,         r18     // Register holding lua_State (also in SAVE_L).
 |.define MULTRES,      r19     // Size of multi-result: (nresults+1)*8.
 |
-|// Constants for vectorized type-comparisons (hi+low GPR). C callee-save.
+|// Constants for type-comparisons, stores and conversions. C callee-save.
 |.define TISNUM,       r22
 |.define TISNIL,       r23
 |.define ZERO,         r24
-|.define TISSTR,       r25     // NYI: remove.
-|.define TISTAB,       r26     // NYI: remove.
-|.define TISFUNC,      r27     // NYI: remove.
-|.define TOBIT,                r28     // NYI: use FP reg.
+|.define TOBIT,                f30
+|.define TONUM,                f31
 |
 |// The following temporaries are not saved across C calls, except for RA.
 |.define RA,           r20     // Callee-save.
@@ -57,8 +55,8 @@
 |.define CARG4,                r6      // Overlaps TMP3.
 |.define CARG5,                r7      // Overlaps INS.
 |
-|.define CARGF1,       f1
-|.define CARGF2,       f2
+|.define FARG1,                f1
+|.define FARG2,                f2
 |
 |.define CRET1,                r3
 |.define CRET2,                r4
 |// Back chain for sp: 256(sp) <-- sp entering interpreter
 |.define SAVE_GPR_,    184     // .. 184+18*4: 32 bit GPR saves.
 |.define SAVE_FPR_,    40      // .. 40+18*8: 64 bit FPR saves.
-|.define SAVE_UNUSED,  32(sp)  // 8 unused bytes for alignment.
+|.define TONUM_LO,     36(sp)
+|.define TONUM_HI,     32(sp)
 |.define SAVE_ERRF,    28(sp)  // 32 bit C frame info.
 |.define SAVE_NRES,    24(sp)
 |.define SAVE_CFRAME,  20(sp)
 |.define SAVE_L,       16(sp)
-|.define SAVE_PC,      12(sp)
-|.define SAVE_MULTRES, 8(sp)
+|.define SAVE_MULTRES, 12(sp)
+|.define SAVE_PC,      8(sp)
 |// Next frame lr:     4(sp)
 |// Back chain for sp: 0(sp)   <-- sp while in interpreter
 |
+|.define TMPD_LO,      SAVE_MULTRES
+|.define TMPD_BLO,     15(sp)
+|.define TMPD_HI,      SAVE_PC
+|.define TMPD,         SAVE_PC
+|.define TONUM_D,      TONUM_HI
+|
 |.macro save_, reg
 |  stw r..reg, SAVE_GPR_+(reg-14)*4(sp)
 |  stfd f..reg, SAVE_FPR_+(reg-14)*8(sp)
 |// Trap for not-yet-implemented parts.
 |.macro NYI; tw 4, sp, sp; .endmacro
 |
+|// int/FP conversions.
+|.macro tonum_i, freg, reg
+|  xoris reg, reg, 0x8000
+|  stw reg, TONUM_LO
+|  lfd freg, TONUM_D
+|  fsub freg, freg, TONUM
+|.endmacro
+|
+|.macro tonum_u, freg, reg
+|  stw reg, TONUM_LO
+|  lfd freg, TONUM_D
+|  fsub freg, freg, TOBIT
+|.endmacro
+|
+|.macro toint, reg, freg, tmpfreg
+|  fctiwz tmpfreg, freg
+|  stfd tmpfreg, TMPD
+|  lwz reg, TMPD_LO
+|.endmacro
+|
+|.macro toint, reg, freg
+|  toint reg, freg, freg
+|.endmacro
+|
 |//-----------------------------------------------------------------------
 |
 |// Access to frame relative to BASE.
 |
 |// Macros to test operand types.
 |.macro checknum, reg; cmplw reg, TISNUM; .endmacro
+|.macro checknum, cr, reg; cmplw cr, reg, TISNUM; .endmacro
 |.macro checkstr, reg; cmpwi reg, LJ_TSTR; .endmacro
 |.macro checktab, reg; cmpwi reg, LJ_TTAB; .endmacro
 |.macro checkfunc, reg; cmpwi reg, LJ_TFUNC; .endmacro
 |.macro checknil, reg; cmpwi reg, LJ_TNIL; .endmacro
-|.macro checkok, label; beq label; .endmacro  // NYI: remove.
-|.macro checkfail, label; bne label; .endmacro  // NYI: remove.
-|.macro checkanyfail, label; bns label; .endmacro  // NYI: remove.
-|.macro checkallok, label; bso label; .endmacro  // NYI: remove.
 |
 |.macro branch_RD
 |  srwi TMP0, RD, 1
@@ -276,7 +302,7 @@ static void build_subroutines(BuildCtx *ctx)
   |->vm_returnp:
   |  // See vm_return. Also: TMP2 = previous base.
   |  andi. TMP0, PC, FRAME_P
-  |   evsplati TMP1, LJ_TTRUE
+  |   li TMP1, LJ_TTRUE
   |  beq ->cont_dispatch
   |
   |  // Return from pcall or xpcall fast func.
@@ -309,9 +335,9 @@ static void build_subroutines(BuildCtx *ctx)
   |  beq >2
   |1:
   |  addic. TMP1, TMP1, -8
-  |   evldd TMP0, 0(RA)
+  |   lfd f0, 0(RA)
   |    addi RA, RA, 8
-  |   evstdd TMP0, 0(BASE)
+  |   stfd f0, 0(BASE)
   |    addi BASE, BASE, 8
   |  bne <1
   |
@@ -336,16 +362,17 @@ static void build_subroutines(BuildCtx *ctx)
   |  lwz TMP1, L->maxstack
   |  cmplw BASE, TMP1
   |  bge >8
-  |  evstdd TISNIL, 0(BASE)
+  |  stw TISNIL, 0(BASE)
   |  addi RD, RD, 8
   |  addi BASE, BASE, 8
   |  b <2
   |
   |7:  // Less results wanted.
+  |  subfic TMP3, TMP2, 0              // LUA_MULTRET+1 case?
   |   sub TMP0, RD, TMP2
-  |  cmpwi TMP2, 0                     // LUA_MULTRET+1 case?
-  |   sub TMP0, BASE, TMP0             // Subtract the difference.
-  |  iseleq BASE, BASE, TMP0           // Either keep top or shrink it.
+  |  subfe TMP1, TMP1, TMP1            // TMP1 = TMP2 == 0 ? 0 : -1
+  |   and TMP0, TMP0, TMP1
+  |  sub BASE, BASE, TMP0              // Either keep top or shrink it.
   |  b <3
   |
   |8:  // Corner case: need to grow stack for filling up results.
@@ -380,24 +407,25 @@ static void build_subroutines(BuildCtx *ctx)
   |  rlwinm sp, CARG1, 0, 0, 29
   |->vm_unwind_ff_eh:                  // Landing pad for external unwinder.
   |  lwz L, SAVE_L
-  |     evsplati TISNUM, LJ_TISNUM+1   // Setup type comparison constants.
-  |     evsplati TISFUNC, LJ_TFUNC
-  |     lus TOBIT, 0x4338
-  |     evsplati TISTAB, LJ_TTAB
-  |     li TMP0, 0
+  |     li TISNUM, LJ_TISNUM           // Setup type comparison constants.
   |  lwz BASE, L->base
-  |     evmergelo TOBIT, TOBIT, TMP0
+  |     lus TMP3, 0x59c0               // TOBIT = 2^52 + 2^51 (float).
   |   lwz DISPATCH, L->glref           // Setup pointer to dispatch table.
-  |     evsplati TISSTR, LJ_TSTR
+  |     li ZERO, 0
+  |     stw TMP3, TMPD
   |  li TMP1, LJ_TFALSE
-  |     evsplati TISNIL, LJ_TNIL
+  |     ori TMP3, TMP3, 0x0004         // TONUM = 2^52 + 2^51 + 2^31 (float).
+  |     li TISNIL, LJ_TNIL
   |    li_vmstate INTERP
+  |     lfs TOBIT, TMPD
   |  lwz PC, FRAME_PC(BASE)            // Fetch PC of previous frame.
   |  la RA, -8(BASE)                   // Results start at BASE-8.
+  |     stw TMP3, TMPD
   |   addi DISPATCH, DISPATCH, GG_G2DISP
   |  stw TMP1, 0(RA)                   // Prepend false to error message.
   |  li RD, 16                         // 2 results: false + error message.
   |    st_vmstate
+  |     lfs TONUM, TMPD
   |  b ->vm_returnc
   |
   |//-----------------------------------------------------------------------
@@ -454,22 +482,25 @@ static void build_subroutines(BuildCtx *ctx)
   |  // Resume after yield (like a return).
   |  mr RA, BASE
   |   lwz BASE, L->base
-  |    evsplati TISNUM, LJ_TISNUM+1    // Setup type comparison constants.
+  |     li TISNUM, LJ_TISNUM           // Setup type comparison constants.
   |   lwz TMP1, L->top
-  |    evsplati TISFUNC, LJ_TFUNC
-  |    lus TOBIT, 0x4338
-  |    evsplati TISTAB, LJ_TTAB
   |  lwz PC, FRAME_PC(BASE)
-  |    li TMP2, 0
-  |    evsplati TISSTR, LJ_TSTR
+  |     lus TMP3, 0x59c0               // TOBIT = 2^52 + 2^51 (float).
   |   sub RD, TMP1, BASE
-  |    evmergelo TOBIT, TOBIT, TMP2
   |    stb CARG3, L->status
+  |     stw TMP3, TMPD
   |  andi. TMP0, PC, FRAME_TYPE
-  |    li_vmstate INTERP
+  |     ori TMP3, TMP3, 0x0004         // TONUM = 2^52 + 2^51 + 2^31 (float).
+  |     lfs TOBIT, TMPD
+  |     li ZERO, 0
+  |     stw TMP3, TMPD
   |   addi RD, RD, 8
-  |    evsplati TISNIL, LJ_TNIL
+  |     lus TMP0, 0x4338               // Hiword of 2^52 + 2^51 (double)
   |   mr MULTRES, RD
+  |     stw TMP0, TONUM_HI
+  |    li_vmstate INTERP
+  |     lfs TONUM, TMPD
+  |     li TISNIL, LJ_TNIL
   |    st_vmstate
   |  beq ->BC_RET_Z
   |  b ->vm_return
@@ -500,27 +531,29 @@ static void build_subroutines(BuildCtx *ctx)
   |
   |3:  // Entry point for vm_cpcall/vm_resume (BASE = base, PC = ftype).
   |  lwz TMP2, L->base                 // TMP2 = old base (used in vmeta_call).
-  |    evsplati TISNUM, LJ_TISNUM+1    // Setup type comparison constants.
+  |     li TISNUM, LJ_TISNUM           // Setup type comparison constants.
   |   lwz TMP1, L->top
-  |    evsplati TISFUNC, LJ_TFUNC
+  |     lus TMP3, 0x59c0               // TOBIT = 2^52 + 2^51 (float).
   |  add PC, PC, BASE
-  |    evsplati TISTAB, LJ_TTAB
-  |    lus TOBIT, 0x4338
-  |    li TMP0, 0
+  |     stw TMP3, TMPD
+  |     li ZERO, 0
+  |     ori TMP3, TMP3, 0x0004         // TONUM = 2^52 + 2^51 + 2^31 (float).
+  |     lfs TOBIT, TMPD
   |  sub PC, PC, TMP2                  // PC = frame delta + frame type
-  |    evsplati TISSTR, LJ_TSTR
+  |     stw TMP3, TMPD
+  |     lus TMP0, 0x4338               // Hiword of 2^52 + 2^51 (double)
   |   sub NARGS8:RC, TMP1, BASE
-  |    evmergelo TOBIT, TOBIT, TMP0
+  |     stw TMP0, TONUM_HI
   |    li_vmstate INTERP
-  |    evsplati TISNIL, LJ_TNIL
+  |     lfs TONUM, TMPD
+  |     li TISNIL, LJ_TNIL
   |    st_vmstate
   |
   |->vm_call_dispatch:
   |  // TMP2 = old base, BASE = new base, RC = nargs*8, PC = caller PC
-  |  li TMP0, -8
-  |  evlddx LFUNC:RB, BASE, TMP0
-  |  checkfunc LFUNC:RB
-  |  checkfail ->vmeta_call
+  |  lwz TMP0, FRAME_PC(BASE)
+  |   lwz LFUNC:RB, FRAME_FUNC(BASE)
+  |  checkfunc TMP0; bne ->vmeta_call
   |
   |->vm_call_dispatch_f:
   |  ins_call
@@ -570,7 +603,7 @@ static void build_subroutines(BuildCtx *ctx)
   |  beq >1
   |   subi TMP2, RD, 8
   |    lwz TMP1, LFUNC:TMP1->pc
-  |   evstddx TISNIL, RA, TMP2         // Ensure one valid arg.
+  |   stwx TISNIL, RA, TMP2            // Ensure one valid arg.
   |    lwz KBASE, PC2PROTO(k)(TMP1)
   |  // BASE = base, RA = resultptr, RB = meta base
   |  mtctr TMP0
@@ -585,42 +618,45 @@ static void build_subroutines(BuildCtx *ctx)
   |  lwz INS, -4(PC)
   |   subi CARG2, RB, 16
   |  decode_RB8 SAVE0, INS
-  |   evldd TMP0, 0(RA)
+  |   lfd f0, 0(RA)
   |  add TMP1, BASE, SAVE0
   |   stw BASE, L->base
   |  cmplw TMP1, CARG2
   |   sub CARG3, CARG2, TMP1
   |  decode_RA8 RA, INS
-  |   evstdd TMP0, 0(CARG2)
+  |   stfd f0, 0(CARG2)
   |  bne ->BC_CAT_Z
-  |   evstddx TMP0, BASE, RA
+  |   stfdx f0, BASE, RA
   |  b ->cont_nop
   |
   |//-- Table indexing metamethods -----------------------------------------
   |
   |->vmeta_tgets1:
-  |  evmergelo STR:RC, TISSTR, STR:RC
   |  la CARG3, DISPATCH_GL(tmptv)(DISPATCH)
+  |  li TMP0, LJ_TSTR
   |   decode_RB8 RB, INS
-  |  evstdd STR:RC, 0(CARG3)
+  |  stw STR:RC, 4(CARG3)
   |   add CARG2, BASE, RB
+  |  stw TMP0, 0(CARG3)
   |  b >1
   |
   |->vmeta_tgets:
-  |  evmergelo TAB:RB, TISTAB, TAB:RB
   |  la CARG2, DISPATCH_GL(tmptv)(DISPATCH)
-  |   evmergelo STR:RC, TISSTR, STR:RC
-  |  evstdd TAB:RB, 0(CARG2)
+  |  li TMP0, LJ_TTAB
+  |  stw TAB:RB, 4(CARG2)
   |   la CARG3, DISPATCH_GL(tmptv2)(DISPATCH)
-  |   evstdd STR:RC, 0(CARG3)
+  |  stw TMP0, 0(CARG2)
+  |   li TMP1, LJ_TSTR
+  |   stw STR:RC, 4(CARG3)
+  |   stw TMP1, 0(CARG3)
   |  b >1
   |
   |->vmeta_tgetb:                      // TMP0 = index
-  |  efdcfsi TMP0, TMP0
+  |  tonum_u f0, TMP0
   |   decode_RB8 RB, INS
   |  la CARG3, DISPATCH_GL(tmptv)(DISPATCH)
   |   add CARG2, BASE, RB
-  |  evstdd TMP0, 0(CARG3)
+  |  stfd f0, 0(CARG3)
   |  b >1
   |
   |->vmeta_tgetv:
@@ -636,9 +672,10 @@ static void build_subroutines(BuildCtx *ctx)
   |  // Returns TValue * (finished) or NULL (metamethod).
   |  cmplwi CRET1, 0
   |  beq >3
-  |  evldd TMP0, 0(CRET1)
-  |  evstddx TMP0, BASE, RA
-  |  ins_next
+  |   lfd f0, 0(CRET1)
+  |  ins_next1
+  |   stfdx f0, BASE, RA
+  |  ins_next2
   |
   |3:  // Call __index metamethod.
   |  // BASE = base, L->top = new base, stack = cont/func/t/k
@@ -653,28 +690,31 @@ static void build_subroutines(BuildCtx *ctx)
   |//-----------------------------------------------------------------------
   |
   |->vmeta_tsets1:
-  |  evmergelo STR:RC, TISSTR, STR:RC
   |  la CARG3, DISPATCH_GL(tmptv)(DISPATCH)
+  |  li TMP0, LJ_TSTR
   |   decode_RB8 RB, INS
-  |  evstdd STR:RC, 0(CARG3)
+  |  stw STR:RC, 4(CARG3)
   |   add CARG2, BASE, RB
+  |  stw TMP0, 0(CARG3)
   |  b >1
   |
   |->vmeta_tsets:
-  |  evmergelo TAB:RB, TISTAB, TAB:RB
   |  la CARG2, DISPATCH_GL(tmptv)(DISPATCH)
-  |   evmergelo STR:RC, TISSTR, STR:RC
-  |  evstdd TAB:RB, 0(CARG2)
+  |  li TMP0, LJ_TTAB
+  |  stw TAB:RB, 4(CARG2)
   |   la CARG3, DISPATCH_GL(tmptv2)(DISPATCH)
-  |   evstdd STR:RC, 0(CARG3)
+  |  stw TMP0, 0(CARG2)
+  |   li TMP1, LJ_TSTR
+  |   stw STR:RC, 4(CARG3)
+  |   stw TMP1, 0(CARG3)
   |  b >1
   |
   |->vmeta_tsetb:                      // TMP0 = index
-  |  efdcfsi TMP0, TMP0
+  |  tonum_u f0, TMP0
   |   decode_RB8 RB, INS
   |  la CARG3, DISPATCH_GL(tmptv)(DISPATCH)
   |   add CARG2, BASE, RB
-  |  evstdd TMP0, 0(CARG3)
+  |  stfd f0, 0(CARG3)
   |  b >1
   |
   |->vmeta_tsetv:
@@ -689,11 +729,12 @@ static void build_subroutines(BuildCtx *ctx)
   |  bl extern lj_meta_tset            // (lua_State *L, TValue *o, TValue *k)
   |  // Returns TValue * (finished) or NULL (metamethod).
   |  cmplwi CRET1, 0
-  |   evlddx TMP0, BASE, RA
+  |   lfdx f0, BASE, RA
   |  beq >3
   |  // NOBARRIER: lj_meta_tset ensures the table is not black.
-  |   evstdd TMP0, 0(CRET1)
-  |  ins_next
+  |  ins_next1
+  |   stfd f0, 0(CRET1)
+  |  ins_next2
   |
   |3:  // Call __newindex metamethod.
   |  // BASE = base, L->top = new base, stack = cont/func/t/k/(v)
@@ -703,7 +744,7 @@ static void build_subroutines(BuildCtx *ctx)
   |   add PC, TMP1, BASE
   |  lwz LFUNC:RB, FRAME_FUNC(BASE)    // Guaranteed to be a function here.
   |   li NARGS8:RC, 24                 // 3 args for func(t, k, v)
-  |  evstdd TMP0, 16(BASE)             // Copy value to third argument.
+  |  stfd f0, 16(BASE)                 // Copy value to third argument.
   |  b ->vm_call_dispatch_f
   |
   |//-- Comparison metamethods ---------------------------------------------
@@ -721,33 +762,35 @@ static void build_subroutines(BuildCtx *ctx)
   |3:
   |  cmplwi CRET1, 1
   |  bgt ->vmeta_binop
+  |  subfic CRET1, CRET1, 0
   |4:
   |  lwz INS, 0(PC)
   |   addi PC, PC, 4
   |  decode_RD4 TMP2, INS
-  |  addis TMP3, PC, -(BCBIAS_J*4 >> 16)
-  |  add TMP2, TMP2, TMP3
-  |  isellt PC, PC, TMP2
+  |  addis TMP2, TMP2, -(BCBIAS_J*4 >> 16)
+  |  and TMP2, TMP2, CRET1
+  |  add PC, PC, TMP2
   |->cont_nop:
   |  ins_next
   |
   |->cont_ra:                          // RA = resultptr
   |  lwz INS, -4(PC)
-  |   evldd TMP0, 0(RA)
+  |   lfd f0, 0(RA)
   |  decode_RA8 TMP1, INS
-  |   evstddx TMP0, BASE, TMP1
+  |   stfdx f0, BASE, TMP1
   |  b ->cont_nop
   |
   |->cont_condt:                       // RA = resultptr
   |  lwz TMP0, 0(RA)
-  |   li TMP1, LJ_TTRUE
-  |  cmplw TMP1, TMP0                  // Branch if result is true.
+  |  subfic TMP0, TMP0, LJ_TTRUE       // Branch if result is true.
+  |  subfe CRET1, CRET1, CRET1
+  |  not CRET1, CRET1
   |  b <4
   |
   |->cont_condf:                       // RA = resultptr
   |  lwz TMP0, 0(RA)
-  |   li TMP1, LJ_TFALSE
-  |  cmplw TMP0, TMP1                  // Branch if result is false.
+  |  subfic TMP0, TMP0, LJ_TTRUE       // Branch if result is false.
+  |  subfe CRET1, CRET1, CRET1
   |  b <4
   |
   |->vmeta_equal:
@@ -773,8 +816,8 @@ static void build_subroutines(BuildCtx *ctx)
   |  b >1
   |
   |->vmeta_unm:
-  |  add CARG3, BASE, RD
-  |  mr CARG4, CARG3
+  |  mr CARG3, RD
+  |  mr CARG4, RD
   |  b >1
   |
   |->vmeta_arith_vv:
@@ -796,6 +839,7 @@ static void build_subroutines(BuildCtx *ctx)
   |  // BASE = old base, CRET1 = new base, stack = cont/func/o1/o2
   |  sub TMP1, CRET1, BASE
   |   stw PC, -16(CRET1)               // [cont|PC]
+  |   mr TMP2, BASE
   |  addi PC, TMP1, FRAME_CONT
   |   mr BASE, CRET1
   |  li NARGS8:RC, 16                  // 2 args for func(o1, o2).
@@ -805,7 +849,7 @@ static void build_subroutines(BuildCtx *ctx)
 #ifdef LUAJIT_ENABLE_LUA52COMPAT
   |  mr SAVE0, CARG1
 #endif
-  |  add CARG2, BASE, RD
+  |  mr CARG2, RD
   |   stw BASE, L->base
   |  mr CARG1, L
   |   stw PC, SAVE_PC
@@ -882,29 +926,40 @@ static void build_subroutines(BuildCtx *ctx)
   |.macro .ffunc_1, name
   |->ff_ .. name:
   |  cmplwi NARGS8:RC, 8
-  |   evldd CARG1, 0(BASE)
+  |   lwz CARG3, 0(BASE)
+  |    lwz CARG1, 4(BASE)
   |  blt ->fff_fallback
   |.endmacro
   |
   |.macro .ffunc_2, name
   |->ff_ .. name:
   |  cmplwi NARGS8:RC, 16
-  |   evldd CARG1, 0(BASE)
-  |   evldd CARG2, 8(BASE)
+  |   lwz CARG3, 0(BASE)
+  |    lwz CARG4, 8(BASE)
+  |   lwz CARG1, 4(BASE)
+  |    lwz CARG2, 12(BASE)
   |  blt ->fff_fallback
   |.endmacro
   |
   |.macro .ffunc_n, name
-  |  .ffunc_1 name
-  |  checknum CARG1
-  |  checkfail ->fff_fallback
+  |->ff_ .. name:
+  |  cmplwi NARGS8:RC, 8
+  |   lwz CARG3, 0(BASE)
+  |    lfd FARG1, 0(BASE)
+  |  blt ->fff_fallback
+  |  checknum CARG3; bge ->fff_fallback
   |.endmacro
   |
   |.macro .ffunc_nn, name
-  |  .ffunc_2 name
-  |  evmergehi TMP0, CARG1, CARG2
-  |  checknum TMP0
-  |  checkanyfail ->fff_fallback
+  |->ff_ .. name:
+  |  cmplwi NARGS8:RC, 16
+  |   lwz CARG3, 0(BASE)
+  |    lfd FARG1, 0(BASE)
+  |   lwz CARG4, 8(BASE)
+  |    lfd FARG2, 8(BASE)
+  |  blt ->fff_fallback
+  |  checknum CARG3; bge ->fff_fallback
+  |  checknum CARG4; bge ->fff_fallback
   |.endmacro
   |
   |// Inlined GC threshold check. Caveat: uses TMP0 and TMP1.
@@ -917,24 +972,22 @@ static void build_subroutines(BuildCtx *ctx)
   |
   |//-- Base library: checks -----------------------------------------------
   |
-  |.ffunc assert
-  |  cmplwi NARGS8:RC, 8
-  |   evldd TMP0, 0(BASE)
-  |  blt ->fff_fallback
-  |  evaddw TMP1, TISNIL, TISNIL       // Synthesize LJ_TFALSE.
-  |  la RA, -8(BASE)
-  |   evcmpltu cr1, TMP0, TMP1
+  |.ffunc_1 assert
+  |  li TMP1, LJ_TFALSE
+  |   la RA, -8(BASE)
+  |  cmplw cr1, CARG3, TMP1
   |    lwz PC, FRAME_PC(BASE)
   |  bge cr1, ->fff_fallback
-  |   evstdd TMP0, 0(RA)
+  |   stw CARG3, 0(RA)
   |  addi RD, NARGS8:RC, 8             // Compute (nresults+1)*8.
-  |   beq ->fff_res                    // Done if exactly 1 argument.
+  |   stw CARG1, 4(RA)
+  |  beq ->fff_res                     // Done if exactly 1 argument.
   |  li TMP1, 8
   |  subi RC, RC, 8
   |1:
   |  cmplw TMP1, RC
-  |   evlddx TMP0, BASE, TMP1
-  |   evstddx TMP0, RA, TMP1
+  |   lfdx f0, BASE, TMP1
+  |   stfdx f0, RA, TMP1
   |    addi TMP1, TMP1, 8
   |  bne <1
   |  b ->fff_res
@@ -943,71 +996,70 @@ static void build_subroutines(BuildCtx *ctx)
   |  cmplwi NARGS8:RC, 8
   |   lwz CARG1, 0(BASE)
   |  blt ->fff_fallback
-  |    li TMP2, ~LJ_TNUMX
-  |  cmplw CARG1, TISNUM
-  |  not TMP1, CARG1
-  |  isellt TMP1, TMP2, TMP1
+  |  subfc TMP0, TISNUM, CARG1
+  |  subfe TMP2, CARG1, CARG1
+  |  orc TMP1, TMP2, TMP0
+  |  addi TMP1, TMP1, ~LJ_TISNUM+1
   |  slwi TMP1, TMP1, 3
   |   la TMP2, CFUNC:RB->upvalue
-  |  evlddx STR:CRET1, TMP2, TMP1
-  |  b ->fff_restv
+  |  lfdx FARG1, TMP2, TMP1
+  |  b ->fff_resn
   |
   |//-- Base library: getters and setters ---------------------------------
   |
   |.ffunc_1 getmetatable
-  |  checktab CARG1
-  |   evmergehi TMP1, CARG1, CARG1
-  |  checkfail >6
+  |  checktab CARG3; bne >6
   |1:  // Field metatable must be at same offset for GCtab and GCudata!
-  |  lwz TAB:RB, TAB:CARG1->metatable
+  |  lwz TAB:CARG1, TAB:CARG1->metatable
   |2:
-  |  evmr CRET1, TISNIL
-  |   cmplwi TAB:RB, 0
+  |  li CARG3, LJ_TNIL
+  |   cmplwi TAB:CARG1, 0
   |  lwz STR:RC, DISPATCH_GL(gcroot[GCROOT_MMNAME+MM_metatable])(DISPATCH)
   |   beq ->fff_restv
-  |  lwz TMP0, TAB:RB->hmask
-  |   evmergelo CRET1, TISTAB, TAB:RB  // Use metatable as default result.
+  |  lwz TMP0, TAB:CARG1->hmask
+  |   li CARG3, LJ_TTAB                        // Use metatable as default result.
   |  lwz TMP1, STR:RC->hash
-  |  lwz NODE:TMP2, TAB:RB->node
-  |   evmergelo STR:RC, TISSTR, STR:RC
+  |  lwz NODE:TMP2, TAB:CARG1->node
   |  and TMP1, TMP1, TMP0              // idx = str->hash & tab->hmask
   |  slwi TMP0, TMP1, 5
   |  slwi TMP1, TMP1, 3
   |  sub TMP1, TMP0, TMP1
   |  add NODE:TMP2, NODE:TMP2, TMP1    // node = tab->node + (idx*32-idx*8)
   |3:  // Rearranged logic, because we expect _not_ to find the key.
-  |  evldd TMP0, NODE:TMP2->key
-  |   evldd TMP1, NODE:TMP2->val
-  |  evcmpeq TMP0, STR:RC
-  |   lwz NODE:TMP2, NODE:TMP2->next
-  |  checkallok >5
-  |   cmplwi NODE:TMP2, 0
-  |   beq ->fff_restv                  // Not found, keep default result.
-  |   b <3
+  |  lwz CARG4, NODE:TMP2->key
+  |   lwz TMP0, 4+offsetof(Node, key)(NODE:TMP2)
+  |    lwz CARG2, NODE:TMP2->val
+  |     lwz TMP1, 4+offsetof(Node, val)(NODE:TMP2)
+  |  checkstr CARG4; bne >4
+  |   cmpw TMP0, STR:RC; beq >5
+  |4:
+  |  lwz NODE:TMP2, NODE:TMP2->next
+  |  cmplwi NODE:TMP2, 0
+  |  beq ->fff_restv                   // Not found, keep default result.
+  |  b <3
   |5:
-  |  checknil TMP1
-  |  checkok ->fff_restv               // Ditto for nil value.
-  |  evmr CRET1, TMP1                  // Return value of mt.__metatable.
+  |  checknil CARG2
+  |  beq ->fff_restv                   // Ditto for nil value.
+  |  mr CARG3, CARG2                   // Return value of mt.__metatable.
+  |  mr CARG1, TMP1
   |  b ->fff_restv
   |
   |6:
-  |  cmpwi TMP1, LJ_TUDATA
-  |   not TMP1, TMP1
-  |  beq <1
-  |  checknum CARG1
-  |   slwi TMP1, TMP1, 2
-  |   li TMP2, 4*~LJ_TNUMX
-  |  isellt TMP1, TMP2, TMP1
+  |  cmpwi CARG3, LJ_TUDATA; beq <1
+  |  subfc TMP0, TISNUM, CARG3
+  |  subfe TMP2, CARG3, CARG3
+  |  orc TMP1, TMP2, TMP0
+  |  addi TMP1, TMP1, ~LJ_TISNUM+1
+  |  slwi TMP1, TMP1, 2
   |   la TMP2, DISPATCH_GL(gcroot[GCROOT_BASEMT])(DISPATCH)
-  |  lwzx TAB:RB, TMP2, TMP1
+  |  lwzx TAB:CARG1, TMP2, TMP1
   |  b <2
   |
   |.ffunc_2 setmetatable
   |  // Fast path: no mt for table yet and not clearing the mt.
-  |  evmergehi TMP0, TAB:CARG1, TAB:CARG2
-  |  checktab TMP0
-  |  checkanyfail ->fff_fallback
+  |   checktab CARG3; bne ->fff_fallback
   |  lwz TAB:TMP1, TAB:CARG1->metatable
+  |   checktab CARG4; bne ->fff_fallback
   |  cmplwi TAB:TMP1, 0
   |   lbz TMP3, TAB:CARG1->marked
   |  bne ->fff_fallback
@@ -1018,60 +1070,61 @@ static void build_subroutines(BuildCtx *ctx)
   |  b ->fff_restv
   |
   |.ffunc rawget
-  |  cmplwi NARGS8:RC, 16
-  |   evldd CARG2, 0(BASE)
+  |  cmplwi NARGS8:RC, 8
+  |   lwz CARG4, 0(BASE)
+  |    lwz TAB:CARG2, 4(BASE)
   |  blt ->fff_fallback
-  |  checktab CARG2
+  |  checktab CARG4; bne ->fff_fallback
   |   la CARG3, 8(BASE)
-  |  checkfail ->fff_fallback
   |   mr CARG1, L
   |  bl extern lj_tab_get  // (lua_State *L, GCtab *t, cTValue *key)
   |  // Returns cTValue *.
-  |  evldd CRET1, 0(CRET1)
-  |  b ->fff_restv
+  |  lfd FARG1, 0(CRET1)
+  |  b ->fff_resn
   |
   |//-- Base library: conversions ------------------------------------------
   |
   |.ffunc tonumber
   |  // Only handles the number case inline (without a base argument).
   |  cmplwi NARGS8:RC, 8
-  |   evldd CARG1, 0(BASE)
+  |   lwz CARG1, 0(BASE)
+  |    lfd FARG1, 0(BASE)
   |  bne ->fff_fallback                        // Exactly one argument.
-  |  checknum CARG1
-  |  checkok ->fff_restv
-  |  b ->fff_fallback
+  |   checknum CARG1; bgt ->fff_fallback
+  |  b ->fff_resn
   |
   |.ffunc_1 tostring
   |  // Only handles the string or number case inline.
-  |  checkstr CARG1
+  |  checkstr CARG3
   |  // A __tostring method in the string base metatable is ignored.
-  |  checkok ->fff_restv               // String key?
+  |  beq ->fff_restv                   // String key?
   |  // Handle numbers inline, unless a number base metatable is present.
   |  lwz TMP0, DISPATCH_GL(gcroot[GCROOT_BASEMT_NUM])(DISPATCH)
-  |  checknum CARG1
+  |  checknum CARG3
   |  cmplwi cr1, TMP0, 0
   |   stw BASE, L->base                        // Add frame since C call can throw.
-  |  crand 4*cr0+eq, 4*cr0+eq, 4*cr1+eq
+  |  crorc 4*cr0+eq, 4*cr0+gt, 4*cr1+eq
   |   stw PC, SAVE_PC                  // Redundant (but a defined value).
-  |  bne ->fff_fallback
+  |  beq ->fff_fallback
   |  ffgccheck
   |  mr CARG1, L
   |  mr CARG2, BASE
   |  bl extern lj_str_fromnum          // (lua_State *L, lua_Number *np)
   |  // Returns GCstr *.
-  |  evmergelo STR:CRET1, TISSTR, STR:CRET1
+  |  li CARG3, LJ_TSTR
   |  b ->fff_restv
   |
   |//-- Base library: iterators -------------------------------------------
   |
   |.ffunc next
   |  cmplwi NARGS8:RC, 8
-  |   evldd CARG2, 0(BASE)
+  |   lwz CARG1, 0(BASE)
+  |    lwz TAB:CARG2, 4(BASE)
   |  blt ->fff_fallback
-  |   evstddx TISNIL, BASE, NARGS8:RC  // Set missing 2nd arg to nil.
-  |  checktab TAB:CARG2
+  |   stwx TISNIL, BASE, NARGS8:RC     // Set missing 2nd arg to nil.
+  |  checktab CARG1
   |   lwz PC, FRAME_PC(BASE)
-  |  checkfail ->fff_fallback
+  |  bne ->fff_fallback
   |   stw BASE, L->base                        // Add frame since C call can throw.
   |  mr CARG1, L
   |   stw BASE, L->top                 // Dummy frame length is ok.
@@ -1080,60 +1133,69 @@ static void build_subroutines(BuildCtx *ctx)
   |  bl extern lj_tab_next     // (lua_State *L, GCtab *t, TValue *key)
   |  // Returns 0 at end of traversal.
   |  cmplwi CRET1, 0
-  |   evmr CRET1, TISNIL
+  |   li CARG3, LJ_TNIL
   |  beq ->fff_restv                   // End of traversal: return nil.
-  |  evldd TMP0, 8(BASE)               // Copy key and value to results.
+  |  lfd f0, 8(BASE)                   // Copy key and value to results.
   |   la RA, -8(BASE)
-  |  evldd TMP1, 16(BASE)
-  |  evstdd TMP0, 0(RA)
+  |  lfd f1, 16(BASE)
+  |  stfd f0, 0(RA)
   |   li RD, (2+1)*8
-  |  evstdd TMP1, 8(RA)
+  |  stfd f1, 8(RA)
   |  b ->fff_res
   |
   |.ffunc_1 pairs
-  |  checktab TAB:CARG1
+  |  checktab CARG3
   |   lwz PC, FRAME_PC(BASE)
-  |  checkfail ->fff_fallback
+  |  bne ->fff_fallback
 #ifdef LUAJIT_ENABLE_LUA52COMPAT
   |   lwz TAB:TMP2, TAB:CARG1->metatable
-  |  evldd CFUNC:TMP0, CFUNC:RB->upvalue[0]
+  |  lfd f0, CFUNC:RB->upvalue[0]
   |   cmplwi TAB:TMP2, 0
   |  la RA, -8(BASE)
   |   bne ->fff_fallback
 #else
-  |  evldd CFUNC:TMP0, CFUNC:RB->upvalue[0]
+  |  lfd f0, CFUNC:RB->upvalue[0]
   |  la RA, -8(BASE)
 #endif
-  |   evstdd TISNIL, 8(BASE)
+  |   stw TISNIL, 8(BASE)
   |  li RD, (3+1)*8
-  |  evstdd CFUNC:TMP0, 0(RA)
+  |  stfd f0, 0(RA)
   |  b ->fff_res
   |
-  |.ffunc_2 ipairs_aux
-  |  checktab TAB:CARG1
+  |.ffunc ipairs_aux
+  |  cmplwi NARGS8:RC, 16
+  |   lwz CARG3, 0(BASE)
+  |    lwz TAB:CARG1, 4(BASE)
+  |   lwz CARG4, 8(BASE)
+  |    lfd FARG2, 8(BASE)
+  |  blt ->fff_fallback
+  |  checktab CARG3
+  |  checknum cr1, CARG4
   |   lwz PC, FRAME_PC(BASE)
-  |  checkfail ->fff_fallback
-  |  checknum CARG2
-  |    lus TMP3, 0x3ff0
-  |  checkfail ->fff_fallback
-  |  efdctsi TMP2, CARG2
+  |    lus TMP0, 0x3ff0
+  |    stw ZERO, TMPD_LO
+  |  bne ->fff_fallback
+  |    stw TMP0, TMPD_HI
+  |  bge cr1, ->fff_fallback
+  |    lfd FARG1, TMPD
+  |  toint TMP2, FARG2, f0
   |   lwz TMP0, TAB:CARG1->asize
-  |    evmergelo TMP3, TMP3, ZERO
   |   lwz TMP1, TAB:CARG1->array
-  |  efdadd CARG2, CARG2, TMP3
+  |  fadd FARG2, FARG2, FARG1
   |  addi TMP2, TMP2, 1
   |   la RA, -8(BASE)
   |  cmplw TMP0, TMP2
   |   slwi TMP3, TMP2, 3
-  |  evstdd CARG2, 0(RA)
+  |  stfd FARG2, 0(RA)
   |  ble >2                            // Not in array part?
-  |  evlddx TMP1, TMP1, TMP3
+  |  lwzx TMP2, TMP1, TMP3
+  |  lfdx f0, TMP1, TMP3
   |1:
-  |  checknil TMP1
+  |  checknil TMP2
   |   li RD, (0+1)*8
-  |  checkok ->fff_res                 // End of iteration, return 0 results.
+  |  beq ->fff_res                     // End of iteration, return 0 results.
   |   li RD, (2+1)*8
-  |  evstdd TMP1, 8(RA)
+  |  stfd f0, 8(RA)
   |  b ->fff_res
   |2:  // Check for empty hash part first. Otherwise call C function.
   |  lwz TMP0, TAB:CARG1->hmask
@@ -1146,27 +1208,28 @@ static void build_subroutines(BuildCtx *ctx)
   |  cmplwi CRET1, 0
   |   li RD, (0+1)*8
   |  beq ->fff_res
-  |  evldd TMP1, 0(CRET1)
+  |  lwz TMP2, 0(CRET1)
+  |  lfd f0, 0(CRET1)
   |  b <1
   |
   |.ffunc_1 ipairs
-  |  checktab TAB:CARG1
+  |  checktab CARG3
   |   lwz PC, FRAME_PC(BASE)
-  |  checkfail ->fff_fallback
+  |  bne ->fff_fallback
 #ifdef LUAJIT_ENABLE_LUA52COMPAT
   |   lwz TAB:TMP2, TAB:CARG1->metatable
-  |  evldd CFUNC:TMP0, CFUNC:RB->upvalue[0]
+  |  lfd f0, CFUNC:RB->upvalue[0]
   |   cmplwi TAB:TMP2, 0
   |  la RA, -8(BASE)
   |   bne ->fff_fallback
 #else
-  |  evldd CFUNC:TMP0, CFUNC:RB->upvalue[0]
+  |  lfd f0, CFUNC:RB->upvalue[0]
   |  la RA, -8(BASE)
 #endif
-  |    evsplati TMP1, 0
+  |  stw ZERO, 8(BASE)
+  |   stw ZERO, 12(BASE)
   |  li RD, (3+1)*8
-  |    evstdd TMP1, 8(BASE)
-  |  evstdd CFUNC:TMP0, 0(RA)
+  |  stfd f0, 0(RA)
   |  b ->fff_res
   |
   |//-- Base library: catch errors ----------------------------------------
@@ -1183,18 +1246,23 @@ static void build_subroutines(BuildCtx *ctx)
   |  addi PC, TMP3, 8+FRAME_PCALL
   |  b ->vm_call_dispatch
   |
-  |.ffunc_2 xpcall
-  |  lbz TMP3, DISPATCH_GL(hookmask)(DISPATCH)
+  |.ffunc xpcall
+  |  cmplwi NARGS8:RC, 16
+  |   lwz CARG4, 8(BASE)
+  |    lfd FARG2, 8(BASE)
+  |   lwz CARG3, 0(BASE)
+  |    lfd FARG1, 0(BASE)
+  |  blt ->fff_fallback
+  |  lbz TMP1, DISPATCH_GL(hookmask)(DISPATCH)
   |   mr TMP2, BASE
-  |  checkfunc CARG2                   // Traceback must be a function.
-  |  checkfail ->fff_fallback
+  |  checkfunc CARG4; bne ->fff_fallback  // Traceback must be a function.
   |   la BASE, 16(BASE)
   |  // Remember active hook before pcall.
-  |  rlwinm TMP3, TMP3, 32-HOOK_ACTIVE_SHIFT, 31, 31
-  |   evstdd CARG2, 0(TMP2)            // Swap function and traceback.
+  |  rlwinm TMP1, TMP1, 32-HOOK_ACTIVE_SHIFT, 31, 31
+  |   stfd FARG2, 0(TMP2)              // Swap function and traceback.
   |  subi NARGS8:RC, NARGS8:RC, 16
-  |   evstdd CARG1, 8(TMP2)
-  |  addi PC, TMP3, 16+FRAME_PCALL
+  |   stfd FARG1, 8(TMP2)
+  |  addi PC, TMP1, 16+FRAME_PCALL
   |  b ->vm_call_dispatch
   |
   |//-- Coroutine library --------------------------------------------------
@@ -1202,15 +1270,11 @@ static void build_subroutines(BuildCtx *ctx)
   |.macro coroutine_resume_wrap, resume
   |.if resume
   |.ffunc_1 coroutine_resume
-  |  evmergehi TMP0, L:CARG1, L:CARG1
+  |  cmpwi CARG3, LJ_TTHREAD; bne ->fff_fallback
   |.else
   |.ffunc coroutine_wrap_aux
   |  lwz L:CARG1, CFUNC:RB->upvalue[0].gcr
   |.endif
-  |.if resume
-  |  cmpwi TMP0, LJ_TTHREAD
-  |  bne ->fff_fallback
-  |.endif
   |  lbz TMP0, L:CARG1->status
   |   lwz TMP1, L:CARG1->cframe
   |    lwz CARG2, L:CARG1->top
@@ -1240,9 +1304,9 @@ static void build_subroutines(BuildCtx *ctx)
   |  stw BASE, L->top
   |2:  // Move args to coroutine.
   |  cmpw TMP1, NARGS8:RC
-  |   evlddx TMP0, BASE, TMP1
+  |   lfdx f0, BASE, TMP1
   |  beq >3
-  |   evstddx TMP0, CARG2, TMP1
+  |   stfdx f0, CARG2, TMP1
   |  addi TMP1, TMP1, 8
   |  b <2
   |3:
@@ -1272,8 +1336,8 @@ static void build_subroutines(BuildCtx *ctx)
   |   stw TMP2, L:SAVE0->top           // Clear coroutine stack.
   |5:  // Move results from coroutine.
   |  cmplw TMP1, TMP3
-  |   evlddx TMP0, TMP2, TMP1
-  |   evstddx TMP0, BASE, TMP1
+  |   lfdx f0, TMP2, TMP1
+  |   stfdx f0, BASE, TMP1
   |    addi TMP1, TMP1, 8
   |  bne <5
   |6:
@@ -1298,12 +1362,12 @@ static void build_subroutines(BuildCtx *ctx)
   |  andi. TMP0, PC, FRAME_TYPE
   |  la TMP3, -8(TMP3)
   |   li TMP1, LJ_TFALSE
-  |  evldd TMP0, 0(TMP3)
+  |  lfd f0, 0(TMP3)
   |   stw TMP3, L:SAVE0->top           // Remove error from coroutine stack.
   |    li RD, (2+1)*8
   |   stw TMP1, -8(BASE)               // Prepend false to results.
   |    la RA, -8(BASE)
-  |  evstdd TMP0, 0(BASE)              // Copy error message.
+  |  stfd f0, 0(BASE)                  // Copy error message.
   |  b <7
   |.else
   |  mr CARG1, L
@@ -1336,15 +1400,17 @@ static void build_subroutines(BuildCtx *ctx)
   |
   |//-- Math library -------------------------------------------------------
   |
-  |.ffunc_n math_abs
-  |  efdabs CRET1, CARG1
+  |.ffunc_1 math_abs
+  |  checknum CARG3; bge ->fff_fallback
+  |  rlwinm CARG3, CARG3, 0, 1, 31
   |  // Fallthrough.
   |
   |->fff_restv:
-  |  // CRET1 = TValue result.
+  |  // CARG3/CARG1 = TValue result.
   |  lwz PC, FRAME_PC(BASE)
-  |   la RA, -8(BASE)
-  |  evstdd CRET1, 0(RA)
+  |   stw CARG3, -8(BASE)
+  |  la RA, -8(BASE)
+  |   stw CARG1, -4(BASE)
   |->fff_res1:
   |  // RA = results, PC = return.
   |  li RD, (1+1)*8
@@ -1367,54 +1433,24 @@ static void build_subroutines(BuildCtx *ctx)
   |6:  // Fill up results with nil.
   |  subi TMP1, RD, 8
   |   addi RD, RD, 8
-  |  evstddx TISNIL, RA, TMP1
+  |  stwx TISNIL, RA, TMP1
   |  b <5
   |
   |.macro math_extern, func
-  |  .ffunc math_ .. func
-  |  cmplwi NARGS8:RC, 8
-  |   evldd CARG2, 0(BASE)
-  |  blt ->fff_fallback
-  |  checknum CARG2
-  |   evmergehi CARG1, CARG2, CARG2
-  |  checkfail ->fff_fallback
+  |  .ffunc_n math_ .. func
   |  bl extern func
-  |  evmergelo CRET1, CRET1, CRET2
-  |  b ->fff_restv
+  |  b ->fff_resn
   |.endmacro
   |
   |.macro math_extern2, func
-  |  .ffunc math_ .. func
-  |  cmplwi NARGS8:RC, 16
-  |   evldd CARG2, 0(BASE)
-  |   evldd CARG4, 8(BASE)
-  |  blt ->fff_fallback
-  |  evmergehi CARG1, CARG4, CARG2
-  |  checknum CARG1
-  |   evmergehi CARG3, CARG4, CARG4
-  |  checkanyfail ->fff_fallback
+  |  .ffunc_nn math_ .. func
   |  bl extern func
-  |  evmergelo CRET1, CRET1, CRET2
-  |  b ->fff_restv
+  |  b ->fff_resn
   |.endmacro
   |
-  |.macro math_round, func
-  |  .ffunc math_ .. func
-  |  cmplwi NARGS8:RC, 8
-  |   evldd CARG2, 0(BASE)
-  |  blt ->fff_fallback
-  |  checknum CARG2
-  |   evmergehi CARG1, CARG2, CARG2
-  |  checkfail ->fff_fallback
-  |   lwz PC, FRAME_PC(BASE)
-  |  bl ->vm_..func.._hilo;
-  |  la RA, -8(BASE)
-  |  evstdd CRET2, 0(RA)
-  |  b ->fff_res1
-  |.endmacro
-  |
-  |  math_round floor
-  |  math_round ceil
+  |  // NYI: Use internal implementation.
+  |  math_extern floor
+  |  math_extern ceil
   |
   |  math_extern sqrt
   |  math_extern log
@@ -1435,119 +1471,98 @@ static void build_subroutines(BuildCtx *ctx)
   |
   |->ff_math_deg:
   |.ffunc_n math_rad
-  |  evldd CARG2, CFUNC:RB->upvalue[0]
-  |  efdmul CRET1, CARG1, CARG2
-  |  b ->fff_restv
+  |  lfd FARG2, CFUNC:RB->upvalue[0]
+  |  fmul FARG1, FARG1, FARG2
+  |  b ->fff_resn
   |
-  |.ffunc math_ldexp
-  |  cmplwi NARGS8:RC, 16
-  |   evldd CARG2, 0(BASE)
-  |   evldd CARG4, 8(BASE)
-  |  blt ->fff_fallback
-  |  evmergehi CARG1, CARG4, CARG2
-  |  checknum CARG1
-  |  checkanyfail ->fff_fallback
-  |  efdctsi CARG3, CARG4
+  |.ffunc_nn math_ldexp
+  |  toint CARG1, FARG2
   |  bl extern ldexp
-  |  evmergelo CRET1, CRET1, CRET2
-  |  b ->fff_restv
+  |  b ->fff_resn
   |
-  |.ffunc math_frexp
-  |  cmplwi NARGS8:RC, 8
-  |   evldd CARG2, 0(BASE)
-  |  blt ->fff_fallback
-  |  checknum CARG2
-  |   evmergehi CARG1, CARG2, CARG2
-  |  checkfail ->fff_fallback
-  |  la CARG3, DISPATCH_GL(tmptv)(DISPATCH)
+  |.ffunc_n math_frexp
+  |  la CARG1, DISPATCH_GL(tmptv)(DISPATCH)
   |   lwz PC, FRAME_PC(BASE)
   |  bl extern frexp
   |   lwz TMP1, DISPATCH_GL(tmptv)(DISPATCH)
-  |  evmergelo CRET1, CRET1, CRET2
-  |   efdcfsi CRET2, TMP1
   |   la RA, -8(BASE)
-  |  evstdd CRET1, 0(RA)
+  |   tonum_i FARG2, TMP1
+  |  stfd FARG1, 0(RA)
   |  li RD, (2+1)*8
-  |   evstdd CRET2, 8(RA)
+  |   stfd FARG2, 8(RA)
   |  b ->fff_res
   |
-  |.ffunc math_modf
-  |  cmplwi NARGS8:RC, 8
-  |   evldd CARG2, 0(BASE)
-  |  blt ->fff_fallback
-  |  checknum CARG2
-  |   evmergehi CARG1, CARG2, CARG2
-  |  checkfail ->fff_fallback
-  |  la CARG3, -8(BASE)
+  |.ffunc_n math_modf
+  |  la CARG1, -8(BASE)
   |   lwz PC, FRAME_PC(BASE)
   |  bl extern modf
-  |  evmergelo CRET1, CRET1, CRET2
   |   la RA, -8(BASE)
-  |  evstdd CRET1, 0(BASE)
+  |  stfd FARG1, 0(BASE)
   |  li RD, (2+1)*8
   |  b ->fff_res
   |
-  |.macro math_minmax, name, cmpop
-  |  .ffunc_1 name
-  |  checknum CARG1
-  |   li TMP1, 8
-  |  checkfail ->fff_fallback
+  |.macro math_minmax, name, ismax
+  |  .ffunc_n name
+  |  li TMP1, 8
   |1:
-  |  evlddx CARG2, BASE, TMP1
+  |   lwzx CARG2, BASE, TMP1
+  |   lfdx FARG2, BASE, TMP1
   |  cmplw cr1, TMP1, NARGS8:RC
   |   checknum CARG2
-  |  bge cr1, ->fff_restv              // Ok, since CRET1 = CARG1.
-  |   checkfail ->fff_fallback
-  |  cmpop CARG2, CARG1
+  |  bge cr1, ->fff_resn
+  |   bge ->fff_fallback
+  |  fsub f0, FARG1, FARG2
   |   addi TMP1, TMP1, 8
-  |  crmove 4*cr0+lt, 4*cr0+gt
-  |  evsel CARG1, CARG2, CARG1
+  |.if ismax
+  |  fsel FARG1, f0, FARG1, FARG2
+  |.else
+  |  fsel FARG1, f0, FARG2, FARG1
+  |.endif
   |  b <1
   |.endmacro
   |
-  |  math_minmax math_min, efdtstlt
-  |  math_minmax math_max, efdtstgt
+  |  math_minmax math_min, 0
+  |  math_minmax math_max, 1
   |
   |//-- String library -----------------------------------------------------
   |
   |.ffunc_1 string_len
-  |  checkstr STR:CARG1
-  |  checkfail ->fff_fallback
-  |  lwz TMP0, STR:CARG1->len
-  |  efdcfsi CRET1, TMP0
-  |  b ->fff_restv
+  |  checkstr CARG3; bne ->fff_fallback
+  |  lwz CRET1, STR:CARG1->len
+  |  b ->fff_resi
   |
   |.ffunc string_byte                  // Only handle the 1-arg case here.
   |  cmplwi NARGS8:RC, 8
-  |   evldd STR:CARG1, 0(BASE)
+  |   lwz CARG3, 0(BASE)
+  |    lwz STR:CARG1, 4(BASE)
   |  bne ->fff_fallback                        // Need exactly 1 argument.
-  |  checkstr STR:CARG1
-  |   la RA, -8(BASE)
-  |  checkfail ->fff_fallback
+  |   checkstr CARG3
+  |   bne ->fff_fallback
   |  lwz TMP0, STR:CARG1->len
-  |   li RD, (0+1)*8
-  |    lbz TMP1, STR:CARG1[1]          // Access is always ok (NUL at end).
-  |   li TMP2, (1+1)*8
-  |  cmplwi TMP0, 0
-  |   lwz PC, FRAME_PC(BASE)
-  |    efdcfsi CRET1, TMP1
-  |  iseleq RD, RD, TMP2
-  |    evstdd CRET1, 0(RA)
+  |   lbz TMP1, STR:CARG1[1]           // Access is always ok (NUL at end).
+  |  addic TMP3, TMP0, -1              // RD = ((str->len != 0)+1)*8
+  |  subfe RD, TMP3, TMP0
+  |   stw TMP1, TONUM_LO               // Inlined tonum_u f0, TMP1.
+  |  addi RD, RD, 1
+  |   lfd f0, TONUM_D
+  |  la RA, -8(BASE)
+  |  lwz PC, FRAME_PC(BASE)
+  |   fsub f0, f0, TOBIT
+  |  slwi RD, RD, 3
+  |   stfd f0, 0(RA)
   |  b ->fff_res
   |
   |.ffunc string_char                  // Only handle the 1-arg case here.
   |  ffgccheck
   |  cmplwi NARGS8:RC, 8
-  |   evldd CARG1, 0(BASE)
+  |   lwz CARG3, 0(BASE)
+  |    lfd FARG1, 0(BASE)
   |  bne ->fff_fallback                        // Exactly 1 argument.
-  |  checknum CARG1
-  |   la CARG2, DISPATCH_GL(tmptv)(DISPATCH)
-  |  checkfail ->fff_fallback
-  |  efdctsiz TMP0, CARG1
+  |  checknum CARG3; bge ->fff_fallback
+  |  toint TMP0, FARG1
+  |   la CARG2, TMPD_BLO
   |   li CARG3, 1
-  |  cmplwi TMP0, 255
-  |   stb TMP0, 0(CARG2)
-  |  bgt ->fff_fallback
+  |  cmplwi TMP0, 255; bgt ->fff_fallback
   |->fff_newstr:
   |  mr CARG1, L
   |  stw BASE, L->base
@@ -1555,67 +1570,71 @@ static void build_subroutines(BuildCtx *ctx)
   |  bl extern lj_str_new              // (lua_State *L, char *str, size_t l)
   |  // Returns GCstr *.
   |  lwz BASE, L->base
-  |   evmergelo STR:CRET1, TISSTR, STR:CRET1
+  |  li CARG3, LJ_TSTR
   |  b ->fff_restv
   |
   |.ffunc string_sub
   |  ffgccheck
   |  cmplwi NARGS8:RC, 16
-  |   evldd CARG3, 16(BASE)
-  |   evldd STR:CARG1, 0(BASE)
+  |   lwz CARG3, 16(BASE)
+  |    lfd f0, 16(BASE)
+  |   lwz TMP0, 0(BASE)
+  |    lwz STR:CARG1, 4(BASE)
   |  blt ->fff_fallback
-  |   evldd CARG2, 8(BASE)
+  |   lwz CARG2, 8(BASE)
+  |    lfd f1, 8(BASE)
   |   li TMP2, -1
   |  beq >1
-  |  checknum CARG3
-  |  checkfail ->fff_fallback
-  |  efdctsiz TMP2, CARG3
+  |  checknum CARG3; bge ->fff_fallback
+  |  toint TMP2, f0
   |1:
-  |  checknum CARG2
-  |  checkfail ->fff_fallback
-  |  checkstr STR:CARG1
-  |   efdctsiz TMP1, CARG2
-  |  checkfail ->fff_fallback
+  |  checknum CARG2; bge ->fff_fallback
+  |  checkstr TMP0; bne ->fff_fallback
+  |   toint TMP1, f1
   |   lwz TMP0, STR:CARG1->len
   |  cmplw TMP0, TMP2                  // len < end? (unsigned compare)
-  |   add TMP3, TMP2, TMP0
+  |   addi TMP3, TMP2, 1
   |  blt >5
   |2:
   |  cmpwi TMP1, 0                     // start <= 0?
   |   add TMP3, TMP1, TMP0
   |  ble >7
   |3:
-  |  sub. CARG3, TMP2, TMP1
+  |  sub CARG3, TMP2, TMP1
   |    addi CARG2, STR:CARG1, #STR-1
+  |  srawi TMP0, CARG3, 31
   |   addi CARG3, CARG3, 1
   |    add CARG2, CARG2, TMP1
-  |  isellt CARG3, r0, CARG3
+  |  andc CARG3, CARG3, TMP0
   |  b ->fff_newstr
   |
   |5:  // Negative end or overflow.
-  |  cmpw TMP0, TMP2
-  |   addi TMP3, TMP3, 1
-  |  iselgt TMP2, TMP3, TMP0           // end = end > len ? len : end+len+1
+  |  sub CARG2, TMP0, TMP2
+  |  srawi CARG2, CARG2, 31
+  |  andc TMP3, TMP3, CARG2            // end = end > len ? len : end+len+1
+  |  add TMP2, TMP0, TMP3
   |  b <2
   |
   |7:  // Negative start or underflow.
-  |   cmpwi cr1, TMP3, 0
-  |  iseleq TMP1, r0, TMP3
-  |   isel TMP1, r0, TMP1, 4*cr1+lt
+  |  addic CARG3, TMP1, -1
+  |  subfe CARG3, CARG3, CARG3
+  |   srawi CARG2, TMP3, 31            // Note: modifies carry.
+  |  andc TMP3, TMP3, CARG3
+  |   andc TMP1, TMP3, CARG2
   |  addi TMP1, TMP1, 1                        // start = 1 + (start ? start+len : 0)
   |  b <3
   |
   |.ffunc string_rep                   // Only handle the 1-char case inline.
   |  ffgccheck
   |  cmplwi NARGS8:RC, 16
-  |   evldd CARG1, 0(BASE)
-  |   evldd CARG2, 8(BASE)
+  |   lwz CARG3, 0(BASE)
+  |    lwz STR:CARG1, 4(BASE)
+  |   lwz CARG4, 8(BASE)
+  |    lfd FARG2, 8(BASE)
   |  blt ->fff_fallback
-  |  checknum CARG2
-  |  checkfail ->fff_fallback
-  |  checkstr STR:CARG1
-  |   efdctsiz CARG3, CARG2
-  |  checkfail ->fff_fallback
+  |  checkstr CARG3; bne ->fff_fallback
+  |  checknum CARG4; bge ->fff_fallback
+  |    toint CARG3, FARG2
   |   lwz TMP0, STR:CARG1->len
   |  cmpwi CARG3, 0
   |   lwz TMP1, DISPATCH_GL(tmpbuf.sz)(DISPATCH)
@@ -1635,18 +1654,19 @@ static void build_subroutines(BuildCtx *ctx)
   |  bne <1
   |  b ->fff_newstr
   |2:  // Return empty string.
-  |  la STR:CRET1, DISPATCH_GL(strempty)(DISPATCH)
-  |  evmergelo CRET1, TISSTR, STR:CRET1
+  |  la STR:CARG1, DISPATCH_GL(strempty)(DISPATCH)
+  |  li CARG3, LJ_TSTR
   |  b ->fff_restv
   |
   |.ffunc string_reverse
   |  ffgccheck
   |  cmplwi NARGS8:RC, 8
-  |   evldd CARG1, 0(BASE)
+  |   lwz CARG3, 0(BASE)
+  |    lwz STR:CARG1, 4(BASE)
   |  blt ->fff_fallback
-  |  checkstr STR:CARG1
+  |  checkstr CARG3
   |   lwz TMP1, DISPATCH_GL(tmpbuf.sz)(DISPATCH)
-  |  checkfail ->fff_fallback
+  |  bne ->fff_fallback
   |  lwz CARG3, STR:CARG1->len
   |   la CARG1, #STR(STR:CARG1)
   |   lwz CARG2, DISPATCH_GL(tmpbuf.buf)(DISPATCH)
@@ -1667,11 +1687,12 @@ static void build_subroutines(BuildCtx *ctx)
   |  .ffunc name
   |  ffgccheck
   |  cmplwi NARGS8:RC, 8
-  |   evldd CARG1, 0(BASE)
+  |   lwz CARG3, 0(BASE)
+  |    lwz STR:CARG1, 4(BASE)
   |  blt ->fff_fallback
-  |  checkstr STR:CARG1
+  |  checkstr CARG3
   |   lwz TMP1, DISPATCH_GL(tmpbuf.sz)(DISPATCH)
-  |  checkfail ->fff_fallback
+  |  bne ->fff_fallback
   |  lwz CARG3, STR:CARG1->len
   |   la CARG1, #STR(STR:CARG1)
   |   lwz CARG2, DISPATCH_GL(tmpbuf.buf)(DISPATCH)
@@ -1684,8 +1705,10 @@ static void build_subroutines(BuildCtx *ctx)
   |  bge ->fff_newstr
   |   subi TMP0, TMP1, lo
   |    xori TMP3, TMP1, 0x20
-  |   cmplwi TMP0, 26
-  |   isellt TMP1, TMP3, TMP1
+  |   addic TMP0, TMP0, -26
+  |   subfe TMP3, TMP3, TMP3
+  |   andi. TMP3, TMP3, 0x20
+  |   xor TMP1, TMP1, TMP3
   |   stbx TMP1, CARG2, TMP2
   |  addi TMP2, TMP2, 1
   |  b <1
@@ -1697,35 +1720,42 @@ static void build_subroutines(BuildCtx *ctx)
   |//-- Table library ------------------------------------------------------
   |
   |.ffunc_1 table_getn
-  |  checktab CARG1
-  |  checkfail ->fff_fallback
+  |  checktab CARG3; bne ->fff_fallback
   |  bl extern lj_tab_len              // (GCtab *t)
   |  // Returns uint32_t (but less than 2^31).
-  |  efdcfsi CRET1, CRET1
-  |  b ->fff_restv
+  |  b ->fff_resi
   |
   |//-- Bit library --------------------------------------------------------
   |
   |.macro .ffunc_bit, name
   |  .ffunc_n bit_..name
-  |  efdadd CARG1, CARG1, TOBIT
+  |  fadd FARG1, FARG1, TOBIT
+  |  stfd FARG1, TMPD
+  |  lwz CARG1, TMPD_LO
   |.endmacro
   |
   |.ffunc_bit tobit
-  |->fff_resbit:
-  |  efdcfsi CRET1, CARG1
-  |  b ->fff_restv
+  |->fff_resi:
+  |  tonum_i FARG1, CRET1
+  |->fff_resn:
+  |  lwz PC, FRAME_PC(BASE)
+  |  la RA, -8(BASE)
+  |  stfd FARG1, -8(BASE)
+  |  b ->fff_res1
   |
   |.macro .ffunc_bit_op, name, ins
   |  .ffunc_bit name
   |   li TMP1, 8
   |1:
-  |  evlddx CARG2, BASE, TMP1
-  |  cmplw cr1, TMP1, NARGS8:RC
-  |   checknum CARG2
-  |  bge cr1, ->fff_resbit
-  |   checkfail ->fff_fallback
-  |  efdadd CARG2, CARG2, TOBIT
+  |  lwzx CARG4, BASE, TMP1
+  |   cmplw cr1, TMP1, NARGS8:RC
+  |  lfdx FARG1, BASE, TMP1
+  |  checknum CARG4
+  |   bge cr1, ->fff_resi
+  |  fadd FARG1, FARG1, TOBIT
+  |  bge ->fff_fallback
+  |  stfd FARG1, TMPD
+  |  lwz CARG2, TMPD_LO
   |  ins CARG1, CARG1, CARG2
   |   addi TMP1, TMP1, 8
   |  b <1
@@ -1739,26 +1769,28 @@ static void build_subroutines(BuildCtx *ctx)
   |  rotlwi TMP0, CARG1, 8
   |  rlwimi TMP0, CARG1, 24, 0, 7
   |  rlwimi TMP0, CARG1, 24, 16, 23
-  |  efdcfsi CRET1, TMP0
-  |  b ->fff_restv
+  |  mr CRET1, TMP0
+  |  b ->fff_resi
   |
   |.ffunc_bit bnot
-  |  not TMP0, CARG1
-  |  efdcfsi CRET1, TMP0
-  |  b ->fff_restv
+  |  not CRET1, CARG1
+  |  b ->fff_resi
   |
   |.macro .ffunc_bit_sh, name, ins, shmod
   |  .ffunc_nn bit_..name
-  |  efdadd CARG2, CARG2, TOBIT
-  |   efdadd CARG1, CARG1, TOBIT
+  |  fadd FARG1, FARG1, TOBIT
+  |  fadd FARG2, FARG2, TOBIT
+  |  stfd FARG1, TMPD
+  |  lwz CARG1, TMPD_LO
+  |  stfd FARG2, TMPD
+  |  lwz CARG2, TMPD_LO
   |.if shmod == 1
   |  rlwinm CARG2, CARG2, 0, 27, 31
   |.elif shmod == 2
   |  neg CARG2, CARG2
   |.endif
-  |  ins TMP0, CARG1, CARG2
-  |  efdcfsi CRET1, TMP0
-  |  b ->fff_restv
+  |  ins CRET1, CARG1, CARG2
+  |  b ->fff_resi
   |.endmacro
   |
   |.ffunc_bit_sh lshift, slw, 1
@@ -1939,93 +1971,14 @@ static void build_subroutines(BuildCtx *ctx)
   |//-- Math helper functions ----------------------------------------------
   |//-----------------------------------------------------------------------
   |
-  |// FP value rounding. Called by math.floor/math.ceil fast functions
-  |// and from JIT code.
-  |//
-  |// This can be inlined if the CPU has the frin/friz/frip/frim instructions.
-  |// The alternative hard-float approaches have a deep dependency chain.
-  |// The resulting latency is at least 3x-7x the double-precision FP latency
-  |// (e500v2: 6cy, e600: 5cy, Cell: 10cy) or around 20-70 cycles.
-  |//
-  |// The soft-float approach is tedious, but much faster (e500v2: ~11cy/~6cy).
-  |// However it relies on a fast way to transfer the FP value to GPRs
-  |// (e500v2: 0cy for lo-word, 1cy for hi-word).
-  |//
-  |.macro vm_round, name, mode
-  |  // Used temporaries: TMP0, TMP1, TMP2, TMP3.
-  |->name.._efd:                       // Input: CARG2, output: CRET2
-  |  evmergehi CARG1, CARG2, CARG2
-  |->name.._hilo:
-  |  // Input: CARG1 (hi), CARG2 (hi, lo), output: CRET2
-  |  rlwinm TMP2, CARG1, 12, 21, 31
-  |  addic. TMP2, TMP2, -1023          // exp = exponent(x) - 1023
-  |   li TMP1, -1
-  |  cmplwi cr1, TMP2, 51              // 0 <= exp <= 51?
-  |   subfic TMP0, TMP2, 52
-  |  bgt cr1, >1
-  |   lus TMP3, 0xfff0
-  |  slw TMP0, TMP1, TMP0              // lomask = -1 << (52-exp)
-  |   sraw TMP1, TMP3, TMP2            // himask = (int32_t)0xfff00000 >> exp
-  |.if mode == 2               // trunc(x):
-  |  evmergelo TMP0, TMP1, TMP0
-  |  evand CRET2, CARG2, TMP0          // hi &= himask, lo &= lomask
-  |.else
-  |  andc TMP2, CARG2, TMP0
-  |   andc TMP3, CARG1, TMP1
-  |  or TMP2, TMP2, TMP3               // ztest = (hi&~himask) | (lo&~lomask)
-  |   srawi TMP3, CARG1, 31            // signmask = (int32_t)hi >> 31
-  |.if mode == 0               // floor(x):
-  |  and. TMP2, TMP2, TMP3             // iszero = ((ztest & signmask) == 0)
-  |.else                       // ceil(x):
-  |  andc. TMP2, TMP2, TMP3            // iszero = ((ztest & ~signmask) == 0)
-  |.endif
-  |  and CARG2, CARG2, TMP0            // lo &= lomask
-  |  and CARG1, CARG1, TMP1            // hi &= himask
-  |   subc TMP0, CARG2, TMP0
-  |  iseleq TMP0, CARG2, TMP0          // lo = iszero ? lo : lo-lomask
-  |   sube TMP1, CARG1, TMP1
-  |  iseleq TMP1, CARG1, TMP1          // hi = iszero ? hi : hi-himask+carry
-  |  evmergelo CRET2, TMP1, TMP0
-  |.endif
-  |  blr
-  |1:
-  |  bgtlr                             // Already done if >=2^52, +-inf or nan.
-  |.if mode == 2               // trunc(x):
-  |  rlwinm TMP1, CARG1, 0, 0, 0       // hi = sign(x)
-  |  li TMP0, 0
-  |  evmergelo CRET2, TMP1, TMP0
-  |.else
-  |  rlwinm TMP2, CARG1, 0, 1, 31
-  |  srawi TMP0, CARG1, 31             // signmask = (int32_t)hi >> 31
-  |  or TMP2, TMP2, CARG2              // ztest = abs(hi) | lo
-  |   lus TMP1, 0x3ff0
-  |.if mode == 0               // floor(x):
-  |  and. TMP2, TMP2, TMP0             // iszero = ((ztest & signmask) == 0)
-  |.else                       // ceil(x):
-  |  andc. TMP2, TMP2, TMP0            // iszero = ((ztest & ~signmask) == 0)
-  |.endif
-  |   li TMP0, 0
-  |  iseleq TMP1, r0, TMP1
-  |  rlwimi CARG1, TMP1, 0, 1, 31      // hi = sign(x) | (iszero ? 0.0 : 1.0)
-  |  evmergelo CRET2, CARG1, TMP0
-  |.endif
-  |  blr
-  |.endmacro
-  |
+  |  // NYI: Use internal implementation.
   |->vm_floor:
-  |  mflr CARG3
-  |  bl ->vm_floor_hilo
-  |  mtlr CARG3
-  |  evmergehi CRET1, CRET2, CRET2
-  |  blr
-  |
-  |  vm_round vm_floor, 0
-  |  vm_round vm_ceil,  1
+  |  b extern floor
+  |->vm_ceil:
+  |  b extern ceil
+  |->vm_trunc:
 #if LJ_HASJIT
-  |  vm_round vm_trunc, 2
-#else
-  |->vm_trunc_efd:
-  |->vm_trunc_hilo:
+  |  b extern trunc
 #endif
   |
   |->vm_powi:
@@ -2042,31 +1995,38 @@ static void build_subroutines(BuildCtx *ctx)
   |// Compute x op y for basic arithmetic operators (+ - * / % ^ and unary -)
   |// and basic math functions. ORDER ARITH
   |->vm_foldarith:
-  |  evmergelo CARG2, CARG1, CARG2
-  |   cmplwi CARG5, 1
-  |  evmergelo CARG4, CARG3, CARG4
-  |   beq >1; bgt >2
-  |  efdadd CRET2, CARG2, CARG4; evmergehi CRET1, CRET2, CRET2; blr
+  |  cmplwi CARG1, 1
+  |  beq >1; bgt >2
+  |  fadd FARG1, FARG1, FARG2; blr
   |1:
-  |  efdsub CRET2, CARG2, CARG4; evmergehi CRET1, CRET2, CRET2; blr
+  |  fsub FARG1, FARG1, FARG2; blr
   |2:
-  |   cmplwi CARG5, 3; beq >1; bgt >2
-  |  efdmul CRET2, CARG2, CARG4; evmergehi CRET1, CRET2, CRET2; blr
+  |   cmplwi CARG1, 3; beq >1; bgt >2
+  |  fmul FARG1, FARG1, FARG2; blr
   |1:
-  |  efddiv CRET2, CARG2, CARG4; evmergehi CRET1, CRET2, CRET2; blr
+  |  fdiv FARG1, FARG1, FARG2; blr
   |2:
-  |   cmplwi CARG5, 5; beq >1; bgt >2
-  |  evmr CARG3, CARG2; efddiv CRET2, CARG2, CARG4; evmr RB, CARG4
-  |  mflr RC; bl ->vm_floor_efd; mtlr RC
-  |  efdmul CRET2, CRET2, RB; efdsub CRET2, CARG3, CRET2
-  |  evmergehi CRET1, CRET2, CRET2; blr
+  |   cmplwi CARG1, 5; beq >1; bgt >2
+  |  // NYI: Use internal implementation of floor and avoid spills.
+  |  stwu sp, -32(sp); stfd f14, 16(sp); stfd f15, 24(sp)
+  |   mflr r0
+  |  fmr f14, FARG1
+  |  fdiv FARG1, FARG1, FARG2
+  |   stw r0, 36(sp)
+  |  fmr f15, FARG2
+  |  bl extern floor
+  |   lwz r0, 36(sp)
+  |  fmul FARG1, FARG1, f15
+  |   mtlr r0
+  |  fsub FARG1, f14, FARG1;
+  |  lfd f14, 16(sp); lfd f15, 24(sp); addi sp, sp, 32; blr
   |1:
   |  b extern pow
   |2:
-  |   cmplwi CARG5, 7; beq >1; bgt >2
-  |  xoris CARG1, CARG1, 0x8000; blr
+  |   cmplwi CARG1, 7; beq >1; bgt >2
+  |  fneg FARG1, FARG1; blr
   |1:
-  |  rlwinm CARG1, CARG1, 0, 1, 31; blr
+  |  fabs FARG1, FARG1; blr
   |2:
   |  NYI  // Other operations only needed by JIT compiler.
   |
@@ -2100,71 +2060,85 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop)
 
   case BC_ISLT: case BC_ISGE: case BC_ISLE: case BC_ISGT:
     |  // RA = src1*8, RD = src2*8, JMP with RD = target
-    |  evlddx TMP0, BASE, RA
+    |  lwzx TMP0, BASE, RA
     |   addi PC, PC, 4
-    |  evlddx TMP1, BASE, RD
-    |   addis TMP3, PC, -(BCBIAS_J*4 >> 16)
+    |    lfdx f0, BASE, RA
+    |  lwzx TMP1, BASE, RD
+    |  checknum cr0, TMP0
     |   lwz TMP2, -4(PC)
-    |  evmergehi RB, TMP0, TMP1
+    |    lfdx f1, BASE, RD
+    |  checknum cr1, TMP1
     |   decode_RD4 TMP2, TMP2
-    |  checknum RB
-    |   add TMP2, TMP2, TMP3
-    |  checkanyfail ->vmeta_comp
-    |  efdcmplt TMP0, TMP1
-    if (op == BC_ISLE || op == BC_ISGT) {
-      |  efdcmpeq cr1, TMP0, TMP1
-      |  cror 4*cr0+gt, 4*cr0+gt, 4*cr1+gt
-    }
-    if (op == BC_ISLT || op == BC_ISLE) {
-      |  iselgt PC, TMP2, PC
+    |  bge cr0, ->vmeta_comp
+    |   addis TMP2, TMP2, -(BCBIAS_J*4 >> 16)
+    |  bge cr1, ->vmeta_comp
+    |  fcmpu cr0, f0, f1
+    if (op == BC_ISLT) {
+      |  bge >1
+    } else if (op == BC_ISGE) {
+      |  blt >1
+    } else if (op == BC_ISLE) {
+      |  cror 4*cr0+lt, 4*cr0+lt, 4*cr0+eq
+      |  bge >1
     } else {
-      |  iselgt PC, PC, TMP2
+      |  cror 4*cr0+lt, 4*cr0+lt, 4*cr0+eq
+      |  blt >1
     }
+    |  add PC, PC, TMP2
+    |1:
     |  ins_next
     break;
 
   case BC_ISEQV: case BC_ISNEV:
     vk = op == BC_ISEQV;
     |  // RA = src1*8, RD = src2*8, JMP with RD = target
-    |  evlddx CARG2, BASE, RA
+    |  lwzux TMP0, RA, BASE
+    |   lwz TMP2, 0(PC)
+    |    lfd f0, 0(RA)
     |   addi PC, PC, 4
-    |  evlddx CARG3, BASE, RD
-    |   addis TMP3, PC, -(BCBIAS_J*4 >> 16)
-    |   lwz TMP2, -4(PC)
-    |  evmergehi RB, CARG2, CARG3
+    |  lwzux TMP1, RD, BASE
+    |  checknum cr0, TMP0
     |   decode_RD4 TMP2, TMP2
-    |  checknum RB
-    |   add TMP2, TMP2, TMP3
-    |  checkanyfail >5
-    |  efdcmpeq CARG2, CARG3
+    |    lfd f1, 0(RD)
+    |  checknum cr1, TMP1
+    |   addis TMP2, TMP2, -(BCBIAS_J*4 >> 16)
+    |  bge cr0, >5
+    |  bge cr1, >5
+    |  fcmpu cr0, f0, f1
     if (vk) {
-      |  iselgt PC, TMP2, PC
+      |  bne >1
+      |  add PC, PC, TMP2
     } else {
-      |  iselgt PC, PC, TMP2
+      |  beq >1
+      |  add PC, PC, TMP2
     }
     |1:
     |  ins_next
     |
     |5:  // Either or both types are not numbers.
-    |  evcmpeq CARG2, CARG3
-    |   not TMP3, RB
+    |    lwz CARG2, 4(RA)
+    |    lwz CARG3, 4(RD)
+    |   not TMP3, TMP0
+    |  cmplw TMP0, TMP1
     |   cmplwi cr1, TMP3, ~LJ_TISPRI           // Primitive?
-    |  crorc 4*cr7+lt, 4*cr0+so, 4*cr0+lt      // 1: Same tv or different type.
     |   cmplwi cr6, TMP3, ~LJ_TISTABUD         // Table or userdata?
-    |  crandc 4*cr7+gt, 4*cr0+lt, 4*cr1+gt     // 2: Same type and primitive.
+    |    cmplw cr5, CARG2, CARG3
+    |  crandc 4*cr0+gt, 4*cr0+eq, 4*cr1+gt     // 2: Same type and primitive.
+    |  crorc 4*cr0+lt, 4*cr5+eq, 4*cr0+eq      // 1: Same tv or different type.
+    |  crand 4*cr0+eq, 4*cr0+eq, 4*cr5+eq      // 0: Same type and same tv.
     |   mr SAVE0, PC
+    |  cror 4*cr0+eq, 4*cr0+eq, 4*cr0+gt       // 0 or 2.
+    |  cror 4*cr0+lt, 4*cr0+lt, 4*cr0+gt       // 1 or 2.
     if (vk) {
-      |  isel PC, TMP2, PC, 4*cr7+gt
-    } else {
-      |  isel TMP2, PC, TMP2, 4*cr7+gt
-    }
-    |  cror 4*cr7+lt, 4*cr7+lt, 4*cr7+gt       // 1 or 2.
-    if (vk) {
-      |  isel PC, TMP2, PC, 4*cr0+so
+      |  bne cr0, >6
+      |  add PC, PC, TMP2
+      |6:
     } else {
-      |  isel PC, PC, TMP2, 4*cr0+so
+      |  beq cr0, >6
+      |  add PC, PC, TMP2
+      |6:
     }
-    |  blt cr7, <1                     // Done if 1 or 2.
+    |  blt cr0, <1                     // Done if 1 or 2.
     |  blt cr6, <1                     // Done if not tab/ud.
     |
     |  // Different tables or userdatas. Need to check __eq metamethod.
@@ -2183,52 +2157,57 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop)
   case BC_ISEQS: case BC_ISNES:
     vk = op == BC_ISEQS;
     |  // RA = src*8, RD = str_const*8 (~), JMP with RD = target
-    |  evlddx TMP0, BASE, RA
+    |  lwzux TMP0, RA, BASE
     |   srwi RD, RD, 1
+    |  lwz STR:TMP3, 4(RA)
     |    lwz INS, 0(PC)
     |   subfic RD, RD, -4
     |    addi PC, PC, 4
     |   lwzx STR:TMP1, KBASE, RD       // KBASE-4-str_const*4
-    |    addis TMP3, PC, -(BCBIAS_J*4 >> 16)
+    |  subfic TMP0, TMP0, LJ_TSTR
+    |  sub TMP1, STR:TMP1, STR:TMP3
+    |  or TMP0, TMP0, TMP1
     |    decode_RD4 TMP2, INS
-    |   evmergelo STR:TMP1, TISSTR, STR:TMP1
-    |    add TMP2, TMP2, TMP3
-    |  evcmpeq TMP0, STR:TMP1
+    |  subfic TMP0, TMP0, 0
+    |    addis TMP2, TMP2, -(BCBIAS_J*4 >> 16)
+    |  subfe TMP1, TMP1, TMP1
     if (vk) {
-      |  isel PC, TMP2, PC, 4*cr0+so
+      |  andc TMP2, TMP2, TMP1
     } else {
-      |  isel PC, PC, TMP2, 4*cr0+so
+      |  and TMP2, TMP2, TMP1
     }
+    |  add PC, PC, TMP2
     |  ins_next
     break;
 
   case BC_ISEQN: case BC_ISNEN:
     vk = op == BC_ISEQN;
     |  // RA = src*8, RD = num_const*8, JMP with RD = target
-    |  evlddx TMP0, BASE, RA
+    |  lwzx TMP0, BASE, RA
+    |   lfdx f0, BASE, RA
     |   addi PC, PC, 4
-    |  evlddx TMP1, KBASE, RD
-    |   addis TMP3, PC, -(BCBIAS_J*4 >> 16)
+    |  lfdx f1, KBASE, RD
     |   lwz INS, -4(PC)
-    |  checknum TMP0
-    |  checkfail >5
-    |  efdcmpeq TMP0, TMP1
-    |1:
+    |  checknum TMP0; bge >5
+    |  fcmpu cr0, f0, f1
     |   decode_RD4 TMP2, INS
-    |   add TMP2, TMP2, TMP3
+    |   addis TMP2, TMP2, -(BCBIAS_J*4 >> 16)
     if (vk) {
-      |  iselgt PC, TMP2, PC
+      |  bne >5
+      |  add PC, PC, TMP2
       |5:
     } else {
-      |  iselgt PC, PC, TMP2
+      |  beq >2
+      |1:
+      |  add PC, PC, TMP2
+      |2:
     }
-    |3:
     |  ins_next
     if (!vk) {
       |5:
       |  decode_RD4 TMP2, INS
-      |  add PC, TMP2, TMP3
-      |  b <3
+      |  addis TMP2, TMP2, -(BCBIAS_J*4 >> 16)
+      |  b <1
     }
     break;
 
@@ -2238,17 +2217,19 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop)
     |  lwzx TMP0, BASE, RA
     |   srwi TMP1, RD, 3
     |    lwz INS, 0(PC)
-    |    addi PC, PC, 4
     |   not TMP1, TMP1
-    |    addis TMP3, PC, -(BCBIAS_J*4 >> 16)
-    |  cmplw TMP0, TMP1
+    |    addi PC, PC, 4
+    |  sub TMP0, TMP0, TMP1
     |    decode_RD4 TMP2, INS
-    |    add TMP2, TMP2, TMP3
+    |  addic TMP0, TMP0, -1
+    |    addis TMP2, TMP2, -(BCBIAS_J*4 >> 16)
+    |  subfe TMP1, TMP1, TMP1
     if (vk) {
-      |  iseleq PC, TMP2, PC
+      |  and TMP2, TMP2, TMP1
     } else {
-      |  iseleq PC, PC, TMP2
+      |  andc TMP2, TMP2, TMP1
     }
+    |  add PC, PC, TMP2
     |  ins_next
     break;
 
@@ -2256,29 +2237,32 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop)
 
   case BC_ISTC: case BC_ISFC: case BC_IST: case BC_ISF:
     |  // RA = dst*8 or unused, RD = src*8, JMP with RD = target
-    |  evlddx TMP0, BASE, RD
-    |   evaddw TMP1, TISNIL, TISNIL    // Synthesize LJ_TFALSE.
+    |  lwzx TMP0, BASE, RD
     |   lwz INS, 0(PC)
-    |  evcmpltu TMP0, TMP1
     |   addi PC, PC, 4
     if (op == BC_IST || op == BC_ISF) {
-      |  addis TMP3, PC, -(BCBIAS_J*4 >> 16)
-      |  decode_RD4 TMP2, INS
-      |  add TMP2, TMP2, TMP3
+      |  subfic TMP0, TMP0, LJ_TTRUE
+      |   decode_RD4 TMP2, INS
+      |  subfe TMP1, TMP1, TMP1
+      |   addis TMP2, TMP2, -(BCBIAS_J*4 >> 16)
       if (op == BC_IST) {
-       |  isellt PC, TMP2, PC
+       |  andc TMP2, TMP2, TMP1
       } else {
-       |  isellt PC, PC, TMP2
+       |  and TMP2, TMP2, TMP1
       }
+      |  add PC, PC, TMP2
     } else {
+      |  li TMP1, LJ_TFALSE
+      |   lfdx f0, BASE, RD
+      |  cmplw TMP0, TMP1
       if (op == BC_ISTC) {
-       |  checkfail >1
+       |  bge >1
       } else {
-       |  checkok >1
+       |  blt >1
       }
       |  addis PC, PC, -(BCBIAS_J*4 >> 16)
       |  decode_RD4 TMP2, INS
-      |   evstddx TMP0, BASE, RA
+      |   stfdx f0, BASE, RA
       |  add PC, PC, TMP2
       |1:
     }
@@ -2290,8 +2274,8 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop)
   case BC_MOV:
     |  // RA = dst*8, RD = src*8
     |  ins_next1
-    |  evlddx TMP0, BASE, RD
-    |  evstddx TMP0, BASE, RA
+    |  lfdx f0, BASE, RD
+    |  stfdx f0, BASE, RA
     |  ins_next2
     break;
   case BC_NOT:
@@ -2305,28 +2289,28 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop)
     break;
   case BC_UNM:
     |  // RA = dst*8, RD = src*8
-    |  evlddx TMP0, BASE, RD
-    |  checknum TMP0
-    |  checkfail ->vmeta_unm
-    |  efdneg TMP0, TMP0
+    |  lwzux TMP1, RD, BASE
+    |   lwz TMP0, 4(RD)
+    |  checknum TMP1; bge ->vmeta_unm
+    |  xoris TMP1, TMP1, 0x8000
     |  ins_next1
-    |  evstddx TMP0, BASE, RA
+    |  stwux TMP1, RA, BASE
+    |   stw TMP0, 4(RA)
     |  ins_next2
     break;
   case BC_LEN:
     |  // RA = dst*8, RD = src*8
-    |  evlddx CARG1, BASE, RD
-    |  checkstr CARG1
-    |  checkfail >2
+    |  lwzux TMP0, RD, BASE
+    |   lwz CARG1, 4(RD)
+    |  checkstr TMP0; bne >2
     |  lwz CRET1, STR:CARG1->len
     |1:
+    |  tonum_u f0, CRET1               // Result is a non-negative integer.
     |  ins_next1
-    |  efdcfsi TMP0, CRET1
-    |  evstddx TMP0, BASE, RA
+    |  stfdx f0, BASE, RA
     |  ins_next2
     |2:
-    |  checktab CARG1
-    |  checkfail ->vmeta_len
+    |  checktab TMP0; bne ->vmeta_len
 #ifdef LUAJIT_ENABLE_LUA52COMPAT
     |  lwz TAB:TMP2, TAB:CARG1->metatable
     |  cmplwi TAB:TMP2, 0
@@ -2353,72 +2337,77 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop)
     ||vk = ((int)op - BC_ADDVN) / (BC_ADDNV-BC_ADDVN);
     ||switch (vk) {
     ||case 0:
-    |   evlddx t0, BASE, RB
-    |    checknum t0
-    |   evlddx t1, KBASE, RC
-    |    checkfail ->vmeta_arith_vn
+    |   lwzx CARG1, BASE, RB
+    |    lfdx t0, BASE, RB
+    |    lfdx t1, KBASE, RC
+    |   checknum CARG1; bge ->vmeta_arith_vn
     ||  break;
     ||case 1:
-    |   evlddx t1, BASE, RB
-    |    checknum t1
-    |   evlddx t0, KBASE, RC
-    |    checkfail ->vmeta_arith_nv
+    |   lwzx CARG1, BASE, RB
+    |    lfdx t1, BASE, RB
+    |    lfdx t0, KBASE, RC
+    |   checknum CARG1; bge ->vmeta_arith_nv
     ||  break;
     ||default:
-    |   evlddx t0, BASE, RB
-    |   evlddx t1, BASE, RC
-    |    evmergehi TMP2, t0, t1
-    |    checknum TMP2
-    |    checkanyfail ->vmeta_arith_vv
+    |   lwzx CARG1, BASE, RB
+    |   lwzx CARG2, BASE, RC
+    |    lfdx t0, BASE, RB
+    |    lfdx t1, BASE, RC
+    |   checknum cr0, CARG1
+    |   checknum cr1, CARG2
+    |   crand 4*cr0+lt, 4*cr0+lt, 4*cr1+lt
+    |   bge ->vmeta_arith_vv
     ||  break;
     ||}
     |.endmacro
     |
     |.macro ins_arith, ins
-    |  ins_arithpre TMP0, TMP1
+    |  ins_arithpre f0, f1
     |  ins_next1
-    |  ins TMP0, TMP0, TMP1
-    |  evstddx TMP0, BASE, RA
+    |  ins f0, f0, f1
+    |  stfdx f0, BASE, RA
     |  ins_next2
     |.endmacro
 
   case BC_ADDVN: case BC_ADDNV: case BC_ADDVV:
-    |  ins_arith efdadd
+    |  ins_arith fadd
     break;
   case BC_SUBVN: case BC_SUBNV: case BC_SUBVV:
-    |  ins_arith efdsub
+    |  ins_arith fsub
     break;
   case BC_MULVN: case BC_MULNV: case BC_MULVV:
-    |  ins_arith efdmul
+    |  ins_arith fmul
     break;
   case BC_DIVVN: case BC_DIVNV: case BC_DIVVV:
-    |  ins_arith efddiv
+    |  ins_arith fdiv
     break;
   case BC_MODVN:
-    |  ins_arithpre RD, SAVE0
+    |  ins_arithpre f14, f15
     |->BC_MODVN_Z:
-    |  efddiv CARG2, RD, SAVE0
-    |  bl ->vm_floor_efd               // floor(b/c)
-    |  efdmul TMP0, CRET2, SAVE0
+    |  fdiv FARG1, f14, f15
+    |  // NYI: Use internal implementation of floor.
+    |  bl extern floor                 // floor(b/c)
+    |  fmul f0, FARG1, f15
     |  ins_next1
-    |  efdsub TMP0, RD, TMP0           // b - floor(b/c)*c
-    |  evstddx TMP0, BASE, RA
+    |  fsub f0, f14, f0                        // b - floor(b/c)*c
+    |  stfdx f0, BASE, RA
     |  ins_next2
     break;
   case BC_MODNV: case BC_MODVV:
-    |  ins_arithpre RD, SAVE0
+    |  ins_arithpre f14, f15
     |  b ->BC_MODVN_Z                  // Avoid 3 copies. It's slow anyway.
     break;
   case BC_POW:
-    |  evlddx CARG2, BASE, RB
-    |  evlddx CARG4, BASE, RC
-    |  evmergehi CARG1, CARG4, CARG2
-    |  checknum CARG1
-    |   evmergehi CARG3, CARG4, CARG4
-    |  checkanyfail ->vmeta_arith_vv
+    |  lwzx CARG1, BASE, RB
+    |   lfdx FARG1, BASE, RB
+    |  lwzx CARG2, BASE, RC
+    |   lfdx FARG2, BASE, RC
+    |  checknum cr0, CARG1
+    |  checknum cr1, CARG2
+    |  crand 4*cr0+lt, 4*cr0+lt, 4*cr1+lt
+    |  bge ->vmeta_arith_vv
     |  bl extern pow
-    |  evmergelo CRET2, CRET1, CRET2
-    |  evstddx CRET2, BASE, RA
+    |  stfdx FARG1, BASE, RA
     |  ins_next
     break;
 
@@ -2437,8 +2426,8 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop)
     |  cmplwi CRET1, 0
     |   lwz BASE, L->base
     |  bne ->vmeta_binop
-    |  evlddx TMP0, BASE, SAVE0                // Copy result from RB to RA.
-    |  evstddx TMP0, BASE, RA
+    |  lfdx f0, BASE, SAVE0            // Copy result from RB to RA.
+    |  stfdx f0, BASE, RA
     |  ins_next
     break;
 
@@ -2446,41 +2435,63 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop)
 
   case BC_KSTR:
     |  // RA = dst*8, RD = str_const*8 (~)
-    |  ins_next1
     |  srwi TMP1, RD, 1
     |  subfic TMP1, TMP1, -4
     |  lwzx TMP0, KBASE, TMP1          // KBASE-4-str_const*4
-    |  evmergelo TMP0, TISSTR, TMP0
-    |  evstddx TMP0, BASE, RA
+    |  li TMP2, LJ_TSTR
+    |  ins_next1
+    |  stwux TMP2, RA, BASE
+    |  stw TMP0, 4(RA)
     |  ins_next2
     break;
   case BC_KCDATA:
 #if LJ_HASFFI
     |  // RA = dst*8, RD = cdata_const*8 (~)
-    |  ins_next1
     |  srwi TMP1, RD, 1
     |  subfic TMP1, TMP1, -4
     |  lwzx TMP0, KBASE, TMP1          // KBASE-4-cdata_const*4
     |  li TMP2, LJ_TCDATA
-    |  evmergelo TMP0, TMP2, TMP0
-    |  evstddx TMP0, BASE, RA
+    |  ins_next1
+    |  stwux TMP2, RA, BASE
+    |  stw TMP0, 4(RA)
     |  ins_next2
 #endif
     break;
   case BC_KSHORT:
     |  // RA = dst*8, RD = int16_literal*8
-    |  srwi TMP1, RD, 3
-    |  extsh TMP1, TMP1
+    |  // NYI: which approach is faster?
+    |.if 1
+    |  slwi RD, RD, 13
+    |  srawi RD, RD, 16
+    |  tonum_i f0, RD
+    |  ins_next1
+    |   stfdx f0, BASE, RA
+    |  ins_next2
+    |.else
+    |  slwi RD, RD, 13
+    |  srawi TMP1, RD, 31
+    |  xor TMP2, TMP1, RD
+    |  sub TMP2, TMP2, TMP1            // TMP2 = abs(x)
+    |  cntlzw TMP3, TMP2
+    |  subfic TMP1, TMP3, 0x40d                // TMP1 = exponent-1
+    |   slw TMP2, TMP2, TMP3           // TMP2 = left aligned mantissa
+    |    subfic TMP3, RD, 0
+    |  slwi TMP1, TMP1, 20
+    |   rlwimi RD, TMP2, 21, 1, 31     // hi = sign(x) | (mantissa>>11)
+    |    subfe TMP0, TMP0, TMP0
+    |   add RD, RD, TMP1               // hi = hi + exponent-1
+    |    and RD, RD, TMP0              // hi = x == 0 ? 0 : hi
     |  ins_next1
-    |  efdcfsi TMP0, TMP1
-    |  evstddx TMP0, BASE, RA
+    |    stwux RD, RA, BASE
+    |    stw ZERO, 4(RA)
     |  ins_next2
+    |.endif
     break;
   case BC_KNUM:
     |  // RA = dst*8, RD = num_const*8
-    |  evlddx TMP0, KBASE, RD
+    |  lfdx f0, KBASE, RD
     |  ins_next1
-    |  evstddx TMP0, BASE, RA
+    |  stfdx f0, BASE, RA
     |  ins_next2
     break;
   case BC_KPRI:
@@ -2493,10 +2504,10 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop)
     break;
   case BC_KNIL:
     |  // RA = base*8, RD = end*8
-    |  evstddx TISNIL, BASE, RA
+    |  stwx TISNIL, BASE, RA
     |   addi RA, RA, 8
     |1:
-    |  evstddx TISNIL, BASE, RA
+    |  stwx TISNIL, BASE, RA
     |  cmpw RA, RD
     |   addi RA, RA, 8
     |  blt <1
@@ -2513,8 +2524,8 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop)
     |   addi RD, RD, offsetof(GCfuncL, uvptr)
     |  lwzx UPVAL:RB, LFUNC:RB, RD
     |  lwz TMP1, UPVAL:RB->v
-    |  evldd TMP0, 0(TMP1)
-    |  evstddx TMP0, BASE, RA
+    |  lfd f0, 0(TMP1)
+    |  stfdx f0, BASE, RA
     |  ins_next2
     break;
   case BC_USETV:
@@ -2522,15 +2533,16 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop)
     |  lwz LFUNC:RB, FRAME_FUNC(BASE)
     |    srwi RA, RA, 1
     |    addi RA, RA, offsetof(GCfuncL, uvptr)
-    |   evlddx TMP1, BASE, RD
+    |   lfdux f0, RD, BASE
     |  lwzx UPVAL:RB, LFUNC:RB, RA
     |  lbz TMP3, UPVAL:RB->marked
     |   lwz CARG2, UPVAL:RB->v
     |  andi. TMP3, TMP3, LJ_GC_BLACK   // isblack(uv)
     |    lbz TMP0, UPVAL:RB->closed
-    |   evmergehi TMP2, TMP1, TMP1
-    |   evstdd TMP1, 0(CARG2)
+    |   lwz TMP2, 0(RD)
+    |   stfd f0, 0(CARG2)
     |    cmplwi cr1, TMP0, 0
+    |   lwz TMP1, 4(RD)
     |  cror 4*cr0+eq, 4*cr0+eq, 4*cr1+eq
     |   subi TMP2, TMP2, (LJ_TISNUM+1)
     |  bne >2                          // Upvalue is closed and black?
@@ -2558,13 +2570,14 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop)
     |    addi RA, RA, offsetof(GCfuncL, uvptr)
     |   lwzx STR:TMP1, KBASE, TMP1     // KBASE-4-str_const*4
     |  lwzx UPVAL:RB, LFUNC:RB, RA
-    |   evmergelo STR:TMP1, TISSTR, STR:TMP1
     |  lbz TMP3, UPVAL:RB->marked
     |   lwz CARG2, UPVAL:RB->v
     |  andi. TMP3, TMP3, LJ_GC_BLACK   // isblack(uv)
     |   lbz TMP3, STR:TMP1->marked
     |   lbz TMP2, UPVAL:RB->closed
-    |   evstdd STR:TMP1, 0(CARG2)
+    |   li TMP0, LJ_TSTR
+    |   stw STR:TMP1, 4(CARG2)
+    |   stw TMP0, 0(CARG2)
     |  bne >2
     |1:
     |  ins_next2
@@ -2585,10 +2598,10 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop)
     |  lwz LFUNC:RB, FRAME_FUNC(BASE)
     |   srwi RA, RA, 1
     |   addi RA, RA, offsetof(GCfuncL, uvptr)
-    |    evlddx TMP0, KBASE, RD
+    |    lfdx f0, KBASE, RD
     |  lwzx UPVAL:RB, LFUNC:RB, RA
     |  lwz TMP1, UPVAL:RB->v
-    |  evstdd TMP0, 0(TMP1)
+    |  stfd f0, 0(TMP1)
     |  ins_next2
     break;
   case BC_USETP:
@@ -2633,8 +2646,9 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop)
     |  bl extern lj_func_newL_gc
     |  // Returns GCfuncL *.
     |  lwz BASE, L->base
-    |  evmergelo LFUNC:CRET1, TISFUNC, LFUNC:CRET1
-    |  evstddx LFUNC:CRET1, BASE, RA
+    |   li TMP0, LJ_TFUNC
+    |  stwux TMP0, RA, BASE
+    |  stw LFUNC:CRET1, 4(RA)
     |  ins_next
     break;
 
@@ -2654,9 +2668,8 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop)
     if (op == BC_TNEW) {
       |  rlwinm CARG2, RD, 29, 21, 31
       |  rlwinm CARG3, RD, 18, 27, 31
-      |  cmpwi CARG2, 0x7ff
-      |   li TMP1, 0x801
-      |  iseleq CARG2, TMP1, CARG2
+      |  cmpwi CARG2, 0x7ff; beq >3
+      |2:
       |  bl extern lj_tab_new  // (lua_State *L, int32_t asize, uint32_t hbits)
       |  // Returns Table *.
     } else {
@@ -2667,9 +2680,15 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop)
       |  // Returns Table *.
     }
     |  lwz BASE, L->base
-    |  evmergelo TAB:CRET1, TISTAB, TAB:CRET1
-    |  evstddx TAB:CRET1, BASE, RA
+    |   li TMP0, LJ_TTAB
+    |  stwux TMP0, RA, BASE
+    |  stw TAB:CRET1, 4(RA)
     |  ins_next
+    if (op == BC_TNEW) {
+      |3:
+      |  li CARG2, 0x801
+      |  b <2
+    }
     |5:
     |  mr SAVE0, RD
     |  bl extern lj_gc_step_fixtop  // (lua_State *L)
@@ -2696,28 +2715,34 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop)
 
   case BC_TGETV:
     |  // RA = dst*8, RB = table*8, RC = key*8
-    |  evlddx TAB:RB, BASE, RB
-    |   evlddx RC, BASE, RC
-    |  checktab TAB:RB
-    |  checkfail ->vmeta_tgetv
-    |  checknum RC
-    |  checkfail >5
-    |  // Convert number key to integer
-    |  efdctsi TMP2, RC
+    |  lwzux CARG1, RB, BASE
+    |  lwzux CARG2, RC, BASE
+    |   lwz TAB:RB, 4(RB)
+    |   lfd f0, 0(RC)
+    |  checktab CARG1
+    |  checknum cr1, CARG2
+    |  bne ->vmeta_tgetv
+    |  bge cr1, >5
+    |  // Convert number key to integer, check for integerness and range.
+    |  fctiwz f1, f0
+    |    fadd f2, f0, TOBIT
+    |  stfd f1, TMPD
     |   lwz TMP0, TAB:RB->asize
-    |  efdcfsi TMP1, TMP2
-    |   cmplw cr0, TMP0, TMP2
-    |  efdcmpeq cr1, RC, TMP1
+    |    fsub f2, f2, TOBIT
+    |  lwz TMP2, TMPD_LO
     |   lwz TMP1, TAB:RB->array
-    |  crand 4*cr0+gt, 4*cr0+gt, 4*cr1+gt
+    |    fcmpu cr1, f0, f2
+    |  cmplw cr0, TMP0, TMP2
+    |  crand 4*cr0+gt, 4*cr0+gt, 4*cr1+eq
     |   slwi TMP2, TMP2, 3
     |  ble ->vmeta_tgetv               // Integer key and in array part?
-    |  evlddx TMP1, TMP1, TMP2
-    |  checknil TMP1
-    |  checkok >2
+    |  lwzx TMP0, TMP1, TMP2
+    |   lfdx f14, TMP1, TMP2
+    |  checknil TMP0; beq >2
     |1:
-    |  evstddx TMP1, BASE, RA
-    |  ins_next
+    |  ins_next1
+    |   stfdx f14, BASE, RA
+    |  ins_next2
     |
     |2:  // Check for __index if table value is nil.
     |  lwz TAB:TMP2, TAB:RB->metatable
@@ -2729,38 +2754,40 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop)
     |  b ->vmeta_tgetv
     |
     |5:
-    |  checkstr STR:RC                 // String key?
-    |  checkok ->BC_TGETS_Z
-    |  b ->vmeta_tgetv
+    |  checkstr CARG2; bne ->vmeta_tgetv
+    |  lwz STR:RC, 4(RC)
+    |  b ->BC_TGETS_Z                  // String key?
     break;
   case BC_TGETS:
     |  // RA = dst*8, RB = table*8, RC = str_const*8 (~)
-    |  evlddx TAB:RB, BASE, RB
+    |  lwzux CARG1, RB, BASE
     |   srwi TMP1, RC, 1
-    |  checktab TAB:RB
+    |    lwz TAB:RB, 4(RB)
     |   subfic TMP1, TMP1, -4
+    |  checktab CARG1
     |   lwzx STR:RC, KBASE, TMP1       // KBASE-4-str_const*4
-    |  checkfail ->vmeta_tgets1
+    |  bne ->vmeta_tgets1
     |->BC_TGETS_Z:
     |  // TAB:RB = GCtab *, STR:RC = GCstr *, RA = dst*8
     |  lwz TMP0, TAB:RB->hmask
     |  lwz TMP1, STR:RC->hash
     |  lwz NODE:TMP2, TAB:RB->node
-    |   evmergelo STR:RC, TISSTR, STR:RC
     |  and TMP1, TMP1, TMP0            // idx = str->hash & tab->hmask
     |  slwi TMP0, TMP1, 5
     |  slwi TMP1, TMP1, 3
     |  sub TMP1, TMP0, TMP1
     |  add NODE:TMP2, NODE:TMP2, TMP1  // node = tab->node + (idx*32-idx*8)
     |1:
-    |  evldd TMP0, NODE:TMP2->key
-    |   evldd TMP1, NODE:TMP2->val
-    |  evcmpeq TMP0, STR:RC
-    |  checkanyfail >4
-    |   checknil TMP1
-    |   checkok >5                     // Key found, but nil value?
+    |  lwz CARG1, NODE:TMP2->key
+    |   lwz TMP0, 4+offsetof(Node, key)(NODE:TMP2)
+    |    lwz CARG2, NODE:TMP2->val
+    |     lwz TMP1, 4+offsetof(Node, val)(NODE:TMP2)
+    |  checkstr CARG1; bne >4
+    |   cmpw TMP0, STR:RC; bne >4
+    |    checknil CARG2; beq >5                // Key found, but nil value?
     |3:
-    |   evstddx TMP1, BASE, RA
+    |    stwux CARG2, RA, BASE
+    |     stw TMP1, 4(RA)
     |  ins_next
     |
     |4:  // Follow hash chain.
@@ -2768,7 +2795,7 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop)
     |  cmplwi NODE:TMP2, 0
     |  bne <1
     |  // End of hash chain: key not found, nil result.
-    |   evmr TMP1, TISNIL
+    |   li CARG2, LJ_TNIL
     |
     |5:  // Check for __index if table value is nil.
     |  lwz TAB:TMP2, TAB:RB->metatable
@@ -2781,20 +2808,19 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop)
     break;
   case BC_TGETB:
     |  // RA = dst*8, RB = table*8, RC = index*8
-    |  evlddx TAB:RB, BASE, RB
+    |  lwzux CARG1, RB, BASE
+    |   lwz TAB:RB, 4(RB)
     |   srwi TMP0, RC, 3
-    |  checktab TAB:RB
-    |  checkfail ->vmeta_tgetb
+    |  checktab CARG1; bne ->vmeta_tgetb
     |  lwz TMP1, TAB:RB->asize
     |   lwz TMP2, TAB:RB->array
-    |  cmplw TMP0, TMP1
-    |  bge ->vmeta_tgetb
-    |  evlddx TMP1, TMP2, RC
-    |  checknil TMP1
-    |  checkok >5
+    |  cmplw TMP0, TMP1; bge ->vmeta_tgetb
+    |  lwzx TMP1, TMP2, RC
+    |   lfdx f0, TMP2, RC
+    |  checknil TMP1; beq >5
     |1:
     |  ins_next1
-    |  evstddx TMP1, BASE, RA
+    |   stfdx f0, BASE, RA
     |  ins_next2
     |
     |5:  // Check for __index if table value is nil.
@@ -2809,30 +2835,34 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop)
 
   case BC_TSETV:
     |  // RA = src*8, RB = table*8, RC = key*8
-    |  evlddx TAB:RB, BASE, RB
-    |   evlddx RC, BASE, RC
-    |  checktab TAB:RB
-    |  checkfail ->vmeta_tsetv
-    |  checknum RC
-    |  checkfail >5
-    |  // Convert number key to integer
-    |  efdctsi TMP2, RC
-    |    evlddx SAVE0, BASE, RA
+    |  lwzux CARG1, RB, BASE
+    |  lwzux CARG2, RC, BASE
+    |   lwz TAB:RB, 4(RB)
+    |   lfd f0, 0(RC)
+    |  checktab CARG1
+    |  checknum cr1, CARG2
+    |  bne ->vmeta_tsetv
+    |  bge cr1, >5
+    |  // Convert number key to integer, check for integerness and range.
+    |  fctiwz f1, f0
+    |    fadd f2, f0, TOBIT
+    |  stfd f1, TMPD
     |   lwz TMP0, TAB:RB->asize
-    |  efdcfsi TMP1, TMP2
-    |   cmplw cr0, TMP0, TMP2
-    |  efdcmpeq cr1, RC, TMP1
+    |    fsub f2, f2, TOBIT
+    |  lwz TMP2, TMPD_LO
     |   lwz TMP1, TAB:RB->array
-    |  crand 4*cr0+gt, 4*cr0+gt, 4*cr1+gt
+    |    fcmpu cr1, f0, f2
+    |  cmplw cr0, TMP0, TMP2
+    |  crand 4*cr0+gt, 4*cr0+gt, 4*cr1+eq
     |   slwi TMP0, TMP2, 3
     |  ble ->vmeta_tsetv               // Integer key and in array part?
-    |   lbz TMP3, TAB:RB->marked
-    |  evlddx TMP2, TMP1, TMP0
-    |  checknil TMP2
-    |  checkok >3
+    |   lwzx TMP2, TMP1, TMP0
+    |  lbz TMP3, TAB:RB->marked
+    |    lfdx f14, BASE, RA
+    |   checknil TMP2; beq >3
     |1:
     |  andi. TMP2, TMP3, LJ_GC_BLACK   // isblack(table)
-    |   evstddx SAVE0, TMP1, TMP0
+    |    stfdx f14, TMP1, TMP0
     |  bne >7
     |2:
     |  ins_next
@@ -2847,46 +2877,55 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop)
     |  b ->vmeta_tsetv
     |
     |5:
-    |  checkstr STR:RC                 // String key?
-    |  checkok ->BC_TSETS_Z
-    |  b ->vmeta_tsetv
+    |  checkstr CARG2; bne ->vmeta_tsetv
+    |  lwz STR:RC, 4(RC)
+    |  b ->BC_TSETS_Z                  // String key?
     |
     |7:  // Possible table write barrier for the value. Skip valiswhite check.
     |  barrierback TAB:RB, TMP3, TMP0
     |  b <2
     break;
+    |1:
+    |  checkstr CARG1; bne >4
+    |   cmpw TMP0, STR:RC; bne >4
+    |    checknil CARG2; beq >5                // Key found, but nil value?
+    |3:
+    |    stwux CARG2, RA, BASE
+    |     stw TMP1, 4(RA)
+    |  ins_next
   case BC_TSETS:
     |  // RA = src*8, RB = table*8, RC = str_const*8 (~)
-    |  evlddx TAB:RB, BASE, RB
+    |  lwzux CARG1, RB, BASE
     |   srwi TMP1, RC, 1
-    |  checktab TAB:RB
+    |    lwz TAB:RB, 4(RB)
     |   subfic TMP1, TMP1, -4
+    |  checktab CARG1
     |   lwzx STR:RC, KBASE, TMP1       // KBASE-4-str_const*4
-    |  checkfail ->vmeta_tsets1
+    |  bne ->vmeta_tsets1
     |->BC_TSETS_Z:
     |  // TAB:RB = GCtab *, STR:RC = GCstr *, RA = src*8
     |  lwz TMP0, TAB:RB->hmask
     |  lwz TMP1, STR:RC->hash
     |  lwz NODE:TMP2, TAB:RB->node
-    |   evmergelo STR:RC, TISSTR, STR:RC
     |    stb ZERO, TAB:RB->nomm                // Clear metamethod cache.
     |  and TMP1, TMP1, TMP0            // idx = str->hash & tab->hmask
-    |    evlddx SAVE0, BASE, RA
+    |    lfdx f14, BASE, RA
     |  slwi TMP0, TMP1, 5
     |  slwi TMP1, TMP1, 3
     |  sub TMP1, TMP0, TMP1
     |    lbz TMP3, TAB:RB->marked
     |  add NODE:TMP2, NODE:TMP2, TMP1  // node = tab->node + (idx*32-idx*8)
     |1:
-    |  evldd TMP0, NODE:TMP2->key
-    |   evldd TMP1, NODE:TMP2->val
-    |  evcmpeq TMP0, STR:RC
-    |  checkanyfail >5
-    |   checknil TMP1
-    |   checkok >4                     // Key found, but nil value?
+    |  lwz CARG1, NODE:TMP2->key
+    |   lwz TMP0, 4+offsetof(Node, key)(NODE:TMP2)
+    |    lwz CARG2, NODE:TMP2->val
+    |     lwz TMP1, 4+offsetof(Node, val)(NODE:TMP2)
+    |  checkstr CARG1; bne >5
+    |   cmpw TMP0, STR:RC; bne >5
+    |    checknil CARG2; beq >4                // Key found, but nil value?
     |2:
     |  andi. TMP0, TMP3, LJ_GC_BLACK   // isblack(table)
-    |    evstdd SAVE0, NODE:TMP2->val
+    |    stfd f14, NODE:TMP2->val
     |  bne >7
     |3:
     |  ins_next
@@ -2918,12 +2957,14 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop)
     |  andi. TMP0, TMP0, 1<<MM_newindex
     |  beq ->vmeta_tsets               // 'no __newindex' flag NOT set: check.
     |6:
-    |  mr CARG2, TAB:RB
-    |  evstdd STR:RC, 0(CARG3)
+    |  li TMP0, LJ_TSTR
+    |   stw STR:RC, 4(CARG3)
+    |   mr CARG2, TAB:RB
+    |  stw TMP0, 0(CARG3)
     |  bl extern lj_tab_newkey         // (lua_State *L, GCtab *t, TValue *k)
     |  // Returns TValue *.
     |  lwz BASE, L->base
-    |  evstdd SAVE0, 0(CRET1)
+    |  stfd f14, 0(CRET1)
     |  b <3                            // No 2nd write barrier needed.
     |
     |7:  // Possible table write barrier for the value. Skip valiswhite check.
@@ -2932,22 +2973,21 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop)
     break;
   case BC_TSETB:
     |  // RA = src*8, RB = table*8, RC = index*8
-    |  evlddx TAB:RB, BASE, RB
+    |  lwzux CARG1, RB, BASE
+    |   lwz TAB:RB, 4(RB)
     |   srwi TMP0, RC, 3
-    |  checktab TAB:RB
-    |  checkfail ->vmeta_tsetb
+    |  checktab CARG1; bne ->vmeta_tsetb
     |  lwz TMP1, TAB:RB->asize
     |   lwz TMP2, TAB:RB->array
     |    lbz TMP3, TAB:RB->marked
     |  cmplw TMP0, TMP1
-    |   evlddx SAVE0, BASE, RA
+    |   lfdx f14, BASE, RA
     |  bge ->vmeta_tsetb
-    |  evlddx TMP1, TMP2, RC
-    |  checknil TMP1
-    |  checkok >5
+    |  lwzx TMP1, TMP2, RC
+    |  checknil TMP1; beq >5
     |1:
     |  andi. TMP0, TMP3, LJ_GC_BLACK   // isblack(table)
-    |   evstddx SAVE0, TMP2, RC
+    |   stfdx f14, TMP2, RC
     |  bne >7
     |2:
     |  ins_next
@@ -2987,10 +3027,10 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop)
     |   add TMP1, TMP1, TMP0
     |    andi. TMP0, TMP3, LJ_GC_BLACK // isblack(table)
     |3:  // Copy result slots to table.
-    |   evldd TMP0, 0(RA)
+    |   lfd f0, 0(RA)
     |  addi RA, RA, 8
     |  cmpw cr1, RA, TMP2
-    |   evstdd TMP0, 0(TMP1)
+    |   stfd f0, 0(TMP1)
     |    addi TMP1, TMP1, 8
     |  blt cr1, <3
     |  bne >7
@@ -3021,13 +3061,12 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop)
     break;
   case BC_CALL:
     |  // RA = base*8, (RB = (nresults+1)*8,) RC = (nargs+1)*8
-    |  evlddx LFUNC:RB, BASE, RA
-    |   mr TMP2, BASE
-    |   add BASE, BASE, RA
+    |  mr TMP2, BASE
+    |  lwzux TMP0, BASE, RA
+    |   lwz LFUNC:RB, 4(BASE)
     |    subi NARGS8:RC, NARGS8:RC, 8
-    |  checkfunc LFUNC:RB
     |   addi BASE, BASE, 8
-    |  checkfail ->vmeta_call
+    |  checkfunc TMP0; bne ->vmeta_call
     |  ins_call
     break;
 
@@ -3038,13 +3077,13 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop)
     break;
   case BC_CALLT:
     |  // RA = base*8, (RB = 0,) RC = (nargs+1)*8
-    |  evlddx LFUNC:RB, BASE, RA
-    |   add RA, BASE, RA
-    |    lwz TMP1, FRAME_PC(BASE)
+    |  lwzux TMP0, RA, BASE
+    |   lwz LFUNC:RB, 4(RA)
     |    subi NARGS8:RC, NARGS8:RC, 8
-    |  checkfunc LFUNC:RB
+    |    lwz TMP1, FRAME_PC(BASE)
+    |  checkfunc TMP0
     |   addi RA, RA, 8
-    |  checkfail ->vmeta_callt
+    |  bne ->vmeta_callt
     |->BC_CALLT_Z:
     |  andi. TMP0, TMP1, FRAME_TYPE    // Caveat: preserve cr0 until the crand.
     |   lbz TMP3, LFUNC:RB->ffid
@@ -3058,9 +3097,9 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop)
     |    beq cr1, >3
     |2:
     |  addi TMP3, TMP2, 8
-    |   evlddx TMP0, RA, TMP2
+    |   lfdx f0, RA, TMP2
     |  cmplw cr1, TMP3, NARGS8:RC
-    |   evstddx TMP0, BASE, TMP2
+    |   stfdx f0, BASE, TMP2
     |  mr TMP2, TMP3
     |  bne cr1, <2
     |3:
@@ -3089,19 +3128,19 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop)
 
   case BC_ITERC:
     |  // RA = base*8, (RB = (nresults+1)*8, RC = (nargs+1)*8 ((2+1)*8))
-    |  subi RA, RA, 24                 // evldd doesn't support neg. offsets.
-    |   mr TMP2, BASE
-    |  evlddx LFUNC:RB, BASE, RA
-    |   add BASE, BASE, RA
-    |   evldd TMP0, 8(BASE)
-    |    evldd TMP1, 16(BASE)
-    |  evstdd LFUNC:RB, 24(BASE)       // Copy callable.
-    |  checkfunc LFUNC:RB
-    |   evstdd TMP0, 32(BASE)          // Copy state.
+    |  mr TMP2, BASE
+    |  add BASE, BASE, RA
+    |  lwz TMP1, -24(BASE)
+    |   lwz LFUNC:RB, -20(BASE)
+    |    lfd f1, -8(BASE)
+    |    lfd f0, -16(BASE)
+    |  stw TMP1, 0(BASE)               // Copy callable.
+    |   stw LFUNC:RB, 4(BASE)
+    |  checkfunc TMP1
+    |    stfd f1, 16(BASE)             // Copy control var.
     |     li NARGS8:RC, 16             // Iterators get 2 arguments.
-    |    evstdd TMP1, 40(BASE)         // Copy control var.
-    |     addi BASE, BASE, 32
-    |  checkfail ->vmeta_call
+    |    stfdu f0, 8(BASE)             // Copy state.
+    |  bne ->vmeta_call
     |  ins_call
     break;
 
@@ -3120,18 +3159,19 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop)
     |  cmplw RC, TMP0
     |   slwi TMP3, RC, 3
     |  bge >5                          // Index points after array part?
-    |  evlddx TMP2, TMP1, TMP3
+    |  lwzx TMP2, TMP1, TMP3
+    |   lfdx f0, TMP1, TMP3
     |  checknil TMP2
     |     lwz INS, -4(PC)
-    |  checkok >4
-    |   efdcfsi TMP0, RC
+    |  beq >4
+    |   tonum_u f1, RC
     |    addi RC, RC, 1
     |     addis TMP3, PC, -(BCBIAS_J*4 >> 16)
-    |  evstdd TMP2, 8(RA)
+    |  stfd f0, 8(RA)
     |     decode_RD4 TMP1, INS
     |    stw RC, -4(RA)                        // Update control var.
     |     add PC, TMP1, TMP3
-    |   evstdd TMP0, 0(RA)
+    |   stfd f1, 0(RA)
     |3:
     |  ins_next
     |
@@ -3149,17 +3189,18 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop)
     |  bgt <3
     |   slwi RB, RC, 3
     |   sub TMP3, TMP3, RB
-    |  evlddx RB, TMP2, TMP3
+    |  lwzx RB, TMP2, TMP3
+    |  lfdx f0, TMP2, TMP3
     |   add NODE:TMP3, TMP2, TMP3
     |  checknil RB
     |     lwz INS, -4(PC)
-    |  checkok >7
-    |   evldd TMP3, NODE:TMP3->key
+    |  beq >7
+    |   lfd f1, NODE:TMP3->key
     |     addis TMP2, PC, -(BCBIAS_J*4 >> 16)
-    |  evstdd RB, 8(RA)
+    |  stfd f0, 8(RA)
     |    add RC, RC, TMP0
     |     decode_RD4 TMP1, INS
-    |   evstdd TMP3, 0(RA)
+    |   stfd f1, 0(RA)
     |    addi RC, RC, 1
     |     add PC, TMP1, TMP2
     |    stw RC, -4(RA)                        // Update control var.
@@ -3173,11 +3214,10 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop)
   case BC_ISNEXT:
     |  // RA = base*8, RD = target (points to ITERN)
     |  add RA, BASE, RA
-    |   li TMP2, -24
-    |  evlddx CFUNC:TMP1, RA, TMP2
+    |  lwz TMP0, -24(RA)
+    |  lwz CFUNC:TMP1, -20(RA)
     |   lwz TMP2, -16(RA)
     |    lwz TMP3, -8(RA)
-    |  evmergehi TMP0, CFUNC:TMP1, CFUNC:TMP1
     |   cmpwi cr0, TMP2, LJ_TTAB
     |  cmpwi cr1, TMP0, LJ_TFUNC
     |    cmpwi cr6, TMP3, LJ_TNIL
@@ -3218,16 +3258,16 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop)
     |   subi TMP2, TMP2, 16
     |   ble >2                         // No vararg slots?
     |1:  // Copy vararg slots to destination slots.
-    |  evldd TMP0, 0(RC)
+    |  lfd f0, 0(RC)
     |   addi RC, RC, 8
-    |  evstdd TMP0, 0(RA)
+    |  stfd f0, 0(RA)
     |  cmplw RA, TMP2
     |   cmplw cr1, RC, TMP3
     |  bge >3                          // All destination slots filled?
     |    addi RA, RA, 8
     |   blt cr1, <1                    // More vararg slots?
     |2:  // Fill up remainder with nil.
-    |  evstdd TISNIL, 0(RA)
+    |  stw TISNIL, 0(RA)
     |  cmplw RA, TMP2
     |   addi RA, RA, 8
     |  blt <2
@@ -3243,9 +3283,9 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop)
     |   addi MULTRES, TMP1, 8
     |  bgt >7
     |6:
-    |  evldd TMP0, 0(RC)
+    |  lfd f0, 0(RC)
     |   addi RC, RC, 8
-    |  evstdd TMP0, 0(RA)
+    |  stfd f0, 0(RA)
     |  cmplw RC, TMP3
     |   addi RA, RA, 8
     |  blt <6                          // More vararg slots?
@@ -3296,14 +3336,14 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop)
     |   li TMP1, 0
     |2:
     |  addi TMP3, TMP1, 8
-    |   evlddx TMP0, RA, TMP1
+    |   lfdx f0, RA, TMP1
     |  cmpw TMP3, RC
-    |   evstddx TMP0, TMP2, TMP1
+    |   stfdx f0, TMP2, TMP1
     |  beq >3
     |  addi TMP1, TMP3, 8
-    |   evlddx TMP0, RA, TMP3
+    |   lfdx f1, RA, TMP3
     |  cmpw TMP1, RC
-    |   evstddx TMP0, TMP2, TMP3
+    |   stfdx f1, TMP2, TMP3
     |  bne <2
     |3:
     |5:
@@ -3320,7 +3360,7 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop)
     |6:  // Fill up results with nil.
     |  subi TMP1, RD, 8
     |   addi RD, RD, 8
-    |  evstddx TISNIL, TMP2, TMP1
+    |  stwx TISNIL, TMP2, TMP1
     |  b <5
     |
     |->BC_RETV_Z:  // Non-standard return case.
@@ -3345,8 +3385,8 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop)
     |   subi TMP2, BASE, 8
     |  decode_RB8 RB, INS
     if (op == BC_RET1) {
-      |  evldd TMP0, 0(RA)
-      |  evstdd TMP0, 0(TMP2)
+      |  lfd f0, 0(RA)
+      |  stfd f0, 0(TMP2)
     }
     |5:
     |  cmplw RB, RD
@@ -3362,7 +3402,7 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop)
     |6:  // Fill up results with nil.
     |  subi TMP1, RD, 8
     |   addi RD, RD, 8
-    |  evstddx TISNIL, TMP2, TMP1
+    |  stwx TISNIL, TMP2, TMP1
     |  b <5
     break;
 
@@ -3384,47 +3424,62 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop)
   case BC_IFORL:
     |  // RA = base*8, RD = target (after end of loop or start of loop)
     vk = (op == BC_IFORL || op == BC_JFORL);
-    |  add RA, BASE, RA
-    |  evldd TMP1, FORL_IDX*8(RA)
-    |  evldd TMP3, FORL_STEP*8(RA)
-    |  evldd TMP2, FORL_STOP*8(RA)
-    if (!vk) {
-      |  evcmpgtu cr0, TMP1, TISNUM
-      |  evcmpgtu cr7, TMP3, TISNUM
-      |  evcmpgtu cr1, TMP2, TISNUM
-      |  cror 4*cr0+lt, 4*cr0+lt, 4*cr7+lt
-      |  cror 4*cr0+lt, 4*cr0+lt, 4*cr1+lt
-      |  blt ->vmeta_for
-    }
     if (vk) {
-      |  efdadd TMP1, TMP1, TMP3
-      |  evstdd TMP1, FORL_IDX*8(RA)
+      |  lfdux f1, RA, BASE
+      |  lfd f3, FORL_STEP*8(RA)
+      |  lfd f2, FORL_STOP*8(RA)
+      |   lwz TMP3, FORL_STEP*8(RA)
+      |  fadd f1, f1, f3
+      |  stfd f1, FORL_IDX*8(RA)
+    } else {
+      |  lwzux TMP1, RA, BASE
+      |   lfd f1, FORL_IDX*8(RA)
+      |  lwz TMP3, FORL_STEP*8(RA)
+      |   lfd f3, FORL_STEP*8(RA)
+      |  lwz TMP2, FORL_STOP*8(RA)
+      |   lfd f2, FORL_STOP*8(RA)
+      |  cmplw cr0, TMP1, TISNUM
+      |  cmplw cr7, TMP3, TISNUM
+      |  cmplw cr1, TMP2, TISNUM
+      |  crand 4*cr0+lt, 4*cr0+lt, 4*cr7+lt
+      |  crand 4*cr0+lt, 4*cr0+lt, 4*cr1+lt
+      |  bge ->vmeta_for
     }
-    |   evcmpgts TMP3, TISNIL
-    |  evstdd TMP1, FORL_EXT*8(RA)
-    |   bge >2
-    |  efdcmpgt TMP1, TMP2
-    |1:
+    |  cmpwi cr3, TMP3, 0
     if (op != BC_JFORL) {
       |  srwi RD, RD, 1
+    }
+    |   stfd f1, FORL_EXT*8(RA)
+    if (op != BC_JFORL) {
       |  add RD, PC, RD
-      if (op == BC_JFORI) {
-       |  addis PC, RD, -(BCBIAS_J*4 >> 16)
-      } else {
-       |  addis RD, RD, -(BCBIAS_J*4 >> 16)
-      }
     }
+    |  fcmpu cr0, f1, f2
+    if (op == BC_JFORI) {
+      |  addis PC, RD, -(BCBIAS_J*4 >> 16)
+    }
+    |  blt cr3, >5
     if (op == BC_FORI) {
-      |  iselgt PC, RD, PC
+      |  bgt >3
     } else if (op == BC_IFORL) {
-      |  iselgt PC, PC, RD
+      |  bgt >2
+      |1:
+      |  addis PC, RD, -(BCBIAS_J*4 >> 16)
     } else {
       |  ble =>BC_JLOOP
     }
-    |  ins_next
     |2:
-    |  efdcmpgt TMP2, TMP1
-    |  b <1
+    |  ins_next
+    |5:  // Negative step.
+    if (op == BC_FORI) {
+      |  bge <2
+      |3:
+      |  addis PC, RD, -(BCBIAS_J*4 >> 16)
+    } else if (op == BC_IFORL) {
+      |  bge <1
+    } else {
+      |  bge =>BC_JLOOP
+    }
+    |  b <2
     break;
 
   case BC_ITERL:
@@ -3440,15 +3495,15 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop)
 #endif
   case BC_IITERL:
     |  // RA = base*8, RD = target
-    |  evlddx TMP1, BASE, RA
-    |   subi RA, RA, 8
-    |  checknil TMP1
-    |  checkok >1                      // Stop if iterator returned nil.
+    |  lwzux TMP1, RA, BASE
+    |   lwz TMP2, 4(RA)
+    |  checknil TMP1; beq >1           // Stop if iterator returned nil.
     if (op == BC_JITERL) {
       |  NYI
     } else {
       |  branch_RD                     // Otherwise save control var + branch.
-      |  evstddx TMP1, BASE, RA
+      |  stw TMP1, -8(RA)
+      |   stw TMP2, -4(RA)
     }
     |1:
     |  ins_next
@@ -3514,7 +3569,7 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop)
     }
     |
     |3:  // Clear missing parameters.
-    |  evstddx TISNIL, BASE, NARGS8:RC
+    |  stwx TISNIL, BASE, NARGS8:RC
     |  addi NARGS8:RC, NARGS8:RC, 8
     |  b <2
     break;
@@ -3546,20 +3601,22 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop)
     |  beq >3
     |1:
     |  cmplw RA, RC                    // Less args than parameters?
-    |   evldd TMP0, 0(RA)
+    |   lwz TMP0, 0(RA)
+    |   lwz TMP3, 4(RA)
     |  bge >4
-    |    evstdd TISNIL, 0(RA)          // Clear old fixarg slot (help the GC).
+    |    stw TISNIL, 0(RA)             // Clear old fixarg slot (help the GC).
     |    addi RA, RA, 8
     |2:
     |  addic. TMP2, TMP2, -1
-    |   evstdd TMP0, 8(TMP1)
+    |   stw TMP0, 8(TMP1)
+    |   stw TMP3, 12(TMP1)
     |    addi TMP1, TMP1, 8
     |  bne <1
     |3:
     |  ins_next2
     |
     |4:  // Clear missing parameters.
-    |  evmr TMP0, TISNIL
+    |  li TMP0, LJ_TNIL
     |  b <2
     break;
 
index 0a33c11cc4aded22477bb1770271d8352b01db08..b5d80346d6c590da71579151134261a72cccdc86 100644 (file)
@@ -1 +1,6686 @@
-/* Placeholder file. */
+/*
+** This file has been pre-processed with DynASM.
+** http://luajit.org/dynasm.html
+** DynASM version 1.3.0, DynASM ppc version 1.3.0
+** DO NOT EDIT! The original file is in "buildvm_ppc.dasc".
+*/
+
+#if DASM_VERSION != 10300
+#error "Version mismatch between DynASM and included encoding engine"
+#endif
+
+#define DASM_SECTION_CODE_OP   0
+#define DASM_SECTION_CODE_SUB  1
+#define DASM_MAXSECTION                2
+static const unsigned int build_actionlist[5561] = {
+0x00010001,
+0x00060014,
+0x72000000,
+0x00090200,
+0x39000000,
+0x00098200,
+0x41820000,
+0x00050815,
+0x8209fff8,
+0x7d2e4b78,
+0x9514fff8,
+0x00060016,
+0x72000000,
+0x00090200,
+0x398c0008,
+0x7d936378,
+0x41820000,
+0x00050817,
+0x00060018,
+0x2c000000,
+0x00098200,
+0x56090038,
+0x38000000,
+0x00098200,
+0x7d297050,
+0x40820000,
+0x00050814,
+0x350cfff8,
+0x91320000,
+0x00098200,
+0x81210018,
+0x39cefff8,
+0x90110000,
+0x00098200,
+0x55291800,
+0x000900a1,
+0x41820000,
+0x00050802,
+0x0006000b,
+0x3508fff8,
+0xc8140000,
+0x3a940008,
+0xd80e0000,
+0x39ce0008,
+0x40820000,
+0x0005080b,
+0x0006000c,
+0x7c096000,
+0x40820000,
+0x00050806,
+0x0006000d,
+0x91d20000,
+0x00098200,
+0x00060019,
+0x00000000,
+0x80010014,
+0x38600000,
+0x90120000,
+0x00098200,
+0x0006001a,
+0x80010104,
+0x81c10000,
+0x00098200,
+0xc9c10000,
+0x00098200,
+0x81e10000,
+0x00098200,
+0xc9e10000,
+0x00098200,
+0x82010000,
+0x00098200,
+0xca010000,
+0x00098200,
+0x82210000,
+0x00098200,
+0xca210000,
+0x00098200,
+0x82410000,
+0x00098200,
+0xca410000,
+0x00098200,
+0x82610000,
+0x00098200,
+0xca610000,
+0x00098200,
+0x7c0803a6,
+0x82810000,
+0x00098200,
+0xca810000,
+0x00098200,
+0x82a10000,
+0x00098200,
+0xcaa10000,
+0x00098200,
+0x82c10000,
+0x00098200,
+0xcac10000,
+0x00098200,
+0x82e10000,
+0x00098200,
+0xcae10000,
+0x00098200,
+0x00000000,
+0x83010000,
+0x00098200,
+0xcb010000,
+0x00098200,
+0x83210000,
+0x00098200,
+0xcb210000,
+0x00098200,
+0x83410000,
+0x00098200,
+0xcb410000,
+0x00098200,
+0x83610000,
+0x00098200,
+0xcb610000,
+0x00098200,
+0x83810000,
+0x00098200,
+0xcb810000,
+0x00098200,
+0x83a10000,
+0x00098200,
+0xcba10000,
+0x00098200,
+0x83c10000,
+0x00098200,
+0xcbc10000,
+0x00098200,
+0x83e10000,
+0x00098200,
+0xcbe10000,
+0x00098200,
+0x38210100,
+0x4e800020,
+0x00060010,
+0x40810000,
+0x00050807,
+0x81120000,
+0x00098200,
+0x7c0e4040,
+0x40800000,
+0x00050808,
+0x92ee0000,
+0x398c0008,
+0x39ce0008,
+0x48000000,
+0x0005000c,
+0x00060011,
+0x00000000,
+0x20c90000,
+0x7c096050,
+0x7d084110,
+0x7c004038,
+0x7dc07050,
+0x48000000,
+0x0005000d,
+0x00060012,
+0x91d20000,
+0x00098200,
+0x7d956378,
+0x7d244b78,
+0x7e439378,
+0x48000001,
+0x00030000,
+0x81210018,
+0x7eacab78,
+0x55291800,
+0x000900a1,
+0x81d20000,
+0x00098200,
+0x48000000,
+0x0005000c,
+0x0006001b,
+0x7c611b78,
+0x7c832378,
+0x0006001c,
+0x82410010,
+0x38000000,
+0x00098200,
+0x81120000,
+0x00098200,
+0x90080000,
+0x00098200,
+0x48000000,
+0x0005001a,
+0x0006001d,
+0x5461003a,
+0x0006001e,
+0x82410010,
+0x3ac00000,
+0x00098200,
+0x81d20000,
+0x00098200,
+0x3cc059c0,
+0x82320000,
+0x00098200,
+0x3b000000,
+0x90c10008,
+0x39000000,
+0x00098200,
+0x60c60004,
+0x3ae00000,
+0x00098200,
+0x38000000,
+0x00098200,
+0xc3c10008,
+0x820efff8,
+0x3a8efff8,
+0x90c10008,
+0x3a310000,
+0x00098200,
+0x00000000,
+0x91140000,
+0x39800010,
+0x90110000,
+0x00098200,
+0xc3e10008,
+0x48000000,
+0x00050016,
+0x0006001f,
+0x38800000,
+0x00098200,
+0x48000000,
+0x00050002,
+0x00060020,
+0x7d6e5a14,
+0x7e8ea050,
+0x91d20000,
+0x00098200,
+0x3a100004,
+0x91720000,
+0x00098200,
+0x568400fe,
+0x000900ab,
+0x0006000c,
+0x92010008,
+0x7e439378,
+0x48000001,
+0x00030000,
+0x81d20000,
+0x00098200,
+0x81720000,
+0x00098200,
+0x814efffc,
+0x7d6e5850,
+0x820a0000,
+0x00098200,
+0x80f00000,
+0x3a100004,
+0x54e815ba,
+0x54f4dd78,
+0x7c11402e,
+0x7e947214,
+0x7c0903a6,
+0x4e800420,
+0x00060021,
+0x9421ff00,
+0x91c10000,
+0x00098200,
+0xd9c10000,
+0x00098200,
+0x91e10000,
+0x00098200,
+0xd9e10000,
+0x00098200,
+0x92010000,
+0x00098200,
+0xda010000,
+0x00098200,
+0x92210000,
+0x00098200,
+0x00000000,
+0xda210000,
+0x00098200,
+0x92410000,
+0x00098200,
+0xda410000,
+0x00098200,
+0x92610000,
+0x00098200,
+0xda610000,
+0x00098200,
+0x7c0802a6,
+0x92810000,
+0x00098200,
+0xda810000,
+0x00098200,
+0x92a10000,
+0x00098200,
+0xdaa10000,
+0x00098200,
+0x92c10000,
+0x00098200,
+0xdac10000,
+0x00098200,
+0x92e10000,
+0x00098200,
+0xdae10000,
+0x00098200,
+0x93010000,
+0x00098200,
+0xdb010000,
+0x00098200,
+0x93210000,
+0x00098200,
+0xdb210000,
+0x00098200,
+0x90010104,
+0x93410000,
+0x00098200,
+0xdb410000,
+0x00098200,
+0x93610000,
+0x00098200,
+0xdb610000,
+0x00098200,
+0x93810000,
+0x00098200,
+0x00000000,
+0xdb810000,
+0x00098200,
+0x93a10000,
+0x00098200,
+0xdba10000,
+0x00098200,
+0x93c10000,
+0x00098200,
+0xdbc10000,
+0x00098200,
+0x93e10000,
+0x00098200,
+0xdbe10000,
+0x00098200,
+0x7c721b78,
+0x82320000,
+0x00098200,
+0x7c8e2378,
+0x89120000,
+0x00098200,
+0x92410010,
+0x3a000000,
+0x00098200,
+0x38010000,
+0x00098200,
+0x3a310000,
+0x00098200,
+0x90a10018,
+0x28080000,
+0x90a1001c,
+0x90120000,
+0x00098200,
+0x90a10014,
+0x90610008,
+0x41820000,
+0x00050803,
+0x7dd47378,
+0x81d20000,
+0x00098200,
+0x3ac00000,
+0x00098200,
+0x81120000,
+0x00098200,
+0x820efff8,
+0x3cc059c0,
+0x7d8e4050,
+0x98b20000,
+0x00098200,
+0x90c10008,
+0x72000000,
+0x00090200,
+0x60c60004,
+0xc3c10008,
+0x3b000000,
+0x90c10008,
+0x398c0008,
+0x3c004338,
+0x7d936378,
+0x90010020,
+0x38000000,
+0x00098200,
+0xc3e10008,
+0x3ae00000,
+0x00098200,
+0x90110000,
+0x00098200,
+0x00000000,
+0x41820000,
+0x00050817,
+0x48000000,
+0x00050018,
+0x00060022,
+0x9421ff00,
+0x91c10000,
+0x00098200,
+0xd9c10000,
+0x00098200,
+0x91e10000,
+0x00098200,
+0xd9e10000,
+0x00098200,
+0x92010000,
+0x00098200,
+0xda010000,
+0x00098200,
+0x92210000,
+0x00098200,
+0xda210000,
+0x00098200,
+0x92410000,
+0x00098200,
+0xda410000,
+0x00098200,
+0x92610000,
+0x00098200,
+0xda610000,
+0x00098200,
+0x7c0802a6,
+0x92810000,
+0x00098200,
+0xda810000,
+0x00098200,
+0x92a10000,
+0x00098200,
+0xdaa10000,
+0x00098200,
+0x92c10000,
+0x00098200,
+0xdac10000,
+0x00098200,
+0x92e10000,
+0x00098200,
+0x00000000,
+0xdae10000,
+0x00098200,
+0x93010000,
+0x00098200,
+0xdb010000,
+0x00098200,
+0x93210000,
+0x00098200,
+0xdb210000,
+0x00098200,
+0x90010104,
+0x93410000,
+0x00098200,
+0xdb410000,
+0x00098200,
+0x93610000,
+0x00098200,
+0xdb610000,
+0x00098200,
+0x93810000,
+0x00098200,
+0xdb810000,
+0x00098200,
+0x93a10000,
+0x00098200,
+0xdba10000,
+0x00098200,
+0x93c10000,
+0x00098200,
+0xdbc10000,
+0x00098200,
+0x93e10000,
+0x00098200,
+0xdbe10000,
+0x00098200,
+0x3a000000,
+0x00098200,
+0x90c1001c,
+0x48000000,
+0x00050001,
+0x00060023,
+0x9421ff00,
+0x91c10000,
+0x00098200,
+0xd9c10000,
+0x00098200,
+0x00000000,
+0x91e10000,
+0x00098200,
+0xd9e10000,
+0x00098200,
+0x92010000,
+0x00098200,
+0xda010000,
+0x00098200,
+0x92210000,
+0x00098200,
+0xda210000,
+0x00098200,
+0x92410000,
+0x00098200,
+0xda410000,
+0x00098200,
+0x92610000,
+0x00098200,
+0xda610000,
+0x00098200,
+0x7c0802a6,
+0x92810000,
+0x00098200,
+0xda810000,
+0x00098200,
+0x92a10000,
+0x00098200,
+0xdaa10000,
+0x00098200,
+0x92c10000,
+0x00098200,
+0xdac10000,
+0x00098200,
+0x92e10000,
+0x00098200,
+0xdae10000,
+0x00098200,
+0x93010000,
+0x00098200,
+0xdb010000,
+0x00098200,
+0x93210000,
+0x00098200,
+0xdb210000,
+0x00098200,
+0x00000000,
+0x90010104,
+0x93410000,
+0x00098200,
+0xdb410000,
+0x00098200,
+0x93610000,
+0x00098200,
+0xdb610000,
+0x00098200,
+0x93810000,
+0x00098200,
+0xdb810000,
+0x00098200,
+0x93a10000,
+0x00098200,
+0xdba10000,
+0x00098200,
+0x93c10000,
+0x00098200,
+0xdbc10000,
+0x00098200,
+0x93e10000,
+0x00098200,
+0xdbe10000,
+0x00098200,
+0x3a000000,
+0x00098200,
+0x0006000b,
+0x81030000,
+0x00098200,
+0x90a10018,
+0x7c721b78,
+0x90610010,
+0x7c8e2378,
+0x90320000,
+0x00098200,
+0x82320000,
+0x00098200,
+0x90610008,
+0x91010014,
+0x3a310000,
+0x00098200,
+0x0006000d,
+0x81320000,
+0x00098200,
+0x3ac00000,
+0x00098200,
+0x81120000,
+0x00098200,
+0x00000000,
+0x3cc059c0,
+0x7e107214,
+0x90c10008,
+0x3b000000,
+0x60c60004,
+0xc3c10008,
+0x7e098050,
+0x90c10008,
+0x3c004338,
+0x7d6e4050,
+0x90010020,
+0x38000000,
+0x00098200,
+0xc3e10008,
+0x3ae00000,
+0x00098200,
+0x90110000,
+0x00098200,
+0x00060024,
+0x800efff8,
+0x814efffc,
+0x2c000000,
+0x00098200,
+0x40820000,
+0x00050825,
+0x00060026,
+0x920efff8,
+0x820a0000,
+0x00098200,
+0x80f00000,
+0x3a100004,
+0x54e815ba,
+0x54f4dd78,
+0x7c11402e,
+0x7e947214,
+0x7c0903a6,
+0x4e800420,
+0x00060027,
+0x9421ff00,
+0x91c10000,
+0x00098200,
+0xd9c10000,
+0x00098200,
+0x91e10000,
+0x00098200,
+0xd9e10000,
+0x00098200,
+0x92010000,
+0x00098200,
+0xda010000,
+0x00098200,
+0x92210000,
+0x00098200,
+0xda210000,
+0x00098200,
+0x92410000,
+0x00098200,
+0xda410000,
+0x00098200,
+0x92610000,
+0x00098200,
+0xda610000,
+0x00098200,
+0x7c0802a6,
+0x92810000,
+0x00098200,
+0x00000000,
+0xda810000,
+0x00098200,
+0x92a10000,
+0x00098200,
+0xdaa10000,
+0x00098200,
+0x92c10000,
+0x00098200,
+0xdac10000,
+0x00098200,
+0x92e10000,
+0x00098200,
+0xdae10000,
+0x00098200,
+0x93010000,
+0x00098200,
+0xdb010000,
+0x00098200,
+0x93210000,
+0x00098200,
+0xdb210000,
+0x00098200,
+0x90010104,
+0x93410000,
+0x00098200,
+0xdb410000,
+0x00098200,
+0x93610000,
+0x00098200,
+0xdb610000,
+0x00098200,
+0x93810000,
+0x00098200,
+0xdb810000,
+0x00098200,
+0x93a10000,
+0x00098200,
+0xdba10000,
+0x00098200,
+0x93c10000,
+0x00098200,
+0xdbc10000,
+0x00098200,
+0x93e10000,
+0x00098200,
+0x00000000,
+0xdbe10000,
+0x00098200,
+0x7c721b78,
+0x80030000,
+0x00098200,
+0x90610010,
+0x81120000,
+0x00098200,
+0x90610008,
+0x7c080050,
+0x81120000,
+0x00098200,
+0x90320000,
+0x00098200,
+0x39200000,
+0x90010018,
+0x9121001c,
+0x91010014,
+0x7cc903a6,
+0x4e800421,
+0x7c6e1b79,
+0x82320000,
+0x00098200,
+0x3a000000,
+0x00098200,
+0x3a310000,
+0x00098200,
+0x40820000,
+0x0005080d,
+0x48000000,
+0x00050019,
+0x00060015,
+0x800efff4,
+0x7dca7378,
+0x7d2e4b78,
+0x8109fffc,
+0x28000000,
+0x820afff0,
+0x41820000,
+0x00050801,
+0x392cfff8,
+0x81080000,
+0x00098200,
+0x7ef4492e,
+0x81e80000,
+0x00098200,
+0x7c0903a6,
+0x4e800420,
+0x0006000b,
+0x390afff0,
+0x7d6e4050,
+0x48000000,
+0x00050028,
+0x00060029,
+0x80f0fffc,
+0x388afff0,
+0x54f55d78,
+0xc8140000,
+0x7d0eaa14,
+0x91d20000,
+0x00098200,
+0x7c082040,
+0x7ca82050,
+0x54f4dd78,
+0xd8040000,
+0x40820000,
+0x0005082a,
+0x7c0ea5ae,
+0x48000000,
+0x0005002b,
+0x0006002c,
+0x38b10000,
+0x00098200,
+0x00000000,
+0x38000000,
+0x00098200,
+0x54ea5d78,
+0x91650004,
+0x7c8e5214,
+0x90050000,
+0x48000000,
+0x00050001,
+0x0006002d,
+0x38910000,
+0x00098200,
+0x38000000,
+0x00098200,
+0x91440004,
+0x38b10000,
+0x00098200,
+0x90040000,
+0x39000000,
+0x00098200,
+0x91650004,
+0x91050000,
+0x48000000,
+0x00050001,
+0x0006002e,
+0x90010024,
+0xc8010020,
+0xfc00f028,
+0x54ea5d78,
+0x38b10000,
+0x00098200,
+0x7c8e5214,
+0xd8050000,
+0x48000000,
+0x00050001,
+0x0006002f,
+0x54ea5d78,
+0x54eb9d78,
+0x7c8e5214,
+0x7cae5a14,
+0x0006000b,
+0x91d20000,
+0x00098200,
+0x7e439378,
+0x92010008,
+0x48000001,
+0x00030001,
+0x28030000,
+0x41820000,
+0x00050803,
+0xc8030000,
+0x80f00000,
+0x3a100004,
+0x7c0ea5ae,
+0x54e815ba,
+0x54ea5d78,
+0x54ec9b78,
+0x7c11402e,
+0x54f4dd78,
+0x54eb9d78,
+0x7c0903a6,
+0x4e800420,
+0x0006000d,
+0x210e0000,
+0x00098200,
+0x81d20000,
+0x00098200,
+0x920efff0,
+0x7e087214,
+0x814efffc,
+0x39600010,
+0x48000000,
+0x00050026,
+0x00060030,
+0x38b10000,
+0x00098200,
+0x00000000,
+0x38000000,
+0x00098200,
+0x54ea5d78,
+0x91650004,
+0x7c8e5214,
+0x90050000,
+0x48000000,
+0x00050001,
+0x00060031,
+0x38910000,
+0x00098200,
+0x38000000,
+0x00098200,
+0x91440004,
+0x38b10000,
+0x00098200,
+0x90040000,
+0x39000000,
+0x00098200,
+0x91650004,
+0x91050000,
+0x48000000,
+0x00050001,
+0x00060032,
+0x90010024,
+0xc8010020,
+0xfc00f028,
+0x54ea5d78,
+0x38b10000,
+0x00098200,
+0x7c8e5214,
+0xd8050000,
+0x48000000,
+0x00050001,
+0x00060033,
+0x54ea5d78,
+0x54eb9d78,
+0x7c8e5214,
+0x7cae5a14,
+0x0006000b,
+0x91d20000,
+0x00098200,
+0x7e439378,
+0x92010008,
+0x48000001,
+0x00030002,
+0x28030000,
+0x7c0ea4ae,
+0x41820000,
+0x00050803,
+0x80f00000,
+0x3a100004,
+0xd8030000,
+0x54e815ba,
+0x54ea5d78,
+0x54ec9b78,
+0x7c11402e,
+0x54f4dd78,
+0x54eb9d78,
+0x7c0903a6,
+0x4e800420,
+0x0006000d,
+0x210e0000,
+0x00098200,
+0x81d20000,
+0x00098200,
+0x920efff0,
+0x7e087214,
+0x814efffc,
+0x39600018,
+0xd80e0010,
+0x48000000,
+0x00050026,
+0x00060034,
+0x7e439378,
+0x3a10fffc,
+0x7c8ea214,
+0x92010008,
+0x7cae6214,
+0x91d20000,
+0x00098200,
+0x00000000,
+0x54e6063e,
+0x48000001,
+0x00030003,
+0x0006000d,
+0x28030001,
+0x41810000,
+0x00050835,
+0x20630000,
+0x0006000e,
+0x80f00000,
+0x3a100004,
+0x54e993ba,
+0x3d290000,
+0x00098200,
+0x7d291838,
+0x7e104a14,
+0x0006002b,
+0x80f00000,
+0x3a100004,
+0x54e815ba,
+0x54ea5d78,
+0x54ec9b78,
+0x7c11402e,
+0x54f4dd78,
+0x54eb9d78,
+0x7c0903a6,
+0x4e800420,
+0x00060036,
+0x80f0fffc,
+0xc8140000,
+0x54e8dd78,
+0x7c0e45ae,
+0x48000000,
+0x0005002b,
+0x00060037,
+0x80140000,
+0x20000000,
+0x00098200,
+0x7c631910,
+0x7c6318f8,
+0x48000000,
+0x0005000e,
+0x00060038,
+0x80140000,
+0x20000000,
+0x00098200,
+0x7c631910,
+0x48000000,
+0x0005000e,
+0x00060039,
+0x3a10fffc,
+0x91d20000,
+0x00098200,
+0x7e439378,
+0x92010008,
+0x48000001,
+0x00030004,
+0x48000000,
+0x0005000d,
+0x0006003a,
+0x7cae5214,
+0x7ccf5a14,
+0x48000000,
+0x00050001,
+0x0006003b,
+0x7caf5a14,
+0x7cce5214,
+0x48000000,
+0x00050001,
+0x0006003c,
+0x00000000,
+0x7d856378,
+0x7d866378,
+0x48000000,
+0x00050001,
+0x0006003d,
+0x7cae5214,
+0x7cce5a14,
+0x0006000b,
+0x7c8ea214,
+0x91d20000,
+0x00098200,
+0x7e439378,
+0x92010008,
+0x54e7063e,
+0x48000001,
+0x00030005,
+0x28030000,
+0x41820000,
+0x0005082b,
+0x00060035,
+0x7d0e1850,
+0x9203fff0,
+0x7dc97378,
+0x3a080000,
+0x00098200,
+0x7c6e1b78,
+0x39600010,
+0x48000000,
+0x00050024,
+0x0006003e,
+0x00000000,
+0x7c751b78,
+0x00000000,
+0x7d846378,
+0x91d20000,
+0x00098200,
+0x7e439378,
+0x92010008,
+0x48000001,
+0x00030006,
+0x00000000,
+0x28030000,
+0x40820000,
+0x00050835,
+0x7ea3ab78,
+0x48000000,
+0x0005003f,
+0x00000000,
+0x48000000,
+0x00050035,
+0x00000000,
+0x00060025,
+0x7e439378,
+0x91320000,
+0x00098200,
+0x388efff8,
+0x92010008,
+0x7cae5a14,
+0x7d755b78,
+0x48000001,
+0x00030007,
+0x814efffc,
+0x39750008,
+0x920efff8,
+0x820a0000,
+0x00098200,
+0x80f00000,
+0x3a100004,
+0x54e815ba,
+0x54f4dd78,
+0x7c11402e,
+0x7e947214,
+0x7c0903a6,
+0x4e800420,
+0x00060040,
+0x7e439378,
+0x91d20000,
+0x00098200,
+0x3894fff8,
+0x92010008,
+0x7cb45a14,
+0x7d755b78,
+0x48000001,
+0x00030007,
+0x810efff8,
+0x39750008,
+0x8154fffc,
+0x48000000,
+0x00050041,
+0x00060042,
+0x7e439378,
+0x91d20000,
+0x00098200,
+0x7e84a378,
+0x92010008,
+0x7cf53b78,
+0x48000001,
+0x00030008,
+0x00000000,
+0x56a0063e,
+0x00000000,
+0x56b4dd78,
+0x00000000,
+0x2c000000,
+0x00098200,
+0x00000000,
+0x56ac9b78,
+0x00000000,
+0x41820000,
+0x00070800,
+0x00000000,
+0x48000000,
+0x00070000,
+0x00060043,
+0x280b0008,
+0x80ae0000,
+0x806e0004,
+0x41800000,
+0x00050844,
+0x39000000,
+0x00098200,
+0x3a8efff8,
+0x7c854040,
+0x820efff8,
+0x40840000,
+0x00050844,
+0x90b40000,
+0x398b0008,
+0x90740004,
+0x41820000,
+0x00050845,
+0x39000008,
+0x396bfff8,
+0x0006000b,
+0x7c085840,
+0x7c0e44ae,
+0x7c1445ae,
+0x39080008,
+0x40820000,
+0x0005080b,
+0x48000000,
+0x00050045,
+0x00060046,
+0x280b0008,
+0x806e0000,
+0x41800000,
+0x00050844,
+0x7c161810,
+0x7d231910,
+0x7d280338,
+0x39080000,
+0x00098200,
+0x55081800,
+0x000900a1,
+0x392a0000,
+0x00098200,
+0x7c2944ae,
+0x48000000,
+0x00050047,
+0x00060048,
+0x280b0008,
+0x80ae0000,
+0x806e0004,
+0x41800000,
+0x00050844,
+0x2c050000,
+0x00098200,
+0x40820000,
+0x00050806,
+0x0006000b,
+0x80630000,
+0x00098200,
+0x0006000c,
+0x00000000,
+0x38a00000,
+0x00098200,
+0x28030000,
+0x81710000,
+0x00098200,
+0x41820000,
+0x00050849,
+0x80030000,
+0x00098200,
+0x38a00000,
+0x00098200,
+0x810b0000,
+0x00098200,
+0x81230000,
+0x00098200,
+0x7d080038,
+0x55002800,
+0x000900a1,
+0x55081800,
+0x000900a1,
+0x7d080050,
+0x7d294214,
+0x0006000d,
+0x80c90000,
+0x00098200,
+0x80090000,
+0x00098200,
+0x80890000,
+0x00098200,
+0x81090000,
+0x00098200,
+0x2c060000,
+0x00098200,
+0x40820000,
+0x00050804,
+0x7c005800,
+0x41820000,
+0x00050805,
+0x0006000e,
+0x81290000,
+0x00098200,
+0x28090000,
+0x41820000,
+0x00050849,
+0x48000000,
+0x0005000d,
+0x0006000f,
+0x00000000,
+0x2c040000,
+0x00098200,
+0x41820000,
+0x00050849,
+0x7c852378,
+0x7d034378,
+0x48000000,
+0x00050049,
+0x00060010,
+0x2c050000,
+0x00098200,
+0x41820000,
+0x0005080b,
+0x7c162810,
+0x7d252910,
+0x7d280338,
+0x39080000,
+0x00098200,
+0x55081000,
+0x000900a1,
+0x39310000,
+0x00098200,
+0x7c69402e,
+0x48000000,
+0x0005000c,
+0x0006004a,
+0x280b0010,
+0x80ae0000,
+0x80ce0008,
+0x806e0004,
+0x808e000c,
+0x41800000,
+0x00050844,
+0x2c050000,
+0x00098200,
+0x40820000,
+0x00050844,
+0x81030000,
+0x00098200,
+0x2c060000,
+0x00098200,
+0x40820000,
+0x00050844,
+0x28080000,
+0x88c30000,
+0x00098200,
+0x40820000,
+0x00050844,
+0x70c00000,
+0x00090200,
+0x90830000,
+0x00098200,
+0x41820000,
+0x00050849,
+0x00000000,
+0x80110000,
+0x00098200,
+0x54c607b8,
+0x90710000,
+0x00098200,
+0x98c30000,
+0x00098200,
+0x90030000,
+0x00098200,
+0x48000000,
+0x00050049,
+0x0006004b,
+0x280b0008,
+0x80ce0000,
+0x808e0004,
+0x41800000,
+0x00050844,
+0x2c060000,
+0x00098200,
+0x40820000,
+0x00050844,
+0x38ae0008,
+0x7e439378,
+0x48000001,
+0x00030009,
+0xc8230000,
+0x48000000,
+0x00050047,
+0x0006004c,
+0x280b0008,
+0x806e0000,
+0xc82e0000,
+0x40820000,
+0x00050844,
+0x7c03b040,
+0x41810000,
+0x00050844,
+0x48000000,
+0x00050047,
+0x0006004d,
+0x280b0008,
+0x80ae0000,
+0x806e0004,
+0x41800000,
+0x00050844,
+0x2c050000,
+0x00098200,
+0x41820000,
+0x00050849,
+0x80110000,
+0x00098200,
+0x7c05b040,
+0x28800000,
+0x91d20000,
+0x00098200,
+0x4c413342,
+0x92010008,
+0x41820000,
+0x00050844,
+0x00000000,
+0x80110000,
+0x00098200,
+0x81110000,
+0x00098200,
+0x7c004040,
+0x40800001,
+0x0005084e,
+0x7e439378,
+0x7dc47378,
+0x48000001,
+0x0003000a,
+0x38a00000,
+0x00098200,
+0x48000000,
+0x00050049,
+0x0006004f,
+0x280b0008,
+0x806e0000,
+0x808e0004,
+0x41800000,
+0x00050844,
+0x7eee592e,
+0x2c030000,
+0x00098200,
+0x820efff8,
+0x40820000,
+0x00050844,
+0x91d20000,
+0x00098200,
+0x7e439378,
+0x91d20000,
+0x00098200,
+0x38ae0008,
+0x92010008,
+0x48000001,
+0x0003000b,
+0x28030000,
+0x38a00000,
+0x00098200,
+0x41820000,
+0x00050849,
+0xc80e0008,
+0x3a8efff8,
+0xc82e0010,
+0xd8140000,
+0x39800000,
+0x00098200,
+0xd8340008,
+0x48000000,
+0x00050045,
+0x00060050,
+0x280b0008,
+0x80ae0000,
+0x806e0004,
+0x41800000,
+0x00050844,
+0x2c050000,
+0x00098200,
+0x820efff8,
+0x40820000,
+0x00050844,
+0x00000000,
+0x81230000,
+0x00098200,
+0xc80a0000,
+0x00098200,
+0x28090000,
+0x3a8efff8,
+0x40820000,
+0x00050844,
+0x00000000,
+0xc80a0000,
+0x00098200,
+0x3a8efff8,
+0x00000000,
+0x92ee0008,
+0x39800000,
+0x00098200,
+0xd8140000,
+0x48000000,
+0x00050045,
+0x00060051,
+0x280b0010,
+0x80ae0000,
+0x806e0004,
+0x80ce0008,
+0xc84e0008,
+0x41800000,
+0x00050844,
+0x2c050000,
+0x00098200,
+0x7c86b040,
+0x820efff8,
+0x3c003ff0,
+0x9301000c,
+0x40820000,
+0x00050844,
+0x90010008,
+0x40840000,
+0x00050844,
+0xc8210008,
+0xfc00101e,
+0xd8010008,
+0x8121000c,
+0x80030000,
+0x00098200,
+0x81030000,
+0x00098200,
+0xfc42082a,
+0x39290001,
+0x3a8efff8,
+0x7c004840,
+0x55261800,
+0x000900a1,
+0xd8540000,
+0x40810000,
+0x00050802,
+0x7d28302e,
+0x7c0834ae,
+0x0006000b,
+0x2c090000,
+0x00098200,
+0x39800000,
+0x00098200,
+0x41820000,
+0x00050845,
+0x39800000,
+0x00098200,
+0xd8140008,
+0x48000000,
+0x00050045,
+0x0006000c,
+0x80030000,
+0x00098200,
+0x28000000,
+0x39800000,
+0x00098200,
+0x41820000,
+0x00050845,
+0x7d244b78,
+0x48000001,
+0x0003000c,
+0x00000000,
+0x28030000,
+0x39800000,
+0x00098200,
+0x41820000,
+0x00050845,
+0x81230000,
+0xc8030000,
+0x48000000,
+0x0005000b,
+0x00060052,
+0x280b0008,
+0x80ae0000,
+0x806e0004,
+0x41800000,
+0x00050844,
+0x2c050000,
+0x00098200,
+0x820efff8,
+0x40820000,
+0x00050844,
+0x00000000,
+0x81230000,
+0x00098200,
+0xc80a0000,
+0x00098200,
+0x28090000,
+0x3a8efff8,
+0x40820000,
+0x00050844,
+0x00000000,
+0xc80a0000,
+0x00098200,
+0x3a8efff8,
+0x00000000,
+0x930e0008,
+0x930e000c,
+0x39800000,
+0x00098200,
+0xd8140000,
+0x48000000,
+0x00050045,
+0x00060053,
+0x280b0008,
+0x88d10000,
+0x00098200,
+0x41800000,
+0x00050844,
+0x7dc97378,
+0x39ce0008,
+0x54c607fe,
+0x000900ab,
+0x396bfff8,
+0x3a060000,
+0x00098200,
+0x48000000,
+0x00050024,
+0x00060054,
+0x280b0010,
+0x80ce0008,
+0xc84e0008,
+0x80ae0000,
+0xc82e0000,
+0x41800000,
+0x00050844,
+0x89110000,
+0x00098200,
+0x7dc97378,
+0x2c060000,
+0x00098200,
+0x40820000,
+0x00050844,
+0x39ce0010,
+0x550807fe,
+0x000900ab,
+0xd8490000,
+0x396bfff0,
+0xd8290008,
+0x3a080000,
+0x00098200,
+0x48000000,
+0x00050024,
+0x00060055,
+0x280b0008,
+0x80ae0000,
+0x806e0004,
+0x41800000,
+0x00050844,
+0x2c050000,
+0x00098200,
+0x40820000,
+0x00050844,
+0x88030000,
+0x00098200,
+0x81030000,
+0x00098200,
+0x00000000,
+0x80830000,
+0x00098200,
+0x28000000,
+0x00090200,
+0x81230000,
+0x00098200,
+0x28880000,
+0x80030000,
+0x00098200,
+0x7f844840,
+0x820efff8,
+0x4f013342,
+0x7d245a14,
+0x4f3e1102,
+0x7c890040,
+0x4f18cb82,
+0x92010008,
+0x4f182b82,
+0x91d20000,
+0x00098200,
+0x41980000,
+0x00050844,
+0x0006000b,
+0x39ce0008,
+0x396bfff8,
+0x3929fff8,
+0x91230000,
+0x00098200,
+0x39000000,
+0x91d20000,
+0x00098200,
+0x0006000c,
+0x7c085800,
+0x7c0e44ae,
+0x41820000,
+0x00050803,
+0x7c0445ae,
+0x39080008,
+0x48000000,
+0x0005000c,
+0x0006000d,
+0x38a00000,
+0x7c751b78,
+0x38c00000,
+0x48000001,
+0x00050021,
+0x0006000e,
+0x81350000,
+0x00098200,
+0x28030000,
+0x00090200,
+0x80d50000,
+0x00098200,
+0x38000000,
+0x00098200,
+0x81d20000,
+0x00098200,
+0x90110000,
+0x00098200,
+0x41810000,
+0x00050808,
+0x00000000,
+0x7d893050,
+0x80120000,
+0x00098200,
+0x280c0000,
+0x7d0e6214,
+0x41820000,
+0x00050806,
+0x7c080040,
+0x39000000,
+0x41810000,
+0x00050809,
+0x38ccfff8,
+0x91350000,
+0x00098200,
+0x0006000f,
+0x7c083040,
+0x7c0944ae,
+0x7c0e45ae,
+0x39080008,
+0x40820000,
+0x0005080f,
+0x00060010,
+0x72000000,
+0x00090200,
+0x39000000,
+0x00098200,
+0x3a8efff8,
+0x910efff8,
+0x398c0010,
+0x00060011,
+0x92010008,
+0x7d936378,
+0x41820000,
+0x00050817,
+0x48000000,
+0x00050018,
+0x00060012,
+0x72000000,
+0x00090200,
+0x38c6fff8,
+0x39000000,
+0x00098200,
+0xc8060000,
+0x90d50000,
+0x00098200,
+0x39800000,
+0x00098200,
+0x910efff8,
+0x3a8efff8,
+0xd80e0000,
+0x48000000,
+0x00050011,
+0x00060013,
+0x7e439378,
+0x558400fe,
+0x000900ab,
+0x48000001,
+0x00030000,
+0x38600000,
+0x48000000,
+0x0005000e,
+0x00060056,
+0x00000000,
+0x806a0000,
+0x00098200,
+0x88030000,
+0x00098200,
+0x81030000,
+0x00098200,
+0x80830000,
+0x00098200,
+0x28000000,
+0x00090200,
+0x81230000,
+0x00098200,
+0x28880000,
+0x80030000,
+0x00098200,
+0x7f844840,
+0x820efff8,
+0x4f013342,
+0x7d245a14,
+0x4f3e1102,
+0x7c890040,
+0x4f18cb82,
+0x92010008,
+0x4f182b82,
+0x91d20000,
+0x00098200,
+0x41980000,
+0x00050844,
+0x0006000b,
+0x91230000,
+0x00098200,
+0x39000000,
+0x91d20000,
+0x00098200,
+0x0006000c,
+0x7c085800,
+0x7c0e44ae,
+0x41820000,
+0x00050803,
+0x7c0445ae,
+0x39080008,
+0x48000000,
+0x0005000c,
+0x0006000d,
+0x38a00000,
+0x7c751b78,
+0x38c00000,
+0x48000001,
+0x00050021,
+0x0006000e,
+0x81350000,
+0x00098200,
+0x28030000,
+0x00090200,
+0x80d50000,
+0x00098200,
+0x38000000,
+0x00098200,
+0x00000000,
+0x81d20000,
+0x00098200,
+0x90110000,
+0x00098200,
+0x41810000,
+0x00050808,
+0x7d893050,
+0x80120000,
+0x00098200,
+0x280c0000,
+0x7d0e6214,
+0x41820000,
+0x00050806,
+0x7c080040,
+0x39000000,
+0x41810000,
+0x00050809,
+0x38ccfff8,
+0x91350000,
+0x00098200,
+0x0006000f,
+0x7c083040,
+0x7c0944ae,
+0x7c0e45ae,
+0x39080008,
+0x40820000,
+0x0005080f,
+0x00060010,
+0x72000000,
+0x00090200,
+0x7dd47378,
+0x398c0008,
+0x00060011,
+0x92010008,
+0x7d936378,
+0x41820000,
+0x00050817,
+0x48000000,
+0x00050018,
+0x00060012,
+0x7e439378,
+0x7ea4ab78,
+0x48000001,
+0x0003000d,
+0x00060013,
+0x7e439378,
+0x558400fe,
+0x000900ab,
+0x48000001,
+0x00030000,
+0x38600000,
+0x48000000,
+0x0005000e,
+0x00060057,
+0x80120000,
+0x00098200,
+0x00000000,
+0x7d0e5a14,
+0x91d20000,
+0x00098200,
+0x70000000,
+0x00090200,
+0x91120000,
+0x00098200,
+0x38600000,
+0x00098200,
+0x41820000,
+0x00050844,
+0x93120000,
+0x00098200,
+0x98720000,
+0x00098200,
+0x48000000,
+0x0005001a,
+0x00060058,
+0x280b0008,
+0x80ae0000,
+0x806e0004,
+0x41800000,
+0x00050844,
+0x7c05b040,
+0x40800000,
+0x00050844,
+0x54a5007e,
+0x00060049,
+0x820efff8,
+0x90aefff8,
+0x3a8efff8,
+0x906efffc,
+0x00060059,
+0x39800000,
+0x00098200,
+0x00060045,
+0x72000000,
+0x00090200,
+0x7d936378,
+0x40820000,
+0x00050818,
+0x80f0fffc,
+0x54ea5d78,
+0x0006000f,
+0x7c0a6040,
+0x54e0dd78,
+0x41810000,
+0x00050806,
+0x80f00000,
+0x3a100004,
+0x7dc0a050,
+0x54e815ba,
+0x54ea5d78,
+0x54ec9b78,
+0x7c11402e,
+0x54f4dd78,
+0x54eb9d78,
+0x7c0903a6,
+0x4e800420,
+0x00060010,
+0x390cfff8,
+0x398c0008,
+0x7ef4412e,
+0x48000000,
+0x0005000f,
+0x0006005a,
+0x00000000,
+0x280b0008,
+0x80ae0000,
+0xc82e0000,
+0x41800000,
+0x00050844,
+0x7c05b040,
+0x40800000,
+0x00050844,
+0x48000001,
+0x0003000e,
+0x48000000,
+0x00050047,
+0x0006005b,
+0x280b0008,
+0x80ae0000,
+0xc82e0000,
+0x41800000,
+0x00050844,
+0x7c05b040,
+0x40800000,
+0x00050844,
+0x48000001,
+0x0003000f,
+0x48000000,
+0x00050047,
+0x0006005c,
+0x280b0008,
+0x80ae0000,
+0xc82e0000,
+0x41800000,
+0x00050844,
+0x7c05b040,
+0x40800000,
+0x00050844,
+0x48000001,
+0x00030010,
+0x48000000,
+0x00050047,
+0x0006005d,
+0x280b0008,
+0x80ae0000,
+0xc82e0000,
+0x41800000,
+0x00050844,
+0x7c05b040,
+0x40800000,
+0x00050844,
+0x48000001,
+0x00030011,
+0x48000000,
+0x00050047,
+0x0006005e,
+0x280b0008,
+0x80ae0000,
+0xc82e0000,
+0x41800000,
+0x00050844,
+0x7c05b040,
+0x40800000,
+0x00050844,
+0x00000000,
+0x48000001,
+0x00030012,
+0x48000000,
+0x00050047,
+0x0006005f,
+0x280b0008,
+0x80ae0000,
+0xc82e0000,
+0x41800000,
+0x00050844,
+0x7c05b040,
+0x40800000,
+0x00050844,
+0x48000001,
+0x00030013,
+0x48000000,
+0x00050047,
+0x00060060,
+0x280b0008,
+0x80ae0000,
+0xc82e0000,
+0x41800000,
+0x00050844,
+0x7c05b040,
+0x40800000,
+0x00050844,
+0x48000001,
+0x00030014,
+0x48000000,
+0x00050047,
+0x00060061,
+0x280b0008,
+0x80ae0000,
+0xc82e0000,
+0x41800000,
+0x00050844,
+0x7c05b040,
+0x40800000,
+0x00050844,
+0x48000001,
+0x00030015,
+0x48000000,
+0x00050047,
+0x00060062,
+0x280b0008,
+0x80ae0000,
+0xc82e0000,
+0x41800000,
+0x00050844,
+0x7c05b040,
+0x40800000,
+0x00050844,
+0x48000001,
+0x00030016,
+0x48000000,
+0x00050047,
+0x00060063,
+0x00000000,
+0x280b0008,
+0x80ae0000,
+0xc82e0000,
+0x41800000,
+0x00050844,
+0x7c05b040,
+0x40800000,
+0x00050844,
+0x48000001,
+0x00030017,
+0x48000000,
+0x00050047,
+0x00060064,
+0x280b0008,
+0x80ae0000,
+0xc82e0000,
+0x41800000,
+0x00050844,
+0x7c05b040,
+0x40800000,
+0x00050844,
+0x48000001,
+0x00030018,
+0x48000000,
+0x00050047,
+0x00060065,
+0x280b0008,
+0x80ae0000,
+0xc82e0000,
+0x41800000,
+0x00050844,
+0x7c05b040,
+0x40800000,
+0x00050844,
+0x48000001,
+0x00030019,
+0x48000000,
+0x00050047,
+0x00060066,
+0x280b0008,
+0x80ae0000,
+0xc82e0000,
+0x41800000,
+0x00050844,
+0x7c05b040,
+0x40800000,
+0x00050844,
+0x48000001,
+0x0003001a,
+0x48000000,
+0x00050047,
+0x00060067,
+0x280b0008,
+0x80ae0000,
+0xc82e0000,
+0x41800000,
+0x00050844,
+0x7c05b040,
+0x40800000,
+0x00050844,
+0x00000000,
+0x48000001,
+0x0003001b,
+0x48000000,
+0x00050047,
+0x00060068,
+0x280b0008,
+0x80ae0000,
+0xc82e0000,
+0x41800000,
+0x00050844,
+0x7c05b040,
+0x40800000,
+0x00050844,
+0x48000001,
+0x0003001c,
+0x48000000,
+0x00050047,
+0x00060069,
+0x280b0010,
+0x80ae0000,
+0xc82e0000,
+0x80ce0008,
+0xc84e0008,
+0x41800000,
+0x00050844,
+0x7c05b040,
+0x40800000,
+0x00050844,
+0x7c06b040,
+0x40800000,
+0x00050844,
+0x48000001,
+0x0003001d,
+0x48000000,
+0x00050047,
+0x0006006a,
+0x280b0010,
+0x80ae0000,
+0xc82e0000,
+0x80ce0008,
+0xc84e0008,
+0x41800000,
+0x00050844,
+0x7c05b040,
+0x40800000,
+0x00050844,
+0x7c06b040,
+0x40800000,
+0x00050844,
+0x48000001,
+0x0003001e,
+0x48000000,
+0x00050047,
+0x0006006b,
+0x280b0010,
+0x80ae0000,
+0xc82e0000,
+0x80ce0008,
+0xc84e0008,
+0x41800000,
+0x00050844,
+0x7c05b040,
+0x40800000,
+0x00050844,
+0x00000000,
+0x7c06b040,
+0x40800000,
+0x00050844,
+0x48000001,
+0x0003001f,
+0x48000000,
+0x00050047,
+0x0006006c,
+0x0006006d,
+0x280b0008,
+0x80ae0000,
+0xc82e0000,
+0x41800000,
+0x00050844,
+0x7c05b040,
+0x40800000,
+0x00050844,
+0xc84a0000,
+0x00098200,
+0xfc2100b2,
+0x48000000,
+0x00050047,
+0x0006006e,
+0x280b0010,
+0x80ae0000,
+0xc82e0000,
+0x80ce0008,
+0xc84e0008,
+0x41800000,
+0x00050844,
+0x7c05b040,
+0x40800000,
+0x00050844,
+0x7c06b040,
+0x40800000,
+0x00050844,
+0xfc40101e,
+0xd8410008,
+0x8061000c,
+0x48000001,
+0x00030020,
+0x48000000,
+0x00050047,
+0x0006006f,
+0x280b0008,
+0x80ae0000,
+0xc82e0000,
+0x41800000,
+0x00050844,
+0x7c05b040,
+0x40800000,
+0x00050844,
+0x38710000,
+0x00098200,
+0x820efff8,
+0x48000001,
+0x00030021,
+0x81110000,
+0x00098200,
+0x3a8efff8,
+0x6d088000,
+0x91010024,
+0xc8410020,
+0xfc42f828,
+0xd8340000,
+0x39800000,
+0x00098200,
+0x00000000,
+0xd8540008,
+0x48000000,
+0x00050045,
+0x00060070,
+0x280b0008,
+0x80ae0000,
+0xc82e0000,
+0x41800000,
+0x00050844,
+0x7c05b040,
+0x40800000,
+0x00050844,
+0x386efff8,
+0x820efff8,
+0x48000001,
+0x00030022,
+0x3a8efff8,
+0xd82e0000,
+0x39800000,
+0x00098200,
+0x48000000,
+0x00050045,
+0x00060071,
+0x280b0008,
+0x80ae0000,
+0xc82e0000,
+0x41800000,
+0x00050844,
+0x7c05b040,
+0x40800000,
+0x00050844,
+0x39000008,
+0x0006000b,
+0x7c8e402e,
+0x7c4e44ae,
+0x7c885840,
+0x7c04b040,
+0x40840000,
+0x00050847,
+0x40800000,
+0x00050844,
+0xfc011028,
+0x39080008,
+0xfc2008ae,
+0x48000000,
+0x0005000b,
+0x00060072,
+0x280b0008,
+0x80ae0000,
+0xc82e0000,
+0x41800000,
+0x00050844,
+0x7c05b040,
+0x40800000,
+0x00050844,
+0x39000008,
+0x0006000b,
+0x7c8e402e,
+0x7c4e44ae,
+0x7c885840,
+0x7c04b040,
+0x40840000,
+0x00050847,
+0x40800000,
+0x00050844,
+0xfc011028,
+0x39080008,
+0xfc20106e,
+0x48000000,
+0x0005000b,
+0x00060073,
+0x00000000,
+0x280b0008,
+0x80ae0000,
+0x806e0004,
+0x41800000,
+0x00050844,
+0x2c050000,
+0x00098200,
+0x40820000,
+0x00050844,
+0x80630000,
+0x00098200,
+0x48000000,
+0x00050074,
+0x00060075,
+0x280b0008,
+0x80ae0000,
+0x806e0004,
+0x40820000,
+0x00050844,
+0x2c050000,
+0x00098200,
+0x40820000,
+0x00050844,
+0x80030000,
+0x00098200,
+0x89030000,
+0x00098200,
+0x30c0ffff,
+0x7d860110,
+0x91010024,
+0x398c0001,
+0xc8010020,
+0x3a8efff8,
+0x820efff8,
+0xfc00f028,
+0x558c1800,
+0x000900a1,
+0xd8140000,
+0x48000000,
+0x00050045,
+0x00060076,
+0x80110000,
+0x00098200,
+0x81110000,
+0x00098200,
+0x7c004040,
+0x40800001,
+0x0005084e,
+0x280b0008,
+0x80ae0000,
+0xc82e0000,
+0x40820000,
+0x00050844,
+0x7c05b040,
+0x40800000,
+0x00050844,
+0xfc20081e,
+0xd8210008,
+0x8001000c,
+0x3881000f,
+0x38a00001,
+0x280000ff,
+0x41810000,
+0x00050844,
+0x00060077,
+0x7e439378,
+0x91d20000,
+0x00098200,
+0x00000000,
+0x92010008,
+0x48000001,
+0x00030023,
+0x81d20000,
+0x00098200,
+0x38a00000,
+0x00098200,
+0x48000000,
+0x00050049,
+0x00060078,
+0x80110000,
+0x00098200,
+0x81110000,
+0x00098200,
+0x7c004040,
+0x40800001,
+0x0005084e,
+0x280b0010,
+0x80ae0010,
+0xc80e0010,
+0x800e0000,
+0x806e0004,
+0x41800000,
+0x00050844,
+0x808e0008,
+0xc82e0008,
+0x3920ffff,
+0x41820000,
+0x00050801,
+0x7c05b040,
+0x40800000,
+0x00050844,
+0xfc00001e,
+0xd8010008,
+0x8121000c,
+0x0006000b,
+0x7c04b040,
+0x40800000,
+0x00050844,
+0x2c000000,
+0x00098200,
+0x40820000,
+0x00050844,
+0xfc20081e,
+0xd8210008,
+0x8101000c,
+0x80030000,
+0x00098200,
+0x7c004840,
+0x38c90001,
+0x41800000,
+0x00050805,
+0x0006000c,
+0x2c080000,
+0x7cc80214,
+0x40810000,
+0x00050807,
+0x0006000d,
+0x7ca84850,
+0x38830000,
+0x00098200,
+0x7ca0fe70,
+0x38a50001,
+0x7c844214,
+0x7ca50078,
+0x48000000,
+0x00050077,
+0x0006000f,
+0x00000000,
+0x7c890050,
+0x7c84fe70,
+0x7cc62078,
+0x7d203214,
+0x48000000,
+0x0005000c,
+0x00060011,
+0x30a8ffff,
+0x7ca52910,
+0x7cc4fe70,
+0x7cc62878,
+0x7cc82078,
+0x39080001,
+0x48000000,
+0x0005000d,
+0x00060079,
+0x80110000,
+0x00098200,
+0x81110000,
+0x00098200,
+0x7c004040,
+0x40800001,
+0x0005084e,
+0x280b0010,
+0x80ae0000,
+0x806e0004,
+0x80ce0008,
+0xc84e0008,
+0x41800000,
+0x00050844,
+0x2c050000,
+0x00098200,
+0x40820000,
+0x00050844,
+0x7c06b040,
+0x40800000,
+0x00050844,
+0xfc40101e,
+0xd8410008,
+0x80a1000c,
+0x80030000,
+0x00098200,
+0x2c050000,
+0x81110000,
+0x00098200,
+0x40810000,
+0x00050802,
+0x28000001,
+0x3925ffff,
+0x41800000,
+0x00050802,
+0x7c882840,
+0x40820000,
+0x00050844,
+0x88030000,
+0x00098200,
+0x80910000,
+0x00098200,
+0x41840000,
+0x00050844,
+0x0006000b,
+0x28090000,
+0x7c0449ae,
+0x3929ffff,
+0x40820000,
+0x0005080b,
+0x48000000,
+0x00050077,
+0x0006000c,
+0x00000000,
+0x38710000,
+0x00098200,
+0x38a00000,
+0x00098200,
+0x48000000,
+0x00050049,
+0x0006007a,
+0x80110000,
+0x00098200,
+0x81110000,
+0x00098200,
+0x7c004040,
+0x40800001,
+0x0005084e,
+0x280b0008,
+0x80ae0000,
+0x806e0004,
+0x41800000,
+0x00050844,
+0x2c050000,
+0x00098200,
+0x81110000,
+0x00098200,
+0x40820000,
+0x00050844,
+0x80a30000,
+0x00098200,
+0x38630000,
+0x00098200,
+0x80910000,
+0x00098200,
+0x39200000,
+0x7c082840,
+0x38c5ffff,
+0x41800000,
+0x00050844,
+0x0006000b,
+0x2c060000,
+0x7d0348ae,
+0x41800000,
+0x00050877,
+0x7d0431ae,
+0x38c6ffff,
+0x39290001,
+0x48000000,
+0x0005000b,
+0x0006007b,
+0x80110000,
+0x00098200,
+0x81110000,
+0x00098200,
+0x7c004040,
+0x40800001,
+0x0005084e,
+0x00000000,
+0x280b0008,
+0x80ae0000,
+0x806e0004,
+0x41800000,
+0x00050844,
+0x2c050000,
+0x00098200,
+0x81110000,
+0x00098200,
+0x40820000,
+0x00050844,
+0x80a30000,
+0x00098200,
+0x38630000,
+0x00098200,
+0x80910000,
+0x00098200,
+0x7c082840,
+0x39200000,
+0x41800000,
+0x00050844,
+0x0006000b,
+0x7c092840,
+0x7d0348ae,
+0x40800000,
+0x00050877,
+0x3808ffbf,
+0x69060020,
+0x3000ffe6,
+0x7cc63110,
+0x70c60020,
+0x7d083278,
+0x7d0449ae,
+0x39290001,
+0x48000000,
+0x0005000b,
+0x0006007c,
+0x80110000,
+0x00098200,
+0x81110000,
+0x00098200,
+0x7c004040,
+0x40800001,
+0x0005084e,
+0x280b0008,
+0x80ae0000,
+0x806e0004,
+0x41800000,
+0x00050844,
+0x2c050000,
+0x00098200,
+0x81110000,
+0x00098200,
+0x40820000,
+0x00050844,
+0x80a30000,
+0x00098200,
+0x38630000,
+0x00098200,
+0x80910000,
+0x00098200,
+0x00000000,
+0x7c082840,
+0x39200000,
+0x41800000,
+0x00050844,
+0x0006000b,
+0x7c092840,
+0x7d0348ae,
+0x40800000,
+0x00050877,
+0x3808ff9f,
+0x69060020,
+0x3000ffe6,
+0x7cc63110,
+0x70c60020,
+0x7d083278,
+0x7d0449ae,
+0x39290001,
+0x48000000,
+0x0005000b,
+0x0006007d,
+0x280b0008,
+0x80ae0000,
+0x806e0004,
+0x41800000,
+0x00050844,
+0x2c050000,
+0x00098200,
+0x40820000,
+0x00050844,
+0x48000001,
+0x00030024,
+0x48000000,
+0x00050074,
+0x0006007e,
+0x280b0008,
+0x80ae0000,
+0xc82e0000,
+0x41800000,
+0x00050844,
+0x7c05b040,
+0x40800000,
+0x00050844,
+0xfc21f02a,
+0xd8210008,
+0x8061000c,
+0x00060074,
+0x6c638000,
+0x90610024,
+0xc8210020,
+0xfc21f828,
+0x00060047,
+0x820efff8,
+0x3a8efff8,
+0xd82efff8,
+0x48000000,
+0x00050059,
+0x0006007f,
+0x280b0008,
+0x80ae0000,
+0xc82e0000,
+0x41800000,
+0x00050844,
+0x7c05b040,
+0x40800000,
+0x00050844,
+0xfc21f02a,
+0xd8210008,
+0x8061000c,
+0x39000008,
+0x0006000b,
+0x7cce402e,
+0x7c885840,
+0x7c2e44ae,
+0x7c06b040,
+0x40840000,
+0x00050874,
+0xfc21f02a,
+0x40800000,
+0x00050844,
+0x00000000,
+0xd8210008,
+0x8081000c,
+0x7c632038,
+0x39080008,
+0x48000000,
+0x0005000b,
+0x00060080,
+0x280b0008,
+0x80ae0000,
+0xc82e0000,
+0x41800000,
+0x00050844,
+0x7c05b040,
+0x40800000,
+0x00050844,
+0xfc21f02a,
+0xd8210008,
+0x8061000c,
+0x39000008,
+0x0006000b,
+0x7cce402e,
+0x7c885840,
+0x7c2e44ae,
+0x7c06b040,
+0x40840000,
+0x00050874,
+0xfc21f02a,
+0x40800000,
+0x00050844,
+0xd8210008,
+0x8081000c,
+0x7c632378,
+0x39080008,
+0x48000000,
+0x0005000b,
+0x00060081,
+0x280b0008,
+0x80ae0000,
+0xc82e0000,
+0x41800000,
+0x00050844,
+0x7c05b040,
+0x40800000,
+0x00050844,
+0xfc21f02a,
+0xd8210008,
+0x8061000c,
+0x39000008,
+0x0006000b,
+0x7cce402e,
+0x7c885840,
+0x7c2e44ae,
+0x7c06b040,
+0x40840000,
+0x00050874,
+0xfc21f02a,
+0x40800000,
+0x00050844,
+0xd8210008,
+0x8081000c,
+0x7c632278,
+0x39080008,
+0x48000000,
+0x0005000b,
+0x00060082,
+0x280b0008,
+0x80ae0000,
+0xc82e0000,
+0x41800000,
+0x00050844,
+0x7c05b040,
+0x40800000,
+0x00050844,
+0xfc21f02a,
+0xd8210008,
+0x8061000c,
+0x5460403e,
+0x5060c00e,
+0x5060c42e,
+0x7c030378,
+0x48000000,
+0x00050074,
+0x00060083,
+0x280b0008,
+0x80ae0000,
+0xc82e0000,
+0x41800000,
+0x00050844,
+0x7c05b040,
+0x40800000,
+0x00050844,
+0x00000000,
+0xfc21f02a,
+0xd8210008,
+0x8061000c,
+0x7c6318f8,
+0x48000000,
+0x00050074,
+0x00060084,
+0x280b0010,
+0x80ae0000,
+0xc82e0000,
+0x80ce0008,
+0xc84e0008,
+0x41800000,
+0x00050844,
+0x7c05b040,
+0x40800000,
+0x00050844,
+0x7c06b040,
+0x40800000,
+0x00050844,
+0xfc21f02a,
+0xfc42f02a,
+0xd8210008,
+0x8061000c,
+0xd8410008,
+0x8081000c,
+0x548406fe,
+0x7c632030,
+0x48000000,
+0x00050074,
+0x00060085,
+0x280b0010,
+0x80ae0000,
+0xc82e0000,
+0x80ce0008,
+0xc84e0008,
+0x41800000,
+0x00050844,
+0x7c05b040,
+0x40800000,
+0x00050844,
+0x7c06b040,
+0x40800000,
+0x00050844,
+0xfc21f02a,
+0xfc42f02a,
+0xd8210008,
+0x8061000c,
+0xd8410008,
+0x8081000c,
+0x548406fe,
+0x7c632430,
+0x48000000,
+0x00050074,
+0x00060086,
+0x280b0010,
+0x80ae0000,
+0xc82e0000,
+0x80ce0008,
+0xc84e0008,
+0x41800000,
+0x00050844,
+0x7c05b040,
+0x40800000,
+0x00050844,
+0x7c06b040,
+0x40800000,
+0x00050844,
+0xfc21f02a,
+0xfc42f02a,
+0xd8210008,
+0x8061000c,
+0xd8410008,
+0x8081000c,
+0x548406fe,
+0x7c632630,
+0x48000000,
+0x00050074,
+0x00060087,
+0x280b0010,
+0x80ae0000,
+0xc82e0000,
+0x80ce0008,
+0xc84e0008,
+0x41800000,
+0x00050844,
+0x7c05b040,
+0x40800000,
+0x00050844,
+0x7c06b040,
+0x40800000,
+0x00050844,
+0xfc21f02a,
+0xfc42f02a,
+0xd8210008,
+0x8061000c,
+0xd8410008,
+0x8081000c,
+0x5c63203e,
+0x48000000,
+0x00050074,
+0x00060088,
+0x00000000,
+0x280b0010,
+0x80ae0000,
+0xc82e0000,
+0x80ce0008,
+0xc84e0008,
+0x41800000,
+0x00050844,
+0x7c05b040,
+0x40800000,
+0x00050844,
+0x7c06b040,
+0x40800000,
+0x00050844,
+0xfc21f02a,
+0xfc42f02a,
+0xd8210008,
+0x8061000c,
+0xd8410008,
+0x8081000c,
+0x7c8400d0,
+0x5c63203e,
+0x48000000,
+0x00050074,
+0x00060044,
+0x80ca0000,
+0x00098200,
+0x7d0e5a14,
+0x820efff8,
+0x38080000,
+0x00098200,
+0x81320000,
+0x00098200,
+0x92010008,
+0x7c004840,
+0x91d20000,
+0x00098200,
+0x91120000,
+0x00098200,
+0x7e439378,
+0x41810000,
+0x00050805,
+0x7cc903a6,
+0x4e800421,
+0x81d20000,
+0x00098200,
+0x2c030000,
+0x546c1800,
+0x000900a1,
+0x3a8efff8,
+0x41810000,
+0x00050845,
+0x0006000b,
+0x80120000,
+0x00098200,
+0x814efffc,
+0x7d6e0050,
+0x40820000,
+0x00050828,
+0x820a0000,
+0x00098200,
+0x80f00000,
+0x3a100004,
+0x54e815ba,
+0x54f4dd78,
+0x7c11402e,
+0x7e947214,
+0x7c0903a6,
+0x4e800420,
+0x00060028,
+0x72000000,
+0x00090200,
+0x56080038,
+0x40820000,
+0x00050803,
+0x80f0fffc,
+0x54e8dd78,
+0x0006000d,
+0x00000000,
+0x7d287050,
+0x48000000,
+0x00050024,
+0x0006000f,
+0x38800000,
+0x00098200,
+0x48000001,
+0x00030000,
+0x81d20000,
+0x00098200,
+0x7c000000,
+0x48000000,
+0x0005000b,
+0x0006004e,
+0x7ea802a6,
+0x91d20000,
+0x00098200,
+0x7c0e5a14,
+0x92010008,
+0x90120000,
+0x00098200,
+0x7e439378,
+0x48000001,
+0x00030025,
+0x81d20000,
+0x00098200,
+0x7ea803a6,
+0x80120000,
+0x00098200,
+0x7d6e0050,
+0x814efffc,
+0x4e800020,
+0x00060089,
+0x00000000,
+0x7c810808,
+0x00000000,
+0x0006008a,
+0x88d10000,
+0x00098200,
+0x70c00000,
+0x00090200,
+0x41820000,
+0x00050801,
+0x0006000f,
+0x39080000,
+0x00098200,
+0x7c11402e,
+0x7c0903a6,
+0x4e800420,
+0x0006008b,
+0x88d10000,
+0x00098200,
+0x81310000,
+0x00098200,
+0x70c00000,
+0x00090200,
+0x54c007c0,
+0x000900ab,
+0x40820000,
+0x0005080f,
+0x2c800000,
+0x3529ffff,
+0x41860000,
+0x0005080f,
+0x91310000,
+0x00098200,
+0x41820000,
+0x00050801,
+0x40840000,
+0x0005080f,
+0x0006000b,
+0x7e439378,
+0x9261000c,
+0x7e048378,
+0x91d20000,
+0x00098200,
+0x48000001,
+0x00030026,
+0x0006000d,
+0x81d20000,
+0x00098200,
+0x0006000e,
+0x00000000,
+0x80f0fffc,
+0x54e815ba,
+0x54ea5d78,
+0x39080000,
+0x00098200,
+0x54ec9b78,
+0x7c11402e,
+0x54f4dd78,
+0x54eb9d78,
+0x7c0903a6,
+0x4e800420,
+0x0006008c,
+0x3a100004,
+0x826affec,
+0x48000000,
+0x0005000e,
+0x0006008d,
+0x00000000,
+0x7c810808,
+0x00000000,
+0x0006008e,
+0x7e048378,
+0x00000000,
+0x48000000,
+0x00050001,
+0x00000000,
+0x0006008f,
+0x00000000,
+0x62040001,
+0x0006000b,
+0x00000000,
+0x7c0e5a14,
+0x92010008,
+0x7e439378,
+0x91d20000,
+0x00098200,
+0x7e8ea050,
+0x90120000,
+0x00098200,
+0x48000001,
+0x00030027,
+0x81d20000,
+0x00098200,
+0x80120000,
+0x00098200,
+0x93010008,
+0x7d6e0050,
+0x7e8ea214,
+0x814efffc,
+0x7c6903a6,
+0x4e800420,
+0x00060090,
+0x00000000,
+0x7c810808,
+0x00000000,
+0x00060091,
+0x00000000,
+0x7c810808,
+0x00000000,
+0x00060092,
+0x48000000,
+0x0003000e,
+0x00060093,
+0x48000000,
+0x0003000f,
+0x00060094,
+0x00000000,
+0x48000000,
+0x00030028,
+0x00000000,
+0x00060095,
+0x00000000,
+0x7c810808,
+0x00000000,
+0x00060096,
+0x00000000,
+0x7c810808,
+0x00000000,
+0x00060097,
+0x28030001,
+0x41820000,
+0x00050801,
+0x41810000,
+0x00050802,
+0xfc21102a,
+0x4e800020,
+0x0006000b,
+0xfc211028,
+0x4e800020,
+0x0006000c,
+0x28030003,
+0x41820000,
+0x00050801,
+0x41810000,
+0x00050802,
+0xfc2100b2,
+0x4e800020,
+0x0006000b,
+0xfc211024,
+0x4e800020,
+0x0006000c,
+0x28030005,
+0x41820000,
+0x00050801,
+0x41810000,
+0x00050802,
+0x9421ffe0,
+0xd9c10010,
+0xd9e10018,
+0x7c0802a6,
+0xfdc00890,
+0xfc211024,
+0x90010024,
+0xfde01090,
+0x48000001,
+0x0003000e,
+0x80010024,
+0xfc2103f2,
+0x7c0803a6,
+0xfc2e0828,
+0xc9c10010,
+0xc9e10018,
+0x38210020,
+0x4e800020,
+0x0006000b,
+0x48000000,
+0x0003001d,
+0x0006000c,
+0x28030007,
+0x41820000,
+0x00050801,
+0x41810000,
+0x00050802,
+0xfc200850,
+0x4e800020,
+0x0006000b,
+0xfc200a10,
+0x4e800020,
+0x0006000c,
+0x7c810808,
+0x00060098,
+0x00000000,
+0x7c810808,
+0x00000000,
+0x00080000,
+0x00000000,
+0x7c0ea02e,
+0x3a100004,
+0x7c0ea4ae,
+0x7d0e602e,
+0x7c00b040,
+0x8130fffc,
+0x7c2e64ae,
+0x7c88b040,
+0x552993ba,
+0x40800000,
+0x00050834,
+0x3d290000,
+0x00098200,
+0x40840000,
+0x00050834,
+0xfc000800,
+0x00000000,
+0x40800000,
+0x00050801,
+0x00000000,
+0x41800000,
+0x00050801,
+0x00000000,
+0x4c001382,
+0x40800000,
+0x00050801,
+0x00000000,
+0x4c001382,
+0x41800000,
+0x00050801,
+0x00000000,
+0x7e104a14,
+0x0006000b,
+0x80f00000,
+0x3a100004,
+0x54e815ba,
+0x54ea5d78,
+0x54ec9b78,
+0x7c11402e,
+0x54f4dd78,
+0x54eb9d78,
+0x7c0903a6,
+0x4e800420,
+0x00000000,
+0x7c14706e,
+0x81300000,
+0xc8140000,
+0x3a100004,
+0x7d0c706e,
+0x7c00b040,
+0x552993ba,
+0xc82c0000,
+0x7c88b040,
+0x3d290000,
+0x00098200,
+0x40800000,
+0x00050805,
+0x40840000,
+0x00050805,
+0xfc000800,
+0x00000000,
+0x40820000,
+0x00050801,
+0x7e104a14,
+0x00000000,
+0x41820000,
+0x00050801,
+0x7e104a14,
+0x00000000,
+0x0006000b,
+0x80f00000,
+0x3a100004,
+0x54e815ba,
+0x54ea5d78,
+0x54ec9b78,
+0x7c11402e,
+0x54f4dd78,
+0x54eb9d78,
+0x7c0903a6,
+0x4e800420,
+0x0006000f,
+0x80940004,
+0x80ac0004,
+0x7c0600f8,
+0x7c004040,
+0x28860000,
+0x00090200,
+0x2b060000,
+0x00090200,
+0x7e842840,
+0x4c222902,
+0x4c161342,
+0x4c42b202,
+0x7e158378,
+0x4c420b82,
+0x4c000b82,
+0x00000000,
+0x40820000,
+0x00050806,
+0x7e104a14,
+0x00060010,
+0x00000000,
+0x41820000,
+0x00050806,
+0x7e104a14,
+0x00060010,
+0x00000000,
+0x41800000,
+0x0005080b,
+0x41980000,
+0x0005080b,
+0x81240000,
+0x00098200,
+0x38c00000,
+0x00098200,
+0x28090000,
+0x41820000,
+0x0005080b,
+0x89290000,
+0x00098200,
+0x71290000,
+0x00090200,
+0x40820000,
+0x0005080b,
+0x7eb0ab78,
+0x48000000,
+0x00050039,
+0x00000000,
+0x7c14706e,
+0x558c007e,
+0x000900ab,
+0x80d40004,
+0x80f00000,
+0x218cfffc,
+0x3a100004,
+0x7d0f602e,
+0x20000000,
+0x00098200,
+0x7d064050,
+0x7c004378,
+0x54e993ba,
+0x20000000,
+0x3d290000,
+0x00098200,
+0x7d084110,
+0x00000000,
+0x7d294078,
+0x00000000,
+0x7d294038,
+0x00000000,
+0x7e104a14,
+0x80f00000,
+0x3a100004,
+0x54e815ba,
+0x54ea5d78,
+0x54ec9b78,
+0x7c11402e,
+0x54f4dd78,
+0x54eb9d78,
+0x7c0903a6,
+0x4e800420,
+0x00000000,
+0x7c0ea02e,
+0x7c0ea4ae,
+0x3a100004,
+0x7c2f64ae,
+0x80f0fffc,
+0x7c00b040,
+0x40800000,
+0x00050805,
+0xfc000800,
+0x54e993ba,
+0x3d290000,
+0x00098200,
+0x00000000,
+0x40820000,
+0x00050805,
+0x7e104a14,
+0x0006000f,
+0x00000000,
+0x41820000,
+0x00050802,
+0x0006000b,
+0x7e104a14,
+0x0006000c,
+0x00000000,
+0x80f00000,
+0x3a100004,
+0x54e815ba,
+0x54ea5d78,
+0x54ec9b78,
+0x7c11402e,
+0x54f4dd78,
+0x54eb9d78,
+0x7c0903a6,
+0x4e800420,
+0x00000000,
+0x0006000f,
+0x54e993ba,
+0x3d290000,
+0x00098200,
+0x48000000,
+0x0005000b,
+0x00000000,
+0x7c0ea02e,
+0x558800fe,
+0x000900ab,
+0x80f00000,
+0x7d0840f8,
+0x3a100004,
+0x7c080050,
+0x54e993ba,
+0x3000ffff,
+0x3d290000,
+0x00098200,
+0x7d084110,
+0x00000000,
+0x7d294038,
+0x00000000,
+0x7d294078,
+0x00000000,
+0x7e104a14,
+0x80f00000,
+0x3a100004,
+0x54e815ba,
+0x54ea5d78,
+0x54ec9b78,
+0x7c11402e,
+0x54f4dd78,
+0x54eb9d78,
+0x7c0903a6,
+0x4e800420,
+0x00000000,
+0x7c0e602e,
+0x80f00000,
+0x3a100004,
+0x00000000,
+0x20000000,
+0x00098200,
+0x54e993ba,
+0x7d084110,
+0x3d290000,
+0x00098200,
+0x00000000,
+0x7d294078,
+0x00000000,
+0x7d294038,
+0x00000000,
+0x7e104a14,
+0x00000000,
+0x39000000,
+0x00098200,
+0x7c0e64ae,
+0x7c004040,
+0x00000000,
+0x40800000,
+0x00050801,
+0x00000000,
+0x41800000,
+0x00050801,
+0x00000000,
+0x3e100000,
+0x00098200,
+0x54e993ba,
+0x7c0ea5ae,
+0x7e104a14,
+0x0006000b,
+0x00000000,
+0x80f00000,
+0x3a100004,
+0x54e815ba,
+0x54ea5d78,
+0x54ec9b78,
+0x7c11402e,
+0x54f4dd78,
+0x54eb9d78,
+0x7c0903a6,
+0x4e800420,
+0x00000000,
+0x80f00000,
+0x3a100004,
+0x7c0e64ae,
+0x7c0ea5ae,
+0x54e815ba,
+0x54ea5d78,
+0x54ec9b78,
+0x7c11402e,
+0x54f4dd78,
+0x54eb9d78,
+0x7c0903a6,
+0x4e800420,
+0x00000000,
+0x80f00000,
+0x3a100004,
+0x7c0e602e,
+0x21000000,
+0x00098200,
+0x7c004114,
+0x7c0ea12e,
+0x54e815ba,
+0x54ea5d78,
+0x54ec9b78,
+0x7c11402e,
+0x54f4dd78,
+0x54eb9d78,
+0x7c0903a6,
+0x4e800420,
+0x00000000,
+0x7d0c706e,
+0x800c0004,
+0x7c08b040,
+0x40800000,
+0x0005083c,
+0x6d088000,
+0x80f00000,
+0x3a100004,
+0x7d14716e,
+0x90140004,
+0x54e815ba,
+0x54ea5d78,
+0x54ec9b78,
+0x7c11402e,
+0x54f4dd78,
+0x54eb9d78,
+0x7c0903a6,
+0x4e800420,
+0x00000000,
+0x7c0c706e,
+0x806c0004,
+0x2c000000,
+0x00098200,
+0x40820000,
+0x00050802,
+0x80630000,
+0x00098200,
+0x0006000b,
+0x90610024,
+0xc8010020,
+0xfc00f028,
+0x80f00000,
+0x3a100004,
+0x7c0ea5ae,
+0x54e815ba,
+0x54ea5d78,
+0x54ec9b78,
+0x7c11402e,
+0x54f4dd78,
+0x54eb9d78,
+0x7c0903a6,
+0x4e800420,
+0x0006000c,
+0x2c000000,
+0x00098200,
+0x40820000,
+0x0005083e,
+0x00000000,
+0x81230000,
+0x00098200,
+0x28090000,
+0x40820000,
+0x00050809,
+0x0006000d,
+0x00000000,
+0x0006003f,
+0x48000001,
+0x00030024,
+0x48000000,
+0x0005000b,
+0x00000000,
+0x00060013,
+0x88090000,
+0x00098200,
+0x70000000,
+0x00090200,
+0x40820000,
+0x0005080d,
+0x48000000,
+0x0005003e,
+0x00000000,
+0x7c6e502e,
+0x7c0e54ae,
+0x7c2f5cae,
+0x7c03b040,
+0x40800000,
+0x0005083a,
+0x00000000,
+0x7c6e502e,
+0x7c2e54ae,
+0x7c0f5cae,
+0x7c03b040,
+0x40800000,
+0x0005083b,
+0x00000000,
+0x7c6e502e,
+0x7c8e582e,
+0x7c0e54ae,
+0x7c2e5cae,
+0x7c03b040,
+0x7c84b040,
+0x4c002202,
+0x40800000,
+0x0005083d,
+0x00000000,
+0x80f00000,
+0x3a100004,
+0xfc00082a,
+0x7c0ea5ae,
+0x54e815ba,
+0x54ea5d78,
+0x54ec9b78,
+0x7c11402e,
+0x54f4dd78,
+0x54eb9d78,
+0x7c0903a6,
+0x4e800420,
+0x00000000,
+0x7c6e502e,
+0x7c0e54ae,
+0x7c2f5cae,
+0x7c03b040,
+0x40800000,
+0x0005083a,
+0x00000000,
+0x7c6e502e,
+0x7c2e54ae,
+0x7c0f5cae,
+0x7c03b040,
+0x40800000,
+0x0005083b,
+0x00000000,
+0x7c6e502e,
+0x7c8e582e,
+0x7c0e54ae,
+0x7c2e5cae,
+0x7c03b040,
+0x7c84b040,
+0x4c002202,
+0x40800000,
+0x0005083d,
+0x00000000,
+0x80f00000,
+0x3a100004,
+0xfc000828,
+0x7c0ea5ae,
+0x54e815ba,
+0x54ea5d78,
+0x54ec9b78,
+0x7c11402e,
+0x54f4dd78,
+0x54eb9d78,
+0x7c0903a6,
+0x4e800420,
+0x00000000,
+0x7c6e502e,
+0x7c0e54ae,
+0x7c2f5cae,
+0x7c03b040,
+0x40800000,
+0x0005083a,
+0x00000000,
+0x7c6e502e,
+0x7c2e54ae,
+0x7c0f5cae,
+0x7c03b040,
+0x40800000,
+0x0005083b,
+0x00000000,
+0x7c6e502e,
+0x7c8e582e,
+0x7c0e54ae,
+0x7c2e5cae,
+0x7c03b040,
+0x7c84b040,
+0x4c002202,
+0x40800000,
+0x0005083d,
+0x00000000,
+0x80f00000,
+0x3a100004,
+0xfc000072,
+0x7c0ea5ae,
+0x54e815ba,
+0x54ea5d78,
+0x54ec9b78,
+0x7c11402e,
+0x54f4dd78,
+0x54eb9d78,
+0x7c0903a6,
+0x4e800420,
+0x00000000,
+0x7c6e502e,
+0x7c0e54ae,
+0x7c2f5cae,
+0x7c03b040,
+0x40800000,
+0x0005083a,
+0x00000000,
+0x7c6e502e,
+0x7c2e54ae,
+0x7c0f5cae,
+0x7c03b040,
+0x40800000,
+0x0005083b,
+0x00000000,
+0x7c6e502e,
+0x7c8e582e,
+0x7c0e54ae,
+0x7c2e5cae,
+0x7c03b040,
+0x7c84b040,
+0x4c002202,
+0x40800000,
+0x0005083d,
+0x00000000,
+0x80f00000,
+0x3a100004,
+0xfc000824,
+0x7c0ea5ae,
+0x54e815ba,
+0x54ea5d78,
+0x54ec9b78,
+0x7c11402e,
+0x54f4dd78,
+0x54eb9d78,
+0x7c0903a6,
+0x4e800420,
+0x00000000,
+0x7c6e502e,
+0x7dce54ae,
+0x7def5cae,
+0x7c03b040,
+0x40800000,
+0x0005083a,
+0x00000000,
+0x7c6e502e,
+0x7dee54ae,
+0x7dcf5cae,
+0x7c03b040,
+0x40800000,
+0x0005083b,
+0x00000000,
+0x7c6e502e,
+0x7c8e582e,
+0x7dce54ae,
+0x7dee5cae,
+0x7c03b040,
+0x7c84b040,
+0x4c002202,
+0x40800000,
+0x0005083d,
+0x00000000,
+0x00060099,
+0xfc2e7824,
+0x48000001,
+0x0003000e,
+0xfc0103f2,
+0x80f00000,
+0x3a100004,
+0xfc0e0028,
+0x7c0ea5ae,
+0x54e815ba,
+0x54ea5d78,
+0x54ec9b78,
+0x7c11402e,
+0x54f4dd78,
+0x54eb9d78,
+0x7c0903a6,
+0x4e800420,
+0x00000000,
+0x7c6e502e,
+0x7dce54ae,
+0x7def5cae,
+0x7c03b040,
+0x40800000,
+0x0005083a,
+0x00000000,
+0x7c6e502e,
+0x7dee54ae,
+0x7dcf5cae,
+0x7c03b040,
+0x40800000,
+0x0005083b,
+0x00000000,
+0x7c6e502e,
+0x7c8e582e,
+0x7dce54ae,
+0x7dee5cae,
+0x7c03b040,
+0x7c84b040,
+0x4c002202,
+0x40800000,
+0x0005083d,
+0x00000000,
+0x48000000,
+0x00050099,
+0x00000000,
+0x7c6e502e,
+0x7c2e54ae,
+0x7c8e582e,
+0x7c4e5cae,
+0x7c03b040,
+0x7c84b040,
+0x4c002202,
+0x40800000,
+0x0005083d,
+0x48000001,
+0x0003001d,
+0x7c2ea5ae,
+0x80f00000,
+0x3a100004,
+0x54e815ba,
+0x54ea5d78,
+0x54ec9b78,
+0x7c11402e,
+0x54f4dd78,
+0x54eb9d78,
+0x7c0903a6,
+0x4e800420,
+0x00000000,
+0x7caa5850,
+0x91d20000,
+0x00098200,
+0x7c8e5a14,
+0x7d555378,
+0x0006002a,
+0x92010008,
+0x7e439378,
+0x54a500fe,
+0x000900ab,
+0x48000001,
+0x00030029,
+0x28030000,
+0x81d20000,
+0x00098200,
+0x40820000,
+0x00050835,
+0x7c0eacae,
+0x7c0ea5ae,
+0x80f00000,
+0x3a100004,
+0x54e815ba,
+0x54ea5d78,
+0x54ec9b78,
+0x7c11402e,
+0x54f4dd78,
+0x54eb9d78,
+0x7c0903a6,
+0x4e800420,
+0x00000000,
+0x5588007e,
+0x000900ab,
+0x2108fffc,
+0x7c0f402e,
+0x39200000,
+0x00098200,
+0x80f00000,
+0x3a100004,
+0x7d34716e,
+0x90140004,
+0x54e815ba,
+0x54ea5d78,
+0x54ec9b78,
+0x7c11402e,
+0x54f4dd78,
+0x54eb9d78,
+0x7c0903a6,
+0x4e800420,
+0x00000000,
+0x5588007e,
+0x000900ab,
+0x2108fffc,
+0x7c0f402e,
+0x39200000,
+0x00098200,
+0x80f00000,
+0x3a100004,
+0x7d34716e,
+0x90140004,
+0x54e815ba,
+0x54ea5d78,
+0x54ec9b78,
+0x7c11402e,
+0x54f4dd78,
+0x54eb9d78,
+0x7c0903a6,
+0x4e800420,
+0x00000000,
+0x558c6800,
+0x000900a1,
+0x7d8c8670,
+0x6d8c8000,
+0x91810024,
+0xc8010020,
+0xfc00f828,
+0x80f00000,
+0x3a100004,
+0x7c0ea5ae,
+0x54e815ba,
+0x54ea5d78,
+0x54ec9b78,
+0x7c11402e,
+0x54f4dd78,
+0x54eb9d78,
+0x7c0903a6,
+0x4e800420,
+0x00000000,
+0x7c0f64ae,
+0x80f00000,
+0x3a100004,
+0x7c0ea5ae,
+0x54e815ba,
+0x54ea5d78,
+0x54ec9b78,
+0x7c11402e,
+0x54f4dd78,
+0x54eb9d78,
+0x7c0903a6,
+0x4e800420,
+0x00000000,
+0x558800fe,
+0x000900ab,
+0x7d0040f8,
+0x80f00000,
+0x3a100004,
+0x7c0ea12e,
+0x54e815ba,
+0x54ea5d78,
+0x54ec9b78,
+0x7c11402e,
+0x54f4dd78,
+0x54eb9d78,
+0x7c0903a6,
+0x4e800420,
+0x00000000,
+0x7eeea12e,
+0x3a940008,
+0x0006000b,
+0x7eeea12e,
+0x7c146000,
+0x3a940008,
+0x41800000,
+0x0005080b,
+0x80f00000,
+0x3a100004,
+0x54e815ba,
+0x54ea5d78,
+0x54ec9b78,
+0x7c11402e,
+0x54f4dd78,
+0x54eb9d78,
+0x7c0903a6,
+0x4e800420,
+0x00000000,
+0x80f00000,
+0x3a100004,
+0x814efffc,
+0x558c007e,
+0x000900ab,
+0x398c0000,
+0x00098200,
+0x7d4a602e,
+0x810a0000,
+0x00098200,
+0xc8080000,
+0x7c0ea5ae,
+0x54e815ba,
+0x54ea5d78,
+0x54ec9b78,
+0x7c11402e,
+0x54f4dd78,
+0x54eb9d78,
+0x7c0903a6,
+0x4e800420,
+0x00000000,
+0x814efffc,
+0x5694007e,
+0x000900ab,
+0x3a940000,
+0x00098200,
+0x7c0c74ee,
+0x7d4aa02e,
+0x88ca0000,
+0x00098200,
+0x808a0000,
+0x00098200,
+0x70c60000,
+0x00090200,
+0x880a0000,
+0x00098200,
+0x812c0000,
+0xd8040000,
+0x28800000,
+0x810c0004,
+0x4c423382,
+0x39290000,
+0x00098200,
+0x40820000,
+0x00050802,
+0x0006000b,
+0x80f00000,
+0x3a100004,
+0x54e815ba,
+0x54ea5d78,
+0x54ec9b78,
+0x7c11402e,
+0x54f4dd78,
+0x54eb9d78,
+0x7c0903a6,
+0x4e800420,
+0x0006000c,
+0x28090000,
+0x00090200,
+0x40800000,
+0x0005080b,
+0x88c80000,
+0x00098200,
+0x70c60000,
+0x00090200,
+0x38710000,
+0x00098200,
+0x41820000,
+0x0005080b,
+0x48000001,
+0x0003002a,
+0x48000000,
+0x0005000b,
+0x00000000,
+0x80f00000,
+0x3a100004,
+0x814efffc,
+0x5588007e,
+0x000900ab,
+0x5694007e,
+0x000900ab,
+0x2108fffc,
+0x3a940000,
+0x00098200,
+0x7d0f402e,
+0x7d4aa02e,
+0x88ca0000,
+0x00098200,
+0x808a0000,
+0x00098200,
+0x70c60000,
+0x00090200,
+0x88c80000,
+0x00098200,
+0x892a0000,
+0x00098200,
+0x38000000,
+0x00098200,
+0x91040004,
+0x90040000,
+0x40820000,
+0x00050802,
+0x0006000b,
+0x54e815ba,
+0x54ea5d78,
+0x54ec9b78,
+0x7c11402e,
+0x54f4dd78,
+0x54eb9d78,
+0x7c0903a6,
+0x4e800420,
+0x0006000c,
+0x70c60000,
+0x00090200,
+0x28890000,
+0x4c423382,
+0x38710000,
+0x00098200,
+0x41820000,
+0x0005080b,
+0x48000001,
+0x0003002a,
+0x48000000,
+0x0005000b,
+0x00000000,
+0x80f00000,
+0x3a100004,
+0x814efffc,
+0x5694007e,
+0x000900ab,
+0x3a940000,
+0x00098200,
+0x7c0f64ae,
+0x7d4aa02e,
+0x810a0000,
+0x00098200,
+0xd8080000,
+0x54e815ba,
+0x54ea5d78,
+0x54ec9b78,
+0x7c11402e,
+0x54f4dd78,
+0x54eb9d78,
+0x7c0903a6,
+0x4e800420,
+0x00000000,
+0x80f00000,
+0x3a100004,
+0x814efffc,
+0x5694007e,
+0x000900ab,
+0x3a940000,
+0x00098200,
+0x558000fe,
+0x000900ab,
+0x7d4aa02e,
+0x7c0000f8,
+0x810a0000,
+0x00098200,
+0x90080000,
+0x54e815ba,
+0x54ea5d78,
+0x54ec9b78,
+0x7c11402e,
+0x54f4dd78,
+0x54eb9d78,
+0x7c0903a6,
+0x4e800420,
+0x00000000,
+0x81120000,
+0x00098200,
+0x5580007e,
+0x000900ab,
+0x7e100214,
+0x3e100000,
+0x00098200,
+0x91d20000,
+0x00098200,
+0x28080000,
+0x7e439378,
+0x41820000,
+0x00050801,
+0x7c8ea214,
+0x48000001,
+0x0003002b,
+0x81d20000,
+0x00098200,
+0x0006000b,
+0x80f00000,
+0x3a100004,
+0x54e815ba,
+0x54ea5d78,
+0x54ec9b78,
+0x7c11402e,
+0x54f4dd78,
+0x54eb9d78,
+0x7c0903a6,
+0x4e800420,
+0x00000000,
+0x5588007e,
+0x000900ab,
+0x91d20000,
+0x00098200,
+0x2108fffc,
+0x92010008,
+0x7c8f402e,
+0x7e439378,
+0x80aefffc,
+0x48000001,
+0x0003002c,
+0x81d20000,
+0x00098200,
+0x38000000,
+0x00098200,
+0x7c14716e,
+0x90740004,
+0x80f00000,
+0x3a100004,
+0x54e815ba,
+0x54ea5d78,
+0x54ec9b78,
+0x7c11402e,
+0x54f4dd78,
+0x54eb9d78,
+0x7c0903a6,
+0x4e800420,
+0x00000000,
+0x80110000,
+0x00098200,
+0x7e439378,
+0x81110000,
+0x00098200,
+0x91d20000,
+0x00098200,
+0x7c004040,
+0x92010008,
+0x40800000,
+0x00050805,
+0x0006000b,
+0x00000000,
+0x5584ed7e,
+0x558596fe,
+0x2c0407ff,
+0x41820000,
+0x00050803,
+0x0006000c,
+0x48000001,
+0x0003002d,
+0x00000000,
+0x5588007e,
+0x000900ab,
+0x2108fffc,
+0x7c8f402e,
+0x48000001,
+0x0003002e,
+0x00000000,
+0x81d20000,
+0x00098200,
+0x38000000,
+0x00098200,
+0x7c14716e,
+0x90740004,
+0x80f00000,
+0x3a100004,
+0x54e815ba,
+0x54ea5d78,
+0x54ec9b78,
+0x7c11402e,
+0x54f4dd78,
+0x54eb9d78,
+0x7c0903a6,
+0x4e800420,
+0x00000000,
+0x0006000d,
+0x38800801,
+0x48000000,
+0x0005000c,
+0x00000000,
+0x0006000f,
+0x7d956378,
+0x48000001,
+0x0003002f,
+0x7eacab78,
+0x7e439378,
+0x48000000,
+0x0005000b,
+0x00000000,
+0x812efffc,
+0x5588007e,
+0x000900ab,
+0x81490000,
+0x00098200,
+0x2108fffc,
+0x7d6f402e,
+0x00000000,
+0x48000000,
+0x0005009a,
+0x00000000,
+0x48000000,
+0x0005009b,
+0x00000000,
+0x7c6a706e,
+0x7c8b706e,
+0x814a0004,
+0xc80b0000,
+0x2c030000,
+0x00098200,
+0x7c84b040,
+0x40820000,
+0x0005082f,
+0x40840000,
+0x00050805,
+0xfc20001e,
+0xfc40f02a,
+0xd8210008,
+0x800a0000,
+0x00098200,
+0xfc42f028,
+0x8121000c,
+0x810a0000,
+0x00098200,
+0xfc801000,
+0x7c004840,
+0x4c213202,
+0x55291800,
+0x000900a1,
+0x40810000,
+0x0005082f,
+0x7c08482e,
+0x7dc84cae,
+0x2c000000,
+0x00098200,
+0x41820000,
+0x00050802,
+0x0006000b,
+0x80f00000,
+0x3a100004,
+0x7dcea5ae,
+0x54e815ba,
+0x54ea5d78,
+0x54ec9b78,
+0x7c11402e,
+0x54f4dd78,
+0x54eb9d78,
+0x7c0903a6,
+0x4e800420,
+0x0006000c,
+0x812a0000,
+0x00098200,
+0x28090000,
+0x41820000,
+0x0005080b,
+0x88090000,
+0x00098200,
+0x70000000,
+0x00090200,
+0x40820000,
+0x0005080b,
+0x48000000,
+0x0005002f,
+0x0006000f,
+0x2c040000,
+0x00098200,
+0x40820000,
+0x0005082f,
+0x816b0004,
+0x48000000,
+0x0005009a,
+0x00000000,
+0x7c6a706e,
+0x5568007e,
+0x000900ab,
+0x814a0004,
+0x2108fffc,
+0x2c030000,
+0x00098200,
+0x7d6f402e,
+0x40820000,
+0x0005082c,
+0x0006009a,
+0x800a0000,
+0x00098200,
+0x810b0000,
+0x00098200,
+0x812a0000,
+0x00098200,
+0x7d080038,
+0x55002800,
+0x000900a1,
+0x55081800,
+0x000900a1,
+0x7d080050,
+0x7d294214,
+0x0006000b,
+0x80690000,
+0x00098200,
+0x80090000,
+0x00098200,
+0x80890000,
+0x00098200,
+0x81090000,
+0x00098200,
+0x2c030000,
+0x00098200,
+0x40820000,
+0x00050804,
+0x7c005800,
+0x40820000,
+0x00050804,
+0x2c040000,
+0x00098200,
+0x41820000,
+0x00050805,
+0x0006000d,
+0x7c94716e,
+0x91140004,
+0x80f00000,
+0x3a100004,
+0x54e815ba,
+0x54ea5d78,
+0x54ec9b78,
+0x7c11402e,
+0x54f4dd78,
+0x54eb9d78,
+0x7c0903a6,
+0x4e800420,
+0x0006000e,
+0x81290000,
+0x00098200,
+0x00000000,
+0x28090000,
+0x40820000,
+0x0005080b,
+0x38800000,
+0x00098200,
+0x0006000f,
+0x812a0000,
+0x00098200,
+0x28090000,
+0x41820000,
+0x0005080d,
+0x88090000,
+0x00098200,
+0x70000000,
+0x00090200,
+0x40820000,
+0x0005080d,
+0x48000000,
+0x0005002d,
+0x00000000,
+0x7c6a706e,
+0x814a0004,
+0x556000fe,
+0x000900ab,
+0x2c030000,
+0x00098200,
+0x40820000,
+0x0005082e,
+0x810a0000,
+0x00098200,
+0x812a0000,
+0x00098200,
+0x7c004040,
+0x40800000,
+0x0005082e,
+0x7d09582e,
+0x7c095cae,
+0x2c080000,
+0x00098200,
+0x41820000,
+0x00050805,
+0x0006000b,
+0x80f00000,
+0x3a100004,
+0x7c0ea5ae,
+0x54e815ba,
+0x54ea5d78,
+0x54ec9b78,
+0x7c11402e,
+0x54f4dd78,
+0x54eb9d78,
+0x7c0903a6,
+0x4e800420,
+0x0006000f,
+0x812a0000,
+0x00098200,
+0x28090000,
+0x41820000,
+0x0005080b,
+0x89290000,
+0x00098200,
+0x71290000,
+0x00090200,
+0x40820000,
+0x0005080b,
+0x48000000,
+0x0005002e,
+0x00000000,
+0x7c6a706e,
+0x7c8b706e,
+0x814a0004,
+0xc80b0000,
+0x2c030000,
+0x00098200,
+0x7c84b040,
+0x40820000,
+0x00050833,
+0x40840000,
+0x00050805,
+0xfc20001e,
+0xfc40f02a,
+0xd8210008,
+0x800a0000,
+0x00098200,
+0xfc42f028,
+0x8121000c,
+0x810a0000,
+0x00098200,
+0xfc801000,
+0x7c004840,
+0x4c213202,
+0x55201800,
+0x000900a1,
+0x40810000,
+0x00050833,
+0x7d28002e,
+0x88ca0000,
+0x00098200,
+0x7dcea4ae,
+0x2c090000,
+0x00098200,
+0x41820000,
+0x00050803,
+0x0006000b,
+0x70c90000,
+0x00090200,
+0x7dc805ae,
+0x40820000,
+0x00050807,
+0x0006000c,
+0x80f00000,
+0x3a100004,
+0x54e815ba,
+0x54ea5d78,
+0x54ec9b78,
+0x7c11402e,
+0x54f4dd78,
+0x54eb9d78,
+0x7c0903a6,
+0x4e800420,
+0x0006000d,
+0x812a0000,
+0x00098200,
+0x28090000,
+0x41820000,
+0x0005080b,
+0x89290000,
+0x00098200,
+0x71290000,
+0x00090200,
+0x40820000,
+0x0005080b,
+0x48000000,
+0x00050033,
+0x0006000f,
+0x00000000,
+0x2c040000,
+0x00098200,
+0x40820000,
+0x00050833,
+0x816b0004,
+0x48000000,
+0x0005009b,
+0x00060011,
+0x80110000,
+0x00098200,
+0x54c607b8,
+0x91510000,
+0x00098200,
+0x98ca0000,
+0x00098200,
+0x900a0000,
+0x00098200,
+0x48000000,
+0x0005000c,
+0x00000000,
+0x0006000b,
+0x2c030000,
+0x00098200,
+0x40820000,
+0x00050804,
+0x7c005800,
+0x40820000,
+0x00050804,
+0x2c040000,
+0x00098200,
+0x41820000,
+0x00050805,
+0x0006000d,
+0x7c94716e,
+0x91140004,
+0x80f00000,
+0x3a100004,
+0x54e815ba,
+0x54ea5d78,
+0x54ec9b78,
+0x7c11402e,
+0x54f4dd78,
+0x54eb9d78,
+0x7c0903a6,
+0x4e800420,
+0x00000000,
+0x7c6a706e,
+0x5568007e,
+0x000900ab,
+0x814a0004,
+0x2108fffc,
+0x2c030000,
+0x00098200,
+0x7d6f402e,
+0x40820000,
+0x00050830,
+0x0006009b,
+0x800a0000,
+0x00098200,
+0x810b0000,
+0x00098200,
+0x812a0000,
+0x00098200,
+0x9b0a0000,
+0x00098200,
+0x7d080038,
+0x7dcea4ae,
+0x55002800,
+0x000900a1,
+0x55081800,
+0x000900a1,
+0x7d080050,
+0x88ca0000,
+0x00098200,
+0x7d294214,
+0x0006000b,
+0x80690000,
+0x00098200,
+0x80090000,
+0x00098200,
+0x80890000,
+0x00098200,
+0x81090000,
+0x00098200,
+0x2c030000,
+0x00098200,
+0x40820000,
+0x00050805,
+0x7c005800,
+0x40820000,
+0x00050805,
+0x2c040000,
+0x00098200,
+0x41820000,
+0x00050804,
+0x0006000c,
+0x00000000,
+0x70c00000,
+0x00090200,
+0xd9c90000,
+0x00098200,
+0x40820000,
+0x00050807,
+0x0006000d,
+0x80f00000,
+0x3a100004,
+0x54e815ba,
+0x54ea5d78,
+0x54ec9b78,
+0x7c11402e,
+0x54f4dd78,
+0x54eb9d78,
+0x7c0903a6,
+0x4e800420,
+0x0006000e,
+0x810a0000,
+0x00098200,
+0x28080000,
+0x41820000,
+0x0005080c,
+0x88080000,
+0x00098200,
+0x70000000,
+0x00090200,
+0x40820000,
+0x0005080c,
+0x48000000,
+0x00050031,
+0x0006000f,
+0x81290000,
+0x00098200,
+0x28090000,
+0x40820000,
+0x0005080b,
+0x810a0000,
+0x00098200,
+0x38b10000,
+0x00098200,
+0x92010008,
+0x7e439378,
+0x28080000,
+0x91d20000,
+0x00098200,
+0x41820000,
+0x00050806,
+0x88080000,
+0x00098200,
+0x70000000,
+0x00090200,
+0x41820000,
+0x00050831,
+0x00060010,
+0x00000000,
+0x38000000,
+0x00098200,
+0x91650004,
+0x7d445378,
+0x90050000,
+0x48000001,
+0x00030030,
+0x81d20000,
+0x00098200,
+0xd9c30000,
+0x48000000,
+0x0005000d,
+0x00060011,
+0x80110000,
+0x00098200,
+0x54c607b8,
+0x91510000,
+0x00098200,
+0x98ca0000,
+0x00098200,
+0x900a0000,
+0x00098200,
+0x48000000,
+0x0005000d,
+0x00000000,
+0x7c6a706e,
+0x814a0004,
+0x556000fe,
+0x000900ab,
+0x2c030000,
+0x00098200,
+0x40820000,
+0x00050832,
+0x810a0000,
+0x00098200,
+0x812a0000,
+0x00098200,
+0x88ca0000,
+0x00098200,
+0x7c004040,
+0x7dcea4ae,
+0x40800000,
+0x00050832,
+0x7d09582e,
+0x2c080000,
+0x00098200,
+0x41820000,
+0x00050805,
+0x0006000b,
+0x70c00000,
+0x00090200,
+0x7dc95dae,
+0x40820000,
+0x00050807,
+0x0006000c,
+0x80f00000,
+0x3a100004,
+0x54e815ba,
+0x54ea5d78,
+0x54ec9b78,
+0x7c11402e,
+0x54f4dd78,
+0x54eb9d78,
+0x7c0903a6,
+0x4e800420,
+0x0006000f,
+0x810a0000,
+0x00098200,
+0x28080000,
+0x41820000,
+0x0005080b,
+0x89080000,
+0x00098200,
+0x71080000,
+0x00090200,
+0x40820000,
+0x0005080b,
+0x48000000,
+0x00050032,
+0x00060011,
+0x80110000,
+0x00098200,
+0x00000000,
+0x54c607b8,
+0x91510000,
+0x00098200,
+0x98ca0000,
+0x00098200,
+0x900a0000,
+0x00098200,
+0x48000000,
+0x0005000c,
+0x00000000,
+0x7e8ea214,
+0x0006000b,
+0x7ccf6214,
+0x8094fffc,
+0x3413fff8,
+0x80c60004,
+0x540500fe,
+0x000900ab,
+0x41820000,
+0x00050804,
+0x7ca53214,
+0x81240000,
+0x00098200,
+0x54c81800,
+0x000900a1,
+0x88c40000,
+0x00098200,
+0x7c054840,
+0x7d340214,
+0x80040000,
+0x00098200,
+0x41810000,
+0x00050805,
+0x7d080214,
+0x70c00000,
+0x00090200,
+0x0006000d,
+0xc8140000,
+0x3a940008,
+0x7c944800,
+0xd8080000,
+0x39080008,
+0x41840000,
+0x0005080d,
+0x40820000,
+0x00050807,
+0x0006000e,
+0x80f00000,
+0x3a100004,
+0x54e815ba,
+0x54ea5d78,
+0x54ec9b78,
+0x7c11402e,
+0x54f4dd78,
+0x54eb9d78,
+0x7c0903a6,
+0x4e800420,
+0x0006000f,
+0x91d20000,
+0x00098200,
+0x7e439378,
+0x92010008,
+0x7d956378,
+0x48000001,
+0x00030031,
+0x7eacab78,
+0x48000000,
+0x0005000b,
+0x00060011,
+0x80110000,
+0x00098200,
+0x54c607b8,
+0x91510000,
+0x00098200,
+0x98ca0000,
+0x00098200,
+0x900a0000,
+0x00098200,
+0x00000000,
+0x48000000,
+0x0005000e,
+0x00000000,
+0x7d6b9a14,
+0x00000000,
+0x7dc97378,
+0x7c0ea06e,
+0x814e0004,
+0x396bfff8,
+0x39ce0008,
+0x2c000000,
+0x00098200,
+0x40820000,
+0x00050825,
+0x920efff8,
+0x820a0000,
+0x00098200,
+0x80f00000,
+0x3a100004,
+0x54e815ba,
+0x54f4dd78,
+0x7c11402e,
+0x7e947214,
+0x7c0903a6,
+0x4e800420,
+0x00000000,
+0x7d6b9a14,
+0x00000000,
+0x7c14706e,
+0x81540004,
+0x396bfff8,
+0x810efff8,
+0x2c000000,
+0x00098200,
+0x3a940008,
+0x40820000,
+0x00050840,
+0x00060041,
+0x71000000,
+0x00090200,
+0x88ca0000,
+0x00098200,
+0x69090000,
+0x00090200,
+0x288b0000,
+0x40820000,
+0x00050807,
+0x0006000b,
+0x914efffc,
+0x39200000,
+0x2b860001,
+0x41860000,
+0x00050803,
+0x0006000c,
+0x38c90008,
+0x7c144cae,
+0x7c865840,
+0x7c0e4dae,
+0x7cc93378,
+0x40860000,
+0x0005080c,
+0x0006000d,
+0x4c42ea02,
+0x41820000,
+0x00050805,
+0x0006000e,
+0x820a0000,
+0x00098200,
+0x80f00000,
+0x3a100004,
+0x54e815ba,
+0x54f4dd78,
+0x7c11402e,
+0x7e947214,
+0x7c0903a6,
+0x4e800420,
+0x0006000f,
+0x80e8fffc,
+0x54f4dd78,
+0x7d147050,
+0x81080000,
+0x00098200,
+0x81080000,
+0x00098200,
+0x81e80000,
+0x00098200,
+0x48000000,
+0x0005000e,
+0x00060011,
+0x71200000,
+0x00090200,
+0x00000000,
+0x40820000,
+0x0005080b,
+0x7dc97050,
+0x810efff8,
+0x71000000,
+0x00090200,
+0x48000000,
+0x0005000b,
+0x00000000,
+0x7dc97378,
+0x7dcea214,
+0x810effe8,
+0x814effec,
+0xc82efff8,
+0xc80efff0,
+0x910e0000,
+0x914e0004,
+0x2c080000,
+0x00098200,
+0xd82e0010,
+0x39600010,
+0xdc0e0008,
+0x40820000,
+0x00050825,
+0x920efff8,
+0x820a0000,
+0x00098200,
+0x80f00000,
+0x3a100004,
+0x54e815ba,
+0x54f4dd78,
+0x7c11402e,
+0x7e947214,
+0x7c0903a6,
+0x4e800420,
+0x00000000,
+0x7e8ea214,
+0x8154fff4,
+0x8174fffc,
+0x800a0000,
+0x00098200,
+0x810a0000,
+0x00098200,
+0x3a100004,
+0x0006000b,
+0x7c0b0040,
+0x55661800,
+0x000900a1,
+0x40800000,
+0x00050805,
+0x7d28302e,
+0x7c0834ae,
+0x2c090000,
+0x00098200,
+0x80f0fffc,
+0x41820000,
+0x00050804,
+0x91610024,
+0xc8210020,
+0xfc21f028,
+0x396b0001,
+0x3cd00000,
+0x00098200,
+0xd8140008,
+0x54e893ba,
+0x9174fffc,
+0x7e083214,
+0xd8340000,
+0x0006000d,
+0x80f00000,
+0x3a100004,
+0x54e815ba,
+0x54ea5d78,
+0x54ec9b78,
+0x7c11402e,
+0x54f4dd78,
+0x54eb9d78,
+0x7c0903a6,
+0x4e800420,
+0x0006000e,
+0x396b0001,
+0x48000000,
+0x0005000b,
+0x0006000f,
+0x810a0000,
+0x00098200,
+0x7d605850,
+0x812a0000,
+0x00098200,
+0x00060010,
+0x7c0b4040,
+0x55662800,
+0x000900a1,
+0x41810000,
+0x0005080d,
+0x556a1800,
+0x000900a1,
+0x7cca3050,
+0x7d49302e,
+0x7c0934ae,
+0x7cc93214,
+0x2c0a0000,
+0x00098200,
+0x80f0fffc,
+0x41820000,
+0x00050807,
+0xc8260000,
+0x00098200,
+0x3d300000,
+0x00098200,
+0x00000000,
+0xd8140008,
+0x7d6b0214,
+0x54e893ba,
+0xd8340000,
+0x396b0001,
+0x7e084a14,
+0x9174fffc,
+0x48000000,
+0x0005000d,
+0x00060011,
+0x396b0001,
+0x48000000,
+0x00050010,
+0x00000000,
+0x7e8ea214,
+0x8014ffe8,
+0x8114ffec,
+0x8134fff0,
+0x80d4fff8,
+0x2c090000,
+0x00098200,
+0x2c800000,
+0x00098200,
+0x2f060000,
+0x00098200,
+0x40860000,
+0x00050805,
+0x89080000,
+0x00098200,
+0x4c42d202,
+0x2f880000,
+0x00098200,
+0x5580007e,
+0x000900ab,
+0x4c42f202,
+0x7cd00214,
+0x40820000,
+0x00050805,
+0x9314fffc,
+0x3e060000,
+0x00098200,
+0x0006000b,
+0x80f00000,
+0x3a100004,
+0x54e815ba,
+0x54ea5d78,
+0x54ec9b78,
+0x7c11402e,
+0x54f4dd78,
+0x54eb9d78,
+0x7c0903a6,
+0x4e800420,
+0x0006000f,
+0x38000000,
+0x00098200,
+0x39000000,
+0x00098200,
+0x9810ffff,
+0x3e060000,
+0x00098200,
+0x99100003,
+0x48000000,
+0x0005000b,
+0x00000000,
+0x800efff8,
+0x7d6e5a14,
+0x7e8ea214,
+0x396b0000,
+0x00098200,
+0x7d345214,
+0x38cefff8,
+0x7d605850,
+0x288a0000,
+0x7d0b3051,
+0x41860000,
+0x00050805,
+0x3929fff0,
+0x40810000,
+0x00050802,
+0x0006000b,
+0xc80b0000,
+0x396b0008,
+0xd8140000,
+0x7c144840,
+0x7c8b3040,
+0x40800000,
+0x00050803,
+0x3a940008,
+0x41840000,
+0x0005080b,
+0x0006000c,
+0x92f40000,
+0x7c144840,
+0x3a940008,
+0x41800000,
+0x0005080c,
+0x0006000d,
+0x80f00000,
+0x3a100004,
+0x54e815ba,
+0x54ea5d78,
+0x54ec9b78,
+0x7c11402e,
+0x54f4dd78,
+0x54eb9d78,
+0x7c0903a6,
+0x4e800420,
+0x0006000f,
+0x80120000,
+0x00098200,
+0x3a600008,
+0x40810000,
+0x0005080d,
+0x7d344214,
+0x7c090040,
+0x3a680008,
+0x41810000,
+0x00050807,
+0x00060010,
+0xc80b0000,
+0x396b0008,
+0xd8140000,
+0x7c0b3040,
+0x3a940008,
+0x41800000,
+0x00050810,
+0x48000000,
+0x0005000d,
+0x00060011,
+0x7e439378,
+0x92920000,
+0x00098200,
+0x7eae5850,
+0x91d20000,
+0x00098200,
+0x7e8ea050,
+0x92010008,
+0x550400fe,
+0x000900ab,
+0x48000001,
+0x00030000,
+0x81d20000,
+0x00098200,
+0x00000000,
+0x7e8ea214,
+0x7d6eaa14,
+0x38cefff8,
+0x48000000,
+0x00050010,
+0x00000000,
+0x7d8c9a14,
+0x00000000,
+0x820efff8,
+0x7e8ea214,
+0x7d936378,
+0x0006000b,
+0x72000000,
+0x00090200,
+0x6a080000,
+0x00090200,
+0x40820000,
+0x0005089c,
+0x00060017,
+0x80f0fffc,
+0x2c0c0008,
+0x392efff8,
+0x396cfff8,
+0x54ea5d78,
+0x41820000,
+0x00050803,
+0x39000000,
+0x0006000c,
+0x38c80008,
+0x7c1444ae,
+0x7c065800,
+0x7c0945ae,
+0x41820000,
+0x00050803,
+0x39060008,
+0x7c3434ae,
+0x7c085800,
+0x7c2935ae,
+0x40820000,
+0x0005080c,
+0x0006000d,
+0x0006000f,
+0x7c0a6040,
+0x54f4dd78,
+0x41810000,
+0x00050806,
+0x7dd44850,
+0x810efffc,
+0x80f00000,
+0x3a100004,
+0x81080000,
+0x00098200,
+0x81e80000,
+0x00098200,
+0x54e815ba,
+0x54ea5d78,
+0x54ec9b78,
+0x7c11402e,
+0x54f4dd78,
+0x54eb9d78,
+0x7c0903a6,
+0x4e800420,
+0x00060010,
+0x390cfff8,
+0x398c0008,
+0x7ee9412e,
+0x48000000,
+0x0005000f,
+0x0006009c,
+0x71090000,
+0x00090200,
+0x40820000,
+0x00050818,
+0x7dc87050,
+0x820efff8,
+0x48000000,
+0x0005000b,
+0x00000000,
+0x820efff8,
+0x7e8ea214,
+0x7d936378,
+0x72000000,
+0x00090200,
+0x6a080000,
+0x00090200,
+0x40820000,
+0x0005089c,
+0x80f0fffc,
+0x392efff8,
+0x54ea5d78,
+0x00000000,
+0xc8140000,
+0xd8090000,
+0x00000000,
+0x0006000f,
+0x7c0a6040,
+0x54f4dd78,
+0x41810000,
+0x00050806,
+0x7dd44850,
+0x810efffc,
+0x80f00000,
+0x3a100004,
+0x81080000,
+0x00098200,
+0x81e80000,
+0x00098200,
+0x54e815ba,
+0x54ea5d78,
+0x54ec9b78,
+0x7c11402e,
+0x54f4dd78,
+0x54eb9d78,
+0x7c0903a6,
+0x4e800420,
+0x00060010,
+0x390cfff8,
+0x398c0008,
+0x7ee9412e,
+0x48000000,
+0x0005000f,
+0x00000000,
+0x7c810808,
+0x00000000,
+0x7c3474ee,
+0xc8740000,
+0x00098200,
+0xc8540000,
+0x00098200,
+0x80d40000,
+0x00098200,
+0xfc21182a,
+0xd8340000,
+0x00098200,
+0x00000000,
+0x7d14706e,
+0xc8340000,
+0x00098200,
+0x80d40000,
+0x00098200,
+0xc8740000,
+0x00098200,
+0x81340000,
+0x00098200,
+0xc8540000,
+0x00098200,
+0x7c08b040,
+0x7f86b040,
+0x7c89b040,
+0x4c00e202,
+0x4c002202,
+0x40800000,
+0x00050842,
+0x00000000,
+0x2d860000,
+0x00000000,
+0x558c007e,
+0x000900ab,
+0x00000000,
+0xd8340000,
+0x00098200,
+0x00000000,
+0x7d906214,
+0x00000000,
+0xfc011000,
+0x00000000,
+0x3e0c0000,
+0x00098200,
+0x00000000,
+0x418c0000,
+0x00050805,
+0x00000000,
+0x41810000,
+0x00050803,
+0x00000000,
+0x41810000,
+0x00050802,
+0x0006000b,
+0x3e0c0000,
+0x00098200,
+0x00000000,
+0x40810000,
+0x00070800,
+0x00000000,
+0x0006000c,
+0x80f00000,
+0x3a100004,
+0x54e815ba,
+0x54ea5d78,
+0x54ec9b78,
+0x7c11402e,
+0x54f4dd78,
+0x54eb9d78,
+0x7c0903a6,
+0x4e800420,
+0x0006000f,
+0x00000000,
+0x40800000,
+0x0005080c,
+0x0006000d,
+0x3e0c0000,
+0x00098200,
+0x00000000,
+0x40800000,
+0x0005080b,
+0x00000000,
+0x40800000,
+0x00070800,
+0x00000000,
+0x48000000,
+0x0005000c,
+0x00000000,
+0x7c810808,
+0x00000000,
+0x7d14706e,
+0x81340004,
+0x2c080000,
+0x00098200,
+0x41820000,
+0x00050801,
+0x00000000,
+0x7c810808,
+0x00000000,
+0x5580007e,
+0x000900ab,
+0x7e100214,
+0x3e100000,
+0x00098200,
+0x9114fff8,
+0x9134fffc,
+0x00000000,
+0x0006000b,
+0x80f00000,
+0x3a100004,
+0x54e815ba,
+0x54ea5d78,
+0x54ec9b78,
+0x7c11402e,
+0x54f4dd78,
+0x54eb9d78,
+0x7c0903a6,
+0x4e800420,
+0x00000000,
+0x7c810808,
+0x00000000,
+0x80f00000,
+0x3a100004,
+0x54e815ba,
+0x54ea5d78,
+0x54ec9b78,
+0x7c11402e,
+0x54f4dd78,
+0x54eb9d78,
+0x7c0903a6,
+0x4e800420,
+0x00000000,
+0x7c810808,
+0x00000000,
+0x5580007e,
+0x000900ab,
+0x7e100214,
+0x3e100000,
+0x00098200,
+0x80f00000,
+0x3a100004,
+0x54e815ba,
+0x54ea5d78,
+0x54ec9b78,
+0x7c11402e,
+0x54f4dd78,
+0x54eb9d78,
+0x7c0903a6,
+0x4e800420,
+0x00000000,
+0x7c810808,
+0x00000000,
+0x81320000,
+0x00098200,
+0x89100000,
+0x00098200,
+0x81f00000,
+0x00098200,
+0x7c144840,
+0x55081800,
+0x000900a1,
+0x41810000,
+0x00050820,
+0x80f00000,
+0x3a100004,
+0x0006000c,
+0x7c0b4040,
+0x40810000,
+0x00050803,
+0x00000000,
+0x7c810808,
+0x00000000,
+0x54e815ba,
+0x54ea5d78,
+0x54ec9b78,
+0x7c11402e,
+0x54f4dd78,
+0x54eb9d78,
+0x7c0903a6,
+0x4e800420,
+0x00000000,
+0x0006000d,
+0x7eee592e,
+0x396b0008,
+0x48000000,
+0x0005000c,
+0x00000000,
+0x7c810808,
+0x00000000,
+0x81320000,
+0x00098200,
+0x7d0e5a14,
+0x7c145a14,
+0x91480004,
+0x38cb0000,
+0x00098200,
+0x81f00000,
+0x00098200,
+0x7c004840,
+0x90c80000,
+0x40800000,
+0x00050820,
+0x89300000,
+0x00098200,
+0x7dd47378,
+0x7d0b4378,
+0x80f00000,
+0x3a100004,
+0x2c090000,
+0x39c80008,
+0x41820000,
+0x00050803,
+0x0006000b,
+0x7c145840,
+0x80140000,
+0x80d40004,
+0x40800000,
+0x00050804,
+0x92f40000,
+0x3a940008,
+0x0006000c,
+0x3529ffff,
+0x90080008,
+0x90c8000c,
+0x39080008,
+0x40820000,
+0x0005080b,
+0x0006000d,
+0x54e815ba,
+0x54ea5d78,
+0x54ec9b78,
+0x7c11402e,
+0x54f4dd78,
+0x54eb9d78,
+0x7c0903a6,
+0x4e800420,
+0x0006000e,
+0x38000000,
+0x00098200,
+0x48000000,
+0x0005000c,
+0x00000000,
+0x80ca0000,
+0x00098200,
+0x00000000,
+0x80d10000,
+0x00098200,
+0x00000000,
+0x7d145a14,
+0x81320000,
+0x00098200,
+0x7d6e5a14,
+0x91d20000,
+0x00098200,
+0x7c084840,
+0x91720000,
+0x00098200,
+0x38000000,
+0x00098200,
+0x7cc903a6,
+0x00000000,
+0x808a0000,
+0x00098200,
+0x00000000,
+0x7e439378,
+0x41810000,
+0x0005081f,
+0x90110000,
+0x00098200,
+0x4e800421,
+0x81120000,
+0x00098200,
+0x546c1800,
+0x000900a1,
+0x81d20000,
+0x00098200,
+0x38000000,
+0x00098200,
+0x820efff8,
+0x7e8c4050,
+0x90110000,
+0x00098200,
+0x48000000,
+0x00050016,
+0x00000000,
+0x00010000
+};
+
+enum {
+  GLOB_vm_returnp,
+  GLOB_cont_dispatch,
+  GLOB_vm_returnc,
+  GLOB_BC_RET_Z,
+  GLOB_vm_return,
+  GLOB_vm_leave_cp,
+  GLOB_vm_leave_unw,
+  GLOB_vm_unwind_c,
+  GLOB_vm_unwind_c_eh,
+  GLOB_vm_unwind_ff,
+  GLOB_vm_unwind_ff_eh,
+  GLOB_vm_growstack_c,
+  GLOB_vm_growstack_l,
+  GLOB_vm_resume,
+  GLOB_vm_pcall,
+  GLOB_vm_call,
+  GLOB_vm_call_dispatch,
+  GLOB_vmeta_call,
+  GLOB_vm_call_dispatch_f,
+  GLOB_vm_cpcall,
+  GLOB_vm_call_tail,
+  GLOB_cont_cat,
+  GLOB_BC_CAT_Z,
+  GLOB_cont_nop,
+  GLOB_vmeta_tgets1,
+  GLOB_vmeta_tgets,
+  GLOB_vmeta_tgetb,
+  GLOB_vmeta_tgetv,
+  GLOB_vmeta_tsets1,
+  GLOB_vmeta_tsets,
+  GLOB_vmeta_tsetb,
+  GLOB_vmeta_tsetv,
+  GLOB_vmeta_comp,
+  GLOB_vmeta_binop,
+  GLOB_cont_ra,
+  GLOB_cont_condt,
+  GLOB_cont_condf,
+  GLOB_vmeta_equal,
+  GLOB_vmeta_arith_vn,
+  GLOB_vmeta_arith_nv,
+  GLOB_vmeta_unm,
+  GLOB_vmeta_arith_vv,
+  GLOB_vmeta_len,
+  GLOB_BC_LEN_Z,
+  GLOB_vmeta_callt,
+  GLOB_BC_CALLT_Z,
+  GLOB_vmeta_for,
+  GLOB_ff_assert,
+  GLOB_fff_fallback,
+  GLOB_fff_res,
+  GLOB_ff_type,
+  GLOB_fff_resn,
+  GLOB_ff_getmetatable,
+  GLOB_fff_restv,
+  GLOB_ff_setmetatable,
+  GLOB_ff_rawget,
+  GLOB_ff_tonumber,
+  GLOB_ff_tostring,
+  GLOB_fff_gcstep,
+  GLOB_ff_next,
+  GLOB_ff_pairs,
+  GLOB_ff_ipairs_aux,
+  GLOB_ff_ipairs,
+  GLOB_ff_pcall,
+  GLOB_ff_xpcall,
+  GLOB_ff_coroutine_resume,
+  GLOB_ff_coroutine_wrap_aux,
+  GLOB_ff_coroutine_yield,
+  GLOB_ff_math_abs,
+  GLOB_fff_res1,
+  GLOB_ff_math_floor,
+  GLOB_ff_math_ceil,
+  GLOB_ff_math_sqrt,
+  GLOB_ff_math_log,
+  GLOB_ff_math_log10,
+  GLOB_ff_math_exp,
+  GLOB_ff_math_sin,
+  GLOB_ff_math_cos,
+  GLOB_ff_math_tan,
+  GLOB_ff_math_asin,
+  GLOB_ff_math_acos,
+  GLOB_ff_math_atan,
+  GLOB_ff_math_sinh,
+  GLOB_ff_math_cosh,
+  GLOB_ff_math_tanh,
+  GLOB_ff_math_pow,
+  GLOB_ff_math_atan2,
+  GLOB_ff_math_fmod,
+  GLOB_ff_math_deg,
+  GLOB_ff_math_rad,
+  GLOB_ff_math_ldexp,
+  GLOB_ff_math_frexp,
+  GLOB_ff_math_modf,
+  GLOB_ff_math_min,
+  GLOB_ff_math_max,
+  GLOB_ff_string_len,
+  GLOB_fff_resi,
+  GLOB_ff_string_byte,
+  GLOB_ff_string_char,
+  GLOB_fff_newstr,
+  GLOB_ff_string_sub,
+  GLOB_ff_string_rep,
+  GLOB_ff_string_reverse,
+  GLOB_ff_string_lower,
+  GLOB_ff_string_upper,
+  GLOB_ff_table_getn,
+  GLOB_ff_bit_tobit,
+  GLOB_ff_bit_band,
+  GLOB_ff_bit_bor,
+  GLOB_ff_bit_bxor,
+  GLOB_ff_bit_bswap,
+  GLOB_ff_bit_bnot,
+  GLOB_ff_bit_lshift,
+  GLOB_ff_bit_rshift,
+  GLOB_ff_bit_arshift,
+  GLOB_ff_bit_rol,
+  GLOB_ff_bit_ror,
+  GLOB_vm_record,
+  GLOB_vm_rethook,
+  GLOB_vm_inshook,
+  GLOB_cont_hook,
+  GLOB_vm_hotloop,
+  GLOB_vm_callhook,
+  GLOB_vm_hotcall,
+  GLOB_vm_exit_handler,
+  GLOB_vm_exit_interp,
+  GLOB_vm_floor,
+  GLOB_vm_ceil,
+  GLOB_vm_trunc,
+  GLOB_vm_powi,
+  GLOB_vm_foldfpm,
+  GLOB_vm_foldarith,
+  GLOB_vm_ffi_call,
+  GLOB_BC_MODVN_Z,
+  GLOB_BC_TGETS_Z,
+  GLOB_BC_TSETS_Z,
+  GLOB_BC_RETV_Z,
+  GLOB__MAX
+};
+static const char *const globnames[] = {
+  "vm_returnp",
+  "cont_dispatch",
+  "vm_returnc",
+  "BC_RET_Z",
+  "vm_return",
+  "vm_leave_cp",
+  "vm_leave_unw",
+  "vm_unwind_c",
+  "vm_unwind_c_eh",
+  "vm_unwind_ff",
+  "vm_unwind_ff_eh",
+  "vm_growstack_c",
+  "vm_growstack_l",
+  "vm_resume",
+  "vm_pcall",
+  "vm_call",
+  "vm_call_dispatch",
+  "vmeta_call",
+  "vm_call_dispatch_f",
+  "vm_cpcall",
+  "vm_call_tail",
+  "cont_cat",
+  "BC_CAT_Z",
+  "cont_nop",
+  "vmeta_tgets1",
+  "vmeta_tgets",
+  "vmeta_tgetb",
+  "vmeta_tgetv",
+  "vmeta_tsets1",
+  "vmeta_tsets",
+  "vmeta_tsetb",
+  "vmeta_tsetv",
+  "vmeta_comp",
+  "vmeta_binop",
+  "cont_ra",
+  "cont_condt",
+  "cont_condf",
+  "vmeta_equal",
+  "vmeta_arith_vn",
+  "vmeta_arith_nv",
+  "vmeta_unm",
+  "vmeta_arith_vv",
+  "vmeta_len",
+  "BC_LEN_Z",
+  "vmeta_callt",
+  "BC_CALLT_Z",
+  "vmeta_for",
+  "ff_assert",
+  "fff_fallback",
+  "fff_res",
+  "ff_type",
+  "fff_resn",
+  "ff_getmetatable",
+  "fff_restv",
+  "ff_setmetatable",
+  "ff_rawget",
+  "ff_tonumber",
+  "ff_tostring",
+  "fff_gcstep",
+  "ff_next",
+  "ff_pairs",
+  "ff_ipairs_aux",
+  "ff_ipairs",
+  "ff_pcall",
+  "ff_xpcall",
+  "ff_coroutine_resume",
+  "ff_coroutine_wrap_aux",
+  "ff_coroutine_yield",
+  "ff_math_abs",
+  "fff_res1",
+  "ff_math_floor",
+  "ff_math_ceil",
+  "ff_math_sqrt",
+  "ff_math_log",
+  "ff_math_log10",
+  "ff_math_exp",
+  "ff_math_sin",
+  "ff_math_cos",
+  "ff_math_tan",
+  "ff_math_asin",
+  "ff_math_acos",
+  "ff_math_atan",
+  "ff_math_sinh",
+  "ff_math_cosh",
+  "ff_math_tanh",
+  "ff_math_pow",
+  "ff_math_atan2",
+  "ff_math_fmod",
+  "ff_math_deg",
+  "ff_math_rad",
+  "ff_math_ldexp",
+  "ff_math_frexp",
+  "ff_math_modf",
+  "ff_math_min",
+  "ff_math_max",
+  "ff_string_len",
+  "fff_resi",
+  "ff_string_byte",
+  "ff_string_char",
+  "fff_newstr",
+  "ff_string_sub",
+  "ff_string_rep",
+  "ff_string_reverse",
+  "ff_string_lower",
+  "ff_string_upper",
+  "ff_table_getn",
+  "ff_bit_tobit",
+  "ff_bit_band",
+  "ff_bit_bor",
+  "ff_bit_bxor",
+  "ff_bit_bswap",
+  "ff_bit_bnot",
+  "ff_bit_lshift",
+  "ff_bit_rshift",
+  "ff_bit_arshift",
+  "ff_bit_rol",
+  "ff_bit_ror",
+  "vm_record",
+  "vm_rethook",
+  "vm_inshook",
+  "cont_hook",
+  "vm_hotloop",
+  "vm_callhook",
+  "vm_hotcall",
+  "vm_exit_handler",
+  "vm_exit_interp",
+  "vm_floor",
+  "vm_ceil",
+  "vm_trunc",
+  "vm_powi",
+  "vm_foldfpm",
+  "vm_foldarith",
+  "vm_ffi_call",
+  "BC_MODVN_Z",
+  "BC_TGETS_Z",
+  "BC_TSETS_Z",
+  "BC_RETV_Z",
+  (const char *)0
+};
+static const char *const extnames[] = {
+  "lj_state_growstack",
+  "lj_meta_tget",
+  "lj_meta_tset",
+  "lj_meta_comp",
+  "lj_meta_equal",
+  "lj_meta_arith",
+  "lj_meta_len",
+  "lj_meta_call",
+  "lj_meta_for",
+  "lj_tab_get",
+  "lj_str_fromnum",
+  "lj_tab_next",
+  "lj_tab_getinth",
+  "lj_ffh_coroutine_wrap_err",
+  "floor",
+  "ceil",
+  "sqrt",
+  "log",
+  "log10",
+  "exp",
+  "sin",
+  "cos",
+  "tan",
+  "asin",
+  "acos",
+  "atan",
+  "sinh",
+  "cosh",
+  "tanh",
+  "pow",
+  "atan2",
+  "fmod",
+  "ldexp",
+  "frexp",
+  "modf",
+  "lj_str_new",
+  "lj_tab_len",
+  "lj_gc_step",
+  "lj_dispatch_ins",
+  "lj_dispatch_call",
+  "trunc",
+  "lj_meta_cat",
+  "lj_gc_barrieruv",
+  "lj_func_closeuv",
+  "lj_func_newL_gc",
+  "lj_tab_new",
+  "lj_tab_dup",
+  "lj_gc_step_fixtop",
+  "lj_tab_newkey",
+  "lj_tab_reasize",
+  (const char *)0
+};
+#define Dt1(_V) (int)(ptrdiff_t)&(((lua_State *)0)_V)
+#define Dt2(_V) (int)(ptrdiff_t)&(((global_State *)0)_V)
+#define Dt3(_V) (int)(ptrdiff_t)&(((TValue *)0)_V)
+#define Dt4(_V) (int)(ptrdiff_t)&(((GCobj *)0)_V)
+#define Dt5(_V) (int)(ptrdiff_t)&(((GCstr *)0)_V)
+#define Dt6(_V) (int)(ptrdiff_t)&(((GCtab *)0)_V)
+#define Dt7(_V) (int)(ptrdiff_t)&(((GCfuncL *)0)_V)
+#define Dt8(_V) (int)(ptrdiff_t)&(((GCfuncC *)0)_V)
+#define Dt9(_V) (int)(ptrdiff_t)&(((GCproto *)0)_V)
+#define DtA(_V) (int)(ptrdiff_t)&(((GCupval *)0)_V)
+#define DtB(_V) (int)(ptrdiff_t)&(((Node *)0)_V)
+#define DtC(_V) (int)(ptrdiff_t)&(((int *)0)_V)
+#define DtD(_V) (int)(ptrdiff_t)&(((GCtrace *)0)_V)
+#define DISPATCH_GL(field)     (GG_DISP2G + (int)offsetof(global_State, field))
+#define DISPATCH_J(field)      (GG_DISP2J + (int)offsetof(jit_State, field))
+#define PC2PROTO(field)  ((int)offsetof(GCproto, field)-(int)sizeof(GCproto))
+
+/* Generate subroutines used by opcodes and other parts of the VM. */
+/* The .code_sub section should be last to help static branch prediction. */
+static void build_subroutines(BuildCtx *ctx)
+{
+  dasm_put(Dst, 0);
+  dasm_put(Dst, 1, FRAME_P, LJ_TTRUE, FRAME_TYPE, FRAME_C, ~LJ_VMST_C, Dt1(->base), DISPATCH_GL(vmstate), 31-3, Dt1(->top));
+  dasm_put(Dst, 55, Dt1(->cframe), 184+(14-14)*4, 40+(14-14)*8, 184+(15-14)*4, 40+(15-14)*8, 184+(16-14)*4, 40+(16-14)*8, 184+(17-14)*4, 40+(17-14)*8, 184+(18-14)*4, 40+(18-14)*8, 184+(19-14)*4, 40+(19-14)*8, 184+(20-14)*4, 40+(20-14)*8, 184+(21-14)*4, 40+(21-14)*8, 184+(22-14)*4, 40+(22-14)*8, 184+(23-14)*4, 40+(23-14)*8);
+  dasm_put(Dst, 103, 184+(24-14)*4, 40+(24-14)*8, 184+(25-14)*4, 40+(25-14)*8, 184+(26-14)*4, 40+(26-14)*8, 184+(27-14)*4, 40+(27-14)*8, 184+(28-14)*4, 40+(28-14)*8, 184+(29-14)*4, 40+(29-14)*8, 184+(30-14)*4, 40+(30-14)*8, 184+(31-14)*4, 40+(31-14)*8, Dt1(->maxstack));
+  dasm_put(Dst, 152, Dt1(->top), 31-3, Dt1(->top), ~LJ_VMST_C, Dt1(->glref), Dt2(->vmstate), LJ_TISNUM, Dt1(->base), Dt1(->glref), LJ_TFALSE, LJ_TNIL, ~LJ_VMST_INTERP, GG_G2DISP);
+  dasm_put(Dst, 215, DISPATCH_GL(vmstate), LUA_MINSTACK, Dt1(->base), Dt1(->top), 32-3, Dt1(->base), Dt1(->top), Dt7(->pc), 184+(14-14)*4, 40+(14-14)*8, 184+(15-14)*4, 40+(15-14)*8, 184+(16-14)*4, 40+(16-14)*8, 184+(17-14)*4);
+  dasm_put(Dst, 275, 40+(17-14)*8, 184+(18-14)*4, 40+(18-14)*8, 184+(19-14)*4, 40+(19-14)*8, 184+(20-14)*4, 40+(20-14)*8, 184+(21-14)*4, 40+(21-14)*8, 184+(22-14)*4, 40+(22-14)*8, 184+(23-14)*4, 40+(23-14)*8, 184+(24-14)*4, 40+(24-14)*8, 184+(25-14)*4, 40+(25-14)*8, 184+(26-14)*4, 40+(26-14)*8, 184+(27-14)*4, 40+(27-14)*8, 184+(28-14)*4);
+  dasm_put(Dst, 322, 40+(28-14)*8, 184+(29-14)*4, 40+(29-14)*8, 184+(30-14)*4, 40+(30-14)*8, 184+(31-14)*4, 40+(31-14)*8, Dt1(->glref), Dt1(->status), FRAME_CP, CFRAME_RESUME, GG_G2DISP, Dt1(->cframe), Dt1(->base), LJ_TISNUM, Dt1(->top), Dt1(->status), FRAME_TYPE, ~LJ_VMST_INTERP, LJ_TNIL, DISPATCH_GL(vmstate));
+  dasm_put(Dst, 389, 184+(14-14)*4, 40+(14-14)*8, 184+(15-14)*4, 40+(15-14)*8, 184+(16-14)*4, 40+(16-14)*8, 184+(17-14)*4, 40+(17-14)*8, 184+(18-14)*4, 40+(18-14)*8, 184+(19-14)*4, 40+(19-14)*8, 184+(20-14)*4, 40+(20-14)*8, 184+(21-14)*4, 40+(21-14)*8, 184+(22-14)*4, 40+(22-14)*8, 184+(23-14)*4);
+  dasm_put(Dst, 435, 40+(23-14)*8, 184+(24-14)*4, 40+(24-14)*8, 184+(25-14)*4, 40+(25-14)*8, 184+(26-14)*4, 40+(26-14)*8, 184+(27-14)*4, 40+(27-14)*8, 184+(28-14)*4, 40+(28-14)*8, 184+(29-14)*4, 40+(29-14)*8, 184+(30-14)*4, 40+(30-14)*8, 184+(31-14)*4, 40+(31-14)*8, FRAME_CP, 184+(14-14)*4, 40+(14-14)*8);
+  dasm_put(Dst, 482, 184+(15-14)*4, 40+(15-14)*8, 184+(16-14)*4, 40+(16-14)*8, 184+(17-14)*4, 40+(17-14)*8, 184+(18-14)*4, 40+(18-14)*8, 184+(19-14)*4, 40+(19-14)*8, 184+(20-14)*4, 40+(20-14)*8, 184+(21-14)*4, 40+(21-14)*8, 184+(22-14)*4, 40+(22-14)*8, 184+(23-14)*4, 40+(23-14)*8, 184+(24-14)*4, 40+(24-14)*8, 184+(25-14)*4, 40+(25-14)*8);
+  dasm_put(Dst, 528, 184+(26-14)*4, 40+(26-14)*8, 184+(27-14)*4, 40+(27-14)*8, 184+(28-14)*4, 40+(28-14)*8, 184+(29-14)*4, 40+(29-14)*8, 184+(30-14)*4, 40+(30-14)*8, 184+(31-14)*4, 40+(31-14)*8, FRAME_C, Dt1(->cframe), Dt1(->cframe), Dt1(->glref), GG_G2DISP, Dt1(->base), LJ_TISNUM, Dt1(->top));
+  dasm_put(Dst, 578, ~LJ_VMST_INTERP, LJ_TNIL, DISPATCH_GL(vmstate), LJ_TFUNC, Dt7(->pc), 184+(14-14)*4, 40+(14-14)*8, 184+(15-14)*4, 40+(15-14)*8, 184+(16-14)*4, 40+(16-14)*8, 184+(17-14)*4, 40+(17-14)*8, 184+(18-14)*4, 40+(18-14)*8, 184+(19-14)*4, 40+(19-14)*8, 184+(20-14)*4);
+  dasm_put(Dst, 645, 40+(20-14)*8, 184+(21-14)*4, 40+(21-14)*8, 184+(22-14)*4, 40+(22-14)*8, 184+(23-14)*4, 40+(23-14)*8, 184+(24-14)*4, 40+(24-14)*8, 184+(25-14)*4, 40+(25-14)*8, 184+(26-14)*4, 40+(26-14)*8, 184+(27-14)*4, 40+(27-14)*8, 184+(28-14)*4, 40+(28-14)*8, 184+(29-14)*4, 40+(29-14)*8, 184+(30-14)*4, 40+(30-14)*8, 184+(31-14)*4);
+  dasm_put(Dst, 691, 40+(31-14)*8, Dt1(->stack), Dt1(->top), Dt1(->cframe), Dt1(->cframe), Dt1(->glref), FRAME_CP, GG_G2DISP, Dt7(->pc), PC2PROTO(k), Dt1(->base), DISPATCH_GL(tmptv));
+  dasm_put(Dst, 765, LJ_TSTR, DISPATCH_GL(tmptv), LJ_TTAB, DISPATCH_GL(tmptv2), LJ_TSTR, DISPATCH_GL(tmptv), Dt1(->base), FRAME_CONT, Dt1(->top), DISPATCH_GL(tmptv));
+  dasm_put(Dst, 841, LJ_TSTR, DISPATCH_GL(tmptv), LJ_TTAB, DISPATCH_GL(tmptv2), LJ_TSTR, DISPATCH_GL(tmptv), Dt1(->base), FRAME_CONT, Dt1(->top), Dt1(->base));
+  dasm_put(Dst, 923, -(BCBIAS_J*4 >> 16), LJ_TTRUE, LJ_TTRUE, Dt1(->base));
+  dasm_put(Dst, 994, Dt1(->base), FRAME_CONT);
+#ifdef LUAJIT_ENABLE_LUA52COMPAT
+  dasm_put(Dst, 1025);
+#endif
+  dasm_put(Dst, 1027, Dt1(->base));
+#ifdef LUAJIT_ENABLE_LUA52COMPAT
+  dasm_put(Dst, 1035);
+#else
+  dasm_put(Dst, 1042);
+#endif
+  dasm_put(Dst, 1045, Dt1(->base), Dt7(->pc), Dt1(->base), Dt1(->base));
+#if LJ_HASJIT
+  dasm_put(Dst, 1093);
+#endif
+  dasm_put(Dst, 1095);
+#if LJ_HASJIT
+  dasm_put(Dst, 1097, BC_JFORI);
+#endif
+  dasm_put(Dst, 1100);
+#if LJ_HASJIT
+  dasm_put(Dst, 1102, BC_JFORI);
+#endif
+  dasm_put(Dst, 1105, BC_FORI, LJ_TFALSE, ~LJ_TISNUM+1, 31-3, Dt8(->upvalue), LJ_TTAB, Dt6(->metatable));
+  dasm_put(Dst, 1168, LJ_TNIL, DISPATCH_GL(gcroot[GCROOT_MMNAME+MM_metatable]), Dt6(->hmask), LJ_TTAB, Dt5(->hash), Dt6(->node), 31-5, 31-3, DtB(->key), 4+offsetof(Node, key), DtB(->val), 4+offsetof(Node, val), LJ_TSTR, DtB(->next));
+  dasm_put(Dst, 1216, LJ_TNIL, LJ_TUDATA, ~LJ_TISNUM+1, 31-2, DISPATCH_GL(gcroot[GCROOT_BASEMT]), LJ_TTAB, Dt6(->metatable), LJ_TTAB, Dt6(->marked), LJ_GC_BLACK, Dt6(->metatable));
+  dasm_put(Dst, 1271, DISPATCH_GL(gc.grayagain), DISPATCH_GL(gc.grayagain), Dt6(->marked), Dt6(->gclist), LJ_TTAB, LJ_TSTR, DISPATCH_GL(gcroot[GCROOT_BASEMT_NUM]), Dt1(->base));
+  dasm_put(Dst, 1331, DISPATCH_GL(gc.total), DISPATCH_GL(gc.threshold), LJ_TSTR, LJ_TTAB, Dt1(->base), Dt1(->top), LJ_TNIL, (2+1)*8, LJ_TTAB);
+#ifdef LUAJIT_ENABLE_LUA52COMPAT
+  dasm_put(Dst, 1393, Dt6(->metatable), Dt8(->upvalue[0]));
+#else
+  dasm_put(Dst, 1402, Dt8(->upvalue[0]));
+#endif
+  dasm_put(Dst, 1406, (3+1)*8, LJ_TTAB, Dt6(->asize), Dt6(->array), 31-3, LJ_TNIL, (0+1)*8, (2+1)*8, Dt6(->hmask), (0+1)*8);
+  dasm_put(Dst, 1474, (0+1)*8, LJ_TTAB);
+#ifdef LUAJIT_ENABLE_LUA52COMPAT
+  dasm_put(Dst, 1495, Dt6(->metatable), Dt8(->upvalue[0]));
+#else
+  dasm_put(Dst, 1504, Dt8(->upvalue[0]));
+#endif
+  dasm_put(Dst, 1508, (3+1)*8, DISPATCH_GL(hookmask), 32-HOOK_ACTIVE_SHIFT, 8+FRAME_PCALL, DISPATCH_GL(hookmask), LJ_TFUNC, 32-HOOK_ACTIVE_SHIFT, 16+FRAME_PCALL, LJ_TTHREAD, Dt1(->status), Dt1(->cframe));
+  dasm_put(Dst, 1570, Dt1(->top), LUA_YIELD, Dt1(->base), Dt1(->maxstack), Dt1(->base), Dt1(->top), Dt1(->top), Dt1(->base), LUA_YIELD, Dt1(->top), ~LJ_VMST_INTERP, Dt1(->base), DISPATCH_GL(vmstate));
+  dasm_put(Dst, 1632, Dt1(->maxstack), Dt1(->top), FRAME_TYPE, LJ_TTRUE, FRAME_TYPE, LJ_TFALSE, Dt1(->top), (2+1)*8, 32-3);
+  dasm_put(Dst, 1695, Dt8(->upvalue[0].gcr), Dt1(->status), Dt1(->cframe), Dt1(->top), LUA_YIELD, Dt1(->base), Dt1(->maxstack), Dt1(->base), Dt1(->top), Dt1(->top), Dt1(->base), LUA_YIELD, Dt1(->top), ~LJ_VMST_INTERP);
+  dasm_put(Dst, 1754, Dt1(->base), DISPATCH_GL(vmstate), Dt1(->maxstack), Dt1(->top), FRAME_TYPE, 32-3, Dt1(->cframe));
+  dasm_put(Dst, 1811, Dt1(->base), CFRAME_RESUME, Dt1(->top), LUA_YIELD, Dt1(->cframe), Dt1(->status), (1+1)*8, FRAME_TYPE);
+  dasm_put(Dst, 1878);
+  dasm_put(Dst, 1939);
+  dasm_put(Dst, 1997);
+  dasm_put(Dst, 2058);
+  dasm_put(Dst, 2123, Dt8(->upvalue[0]), DISPATCH_GL(tmptv), DISPATCH_GL(tmptv), (2+1)*8);
+  dasm_put(Dst, 2191, (2+1)*8);
+  dasm_put(Dst, 2263, LJ_TSTR, Dt5(->len), LJ_TSTR, Dt5(->len), Dt5([1]), 31-3, DISPATCH_GL(gc.total), DISPATCH_GL(gc.threshold), Dt1(->base));
+  dasm_put(Dst, 2332, Dt1(->base), LJ_TSTR, DISPATCH_GL(gc.total), DISPATCH_GL(gc.threshold), LJ_TSTR, Dt5(->len), sizeof(GCstr)-1);
+  dasm_put(Dst, 2401, DISPATCH_GL(gc.total), DISPATCH_GL(gc.threshold), LJ_TSTR, Dt5(->len), DISPATCH_GL(tmpbuf.sz), Dt5([1]), DISPATCH_GL(tmpbuf.buf));
+  dasm_put(Dst, 2471, DISPATCH_GL(strempty), LJ_TSTR, DISPATCH_GL(gc.total), DISPATCH_GL(gc.threshold), LJ_TSTR, DISPATCH_GL(tmpbuf.sz), Dt5(->len), sizeof(GCstr), DISPATCH_GL(tmpbuf.buf), DISPATCH_GL(gc.total), DISPATCH_GL(gc.threshold));
+  dasm_put(Dst, 2526, LJ_TSTR, DISPATCH_GL(tmpbuf.sz), Dt5(->len), sizeof(GCstr), DISPATCH_GL(tmpbuf.buf), DISPATCH_GL(gc.total), DISPATCH_GL(gc.threshold), LJ_TSTR, DISPATCH_GL(tmpbuf.sz), Dt5(->len), sizeof(GCstr), DISPATCH_GL(tmpbuf.buf));
+  dasm_put(Dst, 2588, LJ_TTAB);
+  dasm_put(Dst, 2668);
+  dasm_put(Dst, 2760);
+  dasm_put(Dst, 2863, Dt8(->f), 8*LUA_MINSTACK, Dt1(->maxstack), Dt1(->base), Dt1(->top), Dt1(->base), 31-3, Dt1(->top), Dt7(->pc), FRAME_TYPE);
+  dasm_put(Dst, 2941, LUA_MINSTACK, Dt1(->base), Dt1(->base), Dt1(->top), Dt1(->base), Dt1(->top));
+#if LJ_HASJIT
+  dasm_put(Dst, 2975);
+#endif
+  dasm_put(Dst, 2977, DISPATCH_GL(hookmask), HOOK_ACTIVE, GG_DISP2STATIC, DISPATCH_GL(hookmask), DISPATCH_GL(hookcount), HOOK_ACTIVE, 31-LUA_HOOKLINE, DISPATCH_GL(hookcount), Dt1(->base), Dt1(->base));
+  dasm_put(Dst, 3024, GG_DISP2STATIC);
+#if LJ_HASJIT
+  dasm_put(Dst, 3042);
+#endif
+  dasm_put(Dst, 3044);
+#if LJ_HASJIT
+  dasm_put(Dst, 3047);
+#endif
+  dasm_put(Dst, 3050);
+#if LJ_HASJIT
+  dasm_put(Dst, 3052);
+#endif
+  dasm_put(Dst, 3055, Dt1(->base), Dt1(->top), Dt1(->base), Dt1(->top));
+#if LJ_HASJIT
+  dasm_put(Dst, 3077);
+#endif
+  dasm_put(Dst, 3079);
+#if LJ_HASJIT
+  dasm_put(Dst, 3081);
+#endif
+  dasm_put(Dst, 3083);
+#if LJ_HASJIT
+  dasm_put(Dst, 3091);
+#endif
+  dasm_put(Dst, 3094);
+#if LJ_HASJIT
+  dasm_put(Dst, 3096);
+#endif
+  dasm_put(Dst, 3098);
+#if LJ_HASJIT
+  dasm_put(Dst, 3100);
+#endif
+  dasm_put(Dst, 3102);
+#if LJ_HASFFI
+  dasm_put(Dst, 3166);
+#endif
+}
+
+/* Generate the code for a single instruction. */
+static void build_ins(BuildCtx *ctx, BCOp op, int defop)
+{
+  int vk = 0;
+  dasm_put(Dst, 3168, defop);
+
+  switch (op) {
+
+  /* -- Comparison ops ---------------------------------------------------- */
+
+  /* Remember: all ops branch for a true comparison, fall through otherwise. */
+
+  case BC_ISLT: case BC_ISGE: case BC_ISLE: case BC_ISGT:
+    dasm_put(Dst, 3170, -(BCBIAS_J*4 >> 16));
+    if (op == BC_ISLT) {
+      dasm_put(Dst, 3187);
+    } else if (op == BC_ISGE) {
+      dasm_put(Dst, 3190);
+    } else if (op == BC_ISLE) {
+      dasm_put(Dst, 3193);
+    } else {
+      dasm_put(Dst, 3197);
+    }
+    dasm_put(Dst, 3201);
+    break;
+
+  case BC_ISEQV: case BC_ISNEV:
+    vk = op == BC_ISEQV;
+    dasm_put(Dst, 3214, -(BCBIAS_J*4 >> 16));
+    if (vk) {
+      dasm_put(Dst, 3231);
+    } else {
+      dasm_put(Dst, 3235);
+    }
+    dasm_put(Dst, 3239, ~LJ_TISPRI, ~LJ_TISTABUD);
+    if (vk) {
+      dasm_put(Dst, 3267);
+    } else {
+      dasm_put(Dst, 3272);
+    }
+    dasm_put(Dst, 3277, Dt6(->metatable), 1-vk, Dt6(->nomm), 1<<MM_eq);
+    break;
+
+  case BC_ISEQS: case BC_ISNES:
+    vk = op == BC_ISEQS;
+    dasm_put(Dst, 3298, 32-1, LJ_TSTR, -(BCBIAS_J*4 >> 16));
+    if (vk) {
+      dasm_put(Dst, 3316);
+    } else {
+      dasm_put(Dst, 3318);
+    }
+    dasm_put(Dst, 3320);
+    break;
+
+  case BC_ISEQN: case BC_ISNEN:
+    vk = op == BC_ISEQN;
+    dasm_put(Dst, 3332, -(BCBIAS_J*4 >> 16));
+    if (vk) {
+      dasm_put(Dst, 3345);
+    } else {
+      dasm_put(Dst, 3350);
+    }
+    dasm_put(Dst, 3356);
+    if (!vk) {
+      dasm_put(Dst, 3367, -(BCBIAS_J*4 >> 16));
+    }
+    break;
+
+  case BC_ISEQP: case BC_ISNEP:
+    vk = op == BC_ISEQP;
+    dasm_put(Dst, 3374, 32-3, -(BCBIAS_J*4 >> 16));
+    if (vk) {
+      dasm_put(Dst, 3387);
+    } else {
+      dasm_put(Dst, 3389);
+    }
+    dasm_put(Dst, 3391);
+    break;
+
+  /* -- Unary test and copy ops ------------------------------------------- */
+
+  case BC_ISTC: case BC_ISFC: case BC_IST: case BC_ISF:
+    dasm_put(Dst, 3403);
+    if (op == BC_IST || op == BC_ISF) {
+      dasm_put(Dst, 3407, LJ_TTRUE, -(BCBIAS_J*4 >> 16));
+      if (op == BC_IST) {
+       dasm_put(Dst, 3414);
+      } else {
+       dasm_put(Dst, 3416);
+      }
+      dasm_put(Dst, 3418);
+    } else {
+      dasm_put(Dst, 3420, LJ_TFALSE);
+      if (op == BC_ISTC) {
+       dasm_put(Dst, 3425);
+      } else {
+       dasm_put(Dst, 3428);
+      }
+      dasm_put(Dst, 3431, -(BCBIAS_J*4 >> 16));
+    }
+    dasm_put(Dst, 3438);
+    break;
+
+  /* -- Unary ops --------------------------------------------------------- */
+
+  case BC_MOV:
+    dasm_put(Dst, 3449);
+    break;
+  case BC_NOT:
+    dasm_put(Dst, 3462, LJ_TTRUE);
+    break;
+  case BC_UNM:
+    dasm_put(Dst, 3478);
+    break;
+  case BC_LEN:
+    dasm_put(Dst, 3497, LJ_TSTR, Dt5(->len), LJ_TTAB);
+#ifdef LUAJIT_ENABLE_LUA52COMPAT
+    dasm_put(Dst, 3526, Dt6(->metatable));
+#endif
+    dasm_put(Dst, 3533);
+#ifdef LUAJIT_ENABLE_LUA52COMPAT
+    dasm_put(Dst, 3539, Dt6(->nomm), 1<<MM_len);
+#endif
+    break;
+
+  /* -- Binary ops -------------------------------------------------------- */
+
+
+  case BC_ADDVN: case BC_ADDNV: case BC_ADDVV:
+    vk = ((int)op - BC_ADDVN) / (BC_ADDNV-BC_ADDVN);
+    switch (vk) {
+    case 0:
+    dasm_put(Dst, 3549);
+      break;
+    case 1:
+    dasm_put(Dst, 3556);
+      break;
+    default:
+    dasm_put(Dst, 3563);
+      break;
+    }
+    dasm_put(Dst, 3573);
+    break;
+  case BC_SUBVN: case BC_SUBNV: case BC_SUBVV:
+    vk = ((int)op - BC_ADDVN) / (BC_ADDNV-BC_ADDVN);
+    switch (vk) {
+    case 0:
+    dasm_put(Dst, 3586);
+      break;
+    case 1:
+    dasm_put(Dst, 3593);
+      break;
+    default:
+    dasm_put(Dst, 3600);
+      break;
+    }
+    dasm_put(Dst, 3610);
+    break;
+  case BC_MULVN: case BC_MULNV: case BC_MULVV:
+    vk = ((int)op - BC_ADDVN) / (BC_ADDNV-BC_ADDVN);
+    switch (vk) {
+    case 0:
+    dasm_put(Dst, 3623);
+      break;
+    case 1:
+    dasm_put(Dst, 3630);
+      break;
+    default:
+    dasm_put(Dst, 3637);
+      break;
+    }
+    dasm_put(Dst, 3647);
+    break;
+  case BC_DIVVN: case BC_DIVNV: case BC_DIVVV:
+    vk = ((int)op - BC_ADDVN) / (BC_ADDNV-BC_ADDVN);
+    switch (vk) {
+    case 0:
+    dasm_put(Dst, 3660);
+      break;
+    case 1:
+    dasm_put(Dst, 3667);
+      break;
+    default:
+    dasm_put(Dst, 3674);
+      break;
+    }
+    dasm_put(Dst, 3684);
+    break;
+  case BC_MODVN:
+    vk = ((int)op - BC_ADDVN) / (BC_ADDNV-BC_ADDVN);
+    switch (vk) {
+    case 0:
+    dasm_put(Dst, 3697);
+      break;
+    case 1:
+    dasm_put(Dst, 3704);
+      break;
+    default:
+    dasm_put(Dst, 3711);
+      break;
+    }
+    dasm_put(Dst, 3721);
+    break;
+  case BC_MODNV: case BC_MODVV:
+    vk = ((int)op - BC_ADDVN) / (BC_ADDNV-BC_ADDVN);
+    switch (vk) {
+    case 0:
+    dasm_put(Dst, 3739);
+      break;
+    case 1:
+    dasm_put(Dst, 3746);
+      break;
+    default:
+    dasm_put(Dst, 3753);
+      break;
+    }
+    dasm_put(Dst, 3763);
+    break;
+  case BC_POW:
+    dasm_put(Dst, 3766);
+    break;
+
+  case BC_CAT:
+    dasm_put(Dst, 3789, Dt1(->base), 32-3, Dt1(->base));
+    break;
+
+  /* -- Constant ops ------------------------------------------------------ */
+
+  case BC_KSTR:
+    dasm_put(Dst, 3819, 32-1, LJ_TSTR);
+    break;
+  case BC_KCDATA:
+#if LJ_HASFFI
+    dasm_put(Dst, 3838, 32-1, LJ_TCDATA);
+#endif
+    break;
+  case BC_KSHORT:
+    dasm_put(Dst, 3857, 31-13);
+    break;
+  case BC_KNUM:
+    dasm_put(Dst, 3876);
+    break;
+  case BC_KPRI:
+    dasm_put(Dst, 3889, 32-3);
+    break;
+  case BC_KNIL:
+    dasm_put(Dst, 3904);
+    break;
+
+  /* -- Upvalue and function ops ------------------------------------------ */
+
+  case BC_UGET:
+    dasm_put(Dst, 3923, 32-1, offsetof(GCfuncL, uvptr), DtA(->v));
+    break;
+  case BC_USETV:
+    dasm_put(Dst, 3944, 32-1, offsetof(GCfuncL, uvptr), DtA(->marked), DtA(->v), LJ_GC_BLACK, DtA(->closed), -(LJ_TISNUM+1), LJ_TISGCV - (LJ_TISNUM+1), Dt4(->gch.marked), LJ_GC_WHITES, GG_DISP2G);
+    break;
+  case BC_USETS:
+    dasm_put(Dst, 3997, 32-1, 32-1, offsetof(GCfuncL, uvptr), DtA(->marked), DtA(->v), LJ_GC_BLACK, Dt5(->marked), DtA(->closed), LJ_TSTR, LJ_GC_WHITES, GG_DISP2G);
+    break;
+  case BC_USETN:
+    dasm_put(Dst, 4048, 32-1, offsetof(GCfuncL, uvptr), DtA(->v));
+    break;
+  case BC_USETP:
+    dasm_put(Dst, 4069, 32-1, offsetof(GCfuncL, uvptr), 32-3, DtA(->v));
+    break;
+
+  case BC_UCLO:
+    dasm_put(Dst, 4092, Dt1(->openupval), 32-1, -(BCBIAS_J*4 >> 16), Dt1(->base), Dt1(->base));
+    break;
+
+  case BC_FNEW:
+    dasm_put(Dst, 4122, 32-1, Dt1(->base), Dt1(->base), LJ_TFUNC);
+    break;
+
+  /* -- Table ops --------------------------------------------------------- */
+
+  case BC_TNEW:
+  case BC_TDUP:
+    dasm_put(Dst, 4150, DISPATCH_GL(gc.total), DISPATCH_GL(gc.threshold), Dt1(->base));
+    if (op == BC_TNEW) {
+      dasm_put(Dst, 4163);
+    } else {
+      dasm_put(Dst, 4172, 32-1);
+    }
+    dasm_put(Dst, 4179, Dt1(->base), LJ_TTAB);
+    if (op == BC_TNEW) {
+      dasm_put(Dst, 4196);
+    }
+    dasm_put(Dst, 4201);
+    break;
+
+  case BC_GGET:
+  case BC_GSET:
+    dasm_put(Dst, 4210, 32-1, Dt7(->env));
+    if (op == BC_GGET) {
+      dasm_put(Dst, 4218);
+    } else {
+      dasm_put(Dst, 4221);
+    }
+    break;
+
+  case BC_TGETV:
+    dasm_put(Dst, 4224, LJ_TTAB, Dt6(->asize), Dt6(->array), 31-3, LJ_TNIL, Dt6(->metatable), Dt6(->nomm), 1<<MM_index, LJ_TSTR);
+    break;
+  case BC_TGETS:
+    dasm_put(Dst, 4292, 32-1, LJ_TTAB, Dt6(->hmask), Dt5(->hash), Dt6(->node), 31-5, 31-3, DtB(->key), 4+offsetof(Node, key), DtB(->val), 4+offsetof(Node, val), LJ_TSTR, LJ_TNIL, DtB(->next));
+    dasm_put(Dst, 4353, LJ_TNIL, Dt6(->metatable), Dt6(->nomm), 1<<MM_index);
+    break;
+  case BC_TGETB:
+    dasm_put(Dst, 4373, 32-3, LJ_TTAB, Dt6(->asize), Dt6(->array), LJ_TNIL, Dt6(->metatable), Dt6(->nomm), 1<<MM_index);
+    break;
+
+  case BC_TSETV:
+    dasm_put(Dst, 4421, LJ_TTAB, Dt6(->asize), Dt6(->array), 31-3, Dt6(->marked), LJ_TNIL, LJ_GC_BLACK, Dt6(->metatable), Dt6(->nomm), 1<<MM_newindex);
+    dasm_put(Dst, 4489, LJ_TSTR, DISPATCH_GL(gc.grayagain), DISPATCH_GL(gc.grayagain), Dt6(->marked), Dt6(->gclist));
+    break;
+    dasm_put(Dst, 4509, LJ_TSTR, LJ_TNIL);
+  case BC_TSETS:
+    dasm_put(Dst, 4535, 32-1, LJ_TTAB, Dt6(->hmask), Dt5(->hash), Dt6(->node), Dt6(->nomm), 31-5, 31-3, Dt6(->marked), DtB(->key), 4+offsetof(Node, key), DtB(->val), 4+offsetof(Node, val), LJ_TSTR, LJ_TNIL);
+    dasm_put(Dst, 4586, LJ_GC_BLACK, DtB(->val), Dt6(->metatable), Dt6(->nomm), 1<<MM_newindex, DtB(->next), Dt6(->metatable), DISPATCH_GL(tmptv), Dt1(->base), Dt6(->nomm), 1<<MM_newindex);
+    dasm_put(Dst, 4642, LJ_TSTR, Dt1(->base), DISPATCH_GL(gc.grayagain), DISPATCH_GL(gc.grayagain), Dt6(->marked), Dt6(->gclist));
+    break;
+  case BC_TSETB:
+    dasm_put(Dst, 4667, 32-3, LJ_TTAB, Dt6(->asize), Dt6(->array), Dt6(->marked), LJ_TNIL, LJ_GC_BLACK, Dt6(->metatable), Dt6(->nomm), 1<<MM_newindex, DISPATCH_GL(gc.grayagain));
+    dasm_put(Dst, 4725, DISPATCH_GL(gc.grayagain), Dt6(->marked), Dt6(->gclist));
+    break;
+
+  case BC_TSETM:
+    dasm_put(Dst, 4735, 32-3, Dt6(->asize), 31-3, Dt6(->marked), Dt6(->array), LJ_GC_BLACK, Dt1(->base), DISPATCH_GL(gc.grayagain), DISPATCH_GL(gc.grayagain), Dt6(->marked), Dt6(->gclist));
+    dasm_put(Dst, 4804);
+    break;
+
+  /* -- Calls and vararg handling ----------------------------------------- */
+
+  case BC_CALLM:
+    dasm_put(Dst, 4807);
+    break;
+  case BC_CALL:
+    dasm_put(Dst, 4809, LJ_TFUNC, Dt7(->pc));
+    break;
+
+  case BC_CALLMT:
+    dasm_put(Dst, 4830);
+    break;
+  case BC_CALLT:
+    dasm_put(Dst, 4832, LJ_TFUNC, FRAME_TYPE, Dt7(->ffid), FRAME_VARG, Dt7(->pc), -4-8, Dt7(->pc), PC2PROTO(k), FRAME_TYPEP);
+    dasm_put(Dst, 4896, FRAME_TYPE);
+    break;
+
+  case BC_ITERC:
+    dasm_put(Dst, 4905, LJ_TFUNC, Dt7(->pc));
+    break;
+
+  case BC_ITERN:
+#if LJ_HASJIT
+#endif
+    dasm_put(Dst, 4932, Dt6(->asize), Dt6(->array), 31-3, LJ_TNIL, -(BCBIAS_J*4 >> 16), Dt6(->hmask), Dt6(->node), 31-5, 31-3, LJ_TNIL, DtB(->key), -(BCBIAS_J*4 >> 16));
+    dasm_put(Dst, 5007);
+    break;
+
+  case BC_ISNEXT:
+    dasm_put(Dst, 5021, LJ_TTAB, LJ_TFUNC, LJ_TNIL, Dt8(->ffid), FF_next_N, 32-1, -(BCBIAS_J*4 >> 16), BC_JMP, BC_ITERC, -(BCBIAS_J*4 >> 16));
+    break;
+
+  case BC_VARG:
+    dasm_put(Dst, 5071, FRAME_VARG, Dt1(->maxstack), Dt1(->top), Dt1(->base), 32-3, Dt1(->base));
+    dasm_put(Dst, 5151);
+    break;
+
+  /* -- Returns ----------------------------------------------------------- */
+
+  case BC_RETM:
+    dasm_put(Dst, 5157);
+    break;
+
+  case BC_RET:
+    dasm_put(Dst, 5159, FRAME_TYPE, FRAME_VARG, Dt7(->pc), PC2PROTO(k), FRAME_TYPEP);
+    break;
+
+  case BC_RET0: case BC_RET1:
+    dasm_put(Dst, 5229, FRAME_TYPE, FRAME_VARG);
+    if (op == BC_RET1) {
+      dasm_put(Dst, 5242);
+    }
+    dasm_put(Dst, 5245, Dt7(->pc), PC2PROTO(k));
+    break;
+
+  /* -- Loops and branches ------------------------------------------------ */
+
+  case BC_FORL:
+#if LJ_HASJIT
+    dasm_put(Dst, 5273);
+#endif
+    break;
+
+  case BC_JFORI:
+  case BC_JFORL:
+#if !LJ_HASJIT
+    break;
+#endif
+  case BC_FORI:
+  case BC_IFORL:
+    vk = (op == BC_IFORL || op == BC_JFORL);
+    if (vk) {
+      dasm_put(Dst, 5275, FORL_STEP*8, FORL_STOP*8, FORL_STEP*8, FORL_IDX*8);
+    } else {
+      dasm_put(Dst, 5286, FORL_IDX*8, FORL_STEP*8, FORL_STEP*8, FORL_STOP*8, FORL_STOP*8);
+    }
+    dasm_put(Dst, 5305);
+    if (op != BC_JFORL) {
+      dasm_put(Dst, 5307, 32-1);
+    }
+    dasm_put(Dst, 5310, FORL_EXT*8);
+    if (op != BC_JFORL) {
+      dasm_put(Dst, 5313);
+    }
+    dasm_put(Dst, 5315);
+    if (op == BC_JFORI) {
+      dasm_put(Dst, 5317, -(BCBIAS_J*4 >> 16));
+    }
+    dasm_put(Dst, 5320);
+    if (op == BC_FORI) {
+      dasm_put(Dst, 5323);
+    } else if (op == BC_IFORL) {
+      dasm_put(Dst, 5326, -(BCBIAS_J*4 >> 16));
+    } else {
+      dasm_put(Dst, 5332, BC_JLOOP);
+    }
+    dasm_put(Dst, 5335);
+    if (op == BC_FORI) {
+      dasm_put(Dst, 5348, -(BCBIAS_J*4 >> 16));
+    } else if (op == BC_IFORL) {
+      dasm_put(Dst, 5354);
+    } else {
+      dasm_put(Dst, 5357, BC_JLOOP);
+    }
+    dasm_put(Dst, 5360);
+    break;
+
+  case BC_ITERL:
+#if LJ_HASJIT
+    dasm_put(Dst, 5363);
+#endif
+    break;
+
+  case BC_JITERL:
+#if !LJ_HASJIT
+    break;
+#endif
+  case BC_IITERL:
+    dasm_put(Dst, 5365, LJ_TNIL);
+    if (op == BC_JITERL) {
+      dasm_put(Dst, 5372);
+    } else {
+      dasm_put(Dst, 5374, 32-1, -(BCBIAS_J*4 >> 16));
+    }
+    dasm_put(Dst, 5382);
+    break;
+
+  case BC_LOOP:
+#if LJ_HASJIT
+    dasm_put(Dst, 5394);
+#endif
+    break;
+
+  case BC_ILOOP:
+    dasm_put(Dst, 5396);
+    break;
+
+  case BC_JLOOP:
+#if LJ_HASJIT
+    dasm_put(Dst, 5407);
+#endif
+    break;
+
+  case BC_JMP:
+    dasm_put(Dst, 5409, 32-1, -(BCBIAS_J*4 >> 16));
+    break;
+
+  /* -- Function headers -------------------------------------------------- */
+
+  case BC_FUNCF:
+#if LJ_HASJIT
+    dasm_put(Dst, 5425);
+#endif
+  case BC_FUNCV:  /* NYI: compiled vararg functions. */
+    break;
+
+  case BC_JFUNCF:
+#if !LJ_HASJIT
+    break;
+#endif
+  case BC_IFUNCF:
+    dasm_put(Dst, 5427, Dt1(->maxstack), -4+PC2PROTO(numparams), -4+PC2PROTO(k), 31-3);
+    if (op == BC_JFUNCF) {
+      dasm_put(Dst, 5445);
+    } else {
+      dasm_put(Dst, 5447);
+    }
+    dasm_put(Dst, 5456);
+    break;
+
+  case BC_JFUNCV:
+#if !LJ_HASJIT
+    break;
+#endif
+    dasm_put(Dst, 5462);
+    break;  /* NYI: compiled vararg functions. */
+
+  case BC_IFUNCV:
+    dasm_put(Dst, 5464, Dt1(->maxstack), 8+FRAME_VARG, -4+PC2PROTO(k), -4+PC2PROTO(numparams), LJ_TNIL);
+    break;
+
+  case BC_FUNCC:
+  case BC_FUNCCW:
+    if (op == BC_FUNCC) {
+      dasm_put(Dst, 5517, Dt8(->f));
+    } else {
+      dasm_put(Dst, 5520, DISPATCH_GL(wrapf));
+    }
+    dasm_put(Dst, 5523, Dt1(->maxstack), Dt1(->base), Dt1(->top), ~LJ_VMST_C);
+    if (op == BC_FUNCCW) {
+      dasm_put(Dst, 5536, Dt8(->f));
+    }
+    dasm_put(Dst, 5539, DISPATCH_GL(vmstate), Dt1(->top), 31-3, Dt1(->base), ~LJ_VMST_INTERP, DISPATCH_GL(vmstate));
+    break;
+
+  /* ---------------------------------------------------------------------- */
+
+  default:
+    fprintf(stderr, "Error: undefined opcode BC_%s\n", bc_names[op]);
+    exit(2);
+    break;
+  }
+}
+
+static int build_backend(BuildCtx *ctx)
+{
+  int op;
+
+  dasm_growpc(Dst, BC__MAX);
+
+  build_subroutines(ctx);
+
+  dasm_put(Dst, 5560);
+  for (op = 0; op < BC__MAX; op++)
+    build_ins(ctx, (BCOp)op, op);
+
+  return BC__MAX;
+}
+
+/* Emit pseudo frame-info for all assembler functions. */
+static void emit_asm_debug(BuildCtx *ctx)
+{
+  int i;
+  switch (ctx->mode) {
+  case BUILD_elfasm:
+    fprintf(ctx->fp, "\t.section .debug_frame,\"\",@progbits\n");
+    fprintf(ctx->fp,
+       ".Lframe0:\n"
+       "\t.long .LECIE0-.LSCIE0\n"
+       ".LSCIE0:\n"
+       "\t.long 0xffffffff\n"
+       "\t.byte 0x1\n"
+       "\t.string \"\"\n"
+       "\t.uleb128 0x1\n"
+       "\t.sleb128 -4\n"
+       "\t.byte 65\n"
+       "\t.byte 0xc\n\t.uleb128 1\n\t.uleb128 0\n"
+       "\t.align 2\n"
+       ".LECIE0:\n\n");
+    fprintf(ctx->fp,
+       ".LSFDE0:\n"
+       "\t.long .LEFDE0-.LASFDE0\n"
+       ".LASFDE0:\n"
+       "\t.long .Lframe0\n"
+       "\t.long .Lbegin\n"
+       "\t.long %d\n"
+       "\t.byte 0xe\n\t.uleb128 %d\n"
+       "\t.byte 0x11\n\t.uleb128 65\n\t.sleb128 -1\n",
+       (int)ctx->codesz, CFRAME_SIZE);
+    for (i = 14; i <= 31; i++)
+      fprintf(ctx->fp,
+       "\t.byte %d\n\t.uleb128 %d\n"
+       "\t.byte %d\n\t.uleb128 %d\n",
+       0x80+i, 37+(31-i), 0x80+32+i, 2+2*(31-i));
+    fprintf(ctx->fp,
+       "\t.align 2\n"
+       ".LEFDE0:\n\n");
+    fprintf(ctx->fp, "\t.section .eh_frame,\"a\",@progbits\n");
+    fprintf(ctx->fp,
+       ".Lframe1:\n"
+       "\t.long .LECIE1-.LSCIE1\n"
+       ".LSCIE1:\n"
+       "\t.long 0\n"
+       "\t.byte 0x1\n"
+       "\t.string \"zPR\"\n"
+       "\t.uleb128 0x1\n"
+       "\t.sleb128 -4\n"
+       "\t.byte 65\n"
+       "\t.uleb128 6\n"                        /* augmentation length */
+       "\t.byte 0x1b\n"                        /* pcrel|sdata4 */
+       "\t.long lj_err_unwind_dwarf-.\n"
+       "\t.byte 0x1b\n"                        /* pcrel|sdata4 */
+       "\t.byte 0xc\n\t.uleb128 1\n\t.uleb128 0\n"
+       "\t.align 2\n"
+       ".LECIE1:\n\n");
+    fprintf(ctx->fp,
+       ".LSFDE1:\n"
+       "\t.long .LEFDE1-.LASFDE1\n"
+       ".LASFDE1:\n"
+       "\t.long .LASFDE1-.Lframe1\n"
+       "\t.long .Lbegin-.\n"
+       "\t.long %d\n"
+       "\t.uleb128 0\n"                        /* augmentation length */
+       "\t.byte 0xe\n\t.uleb128 %d\n"
+       "\t.byte 0x11\n\t.uleb128 65\n\t.sleb128 -1\n",
+       (int)ctx->codesz, CFRAME_SIZE);
+    for (i = 14; i <= 31; i++)
+      fprintf(ctx->fp,
+       "\t.byte %d\n\t.uleb128 %d\n"
+       "\t.byte %d\n\t.uleb128 %d\n",
+       0x80+i, 37+(31-i), 0x80+32+i, 2+2*(31-i));
+    fprintf(ctx->fp,
+       "\t.align 2\n"
+       ".LEFDE1:\n\n");
+    break;
+  default:
+    break;
+  }
+}
+
index 03da79a66b0c13d822b210e0a336c9170c257ab8..826c54c1fe7ee69ec2b34f4ea53c6bd434380c2c 100644 (file)
 #define LJ_ARCH_NOFFI          1       /* NYI: comparisons, calls. */
 #define LJ_ARCH_NOJIT          1
 
-#error "No support for plain PowerPC CPUs (yet)"
-
 #elif LUAJIT_TARGET == LUAJIT_ARCH_PPCSPE
 
 #define LJ_ARCH_NAME           "ppcspe"
index f09b73d00db45a21a6b909f481862d6305d4556e..2baf44a818711d0a71bb473627b2c404d21bf9d2 100644 (file)
@@ -104,8 +104,8 @@ enum {
 #define CFRAME_OFS_NRES                24
 #define CFRAME_OFS_PREV                20
 #define CFRAME_OFS_L           16
-#define CFRAME_OFS_PC          12
-#define CFRAME_OFS_MULTRES     8
+#define CFRAME_OFS_PC          8
+#define CFRAME_OFS_MULTRES     12
 #define CFRAME_SIZE            256
 #define CFRAME_SHIFT_MULTRES   3
 #elif LJ_TARGET_PPCSPE