From 1b0d64600485c0fcf53b34c1cb263b720a27b5ea Mon Sep 17 00:00:00 2001 From: Mike Pall Date: Mon, 12 Dec 2011 23:11:31 +0100 Subject: [PATCH] FFI: Add callback support for PPC. --- src/buildvm_ppc.dasc | 92 +- src/buildvm_ppc.h | 2777 +++++++++++++++++++++++------------------- src/lj_ccallback.c | 58 +- src/lj_errmsg.h | 2 +- 4 files changed, 1635 insertions(+), 1294 deletions(-) diff --git a/src/buildvm_ppc.dasc b/src/buildvm_ppc.dasc index 1cbf3a74..c26f3924 100644 --- a/src/buildvm_ppc.dasc +++ b/src/buildvm_ppc.dasc @@ -98,11 +98,14 @@ | |.macro saveregs | stwu sp, -CFRAME_SPACE(sp) -| save_ 14; save_ 15; save_ 16; save_ 17; save_ 18; save_ 19 -| mflr r0; mfcr r12 -| save_ 20; save_ 21; save_ 22; save_ 23; save_ 24; save_ 25 -| stw r0, SAVE_LR; stw r12, SAVE_CR +| save_ 14; save_ 15; save_ 16 +| mflr r0 +| save_ 17; save_ 18; save_ 19; save_ 20; save_ 21; save_ 22 +| stw r0, SAVE_LR +| save_ 23; save_ 24; save_ 25 +| mfcr r0 | save_ 26; save_ 27; save_ 28; save_ 29; save_ 30; save_ 31 +| stw r0, SAVE_CR |.endmacro | |.macro restoreregs @@ -610,21 +613,29 @@ static void build_subroutines(BuildCtx *ctx) | mr RB, BASE | mr BASE, TMP2 // Restore caller BASE. | lwz LFUNC:TMP1, FRAME_FUNC(TMP2) - | cmplwi TMP0, 0 +#if LJ_HASFFI + | cmplwi TMP0, 1 +#endif | lwz PC, -16(RB) // Restore PC from [cont|PC]. - | beq >1 | subi TMP2, RD, 8 | lwz TMP1, LFUNC:TMP1->pc | stwx TISNIL, RA, TMP2 // Ensure one valid arg. +#if LJ_HASFFI + | ble >1 +#endif | lwz KBASE, PC2PROTO(k)(TMP1) | // BASE = base, RA = resultptr, RB = meta base | mtctr TMP0 | bctr // Jump to continuation. | - |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. | subi TMP1, RB, 16 | sub RC, TMP1, BASE | b ->vm_call_tail +#endif | |->cont_cat: // RA = resultptr, RB = meta base | lwz INS, -4(PC) @@ -2490,7 +2501,7 @@ static void build_subroutines(BuildCtx *ctx) | lwz r0, 36(sp) | fmul FARG1, FARG1, f15 | mtlr r0 - | fsub FARG1, f14, FARG1; + | fsub FARG1, f14, FARG1 | lfd f14, 16(sp); lfd f15, 24(sp); addi sp, sp, 32; blr |1: | b extern pow @@ -2526,6 +2537,71 @@ static void build_subroutines(BuildCtx *ctx) |//----------------------------------------------------------------------- |//-- FFI helper functions ----------------------------------------------- |//----------------------------------------------------------------------- + | + |// Handler for callback functions. Callback slot number in r11, g in r12. + |->vm_ffi_callback: +#if LJ_HASFFI + |.type CTSTATE, CTState, PC + | saveregs + | lwz CTSTATE, GL:r12->ctype_state + | addi DISPATCH, r12, GG_G2DISP + | stw r11, CTSTATE->cb.slot + | stw r3, CTSTATE->cb.gpr[0] + | stfd f1, CTSTATE->cb.fpr[0] + | stw r4, CTSTATE->cb.gpr[1] + | stfd f2, CTSTATE->cb.fpr[1] + | stw r5, CTSTATE->cb.gpr[2] + | stfd f3, CTSTATE->cb.fpr[2] + | stw r6, CTSTATE->cb.gpr[3] + | stfd f4, CTSTATE->cb.fpr[3] + | stw r7, CTSTATE->cb.gpr[4] + | stfd f5, CTSTATE->cb.fpr[4] + | stw r8, CTSTATE->cb.gpr[5] + | stfd f6, CTSTATE->cb.fpr[5] + | stw r9, CTSTATE->cb.gpr[6] + | stfd f7, CTSTATE->cb.fpr[6] + | stw r10, CTSTATE->cb.gpr[7] + | stfd f8, CTSTATE->cb.fpr[7] + | addi TMP0, sp, CFRAME_SPACE+8 + | stw TMP0, CTSTATE->cb.stack + | mr CARG1, CTSTATE + | stw CTSTATE, SAVE_PC // Any value outside of bytecode is ok. + | mr CARG2, sp + | bl extern lj_ccallback_enter // (CTState *cts, void *cf) + | // Returns lua_State *. + | lwz BASE, L:CRET1->base + | li TISNUM, LJ_TISNUM // Setup type comparison constants. + | lwz RC, L:CRET1->top + | lus TMP3, 0x59c0 // TOBIT = 2^52 + 2^51 (float). + | li ZERO, 0 + | mr L, CRET1 + | stw TMP3, TMPD + | lwz LFUNC:RB, FRAME_FUNC(BASE) + | ori TMP3, TMP3, 0x0004 // TONUM = 2^52 + 2^51 + 2^31 (float). + | li TISNIL, LJ_TNIL + | li_vmstate INTERP + | lfs TOBIT, TMPD + | stw TMP3, TMPD + | sub RC, RC, BASE + | st_vmstate + | lfs TONUM, TMPD + | ins_callt +#endif + | + |->cont_ffi_callback: // Return from FFI callback. +#if LJ_HASFFI + | lwz CTSTATE, DISPATCH_GL(ctype_state)(DISPATCH) + | stw BASE, L->base + | stw RB, L->top + | stw L, CTSTATE->L + | mr CARG1, CTSTATE + | mr CARG2, RA + | bl extern lj_ccallback_leave // (CTState *cts, TValue *o) + | lwz CRET1, CTSTATE->cb.gpr[0] + | lfd FARG1, CTSTATE->cb.fpr[0] + | lwz CRET2, CTSTATE->cb.gpr[1] + | b ->vm_leave_unw +#endif | |->vm_ffi_call: // Call C function via FFI. | // Caveat: needs special frame unwinding, see below. diff --git a/src/buildvm_ppc.h b/src/buildvm_ppc.h index 80d713c9..b42b5faa 100644 --- a/src/buildvm_ppc.h +++ b/src/buildvm_ppc.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[7580] = { +static const unsigned int build_actionlist[7771] = { 0x00010001, 0x00060014, 0x72000000, @@ -287,6 +287,7 @@ static const unsigned int build_actionlist[7580] = { 0x00098200, 0xda010000, 0x00098200, +0x7c0802a6, 0x92210000, 0x00098200, 0x00000000, @@ -300,8 +301,6 @@ static const unsigned int build_actionlist[7580] = { 0x00098200, 0xda610000, 0x00098200, -0x7c0802a6, -0x7d800026, 0x92810000, 0x00098200, 0xda810000, @@ -314,6 +313,7 @@ static const unsigned int build_actionlist[7580] = { 0x00098200, 0xdac10000, 0x00098200, +0x90010114, 0x92e10000, 0x00098200, 0xdae10000, @@ -326,8 +326,7 @@ static const unsigned int build_actionlist[7580] = { 0x00098200, 0xdb210000, 0x00098200, -0x90010114, -0x91810034, +0x7c000026, 0x93410000, 0x00098200, 0xdb410000, @@ -353,6 +352,7 @@ static const unsigned int build_actionlist[7580] = { 0x00098200, 0xdbe10000, 0x00098200, +0x90010034, 0x7c721b78, 0x82320000, 0x00098200, @@ -424,6 +424,7 @@ static const unsigned int build_actionlist[7580] = { 0x00098200, 0xda010000, 0x00098200, +0x7c0802a6, 0x92210000, 0x00098200, 0xda210000, @@ -436,8 +437,6 @@ static const unsigned int build_actionlist[7580] = { 0x00098200, 0xda610000, 0x00098200, -0x7c0802a6, -0x7d800026, 0x92810000, 0x00098200, 0xda810000, @@ -450,6 +449,7 @@ static const unsigned int build_actionlist[7580] = { 0x00098200, 0xdac10000, 0x00098200, +0x90010114, 0x92e10000, 0x00098200, 0x00000000, @@ -463,8 +463,7 @@ static const unsigned int build_actionlist[7580] = { 0x00098200, 0xdb210000, 0x00098200, -0x90010114, -0x91810034, +0x7c000026, 0x93410000, 0x00098200, 0xdb410000, @@ -489,6 +488,7 @@ static const unsigned int build_actionlist[7580] = { 0x00098200, 0xdbe10000, 0x00098200, +0x90010034, 0x3a000000, 0x00098200, 0x90c10030, @@ -509,6 +509,7 @@ static const unsigned int build_actionlist[7580] = { 0x00098200, 0xda010000, 0x00098200, +0x7c0802a6, 0x92210000, 0x00098200, 0xda210000, @@ -521,8 +522,6 @@ static const unsigned int build_actionlist[7580] = { 0x00098200, 0xda610000, 0x00098200, -0x7c0802a6, -0x7d800026, 0x92810000, 0x00098200, 0xda810000, @@ -535,6 +534,7 @@ static const unsigned int build_actionlist[7580] = { 0x00098200, 0xdac10000, 0x00098200, +0x90010114, 0x92e10000, 0x00098200, 0xdae10000, @@ -548,8 +548,7 @@ static const unsigned int build_actionlist[7580] = { 0xdb210000, 0x00098200, 0x00000000, -0x90010114, -0x91810034, +0x7c000026, 0x93410000, 0x00098200, 0xdb410000, @@ -574,6 +573,7 @@ static const unsigned int build_actionlist[7580] = { 0x00098200, 0xdbe10000, 0x00098200, +0x90010034, 0x3a000000, 0x00098200, 0x0006000b, @@ -650,6 +650,7 @@ static const unsigned int build_actionlist[7580] = { 0x00098200, 0xda010000, 0x00098200, +0x7c0802a6, 0x92210000, 0x00098200, 0xda210000, @@ -662,8 +663,6 @@ static const unsigned int build_actionlist[7580] = { 0x00098200, 0xda610000, 0x00098200, -0x7c0802a6, -0x7d800026, 0x92810000, 0x00098200, 0x00000000, @@ -677,6 +676,7 @@ static const unsigned int build_actionlist[7580] = { 0x00098200, 0xdac10000, 0x00098200, +0x90010114, 0x92e10000, 0x00098200, 0xdae10000, @@ -689,8 +689,7 @@ static const unsigned int build_actionlist[7580] = { 0x00098200, 0xdb210000, 0x00098200, -0x90010114, -0x91810034, +0x7c000026, 0x93410000, 0x00098200, 0xdb410000, @@ -716,6 +715,7 @@ static const unsigned int build_actionlist[7580] = { 0x00000000, 0xdbe10000, 0x00098200, +0x90010034, 0x7c721b78, 0x80030000, 0x00098200, @@ -750,24 +750,32 @@ static const unsigned int build_actionlist[7580] = { 0x7dca7378, 0x7d2e4b78, 0x8109fffc, -0x28000000, +0x00000000, +0x28000001, +0x00000000, 0x820afff0, -0x41820000, -0x00050801, 0x392cfff8, 0x81080000, 0x00098200, 0x7ef4492e, +0x00000000, +0x40810000, +0x00050801, +0x00000000, 0x81e80000, 0x00098200, 0x7c0903a6, 0x4e800420, +0x00000000, 0x0006000b, +0x41820000, +0x00050828, 0x390afff0, 0x7d6e4050, 0x48000000, -0x00050028, -0x00060029, +0x00050029, +0x00000000, +0x0006002a, 0x80f0fffc, 0x388afff0, 0x54f55d78, @@ -780,14 +788,13 @@ static const unsigned int build_actionlist[7580] = { 0x54f4dd78, 0xd8040000, 0x40a20000, -0x0005082a, +0x0005082b, 0x7c0ea5ae, 0x48000000, -0x0005002b, -0x0006002c, +0x0005002c, +0x0006002d, 0x38b10000, 0x00098200, -0x00000000, 0x38000000, 0x00098200, 0x54ea5d78, @@ -796,7 +803,7 @@ static const unsigned int build_actionlist[7580] = { 0x90050000, 0x48000000, 0x00050001, -0x0006002d, +0x0006002e, 0x38910000, 0x00098200, 0x38000000, @@ -811,7 +818,7 @@ static const unsigned int build_actionlist[7580] = { 0x91050000, 0x48000000, 0x00050001, -0x0006002e, +0x0006002f, 0x00000000, 0x9001000c, 0xc8010008, @@ -829,7 +836,7 @@ static const unsigned int build_actionlist[7580] = { 0x00000000, 0x48000000, 0x00050001, -0x0006002f, +0x00060030, 0x54ea5d78, 0x54eb9d78, 0x7c8e5214, @@ -867,7 +874,7 @@ static const unsigned int build_actionlist[7580] = { 0x39600010, 0x48000000, 0x00050026, -0x00060030, +0x00060031, 0x38b10000, 0x00098200, 0x38000000, @@ -878,7 +885,7 @@ static const unsigned int build_actionlist[7580] = { 0x90050000, 0x48000000, 0x00050001, -0x00060031, +0x00060032, 0x38910000, 0x00098200, 0x38000000, @@ -893,7 +900,7 @@ static const unsigned int build_actionlist[7580] = { 0x91050000, 0x48000000, 0x00050001, -0x00060032, +0x00060033, 0x00000000, 0x9001000c, 0xc8010008, @@ -911,7 +918,7 @@ static const unsigned int build_actionlist[7580] = { 0x00000000, 0x48000000, 0x00050001, -0x00060033, +0x00060034, 0x54ea5d78, 0x54eb9d78, 0x7c8e5214, @@ -950,7 +957,7 @@ static const unsigned int build_actionlist[7580] = { 0xd80e0010, 0x48000000, 0x00050026, -0x00060034, +0x00060035, 0x7e439378, 0x3a10fffc, 0x00000000, @@ -972,7 +979,7 @@ static const unsigned int build_actionlist[7580] = { 0x0006000d, 0x28030001, 0x41810000, -0x00050835, +0x00050836, 0x20630000, 0x0006000e, 0x80f00000, @@ -982,7 +989,7 @@ static const unsigned int build_actionlist[7580] = { 0x00098200, 0x7d291838, 0x7e104a14, -0x0006002b, +0x0006002c, 0x80f00000, 0x3a100004, 0x54e815ba, @@ -993,14 +1000,14 @@ static const unsigned int build_actionlist[7580] = { 0x54f4dd78, 0x54eb9d78, 0x4e800420, -0x00060036, +0x00060037, 0x80f0fffc, 0xc8140000, 0x54e8dd78, 0x7c0e45ae, 0x48000000, -0x0005002b, -0x00060037, +0x0005002c, +0x00060038, 0x80140000, 0x20000000, 0x00098200, @@ -1008,14 +1015,14 @@ static const unsigned int build_actionlist[7580] = { 0x7c6318f8, 0x48000000, 0x0005000e, -0x00060038, +0x00060039, 0x80140000, 0x20000000, 0x00098200, 0x7c631910, 0x48000000, 0x0005000e, -0x00060039, +0x0006003a, 0x3a10fffc, 0x91d20000, 0x00098200, @@ -1025,7 +1032,7 @@ static const unsigned int build_actionlist[7580] = { 0x00030004, 0x48000000, 0x0005000d, -0x0006003a, +0x0006003b, 0x00000000, 0x7ce43b78, 0x3a10fffc, @@ -1038,37 +1045,37 @@ static const unsigned int build_actionlist[7580] = { 0x48000000, 0x0005000d, 0x00000000, -0x0006003b, +0x0006003c, 0x7caf5a14, 0x7cce5214, 0x48000000, 0x00050001, -0x0006003c, +0x0006003d, 0x00000000, 0x7d655b78, 0x7d465378, 0x48000000, 0x00050001, 0x00000000, -0x0006003d, +0x0006003e, 0x7d856378, 0x7d866378, 0x48000000, 0x00050001, -0x0006003e, +0x0006003f, 0x7cae5214, 0x7ccf5a14, 0x48000000, 0x00050001, -0x0006003f, +0x00060040, 0x7cae5214, 0x7cce5a14, 0x00000000, 0x48000000, 0x00050001, 0x00000000, -0x00060040, 0x00060041, +0x00060042, 0x00000000, 0x7d455378, 0x7d665b78, @@ -1084,8 +1091,8 @@ static const unsigned int build_actionlist[7580] = { 0x00030006, 0x28030000, 0x41820000, -0x0005082b, -0x00060035, +0x0005082c, +0x00060036, 0x7d0e1850, 0x9203fff0, 0x7dc97378, @@ -1095,7 +1102,7 @@ static const unsigned int build_actionlist[7580] = { 0x39600010, 0x48000000, 0x00050024, -0x00060042, +0x00060043, 0x00000000, 0x7c751b78, 0x00000000, @@ -1109,13 +1116,13 @@ static const unsigned int build_actionlist[7580] = { 0x00000000, 0x28030000, 0x40820000, -0x00050835, +0x00050836, 0x7ea3ab78, 0x48000000, -0x00050043, +0x00050044, 0x00000000, 0x48000000, -0x00050035, +0x00050036, 0x00000000, 0x00060025, 0x7e439378, @@ -1140,7 +1147,7 @@ static const unsigned int build_actionlist[7580] = { 0x7e947214, 0x7c0903a6, 0x4e800420, -0x00060044, +0x00060045, 0x7e439378, 0x91d20000, 0x00098200, @@ -1154,8 +1161,8 @@ static const unsigned int build_actionlist[7580] = { 0x39750008, 0x8154fffc, 0x48000000, -0x00050045, -0x00060046, +0x00050046, +0x00060047, 0x7e439378, 0x91d20000, 0x00098200, @@ -1179,24 +1186,24 @@ static const unsigned int build_actionlist[7580] = { 0x00000000, 0x48000000, 0x00070000, -0x00060047, +0x00060048, 0x280b0008, 0x80ae0000, 0x806e0004, 0x41800000, -0x00050848, +0x00050849, 0x39000000, 0x00098200, 0x3a8efff8, 0x7c854040, 0x820efff8, 0x40840000, -0x00050848, +0x00050849, 0x90b40000, 0x398b0008, 0x90740004, 0x41820000, -0x00050849, +0x0005084a, 0x39000008, 0x396bfff8, 0x0006000b, @@ -1207,12 +1214,12 @@ static const unsigned int build_actionlist[7580] = { 0x40a20000, 0x0005080b, 0x48000000, -0x00050049, -0x0006004a, +0x0005004a, +0x0006004b, 0x280b0008, 0x806e0000, 0x41800000, -0x00050848, +0x00050849, 0x7c161810, 0x7d231910, 0x7d280338, @@ -1224,13 +1231,13 @@ static const unsigned int build_actionlist[7580] = { 0x00098200, 0x7c2944ae, 0x48000000, -0x0005004b, -0x0006004c, +0x0005004c, +0x0006004d, 0x280b0008, 0x80ae0000, 0x806e0004, 0x41800000, -0x00050848, +0x00050849, 0x2c050000, 0x00098200, 0x40820000, @@ -1246,7 +1253,7 @@ static const unsigned int build_actionlist[7580] = { 0x81710000, 0x00098200, 0x41820000, -0x0005084d, +0x0005084e, 0x80030000, 0x00098200, 0x38a00000, @@ -1283,7 +1290,7 @@ static const unsigned int build_actionlist[7580] = { 0x00098200, 0x28090000, 0x41820000, -0x0005084d, +0x0005084e, 0x48000000, 0x0005000d, 0x0006000f, @@ -1291,11 +1298,11 @@ static const unsigned int build_actionlist[7580] = { 0x2c040000, 0x00098200, 0x41820000, -0x0005084d, +0x0005084e, 0x7c852378, 0x7d034378, 0x48000000, -0x0005004d, +0x0005004e, 0x00060010, 0x2c050000, 0x00098200, @@ -1313,35 +1320,35 @@ static const unsigned int build_actionlist[7580] = { 0x7c69402e, 0x48000000, 0x0005000c, -0x0006004e, +0x0006004f, 0x280b0010, 0x80ae0000, 0x80ce0008, 0x806e0004, 0x808e000c, 0x41800000, -0x00050848, +0x00050849, 0x2c050000, 0x00098200, 0x40820000, -0x00050848, +0x00050849, 0x81030000, 0x00098200, 0x2c060000, 0x00098200, 0x40820000, -0x00050848, +0x00050849, 0x28080000, 0x88c30000, 0x00098200, 0x40820000, -0x00050848, +0x00050849, 0x70c00000, 0x00090200, 0x90830000, 0x00098200, 0x41820000, -0x0005084d, +0x0005084e, 0x00000000, 0x80110000, 0x00098200, @@ -1353,45 +1360,45 @@ static const unsigned int build_actionlist[7580] = { 0x90030000, 0x00098200, 0x48000000, -0x0005004d, -0x0006004f, +0x0005004e, +0x00060050, 0x280b0008, 0x80ce0000, 0x808e0004, 0x41800000, -0x00050848, +0x00050849, 0x2c060000, 0x00098200, 0x40820000, -0x00050848, +0x00050849, 0x38ae0008, 0x7e439378, 0x48000001, 0x0003000a, 0xc8230000, 0x48000000, -0x0005004b, -0x00060050, +0x0005004c, +0x00060051, 0x280b0008, 0x806e0000, 0xc82e0000, 0x40820000, -0x00050848, +0x00050849, 0x7c03b040, 0x41810000, -0x00050848, +0x00050849, 0x48000000, -0x0005004b, -0x00060051, +0x0005004c, +0x00060052, 0x280b0008, 0x80ae0000, 0x806e0004, 0x41800000, -0x00050848, +0x00050849, 0x2c050000, 0x00098200, 0x41820000, -0x0005084d, +0x0005084e, 0x80110000, 0x00098200, 0x7c05b040, @@ -1401,7 +1408,7 @@ static const unsigned int build_actionlist[7580] = { 0x4c413342, 0x92010020, 0x41820000, -0x00050848, +0x00050849, 0x00000000, 0x80110000, 0x00098200, @@ -1409,7 +1416,7 @@ static const unsigned int build_actionlist[7580] = { 0x00098200, 0x7c004040, 0x40800001, -0x00050852, +0x00050853, 0x7e439378, 0x7dc47378, 0x00000000, @@ -1422,19 +1429,19 @@ static const unsigned int build_actionlist[7580] = { 0x38a00000, 0x00098200, 0x48000000, -0x0005004d, -0x00060053, +0x0005004e, +0x00060054, 0x280b0008, 0x806e0000, 0x808e0004, 0x41800000, -0x00050848, +0x00050849, 0x7eee592e, 0x2c030000, 0x00098200, 0x820efff8, 0x40820000, -0x00050848, +0x00050849, 0x91d20000, 0x00098200, 0x7e439378, @@ -1448,7 +1455,7 @@ static const unsigned int build_actionlist[7580] = { 0x38a00000, 0x00098200, 0x41820000, -0x0005084d, +0x0005084e, 0xc80e0008, 0x3a8efff8, 0xc82e0010, @@ -1457,18 +1464,18 @@ static const unsigned int build_actionlist[7580] = { 0x00098200, 0xd8340008, 0x48000000, -0x00050049, -0x00060054, +0x0005004a, +0x00060055, 0x280b0008, 0x80ae0000, 0x806e0004, 0x41800000, -0x00050848, +0x00050849, 0x2c050000, 0x00098200, 0x820efff8, 0x40820000, -0x00050848, +0x00050849, 0x00000000, 0x81230000, 0x00098200, @@ -1477,7 +1484,7 @@ static const unsigned int build_actionlist[7580] = { 0x28090000, 0x3a8efff8, 0x40820000, -0x00050848, +0x00050849, 0x00000000, 0xc80a0000, 0x00098200, @@ -1488,8 +1495,8 @@ static const unsigned int build_actionlist[7580] = { 0x00098200, 0xd8140000, 0x48000000, -0x00050049, -0x00060055, +0x0005004a, +0x00060056, 0x280b0010, 0x80ae0000, 0x806e0004, @@ -1500,24 +1507,24 @@ static const unsigned int build_actionlist[7580] = { 0xc84e0008, 0x00000000, 0x41800000, -0x00050848, +0x00050849, 0x2c050000, 0x00098200, 0x7c86b040, 0x820efff8, 0x00000000, 0x40820000, -0x00050848, +0x00050849, 0x40860000, -0x00050848, +0x00050849, 0x00000000, 0x3c003ff0, 0x93010014, 0x40820000, -0x00050848, +0x00050849, 0x90010010, 0x40840000, -0x00050848, +0x00050849, 0xc8210010, 0xfc00101e, 0xd8010010, @@ -1553,12 +1560,12 @@ static const unsigned int build_actionlist[7580] = { 0x39800000, 0x00098200, 0x41820000, -0x00050849, +0x0005084a, 0x39800000, 0x00098200, 0xd8140008, 0x48000000, -0x00050049, +0x0005004a, 0x0006000c, 0x80030000, 0x00098200, @@ -1566,7 +1573,7 @@ static const unsigned int build_actionlist[7580] = { 0x39800000, 0x00098200, 0x41820000, -0x00050849, +0x0005084a, 0x7d244b78, 0x48000001, 0x0003000e, @@ -1574,22 +1581,22 @@ static const unsigned int build_actionlist[7580] = { 0x39800000, 0x00098200, 0x41820000, -0x00050849, +0x0005084a, 0x81230000, 0xc8030000, 0x48000000, 0x0005000b, -0x00060056, +0x00060057, 0x280b0008, 0x80ae0000, 0x806e0004, 0x41800000, -0x00050848, +0x00050849, 0x2c050000, 0x00098200, 0x820efff8, 0x40820000, -0x00050848, +0x00050849, 0x00000000, 0x81230000, 0x00098200, @@ -1598,7 +1605,7 @@ static const unsigned int build_actionlist[7580] = { 0x28090000, 0x3a8efff8, 0x40820000, -0x00050848, +0x00050849, 0x00000000, 0xc80a0000, 0x00098200, @@ -1613,13 +1620,13 @@ static const unsigned int build_actionlist[7580] = { 0x00098200, 0xd8140000, 0x48000000, -0x00050049, -0x00060057, +0x0005004a, +0x00060058, 0x280b0008, 0x88d10000, 0x00098200, 0x41800000, -0x00050848, +0x00050849, 0x7dc97378, 0x39ce0008, 0x54c607fe, @@ -1629,21 +1636,21 @@ static const unsigned int build_actionlist[7580] = { 0x00098200, 0x48000000, 0x00050024, -0x00060058, +0x00060059, 0x280b0010, 0x80ce0008, 0xc84e0008, 0x80ae0000, 0xc82e0000, 0x41800000, -0x00050848, +0x00050849, 0x89110000, 0x00098200, 0x7dc97378, 0x2c060000, 0x00098200, 0x40820000, -0x00050848, +0x00050849, 0x39ce0010, 0x550807fe, 0x000900ab, @@ -1654,16 +1661,16 @@ static const unsigned int build_actionlist[7580] = { 0x00098200, 0x48000000, 0x00050024, -0x00060059, +0x0006005a, 0x280b0008, 0x80ae0000, 0x806e0004, 0x41800000, -0x00050848, +0x00050849, 0x2c050000, 0x00098200, 0x40820000, -0x00050848, +0x00050849, 0x88030000, 0x00098200, 0x81030000, @@ -1690,7 +1697,7 @@ static const unsigned int build_actionlist[7580] = { 0x91d20000, 0x00098200, 0x41980000, -0x00050848, +0x00050849, 0x0006000b, 0x39ce0008, 0x396bfff8, @@ -1792,7 +1799,7 @@ static const unsigned int build_actionlist[7580] = { 0x38600000, 0x48000000, 0x0005000e, -0x0006005a, +0x0006005b, 0x00000000, 0x806a0000, 0x00098200, @@ -1821,7 +1828,7 @@ static const unsigned int build_actionlist[7580] = { 0x91d20000, 0x00098200, 0x41980000, -0x00050848, +0x00050849, 0x0006000b, 0x91230000, 0x00098200, @@ -1906,7 +1913,7 @@ static const unsigned int build_actionlist[7580] = { 0x38600000, 0x48000000, 0x0005000e, -0x0006005b, +0x0006005c, 0x80120000, 0x00098200, 0x00000000, @@ -1920,19 +1927,19 @@ static const unsigned int build_actionlist[7580] = { 0x38600000, 0x00098200, 0x41820000, -0x00050848, +0x00050849, 0x93120000, 0x00098200, 0x98720000, 0x00098200, 0x48000000, 0x0005001a, -0x0006005c, +0x0006005d, 0x280b0008, 0x80ae0000, 0x806e0004, 0x41800000, -0x00050848, +0x00050849, 0x7c05b040, 0x00000000, 0x40820000, @@ -1942,32 +1949,32 @@ static const unsigned int build_actionlist[7580] = { 0x7c684851, 0x41800000, 0x00050801, -0x0006005d, +0x0006005e, 0x820efff8, 0x3a8efff8, 0x92cefff8, 0x906efffc, 0x48000000, -0x0005005e, +0x0005005f, 0x0006000b, 0x3ca041e0, 0x38600000, 0x48000000, -0x0005004d, +0x0005004e, 0x0006000c, 0x00000000, 0x40800000, -0x00050848, +0x00050849, 0x54a5007e, -0x0006004d, +0x0006004e, 0x820efff8, 0x90aefff8, 0x3a8efff8, 0x906efffc, -0x0006005e, +0x0006005f, 0x39800000, 0x00098200, -0x00060049, +0x0006004a, 0x72000000, 0x00090200, 0x7d936378, @@ -1998,18 +2005,18 @@ static const unsigned int build_actionlist[7580] = { 0x48000000, 0x0005000f, 0x00000000, -0x0006005f, +0x00060060, 0x280b0008, 0x80ae0000, 0x806e0004, 0x41800000, -0x00050848, +0x00050849, 0x7c05b040, 0x41a20000, -0x0005084d, +0x0005084e, 0x54a9657e, 0x40800000, -0x00050848, +0x00050849, 0x3529fc01, 0x2889001f, 0x2009001f, @@ -2037,7 +2044,7 @@ static const unsigned int build_actionlist[7580] = { 0x7c634a78, 0x7c691850, 0x48000000, -0x0005005d, +0x0005005e, 0x0006000d, 0x7d252a14, 0x7ca8fe70, @@ -2046,7 +2053,7 @@ static const unsigned int build_actionlist[7580] = { 0x21280000, 0x7c631910, 0x48000000, -0x0005005d, +0x0005005e, 0x0006000e, 0x6d088000, 0x7ca9fe70, @@ -2055,25 +2062,25 @@ static const unsigned int build_actionlist[7580] = { 0x4c423202, 0x3c608000, 0x41a20000, -0x0005085d, +0x0005085e, 0x0006000f, 0xc82e0000, 0x48000001, 0x00030010, 0x48000000, -0x0005004b, -0x00060060, +0x0005004c, +0x00060061, 0x280b0008, 0x80ae0000, 0x806e0004, 0x41800000, -0x00050848, +0x00050849, 0x7c05b040, 0x41a20000, -0x0005084d, +0x0005084e, 0x54a9657e, 0x40800000, -0x00050848, +0x00050849, 0x3529fc01, 0x2889001f, 0x2009001f, @@ -2102,14 +2109,14 @@ static const unsigned int build_actionlist[7580] = { 0x7c634a78, 0x7c691850, 0x40830000, -0x0005085d, +0x0005085e, 0x7c000400, 0x40a10000, -0x0005085d, +0x0005085e, 0x3ca041e0, 0x38600000, 0x48000000, -0x0005004d, +0x0005004e, 0x0006000d, 0x7d252a14, 0x7ca8fe70, @@ -2118,7 +2125,7 @@ static const unsigned int build_actionlist[7580] = { 0x3128ffff, 0x7c694110, 0x48000000, -0x0005005d, +0x0005005e, 0x0006000e, 0x6d088000, 0x7ca9fe70, @@ -2126,213 +2133,213 @@ static const unsigned int build_actionlist[7580] = { 0x4c423202, 0x3c608000, 0x41a20000, -0x0005085d, +0x0005085e, 0x0006000f, 0xc82e0000, 0x48000001, 0x00030011, 0x48000000, -0x0005004b, +0x0005004c, 0x00000000, -0x0006005f, -0x280b0008, -0x80ae0000, -0xc82e0000, -0x41800000, -0x00050848, -0x7c05b040, -0x40800000, -0x00050848, -0x48000001, -0x00030010, -0x48000000, -0x0005004b, 0x00060060, 0x280b0008, 0x80ae0000, 0xc82e0000, 0x41800000, -0x00050848, +0x00050849, 0x7c05b040, 0x40800000, -0x00050848, +0x00050849, 0x48000001, -0x00030011, +0x00030010, 0x48000000, -0x0005004b, -0x00000000, +0x0005004c, 0x00060061, 0x280b0008, 0x80ae0000, 0xc82e0000, 0x41800000, -0x00050848, +0x00050849, 0x7c05b040, 0x40800000, -0x00050848, +0x00050849, 0x48000001, -0x00030012, +0x00030011, 0x48000000, -0x0005004b, +0x0005004c, +0x00000000, 0x00060062, 0x280b0008, 0x80ae0000, 0xc82e0000, 0x41800000, -0x00050848, +0x00050849, 0x7c05b040, 0x40800000, -0x00050848, +0x00050849, 0x48000001, -0x00030013, +0x00030012, 0x48000000, -0x0005004b, +0x0005004c, 0x00060063, 0x280b0008, 0x80ae0000, 0xc82e0000, 0x41800000, -0x00050848, +0x00050849, 0x7c05b040, 0x40800000, -0x00050848, +0x00050849, 0x48000001, -0x00030014, +0x00030013, 0x48000000, -0x0005004b, +0x0005004c, 0x00060064, 0x280b0008, 0x80ae0000, 0xc82e0000, 0x41800000, -0x00050848, +0x00050849, 0x7c05b040, 0x40800000, -0x00050848, +0x00050849, 0x48000001, -0x00030015, +0x00030014, 0x48000000, -0x0005004b, +0x0005004c, 0x00060065, 0x280b0008, 0x80ae0000, 0xc82e0000, 0x41800000, -0x00050848, -0x00000000, +0x00050849, 0x7c05b040, 0x40800000, -0x00050848, +0x00050849, 0x48000001, -0x00030016, +0x00030015, 0x48000000, -0x0005004b, +0x0005004c, 0x00060066, 0x280b0008, 0x80ae0000, 0xc82e0000, 0x41800000, -0x00050848, +0x00050849, +0x00000000, 0x7c05b040, 0x40800000, -0x00050848, +0x00050849, 0x48000001, -0x00030017, +0x00030016, 0x48000000, -0x0005004b, +0x0005004c, 0x00060067, 0x280b0008, 0x80ae0000, 0xc82e0000, 0x41800000, -0x00050848, +0x00050849, 0x7c05b040, 0x40800000, -0x00050848, +0x00050849, 0x48000001, -0x00030018, +0x00030017, 0x48000000, -0x0005004b, +0x0005004c, 0x00060068, 0x280b0008, 0x80ae0000, 0xc82e0000, 0x41800000, -0x00050848, +0x00050849, 0x7c05b040, 0x40800000, -0x00050848, +0x00050849, 0x48000001, -0x00030019, +0x00030018, 0x48000000, -0x0005004b, +0x0005004c, 0x00060069, 0x280b0008, 0x80ae0000, 0xc82e0000, 0x41800000, -0x00050848, +0x00050849, 0x7c05b040, 0x40800000, -0x00050848, +0x00050849, 0x48000001, -0x0003001a, -0x00000000, +0x00030019, 0x48000000, -0x0005004b, +0x0005004c, 0x0006006a, 0x280b0008, 0x80ae0000, 0xc82e0000, 0x41800000, -0x00050848, +0x00050849, 0x7c05b040, 0x40800000, -0x00050848, +0x00050849, 0x48000001, -0x0003001b, +0x0003001a, +0x00000000, 0x48000000, -0x0005004b, +0x0005004c, 0x0006006b, 0x280b0008, 0x80ae0000, 0xc82e0000, 0x41800000, -0x00050848, +0x00050849, 0x7c05b040, 0x40800000, -0x00050848, +0x00050849, 0x48000001, -0x0003001c, +0x0003001b, 0x48000000, -0x0005004b, +0x0005004c, 0x0006006c, 0x280b0008, 0x80ae0000, 0xc82e0000, 0x41800000, -0x00050848, +0x00050849, 0x7c05b040, 0x40800000, -0x00050848, +0x00050849, 0x48000001, -0x0003001d, +0x0003001c, 0x48000000, -0x0005004b, +0x0005004c, 0x0006006d, 0x280b0008, 0x80ae0000, 0xc82e0000, 0x41800000, -0x00050848, +0x00050849, 0x7c05b040, 0x40800000, -0x00050848, +0x00050849, +0x48000001, +0x0003001d, +0x48000000, +0x0005004c, +0x0006006e, +0x280b0008, +0x80ae0000, +0xc82e0000, +0x41800000, +0x00050849, +0x7c05b040, +0x40800000, +0x00050849, 0x48000001, 0x0003001e, 0x48000000, -0x0005004b, -0x0006006e, +0x0005004c, +0x0006006f, 0x00000000, 0x280b0010, 0x80ae0000, @@ -2340,35 +2347,17 @@ static const unsigned int build_actionlist[7580] = { 0x80ce0008, 0xc84e0008, 0x41800000, -0x00050848, +0x00050849, 0x7c05b040, 0x40800000, -0x00050848, +0x00050849, 0x7c06b040, 0x40800000, -0x00050848, +0x00050849, 0x48000001, 0x0003001f, 0x48000000, -0x0005004b, -0x0006006f, -0x280b0010, -0x80ae0000, -0xc82e0000, -0x80ce0008, -0xc84e0008, -0x41800000, -0x00050848, -0x7c05b040, -0x40800000, -0x00050848, -0x7c06b040, -0x40800000, -0x00050848, -0x48000001, -0x00030020, -0x48000000, -0x0005004b, +0x0005004c, 0x00060070, 0x280b0010, 0x80ae0000, @@ -2376,63 +2365,81 @@ static const unsigned int build_actionlist[7580] = { 0x80ce0008, 0xc84e0008, 0x41800000, -0x00050848, +0x00050849, 0x7c05b040, 0x40800000, -0x00050848, +0x00050849, 0x7c06b040, 0x40800000, -0x00050848, +0x00050849, 0x48000001, -0x00030021, +0x00030020, 0x48000000, -0x0005004b, +0x0005004c, 0x00060071, -0x00060072, -0x280b0008, -0x80ae0000, -0xc82e0000, -0x41800000, -0x00050848, -0x7c05b040, -0x40800000, -0x00050848, -0xc84a0000, -0x00098200, -0x00000000, -0xfc2100b2, -0x48000000, -0x0005004b, -0x00000000, -0x00060073, -0x280b0010, -0x80ae0000, -0xc82e0000, -0x80ce0008, -0x806e000c, -0x41800000, -0x00050848, -0x7c05b040, -0x40800000, -0x00050848, -0x7c06b040, -0x40820000, -0x00050848, -0x00000000, -0x00060073, 0x280b0010, 0x80ae0000, 0xc82e0000, 0x80ce0008, 0xc84e0008, 0x41800000, -0x00050848, +0x00050849, 0x7c05b040, 0x40800000, -0x00050848, +0x00050849, 0x7c06b040, 0x40800000, -0x00050848, +0x00050849, +0x48000001, +0x00030021, +0x48000000, +0x0005004c, +0x00060072, +0x00060073, +0x280b0008, +0x80ae0000, +0xc82e0000, +0x41800000, +0x00050849, +0x7c05b040, +0x40800000, +0x00050849, +0xc84a0000, +0x00098200, +0x00000000, +0xfc2100b2, +0x48000000, +0x0005004c, +0x00000000, +0x00060074, +0x280b0010, +0x80ae0000, +0xc82e0000, +0x80ce0008, +0x806e000c, +0x41800000, +0x00050849, +0x7c05b040, +0x40800000, +0x00050849, +0x7c06b040, +0x40820000, +0x00050849, +0x00000000, +0x00060074, +0x280b0010, +0x80ae0000, +0xc82e0000, +0x80ce0008, +0xc84e0008, +0x41800000, +0x00050849, +0x7c05b040, +0x40800000, +0x00050849, +0x7c06b040, +0x40800000, +0x00050849, 0xfc40101e, 0xd8410010, 0x80610014, @@ -2440,16 +2447,16 @@ static const unsigned int build_actionlist[7580] = { 0x48000001, 0x00030022, 0x48000000, -0x0005004b, -0x00060074, +0x0005004c, +0x00060075, 0x280b0008, 0x80ae0000, 0xc82e0000, 0x41800000, -0x00050848, +0x00050849, 0x7c05b040, 0x40800000, -0x00050848, +0x00050849, 0x38710000, 0x00098200, 0x820efff8, @@ -2474,16 +2481,16 @@ static const unsigned int build_actionlist[7580] = { 0xd8540008, 0x00000000, 0x48000000, -0x00050049, -0x00060075, +0x0005004a, +0x00060076, 0x280b0008, 0x80ae0000, 0xc82e0000, 0x41800000, -0x00050848, +0x00050849, 0x7c05b040, 0x40800000, -0x00050848, +0x00050849, 0x386efff8, 0x820efff8, 0x48000001, @@ -2493,14 +2500,14 @@ static const unsigned int build_actionlist[7580] = { 0x39800000, 0x00098200, 0x48000000, -0x00050049, +0x0005004a, 0x00000000, -0x00060076, +0x00060077, 0x280b0008, 0x80ae0000, 0x806e0004, 0x41800000, -0x00050848, +0x00050849, 0x7c05b040, 0x390e0008, 0x7d2e5a14, @@ -2511,7 +2518,7 @@ static const unsigned int build_actionlist[7580] = { 0x7c884840, 0x80880004, 0x40840000, -0x0005085d, +0x0005085e, 0x7c06b040, 0x6c608000, 0x6c868000, @@ -2526,7 +2533,7 @@ static const unsigned int build_actionlist[7580] = { 0x0005000b, 0x0006000d, 0x40800000, -0x00050848, +0x00050849, 0x6c638000, 0x9061000c, 0xc8210008, @@ -2537,13 +2544,13 @@ static const unsigned int build_actionlist[7580] = { 0x0006000e, 0xc82e0000, 0x40800000, -0x00050848, +0x00050849, 0x0006000f, 0x80c80000, 0x7c884840, 0xc8480000, 0x40840000, -0x0005084b, +0x0005084c, 0x7c06b040, 0x40800000, 0x00050807, @@ -2556,7 +2563,7 @@ static const unsigned int build_actionlist[7580] = { 0x00060011, 0x80880004, 0x40820000, -0x00050848, +0x00050849, 0x6c848000, 0x9081000c, 0xc8410008, @@ -2564,15 +2571,15 @@ static const unsigned int build_actionlist[7580] = { 0x48000000, 0x00050010, 0x00000000, -0x00060076, +0x00060077, 0x280b0008, 0x80ae0000, 0xc82e0000, 0x41800000, -0x00050848, +0x00050849, 0x7c05b040, 0x40800000, -0x00050848, +0x00050849, 0x39000008, 0x0006000b, 0x7c8e402e, @@ -2580,21 +2587,21 @@ static const unsigned int build_actionlist[7580] = { 0x7c885840, 0x7c04b040, 0x40840000, -0x0005084b, +0x0005084c, 0x40800000, -0x00050848, +0x00050849, 0xfc011028, 0x39080008, 0xfc2008ae, 0x48000000, 0x0005000b, 0x00000000, -0x00060077, +0x00060078, 0x280b0008, 0x80ae0000, 0x806e0004, 0x41800000, -0x00050848, +0x00050849, 0x7c05b040, 0x390e0008, 0x7d2e5a14, @@ -2605,7 +2612,7 @@ static const unsigned int build_actionlist[7580] = { 0x7c884840, 0x80880004, 0x40840000, -0x0005085d, +0x0005085e, 0x7c06b040, 0x6c608000, 0x6c868000, @@ -2620,7 +2627,7 @@ static const unsigned int build_actionlist[7580] = { 0x0005000b, 0x0006000d, 0x40800000, -0x00050848, +0x00050849, 0x6c638000, 0x9061000c, 0xc8210008, @@ -2631,13 +2638,13 @@ static const unsigned int build_actionlist[7580] = { 0x0006000e, 0xc82e0000, 0x40800000, -0x00050848, +0x00050849, 0x0006000f, 0x80c80000, 0x7c884840, 0xc8480000, 0x40840000, -0x0005084b, +0x0005084c, 0x7c06b040, 0x40800000, 0x00050807, @@ -2650,7 +2657,7 @@ static const unsigned int build_actionlist[7580] = { 0x00060011, 0x80880004, 0x40820000, -0x00050848, +0x00050849, 0x6c848000, 0x9081000c, 0xc8410008, @@ -2658,15 +2665,15 @@ static const unsigned int build_actionlist[7580] = { 0x48000000, 0x00050010, 0x00000000, -0x00060077, +0x00060078, 0x280b0008, 0x80ae0000, 0xc82e0000, 0x41800000, -0x00050848, +0x00050849, 0x7c05b040, 0x40800000, -0x00050848, +0x00050849, 0x39000008, 0x0006000b, 0x7c8e402e, @@ -2674,39 +2681,39 @@ static const unsigned int build_actionlist[7580] = { 0x7c885840, 0x7c04b040, 0x40840000, -0x0005084b, +0x0005084c, 0x40800000, -0x00050848, +0x00050849, 0xfc011028, 0x39080008, 0xfc20106e, 0x48000000, 0x0005000b, 0x00000000, -0x00060078, -0x280b0008, -0x80ae0000, -0x806e0004, -0x41800000, -0x00050848, -0x2c050000, -0x00098200, -0x40820000, -0x00050848, -0x80630000, -0x00098200, -0x48000000, -0x0005005d, 0x00060079, 0x280b0008, 0x80ae0000, 0x806e0004, -0x40820000, -0x00050848, +0x41800000, +0x00050849, 0x2c050000, 0x00098200, 0x40820000, -0x00050848, +0x00050849, +0x80630000, +0x00098200, +0x48000000, +0x0005005e, +0x0006007a, +0x280b0008, +0x80ae0000, +0x806e0004, +0x40820000, +0x00050849, +0x2c050000, +0x00098200, +0x40820000, +0x00050849, 0x80030000, 0x00098200, 0x00000000, @@ -2718,9 +2725,9 @@ static const unsigned int build_actionlist[7580] = { 0x28000000, 0x3a8efff8, 0x41a20000, -0x00050849, +0x0005084a, 0x48000000, -0x0005005d, +0x0005005e, 0x00000000, 0x89030000, 0x00098200, @@ -2736,33 +2743,33 @@ static const unsigned int build_actionlist[7580] = { 0x000900a1, 0xd8140000, 0x48000000, -0x00050049, +0x0005004a, 0x00000000, -0x0006007a, +0x0006007b, 0x80110000, 0x00098200, 0x81110000, 0x00098200, 0x7c004040, 0x40800001, -0x00050852, +0x00050853, 0x280b0008, 0x80ae0000, 0x00000000, 0x800e0004, 0x40820000, -0x00050848, +0x00050849, 0x7c05b040, 0x40820000, -0x00050848, +0x00050849, 0x388e0007, 0x00000000, 0xc82e0000, 0x40820000, -0x00050848, +0x00050849, 0x7c05b040, 0x40800000, -0x00050848, +0x00050849, 0xfc20081e, 0xd8210010, 0x80010014, @@ -2771,8 +2778,8 @@ static const unsigned int build_actionlist[7580] = { 0x38a00001, 0x280000ff, 0x41810000, -0x00050848, -0x0006007b, +0x00050849, +0x0006007c, 0x7e439378, 0x91d20000, 0x00098200, @@ -2784,15 +2791,15 @@ static const unsigned int build_actionlist[7580] = { 0x38a00000, 0x00098200, 0x48000000, -0x0005004d, -0x0006007c, +0x0005004e, +0x0006007d, 0x80110000, 0x00098200, 0x81110000, 0x00098200, 0x7c004040, 0x40800001, -0x00050852, +0x00050853, 0x280b0010, 0x80ae0010, 0x00000000, @@ -2801,7 +2808,7 @@ static const unsigned int build_actionlist[7580] = { 0x800e0000, 0x806e0004, 0x41800000, -0x00050848, +0x00050849, 0x808e0008, 0x00000000, 0x810e000c, @@ -2815,27 +2822,27 @@ static const unsigned int build_actionlist[7580] = { 0x7c05b040, 0x812e0014, 0x40820000, -0x00050848, +0x00050849, 0x0006000b, 0x7c04b040, 0x40820000, -0x00050848, +0x00050849, 0x00000000, 0x7c05b040, 0x40800000, -0x00050848, +0x00050849, 0xfc00001e, 0xd8010010, 0x81210014, 0x0006000b, 0x7c04b040, 0x40800000, -0x00050848, +0x00050849, 0x00000000, 0x2c000000, 0x00098200, 0x40820000, -0x00050848, +0x00050849, 0x00000000, 0xfc20081e, 0xd8210010, @@ -2861,7 +2868,7 @@ static const unsigned int build_actionlist[7580] = { 0x7c844214, 0x7ca50078, 0x48000000, -0x0005007b, +0x0005007c, 0x0006000f, 0x7c890050, 0x7c84fe70, @@ -2878,14 +2885,14 @@ static const unsigned int build_actionlist[7580] = { 0x39080001, 0x48000000, 0x0005000d, -0x0006007d, +0x0006007e, 0x80110000, 0x00098200, 0x81110000, 0x00098200, 0x7c004040, 0x40800001, -0x00050852, +0x00050853, 0x280b0010, 0x800e0000, 0x806e0004, @@ -2896,19 +2903,19 @@ static const unsigned int build_actionlist[7580] = { 0xc84e0008, 0x00000000, 0x41800000, -0x00050848, +0x00050849, 0x2c000000, 0x00098200, 0x40820000, -0x00050848, +0x00050849, 0x00000000, 0x7c06b040, 0x40820000, -0x00050848, +0x00050849, 0x00000000, 0x7c06b040, 0x40800000, -0x00050848, +0x00050849, 0xfc40101e, 0xd8410010, 0x80a10014, @@ -2926,13 +2933,13 @@ static const unsigned int build_actionlist[7580] = { 0x00050802, 0x7c882840, 0x40820000, -0x00050848, +0x00050849, 0x88030000, 0x00098200, 0x80910000, 0x00098200, 0x41840000, -0x00050848, +0x00050849, 0x0006000b, 0x28090000, 0x7c0449ae, @@ -2940,34 +2947,34 @@ static const unsigned int build_actionlist[7580] = { 0x40820000, 0x0005080b, 0x48000000, -0x0005007b, +0x0005007c, 0x0006000c, 0x38710000, 0x00098200, 0x38a00000, 0x00098200, 0x48000000, -0x0005004d, -0x0006007e, +0x0005004e, +0x0006007f, 0x80110000, 0x00098200, 0x81110000, 0x00098200, 0x7c004040, 0x40800001, -0x00050852, +0x00050853, 0x280b0008, 0x80ae0000, 0x806e0004, 0x41800000, -0x00050848, +0x00050849, 0x2c050000, 0x00098200, 0x81110000, 0x00098200, 0x00000000, 0x40820000, -0x00050848, +0x00050849, 0x80a30000, 0x00098200, 0x38630000, @@ -2978,36 +2985,36 @@ static const unsigned int build_actionlist[7580] = { 0x7c082840, 0x38c5ffff, 0x41800000, -0x00050848, +0x00050849, 0x0006000b, 0x2c060000, 0x7d0348ae, 0x41a00000, -0x0005087b, +0x0005087c, 0x7d0431ae, 0x38c6ffff, 0x39290001, 0x48000000, 0x0005000b, -0x0006007f, +0x00060080, 0x80110000, 0x00098200, 0x81110000, 0x00098200, 0x7c004040, 0x40800001, -0x00050852, +0x00050853, 0x280b0008, 0x80ae0000, 0x806e0004, 0x41800000, -0x00050848, +0x00050849, 0x2c050000, 0x00098200, 0x81110000, 0x00098200, 0x40820000, -0x00050848, +0x00050849, 0x80a30000, 0x00098200, 0x38630000, @@ -3017,12 +3024,12 @@ static const unsigned int build_actionlist[7580] = { 0x7c082840, 0x39200000, 0x41800000, -0x00050848, +0x00050849, 0x0006000b, 0x7c092840, 0x7d0348ae, 0x40a00000, -0x0005087b, +0x0005087c, 0x00000000, 0x3808ffbf, 0x69060020, @@ -3034,25 +3041,25 @@ static const unsigned int build_actionlist[7580] = { 0x39290001, 0x48000000, 0x0005000b, -0x00060080, +0x00060081, 0x80110000, 0x00098200, 0x81110000, 0x00098200, 0x7c004040, 0x40800001, -0x00050852, +0x00050853, 0x280b0008, 0x80ae0000, 0x806e0004, 0x41800000, -0x00050848, +0x00050849, 0x2c050000, 0x00098200, 0x81110000, 0x00098200, 0x40820000, -0x00050848, +0x00050849, 0x80a30000, 0x00098200, 0x38630000, @@ -3062,12 +3069,12 @@ static const unsigned int build_actionlist[7580] = { 0x7c082840, 0x39200000, 0x41800000, -0x00050848, +0x00050849, 0x0006000b, 0x7c092840, 0x7d0348ae, 0x40a00000, -0x0005087b, +0x0005087c, 0x3808ff9f, 0x69060020, 0x3000ffe6, @@ -3078,40 +3085,40 @@ static const unsigned int build_actionlist[7580] = { 0x39290001, 0x48000000, 0x0005000b, -0x00060081, +0x00060082, 0x280b0008, 0x80ae0000, 0x806e0004, 0x41800000, -0x00050848, +0x00050849, 0x2c050000, 0x00098200, 0x40820000, -0x00050848, +0x00050849, 0x48000001, 0x00030026, 0x48000000, -0x0005005d, +0x0005005e, 0x00000000, -0x00060082, +0x00060083, 0x280b0008, 0x80ae0000, 0x806e0004, 0x41800000, -0x00050848, +0x00050849, 0x7c05b040, 0x40820001, -0x00050883, +0x00050884, 0x00000000, -0x00060082, +0x00060083, 0x280b0008, 0x80ae0000, 0xc82e0000, 0x41800000, -0x00050848, +0x00050849, 0x7c05b040, 0x40800000, -0x00050848, +0x00050849, 0xfc21f02a, 0xd8210010, 0x80610014, @@ -3127,15 +3134,15 @@ static const unsigned int build_actionlist[7580] = { 0xc8280000, 0x00000000, 0x40a40000, -0x0005085d, +0x0005085e, 0x7c06b040, 0x00000000, 0x40820001, -0x00050884, +0x00050885, 0x00000000, 0xfc21f02a, 0x40800000, -0x00050848, +0x00050849, 0xd8210010, 0x80810014, 0x00000000, @@ -3144,25 +3151,25 @@ static const unsigned int build_actionlist[7580] = { 0x48000000, 0x0005000b, 0x00000000, -0x00060085, +0x00060086, 0x280b0008, 0x80ae0000, 0x806e0004, 0x41800000, -0x00050848, +0x00050849, 0x7c05b040, 0x40820001, -0x00050883, +0x00050884, 0x00000000, -0x00060085, +0x00060086, 0x280b0008, 0x80ae0000, 0xc82e0000, 0x41800000, -0x00050848, +0x00050849, 0x7c05b040, 0x40800000, -0x00050848, +0x00050849, 0xfc21f02a, 0xd8210010, 0x80610014, @@ -3178,15 +3185,15 @@ static const unsigned int build_actionlist[7580] = { 0xc8280000, 0x00000000, 0x40a40000, -0x0005085d, +0x0005085e, 0x7c06b040, 0x00000000, 0x40820001, -0x00050884, +0x00050885, 0x00000000, 0xfc21f02a, 0x40800000, -0x00050848, +0x00050849, 0xd8210010, 0x80810014, 0x00000000, @@ -3195,25 +3202,25 @@ static const unsigned int build_actionlist[7580] = { 0x48000000, 0x0005000b, 0x00000000, -0x00060086, +0x00060087, 0x280b0008, 0x80ae0000, 0x806e0004, 0x41800000, -0x00050848, +0x00050849, 0x7c05b040, 0x40820001, -0x00050883, +0x00050884, 0x00000000, -0x00060086, +0x00060087, 0x280b0008, 0x80ae0000, 0xc82e0000, 0x41800000, -0x00050848, +0x00050849, 0x7c05b040, 0x40800000, -0x00050848, +0x00050849, 0xfc21f02a, 0xd8210010, 0x80610014, @@ -3229,15 +3236,15 @@ static const unsigned int build_actionlist[7580] = { 0xc8280000, 0x00000000, 0x40a40000, -0x0005085d, +0x0005085e, 0x7c06b040, 0x00000000, 0x40820001, -0x00050884, +0x00050885, 0x00000000, 0xfc21f02a, 0x40800000, -0x00050848, +0x00050849, 0xd8210010, 0x80810014, 0x00000000, @@ -3246,25 +3253,25 @@ static const unsigned int build_actionlist[7580] = { 0x48000000, 0x0005000b, 0x00000000, -0x00060087, +0x00060088, 0x280b0008, 0x80ae0000, 0x806e0004, 0x41800000, -0x00050848, +0x00050849, 0x7c05b040, 0x40820001, -0x00050883, +0x00050884, 0x00000000, -0x00060087, +0x00060088, 0x280b0008, 0x80ae0000, 0xc82e0000, 0x41800000, -0x00050848, +0x00050849, 0x7c05b040, 0x40800000, -0x00050848, +0x00050849, 0xfc21f02a, 0xd8210010, 0x80610014, @@ -3274,64 +3281,64 @@ static const unsigned int build_actionlist[7580] = { 0x5060c42e, 0x7c030378, 0x48000000, -0x0005005d, +0x0005005e, 0x00000000, -0x00060088, +0x00060089, 0x280b0008, 0x80ae0000, 0x806e0004, 0x41800000, -0x00050848, +0x00050849, 0x7c05b040, 0x40820001, -0x00050883, +0x00050884, 0x00000000, -0x00060088, +0x00060089, 0x280b0008, 0x80ae0000, 0xc82e0000, 0x41800000, -0x00050848, +0x00050849, 0x7c05b040, 0x40800000, -0x00050848, +0x00050849, 0xfc21f02a, 0xd8210010, 0x80610014, 0x00000000, 0x7c6318f8, 0x48000000, -0x0005005d, +0x0005005e, 0x00000000, -0x00060089, +0x0006008a, 0x280b0010, 0x80ae0000, 0x80ce0008, 0x806e0004, 0x808e000c, 0x41800000, -0x00050848, +0x00050849, 0x7c05b040, 0x40820001, -0x00050883, +0x00050884, 0x7c06b040, 0x40820000, -0x00050848, +0x00050849, 0x00000000, -0x00060089, +0x0006008a, 0x280b0010, 0x80ae0000, 0xc82e0000, 0x80ce0008, 0xc84e0008, 0x41800000, -0x00050848, +0x00050849, 0x7c05b040, 0x40800000, -0x00050848, +0x00050849, 0x7c06b040, 0x40800000, -0x00050848, +0x00050849, 0xfc21f02a, 0xfc42f02a, 0xd8210010, @@ -3342,37 +3349,37 @@ static const unsigned int build_actionlist[7580] = { 0x548406fe, 0x7c632030, 0x48000000, -0x0005005d, +0x0005005e, 0x00000000, -0x0006008a, +0x0006008b, 0x280b0010, 0x80ae0000, 0x80ce0008, 0x806e0004, 0x808e000c, 0x41800000, -0x00050848, +0x00050849, 0x7c05b040, 0x40820001, -0x00050883, +0x00050884, 0x7c06b040, 0x40820000, -0x00050848, +0x00050849, 0x00000000, -0x0006008a, +0x0006008b, 0x280b0010, 0x80ae0000, 0xc82e0000, 0x80ce0008, 0xc84e0008, 0x41800000, -0x00050848, +0x00050849, 0x7c05b040, 0x40800000, -0x00050848, +0x00050849, 0x7c06b040, 0x40800000, -0x00050848, +0x00050849, 0xfc21f02a, 0xfc42f02a, 0xd8210010, @@ -3383,37 +3390,37 @@ static const unsigned int build_actionlist[7580] = { 0x548406fe, 0x7c632430, 0x48000000, -0x0005005d, +0x0005005e, 0x00000000, -0x0006008b, +0x0006008c, 0x280b0010, 0x80ae0000, 0x80ce0008, 0x806e0004, 0x808e000c, 0x41800000, -0x00050848, +0x00050849, 0x7c05b040, 0x40820001, -0x00050883, +0x00050884, 0x7c06b040, 0x40820000, -0x00050848, +0x00050849, 0x00000000, -0x0006008b, +0x0006008c, 0x280b0010, 0x80ae0000, 0xc82e0000, 0x80ce0008, 0xc84e0008, 0x41800000, -0x00050848, +0x00050849, 0x7c05b040, 0x40800000, -0x00050848, +0x00050849, 0x7c06b040, 0x40800000, -0x00050848, +0x00050849, 0xfc21f02a, 0xfc42f02a, 0xd8210010, @@ -3424,37 +3431,37 @@ static const unsigned int build_actionlist[7580] = { 0x548406fe, 0x7c632630, 0x48000000, -0x0005005d, +0x0005005e, 0x00000000, -0x0006008c, +0x0006008d, 0x280b0010, 0x80ae0000, 0x80ce0008, 0x806e0004, 0x808e000c, 0x41800000, -0x00050848, +0x00050849, 0x7c05b040, 0x40820001, -0x00050883, +0x00050884, 0x7c06b040, 0x40820000, -0x00050848, +0x00050849, 0x00000000, -0x0006008c, +0x0006008d, 0x280b0010, 0x80ae0000, 0xc82e0000, 0x80ce0008, 0xc84e0008, 0x41800000, -0x00050848, +0x00050849, 0x7c05b040, 0x40800000, -0x00050848, +0x00050849, 0x7c06b040, 0x40800000, -0x00050848, +0x00050849, 0xfc21f02a, 0xfc42f02a, 0xd8210010, @@ -3464,37 +3471,37 @@ static const unsigned int build_actionlist[7580] = { 0x00000000, 0x5c63203e, 0x48000000, -0x0005005d, +0x0005005e, 0x00000000, -0x0006008d, +0x0006008e, 0x280b0010, 0x80ae0000, 0x80ce0008, 0x806e0004, 0x808e000c, 0x41800000, -0x00050848, +0x00050849, 0x7c05b040, 0x40820001, -0x00050883, +0x00050884, 0x7c06b040, 0x40820000, -0x00050848, +0x00050849, 0x00000000, -0x0006008d, +0x0006008e, 0x280b0010, 0x80ae0000, 0xc82e0000, 0x80ce0008, 0xc84e0008, 0x41800000, -0x00050848, +0x00050849, 0x7c05b040, 0x40800000, -0x00050848, +0x00050849, 0x7c06b040, 0x40800000, -0x00050848, +0x00050849, 0xfc21f02a, 0xfc42f02a, 0xd8210010, @@ -3505,67 +3512,67 @@ static const unsigned int build_actionlist[7580] = { 0x7c8400d0, 0x5c63203e, 0x48000000, -0x0005005d, +0x0005005e, 0x00000000, -0x0006008e, +0x0006008f, 0x280b0008, 0x80ae0000, 0x806e0004, 0x41800000, -0x00050848, +0x00050849, 0x7c05b040, 0x40820001, -0x00050883, +0x00050884, 0x00000000, -0x0006008e, +0x0006008f, 0x280b0008, 0x80ae0000, 0xc82e0000, 0x41800000, -0x00050848, +0x00050849, 0x7c05b040, 0x40800000, -0x00050848, +0x00050849, 0xfc21f02a, 0xd8210010, 0x80610014, 0x00000000, 0x48000000, -0x0005005d, +0x0005005e, 0x00000000, -0x0006005d, +0x0006005e, 0x6c638000, 0x9061000c, 0xc8210008, 0xfc21f828, 0x00000000, -0x0006004b, +0x0006004c, 0x820efff8, 0x3a8efff8, 0xd82efff8, 0x48000000, -0x0005005e, -0x00060083, +0x0005005f, +0x00060084, 0x00000000, 0xc82e0000, 0x41810000, -0x00050848, +0x00050849, 0xfc21f02a, 0xd8210010, 0x80610014, 0x4e800020, 0x00000000, -0x00060084, +0x00060085, 0x00000000, 0xc8280000, 0x41810000, -0x00050848, +0x00050849, 0xfc21f02a, 0xd8210010, 0x80810014, 0x4e800020, 0x00000000, -0x00060048, +0x00060049, 0x80ca0000, 0x00098200, 0x7d0e5a14, @@ -3592,14 +3599,14 @@ static const unsigned int build_actionlist[7580] = { 0x000900a1, 0x3a8efff8, 0x41810000, -0x00050849, +0x0005084a, 0x0006000b, 0x80120000, 0x00098200, 0x814efffc, 0x7d6e0050, 0x40820000, -0x00050828, +0x00050829, 0x820a0000, 0x00098200, 0x80f00000, @@ -3610,7 +3617,7 @@ static const unsigned int build_actionlist[7580] = { 0x7e947214, 0x7c0903a6, 0x4e800420, -0x00060028, +0x00060029, 0x72000000, 0x00090200, 0x56080038, @@ -3633,7 +3640,7 @@ static const unsigned int build_actionlist[7580] = { 0x7c000000, 0x48000000, 0x0005000b, -0x00060052, +0x00060053, 0x7ea802a6, 0x91d20000, 0x00098200, @@ -3652,7 +3659,7 @@ static const unsigned int build_actionlist[7580] = { 0x7d6e0050, 0x814efffc, 0x4e800020, -0x0006008f, +0x00060090, 0x00000000, 0x88d10000, 0x00098200, @@ -3676,7 +3683,7 @@ static const unsigned int build_actionlist[7580] = { 0x48000000, 0x00050001, 0x00000000, -0x00060090, +0x00060091, 0x88d10000, 0x00098200, 0x70c00000, @@ -3689,7 +3696,7 @@ static const unsigned int build_actionlist[7580] = { 0x7c11402e, 0x7c0903a6, 0x4e800420, -0x00060091, +0x00060092, 0x88d10000, 0x00098200, 0x81310000, @@ -3734,12 +3741,12 @@ static const unsigned int build_actionlist[7580] = { 0x54eb9d78, 0x7c0903a6, 0x4e800420, -0x00060092, +0x00060093, 0x3a100004, 0x826affec, 0x48000000, 0x0005000e, -0x00060093, +0x00060094, 0x00000000, 0x810efffc, 0x38710000, @@ -3764,13 +3771,13 @@ static const unsigned int build_actionlist[7580] = { 0x48000000, 0x0005000d, 0x00000000, -0x00060094, +0x00060095, 0x7e048378, 0x00000000, 0x48000000, 0x00050001, 0x00000000, -0x00060095, +0x00060096, 0x00000000, 0x62040001, 0x0006000b, @@ -3796,7 +3803,7 @@ static const unsigned int build_actionlist[7580] = { 0x80f0fffc, 0x7c6903a6, 0x4e800420, -0x00060096, +0x00060097, 0x00000000, 0x38210000, 0x00098200, @@ -3922,7 +3929,7 @@ static const unsigned int build_actionlist[7580] = { 0x48000000, 0x00050001, 0x00000000, -0x00060097, +0x00060098, 0x00000000, 0x82410024, 0x3a3f0000, @@ -3981,18 +3988,18 @@ static const unsigned int build_actionlist[7580] = { 0x48000001, 0x0003002c, 0x00000000, -0x00060098, -0x48000000, -0x00030010, 0x00060099, 0x48000000, -0x00030011, +0x00030010, 0x0006009a, +0x48000000, +0x00030011, +0x0006009b, 0x00000000, 0x48000000, 0x0003002d, 0x00000000, -0x0006009b, +0x0006009c, 0x7c0327d7, 0x41830000, 0x00050801, @@ -4010,7 +4017,7 @@ static const unsigned int build_actionlist[7580] = { 0x4d820020, 0x7c000400, 0x4e800020, -0x0006009c, +0x0006009d, 0x28030001, 0x41820000, 0x00050801, @@ -4096,7 +4103,191 @@ static const unsigned int build_actionlist[7580] = { 0x00000000, 0x7c810808, 0x00000000, -0x0006009d, +0x0006009e, +0x00000000, +0x9421fef0, +0x91c10000, +0x00098200, +0xd9c10000, +0x00098200, +0x91e10000, +0x00098200, +0xd9e10000, +0x00098200, +0x92010000, +0x00098200, +0xda010000, +0x00098200, +0x7c0802a6, +0x92210000, +0x00098200, +0xda210000, +0x00098200, +0x92410000, +0x00098200, +0xda410000, +0x00098200, +0x92610000, +0x00098200, +0xda610000, +0x00098200, +0x92810000, +0x00098200, +0xda810000, +0x00098200, +0x92a10000, +0x00098200, +0xdaa10000, +0x00098200, +0x92c10000, +0x00098200, +0xdac10000, +0x00098200, +0x90010114, +0x92e10000, +0x00098200, +0xdae10000, +0x00098200, +0x93010000, +0x00098200, +0xdb010000, +0x00098200, +0x00000000, +0x93210000, +0x00098200, +0xdb210000, +0x00098200, +0x7c000026, +0x93410000, +0x00098200, +0xdb410000, +0x00098200, +0x93610000, +0x00098200, +0xdb610000, +0x00098200, +0x93810000, +0x00098200, +0xdb810000, +0x00098200, +0x93a10000, +0x00098200, +0xdba10000, +0x00098200, +0x93c10000, +0x00098200, +0xdbc10000, +0x00098200, +0x93e10000, +0x00098200, +0xdbe10000, +0x00098200, +0x90010034, +0x820c0000, +0x00098200, +0x3a2c0000, +0x00098200, +0x91700000, +0x00098200, +0x90700000, +0x00098200, +0xd8300000, +0x00098200, +0x90900000, +0x00098200, +0xd8500000, +0x00098200, +0x90b00000, +0x00098200, +0x00000000, +0xd8700000, +0x00098200, +0x90d00000, +0x00098200, +0xd8900000, +0x00098200, +0x90f00000, +0x00098200, +0xd8b00000, +0x00098200, +0x91100000, +0x00098200, +0xd8d00000, +0x00098200, +0x91300000, +0x00098200, +0xd8f00000, +0x00098200, +0x91500000, +0x00098200, +0xd9100000, +0x00098200, +0x38010000, +0x00098200, +0x90100000, +0x00098200, +0x7e038378, +0x92010020, +0x7c240b78, +0x48000001, +0x0003002e, +0x81c30000, +0x00098200, +0x3ac00000, +0x00098200, +0x81630000, +0x00098200, +0x3cc059c0, +0x3b000000, +0x7c721b78, +0x90c10010, +0x814efffc, +0x60c60004, +0x3ae00000, +0x00098200, +0x38000000, +0x00098200, +0xc3c10010, +0x90c10010, +0x7d6e5850, +0x90110000, +0x00098200, +0xc3e10010, +0x820a0000, +0x00098200, +0x80f00000, +0x3a100004, +0x54e815ba, +0x54f4dd78, +0x7c11402e, +0x7e947214, +0x7c0903a6, +0x4e800420, +0x00000000, +0x00060028, +0x00000000, +0x82110000, +0x00098200, +0x91d20000, +0x00098200, +0x91520000, +0x00098200, +0x92500000, +0x00098200, +0x7e038378, +0x7e84a378, +0x48000001, +0x0003002f, +0x80700000, +0x00098200, +0xc8300000, +0x00098200, +0x80900000, +0x00098200, +0x48000000, +0x0005001a, +0x00000000, +0x0006009f, 0x00000000, 0x81030000, 0x00098200, @@ -4234,10 +4425,10 @@ static const unsigned int build_actionlist[7580] = { 0x4e800420, 0x00060011, 0x41810000, -0x00050834, +0x00050835, 0xc8140000, 0x41850000, -0x00050834, +0x00050835, 0x41840000, 0x00050804, 0x6ca58000, @@ -4248,7 +4439,7 @@ static const unsigned int build_actionlist[7580] = { 0x00050005, 0x00060012, 0x41850000, -0x00050834, +0x00050835, 0x6c848000, 0x9081000c, 0xc8010008, @@ -4285,11 +4476,11 @@ static const unsigned int build_actionlist[7580] = { 0x7c88b040, 0x552993ba, 0x40800000, -0x00050834, +0x00050835, 0x3d290000, 0x00098200, 0x40840000, -0x00050834, +0x00050835, 0xfc000800, 0x00000000, 0x40800000, @@ -4333,10 +4524,10 @@ static const unsigned int build_actionlist[7580] = { 0x00098200, 0x00000000, 0x409d0000, -0x0005089e, +0x000508a0, 0x00000000, 0x409d0000, -0x0005089f, +0x000508a1, 0x00000000, 0x7c14706e, 0x81300000, @@ -4396,7 +4587,7 @@ static const unsigned int build_actionlist[7580] = { 0x00090200, 0x00000000, 0x419e0000, -0x0005083a, +0x0005083b, 0x00000000, 0x7e842840, 0x4c222902, @@ -4451,7 +4642,7 @@ static const unsigned int build_actionlist[7580] = { 0x0005080b, 0x7eb0ab78, 0x48000000, -0x00050039, +0x0005003a, 0x00000000, 0x7c14706e, 0x558c007e, @@ -4469,7 +4660,7 @@ static const unsigned int build_actionlist[7580] = { 0x00098200, 0x00000000, 0x41820000, -0x0005083a, +0x0005083b, 0x00000000, 0x7d064050, 0x7c004378, @@ -4507,9 +4698,9 @@ static const unsigned int build_actionlist[7580] = { 0x3d290000, 0x00098200, 0x00000000, -0x0006009e, +0x000600a0, 0x00000000, -0x0006009f, +0x000600a1, 0x00000000, 0x40820000, 0x00050807, @@ -4518,9 +4709,9 @@ static const unsigned int build_actionlist[7580] = { 0x7c042800, 0x0006000e, 0x00000000, -0x0006009e, +0x000600a0, 0x00000000, -0x0006009f, +0x000600a1, 0x00000000, 0x7c0ea02e, 0x3a100004, @@ -4566,7 +4757,7 @@ static const unsigned int build_actionlist[7580] = { 0x2c000000, 0x00098200, 0x41820000, -0x0005083a, +0x0005083b, 0x48000000, 0x0005000b, 0x00000000, @@ -4607,7 +4798,7 @@ static const unsigned int build_actionlist[7580] = { 0x7c080050, 0x00000000, 0x41820000, -0x0005083a, +0x0005083b, 0x00000000, 0x552993ba, 0x3000ffff, @@ -4740,7 +4931,7 @@ static const unsigned int build_actionlist[7580] = { 0x00000000, 0x0006000f, 0x40800000, -0x0005083d, +0x0005083e, 0x6d088000, 0x00060011, 0x80f00000, @@ -4794,7 +4985,7 @@ static const unsigned int build_actionlist[7580] = { 0x2c000000, 0x00098200, 0x40820000, -0x00050842, +0x00050843, 0x00000000, 0x81230000, 0x00098200, @@ -4803,7 +4994,7 @@ static const unsigned int build_actionlist[7580] = { 0x00050809, 0x0006000d, 0x00000000, -0x00060043, +0x00060044, 0x48000001, 0x00030026, 0x48000000, @@ -4817,7 +5008,7 @@ static const unsigned int build_actionlist[7580] = { 0x40820000, 0x0005080d, 0x48000000, -0x00050042, +0x00050043, 0x00000000, 0x7d0a706e, 0x7d2b786e, @@ -4865,14 +5056,14 @@ static const unsigned int build_actionlist[7580] = { 0x0005080b, 0x00000000, 0x48000000, -0x00050040, -0x00000000, -0x48000000, -0x0005003c, -0x00000000, -0x48000000, 0x00050041, 0x00000000, +0x48000000, +0x0005003d, +0x00000000, +0x48000000, +0x00050042, +0x00000000, 0x0006000f, 0x00000000, 0xc9ea0000, @@ -4884,14 +5075,14 @@ static const unsigned int build_actionlist[7580] = { 0xc9eb0000, 0x00000000, 0x40800000, -0x00050840, -0x00000000, -0x40800000, -0x0005083c, -0x00000000, -0x40800000, 0x00050841, 0x00000000, +0x40800000, +0x0005083d, +0x00000000, +0x40800000, +0x00050842, +0x00000000, 0xfc0e782a, 0x80f00000, 0x3a100004, @@ -4910,11 +5101,11 @@ static const unsigned int build_actionlist[7580] = { 0x7c89b040, 0x4c002202, 0x40800000, -0x0005083e, +0x0005083f, 0x00000000, 0x7c08b040, 0x40800000, -0x0005083e, +0x0005083f, 0x00000000, 0x7d0e502e, 0x00000000, @@ -4927,11 +5118,11 @@ static const unsigned int build_actionlist[7580] = { 0x7c89b040, 0x4c002202, 0x40800000, -0x0005083b, +0x0005083c, 0x00000000, 0x7c08b040, 0x40800000, -0x0005083b, +0x0005083c, 0x00000000, 0x7d0e502e, 0x7d2e582e, @@ -4941,7 +5132,7 @@ static const unsigned int build_actionlist[7580] = { 0x7c89b040, 0x4c002202, 0x40800000, -0x0005083f, +0x00050840, 0x00000000, 0xfc0e782a, 0x80f00000, @@ -5002,14 +5193,14 @@ static const unsigned int build_actionlist[7580] = { 0x0005080b, 0x00000000, 0x48000000, -0x00050040, -0x00000000, -0x48000000, -0x0005003c, -0x00000000, -0x48000000, 0x00050041, 0x00000000, +0x48000000, +0x0005003d, +0x00000000, +0x48000000, +0x00050042, +0x00000000, 0x0006000f, 0x00000000, 0xc9ea0000, @@ -5021,14 +5212,14 @@ static const unsigned int build_actionlist[7580] = { 0xc9eb0000, 0x00000000, 0x40800000, -0x00050840, -0x00000000, -0x40800000, -0x0005083c, -0x00000000, -0x40800000, 0x00050841, 0x00000000, +0x40800000, +0x0005083d, +0x00000000, +0x40800000, +0x00050842, +0x00000000, 0xfc0e7828, 0x80f00000, 0x3a100004, @@ -5047,11 +5238,11 @@ static const unsigned int build_actionlist[7580] = { 0x7c89b040, 0x4c002202, 0x40800000, -0x0005083e, +0x0005083f, 0x00000000, 0x7c08b040, 0x40800000, -0x0005083e, +0x0005083f, 0x00000000, 0x7d0e502e, 0x00000000, @@ -5064,11 +5255,11 @@ static const unsigned int build_actionlist[7580] = { 0x7c89b040, 0x4c002202, 0x40800000, -0x0005083b, +0x0005083c, 0x00000000, 0x7c08b040, 0x40800000, -0x0005083b, +0x0005083c, 0x00000000, 0x7d0e502e, 0x7d2e582e, @@ -5078,7 +5269,7 @@ static const unsigned int build_actionlist[7580] = { 0x7c89b040, 0x4c002202, 0x40800000, -0x0005083f, +0x00050840, 0x00000000, 0xfc0e7828, 0x80f00000, @@ -5139,14 +5330,14 @@ static const unsigned int build_actionlist[7580] = { 0x0005080b, 0x00000000, 0x48000000, -0x00050040, -0x00000000, -0x48000000, -0x0005003c, -0x00000000, -0x48000000, 0x00050041, 0x00000000, +0x48000000, +0x0005003d, +0x00000000, +0x48000000, +0x00050042, +0x00000000, 0x0006000f, 0x00000000, 0xc9ea0000, @@ -5158,14 +5349,14 @@ static const unsigned int build_actionlist[7580] = { 0xc9eb0000, 0x00000000, 0x40800000, -0x00050840, -0x00000000, -0x40800000, -0x0005083c, -0x00000000, -0x40800000, 0x00050841, 0x00000000, +0x40800000, +0x0005083d, +0x00000000, +0x40800000, +0x00050842, +0x00000000, 0xfc0e03f2, 0x80f00000, 0x3a100004, @@ -5184,11 +5375,11 @@ static const unsigned int build_actionlist[7580] = { 0x7c89b040, 0x4c002202, 0x40800000, -0x0005083e, +0x0005083f, 0x00000000, 0x7c08b040, 0x40800000, -0x0005083e, +0x0005083f, 0x00000000, 0x7d0e502e, 0x00000000, @@ -5201,11 +5392,11 @@ static const unsigned int build_actionlist[7580] = { 0x7c89b040, 0x4c002202, 0x40800000, -0x0005083b, +0x0005083c, 0x00000000, 0x7c08b040, 0x40800000, -0x0005083b, +0x0005083c, 0x00000000, 0x7d0e502e, 0x7d2e582e, @@ -5215,7 +5406,7 @@ static const unsigned int build_actionlist[7580] = { 0x7c89b040, 0x4c002202, 0x40800000, -0x0005083f, +0x00050840, 0x00000000, 0xfc0e03f2, 0x80f00000, @@ -5241,11 +5432,11 @@ static const unsigned int build_actionlist[7580] = { 0x7c89b040, 0x4c002202, 0x40800000, -0x0005083e, +0x0005083f, 0x00000000, 0x7c08b040, 0x40800000, -0x0005083e, +0x0005083f, 0x00000000, 0x7d0e502e, 0x00000000, @@ -5258,11 +5449,11 @@ static const unsigned int build_actionlist[7580] = { 0x7c89b040, 0x4c002202, 0x40800000, -0x0005083b, +0x0005083c, 0x00000000, 0x7c08b040, 0x40800000, -0x0005083b, +0x0005083c, 0x00000000, 0x7d0e502e, 0x7d2e582e, @@ -5272,7 +5463,7 @@ static const unsigned int build_actionlist[7580] = { 0x7c89b040, 0x4c002202, 0x40800000, -0x0005083f, +0x00050840, 0x00000000, 0xfc0e7824, 0x80f00000, @@ -5311,7 +5502,7 @@ static const unsigned int build_actionlist[7580] = { 0x40860000, 0x00050805, 0x48000001, -0x0005009b, +0x0005009c, 0x41830000, 0x00050804, 0x0006000b, @@ -5334,14 +5525,14 @@ static const unsigned int build_actionlist[7580] = { 0x0005080b, 0x00000000, 0x48000000, -0x00050040, -0x00000000, -0x48000000, -0x0005003c, -0x00000000, -0x48000000, 0x00050041, 0x00000000, +0x48000000, +0x0005003d, +0x00000000, +0x48000000, +0x00050042, +0x00000000, 0x0006000f, 0x00000000, 0xc9ea0000, @@ -5353,15 +5544,15 @@ static const unsigned int build_actionlist[7580] = { 0xc9eb0000, 0x00000000, 0x40800000, -0x00050840, -0x00000000, -0x40800000, -0x0005083c, -0x00000000, -0x40800000, 0x00050841, 0x00000000, -0x000600a0, +0x40800000, +0x0005083d, +0x00000000, +0x40800000, +0x00050842, +0x00000000, +0x000600a2, 0xfc2e7824, 0x48000001, 0x00030010, @@ -5384,11 +5575,11 @@ static const unsigned int build_actionlist[7580] = { 0x7c89b040, 0x4c002202, 0x40800000, -0x0005083e, +0x0005083f, 0x00000000, 0x7c08b040, 0x40800000, -0x0005083e, +0x0005083f, 0x00000000, 0x7d0e502e, 0x00000000, @@ -5401,11 +5592,11 @@ static const unsigned int build_actionlist[7580] = { 0x7c89b040, 0x4c002202, 0x40800000, -0x0005083b, +0x0005083c, 0x00000000, 0x7c08b040, 0x40800000, -0x0005083b, +0x0005083c, 0x00000000, 0x7d0e502e, 0x7d2e582e, @@ -5415,9 +5606,9 @@ static const unsigned int build_actionlist[7580] = { 0x7c89b040, 0x4c002202, 0x40800000, -0x0005083f, +0x00050840, 0x00000000, -0x000600a0, +0x000600a2, 0xfc2e7824, 0x48000001, 0x00030010, @@ -5459,7 +5650,7 @@ static const unsigned int build_actionlist[7580] = { 0x40860000, 0x00050805, 0x48000001, -0x0005009b, +0x0005009c, 0x41830000, 0x00050804, 0x0006000b, @@ -5482,14 +5673,14 @@ static const unsigned int build_actionlist[7580] = { 0x0005080b, 0x00000000, 0x48000000, -0x00050040, -0x00000000, -0x48000000, -0x0005003c, -0x00000000, -0x48000000, 0x00050041, 0x00000000, +0x48000000, +0x0005003d, +0x00000000, +0x48000000, +0x00050042, +0x00000000, 0x0006000f, 0x00000000, 0xc9ea0000, @@ -5501,16 +5692,16 @@ static const unsigned int build_actionlist[7580] = { 0xc9eb0000, 0x00000000, 0x40800000, -0x00050840, -0x00000000, -0x40800000, -0x0005083c, -0x00000000, -0x40800000, 0x00050841, 0x00000000, +0x40800000, +0x0005083d, +0x00000000, +0x40800000, +0x00050842, +0x00000000, 0x48000000, -0x000500a0, +0x000500a2, 0x00000000, 0x7d0e502e, 0x00000000, @@ -5523,11 +5714,11 @@ static const unsigned int build_actionlist[7580] = { 0x7c89b040, 0x4c002202, 0x40800000, -0x0005083e, +0x0005083f, 0x00000000, 0x7c08b040, 0x40800000, -0x0005083e, +0x0005083f, 0x00000000, 0x7d0e502e, 0x00000000, @@ -5540,11 +5731,11 @@ static const unsigned int build_actionlist[7580] = { 0x7c89b040, 0x4c002202, 0x40800000, -0x0005083b, +0x0005083c, 0x00000000, 0x7c08b040, 0x40800000, -0x0005083b, +0x0005083c, 0x00000000, 0x7d0e502e, 0x7d2e582e, @@ -5554,10 +5745,10 @@ static const unsigned int build_actionlist[7580] = { 0x7c89b040, 0x4c002202, 0x40800000, -0x0005083f, +0x00050840, 0x00000000, 0x48000000, -0x000500a0, +0x000500a2, 0x00000000, 0x7d0e502e, 0x7c2e54ae, @@ -5567,7 +5758,7 @@ static const unsigned int build_actionlist[7580] = { 0x7c89b040, 0x4c002202, 0x40800000, -0x0005083f, +0x00050840, 0x48000001, 0x0003001f, 0x80f00000, @@ -5587,18 +5778,18 @@ static const unsigned int build_actionlist[7580] = { 0x00098200, 0x7c8e5a14, 0x7d555378, -0x0006002a, +0x0006002b, 0x92010020, 0x7e439378, 0x54a500fe, 0x000900ab, 0x48000001, -0x0003002e, +0x00030030, 0x28030000, 0x81d20000, 0x00098200, 0x40820000, -0x00050835, +0x00050836, 0x80f00000, 0x3a100004, 0x7c0eacae, @@ -5811,7 +6002,7 @@ static const unsigned int build_actionlist[7580] = { 0x41820000, 0x0005080b, 0x48000001, -0x0003002f, +0x00030031, 0x48000000, 0x0005000b, 0x00000000, @@ -5862,7 +6053,7 @@ static const unsigned int build_actionlist[7580] = { 0x41820000, 0x0005080b, 0x48000001, -0x0003002f, +0x00030031, 0x48000000, 0x0005000b, 0x00000000, @@ -5925,7 +6116,7 @@ static const unsigned int build_actionlist[7580] = { 0x00050801, 0x7c8ea214, 0x48000001, -0x00030030, +0x00030032, 0x81d20000, 0x00098200, 0x0006000b, @@ -5950,7 +6141,7 @@ static const unsigned int build_actionlist[7580] = { 0x7e439378, 0x80aefffc, 0x48000001, -0x00030031, +0x00030033, 0x81d20000, 0x00098200, 0x38000000, @@ -5988,14 +6179,14 @@ static const unsigned int build_actionlist[7580] = { 0x00050803, 0x0006000c, 0x48000001, -0x00030032, +0x00030034, 0x00000000, 0x5588007e, 0x000900ab, 0x2108fffc, 0x7c8f402e, 0x48000001, -0x00030033, +0x00030035, 0x00000000, 0x81d20000, 0x00098200, @@ -6022,7 +6213,7 @@ static const unsigned int build_actionlist[7580] = { 0x0006000f, 0x7d956378, 0x48000001, -0x00030034, +0x00030036, 0x7eacab78, 0x7e439378, 0x48000000, @@ -6037,10 +6228,10 @@ static const unsigned int build_actionlist[7580] = { 0x7d6f402e, 0x00000000, 0x48000000, -0x000500a1, +0x000500a3, 0x00000000, 0x48000000, -0x000500a2, +0x000500a4, 0x00000000, 0x7c6a706e, 0x7c8b706e, @@ -6054,7 +6245,7 @@ static const unsigned int build_actionlist[7580] = { 0x00098200, 0x7c84b040, 0x40820000, -0x0005082f, +0x00050830, 0x00000000, 0x800a0000, 0x00098200, @@ -6084,7 +6275,7 @@ static const unsigned int build_actionlist[7580] = { 0x000900a1, 0x00000000, 0x40810000, -0x0005082f, +0x00050830, 0x7c08482e, 0x7dc84cae, 0x2c000000, @@ -6116,17 +6307,17 @@ static const unsigned int build_actionlist[7580] = { 0x40820000, 0x0005080b, 0x48000000, -0x0005002f, +0x00050030, 0x0006000f, 0x2c040000, 0x00098200, 0x40820000, -0x0005082f, +0x00050830, 0x00000000, 0x816b0004, 0x00000000, 0x48000000, -0x000500a1, +0x000500a3, 0x00000000, 0x7c6a706e, 0x5568007e, @@ -6137,8 +6328,8 @@ static const unsigned int build_actionlist[7580] = { 0x00098200, 0x7d6f402e, 0x40820000, -0x0005082c, -0x000600a1, +0x0005082d, +0x000600a3, 0x800a0000, 0x00098200, 0x810b0000, @@ -6207,7 +6398,7 @@ static const unsigned int build_actionlist[7580] = { 0x40820000, 0x0005080d, 0x48000000, -0x0005002d, +0x0005002e, 0x00000000, 0x7c6a706e, 0x556000fe, @@ -6216,14 +6407,14 @@ static const unsigned int build_actionlist[7580] = { 0x2c030000, 0x00098200, 0x40820000, -0x0005082e, +0x0005082f, 0x810a0000, 0x00098200, 0x812a0000, 0x00098200, 0x7c004040, 0x40800000, -0x0005082e, +0x0005082f, 0x7d09582e, 0x7c095cae, 0x2c080000, @@ -6255,7 +6446,7 @@ static const unsigned int build_actionlist[7580] = { 0x40820000, 0x0005080b, 0x48000000, -0x0005002e, +0x0005002f, 0x00000000, 0x7c6a706e, 0x7c8b706e, @@ -6269,7 +6460,7 @@ static const unsigned int build_actionlist[7580] = { 0x00098200, 0x7c84b040, 0x40820000, -0x00050833, +0x00050834, 0x00000000, 0x800a0000, 0x00098200, @@ -6299,7 +6490,7 @@ static const unsigned int build_actionlist[7580] = { 0x000900a1, 0x00000000, 0x40810000, -0x00050833, +0x00050834, 0x7d28002e, 0x88ca0000, 0x00098200, @@ -6338,17 +6529,17 @@ static const unsigned int build_actionlist[7580] = { 0x40820000, 0x0005080b, 0x48000000, -0x00050033, +0x00050034, 0x0006000f, 0x2c040000, 0x00098200, 0x40820000, -0x00050833, +0x00050834, 0x00000000, 0x816b0004, 0x00000000, 0x48000000, -0x000500a2, +0x000500a4, 0x00060011, 0x80110000, 0x00098200, @@ -6397,8 +6588,8 @@ static const unsigned int build_actionlist[7580] = { 0x00098200, 0x7d6f402e, 0x40820000, -0x00050830, -0x000600a2, +0x00050831, +0x000600a4, 0x800a0000, 0x00098200, 0x810b0000, @@ -6469,7 +6660,7 @@ static const unsigned int build_actionlist[7580] = { 0x40820000, 0x0005080c, 0x48000000, -0x00050031, +0x00050032, 0x0006000f, 0x81290000, 0x00098200, @@ -6492,7 +6683,7 @@ static const unsigned int build_actionlist[7580] = { 0x70000000, 0x00090200, 0x41820000, -0x00050831, +0x00050832, 0x00060010, 0x00000000, 0x38000000, @@ -6501,7 +6692,7 @@ static const unsigned int build_actionlist[7580] = { 0x7d445378, 0x90050000, 0x48000001, -0x00030035, +0x00030037, 0x81d20000, 0x00098200, 0xd9c30000, @@ -6527,7 +6718,7 @@ static const unsigned int build_actionlist[7580] = { 0x2c030000, 0x00098200, 0x40820000, -0x00050832, +0x00050833, 0x810a0000, 0x00098200, 0x812a0000, @@ -6537,7 +6728,7 @@ static const unsigned int build_actionlist[7580] = { 0x7c004040, 0x7dcea4ae, 0x40800000, -0x00050832, +0x00050833, 0x7d09582e, 0x2c080000, 0x00098200, @@ -6573,7 +6764,7 @@ static const unsigned int build_actionlist[7580] = { 0x40820000, 0x0005080b, 0x48000000, -0x00050032, +0x00050033, 0x00060011, 0x80110000, 0x00098200, @@ -6642,7 +6833,7 @@ static const unsigned int build_actionlist[7580] = { 0x92010020, 0x7d956378, 0x48000001, -0x00030036, +0x00030038, 0x7eacab78, 0x48000000, 0x0005000b, @@ -6693,8 +6884,8 @@ static const unsigned int build_actionlist[7580] = { 0x00098200, 0x3a940008, 0x40820000, -0x00050844, -0x00060045, +0x00050845, +0x00060046, 0x71000000, 0x00090200, 0x88ca0000, @@ -7027,7 +7218,7 @@ static const unsigned int build_actionlist[7580] = { 0x6a080000, 0x00090200, 0x40820000, -0x000508a3, +0x000508a5, 0x00060017, 0x80f0fffc, 0x2c0c0008, @@ -7078,7 +7269,7 @@ static const unsigned int build_actionlist[7580] = { 0x7ee9412e, 0x48000000, 0x0005000f, -0x000600a3, +0x000600a5, 0x71090000, 0x00090200, 0x40820000, @@ -7096,7 +7287,7 @@ static const unsigned int build_actionlist[7580] = { 0x6a080000, 0x00090200, 0x40a20000, -0x000508a3, +0x000508a5, 0x80f0fffc, 0x392efff8, 0x54ea5d78, @@ -7140,7 +7331,7 @@ static const unsigned int build_actionlist[7580] = { 0x00098200, 0x7d31432e, 0x41800000, -0x00050893, +0x00050894, 0x00000000, 0x7d14706e, 0x80740000, @@ -7267,7 +7458,7 @@ static const unsigned int build_actionlist[7580] = { 0xc8540000, 0x00098200, 0x40800000, -0x00050846, +0x00050847, 0x00000000, 0x2f060000, 0x00000000, @@ -7355,7 +7546,7 @@ static const unsigned int build_actionlist[7580] = { 0x00098200, 0x7d31432e, 0x41800000, -0x00050893, +0x00050894, 0x00000000, 0x7d14706e, 0x81340004, @@ -7397,7 +7588,7 @@ static const unsigned int build_actionlist[7580] = { 0x00098200, 0x7d31432e, 0x41800000, -0x00050893, +0x00050894, 0x00000000, 0x80f00000, 0x3a100004, @@ -7453,7 +7644,7 @@ static const unsigned int build_actionlist[7580] = { 0x00098200, 0x7d31432e, 0x41800000, -0x00050895, +0x00050896, 0x00000000, 0x81320000, 0x00098200, @@ -7616,6 +7807,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, @@ -7733,6 +7925,7 @@ enum { GLOB_vm_trunc, GLOB_vm_modi, GLOB_vm_foldarith, + GLOB_vm_ffi_callback, GLOB_vm_ffi_call, GLOB_BC_ISEQN_Z, GLOB_BC_ISNEN_Z, @@ -7763,6 +7956,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", @@ -7880,6 +8074,7 @@ static const char *const globnames[] = { "vm_trunc", "vm_modi", "vm_foldarith", + "vm_ffi_callback", "vm_ffi_call", "BC_ISEQN_Z", "BC_ISNEN_Z", @@ -7936,6 +8131,8 @@ static const char *const extnames[] = { "lj_trace_exit", "lj_err_throw", "trunc", + "lj_ccallback_enter", + "lj_ccallback_leave", "lj_meta_cat", "lj_gc_barrieruv", "lj_func_closeuv", @@ -7974,385 +8171,407 @@ static void build_subroutines(BuildCtx *ctx) dasm_put(Dst, 105, 56+(24-14)*4, 128+(24-14)*8, 56+(25-14)*4, 128+(25-14)*8, 56+(26-14)*4, 128+(26-14)*8, 56+(27-14)*4, 128+(27-14)*8, 56+(28-14)*4, 128+(28-14)*8, 56+(29-14)*4, 128+(29-14)*8, 56+(30-14)*4, 128+(30-14)*8, 56+(31-14)*4, 128+(31-14)*8, Dt1(->maxstack)); dasm_put(Dst, 154, Dt1(->top), 31-3, Dt1(->top), ~LJ_VMST_C, Dt1(->glref), Dt2(->vmstate), LJ_TISNUM, Dt1(->base), Dt1(->glref), LJ_TFALSE, LJ_TNIL, ~LJ_VMST_INTERP, GG_G2DISP); dasm_put(Dst, 217, DISPATCH_GL(vmstate), LUA_MINSTACK, Dt1(->base), Dt1(->top), 32-3, Dt1(->base), Dt1(->top), Dt7(->pc), 56+(14-14)*4, 128+(14-14)*8, 56+(15-14)*4, 128+(15-14)*8, 56+(16-14)*4, 128+(16-14)*8, 56+(17-14)*4); - dasm_put(Dst, 277, 128+(17-14)*8, 56+(18-14)*4, 128+(18-14)*8, 56+(19-14)*4, 128+(19-14)*8, 56+(20-14)*4, 128+(20-14)*8, 56+(21-14)*4, 128+(21-14)*8, 56+(22-14)*4, 128+(22-14)*8, 56+(23-14)*4, 128+(23-14)*8, 56+(24-14)*4, 128+(24-14)*8, 56+(25-14)*4, 128+(25-14)*8, 56+(26-14)*4, 128+(26-14)*8, 56+(27-14)*4, 128+(27-14)*8, 56+(28-14)*4); - dasm_put(Dst, 326, 128+(28-14)*8, 56+(29-14)*4, 128+(29-14)*8, 56+(30-14)*4, 128+(30-14)*8, 56+(31-14)*4, 128+(31-14)*8, Dt1(->glref), Dt1(->status), FRAME_CP, CFRAME_RESUME, GG_G2DISP, Dt1(->cframe), Dt1(->base), LJ_TISNUM, Dt1(->top), Dt1(->status), FRAME_TYPE, ~LJ_VMST_INTERP, LJ_TNIL, DISPATCH_GL(vmstate)); + dasm_put(Dst, 278, 128+(17-14)*8, 56+(18-14)*4, 128+(18-14)*8, 56+(19-14)*4, 128+(19-14)*8, 56+(20-14)*4, 128+(20-14)*8, 56+(21-14)*4, 128+(21-14)*8, 56+(22-14)*4, 128+(22-14)*8, 56+(23-14)*4, 128+(23-14)*8, 56+(24-14)*4, 128+(24-14)*8, 56+(25-14)*4, 128+(25-14)*8, 56+(26-14)*4, 128+(26-14)*8, 56+(27-14)*4, 128+(27-14)*8, 56+(28-14)*4); + dasm_put(Dst, 325, 128+(28-14)*8, 56+(29-14)*4, 128+(29-14)*8, 56+(30-14)*4, 128+(30-14)*8, 56+(31-14)*4, 128+(31-14)*8, Dt1(->glref), Dt1(->status), FRAME_CP, CFRAME_RESUME, GG_G2DISP, Dt1(->cframe), Dt1(->base), LJ_TISNUM, Dt1(->top), Dt1(->status), FRAME_TYPE, ~LJ_VMST_INTERP, LJ_TNIL, DISPATCH_GL(vmstate)); dasm_put(Dst, 393, 56+(14-14)*4, 128+(14-14)*8, 56+(15-14)*4, 128+(15-14)*8, 56+(16-14)*4, 128+(16-14)*8, 56+(17-14)*4, 128+(17-14)*8, 56+(18-14)*4, 128+(18-14)*8, 56+(19-14)*4, 128+(19-14)*8, 56+(20-14)*4, 128+(20-14)*8, 56+(21-14)*4, 128+(21-14)*8, 56+(22-14)*4, 128+(22-14)*8, 56+(23-14)*4); dasm_put(Dst, 440, 128+(23-14)*8, 56+(24-14)*4, 128+(24-14)*8, 56+(25-14)*4, 128+(25-14)*8, 56+(26-14)*4, 128+(26-14)*8, 56+(27-14)*4, 128+(27-14)*8, 56+(28-14)*4, 128+(28-14)*8, 56+(29-14)*4, 128+(29-14)*8, 56+(30-14)*4, 128+(30-14)*8, 56+(31-14)*4, 128+(31-14)*8, FRAME_CP, 56+(14-14)*4, 128+(14-14)*8); dasm_put(Dst, 488, 56+(15-14)*4, 128+(15-14)*8, 56+(16-14)*4, 128+(16-14)*8, 56+(17-14)*4, 128+(17-14)*8, 56+(18-14)*4, 128+(18-14)*8, 56+(19-14)*4, 128+(19-14)*8, 56+(20-14)*4, 128+(20-14)*8, 56+(21-14)*4, 128+(21-14)*8, 56+(22-14)*4, 128+(22-14)*8, 56+(23-14)*4, 128+(23-14)*8, 56+(24-14)*4, 128+(24-14)*8, 56+(25-14)*4, 128+(25-14)*8); dasm_put(Dst, 535, 56+(26-14)*4, 128+(26-14)*8, 56+(27-14)*4, 128+(27-14)*8, 56+(28-14)*4, 128+(28-14)*8, 56+(29-14)*4, 128+(29-14)*8, 56+(30-14)*4, 128+(30-14)*8, 56+(31-14)*4, 128+(31-14)*8, FRAME_C, Dt1(->cframe), Dt1(->cframe), Dt1(->glref), GG_G2DISP, Dt1(->base), LJ_TISNUM, Dt1(->top)); dasm_put(Dst, 586, ~LJ_VMST_INTERP, LJ_TNIL, DISPATCH_GL(vmstate), LJ_TFUNC, Dt7(->pc), 56+(14-14)*4, 128+(14-14)*8, 56+(15-14)*4, 128+(15-14)*8, 56+(16-14)*4, 128+(16-14)*8, 56+(17-14)*4, 128+(17-14)*8, 56+(18-14)*4, 128+(18-14)*8, 56+(19-14)*4, 128+(19-14)*8, 56+(20-14)*4); - dasm_put(Dst, 654, 128+(20-14)*8, 56+(21-14)*4, 128+(21-14)*8, 56+(22-14)*4, 128+(22-14)*8, 56+(23-14)*4, 128+(23-14)*8, 56+(24-14)*4, 128+(24-14)*8, 56+(25-14)*4, 128+(25-14)*8, 56+(26-14)*4, 128+(26-14)*8, 56+(27-14)*4, 128+(27-14)*8, 56+(28-14)*4, 128+(28-14)*8, 56+(29-14)*4, 128+(29-14)*8, 56+(30-14)*4, 128+(30-14)*8, 56+(31-14)*4); - dasm_put(Dst, 701, 128+(31-14)*8, Dt1(->stack), Dt1(->top), Dt1(->cframe), Dt1(->cframe), Dt1(->glref), FRAME_CP, GG_G2DISP, Dt7(->pc), PC2PROTO(k), Dt1(->base), DISPATCH_GL(tmptv)); - dasm_put(Dst, 775, LJ_TSTR, DISPATCH_GL(tmptv), LJ_TTAB, DISPATCH_GL(tmptv2), LJ_TSTR); - if (!LJ_DUALNUM) { - dasm_put(Dst, 800); - } - dasm_put(Dst, 804, DISPATCH_GL(tmptv)); - if (LJ_DUALNUM) { - dasm_put(Dst, 809); - } else { - dasm_put(Dst, 812); - } - dasm_put(Dst, 814, Dt1(->base), FRAME_CONT, Dt1(->top), DISPATCH_GL(tmptv), LJ_TSTR, DISPATCH_GL(tmptv), LJ_TTAB, DISPATCH_GL(tmptv2), LJ_TSTR); - if (!LJ_DUALNUM) { - dasm_put(Dst, 882); - } - dasm_put(Dst, 886, DISPATCH_GL(tmptv)); - if (LJ_DUALNUM) { - dasm_put(Dst, 891); - } else { - dasm_put(Dst, 894); - } - dasm_put(Dst, 896, Dt1(->base), FRAME_CONT, Dt1(->top)); - if (LJ_DUALNUM) { - dasm_put(Dst, 941); - } else { - dasm_put(Dst, 943); - } - dasm_put(Dst, 945); - if (LJ_DUALNUM) { - dasm_put(Dst, 947); - } else { - dasm_put(Dst, 949); - } - dasm_put(Dst, 951, Dt1(->base), -(BCBIAS_J*4 >> 16), LJ_TTRUE, LJ_TTRUE, Dt1(->base)); + dasm_put(Dst, 653, 128+(20-14)*8, 56+(21-14)*4, 128+(21-14)*8, 56+(22-14)*4, 128+(22-14)*8, 56+(23-14)*4, 128+(23-14)*8, 56+(24-14)*4, 128+(24-14)*8, 56+(25-14)*4, 128+(25-14)*8, 56+(26-14)*4, 128+(26-14)*8, 56+(27-14)*4, 128+(27-14)*8, 56+(28-14)*4, 128+(28-14)*8, 56+(29-14)*4, 128+(29-14)*8, 56+(30-14)*4, 128+(30-14)*8, 56+(31-14)*4); + dasm_put(Dst, 700, 128+(31-14)*8, Dt1(->stack), Dt1(->top), Dt1(->cframe), Dt1(->cframe), Dt1(->glref), FRAME_CP, GG_G2DISP); #if LJ_HASFFI - dasm_put(Dst, 1014, Dt1(->base)); + dasm_put(Dst, 738); #endif - dasm_put(Dst, 1025); - if (LJ_DUALNUM) { - dasm_put(Dst, 1032); - } - dasm_put(Dst, 1037); - if (LJ_DUALNUM) { - dasm_put(Dst, 1051); - } - dasm_put(Dst, 1054); - if (LJ_DUALNUM) { - dasm_put(Dst, 1057); - } - dasm_put(Dst, 1060, Dt1(->base), FRAME_CONT); -#ifdef LUAJIT_ENABLE_LUA52COMPAT - dasm_put(Dst, 1084); + dasm_put(Dst, 740, Dt7(->pc)); +#if LJ_HASFFI + dasm_put(Dst, 746); #endif - dasm_put(Dst, 1086, Dt1(->base)); + dasm_put(Dst, 749, PC2PROTO(k)); +#if LJ_HASFFI + dasm_put(Dst, 754); +#endif + dasm_put(Dst, 762, Dt1(->base), DISPATCH_GL(tmptv), LJ_TSTR, DISPATCH_GL(tmptv), LJ_TTAB, DISPATCH_GL(tmptv2), LJ_TSTR); + if (!LJ_DUALNUM) { + dasm_put(Dst, 807); + } + dasm_put(Dst, 811, DISPATCH_GL(tmptv)); + if (LJ_DUALNUM) { + dasm_put(Dst, 816); + } else { + dasm_put(Dst, 819); + } + dasm_put(Dst, 821, Dt1(->base), FRAME_CONT, Dt1(->top), DISPATCH_GL(tmptv), LJ_TSTR, DISPATCH_GL(tmptv), LJ_TTAB, DISPATCH_GL(tmptv2), LJ_TSTR); + if (!LJ_DUALNUM) { + dasm_put(Dst, 889); + } + dasm_put(Dst, 893, DISPATCH_GL(tmptv)); + if (LJ_DUALNUM) { + dasm_put(Dst, 898); + } else { + dasm_put(Dst, 901); + } + dasm_put(Dst, 903, Dt1(->base), FRAME_CONT, Dt1(->top)); + if (LJ_DUALNUM) { + dasm_put(Dst, 948); + } else { + dasm_put(Dst, 950); + } + dasm_put(Dst, 952); + if (LJ_DUALNUM) { + dasm_put(Dst, 954); + } else { + dasm_put(Dst, 956); + } + dasm_put(Dst, 958, Dt1(->base), -(BCBIAS_J*4 >> 16), LJ_TTRUE, LJ_TTRUE, Dt1(->base)); +#if LJ_HASFFI + dasm_put(Dst, 1021, Dt1(->base)); +#endif + dasm_put(Dst, 1032); + if (LJ_DUALNUM) { + dasm_put(Dst, 1039); + } + dasm_put(Dst, 1044); + if (LJ_DUALNUM) { + dasm_put(Dst, 1058); + } + dasm_put(Dst, 1061); + if (LJ_DUALNUM) { + dasm_put(Dst, 1064); + } + dasm_put(Dst, 1067, Dt1(->base), FRAME_CONT); +#ifdef LUAJIT_ENABLE_LUA52COMPAT + dasm_put(Dst, 1091); +#endif + dasm_put(Dst, 1093, Dt1(->base)); #ifdef LUAJIT_ENABLE_LUA52COMPAT - dasm_put(Dst, 1094); -#else dasm_put(Dst, 1101); +#else + dasm_put(Dst, 1108); #endif - dasm_put(Dst, 1104, Dt1(->base), Dt7(->pc), Dt1(->base), Dt1(->base)); + dasm_put(Dst, 1111, Dt1(->base), Dt7(->pc), Dt1(->base), Dt1(->base)); #if LJ_HASJIT - dasm_put(Dst, 1152); -#endif - dasm_put(Dst, 1154); -#if LJ_HASJIT - dasm_put(Dst, 1156, BC_JFORI); -#endif dasm_put(Dst, 1159); +#endif + dasm_put(Dst, 1161); #if LJ_HASJIT - dasm_put(Dst, 1161, BC_JFORI); + dasm_put(Dst, 1163, BC_JFORI); #endif - dasm_put(Dst, 1164, BC_FORI, LJ_TFALSE, ~LJ_TISNUM+1, 31-3, Dt8(->upvalue), LJ_TTAB, Dt6(->metatable)); - dasm_put(Dst, 1227, LJ_TNIL, DISPATCH_GL(gcroot[GCROOT_MMNAME+MM_metatable]), Dt6(->hmask), LJ_TTAB, Dt5(->hash), Dt6(->node), 31-5, 31-3, DtB(->key), 4+offsetof(Node, key), DtB(->val), 4+offsetof(Node, val), LJ_TSTR, DtB(->next)); - dasm_put(Dst, 1275, LJ_TNIL, LJ_TUDATA, ~LJ_TISNUM+1, 31-2, DISPATCH_GL(gcroot[GCROOT_BASEMT]), LJ_TTAB, Dt6(->metatable), LJ_TTAB, Dt6(->marked), LJ_GC_BLACK, Dt6(->metatable)); - dasm_put(Dst, 1330, DISPATCH_GL(gc.grayagain), DISPATCH_GL(gc.grayagain), Dt6(->marked), Dt6(->gclist), LJ_TTAB, LJ_TSTR, DISPATCH_GL(gcroot[GCROOT_BASEMT_NUM]), Dt1(->base)); - dasm_put(Dst, 1390, DISPATCH_GL(gc.total), DISPATCH_GL(gc.threshold)); + dasm_put(Dst, 1166); +#if LJ_HASJIT + dasm_put(Dst, 1168, BC_JFORI); +#endif + dasm_put(Dst, 1171, BC_FORI, LJ_TFALSE, ~LJ_TISNUM+1, 31-3, Dt8(->upvalue), LJ_TTAB, Dt6(->metatable)); + dasm_put(Dst, 1234, LJ_TNIL, DISPATCH_GL(gcroot[GCROOT_MMNAME+MM_metatable]), Dt6(->hmask), LJ_TTAB, Dt5(->hash), Dt6(->node), 31-5, 31-3, DtB(->key), 4+offsetof(Node, key), DtB(->val), 4+offsetof(Node, val), LJ_TSTR, DtB(->next)); + dasm_put(Dst, 1282, LJ_TNIL, LJ_TUDATA, ~LJ_TISNUM+1, 31-2, DISPATCH_GL(gcroot[GCROOT_BASEMT]), LJ_TTAB, Dt6(->metatable), LJ_TTAB, Dt6(->marked), LJ_GC_BLACK, Dt6(->metatable)); + dasm_put(Dst, 1337, DISPATCH_GL(gc.grayagain), DISPATCH_GL(gc.grayagain), Dt6(->marked), Dt6(->gclist), LJ_TTAB, LJ_TSTR, DISPATCH_GL(gcroot[GCROOT_BASEMT_NUM]), Dt1(->base)); + dasm_put(Dst, 1397, DISPATCH_GL(gc.total), DISPATCH_GL(gc.threshold)); if (LJ_DUALNUM) { - dasm_put(Dst, 1400); + dasm_put(Dst, 1407); } else { - dasm_put(Dst, 1403); + dasm_put(Dst, 1410); } - dasm_put(Dst, 1406, LJ_TSTR, LJ_TTAB, Dt1(->base), Dt1(->top), LJ_TNIL, (2+1)*8, LJ_TTAB); + dasm_put(Dst, 1413, LJ_TSTR, LJ_TTAB, Dt1(->base), Dt1(->top), LJ_TNIL, (2+1)*8, LJ_TTAB); #ifdef LUAJIT_ENABLE_LUA52COMPAT - dasm_put(Dst, 1457, Dt6(->metatable), Dt8(->upvalue[0])); + dasm_put(Dst, 1464, Dt6(->metatable), Dt8(->upvalue[0])); #else - dasm_put(Dst, 1466, Dt8(->upvalue[0])); + dasm_put(Dst, 1473, Dt8(->upvalue[0])); #endif - dasm_put(Dst, 1470, (3+1)*8); + dasm_put(Dst, 1477, (3+1)*8); if (LJ_DUALNUM) { - dasm_put(Dst, 1482); + dasm_put(Dst, 1489); } else { - dasm_put(Dst, 1484); + dasm_put(Dst, 1491); } - dasm_put(Dst, 1486, LJ_TTAB); + dasm_put(Dst, 1493, LJ_TTAB); if (LJ_DUALNUM) { - dasm_put(Dst, 1493); + dasm_put(Dst, 1500); } else { - dasm_put(Dst, 1498); + dasm_put(Dst, 1505); } - dasm_put(Dst, 1510, Dt6(->asize), Dt6(->array)); + dasm_put(Dst, 1517, Dt6(->asize), Dt6(->array)); if (!LJ_DUALNUM) { - dasm_put(Dst, 1515); + dasm_put(Dst, 1522); } - dasm_put(Dst, 1517); + dasm_put(Dst, 1524); if (LJ_DUALNUM) { - dasm_put(Dst, 1521, 31-3); + dasm_put(Dst, 1528, 31-3); } else { - dasm_put(Dst, 1526, 31-3); + dasm_put(Dst, 1533, 31-3); } - dasm_put(Dst, 1530, LJ_TNIL, (0+1)*8, (2+1)*8, Dt6(->hmask), (0+1)*8, (0+1)*8, LJ_TTAB); + dasm_put(Dst, 1537, LJ_TNIL, (0+1)*8, (2+1)*8, Dt6(->hmask), (0+1)*8, (0+1)*8, LJ_TTAB); #ifdef LUAJIT_ENABLE_LUA52COMPAT - dasm_put(Dst, 1578, Dt6(->metatable), Dt8(->upvalue[0])); + dasm_put(Dst, 1585, Dt6(->metatable), Dt8(->upvalue[0])); #else - dasm_put(Dst, 1587, Dt8(->upvalue[0])); + dasm_put(Dst, 1594, Dt8(->upvalue[0])); #endif if (LJ_DUALNUM) { - dasm_put(Dst, 1591); + dasm_put(Dst, 1598); } else { - dasm_put(Dst, 1593); + dasm_put(Dst, 1600); } - dasm_put(Dst, 1595, (3+1)*8, DISPATCH_GL(hookmask), 32-HOOK_ACTIVE_SHIFT, 8+FRAME_PCALL, DISPATCH_GL(hookmask), LJ_TFUNC, 32-HOOK_ACTIVE_SHIFT, 16+FRAME_PCALL, LJ_TTHREAD, Dt1(->status), Dt1(->cframe)); - dasm_put(Dst, 1656, Dt1(->top), LUA_YIELD, Dt1(->base), Dt1(->maxstack), Dt1(->base), Dt1(->top), Dt1(->top), Dt1(->base), LUA_YIELD, Dt1(->top), ~LJ_VMST_INTERP, Dt1(->base), DISPATCH_GL(vmstate)); - dasm_put(Dst, 1718, Dt1(->maxstack), Dt1(->top), FRAME_TYPE, LJ_TTRUE, FRAME_TYPE, LJ_TFALSE, Dt1(->top), (2+1)*8, 32-3); - dasm_put(Dst, 1781, Dt8(->upvalue[0].gcr), Dt1(->status), Dt1(->cframe), Dt1(->top), LUA_YIELD, Dt1(->base), Dt1(->maxstack), Dt1(->base), Dt1(->top), Dt1(->top), Dt1(->base), LUA_YIELD, Dt1(->top), ~LJ_VMST_INTERP); - dasm_put(Dst, 1840, Dt1(->base), DISPATCH_GL(vmstate), Dt1(->maxstack), Dt1(->top), FRAME_TYPE, 32-3, Dt1(->cframe)); - dasm_put(Dst, 1897, Dt1(->base), CFRAME_RESUME, Dt1(->top), LUA_YIELD, Dt1(->cframe), Dt1(->status)); + dasm_put(Dst, 1602, (3+1)*8, DISPATCH_GL(hookmask), 32-HOOK_ACTIVE_SHIFT, 8+FRAME_PCALL, DISPATCH_GL(hookmask), LJ_TFUNC, 32-HOOK_ACTIVE_SHIFT, 16+FRAME_PCALL, LJ_TTHREAD, Dt1(->status), Dt1(->cframe)); + dasm_put(Dst, 1663, Dt1(->top), LUA_YIELD, Dt1(->base), Dt1(->maxstack), Dt1(->base), Dt1(->top), Dt1(->top), Dt1(->base), LUA_YIELD, Dt1(->top), ~LJ_VMST_INTERP, Dt1(->base), DISPATCH_GL(vmstate)); + dasm_put(Dst, 1725, Dt1(->maxstack), Dt1(->top), FRAME_TYPE, LJ_TTRUE, FRAME_TYPE, LJ_TFALSE, Dt1(->top), (2+1)*8, 32-3); + dasm_put(Dst, 1788, Dt8(->upvalue[0].gcr), Dt1(->status), Dt1(->cframe), Dt1(->top), LUA_YIELD, Dt1(->base), Dt1(->maxstack), Dt1(->base), Dt1(->top), Dt1(->top), Dt1(->base), LUA_YIELD, Dt1(->top), ~LJ_VMST_INTERP); + dasm_put(Dst, 1847, Dt1(->base), DISPATCH_GL(vmstate), Dt1(->maxstack), Dt1(->top), FRAME_TYPE, 32-3, Dt1(->cframe)); + dasm_put(Dst, 1904, Dt1(->base), CFRAME_RESUME, Dt1(->top), LUA_YIELD, Dt1(->cframe), Dt1(->status)); if (LJ_DUALNUM) { - dasm_put(Dst, 1922); + dasm_put(Dst, 1929); } - dasm_put(Dst, 1943, (1+1)*8, FRAME_TYPE); + dasm_put(Dst, 1950, (1+1)*8, FRAME_TYPE); if (LJ_DUALNUM) { - dasm_put(Dst, 1985, 31-11, 32-21, 31-11); - dasm_put(Dst, 2067, 31-11, 32-21, 31-11); + dasm_put(Dst, 1992, 31-11, 32-21, 31-11); + dasm_put(Dst, 2074, 31-11, 32-21, 31-11); } else { - dasm_put(Dst, 2121); + dasm_put(Dst, 2128); } - dasm_put(Dst, 2148); - dasm_put(Dst, 2207); - dasm_put(Dst, 2265); - dasm_put(Dst, 2321, Dt8(->upvalue[0])); - dasm_put(Dst, 2387); + dasm_put(Dst, 2155); + dasm_put(Dst, 2214); + dasm_put(Dst, 2272); + dasm_put(Dst, 2328, Dt8(->upvalue[0])); + dasm_put(Dst, 2394); if (LJ_DUALNUM) { - dasm_put(Dst, 2391); + dasm_put(Dst, 2398); } else { - dasm_put(Dst, 2406); + dasm_put(Dst, 2413); } - dasm_put(Dst, 2424, DISPATCH_GL(tmptv), DISPATCH_GL(tmptv)); + dasm_put(Dst, 2431, DISPATCH_GL(tmptv), DISPATCH_GL(tmptv)); if (!LJ_DUALNUM) { - dasm_put(Dst, 2446); + dasm_put(Dst, 2453); } - dasm_put(Dst, 2451, (2+1)*8); + dasm_put(Dst, 2458, (2+1)*8); if (LJ_DUALNUM) { - dasm_put(Dst, 2455); + dasm_put(Dst, 2462); } else { - dasm_put(Dst, 2458); + dasm_put(Dst, 2465); } - dasm_put(Dst, 2460, (2+1)*8); + dasm_put(Dst, 2467, (2+1)*8); if (LJ_DUALNUM) { - dasm_put(Dst, 2482); + dasm_put(Dst, 2489); } else { - dasm_put(Dst, 2551); + dasm_put(Dst, 2558); } if (LJ_DUALNUM) { - dasm_put(Dst, 2576); + dasm_put(Dst, 2583); } else { - dasm_put(Dst, 2645); + dasm_put(Dst, 2652); } - dasm_put(Dst, 2670, LJ_TSTR, Dt5(->len), LJ_TSTR, Dt5(->len)); + dasm_put(Dst, 2677, LJ_TSTR, Dt5(->len), LJ_TSTR, Dt5(->len)); if (LJ_DUALNUM) { - dasm_put(Dst, 2697, Dt5([1]), (0+1)*8); + dasm_put(Dst, 2704, Dt5([1]), (0+1)*8); } else { - dasm_put(Dst, 2709, Dt5([1]), 31-3); + dasm_put(Dst, 2716, Dt5([1]), 31-3); } - dasm_put(Dst, 2725, DISPATCH_GL(gc.total), DISPATCH_GL(gc.threshold)); + dasm_put(Dst, 2732, DISPATCH_GL(gc.total), DISPATCH_GL(gc.threshold)); if (LJ_DUALNUM) { - dasm_put(Dst, 2736); + dasm_put(Dst, 2743); } else { - dasm_put(Dst, 2744); + dasm_put(Dst, 2751); } - dasm_put(Dst, 2755, Dt1(->base), Dt1(->base), LJ_TSTR, DISPATCH_GL(gc.total), DISPATCH_GL(gc.threshold)); + dasm_put(Dst, 2762, Dt1(->base), Dt1(->base), LJ_TSTR, DISPATCH_GL(gc.total), DISPATCH_GL(gc.threshold)); if (!LJ_DUALNUM) { - dasm_put(Dst, 2783); + dasm_put(Dst, 2790); } - dasm_put(Dst, 2785); + dasm_put(Dst, 2792); if (LJ_DUALNUM) { - dasm_put(Dst, 2791); + dasm_put(Dst, 2798); } else { - dasm_put(Dst, 2793); + dasm_put(Dst, 2800); } - dasm_put(Dst, 2795); + dasm_put(Dst, 2802); if (LJ_DUALNUM) { - dasm_put(Dst, 2799); + dasm_put(Dst, 2806); } else { - dasm_put(Dst, 2808); + dasm_put(Dst, 2815); } - dasm_put(Dst, 2819, LJ_TSTR); + dasm_put(Dst, 2826, LJ_TSTR); if (!LJ_DUALNUM) { - dasm_put(Dst, 2824); + dasm_put(Dst, 2831); } - dasm_put(Dst, 2828, Dt5(->len), sizeof(GCstr)-1, DISPATCH_GL(gc.total), DISPATCH_GL(gc.threshold)); + dasm_put(Dst, 2835, Dt5(->len), sizeof(GCstr)-1, DISPATCH_GL(gc.total), DISPATCH_GL(gc.threshold)); if (LJ_DUALNUM) { - dasm_put(Dst, 2878); + dasm_put(Dst, 2885); } else { - dasm_put(Dst, 2880); + dasm_put(Dst, 2887); } - dasm_put(Dst, 2882, LJ_TSTR); + dasm_put(Dst, 2889, LJ_TSTR); if (LJ_DUALNUM) { - dasm_put(Dst, 2889); + dasm_put(Dst, 2896); } else { - dasm_put(Dst, 2893); + dasm_put(Dst, 2900); } - dasm_put(Dst, 2900, Dt5(->len), DISPATCH_GL(tmpbuf.sz), Dt5([1]), DISPATCH_GL(tmpbuf.buf), DISPATCH_GL(strempty), LJ_TSTR, DISPATCH_GL(gc.total), DISPATCH_GL(gc.threshold), LJ_TSTR, DISPATCH_GL(tmpbuf.sz)); - dasm_put(Dst, 2953, Dt5(->len), sizeof(GCstr), DISPATCH_GL(tmpbuf.buf), DISPATCH_GL(gc.total), DISPATCH_GL(gc.threshold), LJ_TSTR, DISPATCH_GL(tmpbuf.sz), Dt5(->len), sizeof(GCstr), DISPATCH_GL(tmpbuf.buf)); - dasm_put(Dst, 3011, DISPATCH_GL(gc.total), DISPATCH_GL(gc.threshold), LJ_TSTR, DISPATCH_GL(tmpbuf.sz), Dt5(->len), sizeof(GCstr), DISPATCH_GL(tmpbuf.buf), LJ_TTAB); + dasm_put(Dst, 2907, Dt5(->len), DISPATCH_GL(tmpbuf.sz), Dt5([1]), DISPATCH_GL(tmpbuf.buf), DISPATCH_GL(strempty), LJ_TSTR, DISPATCH_GL(gc.total), DISPATCH_GL(gc.threshold), LJ_TSTR, DISPATCH_GL(tmpbuf.sz)); + dasm_put(Dst, 2960, Dt5(->len), sizeof(GCstr), DISPATCH_GL(tmpbuf.buf), DISPATCH_GL(gc.total), DISPATCH_GL(gc.threshold), LJ_TSTR, DISPATCH_GL(tmpbuf.sz), Dt5(->len), sizeof(GCstr), DISPATCH_GL(tmpbuf.buf)); + dasm_put(Dst, 3018, DISPATCH_GL(gc.total), DISPATCH_GL(gc.threshold), LJ_TSTR, DISPATCH_GL(tmpbuf.sz), Dt5(->len), sizeof(GCstr), DISPATCH_GL(tmpbuf.buf), LJ_TTAB); if (LJ_DUALNUM) { - dasm_put(Dst, 3080); + dasm_put(Dst, 3087); } else { - dasm_put(Dst, 3090); + dasm_put(Dst, 3097); } - dasm_put(Dst, 3103); + dasm_put(Dst, 3110); if (LJ_DUALNUM) { - dasm_put(Dst, 3109); + dasm_put(Dst, 3116); } else { - dasm_put(Dst, 3111); + dasm_put(Dst, 3118); } - dasm_put(Dst, 3113); - if (LJ_DUALNUM) { - dasm_put(Dst, 3117); - } else { dasm_put(Dst, 3120); - } - dasm_put(Dst, 3126); if (LJ_DUALNUM) { - dasm_put(Dst, 3131); + dasm_put(Dst, 3124); } else { - dasm_put(Dst, 3141); + dasm_put(Dst, 3127); } - dasm_put(Dst, 3154); + dasm_put(Dst, 3133); if (LJ_DUALNUM) { - dasm_put(Dst, 3160); + dasm_put(Dst, 3138); } else { - dasm_put(Dst, 3162); + dasm_put(Dst, 3148); } - dasm_put(Dst, 3164); + dasm_put(Dst, 3161); if (LJ_DUALNUM) { - dasm_put(Dst, 3168); + dasm_put(Dst, 3167); } else { + dasm_put(Dst, 3169); + } dasm_put(Dst, 3171); - } - dasm_put(Dst, 3177); if (LJ_DUALNUM) { - dasm_put(Dst, 3182); + dasm_put(Dst, 3175); } else { - dasm_put(Dst, 3192); + dasm_put(Dst, 3178); } - dasm_put(Dst, 3205); + dasm_put(Dst, 3184); if (LJ_DUALNUM) { - dasm_put(Dst, 3211); + dasm_put(Dst, 3189); } else { - dasm_put(Dst, 3213); + dasm_put(Dst, 3199); } - dasm_put(Dst, 3215); + dasm_put(Dst, 3212); if (LJ_DUALNUM) { - dasm_put(Dst, 3219); + dasm_put(Dst, 3218); } else { + dasm_put(Dst, 3220); + } dasm_put(Dst, 3222); - } - dasm_put(Dst, 3228); if (LJ_DUALNUM) { - dasm_put(Dst, 3233); + dasm_put(Dst, 3226); } else { - dasm_put(Dst, 3243); + dasm_put(Dst, 3229); } - dasm_put(Dst, 3256); + dasm_put(Dst, 3235); if (LJ_DUALNUM) { + dasm_put(Dst, 3240); + } else { + dasm_put(Dst, 3250); + } dasm_put(Dst, 3263); + if (LJ_DUALNUM) { + dasm_put(Dst, 3270); } else { - dasm_put(Dst, 3273); + dasm_put(Dst, 3280); } - dasm_put(Dst, 3286); + dasm_put(Dst, 3293); if (LJ_DUALNUM) { - dasm_put(Dst, 3290); + dasm_put(Dst, 3297); } else { - dasm_put(Dst, 3305); + dasm_put(Dst, 3312); } - dasm_put(Dst, 3326); + dasm_put(Dst, 3333); if (LJ_DUALNUM) { - dasm_put(Dst, 3331); + dasm_put(Dst, 3338); } else { - dasm_put(Dst, 3346); + dasm_put(Dst, 3353); } - dasm_put(Dst, 3367); + dasm_put(Dst, 3374); if (LJ_DUALNUM) { - dasm_put(Dst, 3372); + dasm_put(Dst, 3379); } else { - dasm_put(Dst, 3387); + dasm_put(Dst, 3394); } - dasm_put(Dst, 3408); + dasm_put(Dst, 3415); if (LJ_DUALNUM) { - dasm_put(Dst, 3413); + dasm_put(Dst, 3420); } else { - dasm_put(Dst, 3428); + dasm_put(Dst, 3435); } - dasm_put(Dst, 3449); + dasm_put(Dst, 3456); if (LJ_DUALNUM) { - dasm_put(Dst, 3453); + dasm_put(Dst, 3460); } else { - dasm_put(Dst, 3468); + dasm_put(Dst, 3475); } - dasm_put(Dst, 3489); + dasm_put(Dst, 3496); if (LJ_DUALNUM) { - dasm_put(Dst, 3494); + dasm_put(Dst, 3501); } else { - dasm_put(Dst, 3504); + dasm_put(Dst, 3511); } if (LJ_DUALNUM) { - dasm_put(Dst, 3517); + dasm_put(Dst, 3524); } else { - dasm_put(Dst, 3520); + dasm_put(Dst, 3527); } - dasm_put(Dst, 3526); + dasm_put(Dst, 3533); if (LJ_DUALNUM) { - dasm_put(Dst, 3534); + dasm_put(Dst, 3541); } - dasm_put(Dst, 3542); + dasm_put(Dst, 3549); if (LJ_DUALNUM) { - dasm_put(Dst, 3544); + dasm_put(Dst, 3551); } - dasm_put(Dst, 3552, Dt8(->f), 8*LUA_MINSTACK, Dt1(->maxstack), Dt1(->base), Dt1(->top), Dt1(->base), 31-3, Dt1(->top), Dt7(->pc), FRAME_TYPE, LUA_MINSTACK); - dasm_put(Dst, 3615, Dt1(->base), Dt1(->base), Dt1(->top), Dt1(->base), Dt1(->top)); + dasm_put(Dst, 3559, Dt8(->f), 8*LUA_MINSTACK, Dt1(->maxstack), Dt1(->base), Dt1(->top), Dt1(->base), 31-3, Dt1(->top), Dt7(->pc), FRAME_TYPE, LUA_MINSTACK); + dasm_put(Dst, 3622, Dt1(->base), Dt1(->base), Dt1(->top), Dt1(->base), Dt1(->top)); #if LJ_HASJIT - dasm_put(Dst, 3641, DISPATCH_GL(hookmask), HOOK_VMEVENT, DISPATCH_GL(hookcount), HOOK_ACTIVE, LUA_MASKLINE|LUA_MASKCOUNT, DISPATCH_GL(hookcount)); + dasm_put(Dst, 3648, DISPATCH_GL(hookmask), HOOK_VMEVENT, DISPATCH_GL(hookcount), HOOK_ACTIVE, LUA_MASKLINE|LUA_MASKCOUNT, DISPATCH_GL(hookcount)); #endif - dasm_put(Dst, 3663, DISPATCH_GL(hookmask), HOOK_ACTIVE, GG_DISP2STATIC, DISPATCH_GL(hookmask), DISPATCH_GL(hookcount), HOOK_ACTIVE, 31-LUA_HOOKLINE, DISPATCH_GL(hookcount), Dt1(->base), Dt1(->base)); - dasm_put(Dst, 3710, GG_DISP2STATIC); + dasm_put(Dst, 3670, DISPATCH_GL(hookmask), HOOK_ACTIVE, GG_DISP2STATIC, DISPATCH_GL(hookmask), DISPATCH_GL(hookcount), HOOK_ACTIVE, 31-LUA_HOOKLINE, DISPATCH_GL(hookcount), Dt1(->base), Dt1(->base)); + dasm_put(Dst, 3717, GG_DISP2STATIC); #if LJ_HASJIT - dasm_put(Dst, 3728, GG_DISP2J, Dt7(->pc), DISPATCH_J(L), PC2PROTO(framesize), Dt1(->base), 31-3, Dt1(->top)); + dasm_put(Dst, 3735, GG_DISP2J, Dt7(->pc), DISPATCH_J(L), PC2PROTO(framesize), Dt1(->base), 31-3, Dt1(->top)); #endif - dasm_put(Dst, 3751); + dasm_put(Dst, 3758); #if LJ_HASJIT - dasm_put(Dst, 3754); + dasm_put(Dst, 3761); #endif - dasm_put(Dst, 3757); + dasm_put(Dst, 3764); #if LJ_HASJIT - dasm_put(Dst, 3759); + dasm_put(Dst, 3766); #endif - dasm_put(Dst, 3762, Dt1(->base), Dt1(->top), Dt1(->base), Dt1(->top)); + dasm_put(Dst, 3769, Dt1(->base), Dt1(->top), Dt1(->base), Dt1(->top)); #if LJ_HASJIT - dasm_put(Dst, 3785, -(16+32*8+32*4), 16+32*8+2*4, -GG_DISP2G-32768, ~LJ_VMST_EXIT, 16+32*8+32*4, DISPATCH_GL(vmstate), 16+0*8, 16+1*8, 16+2*8, 16+3*8, 16+4*8, 16+5*8, 16+6*8, 16+7*8, 16+32*8+32*4, 16+8*8, 16+9*8, 16+10*8, 16+11*8, 16+32*8+1*4, 16+12*8, 16+13*8); - dasm_put(Dst, 3832, 16+14*8, 16+15*8, 16+16*8, 16+17*8, 16+18*8, 16+19*8, 16+32*8+0*4, 16+20*8, 16+21*8, 16+22*8, 16+23*8, 16+24*8, 16+25*8, 16+26*8, 16+27*8, DISPATCH_GL(jit_L), 16+28*8, 16+29*8, 16+30*8, 16+31*8, DISPATCH_GL(jit_base), 32-2); - dasm_put(Dst, 3881, DISPATCH_J(L), DISPATCH_GL(jit_L), DISPATCH_J(parent), Dt1(->base), GG_DISP2J, DISPATCH_J(exitno), Dt1(->cframe), Dt1(->base)); + dasm_put(Dst, 3792, -(16+32*8+32*4), 16+32*8+2*4, -GG_DISP2G-32768, ~LJ_VMST_EXIT, 16+32*8+32*4, DISPATCH_GL(vmstate), 16+0*8, 16+1*8, 16+2*8, 16+3*8, 16+4*8, 16+5*8, 16+6*8, 16+7*8, 16+32*8+32*4, 16+8*8, 16+9*8, 16+10*8, 16+11*8, 16+32*8+1*4, 16+12*8, 16+13*8); + dasm_put(Dst, 3839, 16+14*8, 16+15*8, 16+16*8, 16+17*8, 16+18*8, 16+19*8, 16+32*8+0*4, 16+20*8, 16+21*8, 16+22*8, 16+23*8, 16+24*8, 16+25*8, 16+26*8, 16+27*8, DISPATCH_GL(jit_L), 16+28*8, 16+29*8, 16+30*8, 16+31*8, DISPATCH_GL(jit_base), 32-2); + dasm_put(Dst, 3888, DISPATCH_J(L), DISPATCH_GL(jit_L), DISPATCH_J(parent), Dt1(->base), GG_DISP2J, DISPATCH_J(exitno), Dt1(->cframe), Dt1(->base)); #endif - dasm_put(Dst, 3909); + dasm_put(Dst, 3916); #if LJ_HASJIT - dasm_put(Dst, 3911, -GG_DISP2G-32768, 31-3, Dt7(->pc), DISPATCH_GL(jit_L), PC2PROTO(k), LJ_TISNUM, LJ_TNIL, DISPATCH_GL(vmstate), BC_FUNCF*4); + dasm_put(Dst, 3918, -GG_DISP2G-32768, 31-3, Dt7(->pc), DISPATCH_GL(jit_L), PC2PROTO(k), LJ_TISNUM, LJ_TNIL, DISPATCH_GL(vmstate), BC_FUNCF*4); #endif - dasm_put(Dst, 3968); + dasm_put(Dst, 3975); #if LJ_HASJIT - dasm_put(Dst, 3976); + dasm_put(Dst, 3983); #endif - dasm_put(Dst, 3979); + dasm_put(Dst, 3986); #if LJ_HASJIT - dasm_put(Dst, 4059); + dasm_put(Dst, 4066); #else - dasm_put(Dst, 4081); + dasm_put(Dst, 4088); #endif - dasm_put(Dst, 4083); + dasm_put(Dst, 4090); #if LJ_HASFFI -#define DtE(_V) (int)(ptrdiff_t)&(((CCallState *)0)_V) - dasm_put(Dst, 4085, DtE(->spadj), DtE(->nsp), DtE(->nfpr), DtE(->stack), 31-2, DtE(->fpr[0]), DtE(->fpr[1]), DtE(->fpr[2]), DtE(->fpr[3]), DtE(->fpr[4]), DtE(->fpr[5]), DtE(->fpr[6]), DtE(->fpr[7]), DtE(->func), DtE(->gpr[1]), DtE(->gpr[2])); - dasm_put(Dst, 4143, DtE(->gpr[3]), DtE(->gpr[4]), DtE(->gpr[5]), DtE(->gpr[6]), DtE(->gpr[7]), DtE(->gpr[0]), DtE(->gpr[0]), DtE(->fpr[0]), DtE(->gpr[1]), DtE(->gpr[2]), DtE(->gpr[3])); +#define DtE(_V) (int)(ptrdiff_t)&(((CTState *)0)_V) + dasm_put(Dst, 4092, 56+(14-14)*4, 128+(14-14)*8, 56+(15-14)*4, 128+(15-14)*8, 56+(16-14)*4, 128+(16-14)*8, 56+(17-14)*4, 128+(17-14)*8, 56+(18-14)*4, 128+(18-14)*8, 56+(19-14)*4, 128+(19-14)*8, 56+(20-14)*4, 128+(20-14)*8, 56+(21-14)*4, 128+(21-14)*8, 56+(22-14)*4, 128+(22-14)*8, 56+(23-14)*4, 128+(23-14)*8, 56+(24-14)*4, 128+(24-14)*8); + dasm_put(Dst, 4140, 56+(25-14)*4, 128+(25-14)*8, 56+(26-14)*4, 128+(26-14)*8, 56+(27-14)*4, 128+(27-14)*8, 56+(28-14)*4, 128+(28-14)*8, 56+(29-14)*4, 128+(29-14)*8, 56+(30-14)*4, 128+(30-14)*8, 56+(31-14)*4, 128+(31-14)*8, Dt2(->ctype_state), GG_G2DISP, DtE(->cb.slot), DtE(->cb.gpr[0]), DtE(->cb.fpr[0]), DtE(->cb.gpr[1]), DtE(->cb.fpr[1]), DtE(->cb.gpr[2])); + dasm_put(Dst, 4187, DtE(->cb.fpr[2]), DtE(->cb.gpr[3]), DtE(->cb.fpr[3]), DtE(->cb.gpr[4]), DtE(->cb.fpr[4]), DtE(->cb.gpr[5]), DtE(->cb.fpr[5]), DtE(->cb.gpr[6]), DtE(->cb.fpr[6]), DtE(->cb.gpr[7]), DtE(->cb.fpr[7]), 272+8, DtE(->cb.stack), Dt1(->base), LJ_TISNUM, Dt1(->top), LJ_TNIL, ~LJ_VMST_INTERP, DISPATCH_GL(vmstate), Dt7(->pc)); +#endif + dasm_put(Dst, 4251); +#if LJ_HASFFI + dasm_put(Dst, 4253, DISPATCH_GL(ctype_state), Dt1(->base), Dt1(->top), DtE(->L), DtE(->cb.gpr[0]), DtE(->cb.fpr[0]), DtE(->cb.gpr[1])); +#endif + dasm_put(Dst, 4274); +#if LJ_HASFFI +#define DtF(_V) (int)(ptrdiff_t)&(((CCallState *)0)_V) + dasm_put(Dst, 4276, DtF(->spadj), DtF(->nsp), DtF(->nfpr), DtF(->stack), 31-2, DtF(->fpr[0]), DtF(->fpr[1]), DtF(->fpr[2]), DtF(->fpr[3]), DtF(->fpr[4]), DtF(->fpr[5]), DtF(->fpr[6]), DtF(->fpr[7]), DtF(->func), DtF(->gpr[1]), DtF(->gpr[2])); + dasm_put(Dst, 4334, DtF(->gpr[3]), DtF(->gpr[4]), DtF(->gpr[5]), DtF(->gpr[6]), DtF(->gpr[7]), DtF(->gpr[0]), DtF(->gpr[0]), DtF(->fpr[0]), DtF(->gpr[1]), DtF(->gpr[2]), DtF(->gpr[3])); #endif } @@ -8360,7 +8579,7 @@ static void build_subroutines(BuildCtx *ctx) static void build_ins(BuildCtx *ctx, BCOp op, int defop) { int vk = 0; - dasm_put(Dst, 4175, defop); + dasm_put(Dst, 4366, defop); switch (op) { @@ -8370,224 +8589,224 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop) case BC_ISLT: case BC_ISGE: case BC_ISLE: case BC_ISGT: if (LJ_DUALNUM) { - dasm_put(Dst, 4177, -(BCBIAS_J*4 >> 16)); + dasm_put(Dst, 4368, -(BCBIAS_J*4 >> 16)); if (op == BC_ISLT) { - dasm_put(Dst, 4194); + dasm_put(Dst, 4385); } else if (op == BC_ISGE) { - dasm_put(Dst, 4197); + dasm_put(Dst, 4388); } else if (op == BC_ISLE) { - dasm_put(Dst, 4200); + dasm_put(Dst, 4391); } else { - dasm_put(Dst, 4203); + dasm_put(Dst, 4394); } - dasm_put(Dst, 4206); + dasm_put(Dst, 4397); if (op == BC_ISLT) { - dasm_put(Dst, 4245); + dasm_put(Dst, 4436); } else if (op == BC_ISGE) { - dasm_put(Dst, 4248); + dasm_put(Dst, 4439); } else if (op == BC_ISLE) { - dasm_put(Dst, 4251); + dasm_put(Dst, 4442); } else { - dasm_put(Dst, 4255); + dasm_put(Dst, 4446); } - dasm_put(Dst, 4259); + dasm_put(Dst, 4450); } else { - dasm_put(Dst, 4262, -(BCBIAS_J*4 >> 16)); + dasm_put(Dst, 4453, -(BCBIAS_J*4 >> 16)); if (op == BC_ISLT) { - dasm_put(Dst, 4279); + dasm_put(Dst, 4470); } else if (op == BC_ISGE) { - dasm_put(Dst, 4282); + dasm_put(Dst, 4473); } else if (op == BC_ISLE) { - dasm_put(Dst, 4285); + dasm_put(Dst, 4476); } else { - dasm_put(Dst, 4289); + dasm_put(Dst, 4480); } - dasm_put(Dst, 4293); + dasm_put(Dst, 4484); } break; case BC_ISEQV: case BC_ISNEV: vk = op == BC_ISEQV; if (LJ_DUALNUM) { - dasm_put(Dst, 4306, -(BCBIAS_J*4 >> 16)); + dasm_put(Dst, 4497, -(BCBIAS_J*4 >> 16)); if (vk) { - dasm_put(Dst, 4319); + dasm_put(Dst, 4510); } else { - dasm_put(Dst, 4322); + dasm_put(Dst, 4513); } } else { - dasm_put(Dst, 4325, -(BCBIAS_J*4 >> 16)); + dasm_put(Dst, 4516, -(BCBIAS_J*4 >> 16)); if (vk) { - dasm_put(Dst, 4342); + dasm_put(Dst, 4533); } else { - dasm_put(Dst, 4346); + dasm_put(Dst, 4537); } - dasm_put(Dst, 4350); + dasm_put(Dst, 4541); } - dasm_put(Dst, 4362); + dasm_put(Dst, 4553); if (!LJ_DUALNUM) { - dasm_put(Dst, 4364); + dasm_put(Dst, 4555); } if (LJ_HASFFI) { - dasm_put(Dst, 4367, LJ_TCDATA, LJ_TCDATA); + dasm_put(Dst, 4558, LJ_TCDATA, LJ_TCDATA); } - dasm_put(Dst, 4372, ~LJ_TISPRI); + dasm_put(Dst, 4563, ~LJ_TISPRI); if (LJ_HASFFI) { - dasm_put(Dst, 4377); + dasm_put(Dst, 4568); } - dasm_put(Dst, 4379, ~LJ_TISTABUD); + dasm_put(Dst, 4570, ~LJ_TISTABUD); if (LJ_HASFFI) { - dasm_put(Dst, 4382); + dasm_put(Dst, 4573); } - dasm_put(Dst, 4385); + dasm_put(Dst, 4576); if (vk) { - dasm_put(Dst, 4393); + dasm_put(Dst, 4584); } else { - dasm_put(Dst, 4398); + dasm_put(Dst, 4589); } if (LJ_DUALNUM) { - dasm_put(Dst, 4403); + dasm_put(Dst, 4594); } else { - dasm_put(Dst, 4418); + dasm_put(Dst, 4609); } - dasm_put(Dst, 4421, Dt6(->metatable), 1-vk, Dt6(->nomm), 1<metatable), 1-vk, Dt6(->nomm), 1<> 16)); + dasm_put(Dst, 4649, -(BCBIAS_J*4 >> 16)); if (vk) { - dasm_put(Dst, 4466); + dasm_put(Dst, 4657); } else { - dasm_put(Dst, 4468); + dasm_put(Dst, 4659); } - dasm_put(Dst, 4470); + dasm_put(Dst, 4661); break; case BC_ISEQN: case BC_ISNEN: vk = op == BC_ISEQN; if (LJ_DUALNUM) { - dasm_put(Dst, 4482, -(BCBIAS_J*4 >> 16)); + dasm_put(Dst, 4673, -(BCBIAS_J*4 >> 16)); if (vk) { - dasm_put(Dst, 4494); + dasm_put(Dst, 4685); } else { - dasm_put(Dst, 4496); + dasm_put(Dst, 4687); } - dasm_put(Dst, 4498); + dasm_put(Dst, 4689); } else { if (vk) { - dasm_put(Dst, 4505); + dasm_put(Dst, 4696); } else { - dasm_put(Dst, 4507); + dasm_put(Dst, 4698); } - dasm_put(Dst, 4509, -(BCBIAS_J*4 >> 16)); + dasm_put(Dst, 4700, -(BCBIAS_J*4 >> 16)); } if (vk) { - dasm_put(Dst, 4522); + dasm_put(Dst, 4713); if (!LJ_HASFFI) { - dasm_put(Dst, 4527); + dasm_put(Dst, 4718); } } else { - dasm_put(Dst, 4529); + dasm_put(Dst, 4720); if (!LJ_HASFFI) { - dasm_put(Dst, 4533); + dasm_put(Dst, 4724); } - dasm_put(Dst, 4535); + dasm_put(Dst, 4726); } - dasm_put(Dst, 4538); + dasm_put(Dst, 4729); if (LJ_HASFFI) { - dasm_put(Dst, 4549, LJ_TCDATA); + dasm_put(Dst, 4740, LJ_TCDATA); } if (LJ_DUALNUM) { - dasm_put(Dst, 4557); + dasm_put(Dst, 4748); } break; case BC_ISEQP: case BC_ISNEP: vk = op == BC_ISEQP; - dasm_put(Dst, 4581, 32-3); + dasm_put(Dst, 4772, 32-3); if (LJ_HASFFI) { - dasm_put(Dst, 4588, LJ_TCDATA); + dasm_put(Dst, 4779, LJ_TCDATA); } - dasm_put(Dst, 4591); + dasm_put(Dst, 4782); if (LJ_HASFFI) { - dasm_put(Dst, 4593); + dasm_put(Dst, 4784); } - dasm_put(Dst, 4596, -(BCBIAS_J*4 >> 16)); + dasm_put(Dst, 4787, -(BCBIAS_J*4 >> 16)); if (vk) { - dasm_put(Dst, 4602); + dasm_put(Dst, 4793); } else { - dasm_put(Dst, 4604); + dasm_put(Dst, 4795); } - dasm_put(Dst, 4606); + dasm_put(Dst, 4797); break; /* -- Unary test and copy ops ------------------------------------------- */ case BC_ISTC: case BC_ISFC: case BC_IST: case BC_ISF: - dasm_put(Dst, 4618); + dasm_put(Dst, 4809); if (op == BC_IST || op == BC_ISF) { - dasm_put(Dst, 4622, LJ_TTRUE, -(BCBIAS_J*4 >> 16)); + dasm_put(Dst, 4813, LJ_TTRUE, -(BCBIAS_J*4 >> 16)); if (op == BC_IST) { - dasm_put(Dst, 4629); + dasm_put(Dst, 4820); } else { - dasm_put(Dst, 4631); + dasm_put(Dst, 4822); } - dasm_put(Dst, 4633); + dasm_put(Dst, 4824); } else { - dasm_put(Dst, 4635, LJ_TFALSE); + dasm_put(Dst, 4826, LJ_TFALSE); if (op == BC_ISTC) { - dasm_put(Dst, 4640); + dasm_put(Dst, 4831); } else { - dasm_put(Dst, 4643); + dasm_put(Dst, 4834); } - dasm_put(Dst, 4646, -(BCBIAS_J*4 >> 16)); + dasm_put(Dst, 4837, -(BCBIAS_J*4 >> 16)); } - dasm_put(Dst, 4653); + dasm_put(Dst, 4844); break; /* -- Unary ops --------------------------------------------------------- */ case BC_MOV: - dasm_put(Dst, 4664); + dasm_put(Dst, 4855); break; case BC_NOT: - dasm_put(Dst, 4677, LJ_TTRUE); + dasm_put(Dst, 4868, LJ_TTRUE); break; case BC_UNM: - dasm_put(Dst, 4693); + dasm_put(Dst, 4884); if (LJ_DUALNUM) { - dasm_put(Dst, 4697); + dasm_put(Dst, 4888); } - dasm_put(Dst, 4725); + dasm_put(Dst, 4916); if (LJ_DUALNUM) { - dasm_put(Dst, 4735); + dasm_put(Dst, 4926); } else { - dasm_put(Dst, 4738); + dasm_put(Dst, 4929); } break; case BC_LEN: - dasm_put(Dst, 4747, LJ_TSTR, Dt5(->len)); + dasm_put(Dst, 4938, LJ_TSTR, Dt5(->len)); if (LJ_DUALNUM) { - dasm_put(Dst, 4757); + dasm_put(Dst, 4948); } else { - dasm_put(Dst, 4762); + dasm_put(Dst, 4953); } - dasm_put(Dst, 4769, LJ_TTAB); + dasm_put(Dst, 4960, LJ_TTAB); #ifdef LUAJIT_ENABLE_LUA52COMPAT - dasm_put(Dst, 4783, Dt6(->metatable)); + dasm_put(Dst, 4974, Dt6(->metatable)); #endif - dasm_put(Dst, 4790); + dasm_put(Dst, 4981); #ifdef LUAJIT_ENABLE_LUA52COMPAT - dasm_put(Dst, 4796, Dt6(->nomm), 1<nomm), 1<base), 32-3, Dt1(->base)); + dasm_put(Dst, 5760, Dt1(->base), 32-3, Dt1(->base)); break; /* -- Constant ops ------------------------------------------------------ */ case BC_KSTR: - dasm_put(Dst, 5599, 32-1, LJ_TSTR); + dasm_put(Dst, 5790, 32-1, LJ_TSTR); break; case BC_KCDATA: #if LJ_HASFFI - dasm_put(Dst, 5618, 32-1, LJ_TCDATA); + dasm_put(Dst, 5809, 32-1, LJ_TCDATA); #endif break; case BC_KSHORT: if (LJ_DUALNUM) { - dasm_put(Dst, 5637, 31-13); + dasm_put(Dst, 5828, 31-13); } else { - dasm_put(Dst, 5653, 31-13, 31-20); + dasm_put(Dst, 5844, 31-13, 31-20); } break; case BC_KNUM: - dasm_put(Dst, 5681); + dasm_put(Dst, 5872); break; case BC_KPRI: - dasm_put(Dst, 5694, 32-3); + dasm_put(Dst, 5885, 32-3); break; case BC_KNIL: - dasm_put(Dst, 5709); + dasm_put(Dst, 5900); break; /* -- Upvalue and function ops ------------------------------------------ */ case BC_UGET: - dasm_put(Dst, 5728, 32-1, offsetof(GCfuncL, uvptr), DtA(->v)); + dasm_put(Dst, 5919, 32-1, offsetof(GCfuncL, uvptr), DtA(->v)); break; case BC_USETV: - dasm_put(Dst, 5749, 32-1, offsetof(GCfuncL, uvptr), DtA(->marked), DtA(->v), LJ_GC_BLACK, DtA(->closed), -(LJ_TISNUM+1), LJ_TISGCV - (LJ_TISNUM+1), Dt4(->gch.marked), LJ_GC_WHITES, GG_DISP2G); + dasm_put(Dst, 5940, 32-1, offsetof(GCfuncL, uvptr), DtA(->marked), DtA(->v), LJ_GC_BLACK, DtA(->closed), -(LJ_TISNUM+1), LJ_TISGCV - (LJ_TISNUM+1), Dt4(->gch.marked), LJ_GC_WHITES, GG_DISP2G); break; case BC_USETS: - dasm_put(Dst, 5802, 32-1, 32-1, offsetof(GCfuncL, uvptr), DtA(->marked), DtA(->v), LJ_GC_BLACK, Dt5(->marked), DtA(->closed), LJ_TSTR, LJ_GC_WHITES, GG_DISP2G); + dasm_put(Dst, 5993, 32-1, 32-1, offsetof(GCfuncL, uvptr), DtA(->marked), DtA(->v), LJ_GC_BLACK, Dt5(->marked), DtA(->closed), LJ_TSTR, LJ_GC_WHITES, GG_DISP2G); break; case BC_USETN: - dasm_put(Dst, 5853, 32-1, offsetof(GCfuncL, uvptr), DtA(->v)); + dasm_put(Dst, 6044, 32-1, offsetof(GCfuncL, uvptr), DtA(->v)); break; case BC_USETP: - dasm_put(Dst, 5874, 32-1, 32-3, offsetof(GCfuncL, uvptr), DtA(->v)); + dasm_put(Dst, 6065, 32-1, 32-3, offsetof(GCfuncL, uvptr), DtA(->v)); break; case BC_UCLO: - dasm_put(Dst, 5897, Dt1(->openupval), 32-1, -(BCBIAS_J*4 >> 16), Dt1(->base), Dt1(->base)); + dasm_put(Dst, 6088, Dt1(->openupval), 32-1, -(BCBIAS_J*4 >> 16), Dt1(->base), Dt1(->base)); break; case BC_FNEW: - dasm_put(Dst, 5927, 32-1, Dt1(->base), Dt1(->base), LJ_TFUNC); + dasm_put(Dst, 6118, 32-1, Dt1(->base), Dt1(->base), LJ_TFUNC); break; /* -- Table ops --------------------------------------------------------- */ case BC_TNEW: case BC_TDUP: - dasm_put(Dst, 5955, DISPATCH_GL(gc.total), DISPATCH_GL(gc.threshold), Dt1(->base)); + dasm_put(Dst, 6146, DISPATCH_GL(gc.total), DISPATCH_GL(gc.threshold), Dt1(->base)); if (op == BC_TNEW) { - dasm_put(Dst, 5968); + dasm_put(Dst, 6159); } else { - dasm_put(Dst, 5977, 32-1); + dasm_put(Dst, 6168, 32-1); } - dasm_put(Dst, 5984, Dt1(->base), LJ_TTAB); + dasm_put(Dst, 6175, Dt1(->base), LJ_TTAB); if (op == BC_TNEW) { - dasm_put(Dst, 6001); + dasm_put(Dst, 6192); } - dasm_put(Dst, 6006); + dasm_put(Dst, 6197); break; case BC_GGET: case BC_GSET: - dasm_put(Dst, 6015, 32-1, Dt7(->env)); + dasm_put(Dst, 6206, 32-1, Dt7(->env)); if (op == BC_GGET) { - dasm_put(Dst, 6023); + dasm_put(Dst, 6214); } else { - dasm_put(Dst, 6026); + dasm_put(Dst, 6217); } break; case BC_TGETV: - dasm_put(Dst, 6029); + dasm_put(Dst, 6220); if (LJ_DUALNUM) { - dasm_put(Dst, 6033); + dasm_put(Dst, 6224); } else { - dasm_put(Dst, 6035); + dasm_put(Dst, 6226); } - dasm_put(Dst, 6037, LJ_TTAB); + dasm_put(Dst, 6228, LJ_TTAB); if (LJ_DUALNUM) { - dasm_put(Dst, 6043, Dt6(->asize), Dt6(->array), 31-3); + dasm_put(Dst, 6234, Dt6(->asize), Dt6(->array), 31-3); } else { - dasm_put(Dst, 6053, Dt6(->asize), Dt6(->array), 31-3); + dasm_put(Dst, 6244, Dt6(->asize), Dt6(->array), 31-3); } - dasm_put(Dst, 6070, LJ_TNIL, Dt6(->metatable), Dt6(->nomm), 1<metatable), Dt6(->nomm), 1<hmask), Dt5(->hash), Dt6(->node), 31-5, 31-3, DtB(->key), 4+offsetof(Node, key), DtB(->val), 4+offsetof(Node, val), LJ_TSTR, LJ_TNIL, DtB(->next)); - dasm_put(Dst, 6176, LJ_TNIL, Dt6(->metatable), Dt6(->nomm), 1<hmask), Dt5(->hash), Dt6(->node), 31-5, 31-3, DtB(->key), 4+offsetof(Node, key), DtB(->val), 4+offsetof(Node, val), LJ_TSTR, LJ_TNIL, DtB(->next)); + dasm_put(Dst, 6367, LJ_TNIL, Dt6(->metatable), Dt6(->nomm), 1<asize), Dt6(->array), LJ_TNIL, Dt6(->metatable), Dt6(->nomm), 1<asize), Dt6(->array), LJ_TNIL, Dt6(->metatable), Dt6(->nomm), 1<asize), Dt6(->array), 31-3); + dasm_put(Dst, 6449, Dt6(->asize), Dt6(->array), 31-3); } else { - dasm_put(Dst, 6268, Dt6(->asize), Dt6(->array), 31-3); + dasm_put(Dst, 6459, Dt6(->asize), Dt6(->array), 31-3); } - dasm_put(Dst, 6285, Dt6(->marked), LJ_TNIL, LJ_GC_BLACK, Dt6(->metatable), Dt6(->nomm), 1<marked), LJ_TNIL, LJ_GC_BLACK, Dt6(->metatable), Dt6(->nomm), 1<marked), Dt6(->gclist)); + dasm_put(Dst, 6525, DISPATCH_GL(gc.grayagain), DISPATCH_GL(gc.grayagain), Dt6(->marked), Dt6(->gclist)); break; - dasm_put(Dst, 6349, LJ_TSTR, LJ_TNIL); + dasm_put(Dst, 6540, LJ_TSTR, LJ_TNIL); case BC_TSETS: - dasm_put(Dst, 6375, 32-1, LJ_TTAB, Dt6(->hmask), Dt5(->hash), Dt6(->node), Dt6(->nomm), 31-5, 31-3, Dt6(->marked), DtB(->key), 4+offsetof(Node, key), DtB(->val), 4+offsetof(Node, val), LJ_TSTR, LJ_TNIL); - dasm_put(Dst, 6426, LJ_GC_BLACK, DtB(->val), Dt6(->metatable), Dt6(->nomm), 1<next), Dt6(->metatable), DISPATCH_GL(tmptv), Dt1(->base), Dt6(->nomm), 1<base), DISPATCH_GL(gc.grayagain), DISPATCH_GL(gc.grayagain), Dt6(->marked), Dt6(->gclist)); + dasm_put(Dst, 6566, 32-1, LJ_TTAB, Dt6(->hmask), Dt5(->hash), Dt6(->node), Dt6(->nomm), 31-5, 31-3, Dt6(->marked), DtB(->key), 4+offsetof(Node, key), DtB(->val), 4+offsetof(Node, val), LJ_TSTR, LJ_TNIL); + dasm_put(Dst, 6617, LJ_GC_BLACK, DtB(->val), Dt6(->metatable), Dt6(->nomm), 1<next), Dt6(->metatable), DISPATCH_GL(tmptv), Dt1(->base), Dt6(->nomm), 1<base), DISPATCH_GL(gc.grayagain), DISPATCH_GL(gc.grayagain), Dt6(->marked), Dt6(->gclist)); break; case BC_TSETB: - dasm_put(Dst, 6507, 32-3, LJ_TTAB, Dt6(->asize), Dt6(->array), Dt6(->marked), LJ_TNIL, LJ_GC_BLACK, Dt6(->metatable), Dt6(->nomm), 1<marked), Dt6(->gclist)); + dasm_put(Dst, 6698, 32-3, LJ_TTAB, Dt6(->asize), Dt6(->array), Dt6(->marked), LJ_TNIL, LJ_GC_BLACK, Dt6(->metatable), Dt6(->nomm), 1<marked), Dt6(->gclist)); break; case BC_TSETM: - dasm_put(Dst, 6575, 32-3, Dt6(->asize), 31-3, Dt6(->marked), Dt6(->array), LJ_GC_BLACK, Dt1(->base), DISPATCH_GL(gc.grayagain), DISPATCH_GL(gc.grayagain), Dt6(->marked), Dt6(->gclist)); - dasm_put(Dst, 6644); + dasm_put(Dst, 6766, 32-3, Dt6(->asize), 31-3, Dt6(->marked), Dt6(->array), LJ_GC_BLACK, Dt1(->base), DISPATCH_GL(gc.grayagain), DISPATCH_GL(gc.grayagain), Dt6(->marked), Dt6(->gclist)); + dasm_put(Dst, 6835); break; /* -- Calls and vararg handling ----------------------------------------- */ case BC_CALLM: - dasm_put(Dst, 6647); + dasm_put(Dst, 6838); break; case BC_CALL: - dasm_put(Dst, 6649, LJ_TFUNC, Dt7(->pc)); + dasm_put(Dst, 6840, LJ_TFUNC, Dt7(->pc)); break; case BC_CALLMT: - dasm_put(Dst, 6670); + dasm_put(Dst, 6861); break; case BC_CALLT: - dasm_put(Dst, 6672, LJ_TFUNC, FRAME_TYPE, Dt7(->ffid), FRAME_VARG, Dt7(->pc), -4-8, Dt7(->pc), PC2PROTO(k), FRAME_TYPEP); - dasm_put(Dst, 6736, FRAME_TYPE); + dasm_put(Dst, 6863, LJ_TFUNC, FRAME_TYPE, Dt7(->ffid), FRAME_VARG, Dt7(->pc), -4-8, Dt7(->pc), PC2PROTO(k), FRAME_TYPEP); + dasm_put(Dst, 6927, FRAME_TYPE); break; case BC_ITERC: - dasm_put(Dst, 6745, LJ_TFUNC, Dt7(->pc)); + dasm_put(Dst, 6936, LJ_TFUNC, Dt7(->pc)); break; case BC_ITERN: #if LJ_HASJIT #endif - dasm_put(Dst, 6772, Dt6(->asize), Dt6(->array), 31-3, LJ_TNIL); + dasm_put(Dst, 6963, Dt6(->asize), Dt6(->array), 31-3, LJ_TNIL); if (LJ_DUALNUM) { - dasm_put(Dst, 6794); + dasm_put(Dst, 6985); } else { - dasm_put(Dst, 6797); + dasm_put(Dst, 6988); } - dasm_put(Dst, 6801, -(BCBIAS_J*4 >> 16)); + dasm_put(Dst, 6992, -(BCBIAS_J*4 >> 16)); if (!LJ_DUALNUM) { - dasm_put(Dst, 6809); + dasm_put(Dst, 7000); } - dasm_put(Dst, 6811, Dt6(->hmask), Dt6(->node), 31-5, 31-3, LJ_TNIL, DtB(->key), -(BCBIAS_J*4 >> 16)); + dasm_put(Dst, 7002, Dt6(->hmask), Dt6(->node), 31-5, 31-3, LJ_TNIL, DtB(->key), -(BCBIAS_J*4 >> 16)); break; case BC_ISNEXT: - dasm_put(Dst, 6867, LJ_TTAB, LJ_TFUNC, LJ_TNIL, Dt8(->ffid), FF_next_N, 32-1, -(BCBIAS_J*4 >> 16), BC_JMP, BC_ITERC, -(BCBIAS_J*4 >> 16)); + dasm_put(Dst, 7058, LJ_TTAB, LJ_TFUNC, LJ_TNIL, Dt8(->ffid), FF_next_N, 32-1, -(BCBIAS_J*4 >> 16), BC_JMP, BC_ITERC, -(BCBIAS_J*4 >> 16)); break; case BC_VARG: - dasm_put(Dst, 6917, FRAME_VARG, Dt1(->maxstack), Dt1(->top), Dt1(->base), 32-3, Dt1(->base)); - dasm_put(Dst, 6997); + dasm_put(Dst, 7108, FRAME_VARG, Dt1(->maxstack), Dt1(->top), Dt1(->base), 32-3, Dt1(->base)); + dasm_put(Dst, 7188); break; /* -- Returns ----------------------------------------------------------- */ case BC_RETM: - dasm_put(Dst, 7003); + dasm_put(Dst, 7194); break; case BC_RET: - dasm_put(Dst, 7005, FRAME_TYPE, FRAME_VARG, Dt7(->pc), PC2PROTO(k), FRAME_TYPEP); + dasm_put(Dst, 7196, FRAME_TYPE, FRAME_VARG, Dt7(->pc), PC2PROTO(k), FRAME_TYPEP); break; case BC_RET0: case BC_RET1: - dasm_put(Dst, 7075, FRAME_TYPE, FRAME_VARG); + dasm_put(Dst, 7266, FRAME_TYPE, FRAME_VARG); if (op == BC_RET1) { - dasm_put(Dst, 7088); + dasm_put(Dst, 7279); } - dasm_put(Dst, 7091, Dt7(->pc), PC2PROTO(k)); + dasm_put(Dst, 7282, Dt7(->pc), PC2PROTO(k)); break; /* -- Loops and branches ------------------------------------------------ */ case BC_FORL: #if LJ_HASJIT - dasm_put(Dst, 7119, GG_DISP2HOT, -HOTCOUNT_LOOP); + dasm_put(Dst, 7310, GG_DISP2HOT, -HOTCOUNT_LOOP); #endif break; @@ -9248,100 +9467,100 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop) case BC_IFORL: vk = (op == BC_IFORL || op == BC_JFORL); if (LJ_DUALNUM) { - dasm_put(Dst, 7129, FORL_IDX*8+4); + dasm_put(Dst, 7320, FORL_IDX*8+4); if (vk) { - dasm_put(Dst, 7134, FORL_STEP*8+4, FORL_STOP*8+4, FORL_IDX*8+4); + dasm_put(Dst, 7325, FORL_STEP*8+4, FORL_STOP*8+4, FORL_IDX*8+4); } else { - dasm_put(Dst, 7148, FORL_STEP*8, FORL_STEP*8+4, FORL_STOP*8, FORL_STOP*8+4); + dasm_put(Dst, 7339, FORL_STEP*8, FORL_STEP*8+4, FORL_STOP*8, FORL_STOP*8+4); } - dasm_put(Dst, 7164, FORL_EXT*8); + dasm_put(Dst, 7355, FORL_EXT*8); if (op != BC_JFORL) { - dasm_put(Dst, 7171, 32-1); + dasm_put(Dst, 7362, 32-1); } - dasm_put(Dst, 7174, FORL_EXT*8+4); + dasm_put(Dst, 7365, FORL_EXT*8+4); if (op != BC_JFORL) { - dasm_put(Dst, 7177); + dasm_put(Dst, 7368); } if (op == BC_FORI) { - dasm_put(Dst, 7179); + dasm_put(Dst, 7370); } else if (op == BC_JFORI) { - dasm_put(Dst, 7182, -(BCBIAS_J*4 >> 16)); + dasm_put(Dst, 7373, -(BCBIAS_J*4 >> 16)); } else if (op == BC_IFORL) { - dasm_put(Dst, 7187, -(BCBIAS_J*4 >> 16)); + dasm_put(Dst, 7378, -(BCBIAS_J*4 >> 16)); } else { - dasm_put(Dst, 7192, BC_JLOOP); + dasm_put(Dst, 7383, BC_JLOOP); } - dasm_put(Dst, 7195); + dasm_put(Dst, 7386); if (vk) { - dasm_put(Dst, 7211); + dasm_put(Dst, 7402); } } if (vk) { if (LJ_DUALNUM) { - dasm_put(Dst, 7218, FORL_IDX*8); + dasm_put(Dst, 7409, FORL_IDX*8); } else { - dasm_put(Dst, 7222); + dasm_put(Dst, 7413); } - dasm_put(Dst, 7224, FORL_STEP*8, FORL_STOP*8, FORL_STEP*8, FORL_IDX*8); + dasm_put(Dst, 7415, FORL_STEP*8, FORL_STOP*8, FORL_STEP*8, FORL_IDX*8); } else { if (LJ_DUALNUM) { - dasm_put(Dst, 7234); + dasm_put(Dst, 7425); } else { - dasm_put(Dst, 7236, FORL_STEP*8, FORL_STOP*8); + dasm_put(Dst, 7427, FORL_STEP*8, FORL_STOP*8); } - dasm_put(Dst, 7245, FORL_IDX*8, FORL_STEP*8, FORL_STOP*8); + dasm_put(Dst, 7436, FORL_IDX*8, FORL_STEP*8, FORL_STOP*8); } - dasm_put(Dst, 7256); + dasm_put(Dst, 7447); if (op != BC_JFORL) { - dasm_put(Dst, 7258, 32-1); + dasm_put(Dst, 7449, 32-1); } - dasm_put(Dst, 7261, FORL_EXT*8); + dasm_put(Dst, 7452, FORL_EXT*8); if (op != BC_JFORL) { - dasm_put(Dst, 7264); + dasm_put(Dst, 7455); } - dasm_put(Dst, 7266); + dasm_put(Dst, 7457); if (op == BC_JFORI) { - dasm_put(Dst, 7268, -(BCBIAS_J*4 >> 16)); + dasm_put(Dst, 7459, -(BCBIAS_J*4 >> 16)); } - dasm_put(Dst, 7271); + dasm_put(Dst, 7462); if (op == BC_FORI) { - dasm_put(Dst, 7274); + dasm_put(Dst, 7465); } else if (op == BC_IFORL) { if (LJ_DUALNUM) { - dasm_put(Dst, 7277); + dasm_put(Dst, 7468); } else { - dasm_put(Dst, 7280); + dasm_put(Dst, 7471); } - dasm_put(Dst, 7283, -(BCBIAS_J*4 >> 16)); + dasm_put(Dst, 7474, -(BCBIAS_J*4 >> 16)); } else if (op == BC_JFORI) { - dasm_put(Dst, 7287); + dasm_put(Dst, 7478); } else { - dasm_put(Dst, 7290, BC_JLOOP); + dasm_put(Dst, 7481, BC_JLOOP); } if (LJ_DUALNUM) { - dasm_put(Dst, 7293); + dasm_put(Dst, 7484); } else { - dasm_put(Dst, 7296); + dasm_put(Dst, 7487); } - dasm_put(Dst, 7308); + dasm_put(Dst, 7499); if (op == BC_FORI) { - dasm_put(Dst, 7310, -(BCBIAS_J*4 >> 16)); + dasm_put(Dst, 7501, -(BCBIAS_J*4 >> 16)); } else if (op == BC_IFORL) { - dasm_put(Dst, 7316); + dasm_put(Dst, 7507); } else if (op == BC_JFORI) { - dasm_put(Dst, 7319); + dasm_put(Dst, 7510); } else { - dasm_put(Dst, 7322, BC_JLOOP); + dasm_put(Dst, 7513, BC_JLOOP); } - dasm_put(Dst, 7325); + dasm_put(Dst, 7516); if (op == BC_JFORI) { - dasm_put(Dst, 7328, BC_JLOOP); + dasm_put(Dst, 7519, BC_JLOOP); } break; case BC_ITERL: #if LJ_HASJIT - dasm_put(Dst, 7334, GG_DISP2HOT, -HOTCOUNT_LOOP); + dasm_put(Dst, 7525, GG_DISP2HOT, -HOTCOUNT_LOOP); #endif break; @@ -9350,40 +9569,40 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop) break; #endif case BC_IITERL: - dasm_put(Dst, 7344, LJ_TNIL); + dasm_put(Dst, 7535, LJ_TNIL); if (op == BC_JITERL) { - dasm_put(Dst, 7351, BC_JLOOP); + dasm_put(Dst, 7542, BC_JLOOP); } else { - dasm_put(Dst, 7356, 32-1, -(BCBIAS_J*4 >> 16)); + dasm_put(Dst, 7547, 32-1, -(BCBIAS_J*4 >> 16)); } - dasm_put(Dst, 7364); + dasm_put(Dst, 7555); break; case BC_LOOP: #if LJ_HASJIT - dasm_put(Dst, 7376, GG_DISP2HOT, -HOTCOUNT_LOOP); + dasm_put(Dst, 7567, GG_DISP2HOT, -HOTCOUNT_LOOP); #endif break; case BC_ILOOP: - dasm_put(Dst, 7386); + dasm_put(Dst, 7577); break; case BC_JLOOP: #if LJ_HASJIT - dasm_put(Dst, 7397, DISPATCH_J(trace), 32-1, DISPATCH_GL(vmstate), DtD(->mcode), DISPATCH_GL(jit_base), DISPATCH_GL(jit_L), GG_DISP2G+32768); + dasm_put(Dst, 7588, DISPATCH_J(trace), 32-1, DISPATCH_GL(vmstate), DtD(->mcode), DISPATCH_GL(jit_base), DISPATCH_GL(jit_L), GG_DISP2G+32768); #endif break; case BC_JMP: - dasm_put(Dst, 7416, 32-1, -(BCBIAS_J*4 >> 16)); + dasm_put(Dst, 7607, 32-1, -(BCBIAS_J*4 >> 16)); break; /* -- Function headers -------------------------------------------------- */ case BC_FUNCF: #if LJ_HASJIT - dasm_put(Dst, 7432, GG_DISP2HOT, -HOTCOUNT_CALL); + dasm_put(Dst, 7623, GG_DISP2HOT, -HOTCOUNT_CALL); #endif case BC_FUNCV: /* NYI: compiled vararg functions. */ break; @@ -9393,42 +9612,42 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop) break; #endif case BC_IFUNCF: - dasm_put(Dst, 7442, Dt1(->maxstack), -4+PC2PROTO(numparams), -4+PC2PROTO(k), 31-3); + dasm_put(Dst, 7633, Dt1(->maxstack), -4+PC2PROTO(numparams), -4+PC2PROTO(k), 31-3); if (op != BC_JFUNCF) { - dasm_put(Dst, 7454); + dasm_put(Dst, 7645); } - dasm_put(Dst, 7457); + dasm_put(Dst, 7648); if (op == BC_JFUNCF) { - dasm_put(Dst, 7462, BC_JLOOP); + dasm_put(Dst, 7653, BC_JLOOP); } else { - dasm_put(Dst, 7466); + dasm_put(Dst, 7657); } - dasm_put(Dst, 7475); + dasm_put(Dst, 7666); break; case BC_JFUNCV: #if !LJ_HASJIT break; #endif - dasm_put(Dst, 7481); + dasm_put(Dst, 7672); break; /* NYI: compiled vararg functions. */ case BC_IFUNCV: - dasm_put(Dst, 7483, Dt1(->maxstack), 8+FRAME_VARG, -4+PC2PROTO(k), -4+PC2PROTO(numparams), LJ_TNIL); + dasm_put(Dst, 7674, 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, 7536, Dt8(->f)); + dasm_put(Dst, 7727, Dt8(->f)); } else { - dasm_put(Dst, 7539, DISPATCH_GL(wrapf)); + dasm_put(Dst, 7730, DISPATCH_GL(wrapf)); } - dasm_put(Dst, 7542, Dt1(->maxstack), Dt1(->base), Dt1(->top), ~LJ_VMST_C); + dasm_put(Dst, 7733, Dt1(->maxstack), Dt1(->base), Dt1(->top), ~LJ_VMST_C); if (op == BC_FUNCCW) { - dasm_put(Dst, 7555, Dt8(->f)); + dasm_put(Dst, 7746, Dt8(->f)); } - dasm_put(Dst, 7558, DISPATCH_GL(vmstate), Dt1(->base), 31-3, Dt1(->top), ~LJ_VMST_INTERP, DISPATCH_GL(vmstate)); + dasm_put(Dst, 7749, DISPATCH_GL(vmstate), Dt1(->base), 31-3, Dt1(->top), ~LJ_VMST_INTERP, DISPATCH_GL(vmstate)); break; /* ---------------------------------------------------------------------- */ @@ -9448,7 +9667,7 @@ static int build_backend(BuildCtx *ctx) build_subroutines(ctx); - dasm_put(Dst, 7579); + dasm_put(Dst, 7770); 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 e104c484..c0668e41 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_PPC + +#define CALLBACK_MCODE_HEAD 24 +#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)) + #else /* Missing support for this architecture. */ @@ -70,8 +77,8 @@ MSize lj_ccallback_ptr2slot(CTState *cts, void *p) return ~0u; /* Not a known callback function pointer. */ } -#if LJ_TARGET_X86ORX64 /* Initialize machine code for callback function pointers. */ +#if LJ_TARGET_X86ORX64 static void callback_mcode_init(global_State *g, uint8_t *page) { uint8_t *p = page; @@ -103,6 +110,25 @@ static void callback_mcode_init(global_State *g, uint8_t *page) } lua_assert(p - page <= CALLBACK_MCODE_SIZE); } +#elif LJ_TARGET_PPC +static void callback_mcode_init(global_State *g, uint32_t *page) +{ + uint32_t *p = page; + void *target = (void *)lj_vm_ffi_callback; + MSize slot; + *p++ = PPCI_LIS | PPCF_T(RID_TMP) | (u32ptr(target) >> 16); + *p++ = PPCI_LIS | PPCF_T(RID_R12) | (u32ptr(g) >> 16); + *p++ = PPCI_ORI | PPCF_A(RID_TMP)|PPCF_T(RID_TMP) | (u32ptr(target) & 0xffff); + *p++ = PPCI_ORI | PPCF_A(RID_R12)|PPCF_T(RID_R12) | (u32ptr(g) & 0xffff); + *p++ = PPCI_MTCTR | PPCF_T(RID_TMP); + *p++ = PPCI_BCTR; + for (slot = 0; slot < CALLBACK_MAX_SLOT; slot++) { + *p++ = PPCI_LI | PPCF_T(RID_R11) | slot; + *p = PPCI_B | (((page-p) & 0x00ffffffu) << 2); + p++; + } + lua_assert(p - page <= CALLBACK_MCODE_SIZE); +} #else /* Missing support for this architecture. */ #define callback_mcode_init(g, p) UNUSED(p) @@ -224,8 +250,28 @@ void lj_ccallback_mcode_free(CTState *cts) #elif LJ_TARGET_PPC #define CALLBACK_HANDLE_REGARG \ - UNUSED(ngpr); UNUSED(nfpr); UNUSED(maxgpr); goto done; /* NYI */ -#define CALLBACK_HANDLE_RET /* NYI */ + if (isfp) { \ + if (nfpr + 1 <= CCALL_NARG_FPR) { \ + sp = &cts->cb.fpr[nfpr]; \ + nfpr += 1; \ + cta = ctype_get(cts, CTID_DOUBLE); /* FPRs always hold doubles. */ \ + goto done; \ + } \ + } else { /* Try to pass argument in GPRs. */ \ + if (n > 1) { \ + lua_assert(ctype_isinteger(cta->info) && n == 2); /* int64_t. */ \ + ngpr = (ngpr + 1u) & ~1u; /* Align int64_t to regpair. */ \ + } \ + if (ngpr + n <= maxgpr) { \ + sp = &cts->cb.gpr[ngpr]; \ + ngpr += n; \ + goto done; \ + } \ + } + +#define CALLBACK_HANDLE_RET \ + if (ctype_isfp(ctr->info) && ctr->size == sizeof(float)) \ + *(double *)dp = *(float *)dp; /* FPRs always hold doubles. */ #else #error "Missing calling convention definitions for this architecture" @@ -327,14 +373,14 @@ static void callback_conv_result(CTState *cts, lua_State *L, TValue *o) #endif if (!ctype_isvoid(ctr->info)) { uint8_t *dp = (uint8_t *)&cts->cb.gpr[0]; -#ifdef CALLBACK_HANDLE_RET - CALLBACK_HANDLE_RET -#endif #if CCALL_NUM_FPR if (ctype_isfp(ctr->info)) dp = (uint8_t *)&cts->cb.fpr[0]; #endif lj_cconv_ct_tv(cts, ctr, dp, o, 0); +#ifdef CALLBACK_HANDLE_RET + CALLBACK_HANDLE_RET +#endif /* Extend returned integers to (at least) 32 bits. */ if (ctype_isinteger_or_bool(ctr->info) && ctr->size < 4) { if (ctr->info & CTF_UNSIGNED) diff --git a/src/lj_errmsg.h b/src/lj_errmsg.h index e9ad0451..4a4fec68 100644 --- a/src/lj_errmsg.h +++ b/src/lj_errmsg.h @@ -161,7 +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 +#if LJ_TARGET_X86ORX64 || LJ_TARGET_PPC ERRDEF(FFI_CBACKOV, "too many callbacks") #else ERRDEF(FFI_CBACKOV, "no support for callbacks (yet)")