]> git.ipfire.org Git - thirdparty/LuaJIT.git/commitdiff
ARM: Add missing FFI functionality. Enable FFI for ARM.
authorMike Pall <mike>
Mon, 18 Apr 2011 19:23:21 +0000 (21:23 +0200)
committerMike Pall <mike>
Mon, 18 Apr 2011 19:24:47 +0000 (21:24 +0200)
src/buildvm_arm.dasc
src/buildvm_arm.h
src/lj_arch.h

index 68f33d9757a40beb5926ae60cf95b42bb0e51c1c..9032c9c2c8828007daad6fc90592e909ffc6f82e 100644 (file)
 |// Macros to test operand types.
 |.macro checktp, reg, tp; cmn reg, #-tp; .endmacro
 |.macro checktpeq, reg, tp; cmneq reg, #-tp; .endmacro
+|.macro checktpne, reg, tp; cmnne reg, #-tp; .endmacro
 |.macro checkstr, reg, target; checktp reg, LJ_TSTR; bne target; .endmacro
 |.macro checktab, reg, target; checktp reg, LJ_TTAB; bne target; .endmacro
 |.macro checkfunc, reg, target; checktp reg, LJ_TFUNC; bne target; .endmacro
@@ -673,6 +674,18 @@ static void build_subroutines(BuildCtx *ctx)
   |  bl extern lj_meta_equal  // (lua_State *L, GCobj *o1, *o2, int ne)
   |  // Returns 0/1 or TValue * (metamethod).
   |  b <3
+  |
+  |->vmeta_equal_cd:
+#if LJ_HASFFI
+  |  sub PC, PC, #4
+  |   str BASE, L->base
+  |   mov CARG1, L
+  |   mov CARG2, INS
+  |  str PC, SAVE_PC
+  |  bl extern lj_meta_equal_cd                // (lua_State *L, BCIns op)
+  |  // Returns 0/1 or TValue * (metamethod).
+  |  b <3
+#endif
   |
   |//-- Arithmetic metamethods ---------------------------------------------
   |
@@ -2084,6 +2097,11 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop)
       |  bls ->BC_ISNEN_Z
     }
     |  // Either or both types are not numbers.
+    if (LJ_HASFFI) {
+      |  checktp CARG2, LJ_TCDATA
+      |  checktpne CARG4, LJ_TCDATA
+      |  beq ->vmeta_equal_cd
+    }
     |  cmp CARG2, CARG4                        // Compare types.
     |  bne >2                          // Not the same type?
     |  checktp CARG2, LJ_TISPRI
@@ -2137,13 +2155,27 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop)
     |    add PC, PC, #4
     |    add RB, PC, RB, lsl #2
     |  checktp CARG2, LJ_TSTR
-    |  cmpeq CARG1, CARG3
+    if (LJ_HASFFI) {
+      |  bne >7
+      |  cmp CARG1, CARG3
+    } else {
+      |  cmpeq CARG1, CARG3
+    }
     if (vk) {
       |  subeq PC, RB, #0x20000
+      |1:
     } else {
+      |1:
       |  subne PC, RB, #0x20000
     }
     |  ins_next
+    |
+    if (LJ_HASFFI) {
+      |7:
+      |  checktp CARG2, LJ_TCDATA
+      |  bne <1
+      |  b ->vmeta_equal_cd
+    }
     break;
 
   case BC_ISEQN: case BC_ISNEN:
@@ -2167,17 +2199,23 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop)
     |  cmp CARG1, CARG3
     if (vk) {
       |  subeq PC, RB, #0x20000
+      |1:
     } else {
+      |1:
       |  subne PC, RB, #0x20000
     }
-    |1:
+    |2:
     |  ins_next
     |
     |3:  // CARG12 is not an integer.
-    if (!vk) {
-      |  subhi PC, RB, #0x20000
+    if (LJ_HASFFI) {
+      |  bhi >7
+    } else {
+      if (!vk) {
+       |  subhi PC, RB, #0x20000
+      }
+      |  bhi <2
     }
-    |  bhi <1
     |  // CARG12 is a number.
     |  checktp CARG4, LJ_TISNUM
     |  movlo RA, RB                    // Save RB.
@@ -2196,7 +2234,14 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop)
     } else {
       |  subne PC, RA, #0x20000
     }
-    |  b <1
+    |  b <2
+    |
+    if (LJ_HASFFI) {
+      |7:
+      |  checktp CARG2, LJ_TCDATA
+      |  bne <1
+      |  b ->vmeta_equal_cd
+    }
     break;
 
   case BC_ISEQP: case BC_ISNEP:
@@ -2207,6 +2252,10 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop)
     |   add PC, PC, #4
     |  mvn RC, RC
     |   add RB, PC, RB, lsl #2
+    if (LJ_HASFFI) {
+      |  checktp CARG2, LJ_TCDATA
+      |  beq ->vmeta_equal_cd
+    }
     |  cmp CARG2, RC
     if (vk) {
       |  subeq PC, RB, #0x20000
index 738d293ae0d18d30bb3a2c22fa540eddaf9298c3..70c2153857a95dae3de514491379a6afaf455026 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[5145] = {
+static const unsigned int build_actionlist[5200] = {
 0x00010001,
 0x00060014,
 0xe3160000,
@@ -543,27 +543,40 @@ static const unsigned int build_actionlist[5145] = {
 0xea000000,
 0x0005000d,
 0x0006003a,
+0x00000000,
+0xe2466004,
+0xe5084000,
+0x000d8180,
+0xe1a00008,
+0xe1a0100e,
+0xe58d6008,
+0xeb000000,
+0x00030005,
+0xea000000,
+0x0005000d,
+0x00000000,
+0x0006003b,
 0xe009caae,
 0xe009b6ae,
 0xe084200c,
 0xe085300b,
 0xea000000,
 0x00050001,
-0x0006003b,
+0x0006003c,
 0xe009caae,
 0xe009b6ae,
 0xe084300c,
 0xe085200b,
 0xea000000,
 0x00050001,
-0x0006003c,
+0x0006003d,
 0xe516e008,
 0xe2466004,
 0xe084200b,
 0xe084300b,
 0xea000000,
 0x00050001,
-0x0006003d,
+0x0006003e,
 0xe009caae,
 0xe009b6ae,
 0xe084200c,
@@ -577,7 +590,7 @@ static const unsigned int build_actionlist[5145] = {
 0xe58d6008,
 0xe58dc000,
 0xeb000000,
-0x00030005,
+0x00030006,
 0xe3500000,
 0x0a000000,
 0x0005002b,
@@ -590,18 +603,17 @@ static const unsigned int build_actionlist[5145] = {
 0xe3a0b010,
 0xea000000,
 0x00050024,
-0x0006003e,
+0x0006003f,
 0xe084100b,
 0xe5084000,
 0x000d8180,
 0xe1a00008,
 0xe58d6008,
 0xeb000000,
-0x00030006,
+0x00030007,
 0xea000000,
 0x00050035,
 0x00060025,
-0x00000000,
 0xe1a00008,
 0xe508c000,
 0x000d8180,
@@ -609,19 +621,20 @@ static const unsigned int build_actionlist[5145] = {
 0xe58d6008,
 0xe084200b,
 0xeb000000,
-0x00030007,
+0x00030008,
 0xe5142008,
 0xe28bb008,
 0xe5046004,
 0xe5126000,
 0x000d8180,
+0x00000000,
 0xe5d6c000,
 0xe496e004,
 0xe797c10c,
 0xe009a2ae,
 0xe08aa004,
 0xe12fff1c,
-0x0006003f,
+0x00060040,
 0xe1a00008,
 0xe5084000,
 0x000d8180,
@@ -629,20 +642,20 @@ static const unsigned int build_actionlist[5145] = {
 0xe58d6008,
 0xe08a200b,
 0xeb000000,
-0x00030007,
+0x00030008,
 0xe51a2008,
 0xe5146004,
 0xe28bb008,
 0xea000000,
-0x00050040,
-0x00060041,
+0x00050041,
+0x00060042,
 0xe1a00008,
 0xe5084000,
 0x000d8180,
 0xe1a0100a,
 0xe58d6008,
 0xeb000000,
-0x00030008,
+0x00030009,
 0x00000000,
 0xe556c004,
 0x00000000,
@@ -659,22 +672,22 @@ static const unsigned int build_actionlist[5145] = {
 0x00000000,
 0xea000000,
 0x00070000,
-0x00060042,
+0x00060043,
 0xe1c400d0,
 0xe35b0008,
 0x3a000000,
-0x00050043,
+0x00050044,
 0xe3710000,
 0x000a0000,
 0x8a000000,
-0x00050043,
+0x00050044,
 0xe5146004,
 0xe14400f8,
 0xe1a0c004,
 0xe25ba008,
 0xe28bb008,
 0x0a000000,
-0x00050044,
+0x00050045,
 0x0006000b,
 0xe1cc00d8,
 0xe25aa008,
@@ -682,12 +695,12 @@ static const unsigned int build_actionlist[5145] = {
 0x1a000000,
 0x0005000b,
 0xea000000,
-0x00050044,
-0x00060045,
+0x00050045,
+0x00060046,
 0xe5941004,
 0xe35b0008,
 0x3a000000,
-0x00050043,
+0x00050044,
 0xe3710000,
 0x000a0000,
 0x33e01000,
@@ -697,12 +710,12 @@ static const unsigned int build_actionlist[5145] = {
 0xe1a03183,
 0xe18200d3,
 0xea000000,
-0x00050046,
-0x00060047,
+0x00050047,
+0x00060048,
 0xe1c400d0,
 0xe35b0008,
 0x3a000000,
-0x00050043,
+0x00050044,
 0xe3710000,
 0x000a0000,
 0x13710000,
@@ -720,7 +733,7 @@ static const unsigned int build_actionlist[5145] = {
 0x000d8180,
 0xe35c0000,
 0x0a000000,
-0x00050046,
+0x00050047,
 0xe51c2000,
 0x000d8180,
 0xe51b3000,
@@ -750,12 +763,12 @@ static const unsigned int build_actionlist[5145] = {
 0xe3e01000,
 0x000a0000,
 0xea000000,
-0x00050046,
+0x00050047,
 0x0006000f,
 0xe3710000,
 0x000a0000,
 0x1a000000,
-0x00050046,
+0x00050047,
 0xea000000,
 0x0005000e,
 0x00060010,
@@ -770,12 +783,12 @@ static const unsigned int build_actionlist[5145] = {
 0x000d8180,
 0xea000000,
 0x0005000c,
-0x00060048,
+0x00060049,
 0xe1c400d0,
 0xe1c420d8,
 0xe35b0010,
 0x3a000000,
-0x00050043,
+0x00050044,
 0xe3710000,
 0x000a0000,
 0x0510c000,
@@ -786,13 +799,13 @@ static const unsigned int build_actionlist[5145] = {
 0x000d8180,
 0x035c0000,
 0x1a000000,
-0x00050043,
+0x00050044,
 0xe3130000,
 0x000a0000,
 0xe5002000,
 0x000d8180,
 0x0a000000,
-0x00050046,
+0x00050047,
 0xe5172000,
 0x000d8180,
 0xe3c33000,
@@ -804,45 +817,45 @@ static const unsigned int build_actionlist[5145] = {
 0xe5002000,
 0x000d8180,
 0xea000000,
-0x00050046,
-0x00060049,
+0x00050047,
+0x0006004a,
 0xe1c420d0,
 0xe35b0010,
 0x3a000000,
-0x00050043,
+0x00050044,
 0xe1a01002,
 0xe3730000,
 0x000a0000,
 0x00000000,
 0x1a000000,
-0x00050043,
+0x00050044,
 0xe1a00008,
 0xe2842008,
 0xeb000000,
-0x00030009,
+0x0003000a,
 0xe1c000d0,
 0xea000000,
-0x00050046,
-0x0006004a,
+0x00050047,
+0x0006004b,
 0xe1c400d0,
 0xe35b0008,
 0x3a000000,
-0x00050043,
+0x00050044,
 0xe3710000,
 0x000a0000,
 0x9a000000,
-0x00050046,
+0x00050047,
 0xea000000,
-0x00050043,
-0x0006004b,
+0x00050044,
+0x0006004c,
 0xe1c400d0,
 0xe35b0008,
 0x3a000000,
-0x00050043,
+0x00050044,
 0xe3710000,
 0x000a0000,
 0x0a000000,
-0x00050046,
+0x00050047,
 0xe5173000,
 0x000d8180,
 0xe5084000,
@@ -852,36 +865,36 @@ static const unsigned int build_actionlist[5145] = {
 0x93530000,
 0xe58d6008,
 0x8a000000,
-0x00050043,
+0x00050044,
 0xe5170000,
 0x000d8180,
 0xe5171000,
 0x000d8180,
 0xe1500001,
 0xab000000,
-0x0005004c,
+0x0005004d,
 0xe1a00008,
 0xe1a01004,
 0xeb000000,
-0x0003000a,
+0x0003000b,
 0xe5184000,
 0x000d8180,
 0xe3e01000,
 0x000a0000,
 0x00000000,
 0xea000000,
-0x00050046,
-0x0006004d,
+0x00050047,
+0x0006004e,
 0xe1c400d0,
 0xe35b0008,
 0x3a000000,
-0x00050043,
+0x00050044,
 0xe3e03000,
 0x000a0000,
 0xe3710000,
 0x000a0000,
 0x1a000000,
-0x00050043,
+0x00050044,
 0xe18420fb,
 0xe5146004,
 0xe1a01000,
@@ -893,12 +906,12 @@ static const unsigned int build_actionlist[5145] = {
 0xe2842008,
 0xe58d6008,
 0xeb000000,
-0x0003000b,
+0x0003000c,
 0xe3500000,
 0x03e01000,
 0x000a0000,
 0x0a000000,
-0x00050046,
+0x00050047,
 0xe1c400d8,
 0xe1c421d0,
 0xe3a0b000,
@@ -906,16 +919,16 @@ static const unsigned int build_actionlist[5145] = {
 0xe14400f8,
 0xe1c420f0,
 0xea000000,
-0x00050044,
-0x0006004e,
+0x00050045,
+0x0006004f,
 0xe1c400d0,
 0xe35b0008,
 0x3a000000,
-0x00050043,
+0x00050044,
 0xe3710000,
 0x000a0000,
 0x1a000000,
-0x00050043,
+0x00050044,
 0x00000000,
 0xe510c000,
 0x000d8180,
@@ -926,7 +939,7 @@ static const unsigned int build_actionlist[5145] = {
 0x00000000,
 0xe35c0000,
 0x1a000000,
-0x00050043,
+0x00050044,
 0x00000000,
 0xe3e01000,
 0x000a0000,
@@ -935,19 +948,19 @@ static const unsigned int build_actionlist[5145] = {
 0xe14420f8,
 0xe584100c,
 0xea000000,
-0x00050044,
-0x0006004f,
+0x00050045,
+0x00060050,
 0xe1c400d0,
 0xe1c420d8,
 0xe35b0010,
 0x3a000000,
-0x00050043,
+0x00050044,
 0xe3710000,
 0x000a0000,
 0x03730000,
 0x000a0000,
 0x1a000000,
-0x00050043,
+0x00050044,
 0xe510c000,
 0x000d8180,
 0xe510b000,
@@ -969,32 +982,32 @@ static const unsigned int build_actionlist[5145] = {
 0x000a0000,
 0x11c400f0,
 0xea000000,
-0x00050044,
+0x00050045,
 0x0006000c,
 0xe510c000,
 0x000d8180,
 0xe1a01002,
 0xe35c0000,
 0x0a000000,
-0x00050044,
+0x00050045,
 0xeb000000,
-0x0003000c,
+0x0003000d,
 0xe3500000,
 0x0a000000,
-0x00050044,
+0x00050045,
 0xe1c000d0,
 0xea000000,
 0x0005000b,
-0x00060050,
+0x00060051,
 0x00000000,
 0xe1c400d0,
 0xe35b0008,
 0x3a000000,
-0x00050043,
+0x00050044,
 0xe3710000,
 0x000a0000,
 0x1a000000,
-0x00050043,
+0x00050044,
 0x00000000,
 0xe510c000,
 0x000d8180,
@@ -1005,7 +1018,7 @@ static const unsigned int build_actionlist[5145] = {
 0x00000000,
 0xe35c0000,
 0x1a000000,
-0x00050043,
+0x00050044,
 0x00000000,
 0xe3a00000,
 0xe3e01000,
@@ -1015,13 +1028,13 @@ static const unsigned int build_actionlist[5145] = {
 0xe14420f8,
 0xe1c400f8,
 0xea000000,
-0x00050044,
-0x00060051,
+0x00050045,
+0x00060052,
 0xe557a000,
 0x000d8180,
 0xe35b0008,
 0x3a000000,
-0x00050043,
+0x00050044,
 0xe31a0000,
 0x000a0000,
 0xe1a0c004,
@@ -1033,18 +1046,18 @@ static const unsigned int build_actionlist[5145] = {
 0xe24bb008,
 0xea000000,
 0x00050024,
-0x00060052,
+0x00060053,
 0xe1c400d0,
 0xe1c420d8,
 0xe35b0010,
 0x3a000000,
-0x00050043,
+0x00050044,
 0xe557a000,
 0x000d8180,
 0xe3730000,
 0x000a0000,
 0x1a000000,
-0x00050043,
+0x00050044,
 0xe1a0c004,
 0xe1c400f8,
 0xe1c420f0,
@@ -1058,16 +1071,16 @@ static const unsigned int build_actionlist[5145] = {
 0xe24bb010,
 0xea000000,
 0x00050024,
-0x00060053,
+0x00060054,
 0xe1c400d0,
 0xe35b0008,
 0x3a000000,
-0x00050043,
+0x00050044,
 0xe3710000,
 0x000a0000,
 0x00000000,
 0x1a000000,
-0x00050043,
+0x00050044,
 0xe5146004,
 0xe5084000,
 0x000d8180,
@@ -1082,7 +1095,7 @@ static const unsigned int build_actionlist[5145] = {
 0xe58d6008,
 0xe153000c,
 0x0a000000,
-0x00050043,
+0x00050044,
 0xe5103000,
 0x000d8180,
 0xe510c000,
@@ -1092,7 +1105,7 @@ static const unsigned int build_actionlist[5145] = {
 0x91520003,
 0x935c0000,
 0x8a000000,
-0x00050043,
+0x00050044,
 0x0006000b,
 0xe2422008,
 0xe2844008,
@@ -1183,7 +1196,7 @@ static const unsigned int build_actionlist[5145] = {
 0xe3a00000,
 0xea000000,
 0x0005000e,
-0x00060054,
+0x00060055,
 0x00000000,
 0xe5120000,
 0x000d8180,
@@ -1201,7 +1214,7 @@ static const unsigned int build_actionlist[5145] = {
 0xe58d6008,
 0xe153000c,
 0x0a000000,
-0x00050043,
+0x00050044,
 0xe5103000,
 0x000d8180,
 0xe510c000,
@@ -1211,7 +1224,7 @@ static const unsigned int build_actionlist[5145] = {
 0x91520003,
 0x935c0000,
 0x8a000000,
-0x00050043,
+0x00050044,
 0x0006000b,
 0xe5002000,
 0x000d8180,
@@ -1280,7 +1293,7 @@ static const unsigned int build_actionlist[5145] = {
 0xe1a00008,
 0xe1a0100a,
 0xeb000000,
-0x0003000d,
+0x0003000e,
 0x00060013,
 0xe1a00008,
 0xe1a011ab,
@@ -1289,7 +1302,7 @@ static const unsigned int build_actionlist[5145] = {
 0xe3a00000,
 0xea000000,
 0x0005000e,
-0x00060055,
+0x00060056,
 0xe5180000,
 0x000d8180,
 0xe084100b,
@@ -1304,24 +1317,24 @@ static const unsigned int build_actionlist[5145] = {
 0x000a0000,
 0xe3a02000,
 0x0a000000,
-0x00050043,
+0x00050044,
 0xe5082000,
 0x000d8180,
 0xe5480000,
 0x000d8180,
 0xea000000,
 0x0005001a,
-0x00060056,
+0x00060057,
 0xe1c400d0,
 0xe35b0008,
 0x3a000000,
-0x00050043,
+0x00050044,
 0xe3710000,
 0x000a0000,
 0x0a000000,
-0x00050046,
+0x00050047,
 0x8a000000,
-0x00050043,
+0x00050044,
 0xe1a02081,
 0xe292c980,
 0x5a000000,
@@ -1345,7 +1358,7 @@ static const unsigned int build_actionlist[5145] = {
 0xe3e01000,
 0x000a0000,
 0xea000000,
-0x00050046,
+0x00050047,
 0x0006000c,
 0xe1822000,
 0xe1120fc1,
@@ -1354,7 +1367,7 @@ static const unsigned int build_actionlist[5145] = {
 0xe3e01000,
 0x000a0000,
 0xea000000,
-0x00050046,
+0x00050047,
 0x0006000d,
 0x03530480,
 0x03520000,
@@ -1367,20 +1380,20 @@ static const unsigned int build_actionlist[5145] = {
 0x0006000e,
 0x00000000,
 0xeb000000,
-0x0003000e,
+0x0003000f,
 0xea000000,
-0x00050046,
-0x00060057,
+0x00050047,
+0x00060058,
 0xe1c400d0,
 0xe35b0008,
 0x3a000000,
-0x00050043,
+0x00050044,
 0xe3710000,
 0x000a0000,
 0x0a000000,
-0x00050046,
+0x00050047,
 0x8a000000,
-0x00050043,
+0x00050044,
 0xe1a02081,
 0xe292c980,
 0x5a000000,
@@ -1401,14 +1414,14 @@ static const unsigned int build_actionlist[5145] = {
 0x614f00d0,
 0x00051809,
 0x6a000000,
-0x00050046,
+0x00050047,
 0xe3510000,
 0xb2600000,
 0x0006000b,
 0xe3e01000,
 0x000a0000,
 0xea000000,
-0x00050046,
+0x00050047,
 0x0006000c,
 0xe1822000,
 0xe1d22fc1,
@@ -1417,7 +1430,7 @@ static const unsigned int build_actionlist[5145] = {
 0xe3e01000,
 0x000a0000,
 0xea000000,
-0x00050046,
+0x00050047,
 0x0006000d,
 0x03530480,
 0x1a000000,
@@ -1428,38 +1441,38 @@ static const unsigned int build_actionlist[5145] = {
 0x0005000b,
 0x0006000e,
 0xeb000000,
-0x0003000f,
+0x00030010,
 0x00000000,
 0xea000000,
-0x00050046,
+0x00050047,
 0x00040007,
 0x00060013,
 0x00020000,
 0x00000000,
 0x41e00000,
-0x00060058,
+0x00060059,
 0xe1c400d0,
 0xe35b0008,
 0x3a000000,
-0x00050043,
+0x00050044,
 0xe3710000,
 0x000a0000,
 0x8a000000,
-0x00050043,
+0x00050044,
 0x13c11480,
 0x1a000000,
-0x00050046,
+0x00050047,
 0xe3500000,
 0xb2700000,
 0x614f00d0,
 0x00051813,
-0x00060046,
+0x00060047,
 0xe5146004,
 0xe14400f8,
-0x00060059,
+0x0006005a,
 0xe3a0b000,
 0x000a0000,
-0x00060044,
+0x00060045,
 0xe2160000,
 0x000a0000,
 0x0516e004,
@@ -1488,275 +1501,275 @@ static const unsigned int build_actionlist[5145] = {
 0xe5010004,
 0xea000000,
 0x0005000f,
-0x0006005a,
-0xe1c400d0,
-0xe35b0008,
-0x3a000000,
-0x00050043,
-0x00000000,
-0xe3710000,
-0x000a0000,
-0x2a000000,
-0x00050043,
-0xeb000000,
-0x00030010,
-0xea000000,
-0x00050046,
 0x0006005b,
 0xe1c400d0,
 0xe35b0008,
 0x3a000000,
-0x00050043,
+0x00050044,
+0x00000000,
 0xe3710000,
 0x000a0000,
 0x2a000000,
-0x00050043,
+0x00050044,
 0xeb000000,
 0x00030011,
 0xea000000,
-0x00050046,
+0x00050047,
 0x0006005c,
 0xe1c400d0,
 0xe35b0008,
 0x3a000000,
-0x00050043,
+0x00050044,
 0xe3710000,
 0x000a0000,
 0x2a000000,
-0x00050043,
+0x00050044,
 0xeb000000,
 0x00030012,
 0xea000000,
-0x00050046,
+0x00050047,
 0x0006005d,
 0xe1c400d0,
 0xe35b0008,
 0x3a000000,
-0x00050043,
+0x00050044,
 0xe3710000,
 0x000a0000,
 0x2a000000,
-0x00050043,
+0x00050044,
 0xeb000000,
 0x00030013,
 0xea000000,
-0x00050046,
+0x00050047,
 0x0006005e,
-0x00000000,
 0xe1c400d0,
 0xe35b0008,
 0x3a000000,
-0x00050043,
+0x00050044,
 0xe3710000,
 0x000a0000,
 0x2a000000,
-0x00050043,
+0x00050044,
 0xeb000000,
 0x00030014,
 0xea000000,
-0x00050046,
+0x00050047,
 0x0006005f,
+0x00000000,
 0xe1c400d0,
 0xe35b0008,
 0x3a000000,
-0x00050043,
+0x00050044,
 0xe3710000,
 0x000a0000,
 0x2a000000,
-0x00050043,
+0x00050044,
 0xeb000000,
 0x00030015,
 0xea000000,
-0x00050046,
+0x00050047,
 0x00060060,
 0xe1c400d0,
 0xe35b0008,
 0x3a000000,
-0x00050043,
+0x00050044,
 0xe3710000,
 0x000a0000,
 0x2a000000,
-0x00050043,
+0x00050044,
 0xeb000000,
 0x00030016,
 0xea000000,
-0x00050046,
+0x00050047,
 0x00060061,
 0xe1c400d0,
 0xe35b0008,
 0x3a000000,
-0x00050043,
+0x00050044,
 0xe3710000,
 0x000a0000,
 0x2a000000,
-0x00050043,
+0x00050044,
 0xeb000000,
 0x00030017,
-0x00000000,
 0xea000000,
-0x00050046,
+0x00050047,
 0x00060062,
 0xe1c400d0,
 0xe35b0008,
 0x3a000000,
-0x00050043,
+0x00050044,
 0xe3710000,
 0x000a0000,
 0x2a000000,
-0x00050043,
+0x00050044,
 0xeb000000,
 0x00030018,
+0x00000000,
 0xea000000,
-0x00050046,
+0x00050047,
 0x00060063,
 0xe1c400d0,
 0xe35b0008,
 0x3a000000,
-0x00050043,
+0x00050044,
 0xe3710000,
 0x000a0000,
 0x2a000000,
-0x00050043,
+0x00050044,
 0xeb000000,
 0x00030019,
 0xea000000,
-0x00050046,
+0x00050047,
 0x00060064,
 0xe1c400d0,
 0xe35b0008,
 0x3a000000,
-0x00050043,
+0x00050044,
 0xe3710000,
 0x000a0000,
 0x2a000000,
-0x00050043,
+0x00050044,
 0xeb000000,
 0x0003001a,
 0xea000000,
-0x00050046,
+0x00050047,
 0x00060065,
 0xe1c400d0,
 0xe35b0008,
 0x3a000000,
-0x00050043,
+0x00050044,
 0xe3710000,
 0x000a0000,
-0x00000000,
 0x2a000000,
-0x00050043,
+0x00050044,
 0xeb000000,
 0x0003001b,
 0xea000000,
-0x00050046,
+0x00050047,
 0x00060066,
 0xe1c400d0,
 0xe35b0008,
 0x3a000000,
-0x00050043,
+0x00050044,
 0xe3710000,
 0x000a0000,
+0x00000000,
 0x2a000000,
-0x00050043,
+0x00050044,
 0xeb000000,
 0x0003001c,
 0xea000000,
-0x00050046,
+0x00050047,
 0x00060067,
 0xe1c400d0,
-0xe1c420d8,
-0xe35b0010,
+0xe35b0008,
 0x3a000000,
-0x00050043,
+0x00050044,
 0xe3710000,
 0x000a0000,
-0x33730000,
-0x000a0000,
 0x2a000000,
-0x00050043,
+0x00050044,
 0xeb000000,
 0x0003001d,
 0xea000000,
-0x00050046,
+0x00050047,
 0x00060068,
 0xe1c400d0,
 0xe1c420d8,
 0xe35b0010,
 0x3a000000,
-0x00050043,
+0x00050044,
 0xe3710000,
 0x000a0000,
 0x33730000,
 0x000a0000,
 0x2a000000,
-0x00050043,
+0x00050044,
 0xeb000000,
 0x0003001e,
-0x00000000,
 0xea000000,
-0x00050046,
+0x00050047,
 0x00060069,
 0xe1c400d0,
 0xe1c420d8,
 0xe35b0010,
 0x3a000000,
-0x00050043,
+0x00050044,
 0xe3710000,
 0x000a0000,
 0x33730000,
 0x000a0000,
 0x2a000000,
-0x00050043,
+0x00050044,
 0xeb000000,
 0x0003001f,
+0x00000000,
 0xea000000,
-0x00050046,
+0x00050047,
 0x0006006a,
+0xe1c400d0,
+0xe1c420d8,
+0xe35b0010,
+0x3a000000,
+0x00050044,
+0xe3710000,
+0x000a0000,
+0x33730000,
+0x000a0000,
+0x2a000000,
+0x00050044,
+0xeb000000,
+0x00030020,
+0xea000000,
+0x00050047,
 0x0006006b,
+0x0006006c,
 0xe1c400d0,
 0xe35b0008,
 0x3a000000,
-0x00050043,
+0x00050044,
 0xe3710000,
 0x000a0000,
 0x2a000000,
-0x00050043,
+0x00050044,
 0xe14220d0,
 0x000c8100,
 0xeb000000,
-0x00030020,
+0x00030021,
 0xea000000,
-0x00050046,
-0x0006006c,
+0x00050047,
+0x0006006d,
 0xe1c400d0,
 0xe1c420d8,
 0xe35b0010,
 0x3a000000,
-0x00050043,
+0x00050044,
 0xe3710000,
 0x000a0000,
 0x2a000000,
-0x00050043,
+0x00050044,
 0xe3730000,
 0x000a0000,
 0x1a000000,
-0x00050043,
+0x00050044,
 0x00000000,
 0xeb000000,
-0x00030021,
+0x00030022,
 0xea000000,
-0x00050046,
-0x0006006d,
+0x00050047,
+0x0006006e,
 0xe1c400d0,
 0xe35b0008,
 0x3a000000,
-0x00050043,
+0x00050044,
 0xe3710000,
 0x000a0000,
 0x2a000000,
-0x00050043,
+0x00050044,
 0xe1a0200d,
 0xeb000000,
-0x00030022,
+0x00030023,
 0xe59d2000,
 0xe3e03000,
 0x000a0000,
@@ -1766,30 +1779,30 @@ static const unsigned int build_actionlist[5145] = {
 0x000a0000,
 0xe1c420f0,
 0xea000000,
-0x00050044,
-0x0006006e,
+0x00050045,
+0x0006006f,
 0xe1c400d0,
 0xe35b0008,
 0x3a000000,
-0x00050043,
+0x00050044,
 0xe3710000,
 0x000a0000,
 0x2a000000,
-0x00050043,
+0x00050044,
 0xe2442008,
 0xe5146004,
 0xeb000000,
-0x00030023,
+0x00030024,
 0xe3a0b000,
 0x000a0000,
 0xe1c400f0,
 0xea000000,
-0x00050044,
-0x0006006f,
+0x00050045,
+0x00060070,
 0xe1c400d0,
 0xe35b0008,
 0x3a000000,
-0x00050043,
+0x00050044,
 0xe3710000,
 0x000a0000,
 0xe3a0a008,
@@ -1800,7 +1813,7 @@ static const unsigned int build_actionlist[5145] = {
 0xe18420da,
 0xe15a000b,
 0x2a000000,
-0x00050046,
+0x00050047,
 0xe3730000,
 0x000a0000,
 0x1a000000,
@@ -1812,27 +1825,27 @@ static const unsigned int build_actionlist[5145] = {
 0x0005000b,
 0x0006000d,
 0x8a000000,
-0x00050043,
+0x00050044,
 0xeb000000,
-0x00030024,
+0x00030025,
 0xe18420da,
 0xea000000,
 0x00050006,
 0x0006000e,
 0x8a000000,
-0x00050043,
+0x00050044,
 0x0006000f,
 0xe18420da,
 0xe15a000b,
 0x2a000000,
-0x00050046,
+0x00050047,
 0xe3730000,
 0x000a0000,
 0x2a000000,
 0x00050007,
 0x00060010,
 0xeb000000,
-0x00030025,
+0x00030026,
 0xe28aa008,
 0x81a00002,
 0x81a01003,
@@ -1840,20 +1853,20 @@ static const unsigned int build_actionlist[5145] = {
 0x0005000f,
 0x00060011,
 0x8a000000,
-0x00050043,
+0x00050044,
 0xe1cd00f0,
 0xe1a00002,
 0xeb000000,
-0x00030024,
+0x00030025,
 0xe1cd20d0,
 0xea000000,
 0x00050010,
-0x00060070,
+0x00060071,
 0x00000000,
 0xe1c400d0,
 0xe35b0008,
 0x3a000000,
-0x00050043,
+0x00050044,
 0xe3710000,
 0x000a0000,
 0xe3a0a008,
@@ -1863,7 +1876,7 @@ static const unsigned int build_actionlist[5145] = {
 0xe18420da,
 0xe15a000b,
 0x2a000000,
-0x00050046,
+0x00050047,
 0xe3730000,
 0x000a0000,
 0x1a000000,
@@ -1875,27 +1888,27 @@ static const unsigned int build_actionlist[5145] = {
 0x0005000b,
 0x0006000d,
 0x8a000000,
-0x00050043,
+0x00050044,
 0xeb000000,
-0x00030024,
+0x00030025,
 0xe18420da,
 0xea000000,
 0x00050006,
 0x0006000e,
 0x8a000000,
-0x00050043,
+0x00050044,
 0x0006000f,
 0xe18420da,
 0xe15a000b,
 0x2a000000,
-0x00050046,
+0x00050047,
 0xe3730000,
 0x000a0000,
 0x2a000000,
 0x00050007,
 0x00060010,
 0xeb000000,
-0x00030025,
+0x00030026,
 0xe28aa008,
 0x31a00002,
 0x31a01003,
@@ -1904,37 +1917,37 @@ static const unsigned int build_actionlist[5145] = {
 0x00060011,
 0x00000000,
 0x8a000000,
-0x00050043,
+0x00050044,
 0xe1cd00f0,
 0xe1a00002,
 0xeb000000,
-0x00030024,
+0x00030025,
 0xe1cd20d0,
 0xea000000,
 0x00050010,
-0x00060071,
+0x00060072,
 0xe1c400d0,
 0xe35b0008,
 0x3a000000,
-0x00050043,
+0x00050044,
 0xe3710000,
 0x000a0000,
 0x1a000000,
-0x00050043,
+0x00050044,
 0xe5100000,
 0x000d8180,
 0xe3e01000,
 0x000a0000,
 0xea000000,
-0x00050046,
-0x00060072,
+0x00050047,
+0x00060073,
 0xe1c400d0,
 0xe5146004,
 0xe35b0008,
 0x03710000,
 0x000a0000,
 0x1a000000,
-0x00050043,
+0x00050044,
 0xe5102000,
 0x000d8180,
 0xe5500000,
@@ -1948,8 +1961,8 @@ static const unsigned int build_actionlist[5145] = {
 0x000a0000,
 0xe14400f8,
 0xea000000,
-0x00050044,
-0x00060073,
+0x00050045,
+0x00060074,
 0xe5170000,
 0x000d8180,
 0xe5171000,
@@ -1957,7 +1970,7 @@ static const unsigned int build_actionlist[5145] = {
 0x00000000,
 0xe1500001,
 0xab000000,
-0x0005004c,
+0x0005004d,
 0xe1c400d0,
 0xe5146004,
 0xe35b0008,
@@ -1966,30 +1979,30 @@ static const unsigned int build_actionlist[5145] = {
 0x03d030ff,
 0xe3a02001,
 0x1a000000,
-0x00050043,
+0x00050044,
 0xe58d0000,
 0xe1a0100d,
-0x00060074,
+0x00060075,
 0xe5084000,
 0x000d8180,
 0xe1a00008,
 0xe58d6008,
 0xeb000000,
-0x00030026,
+0x00030027,
 0xe5184000,
 0x000d8180,
 0xe3e01000,
 0x000a0000,
 0xea000000,
-0x00050046,
-0x00060075,
+0x00050047,
+0x00060076,
 0xe5170000,
 0x000d8180,
 0xe5171000,
 0x000d8180,
 0xe1500001,
 0xab000000,
-0x0005004c,
+0x0005004d,
 0xe1c400d0,
 0xe1c421d0,
 0xe35b0010,
@@ -1997,12 +2010,12 @@ static const unsigned int build_actionlist[5145] = {
 0x0a000000,
 0x00050001,
 0x3a000000,
-0x00050043,
+0x00050044,
 0xe3730000,
 0x000a0000,
 0xe1a0c002,
 0x1a000000,
-0x00050043,
+0x00050044,
 0x0006000b,
 0xe5942008,
 0xe3710000,
@@ -2012,7 +2025,7 @@ static const unsigned int build_actionlist[5145] = {
 0x03730000,
 0x000a0000,
 0x1a000000,
-0x00050043,
+0x00050044,
 0x00000000,
 0xe2813001,
 0xe3520000,
@@ -2030,43 +2043,43 @@ static const unsigned int build_actionlist[5145] = {
 0xe05c2002,
 0xe2822001,
 0xaa000000,
-0x00050074,
-0x00060076,
+0x00050075,
+0x00060077,
 0xe2470000,
 0x000a0000,
 0xe3e01000,
 0x000a0000,
 0xea000000,
-0x00050046,
-0x00060077,
+0x00050047,
+0x00060078,
 0xe5170000,
 0x000d8180,
 0xe5171000,
 0x000d8180,
 0xe1500001,
 0xab000000,
-0x0005004c,
+0x0005004d,
 0xe1c400d0,
 0xe1c420d8,
 0xe35b0010,
 0x3a000000,
-0x00050043,
+0x00050044,
 0xe3710000,
 0x000a0000,
 0x03730000,
 0x000a0000,
 0x1a000000,
-0x00050043,
+0x00050044,
 0xe2523001,
 0xe5101000,
 0x000d8180,
 0xba000000,
-0x00050076,
+0x00050077,
 0xe3510001,
 0x3a000000,
-0x00050076,
+0x00050077,
 0x1a000000,
-0x00050043,
+0x00050044,
 0xe517c000,
 0x000d8180,
 0xe5171000,
@@ -2075,7 +2088,7 @@ static const unsigned int build_actionlist[5145] = {
 0x000d8180,
 0xe15c0002,
 0x3a000000,
-0x00050043,
+0x00050044,
 0x0006000b,
 0x00000000,
 0xe7c10003,
@@ -2083,23 +2096,23 @@ static const unsigned int build_actionlist[5145] = {
 0xaa000000,
 0x0005000b,
 0xea000000,
-0x00050074,
-0x00060078,
+0x00050075,
+0x00060079,
 0xe5170000,
 0x000d8180,
 0xe5171000,
 0x000d8180,
 0xe1500001,
 0xab000000,
-0x0005004c,
+0x0005004d,
 0xe1c400d0,
 0xe35b0008,
 0x3a000000,
-0x00050043,
+0x00050044,
 0xe3710000,
 0x000a0000,
 0x1a000000,
-0x00050043,
+0x00050044,
 0xe5102000,
 0x000d8180,
 0xe517c000,
@@ -2111,32 +2124,32 @@ static const unsigned int build_actionlist[5145] = {
 0x000a0000,
 0xe15c0002,
 0x3a000000,
-0x00050043,
+0x00050044,
 0x0006000b,
 0xe4d0c001,
 0xe2533001,
 0xba000000,
-0x00050074,
+0x00050075,
 0xe7c1c003,
 0xea000000,
 0x0005000b,
-0x00060079,
+0x0006007a,
 0xe5170000,
 0x000d8180,
 0xe5171000,
 0x000d8180,
 0xe1500001,
 0xab000000,
-0x0005004c,
+0x0005004d,
 0xe1c400d0,
 0xe35b0008,
 0x3a000000,
-0x00050043,
+0x00050044,
 0x00000000,
 0xe3710000,
 0x000a0000,
 0x1a000000,
-0x00050043,
+0x00050044,
 0xe5102000,
 0x000d8180,
 0xe517c000,
@@ -2148,12 +2161,12 @@ static const unsigned int build_actionlist[5145] = {
 0x000a0000,
 0xe15c0002,
 0x3a000000,
-0x00050043,
+0x00050044,
 0x0006000b,
 0xe7d0c003,
 0xe1530002,
 0x2a000000,
-0x00050074,
+0x00050075,
 0xe24cb041,
 0xe35b001a,
 0x322cc020,
@@ -2161,22 +2174,22 @@ static const unsigned int build_actionlist[5145] = {
 0xe2833001,
 0xea000000,
 0x0005000b,
-0x0006007a,
+0x0006007b,
 0xe5170000,
 0x000d8180,
 0xe5171000,
 0x000d8180,
 0xe1500001,
 0xab000000,
-0x0005004c,
+0x0005004d,
 0xe1c400d0,
 0xe35b0008,
 0x3a000000,
-0x00050043,
+0x00050044,
 0xe3710000,
 0x000a0000,
 0x1a000000,
-0x00050043,
+0x00050044,
 0xe5102000,
 0x000d8180,
 0xe517c000,
@@ -2188,13 +2201,13 @@ static const unsigned int build_actionlist[5145] = {
 0x000a0000,
 0xe15c0002,
 0x3a000000,
-0x00050043,
+0x00050044,
 0x0006000b,
 0x00000000,
 0xe7d0c003,
 0xe1530002,
 0x2a000000,
-0x00050074,
+0x00050075,
 0xe24cb061,
 0xe35b001a,
 0x322cc020,
@@ -2202,25 +2215,25 @@ static const unsigned int build_actionlist[5145] = {
 0xe2833001,
 0xea000000,
 0x0005000b,
-0x0006007b,
+0x0006007c,
 0xe1c400d0,
 0xe35b0008,
 0x3a000000,
-0x00050043,
+0x00050044,
 0xe3710000,
 0x000a0000,
 0x1a000000,
-0x00050043,
+0x00050044,
 0xeb000000,
-0x00030027,
+0x00030028,
 0xe3e01000,
 0x000a0000,
 0xea000000,
-0x00050046,
-0x0006007c,
-0x8a000000,
-0x00050043,
+0x00050047,
 0x0006007d,
+0x8a000000,
+0x00050044,
+0x0006007e,
 0xe1a0c081,
 0xe29cc980,
 0x53a00000,
@@ -2245,29 +2258,29 @@ static const unsigned int build_actionlist[5145] = {
 0xe1830c10,
 0xb2600000,
 0xe12fff1e,
-0x0006007e,
+0x0006007f,
 0xe1c400d0,
 0xe35b0008,
 0x3a000000,
-0x00050043,
+0x00050044,
 0xe3710000,
 0x000a0000,
 0x1b000000,
-0x0005007c,
+0x0005007d,
 0xe3e01000,
 0x000a0000,
 0xea000000,
-0x00050046,
-0x0006007f,
+0x00050047,
+0x00060080,
 0xe1c400d0,
 0xe35b0008,
 0x3a000000,
-0x00050043,
+0x00050044,
 0x00000000,
 0xe3710000,
 0x000a0000,
 0x1b000000,
-0x0005007c,
+0x0005007d,
 0xe1a02000,
 0xe3a0a008,
 0x0006000b,
@@ -2279,19 +2292,19 @@ static const unsigned int build_actionlist[5145] = {
 0xe3710000,
 0x000a0000,
 0x1b000000,
-0x0005007c,
+0x0005007d,
 0xe0022000,
 0xea000000,
 0x0005000b,
-0x00060080,
+0x00060081,
 0xe1c400d0,
 0xe35b0008,
 0x3a000000,
-0x00050043,
+0x00050044,
 0xe3710000,
 0x000a0000,
 0x1b000000,
-0x0005007c,
+0x0005007d,
 0xe1a02000,
 0xe3a0a008,
 0x0006000b,
@@ -2303,19 +2316,19 @@ static const unsigned int build_actionlist[5145] = {
 0xe3710000,
 0x000a0000,
 0x1b000000,
-0x0005007c,
+0x0005007d,
 0xe1822000,
 0xea000000,
 0x0005000b,
-0x00060081,
+0x00060082,
 0xe1c400d0,
 0xe35b0008,
 0x3a000000,
-0x00050043,
+0x00050044,
 0xe3710000,
 0x000a0000,
 0x1b000000,
-0x0005007c,
+0x0005007d,
 0xe1a02000,
 0xe3a0a008,
 0x0006000b,
@@ -2328,7 +2341,7 @@ static const unsigned int build_actionlist[5145] = {
 0xe3710000,
 0x000a0000,
 0x1b000000,
-0x0005007c,
+0x0005007d,
 0xe0222000,
 0xea000000,
 0x0005000b,
@@ -2338,16 +2351,16 @@ static const unsigned int build_actionlist[5145] = {
 0xe5146004,
 0xe14420f8,
 0xea000000,
-0x00050059,
-0x00060082,
+0x0005005a,
+0x00060083,
 0xe1c400d0,
 0xe35b0008,
 0x3a000000,
-0x00050043,
+0x00050044,
 0xe3710000,
 0x000a0000,
 0x1b000000,
-0x0005007c,
+0x0005007d,
 0xe0202860,
 0xe3c228ff,
 0xe1a00460,
@@ -2355,124 +2368,124 @@ static const unsigned int build_actionlist[5145] = {
 0x000a0000,
 0xe0200422,
 0xea000000,
-0x00050046,
-0x00060083,
+0x00050047,
+0x00060084,
 0xe1c400d0,
 0xe35b0008,
 0x3a000000,
-0x00050043,
+0x00050044,
 0xe3710000,
 0x000a0000,
 0x1b000000,
-0x0005007c,
+0x0005007d,
 0xe1e00000,
 0xe3e01000,
 0x000a0000,
 0xea000000,
-0x00050046,
-0x00060084,
+0x00050047,
+0x00060085,
 0xe1c400d8,
 0xe35b0010,
 0x3a000000,
-0x00050043,
+0x00050044,
 0xe3710000,
 0x000a0000,
 0x1b000000,
-0x0005007c,
+0x0005007d,
 0x00000000,
 0xe200a01f,
 0xe1c400d0,
 0xe3710000,
 0x000a0000,
 0x1b000000,
-0x0005007c,
+0x0005007d,
 0xe1a00a10,
 0xe3e01000,
 0x000a0000,
 0xea000000,
-0x00050046,
-0x00060085,
+0x00050047,
+0x00060086,
 0xe1c400d8,
 0xe35b0010,
 0x3a000000,
-0x00050043,
+0x00050044,
 0xe3710000,
 0x000a0000,
 0x1b000000,
-0x0005007c,
+0x0005007d,
 0xe200a01f,
 0xe1c400d0,
 0xe3710000,
 0x000a0000,
 0x1b000000,
-0x0005007c,
+0x0005007d,
 0xe1a00a30,
 0xe3e01000,
 0x000a0000,
 0xea000000,
-0x00050046,
-0x00060086,
+0x00050047,
+0x00060087,
 0xe1c400d8,
 0xe35b0010,
 0x3a000000,
-0x00050043,
+0x00050044,
 0xe3710000,
 0x000a0000,
 0x1b000000,
-0x0005007c,
+0x0005007d,
 0xe200a01f,
 0xe1c400d0,
 0xe3710000,
 0x000a0000,
 0x1b000000,
-0x0005007c,
+0x0005007d,
 0xe1a00a50,
 0xe3e01000,
 0x000a0000,
 0xea000000,
-0x00050046,
-0x00060087,
+0x00050047,
+0x00060088,
 0xe1c400d8,
 0xe35b0010,
 0x3a000000,
-0x00050043,
+0x00050044,
 0x00000000,
 0xe3710000,
 0x000a0000,
 0x1b000000,
-0x0005007c,
+0x0005007d,
 0xe260a000,
 0xe1c400d0,
 0xe3710000,
 0x000a0000,
 0x1b000000,
-0x0005007c,
+0x0005007d,
 0xe1a00a70,
 0xe3e01000,
 0x000a0000,
 0xea000000,
-0x00050046,
-0x00060088,
+0x00050047,
+0x00060089,
 0xe1c400d8,
 0xe35b0010,
 0x3a000000,
-0x00050043,
+0x00050044,
 0xe3710000,
 0x000a0000,
 0x1b000000,
-0x0005007c,
+0x0005007d,
 0xe200a01f,
 0xe1c400d0,
 0xe3710000,
 0x000a0000,
 0x1b000000,
-0x0005007c,
+0x0005007d,
 0xe1a00a70,
 0xe3e01000,
 0x000a0000,
 0xea000000,
-0x00050046,
-0x00060043,
+0x00050047,
+0x00060044,
 0xe5142008,
 0xe5181000,
 0x000d8180,
@@ -2499,7 +2512,7 @@ static const unsigned int build_actionlist[5145] = {
 0xe1a0b180,
 0xe244a008,
 0xca000000,
-0x00050044,
+0x00050045,
 0x0006000b,
 0xe5180000,
 0x000d8180,
@@ -2536,7 +2549,7 @@ static const unsigned int build_actionlist[5145] = {
 0xe1500000,
 0xea000000,
 0x0005000b,
-0x0006004c,
+0x0006004d,
 0xe1a0a00e,
 0xe5084000,
 0x000d8180,
@@ -2546,17 +2559,17 @@ static const unsigned int build_actionlist[5145] = {
 0x000d8180,
 0xe1a00008,
 0xeb000000,
-0x00030028,
+0x00030029,
 0xe5184000,
 0x000d8180,
 0xe1a0e00a,
 0xe5142008,
 0xe12fff1e,
-0x00060089,
+0x0006008a,
 0x00000000,
 0xe7f001f0,
 0x00000000,
-0x0006008a,
+0x0006008b,
 0xe5570000,
 0x000d8180,
 0xe3100000,
@@ -2568,7 +2581,7 @@ static const unsigned int build_actionlist[5145] = {
 0xe087c10c,
 0xe51cf000,
 0x000d8180,
-0x0006008b,
+0x0006008c,
 0xe5570000,
 0x000d8180,
 0xe5171000,
@@ -2596,7 +2609,7 @@ static const unsigned int build_actionlist[5145] = {
 0x000d8180,
 0xe1a01006,
 0xeb000000,
-0x00030029,
+0x0003002a,
 0x0006000d,
 0xe5184000,
 0x000d8180,
@@ -2610,23 +2623,23 @@ static const unsigned int build_actionlist[5145] = {
 0xe009a2ae,
 0xe1a0b82e,
 0xe12fff1c,
-0x0006008c,
+0x0006008d,
 0xe5130018,
 0xe2866004,
 0xe58d0004,
 0xea000000,
 0x0005000e,
-0x0006008d,
+0x0006008e,
 0x00000000,
 0xe7f001f0,
 0x00000000,
-0x0006008e,
+0x0006008f,
 0xe1a01006,
 0x00000000,
 0xea000000,
 0x00050001,
 0x00000000,
-0x0006008f,
+0x00060090,
 0x00000000,
 0xe3861001,
 0x0006000b,
@@ -2640,7 +2653,7 @@ static const unsigned int build_actionlist[5145] = {
 0xe5083000,
 0x000d8180,
 0xeb000000,
-0x0003002a,
+0x0003002b,
 0xe5184000,
 0x000d8180,
 0xe5183000,
@@ -2651,40 +2664,40 @@ static const unsigned int build_actionlist[5145] = {
 0xe58d1008,
 0xe5142008,
 0xe12fff10,
-0x00060090,
-0x00000000,
-0xe7f001f0,
-0x00000000,
 0x00060091,
 0x00000000,
 0xe7f001f0,
 0x00000000,
 0x00060092,
+0x00000000,
 0xe7f001f0,
+0x00000000,
 0x00060093,
 0xe7f001f0,
-0x00000000,
 0x00060094,
 0xe7f001f0,
 0x00000000,
-0x00060094,
+0x00060095,
+0xe7f001f0,
 0x00000000,
 0x00060095,
+0x00000000,
+0x00060096,
 0xe92d401f,
 0xeb000000,
-0x0003002b,
+0x0003002c,
 0xeb000000,
-0x0003000e,
+0x0003000f,
 0xe1cd20d8,
 0xeb000000,
-0x00030020,
+0x00030021,
 0xe1cd20d0,
 0xe2211480,
 0xeb000000,
-0x0003002c,
+0x0003002d,
 0xe28dd014,
 0xe8bd8000,
-0x00060096,
+0x00060097,
 0xe210c480,
 0x42600000,
 0xe02cc0c1,
@@ -2717,37 +2730,37 @@ static const unsigned int build_actionlist[5145] = {
 0xe030108c,
 0x42600000,
 0xe12fff1e,
-0x00060097,
+0x00060098,
 0x00000000,
 0xe7f001f0,
 0x00000000,
-0x00060098,
+0x00060099,
 0x00000000,
 0xe7f001f0,
 0x00000000,
-0x00060099,
+0x0006009a,
 0xe59dc000,
 0xe35c0001,
 0x3a000000,
-0x0003002c,
-0x0a000000,
 0x0003002d,
+0x0a000000,
+0x0003002e,
 0xe35c0003,
 0x3a000000,
-0x00030020,
+0x00030021,
 0x0a000000,
-0x0003002b,
+0x0003002c,
 0xe35c0005,
 0x3a000000,
-0x00050095,
+0x00050096,
 0x0a000000,
-0x0003001d,
+0x0003001e,
 0xe35c0007,
 0x32211480,
 0x03c11480,
 0x912fff1e,
 0xe7f001f0,
-0x0006009a,
+0x0006009b,
 0x00000000,
 0xe92d4830,
 0xe1a04000,
@@ -2832,7 +2845,7 @@ static const unsigned int build_actionlist[5145] = {
 0xe1a0b00a,
 0xe1a0a00c,
 0xeb000000,
-0x00030024,
+0x00030025,
 0xe1a02000,
 0xe1a03001,
 0xe1cb00d0,
@@ -2843,11 +2856,11 @@ static const unsigned int build_actionlist[5145] = {
 0x00050034,
 0xe1a0a00c,
 0xeb000000,
-0x00030024,
+0x00030025,
 0xe1cb20d0,
 0x0006000f,
 0xeb000000,
-0x00030025,
+0x00030026,
 0x00000000,
 0x324a6b80,
 0x00000000,
@@ -2872,10 +2885,17 @@ static const unsigned int build_actionlist[5145] = {
 0x000a0000,
 0x00000000,
 0x9a000000,
-0x0005009b,
+0x0005009c,
 0x00000000,
 0x9a000000,
-0x0005009c,
+0x0005009d,
+0x00000000,
+0xe3710000,
+0x000a0000,
+0x13730000,
+0x000a0000,
+0x0a000000,
+0x0005003a,
 0x00000000,
 0xe1510003,
 0x1a000000,
@@ -2948,10 +2968,17 @@ static const unsigned int build_actionlist[5145] = {
 0xe086c10c,
 0xe3710000,
 0x000a0000,
+0x00000000,
+0x1a000000,
+0x00050007,
+0xe1500002,
+0x00000000,
 0x01500002,
 0x00000000,
 0x024c6b80,
+0x0006000b,
 0x00000000,
+0x0006000b,
 0x124c6b80,
 0x00000000,
 0xe5d6c000,
@@ -2961,6 +2988,14 @@ static const unsigned int build_actionlist[5145] = {
 0xe1a0b82e,
 0xe12fff1c,
 0x00000000,
+0x00060011,
+0xe3710000,
+0x000a0000,
+0x1a000000,
+0x0005000b,
+0xea000000,
+0x0005003a,
+0x00000000,
 0xe1a0b18b,
 0xe1aa00d4,
 0xe1d6c0b2,
@@ -2968,10 +3003,10 @@ static const unsigned int build_actionlist[5145] = {
 0xe2866004,
 0xe086c10c,
 0x00000000,
-0x0006009b,
-0x00000000,
 0x0006009c,
 0x00000000,
+0x0006009d,
+0x00000000,
 0xe3710000,
 0x000a0000,
 0x1a000000,
@@ -2983,10 +3018,12 @@ static const unsigned int build_actionlist[5145] = {
 0xe1500002,
 0x00000000,
 0x024c6b80,
+0x0006000b,
 0x00000000,
+0x0006000b,
 0x124c6b80,
 0x00000000,
-0x0006000b,
+0x0006000c,
 0xe5d6c000,
 0xe496e004,
 0xe797c10c,
@@ -2995,10 +3032,14 @@ static const unsigned int build_actionlist[5145] = {
 0xe12fff1c,
 0x0006000d,
 0x00000000,
+0x8a000000,
+0x00050007,
+0x00000000,
 0x824c6b80,
 0x00000000,
 0x8a000000,
-0x0005000b,
+0x0005000c,
+0x00000000,
 0xe3730000,
 0x000a0000,
 0x31a0a00c,
@@ -3009,24 +3050,38 @@ static const unsigned int build_actionlist[5145] = {
 0x0006000e,
 0xe1a0a00c,
 0xeb000000,
-0x00030024,
+0x00030025,
 0xe1cb20d0,
 0x0006000f,
 0xeb000000,
-0x0003002e,
+0x0003002f,
 0x00000000,
 0x024a6b80,
 0x00000000,
 0x124a6b80,
 0x00000000,
 0xea000000,
+0x0005000c,
+0x00000000,
+0x00060011,
+0xe3710000,
+0x000a0000,
+0x1a000000,
 0x0005000b,
+0xea000000,
+0x0005003a,
 0x00000000,
 0xe18400da,
 0xe1d6c0b2,
 0xe2866004,
 0xe1e0b00b,
 0xe086c10c,
+0x00000000,
+0xe3710000,
+0x000a0000,
+0x0a000000,
+0x0005003a,
+0x00000000,
 0xe151000b,
 0x00000000,
 0x024c6b80,
@@ -3097,7 +3152,7 @@ static const unsigned int build_actionlist[5145] = {
 0xe3710000,
 0x000a0000,
 0x8a000000,
-0x0005003c,
+0x0005003d,
 0x12211480,
 0x1a000000,
 0x00050005,
@@ -3138,9 +3193,9 @@ static const unsigned int build_actionlist[5145] = {
 0xe3710000,
 0x000a0000,
 0x1a000000,
-0x0005003e,
+0x0005003f,
 0xeb000000,
-0x00030027,
+0x00030028,
 0xea000000,
 0x0005000b,
 0x00000000,
@@ -3173,13 +3228,13 @@ static const unsigned int build_actionlist[5145] = {
 0xe0900002,
 0x00000000,
 0x6a000000,
-0x0005003a,
+0x0005003b,
 0x00000000,
 0x6a000000,
-0x0005003b,
+0x0005003c,
 0x00000000,
 0x6a000000,
-0x0005003d,
+0x0005003e,
 0x00000000,
 0x0006000e,
 0xe496e004,
@@ -3201,7 +3256,7 @@ static const unsigned int build_actionlist[5145] = {
 0x000a0000,
 0x00000000,
 0x2a000000,
-0x0005003a,
+0x0005003b,
 0x00000000,
 0xe3730000,
 0x000a0000,
@@ -3214,7 +3269,7 @@ static const unsigned int build_actionlist[5145] = {
 0x000a0000,
 0x00000000,
 0x2a000000,
-0x0005003b,
+0x0005003c,
 0x00000000,
 0xe3730000,
 0x000a0000,
@@ -3227,10 +3282,10 @@ static const unsigned int build_actionlist[5145] = {
 0x000a0000,
 0x00000000,
 0x2a000000,
-0x0005003d,
+0x0005003e,
 0x00000000,
 0xeb000000,
-0x0003002c,
+0x0003002d,
 0xe5d6c000,
 0xea000000,
 0x0005000e,
@@ -3264,13 +3319,13 @@ static const unsigned int build_actionlist[5145] = {
 0xe0500002,
 0x00000000,
 0x6a000000,
-0x0005003a,
+0x0005003b,
 0x00000000,
 0x6a000000,
-0x0005003b,
+0x0005003c,
 0x00000000,
 0x6a000000,
-0x0005003d,
+0x0005003e,
 0x00000000,
 0x0006000e,
 0xe496e004,
@@ -3292,7 +3347,7 @@ static const unsigned int build_actionlist[5145] = {
 0x000a0000,
 0x00000000,
 0x2a000000,
-0x0005003a,
+0x0005003b,
 0x00000000,
 0xe3730000,
 0x000a0000,
@@ -3305,7 +3360,7 @@ static const unsigned int build_actionlist[5145] = {
 0x000a0000,
 0x00000000,
 0x2a000000,
-0x0005003b,
+0x0005003c,
 0x00000000,
 0xe3730000,
 0x000a0000,
@@ -3318,10 +3373,10 @@ static const unsigned int build_actionlist[5145] = {
 0x000a0000,
 0x00000000,
 0x2a000000,
-0x0005003d,
+0x0005003e,
 0x00000000,
 0xeb000000,
-0x0003002d,
+0x0003002e,
 0xe5d6c000,
 0xea000000,
 0x0005000e,
@@ -3356,13 +3411,13 @@ static const unsigned int build_actionlist[5145] = {
 0xe15b0fc0,
 0x00000000,
 0x1a000000,
-0x0005003a,
+0x0005003b,
 0x00000000,
 0x1a000000,
-0x0005003b,
+0x0005003c,
 0x00000000,
 0x1a000000,
-0x0005003d,
+0x0005003e,
 0x00000000,
 0x0006000e,
 0xe496e004,
@@ -3384,7 +3439,7 @@ static const unsigned int build_actionlist[5145] = {
 0x000a0000,
 0x00000000,
 0x2a000000,
-0x0005003a,
+0x0005003b,
 0x00000000,
 0xe3730000,
 0x000a0000,
@@ -3397,7 +3452,7 @@ static const unsigned int build_actionlist[5145] = {
 0x000a0000,
 0x00000000,
 0x2a000000,
-0x0005003b,
+0x0005003c,
 0x00000000,
 0xe3730000,
 0x000a0000,
@@ -3410,10 +3465,10 @@ static const unsigned int build_actionlist[5145] = {
 0x000a0000,
 0x00000000,
 0x2a000000,
-0x0005003d,
+0x0005003e,
 0x00000000,
 0xeb000000,
-0x00030020,
+0x00030021,
 0xe5d6c000,
 0xea000000,
 0x0005000e,
@@ -3441,7 +3496,7 @@ static const unsigned int build_actionlist[5145] = {
 0x000a0000,
 0x00000000,
 0x2a000000,
-0x0005003a,
+0x0005003b,
 0x00000000,
 0xe3730000,
 0x000a0000,
@@ -3454,7 +3509,7 @@ static const unsigned int build_actionlist[5145] = {
 0x000a0000,
 0x00000000,
 0x2a000000,
-0x0005003b,
+0x0005003c,
 0x00000000,
 0xe3730000,
 0x000a0000,
@@ -3467,10 +3522,10 @@ static const unsigned int build_actionlist[5145] = {
 0x000a0000,
 0x00000000,
 0x2a000000,
-0x0005003d,
+0x0005003e,
 0x00000000,
 0xeb000000,
-0x0003002b,
+0x0003002c,
 0xe5d6c000,
 0xe496e004,
 0xe18400fa,
@@ -3506,16 +3561,16 @@ static const unsigned int build_actionlist[5145] = {
 0xe1b01002,
 0x00000000,
 0x0a000000,
-0x0005003a,
+0x0005003b,
 0x00000000,
 0x0a000000,
-0x0005003b,
+0x0005003c,
 0x00000000,
 0x0a000000,
-0x0005003d,
+0x0005003e,
 0x00000000,
 0xeb000000,
-0x00050096,
+0x00050097,
 0xe3e01000,
 0x000a0000,
 0x0006000e,
@@ -3539,7 +3594,7 @@ static const unsigned int build_actionlist[5145] = {
 0x000a0000,
 0x00000000,
 0x2a000000,
-0x0005003a,
+0x0005003b,
 0x00000000,
 0xe3730000,
 0x000a0000,
@@ -3552,7 +3607,7 @@ static const unsigned int build_actionlist[5145] = {
 0x000a0000,
 0x00000000,
 0x2a000000,
-0x0005003b,
+0x0005003c,
 0x00000000,
 0xe3730000,
 0x000a0000,
@@ -3565,10 +3620,10 @@ static const unsigned int build_actionlist[5145] = {
 0x000a0000,
 0x00000000,
 0x2a000000,
-0x0005003d,
+0x0005003e,
 0x00000000,
 0xeb000000,
-0x00050095,
+0x00050096,
 0xea000000,
 0x0005000e,
 0x00000000,
@@ -3595,7 +3650,7 @@ static const unsigned int build_actionlist[5145] = {
 0x000a0000,
 0x00000000,
 0x2a000000,
-0x0005003a,
+0x0005003b,
 0x00000000,
 0xe3730000,
 0x000a0000,
@@ -3608,7 +3663,7 @@ static const unsigned int build_actionlist[5145] = {
 0x000a0000,
 0x00000000,
 0x2a000000,
-0x0005003b,
+0x0005003c,
 0x00000000,
 0xe3730000,
 0x000a0000,
@@ -3621,10 +3676,10 @@ static const unsigned int build_actionlist[5145] = {
 0x000a0000,
 0x00000000,
 0x2a000000,
-0x0005003d,
+0x0005003e,
 0x00000000,
 0xeb000000,
-0x0003001d,
+0x0003001e,
 0xe5d6c000,
 0xe496e004,
 0xe18400fa,
@@ -3644,7 +3699,7 @@ static const unsigned int build_actionlist[5145] = {
 0xe58d6008,
 0xe1a021a2,
 0xeb000000,
-0x0003002f,
+0x00030030,
 0xe5184000,
 0x000d8180,
 0xe3500000,
@@ -3789,7 +3844,7 @@ static const unsigned int build_actionlist[5145] = {
 0xe31b0000,
 0x000a0000,
 0x1b000000,
-0x00030030,
+0x00030031,
 0xea000000,
 0x0005000b,
 0x00000000,
@@ -3829,7 +3884,7 @@ static const unsigned int build_actionlist[5145] = {
 0xe2470000,
 0x000a0000,
 0x1b000000,
-0x00030030,
+0x00030031,
 0xea000000,
 0x0005000b,
 0x00000000,
@@ -3878,7 +3933,7 @@ static const unsigned int build_actionlist[5145] = {
 0xe1a00008,
 0xe084100a,
 0xeb000000,
-0x00030031,
+0x00030032,
 0xe5184000,
 0x000d8180,
 0x0006000b,
@@ -3897,7 +3952,7 @@ static const unsigned int build_actionlist[5145] = {
 0xe5142008,
 0xe1a00008,
 0xeb000000,
-0x00030032,
+0x00030033,
 0xe5184000,
 0x000d8180,
 0xe3e01000,
@@ -3932,11 +3987,11 @@ static const unsigned int build_actionlist[5145] = {
 0xe37b0001,
 0x02811002,
 0xeb000000,
-0x00030033,
+0x00030034,
 0x00000000,
 0xe795110b,
 0xeb000000,
-0x00030034,
+0x00030035,
 0x00000000,
 0xe5184000,
 0x000d8180,
@@ -3951,7 +4006,7 @@ static const unsigned int build_actionlist[5145] = {
 0xe12fff1c,
 0x0006000f,
 0xeb000000,
-0x00030035,
+0x00030036,
 0xe1a00008,
 0xea000000,
 0x0005000b,
@@ -3963,10 +4018,10 @@ static const unsigned int build_actionlist[5145] = {
 0xe795b10b,
 0x00000000,
 0xea000000,
-0x0005009d,
+0x0005009e,
 0x00000000,
 0xea000000,
-0x0005009e,
+0x0005009f,
 0x00000000,
 0xe009caae,
 0xe009b6ae,
@@ -4021,7 +4076,7 @@ static const unsigned int build_actionlist[5145] = {
 0x000a0000,
 0x01a0b002,
 0x0a000000,
-0x0005009d,
+0x0005009e,
 0xea000000,
 0x0005002f,
 0x00000000,
@@ -4034,7 +4089,7 @@ static const unsigned int build_actionlist[5145] = {
 0x000a0000,
 0x1a000000,
 0x0005002c,
-0x0006009d,
+0x0006009e,
 0xe5102000,
 0x000d8180,
 0xe51b3000,
@@ -4212,7 +4267,7 @@ static const unsigned int build_actionlist[5145] = {
 0x000a0000,
 0x01a0b002,
 0x0a000000,
-0x0005009e,
+0x0005009f,
 0xea000000,
 0x00050033,
 0x00000000,
@@ -4225,7 +4280,7 @@ static const unsigned int build_actionlist[5145] = {
 0x000a0000,
 0x1a000000,
 0x00050030,
-0x0006009e,
+0x0006009f,
 0xe5102000,
 0x000d8180,
 0xe51b3000,
@@ -4314,7 +4369,7 @@ static const unsigned int build_actionlist[5145] = {
 0xe1a0100c,
 0xe58d3004,
 0xeb000000,
-0x00030036,
+0x00030037,
 0xe5184000,
 0x000d8180,
 0xe18420da,
@@ -4445,7 +4500,7 @@ static const unsigned int build_actionlist[5145] = {
 0xe1a00008,
 0xe58d6008,
 0xeb000000,
-0x00030037,
+0x00030038,
 0xea000000,
 0x0005000b,
 0x00060011,
@@ -4466,10 +4521,10 @@ static const unsigned int build_actionlist[5145] = {
 0xe009b6ae,
 0xe08bb000,
 0xea000000,
-0x0005009f,
+0x000500a0,
 0x00000000,
 0xe009b6ae,
-0x0006009f,
+0x000600a0,
 0xe1a0c004,
 0xe1a420da,
 0xe24bb008,
@@ -4491,19 +4546,19 @@ static const unsigned int build_actionlist[5145] = {
 0xe59d0004,
 0xe080b18b,
 0xea000000,
-0x000500a0,
+0x000500a1,
 0x00000000,
 0xe1a0b18b,
-0x000600a0,
+0x000600a1,
 0xe1aa20d4,
 0xe24bb008,
 0xe28aa008,
 0xe3730000,
 0x000a0000,
 0x1a000000,
-0x0005003f,
+0x00050040,
 0xe5146004,
-0x00060040,
+0x00060041,
 0xe3a0c000,
 0xe5523000,
 0x000d8180,
@@ -4770,12 +4825,12 @@ static const unsigned int build_actionlist[5145] = {
 0xe084a00a,
 0xe080b18b,
 0xea000000,
-0x000500a1,
+0x000500a2,
 0x00000000,
 0xe5146004,
 0xe1a0b18b,
 0xe084a00a,
-0x000600a1,
+0x000600a2,
 0xe58db004,
 0x0006000b,
 0xe2160000,
@@ -4783,7 +4838,7 @@ static const unsigned int build_actionlist[5145] = {
 0xe2261000,
 0x000a0000,
 0x1a000000,
-0x000500a2,
+0x000500a3,
 0x00060017,
 0xe516e004,
 0xe25b3008,
@@ -4825,9 +4880,9 @@ static const unsigned int build_actionlist[5145] = {
 0xe504100c,
 0xea000000,
 0x0005000f,
-0x000600a3,
+0x000600a4,
 0xe084a00a,
-0x000600a2,
+0x000600a3,
 0xe3110000,
 0x000a0000,
 0x1a000000,
@@ -4846,7 +4901,7 @@ static const unsigned int build_actionlist[5145] = {
 0x000a0000,
 0x0516e004,
 0x1a000000,
-0x000500a3,
+0x000500a4,
 0x00000000,
 0xe18400da,
 0x00000000,
@@ -4898,7 +4953,7 @@ static const unsigned int build_actionlist[5145] = {
 0x037c0000,
 0x000a0000,
 0x1a000000,
-0x00050041,
+0x00050042,
 0xe3530000,
 0xba000000,
 0x00050004,
@@ -4956,7 +5011,7 @@ static const unsigned int build_actionlist[5145] = {
 0x337c0000,
 0x000a0000,
 0x2a000000,
-0x00050041,
+0x00050042,
 0xe35c0000,
 0xe1ca00f0,
 0xe1ca01f8,
@@ -4967,14 +5022,14 @@ static const unsigned int build_actionlist[5145] = {
 0xba000000,
 0x00050008,
 0xeb000000,
-0x0003002c,
+0x0003002d,
 0xe1ca00f0,
 0xe1ca20d8,
 0xe1ca01f8,
 0x00000000,
 0x00060010,
 0xeb000000,
-0x00030025,
+0x00030026,
 0x00000000,
 0x824b6b80,
 0x00000000,
@@ -4991,7 +5046,7 @@ static const unsigned int build_actionlist[5145] = {
 0x00060012,
 0x00000000,
 0xeb000000,
-0x0003002c,
+0x0003002d,
 0xe1ca00f0,
 0xe1ca01f8,
 0x00000000,
@@ -5199,6 +5254,7 @@ enum {
   GLOB_cont_condt,
   GLOB_cont_condf,
   GLOB_vmeta_equal,
+  GLOB_vmeta_equal_cd,
   GLOB_vmeta_arith_vn,
   GLOB_vmeta_arith_nv,
   GLOB_vmeta_unm,
@@ -5346,6 +5402,7 @@ static const char *const globnames[] = {
   "cont_condt",
   "cont_condf",
   "vmeta_equal",
+  "vmeta_equal_cd",
   "vmeta_arith_vn",
   "vmeta_arith_nv",
   "vmeta_unm",
@@ -5460,6 +5517,7 @@ static const char *const extnames[] = {
   "lj_meta_tset",
   "lj_meta_comp",
   "lj_meta_equal",
+  "lj_meta_equal_cd",
   "lj_meta_arith",
   "lj_meta_len",
   "lj_meta_call",
@@ -5548,116 +5606,120 @@ static void build_subroutines(BuildCtx *ctx)
   dasm_put(Dst, 306, Dt7(->field_pc), ~LJ_TNIL, PC2PROTO(k), Dt1(->base), -DISPATCH_GL(tmptv), ~LJ_TTAB, ~LJ_TSTR, ~LJ_TISNUM);
   dasm_put(Dst, 377, Dt1(->base), FRAME_CONT, Dt1(->top), -DISPATCH_GL(tmptv), ~LJ_TTAB, ~LJ_TSTR, ~LJ_TISNUM, Dt1(->base));
   dasm_put(Dst, 444, FRAME_CONT, Dt1(->top), Dt1(->base), ~LJ_TTRUE, -LJ_TFALSE);
-  dasm_put(Dst, 520, Dt1(->base), Dt1(->base), FRAME_CONT, Dt1(->base));
-  dasm_put(Dst, 589, Dt1(->base), Dt7(->field_pc), Dt1(->base), Dt1(->base));
+  dasm_put(Dst, 520, Dt1(->base));
+#if LJ_HASFFI
+  dasm_put(Dst, 531, Dt1(->base));
+#endif
+  dasm_put(Dst, 542, Dt1(->base), FRAME_CONT, Dt1(->base), Dt1(->base), Dt7(->field_pc));
+  dasm_put(Dst, 615, Dt1(->base), Dt1(->base));
 #if LJ_HASJIT
-  dasm_put(Dst, 631);
+  dasm_put(Dst, 644);
 #endif
-  dasm_put(Dst, 633);
+  dasm_put(Dst, 646);
 #if LJ_HASJIT
-  dasm_put(Dst, 635, BC_JFORI);
+  dasm_put(Dst, 648, BC_JFORI);
 #endif
-  dasm_put(Dst, 638);
+  dasm_put(Dst, 651);
 #if LJ_HASJIT
-  dasm_put(Dst, 641, BC_JFORI);
+  dasm_put(Dst, 654, BC_JFORI);
 #endif
-  dasm_put(Dst, 644, BC_FORI, -LJ_TTRUE, -LJ_TISNUM, ~LJ_TISNUM, (int)(offsetof(GCfuncC, upvalue)>>3)-1, -LJ_TTAB, -LJ_TUDATA, Dt6(->metatable));
-  dasm_put(Dst, 701, ~LJ_TNIL, DISPATCH_GL(gcroot[GCROOT_MMNAME+MM_metatable]), Dt6(->hmask), Dt5(->hash), Dt6(->node), DtB(->key), DtB(->val), DtB(->next), -LJ_TSTR, ~LJ_TTAB, -LJ_TNIL, -LJ_TISNUM);
-  dasm_put(Dst, 749, ~LJ_TISNUM, DISPATCH_GL(gcroot[GCROOT_BASEMT]), -LJ_TTAB, Dt6(->metatable), -LJ_TTAB, Dt6(->marked), LJ_GC_BLACK, Dt6(->metatable), DISPATCH_GL(gc.grayagain), LJ_GC_BLACK, DISPATCH_GL(gc.grayagain), Dt6(->marked), Dt6(->gclist), -LJ_TTAB);
-  dasm_put(Dst, 801, -LJ_TISNUM, -LJ_TSTR, DISPATCH_GL(gcroot[GCROOT_BASEMT_NUM]), Dt1(->base), -LJ_TISNUM, DISPATCH_GL(gc.total), DISPATCH_GL(gc.threshold), Dt1(->base), ~LJ_TSTR);
-  dasm_put(Dst, 856, ~LJ_TNIL, -LJ_TTAB, Dt1(->base), Dt1(->top), ~LJ_TNIL, (2+1)*8, -LJ_TTAB);
+  dasm_put(Dst, 657, BC_FORI, -LJ_TTRUE, -LJ_TISNUM, ~LJ_TISNUM, (int)(offsetof(GCfuncC, upvalue)>>3)-1, -LJ_TTAB, -LJ_TUDATA, Dt6(->metatable));
+  dasm_put(Dst, 714, ~LJ_TNIL, DISPATCH_GL(gcroot[GCROOT_MMNAME+MM_metatable]), Dt6(->hmask), Dt5(->hash), Dt6(->node), DtB(->key), DtB(->val), DtB(->next), -LJ_TSTR, ~LJ_TTAB, -LJ_TNIL, -LJ_TISNUM);
+  dasm_put(Dst, 762, ~LJ_TISNUM, DISPATCH_GL(gcroot[GCROOT_BASEMT]), -LJ_TTAB, Dt6(->metatable), -LJ_TTAB, Dt6(->marked), LJ_GC_BLACK, Dt6(->metatable), DISPATCH_GL(gc.grayagain), LJ_GC_BLACK, DISPATCH_GL(gc.grayagain), Dt6(->marked), Dt6(->gclist), -LJ_TTAB);
+  dasm_put(Dst, 814, -LJ_TISNUM, -LJ_TSTR, DISPATCH_GL(gcroot[GCROOT_BASEMT_NUM]), Dt1(->base), -LJ_TISNUM, DISPATCH_GL(gc.total), DISPATCH_GL(gc.threshold), Dt1(->base), ~LJ_TSTR);
+  dasm_put(Dst, 869, ~LJ_TNIL, -LJ_TTAB, Dt1(->base), Dt1(->top), ~LJ_TNIL, (2+1)*8, -LJ_TTAB);
 #ifdef LUAJIT_ENABLE_LUA52COMPAT
-  dasm_put(Dst, 904, Dt6(->metatable));
+  dasm_put(Dst, 917, Dt6(->metatable));
 #endif
-  dasm_put(Dst, 907, Dt8(->upvalue[0]));
+  dasm_put(Dst, 920, Dt8(->upvalue[0]));
 #ifdef LUAJIT_ENABLE_LUA52COMPAT
-  dasm_put(Dst, 911);
+  dasm_put(Dst, 924);
 #endif
-  dasm_put(Dst, 915, ~LJ_TNIL, (3+1)*8, -LJ_TTAB, -LJ_TISNUM, Dt6(->asize), Dt6(->array), (0+1)*8, -LJ_TNIL, (2+1)*8, Dt6(->hmask));
-  dasm_put(Dst, 974, -LJ_TTAB);
+  dasm_put(Dst, 928, ~LJ_TNIL, (3+1)*8, -LJ_TTAB, -LJ_TISNUM, Dt6(->asize), Dt6(->array), (0+1)*8, -LJ_TNIL, (2+1)*8, Dt6(->hmask));
+  dasm_put(Dst, 987, -LJ_TTAB);
 #ifdef LUAJIT_ENABLE_LUA52COMPAT
-  dasm_put(Dst, 983, Dt6(->metatable));
+  dasm_put(Dst, 996, Dt6(->metatable));
 #endif
-  dasm_put(Dst, 986, Dt8(->upvalue[0]));
+  dasm_put(Dst, 999, Dt8(->upvalue[0]));
 #ifdef LUAJIT_ENABLE_LUA52COMPAT
-  dasm_put(Dst, 990);
+  dasm_put(Dst, 1003);
 #endif
-  dasm_put(Dst, 994, ~LJ_TISNUM, (3+1)*8, DISPATCH_GL(hookmask), HOOK_ACTIVE, 8+FRAME_PCALL, 8+FRAME_PCALLH, DISPATCH_GL(hookmask), -LJ_TFUNC, HOOK_ACTIVE, 16+FRAME_PCALL, 16+FRAME_PCALLH, -LJ_TTHREAD);
-  dasm_put(Dst, 1053, Dt1(->base), Dt1(->top), Dt1(->status), Dt1(->base), Dt1(->maxstack), Dt1(->cframe), LUA_YIELD, Dt1(->top), Dt1(->top), Dt1(->base), LJ_VMST_INTERP, Dt1(->top), DISPATCH_GL(vmstate), LUA_YIELD);
-  dasm_put(Dst, 1112, Dt1(->base), Dt1(->maxstack), Dt1(->top), ~LJ_TTRUE, FRAME_TYPE, ~LJ_TFALSE, (2+1)*8, Dt1(->top));
-  dasm_put(Dst, 1172, Dt8(->upvalue[0].gcr), Dt1(->base), Dt1(->top), Dt1(->status), Dt1(->base), Dt1(->maxstack), Dt1(->cframe), LUA_YIELD, Dt1(->top), Dt1(->top), Dt1(->base), LJ_VMST_INTERP, Dt1(->top), DISPATCH_GL(vmstate), LUA_YIELD);
-  dasm_put(Dst, 1228, Dt1(->base), Dt1(->maxstack), Dt1(->top), FRAME_TYPE, Dt1(->cframe), Dt1(->base), CFRAME_RESUME, Dt1(->top));
-  dasm_put(Dst, 1287, LUA_YIELD, Dt1(->cframe), Dt1(->status), -LJ_TISNUM, ~LJ_TISNUM, ~LJ_TISNUM);
-  dasm_put(Dst, 1353, -LJ_TISNUM, ~LJ_TISNUM, ~LJ_TISNUM);
-  dasm_put(Dst, 1417, -LJ_TISNUM, (1+1)*8, FRAME_TYPE, ~LJ_TNIL);
-  dasm_put(Dst, 1481, -LJ_TISNUM, -LJ_TISNUM, -LJ_TISNUM, -LJ_TISNUM);
-  dasm_put(Dst, 1530, -LJ_TISNUM, -LJ_TISNUM, -LJ_TISNUM, -LJ_TISNUM);
-  dasm_put(Dst, 1580, -LJ_TISNUM, -LJ_TISNUM, -LJ_TISNUM, -LJ_TISNUM);
-  dasm_put(Dst, 1629, -LJ_TISNUM, -LJ_TISNUM, -LJ_TISNUM, -LJ_TISNUM, -LJ_TISNUM);
-  dasm_put(Dst, 1679, -LJ_TISNUM, -LJ_TISNUM, -LJ_TISNUM, Dt8(->upvalue[0]), -LJ_TISNUM, -LJ_TISNUM);
-  dasm_put(Dst, 1728, -LJ_TISNUM, ~LJ_TISNUM, (2+1)*8, -LJ_TISNUM, (2+1)*8, -LJ_TISNUM);
-  dasm_put(Dst, 1784, -LJ_TISNUM, -LJ_TISNUM);
-  dasm_put(Dst, 1837, -LJ_TISNUM, -LJ_TISNUM, -LJ_TISNUM);
-  dasm_put(Dst, 1890, -LJ_TSTR, Dt5(->len), ~LJ_TISNUM, -LJ_TSTR, Dt5(->len), Dt5([1]), ~LJ_TISNUM, (0+1)*8, (1+1)*8, DISPATCH_GL(gc.total), DISPATCH_GL(gc.threshold));
-  dasm_put(Dst, 1942, -LJ_TISNUM, Dt1(->base), Dt1(->base), ~LJ_TSTR, DISPATCH_GL(gc.total), DISPATCH_GL(gc.threshold), -LJ_TISNUM, -LJ_TSTR, Dt5(->len), -LJ_TISNUM);
-  dasm_put(Dst, 2001, sizeof(GCstr)-1, -DISPATCH_GL(strempty), ~LJ_TSTR, DISPATCH_GL(gc.total), DISPATCH_GL(gc.threshold), -LJ_TSTR, -LJ_TISNUM, Dt5(->len), DISPATCH_GL(tmpbuf.sz), DISPATCH_GL(tmpbuf.buf), Dt5([1]));
-  dasm_put(Dst, 2065, DISPATCH_GL(gc.total), DISPATCH_GL(gc.threshold), -LJ_TSTR, Dt5(->len), DISPATCH_GL(tmpbuf.sz), DISPATCH_GL(tmpbuf.buf), sizeof(GCstr), DISPATCH_GL(gc.total), DISPATCH_GL(gc.threshold));
-  dasm_put(Dst, 2120, -LJ_TSTR, Dt5(->len), DISPATCH_GL(tmpbuf.sz), DISPATCH_GL(tmpbuf.buf), sizeof(GCstr), DISPATCH_GL(gc.total), DISPATCH_GL(gc.threshold), -LJ_TSTR, Dt5(->len), DISPATCH_GL(tmpbuf.sz), DISPATCH_GL(tmpbuf.buf), sizeof(GCstr));
-  dasm_put(Dst, 2178, -LJ_TTAB, ~LJ_TISNUM, -LJ_TISNUM, ~LJ_TISNUM);
-  dasm_put(Dst, 2251, -LJ_TISNUM, -LJ_TISNUM, -LJ_TISNUM, -LJ_TISNUM, -LJ_TISNUM);
-  dasm_put(Dst, 2312, -LJ_TISNUM, ~LJ_TISNUM, -LJ_TISNUM, ~LJ_TISNUM, -LJ_TISNUM, ~LJ_TISNUM, -LJ_TISNUM);
-  dasm_put(Dst, 2367, -LJ_TISNUM, ~LJ_TISNUM, -LJ_TISNUM, -LJ_TISNUM, ~LJ_TISNUM, -LJ_TISNUM, -LJ_TISNUM, ~LJ_TISNUM);
-  dasm_put(Dst, 2424, -LJ_TISNUM, -LJ_TISNUM, ~LJ_TISNUM, -LJ_TISNUM, -LJ_TISNUM, ~LJ_TISNUM, Dt1(->maxstack), Dt1(->top), Dt8(->f), Dt1(->base), 8*LUA_MINSTACK, Dt1(->base));
-  dasm_put(Dst, 2482, Dt1(->top), Dt7(->field_pc), FRAME_TYPE, FRAME_TYPEP, LUA_MINSTACK, Dt1(->base), Dt1(->base), Dt1(->top), Dt1(->base));
+  dasm_put(Dst, 1007, ~LJ_TISNUM, (3+1)*8, DISPATCH_GL(hookmask), HOOK_ACTIVE, 8+FRAME_PCALL, 8+FRAME_PCALLH, DISPATCH_GL(hookmask), -LJ_TFUNC, HOOK_ACTIVE, 16+FRAME_PCALL, 16+FRAME_PCALLH, -LJ_TTHREAD);
+  dasm_put(Dst, 1066, Dt1(->base), Dt1(->top), Dt1(->status), Dt1(->base), Dt1(->maxstack), Dt1(->cframe), LUA_YIELD, Dt1(->top), Dt1(->top), Dt1(->base), LJ_VMST_INTERP, Dt1(->top), DISPATCH_GL(vmstate), LUA_YIELD);
+  dasm_put(Dst, 1125, Dt1(->base), Dt1(->maxstack), Dt1(->top), ~LJ_TTRUE, FRAME_TYPE, ~LJ_TFALSE, (2+1)*8, Dt1(->top));
+  dasm_put(Dst, 1185, Dt8(->upvalue[0].gcr), Dt1(->base), Dt1(->top), Dt1(->status), Dt1(->base), Dt1(->maxstack), Dt1(->cframe), LUA_YIELD, Dt1(->top), Dt1(->top), Dt1(->base), LJ_VMST_INTERP, Dt1(->top), DISPATCH_GL(vmstate), LUA_YIELD);
+  dasm_put(Dst, 1241, Dt1(->base), Dt1(->maxstack), Dt1(->top), FRAME_TYPE, Dt1(->cframe), Dt1(->base), CFRAME_RESUME, Dt1(->top));
+  dasm_put(Dst, 1300, LUA_YIELD, Dt1(->cframe), Dt1(->status), -LJ_TISNUM, ~LJ_TISNUM, ~LJ_TISNUM);
+  dasm_put(Dst, 1366, -LJ_TISNUM, ~LJ_TISNUM, ~LJ_TISNUM);
+  dasm_put(Dst, 1430, -LJ_TISNUM, (1+1)*8, FRAME_TYPE, ~LJ_TNIL);
+  dasm_put(Dst, 1494, -LJ_TISNUM, -LJ_TISNUM, -LJ_TISNUM, -LJ_TISNUM);
+  dasm_put(Dst, 1543, -LJ_TISNUM, -LJ_TISNUM, -LJ_TISNUM, -LJ_TISNUM);
+  dasm_put(Dst, 1593, -LJ_TISNUM, -LJ_TISNUM, -LJ_TISNUM, -LJ_TISNUM);
+  dasm_put(Dst, 1642, -LJ_TISNUM, -LJ_TISNUM, -LJ_TISNUM, -LJ_TISNUM, -LJ_TISNUM);
+  dasm_put(Dst, 1692, -LJ_TISNUM, -LJ_TISNUM, -LJ_TISNUM, Dt8(->upvalue[0]), -LJ_TISNUM, -LJ_TISNUM);
+  dasm_put(Dst, 1741, -LJ_TISNUM, ~LJ_TISNUM, (2+1)*8, -LJ_TISNUM, (2+1)*8, -LJ_TISNUM);
+  dasm_put(Dst, 1797, -LJ_TISNUM, -LJ_TISNUM);
+  dasm_put(Dst, 1850, -LJ_TISNUM, -LJ_TISNUM, -LJ_TISNUM);
+  dasm_put(Dst, 1903, -LJ_TSTR, Dt5(->len), ~LJ_TISNUM, -LJ_TSTR, Dt5(->len), Dt5([1]), ~LJ_TISNUM, (0+1)*8, (1+1)*8, DISPATCH_GL(gc.total), DISPATCH_GL(gc.threshold));
+  dasm_put(Dst, 1955, -LJ_TISNUM, Dt1(->base), Dt1(->base), ~LJ_TSTR, DISPATCH_GL(gc.total), DISPATCH_GL(gc.threshold), -LJ_TISNUM, -LJ_TSTR, Dt5(->len), -LJ_TISNUM);
+  dasm_put(Dst, 2014, sizeof(GCstr)-1, -DISPATCH_GL(strempty), ~LJ_TSTR, DISPATCH_GL(gc.total), DISPATCH_GL(gc.threshold), -LJ_TSTR, -LJ_TISNUM, Dt5(->len), DISPATCH_GL(tmpbuf.sz), DISPATCH_GL(tmpbuf.buf), Dt5([1]));
+  dasm_put(Dst, 2078, DISPATCH_GL(gc.total), DISPATCH_GL(gc.threshold), -LJ_TSTR, Dt5(->len), DISPATCH_GL(tmpbuf.sz), DISPATCH_GL(tmpbuf.buf), sizeof(GCstr), DISPATCH_GL(gc.total), DISPATCH_GL(gc.threshold));
+  dasm_put(Dst, 2133, -LJ_TSTR, Dt5(->len), DISPATCH_GL(tmpbuf.sz), DISPATCH_GL(tmpbuf.buf), sizeof(GCstr), DISPATCH_GL(gc.total), DISPATCH_GL(gc.threshold), -LJ_TSTR, Dt5(->len), DISPATCH_GL(tmpbuf.sz), DISPATCH_GL(tmpbuf.buf), sizeof(GCstr));
+  dasm_put(Dst, 2191, -LJ_TTAB, ~LJ_TISNUM, -LJ_TISNUM, ~LJ_TISNUM);
+  dasm_put(Dst, 2264, -LJ_TISNUM, -LJ_TISNUM, -LJ_TISNUM, -LJ_TISNUM, -LJ_TISNUM);
+  dasm_put(Dst, 2325, -LJ_TISNUM, ~LJ_TISNUM, -LJ_TISNUM, ~LJ_TISNUM, -LJ_TISNUM, ~LJ_TISNUM, -LJ_TISNUM);
+  dasm_put(Dst, 2380, -LJ_TISNUM, ~LJ_TISNUM, -LJ_TISNUM, -LJ_TISNUM, ~LJ_TISNUM, -LJ_TISNUM, -LJ_TISNUM, ~LJ_TISNUM);
+  dasm_put(Dst, 2437, -LJ_TISNUM, -LJ_TISNUM, ~LJ_TISNUM, -LJ_TISNUM, -LJ_TISNUM, ~LJ_TISNUM, Dt1(->maxstack), Dt1(->top), Dt8(->f), Dt1(->base), 8*LUA_MINSTACK, Dt1(->base));
+  dasm_put(Dst, 2495, Dt1(->top), Dt7(->field_pc), FRAME_TYPE, FRAME_TYPEP, LUA_MINSTACK, Dt1(->base), Dt1(->base), Dt1(->top), Dt1(->base));
 #if LJ_HASJIT
-  dasm_put(Dst, 2541);
+  dasm_put(Dst, 2554);
 #endif
-  dasm_put(Dst, 2543, DISPATCH_GL(hookmask), HOOK_ACTIVE, GG_DISP2STATIC, DISPATCH_GL(hookmask), DISPATCH_GL(hookcount), HOOK_ACTIVE, LUA_MASKLINE|LUA_MASKCOUNT, DISPATCH_GL(hookcount), LUA_MASKLINE, Dt1(->base), Dt1(->base));
-  dasm_put(Dst, 2589, GG_DISP2STATIC);
+  dasm_put(Dst, 2556, DISPATCH_GL(hookmask), HOOK_ACTIVE, GG_DISP2STATIC, DISPATCH_GL(hookmask), DISPATCH_GL(hookcount), HOOK_ACTIVE, LUA_MASKLINE|LUA_MASKCOUNT, DISPATCH_GL(hookcount), LUA_MASKLINE, Dt1(->base), Dt1(->base));
+  dasm_put(Dst, 2602, GG_DISP2STATIC);
 #if LJ_HASJIT
-  dasm_put(Dst, 2605);
+  dasm_put(Dst, 2618);
 #endif
-  dasm_put(Dst, 2607);
+  dasm_put(Dst, 2620);
 #if LJ_HASJIT
-  dasm_put(Dst, 2610);
+  dasm_put(Dst, 2623);
 #endif
-  dasm_put(Dst, 2613);
+  dasm_put(Dst, 2626);
 #if LJ_HASJIT
-  dasm_put(Dst, 2615);
+  dasm_put(Dst, 2628);
 #endif
-  dasm_put(Dst, 2618, Dt1(->base), Dt1(->top), Dt1(->base), Dt1(->top));
+  dasm_put(Dst, 2631, Dt1(->base), Dt1(->top), Dt1(->base), Dt1(->top));
 #if LJ_HASJIT
-  dasm_put(Dst, 2640);
+  dasm_put(Dst, 2653);
 #endif
-  dasm_put(Dst, 2642);
+  dasm_put(Dst, 2655);
 #if LJ_HASJIT
-  dasm_put(Dst, 2644);
+  dasm_put(Dst, 2657);
 #endif
-  dasm_put(Dst, 2646);
+  dasm_put(Dst, 2659);
 #if LJ_HASJIT
-  dasm_put(Dst, 2651);
+  dasm_put(Dst, 2664);
 #else
-  dasm_put(Dst, 2654);
+  dasm_put(Dst, 2667);
 #endif
-  dasm_put(Dst, 2656);
+  dasm_put(Dst, 2669);
   {
     int i;
     for (i = 31; i >= 0; i--) {
-      dasm_put(Dst, 2692, i, i);
+      dasm_put(Dst, 2705, i, i);
     }
   }
-  dasm_put(Dst, 2697);
+  dasm_put(Dst, 2710);
 #if LJ_HASJIT
-  dasm_put(Dst, 2706);
+  dasm_put(Dst, 2719);
 #endif
-  dasm_put(Dst, 2708);
+  dasm_put(Dst, 2721);
 #if LJ_HASJIT
-  dasm_put(Dst, 2710);
+  dasm_put(Dst, 2723);
 #endif
-  dasm_put(Dst, 2712);
+  dasm_put(Dst, 2725);
 #if LJ_HASFFI
 #define DtE(_V) (int)(ptrdiff_t)&(((CCallState *)0)_V)
-  dasm_put(Dst, 2736, DtE(->spadj), DtE(->nsp), offsetof(CCallState, stack), DtE(->func), DtE(->gpr[0]), DtE(->gpr[1]), DtE(->gpr[2]), DtE(->gpr[3]), DtE(->gpr[0]), DtE(->gpr[1]));
+  dasm_put(Dst, 2749, DtE(->spadj), DtE(->nsp), offsetof(CCallState, stack), DtE(->func), DtE(->gpr[0]), DtE(->gpr[1]), DtE(->gpr[2]), DtE(->gpr[3]), DtE(->gpr[0]), DtE(->gpr[1]));
 #endif
 }
 
@@ -5665,7 +5727,7 @@ static void build_subroutines(BuildCtx *ctx)
 static void build_ins(BuildCtx *ctx, BCOp op, int defop)
 {
   int vk = 0;
-  dasm_put(Dst, 2774, defop);
+  dasm_put(Dst, 2787, defop);
 
   switch (op) {
 
@@ -5674,519 +5736,542 @@ 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, 2776, -LJ_TISNUM, -LJ_TISNUM);
+    dasm_put(Dst, 2789, -LJ_TISNUM, -LJ_TISNUM);
     if (op == BC_ISLT) {
-      dasm_put(Dst, 2792);
+      dasm_put(Dst, 2805);
     } else if (op == BC_ISGE) {
-      dasm_put(Dst, 2794);
+      dasm_put(Dst, 2807);
     } else if (op == BC_ISLE) {
-      dasm_put(Dst, 2796);
+      dasm_put(Dst, 2809);
     } else {
-      dasm_put(Dst, 2798);
+      dasm_put(Dst, 2811);
     }
-    dasm_put(Dst, 2800, -LJ_TISNUM);
+    dasm_put(Dst, 2813, -LJ_TISNUM);
     if (op == BC_ISLT) {
-      dasm_put(Dst, 2836);
+      dasm_put(Dst, 2849);
     } else if (op == BC_ISGE) {
-      dasm_put(Dst, 2838);
+      dasm_put(Dst, 2851);
     } else if (op == BC_ISLE) {
-      dasm_put(Dst, 2840);
+      dasm_put(Dst, 2853);
     } else {
-      dasm_put(Dst, 2842);
+      dasm_put(Dst, 2855);
     }
-    dasm_put(Dst, 2844);
+    dasm_put(Dst, 2857);
     break;
 
   case BC_ISEQV: case BC_ISNEV:
     vk = op == BC_ISEQV;
-    dasm_put(Dst, 2847, -LJ_TISNUM, -LJ_TISNUM);
+    dasm_put(Dst, 2860, -LJ_TISNUM, -LJ_TISNUM);
     if (vk) {
-      dasm_put(Dst, 2858);
+      dasm_put(Dst, 2871);
     } else {
-      dasm_put(Dst, 2861);
+      dasm_put(Dst, 2874);
+    }
+    if (LJ_HASFFI) {
+      dasm_put(Dst, 2877, -LJ_TCDATA, -LJ_TCDATA);
     }
-    dasm_put(Dst, 2864, -LJ_TISPRI);
+    dasm_put(Dst, 2884, -LJ_TISPRI);
     if (vk) {
-      dasm_put(Dst, 2873, -LJ_TISTABUD);
+      dasm_put(Dst, 2893, -LJ_TISTABUD);
     } else {
-      dasm_put(Dst, 2890, -LJ_TISTABUD);
+      dasm_put(Dst, 2910, -LJ_TISTABUD);
     }
-    dasm_put(Dst, 2897, Dt6(->metatable));
+    dasm_put(Dst, 2917, Dt6(->metatable));
     if (vk) {
-      dasm_put(Dst, 2901);
+      dasm_put(Dst, 2921);
     } else {
-      dasm_put(Dst, 2904);
+      dasm_put(Dst, 2924);
     }
-    dasm_put(Dst, 2907, Dt6(->nomm), 1-vk, 1<<MM_eq);
+    dasm_put(Dst, 2927, Dt6(->nomm), 1-vk, 1<<MM_eq);
     if (!vk) {
-      dasm_put(Dst, 2917);
+      dasm_put(Dst, 2937);
     }
     break;
 
   case BC_ISEQS: case BC_ISNES:
     vk = op == BC_ISEQS;
-    dasm_put(Dst, 2927, -LJ_TSTR);
+    dasm_put(Dst, 2947, -LJ_TSTR);
+    if (LJ_HASFFI) {
+      dasm_put(Dst, 2956);
+    } else {
+      dasm_put(Dst, 2960);
+    }
     if (vk) {
-      dasm_put(Dst, 2937);
+      dasm_put(Dst, 2962);
     } else {
-      dasm_put(Dst, 2939);
+      dasm_put(Dst, 2965);
+    }
+    dasm_put(Dst, 2968);
+    if (LJ_HASFFI) {
+      dasm_put(Dst, 2975, -LJ_TCDATA);
     }
-    dasm_put(Dst, 2941);
     break;
 
   case BC_ISEQN: case BC_ISNEN:
     vk = op == BC_ISEQN;
-    dasm_put(Dst, 2948);
+    dasm_put(Dst, 2983);
     if (vk) {
-      dasm_put(Dst, 2955);
+      dasm_put(Dst, 2990);
     } else {
-      dasm_put(Dst, 2957);
+      dasm_put(Dst, 2992);
     }
-    dasm_put(Dst, 2959, -LJ_TISNUM, -LJ_TISNUM);
+    dasm_put(Dst, 2994, -LJ_TISNUM, -LJ_TISNUM);
     if (vk) {
-      dasm_put(Dst, 2969);
+      dasm_put(Dst, 3004);
     } else {
-      dasm_put(Dst, 2971);
+      dasm_put(Dst, 3007);
     }
-    dasm_put(Dst, 2973);
-    if (!vk) {
-      dasm_put(Dst, 2982);
+    dasm_put(Dst, 3010);
+    if (LJ_HASFFI) {
+      dasm_put(Dst, 3019);
+    } else {
+      if (!vk) {
+       dasm_put(Dst, 3022);
+      }
+      dasm_put(Dst, 3024);
     }
-    dasm_put(Dst, 2984, -LJ_TISNUM);
+    dasm_put(Dst, 3027, -LJ_TISNUM);
     if (vk) {
-      dasm_put(Dst, 3002);
+      dasm_put(Dst, 3043);
     } else {
-      dasm_put(Dst, 3004);
+      dasm_put(Dst, 3045);
+    }
+    dasm_put(Dst, 3047);
+    if (LJ_HASFFI) {
+      dasm_put(Dst, 3050, -LJ_TCDATA);
     }
-    dasm_put(Dst, 3006);
     break;
 
   case BC_ISEQP: case BC_ISNEP:
     vk = op == BC_ISEQP;
-    dasm_put(Dst, 3009);
+    dasm_put(Dst, 3058);
+    if (LJ_HASFFI) {
+      dasm_put(Dst, 3064, -LJ_TCDATA);
+    }
+    dasm_put(Dst, 3069);
     if (vk) {
-      dasm_put(Dst, 3016);
+      dasm_put(Dst, 3071);
     } else {
-      dasm_put(Dst, 3018);
+      dasm_put(Dst, 3073);
     }
-    dasm_put(Dst, 3020);
+    dasm_put(Dst, 3075);
     break;
 
   /* -- Unary test and copy ops ------------------------------------------- */
 
   case BC_ISTC: case BC_ISFC: case BC_IST: case BC_ISF:
-    dasm_put(Dst, 3027, -LJ_TTRUE);
+    dasm_put(Dst, 3082, -LJ_TTRUE);
     if (op == BC_ISTC || op == BC_IST) {
-      dasm_put(Dst, 3035);
+      dasm_put(Dst, 3090);
       if (op == BC_ISTC) {
-       dasm_put(Dst, 3037);
+       dasm_put(Dst, 3092);
       }
     } else {
-      dasm_put(Dst, 3039);
+      dasm_put(Dst, 3094);
       if (op == BC_ISFC) {
-       dasm_put(Dst, 3041);
+       dasm_put(Dst, 3096);
       }
     }
-    dasm_put(Dst, 3043);
+    dasm_put(Dst, 3098);
     break;
 
   /* -- Unary ops --------------------------------------------------------- */
 
   case BC_MOV:
-    dasm_put(Dst, 3050);
+    dasm_put(Dst, 3105);
     break;
   case BC_NOT:
-    dasm_put(Dst, 3060, -LJ_TTRUE, ~LJ_TFALSE, ~LJ_TTRUE);
+    dasm_put(Dst, 3115, -LJ_TTRUE, ~LJ_TFALSE, ~LJ_TTRUE);
     break;
   case BC_UNM:
-    dasm_put(Dst, 3077, -LJ_TISNUM);
+    dasm_put(Dst, 3132, -LJ_TISNUM);
     break;
   case BC_LEN:
-    dasm_put(Dst, 3103, -LJ_TSTR, Dt5(->len), ~LJ_TISNUM, -LJ_TTAB);
+    dasm_put(Dst, 3158, -LJ_TSTR, Dt5(->len), ~LJ_TISNUM, -LJ_TTAB);
     break;
 
   /* -- Binary ops -------------------------------------------------------- */
 
 
   case BC_ADDVN: case BC_ADDNV: case BC_ADDVV:
-    dasm_put(Dst, 3131);
+    dasm_put(Dst, 3186);
     vk = ((int)op - BC_ADDVN) / (BC_ADDNV-BC_ADDVN);
     switch (vk) {
     case 0:
-    dasm_put(Dst, 3134);
+    dasm_put(Dst, 3189);
       break;
     case 1:
-    dasm_put(Dst, 3137);
+    dasm_put(Dst, 3192);
       break;
     default:
-    dasm_put(Dst, 3140);
+    dasm_put(Dst, 3195);
       break;
     }
-    dasm_put(Dst, 3143);
+    dasm_put(Dst, 3198);
     if (vk == 1) {
-    dasm_put(Dst, 3145, -LJ_TISNUM, -LJ_TISNUM);
+    dasm_put(Dst, 3200, -LJ_TISNUM, -LJ_TISNUM);
     } else {
-    dasm_put(Dst, 3150, -LJ_TISNUM, -LJ_TISNUM);
+    dasm_put(Dst, 3205, -LJ_TISNUM, -LJ_TISNUM);
     }
-    dasm_put(Dst, 3155);
+    dasm_put(Dst, 3210);
     switch (vk) {
     case 0:
-    dasm_put(Dst, 3159);
+    dasm_put(Dst, 3214);
       break;
     case 1:
-    dasm_put(Dst, 3162);
+    dasm_put(Dst, 3217);
       break;
     default:
-    dasm_put(Dst, 3165);
+    dasm_put(Dst, 3220);
       break;
     }
-    dasm_put(Dst, 3168);
+    dasm_put(Dst, 3223);
     switch (vk) {
     case 0:
     if (vk == 1) {
-    dasm_put(Dst, 3177, -LJ_TISNUM, -LJ_TISNUM);
+    dasm_put(Dst, 3232, -LJ_TISNUM, -LJ_TISNUM);
     } else {
-    dasm_put(Dst, 3182, -LJ_TISNUM, -LJ_TISNUM);
+    dasm_put(Dst, 3237, -LJ_TISNUM, -LJ_TISNUM);
     }
-    dasm_put(Dst, 3187);
+    dasm_put(Dst, 3242);
       break;
     case 1:
     if (vk == 1) {
-    dasm_put(Dst, 3190, -LJ_TISNUM, -LJ_TISNUM);
+    dasm_put(Dst, 3245, -LJ_TISNUM, -LJ_TISNUM);
     } else {
-    dasm_put(Dst, 3195, -LJ_TISNUM, -LJ_TISNUM);
+    dasm_put(Dst, 3250, -LJ_TISNUM, -LJ_TISNUM);
     }
-    dasm_put(Dst, 3200);
+    dasm_put(Dst, 3255);
       break;
     default:
     if (vk == 1) {
-    dasm_put(Dst, 3203, -LJ_TISNUM, -LJ_TISNUM);
+    dasm_put(Dst, 3258, -LJ_TISNUM, -LJ_TISNUM);
     } else {
-    dasm_put(Dst, 3208, -LJ_TISNUM, -LJ_TISNUM);
+    dasm_put(Dst, 3263, -LJ_TISNUM, -LJ_TISNUM);
     }
-    dasm_put(Dst, 3213);
+    dasm_put(Dst, 3268);
       break;
     }
-    dasm_put(Dst, 3216);
+    dasm_put(Dst, 3271);
     break;
   case BC_SUBVN: case BC_SUBNV: case BC_SUBVV:
-    dasm_put(Dst, 3222);
+    dasm_put(Dst, 3277);
     vk = ((int)op - BC_ADDVN) / (BC_ADDNV-BC_ADDVN);
     switch (vk) {
     case 0:
-    dasm_put(Dst, 3225);
+    dasm_put(Dst, 3280);
       break;
     case 1:
-    dasm_put(Dst, 3228);
+    dasm_put(Dst, 3283);
       break;
     default:
-    dasm_put(Dst, 3231);
+    dasm_put(Dst, 3286);
       break;
     }
-    dasm_put(Dst, 3234);
+    dasm_put(Dst, 3289);
     if (vk == 1) {
-    dasm_put(Dst, 3236, -LJ_TISNUM, -LJ_TISNUM);
+    dasm_put(Dst, 3291, -LJ_TISNUM, -LJ_TISNUM);
     } else {
-    dasm_put(Dst, 3241, -LJ_TISNUM, -LJ_TISNUM);
+    dasm_put(Dst, 3296, -LJ_TISNUM, -LJ_TISNUM);
     }
-    dasm_put(Dst, 3246);
+    dasm_put(Dst, 3301);
     switch (vk) {
     case 0:
-    dasm_put(Dst, 3250);
+    dasm_put(Dst, 3305);
       break;
     case 1:
-    dasm_put(Dst, 3253);
+    dasm_put(Dst, 3308);
       break;
     default:
-    dasm_put(Dst, 3256);
+    dasm_put(Dst, 3311);
       break;
     }
-    dasm_put(Dst, 3259);
+    dasm_put(Dst, 3314);
     switch (vk) {
     case 0:
     if (vk == 1) {
-    dasm_put(Dst, 3268, -LJ_TISNUM, -LJ_TISNUM);
+    dasm_put(Dst, 3323, -LJ_TISNUM, -LJ_TISNUM);
     } else {
-    dasm_put(Dst, 3273, -LJ_TISNUM, -LJ_TISNUM);
+    dasm_put(Dst, 3328, -LJ_TISNUM, -LJ_TISNUM);
     }
-    dasm_put(Dst, 3278);
+    dasm_put(Dst, 3333);
       break;
     case 1:
     if (vk == 1) {
-    dasm_put(Dst, 3281, -LJ_TISNUM, -LJ_TISNUM);
+    dasm_put(Dst, 3336, -LJ_TISNUM, -LJ_TISNUM);
     } else {
-    dasm_put(Dst, 3286, -LJ_TISNUM, -LJ_TISNUM);
+    dasm_put(Dst, 3341, -LJ_TISNUM, -LJ_TISNUM);
     }
-    dasm_put(Dst, 3291);
+    dasm_put(Dst, 3346);
       break;
     default:
     if (vk == 1) {
-    dasm_put(Dst, 3294, -LJ_TISNUM, -LJ_TISNUM);
+    dasm_put(Dst, 3349, -LJ_TISNUM, -LJ_TISNUM);
     } else {
-    dasm_put(Dst, 3299, -LJ_TISNUM, -LJ_TISNUM);
+    dasm_put(Dst, 3354, -LJ_TISNUM, -LJ_TISNUM);
     }
-    dasm_put(Dst, 3304);
+    dasm_put(Dst, 3359);
       break;
     }
-    dasm_put(Dst, 3307);
+    dasm_put(Dst, 3362);
     break;
   case BC_MULVN: case BC_MULNV: case BC_MULVV:
-    dasm_put(Dst, 3313);
+    dasm_put(Dst, 3368);
     vk = ((int)op - BC_ADDVN) / (BC_ADDNV-BC_ADDVN);
     switch (vk) {
     case 0:
-    dasm_put(Dst, 3316);
+    dasm_put(Dst, 3371);
       break;
     case 1:
-    dasm_put(Dst, 3319);
+    dasm_put(Dst, 3374);
       break;
     default:
-    dasm_put(Dst, 3322);
+    dasm_put(Dst, 3377);
       break;
     }
-    dasm_put(Dst, 3325);
+    dasm_put(Dst, 3380);
     if (vk == 1) {
-    dasm_put(Dst, 3327, -LJ_TISNUM, -LJ_TISNUM);
+    dasm_put(Dst, 3382, -LJ_TISNUM, -LJ_TISNUM);
     } else {
-    dasm_put(Dst, 3332, -LJ_TISNUM, -LJ_TISNUM);
+    dasm_put(Dst, 3387, -LJ_TISNUM, -LJ_TISNUM);
     }
-    dasm_put(Dst, 3337);
+    dasm_put(Dst, 3392);
     switch (vk) {
     case 0:
-    dasm_put(Dst, 3342);
+    dasm_put(Dst, 3397);
       break;
     case 1:
-    dasm_put(Dst, 3345);
+    dasm_put(Dst, 3400);
       break;
     default:
-    dasm_put(Dst, 3348);
+    dasm_put(Dst, 3403);
       break;
     }
-    dasm_put(Dst, 3351);
+    dasm_put(Dst, 3406);
     switch (vk) {
     case 0:
     if (vk == 1) {
-    dasm_put(Dst, 3360, -LJ_TISNUM, -LJ_TISNUM);
+    dasm_put(Dst, 3415, -LJ_TISNUM, -LJ_TISNUM);
     } else {
-    dasm_put(Dst, 3365, -LJ_TISNUM, -LJ_TISNUM);
+    dasm_put(Dst, 3420, -LJ_TISNUM, -LJ_TISNUM);
     }
-    dasm_put(Dst, 3370);
+    dasm_put(Dst, 3425);
       break;
     case 1:
     if (vk == 1) {
-    dasm_put(Dst, 3373, -LJ_TISNUM, -LJ_TISNUM);
+    dasm_put(Dst, 3428, -LJ_TISNUM, -LJ_TISNUM);
     } else {
-    dasm_put(Dst, 3378, -LJ_TISNUM, -LJ_TISNUM);
+    dasm_put(Dst, 3433, -LJ_TISNUM, -LJ_TISNUM);
     }
-    dasm_put(Dst, 3383);
+    dasm_put(Dst, 3438);
       break;
     default:
     if (vk == 1) {
-    dasm_put(Dst, 3386, -LJ_TISNUM, -LJ_TISNUM);
+    dasm_put(Dst, 3441, -LJ_TISNUM, -LJ_TISNUM);
     } else {
-    dasm_put(Dst, 3391, -LJ_TISNUM, -LJ_TISNUM);
+    dasm_put(Dst, 3446, -LJ_TISNUM, -LJ_TISNUM);
     }
-    dasm_put(Dst, 3396);
+    dasm_put(Dst, 3451);
       break;
     }
-    dasm_put(Dst, 3399);
+    dasm_put(Dst, 3454);
     break;
   case BC_DIVVN: case BC_DIVNV: case BC_DIVVV:
-    dasm_put(Dst, 3405);
+    dasm_put(Dst, 3460);
     vk = ((int)op - BC_ADDVN) / (BC_ADDNV-BC_ADDVN);
     switch (vk) {
     case 0:
-    dasm_put(Dst, 3408);
+    dasm_put(Dst, 3463);
       break;
     case 1:
-    dasm_put(Dst, 3411);
+    dasm_put(Dst, 3466);
       break;
     default:
-    dasm_put(Dst, 3414);
+    dasm_put(Dst, 3469);
       break;
     }
     switch (vk) {
     case 0:
     if (vk == 1) {
-    dasm_put(Dst, 3417, -LJ_TISNUM, -LJ_TISNUM);
+    dasm_put(Dst, 3472, -LJ_TISNUM, -LJ_TISNUM);
     } else {
-    dasm_put(Dst, 3422, -LJ_TISNUM, -LJ_TISNUM);
+    dasm_put(Dst, 3477, -LJ_TISNUM, -LJ_TISNUM);
     }
-    dasm_put(Dst, 3427);
+    dasm_put(Dst, 3482);
       break;
     case 1:
     if (vk == 1) {
-    dasm_put(Dst, 3430, -LJ_TISNUM, -LJ_TISNUM);
+    dasm_put(Dst, 3485, -LJ_TISNUM, -LJ_TISNUM);
     } else {
-    dasm_put(Dst, 3435, -LJ_TISNUM, -LJ_TISNUM);
+    dasm_put(Dst, 3490, -LJ_TISNUM, -LJ_TISNUM);
     }
-    dasm_put(Dst, 3440);
+    dasm_put(Dst, 3495);
       break;
     default:
     if (vk == 1) {
-    dasm_put(Dst, 3443, -LJ_TISNUM, -LJ_TISNUM);
+    dasm_put(Dst, 3498, -LJ_TISNUM, -LJ_TISNUM);
     } else {
-    dasm_put(Dst, 3448, -LJ_TISNUM, -LJ_TISNUM);
+    dasm_put(Dst, 3503, -LJ_TISNUM, -LJ_TISNUM);
     }
-    dasm_put(Dst, 3453);
+    dasm_put(Dst, 3508);
       break;
     }
-    dasm_put(Dst, 3456);
+    dasm_put(Dst, 3511);
     break;
   case BC_MODVN: case BC_MODNV: case BC_MODVV:
-    dasm_put(Dst, 3466);
+    dasm_put(Dst, 3521);
     vk = ((int)op - BC_ADDVN) / (BC_ADDNV-BC_ADDVN);
     switch (vk) {
     case 0:
-    dasm_put(Dst, 3469);
+    dasm_put(Dst, 3524);
       break;
     case 1:
-    dasm_put(Dst, 3472);
+    dasm_put(Dst, 3527);
       break;
     default:
-    dasm_put(Dst, 3475);
+    dasm_put(Dst, 3530);
       break;
     }
     if (vk == 1) {
-    dasm_put(Dst, 3478, -LJ_TISNUM, -LJ_TISNUM);
+    dasm_put(Dst, 3533, -LJ_TISNUM, -LJ_TISNUM);
     } else {
-    dasm_put(Dst, 3483, -LJ_TISNUM, -LJ_TISNUM);
+    dasm_put(Dst, 3538, -LJ_TISNUM, -LJ_TISNUM);
     }
-    dasm_put(Dst, 3488);
+    dasm_put(Dst, 3543);
     switch (vk) {
     case 0:
-    dasm_put(Dst, 3492);
+    dasm_put(Dst, 3547);
       break;
     case 1:
-    dasm_put(Dst, 3495);
+    dasm_put(Dst, 3550);
       break;
     default:
-    dasm_put(Dst, 3498);
+    dasm_put(Dst, 3553);
       break;
     }
-    dasm_put(Dst, 3501, ~LJ_TISNUM);
+    dasm_put(Dst, 3556, ~LJ_TISNUM);
     switch (vk) {
     case 0:
     if (vk == 1) {
-    dasm_put(Dst, 3515, -LJ_TISNUM, -LJ_TISNUM);
+    dasm_put(Dst, 3570, -LJ_TISNUM, -LJ_TISNUM);
     } else {
-    dasm_put(Dst, 3520, -LJ_TISNUM, -LJ_TISNUM);
+    dasm_put(Dst, 3575, -LJ_TISNUM, -LJ_TISNUM);
     }
-    dasm_put(Dst, 3525);
+    dasm_put(Dst, 3580);
       break;
     case 1:
     if (vk == 1) {
-    dasm_put(Dst, 3528, -LJ_TISNUM, -LJ_TISNUM);
+    dasm_put(Dst, 3583, -LJ_TISNUM, -LJ_TISNUM);
     } else {
-    dasm_put(Dst, 3533, -LJ_TISNUM, -LJ_TISNUM);
+    dasm_put(Dst, 3588, -LJ_TISNUM, -LJ_TISNUM);
     }
-    dasm_put(Dst, 3538);
+    dasm_put(Dst, 3593);
       break;
     default:
     if (vk == 1) {
-    dasm_put(Dst, 3541, -LJ_TISNUM, -LJ_TISNUM);
+    dasm_put(Dst, 3596, -LJ_TISNUM, -LJ_TISNUM);
     } else {
-    dasm_put(Dst, 3546, -LJ_TISNUM, -LJ_TISNUM);
+    dasm_put(Dst, 3601, -LJ_TISNUM, -LJ_TISNUM);
     }
-    dasm_put(Dst, 3551);
+    dasm_put(Dst, 3606);
       break;
     }
-    dasm_put(Dst, 3554);
+    dasm_put(Dst, 3609);
     break;
   case BC_POW:
-    dasm_put(Dst, 3559);
+    dasm_put(Dst, 3614);
     vk = ((int)op - BC_ADDVN) / (BC_ADDNV-BC_ADDVN);
     switch (vk) {
     case 0:
-    dasm_put(Dst, 3562);
+    dasm_put(Dst, 3617);
       break;
     case 1:
-    dasm_put(Dst, 3565);
+    dasm_put(Dst, 3620);
       break;
     default:
-    dasm_put(Dst, 3568);
+    dasm_put(Dst, 3623);
       break;
     }
     switch (vk) {
     case 0:
     if (vk == 1) {
-    dasm_put(Dst, 3571, -LJ_TISNUM, -LJ_TISNUM);
+    dasm_put(Dst, 3626, -LJ_TISNUM, -LJ_TISNUM);
     } else {
-    dasm_put(Dst, 3576, -LJ_TISNUM, -LJ_TISNUM);
+    dasm_put(Dst, 3631, -LJ_TISNUM, -LJ_TISNUM);
     }
-    dasm_put(Dst, 3581);
+    dasm_put(Dst, 3636);
       break;
     case 1:
     if (vk == 1) {
-    dasm_put(Dst, 3584, -LJ_TISNUM, -LJ_TISNUM);
+    dasm_put(Dst, 3639, -LJ_TISNUM, -LJ_TISNUM);
     } else {
-    dasm_put(Dst, 3589, -LJ_TISNUM, -LJ_TISNUM);
+    dasm_put(Dst, 3644, -LJ_TISNUM, -LJ_TISNUM);
     }
-    dasm_put(Dst, 3594);
+    dasm_put(Dst, 3649);
       break;
     default:
     if (vk == 1) {
-    dasm_put(Dst, 3597, -LJ_TISNUM, -LJ_TISNUM);
+    dasm_put(Dst, 3652, -LJ_TISNUM, -LJ_TISNUM);
     } else {
-    dasm_put(Dst, 3602, -LJ_TISNUM, -LJ_TISNUM);
+    dasm_put(Dst, 3657, -LJ_TISNUM, -LJ_TISNUM);
     }
-    dasm_put(Dst, 3607);
+    dasm_put(Dst, 3662);
       break;
     }
-    dasm_put(Dst, 3610);
+    dasm_put(Dst, 3665);
     break;
 
   case BC_CAT:
-    dasm_put(Dst, 3620, Dt1(->base), Dt1(->base));
+    dasm_put(Dst, 3675, Dt1(->base), Dt1(->base));
     break;
 
   /* -- Constant ops ------------------------------------------------------ */
 
   case BC_KSTR:
-    dasm_put(Dst, 3646, ~LJ_TSTR);
+    dasm_put(Dst, 3701, ~LJ_TSTR);
     break;
   case BC_KCDATA:
 #if LJ_HASFFI
-    dasm_put(Dst, 3658, ~LJ_TCDATA);
+    dasm_put(Dst, 3713, ~LJ_TCDATA);
 #endif
     break;
   case BC_KSHORT:
-    dasm_put(Dst, 3670, ~LJ_TISNUM);
+    dasm_put(Dst, 3725, ~LJ_TISNUM);
     break;
   case BC_KNUM:
-    dasm_put(Dst, 3681);
+    dasm_put(Dst, 3736);
     break;
   case BC_KPRI:
-    dasm_put(Dst, 3691);
+    dasm_put(Dst, 3746);
     break;
   case BC_KNIL:
-    dasm_put(Dst, 3701, ~LJ_TNIL);
+    dasm_put(Dst, 3756, ~LJ_TNIL);
     break;
 
   /* -- Upvalue and function ops ------------------------------------------ */
 
   case BC_UGET:
-    dasm_put(Dst, 3720, offsetof(GCfuncL, uvptr), DtA(->v));
+    dasm_put(Dst, 3775, offsetof(GCfuncL, uvptr), DtA(->v));
     break;
   case BC_USETV:
-    dasm_put(Dst, 3736, offsetof(GCfuncL, uvptr), DtA(->marked), DtA(->closed), DtA(->v), LJ_GC_BLACK, -LJ_TISGCV, -(LJ_TISNUM - LJ_TISGCV), Dt4(->gch.marked), -GG_DISP2G, LJ_GC_WHITES);
+    dasm_put(Dst, 3791, offsetof(GCfuncL, uvptr), DtA(->marked), DtA(->closed), DtA(->v), LJ_GC_BLACK, -LJ_TISGCV, -(LJ_TISNUM - LJ_TISGCV), Dt4(->gch.marked), -GG_DISP2G, LJ_GC_WHITES);
     break;
   case BC_USETS:
-    dasm_put(Dst, 3780, offsetof(GCfuncL, uvptr), ~LJ_TSTR, DtA(->marked), DtA(->v), DtA(->closed), LJ_GC_BLACK, Dt5(->marked), LJ_GC_WHITES, -GG_DISP2G);
+    dasm_put(Dst, 3835, offsetof(GCfuncL, uvptr), ~LJ_TSTR, DtA(->marked), DtA(->v), DtA(->closed), LJ_GC_BLACK, Dt5(->marked), LJ_GC_WHITES, -GG_DISP2G);
     break;
   case BC_USETN:
-    dasm_put(Dst, 3820, offsetof(GCfuncL, uvptr), DtA(->v));
+    dasm_put(Dst, 3875, offsetof(GCfuncL, uvptr), DtA(->v));
     break;
   case BC_USETP:
-    dasm_put(Dst, 3837, offsetof(GCfuncL, uvptr), DtA(->v));
+    dasm_put(Dst, 3892, offsetof(GCfuncL, uvptr), DtA(->v));
     break;
 
   case BC_UCLO:
-    dasm_put(Dst, 3853, Dt1(->openupval), Dt1(->base), Dt1(->base));
+    dasm_put(Dst, 3908, Dt1(->openupval), Dt1(->base), Dt1(->base));
     break;
 
   case BC_FNEW:
-    dasm_put(Dst, 3876, Dt1(->base), Dt1(->base), ~LJ_TFUNC);
+    dasm_put(Dst, 3931, Dt1(->base), Dt1(->base), ~LJ_TFUNC);
     break;
 
   /* -- Table ops --------------------------------------------------------- */
@@ -6194,111 +6279,111 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop)
   case BC_TNEW:
   case BC_TDUP:
     if (op == BC_TDUP) {
-      dasm_put(Dst, 3897);
+      dasm_put(Dst, 3952);
     }
-    dasm_put(Dst, 3899, DISPATCH_GL(gc.total), DISPATCH_GL(gc.threshold), Dt1(->base));
+    dasm_put(Dst, 3954, DISPATCH_GL(gc.total), DISPATCH_GL(gc.threshold), Dt1(->base));
     if (op == BC_TNEW) {
-      dasm_put(Dst, 3912);
+      dasm_put(Dst, 3967);
     } else {
-      dasm_put(Dst, 3921);
+      dasm_put(Dst, 3976);
     }
-    dasm_put(Dst, 3925, Dt1(->base), ~LJ_TTAB);
+    dasm_put(Dst, 3980, Dt1(->base), ~LJ_TTAB);
     break;
 
   case BC_GGET:
   case BC_GSET:
-    dasm_put(Dst, 3943, Dt7(->env));
+    dasm_put(Dst, 3998, Dt7(->env));
     if (op == BC_GGET) {
-      dasm_put(Dst, 3949);
+      dasm_put(Dst, 4004);
     } else {
-      dasm_put(Dst, 3952);
+      dasm_put(Dst, 4007);
     }
     break;
 
   case BC_TGETV:
-    dasm_put(Dst, 3955, -LJ_TTAB, -LJ_TISNUM, Dt6(->array), Dt6(->asize), -LJ_TNIL, Dt6(->metatable), Dt6(->nomm), 1<<MM_index, -LJ_TSTR);
+    dasm_put(Dst, 4010, -LJ_TTAB, -LJ_TISNUM, Dt6(->array), Dt6(->asize), -LJ_TNIL, Dt6(->metatable), Dt6(->nomm), 1<<MM_index, -LJ_TSTR);
     break;
   case BC_TGETS:
-    dasm_put(Dst, 4012, -LJ_TTAB, Dt6(->hmask), Dt5(->hash), Dt6(->node), DtB(->key), DtB(->val), DtB(->next), -LJ_TSTR, -LJ_TNIL, Dt6(->metatable), ~LJ_TNIL, Dt6(->nomm));
-    dasm_put(Dst, 4072, 1<<MM_index);
+    dasm_put(Dst, 4067, -LJ_TTAB, Dt6(->hmask), Dt5(->hash), Dt6(->node), DtB(->key), DtB(->val), DtB(->next), -LJ_TSTR, -LJ_TNIL, Dt6(->metatable), ~LJ_TNIL, Dt6(->nomm));
+    dasm_put(Dst, 4127, 1<<MM_index);
     break;
   case BC_TGETB:
-    dasm_put(Dst, 4079, -LJ_TTAB, Dt6(->asize), Dt6(->array), -LJ_TNIL, Dt6(->metatable), Dt6(->nomm), 1<<MM_index);
+    dasm_put(Dst, 4134, -LJ_TTAB, Dt6(->asize), Dt6(->array), -LJ_TNIL, Dt6(->metatable), Dt6(->nomm), 1<<MM_index);
     break;
 
   case BC_TSETV:
-    dasm_put(Dst, 4122, -LJ_TTAB, -LJ_TISNUM, Dt6(->array), Dt6(->asize), -LJ_TNIL, Dt6(->marked), LJ_GC_BLACK, Dt6(->metatable), Dt6(->nomm), 1<<MM_newindex);
-    dasm_put(Dst, 4182, DISPATCH_GL(gc.grayagain), LJ_GC_BLACK, DISPATCH_GL(gc.grayagain), Dt6(->marked), Dt6(->gclist), -LJ_TSTR);
+    dasm_put(Dst, 4177, -LJ_TTAB, -LJ_TISNUM, Dt6(->array), Dt6(->asize), -LJ_TNIL, Dt6(->marked), LJ_GC_BLACK, Dt6(->metatable), Dt6(->nomm), 1<<MM_newindex);
+    dasm_put(Dst, 4237, DISPATCH_GL(gc.grayagain), LJ_GC_BLACK, DISPATCH_GL(gc.grayagain), Dt6(->marked), Dt6(->gclist), -LJ_TSTR);
     break;
   case BC_TSETS:
-    dasm_put(Dst, 4203, -LJ_TTAB, Dt6(->hmask), Dt5(->hash), Dt6(->node), Dt6(->nomm), DtB(->key), DtB(->val.it), DtB(->next), -LJ_TSTR, Dt6(->marked), -LJ_TNIL, LJ_GC_BLACK, DtB(->val));
-    dasm_put(Dst, 4261, Dt6(->metatable), Dt6(->nomm), 1<<MM_newindex, Dt6(->metatable), Dt1(->base), Dt6(->nomm), 1<<MM_newindex, ~LJ_TSTR, Dt1(->base), DISPATCH_GL(gc.grayagain), LJ_GC_BLACK);
-    dasm_put(Dst, 4314, DISPATCH_GL(gc.grayagain), Dt6(->marked), Dt6(->gclist));
+    dasm_put(Dst, 4258, -LJ_TTAB, Dt6(->hmask), Dt5(->hash), Dt6(->node), Dt6(->nomm), DtB(->key), DtB(->val.it), DtB(->next), -LJ_TSTR, Dt6(->marked), -LJ_TNIL, LJ_GC_BLACK, DtB(->val));
+    dasm_put(Dst, 4316, Dt6(->metatable), Dt6(->nomm), 1<<MM_newindex, Dt6(->metatable), Dt1(->base), Dt6(->nomm), 1<<MM_newindex, ~LJ_TSTR, Dt1(->base), DISPATCH_GL(gc.grayagain), LJ_GC_BLACK);
+    dasm_put(Dst, 4369, DISPATCH_GL(gc.grayagain), Dt6(->marked), Dt6(->gclist));
     break;
   case BC_TSETB:
-    dasm_put(Dst, 4323, -LJ_TTAB, Dt6(->asize), Dt6(->array), -LJ_TNIL, Dt6(->marked), LJ_GC_BLACK, Dt6(->metatable), Dt6(->nomm), 1<<MM_newindex, DISPATCH_GL(gc.grayagain), LJ_GC_BLACK);
-    dasm_put(Dst, 4380, DISPATCH_GL(gc.grayagain), Dt6(->marked), Dt6(->gclist));
+    dasm_put(Dst, 4378, -LJ_TTAB, Dt6(->asize), Dt6(->array), -LJ_TNIL, Dt6(->marked), LJ_GC_BLACK, Dt6(->metatable), Dt6(->nomm), 1<<MM_newindex, DISPATCH_GL(gc.grayagain), LJ_GC_BLACK);
+    dasm_put(Dst, 4435, DISPATCH_GL(gc.grayagain), Dt6(->marked), Dt6(->gclist));
     break;
 
   case BC_TSETM:
-    dasm_put(Dst, 4389, Dt6(->asize), Dt6(->array), Dt6(->marked), LJ_GC_BLACK, Dt1(->base), DISPATCH_GL(gc.grayagain), LJ_GC_BLACK, DISPATCH_GL(gc.grayagain), Dt6(->marked), Dt6(->gclist));
+    dasm_put(Dst, 4444, Dt6(->asize), Dt6(->array), Dt6(->marked), LJ_GC_BLACK, Dt1(->base), DISPATCH_GL(gc.grayagain), LJ_GC_BLACK, DISPATCH_GL(gc.grayagain), Dt6(->marked), Dt6(->gclist));
     break;
 
   /* -- Calls and vararg handling ----------------------------------------- */
 
   case BC_CALLM:
-    dasm_put(Dst, 4449);
+    dasm_put(Dst, 4504);
     break;
   case BC_CALL:
-    dasm_put(Dst, 4455, -LJ_TFUNC, Dt7(->field_pc));
+    dasm_put(Dst, 4510, -LJ_TFUNC, Dt7(->field_pc));
     break;
 
   case BC_CALLMT:
-    dasm_put(Dst, 4475);
+    dasm_put(Dst, 4530);
     break;
   case BC_CALLT:
-    dasm_put(Dst, 4480, -LJ_TFUNC, Dt7(->ffid), FRAME_TYPE, Dt7(->field_pc), Dt7(->field_pc), PC2PROTO(k), FRAME_VARG, FRAME_TYPEP);
-    dasm_put(Dst, 4541, FRAME_TYPE);
+    dasm_put(Dst, 4535, -LJ_TFUNC, Dt7(->ffid), FRAME_TYPE, Dt7(->field_pc), Dt7(->field_pc), PC2PROTO(k), FRAME_VARG, FRAME_TYPEP);
+    dasm_put(Dst, 4596, FRAME_TYPE);
     break;
 
   case BC_ITERC:
-    dasm_put(Dst, 4552, -LJ_TFUNC, Dt7(->field_pc));
+    dasm_put(Dst, 4607, -LJ_TFUNC, Dt7(->field_pc));
     break;
 
   case BC_ITERN:
 #if LJ_HASJIT
 #endif
-    dasm_put(Dst, 4576, Dt6(->asize), Dt6(->array), -LJ_TNIL, ~LJ_TISNUM, Dt6(->hmask), Dt6(->node), DtB(->val), -LJ_TNIL, DtB(->key));
+    dasm_put(Dst, 4631, Dt6(->asize), Dt6(->array), -LJ_TNIL, ~LJ_TISNUM, Dt6(->hmask), Dt6(->node), DtB(->val), -LJ_TNIL, DtB(->key));
     break;
 
   case BC_ISNEXT:
-    dasm_put(Dst, 4641, -LJ_TFUNC, Dt8(->ffid), -LJ_TTAB, -LJ_TNIL, FF_next_N, BC_JMP, BC_ITERC);
+    dasm_put(Dst, 4696, -LJ_TFUNC, Dt8(->ffid), -LJ_TTAB, -LJ_TNIL, FF_next_N, BC_JMP, BC_ITERC);
     break;
 
   case BC_VARG:
-    dasm_put(Dst, 4680, FRAME_VARG, ~LJ_TNIL, Dt1(->maxstack), Dt1(->top), Dt1(->base), Dt1(->base));
+    dasm_put(Dst, 4735, FRAME_VARG, ~LJ_TNIL, Dt1(->maxstack), Dt1(->top), Dt1(->base), Dt1(->base));
     break;
 
   /* -- Returns ----------------------------------------------------------- */
 
   case BC_RETM:
-    dasm_put(Dst, 4752);
+    dasm_put(Dst, 4807);
     break;
 
   case BC_RET:
-    dasm_put(Dst, 4759, FRAME_TYPE, FRAME_VARG, Dt7(->field_pc), PC2PROTO(k), ~LJ_TNIL, FRAME_TYPEP);
+    dasm_put(Dst, 4814, FRAME_TYPE, FRAME_VARG, Dt7(->field_pc), PC2PROTO(k), ~LJ_TNIL, FRAME_TYPEP);
     break;
 
   case BC_RET0: case BC_RET1:
-    dasm_put(Dst, 4824, FRAME_TYPE, FRAME_VARG);
+    dasm_put(Dst, 4879, FRAME_TYPE, FRAME_VARG);
     if (op == BC_RET1) {
-      dasm_put(Dst, 4835);
+      dasm_put(Dst, 4890);
     }
-    dasm_put(Dst, 4837);
+    dasm_put(Dst, 4892);
     if (op == BC_RET1) {
-      dasm_put(Dst, 4840);
+      dasm_put(Dst, 4895);
     }
-    dasm_put(Dst, 4842, Dt7(->field_pc), PC2PROTO(k), ~LJ_TNIL);
+    dasm_put(Dst, 4897, Dt7(->field_pc), PC2PROTO(k), ~LJ_TNIL);
     break;
 
   /* -- Loops and branches ------------------------------------------------ */
@@ -6306,7 +6391,7 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop)
 
   case BC_FORL:
 #if LJ_HASJIT
-    dasm_put(Dst, 4868);
+    dasm_put(Dst, 4923);
 #endif
     break;
 
@@ -6318,63 +6403,63 @@ 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, 4870);
+    dasm_put(Dst, 4925);
     if (!vk) {
-      dasm_put(Dst, 4873, -LJ_TISNUM, -LJ_TISNUM, -LJ_TISNUM);
+      dasm_put(Dst, 4928, -LJ_TISNUM, -LJ_TISNUM, -LJ_TISNUM);
     } else {
-      dasm_put(Dst, 4891, -LJ_TISNUM);
+      dasm_put(Dst, 4946, -LJ_TISNUM);
       if (op == BC_IFORL) {
-       dasm_put(Dst, 4899);
+       dasm_put(Dst, 4954);
       } else {
-       dasm_put(Dst, 4901);
+       dasm_put(Dst, 4956);
       }
-      dasm_put(Dst, 4903);
+      dasm_put(Dst, 4958);
     }
-    dasm_put(Dst, 4908);
+    dasm_put(Dst, 4963);
     if (op == BC_FORI) {
-      dasm_put(Dst, 4910);
+      dasm_put(Dst, 4965);
     } else if (op == BC_JFORI) {
-      dasm_put(Dst, 4912);
+      dasm_put(Dst, 4967);
     } else if (op == BC_IFORL) {
-      dasm_put(Dst, 4914);
+      dasm_put(Dst, 4969);
     } else {
-      dasm_put(Dst, 4916);
+      dasm_put(Dst, 4971);
     }
     if (vk) {
-      dasm_put(Dst, 4918);
+      dasm_put(Dst, 4973);
     }
-    dasm_put(Dst, 4920);
+    dasm_put(Dst, 4975);
     if (!vk) {
-      dasm_put(Dst, 4930);
+      dasm_put(Dst, 4985);
     } else {
-      dasm_put(Dst, 4932);
+      dasm_put(Dst, 4987);
     }
-    dasm_put(Dst, 4934);
+    dasm_put(Dst, 4989);
     if (!vk) {
-      dasm_put(Dst, 4938, -LJ_TISNUM, -LJ_TISNUM);
+      dasm_put(Dst, 4993, -LJ_TISNUM, -LJ_TISNUM);
     } else {
-      dasm_put(Dst, 4950);
+      dasm_put(Dst, 5005);
     }
-    dasm_put(Dst, 4959);
+    dasm_put(Dst, 5014);
     if (op == BC_FORI) {
-      dasm_put(Dst, 4963);
+      dasm_put(Dst, 5018);
     } else if (op == BC_JFORI) {
-      dasm_put(Dst, 4965);
+      dasm_put(Dst, 5020);
     } else if (op == BC_IFORL) {
-      dasm_put(Dst, 4967);
+      dasm_put(Dst, 5022);
     } else {
-      dasm_put(Dst, 4969);
+      dasm_put(Dst, 5024);
     }
-    dasm_put(Dst, 4971);
+    dasm_put(Dst, 5026);
     if (vk) {
-      dasm_put(Dst, 4977);
+      dasm_put(Dst, 5032);
     }
-    dasm_put(Dst, 4982);
+    dasm_put(Dst, 5037);
     break;
 
   case BC_ITERL:
 #if LJ_HASJIT
-    dasm_put(Dst, 4988);
+    dasm_put(Dst, 5043);
 #endif
     break;
 
@@ -6383,40 +6468,40 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop)
     break;
 #endif
   case BC_IITERL:
-    dasm_put(Dst, 4990);
+    dasm_put(Dst, 5045);
     if (op == BC_JITERL) {
-      dasm_put(Dst, 4992);
+      dasm_put(Dst, 5047);
     } else {
-      dasm_put(Dst, 4994, -LJ_TNIL);
+      dasm_put(Dst, 5049, -LJ_TNIL);
     }
-    dasm_put(Dst, 5000);
+    dasm_put(Dst, 5055);
     break;
 
   case BC_LOOP:
 #if LJ_HASJIT
-    dasm_put(Dst, 5007);
+    dasm_put(Dst, 5062);
 #endif
     break;
 
   case BC_ILOOP:
-    dasm_put(Dst, 5009);
+    dasm_put(Dst, 5064);
     break;
 
   case BC_JLOOP:
 #if LJ_HASJIT
-    dasm_put(Dst, 5016);
+    dasm_put(Dst, 5071);
 #endif
     break;
 
   case BC_JMP:
-    dasm_put(Dst, 5018);
+    dasm_put(Dst, 5073);
     break;
 
   /* -- Function headers -------------------------------------------------- */
 
   case BC_FUNCF:
 #if LJ_HASJIT
-    dasm_put(Dst, 5027);
+    dasm_put(Dst, 5082);
 #endif
   case BC_FUNCV:  /* NYI: compiled vararg functions. */
     break;
@@ -6426,38 +6511,38 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop)
     break;
 #endif
   case BC_IFUNCF:
-    dasm_put(Dst, 5029, Dt1(->maxstack), -4+PC2PROTO(numparams), -4+PC2PROTO(k), ~LJ_TNIL);
+    dasm_put(Dst, 5084, Dt1(->maxstack), -4+PC2PROTO(numparams), -4+PC2PROTO(k), ~LJ_TNIL);
     if (op == BC_JFUNCF) {
-      dasm_put(Dst, 5047);
+      dasm_put(Dst, 5102);
     } else {
-      dasm_put(Dst, 5049);
+      dasm_put(Dst, 5104);
     }
-    dasm_put(Dst, 5054);
+    dasm_put(Dst, 5109);
     break;
 
   case BC_JFUNCV:
 #if !LJ_HASJIT
     break;
 #endif
-    dasm_put(Dst, 5060);
+    dasm_put(Dst, 5115);
     break;  /* NYI: compiled vararg functions. */
 
   case BC_IFUNCV:
-    dasm_put(Dst, 5062, Dt1(->maxstack), 8+FRAME_VARG, -4+PC2PROTO(k), -4+PC2PROTO(numparams), ~LJ_TNIL);
+    dasm_put(Dst, 5117, Dt1(->maxstack), 8+FRAME_VARG, -4+PC2PROTO(k), -4+PC2PROTO(numparams), ~LJ_TNIL);
     break;
 
   case BC_FUNCC:
   case BC_FUNCCW:
     if (op == BC_FUNCC) {
-      dasm_put(Dst, 5103, Dt8(->f));
+      dasm_put(Dst, 5158, Dt8(->f));
     } else {
-      dasm_put(Dst, 5106, DISPATCH_GL(wrapf));
+      dasm_put(Dst, 5161, DISPATCH_GL(wrapf));
     }
-    dasm_put(Dst, 5109, Dt1(->maxstack), Dt1(->base), Dt1(->top));
+    dasm_put(Dst, 5164, Dt1(->maxstack), Dt1(->base), Dt1(->top));
     if (op == BC_FUNCCW) {
-      dasm_put(Dst, 5119, Dt8(->f));
+      dasm_put(Dst, 5174, Dt8(->f));
     }
-    dasm_put(Dst, 5122, LJ_VMST_C, DISPATCH_GL(vmstate), Dt1(->base), LJ_VMST_INTERP, Dt1(->top), DISPATCH_GL(vmstate));
+    dasm_put(Dst, 5177, LJ_VMST_C, DISPATCH_GL(vmstate), Dt1(->base), LJ_VMST_INTERP, Dt1(->top), DISPATCH_GL(vmstate));
     break;
 
   /* ---------------------------------------------------------------------- */
@@ -6477,7 +6562,7 @@ static int build_backend(BuildCtx *ctx)
 
   build_subroutines(ctx);
 
-  dasm_put(Dst, 5144);
+  dasm_put(Dst, 5199);
   for (op = 0; op < BC__MAX; op++)
     build_ins(ctx, (BCOp)op, op);
 
index 43774a7d7598221e511eaa42b2e1a256ac60e991..f98542399d961ecfa3127ab3317d116e4b154009 100644 (file)
 #define LJ_TARGET_MASKSHIFT    0
 #define LJ_TARGET_MASKROT      1
 #define LJ_ARCH_DUALNUM                2
-#define LJ_ARCH_NOFFI          1       /* NYI: comparisons, calls. */
 #define LJ_ARCH_NOJIT          1
 
 #elif LUAJIT_TARGET == LUAJIT_ARCH_PPC