|.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.
|.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
|->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.
| 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
|
| 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.
| 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
|
|//-----------------------------------------------------------------------
| // 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
|
|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
| 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
| 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:
| // 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
|//-----------------------------------------------------------------------
|
|->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:
| 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)
| 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 ---------------------------------------------
|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:
| b >1
|
|->vmeta_unm:
- | add CARG3, BASE, RD
- | mr CARG4, CARG3
+ | mr CARG3, RD
+ | mr CARG4, RD
| b >1
|
|->vmeta_arith_vv:
| // 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).
#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
|.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.
|
|//-- 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
| 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
| 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.
| 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
| 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 ----------------------------------------
| 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 --------------------------------------------------
|.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
| 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:
| 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:
| 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
|
|//-- 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
|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
|
|->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
| 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)
| 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)
| .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)
| 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
|//-- 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
| 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
|//-- 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:
|// 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.
|
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.
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;
| 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;
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:
}
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:
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
||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;
| 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;
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:
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
| 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:
| 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?
| 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
| 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:
| 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;
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 {
| // 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)
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
| 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.
| 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
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.
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
| 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
| 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.
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
| 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
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;
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
| 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:
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;
| 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
|
| 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.
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
| 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
| 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?
| 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:
|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.
| 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
|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;
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:
#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
}
|
|3: // Clear missing parameters.
- | evstddx TISNIL, BASE, NARGS8:RC
+ | stwx TISNIL, BASE, NARGS8:RC
| addi NARGS8:RC, NARGS8:RC, 8
| b <2
break;
| 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;
-/* 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;
+ }
+}
+