summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMike Pall <mike>2011-12-12 23:12:25 +0100
committerMike Pall <mike>2011-12-12 23:16:55 +0100
commit03c51fc578fce2f9133e1b5baab27fae0065da6f (patch)
tree828cf7aa8eebdb3ae43456dad4ccbe7f8f9ad26b
parent1b0d64600485c0fcf53b34c1cb263b720a27b5ea (diff)
downloadluajit2-03c51fc578fce2f9133e1b5baab27fae0065da6f.tar.gz
FFI: Add callback support for ARM.
-rw-r--r--src/buildvm_arm.dasc60
-rw-r--r--src/buildvm_arm.h1957
-rw-r--r--src/lj_ccallback.c36
-rw-r--r--src/lj_errmsg.h4
-rw-r--r--src/lj_target_arm.h2
5 files changed, 1120 insertions, 939 deletions
diff --git a/src/buildvm_arm.dasc b/src/buildvm_arm.dasc
index 29c616e0..60857c08 100644
--- a/src/buildvm_arm.dasc
+++ b/src/buildvm_arm.dasc
@@ -502,22 +502,30 @@ static void build_subroutines(BuildCtx *ctx)
| ldr CARG1, [BASE, #-16] // Get continuation.
| mov CARG4, BASE
| mov BASE, RB // Restore caller BASE.
- | cmp CARG1, #0
+#if LJ_HASFFI
+ | cmp CARG1, #1
+#endif
| ldr PC, [CARG4, #-12] // Restore PC from [cont|PC].
- | beq >1
| ldr CARG3, LFUNC:CARG3->field_pc
| mvn INS, #~LJ_TNIL
| add CARG2, RA, RC
| str INS, [CARG2, #-4] // Ensure one valid arg.
+#if LJ_HASFFI
+ | bls >1
+#endif
| ldr KBASE, [CARG3, #PC2PROTO(k)]
| // BASE = base, RA = resultptr, CARG4 = meta base
- | bx CARG1
+ | bx CARG1
|
- |1: // Tail call from C function.
+#if LJ_HASFFI
+ |1:
+ | beq ->cont_ffi_callback // cont = 1: return from FFI callback.
+ | // cont = 0: tailcall from C function.
| ldr CARG3, [BASE, FRAME_FUNC]
| sub CARG4, CARG4, #16
| sub RC, CARG4, BASE
| b ->vm_call_tail
+#endif
|
|->cont_cat: // RA = resultptr, CARG4 = meta base
| ldr INS, [PC, #-4]
@@ -2178,6 +2186,50 @@ static void build_subroutines(BuildCtx *ctx)
|//-- FFI helper functions -----------------------------------------------
|//-----------------------------------------------------------------------
|
+ |// Handler for callback functions.
+ |// Saveregs already performed. Callback slot number in [sp], g in r12.
+ |->vm_ffi_callback:
+#if LJ_HASFFI
+ |.type CTSTATE, CTState, PC
+ | ldr CTSTATE, GL:r12->ctype_state
+ | add DISPATCH, r12, #GG_G2DISP
+ | strd CARG12, CTSTATE->cb.gpr[0]
+ | strd CARG34, CTSTATE->cb.gpr[2]
+ | ldr CARG4, [sp]
+ | add CARG3, sp, #CFRAME_SIZE
+ | mov CARG1, CTSTATE
+ | lsr CARG4, CARG4, #3
+ | str CARG3, CTSTATE->cb.stack
+ | mov CARG2, sp
+ | str CARG4, CTSTATE->cb.slot
+ | str CTSTATE, SAVE_PC // Any value outside of bytecode is ok.
+ | bl extern lj_ccallback_enter // (CTState *cts, void *cf)
+ | // Returns lua_State *.
+ | ldr BASE, L:CRET1->base
+ | mv_vmstate CARG2, INTERP
+ | ldr RC, L:CRET1->top
+ | mov MASKR8, #255
+ | ldr LFUNC:CARG3, [BASE, FRAME_FUNC]
+ | mov L, CRET1
+ | sub RC, RC, BASE
+ | lsl MASKR8, MASKR8, #3 // MASKR8 = 255*8.
+ | st_vmstate CARG2
+ | ins_callt
+#endif
+ |
+ |->cont_ffi_callback: // Return from FFI callback.
+#if LJ_HASFFI
+ | ldr CTSTATE, [DISPATCH, #DISPATCH_GL(ctype_state)]
+ | str BASE, L->base
+ | str CARG4, L->top
+ | str L, CTSTATE->L
+ | mov CARG1, CTSTATE
+ | mov CARG2, RA
+ | bl extern lj_ccallback_leave // (CTState *cts, TValue *o)
+ | ldrd CARG12, CTSTATE->cb.gpr[0]
+ | b ->vm_leave_unw
+#endif
+ |
|->vm_ffi_call: // Call C function via FFI.
| // Caveat: needs special frame unwinding, see below.
#if LJ_HASFFI
diff --git a/src/buildvm_arm.h b/src/buildvm_arm.h
index bdb0038b..9d26dd8e 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[5706] = {
+static const unsigned int build_actionlist[5777] = {
0x00010001,
0x00060014,
0xe3160000,
@@ -324,26 +324,34 @@ static const unsigned int build_actionlist[5706] = {
0xe5190010,
0xe1a03009,
0xe1a0900c,
-0xe3500000,
+0x00000000,
+0xe3500001,
+0x00000000,
0xe513600c,
-0x0a000000,
-0x00050001,
0xe5122000,
0x000d8180,
0xe3e0e000,
0x000a0000,
0xe08a100b,
0xe501e004,
+0x00000000,
+0x9a000000,
+0x00050001,
+0x00000000,
0xe5125000,
0x000d8180,
0xe12fff10,
+0x00000000,
0x0006000b,
+0x0a000000,
+0x00050028,
0xe5192008,
0xe2433010,
0xe043b009,
0xea000000,
-0x00050028,
-0x00060029,
+0x00050029,
+0x00000000,
+0x0006002a,
0xe516e004,
0xe2431010,
0xe1ca20d0,
@@ -356,15 +364,15 @@ static const unsigned int build_actionlist[5706] = {
0x11c120f0,
0x11a02000,
0x1a000000,
-0x0005002a,
+0x0005002b,
0xe18920fa,
0xea000000,
-0x0005002b,
-0x0006002c,
+0x0005002c,
+0x0006002d,
0xe089100c,
0xea000000,
0x00050002,
-0x0006002d,
+0x0006002e,
0xe2471000,
0x000a0000,
0xe3e03000,
@@ -379,7 +387,7 @@ static const unsigned int build_actionlist[5706] = {
0xe1a0200d,
0xea000000,
0x00050001,
-0x0006002e,
+0x0006002f,
0xe004caae,
0xe58db000,
0xe3e03000,
@@ -389,8 +397,7 @@ static const unsigned int build_actionlist[5706] = {
0xe1a0200d,
0xea000000,
0x00050001,
-0x0006002f,
-0x00000000,
+0x00060030,
0xe089100c,
0xe089200b,
0x0006000b,
@@ -426,11 +433,11 @@ static const unsigned int build_actionlist[5706] = {
0xe5192008,
0xea000000,
0x00050026,
-0x00060030,
+0x00060031,
0xe089100c,
0xea000000,
0x00050002,
-0x00060031,
+0x00060032,
0xe2471000,
0x000a0000,
0xe3e03000,
@@ -445,7 +452,7 @@ static const unsigned int build_actionlist[5706] = {
0xe1a0200d,
0xea000000,
0x00050001,
-0x00060032,
+0x00060033,
0xe004caae,
0xe58db000,
0xe3e03000,
@@ -455,7 +462,7 @@ static const unsigned int build_actionlist[5706] = {
0xe1a0200d,
0xea000000,
0x00050001,
-0x00060033,
+0x00060034,
0xe089100c,
0xe089200b,
0x0006000b,
@@ -492,7 +499,7 @@ static const unsigned int build_actionlist[5706] = {
0xe5192008,
0xea000000,
0x00050026,
-0x00060034,
+0x00060035,
0xe1a00008,
0xe2466004,
0xe1a0100a,
@@ -510,40 +517,40 @@ static const unsigned int build_actionlist[5706] = {
0x00000000,
0xe3500001,
0x8a000000,
-0x00050035,
+0x00050036,
0x0006000e,
0xe1d6c0b2,
0xe2866004,
0xe086c10c,
0x224c6b80,
-0x0006002b,
+0x0006002c,
0xe5d6c000,
0xe496e004,
0xe797c10c,
0xe004a2ae,
0xe1a0b82e,
0xe12fff1c,
-0x00060036,
+0x00060037,
0xe516e004,
0xe1ca00d0,
0xe00422ae,
0xe18900f2,
0xea000000,
-0x0005002b,
-0x00060037,
+0x0005002c,
+0x00060038,
0xe59a1004,
0xe3e00000,
0x000a0000,
0xe1500001,
0xea000000,
0x0005000e,
-0x00060038,
+0x00060039,
0xe59a1004,
0xe3710000,
0x000a0000,
0xea000000,
0x0005000e,
-0x00060039,
+0x0006003a,
0xe2466004,
0xe5089000,
0x000d8180,
@@ -553,7 +560,7 @@ static const unsigned int build_actionlist[5706] = {
0x00030004,
0xea000000,
0x0005000d,
-0x0006003a,
+0x0006003b,
0x00000000,
0xe2466004,
0xe5089000,
@@ -566,28 +573,28 @@ static const unsigned int build_actionlist[5706] = {
0xea000000,
0x0005000d,
0x00000000,
-0x0006003b,
+0x0006003c,
0xe004caae,
0xe004b6ae,
0xe089200c,
0xe085300b,
0xea000000,
0x00050001,
-0x0006003c,
+0x0006003d,
0xe004caae,
0xe004b6ae,
0xe089300c,
0xe085200b,
0xea000000,
0x00050001,
-0x0006003d,
+0x0006003e,
0xe516e008,
0xe2466004,
0xe089200b,
0xe089300b,
0xea000000,
0x00050001,
-0x0006003e,
+0x0006003f,
0xe004caae,
0xe004b6ae,
0xe089200c,
@@ -608,8 +615,8 @@ static const unsigned int build_actionlist[5706] = {
0x00000000,
0xe3500000,
0x0a000000,
-0x0005002b,
-0x00060035,
+0x0005002c,
+0x00060036,
0xe0401009,
0xe500600c,
0xe2816000,
@@ -618,7 +625,7 @@ static const unsigned int build_actionlist[5706] = {
0xe3a0b010,
0xea000000,
0x00050024,
-0x0006003f,
+0x00060040,
0xe089100b,
0xe5089000,
0x000d8180,
@@ -632,13 +639,13 @@ static const unsigned int build_actionlist[5706] = {
0x00000000,
0xe3500000,
0x1a000000,
-0x00050035,
+0x00050036,
0xe799000b,
0xea000000,
-0x00050040,
+0x00050041,
0x00000000,
0xea000000,
-0x00050035,
+0x00050036,
0x00000000,
0x00060025,
0xe1a00008,
@@ -666,7 +673,7 @@ static const unsigned int build_actionlist[5706] = {
0xe004a2ae,
0xe08aa009,
0xe12fff1c,
-0x00060041,
+0x00060042,
0xe1a00008,
0xe5089000,
0x000d8180,
@@ -683,8 +690,8 @@ static const unsigned int build_actionlist[5706] = {
0xe5196004,
0xe28bb008,
0xea000000,
-0x00050042,
-0x00060043,
+0x00050043,
+0x00060044,
0xe1a00008,
0xe5089000,
0x000d8180,
@@ -711,22 +718,22 @@ static const unsigned int build_actionlist[5706] = {
0x00000000,
0xea000000,
0x00070000,
-0x00060044,
+0x00060045,
0xe1c900d0,
0xe35b0008,
0x3a000000,
-0x00050045,
+0x00050046,
0xe3710000,
0x000a0000,
0x8a000000,
-0x00050045,
+0x00050046,
0xe5196004,
0xe14900f8,
0xe1a0c009,
0xe25ba008,
0xe28bb008,
0x0a000000,
-0x00050046,
+0x00050047,
0x0006000b,
0xe1cc00d8,
0xe25aa008,
@@ -734,12 +741,12 @@ static const unsigned int build_actionlist[5706] = {
0x1a000000,
0x0005000b,
0xea000000,
-0x00050046,
-0x00060047,
+0x00050047,
+0x00060048,
0xe5991004,
0xe35b0008,
0x3a000000,
-0x00050045,
+0x00050046,
0xe3710000,
0x000a0000,
0x33e01000,
@@ -749,12 +756,12 @@ static const unsigned int build_actionlist[5706] = {
0xe1a03183,
0xe18200d3,
0xea000000,
-0x00050048,
-0x00060049,
+0x00050049,
+0x0006004a,
0xe1c900d0,
0xe35b0008,
0x3a000000,
-0x00050045,
+0x00050046,
0xe3710000,
0x000a0000,
0x13710000,
@@ -772,7 +779,7 @@ static const unsigned int build_actionlist[5706] = {
0x000d8180,
0xe35c0000,
0x0a000000,
-0x00050048,
+0x00050049,
0xe51c2000,
0x000d8180,
0xe51b3000,
@@ -802,12 +809,12 @@ static const unsigned int build_actionlist[5706] = {
0xe3e01000,
0x000a0000,
0xea000000,
-0x00050048,
+0x00050049,
0x0006000f,
0xe3710000,
0x000a0000,
0x1a000000,
-0x00050048,
+0x00050049,
0xea000000,
0x0005000e,
0x00060010,
@@ -822,12 +829,12 @@ static const unsigned int build_actionlist[5706] = {
0x000d8180,
0xea000000,
0x0005000c,
-0x0006004a,
+0x0006004b,
0xe1c900d0,
0xe1c920d8,
0xe35b0010,
0x3a000000,
-0x00050045,
+0x00050046,
0xe3710000,
0x000a0000,
0x0510c000,
@@ -838,13 +845,13 @@ static const unsigned int build_actionlist[5706] = {
0x000d8180,
0x035c0000,
0x1a000000,
-0x00050045,
+0x00050046,
0xe3130000,
0x000a0000,
0xe5002000,
0x000d8180,
0x0a000000,
-0x00050048,
+0x00050049,
0xe5172000,
0x000d8180,
0xe3c33000,
@@ -856,18 +863,18 @@ static const unsigned int build_actionlist[5706] = {
0xe5002000,
0x000d8180,
0xea000000,
-0x00050048,
-0x0006004b,
+0x00050049,
+0x0006004c,
0xe1c920d0,
0xe35b0010,
0x3a000000,
-0x00050045,
+0x00050046,
0xe1a01002,
0xe3730000,
0x000a0000,
0x00000000,
0x1a000000,
-0x00050045,
+0x00050046,
0xe1a00008,
0xe2892008,
0x00000000,
@@ -880,27 +887,27 @@ static const unsigned int build_actionlist[5706] = {
0x00000000,
0xe1c000d0,
0xea000000,
-0x00050048,
-0x0006004c,
+0x00050049,
+0x0006004d,
0xe1c900d0,
0xe35b0008,
0x3a000000,
-0x00050045,
+0x00050046,
0xe3710000,
0x000a0000,
0x9a000000,
-0x00050048,
+0x00050049,
0xea000000,
-0x00050045,
-0x0006004d,
+0x00050046,
+0x0006004e,
0xe1c900d0,
0xe35b0008,
0x3a000000,
-0x00050045,
+0x00050046,
0xe3710000,
0x000a0000,
0x0a000000,
-0x00050048,
+0x00050049,
0xe5173000,
0x000d8180,
0xe5089000,
@@ -910,14 +917,14 @@ static const unsigned int build_actionlist[5706] = {
0x93530000,
0xe58d6008,
0x8a000000,
-0x00050045,
+0x00050046,
0xe5170000,
0x000d8180,
0xe5171000,
0x000d8180,
0xe1500001,
0xab000000,
-0x0005004e,
+0x0005004f,
0xe1a00008,
0xe1a01009,
0xeb000000,
@@ -927,19 +934,19 @@ static const unsigned int build_actionlist[5706] = {
0xe3e01000,
0x000a0000,
0xea000000,
-0x00050048,
-0x0006004f,
+0x00050049,
+0x00060050,
0x00000000,
0xe1c900d0,
0xe35b0008,
0x3a000000,
-0x00050045,
+0x00050046,
0xe3e03000,
0x000a0000,
0xe3710000,
0x000a0000,
0x1a000000,
-0x00050045,
+0x00050046,
0xe18920fb,
0xe5196004,
0xe1a01000,
@@ -960,7 +967,7 @@ static const unsigned int build_actionlist[5706] = {
0x03e01000,
0x000a0000,
0x0a000000,
-0x00050048,
+0x00050049,
0xe1c900d8,
0xe1c921d0,
0xe3a0b000,
@@ -968,16 +975,16 @@ static const unsigned int build_actionlist[5706] = {
0xe14900f8,
0xe1c920f0,
0xea000000,
-0x00050046,
-0x00060050,
+0x00050047,
+0x00060051,
0xe1c900d0,
0xe35b0008,
0x3a000000,
-0x00050045,
+0x00050046,
0xe3710000,
0x000a0000,
0x1a000000,
-0x00050045,
+0x00050046,
0x00000000,
0xe510c000,
0x000d8180,
@@ -988,7 +995,7 @@ static const unsigned int build_actionlist[5706] = {
0x00000000,
0xe35c0000,
0x1a000000,
-0x00050045,
+0x00050046,
0x00000000,
0xe3e01000,
0x000a0000,
@@ -997,19 +1004,19 @@ static const unsigned int build_actionlist[5706] = {
0xe14920f8,
0xe589100c,
0xea000000,
-0x00050046,
-0x00060051,
+0x00050047,
+0x00060052,
0xe1c900d0,
0xe1c920d8,
0xe35b0010,
0x3a000000,
-0x00050045,
+0x00050046,
0xe3710000,
0x000a0000,
0x03730000,
0x000a0000,
0x1a000000,
-0x00050045,
+0x00050046,
0xe510c000,
0x000d8180,
0xe510b000,
@@ -1031,14 +1038,14 @@ static const unsigned int build_actionlist[5706] = {
0x000a0000,
0x11c900f0,
0xea000000,
-0x00050046,
+0x00050047,
0x0006000c,
0xe510c000,
0x000d8180,
0xe1a01002,
0xe35c0000,
0x0a000000,
-0x00050046,
+0x00050047,
0x00000000,
0xe1a0a009,
0x00000000,
@@ -1049,19 +1056,19 @@ static const unsigned int build_actionlist[5706] = {
0x00000000,
0xe3500000,
0x0a000000,
-0x00050046,
+0x00050047,
0xe1c000d0,
0xea000000,
0x0005000b,
-0x00060052,
+0x00060053,
0xe1c900d0,
0xe35b0008,
0x3a000000,
-0x00050045,
+0x00050046,
0xe3710000,
0x000a0000,
0x1a000000,
-0x00050045,
+0x00050046,
0x00000000,
0xe510c000,
0x000d8180,
@@ -1072,7 +1079,7 @@ static const unsigned int build_actionlist[5706] = {
0x00000000,
0xe35c0000,
0x1a000000,
-0x00050045,
+0x00050046,
0x00000000,
0xe3a00000,
0xe3e01000,
@@ -1082,13 +1089,13 @@ static const unsigned int build_actionlist[5706] = {
0xe14920f8,
0xe1c900f8,
0xea000000,
-0x00050046,
-0x00060053,
+0x00050047,
+0x00060054,
0xe557a000,
0x000d8180,
0xe35b0008,
0x3a000000,
-0x00050045,
+0x00050046,
0xe31a0000,
0x000a0000,
0xe1a0c009,
@@ -1100,18 +1107,18 @@ static const unsigned int build_actionlist[5706] = {
0xe24bb008,
0xea000000,
0x00050024,
-0x00060054,
+0x00060055,
0xe1c900d0,
0xe1c920d8,
0xe35b0010,
0x3a000000,
-0x00050045,
+0x00050046,
0xe557a000,
0x000d8180,
0xe3730000,
0x000a0000,
0x1a000000,
-0x00050045,
+0x00050046,
0xe1a0c009,
0xe1c900f8,
0xe1c920f0,
@@ -1125,16 +1132,16 @@ static const unsigned int build_actionlist[5706] = {
0xe24bb010,
0xea000000,
0x00050024,
-0x00060055,
+0x00060056,
0xe1c900d0,
0xe35b0008,
0x3a000000,
-0x00050045,
+0x00050046,
0xe3710000,
0x000a0000,
0x00000000,
0x1a000000,
-0x00050045,
+0x00050046,
0xe5196004,
0xe5089000,
0x000d8180,
@@ -1149,7 +1156,7 @@ static const unsigned int build_actionlist[5706] = {
0xe58d6008,
0xe153000c,
0x0a000000,
-0x00050045,
+0x00050046,
0xe5103000,
0x000d8180,
0xe510c000,
@@ -1159,7 +1166,7 @@ static const unsigned int build_actionlist[5706] = {
0x91520003,
0x935c0000,
0x8a000000,
-0x00050045,
+0x00050046,
0x0006000b,
0xe2422008,
0xe2899008,
@@ -1250,7 +1257,7 @@ static const unsigned int build_actionlist[5706] = {
0xe3a00000,
0xea000000,
0x0005000e,
-0x00060056,
+0x00060057,
0x00000000,
0xe5120000,
0x000d8180,
@@ -1268,7 +1275,7 @@ static const unsigned int build_actionlist[5706] = {
0xe58d6008,
0xe153000c,
0x0a000000,
-0x00050045,
+0x00050046,
0xe5103000,
0x000d8180,
0xe510c000,
@@ -1278,7 +1285,7 @@ static const unsigned int build_actionlist[5706] = {
0x91520003,
0x935c0000,
0x8a000000,
-0x00050045,
+0x00050046,
0x0006000b,
0xe5002000,
0x000d8180,
@@ -1356,7 +1363,7 @@ static const unsigned int build_actionlist[5706] = {
0xe3a00000,
0xea000000,
0x0005000e,
-0x00060057,
+0x00060058,
0xe5180000,
0x000d8180,
0xe089100b,
@@ -1371,24 +1378,24 @@ static const unsigned int build_actionlist[5706] = {
0x000a0000,
0xe3a02000,
0x0a000000,
-0x00050045,
+0x00050046,
0xe5082000,
0x000d8180,
0xe5480000,
0x000d8180,
0xea000000,
0x0005001a,
-0x00060058,
+0x00060059,
0xe1c900d0,
0xe35b0008,
0x3a000000,
-0x00050045,
+0x00050046,
0xe3710000,
0x000a0000,
0x0a000000,
-0x00050048,
+0x00050049,
0x8a000000,
-0x00050045,
+0x00050046,
0xe1a02081,
0xe292c980,
0x5a000000,
@@ -1412,7 +1419,7 @@ static const unsigned int build_actionlist[5706] = {
0xe3e01000,
0x000a0000,
0xea000000,
-0x00050048,
+0x00050049,
0x0006000c,
0xe1822000,
0xe1120fc1,
@@ -1421,7 +1428,7 @@ static const unsigned int build_actionlist[5706] = {
0xe3e01000,
0x000a0000,
0xea000000,
-0x00050048,
+0x00050049,
0x0006000d,
0x03530480,
0x03520000,
@@ -1434,20 +1441,20 @@ static const unsigned int build_actionlist[5706] = {
0x0006000e,
0x00000000,
0xeb000000,
-0x00050059,
+0x0005005a,
0xea000000,
-0x00050048,
-0x0006005a,
+0x00050049,
+0x0006005b,
0xe1c900d0,
0xe35b0008,
0x3a000000,
-0x00050045,
+0x00050046,
0xe3710000,
0x000a0000,
0x0a000000,
-0x00050048,
+0x00050049,
0x8a000000,
-0x00050045,
+0x00050046,
0xe1a02081,
0xe292c980,
0x5a000000,
@@ -1468,14 +1475,14 @@ static const unsigned int build_actionlist[5706] = {
0x614f00d0,
0x00051809,
0x6a000000,
-0x00050048,
+0x00050049,
0xe3510000,
0xb2600000,
0x0006000b,
0xe3e01000,
0x000a0000,
0xea000000,
-0x00050048,
+0x00050049,
0x0006000c,
0xe1822000,
0xe1d22fc1,
@@ -1484,7 +1491,7 @@ static const unsigned int build_actionlist[5706] = {
0xe3e01000,
0x000a0000,
0xea000000,
-0x00050048,
+0x00050049,
0x0006000d,
0x03530480,
0x1a000000,
@@ -1495,38 +1502,38 @@ static const unsigned int build_actionlist[5706] = {
0x0005000b,
0x0006000e,
0xeb000000,
-0x0005005b,
+0x0005005c,
0x00000000,
0xea000000,
-0x00050048,
+0x00050049,
0x00040007,
0x00060013,
0x00020000,
0x00000000,
0x41e00000,
-0x0006005c,
+0x0006005d,
0xe1c900d0,
0xe35b0008,
0x3a000000,
-0x00050045,
+0x00050046,
0xe3710000,
0x000a0000,
0x8a000000,
-0x00050045,
+0x00050046,
0x13c11480,
0x1a000000,
-0x00050048,
+0x00050049,
0xe3500000,
0xb2700000,
0x614f00d0,
0x00051813,
-0x00060048,
+0x00060049,
0xe5196004,
0xe14900f8,
-0x0006005d,
+0x0006005e,
0xe3a0b000,
0x000a0000,
-0x00060046,
+0x00060047,
0xe2160000,
0x000a0000,
0x0516e004,
@@ -1555,16 +1562,16 @@ static const unsigned int build_actionlist[5706] = {
0xe5010004,
0xea000000,
0x0005000f,
-0x0006005e,
+0x0006005f,
0xe1c900d0,
0xe35b0008,
0x3a000000,
-0x00050045,
+0x00050046,
0x00000000,
0xe3710000,
0x000a0000,
0x2a000000,
-0x00050045,
+0x00050046,
0x00000000,
0xe1a0a009,
0x00000000,
@@ -1574,16 +1581,16 @@ static const unsigned int build_actionlist[5706] = {
0xe1a0900a,
0x00000000,
0xea000000,
-0x00050048,
-0x0006005f,
+0x00050049,
+0x00060060,
0xe1c900d0,
0xe35b0008,
0x3a000000,
-0x00050045,
+0x00050046,
0xe3710000,
0x000a0000,
0x2a000000,
-0x00050045,
+0x00050046,
0x00000000,
0xe1a0a009,
0x00000000,
@@ -1593,16 +1600,16 @@ static const unsigned int build_actionlist[5706] = {
0xe1a0900a,
0x00000000,
0xea000000,
-0x00050048,
-0x00060060,
+0x00050049,
+0x00060061,
0xe1c900d0,
0xe35b0008,
0x3a000000,
-0x00050045,
+0x00050046,
0xe3710000,
0x000a0000,
0x2a000000,
-0x00050045,
+0x00050046,
0x00000000,
0xe1a0a009,
0x00000000,
@@ -1612,16 +1619,16 @@ static const unsigned int build_actionlist[5706] = {
0xe1a0900a,
0x00000000,
0xea000000,
-0x00050048,
-0x00060061,
+0x00050049,
+0x00060062,
0xe1c900d0,
0xe35b0008,
0x3a000000,
-0x00050045,
+0x00050046,
0xe3710000,
0x000a0000,
0x2a000000,
-0x00050045,
+0x00050046,
0x00000000,
0xe1a0a009,
0x00000000,
@@ -1631,16 +1638,16 @@ static const unsigned int build_actionlist[5706] = {
0xe1a0900a,
0x00000000,
0xea000000,
-0x00050048,
-0x00060062,
+0x00050049,
+0x00060063,
0xe1c900d0,
0xe35b0008,
0x3a000000,
-0x00050045,
+0x00050046,
0xe3710000,
0x000a0000,
0x2a000000,
-0x00050045,
+0x00050046,
0x00000000,
0xe1a0a009,
0x00000000,
@@ -1650,16 +1657,16 @@ static const unsigned int build_actionlist[5706] = {
0xe1a0900a,
0x00000000,
0xea000000,
-0x00050048,
-0x00060063,
+0x00050049,
+0x00060064,
0xe1c900d0,
0xe35b0008,
0x3a000000,
-0x00050045,
+0x00050046,
0xe3710000,
0x000a0000,
0x2a000000,
-0x00050045,
+0x00050046,
0x00000000,
0xe1a0a009,
0x00000000,
@@ -1669,16 +1676,16 @@ static const unsigned int build_actionlist[5706] = {
0xe1a0900a,
0x00000000,
0xea000000,
-0x00050048,
-0x00060064,
+0x00050049,
+0x00060065,
0xe1c900d0,
0xe35b0008,
0x3a000000,
-0x00050045,
+0x00050046,
0xe3710000,
0x000a0000,
0x2a000000,
-0x00050045,
+0x00050046,
0x00000000,
0xe1a0a009,
0x00000000,
@@ -1688,16 +1695,16 @@ static const unsigned int build_actionlist[5706] = {
0xe1a0900a,
0x00000000,
0xea000000,
-0x00050048,
-0x00060065,
+0x00050049,
+0x00060066,
0xe1c900d0,
0xe35b0008,
0x3a000000,
-0x00050045,
+0x00050046,
0xe3710000,
0x000a0000,
0x2a000000,
-0x00050045,
+0x00050046,
0x00000000,
0xe1a0a009,
0x00000000,
@@ -1707,16 +1714,16 @@ static const unsigned int build_actionlist[5706] = {
0xe1a0900a,
0x00000000,
0xea000000,
-0x00050048,
-0x00060066,
+0x00050049,
+0x00060067,
0xe1c900d0,
0xe35b0008,
0x3a000000,
-0x00050045,
+0x00050046,
0xe3710000,
0x000a0000,
0x2a000000,
-0x00050045,
+0x00050046,
0x00000000,
0xe1a0a009,
0x00000000,
@@ -1726,16 +1733,16 @@ static const unsigned int build_actionlist[5706] = {
0xe1a0900a,
0x00000000,
0xea000000,
-0x00050048,
-0x00060067,
+0x00050049,
+0x00060068,
0xe1c900d0,
0xe35b0008,
0x3a000000,
-0x00050045,
+0x00050046,
0xe3710000,
0x000a0000,
0x2a000000,
-0x00050045,
+0x00050046,
0x00000000,
0xe1a0a009,
0x00000000,
@@ -1745,16 +1752,16 @@ static const unsigned int build_actionlist[5706] = {
0xe1a0900a,
0x00000000,
0xea000000,
-0x00050048,
-0x00060068,
+0x00050049,
+0x00060069,
0xe1c900d0,
0xe35b0008,
0x3a000000,
-0x00050045,
+0x00050046,
0xe3710000,
0x000a0000,
0x2a000000,
-0x00050045,
+0x00050046,
0x00000000,
0xe1a0a009,
0x00000000,
@@ -1764,16 +1771,16 @@ static const unsigned int build_actionlist[5706] = {
0xe1a0900a,
0x00000000,
0xea000000,
-0x00050048,
-0x00060069,
+0x00050049,
+0x0006006a,
0xe1c900d0,
0xe35b0008,
0x3a000000,
-0x00050045,
+0x00050046,
0xe3710000,
0x000a0000,
0x2a000000,
-0x00050045,
+0x00050046,
0x00000000,
0xe1a0a009,
0x00000000,
@@ -1783,16 +1790,16 @@ static const unsigned int build_actionlist[5706] = {
0xe1a0900a,
0x00000000,
0xea000000,
-0x00050048,
-0x0006006a,
+0x00050049,
+0x0006006b,
0xe1c900d0,
0xe35b0008,
0x3a000000,
-0x00050045,
+0x00050046,
0xe3710000,
0x000a0000,
0x2a000000,
-0x00050045,
+0x00050046,
0x00000000,
0xe1a0a009,
0x00000000,
@@ -1802,19 +1809,19 @@ static const unsigned int build_actionlist[5706] = {
0xe1a0900a,
0x00000000,
0xea000000,
-0x00050048,
-0x0006006b,
+0x00050049,
+0x0006006c,
0xe1c900d0,
0xe1c920d8,
0xe35b0010,
0x3a000000,
-0x00050045,
+0x00050046,
0xe3710000,
0x000a0000,
0x33730000,
0x000a0000,
0x2a000000,
-0x00050045,
+0x00050046,
0x00000000,
0xe1a0a009,
0x00000000,
@@ -1824,19 +1831,19 @@ static const unsigned int build_actionlist[5706] = {
0xe1a0900a,
0x00000000,
0xea000000,
-0x00050048,
-0x0006006c,
+0x00050049,
+0x0006006d,
0xe1c900d0,
0xe1c920d8,
0xe35b0010,
0x3a000000,
-0x00050045,
+0x00050046,
0xe3710000,
0x000a0000,
0x33730000,
0x000a0000,
0x2a000000,
-0x00050045,
+0x00050046,
0x00000000,
0xe1a0a009,
0x00000000,
@@ -1846,19 +1853,19 @@ static const unsigned int build_actionlist[5706] = {
0xe1a0900a,
0x00000000,
0xea000000,
-0x00050048,
-0x0006006d,
+0x00050049,
+0x0006006e,
0xe1c900d0,
0xe1c920d8,
0xe35b0010,
0x3a000000,
-0x00050045,
+0x00050046,
0xe3710000,
0x000a0000,
0x33730000,
0x000a0000,
0x2a000000,
-0x00050045,
+0x00050046,
0x00000000,
0xe1a0a009,
0x00000000,
@@ -1868,37 +1875,37 @@ static const unsigned int build_actionlist[5706] = {
0xe1a0900a,
0x00000000,
0xea000000,
-0x00050048,
-0x0006006e,
+0x00050049,
0x0006006f,
+0x00060070,
0xe1c900d0,
0xe35b0008,
0x3a000000,
-0x00050045,
+0x00050046,
0xe3710000,
0x000a0000,
0x2a000000,
-0x00050045,
+0x00050046,
0xe14220d0,
0x000c8100,
0xeb000000,
0x0003001f,
0xea000000,
-0x00050048,
-0x00060070,
+0x00050049,
+0x00060071,
0xe1c900d0,
0xe1c920d8,
0xe35b0010,
0x3a000000,
-0x00050045,
+0x00050046,
0xe3710000,
0x000a0000,
0x2a000000,
-0x00050045,
+0x00050046,
0xe3730000,
0x000a0000,
0x1a000000,
-0x00050045,
+0x00050046,
0x00000000,
0xe1a0a009,
0x00000000,
@@ -1908,16 +1915,16 @@ static const unsigned int build_actionlist[5706] = {
0xe1a0900a,
0x00000000,
0xea000000,
-0x00050048,
-0x00060071,
+0x00050049,
+0x00060072,
0xe1c900d0,
0xe35b0008,
0x3a000000,
-0x00050045,
+0x00050046,
0xe3710000,
0x000a0000,
0x2a000000,
-0x00050045,
+0x00050046,
0xe1a0200d,
0x00000000,
0xe1a0a009,
@@ -1936,16 +1943,16 @@ static const unsigned int build_actionlist[5706] = {
0x000a0000,
0xe1c920f0,
0xea000000,
-0x00050046,
-0x00060072,
+0x00050047,
+0x00060073,
0xe1c900d0,
0xe35b0008,
0x3a000000,
-0x00050045,
+0x00050046,
0xe3710000,
0x000a0000,
0x2a000000,
-0x00050045,
+0x00050046,
0xe2492008,
0xe5196004,
0x00000000,
@@ -1960,12 +1967,12 @@ static const unsigned int build_actionlist[5706] = {
0x000a0000,
0xe1c900f0,
0xea000000,
-0x00050046,
-0x00060073,
+0x00050047,
+0x00060074,
0xe1c900d0,
0xe35b0008,
0x3a000000,
-0x00050045,
+0x00050046,
0xe3710000,
0x000a0000,
0xe3a0a008,
@@ -1975,7 +1982,7 @@ static const unsigned int build_actionlist[5706] = {
0xe18920da,
0xe15a000b,
0x2a000000,
-0x00050048,
+0x00050049,
0xe3730000,
0x000a0000,
0x1a000000,
@@ -1987,7 +1994,7 @@ static const unsigned int build_actionlist[5706] = {
0x0005000b,
0x0006000d,
0x8a000000,
-0x00050045,
+0x00050046,
0xeb000000,
0x00030023,
0xe18920da,
@@ -1995,12 +2002,12 @@ static const unsigned int build_actionlist[5706] = {
0x00050006,
0x0006000e,
0x8a000000,
-0x00050045,
+0x00050046,
0x0006000f,
0xe18920da,
0xe15a000b,
0x2a000000,
-0x00050048,
+0x00050049,
0xe3730000,
0x000a0000,
0x2a000000,
@@ -2016,7 +2023,7 @@ static const unsigned int build_actionlist[5706] = {
0x0005000f,
0x00060011,
0x8a000000,
-0x00050045,
+0x00050046,
0xe1cd00f0,
0xe1a00002,
0xeb000000,
@@ -2024,11 +2031,11 @@ static const unsigned int build_actionlist[5706] = {
0xe1cd20d0,
0xea000000,
0x00050010,
-0x00060074,
+0x00060075,
0xe1c900d0,
0xe35b0008,
0x3a000000,
-0x00050045,
+0x00050046,
0xe3710000,
0x000a0000,
0xe3a0a008,
@@ -2038,7 +2045,7 @@ static const unsigned int build_actionlist[5706] = {
0xe18920da,
0xe15a000b,
0x2a000000,
-0x00050048,
+0x00050049,
0xe3730000,
0x000a0000,
0x1a000000,
@@ -2050,7 +2057,7 @@ static const unsigned int build_actionlist[5706] = {
0x0005000b,
0x0006000d,
0x8a000000,
-0x00050045,
+0x00050046,
0xeb000000,
0x00030023,
0xe18920da,
@@ -2058,13 +2065,13 @@ static const unsigned int build_actionlist[5706] = {
0x00050006,
0x0006000e,
0x8a000000,
-0x00050045,
+0x00050046,
0x0006000f,
0x00000000,
0xe18920da,
0xe15a000b,
0x2a000000,
-0x00050048,
+0x00050049,
0xe3730000,
0x000a0000,
0x2a000000,
@@ -2079,7 +2086,7 @@ static const unsigned int build_actionlist[5706] = {
0x0005000f,
0x00060011,
0x8a000000,
-0x00050045,
+0x00050046,
0xe1cd00f0,
0xe1a00002,
0xeb000000,
@@ -2087,29 +2094,29 @@ static const unsigned int build_actionlist[5706] = {
0xe1cd20d0,
0xea000000,
0x00050010,
-0x00060075,
+0x00060076,
0xe1c900d0,
0xe35b0008,
0x3a000000,
-0x00050045,
+0x00050046,
0xe3710000,
0x000a0000,
0x1a000000,
-0x00050045,
+0x00050046,
0xe5100000,
0x000d8180,
0xe3e01000,
0x000a0000,
0xea000000,
-0x00050048,
-0x00060076,
+0x00050049,
+0x00060077,
0xe1c900d0,
0xe5196004,
0xe35b0008,
0x03710000,
0x000a0000,
0x1a000000,
-0x00050045,
+0x00050046,
0xe5102000,
0x000d8180,
0xe5500000,
@@ -2124,15 +2131,15 @@ static const unsigned int build_actionlist[5706] = {
0x000a0000,
0xe14900f8,
0xea000000,
-0x00050046,
-0x00060077,
+0x00050047,
+0x00060078,
0xe5170000,
0x000d8180,
0xe5171000,
0x000d8180,
0xe1500001,
0xab000000,
-0x0005004e,
+0x0005004f,
0xe1c900d0,
0xe5196004,
0xe35b0008,
@@ -2141,10 +2148,10 @@ static const unsigned int build_actionlist[5706] = {
0x03d030ff,
0xe3a02001,
0x1a000000,
-0x00050045,
+0x00050046,
0xe58d0000,
0xe1a0100d,
-0x00060078,
+0x00060079,
0xe5089000,
0x000d8180,
0xe1a00008,
@@ -2156,15 +2163,15 @@ static const unsigned int build_actionlist[5706] = {
0xe3e01000,
0x000a0000,
0xea000000,
-0x00050048,
-0x00060079,
+0x00050049,
+0x0006007a,
0xe5170000,
0x000d8180,
0xe5171000,
0x000d8180,
0xe1500001,
0xab000000,
-0x0005004e,
+0x0005004f,
0xe1c900d0,
0xe1c921d0,
0xe35b0010,
@@ -2172,13 +2179,13 @@ static const unsigned int build_actionlist[5706] = {
0x0a000000,
0x00050001,
0x3a000000,
-0x00050045,
+0x00050046,
0x00000000,
0xe3730000,
0x000a0000,
0xe1a0c002,
0x1a000000,
-0x00050045,
+0x00050046,
0x0006000b,
0xe1c920d8,
0xe3710000,
@@ -2188,7 +2195,7 @@ static const unsigned int build_actionlist[5706] = {
0x03730000,
0x000a0000,
0x1a000000,
-0x00050045,
+0x00050046,
0xe2813001,
0xe3520000,
0xb0822003,
@@ -2205,44 +2212,44 @@ static const unsigned int build_actionlist[5706] = {
0xe05c2002,
0xe2822001,
0xaa000000,
-0x00050078,
-0x0006007a,
+0x00050079,
+0x0006007b,
0xe2470000,
0x000a0000,
0xe3e01000,
0x000a0000,
0xea000000,
-0x00050048,
-0x0006007b,
+0x00050049,
+0x0006007c,
0xe5170000,
0x000d8180,
0xe5171000,
0x000d8180,
0xe1500001,
0xab000000,
-0x0005004e,
+0x0005004f,
0xe1c900d0,
0xe1c920d8,
0xe35b0010,
0x3a000000,
-0x00050045,
+0x00050046,
0xe3710000,
0x000a0000,
0x03730000,
0x000a0000,
0x1a000000,
-0x00050045,
+0x00050046,
0xe2523001,
0xe5101000,
0x000d8180,
0x00000000,
0xba000000,
-0x0005007a,
+0x0005007b,
0xe3510001,
0x3a000000,
-0x0005007a,
+0x0005007b,
0x1a000000,
-0x00050045,
+0x00050046,
0xe517c000,
0x000d8180,
0xe5171000,
@@ -2251,30 +2258,30 @@ static const unsigned int build_actionlist[5706] = {
0x000d8180,
0xe15c0002,
0x3a000000,
-0x00050045,
+0x00050046,
0x0006000b,
0xe7c10003,
0xe2533001,
0xaa000000,
0x0005000b,
0xea000000,
-0x00050078,
-0x0006007c,
+0x00050079,
+0x0006007d,
0xe5170000,
0x000d8180,
0xe5171000,
0x000d8180,
0xe1500001,
0xab000000,
-0x0005004e,
+0x0005004f,
0xe1c900d0,
0xe35b0008,
0x3a000000,
-0x00050045,
+0x00050046,
0xe3710000,
0x000a0000,
0x1a000000,
-0x00050045,
+0x00050046,
0xe5102000,
0x000d8180,
0xe517c000,
@@ -2286,32 +2293,32 @@ static const unsigned int build_actionlist[5706] = {
0x000a0000,
0xe15c0002,
0x3a000000,
-0x00050045,
+0x00050046,
0x0006000b,
0x00000000,
0xe4d0c001,
0xe2533001,
0xba000000,
-0x00050078,
+0x00050079,
0xe7c1c003,
0xea000000,
0x0005000b,
-0x0006007d,
+0x0006007e,
0xe5170000,
0x000d8180,
0xe5171000,
0x000d8180,
0xe1500001,
0xab000000,
-0x0005004e,
+0x0005004f,
0xe1c900d0,
0xe35b0008,
0x3a000000,
-0x00050045,
+0x00050046,
0xe3710000,
0x000a0000,
0x1a000000,
-0x00050045,
+0x00050046,
0xe5102000,
0x000d8180,
0xe517c000,
@@ -2323,12 +2330,12 @@ static const unsigned int build_actionlist[5706] = {
0x000a0000,
0xe15c0002,
0x3a000000,
-0x00050045,
+0x00050046,
0x0006000b,
0xe7d0c003,
0xe1530002,
0x2a000000,
-0x00050078,
+0x00050079,
0xe24cb041,
0xe35b001a,
0x322cc020,
@@ -2336,23 +2343,23 @@ static const unsigned int build_actionlist[5706] = {
0xe2833001,
0xea000000,
0x0005000b,
-0x0006007e,
+0x0006007f,
0xe5170000,
0x000d8180,
0xe5171000,
0x000d8180,
0xe1500001,
0xab000000,
-0x0005004e,
+0x0005004f,
0xe1c900d0,
0xe35b0008,
0x3a000000,
-0x00050045,
+0x00050046,
0x00000000,
0xe3710000,
0x000a0000,
0x1a000000,
-0x00050045,
+0x00050046,
0xe5102000,
0x000d8180,
0xe517c000,
@@ -2364,12 +2371,12 @@ static const unsigned int build_actionlist[5706] = {
0x000a0000,
0xe15c0002,
0x3a000000,
-0x00050045,
+0x00050046,
0x0006000b,
0xe7d0c003,
0xe1530002,
0x2a000000,
-0x00050078,
+0x00050079,
0xe24cb061,
0xe35b001a,
0x322cc020,
@@ -2377,15 +2384,15 @@ static const unsigned int build_actionlist[5706] = {
0xe2833001,
0xea000000,
0x0005000b,
-0x0006007f,
+0x00060080,
0xe1c900d0,
0xe35b0008,
0x3a000000,
-0x00050045,
+0x00050046,
0xe3710000,
0x000a0000,
0x1a000000,
-0x00050045,
+0x00050046,
0x00000000,
0xe1a0a009,
0x00000000,
@@ -2397,11 +2404,11 @@ static const unsigned int build_actionlist[5706] = {
0xe3e01000,
0x000a0000,
0xea000000,
-0x00050048,
-0x00060080,
-0x8a000000,
-0x00050045,
+0x00050049,
0x00060081,
+0x8a000000,
+0x00050046,
+0x00060082,
0xe1a0c081,
0xe29cc980,
0x53a00000,
@@ -2426,28 +2433,28 @@ static const unsigned int build_actionlist[5706] = {
0xe1830c10,
0xb2600000,
0xe12fff1e,
-0x00060082,
+0x00060083,
0xe1c900d0,
0xe35b0008,
0x3a000000,
-0x00050045,
+0x00050046,
0xe3710000,
0x000a0000,
0x1b000000,
-0x00050080,
+0x00050081,
0xe3e01000,
0x000a0000,
0xea000000,
-0x00050048,
-0x00060083,
+0x00050049,
+0x00060084,
0xe1c900d0,
0xe35b0008,
0x3a000000,
-0x00050045,
+0x00050046,
0xe3710000,
0x000a0000,
0x1b000000,
-0x00050080,
+0x00050081,
0xe1a02000,
0xe3a0a008,
0x0006000b,
@@ -2459,20 +2466,20 @@ static const unsigned int build_actionlist[5706] = {
0xe3710000,
0x000a0000,
0x1b000000,
-0x00050080,
+0x00050081,
0xe0022000,
0xea000000,
0x0005000b,
-0x00060084,
+0x00060085,
0x00000000,
0xe1c900d0,
0xe35b0008,
0x3a000000,
-0x00050045,
+0x00050046,
0xe3710000,
0x000a0000,
0x1b000000,
-0x00050080,
+0x00050081,
0xe1a02000,
0xe3a0a008,
0x0006000b,
@@ -2484,19 +2491,19 @@ static const unsigned int build_actionlist[5706] = {
0xe3710000,
0x000a0000,
0x1b000000,
-0x00050080,
+0x00050081,
0xe1822000,
0xea000000,
0x0005000b,
-0x00060085,
+0x00060086,
0xe1c900d0,
0xe35b0008,
0x3a000000,
-0x00050045,
+0x00050046,
0xe3710000,
0x000a0000,
0x1b000000,
-0x00050080,
+0x00050081,
0xe1a02000,
0xe3a0a008,
0x0006000b,
@@ -2508,7 +2515,7 @@ static const unsigned int build_actionlist[5706] = {
0xe3710000,
0x000a0000,
0x1b000000,
-0x00050080,
+0x00050081,
0xe0222000,
0xea000000,
0x0005000b,
@@ -2518,17 +2525,17 @@ static const unsigned int build_actionlist[5706] = {
0xe5196004,
0xe14920f8,
0xea000000,
-0x0005005d,
-0x00060086,
+0x0005005e,
+0x00060087,
0xe1c900d0,
0xe35b0008,
0x3a000000,
-0x00050045,
+0x00050046,
0x00000000,
0xe3710000,
0x000a0000,
0x1b000000,
-0x00050080,
+0x00050081,
0xe0202860,
0xe3c228ff,
0xe1a00460,
@@ -2536,124 +2543,124 @@ static const unsigned int build_actionlist[5706] = {
0x000a0000,
0xe0200422,
0xea000000,
-0x00050048,
-0x00060087,
+0x00050049,
+0x00060088,
0xe1c900d0,
0xe35b0008,
0x3a000000,
-0x00050045,
+0x00050046,
0xe3710000,
0x000a0000,
0x1b000000,
-0x00050080,
+0x00050081,
0xe1e00000,
0xe3e01000,
0x000a0000,
0xea000000,
-0x00050048,
-0x00060088,
+0x00050049,
+0x00060089,
0xe1c900d8,
0xe35b0010,
0x3a000000,
-0x00050045,
+0x00050046,
0xe3710000,
0x000a0000,
0x1b000000,
-0x00050080,
+0x00050081,
0xe200a01f,
0xe1c900d0,
0xe3710000,
0x000a0000,
0x1b000000,
-0x00050080,
+0x00050081,
0xe1a00a10,
0xe3e01000,
0x000a0000,
0xea000000,
-0x00050048,
-0x00060089,
+0x00050049,
+0x0006008a,
0xe1c900d8,
0xe35b0010,
0x3a000000,
-0x00050045,
+0x00050046,
0xe3710000,
0x000a0000,
0x1b000000,
-0x00050080,
+0x00050081,
0x00000000,
0xe200a01f,
0xe1c900d0,
0xe3710000,
0x000a0000,
0x1b000000,
-0x00050080,
+0x00050081,
0xe1a00a30,
0xe3e01000,
0x000a0000,
0xea000000,
-0x00050048,
-0x0006008a,
+0x00050049,
+0x0006008b,
0xe1c900d8,
0xe35b0010,
0x3a000000,
-0x00050045,
+0x00050046,
0xe3710000,
0x000a0000,
0x1b000000,
-0x00050080,
+0x00050081,
0xe200a01f,
0xe1c900d0,
0xe3710000,
0x000a0000,
0x1b000000,
-0x00050080,
+0x00050081,
0xe1a00a50,
0xe3e01000,
0x000a0000,
0xea000000,
-0x00050048,
-0x0006008b,
+0x00050049,
+0x0006008c,
0xe1c900d8,
0xe35b0010,
0x3a000000,
-0x00050045,
+0x00050046,
0xe3710000,
0x000a0000,
0x1b000000,
-0x00050080,
+0x00050081,
0xe260a000,
0xe1c900d0,
0xe3710000,
0x000a0000,
0x1b000000,
-0x00050080,
+0x00050081,
0xe1a00a70,
0xe3e01000,
0x000a0000,
0xea000000,
-0x00050048,
-0x0006008c,
+0x00050049,
+0x0006008d,
0xe1c900d8,
0xe35b0010,
0x3a000000,
-0x00050045,
+0x00050046,
0x00000000,
0xe3710000,
0x000a0000,
0x1b000000,
-0x00050080,
+0x00050081,
0xe200a01f,
0xe1c900d0,
0xe3710000,
0x000a0000,
0x1b000000,
-0x00050080,
+0x00050081,
0xe1a00a70,
0xe3e01000,
0x000a0000,
0xea000000,
-0x00050048,
-0x00060045,
+0x00050049,
+0x00060046,
0xe5192008,
0xe5181000,
0x000d8180,
@@ -2679,14 +2686,14 @@ static const unsigned int build_actionlist[5706] = {
0xe1a0b180,
0xe249a008,
0xca000000,
-0x00050046,
+0x00050047,
0x0006000b,
0xe5180000,
0x000d8180,
0xe5192008,
0xe040b009,
0x1a000000,
-0x00050028,
+0x00050029,
0xe5126000,
0x000d8180,
0xe5d6c000,
@@ -2695,7 +2702,7 @@ static const unsigned int build_actionlist[5706] = {
0xe004a2ae,
0xe08aa009,
0xe12fff1c,
-0x00060028,
+0x00060029,
0xe2160000,
0x000a0000,
0xe3c61000,
@@ -2717,7 +2724,7 @@ static const unsigned int build_actionlist[5706] = {
0xe1500000,
0xea000000,
0x0005000b,
-0x0006004e,
+0x0006004f,
0xe1a0a00e,
0xe5089000,
0x000d8180,
@@ -2733,7 +2740,7 @@ static const unsigned int build_actionlist[5706] = {
0xe1a0e00a,
0xe5192008,
0xe12fff1e,
-0x0006008d,
+0x0006008e,
0x00000000,
0xe5570000,
0x000d8180,
@@ -2755,7 +2762,7 @@ static const unsigned int build_actionlist[5706] = {
0xea000000,
0x00050001,
0x00000000,
-0x0006008e,
+0x0006008f,
0xe5570000,
0x000d8180,
0xe3100000,
@@ -2767,7 +2774,7 @@ static const unsigned int build_actionlist[5706] = {
0xe087c10c,
0xe51cf000,
0x000d8180,
-0x0006008f,
+0x00060090,
0xe5570000,
0x000d8180,
0xe5171000,
@@ -2809,13 +2816,13 @@ static const unsigned int build_actionlist[5706] = {
0xe004a2ae,
0xe1a0b82e,
0xe12fff1c,
-0x00060090,
+0x00060091,
0xe5130018,
0xe2866004,
0xe58d0004,
0xea000000,
0x0005000e,
-0x00060091,
+0x00060092,
0x00000000,
0xe5192008,
0xe2470000,
@@ -2838,13 +2845,13 @@ static const unsigned int build_actionlist[5706] = {
0xea000000,
0x0005000d,
0x00000000,
-0x00060092,
+0x00060093,
0xe1a01006,
0x00000000,
0xea000000,
0x00050001,
0x00000000,
-0x00060093,
+0x00060094,
0x00000000,
0xe3861001,
0x0006000b,
@@ -2870,7 +2877,7 @@ static const unsigned int build_actionlist[5706] = {
0xe5192008,
0xe516e004,
0xe12fff10,
-0x00060094,
+0x00060095,
0x00000000,
0xe24dd00c,
0xe92d1fff,
@@ -2920,7 +2927,7 @@ static const unsigned int build_actionlist[5706] = {
0xea000000,
0x00050001,
0x00000000,
-0x00060095,
+0x00060096,
0x00000000,
0xe59d800c,
0x0006000b,
@@ -2961,7 +2968,7 @@ static const unsigned int build_actionlist[5706] = {
0x00000000,
0x00060013,
0x3ff00000,
-0x00060059,
+0x0006005a,
0xe1a02081,
0xe292c980,
0x5a000000,
@@ -2996,7 +3003,7 @@ static const unsigned int build_actionlist[5706] = {
0x00050813,
0x11811003,
0xe12fff1e,
-0x0006005b,
+0x0006005c,
0xe1a02081,
0xe292c980,
0x5a000000,
@@ -3031,7 +3038,7 @@ static const unsigned int build_actionlist[5706] = {
0x00050813,
0x11811003,
0xe12fff1e,
-0x00060096,
+0x00060097,
0x00000000,
0xe1a02081,
0xe292c980,
@@ -3047,12 +3054,12 @@ static const unsigned int build_actionlist[5706] = {
0x50011c13,
0xe12fff1e,
0x00000000,
-0x00060097,
+0x00060098,
0xe92d401f,
0xeb000000,
0x0003002d,
0xeb000000,
-0x00050059,
+0x0005005a,
0xe1cd20d8,
0xeb000000,
0x0003001f,
@@ -3062,7 +3069,7 @@ static const unsigned int build_actionlist[5706] = {
0x0003002e,
0xe28dd014,
0xe8bd8000,
-0x00060098,
+0x00060099,
0xe210c480,
0x42600000,
0xe02cc0c1,
@@ -3095,7 +3102,7 @@ static const unsigned int build_actionlist[5706] = {
0xe030108c,
0x42600000,
0xe12fff1e,
-0x00060099,
+0x0006009a,
0xe59dc000,
0xe35c0001,
0x3a000000,
@@ -3109,7 +3116,7 @@ static const unsigned int build_actionlist[5706] = {
0x0003002d,
0xe35c0005,
0x3a000000,
-0x00050097,
+0x00050098,
0x0a000000,
0x0003001c,
0xe35c0007,
@@ -3144,7 +3151,71 @@ static const unsigned int build_actionlist[5706] = {
0x00000000,
0xe7f001f0,
0x00000000,
-0x0006009a,
+0x0006009b,
+0x00000000,
+0xe51c6000,
+0x000d8180,
+0xe28c7000,
+0x000a0000,
+0xe14600f0,
+0x000c8100,
+0xe14620f0,
+0x000c8100,
+0xe59d3000,
+0xe28d2000,
+0x000a0000,
+0xe1a00006,
+0xe1a031a3,
+0xe5062000,
+0x000d8180,
+0xe1a0100d,
+0xe5063000,
+0x000d8180,
+0xe58d6008,
+0xeb000000,
+0x00030030,
+0xe5109000,
+0x000d8180,
+0xe3e01000,
+0x000a0000,
+0xe510b000,
+0x000d8180,
+0xe3a040ff,
+0xe5192008,
+0xe1a08000,
+0xe04bb009,
+0xe1a04184,
+0xe5071000,
+0x000d8180,
+0xe5126000,
+0x000d8180,
+0xe5d6c000,
+0xe496e004,
+0xe797c10c,
+0xe004a2ae,
+0xe08aa009,
+0xe12fff1c,
+0x00000000,
+0x00060028,
+0x00000000,
+0xe5176000,
+0x000d8180,
+0xe5089000,
+0x000d8180,
+0xe5083000,
+0x000d8180,
+0xe5068000,
+0x000d8180,
+0xe1a00006,
+0xe1a0100a,
+0xeb000000,
+0x00030031,
+0xe14600d0,
+0x000c8100,
+0xea000000,
+0x0005001a,
+0x00000000,
+0x0006009c,
0x00000000,
0xe92d4830,
0xe1a04000,
@@ -3219,7 +3290,7 @@ static const unsigned int build_actionlist[5706] = {
0xe12fff1c,
0x0006000d,
0x8a000000,
-0x00050034,
+0x00050035,
0xe3730000,
0x000a0000,
0x31a0a00c,
@@ -3237,7 +3308,7 @@ static const unsigned int build_actionlist[5706] = {
0x00050005,
0x0006000e,
0x8a000000,
-0x00050034,
+0x00050035,
0xe1a0a00c,
0xeb000000,
0x00030023,
@@ -3269,17 +3340,17 @@ static const unsigned int build_actionlist[5706] = {
0x000a0000,
0x00000000,
0x9a000000,
-0x0005009b,
+0x0005009d,
0x00000000,
0x9a000000,
-0x0005009c,
+0x0005009e,
0x00000000,
0xe3710000,
0x000a0000,
0x13730000,
0x000a0000,
0x0a000000,
-0x0005003a,
+0x0005003b,
0x00000000,
0xe1510003,
0x1a000000,
@@ -3332,7 +3403,7 @@ static const unsigned int build_actionlist[5706] = {
0xe31a0000,
0x000a0000,
0x0a000000,
-0x00050039,
+0x0005003a,
0x00000000,
0xea000000,
0x0005000c,
@@ -3381,7 +3452,7 @@ static const unsigned int build_actionlist[5706] = {
0x1a000000,
0x0005000b,
0xea000000,
-0x0005003a,
+0x0005003b,
0x00000000,
0xe1a0b18b,
0xe1aa00d9,
@@ -3390,9 +3461,9 @@ static const unsigned int build_actionlist[5706] = {
0xe2866004,
0xe086c10c,
0x00000000,
-0x0006009b,
+0x0006009d,
0x00000000,
-0x0006009c,
+0x0006009e,
0x00000000,
0xe3710000,
0x000a0000,
@@ -3441,7 +3512,7 @@ static const unsigned int build_actionlist[5706] = {
0xe1cb20d0,
0x0006000f,
0xeb000000,
-0x00030030,
+0x00030032,
0x00000000,
0x024a6b80,
0x00000000,
@@ -3456,7 +3527,7 @@ static const unsigned int build_actionlist[5706] = {
0x1a000000,
0x0005000b,
0xea000000,
-0x0005003a,
+0x0005003b,
0x00000000,
0xe18900da,
0xe1d6c0b2,
@@ -3467,7 +3538,7 @@ static const unsigned int build_actionlist[5706] = {
0xe3710000,
0x000a0000,
0x0a000000,
-0x0005003a,
+0x0005003b,
0x00000000,
0xe151000b,
0x00000000,
@@ -3539,7 +3610,7 @@ static const unsigned int build_actionlist[5706] = {
0xe3710000,
0x000a0000,
0x8a000000,
-0x0005003d,
+0x0005003e,
0x12211480,
0x1a000000,
0x00050005,
@@ -3580,7 +3651,7 @@ static const unsigned int build_actionlist[5706] = {
0xe3710000,
0x000a0000,
0x1a000000,
-0x0005003f,
+0x00050040,
0x00000000,
0xe5102000,
0x000d8180,
@@ -3589,7 +3660,7 @@ static const unsigned int build_actionlist[5706] = {
0x00050009,
0x0006000d,
0x00000000,
-0x00060040,
+0x00060041,
0x00000000,
0xe1a0b009,
0x00000000,
@@ -3609,7 +3680,7 @@ static const unsigned int build_actionlist[5706] = {
0x1a000000,
0x0005000d,
0xea000000,
-0x0005003f,
+0x00050040,
0x00000000,
0xe004caae,
0xe004b6ae,
@@ -3640,13 +3711,13 @@ static const unsigned int build_actionlist[5706] = {
0xe0900002,
0x00000000,
0x6a000000,
-0x0005003b,
+0x0005003c,
0x00000000,
0x6a000000,
-0x0005003c,
+0x0005003d,
0x00000000,
0x6a000000,
-0x0005003e,
+0x0005003f,
0x00000000,
0x0006000e,
0xe496e004,
@@ -3668,7 +3739,7 @@ static const unsigned int build_actionlist[5706] = {
0x000a0000,
0x00000000,
0x2a000000,
-0x0005003b,
+0x0005003c,
0x00000000,
0xe3730000,
0x000a0000,
@@ -3681,7 +3752,7 @@ static const unsigned int build_actionlist[5706] = {
0x000a0000,
0x00000000,
0x2a000000,
-0x0005003c,
+0x0005003d,
0x00000000,
0xe3730000,
0x000a0000,
@@ -3694,7 +3765,7 @@ static const unsigned int build_actionlist[5706] = {
0x000a0000,
0x00000000,
0x2a000000,
-0x0005003e,
+0x0005003f,
0x00000000,
0xeb000000,
0x0003002e,
@@ -3731,13 +3802,13 @@ static const unsigned int build_actionlist[5706] = {
0xe0500002,
0x00000000,
0x6a000000,
-0x0005003b,
+0x0005003c,
0x00000000,
0x6a000000,
-0x0005003c,
+0x0005003d,
0x00000000,
0x6a000000,
-0x0005003e,
+0x0005003f,
0x00000000,
0x0006000e,
0xe496e004,
@@ -3759,7 +3830,7 @@ static const unsigned int build_actionlist[5706] = {
0x000a0000,
0x00000000,
0x2a000000,
-0x0005003b,
+0x0005003c,
0x00000000,
0xe3730000,
0x000a0000,
@@ -3772,7 +3843,7 @@ static const unsigned int build_actionlist[5706] = {
0x000a0000,
0x00000000,
0x2a000000,
-0x0005003c,
+0x0005003d,
0x00000000,
0xe3730000,
0x000a0000,
@@ -3785,7 +3856,7 @@ static const unsigned int build_actionlist[5706] = {
0x000a0000,
0x00000000,
0x2a000000,
-0x0005003e,
+0x0005003f,
0x00000000,
0xeb000000,
0x0003002f,
@@ -3823,13 +3894,13 @@ static const unsigned int build_actionlist[5706] = {
0xe15b0fc0,
0x00000000,
0x1a000000,
-0x0005003b,
+0x0005003c,
0x00000000,
0x1a000000,
-0x0005003c,
+0x0005003d,
0x00000000,
0x1a000000,
-0x0005003e,
+0x0005003f,
0x00000000,
0x0006000e,
0xe496e004,
@@ -3851,7 +3922,7 @@ static const unsigned int build_actionlist[5706] = {
0x000a0000,
0x00000000,
0x2a000000,
-0x0005003b,
+0x0005003c,
0x00000000,
0xe3730000,
0x000a0000,
@@ -3864,7 +3935,7 @@ static const unsigned int build_actionlist[5706] = {
0x000a0000,
0x00000000,
0x2a000000,
-0x0005003c,
+0x0005003d,
0x00000000,
0xe3730000,
0x000a0000,
@@ -3877,7 +3948,7 @@ static const unsigned int build_actionlist[5706] = {
0x000a0000,
0x00000000,
0x2a000000,
-0x0005003e,
+0x0005003f,
0x00000000,
0xeb000000,
0x0003001f,
@@ -3908,7 +3979,7 @@ static const unsigned int build_actionlist[5706] = {
0x000a0000,
0x00000000,
0x2a000000,
-0x0005003b,
+0x0005003c,
0x00000000,
0xe3730000,
0x000a0000,
@@ -3921,7 +3992,7 @@ static const unsigned int build_actionlist[5706] = {
0x000a0000,
0x00000000,
0x2a000000,
-0x0005003c,
+0x0005003d,
0x00000000,
0xe3730000,
0x000a0000,
@@ -3934,7 +4005,7 @@ static const unsigned int build_actionlist[5706] = {
0x000a0000,
0x00000000,
0x2a000000,
-0x0005003e,
+0x0005003f,
0x00000000,
0xeb000000,
0x0003002d,
@@ -3973,16 +4044,16 @@ static const unsigned int build_actionlist[5706] = {
0xe1b01002,
0x00000000,
0x0a000000,
-0x0005003b,
+0x0005003c,
0x00000000,
0x0a000000,
-0x0005003c,
+0x0005003d,
0x00000000,
0x0a000000,
-0x0005003e,
+0x0005003f,
0x00000000,
0xeb000000,
-0x00050098,
+0x00050099,
0xe3e01000,
0x000a0000,
0x0006000e,
@@ -4006,7 +4077,7 @@ static const unsigned int build_actionlist[5706] = {
0x000a0000,
0x00000000,
0x2a000000,
-0x0005003b,
+0x0005003c,
0x00000000,
0xe3730000,
0x000a0000,
@@ -4019,7 +4090,7 @@ static const unsigned int build_actionlist[5706] = {
0x000a0000,
0x00000000,
0x2a000000,
-0x0005003c,
+0x0005003d,
0x00000000,
0xe3730000,
0x000a0000,
@@ -4032,10 +4103,10 @@ static const unsigned int build_actionlist[5706] = {
0x000a0000,
0x00000000,
0x2a000000,
-0x0005003e,
+0x0005003f,
0x00000000,
0xeb000000,
-0x00050097,
+0x00050098,
0xea000000,
0x0005000e,
0x00000000,
@@ -4062,7 +4133,7 @@ static const unsigned int build_actionlist[5706] = {
0x000a0000,
0x00000000,
0x2a000000,
-0x0005003b,
+0x0005003c,
0x00000000,
0xe3730000,
0x000a0000,
@@ -4075,7 +4146,7 @@ static const unsigned int build_actionlist[5706] = {
0x000a0000,
0x00000000,
0x2a000000,
-0x0005003c,
+0x0005003d,
0x00000000,
0xe3730000,
0x000a0000,
@@ -4088,7 +4159,7 @@ static const unsigned int build_actionlist[5706] = {
0x000a0000,
0x00000000,
0x2a000000,
-0x0005003e,
+0x0005003f,
0x00000000,
0xe1a0b009,
0x00000000,
@@ -4111,17 +4182,17 @@ static const unsigned int build_actionlist[5706] = {
0xe5089000,
0x000d8180,
0xe089100c,
-0x0006002a,
+0x0006002b,
0xe1a00008,
0xe58d6008,
0xe1a021a2,
0xeb000000,
-0x00030031,
+0x00030033,
0xe5189000,
0x000d8180,
0xe3500000,
0x1a000000,
-0x00050035,
+0x00050036,
0xe18920db,
0xe5d6c000,
0xe496e004,
@@ -4265,11 +4336,11 @@ static const unsigned int build_actionlist[5706] = {
0x0005000b,
0xe1a0b009,
0xeb000000,
-0x00030032,
+0x00030034,
0xe1a0900b,
0x00000000,
0x1b000000,
-0x00030032,
+0x00030034,
0x00000000,
0xea000000,
0x0005000b,
@@ -4314,11 +4385,11 @@ static const unsigned int build_actionlist[5706] = {
0x0005000b,
0xe1a0b009,
0xeb000000,
-0x00030032,
+0x00030034,
0xe1a0900b,
0x00000000,
0x1b000000,
-0x00030032,
+0x00030034,
0x00000000,
0xea000000,
0x0005000b,
@@ -4368,7 +4439,7 @@ static const unsigned int build_actionlist[5706] = {
0xe1a00008,
0xe089100a,
0xeb000000,
-0x00030033,
+0x00030035,
0xe5189000,
0x000d8180,
0x0006000b,
@@ -4387,7 +4458,7 @@ static const unsigned int build_actionlist[5706] = {
0xe5192008,
0xe1a00008,
0xeb000000,
-0x00030034,
+0x00030036,
0xe5189000,
0x000d8180,
0xe3e01000,
@@ -4422,11 +4493,11 @@ static const unsigned int build_actionlist[5706] = {
0xe37b0001,
0x02811002,
0xeb000000,
-0x00030035,
+0x00030037,
0x00000000,
0xe795110b,
0xeb000000,
-0x00030036,
+0x00030038,
0x00000000,
0xe5189000,
0x000d8180,
@@ -4441,7 +4512,7 @@ static const unsigned int build_actionlist[5706] = {
0xe12fff1c,
0x0006000f,
0xeb000000,
-0x00030037,
+0x00030039,
0xe1a00008,
0xea000000,
0x0005000b,
@@ -4453,10 +4524,10 @@ static const unsigned int build_actionlist[5706] = {
0xe795b10b,
0x00000000,
0xea000000,
-0x0005009d,
+0x0005009f,
0x00000000,
0xea000000,
-0x0005009e,
+0x000500a0,
0x00000000,
0xe004caae,
0xe004b6ae,
@@ -4465,7 +4536,7 @@ static const unsigned int build_actionlist[5706] = {
0xe3710000,
0x000a0000,
0x1a000000,
-0x0005002f,
+0x00050030,
0xe3730000,
0x000a0000,
0x05103000,
@@ -4478,7 +4549,7 @@ static const unsigned int build_actionlist[5706] = {
0xe1520001,
0x31c320d0,
0x2a000000,
-0x0005002f,
+0x00050030,
0xe5d6c000,
0xe3730000,
0x000a0000,
@@ -4505,15 +4576,15 @@ static const unsigned int build_actionlist[5706] = {
0x0005000b,
0xe004caae,
0xea000000,
-0x0005002f,
+0x00050030,
0x00060013,
0xe3730000,
0x000a0000,
0x01a0b002,
0x0a000000,
-0x0005009d,
+0x0005009f,
0xea000000,
-0x0005002f,
+0x00050030,
0x00000000,
0xe004caae,
0xe20bb0ff,
@@ -4523,8 +4594,8 @@ static const unsigned int build_actionlist[5706] = {
0xe3710000,
0x000a0000,
0x1a000000,
-0x0005002c,
-0x0006009d,
+0x0005002d,
+0x0006009f,
0xe5102000,
0x000d8180,
0xe51b3000,
@@ -4580,7 +4651,7 @@ static const unsigned int build_actionlist[5706] = {
0x1a000000,
0x0005000d,
0xea000000,
-0x0005002d,
+0x0005002e,
0x00000000,
0xe004caae,
0xe20bb0ff,
@@ -4588,7 +4659,7 @@ static const unsigned int build_actionlist[5706] = {
0xe3710000,
0x000a0000,
0x1a000000,
-0x0005002e,
+0x0005002f,
0xe5102000,
0x000d8180,
0xe5103000,
@@ -4597,7 +4668,7 @@ static const unsigned int build_actionlist[5706] = {
0xe15b0002,
0x318320d1,
0x2a000000,
-0x0005002e,
+0x0005002f,
0xe5d6c000,
0xe3730000,
0x000a0000,
@@ -4623,7 +4694,7 @@ static const unsigned int build_actionlist[5706] = {
0x1a000000,
0x0005000b,
0xea000000,
-0x0005002e,
+0x0005002f,
0x00000000,
0xe004caae,
0xe004b6ae,
@@ -4632,7 +4703,7 @@ static const unsigned int build_actionlist[5706] = {
0xe3710000,
0x000a0000,
0x1a000000,
-0x00050033,
+0x00050034,
0xe3730000,
0x000a0000,
0x05101000,
@@ -4645,7 +4716,7 @@ static const unsigned int build_actionlist[5706] = {
0xe1520003,
0x3591e004,
0x2a000000,
-0x00050033,
+0x00050034,
0xe5d6c000,
0xe37e0000,
0x000a0000,
@@ -4682,7 +4753,7 @@ static const unsigned int build_actionlist[5706] = {
0xe004caae,
0xe004a2ae,
0xea000000,
-0x00050033,
+0x00050034,
0x00060011,
0x00000000,
0xe5172000,
@@ -4702,9 +4773,9 @@ static const unsigned int build_actionlist[5706] = {
0x000a0000,
0x01a0b002,
0x0a000000,
-0x0005009e,
+0x000500a0,
0xea000000,
-0x00050033,
+0x00050034,
0x00000000,
0xe004caae,
0xe20bb0ff,
@@ -4714,8 +4785,8 @@ static const unsigned int build_actionlist[5706] = {
0xe3710000,
0x000a0000,
0x1a000000,
-0x00050030,
-0x0006009e,
+0x00050031,
+0x000600a0,
0xe5102000,
0x000d8180,
0xe51b3000,
@@ -4776,7 +4847,7 @@ static const unsigned int build_actionlist[5706] = {
0x1a000000,
0x0005000c,
0xea000000,
-0x00050031,
+0x00050032,
0x0006000f,
0xe1b0e002,
0x1a000000,
@@ -4796,7 +4867,7 @@ static const unsigned int build_actionlist[5706] = {
0xe3110000,
0x000a0000,
0x0a000000,
-0x00050031,
+0x00050032,
0x00060010,
0xe3e03000,
0x000a0000,
@@ -4804,7 +4875,7 @@ static const unsigned int build_actionlist[5706] = {
0xe1a0100c,
0xe58d3004,
0xeb000000,
-0x00030038,
+0x0003003a,
0xe5189000,
0x000d8180,
0xe18920da,
@@ -4832,7 +4903,7 @@ static const unsigned int build_actionlist[5706] = {
0xe3710000,
0x000a0000,
0x1a000000,
-0x00050032,
+0x00050033,
0xe5102000,
0x000d8180,
0xe510c000,
@@ -4841,7 +4912,7 @@ static const unsigned int build_actionlist[5706] = {
0xe15b0002,
0x31a120dc,
0x2a000000,
-0x00050032,
+0x00050033,
0xe5d6c000,
0xe3730000,
0x000a0000,
@@ -4877,7 +4948,7 @@ static const unsigned int build_actionlist[5706] = {
0xe516e004,
0xe004a2ae,
0xea000000,
-0x00050032,
+0x00050033,
0x00060011,
0xe5172000,
0x000d8180,
@@ -4936,7 +5007,7 @@ static const unsigned int build_actionlist[5706] = {
0xe1a00008,
0xe58d6008,
0xeb000000,
-0x00030039,
+0x0003003b,
0x00000000,
0xe5189000,
0x000d8180,
@@ -4961,10 +5032,10 @@ static const unsigned int build_actionlist[5706] = {
0xe004b6ae,
0xe08bb000,
0xea000000,
-0x0005009f,
+0x000500a1,
0x00000000,
0xe004b6ae,
-0x0006009f,
+0x000600a1,
0xe1a0c009,
0xe1a920da,
0xe24bb008,
@@ -4986,19 +5057,19 @@ static const unsigned int build_actionlist[5706] = {
0xe59d0004,
0xe080b18b,
0xea000000,
-0x000500a0,
+0x000500a2,
0x00000000,
0xe1a0b18b,
-0x000600a0,
+0x000600a2,
0xe1aa20d9,
0xe24bb008,
0xe28aa008,
0xe3730000,
0x000a0000,
0x1a000000,
-0x00050041,
+0x00050042,
0xe5196004,
-0x00060042,
+0x00060043,
0xe3a0c000,
0xe5523000,
0x000d8180,
@@ -5265,12 +5336,12 @@ static const unsigned int build_actionlist[5706] = {
0xe089a00a,
0xe080b18b,
0xea000000,
-0x000500a1,
+0x000500a3,
0x00000000,
0xe5196004,
0xe1a0b18b,
0xe089a00a,
-0x000600a1,
+0x000600a3,
0xe58db004,
0x0006000b,
0xe2160000,
@@ -5278,7 +5349,7 @@ static const unsigned int build_actionlist[5706] = {
0xe2261000,
0x000a0000,
0x1a000000,
-0x000500a2,
+0x000500a4,
0x00060017,
0xe516e004,
0xe25b3008,
@@ -5320,9 +5391,9 @@ static const unsigned int build_actionlist[5706] = {
0xe509100c,
0xea000000,
0x0005000f,
-0x000600a3,
+0x000600a5,
0xe089a00a,
-0x000600a2,
+0x000600a4,
0xe3110000,
0x000a0000,
0x1a000000,
@@ -5341,7 +5412,7 @@ static const unsigned int build_actionlist[5706] = {
0x000a0000,
0x0516e004,
0x1a000000,
-0x000500a3,
+0x000500a5,
0x00000000,
0xe18900da,
0x00000000,
@@ -5385,7 +5456,7 @@ static const unsigned int build_actionlist[5706] = {
0x000a0000,
0xe18710b0,
0x3a000000,
-0x00050091,
+0x00050092,
0x00000000,
0xe1aa00d9,
0x00000000,
@@ -5403,7 +5474,7 @@ static const unsigned int build_actionlist[5706] = {
0x037c0000,
0x000a0000,
0x1a000000,
-0x00050043,
+0x00050044,
0xe3530000,
0xba000000,
0x00050004,
@@ -5466,7 +5537,7 @@ static const unsigned int build_actionlist[5706] = {
0x337c0000,
0x000a0000,
0x2a000000,
-0x00050043,
+0x00050044,
0xe35c0000,
0xe1ca00f0,
0xe1ca01f8,
@@ -5524,7 +5595,7 @@ static const unsigned int build_actionlist[5706] = {
0x000a0000,
0xe18710b0,
0x3a000000,
-0x00050091,
+0x00050092,
0x00000000,
0xe1aa00d9,
0x00000000,
@@ -5556,7 +5627,7 @@ static const unsigned int build_actionlist[5706] = {
0x000a0000,
0xe18710b0,
0x3a000000,
-0x00050091,
+0x00050092,
0x00000000,
0xe5d6c000,
0xe496e004,
@@ -5597,7 +5668,7 @@ static const unsigned int build_actionlist[5706] = {
0x000a0000,
0xe18710b0,
0x3a000000,
-0x00050093,
+0x00050094,
0x00000000,
0xe5180000,
0x000d8180,
@@ -5742,6 +5813,7 @@ enum {
GLOB_vmeta_call,
GLOB_vm_call_dispatch_f,
GLOB_vm_cpcall,
+ GLOB_cont_ffi_callback,
GLOB_vm_call_tail,
GLOB_cont_cat,
GLOB_BC_CAT_Z,
@@ -5856,6 +5928,7 @@ enum {
GLOB_vm_mod,
GLOB_vm_modi,
GLOB_vm_foldarith,
+ GLOB_vm_ffi_callback,
GLOB_vm_ffi_call,
GLOB_BC_ISEQN_Z,
GLOB_BC_ISNEN_Z,
@@ -5889,6 +5962,7 @@ static const char *const globnames[] = {
"vmeta_call",
"vm_call_dispatch_f",
"vm_cpcall",
+ "cont_ffi_callback",
"vm_call_tail",
"cont_cat",
"BC_CAT_Z",
@@ -6003,6 +6077,7 @@ static const char *const globnames[] = {
"vm_mod",
"vm_modi",
"vm_foldarith",
+ "vm_ffi_callback",
"vm_ffi_call",
"BC_ISEQN_Z",
"BC_ISNEN_Z",
@@ -6064,6 +6139,8 @@ static const char *const extnames[] = {
"__aeabi_ddiv",
"__aeabi_dadd",
"__aeabi_dsub",
+ "lj_ccallback_enter",
+ "lj_ccallback_leave",
"__aeabi_cdcmpeq",
"lj_meta_cat",
"lj_gc_barrieruv",
@@ -6108,329 +6185,349 @@ static void build_subroutines(BuildCtx *ctx)
dasm_put(Dst, 108, ~CFRAME_RAWMASK, Dt1(->base), Dt1(->glref), ~LJ_TFALSE, GG_G2DISP, LJ_VMST_INTERP, DISPATCH_GL(vmstate), LUA_MINSTACK, Dt1(->base), Dt1(->top), Dt1(->base), Dt1(->top), Dt7(->field_pc), Dt1(->glref));
dasm_put(Dst, 173, GG_G2DISP, FRAME_CP, CFRAME_RESUME, Dt1(->status), Dt1(->cframe), Dt1(->base), Dt1(->top), Dt1(->status), LJ_VMST_INTERP, FRAME_TYPE, DISPATCH_GL(vmstate), FRAME_CP, FRAME_C, Dt1(->cframe), Dt1(->cframe));
dasm_put(Dst, 238, Dt1(->glref), GG_G2DISP, Dt1(->base), Dt1(->top), LJ_VMST_INTERP, DISPATCH_GL(vmstate), -LJ_TFUNC, Dt7(->field_pc), Dt1(->stack), Dt1(->top), Dt1(->cframe), Dt1(->cframe), Dt1(->glref), FRAME_CP, GG_G2DISP);
- dasm_put(Dst, 307, Dt7(->field_pc), ~LJ_TNIL, PC2PROTO(k), Dt1(->base), -DISPATCH_GL(tmptv), ~LJ_TTAB, ~LJ_TSTR, ~LJ_TISNUM);
- dasm_put(Dst, 378, Dt1(->base));
+ dasm_put(Dst, 307);
+#if LJ_HASFFI
+ dasm_put(Dst, 312);
+#endif
+ dasm_put(Dst, 314, Dt7(->field_pc), ~LJ_TNIL);
+#if LJ_HASFFI
+ dasm_put(Dst, 322);
+#endif
+ dasm_put(Dst, 325, PC2PROTO(k));
+#if LJ_HASFFI
+ dasm_put(Dst, 329);
+#endif
+ dasm_put(Dst, 338, Dt1(->base), -DISPATCH_GL(tmptv), ~LJ_TTAB, ~LJ_TSTR, ~LJ_TISNUM, Dt1(->base));
if (LJ_TARGET_OSX) {
- dasm_put(Dst, 388, Dt1(->base));
+ dasm_put(Dst, 395, Dt1(->base));
}
- dasm_put(Dst, 391, FRAME_CONT, Dt1(->top), -DISPATCH_GL(tmptv), ~LJ_TTAB, ~LJ_TSTR, ~LJ_TISNUM, Dt1(->base));
+ dasm_put(Dst, 398, FRAME_CONT, Dt1(->top), -DISPATCH_GL(tmptv), ~LJ_TTAB, ~LJ_TSTR, ~LJ_TISNUM, Dt1(->base));
if (LJ_TARGET_OSX) {
- dasm_put(Dst, 453, Dt1(->base));
+ dasm_put(Dst, 460, Dt1(->base));
}
- dasm_put(Dst, 456, FRAME_CONT, Dt1(->top), Dt1(->base));
+ dasm_put(Dst, 463, FRAME_CONT, Dt1(->top), Dt1(->base));
if (LJ_TARGET_OSX) {
- dasm_put(Dst, 492, Dt1(->base));
+ dasm_put(Dst, 499, Dt1(->base));
}
- dasm_put(Dst, 495, ~LJ_TTRUE, -LJ_TFALSE, Dt1(->base));
+ dasm_put(Dst, 502, ~LJ_TTRUE, -LJ_TFALSE, Dt1(->base));
#if LJ_HASFFI
- dasm_put(Dst, 542, Dt1(->base));
+ dasm_put(Dst, 549, Dt1(->base));
#endif
- dasm_put(Dst, 553, Dt1(->base));
+ dasm_put(Dst, 560, Dt1(->base));
if (LJ_TARGET_OSX) {
- dasm_put(Dst, 590, Dt1(->base));
+ dasm_put(Dst, 597, Dt1(->base));
}
- dasm_put(Dst, 593, FRAME_CONT, Dt1(->base));
+ dasm_put(Dst, 600, FRAME_CONT, Dt1(->base));
if (LJ_TARGET_OSX) {
- dasm_put(Dst, 614, Dt1(->base));
+ dasm_put(Dst, 621, Dt1(->base));
}
#ifdef LUAJIT_ENABLE_LUA52COMPAT
- dasm_put(Dst, 617);
-#else
dasm_put(Dst, 624);
+#else
+ dasm_put(Dst, 631);
#endif
- dasm_put(Dst, 627, Dt1(->base));
+ dasm_put(Dst, 634, Dt1(->base));
if (LJ_TARGET_OSX) {
- dasm_put(Dst, 635);
+ dasm_put(Dst, 642);
}
- dasm_put(Dst, 637);
+ dasm_put(Dst, 644);
if (LJ_TARGET_OSX) {
- dasm_put(Dst, 640);
+ dasm_put(Dst, 647);
}
- dasm_put(Dst, 642, Dt7(->field_pc), Dt1(->base));
+ dasm_put(Dst, 649, Dt7(->field_pc), Dt1(->base));
if (LJ_TARGET_OSX) {
- dasm_put(Dst, 663, Dt1(->base));
+ dasm_put(Dst, 670, Dt1(->base));
}
- dasm_put(Dst, 666, Dt1(->base));
+ dasm_put(Dst, 673, Dt1(->base));
if (LJ_TARGET_OSX) {
- dasm_put(Dst, 680, Dt1(->base));
+ dasm_put(Dst, 687, Dt1(->base));
}
#if LJ_HASJIT
- dasm_put(Dst, 683);
+ dasm_put(Dst, 690);
#endif
- dasm_put(Dst, 685);
+ dasm_put(Dst, 692);
#if LJ_HASJIT
- dasm_put(Dst, 687, BC_JFORI);
+ dasm_put(Dst, 694, BC_JFORI);
#endif
- dasm_put(Dst, 690);
+ dasm_put(Dst, 697);
#if LJ_HASJIT
- dasm_put(Dst, 693, BC_JFORI);
+ dasm_put(Dst, 700, BC_JFORI);
#endif
- dasm_put(Dst, 696, BC_FORI, -LJ_TTRUE, -LJ_TISNUM, ~LJ_TISNUM, (int)(offsetof(GCfuncC, upvalue)>>3)-1, -LJ_TTAB, -LJ_TUDATA, Dt6(->metatable));
- dasm_put(Dst, 753, ~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, 801, ~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, 853);
+ dasm_put(Dst, 703, BC_FORI, -LJ_TTRUE, -LJ_TISNUM, ~LJ_TISNUM, (int)(offsetof(GCfuncC, upvalue)>>3)-1, -LJ_TTAB, -LJ_TUDATA, Dt6(->metatable));
+ dasm_put(Dst, 760, ~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, 808, ~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, 860);
if (LJ_TARGET_OSX) {
- dasm_put(Dst, 858);
+ dasm_put(Dst, 865);
}
- dasm_put(Dst, 860);
+ dasm_put(Dst, 867);
if (LJ_TARGET_OSX) {
- dasm_put(Dst, 863);
+ dasm_put(Dst, 870);
}
- dasm_put(Dst, 865, -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, 917, ~LJ_TNIL, -LJ_TTAB, Dt1(->base), Dt1(->top));
+ dasm_put(Dst, 872, -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, 924, ~LJ_TNIL, -LJ_TTAB, Dt1(->base), Dt1(->top));
if (LJ_TARGET_OSX) {
- dasm_put(Dst, 940, Dt1(->base));
+ dasm_put(Dst, 947, Dt1(->base));
}
- dasm_put(Dst, 943, ~LJ_TNIL, (2+1)*8, -LJ_TTAB);
+ dasm_put(Dst, 950, ~LJ_TNIL, (2+1)*8, -LJ_TTAB);
#ifdef LUAJIT_ENABLE_LUA52COMPAT
- dasm_put(Dst, 966, Dt6(->metatable));
+ dasm_put(Dst, 973, Dt6(->metatable));
#endif
- dasm_put(Dst, 969, Dt8(->upvalue[0]));
+ dasm_put(Dst, 976, Dt8(->upvalue[0]));
#ifdef LUAJIT_ENABLE_LUA52COMPAT
- dasm_put(Dst, 973);
+ dasm_put(Dst, 980);
#endif
- dasm_put(Dst, 977, ~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, 984, ~LJ_TNIL, (3+1)*8, -LJ_TTAB, -LJ_TISNUM, Dt6(->asize), Dt6(->array), (0+1)*8, -LJ_TNIL, (2+1)*8, Dt6(->hmask));
if (LJ_TARGET_OSX) {
- dasm_put(Dst, 1027);
+ dasm_put(Dst, 1034);
}
- dasm_put(Dst, 1029);
+ dasm_put(Dst, 1036);
if (LJ_TARGET_OSX) {
- dasm_put(Dst, 1032);
+ dasm_put(Dst, 1039);
}
- dasm_put(Dst, 1034, -LJ_TTAB);
+ dasm_put(Dst, 1041, -LJ_TTAB);
#ifdef LUAJIT_ENABLE_LUA52COMPAT
- dasm_put(Dst, 1050, Dt6(->metatable));
+ dasm_put(Dst, 1057, Dt6(->metatable));
#endif
- dasm_put(Dst, 1053, Dt8(->upvalue[0]));
+ dasm_put(Dst, 1060, Dt8(->upvalue[0]));
#ifdef LUAJIT_ENABLE_LUA52COMPAT
- dasm_put(Dst, 1057);
+ dasm_put(Dst, 1064);
#endif
- dasm_put(Dst, 1061, ~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, 1120, 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, 1179, Dt1(->base), Dt1(->maxstack), Dt1(->top), ~LJ_TTRUE, FRAME_TYPE, ~LJ_TFALSE, (2+1)*8, Dt1(->top));
- dasm_put(Dst, 1239, 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, 1295, Dt1(->base), Dt1(->maxstack), Dt1(->top), FRAME_TYPE, Dt1(->cframe), Dt1(->base), CFRAME_RESUME, Dt1(->top));
- dasm_put(Dst, 1354, LUA_YIELD, Dt1(->cframe), Dt1(->status), -LJ_TISNUM, ~LJ_TISNUM, ~LJ_TISNUM);
- dasm_put(Dst, 1420, -LJ_TISNUM, ~LJ_TISNUM, ~LJ_TISNUM);
- dasm_put(Dst, 1484, -LJ_TISNUM, (1+1)*8, FRAME_TYPE, ~LJ_TNIL);
- dasm_put(Dst, 1548, -LJ_TISNUM);
+ dasm_put(Dst, 1068, ~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, 1127, 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, 1186, Dt1(->base), Dt1(->maxstack), Dt1(->top), ~LJ_TTRUE, FRAME_TYPE, ~LJ_TFALSE, (2+1)*8, Dt1(->top));
+ dasm_put(Dst, 1246, 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, 1302, Dt1(->base), Dt1(->maxstack), Dt1(->top), FRAME_TYPE, Dt1(->cframe), Dt1(->base), CFRAME_RESUME, Dt1(->top));
+ dasm_put(Dst, 1361, LUA_YIELD, Dt1(->cframe), Dt1(->status), -LJ_TISNUM, ~LJ_TISNUM, ~LJ_TISNUM);
+ dasm_put(Dst, 1427, -LJ_TISNUM, ~LJ_TISNUM, ~LJ_TISNUM);
+ dasm_put(Dst, 1491, -LJ_TISNUM, (1+1)*8, FRAME_TYPE, ~LJ_TNIL);
+ dasm_put(Dst, 1555, -LJ_TISNUM);
if (LJ_TARGET_OSX) {
- dasm_put(Dst, 1553);
+ dasm_put(Dst, 1560);
}
- dasm_put(Dst, 1555);
+ dasm_put(Dst, 1562);
if (LJ_TARGET_OSX) {
- dasm_put(Dst, 1558);
+ dasm_put(Dst, 1565);
}
- dasm_put(Dst, 1560, -LJ_TISNUM);
+ dasm_put(Dst, 1567, -LJ_TISNUM);
if (LJ_TARGET_OSX) {
- dasm_put(Dst, 1572);
+ dasm_put(Dst, 1579);
}
- dasm_put(Dst, 1574);
+ dasm_put(Dst, 1581);
if (LJ_TARGET_OSX) {
- dasm_put(Dst, 1577);
+ dasm_put(Dst, 1584);
}
- dasm_put(Dst, 1579, -LJ_TISNUM);
+ dasm_put(Dst, 1586, -LJ_TISNUM);
if (LJ_TARGET_OSX) {
- dasm_put(Dst, 1591);
+ dasm_put(Dst, 1598);
}
- dasm_put(Dst, 1593);
+ dasm_put(Dst, 1600);
if (LJ_TARGET_OSX) {
- dasm_put(Dst, 1596);
+ dasm_put(Dst, 1603);
}
- dasm_put(Dst, 1598, -LJ_TISNUM);
+ dasm_put(Dst, 1605, -LJ_TISNUM);
if (LJ_TARGET_OSX) {
- dasm_put(Dst, 1610);
+ dasm_put(Dst, 1617);
}
- dasm_put(Dst, 1612);
+ dasm_put(Dst, 1619);
if (LJ_TARGET_OSX) {
- dasm_put(Dst, 1615);
+ dasm_put(Dst, 1622);
}
- dasm_put(Dst, 1617, -LJ_TISNUM);
+ dasm_put(Dst, 1624, -LJ_TISNUM);
if (LJ_TARGET_OSX) {
- dasm_put(Dst, 1629);
+ dasm_put(Dst, 1636);
}
- dasm_put(Dst, 1631);
+ dasm_put(Dst, 1638);
if (LJ_TARGET_OSX) {
- dasm_put(Dst, 1634);
+ dasm_put(Dst, 1641);
}
- dasm_put(Dst, 1636, -LJ_TISNUM);
+ dasm_put(Dst, 1643, -LJ_TISNUM);
if (LJ_TARGET_OSX) {
- dasm_put(Dst, 1648);
+ dasm_put(Dst, 1655);
}
- dasm_put(Dst, 1650);
+ dasm_put(Dst, 1657);
if (LJ_TARGET_OSX) {
- dasm_put(Dst, 1653);
+ dasm_put(Dst, 1660);
}
- dasm_put(Dst, 1655, -LJ_TISNUM);
+ dasm_put(Dst, 1662, -LJ_TISNUM);
if (LJ_TARGET_OSX) {
- dasm_put(Dst, 1667);
+ dasm_put(Dst, 1674);
}
- dasm_put(Dst, 1669);
+ dasm_put(Dst, 1676);
if (LJ_TARGET_OSX) {
- dasm_put(Dst, 1672);
+ dasm_put(Dst, 1679);
}
- dasm_put(Dst, 1674, -LJ_TISNUM);
+ dasm_put(Dst, 1681, -LJ_TISNUM);
if (LJ_TARGET_OSX) {
- dasm_put(Dst, 1686);
+ dasm_put(Dst, 1693);
}
- dasm_put(Dst, 1688);
+ dasm_put(Dst, 1695);
if (LJ_TARGET_OSX) {
- dasm_put(Dst, 1691);
+ dasm_put(Dst, 1698);
}
- dasm_put(Dst, 1693, -LJ_TISNUM);
+ dasm_put(Dst, 1700, -LJ_TISNUM);
if (LJ_TARGET_OSX) {
- dasm_put(Dst, 1705);
+ dasm_put(Dst, 1712);
}
- dasm_put(Dst, 1707);
+ dasm_put(Dst, 1714);
if (LJ_TARGET_OSX) {
- dasm_put(Dst, 1710);
+ dasm_put(Dst, 1717);
}
- dasm_put(Dst, 1712, -LJ_TISNUM);
+ dasm_put(Dst, 1719, -LJ_TISNUM);
if (LJ_TARGET_OSX) {
- dasm_put(Dst, 1724);
+ dasm_put(Dst, 1731);
}
- dasm_put(Dst, 1726);
+ dasm_put(Dst, 1733);
if (LJ_TARGET_OSX) {
- dasm_put(Dst, 1729);
+ dasm_put(Dst, 1736);
}
- dasm_put(Dst, 1731, -LJ_TISNUM);
+ dasm_put(Dst, 1738, -LJ_TISNUM);
if (LJ_TARGET_OSX) {
- dasm_put(Dst, 1743);
+ dasm_put(Dst, 1750);
}
- dasm_put(Dst, 1745);
+ dasm_put(Dst, 1752);
if (LJ_TARGET_OSX) {
- dasm_put(Dst, 1748);
+ dasm_put(Dst, 1755);
}
- dasm_put(Dst, 1750, -LJ_TISNUM);
+ dasm_put(Dst, 1757, -LJ_TISNUM);
if (LJ_TARGET_OSX) {
- dasm_put(Dst, 1762);
+ dasm_put(Dst, 1769);
}
- dasm_put(Dst, 1764);
+ dasm_put(Dst, 1771);
if (LJ_TARGET_OSX) {
- dasm_put(Dst, 1767);
+ dasm_put(Dst, 1774);
}
- dasm_put(Dst, 1769, -LJ_TISNUM);
+ dasm_put(Dst, 1776, -LJ_TISNUM);
if (LJ_TARGET_OSX) {
- dasm_put(Dst, 1781);
+ dasm_put(Dst, 1788);
}
- dasm_put(Dst, 1783);
+ dasm_put(Dst, 1790);
if (LJ_TARGET_OSX) {
- dasm_put(Dst, 1786);
+ dasm_put(Dst, 1793);
}
- dasm_put(Dst, 1788, -LJ_TISNUM, -LJ_TISNUM);
+ dasm_put(Dst, 1795, -LJ_TISNUM, -LJ_TISNUM);
if (LJ_TARGET_OSX) {
- dasm_put(Dst, 1803);
+ dasm_put(Dst, 1810);
}
- dasm_put(Dst, 1805);
+ dasm_put(Dst, 1812);
if (LJ_TARGET_OSX) {
- dasm_put(Dst, 1808);
+ dasm_put(Dst, 1815);
}
- dasm_put(Dst, 1810, -LJ_TISNUM, -LJ_TISNUM);
+ dasm_put(Dst, 1817, -LJ_TISNUM, -LJ_TISNUM);
if (LJ_TARGET_OSX) {
- dasm_put(Dst, 1825);
+ dasm_put(Dst, 1832);
}
- dasm_put(Dst, 1827);
+ dasm_put(Dst, 1834);
if (LJ_TARGET_OSX) {
- dasm_put(Dst, 1830);
+ dasm_put(Dst, 1837);
}
- dasm_put(Dst, 1832, -LJ_TISNUM, -LJ_TISNUM);
+ dasm_put(Dst, 1839, -LJ_TISNUM, -LJ_TISNUM);
if (LJ_TARGET_OSX) {
- dasm_put(Dst, 1847);
+ dasm_put(Dst, 1854);
}
- dasm_put(Dst, 1849);
+ dasm_put(Dst, 1856);
if (LJ_TARGET_OSX) {
- dasm_put(Dst, 1852);
+ dasm_put(Dst, 1859);
}
- dasm_put(Dst, 1854, -LJ_TISNUM, Dt8(->upvalue[0]), -LJ_TISNUM, -LJ_TISNUM);
+ dasm_put(Dst, 1861, -LJ_TISNUM, Dt8(->upvalue[0]), -LJ_TISNUM, -LJ_TISNUM);
if (LJ_TARGET_OSX) {
- dasm_put(Dst, 1887);
+ dasm_put(Dst, 1894);
}
- dasm_put(Dst, 1889);
+ dasm_put(Dst, 1896);
if (LJ_TARGET_OSX) {
- dasm_put(Dst, 1892);
+ dasm_put(Dst, 1899);
}
- dasm_put(Dst, 1894, -LJ_TISNUM);
+ dasm_put(Dst, 1901, -LJ_TISNUM);
if (LJ_TARGET_OSX) {
- dasm_put(Dst, 1907);
+ dasm_put(Dst, 1914);
}
- dasm_put(Dst, 1909);
+ dasm_put(Dst, 1916);
if (LJ_TARGET_OSX) {
- dasm_put(Dst, 1912);
+ dasm_put(Dst, 1919);
}
- dasm_put(Dst, 1914, ~LJ_TISNUM, (2+1)*8, -LJ_TISNUM);
+ dasm_put(Dst, 1921, ~LJ_TISNUM, (2+1)*8, -LJ_TISNUM);
if (LJ_TARGET_OSX) {
- dasm_put(Dst, 1936);
+ dasm_put(Dst, 1943);
}
- dasm_put(Dst, 1938);
+ dasm_put(Dst, 1945);
if (LJ_TARGET_OSX) {
- dasm_put(Dst, 1941);
+ dasm_put(Dst, 1948);
}
- dasm_put(Dst, 1943, (2+1)*8, -LJ_TISNUM, -LJ_TISNUM, -LJ_TISNUM);
- dasm_put(Dst, 1994, -LJ_TISNUM, -LJ_TISNUM);
- dasm_put(Dst, 2048, -LJ_TISNUM, -LJ_TSTR, Dt5(->len), ~LJ_TISNUM, -LJ_TSTR, Dt5(->len), Dt5([1]));
- dasm_put(Dst, 2102, ~LJ_TISNUM, (0+1)*8, (1+1)*8, DISPATCH_GL(gc.total), DISPATCH_GL(gc.threshold), -LJ_TISNUM, Dt1(->base), Dt1(->base), ~LJ_TSTR, DISPATCH_GL(gc.total), DISPATCH_GL(gc.threshold));
- dasm_put(Dst, 2161, -LJ_TISNUM, -LJ_TSTR, Dt5(->len), -LJ_TISNUM, sizeof(GCstr)-1, -DISPATCH_GL(strempty), ~LJ_TSTR, DISPATCH_GL(gc.total), DISPATCH_GL(gc.threshold), -LJ_TSTR, -LJ_TISNUM, Dt5(->len));
- dasm_put(Dst, 2223, DISPATCH_GL(tmpbuf.sz), DISPATCH_GL(tmpbuf.buf), Dt5([1]), 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, 2276, 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, 2336, -LJ_TSTR, Dt5(->len), DISPATCH_GL(tmpbuf.sz), DISPATCH_GL(tmpbuf.buf), sizeof(GCstr), -LJ_TTAB);
+ dasm_put(Dst, 1950, (2+1)*8, -LJ_TISNUM, -LJ_TISNUM, -LJ_TISNUM);
+ dasm_put(Dst, 2001, -LJ_TISNUM, -LJ_TISNUM);
+ dasm_put(Dst, 2055, -LJ_TISNUM, -LJ_TSTR, Dt5(->len), ~LJ_TISNUM, -LJ_TSTR, Dt5(->len), Dt5([1]));
+ dasm_put(Dst, 2109, ~LJ_TISNUM, (0+1)*8, (1+1)*8, DISPATCH_GL(gc.total), DISPATCH_GL(gc.threshold), -LJ_TISNUM, Dt1(->base), Dt1(->base), ~LJ_TSTR, DISPATCH_GL(gc.total), DISPATCH_GL(gc.threshold));
+ dasm_put(Dst, 2168, -LJ_TISNUM, -LJ_TSTR, Dt5(->len), -LJ_TISNUM, sizeof(GCstr)-1, -DISPATCH_GL(strempty), ~LJ_TSTR, DISPATCH_GL(gc.total), DISPATCH_GL(gc.threshold), -LJ_TSTR, -LJ_TISNUM, Dt5(->len));
+ dasm_put(Dst, 2230, DISPATCH_GL(tmpbuf.sz), DISPATCH_GL(tmpbuf.buf), Dt5([1]), 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, 2283, 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, 2343, -LJ_TSTR, Dt5(->len), DISPATCH_GL(tmpbuf.sz), DISPATCH_GL(tmpbuf.buf), sizeof(GCstr), -LJ_TTAB);
if (LJ_TARGET_OSX) {
- dasm_put(Dst, 2374);
+ dasm_put(Dst, 2381);
}
- dasm_put(Dst, 2376);
+ dasm_put(Dst, 2383);
if (LJ_TARGET_OSX) {
- dasm_put(Dst, 2379);
+ dasm_put(Dst, 2386);
}
- dasm_put(Dst, 2381, ~LJ_TISNUM, -LJ_TISNUM, ~LJ_TISNUM, -LJ_TISNUM, -LJ_TISNUM);
- dasm_put(Dst, 2452, -LJ_TISNUM, -LJ_TISNUM, -LJ_TISNUM, -LJ_TISNUM, ~LJ_TISNUM);
- dasm_put(Dst, 2512, -LJ_TISNUM, ~LJ_TISNUM, -LJ_TISNUM, ~LJ_TISNUM, -LJ_TISNUM, -LJ_TISNUM, ~LJ_TISNUM, -LJ_TISNUM);
- dasm_put(Dst, 2568, -LJ_TISNUM, ~LJ_TISNUM, -LJ_TISNUM, -LJ_TISNUM, ~LJ_TISNUM, -LJ_TISNUM, -LJ_TISNUM, ~LJ_TISNUM);
- dasm_put(Dst, 2625, -LJ_TISNUM, -LJ_TISNUM, ~LJ_TISNUM, Dt1(->maxstack), Dt1(->top), Dt8(->f), Dt1(->base), 8*LUA_MINSTACK, Dt1(->base), Dt1(->top), Dt7(->field_pc), FRAME_TYPE, FRAME_TYPEP);
- dasm_put(Dst, 2688, LUA_MINSTACK, Dt1(->base), Dt1(->base), Dt1(->top), Dt1(->base));
+ dasm_put(Dst, 2388, ~LJ_TISNUM, -LJ_TISNUM, ~LJ_TISNUM, -LJ_TISNUM, -LJ_TISNUM);
+ dasm_put(Dst, 2459, -LJ_TISNUM, -LJ_TISNUM, -LJ_TISNUM, -LJ_TISNUM, ~LJ_TISNUM);
+ dasm_put(Dst, 2519, -LJ_TISNUM, ~LJ_TISNUM, -LJ_TISNUM, ~LJ_TISNUM, -LJ_TISNUM, -LJ_TISNUM, ~LJ_TISNUM, -LJ_TISNUM);
+ dasm_put(Dst, 2575, -LJ_TISNUM, ~LJ_TISNUM, -LJ_TISNUM, -LJ_TISNUM, ~LJ_TISNUM, -LJ_TISNUM, -LJ_TISNUM, ~LJ_TISNUM);
+ dasm_put(Dst, 2632, -LJ_TISNUM, -LJ_TISNUM, ~LJ_TISNUM, Dt1(->maxstack), Dt1(->top), Dt8(->f), Dt1(->base), 8*LUA_MINSTACK, Dt1(->base), Dt1(->top), Dt7(->field_pc), FRAME_TYPE, FRAME_TYPEP);
+ dasm_put(Dst, 2695, LUA_MINSTACK, Dt1(->base), Dt1(->base), Dt1(->top), Dt1(->base));
#if LJ_HASJIT
- dasm_put(Dst, 2722, DISPATCH_GL(hookmask), HOOK_VMEVENT, DISPATCH_GL(hookcount), HOOK_ACTIVE, LUA_MASKLINE|LUA_MASKCOUNT, DISPATCH_GL(hookcount));
+ dasm_put(Dst, 2729, DISPATCH_GL(hookmask), HOOK_VMEVENT, DISPATCH_GL(hookcount), HOOK_ACTIVE, LUA_MASKLINE|LUA_MASKCOUNT, DISPATCH_GL(hookcount));
#endif
- dasm_put(Dst, 2742, 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, 2788, GG_DISP2STATIC);
+ dasm_put(Dst, 2749, 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, 2795, GG_DISP2STATIC);
#if LJ_HASJIT
- dasm_put(Dst, 2804, -GG_DISP2J, Dt7(->field_pc), DISPATCH_J(L), PC2PROTO(framesize), Dt1(->base), Dt1(->top));
+ dasm_put(Dst, 2811, -GG_DISP2J, Dt7(->field_pc), DISPATCH_J(L), PC2PROTO(framesize), Dt1(->base), Dt1(->top));
#endif
- dasm_put(Dst, 2825);
+ dasm_put(Dst, 2832);
#if LJ_HASJIT
- dasm_put(Dst, 2828);
+ dasm_put(Dst, 2835);
#endif
- dasm_put(Dst, 2831);
+ dasm_put(Dst, 2838);
#if LJ_HASJIT
- dasm_put(Dst, 2833);
+ dasm_put(Dst, 2840);
#endif
- dasm_put(Dst, 2836, Dt1(->base), Dt1(->top), Dt1(->base), Dt1(->top));
+ dasm_put(Dst, 2843, Dt1(->base), Dt1(->top), Dt1(->base), Dt1(->top));
#if LJ_HASJIT
- dasm_put(Dst, 2859, LJ_VMST_EXIT, DISPATCH_GL(vmstate), DISPATCH_GL(jit_L), DISPATCH_GL(jit_base), DISPATCH_J(exitno), DISPATCH_J(L), Dt1(->base), DISPATCH_GL(jit_L), -GG_DISP2J, Dt1(->cframe), Dt1(->base), ~CFRAME_RAWMASK);
+ dasm_put(Dst, 2866, LJ_VMST_EXIT, DISPATCH_GL(vmstate), DISPATCH_GL(jit_L), DISPATCH_GL(jit_base), DISPATCH_J(exitno), DISPATCH_J(L), Dt1(->base), DISPATCH_GL(jit_L), -GG_DISP2J, Dt1(->cframe), Dt1(->base), ~CFRAME_RAWMASK);
#endif
- dasm_put(Dst, 2907);
+ dasm_put(Dst, 2914);
#if LJ_HASJIT
- dasm_put(Dst, 2909, Dt7(->field_pc), DISPATCH_GL(jit_L), LJ_VMST_INTERP, PC2PROTO(k), DISPATCH_GL(vmstate), BC_FUNCF);
+ dasm_put(Dst, 2916, Dt7(->field_pc), DISPATCH_GL(jit_L), LJ_VMST_INTERP, PC2PROTO(k), DISPATCH_GL(vmstate), BC_FUNCF);
#endif
- dasm_put(Dst, 2946);
+ dasm_put(Dst, 2953);
#if LJ_HASJIT
- dasm_put(Dst, 3020);
+ dasm_put(Dst, 3027);
#endif
- dasm_put(Dst, 3034);
+ dasm_put(Dst, 3041);
{
int i;
for (i = 31; i >= 0; i--) {
- dasm_put(Dst, 3070, i, i);
+ dasm_put(Dst, 3077, i, i);
}
}
- dasm_put(Dst, 3075);
+ dasm_put(Dst, 3082);
#if LJ_HASJIT
- dasm_put(Dst, 3104);
+ dasm_put(Dst, 3111);
#else
- dasm_put(Dst, 3129);
+ dasm_put(Dst, 3136);
+#endif
+ dasm_put(Dst, 3138);
+#if LJ_HASFFI
+#define DtE(_V) (int)(ptrdiff_t)&(((CTState *)0)_V)
+ dasm_put(Dst, 3140, Dt2(->ctype_state), GG_G2DISP, DtE(->cb.gpr[0]), DtE(->cb.gpr[2]), CFRAME_SIZE, DtE(->cb.stack), DtE(->cb.slot), Dt1(->base), LJ_VMST_INTERP, Dt1(->top), DISPATCH_GL(vmstate), Dt7(->field_pc));
#endif
- dasm_put(Dst, 3131);
+ dasm_put(Dst, 3183);
#if LJ_HASFFI
-#define DtE(_V) (int)(ptrdiff_t)&(((CCallState *)0)_V)
- dasm_put(Dst, 3133, 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, 3185, DISPATCH_GL(ctype_state), Dt1(->base), Dt1(->top), DtE(->L), DtE(->cb.gpr[0]));
+#endif
+ dasm_put(Dst, 3202);
+#if LJ_HASFFI
+#define DtF(_V) (int)(ptrdiff_t)&(((CCallState *)0)_V)
+ dasm_put(Dst, 3204, DtF(->spadj), DtF(->nsp), offsetof(CCallState, stack), DtF(->func), DtF(->gpr[0]), DtF(->gpr[1]), DtF(->gpr[2]), DtF(->gpr[3]), DtF(->gpr[0]), DtF(->gpr[1]));
#endif
}
@@ -6438,7 +6535,7 @@ static void build_subroutines(BuildCtx *ctx)
static void build_ins(BuildCtx *ctx, BCOp op, int defop)
{
int vk = 0;
- dasm_put(Dst, 3171, defop);
+ dasm_put(Dst, 3242, defop);
switch (op) {
@@ -6447,174 +6544,174 @@ 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, 3173, -LJ_TISNUM, -LJ_TISNUM);
+ dasm_put(Dst, 3244, -LJ_TISNUM, -LJ_TISNUM);
if (op == BC_ISLT) {
- dasm_put(Dst, 3189);
+ dasm_put(Dst, 3260);
} else if (op == BC_ISGE) {
- dasm_put(Dst, 3191);
+ dasm_put(Dst, 3262);
} else if (op == BC_ISLE) {
- dasm_put(Dst, 3193);
+ dasm_put(Dst, 3264);
} else {
- dasm_put(Dst, 3195);
+ dasm_put(Dst, 3266);
}
- dasm_put(Dst, 3197, -LJ_TISNUM);
+ dasm_put(Dst, 3268, -LJ_TISNUM);
if (op == BC_ISLT) {
- dasm_put(Dst, 3233);
+ dasm_put(Dst, 3304);
} else if (op == BC_ISGE) {
- dasm_put(Dst, 3235);
+ dasm_put(Dst, 3306);
} else if (op == BC_ISLE) {
- dasm_put(Dst, 3237);
+ dasm_put(Dst, 3308);
} else {
- dasm_put(Dst, 3239);
+ dasm_put(Dst, 3310);
}
- dasm_put(Dst, 3241);
+ dasm_put(Dst, 3312);
break;
case BC_ISEQV: case BC_ISNEV:
vk = op == BC_ISEQV;
- dasm_put(Dst, 3244, -LJ_TISNUM, -LJ_TISNUM);
+ dasm_put(Dst, 3315, -LJ_TISNUM, -LJ_TISNUM);
if (vk) {
- dasm_put(Dst, 3255);
+ dasm_put(Dst, 3326);
} else {
- dasm_put(Dst, 3258);
+ dasm_put(Dst, 3329);
}
if (LJ_HASFFI) {
- dasm_put(Dst, 3261, -LJ_TCDATA, -LJ_TCDATA);
+ dasm_put(Dst, 3332, -LJ_TCDATA, -LJ_TCDATA);
}
- dasm_put(Dst, 3268, -LJ_TISPRI);
+ dasm_put(Dst, 3339, -LJ_TISPRI);
if (vk) {
- dasm_put(Dst, 3277, -LJ_TISTABUD);
+ dasm_put(Dst, 3348, -LJ_TISTABUD);
} else {
- dasm_put(Dst, 3294, -LJ_TISTABUD);
+ dasm_put(Dst, 3365, -LJ_TISTABUD);
}
- dasm_put(Dst, 3301, Dt6(->metatable));
+ dasm_put(Dst, 3372, Dt6(->metatable));
if (vk) {
- dasm_put(Dst, 3305);
+ dasm_put(Dst, 3376);
} else {
- dasm_put(Dst, 3308);
+ dasm_put(Dst, 3379);
}
- dasm_put(Dst, 3311, Dt6(->nomm), 1-vk, 1<<MM_eq);
+ dasm_put(Dst, 3382, Dt6(->nomm), 1-vk, 1<<MM_eq);
if (vk) {
- dasm_put(Dst, 3321);
+ dasm_put(Dst, 3392);
} else {
- dasm_put(Dst, 3324);
+ dasm_put(Dst, 3395);
}
break;
case BC_ISEQS: case BC_ISNES:
vk = op == BC_ISEQS;
- dasm_put(Dst, 3334, -LJ_TSTR);
+ dasm_put(Dst, 3405, -LJ_TSTR);
if (LJ_HASFFI) {
- dasm_put(Dst, 3343);
+ dasm_put(Dst, 3414);
} else {
- dasm_put(Dst, 3347);
+ dasm_put(Dst, 3418);
}
if (vk) {
- dasm_put(Dst, 3349);
+ dasm_put(Dst, 3420);
} else {
- dasm_put(Dst, 3352);
+ dasm_put(Dst, 3423);
}
- dasm_put(Dst, 3355);
+ dasm_put(Dst, 3426);
if (LJ_HASFFI) {
- dasm_put(Dst, 3362, -LJ_TCDATA);
+ dasm_put(Dst, 3433, -LJ_TCDATA);
}
break;
case BC_ISEQN: case BC_ISNEN:
vk = op == BC_ISEQN;
- dasm_put(Dst, 3370);
+ dasm_put(Dst, 3441);
if (vk) {
- dasm_put(Dst, 3377);
+ dasm_put(Dst, 3448);
} else {
- dasm_put(Dst, 3379);
+ dasm_put(Dst, 3450);
}
- dasm_put(Dst, 3381, -LJ_TISNUM, -LJ_TISNUM);
+ dasm_put(Dst, 3452, -LJ_TISNUM, -LJ_TISNUM);
if (vk) {
- dasm_put(Dst, 3391);
+ dasm_put(Dst, 3462);
} else {
- dasm_put(Dst, 3394);
+ dasm_put(Dst, 3465);
}
- dasm_put(Dst, 3397);
+ dasm_put(Dst, 3468);
if (LJ_HASFFI) {
- dasm_put(Dst, 3406);
+ dasm_put(Dst, 3477);
} else {
if (!vk) {
- dasm_put(Dst, 3409);
+ dasm_put(Dst, 3480);
}
- dasm_put(Dst, 3411);
+ dasm_put(Dst, 3482);
}
- dasm_put(Dst, 3414, -LJ_TISNUM);
+ dasm_put(Dst, 3485, -LJ_TISNUM);
if (vk) {
- dasm_put(Dst, 3430);
+ dasm_put(Dst, 3501);
} else {
- dasm_put(Dst, 3432);
+ dasm_put(Dst, 3503);
}
- dasm_put(Dst, 3434);
+ dasm_put(Dst, 3505);
if (LJ_HASFFI) {
- dasm_put(Dst, 3437, -LJ_TCDATA);
+ dasm_put(Dst, 3508, -LJ_TCDATA);
}
break;
case BC_ISEQP: case BC_ISNEP:
vk = op == BC_ISEQP;
- dasm_put(Dst, 3445);
+ dasm_put(Dst, 3516);
if (LJ_HASFFI) {
- dasm_put(Dst, 3451, -LJ_TCDATA);
+ dasm_put(Dst, 3522, -LJ_TCDATA);
}
- dasm_put(Dst, 3456);
+ dasm_put(Dst, 3527);
if (vk) {
- dasm_put(Dst, 3458);
+ dasm_put(Dst, 3529);
} else {
- dasm_put(Dst, 3460);
+ dasm_put(Dst, 3531);
}
- dasm_put(Dst, 3462);
+ dasm_put(Dst, 3533);
break;
/* -- Unary test and copy ops ------------------------------------------- */
case BC_ISTC: case BC_ISFC: case BC_IST: case BC_ISF:
- dasm_put(Dst, 3469, -LJ_TTRUE);
+ dasm_put(Dst, 3540, -LJ_TTRUE);
if (op == BC_ISTC || op == BC_IST) {
- dasm_put(Dst, 3477);
+ dasm_put(Dst, 3548);
if (op == BC_ISTC) {
- dasm_put(Dst, 3479);
+ dasm_put(Dst, 3550);
}
} else {
- dasm_put(Dst, 3481);
+ dasm_put(Dst, 3552);
if (op == BC_ISFC) {
- dasm_put(Dst, 3483);
+ dasm_put(Dst, 3554);
}
}
- dasm_put(Dst, 3485);
+ dasm_put(Dst, 3556);
break;
/* -- Unary ops --------------------------------------------------------- */
case BC_MOV:
- dasm_put(Dst, 3492);
+ dasm_put(Dst, 3563);
break;
case BC_NOT:
- dasm_put(Dst, 3502, -LJ_TTRUE, ~LJ_TFALSE, ~LJ_TTRUE);
+ dasm_put(Dst, 3573, -LJ_TTRUE, ~LJ_TFALSE, ~LJ_TTRUE);
break;
case BC_UNM:
- dasm_put(Dst, 3519, -LJ_TISNUM);
+ dasm_put(Dst, 3590, -LJ_TISNUM);
break;
case BC_LEN:
- dasm_put(Dst, 3545, -LJ_TSTR, Dt5(->len), ~LJ_TISNUM, -LJ_TTAB);
+ dasm_put(Dst, 3616, -LJ_TSTR, Dt5(->len), ~LJ_TISNUM, -LJ_TTAB);
#ifdef LUAJIT_ENABLE_LUA52COMPAT
- dasm_put(Dst, 3569, Dt6(->metatable));
+ dasm_put(Dst, 3640, Dt6(->metatable));
#endif
- dasm_put(Dst, 3576);
+ dasm_put(Dst, 3647);
if (LJ_TARGET_OSX) {
- dasm_put(Dst, 3578);
+ dasm_put(Dst, 3649);
}
- dasm_put(Dst, 3580);
+ dasm_put(Dst, 3651);
if (LJ_TARGET_OSX) {
- dasm_put(Dst, 3583);
+ dasm_put(Dst, 3654);
}
- dasm_put(Dst, 3585);
+ dasm_put(Dst, 3656);
#ifdef LUAJIT_ENABLE_LUA52COMPAT
- dasm_put(Dst, 3588, Dt6(->nomm), 1<<MM_len);
+ dasm_put(Dst, 3659, Dt6(->nomm), 1<<MM_len);
#endif
break;
@@ -6622,403 +6719,403 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop)
case BC_ADDVN: case BC_ADDNV: case BC_ADDVV:
- dasm_put(Dst, 3598);
+ dasm_put(Dst, 3669);
vk = ((int)op - BC_ADDVN) / (BC_ADDNV-BC_ADDVN);
switch (vk) {
case 0:
- dasm_put(Dst, 3601);
+ dasm_put(Dst, 3672);
break;
case 1:
- dasm_put(Dst, 3604);
+ dasm_put(Dst, 3675);
break;
default:
- dasm_put(Dst, 3607);
+ dasm_put(Dst, 3678);
break;
}
- dasm_put(Dst, 3610);
+ dasm_put(Dst, 3681);
if (vk == 1) {
- dasm_put(Dst, 3612, -LJ_TISNUM, -LJ_TISNUM);
+ dasm_put(Dst, 3683, -LJ_TISNUM, -LJ_TISNUM);
} else {
- dasm_put(Dst, 3617, -LJ_TISNUM, -LJ_TISNUM);
+ dasm_put(Dst, 3688, -LJ_TISNUM, -LJ_TISNUM);
}
- dasm_put(Dst, 3622);
+ dasm_put(Dst, 3693);
switch (vk) {
case 0:
- dasm_put(Dst, 3626);
+ dasm_put(Dst, 3697);
break;
case 1:
- dasm_put(Dst, 3629);
+ dasm_put(Dst, 3700);
break;
default:
- dasm_put(Dst, 3632);
+ dasm_put(Dst, 3703);
break;
}
- dasm_put(Dst, 3635);
+ dasm_put(Dst, 3706);
switch (vk) {
case 0:
if (vk == 1) {
- dasm_put(Dst, 3644, -LJ_TISNUM, -LJ_TISNUM);
+ dasm_put(Dst, 3715, -LJ_TISNUM, -LJ_TISNUM);
} else {
- dasm_put(Dst, 3649, -LJ_TISNUM, -LJ_TISNUM);
+ dasm_put(Dst, 3720, -LJ_TISNUM, -LJ_TISNUM);
}
- dasm_put(Dst, 3654);
+ dasm_put(Dst, 3725);
break;
case 1:
if (vk == 1) {
- dasm_put(Dst, 3657, -LJ_TISNUM, -LJ_TISNUM);
+ dasm_put(Dst, 3728, -LJ_TISNUM, -LJ_TISNUM);
} else {
- dasm_put(Dst, 3662, -LJ_TISNUM, -LJ_TISNUM);
+ dasm_put(Dst, 3733, -LJ_TISNUM, -LJ_TISNUM);
}
- dasm_put(Dst, 3667);
+ dasm_put(Dst, 3738);
break;
default:
if (vk == 1) {
- dasm_put(Dst, 3670, -LJ_TISNUM, -LJ_TISNUM);
+ dasm_put(Dst, 3741, -LJ_TISNUM, -LJ_TISNUM);
} else {
- dasm_put(Dst, 3675, -LJ_TISNUM, -LJ_TISNUM);
+ dasm_put(Dst, 3746, -LJ_TISNUM, -LJ_TISNUM);
}
- dasm_put(Dst, 3680);
+ dasm_put(Dst, 3751);
break;
}
- dasm_put(Dst, 3683);
+ dasm_put(Dst, 3754);
break;
case BC_SUBVN: case BC_SUBNV: case BC_SUBVV:
- dasm_put(Dst, 3689);
+ dasm_put(Dst, 3760);
vk = ((int)op - BC_ADDVN) / (BC_ADDNV-BC_ADDVN);
switch (vk) {
case 0:
- dasm_put(Dst, 3692);
+ dasm_put(Dst, 3763);
break;
case 1:
- dasm_put(Dst, 3695);
+ dasm_put(Dst, 3766);
break;
default:
- dasm_put(Dst, 3698);
+ dasm_put(Dst, 3769);
break;
}
- dasm_put(Dst, 3701);
+ dasm_put(Dst, 3772);
if (vk == 1) {
- dasm_put(Dst, 3703, -LJ_TISNUM, -LJ_TISNUM);
+ dasm_put(Dst, 3774, -LJ_TISNUM, -LJ_TISNUM);
} else {
- dasm_put(Dst, 3708, -LJ_TISNUM, -LJ_TISNUM);
+ dasm_put(Dst, 3779, -LJ_TISNUM, -LJ_TISNUM);
}
- dasm_put(Dst, 3713);
+ dasm_put(Dst, 3784);
switch (vk) {
case 0:
- dasm_put(Dst, 3717);
+ dasm_put(Dst, 3788);
break;
case 1:
- dasm_put(Dst, 3720);
+ dasm_put(Dst, 3791);
break;
default:
- dasm_put(Dst, 3723);
+ dasm_put(Dst, 3794);
break;
}
- dasm_put(Dst, 3726);
+ dasm_put(Dst, 3797);
switch (vk) {
case 0:
if (vk == 1) {
- dasm_put(Dst, 3735, -LJ_TISNUM, -LJ_TISNUM);
+ dasm_put(Dst, 3806, -LJ_TISNUM, -LJ_TISNUM);
} else {
- dasm_put(Dst, 3740, -LJ_TISNUM, -LJ_TISNUM);
+ dasm_put(Dst, 3811, -LJ_TISNUM, -LJ_TISNUM);
}
- dasm_put(Dst, 3745);
+ dasm_put(Dst, 3816);
break;
case 1:
if (vk == 1) {
- dasm_put(Dst, 3748, -LJ_TISNUM, -LJ_TISNUM);
+ dasm_put(Dst, 3819, -LJ_TISNUM, -LJ_TISNUM);
} else {
- dasm_put(Dst, 3753, -LJ_TISNUM, -LJ_TISNUM);
+ dasm_put(Dst, 3824, -LJ_TISNUM, -LJ_TISNUM);
}
- dasm_put(Dst, 3758);
+ dasm_put(Dst, 3829);
break;
default:
if (vk == 1) {
- dasm_put(Dst, 3761, -LJ_TISNUM, -LJ_TISNUM);
+ dasm_put(Dst, 3832, -LJ_TISNUM, -LJ_TISNUM);
} else {
- dasm_put(Dst, 3766, -LJ_TISNUM, -LJ_TISNUM);
+ dasm_put(Dst, 3837, -LJ_TISNUM, -LJ_TISNUM);
}
- dasm_put(Dst, 3771);
+ dasm_put(Dst, 3842);
break;
}
- dasm_put(Dst, 3774);
+ dasm_put(Dst, 3845);
break;
case BC_MULVN: case BC_MULNV: case BC_MULVV:
- dasm_put(Dst, 3780);
+ dasm_put(Dst, 3851);
vk = ((int)op - BC_ADDVN) / (BC_ADDNV-BC_ADDVN);
switch (vk) {
case 0:
- dasm_put(Dst, 3783);
+ dasm_put(Dst, 3854);
break;
case 1:
- dasm_put(Dst, 3786);
+ dasm_put(Dst, 3857);
break;
default:
- dasm_put(Dst, 3789);
+ dasm_put(Dst, 3860);
break;
}
- dasm_put(Dst, 3792);
+ dasm_put(Dst, 3863);
if (vk == 1) {
- dasm_put(Dst, 3794, -LJ_TISNUM, -LJ_TISNUM);
+ dasm_put(Dst, 3865, -LJ_TISNUM, -LJ_TISNUM);
} else {
- dasm_put(Dst, 3799, -LJ_TISNUM, -LJ_TISNUM);
+ dasm_put(Dst, 3870, -LJ_TISNUM, -LJ_TISNUM);
}
- dasm_put(Dst, 3804);
+ dasm_put(Dst, 3875);
switch (vk) {
case 0:
- dasm_put(Dst, 3809);
+ dasm_put(Dst, 3880);
break;
case 1:
- dasm_put(Dst, 3812);
+ dasm_put(Dst, 3883);
break;
default:
- dasm_put(Dst, 3815);
+ dasm_put(Dst, 3886);
break;
}
- dasm_put(Dst, 3818);
+ dasm_put(Dst, 3889);
switch (vk) {
case 0:
if (vk == 1) {
- dasm_put(Dst, 3827, -LJ_TISNUM, -LJ_TISNUM);
+ dasm_put(Dst, 3898, -LJ_TISNUM, -LJ_TISNUM);
} else {
- dasm_put(Dst, 3832, -LJ_TISNUM, -LJ_TISNUM);
+ dasm_put(Dst, 3903, -LJ_TISNUM, -LJ_TISNUM);
}
- dasm_put(Dst, 3837);
+ dasm_put(Dst, 3908);
break;
case 1:
if (vk == 1) {
- dasm_put(Dst, 3840, -LJ_TISNUM, -LJ_TISNUM);
+ dasm_put(Dst, 3911, -LJ_TISNUM, -LJ_TISNUM);
} else {
- dasm_put(Dst, 3845, -LJ_TISNUM, -LJ_TISNUM);
+ dasm_put(Dst, 3916, -LJ_TISNUM, -LJ_TISNUM);
}
- dasm_put(Dst, 3850);
+ dasm_put(Dst, 3921);
break;
default:
if (vk == 1) {
- dasm_put(Dst, 3853, -LJ_TISNUM, -LJ_TISNUM);
+ dasm_put(Dst, 3924, -LJ_TISNUM, -LJ_TISNUM);
} else {
- dasm_put(Dst, 3858, -LJ_TISNUM, -LJ_TISNUM);
+ dasm_put(Dst, 3929, -LJ_TISNUM, -LJ_TISNUM);
}
- dasm_put(Dst, 3863);
+ dasm_put(Dst, 3934);
break;
}
- dasm_put(Dst, 3866);
+ dasm_put(Dst, 3937);
break;
case BC_DIVVN: case BC_DIVNV: case BC_DIVVV:
- dasm_put(Dst, 3872);
+ dasm_put(Dst, 3943);
vk = ((int)op - BC_ADDVN) / (BC_ADDNV-BC_ADDVN);
switch (vk) {
case 0:
- dasm_put(Dst, 3875);
+ dasm_put(Dst, 3946);
break;
case 1:
- dasm_put(Dst, 3878);
+ dasm_put(Dst, 3949);
break;
default:
- dasm_put(Dst, 3881);
+ dasm_put(Dst, 3952);
break;
}
switch (vk) {
case 0:
if (vk == 1) {
- dasm_put(Dst, 3884, -LJ_TISNUM, -LJ_TISNUM);
+ dasm_put(Dst, 3955, -LJ_TISNUM, -LJ_TISNUM);
} else {
- dasm_put(Dst, 3889, -LJ_TISNUM, -LJ_TISNUM);
+ dasm_put(Dst, 3960, -LJ_TISNUM, -LJ_TISNUM);
}
- dasm_put(Dst, 3894);
+ dasm_put(Dst, 3965);
break;
case 1:
if (vk == 1) {
- dasm_put(Dst, 3897, -LJ_TISNUM, -LJ_TISNUM);
+ dasm_put(Dst, 3968, -LJ_TISNUM, -LJ_TISNUM);
} else {
- dasm_put(Dst, 3902, -LJ_TISNUM, -LJ_TISNUM);
+ dasm_put(Dst, 3973, -LJ_TISNUM, -LJ_TISNUM);
}
- dasm_put(Dst, 3907);
+ dasm_put(Dst, 3978);
break;
default:
if (vk == 1) {
- dasm_put(Dst, 3910, -LJ_TISNUM, -LJ_TISNUM);
+ dasm_put(Dst, 3981, -LJ_TISNUM, -LJ_TISNUM);
} else {
- dasm_put(Dst, 3915, -LJ_TISNUM, -LJ_TISNUM);
+ dasm_put(Dst, 3986, -LJ_TISNUM, -LJ_TISNUM);
}
- dasm_put(Dst, 3920);
+ dasm_put(Dst, 3991);
break;
}
- dasm_put(Dst, 3923);
+ dasm_put(Dst, 3994);
break;
case BC_MODVN: case BC_MODNV: case BC_MODVV:
- dasm_put(Dst, 3933);
+ dasm_put(Dst, 4004);
vk = ((int)op - BC_ADDVN) / (BC_ADDNV-BC_ADDVN);
switch (vk) {
case 0:
- dasm_put(Dst, 3936);
+ dasm_put(Dst, 4007);
break;
case 1:
- dasm_put(Dst, 3939);
+ dasm_put(Dst, 4010);
break;
default:
- dasm_put(Dst, 3942);
+ dasm_put(Dst, 4013);
break;
}
if (vk == 1) {
- dasm_put(Dst, 3945, -LJ_TISNUM, -LJ_TISNUM);
+ dasm_put(Dst, 4016, -LJ_TISNUM, -LJ_TISNUM);
} else {
- dasm_put(Dst, 3950, -LJ_TISNUM, -LJ_TISNUM);
+ dasm_put(Dst, 4021, -LJ_TISNUM, -LJ_TISNUM);
}
- dasm_put(Dst, 3955);
+ dasm_put(Dst, 4026);
switch (vk) {
case 0:
- dasm_put(Dst, 3959);
+ dasm_put(Dst, 4030);
break;
case 1:
- dasm_put(Dst, 3962);
+ dasm_put(Dst, 4033);
break;
default:
- dasm_put(Dst, 3965);
+ dasm_put(Dst, 4036);
break;
}
- dasm_put(Dst, 3968, ~LJ_TISNUM);
+ dasm_put(Dst, 4039, ~LJ_TISNUM);
switch (vk) {
case 0:
if (vk == 1) {
- dasm_put(Dst, 3982, -LJ_TISNUM, -LJ_TISNUM);
+ dasm_put(Dst, 4053, -LJ_TISNUM, -LJ_TISNUM);
} else {
- dasm_put(Dst, 3987, -LJ_TISNUM, -LJ_TISNUM);
+ dasm_put(Dst, 4058, -LJ_TISNUM, -LJ_TISNUM);
}
- dasm_put(Dst, 3992);
+ dasm_put(Dst, 4063);
break;
case 1:
if (vk == 1) {
- dasm_put(Dst, 3995, -LJ_TISNUM, -LJ_TISNUM);
+ dasm_put(Dst, 4066, -LJ_TISNUM, -LJ_TISNUM);
} else {
- dasm_put(Dst, 4000, -LJ_TISNUM, -LJ_TISNUM);
+ dasm_put(Dst, 4071, -LJ_TISNUM, -LJ_TISNUM);
}
- dasm_put(Dst, 4005);
+ dasm_put(Dst, 4076);
break;
default:
if (vk == 1) {
- dasm_put(Dst, 4008, -LJ_TISNUM, -LJ_TISNUM);
+ dasm_put(Dst, 4079, -LJ_TISNUM, -LJ_TISNUM);
} else {
- dasm_put(Dst, 4013, -LJ_TISNUM, -LJ_TISNUM);
+ dasm_put(Dst, 4084, -LJ_TISNUM, -LJ_TISNUM);
}
- dasm_put(Dst, 4018);
+ dasm_put(Dst, 4089);
break;
}
- dasm_put(Dst, 4021);
+ dasm_put(Dst, 4092);
break;
case BC_POW:
- dasm_put(Dst, 4026);
+ dasm_put(Dst, 4097);
vk = ((int)op - BC_ADDVN) / (BC_ADDNV-BC_ADDVN);
switch (vk) {
case 0:
- dasm_put(Dst, 4029);
+ dasm_put(Dst, 4100);
break;
case 1:
- dasm_put(Dst, 4032);
+ dasm_put(Dst, 4103);
break;
default:
- dasm_put(Dst, 4035);
+ dasm_put(Dst, 4106);
break;
}
switch (vk) {
case 0:
if (vk == 1) {
- dasm_put(Dst, 4038, -LJ_TISNUM, -LJ_TISNUM);
+ dasm_put(Dst, 4109, -LJ_TISNUM, -LJ_TISNUM);
} else {
- dasm_put(Dst, 4043, -LJ_TISNUM, -LJ_TISNUM);
+ dasm_put(Dst, 4114, -LJ_TISNUM, -LJ_TISNUM);
}
- dasm_put(Dst, 4048);
+ dasm_put(Dst, 4119);
break;
case 1:
if (vk == 1) {
- dasm_put(Dst, 4051, -LJ_TISNUM, -LJ_TISNUM);
+ dasm_put(Dst, 4122, -LJ_TISNUM, -LJ_TISNUM);
} else {
- dasm_put(Dst, 4056, -LJ_TISNUM, -LJ_TISNUM);
+ dasm_put(Dst, 4127, -LJ_TISNUM, -LJ_TISNUM);
}
- dasm_put(Dst, 4061);
+ dasm_put(Dst, 4132);
break;
default:
if (vk == 1) {
- dasm_put(Dst, 4064, -LJ_TISNUM, -LJ_TISNUM);
+ dasm_put(Dst, 4135, -LJ_TISNUM, -LJ_TISNUM);
} else {
- dasm_put(Dst, 4069, -LJ_TISNUM, -LJ_TISNUM);
+ dasm_put(Dst, 4140, -LJ_TISNUM, -LJ_TISNUM);
}
- dasm_put(Dst, 4074);
+ dasm_put(Dst, 4145);
break;
}
if (LJ_TARGET_OSX) {
- dasm_put(Dst, 4077);
+ dasm_put(Dst, 4148);
}
- dasm_put(Dst, 4079);
+ dasm_put(Dst, 4150);
if (LJ_TARGET_OSX) {
- dasm_put(Dst, 4082);
+ dasm_put(Dst, 4153);
}
- dasm_put(Dst, 4084);
+ dasm_put(Dst, 4155);
break;
case BC_CAT:
- dasm_put(Dst, 4092, Dt1(->base), Dt1(->base));
+ dasm_put(Dst, 4163, Dt1(->base), Dt1(->base));
break;
/* -- Constant ops ------------------------------------------------------ */
case BC_KSTR:
- dasm_put(Dst, 4118, ~LJ_TSTR);
+ dasm_put(Dst, 4189, ~LJ_TSTR);
break;
case BC_KCDATA:
#if LJ_HASFFI
- dasm_put(Dst, 4130, ~LJ_TCDATA);
+ dasm_put(Dst, 4201, ~LJ_TCDATA);
#endif
break;
case BC_KSHORT:
- dasm_put(Dst, 4142, ~LJ_TISNUM);
+ dasm_put(Dst, 4213, ~LJ_TISNUM);
break;
case BC_KNUM:
- dasm_put(Dst, 4153);
+ dasm_put(Dst, 4224);
break;
case BC_KPRI:
- dasm_put(Dst, 4163);
+ dasm_put(Dst, 4234);
break;
case BC_KNIL:
- dasm_put(Dst, 4173, ~LJ_TNIL);
+ dasm_put(Dst, 4244, ~LJ_TNIL);
break;
/* -- Upvalue and function ops ------------------------------------------ */
case BC_UGET:
- dasm_put(Dst, 4192, offsetof(GCfuncL, uvptr), DtA(->v));
+ dasm_put(Dst, 4263, offsetof(GCfuncL, uvptr), DtA(->v));
break;
case BC_USETV:
- dasm_put(Dst, 4208, 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, 4279, 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);
if (LJ_TARGET_OSX) {
- dasm_put(Dst, 4248);
+ dasm_put(Dst, 4319);
} else {
- dasm_put(Dst, 4255);
+ dasm_put(Dst, 4326);
}
- dasm_put(Dst, 4258);
+ dasm_put(Dst, 4329);
break;
case BC_USETS:
- dasm_put(Dst, 4261, offsetof(GCfuncL, uvptr), ~LJ_TSTR, DtA(->marked), DtA(->v), DtA(->closed), LJ_GC_BLACK, Dt5(->marked), LJ_GC_WHITES, -GG_DISP2G);
+ dasm_put(Dst, 4332, offsetof(GCfuncL, uvptr), ~LJ_TSTR, DtA(->marked), DtA(->v), DtA(->closed), LJ_GC_BLACK, Dt5(->marked), LJ_GC_WHITES, -GG_DISP2G);
if (LJ_TARGET_OSX) {
- dasm_put(Dst, 4297);
+ dasm_put(Dst, 4368);
} else {
- dasm_put(Dst, 4304);
+ dasm_put(Dst, 4375);
}
- dasm_put(Dst, 4307);
+ dasm_put(Dst, 4378);
break;
case BC_USETN:
- dasm_put(Dst, 4310, offsetof(GCfuncL, uvptr), DtA(->v));
+ dasm_put(Dst, 4381, offsetof(GCfuncL, uvptr), DtA(->v));
break;
case BC_USETP:
- dasm_put(Dst, 4327, offsetof(GCfuncL, uvptr), DtA(->v));
+ dasm_put(Dst, 4398, offsetof(GCfuncL, uvptr), DtA(->v));
break;
case BC_UCLO:
- dasm_put(Dst, 4343, Dt1(->openupval), Dt1(->base), Dt1(->base));
+ dasm_put(Dst, 4414, Dt1(->openupval), Dt1(->base), Dt1(->base));
break;
case BC_FNEW:
- dasm_put(Dst, 4366, Dt1(->base), Dt1(->base), ~LJ_TFUNC);
+ dasm_put(Dst, 4437, Dt1(->base), Dt1(->base), ~LJ_TFUNC);
break;
/* -- Table ops --------------------------------------------------------- */
@@ -7026,115 +7123,115 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop)
case BC_TNEW:
case BC_TDUP:
if (op == BC_TDUP) {
- dasm_put(Dst, 4387);
+ dasm_put(Dst, 4458);
}
- dasm_put(Dst, 4389, DISPATCH_GL(gc.total), DISPATCH_GL(gc.threshold), Dt1(->base));
+ dasm_put(Dst, 4460, DISPATCH_GL(gc.total), DISPATCH_GL(gc.threshold), Dt1(->base));
if (op == BC_TNEW) {
- dasm_put(Dst, 4402);
+ dasm_put(Dst, 4473);
} else {
- dasm_put(Dst, 4411);
+ dasm_put(Dst, 4482);
}
- dasm_put(Dst, 4415, Dt1(->base), ~LJ_TTAB);
+ dasm_put(Dst, 4486, Dt1(->base), ~LJ_TTAB);
break;
case BC_GGET:
case BC_GSET:
- dasm_put(Dst, 4433, Dt7(->env));
+ dasm_put(Dst, 4504, Dt7(->env));
if (op == BC_GGET) {
- dasm_put(Dst, 4439);
+ dasm_put(Dst, 4510);
} else {
- dasm_put(Dst, 4442);
+ dasm_put(Dst, 4513);
}
break;
case BC_TGETV:
- dasm_put(Dst, 4445, -LJ_TTAB, -LJ_TISNUM, Dt6(->array), Dt6(->asize), -LJ_TNIL, Dt6(->metatable), Dt6(->nomm), 1<<MM_index, -LJ_TSTR);
+ dasm_put(Dst, 4516, -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, 4502, -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, 4562, 1<<MM_index);
+ dasm_put(Dst, 4573, -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, 4633, 1<<MM_index);
break;
case BC_TGETB:
- dasm_put(Dst, 4569, -LJ_TTAB, Dt6(->asize), Dt6(->array), -LJ_TNIL, Dt6(->metatable), Dt6(->nomm), 1<<MM_index);
+ dasm_put(Dst, 4640, -LJ_TTAB, Dt6(->asize), Dt6(->array), -LJ_TNIL, Dt6(->metatable), Dt6(->nomm), 1<<MM_index);
break;
case BC_TSETV:
- dasm_put(Dst, 4612, -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, 4672, DISPATCH_GL(gc.grayagain), LJ_GC_BLACK, DISPATCH_GL(gc.grayagain), Dt6(->marked), Dt6(->gclist), -LJ_TSTR);
+ dasm_put(Dst, 4683, -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, 4743, DISPATCH_GL(gc.grayagain), LJ_GC_BLACK, DISPATCH_GL(gc.grayagain), Dt6(->marked), Dt6(->gclist), -LJ_TSTR);
break;
case BC_TSETS:
- dasm_put(Dst, 4693, -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, 4751, 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, 4804, DISPATCH_GL(gc.grayagain), Dt6(->marked), Dt6(->gclist));
+ dasm_put(Dst, 4764, -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, 4822, 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, 4875, DISPATCH_GL(gc.grayagain), Dt6(->marked), Dt6(->gclist));
break;
case BC_TSETB:
- dasm_put(Dst, 4813, -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, 4871, DISPATCH_GL(gc.grayagain), Dt6(->marked), Dt6(->gclist));
+ dasm_put(Dst, 4884, -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, 4942, DISPATCH_GL(gc.grayagain), Dt6(->marked), Dt6(->gclist));
break;
case BC_TSETM:
- dasm_put(Dst, 4880, Dt6(->asize), Dt6(->array), Dt6(->marked), LJ_GC_BLACK, Dt1(->base));
+ dasm_put(Dst, 4951, Dt6(->asize), Dt6(->array), Dt6(->marked), LJ_GC_BLACK, Dt1(->base));
if (LJ_TARGET_OSX) {
- dasm_put(Dst, 4925, Dt1(->base));
+ dasm_put(Dst, 4996, Dt1(->base));
}
- dasm_put(Dst, 4928, DISPATCH_GL(gc.grayagain), LJ_GC_BLACK, DISPATCH_GL(gc.grayagain), Dt6(->marked), Dt6(->gclist));
+ dasm_put(Dst, 4999, 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, 4944);
+ dasm_put(Dst, 5015);
break;
case BC_CALL:
- dasm_put(Dst, 4950, -LJ_TFUNC, Dt7(->field_pc));
+ dasm_put(Dst, 5021, -LJ_TFUNC, Dt7(->field_pc));
break;
case BC_CALLMT:
- dasm_put(Dst, 4970);
+ dasm_put(Dst, 5041);
break;
case BC_CALLT:
- dasm_put(Dst, 4975, -LJ_TFUNC, Dt7(->ffid), FRAME_TYPE, Dt7(->field_pc), Dt7(->field_pc), PC2PROTO(k), FRAME_VARG, FRAME_TYPEP);
- dasm_put(Dst, 5036, FRAME_TYPE);
+ dasm_put(Dst, 5046, -LJ_TFUNC, Dt7(->ffid), FRAME_TYPE, Dt7(->field_pc), Dt7(->field_pc), PC2PROTO(k), FRAME_VARG, FRAME_TYPEP);
+ dasm_put(Dst, 5107, FRAME_TYPE);
break;
case BC_ITERC:
- dasm_put(Dst, 5047, -LJ_TFUNC, Dt7(->field_pc));
+ dasm_put(Dst, 5118, -LJ_TFUNC, Dt7(->field_pc));
break;
case BC_ITERN:
#if LJ_HASJIT
#endif
- dasm_put(Dst, 5071, Dt6(->asize), Dt6(->array), -LJ_TNIL, ~LJ_TISNUM, Dt6(->hmask), Dt6(->node), DtB(->val), -LJ_TNIL, DtB(->key));
+ dasm_put(Dst, 5142, 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, 5136, -LJ_TFUNC, Dt8(->ffid), -LJ_TTAB, -LJ_TNIL, FF_next_N, BC_JMP, BC_ITERC);
+ dasm_put(Dst, 5207, -LJ_TFUNC, Dt8(->ffid), -LJ_TTAB, -LJ_TNIL, FF_next_N, BC_JMP, BC_ITERC);
break;
case BC_VARG:
- dasm_put(Dst, 5175, FRAME_VARG, ~LJ_TNIL, Dt1(->maxstack), Dt1(->top), Dt1(->base), Dt1(->base));
+ dasm_put(Dst, 5246, FRAME_VARG, ~LJ_TNIL, Dt1(->maxstack), Dt1(->top), Dt1(->base), Dt1(->base));
break;
/* -- Returns ----------------------------------------------------------- */
case BC_RETM:
- dasm_put(Dst, 5247);
+ dasm_put(Dst, 5318);
break;
case BC_RET:
- dasm_put(Dst, 5254, FRAME_TYPE, FRAME_VARG, Dt7(->field_pc), PC2PROTO(k), ~LJ_TNIL, FRAME_TYPEP);
+ dasm_put(Dst, 5325, FRAME_TYPE, FRAME_VARG, Dt7(->field_pc), PC2PROTO(k), ~LJ_TNIL, FRAME_TYPEP);
break;
case BC_RET0: case BC_RET1:
- dasm_put(Dst, 5319, FRAME_TYPE, FRAME_VARG);
+ dasm_put(Dst, 5390, FRAME_TYPE, FRAME_VARG);
if (op == BC_RET1) {
- dasm_put(Dst, 5330);
+ dasm_put(Dst, 5401);
}
- dasm_put(Dst, 5332);
+ dasm_put(Dst, 5403);
if (op == BC_RET1) {
- dasm_put(Dst, 5335);
+ dasm_put(Dst, 5406);
}
- dasm_put(Dst, 5337, Dt7(->field_pc), PC2PROTO(k), ~LJ_TNIL);
+ dasm_put(Dst, 5408, Dt7(->field_pc), PC2PROTO(k), ~LJ_TNIL);
break;
/* -- Loops and branches ------------------------------------------------ */
@@ -7142,7 +7239,7 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop)
case BC_FORL:
#if LJ_HASJIT
- dasm_put(Dst, 5363, -GG_DISP2HOT, HOTCOUNT_LOOP);
+ dasm_put(Dst, 5434, -GG_DISP2HOT, HOTCOUNT_LOOP);
#endif
break;
@@ -7154,68 +7251,68 @@ 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, 5374);
+ dasm_put(Dst, 5445);
if (op != BC_JFORL) {
- dasm_put(Dst, 5376);
+ dasm_put(Dst, 5447);
}
if (!vk) {
- dasm_put(Dst, 5378, -LJ_TISNUM, -LJ_TISNUM, -LJ_TISNUM);
+ dasm_put(Dst, 5449, -LJ_TISNUM, -LJ_TISNUM, -LJ_TISNUM);
} else {
- dasm_put(Dst, 5396, -LJ_TISNUM);
+ dasm_put(Dst, 5467, -LJ_TISNUM);
if (op == BC_IFORL) {
- dasm_put(Dst, 5404);
+ dasm_put(Dst, 5475);
} else {
- dasm_put(Dst, 5406);
+ dasm_put(Dst, 5477);
}
- dasm_put(Dst, 5409);
+ dasm_put(Dst, 5480);
}
- dasm_put(Dst, 5414);
+ dasm_put(Dst, 5485);
if (op == BC_FORI) {
- dasm_put(Dst, 5416);
+ dasm_put(Dst, 5487);
} else if (op == BC_JFORI) {
- dasm_put(Dst, 5418);
+ dasm_put(Dst, 5489);
} else if (op == BC_IFORL) {
- dasm_put(Dst, 5421);
+ dasm_put(Dst, 5492);
}
if (vk) {
- dasm_put(Dst, 5423);
+ dasm_put(Dst, 5494);
}
- dasm_put(Dst, 5425);
+ dasm_put(Dst, 5496);
if (op == BC_JFORI || op == BC_JFORL) {
- dasm_put(Dst, 5430, BC_JLOOP);
+ dasm_put(Dst, 5501, BC_JLOOP);
}
- dasm_put(Dst, 5433);
+ dasm_put(Dst, 5504);
if (!vk) {
- dasm_put(Dst, 5440);
+ dasm_put(Dst, 5511);
} else {
- dasm_put(Dst, 5442);
+ dasm_put(Dst, 5513);
}
- dasm_put(Dst, 5444);
+ dasm_put(Dst, 5515);
if (!vk) {
- dasm_put(Dst, 5448, -LJ_TISNUM, -LJ_TISNUM);
+ dasm_put(Dst, 5519, -LJ_TISNUM, -LJ_TISNUM);
} else {
- dasm_put(Dst, 5460);
+ dasm_put(Dst, 5531);
}
- dasm_put(Dst, 5469);
+ dasm_put(Dst, 5540);
if (op == BC_FORI) {
- dasm_put(Dst, 5473);
+ dasm_put(Dst, 5544);
} else if (op == BC_JFORI) {
- dasm_put(Dst, 5475, BC_JLOOP);
+ dasm_put(Dst, 5546, BC_JLOOP);
} else if (op == BC_IFORL) {
- dasm_put(Dst, 5480);
+ dasm_put(Dst, 5551);
} else {
- dasm_put(Dst, 5482, BC_JLOOP);
+ dasm_put(Dst, 5553, BC_JLOOP);
}
- dasm_put(Dst, 5485);
+ dasm_put(Dst, 5556);
if (vk) {
- dasm_put(Dst, 5491);
+ dasm_put(Dst, 5562);
}
- dasm_put(Dst, 5496);
+ dasm_put(Dst, 5567);
break;
case BC_ITERL:
#if LJ_HASJIT
- dasm_put(Dst, 5502, -GG_DISP2HOT, HOTCOUNT_LOOP);
+ dasm_put(Dst, 5573, -GG_DISP2HOT, HOTCOUNT_LOOP);
#endif
break;
@@ -7224,40 +7321,40 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop)
break;
#endif
case BC_IITERL:
- dasm_put(Dst, 5513);
+ dasm_put(Dst, 5584);
if (op == BC_JITERL) {
- dasm_put(Dst, 5515, -LJ_TNIL, BC_JLOOP);
+ dasm_put(Dst, 5586, -LJ_TNIL, BC_JLOOP);
} else {
- dasm_put(Dst, 5521, -LJ_TNIL);
+ dasm_put(Dst, 5592, -LJ_TNIL);
}
- dasm_put(Dst, 5527);
+ dasm_put(Dst, 5598);
break;
case BC_LOOP:
#if LJ_HASJIT
- dasm_put(Dst, 5534, -GG_DISP2HOT, HOTCOUNT_LOOP);
+ dasm_put(Dst, 5605, -GG_DISP2HOT, HOTCOUNT_LOOP);
#endif
break;
case BC_ILOOP:
- dasm_put(Dst, 5545);
+ dasm_put(Dst, 5616);
break;
case BC_JLOOP:
#if LJ_HASJIT
- dasm_put(Dst, 5552, DISPATCH_J(trace), DISPATCH_GL(vmstate), DtD(->mcode), DISPATCH_GL(jit_base), DISPATCH_GL(jit_L));
+ dasm_put(Dst, 5623, DISPATCH_J(trace), DISPATCH_GL(vmstate), DtD(->mcode), DISPATCH_GL(jit_base), DISPATCH_GL(jit_L));
#endif
break;
case BC_JMP:
- dasm_put(Dst, 5566);
+ dasm_put(Dst, 5637);
break;
/* -- Function headers -------------------------------------------------- */
case BC_FUNCF:
#if LJ_HASJIT
- dasm_put(Dst, 5575, -GG_DISP2HOT, HOTCOUNT_CALL);
+ dasm_put(Dst, 5646, -GG_DISP2HOT, HOTCOUNT_CALL);
#endif
case BC_FUNCV: /* NYI: compiled vararg functions. */
break;
@@ -7267,42 +7364,42 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop)
break;
#endif
case BC_IFUNCF:
- dasm_put(Dst, 5586, Dt1(->maxstack), -4+PC2PROTO(numparams), -4+PC2PROTO(k));
+ dasm_put(Dst, 5657, Dt1(->maxstack), -4+PC2PROTO(numparams), -4+PC2PROTO(k));
if (op != BC_JFUNCF) {
- dasm_put(Dst, 5596);
+ dasm_put(Dst, 5667);
}
- dasm_put(Dst, 5599, ~LJ_TNIL);
+ dasm_put(Dst, 5670, ~LJ_TNIL);
if (op == BC_JFUNCF) {
- dasm_put(Dst, 5606, BC_JLOOP);
+ dasm_put(Dst, 5677, BC_JLOOP);
} else {
- dasm_put(Dst, 5610);
+ dasm_put(Dst, 5681);
}
- dasm_put(Dst, 5615);
+ dasm_put(Dst, 5686);
break;
case BC_JFUNCV:
#if !LJ_HASJIT
break;
#endif
- dasm_put(Dst, 5621);
+ dasm_put(Dst, 5692);
break; /* NYI: compiled vararg functions. */
case BC_IFUNCV:
- dasm_put(Dst, 5623, Dt1(->maxstack), 8+FRAME_VARG, -4+PC2PROTO(k), -4+PC2PROTO(numparams), ~LJ_TNIL);
+ dasm_put(Dst, 5694, 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, 5664, Dt8(->f));
+ dasm_put(Dst, 5735, Dt8(->f));
} else {
- dasm_put(Dst, 5667, DISPATCH_GL(wrapf));
+ dasm_put(Dst, 5738, DISPATCH_GL(wrapf));
}
- dasm_put(Dst, 5670, Dt1(->maxstack), Dt1(->base), Dt1(->top));
+ dasm_put(Dst, 5741, Dt1(->maxstack), Dt1(->base), Dt1(->top));
if (op == BC_FUNCCW) {
- dasm_put(Dst, 5680, Dt8(->f));
+ dasm_put(Dst, 5751, Dt8(->f));
}
- dasm_put(Dst, 5683, LJ_VMST_C, DISPATCH_GL(vmstate), Dt1(->base), LJ_VMST_INTERP, Dt1(->top), DISPATCH_GL(vmstate));
+ dasm_put(Dst, 5754, LJ_VMST_C, DISPATCH_GL(vmstate), Dt1(->base), LJ_VMST_INTERP, Dt1(->top), DISPATCH_GL(vmstate));
break;
/* ---------------------------------------------------------------------- */
@@ -7322,7 +7419,7 @@ static int build_backend(BuildCtx *ctx)
build_subroutines(ctx);
- dasm_put(Dst, 5705);
+ dasm_put(Dst, 5776);
for (op = 0; op < BC__MAX; op++)
build_ins(ctx, (BCOp)op, op);
diff --git a/src/lj_ccallback.c b/src/lj_ccallback.c
index c0668e41..f3474588 100644
--- a/src/lj_ccallback.c
+++ b/src/lj_ccallback.c
@@ -43,6 +43,13 @@ static MSize CALLBACK_OFS2SLOT(MSize ofs)
#define CALLBACK_MAX_SLOT \
(((CALLBACK_MCODE_SIZE-CALLBACK_MCODE_HEAD)/(CALLBACK_MCODE_GROUP+4*32))*32)
+#elif LJ_TARGET_ARM
+
+#define CALLBACK_MCODE_HEAD 32
+#define CALLBACK_SLOT2OFS(slot) (CALLBACK_MCODE_HEAD + 8*(slot))
+#define CALLBACK_OFS2SLOT(ofs) (((ofs)-CALLBACK_MCODE_HEAD)/8)
+#define CALLBACK_MAX_SLOT (CALLBACK_OFS2SLOT(CALLBACK_MCODE_SIZE))
+
#elif LJ_TARGET_PPC
#define CALLBACK_MCODE_HEAD 24
@@ -110,6 +117,28 @@ static void callback_mcode_init(global_State *g, uint8_t *page)
}
lua_assert(p - page <= CALLBACK_MCODE_SIZE);
}
+#elif LJ_TARGET_ARM
+static void callback_mcode_init(global_State *g, uint32_t *page)
+{
+ uint32_t *p = page;
+ void *target = (void *)lj_vm_ffi_callback;
+ MSize slot;
+ /* This must match with the saveregs macro in buildvm_arm.dasc. */
+ *p++ = ARMI_SUB|ARMF_D(RID_R12)|ARMF_N(RID_R12)|ARMF_M(RID_PC);
+ *p++ = ARMI_PUSH|ARMF_N(RID_SP)|RSET_RANGE(RID_R4,RID_R11+1)|RID2RSET(RID_LR);
+ *p++ = ARMI_SUB|ARMI_K12|ARMF_D(RID_R12)|ARMF_N(RID_R12)|CALLBACK_MCODE_HEAD;
+ *p++ = ARMI_STR|ARMI_LS_P|ARMI_LS_W|ARMF_D(RID_R12)|ARMF_N(RID_SP)|(CFRAME_SIZE-4*9);
+ *p++ = ARMI_LDR|ARMI_LS_P|ARMI_LS_U|ARMF_D(RID_R12)|ARMF_N(RID_PC);
+ *p++ = ARMI_LDR|ARMI_LS_P|ARMI_LS_U|ARMF_D(RID_PC)|ARMF_N(RID_PC);
+ *p++ = u32ptr(g);
+ *p++ = u32ptr(target);
+ for (slot = 0; slot < CALLBACK_MAX_SLOT; slot++) {
+ *p++ = ARMI_MOV|ARMF_D(RID_R12)|ARMF_M(RID_PC);
+ *p = ARMI_B | ((page-p-2) & 0x00ffffffu);
+ p++;
+ }
+ lua_assert(p - page <= CALLBACK_MCODE_SIZE);
+}
#elif LJ_TARGET_PPC
static void callback_mcode_init(global_State *g, uint32_t *page)
{
@@ -245,7 +274,12 @@ void lj_ccallback_mcode_free(CTState *cts)
#elif LJ_TARGET_ARM
#define CALLBACK_HANDLE_REGARG \
- UNUSED(ngpr); UNUSED(maxgpr); goto done; /* NYI */
+ if (n > 1) ngpr = (ngpr + 1u) & ~1u; /* Align to regpair. */ \
+ if (ngpr + n <= maxgpr) { \
+ sp = &cts->cb.gpr[ngpr]; \
+ ngpr += n; \
+ goto done; \
+ }
#elif LJ_TARGET_PPC
diff --git a/src/lj_errmsg.h b/src/lj_errmsg.h
index 4a4fec68..10c8395d 100644
--- a/src/lj_errmsg.h
+++ b/src/lj_errmsg.h
@@ -161,11 +161,7 @@ ERRDEF(FFI_BADIDX, LUA_QS " cannot be indexed")
ERRDEF(FFI_WRCONST, "attempt to write to constant location")
ERRDEF(FFI_NODECL, "missing declaration for symbol " LUA_QS)
ERRDEF(FFI_BADCBACK, "bad callback")
-#if LJ_TARGET_X86ORX64 || LJ_TARGET_PPC
ERRDEF(FFI_CBACKOV, "too many callbacks")
-#else
-ERRDEF(FFI_CBACKOV, "no support for callbacks (yet)")
-#endif
ERRDEF(FFI_NYIPACKBIT, "NYI: packed bit fields")
ERRDEF(FFI_NYICALL, "NYI: cannot call this C function (yet)")
#endif
diff --git a/src/lj_target_arm.h b/src/lj_target_arm.h
index 0f50cf9c..b4b26d4d 100644
--- a/src/lj_target_arm.h
+++ b/src/lj_target_arm.h
@@ -139,6 +139,7 @@ typedef enum ARMIns {
ARMI_S = 0x000100000,
ARMI_K12 = 0x02000000,
ARMI_KNEG = 0x00200000,
+ ARMI_LS_W = 0x00200000,
ARMI_LS_U = 0x00800000,
ARMI_LS_P = 0x01000000,
ARMI_LS_R = 0x02000000,
@@ -176,6 +177,7 @@ typedef enum ARMIns {
ARMI_STRB = 0xe4400000,
ARMI_STRH = 0xe00000b0,
ARMI_STRD = 0xe00000f0,
+ ARMI_PUSH = 0xe92d0000,
ARMI_B = 0xea000000,
ARMI_BL = 0xeb000000,