]> git.ipfire.org Git - thirdparty/LuaJIT.git/commitdiff
Add support for __pairs and __ipairs metamethods (from Lua 5.2).
authorMike Pall <mike>
Wed, 17 Nov 2010 23:23:24 +0000 (00:23 +0100)
committerMike Pall <mike>
Wed, 17 Nov 2010 23:23:24 +0000 (00:23 +0100)
src/buildvm_ppc.dasc
src/buildvm_ppcspe.h
src/buildvm_x64.h
src/buildvm_x64win.h
src/buildvm_x86.dasc
src/buildvm_x86.h
src/lib_base.c
src/lj_obj.h
src/lj_record.c

index d9239d6b1eee92fa2897e10d929d5f60d8572c31..06fc5078879260a4331eb3fd9b54861337594ad4 100644 (file)
@@ -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)
index 0cedee2c32132b0c059047ee167f596f42761484..f3af36b0d2a4a26aa36ca9457126ba01a1c0ee7b 100644 (file)
@@ -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);
+  dasm_put(Dst, 2709);
 #endif
-  dasm_put(Dst, 2701);
+  dasm_put(Dst, 2712);
 #if LJ_HASJIT
-  dasm_put(Dst, 2703);
+  dasm_put(Dst, 2714);
 #endif
-  dasm_put(Dst, 2705);
+  dasm_put(Dst, 2716);
 #if LJ_HASJIT
-  dasm_put(Dst, 2707);
+  dasm_put(Dst, 2718);
 #endif
-  dasm_put(Dst, 2709);
+  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<<MM_eq);
+    dasm_put(Dst, 2866, Dt6(->metatable), 1-vk, Dt6(->nomm), 1<<MM_eq);
     break;
 
   case BC_ISEQS: case BC_ISNES:
     vk = op == BC_ISEQS;
-    dasm_put(Dst, 2876, 32-1, -(BCBIAS_J*4 >> 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<<MM_index);
+    dasm_put(Dst, 3699, Dt6(->asize), Dt6(->array), 31-3, Dt6(->metatable), Dt6(->nomm), 1<<MM_index);
     break;
   case BC_TGETS:
-    dasm_put(Dst, 3746, 32-1, Dt6(->hmask), Dt5(->hash), Dt6(->node), 31-5, 31-3, DtB(->key), DtB(->val), DtB(->next), Dt6(->metatable), Dt6(->nomm), 1<<MM_index);
-    dasm_put(Dst, 3810);
+    dasm_put(Dst, 3757, 32-1, Dt6(->hmask), Dt5(->hash), Dt6(->node), 31-5, 31-3, DtB(->key), DtB(->val), DtB(->next), Dt6(->metatable), Dt6(->nomm), 1<<MM_index);
+    dasm_put(Dst, 3821);
     break;
   case BC_TGETB:
-    dasm_put(Dst, 3815, 32-3, Dt6(->asize), Dt6(->array), Dt6(->metatable), Dt6(->nomm), 1<<MM_index);
+    dasm_put(Dst, 3826, 32-3, Dt6(->asize), Dt6(->array), Dt6(->metatable), Dt6(->nomm), 1<<MM_index);
     break;
 
   case BC_TSETV:
-    dasm_put(Dst, 3859, Dt6(->asize), Dt6(->array), 31-3, Dt6(->marked), LJ_GC_BLACK, Dt6(->metatable), Dt6(->nomm), 1<<MM_newindex);
-    dasm_put(Dst, 3926, DISPATCH_GL(gc.grayagain), DISPATCH_GL(gc.grayagain), Dt6(->marked), Dt6(->gclist));
+    dasm_put(Dst, 3870, Dt6(->asize), Dt6(->array), 31-3, Dt6(->marked), LJ_GC_BLACK, Dt6(->metatable), Dt6(->nomm), 1<<MM_newindex);
+    dasm_put(Dst, 3937, DISPATCH_GL(gc.grayagain), DISPATCH_GL(gc.grayagain), Dt6(->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<<MM_newindex, DtB(->next), Dt6(->metatable), DISPATCH_GL(tmptv), Dt1(->base), Dt6(->nomm), 1<<MM_newindex, Dt1(->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<<MM_newindex, DtB(->next), Dt6(->metatable), DISPATCH_GL(tmptv), Dt1(->base), Dt6(->nomm), 1<<MM_newindex, Dt1(->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<<MM_newindex, DISPATCH_GL(gc.grayagain), DISPATCH_GL(gc.grayagain), Dt6(->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<<MM_newindex, DISPATCH_GL(gc.grayagain), DISPATCH_GL(gc.grayagain), Dt6(->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);
 
index 8bcfd63feab9bb8cb75a45e0c3bda48391cebfb0..af5c0b73096dd18f7368688bf6e4785d7c0ec40e 100644 (file)
@@ -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<<MM_eq);
+      dasm_put(Dst, 9632, LJ_TISPRI, LJ_TISTABUD, Dt6(->metatable), Dt6(->nomm), 1<<MM_eq);
       if (vk) {
-       dasm_put(Dst, 9669);
+       dasm_put(Dst, 9690);
       } else {
-       dasm_put(Dst, 9673);
+       dasm_put(Dst, 9694);
       }
-      dasm_put(Dst, 9679);
+      dasm_put(Dst, 9700);
     }
     break;
   case BC_ISEQS: case BC_ISNES:
     vk = op == BC_ISEQS;
-    dasm_put(Dst, 9684, LJ_TSTR);
+    dasm_put(Dst, 9705, LJ_TSTR);
   iseqne_test:
     if (vk) {
-      dasm_put(Dst, 9567);
+      dasm_put(Dst, 9588);
     } else {
-      dasm_put(Dst, 2788);
+      dasm_put(Dst, 2809);
     }
     goto iseqne_end;
   case BC_ISEQN: case BC_ISNEN:
     vk = op == BC_ISEQN;
-    dasm_put(Dst, 9709, LJ_TISNUM);
+    dasm_put(Dst, 9730, LJ_TISNUM);
     if (sse) {
-      dasm_put(Dst, 9723);
+      dasm_put(Dst, 9744);
     } else {
-      dasm_put(Dst, 9736);
+      dasm_put(Dst, 9757);
       if (cmov) {
-      dasm_put(Dst, 9460);
+      dasm_put(Dst, 9481);
       } else {
-      dasm_put(Dst, 9466);
+      dasm_put(Dst, 9487);
       }
     }
     goto iseqne_fp;
   case BC_ISEQP: case BC_ISNEP:
     vk = op == BC_ISEQP;
-    dasm_put(Dst, 9744);
+    dasm_put(Dst, 9765);
     goto iseqne_test;
 
   /* -- Unary test and copy ops ------------------------------------------- */
 
   case BC_ISTC: case BC_ISFC: case BC_IST: case BC_ISF:
-    dasm_put(Dst, 9756, LJ_TISTRUECOND);
+    dasm_put(Dst, 9777, LJ_TISTRUECOND);
     if (op == BC_IST || op == BC_ISTC) {
-      dasm_put(Dst, 9768);
+      dasm_put(Dst, 9789);
     } else {
-      dasm_put(Dst, 9773);
+      dasm_put(Dst, 9794);
     }
     if (op == BC_ISTC || op == BC_ISFC) {
-      dasm_put(Dst, 9778);
+      dasm_put(Dst, 9799);
     }
-    dasm_put(Dst, 9789, -BCBIAS_J*4);
+    dasm_put(Dst, 9810, -BCBIAS_J*4);
     break;
 
   /* -- Unary ops --------------------------------------------------------- */
 
   case BC_MOV:
-    dasm_put(Dst, 9822);
+    dasm_put(Dst, 9843);
     break;
   case BC_NOT:
-    dasm_put(Dst, 9851, LJ_TISTRUECOND, LJ_TTRUE);
+    dasm_put(Dst, 9872, LJ_TISTRUECOND, LJ_TTRUE);
     break;
   case BC_UNM:
-    dasm_put(Dst, 9888, LJ_TISNUM);
+    dasm_put(Dst, 9909, LJ_TISNUM);
     if (sse) {
-      dasm_put(Dst, 9899, (unsigned int)(U64x(80000000,00000000)), (unsigned int)((U64x(80000000,00000000))>>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<<MM_index);
-    dasm_put(Dst, 11538, LJ_TNIL, LJ_TSTR);
+    dasm_put(Dst, 11474, Dt6(->asize), Dt6(->array), LJ_TNIL, Dt6(->metatable), Dt6(->metatable), Dt6(->nomm), 1<<MM_index);
+    dasm_put(Dst, 11559, LJ_TNIL, LJ_TSTR);
     break;
   case BC_TGETS:
-    dasm_put(Dst, 11567, LJ_TTAB, Dt6(->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<<MM_index);
+    dasm_put(Dst, 11588, LJ_TTAB, Dt6(->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<<MM_index);
     break;
   case BC_TGETB:
-    dasm_put(Dst, 11724, LJ_TTAB, Dt6(->asize), Dt6(->array), LJ_TNIL, Dt6(->metatable), Dt6(->metatable), Dt6(->nomm), 1<<MM_index);
-    dasm_put(Dst, 11820, LJ_TNIL);
+    dasm_put(Dst, 11745, LJ_TTAB, Dt6(->asize), Dt6(->array), LJ_TNIL, Dt6(->metatable), Dt6(->metatable), Dt6(->nomm), 1<<MM_index);
+    dasm_put(Dst, 11841, LJ_TNIL);
     break;
 
   case BC_TSETV:
-    dasm_put(Dst, 11837, LJ_TTAB, LJ_TISNUM);
+    dasm_put(Dst, 11858, LJ_TTAB, LJ_TISNUM);
     if (sse) {
-      dasm_put(Dst, 11432);
+      dasm_put(Dst, 11453);
     } else {
     }
-    dasm_put(Dst, 11870, Dt6(->asize), Dt6(->array), LJ_TNIL, Dt6(->marked), LJ_GC_BLACK, Dt6(->metatable), Dt6(->metatable));
-    dasm_put(Dst, 11950, Dt6(->nomm), 1<<MM_newindex, LJ_TSTR, Dt6(->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<<MM_newindex, LJ_TSTR, Dt6(->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<<MM_newindex, DtB(->next));
-    dasm_put(Dst, 12178, Dt6(->metatable), Dt6(->nomm), 1<<MM_newindex, LJ_TSTR, Dt1(->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<<MM_newindex, DtB(->next));
+    dasm_put(Dst, 12199, Dt6(->metatable), Dt6(->nomm), 1<<MM_newindex, LJ_TSTR, Dt1(->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<<MM_newindex, Dt6(->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<<MM_newindex, Dt6(->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);
 
index bc4da564aaa0049cfba96d492971cb58fef7538f..2ca7c7b291fb793a0f3eb17702b552a17991e67a 100644 (file)
@@ -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<<MM_eq);
+      dasm_put(Dst, 9641, LJ_TISPRI, LJ_TISTABUD, Dt6(->metatable), Dt6(->nomm), 1<<MM_eq);
       if (vk) {
-       dasm_put(Dst, 9678);
+       dasm_put(Dst, 9699);
       } else {
-       dasm_put(Dst, 9682);
+       dasm_put(Dst, 9703);
       }
-      dasm_put(Dst, 9688);
+      dasm_put(Dst, 9709);
     }
     break;
   case BC_ISEQS: case BC_ISNES:
     vk = op == BC_ISEQS;
-    dasm_put(Dst, 9693, LJ_TSTR);
+    dasm_put(Dst, 9714, LJ_TSTR);
   iseqne_test:
     if (vk) {
-      dasm_put(Dst, 9576);
+      dasm_put(Dst, 9597);
     } else {
-      dasm_put(Dst, 2757);
+      dasm_put(Dst, 2778);
     }
     goto iseqne_end;
   case BC_ISEQN: case BC_ISNEN:
     vk = op == BC_ISEQN;
-    dasm_put(Dst, 9717, LJ_TISNUM);
+    dasm_put(Dst, 9738, LJ_TISNUM);
     if (sse) {
-      dasm_put(Dst, 9731);
+      dasm_put(Dst, 9752);
     } else {
-      dasm_put(Dst, 9743);
+      dasm_put(Dst, 9764);
       if (cmov) {
-      dasm_put(Dst, 9470);
+      dasm_put(Dst, 9491);
       } else {
-      dasm_put(Dst, 9476);
+      dasm_put(Dst, 9497);
       }
     }
     goto iseqne_fp;
   case BC_ISEQP: case BC_ISNEP:
     vk = op == BC_ISEQP;
-    dasm_put(Dst, 9750);
+    dasm_put(Dst, 9771);
     goto iseqne_test;
 
   /* -- Unary test and copy ops ------------------------------------------- */
 
   case BC_ISTC: case BC_ISFC: case BC_IST: case BC_ISF:
-    dasm_put(Dst, 9762, LJ_TISTRUECOND);
+    dasm_put(Dst, 9783, LJ_TISTRUECOND);
     if (op == BC_IST || op == BC_ISTC) {
-      dasm_put(Dst, 9774);
+      dasm_put(Dst, 9795);
     } else {
-      dasm_put(Dst, 9779);
+      dasm_put(Dst, 9800);
     }
     if (op == BC_ISTC || op == BC_ISFC) {
-      dasm_put(Dst, 9784);
+      dasm_put(Dst, 9805);
     }
-    dasm_put(Dst, 9795, -BCBIAS_J*4);
+    dasm_put(Dst, 9816, -BCBIAS_J*4);
     break;
 
   /* -- Unary ops --------------------------------------------------------- */
 
   case BC_MOV:
-    dasm_put(Dst, 9827);
+    dasm_put(Dst, 9848);
     break;
   case BC_NOT:
-    dasm_put(Dst, 9855, LJ_TISTRUECOND, LJ_TTRUE);
+    dasm_put(Dst, 9876, LJ_TISTRUECOND, LJ_TTRUE);
     break;
   case BC_UNM:
-    dasm_put(Dst, 9891, LJ_TISNUM);
+    dasm_put(Dst, 9912, LJ_TISNUM);
     if (sse) {
-      dasm_put(Dst, 9902, (unsigned int)(U64x(80000000,00000000)), (unsigned int)((U64x(80000000,00000000))>>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);
+      dasm_put(Dst, 10575);
     } else {
-      dasm_put(Dst, 10569);
+      dasm_put(Dst, 10590);
     }
-    dasm_put(Dst, 9507);
+    dasm_put(Dst, 9528);
     break;
   case BC_KNUM:
     if (sse) {
-      dasm_put(Dst, 10577);
+      dasm_put(Dst, 10598);
     } else {
-      dasm_put(Dst, 10590);
+      dasm_put(Dst, 10611);
     }
-    dasm_put(Dst, 9507);
+    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<<MM_index);
-    dasm_put(Dst, 11491, LJ_TNIL, LJ_TSTR);
+    dasm_put(Dst, 11428, Dt6(->asize), Dt6(->array), LJ_TNIL, Dt6(->metatable), Dt6(->metatable), Dt6(->nomm), 1<<MM_index);
+    dasm_put(Dst, 11512, LJ_TNIL, LJ_TSTR);
     break;
   case BC_TGETS:
-    dasm_put(Dst, 11520, LJ_TTAB, Dt6(->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<<MM_index);
+    dasm_put(Dst, 11541, LJ_TTAB, Dt6(->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<<MM_index);
     break;
   case BC_TGETB:
-    dasm_put(Dst, 11675, LJ_TTAB, Dt6(->asize), Dt6(->array), LJ_TNIL, Dt6(->metatable), Dt6(->metatable), Dt6(->nomm), 1<<MM_index);
-    dasm_put(Dst, 11770, LJ_TNIL);
+    dasm_put(Dst, 11696, LJ_TTAB, Dt6(->asize), Dt6(->array), LJ_TNIL, Dt6(->metatable), Dt6(->metatable), Dt6(->nomm), 1<<MM_index);
+    dasm_put(Dst, 11791, LJ_TNIL);
     break;
 
   case BC_TSETV:
-    dasm_put(Dst, 11787, LJ_TTAB, LJ_TISNUM);
+    dasm_put(Dst, 11808, LJ_TTAB, LJ_TISNUM);
     if (sse) {
-      dasm_put(Dst, 11386);
+      dasm_put(Dst, 11407);
     } else {
     }
-    dasm_put(Dst, 11820, Dt6(->asize), Dt6(->array), LJ_TNIL, Dt6(->marked), LJ_GC_BLACK, Dt6(->metatable), Dt6(->metatable));
-    dasm_put(Dst, 11899, Dt6(->nomm), 1<<MM_newindex, LJ_TSTR, Dt6(->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<<MM_newindex, LJ_TSTR, Dt6(->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<<MM_newindex, DtB(->next));
-    dasm_put(Dst, 12125, Dt6(->metatable), Dt6(->nomm), 1<<MM_newindex, LJ_TSTR, Dt1(->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<<MM_newindex, DtB(->next));
+    dasm_put(Dst, 12146, Dt6(->metatable), Dt6(->nomm), 1<<MM_newindex, LJ_TSTR, Dt1(->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<<MM_newindex, Dt6(->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<<MM_newindex, Dt6(->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));
+    dasm_put(Dst, 14142, Dt8(->f), Dt1(->base), 8*LUA_MINSTACK, Dt1(->maxstack), Dt1(->top));
     if (op == BC_FUNCC) {
-      dasm_put(Dst, 14151);
+      dasm_put(Dst, 14172);
     } else {
-      dasm_put(Dst, 14155);
+      dasm_put(Dst, 14176);
     }
-    dasm_put(Dst, 14163, DISPATCH_GL(vmstate), ~LJ_VMST_C);
+    dasm_put(Dst, 14184, DISPATCH_GL(vmstate), ~LJ_VMST_C);
     if (op == BC_FUNCC) {
-      dasm_put(Dst, 14172);
+      dasm_put(Dst, 14193);
     } else {
-      dasm_put(Dst, 14176, DISPATCH_GL(wrapf));
+      dasm_put(Dst, 14197, DISPATCH_GL(wrapf));
     }
-    dasm_put(Dst, 14181, DISPATCH_GL(vmstate), ~LJ_VMST_INTERP, Dt1(->base), Dt1(->top));
+    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);
 
index e9ecc2c2d62a4069bc0dc6b33c8d2ff98b67dadd..e07ef181b14d81882b870c2580d54715a5f5ba0e 100644 (file)
@@ -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
index 8d30b4ef52cb425fd453ca3f1a15ecf311b027eb..f68d6c87bb067fadc76693274a9e9659414802e7 100644 (file)
@@ -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<<MM_eq);
+      dasm_put(Dst, 10988, LJ_TISPRI, LJ_TISTABUD, Dt6(->metatable), Dt6(->nomm), 1<<MM_eq);
       if (vk) {
-       dasm_put(Dst, 11025);
+       dasm_put(Dst, 11046);
       } else {
-       dasm_put(Dst, 11029);
+       dasm_put(Dst, 11050);
       }
-      dasm_put(Dst, 11035);
+      dasm_put(Dst, 11056);
     }
     break;
   case BC_ISEQS: case BC_ISNES:
     vk = op == BC_ISEQS;
-    dasm_put(Dst, 11040, LJ_TSTR);
+    dasm_put(Dst, 11061, LJ_TSTR);
   iseqne_test:
     if (vk) {
-      dasm_put(Dst, 10923);
+      dasm_put(Dst, 10944);
     } else {
-      dasm_put(Dst, 2814);
+      dasm_put(Dst, 2835);
     }
     goto iseqne_end;
   case BC_ISEQN: case BC_ISNEN:
     vk = op == BC_ISEQN;
-    dasm_put(Dst, 11063, LJ_TISNUM);
+    dasm_put(Dst, 11084, LJ_TISNUM);
     if (sse) {
-      dasm_put(Dst, 11077);
+      dasm_put(Dst, 11098);
     } else {
-      dasm_put(Dst, 11089);
+      dasm_put(Dst, 11110);
       if (cmov) {
-      dasm_put(Dst, 10818);
+      dasm_put(Dst, 10839);
       } else {
-      dasm_put(Dst, 10824);
+      dasm_put(Dst, 10845);
       }
     }
     goto iseqne_fp;
   case BC_ISEQP: case BC_ISNEP:
     vk = op == BC_ISEQP;
-    dasm_put(Dst, 11096);
+    dasm_put(Dst, 11117);
     goto iseqne_test;
 
   /* -- Unary test and copy ops ------------------------------------------- */
 
   case BC_ISTC: case BC_ISFC: case BC_IST: case BC_ISF:
-    dasm_put(Dst, 11107, LJ_TISTRUECOND);
+    dasm_put(Dst, 11128, LJ_TISTRUECOND);
     if (op == BC_IST || op == BC_ISTC) {
-      dasm_put(Dst, 11119);
+      dasm_put(Dst, 11140);
     } else {
-      dasm_put(Dst, 11124);
+      dasm_put(Dst, 11145);
     }
     if (op == BC_ISTC || op == BC_ISFC) {
-      dasm_put(Dst, 11129);
+      dasm_put(Dst, 11150);
     }
-    dasm_put(Dst, 11140, -BCBIAS_J*4);
+    dasm_put(Dst, 11161, -BCBIAS_J*4);
     break;
 
   /* -- Unary ops --------------------------------------------------------- */
 
   case BC_MOV:
-    dasm_put(Dst, 11171);
+    dasm_put(Dst, 11192);
     break;
   case BC_NOT:
-    dasm_put(Dst, 11204, LJ_TISTRUECOND, LJ_TTRUE);
+    dasm_put(Dst, 11225, LJ_TISTRUECOND, LJ_TTRUE);
     break;
   case BC_UNM:
-    dasm_put(Dst, 11239, LJ_TISNUM);
+    dasm_put(Dst, 11260, LJ_TISNUM);
     if (sse) {
-      dasm_put(Dst, 11250);
+      dasm_put(Dst, 11271);
     } else {
-      dasm_put(Dst, 11280);
+      dasm_put(Dst, 11301);
     }
-    dasm_put(Dst, 10855);
+    dasm_put(Dst, 10876);
     break;
   case BC_LEN:
-    dasm_put(Dst, 11289, LJ_TSTR);
+    dasm_put(Dst, 11310, LJ_TSTR);
     if (sse) {
-      dasm_put(Dst, 11303, Dt5(->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);
+      dasm_put(Dst, 11946);
     } else {
-      dasm_put(Dst, 11940);
+      dasm_put(Dst, 11961);
     }
-    dasm_put(Dst, 10855);
+    dasm_put(Dst, 10876);
     break;
   case BC_KNUM:
     if (sse) {
-      dasm_put(Dst, 11948);
+      dasm_put(Dst, 11969);
     } else {
-      dasm_put(Dst, 11961);
+      dasm_put(Dst, 11982);
     }
-    dasm_put(Dst, 10855);
+    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<<MM_index);
-    dasm_put(Dst, 12875, LJ_TNIL, LJ_TSTR);
+    dasm_put(Dst, 12808, Dt6(->asize), Dt6(->array), LJ_TNIL, Dt6(->metatable), Dt6(->metatable), Dt6(->nomm), 1<<MM_index);
+    dasm_put(Dst, 12896, LJ_TNIL, LJ_TSTR);
     break;
   case BC_TGETS:
-    dasm_put(Dst, 12904, LJ_TTAB, Dt6(->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<<MM_index);
+    dasm_put(Dst, 12925, LJ_TTAB, Dt6(->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<<MM_index);
     break;
   case BC_TGETB:
-    dasm_put(Dst, 13062, LJ_TTAB, Dt6(->asize), Dt6(->array), LJ_TNIL, Dt6(->metatable), Dt6(->metatable), Dt6(->nomm), 1<<MM_index);
-    dasm_put(Dst, 13161, LJ_TNIL);
+    dasm_put(Dst, 13083, LJ_TTAB, Dt6(->asize), Dt6(->array), LJ_TNIL, Dt6(->metatable), Dt6(->metatable), Dt6(->nomm), 1<<MM_index);
+    dasm_put(Dst, 13182, LJ_TNIL);
     break;
 
   case BC_TSETV:
-    dasm_put(Dst, 13178, LJ_TTAB, LJ_TISNUM);
+    dasm_put(Dst, 13199, 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, 13211, Dt6(->asize), Dt6(->array), LJ_TNIL, Dt6(->marked), LJ_GC_BLACK, Dt6(->metatable), Dt6(->metatable));
-    dasm_put(Dst, 13294, Dt6(->nomm), 1<<MM_newindex, LJ_TSTR, Dt6(->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<<MM_newindex, LJ_TSTR, Dt6(->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<<MM_newindex, DtB(->next));
-    dasm_put(Dst, 13523, Dt6(->metatable), Dt6(->nomm), 1<<MM_newindex, LJ_TSTR, Dt1(->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<<MM_newindex, DtB(->next));
+    dasm_put(Dst, 13544, Dt6(->metatable), Dt6(->nomm), 1<<MM_newindex, LJ_TSTR, Dt1(->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<<MM_newindex, Dt6(->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<<MM_newindex, Dt6(->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));
+    dasm_put(Dst, 15511, Dt8(->f), Dt1(->base), 8*LUA_MINSTACK, Dt1(->maxstack), Dt1(->top));
     if (op == BC_FUNCC) {
-      dasm_put(Dst, 15519);
+      dasm_put(Dst, 15540);
     } else {
-      dasm_put(Dst, 15523);
+      dasm_put(Dst, 15544);
     }
-    dasm_put(Dst, 15531, DISPATCH_GL(vmstate), ~LJ_VMST_C);
+    dasm_put(Dst, 15552, DISPATCH_GL(vmstate), ~LJ_VMST_C);
     if (op == BC_FUNCC) {
-      dasm_put(Dst, 15540);
+      dasm_put(Dst, 15561);
     } else {
-      dasm_put(Dst, 15544, DISPATCH_GL(wrapf));
+      dasm_put(Dst, 15565, DISPATCH_GL(wrapf));
     }
-    dasm_put(Dst, 15549, DISPATCH_GL(vmstate), ~LJ_VMST_INTERP, Dt1(->base), Dt1(->top));
+    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);
 
index 908099d47639c0a336519bf8548b082eaa98b6c8..aa55fabad81ed518981cb12f1b1f03a505c7eb7b 100644 (file)
@@ -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)
+LJLIB_ASM(pairs)
+{
+  return ffh_pairs(L, MM_pairs);
+}
 
-LJLIB_NOREGUV LJLIB_ASM_(ipairs_aux)   LJLIB_REC(.)
+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_(ipairs)             LJLIB_REC(.)
+LJLIB_ASM(ipairs)              LJLIB_REC(.)
+{
+  return ffh_pairs(L, MM_ipairs);
+}
 
 /* -- Base library: throw and catch errors -------------------------------- */
 
index c7b653f3b77eee546330f3b5df5b55153d6278f8..ea5c69c5c49fa071360d9000321953fc74b56066 100644 (file)
@@ -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,
index 734adcf5707ccd6f1a62c9b97fcdf9d55c3ee195..4ff208f8f2fdc73ace12b71d54611338589647b1 100644 (file)
@@ -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)