From 03c51fc578fce2f9133e1b5baab27fae0065da6f Mon Sep 17 00:00:00 2001 From: Mike Pall Date: Mon, 12 Dec 2011 23:12:25 +0100 Subject: [PATCH] FFI: Add callback support for ARM. --- src/buildvm_arm.dasc | 60 +- src/buildvm_arm.h | 1959 ++++++++++++++++++++++++++------------------------ src/lj_ccallback.c | 36 +- src/lj_errmsg.h | 4 - src/lj_target_arm.h | 2 + 5 files changed, 1121 insertions(+), 940 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, @@ -3142,9 +3149,73 @@ static const unsigned int build_actionlist[5706] = { 0x31a01003, 0xe8bd8010, 0x00000000, -0xe7f001f0, +0xe7f001f0, +0x00000000, +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, -0x0006009a, +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, 3131); + dasm_put(Dst, 3138); #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])); +#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, 3183); +#if LJ_HASFFI + 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<nomm), 1-vk, 1<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<nomm), 1<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<array), Dt6(->asize), -LJ_TNIL, Dt6(->metatable), Dt6(->nomm), 1<hmask), Dt5(->hash), Dt6(->node), DtB(->key), DtB(->val), DtB(->next), -LJ_TSTR, -LJ_TNIL, Dt6(->metatable), ~LJ_TNIL, Dt6(->nomm)); - dasm_put(Dst, 4562, 1<hmask), Dt5(->hash), Dt6(->node), DtB(->key), DtB(->val), DtB(->next), -LJ_TSTR, -LJ_TNIL, Dt6(->metatable), ~LJ_TNIL, Dt6(->nomm)); + dasm_put(Dst, 4633, 1<asize), Dt6(->array), -LJ_TNIL, Dt6(->metatable), Dt6(->nomm), 1<asize), Dt6(->array), -LJ_TNIL, Dt6(->metatable), Dt6(->nomm), 1<array), Dt6(->asize), -LJ_TNIL, Dt6(->marked), LJ_GC_BLACK, Dt6(->metatable), Dt6(->nomm), 1<marked), Dt6(->gclist), -LJ_TSTR); + dasm_put(Dst, 4683, -LJ_TTAB, -LJ_TISNUM, Dt6(->array), Dt6(->asize), -LJ_TNIL, Dt6(->marked), LJ_GC_BLACK, Dt6(->metatable), Dt6(->nomm), 1<marked), Dt6(->gclist), -LJ_TSTR); break; case BC_TSETS: - dasm_put(Dst, 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<metatable), Dt1(->base), Dt6(->nomm), 1<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<metatable), Dt1(->base), Dt6(->nomm), 1<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<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<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, -- 2.11.4.GIT