From 93ee10642e285f972daff59492c05aa04dc2aa86 Mon Sep 17 00:00:00 2001 From: Mike Pall Date: Sat, 2 Jan 2010 17:42:11 +0100 Subject: [PATCH] Major rewrite of error handling to allow external/internal unwinding. Make external unwinding the default on x64. It's mandatory on WIN64 due to the abundance of callee-saved regs. Allow piecewise internal frame unwinding and optional cleanup. Store ERRMEM, ERRERR and ERRCPP early and copy down later. Use FRAME_CP for lj_vm_resume. Add lj_vm_unwind_*_eh variants as landing pads for external unwinder. Use fastcall for lj_vm_unwind_*. Can drop r12/r13 saves in POSIX/x64 interpreter now. --- src/buildvm_x86.dasc | 30 +- src/buildvm_x86.h | 1680 +++++++++++++++++++++--------------------- src/lj_err.c | 439 +++++++---- src/lj_err.h | 1 + src/lj_frame.h | 2 +- src/lj_vm.h | 6 +- 6 files changed, 1149 insertions(+), 1009 deletions(-) diff --git a/src/buildvm_x86.dasc b/src/buildvm_x86.dasc index b9dddd1f..f19ecbc0 100644 --- a/src/buildvm_x86.dasc +++ b/src/buildvm_x86.dasc @@ -213,18 +213,16 @@ | |.define CFRAME_SPACE, aword*5 // Delta for rsp (see <--). |.macro saveregs -| push rbp; push rbx; push r15; push r14; push r13; push r12 +| push rbp; push rbx; push r15; push r14 | sub rsp, CFRAME_SPACE |.endmacro |.macro restoreregs | add rsp, CFRAME_SPACE -| pop r12; pop r13; pop r14; pop r15; pop rbx; pop rbp +| pop r14; pop r15; pop rbx; pop rbp |.endmacro | |//----- 16 byte aligned, -|.define SAVE_RET, aword [rsp+aword*11] //<-- rsp entering interpreter. -|.define SAVE_R6, aword [rsp+aword*10] -|.define SAVE_R5, aword [rsp+aword*9] +|.define SAVE_RET, aword [rsp+aword*9] //<-- rsp entering interpreter. |.define SAVE_R4, aword [rsp+aword*8] |.define SAVE_R3, aword [rsp+aword*7] |.define SAVE_R2, aword [rsp+aword*6] @@ -621,10 +619,10 @@ static void build_subroutines(BuildCtx *ctx, int cmov, int sse) | mov eax, CARG2d // Error return status for vm_pcall. | mov rsp, CARG1 |.else - | mov ecx, [esp+4] - | mov eax, [esp+8] // Error return status for vm_pcall. - | mov esp, ecx + | mov eax, FCARG2 // Error return status for vm_pcall. + | mov esp, FCARG1 |.endif + |->vm_unwind_c_eh: // Landing pad for external unwinder. | mov L:RB, SAVE_L | mov GL:RB, L:RB->glref | mov dword GL:RB->vmstate, ~LJ_VMST_C @@ -636,10 +634,10 @@ static void build_subroutines(BuildCtx *ctx, int cmov, int sse) | and CARG1, CFRAME_RAWMASK | mov rsp, CARG1 |.else - | mov ecx, [esp+4] - | and ecx, CFRAME_RAWMASK - | mov esp, ecx + | and FCARG1, CFRAME_RAWMASK + | mov esp, FCARG1 |.endif + |->vm_unwind_ff_eh: // Landing pad for external unwinder. | mov L:RB, SAVE_L | mov RAa, -8 // Results start at BASE+RA = BASE-8. | mov RD, 1+1 // Really 1+2 results, incr. later. @@ -718,7 +716,7 @@ static void build_subroutines(BuildCtx *ctx, int cmov, int sse) | mov L:RB, SAVE_L | mov RA, INARG_BASE // Caveat: overlaps SAVE_CFRAME! |.endif - | mov PC, FRAME_C + | mov PC, FRAME_CP | xor RD, RD | lea KBASEa, [esp+CFRAME_RESUME] | mov DISPATCH, L:RB->glref // Setup pointer to dispatch table. @@ -4689,7 +4687,7 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop, int cmov, int sse) | movsd FOR_IDX, xmm0 | test RB, RB; js >3 } else { - | jl >3 + | jl >3 } | ucomisd xmm1, xmm0 |1: @@ -4876,8 +4874,6 @@ static void emit_asm_debug(BuildCtx *ctx) "\t.byte 0x83\n\t.uleb128 0x3\n" /* offset rbx */ "\t.byte 0x8f\n\t.uleb128 0x4\n" /* offset r15 */ "\t.byte 0x8e\n\t.uleb128 0x5\n" /* offset r14 */ - "\t.byte 0x8d\n\t.uleb128 0x6\n" /* offset r13 */ - "\t.byte 0x8c\n\t.uleb128 0x7\n" /* offset r12 */ #else "\t.byte 0x85\n\t.uleb128 0x2\n" /* offset ebp */ "\t.byte 0x87\n\t.uleb128 0x3\n" /* offset edi */ @@ -4919,8 +4915,6 @@ static void emit_asm_debug(BuildCtx *ctx) "\t.byte 0x83\n\t.uleb128 0x3\n" /* offset rbx */ "\t.byte 0x8f\n\t.uleb128 0x4\n" /* offset r15 */ "\t.byte 0x8e\n\t.uleb128 0x5\n" /* offset r14 */ - "\t.byte 0x8d\n\t.uleb128 0x6\n" /* offset r13 */ - "\t.byte 0x8c\n\t.uleb128 0x7\n" /* offset r12 */ #else "\t.byte 0x85\n\t.uleb128 0x2\n" /* offset ebp */ "\t.byte 0x87\n\t.uleb128 0x3\n" /* offset edi */ @@ -4971,8 +4965,6 @@ static void emit_asm_debug(BuildCtx *ctx) "\t.byte 0x83\n\t.uleb128 0x3\n" /* offset rbx */ "\t.byte 0x8f\n\t.uleb128 0x4\n" /* offset r15 */ "\t.byte 0x8e\n\t.uleb128 0x5\n" /* offset r14 */ - "\t.byte 0x8d\n\t.uleb128 0x6\n" /* offset r13 */ - "\t.byte 0x8c\n\t.uleb128 0x7\n" /* offset r12 */ #else "\t.byte 0x84\n\t.byte 0x2\n" /* offset ebp (4 for MACH-O)*/ "\t.byte 0x87\n\t.byte 0x3\n" /* offset edi */ diff --git a/src/buildvm_x86.h b/src/buildvm_x86.h index 0affad6a..8ae53756 100644 --- a/src/buildvm_x86.h +++ b/src/buildvm_x86.h @@ -12,7 +12,7 @@ #define DASM_SECTION_CODE_OP 0 #define DASM_SECTION_CODE_SUB 1 #define DASM_MAXSECTION 2 -static const unsigned char build_actionlist[15191] = { +static const unsigned char build_actionlist[15185] = { 254,1,248,10,137,202,139,173,233,137,114,252,252,15,182,141,233,139,181,233, 139,189,233,139,108,36,48,141,12,202,141,68,194,252,252,59,141,233,15,135, 244,11,248,9,189,237,248,1,137,40,137,104,8,131,192,16,57,200,15,130,244, @@ -40,138 +40,138 @@ static const unsigned char build_actionlist[15191] = { 15,135,244,254,199,66,252,252,237,131,194,8,131,192,1,252,233,244,4,248,7, 133,201,15,132,244,5,41,193,141,20,202,252,233,244,5,248,8,137,149,233,255, 137,68,36,20,137,202,137,252,233,232,251,1,0,139,149,233,252,233,244,3,248, - 23,139,76,36,4,139,68,36,8,137,204,139,108,36,48,139,173,233,199,133,233, - 237,252,233,244,22,248,24,139,76,36,4,129,225,239,137,204,139,108,36,48,185, - 252,248,252,255,252,255,252,255,184,237,139,149,233,139,157,233,129,195,239, - 139,114,252,252,199,66,252,252,237,199,131,233,237,252,233,244,16,248,20, - 255,252,247,198,237,15,132,244,25,131,230,252,248,41,252,242,141,76,49,252, - 248,139,114,252,252,199,68,10,4,237,252,233,244,16,248,15,186,237,252,233, - 244,247,248,13,131,232,8,137,202,137,252,249,139,181,233,139,108,36,48,248, - 11,131,232,4,41,209,193,252,233,3,131,198,4,137,149,233,137,133,233,137,116, - 36,24,137,202,248,1,137,252,233,232,251,1,0,139,141,233,139,133,233,139,105, - 252,248,139,113,252,252,41,200,193,232,3,131,192,1,252,255,165,233,248,26, - 255,85,87,86,83,131,252,236,28,139,108,36,48,139,76,36,52,190,237,49,192, - 141,188,253,36,233,139,157,233,129,195,239,137,189,233,137,68,36,24,137,68, - 36,52,56,133,233,15,132,244,249,199,131,233,237,136,133,233,139,149,233,139, - 133,233,41,200,193,232,3,131,192,1,41,209,139,114,252,252,137,68,36,20,252, - 247,198,237,15,132,244,17,252,233,244,18,248,27,85,87,86,83,131,252,236,28, - 190,237,255,252,233,244,247,248,28,85,87,86,83,131,252,236,28,190,237,248, - 1,139,108,36,48,139,76,36,52,248,2,139,189,233,137,124,36,52,137,108,36,24, - 137,165,233,139,157,233,129,195,239,248,3,199,131,233,237,139,149,233,1,206, - 41,214,139,133,233,41,200,193,232,3,131,192,1,139,105,252,248,129,121,253, - 252,252,239,15,133,244,29,252,255,165,233,248,30,255,85,87,86,83,131,252, - 236,28,139,108,36,48,139,68,36,56,139,76,36,52,139,84,36,60,137,108,36,24, - 139,189,233,43,189,233,199,68,36,60,0,0,0,0,137,124,36,56,137,68,36,8,137, - 76,36,4,137,44,36,139,189,233,137,124,36,52,137,165,233,252,255,210,133,192, - 15,132,244,21,137,193,190,237,252,233,244,2,248,25,1,209,131,230,252,248, + 23,137,208,137,204,248,24,139,108,36,48,139,173,233,199,133,233,237,252,233, + 244,22,248,25,129,225,239,137,204,248,26,139,108,36,48,185,252,248,252,255, + 252,255,252,255,184,237,139,149,233,139,157,233,129,195,239,139,114,252,252, + 199,66,252,252,237,199,131,233,237,255,252,233,244,16,248,20,252,247,198, + 237,15,132,244,27,131,230,252,248,41,252,242,141,76,49,252,248,139,114,252, + 252,199,68,10,4,237,252,233,244,16,248,15,186,237,252,233,244,247,248,13, + 131,232,8,137,202,137,252,249,139,181,233,139,108,36,48,248,11,131,232,4, + 41,209,193,252,233,3,131,198,4,137,149,233,137,133,233,137,116,36,24,137, + 202,248,1,137,252,233,232,251,1,0,139,141,233,255,139,133,233,139,105,252, + 248,139,113,252,252,41,200,193,232,3,131,192,1,252,255,165,233,248,28,85, + 87,86,83,131,252,236,28,139,108,36,48,139,76,36,52,190,237,49,192,141,188, + 253,36,233,139,157,233,129,195,239,137,189,233,137,68,36,24,137,68,36,52, + 56,133,233,15,132,244,249,199,131,233,237,136,133,233,139,149,233,139,133, + 233,41,200,193,232,3,131,192,1,41,209,139,114,252,252,137,68,36,20,252,247, + 198,237,15,132,244,17,252,233,244,18,248,29,255,85,87,86,83,131,252,236,28, + 190,237,252,233,244,247,248,30,85,87,86,83,131,252,236,28,190,237,248,1,139, + 108,36,48,139,76,36,52,248,2,139,189,233,137,124,36,52,137,108,36,24,137, + 165,233,139,157,233,129,195,239,248,3,199,131,233,237,139,149,233,1,206,41, + 214,139,133,233,41,200,193,232,3,131,192,1,139,105,252,248,129,121,253,252, + 252,239,15,133,244,31,252,255,165,233,248,32,255,85,87,86,83,131,252,236, + 28,139,108,36,48,139,68,36,56,139,76,36,52,139,84,36,60,137,108,36,24,139, + 189,233,43,189,233,199,68,36,60,0,0,0,0,137,124,36,56,137,68,36,8,137,76, + 36,4,137,44,36,139,189,233,137,124,36,52,137,165,233,252,255,210,133,192, + 15,132,244,21,137,193,190,237,252,233,244,2,248,27,1,209,131,230,252,248, 137,213,41,252,242,199,68,193,252,252,237,137,200,139,117,252,244,139,77, - 252,240,139,122,252,248,139,191,233,139,191,233,252,255,225,248,31,15,182, - 78,252,255,131,252,237,16,141,12,202,41,252,233,15,132,244,32,252,247,217, + 252,240,139,122,252,248,139,191,233,139,191,233,252,255,225,248,33,15,182, + 78,252,255,131,252,237,16,141,12,202,41,252,233,15,132,244,34,252,247,217, 193,252,233,3,137,76,36,8,139,72,4,139,0,137,77,4,137,69,0,137,108,36,4,252, - 233,244,33,248,34,137,68,36,16,199,68,36,20,237,255,141,68,36,16,128,126, + 233,244,35,248,36,137,68,36,16,199,68,36,20,237,255,141,68,36,16,128,126, 252,252,235,15,133,244,247,141,139,233,137,41,199,65,4,237,137,205,252,233, - 244,248,248,35,15,182,70,252,254,255,252,242,15,42,192,252,242,15,17,68,36, + 244,248,248,37,15,182,70,252,254,255,252,242,15,42,192,252,242,15,17,68,36, 16,255,137,68,36,12,219,68,36,12,221,92,36,16,255,141,68,36,16,252,233,244, - 247,248,36,15,182,70,252,254,141,4,194,248,1,15,182,110,252,255,141,44,252, + 247,248,38,15,182,70,252,254,141,4,194,248,1,15,182,110,252,255,141,44,252, 234,248,2,137,108,36,4,139,108,36,48,137,68,36,8,137,44,36,137,149,233,137, - 116,36,24,232,251,1,1,139,149,233,133,192,15,132,244,249,248,32,15,182,78, + 116,36,24,232,251,1,1,139,149,233,133,192,15,132,244,249,248,34,15,182,78, 252,253,139,104,4,139,0,137,108,202,4,137,4,202,139,6,15,182,204,15,182,232, 131,198,4,193,232,16,252,255,36,171,248,3,139,141,233,137,113,252,244,141, - 177,233,41,214,139,105,252,248,184,3,0,0,0,252,255,165,233,248,37,137,68, + 177,233,41,214,139,105,252,248,184,3,0,0,0,252,255,165,233,248,39,137,68, 36,16,199,68,36,20,237,141,68,36,16,128,126,252,252,235,15,133,244,247,141, - 139,233,255,137,41,199,65,4,237,137,205,252,233,244,248,248,38,15,182,70, - 252,254,255,141,68,36,16,252,233,244,247,248,39,15,182,70,252,254,141,4,194, + 139,233,255,137,41,199,65,4,237,137,205,252,233,244,248,248,40,15,182,70, + 252,254,255,141,68,36,16,252,233,244,247,248,41,15,182,70,252,254,141,4,194, 248,1,15,182,110,252,255,141,44,252,234,248,2,137,108,36,4,139,108,36,48, 137,68,36,8,137,44,36,137,149,233,137,116,36,24,232,251,1,2,139,149,233,133, 192,15,132,244,249,15,182,78,252,253,139,108,202,4,139,12,202,137,104,4,137, - 8,248,40,139,6,15,182,204,15,182,232,131,198,4,193,232,16,252,255,36,171, + 8,248,42,139,6,15,182,204,15,182,232,131,198,4,193,232,16,252,255,36,171, 248,3,139,141,233,137,113,252,244,15,182,70,252,253,139,108,194,4,139,4,194, 137,105,20,137,65,16,141,177,233,41,214,139,105,252,248,184,4,0,0,0,252,255, - 165,233,248,41,15,182,110,252,252,141,4,194,141,12,202,137,108,36,12,139, + 165,233,248,43,15,182,110,252,252,141,4,194,141,12,202,137,108,36,12,139, 108,36,48,137,68,36,8,137,76,36,4,137,44,36,137,149,233,137,116,36,24,232, - 251,1,3,248,3,139,149,233,131,252,248,1,15,135,244,42,248,4,255,141,118,4, + 251,1,3,248,3,139,149,233,131,252,248,1,15,135,244,44,248,4,255,141,118,4, 15,130,244,252,248,5,15,183,70,252,254,141,180,253,134,233,248,6,139,6,15, - 182,204,15,182,232,131,198,4,193,232,16,252,255,36,171,248,43,131,198,4,129, - 120,253,4,239,15,130,244,5,252,233,244,6,248,44,129,120,253,4,239,252,233, - 244,4,248,45,131,252,238,4,137,108,36,12,139,108,36,48,137,68,36,8,137,76, - 36,4,137,44,36,137,149,233,137,116,36,24,232,251,1,4,252,233,244,3,248,46, - 255,141,4,199,252,233,244,247,248,47,141,4,199,141,44,252,234,149,252,233, - 244,248,248,48,141,4,194,137,197,252,233,244,248,248,49,141,4,194,248,1,141, + 182,204,15,182,232,131,198,4,193,232,16,252,255,36,171,248,45,131,198,4,129, + 120,253,4,239,15,130,244,5,252,233,244,6,248,46,129,120,253,4,239,252,233, + 244,4,248,47,131,252,238,4,137,108,36,12,139,108,36,48,137,68,36,8,137,76, + 36,4,137,44,36,137,149,233,137,116,36,24,232,251,1,4,252,233,244,3,248,48, + 255,141,4,199,252,233,244,247,248,49,141,4,199,141,44,252,234,149,252,233, + 244,248,248,50,141,4,194,137,197,252,233,244,248,248,51,141,4,194,248,1,141, 44,252,234,248,2,141,12,202,137,108,36,8,139,108,36,48,137,68,36,12,15,182, 70,252,252,137,76,36,4,137,68,36,16,137,44,36,137,149,233,137,116,36,24,232, - 251,1,5,139,149,233,133,192,15,132,244,40,248,42,137,193,41,208,137,113,252, + 251,1,5,139,149,233,133,192,15,132,244,42,248,44,137,193,41,208,137,113,252, 244,141,176,233,139,105,252,248,184,3,0,0,0,129,121,253,252,252,239,15,133, - 244,29,255,252,255,165,233,248,50,139,108,36,48,137,149,233,141,20,194,137, - 252,233,137,116,36,24,232,251,1,6,139,149,233,252,233,244,42,248,29,137,76, + 244,31,255,252,255,165,233,248,52,139,108,36,48,137,149,233,141,20,194,137, + 252,233,137,116,36,24,232,251,1,6,139,149,233,252,233,244,44,248,31,137,76, 36,20,137,68,36,16,131,252,233,8,141,4,193,139,108,36,48,137,76,36,4,137, 68,36,8,137,44,36,137,149,233,137,116,36,24,232,251,1,7,139,149,233,139,76, - 36,20,139,68,36,16,139,105,252,248,131,192,1,57,215,15,132,244,51,252,255, - 165,233,248,52,139,108,36,48,137,149,233,137,202,137,252,233,137,116,36,24, + 36,20,139,68,36,16,139,105,252,248,131,192,1,57,215,15,132,244,53,252,255, + 165,233,248,54,139,108,36,48,137,149,233,137,202,137,252,233,137,116,36,24, 232,251,1,8,139,149,233,139,70,252,252,15,182,204,15,182,232,193,232,16,252, - 255,164,253,171,233,248,53,129,252,248,239,15,130,244,54,255,139,105,4,129, - 252,253,239,15,131,244,54,137,68,36,20,137,105,252,252,139,41,137,105,252, + 255,164,253,171,233,248,55,129,252,248,239,15,130,244,56,255,139,105,4,129, + 252,253,239,15,131,244,56,137,68,36,20,137,105,252,252,139,41,137,105,252, 248,131,232,2,15,132,244,248,137,76,36,16,248,1,131,193,8,139,105,4,137,105, 252,252,139,41,137,105,252,248,131,232,1,15,133,244,1,139,76,36,16,248,2, - 139,68,36,20,252,233,244,55,248,56,129,252,248,239,15,130,244,54,139,105, + 139,68,36,20,252,233,244,57,248,58,129,252,248,239,15,130,244,56,139,105, 4,184,237,252,247,213,57,232,255,15,71,197,255,15,134,244,247,137,232,248, 1,255,139,105,252,248,139,132,253,197,233,199,65,252,252,237,137,65,252,248, - 252,233,244,57,248,58,129,252,248,239,15,130,244,54,139,105,4,129,252,253, + 252,233,244,59,248,60,129,252,248,239,15,130,244,56,139,105,4,129,252,253, 239,15,133,244,252,248,1,139,41,139,173,233,248,2,133,252,237,199,65,252, - 252,237,15,132,244,57,139,65,252,248,139,131,233,199,65,252,252,237,137,105, + 252,237,15,132,244,59,139,65,252,248,139,131,233,199,65,252,252,237,137,105, 252,248,137,76,36,16,139,141,233,255,35,136,233,105,201,239,3,141,233,248, 3,129,185,233,239,15,133,244,250,57,129,233,15,132,244,251,248,4,139,137, - 233,133,201,15,133,244,3,252,233,244,57,248,5,139,105,4,129,252,253,239,15, - 132,244,57,255,139,1,139,76,36,16,137,105,252,252,137,65,252,248,252,233, - 244,57,248,6,129,252,253,239,15,132,244,1,129,252,253,239,15,135,244,253, - 189,237,248,7,252,247,213,139,172,253,171,233,252,233,244,2,248,59,129,252, - 248,239,15,130,244,54,129,121,253,4,239,15,133,244,54,255,139,41,131,189, - 233,0,15,133,244,54,129,121,253,12,239,15,133,244,54,139,65,8,137,133,233, + 233,133,201,15,133,244,3,252,233,244,59,248,5,139,105,4,129,252,253,239,15, + 132,244,59,255,139,1,139,76,36,16,137,105,252,252,137,65,252,248,252,233, + 244,59,248,6,129,252,253,239,15,132,244,1,129,252,253,239,15,135,244,253, + 189,237,248,7,252,247,213,139,172,253,171,233,252,233,244,2,248,61,129,252, + 248,239,15,130,244,56,129,121,253,4,239,15,133,244,56,255,139,41,131,189, + 233,0,15,133,244,56,129,121,253,12,239,15,133,244,56,139,65,8,137,133,233, 199,65,252,252,237,137,105,252,248,252,246,133,233,235,15,132,244,247,128, - 165,233,235,139,131,233,137,171,233,137,133,233,248,1,252,233,244,57,248, - 60,255,129,252,248,239,15,130,244,54,129,121,253,4,239,15,133,244,54,139, + 165,233,235,139,131,233,137,171,233,137,133,233,248,1,252,233,244,59,248, + 62,255,129,252,248,239,15,130,244,56,129,121,253,4,239,15,133,244,56,139, 1,139,108,36,48,137,68,36,4,137,44,36,137,205,137,84,36,16,131,193,8,137, 76,36,8,232,251,1,9,137,252,233,139,84,36,16,139,40,139,64,4,137,105,252, - 248,137,65,252,252,252,233,244,57,248,61,129,252,248,239,15,133,244,54,129, - 121,253,4,239,15,135,244,54,255,252,242,15,16,1,252,233,244,62,255,221,1, - 252,233,244,63,255,248,64,129,252,248,239,15,130,244,54,129,121,253,4,239, + 248,137,65,252,252,252,233,244,59,248,63,129,252,248,239,15,133,244,56,129, + 121,253,4,239,15,135,244,56,255,252,242,15,16,1,252,233,244,64,255,221,1, + 252,233,244,65,255,248,66,129,252,248,239,15,130,244,56,129,121,253,4,239, 15,133,244,249,139,1,248,2,199,65,252,252,237,137,65,252,248,252,233,244, - 57,248,3,129,121,253,4,239,15,135,244,54,131,187,233,0,15,133,244,54,139, - 171,233,59,171,233,255,15,130,244,247,232,244,65,248,1,139,108,36,48,137, + 59,248,3,129,121,253,4,239,15,135,244,56,131,187,233,0,15,133,244,56,139, + 171,233,59,171,233,255,15,130,244,247,232,244,67,248,1,139,108,36,48,137, 141,233,137,113,252,252,137,116,36,24,137,84,36,16,137,202,137,252,233,232, - 251,1,10,139,141,233,139,84,36,16,252,233,244,2,248,66,129,252,248,239,15, - 130,244,54,15,132,244,248,248,1,129,121,253,4,239,15,133,244,54,139,41,137, + 251,1,10,139,141,233,139,84,36,16,252,233,244,2,248,68,129,252,248,239,15, + 130,244,56,15,132,244,248,248,1,129,121,253,4,239,15,133,244,56,139,41,137, 108,36,4,139,108,36,48,137,44,36,137,141,233,255,137,113,252,252,137,84,36, 16,131,193,8,137,76,36,8,137,116,36,24,232,251,1,11,139,141,233,139,84,36, 16,133,192,15,132,244,249,139,105,8,139,65,12,137,105,252,248,137,65,252, - 252,139,105,16,139,65,20,137,41,137,65,4,248,67,184,237,252,233,244,68,248, - 2,199,65,12,237,252,233,244,1,248,3,199,65,252,252,237,252,233,244,57,248, - 69,129,252,248,239,15,130,244,54,129,121,253,4,239,255,15,133,244,54,139, + 252,139,105,16,139,65,20,137,41,137,65,4,248,69,184,237,252,233,244,70,248, + 2,199,65,12,237,252,233,244,1,248,3,199,65,252,252,237,252,233,244,59,248, + 71,129,252,248,239,15,130,244,56,129,121,253,4,239,255,15,133,244,56,139, 133,233,199,65,252,252,237,137,65,252,248,199,65,12,237,184,237,252,233,244, - 68,248,70,129,252,248,239,15,130,244,54,129,121,253,4,239,15,133,244,54,129, - 121,253,12,239,15,135,244,54,255,252,242,15,16,65,8,189,0,0,252,240,63,102, + 70,248,72,129,252,248,239,15,130,244,56,129,121,253,4,239,15,133,244,56,129, + 121,253,12,239,15,135,244,56,255,252,242,15,16,65,8,189,0,0,252,240,63,102, 15,110,205,102,15,112,201,81,252,242,15,88,193,252,242,15,45,192,252,242, 15,17,65,252,248,255,221,65,8,217,232,222,193,219,20,36,221,89,252,248,139, 4,36,255,139,41,59,133,233,15,131,244,248,193,224,3,3,133,233,248,1,129,120, - 253,4,239,15,132,244,71,139,40,139,64,4,137,41,137,65,4,252,233,244,67,248, - 2,131,189,233,0,15,132,244,71,137,84,36,16,135,205,137,194,232,251,1,12,137, - 252,233,139,84,36,16,133,192,15,133,244,1,248,71,184,237,252,233,244,68,248, - 72,255,129,252,248,239,15,130,244,54,129,121,253,4,239,15,133,244,54,139, + 253,4,239,15,132,244,73,139,40,139,64,4,137,41,137,65,4,252,233,244,69,248, + 2,131,189,233,0,15,132,244,73,137,84,36,16,135,205,137,194,232,251,1,12,137, + 252,233,139,84,36,16,133,192,15,133,244,1,248,73,184,237,252,233,244,70,248, + 74,255,129,252,248,239,15,130,244,56,129,121,253,4,239,15,133,244,56,139, 133,233,199,65,252,252,237,137,65,252,248,255,15,87,192,252,242,15,17,65, - 8,255,217,252,238,221,89,8,255,184,237,252,233,244,68,248,73,129,252,248, - 239,15,130,244,54,137,113,252,252,190,237,137,202,131,193,8,131,232,1,139, + 8,255,217,252,238,221,89,8,255,184,237,252,233,244,70,248,75,129,252,248, + 239,15,130,244,56,137,113,252,252,190,237,137,202,131,193,8,131,232,1,139, 105,252,248,248,1,252,246,131,233,235,15,133,244,249,248,2,129,121,253,252, - 252,239,15,133,244,29,252,255,165,233,248,3,131,198,1,252,233,244,2,248,74, - 255,129,252,248,239,15,130,244,54,129,121,253,12,239,15,133,244,54,137,113, + 252,239,15,133,244,31,252,255,165,233,248,3,131,198,1,252,233,244,2,248,76, + 255,129,252,248,239,15,130,244,56,129,121,253,12,239,15,133,244,56,137,113, 252,252,139,105,4,137,105,12,199,65,4,237,139,41,139,113,8,137,105,8,137, 49,190,237,137,202,129,193,239,131,232,2,252,233,244,1,248,9,139,116,36,24, - 252,233,244,54,248,75,129,252,248,239,15,130,244,54,139,41,137,113,252,252, + 252,233,244,56,248,77,129,252,248,239,15,130,244,56,139,41,137,113,252,252, 137,116,36,24,137,44,36,129,121,253,4,239,15,133,244,9,255,131,189,233,0, 15,133,244,9,128,189,233,235,15,135,244,9,139,181,233,137,116,36,4,15,132, 244,247,59,181,233,15,132,244,9,248,1,141,116,198,252,240,59,181,233,15,135, 244,9,137,181,233,139,108,36,48,137,141,233,131,193,8,137,141,233,255,139, 108,36,4,141,76,193,232,41,252,241,57,252,238,15,132,244,249,248,2,139,68, 14,4,137,70,252,252,139,4,14,137,70,252,248,131,252,238,8,57,252,238,15,133, - 244,2,248,3,49,201,137,76,36,12,137,76,36,8,232,244,26,199,131,233,237,139, + 244,2,248,3,49,201,137,76,36,12,137,76,36,8,232,244,28,199,131,233,237,139, 108,36,48,139,52,36,139,149,233,129,252,248,239,15,135,244,254,248,4,139, 142,233,139,190,233,137,142,233,137,252,254,41,206,15,132,244,252,255,141, 4,50,193,252,238,3,59,133,233,15,135,244,255,137,213,41,205,248,5,139,1,137, @@ -181,13 +181,13 @@ static const unsigned char build_actionlist[15191] = { 252,252,237,139,142,233,131,252,233,8,137,142,233,139,1,137,2,139,65,4,137, 66,4,184,237,252,233,244,7,248,9,255,139,12,36,137,185,233,137,252,242,137, 252,233,232,251,1,0,139,149,233,252,233,244,4,248,9,139,116,36,24,252,233, - 244,54,248,76,139,173,233,137,113,252,252,137,116,36,24,137,44,36,131,189, + 244,56,248,78,139,173,233,137,113,252,252,137,116,36,24,137,44,36,131,189, 233,0,15,133,244,9,128,189,233,235,15,135,244,9,139,181,233,137,116,36,4, 15,132,244,247,59,181,233,255,15,132,244,9,248,1,141,116,198,252,248,59,181, 233,15,135,244,9,137,181,233,139,108,36,48,137,141,233,137,141,233,139,108, 36,4,141,76,193,252,240,41,252,241,57,252,238,15,132,244,249,248,2,139,68, 14,4,137,70,252,252,139,4,14,137,70,252,248,131,252,238,8,57,252,238,15,133, - 244,2,248,3,49,201,137,76,36,12,137,76,36,8,232,244,26,199,131,233,237,139, + 244,2,248,3,49,201,137,76,36,12,137,76,36,8,232,244,28,199,131,233,237,139, 108,36,48,139,52,36,139,149,233,255,129,252,248,239,15,135,244,254,248,4, 139,142,233,139,190,233,137,142,233,137,252,254,41,206,15,132,244,252,141, 4,50,193,252,238,3,59,133,233,15,135,244,255,137,213,41,205,248,5,139,1,137, @@ -195,238 +195,238 @@ static const unsigned char build_actionlist[15191] = { 1,248,7,139,116,36,24,137,68,36,20,49,201,252,247,198,237,15,132,244,17,255, 252,233,244,18,248,8,137,252,242,137,252,233,232,251,1,13,248,9,139,12,36, 137,185,233,137,252,242,137,252,233,232,251,1,0,139,149,233,252,233,244,4, - 248,77,139,108,36,48,137,113,252,252,252,247,133,233,237,15,132,244,54,137, + 248,79,139,108,36,48,137,113,252,252,252,247,133,233,237,15,132,244,56,137, 141,233,141,68,193,252,248,137,133,233,49,192,137,133,233,176,235,136,133, - 233,252,233,244,22,255,248,63,221,89,252,248,252,233,244,57,248,78,129,252, - 248,239,15,130,244,54,129,121,253,4,239,15,135,244,54,252,242,15,16,1,102, - 15,252,239,201,102,15,118,201,102,15,115,209,1,15,84,193,248,62,252,242,15, - 17,65,252,248,255,248,78,129,252,248,239,15,130,244,54,129,121,253,4,239, - 15,135,244,54,221,1,217,225,248,62,248,63,221,89,252,248,255,248,57,184,237, - 248,68,137,68,36,20,248,55,252,247,198,237,15,133,244,253,248,5,56,70,252, + 233,252,233,244,22,255,248,65,221,89,252,248,252,233,244,59,248,80,129,252, + 248,239,15,130,244,56,129,121,253,4,239,15,135,244,56,252,242,15,16,1,102, + 15,252,239,201,102,15,118,201,102,15,115,209,1,15,84,193,248,64,252,242,15, + 17,65,252,248,255,248,80,129,252,248,239,15,130,244,56,129,121,253,4,239, + 15,135,244,56,221,1,217,225,248,64,248,65,221,89,252,248,255,248,59,184,237, + 248,70,137,68,36,20,248,57,252,247,198,237,15,133,244,253,248,5,56,70,252, 255,15,135,244,252,139,6,15,182,204,15,182,232,131,198,4,193,232,16,252,255, 36,171,248,6,199,68,193,252,244,237,131,192,1,252,233,244,5,248,7,137,202, - 185,252,248,252,255,252,255,252,255,252,233,244,18,255,248,79,129,252,248, - 239,15,130,244,54,129,121,253,4,239,15,135,244,54,252,242,15,81,1,252,233, - 244,62,248,80,129,252,248,239,15,130,244,54,129,121,253,4,239,15,135,244, - 54,252,242,15,16,1,232,244,81,252,233,244,62,248,82,255,129,252,248,239,15, - 130,244,54,129,121,253,4,239,15,135,244,54,252,242,15,16,1,232,244,83,252, - 233,244,62,255,248,79,129,252,248,239,15,130,244,54,129,121,253,4,239,15, - 135,244,54,221,1,217,252,250,252,233,244,63,248,80,129,252,248,239,15,130, - 244,54,129,121,253,4,239,15,135,244,54,221,1,232,244,81,252,233,244,63,248, - 82,255,129,252,248,239,15,130,244,54,129,121,253,4,239,15,135,244,54,221, - 1,232,244,83,252,233,244,63,255,248,84,129,252,248,239,15,130,244,54,129, - 121,253,4,239,15,135,244,54,217,252,237,221,1,217,252,241,252,233,244,63, - 248,85,129,252,248,239,15,130,244,54,129,121,253,4,239,15,135,244,54,217, - 252,236,221,1,217,252,241,252,233,244,63,248,86,129,252,248,239,255,15,130, - 244,54,129,121,253,4,239,15,135,244,54,221,1,232,244,87,252,233,244,63,248, - 88,129,252,248,239,15,130,244,54,129,121,253,4,239,15,135,244,54,221,1,217, - 252,254,252,233,244,63,248,89,129,252,248,239,255,15,130,244,54,129,121,253, - 4,239,15,135,244,54,221,1,217,252,255,252,233,244,63,248,90,129,252,248,239, - 15,130,244,54,129,121,253,4,239,15,135,244,54,221,1,217,252,242,221,216,252, - 233,244,63,248,91,129,252,248,239,15,130,244,54,255,129,121,253,4,239,15, - 135,244,54,221,1,217,192,216,200,217,232,222,225,217,252,250,217,252,243, - 252,233,244,63,248,92,129,252,248,239,15,130,244,54,129,121,253,4,239,15, - 135,244,54,221,1,217,192,216,200,217,232,222,225,217,252,250,217,201,217, - 252,243,252,233,244,63,248,93,129,252,248,239,15,130,244,54,129,121,253,4, - 239,15,135,244,54,255,221,1,217,232,217,252,243,252,233,244,63,255,248,94, - 129,252,248,239,15,130,244,54,129,121,253,4,239,15,135,244,54,252,242,15, - 16,1,252,242,15,17,4,36,255,248,94,129,252,248,239,15,130,244,54,129,121, - 253,4,239,15,135,244,54,221,1,221,28,36,255,137,76,36,16,137,213,232,251, - 1,14,139,76,36,16,137,252,234,252,233,244,63,255,248,95,129,252,248,239,15, - 130,244,54,129,121,253,4,239,15,135,244,54,252,242,15,16,1,252,242,15,17, - 4,36,255,248,95,129,252,248,239,15,130,244,54,129,121,253,4,239,15,135,244, - 54,221,1,221,28,36,255,137,76,36,16,137,213,232,251,1,15,139,76,36,16,137, - 252,234,252,233,244,63,255,248,96,129,252,248,239,15,130,244,54,129,121,253, - 4,239,15,135,244,54,252,242,15,16,1,252,242,15,17,4,36,255,248,96,129,252, - 248,239,15,130,244,54,129,121,253,4,239,15,135,244,54,221,1,221,28,36,255, - 137,76,36,16,137,213,232,251,1,16,139,76,36,16,137,252,234,252,233,244,63, - 248,97,255,248,98,129,252,248,239,15,130,244,54,129,121,253,4,239,15,135, - 244,54,252,242,15,16,1,252,242,15,89,133,233,252,233,244,62,255,248,98,129, - 252,248,239,15,130,244,54,129,121,253,4,239,15,135,244,54,221,1,220,141,233, - 252,233,244,63,255,248,99,129,252,248,239,15,130,244,54,129,121,253,4,239, - 15,135,244,54,129,121,253,12,239,15,135,244,54,221,1,221,65,8,217,252,243, - 252,233,244,63,248,100,129,252,248,239,15,130,244,54,129,121,253,4,239,15, - 135,244,54,129,121,253,12,239,255,15,135,244,54,221,65,8,221,1,217,252,253, - 221,217,252,233,244,63,248,101,129,252,248,239,15,130,244,54,139,105,4,129, - 252,253,239,15,135,244,54,139,1,137,105,252,252,137,65,252,248,209,229,129, + 185,252,248,252,255,252,255,252,255,252,233,244,18,255,248,81,129,252,248, + 239,15,130,244,56,129,121,253,4,239,15,135,244,56,252,242,15,81,1,252,233, + 244,64,248,82,129,252,248,239,15,130,244,56,129,121,253,4,239,15,135,244, + 56,252,242,15,16,1,232,244,83,252,233,244,64,248,84,255,129,252,248,239,15, + 130,244,56,129,121,253,4,239,15,135,244,56,252,242,15,16,1,232,244,85,252, + 233,244,64,255,248,81,129,252,248,239,15,130,244,56,129,121,253,4,239,15, + 135,244,56,221,1,217,252,250,252,233,244,65,248,82,129,252,248,239,15,130, + 244,56,129,121,253,4,239,15,135,244,56,221,1,232,244,83,252,233,244,65,248, + 84,255,129,252,248,239,15,130,244,56,129,121,253,4,239,15,135,244,56,221, + 1,232,244,85,252,233,244,65,255,248,86,129,252,248,239,15,130,244,56,129, + 121,253,4,239,15,135,244,56,217,252,237,221,1,217,252,241,252,233,244,65, + 248,87,129,252,248,239,15,130,244,56,129,121,253,4,239,15,135,244,56,217, + 252,236,221,1,217,252,241,252,233,244,65,248,88,129,252,248,239,255,15,130, + 244,56,129,121,253,4,239,15,135,244,56,221,1,232,244,89,252,233,244,65,248, + 90,129,252,248,239,15,130,244,56,129,121,253,4,239,15,135,244,56,221,1,217, + 252,254,252,233,244,65,248,91,129,252,248,239,255,15,130,244,56,129,121,253, + 4,239,15,135,244,56,221,1,217,252,255,252,233,244,65,248,92,129,252,248,239, + 15,130,244,56,129,121,253,4,239,15,135,244,56,221,1,217,252,242,221,216,252, + 233,244,65,248,93,129,252,248,239,15,130,244,56,255,129,121,253,4,239,15, + 135,244,56,221,1,217,192,216,200,217,232,222,225,217,252,250,217,252,243, + 252,233,244,65,248,94,129,252,248,239,15,130,244,56,129,121,253,4,239,15, + 135,244,56,221,1,217,192,216,200,217,232,222,225,217,252,250,217,201,217, + 252,243,252,233,244,65,248,95,129,252,248,239,15,130,244,56,129,121,253,4, + 239,15,135,244,56,255,221,1,217,232,217,252,243,252,233,244,65,255,248,96, + 129,252,248,239,15,130,244,56,129,121,253,4,239,15,135,244,56,252,242,15, + 16,1,252,242,15,17,4,36,255,248,96,129,252,248,239,15,130,244,56,129,121, + 253,4,239,15,135,244,56,221,1,221,28,36,255,137,76,36,16,137,213,232,251, + 1,14,139,76,36,16,137,252,234,252,233,244,65,255,248,97,129,252,248,239,15, + 130,244,56,129,121,253,4,239,15,135,244,56,252,242,15,16,1,252,242,15,17, + 4,36,255,248,97,129,252,248,239,15,130,244,56,129,121,253,4,239,15,135,244, + 56,221,1,221,28,36,255,137,76,36,16,137,213,232,251,1,15,139,76,36,16,137, + 252,234,252,233,244,65,255,248,98,129,252,248,239,15,130,244,56,129,121,253, + 4,239,15,135,244,56,252,242,15,16,1,252,242,15,17,4,36,255,248,98,129,252, + 248,239,15,130,244,56,129,121,253,4,239,15,135,244,56,221,1,221,28,36,255, + 137,76,36,16,137,213,232,251,1,16,139,76,36,16,137,252,234,252,233,244,65, + 248,99,255,248,100,129,252,248,239,15,130,244,56,129,121,253,4,239,15,135, + 244,56,252,242,15,16,1,252,242,15,89,133,233,252,233,244,64,255,248,100,129, + 252,248,239,15,130,244,56,129,121,253,4,239,15,135,244,56,221,1,220,141,233, + 252,233,244,65,255,248,101,129,252,248,239,15,130,244,56,129,121,253,4,239, + 15,135,244,56,129,121,253,12,239,15,135,244,56,221,1,221,65,8,217,252,243, + 252,233,244,65,248,102,129,252,248,239,15,130,244,56,129,121,253,4,239,15, + 135,244,56,129,121,253,12,239,255,15,135,244,56,221,65,8,221,1,217,252,253, + 221,217,252,233,244,65,248,103,129,252,248,239,15,130,244,56,139,105,4,129, + 252,253,239,15,135,244,56,139,1,137,105,252,252,137,65,252,248,209,229,129, 252,253,0,0,224,252,255,15,131,244,249,9,232,15,132,244,249,184,252,254,3, 0,0,129,252,253,0,0,32,0,15,130,244,250,248,1,193,252,237,21,41,197,255,252, 242,15,42,197,255,137,108,36,16,219,68,36,16,255,139,105,252,252,129,229, 252,255,252,255,15,128,129,205,0,0,224,63,137,105,252,252,248,2,255,252,242, - 15,17,1,255,221,25,255,184,237,252,233,244,68,248,3,255,15,87,192,252,233, + 15,17,1,255,221,25,255,184,237,252,233,244,70,248,3,255,15,87,192,252,233, 244,2,255,217,252,238,252,233,244,2,255,252,242,15,16,1,189,0,0,80,67,102, 15,110,205,102,15,112,201,81,252,242,15,89,193,252,242,15,17,65,252,248,255, 221,1,199,68,36,16,0,0,128,90,216,76,36,16,221,89,252,248,255,139,105,252, - 252,184,52,4,0,0,209,229,252,233,244,1,255,248,102,129,252,248,239,15,130, - 244,54,129,121,253,4,239,15,135,244,54,252,242,15,16,1,255,248,102,129,252, - 248,239,15,130,244,54,129,121,253,4,239,15,135,244,54,221,1,255,139,105,4, + 252,184,52,4,0,0,209,229,252,233,244,1,255,248,104,129,252,248,239,15,130, + 244,56,129,121,253,4,239,15,135,244,56,252,242,15,16,1,255,248,104,129,252, + 248,239,15,130,244,56,129,121,253,4,239,15,135,244,56,221,1,255,139,105,4, 209,229,129,252,253,0,0,224,252,255,15,132,244,250,255,15,40,224,232,244, - 103,252,242,15,92,224,248,1,252,242,15,17,65,252,248,252,242,15,17,33,255, - 217,192,232,244,103,220,252,233,248,1,221,89,252,248,221,25,255,139,65,252, - 252,139,105,4,49,232,15,136,244,249,248,2,184,237,252,233,244,68,248,3,129, + 105,252,242,15,92,224,248,1,252,242,15,17,65,252,248,252,242,15,17,33,255, + 217,192,232,244,105,220,252,233,248,1,221,89,252,248,221,25,255,139,65,252, + 252,139,105,4,49,232,15,136,244,249,248,2,184,237,252,233,244,70,248,3,129, 252,245,0,0,0,128,137,105,4,252,233,244,2,248,4,255,15,87,228,252,233,244, - 1,255,217,252,238,217,201,252,233,244,1,255,248,104,129,252,248,239,15,130, - 244,54,129,121,253,4,239,15,135,244,54,129,121,253,12,239,15,135,244,54,221, + 1,255,217,252,238,217,201,252,233,244,1,255,248,106,129,252,248,239,15,130, + 244,56,129,121,253,4,239,15,135,244,56,129,121,253,12,239,15,135,244,56,221, 65,8,221,1,248,1,217,252,248,223,224,158,15,138,244,1,221,217,252,233,244, - 63,255,248,105,129,252,248,239,15,130,244,54,129,121,253,4,239,15,135,244, - 54,129,121,253,12,239,15,135,244,54,252,242,15,16,1,252,242,15,16,73,8,232, - 244,106,252,233,244,62,255,248,105,129,252,248,239,15,130,244,54,129,121, - 253,4,239,15,135,244,54,129,121,253,12,239,15,135,244,54,221,1,221,65,8,232, - 244,106,252,233,244,63,255,248,107,129,252,248,239,15,130,244,54,129,121, - 253,4,239,15,135,244,54,252,242,15,16,1,189,2,0,0,0,248,1,57,197,15,131,244, - 62,129,124,253,252,233,252,252,239,15,135,244,54,252,242,15,16,76,252,233, - 252,248,252,242,15,93,193,131,197,1,252,233,244,1,255,248,107,129,252,248, - 239,15,130,244,54,129,121,253,4,239,15,135,244,54,221,1,189,2,0,0,0,248,1, - 57,197,15,131,244,63,129,124,253,252,233,252,252,239,15,135,244,251,221,68, + 65,255,248,107,129,252,248,239,15,130,244,56,129,121,253,4,239,15,135,244, + 56,129,121,253,12,239,15,135,244,56,252,242,15,16,1,252,242,15,16,73,8,232, + 244,108,252,233,244,64,255,248,107,129,252,248,239,15,130,244,56,129,121, + 253,4,239,15,135,244,56,129,121,253,12,239,15,135,244,56,221,1,221,65,8,232, + 244,108,252,233,244,65,255,248,109,129,252,248,239,15,130,244,56,129,121, + 253,4,239,15,135,244,56,252,242,15,16,1,189,2,0,0,0,248,1,57,197,15,131,244, + 64,129,124,253,252,233,252,252,239,15,135,244,56,252,242,15,16,76,252,233, + 252,248,252,242,15,93,193,131,197,1,252,233,244,1,255,248,109,129,252,248, + 239,15,130,244,56,129,121,253,4,239,15,135,244,56,221,1,189,2,0,0,0,248,1, + 57,197,15,131,244,65,129,124,253,252,233,252,252,239,15,135,244,251,221,68, 252,233,252,248,255,219,252,233,219,209,221,217,255,80,221,225,223,224,252, - 246,196,1,15,132,244,248,217,201,248,2,221,216,88,255,248,108,129,252,248, - 239,15,130,244,54,129,121,253,4,239,15,135,244,54,252,242,15,16,1,189,2,0, - 0,0,248,1,57,197,15,131,244,62,129,124,253,252,233,252,252,239,15,135,244, - 54,252,242,15,16,76,252,233,252,248,252,242,15,95,193,131,197,1,252,233,244, - 1,255,248,108,129,252,248,239,15,130,244,54,129,121,253,4,239,15,135,244, - 54,221,1,189,2,0,0,0,248,1,57,197,15,131,244,63,129,124,253,252,233,252,252, + 246,196,1,15,132,244,248,217,201,248,2,221,216,88,255,248,110,129,252,248, + 239,15,130,244,56,129,121,253,4,239,15,135,244,56,252,242,15,16,1,189,2,0, + 0,0,248,1,57,197,15,131,244,64,129,124,253,252,233,252,252,239,15,135,244, + 56,252,242,15,16,76,252,233,252,248,252,242,15,95,193,131,197,1,252,233,244, + 1,255,248,110,129,252,248,239,15,130,244,56,129,121,253,4,239,15,135,244, + 56,221,1,189,2,0,0,0,248,1,57,197,15,131,244,65,129,124,253,252,233,252,252, 239,15,135,244,251,221,68,252,233,252,248,255,219,252,233,218,209,221,217, 255,80,221,225,223,224,252,246,196,1,15,133,244,248,217,201,248,2,221,216, - 88,255,248,5,221,216,252,233,244,54,255,248,109,129,252,248,239,15,130,244, - 54,129,121,253,4,239,15,133,244,54,139,41,255,252,242,15,42,133,233,252,233, - 244,62,255,219,133,233,252,233,244,63,255,248,110,129,252,248,239,15,133, - 244,54,129,121,253,4,239,15,133,244,54,139,41,131,189,233,1,15,130,244,71, - 15,182,173,233,255,252,242,15,42,197,252,233,244,62,255,137,108,36,16,219, - 68,36,16,252,233,244,63,255,248,111,139,171,233,59,171,233,15,130,244,247, - 232,244,65,248,1,129,252,248,239,15,133,244,54,129,121,253,4,239,15,135,244, - 54,255,252,242,15,45,1,61,252,255,0,0,0,15,135,244,54,137,68,36,20,255,221, - 1,219,92,36,20,129,124,36,20,252,255,0,0,0,15,135,244,54,255,199,68,36,8, - 1,0,0,0,141,68,36,20,137,76,36,16,248,112,139,108,36,48,137,149,233,137,68, + 88,255,248,5,221,216,252,233,244,56,255,248,111,129,252,248,239,15,130,244, + 56,129,121,253,4,239,15,133,244,56,139,41,255,252,242,15,42,133,233,252,233, + 244,64,255,219,133,233,252,233,244,65,255,248,112,129,252,248,239,15,133, + 244,56,129,121,253,4,239,15,133,244,56,139,41,131,189,233,1,15,130,244,73, + 15,182,173,233,255,252,242,15,42,197,252,233,244,64,255,137,108,36,16,219, + 68,36,16,252,233,244,65,255,248,113,139,171,233,59,171,233,15,130,244,247, + 232,244,67,248,1,129,252,248,239,15,133,244,56,129,121,253,4,239,15,135,244, + 56,255,252,242,15,45,1,61,252,255,0,0,0,15,135,244,56,137,68,36,20,255,221, + 1,219,92,36,20,129,124,36,20,252,255,0,0,0,15,135,244,56,255,199,68,36,8, + 1,0,0,0,141,68,36,20,137,76,36,16,248,114,139,108,36,48,137,149,233,137,68, 36,4,137,44,36,137,116,36,24,232,251,1,17,139,76,36,16,139,149,233,199,65, - 252,252,237,137,65,252,248,252,233,244,57,248,113,139,171,233,59,171,233, - 15,130,244,247,232,244,65,248,1,137,76,36,16,199,68,36,20,252,255,252,255, - 252,255,252,255,129,252,248,239,15,130,244,54,15,134,244,247,129,121,253, + 252,252,237,137,65,252,248,252,233,244,59,248,115,139,171,233,59,171,233, + 15,130,244,247,232,244,67,248,1,137,76,36,16,199,68,36,20,252,255,252,255, + 252,255,252,255,129,252,248,239,15,130,244,56,15,134,244,247,129,121,253, 20,239,255,252,242,15,45,105,16,137,108,36,20,255,221,65,16,219,92,36,20, - 255,248,1,129,121,253,4,239,15,133,244,54,129,121,253,12,239,15,135,244,54, + 255,248,1,129,121,253,4,239,15,133,244,56,129,121,253,12,239,15,135,244,56, 139,41,137,108,36,12,139,173,233,255,252,242,15,45,73,8,255,221,65,8,219, 92,36,8,139,76,36,8,255,139,68,36,20,57,197,15,130,244,251,248,2,133,201, - 15,142,244,253,248,3,139,108,36,12,41,200,15,140,244,114,141,172,253,13,233, - 131,192,1,248,4,137,68,36,8,137,232,252,233,244,112,248,5,15,140,244,252, + 15,142,244,253,248,3,139,108,36,12,41,200,15,140,244,116,141,172,253,13,233, + 131,192,1,248,4,137,68,36,8,137,232,252,233,244,114,248,5,15,140,244,252, 141,68,40,1,252,233,244,2,248,6,137,232,252,233,244,2,248,7,255,15,132,244, 254,1,252,233,131,193,1,15,143,244,3,248,8,185,1,0,0,0,252,233,244,3,248, - 114,49,192,252,233,244,4,248,115,129,252,248,239,15,130,244,54,139,171,233, - 59,171,233,15,130,244,247,232,244,65,248,1,255,137,76,36,16,129,121,253,4, - 239,15,133,244,54,129,121,253,12,239,15,135,244,54,139,41,255,252,242,15, - 45,65,8,255,221,65,8,219,92,36,20,139,68,36,20,255,133,192,15,142,244,114, - 131,189,233,1,15,130,244,114,15,133,244,116,57,131,233,15,130,244,116,15, + 116,49,192,252,233,244,4,248,117,129,252,248,239,15,130,244,56,139,171,233, + 59,171,233,15,130,244,247,232,244,67,248,1,255,137,76,36,16,129,121,253,4, + 239,15,133,244,56,129,121,253,12,239,15,135,244,56,139,41,255,252,242,15, + 45,65,8,255,221,65,8,219,92,36,20,139,68,36,20,255,133,192,15,142,244,116, + 131,189,233,1,15,130,244,116,15,133,244,118,57,131,233,15,130,244,118,15, 182,141,233,139,171,233,137,68,36,8,248,1,136,77,0,131,197,1,131,232,1,15, - 133,244,1,139,131,233,252,233,244,112,248,117,129,252,248,239,255,15,130, - 244,54,139,171,233,59,171,233,15,130,244,247,232,244,65,248,1,137,76,36,16, - 129,121,253,4,239,15,133,244,54,139,41,139,133,233,133,192,15,132,244,114, - 57,131,233,15,130,244,118,129,197,239,137,116,36,20,137,68,36,8,139,179,233, + 133,244,1,139,131,233,252,233,244,114,248,119,129,252,248,239,255,15,130, + 244,56,139,171,233,59,171,233,15,130,244,247,232,244,67,248,1,137,76,36,16, + 129,121,253,4,239,15,133,244,56,139,41,139,133,233,133,192,15,132,244,116, + 57,131,233,15,130,244,120,129,197,239,137,116,36,20,137,68,36,8,139,179,233, 248,1,255,15,182,77,0,131,197,1,131,232,1,136,12,6,15,133,244,1,137,252,240, - 139,116,36,20,252,233,244,112,248,119,129,252,248,239,15,130,244,54,139,171, - 233,59,171,233,15,130,244,247,232,244,65,248,1,137,76,36,16,129,121,253,4, - 239,15,133,244,54,139,41,139,133,233,57,131,233,255,15,130,244,118,129,197, + 139,116,36,20,252,233,244,114,248,121,129,252,248,239,15,130,244,56,139,171, + 233,59,171,233,15,130,244,247,232,244,67,248,1,137,76,36,16,129,121,253,4, + 239,15,133,244,56,139,41,139,133,233,57,131,233,255,15,130,244,120,129,197, 239,137,116,36,20,137,68,36,8,139,179,233,252,233,244,249,248,1,15,182,76, 5,0,131,252,249,65,15,130,244,248,131,252,249,90,15,135,244,248,131,252,241, 32,248,2,136,12,6,248,3,131,232,1,15,137,244,1,137,252,240,139,116,36,20, - 252,233,244,112,248,120,129,252,248,239,15,130,244,54,255,139,171,233,59, - 171,233,15,130,244,247,232,244,65,248,1,137,76,36,16,129,121,253,4,239,15, - 133,244,54,139,41,139,133,233,57,131,233,15,130,244,118,129,197,239,137,116, + 252,233,244,114,248,122,129,252,248,239,15,130,244,56,255,139,171,233,59, + 171,233,15,130,244,247,232,244,67,248,1,137,76,36,16,129,121,253,4,239,15, + 133,244,56,139,41,139,133,233,57,131,233,15,130,244,120,129,197,239,137,116, 36,20,137,68,36,8,139,179,233,252,233,244,249,248,1,15,182,76,5,0,131,252, 249,97,15,130,244,248,255,131,252,249,122,15,135,244,248,131,252,241,32,248, 2,136,12,6,248,3,131,232,1,15,137,244,1,137,252,240,139,116,36,20,252,233, - 244,112,248,121,129,252,248,239,15,130,244,54,129,121,253,4,239,15,133,244, - 54,137,84,36,16,137,205,139,9,232,251,1,18,137,252,233,139,84,36,16,255,252, - 242,15,42,192,252,233,244,62,255,137,4,36,219,4,36,252,233,244,63,255,248, - 122,129,252,248,239,15,130,244,54,129,121,253,4,239,15,135,244,54,252,242, + 244,114,248,123,129,252,248,239,15,130,244,56,129,121,253,4,239,15,133,244, + 56,137,84,36,16,137,205,139,9,232,251,1,18,137,252,233,139,84,36,16,255,252, + 242,15,42,192,252,233,244,64,255,137,4,36,219,4,36,252,233,244,65,255,248, + 124,129,252,248,239,15,130,244,56,129,121,253,4,239,15,135,244,56,252,242, 15,16,1,189,0,0,56,67,102,15,110,205,102,15,112,201,81,252,242,15,88,193, - 102,15,126,197,252,242,15,42,197,252,233,244,62,255,248,122,129,252,248,239, - 15,130,244,54,129,121,253,4,239,15,135,244,54,221,1,199,68,36,16,0,0,192, - 89,216,68,36,16,221,28,36,219,4,36,252,233,244,63,255,248,123,129,252,248, - 239,15,130,244,54,129,121,253,4,239,15,135,244,54,252,242,15,16,1,189,0,0, + 102,15,126,197,252,242,15,42,197,252,233,244,64,255,248,124,129,252,248,239, + 15,130,244,56,129,121,253,4,239,15,135,244,56,221,1,199,68,36,16,0,0,192, + 89,216,68,36,16,221,28,36,219,4,36,252,233,244,65,255,248,125,129,252,248, + 239,15,130,244,56,129,121,253,4,239,15,135,244,56,252,242,15,16,1,189,0,0, 56,67,102,15,110,205,102,15,112,201,81,252,242,15,88,193,102,15,126,197,255, - 248,123,129,252,248,239,15,130,244,54,129,121,253,4,239,15,135,244,54,221, + 248,125,129,252,248,239,15,130,244,56,129,121,253,4,239,15,135,244,56,221, 1,199,68,36,16,0,0,192,89,216,68,36,16,221,28,36,139,44,36,255,137,68,36, - 20,141,68,193,252,240,255,137,84,36,16,255,248,1,57,200,15,134,244,124,129, - 120,253,4,239,15,135,244,125,255,252,242,15,16,0,252,242,15,88,193,102,15, + 20,141,68,193,252,240,255,137,84,36,16,255,248,1,57,200,15,134,244,126,129, + 120,253,4,239,15,135,244,127,255,252,242,15,16,0,252,242,15,88,193,102,15, 126,194,33,213,255,221,0,216,68,36,16,221,28,36,35,44,36,255,131,232,8,252, - 233,244,1,255,248,126,129,252,248,239,15,130,244,54,129,121,253,4,239,15, - 135,244,54,252,242,15,16,1,189,0,0,56,67,102,15,110,205,102,15,112,201,81, - 252,242,15,88,193,102,15,126,197,255,248,126,129,252,248,239,15,130,244,54, - 129,121,253,4,239,15,135,244,54,221,1,199,68,36,16,0,0,192,89,216,68,36,16, + 233,244,1,255,248,128,129,252,248,239,15,130,244,56,129,121,253,4,239,15, + 135,244,56,252,242,15,16,1,189,0,0,56,67,102,15,110,205,102,15,112,201,81, + 252,242,15,88,193,102,15,126,197,255,248,128,129,252,248,239,15,130,244,56, + 129,121,253,4,239,15,135,244,56,221,1,199,68,36,16,0,0,192,89,216,68,36,16, 221,28,36,139,44,36,255,252,242,15,16,0,252,242,15,88,193,102,15,126,194, - 9,213,255,221,0,216,68,36,16,221,28,36,11,44,36,255,248,127,129,252,248,239, - 15,130,244,54,129,121,253,4,239,15,135,244,54,252,242,15,16,1,189,0,0,56, + 9,213,255,221,0,216,68,36,16,221,28,36,11,44,36,255,248,129,129,252,248,239, + 15,130,244,56,129,121,253,4,239,15,135,244,56,252,242,15,16,1,189,0,0,56, 67,102,15,110,205,102,15,112,201,81,252,242,15,88,193,102,15,126,197,255, - 248,127,129,252,248,239,15,130,244,54,129,121,253,4,239,15,135,244,54,221, + 248,129,129,252,248,239,15,130,244,56,129,121,253,4,239,15,135,244,56,221, 1,199,68,36,16,0,0,192,89,216,68,36,16,221,28,36,139,44,36,255,252,242,15, 16,0,252,242,15,88,193,102,15,126,194,49,213,255,221,0,216,68,36,16,221,28, - 36,51,44,36,255,248,128,129,252,248,239,15,130,244,54,129,121,253,4,239,15, - 135,244,54,252,242,15,16,1,189,0,0,56,67,102,15,110,205,102,15,112,201,81, - 252,242,15,88,193,102,15,126,197,255,248,128,129,252,248,239,15,130,244,54, - 129,121,253,4,239,15,135,244,54,221,1,199,68,36,16,0,0,192,89,216,68,36,16, - 221,28,36,139,44,36,255,15,205,252,233,244,129,255,248,130,129,252,248,239, - 15,130,244,54,129,121,253,4,239,15,135,244,54,252,242,15,16,1,189,0,0,56, + 36,51,44,36,255,248,130,129,252,248,239,15,130,244,56,129,121,253,4,239,15, + 135,244,56,252,242,15,16,1,189,0,0,56,67,102,15,110,205,102,15,112,201,81, + 252,242,15,88,193,102,15,126,197,255,248,130,129,252,248,239,15,130,244,56, + 129,121,253,4,239,15,135,244,56,221,1,199,68,36,16,0,0,192,89,216,68,36,16, + 221,28,36,139,44,36,255,15,205,252,233,244,131,255,248,132,129,252,248,239, + 15,130,244,56,129,121,253,4,239,15,135,244,56,252,242,15,16,1,189,0,0,56, 67,102,15,110,205,102,15,112,201,81,252,242,15,88,193,102,15,126,197,255, - 248,130,129,252,248,239,15,130,244,54,129,121,253,4,239,15,135,244,54,221, + 248,132,129,252,248,239,15,130,244,56,129,121,253,4,239,15,135,244,56,221, 1,199,68,36,16,0,0,192,89,216,68,36,16,221,28,36,139,44,36,255,252,247,213, - 255,248,129,252,242,15,42,197,252,233,244,62,248,124,252,242,15,42,197,139, - 84,36,16,252,233,244,62,255,248,129,248,124,137,44,36,219,4,36,252,233,244, - 63,255,248,125,255,139,68,36,20,252,233,244,54,255,248,131,129,252,248,239, - 15,130,244,54,129,121,253,4,239,15,135,244,54,129,121,253,12,239,15,135,244, - 54,252,242,15,16,1,252,242,15,16,73,8,189,0,0,56,67,102,15,110,213,102,15, + 255,248,131,252,242,15,42,197,252,233,244,64,248,126,252,242,15,42,197,139, + 84,36,16,252,233,244,64,255,248,131,248,126,137,44,36,219,4,36,252,233,244, + 65,255,248,127,255,139,68,36,20,252,233,244,56,255,248,133,129,252,248,239, + 15,130,244,56,129,121,253,4,239,15,135,244,56,129,121,253,12,239,15,135,244, + 56,252,242,15,16,1,252,242,15,16,73,8,189,0,0,56,67,102,15,110,213,102,15, 112,210,81,252,242,15,88,194,252,242,15,88,202,137,200,102,15,126,197,102, - 15,126,201,255,248,131,129,252,248,239,15,130,244,54,129,121,253,4,239,15, - 135,244,54,129,121,253,12,239,15,135,244,54,221,1,221,65,8,199,68,36,16,0, + 15,126,201,255,248,133,129,252,248,239,15,130,244,56,129,121,253,4,239,15, + 135,244,56,129,121,253,12,239,15,135,244,56,221,1,221,65,8,199,68,36,16,0, 0,192,89,216,68,36,16,221,92,36,8,216,68,36,16,221,28,36,137,200,139,76,36, - 8,139,44,36,255,211,229,137,193,252,233,244,129,255,248,132,129,252,248,239, - 15,130,244,54,129,121,253,4,239,15,135,244,54,129,121,253,12,239,15,135,244, - 54,252,242,15,16,1,252,242,15,16,73,8,189,0,0,56,67,102,15,110,213,102,15, + 8,139,44,36,255,211,229,137,193,252,233,244,131,255,248,134,129,252,248,239, + 15,130,244,56,129,121,253,4,239,15,135,244,56,129,121,253,12,239,15,135,244, + 56,252,242,15,16,1,252,242,15,16,73,8,189,0,0,56,67,102,15,110,213,102,15, 112,210,81,252,242,15,88,194,252,242,15,88,202,137,200,102,15,126,197,102, - 15,126,201,255,248,132,129,252,248,239,15,130,244,54,129,121,253,4,239,15, - 135,244,54,129,121,253,12,239,15,135,244,54,221,1,221,65,8,199,68,36,16,0, + 15,126,201,255,248,134,129,252,248,239,15,130,244,56,129,121,253,4,239,15, + 135,244,56,129,121,253,12,239,15,135,244,56,221,1,221,65,8,199,68,36,16,0, 0,192,89,216,68,36,16,221,92,36,8,216,68,36,16,221,28,36,137,200,139,76,36, - 8,139,44,36,255,211,252,237,137,193,252,233,244,129,255,248,133,129,252,248, - 239,15,130,244,54,129,121,253,4,239,15,135,244,54,129,121,253,12,239,15,135, - 244,54,252,242,15,16,1,252,242,15,16,73,8,189,0,0,56,67,102,15,110,213,102, + 8,139,44,36,255,211,252,237,137,193,252,233,244,131,255,248,135,129,252,248, + 239,15,130,244,56,129,121,253,4,239,15,135,244,56,129,121,253,12,239,15,135, + 244,56,252,242,15,16,1,252,242,15,16,73,8,189,0,0,56,67,102,15,110,213,102, 15,112,210,81,252,242,15,88,194,252,242,15,88,202,137,200,102,15,126,197, - 102,15,126,201,255,248,133,129,252,248,239,15,130,244,54,129,121,253,4,239, - 15,135,244,54,129,121,253,12,239,15,135,244,54,221,1,221,65,8,199,68,36,16, + 102,15,126,201,255,248,135,129,252,248,239,15,130,244,56,129,121,253,4,239, + 15,135,244,56,129,121,253,12,239,15,135,244,56,221,1,221,65,8,199,68,36,16, 0,0,192,89,216,68,36,16,221,92,36,8,216,68,36,16,221,28,36,137,200,139,76, - 36,8,139,44,36,255,211,252,253,137,193,252,233,244,129,255,248,134,129,252, - 248,239,15,130,244,54,129,121,253,4,239,15,135,244,54,129,121,253,12,239, - 15,135,244,54,252,242,15,16,1,252,242,15,16,73,8,189,0,0,56,67,102,15,110, + 36,8,139,44,36,255,211,252,253,137,193,252,233,244,131,255,248,136,129,252, + 248,239,15,130,244,56,129,121,253,4,239,15,135,244,56,129,121,253,12,239, + 15,135,244,56,252,242,15,16,1,252,242,15,16,73,8,189,0,0,56,67,102,15,110, 213,102,15,112,210,81,252,242,15,88,194,252,242,15,88,202,137,200,102,15, - 126,197,102,15,126,201,255,248,134,129,252,248,239,15,130,244,54,129,121, - 253,4,239,15,135,244,54,129,121,253,12,239,15,135,244,54,221,1,221,65,8,199, + 126,197,102,15,126,201,255,248,136,129,252,248,239,15,130,244,56,129,121, + 253,4,239,15,135,244,56,129,121,253,12,239,15,135,244,56,221,1,221,65,8,199, 68,36,16,0,0,192,89,216,68,36,16,221,92,36,8,216,68,36,16,221,28,36,137,200, - 139,76,36,8,139,44,36,255,211,197,137,193,252,233,244,129,255,248,135,129, - 252,248,239,15,130,244,54,129,121,253,4,239,15,135,244,54,129,121,253,12, - 239,15,135,244,54,252,242,15,16,1,252,242,15,16,73,8,189,0,0,56,67,102,15, + 139,76,36,8,139,44,36,255,211,197,137,193,252,233,244,131,255,248,137,129, + 252,248,239,15,130,244,56,129,121,253,4,239,15,135,244,56,129,121,253,12, + 239,15,135,244,56,252,242,15,16,1,252,242,15,16,73,8,189,0,0,56,67,102,15, 110,213,102,15,112,210,81,252,242,15,88,194,252,242,15,88,202,137,200,102, - 15,126,197,102,15,126,201,255,248,135,129,252,248,239,15,130,244,54,129,121, - 253,4,239,15,135,244,54,129,121,253,12,239,15,135,244,54,221,1,221,65,8,199, + 15,126,197,102,15,126,201,255,248,137,129,252,248,239,15,130,244,56,129,121, + 253,4,239,15,135,244,56,129,121,253,12,239,15,135,244,56,221,1,221,65,8,199, 68,36,16,0,0,192,89,216,68,36,16,221,92,36,8,216,68,36,16,221,28,36,137,200, - 139,76,36,8,139,44,36,255,211,205,137,193,252,233,244,129,248,116,184,237, - 252,233,244,54,248,118,184,237,248,54,139,108,36,48,41,202,137,113,252,252, + 139,76,36,8,139,44,36,255,211,205,137,193,252,233,244,131,248,118,184,237, + 252,233,244,56,248,120,184,237,248,56,139,108,36,48,41,202,137,113,252,252, 137,116,36,24,137,84,36,16,137,141,233,141,68,193,252,248,141,144,233,137, 133,233,139,65,252,248,59,149,233,15,135,244,251,137,44,36,252,255,144,233, 133,192,15,133,244,249,248,1,139,141,233,255,139,133,233,41,200,193,232,3, 131,192,1,139,105,252,248,139,84,36,16,1,202,57,113,252,252,15,133,244,248, - 252,255,165,233,248,2,129,121,253,252,252,239,15,133,244,29,252,255,165,233, - 248,3,139,141,233,139,84,36,16,1,202,252,233,244,68,248,5,186,237,137,252, - 233,232,251,1,0,252,233,244,1,248,65,93,137,108,36,16,139,108,36,48,41,202, + 252,255,165,233,248,2,129,121,253,252,252,239,15,133,244,31,252,255,165,233, + 248,3,139,141,233,139,84,36,16,1,202,252,233,244,70,248,5,186,237,137,252, + 233,232,251,1,0,252,233,244,1,248,67,93,137,108,36,16,139,108,36,48,41,202, 137,84,36,20,137,113,252,252,137,116,36,24,137,141,233,141,68,193,252,248, 137,252,233,137,133,233,255,232,251,1,19,139,141,233,139,133,233,41,200,193, 232,3,131,192,1,139,113,252,252,139,84,36,20,1,202,139,108,36,16,85,139,105, - 252,248,195,248,136,255,15,182,131,233,168,235,15,133,244,251,168,235,15, + 252,248,195,248,138,255,15,182,131,233,168,235,15,133,244,251,168,235,15, 133,244,247,168,235,15,132,244,247,252,255,139,233,252,233,244,247,255,248, - 137,15,182,131,233,168,235,15,133,244,251,168,235,15,132,244,251,252,255, + 139,15,182,131,233,168,235,15,133,244,251,168,235,15,132,244,251,252,255, 139,233,15,132,244,247,168,235,15,132,244,251,248,1,139,108,36,48,137,149, 233,137,252,242,137,252,233,232,251,1,20,248,3,139,149,233,248,4,15,182,78, 252,253,248,5,255,15,182,110,252,252,15,183,70,252,254,252,255,164,253,171, - 233,248,138,131,198,4,139,77,232,137,76,36,20,252,233,244,4,248,139,255,139, + 233,248,140,131,198,4,139,77,232,137,76,36,20,252,233,244,4,248,141,255,139, 108,36,48,137,149,233,137,252,242,141,139,233,137,171,233,137,116,36,24,232, - 251,1,21,252,233,244,3,255,248,140,255,139,108,36,48,137,149,233,137,252, + 251,1,21,252,233,244,3,255,248,142,255,139,108,36,48,137,149,233,137,252, 242,141,139,233,137,171,233,137,116,36,24,232,251,1,21,139,149,233,139,6, - 15,182,204,15,182,232,131,198,4,193,232,16,252,255,36,171,255,248,141,255, + 15,182,204,15,182,232,131,198,4,193,232,16,252,255,36,171,255,248,143,255, 85,141,108,36,12,85,83,82,81,80,15,182,69,252,252,138,101,252,248,137,125, 252,252,137,117,252,248,139,93,0,139,139,233,199,131,233,237,137,131,233, 137,139,233,129,252,236,239,252,247,131,233,237,15,132,244,247,252,242,15, @@ -434,29 +434,29 @@ static const unsigned char build_actionlist[15191] = { 192,252,242,15,17,93,184,252,242,15,17,85,176,252,242,15,17,77,168,252,242, 15,17,69,160,248,1,139,171,233,139,147,233,137,171,233,137,149,233,141,84, 36,16,141,139,233,232,251,1,22,137,196,139,149,233,139,116,36,24,137,108, - 36,48,255,248,142,255,139,122,252,248,139,191,233,139,191,233,199,131,233, + 36,48,255,248,144,255,139,122,252,248,139,191,233,139,191,233,199,131,233, 0,0,0,0,199,131,233,237,139,6,15,182,204,15,182,232,131,198,4,193,232,16, - 252,255,36,171,255,248,81,255,217,124,36,4,137,68,36,8,102,184,0,4,102,11, + 252,255,36,171,255,248,83,255,217,124,36,4,137,68,36,8,102,184,0,4,102,11, 68,36,4,102,37,252,255,252,247,102,137,68,36,6,217,108,36,6,217,252,252,217, - 108,36,4,139,68,36,8,195,255,248,143,102,15,252,239,210,102,15,118,210,102, + 108,36,4,139,68,36,8,195,255,248,145,102,15,252,239,210,102,15,118,210,102, 15,115,210,1,184,0,0,48,67,102,15,110,216,102,15,112,219,81,15,40,200,102, 15,84,202,102,15,46,217,15,134,244,247,102,15,85,208,252,242,15,88,203,252, 242,15,92,203,102,15,86,202,184,0,0,252,240,63,102,15,110,208,102,15,112, 210,81,252,242,15,194,193,1,102,15,84,194,252,242,15,92,200,15,40,193,248, - 1,195,248,83,255,217,124,36,4,137,68,36,8,102,184,0,8,102,11,68,36,4,102, + 1,195,248,85,255,217,124,36,4,137,68,36,8,102,184,0,8,102,11,68,36,4,102, 37,252,255,252,251,102,137,68,36,6,217,108,36,6,217,252,252,217,108,36,4, - 139,68,36,8,195,255,248,144,102,15,252,239,210,102,15,118,210,102,15,115, + 139,68,36,8,195,255,248,146,102,15,252,239,210,102,15,118,210,102,15,115, 210,1,184,0,0,48,67,102,15,110,216,102,15,112,219,81,15,40,200,102,15,84, 202,102,15,46,217,15,134,244,247,102,15,85,208,252,242,15,88,203,252,242, 15,92,203,102,15,86,202,184,0,0,252,240,191,102,15,110,208,102,15,112,210, 81,252,242,15,194,193,6,102,15,84,194,252,242,15,92,200,15,40,193,248,1,195, - 248,103,255,217,124,36,4,137,68,36,8,102,184,0,12,102,11,68,36,4,102,137, - 68,36,6,217,108,36,6,217,252,252,217,108,36,4,139,68,36,8,195,255,248,145, + 248,105,255,217,124,36,4,137,68,36,8,102,184,0,12,102,11,68,36,4,102,137, + 68,36,6,217,108,36,6,217,252,252,217,108,36,4,139,68,36,8,195,255,248,147, 102,15,252,239,210,102,15,118,210,102,15,115,210,1,184,0,0,48,67,102,15,110, 216,102,15,112,219,81,15,40,200,102,15,84,202,102,15,46,217,15,134,244,247, 102,15,85,208,15,40,193,252,242,15,88,203,252,242,15,92,203,184,0,0,252,240, 63,102,15,110,216,102,15,112,219,81,252,242,15,194,193,1,102,15,84,195,252, - 242,15,92,200,102,15,86,202,15,40,193,248,1,195,248,146,255,15,40,232,252, + 242,15,92,200,102,15,86,202,15,40,193,248,1,195,248,148,255,15,40,232,252, 242,15,94,193,102,15,252,239,210,102,15,118,210,102,15,115,210,1,184,0,0, 48,67,102,15,110,216,102,15,112,219,81,15,40,224,102,15,84,226,102,15,46, 220,15,134,244,247,102,15,85,208,252,242,15,88,227,252,242,15,92,227,102, @@ -465,10 +465,10 @@ static const unsigned char build_actionlist[15191] = { 242,15,92,193,195,248,1,252,242,15,89,200,15,40,197,252,242,15,92,193,195, 255,217,193,216,252,241,217,124,36,4,102,184,0,4,102,11,68,36,4,102,37,252, 255,252,247,102,137,68,36,6,217,108,36,6,217,252,252,217,108,36,4,222,201, - 222,252,233,195,255,248,87,217,252,234,222,201,248,147,217,84,36,4,129,124, + 222,252,233,195,255,248,89,217,252,234,222,201,248,149,217,84,36,4,129,124, 36,4,0,0,128,127,15,132,244,247,129,124,36,4,0,0,128,252,255,15,132,244,248, - 248,148,217,192,217,252,252,220,252,233,217,201,217,252,240,217,232,222,193, - 217,252,253,221,217,248,1,195,248,2,221,216,217,252,238,195,255,248,106,219, + 248,150,217,192,217,252,252,220,252,233,217,201,217,252,240,217,232,222,193, + 217,252,253,221,217,248,1,195,248,2,221,216,217,252,238,195,255,248,108,219, 84,36,4,219,68,36,4,255,223,252,233,255,221,252,233,223,224,158,255,15,133, 244,254,15,138,244,255,221,216,139,68,36,4,131,252,248,1,15,142,244,252,248, 1,169,1,0,0,0,15,133,244,248,216,200,209,232,252,233,244,1,248,2,209,232, @@ -477,14 +477,14 @@ static const unsigned char build_actionlist[15191] = { 244,253,217,232,222,252,241,252,247,216,131,252,248,1,15,132,244,5,252,233, 244,1,248,7,221,216,217,232,195,248,8,217,84,36,4,217,201,217,84,36,8,139, 68,36,4,209,224,61,0,0,0,252,255,15,132,244,248,139,68,36,8,209,224,15,132, - 244,250,61,0,0,0,252,255,15,132,244,250,217,252,241,252,233,244,148,248,9, + 244,250,61,0,0,0,252,255,15,132,244,250,217,252,241,252,233,244,150,248,9, 255,217,232,255,223,252,234,255,221,252,234,223,224,158,255,15,132,244,247, 217,201,248,1,221,216,195,248,2,217,225,217,232,255,15,132,244,249,221,216, 217,225,217,252,238,184,0,0,0,0,15,146,208,209,200,51,68,36,4,15,137,244, 249,217,201,248,3,221,217,217,225,195,248,4,131,124,36,4,0,15,141,244,3,221, 216,221,216,133,192,15,132,244,251,217,252,238,195,248,5,199,68,36,4,0,0, - 128,127,217,68,36,4,195,255,248,106,255,248,149,252,242,15,45,193,252,242, - 15,42,208,102,15,46,202,15,133,244,254,15,138,244,255,248,150,131,252,248, + 128,127,217,68,36,4,195,255,248,108,255,248,151,252,242,15,45,193,252,242, + 15,42,208,102,15,46,202,15,133,244,254,15,138,244,255,248,152,131,252,248, 1,15,142,244,252,248,1,169,1,0,0,0,15,133,244,248,252,242,15,89,192,209,232, 252,233,244,1,248,2,209,232,15,132,244,251,15,40,200,248,3,252,242,15,89, 192,209,232,15,132,244,250,15,131,244,3,255,252,242,15,89,200,252,233,244, @@ -504,29 +504,29 @@ static const unsigned char build_actionlist[15191] = { 87,192,136,196,15,146,208,48,224,15,133,244,1,248,3,184,0,0,252,240,127,102, 15,110,192,102,15,112,192,81,195,248,4,102,15,80,193,133,192,15,133,244,3, 255,15,87,192,195,248,5,102,15,80,193,133,192,15,132,244,3,15,87,192,195, - 248,151,255,139,68,36,12,252,242,15,16,68,36,4,131,252,248,1,15,132,244,247, - 15,135,244,248,232,244,81,252,233,244,253,248,1,232,244,83,252,233,244,253, - 248,2,131,252,248,3,15,132,244,247,15,135,244,248,232,244,103,255,252,233, + 248,153,255,139,68,36,12,252,242,15,16,68,36,4,131,252,248,1,15,132,244,247, + 15,135,244,248,232,244,83,252,233,244,253,248,1,232,244,85,252,233,244,253, + 248,2,131,252,248,3,15,132,244,247,15,135,244,248,232,244,105,255,252,233, 244,253,248,1,252,242,15,81,192,248,7,252,242,15,17,68,36,4,221,68,36,4,195, - 248,2,221,68,36,4,131,252,248,5,15,130,244,87,15,132,244,147,248,2,131,252, + 248,2,221,68,36,4,131,252,248,5,15,130,244,89,15,132,244,149,248,2,131,252, 248,7,15,132,244,247,15,135,244,248,217,252,237,217,201,217,252,241,195,248, 1,217,232,217,201,217,252,241,195,248,2,131,252,248,9,15,132,244,247,15,135, 244,248,255,217,252,236,217,201,217,252,241,195,248,1,217,252,254,195,248, 2,131,252,248,11,15,132,244,247,15,135,244,255,217,252,255,195,248,1,217, 252,242,221,216,195,255,139,68,36,12,221,68,36,4,131,252,248,1,15,130,244, - 81,15,132,244,83,131,252,248,3,15,130,244,103,15,135,244,248,217,252,250, - 195,248,2,131,252,248,5,15,130,244,87,15,132,244,147,131,252,248,7,15,132, + 83,15,132,244,85,131,252,248,3,15,130,244,105,15,135,244,248,217,252,250, + 195,248,2,131,252,248,5,15,130,244,89,15,132,244,149,131,252,248,7,15,132, 244,247,15,135,244,248,217,252,237,217,201,217,252,241,195,248,1,217,232, 217,201,217,252,241,195,248,2,131,252,248,9,15,132,244,247,255,15,135,244, 248,217,252,236,217,201,217,252,241,195,248,1,217,252,254,195,248,2,131,252, 248,11,15,132,244,247,15,135,244,255,217,252,255,195,248,1,217,252,242,221, - 216,195,255,248,9,204,248,152,255,139,68,36,20,252,242,15,16,68,36,4,252, + 216,195,255,248,9,204,248,154,255,139,68,36,20,252,242,15,16,68,36,4,252, 242,15,16,76,36,12,131,252,248,1,15,132,244,247,15,135,244,248,252,242,15, 88,193,248,7,252,242,15,17,68,36,4,221,68,36,4,195,248,1,252,242,15,92,193, 252,233,244,7,248,2,131,252,248,3,15,132,244,247,15,135,244,248,252,242,15, 89,193,252,233,244,7,248,1,252,242,15,94,193,252,233,244,7,248,2,131,252, - 248,5,15,132,244,247,255,15,135,244,248,232,244,146,252,233,244,7,248,1,90, - 232,244,106,82,252,233,244,7,248,2,131,252,248,7,15,132,244,247,15,135,244, + 248,5,15,132,244,247,255,15,135,244,248,232,244,148,252,233,244,7,248,1,90, + 232,244,108,82,252,233,244,7,248,2,131,252,248,7,15,132,244,247,15,135,244, 248,184,0,0,0,128,102,15,110,200,102,15,112,201,81,15,87,193,252,233,244, 7,248,1,102,15,252,239,201,102,15,118,201,102,15,115,209,1,15,84,193,252, 233,244,7,248,2,255,131,252,248,9,15,135,244,248,221,68,36,4,221,68,36,12, @@ -535,18 +535,18 @@ static const unsigned char build_actionlist[15191] = { 244,7,248,1,252,242,15,95,193,252,233,244,7,248,9,204,255,139,68,36,20,221, 68,36,4,221,68,36,12,131,252,248,1,15,132,244,247,15,135,244,248,222,193, 195,248,1,222,252,233,195,248,2,131,252,248,3,15,132,244,247,15,135,244,248, - 222,201,195,248,1,222,252,249,195,248,2,131,252,248,5,15,130,244,146,15,132, - 244,106,131,252,248,7,15,132,244,247,15,135,244,248,255,221,216,217,224,195, + 222,201,195,248,1,222,252,249,195,248,2,131,252,248,5,15,130,244,148,15,132, + 244,108,131,252,248,7,15,132,244,247,15,135,244,248,255,221,216,217,224,195, 248,1,221,216,217,225,195,248,2,131,252,248,9,15,132,244,247,15,135,244,248, 217,252,243,195,248,1,217,201,217,252,253,221,217,195,248,2,131,252,248,11, 15,132,244,247,15,135,244,255,255,219,252,233,219,209,221,217,195,248,1,219, 252,233,218,209,221,217,195,255,221,225,223,224,252,246,196,1,15,132,244, 248,217,201,248,2,221,216,195,248,1,221,225,223,224,252,246,196,1,15,133, - 244,248,217,201,248,2,221,216,195,255,248,153,156,90,137,209,129,252,242, + 244,248,217,201,248,2,221,216,195,255,248,155,156,90,137,209,129,252,242, 0,0,32,0,82,157,156,90,49,192,57,209,15,132,244,247,139,68,36,4,87,83,15, 162,139,124,36,16,137,7,137,95,4,137,79,8,137,87,12,91,95,248,1,195,255,249, - 255,129,124,253,202,4,239,15,135,244,41,129,124,253,194,4,239,15,135,244, - 41,255,252,242,15,16,4,194,131,198,4,102,15,46,4,202,255,221,4,202,221,4, + 255,129,124,253,202,4,239,15,135,244,43,129,124,253,194,4,239,15,135,244, + 43,255,252,242,15,16,4,194,131,198,4,102,15,46,4,202,255,221,4,202,221,4, 194,131,198,4,255,223,252,233,221,216,255,218,252,233,223,224,158,255,15, 134,244,248,255,15,131,244,248,255,248,1,15,183,70,252,254,141,180,253,134, 233,248,2,139,6,15,182,204,15,182,232,131,198,4,193,232,16,252,255,36,171, @@ -557,7 +557,7 @@ static const unsigned char build_actionlist[15191] = { 70,252,254,141,180,253,134,233,248,1,255,248,5,57,108,202,4,15,133,244,2, 129,252,253,239,15,131,244,1,139,12,202,139,4,194,57,193,15,132,244,1,129, 252,253,239,15,135,244,2,139,169,233,133,252,237,15,132,244,2,252,246,133, - 233,235,15,133,244,2,255,49,252,237,255,189,1,0,0,0,255,252,233,244,45,255, + 233,235,15,133,244,2,255,49,252,237,255,189,1,0,0,0,255,252,233,244,47,255, 252,247,208,131,198,4,129,124,253,202,4,239,15,133,244,248,139,12,202,59, 12,135,255,131,198,4,129,124,253,202,4,239,15,135,244,248,255,252,242,15, 16,4,199,102,15,46,4,202,255,221,4,202,221,4,199,255,252,247,208,131,198, @@ -568,18 +568,18 @@ static const unsigned char build_actionlist[15191] = { 4,202,139,6,15,182,204,15,182,232,131,198,4,193,232,16,252,255,36,171,255, 49,252,237,129,124,253,194,4,239,129,213,239,137,108,202,4,139,6,15,182,204, 15,182,232,131,198,4,193,232,16,252,255,36,171,255,129,124,253,194,4,239, - 15,135,244,48,255,252,242,15,16,4,194,184,0,0,0,128,102,15,110,200,102,15, + 15,135,244,50,255,252,242,15,16,4,194,184,0,0,0,128,102,15,110,200,102,15, 112,201,81,15,87,193,252,242,15,17,4,202,255,221,4,194,217,224,221,28,202, 255,129,124,253,194,4,239,15,133,244,248,139,4,194,255,15,87,192,252,242, 15,42,128,233,248,1,252,242,15,17,4,202,255,219,128,233,248,1,221,28,202, 255,139,6,15,182,204,15,182,232,131,198,4,193,232,16,252,255,36,171,248,2, - 129,124,253,194,4,239,15,133,244,50,139,12,194,137,213,232,251,1,18,255,252, + 129,124,253,194,4,239,15,133,244,52,139,12,194,137,213,232,251,1,18,255,252, 242,15,42,192,137,252,234,255,137,4,36,137,252,234,219,4,36,255,15,182,78, 252,253,252,233,244,1,255,15,182,252,236,15,182,192,255,129,124,253,252,234, - 4,239,15,135,244,46,255,252,242,15,16,4,252,234,252,242,15,88,4,199,255,221, - 4,252,234,220,4,199,255,129,124,253,252,234,4,239,15,135,244,47,255,252,242, + 4,239,15,135,244,48,255,252,242,15,16,4,252,234,252,242,15,88,4,199,255,221, + 4,252,234,220,4,199,255,129,124,253,252,234,4,239,15,135,244,49,255,252,242, 15,16,4,199,252,242,15,88,4,252,234,255,221,4,199,220,4,252,234,255,129,124, - 253,252,234,4,239,15,135,244,49,129,124,253,194,4,239,15,135,244,49,255,252, + 253,252,234,4,239,15,135,244,51,129,124,253,194,4,239,15,135,244,51,255,252, 242,15,16,4,252,234,252,242,15,88,4,194,255,221,4,252,234,220,4,194,255,252, 242,15,16,4,252,234,252,242,15,92,4,199,255,221,4,252,234,220,36,199,255, 252,242,15,16,4,199,252,242,15,92,4,252,234,255,221,4,199,220,36,252,234, @@ -593,10 +593,10 @@ static const unsigned char build_actionlist[15191] = { 221,4,252,234,220,52,194,255,252,242,15,16,4,252,234,252,242,15,16,12,199, 255,221,4,252,234,221,4,199,255,252,242,15,16,4,199,252,242,15,16,12,252, 234,255,221,4,199,221,4,252,234,255,252,242,15,16,4,252,234,252,242,15,16, - 12,194,255,221,4,252,234,221,4,194,255,248,154,232,244,146,255,252,233,244, - 154,255,232,244,106,255,15,182,252,236,15,182,192,141,12,194,41,232,137,76, - 36,4,137,68,36,8,248,33,139,108,36,48,137,44,36,137,149,233,137,116,36,24, - 232,251,1,23,139,149,233,133,192,15,133,244,42,15,182,110,252,255,15,182, + 12,194,255,221,4,252,234,221,4,194,255,248,156,232,244,148,255,252,233,244, + 156,255,232,244,108,255,15,182,252,236,15,182,192,141,12,194,41,232,137,76, + 36,4,137,68,36,8,248,35,139,108,36,48,137,44,36,137,149,233,137,116,36,24, + 232,251,1,23,139,149,233,133,192,15,133,244,44,15,182,110,252,255,15,182, 78,252,253,139,68,252,234,4,139,44,252,234,137,68,202,4,137,44,202,139,6, 15,182,204,15,182,232,131,198,4,193,232,16,252,255,36,171,255,252,247,208, 139,4,135,199,68,202,4,237,137,4,202,139,6,15,182,204,15,182,232,131,198, @@ -637,55 +637,55 @@ static const unsigned char build_actionlist[15191] = { 139,149,233,15,182,78,252,253,137,4,202,199,68,202,4,237,139,6,15,182,204, 15,182,232,131,198,4,193,232,16,252,255,36,171,248,3,137,252,233,232,251, 1,28,15,183,70,252,254,252,247,208,252,233,244,2,255,252,247,208,139,106, - 252,248,139,173,233,139,4,135,252,233,244,155,255,252,247,208,139,106,252, - 248,139,173,233,139,4,135,252,233,244,156,255,15,182,252,236,15,182,192,129, - 124,253,252,234,4,239,15,133,244,36,139,44,252,234,129,124,253,194,4,239, + 252,248,139,173,233,139,4,135,252,233,244,157,255,252,247,208,139,106,252, + 248,139,173,233,139,4,135,252,233,244,158,255,15,182,252,236,15,182,192,129, + 124,253,252,234,4,239,15,133,244,38,139,44,252,234,129,124,253,194,4,239, 15,135,244,251,255,252,242,15,16,4,194,252,242,15,45,192,252,242,15,42,200, - 102,15,46,193,255,221,4,194,219,20,36,219,4,36,255,15,133,244,36,59,133,233, - 15,131,244,36,193,224,3,3,133,233,129,120,253,4,239,15,132,244,248,248,1, + 102,15,46,193,255,221,4,194,219,20,36,219,4,36,255,15,133,244,38,59,133,233, + 15,131,244,38,193,224,3,3,133,233,129,120,253,4,239,15,132,244,248,248,1, 139,40,139,64,4,137,44,202,137,68,202,4,139,6,15,182,204,15,182,232,131,198, 4,193,232,16,252,255,36,171,248,2,131,189,233,0,15,132,244,1,139,141,233, - 252,246,129,233,235,15,132,244,36,15,182,78,252,253,252,233,244,1,248,5,255, - 129,124,253,194,4,239,15,133,244,36,139,4,194,252,233,244,155,255,15,182, + 252,246,129,233,235,15,132,244,38,15,182,78,252,253,252,233,244,1,248,5,255, + 129,124,253,194,4,239,15,133,244,38,139,4,194,252,233,244,157,255,15,182, 252,236,15,182,192,252,247,208,139,4,135,129,124,253,252,234,4,239,15,133, - 244,34,139,44,252,234,248,155,139,141,233,35,136,233,105,201,239,3,141,233, + 244,36,139,44,252,234,248,157,139,141,233,35,136,233,105,201,239,3,141,233, 248,1,129,185,233,239,15,133,244,250,57,129,233,15,133,244,250,129,121,253, 4,239,15,132,244,251,15,182,70,252,253,139,41,139,73,4,137,44,194,248,2,255, 137,76,194,4,139,6,15,182,204,15,182,232,131,198,4,193,232,16,252,255,36, 171,248,3,15,182,70,252,253,185,237,252,233,244,2,248,4,139,137,233,133,201, 15,133,244,1,248,5,139,141,233,133,201,15,132,244,3,252,246,129,233,235,15, - 133,244,3,252,233,244,34,255,15,182,252,236,15,182,192,129,124,253,252,234, - 4,239,15,133,244,35,139,44,252,234,59,133,233,15,131,244,35,193,224,3,3,133, + 133,244,3,252,233,244,36,255,15,182,252,236,15,182,192,129,124,253,252,234, + 4,239,15,133,244,37,139,44,252,234,59,133,233,15,131,244,37,193,224,3,3,133, 233,129,120,253,4,239,15,132,244,248,248,1,139,40,139,64,4,137,44,202,137, 68,202,4,139,6,15,182,204,15,182,232,131,198,4,193,232,16,252,255,36,171, 248,2,131,189,233,0,15,132,244,1,139,141,233,252,246,129,233,235,15,132,244, - 35,255,15,182,252,236,15,182,192,129,124,253,252,234,4,239,15,133,244,39, - 139,44,252,234,129,124,253,194,4,239,15,135,244,251,255,15,133,244,39,59, - 133,233,15,131,244,39,193,224,3,3,133,233,129,120,253,4,239,15,132,244,249, + 37,255,15,182,252,236,15,182,192,129,124,253,252,234,4,239,15,133,244,41, + 139,44,252,234,129,124,253,194,4,239,15,135,244,251,255,15,133,244,41,59, + 133,233,15,131,244,41,193,224,3,3,133,233,129,120,253,4,239,15,132,244,249, 248,1,252,246,133,233,235,15,133,244,253,248,2,139,108,202,4,139,12,202,137, 104,4,137,8,139,6,15,182,204,15,182,232,131,198,4,193,232,16,252,255,36,171, 248,3,131,189,233,0,15,132,244,1,139,141,233,255,252,246,129,233,235,15,132, - 244,39,15,182,78,252,253,252,233,244,1,248,5,129,124,253,194,4,239,15,133, - 244,39,139,4,194,252,233,244,156,248,7,128,165,233,235,139,139,233,137,171, + 244,41,15,182,78,252,253,252,233,244,1,248,5,129,124,253,194,4,239,15,133, + 244,41,139,4,194,252,233,244,158,248,7,128,165,233,235,139,139,233,137,171, 233,137,141,233,15,182,78,252,253,252,233,244,2,255,15,182,252,236,15,182, - 192,252,247,208,139,4,135,129,124,253,252,234,4,239,15,133,244,37,139,44, - 252,234,248,156,139,141,233,35,136,233,105,201,239,198,133,233,0,3,141,233, + 192,252,247,208,139,4,135,129,124,253,252,234,4,239,15,133,244,39,139,44, + 252,234,248,158,139,141,233,35,136,233,105,201,239,198,133,233,0,3,141,233, 248,1,129,185,233,239,15,133,244,251,57,129,233,15,133,244,251,129,121,253, 4,239,15,132,244,250,248,2,255,252,246,133,233,235,15,133,244,253,248,3,15, 182,70,252,253,139,108,194,4,139,4,194,137,105,4,137,1,139,6,15,182,204,15, 182,232,131,198,4,193,232,16,252,255,36,171,248,4,131,189,233,0,15,132,244, - 2,137,76,36,16,139,141,233,252,246,129,233,235,15,132,244,37,139,76,36,16, + 2,137,76,36,16,139,141,233,252,246,129,233,235,15,132,244,39,139,76,36,16, 252,233,244,2,248,5,139,137,233,133,201,15,133,244,1,255,139,141,233,133, - 201,15,132,244,252,252,246,129,233,235,15,132,244,37,248,6,137,68,36,16,199, + 201,15,132,244,252,252,246,129,233,235,15,132,244,39,248,6,137,68,36,16,199, 68,36,20,237,137,108,36,12,141,68,36,16,137,108,36,4,139,108,36,48,137,68, 36,8,137,44,36,137,149,233,137,116,36,24,232,251,1,30,139,149,233,139,108, 36,12,137,193,252,233,244,2,248,7,128,165,233,235,139,131,233,137,171,233, 137,133,233,252,233,244,3,255,15,182,252,236,15,182,192,129,124,253,252,234, - 4,239,15,133,244,38,139,44,252,234,59,133,233,15,131,244,38,193,224,3,3,133, + 4,239,15,133,244,40,139,44,252,234,59,133,233,15,131,244,40,193,224,3,3,133, 233,129,120,253,4,239,15,132,244,249,248,1,252,246,133,233,235,15,133,244, 253,248,2,139,108,202,4,139,12,202,137,104,4,137,8,139,6,15,182,204,15,182, 232,131,198,4,193,232,16,252,255,36,171,248,3,131,189,233,0,15,132,244,1, - 255,139,141,233,252,246,129,233,235,15,132,244,38,15,182,78,252,253,252,233, + 255,139,141,233,252,246,129,233,235,15,132,244,40,15,182,78,252,253,252,233, 244,1,248,7,128,165,233,235,139,139,233,137,171,233,137,141,233,15,182,78, 252,253,252,233,244,2,255,137,124,36,16,255,221,4,199,219,92,36,12,255,248, 1,141,12,202,139,105,252,248,252,246,133,233,235,15,133,244,253,248,2,139, @@ -697,8 +697,8 @@ static const unsigned char build_actionlist[15191] = { 8,137,44,36,137,116,36,24,232,251,1,31,139,149,233,15,182,78,252,253,252, 233,244,1,248,7,128,165,233,235,139,131,233,137,171,233,255,137,133,233,252, 233,244,2,255,3,68,36,20,255,141,76,202,8,139,105,252,248,129,121,253,252, - 252,239,15,133,244,29,252,255,165,233,255,141,76,202,8,137,215,139,105,252, - 248,129,121,253,252,252,239,15,133,244,29,248,51,139,114,252,252,252,247, + 252,239,15,133,244,31,252,255,165,233,255,141,76,202,8,137,215,139,105,252, + 248,129,121,253,252,252,239,15,133,244,31,248,53,139,114,252,252,252,247, 198,237,15,133,244,253,248,1,137,106,252,248,137,68,36,20,131,232,1,15,132, 244,249,248,2,139,41,137,47,139,105,4,137,111,4,131,199,8,131,193,8,131,232, 1,15,133,244,2,139,106,252,248,248,3,137,209,128,189,233,1,15,135,244,251, @@ -708,7 +708,7 @@ static const unsigned char build_actionlist[15191] = { 139,114,252,252,252,233,244,1,255,141,76,202,8,139,105,232,139,65,252,236, 137,41,137,65,4,139,105,252,240,139,65,252,244,137,105,8,137,65,12,139,105, 224,139,65,228,137,105,252,248,137,65,252,252,129,252,248,239,184,3,0,0,0, - 15,133,244,29,252,255,165,233,255,15,182,252,236,139,66,252,248,141,12,202, + 15,133,244,31,252,255,165,233,255,15,182,252,236,139,66,252,248,141,12,202, 139,128,233,15,182,128,233,137,124,36,16,141,188,253,194,233,43,122,252,252, 133,252,237,15,132,244,251,141,108,252,233,252,248,57,215,15,131,244,248, 248,1,139,71,252,248,137,1,139,71,252,252,131,199,8,137,65,4,131,193,8,57, @@ -730,8 +730,8 @@ static const unsigned char build_actionlist[15191] = { 248,6,255,199,71,252,252,237,131,199,8,255,199,68,194,252,244,237,255,131, 192,1,252,233,244,5,248,7,15,139,244,18,131,230,252,248,41,252,242,255,1, 252,241,255,137,252,245,209,252,237,129,229,239,102,131,172,253,43,233,1, - 15,132,244,139,255,141,12,202,255,129,121,253,4,239,15,135,244,52,129,121, - 253,12,239,15,135,244,52,255,139,105,20,255,129,252,253,239,15,135,244,52, + 15,132,244,141,255,141,12,202,255,129,121,253,4,239,15,135,244,54,129,121, + 253,12,239,15,135,244,54,255,139,105,20,255,129,252,253,239,15,135,244,54, 255,252,242,15,16,1,252,242,15,16,73,8,255,252,242,15,88,65,16,252,242,15, 17,1,133,252,237,15,136,244,249,255,15,140,244,249,255,102,15,46,200,248, 1,252,242,15,17,65,24,255,221,65,8,221,1,255,220,65,16,221,17,221,81,24,133, @@ -761,7 +761,9 @@ enum { GLOB_vm_leave_cp, GLOB_vm_leave_unw, GLOB_vm_unwind_c, + GLOB_vm_unwind_c_eh, GLOB_vm_unwind_ff, + GLOB_vm_unwind_ff_eh, GLOB_cont_dispatch, GLOB_vm_resume, GLOB_vm_pcall, @@ -911,7 +913,9 @@ static const char *const globnames[] = { "vm_leave_cp", "vm_leave_unw", "vm_unwind_c", + "vm_unwind_c_eh", "vm_unwind_ff", + "vm_unwind_ff_eh", "cont_dispatch", "vm_resume", "vm_pcall", @@ -1112,439 +1116,439 @@ static void build_subroutines(BuildCtx *ctx, int cmov, int sse) dasm_put(Dst, 362, FRAME_C, DISPATCH_GL(vmstate), ~LJ_VMST_C, Dt1(->base)); dasm_put(Dst, 453, Dt1(->top), Dt1(->cframe), Dt1(->maxstack), LJ_TNIL, Dt1(->top)); dasm_put(Dst, 532, Dt1(->top), Dt1(->glref), Dt2(->vmstate), ~LJ_VMST_C, CFRAME_RAWMASK, 1+1, Dt1(->base), Dt1(->glref), GG_G2DISP, LJ_TFALSE, DISPATCH_GL(vmstate), ~LJ_VMST_INTERP); - dasm_put(Dst, 634, FRAME_P, LJ_TTRUE, LUA_MINSTACK, Dt9(->bc), Dt1(->base), Dt1(->top), Dt1(->base), Dt1(->top), Dt7(->gate)); - dasm_put(Dst, 756, FRAME_C, CFRAME_RESUME, Dt1(->glref), GG_G2DISP, Dt1(->cframe), Dt1(->status), DISPATCH_GL(vmstate), ~LJ_VMST_INTERP, Dt1(->status), Dt1(->base), Dt1(->top), FRAME_TYPE, FRAME_CP); - dasm_put(Dst, 861, FRAME_C, Dt1(->cframe), Dt1(->cframe), Dt1(->glref), GG_G2DISP, DISPATCH_GL(vmstate), ~LJ_VMST_INTERP, Dt1(->base), Dt1(->top), LJ_TFUNC, Dt7(->gate)); - dasm_put(Dst, 954, Dt1(->stack), Dt1(->top), Dt1(->cframe), Dt1(->cframe), FRAME_CP, LJ_TNIL, Dt7(->pt), Dt9(->k), LJ_TSTR); - dasm_put(Dst, 1143, BC_GGET, DISPATCH_GL(tmptv), LJ_TTAB); + dasm_put(Dst, 622, FRAME_P, LJ_TTRUE, LUA_MINSTACK, Dt9(->bc), Dt1(->base), Dt1(->top), Dt1(->base)); + dasm_put(Dst, 725, Dt1(->top), Dt7(->gate), FRAME_CP, CFRAME_RESUME, Dt1(->glref), GG_G2DISP, Dt1(->cframe), Dt1(->status), DISPATCH_GL(vmstate), ~LJ_VMST_INTERP, Dt1(->status), Dt1(->base), Dt1(->top), FRAME_TYPE); + dasm_put(Dst, 845, FRAME_CP, FRAME_C, Dt1(->cframe), Dt1(->cframe), Dt1(->glref), GG_G2DISP, DISPATCH_GL(vmstate), ~LJ_VMST_INTERP, Dt1(->base), Dt1(->top), LJ_TFUNC, Dt7(->gate)); + dasm_put(Dst, 948, Dt1(->stack), Dt1(->top), Dt1(->cframe), Dt1(->cframe), FRAME_CP, LJ_TNIL, Dt7(->pt), Dt9(->k), LJ_TSTR); + dasm_put(Dst, 1137, BC_GGET, DISPATCH_GL(tmptv), LJ_TTAB); if (sse) { - dasm_put(Dst, 1179); + dasm_put(Dst, 1173); } else { - dasm_put(Dst, 1192); + dasm_put(Dst, 1186); } - dasm_put(Dst, 1205, Dt1(->base), Dt1(->base), Dt1(->top), FRAME_CONT, Dt7(->gate), LJ_TSTR, BC_GSET, DISPATCH_GL(tmptv)); - dasm_put(Dst, 1363, LJ_TTAB); + dasm_put(Dst, 1199, Dt1(->base), Dt1(->base), Dt1(->top), FRAME_CONT, Dt7(->gate), LJ_TSTR, BC_GSET, DISPATCH_GL(tmptv)); + dasm_put(Dst, 1357, LJ_TTAB); if (sse) { - dasm_put(Dst, 1179); + dasm_put(Dst, 1173); } else { - dasm_put(Dst, 1192); + dasm_put(Dst, 1186); } - dasm_put(Dst, 1383, Dt1(->base), Dt1(->base), Dt1(->top), FRAME_CONT, Dt7(->gate), Dt1(->base), Dt1(->base)); - dasm_put(Dst, 1590, -BCBIAS_J*4, LJ_TISTRUECOND, LJ_TISTRUECOND, Dt1(->base)); - dasm_put(Dst, 1701, Dt1(->base), Dt1(->base), FRAME_CONT, LJ_TFUNC); - dasm_put(Dst, 1830, Dt7(->gate), Dt1(->base), Dt1(->base), Dt1(->base), Dt1(->base), Dt7(->gate), Dt1(->base), Dt1(->base), GG_DISP_STATIC*4, 1+1); - dasm_put(Dst, 1990, LJ_TISTRUECOND, 1+1, ~LJ_TNUMX); + dasm_put(Dst, 1377, Dt1(->base), Dt1(->base), Dt1(->top), FRAME_CONT, Dt7(->gate), Dt1(->base), Dt1(->base)); + dasm_put(Dst, 1584, -BCBIAS_J*4, LJ_TISTRUECOND, LJ_TISTRUECOND, Dt1(->base)); + dasm_put(Dst, 1695, Dt1(->base), Dt1(->base), FRAME_CONT, LJ_TFUNC); + dasm_put(Dst, 1824, Dt7(->gate), Dt1(->base), Dt1(->base), Dt1(->base), Dt1(->base), Dt7(->gate), Dt1(->base), Dt1(->base), GG_DISP_STATIC*4, 1+1); + dasm_put(Dst, 1984, LJ_TISTRUECOND, 1+1, ~LJ_TNUMX); if (cmov) { - dasm_put(Dst, 2086); + dasm_put(Dst, 2080); } else { - dasm_put(Dst, 2090); + dasm_put(Dst, 2084); } - dasm_put(Dst, 2099, ((char *)(&((GCfuncC *)0)->upvalue)), LJ_TSTR, 1+1, LJ_TTAB, Dt6(->metatable), LJ_TNIL, DISPATCH_GL(mmname)+4*MM_metatable, LJ_TTAB, Dt6(->hmask)); - dasm_put(Dst, 2187, Dt5(->hash), sizeof(Node), Dt6(->node), DtB(->key.it), LJ_TSTR, DtB(->key.gcr), DtB(->next), LJ_TNIL); - dasm_put(Dst, 2242, LJ_TUDATA, LJ_TISNUM, LJ_TNUMX, DISPATCH_GL(gcroot[GCROOT_BASEMT]), 2+1, LJ_TTAB); - dasm_put(Dst, 2314, Dt6(->metatable), LJ_TTAB, Dt6(->metatable), LJ_TTAB, Dt6(->marked), LJ_GC_BLACK, Dt6(->marked), cast_byte(~LJ_GC_BLACK), DISPATCH_GL(gc.grayagain), DISPATCH_GL(gc.grayagain), Dt6(->gclist)); - dasm_put(Dst, 2379, 2+1, LJ_TTAB, 1+1, LJ_TISNUM); + dasm_put(Dst, 2093, ((char *)(&((GCfuncC *)0)->upvalue)), LJ_TSTR, 1+1, LJ_TTAB, Dt6(->metatable), LJ_TNIL, DISPATCH_GL(mmname)+4*MM_metatable, LJ_TTAB, Dt6(->hmask)); + dasm_put(Dst, 2181, Dt5(->hash), sizeof(Node), Dt6(->node), DtB(->key.it), LJ_TSTR, DtB(->key.gcr), DtB(->next), LJ_TNIL); + dasm_put(Dst, 2236, LJ_TUDATA, LJ_TISNUM, LJ_TNUMX, DISPATCH_GL(gcroot[GCROOT_BASEMT]), 2+1, LJ_TTAB); + dasm_put(Dst, 2308, Dt6(->metatable), LJ_TTAB, Dt6(->metatable), LJ_TTAB, Dt6(->marked), LJ_GC_BLACK, Dt6(->marked), cast_byte(~LJ_GC_BLACK), DISPATCH_GL(gc.grayagain), DISPATCH_GL(gc.grayagain), Dt6(->gclist)); + dasm_put(Dst, 2373, 2+1, LJ_TTAB, 1+1, LJ_TISNUM); if (sse) { - dasm_put(Dst, 2470); + dasm_put(Dst, 2464); } else { - dasm_put(Dst, 2480); + dasm_put(Dst, 2474); } - dasm_put(Dst, 2487, 1+1, LJ_TSTR, LJ_TSTR, LJ_TISNUM, DISPATCH_GL(gcroot[GCROOT_BASEMT_NUM]), DISPATCH_GL(gc.total), DISPATCH_GL(gc.threshold)); - dasm_put(Dst, 2549, Dt1(->base), Dt1(->base), 1+1, LJ_TTAB, Dt1(->base)); - dasm_put(Dst, 2639, Dt1(->base), 1+2, LJ_TNIL, LJ_TNIL, 1+1, LJ_TTAB); - dasm_put(Dst, 2745, Dt8(->upvalue[0]), LJ_TFUNC, LJ_TNIL, 1+3, 1+1, LJ_TTAB, LJ_TISNUM); + dasm_put(Dst, 2481, 1+1, LJ_TSTR, LJ_TSTR, LJ_TISNUM, DISPATCH_GL(gcroot[GCROOT_BASEMT_NUM]), DISPATCH_GL(gc.total), DISPATCH_GL(gc.threshold)); + dasm_put(Dst, 2543, Dt1(->base), Dt1(->base), 1+1, LJ_TTAB, Dt1(->base)); + dasm_put(Dst, 2633, Dt1(->base), 1+2, LJ_TNIL, LJ_TNIL, 1+1, LJ_TTAB); + dasm_put(Dst, 2739, Dt8(->upvalue[0]), LJ_TFUNC, LJ_TNIL, 1+3, 1+1, LJ_TTAB, LJ_TISNUM); if (sse) { - dasm_put(Dst, 2800); + dasm_put(Dst, 2794); } else { - dasm_put(Dst, 2839); + dasm_put(Dst, 2833); } - dasm_put(Dst, 2857, Dt6(->asize), Dt6(->array), LJ_TNIL, Dt6(->hmask), 1+0); - dasm_put(Dst, 2943, 1+1, LJ_TTAB, Dt8(->upvalue[0]), LJ_TFUNC); + dasm_put(Dst, 2851, Dt6(->asize), Dt6(->array), LJ_TNIL, Dt6(->hmask), 1+0); + dasm_put(Dst, 2937, 1+1, LJ_TTAB, Dt8(->upvalue[0]), LJ_TFUNC); if (sse) { - dasm_put(Dst, 2973); + dasm_put(Dst, 2967); } else { - dasm_put(Dst, 2983); + dasm_put(Dst, 2977); } - dasm_put(Dst, 2990, 1+3, 1+1, 8+FRAME_PCALL, DISPATCH_GL(hookmask), HOOK_ACTIVE, LJ_TFUNC, Dt7(->gate)); - dasm_put(Dst, 3063, 2+1, LJ_TFUNC, LJ_TFUNC, 2*8+FRAME_PCALL, 2*8, 1+1, LJ_TTHREAD); - dasm_put(Dst, 3161, Dt1(->cframe), Dt1(->status), LUA_YIELD, Dt1(->top), Dt1(->base), Dt1(->maxstack), Dt1(->top), Dt1(->base), Dt1(->top)); - dasm_put(Dst, 3226, DISPATCH_GL(vmstate), ~LJ_VMST_INTERP, Dt1(->base), LUA_YIELD, Dt1(->base), Dt1(->top), Dt1(->top)); - dasm_put(Dst, 3330, Dt1(->maxstack), LJ_TTRUE, FRAME_TYPE, LJ_TFALSE, Dt1(->top), Dt1(->top), 1+2); - dasm_put(Dst, 3449, Dt1(->top), Dt1(->base), Dt8(->upvalue[0].gcr), Dt1(->cframe), Dt1(->status), LUA_YIELD, Dt1(->top), Dt1(->base)); - dasm_put(Dst, 3529, Dt1(->maxstack), Dt1(->top), Dt1(->base), Dt1(->top), DISPATCH_GL(vmstate), ~LJ_VMST_INTERP, Dt1(->base)); - dasm_put(Dst, 3637, LUA_YIELD, Dt1(->base), Dt1(->top), Dt1(->top), Dt1(->maxstack), FRAME_TYPE); - dasm_put(Dst, 3733, Dt1(->top), Dt1(->base), Dt1(->cframe), CFRAME_CANYIELD, Dt1(->base), Dt1(->top), Dt1(->cframe), LUA_YIELD, Dt1(->status)); + dasm_put(Dst, 2984, 1+3, 1+1, 8+FRAME_PCALL, DISPATCH_GL(hookmask), HOOK_ACTIVE, LJ_TFUNC, Dt7(->gate)); + dasm_put(Dst, 3057, 2+1, LJ_TFUNC, LJ_TFUNC, 2*8+FRAME_PCALL, 2*8, 1+1, LJ_TTHREAD); + dasm_put(Dst, 3155, Dt1(->cframe), Dt1(->status), LUA_YIELD, Dt1(->top), Dt1(->base), Dt1(->maxstack), Dt1(->top), Dt1(->base), Dt1(->top)); + dasm_put(Dst, 3220, DISPATCH_GL(vmstate), ~LJ_VMST_INTERP, Dt1(->base), LUA_YIELD, Dt1(->base), Dt1(->top), Dt1(->top)); + dasm_put(Dst, 3324, Dt1(->maxstack), LJ_TTRUE, FRAME_TYPE, LJ_TFALSE, Dt1(->top), Dt1(->top), 1+2); + dasm_put(Dst, 3443, Dt1(->top), Dt1(->base), Dt8(->upvalue[0].gcr), Dt1(->cframe), Dt1(->status), LUA_YIELD, Dt1(->top), Dt1(->base)); + dasm_put(Dst, 3523, Dt1(->maxstack), Dt1(->top), Dt1(->base), Dt1(->top), DISPATCH_GL(vmstate), ~LJ_VMST_INTERP, Dt1(->base)); + dasm_put(Dst, 3631, LUA_YIELD, Dt1(->base), Dt1(->top), Dt1(->top), Dt1(->maxstack), FRAME_TYPE); + dasm_put(Dst, 3727, Dt1(->top), Dt1(->base), Dt1(->cframe), CFRAME_CANYIELD, Dt1(->base), Dt1(->top), Dt1(->cframe), LUA_YIELD, Dt1(->status)); if (sse) { - dasm_put(Dst, 3819, 1+1, LJ_TISNUM); + dasm_put(Dst, 3813, 1+1, LJ_TISNUM); } else { - dasm_put(Dst, 3880, 1+1, LJ_TISNUM); + dasm_put(Dst, 3874, 1+1, LJ_TISNUM); } - dasm_put(Dst, 3912, 1+1, FRAME_TYPE, LJ_TNIL); + dasm_put(Dst, 3906, 1+1, FRAME_TYPE, LJ_TNIL); if (sse) { - dasm_put(Dst, 3993, 1+1, LJ_TISNUM, 1+1, LJ_TISNUM); - dasm_put(Dst, 4055, 1+1, LJ_TISNUM); + dasm_put(Dst, 3987, 1+1, LJ_TISNUM, 1+1, LJ_TISNUM); + dasm_put(Dst, 4049, 1+1, LJ_TISNUM); } else { - dasm_put(Dst, 4085, 1+1, LJ_TISNUM, 1+1, LJ_TISNUM); - dasm_put(Dst, 4144, 1+1, LJ_TISNUM); + dasm_put(Dst, 4079, 1+1, LJ_TISNUM, 1+1, LJ_TISNUM); + dasm_put(Dst, 4138, 1+1, LJ_TISNUM); } - dasm_put(Dst, 4171, 1+1, LJ_TISNUM, 1+1, LJ_TISNUM, 1+1); - dasm_put(Dst, 4240, LJ_TISNUM, 1+1, LJ_TISNUM, 1+1); - dasm_put(Dst, 4297, LJ_TISNUM, 1+1, LJ_TISNUM, 1+1); - dasm_put(Dst, 4360, LJ_TISNUM, 1+1, LJ_TISNUM, 1+1, LJ_TISNUM); - dasm_put(Dst, 4450); + dasm_put(Dst, 4165, 1+1, LJ_TISNUM, 1+1, LJ_TISNUM, 1+1); + dasm_put(Dst, 4234, LJ_TISNUM, 1+1, LJ_TISNUM, 1+1); + dasm_put(Dst, 4291, LJ_TISNUM, 1+1, LJ_TISNUM, 1+1); + dasm_put(Dst, 4354, LJ_TISNUM, 1+1, LJ_TISNUM, 1+1, LJ_TISNUM); + dasm_put(Dst, 4444); if (sse) { - dasm_put(Dst, 4462, 1+1, LJ_TISNUM); + dasm_put(Dst, 4456, 1+1, LJ_TISNUM); } else { - dasm_put(Dst, 4493, 1+1, LJ_TISNUM); + dasm_put(Dst, 4487, 1+1, LJ_TISNUM); } - dasm_put(Dst, 4518); + dasm_put(Dst, 4512); if (sse) { - dasm_put(Dst, 4540, 1+1, LJ_TISNUM); + dasm_put(Dst, 4534, 1+1, LJ_TISNUM); } else { - dasm_put(Dst, 4571, 1+1, LJ_TISNUM); + dasm_put(Dst, 4565, 1+1, LJ_TISNUM); } - dasm_put(Dst, 4596); + dasm_put(Dst, 4590); if (sse) { - dasm_put(Dst, 4618, 1+1, LJ_TISNUM); + dasm_put(Dst, 4612, 1+1, LJ_TISNUM); } else { - dasm_put(Dst, 4649, 1+1, LJ_TISNUM); + dasm_put(Dst, 4643, 1+1, LJ_TISNUM); } - dasm_put(Dst, 4674); + dasm_put(Dst, 4668); if (sse) { - dasm_put(Dst, 4698, 1+1, LJ_TISNUM, Dt8(->upvalue[0])); + dasm_put(Dst, 4692, 1+1, LJ_TISNUM, Dt8(->upvalue[0])); } else { - dasm_put(Dst, 4733, 1+1, LJ_TISNUM, Dt8(->upvalue[0])); + dasm_put(Dst, 4727, 1+1, LJ_TISNUM, Dt8(->upvalue[0])); } - dasm_put(Dst, 4762, 2+1, LJ_TISNUM, LJ_TISNUM, 2+1, LJ_TISNUM, LJ_TISNUM); - dasm_put(Dst, 4827, 1+1, LJ_TISNUM); + dasm_put(Dst, 4756, 2+1, LJ_TISNUM, LJ_TISNUM, 2+1, LJ_TISNUM, LJ_TISNUM); + dasm_put(Dst, 4821, 1+1, LJ_TISNUM); if (sse) { + dasm_put(Dst, 4916); + } else { dasm_put(Dst, 4922); - } else { - dasm_put(Dst, 4928); } - dasm_put(Dst, 4937); + dasm_put(Dst, 4931); if (sse) { + dasm_put(Dst, 4956); + } else { dasm_put(Dst, 4962); - } else { - dasm_put(Dst, 4968); } - dasm_put(Dst, 4971, 1+2); + dasm_put(Dst, 4965, 1+2); if (sse) { - dasm_put(Dst, 4980); + dasm_put(Dst, 4974); } else { - dasm_put(Dst, 4988); + dasm_put(Dst, 4982); } - dasm_put(Dst, 1587); + dasm_put(Dst, 1581); if (sse) { - dasm_put(Dst, 4996); + dasm_put(Dst, 4990); } else { - dasm_put(Dst, 5028); + dasm_put(Dst, 5022); } - dasm_put(Dst, 5047); + dasm_put(Dst, 5041); if (sse) { - dasm_put(Dst, 5063, 1+1, LJ_TISNUM); + dasm_put(Dst, 5057, 1+1, LJ_TISNUM); } else { - dasm_put(Dst, 5088, 1+1, LJ_TISNUM); + dasm_put(Dst, 5082, 1+1, LJ_TISNUM); } - dasm_put(Dst, 5110); + dasm_put(Dst, 5104); if (sse) { - dasm_put(Dst, 5128); + dasm_put(Dst, 5122); } else { - dasm_put(Dst, 5154); + dasm_put(Dst, 5148); } - dasm_put(Dst, 5171, 1+2); + dasm_put(Dst, 5165, 1+2); if (sse) { - dasm_put(Dst, 5211); + dasm_put(Dst, 5205); } else { - dasm_put(Dst, 5219); + dasm_put(Dst, 5213); } - dasm_put(Dst, 5229, 2+1, LJ_TISNUM, LJ_TISNUM); + dasm_put(Dst, 5223, 2+1, LJ_TISNUM, LJ_TISNUM); if (sse) { - dasm_put(Dst, 5281, 1+1, LJ_TISNUM, LJ_TISNUM); + dasm_put(Dst, 5275, 1+1, LJ_TISNUM, LJ_TISNUM); } else { - dasm_put(Dst, 5328, 2+1, LJ_TISNUM, LJ_TISNUM); + dasm_put(Dst, 5322, 2+1, LJ_TISNUM, LJ_TISNUM); } if (sse) { - dasm_put(Dst, 5369, 1+1, LJ_TISNUM, LJ_TISNUM); + dasm_put(Dst, 5363, 1+1, LJ_TISNUM, LJ_TISNUM); } else { - dasm_put(Dst, 5440, 1+1, LJ_TISNUM, LJ_TISNUM); + dasm_put(Dst, 5434, 1+1, LJ_TISNUM, LJ_TISNUM); if (cmov) { - dasm_put(Dst, 5493); + dasm_put(Dst, 5487); } else { - dasm_put(Dst, 5501); + dasm_put(Dst, 5495); } - dasm_put(Dst, 5432); + dasm_put(Dst, 5426); } if (sse) { - dasm_put(Dst, 5522, 1+1, LJ_TISNUM, LJ_TISNUM); + dasm_put(Dst, 5516, 1+1, LJ_TISNUM, LJ_TISNUM); } else { - dasm_put(Dst, 5593, 1+1, LJ_TISNUM, LJ_TISNUM); + dasm_put(Dst, 5587, 1+1, LJ_TISNUM, LJ_TISNUM); if (cmov) { - dasm_put(Dst, 5646); + dasm_put(Dst, 5640); } else { - dasm_put(Dst, 5654); + dasm_put(Dst, 5648); } - dasm_put(Dst, 5432); + dasm_put(Dst, 5426); } if (!sse) { - dasm_put(Dst, 5675); + dasm_put(Dst, 5669); } - dasm_put(Dst, 5684, 1+1, LJ_TSTR); + dasm_put(Dst, 5678, 1+1, LJ_TSTR); if (sse) { - dasm_put(Dst, 5706, Dt5(->len)); + dasm_put(Dst, 5700, Dt5(->len)); } else { - dasm_put(Dst, 5717, Dt5(->len)); + dasm_put(Dst, 5711, Dt5(->len)); } - dasm_put(Dst, 5725, 1+1, LJ_TSTR, Dt5(->len), Dt5([1])); + dasm_put(Dst, 5719, 1+1, LJ_TSTR, Dt5(->len), Dt5([1])); if (sse) { - dasm_put(Dst, 5759); + dasm_put(Dst, 5753); } else { - dasm_put(Dst, 5769); + dasm_put(Dst, 5763); } - dasm_put(Dst, 5782, DISPATCH_GL(gc.total), DISPATCH_GL(gc.threshold), 1+1, LJ_TISNUM); + dasm_put(Dst, 5776, DISPATCH_GL(gc.total), DISPATCH_GL(gc.threshold), 1+1, LJ_TISNUM); if (sse) { - dasm_put(Dst, 5817); + dasm_put(Dst, 5811); } else { - dasm_put(Dst, 5837); + dasm_put(Dst, 5831); } - dasm_put(Dst, 5857, Dt1(->base), Dt1(->base), LJ_TSTR, DISPATCH_GL(gc.total), DISPATCH_GL(gc.threshold), 1+2, LJ_TISNUM); - dasm_put(Dst, 2465); + dasm_put(Dst, 5851, Dt1(->base), Dt1(->base), LJ_TSTR, DISPATCH_GL(gc.total), DISPATCH_GL(gc.threshold), 1+2, LJ_TISNUM); + dasm_put(Dst, 2459); if (sse) { - dasm_put(Dst, 5968); + dasm_put(Dst, 5962); } else { - dasm_put(Dst, 5979); + dasm_put(Dst, 5973); } - dasm_put(Dst, 5987, LJ_TSTR, LJ_TISNUM, Dt5(->len)); + dasm_put(Dst, 5981, LJ_TSTR, LJ_TISNUM, Dt5(->len)); if (sse) { - dasm_put(Dst, 6017); + dasm_put(Dst, 6011); } else { - dasm_put(Dst, 6024); + dasm_put(Dst, 6018); } - dasm_put(Dst, 6036, sizeof(GCstr)-1); - dasm_put(Dst, 6111, 2+1, DISPATCH_GL(gc.total), DISPATCH_GL(gc.threshold)); - dasm_put(Dst, 6170, LJ_TSTR, LJ_TISNUM); + dasm_put(Dst, 6030, sizeof(GCstr)-1); + dasm_put(Dst, 6105, 2+1, DISPATCH_GL(gc.total), DISPATCH_GL(gc.threshold)); + dasm_put(Dst, 6164, LJ_TSTR, LJ_TISNUM); if (sse) { - dasm_put(Dst, 6195); + dasm_put(Dst, 6189); } else { - dasm_put(Dst, 6202); + dasm_put(Dst, 6196); } - dasm_put(Dst, 6214, Dt5(->len), DISPATCH_GL(tmpbuf.sz), Dt5([1]), DISPATCH_GL(tmpbuf.buf), DISPATCH_GL(tmpbuf.buf), 1+1); - dasm_put(Dst, 6279, DISPATCH_GL(gc.total), DISPATCH_GL(gc.threshold), LJ_TSTR, Dt5(->len), DISPATCH_GL(tmpbuf.sz), sizeof(GCstr), DISPATCH_GL(tmpbuf.buf)); - dasm_put(Dst, 6346, 1+1, DISPATCH_GL(gc.total), DISPATCH_GL(gc.threshold), LJ_TSTR, Dt5(->len), DISPATCH_GL(tmpbuf.sz)); - dasm_put(Dst, 6421, sizeof(GCstr), DISPATCH_GL(tmpbuf.buf), 1+1); - dasm_put(Dst, 6506, DISPATCH_GL(gc.total), DISPATCH_GL(gc.threshold), LJ_TSTR, Dt5(->len), DISPATCH_GL(tmpbuf.sz), sizeof(GCstr), DISPATCH_GL(tmpbuf.buf)); - dasm_put(Dst, 6580, 1+1, LJ_TTAB); + dasm_put(Dst, 6208, Dt5(->len), DISPATCH_GL(tmpbuf.sz), Dt5([1]), DISPATCH_GL(tmpbuf.buf), DISPATCH_GL(tmpbuf.buf), 1+1); + dasm_put(Dst, 6273, DISPATCH_GL(gc.total), DISPATCH_GL(gc.threshold), LJ_TSTR, Dt5(->len), DISPATCH_GL(tmpbuf.sz), sizeof(GCstr), DISPATCH_GL(tmpbuf.buf)); + dasm_put(Dst, 6340, 1+1, DISPATCH_GL(gc.total), DISPATCH_GL(gc.threshold), LJ_TSTR, Dt5(->len), DISPATCH_GL(tmpbuf.sz)); + dasm_put(Dst, 6415, sizeof(GCstr), DISPATCH_GL(tmpbuf.buf), 1+1); + dasm_put(Dst, 6500, DISPATCH_GL(gc.total), DISPATCH_GL(gc.threshold), LJ_TSTR, Dt5(->len), DISPATCH_GL(tmpbuf.sz), sizeof(GCstr), DISPATCH_GL(tmpbuf.buf)); + dasm_put(Dst, 6574, 1+1, LJ_TTAB); if (sse) { - dasm_put(Dst, 6656); + dasm_put(Dst, 6650); } else { - dasm_put(Dst, 6666); + dasm_put(Dst, 6660); } if (sse) { - dasm_put(Dst, 6677, 1+1, LJ_TISNUM); + dasm_put(Dst, 6671, 1+1, LJ_TISNUM); } else { - dasm_put(Dst, 6734, 1+1, LJ_TISNUM); + dasm_put(Dst, 6728, 1+1, LJ_TISNUM); } if (sse) { - dasm_put(Dst, 6778, 1+1, LJ_TISNUM); + dasm_put(Dst, 6772, 1+1, LJ_TISNUM); } else { - dasm_put(Dst, 6826, 1+1, LJ_TISNUM); + dasm_put(Dst, 6820, 1+1, LJ_TISNUM); } - dasm_put(Dst, 6866); + dasm_put(Dst, 6860); if (sse) { - dasm_put(Dst, 6876); + dasm_put(Dst, 6870); } - dasm_put(Dst, 6881, LJ_TISNUM); + dasm_put(Dst, 6875, LJ_TISNUM); if (sse) { - dasm_put(Dst, 6899); + dasm_put(Dst, 6893); } else { - dasm_put(Dst, 6916); + dasm_put(Dst, 6910); } - dasm_put(Dst, 6929); + dasm_put(Dst, 6923); if (sse) { - dasm_put(Dst, 6937, 1+1, LJ_TISNUM); + dasm_put(Dst, 6931, 1+1, LJ_TISNUM); } else { - dasm_put(Dst, 6985, 1+1, LJ_TISNUM); + dasm_put(Dst, 6979, 1+1, LJ_TISNUM); } - dasm_put(Dst, 6866); + dasm_put(Dst, 6860); if (sse) { - dasm_put(Dst, 6876); + dasm_put(Dst, 6870); } - dasm_put(Dst, 6881, LJ_TISNUM); + dasm_put(Dst, 6875, LJ_TISNUM); if (sse) { - dasm_put(Dst, 7025); + dasm_put(Dst, 7019); } else { - dasm_put(Dst, 7042); + dasm_put(Dst, 7036); } - dasm_put(Dst, 6929); + dasm_put(Dst, 6923); if (sse) { - dasm_put(Dst, 7055, 1+1, LJ_TISNUM); + dasm_put(Dst, 7049, 1+1, LJ_TISNUM); } else { - dasm_put(Dst, 7103, 1+1, LJ_TISNUM); + dasm_put(Dst, 7097, 1+1, LJ_TISNUM); } - dasm_put(Dst, 6866); + dasm_put(Dst, 6860); if (sse) { - dasm_put(Dst, 6876); + dasm_put(Dst, 6870); } - dasm_put(Dst, 6881, LJ_TISNUM); + dasm_put(Dst, 6875, LJ_TISNUM); if (sse) { - dasm_put(Dst, 7143); + dasm_put(Dst, 7137); } else { - dasm_put(Dst, 7160); + dasm_put(Dst, 7154); } - dasm_put(Dst, 6929); + dasm_put(Dst, 6923); if (sse) { - dasm_put(Dst, 7173, 1+1, LJ_TISNUM); + dasm_put(Dst, 7167, 1+1, LJ_TISNUM); } else { - dasm_put(Dst, 7221, 1+1, LJ_TISNUM); + dasm_put(Dst, 7215, 1+1, LJ_TISNUM); } - dasm_put(Dst, 7261); + dasm_put(Dst, 7255); if (sse) { - dasm_put(Dst, 7268, 1+1, LJ_TISNUM); + dasm_put(Dst, 7262, 1+1, LJ_TISNUM); } else { - dasm_put(Dst, 7316, 1+1, LJ_TISNUM); + dasm_put(Dst, 7310, 1+1, LJ_TISNUM); } - dasm_put(Dst, 7356); + dasm_put(Dst, 7350); if (sse) { - dasm_put(Dst, 7360); + dasm_put(Dst, 7354); } else { - dasm_put(Dst, 7387); + dasm_put(Dst, 7381); } - dasm_put(Dst, 7402); + dasm_put(Dst, 7396); if (sse) { - dasm_put(Dst, 6651); + dasm_put(Dst, 6645); } - dasm_put(Dst, 7405); + dasm_put(Dst, 7399); if (sse) { - dasm_put(Dst, 7414, 1+1, LJ_TISNUM, LJ_TISNUM); + dasm_put(Dst, 7408, 1+1, LJ_TISNUM, LJ_TISNUM); } else { - dasm_put(Dst, 7488, 2+1, LJ_TISNUM, LJ_TISNUM); + dasm_put(Dst, 7482, 2+1, LJ_TISNUM, LJ_TISNUM); } - dasm_put(Dst, 7554); + dasm_put(Dst, 7548); if (sse) { - dasm_put(Dst, 7563, 1+1, LJ_TISNUM, LJ_TISNUM); + dasm_put(Dst, 7557, 1+1, LJ_TISNUM, LJ_TISNUM); } else { - dasm_put(Dst, 7637, 2+1, LJ_TISNUM, LJ_TISNUM); + dasm_put(Dst, 7631, 2+1, LJ_TISNUM, LJ_TISNUM); } - dasm_put(Dst, 7703); + dasm_put(Dst, 7697); if (sse) { - dasm_put(Dst, 7713, 1+1, LJ_TISNUM, LJ_TISNUM); + dasm_put(Dst, 7707, 1+1, LJ_TISNUM, LJ_TISNUM); } else { - dasm_put(Dst, 7787, 2+1, LJ_TISNUM, LJ_TISNUM); + dasm_put(Dst, 7781, 2+1, LJ_TISNUM, LJ_TISNUM); } - dasm_put(Dst, 7853); + dasm_put(Dst, 7847); if (sse) { - dasm_put(Dst, 7863, 1+1, LJ_TISNUM, LJ_TISNUM); + dasm_put(Dst, 7857, 1+1, LJ_TISNUM, LJ_TISNUM); } else { - dasm_put(Dst, 7937, 2+1, LJ_TISNUM, LJ_TISNUM); + dasm_put(Dst, 7931, 2+1, LJ_TISNUM, LJ_TISNUM); } - dasm_put(Dst, 8003); + dasm_put(Dst, 7997); if (sse) { - dasm_put(Dst, 8012, 1+1, LJ_TISNUM, LJ_TISNUM); + dasm_put(Dst, 8006, 1+1, LJ_TISNUM, LJ_TISNUM); } else { - dasm_put(Dst, 8086, 2+1, LJ_TISNUM, LJ_TISNUM); + dasm_put(Dst, 8080, 2+1, LJ_TISNUM, LJ_TISNUM); } - dasm_put(Dst, 8152, 1+2, 1+1, Dt1(->base), 8*LUA_MINSTACK, Dt1(->top), Dt1(->maxstack), Dt8(->f), Dt1(->base)); - dasm_put(Dst, 8236, Dt1(->top), Dt7(->gate), LJ_TFUNC, Dt7(->gate), Dt1(->base), LUA_MINSTACK, Dt1(->base), Dt1(->top)); - dasm_put(Dst, 8355, Dt1(->base), Dt1(->top)); + dasm_put(Dst, 8146, 1+2, 1+1, Dt1(->base), 8*LUA_MINSTACK, Dt1(->top), Dt1(->maxstack), Dt8(->f), Dt1(->base)); + dasm_put(Dst, 8230, Dt1(->top), Dt7(->gate), LJ_TFUNC, Dt7(->gate), Dt1(->base), LUA_MINSTACK, Dt1(->base), Dt1(->top)); + dasm_put(Dst, 8349, Dt1(->base), Dt1(->top)); #if LJ_HASJIT - dasm_put(Dst, 8396, DISPATCH_GL(hookmask), HOOK_VMEVENT, HOOK_ACTIVE, LUA_MASKLINE|LUA_MASKCOUNT, DISPATCH_GL(hookcount)); + dasm_put(Dst, 8390, DISPATCH_GL(hookmask), HOOK_VMEVENT, HOOK_ACTIVE, LUA_MASKLINE|LUA_MASKCOUNT, DISPATCH_GL(hookcount)); #endif - dasm_put(Dst, 8427, DISPATCH_GL(hookmask), HOOK_ACTIVE, LUA_MASKLINE|LUA_MASKCOUNT, DISPATCH_GL(hookcount), LUA_MASKLINE, Dt1(->base), Dt1(->base)); - dasm_put(Dst, 8493, GG_DISP_STATIC*4); + dasm_put(Dst, 8421, DISPATCH_GL(hookmask), HOOK_ACTIVE, LUA_MASKLINE|LUA_MASKCOUNT, DISPATCH_GL(hookcount), LUA_MASKLINE, Dt1(->base), Dt1(->base)); + dasm_put(Dst, 8487, GG_DISP_STATIC*4); #if LJ_HASJIT - dasm_put(Dst, 8528, Dt1(->base), GG_DISP2J, DISPATCH_J(L)); + dasm_put(Dst, 8522, Dt1(->base), GG_DISP2J, DISPATCH_J(L)); #endif - dasm_put(Dst, 8557); + dasm_put(Dst, 8551); #if LJ_HASJIT - dasm_put(Dst, 8560, Dt1(->base), GG_DISP2J, DISPATCH_J(L), Dt1(->base)); + dasm_put(Dst, 8554, Dt1(->base), GG_DISP2J, DISPATCH_J(L), Dt1(->base)); #endif - dasm_put(Dst, 8606); + dasm_put(Dst, 8600); #if LJ_HASJIT - dasm_put(Dst, 8609, DISPATCH_GL(vmstate), DISPATCH_GL(vmstate), ~LJ_VMST_EXIT, DISPATCH_J(exitno), DISPATCH_J(parent), 8*8+16, DISPATCH_J(flags), JIT_F_SSE2, DISPATCH_GL(jit_L), DISPATCH_GL(jit_base), DISPATCH_J(L), Dt1(->base), GG_DISP2J, Dt1(->base)); + dasm_put(Dst, 8603, DISPATCH_GL(vmstate), DISPATCH_GL(vmstate), ~LJ_VMST_EXIT, DISPATCH_J(exitno), DISPATCH_J(parent), 8*8+16, DISPATCH_J(flags), JIT_F_SSE2, DISPATCH_GL(jit_L), DISPATCH_GL(jit_base), DISPATCH_J(L), Dt1(->base), GG_DISP2J, Dt1(->base)); #endif - dasm_put(Dst, 8752); + dasm_put(Dst, 8746); #if LJ_HASJIT - dasm_put(Dst, 8755, Dt7(->pt), Dt9(->k), DISPATCH_GL(jit_L), DISPATCH_GL(vmstate), ~LJ_VMST_INTERP); + dasm_put(Dst, 8749, Dt7(->pt), Dt9(->k), DISPATCH_GL(jit_L), DISPATCH_GL(vmstate), ~LJ_VMST_INTERP); #endif - dasm_put(Dst, 8795); + dasm_put(Dst, 8789); if (!sse) { - dasm_put(Dst, 8798); + dasm_put(Dst, 8792); } - dasm_put(Dst, 8843); + dasm_put(Dst, 8837); if (!sse) { - dasm_put(Dst, 8945); + dasm_put(Dst, 8939); } - dasm_put(Dst, 8990); + dasm_put(Dst, 8984); if (!sse) { - dasm_put(Dst, 9092); + dasm_put(Dst, 9086); } - dasm_put(Dst, 9131); + dasm_put(Dst, 9125); if (sse) { - dasm_put(Dst, 9236); + dasm_put(Dst, 9230); } else { - dasm_put(Dst, 9366); + dasm_put(Dst, 9360); } - dasm_put(Dst, 9413); + dasm_put(Dst, 9407); if (!sse) { - dasm_put(Dst, 9487); + dasm_put(Dst, 9481); if (cmov) { - dasm_put(Dst, 9498); + dasm_put(Dst, 9492); } else { - dasm_put(Dst, 9502); + dasm_put(Dst, 9496); } - dasm_put(Dst, 9509); - dasm_put(Dst, 9583); - dasm_put(Dst, 9683); + dasm_put(Dst, 9503); + dasm_put(Dst, 9577); + dasm_put(Dst, 9677); if (cmov) { - dasm_put(Dst, 9686); + dasm_put(Dst, 9680); } else { - dasm_put(Dst, 9690); + dasm_put(Dst, 9684); } - dasm_put(Dst, 9697); + dasm_put(Dst, 9691); if (cmov) { - dasm_put(Dst, 9498); + dasm_put(Dst, 9492); } else { - dasm_put(Dst, 9502); + dasm_put(Dst, 9496); } - dasm_put(Dst, 9715); + dasm_put(Dst, 9709); } else { - dasm_put(Dst, 9794); + dasm_put(Dst, 9788); } - dasm_put(Dst, 9797); - dasm_put(Dst, 9882); - dasm_put(Dst, 10013); - dasm_put(Dst, 10212); + dasm_put(Dst, 9791); + dasm_put(Dst, 9876); + dasm_put(Dst, 10007); + dasm_put(Dst, 10206); if (sse) { - dasm_put(Dst, 10235); - dasm_put(Dst, 10292); - dasm_put(Dst, 10383); + dasm_put(Dst, 10229); + dasm_put(Dst, 10286); + dasm_put(Dst, 10377); } else { - dasm_put(Dst, 10425); - dasm_put(Dst, 10517); + dasm_put(Dst, 10419); + dasm_put(Dst, 10511); } - dasm_put(Dst, 10563); + dasm_put(Dst, 10557); if (sse) { - dasm_put(Dst, 10569); - dasm_put(Dst, 10674); - dasm_put(Dst, 10757); + dasm_put(Dst, 10563); + dasm_put(Dst, 10668); + dasm_put(Dst, 10751); } else { - dasm_put(Dst, 10829); - dasm_put(Dst, 10912); + dasm_put(Dst, 10823); + dasm_put(Dst, 10906); if (cmov) { - dasm_put(Dst, 10967); + dasm_put(Dst, 10961); } else { - dasm_put(Dst, 10986); + dasm_put(Dst, 10980); } - dasm_put(Dst, 10825); + dasm_put(Dst, 10819); } - dasm_put(Dst, 11027); + dasm_put(Dst, 11021); } /* Generate the code for a single instruction. */ static void build_ins(BuildCtx *ctx, BCOp op, int defop, int cmov, int sse) { int vk = 0; - dasm_put(Dst, 11081, defop); + dasm_put(Dst, 11075, defop); switch (op) { @@ -1553,619 +1557,619 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop, int cmov, int sse) /* Remember: all ops branch for a true comparison, fall through otherwise. */ case BC_ISLT: case BC_ISGE: case BC_ISLE: case BC_ISGT: - dasm_put(Dst, 11083, LJ_TISNUM, LJ_TISNUM); + dasm_put(Dst, 11077, LJ_TISNUM, LJ_TISNUM); if (sse) { - dasm_put(Dst, 11104); + dasm_put(Dst, 11098); } else { - dasm_put(Dst, 11119); + dasm_put(Dst, 11113); if (cmov) { - dasm_put(Dst, 11129); + dasm_put(Dst, 11123); } else { - dasm_put(Dst, 11135); + dasm_put(Dst, 11129); } } switch (op) { case BC_ISLT: - dasm_put(Dst, 11142); + dasm_put(Dst, 11136); break; case BC_ISGE: - dasm_put(Dst, 10378); + dasm_put(Dst, 10372); break; case BC_ISLE: - dasm_put(Dst, 6575); + dasm_put(Dst, 6569); break; case BC_ISGT: - dasm_put(Dst, 11147); + dasm_put(Dst, 11141); break; default: break; /* Shut up GCC. */ } - dasm_put(Dst, 11152, -BCBIAS_J*4); + dasm_put(Dst, 11146, -BCBIAS_J*4); break; case BC_ISEQV: case BC_ISNEV: vk = op == BC_ISEQV; - dasm_put(Dst, 11185, LJ_TISNUM, LJ_TISNUM); + dasm_put(Dst, 11179, LJ_TISNUM, LJ_TISNUM); if (sse) { - dasm_put(Dst, 11211); + dasm_put(Dst, 11205); } else { - dasm_put(Dst, 11223); + dasm_put(Dst, 11217); if (cmov) { - dasm_put(Dst, 11129); + dasm_put(Dst, 11123); } else { - dasm_put(Dst, 11135); + dasm_put(Dst, 11129); } } iseqne_fp: if (vk) { - dasm_put(Dst, 11230); + dasm_put(Dst, 11224); } else { - dasm_put(Dst, 11239); + dasm_put(Dst, 11233); } iseqne_end: if (vk) { - dasm_put(Dst, 11248, -BCBIAS_J*4); + dasm_put(Dst, 11242, -BCBIAS_J*4); } else { - dasm_put(Dst, 11263, -BCBIAS_J*4); + dasm_put(Dst, 11257, -BCBIAS_J*4); } - dasm_put(Dst, 8587); + dasm_put(Dst, 8581); if (op == BC_ISEQV || op == BC_ISNEV) { - dasm_put(Dst, 11278, LJ_TISPRI, LJ_TISTABUD, Dt6(->metatable), Dt6(->nomm), 1<metatable), Dt6(->nomm), 1<len)); + dasm_put(Dst, 11608, Dt5(->len)); } else { - dasm_put(Dst, 11632, Dt5(->len)); + dasm_put(Dst, 11626, Dt5(->len)); } - dasm_put(Dst, 11641, LJ_TTAB); + dasm_put(Dst, 11635, LJ_TTAB); if (sse) { - dasm_put(Dst, 11681); + dasm_put(Dst, 11675); } else { - dasm_put(Dst, 11690); + dasm_put(Dst, 11684); } - dasm_put(Dst, 11700); + dasm_put(Dst, 11694); break; /* -- Binary ops -------------------------------------------------------- */ case BC_ADDVN: case BC_ADDNV: case BC_ADDVV: - dasm_put(Dst, 11710); + dasm_put(Dst, 11704); vk = ((int)op - BC_ADDVN) / (BC_ADDNV-BC_ADDVN); switch (vk) { case 0: - dasm_put(Dst, 11718, LJ_TISNUM); + dasm_put(Dst, 11712, LJ_TISNUM); if (sse) { - dasm_put(Dst, 11730); + dasm_put(Dst, 11724); } else { - dasm_put(Dst, 11744); + dasm_put(Dst, 11738); } break; case 1: - dasm_put(Dst, 11752, LJ_TISNUM); + dasm_put(Dst, 11746, LJ_TISNUM); if (sse) { - dasm_put(Dst, 11764); + dasm_put(Dst, 11758); } else { - dasm_put(Dst, 11778); + dasm_put(Dst, 11772); } break; default: - dasm_put(Dst, 11786, LJ_TISNUM, LJ_TISNUM); + dasm_put(Dst, 11780, LJ_TISNUM, LJ_TISNUM); if (sse) { - dasm_put(Dst, 11808); + dasm_put(Dst, 11802); } else { - dasm_put(Dst, 11822); + dasm_put(Dst, 11816); } break; } if (sse) { - dasm_put(Dst, 11584); + dasm_put(Dst, 11578); } else { - dasm_put(Dst, 11596); + dasm_put(Dst, 11590); } - dasm_put(Dst, 8587); + dasm_put(Dst, 8581); break; case BC_SUBVN: case BC_SUBNV: case BC_SUBVV: - dasm_put(Dst, 11710); + dasm_put(Dst, 11704); vk = ((int)op - BC_ADDVN) / (BC_ADDNV-BC_ADDVN); switch (vk) { case 0: - dasm_put(Dst, 11718, LJ_TISNUM); + dasm_put(Dst, 11712, LJ_TISNUM); if (sse) { - dasm_put(Dst, 11830); + dasm_put(Dst, 11824); } else { - dasm_put(Dst, 11844); + dasm_put(Dst, 11838); } break; case 1: - dasm_put(Dst, 11752, LJ_TISNUM); + dasm_put(Dst, 11746, LJ_TISNUM); if (sse) { - dasm_put(Dst, 11852); + dasm_put(Dst, 11846); } else { - dasm_put(Dst, 11866); + dasm_put(Dst, 11860); } break; default: - dasm_put(Dst, 11786, LJ_TISNUM, LJ_TISNUM); + dasm_put(Dst, 11780, LJ_TISNUM, LJ_TISNUM); if (sse) { - dasm_put(Dst, 11874); + dasm_put(Dst, 11868); } else { - dasm_put(Dst, 11888); + dasm_put(Dst, 11882); } break; } if (sse) { - dasm_put(Dst, 11584); + dasm_put(Dst, 11578); } else { - dasm_put(Dst, 11596); + dasm_put(Dst, 11590); } - dasm_put(Dst, 8587); + dasm_put(Dst, 8581); break; case BC_MULVN: case BC_MULNV: case BC_MULVV: - dasm_put(Dst, 11710); + dasm_put(Dst, 11704); vk = ((int)op - BC_ADDVN) / (BC_ADDNV-BC_ADDVN); switch (vk) { case 0: - dasm_put(Dst, 11718, LJ_TISNUM); + dasm_put(Dst, 11712, LJ_TISNUM); if (sse) { - dasm_put(Dst, 11896); + dasm_put(Dst, 11890); } else { - dasm_put(Dst, 11910); + dasm_put(Dst, 11904); } break; case 1: - dasm_put(Dst, 11752, LJ_TISNUM); + dasm_put(Dst, 11746, LJ_TISNUM); if (sse) { - dasm_put(Dst, 11918); + dasm_put(Dst, 11912); } else { - dasm_put(Dst, 11932); + dasm_put(Dst, 11926); } break; default: - dasm_put(Dst, 11786, LJ_TISNUM, LJ_TISNUM); + dasm_put(Dst, 11780, LJ_TISNUM, LJ_TISNUM); if (sse) { - dasm_put(Dst, 11940); + dasm_put(Dst, 11934); } else { - dasm_put(Dst, 11954); + dasm_put(Dst, 11948); } break; } if (sse) { - dasm_put(Dst, 11584); + dasm_put(Dst, 11578); } else { - dasm_put(Dst, 11596); + dasm_put(Dst, 11590); } - dasm_put(Dst, 8587); + dasm_put(Dst, 8581); break; case BC_DIVVN: case BC_DIVNV: case BC_DIVVV: - dasm_put(Dst, 11710); + dasm_put(Dst, 11704); vk = ((int)op - BC_ADDVN) / (BC_ADDNV-BC_ADDVN); switch (vk) { case 0: - dasm_put(Dst, 11718, LJ_TISNUM); + dasm_put(Dst, 11712, LJ_TISNUM); if (sse) { - dasm_put(Dst, 11962); + dasm_put(Dst, 11956); } else { - dasm_put(Dst, 11976); + dasm_put(Dst, 11970); } break; case 1: - dasm_put(Dst, 11752, LJ_TISNUM); + dasm_put(Dst, 11746, LJ_TISNUM); if (sse) { - dasm_put(Dst, 11984); + dasm_put(Dst, 11978); } else { - dasm_put(Dst, 11998); + dasm_put(Dst, 11992); } break; default: - dasm_put(Dst, 11786, LJ_TISNUM, LJ_TISNUM); + dasm_put(Dst, 11780, LJ_TISNUM, LJ_TISNUM); if (sse) { - dasm_put(Dst, 12006); + dasm_put(Dst, 12000); } else { - dasm_put(Dst, 12020); + dasm_put(Dst, 12014); } break; } if (sse) { - dasm_put(Dst, 11584); + dasm_put(Dst, 11578); } else { - dasm_put(Dst, 11596); + dasm_put(Dst, 11590); } - dasm_put(Dst, 8587); + dasm_put(Dst, 8581); break; case BC_MODVN: - dasm_put(Dst, 11710); + dasm_put(Dst, 11704); vk = ((int)op - BC_ADDVN) / (BC_ADDNV-BC_ADDVN); switch (vk) { case 0: - dasm_put(Dst, 11718, LJ_TISNUM); + dasm_put(Dst, 11712, LJ_TISNUM); if (sse) { - dasm_put(Dst, 12028); + dasm_put(Dst, 12022); } else { - dasm_put(Dst, 12042); + dasm_put(Dst, 12036); } break; case 1: - dasm_put(Dst, 11752, LJ_TISNUM); + dasm_put(Dst, 11746, LJ_TISNUM); if (sse) { - dasm_put(Dst, 12050); + dasm_put(Dst, 12044); } else { - dasm_put(Dst, 12064); + dasm_put(Dst, 12058); } break; default: - dasm_put(Dst, 11786, LJ_TISNUM, LJ_TISNUM); + dasm_put(Dst, 11780, LJ_TISNUM, LJ_TISNUM); if (sse) { - dasm_put(Dst, 12072); + dasm_put(Dst, 12066); } else { - dasm_put(Dst, 12086); + dasm_put(Dst, 12080); + } + break; + } + dasm_put(Dst, 12088); + if (sse) { + dasm_put(Dst, 11578); + } else { + dasm_put(Dst, 11590); + } + dasm_put(Dst, 8581); + break; + case BC_MODNV: case BC_MODVV: + dasm_put(Dst, 11704); + vk = ((int)op - BC_ADDVN) / (BC_ADDNV-BC_ADDVN); + switch (vk) { + case 0: + dasm_put(Dst, 11712, LJ_TISNUM); + if (sse) { + dasm_put(Dst, 12022); + } else { + dasm_put(Dst, 12036); + } + break; + case 1: + dasm_put(Dst, 11746, LJ_TISNUM); + if (sse) { + dasm_put(Dst, 12044); + } else { + dasm_put(Dst, 12058); + } + break; + default: + dasm_put(Dst, 11780, LJ_TISNUM, LJ_TISNUM); + if (sse) { + dasm_put(Dst, 12066); + } else { + dasm_put(Dst, 12080); } break; } dasm_put(Dst, 12094); - if (sse) { - dasm_put(Dst, 11584); - } else { - dasm_put(Dst, 11596); - } - dasm_put(Dst, 8587); - break; - case BC_MODNV: case BC_MODVV: - dasm_put(Dst, 11710); - vk = ((int)op - BC_ADDVN) / (BC_ADDNV-BC_ADDVN); - switch (vk) { - case 0: - dasm_put(Dst, 11718, LJ_TISNUM); - if (sse) { - dasm_put(Dst, 12028); - } else { - dasm_put(Dst, 12042); - } - break; - case 1: - dasm_put(Dst, 11752, LJ_TISNUM); - if (sse) { - dasm_put(Dst, 12050); - } else { - dasm_put(Dst, 12064); - } - break; - default: - dasm_put(Dst, 11786, LJ_TISNUM, LJ_TISNUM); - if (sse) { - dasm_put(Dst, 12072); - } else { - dasm_put(Dst, 12086); - } - break; - } - dasm_put(Dst, 12100); break; case BC_POW: - dasm_put(Dst, 11710); + dasm_put(Dst, 11704); vk = ((int)op - BC_ADDVN) / (BC_ADDNV-BC_ADDVN); switch (vk) { case 0: - dasm_put(Dst, 11718, LJ_TISNUM); + dasm_put(Dst, 11712, LJ_TISNUM); if (sse) { - dasm_put(Dst, 12028); + dasm_put(Dst, 12022); } else { - dasm_put(Dst, 12042); + dasm_put(Dst, 12036); } break; case 1: - dasm_put(Dst, 11752, LJ_TISNUM); + dasm_put(Dst, 11746, LJ_TISNUM); if (sse) { - dasm_put(Dst, 12050); + dasm_put(Dst, 12044); } else { - dasm_put(Dst, 12064); + dasm_put(Dst, 12058); } break; default: - dasm_put(Dst, 11786, LJ_TISNUM, LJ_TISNUM); + dasm_put(Dst, 11780, LJ_TISNUM, LJ_TISNUM); if (sse) { - dasm_put(Dst, 12072); + dasm_put(Dst, 12066); } else { - dasm_put(Dst, 12086); + dasm_put(Dst, 12080); } break; } - dasm_put(Dst, 12105); + dasm_put(Dst, 12099); if (sse) { - dasm_put(Dst, 11584); + dasm_put(Dst, 11578); } else { - dasm_put(Dst, 11596); + dasm_put(Dst, 11590); } - dasm_put(Dst, 8587); + dasm_put(Dst, 8581); break; case BC_CAT: - dasm_put(Dst, 12109, Dt1(->base), Dt1(->base)); + dasm_put(Dst, 12103, Dt1(->base), Dt1(->base)); break; /* -- Constant ops ------------------------------------------------------ */ case BC_KSTR: - dasm_put(Dst, 12203, LJ_TSTR); + dasm_put(Dst, 12197, LJ_TSTR); break; case BC_KSHORT: if (sse) { - dasm_put(Dst, 12236); + dasm_put(Dst, 12230); } else { - dasm_put(Dst, 12251); + dasm_put(Dst, 12245); } - dasm_put(Dst, 8587); + dasm_put(Dst, 8581); break; case BC_KNUM: if (sse) { - dasm_put(Dst, 12259); + dasm_put(Dst, 12253); } else { - dasm_put(Dst, 12272); + dasm_put(Dst, 12266); } - dasm_put(Dst, 8587); + dasm_put(Dst, 8581); break; case BC_KPRI: - dasm_put(Dst, 12279); + dasm_put(Dst, 12273); break; case BC_KNIL: - dasm_put(Dst, 12305, LJ_TNIL); + dasm_put(Dst, 12299, LJ_TNIL); break; /* -- Upvalue and function ops ------------------------------------------ */ case BC_UGET: - dasm_put(Dst, 12351, offsetof(GCfuncL, uvptr), DtA(->v)); + dasm_put(Dst, 12345, offsetof(GCfuncL, uvptr), DtA(->v)); break; case BC_USETV: #define TV2MARKOFS \ ((int32_t)offsetof(GCupval, marked)-(int32_t)offsetof(GCupval, tv)) - dasm_put(Dst, 12395, offsetof(GCfuncL, uvptr), DtA(->closed), DtA(->v), TV2MARKOFS, LJ_GC_BLACK, LJ_TISGCV, LJ_TISNUM - LJ_TISGCV, Dt4(->gch.marked), LJ_GC_WHITES, GG_DISP2G); - dasm_put(Dst, 12485); + dasm_put(Dst, 12389, offsetof(GCfuncL, uvptr), DtA(->closed), DtA(->v), TV2MARKOFS, LJ_GC_BLACK, LJ_TISGCV, LJ_TISNUM - LJ_TISGCV, Dt4(->gch.marked), LJ_GC_WHITES, GG_DISP2G); + dasm_put(Dst, 12479); break; #undef TV2MARKOFS case BC_USETS: - dasm_put(Dst, 12497, offsetof(GCfuncL, uvptr), DtA(->v), LJ_TSTR, DtA(->marked), LJ_GC_BLACK, Dt4(->gch.marked), LJ_GC_WHITES, DtA(->closed), GG_DISP2G); + dasm_put(Dst, 12491, offsetof(GCfuncL, uvptr), DtA(->v), LJ_TSTR, DtA(->marked), LJ_GC_BLACK, Dt4(->gch.marked), LJ_GC_WHITES, DtA(->closed), GG_DISP2G); break; case BC_USETN: - dasm_put(Dst, 12588); + dasm_put(Dst, 12582); if (sse) { - dasm_put(Dst, 12593); + dasm_put(Dst, 12587); } else { - dasm_put(Dst, 11403); + dasm_put(Dst, 11397); } - dasm_put(Dst, 12600, offsetof(GCfuncL, uvptr), DtA(->v)); + dasm_put(Dst, 12594, offsetof(GCfuncL, uvptr), DtA(->v)); if (sse) { + dasm_put(Dst, 4956); + } else { dasm_put(Dst, 4962); - } else { - dasm_put(Dst, 4968); } - dasm_put(Dst, 8587); + dasm_put(Dst, 8581); break; case BC_USETP: - dasm_put(Dst, 12609, offsetof(GCfuncL, uvptr), DtA(->v)); + dasm_put(Dst, 12603, offsetof(GCfuncL, uvptr), DtA(->v)); break; case BC_UCLO: - dasm_put(Dst, 12646, -BCBIAS_J*4, Dt1(->openupval), Dt1(->base), Dt1(->base)); + dasm_put(Dst, 12640, -BCBIAS_J*4, Dt1(->openupval), Dt1(->base), Dt1(->base)); break; case BC_FNEW: - dasm_put(Dst, 12700, Dt1(->base), Dt1(->base), LJ_TFUNC); + dasm_put(Dst, 12694, Dt1(->base), Dt1(->base), LJ_TFUNC); break; /* -- Table ops --------------------------------------------------------- */ case BC_TNEW: - dasm_put(Dst, 12771, DISPATCH_GL(gc.total), DISPATCH_GL(gc.threshold), Dt1(->base), Dt1(->base), LJ_TTAB); + dasm_put(Dst, 12765, DISPATCH_GL(gc.total), DISPATCH_GL(gc.threshold), Dt1(->base), Dt1(->base), LJ_TTAB); break; case BC_TDUP: - dasm_put(Dst, 12892, DISPATCH_GL(gc.total), DISPATCH_GL(gc.threshold), Dt1(->base), Dt1(->base), LJ_TTAB); + dasm_put(Dst, 12886, DISPATCH_GL(gc.total), DISPATCH_GL(gc.threshold), Dt1(->base), Dt1(->base), LJ_TTAB); break; case BC_GGET: - dasm_put(Dst, 12984, Dt7(->env)); + dasm_put(Dst, 12978, Dt7(->env)); break; case BC_GSET: - dasm_put(Dst, 13002, Dt7(->env)); + dasm_put(Dst, 12996, Dt7(->env)); break; case BC_TGETV: - dasm_put(Dst, 13020, LJ_TTAB, LJ_TISNUM); + dasm_put(Dst, 13014, LJ_TTAB, LJ_TISNUM); if (sse) { - dasm_put(Dst, 13053); + dasm_put(Dst, 13047); } else { - dasm_put(Dst, 13074); + dasm_put(Dst, 13068); if (cmov) { - dasm_put(Dst, 11129); + dasm_put(Dst, 11123); } else { - dasm_put(Dst, 11135); + dasm_put(Dst, 11129); } - dasm_put(Dst, 2853); + dasm_put(Dst, 2847); } - dasm_put(Dst, 13084, Dt6(->asize), Dt6(->array), LJ_TNIL, Dt6(->metatable), Dt6(->metatable), Dt6(->nomm), 1<asize), Dt6(->array), LJ_TNIL, Dt6(->metatable), Dt6(->metatable), Dt6(->nomm), 1<hmask), Dt5(->hash), sizeof(Node), Dt6(->node), DtB(->key.it), LJ_TSTR, DtB(->key.gcr), LJ_TNIL); - dasm_put(Dst, 13278, LJ_TNIL, DtB(->next), Dt6(->metatable), Dt6(->nomm), 1<hmask), Dt5(->hash), sizeof(Node), Dt6(->node), DtB(->key.it), LJ_TSTR, DtB(->key.gcr), LJ_TNIL); + dasm_put(Dst, 13272, LJ_TNIL, DtB(->next), Dt6(->metatable), Dt6(->nomm), 1<asize), Dt6(->array), LJ_TNIL, Dt6(->metatable), Dt6(->metatable), Dt6(->nomm), 1<asize), Dt6(->array), LJ_TNIL, Dt6(->metatable), Dt6(->metatable), Dt6(->nomm), 1<asize), Dt6(->array), LJ_TNIL, Dt6(->marked), LJ_GC_BLACK, Dt6(->metatable), Dt6(->metatable)); - dasm_put(Dst, 13564, Dt6(->nomm), 1<marked), cast_byte(~LJ_GC_BLACK), DISPATCH_GL(gc.grayagain), DISPATCH_GL(gc.grayagain), Dt6(->gclist)); + dasm_put(Dst, 13475, Dt6(->asize), Dt6(->array), LJ_TNIL, Dt6(->marked), LJ_GC_BLACK, Dt6(->metatable), Dt6(->metatable)); + dasm_put(Dst, 13558, Dt6(->nomm), 1<marked), cast_byte(~LJ_GC_BLACK), DISPATCH_GL(gc.grayagain), DISPATCH_GL(gc.grayagain), Dt6(->gclist)); break; case BC_TSETS: - dasm_put(Dst, 13626, LJ_TTAB, Dt6(->hmask), Dt5(->hash), sizeof(Node), Dt6(->nomm), Dt6(->node), DtB(->key.it), LJ_TSTR, DtB(->key.gcr), LJ_TNIL); - dasm_put(Dst, 13701, Dt6(->marked), LJ_GC_BLACK, Dt6(->metatable), Dt6(->metatable), Dt6(->nomm), 1<next)); - dasm_put(Dst, 13793, Dt6(->metatable), Dt6(->nomm), 1<base), Dt1(->base), Dt6(->marked), cast_byte(~LJ_GC_BLACK), DISPATCH_GL(gc.grayagain), DISPATCH_GL(gc.grayagain), Dt6(->gclist)); + dasm_put(Dst, 13620, LJ_TTAB, Dt6(->hmask), Dt5(->hash), sizeof(Node), Dt6(->nomm), Dt6(->node), DtB(->key.it), LJ_TSTR, DtB(->key.gcr), LJ_TNIL); + dasm_put(Dst, 13695, Dt6(->marked), LJ_GC_BLACK, Dt6(->metatable), Dt6(->metatable), Dt6(->nomm), 1<next)); + dasm_put(Dst, 13787, Dt6(->metatable), Dt6(->nomm), 1<base), Dt1(->base), Dt6(->marked), cast_byte(~LJ_GC_BLACK), DISPATCH_GL(gc.grayagain), DISPATCH_GL(gc.grayagain), Dt6(->gclist)); break; case BC_TSETB: - dasm_put(Dst, 13889, LJ_TTAB, Dt6(->asize), Dt6(->array), LJ_TNIL, Dt6(->marked), LJ_GC_BLACK, Dt6(->metatable)); - dasm_put(Dst, 13987, Dt6(->metatable), Dt6(->nomm), 1<marked), cast_byte(~LJ_GC_BLACK), DISPATCH_GL(gc.grayagain), DISPATCH_GL(gc.grayagain), Dt6(->gclist)); + dasm_put(Dst, 13883, LJ_TTAB, Dt6(->asize), Dt6(->array), LJ_TNIL, Dt6(->marked), LJ_GC_BLACK, Dt6(->metatable)); + dasm_put(Dst, 13981, Dt6(->metatable), Dt6(->nomm), 1<marked), cast_byte(~LJ_GC_BLACK), DISPATCH_GL(gc.grayagain), DISPATCH_GL(gc.grayagain), Dt6(->gclist)); break; case BC_TSETM: - dasm_put(Dst, 14033); + dasm_put(Dst, 14027); if (sse) { - dasm_put(Dst, 12593); + dasm_put(Dst, 12587); } else { - dasm_put(Dst, 14038); + dasm_put(Dst, 14032); } - dasm_put(Dst, 14046, Dt6(->marked), LJ_GC_BLACK); + dasm_put(Dst, 14040, Dt6(->marked), LJ_GC_BLACK); if (sse) { - dasm_put(Dst, 14071); + dasm_put(Dst, 14065); } else { - dasm_put(Dst, 14078); + dasm_put(Dst, 14072); } - dasm_put(Dst, 14083, Dt6(->asize), Dt6(->array), Dt1(->base), Dt1(->base), Dt6(->marked), cast_byte(~LJ_GC_BLACK), DISPATCH_GL(gc.grayagain), DISPATCH_GL(gc.grayagain)); - dasm_put(Dst, 14211, Dt6(->gclist)); + dasm_put(Dst, 14077, Dt6(->asize), Dt6(->array), Dt1(->base), Dt1(->base), Dt6(->marked), cast_byte(~LJ_GC_BLACK), DISPATCH_GL(gc.grayagain), DISPATCH_GL(gc.grayagain)); + dasm_put(Dst, 14205, Dt6(->gclist)); break; /* -- Calls and vararg handling ----------------------------------------- */ case BC_CALL: case BC_CALLM: - dasm_put(Dst, 11714); + dasm_put(Dst, 11708); if (op == BC_CALLM) { - dasm_put(Dst, 14219); + dasm_put(Dst, 14213); } - dasm_put(Dst, 14224, LJ_TFUNC, Dt7(->gate)); + dasm_put(Dst, 14218, LJ_TFUNC, Dt7(->gate)); break; case BC_CALLMT: - dasm_put(Dst, 14219); + dasm_put(Dst, 14213); break; case BC_CALLT: - dasm_put(Dst, 14247, LJ_TFUNC, FRAME_TYPE, Dt7(->ffid), Dt7(->gate)); - dasm_put(Dst, 14352, FRAME_TYPE, Dt7(->pt), Dt9(->k)); + dasm_put(Dst, 14241, LJ_TFUNC, FRAME_TYPE, Dt7(->ffid), Dt7(->gate)); + dasm_put(Dst, 14346, FRAME_TYPE, Dt7(->pt), Dt9(->k)); break; case BC_ITERC: - dasm_put(Dst, 14409, LJ_TFUNC, Dt7(->gate)); + dasm_put(Dst, 14403, LJ_TFUNC, Dt7(->gate)); break; case BC_VARG: - dasm_put(Dst, 14471, Dt7(->pt), Dt9(->numparams), (8+FRAME_VARG), LJ_TNIL); - dasm_put(Dst, 14615, Dt1(->maxstack), Dt1(->base), Dt1(->top), Dt1(->base), Dt1(->top)); + dasm_put(Dst, 14465, Dt7(->pt), Dt9(->numparams), (8+FRAME_VARG), LJ_TNIL); + dasm_put(Dst, 14609, Dt1(->maxstack), Dt1(->base), Dt1(->top), Dt1(->base), Dt1(->top)); break; /* -- Returns ----------------------------------------------------------- */ case BC_RETM: - dasm_put(Dst, 14219); + dasm_put(Dst, 14213); break; case BC_RET: case BC_RET0: case BC_RET1: if (op != BC_RET0) { - dasm_put(Dst, 14714); + dasm_put(Dst, 14708); } - dasm_put(Dst, 14718, FRAME_TYPE); + dasm_put(Dst, 14712, FRAME_TYPE); switch (op) { case BC_RET: - dasm_put(Dst, 14737); + dasm_put(Dst, 14731); break; case BC_RET1: - dasm_put(Dst, 14795); + dasm_put(Dst, 14789); /* fallthrough */ case BC_RET0: - dasm_put(Dst, 14811); + dasm_put(Dst, 14805); default: break; } - dasm_put(Dst, 14822, Dt7(->pt), Dt9(->k)); + dasm_put(Dst, 14816, Dt7(->pt), Dt9(->k)); if (op == BC_RET) { - dasm_put(Dst, 14864, LJ_TNIL); + dasm_put(Dst, 14858, LJ_TNIL); } else { - dasm_put(Dst, 14873, LJ_TNIL); + dasm_put(Dst, 14867, LJ_TNIL); } - dasm_put(Dst, 14880); + dasm_put(Dst, 14874); if (op != BC_RET0) { - dasm_put(Dst, 14901); + dasm_put(Dst, 14895); } - dasm_put(Dst, 5058); + dasm_put(Dst, 5052); break; /* -- Loops and branches ------------------------------------------------ */ @@ -2173,7 +2177,7 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop, int cmov, int sse) case BC_FORL: #if LJ_HASJIT - dasm_put(Dst, 14905, HOTCOUNT_PCMASK, GG_DISP2HOT); + dasm_put(Dst, 14899, HOTCOUNT_PCMASK, GG_DISP2HOT); #endif break; @@ -2185,57 +2189,57 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop, int cmov, int sse) case BC_FORI: case BC_IFORL: vk = (op == BC_IFORL || op == BC_JFORL); - dasm_put(Dst, 14926); + dasm_put(Dst, 14920); if (!vk) { - dasm_put(Dst, 14930, LJ_TISNUM, LJ_TISNUM); + dasm_put(Dst, 14924, LJ_TISNUM, LJ_TISNUM); } - dasm_put(Dst, 14949); + dasm_put(Dst, 14943); if (!vk) { - dasm_put(Dst, 14953, LJ_TISNUM); + dasm_put(Dst, 14947, LJ_TISNUM); } if (sse) { - dasm_put(Dst, 14962); + dasm_put(Dst, 14956); if (vk) { - dasm_put(Dst, 14974); + dasm_put(Dst, 14968); } else { - dasm_put(Dst, 14993); + dasm_put(Dst, 14987); } - dasm_put(Dst, 14998); + dasm_put(Dst, 14992); } else { - dasm_put(Dst, 15011); + dasm_put(Dst, 15005); if (vk) { - dasm_put(Dst, 15017); + dasm_put(Dst, 15011); } else { - dasm_put(Dst, 15033); + dasm_put(Dst, 15027); } - dasm_put(Dst, 15041); + dasm_put(Dst, 15035); if (cmov) { - dasm_put(Dst, 11129); + dasm_put(Dst, 11123); } else { - dasm_put(Dst, 11135); + dasm_put(Dst, 11129); } if (!cmov) { - dasm_put(Dst, 15046); + dasm_put(Dst, 15040); } } if (op == BC_FORI) { - dasm_put(Dst, 15052, -BCBIAS_J*4); + dasm_put(Dst, 15046, -BCBIAS_J*4); } else if (op == BC_JFORI) { - dasm_put(Dst, 15062, -BCBIAS_J*4, BC_JLOOP); + dasm_put(Dst, 15056, -BCBIAS_J*4, BC_JLOOP); } else if (op == BC_IFORL) { - dasm_put(Dst, 15076, -BCBIAS_J*4); + dasm_put(Dst, 15070, -BCBIAS_J*4); } else { - dasm_put(Dst, 15072, BC_JLOOP); + dasm_put(Dst, 15066, BC_JLOOP); } - dasm_put(Dst, 11164); + dasm_put(Dst, 11158); if (sse) { - dasm_put(Dst, 15086); + dasm_put(Dst, 15080); } break; case BC_ITERL: #if LJ_HASJIT - dasm_put(Dst, 14905, HOTCOUNT_PCMASK, GG_DISP2HOT); + dasm_put(Dst, 14899, HOTCOUNT_PCMASK, GG_DISP2HOT); #endif break; @@ -2244,33 +2248,33 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop, int cmov, int sse) break; #endif case BC_IITERL: - dasm_put(Dst, 15097, LJ_TNIL); + dasm_put(Dst, 15091, LJ_TNIL); if (op == BC_JITERL) { - dasm_put(Dst, 15112, BC_JLOOP); + dasm_put(Dst, 15106, BC_JLOOP); } else { - dasm_put(Dst, 15126, -BCBIAS_J*4); + dasm_put(Dst, 15120, -BCBIAS_J*4); } - dasm_put(Dst, 11461); + dasm_put(Dst, 11455); break; case BC_LOOP: #if LJ_HASJIT - dasm_put(Dst, 14905, HOTCOUNT_PCMASK, GG_DISP2HOT); + dasm_put(Dst, 14899, HOTCOUNT_PCMASK, GG_DISP2HOT); #endif break; case BC_ILOOP: - dasm_put(Dst, 8587); + dasm_put(Dst, 8581); break; case BC_JLOOP: #if LJ_HASJIT - dasm_put(Dst, 15142, DISPATCH_J(trace), DtD(->mcode), DISPATCH_GL(jit_base), DISPATCH_GL(jit_L)); + dasm_put(Dst, 15136, DISPATCH_J(trace), DtD(->mcode), DISPATCH_GL(jit_base), DISPATCH_GL(jit_L)); #endif break; case BC_JMP: - dasm_put(Dst, 15165, -BCBIAS_J*4); + dasm_put(Dst, 15159, -BCBIAS_J*4); break; /* ---------------------------------------------------------------------- */ @@ -2298,7 +2302,7 @@ static int build_backend(BuildCtx *ctx) build_subroutines(ctx, cmov, sse); - dasm_put(Dst, 15189); + dasm_put(Dst, 15183); for (op = 0; op < BC__MAX; op++) build_ins(ctx, (BCOp)op, op, cmov, sse); @@ -2349,8 +2353,6 @@ static void emit_asm_debug(BuildCtx *ctx) "\t.byte 0x83\n\t.uleb128 0x3\n" /* offset rbx */ "\t.byte 0x8f\n\t.uleb128 0x4\n" /* offset r15 */ "\t.byte 0x8e\n\t.uleb128 0x5\n" /* offset r14 */ - "\t.byte 0x8d\n\t.uleb128 0x6\n" /* offset r13 */ - "\t.byte 0x8c\n\t.uleb128 0x7\n" /* offset r12 */ #else "\t.byte 0x85\n\t.uleb128 0x2\n" /* offset ebp */ "\t.byte 0x87\n\t.uleb128 0x3\n" /* offset edi */ @@ -2392,8 +2394,6 @@ static void emit_asm_debug(BuildCtx *ctx) "\t.byte 0x83\n\t.uleb128 0x3\n" /* offset rbx */ "\t.byte 0x8f\n\t.uleb128 0x4\n" /* offset r15 */ "\t.byte 0x8e\n\t.uleb128 0x5\n" /* offset r14 */ - "\t.byte 0x8d\n\t.uleb128 0x6\n" /* offset r13 */ - "\t.byte 0x8c\n\t.uleb128 0x7\n" /* offset r12 */ #else "\t.byte 0x85\n\t.uleb128 0x2\n" /* offset ebp */ "\t.byte 0x87\n\t.uleb128 0x3\n" /* offset edi */ @@ -2444,8 +2444,6 @@ static void emit_asm_debug(BuildCtx *ctx) "\t.byte 0x83\n\t.uleb128 0x3\n" /* offset rbx */ "\t.byte 0x8f\n\t.uleb128 0x4\n" /* offset r15 */ "\t.byte 0x8e\n\t.uleb128 0x5\n" /* offset r14 */ - "\t.byte 0x8d\n\t.uleb128 0x6\n" /* offset r13 */ - "\t.byte 0x8c\n\t.uleb128 0x7\n" /* offset r12 */ #else "\t.byte 0x84\n\t.byte 0x2\n" /* offset ebp (4 for MACH-O)*/ "\t.byte 0x87\n\t.byte 0x3\n" /* offset edi */ diff --git a/src/lj_err.c b/src/lj_err.c index ebc9ad12..b2e7f5f8 100644 --- a/src/lj_err.c +++ b/src/lj_err.c @@ -20,6 +20,63 @@ #include "lj_trace.h" #include "lj_vm.h" +/* +** LuaJIT can either use internal or external frame unwinding: +** +** - Internal frame unwinding (INT) is free-standing and doesn't require +** any OS or library support. +** +** - External frame unwinding (EXT) uses the system-provided unwind handler. +** +** Pros and Cons: +** +** - EXT requires unwind tables for *all* functions on the C stack between +** the pcall/catch and the error/throw. This is the default on x64, +** but needs to be manually enabled on x86 for non-C++ code. +** +** - INT is faster when actually throwing errors (but this happens rarely). +** Setting up error handlers is zero-cost in any case. +** +** - EXT provides full interoperability with C++ exceptions. You can throw +** Lua errors or C++ exceptions through a mix of Lua frames and C++ frames. +** C++ destructors are called as needed. C++ exceptions caught by pcall +** are converted to the string "C++ exception". Lua errors can be caught +** with catch (...) in C++. +** +** - INT has only limited support for automatically catching C++ exceptions +** on POSIX systems using DWARF2 stack unwinding. Other systems may use +** the wrapper function feature. Lua errors thrown through C++ frames +** cannot be caught by C++ code and C++ destructors are not run. +** +** INT is the default on x86 systems, EXT is the default on x64 systems. +** +** EXT can only be manually enabled on POSIX/x86 systems using DWARF2 stack +** unwinding with -DLUAJIT_UNWIND_EXTERNAL. *All* C code must be compiled +** with -funwind-tables (or -fexceptions). This includes LuaJIT itself (set +** TARGET_CFLAGS), all of your C/Lua binding code, all loadable C modules +** and all C libraries that have callbacks which may be used to call back +** into Lua. C++ code must *not* be compiled with -fno-exceptions. +** +** EXT cannot be enabled on WIN32 since system exceptions use code-driven SEH. +** EXT is mandatory on WIN64 since the calling convention has an abundance +** of callee-saved registers (rbx, rbp, rsi, rdi, r12-r15, xmm6-xmm15). +** EXT is mandatory on POSIX/x64 since the interpreter doesn't save r12/r13. +*/ + +#if defined(__ELF__) || defined(__MACH__) +#if LJ_TARGET_X86 +#ifdef LUAJIT_UNWIND_EXTERNAL +#define LJ_UNWIND_EXT 1 +#endif +#elif LJ_TARGET_X64 +#define LJ_UNWIND_EXT 1 +#endif +#elif defined(LUA_USE_WIN) +#if LJ_TARGET_X64 +#define LJ_UNWIND_EXT 1 +#endif +#endif + /* -- Error messages ------------------------------------------------------ */ /* Error message strings. */ @@ -374,115 +431,247 @@ LUA_API int lua_getstack(lua_State *L, int level, lua_Debug *ar) } } +/* -- Internal frame unwinding -------------------------------------------- */ + +/* Unwind Lua stack and move error message to new top. */ +LJ_NOINLINE static void unwindstack(lua_State *L, TValue *top) +{ + lj_func_closeuv(L, top); + if (top < L->top-1) { + copyTV(L, top, L->top-1); + L->top = top+1; + } + lj_state_relimitstack(L); +} + +/* Unwind until stop frame. Optionally cleanup frames. */ +static void *err_unwind(lua_State *L, void *stopcf, int errcode) +{ + TValue *frame = L->base-1; + void *cf = L->cframe; + while (cf) { + int32_t nres = cframe_nres(cframe_raw(cf)); + if (nres < 0) { /* C frame without Lua frame? */ + TValue *top = restorestack(L, -nres); + if (frame < top) { /* Frame reached? */ + if (errcode) { + L->cframe = cframe_prev(cf); + L->base = frame+1; + unwindstack(L, top); + } + return cf; + } + } + if (frame <= L->stack) + break; + switch (frame_typep(frame)) { + case FRAME_LUA: /* Lua frame. */ + case FRAME_LUAP: + frame = frame_prevl(frame); + break; + case FRAME_C: /* C frame. */ +#if LJ_UNWIND_EXT + if (errcode) { + L->cframe = cframe_prev(cf); + L->base = frame_prevd(frame) + 1; + unwindstack(L, frame); + } else if (cf != stopcf) { + cf = cframe_prev(cf); + frame = frame_prevd(frame); + break; + } + return NULL; /* Continue unwinding. */ +#else + UNUSED(stopcf); + cf = cframe_prev(cf); + frame = frame_prevd(frame); + break; +#endif + case FRAME_CP: /* Protected C frame. */ + if (cframe_canyield(cf)) { /* Resume? */ + if (errcode) { + L->cframe = NULL; + L->status = cast_byte(errcode); + } + return cframe_raw(cf); + } + if (errcode) { + L->cframe = cframe_prev(cf); + L->base = frame_prevd(frame) + 1; + unwindstack(L, frame); + } + return cf; + case FRAME_CONT: /* Continuation frame. */ + case FRAME_VARG: /* Vararg frame. */ + frame = frame_prevd(frame); + break; + case FRAME_PCALL: /* FF pcall() frame. */ + if (errcode) + hook_leave(G(L)); + /* fallthrough */ + case FRAME_PCALLH: /* FF pcall() frame inside hook. */ + if (errcode) { + L->cframe = cf; + L->base = frame_prevd(frame) + 1; + unwindstack(L, L->base); + return NULL; /* Call special handler. */ + } + return cf; + } + } + /* No C frame. */ + if (errcode) { + L->cframe = NULL; + L->base = L->stack+1; + unwindstack(L, L->base); + if (G(L)->panic) + G(L)->panic(L); + exit(EXIT_FAILURE); + } + return L; /* Anything not-NULL will do. */ +} + +/* -- External frame unwinding -------------------------------------------- */ + +#if defined(__ELF__) || defined(__MACH__) + +#include + +#define LJ_UEXCLASS 0x4c55414a49543200ULL /* LUAJIT2\0 */ +#define LJ_UEXCLASS_MAKE(c) (LJ_UEXCLASS | (_Unwind_Exception_Class)(c)) +#define LJ_UEXCLASS_CHECK(cl) (((cl) ^ LJ_UEXCLASS) <= 0xff) +#define LJ_UEXCLASS_ERRCODE(cl) (cast_int((cl) & 0xff)) + +/* DWARF2 personality handler referenced from interpreter .eh_frame. */ +LJ_FUNCA int lj_err_unwind_dwarf(int version, _Unwind_Action actions, + _Unwind_Exception_Class uexclass, struct _Unwind_Exception *uex, + struct _Unwind_Context *ctx) +{ + void *cf; + lua_State *L; + if (version != 1) + return _URC_FATAL_PHASE1_ERROR; + UNUSED(uexclass); + cf = (void *)_Unwind_GetCFA(ctx); + L = cframe_L(cf); + if ((actions & _UA_SEARCH_PHASE)) { +#if LJ_UNWIND_EXT + if (err_unwind(L, cf, 0) == NULL) + return _URC_CONTINUE_UNWIND; +#endif + if (!LJ_UEXCLASS_CHECK(uexclass)) { + setstrV(L, L->top++, lj_err_str(L, LJ_ERR_ERRCPP)); + } + return _URC_HANDLER_FOUND; + } + if ((actions & _UA_CLEANUP_PHASE)) { + int errcode; + if (LJ_UEXCLASS_CHECK(uexclass)) { + errcode = LJ_UEXCLASS_ERRCODE(uexclass); + } else { + if ((actions & _UA_HANDLER_FRAME)) + _Unwind_DeleteException(uex); + errcode = LUA_ERRRUN; + } +#if LJ_UNWIND_EXT + if (err_unwind(L, cf, errcode)) { + _Unwind_SetGR(ctx, 0, errcode); + _Unwind_SetIP(ctx, (_Unwind_Ptr)lj_vm_unwind_c_eh); + return _URC_INSTALL_CONTEXT; + } else if ((actions & _UA_HANDLER_FRAME)) { + _Unwind_SetIP(ctx, (_Unwind_Ptr)lj_vm_unwind_ff_eh); + return _URC_INSTALL_CONTEXT; + } +#else + /* This is not the proper way to escape from the unwinder. We get away + ** with it on x86 because the interpreter restores all callee-saved regs. + */ + lj_err_throw(L, errcode); +#endif + } + return _URC_CONTINUE_UNWIND; +} + +#if LJ_UNWIND_EXT +/* NYI: this is not thread-safe. */ +static struct _Unwind_Exception static_uex; + +/* Raise DWARF2 exception. */ +static void err_raise_ext(int errcode) +{ + static_uex.exception_class = LJ_UEXCLASS_MAKE(errcode); + static_uex.exception_cleanup = NULL; + _Unwind_RaiseException(&static_uex); +} +#endif + +#elif defined(_WIN64) + +#define WIN32_LEAN_AND_MEAN +#include + +#define LJ_EXCODE ((DWORD)0x024c4a00) +#define LJ_EXCODE_MAKE(c) (LJ_EXCODE | (DWORD)(c)) +#define LJ_EXCODE_CHECK(cl) (((cl) ^ LJ_EXCODE) <= 0xff) +#define LJ_EXCODE_ERRCODE(cl) (cast_int((cl) & 0xff)) + +/* NYI: Win64 exception handler for interpreter frame. */ + +/* Raise Windows exception. */ +static void err_raise_ext(int errcode) +{ + RaiseException(LJ_EXCODE_MAKE(errcode), 0, 0, NULL); +} + +#endif + /* -- Error handling ------------------------------------------------------ */ +/* Throw error. Find catch frame, unwind stack and continue. */ +LJ_NOINLINE void lj_err_throw(lua_State *L, int errcode) +{ + global_State *g = G(L); + lj_trace_abort(g); + setgcrefnull(g->jit_L); + L->status = 0; +#if LJ_UNWIND_EXT + err_raise_ext(errcode); + /* + ** A return from this function signals a corrupt C stack that cannot be + ** unwound. We have no choice but to call the panic function and exit. + ** + ** Usually this is caused by a C function without unwind information. + ** This should never happen on x64, but may happen on x86 if you've + ** manually enabled LUAJIT_UNWIND_EXTERNAL and forgot to recompile *every* + ** non-C++ file with -funwind-tables. + */ + if (G(L)->panic) + G(L)->panic(L); +#else + { + void *cf = err_unwind(L, NULL, errcode); + if (cf) + lj_vm_unwind_c(cf, errcode); + else + lj_vm_unwind_ff(cframe_raw(L->cframe)); + } +#endif + exit(EXIT_FAILURE); +} + /* Return string object for error message. */ LJ_NOINLINE GCstr *lj_err_str(lua_State *L, ErrMsg em) { return lj_str_newz(L, err2msg(em)); } -/* Unwind Lua stack and add error message on top. */ -LJ_NOINLINE static void unwindstack(lua_State *L, TValue *top, int errcode) +/* Out-of-memory error. */ +LJ_NOINLINE void lj_err_mem(lua_State *L) { - lj_func_closeuv(L, top); - switch (errcode) { - case LUA_ERRMEM: - setstrV(L, top, lj_err_str(L, LJ_ERR_ERRMEM)); - break; - case LUA_ERRERR: - setstrV(L, top, lj_err_str(L, LJ_ERR_ERRERR)); - break; - case LUA_ERRSYNTAX: - case LUA_ERRRUN: - copyTV(L, top, L->top - 1); - break; - default: - lua_assert(0); - break; - } - L->top = top+1; - lj_state_relimitstack(L); -} - -/* Throw error. Find catch frame, unwind stack and continue. */ -LJ_NOINLINE void lj_err_throw(lua_State *L, int errcode) -{ - TValue *frame = L->base-1; - void *cf = L->cframe; - global_State *g = G(L); - if (L->status == LUA_ERRERR+1) { /* Don't touch the stack during lua_open. */ - lj_vm_unwind_c(cf, errcode); - goto uncaught; /* unreachable */ - } - lj_trace_abort(g); - setgcrefnull(g->jit_L); - L->status = 0; - while (cf) { - if (cframe_nres(cframe_raw(cf)) < 0) { /* cframe without frame? */ - TValue *top = restorestack(L, -cframe_nres(cf)); - if (frame < top) { - L->cframe = cframe_prev(cf); - L->base = frame+1; - unwindstack(L, top, errcode); - lj_vm_unwind_c(cf, errcode); - goto uncaught; /* unreachable */ - } - } - if (frame <= L->stack) - break; - switch (frame_typep(frame)) { - case FRAME_LUA: - case FRAME_LUAP: - frame = frame_prevl(frame); - break; - case FRAME_C: - if (cframe_canyield(cf)) goto uncaught; - cf = cframe_prev(cf); - /* fallthrough */ - case FRAME_CONT: - case FRAME_VARG: - frame = frame_prevd(frame); - break; - case FRAME_CP: - L->cframe = cframe_prev(cf); - L->base = frame_prevd(frame) + 1; - unwindstack(L, frame, errcode); - lj_vm_unwind_c(cf, errcode); - goto uncaught; /* unreachable */ - case FRAME_PCALL: - hook_leave(g); - /* fallthrough */ - case FRAME_PCALLH: - L->cframe = cf; - L->base = frame_prevd(frame) + 1; - unwindstack(L, L->base, errcode); - lj_vm_unwind_ff(cf); - goto uncaught; /* unreachable */ - default: - lua_assert(0); - goto uncaught; - } - } - /* No catch frame found. Must be a resume or an unprotected error. */ -uncaught: - L->status = cast_byte(errcode); - L->cframe = NULL; - if (cframe_canyield(cf)) { /* Resume? */ - unwindstack(L, L->top, errcode); - lj_vm_unwind_c(cframe_raw(cf), errcode); - } - /* Better rethrow on main thread than panic. */ - { - if (L != mainthread(g)) - lj_err_throw(mainthread(g), errcode); - if (g->panic) { - L->base = L->stack+1; - unwindstack(L, L->base, errcode); - g->panic(L); - } - } - exit(EXIT_FAILURE); + if (L->status == LUA_ERRERR+1) /* Don't touch the stack during lua_open. */ + lj_vm_unwind_c(L->cframe, LUA_ERRMEM); + setstrV(L, L->top++, lj_err_str(L, LJ_ERR_ERRMEM)); + lj_err_throw(L, LUA_ERRMEM); } /* Find error function for runtime errors. Requires an extra stack traversal. */ @@ -507,7 +696,6 @@ static ptrdiff_t finderrfunc(lua_State *L) frame = frame_prevl(frame); break; case FRAME_C: - if (cframe_canyield(cf)) return 0; cf = cframe_prev(cf); /* fallthrough */ case FRAME_CONT: @@ -515,6 +703,7 @@ static ptrdiff_t finderrfunc(lua_State *L) frame = frame_prevd(frame); break; case FRAME_CP: + if (cframe_canyield(cf)) return 0; if (cframe_errfunc(cf) >= 0) return cframe_errfunc(cf); frame = frame_prevd(frame); @@ -540,8 +729,10 @@ LJ_NOINLINE void lj_err_run(lua_State *L) TValue *errfunc = restorestack(L, ef); TValue *top = L->top; lj_trace_abort(G(L)); - if (!tvisfunc(errfunc) || L->status == LUA_ERRERR) + if (!tvisfunc(errfunc) || L->status == LUA_ERRERR) { + setstrV(L, top-1, lj_err_str(L, LJ_ERR_ERRERR)); lj_err_throw(L, LUA_ERRERR); + } L->status = LUA_ERRERR; copyTV(L, top, top-1); copyTV(L, top-1, errfunc); @@ -763,47 +954,3 @@ LUALIB_API int luaL_error(lua_State *L, const char *fmt, ...) return 0; /* unreachable */ } -/* -- C++ exception support ----------------------------------------------- */ - -#if defined(__ELF__) || defined(__MACH__) -typedef enum -{ - _URC_NO_REASON, - _URC_FOREIGN_EXCEPTION_CAUGHT, - _URC_FATAL_PHASE2_ERROR, - _URC_FATAL_PHASE1_ERROR, - _URC_NORMAL_STOP, - _URC_END_OF_STACK, - _URC_HANDLER_FOUND, - _URC_INSTALL_CONTEXT, - _URC_CONTINUE_UNWIND -} _Unwind_Reason_Code; - -#define _UA_SEARCH_PHASE 1 -#define _UA_CLEANUP_PHASE 2 -#define _UA_HANDLER_FRAME 4 -#define _UA_FORCE_UNWIND 8 -#define _UA_END_OF_STACK 16 - -extern void *_Unwind_GetCFA(void *ctx); -extern void _Unwind_DeleteException(void *uex); - -/* DWARF2 personality handler referenced from .eh_frame. */ -LJ_FUNCA int lj_err_unwind_dwarf(int version, int actions, uint64_t uexclass, - void *uex, void *ctx) -{ - if (version != 1) - return _URC_FATAL_PHASE1_ERROR; - UNUSED(uexclass); - if ((actions & _UA_SEARCH_PHASE)) - return _URC_HANDLER_FOUND; - if ((actions & _UA_HANDLER_FRAME)) { - void *cf = _Unwind_GetCFA(ctx); - lua_State *L = cframe_L(cf); - _Unwind_DeleteException(uex); - lj_err_msg(L, LJ_ERR_ERRCPP); - } - return _URC_CONTINUE_UNWIND; -} -#endif - diff --git a/src/lj_err.h b/src/lj_err.h index e794d44c..26375489 100644 --- a/src/lj_err.h +++ b/src/lj_err.h @@ -19,6 +19,7 @@ typedef enum { LJ_FUNC GCstr *lj_err_str(lua_State *L, ErrMsg em); LJ_FUNC_NORET void lj_err_throw(lua_State *L, int errcode); +LJ_FUNC_NORET void lj_err_mem(lua_State *L); LJ_FUNC_NORET void lj_err_run(lua_State *L); LJ_FUNC_NORET void lj_err_msg(lua_State *L, ErrMsg em); LJ_FUNC_NORET void lj_err_lex(lua_State *L, const char *src, const char *tok, diff --git a/src/lj_frame.h b/src/lj_frame.h index 2704ee40..0bfcb005 100644 --- a/src/lj_frame.h +++ b/src/lj_frame.h @@ -81,7 +81,7 @@ enum { #define CFRAME_OFS_ERRF (3*4) #define CFRAME_OFS_NRES (2*4) #define CFRAME_OFS_MULTRES (1*4) -#define CFRAME_SIZE (12*8) +#define CFRAME_SIZE (10*8) #endif #else #error "Missing CFRAME_* definitions for this architecture" diff --git a/src/lj_vm.h b/src/lj_vm.h index 3e4ea45c..05c590e6 100644 --- a/src/lj_vm.h +++ b/src/lj_vm.h @@ -15,8 +15,10 @@ typedef TValue *(*lua_CPFunction)(lua_State *L, lua_CFunction func, void *ud); LJ_ASMF int lj_vm_cpcall(lua_State *L, lua_CFunction func, void *ud, lua_CPFunction cp); LJ_ASMF int lj_vm_resume(lua_State *L, TValue *base, int nres1, ptrdiff_t ef); -LJ_ASMF_NORET void lj_vm_unwind_c(void *cframe, int errcode); -LJ_ASMF_NORET void lj_vm_unwind_ff(void *cframe); +LJ_ASMF_NORET void LJ_FASTCALL lj_vm_unwind_c(void *cframe, int errcode); +LJ_ASMF_NORET void LJ_FASTCALL lj_vm_unwind_ff(void *cframe); +LJ_ASMF void lj_vm_unwind_c_eh(void); +LJ_ASMF void lj_vm_unwind_ff_eh(void); /* Miscellaneous functions. */ #if LJ_TARGET_X86ORX64