diff --git a/src/buildvm_ppc.dasc b/src/buildvm_ppc.dasc index d9239d6b..06fc5078 100644 --- a/src/buildvm_ppc.dasc +++ b/src/buildvm_ppc.dasc @@ -1098,8 +1098,11 @@ static void build_subroutines(BuildCtx *ctx) | checktab TAB:CARG1 | lwz PC, FRAME_PC(BASE) | checkfail ->fff_fallback + | lwz TAB:TMP2, TAB:CARG1->metatable | evldd CFUNC:TMP0, CFUNC:RB->upvalue[0] + | cmplwi TAB:TMP2, 0 | la RA, -8(BASE) + | bne ->fff_fallback | evstdd TAB:CARG1, 0(BASE) | evstdd TISNIL, 8(BASE) | li RD, (3+1)*8 @@ -1150,8 +1153,11 @@ static void build_subroutines(BuildCtx *ctx) | checktab TAB:CARG1 | lwz PC, FRAME_PC(BASE) | checkfail ->fff_fallback + | lwz TAB:TMP2, TAB:CARG1->metatable | evldd CFUNC:TMP0, CFUNC:RB->upvalue[0] + | cmplwi TAB:TMP2, 0 | la RA, -8(BASE) + | bne ->fff_fallback | evsplati TMP1, 0 | evstdd TAB:CARG1, 0(BASE) | evstdd TMP1, 8(BASE) diff --git a/src/buildvm_ppcspe.h b/src/buildvm_ppcspe.h index 0cedee2c..f3af36b0 100644 --- a/src/buildvm_ppcspe.h +++ b/src/buildvm_ppcspe.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[4907] = { +static const unsigned int build_actionlist[4918] = { 0x00010001, 0x00060014, 0x72000000, @@ -1056,9 +1056,14 @@ static const unsigned int build_actionlist[4907] = { 0x40800000, 0x00050842, 0x00000000, +0x81230000, +0x00098200, 0x100a0301, 0x00090cab, +0x28090000, 0x3a8efff8, +0x40820000, +0x00050842, 0x106e0321, 0x134e0b21, 0x39800000, @@ -1115,13 +1120,13 @@ static const unsigned int build_actionlist[4907] = { 0x00098200, 0x41820000, 0x00050843, +0x00000000, 0x7d244b78, 0x48000001, 0x0003000c, 0x28030000, 0x39800000, 0x00098200, -0x00000000, 0x41820000, 0x00050843, 0x11030301, @@ -1136,9 +1141,14 @@ static const unsigned int build_actionlist[4907] = { 0x820efff8, 0x40800000, 0x00050842, +0x81230000, +0x00098200, 0x100a0301, 0x00090cab, +0x28090000, 0x3a8efff8, +0x40820000, +0x00050842, 0x11000229, 0x106e0321, 0x110e0b21, @@ -1174,6 +1184,7 @@ static const unsigned int build_actionlist[4907] = { 0x1004ca34, 0x40800000, 0x00050842, +0x00000000, 0x39ce0010, 0x54c607fe, 0x000900ab, @@ -1185,7 +1196,6 @@ static const unsigned int build_actionlist[4907] = { 0x48000000, 0x00050024, 0x00060052, -0x00000000, 0x280b0008, 0x106e0301, 0x41800000, @@ -1240,6 +1250,7 @@ static const unsigned int build_actionlist[4907] = { 0x48000000, 0x0005000c, 0x0006000d, +0x00000000, 0x38a00000, 0x7c751b78, 0x38c00000, @@ -1250,7 +1261,6 @@ static const unsigned int build_actionlist[4907] = { 0x00098200, 0x28030000, 0x00090200, -0x00000000, 0x80d50000, 0x00098200, 0x38000000, @@ -1298,6 +1308,7 @@ static const unsigned int build_actionlist[4907] = { 0x48000000, 0x00050018, 0x00060012, +0x00000000, 0x72000000, 0x00090200, 0x38c6fff8, @@ -1308,7 +1319,6 @@ static const unsigned int build_actionlist[4907] = { 0x00098200, 0x39800000, 0x00098200, -0x00000000, 0x910efff8, 0x3a8efff8, 0x100e0321, @@ -1359,6 +1369,7 @@ static const unsigned int build_actionlist[4907] = { 0x91d20000, 0x00098200, 0x0006000c, +0x00000000, 0x7c085800, 0x100e4300, 0x41820000, @@ -1368,7 +1379,6 @@ static const unsigned int build_actionlist[4907] = { 0x48000000, 0x0005000c, 0x0006000d, -0x00000000, 0x38a00000, 0x7c751b78, 0x38c00000, @@ -1420,6 +1430,7 @@ static const unsigned int build_actionlist[4907] = { 0x7d936378, 0x41820000, 0x00050817, +0x00000000, 0x48000000, 0x00050018, 0x00060012, @@ -1428,7 +1439,6 @@ static const unsigned int build_actionlist[4907] = { 0x48000001, 0x0003000d, 0x00060013, -0x00000000, 0x7e439378, 0x558400fe, 0x000900ab, @@ -1471,6 +1481,7 @@ static const unsigned int build_actionlist[4907] = { 0x3a8efff8, 0x10740321, 0x00060056, +0x00000000, 0x39800000, 0x00098200, 0x00060043, @@ -1479,7 +1490,6 @@ static const unsigned int build_actionlist[4907] = { 0x7d936378, 0x40820000, 0x00050818, -0x00000000, 0x80f0fffc, 0x54ea5d78, 0x0006000f, @@ -1547,6 +1557,7 @@ static const unsigned int build_actionlist[4907] = { 0x00050842, 0x48000001, 0x0003000e, +0x00000000, 0x1063222d, 0x48000000, 0x00050045, @@ -1559,7 +1570,6 @@ static const unsigned int build_actionlist[4907] = { 0x1064222c, 0x40800000, 0x00050842, -0x00000000, 0x48000001, 0x0003000f, 0x1063222d, @@ -1608,6 +1618,7 @@ static const unsigned int build_actionlist[4907] = { 0x48000000, 0x00050045, 0x00060060, +0x00000000, 0x280b0008, 0x108e0301, 0x41800000, @@ -1622,7 +1633,6 @@ static const unsigned int build_actionlist[4907] = { 0x48000000, 0x00050045, 0x00060061, -0x00000000, 0x280b0008, 0x108e0301, 0x41800000, @@ -1673,6 +1683,7 @@ static const unsigned int build_actionlist[4907] = { 0x1064222c, 0x40800000, 0x00050842, +0x00000000, 0x48000001, 0x00030017, 0x1063222d, @@ -1687,7 +1698,6 @@ static const unsigned int build_actionlist[4907] = { 0x1064222c, 0x40800000, 0x00050842, -0x00000000, 0x48000001, 0x00030018, 0x1063222d, @@ -1738,6 +1748,7 @@ static const unsigned int build_actionlist[4907] = { 0x48000000, 0x00050045, 0x00060069, +0x00000000, 0x280b0010, 0x108e0301, 0x10ce0b01, @@ -1754,7 +1765,6 @@ static const unsigned int build_actionlist[4907] = { 0x48000000, 0x00050045, 0x0006006a, -0x00000000, 0x280b0010, 0x108e0301, 0x10ce0b01, @@ -1805,6 +1815,7 @@ static const unsigned int build_actionlist[4907] = { 0x108e0301, 0x41800000, 0x00050842, +0x00000000, 0x1004b232, 0x1064222c, 0x40800000, @@ -1822,7 +1833,6 @@ static const unsigned int build_actionlist[4907] = { 0x10740321, 0x39800000, 0x00098200, -0x00000000, 0x10940b21, 0x48000000, 0x00050043, @@ -1879,6 +1889,7 @@ static const unsigned int build_actionlist[4907] = { 0x40800000, 0x00050842, 0x0006000b, +0x00000000, 0x108e4300, 0x7c885840, 0x1004b232, @@ -1893,7 +1904,6 @@ static const unsigned int build_actionlist[4907] = { 0x48000000, 0x0005000b, 0x00060072, -0x00000000, 0x280b0008, 0x106e0301, 0x41800000, @@ -1945,6 +1955,7 @@ static const unsigned int build_actionlist[4907] = { 0x1003b232, 0x38910000, 0x00098200, +0x00000000, 0x40800000, 0x00050842, 0x10001afa, @@ -1957,7 +1968,6 @@ static const unsigned int build_actionlist[4907] = { 0x7e439378, 0x91d20000, 0x00098200, -0x00000000, 0x9201000c, 0x48000001, 0x00030021, @@ -2007,6 +2017,7 @@ static const unsigned int build_actionlist[4907] = { 0x40810000, 0x00050807, 0x0006000d, +0x00000000, 0x7ca84851, 0x38830000, 0x00098200, @@ -2022,7 +2033,6 @@ static const unsigned int build_actionlist[4907] = { 0x48000000, 0x0005000c, 0x00060011, -0x00000000, 0x2c860000, 0x7d00309e, 0x7d00411e, @@ -2070,6 +2080,7 @@ static const unsigned int build_actionlist[4907] = { 0x41840000, 0x00050842, 0x0006000b, +0x00000000, 0x28090000, 0x7c0449ae, 0x3929ffff, @@ -2084,7 +2095,6 @@ static const unsigned int build_actionlist[4907] = { 0x48000000, 0x00050045, 0x00060078, -0x00000000, 0x80110000, 0x00098200, 0x81110000, @@ -2127,6 +2137,7 @@ static const unsigned int build_actionlist[4907] = { 0x00098200, 0x81110000, 0x00098200, +0x00000000, 0x7c004040, 0x40800001, 0x0005084b, @@ -2143,7 +2154,6 @@ static const unsigned int build_actionlist[4907] = { 0x00098200, 0x38630000, 0x00098200, -0x00000000, 0x80910000, 0x00098200, 0x7c082840, @@ -2191,6 +2201,7 @@ static const unsigned int build_actionlist[4907] = { 0x41800000, 0x00050842, 0x0006000b, +0x00000000, 0x7c092840, 0x7d0348ae, 0x40800000, @@ -2211,7 +2222,6 @@ static const unsigned int build_actionlist[4907] = { 0x1003c234, 0x40800000, 0x00050842, -0x00000000, 0x48000001, 0x00030022, 0x10601af1, @@ -2261,6 +2271,7 @@ static const unsigned int build_actionlist[4907] = { 0x1003b232, 0x40800000, 0x00050842, +0x00000000, 0x1063dae0, 0x39000008, 0x0006000b, @@ -2277,7 +2288,6 @@ static const unsigned int build_actionlist[4907] = { 0x48000000, 0x0005000b, 0x00060080, -0x00000000, 0x280b0008, 0x106e0301, 0x41800000, @@ -2338,6 +2348,7 @@ static const unsigned int build_actionlist[4907] = { 0x1000b232, 0x40830000, 0x00050842, +0x00000000, 0x1084dae0, 0x1063dae0, 0x548406fe, @@ -2363,7 +2374,6 @@ static const unsigned int build_actionlist[4907] = { 0x48000000, 0x00050045, 0x00060085, -0x00000000, 0x280b0010, 0x106e0301, 0x108e0b01, @@ -2426,6 +2436,7 @@ static const unsigned int build_actionlist[4907] = { 0x7c004840, 0x91d20000, 0x00098200, +0x00000000, 0x91120000, 0x00098200, 0x7e439378, @@ -2442,7 +2453,6 @@ static const unsigned int build_actionlist[4907] = { 0x41810000, 0x00050843, 0x0006000b, -0x00000000, 0x80120000, 0x00098200, 0x814efffc, @@ -2490,6 +2500,7 @@ static const unsigned int build_actionlist[4907] = { 0x9201000c, 0x90120000, 0x00098200, +0x00000000, 0x7e439378, 0x48000001, 0x00030023, @@ -5297,74 +5308,75 @@ static void build_subroutines(BuildCtx *ctx) dasm_put(Dst, 854, Dt6(->hmask), Dt5(->hash), Dt6(->node), 31-5, 31-3, DtB(->key), DtB(->val), DtB(->next), LJ_TUDATA, 31-2, 4*~LJ_TNUMX, DISPATCH_GL(gcroot[GCROOT_BASEMT])); dasm_put(Dst, 910, Dt6(->metatable), Dt6(->marked), LJ_GC_BLACK, Dt6(->metatable), DISPATCH_GL(gc.grayagain), DISPATCH_GL(gc.grayagain), Dt6(->marked), Dt6(->gclist)); dasm_put(Dst, 970, DISPATCH_GL(gcroot[GCROOT_BASEMT_NUM]), Dt1(->base), DISPATCH_GL(gc.total), DISPATCH_GL(gc.threshold), Dt1(->base), Dt1(->top), (2+1)*8); - dasm_put(Dst, 1043, Dt8(->upvalue[0]), (3+1)*8, Dt6(->asize), Dt6(->array), 31-3, (0+1)*8, (2+1)*8, Dt6(->hmask), (0+1)*8, (0+1)*8); - dasm_put(Dst, 1109, Dt8(->upvalue[0]), (3+1)*8, DISPATCH_GL(hookmask), 32-HOOK_ACTIVE_SHIFT, 8+FRAME_PCALL, DISPATCH_GL(hookmask), 32-HOOK_ACTIVE_SHIFT, 16+FRAME_PCALL); - dasm_put(Dst, 1173, LJ_TTHREAD, Dt1(->status), Dt1(->cframe), Dt1(->top), LUA_YIELD, Dt1(->base), Dt1(->maxstack), Dt1(->base), Dt1(->top), Dt1(->top), Dt1(->base), LUA_YIELD); - dasm_put(Dst, 1238, Dt1(->top), ~LJ_VMST_INTERP, Dt1(->base), DISPATCH_GL(vmstate), Dt1(->maxstack), Dt1(->top), FRAME_TYPE, LJ_TTRUE, FRAME_TYPE, LJ_TFALSE, Dt1(->top), (2+1)*8); - dasm_put(Dst, 1296, 32-3, Dt8(->upvalue[0].gcr), Dt1(->status), Dt1(->cframe), Dt1(->top), LUA_YIELD, Dt1(->base), Dt1(->maxstack), Dt1(->base), Dt1(->top), Dt1(->top)); - dasm_put(Dst, 1356, Dt1(->base), LUA_YIELD, Dt1(->top), ~LJ_VMST_INTERP, Dt1(->base), DISPATCH_GL(vmstate), Dt1(->maxstack), Dt1(->top), FRAME_TYPE); - dasm_put(Dst, 1416, 32-3, Dt1(->cframe), Dt1(->base), CFRAME_RESUME, Dt1(->top), LUA_YIELD, Dt1(->cframe), Dt1(->status), (1+1)*8, FRAME_TYPE); - dasm_put(Dst, 1467); - dasm_put(Dst, 1547); - dasm_put(Dst, 1610); - dasm_put(Dst, 1675); - dasm_put(Dst, 1742, Dt8(->upvalue[0]), DISPATCH_GL(tmptv), DISPATCH_GL(tmptv), (2+1)*8); - dasm_put(Dst, 1810, (2+1)*8); - dasm_put(Dst, 1881, Dt5(->len), Dt5(->len), (0+1)*8, Dt5([1]), (1+1)*8, DISPATCH_GL(gc.total), DISPATCH_GL(gc.threshold), DISPATCH_GL(tmptv), Dt1(->base)); - dasm_put(Dst, 1945, Dt1(->base), DISPATCH_GL(gc.total), DISPATCH_GL(gc.threshold), Dt5(->len), sizeof(GCstr)-1); - dasm_put(Dst, 2010, DISPATCH_GL(gc.total), DISPATCH_GL(gc.threshold), Dt5(->len), DISPATCH_GL(tmpbuf.sz), Dt5([1]), DISPATCH_GL(tmpbuf.buf), DISPATCH_GL(strempty)); - dasm_put(Dst, 2072, DISPATCH_GL(gc.total), DISPATCH_GL(gc.threshold), DISPATCH_GL(tmpbuf.sz), Dt5(->len), sizeof(GCstr), DISPATCH_GL(tmpbuf.buf), DISPATCH_GL(gc.total), DISPATCH_GL(gc.threshold), DISPATCH_GL(tmpbuf.sz), Dt5(->len), sizeof(GCstr)); - dasm_put(Dst, 2131, DISPATCH_GL(tmpbuf.buf), DISPATCH_GL(gc.total), DISPATCH_GL(gc.threshold), DISPATCH_GL(tmpbuf.sz), Dt5(->len), sizeof(GCstr), DISPATCH_GL(tmpbuf.buf)); - dasm_put(Dst, 2199); - dasm_put(Dst, 2265); - dasm_put(Dst, 2351, Dt8(->f), 8*LUA_MINSTACK-8, Dt1(->maxstack), Dt1(->base), Dt1(->top), Dt1(->base), 31-3); - dasm_put(Dst, 2430, Dt1(->top), Dt7(->pc), FRAME_TYPE, LUA_MINSTACK, Dt1(->base), Dt1(->base), Dt1(->top), Dt1(->base), Dt1(->top)); + dasm_put(Dst, 1043, Dt6(->metatable), Dt8(->upvalue[0]), (3+1)*8, Dt6(->asize), Dt6(->array), 31-3, (0+1)*8, (2+1)*8, Dt6(->hmask), (0+1)*8); + dasm_put(Dst, 1108, (0+1)*8, Dt6(->metatable), Dt8(->upvalue[0]), (3+1)*8, DISPATCH_GL(hookmask), 32-HOOK_ACTIVE_SHIFT, 8+FRAME_PCALL, DISPATCH_GL(hookmask)); + dasm_put(Dst, 1172, 32-HOOK_ACTIVE_SHIFT, 16+FRAME_PCALL, LJ_TTHREAD, Dt1(->status), Dt1(->cframe), Dt1(->top), LUA_YIELD, Dt1(->base), Dt1(->maxstack), Dt1(->base), Dt1(->top), Dt1(->top)); + dasm_put(Dst, 1238, Dt1(->base), LUA_YIELD, Dt1(->top), ~LJ_VMST_INTERP, Dt1(->base), DISPATCH_GL(vmstate), Dt1(->maxstack), Dt1(->top), FRAME_TYPE, LJ_TTRUE); + dasm_put(Dst, 1296, FRAME_TYPE, LJ_TFALSE, Dt1(->top), (2+1)*8, 32-3, Dt8(->upvalue[0].gcr), Dt1(->status), Dt1(->cframe), Dt1(->top), LUA_YIELD, Dt1(->base), Dt1(->maxstack), Dt1(->base), Dt1(->top), Dt1(->top)); + dasm_put(Dst, 1357, Dt1(->base), LUA_YIELD, Dt1(->top), ~LJ_VMST_INTERP, Dt1(->base), DISPATCH_GL(vmstate), Dt1(->maxstack), Dt1(->top), FRAME_TYPE); + dasm_put(Dst, 1418, 32-3, Dt1(->cframe), Dt1(->base), CFRAME_RESUME, Dt1(->top), LUA_YIELD, Dt1(->cframe), Dt1(->status)); + dasm_put(Dst, 1469, (1+1)*8, FRAME_TYPE); + dasm_put(Dst, 1545); + dasm_put(Dst, 1606); + dasm_put(Dst, 1671); + dasm_put(Dst, 1736, Dt8(->upvalue[0])); + dasm_put(Dst, 1803, DISPATCH_GL(tmptv), DISPATCH_GL(tmptv), (2+1)*8, (2+1)*8); + dasm_put(Dst, 1877, Dt5(->len), Dt5(->len), (0+1)*8, Dt5([1]), (1+1)*8, DISPATCH_GL(gc.total), DISPATCH_GL(gc.threshold), DISPATCH_GL(tmptv)); + dasm_put(Dst, 1943, Dt1(->base), Dt1(->base), DISPATCH_GL(gc.total), DISPATCH_GL(gc.threshold), Dt5(->len)); + dasm_put(Dst, 2005, sizeof(GCstr)-1, DISPATCH_GL(gc.total), DISPATCH_GL(gc.threshold), Dt5(->len), DISPATCH_GL(tmpbuf.sz), Dt5([1]), DISPATCH_GL(tmpbuf.buf)); + dasm_put(Dst, 2068, DISPATCH_GL(strempty), DISPATCH_GL(gc.total), DISPATCH_GL(gc.threshold), DISPATCH_GL(tmpbuf.sz), Dt5(->len), sizeof(GCstr), DISPATCH_GL(tmpbuf.buf), DISPATCH_GL(gc.total), DISPATCH_GL(gc.threshold)); + dasm_put(Dst, 2125, DISPATCH_GL(tmpbuf.sz), Dt5(->len), sizeof(GCstr), DISPATCH_GL(tmpbuf.buf), DISPATCH_GL(gc.total), DISPATCH_GL(gc.threshold), DISPATCH_GL(tmpbuf.sz), Dt5(->len), sizeof(GCstr), DISPATCH_GL(tmpbuf.buf)); + dasm_put(Dst, 2189); + dasm_put(Dst, 2259); + dasm_put(Dst, 2336, Dt8(->f), 8*LUA_MINSTACK-8, Dt1(->maxstack), Dt1(->base)); + dasm_put(Dst, 2424, Dt1(->top), Dt1(->base), 31-3, Dt1(->top), Dt7(->pc), FRAME_TYPE, LUA_MINSTACK, Dt1(->base), Dt1(->base), Dt1(->top)); + dasm_put(Dst, 2488, Dt1(->base), Dt1(->top)); #if LJ_HASJIT - dasm_put(Dst, 2490); + dasm_put(Dst, 2501); #endif - dasm_put(Dst, 2492, 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, 2539, GG_DISP2STATIC); + dasm_put(Dst, 2503, 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, 2550, GG_DISP2STATIC); #if LJ_HASJIT - dasm_put(Dst, 2557); + dasm_put(Dst, 2568); #endif - dasm_put(Dst, 2559); + dasm_put(Dst, 2570); #if LJ_HASJIT - dasm_put(Dst, 2562); + dasm_put(Dst, 2573); #endif - dasm_put(Dst, 2565); + dasm_put(Dst, 2576); #if LJ_HASJIT - dasm_put(Dst, 2567); + dasm_put(Dst, 2578); #endif - dasm_put(Dst, 2570, Dt1(->base), Dt1(->top), Dt1(->base), Dt1(->top)); + dasm_put(Dst, 2581, Dt1(->base), Dt1(->top), Dt1(->base), Dt1(->top)); #if LJ_HASJIT - dasm_put(Dst, 2592); + dasm_put(Dst, 2603); #endif - dasm_put(Dst, 2594); + dasm_put(Dst, 2605); #if LJ_HASJIT - dasm_put(Dst, 2596); + dasm_put(Dst, 2607); #endif - dasm_put(Dst, 2598); + dasm_put(Dst, 2609); #if LJ_HASJIT - dasm_put(Dst, 2675); + dasm_put(Dst, 2686); #else - dasm_put(Dst, 2698); -#endif - dasm_put(Dst, 2701); -#if LJ_HASJIT - dasm_put(Dst, 2703); -#endif - dasm_put(Dst, 2705); -#if LJ_HASJIT - dasm_put(Dst, 2707); -#endif dasm_put(Dst, 2709); +#endif + dasm_put(Dst, 2712); +#if LJ_HASJIT + dasm_put(Dst, 2714); +#endif + dasm_put(Dst, 2716); +#if LJ_HASJIT + dasm_put(Dst, 2718); +#endif + dasm_put(Dst, 2720); } /* Generate the code for a single instruction. */ static void build_ins(BuildCtx *ctx, BCOp op, int defop) { int vk = 0; - dasm_put(Dst, 2771, defop); + dasm_put(Dst, 2782, defop); switch (op) { @@ -5373,112 +5385,112 @@ 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, 2773, -(BCBIAS_J*4 >> 16)); + dasm_put(Dst, 2784, -(BCBIAS_J*4 >> 16)); if (op == BC_ISLE || op == BC_ISGT) { - dasm_put(Dst, 2787); + dasm_put(Dst, 2798); } if (op == BC_ISLT || op == BC_ISLE) { - dasm_put(Dst, 2790); + dasm_put(Dst, 2801); } else { - dasm_put(Dst, 2792); + dasm_put(Dst, 2803); } - dasm_put(Dst, 2794); + dasm_put(Dst, 2805); break; case BC_ISEQV: case BC_ISNEV: vk = op == BC_ISEQV; - dasm_put(Dst, 2805, -(BCBIAS_J*4 >> 16)); + dasm_put(Dst, 2816, -(BCBIAS_J*4 >> 16)); if (vk) { - dasm_put(Dst, 2819); + dasm_put(Dst, 2830); } else { - dasm_put(Dst, 2821); + dasm_put(Dst, 2832); } - dasm_put(Dst, 2823, ~LJ_TISPRI, ~LJ_TISTABUD); + dasm_put(Dst, 2834, ~LJ_TISPRI, ~LJ_TISTABUD); if (vk) { - dasm_put(Dst, 2845); + dasm_put(Dst, 2856); } else { - dasm_put(Dst, 2847); + dasm_put(Dst, 2858); } - dasm_put(Dst, 2849); + dasm_put(Dst, 2860); if (vk) { - dasm_put(Dst, 2851); + dasm_put(Dst, 2862); } else { - dasm_put(Dst, 2853); + dasm_put(Dst, 2864); } - dasm_put(Dst, 2855, Dt6(->metatable), 1-vk, Dt6(->nomm), 1<metatable), 1-vk, Dt6(->nomm), 1<> 16)); + dasm_put(Dst, 2887, 32-1, -(BCBIAS_J*4 >> 16)); if (vk) { - dasm_put(Dst, 2890); + dasm_put(Dst, 2901); } else { - dasm_put(Dst, 2892); + dasm_put(Dst, 2903); } - dasm_put(Dst, 2894); + dasm_put(Dst, 2905); break; case BC_ISEQN: case BC_ISNEN: vk = op == BC_ISEQN; - dasm_put(Dst, 2905, -(BCBIAS_J*4 >> 16)); + dasm_put(Dst, 2916, -(BCBIAS_J*4 >> 16)); if (vk) { - dasm_put(Dst, 2919); + dasm_put(Dst, 2930); } else { - dasm_put(Dst, 2922); + dasm_put(Dst, 2933); } - dasm_put(Dst, 2924); + dasm_put(Dst, 2935); if (!vk) { - dasm_put(Dst, 2936); + dasm_put(Dst, 2947); } break; case BC_ISEQP: case BC_ISNEP: vk = op == BC_ISEQP; - dasm_put(Dst, 2942, 32-3, -(BCBIAS_J*4 >> 16)); + dasm_put(Dst, 2953, 32-3, -(BCBIAS_J*4 >> 16)); if (vk) { - dasm_put(Dst, 2954); + dasm_put(Dst, 2965); } else { - dasm_put(Dst, 2956); + dasm_put(Dst, 2967); } - dasm_put(Dst, 2958); + dasm_put(Dst, 2969); break; /* -- Unary test and copy ops ------------------------------------------- */ case BC_ISTC: case BC_ISFC: case BC_IST: case BC_ISF: - dasm_put(Dst, 2969); + dasm_put(Dst, 2980); if (op == BC_IST || op == BC_ISF) { - dasm_put(Dst, 2975, -(BCBIAS_J*4 >> 16)); + dasm_put(Dst, 2986, -(BCBIAS_J*4 >> 16)); if (op == BC_IST) { - dasm_put(Dst, 2980); + dasm_put(Dst, 2991); } else { - dasm_put(Dst, 2982); + dasm_put(Dst, 2993); } } else { if (op == BC_ISTC) { - dasm_put(Dst, 2984); + dasm_put(Dst, 2995); } else { - dasm_put(Dst, 2987); + dasm_put(Dst, 2998); } - dasm_put(Dst, 2990, -(BCBIAS_J*4 >> 16)); + dasm_put(Dst, 3001, -(BCBIAS_J*4 >> 16)); } - dasm_put(Dst, 2997); + dasm_put(Dst, 3008); break; /* -- Unary ops --------------------------------------------------------- */ case BC_MOV: - dasm_put(Dst, 3008); + dasm_put(Dst, 3019); break; case BC_NOT: - dasm_put(Dst, 3021, LJ_TTRUE); + dasm_put(Dst, 3032, LJ_TTRUE); break; case BC_UNM: - dasm_put(Dst, 3037); + dasm_put(Dst, 3048); break; case BC_LEN: - dasm_put(Dst, 3054, Dt5(->len)); + dasm_put(Dst, 3065, Dt5(->len)); break; /* -- Binary ops -------------------------------------------------------- */ @@ -5488,257 +5500,257 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop) vk = ((int)op - BC_ADDVN) / (BC_ADDNV-BC_ADDVN); switch (vk) { case 0: - dasm_put(Dst, 3082); + dasm_put(Dst, 3093); break; case 1: - dasm_put(Dst, 3088); + dasm_put(Dst, 3099); break; default: - dasm_put(Dst, 3094); + dasm_put(Dst, 3105); break; } - dasm_put(Dst, 3101); + dasm_put(Dst, 3112); 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, 3114); + dasm_put(Dst, 3125); break; case 1: - dasm_put(Dst, 3120); + dasm_put(Dst, 3131); break; default: - dasm_put(Dst, 3126); + dasm_put(Dst, 3137); break; } - dasm_put(Dst, 3133); + dasm_put(Dst, 3144); 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, 3146); + dasm_put(Dst, 3157); break; case 1: - dasm_put(Dst, 3152); + dasm_put(Dst, 3163); break; default: - dasm_put(Dst, 3158); + dasm_put(Dst, 3169); break; } - dasm_put(Dst, 3165); + dasm_put(Dst, 3176); 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, 3178); + dasm_put(Dst, 3189); break; case 1: - dasm_put(Dst, 3184); + dasm_put(Dst, 3195); break; default: - dasm_put(Dst, 3190); + dasm_put(Dst, 3201); break; } - dasm_put(Dst, 3197); + dasm_put(Dst, 3208); break; case BC_MODVN: vk = ((int)op - BC_ADDVN) / (BC_ADDNV-BC_ADDVN); switch (vk) { case 0: - dasm_put(Dst, 3210); + dasm_put(Dst, 3221); break; case 1: - dasm_put(Dst, 3216); + dasm_put(Dst, 3227); break; default: - dasm_put(Dst, 3222); + dasm_put(Dst, 3233); break; } - dasm_put(Dst, 3229); + dasm_put(Dst, 3240); break; case BC_MODNV: case BC_MODVV: vk = ((int)op - BC_ADDVN) / (BC_ADDNV-BC_ADDVN); switch (vk) { case 0: - dasm_put(Dst, 3247); + dasm_put(Dst, 3258); break; case 1: - dasm_put(Dst, 3253); + dasm_put(Dst, 3264); break; default: - dasm_put(Dst, 3259); + dasm_put(Dst, 3270); break; } - dasm_put(Dst, 3266); + dasm_put(Dst, 3277); break; case BC_POW: - dasm_put(Dst, 3269); + dasm_put(Dst, 3280); break; case BC_CAT: - dasm_put(Dst, 3291, Dt1(->base), 32-3, Dt1(->base)); + dasm_put(Dst, 3302, Dt1(->base), 32-3, Dt1(->base)); break; /* -- Constant ops ------------------------------------------------------ */ case BC_KSTR: - dasm_put(Dst, 3321, 32-1); + dasm_put(Dst, 3332, 32-1); break; case BC_KSHORT: - dasm_put(Dst, 3338, 32-3); + dasm_put(Dst, 3349, 32-3); break; case BC_KNUM: - dasm_put(Dst, 3354); + dasm_put(Dst, 3365); break; case BC_KPRI: - dasm_put(Dst, 3367, 32-3); + dasm_put(Dst, 3378, 32-3); break; case BC_KNIL: - dasm_put(Dst, 3382); + dasm_put(Dst, 3393); break; /* -- Upvalue and function ops ------------------------------------------ */ case BC_UGET: - dasm_put(Dst, 3401, 32-1, offsetof(GCfuncL, uvptr), DtA(->v)); + dasm_put(Dst, 3412, 32-1, offsetof(GCfuncL, uvptr), DtA(->v)); break; case BC_USETV: - dasm_put(Dst, 3422, 32-1, offsetof(GCfuncL, uvptr), DtA(->marked), DtA(->v), LJ_GC_BLACK, DtA(->closed), -LJ_TISNUM, LJ_TISGCV - LJ_TISNUM, Dt4(->gch.marked), LJ_GC_WHITES, GG_DISP2G); + dasm_put(Dst, 3433, 32-1, offsetof(GCfuncL, uvptr), DtA(->marked), DtA(->v), LJ_GC_BLACK, DtA(->closed), -LJ_TISNUM, LJ_TISGCV - LJ_TISNUM, Dt4(->gch.marked), LJ_GC_WHITES, GG_DISP2G); break; case BC_USETS: - dasm_put(Dst, 3474, 32-1, 32-1, offsetof(GCfuncL, uvptr), DtA(->marked), DtA(->v), LJ_GC_BLACK, Dt5(->marked), DtA(->closed), LJ_GC_WHITES, GG_DISP2G); + dasm_put(Dst, 3485, 32-1, 32-1, offsetof(GCfuncL, uvptr), DtA(->marked), DtA(->v), LJ_GC_BLACK, Dt5(->marked), DtA(->closed), LJ_GC_WHITES, GG_DISP2G); break; case BC_USETN: - dasm_put(Dst, 3523, 32-1, offsetof(GCfuncL, uvptr), DtA(->v)); + dasm_put(Dst, 3534, 32-1, offsetof(GCfuncL, uvptr), DtA(->v)); break; case BC_USETP: - dasm_put(Dst, 3544, 32-1, offsetof(GCfuncL, uvptr), 32-3, DtA(->v)); + dasm_put(Dst, 3555, 32-1, offsetof(GCfuncL, uvptr), 32-3, DtA(->v)); break; case BC_UCLO: - dasm_put(Dst, 3567, Dt1(->openupval), 32-1, -(BCBIAS_J*4 >> 16), Dt1(->base), Dt1(->base)); + dasm_put(Dst, 3578, Dt1(->openupval), 32-1, -(BCBIAS_J*4 >> 16), Dt1(->base), Dt1(->base)); break; case BC_FNEW: - dasm_put(Dst, 3597, 32-1, Dt1(->base), Dt1(->base)); + dasm_put(Dst, 3608, 32-1, Dt1(->base), Dt1(->base)); break; /* -- Table ops --------------------------------------------------------- */ case BC_TNEW: case BC_TDUP: - dasm_put(Dst, 3623, DISPATCH_GL(gc.total), DISPATCH_GL(gc.threshold), Dt1(->base)); + dasm_put(Dst, 3634, DISPATCH_GL(gc.total), DISPATCH_GL(gc.threshold), Dt1(->base)); if (op == BC_TNEW) { - dasm_put(Dst, 3636); + dasm_put(Dst, 3647); } else { - dasm_put(Dst, 3644, 32-1); + dasm_put(Dst, 3655, 32-1); } - dasm_put(Dst, 3651, Dt1(->base)); + dasm_put(Dst, 3662, Dt1(->base)); break; case BC_GGET: case BC_GSET: - dasm_put(Dst, 3674, 32-1, Dt7(->env)); + dasm_put(Dst, 3685, 32-1, Dt7(->env)); if (op == BC_GGET) { - dasm_put(Dst, 3682); + dasm_put(Dst, 3693); } else { - dasm_put(Dst, 3685); + dasm_put(Dst, 3696); } break; case BC_TGETV: - dasm_put(Dst, 3688, Dt6(->asize), Dt6(->array), 31-3, Dt6(->metatable), Dt6(->nomm), 1<asize), Dt6(->array), 31-3, Dt6(->metatable), Dt6(->nomm), 1<hmask), Dt5(->hash), Dt6(->node), 31-5, 31-3, DtB(->key), DtB(->val), DtB(->next), Dt6(->metatable), Dt6(->nomm), 1<hmask), Dt5(->hash), Dt6(->node), 31-5, 31-3, DtB(->key), DtB(->val), DtB(->next), Dt6(->metatable), Dt6(->nomm), 1<asize), Dt6(->array), Dt6(->metatable), Dt6(->nomm), 1<asize), Dt6(->array), Dt6(->metatable), Dt6(->nomm), 1<asize), Dt6(->array), 31-3, Dt6(->marked), LJ_GC_BLACK, Dt6(->metatable), Dt6(->nomm), 1<marked), Dt6(->gclist)); + dasm_put(Dst, 3870, Dt6(->asize), Dt6(->array), 31-3, Dt6(->marked), LJ_GC_BLACK, Dt6(->metatable), Dt6(->nomm), 1<marked), Dt6(->gclist)); break; case BC_TSETS: - dasm_put(Dst, 3938, 32-1, Dt6(->hmask), Dt5(->hash), Dt6(->node), Dt6(->nomm), 31-5, 31-3, Dt6(->marked), DtB(->key), DtB(->val), LJ_GC_BLACK, DtB(->val), Dt6(->metatable)); - dasm_put(Dst, 3999, Dt6(->nomm), 1<next), Dt6(->metatable), DISPATCH_GL(tmptv), Dt1(->base), Dt6(->nomm), 1<base), DISPATCH_GL(gc.grayagain), DISPATCH_GL(gc.grayagain)); - dasm_put(Dst, 4050, Dt6(->marked), Dt6(->gclist)); + dasm_put(Dst, 3949, 32-1, Dt6(->hmask), Dt5(->hash), Dt6(->node), Dt6(->nomm), 31-5, 31-3, Dt6(->marked), DtB(->key), DtB(->val), LJ_GC_BLACK, DtB(->val), Dt6(->metatable)); + dasm_put(Dst, 4010, Dt6(->nomm), 1<next), Dt6(->metatable), DISPATCH_GL(tmptv), Dt1(->base), Dt6(->nomm), 1<base), DISPATCH_GL(gc.grayagain), DISPATCH_GL(gc.grayagain)); + dasm_put(Dst, 4061, Dt6(->marked), Dt6(->gclist)); break; case BC_TSETB: - dasm_put(Dst, 4057, 32-3, Dt6(->asize), Dt6(->array), Dt6(->marked), LJ_GC_BLACK, Dt6(->metatable), Dt6(->nomm), 1<marked)); - dasm_put(Dst, 4117, Dt6(->gclist)); + dasm_put(Dst, 4068, 32-3, Dt6(->asize), Dt6(->array), Dt6(->marked), LJ_GC_BLACK, Dt6(->metatable), Dt6(->nomm), 1<marked)); + dasm_put(Dst, 4128, Dt6(->gclist)); break; case BC_TSETM: - dasm_put(Dst, 4122, 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, 4191); + dasm_put(Dst, 4133, 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, 4202); break; /* -- Calls and vararg handling ----------------------------------------- */ case BC_CALLM: - dasm_put(Dst, 4194); + dasm_put(Dst, 4205); break; case BC_CALL: - dasm_put(Dst, 4196, Dt7(->pc)); + dasm_put(Dst, 4207, Dt7(->pc)); break; case BC_CALLMT: - dasm_put(Dst, 4216); + dasm_put(Dst, 4227); break; case BC_CALLT: - dasm_put(Dst, 4218, FRAME_TYPE, Dt7(->ffid), FRAME_VARG, Dt7(->pc), -4-8, Dt7(->pc), PC2PROTO(k), FRAME_TYPEP); - dasm_put(Dst, 4283, FRAME_TYPE); + dasm_put(Dst, 4229, FRAME_TYPE, Dt7(->ffid), FRAME_VARG, Dt7(->pc), -4-8, Dt7(->pc), PC2PROTO(k), FRAME_TYPEP); + dasm_put(Dst, 4294, FRAME_TYPE); break; case BC_ITERC: - dasm_put(Dst, 4290, Dt7(->pc)); + dasm_put(Dst, 4301, Dt7(->pc)); break; case BC_ITERN: #if LJ_HASJIT #endif - dasm_put(Dst, 4316, Dt6(->asize), Dt6(->array), 31-3, -(BCBIAS_J*4 >> 16), Dt6(->hmask), Dt6(->node), 31-5, 31-3, DtB(->key), -(BCBIAS_J*4 >> 16)); - dasm_put(Dst, 4395); + dasm_put(Dst, 4327, Dt6(->asize), Dt6(->array), 31-3, -(BCBIAS_J*4 >> 16), Dt6(->hmask), Dt6(->node), 31-5, 31-3, DtB(->key), -(BCBIAS_J*4 >> 16)); + dasm_put(Dst, 4406); break; case BC_ISNEXT: - dasm_put(Dst, 4399, 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)); + dasm_put(Dst, 4410, 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, 4450, FRAME_VARG, Dt1(->maxstack), Dt1(->top), Dt1(->base), 32-3, Dt1(->base)); - dasm_put(Dst, 4530); + dasm_put(Dst, 4461, FRAME_VARG, Dt1(->maxstack), Dt1(->top), Dt1(->base), 32-3, Dt1(->base)); + dasm_put(Dst, 4541); break; /* -- Returns ----------------------------------------------------------- */ case BC_RETM: - dasm_put(Dst, 4536); + dasm_put(Dst, 4547); break; case BC_RET: - dasm_put(Dst, 4538, FRAME_TYPE, FRAME_VARG, Dt7(->pc), PC2PROTO(k), FRAME_TYPEP); + dasm_put(Dst, 4549, FRAME_TYPE, FRAME_VARG, Dt7(->pc), PC2PROTO(k), FRAME_TYPEP); break; case BC_RET0: case BC_RET1: - dasm_put(Dst, 4608, FRAME_TYPE, FRAME_VARG); + dasm_put(Dst, 4619, FRAME_TYPE, FRAME_VARG); if (op == BC_RET1) { - dasm_put(Dst, 4621); + dasm_put(Dst, 4632); } - dasm_put(Dst, 4624, Dt7(->pc), PC2PROTO(k)); + dasm_put(Dst, 4635, Dt7(->pc), PC2PROTO(k)); break; /* -- Loops and branches ------------------------------------------------ */ case BC_FORL: #if LJ_HASJIT - dasm_put(Dst, 4652); + dasm_put(Dst, 4663); #endif break; @@ -5750,35 +5762,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, 4654, FORL_IDX*8, FORL_STEP*8, FORL_STOP*8); + dasm_put(Dst, 4665, FORL_IDX*8, FORL_STEP*8, FORL_STOP*8); if (!vk) { - dasm_put(Dst, 4662); + dasm_put(Dst, 4673); } if (vk) { - dasm_put(Dst, 4670, FORL_IDX*8); + dasm_put(Dst, 4681, FORL_IDX*8); } - dasm_put(Dst, 4674, FORL_EXT*8); + dasm_put(Dst, 4685, FORL_EXT*8); if (op != BC_JFORL) { - dasm_put(Dst, 4682, 32-1); + dasm_put(Dst, 4693, 32-1); if (op == BC_JFORI) { - dasm_put(Dst, 4686, -(BCBIAS_J*4 >> 16)); + dasm_put(Dst, 4697, -(BCBIAS_J*4 >> 16)); } else { - dasm_put(Dst, 4689, -(BCBIAS_J*4 >> 16)); + dasm_put(Dst, 4700, -(BCBIAS_J*4 >> 16)); } } if (op == BC_FORI) { - dasm_put(Dst, 4692); + dasm_put(Dst, 4703); } else if (op == BC_IFORL) { - dasm_put(Dst, 4694); + dasm_put(Dst, 4705); } else { - dasm_put(Dst, 4696, BC_JLOOP); + dasm_put(Dst, 4707, BC_JLOOP); } - dasm_put(Dst, 4699); + dasm_put(Dst, 4710); break; case BC_ITERL: #if LJ_HASJIT - dasm_put(Dst, 4714); + dasm_put(Dst, 4725); #endif break; @@ -5787,40 +5799,40 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop) break; #endif case BC_IITERL: - dasm_put(Dst, 4716); + dasm_put(Dst, 4727); if (op == BC_JITERL) { - dasm_put(Dst, 4722); + dasm_put(Dst, 4733); } else { - dasm_put(Dst, 4724, 32-1, -(BCBIAS_J*4 >> 16)); + dasm_put(Dst, 4735, 32-1, -(BCBIAS_J*4 >> 16)); } - dasm_put(Dst, 4731); + dasm_put(Dst, 4742); break; case BC_LOOP: #if LJ_HASJIT - dasm_put(Dst, 4743); + dasm_put(Dst, 4754); #endif break; case BC_ILOOP: - dasm_put(Dst, 4745); + dasm_put(Dst, 4756); break; case BC_JLOOP: #if LJ_HASJIT - dasm_put(Dst, 4756); + dasm_put(Dst, 4767); #endif break; case BC_JMP: - dasm_put(Dst, 4758, 32-1, -(BCBIAS_J*4 >> 16)); + dasm_put(Dst, 4769, 32-1, -(BCBIAS_J*4 >> 16)); break; /* -- Function headers -------------------------------------------------- */ case BC_FUNCF: #if LJ_HASJIT - dasm_put(Dst, 4774); + dasm_put(Dst, 4785); #endif case BC_FUNCV: /* NYI: compiled vararg functions. */ break; @@ -5830,38 +5842,38 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop) break; #endif case BC_IFUNCF: - dasm_put(Dst, 4776, Dt1(->maxstack), -4+PC2PROTO(numparams), -4+PC2PROTO(k), 31-3); + dasm_put(Dst, 4787, Dt1(->maxstack), -4+PC2PROTO(numparams), -4+PC2PROTO(k), 31-3); if (op == BC_JFUNCF) { - dasm_put(Dst, 4794); + dasm_put(Dst, 4805); } else { - dasm_put(Dst, 4796); + dasm_put(Dst, 4807); } - dasm_put(Dst, 4805); + dasm_put(Dst, 4816); break; case BC_JFUNCV: #if !LJ_HASJIT break; #endif - dasm_put(Dst, 4811); + dasm_put(Dst, 4822); break; /* NYI: compiled vararg functions. */ case BC_IFUNCV: - dasm_put(Dst, 4813, Dt1(->maxstack), 8+FRAME_VARG, -4+PC2PROTO(k), -4+PC2PROTO(numparams)); + dasm_put(Dst, 4824, Dt1(->maxstack), 8+FRAME_VARG, -4+PC2PROTO(k), -4+PC2PROTO(numparams)); break; case BC_FUNCC: case BC_FUNCCW: if (op == BC_FUNCC) { - dasm_put(Dst, 4863, Dt8(->f)); + dasm_put(Dst, 4874, Dt8(->f)); } else { - dasm_put(Dst, 4866, DISPATCH_GL(wrapf)); + dasm_put(Dst, 4877, DISPATCH_GL(wrapf)); } - dasm_put(Dst, 4869, Dt1(->maxstack), Dt1(->base), Dt1(->top), ~LJ_VMST_C); + dasm_put(Dst, 4880, Dt1(->maxstack), Dt1(->base), Dt1(->top), ~LJ_VMST_C); if (op == BC_FUNCCW) { - dasm_put(Dst, 4882, Dt8(->f)); + dasm_put(Dst, 4893, Dt8(->f)); } - dasm_put(Dst, 4885, DISPATCH_GL(vmstate), Dt1(->top), 31-3, Dt1(->base), ~LJ_VMST_INTERP, DISPATCH_GL(vmstate)); + dasm_put(Dst, 4896, DISPATCH_GL(vmstate), Dt1(->top), 31-3, Dt1(->base), ~LJ_VMST_INTERP, DISPATCH_GL(vmstate)); break; /* ---------------------------------------------------------------------- */ @@ -5881,7 +5893,7 @@ static int build_backend(BuildCtx *ctx) build_subroutines(ctx); - dasm_put(Dst, 4906); + dasm_put(Dst, 4917); for (op = 0; op < BC__MAX; op++) build_ins(ctx, (BCOp)op, op); diff --git a/src/buildvm_x64.h b/src/buildvm_x64.h index 8bcfd63f..af5c0b73 100644 --- a/src/buildvm_x64.h +++ b/src/buildvm_x64.h @@ -12,7 +12,7 @@ #define DASM_SECTION_CODE_OP 0 #define DASM_SECTION_CODE_SUB 1 #define DASM_MAXSECTION 2 -static const unsigned char build_actionlist[14263] = { +static const unsigned char build_actionlist[14284] = { 254,1,248,10,252,247,195,237,15,132,244,11,131,227,252,248,41,218,72,141, 76,25,252,248,139,90,252,252,199,68,10,4,237,248,12,131,192,1,137,68,36,4, 252,247,195,237,15,132,244,13,248,14,129,252,243,239,252,247,195,237,15,133, @@ -129,35 +129,36 @@ static const unsigned char build_actionlist[14263] = { 141,82,8,137,252,239,137,92,36,28,232,251,1,11,139,149,233,133,192,15,132, 244,249,72,139,106,8,72,139,66,16,72,137,106,252,248,72,137,2,248,68,184, 237,252,233,244,69,248,2,199,66,12,237,252,233,244,1,248,3,199,66,252,252, - 237,252,233,244,58,248,70,129,252,248,239,15,130,244,55,255,139,106,252,248, - 129,122,253,4,239,15,133,244,55,139,133,233,139,90,252,252,199,66,252,252, - 237,137,66,252,248,199,66,12,237,184,237,252,233,244,69,248,71,129,252,248, - 239,15,130,244,55,129,122,253,4,239,15,133,244,55,129,122,253,12,239,15,135, - 244,55,139,90,252,252,255,252,242,15,16,66,8,72,189,237,237,102,72,15,110, - 205,252,242,15,88,193,252,242,15,45,192,252,242,15,17,66,252,248,255,139, - 42,59,133,233,15,131,244,248,193,224,3,3,133,233,248,1,129,120,253,4,239, - 15,132,244,72,72,139,40,72,137,42,252,233,244,68,248,2,131,189,233,0,15,132, - 244,72,137,252,239,137,213,137,198,232,251,1,12,137,252,234,133,192,15,133, - 244,1,248,72,184,237,252,233,244,69,248,73,255,129,252,248,239,15,130,244, - 55,139,106,252,248,129,122,253,4,239,15,133,244,55,139,133,233,139,90,252, - 252,199,66,252,252,237,137,66,252,248,255,15,87,192,252,242,15,17,66,8,255, - 217,252,238,221,90,8,255,184,237,252,233,244,69,248,74,129,252,248,239,15, - 130,244,55,141,74,8,131,232,1,187,237,248,1,65,15,182,174,233,193,252,237, - 235,131,229,1,1,252,235,252,233,244,27,248,75,129,252,248,239,15,130,244, - 55,129,122,253,12,239,15,133,244,55,255,139,106,4,137,106,12,199,66,4,237, - 139,42,139,90,8,137,106,8,137,26,141,74,16,131,232,2,187,237,252,233,244, - 1,248,76,129,252,248,239,15,130,244,55,139,42,139,90,252,252,137,92,36,28, - 137,44,36,129,122,253,4,239,15,133,244,55,72,131,189,233,0,15,133,244,55, - 128,189,233,235,15,135,244,55,139,141,233,15,132,244,247,255,59,141,233,15, - 132,244,55,248,1,141,92,193,252,240,59,157,233,15,135,244,55,137,157,233, - 139,108,36,24,137,149,233,131,194,8,137,149,233,141,108,194,232,72,41,221, - 57,203,15,132,244,249,248,2,72,139,4,43,72,137,67,252,248,131,252,235,8,57, - 203,15,133,244,2,248,3,137,206,139,60,36,232,244,24,65,199,134,233,237,255, - 139,108,36,24,139,28,36,139,149,233,129,252,248,239,15,135,244,254,248,4, - 139,139,233,68,139,187,233,137,139,233,68,137,252,251,41,203,15,132,244,252, - 141,4,26,193,252,235,3,59,133,233,15,135,244,255,137,213,72,41,205,248,5, - 72,139,1,72,137,4,41,131,193,8,68,57,252,249,15,133,244,5,248,6,141,67,2, - 199,66,252,252,237,248,7,139,92,36,28,137,68,36,4,72,199,193,252,248,252, + 237,252,233,244,58,248,70,129,252,248,239,15,130,244,55,255,139,42,129,122, + 253,4,239,15,133,244,55,131,189,233,0,15,133,244,55,139,106,252,248,139,133, + 233,139,90,252,252,199,66,252,252,237,137,66,252,248,199,66,12,237,184,237, + 252,233,244,69,248,71,129,252,248,239,15,130,244,55,129,122,253,4,239,15, + 133,244,55,129,122,253,12,239,255,15,135,244,55,139,90,252,252,255,252,242, + 15,16,66,8,72,189,237,237,102,72,15,110,205,252,242,15,88,193,252,242,15, + 45,192,252,242,15,17,66,252,248,255,139,42,59,133,233,15,131,244,248,193, + 224,3,3,133,233,248,1,129,120,253,4,239,15,132,244,72,72,139,40,72,137,42, + 252,233,244,68,248,2,131,189,233,0,15,132,244,72,137,252,239,137,213,137, + 198,232,251,1,12,137,252,234,133,192,15,133,244,1,248,72,184,237,252,233, + 244,69,248,73,255,129,252,248,239,15,130,244,55,139,42,129,122,253,4,239, + 15,133,244,55,131,189,233,0,15,133,244,55,139,106,252,248,139,133,233,139, + 90,252,252,199,66,252,252,237,137,66,252,248,255,15,87,192,252,242,15,17, + 66,8,255,217,252,238,221,90,8,255,184,237,252,233,244,69,248,74,129,252,248, + 239,15,130,244,55,141,74,8,131,232,1,187,237,248,1,65,15,182,174,233,193, + 252,237,235,131,229,1,1,252,235,252,233,244,27,248,75,129,252,248,239,15, + 130,244,55,129,122,253,12,239,15,133,244,55,255,139,106,4,137,106,12,199, + 66,4,237,139,42,139,90,8,137,106,8,137,26,141,74,16,131,232,2,187,237,252, + 233,244,1,248,76,129,252,248,239,15,130,244,55,139,42,139,90,252,252,137, + 92,36,28,137,44,36,129,122,253,4,239,15,133,244,55,72,131,189,233,0,15,133, + 244,55,128,189,233,235,15,135,244,55,139,141,233,15,132,244,247,255,59,141, + 233,15,132,244,55,248,1,141,92,193,252,240,59,157,233,15,135,244,55,137,157, + 233,139,108,36,24,137,149,233,131,194,8,137,149,233,141,108,194,232,72,41, + 221,57,203,15,132,244,249,248,2,72,139,4,43,72,137,67,252,248,131,252,235, + 8,57,203,15,133,244,2,248,3,137,206,139,60,36,232,244,24,65,199,134,233,237, + 255,139,108,36,24,139,28,36,139,149,233,129,252,248,239,15,135,244,254,248, + 4,139,139,233,68,139,187,233,137,139,233,68,137,252,251,41,203,15,132,244, + 252,141,4,26,193,252,235,3,59,133,233,15,135,244,255,137,213,72,41,205,248, + 5,72,139,1,72,137,4,41,131,193,8,68,57,252,249,15,133,244,5,248,6,141,67, + 2,199,66,252,252,237,248,7,139,92,36,28,137,68,36,4,72,199,193,252,248,252, 255,252,255,252,255,252,247,195,237,255,15,132,244,13,252,233,244,14,248, 8,199,66,252,252,237,139,139,233,131,252,233,8,137,139,233,72,139,1,72,137, 2,184,237,252,233,244,7,248,9,139,12,36,68,137,185,233,137,222,137,252,239, @@ -1111,330 +1112,331 @@ static void build_subroutines(BuildCtx *ctx, int cmov, int sse) dasm_put(Dst, 2176, 1+1, LJ_TSTR, LJ_TSTR, LJ_TISNUM, DISPATCH_GL(gcroot[GCROOT_BASEMT_NUM]), DISPATCH_GL(gc.total), DISPATCH_GL(gc.threshold)); dasm_put(Dst, 2245, Dt1(->base), Dt1(->base), 1+1, LJ_TTAB, Dt1(->base)); dasm_put(Dst, 2314, Dt1(->top), Dt1(->base), 1+2, LJ_TNIL, LJ_TNIL, 1+1); - dasm_put(Dst, 2402, LJ_TTAB, Dt8(->upvalue[0]), LJ_TFUNC, LJ_TNIL, 1+3, 1+1, LJ_TTAB, LJ_TISNUM); + dasm_put(Dst, 2402, LJ_TTAB, Dt6(->metatable), Dt8(->upvalue[0]), LJ_TFUNC, LJ_TNIL, 1+3, 1+1, LJ_TTAB, LJ_TISNUM); + dasm_put(Dst, 2476); if (sse) { - dasm_put(Dst, 2474, (unsigned int)(U64x(3ff00000,00000000)), (unsigned int)((U64x(3ff00000,00000000))>>32)); + dasm_put(Dst, 2485, (unsigned int)(U64x(3ff00000,00000000)), (unsigned int)((U64x(3ff00000,00000000))>>32)); } else { } - dasm_put(Dst, 2507, Dt6(->asize), Dt6(->array), LJ_TNIL, Dt6(->hmask), 1+0); - dasm_put(Dst, 2584, 1+1, LJ_TTAB, Dt8(->upvalue[0]), LJ_TFUNC); + dasm_put(Dst, 2518, Dt6(->asize), Dt6(->array), LJ_TNIL, Dt6(->hmask), 1+0); + dasm_put(Dst, 2595, 1+1, LJ_TTAB, Dt6(->metatable), Dt8(->upvalue[0]), LJ_TFUNC); if (sse) { - dasm_put(Dst, 2622); + dasm_put(Dst, 2643); } else { - dasm_put(Dst, 2632); + dasm_put(Dst, 2653); } - dasm_put(Dst, 2639, 1+3, 1+1, 8+FRAME_PCALL, DISPATCH_GL(hookmask), HOOK_ACTIVE_SHIFT, 2+1, LJ_TFUNC); - dasm_put(Dst, 2704, LJ_TFUNC, 16+FRAME_PCALL, 1+1, LJ_TTHREAD, Dt1(->cframe), Dt1(->status), LUA_YIELD, Dt1(->top)); - dasm_put(Dst, 2793, Dt1(->base), Dt1(->maxstack), Dt1(->top), Dt1(->base), Dt1(->top), DISPATCH_GL(vmstate), ~LJ_VMST_INTERP); - dasm_put(Dst, 2880, Dt1(->base), LUA_YIELD, Dt1(->base), Dt1(->top), Dt1(->top), Dt1(->maxstack), LJ_TTRUE, FRAME_TYPE); - dasm_put(Dst, 2995, LJ_TFALSE, Dt1(->top), Dt1(->top), 1+2, Dt1(->top), Dt1(->base), Dt8(->upvalue[0].gcr), Dt1(->cframe)); - dasm_put(Dst, 3090, Dt1(->status), LUA_YIELD, Dt1(->top), Dt1(->base), Dt1(->maxstack), Dt1(->top), Dt1(->base), Dt1(->top)); - dasm_put(Dst, 3156, DISPATCH_GL(vmstate), ~LJ_VMST_INTERP, Dt1(->base), LUA_YIELD, Dt1(->base), Dt1(->top), Dt1(->top), Dt1(->maxstack)); - dasm_put(Dst, 3245, FRAME_TYPE, Dt1(->top), Dt1(->base), Dt1(->cframe), CFRAME_RESUME); - dasm_put(Dst, 3355, Dt1(->base), Dt1(->top), Dt1(->cframe), LUA_YIELD, Dt1(->status)); + dasm_put(Dst, 2660, 1+3, 1+1, 8+FRAME_PCALL, DISPATCH_GL(hookmask), HOOK_ACTIVE_SHIFT, 2+1, LJ_TFUNC); + dasm_put(Dst, 2725, LJ_TFUNC, 16+FRAME_PCALL, 1+1, LJ_TTHREAD, Dt1(->cframe), Dt1(->status), LUA_YIELD, Dt1(->top)); + dasm_put(Dst, 2814, Dt1(->base), Dt1(->maxstack), Dt1(->top), Dt1(->base), Dt1(->top), DISPATCH_GL(vmstate), ~LJ_VMST_INTERP); + dasm_put(Dst, 2901, Dt1(->base), LUA_YIELD, Dt1(->base), Dt1(->top), Dt1(->top), Dt1(->maxstack), LJ_TTRUE, FRAME_TYPE); + dasm_put(Dst, 3016, LJ_TFALSE, Dt1(->top), Dt1(->top), 1+2, Dt1(->top), Dt1(->base), Dt8(->upvalue[0].gcr), Dt1(->cframe)); + dasm_put(Dst, 3111, Dt1(->status), LUA_YIELD, Dt1(->top), Dt1(->base), Dt1(->maxstack), Dt1(->top), Dt1(->base), Dt1(->top)); + dasm_put(Dst, 3177, DISPATCH_GL(vmstate), ~LJ_VMST_INTERP, Dt1(->base), LUA_YIELD, Dt1(->base), Dt1(->top), Dt1(->top), Dt1(->maxstack)); + dasm_put(Dst, 3266, FRAME_TYPE, Dt1(->top), Dt1(->base), Dt1(->cframe), CFRAME_RESUME); + dasm_put(Dst, 3376, Dt1(->base), Dt1(->top), Dt1(->cframe), LUA_YIELD, Dt1(->status)); if (sse) { - dasm_put(Dst, 3382, 1+1, LJ_TISNUM, (unsigned int)(U64x(7fffffff,ffffffff)), (unsigned int)((U64x(7fffffff,ffffffff))>>32)); + dasm_put(Dst, 3403, 1+1, LJ_TISNUM, (unsigned int)(U64x(7fffffff,ffffffff)), (unsigned int)((U64x(7fffffff,ffffffff))>>32)); } else { - dasm_put(Dst, 3446, 1+1, LJ_TISNUM); + dasm_put(Dst, 3467, 1+1, LJ_TISNUM); } - dasm_put(Dst, 3482, 1+1, FRAME_TYPE, LJ_TNIL); + dasm_put(Dst, 3503, 1+1, FRAME_TYPE, LJ_TNIL); if (sse) { - dasm_put(Dst, 3577, 1+1, LJ_TISNUM, 1+1, LJ_TISNUM); - dasm_put(Dst, 3639, 1+1, LJ_TISNUM); + dasm_put(Dst, 3598, 1+1, LJ_TISNUM, 1+1, LJ_TISNUM); + dasm_put(Dst, 3660, 1+1, LJ_TISNUM); } else { - dasm_put(Dst, 3669, 1+1, LJ_TISNUM, 1+1, LJ_TISNUM); - dasm_put(Dst, 3728, 1+1, LJ_TISNUM); + dasm_put(Dst, 3690, 1+1, LJ_TISNUM, 1+1, LJ_TISNUM); + dasm_put(Dst, 3749, 1+1, LJ_TISNUM); } - dasm_put(Dst, 3755, 1+1, LJ_TISNUM, 1+1, LJ_TISNUM, 1+1); - dasm_put(Dst, 3824, LJ_TISNUM, 1+1, LJ_TISNUM, 1+1); - dasm_put(Dst, 3881, LJ_TISNUM, 1+1, LJ_TISNUM, 1+1); - dasm_put(Dst, 3944, LJ_TISNUM, 1+1, LJ_TISNUM, 1+1, LJ_TISNUM); - dasm_put(Dst, 4034); + dasm_put(Dst, 3776, 1+1, LJ_TISNUM, 1+1, LJ_TISNUM, 1+1); + dasm_put(Dst, 3845, LJ_TISNUM, 1+1, LJ_TISNUM, 1+1); + dasm_put(Dst, 3902, LJ_TISNUM, 1+1, LJ_TISNUM, 1+1); + dasm_put(Dst, 3965, LJ_TISNUM, 1+1, LJ_TISNUM, 1+1, LJ_TISNUM); + dasm_put(Dst, 4055); if (sse) { - dasm_put(Dst, 4046, 1+1, LJ_TISNUM); + dasm_put(Dst, 4067, 1+1, LJ_TISNUM); } else { } - dasm_put(Dst, 4071); + dasm_put(Dst, 4092); if (sse) { - dasm_put(Dst, 4085, 1+1, LJ_TISNUM); + dasm_put(Dst, 4106, 1+1, LJ_TISNUM); } else { } - dasm_put(Dst, 4110); + dasm_put(Dst, 4131); if (sse) { - dasm_put(Dst, 4124, 1+1, LJ_TISNUM); + dasm_put(Dst, 4145, 1+1, LJ_TISNUM); } else { } - dasm_put(Dst, 4149); + dasm_put(Dst, 4170); if (sse) { - dasm_put(Dst, 4165, 1+1, LJ_TISNUM, Dt8(->upvalue[0])); + dasm_put(Dst, 4186, 1+1, LJ_TISNUM, Dt8(->upvalue[0])); } else { - dasm_put(Dst, 4204, 1+1, LJ_TISNUM, Dt8(->upvalue[0])); + dasm_put(Dst, 4225, 1+1, LJ_TISNUM, Dt8(->upvalue[0])); } - dasm_put(Dst, 4237, 2+1, LJ_TISNUM, LJ_TISNUM, 2+1, LJ_TISNUM, LJ_TISNUM); - dasm_put(Dst, 4302, 1+1, LJ_TISNUM); + dasm_put(Dst, 4258, 2+1, LJ_TISNUM, LJ_TISNUM, 2+1, LJ_TISNUM, LJ_TISNUM); + dasm_put(Dst, 4323, 1+1, LJ_TISNUM); if (sse) { - dasm_put(Dst, 4401); + dasm_put(Dst, 4422); } else { - dasm_put(Dst, 4407); + dasm_put(Dst, 4428); } - dasm_put(Dst, 4414); + dasm_put(Dst, 4435); if (sse) { - dasm_put(Dst, 4439); + dasm_put(Dst, 4460); } else { - dasm_put(Dst, 4445); + dasm_put(Dst, 4466); } - dasm_put(Dst, 4448, 1+2); + dasm_put(Dst, 4469, 1+2); if (sse) { - dasm_put(Dst, 4457); + dasm_put(Dst, 4478); } else { - dasm_put(Dst, 4465); + dasm_put(Dst, 4486); } - dasm_put(Dst, 4473); + dasm_put(Dst, 4494); if (sse) { - dasm_put(Dst, 4476, (unsigned int)(U64x(43500000,00000000)), (unsigned int)((U64x(43500000,00000000))>>32)); + dasm_put(Dst, 4497, (unsigned int)(U64x(43500000,00000000)), (unsigned int)((U64x(43500000,00000000))>>32)); } else { - dasm_put(Dst, 4503); + dasm_put(Dst, 4524); } - dasm_put(Dst, 4520); + dasm_put(Dst, 4541); if (sse) { - dasm_put(Dst, 4536, 1+1, LJ_TISNUM); + dasm_put(Dst, 4557, 1+1, LJ_TISNUM); } else { - dasm_put(Dst, 4561, 1+1, LJ_TISNUM); + dasm_put(Dst, 4582, 1+1, LJ_TISNUM); } - dasm_put(Dst, 4583); + dasm_put(Dst, 4604); if (sse) { - dasm_put(Dst, 4605); + dasm_put(Dst, 4626); } else { - dasm_put(Dst, 4631); + dasm_put(Dst, 4652); } - dasm_put(Dst, 4648, 1+2); + dasm_put(Dst, 4669, 1+2); if (sse) { - dasm_put(Dst, 4688); + dasm_put(Dst, 4709); } else { - dasm_put(Dst, 4696); + dasm_put(Dst, 4717); } - dasm_put(Dst, 4706, 2+1, LJ_TISNUM, LJ_TISNUM); + dasm_put(Dst, 4727, 2+1, LJ_TISNUM, LJ_TISNUM); if (sse) { - dasm_put(Dst, 4758, 2+1, LJ_TISNUM, LJ_TISNUM); + dasm_put(Dst, 4779, 2+1, LJ_TISNUM, LJ_TISNUM); } else { - dasm_put(Dst, 4805, 2+1, LJ_TISNUM, LJ_TISNUM); + dasm_put(Dst, 4826, 2+1, LJ_TISNUM, LJ_TISNUM); } if (sse) { - dasm_put(Dst, 4846, 1+1, LJ_TISNUM, LJ_TISNUM); + dasm_put(Dst, 4867, 1+1, LJ_TISNUM, LJ_TISNUM); } else { } if (sse) { - dasm_put(Dst, 4917, 1+1, LJ_TISNUM, LJ_TISNUM); + dasm_put(Dst, 4938, 1+1, LJ_TISNUM, LJ_TISNUM); } else { } if (!sse) { - dasm_put(Dst, 4988); + dasm_put(Dst, 5009); } - dasm_put(Dst, 4997, 1+1, LJ_TSTR); + dasm_put(Dst, 5018, 1+1, LJ_TSTR); if (sse) { - dasm_put(Dst, 5019, Dt5(->len)); + dasm_put(Dst, 5040, Dt5(->len)); } else { - dasm_put(Dst, 5030, Dt5(->len)); + dasm_put(Dst, 5051, Dt5(->len)); } - dasm_put(Dst, 5038, 1+1, LJ_TSTR, Dt5(->len), Dt5([1])); + dasm_put(Dst, 5059, 1+1, LJ_TSTR, Dt5(->len), Dt5([1])); if (sse) { - dasm_put(Dst, 5076); + dasm_put(Dst, 5097); } else { - dasm_put(Dst, 5086); + dasm_put(Dst, 5107); } - dasm_put(Dst, 5097, DISPATCH_GL(gc.total), DISPATCH_GL(gc.threshold), 1+1, LJ_TISNUM); + dasm_put(Dst, 5118, DISPATCH_GL(gc.total), DISPATCH_GL(gc.threshold), 1+1, LJ_TISNUM); if (sse) { - dasm_put(Dst, 5134); + dasm_put(Dst, 5155); } else { - dasm_put(Dst, 5156); + dasm_put(Dst, 5177); } - dasm_put(Dst, 5176, Dt1(->base), Dt1(->base), LJ_TSTR, DISPATCH_GL(gc.total), DISPATCH_GL(gc.threshold), 1+2, LJ_TISNUM); + dasm_put(Dst, 5197, Dt1(->base), Dt1(->base), LJ_TSTR, DISPATCH_GL(gc.total), DISPATCH_GL(gc.threshold), 1+2, LJ_TISNUM); dasm_put(Dst, 2154); if (sse) { - dasm_put(Dst, 5285); + dasm_put(Dst, 5306); } else { - dasm_put(Dst, 5296); + dasm_put(Dst, 5317); } - dasm_put(Dst, 5304, LJ_TSTR, LJ_TISNUM, Dt5(->len)); + dasm_put(Dst, 5325, LJ_TSTR, LJ_TISNUM, Dt5(->len)); if (sse) { - dasm_put(Dst, 5334); + dasm_put(Dst, 5355); } else { } - dasm_put(Dst, 5341, sizeof(GCstr)-1); - dasm_put(Dst, 5416, 2+1, DISPATCH_GL(gc.total), DISPATCH_GL(gc.threshold)); - dasm_put(Dst, 5477, LJ_TSTR, LJ_TISNUM); + dasm_put(Dst, 5362, sizeof(GCstr)-1); + dasm_put(Dst, 5437, 2+1, DISPATCH_GL(gc.total), DISPATCH_GL(gc.threshold)); + dasm_put(Dst, 5498, LJ_TSTR, LJ_TISNUM); if (sse) { - dasm_put(Dst, 5498); + dasm_put(Dst, 5519); } else { - dasm_put(Dst, 5505); + dasm_put(Dst, 5526); } - dasm_put(Dst, 5517, Dt5(->len), DISPATCH_GL(tmpbuf.sz), Dt5([1]), DISPATCH_GL(tmpbuf.buf), DISPATCH_GL(tmpbuf.buf), 1+1); - dasm_put(Dst, 5585, DISPATCH_GL(gc.total), DISPATCH_GL(gc.threshold), LJ_TSTR, Dt5(->len), DISPATCH_GL(tmpbuf.sz), sizeof(GCstr), DISPATCH_GL(tmpbuf.buf)); - dasm_put(Dst, 5652, 1+1, DISPATCH_GL(gc.total), DISPATCH_GL(gc.threshold), LJ_TSTR, Dt5(->len), DISPATCH_GL(tmpbuf.sz)); - dasm_put(Dst, 5725, sizeof(GCstr), DISPATCH_GL(tmpbuf.buf), 1+1); - dasm_put(Dst, 5810, DISPATCH_GL(gc.total), DISPATCH_GL(gc.threshold), LJ_TSTR, Dt5(->len), DISPATCH_GL(tmpbuf.sz), sizeof(GCstr), DISPATCH_GL(tmpbuf.buf)); - dasm_put(Dst, 5884, 1+1, LJ_TTAB); + dasm_put(Dst, 5538, Dt5(->len), DISPATCH_GL(tmpbuf.sz), Dt5([1]), DISPATCH_GL(tmpbuf.buf), DISPATCH_GL(tmpbuf.buf), 1+1); + dasm_put(Dst, 5606, DISPATCH_GL(gc.total), DISPATCH_GL(gc.threshold), LJ_TSTR, Dt5(->len), DISPATCH_GL(tmpbuf.sz), sizeof(GCstr), DISPATCH_GL(tmpbuf.buf)); + dasm_put(Dst, 5673, 1+1, DISPATCH_GL(gc.total), DISPATCH_GL(gc.threshold), LJ_TSTR, Dt5(->len), DISPATCH_GL(tmpbuf.sz)); + dasm_put(Dst, 5746, sizeof(GCstr), DISPATCH_GL(tmpbuf.buf), 1+1); + dasm_put(Dst, 5831, DISPATCH_GL(gc.total), DISPATCH_GL(gc.threshold), LJ_TSTR, Dt5(->len), DISPATCH_GL(tmpbuf.sz), sizeof(GCstr), DISPATCH_GL(tmpbuf.buf)); + dasm_put(Dst, 5905, 1+1, LJ_TTAB); if (sse) { - dasm_put(Dst, 5951); + dasm_put(Dst, 5972); } else { } if (sse) { - dasm_put(Dst, 5961, 1+1, LJ_TISNUM, (unsigned int)(U64x(43380000,00000000)), (unsigned int)((U64x(43380000,00000000))>>32)); + dasm_put(Dst, 5982, 1+1, LJ_TISNUM, (unsigned int)(U64x(43380000,00000000)), (unsigned int)((U64x(43380000,00000000))>>32)); } else { } if (sse) { - dasm_put(Dst, 6013, 1+1, LJ_TISNUM, (unsigned int)(U64x(43380000,00000000)), (unsigned int)((U64x(43380000,00000000))>>32)); + dasm_put(Dst, 6034, 1+1, LJ_TISNUM, (unsigned int)(U64x(43380000,00000000)), (unsigned int)((U64x(43380000,00000000))>>32)); } else { } - dasm_put(Dst, 6056, LJ_TISNUM); + dasm_put(Dst, 6077, LJ_TISNUM); if (sse) { - dasm_put(Dst, 6083); + dasm_put(Dst, 6104); } else { } - dasm_put(Dst, 6100); + dasm_put(Dst, 6121); if (sse) { - dasm_put(Dst, 6108, 1+1, LJ_TISNUM, (unsigned int)(U64x(43380000,00000000)), (unsigned int)((U64x(43380000,00000000))>>32)); + dasm_put(Dst, 6129, 1+1, LJ_TISNUM, (unsigned int)(U64x(43380000,00000000)), (unsigned int)((U64x(43380000,00000000))>>32)); } else { } - dasm_put(Dst, 6056, LJ_TISNUM); + dasm_put(Dst, 6077, LJ_TISNUM); if (sse) { - dasm_put(Dst, 6151); + dasm_put(Dst, 6172); } else { } - dasm_put(Dst, 6100); + dasm_put(Dst, 6121); if (sse) { - dasm_put(Dst, 6168, 1+1, LJ_TISNUM, (unsigned int)(U64x(43380000,00000000)), (unsigned int)((U64x(43380000,00000000))>>32)); + dasm_put(Dst, 6189, 1+1, LJ_TISNUM, (unsigned int)(U64x(43380000,00000000)), (unsigned int)((U64x(43380000,00000000))>>32)); } else { } - dasm_put(Dst, 6056, LJ_TISNUM); + dasm_put(Dst, 6077, LJ_TISNUM); if (sse) { - dasm_put(Dst, 6211); + dasm_put(Dst, 6232); } else { } - dasm_put(Dst, 6100); + dasm_put(Dst, 6121); if (sse) { - dasm_put(Dst, 6228, 1+1, LJ_TISNUM, (unsigned int)(U64x(43380000,00000000)), (unsigned int)((U64x(43380000,00000000))>>32)); + dasm_put(Dst, 6249, 1+1, LJ_TISNUM, (unsigned int)(U64x(43380000,00000000)), (unsigned int)((U64x(43380000,00000000))>>32)); } else { } - dasm_put(Dst, 6271); + dasm_put(Dst, 6292); if (sse) { - dasm_put(Dst, 6278, 1+1, LJ_TISNUM, (unsigned int)(U64x(43380000,00000000)), (unsigned int)((U64x(43380000,00000000))>>32)); + dasm_put(Dst, 6299, 1+1, LJ_TISNUM, (unsigned int)(U64x(43380000,00000000)), (unsigned int)((U64x(43380000,00000000))>>32)); } else { } - dasm_put(Dst, 6321); + dasm_put(Dst, 6342); if (sse) { - dasm_put(Dst, 6325); + dasm_put(Dst, 6346); } else { } - dasm_put(Dst, 6337); + dasm_put(Dst, 6358); if (sse) { - dasm_put(Dst, 6348, 2+1, LJ_TISNUM, LJ_TISNUM, (unsigned int)(U64x(43380000,00000000)), (unsigned int)((U64x(43380000,00000000))>>32)); + dasm_put(Dst, 6369, 2+1, LJ_TISNUM, LJ_TISNUM, (unsigned int)(U64x(43380000,00000000)), (unsigned int)((U64x(43380000,00000000))>>32)); } else { } - dasm_put(Dst, 6417); + dasm_put(Dst, 6438); if (sse) { - dasm_put(Dst, 6426, 2+1, LJ_TISNUM, LJ_TISNUM, (unsigned int)(U64x(43380000,00000000)), (unsigned int)((U64x(43380000,00000000))>>32)); + dasm_put(Dst, 6447, 2+1, LJ_TISNUM, LJ_TISNUM, (unsigned int)(U64x(43380000,00000000)), (unsigned int)((U64x(43380000,00000000))>>32)); } else { } - dasm_put(Dst, 6495); + dasm_put(Dst, 6516); if (sse) { - dasm_put(Dst, 6505, 2+1, LJ_TISNUM, LJ_TISNUM, (unsigned int)(U64x(43380000,00000000)), (unsigned int)((U64x(43380000,00000000))>>32)); + dasm_put(Dst, 6526, 2+1, LJ_TISNUM, LJ_TISNUM, (unsigned int)(U64x(43380000,00000000)), (unsigned int)((U64x(43380000,00000000))>>32)); } else { } - dasm_put(Dst, 6574); + dasm_put(Dst, 6595); if (sse) { - dasm_put(Dst, 6584, 2+1, LJ_TISNUM, LJ_TISNUM, (unsigned int)(U64x(43380000,00000000)), (unsigned int)((U64x(43380000,00000000))>>32)); + dasm_put(Dst, 6605, 2+1, LJ_TISNUM, LJ_TISNUM, (unsigned int)(U64x(43380000,00000000)), (unsigned int)((U64x(43380000,00000000))>>32)); } else { } - dasm_put(Dst, 6653); + dasm_put(Dst, 6674); if (sse) { - dasm_put(Dst, 6662, 2+1, LJ_TISNUM, LJ_TISNUM, (unsigned int)(U64x(43380000,00000000)), (unsigned int)((U64x(43380000,00000000))>>32)); + dasm_put(Dst, 6683, 2+1, LJ_TISNUM, LJ_TISNUM, (unsigned int)(U64x(43380000,00000000)), (unsigned int)((U64x(43380000,00000000))>>32)); } else { } - dasm_put(Dst, 6731, 1+2, 1+1, Dt1(->base), 8*LUA_MINSTACK, Dt1(->top), Dt1(->maxstack), Dt8(->f), Dt1(->base)); - dasm_put(Dst, 6809, Dt1(->top), Dt7(->pc), FRAME_TYPE, LUA_MINSTACK, Dt1(->base), Dt1(->base)); - dasm_put(Dst, 6936, Dt1(->top), Dt1(->base), Dt1(->top)); + dasm_put(Dst, 6752, 1+2, 1+1, Dt1(->base), 8*LUA_MINSTACK, Dt1(->top), Dt1(->maxstack), Dt8(->f), Dt1(->base)); + dasm_put(Dst, 6830, Dt1(->top), Dt7(->pc), FRAME_TYPE, LUA_MINSTACK, Dt1(->base), Dt1(->base)); + dasm_put(Dst, 6957, Dt1(->top), Dt1(->base), Dt1(->top)); #if LJ_HASJIT - dasm_put(Dst, 6975, DISPATCH_GL(hookmask), HOOK_VMEVENT, HOOK_ACTIVE, LUA_MASKLINE|LUA_MASKCOUNT, DISPATCH_GL(hookcount)); + dasm_put(Dst, 6996, DISPATCH_GL(hookmask), HOOK_VMEVENT, HOOK_ACTIVE, LUA_MASKLINE|LUA_MASKCOUNT, DISPATCH_GL(hookcount)); #endif - dasm_put(Dst, 7008, DISPATCH_GL(hookmask), HOOK_ACTIVE, DISPATCH_GL(hookmask), HOOK_ACTIVE, LUA_MASKLINE|LUA_MASKCOUNT, DISPATCH_GL(hookcount), LUA_MASKLINE); - dasm_put(Dst, 7062, Dt1(->base), Dt1(->base), GG_DISP2STATIC); + dasm_put(Dst, 7029, DISPATCH_GL(hookmask), HOOK_ACTIVE, DISPATCH_GL(hookmask), HOOK_ACTIVE, LUA_MASKLINE|LUA_MASKCOUNT, DISPATCH_GL(hookcount), LUA_MASKLINE); + dasm_put(Dst, 7083, Dt1(->base), Dt1(->base), GG_DISP2STATIC); #if LJ_HASJIT - dasm_put(Dst, 7129, Dt7(->pc), PC2PROTO(framesize), Dt1(->base), Dt1(->top), GG_DISP2J, DISPATCH_J(L)); + dasm_put(Dst, 7150, Dt7(->pc), PC2PROTO(framesize), Dt1(->base), Dt1(->top), GG_DISP2J, DISPATCH_J(L)); #endif - dasm_put(Dst, 7176); + dasm_put(Dst, 7197); #if LJ_HASJIT - dasm_put(Dst, 7003); + dasm_put(Dst, 7024); #endif - dasm_put(Dst, 7183); + dasm_put(Dst, 7204); #if LJ_HASJIT - dasm_put(Dst, 7186); + dasm_put(Dst, 7207); #endif - dasm_put(Dst, 7196, Dt1(->base), Dt1(->top)); + dasm_put(Dst, 7217, Dt1(->base), Dt1(->top)); #if LJ_HASJIT - dasm_put(Dst, 7229); + dasm_put(Dst, 7250); #endif - dasm_put(Dst, 7234, Dt1(->base), Dt1(->top)); + dasm_put(Dst, 7255, Dt1(->base), Dt1(->top)); #if LJ_HASJIT - dasm_put(Dst, 7265, DISPATCH_GL(vmstate), DISPATCH_GL(vmstate), ~LJ_VMST_EXIT, DISPATCH_J(exitno), DISPATCH_J(parent), 16*8, DISPATCH_GL(jit_L), DISPATCH_GL(jit_base), DISPATCH_J(L), DISPATCH_GL(jit_L), Dt1(->base), GG_DISP2J, Dt1(->cframe), CFRAME_RAWMASK, CFRAME_OFS_L, Dt1(->base), CFRAME_OFS_PC); + dasm_put(Dst, 7286, DISPATCH_GL(vmstate), DISPATCH_GL(vmstate), ~LJ_VMST_EXIT, DISPATCH_J(exitno), DISPATCH_J(parent), 16*8, DISPATCH_GL(jit_L), DISPATCH_GL(jit_base), DISPATCH_J(L), DISPATCH_GL(jit_L), Dt1(->base), GG_DISP2J, Dt1(->cframe), CFRAME_RAWMASK, CFRAME_OFS_L, Dt1(->base), CFRAME_OFS_PC); #endif - dasm_put(Dst, 7504); + dasm_put(Dst, 7525); #if LJ_HASJIT - dasm_put(Dst, 7507, Dt7(->pc), PC2PROTO(k), DISPATCH_GL(jit_L), DISPATCH_GL(vmstate), ~LJ_VMST_INTERP, BC_FUNCF); + dasm_put(Dst, 7528, Dt7(->pc), PC2PROTO(k), DISPATCH_GL(jit_L), DISPATCH_GL(vmstate), ~LJ_VMST_INTERP, BC_FUNCF); #endif - dasm_put(Dst, 7607); + dasm_put(Dst, 7628); if (!sse) { - dasm_put(Dst, 7610); + dasm_put(Dst, 7631); } - dasm_put(Dst, 7655, (unsigned int)(U64x(7fffffff,ffffffff)), (unsigned int)((U64x(7fffffff,ffffffff))>>32), (unsigned int)(U64x(43300000,00000000)), (unsigned int)((U64x(43300000,00000000))>>32), (unsigned int)(U64x(3ff00000,00000000)), (unsigned int)((U64x(3ff00000,00000000))>>32)); + dasm_put(Dst, 7676, (unsigned int)(U64x(7fffffff,ffffffff)), (unsigned int)((U64x(7fffffff,ffffffff))>>32), (unsigned int)(U64x(43300000,00000000)), (unsigned int)((U64x(43300000,00000000))>>32), (unsigned int)(U64x(3ff00000,00000000)), (unsigned int)((U64x(3ff00000,00000000))>>32)); if (!sse) { - dasm_put(Dst, 7741); + dasm_put(Dst, 7762); } - dasm_put(Dst, 7786, (unsigned int)(U64x(7fffffff,ffffffff)), (unsigned int)((U64x(7fffffff,ffffffff))>>32), (unsigned int)(U64x(43300000,00000000)), (unsigned int)((U64x(43300000,00000000))>>32), (unsigned int)(U64x(bff00000,00000000)), (unsigned int)((U64x(bff00000,00000000))>>32)); + dasm_put(Dst, 7807, (unsigned int)(U64x(7fffffff,ffffffff)), (unsigned int)((U64x(7fffffff,ffffffff))>>32), (unsigned int)(U64x(43300000,00000000)), (unsigned int)((U64x(43300000,00000000))>>32), (unsigned int)(U64x(bff00000,00000000)), (unsigned int)((U64x(bff00000,00000000))>>32)); if (!sse) { - dasm_put(Dst, 7872); + dasm_put(Dst, 7893); } - dasm_put(Dst, 7911, (unsigned int)(U64x(7fffffff,ffffffff)), (unsigned int)((U64x(7fffffff,ffffffff))>>32), (unsigned int)(U64x(43300000,00000000)), (unsigned int)((U64x(43300000,00000000))>>32), (unsigned int)(U64x(3ff00000,00000000)), (unsigned int)((U64x(3ff00000,00000000))>>32)); + dasm_put(Dst, 7932, (unsigned int)(U64x(7fffffff,ffffffff)), (unsigned int)((U64x(7fffffff,ffffffff))>>32), (unsigned int)(U64x(43300000,00000000)), (unsigned int)((U64x(43300000,00000000))>>32), (unsigned int)(U64x(3ff00000,00000000)), (unsigned int)((U64x(3ff00000,00000000))>>32)); if (sse) { - dasm_put(Dst, 8000, (unsigned int)(U64x(7fffffff,ffffffff)), (unsigned int)((U64x(7fffffff,ffffffff))>>32), (unsigned int)(U64x(43300000,00000000)), (unsigned int)((U64x(43300000,00000000))>>32), (unsigned int)(U64x(3ff00000,00000000)), (unsigned int)((U64x(3ff00000,00000000))>>32)); + dasm_put(Dst, 8021, (unsigned int)(U64x(7fffffff,ffffffff)), (unsigned int)((U64x(7fffffff,ffffffff))>>32), (unsigned int)(U64x(43300000,00000000)), (unsigned int)((U64x(43300000,00000000))>>32), (unsigned int)(U64x(3ff00000,00000000)), (unsigned int)((U64x(3ff00000,00000000))>>32)); } else { - dasm_put(Dst, 8114); + dasm_put(Dst, 8135); } - dasm_put(Dst, 8161); + dasm_put(Dst, 8182); if (!sse) { } else { - dasm_put(Dst, 8238); + dasm_put(Dst, 8259); } - dasm_put(Dst, 8241); - dasm_put(Dst, 8326, (unsigned int)(U64x(3ff00000,00000000)), (unsigned int)((U64x(3ff00000,00000000))>>32), (unsigned int)(U64x(3ff00000,00000000)), (unsigned int)((U64x(3ff00000,00000000))>>32)); - dasm_put(Dst, 8427, (unsigned int)(U64x(3ff00000,00000000)), (unsigned int)((U64x(3ff00000,00000000))>>32), (unsigned int)(U64x(7fffffff,ffffffff)), (unsigned int)((U64x(7fffffff,ffffffff))>>32), (unsigned int)(U64x(3ff00000,00000000)), (unsigned int)((U64x(3ff00000,00000000))>>32), (unsigned int)(U64x(7ff00000,00000000)), (unsigned int)((U64x(7ff00000,00000000))>>32)); - dasm_put(Dst, 8601); + dasm_put(Dst, 8262); + dasm_put(Dst, 8347, (unsigned int)(U64x(3ff00000,00000000)), (unsigned int)((U64x(3ff00000,00000000))>>32), (unsigned int)(U64x(3ff00000,00000000)), (unsigned int)((U64x(3ff00000,00000000))>>32)); + dasm_put(Dst, 8448, (unsigned int)(U64x(3ff00000,00000000)), (unsigned int)((U64x(3ff00000,00000000))>>32), (unsigned int)(U64x(7fffffff,ffffffff)), (unsigned int)((U64x(7fffffff,ffffffff))>>32), (unsigned int)(U64x(3ff00000,00000000)), (unsigned int)((U64x(3ff00000,00000000))>>32), (unsigned int)(U64x(7ff00000,00000000)), (unsigned int)((U64x(7ff00000,00000000))>>32)); + dasm_put(Dst, 8622); #if LJ_HASJIT if (sse) { - dasm_put(Dst, 8642); - dasm_put(Dst, 8712); - dasm_put(Dst, 8784); + dasm_put(Dst, 8663); + dasm_put(Dst, 8733); + dasm_put(Dst, 8805); } else { - dasm_put(Dst, 8836); - dasm_put(Dst, 8928); + dasm_put(Dst, 8857); + dasm_put(Dst, 8949); } - dasm_put(Dst, 8974); + dasm_put(Dst, 8995); #endif - dasm_put(Dst, 8978); + dasm_put(Dst, 8999); if (sse) { - dasm_put(Dst, 8981, (unsigned int)(U64x(80000000,00000000)), (unsigned int)((U64x(80000000,00000000))>>32)); - dasm_put(Dst, 9066, (unsigned int)(U64x(7fffffff,ffffffff)), (unsigned int)((U64x(7fffffff,ffffffff))>>32)); + dasm_put(Dst, 9002, (unsigned int)(U64x(80000000,00000000)), (unsigned int)((U64x(80000000,00000000))>>32)); + dasm_put(Dst, 9087, (unsigned int)(U64x(7fffffff,ffffffff)), (unsigned int)((U64x(7fffffff,ffffffff))>>32)); } else { - dasm_put(Dst, 9194); - dasm_put(Dst, 9277); + dasm_put(Dst, 9215); + dasm_put(Dst, 9298); if (cmov) { - dasm_put(Dst, 9332); + dasm_put(Dst, 9353); } else { - dasm_put(Dst, 9351); + dasm_put(Dst, 9372); } - dasm_put(Dst, 8974); + dasm_put(Dst, 8995); } - dasm_put(Dst, 9392); + dasm_put(Dst, 9413); } /* Generate the code for a single instruction. */ @@ -1450,618 +1452,618 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop, int cmov, int sse) /* 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, 9414, LJ_TISNUM, LJ_TISNUM); + dasm_put(Dst, 9435, LJ_TISNUM, LJ_TISNUM); if (sse) { - dasm_put(Dst, 9435); + dasm_put(Dst, 9456); } else { - dasm_put(Dst, 9450); + dasm_put(Dst, 9471); if (cmov) { - dasm_put(Dst, 9460); + dasm_put(Dst, 9481); } else { - dasm_put(Dst, 9466); + dasm_put(Dst, 9487); } } switch (op) { case BC_ISLT: - dasm_put(Dst, 9473); + dasm_put(Dst, 9494); break; case BC_ISGE: - dasm_put(Dst, 9272); + dasm_put(Dst, 9293); break; case BC_ISLE: - dasm_put(Dst, 5879); + dasm_put(Dst, 5900); break; case BC_ISGT: - dasm_put(Dst, 9478); + dasm_put(Dst, 9499); break; default: break; /* Shut up GCC. */ } - dasm_put(Dst, 9483, -BCBIAS_J*4); + dasm_put(Dst, 9504, -BCBIAS_J*4); break; case BC_ISEQV: case BC_ISNEV: vk = op == BC_ISEQV; - dasm_put(Dst, 9518, LJ_TISNUM, LJ_TISNUM); + dasm_put(Dst, 9539, LJ_TISNUM, LJ_TISNUM); if (sse) { - dasm_put(Dst, 9544); + dasm_put(Dst, 9565); } else { - dasm_put(Dst, 9556); + dasm_put(Dst, 9577); if (cmov) { - dasm_put(Dst, 9460); + dasm_put(Dst, 9481); } else { - dasm_put(Dst, 9466); + dasm_put(Dst, 9487); } } iseqne_fp: if (vk) { - dasm_put(Dst, 9563); + dasm_put(Dst, 9584); } else { - dasm_put(Dst, 9572); + dasm_put(Dst, 9593); } iseqne_end: if (vk) { - dasm_put(Dst, 9581, -BCBIAS_J*4); + dasm_put(Dst, 9602, -BCBIAS_J*4); } else { - dasm_put(Dst, 9596, -BCBIAS_J*4); + dasm_put(Dst, 9617, -BCBIAS_J*4); } - dasm_put(Dst, 9497); + dasm_put(Dst, 9518); if (op == BC_ISEQV || op == BC_ISNEV) { - dasm_put(Dst, 9611, LJ_TISPRI, LJ_TISTABUD, Dt6(->metatable), Dt6(->nomm), 1<metatable), Dt6(->nomm), 1<>32)); + dasm_put(Dst, 9920, (unsigned int)(U64x(80000000,00000000)), (unsigned int)((U64x(80000000,00000000))>>32)); } else { - dasm_put(Dst, 9924); + dasm_put(Dst, 9945); } - dasm_put(Dst, 9497); + dasm_put(Dst, 9518); break; case BC_LEN: - dasm_put(Dst, 9933, LJ_TSTR); + dasm_put(Dst, 9954, LJ_TSTR); if (sse) { - dasm_put(Dst, 9947, Dt5(->len)); + dasm_put(Dst, 9968, Dt5(->len)); } else { - dasm_put(Dst, 9965, Dt5(->len)); + dasm_put(Dst, 9986, Dt5(->len)); } - dasm_put(Dst, 9974, LJ_TTAB); + dasm_put(Dst, 9995, LJ_TTAB); if (sse) { - dasm_put(Dst, 10016); + dasm_put(Dst, 10037); } else { } - dasm_put(Dst, 10025); + dasm_put(Dst, 10046); break; /* -- Binary ops -------------------------------------------------------- */ case BC_ADDVN: case BC_ADDNV: case BC_ADDVV: - dasm_put(Dst, 10035); + dasm_put(Dst, 10056); vk = ((int)op - BC_ADDVN) / (BC_ADDNV-BC_ADDVN); switch (vk) { case 0: - dasm_put(Dst, 10043, LJ_TISNUM); + dasm_put(Dst, 10064, LJ_TISNUM); if (sse) { - dasm_put(Dst, 10055); + dasm_put(Dst, 10076); } else { - dasm_put(Dst, 10070); + dasm_put(Dst, 10091); } break; case 1: - dasm_put(Dst, 10079, LJ_TISNUM); + dasm_put(Dst, 10100, LJ_TISNUM); if (sse) { - dasm_put(Dst, 10091); + dasm_put(Dst, 10112); } else { - dasm_put(Dst, 10106); + dasm_put(Dst, 10127); } break; default: - dasm_put(Dst, 10115, LJ_TISNUM, LJ_TISNUM); + dasm_put(Dst, 10136, LJ_TISNUM, LJ_TISNUM); if (sse) { - dasm_put(Dst, 10137); + dasm_put(Dst, 10158); } else { - dasm_put(Dst, 10151); + dasm_put(Dst, 10172); } break; } if (sse) { - dasm_put(Dst, 9917); + dasm_put(Dst, 9938); } else { - dasm_put(Dst, 9929); + dasm_put(Dst, 9950); } - dasm_put(Dst, 9497); + dasm_put(Dst, 9518); break; case BC_SUBVN: case BC_SUBNV: case BC_SUBVV: - dasm_put(Dst, 10035); + dasm_put(Dst, 10056); vk = ((int)op - BC_ADDVN) / (BC_ADDNV-BC_ADDVN); switch (vk) { case 0: - dasm_put(Dst, 10043, LJ_TISNUM); + dasm_put(Dst, 10064, LJ_TISNUM); if (sse) { - dasm_put(Dst, 10159); + dasm_put(Dst, 10180); } else { - dasm_put(Dst, 10174); + dasm_put(Dst, 10195); } break; case 1: - dasm_put(Dst, 10079, LJ_TISNUM); + dasm_put(Dst, 10100, LJ_TISNUM); if (sse) { - dasm_put(Dst, 10183); + dasm_put(Dst, 10204); } else { - dasm_put(Dst, 10198); + dasm_put(Dst, 10219); } break; default: - dasm_put(Dst, 10115, LJ_TISNUM, LJ_TISNUM); + dasm_put(Dst, 10136, LJ_TISNUM, LJ_TISNUM); if (sse) { - dasm_put(Dst, 10207); + dasm_put(Dst, 10228); } else { - dasm_put(Dst, 10221); + dasm_put(Dst, 10242); } break; } if (sse) { - dasm_put(Dst, 9917); + dasm_put(Dst, 9938); } else { - dasm_put(Dst, 9929); + dasm_put(Dst, 9950); } - dasm_put(Dst, 9497); + dasm_put(Dst, 9518); break; case BC_MULVN: case BC_MULNV: case BC_MULVV: - dasm_put(Dst, 10035); + dasm_put(Dst, 10056); vk = ((int)op - BC_ADDVN) / (BC_ADDNV-BC_ADDVN); switch (vk) { case 0: - dasm_put(Dst, 10043, LJ_TISNUM); + dasm_put(Dst, 10064, LJ_TISNUM); if (sse) { - dasm_put(Dst, 10229); + dasm_put(Dst, 10250); } else { - dasm_put(Dst, 10244); + dasm_put(Dst, 10265); } break; case 1: - dasm_put(Dst, 10079, LJ_TISNUM); + dasm_put(Dst, 10100, LJ_TISNUM); if (sse) { - dasm_put(Dst, 10253); + dasm_put(Dst, 10274); } else { - dasm_put(Dst, 10268); + dasm_put(Dst, 10289); } break; default: - dasm_put(Dst, 10115, LJ_TISNUM, LJ_TISNUM); + dasm_put(Dst, 10136, LJ_TISNUM, LJ_TISNUM); if (sse) { - dasm_put(Dst, 10277); + dasm_put(Dst, 10298); } else { - dasm_put(Dst, 10291); + dasm_put(Dst, 10312); } break; } if (sse) { - dasm_put(Dst, 9917); + dasm_put(Dst, 9938); } else { - dasm_put(Dst, 9929); + dasm_put(Dst, 9950); } - dasm_put(Dst, 9497); + dasm_put(Dst, 9518); break; case BC_DIVVN: case BC_DIVNV: case BC_DIVVV: - dasm_put(Dst, 10035); + dasm_put(Dst, 10056); vk = ((int)op - BC_ADDVN) / (BC_ADDNV-BC_ADDVN); switch (vk) { case 0: - dasm_put(Dst, 10043, LJ_TISNUM); + dasm_put(Dst, 10064, LJ_TISNUM); if (sse) { - dasm_put(Dst, 10299); + dasm_put(Dst, 10320); } else { - dasm_put(Dst, 10314); + dasm_put(Dst, 10335); } break; case 1: - dasm_put(Dst, 10079, LJ_TISNUM); + dasm_put(Dst, 10100, LJ_TISNUM); if (sse) { - dasm_put(Dst, 10323); + dasm_put(Dst, 10344); } else { - dasm_put(Dst, 10338); + dasm_put(Dst, 10359); } break; default: - dasm_put(Dst, 10115, LJ_TISNUM, LJ_TISNUM); + dasm_put(Dst, 10136, LJ_TISNUM, LJ_TISNUM); if (sse) { - dasm_put(Dst, 10347); + dasm_put(Dst, 10368); } else { - dasm_put(Dst, 10361); + dasm_put(Dst, 10382); } break; } if (sse) { - dasm_put(Dst, 9917); + dasm_put(Dst, 9938); } else { - dasm_put(Dst, 9929); + dasm_put(Dst, 9950); } - dasm_put(Dst, 9497); + dasm_put(Dst, 9518); break; case BC_MODVN: - dasm_put(Dst, 10035); + dasm_put(Dst, 10056); vk = ((int)op - BC_ADDVN) / (BC_ADDNV-BC_ADDVN); switch (vk) { case 0: - dasm_put(Dst, 10043, LJ_TISNUM); + dasm_put(Dst, 10064, LJ_TISNUM); if (sse) { - dasm_put(Dst, 10369); + dasm_put(Dst, 10390); } else { - dasm_put(Dst, 10384); + dasm_put(Dst, 10405); } break; case 1: - dasm_put(Dst, 10079, LJ_TISNUM); + dasm_put(Dst, 10100, LJ_TISNUM); if (sse) { - dasm_put(Dst, 10393); + dasm_put(Dst, 10414); } else { - dasm_put(Dst, 10408); + dasm_put(Dst, 10429); } break; default: - dasm_put(Dst, 10115, LJ_TISNUM, LJ_TISNUM); + dasm_put(Dst, 10136, LJ_TISNUM, LJ_TISNUM); if (sse) { - dasm_put(Dst, 10417); + dasm_put(Dst, 10438); } else { - dasm_put(Dst, 10431); + dasm_put(Dst, 10452); } break; } - dasm_put(Dst, 10439); + dasm_put(Dst, 10460); if (sse) { - dasm_put(Dst, 9917); + dasm_put(Dst, 9938); } else { - dasm_put(Dst, 9929); + dasm_put(Dst, 9950); } - dasm_put(Dst, 9497); + dasm_put(Dst, 9518); break; case BC_MODNV: case BC_MODVV: - dasm_put(Dst, 10035); + dasm_put(Dst, 10056); vk = ((int)op - BC_ADDVN) / (BC_ADDNV-BC_ADDVN); switch (vk) { case 0: - dasm_put(Dst, 10043, LJ_TISNUM); + dasm_put(Dst, 10064, LJ_TISNUM); if (sse) { - dasm_put(Dst, 10369); + dasm_put(Dst, 10390); } else { - dasm_put(Dst, 10384); + dasm_put(Dst, 10405); } break; case 1: - dasm_put(Dst, 10079, LJ_TISNUM); + dasm_put(Dst, 10100, LJ_TISNUM); if (sse) { - dasm_put(Dst, 10393); + dasm_put(Dst, 10414); } else { - dasm_put(Dst, 10408); + dasm_put(Dst, 10429); } break; default: - dasm_put(Dst, 10115, LJ_TISNUM, LJ_TISNUM); + dasm_put(Dst, 10136, LJ_TISNUM, LJ_TISNUM); if (sse) { - dasm_put(Dst, 10417); + dasm_put(Dst, 10438); } else { - dasm_put(Dst, 10431); + dasm_put(Dst, 10452); } break; } - dasm_put(Dst, 10445); + dasm_put(Dst, 10466); break; case BC_POW: - dasm_put(Dst, 10035); + dasm_put(Dst, 10056); vk = ((int)op - BC_ADDVN) / (BC_ADDNV-BC_ADDVN); switch (vk) { case 0: - dasm_put(Dst, 10043, LJ_TISNUM); + dasm_put(Dst, 10064, LJ_TISNUM); if (sse) { - dasm_put(Dst, 10369); + dasm_put(Dst, 10390); } else { - dasm_put(Dst, 10384); + dasm_put(Dst, 10405); } break; case 1: - dasm_put(Dst, 10079, LJ_TISNUM); + dasm_put(Dst, 10100, LJ_TISNUM); if (sse) { - dasm_put(Dst, 10393); + dasm_put(Dst, 10414); } else { - dasm_put(Dst, 10408); + dasm_put(Dst, 10429); } break; default: - dasm_put(Dst, 10115, LJ_TISNUM, LJ_TISNUM); + dasm_put(Dst, 10136, LJ_TISNUM, LJ_TISNUM); if (sse) { - dasm_put(Dst, 10417); + dasm_put(Dst, 10438); } else { - dasm_put(Dst, 10431); + dasm_put(Dst, 10452); } break; } - dasm_put(Dst, 10450); + dasm_put(Dst, 10471); if (sse) { - dasm_put(Dst, 9917); + dasm_put(Dst, 9938); } else { - dasm_put(Dst, 9929); + dasm_put(Dst, 9950); } - dasm_put(Dst, 9497); + dasm_put(Dst, 9518); break; case BC_CAT: - dasm_put(Dst, 10454, Dt1(->base), Dt1(->base)); + dasm_put(Dst, 10475, Dt1(->base), Dt1(->base)); break; /* -- Constant ops ------------------------------------------------------ */ case BC_KSTR: - dasm_put(Dst, 10538, LJ_TSTR); + dasm_put(Dst, 10559, LJ_TSTR); break; case BC_KSHORT: if (sse) { - dasm_put(Dst, 10575); + dasm_put(Dst, 10596); } else { - dasm_put(Dst, 10590); + dasm_put(Dst, 10611); } - dasm_put(Dst, 9497); + dasm_put(Dst, 9518); break; case BC_KNUM: if (sse) { - dasm_put(Dst, 10598); + dasm_put(Dst, 10619); } else { - dasm_put(Dst, 10612); + dasm_put(Dst, 10633); } - dasm_put(Dst, 9497); + dasm_put(Dst, 9518); break; case BC_KPRI: - dasm_put(Dst, 10620); + dasm_put(Dst, 10641); break; case BC_KNIL: - dasm_put(Dst, 10649, LJ_TNIL); + dasm_put(Dst, 10670, LJ_TNIL); break; /* -- Upvalue and function ops ------------------------------------------ */ case BC_UGET: - dasm_put(Dst, 10697, offsetof(GCfuncL, uvptr), DtA(->v)); + dasm_put(Dst, 10718, offsetof(GCfuncL, uvptr), DtA(->v)); break; case BC_USETV: #define TV2MARKOFS \ ((int32_t)offsetof(GCupval, marked)-(int32_t)offsetof(GCupval, tv)) - dasm_put(Dst, 10738, offsetof(GCfuncL, uvptr), DtA(->closed), DtA(->v), TV2MARKOFS, LJ_GC_BLACK, LJ_TISGCV, LJ_TISNUM - LJ_TISGCV, Dt4(->gch.marked), LJ_GC_WHITES, GG_DISP2G); - dasm_put(Dst, 10834); + dasm_put(Dst, 10759, offsetof(GCfuncL, uvptr), DtA(->closed), DtA(->v), TV2MARKOFS, LJ_GC_BLACK, LJ_TISGCV, LJ_TISNUM - LJ_TISGCV, Dt4(->gch.marked), LJ_GC_WHITES, GG_DISP2G); + dasm_put(Dst, 10855); break; #undef TV2MARKOFS case BC_USETS: - dasm_put(Dst, 10846, offsetof(GCfuncL, uvptr), DtA(->v), LJ_TSTR, DtA(->marked), LJ_GC_BLACK, Dt4(->gch.marked), LJ_GC_WHITES, DtA(->closed), GG_DISP2G); + dasm_put(Dst, 10867, offsetof(GCfuncL, uvptr), DtA(->v), LJ_TSTR, DtA(->marked), LJ_GC_BLACK, Dt4(->gch.marked), LJ_GC_WHITES, DtA(->closed), GG_DISP2G); break; case BC_USETN: - dasm_put(Dst, 10942); + dasm_put(Dst, 10963); if (sse) { - dasm_put(Dst, 10947); + dasm_put(Dst, 10968); } else { - dasm_put(Dst, 9739); + dasm_put(Dst, 9760); } - dasm_put(Dst, 10955, offsetof(GCfuncL, uvptr), DtA(->v)); + dasm_put(Dst, 10976, offsetof(GCfuncL, uvptr), DtA(->v)); if (sse) { - dasm_put(Dst, 10964); + dasm_put(Dst, 10985); } else { - dasm_put(Dst, 10970); + dasm_put(Dst, 10991); } - dasm_put(Dst, 9497); + dasm_put(Dst, 9518); break; case BC_USETP: - dasm_put(Dst, 10973, offsetof(GCfuncL, uvptr), DtA(->v)); + dasm_put(Dst, 10994, offsetof(GCfuncL, uvptr), DtA(->v)); break; case BC_UCLO: - dasm_put(Dst, 11013, -BCBIAS_J*4, Dt1(->openupval), Dt1(->base), Dt1(->base)); + dasm_put(Dst, 11034, -BCBIAS_J*4, Dt1(->openupval), Dt1(->base), Dt1(->base)); break; case BC_FNEW: - dasm_put(Dst, 11069, Dt1(->base), Dt1(->base), LJ_TFUNC); + dasm_put(Dst, 11090, Dt1(->base), Dt1(->base), LJ_TFUNC); break; /* -- Table ops --------------------------------------------------------- */ case BC_TNEW: - dasm_put(Dst, 11136, Dt1(->base), DISPATCH_GL(gc.total), DISPATCH_GL(gc.threshold), Dt1(->base), LJ_TTAB); + dasm_put(Dst, 11157, Dt1(->base), DISPATCH_GL(gc.total), DISPATCH_GL(gc.threshold), Dt1(->base), LJ_TTAB); break; case BC_TDUP: - dasm_put(Dst, 11260, DISPATCH_GL(gc.total), DISPATCH_GL(gc.threshold), Dt1(->base), Dt1(->base), LJ_TTAB); + dasm_put(Dst, 11281, DISPATCH_GL(gc.total), DISPATCH_GL(gc.threshold), Dt1(->base), Dt1(->base), LJ_TTAB); break; case BC_GGET: - dasm_put(Dst, 11359, Dt7(->env)); + dasm_put(Dst, 11380, Dt7(->env)); break; case BC_GSET: - dasm_put(Dst, 11379, Dt7(->env)); + dasm_put(Dst, 11400, Dt7(->env)); break; case BC_TGETV: - dasm_put(Dst, 11399, LJ_TTAB, LJ_TISNUM); + dasm_put(Dst, 11420, LJ_TTAB, LJ_TISNUM); if (sse) { - dasm_put(Dst, 11432); + dasm_put(Dst, 11453); } else { } - dasm_put(Dst, 11453, Dt6(->asize), Dt6(->array), LJ_TNIL, Dt6(->metatable), Dt6(->metatable), Dt6(->nomm), 1<asize), Dt6(->array), LJ_TNIL, Dt6(->metatable), Dt6(->metatable), Dt6(->nomm), 1<hmask), Dt5(->hash), sizeof(Node), Dt6(->node), DtB(->key.it), LJ_TSTR, DtB(->key.gcr), LJ_TNIL); - dasm_put(Dst, 11652, LJ_TNIL, DtB(->next), Dt6(->metatable), Dt6(->nomm), 1<hmask), Dt5(->hash), sizeof(Node), Dt6(->node), DtB(->key.it), LJ_TSTR, DtB(->key.gcr), LJ_TNIL); + dasm_put(Dst, 11673, LJ_TNIL, DtB(->next), Dt6(->metatable), Dt6(->nomm), 1<asize), Dt6(->array), LJ_TNIL, Dt6(->metatable), Dt6(->metatable), Dt6(->nomm), 1<asize), Dt6(->array), LJ_TNIL, Dt6(->metatable), Dt6(->metatable), Dt6(->nomm), 1<asize), Dt6(->array), LJ_TNIL, Dt6(->marked), LJ_GC_BLACK, Dt6(->metatable), Dt6(->metatable)); - dasm_put(Dst, 11950, Dt6(->nomm), 1<marked), cast_byte(~LJ_GC_BLACK), DISPATCH_GL(gc.grayagain), DISPATCH_GL(gc.grayagain), Dt6(->gclist)); + dasm_put(Dst, 11891, Dt6(->asize), Dt6(->array), LJ_TNIL, Dt6(->marked), LJ_GC_BLACK, Dt6(->metatable), Dt6(->metatable)); + dasm_put(Dst, 11971, Dt6(->nomm), 1<marked), cast_byte(~LJ_GC_BLACK), DISPATCH_GL(gc.grayagain), DISPATCH_GL(gc.grayagain), Dt6(->gclist)); break; case BC_TSETS: - dasm_put(Dst, 12014, LJ_TTAB, Dt6(->hmask), Dt5(->hash), sizeof(Node), Dt6(->nomm), Dt6(->node), DtB(->key.it), LJ_TSTR, DtB(->key.gcr), LJ_TNIL); - dasm_put(Dst, 12091, Dt6(->marked), LJ_GC_BLACK, Dt6(->metatable), Dt6(->metatable), Dt6(->nomm), 1<next)); - dasm_put(Dst, 12178, Dt6(->metatable), Dt6(->nomm), 1<base), Dt1(->base), Dt6(->marked), cast_byte(~LJ_GC_BLACK), DISPATCH_GL(gc.grayagain), DISPATCH_GL(gc.grayagain), Dt6(->gclist)); + dasm_put(Dst, 12035, LJ_TTAB, Dt6(->hmask), Dt5(->hash), sizeof(Node), Dt6(->nomm), Dt6(->node), DtB(->key.it), LJ_TSTR, DtB(->key.gcr), LJ_TNIL); + dasm_put(Dst, 12112, Dt6(->marked), LJ_GC_BLACK, Dt6(->metatable), Dt6(->metatable), Dt6(->nomm), 1<next)); + dasm_put(Dst, 12199, Dt6(->metatable), Dt6(->nomm), 1<base), Dt1(->base), Dt6(->marked), cast_byte(~LJ_GC_BLACK), DISPATCH_GL(gc.grayagain), DISPATCH_GL(gc.grayagain), Dt6(->gclist)); break; case BC_TSETB: - dasm_put(Dst, 12270, LJ_TTAB, Dt6(->asize), Dt6(->array), LJ_TNIL, Dt6(->marked), LJ_GC_BLACK, Dt6(->metatable)); - dasm_put(Dst, 12365, Dt6(->metatable), Dt6(->nomm), 1<marked), cast_byte(~LJ_GC_BLACK), DISPATCH_GL(gc.grayagain), DISPATCH_GL(gc.grayagain), Dt6(->gclist)); + dasm_put(Dst, 12291, LJ_TTAB, Dt6(->asize), Dt6(->array), LJ_TNIL, Dt6(->marked), LJ_GC_BLACK, Dt6(->metatable)); + dasm_put(Dst, 12386, Dt6(->metatable), Dt6(->nomm), 1<marked), cast_byte(~LJ_GC_BLACK), DISPATCH_GL(gc.grayagain), DISPATCH_GL(gc.grayagain), Dt6(->gclist)); break; case BC_TSETM: - dasm_put(Dst, 12413, Dt6(->marked), LJ_GC_BLACK, Dt6(->asize), Dt6(->array), Dt1(->base), Dt1(->base)); - dasm_put(Dst, 12563, Dt6(->marked), cast_byte(~LJ_GC_BLACK), DISPATCH_GL(gc.grayagain), DISPATCH_GL(gc.grayagain), Dt6(->gclist)); + dasm_put(Dst, 12434, Dt6(->marked), LJ_GC_BLACK, Dt6(->asize), Dt6(->array), Dt1(->base), Dt1(->base)); + dasm_put(Dst, 12584, Dt6(->marked), cast_byte(~LJ_GC_BLACK), DISPATCH_GL(gc.grayagain), DISPATCH_GL(gc.grayagain), Dt6(->gclist)); break; /* -- Calls and vararg handling ----------------------------------------- */ case BC_CALL: case BC_CALLM: - dasm_put(Dst, 10039); + dasm_put(Dst, 10060); if (op == BC_CALLM) { - dasm_put(Dst, 12583); + dasm_put(Dst, 12604); } - dasm_put(Dst, 12588, LJ_TFUNC, Dt7(->pc)); + dasm_put(Dst, 12609, LJ_TFUNC, Dt7(->pc)); break; case BC_CALLMT: - dasm_put(Dst, 12583); + dasm_put(Dst, 12604); break; case BC_CALLT: - dasm_put(Dst, 12631, LJ_TFUNC, FRAME_TYPE, Dt7(->ffid), Dt7(->pc)); - dasm_put(Dst, 12749, FRAME_TYPE, Dt7(->pc), PC2PROTO(k), FRAME_VARG, FRAME_TYPEP, FRAME_VARG); + dasm_put(Dst, 12652, LJ_TFUNC, FRAME_TYPE, Dt7(->ffid), Dt7(->pc)); + dasm_put(Dst, 12770, FRAME_TYPE, Dt7(->pc), PC2PROTO(k), FRAME_VARG, FRAME_TYPEP, FRAME_VARG); break; case BC_ITERC: - dasm_put(Dst, 12823, LJ_TFUNC, 2+1, Dt7(->pc)); + dasm_put(Dst, 12844, LJ_TFUNC, 2+1, Dt7(->pc)); break; case BC_ITERN: #if LJ_HASJIT #endif - dasm_put(Dst, 12895, Dt6(->asize), Dt6(->array), LJ_TNIL); + dasm_put(Dst, 12916, Dt6(->asize), Dt6(->array), LJ_TNIL); if (sse) { - dasm_put(Dst, 12947); + dasm_put(Dst, 12968); } else { - dasm_put(Dst, 12953); + dasm_put(Dst, 12974); } - dasm_put(Dst, 12959); + dasm_put(Dst, 12980); if (sse) { - dasm_put(Dst, 9917); + dasm_put(Dst, 9938); } else { - dasm_put(Dst, 9929); + dasm_put(Dst, 9950); } - dasm_put(Dst, 12972, -BCBIAS_J*4); + dasm_put(Dst, 12993, -BCBIAS_J*4); if (!sse) { - dasm_put(Dst, 13026); + dasm_put(Dst, 13047); } - dasm_put(Dst, 13032, Dt6(->hmask), sizeof(Node), Dt6(->node), DtB(->val.it), LJ_TNIL, DtB(->key), DtB(->val)); + dasm_put(Dst, 13053, Dt6(->hmask), sizeof(Node), Dt6(->node), DtB(->val.it), LJ_TNIL, DtB(->key), DtB(->val)); break; case BC_ISNEXT: - dasm_put(Dst, 13111, LJ_TFUNC, LJ_TTAB, LJ_TNIL, Dt8(->ffid), FF_next_N, -BCBIAS_J*4, BC_JMP, -BCBIAS_J*4, BC_ITERC); + dasm_put(Dst, 13132, LJ_TFUNC, LJ_TTAB, LJ_TNIL, Dt8(->ffid), FF_next_N, -BCBIAS_J*4, BC_JMP, -BCBIAS_J*4, BC_ITERC); break; case BC_VARG: - dasm_put(Dst, 13212, (8+FRAME_VARG), LJ_TNIL, Dt1(->maxstack)); - dasm_put(Dst, 13379, Dt1(->base), Dt1(->top), Dt1(->base), Dt1(->top)); + dasm_put(Dst, 13233, (8+FRAME_VARG), LJ_TNIL, Dt1(->maxstack)); + dasm_put(Dst, 13400, Dt1(->base), Dt1(->top), Dt1(->base), Dt1(->top)); break; /* -- Returns ----------------------------------------------------------- */ case BC_RETM: - dasm_put(Dst, 12583); + dasm_put(Dst, 12604); break; case BC_RET: case BC_RET0: case BC_RET1: if (op != BC_RET0) { - dasm_put(Dst, 13449); + dasm_put(Dst, 13470); } - dasm_put(Dst, 13453, FRAME_TYPE); + dasm_put(Dst, 13474, FRAME_TYPE); switch (op) { case BC_RET: - dasm_put(Dst, 13472); + dasm_put(Dst, 13493); break; case BC_RET1: - dasm_put(Dst, 13526); + dasm_put(Dst, 13547); /* fallthrough */ case BC_RET0: - dasm_put(Dst, 13536); + dasm_put(Dst, 13557); default: break; } - dasm_put(Dst, 13547, Dt7(->pc), PC2PROTO(k)); + dasm_put(Dst, 13568, Dt7(->pc), PC2PROTO(k)); if (op == BC_RET) { - dasm_put(Dst, 13595, LJ_TNIL); + dasm_put(Dst, 13616, LJ_TNIL); } else { - dasm_put(Dst, 13606, LJ_TNIL); + dasm_put(Dst, 13627, LJ_TNIL); } - dasm_put(Dst, 13613, -FRAME_VARG, FRAME_TYPEP); + dasm_put(Dst, 13634, -FRAME_VARG, FRAME_TYPEP); if (op != BC_RET0) { - dasm_put(Dst, 13637); + dasm_put(Dst, 13658); } - dasm_put(Dst, 4531); + dasm_put(Dst, 4552); break; /* -- Loops and branches ------------------------------------------------ */ @@ -2069,7 +2071,7 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop, int cmov, int sse) case BC_FORL: #if LJ_HASJIT - dasm_put(Dst, 13641, HOTCOUNT_PCMASK, GG_DISP2HOT); + dasm_put(Dst, 13662, HOTCOUNT_PCMASK, GG_DISP2HOT); #endif break; @@ -2081,57 +2083,57 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop, int cmov, int sse) case BC_FORI: case BC_IFORL: vk = (op == BC_IFORL || op == BC_JFORL); - dasm_put(Dst, 13662); + dasm_put(Dst, 13683); if (!vk) { - dasm_put(Dst, 13666, LJ_TISNUM, LJ_TISNUM); + dasm_put(Dst, 13687, LJ_TISNUM, LJ_TISNUM); } - dasm_put(Dst, 13685); + dasm_put(Dst, 13706); if (!vk) { - dasm_put(Dst, 13689, LJ_TISNUM); + dasm_put(Dst, 13710, LJ_TISNUM); } if (sse) { - dasm_put(Dst, 13698); + dasm_put(Dst, 13719); if (vk) { - dasm_put(Dst, 13710); + dasm_put(Dst, 13731); } else { - dasm_put(Dst, 13729); + dasm_put(Dst, 13750); } - dasm_put(Dst, 13734); + dasm_put(Dst, 13755); } else { - dasm_put(Dst, 13747); + dasm_put(Dst, 13768); if (vk) { - dasm_put(Dst, 13753); + dasm_put(Dst, 13774); } else { - dasm_put(Dst, 13769); + dasm_put(Dst, 13790); } - dasm_put(Dst, 13777); + dasm_put(Dst, 13798); if (cmov) { - dasm_put(Dst, 9460); + dasm_put(Dst, 9481); } else { - dasm_put(Dst, 9466); + dasm_put(Dst, 9487); } if (!cmov) { - dasm_put(Dst, 13782); + dasm_put(Dst, 13803); } } if (op == BC_FORI) { - dasm_put(Dst, 13788, -BCBIAS_J*4); + dasm_put(Dst, 13809, -BCBIAS_J*4); } else if (op == BC_JFORI) { - dasm_put(Dst, 13798, -BCBIAS_J*4, BC_JLOOP); + dasm_put(Dst, 13819, -BCBIAS_J*4, BC_JLOOP); } else if (op == BC_IFORL) { - dasm_put(Dst, 13812, -BCBIAS_J*4); + dasm_put(Dst, 13833, -BCBIAS_J*4); } else { - dasm_put(Dst, 13808, BC_JLOOP); + dasm_put(Dst, 13829, BC_JLOOP); } - dasm_put(Dst, 9495); + dasm_put(Dst, 9516); if (sse) { - dasm_put(Dst, 13822); + dasm_put(Dst, 13843); } break; case BC_ITERL: #if LJ_HASJIT - dasm_put(Dst, 13641, HOTCOUNT_PCMASK, GG_DISP2HOT); + dasm_put(Dst, 13662, HOTCOUNT_PCMASK, GG_DISP2HOT); #endif break; @@ -2140,33 +2142,33 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop, int cmov, int sse) break; #endif case BC_IITERL: - dasm_put(Dst, 13833, LJ_TNIL); + dasm_put(Dst, 13854, LJ_TNIL); if (op == BC_JITERL) { - dasm_put(Dst, 13848, BC_JLOOP); + dasm_put(Dst, 13869, BC_JLOOP); } else { - dasm_put(Dst, 13862, -BCBIAS_J*4); + dasm_put(Dst, 13883, -BCBIAS_J*4); } - dasm_put(Dst, 9799); + dasm_put(Dst, 9820); break; case BC_LOOP: #if LJ_HASJIT - dasm_put(Dst, 13641, HOTCOUNT_PCMASK, GG_DISP2HOT); + dasm_put(Dst, 13662, HOTCOUNT_PCMASK, GG_DISP2HOT); #endif break; case BC_ILOOP: - dasm_put(Dst, 9497); + dasm_put(Dst, 9518); break; case BC_JLOOP: #if LJ_HASJIT - dasm_put(Dst, 13878, DISPATCH_J(trace), DtD(->mcode), DISPATCH_GL(jit_base), DISPATCH_GL(jit_L)); + dasm_put(Dst, 13899, DISPATCH_J(trace), DtD(->mcode), DISPATCH_GL(jit_base), DISPATCH_GL(jit_L)); #endif break; case BC_JMP: - dasm_put(Dst, 13919, -BCBIAS_J*4); + dasm_put(Dst, 13940, -BCBIAS_J*4); break; /* -- Function headers -------------------------------------------------- */ @@ -2180,7 +2182,7 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop, int cmov, int sse) case BC_FUNCF: #if LJ_HASJIT - dasm_put(Dst, 13945, HOTCOUNT_PCMASK, GG_DISP2HOT); + dasm_put(Dst, 13966, HOTCOUNT_PCMASK, GG_DISP2HOT); #endif case BC_FUNCV: /* NYI: compiled vararg functions. */ break; @@ -2190,47 +2192,47 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop, int cmov, int sse) break; #endif case BC_IFUNCF: - dasm_put(Dst, 13966, -4+PC2PROTO(k), Dt1(->maxstack), -4+PC2PROTO(numparams)); + dasm_put(Dst, 13987, -4+PC2PROTO(k), Dt1(->maxstack), -4+PC2PROTO(numparams)); if (op == BC_JFUNCF) { - dasm_put(Dst, 13997, BC_JLOOP); + dasm_put(Dst, 14018, BC_JLOOP); } else { - dasm_put(Dst, 9497); + dasm_put(Dst, 9518); } - dasm_put(Dst, 14006, LJ_TNIL); + dasm_put(Dst, 14027, LJ_TNIL); break; case BC_JFUNCV: #if !LJ_HASJIT break; #endif - dasm_put(Dst, 8976); + dasm_put(Dst, 8997); break; /* NYI: compiled vararg functions. */ case BC_IFUNCV: - dasm_put(Dst, 14028, FRAME_VARG, Dt1(->maxstack), -4+PC2PROTO(numparams), LJ_TNIL); + dasm_put(Dst, 14049, FRAME_VARG, Dt1(->maxstack), -4+PC2PROTO(numparams), LJ_TNIL); if (op == BC_JFUNCV) { - dasm_put(Dst, 13997, BC_JLOOP); + dasm_put(Dst, 14018, BC_JLOOP); } else { - dasm_put(Dst, 14125, -4+PC2PROTO(k)); + dasm_put(Dst, 14146, -4+PC2PROTO(k)); } - dasm_put(Dst, 14150, LJ_TNIL); + dasm_put(Dst, 14171, LJ_TNIL); break; case BC_FUNCC: case BC_FUNCCW: - dasm_put(Dst, 14172, Dt8(->f), Dt1(->base), 8*LUA_MINSTACK, Dt1(->maxstack), Dt1(->top)); + dasm_put(Dst, 14193, Dt8(->f), Dt1(->base), 8*LUA_MINSTACK, Dt1(->maxstack), Dt1(->top)); if (op == BC_FUNCC) { - dasm_put(Dst, 14202); + dasm_put(Dst, 14223); } else { - dasm_put(Dst, 14206); + dasm_put(Dst, 14227); } - dasm_put(Dst, 14214, DISPATCH_GL(vmstate), ~LJ_VMST_C); + dasm_put(Dst, 14235, DISPATCH_GL(vmstate), ~LJ_VMST_C); if (op == BC_FUNCC) { - dasm_put(Dst, 14224); + dasm_put(Dst, 14245); } else { - dasm_put(Dst, 14229, DISPATCH_GL(wrapf)); + dasm_put(Dst, 14250, DISPATCH_GL(wrapf)); } - dasm_put(Dst, 14235, DISPATCH_GL(vmstate), ~LJ_VMST_INTERP, Dt1(->base), Dt1(->top)); + dasm_put(Dst, 14256, DISPATCH_GL(vmstate), ~LJ_VMST_INTERP, Dt1(->base), Dt1(->top)); break; /* ---------------------------------------------------------------------- */ @@ -2258,7 +2260,7 @@ static int build_backend(BuildCtx *ctx) build_subroutines(ctx, cmov, sse); - dasm_put(Dst, 14261); + dasm_put(Dst, 14282); for (op = 0; op < BC__MAX; op++) build_ins(ctx, (BCOp)op, op, cmov, sse); diff --git a/src/buildvm_x64win.h b/src/buildvm_x64win.h index bc4da564..2ca7c7b2 100644 --- a/src/buildvm_x64win.h +++ b/src/buildvm_x64win.h @@ -12,7 +12,7 @@ #define DASM_SECTION_CODE_OP 0 #define DASM_SECTION_CODE_SUB 1 #define DASM_MAXSECTION 2 -static const unsigned char build_actionlist[14208] = { +static const unsigned char build_actionlist[14229] = { 254,1,248,10,252,247,198,237,15,132,244,11,131,230,252,248,41,252,242,72, 141,76,49,252,248,139,114,252,252,199,68,10,4,237,248,12,131,192,1,137,68, 36,84,252,247,198,237,15,132,244,13,248,14,129,252,246,239,252,247,198,237, @@ -129,16 +129,17 @@ static const unsigned char build_actionlist[14208] = { 133,192,15,132,244,249,72,139,106,8,72,139,66,16,72,137,106,252,248,72,137, 2,248,68,184,237,252,233,244,69,248,2,199,66,12,237,252,233,244,1,248,3,199, 66,252,252,237,252,233,244,58,248,70,129,252,248,239,15,130,244,55,255,139, - 106,252,248,129,122,253,4,239,15,133,244,55,139,133,233,139,114,252,252,199, - 66,252,252,237,137,66,252,248,199,66,12,237,184,237,252,233,244,69,248,71, - 129,252,248,239,15,130,244,55,129,122,253,4,239,15,133,244,55,129,122,253, - 12,239,15,135,244,55,139,114,252,252,255,252,242,15,16,66,8,72,189,237,237, - 102,72,15,110,205,252,242,15,88,193,252,242,15,45,192,252,242,15,17,66,252, - 248,255,139,42,59,133,233,15,131,244,248,193,224,3,3,133,233,248,1,129,120, - 253,4,239,15,132,244,72,72,139,40,72,137,42,252,233,244,68,248,2,131,189, - 233,0,15,132,244,72,137,252,233,137,213,137,194,232,251,1,12,137,252,234, - 133,192,15,133,244,1,248,72,184,237,252,233,244,69,248,73,255,129,252,248, - 239,15,130,244,55,139,106,252,248,129,122,253,4,239,15,133,244,55,139,133, + 42,129,122,253,4,239,15,133,244,55,131,189,233,0,15,133,244,55,139,106,252, + 248,139,133,233,139,114,252,252,199,66,252,252,237,137,66,252,248,199,66, + 12,237,184,237,252,233,244,69,248,71,129,252,248,239,15,130,244,55,129,122, + 253,4,239,15,133,244,55,129,122,253,12,239,255,15,135,244,55,139,114,252, + 252,255,252,242,15,16,66,8,72,189,237,237,102,72,15,110,205,252,242,15,88, + 193,252,242,15,45,192,252,242,15,17,66,252,248,255,139,42,59,133,233,15,131, + 244,248,193,224,3,3,133,233,248,1,129,120,253,4,239,15,132,244,72,72,139, + 40,72,137,42,252,233,244,68,248,2,131,189,233,0,15,132,244,72,137,252,233, + 137,213,137,194,232,251,1,12,137,252,234,133,192,15,133,244,1,248,72,184, + 237,252,233,244,69,248,73,255,129,252,248,239,15,130,244,55,139,42,129,122, + 253,4,239,15,133,244,55,131,189,233,0,15,133,244,55,139,106,252,248,139,133, 233,139,114,252,252,199,66,252,252,237,137,66,252,248,255,15,87,192,252,242, 15,17,66,8,255,217,252,238,221,90,8,255,184,237,252,233,244,69,248,74,129, 252,248,239,15,130,244,55,141,74,8,131,232,1,190,237,248,1,15,182,171,233, @@ -1112,331 +1113,332 @@ static void build_subroutines(BuildCtx *ctx, int cmov, int sse) dasm_put(Dst, 2149, 1+1, LJ_TSTR, LJ_TSTR, LJ_TISNUM, DISPATCH_GL(gcroot[GCROOT_BASEMT_NUM]), DISPATCH_GL(gc.total), DISPATCH_GL(gc.threshold)); dasm_put(Dst, 2215, Dt1(->base), Dt1(->base), 1+1, LJ_TTAB, Dt1(->base)); dasm_put(Dst, 2282, Dt1(->top), Dt1(->base), 1+2, LJ_TNIL, LJ_TNIL, 1+1); - dasm_put(Dst, 2371, LJ_TTAB, Dt8(->upvalue[0]), LJ_TFUNC, LJ_TNIL, 1+3, 1+1, LJ_TTAB, LJ_TISNUM); + dasm_put(Dst, 2371, LJ_TTAB, Dt6(->metatable), Dt8(->upvalue[0]), LJ_TFUNC, LJ_TNIL, 1+3, 1+1, LJ_TTAB, LJ_TISNUM); + dasm_put(Dst, 2445); if (sse) { - dasm_put(Dst, 2443, (unsigned int)(U64x(3ff00000,00000000)), (unsigned int)((U64x(3ff00000,00000000))>>32)); + dasm_put(Dst, 2454, (unsigned int)(U64x(3ff00000,00000000)), (unsigned int)((U64x(3ff00000,00000000))>>32)); } else { } - dasm_put(Dst, 2476, Dt6(->asize), Dt6(->array), LJ_TNIL, Dt6(->hmask), 1+0); - dasm_put(Dst, 2553, 1+1, LJ_TTAB, Dt8(->upvalue[0]), LJ_TFUNC); + dasm_put(Dst, 2487, Dt6(->asize), Dt6(->array), LJ_TNIL, Dt6(->hmask), 1+0); + dasm_put(Dst, 2564, 1+1, LJ_TTAB, Dt6(->metatable), Dt8(->upvalue[0]), LJ_TFUNC); if (sse) { - dasm_put(Dst, 2591); + dasm_put(Dst, 2612); } else { - dasm_put(Dst, 2601); + dasm_put(Dst, 2622); } - dasm_put(Dst, 2608, 1+3, 1+1, 8+FRAME_PCALL, DISPATCH_GL(hookmask), HOOK_ACTIVE_SHIFT, 2+1, LJ_TFUNC); - dasm_put(Dst, 2672, LJ_TFUNC, 16+FRAME_PCALL, 1+1, LJ_TTHREAD, Dt1(->cframe), Dt1(->status), LUA_YIELD, Dt1(->top)); - dasm_put(Dst, 2762, Dt1(->base), Dt1(->maxstack), Dt1(->top), Dt1(->base), Dt1(->top), DISPATCH_GL(vmstate), ~LJ_VMST_INTERP); - dasm_put(Dst, 2850, Dt1(->base), LUA_YIELD, Dt1(->base), Dt1(->top), Dt1(->top), Dt1(->maxstack), LJ_TTRUE, FRAME_TYPE); - dasm_put(Dst, 2963, LJ_TFALSE, Dt1(->top), Dt1(->top), 1+2, Dt1(->top), Dt1(->base), Dt8(->upvalue[0].gcr), Dt1(->cframe)); - dasm_put(Dst, 3061, Dt1(->status), LUA_YIELD, Dt1(->top), Dt1(->base), Dt1(->maxstack), Dt1(->top), Dt1(->base), Dt1(->top)); - dasm_put(Dst, 3128, DISPATCH_GL(vmstate), ~LJ_VMST_INTERP, Dt1(->base), LUA_YIELD, Dt1(->base), Dt1(->top), Dt1(->top), Dt1(->maxstack)); - dasm_put(Dst, 3216, FRAME_TYPE, Dt1(->top), Dt1(->base), Dt1(->cframe), CFRAME_RESUME); - dasm_put(Dst, 3328, Dt1(->base), Dt1(->top), Dt1(->cframe), LUA_YIELD, Dt1(->status)); + dasm_put(Dst, 2629, 1+3, 1+1, 8+FRAME_PCALL, DISPATCH_GL(hookmask), HOOK_ACTIVE_SHIFT, 2+1, LJ_TFUNC); + dasm_put(Dst, 2693, LJ_TFUNC, 16+FRAME_PCALL, 1+1, LJ_TTHREAD, Dt1(->cframe), Dt1(->status), LUA_YIELD, Dt1(->top)); + dasm_put(Dst, 2783, Dt1(->base), Dt1(->maxstack), Dt1(->top), Dt1(->base), Dt1(->top), DISPATCH_GL(vmstate), ~LJ_VMST_INTERP); + dasm_put(Dst, 2871, Dt1(->base), LUA_YIELD, Dt1(->base), Dt1(->top), Dt1(->top), Dt1(->maxstack), LJ_TTRUE, FRAME_TYPE); + dasm_put(Dst, 2984, LJ_TFALSE, Dt1(->top), Dt1(->top), 1+2, Dt1(->top), Dt1(->base), Dt8(->upvalue[0].gcr), Dt1(->cframe)); + dasm_put(Dst, 3082, Dt1(->status), LUA_YIELD, Dt1(->top), Dt1(->base), Dt1(->maxstack), Dt1(->top), Dt1(->base), Dt1(->top)); + dasm_put(Dst, 3149, DISPATCH_GL(vmstate), ~LJ_VMST_INTERP, Dt1(->base), LUA_YIELD, Dt1(->base), Dt1(->top), Dt1(->top), Dt1(->maxstack)); + dasm_put(Dst, 3237, FRAME_TYPE, Dt1(->top), Dt1(->base), Dt1(->cframe), CFRAME_RESUME); + dasm_put(Dst, 3349, Dt1(->base), Dt1(->top), Dt1(->cframe), LUA_YIELD, Dt1(->status)); if (sse) { - dasm_put(Dst, 3355, 1+1, LJ_TISNUM, (unsigned int)(U64x(7fffffff,ffffffff)), (unsigned int)((U64x(7fffffff,ffffffff))>>32)); + dasm_put(Dst, 3376, 1+1, LJ_TISNUM, (unsigned int)(U64x(7fffffff,ffffffff)), (unsigned int)((U64x(7fffffff,ffffffff))>>32)); } else { - dasm_put(Dst, 3419, 1+1, LJ_TISNUM); + dasm_put(Dst, 3440, 1+1, LJ_TISNUM); } - dasm_put(Dst, 3455, 1+1, FRAME_TYPE, LJ_TNIL); + dasm_put(Dst, 3476, 1+1, FRAME_TYPE, LJ_TNIL); if (sse) { - dasm_put(Dst, 3549, 1+1, LJ_TISNUM, 1+1, LJ_TISNUM); - dasm_put(Dst, 3611, 1+1, LJ_TISNUM); + dasm_put(Dst, 3570, 1+1, LJ_TISNUM, 1+1, LJ_TISNUM); + dasm_put(Dst, 3632, 1+1, LJ_TISNUM); } else { - dasm_put(Dst, 3641, 1+1, LJ_TISNUM, 1+1, LJ_TISNUM); - dasm_put(Dst, 3700, 1+1, LJ_TISNUM); + dasm_put(Dst, 3662, 1+1, LJ_TISNUM, 1+1, LJ_TISNUM); + dasm_put(Dst, 3721, 1+1, LJ_TISNUM); } - dasm_put(Dst, 3727, 1+1, LJ_TISNUM, 1+1, LJ_TISNUM, 1+1); - dasm_put(Dst, 3796, LJ_TISNUM, 1+1, LJ_TISNUM, 1+1); - dasm_put(Dst, 3853, LJ_TISNUM, 1+1, LJ_TISNUM, 1+1); - dasm_put(Dst, 3916, LJ_TISNUM, 1+1, LJ_TISNUM, 1+1, LJ_TISNUM); - dasm_put(Dst, 4006); + dasm_put(Dst, 3748, 1+1, LJ_TISNUM, 1+1, LJ_TISNUM, 1+1); + dasm_put(Dst, 3817, LJ_TISNUM, 1+1, LJ_TISNUM, 1+1); + dasm_put(Dst, 3874, LJ_TISNUM, 1+1, LJ_TISNUM, 1+1); + dasm_put(Dst, 3937, LJ_TISNUM, 1+1, LJ_TISNUM, 1+1, LJ_TISNUM); + dasm_put(Dst, 4027); if (sse) { - dasm_put(Dst, 4018, 1+1, LJ_TISNUM); + dasm_put(Dst, 4039, 1+1, LJ_TISNUM); } else { } - dasm_put(Dst, 4043); + dasm_put(Dst, 4064); if (sse) { - dasm_put(Dst, 4057, 1+1, LJ_TISNUM); + dasm_put(Dst, 4078, 1+1, LJ_TISNUM); } else { } - dasm_put(Dst, 4082); + dasm_put(Dst, 4103); if (sse) { - dasm_put(Dst, 4096, 1+1, LJ_TISNUM); + dasm_put(Dst, 4117, 1+1, LJ_TISNUM); } else { } - dasm_put(Dst, 4121); + dasm_put(Dst, 4142); if (sse) { - dasm_put(Dst, 4137, 1+1, LJ_TISNUM, Dt8(->upvalue[0])); + dasm_put(Dst, 4158, 1+1, LJ_TISNUM, Dt8(->upvalue[0])); } else { - dasm_put(Dst, 4176, 1+1, LJ_TISNUM, Dt8(->upvalue[0])); + dasm_put(Dst, 4197, 1+1, LJ_TISNUM, Dt8(->upvalue[0])); } - dasm_put(Dst, 4209, 2+1, LJ_TISNUM, LJ_TISNUM, 2+1, LJ_TISNUM, LJ_TISNUM); - dasm_put(Dst, 4274, 1+1, LJ_TISNUM); + dasm_put(Dst, 4230, 2+1, LJ_TISNUM, LJ_TISNUM, 2+1, LJ_TISNUM, LJ_TISNUM); + dasm_put(Dst, 4295, 1+1, LJ_TISNUM); if (sse) { - dasm_put(Dst, 4373); + dasm_put(Dst, 4394); } else { - dasm_put(Dst, 4379); + dasm_put(Dst, 4400); } - dasm_put(Dst, 4388); + dasm_put(Dst, 4409); if (sse) { - dasm_put(Dst, 4413); + dasm_put(Dst, 4434); } else { - dasm_put(Dst, 4419); + dasm_put(Dst, 4440); } - dasm_put(Dst, 4422, 1+2); + dasm_put(Dst, 4443, 1+2); if (sse) { - dasm_put(Dst, 4431); + dasm_put(Dst, 4452); } else { - dasm_put(Dst, 4439); + dasm_put(Dst, 4460); } - dasm_put(Dst, 4447); + dasm_put(Dst, 4468); if (sse) { - dasm_put(Dst, 4450, (unsigned int)(U64x(43500000,00000000)), (unsigned int)((U64x(43500000,00000000))>>32)); + dasm_put(Dst, 4471, (unsigned int)(U64x(43500000,00000000)), (unsigned int)((U64x(43500000,00000000))>>32)); } else { - dasm_put(Dst, 4477); + dasm_put(Dst, 4498); } - dasm_put(Dst, 4496); + dasm_put(Dst, 4517); if (sse) { - dasm_put(Dst, 4512, 1+1, LJ_TISNUM); + dasm_put(Dst, 4533, 1+1, LJ_TISNUM); } else { - dasm_put(Dst, 4537, 1+1, LJ_TISNUM); + dasm_put(Dst, 4558, 1+1, LJ_TISNUM); } - dasm_put(Dst, 4559); + dasm_put(Dst, 4580); if (sse) { - dasm_put(Dst, 4581); + dasm_put(Dst, 4602); } else { - dasm_put(Dst, 4607); + dasm_put(Dst, 4628); } - dasm_put(Dst, 4624, 1+2); + dasm_put(Dst, 4645, 1+2); if (sse) { - dasm_put(Dst, 4664); + dasm_put(Dst, 4685); } else { - dasm_put(Dst, 4672); + dasm_put(Dst, 4693); } - dasm_put(Dst, 4682, 2+1, LJ_TISNUM, LJ_TISNUM); + dasm_put(Dst, 4703, 2+1, LJ_TISNUM, LJ_TISNUM); if (sse) { - dasm_put(Dst, 4734, 2+1, LJ_TISNUM, LJ_TISNUM); + dasm_put(Dst, 4755, 2+1, LJ_TISNUM, LJ_TISNUM); } else { - dasm_put(Dst, 4781, 2+1, LJ_TISNUM, LJ_TISNUM); + dasm_put(Dst, 4802, 2+1, LJ_TISNUM, LJ_TISNUM); } if (sse) { - dasm_put(Dst, 4822, 1+1, LJ_TISNUM, LJ_TISNUM); + dasm_put(Dst, 4843, 1+1, LJ_TISNUM, LJ_TISNUM); } else { } if (sse) { - dasm_put(Dst, 4893, 1+1, LJ_TISNUM, LJ_TISNUM); + dasm_put(Dst, 4914, 1+1, LJ_TISNUM, LJ_TISNUM); } else { } if (!sse) { - dasm_put(Dst, 4964); + dasm_put(Dst, 4985); } - dasm_put(Dst, 4973, 1+1, LJ_TSTR); + dasm_put(Dst, 4994, 1+1, LJ_TSTR); if (sse) { - dasm_put(Dst, 4995, Dt5(->len)); + dasm_put(Dst, 5016, Dt5(->len)); } else { - dasm_put(Dst, 5006, Dt5(->len)); + dasm_put(Dst, 5027, Dt5(->len)); } - dasm_put(Dst, 5014, 1+1, LJ_TSTR, Dt5(->len), Dt5([1])); + dasm_put(Dst, 5035, 1+1, LJ_TSTR, Dt5(->len), Dt5([1])); if (sse) { - dasm_put(Dst, 5052); + dasm_put(Dst, 5073); } else { - dasm_put(Dst, 5062); + dasm_put(Dst, 5083); } - dasm_put(Dst, 5075, DISPATCH_GL(gc.total), DISPATCH_GL(gc.threshold), 1+1, LJ_TISNUM); + dasm_put(Dst, 5096, DISPATCH_GL(gc.total), DISPATCH_GL(gc.threshold), 1+1, LJ_TISNUM); if (sse) { - dasm_put(Dst, 5110); + dasm_put(Dst, 5131); } else { - dasm_put(Dst, 5132); + dasm_put(Dst, 5153); } - dasm_put(Dst, 5152, Dt1(->base), Dt1(->base), LJ_TSTR, DISPATCH_GL(gc.total), DISPATCH_GL(gc.threshold), 1+2, LJ_TISNUM); + dasm_put(Dst, 5173, Dt1(->base), Dt1(->base), LJ_TSTR, DISPATCH_GL(gc.total), DISPATCH_GL(gc.threshold), 1+2, LJ_TISNUM); dasm_put(Dst, 2127); if (sse) { - dasm_put(Dst, 5260); + dasm_put(Dst, 5281); } else { - dasm_put(Dst, 5271); + dasm_put(Dst, 5292); } - dasm_put(Dst, 5279, LJ_TSTR, LJ_TISNUM, Dt5(->len)); + dasm_put(Dst, 5300, LJ_TSTR, LJ_TISNUM, Dt5(->len)); if (sse) { - dasm_put(Dst, 5309); + dasm_put(Dst, 5330); } else { } - dasm_put(Dst, 5316, sizeof(GCstr)-1); - dasm_put(Dst, 5391, 2+1, DISPATCH_GL(gc.total), DISPATCH_GL(gc.threshold)); - dasm_put(Dst, 5450, LJ_TSTR, LJ_TISNUM); + dasm_put(Dst, 5337, sizeof(GCstr)-1); + dasm_put(Dst, 5412, 2+1, DISPATCH_GL(gc.total), DISPATCH_GL(gc.threshold)); + dasm_put(Dst, 5471, LJ_TSTR, LJ_TISNUM); if (sse) { - dasm_put(Dst, 5471); + dasm_put(Dst, 5492); } else { - dasm_put(Dst, 5478); + dasm_put(Dst, 5499); } - dasm_put(Dst, 5490, Dt5(->len), DISPATCH_GL(tmpbuf.sz), Dt5([1]), DISPATCH_GL(tmpbuf.buf), DISPATCH_GL(tmpbuf.buf), 1+1); - dasm_put(Dst, 5555, DISPATCH_GL(gc.total), DISPATCH_GL(gc.threshold), LJ_TSTR, Dt5(->len), DISPATCH_GL(tmpbuf.sz), sizeof(GCstr), DISPATCH_GL(tmpbuf.buf)); - dasm_put(Dst, 5618, 1+1, DISPATCH_GL(gc.total), DISPATCH_GL(gc.threshold), LJ_TSTR, Dt5(->len), DISPATCH_GL(tmpbuf.sz)); - dasm_put(Dst, 5689, sizeof(GCstr), DISPATCH_GL(tmpbuf.buf), 1+1); - dasm_put(Dst, 5774, DISPATCH_GL(gc.total), DISPATCH_GL(gc.threshold), LJ_TSTR, Dt5(->len), DISPATCH_GL(tmpbuf.sz), sizeof(GCstr), DISPATCH_GL(tmpbuf.buf)); - dasm_put(Dst, 5844, 1+1, LJ_TTAB); + dasm_put(Dst, 5511, Dt5(->len), DISPATCH_GL(tmpbuf.sz), Dt5([1]), DISPATCH_GL(tmpbuf.buf), DISPATCH_GL(tmpbuf.buf), 1+1); + dasm_put(Dst, 5576, DISPATCH_GL(gc.total), DISPATCH_GL(gc.threshold), LJ_TSTR, Dt5(->len), DISPATCH_GL(tmpbuf.sz), sizeof(GCstr), DISPATCH_GL(tmpbuf.buf)); + dasm_put(Dst, 5639, 1+1, DISPATCH_GL(gc.total), DISPATCH_GL(gc.threshold), LJ_TSTR, Dt5(->len), DISPATCH_GL(tmpbuf.sz)); + dasm_put(Dst, 5710, sizeof(GCstr), DISPATCH_GL(tmpbuf.buf), 1+1); + dasm_put(Dst, 5795, DISPATCH_GL(gc.total), DISPATCH_GL(gc.threshold), LJ_TSTR, Dt5(->len), DISPATCH_GL(tmpbuf.sz), sizeof(GCstr), DISPATCH_GL(tmpbuf.buf)); + dasm_put(Dst, 5865, 1+1, LJ_TTAB); if (sse) { - dasm_put(Dst, 5912); + dasm_put(Dst, 5933); } else { } if (sse) { - dasm_put(Dst, 5922, 1+1, LJ_TISNUM, (unsigned int)(U64x(43380000,00000000)), (unsigned int)((U64x(43380000,00000000))>>32)); + dasm_put(Dst, 5943, 1+1, LJ_TISNUM, (unsigned int)(U64x(43380000,00000000)), (unsigned int)((U64x(43380000,00000000))>>32)); } else { } if (sse) { - dasm_put(Dst, 5974, 1+1, LJ_TISNUM, (unsigned int)(U64x(43380000,00000000)), (unsigned int)((U64x(43380000,00000000))>>32)); + dasm_put(Dst, 5995, 1+1, LJ_TISNUM, (unsigned int)(U64x(43380000,00000000)), (unsigned int)((U64x(43380000,00000000))>>32)); } else { } - dasm_put(Dst, 6017, LJ_TISNUM); + dasm_put(Dst, 6038, LJ_TISNUM); if (sse) { - dasm_put(Dst, 6044); + dasm_put(Dst, 6065); } else { } - dasm_put(Dst, 6061); + dasm_put(Dst, 6082); if (sse) { - dasm_put(Dst, 6069, 1+1, LJ_TISNUM, (unsigned int)(U64x(43380000,00000000)), (unsigned int)((U64x(43380000,00000000))>>32)); + dasm_put(Dst, 6090, 1+1, LJ_TISNUM, (unsigned int)(U64x(43380000,00000000)), (unsigned int)((U64x(43380000,00000000))>>32)); } else { } - dasm_put(Dst, 6017, LJ_TISNUM); + dasm_put(Dst, 6038, LJ_TISNUM); if (sse) { - dasm_put(Dst, 6112); + dasm_put(Dst, 6133); } else { } - dasm_put(Dst, 6061); + dasm_put(Dst, 6082); if (sse) { - dasm_put(Dst, 6129, 1+1, LJ_TISNUM, (unsigned int)(U64x(43380000,00000000)), (unsigned int)((U64x(43380000,00000000))>>32)); + dasm_put(Dst, 6150, 1+1, LJ_TISNUM, (unsigned int)(U64x(43380000,00000000)), (unsigned int)((U64x(43380000,00000000))>>32)); } else { } - dasm_put(Dst, 6017, LJ_TISNUM); + dasm_put(Dst, 6038, LJ_TISNUM); if (sse) { - dasm_put(Dst, 6172); + dasm_put(Dst, 6193); } else { } - dasm_put(Dst, 6061); + dasm_put(Dst, 6082); if (sse) { - dasm_put(Dst, 6189, 1+1, LJ_TISNUM, (unsigned int)(U64x(43380000,00000000)), (unsigned int)((U64x(43380000,00000000))>>32)); + dasm_put(Dst, 6210, 1+1, LJ_TISNUM, (unsigned int)(U64x(43380000,00000000)), (unsigned int)((U64x(43380000,00000000))>>32)); } else { } - dasm_put(Dst, 6232); + dasm_put(Dst, 6253); if (sse) { - dasm_put(Dst, 6239, 1+1, LJ_TISNUM, (unsigned int)(U64x(43380000,00000000)), (unsigned int)((U64x(43380000,00000000))>>32)); + dasm_put(Dst, 6260, 1+1, LJ_TISNUM, (unsigned int)(U64x(43380000,00000000)), (unsigned int)((U64x(43380000,00000000))>>32)); } else { } - dasm_put(Dst, 6282); + dasm_put(Dst, 6303); if (sse) { - dasm_put(Dst, 6286); + dasm_put(Dst, 6307); } else { } - dasm_put(Dst, 6298); + dasm_put(Dst, 6319); if (sse) { - dasm_put(Dst, 6309, 2+1, LJ_TISNUM, LJ_TISNUM, (unsigned int)(U64x(43380000,00000000)), (unsigned int)((U64x(43380000,00000000))>>32)); + dasm_put(Dst, 6330, 2+1, LJ_TISNUM, LJ_TISNUM, (unsigned int)(U64x(43380000,00000000)), (unsigned int)((U64x(43380000,00000000))>>32)); } else { } - dasm_put(Dst, 6378); + dasm_put(Dst, 6399); if (sse) { - dasm_put(Dst, 6387, 2+1, LJ_TISNUM, LJ_TISNUM, (unsigned int)(U64x(43380000,00000000)), (unsigned int)((U64x(43380000,00000000))>>32)); + dasm_put(Dst, 6408, 2+1, LJ_TISNUM, LJ_TISNUM, (unsigned int)(U64x(43380000,00000000)), (unsigned int)((U64x(43380000,00000000))>>32)); } else { } - dasm_put(Dst, 6456); + dasm_put(Dst, 6477); if (sse) { - dasm_put(Dst, 6466, 2+1, LJ_TISNUM, LJ_TISNUM, (unsigned int)(U64x(43380000,00000000)), (unsigned int)((U64x(43380000,00000000))>>32)); + dasm_put(Dst, 6487, 2+1, LJ_TISNUM, LJ_TISNUM, (unsigned int)(U64x(43380000,00000000)), (unsigned int)((U64x(43380000,00000000))>>32)); } else { } - dasm_put(Dst, 6535); + dasm_put(Dst, 6556); if (sse) { - dasm_put(Dst, 6545, 2+1, LJ_TISNUM, LJ_TISNUM, (unsigned int)(U64x(43380000,00000000)), (unsigned int)((U64x(43380000,00000000))>>32)); + dasm_put(Dst, 6566, 2+1, LJ_TISNUM, LJ_TISNUM, (unsigned int)(U64x(43380000,00000000)), (unsigned int)((U64x(43380000,00000000))>>32)); } else { } - dasm_put(Dst, 6614); + dasm_put(Dst, 6635); if (sse) { - dasm_put(Dst, 6623, 2+1, LJ_TISNUM, LJ_TISNUM, (unsigned int)(U64x(43380000,00000000)), (unsigned int)((U64x(43380000,00000000))>>32)); + dasm_put(Dst, 6644, 2+1, LJ_TISNUM, LJ_TISNUM, (unsigned int)(U64x(43380000,00000000)), (unsigned int)((U64x(43380000,00000000))>>32)); } else { } - dasm_put(Dst, 6692, 1+2, 1+1, Dt1(->base), 8*LUA_MINSTACK, Dt1(->top), Dt1(->maxstack), Dt8(->f), Dt1(->base)); - dasm_put(Dst, 6770, Dt1(->top), Dt7(->pc), FRAME_TYPE, LUA_MINSTACK, Dt1(->base), Dt1(->base)); - dasm_put(Dst, 6897, Dt1(->top), Dt1(->base), Dt1(->top)); + dasm_put(Dst, 6713, 1+2, 1+1, Dt1(->base), 8*LUA_MINSTACK, Dt1(->top), Dt1(->maxstack), Dt8(->f), Dt1(->base)); + dasm_put(Dst, 6791, Dt1(->top), Dt7(->pc), FRAME_TYPE, LUA_MINSTACK, Dt1(->base), Dt1(->base)); + dasm_put(Dst, 6918, Dt1(->top), Dt1(->base), Dt1(->top)); #if LJ_HASJIT - dasm_put(Dst, 6936, DISPATCH_GL(hookmask), HOOK_VMEVENT, HOOK_ACTIVE, LUA_MASKLINE|LUA_MASKCOUNT, DISPATCH_GL(hookcount)); + dasm_put(Dst, 6957, DISPATCH_GL(hookmask), HOOK_VMEVENT, HOOK_ACTIVE, LUA_MASKLINE|LUA_MASKCOUNT, DISPATCH_GL(hookcount)); #endif - dasm_put(Dst, 6967, DISPATCH_GL(hookmask), HOOK_ACTIVE, DISPATCH_GL(hookmask), HOOK_ACTIVE, LUA_MASKLINE|LUA_MASKCOUNT, DISPATCH_GL(hookcount), LUA_MASKLINE); - dasm_put(Dst, 7018, Dt1(->base), Dt1(->base), GG_DISP2STATIC); + dasm_put(Dst, 6988, DISPATCH_GL(hookmask), HOOK_ACTIVE, DISPATCH_GL(hookmask), HOOK_ACTIVE, LUA_MASKLINE|LUA_MASKCOUNT, DISPATCH_GL(hookcount), LUA_MASKLINE); + dasm_put(Dst, 7039, Dt1(->base), Dt1(->base), GG_DISP2STATIC); #if LJ_HASJIT - dasm_put(Dst, 7085, Dt7(->pc), PC2PROTO(framesize), Dt1(->base), Dt1(->top), GG_DISP2J, DISPATCH_J(L)); + dasm_put(Dst, 7106, Dt7(->pc), PC2PROTO(framesize), Dt1(->base), Dt1(->top), GG_DISP2J, DISPATCH_J(L)); #endif - dasm_put(Dst, 7132); + dasm_put(Dst, 7153); #if LJ_HASJIT - dasm_put(Dst, 6962); + dasm_put(Dst, 6983); #endif - dasm_put(Dst, 7139); + dasm_put(Dst, 7160); #if LJ_HASJIT - dasm_put(Dst, 7142); + dasm_put(Dst, 7163); #endif - dasm_put(Dst, 7152, Dt1(->base), Dt1(->top)); + dasm_put(Dst, 7173, Dt1(->base), Dt1(->top)); #if LJ_HASJIT - dasm_put(Dst, 7186); + dasm_put(Dst, 7207); #endif - dasm_put(Dst, 7191, Dt1(->base), Dt1(->top)); + dasm_put(Dst, 7212, Dt1(->base), Dt1(->top)); #if LJ_HASJIT - dasm_put(Dst, 7222, DISPATCH_GL(vmstate), DISPATCH_GL(vmstate), ~LJ_VMST_EXIT, DISPATCH_J(exitno), DISPATCH_J(parent), 16*8+4*8, DISPATCH_GL(jit_L), DISPATCH_GL(jit_base), DISPATCH_J(L), DISPATCH_GL(jit_L), Dt1(->base), 4*8, GG_DISP2J, Dt1(->cframe), CFRAME_RAWMASK, CFRAME_OFS_L, Dt1(->base), CFRAME_OFS_PC); + dasm_put(Dst, 7243, DISPATCH_GL(vmstate), DISPATCH_GL(vmstate), ~LJ_VMST_EXIT, DISPATCH_J(exitno), DISPATCH_J(parent), 16*8+4*8, DISPATCH_GL(jit_L), DISPATCH_GL(jit_base), DISPATCH_J(L), DISPATCH_GL(jit_L), Dt1(->base), 4*8, GG_DISP2J, Dt1(->cframe), CFRAME_RAWMASK, CFRAME_OFS_L, Dt1(->base), CFRAME_OFS_PC); #endif - dasm_put(Dst, 7452); + dasm_put(Dst, 7473); #if LJ_HASJIT - dasm_put(Dst, 7455, 9*16+4*8, -9*16, -8*16, -7*16, -6*16, -5*16, -4*16, -3*16, -2*16, -1*16, Dt7(->pc), PC2PROTO(k), DISPATCH_GL(jit_L), DISPATCH_GL(vmstate), ~LJ_VMST_INTERP, BC_FUNCF); - dasm_put(Dst, 7597); + dasm_put(Dst, 7476, 9*16+4*8, -9*16, -8*16, -7*16, -6*16, -5*16, -4*16, -3*16, -2*16, -1*16, Dt7(->pc), PC2PROTO(k), DISPATCH_GL(jit_L), DISPATCH_GL(vmstate), ~LJ_VMST_INTERP, BC_FUNCF); + dasm_put(Dst, 7618); #endif - dasm_put(Dst, 7623); + dasm_put(Dst, 7644); if (!sse) { - dasm_put(Dst, 7626); + dasm_put(Dst, 7647); } - dasm_put(Dst, 7671, (unsigned int)(U64x(7fffffff,ffffffff)), (unsigned int)((U64x(7fffffff,ffffffff))>>32), (unsigned int)(U64x(43300000,00000000)), (unsigned int)((U64x(43300000,00000000))>>32), (unsigned int)(U64x(3ff00000,00000000)), (unsigned int)((U64x(3ff00000,00000000))>>32)); + dasm_put(Dst, 7692, (unsigned int)(U64x(7fffffff,ffffffff)), (unsigned int)((U64x(7fffffff,ffffffff))>>32), (unsigned int)(U64x(43300000,00000000)), (unsigned int)((U64x(43300000,00000000))>>32), (unsigned int)(U64x(3ff00000,00000000)), (unsigned int)((U64x(3ff00000,00000000))>>32)); if (!sse) { - dasm_put(Dst, 7757); + dasm_put(Dst, 7778); } - dasm_put(Dst, 7802, (unsigned int)(U64x(7fffffff,ffffffff)), (unsigned int)((U64x(7fffffff,ffffffff))>>32), (unsigned int)(U64x(43300000,00000000)), (unsigned int)((U64x(43300000,00000000))>>32), (unsigned int)(U64x(bff00000,00000000)), (unsigned int)((U64x(bff00000,00000000))>>32)); + dasm_put(Dst, 7823, (unsigned int)(U64x(7fffffff,ffffffff)), (unsigned int)((U64x(7fffffff,ffffffff))>>32), (unsigned int)(U64x(43300000,00000000)), (unsigned int)((U64x(43300000,00000000))>>32), (unsigned int)(U64x(bff00000,00000000)), (unsigned int)((U64x(bff00000,00000000))>>32)); if (!sse) { - dasm_put(Dst, 7888); + dasm_put(Dst, 7909); } - dasm_put(Dst, 7927, (unsigned int)(U64x(7fffffff,ffffffff)), (unsigned int)((U64x(7fffffff,ffffffff))>>32), (unsigned int)(U64x(43300000,00000000)), (unsigned int)((U64x(43300000,00000000))>>32), (unsigned int)(U64x(3ff00000,00000000)), (unsigned int)((U64x(3ff00000,00000000))>>32)); + dasm_put(Dst, 7948, (unsigned int)(U64x(7fffffff,ffffffff)), (unsigned int)((U64x(7fffffff,ffffffff))>>32), (unsigned int)(U64x(43300000,00000000)), (unsigned int)((U64x(43300000,00000000))>>32), (unsigned int)(U64x(3ff00000,00000000)), (unsigned int)((U64x(3ff00000,00000000))>>32)); if (sse) { - dasm_put(Dst, 8016, (unsigned int)(U64x(7fffffff,ffffffff)), (unsigned int)((U64x(7fffffff,ffffffff))>>32), (unsigned int)(U64x(43300000,00000000)), (unsigned int)((U64x(43300000,00000000))>>32), (unsigned int)(U64x(3ff00000,00000000)), (unsigned int)((U64x(3ff00000,00000000))>>32)); + dasm_put(Dst, 8037, (unsigned int)(U64x(7fffffff,ffffffff)), (unsigned int)((U64x(7fffffff,ffffffff))>>32), (unsigned int)(U64x(43300000,00000000)), (unsigned int)((U64x(43300000,00000000))>>32), (unsigned int)(U64x(3ff00000,00000000)), (unsigned int)((U64x(3ff00000,00000000))>>32)); } else { - dasm_put(Dst, 8130); + dasm_put(Dst, 8151); } - dasm_put(Dst, 8177); + dasm_put(Dst, 8198); if (!sse) { } else { - dasm_put(Dst, 8251); + dasm_put(Dst, 8272); } - dasm_put(Dst, 8254); - dasm_put(Dst, 8339, (unsigned int)(U64x(3ff00000,00000000)), (unsigned int)((U64x(3ff00000,00000000))>>32), (unsigned int)(U64x(3ff00000,00000000)), (unsigned int)((U64x(3ff00000,00000000))>>32)); - dasm_put(Dst, 8440, (unsigned int)(U64x(3ff00000,00000000)), (unsigned int)((U64x(3ff00000,00000000))>>32), (unsigned int)(U64x(7fffffff,ffffffff)), (unsigned int)((U64x(7fffffff,ffffffff))>>32), (unsigned int)(U64x(3ff00000,00000000)), (unsigned int)((U64x(3ff00000,00000000))>>32), (unsigned int)(U64x(7ff00000,00000000)), (unsigned int)((U64x(7ff00000,00000000))>>32)); - dasm_put(Dst, 8608); + dasm_put(Dst, 8275); + dasm_put(Dst, 8360, (unsigned int)(U64x(3ff00000,00000000)), (unsigned int)((U64x(3ff00000,00000000))>>32), (unsigned int)(U64x(3ff00000,00000000)), (unsigned int)((U64x(3ff00000,00000000))>>32)); + dasm_put(Dst, 8461, (unsigned int)(U64x(3ff00000,00000000)), (unsigned int)((U64x(3ff00000,00000000))>>32), (unsigned int)(U64x(7fffffff,ffffffff)), (unsigned int)((U64x(7fffffff,ffffffff))>>32), (unsigned int)(U64x(3ff00000,00000000)), (unsigned int)((U64x(3ff00000,00000000))>>32), (unsigned int)(U64x(7ff00000,00000000)), (unsigned int)((U64x(7ff00000,00000000))>>32)); + dasm_put(Dst, 8629); #if LJ_HASJIT if (sse) { - dasm_put(Dst, 8649); - dasm_put(Dst, 8719); - dasm_put(Dst, 8792); + dasm_put(Dst, 8670); + dasm_put(Dst, 8740); + dasm_put(Dst, 8813); } else { - dasm_put(Dst, 8842); - dasm_put(Dst, 8934); + dasm_put(Dst, 8863); + dasm_put(Dst, 8955); } - dasm_put(Dst, 8980); + dasm_put(Dst, 9001); #endif - dasm_put(Dst, 8984); + dasm_put(Dst, 9005); if (sse) { - dasm_put(Dst, 8987, (unsigned int)(U64x(80000000,00000000)), (unsigned int)((U64x(80000000,00000000))>>32)); - dasm_put(Dst, 9076, (unsigned int)(U64x(7fffffff,ffffffff)), (unsigned int)((U64x(7fffffff,ffffffff))>>32)); + dasm_put(Dst, 9008, (unsigned int)(U64x(80000000,00000000)), (unsigned int)((U64x(80000000,00000000))>>32)); + dasm_put(Dst, 9097, (unsigned int)(U64x(7fffffff,ffffffff)), (unsigned int)((U64x(7fffffff,ffffffff))>>32)); } else { - dasm_put(Dst, 9200); - dasm_put(Dst, 9283); + dasm_put(Dst, 9221); + dasm_put(Dst, 9304); if (cmov) { - dasm_put(Dst, 9338); + dasm_put(Dst, 9359); } else { - dasm_put(Dst, 9357); + dasm_put(Dst, 9378); } - dasm_put(Dst, 8980); + dasm_put(Dst, 9001); } - dasm_put(Dst, 9398); + dasm_put(Dst, 9419); } /* Generate the code for a single instruction. */ @@ -1452,618 +1454,618 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop, int cmov, int sse) /* 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, 9424, LJ_TISNUM, LJ_TISNUM); + dasm_put(Dst, 9445, LJ_TISNUM, LJ_TISNUM); if (sse) { - dasm_put(Dst, 9445); + dasm_put(Dst, 9466); } else { - dasm_put(Dst, 9460); + dasm_put(Dst, 9481); if (cmov) { - dasm_put(Dst, 9470); + dasm_put(Dst, 9491); } else { - dasm_put(Dst, 9476); + dasm_put(Dst, 9497); } } switch (op) { case BC_ISLT: - dasm_put(Dst, 9483); + dasm_put(Dst, 9504); break; case BC_ISGE: - dasm_put(Dst, 9278); + dasm_put(Dst, 9299); break; case BC_ISLE: - dasm_put(Dst, 5839); + dasm_put(Dst, 5860); break; case BC_ISGT: - dasm_put(Dst, 9488); + dasm_put(Dst, 9509); break; default: break; /* Shut up GCC. */ } - dasm_put(Dst, 9493, -BCBIAS_J*4); + dasm_put(Dst, 9514, -BCBIAS_J*4); break; case BC_ISEQV: case BC_ISNEV: vk = op == BC_ISEQV; - dasm_put(Dst, 9527, LJ_TISNUM, LJ_TISNUM); + dasm_put(Dst, 9548, LJ_TISNUM, LJ_TISNUM); if (sse) { - dasm_put(Dst, 9553); + dasm_put(Dst, 9574); } else { - dasm_put(Dst, 9565); + dasm_put(Dst, 9586); if (cmov) { - dasm_put(Dst, 9470); + dasm_put(Dst, 9491); } else { - dasm_put(Dst, 9476); + dasm_put(Dst, 9497); } } iseqne_fp: if (vk) { - dasm_put(Dst, 9572); + dasm_put(Dst, 9593); } else { - dasm_put(Dst, 9581); + dasm_put(Dst, 9602); } iseqne_end: if (vk) { - dasm_put(Dst, 9590, -BCBIAS_J*4); + dasm_put(Dst, 9611, -BCBIAS_J*4); } else { - dasm_put(Dst, 9605, -BCBIAS_J*4); + dasm_put(Dst, 9626, -BCBIAS_J*4); } - dasm_put(Dst, 9507); + dasm_put(Dst, 9528); if (op == BC_ISEQV || op == BC_ISNEV) { - dasm_put(Dst, 9620, LJ_TISPRI, LJ_TISTABUD, Dt6(->metatable), Dt6(->nomm), 1<metatable), Dt6(->nomm), 1<>32)); + dasm_put(Dst, 9923, (unsigned int)(U64x(80000000,00000000)), (unsigned int)((U64x(80000000,00000000))>>32)); } else { - dasm_put(Dst, 9927); + dasm_put(Dst, 9948); } - dasm_put(Dst, 9507); + dasm_put(Dst, 9528); break; case BC_LEN: - dasm_put(Dst, 9936, LJ_TSTR); + dasm_put(Dst, 9957, LJ_TSTR); if (sse) { - dasm_put(Dst, 9950, Dt5(->len)); + dasm_put(Dst, 9971, Dt5(->len)); } else { - dasm_put(Dst, 9968, Dt5(->len)); + dasm_put(Dst, 9989, Dt5(->len)); } - dasm_put(Dst, 9977, LJ_TTAB); + dasm_put(Dst, 9998, LJ_TTAB); if (sse) { - dasm_put(Dst, 10018); + dasm_put(Dst, 10039); } else { } - dasm_put(Dst, 10027); + dasm_put(Dst, 10048); break; /* -- Binary ops -------------------------------------------------------- */ case BC_ADDVN: case BC_ADDNV: case BC_ADDVV: - dasm_put(Dst, 10037); + dasm_put(Dst, 10058); vk = ((int)op - BC_ADDVN) / (BC_ADDNV-BC_ADDVN); switch (vk) { case 0: - dasm_put(Dst, 10045, LJ_TISNUM); + dasm_put(Dst, 10066, LJ_TISNUM); if (sse) { - dasm_put(Dst, 10057); + dasm_put(Dst, 10078); } else { - dasm_put(Dst, 10071); + dasm_put(Dst, 10092); } break; case 1: - dasm_put(Dst, 10079, LJ_TISNUM); + dasm_put(Dst, 10100, LJ_TISNUM); if (sse) { - dasm_put(Dst, 10091); + dasm_put(Dst, 10112); } else { - dasm_put(Dst, 10105); + dasm_put(Dst, 10126); } break; default: - dasm_put(Dst, 10113, LJ_TISNUM, LJ_TISNUM); + dasm_put(Dst, 10134, LJ_TISNUM, LJ_TISNUM); if (sse) { - dasm_put(Dst, 10135); + dasm_put(Dst, 10156); } else { - dasm_put(Dst, 10149); + dasm_put(Dst, 10170); } break; } if (sse) { - dasm_put(Dst, 9920); + dasm_put(Dst, 9941); } else { - dasm_put(Dst, 9932); + dasm_put(Dst, 9953); } - dasm_put(Dst, 9507); + dasm_put(Dst, 9528); break; case BC_SUBVN: case BC_SUBNV: case BC_SUBVV: - dasm_put(Dst, 10037); + dasm_put(Dst, 10058); vk = ((int)op - BC_ADDVN) / (BC_ADDNV-BC_ADDVN); switch (vk) { case 0: - dasm_put(Dst, 10045, LJ_TISNUM); + dasm_put(Dst, 10066, LJ_TISNUM); if (sse) { - dasm_put(Dst, 10157); + dasm_put(Dst, 10178); } else { - dasm_put(Dst, 10171); + dasm_put(Dst, 10192); } break; case 1: - dasm_put(Dst, 10079, LJ_TISNUM); + dasm_put(Dst, 10100, LJ_TISNUM); if (sse) { - dasm_put(Dst, 10179); + dasm_put(Dst, 10200); } else { - dasm_put(Dst, 10193); + dasm_put(Dst, 10214); } break; default: - dasm_put(Dst, 10113, LJ_TISNUM, LJ_TISNUM); + dasm_put(Dst, 10134, LJ_TISNUM, LJ_TISNUM); if (sse) { - dasm_put(Dst, 10201); + dasm_put(Dst, 10222); } else { - dasm_put(Dst, 10215); + dasm_put(Dst, 10236); } break; } if (sse) { - dasm_put(Dst, 9920); + dasm_put(Dst, 9941); } else { - dasm_put(Dst, 9932); + dasm_put(Dst, 9953); } - dasm_put(Dst, 9507); + dasm_put(Dst, 9528); break; case BC_MULVN: case BC_MULNV: case BC_MULVV: - dasm_put(Dst, 10037); + dasm_put(Dst, 10058); vk = ((int)op - BC_ADDVN) / (BC_ADDNV-BC_ADDVN); switch (vk) { case 0: - dasm_put(Dst, 10045, LJ_TISNUM); + dasm_put(Dst, 10066, LJ_TISNUM); if (sse) { - dasm_put(Dst, 10223); + dasm_put(Dst, 10244); } else { - dasm_put(Dst, 10237); + dasm_put(Dst, 10258); } break; case 1: - dasm_put(Dst, 10079, LJ_TISNUM); + dasm_put(Dst, 10100, LJ_TISNUM); if (sse) { - dasm_put(Dst, 10245); + dasm_put(Dst, 10266); } else { - dasm_put(Dst, 10259); + dasm_put(Dst, 10280); } break; default: - dasm_put(Dst, 10113, LJ_TISNUM, LJ_TISNUM); + dasm_put(Dst, 10134, LJ_TISNUM, LJ_TISNUM); if (sse) { - dasm_put(Dst, 10267); + dasm_put(Dst, 10288); } else { - dasm_put(Dst, 10281); + dasm_put(Dst, 10302); } break; } if (sse) { - dasm_put(Dst, 9920); + dasm_put(Dst, 9941); } else { - dasm_put(Dst, 9932); + dasm_put(Dst, 9953); } - dasm_put(Dst, 9507); + dasm_put(Dst, 9528); break; case BC_DIVVN: case BC_DIVNV: case BC_DIVVV: - dasm_put(Dst, 10037); + dasm_put(Dst, 10058); vk = ((int)op - BC_ADDVN) / (BC_ADDNV-BC_ADDVN); switch (vk) { case 0: - dasm_put(Dst, 10045, LJ_TISNUM); + dasm_put(Dst, 10066, LJ_TISNUM); if (sse) { - dasm_put(Dst, 10289); + dasm_put(Dst, 10310); } else { - dasm_put(Dst, 10303); + dasm_put(Dst, 10324); } break; case 1: - dasm_put(Dst, 10079, LJ_TISNUM); + dasm_put(Dst, 10100, LJ_TISNUM); if (sse) { - dasm_put(Dst, 10311); + dasm_put(Dst, 10332); } else { - dasm_put(Dst, 10325); + dasm_put(Dst, 10346); } break; default: - dasm_put(Dst, 10113, LJ_TISNUM, LJ_TISNUM); + dasm_put(Dst, 10134, LJ_TISNUM, LJ_TISNUM); if (sse) { - dasm_put(Dst, 10333); + dasm_put(Dst, 10354); } else { - dasm_put(Dst, 10347); + dasm_put(Dst, 10368); } break; } if (sse) { - dasm_put(Dst, 9920); + dasm_put(Dst, 9941); } else { - dasm_put(Dst, 9932); + dasm_put(Dst, 9953); } - dasm_put(Dst, 9507); + dasm_put(Dst, 9528); break; case BC_MODVN: - dasm_put(Dst, 10037); + dasm_put(Dst, 10058); vk = ((int)op - BC_ADDVN) / (BC_ADDNV-BC_ADDVN); switch (vk) { case 0: - dasm_put(Dst, 10045, LJ_TISNUM); + dasm_put(Dst, 10066, LJ_TISNUM); if (sse) { - dasm_put(Dst, 10355); + dasm_put(Dst, 10376); } else { - dasm_put(Dst, 10369); + dasm_put(Dst, 10390); } break; case 1: - dasm_put(Dst, 10079, LJ_TISNUM); + dasm_put(Dst, 10100, LJ_TISNUM); if (sse) { - dasm_put(Dst, 10377); + dasm_put(Dst, 10398); } else { - dasm_put(Dst, 10391); + dasm_put(Dst, 10412); } break; default: - dasm_put(Dst, 10113, LJ_TISNUM, LJ_TISNUM); + dasm_put(Dst, 10134, LJ_TISNUM, LJ_TISNUM); if (sse) { - dasm_put(Dst, 10399); + dasm_put(Dst, 10420); } else { - dasm_put(Dst, 10413); + dasm_put(Dst, 10434); } break; } - dasm_put(Dst, 10421); + dasm_put(Dst, 10442); if (sse) { - dasm_put(Dst, 9920); + dasm_put(Dst, 9941); } else { - dasm_put(Dst, 9932); + dasm_put(Dst, 9953); } - dasm_put(Dst, 9507); + dasm_put(Dst, 9528); break; case BC_MODNV: case BC_MODVV: - dasm_put(Dst, 10037); + dasm_put(Dst, 10058); vk = ((int)op - BC_ADDVN) / (BC_ADDNV-BC_ADDVN); switch (vk) { case 0: - dasm_put(Dst, 10045, LJ_TISNUM); + dasm_put(Dst, 10066, LJ_TISNUM); if (sse) { - dasm_put(Dst, 10355); + dasm_put(Dst, 10376); } else { - dasm_put(Dst, 10369); + dasm_put(Dst, 10390); } break; case 1: - dasm_put(Dst, 10079, LJ_TISNUM); + dasm_put(Dst, 10100, LJ_TISNUM); if (sse) { - dasm_put(Dst, 10377); + dasm_put(Dst, 10398); } else { - dasm_put(Dst, 10391); + dasm_put(Dst, 10412); } break; default: - dasm_put(Dst, 10113, LJ_TISNUM, LJ_TISNUM); + dasm_put(Dst, 10134, LJ_TISNUM, LJ_TISNUM); if (sse) { - dasm_put(Dst, 10399); + dasm_put(Dst, 10420); } else { - dasm_put(Dst, 10413); + dasm_put(Dst, 10434); } break; } - dasm_put(Dst, 10427); + dasm_put(Dst, 10448); break; case BC_POW: - dasm_put(Dst, 10037); + dasm_put(Dst, 10058); vk = ((int)op - BC_ADDVN) / (BC_ADDNV-BC_ADDVN); switch (vk) { case 0: - dasm_put(Dst, 10045, LJ_TISNUM); + dasm_put(Dst, 10066, LJ_TISNUM); if (sse) { - dasm_put(Dst, 10355); + dasm_put(Dst, 10376); } else { - dasm_put(Dst, 10369); + dasm_put(Dst, 10390); } break; case 1: - dasm_put(Dst, 10079, LJ_TISNUM); + dasm_put(Dst, 10100, LJ_TISNUM); if (sse) { - dasm_put(Dst, 10377); + dasm_put(Dst, 10398); } else { - dasm_put(Dst, 10391); + dasm_put(Dst, 10412); } break; default: - dasm_put(Dst, 10113, LJ_TISNUM, LJ_TISNUM); + dasm_put(Dst, 10134, LJ_TISNUM, LJ_TISNUM); if (sse) { - dasm_put(Dst, 10399); + dasm_put(Dst, 10420); } else { - dasm_put(Dst, 10413); + dasm_put(Dst, 10434); } break; } - dasm_put(Dst, 10432); + dasm_put(Dst, 10453); if (sse) { - dasm_put(Dst, 9920); + dasm_put(Dst, 9941); } else { - dasm_put(Dst, 9932); + dasm_put(Dst, 9953); } - dasm_put(Dst, 9507); + dasm_put(Dst, 9528); break; case BC_CAT: - dasm_put(Dst, 10436, Dt1(->base), Dt1(->base)); + dasm_put(Dst, 10457, Dt1(->base), Dt1(->base)); break; /* -- Constant ops ------------------------------------------------------ */ case BC_KSTR: - dasm_put(Dst, 10519, LJ_TSTR); + dasm_put(Dst, 10540, LJ_TSTR); break; case BC_KSHORT: if (sse) { - dasm_put(Dst, 10554); - } else { - dasm_put(Dst, 10569); - } - dasm_put(Dst, 9507); - break; - case BC_KNUM: - if (sse) { - dasm_put(Dst, 10577); + dasm_put(Dst, 10575); } else { dasm_put(Dst, 10590); } - dasm_put(Dst, 9507); + dasm_put(Dst, 9528); + break; + case BC_KNUM: + if (sse) { + dasm_put(Dst, 10598); + } else { + dasm_put(Dst, 10611); + } + dasm_put(Dst, 9528); break; case BC_KPRI: - dasm_put(Dst, 10597); + dasm_put(Dst, 10618); break; case BC_KNIL: - dasm_put(Dst, 10625, LJ_TNIL); + dasm_put(Dst, 10646, LJ_TNIL); break; /* -- Upvalue and function ops ------------------------------------------ */ case BC_UGET: - dasm_put(Dst, 10672, offsetof(GCfuncL, uvptr), DtA(->v)); + dasm_put(Dst, 10693, offsetof(GCfuncL, uvptr), DtA(->v)); break; case BC_USETV: #define TV2MARKOFS \ ((int32_t)offsetof(GCupval, marked)-(int32_t)offsetof(GCupval, tv)) - dasm_put(Dst, 10712, offsetof(GCfuncL, uvptr), DtA(->closed), DtA(->v), TV2MARKOFS, LJ_GC_BLACK, LJ_TISGCV, LJ_TISNUM - LJ_TISGCV, Dt4(->gch.marked), LJ_GC_WHITES, GG_DISP2G); - dasm_put(Dst, 10803); + dasm_put(Dst, 10733, offsetof(GCfuncL, uvptr), DtA(->closed), DtA(->v), TV2MARKOFS, LJ_GC_BLACK, LJ_TISGCV, LJ_TISNUM - LJ_TISGCV, Dt4(->gch.marked), LJ_GC_WHITES, GG_DISP2G); + dasm_put(Dst, 10824); break; #undef TV2MARKOFS case BC_USETS: - dasm_put(Dst, 10815, offsetof(GCfuncL, uvptr), DtA(->v), LJ_TSTR, DtA(->marked), LJ_GC_BLACK, Dt4(->gch.marked), LJ_GC_WHITES, DtA(->closed), GG_DISP2G); + dasm_put(Dst, 10836, offsetof(GCfuncL, uvptr), DtA(->v), LJ_TSTR, DtA(->marked), LJ_GC_BLACK, Dt4(->gch.marked), LJ_GC_WHITES, DtA(->closed), GG_DISP2G); break; case BC_USETN: - dasm_put(Dst, 10908); + dasm_put(Dst, 10929); if (sse) { - dasm_put(Dst, 10913); + dasm_put(Dst, 10934); } else { - dasm_put(Dst, 9746); + dasm_put(Dst, 9767); } - dasm_put(Dst, 10920, offsetof(GCfuncL, uvptr), DtA(->v)); + dasm_put(Dst, 10941, offsetof(GCfuncL, uvptr), DtA(->v)); if (sse) { - dasm_put(Dst, 10929); + dasm_put(Dst, 10950); } else { - dasm_put(Dst, 10935); + dasm_put(Dst, 10956); } - dasm_put(Dst, 9507); + dasm_put(Dst, 9528); break; case BC_USETP: - dasm_put(Dst, 10938, offsetof(GCfuncL, uvptr), DtA(->v)); + dasm_put(Dst, 10959, offsetof(GCfuncL, uvptr), DtA(->v)); break; case BC_UCLO: - dasm_put(Dst, 10977, -BCBIAS_J*4, Dt1(->openupval), Dt1(->base), Dt1(->base)); + dasm_put(Dst, 10998, -BCBIAS_J*4, Dt1(->openupval), Dt1(->base), Dt1(->base)); break; case BC_FNEW: - dasm_put(Dst, 11032, Dt1(->base), Dt1(->base), LJ_TFUNC); + dasm_put(Dst, 11053, Dt1(->base), Dt1(->base), LJ_TFUNC); break; /* -- Table ops --------------------------------------------------------- */ case BC_TNEW: - dasm_put(Dst, 11098, Dt1(->base), DISPATCH_GL(gc.total), DISPATCH_GL(gc.threshold), Dt1(->base), LJ_TTAB); + dasm_put(Dst, 11119, Dt1(->base), DISPATCH_GL(gc.total), DISPATCH_GL(gc.threshold), Dt1(->base), LJ_TTAB); break; case BC_TDUP: - dasm_put(Dst, 11220, DISPATCH_GL(gc.total), DISPATCH_GL(gc.threshold), Dt1(->base), Dt1(->base), LJ_TTAB); + dasm_put(Dst, 11241, DISPATCH_GL(gc.total), DISPATCH_GL(gc.threshold), Dt1(->base), Dt1(->base), LJ_TTAB); break; case BC_GGET: - dasm_put(Dst, 11315, Dt7(->env)); + dasm_put(Dst, 11336, Dt7(->env)); break; case BC_GSET: - dasm_put(Dst, 11334, Dt7(->env)); + dasm_put(Dst, 11355, Dt7(->env)); break; case BC_TGETV: - dasm_put(Dst, 11353, LJ_TTAB, LJ_TISNUM); + dasm_put(Dst, 11374, LJ_TTAB, LJ_TISNUM); if (sse) { - dasm_put(Dst, 11386); + dasm_put(Dst, 11407); } else { } - dasm_put(Dst, 11407, Dt6(->asize), Dt6(->array), LJ_TNIL, Dt6(->metatable), Dt6(->metatable), Dt6(->nomm), 1<asize), Dt6(->array), LJ_TNIL, Dt6(->metatable), Dt6(->metatable), Dt6(->nomm), 1<hmask), Dt5(->hash), sizeof(Node), Dt6(->node), DtB(->key.it), LJ_TSTR, DtB(->key.gcr), LJ_TNIL); - dasm_put(Dst, 11604, LJ_TNIL, DtB(->next), Dt6(->metatable), Dt6(->nomm), 1<hmask), Dt5(->hash), sizeof(Node), Dt6(->node), DtB(->key.it), LJ_TSTR, DtB(->key.gcr), LJ_TNIL); + dasm_put(Dst, 11625, LJ_TNIL, DtB(->next), Dt6(->metatable), Dt6(->nomm), 1<asize), Dt6(->array), LJ_TNIL, Dt6(->metatable), Dt6(->metatable), Dt6(->nomm), 1<asize), Dt6(->array), LJ_TNIL, Dt6(->metatable), Dt6(->metatable), Dt6(->nomm), 1<asize), Dt6(->array), LJ_TNIL, Dt6(->marked), LJ_GC_BLACK, Dt6(->metatable), Dt6(->metatable)); - dasm_put(Dst, 11899, Dt6(->nomm), 1<marked), cast_byte(~LJ_GC_BLACK), DISPATCH_GL(gc.grayagain), DISPATCH_GL(gc.grayagain), Dt6(->gclist)); + dasm_put(Dst, 11841, Dt6(->asize), Dt6(->array), LJ_TNIL, Dt6(->marked), LJ_GC_BLACK, Dt6(->metatable), Dt6(->metatable)); + dasm_put(Dst, 11920, Dt6(->nomm), 1<marked), cast_byte(~LJ_GC_BLACK), DISPATCH_GL(gc.grayagain), DISPATCH_GL(gc.grayagain), Dt6(->gclist)); break; case BC_TSETS: - dasm_put(Dst, 11961, LJ_TTAB, Dt6(->hmask), Dt5(->hash), sizeof(Node), Dt6(->nomm), Dt6(->node), DtB(->key.it), LJ_TSTR, DtB(->key.gcr), LJ_TNIL); - dasm_put(Dst, 12037, Dt6(->marked), LJ_GC_BLACK, Dt6(->metatable), Dt6(->metatable), Dt6(->nomm), 1<next)); - dasm_put(Dst, 12125, Dt6(->metatable), Dt6(->nomm), 1<base), Dt1(->base), Dt6(->marked), cast_byte(~LJ_GC_BLACK), DISPATCH_GL(gc.grayagain), DISPATCH_GL(gc.grayagain), Dt6(->gclist)); + dasm_put(Dst, 11982, LJ_TTAB, Dt6(->hmask), Dt5(->hash), sizeof(Node), Dt6(->nomm), Dt6(->node), DtB(->key.it), LJ_TSTR, DtB(->key.gcr), LJ_TNIL); + dasm_put(Dst, 12058, Dt6(->marked), LJ_GC_BLACK, Dt6(->metatable), Dt6(->metatable), Dt6(->nomm), 1<next)); + dasm_put(Dst, 12146, Dt6(->metatable), Dt6(->nomm), 1<base), Dt1(->base), Dt6(->marked), cast_byte(~LJ_GC_BLACK), DISPATCH_GL(gc.grayagain), DISPATCH_GL(gc.grayagain), Dt6(->gclist)); break; case BC_TSETB: - dasm_put(Dst, 12216, LJ_TTAB, Dt6(->asize), Dt6(->array), LJ_TNIL, Dt6(->marked), LJ_GC_BLACK, Dt6(->metatable)); - dasm_put(Dst, 12310, Dt6(->metatable), Dt6(->nomm), 1<marked), cast_byte(~LJ_GC_BLACK), DISPATCH_GL(gc.grayagain), DISPATCH_GL(gc.grayagain), Dt6(->gclist)); + dasm_put(Dst, 12237, LJ_TTAB, Dt6(->asize), Dt6(->array), LJ_TNIL, Dt6(->marked), LJ_GC_BLACK, Dt6(->metatable)); + dasm_put(Dst, 12331, Dt6(->metatable), Dt6(->nomm), 1<marked), cast_byte(~LJ_GC_BLACK), DISPATCH_GL(gc.grayagain), DISPATCH_GL(gc.grayagain), Dt6(->gclist)); break; case BC_TSETM: - dasm_put(Dst, 12356, Dt6(->marked), LJ_GC_BLACK, Dt6(->asize), Dt6(->array), Dt1(->base), Dt1(->base)); - dasm_put(Dst, 12499, Dt6(->marked), cast_byte(~LJ_GC_BLACK), DISPATCH_GL(gc.grayagain), DISPATCH_GL(gc.grayagain), Dt6(->gclist)); + dasm_put(Dst, 12377, Dt6(->marked), LJ_GC_BLACK, Dt6(->asize), Dt6(->array), Dt1(->base), Dt1(->base)); + dasm_put(Dst, 12520, Dt6(->marked), cast_byte(~LJ_GC_BLACK), DISPATCH_GL(gc.grayagain), DISPATCH_GL(gc.grayagain), Dt6(->gclist)); break; /* -- Calls and vararg handling ----------------------------------------- */ case BC_CALL: case BC_CALLM: - dasm_put(Dst, 10041); + dasm_put(Dst, 10062); if (op == BC_CALLM) { - dasm_put(Dst, 12517); + dasm_put(Dst, 12538); } - dasm_put(Dst, 12522, LJ_TFUNC, Dt7(->pc)); + dasm_put(Dst, 12543, LJ_TFUNC, Dt7(->pc)); break; case BC_CALLMT: - dasm_put(Dst, 12517); + dasm_put(Dst, 12538); break; case BC_CALLT: - dasm_put(Dst, 12564, LJ_TFUNC, FRAME_TYPE, Dt7(->ffid), Dt7(->pc)); - dasm_put(Dst, 12679, FRAME_TYPE, Dt7(->pc), PC2PROTO(k), FRAME_VARG, FRAME_TYPEP, FRAME_VARG); + dasm_put(Dst, 12585, LJ_TFUNC, FRAME_TYPE, Dt7(->ffid), Dt7(->pc)); + dasm_put(Dst, 12700, FRAME_TYPE, Dt7(->pc), PC2PROTO(k), FRAME_VARG, FRAME_TYPEP, FRAME_VARG); break; case BC_ITERC: - dasm_put(Dst, 12750, LJ_TFUNC, 2+1, Dt7(->pc)); + dasm_put(Dst, 12771, LJ_TFUNC, 2+1, Dt7(->pc)); break; case BC_ITERN: #if LJ_HASJIT #endif - dasm_put(Dst, 12821, Dt6(->asize), Dt6(->array), LJ_TNIL); + dasm_put(Dst, 12842, Dt6(->asize), Dt6(->array), LJ_TNIL); if (sse) { - dasm_put(Dst, 12867); + dasm_put(Dst, 12888); } else { - dasm_put(Dst, 12873); + dasm_put(Dst, 12894); } - dasm_put(Dst, 12879); + dasm_put(Dst, 12900); if (sse) { - dasm_put(Dst, 9920); + dasm_put(Dst, 9941); } else { - dasm_put(Dst, 9932); + dasm_put(Dst, 9953); } - dasm_put(Dst, 12892, -BCBIAS_J*4); + dasm_put(Dst, 12913, -BCBIAS_J*4); if (!sse) { - dasm_put(Dst, 12944); + dasm_put(Dst, 12965); } - dasm_put(Dst, 12950, Dt6(->hmask), sizeof(Node), Dt6(->node), DtB(->val.it), LJ_TNIL, DtB(->key), DtB(->val)); + dasm_put(Dst, 12971, Dt6(->hmask), sizeof(Node), Dt6(->node), DtB(->val.it), LJ_TNIL, DtB(->key), DtB(->val)); break; case BC_ISNEXT: - dasm_put(Dst, 13022, LJ_TFUNC, LJ_TTAB, LJ_TNIL, Dt8(->ffid), FF_next_N, -BCBIAS_J*4, BC_JMP, -BCBIAS_J*4, BC_ITERC); + dasm_put(Dst, 13043, LJ_TFUNC, LJ_TTAB, LJ_TNIL, Dt8(->ffid), FF_next_N, -BCBIAS_J*4, BC_JMP, -BCBIAS_J*4, BC_ITERC); break; case BC_VARG: - dasm_put(Dst, 13122, (8+FRAME_VARG), LJ_TNIL, Dt1(->maxstack)); - dasm_put(Dst, 13282, Dt1(->base), Dt1(->top), Dt1(->base), Dt1(->top)); + dasm_put(Dst, 13143, (8+FRAME_VARG), LJ_TNIL, Dt1(->maxstack)); + dasm_put(Dst, 13303, Dt1(->base), Dt1(->top), Dt1(->base), Dt1(->top)); break; /* -- Returns ----------------------------------------------------------- */ case BC_RETM: - dasm_put(Dst, 12517); + dasm_put(Dst, 12538); break; case BC_RET: case BC_RET0: case BC_RET1: if (op != BC_RET0) { - dasm_put(Dst, 13348); + dasm_put(Dst, 13369); } - dasm_put(Dst, 13352, FRAME_TYPE); + dasm_put(Dst, 13373, FRAME_TYPE); switch (op) { case BC_RET: - dasm_put(Dst, 13371); + dasm_put(Dst, 13392); break; case BC_RET1: - dasm_put(Dst, 13423); + dasm_put(Dst, 13444); /* fallthrough */ case BC_RET0: - dasm_put(Dst, 13433); + dasm_put(Dst, 13454); default: break; } - dasm_put(Dst, 13444, Dt7(->pc), PC2PROTO(k)); + dasm_put(Dst, 13465, Dt7(->pc), PC2PROTO(k)); if (op == BC_RET) { - dasm_put(Dst, 13488, LJ_TNIL); + dasm_put(Dst, 13509, LJ_TNIL); } else { - dasm_put(Dst, 13497, LJ_TNIL); + dasm_put(Dst, 13518, LJ_TNIL); } - dasm_put(Dst, 13504, -FRAME_VARG, FRAME_TYPEP); + dasm_put(Dst, 13525, -FRAME_VARG, FRAME_TYPEP); if (op != BC_RET0) { - dasm_put(Dst, 13528); + dasm_put(Dst, 13549); } - dasm_put(Dst, 4507); + dasm_put(Dst, 4528); break; /* -- Loops and branches ------------------------------------------------ */ @@ -2071,7 +2073,7 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop, int cmov, int sse) case BC_FORL: #if LJ_HASJIT - dasm_put(Dst, 13532, HOTCOUNT_PCMASK, GG_DISP2HOT); + dasm_put(Dst, 13553, HOTCOUNT_PCMASK, GG_DISP2HOT); #endif break; @@ -2083,57 +2085,57 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop, int cmov, int sse) case BC_FORI: case BC_IFORL: vk = (op == BC_IFORL || op == BC_JFORL); - dasm_put(Dst, 13553); + dasm_put(Dst, 13574); if (!vk) { - dasm_put(Dst, 13557, LJ_TISNUM, LJ_TISNUM); + dasm_put(Dst, 13578, LJ_TISNUM, LJ_TISNUM); } - dasm_put(Dst, 13576); + dasm_put(Dst, 13597); if (!vk) { - dasm_put(Dst, 13580, LJ_TISNUM); + dasm_put(Dst, 13601, LJ_TISNUM); } if (sse) { - dasm_put(Dst, 13589); + dasm_put(Dst, 13610); if (vk) { - dasm_put(Dst, 13601); + dasm_put(Dst, 13622); } else { - dasm_put(Dst, 13620); + dasm_put(Dst, 13641); } - dasm_put(Dst, 13625); + dasm_put(Dst, 13646); } else { - dasm_put(Dst, 13638); + dasm_put(Dst, 13659); if (vk) { - dasm_put(Dst, 13644); + dasm_put(Dst, 13665); } else { - dasm_put(Dst, 13660); + dasm_put(Dst, 13681); } - dasm_put(Dst, 13668); + dasm_put(Dst, 13689); if (cmov) { - dasm_put(Dst, 9470); + dasm_put(Dst, 9491); } else { - dasm_put(Dst, 9476); + dasm_put(Dst, 9497); } if (!cmov) { - dasm_put(Dst, 13673); + dasm_put(Dst, 13694); } } if (op == BC_FORI) { - dasm_put(Dst, 13679, -BCBIAS_J*4); + dasm_put(Dst, 13700, -BCBIAS_J*4); } else if (op == BC_JFORI) { - dasm_put(Dst, 13689, -BCBIAS_J*4, BC_JLOOP); + dasm_put(Dst, 13710, -BCBIAS_J*4, BC_JLOOP); } else if (op == BC_IFORL) { - dasm_put(Dst, 13703, -BCBIAS_J*4); + dasm_put(Dst, 13724, -BCBIAS_J*4); } else { - dasm_put(Dst, 13699, BC_JLOOP); + dasm_put(Dst, 13720, BC_JLOOP); } - dasm_put(Dst, 9505); + dasm_put(Dst, 9526); if (sse) { - dasm_put(Dst, 13713); + dasm_put(Dst, 13734); } break; case BC_ITERL: #if LJ_HASJIT - dasm_put(Dst, 13532, HOTCOUNT_PCMASK, GG_DISP2HOT); + dasm_put(Dst, 13553, HOTCOUNT_PCMASK, GG_DISP2HOT); #endif break; @@ -2142,33 +2144,33 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop, int cmov, int sse) break; #endif case BC_IITERL: - dasm_put(Dst, 13724, LJ_TNIL); + dasm_put(Dst, 13745, LJ_TNIL); if (op == BC_JITERL) { - dasm_put(Dst, 13739, BC_JLOOP); + dasm_put(Dst, 13760, BC_JLOOP); } else { - dasm_put(Dst, 13753, -BCBIAS_J*4); + dasm_put(Dst, 13774, -BCBIAS_J*4); } - dasm_put(Dst, 9805); + dasm_put(Dst, 9826); break; case BC_LOOP: #if LJ_HASJIT - dasm_put(Dst, 13532, HOTCOUNT_PCMASK, GG_DISP2HOT); + dasm_put(Dst, 13553, HOTCOUNT_PCMASK, GG_DISP2HOT); #endif break; case BC_ILOOP: - dasm_put(Dst, 9507); + dasm_put(Dst, 9528); break; case BC_JLOOP: #if LJ_HASJIT - dasm_put(Dst, 13769, DISPATCH_J(trace), DtD(->mcode), DISPATCH_GL(jit_base), DISPATCH_GL(jit_L), 9*16+4*8, -1*16, -2*16, -3*16, -4*16, -5*16, -6*16, -7*16, -8*16, -9*16); + dasm_put(Dst, 13790, DISPATCH_J(trace), DtD(->mcode), DISPATCH_GL(jit_base), DISPATCH_GL(jit_L), 9*16+4*8, -1*16, -2*16, -3*16, -4*16, -5*16, -6*16, -7*16, -8*16, -9*16); #endif break; case BC_JMP: - dasm_put(Dst, 13878, -BCBIAS_J*4); + dasm_put(Dst, 13899, -BCBIAS_J*4); break; /* -- Function headers -------------------------------------------------- */ @@ -2182,7 +2184,7 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop, int cmov, int sse) case BC_FUNCF: #if LJ_HASJIT - dasm_put(Dst, 13903, HOTCOUNT_PCMASK, GG_DISP2HOT); + dasm_put(Dst, 13924, HOTCOUNT_PCMASK, GG_DISP2HOT); #endif case BC_FUNCV: /* NYI: compiled vararg functions. */ break; @@ -2192,47 +2194,47 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop, int cmov, int sse) break; #endif case BC_IFUNCF: - dasm_put(Dst, 13924, -4+PC2PROTO(k), Dt1(->maxstack), -4+PC2PROTO(numparams)); + dasm_put(Dst, 13945, -4+PC2PROTO(k), Dt1(->maxstack), -4+PC2PROTO(numparams)); if (op == BC_JFUNCF) { - dasm_put(Dst, 13954, BC_JLOOP); + dasm_put(Dst, 13975, BC_JLOOP); } else { - dasm_put(Dst, 9507); + dasm_put(Dst, 9528); } - dasm_put(Dst, 13963, LJ_TNIL); + dasm_put(Dst, 13984, LJ_TNIL); break; case BC_JFUNCV: #if !LJ_HASJIT break; #endif - dasm_put(Dst, 8982); + dasm_put(Dst, 9003); break; /* NYI: compiled vararg functions. */ case BC_IFUNCV: - dasm_put(Dst, 13985, FRAME_VARG, Dt1(->maxstack), -4+PC2PROTO(numparams), LJ_TNIL); + dasm_put(Dst, 14006, FRAME_VARG, Dt1(->maxstack), -4+PC2PROTO(numparams), LJ_TNIL); if (op == BC_JFUNCV) { - dasm_put(Dst, 13954, BC_JLOOP); + dasm_put(Dst, 13975, BC_JLOOP); } else { - dasm_put(Dst, 14076, -4+PC2PROTO(k)); + dasm_put(Dst, 14097, -4+PC2PROTO(k)); } - dasm_put(Dst, 14099, LJ_TNIL); + dasm_put(Dst, 14120, LJ_TNIL); break; case BC_FUNCC: case BC_FUNCCW: - dasm_put(Dst, 14121, Dt8(->f), Dt1(->base), 8*LUA_MINSTACK, Dt1(->maxstack), Dt1(->top)); - if (op == BC_FUNCC) { - dasm_put(Dst, 14151); - } else { - dasm_put(Dst, 14155); - } - dasm_put(Dst, 14163, DISPATCH_GL(vmstate), ~LJ_VMST_C); + dasm_put(Dst, 14142, Dt8(->f), Dt1(->base), 8*LUA_MINSTACK, Dt1(->maxstack), Dt1(->top)); if (op == BC_FUNCC) { dasm_put(Dst, 14172); } else { - dasm_put(Dst, 14176, DISPATCH_GL(wrapf)); + dasm_put(Dst, 14176); } - dasm_put(Dst, 14181, DISPATCH_GL(vmstate), ~LJ_VMST_INTERP, Dt1(->base), Dt1(->top)); + dasm_put(Dst, 14184, DISPATCH_GL(vmstate), ~LJ_VMST_C); + if (op == BC_FUNCC) { + dasm_put(Dst, 14193); + } else { + dasm_put(Dst, 14197, DISPATCH_GL(wrapf)); + } + dasm_put(Dst, 14202, DISPATCH_GL(vmstate), ~LJ_VMST_INTERP, Dt1(->base), Dt1(->top)); break; /* ---------------------------------------------------------------------- */ @@ -2260,7 +2262,7 @@ static int build_backend(BuildCtx *ctx) build_subroutines(ctx, cmov, sse); - dasm_put(Dst, 14206); + dasm_put(Dst, 14227); for (op = 0; op < BC__MAX; op++) build_ins(ctx, (BCOp)op, op, cmov, sse); diff --git a/src/buildvm_x86.dasc b/src/buildvm_x86.dasc index e9ecc2c2..e07ef181 100644 --- a/src/buildvm_x86.dasc +++ b/src/buildvm_x86.dasc @@ -1509,8 +1509,10 @@ static void build_subroutines(BuildCtx *ctx, int cmov, int sse) | jmp ->fff_res1 | |.ffunc_1 pairs - | mov CFUNC:RB, [BASE-8] + | mov TAB:RB, [BASE] | cmp dword [BASE+4], LJ_TTAB; jne ->fff_fallback + | cmp dword TAB:RB->metatable, 0; jne ->fff_fallback + | mov CFUNC:RB, [BASE-8] | mov CFUNC:RD, CFUNC:RB->upvalue[0] | mov PC, [BASE-4] | mov dword [BASE-4], LJ_TFUNC @@ -1571,8 +1573,10 @@ static void build_subroutines(BuildCtx *ctx, int cmov, int sse) | jmp ->fff_res | |.ffunc_1 ipairs - | mov CFUNC:RB, [BASE-8] + | mov TAB:RB, [BASE] | cmp dword [BASE+4], LJ_TTAB; jne ->fff_fallback + | cmp dword TAB:RB->metatable, 0; jne ->fff_fallback + | mov CFUNC:RB, [BASE-8] | mov CFUNC:RD, CFUNC:RB->upvalue[0] | mov PC, [BASE-4] | mov dword [BASE-4], LJ_TFUNC diff --git a/src/buildvm_x86.h b/src/buildvm_x86.h index 8d30b4ef..f68d6c87 100644 --- a/src/buildvm_x86.h +++ b/src/buildvm_x86.h @@ -12,7 +12,7 @@ #define DASM_SECTION_CODE_OP 0 #define DASM_SECTION_CODE_SUB 1 #define DASM_MAXSECTION 2 -static const unsigned char build_actionlist[15576] = { +static const unsigned char build_actionlist[15597] = { 254,1,248,10,252,247,198,237,15,132,244,11,131,230,252,248,41,252,242,141, 76,49,252,248,139,114,252,252,199,68,10,4,237,248,12,131,192,1,137,68,36, 20,252,247,198,237,15,132,244,13,248,14,129,252,246,239,252,247,198,237,15, @@ -129,33 +129,34 @@ static const unsigned char build_actionlist[15576] = { 139,149,233,133,192,15,132,244,249,139,106,8,139,66,12,137,106,252,248,137, 66,252,252,139,106,16,139,66,20,137,42,137,66,4,248,68,184,237,252,233,244, 69,248,2,199,66,12,237,252,233,244,1,248,3,199,66,252,252,237,252,233,244, - 58,248,70,129,252,248,239,15,130,244,55,255,139,106,252,248,129,122,253,4, - 239,15,133,244,55,139,133,233,139,114,252,252,199,66,252,252,237,137,66,252, - 248,199,66,12,237,184,237,252,233,244,69,248,71,129,252,248,239,15,130,244, - 55,129,122,253,4,239,15,133,244,55,129,122,253,12,239,15,135,244,55,139,114, - 252,252,255,252,242,15,16,66,8,189,0,0,252,240,63,102,15,110,205,102,15,112, - 201,81,252,242,15,88,193,252,242,15,45,192,252,242,15,17,66,252,248,255,221, - 66,8,217,232,222,193,219,20,36,221,90,252,248,139,4,36,255,139,42,59,133, - 233,15,131,244,248,193,224,3,3,133,233,248,1,129,120,253,4,239,15,132,244, - 72,139,40,139,64,4,137,42,137,66,4,252,233,244,68,248,2,131,189,233,0,15, - 132,244,72,137,252,233,137,213,137,194,232,251,1,12,137,252,234,133,192,15, - 133,244,1,248,72,184,237,252,233,244,69,248,73,255,129,252,248,239,15,130, - 244,55,139,106,252,248,129,122,253,4,239,15,133,244,55,139,133,233,139,114, - 252,252,199,66,252,252,237,137,66,252,248,255,15,87,192,252,242,15,17,66, - 8,255,217,252,238,221,90,8,255,184,237,252,233,244,69,248,74,129,252,248, - 239,15,130,244,55,141,74,8,131,232,1,190,237,248,1,15,182,171,233,193,252, - 237,235,131,229,1,1,252,238,252,233,244,27,248,75,129,252,248,239,15,130, - 244,55,129,122,253,12,239,15,133,244,55,255,139,106,4,137,106,12,199,66,4, - 237,139,42,139,114,8,137,106,8,137,50,141,74,16,131,232,2,190,237,252,233, - 244,1,248,76,129,252,248,239,15,130,244,55,139,42,139,114,252,252,137,116, - 36,24,137,44,36,129,122,253,4,239,15,133,244,55,131,189,233,0,15,133,244, - 55,128,189,233,235,15,135,244,55,139,141,233,15,132,244,247,255,59,141,233, - 15,132,244,55,248,1,141,116,193,252,240,59,181,233,15,135,244,55,137,181, - 233,139,108,36,48,137,149,233,131,194,8,137,149,233,141,108,194,232,41,252, - 245,57,206,15,132,244,249,248,2,139,68,46,4,137,70,252,252,139,4,46,137,70, - 252,248,131,252,238,8,57,206,15,133,244,2,248,3,137,76,36,4,49,201,137,76, - 36,12,137,76,36,8,232,244,24,199,131,233,237,255,139,108,36,48,139,52,36, - 139,149,233,129,252,248,239,15,135,244,254,248,4,139,142,233,139,190,233, + 58,248,70,129,252,248,239,15,130,244,55,255,139,42,129,122,253,4,239,15,133, + 244,55,131,189,233,0,15,133,244,55,139,106,252,248,139,133,233,139,114,252, + 252,199,66,252,252,237,137,66,252,248,199,66,12,237,184,237,252,233,244,69, + 248,71,129,252,248,239,15,130,244,55,129,122,253,4,239,15,133,244,55,129, + 122,253,12,239,255,15,135,244,55,139,114,252,252,255,252,242,15,16,66,8,189, + 0,0,252,240,63,102,15,110,205,102,15,112,201,81,252,242,15,88,193,252,242, + 15,45,192,252,242,15,17,66,252,248,255,221,66,8,217,232,222,193,219,20,36, + 221,90,252,248,139,4,36,255,139,42,59,133,233,15,131,244,248,193,224,3,3, + 133,233,248,1,129,120,253,4,239,15,132,244,72,139,40,139,64,4,137,42,137, + 66,4,252,233,244,68,248,2,131,189,233,0,15,132,244,72,137,252,233,137,213, + 137,194,232,251,1,12,137,252,234,133,192,15,133,244,1,248,72,184,237,252, + 233,244,69,248,73,255,129,252,248,239,15,130,244,55,139,42,129,122,253,4, + 239,15,133,244,55,131,189,233,0,15,133,244,55,139,106,252,248,139,133,233, + 139,114,252,252,199,66,252,252,237,137,66,252,248,255,15,87,192,252,242,15, + 17,66,8,255,217,252,238,221,90,8,255,184,237,252,233,244,69,248,74,129,252, + 248,239,15,130,244,55,141,74,8,131,232,1,190,237,248,1,15,182,171,233,193, + 252,237,235,131,229,1,1,252,238,252,233,244,27,248,75,129,252,248,239,15, + 130,244,55,129,122,253,12,239,15,133,244,55,255,139,106,4,137,106,12,199, + 66,4,237,139,42,139,114,8,137,106,8,137,50,141,74,16,131,232,2,190,237,252, + 233,244,1,248,76,129,252,248,239,15,130,244,55,139,42,139,114,252,252,137, + 116,36,24,137,44,36,129,122,253,4,239,15,133,244,55,131,189,233,0,15,133, + 244,55,128,189,233,235,15,135,244,55,139,141,233,15,132,244,247,255,59,141, + 233,15,132,244,55,248,1,141,116,193,252,240,59,181,233,15,135,244,55,137, + 181,233,139,108,36,48,137,149,233,131,194,8,137,149,233,141,108,194,232,41, + 252,245,57,206,15,132,244,249,248,2,139,68,46,4,137,70,252,252,139,4,46,137, + 70,252,248,131,252,238,8,57,206,15,133,244,2,248,3,137,76,36,4,49,201,137, + 76,36,12,137,76,36,8,232,244,24,199,131,233,237,255,139,108,36,48,139,52, + 36,139,149,233,129,252,248,239,15,135,244,254,248,4,139,142,233,139,190,233, 137,142,233,137,252,254,41,206,15,132,244,252,141,4,50,193,252,238,3,59,133, 233,15,135,244,255,137,213,41,205,248,5,139,1,137,4,41,139,65,4,137,68,41, 4,131,193,8,57,252,249,15,133,244,5,248,6,141,70,2,199,66,252,252,237,248, @@ -1173,394 +1174,395 @@ static void build_subroutines(BuildCtx *ctx, int cmov, int sse) dasm_put(Dst, 2164, 1+1, LJ_TSTR, LJ_TSTR, LJ_TISNUM, DISPATCH_GL(gcroot[GCROOT_BASEMT_NUM]), DISPATCH_GL(gc.total), DISPATCH_GL(gc.threshold)); dasm_put(Dst, 2230, Dt1(->base), Dt1(->base), 1+1, LJ_TTAB, Dt1(->base)); dasm_put(Dst, 2297, Dt1(->top), Dt1(->base), 1+2, LJ_TNIL, LJ_TNIL, 1+1); - dasm_put(Dst, 2402, LJ_TTAB, Dt8(->upvalue[0]), LJ_TFUNC, LJ_TNIL, 1+3, 1+1, LJ_TTAB, LJ_TISNUM); + dasm_put(Dst, 2402, LJ_TTAB, Dt6(->metatable), Dt8(->upvalue[0]), LJ_TFUNC, LJ_TNIL, 1+3, 1+1, LJ_TTAB, LJ_TISNUM); + dasm_put(Dst, 2476); if (sse) { - dasm_put(Dst, 2474); + dasm_put(Dst, 2485); } else { - dasm_put(Dst, 2513); + dasm_put(Dst, 2524); } - dasm_put(Dst, 2531, Dt6(->asize), Dt6(->array), LJ_TNIL, Dt6(->hmask), 1+0); - dasm_put(Dst, 2612, 1+1, LJ_TTAB, Dt8(->upvalue[0]), LJ_TFUNC); + dasm_put(Dst, 2542, Dt6(->asize), Dt6(->array), LJ_TNIL, Dt6(->hmask), 1+0); + dasm_put(Dst, 2623, 1+1, LJ_TTAB, Dt6(->metatable), Dt8(->upvalue[0]), LJ_TFUNC); if (sse) { - dasm_put(Dst, 2650); + dasm_put(Dst, 2671); } else { - dasm_put(Dst, 2660); + dasm_put(Dst, 2681); } - dasm_put(Dst, 2667, 1+3, 1+1, 8+FRAME_PCALL, DISPATCH_GL(hookmask), HOOK_ACTIVE_SHIFT, 2+1, LJ_TFUNC); - dasm_put(Dst, 2731, LJ_TFUNC, 16+FRAME_PCALL, 1+1, LJ_TTHREAD, Dt1(->cframe), Dt1(->status), LUA_YIELD, Dt1(->top)); - dasm_put(Dst, 2819, Dt1(->base), Dt1(->maxstack), Dt1(->top), Dt1(->base), Dt1(->top), DISPATCH_GL(vmstate), ~LJ_VMST_INTERP); - dasm_put(Dst, 2920, Dt1(->base), LUA_YIELD, Dt1(->base), Dt1(->top), Dt1(->top), Dt1(->maxstack), LJ_TTRUE, FRAME_TYPE); - dasm_put(Dst, 3034, LJ_TFALSE, Dt1(->top), Dt1(->top), 1+2, Dt1(->top), Dt1(->base), Dt8(->upvalue[0].gcr), Dt1(->cframe)); - dasm_put(Dst, 3132, Dt1(->status), LUA_YIELD, Dt1(->top), Dt1(->base), Dt1(->maxstack), Dt1(->top), Dt1(->base), Dt1(->top)); - dasm_put(Dst, 3198, DISPATCH_GL(vmstate), ~LJ_VMST_INTERP, Dt1(->base), LUA_YIELD, Dt1(->base), Dt1(->top), Dt1(->top), Dt1(->maxstack)); - dasm_put(Dst, 3299, FRAME_TYPE, Dt1(->top), Dt1(->base), Dt1(->cframe), CFRAME_RESUME); - dasm_put(Dst, 3412, Dt1(->base), Dt1(->top), Dt1(->cframe), LUA_YIELD, Dt1(->status)); + dasm_put(Dst, 2688, 1+3, 1+1, 8+FRAME_PCALL, DISPATCH_GL(hookmask), HOOK_ACTIVE_SHIFT, 2+1, LJ_TFUNC); + dasm_put(Dst, 2752, LJ_TFUNC, 16+FRAME_PCALL, 1+1, LJ_TTHREAD, Dt1(->cframe), Dt1(->status), LUA_YIELD, Dt1(->top)); + dasm_put(Dst, 2840, Dt1(->base), Dt1(->maxstack), Dt1(->top), Dt1(->base), Dt1(->top), DISPATCH_GL(vmstate), ~LJ_VMST_INTERP); + dasm_put(Dst, 2941, Dt1(->base), LUA_YIELD, Dt1(->base), Dt1(->top), Dt1(->top), Dt1(->maxstack), LJ_TTRUE, FRAME_TYPE); + dasm_put(Dst, 3055, LJ_TFALSE, Dt1(->top), Dt1(->top), 1+2, Dt1(->top), Dt1(->base), Dt8(->upvalue[0].gcr), Dt1(->cframe)); + dasm_put(Dst, 3153, Dt1(->status), LUA_YIELD, Dt1(->top), Dt1(->base), Dt1(->maxstack), Dt1(->top), Dt1(->base), Dt1(->top)); + dasm_put(Dst, 3219, DISPATCH_GL(vmstate), ~LJ_VMST_INTERP, Dt1(->base), LUA_YIELD, Dt1(->base), Dt1(->top), Dt1(->top), Dt1(->maxstack)); + dasm_put(Dst, 3320, FRAME_TYPE, Dt1(->top), Dt1(->base), Dt1(->cframe), CFRAME_RESUME); + dasm_put(Dst, 3433, Dt1(->base), Dt1(->top), Dt1(->cframe), LUA_YIELD, Dt1(->status)); if (sse) { - dasm_put(Dst, 3438, 1+1, LJ_TISNUM); + dasm_put(Dst, 3459, 1+1, LJ_TISNUM); } else { - dasm_put(Dst, 3507, 1+1, LJ_TISNUM); + dasm_put(Dst, 3528, 1+1, LJ_TISNUM); } - dasm_put(Dst, 3543, 1+1, FRAME_TYPE, LJ_TNIL); + dasm_put(Dst, 3564, 1+1, FRAME_TYPE, LJ_TNIL); if (sse) { - dasm_put(Dst, 3633, 1+1, LJ_TISNUM, 1+1, LJ_TISNUM); - dasm_put(Dst, 3695, 1+1, LJ_TISNUM); + dasm_put(Dst, 3654, 1+1, LJ_TISNUM, 1+1, LJ_TISNUM); + dasm_put(Dst, 3716, 1+1, LJ_TISNUM); } else { - dasm_put(Dst, 3725, 1+1, LJ_TISNUM, 1+1, LJ_TISNUM); - dasm_put(Dst, 3784, 1+1, LJ_TISNUM); + dasm_put(Dst, 3746, 1+1, LJ_TISNUM, 1+1, LJ_TISNUM); + dasm_put(Dst, 3805, 1+1, LJ_TISNUM); } - dasm_put(Dst, 3811, 1+1, LJ_TISNUM, 1+1, LJ_TISNUM, 1+1); - dasm_put(Dst, 3880, LJ_TISNUM, 1+1, LJ_TISNUM, 1+1); - dasm_put(Dst, 3937, LJ_TISNUM, 1+1, LJ_TISNUM, 1+1); - dasm_put(Dst, 4000, LJ_TISNUM, 1+1, LJ_TISNUM, 1+1, LJ_TISNUM); - dasm_put(Dst, 4090); + dasm_put(Dst, 3832, 1+1, LJ_TISNUM, 1+1, LJ_TISNUM, 1+1); + dasm_put(Dst, 3901, LJ_TISNUM, 1+1, LJ_TISNUM, 1+1); + dasm_put(Dst, 3958, LJ_TISNUM, 1+1, LJ_TISNUM, 1+1); + dasm_put(Dst, 4021, LJ_TISNUM, 1+1, LJ_TISNUM, 1+1, LJ_TISNUM); + dasm_put(Dst, 4111); if (sse) { - dasm_put(Dst, 4102, 1+1, LJ_TISNUM); + dasm_put(Dst, 4123, 1+1, LJ_TISNUM); } else { - dasm_put(Dst, 4133, 1+1, LJ_TISNUM); + dasm_put(Dst, 4154, 1+1, LJ_TISNUM); } - dasm_put(Dst, 4158); + dasm_put(Dst, 4179); if (sse) { - dasm_put(Dst, 4172, 1+1, LJ_TISNUM); + dasm_put(Dst, 4193, 1+1, LJ_TISNUM); } else { - dasm_put(Dst, 4203, 1+1, LJ_TISNUM); + dasm_put(Dst, 4224, 1+1, LJ_TISNUM); } - dasm_put(Dst, 4228); + dasm_put(Dst, 4249); if (sse) { - dasm_put(Dst, 4242, 1+1, LJ_TISNUM); + dasm_put(Dst, 4263, 1+1, LJ_TISNUM); } else { - dasm_put(Dst, 4273, 1+1, LJ_TISNUM); + dasm_put(Dst, 4294, 1+1, LJ_TISNUM); } - dasm_put(Dst, 4298); + dasm_put(Dst, 4319); if (sse) { - dasm_put(Dst, 4314, 1+1, LJ_TISNUM, Dt8(->upvalue[0])); + dasm_put(Dst, 4335, 1+1, LJ_TISNUM, Dt8(->upvalue[0])); } else { - dasm_put(Dst, 4353, 1+1, LJ_TISNUM, Dt8(->upvalue[0])); + dasm_put(Dst, 4374, 1+1, LJ_TISNUM, Dt8(->upvalue[0])); } - dasm_put(Dst, 4386, 2+1, LJ_TISNUM, LJ_TISNUM, 2+1, LJ_TISNUM, LJ_TISNUM); - dasm_put(Dst, 4451, 1+1, LJ_TISNUM); + dasm_put(Dst, 4407, 2+1, LJ_TISNUM, LJ_TISNUM, 2+1, LJ_TISNUM, LJ_TISNUM); + dasm_put(Dst, 4472, 1+1, LJ_TISNUM); if (sse) { - dasm_put(Dst, 4550); + dasm_put(Dst, 4571); } else { - dasm_put(Dst, 4556); + dasm_put(Dst, 4577); } - dasm_put(Dst, 4565); + dasm_put(Dst, 4586); if (sse) { - dasm_put(Dst, 4590); + dasm_put(Dst, 4611); } else { - dasm_put(Dst, 4596); + dasm_put(Dst, 4617); } - dasm_put(Dst, 4599, 1+2); + dasm_put(Dst, 4620, 1+2); if (sse) { - dasm_put(Dst, 4608); + dasm_put(Dst, 4629); } else { - dasm_put(Dst, 4616); + dasm_put(Dst, 4637); } - dasm_put(Dst, 4624); + dasm_put(Dst, 4645); if (sse) { - dasm_put(Dst, 4627); + dasm_put(Dst, 4648); } else { - dasm_put(Dst, 4659); + dasm_put(Dst, 4680); } - dasm_put(Dst, 4678); + dasm_put(Dst, 4699); if (sse) { - dasm_put(Dst, 4694, 1+1, LJ_TISNUM); + dasm_put(Dst, 4715, 1+1, LJ_TISNUM); } else { - dasm_put(Dst, 4719, 1+1, LJ_TISNUM); + dasm_put(Dst, 4740, 1+1, LJ_TISNUM); } - dasm_put(Dst, 4741); + dasm_put(Dst, 4762); if (sse) { - dasm_put(Dst, 4763); + dasm_put(Dst, 4784); } else { - dasm_put(Dst, 4789); + dasm_put(Dst, 4810); } - dasm_put(Dst, 4806, 1+2); + dasm_put(Dst, 4827, 1+2); if (sse) { - dasm_put(Dst, 4846); + dasm_put(Dst, 4867); } else { - dasm_put(Dst, 4854); + dasm_put(Dst, 4875); } - dasm_put(Dst, 4864, 2+1, LJ_TISNUM, LJ_TISNUM); + dasm_put(Dst, 4885, 2+1, LJ_TISNUM, LJ_TISNUM); if (sse) { - dasm_put(Dst, 4916, 2+1, LJ_TISNUM, LJ_TISNUM); + dasm_put(Dst, 4937, 2+1, LJ_TISNUM, LJ_TISNUM); } else { - dasm_put(Dst, 4963, 2+1, LJ_TISNUM, LJ_TISNUM); + dasm_put(Dst, 4984, 2+1, LJ_TISNUM, LJ_TISNUM); } if (sse) { - dasm_put(Dst, 5004, 1+1, LJ_TISNUM, LJ_TISNUM); + dasm_put(Dst, 5025, 1+1, LJ_TISNUM, LJ_TISNUM); } else { - dasm_put(Dst, 5075, 1+1, LJ_TISNUM, LJ_TISNUM); + dasm_put(Dst, 5096, 1+1, LJ_TISNUM, LJ_TISNUM); if (cmov) { - dasm_put(Dst, 5128); + dasm_put(Dst, 5149); } else { - dasm_put(Dst, 5136); + dasm_put(Dst, 5157); } - dasm_put(Dst, 5067); + dasm_put(Dst, 5088); } if (sse) { - dasm_put(Dst, 5157, 1+1, LJ_TISNUM, LJ_TISNUM); + dasm_put(Dst, 5178, 1+1, LJ_TISNUM, LJ_TISNUM); } else { - dasm_put(Dst, 5228, 1+1, LJ_TISNUM, LJ_TISNUM); + dasm_put(Dst, 5249, 1+1, LJ_TISNUM, LJ_TISNUM); if (cmov) { - dasm_put(Dst, 5281); + dasm_put(Dst, 5302); } else { - dasm_put(Dst, 5289); + dasm_put(Dst, 5310); } - dasm_put(Dst, 5067); + dasm_put(Dst, 5088); } if (!sse) { - dasm_put(Dst, 5310); + dasm_put(Dst, 5331); } - dasm_put(Dst, 5319, 1+1, LJ_TSTR); + dasm_put(Dst, 5340, 1+1, LJ_TSTR); if (sse) { - dasm_put(Dst, 5341, Dt5(->len)); + dasm_put(Dst, 5362, Dt5(->len)); } else { - dasm_put(Dst, 5352, Dt5(->len)); + dasm_put(Dst, 5373, Dt5(->len)); } - dasm_put(Dst, 5360, 1+1, LJ_TSTR, Dt5(->len), Dt5([1])); + dasm_put(Dst, 5381, 1+1, LJ_TSTR, Dt5(->len), Dt5([1])); if (sse) { - dasm_put(Dst, 5398); + dasm_put(Dst, 5419); } else { - dasm_put(Dst, 5408); + dasm_put(Dst, 5429); } - dasm_put(Dst, 5421, DISPATCH_GL(gc.total), DISPATCH_GL(gc.threshold), 1+1, LJ_TISNUM); + dasm_put(Dst, 5442, DISPATCH_GL(gc.total), DISPATCH_GL(gc.threshold), 1+1, LJ_TISNUM); if (sse) { - dasm_put(Dst, 5456); + dasm_put(Dst, 5477); } else { - dasm_put(Dst, 5478); + dasm_put(Dst, 5499); } - dasm_put(Dst, 5498, Dt1(->base), Dt1(->base), LJ_TSTR, DISPATCH_GL(gc.total), DISPATCH_GL(gc.threshold), 1+2, LJ_TISNUM); + dasm_put(Dst, 5519, Dt1(->base), Dt1(->base), LJ_TSTR, DISPATCH_GL(gc.total), DISPATCH_GL(gc.threshold), 1+2, LJ_TISNUM); dasm_put(Dst, 2142); if (sse) { - dasm_put(Dst, 5601); + dasm_put(Dst, 5622); } else { - dasm_put(Dst, 5612); + dasm_put(Dst, 5633); } - dasm_put(Dst, 5620, LJ_TSTR, LJ_TISNUM, Dt5(->len)); + dasm_put(Dst, 5641, LJ_TSTR, LJ_TISNUM, Dt5(->len)); if (sse) { - dasm_put(Dst, 5650); + dasm_put(Dst, 5671); } else { - dasm_put(Dst, 5657); + dasm_put(Dst, 5678); } - dasm_put(Dst, 5669, sizeof(GCstr)-1); - dasm_put(Dst, 5744, 2+1, DISPATCH_GL(gc.total), DISPATCH_GL(gc.threshold)); - dasm_put(Dst, 5803, LJ_TSTR, LJ_TISNUM); + dasm_put(Dst, 5690, sizeof(GCstr)-1); + dasm_put(Dst, 5765, 2+1, DISPATCH_GL(gc.total), DISPATCH_GL(gc.threshold)); + dasm_put(Dst, 5824, LJ_TSTR, LJ_TISNUM); if (sse) { - dasm_put(Dst, 5824); + dasm_put(Dst, 5845); } else { - dasm_put(Dst, 5831); + dasm_put(Dst, 5852); } - dasm_put(Dst, 5843, Dt5(->len), DISPATCH_GL(tmpbuf.sz), Dt5([1]), DISPATCH_GL(tmpbuf.buf), DISPATCH_GL(tmpbuf.buf), 1+1); - dasm_put(Dst, 5908, DISPATCH_GL(gc.total), DISPATCH_GL(gc.threshold), LJ_TSTR, Dt5(->len), DISPATCH_GL(tmpbuf.sz), sizeof(GCstr), DISPATCH_GL(tmpbuf.buf)); - dasm_put(Dst, 5971, 1+1, DISPATCH_GL(gc.total), DISPATCH_GL(gc.threshold), LJ_TSTR, Dt5(->len), DISPATCH_GL(tmpbuf.sz)); - dasm_put(Dst, 6042, sizeof(GCstr), DISPATCH_GL(tmpbuf.buf), 1+1); - dasm_put(Dst, 6127, DISPATCH_GL(gc.total), DISPATCH_GL(gc.threshold), LJ_TSTR, Dt5(->len), DISPATCH_GL(tmpbuf.sz), sizeof(GCstr), DISPATCH_GL(tmpbuf.buf)); - dasm_put(Dst, 6197, 1+1, LJ_TTAB); + dasm_put(Dst, 5864, Dt5(->len), DISPATCH_GL(tmpbuf.sz), Dt5([1]), DISPATCH_GL(tmpbuf.buf), DISPATCH_GL(tmpbuf.buf), 1+1); + dasm_put(Dst, 5929, DISPATCH_GL(gc.total), DISPATCH_GL(gc.threshold), LJ_TSTR, Dt5(->len), DISPATCH_GL(tmpbuf.sz), sizeof(GCstr), DISPATCH_GL(tmpbuf.buf)); + dasm_put(Dst, 5992, 1+1, DISPATCH_GL(gc.total), DISPATCH_GL(gc.threshold), LJ_TSTR, Dt5(->len), DISPATCH_GL(tmpbuf.sz)); + dasm_put(Dst, 6063, sizeof(GCstr), DISPATCH_GL(tmpbuf.buf), 1+1); + dasm_put(Dst, 6148, DISPATCH_GL(gc.total), DISPATCH_GL(gc.threshold), LJ_TSTR, Dt5(->len), DISPATCH_GL(tmpbuf.sz), sizeof(GCstr), DISPATCH_GL(tmpbuf.buf)); + dasm_put(Dst, 6218, 1+1, LJ_TTAB); if (sse) { - dasm_put(Dst, 6265); + dasm_put(Dst, 6286); } else { - dasm_put(Dst, 6275); + dasm_put(Dst, 6296); } if (sse) { - dasm_put(Dst, 6286, 1+1, LJ_TISNUM); + dasm_put(Dst, 6307, 1+1, LJ_TISNUM); } else { - dasm_put(Dst, 6343, 1+1, LJ_TISNUM); + dasm_put(Dst, 6364, 1+1, LJ_TISNUM); } if (sse) { - dasm_put(Dst, 6387, 1+1, LJ_TISNUM); + dasm_put(Dst, 6408, 1+1, LJ_TISNUM); } else { - dasm_put(Dst, 6435, 1+1, LJ_TISNUM); + dasm_put(Dst, 6456, 1+1, LJ_TISNUM); } - dasm_put(Dst, 6475, LJ_TISNUM); + dasm_put(Dst, 6496, LJ_TISNUM); if (sse) { - dasm_put(Dst, 6502); + dasm_put(Dst, 6523); } else { - dasm_put(Dst, 6519); + dasm_put(Dst, 6540); } - dasm_put(Dst, 6532); + dasm_put(Dst, 6553); if (sse) { - dasm_put(Dst, 6540, 1+1, LJ_TISNUM); + dasm_put(Dst, 6561, 1+1, LJ_TISNUM); } else { - dasm_put(Dst, 6588, 1+1, LJ_TISNUM); + dasm_put(Dst, 6609, 1+1, LJ_TISNUM); } - dasm_put(Dst, 6475, LJ_TISNUM); + dasm_put(Dst, 6496, LJ_TISNUM); if (sse) { - dasm_put(Dst, 6628); + dasm_put(Dst, 6649); } else { - dasm_put(Dst, 6645); + dasm_put(Dst, 6666); } - dasm_put(Dst, 6532); + dasm_put(Dst, 6553); if (sse) { - dasm_put(Dst, 6658, 1+1, LJ_TISNUM); + dasm_put(Dst, 6679, 1+1, LJ_TISNUM); } else { - dasm_put(Dst, 6706, 1+1, LJ_TISNUM); + dasm_put(Dst, 6727, 1+1, LJ_TISNUM); } - dasm_put(Dst, 6475, LJ_TISNUM); + dasm_put(Dst, 6496, LJ_TISNUM); if (sse) { - dasm_put(Dst, 6746); + dasm_put(Dst, 6767); } else { - dasm_put(Dst, 6763); + dasm_put(Dst, 6784); } - dasm_put(Dst, 6532); + dasm_put(Dst, 6553); if (sse) { - dasm_put(Dst, 6776, 1+1, LJ_TISNUM); + dasm_put(Dst, 6797, 1+1, LJ_TISNUM); } else { - dasm_put(Dst, 6824, 1+1, LJ_TISNUM); + dasm_put(Dst, 6845, 1+1, LJ_TISNUM); } - dasm_put(Dst, 6864); + dasm_put(Dst, 6885); if (sse) { - dasm_put(Dst, 6871, 1+1, LJ_TISNUM); + dasm_put(Dst, 6892, 1+1, LJ_TISNUM); } else { - dasm_put(Dst, 6919, 1+1, LJ_TISNUM); + dasm_put(Dst, 6940, 1+1, LJ_TISNUM); } - dasm_put(Dst, 6959); + dasm_put(Dst, 6980); if (sse) { - dasm_put(Dst, 6963); + dasm_put(Dst, 6984); } else { - dasm_put(Dst, 6975); + dasm_put(Dst, 6996); } - dasm_put(Dst, 6988); + dasm_put(Dst, 7009); if (sse) { - dasm_put(Dst, 6999, 2+1, LJ_TISNUM, LJ_TISNUM); + dasm_put(Dst, 7020, 2+1, LJ_TISNUM, LJ_TISNUM); } else { - dasm_put(Dst, 7073, 2+1, LJ_TISNUM, LJ_TISNUM); + dasm_put(Dst, 7094, 2+1, LJ_TISNUM, LJ_TISNUM); } - dasm_put(Dst, 7139); + dasm_put(Dst, 7160); if (sse) { - dasm_put(Dst, 7148, 2+1, LJ_TISNUM, LJ_TISNUM); + dasm_put(Dst, 7169, 2+1, LJ_TISNUM, LJ_TISNUM); } else { - dasm_put(Dst, 7222, 2+1, LJ_TISNUM, LJ_TISNUM); + dasm_put(Dst, 7243, 2+1, LJ_TISNUM, LJ_TISNUM); } - dasm_put(Dst, 7288); + dasm_put(Dst, 7309); if (sse) { - dasm_put(Dst, 7298, 2+1, LJ_TISNUM, LJ_TISNUM); + dasm_put(Dst, 7319, 2+1, LJ_TISNUM, LJ_TISNUM); } else { - dasm_put(Dst, 7372, 2+1, LJ_TISNUM, LJ_TISNUM); + dasm_put(Dst, 7393, 2+1, LJ_TISNUM, LJ_TISNUM); } - dasm_put(Dst, 7438); + dasm_put(Dst, 7459); if (sse) { - dasm_put(Dst, 7448, 2+1, LJ_TISNUM, LJ_TISNUM); + dasm_put(Dst, 7469, 2+1, LJ_TISNUM, LJ_TISNUM); } else { - dasm_put(Dst, 7522, 2+1, LJ_TISNUM, LJ_TISNUM); + dasm_put(Dst, 7543, 2+1, LJ_TISNUM, LJ_TISNUM); } - dasm_put(Dst, 7588); + dasm_put(Dst, 7609); if (sse) { - dasm_put(Dst, 7597, 2+1, LJ_TISNUM, LJ_TISNUM); + dasm_put(Dst, 7618, 2+1, LJ_TISNUM, LJ_TISNUM); } else { - dasm_put(Dst, 7671, 2+1, LJ_TISNUM, LJ_TISNUM); + dasm_put(Dst, 7692, 2+1, LJ_TISNUM, LJ_TISNUM); } - dasm_put(Dst, 7737, 1+2, 1+1, Dt1(->base), 8*LUA_MINSTACK, Dt1(->top), Dt1(->maxstack), Dt8(->f), Dt1(->base)); - dasm_put(Dst, 7815, Dt1(->top), Dt7(->pc), FRAME_TYPE, LUA_MINSTACK, Dt1(->base), Dt1(->base)); - dasm_put(Dst, 7939, Dt1(->top), Dt1(->base), Dt1(->top)); + dasm_put(Dst, 7758, 1+2, 1+1, Dt1(->base), 8*LUA_MINSTACK, Dt1(->top), Dt1(->maxstack), Dt8(->f), Dt1(->base)); + dasm_put(Dst, 7836, Dt1(->top), Dt7(->pc), FRAME_TYPE, LUA_MINSTACK, Dt1(->base), Dt1(->base)); + dasm_put(Dst, 7960, Dt1(->top), Dt1(->base), Dt1(->top)); #if LJ_HASJIT - dasm_put(Dst, 7977, DISPATCH_GL(hookmask), HOOK_VMEVENT, HOOK_ACTIVE, LUA_MASKLINE|LUA_MASKCOUNT, DISPATCH_GL(hookcount)); + dasm_put(Dst, 7998, DISPATCH_GL(hookmask), HOOK_VMEVENT, HOOK_ACTIVE, LUA_MASKLINE|LUA_MASKCOUNT, DISPATCH_GL(hookcount)); #endif - dasm_put(Dst, 8008, DISPATCH_GL(hookmask), HOOK_ACTIVE, DISPATCH_GL(hookmask), HOOK_ACTIVE, LUA_MASKLINE|LUA_MASKCOUNT, DISPATCH_GL(hookcount), LUA_MASKLINE); - dasm_put(Dst, 8059, Dt1(->base), Dt1(->base), GG_DISP2STATIC); + dasm_put(Dst, 8029, DISPATCH_GL(hookmask), HOOK_ACTIVE, DISPATCH_GL(hookmask), HOOK_ACTIVE, LUA_MASKLINE|LUA_MASKCOUNT, DISPATCH_GL(hookcount), LUA_MASKLINE); + dasm_put(Dst, 8080, Dt1(->base), Dt1(->base), GG_DISP2STATIC); #if LJ_HASJIT - dasm_put(Dst, 8125, Dt7(->pc), PC2PROTO(framesize), Dt1(->base), Dt1(->top), GG_DISP2J, DISPATCH_J(L)); + dasm_put(Dst, 8146, Dt7(->pc), PC2PROTO(framesize), Dt1(->base), Dt1(->top), GG_DISP2J, DISPATCH_J(L)); #endif - dasm_put(Dst, 8171); + dasm_put(Dst, 8192); #if LJ_HASJIT - dasm_put(Dst, 8003); + dasm_put(Dst, 8024); #endif - dasm_put(Dst, 8178); + dasm_put(Dst, 8199); #if LJ_HASJIT - dasm_put(Dst, 8181); + dasm_put(Dst, 8202); #endif - dasm_put(Dst, 8191, Dt1(->base), Dt1(->top)); + dasm_put(Dst, 8212, Dt1(->base), Dt1(->top)); #if LJ_HASJIT - dasm_put(Dst, 8225); + dasm_put(Dst, 8246); #endif - dasm_put(Dst, 8230, Dt1(->base), Dt1(->top)); + dasm_put(Dst, 8251, Dt1(->base), Dt1(->top)); #if LJ_HASJIT - dasm_put(Dst, 8259, DISPATCH_GL(vmstate), DISPATCH_GL(vmstate), ~LJ_VMST_EXIT, DISPATCH_J(exitno), DISPATCH_J(parent), 8*8+16, DISPATCH_GL(jit_L), DISPATCH_GL(jit_base), DISPATCH_J(L), DISPATCH_GL(jit_L), Dt1(->base), GG_DISP2J, Dt1(->cframe), CFRAME_RAWMASK, CFRAME_OFS_L, Dt1(->base), CFRAME_OFS_PC); + dasm_put(Dst, 8280, DISPATCH_GL(vmstate), DISPATCH_GL(vmstate), ~LJ_VMST_EXIT, DISPATCH_J(exitno), DISPATCH_J(parent), 8*8+16, DISPATCH_GL(jit_L), DISPATCH_GL(jit_base), DISPATCH_J(L), DISPATCH_GL(jit_L), Dt1(->base), GG_DISP2J, Dt1(->cframe), CFRAME_RAWMASK, CFRAME_OFS_L, Dt1(->base), CFRAME_OFS_PC); #endif - dasm_put(Dst, 8402); + dasm_put(Dst, 8423); #if LJ_HASJIT - dasm_put(Dst, 8405, Dt7(->pc), PC2PROTO(k), DISPATCH_GL(jit_L), DISPATCH_GL(vmstate), ~LJ_VMST_INTERP, BC_FUNCF); + dasm_put(Dst, 8426, Dt7(->pc), PC2PROTO(k), DISPATCH_GL(jit_L), DISPATCH_GL(vmstate), ~LJ_VMST_INTERP, BC_FUNCF); #endif - dasm_put(Dst, 8483); + dasm_put(Dst, 8504); if (!sse) { - dasm_put(Dst, 8486); + dasm_put(Dst, 8507); } - dasm_put(Dst, 8531); + dasm_put(Dst, 8552); if (!sse) { - dasm_put(Dst, 8633); + dasm_put(Dst, 8654); } - dasm_put(Dst, 8678); + dasm_put(Dst, 8699); if (!sse) { - dasm_put(Dst, 8780); + dasm_put(Dst, 8801); } - dasm_put(Dst, 8819); + dasm_put(Dst, 8840); if (sse) { - dasm_put(Dst, 8924); + dasm_put(Dst, 8945); } else { - dasm_put(Dst, 9054); + dasm_put(Dst, 9075); } - dasm_put(Dst, 9101); + dasm_put(Dst, 9122); if (!sse) { - dasm_put(Dst, 9175); + dasm_put(Dst, 9196); if (cmov) { - dasm_put(Dst, 9186); + dasm_put(Dst, 9207); } else { - dasm_put(Dst, 9190); + dasm_put(Dst, 9211); } - dasm_put(Dst, 9197); - dasm_put(Dst, 9271); - dasm_put(Dst, 9371); + dasm_put(Dst, 9218); + dasm_put(Dst, 9292); + dasm_put(Dst, 9392); if (cmov) { - dasm_put(Dst, 9374); + dasm_put(Dst, 9395); } else { - dasm_put(Dst, 9378); + dasm_put(Dst, 9399); } - dasm_put(Dst, 9385); + dasm_put(Dst, 9406); if (cmov) { - dasm_put(Dst, 9186); + dasm_put(Dst, 9207); } else { - dasm_put(Dst, 9190); + dasm_put(Dst, 9211); } - dasm_put(Dst, 9403); + dasm_put(Dst, 9424); } else { - dasm_put(Dst, 9482); + dasm_put(Dst, 9503); } - dasm_put(Dst, 9485); - dasm_put(Dst, 9570); - dasm_put(Dst, 9701); - dasm_put(Dst, 9900); + dasm_put(Dst, 9506); + dasm_put(Dst, 9591); + dasm_put(Dst, 9722); + dasm_put(Dst, 9921); #if LJ_HASJIT if (sse) { - dasm_put(Dst, 9923); - dasm_put(Dst, 9980); - dasm_put(Dst, 10071); + dasm_put(Dst, 9944); + dasm_put(Dst, 10001); + dasm_put(Dst, 10092); } else { - dasm_put(Dst, 10113); - dasm_put(Dst, 10205); + dasm_put(Dst, 10134); + dasm_put(Dst, 10226); } - dasm_put(Dst, 10251); + dasm_put(Dst, 10272); #endif - dasm_put(Dst, 10255); + dasm_put(Dst, 10276); if (sse) { - dasm_put(Dst, 10258); - dasm_put(Dst, 10363); - dasm_put(Dst, 10446); + dasm_put(Dst, 10279); + dasm_put(Dst, 10384); + dasm_put(Dst, 10467); } else { - dasm_put(Dst, 10518); - dasm_put(Dst, 10601); + dasm_put(Dst, 10539); + dasm_put(Dst, 10622); if (cmov) { - dasm_put(Dst, 10656); + dasm_put(Dst, 10677); } else { - dasm_put(Dst, 10675); + dasm_put(Dst, 10696); } - dasm_put(Dst, 10251); + dasm_put(Dst, 10272); } - dasm_put(Dst, 10716); + dasm_put(Dst, 10737); } /* Generate the code for a single instruction. */ static void build_ins(BuildCtx *ctx, BCOp op, int defop, int cmov, int sse) { int vk = 0; - dasm_put(Dst, 10770, defop); + dasm_put(Dst, 10791, defop); switch (op) { @@ -1569,634 +1571,634 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop, int cmov, int sse) /* 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, 10772, LJ_TISNUM, LJ_TISNUM); + dasm_put(Dst, 10793, LJ_TISNUM, LJ_TISNUM); if (sse) { - dasm_put(Dst, 10793); + dasm_put(Dst, 10814); } else { - dasm_put(Dst, 10808); + dasm_put(Dst, 10829); if (cmov) { - dasm_put(Dst, 10818); + dasm_put(Dst, 10839); } else { - dasm_put(Dst, 10824); + dasm_put(Dst, 10845); } } switch (op) { case BC_ISLT: - dasm_put(Dst, 10831); + dasm_put(Dst, 10852); break; case BC_ISGE: - dasm_put(Dst, 10066); + dasm_put(Dst, 10087); break; case BC_ISLE: - dasm_put(Dst, 6192); + dasm_put(Dst, 6213); break; case BC_ISGT: - dasm_put(Dst, 10836); + dasm_put(Dst, 10857); break; default: break; /* Shut up GCC. */ } - dasm_put(Dst, 10841, -BCBIAS_J*4); + dasm_put(Dst, 10862, -BCBIAS_J*4); break; case BC_ISEQV: case BC_ISNEV: vk = op == BC_ISEQV; - dasm_put(Dst, 10874, LJ_TISNUM, LJ_TISNUM); + dasm_put(Dst, 10895, LJ_TISNUM, LJ_TISNUM); if (sse) { - dasm_put(Dst, 10900); + dasm_put(Dst, 10921); } else { - dasm_put(Dst, 10912); + dasm_put(Dst, 10933); if (cmov) { - dasm_put(Dst, 10818); + dasm_put(Dst, 10839); } else { - dasm_put(Dst, 10824); + dasm_put(Dst, 10845); } } iseqne_fp: if (vk) { - dasm_put(Dst, 10919); + dasm_put(Dst, 10940); } else { - dasm_put(Dst, 10928); + dasm_put(Dst, 10949); } iseqne_end: if (vk) { - dasm_put(Dst, 10937, -BCBIAS_J*4); + dasm_put(Dst, 10958, -BCBIAS_J*4); } else { - dasm_put(Dst, 10952, -BCBIAS_J*4); + dasm_put(Dst, 10973, -BCBIAS_J*4); } - dasm_put(Dst, 10855); + dasm_put(Dst, 10876); if (op == BC_ISEQV || op == BC_ISNEV) { - dasm_put(Dst, 10967, LJ_TISPRI, LJ_TISTABUD, Dt6(->metatable), Dt6(->nomm), 1<metatable), Dt6(->nomm), 1<len)); + dasm_put(Dst, 11324, Dt5(->len)); } else { - dasm_put(Dst, 11321, Dt5(->len)); + dasm_put(Dst, 11342, Dt5(->len)); } - dasm_put(Dst, 11330, LJ_TTAB); + dasm_put(Dst, 11351, LJ_TTAB); if (sse) { - dasm_put(Dst, 11370); + dasm_put(Dst, 11391); } else { - dasm_put(Dst, 11379); + dasm_put(Dst, 11400); } - dasm_put(Dst, 11389); + dasm_put(Dst, 11410); break; /* -- Binary ops -------------------------------------------------------- */ case BC_ADDVN: case BC_ADDNV: case BC_ADDVV: - dasm_put(Dst, 11399); + dasm_put(Dst, 11420); vk = ((int)op - BC_ADDVN) / (BC_ADDNV-BC_ADDVN); switch (vk) { case 0: - dasm_put(Dst, 11407, LJ_TISNUM); + dasm_put(Dst, 11428, LJ_TISNUM); if (sse) { - dasm_put(Dst, 11419); + dasm_put(Dst, 11440); } else { - dasm_put(Dst, 11433); + dasm_put(Dst, 11454); } break; case 1: - dasm_put(Dst, 11441, LJ_TISNUM); + dasm_put(Dst, 11462, LJ_TISNUM); if (sse) { - dasm_put(Dst, 11453); + dasm_put(Dst, 11474); } else { - dasm_put(Dst, 11467); + dasm_put(Dst, 11488); } break; default: - dasm_put(Dst, 11475, LJ_TISNUM, LJ_TISNUM); + dasm_put(Dst, 11496, LJ_TISNUM, LJ_TISNUM); if (sse) { - dasm_put(Dst, 11497); + dasm_put(Dst, 11518); } else { - dasm_put(Dst, 11511); + dasm_put(Dst, 11532); } break; } if (sse) { - dasm_put(Dst, 11273); + dasm_put(Dst, 11294); } else { - dasm_put(Dst, 11285); + dasm_put(Dst, 11306); } - dasm_put(Dst, 10855); + dasm_put(Dst, 10876); break; case BC_SUBVN: case BC_SUBNV: case BC_SUBVV: - dasm_put(Dst, 11399); + dasm_put(Dst, 11420); vk = ((int)op - BC_ADDVN) / (BC_ADDNV-BC_ADDVN); switch (vk) { case 0: - dasm_put(Dst, 11407, LJ_TISNUM); + dasm_put(Dst, 11428, LJ_TISNUM); if (sse) { - dasm_put(Dst, 11519); + dasm_put(Dst, 11540); } else { - dasm_put(Dst, 11533); + dasm_put(Dst, 11554); } break; case 1: - dasm_put(Dst, 11441, LJ_TISNUM); + dasm_put(Dst, 11462, LJ_TISNUM); if (sse) { - dasm_put(Dst, 11541); + dasm_put(Dst, 11562); } else { - dasm_put(Dst, 11555); + dasm_put(Dst, 11576); } break; default: - dasm_put(Dst, 11475, LJ_TISNUM, LJ_TISNUM); + dasm_put(Dst, 11496, LJ_TISNUM, LJ_TISNUM); if (sse) { - dasm_put(Dst, 11563); + dasm_put(Dst, 11584); } else { - dasm_put(Dst, 11577); + dasm_put(Dst, 11598); } break; } if (sse) { - dasm_put(Dst, 11273); + dasm_put(Dst, 11294); } else { - dasm_put(Dst, 11285); + dasm_put(Dst, 11306); } - dasm_put(Dst, 10855); + dasm_put(Dst, 10876); break; case BC_MULVN: case BC_MULNV: case BC_MULVV: - dasm_put(Dst, 11399); + dasm_put(Dst, 11420); vk = ((int)op - BC_ADDVN) / (BC_ADDNV-BC_ADDVN); switch (vk) { case 0: - dasm_put(Dst, 11407, LJ_TISNUM); + dasm_put(Dst, 11428, LJ_TISNUM); if (sse) { - dasm_put(Dst, 11585); + dasm_put(Dst, 11606); } else { - dasm_put(Dst, 11599); + dasm_put(Dst, 11620); } break; case 1: - dasm_put(Dst, 11441, LJ_TISNUM); + dasm_put(Dst, 11462, LJ_TISNUM); if (sse) { - dasm_put(Dst, 11607); + dasm_put(Dst, 11628); } else { - dasm_put(Dst, 11621); + dasm_put(Dst, 11642); } break; default: - dasm_put(Dst, 11475, LJ_TISNUM, LJ_TISNUM); + dasm_put(Dst, 11496, LJ_TISNUM, LJ_TISNUM); if (sse) { - dasm_put(Dst, 11629); + dasm_put(Dst, 11650); } else { - dasm_put(Dst, 11643); + dasm_put(Dst, 11664); } break; } if (sse) { - dasm_put(Dst, 11273); + dasm_put(Dst, 11294); } else { - dasm_put(Dst, 11285); + dasm_put(Dst, 11306); } - dasm_put(Dst, 10855); + dasm_put(Dst, 10876); break; case BC_DIVVN: case BC_DIVNV: case BC_DIVVV: - dasm_put(Dst, 11399); + dasm_put(Dst, 11420); vk = ((int)op - BC_ADDVN) / (BC_ADDNV-BC_ADDVN); switch (vk) { case 0: - dasm_put(Dst, 11407, LJ_TISNUM); + dasm_put(Dst, 11428, LJ_TISNUM); if (sse) { - dasm_put(Dst, 11651); + dasm_put(Dst, 11672); } else { - dasm_put(Dst, 11665); + dasm_put(Dst, 11686); } break; case 1: - dasm_put(Dst, 11441, LJ_TISNUM); + dasm_put(Dst, 11462, LJ_TISNUM); if (sse) { - dasm_put(Dst, 11673); + dasm_put(Dst, 11694); } else { - dasm_put(Dst, 11687); + dasm_put(Dst, 11708); } break; default: - dasm_put(Dst, 11475, LJ_TISNUM, LJ_TISNUM); + dasm_put(Dst, 11496, LJ_TISNUM, LJ_TISNUM); if (sse) { - dasm_put(Dst, 11695); + dasm_put(Dst, 11716); } else { - dasm_put(Dst, 11709); + dasm_put(Dst, 11730); } break; } if (sse) { - dasm_put(Dst, 11273); + dasm_put(Dst, 11294); } else { - dasm_put(Dst, 11285); + dasm_put(Dst, 11306); } - dasm_put(Dst, 10855); + dasm_put(Dst, 10876); break; case BC_MODVN: - dasm_put(Dst, 11399); + dasm_put(Dst, 11420); vk = ((int)op - BC_ADDVN) / (BC_ADDNV-BC_ADDVN); switch (vk) { case 0: - dasm_put(Dst, 11407, LJ_TISNUM); + dasm_put(Dst, 11428, LJ_TISNUM); if (sse) { - dasm_put(Dst, 11717); + dasm_put(Dst, 11738); } else { - dasm_put(Dst, 11731); + dasm_put(Dst, 11752); } break; case 1: - dasm_put(Dst, 11441, LJ_TISNUM); + dasm_put(Dst, 11462, LJ_TISNUM); if (sse) { - dasm_put(Dst, 11739); + dasm_put(Dst, 11760); } else { - dasm_put(Dst, 11753); + dasm_put(Dst, 11774); } break; default: - dasm_put(Dst, 11475, LJ_TISNUM, LJ_TISNUM); + dasm_put(Dst, 11496, LJ_TISNUM, LJ_TISNUM); if (sse) { - dasm_put(Dst, 11761); + dasm_put(Dst, 11782); } else { - dasm_put(Dst, 11775); + dasm_put(Dst, 11796); } break; } - dasm_put(Dst, 11783); + dasm_put(Dst, 11804); if (sse) { - dasm_put(Dst, 11273); + dasm_put(Dst, 11294); } else { - dasm_put(Dst, 11285); + dasm_put(Dst, 11306); } - dasm_put(Dst, 10855); + dasm_put(Dst, 10876); break; case BC_MODNV: case BC_MODVV: - dasm_put(Dst, 11399); + dasm_put(Dst, 11420); vk = ((int)op - BC_ADDVN) / (BC_ADDNV-BC_ADDVN); switch (vk) { case 0: - dasm_put(Dst, 11407, LJ_TISNUM); + dasm_put(Dst, 11428, LJ_TISNUM); if (sse) { - dasm_put(Dst, 11717); + dasm_put(Dst, 11738); } else { - dasm_put(Dst, 11731); + dasm_put(Dst, 11752); } break; case 1: - dasm_put(Dst, 11441, LJ_TISNUM); + dasm_put(Dst, 11462, LJ_TISNUM); if (sse) { - dasm_put(Dst, 11739); + dasm_put(Dst, 11760); } else { - dasm_put(Dst, 11753); + dasm_put(Dst, 11774); } break; default: - dasm_put(Dst, 11475, LJ_TISNUM, LJ_TISNUM); + dasm_put(Dst, 11496, LJ_TISNUM, LJ_TISNUM); if (sse) { - dasm_put(Dst, 11761); + dasm_put(Dst, 11782); } else { - dasm_put(Dst, 11775); + dasm_put(Dst, 11796); } break; } - dasm_put(Dst, 11789); + dasm_put(Dst, 11810); break; case BC_POW: - dasm_put(Dst, 11399); + dasm_put(Dst, 11420); vk = ((int)op - BC_ADDVN) / (BC_ADDNV-BC_ADDVN); switch (vk) { case 0: - dasm_put(Dst, 11407, LJ_TISNUM); + dasm_put(Dst, 11428, LJ_TISNUM); if (sse) { - dasm_put(Dst, 11717); + dasm_put(Dst, 11738); } else { - dasm_put(Dst, 11731); + dasm_put(Dst, 11752); } break; case 1: - dasm_put(Dst, 11441, LJ_TISNUM); + dasm_put(Dst, 11462, LJ_TISNUM); if (sse) { - dasm_put(Dst, 11739); + dasm_put(Dst, 11760); } else { - dasm_put(Dst, 11753); + dasm_put(Dst, 11774); } break; default: - dasm_put(Dst, 11475, LJ_TISNUM, LJ_TISNUM); + dasm_put(Dst, 11496, LJ_TISNUM, LJ_TISNUM); if (sse) { - dasm_put(Dst, 11761); + dasm_put(Dst, 11782); } else { - dasm_put(Dst, 11775); + dasm_put(Dst, 11796); } break; } - dasm_put(Dst, 11794); + dasm_put(Dst, 11815); if (sse) { - dasm_put(Dst, 11273); + dasm_put(Dst, 11294); } else { - dasm_put(Dst, 11285); + dasm_put(Dst, 11306); } - dasm_put(Dst, 10855); + dasm_put(Dst, 10876); break; case BC_CAT: - dasm_put(Dst, 11798, Dt1(->base), Dt1(->base)); + dasm_put(Dst, 11819, Dt1(->base), Dt1(->base)); break; /* -- Constant ops ------------------------------------------------------ */ case BC_KSTR: - dasm_put(Dst, 11892, LJ_TSTR); + dasm_put(Dst, 11913, LJ_TSTR); break; case BC_KSHORT: if (sse) { - dasm_put(Dst, 11925); - } else { - dasm_put(Dst, 11940); - } - dasm_put(Dst, 10855); - break; - case BC_KNUM: - if (sse) { - dasm_put(Dst, 11948); + dasm_put(Dst, 11946); } else { dasm_put(Dst, 11961); } - dasm_put(Dst, 10855); + dasm_put(Dst, 10876); + break; + case BC_KNUM: + if (sse) { + dasm_put(Dst, 11969); + } else { + dasm_put(Dst, 11982); + } + dasm_put(Dst, 10876); break; case BC_KPRI: - dasm_put(Dst, 11968); + dasm_put(Dst, 11989); break; case BC_KNIL: - dasm_put(Dst, 11994, LJ_TNIL); + dasm_put(Dst, 12015, LJ_TNIL); break; /* -- Upvalue and function ops ------------------------------------------ */ case BC_UGET: - dasm_put(Dst, 12040, offsetof(GCfuncL, uvptr), DtA(->v)); + dasm_put(Dst, 12061, offsetof(GCfuncL, uvptr), DtA(->v)); break; case BC_USETV: #define TV2MARKOFS \ ((int32_t)offsetof(GCupval, marked)-(int32_t)offsetof(GCupval, tv)) - dasm_put(Dst, 12084, offsetof(GCfuncL, uvptr), DtA(->closed), DtA(->v), TV2MARKOFS, LJ_GC_BLACK, LJ_TISGCV, LJ_TISNUM - LJ_TISGCV, Dt4(->gch.marked), LJ_GC_WHITES, GG_DISP2G); - dasm_put(Dst, 12174); + dasm_put(Dst, 12105, offsetof(GCfuncL, uvptr), DtA(->closed), DtA(->v), TV2MARKOFS, LJ_GC_BLACK, LJ_TISGCV, LJ_TISNUM - LJ_TISGCV, Dt4(->gch.marked), LJ_GC_WHITES, GG_DISP2G); + dasm_put(Dst, 12195); break; #undef TV2MARKOFS case BC_USETS: - dasm_put(Dst, 12186, offsetof(GCfuncL, uvptr), DtA(->v), LJ_TSTR, DtA(->marked), LJ_GC_BLACK, Dt4(->gch.marked), LJ_GC_WHITES, DtA(->closed), GG_DISP2G); + dasm_put(Dst, 12207, offsetof(GCfuncL, uvptr), DtA(->v), LJ_TSTR, DtA(->marked), LJ_GC_BLACK, Dt4(->gch.marked), LJ_GC_WHITES, DtA(->closed), GG_DISP2G); break; case BC_USETN: - dasm_put(Dst, 12277); + dasm_put(Dst, 12298); if (sse) { - dasm_put(Dst, 12282); + dasm_put(Dst, 12303); } else { - dasm_put(Dst, 11092); + dasm_put(Dst, 11113); } - dasm_put(Dst, 12289, offsetof(GCfuncL, uvptr), DtA(->v)); + dasm_put(Dst, 12310, offsetof(GCfuncL, uvptr), DtA(->v)); if (sse) { - dasm_put(Dst, 12298); + dasm_put(Dst, 12319); } else { - dasm_put(Dst, 12304); + dasm_put(Dst, 12325); } - dasm_put(Dst, 10855); + dasm_put(Dst, 10876); break; case BC_USETP: - dasm_put(Dst, 12307, offsetof(GCfuncL, uvptr), DtA(->v)); + dasm_put(Dst, 12328, offsetof(GCfuncL, uvptr), DtA(->v)); break; case BC_UCLO: - dasm_put(Dst, 12344, -BCBIAS_J*4, Dt1(->openupval), Dt1(->base), Dt1(->base)); + dasm_put(Dst, 12365, -BCBIAS_J*4, Dt1(->openupval), Dt1(->base), Dt1(->base)); break; case BC_FNEW: - dasm_put(Dst, 12398, Dt1(->base), Dt1(->base), LJ_TFUNC); + dasm_put(Dst, 12419, Dt1(->base), Dt1(->base), LJ_TFUNC); break; /* -- Table ops --------------------------------------------------------- */ case BC_TNEW: - dasm_put(Dst, 12469, Dt1(->base), DISPATCH_GL(gc.total), DISPATCH_GL(gc.threshold), Dt1(->base), LJ_TTAB); + dasm_put(Dst, 12490, Dt1(->base), DISPATCH_GL(gc.total), DISPATCH_GL(gc.threshold), Dt1(->base), LJ_TTAB); break; case BC_TDUP: - dasm_put(Dst, 12595, DISPATCH_GL(gc.total), DISPATCH_GL(gc.threshold), Dt1(->base), Dt1(->base), LJ_TTAB); + dasm_put(Dst, 12616, DISPATCH_GL(gc.total), DISPATCH_GL(gc.threshold), Dt1(->base), Dt1(->base), LJ_TTAB); break; case BC_GGET: - dasm_put(Dst, 12687, Dt7(->env)); + dasm_put(Dst, 12708, Dt7(->env)); break; case BC_GSET: - dasm_put(Dst, 12705, Dt7(->env)); + dasm_put(Dst, 12726, Dt7(->env)); break; case BC_TGETV: - dasm_put(Dst, 12723, LJ_TTAB, LJ_TISNUM); + dasm_put(Dst, 12744, LJ_TTAB, LJ_TISNUM); if (sse) { - dasm_put(Dst, 12756); - } else { dasm_put(Dst, 12777); + } else { + dasm_put(Dst, 12798); if (cmov) { - dasm_put(Dst, 10818); + dasm_put(Dst, 10839); } else { - dasm_put(Dst, 10824); + dasm_put(Dst, 10845); } - dasm_put(Dst, 2527); + dasm_put(Dst, 2538); } - dasm_put(Dst, 12787, Dt6(->asize), Dt6(->array), LJ_TNIL, Dt6(->metatable), Dt6(->metatable), Dt6(->nomm), 1<asize), Dt6(->array), LJ_TNIL, Dt6(->metatable), Dt6(->metatable), Dt6(->nomm), 1<hmask), Dt5(->hash), sizeof(Node), Dt6(->node), DtB(->key.it), LJ_TSTR, DtB(->key.gcr), LJ_TNIL); - dasm_put(Dst, 12992, LJ_TNIL, DtB(->next), Dt6(->metatable), Dt6(->nomm), 1<hmask), Dt5(->hash), sizeof(Node), Dt6(->node), DtB(->key.it), LJ_TSTR, DtB(->key.gcr), LJ_TNIL); + dasm_put(Dst, 13013, LJ_TNIL, DtB(->next), Dt6(->metatable), Dt6(->nomm), 1<asize), Dt6(->array), LJ_TNIL, Dt6(->metatable), Dt6(->metatable), Dt6(->nomm), 1<asize), Dt6(->array), LJ_TNIL, Dt6(->metatable), Dt6(->metatable), Dt6(->nomm), 1<asize), Dt6(->array), LJ_TNIL, Dt6(->marked), LJ_GC_BLACK, Dt6(->metatable), Dt6(->metatable)); - dasm_put(Dst, 13294, Dt6(->nomm), 1<marked), cast_byte(~LJ_GC_BLACK), DISPATCH_GL(gc.grayagain), DISPATCH_GL(gc.grayagain), Dt6(->gclist)); + dasm_put(Dst, 13232, Dt6(->asize), Dt6(->array), LJ_TNIL, Dt6(->marked), LJ_GC_BLACK, Dt6(->metatable), Dt6(->metatable)); + dasm_put(Dst, 13315, Dt6(->nomm), 1<marked), cast_byte(~LJ_GC_BLACK), DISPATCH_GL(gc.grayagain), DISPATCH_GL(gc.grayagain), Dt6(->gclist)); break; case BC_TSETS: - dasm_put(Dst, 13356, LJ_TTAB, Dt6(->hmask), Dt5(->hash), sizeof(Node), Dt6(->nomm), Dt6(->node), DtB(->key.it), LJ_TSTR, DtB(->key.gcr), LJ_TNIL); - dasm_put(Dst, 13431, Dt6(->marked), LJ_GC_BLACK, Dt6(->metatable), Dt6(->metatable), Dt6(->nomm), 1<next)); - dasm_put(Dst, 13523, Dt6(->metatable), Dt6(->nomm), 1<base), Dt1(->base), Dt6(->marked), cast_byte(~LJ_GC_BLACK), DISPATCH_GL(gc.grayagain), DISPATCH_GL(gc.grayagain), Dt6(->gclist)); + dasm_put(Dst, 13377, LJ_TTAB, Dt6(->hmask), Dt5(->hash), sizeof(Node), Dt6(->nomm), Dt6(->node), DtB(->key.it), LJ_TSTR, DtB(->key.gcr), LJ_TNIL); + dasm_put(Dst, 13452, Dt6(->marked), LJ_GC_BLACK, Dt6(->metatable), Dt6(->metatable), Dt6(->nomm), 1<next)); + dasm_put(Dst, 13544, Dt6(->metatable), Dt6(->nomm), 1<base), Dt1(->base), Dt6(->marked), cast_byte(~LJ_GC_BLACK), DISPATCH_GL(gc.grayagain), DISPATCH_GL(gc.grayagain), Dt6(->gclist)); break; case BC_TSETB: - dasm_put(Dst, 13619, LJ_TTAB, Dt6(->asize), Dt6(->array), LJ_TNIL, Dt6(->marked), LJ_GC_BLACK, Dt6(->metatable)); - dasm_put(Dst, 13717, Dt6(->metatable), Dt6(->nomm), 1<marked), cast_byte(~LJ_GC_BLACK), DISPATCH_GL(gc.grayagain), DISPATCH_GL(gc.grayagain), Dt6(->gclist)); + dasm_put(Dst, 13640, LJ_TTAB, Dt6(->asize), Dt6(->array), LJ_TNIL, Dt6(->marked), LJ_GC_BLACK, Dt6(->metatable)); + dasm_put(Dst, 13738, Dt6(->metatable), Dt6(->nomm), 1<marked), cast_byte(~LJ_GC_BLACK), DISPATCH_GL(gc.grayagain), DISPATCH_GL(gc.grayagain), Dt6(->gclist)); break; case BC_TSETM: - dasm_put(Dst, 13763, Dt6(->marked), LJ_GC_BLACK, Dt6(->asize), Dt6(->array), Dt1(->base), Dt1(->base)); - dasm_put(Dst, 13912, Dt6(->marked), cast_byte(~LJ_GC_BLACK), DISPATCH_GL(gc.grayagain), DISPATCH_GL(gc.grayagain), Dt6(->gclist)); + dasm_put(Dst, 13784, Dt6(->marked), LJ_GC_BLACK, Dt6(->asize), Dt6(->array), Dt1(->base), Dt1(->base)); + dasm_put(Dst, 13933, Dt6(->marked), cast_byte(~LJ_GC_BLACK), DISPATCH_GL(gc.grayagain), DISPATCH_GL(gc.grayagain), Dt6(->gclist)); break; /* -- Calls and vararg handling ----------------------------------------- */ case BC_CALL: case BC_CALLM: - dasm_put(Dst, 11403); + dasm_put(Dst, 11424); if (op == BC_CALLM) { - dasm_put(Dst, 13930); + dasm_put(Dst, 13951); } - dasm_put(Dst, 13935, LJ_TFUNC, Dt7(->pc)); + dasm_put(Dst, 13956, LJ_TFUNC, Dt7(->pc)); break; case BC_CALLMT: - dasm_put(Dst, 13930); + dasm_put(Dst, 13951); break; case BC_CALLT: - dasm_put(Dst, 13976, LJ_TFUNC, FRAME_TYPE, Dt7(->ffid), Dt7(->pc)); - dasm_put(Dst, 14094, FRAME_TYPE, Dt7(->pc), PC2PROTO(k), FRAME_VARG, FRAME_TYPEP, FRAME_VARG); + dasm_put(Dst, 13997, LJ_TFUNC, FRAME_TYPE, Dt7(->ffid), Dt7(->pc)); + dasm_put(Dst, 14115, FRAME_TYPE, Dt7(->pc), PC2PROTO(k), FRAME_VARG, FRAME_TYPEP, FRAME_VARG); break; case BC_ITERC: - dasm_put(Dst, 14164, LJ_TFUNC, 2+1, Dt7(->pc)); + dasm_put(Dst, 14185, LJ_TFUNC, 2+1, Dt7(->pc)); break; case BC_ITERN: #if LJ_HASJIT #endif - dasm_put(Dst, 14244, Dt6(->asize), Dt6(->array), LJ_TNIL); + dasm_put(Dst, 14265, Dt6(->asize), Dt6(->array), LJ_TNIL); if (sse) { - dasm_put(Dst, 14290); + dasm_put(Dst, 14311); } else { - dasm_put(Dst, 14296); + dasm_put(Dst, 14317); } - dasm_put(Dst, 14302); + dasm_put(Dst, 14323); if (sse) { - dasm_put(Dst, 11273); + dasm_put(Dst, 11294); } else { - dasm_put(Dst, 11285); + dasm_put(Dst, 11306); } - dasm_put(Dst, 14321, -BCBIAS_J*4); + dasm_put(Dst, 14342, -BCBIAS_J*4); if (!sse) { - dasm_put(Dst, 14372); + dasm_put(Dst, 14393); } - dasm_put(Dst, 14378, Dt6(->hmask), sizeof(Node), Dt6(->node), DtB(->val.it), LJ_TNIL, DtB(->key.gcr), DtB(->key.it), DtB(->val.gcr), DtB(->val.it)); - dasm_put(Dst, 14453); + dasm_put(Dst, 14399, Dt6(->hmask), sizeof(Node), Dt6(->node), DtB(->val.it), LJ_TNIL, DtB(->key.gcr), DtB(->key.it), DtB(->val.gcr), DtB(->val.it)); + dasm_put(Dst, 14474); break; case BC_ISNEXT: - dasm_put(Dst, 14461, LJ_TFUNC, LJ_TTAB, LJ_TNIL, Dt8(->ffid), FF_next_N, -BCBIAS_J*4, BC_JMP, -BCBIAS_J*4, BC_ITERC); + dasm_put(Dst, 14482, LJ_TFUNC, LJ_TTAB, LJ_TNIL, Dt8(->ffid), FF_next_N, -BCBIAS_J*4, BC_JMP, -BCBIAS_J*4, BC_ITERC); break; case BC_VARG: - dasm_put(Dst, 14560, (8+FRAME_VARG), LJ_TNIL, Dt1(->maxstack)); - dasm_put(Dst, 14724, Dt1(->base), Dt1(->top), Dt1(->base), Dt1(->top)); + dasm_put(Dst, 14581, (8+FRAME_VARG), LJ_TNIL, Dt1(->maxstack)); + dasm_put(Dst, 14745, Dt1(->base), Dt1(->top), Dt1(->base), Dt1(->top)); break; /* -- Returns ----------------------------------------------------------- */ case BC_RETM: - dasm_put(Dst, 13930); + dasm_put(Dst, 13951); break; case BC_RET: case BC_RET0: case BC_RET1: if (op != BC_RET0) { - dasm_put(Dst, 14795); + dasm_put(Dst, 14816); } - dasm_put(Dst, 14799, FRAME_TYPE); + dasm_put(Dst, 14820, FRAME_TYPE); switch (op) { case BC_RET: - dasm_put(Dst, 14818); + dasm_put(Dst, 14839); break; case BC_RET1: - dasm_put(Dst, 14876); + dasm_put(Dst, 14897); /* fallthrough */ case BC_RET0: - dasm_put(Dst, 14892); + dasm_put(Dst, 14913); default: break; } - dasm_put(Dst, 14903, Dt7(->pc), PC2PROTO(k)); + dasm_put(Dst, 14924, Dt7(->pc), PC2PROTO(k)); if (op == BC_RET) { - dasm_put(Dst, 14945, LJ_TNIL); + dasm_put(Dst, 14966, LJ_TNIL); } else { - dasm_put(Dst, 14954, LJ_TNIL); + dasm_put(Dst, 14975, LJ_TNIL); } - dasm_put(Dst, 14961, -FRAME_VARG, FRAME_TYPEP); + dasm_put(Dst, 14982, -FRAME_VARG, FRAME_TYPEP); if (op != BC_RET0) { - dasm_put(Dst, 14985); + dasm_put(Dst, 15006); } - dasm_put(Dst, 4689); + dasm_put(Dst, 4710); break; /* -- Loops and branches ------------------------------------------------ */ @@ -2204,7 +2206,7 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop, int cmov, int sse) case BC_FORL: #if LJ_HASJIT - dasm_put(Dst, 14989, HOTCOUNT_PCMASK, GG_DISP2HOT); + dasm_put(Dst, 15010, HOTCOUNT_PCMASK, GG_DISP2HOT); #endif break; @@ -2216,57 +2218,57 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop, int cmov, int sse) case BC_FORI: case BC_IFORL: vk = (op == BC_IFORL || op == BC_JFORL); - dasm_put(Dst, 15010); + dasm_put(Dst, 15031); if (!vk) { - dasm_put(Dst, 15014, LJ_TISNUM, LJ_TISNUM); + dasm_put(Dst, 15035, LJ_TISNUM, LJ_TISNUM); } - dasm_put(Dst, 15033); + dasm_put(Dst, 15054); if (!vk) { - dasm_put(Dst, 15037, LJ_TISNUM); + dasm_put(Dst, 15058, LJ_TISNUM); } if (sse) { - dasm_put(Dst, 15046); + dasm_put(Dst, 15067); if (vk) { - dasm_put(Dst, 15058); + dasm_put(Dst, 15079); } else { - dasm_put(Dst, 15077); + dasm_put(Dst, 15098); } - dasm_put(Dst, 15082); + dasm_put(Dst, 15103); } else { - dasm_put(Dst, 15095); + dasm_put(Dst, 15116); if (vk) { - dasm_put(Dst, 15101); + dasm_put(Dst, 15122); } else { - dasm_put(Dst, 15117); + dasm_put(Dst, 15138); } - dasm_put(Dst, 15125); + dasm_put(Dst, 15146); if (cmov) { - dasm_put(Dst, 10818); + dasm_put(Dst, 10839); } else { - dasm_put(Dst, 10824); + dasm_put(Dst, 10845); } if (!cmov) { - dasm_put(Dst, 15130); + dasm_put(Dst, 15151); } } if (op == BC_FORI) { - dasm_put(Dst, 15136, -BCBIAS_J*4); + dasm_put(Dst, 15157, -BCBIAS_J*4); } else if (op == BC_JFORI) { - dasm_put(Dst, 15146, -BCBIAS_J*4, BC_JLOOP); + dasm_put(Dst, 15167, -BCBIAS_J*4, BC_JLOOP); } else if (op == BC_IFORL) { - dasm_put(Dst, 15160, -BCBIAS_J*4); + dasm_put(Dst, 15181, -BCBIAS_J*4); } else { - dasm_put(Dst, 15156, BC_JLOOP); + dasm_put(Dst, 15177, BC_JLOOP); } - dasm_put(Dst, 10853); + dasm_put(Dst, 10874); if (sse) { - dasm_put(Dst, 15170); + dasm_put(Dst, 15191); } break; case BC_ITERL: #if LJ_HASJIT - dasm_put(Dst, 14989, HOTCOUNT_PCMASK, GG_DISP2HOT); + dasm_put(Dst, 15010, HOTCOUNT_PCMASK, GG_DISP2HOT); #endif break; @@ -2275,33 +2277,33 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop, int cmov, int sse) break; #endif case BC_IITERL: - dasm_put(Dst, 15181, LJ_TNIL); + dasm_put(Dst, 15202, LJ_TNIL); if (op == BC_JITERL) { - dasm_put(Dst, 15196, BC_JLOOP); + dasm_put(Dst, 15217, BC_JLOOP); } else { - dasm_put(Dst, 15210, -BCBIAS_J*4); + dasm_put(Dst, 15231, -BCBIAS_J*4); } - dasm_put(Dst, 11150); + dasm_put(Dst, 11171); break; case BC_LOOP: #if LJ_HASJIT - dasm_put(Dst, 14989, HOTCOUNT_PCMASK, GG_DISP2HOT); + dasm_put(Dst, 15010, HOTCOUNT_PCMASK, GG_DISP2HOT); #endif break; case BC_ILOOP: - dasm_put(Dst, 10855); + dasm_put(Dst, 10876); break; case BC_JLOOP: #if LJ_HASJIT - dasm_put(Dst, 15226, DISPATCH_J(trace), DtD(->mcode), DISPATCH_GL(jit_base), DISPATCH_GL(jit_L)); + dasm_put(Dst, 15247, DISPATCH_J(trace), DtD(->mcode), DISPATCH_GL(jit_base), DISPATCH_GL(jit_L)); #endif break; case BC_JMP: - dasm_put(Dst, 15249, -BCBIAS_J*4); + dasm_put(Dst, 15270, -BCBIAS_J*4); break; /* -- Function headers -------------------------------------------------- */ @@ -2315,7 +2317,7 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop, int cmov, int sse) case BC_FUNCF: #if LJ_HASJIT - dasm_put(Dst, 15273, HOTCOUNT_PCMASK, GG_DISP2HOT); + dasm_put(Dst, 15294, HOTCOUNT_PCMASK, GG_DISP2HOT); #endif case BC_FUNCV: /* NYI: compiled vararg functions. */ break; @@ -2325,47 +2327,47 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop, int cmov, int sse) break; #endif case BC_IFUNCF: - dasm_put(Dst, 15294, -4+PC2PROTO(k), Dt1(->maxstack), -4+PC2PROTO(numparams)); + dasm_put(Dst, 15315, -4+PC2PROTO(k), Dt1(->maxstack), -4+PC2PROTO(numparams)); if (op == BC_JFUNCF) { - dasm_put(Dst, 15324, BC_JLOOP); + dasm_put(Dst, 15345, BC_JLOOP); } else { - dasm_put(Dst, 10855); + dasm_put(Dst, 10876); } - dasm_put(Dst, 15333, LJ_TNIL); + dasm_put(Dst, 15354, LJ_TNIL); break; case BC_JFUNCV: #if !LJ_HASJIT break; #endif - dasm_put(Dst, 10253); + dasm_put(Dst, 10274); break; /* NYI: compiled vararg functions. */ case BC_IFUNCV: - dasm_put(Dst, 15355, FRAME_VARG, Dt1(->maxstack), -4+PC2PROTO(numparams), LJ_TNIL); + dasm_put(Dst, 15376, FRAME_VARG, Dt1(->maxstack), -4+PC2PROTO(numparams), LJ_TNIL); if (op == BC_JFUNCV) { - dasm_put(Dst, 15324, BC_JLOOP); + dasm_put(Dst, 15345, BC_JLOOP); } else { - dasm_put(Dst, 15446, -4+PC2PROTO(k)); + dasm_put(Dst, 15467, -4+PC2PROTO(k)); } - dasm_put(Dst, 15468, LJ_TNIL); + dasm_put(Dst, 15489, LJ_TNIL); break; case BC_FUNCC: case BC_FUNCCW: - dasm_put(Dst, 15490, Dt8(->f), Dt1(->base), 8*LUA_MINSTACK, Dt1(->maxstack), Dt1(->top)); - if (op == BC_FUNCC) { - dasm_put(Dst, 15519); - } else { - dasm_put(Dst, 15523); - } - dasm_put(Dst, 15531, DISPATCH_GL(vmstate), ~LJ_VMST_C); + dasm_put(Dst, 15511, Dt8(->f), Dt1(->base), 8*LUA_MINSTACK, Dt1(->maxstack), Dt1(->top)); if (op == BC_FUNCC) { dasm_put(Dst, 15540); } else { - dasm_put(Dst, 15544, DISPATCH_GL(wrapf)); + dasm_put(Dst, 15544); } - dasm_put(Dst, 15549, DISPATCH_GL(vmstate), ~LJ_VMST_INTERP, Dt1(->base), Dt1(->top)); + dasm_put(Dst, 15552, DISPATCH_GL(vmstate), ~LJ_VMST_C); + if (op == BC_FUNCC) { + dasm_put(Dst, 15561); + } else { + dasm_put(Dst, 15565, DISPATCH_GL(wrapf)); + } + dasm_put(Dst, 15570, DISPATCH_GL(vmstate), ~LJ_VMST_INTERP, Dt1(->base), Dt1(->top)); break; /* ---------------------------------------------------------------------- */ @@ -2393,7 +2395,7 @@ static int build_backend(BuildCtx *ctx) build_subroutines(ctx, cmov, sse); - dasm_put(Dst, 15574); + dasm_put(Dst, 15595); for (op = 0; op < BC__MAX; op++) build_ins(ctx, (BCOp)op, op, cmov, sse); diff --git a/src/lib_base.c b/src/lib_base.c index 908099d4..aa55faba 100644 --- a/src/lib_base.c +++ b/src/lib_base.c @@ -246,17 +246,43 @@ LJ_STATIC_ASSERT((int)FF_next == FF_next_N); LJLIB_ASM(next) { lj_lib_checktab(L, 1); - lj_lib_checknum(L, 2); /* For ipairs_aux. */ + return FFH_UNREACHABLE; +} + +static int ffh_pairs(lua_State *L, MMS mm) +{ + TValue *o = lj_lib_checkany(L, 1); + cTValue *mo = lj_meta_lookup(L, o, mm); + if (!tvisnil(mo)) { + L->top = o+1; /* Only keep one argument. */ + copyTV(L, L->base-1, mo); /* Replace callable. */ + return FFH_TAILCALL; + } else { + if (!tvistab(o)) lj_err_argt(L, 1, LUA_TTABLE); + setfuncV(L, o-1, funcV(lj_lib_upvalue(L, 1))); + if (mm == MM_pairs) setnilV(o+1); else setintV(o+1, 0); + return FFH_RES(3); + } +} + +LJLIB_PUSH(lastcl) +LJLIB_ASM(pairs) +{ + return ffh_pairs(L, MM_pairs); +} + +LJLIB_NOREGUV LJLIB_ASM(ipairs_aux) LJLIB_REC(.) +{ + lj_lib_checktab(L, 1); + lj_lib_checknum(L, 2); return FFH_UNREACHABLE; } LJLIB_PUSH(lastcl) -LJLIB_ASM_(pairs) - -LJLIB_NOREGUV LJLIB_ASM_(ipairs_aux) LJLIB_REC(.) - -LJLIB_PUSH(lastcl) -LJLIB_ASM_(ipairs) LJLIB_REC(.) +LJLIB_ASM(ipairs) LJLIB_REC(.) +{ + return ffh_pairs(L, MM_ipairs); +} /* -- Base library: throw and catch errors -------------------------------- */ diff --git a/src/lj_obj.h b/src/lj_obj.h index c7b653f3..ea5c69c5 100644 --- a/src/lj_obj.h +++ b/src/lj_obj.h @@ -417,7 +417,7 @@ enum { /* The following must be in ORDER ARITH. */ \ _(add) _(sub) _(mul) _(div) _(mod) _(pow) _(unm) \ /* The following are used in the standard libraries. */ \ - _(metatable) _(tostring) + _(metatable) _(tostring) _(pairs) _(ipairs) typedef enum { #define MMENUM(name) MM_##name, diff --git a/src/lj_record.c b/src/lj_record.c index 734adcf5..4ff208f8 100644 --- a/src/lj_record.c +++ b/src/lj_record.c @@ -1358,7 +1358,7 @@ static void LJ_FASTCALL recff_tonumber(jit_State *J, RecordFFData *rd) UNUSED(rd); } -static TValue *recff_tostring_cp(lua_State *L, lua_CFunction dummy, void *ud) +static TValue *recff_metacall_cp(lua_State *L, lua_CFunction dummy, void *ud) { jit_State *J = (jit_State *)ud; rec_tailcall(J, 0, 1); @@ -1366,31 +1366,38 @@ static TValue *recff_tostring_cp(lua_State *L, lua_CFunction dummy, void *ud) return NULL; } +static int recff_metacall(jit_State *J, RecordFFData *rd, MMS mm) +{ + RecordIndex ix; + ix.tab = J->base[0]; + copyTV(J->L, &ix.tabv, &rd->argv[0]); + if (rec_mm_lookup(J, &ix, mm)) { /* Has metamethod? */ + int errcode; + /* Temporarily insert metamethod below object. */ + J->base[1] = J->base[0]; + J->base[0] = ix.mobj; + copyTV(J->L, &rd->argv[1], &rd->argv[0]); + copyTV(J->L, &rd->argv[0], &ix.mobjv); + /* Need to protect rec_tailcall because it may throw. */ + errcode = lj_vm_cpcall(J->L, NULL, J, recff_metacall_cp); + /* Always undo Lua stack changes to avoid confusing the interpreter. */ + copyTV(J->L, &rd->argv[0], &rd->argv[1]); + if (errcode) + lj_err_throw(J->L, errcode); /* Propagate errors. */ + rd->nres = -1; /* Pending call. */ + return 1; /* Tailcalled to metamethod. */ + } + return 0; +} + static void LJ_FASTCALL recff_tostring(jit_State *J, RecordFFData *rd) { TRef tr = J->base[0]; if (tref_isstr(tr)) { /* Ignore __tostring in the string base metatable. */ /* Pass on result in J->base[0]. */ - } else { - RecordIndex ix; - ix.tab = tr; - copyTV(J->L, &ix.tabv, &rd->argv[0]); - if (rec_mm_lookup(J, &ix, MM_tostring)) { /* Has __tostring metamethod? */ - int errcode; - /* Temporarily insert metamethod below object. */ - J->base[1] = tr; - J->base[0] = ix.mobj; - copyTV(J->L, &rd->argv[1], &rd->argv[0]); - copyTV(J->L, &rd->argv[0], &ix.mobjv); - /* Need to protect rec_tailcall because it may throw. */ - errcode = lj_vm_cpcall(J->L, NULL, J, recff_tostring_cp); - /* Always undo Lua stack changes to avoid confusing the interpreter. */ - copyTV(J->L, &rd->argv[0], &rd->argv[1]); - if (errcode) - lj_err_throw(J->L, errcode); /* Propagate errors. */ - rd->nres = -1; /* Pending call. */ - } else if (tref_isnumber(tr)) { + } else if (!recff_metacall(J, rd, MM_tostring)) { + if (tref_isnumber(tr)) { J->base[0] = emitir(IRT(IR_TOSTR, IRT_STR), tr, 0); } else if (tref_ispri(tr)) { J->base[0] = lj_ir_kstr(J, strV(&J->fn->c.upvalue[tref_type(tr)])); @@ -1419,13 +1426,15 @@ static void LJ_FASTCALL recff_ipairs_aux(jit_State *J, RecordFFData *rd) static void LJ_FASTCALL recff_ipairs(jit_State *J, RecordFFData *rd) { - TRef tab = J->base[0]; - if (tref_istab(tab)) { - J->base[0] = lj_ir_kfunc(J, funcV(&J->fn->c.upvalue[0])); - J->base[1] = tab; - J->base[2] = lj_ir_kint(J, 0); - rd->nres = 3; - } /* else: Interpreter will throw. */ + if (!recff_metacall(J, rd, MM_ipairs)) { + TRef tab = J->base[0]; + if (tref_istab(tab)) { + J->base[0] = lj_ir_kfunc(J, funcV(&J->fn->c.upvalue[0])); + J->base[1] = tab; + J->base[2] = lj_ir_kint(J, 0); + rd->nres = 3; + } /* else: Interpreter will throw. */ + } } static void LJ_FASTCALL recff_pcall(jit_State *J, RecordFFData *rd)