diff --git a/src/lj_asm.c b/src/lj_asm.c index e7ff06c794..b51cf229cc 100644 --- a/src/lj_asm.c +++ b/src/lj_asm.c @@ -1953,6 +1953,23 @@ static void asm_setup_regsp(ASMState *as) /* -- Assembler core ------------------------------------------------------ */ +/* Do we want the profiler to attribute VM time to this trace? + * + * Not if the root of this trace is a Lua function. We assume that the + * root cause of running the interpreter is a loop that failed to + * compile somewhere and that entry/exit through function traces is + * only noise that should be filtered out. + * + * This helps the profiler to point out the code that needs to be + * changed to reduce time spent in the interpreter. + */ +static int asm_should_profile_exit(jit_State *J, GCtrace *T) +{ + GCtrace *root = traceref(J, T->root ? T->root : T->traceno); + BCOp op = bc_op(root->startins); + return op != BC_FUNCF && op != BC_FUNCV; +} + /* Assemble a trace. */ void lj_asm_trace(jit_State *J, GCtrace *T) { @@ -2107,7 +2124,8 @@ void lj_asm_trace(jit_State *J, GCtrace *T) T->mcode = as->mcp; T->mcloop = as->mcloop ? (MSize)((char *)as->mcloop - (char *)as->mcp) : 0; if (!as->loopref) - asm_tail_fixup(as, T->link); /* Note: this may change as->mctop! */ + /* Note: this may change as->mctop! */ + asm_tail_fixup(as, T->link, asm_should_profile_exit(J, T)); T->szmcode = (MSize)((char *)as->mctop - (char *)as->mcp); lj_mcode_sync(T->mcode, origtop); } diff --git a/src/lj_asm_x86.h b/src/lj_asm_x86.h index 55a3de0077..2320ab13e3 100644 --- a/src/lj_asm_x86.h +++ b/src/lj_asm_x86.h @@ -2273,7 +2273,7 @@ static RegSet asm_head_side_base(ASMState *as, IRIns *irp, RegSet allow) /* -- Tail of trace ------------------------------------------------------- */ /* Fixup the tail code. */ -static void asm_tail_fixup(ASMState *as, TraceNo lnk) +static void asm_tail_fixup(ASMState *as, TraceNo lnk, int track) { /* Note: don't use as->mcp swap + emit_*: emit_op overwrites more bytes. */ MCode *p = as->mctop; @@ -2304,7 +2304,9 @@ static void asm_tail_fixup(ASMState *as, TraceNo lnk) } } /* Patch exit branch. */ - target = lnk ? traceref(as->J, lnk)->mcode : (MCode *)lj_vm_exit_interp; + target = (lnk ? traceref(as->J, lnk)->mcode : + (track ? (MCode *)lj_vm_exit_interp : + (MCode *)lj_vm_exit_interp_notrack)); *(int32_t *)(p-4) = jmprel(p, target); p[-5] = XI_JMP; /* Drop unused mcode tail. Fill with NOPs to make the prefetcher happy. */ diff --git a/src/lj_vm.h b/src/lj_vm.h index 423368aa68..974f26dac6 100644 --- a/src/lj_vm.h +++ b/src/lj_vm.h @@ -38,6 +38,7 @@ LJ_ASMF void lj_vm_callhook(void); /* Trace exit handling. */ LJ_ASMF void lj_vm_exit_handler(void); LJ_ASMF void lj_vm_exit_interp(void); +LJ_ASMF void lj_vm_exit_interp_notrack(void); /* Internal math helper functions. */ LJ_ASMF double lj_vm_floor(double); diff --git a/src/lj_vmprofile.c b/src/lj_vmprofile.c index d9b64a9a63..1e035bc6f5 100644 --- a/src/lj_vmprofile.c +++ b/src/lj_vmprofile.c @@ -88,11 +88,11 @@ static void start_timer(int interval) struct sigaction sa; tm.it_value.tv_sec = tm.it_interval.tv_sec = interval / 1000; tm.it_value.tv_usec = tm.it_interval.tv_usec = (interval % 1000) * 1000; - setitimer(ITIMER_PROF, &tm, NULL); + setitimer(ITIMER_VIRTUAL, &tm, NULL); sa.sa_flags = SA_SIGINFO | SA_RESTART; sa.sa_sigaction = vmprofile_signal; sigemptyset(&sa.sa_mask); - sigaction(SIGPROF, &sa, &state.oldsa); + sigaction(SIGVTALRM, &sa, &state.oldsa); } static void stop_timer() @@ -100,8 +100,8 @@ static void stop_timer() struct itimerval tm; tm.it_value.tv_sec = tm.it_interval.tv_sec = 0; tm.it_value.tv_usec = tm.it_interval.tv_usec = 0; - setitimer(ITIMER_PROF, &tm, NULL); - sigaction(SIGPROF, NULL, &state.oldsa); + setitimer(ITIMER_VIRTUAL, &tm, NULL); + sigaction(SIGVTALRM, NULL, &state.oldsa); } /* -- State that the application can manage via FFI ----------------------- */ diff --git a/src/reusevm/host/buildvm_arch.h b/src/reusevm/host/buildvm_arch.h index 392216c124..d5b09c464a 100644 --- a/src/reusevm/host/buildvm_arch.h +++ b/src/reusevm/host/buildvm_arch.h @@ -22,7 +22,7 @@ #line 7 "vm_x64.dasc" //| //|.actionlist build_actionlist -static const unsigned char build_actionlist[15853] = { +static const unsigned char build_actionlist[15846] = { 254,1,248,10,252,247,195,237,15,132,244,11,72,131,227,252,248,72,41,218,72, 141,76,25,252,248,72,139,90,252,248,73,187,237,237,76,137,28,10,248,12,131, 192,1,15,132,244,13,137,4,36,72,252,247,195,237,15,132,244,14,248,15,72,129, @@ -434,355 +434,354 @@ static const unsigned char build_actionlist[15853] = { 17,69,128,73,139,174,233,73,139,150,233,73,137,174,233,72,137,149,233,72, 137,230,73,141,190,233,73,199,134,233,0,0,0,0,232,251,1,45,72,139,141,233, 72,129,225,239,72,137,169,233,72,139,149,233,72,139,153,233,252,233,244,247, - 248,152,255,72,141,76,36,16,69,139,150,233,65,131,252,250,1,15,130,244,247, - 69,137,150,233,248,1,76,139,105,252,248,76,139,33,72,137,204,133,192,15,136, - 244,255,72,139,108,36,16,137,4,36,76,139,122,252,240,73,193,231,17,73,193, - 252,239,17,77,139,191,233,77,139,191,233,72,137,149,233,73,199,134,233,0, - 0,0,0,69,139,150,233,65,199,134,233,237,139,3,15,182,204,15,182,232,72,131, - 195,4,193,232,16,129,252,253,239,15,130,244,249,129,252,253,239,15,131,244, - 250,248,2,255,139,4,36,248,3,65,252,255,36,252,238,248,4,72,139,66,252,248, - 169,237,15,133,244,2,15,182,64,252,253,72,252,247,216,76,139,124,194,224, - 73,193,231,17,73,193,252,239,17,77,139,191,233,77,139,191,233,252,233,244, - 2,248,9,72,252,247,216,72,137,252,239,72,137,198,232,251,1,1,248,153,248, - 97,72,184,237,237,102,72,15,110,208,72,184,237,237,102,72,15,110,216,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,72,184,237,237,255,102,72,15,110,208, - 252,242,15,194,193,1,102,15,84,194,252,242,15,92,200,15,40,193,248,1,195, - 248,154,248,99,72,184,237,237,102,72,15,110,208,72,184,237,237,102,72,15, - 110,216,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,72,184,237,237,102,72,15, - 110,208,252,242,15,194,193,6,102,15,84,194,252,242,15,92,200,15,40,193,248, - 1,195,248,155,248,156,72,184,237,237,102,72,15,110,208,72,184,237,237,102, - 72,15,110,216,15,40,200,102,15,84,202,102,15,46,217,15,134,244,247,255,102, - 15,85,208,15,40,193,252,242,15,88,203,252,242,15,92,203,72,184,237,237,102, - 72,15,110,216,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,157,15,40,232,252,242,15,94,193,72,184,237, - 237,102,72,15,110,208,72,184,237,237,102,72,15,110,216,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,15,86,226,72,184,237,237,102,72,15,110,208,252,242,15,194,196, - 1,102,15,84,194,252,242,15,92,224,15,40,197,252,242,15,89,204,252,242,15, - 92,193,195,248,1,252,242,15,89,200,15,40,197,252,242,15,92,193,195,248,158, - 131,252,248,1,15,142,244,252,248,1,169,1,0,0,0,15,133,244,248,255,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,252,242,15,89,200, - 252,233,244,3,248,4,252,242,15,89,193,248,5,195,248,6,15,132,244,5,15,130, - 244,253,255,252,247,216,232,244,1,72,184,237,237,102,72,15,110,200,252,242, - 15,94,200,15,40,193,195,248,7,72,184,237,237,102,72,15,110,192,195,248,159, - 137,252,248,83,49,201,15,162,137,6,137,94,4,137,78,8,137,86,12,91,195,248, - 160,255,204,255,204,248,161,83,65,87,65,86,65,85,65,84,72,131,252,236,40, - 76,141,181,233,72,139,157,233,15,183,192,137,131,233,72,137,187,233,72,137, - 179,233,72,137,147,233,72,137,139,233,252,242,15,17,131,233,252,242,15,17, - 139,233,252,242,15,17,147,233,252,242,15,17,155,233,72,141,132,253,36,233, - 76,137,131,233,76,137,139,233,252,242,15,17,163,233,252,242,15,17,171,233, - 252,242,15,17,179,233,252,242,15,17,187,233,255,72,137,131,233,72,137,230, - 72,137,92,36,24,72,137,223,232,251,1,46,65,199,134,233,237,72,139,144,233, - 72,139,128,233,72,41,208,72,139,106,252,240,72,193,229,17,72,193,252,237, - 17,72,193,232,3,72,131,192,1,72,139,157,233,139,11,15,182,252,233,15,182, - 205,72,131,195,4,65,252,255,36,252,238,248,33,72,139,76,36,16,73,139,158, - 233,72,137,139,233,72,137,145,233,72,137,169,233,72,137,223,72,137,198,232, - 251,1,47,72,139,131,233,252,242,15,16,131,233,252,233,244,17,248,162,85,72, - 137,229,83,72,137,252,251,139,131,233,72,41,196,15,182,139,233,131,252,233, - 1,15,136,244,248,248,1,255,72,139,132,253,203,233,72,137,132,253,204,233, - 131,252,233,1,15,137,244,1,248,2,15,182,131,233,72,139,187,233,72,139,179, - 233,72,139,147,233,72,139,139,233,76,139,131,233,76,139,139,233,133,192,15, - 132,244,251,15,40,131,233,15,40,139,233,15,40,147,233,15,40,155,233,131,252, - 248,4,15,134,244,251,255,15,40,163,233,15,40,171,233,15,40,179,233,15,40, - 187,233,248,5,252,255,147,233,72,137,131,233,15,41,131,233,72,137,147,233, - 15,41,139,233,72,139,93,252,248,201,195,255,249,255,76,139,28,202,72,139, - 44,194,76,137,217,72,137,232,73,193,252,251,47,72,193,252,253,47,65,129,252, - 251,239,15,131,244,50,129,252,253,239,15,131,244,50,248,1,102,72,15,110,192, - 248,2,102,72,15,110,201,248,3,72,131,195,4,102,15,46,193,255,15,135,244,247, - 255,15,131,244,247,255,15,183,67,252,254,72,141,156,253,131,233,248,1,139, + 248,152,255,69,139,150,233,69,137,150,233,248,153,72,141,76,36,16,248,1,76, + 139,105,252,248,76,139,33,72,137,204,133,192,15,136,244,255,72,139,108,36, + 16,137,4,36,76,139,122,252,240,73,193,231,17,73,193,252,239,17,77,139,191, + 233,77,139,191,233,72,137,149,233,73,199,134,233,0,0,0,0,69,139,150,233,65, + 199,134,233,237,139,3,15,182,204,15,182,232,72,131,195,4,193,232,16,129,252, + 253,239,15,130,244,249,129,252,253,239,15,131,244,250,248,2,255,139,4,36, + 248,3,65,252,255,36,252,238,248,4,72,139,66,252,248,169,237,15,133,244,2, + 15,182,64,252,253,72,252,247,216,76,139,124,194,224,73,193,231,17,73,193, + 252,239,17,77,139,191,233,77,139,191,233,252,233,244,2,248,9,72,252,247,216, + 72,137,252,239,72,137,198,232,251,1,1,248,154,248,97,72,184,237,237,102,72, + 15,110,208,72,184,237,237,102,72,15,110,216,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,72,184,237,237,255,102,72,15,110,208,252,242,15,194,193,1,102,15, + 84,194,252,242,15,92,200,15,40,193,248,1,195,248,155,248,99,72,184,237,237, + 102,72,15,110,208,72,184,237,237,102,72,15,110,216,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,72,184,237,237,102,72,15,110,208,252,242,15,194,193,6,102, + 15,84,194,252,242,15,92,200,15,40,193,248,1,195,248,156,248,157,72,184,237, + 237,102,72,15,110,208,72,184,237,237,102,72,15,110,216,15,40,200,102,15,84, + 202,102,15,46,217,15,134,244,247,255,102,15,85,208,15,40,193,252,242,15,88, + 203,252,242,15,92,203,72,184,237,237,102,72,15,110,216,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,158, + 15,40,232,252,242,15,94,193,72,184,237,237,102,72,15,110,208,72,184,237,237, + 102,72,15,110,216,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,15,86,226,72,184,237,237, + 102,72,15,110,208,252,242,15,194,196,1,102,15,84,194,252,242,15,92,224,15, + 40,197,252,242,15,89,204,252,242,15,92,193,195,248,1,252,242,15,89,200,15, + 40,197,252,242,15,92,193,195,248,159,131,252,248,1,15,142,244,252,248,1,169, + 1,0,0,0,15,133,244,248,255,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,252,242,15,89,200,252,233,244,3,248,4,252,242,15,89,193, + 248,5,195,248,6,15,132,244,5,15,130,244,253,255,252,247,216,232,244,1,72, + 184,237,237,102,72,15,110,200,252,242,15,94,200,15,40,193,195,248,7,72,184, + 237,237,102,72,15,110,192,195,248,160,137,252,248,83,49,201,15,162,137,6, + 137,94,4,137,78,8,137,86,12,91,195,248,161,255,204,255,204,248,162,83,65, + 87,65,86,65,85,65,84,72,131,252,236,40,76,141,181,233,72,139,157,233,15,183, + 192,137,131,233,72,137,187,233,72,137,179,233,72,137,147,233,72,137,139,233, + 252,242,15,17,131,233,252,242,15,17,139,233,252,242,15,17,147,233,252,242, + 15,17,155,233,72,141,132,253,36,233,76,137,131,233,76,137,139,233,252,242, + 15,17,163,233,252,242,15,17,171,233,252,242,15,17,179,233,252,242,15,17,187, + 233,255,72,137,131,233,72,137,230,72,137,92,36,24,72,137,223,232,251,1,46, + 65,199,134,233,237,72,139,144,233,72,139,128,233,72,41,208,72,139,106,252, + 240,72,193,229,17,72,193,252,237,17,72,193,232,3,72,131,192,1,72,139,157, + 233,139,11,15,182,252,233,15,182,205,72,131,195,4,65,252,255,36,252,238,248, + 33,72,139,76,36,16,73,139,158,233,72,137,139,233,72,137,145,233,72,137,169, + 233,72,137,223,72,137,198,232,251,1,47,72,139,131,233,252,242,15,16,131,233, + 252,233,244,17,248,163,85,72,137,229,83,72,137,252,251,139,131,233,72,41, + 196,15,182,139,233,131,252,233,1,15,136,244,248,248,1,255,72,139,132,253, + 203,233,72,137,132,253,204,233,131,252,233,1,15,137,244,1,248,2,15,182,131, + 233,72,139,187,233,72,139,179,233,72,139,147,233,72,139,139,233,76,139,131, + 233,76,139,139,233,133,192,15,132,244,251,15,40,131,233,15,40,139,233,15, + 40,147,233,15,40,155,233,131,252,248,4,15,134,244,251,255,15,40,163,233,15, + 40,171,233,15,40,179,233,15,40,187,233,248,5,252,255,147,233,72,137,131,233, + 15,41,131,233,72,137,147,233,15,41,139,233,72,139,93,252,248,201,195,255, + 249,255,76,139,28,202,72,139,44,194,76,137,217,72,137,232,73,193,252,251, + 47,72,193,252,253,47,65,129,252,251,239,15,131,244,50,129,252,253,239,15, + 131,244,50,248,1,102,72,15,110,192,248,2,102,72,15,110,201,248,3,72,131,195, + 4,102,15,46,193,255,15,135,244,247,255,15,131,244,247,255,15,183,67,252,254, + 72,141,156,253,131,233,248,1,139,3,15,182,204,15,182,232,72,131,195,4,193, + 232,16,65,252,255,36,252,238,255,72,139,44,194,76,139,28,202,72,131,195,4, + 72,137,232,76,137,217,72,193,252,253,47,73,193,252,251,47,129,252,253,239, + 15,131,244,251,65,129,252,251,239,15,131,244,251,102,72,15,110,200,248,1, + 102,72,15,110,193,248,2,102,15,46,193,248,4,255,15,138,244,248,15,133,244, + 248,255,15,138,244,248,15,132,244,247,255,248,1,15,183,67,252,254,72,141, + 156,253,131,233,248,2,255,248,2,15,183,67,252,254,72,141,156,253,131,233, + 248,1,255,248,5,129,252,253,239,15,132,244,55,65,129,252,251,239,15,132,244, + 55,72,57,193,15,132,244,1,68,57,221,15,133,244,2,129,252,253,239,15,135,244, + 2,72,193,225,17,72,193,252,233,17,72,139,169,233,72,133,252,237,15,132,244, + 2,252,246,133,233,235,255,15,133,244,2,255,49,252,237,255,189,1,0,0,0,255, + 252,233,244,54,255,248,3,65,129,252,251,239,15,133,244,2,252,233,244,55,255, + 72,252,247,208,72,139,44,202,72,131,195,4,73,137,252,235,72,193,229,17,72, + 193,252,237,17,73,193,252,251,47,65,129,252,251,239,15,133,244,249,73,59, + 44,199,255,72,139,44,202,72,131,195,4,73,137,252,235,73,193,252,251,47,65, + 129,252,251,239,15,131,244,249,248,1,252,242,65,15,16,4,199,248,2,102,15, + 46,4,202,248,4,255,72,252,247,208,72,139,44,202,72,193,252,253,47,72,131, + 195,4,57,197,255,15,133,244,249,15,183,67,252,254,72,141,156,253,131,233, + 248,2,139,3,15,182,204,15,182,232,72,131,195,4,193,232,16,65,252,255,36,252, + 238,248,3,129,252,253,239,15,133,244,2,252,233,244,55,255,15,132,244,248, + 129,252,253,239,15,132,244,55,15,183,67,252,254,72,141,156,253,131,233,248, + 2,139,3,15,182,204,15,182,232,72,131,195,4,193,232,16,65,252,255,36,252,238, + 255,76,139,28,194,72,131,195,4,255,76,137,221,255,72,137,44,202,255,72,139, + 44,202,72,193,252,253,47,1,197,15,133,244,56,139,3,15,182,204,15,182,232, + 72,131,195,4,193,232,16,65,252,255,36,252,238,255,76,139,28,202,73,193,252, + 251,47,65,129,252,251,239,15,131,244,56,139,3,15,182,204,15,182,232,72,131, + 195,4,193,232,16,65,252,255,36,252,238,255,72,139,44,194,72,137,44,202,139, 3,15,182,204,15,182,232,72,131,195,4,193,232,16,65,252,255,36,252,238,255, - 72,139,44,194,76,139,28,202,72,131,195,4,72,137,232,76,137,217,72,193,252, - 253,47,73,193,252,251,47,129,252,253,239,15,131,244,251,65,129,252,251,239, - 15,131,244,251,102,72,15,110,200,248,1,102,72,15,110,193,248,2,102,15,46, - 193,248,4,255,15,138,244,248,15,133,244,248,255,15,138,244,248,15,132,244, - 247,255,248,1,15,183,67,252,254,72,141,156,253,131,233,248,2,255,248,2,15, - 183,67,252,254,72,141,156,253,131,233,248,1,255,248,5,129,252,253,239,15, - 132,244,55,65,129,252,251,239,15,132,244,55,72,57,193,15,132,244,1,68,57, - 221,15,133,244,2,129,252,253,239,15,135,244,2,72,193,225,17,72,193,252,233, - 17,72,139,169,233,72,133,252,237,15,132,244,2,252,246,133,233,235,255,15, - 133,244,2,255,49,252,237,255,189,1,0,0,0,255,252,233,244,54,255,248,3,65, - 129,252,251,239,15,133,244,2,252,233,244,55,255,72,252,247,208,72,139,44, - 202,72,131,195,4,73,137,252,235,72,193,229,17,72,193,252,237,17,73,193,252, - 251,47,65,129,252,251,239,15,133,244,249,73,59,44,199,255,72,139,44,202,72, - 131,195,4,73,137,252,235,73,193,252,251,47,65,129,252,251,239,15,131,244, - 249,248,1,252,242,65,15,16,4,199,248,2,102,15,46,4,202,248,4,255,72,252,247, - 208,72,139,44,202,72,193,252,253,47,72,131,195,4,57,197,255,15,133,244,249, - 15,183,67,252,254,72,141,156,253,131,233,248,2,139,3,15,182,204,15,182,232, - 72,131,195,4,193,232,16,65,252,255,36,252,238,248,3,129,252,253,239,15,133, - 244,2,252,233,244,55,255,15,132,244,248,129,252,253,239,15,132,244,55,15, - 183,67,252,254,72,141,156,253,131,233,248,2,139,3,15,182,204,15,182,232,72, - 131,195,4,193,232,16,65,252,255,36,252,238,255,76,139,28,194,72,131,195,4, - 255,76,137,221,255,72,137,44,202,255,72,139,44,202,72,193,252,253,47,1,197, - 15,133,244,56,139,3,15,182,204,15,182,232,72,131,195,4,193,232,16,65,252, - 255,36,252,238,255,76,139,28,202,73,193,252,251,47,65,129,252,251,239,15, - 131,244,56,139,3,15,182,204,15,182,232,72,131,195,4,193,232,16,65,252,255, - 36,252,238,255,72,139,44,194,72,137,44,202,139,3,15,182,204,15,182,232,72, - 131,195,4,193,232,16,65,252,255,36,252,238,255,72,139,44,194,72,193,252,253, - 47,184,2,0,0,0,72,129,252,253,239,131,216,0,72,193,224,47,72,252,247,208, - 72,137,4,202,139,3,15,182,204,15,182,232,72,131,195,4,193,232,16,65,252,255, - 36,252,238,255,72,139,44,194,73,137,252,235,73,193,252,251,47,65,129,252, - 251,239,15,131,244,61,72,184,237,237,72,49,197,72,137,44,202,139,3,15,182, - 204,15,182,232,72,131,195,4,193,232,16,65,252,255,36,252,238,255,72,139,4, - 194,73,137,195,72,193,224,17,72,193,232,17,73,193,252,251,47,65,129,252,251, - 239,15,133,244,248,15,87,192,252,242,15,42,128,233,248,1,252,242,15,17,4, - 202,139,3,15,182,204,15,182,232,72,131,195,4,193,232,16,65,252,255,36,252, - 238,248,2,65,129,252,251,239,15,133,244,64,72,137,199,255,72,139,168,233, - 72,131,252,253,0,15,133,244,255,248,3,255,248,65,72,137,213,232,251,1,48, - 252,242,15,42,192,72,137,252,234,15,182,75,252,253,252,233,244,1,255,248, - 9,252,246,133,233,235,15,133,244,3,252,233,244,64,255,15,182,252,236,15,182, - 192,255,76,139,28,252,234,73,193,252,251,47,65,129,252,251,239,15,131,244, - 58,252,242,15,16,4,252,234,252,242,65,15,88,4,199,255,76,139,28,252,234,73, - 193,252,251,47,65,129,252,251,239,15,131,244,60,252,242,65,15,16,4,199,252, - 242,15,88,4,252,234,255,76,139,28,252,234,73,193,252,251,47,65,129,252,251, - 239,15,131,244,63,76,139,28,194,73,193,252,251,47,65,129,252,251,239,15,131, - 244,63,252,242,15,16,4,252,234,252,242,15,88,4,194,255,252,242,15,17,4,202, - 139,3,15,182,204,15,182,232,72,131,195,4,193,232,16,65,252,255,36,252,238, - 255,76,139,28,252,234,73,193,252,251,47,65,129,252,251,239,15,131,244,58, - 252,242,15,16,4,252,234,252,242,65,15,92,4,199,255,76,139,28,252,234,73,193, - 252,251,47,65,129,252,251,239,15,131,244,60,252,242,65,15,16,4,199,252,242, - 15,92,4,252,234,255,76,139,28,252,234,73,193,252,251,47,65,129,252,251,239, - 15,131,244,63,76,139,28,194,73,193,252,251,47,65,129,252,251,239,15,131,244, - 63,252,242,15,16,4,252,234,252,242,15,92,4,194,255,76,139,28,252,234,73,193, - 252,251,47,65,129,252,251,239,15,131,244,58,252,242,15,16,4,252,234,252,242, - 65,15,89,4,199,255,76,139,28,252,234,73,193,252,251,47,65,129,252,251,239, - 15,131,244,60,252,242,65,15,16,4,199,252,242,15,89,4,252,234,255,76,139,28, - 252,234,73,193,252,251,47,65,129,252,251,239,15,131,244,63,76,139,28,194, - 73,193,252,251,47,65,129,252,251,239,15,131,244,63,252,242,15,16,4,252,234, - 252,242,15,89,4,194,255,76,139,28,252,234,73,193,252,251,47,65,129,252,251, - 239,15,131,244,58,252,242,15,16,4,252,234,252,242,65,15,94,4,199,255,76,139, - 28,252,234,73,193,252,251,47,65,129,252,251,239,15,131,244,60,252,242,65, - 15,16,4,199,252,242,15,94,4,252,234,255,76,139,28,252,234,73,193,252,251, - 47,65,129,252,251,239,15,131,244,63,76,139,28,194,73,193,252,251,47,65,129, - 252,251,239,15,131,244,63,252,242,15,16,4,252,234,252,242,15,94,4,194,255, - 76,139,28,252,234,73,193,252,251,47,65,129,252,251,239,15,131,244,58,252, - 242,15,16,4,252,234,252,242,65,15,16,12,199,255,76,139,28,252,234,73,193, - 252,251,47,65,129,252,251,239,15,131,244,60,252,242,65,15,16,4,199,252,242, - 15,16,12,252,234,255,76,139,28,252,234,73,193,252,251,47,65,129,252,251,239, - 15,131,244,63,76,139,28,194,73,193,252,251,47,65,129,252,251,239,15,131,244, - 63,252,242,15,16,4,252,234,252,242,15,16,12,194,255,248,163,232,244,157,252, - 242,15,17,4,202,139,3,15,182,204,15,182,232,72,131,195,4,193,232,16,65,252, - 255,36,252,238,255,252,233,244,163,255,72,137,213,232,251,1,30,15,182,75, - 252,253,72,137,252,234,252,242,15,17,4,202,139,3,15,182,204,15,182,232,72, - 131,195,4,193,232,16,65,252,255,36,252,238,255,15,182,252,236,15,182,192, - 72,139,124,36,16,72,137,151,233,72,141,52,194,137,194,41,252,234,248,37,72, - 137,252,253,72,137,92,36,24,232,251,1,49,72,139,149,233,72,133,192,15,133, - 244,51,15,182,107,252,255,15,182,75,252,253,72,139,4,252,234,72,137,4,202, - 139,3,15,182,204,15,182,232,72,131,195,4,193,232,16,65,252,255,36,252,238, - 255,72,252,247,208,73,139,4,199,73,187,237,237,76,9,216,72,137,4,202,139, + 72,139,44,194,72,193,252,253,47,184,2,0,0,0,72,129,252,253,239,131,216,0, + 72,193,224,47,72,252,247,208,72,137,4,202,139,3,15,182,204,15,182,232,72, + 131,195,4,193,232,16,65,252,255,36,252,238,255,72,139,44,194,73,137,252,235, + 73,193,252,251,47,65,129,252,251,239,15,131,244,61,72,184,237,237,72,49,197, + 72,137,44,202,139,3,15,182,204,15,182,232,72,131,195,4,193,232,16,65,252, + 255,36,252,238,255,72,139,4,194,73,137,195,72,193,224,17,72,193,232,17,73, + 193,252,251,47,65,129,252,251,239,15,133,244,248,15,87,192,252,242,15,42, + 128,233,248,1,252,242,15,17,4,202,139,3,15,182,204,15,182,232,72,131,195, + 4,193,232,16,65,252,255,36,252,238,248,2,65,129,252,251,239,15,133,244,64, + 72,137,199,255,72,139,168,233,72,131,252,253,0,15,133,244,255,248,3,255,248, + 65,72,137,213,232,251,1,48,252,242,15,42,192,72,137,252,234,15,182,75,252, + 253,252,233,244,1,255,248,9,252,246,133,233,235,15,133,244,3,252,233,244, + 64,255,15,182,252,236,15,182,192,255,76,139,28,252,234,73,193,252,251,47, + 65,129,252,251,239,15,131,244,58,252,242,15,16,4,252,234,252,242,65,15,88, + 4,199,255,76,139,28,252,234,73,193,252,251,47,65,129,252,251,239,15,131,244, + 60,252,242,65,15,16,4,199,252,242,15,88,4,252,234,255,76,139,28,252,234,73, + 193,252,251,47,65,129,252,251,239,15,131,244,63,76,139,28,194,73,193,252, + 251,47,65,129,252,251,239,15,131,244,63,252,242,15,16,4,252,234,252,242,15, + 88,4,194,255,252,242,15,17,4,202,139,3,15,182,204,15,182,232,72,131,195,4, + 193,232,16,65,252,255,36,252,238,255,76,139,28,252,234,73,193,252,251,47, + 65,129,252,251,239,15,131,244,58,252,242,15,16,4,252,234,252,242,65,15,92, + 4,199,255,76,139,28,252,234,73,193,252,251,47,65,129,252,251,239,15,131,244, + 60,252,242,65,15,16,4,199,252,242,15,92,4,252,234,255,76,139,28,252,234,73, + 193,252,251,47,65,129,252,251,239,15,131,244,63,76,139,28,194,73,193,252, + 251,47,65,129,252,251,239,15,131,244,63,252,242,15,16,4,252,234,252,242,15, + 92,4,194,255,76,139,28,252,234,73,193,252,251,47,65,129,252,251,239,15,131, + 244,58,252,242,15,16,4,252,234,252,242,65,15,89,4,199,255,76,139,28,252,234, + 73,193,252,251,47,65,129,252,251,239,15,131,244,60,252,242,65,15,16,4,199, + 252,242,15,89,4,252,234,255,76,139,28,252,234,73,193,252,251,47,65,129,252, + 251,239,15,131,244,63,76,139,28,194,73,193,252,251,47,65,129,252,251,239, + 15,131,244,63,252,242,15,16,4,252,234,252,242,15,89,4,194,255,76,139,28,252, + 234,73,193,252,251,47,65,129,252,251,239,15,131,244,58,252,242,15,16,4,252, + 234,252,242,65,15,94,4,199,255,76,139,28,252,234,73,193,252,251,47,65,129, + 252,251,239,15,131,244,60,252,242,65,15,16,4,199,252,242,15,94,4,252,234, + 255,76,139,28,252,234,73,193,252,251,47,65,129,252,251,239,15,131,244,63, + 76,139,28,194,73,193,252,251,47,65,129,252,251,239,15,131,244,63,252,242, + 15,16,4,252,234,252,242,15,94,4,194,255,76,139,28,252,234,73,193,252,251, + 47,65,129,252,251,239,15,131,244,58,252,242,15,16,4,252,234,252,242,65,15, + 16,12,199,255,76,139,28,252,234,73,193,252,251,47,65,129,252,251,239,15,131, + 244,60,252,242,65,15,16,4,199,252,242,15,16,12,252,234,255,76,139,28,252, + 234,73,193,252,251,47,65,129,252,251,239,15,131,244,63,76,139,28,194,73,193, + 252,251,47,65,129,252,251,239,15,131,244,63,252,242,15,16,4,252,234,252,242, + 15,16,12,194,255,248,164,232,244,158,252,242,15,17,4,202,139,3,15,182,204, + 15,182,232,72,131,195,4,193,232,16,65,252,255,36,252,238,255,252,233,244, + 164,255,72,137,213,232,251,1,30,15,182,75,252,253,72,137,252,234,252,242, + 15,17,4,202,139,3,15,182,204,15,182,232,72,131,195,4,193,232,16,65,252,255, + 36,252,238,255,15,182,252,236,15,182,192,72,139,124,36,16,72,137,151,233, + 72,141,52,194,137,194,41,252,234,248,37,72,137,252,253,72,137,92,36,24,232, + 251,1,49,72,139,149,233,72,133,192,15,133,244,51,15,182,107,252,255,15,182, + 75,252,253,72,139,4,252,234,72,137,4,202,139,3,15,182,204,15,182,232,72,131, + 195,4,193,232,16,65,252,255,36,252,238,255,72,252,247,208,73,139,4,199,73, + 187,237,237,76,9,216,72,137,4,202,139,3,15,182,204,15,182,232,72,131,195, + 4,193,232,16,65,252,255,36,252,238,255,15,191,192,252,242,15,42,192,252,242, + 15,17,4,202,139,3,15,182,204,15,182,232,72,131,195,4,193,232,16,65,252,255, + 36,252,238,255,252,242,65,15,16,4,199,252,242,15,17,4,202,139,3,15,182,204, + 15,182,232,72,131,195,4,193,232,16,65,252,255,36,252,238,255,72,141,76,202, + 8,72,141,4,194,72,199,197,237,72,137,105,252,248,248,1,72,137,41,72,131,193, + 8,72,57,193,15,134,244,1,139,3,15,182,204,15,182,232,72,131,195,4,193,232, + 16,65,252,255,36,252,238,255,72,139,106,252,240,72,193,229,17,72,193,252, + 237,17,72,139,172,253,197,233,72,139,173,233,72,139,69,0,72,137,4,202,139, 3,15,182,204,15,182,232,72,131,195,4,193,232,16,65,252,255,36,252,238,255, - 15,191,192,252,242,15,42,192,252,242,15,17,4,202,139,3,15,182,204,15,182, - 232,72,131,195,4,193,232,16,65,252,255,36,252,238,255,252,242,65,15,16,4, - 199,252,242,15,17,4,202,139,3,15,182,204,15,182,232,72,131,195,4,193,232, - 16,65,252,255,36,252,238,255,72,141,76,202,8,72,141,4,194,72,199,197,237, - 72,137,105,252,248,248,1,72,137,41,72,131,193,8,72,57,193,15,134,244,1,139, + 72,139,106,252,240,72,193,229,17,72,193,252,237,17,72,139,172,253,205,233, + 128,189,233,0,72,139,173,233,72,139,12,194,72,137,77,0,15,132,244,247,252, + 246,133,233,235,15,133,244,248,248,1,139,3,15,182,204,15,182,232,72,131,195, + 4,193,232,16,65,252,255,36,252,238,248,2,72,137,200,72,193,252,248,47,129, + 232,239,129,252,248,239,15,134,244,1,72,193,225,17,72,193,252,233,17,252, + 246,129,233,235,15,132,244,1,255,72,137,252,238,72,137,213,73,141,190,233, + 232,251,1,50,72,137,252,234,252,233,244,1,255,72,252,247,208,72,139,106,252, + 240,72,193,229,17,72,193,252,237,17,72,139,172,253,205,233,73,139,12,199, + 72,139,133,233,73,187,237,237,73,9,203,76,137,24,252,246,133,233,235,15,133, + 244,248,248,1,139,3,15,182,204,15,182,232,72,131,195,4,193,232,16,65,252, + 255,36,252,238,248,2,252,246,129,233,235,15,132,244,1,128,189,233,0,15,132, + 244,1,72,137,213,72,137,198,73,141,190,233,232,251,1,50,72,137,252,234,252, + 233,244,1,255,72,139,106,252,240,72,193,229,17,72,193,252,237,17,252,242, + 65,15,16,4,199,72,139,172,253,205,233,72,139,141,233,252,242,15,17,1,139, 3,15,182,204,15,182,232,72,131,195,4,193,232,16,65,252,255,36,252,238,255, - 72,139,106,252,240,72,193,229,17,72,193,252,237,17,72,139,172,253,197,233, - 72,139,173,233,72,139,69,0,72,137,4,202,139,3,15,182,204,15,182,232,72,131, - 195,4,193,232,16,65,252,255,36,252,238,255,72,139,106,252,240,72,193,229, - 17,72,193,252,237,17,72,139,172,253,205,233,128,189,233,0,72,139,173,233, - 72,139,12,194,72,137,77,0,15,132,244,247,252,246,133,233,235,15,133,244,248, - 248,1,139,3,15,182,204,15,182,232,72,131,195,4,193,232,16,65,252,255,36,252, - 238,248,2,72,137,200,72,193,252,248,47,129,232,239,129,252,248,239,15,134, - 244,1,72,193,225,17,72,193,252,233,17,252,246,129,233,235,15,132,244,1,255, - 72,137,252,238,72,137,213,73,141,190,233,232,251,1,50,72,137,252,234,252, - 233,244,1,255,72,252,247,208,72,139,106,252,240,72,193,229,17,72,193,252, - 237,17,72,139,172,253,205,233,73,139,12,199,72,139,133,233,73,187,237,237, - 73,9,203,76,137,24,252,246,133,233,235,15,133,244,248,248,1,139,3,15,182, - 204,15,182,232,72,131,195,4,193,232,16,65,252,255,36,252,238,248,2,252,246, - 129,233,235,15,132,244,1,128,189,233,0,15,132,244,1,72,137,213,72,137,198, - 73,141,190,233,232,251,1,50,72,137,252,234,252,233,244,1,255,72,139,106,252, - 240,72,193,229,17,72,193,252,237,17,252,242,65,15,16,4,199,72,139,172,253, - 205,233,72,139,141,233,252,242,15,17,1,139,3,15,182,204,15,182,232,72,131, - 195,4,193,232,16,65,252,255,36,252,238,255,72,139,106,252,240,72,193,229, - 17,72,193,252,237,17,72,139,172,253,205,233,72,193,224,47,72,252,247,208, - 72,139,141,233,72,137,1,139,3,15,182,204,15,182,232,72,131,195,4,193,232, - 16,65,252,255,36,252,238,255,72,141,156,253,131,233,72,139,108,36,16,72,131, - 189,233,0,15,132,244,247,72,137,149,233,72,141,52,202,72,137,252,239,232, - 251,1,51,72,139,149,233,248,1,139,3,15,182,204,15,182,232,72,131,195,4,193, - 232,16,65,252,255,36,252,238,255,72,252,247,208,72,139,108,36,16,72,137,149, - 233,72,139,82,252,240,72,193,226,17,72,193,252,234,17,73,139,52,199,72,137, - 252,239,72,137,92,36,24,232,251,1,52,72,139,149,233,15,182,75,252,253,73, - 187,237,237,76,9,216,72,137,4,202,139,3,15,182,204,15,182,232,72,131,195, - 4,193,232,16,65,252,255,36,252,238,255,72,139,108,36,16,72,137,149,233,73, - 139,142,233,73,59,142,233,72,137,92,36,24,15,131,244,251,248,1,137,194,37, - 252,255,7,0,0,193,252,234,11,61,252,255,7,0,0,15,132,244,249,248,2,72,137, - 252,239,137,198,232,251,1,53,72,139,149,233,15,182,75,252,253,73,187,237, - 237,76,9,216,72,137,4,202,139,3,15,182,204,15,182,232,72,131,195,4,193,232, - 16,65,252,255,36,252,238,248,3,184,1,8,0,0,252,233,244,2,248,5,72,137,252, - 239,232,251,1,54,15,183,67,252,254,252,233,244,1,255,72,252,247,208,72,139, - 108,36,16,73,139,142,233,72,137,92,36,24,73,59,142,233,72,137,149,233,15, - 131,244,249,248,2,73,139,52,199,72,137,252,239,232,251,1,55,72,139,149,233, - 15,182,75,252,253,73,187,237,237,76,9,216,72,137,4,202,139,3,15,182,204,15, - 182,232,72,131,195,4,193,232,16,65,252,255,36,252,238,248,3,72,137,252,239, - 232,251,1,54,15,183,67,252,254,72,252,247,208,252,233,244,2,255,72,252,247, - 208,72,139,106,252,240,72,193,229,17,72,193,252,237,17,72,139,173,233,73, - 139,4,199,252,233,244,164,255,72,252,247,208,72,139,106,252,240,72,193,229, - 17,72,193,252,237,17,72,139,173,233,73,139,4,199,252,233,244,165,255,15,182, - 252,236,15,182,192,72,139,44,252,234,72,139,4,194,73,137,252,235,72,193,229, - 17,72,193,252,237,17,73,193,252,251,47,65,129,252,251,239,15,133,244,40,73, - 137,195,73,193,252,251,47,65,129,252,251,239,15,131,244,251,102,72,15,110, - 192,252,242,15,44,192,252,242,15,42,200,102,15,46,193,15,133,244,40,59,133, - 233,15,131,244,40,193,224,3,72,3,133,233,76,139,24,73,129,252,251,239,15, - 132,244,248,248,1,76,137,28,202,139,3,15,182,204,15,182,232,72,131,195,4, - 193,232,16,65,252,255,36,252,238,248,2,76,139,149,233,77,133,210,15,132,244, - 1,255,65,252,246,130,233,235,15,132,244,40,252,233,244,1,248,5,65,129,252, - 251,239,15,133,244,40,72,193,224,17,72,193,232,17,252,233,244,164,255,15, - 182,252,236,15,182,192,72,139,44,252,234,72,252,247,208,73,139,4,199,73,137, - 252,235,72,193,229,17,72,193,252,237,17,73,193,252,251,47,65,129,252,251, - 239,15,133,244,38,248,164,68,139,149,233,68,35,144,233,69,105,210,239,76, - 3,149,233,73,187,237,237,73,9,195,248,1,77,57,154,233,15,133,244,250,77,139, - 154,233,73,129,252,251,239,15,132,244,251,248,2,255,76,137,28,202,139,3,15, - 182,204,15,182,232,72,131,195,4,193,232,16,65,252,255,36,252,238,248,4,77, - 139,146,233,77,133,210,15,133,244,1,73,199,195,237,248,5,76,139,149,233,77, - 133,210,15,132,244,2,65,252,246,130,233,235,15,133,244,2,252,233,244,38,255, - 15,182,252,236,15,182,192,72,139,44,252,234,73,137,252,235,72,193,229,17, - 72,193,252,237,17,73,193,252,251,47,65,129,252,251,239,15,133,244,39,59,133, - 233,15,131,244,39,193,224,3,72,3,133,233,76,139,24,73,129,252,251,239,15, - 132,244,248,248,1,76,137,28,202,139,3,15,182,204,15,182,232,72,131,195,4, - 193,232,16,65,252,255,36,252,238,248,2,76,139,149,233,77,133,210,15,132,244, - 1,65,252,246,130,233,235,15,132,244,39,255,15,182,252,236,15,182,192,72,139, - 44,252,234,72,193,229,17,72,193,252,237,17,252,242,15,44,4,194,59,133,233, - 15,131,244,41,193,224,3,72,3,133,233,248,42,76,139,24,248,43,76,137,28,202, + 72,139,106,252,240,72,193,229,17,72,193,252,237,17,72,139,172,253,205,233, + 72,193,224,47,72,252,247,208,72,139,141,233,72,137,1,139,3,15,182,204,15, + 182,232,72,131,195,4,193,232,16,65,252,255,36,252,238,255,72,141,156,253, + 131,233,72,139,108,36,16,72,131,189,233,0,15,132,244,247,72,137,149,233,72, + 141,52,202,72,137,252,239,232,251,1,51,72,139,149,233,248,1,139,3,15,182, + 204,15,182,232,72,131,195,4,193,232,16,65,252,255,36,252,238,255,72,252,247, + 208,72,139,108,36,16,72,137,149,233,72,139,82,252,240,72,193,226,17,72,193, + 252,234,17,73,139,52,199,72,137,252,239,72,137,92,36,24,232,251,1,52,72,139, + 149,233,15,182,75,252,253,73,187,237,237,76,9,216,72,137,4,202,139,3,15,182, + 204,15,182,232,72,131,195,4,193,232,16,65,252,255,36,252,238,255,72,139,108, + 36,16,72,137,149,233,73,139,142,233,73,59,142,233,72,137,92,36,24,15,131, + 244,251,248,1,137,194,37,252,255,7,0,0,193,252,234,11,61,252,255,7,0,0,15, + 132,244,249,248,2,72,137,252,239,137,198,232,251,1,53,72,139,149,233,15,182, + 75,252,253,73,187,237,237,76,9,216,72,137,4,202,139,3,15,182,204,15,182,232, + 72,131,195,4,193,232,16,65,252,255,36,252,238,248,3,184,1,8,0,0,252,233,244, + 2,248,5,72,137,252,239,232,251,1,54,15,183,67,252,254,252,233,244,1,255,72, + 252,247,208,72,139,108,36,16,73,139,142,233,72,137,92,36,24,73,59,142,233, + 72,137,149,233,15,131,244,249,248,2,73,139,52,199,72,137,252,239,232,251, + 1,55,72,139,149,233,15,182,75,252,253,73,187,237,237,76,9,216,72,137,4,202, 139,3,15,182,204,15,182,232,72,131,195,4,193,232,16,65,252,255,36,252,238, - 255,15,182,252,236,15,182,192,72,139,44,252,234,72,139,4,194,73,137,252,235, - 72,193,229,17,72,193,252,237,17,73,193,252,251,47,65,129,252,251,239,15,133, - 244,46,73,137,195,73,193,252,251,47,65,129,252,251,239,15,131,244,251,102, - 72,15,110,192,252,242,15,44,192,252,242,15,42,200,102,15,46,193,15,133,244, - 46,59,133,233,15,131,244,46,193,224,3,72,3,133,233,72,129,56,239,15,132,244, - 249,248,1,252,246,133,233,235,15,133,244,253,248,2,255,72,139,44,202,72,137, - 40,139,3,15,182,204,15,182,232,72,131,195,4,193,232,16,65,252,255,36,252, - 238,248,3,76,139,149,233,77,133,210,15,132,244,1,65,252,246,130,233,235,15, - 132,244,46,252,233,244,1,248,5,65,129,252,251,239,15,133,244,46,72,193,224, - 17,72,193,232,17,252,233,244,165,248,7,128,165,233,235,255,77,139,150,233, - 73,137,174,233,76,137,149,233,252,233,244,2,255,15,182,252,236,15,182,192, - 72,139,44,252,234,72,252,247,208,73,139,4,199,73,137,252,235,72,193,229,17, - 72,193,252,237,17,73,193,252,251,47,65,129,252,251,239,15,133,244,44,248, - 165,68,139,149,233,68,35,144,233,69,105,210,239,198,133,233,0,76,3,149,233, - 73,187,237,237,73,9,195,248,1,77,57,154,233,15,133,244,251,73,129,58,239, - 15,132,244,250,248,2,255,252,246,133,233,235,15,133,244,253,248,3,76,139, - 28,202,77,137,26,139,3,15,182,204,15,182,232,72,131,195,4,193,232,16,65,252, - 255,36,252,238,248,4,76,139,157,233,77,133,219,15,132,244,2,65,252,246,131, - 233,235,15,132,244,44,252,233,244,2,248,5,77,139,146,233,77,133,210,15,133, - 244,1,255,76,139,149,233,77,133,210,15,132,244,252,65,252,246,130,233,235, - 15,132,244,44,248,6,76,137,28,36,72,139,124,36,16,72,137,151,233,72,141,20, - 36,72,137,252,238,72,137,92,36,24,232,251,1,56,72,139,124,36,16,72,139,151, - 233,73,137,194,15,182,75,252,253,252,233,244,2,248,7,128,165,233,235,77,139, - 158,233,73,137,174,233,76,137,157,233,252,233,244,3,255,15,182,252,236,15, - 182,192,72,139,44,252,234,73,137,252,235,72,193,229,17,72,193,252,237,17, - 73,193,252,251,47,65,129,252,251,239,15,133,244,45,59,133,233,15,131,244, - 45,193,224,3,72,3,133,233,72,129,56,239,15,132,244,249,248,1,252,246,133, - 233,235,15,133,244,253,248,2,76,139,28,202,76,137,24,139,3,15,182,204,15, - 182,232,72,131,195,4,193,232,16,65,252,255,36,252,238,248,3,76,139,149,233, - 77,133,210,15,132,244,1,255,65,252,246,130,233,235,15,132,244,45,252,233, - 244,1,248,7,128,165,233,235,77,139,150,233,73,137,174,233,76,137,149,233, - 252,233,244,2,255,15,182,252,236,15,182,192,72,139,44,252,234,72,193,229, - 17,72,193,252,237,17,252,242,15,44,4,194,252,246,133,233,235,15,133,244,253, - 248,2,59,133,233,15,131,244,48,193,224,3,72,3,133,233,248,49,76,139,28,202, - 76,137,24,139,3,15,182,204,15,182,232,72,131,195,4,193,232,16,65,252,255, - 36,252,238,248,7,128,165,233,235,77,139,150,233,73,137,174,233,76,137,149, - 233,252,233,244,2,255,248,1,69,139,20,199,72,141,12,202,72,139,105,252,248, - 72,193,229,17,72,193,252,237,17,252,246,133,233,235,15,133,244,253,248,2, - 139,4,36,131,232,1,15,132,244,250,68,1,208,59,133,233,15,135,244,251,68,41, - 208,65,193,226,3,76,3,149,233,248,3,72,139,41,72,131,193,8,73,137,42,73,131, - 194,8,131,232,1,15,133,244,3,248,4,139,3,15,182,204,15,182,232,72,131,195, - 4,193,232,16,65,252,255,36,252,238,248,5,72,139,124,36,16,72,137,151,233, - 72,137,252,238,137,194,72,137,252,253,72,137,92,36,24,232,251,1,57,72,139, - 149,233,255,15,182,75,252,253,15,183,67,252,254,252,233,244,1,248,7,128,165, - 233,235,73,139,134,233,73,137,174,233,72,137,133,233,252,233,244,2,255,3, - 4,36,255,72,139,44,202,73,137,252,235,72,193,229,17,72,193,252,237,17,73, - 193,252,251,47,65,129,252,251,239,15,133,244,66,72,141,84,202,16,72,137,90, - 252,248,72,139,157,233,139,11,15,182,252,233,15,182,205,72,131,195,4,65,252, - 255,36,252,238,255,72,141,76,202,16,73,137,215,72,139,105,252,240,73,137, - 252,235,73,193,252,251,47,65,129,252,251,239,15,133,244,30,248,67,72,139, - 90,252,248,252,247,195,237,15,133,244,253,248,1,72,137,106,252,240,137,4, - 36,131,232,1,15,132,244,249,248,2,72,139,41,72,131,193,8,73,137,47,73,131, - 199,8,131,232,1,15,133,244,2,72,139,106,252,240,248,3,72,193,229,17,72,193, - 252,237,17,139,4,36,128,189,233,1,15,135,244,251,248,4,72,139,157,233,255, - 139,11,15,182,252,233,15,182,205,72,131,195,4,65,252,255,36,252,238,248,5, - 252,247,195,237,15,133,244,4,15,182,75,252,253,72,252,247,217,76,139,124, - 202,224,73,193,231,17,73,193,252,239,17,77,139,191,233,77,139,191,233,252, - 233,244,4,248,7,72,129,252,235,239,252,247,195,237,15,133,244,254,72,41,218, - 73,137,215,72,139,90,252,248,252,233,244,1,248,8,129,195,239,252,233,244, - 1,255,72,141,76,202,16,72,139,105,224,72,139,65,232,72,137,41,72,137,65,8, - 72,139,105,216,72,137,105,252,240,184,237,73,137,252,235,72,193,229,17,72, - 193,252,237,17,73,193,252,251,47,65,129,252,251,239,15,133,244,30,72,137, - 202,72,137,90,252,248,72,139,157,233,139,11,15,182,252,233,15,182,205,72, - 131,195,4,65,252,255,36,252,238,255,72,139,108,202,252,240,72,193,229,17, - 72,193,252,237,17,139,68,202,252,248,68,139,149,233,72,131,195,4,76,139,157, - 233,248,1,68,57,208,15,131,244,251,73,129,60,253,195,239,15,132,244,250,252, - 242,15,42,192,73,139,44,195,72,137,108,202,8,252,242,15,17,4,202,131,192, - 1,137,68,202,252,248,248,2,15,183,67,252,254,72,141,156,253,131,233,248,3, - 139,3,15,182,204,15,182,232,72,131,195,4,193,232,16,65,252,255,36,252,238, - 248,4,131,192,1,252,233,244,1,248,5,68,41,208,248,6,59,133,233,15,135,244, - 3,255,68,105,216,239,76,3,157,233,73,129,187,233,239,15,132,244,253,70,141, - 84,16,1,73,139,171,233,73,139,131,233,72,137,44,202,72,137,68,202,8,68,137, - 84,202,252,248,252,233,244,2,248,7,131,192,1,252,233,244,6,255,72,139,108, - 202,232,73,137,252,235,72,193,229,17,72,193,252,237,17,73,193,252,251,47, - 65,129,252,251,239,15,133,244,251,76,139,92,202,252,240,73,193,252,251,47, - 65,129,252,251,239,15,133,244,251,72,129,124,253,202,252,248,239,15,133,244, - 251,128,189,233,235,15,133,244,251,72,141,156,253,131,233,73,186,237,237, - 76,137,84,202,252,248,248,1,139,3,15,182,204,15,182,232,72,131,195,4,193, - 232,16,65,252,255,36,252,238,248,5,198,67,252,252,235,255,72,141,156,253, - 131,233,198,3,235,252,233,244,1,255,15,182,252,236,15,182,192,76,141,148, - 253,194,233,72,141,12,202,76,43,82,252,248,72,133,252,237,15,132,244,251, - 72,141,108,252,233,252,248,73,57,210,15,131,244,248,248,1,73,139,66,252,240, - 73,131,194,8,72,137,1,72,131,193,8,72,57,252,233,15,131,244,249,73,57,210, - 15,130,244,1,248,2,72,199,1,237,72,131,193,8,72,57,252,233,15,130,244,2,248, - 3,139,3,15,182,204,15,182,232,72,131,195,4,193,232,16,65,252,255,36,252,238, - 248,5,199,4,36,1,0,0,0,72,137,208,76,41,208,15,134,244,3,137,197,193,252, - 237,3,131,197,1,137,44,36,72,139,108,36,16,72,1,200,72,59,133,233,255,15, - 135,244,253,248,6,73,139,66,252,240,73,131,194,8,72,137,1,72,131,193,8,73, - 57,210,15,130,244,6,252,233,244,3,248,7,72,137,149,233,72,137,141,233,72, - 137,92,36,24,73,41,210,68,137,84,36,4,139,52,36,131,252,238,1,72,137,252, - 239,232,251,1,0,72,139,149,233,76,99,84,36,4,72,139,141,233,73,1,210,252, - 233,244,6,255,193,225,3,255,248,1,72,139,90,252,248,137,4,36,252,247,195, - 237,15,133,244,253,255,248,14,73,137,215,131,232,1,15,132,244,249,248,2,73, - 139,44,15,73,137,111,252,240,73,131,199,8,131,232,1,15,133,244,2,248,3,139, - 4,36,15,182,107,252,255,248,5,57,197,15,135,244,252,255,72,139,44,10,72,137, - 106,252,240,255,248,5,56,67,252,255,15,135,244,252,255,15,182,75,252,253, - 72,252,247,217,72,141,84,202,252,240,76,139,122,252,240,73,193,231,17,73, - 193,252,239,17,77,139,191,233,77,139,191,233,139,3,15,182,204,15,182,232, - 72,131,195,4,193,232,16,65,252,255,36,252,238,248,6,255,73,199,71,252,240, - 237,73,131,199,8,255,72,199,68,194,232,237,255,72,131,192,1,252,233,244,5, - 248,7,72,141,171,233,252,247,197,237,15,133,244,15,72,41,252,234,255,72,1, - 252,233,255,137,221,209,252,237,129,229,239,102,65,129,172,253,46,233,238, - 15,130,244,147,255,72,141,12,202,255,76,139,25,73,193,252,251,47,65,129,252, - 251,239,15,131,244,68,76,139,89,8,73,193,252,251,47,65,129,252,251,239,15, - 131,244,68,255,76,139,89,8,73,193,252,251,47,65,129,252,251,239,15,131,244, - 160,76,139,89,16,73,193,252,251,47,65,129,252,251,239,15,131,244,160,255, - 72,139,105,16,255,73,137,252,235,73,193,252,251,47,65,129,252,251,239,15, - 131,244,68,255,252,242,15,16,1,252,242,15,16,73,8,255,252,242,15,88,65,16, - 252,242,15,17,1,72,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,15,131,244,248,72,141,156,253,131, - 233,255,72,141,156,253,131,233,15,183,67,252,254,15,131,245,255,15,130,244, - 248,72,141,156,253,131,233,255,248,2,139,3,15,182,204,15,182,232,72,131,195, - 4,193,232,16,65,252,255,36,252,238,248,3,102,15,46,193,252,233,244,1,255, - 72,141,12,202,72,139,41,72,129,252,253,239,15,132,244,247,255,72,137,105, - 252,248,252,233,245,255,72,141,156,253,131,233,72,137,105,252,248,255,73, - 139,142,233,72,139,4,193,72,139,128,233,72,139,108,36,16,73,137,150,233,73, - 137,174,233,72,131,252,236,16,76,137,100,36,16,76,137,108,36,8,252,255,224, - 255,72,141,156,253,131,233,139,3,15,182,204,15,182,232,72,131,195,4,193,232, - 16,65,252,255,36,252,238,255,137,221,209,252,237,129,229,239,102,65,129,172, - 253,46,233,238,15,130,244,149,255,76,139,187,233,72,139,108,36,16,72,141, - 12,202,72,59,141,233,15,135,244,25,15,182,139,233,57,200,15,134,244,249,248, - 2,255,15,183,67,252,254,252,233,245,255,248,3,72,199,68,194,252,248,237,131, - 192,1,57,200,15,134,244,3,252,233,244,2,255,141,44,197,237,72,141,68,194, - 8,76,139,122,252,240,72,137,104,252,248,76,137,120,252,240,72,139,108,36, - 16,72,141,12,200,72,59,141,233,15,135,244,24,72,137,209,72,137,194,15,182, - 171,233,133,252,237,15,132,244,248,72,131,193,8,248,1,72,131,193,8,72,57, - 209,15,131,244,249,76,139,121,252,240,76,137,56,72,131,192,8,72,199,65,252, - 240,237,131,252,237,1,15,133,244,1,248,2,255,76,139,187,233,139,3,15,182, - 204,15,182,232,72,131,195,4,193,232,16,65,252,255,36,252,238,255,248,3,72, - 199,0,237,72,131,192,8,131,252,237,1,15,133,244,3,252,233,244,2,255,72,139, - 106,252,240,72,193,229,17,72,193,252,237,17,76,139,189,233,72,139,108,36, - 16,72,141,68,194,252,248,72,137,149,233,72,141,136,233,72,59,141,233,72,137, - 133,233,255,72,137,252,239,255,76,137,252,254,72,137,252,239,255,15,135,244, - 23,65,199,134,233,237,255,65,252,255,215,255,65,252,255,150,233,255,72,139, - 149,233,73,137,174,233,65,199,134,233,237,72,141,12,194,72,252,247,217,72, - 3,141,233,72,139,90,252,248,252,233,244,12,255,254,0 + 248,3,72,137,252,239,232,251,1,54,15,183,67,252,254,72,252,247,208,252,233, + 244,2,255,72,252,247,208,72,139,106,252,240,72,193,229,17,72,193,252,237, + 17,72,139,173,233,73,139,4,199,252,233,244,165,255,72,252,247,208,72,139, + 106,252,240,72,193,229,17,72,193,252,237,17,72,139,173,233,73,139,4,199,252, + 233,244,166,255,15,182,252,236,15,182,192,72,139,44,252,234,72,139,4,194, + 73,137,252,235,72,193,229,17,72,193,252,237,17,73,193,252,251,47,65,129,252, + 251,239,15,133,244,40,73,137,195,73,193,252,251,47,65,129,252,251,239,15, + 131,244,251,102,72,15,110,192,252,242,15,44,192,252,242,15,42,200,102,15, + 46,193,15,133,244,40,59,133,233,15,131,244,40,193,224,3,72,3,133,233,76,139, + 24,73,129,252,251,239,15,132,244,248,248,1,76,137,28,202,139,3,15,182,204, + 15,182,232,72,131,195,4,193,232,16,65,252,255,36,252,238,248,2,76,139,149, + 233,77,133,210,15,132,244,1,255,65,252,246,130,233,235,15,132,244,40,252, + 233,244,1,248,5,65,129,252,251,239,15,133,244,40,72,193,224,17,72,193,232, + 17,252,233,244,165,255,15,182,252,236,15,182,192,72,139,44,252,234,72,252, + 247,208,73,139,4,199,73,137,252,235,72,193,229,17,72,193,252,237,17,73,193, + 252,251,47,65,129,252,251,239,15,133,244,38,248,165,68,139,149,233,68,35, + 144,233,69,105,210,239,76,3,149,233,73,187,237,237,73,9,195,248,1,77,57,154, + 233,15,133,244,250,77,139,154,233,73,129,252,251,239,15,132,244,251,248,2, + 255,76,137,28,202,139,3,15,182,204,15,182,232,72,131,195,4,193,232,16,65, + 252,255,36,252,238,248,4,77,139,146,233,77,133,210,15,133,244,1,73,199,195, + 237,248,5,76,139,149,233,77,133,210,15,132,244,2,65,252,246,130,233,235,15, + 133,244,2,252,233,244,38,255,15,182,252,236,15,182,192,72,139,44,252,234, + 73,137,252,235,72,193,229,17,72,193,252,237,17,73,193,252,251,47,65,129,252, + 251,239,15,133,244,39,59,133,233,15,131,244,39,193,224,3,72,3,133,233,76, + 139,24,73,129,252,251,239,15,132,244,248,248,1,76,137,28,202,139,3,15,182, + 204,15,182,232,72,131,195,4,193,232,16,65,252,255,36,252,238,248,2,76,139, + 149,233,77,133,210,15,132,244,1,65,252,246,130,233,235,15,132,244,39,255, + 15,182,252,236,15,182,192,72,139,44,252,234,72,193,229,17,72,193,252,237, + 17,252,242,15,44,4,194,59,133,233,15,131,244,41,193,224,3,72,3,133,233,248, + 42,76,139,24,248,43,76,137,28,202,139,3,15,182,204,15,182,232,72,131,195, + 4,193,232,16,65,252,255,36,252,238,255,15,182,252,236,15,182,192,72,139,44, + 252,234,72,139,4,194,73,137,252,235,72,193,229,17,72,193,252,237,17,73,193, + 252,251,47,65,129,252,251,239,15,133,244,46,73,137,195,73,193,252,251,47, + 65,129,252,251,239,15,131,244,251,102,72,15,110,192,252,242,15,44,192,252, + 242,15,42,200,102,15,46,193,15,133,244,46,59,133,233,15,131,244,46,193,224, + 3,72,3,133,233,72,129,56,239,15,132,244,249,248,1,252,246,133,233,235,15, + 133,244,253,248,2,255,72,139,44,202,72,137,40,139,3,15,182,204,15,182,232, + 72,131,195,4,193,232,16,65,252,255,36,252,238,248,3,76,139,149,233,77,133, + 210,15,132,244,1,65,252,246,130,233,235,15,132,244,46,252,233,244,1,248,5, + 65,129,252,251,239,15,133,244,46,72,193,224,17,72,193,232,17,252,233,244, + 166,248,7,128,165,233,235,255,77,139,150,233,73,137,174,233,76,137,149,233, + 252,233,244,2,255,15,182,252,236,15,182,192,72,139,44,252,234,72,252,247, + 208,73,139,4,199,73,137,252,235,72,193,229,17,72,193,252,237,17,73,193,252, + 251,47,65,129,252,251,239,15,133,244,44,248,166,68,139,149,233,68,35,144, + 233,69,105,210,239,198,133,233,0,76,3,149,233,73,187,237,237,73,9,195,248, + 1,77,57,154,233,15,133,244,251,73,129,58,239,15,132,244,250,248,2,255,252, + 246,133,233,235,15,133,244,253,248,3,76,139,28,202,77,137,26,139,3,15,182, + 204,15,182,232,72,131,195,4,193,232,16,65,252,255,36,252,238,248,4,76,139, + 157,233,77,133,219,15,132,244,2,65,252,246,131,233,235,15,132,244,44,252, + 233,244,2,248,5,77,139,146,233,77,133,210,15,133,244,1,255,76,139,149,233, + 77,133,210,15,132,244,252,65,252,246,130,233,235,15,132,244,44,248,6,76,137, + 28,36,72,139,124,36,16,72,137,151,233,72,141,20,36,72,137,252,238,72,137, + 92,36,24,232,251,1,56,72,139,124,36,16,72,139,151,233,73,137,194,15,182,75, + 252,253,252,233,244,2,248,7,128,165,233,235,77,139,158,233,73,137,174,233, + 76,137,157,233,252,233,244,3,255,15,182,252,236,15,182,192,72,139,44,252, + 234,73,137,252,235,72,193,229,17,72,193,252,237,17,73,193,252,251,47,65,129, + 252,251,239,15,133,244,45,59,133,233,15,131,244,45,193,224,3,72,3,133,233, + 72,129,56,239,15,132,244,249,248,1,252,246,133,233,235,15,133,244,253,248, + 2,76,139,28,202,76,137,24,139,3,15,182,204,15,182,232,72,131,195,4,193,232, + 16,65,252,255,36,252,238,248,3,76,139,149,233,77,133,210,15,132,244,1,255, + 65,252,246,130,233,235,15,132,244,45,252,233,244,1,248,7,128,165,233,235, + 77,139,150,233,73,137,174,233,76,137,149,233,252,233,244,2,255,15,182,252, + 236,15,182,192,72,139,44,252,234,72,193,229,17,72,193,252,237,17,252,242, + 15,44,4,194,252,246,133,233,235,15,133,244,253,248,2,59,133,233,15,131,244, + 48,193,224,3,72,3,133,233,248,49,76,139,28,202,76,137,24,139,3,15,182,204, + 15,182,232,72,131,195,4,193,232,16,65,252,255,36,252,238,248,7,128,165,233, + 235,77,139,150,233,73,137,174,233,76,137,149,233,252,233,244,2,255,248,1, + 69,139,20,199,72,141,12,202,72,139,105,252,248,72,193,229,17,72,193,252,237, + 17,252,246,133,233,235,15,133,244,253,248,2,139,4,36,131,232,1,15,132,244, + 250,68,1,208,59,133,233,15,135,244,251,68,41,208,65,193,226,3,76,3,149,233, + 248,3,72,139,41,72,131,193,8,73,137,42,73,131,194,8,131,232,1,15,133,244, + 3,248,4,139,3,15,182,204,15,182,232,72,131,195,4,193,232,16,65,252,255,36, + 252,238,248,5,72,139,124,36,16,72,137,151,233,72,137,252,238,137,194,72,137, + 252,253,72,137,92,36,24,232,251,1,57,72,139,149,233,255,15,182,75,252,253, + 15,183,67,252,254,252,233,244,1,248,7,128,165,233,235,73,139,134,233,73,137, + 174,233,72,137,133,233,252,233,244,2,255,3,4,36,255,72,139,44,202,73,137, + 252,235,72,193,229,17,72,193,252,237,17,73,193,252,251,47,65,129,252,251, + 239,15,133,244,66,72,141,84,202,16,72,137,90,252,248,72,139,157,233,139,11, + 15,182,252,233,15,182,205,72,131,195,4,65,252,255,36,252,238,255,72,141,76, + 202,16,73,137,215,72,139,105,252,240,73,137,252,235,73,193,252,251,47,65, + 129,252,251,239,15,133,244,30,248,67,72,139,90,252,248,252,247,195,237,15, + 133,244,253,248,1,72,137,106,252,240,137,4,36,131,232,1,15,132,244,249,248, + 2,72,139,41,72,131,193,8,73,137,47,73,131,199,8,131,232,1,15,133,244,2,72, + 139,106,252,240,248,3,72,193,229,17,72,193,252,237,17,139,4,36,128,189,233, + 1,15,135,244,251,248,4,72,139,157,233,255,139,11,15,182,252,233,15,182,205, + 72,131,195,4,65,252,255,36,252,238,248,5,252,247,195,237,15,133,244,4,15, + 182,75,252,253,72,252,247,217,76,139,124,202,224,73,193,231,17,73,193,252, + 239,17,77,139,191,233,77,139,191,233,252,233,244,4,248,7,72,129,252,235,239, + 252,247,195,237,15,133,244,254,72,41,218,73,137,215,72,139,90,252,248,252, + 233,244,1,248,8,129,195,239,252,233,244,1,255,72,141,76,202,16,72,139,105, + 224,72,139,65,232,72,137,41,72,137,65,8,72,139,105,216,72,137,105,252,240, + 184,237,73,137,252,235,72,193,229,17,72,193,252,237,17,73,193,252,251,47, + 65,129,252,251,239,15,133,244,30,72,137,202,72,137,90,252,248,72,139,157, + 233,139,11,15,182,252,233,15,182,205,72,131,195,4,65,252,255,36,252,238,255, + 72,139,108,202,252,240,72,193,229,17,72,193,252,237,17,139,68,202,252,248, + 68,139,149,233,72,131,195,4,76,139,157,233,248,1,68,57,208,15,131,244,251, + 73,129,60,253,195,239,15,132,244,250,252,242,15,42,192,73,139,44,195,72,137, + 108,202,8,252,242,15,17,4,202,131,192,1,137,68,202,252,248,248,2,15,183,67, + 252,254,72,141,156,253,131,233,248,3,139,3,15,182,204,15,182,232,72,131,195, + 4,193,232,16,65,252,255,36,252,238,248,4,131,192,1,252,233,244,1,248,5,68, + 41,208,248,6,59,133,233,15,135,244,3,255,68,105,216,239,76,3,157,233,73,129, + 187,233,239,15,132,244,253,70,141,84,16,1,73,139,171,233,73,139,131,233,72, + 137,44,202,72,137,68,202,8,68,137,84,202,252,248,252,233,244,2,248,7,131, + 192,1,252,233,244,6,255,72,139,108,202,232,73,137,252,235,72,193,229,17,72, + 193,252,237,17,73,193,252,251,47,65,129,252,251,239,15,133,244,251,76,139, + 92,202,252,240,73,193,252,251,47,65,129,252,251,239,15,133,244,251,72,129, + 124,253,202,252,248,239,15,133,244,251,128,189,233,235,15,133,244,251,72, + 141,156,253,131,233,73,186,237,237,76,137,84,202,252,248,248,1,139,3,15,182, + 204,15,182,232,72,131,195,4,193,232,16,65,252,255,36,252,238,248,5,198,67, + 252,252,235,255,72,141,156,253,131,233,198,3,235,252,233,244,1,255,15,182, + 252,236,15,182,192,76,141,148,253,194,233,72,141,12,202,76,43,82,252,248, + 72,133,252,237,15,132,244,251,72,141,108,252,233,252,248,73,57,210,15,131, + 244,248,248,1,73,139,66,252,240,73,131,194,8,72,137,1,72,131,193,8,72,57, + 252,233,15,131,244,249,73,57,210,15,130,244,1,248,2,72,199,1,237,72,131,193, + 8,72,57,252,233,15,130,244,2,248,3,139,3,15,182,204,15,182,232,72,131,195, + 4,193,232,16,65,252,255,36,252,238,248,5,199,4,36,1,0,0,0,72,137,208,76,41, + 208,15,134,244,3,137,197,193,252,237,3,131,197,1,137,44,36,72,139,108,36, + 16,72,1,200,72,59,133,233,255,15,135,244,253,248,6,73,139,66,252,240,73,131, + 194,8,72,137,1,72,131,193,8,73,57,210,15,130,244,6,252,233,244,3,248,7,72, + 137,149,233,72,137,141,233,72,137,92,36,24,73,41,210,68,137,84,36,4,139,52, + 36,131,252,238,1,72,137,252,239,232,251,1,0,72,139,149,233,76,99,84,36,4, + 72,139,141,233,73,1,210,252,233,244,6,255,193,225,3,255,248,1,72,139,90,252, + 248,137,4,36,252,247,195,237,15,133,244,253,255,248,14,73,137,215,131,232, + 1,15,132,244,249,248,2,73,139,44,15,73,137,111,252,240,73,131,199,8,131,232, + 1,15,133,244,2,248,3,139,4,36,15,182,107,252,255,248,5,57,197,15,135,244, + 252,255,72,139,44,10,72,137,106,252,240,255,248,5,56,67,252,255,15,135,244, + 252,255,15,182,75,252,253,72,252,247,217,72,141,84,202,252,240,76,139,122, + 252,240,73,193,231,17,73,193,252,239,17,77,139,191,233,77,139,191,233,139, + 3,15,182,204,15,182,232,72,131,195,4,193,232,16,65,252,255,36,252,238,248, + 6,255,73,199,71,252,240,237,73,131,199,8,255,72,199,68,194,232,237,255,72, + 131,192,1,252,233,244,5,248,7,72,141,171,233,252,247,197,237,15,133,244,15, + 72,41,252,234,255,72,1,252,233,255,137,221,209,252,237,129,229,239,102,65, + 129,172,253,46,233,238,15,130,244,147,255,72,141,12,202,255,76,139,25,73, + 193,252,251,47,65,129,252,251,239,15,131,244,68,76,139,89,8,73,193,252,251, + 47,65,129,252,251,239,15,131,244,68,255,76,139,89,8,73,193,252,251,47,65, + 129,252,251,239,15,131,244,161,76,139,89,16,73,193,252,251,47,65,129,252, + 251,239,15,131,244,161,255,72,139,105,16,255,73,137,252,235,73,193,252,251, + 47,65,129,252,251,239,15,131,244,68,255,252,242,15,16,1,252,242,15,16,73, + 8,255,252,242,15,88,65,16,252,242,15,17,1,72,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,15,131,244, + 248,72,141,156,253,131,233,255,72,141,156,253,131,233,15,183,67,252,254,15, + 131,245,255,15,130,244,248,72,141,156,253,131,233,255,248,2,139,3,15,182, + 204,15,182,232,72,131,195,4,193,232,16,65,252,255,36,252,238,248,3,102,15, + 46,193,252,233,244,1,255,72,141,12,202,72,139,41,72,129,252,253,239,15,132, + 244,247,255,72,137,105,252,248,252,233,245,255,72,141,156,253,131,233,72, + 137,105,252,248,255,73,139,142,233,72,139,4,193,72,139,128,233,72,139,108, + 36,16,73,137,150,233,73,137,174,233,72,131,252,236,16,76,137,100,36,16,76, + 137,108,36,8,252,255,224,255,72,141,156,253,131,233,139,3,15,182,204,15,182, + 232,72,131,195,4,193,232,16,65,252,255,36,252,238,255,137,221,209,252,237, + 129,229,239,102,65,129,172,253,46,233,238,15,130,244,149,255,76,139,187,233, + 72,139,108,36,16,72,141,12,202,72,59,141,233,15,135,244,25,15,182,139,233, + 57,200,15,134,244,249,248,2,255,15,183,67,252,254,252,233,245,255,248,3,72, + 199,68,194,252,248,237,131,192,1,57,200,15,134,244,3,252,233,244,2,255,141, + 44,197,237,72,141,68,194,8,76,139,122,252,240,72,137,104,252,248,76,137,120, + 252,240,72,139,108,36,16,72,141,12,200,72,59,141,233,15,135,244,24,72,137, + 209,72,137,194,15,182,171,233,133,252,237,15,132,244,248,72,131,193,8,248, + 1,72,131,193,8,72,57,209,15,131,244,249,76,139,121,252,240,76,137,56,72,131, + 192,8,72,199,65,252,240,237,131,252,237,1,15,133,244,1,248,2,255,76,139,187, + 233,139,3,15,182,204,15,182,232,72,131,195,4,193,232,16,65,252,255,36,252, + 238,255,248,3,72,199,0,237,72,131,192,8,131,252,237,1,15,133,244,3,252,233, + 244,2,255,72,139,106,252,240,72,193,229,17,72,193,252,237,17,76,139,189,233, + 72,139,108,36,16,72,141,68,194,252,248,72,137,149,233,72,141,136,233,72,59, + 141,233,72,137,133,233,255,72,137,252,239,255,76,137,252,254,72,137,252,239, + 255,15,135,244,23,65,199,134,233,237,255,65,252,255,215,255,65,252,255,150, + 233,255,72,139,149,233,73,137,174,233,65,199,134,233,237,72,141,12,194,72, + 252,247,217,72,3,141,233,72,139,90,252,248,252,233,244,12,255,254,0 }; #line 9 "vm_x64.dasc" @@ -931,6 +930,7 @@ enum { GLOB_cont_stitch, GLOB_vm_exit_handler, GLOB_vm_exit_interp, + GLOB_vm_exit_interp_notrack, GLOB_vm_floor, GLOB_vm_ceil, GLOB_vm_trunc, @@ -1092,6 +1092,7 @@ static const char *const globnames[] = { "cont_stitch", "vm_exit_handler", "vm_exit_interp", + "vm_exit_interp_notrack", "vm_floor", "vm_ceil", "vm_trunc", @@ -3389,16 +3390,15 @@ static void build_subroutines(BuildCtx *ctx) //| mov PC, [RA+CFRAME_OFS_PC] // Get SAVE_PC. //| jmp >1 //|->vm_exit_interp: + //| // Record which trace exited to the interpreter. + //| mov TMPRd, dword [DISPATCH+DISPATCH_GL(vmstate)] + dasm_put(Dst, 8391, DISPATCH_GL(vmstate), ~LJ_VMST_EXIT, DISPATCH_J(exitno), DISPATCH_J(parent), DISPATCH_GL(lasttrace), 16*8, DISPATCH_GL(cur_L), DISPATCH_GL(jit_base), DISPATCH_J(L), Dt1(->base), GG_DISP2J, DISPATCH_GL(jit_base), Dt1(->cframe), CFRAME_RAWMASK, CFRAME_OFS_L, Dt1(->base), CFRAME_OFS_PC); +#line 2051 "vm_x64.dasc" + //| mov dword [DISPATCH+DISPATCH_GL(lasttrace)], TMPRd + //|->vm_exit_interp_notrack: //| // RD = MULTRES or negated error code, BASE, PC and DISPATCH set. //| // Restore additional callee-save registers only used in compiled code. //| lea RA, [rsp+16] - dasm_put(Dst, 8391, DISPATCH_GL(vmstate), ~LJ_VMST_EXIT, DISPATCH_J(exitno), DISPATCH_J(parent), DISPATCH_GL(lasttrace), 16*8, DISPATCH_GL(cur_L), DISPATCH_GL(jit_base), DISPATCH_J(L), Dt1(->base), GG_DISP2J, DISPATCH_GL(jit_base), Dt1(->cframe), CFRAME_RAWMASK, CFRAME_OFS_L, Dt1(->base), CFRAME_OFS_PC); -#line 2052 "vm_x64.dasc" - //| // Record which trace exited to the interpreter (if called from a trace) - //| mov TMPRd, dword [DISPATCH+DISPATCH_GL(vmstate)] - //| cmp TMPRd, 1 - //| jb >1 - //| mov dword [DISPATCH+DISPATCH_GL(lasttrace)], TMPRd //|1: //| mov r13, [RA-8] //| mov r12, [RA] @@ -3427,7 +3427,7 @@ static void build_subroutines(BuildCtx *ctx) //|2: //| mov RCd, MULTRES // RC/RD holds nres+1. dasm_put(Dst, 8585, DISPATCH_GL(vmstate), DISPATCH_GL(lasttrace), Dt7(->pc), PC2PROTO(k), Dt1(->base), DISPATCH_GL(jit_base), DISPATCH_GL(vmstate), DISPATCH_GL(vmstate), ~LJ_VMST_INTERP, BC_FUNCF, BC_FUNCC+2); -#line 2084 "vm_x64.dasc" +#line 2083 "vm_x64.dasc" //|3: //| jmp aword [DISPATCH+OP*8] //| @@ -3495,12 +3495,12 @@ static void build_subroutines(BuildCtx *ctx) //|.endmacro //| //| vm_round vm_floor, 0, 1 - dasm_put(Dst, 8711, FRAME_TYPE, Dt7(->pc), PC2PROTO(k), (unsigned int)(U64x(7fffffff,ffffffff)), (unsigned int)((U64x(7fffffff,ffffffff))>>32), (unsigned int)(U64x(43300000,00000000)), (unsigned int)((U64x(43300000,00000000))>>32), (unsigned int)(U64x(3ff00000,00000000)), (unsigned int)((U64x(3ff00000,00000000))>>32)); -#line 2151 "vm_x64.dasc" + dasm_put(Dst, 8704, FRAME_TYPE, Dt7(->pc), PC2PROTO(k), (unsigned int)(U64x(7fffffff,ffffffff)), (unsigned int)((U64x(7fffffff,ffffffff))>>32), (unsigned int)(U64x(43300000,00000000)), (unsigned int)((U64x(43300000,00000000))>>32), (unsigned int)(U64x(3ff00000,00000000)), (unsigned int)((U64x(3ff00000,00000000))>>32)); +#line 2150 "vm_x64.dasc" //| vm_round vm_ceil, 1, JIT //| vm_round vm_trunc, 2, JIT - dasm_put(Dst, 8847, (unsigned int)(U64x(7fffffff,ffffffff)), (unsigned int)((U64x(7fffffff,ffffffff))>>32), (unsigned int)(U64x(43300000,00000000)), (unsigned int)((U64x(43300000,00000000))>>32), (unsigned int)(U64x(bff00000,00000000)), (unsigned int)((U64x(bff00000,00000000))>>32), (unsigned int)(U64x(7fffffff,ffffffff)), (unsigned int)((U64x(7fffffff,ffffffff))>>32), (unsigned int)(U64x(43300000,00000000)), (unsigned int)((U64x(43300000,00000000))>>32)); -#line 2153 "vm_x64.dasc" + dasm_put(Dst, 8840, (unsigned int)(U64x(7fffffff,ffffffff)), (unsigned int)((U64x(7fffffff,ffffffff))>>32), (unsigned int)(U64x(43300000,00000000)), (unsigned int)((U64x(43300000,00000000))>>32), (unsigned int)(U64x(bff00000,00000000)), (unsigned int)((U64x(bff00000,00000000))>>32), (unsigned int)(U64x(7fffffff,ffffffff)), (unsigned int)((U64x(7fffffff,ffffffff))>>32), (unsigned int)(U64x(43300000,00000000)), (unsigned int)((U64x(43300000,00000000))>>32)); +#line 2152 "vm_x64.dasc" //| //|// FP modulo x%y. Called by BC_MOD* and vm_arith. //|->vm_mod: @@ -3539,8 +3539,8 @@ static void build_subroutines(BuildCtx *ctx) //|1: // Handle leading zeros. //| test eax, 1; jnz >2 //| mulsd xmm0, xmm0 - dasm_put(Dst, 8996, (unsigned int)(U64x(3ff00000,00000000)), (unsigned int)((U64x(3ff00000,00000000))>>32), (unsigned int)(U64x(7fffffff,ffffffff)), (unsigned int)((U64x(7fffffff,ffffffff))>>32), (unsigned int)(U64x(43300000,00000000)), (unsigned int)((U64x(43300000,00000000))>>32), (unsigned int)(U64x(3ff00000,00000000)), (unsigned int)((U64x(3ff00000,00000000))>>32)); -#line 2191 "vm_x64.dasc" + dasm_put(Dst, 8989, (unsigned int)(U64x(3ff00000,00000000)), (unsigned int)((U64x(3ff00000,00000000))>>32), (unsigned int)(U64x(7fffffff,ffffffff)), (unsigned int)((U64x(7fffffff,ffffffff))>>32), (unsigned int)(U64x(43300000,00000000)), (unsigned int)((U64x(43300000,00000000))>>32), (unsigned int)(U64x(3ff00000,00000000)), (unsigned int)((U64x(3ff00000,00000000))>>32)); +#line 2190 "vm_x64.dasc" //| shr eax, 1 //| jmp <1 //|2: @@ -3560,8 +3560,8 @@ static void build_subroutines(BuildCtx *ctx) //| je <5 // x^1 ==> x //| jb >7 // x^0 ==> 1 //| neg eax - dasm_put(Dst, 9184); -#line 2210 "vm_x64.dasc" + dasm_put(Dst, 9177); +#line 2209 "vm_x64.dasc" //| call <1 //| sseconst_1 xmm1, RD //| divsd xmm1, xmm0 @@ -3593,12 +3593,12 @@ static void build_subroutines(BuildCtx *ctx) //|//----------------------------------------------------------------------- //| //|->assert_bad_for_arg_type: - dasm_put(Dst, 9253, (unsigned int)(U64x(3ff00000,00000000)), (unsigned int)((U64x(3ff00000,00000000))>>32), (unsigned int)(U64x(3ff00000,00000000)), (unsigned int)((U64x(3ff00000,00000000))>>32)); -#line 2241 "vm_x64.dasc" + dasm_put(Dst, 9246, (unsigned int)(U64x(3ff00000,00000000)), (unsigned int)((U64x(3ff00000,00000000))>>32), (unsigned int)(U64x(3ff00000,00000000)), (unsigned int)((U64x(3ff00000,00000000))>>32)); +#line 2240 "vm_x64.dasc" #ifdef LUA_USE_ASSERT //| int3 - dasm_put(Dst, 9315); -#line 2243 "vm_x64.dasc" + dasm_put(Dst, 9308); +#line 2242 "vm_x64.dasc" #endif //| int3 //| @@ -3610,7 +3610,7 @@ static void build_subroutines(BuildCtx *ctx) //|->vm_ffi_callback: //|.type CTSTATE, CTState, PC #define DtF(_V) (int)(ptrdiff_t)&(((CTState *)0)_V) -#line 2253 "vm_x64.dasc" +#line 2252 "vm_x64.dasc" //| saveregs_ // ebp/rbp already saved. ebp now holds global_State *. //| lea DISPATCH, [ebp+GG_G2DISP] //| mov CTSTATE, GL:ebp->ctype_state @@ -3632,8 +3632,8 @@ static void build_subroutines(BuildCtx *ctx) //| movsd qword CTSTATE->cb.fpr[6], xmm6 //| movsd qword CTSTATE->cb.fpr[7], xmm7 //| mov CTSTATE->cb.stack, rax - dasm_put(Dst, 9317, GG_G2DISP, Dt2(->ctype_state), DtF(->cb.slot), DtF(->cb.gpr[0]), DtF(->cb.gpr[1]), DtF(->cb.gpr[2]), DtF(->cb.gpr[3]), DtF(->cb.fpr[0]), DtF(->cb.fpr[1]), DtF(->cb.fpr[2]), DtF(->cb.fpr[3]), CFRAME_SIZE, DtF(->cb.gpr[4]), DtF(->cb.gpr[5]), DtF(->cb.fpr[4]), DtF(->cb.fpr[5]), DtF(->cb.fpr[6]), DtF(->cb.fpr[7])); -#line 2274 "vm_x64.dasc" + dasm_put(Dst, 9310, GG_G2DISP, Dt2(->ctype_state), DtF(->cb.slot), DtF(->cb.gpr[0]), DtF(->cb.gpr[1]), DtF(->cb.gpr[2]), DtF(->cb.gpr[3]), DtF(->cb.fpr[0]), DtF(->cb.fpr[1]), DtF(->cb.fpr[2]), DtF(->cb.fpr[3]), CFRAME_SIZE, DtF(->cb.gpr[4]), DtF(->cb.gpr[5]), DtF(->cb.fpr[4]), DtF(->cb.fpr[5]), DtF(->cb.fpr[6]), DtF(->cb.fpr[7])); +#line 2273 "vm_x64.dasc" //| mov CARG2, rsp //| mov SAVE_PC, CTSTATE // Any value outside of bytecode is ok. //| mov CARG1, CTSTATE @@ -3666,7 +3666,7 @@ static void build_subroutines(BuildCtx *ctx) //| // Caveat: needs special frame unwinding, see below. //| .type CCSTATE, CCallState, rbx #define Dt10(_V) (int)(ptrdiff_t)&(((CCallState *)0)_V) -#line 2305 "vm_x64.dasc" +#line 2304 "vm_x64.dasc" //| push rbp; mov rbp, rsp; push rbx; mov CCSTATE, CARG1 //| //| // Readjust stack. @@ -3679,8 +3679,8 @@ static void build_subroutines(BuildCtx *ctx) //| js >2 //|1: //| mov rax, [CCSTATE+rcx*8+offsetof(CCallState, stack)] - dasm_put(Dst, 9427, DtF(->cb.stack), DISPATCH_GL(vmstate), ~LJ_VMST_INTERP, Dt1(->base), Dt1(->top), Dt7(->pc), DISPATCH_GL(ctype_state), DtF(->L), Dt1(->base), Dt1(->top), DtF(->cb.gpr[0]), DtF(->cb.fpr[0]), Dt10(->spadj), Dt10(->nsp)); -#line 2317 "vm_x64.dasc" + dasm_put(Dst, 9420, DtF(->cb.stack), DISPATCH_GL(vmstate), ~LJ_VMST_INTERP, Dt1(->base), Dt1(->top), Dt7(->pc), DISPATCH_GL(ctype_state), DtF(->L), Dt1(->base), Dt1(->top), DtF(->cb.gpr[0]), DtF(->cb.fpr[0]), Dt10(->spadj), Dt10(->nsp)); +#line 2316 "vm_x64.dasc" //| mov [rsp+rcx*8+CCALL_SPS_EXTRA*8], rax //| sub ecx, 1 //| jns <1 @@ -3700,8 +3700,8 @@ static void build_subroutines(BuildCtx *ctx) //| movaps xmm3, CCSTATE->fpr[3] //| cmp eax, 4; jbe >5 //| movaps xmm4, CCSTATE->fpr[4] - dasm_put(Dst, 9586, offsetof(CCallState, stack), CCALL_SPS_EXTRA*8, Dt10(->nfpr), Dt10(->gpr[0]), Dt10(->gpr[1]), Dt10(->gpr[2]), Dt10(->gpr[3]), Dt10(->gpr[4]), Dt10(->gpr[5]), Dt10(->fpr[0]), Dt10(->fpr[1]), Dt10(->fpr[2]), Dt10(->fpr[3])); -#line 2336 "vm_x64.dasc" + dasm_put(Dst, 9579, offsetof(CCallState, stack), CCALL_SPS_EXTRA*8, Dt10(->nfpr), Dt10(->gpr[0]), Dt10(->gpr[1]), Dt10(->gpr[2]), Dt10(->gpr[3]), Dt10(->gpr[4]), Dt10(->gpr[5]), Dt10(->fpr[0]), Dt10(->fpr[1]), Dt10(->fpr[2]), Dt10(->fpr[3])); +#line 2335 "vm_x64.dasc" //| movaps xmm5, CCSTATE->fpr[5] //| movaps xmm6, CCSTATE->fpr[6] //| movaps xmm7, CCSTATE->fpr[7] @@ -3718,8 +3718,8 @@ static void build_subroutines(BuildCtx *ctx) //|// Note: vm_ffi_call must be the last function in this object file! //| //|//----------------------------------------------------------------------- - dasm_put(Dst, 9667, Dt10(->fpr[4]), Dt10(->fpr[5]), Dt10(->fpr[6]), Dt10(->fpr[7]), Dt10(->func), Dt10(->gpr[0]), Dt10(->fpr[0]), Dt10(->gpr[1]), Dt10(->fpr[1])); -#line 2352 "vm_x64.dasc" + dasm_put(Dst, 9660, Dt10(->fpr[4]), Dt10(->fpr[5]), Dt10(->fpr[6]), Dt10(->fpr[7]), Dt10(->func), Dt10(->gpr[0]), Dt10(->fpr[0]), Dt10(->gpr[1]), Dt10(->fpr[1])); +#line 2351 "vm_x64.dasc" } /* Generate the code for a single instruction. */ @@ -3728,8 +3728,8 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop) int vk = 0; //|// Note: aligning all instructions does not pay off. //|=>defop: - dasm_put(Dst, 9713, defop); -#line 2360 "vm_x64.dasc" + dasm_put(Dst, 9706, defop); +#line 2359 "vm_x64.dasc" switch (op) { @@ -3776,29 +3776,29 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop) //| // Unordered: all of ZF CF PF set, ordered: PF clear. //| // To preserve NaN semantics GE/GT branch on unordered, but LT/LE don't. //| jmp_comp jbe, ja, jb, jae, >1 - dasm_put(Dst, 9715, LJ_TISNUM, LJ_TISNUM); + dasm_put(Dst, 9708, LJ_TISNUM, LJ_TISNUM); switch (op) { case BC_ISLT: - dasm_put(Dst, 8991); + dasm_put(Dst, 8984); break; case BC_ISGE: - dasm_put(Dst, 9781); + dasm_put(Dst, 9774); break; case BC_ISLE: dasm_put(Dst, 2946); break; case BC_ISGT: - dasm_put(Dst, 9786); + dasm_put(Dst, 9779); break; default: break; /* Shut up GCC. */ } -#line 2406 "vm_x64.dasc" +#line 2405 "vm_x64.dasc" //| movzx RDd, PC_RD //| branchPC RD //|1: //| ins_next - dasm_put(Dst, 9791, -BCBIAS_J*4); -#line 2410 "vm_x64.dasc" + dasm_put(Dst, 9784, -BCBIAS_J*4); +#line 2409 "vm_x64.dasc" break; case BC_ISEQV: case BC_ISNEV: @@ -3819,19 +3819,19 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop) //|2: //| ucomisd xmm0, xmm1 //|4: - dasm_put(Dst, 9826, LJ_TISNUM, LJ_TISNUM); -#line 2430 "vm_x64.dasc" + dasm_put(Dst, 9819, LJ_TISNUM, LJ_TISNUM); +#line 2429 "vm_x64.dasc" iseqne_fp: if (vk) { //| jp >2 // Unordered means not equal. //| jne >2 - dasm_put(Dst, 9892); -#line 2434 "vm_x64.dasc" + dasm_put(Dst, 9885); +#line 2433 "vm_x64.dasc" } else { //| jp >2 // Unordered means not equal. //| je >1 - dasm_put(Dst, 9901); -#line 2437 "vm_x64.dasc" + dasm_put(Dst, 9894); +#line 2436 "vm_x64.dasc" } iseqne_end: if (vk) { @@ -3839,20 +3839,20 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop) //| movzx RDd, PC_RD //| branchPC RD //|2: // NE: Fallthrough to next instruction. - dasm_put(Dst, 9910, -BCBIAS_J*4); -#line 2444 "vm_x64.dasc" + dasm_put(Dst, 9903, -BCBIAS_J*4); +#line 2443 "vm_x64.dasc" } else { //|2: // NE: Branch to the target. //| movzx RDd, PC_RD //| branchPC RD //|1: // EQ: Fallthrough to next instruction. - dasm_put(Dst, 9926, -BCBIAS_J*4); -#line 2449 "vm_x64.dasc" + dasm_put(Dst, 9919, -BCBIAS_J*4); +#line 2448 "vm_x64.dasc" } //| ins_next //| - dasm_put(Dst, 9804); -#line 2452 "vm_x64.dasc" + dasm_put(Dst, 9797); +#line 2451 "vm_x64.dasc" if (op == BC_ISEQV || op == BC_ISNEV) { //|5: // Either or both types are not numbers. //| cmp RBd, LJ_TCDATA; je ->vmeta_equal_cd @@ -3872,28 +3872,28 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop) //| jz <2 // No metatable? //| test byte TAB:RB->nomm, 1<metatable), Dt6(->nomm), 1<metatable), Dt6(->nomm), 1<vmeta_equal // Handle __eq metamethod. - dasm_put(Dst, 10025); -#line 2477 "vm_x64.dasc" + dasm_put(Dst, 10018); +#line 2476 "vm_x64.dasc" } else { //|3: //| cmp ITYPEd, LJ_TCDATA //| jne <2 //| jmp ->vmeta_equal_cd - dasm_put(Dst, 10030, LJ_TCDATA); -#line 2482 "vm_x64.dasc" + dasm_put(Dst, 10023, LJ_TCDATA); +#line 2481 "vm_x64.dasc" } break; case BC_ISEQS: case BC_ISNES: @@ -3903,17 +3903,17 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop) //| add PC, 4 //| checkstr RB, >3 //| cmp RB, [KBASE+RD*8] - dasm_put(Dst, 10046, LJ_TSTR); -#line 2491 "vm_x64.dasc" + dasm_put(Dst, 10039, LJ_TSTR); +#line 2490 "vm_x64.dasc" iseqne_test: if (vk) { //| jne >2 - dasm_put(Dst, 9179); -#line 2494 "vm_x64.dasc" + dasm_put(Dst, 9172); +#line 2493 "vm_x64.dasc" } else { //| je >1 dasm_put(Dst, 4107); -#line 2496 "vm_x64.dasc" +#line 2495 "vm_x64.dasc" } goto iseqne_end; case BC_ISEQN: case BC_ISNEN: @@ -3927,8 +3927,8 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop) //|2: //| ucomisd xmm0, qword [BASE+RA*8] //|4: - dasm_put(Dst, 10090, LJ_TISNUM); -#line 2509 "vm_x64.dasc" + dasm_put(Dst, 10083, LJ_TISNUM); +#line 2508 "vm_x64.dasc" goto iseqne_fp; case BC_ISEQP: case BC_ISNEP: vk = op == BC_ISEQP; @@ -3937,8 +3937,8 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop) //| sar RB, 47 //| add PC, 4 //| cmp RBd, RDd - dasm_put(Dst, 10135); -#line 2517 "vm_x64.dasc" + dasm_put(Dst, 10128); +#line 2516 "vm_x64.dasc" if (!LJ_HASFFI) goto iseqne_test; if (vk) { //| jne >3 @@ -3949,8 +3949,8 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop) //|3: //| cmp RBd, LJ_TCDATA; jne <2 //| jmp ->vmeta_equal_cd - dasm_put(Dst, 10155, -BCBIAS_J*4, LJ_TCDATA); -#line 2527 "vm_x64.dasc" + dasm_put(Dst, 10148, -BCBIAS_J*4, LJ_TCDATA); +#line 2526 "vm_x64.dasc" } else { //| je >2 //| cmp RBd, LJ_TCDATA; je ->vmeta_equal_cd @@ -3958,8 +3958,8 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop) //| branchPC RD //|2: //| ins_next - dasm_put(Dst, 10208, LJ_TCDATA, -BCBIAS_J*4); -#line 2534 "vm_x64.dasc" + dasm_put(Dst, 10201, LJ_TCDATA, -BCBIAS_J*4); +#line 2533 "vm_x64.dasc" } break; @@ -3969,37 +3969,37 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop) //| ins_AD // RA = dst or unused, RD = src, JMP with RD = target //| mov ITYPE, [BASE+RD*8] //| add PC, 4 - dasm_put(Dst, 10255); -#line 2543 "vm_x64.dasc" + dasm_put(Dst, 10248); +#line 2542 "vm_x64.dasc" if (op == BC_ISTC || op == BC_ISFC) { //| mov RB, ITYPE - dasm_put(Dst, 10264); -#line 2545 "vm_x64.dasc" + dasm_put(Dst, 10257); +#line 2544 "vm_x64.dasc" } //| sar ITYPE, 47 //| cmp ITYPEd, LJ_TISTRUECOND dasm_put(Dst, 4503, LJ_TISTRUECOND); -#line 2548 "vm_x64.dasc" +#line 2547 "vm_x64.dasc" if (op == BC_IST || op == BC_ISTC) { //| jae >1 - dasm_put(Dst, 9786); -#line 2550 "vm_x64.dasc" + dasm_put(Dst, 9779); +#line 2549 "vm_x64.dasc" } else { //| jb >1 dasm_put(Dst, 2946); -#line 2552 "vm_x64.dasc" +#line 2551 "vm_x64.dasc" } if (op == BC_ISTC || op == BC_ISFC) { //| mov [BASE+RA*8], RB - dasm_put(Dst, 10268); -#line 2555 "vm_x64.dasc" + dasm_put(Dst, 10261); +#line 2554 "vm_x64.dasc" } //| movzx RDd, PC_RD //| branchPC RD //|1: // Fallthrough to the next instruction. //| ins_next - dasm_put(Dst, 9791, -BCBIAS_J*4); -#line 2560 "vm_x64.dasc" + dasm_put(Dst, 9784, -BCBIAS_J*4); +#line 2559 "vm_x64.dasc" break; case BC_ISTYPE: @@ -4009,15 +4009,15 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop) //| add RBd, RDd //| jne ->vmeta_istype //| ins_next - dasm_put(Dst, 10273); -#line 2569 "vm_x64.dasc" + dasm_put(Dst, 10266); +#line 2568 "vm_x64.dasc" break; case BC_ISNUM: //| ins_AD // RA = src, RD = -(TISNUM-1) //| checknumtp [BASE+RA*8], ->vmeta_istype //| ins_next - dasm_put(Dst, 10310, LJ_TISNUM); -#line 2574 "vm_x64.dasc" + dasm_put(Dst, 10303, LJ_TISNUM); +#line 2573 "vm_x64.dasc" break; /* -- Unary ops --------------------------------------------------------- */ @@ -4027,8 +4027,8 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop) //| mov RB, [BASE+RD*8] //| mov [BASE+RA*8], RB //| ins_next_ - dasm_put(Dst, 10350); -#line 2583 "vm_x64.dasc" + dasm_put(Dst, 10343); +#line 2582 "vm_x64.dasc" break; case BC_NOT: //| ins_AD // RA = dst, RD = src @@ -4041,8 +4041,8 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop) //| not RC //| mov [BASE+RA*8], RC //| ins_next - dasm_put(Dst, 10380, LJ_TISTRUECOND); -#line 2595 "vm_x64.dasc" + dasm_put(Dst, 10373, LJ_TISTRUECOND); +#line 2594 "vm_x64.dasc" break; case BC_UNM: //| ins_AD // RA = dst, RD = src @@ -4052,8 +4052,8 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop) //| xor RB, RD //| mov [BASE+RA*8], RB //| ins_next - dasm_put(Dst, 10436, LJ_TISNUM, (unsigned int)(U64x(80000000,00000000)), (unsigned int)((U64x(80000000,00000000))>>32)); -#line 2604 "vm_x64.dasc" + dasm_put(Dst, 10429, LJ_TISNUM, (unsigned int)(U64x(80000000,00000000)), (unsigned int)((U64x(80000000,00000000))>>32)); +#line 2603 "vm_x64.dasc" break; case BC_LEN: //| ins_AD // RA = dst, RD = src @@ -4067,15 +4067,15 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop) //|2: //| cmp ITYPEd, LJ_TTAB; jne ->vmeta_len //| mov TAB:CARG1, TAB:RD - dasm_put(Dst, 10491, LJ_TSTR, Dt5(->len), LJ_TTAB); -#line 2617 "vm_x64.dasc" + dasm_put(Dst, 10484, LJ_TSTR, Dt5(->len), LJ_TTAB); +#line 2616 "vm_x64.dasc" #if LJ_52 //| mov TAB:RB, TAB:RD->metatable //| cmp TAB:RB, 0 //| jnz >9 //|3: - dasm_put(Dst, 10573, Dt6(->metatable)); -#line 2622 "vm_x64.dasc" + dasm_put(Dst, 10566, Dt6(->metatable)); +#line 2621 "vm_x64.dasc" #endif //|->BC_LEN_Z: //| mov RB, BASE // Save BASE. @@ -4085,15 +4085,15 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop) //| mov BASE, RB // Restore BASE. //| movzx RAd, PC_RA //| jmp <1 - dasm_put(Dst, 10589); -#line 2631 "vm_x64.dasc" + dasm_put(Dst, 10582); +#line 2630 "vm_x64.dasc" #if LJ_52 //|9: // Check for __len. //| test byte TAB:RB->nomm, 1<vmeta_len // 'no __len' flag NOT set: check. - dasm_put(Dst, 10617, Dt6(->nomm), 1<nomm), 1<BC_MODVN_Z: //| call ->vm_mod //| ins_arithpost //| ins_next - dasm_put(Dst, 11264); -#line 2733 "vm_x64.dasc" + dasm_put(Dst, 11257); +#line 2732 "vm_x64.dasc" break; case BC_MODNV: case BC_MODVV: //| ins_arithpre movsd, xmm1 - dasm_put(Dst, 10633); + dasm_put(Dst, 10626); vk = ((int)op - BC_ADDVN) / (BC_ADDNV-BC_ADDVN); switch (vk) { case 0: - dasm_put(Dst, 11145, LJ_TISNUM); + dasm_put(Dst, 11138, LJ_TISNUM); break; case 1: - dasm_put(Dst, 11179, LJ_TISNUM); + dasm_put(Dst, 11172, LJ_TISNUM); break; default: - dasm_put(Dst, 11213, LJ_TISNUM, LJ_TISNUM); + dasm_put(Dst, 11206, LJ_TISNUM, LJ_TISNUM); break; } -#line 2736 "vm_x64.dasc" +#line 2735 "vm_x64.dasc" //| jmp ->BC_MODVN_Z // Avoid 3 copies. It's slow anyway. - dasm_put(Dst, 11297); -#line 2737 "vm_x64.dasc" + dasm_put(Dst, 11290); +#line 2736 "vm_x64.dasc" break; case BC_POW: //| ins_arithpre movsd, xmm1 - dasm_put(Dst, 10633); + dasm_put(Dst, 10626); vk = ((int)op - BC_ADDVN) / (BC_ADDNV-BC_ADDVN); switch (vk) { case 0: - dasm_put(Dst, 11145, LJ_TISNUM); + dasm_put(Dst, 11138, LJ_TISNUM); break; case 1: - dasm_put(Dst, 11179, LJ_TISNUM); + dasm_put(Dst, 11172, LJ_TISNUM); break; default: - dasm_put(Dst, 11213, LJ_TISNUM, LJ_TISNUM); + dasm_put(Dst, 11206, LJ_TISNUM, LJ_TISNUM); break; } -#line 2740 "vm_x64.dasc" +#line 2739 "vm_x64.dasc" //| mov RB, BASE //| call extern pow //| movzx RAd, PC_RA //| mov BASE, RB //| ins_arithpost //| ins_next - dasm_put(Dst, 11302); -#line 2746 "vm_x64.dasc" + dasm_put(Dst, 11295); +#line 2745 "vm_x64.dasc" break; case BC_CAT: @@ -4334,8 +4334,8 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop) //| mov RC, [BASE+RB*8] //| mov [BASE+RA*8], RC //| ins_next - dasm_put(Dst, 11346, Dt1(->base), Dt1(->base)); -#line 2768 "vm_x64.dasc" + dasm_put(Dst, 11339, Dt1(->base), Dt1(->base)); +#line 2767 "vm_x64.dasc" break; /* -- Constant ops ------------------------------------------------------ */ @@ -4346,8 +4346,8 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop) //| settp RD, LJ_TSTR //| mov [BASE+RA*8], RD //| ins_next - dasm_put(Dst, 11438, (unsigned int)(((uint64_t)LJ_TSTR<<47)), (unsigned int)((((uint64_t)LJ_TSTR<<47))>>32)); -#line 2778 "vm_x64.dasc" + dasm_put(Dst, 11431, (unsigned int)(((uint64_t)LJ_TSTR<<47)), (unsigned int)((((uint64_t)LJ_TSTR<<47))>>32)); +#line 2777 "vm_x64.dasc" break; case BC_KCDATA: //| ins_AND // RA = dst, RD = cdata const (~) @@ -4355,8 +4355,8 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop) //| settp RD, LJ_TCDATA //| mov [BASE+RA*8], RD //| ins_next - dasm_put(Dst, 11438, (unsigned int)(((uint64_t)LJ_TCDATA<<47)), (unsigned int)((((uint64_t)LJ_TCDATA<<47))>>32)); -#line 2785 "vm_x64.dasc" + dasm_put(Dst, 11431, (unsigned int)(((uint64_t)LJ_TCDATA<<47)), (unsigned int)((((uint64_t)LJ_TCDATA<<47))>>32)); +#line 2784 "vm_x64.dasc" break; case BC_KSHORT: //| ins_AD // RA = dst, RD = signed int16 literal @@ -4364,16 +4364,16 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop) //| cvtsi2sd xmm0, RDd //| movsd qword [BASE+RA*8], xmm0 //| ins_next - dasm_put(Dst, 11479); -#line 2792 "vm_x64.dasc" + dasm_put(Dst, 11472); +#line 2791 "vm_x64.dasc" break; case BC_KNUM: //| ins_AD // RA = dst, RD = num const //| movsd xmm0, qword [KBASE+RD*8] //| movsd qword [BASE+RA*8], xmm0 //| ins_next - dasm_put(Dst, 11515); -#line 2798 "vm_x64.dasc" + dasm_put(Dst, 11508); +#line 2797 "vm_x64.dasc" break; case BC_KPRI: //| ins_AD // RA = dst, RD = primitive type (~) @@ -4381,8 +4381,8 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop) //| not RD //| mov [BASE+RA*8], RD //| ins_next - dasm_put(Dst, 10402); -#line 2805 "vm_x64.dasc" + dasm_put(Dst, 10395); +#line 2804 "vm_x64.dasc" break; case BC_KNIL: //| ins_AD // RA = dst_start, RD = dst_end @@ -4396,8 +4396,8 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop) //| cmp RA, RD //| jbe <1 //| ins_next - dasm_put(Dst, 11550, LJ_TNIL); -#line 2818 "vm_x64.dasc" + dasm_put(Dst, 11543, LJ_TNIL); +#line 2817 "vm_x64.dasc" break; /* -- Upvalue and function ops ------------------------------------------ */ @@ -4411,8 +4411,8 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop) //| mov RD, [RB] //| mov [BASE+RA*8], RD //| ins_next - dasm_put(Dst, 11606, offsetof(GCfuncL, uvptr), DtA(->v)); -#line 2831 "vm_x64.dasc" + dasm_put(Dst, 11599, offsetof(GCfuncL, uvptr), DtA(->v)); +#line 2830 "vm_x64.dasc" break; case BC_USETV: #define TV2MARKOFS \ @@ -4443,15 +4443,15 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop) //| jz <1 //| // Crossed a write barrier. Move the barrier forward. //| mov CARG2, RB - dasm_put(Dst, 11660, offsetof(GCfuncL, uvptr), DtA(->closed), DtA(->v), TV2MARKOFS, LJ_GC_BLACK, LJ_TISGCV, LJ_TNUMX - LJ_TISGCV, Dt4(->gch.marked), LJ_GC_WHITES); -#line 2861 "vm_x64.dasc" + dasm_put(Dst, 11653, offsetof(GCfuncL, uvptr), DtA(->closed), DtA(->v), TV2MARKOFS, LJ_GC_BLACK, LJ_TISGCV, LJ_TNUMX - LJ_TISGCV, Dt4(->gch.marked), LJ_GC_WHITES); +#line 2860 "vm_x64.dasc" //| mov RB, BASE // Save BASE. //| lea GL:CARG1, [DISPATCH+GG_DISP2G] //| call extern lj_gc_barrieruv // (global_State *g, TValue *tv) //| mov BASE, RB // Restore BASE. //| jmp <1 - dasm_put(Dst, 11772, GG_DISP2G); -#line 2866 "vm_x64.dasc" + dasm_put(Dst, 11765, GG_DISP2G); +#line 2865 "vm_x64.dasc" break; #undef TV2MARKOFS case BC_USETS: @@ -4480,8 +4480,8 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop) //| call extern lj_gc_barrieruv // (global_State *g, TValue *tv) //| mov BASE, RB // Restore BASE. //| jmp <1 - dasm_put(Dst, 11796, offsetof(GCfuncL, uvptr), DtA(->v), (unsigned int)(((uint64_t)LJ_TSTR<<47)), (unsigned int)((((uint64_t)LJ_TSTR<<47))>>32), DtA(->marked), LJ_GC_BLACK, Dt4(->gch.marked), LJ_GC_WHITES, DtA(->closed), GG_DISP2G); -#line 2894 "vm_x64.dasc" + dasm_put(Dst, 11789, offsetof(GCfuncL, uvptr), DtA(->v), (unsigned int)(((uint64_t)LJ_TSTR<<47)), (unsigned int)((((uint64_t)LJ_TSTR<<47))>>32), DtA(->marked), LJ_GC_BLACK, Dt4(->gch.marked), LJ_GC_WHITES, DtA(->closed), GG_DISP2G); +#line 2893 "vm_x64.dasc" break; case BC_USETN: //| ins_AD // RA = upvalue #, RD = num const @@ -4492,8 +4492,8 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop) //| mov RA, UPVAL:RB->v //| movsd qword [RA], xmm0 //| ins_next - dasm_put(Dst, 11912, offsetof(GCfuncL, uvptr), DtA(->v)); -#line 2904 "vm_x64.dasc" + dasm_put(Dst, 11905, offsetof(GCfuncL, uvptr), DtA(->v)); +#line 2903 "vm_x64.dasc" break; case BC_USETP: //| ins_AD // RA = upvalue #, RD = primitive type (~) @@ -4505,8 +4505,8 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop) //| mov RA, UPVAL:RB->v //| mov [RA], RD //| ins_next - dasm_put(Dst, 11970, offsetof(GCfuncL, uvptr), DtA(->v)); -#line 2915 "vm_x64.dasc" + dasm_put(Dst, 11963, offsetof(GCfuncL, uvptr), DtA(->v)); +#line 2914 "vm_x64.dasc" break; case BC_UCLO: //| ins_AD // RA = level, RD = target @@ -4521,8 +4521,8 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop) //| mov BASE, L:RB->base //|1: //| ins_next - dasm_put(Dst, 12027, -BCBIAS_J*4, Dt1(->openupval), Dt1(->base), Dt1(->base)); -#line 2929 "vm_x64.dasc" + dasm_put(Dst, 12020, -BCBIAS_J*4, Dt1(->openupval), Dt1(->base), Dt1(->base)); +#line 2928 "vm_x64.dasc" break; case BC_FNEW: @@ -4542,8 +4542,8 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop) //| settp LFUNC:RC, LJ_TFUNC //| mov [BASE+RA*8], LFUNC:RC //| ins_next - dasm_put(Dst, 12091, Dt1(->base), Dt1(->base), (unsigned int)(((uint64_t)LJ_TFUNC<<47)), (unsigned int)((((uint64_t)LJ_TFUNC<<47))>>32)); -#line 2948 "vm_x64.dasc" + dasm_put(Dst, 12084, Dt1(->base), Dt1(->base), (unsigned int)(((uint64_t)LJ_TFUNC<<47)), (unsigned int)((((uint64_t)LJ_TFUNC<<47))>>32)); +#line 2947 "vm_x64.dasc" break; /* -- Table ops --------------------------------------------------------- */ @@ -4580,8 +4580,8 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop) //| call extern lj_gc_step_fixtop // (lua_State *L) //| movzx RDd, PC_RD //| jmp <1 - dasm_put(Dst, 12177, Dt1(->base), DISPATCH_GL(gc.total), DISPATCH_GL(gc.threshold), Dt1(->base), (unsigned int)(((uint64_t)LJ_TTAB<<47)), (unsigned int)((((uint64_t)LJ_TTAB<<47))>>32)); -#line 2984 "vm_x64.dasc" + dasm_put(Dst, 12170, Dt1(->base), DISPATCH_GL(gc.total), DISPATCH_GL(gc.threshold), Dt1(->base), (unsigned int)(((uint64_t)LJ_TTAB<<47)), (unsigned int)((((uint64_t)LJ_TTAB<<47))>>32)); +#line 2983 "vm_x64.dasc" break; case BC_TDUP: //| ins_AND // RA = dst, RD = table const (~) (holding template table) @@ -4607,8 +4607,8 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop) //| movzx RDd, PC_RD // Need to reload RD. //| not RD //| jmp <2 - dasm_put(Dst, 12311, DISPATCH_GL(gc.total), DISPATCH_GL(gc.threshold), Dt1(->base), Dt1(->base), (unsigned int)(((uint64_t)LJ_TTAB<<47)), (unsigned int)((((uint64_t)LJ_TTAB<<47))>>32)); -#line 3009 "vm_x64.dasc" + dasm_put(Dst, 12304, DISPATCH_GL(gc.total), DISPATCH_GL(gc.threshold), Dt1(->base), Dt1(->base), (unsigned int)(((uint64_t)LJ_TTAB<<47)), (unsigned int)((((uint64_t)LJ_TTAB<<47))>>32)); +#line 3008 "vm_x64.dasc" break; case BC_GGET: @@ -4618,8 +4618,8 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop) //| mov TAB:RB, LFUNC:RB->env //| mov STR:RC, [KBASE+RD*8] //| jmp ->BC_TGETS_Z - dasm_put(Dst, 12420, Dt7(->env)); -#line 3018 "vm_x64.dasc" + dasm_put(Dst, 12413, Dt7(->env)); +#line 3017 "vm_x64.dasc" break; case BC_GSET: //| ins_AND // RA = src, RD = str const (~) @@ -4628,8 +4628,8 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop) //| mov TAB:RB, LFUNC:RB->env //| mov STR:RC, [KBASE+RD*8] //| jmp ->BC_TSETS_Z - dasm_put(Dst, 12451, Dt7(->env)); -#line 3026 "vm_x64.dasc" + dasm_put(Dst, 12444, Dt7(->env)); +#line 3025 "vm_x64.dasc" break; case BC_TGETV: @@ -4663,8 +4663,8 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop) //| test TAB:TMPR, TAB:TMPR //| jz <1 //| test byte TAB:TMPR->nomm, 1<asize), Dt6(->array), LJ_TNIL, Dt6(->metatable)); -#line 3059 "vm_x64.dasc" + dasm_put(Dst, 12475, LJ_TTAB, LJ_TISNUM, Dt6(->asize), Dt6(->array), LJ_TNIL, Dt6(->metatable)); +#line 3058 "vm_x64.dasc" //| jz ->vmeta_tgetv // 'no __index' flag NOT set: check. //| jmp <1 //| @@ -4672,8 +4672,8 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop) //| cmp ITYPEd, LJ_TSTR; jne ->vmeta_tgetv //| cleartp STR:RC //| jmp ->BC_TGETS_Z - dasm_put(Dst, 12632, Dt6(->nomm), 1<nomm), 1<5 // Key found, but nil value? //|2: //| mov [BASE+RA*8], ITYPE - dasm_put(Dst, 12670, LJ_TTAB, Dt6(->hmask), Dt5(->hash), sizeof(Node), Dt6(->node), (unsigned int)(((uint64_t)LJ_TSTR<<47)), (unsigned int)((((uint64_t)LJ_TSTR<<47))>>32), DtB(->key), DtB(->val), LJ_TNIL); -#line 3088 "vm_x64.dasc" + dasm_put(Dst, 12663, LJ_TTAB, Dt6(->hmask), Dt5(->hash), sizeof(Node), Dt6(->node), (unsigned int)(((uint64_t)LJ_TSTR<<47)), (unsigned int)((((uint64_t)LJ_TSTR<<47))>>32), DtB(->key), DtB(->val), LJ_TNIL); +#line 3087 "vm_x64.dasc" //| ins_next //| //|4: // Follow hash chain. @@ -4714,8 +4714,8 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop) //| test byte TAB:TMPR->nomm, 1<vmeta_tgets // Caveat: preserve STR:RC. - dasm_put(Dst, 12768, DtB(->next), LJ_TNIL, Dt6(->metatable), Dt6(->nomm), 1<next), LJ_TNIL, Dt6(->metatable), Dt6(->nomm), 1<nomm, 1<vmeta_tgetb // 'no __index' flag NOT set: check. //| jmp <1 - dasm_put(Dst, 12838, LJ_TTAB, Dt6(->asize), Dt6(->array), LJ_TNIL, Dt6(->metatable), Dt6(->nomm), 1<asize), Dt6(->array), LJ_TNIL, Dt6(->metatable), Dt6(->nomm), 1<BC_TGETR2_Z: //| mov [BASE+RA*8], ITYPE //| ins_next - dasm_put(Dst, 12954, Dt6(->asize), Dt6(->array)); -#line 3144 "vm_x64.dasc" + dasm_put(Dst, 12947, Dt6(->asize), Dt6(->array)); +#line 3143 "vm_x64.dasc" break; case BC_TSETV: @@ -4788,8 +4788,8 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop) //| jnz >7 //|2: // Set array slot. //| mov RB, [BASE+RA*8] - dasm_put(Dst, 13028, LJ_TTAB, LJ_TISNUM, Dt6(->asize), Dt6(->array), LJ_TNIL, Dt6(->marked), LJ_GC_BLACK); -#line 3171 "vm_x64.dasc" + dasm_put(Dst, 13021, LJ_TTAB, LJ_TISNUM, Dt6(->asize), Dt6(->array), LJ_TNIL, Dt6(->marked), LJ_GC_BLACK); +#line 3170 "vm_x64.dasc" //| mov [RC], RB //| ins_next //| @@ -4808,11 +4808,11 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop) //| //|7: // Possible table write barrier for the value. Skip valiswhite check. //| barrierback TAB:RB, TMPR - dasm_put(Dst, 13147, Dt6(->metatable), Dt6(->nomm), 1<marked), (uint8_t)~LJ_GC_BLACK); -#line 3189 "vm_x64.dasc" + dasm_put(Dst, 13140, Dt6(->metatable), Dt6(->nomm), 1<marked), (uint8_t)~LJ_GC_BLACK); +#line 3188 "vm_x64.dasc" //| jmp <2 - dasm_put(Dst, 13232, DISPATCH_GL(gc.grayagain), DISPATCH_GL(gc.grayagain), Dt6(->gclist)); -#line 3190 "vm_x64.dasc" + dasm_put(Dst, 13225, DISPATCH_GL(gc.grayagain), DISPATCH_GL(gc.grayagain), Dt6(->gclist)); +#line 3189 "vm_x64.dasc" break; case BC_TSETS: //| ins_ABC // RA = src, RB = table, RC = str const (~) @@ -4835,8 +4835,8 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop) //| je >4 // Previous value is nil? //|2: //| test byte TAB:RB->marked, LJ_GC_BLACK // isblack(table) - dasm_put(Dst, 13249, LJ_TTAB, Dt6(->hmask), Dt5(->hash), sizeof(Node), Dt6(->nomm), Dt6(->node), (unsigned int)(((uint64_t)LJ_TSTR<<47)), (unsigned int)((((uint64_t)LJ_TSTR<<47))>>32), DtB(->key), LJ_TNIL); -#line 3212 "vm_x64.dasc" + dasm_put(Dst, 13242, LJ_TTAB, Dt6(->hmask), Dt5(->hash), sizeof(Node), Dt6(->nomm), Dt6(->node), (unsigned int)(((uint64_t)LJ_TSTR<<47)), (unsigned int)((((uint64_t)LJ_TSTR<<47))>>32), DtB(->key), LJ_TNIL); +#line 3211 "vm_x64.dasc" //| jnz >7 //|3: // Set node value. //| mov ITYPE, [BASE+RA*8] @@ -4859,8 +4859,8 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop) //| //| // But check for __newindex first. //| mov TAB:TMPR, TAB:RB->metatable - dasm_put(Dst, 13346, Dt6(->marked), LJ_GC_BLACK, Dt6(->metatable), Dt6(->nomm), 1<next)); -#line 3234 "vm_x64.dasc" + dasm_put(Dst, 13339, Dt6(->marked), LJ_GC_BLACK, Dt6(->metatable), Dt6(->nomm), 1<next)); +#line 3233 "vm_x64.dasc" //| test TAB:TMPR, TAB:TMPR //| jz >6 // No metatable: continue. //| test byte TAB:TMPR->nomm, 1<metatable), Dt6(->nomm), 1<base), Dt1(->base), Dt6(->marked), (uint8_t)~LJ_GC_BLACK, DISPATCH_GL(gc.grayagain), DISPATCH_GL(gc.grayagain), Dt6(->gclist)); -#line 3256 "vm_x64.dasc" + dasm_put(Dst, 13419, Dt6(->metatable), Dt6(->nomm), 1<base), Dt1(->base), Dt6(->marked), (uint8_t)~LJ_GC_BLACK, DISPATCH_GL(gc.grayagain), DISPATCH_GL(gc.grayagain), Dt6(->gclist)); +#line 3255 "vm_x64.dasc" break; case BC_TSETB: //| ins_ABC // RA = src, RB = table, RC = byte literal @@ -4909,16 +4909,16 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop) //| test TAB:TMPR, TAB:TMPR //| jz <1 //| test byte TAB:TMPR->nomm, 1<asize), Dt6(->array), LJ_TNIL, Dt6(->marked), LJ_GC_BLACK, Dt6(->metatable)); -#line 3280 "vm_x64.dasc" + dasm_put(Dst, 13516, LJ_TTAB, Dt6(->asize), Dt6(->array), LJ_TNIL, Dt6(->marked), LJ_GC_BLACK, Dt6(->metatable)); +#line 3279 "vm_x64.dasc" //| jz ->vmeta_tsetb // 'no __newindex' flag NOT set: check. //| jmp <1 //| //|7: // Possible table write barrier for the value. Skip valiswhite check. //| barrierback TAB:RB, TMPR //| jmp <2 - dasm_put(Dst, 13639, Dt6(->nomm), 1<marked), (uint8_t)~LJ_GC_BLACK, DISPATCH_GL(gc.grayagain), DISPATCH_GL(gc.grayagain), Dt6(->gclist)); -#line 3286 "vm_x64.dasc" + dasm_put(Dst, 13632, Dt6(->nomm), 1<marked), (uint8_t)~LJ_GC_BLACK, DISPATCH_GL(gc.grayagain), DISPATCH_GL(gc.grayagain), Dt6(->gclist)); +#line 3285 "vm_x64.dasc" break; case BC_TSETR: //| ins_ABC // RA = src, RB = table, RC = key @@ -4941,8 +4941,8 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop) //|7: // Possible table write barrier for the value. Skip valiswhite check. //| barrierback TAB:RB, TMPR //| jmp <2 - dasm_put(Dst, 13676, Dt6(->marked), LJ_GC_BLACK, Dt6(->asize), Dt6(->array), Dt6(->marked), (uint8_t)~LJ_GC_BLACK, DISPATCH_GL(gc.grayagain), DISPATCH_GL(gc.grayagain), Dt6(->gclist)); -#line 3308 "vm_x64.dasc" + dasm_put(Dst, 13669, Dt6(->marked), LJ_GC_BLACK, Dt6(->asize), Dt6(->array), Dt6(->marked), (uint8_t)~LJ_GC_BLACK, DISPATCH_GL(gc.grayagain), DISPATCH_GL(gc.grayagain), Dt6(->gclist)); +#line 3307 "vm_x64.dasc" break; case BC_TSETM: @@ -4984,43 +4984,43 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop) //| call extern lj_tab_reasize // (lua_State *L, GCtab *t, int nasize) //| mov BASE, L:RB->base //| movzx RAd, PC_RA // Restore RA. - dasm_put(Dst, 13781, Dt6(->marked), LJ_GC_BLACK, Dt6(->asize), Dt6(->array), Dt1(->base), Dt1(->base)); -#line 3349 "vm_x64.dasc" + dasm_put(Dst, 13774, Dt6(->marked), LJ_GC_BLACK, Dt6(->asize), Dt6(->array), Dt1(->base), Dt1(->base)); +#line 3348 "vm_x64.dasc" //| movzx RDd, PC_RD // Restore RD. //| jmp <1 // Retry. //| //|7: // Possible table write barrier for any value. Skip valiswhite check. //| barrierback TAB:RB, RD //| jmp <2 - dasm_put(Dst, 13928, Dt6(->marked), (uint8_t)~LJ_GC_BLACK, DISPATCH_GL(gc.grayagain), DISPATCH_GL(gc.grayagain), Dt6(->gclist)); -#line 3355 "vm_x64.dasc" + dasm_put(Dst, 13921, Dt6(->marked), (uint8_t)~LJ_GC_BLACK, DISPATCH_GL(gc.grayagain), DISPATCH_GL(gc.grayagain), Dt6(->gclist)); +#line 3354 "vm_x64.dasc" break; /* -- Calls and vararg handling ----------------------------------------- */ case BC_CALL: case BC_CALLM: //| ins_A_C // RA = base, (RB = nresults+1,) RC = nargs+1 | extra_nargs - dasm_put(Dst, 10637); -#line 3361 "vm_x64.dasc" + dasm_put(Dst, 10630); +#line 3360 "vm_x64.dasc" if (op == BC_CALLM) { //| add NARGS:RDd, MULTRES - dasm_put(Dst, 13965); -#line 3363 "vm_x64.dasc" + dasm_put(Dst, 13958); +#line 3362 "vm_x64.dasc" } //| mov LFUNC:RB, [BASE+RA*8] //| checkfunc LFUNC:RB, ->vmeta_call_ra //| lea BASE, [BASE+RA*8+16] //| ins_call - dasm_put(Dst, 13969, LJ_TFUNC, Dt7(->pc)); -#line 3368 "vm_x64.dasc" + dasm_put(Dst, 13962, LJ_TFUNC, Dt7(->pc)); +#line 3367 "vm_x64.dasc" break; case BC_CALLMT: //| ins_AD // RA = base, RD = extra_nargs //| add NARGS:RDd, MULTRES //| // Fall through. Assumes BC_CALLT follows and ins_AD is a no-op. - dasm_put(Dst, 13965); -#line 3374 "vm_x64.dasc" + dasm_put(Dst, 13958); +#line 3373 "vm_x64.dasc" break; case BC_CALLT: //| ins_AD // RA = base, RD = nargs+1 @@ -5053,8 +5053,8 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop) //| ja >5 //|4: //| ins_callt - dasm_put(Dst, 14034, LJ_TFUNC, FRAME_TYPE, Dt7(->ffid), Dt7(->pc)); -#line 3406 "vm_x64.dasc" + dasm_put(Dst, 14027, LJ_TFUNC, FRAME_TYPE, Dt7(->ffid), Dt7(->pc)); +#line 3405 "vm_x64.dasc" //| //|5: // Tailcall to a fast function. //| test PCd, FRAME_TYPE // Lua frame below? @@ -5078,8 +5078,8 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop) //|8: //| add PCd, FRAME_VARG //| jmp <1 - dasm_put(Dst, 14154, FRAME_TYPE, Dt7(->pc), PC2PROTO(k), FRAME_VARG, FRAME_TYPEP, FRAME_VARG); -#line 3429 "vm_x64.dasc" + dasm_put(Dst, 14147, FRAME_TYPE, Dt7(->pc), PC2PROTO(k), FRAME_VARG, FRAME_TYPEP, FRAME_VARG); +#line 3428 "vm_x64.dasc" break; case BC_ITERC: @@ -5095,8 +5095,8 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop) //| checkfunc LFUNC:RB, ->vmeta_call //| mov BASE, RA //| ins_call - dasm_put(Dst, 14258, 2+1, LJ_TFUNC, Dt7(->pc)); -#line 3444 "vm_x64.dasc" + dasm_put(Dst, 14251, 2+1, LJ_TFUNC, Dt7(->pc)); +#line 3443 "vm_x64.dasc" break; case BC_ITERN: @@ -5134,8 +5134,8 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop) //|6: //| cmp RCd, TAB:RB->hmask; ja <3 // End of iteration? Branch to ITERL+1. //| imul ITYPEd, RCd, #NODE - dasm_put(Dst, 14348, Dt6(->asize), Dt6(->array), LJ_TNIL, -BCBIAS_J*4, Dt6(->hmask)); -#line 3481 "vm_x64.dasc" + dasm_put(Dst, 14341, Dt6(->asize), Dt6(->array), LJ_TNIL, -BCBIAS_J*4, Dt6(->hmask)); +#line 3480 "vm_x64.dasc" //| add NODE:ITYPE, TAB:RB->node //| cmp aword NODE:ITYPE->val, LJ_TNIL; je >7 //| lea TMPRd, [RCd+TMPRd+1] @@ -5150,8 +5150,8 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop) //|7: // Skip holes in hash part. //| add RCd, 1 //| jmp <6 - dasm_put(Dst, 14487, sizeof(Node), Dt6(->node), DtB(->val), LJ_TNIL, DtB(->key), DtB(->val)); -#line 3495 "vm_x64.dasc" + dasm_put(Dst, 14480, sizeof(Node), Dt6(->node), DtB(->val), LJ_TNIL, DtB(->key), DtB(->val)); +#line 3494 "vm_x64.dasc" break; case BC_ISNEXT: @@ -5169,12 +5169,12 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop) //|5: // Despecialize bytecode if any of the checks fail. //| mov PC_OP, BC_JMP //| branchPC RD - dasm_put(Dst, 14546, LJ_TFUNC, LJ_TTAB, LJ_TNIL, Dt8(->ffid), FF_next_N, -BCBIAS_J*4, (unsigned int)(U64x(fffe7fff, 00000000)), (unsigned int)((U64x(fffe7fff, 00000000))>>32), BC_JMP); -#line 3512 "vm_x64.dasc" + dasm_put(Dst, 14539, LJ_TFUNC, LJ_TTAB, LJ_TNIL, Dt8(->ffid), FF_next_N, -BCBIAS_J*4, (unsigned int)(U64x(fffe7fff, 00000000)), (unsigned int)((U64x(fffe7fff, 00000000))>>32), BC_JMP); +#line 3511 "vm_x64.dasc" //| mov byte [PC], BC_ITERC //| jmp <1 - dasm_put(Dst, 14665, -BCBIAS_J*4, BC_ITERC); -#line 3514 "vm_x64.dasc" + dasm_put(Dst, 14658, -BCBIAS_J*4, BC_ITERC); +#line 3513 "vm_x64.dasc" break; case BC_VARG: @@ -5218,8 +5218,8 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop) //| add RC, RA //| cmp RC, L:RB->maxstack //| ja >7 // Need to grow stack? - dasm_put(Dst, 14679, (16+FRAME_VARG), LJ_TNIL, Dt1(->maxstack)); -#line 3557 "vm_x64.dasc" + dasm_put(Dst, 14672, (16+FRAME_VARG), LJ_TNIL, Dt1(->maxstack)); +#line 3556 "vm_x64.dasc" //|6: // Copy all vararg slots. //| mov RC, [TMPR-16] //| add TMPR, 8 @@ -5244,8 +5244,8 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop) //| mov RA, L:RB->top //| add TMPR, BASE //| jmp <6 - dasm_put(Dst, 14841, Dt1(->base), Dt1(->top), Dt1(->base), Dt1(->top)); -#line 3581 "vm_x64.dasc" + dasm_put(Dst, 14834, Dt1(->base), Dt1(->top), Dt1(->base), Dt1(->top)); +#line 3580 "vm_x64.dasc" break; /* -- Returns ----------------------------------------------------------- */ @@ -5254,24 +5254,24 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop) //| ins_AD // RA = results, RD = extra_nresults //| add RDd, MULTRES // MULTRES >=1, so RD >=1. //| // Fall through. Assumes BC_RET follows and ins_AD is a no-op. - dasm_put(Dst, 13965); -#line 3589 "vm_x64.dasc" + dasm_put(Dst, 13958); +#line 3588 "vm_x64.dasc" break; case BC_RET: case BC_RET0: case BC_RET1: //| ins_AD // RA = results, RD = nresults+1 if (op != BC_RET0) { //| shl RAd, 3 - dasm_put(Dst, 14933); -#line 3595 "vm_x64.dasc" + dasm_put(Dst, 14926); +#line 3594 "vm_x64.dasc" } //|1: //| mov PC, [BASE-8] //| mov MULTRES, RDd // Save nresults+1. //| test PCd, FRAME_TYPE // Check frame type marker. //| jnz >7 // Not returning to a fixarg Lua func? - dasm_put(Dst, 14937, FRAME_TYPE); -#line 3601 "vm_x64.dasc" + dasm_put(Dst, 14930, FRAME_TYPE); +#line 3600 "vm_x64.dasc" switch (op) { case BC_RET: //|->BC_RET_Z: @@ -5290,21 +5290,21 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop) //|5: //| cmp RBd, RDd // More results expected? //| ja >6 - dasm_put(Dst, 14956); -#line 3619 "vm_x64.dasc" + dasm_put(Dst, 14949); +#line 3618 "vm_x64.dasc" break; case BC_RET1: //| mov RB, [BASE+RA] //| mov [BASE-16], RB - dasm_put(Dst, 15009); -#line 3623 "vm_x64.dasc" + dasm_put(Dst, 15002); +#line 3622 "vm_x64.dasc" /* fallthrough */ case BC_RET0: //|5: //| cmp PC_RB, RDL // More results expected? //| ja >6 - dasm_put(Dst, 15019); -#line 3628 "vm_x64.dasc" + dasm_put(Dst, 15012); +#line 3627 "vm_x64.dasc" default: break; } @@ -5318,17 +5318,17 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop) //| ins_next //| //|6: // Fill up results with nil. - dasm_put(Dst, 15030, Dt7(->pc), PC2PROTO(k)); -#line 3641 "vm_x64.dasc" + dasm_put(Dst, 15023, Dt7(->pc), PC2PROTO(k)); +#line 3640 "vm_x64.dasc" if (op == BC_RET) { //| mov aword [KBASE-16], LJ_TNIL // Note: relies on shifted base. //| add KBASE, 8 - dasm_put(Dst, 15091, LJ_TNIL); -#line 3644 "vm_x64.dasc" + dasm_put(Dst, 15084, LJ_TNIL); +#line 3643 "vm_x64.dasc" } else { //| mov aword [BASE+RD*8-24], LJ_TNIL - dasm_put(Dst, 15102, LJ_TNIL); -#line 3646 "vm_x64.dasc" + dasm_put(Dst, 15095, LJ_TNIL); +#line 3645 "vm_x64.dasc" } //| add RD, 1 //| jmp <5 @@ -5339,16 +5339,16 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop) //| jnz ->vm_return //| // Return from vararg function: relocate BASE down and RA up. //| sub BASE, RB - dasm_put(Dst, 15109, -FRAME_VARG, FRAME_TYPEP); -#line 3656 "vm_x64.dasc" + dasm_put(Dst, 15102, -FRAME_VARG, FRAME_TYPEP); +#line 3655 "vm_x64.dasc" if (op != BC_RET0) { //| add RA, RB - dasm_put(Dst, 15136); -#line 3658 "vm_x64.dasc" + dasm_put(Dst, 15129); +#line 3657 "vm_x64.dasc" } //| jmp <1 - dasm_put(Dst, 10612); -#line 3660 "vm_x64.dasc" + dasm_put(Dst, 10605); +#line 3659 "vm_x64.dasc" break; /* -- Loops and branches ------------------------------------------------ */ @@ -5361,8 +5361,8 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop) case BC_FORL: //| hotloop RBd //| // Fall through. Assumes BC_IFORL follows and ins_AJ is a no-op. - dasm_put(Dst, 15141, HOTCOUNT_PCMASK, GG_DISP2HOT, HOTCOUNT_LOOP); -#line 3672 "vm_x64.dasc" + dasm_put(Dst, 15134, HOTCOUNT_PCMASK, GG_DISP2HOT, HOTCOUNT_LOOP); +#line 3671 "vm_x64.dasc" break; case BC_JFORI: @@ -5372,69 +5372,69 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop) vk = (op == BC_IFORL || op == BC_JFORL); //| ins_AJ // RA = base, RD = target (after end of loop or start of loop) //| lea RA, [BASE+RA*8] - dasm_put(Dst, 15162); -#line 3681 "vm_x64.dasc" + dasm_put(Dst, 15155); +#line 3680 "vm_x64.dasc" if (!vk) { //| checknumtp FOR_IDX, ->vmeta_for //| checknumtp FOR_STOP, ->vmeta_for - dasm_put(Dst, 15167, LJ_TISNUM, LJ_TISNUM); -#line 3684 "vm_x64.dasc" + dasm_put(Dst, 15160, LJ_TISNUM, LJ_TISNUM); +#line 3683 "vm_x64.dasc" } else { #ifdef LUA_USE_ASSERT //| checknumtp FOR_STOP, ->assert_bad_for_arg_type //| checknumtp FOR_STEP, ->assert_bad_for_arg_type - dasm_put(Dst, 15203, LJ_TISNUM, LJ_TISNUM); -#line 3688 "vm_x64.dasc" + dasm_put(Dst, 15196, LJ_TISNUM, LJ_TISNUM); +#line 3687 "vm_x64.dasc" #endif } //| mov RB, FOR_STEP - dasm_put(Dst, 15240); -#line 3691 "vm_x64.dasc" + dasm_put(Dst, 15233); +#line 3690 "vm_x64.dasc" if (!vk) { //| checknum RB, ->vmeta_for - dasm_put(Dst, 15245, LJ_TISNUM); -#line 3693 "vm_x64.dasc" + dasm_put(Dst, 15238, LJ_TISNUM); +#line 3692 "vm_x64.dasc" } //| movsd xmm0, qword FOR_IDX //| movsd xmm1, qword FOR_STOP - dasm_put(Dst, 15264); -#line 3696 "vm_x64.dasc" + dasm_put(Dst, 15257); +#line 3695 "vm_x64.dasc" if (vk) { //| addsd xmm0, qword FOR_STEP //| movsd qword FOR_IDX, xmm0 //| test RB, RB; js >3 - dasm_put(Dst, 15276); -#line 3700 "vm_x64.dasc" + dasm_put(Dst, 15269); +#line 3699 "vm_x64.dasc" } else { //| jl >3 - dasm_put(Dst, 15296); -#line 3702 "vm_x64.dasc" + dasm_put(Dst, 15289); +#line 3701 "vm_x64.dasc" } //| ucomisd xmm1, xmm0 //|1: //| movsd qword FOR_EXT, xmm0 - dasm_put(Dst, 15301); -#line 3706 "vm_x64.dasc" + dasm_put(Dst, 15294); +#line 3705 "vm_x64.dasc" if (op == BC_FORI) { //| jnb >2 //| branchPC RD - dasm_put(Dst, 15314, -BCBIAS_J*4); -#line 3709 "vm_x64.dasc" + dasm_put(Dst, 15307, -BCBIAS_J*4); +#line 3708 "vm_x64.dasc" } else if (op == BC_JFORI) { //| branchPC RD //| movzx RDd, PC_RD //| jnb =>BC_JLOOP - dasm_put(Dst, 15325, -BCBIAS_J*4, BC_JLOOP); -#line 3713 "vm_x64.dasc" + dasm_put(Dst, 15318, -BCBIAS_J*4, BC_JLOOP); +#line 3712 "vm_x64.dasc" } else if (op == BC_IFORL) { //| jb >2 //| branchPC RD - dasm_put(Dst, 15340, -BCBIAS_J*4); -#line 3716 "vm_x64.dasc" + dasm_put(Dst, 15333, -BCBIAS_J*4); +#line 3715 "vm_x64.dasc" } else { //| jnb =>BC_JLOOP - dasm_put(Dst, 15336, BC_JLOOP); -#line 3718 "vm_x64.dasc" + dasm_put(Dst, 15329, BC_JLOOP); +#line 3717 "vm_x64.dasc" } //|2: //| ins_next @@ -5442,15 +5442,15 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop) //|3: // Invert comparison if step is negative. //| ucomisd xmm0, xmm1 //| jmp <1 - dasm_put(Dst, 15351); -#line 3725 "vm_x64.dasc" + dasm_put(Dst, 15344); +#line 3724 "vm_x64.dasc" break; case BC_ITERL: //| hotloop RBd //| // Fall through. Assumes BC_IITERL follows and ins_AJ is a no-op. - dasm_put(Dst, 15141, HOTCOUNT_PCMASK, GG_DISP2HOT, HOTCOUNT_LOOP); -#line 3730 "vm_x64.dasc" + dasm_put(Dst, 15134, HOTCOUNT_PCMASK, GG_DISP2HOT, HOTCOUNT_LOOP); +#line 3729 "vm_x64.dasc" break; case BC_JITERL: @@ -5459,23 +5459,23 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop) //| lea RA, [BASE+RA*8] //| mov RB, [RA] //| cmp RB, LJ_TNIL; je >1 // Stop if iterator returned nil. - dasm_put(Dst, 15385, LJ_TNIL); -#line 3738 "vm_x64.dasc" + dasm_put(Dst, 15378, LJ_TNIL); +#line 3737 "vm_x64.dasc" if (op == BC_JITERL) { //| mov [RA-8], RB //| jmp =>BC_JLOOP - dasm_put(Dst, 15402, BC_JLOOP); -#line 3741 "vm_x64.dasc" + dasm_put(Dst, 15395, BC_JLOOP); +#line 3740 "vm_x64.dasc" } else { //| branchPC RD // Otherwise save control var + branch. //| mov [RA-8], RB - dasm_put(Dst, 15411, -BCBIAS_J*4); -#line 3744 "vm_x64.dasc" + dasm_put(Dst, 15404, -BCBIAS_J*4); +#line 3743 "vm_x64.dasc" } //|1: //| ins_next - dasm_put(Dst, 9802); -#line 3747 "vm_x64.dasc" + dasm_put(Dst, 9795); +#line 3746 "vm_x64.dasc" break; case BC_LOOP: @@ -5484,15 +5484,15 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop) //| // This opcode does NOT jump, it's only purpose is to detect a hot loop. //| hotloop RBd //| // Fall through. Assumes BC_ILOOP follows and ins_A is a no-op. - dasm_put(Dst, 15141, HOTCOUNT_PCMASK, GG_DISP2HOT, HOTCOUNT_LOOP); -#line 3755 "vm_x64.dasc" + dasm_put(Dst, 15134, HOTCOUNT_PCMASK, GG_DISP2HOT, HOTCOUNT_LOOP); +#line 3754 "vm_x64.dasc" break; case BC_ILOOP: //| ins_A // RA = base, RD = target (loop extent) //| ins_next - dasm_put(Dst, 9804); -#line 3760 "vm_x64.dasc" + dasm_put(Dst, 9797); +#line 3759 "vm_x64.dasc" break; case BC_JLOOP: @@ -5508,16 +5508,16 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop) //| mov [rsp+16], r12 //| mov [rsp+8], r13 //| jmp RD - dasm_put(Dst, 15423, DISPATCH_J(trace), DtD(->mcode), DISPATCH_GL(jit_base), DISPATCH_GL(tmpbuf.L)); -#line 3775 "vm_x64.dasc" + dasm_put(Dst, 15416, DISPATCH_J(trace), DtD(->mcode), DISPATCH_GL(jit_base), DISPATCH_GL(tmpbuf.L)); +#line 3774 "vm_x64.dasc" break; case BC_JMP: //| ins_AJ // RA = unused, RD = target //| branchPC RD //| ins_next - dasm_put(Dst, 15467, -BCBIAS_J*4); -#line 3781 "vm_x64.dasc" + dasm_put(Dst, 15460, -BCBIAS_J*4); +#line 3780 "vm_x64.dasc" break; /* -- Function headers -------------------------------------------------- */ @@ -5531,8 +5531,8 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop) case BC_FUNCF: //| hotcall RBd - dasm_put(Dst, 15495, HOTCOUNT_PCMASK, GG_DISP2HOT, HOTCOUNT_CALL); -#line 3794 "vm_x64.dasc" + dasm_put(Dst, 15488, HOTCOUNT_PCMASK, GG_DISP2HOT, HOTCOUNT_CALL); +#line 3793 "vm_x64.dasc" case BC_FUNCV: /* NYI: compiled vararg functions. */ //| // Fall through. Assumes BC_IFUNCF/BC_IFUNCV follow and ins_AD is a no-op. break; @@ -5549,17 +5549,17 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop) //| cmp NARGS:RDd, RAd // Check for missing parameters. //| jbe >3 //|2: - dasm_put(Dst, 15516, -4+PC2PROTO(k), Dt1(->maxstack), -4+PC2PROTO(numparams)); -#line 3810 "vm_x64.dasc" + dasm_put(Dst, 15509, -4+PC2PROTO(k), Dt1(->maxstack), -4+PC2PROTO(numparams)); +#line 3809 "vm_x64.dasc" if (op == BC_JFUNCF) { //| movzx RDd, PC_RD //| jmp =>BC_JLOOP - dasm_put(Dst, 15550, BC_JLOOP); -#line 3813 "vm_x64.dasc" + dasm_put(Dst, 15543, BC_JLOOP); +#line 3812 "vm_x64.dasc" } else { //| ins_next - dasm_put(Dst, 9804); -#line 3815 "vm_x64.dasc" + dasm_put(Dst, 9797); +#line 3814 "vm_x64.dasc" } //| //|3: // Clear missing parameters. @@ -5568,14 +5568,14 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop) //| cmp NARGS:RDd, RAd //| jbe <3 //| jmp <2 - dasm_put(Dst, 15559, LJ_TNIL); -#line 3823 "vm_x64.dasc" + dasm_put(Dst, 15552, LJ_TNIL); +#line 3822 "vm_x64.dasc" break; case BC_JFUNCV: //| int3 // NYI: compiled vararg functions - dasm_put(Dst, 9315); -#line 3827 "vm_x64.dasc" + dasm_put(Dst, 9308); +#line 3826 "vm_x64.dasc" break; /* NYI: compiled vararg functions. */ case BC_IFUNCV: @@ -5606,18 +5606,18 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop) //| sub RBd, 1 //| jnz <1 //|2: - dasm_put(Dst, 15582, FRAME_VARG+8, Dt1(->maxstack), -4+PC2PROTO(numparams), LJ_TNIL); -#line 3857 "vm_x64.dasc" + dasm_put(Dst, 15575, FRAME_VARG+8, Dt1(->maxstack), -4+PC2PROTO(numparams), LJ_TNIL); +#line 3856 "vm_x64.dasc" if (op == BC_JFUNCV) { //| movzx RDd, PC_RD //| jmp =>BC_JLOOP - dasm_put(Dst, 15550, BC_JLOOP); -#line 3860 "vm_x64.dasc" + dasm_put(Dst, 15543, BC_JLOOP); +#line 3859 "vm_x64.dasc" } else { //| mov KBASE, [PC-4+PC2PROTO(k)] //| ins_next - dasm_put(Dst, 15686, -4+PC2PROTO(k)); -#line 3863 "vm_x64.dasc" + dasm_put(Dst, 15679, -4+PC2PROTO(k)); +#line 3862 "vm_x64.dasc" } //| //|3: // Clear missing parameters. @@ -5626,8 +5626,8 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop) //| sub RBd, 1 //| jnz <3 //| jmp <2 - dasm_put(Dst, 15712, LJ_TNIL); -#line 3871 "vm_x64.dasc" + dasm_put(Dst, 15705, LJ_TNIL); +#line 3870 "vm_x64.dasc" break; case BC_FUNCC: @@ -5642,31 +5642,31 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop) //| lea RA, [RD+8*LUA_MINSTACK] //| cmp RA, L:RB->maxstack //| mov L:RB->top, RD - dasm_put(Dst, 15735, Dt8(->f), Dt1(->base), 8*LUA_MINSTACK, Dt1(->maxstack), Dt1(->top)); -#line 3885 "vm_x64.dasc" + dasm_put(Dst, 15728, Dt8(->f), Dt1(->base), 8*LUA_MINSTACK, Dt1(->maxstack), Dt1(->top)); +#line 3884 "vm_x64.dasc" if (op == BC_FUNCC) { //| mov CARG1, L:RB // Caveat: CARG1 may be RA. - dasm_put(Dst, 15781); -#line 3887 "vm_x64.dasc" + dasm_put(Dst, 15774); +#line 3886 "vm_x64.dasc" } else { //| mov CARG2, KBASE //| mov CARG1, L:RB // Caveat: CARG1 may be RA. - dasm_put(Dst, 15786); -#line 3890 "vm_x64.dasc" + dasm_put(Dst, 15779); +#line 3889 "vm_x64.dasc" } //| ja ->vm_growstack_c // Need to grow stack. //| set_vmstate C - dasm_put(Dst, 15795, DISPATCH_GL(vmstate), ~LJ_VMST_C); -#line 3893 "vm_x64.dasc" + dasm_put(Dst, 15788, DISPATCH_GL(vmstate), ~LJ_VMST_C); +#line 3892 "vm_x64.dasc" if (op == BC_FUNCC) { //| call KBASE // (lua_State *L) - dasm_put(Dst, 15805); -#line 3895 "vm_x64.dasc" + dasm_put(Dst, 15798); +#line 3894 "vm_x64.dasc" } else { //| // (lua_State *L, lua_CFunction f) //| call aword [DISPATCH+DISPATCH_GL(wrapf)] - dasm_put(Dst, 15810, DISPATCH_GL(wrapf)); -#line 3898 "vm_x64.dasc" + dasm_put(Dst, 15803, DISPATCH_GL(wrapf)); +#line 3897 "vm_x64.dasc" } //| // nresults returned in eax (RD). //| mov BASE, L:RB->base @@ -5677,8 +5677,8 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop) //| add RA, L:RB->top // RA = (L->top-(L->base+nresults))*8 //| mov PC, [BASE-8] // Fetch PC of caller. //| jmp ->vm_returnc - dasm_put(Dst, 15816, Dt1(->base), DISPATCH_GL(cur_L), DISPATCH_GL(vmstate), ~LJ_VMST_INTERP, Dt1(->top)); -#line 3908 "vm_x64.dasc" + dasm_put(Dst, 15809, Dt1(->base), DISPATCH_GL(cur_L), DISPATCH_GL(vmstate), ~LJ_VMST_INTERP, Dt1(->top)); +#line 3907 "vm_x64.dasc" break; /* ---------------------------------------------------------------------- */ @@ -5696,8 +5696,8 @@ static int build_backend(BuildCtx *ctx) dasm_growpc(Dst, BC__MAX); build_subroutines(ctx); //|.code_op - dasm_put(Dst, 15851); -#line 3925 "vm_x64.dasc" + dasm_put(Dst, 15844); +#line 3924 "vm_x64.dasc" for (op = 0; op < BC__MAX; op++) build_ins(ctx, (BCOp)op, op); return BC__MAX; diff --git a/src/reusevm/lj_vm.S b/src/reusevm/lj_vm.S index d260c81d41..9514d3b5e9 100644 --- a/src/reusevm/lj_vm.S +++ b/src/reusevm/lj_vm.S @@ -299,7 +299,7 @@ lj_BC_DIVVN: lj_BC_MODVN: .byte 15,182,236,15,182,192,76,139,28,234,73,193,251,47,65,131 .byte 251,242,15,131,168,28,0,0,242,15,16,4,234,242,65,15 - .byte 16,12,199,232,234,54,0,0,242,15,17,4,202,139,3,15 + .byte 16,12,199,232,228,54,0,0,242,15,17,4,202,139,3,15 .byte 182,204,15,182,232,72,131,195,4,193,232,16,65,255,36,238 .globl lj_BC_ADDNV @@ -1314,7 +1314,7 @@ lj_cont_dispatch: .byte 72,1,209,72,131,227,248,72,137,213,72,41,218,72,199,68 .byte 193,248,255,255,255,255,72,137,200,72,139,93,232,72,139,77 .byte 224,72,131,249,1,118,22,76,139,122,240,73,193,231,17,73 - .byte 193,239,17,77,139,127,32,77,139,127,176,255,225,15,132,22 + .byte 193,239,17,77,139,127,32,77,139,127,176,255,225,15,132,19 .byte 31,0,0,72,41,213,193,237,3,141,69,253,233,84,24,0 .byte 0 @@ -1898,7 +1898,7 @@ lj_fff_res_: .size lj_ff_math_floor, 28 lj_ff_math_floor: .byte 76,139,26,73,193,251,47,65,131,251,242,15,131,243,10,0 - .byte 0,242,15,16,2,232,74,15,0,0,235,140 + .byte 0,242,15,16,2,232,68,15,0,0,235,140 .globl lj_ff_math_ceil .hidden lj_ff_math_ceil @@ -1906,7 +1906,7 @@ lj_ff_math_floor: .size lj_ff_math_ceil, 31 lj_ff_math_ceil: .byte 76,139,26,73,193,251,47,65,131,251,242,15,131,215,10,0 - .byte 0,242,15,16,2,232,137,15,0,0,233,109,255,255,255 + .byte 0,242,15,16,2,232,131,15,0,0,233,109,255,255,255 .globl lj_ff_math_log .hidden lj_ff_math_log @@ -2542,25 +2542,31 @@ lj_vm_exit_handler: .byte 190,72,243,255,255,73,199,134,8,242,255,255,0,0,0,0 call lj_trace_exit .byte 72,139,77,80,72,131,225,252,72,137,105,16,72,139,85,32 - .byte 72,139,89,24,235,25 + .byte 72,139,89,24,235,19 .globl lj_vm_exit_interp .hidden lj_vm_exit_interp .type lj_vm_exit_interp, @function - .size lj_vm_exit_interp, 191 + .size lj_vm_exit_interp, 14 lj_vm_exit_interp: - .byte 72,141,76,36,16,69,139,150,32,241,255,255,65,131,250,1 - .byte 114,7,69,137,150,40,241,255,255,76,139,105,248,76,139,33 - .byte 72,137,204,133,192,15,136,134,0,0,0,72,139,108,36,16 - .byte 137,4,36,76,139,122,240,73,193,231,17,73,193,239,17,77 - .byte 139,127,32,77,139,127,176,72,137,85,32,73,199,134,8,242 - .byte 255,255,0,0,0,0,69,139,150,32,241,255,255,65,199,134 - .byte 32,241,255,255,255,255,255,255,139,3,15,182,204,15,182,232 - .byte 72,131,195,4,193,232,16,131,253,89,114,8,131,253,97,115 - .byte 7,139,4,36,65,255,36,238,72,139,66,248,169,3,0,0 - .byte 0,117,238,15,182,64,253,72,247,216,76,139,124,194,224,73 - .byte 193,231,17,73,193,239,17,77,139,127,32,77,139,127,176,235 - .byte 208,72,247,216,72,137,239,72,137,198 + .byte 69,139,150,32,241,255,255,69,137,150,40,241,255,255 + + .globl lj_vm_exit_interp_notrack + .hidden lj_vm_exit_interp_notrack + .type lj_vm_exit_interp_notrack, @function + .size lj_vm_exit_interp_notrack, 171 +lj_vm_exit_interp_notrack: + .byte 72,141,76,36,16,76,139,105,248,76,139,33,72,137,204,133 + .byte 192,15,136,134,0,0,0,72,139,108,36,16,137,4,36,76 + .byte 139,122,240,73,193,231,17,73,193,239,17,77,139,127,32,77 + .byte 139,127,176,72,137,85,32,73,199,134,8,242,255,255,0,0 + .byte 0,0,69,139,150,32,241,255,255,65,199,134,32,241,255,255 + .byte 255,255,255,255,139,3,15,182,204,15,182,232,72,131,195,4 + .byte 193,232,16,131,253,89,114,8,131,253,97,115,7,139,4,36 + .byte 65,255,36,238,72,139,66,248,169,3,0,0,0,117,238,15 + .byte 182,64,253,72,247,216,76,139,124,194,224,73,193,231,17,73 + .byte 193,239,17,77,139,127,32,77,139,127,176,235,208,72,247,216 + .byte 72,137,239,72,137,198 call lj_err_throw .globl lj_vm_floor_sse @@ -2662,17 +2668,17 @@ lj_assert_bad_for_arg_type: .globl lj_vm_ffi_callback .hidden lj_vm_ffi_callback .type lj_vm_ffi_callback, @function - .size lj_vm_ffi_callback, 202 + .size lj_vm_ffi_callback, 205 lj_vm_ffi_callback: .byte 83,65,87,65,86,65,85,65,84,72,131,236,40,76,141,181 .byte 96,15,0,0,72,139,157,112,1,0,0,15,183,192,137,131 - .byte 208,0,0,0,72,137,123,112,72,137,115,120,72,137,147,128 - .byte 0,0,0,72,137,139,136,0,0,0,242,15,17,67,48,242 - .byte 15,17,75,56,242,15,17,83,64,242,15,17,91,72,72,141 - .byte 68,36,96,76,137,131,144,0,0,0,76,137,139,152,0,0 - .byte 0,242,15,17,99,80,242,15,17,107,88,242,15,17,115,96 - .byte 242,15,17,123,104,72,137,131,176,0,0,0,72,137,230,72 - .byte 137,92,36,24,72,137,223 + .byte 216,0,0,0,72,137,123,120,72,137,179,128,0,0,0,72 + .byte 137,147,136,0,0,0,72,137,139,144,0,0,0,242,15,17 + .byte 67,56,242,15,17,75,64,242,15,17,83,72,242,15,17,91 + .byte 80,72,141,68,36,96,76,137,131,152,0,0,0,76,137,139 + .byte 160,0,0,0,242,15,17,99,88,242,15,17,107,96,242,15 + .byte 17,115,104,242,15,17,123,112,72,137,131,184,0,0,0,72 + .byte 137,230,72,137,92,36,24,72,137,223 call lj_ccallback_enter .byte 65,199,134,32,241,255,255,255,255,255,255,72,139,80,32,72 .byte 139,64,40,72,41,208,72,139,106,240,72,193,229,17,72,193 @@ -2684,10 +2690,10 @@ lj_vm_ffi_callback: .type lj_cont_ffi_callback, @function .size lj_cont_ffi_callback, 49 lj_cont_ffi_callback: - .byte 72,139,76,36,16,73,139,158,16,242,255,255,72,137,75,16 + .byte 72,139,76,36,16,73,139,158,16,242,255,255,72,137,75,24 .byte 72,137,81,32,72,137,105,40,72,137,223,72,137,198 call lj_ccallback_leave - .byte 72,139,67,112,242,15,16,67,48,233,143,221,255,255 + .byte 72,139,67,120,242,15,16,67,56,233,146,221,255,255 .globl lj_vm_ffi_call .hidden lj_vm_ffi_call @@ -2731,7 +2737,7 @@ lj_vm_ffi_call: .LASFDE0: .long .Lframe0 .quad .Lbegin - .quad 16435 + .quad 16432 .byte 0xe .uleb128 96 .byte 0x86 diff --git a/src/vm_x64.dasc b/src/vm_x64.dasc index 6d1c6b28cb..ee9e5878f5 100644 --- a/src/vm_x64.dasc +++ b/src/vm_x64.dasc @@ -2046,14 +2046,13 @@ static void build_subroutines(BuildCtx *ctx) | mov PC, [RA+CFRAME_OFS_PC] // Get SAVE_PC. | jmp >1 |->vm_exit_interp: + | // Record which trace exited to the interpreter. + | mov TMPRd, dword [DISPATCH+DISPATCH_GL(vmstate)] + | mov dword [DISPATCH+DISPATCH_GL(lasttrace)], TMPRd + |->vm_exit_interp_notrack: | // RD = MULTRES or negated error code, BASE, PC and DISPATCH set. | // Restore additional callee-save registers only used in compiled code. | lea RA, [rsp+16] - | // Record which trace exited to the interpreter (if called from a trace) - | mov TMPRd, dword [DISPATCH+DISPATCH_GL(vmstate)] - | cmp TMPRd, 1 - | jb >1 - | mov dword [DISPATCH+DISPATCH_GL(lasttrace)], TMPRd |1: | mov r13, [RA-8] | mov r12, [RA]