From aaaf0e0f5fe573e7c089ece1bd491a8f8b8b3e9a Mon Sep 17 00:00:00 2001 From: Mike Pall Date: Fri, 30 Mar 2012 01:33:07 +0200 Subject: [PATCH] MIPS: Interpreter/JIT integration --- src/buildvm_mips.dasc | 127 +++++++- src/buildvm_mips.h | 669 +++++++++++++++++++++++++++++------------- 2 files changed, 577 insertions(+), 219 deletions(-) diff --git a/src/buildvm_mips.dasc b/src/buildvm_mips.dasc index 6b3103dd..9e984189 100644 --- a/src/buildvm_mips.dasc +++ b/src/buildvm_mips.dasc @@ -270,7 +270,13 @@ |.macro jmp_extern; jr CFUNCADDR; .endmacro | |.macro hotcheck, delta, target -|NYI +| srl TMP1, PC, 1 +| andi TMP1, TMP1, 126 +| addu TMP1, TMP1, DISPATCH +| lhu TMP2, GG_DISP2HOT(TMP1) +| addiu TMP2, TMP2, -delta +| bltz TMP2, target +|. sh TMP2, GG_DISP2HOT(TMP1) |.endmacro | |.macro hotloop @@ -1995,7 +2001,21 @@ static void build_subroutines(BuildCtx *ctx) | |->vm_hotloop: // Hot loop counter underflow. #if LJ_HASJIT - |NYI + | lw LFUNC:TMP1, FRAME_FUNC(BASE) + | addiu CARG1, DISPATCH, GG_DISP2J + | sw PC, SAVE_PC + | lw TMP1, LFUNC:TMP1->pc + | move CARG2, PC + | sw L, DISPATCH_J(L)(DISPATCH) + | lbu TMP1, PC2PROTO(framesize)(TMP1) + | load_got lj_trace_hot + | sw BASE, L->base + | sll TMP1, TMP1, 3 + | addu TMP1, BASE, TMP1 + | call_intern lj_trace_hot // (jit_State *J, const BCIns *pc) + |. sw TMP1, L->top + | b <3 + |. nop #endif | |->vm_callhook: // Dispatch target for call hooks. @@ -2031,13 +2051,102 @@ static void build_subroutines(BuildCtx *ctx) |//-- Trace exit handler ------------------------------------------------- |//----------------------------------------------------------------------- | + |.macro savex_, a, b + | sdc1 f..a, 16+a*8(sp) + | sw r..a, 16+32*8+a*4(sp) + | sw r..b, 16+32*8+b*4(sp) + |.endmacro + | |->vm_exit_handler: #if LJ_HASJIT - |NYI + | addiu sp, sp, -(16+32*8+32*4) + | savex_ 0, 1 + | savex_ 2, 3 + | savex_ 4, 5 + | savex_ 6, 7 + | savex_ 8, 9 + | savex_ 10, 11 + | savex_ 12, 13 + | savex_ 14, 15 + | savex_ 16, 17 + | savex_ 18, 19 + | savex_ 20, 21 + | savex_ 22, 23 + | savex_ 24, 25 + | savex_ 26, 27 + | sdc1 f28, 16+28*8(sp) + | sw r28, 16+32*8+28*4(sp) + | sdc1 f30, 16+30*8(sp) + | sw r30, 16+32*8+30*4(sp) + | sw r0, 16+32*8+31*4(sp) // Clear RID_TMP. + | li_vmstate EXIT + | addiu TMP2, sp, 16+32*8+32*4 // Recompute original value of sp. + | addiu DISPATCH, JGL, -GG_DISP2G-32768 + | lw TMP1, 0(TMP2) // Load exit number. + | st_vmstate + | sw TMP2, 16+32*8+29*4(sp) // Store sp in RID_SP. + | lw L, DISPATCH_GL(jit_L)(DISPATCH) + | lw BASE, DISPATCH_GL(jit_base)(DISPATCH) + | load_got lj_trace_exit + | sw L, DISPATCH_J(L)(DISPATCH) + | sw ra, DISPATCH_J(parent)(DISPATCH) // Store trace number. + | sw TMP1, DISPATCH_J(exitno)(DISPATCH) // Store exit number. + | addiu CARG1, DISPATCH, GG_DISP2J + | sw BASE, L->base + | call_intern lj_trace_exit // (jit_State *J, ExitState *ex) + |. addiu CARG2, sp, 16 + | // Returns MULTRES (unscaled) or negated error code. + | lw TMP1, L->cframe + | li AT, -4 + | lw BASE, L->base + | and sp, TMP1, AT + | lw PC, SAVE_PC // Get SAVE_PC. + | b >1 + |. sw L, SAVE_L // Set SAVE_L (on-trace resume/yield). #endif |->vm_exit_interp: #if LJ_HASJIT - |NYI + | // CRET1 = MULTRES or negated error code, BASE, PC and JGL set. + | lw L, SAVE_L + | addiu DISPATCH, JGL, -GG_DISP2G-32768 + |1: + | bltz CRET1, >3 // Check for error from exit. + |. lw LFUNC:TMP1, FRAME_FUNC(BASE) + | lui TMP3, 0x59c0 // TOBIT = 2^52 + 2^51 (float). + | sll MULTRES, CRET1, 3 + | li TISNIL, LJ_TNIL + | sw MULTRES, SAVE_MULTRES + | mtc1 TMP3, TOBIT + | lw TMP1, LFUNC:TMP1->pc + | sw r0, DISPATCH_GL(jit_L)(DISPATCH) + | lw KBASE, PC2PROTO(k)(TMP1) + | cvt.d.s TOBIT, TOBIT + | // Modified copy of ins_next which handles function header dispatch, too. + | lw INS, 0(PC) + | addiu PC, PC, 4 + | // Assumes TISNIL == ~LJ_VMST_INTERP == -1 + | sw TISNIL, DISPATCH_GL(vmstate)(DISPATCH) + | decode_OP4a TMP1, INS + | decode_OP4b TMP1 + | sltiu TMP2, TMP1, BC_FUNCF*4 // Function header? + | addu TMP0, DISPATCH, TMP1 + | decode_RD8a RD, INS + | lw AT, 0(TMP0) + | decode_RA8a RA, INS + | beqz TMP2, >2 + |. decode_RA8b RA + | jr AT + |. decode_RD8b RD + |2: + | addiu RC, MULTRES, -8 + | jr AT + |. add RA, RA, BASE + | + |3: // Rethrow error from the right C frame. + | load_got lj_err_throw + | negu CARG2, CRET1 + | call_intern lj_err_throw // (lua_State *L, int errcode) + |. move CARG1, L #endif | |//----------------------------------------------------------------------- @@ -3739,13 +3848,13 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop) if (op == BC_JFORI) { | li TMP1, 1 | li TMP2, 1 - | lw INS, -4(PC) + | addu TMP0, RD, TMP0 | slt TMP3, TMP3, r0 - | movt TMP1, r0, 0 - | movt TMP2, r0, 1 - | addu PC, RD, TMP0 + | movf TMP1, r0, 0 + | addu PC, PC, TMP0 + | movf TMP2, r0, 1 + | lhu RD, -4+OFS_RD(PC) | movn TMP1, TMP2, TMP3 - | decode_RD8a RD, INS | bnez TMP1, =>BC_JLOOP |. decode_RD8b RD } else if (op == BC_JFORL) { diff --git a/src/buildvm_mips.h b/src/buildvm_mips.h index 948f7d49..7c0f90bf 100644 --- a/src/buildvm_mips.h +++ b/src/buildvm_mips.h @@ -12,7 +12,7 @@ #define DASM_SECTION_CODE_OP 0 #define DASM_SECTION_CODE_SUB 1 #define DASM_MAXSECTION 2 -static const unsigned int build_actionlist[6076] = { +static const unsigned int build_actionlist[6323] = { 0xff010001, 0xff060014, 0x32410000, @@ -3060,7 +3060,30 @@ static const unsigned int build_actionlist[6076] = { 0xff098200, 0xff060090, 0xff000000, -0xf0f0f0f0, +0x8e0d0000, +0xff098200, +0x26640000, +0xff098200, +0xafb20014, +0x8dad0000, +0xff098200, +0x02402821, +0xae740000, +0xff098200, +0x91ad0000, +0xff098200, +0x8e790000, +0xff098200, +0xae900000, +0xff098200, +0x000d68c0, +0x020d6821, +0x0320f809, +0xae8d0000, +0xff098200, +0x10000000, +0xff05080d, +0x00000000, 0xff000000, 0xff060091, 0xff000000, @@ -3097,11 +3120,194 @@ static const unsigned int build_actionlist[6076] = { 0x8e4bfffc, 0xff060093, 0xff000000, -0xf0f0f0f0, +0x27bd0000, +0xff098200, +0xf7a00000, +0xff098200, +0xafa00000, +0xff098200, +0xafa10000, +0xff098200, +0xf7a20000, +0xff098200, +0xafa20000, +0xff098200, +0xafa30000, +0xff098200, +0xf7a40000, +0xff098200, +0xafa40000, +0xff098200, +0xafa50000, +0xff098200, +0xf7a60000, +0xff098200, +0xafa60000, +0xff098200, +0xafa70000, +0xff098200, +0xf7a80000, +0xff098200, +0xafa80000, +0xff098200, +0xafa90000, +0xff098200, +0xf7aa0000, +0xff098200, +0xafaa0000, +0xff098200, +0xafab0000, +0xff098200, +0xf7ac0000, +0xff098200, +0xafac0000, +0xff098200, +0xafad0000, +0xff098200, +0xf7ae0000, +0xff098200, +0xff000000, +0xafae0000, +0xff098200, +0xafaf0000, +0xff098200, +0xf7b00000, +0xff098200, +0xafb00000, +0xff098200, +0xafb10000, +0xff098200, +0xf7b20000, +0xff098200, +0xafb20000, +0xff098200, +0xafb30000, +0xff098200, +0xf7b40000, +0xff098200, +0xafb40000, +0xff098200, +0xafb50000, +0xff098200, +0xf7b60000, +0xff098200, +0xafb60000, +0xff098200, +0xafb70000, +0xff098200, +0xf7b80000, +0xff098200, +0xafb80000, +0xff098200, +0xafb90000, +0xff098200, +0xf7ba0000, +0xff098200, +0xafba0000, +0xff098200, +0xafbb0000, +0xff098200, +0xf7bc0000, +0xff098200, +0xafbc0000, +0xff098200, +0xf7be0000, +0xff098200, +0xff000000, +0xafbe0000, +0xff098200, +0xafa00000, +0xff098200, +0x240c0000, +0xff098200, +0x27ae0000, +0xff098200, +0x27d30000, +0xff098200, +0x8dcd0000, +0xae6c0000, +0xff098200, +0xafae0000, +0xff098200, +0x8e740000, +0xff098200, +0x8e700000, +0xff098200, +0x8e790000, +0xff098200, +0xae740000, +0xff098200, +0xae7f0000, +0xff098200, +0xae6d0000, +0xff098200, +0x26640000, +0xff098200, +0xae900000, +0xff098200, +0x0320f809, +0x27a50010, +0x8e8d0000, +0xff098200, +0x2401fffc, +0x8e900000, +0xff098200, +0x01a1e824, +0x8fb20014, +0x10000000, +0xff050801, +0xafb40070, 0xff000000, 0xff060094, 0xff000000, -0xf0f0f0f0, +0x8fb40070, +0x27d30000, +0xff098200, +0xff06000b, +0x04400000, +0xff050803, +0x8e0d0000, +0xff098200, +0x3c0f59c0, +0x0002a8c0, +0x241e0000, +0xff098200, +0xafb50010, +0x448ff000, +0x8dad0000, +0xff098200, +0xae600000, +0xff098200, +0x8db10000, +0xff098200, +0x4600f7a1, +0x8e4b0000, +0x26520004, +0xae7e0000, +0xff098200, +0x316d00ff, +0x000d6880, +0x2dae0000, +0xff098200, +0x026d6021, +0x000b5402, +0x8d810000, +0x000bb942, +0x11c00000, +0xff050802, +0x32f707f8, +0x00200008, +0x000a50c0, +0xff06000c, +0x26a9fff8, +0x00200008, +0x02f0b820, +0xff06000d, +0x8e790000, +0xff098200, +0x00022823, +0x0320f809, +0x02802021, 0xff000000, 0xff06005b, 0x3c0c4330, @@ -5762,7 +5968,17 @@ static const unsigned int build_actionlist[6076] = { 0xadde0000, 0xff098200, 0xff000000, -0xf0f0f0f0, +0x00126842, +0x31ad007e, +0x01b36821, +0x95ae0000, +0xff098200, +0x25ce0000, +0xff098200, +0x05c00000, +0xff050890, +0xa5ae0000, +0xff098200, 0xff000000, 0x0217b821, 0xff000000, @@ -5810,13 +6026,14 @@ static const unsigned int build_actionlist[6076] = { 0xff000000, 0x240d0001, 0x240e0001, -0x8e4bfffc, +0x014c6021, 0x01e0782a, -0x00016801, -0x00057001, -0x014c9021, +0x00006801, +0x024c9021, +0x00047001, +0x964a0000, +0xff098200, 0x01cf680b, -0x000b5402, 0x15a00000, 0xff070800, 0x000a50c0, @@ -5856,7 +6073,17 @@ static const unsigned int build_actionlist[6076] = { 0x00200008, 0x32f707f8, 0xff000000, -0xf0f0f0f0, +0x00126842, +0x31ad007e, +0x01b36821, +0x95ae0000, +0xff098200, +0x25ce0000, +0xff098200, +0x05c00000, +0xff050890, +0xa5ae0000, +0xff098200, 0xff000000, 0x0217b821, 0x8eed0000, @@ -5896,7 +6123,17 @@ static const unsigned int build_actionlist[6076] = { 0x00200008, 0x32f707f8, 0xff000000, -0xf0f0f0f0, +0x00126842, +0x31ad007e, +0x01b36821, +0x95ae0000, +0xff098200, +0x25ce0000, +0xff098200, +0x05c00000, +0xff050890, +0xa5ae0000, +0xff098200, 0xff000000, 0x8e4b0000, 0x26520004, @@ -5945,7 +6182,17 @@ static const unsigned int build_actionlist[6076] = { 0x00200008, 0x32f707f8, 0xff000000, -0xf0f0f0f0, +0x00126842, +0x31ad007e, +0x01b36821, +0x95ae0000, +0xff098200, +0x25ce0000, +0xff098200, +0x05c00000, +0xff050892, +0xa5ae0000, +0xff098200, 0xff000000, 0x8e8e0000, 0xff098200, @@ -6496,42 +6743,44 @@ static void build_subroutines(BuildCtx *ctx) dasm_put(Dst, 2980, DISPATCH_GL(hookmask), HOOK_ACTIVE, GG_DISP2STATIC, DISPATCH_GL(hookmask), DISPATCH_GL(hookcount), HOOK_ACTIVE, LUA_MASKLINE|LUA_MASKCOUNT, DISPATCH_GL(hookcount), LUA_MASKLINE, DISPATCH_GOT(lj_dispatch_ins), Dt1(->base), Dt1(->base)); dasm_put(Dst, 3028, GG_DISP2STATIC, -24+LJ_ENDIAN_SELECT(0,4)); #if LJ_HASJIT - dasm_put(Dst, 3047); + dasm_put(Dst, 3047, LJ_ENDIAN_SELECT(-8,-4), GG_DISP2J, Dt7(->pc), DISPATCH_J(L), PC2PROTO(framesize), DISPATCH_GOT(lj_trace_hot), Dt1(->base), Dt1(->top)); #endif - dasm_put(Dst, 3049); + dasm_put(Dst, 3072); #if LJ_HASJIT - dasm_put(Dst, 3051); + dasm_put(Dst, 3074); #endif - dasm_put(Dst, 3054); + dasm_put(Dst, 3077); #if LJ_HASJIT - dasm_put(Dst, 3057); + dasm_put(Dst, 3080); #endif - dasm_put(Dst, 3060, DISPATCH_GOT(lj_dispatch_call), Dt1(->base), Dt1(->top), Dt1(->base), Dt1(->top), LJ_ENDIAN_SELECT(-8,-4)); + dasm_put(Dst, 3083, DISPATCH_GOT(lj_dispatch_call), Dt1(->base), Dt1(->top), Dt1(->base), Dt1(->top), LJ_ENDIAN_SELECT(-8,-4)); #if LJ_HASJIT - dasm_put(Dst, 3084); + dasm_put(Dst, 3107, -(16+32*8+32*4), 16+0*8, 16+32*8+0*4, 16+32*8+1*4, 16+2*8, 16+32*8+2*4, 16+32*8+3*4, 16+4*8, 16+32*8+4*4, 16+32*8+5*4, 16+6*8, 16+32*8+6*4, 16+32*8+7*4, 16+8*8, 16+32*8+8*4, 16+32*8+9*4, 16+10*8, 16+32*8+10*4, 16+32*8+11*4, 16+12*8, 16+32*8+12*4, 16+32*8+13*4, 16+14*8); + dasm_put(Dst, 3154, 16+32*8+14*4, 16+32*8+15*4, 16+16*8, 16+32*8+16*4, 16+32*8+17*4, 16+18*8, 16+32*8+18*4, 16+32*8+19*4, 16+20*8, 16+32*8+20*4, 16+32*8+21*4, 16+22*8, 16+32*8+22*4, 16+32*8+23*4, 16+24*8, 16+32*8+24*4, 16+32*8+25*4, 16+26*8, 16+32*8+26*4, 16+32*8+27*4, 16+28*8, 16+32*8+28*4, 16+30*8); + dasm_put(Dst, 3201, 16+32*8+30*4, 16+32*8+31*4, ~LJ_VMST_EXIT, 16+32*8+32*4, -GG_DISP2G-32768, DISPATCH_GL(vmstate), 16+32*8+29*4, DISPATCH_GL(jit_L), DISPATCH_GL(jit_base), DISPATCH_GOT(lj_trace_exit), DISPATCH_J(L), DISPATCH_J(parent), DISPATCH_J(exitno), GG_DISP2J, Dt1(->base), Dt1(->cframe), Dt1(->base)); #endif - dasm_put(Dst, 3086); + dasm_put(Dst, 3245); #if LJ_HASJIT - dasm_put(Dst, 3088); + dasm_put(Dst, 3247, -GG_DISP2G-32768, LJ_ENDIAN_SELECT(-8,-4), LJ_TNIL, Dt7(->pc), DISPATCH_GL(jit_L), PC2PROTO(k), DISPATCH_GL(vmstate), BC_FUNCF*4, DISPATCH_GOT(lj_err_throw)); #endif - dasm_put(Dst, 3090); + dasm_put(Dst, 3296); #if LJ_HASJIT - dasm_put(Dst, 3138); + dasm_put(Dst, 3344); #endif - dasm_put(Dst, 3161); + dasm_put(Dst, 3367); #if LJ_HASFFI #define DtE(_V) (int)(ptrdiff_t)&(((CTState *)0)_V) - dasm_put(Dst, 3163, 72+9*4, 72+8*4, 24+5*8, 72+7*4, 72+6*4, 24+4*8, 72+5*4, 72+4*4, 24+3*8, 72+3*4, 72+2*4, 24+2*8, 72+1*4, 72+0*4, 24+1*8, 24+0*8, Dt2(->ctype_state), GG_G2DISP, DISPATCH_GOT(lj_ccallback_enter), DtE(->cb.slot), DtE(->cb.gpr[0]), DtE(->cb.gpr[1]), DtE(->cb.fpr[0])); - dasm_put(Dst, 3211, DtE(->cb.gpr[2]), DtE(->cb.gpr[3]), DtE(->cb.fpr[1]), 112+16, DtE(->cb.stack), Dt1(->base), Dt1(->top), LJ_ENDIAN_SELECT(-8,-4), ~LJ_VMST_INTERP, LJ_TNIL, DISPATCH_GL(vmstate), Dt7(->pc)); + dasm_put(Dst, 3369, 72+9*4, 72+8*4, 24+5*8, 72+7*4, 72+6*4, 24+4*8, 72+5*4, 72+4*4, 24+3*8, 72+3*4, 72+2*4, 24+2*8, 72+1*4, 72+0*4, 24+1*8, 24+0*8, Dt2(->ctype_state), GG_G2DISP, DISPATCH_GOT(lj_ccallback_enter), DtE(->cb.slot), DtE(->cb.gpr[0]), DtE(->cb.gpr[1]), DtE(->cb.fpr[0])); + dasm_put(Dst, 3417, DtE(->cb.gpr[2]), DtE(->cb.gpr[3]), DtE(->cb.fpr[1]), 112+16, DtE(->cb.stack), Dt1(->base), Dt1(->top), LJ_ENDIAN_SELECT(-8,-4), ~LJ_VMST_INTERP, LJ_TNIL, DISPATCH_GL(vmstate), Dt7(->pc)); #endif - dasm_put(Dst, 3255); + dasm_put(Dst, 3461); #if LJ_HASFFI - dasm_put(Dst, 3257, DISPATCH_GOT(lj_ccallback_leave), DISPATCH_GL(ctype_state), Dt1(->base), Dt1(->top), DtE(->L), DtE(->cb.gpr[0]), DtE(->cb.fpr[0]), DtE(->cb.gpr[1]), DtE(->cb.fpr[1])); + dasm_put(Dst, 3463, DISPATCH_GOT(lj_ccallback_leave), DISPATCH_GL(ctype_state), Dt1(->base), Dt1(->top), DtE(->L), DtE(->cb.gpr[0]), DtE(->cb.fpr[0]), DtE(->cb.gpr[1]), DtE(->cb.fpr[1])); #endif - dasm_put(Dst, 3281); + dasm_put(Dst, 3487); #if LJ_HASFFI #define DtF(_V) (int)(ptrdiff_t)&(((CCallState *)0)_V) - dasm_put(Dst, 3283, DtF(->spadj), DtF(->nsp), offsetof(CCallState, stack), DtF(->func), DtF(->gpr[1]), DtF(->gpr[2]), DtF(->gpr[3]), DtF(->fpr[0]), DtF(->fpr[1]), DtF(->gpr[0]), DtF(->gpr[0]), DtF(->gpr[1]), DtF(->fpr[0]), DtF(->fpr[1])); + dasm_put(Dst, 3489, DtF(->spadj), DtF(->nsp), offsetof(CCallState, stack), DtF(->func), DtF(->gpr[1]), DtF(->gpr[2]), DtF(->gpr[3]), DtF(->fpr[0]), DtF(->fpr[1]), DtF(->gpr[0]), DtF(->gpr[0]), DtF(->gpr[1]), DtF(->fpr[0]), DtF(->fpr[1])); #endif } @@ -6539,7 +6788,7 @@ static void build_subroutines(BuildCtx *ctx) static void build_ins(BuildCtx *ctx, BCOp op, int defop) { int vk = 0; - dasm_put(Dst, 3339, defop); + dasm_put(Dst, 3545, defop); switch (op) { @@ -6548,138 +6797,138 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop) /* 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, 3341, LJ_ENDIAN_SELECT(4,0), LJ_ENDIAN_SELECT(4,0), LJ_TISNUM, LJ_TISNUM, LJ_ENDIAN_SELECT(2,0), (-(BCBIAS_J*4 >> 16) & 65535)); + dasm_put(Dst, 3547, LJ_ENDIAN_SELECT(4,0), LJ_ENDIAN_SELECT(4,0), LJ_TISNUM, LJ_TISNUM, LJ_ENDIAN_SELECT(2,0), (-(BCBIAS_J*4 >> 16) & 65535)); if (op == BC_ISLT || op == BC_ISGE) { - dasm_put(Dst, 3364); + dasm_put(Dst, 3570); } else { - dasm_put(Dst, 3366); + dasm_put(Dst, 3572); } if (op == BC_ISLT || op == BC_ISLE) { - dasm_put(Dst, 3368); + dasm_put(Dst, 3574); } else { - dasm_put(Dst, 3370); + dasm_put(Dst, 3576); } - dasm_put(Dst, 3372); + dasm_put(Dst, 3578); break; case BC_ISEQV: case BC_ISNEV: vk = op == BC_ISEQV; - dasm_put(Dst, 3386, LJ_ENDIAN_SELECT(4,0), -4+LJ_ENDIAN_SELECT(2,0), LJ_ENDIAN_SELECT(4,0), (-(BCBIAS_J*4 >> 16) & 65535), LJ_TISNUM, LJ_TISNUM); + dasm_put(Dst, 3592, LJ_ENDIAN_SELECT(4,0), -4+LJ_ENDIAN_SELECT(2,0), LJ_ENDIAN_SELECT(4,0), (-(BCBIAS_J*4 >> 16) & 65535), LJ_TISNUM, LJ_TISNUM); if (vk) { - dasm_put(Dst, 3410); + dasm_put(Dst, 3616); } else { - dasm_put(Dst, 3412); + dasm_put(Dst, 3618); } - dasm_put(Dst, 3414, LJ_ENDIAN_SELECT(0,4), LJ_ENDIAN_SELECT(0,4)); + dasm_put(Dst, 3620, LJ_ENDIAN_SELECT(0,4), LJ_ENDIAN_SELECT(0,4)); if (LJ_HASFFI) { - dasm_put(Dst, 3433, LJ_TCDATA); + dasm_put(Dst, 3639, LJ_TCDATA); } - dasm_put(Dst, 3438, LJ_TISPRI); + dasm_put(Dst, 3644, LJ_TISPRI); if (LJ_HASFFI) { - dasm_put(Dst, 3441); + dasm_put(Dst, 3647); } - dasm_put(Dst, 3444, LJ_TISTABUD+1); + dasm_put(Dst, 3650, LJ_TISTABUD+1); if (vk) { - dasm_put(Dst, 3455); + dasm_put(Dst, 3661); } else { - dasm_put(Dst, 3457); + dasm_put(Dst, 3663); } - dasm_put(Dst, 3459, Dt6(->metatable), Dt6(->nomm), 1<metatable), Dt6(->nomm), 1<> 16) & 65535)); + dasm_put(Dst, 3698, -LJ_TSTR, (-(BCBIAS_J*4 >> 16) & 65535)); if (vk) { - dasm_put(Dst, 3502); + dasm_put(Dst, 3708); } else { - dasm_put(Dst, 3504); + dasm_put(Dst, 3710); } - dasm_put(Dst, 3506); + dasm_put(Dst, 3712); break; case BC_ISEQN: case BC_ISNEN: vk = op == BC_ISEQN; - dasm_put(Dst, 3519, LJ_ENDIAN_SELECT(4,0), -4+LJ_ENDIAN_SELECT(2,0), (-(BCBIAS_J*4 >> 16) & 65535), LJ_TISNUM); + dasm_put(Dst, 3725, LJ_ENDIAN_SELECT(4,0), -4+LJ_ENDIAN_SELECT(2,0), (-(BCBIAS_J*4 >> 16) & 65535), LJ_TISNUM); if (LJ_HASFFI) { - dasm_put(Dst, 3534); + dasm_put(Dst, 3740); } else { - dasm_put(Dst, 3537); + dasm_put(Dst, 3743); } - dasm_put(Dst, 3540); + dasm_put(Dst, 3746); if (vk) { - dasm_put(Dst, 3543); + dasm_put(Dst, 3749); } else { - dasm_put(Dst, 3547); + dasm_put(Dst, 3753); } - dasm_put(Dst, 3551); + dasm_put(Dst, 3757); if (LJ_HASFFI) { - dasm_put(Dst, 3563, LJ_TCDATA); + dasm_put(Dst, 3769, LJ_TCDATA); } break; case BC_ISEQP: case BC_ISNEP: vk = op == BC_ISEQP; - dasm_put(Dst, 3573, LJ_ENDIAN_SELECT(4,0), LJ_ENDIAN_SELECT(2,0)); + dasm_put(Dst, 3779, LJ_ENDIAN_SELECT(4,0), LJ_ENDIAN_SELECT(2,0)); if (LJ_HASFFI) { - dasm_put(Dst, 3582, LJ_TCDATA); + dasm_put(Dst, 3788, LJ_TCDATA); } - dasm_put(Dst, 3587, (-(BCBIAS_J*4 >> 16) & 65535)); + dasm_put(Dst, 3793, (-(BCBIAS_J*4 >> 16) & 65535)); if (vk) { - dasm_put(Dst, 3593); + dasm_put(Dst, 3799); } else { - dasm_put(Dst, 3595); + dasm_put(Dst, 3801); } - dasm_put(Dst, 3597); + dasm_put(Dst, 3803); break; /* -- Unary test and copy ops ------------------------------------------- */ case BC_ISTC: case BC_ISFC: case BC_IST: case BC_ISF: - dasm_put(Dst, 3610, LJ_ENDIAN_SELECT(2,0), LJ_ENDIAN_SELECT(4,0)); + dasm_put(Dst, 3816, LJ_ENDIAN_SELECT(2,0), LJ_ENDIAN_SELECT(4,0)); if (op == BC_IST || op == BC_ISF) { - dasm_put(Dst, 3617, LJ_TISTRUECOND, (-(BCBIAS_J*4 >> 16) & 65535)); + dasm_put(Dst, 3823, LJ_TISTRUECOND, (-(BCBIAS_J*4 >> 16) & 65535)); if (op == BC_IST) { - dasm_put(Dst, 3624); + dasm_put(Dst, 3830); } else { - dasm_put(Dst, 3626); + dasm_put(Dst, 3832); } - dasm_put(Dst, 3628); + dasm_put(Dst, 3834); } else { - dasm_put(Dst, 3630, LJ_TISTRUECOND); + dasm_put(Dst, 3836, LJ_TISTRUECOND); if (op == BC_ISTC) { - dasm_put(Dst, 3634); + dasm_put(Dst, 3840); } else { - dasm_put(Dst, 3637); + dasm_put(Dst, 3843); } - dasm_put(Dst, 3640, (-(BCBIAS_J*4 >> 16) & 65535)); + dasm_put(Dst, 3846, (-(BCBIAS_J*4 >> 16) & 65535)); } - dasm_put(Dst, 3649); + dasm_put(Dst, 3855); break; /* -- Unary ops --------------------------------------------------------- */ case BC_MOV: - dasm_put(Dst, 3661); + dasm_put(Dst, 3867); break; case BC_NOT: - dasm_put(Dst, 3677, LJ_ENDIAN_SELECT(4,0), LJ_TFALSE, LJ_TISTRUECOND, LJ_TTRUE, LJ_ENDIAN_SELECT(4,0)); + dasm_put(Dst, 3883, LJ_ENDIAN_SELECT(4,0), LJ_TFALSE, LJ_TISTRUECOND, LJ_TTRUE, LJ_ENDIAN_SELECT(4,0)); break; case BC_UNM: - dasm_put(Dst, 3701, LJ_ENDIAN_SELECT(4,0), LJ_TISNUM); + dasm_put(Dst, 3907, LJ_ENDIAN_SELECT(4,0), LJ_TISNUM); break; case BC_LEN: - dasm_put(Dst, 3724, LJ_ENDIAN_SELECT(4,0), LJ_ENDIAN_SELECT(0,4), LJ_TSTR, LJ_TTAB, Dt5(->len)); + dasm_put(Dst, 3930, LJ_ENDIAN_SELECT(4,0), LJ_ENDIAN_SELECT(0,4), LJ_TSTR, LJ_TTAB, Dt5(->len)); #ifdef LUAJIT_ENABLE_LUA52COMPAT - dasm_put(Dst, 3758, Dt6(->metatable)); + dasm_put(Dst, 3964, Dt6(->metatable)); #endif - dasm_put(Dst, 3765, DISPATCH_GOT(lj_tab_len)); + dasm_put(Dst, 3971, DISPATCH_GOT(lj_tab_len)); #ifdef LUAJIT_ENABLE_LUA52COMPAT - dasm_put(Dst, 3774, Dt6(->nomm), 1<nomm), 1<base), DISPATCH_GOT(lj_meta_cat), Dt1(->base)); + dasm_put(Dst, 4341, Dt1(->base), DISPATCH_GOT(lj_meta_cat), Dt1(->base)); break; /* -- Constant ops ------------------------------------------------------ */ case BC_KSTR: - dasm_put(Dst, 4170, LJ_TSTR, LJ_ENDIAN_SELECT(0,4), LJ_ENDIAN_SELECT(4,0)); + dasm_put(Dst, 4376, LJ_TSTR, LJ_ENDIAN_SELECT(0,4), LJ_ENDIAN_SELECT(4,0)); break; case BC_KCDATA: #if LJ_HASFFI - dasm_put(Dst, 4192, LJ_TCDATA, LJ_ENDIAN_SELECT(0,4), LJ_ENDIAN_SELECT(4,0)); + dasm_put(Dst, 4398, LJ_TCDATA, LJ_ENDIAN_SELECT(0,4), LJ_ENDIAN_SELECT(4,0)); #endif break; case BC_KSHORT: - dasm_put(Dst, 4214); + dasm_put(Dst, 4420); break; case BC_KNUM: - dasm_put(Dst, 4231); + dasm_put(Dst, 4437); break; case BC_KPRI: - dasm_put(Dst, 4247, LJ_ENDIAN_SELECT(4,0)); + dasm_put(Dst, 4453, LJ_ENDIAN_SELECT(4,0)); break; case BC_KNIL: - dasm_put(Dst, 4264, LJ_ENDIAN_SELECT(4,0), LJ_ENDIAN_SELECT(4,0)); + dasm_put(Dst, 4470, LJ_ENDIAN_SELECT(4,0), LJ_ENDIAN_SELECT(4,0)); break; /* -- Upvalue and function ops ------------------------------------------ */ case BC_UGET: - dasm_put(Dst, 4288, LJ_ENDIAN_SELECT(-8,-4), Dt7(->uvptr), DtA(->v)); + dasm_put(Dst, 4494, LJ_ENDIAN_SELECT(-8,-4), Dt7(->uvptr), DtA(->v)); break; case BC_USETV: - dasm_put(Dst, 4311, LJ_ENDIAN_SELECT(-8,-4), Dt7(->uvptr), DtA(->marked), DtA(->v), LJ_GC_BLACK, DtA(->closed), LJ_ENDIAN_SELECT(4,0), LJ_GC_BLACK|1, -(LJ_TISNUM+1), LJ_TISGCV - (LJ_TISNUM+1), LJ_ENDIAN_SELECT(0,4), Dt4(->gch.marked), LJ_GC_WHITES, DISPATCH_GOT(lj_gc_barrieruv), GG_DISP2G); + dasm_put(Dst, 4517, LJ_ENDIAN_SELECT(-8,-4), Dt7(->uvptr), DtA(->marked), DtA(->v), LJ_GC_BLACK, DtA(->closed), LJ_ENDIAN_SELECT(4,0), LJ_GC_BLACK|1, -(LJ_TISNUM+1), LJ_TISGCV - (LJ_TISNUM+1), LJ_ENDIAN_SELECT(0,4), Dt4(->gch.marked), LJ_GC_WHITES, DISPATCH_GOT(lj_gc_barrieruv), GG_DISP2G); break; case BC_USETS: - dasm_put(Dst, 4371, LJ_ENDIAN_SELECT(-8,-4), Dt7(->uvptr), DtA(->marked), DtA(->v), Dt5(->marked), LJ_GC_BLACK, DtA(->closed), LJ_TSTR, LJ_ENDIAN_SELECT(0,4), LJ_ENDIAN_SELECT(4,0), LJ_GC_WHITES, DISPATCH_GOT(lj_gc_barrieruv), GG_DISP2G); + dasm_put(Dst, 4577, LJ_ENDIAN_SELECT(-8,-4), Dt7(->uvptr), DtA(->marked), DtA(->v), Dt5(->marked), LJ_GC_BLACK, DtA(->closed), LJ_TSTR, LJ_ENDIAN_SELECT(0,4), LJ_ENDIAN_SELECT(4,0), LJ_GC_WHITES, DISPATCH_GOT(lj_gc_barrieruv), GG_DISP2G); break; case BC_USETN: - dasm_put(Dst, 4426, LJ_ENDIAN_SELECT(-8,-4), Dt7(->uvptr), DtA(->v)); + dasm_put(Dst, 4632, LJ_ENDIAN_SELECT(-8,-4), Dt7(->uvptr), DtA(->v)); break; case BC_USETP: - dasm_put(Dst, 4449, LJ_ENDIAN_SELECT(-8,-4), Dt7(->uvptr), DtA(->v), LJ_ENDIAN_SELECT(4,0)); + dasm_put(Dst, 4655, LJ_ENDIAN_SELECT(-8,-4), Dt7(->uvptr), DtA(->v), LJ_ENDIAN_SELECT(4,0)); break; case BC_UCLO: - dasm_put(Dst, 4473, Dt1(->openupval), (-(BCBIAS_J*4 >> 16) & 65535), DISPATCH_GOT(lj_func_closeuv), Dt1(->base), Dt1(->base)); + dasm_put(Dst, 4679, Dt1(->openupval), (-(BCBIAS_J*4 >> 16) & 65535), DISPATCH_GOT(lj_func_closeuv), Dt1(->base), Dt1(->base)); break; case BC_FNEW: - dasm_put(Dst, 4504, DISPATCH_GOT(lj_func_newL_gc), LJ_ENDIAN_SELECT(-8,-4), Dt1(->base), Dt1(->base), LJ_TFUNC, LJ_ENDIAN_SELECT(4,0), LJ_ENDIAN_SELECT(0,4)); + dasm_put(Dst, 4710, DISPATCH_GOT(lj_func_newL_gc), LJ_ENDIAN_SELECT(-8,-4), Dt1(->base), Dt1(->base), LJ_TFUNC, LJ_ENDIAN_SELECT(4,0), LJ_ENDIAN_SELECT(0,4)); break; /* -- Table ops --------------------------------------------------------- */ case BC_TNEW: case BC_TDUP: - dasm_put(Dst, 4537, DISPATCH_GL(gc.total), DISPATCH_GL(gc.threshold), Dt1(->base)); + dasm_put(Dst, 4743, DISPATCH_GL(gc.total), DISPATCH_GL(gc.threshold), Dt1(->base)); if (op == BC_TNEW) { - dasm_put(Dst, 4549, DISPATCH_GOT(lj_tab_new)); + dasm_put(Dst, 4755, DISPATCH_GOT(lj_tab_new)); } else { - dasm_put(Dst, 4560, DISPATCH_GOT(lj_tab_dup)); + dasm_put(Dst, 4766, DISPATCH_GOT(lj_tab_dup)); } - dasm_put(Dst, 4568, Dt1(->base), LJ_TTAB, LJ_ENDIAN_SELECT(0,4), LJ_ENDIAN_SELECT(4,0), DISPATCH_GOT(lj_gc_step_fixtop)); + dasm_put(Dst, 4774, Dt1(->base), LJ_TTAB, LJ_ENDIAN_SELECT(0,4), LJ_ENDIAN_SELECT(4,0), DISPATCH_GOT(lj_gc_step_fixtop)); break; case BC_GGET: case BC_GSET: - dasm_put(Dst, 4598, LJ_ENDIAN_SELECT(-8,-4), Dt7(->env)); + dasm_put(Dst, 4804, LJ_ENDIAN_SELECT(-8,-4), Dt7(->env)); if (op == BC_GGET) { - dasm_put(Dst, 4606); + dasm_put(Dst, 4812); } else { - dasm_put(Dst, 4609); + dasm_put(Dst, 4815); } - dasm_put(Dst, 4612); + dasm_put(Dst, 4818); break; case BC_TGETV: - dasm_put(Dst, 4614, LJ_ENDIAN_SELECT(4,0), LJ_ENDIAN_SELECT(4,0), LJ_ENDIAN_SELECT(0,4), LJ_TTAB, LJ_TISNUM, LJ_TSTR, Dt6(->asize), Dt6(->array), LJ_ENDIAN_SELECT(4,0), Dt6(->metatable), Dt6(->nomm), 1<asize), Dt6(->array), LJ_ENDIAN_SELECT(4,0), Dt6(->metatable), Dt6(->nomm), 1<hmask), Dt5(->hash), Dt6(->node), offsetof(Node, key)+LJ_ENDIAN_SELECT(4,0), offsetof(Node, key)+LJ_ENDIAN_SELECT(0,4), DtB(->next), offsetof(Node, val)+LJ_ENDIAN_SELECT(4,0), -LJ_TSTR, Dt6(->metatable), offsetof(Node, val)+LJ_ENDIAN_SELECT(0,4), LJ_ENDIAN_SELECT(4,0), LJ_ENDIAN_SELECT(0,4)); - dasm_put(Dst, 4764, LJ_TNIL, Dt6(->nomm), 1<hmask), Dt5(->hash), Dt6(->node), offsetof(Node, key)+LJ_ENDIAN_SELECT(4,0), offsetof(Node, key)+LJ_ENDIAN_SELECT(0,4), DtB(->next), offsetof(Node, val)+LJ_ENDIAN_SELECT(4,0), -LJ_TSTR, Dt6(->metatable), offsetof(Node, val)+LJ_ENDIAN_SELECT(0,4), LJ_ENDIAN_SELECT(4,0), LJ_ENDIAN_SELECT(0,4)); + dasm_put(Dst, 4970, LJ_TNIL, Dt6(->nomm), 1<asize), Dt6(->array), LJ_ENDIAN_SELECT(4,0), Dt6(->metatable), Dt6(->nomm), 1<asize), Dt6(->array), LJ_ENDIAN_SELECT(4,0), Dt6(->metatable), Dt6(->nomm), 1<asize), Dt6(->array), Dt6(->marked), LJ_ENDIAN_SELECT(4,0), LJ_GC_BLACK, Dt6(->metatable), Dt6(->nomm), 1<marked), Dt6(->gclist)); + dasm_put(Dst, 5044, LJ_ENDIAN_SELECT(4,0), LJ_ENDIAN_SELECT(4,0), LJ_ENDIAN_SELECT(0,4), LJ_TTAB, LJ_TISNUM, LJ_TSTR, Dt6(->asize), Dt6(->array), Dt6(->marked), LJ_ENDIAN_SELECT(4,0), LJ_GC_BLACK, Dt6(->metatable), Dt6(->nomm), 1<marked), Dt6(->gclist)); break; case BC_TSETS: - dasm_put(Dst, 4939, LJ_ENDIAN_SELECT(4,0), LJ_TTAB, LJ_ENDIAN_SELECT(0,4), Dt6(->hmask), Dt5(->hash), Dt6(->node), Dt6(->nomm), offsetof(Node, key)+LJ_ENDIAN_SELECT(4,0), offsetof(Node, key)+LJ_ENDIAN_SELECT(0,4), LJ_TSTR, DtB(->next), offsetof(Node, val)+LJ_ENDIAN_SELECT(4,0), Dt6(->marked), Dt6(->metatable), LJ_GC_BLACK); - dasm_put(Dst, 4997, DtB(->val), Dt6(->nomm), 1<metatable), DISPATCH_GL(tmptv), Dt6(->nomm), 1<base), Dt1(->base)); - dasm_put(Dst, 5059, DISPATCH_GL(gc.grayagain), ~LJ_GC_BLACK & 255, DISPATCH_GL(gc.grayagain), Dt6(->marked), Dt6(->gclist)); + dasm_put(Dst, 5145, LJ_ENDIAN_SELECT(4,0), LJ_TTAB, LJ_ENDIAN_SELECT(0,4), Dt6(->hmask), Dt5(->hash), Dt6(->node), Dt6(->nomm), offsetof(Node, key)+LJ_ENDIAN_SELECT(4,0), offsetof(Node, key)+LJ_ENDIAN_SELECT(0,4), LJ_TSTR, DtB(->next), offsetof(Node, val)+LJ_ENDIAN_SELECT(4,0), Dt6(->marked), Dt6(->metatable), LJ_GC_BLACK); + dasm_put(Dst, 5203, DtB(->val), Dt6(->nomm), 1<metatable), DISPATCH_GL(tmptv), Dt6(->nomm), 1<base), Dt1(->base)); + dasm_put(Dst, 5265, DISPATCH_GL(gc.grayagain), ~LJ_GC_BLACK & 255, DISPATCH_GL(gc.grayagain), Dt6(->marked), Dt6(->gclist)); break; case BC_TSETB: - dasm_put(Dst, 5076, LJ_ENDIAN_SELECT(4,0), LJ_TTAB, LJ_ENDIAN_SELECT(0,4), Dt6(->asize), Dt6(->array), LJ_ENDIAN_SELECT(4,0), Dt6(->marked), LJ_GC_BLACK, Dt6(->metatable), Dt6(->nomm), 1<marked), Dt6(->gclist)); + dasm_put(Dst, 5282, LJ_ENDIAN_SELECT(4,0), LJ_TTAB, LJ_ENDIAN_SELECT(0,4), Dt6(->asize), Dt6(->array), LJ_ENDIAN_SELECT(4,0), Dt6(->marked), LJ_GC_BLACK, Dt6(->metatable), Dt6(->nomm), 1<marked), Dt6(->gclist)); break; case BC_TSETM: - dasm_put(Dst, 5154, -8+LJ_ENDIAN_SELECT(0,4), LJ_ENDIAN_SELECT(0,4), Dt6(->asize), Dt6(->marked), Dt6(->array), LJ_GC_BLACK, DISPATCH_GOT(lj_tab_reasize), Dt1(->base), Dt1(->base), DISPATCH_GL(gc.grayagain), ~LJ_GC_BLACK & 255, DISPATCH_GL(gc.grayagain), Dt6(->marked)); - dasm_put(Dst, 5227, Dt6(->gclist)); + dasm_put(Dst, 5360, -8+LJ_ENDIAN_SELECT(0,4), LJ_ENDIAN_SELECT(0,4), Dt6(->asize), Dt6(->marked), Dt6(->array), LJ_GC_BLACK, DISPATCH_GOT(lj_tab_reasize), Dt1(->base), Dt1(->base), DISPATCH_GL(gc.grayagain), ~LJ_GC_BLACK & 255, DISPATCH_GL(gc.grayagain), Dt6(->marked)); + dasm_put(Dst, 5433, Dt6(->gclist)); break; /* -- Calls and vararg handling ----------------------------------------- */ case BC_CALLM: - dasm_put(Dst, 5232); + dasm_put(Dst, 5438); break; case BC_CALL: - dasm_put(Dst, 5237, LJ_TFUNC, LJ_ENDIAN_SELECT(4,0), LJ_ENDIAN_SELECT(0,4), LJ_ENDIAN_SELECT(-4,-8), Dt7(->pc)); + dasm_put(Dst, 5443, LJ_TFUNC, LJ_ENDIAN_SELECT(4,0), LJ_ENDIAN_SELECT(0,4), LJ_ENDIAN_SELECT(-4,-8), Dt7(->pc)); break; case BC_CALLMT: - dasm_put(Dst, 5266); + dasm_put(Dst, 5472); break; case BC_CALLT: - dasm_put(Dst, 5268, LJ_TFUNC, LJ_ENDIAN_SELECT(4,0), LJ_ENDIAN_SELECT(0,4), LJ_ENDIAN_SELECT(-4,-8), FRAME_TYPE, Dt7(->ffid), FRAME_VARG, LJ_ENDIAN_SELECT(-8,-4), Dt7(->pc), -8+LJ_ENDIAN_SELECT(-8,-4), Dt7(->pc)); - dasm_put(Dst, 5337, PC2PROTO(k), FRAME_TYPEP, LJ_ENDIAN_SELECT(-4,-8), FRAME_TYPE); + dasm_put(Dst, 5474, LJ_TFUNC, LJ_ENDIAN_SELECT(4,0), LJ_ENDIAN_SELECT(0,4), LJ_ENDIAN_SELECT(-4,-8), FRAME_TYPE, Dt7(->ffid), FRAME_VARG, LJ_ENDIAN_SELECT(-8,-4), Dt7(->pc), -8+LJ_ENDIAN_SELECT(-8,-4), Dt7(->pc)); + dasm_put(Dst, 5543, PC2PROTO(k), FRAME_TYPEP, LJ_ENDIAN_SELECT(-4,-8), FRAME_TYPE); break; case BC_ITERC: - dasm_put(Dst, 5353, LJ_TFUNC, -24+LJ_ENDIAN_SELECT(4,0), -24+LJ_ENDIAN_SELECT(0,4), LJ_ENDIAN_SELECT(4,0), LJ_ENDIAN_SELECT(0,4), LJ_ENDIAN_SELECT(-4,-8), Dt7(->pc)); + dasm_put(Dst, 5559, LJ_TFUNC, -24+LJ_ENDIAN_SELECT(4,0), -24+LJ_ENDIAN_SELECT(0,4), LJ_ENDIAN_SELECT(4,0), LJ_ENDIAN_SELECT(0,4), LJ_ENDIAN_SELECT(-4,-8), Dt7(->pc)); break; case BC_ITERN: #if LJ_HASJIT #endif - dasm_put(Dst, 5388, -16+LJ_ENDIAN_SELECT(0,4), -8+LJ_ENDIAN_SELECT(0,4), Dt6(->asize), Dt6(->array), LJ_ENDIAN_SELECT(4,0), -4+LJ_ENDIAN_SELECT(2,0), (-(BCBIAS_J*4 >> 16) & 65535), -8+LJ_ENDIAN_SELECT(0,4), Dt6(->hmask), Dt6(->node), LJ_ENDIAN_SELECT(4,0), -4+LJ_ENDIAN_SELECT(2,0), DtB(->key), (-(BCBIAS_J*4 >> 16) & 65535)); - dasm_put(Dst, 5470, -8+LJ_ENDIAN_SELECT(0,4)); + dasm_put(Dst, 5594, -16+LJ_ENDIAN_SELECT(0,4), -8+LJ_ENDIAN_SELECT(0,4), Dt6(->asize), Dt6(->array), LJ_ENDIAN_SELECT(4,0), -4+LJ_ENDIAN_SELECT(2,0), (-(BCBIAS_J*4 >> 16) & 65535), -8+LJ_ENDIAN_SELECT(0,4), Dt6(->hmask), Dt6(->node), LJ_ENDIAN_SELECT(4,0), -4+LJ_ENDIAN_SELECT(2,0), DtB(->key), (-(BCBIAS_J*4 >> 16) & 65535)); + dasm_put(Dst, 5676, -8+LJ_ENDIAN_SELECT(0,4)); break; case BC_ISNEXT: - dasm_put(Dst, 5473, -24+LJ_ENDIAN_SELECT(4,0), -24+LJ_ENDIAN_SELECT(0,4), -16+LJ_ENDIAN_SELECT(4,0), -8+LJ_ENDIAN_SELECT(4,0), LJ_TFUNC, -LJ_TTAB, Dt8(->ffid), -LJ_TNIL, -FF_next_N, (-(BCBIAS_J*4 >> 16) & 65535), -8+LJ_ENDIAN_SELECT(0,4), BC_JMP, BC_ITERC, -4+LJ_ENDIAN_SELECT(0,3), LJ_ENDIAN_SELECT(0,3)); + dasm_put(Dst, 5679, -24+LJ_ENDIAN_SELECT(4,0), -24+LJ_ENDIAN_SELECT(0,4), -16+LJ_ENDIAN_SELECT(4,0), -8+LJ_ENDIAN_SELECT(4,0), LJ_TFUNC, -LJ_TTAB, Dt8(->ffid), -LJ_TNIL, -FF_next_N, (-(BCBIAS_J*4 >> 16) & 65535), -8+LJ_ENDIAN_SELECT(0,4), BC_JMP, BC_ITERC, -4+LJ_ENDIAN_SELECT(0,3), LJ_ENDIAN_SELECT(0,3)); break; case BC_VARG: - dasm_put(Dst, 5530, LJ_ENDIAN_SELECT(-4,-8), FRAME_VARG, LJ_ENDIAN_SELECT(4,0), LJ_ENDIAN_SELECT(0,4), LJ_ENDIAN_SELECT(4,0), LJ_ENDIAN_SELECT(0,4), Dt1(->maxstack), DISPATCH_GOT(lj_state_growstack), Dt1(->top), Dt1(->base), Dt1(->base)); - dasm_put(Dst, 5617); + dasm_put(Dst, 5736, LJ_ENDIAN_SELECT(-4,-8), FRAME_VARG, LJ_ENDIAN_SELECT(4,0), LJ_ENDIAN_SELECT(0,4), LJ_ENDIAN_SELECT(4,0), LJ_ENDIAN_SELECT(0,4), Dt1(->maxstack), DISPATCH_GOT(lj_state_growstack), Dt1(->top), Dt1(->base), Dt1(->base)); + dasm_put(Dst, 5823); break; /* -- Returns ----------------------------------------------------------- */ case BC_RETM: - dasm_put(Dst, 5619); + dasm_put(Dst, 5825); break; case BC_RET: - dasm_put(Dst, 5621, LJ_ENDIAN_SELECT(-4,-8), FRAME_TYPE, FRAME_VARG, LJ_ENDIAN_SELECT(-8,-4), Dt7(->pc), PC2PROTO(k), LJ_ENDIAN_SELECT(4,0), FRAME_TYPEP, LJ_ENDIAN_SELECT(-4,-8)); + dasm_put(Dst, 5827, LJ_ENDIAN_SELECT(-4,-8), FRAME_TYPE, FRAME_VARG, LJ_ENDIAN_SELECT(-8,-4), Dt7(->pc), PC2PROTO(k), LJ_ENDIAN_SELECT(4,0), FRAME_TYPEP, LJ_ENDIAN_SELECT(-4,-8)); break; case BC_RET0: case BC_RET1: - dasm_put(Dst, 5693, LJ_ENDIAN_SELECT(-4,-8), FRAME_TYPE, FRAME_VARG); + dasm_put(Dst, 5899, LJ_ENDIAN_SELECT(-4,-8), FRAME_TYPE, FRAME_VARG); if (op == BC_RET1) { - dasm_put(Dst, 5706); + dasm_put(Dst, 5912); } - dasm_put(Dst, 5708); + dasm_put(Dst, 5914); if (op == BC_RET1) { - dasm_put(Dst, 5713); + dasm_put(Dst, 5919); } - dasm_put(Dst, 5715, LJ_ENDIAN_SELECT(-8,-4), Dt7(->pc), PC2PROTO(k)); + dasm_put(Dst, 5921, LJ_ENDIAN_SELECT(-8,-4), Dt7(->pc), PC2PROTO(k)); if (op == BC_RET1) { - dasm_put(Dst, 5743, LJ_ENDIAN_SELECT(4,0)); + dasm_put(Dst, 5949, LJ_ENDIAN_SELECT(4,0)); } else { - dasm_put(Dst, 5746, -8+LJ_ENDIAN_SELECT(4,0)); + dasm_put(Dst, 5952, -8+LJ_ENDIAN_SELECT(4,0)); } break; @@ -6962,7 +7211,7 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop) case BC_FORL: #if LJ_HASJIT - dasm_put(Dst, 5749); + dasm_put(Dst, 5955, GG_DISP2HOT, -HOTCOUNT_LOOP, GG_DISP2HOT); #endif break; @@ -6974,35 +7223,35 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop) case BC_FORI: case BC_IFORL: vk = (op == BC_IFORL || op == BC_JFORL); - dasm_put(Dst, 5751); + dasm_put(Dst, 5967); if (vk) { - dasm_put(Dst, 5753, FORL_IDX*8, FORL_STEP*8, FORL_STOP*8, FORL_STEP*8+LJ_ENDIAN_SELECT(4,0), FORL_IDX*8); + dasm_put(Dst, 5969, FORL_IDX*8, FORL_STEP*8, FORL_STOP*8, FORL_STEP*8+LJ_ENDIAN_SELECT(4,0), FORL_IDX*8); } else { - dasm_put(Dst, 5765, FORL_IDX*8+LJ_ENDIAN_SELECT(4,0), FORL_STEP*8+LJ_ENDIAN_SELECT(4,0), FORL_STOP*8+LJ_ENDIAN_SELECT(4,0), LJ_TISNUM, LJ_TISNUM, LJ_TISNUM, FORL_IDX*8, FORL_STOP*8); + dasm_put(Dst, 5981, FORL_IDX*8+LJ_ENDIAN_SELECT(4,0), FORL_STEP*8+LJ_ENDIAN_SELECT(4,0), FORL_STOP*8+LJ_ENDIAN_SELECT(4,0), LJ_TISNUM, LJ_TISNUM, LJ_TISNUM, FORL_IDX*8, FORL_STOP*8); } if (op != BC_JFORL) { - dasm_put(Dst, 5786, (-(BCBIAS_J*4 >> 16) & 65535)); + dasm_put(Dst, 6002, (-(BCBIAS_J*4 >> 16) & 65535)); } - dasm_put(Dst, 5790, FORL_EXT*8); + dasm_put(Dst, 6006, FORL_EXT*8); if (op == BC_JFORI) { - dasm_put(Dst, 5795, BC_JLOOP); + dasm_put(Dst, 6011, -4+LJ_ENDIAN_SELECT(2,0), BC_JLOOP); } else if (op == BC_JFORL) { - dasm_put(Dst, 5808, BC_JLOOP); + dasm_put(Dst, 6025, BC_JLOOP); } else { - dasm_put(Dst, 5818); + dasm_put(Dst, 6035); if (op == BC_FORI) { - dasm_put(Dst, 5822); + dasm_put(Dst, 6039); } else { - dasm_put(Dst, 5825); + dasm_put(Dst, 6042); } - dasm_put(Dst, 5828); + dasm_put(Dst, 6045); } - dasm_put(Dst, 5831); + dasm_put(Dst, 6048); break; case BC_ITERL: #if LJ_HASJIT - dasm_put(Dst, 5843); + dasm_put(Dst, 6060, GG_DISP2HOT, -HOTCOUNT_LOOP, GG_DISP2HOT); #endif break; @@ -7011,40 +7260,40 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop) break; #endif case BC_IITERL: - dasm_put(Dst, 5845, LJ_ENDIAN_SELECT(4,0), LJ_ENDIAN_SELECT(0,4)); + dasm_put(Dst, 6072, LJ_ENDIAN_SELECT(4,0), LJ_ENDIAN_SELECT(0,4)); if (op == BC_JITERL) { - dasm_put(Dst, 5853, -8+LJ_ENDIAN_SELECT(4,0), BC_JLOOP, -8+LJ_ENDIAN_SELECT(0,4)); + dasm_put(Dst, 6080, -8+LJ_ENDIAN_SELECT(4,0), BC_JLOOP, -8+LJ_ENDIAN_SELECT(0,4)); } else { - dasm_put(Dst, 5860, (-(BCBIAS_J*4 >> 16) & 65535), -8+LJ_ENDIAN_SELECT(4,0), -8+LJ_ENDIAN_SELECT(0,4)); + dasm_put(Dst, 6087, (-(BCBIAS_J*4 >> 16) & 65535), -8+LJ_ENDIAN_SELECT(4,0), -8+LJ_ENDIAN_SELECT(0,4)); } - dasm_put(Dst, 5870); + dasm_put(Dst, 6097); break; case BC_LOOP: #if LJ_HASJIT - dasm_put(Dst, 5883); + dasm_put(Dst, 6110, GG_DISP2HOT, -HOTCOUNT_LOOP, GG_DISP2HOT); #endif break; case BC_ILOOP: - dasm_put(Dst, 5885); + dasm_put(Dst, 6122); break; case BC_JLOOP: #if LJ_HASJIT - dasm_put(Dst, 5897, DISPATCH_J(trace), DISPATCH_GL(vmstate), DISPATCH_GL(jit_base), DISPATCH_GL(jit_L), DtD(->mcode), GG_DISP2G+32768); + dasm_put(Dst, 6134, DISPATCH_J(trace), DISPATCH_GL(vmstate), DISPATCH_GL(jit_base), DISPATCH_GL(jit_L), DtD(->mcode), GG_DISP2G+32768); #endif break; case BC_JMP: - dasm_put(Dst, 5915, (-(BCBIAS_J*4 >> 16) & 65535)); + dasm_put(Dst, 6152, (-(BCBIAS_J*4 >> 16) & 65535)); break; /* -- Function headers -------------------------------------------------- */ case BC_FUNCF: #if LJ_HASJIT - dasm_put(Dst, 5932); + dasm_put(Dst, 6169, GG_DISP2HOT, -HOTCOUNT_CALL, GG_DISP2HOT); #endif case BC_FUNCV: /* NYI: compiled vararg functions. */ break; @@ -7054,42 +7303,42 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop) break; #endif case BC_IFUNCF: - dasm_put(Dst, 5934, Dt1(->maxstack), -4+PC2PROTO(numparams), -4+PC2PROTO(k)); + dasm_put(Dst, 6181, Dt1(->maxstack), -4+PC2PROTO(numparams), -4+PC2PROTO(k)); if (op != BC_JFUNCF) { - dasm_put(Dst, 5945); + dasm_put(Dst, 6192); } - dasm_put(Dst, 5948); + dasm_put(Dst, 6195); if (op == BC_JFUNCF) { - dasm_put(Dst, 5954, BC_JLOOP); + dasm_put(Dst, 6201, BC_JLOOP); } else { - dasm_put(Dst, 5959); + dasm_put(Dst, 6206); } - dasm_put(Dst, 5969, LJ_ENDIAN_SELECT(4,0)); + dasm_put(Dst, 6216, LJ_ENDIAN_SELECT(4,0)); break; case BC_JFUNCV: #if !LJ_HASJIT break; #endif - dasm_put(Dst, 5976); + dasm_put(Dst, 6223); break; /* NYI: compiled vararg functions. */ case BC_IFUNCV: - dasm_put(Dst, 5978, Dt1(->maxstack), LJ_ENDIAN_SELECT(0,4), 8+FRAME_VARG, -4+PC2PROTO(k), LJ_ENDIAN_SELECT(4,0), -4+PC2PROTO(numparams), LJ_ENDIAN_SELECT(4,0), LJ_ENDIAN_SELECT(0,4), 8+LJ_ENDIAN_SELECT(0,4), 8+LJ_ENDIAN_SELECT(4,0), LJ_ENDIAN_SELECT(4,0)); + dasm_put(Dst, 6225, Dt1(->maxstack), LJ_ENDIAN_SELECT(0,4), 8+FRAME_VARG, -4+PC2PROTO(k), LJ_ENDIAN_SELECT(4,0), -4+PC2PROTO(numparams), LJ_ENDIAN_SELECT(4,0), LJ_ENDIAN_SELECT(0,4), 8+LJ_ENDIAN_SELECT(0,4), 8+LJ_ENDIAN_SELECT(4,0), LJ_ENDIAN_SELECT(4,0)); break; case BC_FUNCC: case BC_FUNCCW: if (op == BC_FUNCC) { - dasm_put(Dst, 6033, Dt8(->f)); + dasm_put(Dst, 6280, Dt8(->f)); } else { - dasm_put(Dst, 6036, DISPATCH_GL(wrapf)); + dasm_put(Dst, 6283, DISPATCH_GL(wrapf)); } - dasm_put(Dst, 6039, Dt1(->maxstack), Dt1(->base), Dt1(->top), ~LJ_VMST_C); + dasm_put(Dst, 6286, Dt1(->maxstack), Dt1(->base), Dt1(->top), ~LJ_VMST_C); if (op == BC_FUNCCW) { - dasm_put(Dst, 6051, Dt8(->f)); + dasm_put(Dst, 6298, Dt8(->f)); } - dasm_put(Dst, 6054, DISPATCH_GL(vmstate), Dt1(->base), Dt1(->top), ~LJ_VMST_INTERP, LJ_ENDIAN_SELECT(-4,-8), DISPATCH_GL(vmstate)); + dasm_put(Dst, 6301, DISPATCH_GL(vmstate), Dt1(->base), Dt1(->top), ~LJ_VMST_INTERP, LJ_ENDIAN_SELECT(-4,-8), DISPATCH_GL(vmstate)); break; /* ---------------------------------------------------------------------- */ @@ -7109,7 +7358,7 @@ static int build_backend(BuildCtx *ctx) build_subroutines(ctx); - dasm_put(Dst, 6075); + dasm_put(Dst, 6322); for (op = 0; op < BC__MAX; op++) build_ins(ctx, (BCOp)op, op);