From a1ffb6114f2e2651831e7abc44dd313b7ee5ac97 Mon Sep 17 00:00:00 2001 From: Mike Pall Date: Mon, 18 Apr 2011 21:23:21 +0200 Subject: [PATCH] ARM: Add missing FFI functionality. Enable FFI for ARM. --- src/buildvm_arm.dasc | 61 +- src/buildvm_arm.h | 2149 ++++++++++++++++++++++-------------------- src/lj_arch.h | 1 - 3 files changed, 1172 insertions(+), 1039 deletions(-) diff --git a/src/buildvm_arm.dasc b/src/buildvm_arm.dasc index 68f33d97..9032c9c2 100644 --- a/src/buildvm_arm.dasc +++ b/src/buildvm_arm.dasc @@ -172,6 +172,7 @@ |// 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 diff --git a/src/buildvm_arm.h b/src/buildvm_arm.h index 738d293a..70c21538 100644 --- a/src/buildvm_arm.h +++ b/src/buildvm_arm.h @@ -12,7 +12,7 @@ #define DASM_SECTION_CODE_OP 0 #define DASM_SECTION_CODE_SUB 1 #define DASM_MAXSECTION 2 -static const unsigned int build_actionlist[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, -0xe1c400d0, -0xe35b0008, -0x3a000000, -0x00050043, -0xe3710000, -0x000a0000, -0x9a000000, -0x00050046, -0xea000000, -0x00050043, +0x00050047, 0x0006004b, 0xe1c400d0, 0xe35b0008, 0x3a000000, -0x00050043, +0x00050044, +0xe3710000, +0x000a0000, +0x9a000000, +0x00050047, +0xea000000, +0x00050044, +0x0006004c, +0xe1c400d0, +0xe35b0008, +0x3a000000, +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, +0xe1c400d0, +0xe35b0008, +0x3a000000, +0x00050044, +0xe3710000, +0x000a0000, +0x2a000000, +0x00050044, +0xeb000000, +0x00030014, +0xea000000, +0x00050047, +0x0006005f, 0x00000000, 0xe1c400d0, 0xe35b0008, 0x3a000000, -0x00050043, +0x00050044, 0xe3710000, 0x000a0000, 0x2a000000, -0x00050043, -0xeb000000, -0x00030014, -0xea000000, -0x00050046, -0x0006005f, -0xe1c400d0, -0xe35b0008, -0x3a000000, -0x00050043, -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, -0x0006006b, -0xe1c400d0, -0xe35b0008, -0x3a000000, -0x00050043, -0xe3710000, -0x000a0000, -0x2a000000, -0x00050043, -0xe14220d0, -0x000c8100, -0xeb000000, -0x00030020, -0xea000000, -0x00050046, -0x0006006c, 0xe1c400d0, 0xe1c420d8, 0xe35b0010, 0x3a000000, -0x00050043, +0x00050044, 0xe3710000, 0x000a0000, -0x2a000000, -0x00050043, -0xe3730000, +0x33730000, 0x000a0000, -0x1a000000, -0x00050043, -0x00000000, +0x2a000000, +0x00050044, 0xeb000000, -0x00030021, +0x00030020, 0xea000000, -0x00050046, -0x0006006d, +0x00050047, +0x0006006b, +0x0006006c, 0xe1c400d0, 0xe35b0008, 0x3a000000, -0x00050043, +0x00050044, 0xe3710000, 0x000a0000, 0x2a000000, -0x00050043, -0xe1a0200d, +0x00050044, +0xe14220d0, +0x000c8100, +0xeb000000, +0x00030021, +0xea000000, +0x00050047, +0x0006006d, +0xe1c400d0, +0xe1c420d8, +0xe35b0010, +0x3a000000, +0x00050044, +0xe3710000, +0x000a0000, +0x2a000000, +0x00050044, +0xe3730000, +0x000a0000, +0x1a000000, +0x00050044, +0x00000000, 0xeb000000, 0x00030022, +0xea000000, +0x00050047, +0x0006006e, +0xe1c400d0, +0xe35b0008, +0x3a000000, +0x00050044, +0xe3710000, +0x000a0000, +0x2a000000, +0x00050044, +0xe1a0200d, +0xeb000000, +0x00030023, 0xe59d2000, 0xe3e03000, 0x000a0000, @@ -1766,30 +1779,30 @@ static const unsigned int build_actionlist[5145] = { 0x000a0000, 0xe1c420f0, 0xea000000, -0x00050044, -0x0006006e, -0xe1c400d0, -0xe35b0008, -0x3a000000, -0x00050043, -0xe3710000, -0x000a0000, -0x2a000000, -0x00050043, -0xe2442008, -0xe5146004, -0xeb000000, -0x00030023, -0xe3a0b000, -0x000a0000, -0xe1c400f0, -0xea000000, -0x00050044, +0x00050045, 0x0006006f, 0xe1c400d0, 0xe35b0008, 0x3a000000, -0x00050043, +0x00050044, +0xe3710000, +0x000a0000, +0x2a000000, +0x00050044, +0xe2442008, +0xe5146004, +0xeb000000, +0x00030024, +0xe3a0b000, +0x000a0000, +0xe1c400f0, +0xea000000, +0x00050045, +0x00060070, +0xe1c400d0, +0xe35b0008, +0x3a000000, +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,56 +2124,15 @@ static const unsigned int build_actionlist[5145] = { 0x000a0000, 0xe15c0002, 0x3a000000, -0x00050043, +0x00050044, 0x0006000b, 0xe4d0c001, 0xe2533001, 0xba000000, -0x00050074, +0x00050075, 0xe7c1c003, 0xea000000, 0x0005000b, -0x00060079, -0xe5170000, -0x000d8180, -0xe5171000, -0x000d8180, -0xe1500001, -0xab000000, -0x0005004c, -0xe1c400d0, -0xe35b0008, -0x3a000000, -0x00050043, -0x00000000, -0xe3710000, -0x000a0000, -0x1a000000, -0x00050043, -0xe5102000, -0x000d8180, -0xe517c000, -0x000d8180, -0xe5171000, -0x000d8180, -0xe3a03000, -0xe2800000, -0x000a0000, -0xe15c0002, -0x3a000000, -0x00050043, -0x0006000b, -0xe7d0c003, -0xe1530002, -0x2a000000, -0x00050074, -0xe24cb041, -0xe35b001a, -0x322cc020, -0xe7c1c003, -0xe2833001, -0xea000000, -0x0005000b, 0x0006007a, 0xe5170000, 0x000d8180, @@ -2168,15 +2140,16 @@ static const unsigned int build_actionlist[5145] = { 0x000d8180, 0xe1500001, 0xab000000, -0x0005004c, +0x0005004d, 0xe1c400d0, 0xe35b0008, 0x3a000000, -0x00050043, +0x00050044, +0x00000000, 0xe3710000, 0x000a0000, 0x1a000000, -0x00050043, +0x00050044, 0xe5102000, 0x000d8180, 0xe517c000, @@ -2188,14 +2161,13 @@ static const unsigned int build_actionlist[5145] = { 0x000a0000, 0xe15c0002, 0x3a000000, -0x00050043, +0x00050044, 0x0006000b, -0x00000000, 0xe7d0c003, 0xe1530002, 0x2a000000, -0x00050074, -0xe24cb061, +0x00050075, +0xe24cb041, 0xe35b001a, 0x322cc020, 0xe7c1c003, @@ -2203,24 +2175,65 @@ static const unsigned int build_actionlist[5145] = { 0xea000000, 0x0005000b, 0x0006007b, +0xe5170000, +0x000d8180, +0xe5171000, +0x000d8180, +0xe1500001, +0xab000000, +0x0005004d, 0xe1c400d0, 0xe35b0008, 0x3a000000, -0x00050043, +0x00050044, 0xe3710000, 0x000a0000, 0x1a000000, -0x00050043, +0x00050044, +0xe5102000, +0x000d8180, +0xe517c000, +0x000d8180, +0xe5171000, +0x000d8180, +0xe3a03000, +0xe2800000, +0x000a0000, +0xe15c0002, +0x3a000000, +0x00050044, +0x0006000b, +0x00000000, +0xe7d0c003, +0xe1530002, +0x2a000000, +0x00050075, +0xe24cb061, +0xe35b001a, +0x322cc020, +0xe7c1c003, +0xe2833001, +0xea000000, +0x0005000b, +0x0006007c, +0xe1c400d0, +0xe35b0008, +0x3a000000, +0x00050044, +0xe3710000, +0x000a0000, +0x1a000000, +0x00050044, 0xeb000000, -0x00030027, +0x00030028, 0xe3e01000, 0x000a0000, 0xea000000, -0x00050046, -0x0006007c, -0x8a000000, -0x00050043, +0x00050047, 0x0006007d, +0x8a000000, +0x00050044, +0x0006007e, 0xe1a0c081, 0xe29cc980, 0x53a00000, @@ -2245,53 +2258,29 @@ static const unsigned int build_actionlist[5145] = { 0xe1830c10, 0xb2600000, 0xe12fff1e, -0x0006007e, -0xe1c400d0, -0xe35b0008, -0x3a000000, -0x00050043, -0xe3710000, -0x000a0000, -0x1b000000, -0x0005007c, -0xe3e01000, -0x000a0000, -0xea000000, -0x00050046, 0x0006007f, 0xe1c400d0, 0xe35b0008, 0x3a000000, -0x00050043, -0x00000000, +0x00050044, 0xe3710000, 0x000a0000, 0x1b000000, -0x0005007c, -0xe1a02000, -0xe3a0a008, -0x0006000b, -0xe18400da, -0xe15a000b, -0xe28aa008, -0xaa000000, -0x00050002, -0xe3710000, +0x0005007d, +0xe3e01000, 0x000a0000, -0x1b000000, -0x0005007c, -0xe0022000, 0xea000000, -0x0005000b, +0x00050047, 0x00060080, 0xe1c400d0, 0xe35b0008, 0x3a000000, -0x00050043, +0x00050044, +0x00000000, 0xe3710000, 0x000a0000, 0x1b000000, -0x0005007c, +0x0005007d, 0xe1a02000, 0xe3a0a008, 0x0006000b, @@ -2303,19 +2292,43 @@ static const unsigned int build_actionlist[5145] = { 0xe3710000, 0x000a0000, 0x1b000000, -0x0005007c, -0xe1822000, +0x0005007d, +0xe0022000, 0xea000000, 0x0005000b, 0x00060081, 0xe1c400d0, 0xe35b0008, 0x3a000000, -0x00050043, +0x00050044, 0xe3710000, 0x000a0000, 0x1b000000, -0x0005007c, +0x0005007d, +0xe1a02000, +0xe3a0a008, +0x0006000b, +0xe18400da, +0xe15a000b, +0xe28aa008, +0xaa000000, +0x00050002, +0xe3710000, +0x000a0000, +0x1b000000, +0x0005007d, +0xe1822000, +0xea000000, +0x0005000b, +0x00060082, +0xe1c400d0, +0xe35b0008, +0x3a000000, +0x00050044, +0xe3710000, +0x000a0000, +0x1b000000, +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, -0xe1c400d8, -0xe35b0010, -0x3a000000, -0x00050043, -0xe3710000, -0x000a0000, -0x1b000000, -0x0005007c, -0x00000000, -0xe200a01f, -0xe1c400d0, -0xe3710000, -0x000a0000, -0x1b000000, -0x0005007c, -0xe1a00a10, -0xe3e01000, -0x000a0000, -0xea000000, -0x00050046, +0x00050047, 0x00060085, 0xe1c400d8, 0xe35b0010, 0x3a000000, -0x00050043, +0x00050044, 0xe3710000, 0x000a0000, 0x1b000000, -0x0005007c, +0x0005007d, +0x00000000, 0xe200a01f, 0xe1c400d0, 0xe3710000, 0x000a0000, 0x1b000000, -0x0005007c, -0xe1a00a30, +0x0005007d, +0xe1a00a10, 0xe3e01000, 0x000a0000, 0xea000000, -0x00050046, +0x00050047, 0x00060086, 0xe1c400d8, 0xe35b0010, 0x3a000000, -0x00050043, +0x00050044, 0xe3710000, 0x000a0000, 0x1b000000, -0x0005007c, +0x0005007d, 0xe200a01f, 0xe1c400d0, 0xe3710000, 0x000a0000, 0x1b000000, -0x0005007c, -0xe1a00a50, +0x0005007d, +0xe1a00a30, 0xe3e01000, 0x000a0000, 0xea000000, -0x00050046, +0x00050047, 0x00060087, 0xe1c400d8, 0xe35b0010, 0x3a000000, -0x00050043, +0x00050044, +0xe3710000, +0x000a0000, +0x1b000000, +0x0005007d, +0xe200a01f, +0xe1c400d0, +0xe3710000, +0x000a0000, +0x1b000000, +0x0005007d, +0xe1a00a50, +0xe3e01000, +0x000a0000, +0xea000000, +0x00050047, +0x00060088, +0xe1c400d8, +0xe35b0010, +0x3a000000, +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, -0x00000000, -0xe7f001f0, -0x00000000, 0x00060098, 0x00000000, 0xe7f001f0, 0x00000000, 0x00060099, +0x00000000, +0xe7f001f0, +0x00000000, +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, -0x00000000, -0x124c6b80, +0x0006000b, 0x00000000, 0x0006000b, +0x124c6b80, +0x00000000, +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, -0x00000000, -0x6a000000, 0x0005003b, 0x00000000, 0x6a000000, -0x0005003d, +0x0005003c, +0x00000000, +0x6a000000, +0x0005003e, 0x00000000, 0x0006000e, 0xe496e004, @@ -3201,19 +3256,6 @@ static const unsigned int build_actionlist[5145] = { 0x000a0000, 0x00000000, 0x2a000000, -0x0005003a, -0x00000000, -0xe3730000, -0x000a0000, -0x33710000, -0x000a0000, -0x00000000, -0xe3710000, -0x000a0000, -0x33730000, -0x000a0000, -0x00000000, -0x2a000000, 0x0005003b, 0x00000000, 0xe3730000, @@ -3227,10 +3269,23 @@ static const unsigned int build_actionlist[5145] = { 0x000a0000, 0x00000000, 0x2a000000, -0x0005003d, +0x0005003c, +0x00000000, +0xe3730000, +0x000a0000, +0x33710000, +0x000a0000, +0x00000000, +0xe3710000, +0x000a0000, +0x33730000, +0x000a0000, +0x00000000, +0x2a000000, +0x0005003e, 0x00000000, 0xeb000000, -0x0003002c, +0x0003002d, 0xe5d6c000, 0xea000000, 0x0005000e, @@ -3264,13 +3319,13 @@ static const unsigned int build_actionlist[5145] = { 0xe0500002, 0x00000000, 0x6a000000, -0x0005003a, -0x00000000, -0x6a000000, 0x0005003b, 0x00000000, 0x6a000000, -0x0005003d, +0x0005003c, +0x00000000, +0x6a000000, +0x0005003e, 0x00000000, 0x0006000e, 0xe496e004, @@ -3292,19 +3347,6 @@ static const unsigned int build_actionlist[5145] = { 0x000a0000, 0x00000000, 0x2a000000, -0x0005003a, -0x00000000, -0xe3730000, -0x000a0000, -0x33710000, -0x000a0000, -0x00000000, -0xe3710000, -0x000a0000, -0x33730000, -0x000a0000, -0x00000000, -0x2a000000, 0x0005003b, 0x00000000, 0xe3730000, @@ -3318,10 +3360,23 @@ static const unsigned int build_actionlist[5145] = { 0x000a0000, 0x00000000, 0x2a000000, -0x0005003d, +0x0005003c, +0x00000000, +0xe3730000, +0x000a0000, +0x33710000, +0x000a0000, +0x00000000, +0xe3710000, +0x000a0000, +0x33730000, +0x000a0000, +0x00000000, +0x2a000000, +0x0005003e, 0x00000000, 0xeb000000, -0x0003002d, +0x0003002e, 0xe5d6c000, 0xea000000, 0x0005000e, @@ -3356,13 +3411,13 @@ static const unsigned int build_actionlist[5145] = { 0xe15b0fc0, 0x00000000, 0x1a000000, -0x0005003a, -0x00000000, -0x1a000000, 0x0005003b, 0x00000000, 0x1a000000, -0x0005003d, +0x0005003c, +0x00000000, +0x1a000000, +0x0005003e, 0x00000000, 0x0006000e, 0xe496e004, @@ -3384,19 +3439,6 @@ static const unsigned int build_actionlist[5145] = { 0x000a0000, 0x00000000, 0x2a000000, -0x0005003a, -0x00000000, -0xe3730000, -0x000a0000, -0x33710000, -0x000a0000, -0x00000000, -0xe3710000, -0x000a0000, -0x33730000, -0x000a0000, -0x00000000, -0x2a000000, 0x0005003b, 0x00000000, 0xe3730000, @@ -3410,10 +3452,23 @@ static const unsigned int build_actionlist[5145] = { 0x000a0000, 0x00000000, 0x2a000000, -0x0005003d, +0x0005003c, +0x00000000, +0xe3730000, +0x000a0000, +0x33710000, +0x000a0000, +0x00000000, +0xe3710000, +0x000a0000, +0x33730000, +0x000a0000, +0x00000000, +0x2a000000, +0x0005003e, 0x00000000, 0xeb000000, -0x00030020, +0x00030021, 0xe5d6c000, 0xea000000, 0x0005000e, @@ -3441,19 +3496,6 @@ static const unsigned int build_actionlist[5145] = { 0x000a0000, 0x00000000, 0x2a000000, -0x0005003a, -0x00000000, -0xe3730000, -0x000a0000, -0x33710000, -0x000a0000, -0x00000000, -0xe3710000, -0x000a0000, -0x33730000, -0x000a0000, -0x00000000, -0x2a000000, 0x0005003b, 0x00000000, 0xe3730000, @@ -3467,10 +3509,23 @@ static const unsigned int build_actionlist[5145] = { 0x000a0000, 0x00000000, 0x2a000000, -0x0005003d, +0x0005003c, +0x00000000, +0xe3730000, +0x000a0000, +0x33710000, +0x000a0000, +0x00000000, +0xe3710000, +0x000a0000, +0x33730000, +0x000a0000, +0x00000000, +0x2a000000, +0x0005003e, 0x00000000, 0xeb000000, -0x0003002b, +0x0003002c, 0xe5d6c000, 0xe496e004, 0xe18400fa, @@ -3506,16 +3561,16 @@ static const unsigned int build_actionlist[5145] = { 0xe1b01002, 0x00000000, 0x0a000000, -0x0005003a, -0x00000000, -0x0a000000, 0x0005003b, 0x00000000, 0x0a000000, -0x0005003d, +0x0005003c, +0x00000000, +0x0a000000, +0x0005003e, 0x00000000, 0xeb000000, -0x00050096, +0x00050097, 0xe3e01000, 0x000a0000, 0x0006000e, @@ -3539,19 +3594,6 @@ static const unsigned int build_actionlist[5145] = { 0x000a0000, 0x00000000, 0x2a000000, -0x0005003a, -0x00000000, -0xe3730000, -0x000a0000, -0x33710000, -0x000a0000, -0x00000000, -0xe3710000, -0x000a0000, -0x33730000, -0x000a0000, -0x00000000, -0x2a000000, 0x0005003b, 0x00000000, 0xe3730000, @@ -3565,10 +3607,23 @@ static const unsigned int build_actionlist[5145] = { 0x000a0000, 0x00000000, 0x2a000000, -0x0005003d, +0x0005003c, +0x00000000, +0xe3730000, +0x000a0000, +0x33710000, +0x000a0000, +0x00000000, +0xe3710000, +0x000a0000, +0x33730000, +0x000a0000, +0x00000000, +0x2a000000, +0x0005003e, 0x00000000, 0xeb000000, -0x00050095, +0x00050096, 0xea000000, 0x0005000e, 0x00000000, @@ -3595,19 +3650,6 @@ static const unsigned int build_actionlist[5145] = { 0x000a0000, 0x00000000, 0x2a000000, -0x0005003a, -0x00000000, -0xe3730000, -0x000a0000, -0x33710000, -0x000a0000, -0x00000000, -0xe3710000, -0x000a0000, -0x33730000, -0x000a0000, -0x00000000, -0x2a000000, 0x0005003b, 0x00000000, 0xe3730000, @@ -3621,10 +3663,23 @@ static const unsigned int build_actionlist[5145] = { 0x000a0000, 0x00000000, 0x2a000000, -0x0005003d, +0x0005003c, +0x00000000, +0xe3730000, +0x000a0000, +0x33710000, +0x000a0000, +0x00000000, +0xe3710000, +0x000a0000, +0x33730000, +0x000a0000, +0x00000000, +0x2a000000, +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)); -#if LJ_HASJIT - dasm_put(Dst, 631); + dasm_put(Dst, 520, Dt1(->base)); +#if LJ_HASFFI + dasm_put(Dst, 531, Dt1(->base)); #endif - dasm_put(Dst, 633); + 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, 635, BC_JFORI); + dasm_put(Dst, 644); #endif - dasm_put(Dst, 638); + dasm_put(Dst, 646); #if LJ_HASJIT - dasm_put(Dst, 641, BC_JFORI); + dasm_put(Dst, 648, 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, 651); +#if LJ_HASJIT + dasm_put(Dst, 654, BC_JFORI); +#endif + 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); -#if LJ_HASJIT - dasm_put(Dst, 2706); -#endif - dasm_put(Dst, 2708); -#if LJ_HASJIT dasm_put(Dst, 2710); +#if LJ_HASJIT + dasm_put(Dst, 2719); #endif - dasm_put(Dst, 2712); + dasm_put(Dst, 2721); +#if LJ_HASJIT + dasm_put(Dst, 2723); +#endif + 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); } - dasm_put(Dst, 2864, -LJ_TISPRI); + if (LJ_HASFFI) { + dasm_put(Dst, 2877, -LJ_TCDATA, -LJ_TCDATA); + } + 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<nomm), 1-vk, 1<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); - break; - default: - dasm_put(Dst, 3414); - break; - } - switch (vk) { - case 0: - if (vk == 1) { - dasm_put(Dst, 3417, -LJ_TISNUM, -LJ_TISNUM); - } else { - dasm_put(Dst, 3422, -LJ_TISNUM, -LJ_TISNUM); - } - dasm_put(Dst, 3427); - break; - case 1: - if (vk == 1) { - dasm_put(Dst, 3430, -LJ_TISNUM, -LJ_TISNUM); - } else { - dasm_put(Dst, 3435, -LJ_TISNUM, -LJ_TISNUM); - } - dasm_put(Dst, 3440); - break; - default: - if (vk == 1) { - dasm_put(Dst, 3443, -LJ_TISNUM, -LJ_TISNUM); - } else { - dasm_put(Dst, 3448, -LJ_TISNUM, -LJ_TISNUM); - } - dasm_put(Dst, 3453); - break; - } - dasm_put(Dst, 3456); - break; - case BC_MODVN: case BC_MODNV: case BC_MODVV: dasm_put(Dst, 3466); - vk = ((int)op - BC_ADDVN) / (BC_ADDNV-BC_ADDVN); - switch (vk) { - case 0: + break; + default: dasm_put(Dst, 3469); break; - case 1: - dasm_put(Dst, 3472); - break; - default: - dasm_put(Dst, 3475); - break; } - if (vk == 1) { - dasm_put(Dst, 3478, -LJ_TISNUM, -LJ_TISNUM); - } else { - dasm_put(Dst, 3483, -LJ_TISNUM, -LJ_TISNUM); - } - dasm_put(Dst, 3488); switch (vk) { case 0: - dasm_put(Dst, 3492); + if (vk == 1) { + dasm_put(Dst, 3472, -LJ_TISNUM, -LJ_TISNUM); + } else { + dasm_put(Dst, 3477, -LJ_TISNUM, -LJ_TISNUM); + } + dasm_put(Dst, 3482); break; case 1: + if (vk == 1) { + dasm_put(Dst, 3485, -LJ_TISNUM, -LJ_TISNUM); + } else { + dasm_put(Dst, 3490, -LJ_TISNUM, -LJ_TISNUM); + } dasm_put(Dst, 3495); break; default: - dasm_put(Dst, 3498); - break; - } - dasm_put(Dst, 3501, ~LJ_TISNUM); - switch (vk) { - case 0: if (vk == 1) { - dasm_put(Dst, 3515, -LJ_TISNUM, -LJ_TISNUM); + dasm_put(Dst, 3498, -LJ_TISNUM, -LJ_TISNUM); } else { - dasm_put(Dst, 3520, -LJ_TISNUM, -LJ_TISNUM); + dasm_put(Dst, 3503, -LJ_TISNUM, -LJ_TISNUM); } - dasm_put(Dst, 3525); - break; - case 1: - if (vk == 1) { - dasm_put(Dst, 3528, -LJ_TISNUM, -LJ_TISNUM); - } else { - dasm_put(Dst, 3533, -LJ_TISNUM, -LJ_TISNUM); - } - dasm_put(Dst, 3538); - break; - default: - if (vk == 1) { - dasm_put(Dst, 3541, -LJ_TISNUM, -LJ_TISNUM); - } else { - dasm_put(Dst, 3546, -LJ_TISNUM, -LJ_TISNUM); - } - dasm_put(Dst, 3551); + dasm_put(Dst, 3508); break; } - dasm_put(Dst, 3554); + dasm_put(Dst, 3511); break; - case BC_POW: - dasm_put(Dst, 3559); + case BC_MODVN: case BC_MODNV: case BC_MODVV: + dasm_put(Dst, 3521); vk = ((int)op - BC_ADDVN) / (BC_ADDNV-BC_ADDVN); switch (vk) { case 0: - dasm_put(Dst, 3562); + dasm_put(Dst, 3524); break; case 1: - dasm_put(Dst, 3565); + dasm_put(Dst, 3527); break; default: - dasm_put(Dst, 3568); + dasm_put(Dst, 3530); + break; + } + if (vk == 1) { + dasm_put(Dst, 3533, -LJ_TISNUM, -LJ_TISNUM); + } else { + dasm_put(Dst, 3538, -LJ_TISNUM, -LJ_TISNUM); + } + dasm_put(Dst, 3543); + switch (vk) { + case 0: + dasm_put(Dst, 3547); + break; + case 1: + dasm_put(Dst, 3550); + break; + default: + dasm_put(Dst, 3553); + break; + } + dasm_put(Dst, 3556, ~LJ_TISNUM); + switch (vk) { + case 0: + if (vk == 1) { + dasm_put(Dst, 3570, -LJ_TISNUM, -LJ_TISNUM); + } else { + dasm_put(Dst, 3575, -LJ_TISNUM, -LJ_TISNUM); + } + dasm_put(Dst, 3580); + break; + case 1: + if (vk == 1) { + dasm_put(Dst, 3583, -LJ_TISNUM, -LJ_TISNUM); + } else { + dasm_put(Dst, 3588, -LJ_TISNUM, -LJ_TISNUM); + } + dasm_put(Dst, 3593); + break; + default: + if (vk == 1) { + dasm_put(Dst, 3596, -LJ_TISNUM, -LJ_TISNUM); + } else { + dasm_put(Dst, 3601, -LJ_TISNUM, -LJ_TISNUM); + } + dasm_put(Dst, 3606); + break; + } + dasm_put(Dst, 3609); + break; + case BC_POW: + dasm_put(Dst, 3614); + vk = ((int)op - BC_ADDVN) / (BC_ADDNV-BC_ADDVN); + switch (vk) { + case 0: + dasm_put(Dst, 3617); + break; + case 1: + dasm_put(Dst, 3620); + break; + default: + 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<array), Dt6(->asize), -LJ_TNIL, Dt6(->metatable), Dt6(->nomm), 1<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<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<asize), Dt6(->array), -LJ_TNIL, Dt6(->metatable), Dt6(->nomm), 1<asize), Dt6(->array), -LJ_TNIL, Dt6(->metatable), Dt6(->nomm), 1<array), Dt6(->asize), -LJ_TNIL, Dt6(->marked), LJ_GC_BLACK, Dt6(->metatable), Dt6(->nomm), 1<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<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<metatable), Dt1(->base), Dt6(->nomm), 1<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<metatable), Dt1(->base), Dt6(->nomm), 1<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<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<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); - } else if (op == BC_JFORI) { - dasm_put(Dst, 4912); - } else if (op == BC_IFORL) { - dasm_put(Dst, 4914); - } else { - dasm_put(Dst, 4916); - } - if (vk) { - dasm_put(Dst, 4918); - } - dasm_put(Dst, 4920); - if (!vk) { - dasm_put(Dst, 4930); - } else { - dasm_put(Dst, 4932); - } - dasm_put(Dst, 4934); - if (!vk) { - dasm_put(Dst, 4938, -LJ_TISNUM, -LJ_TISNUM); - } else { - dasm_put(Dst, 4950); - } - dasm_put(Dst, 4959); - if (op == BC_FORI) { - dasm_put(Dst, 4963); - } else if (op == BC_JFORI) { dasm_put(Dst, 4965); - } else if (op == BC_IFORL) { + } else if (op == BC_JFORI) { dasm_put(Dst, 4967); - } else { + } else if (op == BC_IFORL) { dasm_put(Dst, 4969); + } else { + dasm_put(Dst, 4971); } - dasm_put(Dst, 4971); if (vk) { - dasm_put(Dst, 4977); + dasm_put(Dst, 4973); } - dasm_put(Dst, 4982); + dasm_put(Dst, 4975); + if (!vk) { + dasm_put(Dst, 4985); + } else { + dasm_put(Dst, 4987); + } + dasm_put(Dst, 4989); + if (!vk) { + dasm_put(Dst, 4993, -LJ_TISNUM, -LJ_TISNUM); + } else { + dasm_put(Dst, 5005); + } + dasm_put(Dst, 5014); + if (op == BC_FORI) { + dasm_put(Dst, 5018); + } else if (op == BC_JFORI) { + dasm_put(Dst, 5020); + } else if (op == BC_IFORL) { + dasm_put(Dst, 5022); + } else { + dasm_put(Dst, 5024); + } + dasm_put(Dst, 5026); + if (vk) { + dasm_put(Dst, 5032); + } + 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); diff --git a/src/lj_arch.h b/src/lj_arch.h index 43774a7d..f9854239 100644 --- a/src/lj_arch.h +++ b/src/lj_arch.h @@ -136,7 +136,6 @@ #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