From 932cda0fe3cbd34e60aa68479935c946f69b756f Mon Sep 17 00:00:00 2001 From: Mike Pall Date: Sun, 18 Apr 2010 13:41:30 +0200 Subject: [PATCH] Replace on-trace GC frame syncing with interpreter exit. Need to sync GC objects to stack only during atomic GC phase. Need to setup a proper frame structure only for calling finalizers. Force an exit to the interpreter and let it handle the uncommon cases. Finally solves the "NYI: gcstep sync with frames" issue. --- src/buildvm_x64.h | 1208 +++++++++++++++++++-------------------- src/buildvm_x64win.h | 1146 ++++++++++++++++++------------------- src/buildvm_x86.dasc | 1 + src/buildvm_x86.h | 1281 +++++++++++++++++++++--------------------- src/lj_asm.c | 66 +-- src/lj_gc.c | 57 +- src/lj_gc.h | 2 +- src/lj_parse.c | 2 +- src/lj_record.c | 23 +- src/lj_trace.c | 8 +- src/lj_traceerr.h | 1 - 11 files changed, 1887 insertions(+), 1908 deletions(-) diff --git a/src/buildvm_x64.h b/src/buildvm_x64.h index 747253fd..6a15006b 100644 --- a/src/buildvm_x64.h +++ b/src/buildvm_x64.h @@ -12,7 +12,7 @@ #define DASM_SECTION_CODE_OP 0 #define DASM_SECTION_CODE_SUB 1 #define DASM_MAXSECTION 2 -static const unsigned char build_actionlist[14067] = { +static const unsigned char build_actionlist[14075] = { 254,1,248,10,252,247,195,237,15,132,244,11,131,227,252,248,41,218,72,141, 76,25,252,248,139,90,252,252,199,68,10,4,237,248,12,131,192,1,137,68,36,4, 252,247,195,237,15,132,244,13,248,14,252,247,195,237,15,132,244,10,65,199, @@ -377,322 +377,322 @@ static const unsigned char build_actionlist[14067] = { 15,17,69,192,252,242,15,17,125,184,252,242,15,17,117,176,252,242,15,17,109, 168,252,242,15,17,101,160,252,242,15,17,93,152,252,242,15,17,85,144,252,242, 15,17,77,136,252,242,15,17,69,128,65,139,174,233,65,139,150,233,73,137,174, - 233,137,149,233,72,137,230,65,141,190,233,232,251,1,23,72,139,141,233,72, - 129,225,239,72,137,204,137,169,233,139,149,233,139,153,233,252,233,244,247, - 255,248,144,255,72,131,196,16,248,1,76,139,108,36,8,76,139,36,36,133,192, - 15,136,244,249,137,68,36,4,68,139,122,252,248,69,139,191,233,69,139,191,233, - 65,199,134,233,0,0,0,0,65,199,134,233,237,139,3,15,182,204,15,182,232,131, - 195,4,193,232,16,129,252,253,239,15,130,244,248,139,68,36,4,248,2,65,252, - 255,36,252,238,248,3,252,247,216,137,252,239,137,198,232,251,1,24,255,248, - 82,255,217,124,36,4,137,68,36,8,102,184,0,4,102,11,68,36,4,102,37,252,255, - 252,247,102,137,68,36,6,217,108,36,6,217,252,252,217,108,36,4,139,68,36,8, - 195,255,248,145,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,1,102,15,84,194,252,242,15,92,200,15,40,193,248, - 1,195,248,84,255,217,124,36,4,137,68,36,8,102,184,0,8,102,11,68,36,4,102, - 37,252,255,252,251,102,137,68,36,6,217,108,36,6,217,252,252,217,108,36,4, - 139,68,36,8,195,255,248,146,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,104,255,217,124,36,4,137,68,36,8,102,184,0,12,102,11, - 68,36,4,102,137,68,36,6,217,108,36,6,217,252,252,217,108,36,4,139,68,36,8, - 195,255,248,147,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, - 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,148,255,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,255,217,193,216,252, - 241,217,124,36,4,102,184,0,4,102,11,68,36,4,102,37,252,255,252,247,102,137, - 68,36,6,217,108,36,6,217,252,252,217,108,36,4,222,201,222,252,233,195,255, - 248,88,217,252,234,222,201,248,149,217,84,36,252,248,129,124,36,252,248,0, - 0,128,127,15,132,244,247,129,124,36,252,248,0,0,128,252,255,15,132,244,248, - 248,150,217,192,217,252,252,220,252,233,217,201,217,252,240,217,232,222,193, - 217,252,253,221,217,248,1,195,248,2,221,216,217,252,238,195,255,248,107,255, - 248,151,252,242,15,45,193,252,242,15,42,208,102,15,46,202,15,133,244,254, - 15,138,244,255,248,152,131,252,248,1,15,142,244,252,248,1,169,1,0,0,0,15, - 133,244,248,252,242,15,89,192,209,232,252,233,244,1,248,2,209,232,15,132, - 244,251,15,40,200,248,3,252,242,15,89,192,209,232,15,132,244,250,15,131,244, - 3,255,252,242,15,89,200,252,233,244,3,248,4,252,242,15,89,193,248,5,195,248, - 6,15,132,244,5,15,130,244,253,80,72,184,237,237,102,72,15,110,200,252,242, - 15,94,200,88,15,40,193,252,247,216,131,252,248,1,15,132,244,5,252,233,244, - 1,248,7,72,184,237,237,102,72,15,110,192,195,248,8,102,72,15,126,200,72,209, - 224,72,193,192,12,72,61,252,254,15,0,0,15,132,244,248,255,102,72,15,126,192, - 72,209,224,15,132,244,250,72,193,192,12,72,61,252,254,15,0,0,15,132,244,251, - 252,242,15,17,76,36,252,240,252,242,15,17,68,36,252,248,221,68,36,252,240, - 221,68,36,252,248,217,252,241,217,192,217,252,252,220,252,233,217,201,217, - 252,240,217,232,222,193,217,252,253,221,217,221,92,36,252,248,252,242,15, - 16,68,36,252,248,195,248,9,72,184,237,237,102,72,15,110,208,102,15,46,194, - 15,132,244,247,15,40,193,248,1,195,248,2,72,184,237,237,102,72,15,110,208, - 102,15,84,194,72,184,237,237,102,72,15,110,208,102,15,46,194,15,132,244,1, - 102,15,80,193,15,87,192,136,196,15,146,208,48,224,15,133,244,1,248,3,72,184, - 237,237,255,102,72,15,110,192,195,248,4,102,15,80,193,133,192,15,133,244, - 3,15,87,192,195,248,5,102,15,80,193,133,192,15,132,244,3,15,87,192,195,248, - 153,255,131,252,255,1,15,130,244,82,15,132,244,84,131,252,255,3,15,130,244, - 104,15,135,244,248,252,242,15,81,192,195,248,2,252,242,15,17,68,36,252,248, - 221,68,36,252,248,131,252,255,5,15,135,244,248,15,132,244,247,232,244,88, - 252,233,244,253,248,1,232,244,149,255,252,233,244,253,248,2,131,252,255,7, - 15,132,244,247,15,135,244,248,217,252,237,217,201,217,252,241,252,233,244, - 253,248,1,217,232,217,201,217,252,241,252,233,244,253,248,2,131,252,255,9, - 15,132,244,247,15,135,244,248,217,252,236,217,201,217,252,241,252,233,244, - 253,248,1,255,217,252,254,252,233,244,253,248,2,131,252,255,11,15,132,244, - 247,15,135,244,255,217,252,255,252,233,244,253,248,1,217,252,242,221,216, - 248,7,221,92,36,252,248,252,242,15,16,68,36,252,248,195,255,139,124,36,12, - 221,68,36,4,131,252,255,1,15,130,244,82,15,132,244,84,131,252,255,3,15,130, - 244,104,15,135,244,248,217,252,250,195,248,2,131,252,255,5,15,130,244,88, - 15,132,244,149,131,252,255,7,15,132,244,247,15,135,244,248,217,252,237,217, - 201,217,252,241,195,248,1,217,232,217,201,217,252,241,195,248,2,131,252,255, - 9,15,132,244,247,255,15,135,244,248,217,252,236,217,201,217,252,241,195,248, - 1,217,252,254,195,248,2,131,252,255,11,15,132,244,247,15,135,244,255,217, - 252,255,195,248,1,217,252,242,221,216,195,255,248,9,204,248,154,255,131,252, - 255,1,15,132,244,247,15,135,244,248,252,242,15,88,193,195,248,1,252,242,15, - 92,193,195,248,2,131,252,255,3,15,132,244,247,15,135,244,248,252,242,15,89, - 193,195,248,1,252,242,15,94,193,195,248,2,131,252,255,5,15,130,244,148,15, - 132,244,107,131,252,255,7,15,132,244,247,15,135,244,248,72,184,237,237,255, - 102,72,15,110,200,15,87,193,195,248,1,72,184,237,237,102,72,15,110,200,15, - 84,193,195,248,2,131,252,255,9,15,135,244,248,252,242,15,17,68,36,252,248, - 252,242,15,17,76,36,252,240,221,68,36,252,248,221,68,36,252,240,15,132,244, - 247,217,252,243,248,7,221,92,36,252,248,252,242,15,16,68,36,252,248,195,248, - 1,217,201,217,252,253,221,217,252,233,244,7,248,2,131,252,255,11,15,132,244, - 247,15,135,244,255,252,242,15,93,193,195,248,1,252,242,15,95,193,195,248, - 9,204,255,139,68,36,20,221,68,36,4,221,68,36,12,131,252,248,1,15,132,244, - 247,15,135,244,248,222,193,195,248,1,222,252,233,195,248,2,131,252,248,3, - 15,132,244,247,15,135,244,248,222,201,195,248,1,222,252,249,195,248,2,131, - 252,248,5,15,130,244,148,15,132,244,107,131,252,248,7,15,132,244,247,15,135, - 244,248,255,221,216,217,224,195,248,1,221,216,217,225,195,248,2,131,252,248, - 9,15,132,244,247,15,135,244,248,217,252,243,195,248,1,217,201,217,252,253, - 221,217,195,248,2,131,252,248,11,15,132,244,247,15,135,244,255,255,219,252, - 233,219,209,221,217,195,248,1,219,252,233,218,209,221,217,195,255,221,225, - 223,224,252,246,196,1,15,132,244,248,217,201,248,2,221,216,195,248,1,221, - 225,223,224,252,246,196,1,15,133,244,248,217,201,248,2,221,216,195,255,248, - 155,137,252,248,83,15,162,137,6,137,94,4,137,78,8,137,86,12,91,195,255,129, - 124,253,202,4,239,15,135,244,41,129,124,253,194,4,239,15,135,244,41,255,252, - 242,15,16,4,194,131,195,4,102,15,46,4,202,255,221,4,202,221,4,194,131,195, - 4,255,223,252,233,221,216,255,218,252,233,223,224,158,255,15,134,244,248, - 255,15,131,244,248,255,248,1,15,183,67,252,254,141,156,253,131,233,248,2, + 233,65,199,134,233,0,0,0,0,137,149,233,72,137,230,65,141,190,233,232,251, + 1,23,72,139,141,233,72,129,225,239,72,137,204,137,169,233,139,149,233,139, + 153,233,252,233,244,247,255,248,144,255,72,131,196,16,248,1,76,139,108,36, + 8,76,139,36,36,133,192,15,136,244,249,137,68,36,4,68,139,122,252,248,69,139, + 191,233,69,139,191,233,65,199,134,233,0,0,0,0,65,199,134,233,237,139,3,15, + 182,204,15,182,232,131,195,4,193,232,16,129,252,253,239,15,130,244,248,139, + 68,36,4,248,2,65,252,255,36,252,238,248,3,252,247,216,137,252,239,137,198, + 232,251,1,24,255,248,82,255,217,124,36,4,137,68,36,8,102,184,0,4,102,11,68, + 36,4,102,37,252,255,252,247,102,137,68,36,6,217,108,36,6,217,252,252,217, + 108,36,4,139,68,36,8,195,255,248,145,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,1,102,15,84,194,252,242, + 15,92,200,15,40,193,248,1,195,248,84,255,217,124,36,4,137,68,36,8,102,184, + 0,8,102,11,68,36,4,102,37,252,255,252,251,102,137,68,36,6,217,108,36,6,217, + 252,252,217,108,36,4,139,68,36,8,195,255,248,146,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,104,255,217,124,36,4,137,68, + 36,8,102,184,0,12,102,11,68,36,4,102,137,68,36,6,217,108,36,6,217,252,252, + 217,108,36,4,139,68,36,8,195,255,248,147,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,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,148,255,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,255,217,193,216,252,241,217,124,36,4,102,184,0,4,102,11,68,36, + 4,102,37,252,255,252,247,102,137,68,36,6,217,108,36,6,217,252,252,217,108, + 36,4,222,201,222,252,233,195,255,248,88,217,252,234,222,201,248,149,217,84, + 36,252,248,129,124,36,252,248,0,0,128,127,15,132,244,247,129,124,36,252,248, + 0,0,128,252,255,15,132,244,248,248,150,217,192,217,252,252,220,252,233,217, + 201,217,252,240,217,232,222,193,217,252,253,221,217,248,1,195,248,2,221,216, + 217,252,238,195,255,248,107,255,248,151,252,242,15,45,193,252,242,15,42,208, + 102,15,46,202,15,133,244,254,15,138,244,255,248,152,131,252,248,1,15,142, + 244,252,248,1,169,1,0,0,0,15,133,244,248,252,242,15,89,192,209,232,252,233, + 244,1,248,2,209,232,15,132,244,251,15,40,200,248,3,252,242,15,89,192,209, + 232,15,132,244,250,15,131,244,3,255,252,242,15,89,200,252,233,244,3,248,4, + 252,242,15,89,193,248,5,195,248,6,15,132,244,5,15,130,244,253,80,72,184,237, + 237,102,72,15,110,200,252,242,15,94,200,88,15,40,193,252,247,216,131,252, + 248,1,15,132,244,5,252,233,244,1,248,7,72,184,237,237,102,72,15,110,192,195, + 248,8,102,72,15,126,200,72,209,224,72,193,192,12,72,61,252,254,15,0,0,15, + 132,244,248,255,102,72,15,126,192,72,209,224,15,132,244,250,72,193,192,12, + 72,61,252,254,15,0,0,15,132,244,251,252,242,15,17,76,36,252,240,252,242,15, + 17,68,36,252,248,221,68,36,252,240,221,68,36,252,248,217,252,241,217,192, + 217,252,252,220,252,233,217,201,217,252,240,217,232,222,193,217,252,253,221, + 217,221,92,36,252,248,252,242,15,16,68,36,252,248,195,248,9,72,184,237,237, + 102,72,15,110,208,102,15,46,194,15,132,244,247,15,40,193,248,1,195,248,2, + 72,184,237,237,102,72,15,110,208,102,15,84,194,72,184,237,237,102,72,15,110, + 208,102,15,46,194,15,132,244,1,102,15,80,193,15,87,192,136,196,15,146,208, + 48,224,15,133,244,1,248,3,72,184,237,237,255,102,72,15,110,192,195,248,4, + 102,15,80,193,133,192,15,133,244,3,15,87,192,195,248,5,102,15,80,193,133, + 192,15,132,244,3,15,87,192,195,248,153,255,131,252,255,1,15,130,244,82,15, + 132,244,84,131,252,255,3,15,130,244,104,15,135,244,248,252,242,15,81,192, + 195,248,2,252,242,15,17,68,36,252,248,221,68,36,252,248,131,252,255,5,15, + 135,244,248,15,132,244,247,232,244,88,252,233,244,253,248,1,232,244,149,255, + 252,233,244,253,248,2,131,252,255,7,15,132,244,247,15,135,244,248,217,252, + 237,217,201,217,252,241,252,233,244,253,248,1,217,232,217,201,217,252,241, + 252,233,244,253,248,2,131,252,255,9,15,132,244,247,15,135,244,248,217,252, + 236,217,201,217,252,241,252,233,244,253,248,1,255,217,252,254,252,233,244, + 253,248,2,131,252,255,11,15,132,244,247,15,135,244,255,217,252,255,252,233, + 244,253,248,1,217,252,242,221,216,248,7,221,92,36,252,248,252,242,15,16,68, + 36,252,248,195,255,139,124,36,12,221,68,36,4,131,252,255,1,15,130,244,82, + 15,132,244,84,131,252,255,3,15,130,244,104,15,135,244,248,217,252,250,195, + 248,2,131,252,255,5,15,130,244,88,15,132,244,149,131,252,255,7,15,132,244, + 247,15,135,244,248,217,252,237,217,201,217,252,241,195,248,1,217,232,217, + 201,217,252,241,195,248,2,131,252,255,9,15,132,244,247,255,15,135,244,248, + 217,252,236,217,201,217,252,241,195,248,1,217,252,254,195,248,2,131,252,255, + 11,15,132,244,247,15,135,244,255,217,252,255,195,248,1,217,252,242,221,216, + 195,255,248,9,204,248,154,255,131,252,255,1,15,132,244,247,15,135,244,248, + 252,242,15,88,193,195,248,1,252,242,15,92,193,195,248,2,131,252,255,3,15, + 132,244,247,15,135,244,248,252,242,15,89,193,195,248,1,252,242,15,94,193, + 195,248,2,131,252,255,5,15,130,244,148,15,132,244,107,131,252,255,7,15,132, + 244,247,15,135,244,248,72,184,237,237,255,102,72,15,110,200,15,87,193,195, + 248,1,72,184,237,237,102,72,15,110,200,15,84,193,195,248,2,131,252,255,9, + 15,135,244,248,252,242,15,17,68,36,252,248,252,242,15,17,76,36,252,240,221, + 68,36,252,248,221,68,36,252,240,15,132,244,247,217,252,243,248,7,221,92,36, + 252,248,252,242,15,16,68,36,252,248,195,248,1,217,201,217,252,253,221,217, + 252,233,244,7,248,2,131,252,255,11,15,132,244,247,15,135,244,255,252,242, + 15,93,193,195,248,1,252,242,15,95,193,195,248,9,204,255,139,68,36,20,221, + 68,36,4,221,68,36,12,131,252,248,1,15,132,244,247,15,135,244,248,222,193, + 195,248,1,222,252,233,195,248,2,131,252,248,3,15,132,244,247,15,135,244,248, + 222,201,195,248,1,222,252,249,195,248,2,131,252,248,5,15,130,244,148,15,132, + 244,107,131,252,248,7,15,132,244,247,15,135,244,248,255,221,216,217,224,195, + 248,1,221,216,217,225,195,248,2,131,252,248,9,15,132,244,247,15,135,244,248, + 217,252,243,195,248,1,217,201,217,252,253,221,217,195,248,2,131,252,248,11, + 15,132,244,247,15,135,244,255,255,219,252,233,219,209,221,217,195,248,1,219, + 252,233,218,209,221,217,195,255,221,225,223,224,252,246,196,1,15,132,244, + 248,217,201,248,2,221,216,195,248,1,221,225,223,224,252,246,196,1,15,133, + 244,248,217,201,248,2,221,216,195,255,248,155,137,252,248,83,15,162,137,6, + 137,94,4,137,78,8,137,86,12,91,195,255,129,124,253,202,4,239,15,135,244,41, + 129,124,253,194,4,239,15,135,244,41,255,252,242,15,16,4,194,131,195,4,102, + 15,46,4,202,255,221,4,202,221,4,194,131,195,4,255,223,252,233,221,216,255, + 218,252,233,223,224,158,255,15,134,244,248,255,15,131,244,248,255,248,1,15, + 183,67,252,254,141,156,253,131,233,248,2,139,3,15,182,204,15,182,232,131, + 195,4,193,232,16,65,252,255,36,252,238,255,139,108,194,4,131,195,4,129,252, + 253,239,15,135,244,251,129,124,253,202,4,239,15,135,244,251,255,252,242,15, + 16,4,194,102,15,46,4,202,255,221,4,202,221,4,194,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,141, + 156,253,131,233,248,2,255,248,2,15,183,67,252,254,141,156,253,131,233,248, + 1,255,248,5,57,108,202,4,15,133,244,2,129,252,253,239,15,131,244,1,139,12, + 202,139,4,194,57,193,15,132,244,1,129,252,253,239,15,135,244,2,139,169,233, + 133,252,237,15,132,244,2,252,246,133,233,235,15,133,244,2,255,49,252,237, + 255,189,1,0,0,0,255,252,233,244,45,255,72,252,247,208,131,195,4,129,124,253, + 202,4,239,15,133,244,248,139,12,202,65,59,12,135,255,131,195,4,129,124,253, + 202,4,239,15,135,244,248,255,252,242,65,15,16,4,199,102,15,46,4,202,255,221, + 4,202,65,221,4,199,255,72,252,247,208,131,195,4,57,68,202,4,255,139,108,194, + 4,131,195,4,129,252,253,239,255,15,131,244,247,255,15,130,244,247,255,137, + 108,202,4,139,44,194,137,44,202,255,15,183,67,252,254,141,156,253,131,233, + 248,1,139,3,15,182,204,15,182,232,131,195,4,193,232,16,65,252,255,36,252, + 238,255,139,108,194,4,139,4,194,137,108,202,4,137,4,202,139,3,15,182,204, + 15,182,232,131,195,4,193,232,16,65,252,255,36,252,238,255,49,252,237,129, + 124,253,194,4,239,129,213,239,137,108,202,4,139,3,15,182,204,15,182,232,131, + 195,4,193,232,16,65,252,255,36,252,238,255,129,124,253,194,4,239,15,135,244, + 48,255,252,242,15,16,4,194,72,184,237,237,102,72,15,110,200,15,87,193,252, + 242,15,17,4,202,255,221,4,194,217,224,221,28,202,255,129,124,253,194,4,239, + 15,133,244,248,139,4,194,255,15,87,192,252,242,15,42,128,233,248,1,252,242, + 15,17,4,202,255,219,128,233,248,1,221,28,202,255,139,3,15,182,204,15,182, + 232,131,195,4,193,232,16,65,252,255,36,252,238,248,2,129,124,253,194,4,239, + 15,133,244,50,139,60,194,137,213,232,251,1,18,255,252,242,15,42,192,137,252, + 234,255,15,182,75,252,253,252,233,244,1,255,15,182,252,236,15,182,192,255, + 129,124,253,252,234,4,239,15,135,244,46,255,252,242,15,16,4,252,234,252,242, + 65,15,88,4,199,255,221,4,252,234,65,220,4,199,255,129,124,253,252,234,4,239, + 15,135,244,47,255,252,242,65,15,16,4,199,252,242,15,88,4,252,234,255,65,221, + 4,199,220,4,252,234,255,129,124,253,252,234,4,239,15,135,244,49,129,124,253, + 194,4,239,15,135,244,49,255,252,242,15,16,4,252,234,252,242,15,88,4,194,255, + 221,4,252,234,220,4,194,255,252,242,15,16,4,252,234,252,242,65,15,92,4,199, + 255,221,4,252,234,65,220,36,199,255,252,242,65,15,16,4,199,252,242,15,92, + 4,252,234,255,65,221,4,199,220,36,252,234,255,252,242,15,16,4,252,234,252, + 242,15,92,4,194,255,221,4,252,234,220,36,194,255,252,242,15,16,4,252,234, + 252,242,65,15,89,4,199,255,221,4,252,234,65,220,12,199,255,252,242,65,15, + 16,4,199,252,242,15,89,4,252,234,255,65,221,4,199,220,12,252,234,255,252, + 242,15,16,4,252,234,252,242,15,89,4,194,255,221,4,252,234,220,12,194,255, + 252,242,15,16,4,252,234,252,242,65,15,94,4,199,255,221,4,252,234,65,220,52, + 199,255,252,242,65,15,16,4,199,252,242,15,94,4,252,234,255,65,221,4,199,220, + 52,252,234,255,252,242,15,16,4,252,234,252,242,15,94,4,194,255,221,4,252, + 234,220,52,194,255,252,242,15,16,4,252,234,252,242,65,15,16,12,199,255,221, + 4,252,234,65,221,4,199,255,252,242,65,15,16,4,199,252,242,15,16,12,252,234, + 255,65,221,4,199,221,4,252,234,255,252,242,15,16,4,252,234,252,242,15,16, + 12,194,255,221,4,252,234,221,4,194,255,248,156,232,244,148,255,252,233,244, + 156,255,232,244,107,255,15,182,252,236,15,182,192,139,124,36,24,137,151,233, + 141,52,194,137,194,41,252,234,248,33,137,252,253,137,92,36,28,232,251,1,25, + 139,149,233,133,192,15,133,244,42,15,182,107,252,255,15,182,75,252,253,139, + 68,252,234,4,139,44,252,234,137,68,202,4,137,44,202,139,3,15,182,204,15,182, + 232,131,195,4,193,232,16,65,252,255,36,252,238,255,72,252,247,208,65,139, + 4,135,199,68,202,4,237,137,4,202,139,3,15,182,204,15,182,232,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,255,223,67,252,254,221,28,202,255,252,242,65,15,16,4,199,252,242, + 15,17,4,202,255,65,221,4,199,221,28,202,255,72,252,247,208,137,68,202,4,139, + 3,15,182,204,15,182,232,131,195,4,193,232,16,65,252,255,36,252,238,255,141, + 76,202,12,141,68,194,4,189,237,137,105,252,248,248,1,137,41,131,193,8,57, + 193,15,134,244,1,139,3,15,182,204,15,182,232,131,195,4,193,232,16,65,252, + 255,36,252,238,255,139,106,252,248,139,172,253,133,233,139,173,233,139,69, + 4,139,109,0,137,68,202,4,137,44,202,139,3,15,182,204,15,182,232,131,195,4, + 193,232,16,65,252,255,36,252,238,255,139,106,252,248,139,172,253,141,233, + 128,189,233,0,139,173,233,139,12,194,139,68,194,4,137,77,0,137,69,4,15,132, + 244,247,252,246,133,233,235,15,133,244,248,248,1,139,3,15,182,204,15,182, + 232,131,195,4,193,232,16,65,252,255,36,252,238,248,2,129,232,239,129,252, + 248,239,15,134,244,1,252,246,129,233,235,15,132,244,1,137,252,238,137,213, + 65,141,190,233,255,232,251,1,26,137,252,234,252,233,244,1,255,72,252,247, + 208,139,106,252,248,139,172,253,141,233,65,139,12,135,139,133,233,137,8,199, + 64,4,237,252,246,133,233,235,15,133,244,248,248,1,139,3,15,182,204,15,182, + 232,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,137,213,137,198,65,141,190,233,232, + 251,1,26,137,252,234,252,233,244,1,255,139,106,252,248,255,252,242,65,15, + 16,4,199,255,139,172,253,141,233,139,141,233,255,252,242,15,17,1,255,221, + 25,255,72,252,247,208,139,106,252,248,139,172,253,141,233,139,141,233,137, + 65,4,139,3,15,182,204,15,182,232,131,195,4,193,232,16,65,252,255,36,252,238, + 255,141,156,253,131,233,139,108,36,24,131,189,233,0,15,132,244,247,137,149, + 233,141,52,202,137,252,239,232,251,1,27,139,149,233,248,1,139,3,15,182,204, + 15,182,232,131,195,4,193,232,16,65,252,255,36,252,238,255,72,252,247,208, + 139,108,36,24,137,149,233,139,82,252,248,65,139,52,135,137,252,239,137,92, + 36,28,232,251,1,28,139,149,233,15,182,75,252,253,137,4,202,199,68,202,4,237, 139,3,15,182,204,15,182,232,131,195,4,193,232,16,65,252,255,36,252,238,255, - 139,108,194,4,131,195,4,129,252,253,239,15,135,244,251,129,124,253,202,4, - 239,15,135,244,251,255,252,242,15,16,4,194,102,15,46,4,202,255,221,4,202, - 221,4,194,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,141,156,253,131,233,248,2,255,248,2,15,183, - 67,252,254,141,156,253,131,233,248,1,255,248,5,57,108,202,4,15,133,244,2, - 129,252,253,239,15,131,244,1,139,12,202,139,4,194,57,193,15,132,244,1,129, - 252,253,239,15,135,244,2,139,169,233,133,252,237,15,132,244,2,252,246,133, - 233,235,15,133,244,2,255,49,252,237,255,189,1,0,0,0,255,252,233,244,45,255, - 72,252,247,208,131,195,4,129,124,253,202,4,239,15,133,244,248,139,12,202, - 65,59,12,135,255,131,195,4,129,124,253,202,4,239,15,135,244,248,255,252,242, - 65,15,16,4,199,102,15,46,4,202,255,221,4,202,65,221,4,199,255,72,252,247, - 208,131,195,4,57,68,202,4,255,139,108,194,4,131,195,4,129,252,253,239,255, - 15,131,244,247,255,15,130,244,247,255,137,108,202,4,139,44,194,137,44,202, - 255,15,183,67,252,254,141,156,253,131,233,248,1,139,3,15,182,204,15,182,232, - 131,195,4,193,232,16,65,252,255,36,252,238,255,139,108,194,4,139,4,194,137, - 108,202,4,137,4,202,139,3,15,182,204,15,182,232,131,195,4,193,232,16,65,252, - 255,36,252,238,255,49,252,237,129,124,253,194,4,239,129,213,239,137,108,202, - 4,139,3,15,182,204,15,182,232,131,195,4,193,232,16,65,252,255,36,252,238, - 255,129,124,253,194,4,239,15,135,244,48,255,252,242,15,16,4,194,72,184,237, - 237,102,72,15,110,200,15,87,193,252,242,15,17,4,202,255,221,4,194,217,224, - 221,28,202,255,129,124,253,194,4,239,15,133,244,248,139,4,194,255,15,87,192, - 252,242,15,42,128,233,248,1,252,242,15,17,4,202,255,219,128,233,248,1,221, - 28,202,255,139,3,15,182,204,15,182,232,131,195,4,193,232,16,65,252,255,36, - 252,238,248,2,129,124,253,194,4,239,15,133,244,50,139,60,194,137,213,232, - 251,1,18,255,252,242,15,42,192,137,252,234,255,15,182,75,252,253,252,233, - 244,1,255,15,182,252,236,15,182,192,255,129,124,253,252,234,4,239,15,135, - 244,46,255,252,242,15,16,4,252,234,252,242,65,15,88,4,199,255,221,4,252,234, - 65,220,4,199,255,129,124,253,252,234,4,239,15,135,244,47,255,252,242,65,15, - 16,4,199,252,242,15,88,4,252,234,255,65,221,4,199,220,4,252,234,255,129,124, - 253,252,234,4,239,15,135,244,49,129,124,253,194,4,239,15,135,244,49,255,252, - 242,15,16,4,252,234,252,242,15,88,4,194,255,221,4,252,234,220,4,194,255,252, - 242,15,16,4,252,234,252,242,65,15,92,4,199,255,221,4,252,234,65,220,36,199, - 255,252,242,65,15,16,4,199,252,242,15,92,4,252,234,255,65,221,4,199,220,36, - 252,234,255,252,242,15,16,4,252,234,252,242,15,92,4,194,255,221,4,252,234, - 220,36,194,255,252,242,15,16,4,252,234,252,242,65,15,89,4,199,255,221,4,252, - 234,65,220,12,199,255,252,242,65,15,16,4,199,252,242,15,89,4,252,234,255, - 65,221,4,199,220,12,252,234,255,252,242,15,16,4,252,234,252,242,15,89,4,194, - 255,221,4,252,234,220,12,194,255,252,242,15,16,4,252,234,252,242,65,15,94, - 4,199,255,221,4,252,234,65,220,52,199,255,252,242,65,15,16,4,199,252,242, - 15,94,4,252,234,255,65,221,4,199,220,52,252,234,255,252,242,15,16,4,252,234, - 252,242,15,94,4,194,255,221,4,252,234,220,52,194,255,252,242,15,16,4,252, - 234,252,242,65,15,16,12,199,255,221,4,252,234,65,221,4,199,255,252,242,65, - 15,16,4,199,252,242,15,16,12,252,234,255,65,221,4,199,221,4,252,234,255,252, - 242,15,16,4,252,234,252,242,15,16,12,194,255,221,4,252,234,221,4,194,255, - 248,156,232,244,148,255,252,233,244,156,255,232,244,107,255,15,182,252,236, - 15,182,192,139,124,36,24,137,151,233,141,52,194,137,194,41,252,234,248,33, - 137,252,253,137,92,36,28,232,251,1,25,139,149,233,133,192,15,133,244,42,15, - 182,107,252,255,15,182,75,252,253,139,68,252,234,4,139,44,252,234,137,68, - 202,4,137,44,202,139,3,15,182,204,15,182,232,131,195,4,193,232,16,65,252, - 255,36,252,238,255,72,252,247,208,65,139,4,135,199,68,202,4,237,137,4,202, - 139,3,15,182,204,15,182,232,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,255,223,67,252,254,221,28, - 202,255,252,242,65,15,16,4,199,252,242,15,17,4,202,255,65,221,4,199,221,28, - 202,255,72,252,247,208,137,68,202,4,139,3,15,182,204,15,182,232,131,195,4, - 193,232,16,65,252,255,36,252,238,255,141,76,202,12,141,68,194,4,189,237,137, - 105,252,248,248,1,137,41,131,193,8,57,193,15,134,244,1,139,3,15,182,204,15, - 182,232,131,195,4,193,232,16,65,252,255,36,252,238,255,139,106,252,248,139, - 172,253,133,233,139,173,233,139,69,4,139,109,0,137,68,202,4,137,44,202,139, - 3,15,182,204,15,182,232,131,195,4,193,232,16,65,252,255,36,252,238,255,139, - 106,252,248,139,172,253,141,233,128,189,233,0,139,173,233,139,12,194,139, - 68,194,4,137,77,0,137,69,4,15,132,244,247,252,246,133,233,235,15,133,244, - 248,248,1,139,3,15,182,204,15,182,232,131,195,4,193,232,16,65,252,255,36, - 252,238,248,2,129,232,239,129,252,248,239,15,134,244,1,252,246,129,233,235, - 15,132,244,1,137,252,238,137,213,65,141,190,233,255,232,251,1,26,137,252, - 234,252,233,244,1,255,72,252,247,208,139,106,252,248,139,172,253,141,233, - 65,139,12,135,139,133,233,137,8,199,64,4,237,252,246,133,233,235,15,133,244, - 248,248,1,139,3,15,182,204,15,182,232,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, - 137,213,137,198,65,141,190,233,232,251,1,26,137,252,234,252,233,244,1,255, - 139,106,252,248,255,252,242,65,15,16,4,199,255,139,172,253,141,233,139,141, - 233,255,252,242,15,17,1,255,221,25,255,72,252,247,208,139,106,252,248,139, - 172,253,141,233,139,141,233,137,65,4,139,3,15,182,204,15,182,232,131,195, - 4,193,232,16,65,252,255,36,252,238,255,141,156,253,131,233,139,108,36,24, - 131,189,233,0,15,132,244,247,137,149,233,141,52,202,137,252,239,232,251,1, - 27,139,149,233,248,1,139,3,15,182,204,15,182,232,131,195,4,193,232,16,65, - 252,255,36,252,238,255,72,252,247,208,139,108,36,24,137,149,233,139,82,252, - 248,65,139,52,135,137,252,239,137,92,36,28,232,251,1,28,139,149,233,15,182, - 75,252,253,137,4,202,199,68,202,4,237,139,3,15,182,204,15,182,232,131,195, - 4,193,232,16,65,252,255,36,252,238,255,139,124,36,24,137,151,233,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, - 137,198,65,139,134,233,137,252,253,65,59,134,233,137,92,36,28,15,131,244, - 251,232,251,1,29,139,149,233,15,182,75,252,253,137,4,202,199,68,202,4,237, - 139,3,15,182,204,15,182,232,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,232,251,1,30,15,183,67,252,254,137,252, - 239,252,233,244,1,255,72,252,247,208,139,108,36,24,65,139,142,233,137,92, - 36,28,65,59,142,233,137,149,233,15,131,244,249,248,2,65,139,52,135,137,252, - 239,232,251,1,31,139,149,233,15,182,75,252,253,137,4,202,199,68,202,4,237, - 139,3,15,182,204,15,182,232,131,195,4,193,232,16,65,252,255,36,252,238,248, - 3,137,252,239,232,251,1,30,15,183,67,252,254,72,252,247,208,252,233,244,2, - 255,72,252,247,208,139,106,252,248,139,173,233,65,139,4,135,252,233,244,157, - 255,72,252,247,208,139,106,252,248,139,173,233,65,139,4,135,252,233,244,158, - 255,15,182,252,236,15,182,192,129,124,253,252,234,4,239,15,133,244,36,139, - 44,252,234,129,124,253,194,4,239,15,135,244,251,255,252,242,15,16,4,194,252, - 242,15,45,192,252,242,15,42,200,102,15,46,193,255,15,133,244,36,59,133,233, - 15,131,244,36,193,224,3,3,133,233,129,120,253,4,239,15,132,244,248,248,1, - 139,40,139,64,4,137,44,202,137,68,202,4,139,3,15,182,204,15,182,232,131,195, - 4,193,232,16,65,252,255,36,252,238,248,2,131,189,233,0,15,132,244,1,139,141, - 233,252,246,129,233,235,15,132,244,36,15,182,75,252,253,252,233,244,1,248, - 5,255,129,124,253,194,4,239,15,133,244,36,139,4,194,252,233,244,157,255,15, - 182,252,236,15,182,192,72,252,247,208,65,139,4,135,129,124,253,252,234,4, - 239,15,133,244,34,139,44,252,234,248,157,139,141,233,35,136,233,105,201,239, - 3,141,233,248,1,129,185,233,239,15,133,244,250,57,129,233,15,133,244,250, - 129,121,253,4,239,15,132,244,251,15,182,67,252,253,139,41,139,73,4,137,44, - 194,248,2,255,137,76,194,4,139,3,15,182,204,15,182,232,131,195,4,193,232, - 16,65,252,255,36,252,238,248,3,15,182,67,252,253,185,237,252,233,244,2,248, - 4,139,137,233,133,201,15,133,244,1,248,5,139,141,233,133,201,15,132,244,3, - 252,246,129,233,235,15,133,244,3,252,233,244,34,255,15,182,252,236,15,182, - 192,129,124,253,252,234,4,239,15,133,244,35,139,44,252,234,59,133,233,15, - 131,244,35,193,224,3,3,133,233,129,120,253,4,239,15,132,244,248,248,1,139, - 40,139,64,4,137,44,202,137,68,202,4,139,3,15,182,204,15,182,232,131,195,4, - 193,232,16,65,252,255,36,252,238,248,2,131,189,233,0,15,132,244,1,139,141, - 233,252,246,129,233,235,15,132,244,35,255,15,182,252,236,15,182,192,129,124, - 253,252,234,4,239,15,133,244,39,139,44,252,234,129,124,253,194,4,239,15,135, - 244,251,255,15,133,244,39,59,133,233,15,131,244,39,193,224,3,3,133,233,129, - 120,253,4,239,15,132,244,249,248,1,252,246,133,233,235,15,133,244,253,248, - 2,139,108,202,4,139,12,202,137,104,4,137,8,139,3,15,182,204,15,182,232,131, - 195,4,193,232,16,65,252,255,36,252,238,248,3,131,189,233,0,15,132,244,1,139, - 141,233,255,252,246,129,233,235,15,132,244,39,15,182,75,252,253,252,233,244, - 1,248,5,129,124,253,194,4,239,15,133,244,39,139,4,194,252,233,244,158,248, - 7,128,165,233,235,65,139,142,233,65,137,174,233,137,141,233,15,182,75,252, - 253,252,233,244,2,255,15,182,252,236,15,182,192,72,252,247,208,65,139,4,135, - 129,124,253,252,234,4,239,15,133,244,37,139,44,252,234,248,158,139,141,233, - 35,136,233,105,201,239,198,133,233,0,3,141,233,248,1,129,185,233,239,15,133, - 244,251,57,129,233,15,133,244,251,129,121,253,4,239,15,132,244,250,248,2, - 255,252,246,133,233,235,15,133,244,253,248,3,15,182,67,252,253,139,108,194, - 4,139,4,194,137,105,4,137,1,139,3,15,182,204,15,182,232,131,195,4,193,232, - 16,65,252,255,36,252,238,248,4,131,189,233,0,15,132,244,2,137,12,36,139,141, - 233,252,246,129,233,235,15,132,244,37,139,12,36,252,233,244,2,248,5,139,137, - 233,133,201,15,133,244,1,255,139,141,233,133,201,15,132,244,252,252,246,129, - 233,235,15,132,244,37,248,6,137,4,36,199,68,36,4,237,137,108,36,8,139,124, - 36,24,137,151,233,72,141,20,36,137,252,238,137,252,253,137,92,36,28,232,251, - 1,32,139,149,233,139,108,36,8,137,193,252,233,244,2,248,7,128,165,233,235, - 65,139,134,233,65,137,174,233,137,133,233,252,233,244,3,255,15,182,252,236, - 15,182,192,129,124,253,252,234,4,239,15,133,244,38,139,44,252,234,59,133, - 233,15,131,244,38,193,224,3,3,133,233,129,120,253,4,239,15,132,244,249,248, - 1,252,246,133,233,235,15,133,244,253,248,2,139,108,202,4,139,12,202,137,104, + 139,124,36,24,137,151,233,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,137,198,65,139,134,233,137,252,253,65, + 59,134,233,137,92,36,28,15,131,244,251,232,251,1,29,139,149,233,15,182,75, + 252,253,137,4,202,199,68,202,4,237,139,3,15,182,204,15,182,232,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,232, + 251,1,30,15,183,67,252,254,137,252,239,252,233,244,1,255,72,252,247,208,139, + 108,36,24,65,139,142,233,137,92,36,28,65,59,142,233,137,149,233,15,131,244, + 249,248,2,65,139,52,135,137,252,239,232,251,1,31,139,149,233,15,182,75,252, + 253,137,4,202,199,68,202,4,237,139,3,15,182,204,15,182,232,131,195,4,193, + 232,16,65,252,255,36,252,238,248,3,137,252,239,232,251,1,30,15,183,67,252, + 254,72,252,247,208,252,233,244,2,255,72,252,247,208,139,106,252,248,139,173, + 233,65,139,4,135,252,233,244,157,255,72,252,247,208,139,106,252,248,139,173, + 233,65,139,4,135,252,233,244,158,255,15,182,252,236,15,182,192,129,124,253, + 252,234,4,239,15,133,244,36,139,44,252,234,129,124,253,194,4,239,15,135,244, + 251,255,252,242,15,16,4,194,252,242,15,45,192,252,242,15,42,200,102,15,46, + 193,255,15,133,244,36,59,133,233,15,131,244,36,193,224,3,3,133,233,129,120, + 253,4,239,15,132,244,248,248,1,139,40,139,64,4,137,44,202,137,68,202,4,139, + 3,15,182,204,15,182,232,131,195,4,193,232,16,65,252,255,36,252,238,248,2, + 131,189,233,0,15,132,244,1,139,141,233,252,246,129,233,235,15,132,244,36, + 15,182,75,252,253,252,233,244,1,248,5,255,129,124,253,194,4,239,15,133,244, + 36,139,4,194,252,233,244,157,255,15,182,252,236,15,182,192,72,252,247,208, + 65,139,4,135,129,124,253,252,234,4,239,15,133,244,34,139,44,252,234,248,157, + 139,141,233,35,136,233,105,201,239,3,141,233,248,1,129,185,233,239,15,133, + 244,250,57,129,233,15,133,244,250,129,121,253,4,239,15,132,244,251,15,182, + 67,252,253,139,41,139,73,4,137,44,194,248,2,255,137,76,194,4,139,3,15,182, + 204,15,182,232,131,195,4,193,232,16,65,252,255,36,252,238,248,3,15,182,67, + 252,253,185,237,252,233,244,2,248,4,139,137,233,133,201,15,133,244,1,248, + 5,139,141,233,133,201,15,132,244,3,252,246,129,233,235,15,133,244,3,252,233, + 244,34,255,15,182,252,236,15,182,192,129,124,253,252,234,4,239,15,133,244, + 35,139,44,252,234,59,133,233,15,131,244,35,193,224,3,3,133,233,129,120,253, + 4,239,15,132,244,248,248,1,139,40,139,64,4,137,44,202,137,68,202,4,139,3, + 15,182,204,15,182,232,131,195,4,193,232,16,65,252,255,36,252,238,248,2,131, + 189,233,0,15,132,244,1,139,141,233,252,246,129,233,235,15,132,244,35,255, + 15,182,252,236,15,182,192,129,124,253,252,234,4,239,15,133,244,39,139,44, + 252,234,129,124,253,194,4,239,15,135,244,251,255,15,133,244,39,59,133,233, + 15,131,244,39,193,224,3,3,133,233,129,120,253,4,239,15,132,244,249,248,1, + 252,246,133,233,235,15,133,244,253,248,2,139,108,202,4,139,12,202,137,104, 4,137,8,139,3,15,182,204,15,182,232,131,195,4,193,232,16,65,252,255,36,252, - 238,248,3,131,189,233,0,15,132,244,1,255,139,141,233,252,246,129,233,235, - 15,132,244,38,15,182,75,252,253,252,233,244,1,248,7,128,165,233,235,65,139, - 142,233,65,137,174,233,137,141,233,15,182,75,252,253,252,233,244,2,255,68, - 137,60,36,255,252,242,69,15,45,60,199,255,248,1,141,12,202,139,105,252,248, - 252,246,133,233,235,15,133,244,253,248,2,139,68,36,4,131,232,1,15,132,244, - 250,68,1,252,248,59,133,233,15,131,244,251,68,41,252,248,65,193,231,3,68, - 3,189,233,248,3,139,41,65,137,47,139,105,4,131,193,8,65,137,111,4,65,131, - 199,8,131,232,1,15,133,244,3,248,4,68,139,60,36,139,3,15,182,204,15,182,232, - 131,195,4,193,232,16,65,252,255,36,252,238,248,5,139,124,36,24,137,151,233, - 137,252,238,137,194,137,252,253,137,92,36,28,232,251,1,33,139,149,233,15, - 182,75,252,253,252,233,244,1,248,7,255,128,165,233,235,65,139,134,233,65, - 137,174,233,137,133,233,252,233,244,2,255,3,68,36,4,255,129,124,253,202,4, - 239,139,44,202,15,133,244,51,141,84,202,8,137,90,252,252,139,157,233,139, - 11,15,182,252,233,15,182,205,131,195,4,65,252,255,36,252,238,255,141,76,202, - 8,65,137,215,139,105,252,248,129,121,253,252,252,239,15,133,244,28,248,52, - 139,90,252,252,252,247,195,237,15,133,244,253,248,1,137,106,252,248,137,68, - 36,4,131,232,1,15,132,244,249,248,2,139,41,65,137,47,139,105,4,65,137,111, - 4,65,131,199,8,131,193,8,131,232,1,15,133,244,2,139,106,252,248,248,3,139, - 68,36,4,128,189,233,1,15,135,244,251,248,4,139,157,233,139,11,15,182,252, - 233,15,182,205,131,195,4,65,252,255,36,252,238,248,5,255,252,247,195,237, - 15,133,244,4,15,182,75,252,253,72,252,247,209,141,12,202,68,139,121,252,248, - 69,139,191,233,69,139,191,233,252,233,244,4,248,7,15,139,244,1,131,227,252, - 248,41,218,65,137,215,139,90,252,252,252,233,244,1,255,141,76,202,8,139,105, - 232,139,65,252,236,137,41,137,65,4,139,105,252,240,139,65,252,244,137,105, - 8,137,65,12,139,105,224,139,65,228,137,105,252,248,137,65,252,252,129,252, - 248,239,184,237,15,133,244,28,137,202,137,90,252,252,139,157,233,139,11,15, - 182,252,233,15,182,205,131,195,4,65,252,255,36,252,238,255,15,182,252,236, - 139,66,252,248,141,12,202,139,128,233,15,182,128,233,68,137,60,36,68,141, - 188,253,194,233,68,43,122,252,252,133,252,237,15,132,244,251,141,108,252, - 233,252,248,65,57,215,15,131,244,248,248,1,65,139,71,252,248,137,1,65,139, - 71,252,252,65,131,199,8,137,65,4,131,193,8,57,252,233,15,131,244,249,65,57, - 215,15,130,244,1,248,2,199,65,4,237,131,193,8,57,252,233,15,130,244,2,248, - 3,68,139,60,36,139,3,15,182,204,15,182,232,131,195,4,193,232,16,65,252,255, - 36,252,238,248,5,199,68,36,4,1,0,0,0,137,208,68,41,252,248,15,134,244,3,255, - 137,197,193,252,237,3,131,197,1,137,108,36,4,139,108,36,24,1,200,59,133,233, - 15,135,244,253,248,6,65,139,71,252,248,137,1,65,139,71,252,252,65,131,199, - 8,137,65,4,131,193,8,65,57,215,15,130,244,6,252,233,244,3,248,7,137,149,233, - 137,141,233,137,92,36,28,65,41,215,139,116,36,4,131,252,238,1,137,252,239, - 232,251,1,0,139,149,233,139,141,233,65,1,215,252,233,244,6,255,193,225,3, - 255,248,1,139,90,252,252,137,68,36,4,252,247,195,237,15,133,244,253,255,248, - 13,65,137,215,131,232,1,15,132,244,249,248,2,65,139,44,15,65,137,111,252, - 248,65,139,108,15,4,65,137,111,252,252,65,131,199,8,131,232,1,15,133,244, - 2,248,3,139,68,36,4,15,182,107,252,255,248,5,57,197,15,135,244,252,255,139, - 108,10,4,137,106,252,252,139,44,10,137,106,252,248,255,248,5,56,67,252,255, - 15,135,244,252,255,15,182,75,252,253,72,252,247,209,141,20,202,68,139,122, - 252,248,69,139,191,233,69,139,191,233,139,3,15,182,204,15,182,232,131,195, - 4,193,232,16,65,252,255,36,252,238,248,6,255,65,199,71,252,252,237,65,131, - 199,8,255,199,68,194,252,244,237,255,131,192,1,252,233,244,5,248,7,15,139, - 244,14,131,227,252,248,41,218,255,1,217,255,137,221,209,252,237,129,229,239, - 102,65,131,172,253,46,233,1,15,132,244,140,255,141,12,202,255,129,121,253, - 4,239,15,135,244,53,129,121,253,12,239,15,135,244,53,255,139,105,20,255,129, - 252,253,239,15,135,244,53,255,252,242,15,16,1,252,242,15,16,73,8,255,252, - 242,15,88,65,16,252,242,15,17,1,133,252,237,15,136,244,249,255,15,140,244, - 249,255,102,15,46,200,248,1,252,242,15,17,65,24,255,221,65,8,221,1,255,220, - 65,16,221,17,221,81,24,133,252,237,15,136,244,247,255,221,81,24,15,140,244, - 247,255,217,201,248,1,255,15,183,67,252,254,255,15,131,244,248,141,156,253, - 131,233,255,141,156,253,131,233,15,183,67,252,254,15,131,245,255,15,130,244, - 248,141,156,253,131,233,255,248,3,102,15,46,193,252,233,244,1,255,141,12, - 202,139,105,4,129,252,253,239,15,132,244,247,255,137,105,252,252,139,41,137, - 105,252,248,252,233,245,255,141,156,253,131,233,139,1,137,105,252,252,137, - 65,252,248,255,65,139,142,233,139,4,193,72,139,128,233,139,108,36,24,65,137, - 150,233,65,137,174,233,76,137,36,36,76,137,108,36,8,72,131,252,236,16,252, - 255,224,255,141,156,253,131,233,139,3,15,182,204,15,182,232,131,195,4,193, - 232,16,65,252,255,36,252,238,255,137,221,209,252,237,129,229,239,102,65,131, - 172,253,46,233,1,15,132,244,142,255,68,139,187,233,139,108,36,24,141,12,202, - 59,141,233,15,135,244,23,15,182,139,233,57,200,15,134,244,249,248,2,255,15, - 183,67,252,254,252,233,245,255,248,3,199,68,194,252,252,237,131,192,1,57, - 200,15,134,244,3,252,233,244,2,255,141,44,197,237,141,4,194,68,139,122,252, - 248,137,104,252,252,68,137,120,252,248,139,108,36,24,141,12,200,59,141,233, - 15,135,244,22,137,209,137,194,15,182,171,233,133,252,237,15,132,244,248,248, - 1,131,193,8,57,209,15,131,244,249,68,139,121,252,248,68,137,56,68,139,121, - 252,252,68,137,120,4,131,192,8,199,65,252,252,237,131,252,237,1,15,133,244, - 1,248,2,255,68,139,187,233,139,3,15,182,204,15,182,232,131,195,4,193,232, - 16,65,252,255,36,252,238,255,248,3,199,64,4,237,131,192,8,131,252,237,1,15, - 133,244,3,252,233,244,2,255,139,106,252,248,76,139,189,233,139,108,36,24, - 141,68,194,252,248,137,149,233,141,136,233,59,141,233,137,133,233,255,137, - 252,239,255,76,137,252,254,137,252,239,255,15,135,244,21,65,199,134,233,237, - 255,65,252,255,215,255,65,252,255,150,233,255,65,199,134,233,237,139,149, - 233,141,12,194,252,247,217,3,141,233,139,90,252,252,252,233,244,12,255,254, - 0 + 238,248,3,131,189,233,0,15,132,244,1,139,141,233,255,252,246,129,233,235, + 15,132,244,39,15,182,75,252,253,252,233,244,1,248,5,129,124,253,194,4,239, + 15,133,244,39,139,4,194,252,233,244,158,248,7,128,165,233,235,65,139,142, + 233,65,137,174,233,137,141,233,15,182,75,252,253,252,233,244,2,255,15,182, + 252,236,15,182,192,72,252,247,208,65,139,4,135,129,124,253,252,234,4,239, + 15,133,244,37,139,44,252,234,248,158,139,141,233,35,136,233,105,201,239,198, + 133,233,0,3,141,233,248,1,129,185,233,239,15,133,244,251,57,129,233,15,133, + 244,251,129,121,253,4,239,15,132,244,250,248,2,255,252,246,133,233,235,15, + 133,244,253,248,3,15,182,67,252,253,139,108,194,4,139,4,194,137,105,4,137, + 1,139,3,15,182,204,15,182,232,131,195,4,193,232,16,65,252,255,36,252,238, + 248,4,131,189,233,0,15,132,244,2,137,12,36,139,141,233,252,246,129,233,235, + 15,132,244,37,139,12,36,252,233,244,2,248,5,139,137,233,133,201,15,133,244, + 1,255,139,141,233,133,201,15,132,244,252,252,246,129,233,235,15,132,244,37, + 248,6,137,4,36,199,68,36,4,237,137,108,36,8,139,124,36,24,137,151,233,72, + 141,20,36,137,252,238,137,252,253,137,92,36,28,232,251,1,32,139,149,233,139, + 108,36,8,137,193,252,233,244,2,248,7,128,165,233,235,65,139,134,233,65,137, + 174,233,137,133,233,252,233,244,3,255,15,182,252,236,15,182,192,129,124,253, + 252,234,4,239,15,133,244,38,139,44,252,234,59,133,233,15,131,244,38,193,224, + 3,3,133,233,129,120,253,4,239,15,132,244,249,248,1,252,246,133,233,235,15, + 133,244,253,248,2,139,108,202,4,139,12,202,137,104,4,137,8,139,3,15,182,204, + 15,182,232,131,195,4,193,232,16,65,252,255,36,252,238,248,3,131,189,233,0, + 15,132,244,1,255,139,141,233,252,246,129,233,235,15,132,244,38,15,182,75, + 252,253,252,233,244,1,248,7,128,165,233,235,65,139,142,233,65,137,174,233, + 137,141,233,15,182,75,252,253,252,233,244,2,255,68,137,60,36,255,252,242, + 69,15,45,60,199,255,248,1,141,12,202,139,105,252,248,252,246,133,233,235, + 15,133,244,253,248,2,139,68,36,4,131,232,1,15,132,244,250,68,1,252,248,59, + 133,233,15,131,244,251,68,41,252,248,65,193,231,3,68,3,189,233,248,3,139, + 41,65,137,47,139,105,4,131,193,8,65,137,111,4,65,131,199,8,131,232,1,15,133, + 244,3,248,4,68,139,60,36,139,3,15,182,204,15,182,232,131,195,4,193,232,16, + 65,252,255,36,252,238,248,5,139,124,36,24,137,151,233,137,252,238,137,194, + 137,252,253,137,92,36,28,232,251,1,33,139,149,233,15,182,75,252,253,252,233, + 244,1,248,7,255,128,165,233,235,65,139,134,233,65,137,174,233,137,133,233, + 252,233,244,2,255,3,68,36,4,255,129,124,253,202,4,239,139,44,202,15,133,244, + 51,141,84,202,8,137,90,252,252,139,157,233,139,11,15,182,252,233,15,182,205, + 131,195,4,65,252,255,36,252,238,255,141,76,202,8,65,137,215,139,105,252,248, + 129,121,253,252,252,239,15,133,244,28,248,52,139,90,252,252,252,247,195,237, + 15,133,244,253,248,1,137,106,252,248,137,68,36,4,131,232,1,15,132,244,249, + 248,2,139,41,65,137,47,139,105,4,65,137,111,4,65,131,199,8,131,193,8,131, + 232,1,15,133,244,2,139,106,252,248,248,3,139,68,36,4,128,189,233,1,15,135, + 244,251,248,4,139,157,233,139,11,15,182,252,233,15,182,205,131,195,4,65,252, + 255,36,252,238,248,5,255,252,247,195,237,15,133,244,4,15,182,75,252,253,72, + 252,247,209,141,12,202,68,139,121,252,248,69,139,191,233,69,139,191,233,252, + 233,244,4,248,7,15,139,244,1,131,227,252,248,41,218,65,137,215,139,90,252, + 252,252,233,244,1,255,141,76,202,8,139,105,232,139,65,252,236,137,41,137, + 65,4,139,105,252,240,139,65,252,244,137,105,8,137,65,12,139,105,224,139,65, + 228,137,105,252,248,137,65,252,252,129,252,248,239,184,237,15,133,244,28, + 137,202,137,90,252,252,139,157,233,139,11,15,182,252,233,15,182,205,131,195, + 4,65,252,255,36,252,238,255,15,182,252,236,139,66,252,248,141,12,202,139, + 128,233,15,182,128,233,68,137,60,36,68,141,188,253,194,233,68,43,122,252, + 252,133,252,237,15,132,244,251,141,108,252,233,252,248,65,57,215,15,131,244, + 248,248,1,65,139,71,252,248,137,1,65,139,71,252,252,65,131,199,8,137,65,4, + 131,193,8,57,252,233,15,131,244,249,65,57,215,15,130,244,1,248,2,199,65,4, + 237,131,193,8,57,252,233,15,130,244,2,248,3,68,139,60,36,139,3,15,182,204, + 15,182,232,131,195,4,193,232,16,65,252,255,36,252,238,248,5,199,68,36,4,1, + 0,0,0,137,208,68,41,252,248,15,134,244,3,255,137,197,193,252,237,3,131,197, + 1,137,108,36,4,139,108,36,24,1,200,59,133,233,15,135,244,253,248,6,65,139, + 71,252,248,137,1,65,139,71,252,252,65,131,199,8,137,65,4,131,193,8,65,57, + 215,15,130,244,6,252,233,244,3,248,7,137,149,233,137,141,233,137,92,36,28, + 65,41,215,139,116,36,4,131,252,238,1,137,252,239,232,251,1,0,139,149,233, + 139,141,233,65,1,215,252,233,244,6,255,193,225,3,255,248,1,139,90,252,252, + 137,68,36,4,252,247,195,237,15,133,244,253,255,248,13,65,137,215,131,232, + 1,15,132,244,249,248,2,65,139,44,15,65,137,111,252,248,65,139,108,15,4,65, + 137,111,252,252,65,131,199,8,131,232,1,15,133,244,2,248,3,139,68,36,4,15, + 182,107,252,255,248,5,57,197,15,135,244,252,255,139,108,10,4,137,106,252, + 252,139,44,10,137,106,252,248,255,248,5,56,67,252,255,15,135,244,252,255, + 15,182,75,252,253,72,252,247,209,141,20,202,68,139,122,252,248,69,139,191, + 233,69,139,191,233,139,3,15,182,204,15,182,232,131,195,4,193,232,16,65,252, + 255,36,252,238,248,6,255,65,199,71,252,252,237,65,131,199,8,255,199,68,194, + 252,244,237,255,131,192,1,252,233,244,5,248,7,15,139,244,14,131,227,252,248, + 41,218,255,1,217,255,137,221,209,252,237,129,229,239,102,65,131,172,253,46, + 233,1,15,132,244,140,255,141,12,202,255,129,121,253,4,239,15,135,244,53,129, + 121,253,12,239,15,135,244,53,255,139,105,20,255,129,252,253,239,15,135,244, + 53,255,252,242,15,16,1,252,242,15,16,73,8,255,252,242,15,88,65,16,252,242, + 15,17,1,133,252,237,15,136,244,249,255,15,140,244,249,255,102,15,46,200,248, + 1,252,242,15,17,65,24,255,221,65,8,221,1,255,220,65,16,221,17,221,81,24,133, + 252,237,15,136,244,247,255,221,81,24,15,140,244,247,255,217,201,248,1,255, + 15,183,67,252,254,255,15,131,244,248,141,156,253,131,233,255,141,156,253, + 131,233,15,183,67,252,254,15,131,245,255,15,130,244,248,141,156,253,131,233, + 255,248,3,102,15,46,193,252,233,244,1,255,141,12,202,139,105,4,129,252,253, + 239,15,132,244,247,255,137,105,252,252,139,41,137,105,252,248,252,233,245, + 255,141,156,253,131,233,139,1,137,105,252,252,137,65,252,248,255,65,139,142, + 233,139,4,193,72,139,128,233,139,108,36,24,65,137,150,233,65,137,174,233, + 76,137,36,36,76,137,108,36,8,72,131,252,236,16,252,255,224,255,141,156,253, + 131,233,139,3,15,182,204,15,182,232,131,195,4,193,232,16,65,252,255,36,252, + 238,255,137,221,209,252,237,129,229,239,102,65,131,172,253,46,233,1,15,132, + 244,142,255,68,139,187,233,139,108,36,24,141,12,202,59,141,233,15,135,244, + 23,15,182,139,233,57,200,15,134,244,249,248,2,255,15,183,67,252,254,252,233, + 245,255,248,3,199,68,194,252,252,237,131,192,1,57,200,15,134,244,3,252,233, + 244,2,255,141,44,197,237,141,4,194,68,139,122,252,248,137,104,252,252,68, + 137,120,252,248,139,108,36,24,141,12,200,59,141,233,15,135,244,22,137,209, + 137,194,15,182,171,233,133,252,237,15,132,244,248,248,1,131,193,8,57,209, + 15,131,244,249,68,139,121,252,248,68,137,56,68,139,121,252,252,68,137,120, + 4,131,192,8,199,65,252,252,237,131,252,237,1,15,133,244,1,248,2,255,68,139, + 187,233,139,3,15,182,204,15,182,232,131,195,4,193,232,16,65,252,255,36,252, + 238,255,248,3,199,64,4,237,131,192,8,131,252,237,1,15,133,244,3,252,233,244, + 2,255,139,106,252,248,76,139,189,233,139,108,36,24,141,68,194,252,248,137, + 149,233,141,136,233,59,141,233,137,133,233,255,137,252,239,255,76,137,252, + 254,137,252,239,255,15,135,244,21,65,199,134,233,237,255,65,252,255,215,255, + 65,252,255,150,233,255,65,199,134,233,237,139,149,233,141,12,194,252,247, + 217,3,141,233,139,90,252,252,252,233,244,12,255,254,0 }; enum { @@ -1367,62 +1367,62 @@ static void build_subroutines(BuildCtx *ctx, int cmov, int sse) #endif dasm_put(Dst, 7296, Dt1(->base), Dt1(->top)); #if LJ_HASJIT - dasm_put(Dst, 7327, DISPATCH_GL(vmstate), DISPATCH_GL(vmstate), ~LJ_VMST_EXIT, DISPATCH_J(exitno), DISPATCH_J(parent), 16*8, DISPATCH_GL(jit_L), DISPATCH_GL(jit_base), DISPATCH_J(L), Dt1(->base), GG_DISP2J, Dt1(->cframe), CFRAME_RAWMASK, CFRAME_OFS_L, Dt1(->base), CFRAME_OFS_PC); + dasm_put(Dst, 7327, DISPATCH_GL(vmstate), DISPATCH_GL(vmstate), ~LJ_VMST_EXIT, DISPATCH_J(exitno), DISPATCH_J(parent), 16*8, DISPATCH_GL(jit_L), DISPATCH_GL(jit_base), DISPATCH_J(L), DISPATCH_GL(jit_L), Dt1(->base), GG_DISP2J, Dt1(->cframe), CFRAME_RAWMASK, CFRAME_OFS_L, Dt1(->base), CFRAME_OFS_PC); #endif - dasm_put(Dst, 7558); + dasm_put(Dst, 7566); #if LJ_HASJIT - dasm_put(Dst, 7561, Dt7(->pc), PC2PROTO(k), DISPATCH_GL(jit_L), DISPATCH_GL(vmstate), ~LJ_VMST_INTERP, BC_FUNCF); + dasm_put(Dst, 7569, Dt7(->pc), PC2PROTO(k), DISPATCH_GL(jit_L), DISPATCH_GL(vmstate), ~LJ_VMST_INTERP, BC_FUNCF); #endif - dasm_put(Dst, 7661); + dasm_put(Dst, 7669); if (!sse) { - dasm_put(Dst, 7664); + dasm_put(Dst, 7672); } - dasm_put(Dst, 7709, (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)); + dasm_put(Dst, 7717, (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)); if (!sse) { - dasm_put(Dst, 7795); + dasm_put(Dst, 7803); } - dasm_put(Dst, 7840, (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)); + dasm_put(Dst, 7848, (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)); if (!sse) { - dasm_put(Dst, 7926); + dasm_put(Dst, 7934); } - dasm_put(Dst, 7965, (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)); + dasm_put(Dst, 7973, (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)); if (sse) { - dasm_put(Dst, 8054, (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)); + dasm_put(Dst, 8062, (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)); } else { - dasm_put(Dst, 8168); + dasm_put(Dst, 8176); } - dasm_put(Dst, 8215); + dasm_put(Dst, 8223); if (!sse) { } else { - dasm_put(Dst, 8292); + dasm_put(Dst, 8300); } - dasm_put(Dst, 8295); - dasm_put(Dst, 8380, (unsigned int)(U64x(3ff00000,00000000)), (unsigned int)((U64x(3ff00000,00000000))>>32), (unsigned int)(U64x(3ff00000,00000000)), (unsigned int)((U64x(3ff00000,00000000))>>32)); - dasm_put(Dst, 8481, (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(3ff00000,00000000)), (unsigned int)((U64x(3ff00000,00000000))>>32), (unsigned int)(U64x(7ff00000,00000000)), (unsigned int)((U64x(7ff00000,00000000))>>32)); - dasm_put(Dst, 8655); + dasm_put(Dst, 8303); + dasm_put(Dst, 8388, (unsigned int)(U64x(3ff00000,00000000)), (unsigned int)((U64x(3ff00000,00000000))>>32), (unsigned int)(U64x(3ff00000,00000000)), (unsigned int)((U64x(3ff00000,00000000))>>32)); + dasm_put(Dst, 8489, (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(3ff00000,00000000)), (unsigned int)((U64x(3ff00000,00000000))>>32), (unsigned int)(U64x(7ff00000,00000000)), (unsigned int)((U64x(7ff00000,00000000))>>32)); + dasm_put(Dst, 8663); if (sse) { - dasm_put(Dst, 8696); - dasm_put(Dst, 8766); - dasm_put(Dst, 8838); + dasm_put(Dst, 8704); + dasm_put(Dst, 8774); + dasm_put(Dst, 8846); } else { - dasm_put(Dst, 8890); - dasm_put(Dst, 8982); + dasm_put(Dst, 8898); + dasm_put(Dst, 8990); } - dasm_put(Dst, 9028); + dasm_put(Dst, 9036); if (sse) { - dasm_put(Dst, 9034, (unsigned int)(U64x(80000000,00000000)), (unsigned int)((U64x(80000000,00000000))>>32)); - dasm_put(Dst, 9119, (unsigned int)(U64x(7fffffff,ffffffff)), (unsigned int)((U64x(7fffffff,ffffffff))>>32)); + dasm_put(Dst, 9042, (unsigned int)(U64x(80000000,00000000)), (unsigned int)((U64x(80000000,00000000))>>32)); + dasm_put(Dst, 9127, (unsigned int)(U64x(7fffffff,ffffffff)), (unsigned int)((U64x(7fffffff,ffffffff))>>32)); } else { - dasm_put(Dst, 9247); - dasm_put(Dst, 9330); + dasm_put(Dst, 9255); + dasm_put(Dst, 9338); if (cmov) { - dasm_put(Dst, 9385); + dasm_put(Dst, 9393); } else { - dasm_put(Dst, 9404); + dasm_put(Dst, 9412); } - dasm_put(Dst, 9243); + dasm_put(Dst, 9251); } - dasm_put(Dst, 9445); + dasm_put(Dst, 9453); } /* Generate the code for a single instruction. */ @@ -1438,595 +1438,595 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop, int cmov, int sse) /* Remember: all ops branch for a true comparison, fall through otherwise. */ case BC_ISLT: case BC_ISGE: case BC_ISLE: case BC_ISGT: - dasm_put(Dst, 9467, LJ_TISNUM, LJ_TISNUM); + dasm_put(Dst, 9475, LJ_TISNUM, LJ_TISNUM); if (sse) { - dasm_put(Dst, 9488); + dasm_put(Dst, 9496); } else { - dasm_put(Dst, 9503); + dasm_put(Dst, 9511); if (cmov) { - dasm_put(Dst, 9513); + dasm_put(Dst, 9521); } else { - dasm_put(Dst, 9519); + dasm_put(Dst, 9527); } } switch (op) { case BC_ISLT: - dasm_put(Dst, 9526); + dasm_put(Dst, 9534); break; case BC_ISGE: - dasm_put(Dst, 9325); + dasm_put(Dst, 9333); break; case BC_ISLE: dasm_put(Dst, 5942); break; case BC_ISGT: - dasm_put(Dst, 9531); + dasm_put(Dst, 9539); break; default: break; /* Shut up GCC. */ } - dasm_put(Dst, 9536, -BCBIAS_J*4); + dasm_put(Dst, 9544, -BCBIAS_J*4); break; case BC_ISEQV: case BC_ISNEV: vk = op == BC_ISEQV; - dasm_put(Dst, 9571, LJ_TISNUM, LJ_TISNUM); + dasm_put(Dst, 9579, LJ_TISNUM, LJ_TISNUM); if (sse) { - dasm_put(Dst, 9597); + dasm_put(Dst, 9605); } else { - dasm_put(Dst, 9609); + dasm_put(Dst, 9617); if (cmov) { - dasm_put(Dst, 9513); + dasm_put(Dst, 9521); } else { - dasm_put(Dst, 9519); + dasm_put(Dst, 9527); } } iseqne_fp: if (vk) { - dasm_put(Dst, 9616); + dasm_put(Dst, 9624); } else { - dasm_put(Dst, 9625); + dasm_put(Dst, 9633); } iseqne_end: if (vk) { - dasm_put(Dst, 9634, -BCBIAS_J*4); + dasm_put(Dst, 9642, -BCBIAS_J*4); } else { - dasm_put(Dst, 9649, -BCBIAS_J*4); + dasm_put(Dst, 9657, -BCBIAS_J*4); } - dasm_put(Dst, 9550); + dasm_put(Dst, 9558); if (op == BC_ISEQV || op == BC_ISNEV) { - dasm_put(Dst, 9664, LJ_TISPRI, LJ_TISTABUD, Dt6(->metatable), Dt6(->nomm), 1<metatable), Dt6(->nomm), 1<>32)); + dasm_put(Dst, 9966, (unsigned int)(U64x(80000000,00000000)), (unsigned int)((U64x(80000000,00000000))>>32)); } else { - dasm_put(Dst, 9983); + dasm_put(Dst, 9991); } - dasm_put(Dst, 9550); + dasm_put(Dst, 9558); break; case BC_LEN: - dasm_put(Dst, 9992, LJ_TSTR); + dasm_put(Dst, 10000, LJ_TSTR); if (sse) { - dasm_put(Dst, 10006, Dt5(->len)); + dasm_put(Dst, 10014, Dt5(->len)); } else { - dasm_put(Dst, 10024, Dt5(->len)); + dasm_put(Dst, 10032, Dt5(->len)); } - dasm_put(Dst, 10033, LJ_TTAB); + dasm_put(Dst, 10041, LJ_TTAB); if (sse) { - dasm_put(Dst, 10075); + dasm_put(Dst, 10083); } else { } - dasm_put(Dst, 10084); + dasm_put(Dst, 10092); break; /* -- Binary ops -------------------------------------------------------- */ case BC_ADDVN: case BC_ADDNV: case BC_ADDVV: - dasm_put(Dst, 10094); + dasm_put(Dst, 10102); vk = ((int)op - BC_ADDVN) / (BC_ADDNV-BC_ADDVN); switch (vk) { case 0: - dasm_put(Dst, 10102, LJ_TISNUM); + dasm_put(Dst, 10110, LJ_TISNUM); if (sse) { - dasm_put(Dst, 10114); + dasm_put(Dst, 10122); } else { - dasm_put(Dst, 10129); + dasm_put(Dst, 10137); } break; case 1: - dasm_put(Dst, 10138, LJ_TISNUM); + dasm_put(Dst, 10146, LJ_TISNUM); if (sse) { - dasm_put(Dst, 10150); + dasm_put(Dst, 10158); } else { - dasm_put(Dst, 10165); + dasm_put(Dst, 10173); } break; default: - dasm_put(Dst, 10174, LJ_TISNUM, LJ_TISNUM); + dasm_put(Dst, 10182, LJ_TISNUM, LJ_TISNUM); if (sse) { - dasm_put(Dst, 10196); + dasm_put(Dst, 10204); } else { - dasm_put(Dst, 10210); + dasm_put(Dst, 10218); } break; } if (sse) { - dasm_put(Dst, 9976); + dasm_put(Dst, 9984); } else { - dasm_put(Dst, 9988); + dasm_put(Dst, 9996); } - dasm_put(Dst, 9550); + dasm_put(Dst, 9558); break; case BC_SUBVN: case BC_SUBNV: case BC_SUBVV: - dasm_put(Dst, 10094); + dasm_put(Dst, 10102); vk = ((int)op - BC_ADDVN) / (BC_ADDNV-BC_ADDVN); switch (vk) { case 0: - dasm_put(Dst, 10102, LJ_TISNUM); + dasm_put(Dst, 10110, LJ_TISNUM); if (sse) { - dasm_put(Dst, 10218); + dasm_put(Dst, 10226); } else { - dasm_put(Dst, 10233); + dasm_put(Dst, 10241); } break; case 1: - dasm_put(Dst, 10138, LJ_TISNUM); + dasm_put(Dst, 10146, LJ_TISNUM); if (sse) { - dasm_put(Dst, 10242); + dasm_put(Dst, 10250); } else { - dasm_put(Dst, 10257); + dasm_put(Dst, 10265); } break; default: - dasm_put(Dst, 10174, LJ_TISNUM, LJ_TISNUM); + dasm_put(Dst, 10182, LJ_TISNUM, LJ_TISNUM); if (sse) { - dasm_put(Dst, 10266); + dasm_put(Dst, 10274); } else { - dasm_put(Dst, 10280); + dasm_put(Dst, 10288); } break; } if (sse) { - dasm_put(Dst, 9976); + dasm_put(Dst, 9984); } else { - dasm_put(Dst, 9988); + dasm_put(Dst, 9996); } - dasm_put(Dst, 9550); + dasm_put(Dst, 9558); break; case BC_MULVN: case BC_MULNV: case BC_MULVV: - dasm_put(Dst, 10094); + dasm_put(Dst, 10102); vk = ((int)op - BC_ADDVN) / (BC_ADDNV-BC_ADDVN); switch (vk) { case 0: - dasm_put(Dst, 10102, LJ_TISNUM); + dasm_put(Dst, 10110, LJ_TISNUM); if (sse) { - dasm_put(Dst, 10288); + dasm_put(Dst, 10296); } else { - dasm_put(Dst, 10303); + dasm_put(Dst, 10311); } break; case 1: - dasm_put(Dst, 10138, LJ_TISNUM); + dasm_put(Dst, 10146, LJ_TISNUM); if (sse) { - dasm_put(Dst, 10312); + dasm_put(Dst, 10320); } else { - dasm_put(Dst, 10327); + dasm_put(Dst, 10335); } break; default: - dasm_put(Dst, 10174, LJ_TISNUM, LJ_TISNUM); + dasm_put(Dst, 10182, LJ_TISNUM, LJ_TISNUM); if (sse) { - dasm_put(Dst, 10336); + dasm_put(Dst, 10344); } else { - dasm_put(Dst, 10350); + dasm_put(Dst, 10358); } break; } if (sse) { - dasm_put(Dst, 9976); + dasm_put(Dst, 9984); } else { - dasm_put(Dst, 9988); + dasm_put(Dst, 9996); } - dasm_put(Dst, 9550); + dasm_put(Dst, 9558); break; case BC_DIVVN: case BC_DIVNV: case BC_DIVVV: - dasm_put(Dst, 10094); + dasm_put(Dst, 10102); vk = ((int)op - BC_ADDVN) / (BC_ADDNV-BC_ADDVN); switch (vk) { case 0: - dasm_put(Dst, 10102, LJ_TISNUM); + dasm_put(Dst, 10110, LJ_TISNUM); if (sse) { - dasm_put(Dst, 10358); + dasm_put(Dst, 10366); } else { - dasm_put(Dst, 10373); + dasm_put(Dst, 10381); } break; case 1: - dasm_put(Dst, 10138, LJ_TISNUM); + dasm_put(Dst, 10146, LJ_TISNUM); if (sse) { - dasm_put(Dst, 10382); + dasm_put(Dst, 10390); } else { - dasm_put(Dst, 10397); + dasm_put(Dst, 10405); } break; default: - dasm_put(Dst, 10174, LJ_TISNUM, LJ_TISNUM); + dasm_put(Dst, 10182, LJ_TISNUM, LJ_TISNUM); if (sse) { - dasm_put(Dst, 10406); + dasm_put(Dst, 10414); } else { - dasm_put(Dst, 10420); + dasm_put(Dst, 10428); } break; } if (sse) { - dasm_put(Dst, 9976); + dasm_put(Dst, 9984); } else { - dasm_put(Dst, 9988); + dasm_put(Dst, 9996); } - dasm_put(Dst, 9550); + dasm_put(Dst, 9558); break; case BC_MODVN: - dasm_put(Dst, 10094); + dasm_put(Dst, 10102); vk = ((int)op - BC_ADDVN) / (BC_ADDNV-BC_ADDVN); switch (vk) { case 0: - dasm_put(Dst, 10102, LJ_TISNUM); + dasm_put(Dst, 10110, LJ_TISNUM); if (sse) { - dasm_put(Dst, 10428); + dasm_put(Dst, 10436); } else { - dasm_put(Dst, 10443); + dasm_put(Dst, 10451); } break; case 1: - dasm_put(Dst, 10138, LJ_TISNUM); + dasm_put(Dst, 10146, LJ_TISNUM); if (sse) { - dasm_put(Dst, 10452); + dasm_put(Dst, 10460); } else { - dasm_put(Dst, 10467); + dasm_put(Dst, 10475); } break; default: - dasm_put(Dst, 10174, LJ_TISNUM, LJ_TISNUM); + dasm_put(Dst, 10182, LJ_TISNUM, LJ_TISNUM); if (sse) { - dasm_put(Dst, 10476); + dasm_put(Dst, 10484); } else { - dasm_put(Dst, 10490); + dasm_put(Dst, 10498); } break; } - dasm_put(Dst, 10498); + dasm_put(Dst, 10506); if (sse) { - dasm_put(Dst, 9976); + dasm_put(Dst, 9984); } else { - dasm_put(Dst, 9988); + dasm_put(Dst, 9996); } - dasm_put(Dst, 9550); + dasm_put(Dst, 9558); break; case BC_MODNV: case BC_MODVV: - dasm_put(Dst, 10094); + dasm_put(Dst, 10102); vk = ((int)op - BC_ADDVN) / (BC_ADDNV-BC_ADDVN); switch (vk) { case 0: - dasm_put(Dst, 10102, LJ_TISNUM); + dasm_put(Dst, 10110, LJ_TISNUM); if (sse) { - dasm_put(Dst, 10428); + dasm_put(Dst, 10436); } else { - dasm_put(Dst, 10443); + dasm_put(Dst, 10451); } break; case 1: - dasm_put(Dst, 10138, LJ_TISNUM); + dasm_put(Dst, 10146, LJ_TISNUM); if (sse) { - dasm_put(Dst, 10452); + dasm_put(Dst, 10460); } else { - dasm_put(Dst, 10467); + dasm_put(Dst, 10475); } break; default: - dasm_put(Dst, 10174, LJ_TISNUM, LJ_TISNUM); + dasm_put(Dst, 10182, LJ_TISNUM, LJ_TISNUM); if (sse) { - dasm_put(Dst, 10476); + dasm_put(Dst, 10484); } else { - dasm_put(Dst, 10490); + dasm_put(Dst, 10498); } break; } - dasm_put(Dst, 10504); + dasm_put(Dst, 10512); break; case BC_POW: - dasm_put(Dst, 10094); + dasm_put(Dst, 10102); vk = ((int)op - BC_ADDVN) / (BC_ADDNV-BC_ADDVN); switch (vk) { case 0: - dasm_put(Dst, 10102, LJ_TISNUM); + dasm_put(Dst, 10110, LJ_TISNUM); if (sse) { - dasm_put(Dst, 10428); + dasm_put(Dst, 10436); } else { - dasm_put(Dst, 10443); + dasm_put(Dst, 10451); } break; case 1: - dasm_put(Dst, 10138, LJ_TISNUM); + dasm_put(Dst, 10146, LJ_TISNUM); if (sse) { - dasm_put(Dst, 10452); + dasm_put(Dst, 10460); } else { - dasm_put(Dst, 10467); + dasm_put(Dst, 10475); } break; default: - dasm_put(Dst, 10174, LJ_TISNUM, LJ_TISNUM); + dasm_put(Dst, 10182, LJ_TISNUM, LJ_TISNUM); if (sse) { - dasm_put(Dst, 10476); + dasm_put(Dst, 10484); } else { - dasm_put(Dst, 10490); + dasm_put(Dst, 10498); } break; } - dasm_put(Dst, 10509); + dasm_put(Dst, 10517); if (sse) { - dasm_put(Dst, 9976); + dasm_put(Dst, 9984); } else { - dasm_put(Dst, 9988); + dasm_put(Dst, 9996); } - dasm_put(Dst, 9550); + dasm_put(Dst, 9558); break; case BC_CAT: - dasm_put(Dst, 10513, Dt1(->base), Dt1(->base)); + dasm_put(Dst, 10521, Dt1(->base), Dt1(->base)); break; /* -- Constant ops ------------------------------------------------------ */ case BC_KSTR: - dasm_put(Dst, 10604, LJ_TSTR); + dasm_put(Dst, 10612, LJ_TSTR); break; case BC_KSHORT: if (sse) { - dasm_put(Dst, 10641); + dasm_put(Dst, 10649); } else { - dasm_put(Dst, 10656); + dasm_put(Dst, 10664); } - dasm_put(Dst, 9550); + dasm_put(Dst, 9558); break; case BC_KNUM: if (sse) { - dasm_put(Dst, 10664); + dasm_put(Dst, 10672); } else { - dasm_put(Dst, 10678); + dasm_put(Dst, 10686); } - dasm_put(Dst, 9550); + dasm_put(Dst, 9558); break; case BC_KPRI: - dasm_put(Dst, 10686); + dasm_put(Dst, 10694); break; case BC_KNIL: - dasm_put(Dst, 10715, LJ_TNIL); + dasm_put(Dst, 10723, LJ_TNIL); break; /* -- Upvalue and function ops ------------------------------------------ */ case BC_UGET: - dasm_put(Dst, 10763, offsetof(GCfuncL, uvptr), DtA(->v)); + dasm_put(Dst, 10771, offsetof(GCfuncL, uvptr), DtA(->v)); break; case BC_USETV: #define TV2MARKOFS \ ((int32_t)offsetof(GCupval, marked)-(int32_t)offsetof(GCupval, tv)) - dasm_put(Dst, 10809, offsetof(GCfuncL, uvptr), DtA(->closed), DtA(->v), TV2MARKOFS, LJ_GC_BLACK, LJ_TISGCV, LJ_TISNUM - LJ_TISGCV, Dt4(->gch.marked), LJ_GC_WHITES, GG_DISP2G); - dasm_put(Dst, 10905); + dasm_put(Dst, 10817, offsetof(GCfuncL, uvptr), DtA(->closed), DtA(->v), TV2MARKOFS, LJ_GC_BLACK, LJ_TISGCV, LJ_TISNUM - LJ_TISGCV, Dt4(->gch.marked), LJ_GC_WHITES, GG_DISP2G); + dasm_put(Dst, 10913); break; #undef TV2MARKOFS case BC_USETS: - dasm_put(Dst, 10917, offsetof(GCfuncL, uvptr), DtA(->v), LJ_TSTR, DtA(->marked), LJ_GC_BLACK, Dt4(->gch.marked), LJ_GC_WHITES, DtA(->closed), GG_DISP2G); + dasm_put(Dst, 10925, offsetof(GCfuncL, uvptr), DtA(->v), LJ_TSTR, DtA(->marked), LJ_GC_BLACK, Dt4(->gch.marked), LJ_GC_WHITES, DtA(->closed), GG_DISP2G); break; case BC_USETN: - dasm_put(Dst, 11013); + dasm_put(Dst, 11021); if (sse) { - dasm_put(Dst, 11018); + dasm_put(Dst, 11026); } else { - dasm_put(Dst, 9792); + dasm_put(Dst, 9800); } - dasm_put(Dst, 11026, offsetof(GCfuncL, uvptr), DtA(->v)); + dasm_put(Dst, 11034, offsetof(GCfuncL, uvptr), DtA(->v)); if (sse) { - dasm_put(Dst, 11035); + dasm_put(Dst, 11043); } else { - dasm_put(Dst, 11041); + dasm_put(Dst, 11049); } - dasm_put(Dst, 9550); + dasm_put(Dst, 9558); break; case BC_USETP: - dasm_put(Dst, 11044, offsetof(GCfuncL, uvptr), DtA(->v)); + dasm_put(Dst, 11052, offsetof(GCfuncL, uvptr), DtA(->v)); break; case BC_UCLO: - dasm_put(Dst, 11084, -BCBIAS_J*4, Dt1(->openupval), Dt1(->base), Dt1(->base)); + dasm_put(Dst, 11092, -BCBIAS_J*4, Dt1(->openupval), Dt1(->base), Dt1(->base)); break; case BC_FNEW: - dasm_put(Dst, 11140, Dt1(->base), Dt1(->base), LJ_TFUNC); + dasm_put(Dst, 11148, Dt1(->base), Dt1(->base), LJ_TFUNC); break; /* -- Table ops --------------------------------------------------------- */ case BC_TNEW: - dasm_put(Dst, 11207, Dt1(->base), DISPATCH_GL(gc.total), DISPATCH_GL(gc.threshold), Dt1(->base), LJ_TTAB); + dasm_put(Dst, 11215, Dt1(->base), DISPATCH_GL(gc.total), DISPATCH_GL(gc.threshold), Dt1(->base), LJ_TTAB); break; case BC_TDUP: - dasm_put(Dst, 11331, DISPATCH_GL(gc.total), DISPATCH_GL(gc.threshold), Dt1(->base), Dt1(->base), LJ_TTAB); + dasm_put(Dst, 11339, DISPATCH_GL(gc.total), DISPATCH_GL(gc.threshold), Dt1(->base), Dt1(->base), LJ_TTAB); break; case BC_GGET: - dasm_put(Dst, 11430, Dt7(->env)); + dasm_put(Dst, 11438, Dt7(->env)); break; case BC_GSET: - dasm_put(Dst, 11450, Dt7(->env)); + dasm_put(Dst, 11458, Dt7(->env)); break; case BC_TGETV: - dasm_put(Dst, 11470, LJ_TTAB, LJ_TISNUM); + dasm_put(Dst, 11478, LJ_TTAB, LJ_TISNUM); if (sse) { - dasm_put(Dst, 11503); + dasm_put(Dst, 11511); } else { } - dasm_put(Dst, 11524, Dt6(->asize), Dt6(->array), LJ_TNIL, Dt6(->metatable), Dt6(->metatable), Dt6(->nomm), 1<asize), Dt6(->array), LJ_TNIL, Dt6(->metatable), Dt6(->metatable), Dt6(->nomm), 1<hmask), Dt5(->hash), sizeof(Node), Dt6(->node), DtB(->key.it), LJ_TSTR, DtB(->key.gcr), LJ_TNIL); - dasm_put(Dst, 11722, LJ_TNIL, DtB(->next), Dt6(->metatable), Dt6(->nomm), 1<hmask), Dt5(->hash), sizeof(Node), Dt6(->node), DtB(->key.it), LJ_TSTR, DtB(->key.gcr), LJ_TNIL); + dasm_put(Dst, 11730, LJ_TNIL, DtB(->next), Dt6(->metatable), Dt6(->nomm), 1<asize), Dt6(->array), LJ_TNIL, Dt6(->metatable), Dt6(->metatable), Dt6(->nomm), 1<asize), Dt6(->array), LJ_TNIL, Dt6(->metatable), Dt6(->metatable), Dt6(->nomm), 1<asize), Dt6(->array), LJ_TNIL, Dt6(->marked), LJ_GC_BLACK, Dt6(->metatable), Dt6(->metatable)); - dasm_put(Dst, 12014, Dt6(->nomm), 1<marked), cast_byte(~LJ_GC_BLACK), DISPATCH_GL(gc.grayagain), DISPATCH_GL(gc.grayagain), Dt6(->gclist)); + dasm_put(Dst, 11937, Dt6(->asize), Dt6(->array), LJ_TNIL, Dt6(->marked), LJ_GC_BLACK, Dt6(->metatable), Dt6(->metatable)); + dasm_put(Dst, 12022, Dt6(->nomm), 1<marked), cast_byte(~LJ_GC_BLACK), DISPATCH_GL(gc.grayagain), DISPATCH_GL(gc.grayagain), Dt6(->gclist)); break; case BC_TSETS: - dasm_put(Dst, 12078, LJ_TTAB, Dt6(->hmask), Dt5(->hash), sizeof(Node), Dt6(->nomm), Dt6(->node), DtB(->key.it), LJ_TSTR, DtB(->key.gcr), LJ_TNIL); - dasm_put(Dst, 12155, Dt6(->marked), LJ_GC_BLACK, Dt6(->metatable), Dt6(->metatable), Dt6(->nomm), 1<next)); - dasm_put(Dst, 12247, Dt6(->metatable), Dt6(->nomm), 1<base), Dt1(->base), Dt6(->marked), cast_byte(~LJ_GC_BLACK), DISPATCH_GL(gc.grayagain), DISPATCH_GL(gc.grayagain), Dt6(->gclist)); + dasm_put(Dst, 12086, LJ_TTAB, Dt6(->hmask), Dt5(->hash), sizeof(Node), Dt6(->nomm), Dt6(->node), DtB(->key.it), LJ_TSTR, DtB(->key.gcr), LJ_TNIL); + dasm_put(Dst, 12163, Dt6(->marked), LJ_GC_BLACK, Dt6(->metatable), Dt6(->metatable), Dt6(->nomm), 1<next)); + dasm_put(Dst, 12255, Dt6(->metatable), Dt6(->nomm), 1<base), Dt1(->base), Dt6(->marked), cast_byte(~LJ_GC_BLACK), DISPATCH_GL(gc.grayagain), DISPATCH_GL(gc.grayagain), Dt6(->gclist)); break; case BC_TSETB: - dasm_put(Dst, 12339, LJ_TTAB, Dt6(->asize), Dt6(->array), LJ_TNIL, Dt6(->marked), LJ_GC_BLACK, Dt6(->metatable)); - dasm_put(Dst, 12439, Dt6(->metatable), Dt6(->nomm), 1<marked), cast_byte(~LJ_GC_BLACK), DISPATCH_GL(gc.grayagain), DISPATCH_GL(gc.grayagain), Dt6(->gclist)); + dasm_put(Dst, 12347, LJ_TTAB, Dt6(->asize), Dt6(->array), LJ_TNIL, Dt6(->marked), LJ_GC_BLACK, Dt6(->metatable)); + dasm_put(Dst, 12447, Dt6(->metatable), Dt6(->nomm), 1<marked), cast_byte(~LJ_GC_BLACK), DISPATCH_GL(gc.grayagain), DISPATCH_GL(gc.grayagain), Dt6(->gclist)); break; case BC_TSETM: - dasm_put(Dst, 12487); + dasm_put(Dst, 12495); if (sse) { - dasm_put(Dst, 12492); + dasm_put(Dst, 12500); } else { } - dasm_put(Dst, 12500, Dt6(->marked), LJ_GC_BLACK, Dt6(->asize), Dt6(->array), Dt1(->base), Dt1(->base)); - dasm_put(Dst, 12648, Dt6(->marked), cast_byte(~LJ_GC_BLACK), DISPATCH_GL(gc.grayagain), DISPATCH_GL(gc.grayagain), Dt6(->gclist)); + dasm_put(Dst, 12508, Dt6(->marked), LJ_GC_BLACK, Dt6(->asize), Dt6(->array), Dt1(->base), Dt1(->base)); + dasm_put(Dst, 12656, Dt6(->marked), cast_byte(~LJ_GC_BLACK), DISPATCH_GL(gc.grayagain), DISPATCH_GL(gc.grayagain), Dt6(->gclist)); break; /* -- Calls and vararg handling ----------------------------------------- */ case BC_CALL: case BC_CALLM: - dasm_put(Dst, 10098); + dasm_put(Dst, 10106); if (op == BC_CALLM) { - dasm_put(Dst, 12668); + dasm_put(Dst, 12676); } - dasm_put(Dst, 12673, LJ_TFUNC, Dt7(->pc)); + dasm_put(Dst, 12681, LJ_TFUNC, Dt7(->pc)); break; case BC_CALLMT: - dasm_put(Dst, 12668); + dasm_put(Dst, 12676); break; case BC_CALLT: - dasm_put(Dst, 12716, LJ_TFUNC, FRAME_TYPE, Dt7(->ffid), Dt7(->pc)); - dasm_put(Dst, 12840, FRAME_TYPE, Dt7(->pc), PC2PROTO(k)); + dasm_put(Dst, 12724, LJ_TFUNC, FRAME_TYPE, Dt7(->ffid), Dt7(->pc)); + dasm_put(Dst, 12848, FRAME_TYPE, Dt7(->pc), PC2PROTO(k)); break; case BC_ITERC: - dasm_put(Dst, 12901, LJ_TFUNC, 2+1, Dt7(->pc)); + dasm_put(Dst, 12909, LJ_TFUNC, 2+1, Dt7(->pc)); break; case BC_VARG: - dasm_put(Dst, 12983, Dt7(->pc), PC2PROTO(numparams), (8+FRAME_VARG), LJ_TNIL); - dasm_put(Dst, 13137, Dt1(->maxstack), Dt1(->base), Dt1(->top), Dt1(->base), Dt1(->top)); + dasm_put(Dst, 12991, Dt7(->pc), PC2PROTO(numparams), (8+FRAME_VARG), LJ_TNIL); + dasm_put(Dst, 13145, Dt1(->maxstack), Dt1(->base), Dt1(->top), Dt1(->base), Dt1(->top)); break; /* -- Returns ----------------------------------------------------------- */ case BC_RETM: - dasm_put(Dst, 12668); + dasm_put(Dst, 12676); break; case BC_RET: case BC_RET0: case BC_RET1: if (op != BC_RET0) { - dasm_put(Dst, 13242); + dasm_put(Dst, 13250); } - dasm_put(Dst, 13246, FRAME_TYPE); + dasm_put(Dst, 13254, FRAME_TYPE); switch (op) { case BC_RET: - dasm_put(Dst, 13265); + dasm_put(Dst, 13273); break; case BC_RET1: - dasm_put(Dst, 13329); + dasm_put(Dst, 13337); /* fallthrough */ case BC_RET0: - dasm_put(Dst, 13345); + dasm_put(Dst, 13353); default: break; } - dasm_put(Dst, 13356, Dt7(->pc), PC2PROTO(k)); + dasm_put(Dst, 13364, Dt7(->pc), PC2PROTO(k)); if (op == BC_RET) { - dasm_put(Dst, 13404, LJ_TNIL); + dasm_put(Dst, 13412, LJ_TNIL); } else { - dasm_put(Dst, 13415, LJ_TNIL); + dasm_put(Dst, 13423, LJ_TNIL); } - dasm_put(Dst, 13422); + dasm_put(Dst, 13430); if (op != BC_RET0) { - dasm_put(Dst, 13442); + dasm_put(Dst, 13450); } dasm_put(Dst, 4596); break; @@ -2036,7 +2036,7 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop, int cmov, int sse) case BC_FORL: #if LJ_HASJIT - dasm_put(Dst, 13445, HOTCOUNT_PCMASK, GG_DISP2HOT); + dasm_put(Dst, 13453, HOTCOUNT_PCMASK, GG_DISP2HOT); #endif break; @@ -2048,57 +2048,57 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop, int cmov, int sse) case BC_FORI: case BC_IFORL: vk = (op == BC_IFORL || op == BC_JFORL); - dasm_put(Dst, 13466); + dasm_put(Dst, 13474); if (!vk) { - dasm_put(Dst, 13470, LJ_TISNUM, LJ_TISNUM); + dasm_put(Dst, 13478, LJ_TISNUM, LJ_TISNUM); } - dasm_put(Dst, 13489); + dasm_put(Dst, 13497); if (!vk) { - dasm_put(Dst, 13493, LJ_TISNUM); + dasm_put(Dst, 13501, LJ_TISNUM); } if (sse) { - dasm_put(Dst, 13502); + dasm_put(Dst, 13510); if (vk) { - dasm_put(Dst, 13514); + dasm_put(Dst, 13522); } else { - dasm_put(Dst, 13533); + dasm_put(Dst, 13541); } - dasm_put(Dst, 13538); + dasm_put(Dst, 13546); } else { - dasm_put(Dst, 13551); + dasm_put(Dst, 13559); if (vk) { - dasm_put(Dst, 13557); + dasm_put(Dst, 13565); } else { - dasm_put(Dst, 13573); + dasm_put(Dst, 13581); } - dasm_put(Dst, 13581); + dasm_put(Dst, 13589); if (cmov) { - dasm_put(Dst, 9513); + dasm_put(Dst, 9521); } else { - dasm_put(Dst, 9519); + dasm_put(Dst, 9527); } if (!cmov) { - dasm_put(Dst, 13586); + dasm_put(Dst, 13594); } } if (op == BC_FORI) { - dasm_put(Dst, 13592, -BCBIAS_J*4); + dasm_put(Dst, 13600, -BCBIAS_J*4); } else if (op == BC_JFORI) { - dasm_put(Dst, 13602, -BCBIAS_J*4, BC_JLOOP); + dasm_put(Dst, 13610, -BCBIAS_J*4, BC_JLOOP); } else if (op == BC_IFORL) { - dasm_put(Dst, 13616, -BCBIAS_J*4); + dasm_put(Dst, 13624, -BCBIAS_J*4); } else { - dasm_put(Dst, 13612, BC_JLOOP); + dasm_put(Dst, 13620, BC_JLOOP); } - dasm_put(Dst, 9548); + dasm_put(Dst, 9556); if (sse) { - dasm_put(Dst, 13626); + dasm_put(Dst, 13634); } break; case BC_ITERL: #if LJ_HASJIT - dasm_put(Dst, 13445, HOTCOUNT_PCMASK, GG_DISP2HOT); + dasm_put(Dst, 13453, HOTCOUNT_PCMASK, GG_DISP2HOT); #endif break; @@ -2107,33 +2107,33 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop, int cmov, int sse) break; #endif case BC_IITERL: - dasm_put(Dst, 13637, LJ_TNIL); + dasm_put(Dst, 13645, LJ_TNIL); if (op == BC_JITERL) { - dasm_put(Dst, 13652, BC_JLOOP); + dasm_put(Dst, 13660, BC_JLOOP); } else { - dasm_put(Dst, 13666, -BCBIAS_J*4); + dasm_put(Dst, 13674, -BCBIAS_J*4); } - dasm_put(Dst, 9852); + dasm_put(Dst, 9860); break; case BC_LOOP: #if LJ_HASJIT - dasm_put(Dst, 13445, HOTCOUNT_PCMASK, GG_DISP2HOT); + dasm_put(Dst, 13453, HOTCOUNT_PCMASK, GG_DISP2HOT); #endif break; case BC_ILOOP: - dasm_put(Dst, 9550); + dasm_put(Dst, 9558); break; case BC_JLOOP: #if LJ_HASJIT - dasm_put(Dst, 13682, DISPATCH_J(trace), DtD(->mcode), DISPATCH_GL(jit_base), DISPATCH_GL(jit_L)); + dasm_put(Dst, 13690, DISPATCH_J(trace), DtD(->mcode), DISPATCH_GL(jit_base), DISPATCH_GL(jit_L)); #endif break; case BC_JMP: - dasm_put(Dst, 13723, -BCBIAS_J*4); + dasm_put(Dst, 13731, -BCBIAS_J*4); break; /* -- Function headers -------------------------------------------------- */ @@ -2147,7 +2147,7 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop, int cmov, int sse) case BC_FUNCF: #if LJ_HASJIT - dasm_put(Dst, 13749, HOTCOUNT_PCMASK, GG_DISP2HOT); + dasm_put(Dst, 13757, HOTCOUNT_PCMASK, GG_DISP2HOT); #endif case BC_FUNCV: /* NYI: compiled vararg functions. */ break; @@ -2157,47 +2157,47 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop, int cmov, int sse) break; #endif case BC_IFUNCF: - dasm_put(Dst, 13770, -4+PC2PROTO(k), Dt1(->maxstack), -4+PC2PROTO(numparams)); + dasm_put(Dst, 13778, -4+PC2PROTO(k), Dt1(->maxstack), -4+PC2PROTO(numparams)); if (op == BC_JFUNCF) { - dasm_put(Dst, 13801, BC_JLOOP); + dasm_put(Dst, 13809, BC_JLOOP); } else { - dasm_put(Dst, 9550); + dasm_put(Dst, 9558); } - dasm_put(Dst, 13810, LJ_TNIL); + dasm_put(Dst, 13818, LJ_TNIL); break; case BC_JFUNCV: #if !LJ_HASJIT break; #endif - dasm_put(Dst, 9245); + dasm_put(Dst, 9253); break; /* NYI: compiled vararg functions. */ case BC_IFUNCV: - dasm_put(Dst, 13832, FRAME_VARG, Dt1(->maxstack), -4+PC2PROTO(numparams), LJ_TNIL); + dasm_put(Dst, 13840, FRAME_VARG, Dt1(->maxstack), -4+PC2PROTO(numparams), LJ_TNIL); if (op == BC_JFUNCV) { - dasm_put(Dst, 13801, BC_JLOOP); + dasm_put(Dst, 13809, BC_JLOOP); } else { - dasm_put(Dst, 13929, -4+PC2PROTO(k)); + dasm_put(Dst, 13937, -4+PC2PROTO(k)); } - dasm_put(Dst, 13954, LJ_TNIL); + dasm_put(Dst, 13962, LJ_TNIL); break; case BC_FUNCC: case BC_FUNCCW: - dasm_put(Dst, 13976, Dt8(->f), Dt1(->base), 8*LUA_MINSTACK, Dt1(->maxstack), Dt1(->top)); + dasm_put(Dst, 13984, Dt8(->f), Dt1(->base), 8*LUA_MINSTACK, Dt1(->maxstack), Dt1(->top)); if (op == BC_FUNCC) { - dasm_put(Dst, 14006); + dasm_put(Dst, 14014); } else { - dasm_put(Dst, 14010); + dasm_put(Dst, 14018); } - dasm_put(Dst, 14018, DISPATCH_GL(vmstate), ~LJ_VMST_C); + dasm_put(Dst, 14026, DISPATCH_GL(vmstate), ~LJ_VMST_C); if (op == BC_FUNCC) { - dasm_put(Dst, 14028); + dasm_put(Dst, 14036); } else { - dasm_put(Dst, 14033, DISPATCH_GL(wrapf)); + dasm_put(Dst, 14041, DISPATCH_GL(wrapf)); } - dasm_put(Dst, 14039, DISPATCH_GL(vmstate), ~LJ_VMST_INTERP, Dt1(->base), Dt1(->top)); + dasm_put(Dst, 14047, DISPATCH_GL(vmstate), ~LJ_VMST_INTERP, Dt1(->base), Dt1(->top)); break; /* ---------------------------------------------------------------------- */ @@ -2225,7 +2225,7 @@ static int build_backend(BuildCtx *ctx) build_subroutines(ctx, cmov, sse); - dasm_put(Dst, 14065); + dasm_put(Dst, 14073); for (op = 0; op < BC__MAX; op++) build_ins(ctx, (BCOp)op, op, cmov, sse); diff --git a/src/buildvm_x64win.h b/src/buildvm_x64win.h index b5cc4679..e1b243f4 100644 --- a/src/buildvm_x64win.h +++ b/src/buildvm_x64win.h @@ -12,7 +12,7 @@ #define DASM_SECTION_CODE_OP 0 #define DASM_SECTION_CODE_SUB 1 #define DASM_MAXSECTION 2 -static const unsigned char build_actionlist[14016] = { +static const unsigned char build_actionlist[14023] = { 254,1,248,10,252,247,198,237,15,132,244,11,131,230,252,248,41,252,242,72, 141,76,49,252,248,139,114,252,252,199,68,10,4,237,248,12,131,192,1,137,68, 36,84,252,247,198,237,15,132,244,13,248,14,252,247,198,237,15,132,244,10, @@ -376,288 +376,288 @@ static const unsigned char build_actionlist[14016] = { 15,17,77,200,252,242,68,15,17,69,192,252,242,15,17,125,184,252,242,15,17, 117,176,252,242,15,17,109,168,252,242,15,17,101,160,252,242,15,17,93,152, 252,242,15,17,85,144,252,242,15,17,77,136,252,242,15,17,69,128,139,171,233, - 139,147,233,72,137,171,233,137,149,233,72,141,148,253,36,233,141,139,233, - 232,251,1,23,72,139,141,233,72,129,225,239,137,169,233,139,149,233,139,177, - 233,252,233,244,247,255,248,144,255,72,141,140,253,36,233,248,1,102,68,15, - 111,185,233,102,68,15,111,177,233,102,68,15,111,169,233,102,68,15,111,161, - 233,102,68,15,111,153,233,102,68,15,111,145,233,102,68,15,111,137,233,102, - 68,15,111,129,233,102,15,111,185,233,72,137,204,102,15,111,49,76,139,124, - 36,16,76,139,116,36,24,76,139,108,36,32,76,139,100,36,80,133,192,15,136,244, - 249,137,68,36,84,139,122,252,248,139,191,233,139,191,233,199,131,233,0,0, - 0,0,199,131,233,237,139,6,15,182,204,15,182,232,131,198,4,193,232,16,129, - 252,253,239,15,130,244,248,255,139,68,36,84,248,2,252,255,36,252,235,248, - 3,252,247,216,137,252,233,137,194,232,251,1,24,255,248,82,255,217,124,36, - 4,137,68,36,8,102,184,0,4,102,11,68,36,4,102,37,252,255,252,247,102,137,68, - 36,6,217,108,36,6,217,252,252,217,108,36,4,139,68,36,8,195,255,248,145,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,1,102,15,84,194,252,242,15,92,200,15,40,193,248,1,195,248,84,255, - 217,124,36,4,137,68,36,8,102,184,0,8,102,11,68,36,4,102,37,252,255,252,251, - 102,137,68,36,6,217,108,36,6,217,252,252,217,108,36,4,139,68,36,8,195,255, - 248,146,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,104,255,217,124,36,4,137,68,36,8,102,184,0,12,102,11,68,36,4,102,137, - 68,36,6,217,108,36,6,217,252,252,217,108,36,4,139,68,36,8,195,255,248,147, - 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,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, - 148,255,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,255,217,193,216,252,241,217,124,36,4, - 102,184,0,4,102,11,68,36,4,102,37,252,255,252,247,102,137,68,36,6,217,108, - 36,6,217,252,252,217,108,36,4,222,201,222,252,233,195,255,248,88,217,252, - 234,222,201,248,149,217,84,36,8,129,124,36,8,0,0,128,127,15,132,244,247,129, - 124,36,8,0,0,128,252,255,15,132,244,248,248,150,217,192,217,252,252,220,252, - 233,217,201,217,252,240,217,232,222,193,217,252,253,221,217,248,1,195,248, - 2,221,216,217,252,238,195,255,248,107,255,248,151,252,242,15,45,193,252,242, - 15,42,208,102,15,46,202,15,133,244,254,15,138,244,255,248,152,131,252,248, - 1,15,142,244,252,248,1,169,1,0,0,0,15,133,244,248,252,242,15,89,192,209,232, - 252,233,244,1,248,2,209,232,15,132,244,251,15,40,200,248,3,252,242,15,89, - 192,209,232,15,132,244,250,15,131,244,3,255,252,242,15,89,200,252,233,244, - 3,248,4,252,242,15,89,193,248,5,195,248,6,15,132,244,5,15,130,244,253,80, - 72,184,237,237,102,72,15,110,200,252,242,15,94,200,88,15,40,193,252,247,216, - 131,252,248,1,15,132,244,5,252,233,244,1,248,7,72,184,237,237,102,72,15,110, - 192,195,248,8,102,72,15,126,200,72,209,224,72,193,192,12,72,61,252,254,15, - 0,0,15,132,244,248,255,102,72,15,126,192,72,209,224,15,132,244,250,72,193, - 192,12,72,61,252,254,15,0,0,15,132,244,251,252,242,15,17,76,36,16,252,242, - 15,17,68,36,8,221,68,36,16,221,68,36,8,217,252,241,217,192,217,252,252,220, - 252,233,217,201,217,252,240,217,232,222,193,217,252,253,221,217,221,92,36, - 8,252,242,15,16,68,36,8,195,248,9,72,184,237,237,102,72,15,110,208,102,15, - 46,194,15,132,244,247,15,40,193,248,1,195,248,2,72,184,237,237,102,72,15, - 110,208,102,15,84,194,72,184,237,237,102,72,15,110,208,102,15,46,194,15,132, - 244,1,102,15,80,193,15,87,192,136,196,15,146,208,48,224,15,133,244,1,248, - 3,72,184,237,237,255,102,72,15,110,192,195,248,4,102,15,80,193,133,192,15, - 133,244,3,15,87,192,195,248,5,102,15,80,193,133,192,15,132,244,3,15,87,192, - 195,248,153,255,131,252,250,1,15,130,244,82,15,132,244,84,131,252,250,3,15, - 130,244,104,15,135,244,248,252,242,15,81,192,195,248,2,252,242,15,17,68,36, - 8,221,68,36,8,131,252,250,5,15,135,244,248,88,15,132,244,247,232,244,88,80, - 252,233,244,253,248,1,232,244,149,255,80,252,233,244,253,248,2,131,252,250, - 7,15,132,244,247,15,135,244,248,217,252,237,217,201,217,252,241,252,233,244, - 253,248,1,217,232,217,201,217,252,241,252,233,244,253,248,2,131,252,250,9, - 15,132,244,247,15,135,244,248,217,252,236,217,201,217,252,241,252,233,244, - 253,248,1,255,217,252,254,252,233,244,253,248,2,131,252,250,11,15,132,244, - 247,15,135,244,255,217,252,255,252,233,244,253,248,1,217,252,242,221,216, - 248,7,221,92,36,8,252,242,15,16,68,36,8,195,255,139,84,36,12,221,68,36,4, - 131,252,250,1,15,130,244,82,15,132,244,84,131,252,250,3,15,130,244,104,15, - 135,244,248,217,252,250,195,248,2,131,252,250,5,15,130,244,88,15,132,244, - 149,131,252,250,7,15,132,244,247,15,135,244,248,217,252,237,217,201,217,252, - 241,195,248,1,217,232,217,201,217,252,241,195,248,2,131,252,250,9,15,132, - 244,247,255,15,135,244,248,217,252,236,217,201,217,252,241,195,248,1,217, - 252,254,195,248,2,131,252,250,11,15,132,244,247,15,135,244,255,217,252,255, - 195,248,1,217,252,242,221,216,195,255,248,9,204,248,154,255,65,131,252,248, - 1,15,132,244,247,15,135,244,248,252,242,15,88,193,195,248,1,252,242,15,92, - 193,195,248,2,65,131,252,248,3,15,132,244,247,15,135,244,248,252,242,15,89, - 193,195,248,1,252,242,15,94,193,195,248,2,65,131,252,248,5,15,130,244,148, - 15,132,244,107,65,131,252,248,7,15,132,244,247,15,135,244,248,72,184,237, - 237,255,102,72,15,110,200,15,87,193,195,248,1,72,184,237,237,102,72,15,110, - 200,15,84,193,195,248,2,65,131,252,248,9,15,135,244,248,252,242,15,17,68, - 36,8,252,242,15,17,76,36,16,221,68,36,8,221,68,36,16,15,132,244,247,217,252, - 243,248,7,221,92,36,8,252,242,15,16,68,36,8,195,248,1,217,201,217,252,253, - 221,217,252,233,244,7,248,2,65,131,252,248,11,15,132,244,247,15,135,244,255, - 252,242,15,93,193,195,248,1,252,242,15,95,193,195,248,9,204,255,139,68,36, - 20,221,68,36,4,221,68,36,12,131,252,248,1,15,132,244,247,15,135,244,248,222, - 193,195,248,1,222,252,233,195,248,2,131,252,248,3,15,132,244,247,15,135,244, - 248,222,201,195,248,1,222,252,249,195,248,2,131,252,248,5,15,130,244,148, - 15,132,244,107,131,252,248,7,15,132,244,247,15,135,244,248,255,221,216,217, - 224,195,248,1,221,216,217,225,195,248,2,131,252,248,9,15,132,244,247,15,135, - 244,248,217,252,243,195,248,1,217,201,217,252,253,221,217,195,248,2,131,252, - 248,11,15,132,244,247,15,135,244,255,255,219,252,233,219,209,221,217,195, - 248,1,219,252,233,218,209,221,217,195,255,221,225,223,224,252,246,196,1,15, - 132,244,248,217,201,248,2,221,216,195,248,1,221,225,223,224,252,246,196,1, - 15,133,244,248,217,201,248,2,221,216,195,255,248,155,137,200,86,72,137,214, - 83,15,162,137,6,137,94,4,137,78,8,137,86,12,91,94,195,255,129,124,253,202, - 4,239,15,135,244,41,129,124,253,194,4,239,15,135,244,41,255,252,242,15,16, - 4,194,131,198,4,102,15,46,4,202,255,221,4,202,221,4,194,131,198,4,255,223, - 252,233,221,216,255,218,252,233,223,224,158,255,15,134,244,248,255,15,131, - 244,248,255,248,1,15,183,70,252,254,141,180,253,134,233,248,2,139,6,15,182, - 204,15,182,232,131,198,4,193,232,16,252,255,36,252,235,255,139,108,194,4, - 131,198,4,129,252,253,239,15,135,244,251,129,124,253,202,4,239,15,135,244, - 251,255,252,242,15,16,4,194,102,15,46,4,202,255,221,4,202,221,4,194,255,15, - 138,244,248,15,133,244,248,255,15,138,244,248,15,132,244,247,255,248,1,15, - 183,70,252,254,141,180,253,134,233,248,2,255,248,2,15,183,70,252,254,141, - 180,253,134,233,248,1,255,248,5,57,108,202,4,15,133,244,2,129,252,253,239, - 15,131,244,1,139,12,202,139,4,194,57,193,15,132,244,1,129,252,253,239,15, - 135,244,2,139,169,233,133,252,237,15,132,244,2,252,246,133,233,235,15,133, - 244,2,255,49,252,237,255,189,1,0,0,0,255,252,233,244,45,255,72,252,247,208, - 131,198,4,129,124,253,202,4,239,15,133,244,248,139,12,202,59,12,135,255,131, - 198,4,129,124,253,202,4,239,15,135,244,248,255,252,242,15,16,4,199,102,15, - 46,4,202,255,221,4,202,221,4,199,255,72,252,247,208,131,198,4,57,68,202,4, - 255,139,108,194,4,131,198,4,129,252,253,239,255,15,131,244,247,255,15,130, - 244,247,255,137,108,202,4,139,44,194,137,44,202,255,15,183,70,252,254,141, - 180,253,134,233,248,1,139,6,15,182,204,15,182,232,131,198,4,193,232,16,252, - 255,36,252,235,255,139,108,194,4,139,4,194,137,108,202,4,137,4,202,139,6, - 15,182,204,15,182,232,131,198,4,193,232,16,252,255,36,252,235,255,49,252, - 237,129,124,253,194,4,239,129,213,239,137,108,202,4,139,6,15,182,204,15,182, - 232,131,198,4,193,232,16,252,255,36,252,235,255,129,124,253,194,4,239,15, - 135,244,48,255,252,242,15,16,4,194,72,184,237,237,102,72,15,110,200,15,87, - 193,252,242,15,17,4,202,255,221,4,194,217,224,221,28,202,255,129,124,253, - 194,4,239,15,133,244,248,139,4,194,255,15,87,192,252,242,15,42,128,233,248, - 1,252,242,15,17,4,202,255,219,128,233,248,1,221,28,202,255,139,6,15,182,204, - 15,182,232,131,198,4,193,232,16,252,255,36,252,235,248,2,129,124,253,194, - 4,239,15,133,244,50,139,12,194,137,213,232,251,1,18,255,252,242,15,42,192, - 137,252,234,255,15,182,78,252,253,252,233,244,1,255,15,182,252,236,15,182, - 192,255,129,124,253,252,234,4,239,15,135,244,46,255,252,242,15,16,4,252,234, - 252,242,15,88,4,199,255,221,4,252,234,220,4,199,255,129,124,253,252,234,4, - 239,15,135,244,47,255,252,242,15,16,4,199,252,242,15,88,4,252,234,255,221, - 4,199,220,4,252,234,255,129,124,253,252,234,4,239,15,135,244,49,129,124,253, - 194,4,239,15,135,244,49,255,252,242,15,16,4,252,234,252,242,15,88,4,194,255, - 221,4,252,234,220,4,194,255,252,242,15,16,4,252,234,252,242,15,92,4,199,255, - 221,4,252,234,220,36,199,255,252,242,15,16,4,199,252,242,15,92,4,252,234, - 255,221,4,199,220,36,252,234,255,252,242,15,16,4,252,234,252,242,15,92,4, - 194,255,221,4,252,234,220,36,194,255,252,242,15,16,4,252,234,252,242,15,89, - 4,199,255,221,4,252,234,220,12,199,255,252,242,15,16,4,199,252,242,15,89, - 4,252,234,255,221,4,199,220,12,252,234,255,252,242,15,16,4,252,234,252,242, - 15,89,4,194,255,221,4,252,234,220,12,194,255,252,242,15,16,4,252,234,252, - 242,15,94,4,199,255,221,4,252,234,220,52,199,255,252,242,15,16,4,199,252, - 242,15,94,4,252,234,255,221,4,199,220,52,252,234,255,252,242,15,16,4,252, - 234,252,242,15,94,4,194,255,221,4,252,234,220,52,194,255,252,242,15,16,4, - 252,234,252,242,15,16,12,199,255,221,4,252,234,221,4,199,255,252,242,15,16, - 4,199,252,242,15,16,12,252,234,255,221,4,199,221,4,252,234,255,252,242,15, - 16,4,252,234,252,242,15,16,12,194,255,221,4,252,234,221,4,194,255,248,156, - 232,244,148,255,252,233,244,156,255,232,244,107,255,15,182,252,236,15,182, - 192,139,76,36,96,137,145,233,141,20,194,65,137,192,65,41,232,248,33,137,205, - 137,116,36,100,232,251,1,25,139,149,233,133,192,15,133,244,42,15,182,110, - 252,255,15,182,78,252,253,139,68,252,234,4,139,44,252,234,137,68,202,4,137, - 44,202,139,6,15,182,204,15,182,232,131,198,4,193,232,16,252,255,36,252,235, - 255,72,252,247,208,139,4,135,199,68,202,4,237,137,4,202,139,6,15,182,204, - 15,182,232,131,198,4,193,232,16,252,255,36,252,235,255,15,191,192,252,242, - 15,42,192,252,242,15,17,4,202,255,223,70,252,254,221,28,202,255,252,242,15, - 16,4,199,252,242,15,17,4,202,255,221,4,199,221,28,202,255,72,252,247,208, - 137,68,202,4,139,6,15,182,204,15,182,232,131,198,4,193,232,16,252,255,36, - 252,235,255,141,76,202,12,141,68,194,4,189,237,137,105,252,248,248,1,137, - 41,131,193,8,57,193,15,134,244,1,139,6,15,182,204,15,182,232,131,198,4,193, - 232,16,252,255,36,252,235,255,139,106,252,248,139,172,253,133,233,139,173, - 233,139,69,4,139,109,0,137,68,202,4,137,44,202,139,6,15,182,204,15,182,232, - 131,198,4,193,232,16,252,255,36,252,235,255,139,106,252,248,139,172,253,141, - 233,128,189,233,0,139,173,233,139,12,194,139,68,194,4,137,77,0,137,69,4,15, - 132,244,247,252,246,133,233,235,15,133,244,248,248,1,139,6,15,182,204,15, - 182,232,131,198,4,193,232,16,252,255,36,252,235,248,2,129,232,239,129,252, - 248,239,15,134,244,1,252,246,129,233,235,15,132,244,1,135,213,141,139,233, - 255,232,251,1,26,137,252,234,252,233,244,1,255,72,252,247,208,139,106,252, - 248,139,172,253,141,233,139,12,135,139,133,233,137,8,199,64,4,237,252,246, - 133,233,235,15,133,244,248,248,1,139,6,15,182,204,15,182,232,131,198,4,193, - 232,16,252,255,36,252,235,248,2,252,246,129,233,235,15,132,244,1,128,189, - 233,0,15,132,244,1,137,213,137,194,141,139,233,232,251,1,26,137,252,234,252, - 233,244,1,255,139,106,252,248,255,252,242,15,16,4,199,255,139,172,253,141, - 233,139,141,233,255,252,242,15,17,1,255,221,25,255,72,252,247,208,139,106, - 252,248,139,172,253,141,233,139,141,233,137,65,4,139,6,15,182,204,15,182, - 232,131,198,4,193,232,16,252,255,36,252,235,255,141,180,253,134,233,139,108, - 36,96,131,189,233,0,15,132,244,247,137,149,233,141,20,202,137,252,233,232, - 251,1,27,139,149,233,248,1,139,6,15,182,204,15,182,232,131,198,4,193,232, - 16,252,255,36,252,235,255,72,252,247,208,139,108,36,96,137,149,233,68,139, - 66,252,248,139,20,135,137,252,233,137,116,36,100,232,251,1,28,139,149,233, - 15,182,78,252,253,137,4,202,199,68,202,4,237,139,6,15,182,204,15,182,232, - 131,198,4,193,232,16,252,255,36,252,235,255,139,76,36,96,137,145,233,248, - 1,65,137,192,37,252,255,7,0,0,65,193,232,11,61,252,255,7,0,0,15,132,244,249, - 248,2,137,194,139,131,233,137,205,59,131,233,137,116,36,100,15,131,244,251, - 232,251,1,29,139,149,233,15,182,78,252,253,137,4,202,199,68,202,4,237,139, - 6,15,182,204,15,182,232,131,198,4,193,232,16,252,255,36,252,235,248,3,184, - 1,8,0,0,252,233,244,2,248,5,232,251,1,30,15,183,70,252,254,137,252,233,252, - 233,244,1,255,72,252,247,208,139,108,36,96,139,139,233,137,116,36,100,59, - 139,233,137,149,233,15,131,244,249,248,2,139,20,135,137,252,233,232,251,1, - 31,139,149,233,15,182,78,252,253,137,4,202,199,68,202,4,237,139,6,15,182, - 204,15,182,232,131,198,4,193,232,16,252,255,36,252,235,248,3,137,252,233, - 232,251,1,30,15,183,70,252,254,72,252,247,208,252,233,244,2,255,72,252,247, - 208,139,106,252,248,139,173,233,139,4,135,252,233,244,157,255,72,252,247, - 208,139,106,252,248,139,173,233,139,4,135,252,233,244,158,255,15,182,252, - 236,15,182,192,129,124,253,252,234,4,239,15,133,244,36,139,44,252,234,129, - 124,253,194,4,239,15,135,244,251,255,252,242,15,16,4,194,252,242,15,45,192, - 252,242,15,42,200,102,15,46,193,255,15,133,244,36,59,133,233,15,131,244,36, - 193,224,3,3,133,233,129,120,253,4,239,15,132,244,248,248,1,139,40,139,64, - 4,137,44,202,137,68,202,4,139,6,15,182,204,15,182,232,131,198,4,193,232,16, - 252,255,36,252,235,248,2,131,189,233,0,15,132,244,1,139,141,233,252,246,129, - 233,235,15,132,244,36,15,182,78,252,253,252,233,244,1,248,5,255,129,124,253, - 194,4,239,15,133,244,36,139,4,194,252,233,244,157,255,15,182,252,236,15,182, - 192,72,252,247,208,139,4,135,129,124,253,252,234,4,239,15,133,244,34,139, - 44,252,234,248,157,139,141,233,35,136,233,105,201,239,3,141,233,248,1,129, - 185,233,239,15,133,244,250,57,129,233,15,133,244,250,129,121,253,4,239,15, - 132,244,251,15,182,70,252,253,139,41,139,73,4,137,44,194,248,2,255,137,76, - 194,4,139,6,15,182,204,15,182,232,131,198,4,193,232,16,252,255,36,252,235, - 248,3,15,182,70,252,253,185,237,252,233,244,2,248,4,139,137,233,133,201,15, - 133,244,1,248,5,139,141,233,133,201,15,132,244,3,252,246,129,233,235,15,133, - 244,3,252,233,244,34,255,15,182,252,236,15,182,192,129,124,253,252,234,4, - 239,15,133,244,35,139,44,252,234,59,133,233,15,131,244,35,193,224,3,3,133, - 233,129,120,253,4,239,15,132,244,248,248,1,139,40,139,64,4,137,44,202,137, - 68,202,4,139,6,15,182,204,15,182,232,131,198,4,193,232,16,252,255,36,252, - 235,248,2,131,189,233,0,15,132,244,1,139,141,233,252,246,129,233,235,15,132, - 244,35,255,15,182,252,236,15,182,192,129,124,253,252,234,4,239,15,133,244, - 39,139,44,252,234,129,124,253,194,4,239,15,135,244,251,255,15,133,244,39, - 59,133,233,15,131,244,39,193,224,3,3,133,233,129,120,253,4,239,15,132,244, - 249,248,1,252,246,133,233,235,15,133,244,253,248,2,139,108,202,4,139,12,202, - 137,104,4,137,8,139,6,15,182,204,15,182,232,131,198,4,193,232,16,252,255, - 36,252,235,248,3,131,189,233,0,15,132,244,1,139,141,233,255,252,246,129,233, - 235,15,132,244,39,15,182,78,252,253,252,233,244,1,248,5,129,124,253,194,4, - 239,15,133,244,39,139,4,194,252,233,244,158,248,7,128,165,233,235,139,139, - 233,137,171,233,137,141,233,15,182,78,252,253,252,233,244,2,255,15,182,252, - 236,15,182,192,72,252,247,208,139,4,135,129,124,253,252,234,4,239,15,133, - 244,37,139,44,252,234,248,158,139,141,233,35,136,233,105,201,239,198,133, - 233,0,3,141,233,248,1,129,185,233,239,15,133,244,251,57,129,233,15,133,244, - 251,129,121,253,4,239,15,132,244,250,248,2,255,252,246,133,233,235,15,133, - 244,253,248,3,15,182,70,252,253,139,108,194,4,139,4,194,137,105,4,137,1,139, - 6,15,182,204,15,182,232,131,198,4,193,232,16,252,255,36,252,235,248,4,131, - 189,233,0,15,132,244,2,137,76,36,80,139,141,233,252,246,129,233,235,15,132, - 244,37,139,76,36,80,252,233,244,2,248,5,139,137,233,133,201,15,133,244,1, - 255,139,141,233,133,201,15,132,244,252,252,246,129,233,235,15,132,244,37, - 248,6,137,68,36,80,199,68,36,84,237,137,108,36,32,139,76,36,96,137,145,233, - 76,141,68,36,80,137,252,234,137,205,137,116,36,100,232,251,1,32,139,149,233, - 139,108,36,32,137,193,252,233,244,2,248,7,128,165,233,235,139,131,233,137, - 171,233,137,133,233,252,233,244,3,255,15,182,252,236,15,182,192,129,124,253, - 252,234,4,239,15,133,244,38,139,44,252,234,59,133,233,15,131,244,38,193,224, - 3,3,133,233,129,120,253,4,239,15,132,244,249,248,1,252,246,133,233,235,15, - 133,244,253,248,2,139,108,202,4,139,12,202,137,104,4,137,8,139,6,15,182,204, - 15,182,232,131,198,4,193,232,16,252,255,36,252,235,248,3,131,189,233,0,15, - 132,244,1,255,139,141,233,252,246,129,233,235,15,132,244,38,15,182,78,252, - 253,252,233,244,1,248,7,128,165,233,235,139,139,233,137,171,233,137,141,233, - 15,182,78,252,253,252,233,244,2,255,137,124,36,80,255,252,242,15,45,60,199, - 255,248,1,141,12,202,139,105,252,248,252,246,133,233,235,15,133,244,253,248, - 2,139,68,36,84,131,232,1,15,132,244,250,1,252,248,59,133,233,15,131,244,251, - 41,252,248,193,231,3,3,189,233,248,3,139,41,137,47,139,105,4,131,193,8,137, - 111,4,131,199,8,131,232,1,15,133,244,3,248,4,139,124,36,80,139,6,15,182,204, - 15,182,232,131,198,4,193,232,16,252,255,36,252,235,248,5,139,76,36,96,137, - 145,233,137,252,234,65,137,192,137,205,137,116,36,100,232,251,1,33,139,149, - 233,15,182,78,252,253,252,233,244,1,248,7,255,128,165,233,235,139,131,233, - 137,171,233,137,133,233,252,233,244,2,255,3,68,36,84,255,129,124,253,202, - 4,239,139,44,202,15,133,244,51,141,84,202,8,137,114,252,252,139,181,233,139, - 14,15,182,252,233,15,182,205,131,198,4,252,255,36,252,235,255,141,76,202, - 8,137,215,139,105,252,248,129,121,253,252,252,239,15,133,244,28,248,52,139, - 114,252,252,252,247,198,237,15,133,244,253,248,1,137,106,252,248,137,68,36, - 84,131,232,1,15,132,244,249,248,2,139,41,137,47,139,105,4,137,111,4,131,199, - 8,131,193,8,131,232,1,15,133,244,2,139,106,252,248,248,3,139,68,36,84,128, - 189,233,1,15,135,244,251,248,4,139,181,233,139,14,15,182,252,233,15,182,205, - 131,198,4,252,255,36,252,235,248,5,255,252,247,198,237,15,133,244,4,15,182, - 78,252,253,72,252,247,209,141,12,202,139,121,252,248,139,191,233,139,191, - 233,252,233,244,4,248,7,15,139,244,1,131,230,252,248,41,252,242,137,215,139, - 114,252,252,252,233,244,1,255,141,76,202,8,139,105,232,139,65,252,236,137, - 41,137,65,4,139,105,252,240,139,65,252,244,137,105,8,137,65,12,139,105,224, - 139,65,228,137,105,252,248,137,65,252,252,129,252,248,239,184,237,15,133, - 244,28,137,202,137,114,252,252,139,181,233,139,14,15,182,252,233,15,182,205, - 131,198,4,252,255,36,252,235,255,15,182,252,236,139,66,252,248,141,12,202, - 139,128,233,15,182,128,233,137,124,36,80,141,188,253,194,233,43,122,252,252, - 133,252,237,15,132,244,251,141,108,252,233,252,248,57,215,15,131,244,248, - 248,1,139,71,252,248,137,1,139,71,252,252,131,199,8,137,65,4,131,193,8,57, - 252,233,15,131,244,249,57,215,15,130,244,1,248,2,199,65,4,237,131,193,8,57, - 252,233,15,130,244,2,248,3,139,124,36,80,139,6,15,182,204,15,182,232,131, - 198,4,193,232,16,252,255,36,252,235,248,5,199,68,36,84,1,0,0,0,137,208,41, - 252,248,15,134,244,3,255,137,197,193,252,237,3,131,197,1,137,108,36,84,139, - 108,36,96,1,200,59,133,233,15,135,244,253,248,6,139,71,252,248,137,1,139, - 71,252,252,131,199,8,137,65,4,131,193,8,57,215,15,130,244,6,252,233,244,3, - 248,7,137,149,233,137,141,233,137,116,36,100,41,215,139,84,36,84,131,252, - 234,1,137,252,233,232,251,1,0,139,149,233,139,141,233,1,215,252,233,244,6, - 255,193,225,3,255,248,1,139,114,252,252,137,68,36,84,252,247,198,237,15,133, - 244,253,255,248,13,137,215,131,232,1,15,132,244,249,248,2,139,44,15,137,111, - 252,248,139,108,15,4,137,111,252,252,131,199,8,131,232,1,15,133,244,2,248, - 3,139,68,36,84,15,182,110,252,255,248,5,57,197,15,135,244,252,255,139,108, - 10,4,137,106,252,252,139,44,10,137,106,252,248,255,248,5,56,70,252,255,15, - 135,244,252,255,15,182,78,252,253,72,252,247,209,141,20,202,139,122,252,248, - 139,191,233,139,191,233,139,6,15,182,204,15,182,232,131,198,4,193,232,16, - 252,255,36,252,235,248,6,255,199,71,252,252,237,131,199,8,255,199,68,194, + 139,147,233,72,137,171,233,199,131,233,0,0,0,0,137,149,233,72,141,148,253, + 36,233,141,139,233,232,251,1,23,72,139,141,233,72,129,225,239,137,169,233, + 139,149,233,139,177,233,252,233,244,247,255,248,144,255,72,141,140,253,36, + 233,248,1,102,68,15,111,185,233,102,68,15,111,177,233,102,68,15,111,169,233, + 102,68,15,111,161,233,102,68,15,111,153,233,102,68,15,111,145,233,102,68, + 15,111,137,233,102,68,15,111,129,233,102,15,111,185,233,72,137,204,102,15, + 111,49,76,139,124,36,16,76,139,116,36,24,76,139,108,36,32,76,139,100,36,80, + 133,192,15,136,244,249,137,68,36,84,139,122,252,248,139,191,233,139,191,233, + 199,131,233,0,0,0,0,199,131,233,237,139,6,15,182,204,15,182,232,131,198,4, + 193,232,16,129,252,253,239,15,130,244,248,255,139,68,36,84,248,2,252,255, + 36,252,235,248,3,252,247,216,137,252,233,137,194,232,251,1,24,255,248,82, + 255,217,124,36,4,137,68,36,8,102,184,0,4,102,11,68,36,4,102,37,252,255,252, + 247,102,137,68,36,6,217,108,36,6,217,252,252,217,108,36,4,139,68,36,8,195, + 255,248,145,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,1,102,15,84,194,252,242,15,92,200,15,40,193,248,1, + 195,248,84,255,217,124,36,4,137,68,36,8,102,184,0,8,102,11,68,36,4,102,37, + 252,255,252,251,102,137,68,36,6,217,108,36,6,217,252,252,217,108,36,4,139, + 68,36,8,195,255,248,146,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,104,255,217,124,36,4,137,68,36,8,102,184,0,12,102,11,68, + 36,4,102,137,68,36,6,217,108,36,6,217,252,252,217,108,36,4,139,68,36,8,195, + 255,248,147,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,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,148,255,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,255,217,193,216,252, + 241,217,124,36,4,102,184,0,4,102,11,68,36,4,102,37,252,255,252,247,102,137, + 68,36,6,217,108,36,6,217,252,252,217,108,36,4,222,201,222,252,233,195,255, + 248,88,217,252,234,222,201,248,149,217,84,36,8,129,124,36,8,0,0,128,127,15, + 132,244,247,129,124,36,8,0,0,128,252,255,15,132,244,248,248,150,217,192,217, + 252,252,220,252,233,217,201,217,252,240,217,232,222,193,217,252,253,221,217, + 248,1,195,248,2,221,216,217,252,238,195,255,248,107,255,248,151,252,242,15, + 45,193,252,242,15,42,208,102,15,46,202,15,133,244,254,15,138,244,255,248, + 152,131,252,248,1,15,142,244,252,248,1,169,1,0,0,0,15,133,244,248,252,242, + 15,89,192,209,232,252,233,244,1,248,2,209,232,15,132,244,251,15,40,200,248, + 3,252,242,15,89,192,209,232,15,132,244,250,15,131,244,3,255,252,242,15,89, + 200,252,233,244,3,248,4,252,242,15,89,193,248,5,195,248,6,15,132,244,5,15, + 130,244,253,80,72,184,237,237,102,72,15,110,200,252,242,15,94,200,88,15,40, + 193,252,247,216,131,252,248,1,15,132,244,5,252,233,244,1,248,7,72,184,237, + 237,102,72,15,110,192,195,248,8,102,72,15,126,200,72,209,224,72,193,192,12, + 72,61,252,254,15,0,0,15,132,244,248,255,102,72,15,126,192,72,209,224,15,132, + 244,250,72,193,192,12,72,61,252,254,15,0,0,15,132,244,251,252,242,15,17,76, + 36,16,252,242,15,17,68,36,8,221,68,36,16,221,68,36,8,217,252,241,217,192, + 217,252,252,220,252,233,217,201,217,252,240,217,232,222,193,217,252,253,221, + 217,221,92,36,8,252,242,15,16,68,36,8,195,248,9,72,184,237,237,102,72,15, + 110,208,102,15,46,194,15,132,244,247,15,40,193,248,1,195,248,2,72,184,237, + 237,102,72,15,110,208,102,15,84,194,72,184,237,237,102,72,15,110,208,102, + 15,46,194,15,132,244,1,102,15,80,193,15,87,192,136,196,15,146,208,48,224, + 15,133,244,1,248,3,72,184,237,237,255,102,72,15,110,192,195,248,4,102,15, + 80,193,133,192,15,133,244,3,15,87,192,195,248,5,102,15,80,193,133,192,15, + 132,244,3,15,87,192,195,248,153,255,131,252,250,1,15,130,244,82,15,132,244, + 84,131,252,250,3,15,130,244,104,15,135,244,248,252,242,15,81,192,195,248, + 2,252,242,15,17,68,36,8,221,68,36,8,131,252,250,5,15,135,244,248,88,15,132, + 244,247,232,244,88,80,252,233,244,253,248,1,232,244,149,255,80,252,233,244, + 253,248,2,131,252,250,7,15,132,244,247,15,135,244,248,217,252,237,217,201, + 217,252,241,252,233,244,253,248,1,217,232,217,201,217,252,241,252,233,244, + 253,248,2,131,252,250,9,15,132,244,247,15,135,244,248,217,252,236,217,201, + 217,252,241,252,233,244,253,248,1,255,217,252,254,252,233,244,253,248,2,131, + 252,250,11,15,132,244,247,15,135,244,255,217,252,255,252,233,244,253,248, + 1,217,252,242,221,216,248,7,221,92,36,8,252,242,15,16,68,36,8,195,255,139, + 84,36,12,221,68,36,4,131,252,250,1,15,130,244,82,15,132,244,84,131,252,250, + 3,15,130,244,104,15,135,244,248,217,252,250,195,248,2,131,252,250,5,15,130, + 244,88,15,132,244,149,131,252,250,7,15,132,244,247,15,135,244,248,217,252, + 237,217,201,217,252,241,195,248,1,217,232,217,201,217,252,241,195,248,2,131, + 252,250,9,15,132,244,247,255,15,135,244,248,217,252,236,217,201,217,252,241, + 195,248,1,217,252,254,195,248,2,131,252,250,11,15,132,244,247,15,135,244, + 255,217,252,255,195,248,1,217,252,242,221,216,195,255,248,9,204,248,154,255, + 65,131,252,248,1,15,132,244,247,15,135,244,248,252,242,15,88,193,195,248, + 1,252,242,15,92,193,195,248,2,65,131,252,248,3,15,132,244,247,15,135,244, + 248,252,242,15,89,193,195,248,1,252,242,15,94,193,195,248,2,65,131,252,248, + 5,15,130,244,148,15,132,244,107,65,131,252,248,7,15,132,244,247,15,135,244, + 248,72,184,237,237,255,102,72,15,110,200,15,87,193,195,248,1,72,184,237,237, + 102,72,15,110,200,15,84,193,195,248,2,65,131,252,248,9,15,135,244,248,252, + 242,15,17,68,36,8,252,242,15,17,76,36,16,221,68,36,8,221,68,36,16,15,132, + 244,247,217,252,243,248,7,221,92,36,8,252,242,15,16,68,36,8,195,248,1,217, + 201,217,252,253,221,217,252,233,244,7,248,2,65,131,252,248,11,15,132,244, + 247,15,135,244,255,252,242,15,93,193,195,248,1,252,242,15,95,193,195,248, + 9,204,255,139,68,36,20,221,68,36,4,221,68,36,12,131,252,248,1,15,132,244, + 247,15,135,244,248,222,193,195,248,1,222,252,233,195,248,2,131,252,248,3, + 15,132,244,247,15,135,244,248,222,201,195,248,1,222,252,249,195,248,2,131, + 252,248,5,15,130,244,148,15,132,244,107,131,252,248,7,15,132,244,247,15,135, + 244,248,255,221,216,217,224,195,248,1,221,216,217,225,195,248,2,131,252,248, + 9,15,132,244,247,15,135,244,248,217,252,243,195,248,1,217,201,217,252,253, + 221,217,195,248,2,131,252,248,11,15,132,244,247,15,135,244,255,255,219,252, + 233,219,209,221,217,195,248,1,219,252,233,218,209,221,217,195,255,221,225, + 223,224,252,246,196,1,15,132,244,248,217,201,248,2,221,216,195,248,1,221, + 225,223,224,252,246,196,1,15,133,244,248,217,201,248,2,221,216,195,255,248, + 155,137,200,86,72,137,214,83,15,162,137,6,137,94,4,137,78,8,137,86,12,91, + 94,195,255,129,124,253,202,4,239,15,135,244,41,129,124,253,194,4,239,15,135, + 244,41,255,252,242,15,16,4,194,131,198,4,102,15,46,4,202,255,221,4,202,221, + 4,194,131,198,4,255,223,252,233,221,216,255,218,252,233,223,224,158,255,15, + 134,244,248,255,15,131,244,248,255,248,1,15,183,70,252,254,141,180,253,134, + 233,248,2,139,6,15,182,204,15,182,232,131,198,4,193,232,16,252,255,36,252, + 235,255,139,108,194,4,131,198,4,129,252,253,239,15,135,244,251,129,124,253, + 202,4,239,15,135,244,251,255,252,242,15,16,4,194,102,15,46,4,202,255,221, + 4,202,221,4,194,255,15,138,244,248,15,133,244,248,255,15,138,244,248,15,132, + 244,247,255,248,1,15,183,70,252,254,141,180,253,134,233,248,2,255,248,2,15, + 183,70,252,254,141,180,253,134,233,248,1,255,248,5,57,108,202,4,15,133,244, + 2,129,252,253,239,15,131,244,1,139,12,202,139,4,194,57,193,15,132,244,1,129, + 252,253,239,15,135,244,2,139,169,233,133,252,237,15,132,244,2,252,246,133, + 233,235,15,133,244,2,255,49,252,237,255,189,1,0,0,0,255,252,233,244,45,255, + 72,252,247,208,131,198,4,129,124,253,202,4,239,15,133,244,248,139,12,202, + 59,12,135,255,131,198,4,129,124,253,202,4,239,15,135,244,248,255,252,242, + 15,16,4,199,102,15,46,4,202,255,221,4,202,221,4,199,255,72,252,247,208,131, + 198,4,57,68,202,4,255,139,108,194,4,131,198,4,129,252,253,239,255,15,131, + 244,247,255,15,130,244,247,255,137,108,202,4,139,44,194,137,44,202,255,15, + 183,70,252,254,141,180,253,134,233,248,1,139,6,15,182,204,15,182,232,131, + 198,4,193,232,16,252,255,36,252,235,255,139,108,194,4,139,4,194,137,108,202, + 4,137,4,202,139,6,15,182,204,15,182,232,131,198,4,193,232,16,252,255,36,252, + 235,255,49,252,237,129,124,253,194,4,239,129,213,239,137,108,202,4,139,6, + 15,182,204,15,182,232,131,198,4,193,232,16,252,255,36,252,235,255,129,124, + 253,194,4,239,15,135,244,48,255,252,242,15,16,4,194,72,184,237,237,102,72, + 15,110,200,15,87,193,252,242,15,17,4,202,255,221,4,194,217,224,221,28,202, + 255,129,124,253,194,4,239,15,133,244,248,139,4,194,255,15,87,192,252,242, + 15,42,128,233,248,1,252,242,15,17,4,202,255,219,128,233,248,1,221,28,202, + 255,139,6,15,182,204,15,182,232,131,198,4,193,232,16,252,255,36,252,235,248, + 2,129,124,253,194,4,239,15,133,244,50,139,12,194,137,213,232,251,1,18,255, + 252,242,15,42,192,137,252,234,255,15,182,78,252,253,252,233,244,1,255,15, + 182,252,236,15,182,192,255,129,124,253,252,234,4,239,15,135,244,46,255,252, + 242,15,16,4,252,234,252,242,15,88,4,199,255,221,4,252,234,220,4,199,255,129, + 124,253,252,234,4,239,15,135,244,47,255,252,242,15,16,4,199,252,242,15,88, + 4,252,234,255,221,4,199,220,4,252,234,255,129,124,253,252,234,4,239,15,135, + 244,49,129,124,253,194,4,239,15,135,244,49,255,252,242,15,16,4,252,234,252, + 242,15,88,4,194,255,221,4,252,234,220,4,194,255,252,242,15,16,4,252,234,252, + 242,15,92,4,199,255,221,4,252,234,220,36,199,255,252,242,15,16,4,199,252, + 242,15,92,4,252,234,255,221,4,199,220,36,252,234,255,252,242,15,16,4,252, + 234,252,242,15,92,4,194,255,221,4,252,234,220,36,194,255,252,242,15,16,4, + 252,234,252,242,15,89,4,199,255,221,4,252,234,220,12,199,255,252,242,15,16, + 4,199,252,242,15,89,4,252,234,255,221,4,199,220,12,252,234,255,252,242,15, + 16,4,252,234,252,242,15,89,4,194,255,221,4,252,234,220,12,194,255,252,242, + 15,16,4,252,234,252,242,15,94,4,199,255,221,4,252,234,220,52,199,255,252, + 242,15,16,4,199,252,242,15,94,4,252,234,255,221,4,199,220,52,252,234,255, + 252,242,15,16,4,252,234,252,242,15,94,4,194,255,221,4,252,234,220,52,194, + 255,252,242,15,16,4,252,234,252,242,15,16,12,199,255,221,4,252,234,221,4, + 199,255,252,242,15,16,4,199,252,242,15,16,12,252,234,255,221,4,199,221,4, + 252,234,255,252,242,15,16,4,252,234,252,242,15,16,12,194,255,221,4,252,234, + 221,4,194,255,248,156,232,244,148,255,252,233,244,156,255,232,244,107,255, + 15,182,252,236,15,182,192,139,76,36,96,137,145,233,141,20,194,65,137,192, + 65,41,232,248,33,137,205,137,116,36,100,232,251,1,25,139,149,233,133,192, + 15,133,244,42,15,182,110,252,255,15,182,78,252,253,139,68,252,234,4,139,44, + 252,234,137,68,202,4,137,44,202,139,6,15,182,204,15,182,232,131,198,4,193, + 232,16,252,255,36,252,235,255,72,252,247,208,139,4,135,199,68,202,4,237,137, + 4,202,139,6,15,182,204,15,182,232,131,198,4,193,232,16,252,255,36,252,235, + 255,15,191,192,252,242,15,42,192,252,242,15,17,4,202,255,223,70,252,254,221, + 28,202,255,252,242,15,16,4,199,252,242,15,17,4,202,255,221,4,199,221,28,202, + 255,72,252,247,208,137,68,202,4,139,6,15,182,204,15,182,232,131,198,4,193, + 232,16,252,255,36,252,235,255,141,76,202,12,141,68,194,4,189,237,137,105, + 252,248,248,1,137,41,131,193,8,57,193,15,134,244,1,139,6,15,182,204,15,182, + 232,131,198,4,193,232,16,252,255,36,252,235,255,139,106,252,248,139,172,253, + 133,233,139,173,233,139,69,4,139,109,0,137,68,202,4,137,44,202,139,6,15,182, + 204,15,182,232,131,198,4,193,232,16,252,255,36,252,235,255,139,106,252,248, + 139,172,253,141,233,128,189,233,0,139,173,233,139,12,194,139,68,194,4,137, + 77,0,137,69,4,15,132,244,247,252,246,133,233,235,15,133,244,248,248,1,139, + 6,15,182,204,15,182,232,131,198,4,193,232,16,252,255,36,252,235,248,2,129, + 232,239,129,252,248,239,15,134,244,1,252,246,129,233,235,15,132,244,1,135, + 213,141,139,233,255,232,251,1,26,137,252,234,252,233,244,1,255,72,252,247, + 208,139,106,252,248,139,172,253,141,233,139,12,135,139,133,233,137,8,199, + 64,4,237,252,246,133,233,235,15,133,244,248,248,1,139,6,15,182,204,15,182, + 232,131,198,4,193,232,16,252,255,36,252,235,248,2,252,246,129,233,235,15, + 132,244,1,128,189,233,0,15,132,244,1,137,213,137,194,141,139,233,232,251, + 1,26,137,252,234,252,233,244,1,255,139,106,252,248,255,252,242,15,16,4,199, + 255,139,172,253,141,233,139,141,233,255,252,242,15,17,1,255,221,25,255,72, + 252,247,208,139,106,252,248,139,172,253,141,233,139,141,233,137,65,4,139, + 6,15,182,204,15,182,232,131,198,4,193,232,16,252,255,36,252,235,255,141,180, + 253,134,233,139,108,36,96,131,189,233,0,15,132,244,247,137,149,233,141,20, + 202,137,252,233,232,251,1,27,139,149,233,248,1,139,6,15,182,204,15,182,232, + 131,198,4,193,232,16,252,255,36,252,235,255,72,252,247,208,139,108,36,96, + 137,149,233,68,139,66,252,248,139,20,135,137,252,233,137,116,36,100,232,251, + 1,28,139,149,233,15,182,78,252,253,137,4,202,199,68,202,4,237,139,6,15,182, + 204,15,182,232,131,198,4,193,232,16,252,255,36,252,235,255,139,76,36,96,137, + 145,233,248,1,65,137,192,37,252,255,7,0,0,65,193,232,11,61,252,255,7,0,0, + 15,132,244,249,248,2,137,194,139,131,233,137,205,59,131,233,137,116,36,100, + 15,131,244,251,232,251,1,29,139,149,233,15,182,78,252,253,137,4,202,199,68, + 202,4,237,139,6,15,182,204,15,182,232,131,198,4,193,232,16,252,255,36,252, + 235,248,3,184,1,8,0,0,252,233,244,2,248,5,232,251,1,30,15,183,70,252,254, + 137,252,233,252,233,244,1,255,72,252,247,208,139,108,36,96,139,139,233,137, + 116,36,100,59,139,233,137,149,233,15,131,244,249,248,2,139,20,135,137,252, + 233,232,251,1,31,139,149,233,15,182,78,252,253,137,4,202,199,68,202,4,237, + 139,6,15,182,204,15,182,232,131,198,4,193,232,16,252,255,36,252,235,248,3, + 137,252,233,232,251,1,30,15,183,70,252,254,72,252,247,208,252,233,244,2,255, + 72,252,247,208,139,106,252,248,139,173,233,139,4,135,252,233,244,157,255, + 72,252,247,208,139,106,252,248,139,173,233,139,4,135,252,233,244,158,255, + 15,182,252,236,15,182,192,129,124,253,252,234,4,239,15,133,244,36,139,44, + 252,234,129,124,253,194,4,239,15,135,244,251,255,252,242,15,16,4,194,252, + 242,15,45,192,252,242,15,42,200,102,15,46,193,255,15,133,244,36,59,133,233, + 15,131,244,36,193,224,3,3,133,233,129,120,253,4,239,15,132,244,248,248,1, + 139,40,139,64,4,137,44,202,137,68,202,4,139,6,15,182,204,15,182,232,131,198, + 4,193,232,16,252,255,36,252,235,248,2,131,189,233,0,15,132,244,1,139,141, + 233,252,246,129,233,235,15,132,244,36,15,182,78,252,253,252,233,244,1,248, + 5,255,129,124,253,194,4,239,15,133,244,36,139,4,194,252,233,244,157,255,15, + 182,252,236,15,182,192,72,252,247,208,139,4,135,129,124,253,252,234,4,239, + 15,133,244,34,139,44,252,234,248,157,139,141,233,35,136,233,105,201,239,3, + 141,233,248,1,129,185,233,239,15,133,244,250,57,129,233,15,133,244,250,129, + 121,253,4,239,15,132,244,251,15,182,70,252,253,139,41,139,73,4,137,44,194, + 248,2,255,137,76,194,4,139,6,15,182,204,15,182,232,131,198,4,193,232,16,252, + 255,36,252,235,248,3,15,182,70,252,253,185,237,252,233,244,2,248,4,139,137, + 233,133,201,15,133,244,1,248,5,139,141,233,133,201,15,132,244,3,252,246,129, + 233,235,15,133,244,3,252,233,244,34,255,15,182,252,236,15,182,192,129,124, + 253,252,234,4,239,15,133,244,35,139,44,252,234,59,133,233,15,131,244,35,193, + 224,3,3,133,233,129,120,253,4,239,15,132,244,248,248,1,139,40,139,64,4,137, + 44,202,137,68,202,4,139,6,15,182,204,15,182,232,131,198,4,193,232,16,252, + 255,36,252,235,248,2,131,189,233,0,15,132,244,1,139,141,233,252,246,129,233, + 235,15,132,244,35,255,15,182,252,236,15,182,192,129,124,253,252,234,4,239, + 15,133,244,39,139,44,252,234,129,124,253,194,4,239,15,135,244,251,255,15, + 133,244,39,59,133,233,15,131,244,39,193,224,3,3,133,233,129,120,253,4,239, + 15,132,244,249,248,1,252,246,133,233,235,15,133,244,253,248,2,139,108,202, + 4,139,12,202,137,104,4,137,8,139,6,15,182,204,15,182,232,131,198,4,193,232, + 16,252,255,36,252,235,248,3,131,189,233,0,15,132,244,1,139,141,233,255,252, + 246,129,233,235,15,132,244,39,15,182,78,252,253,252,233,244,1,248,5,129,124, + 253,194,4,239,15,133,244,39,139,4,194,252,233,244,158,248,7,128,165,233,235, + 139,139,233,137,171,233,137,141,233,15,182,78,252,253,252,233,244,2,255,15, + 182,252,236,15,182,192,72,252,247,208,139,4,135,129,124,253,252,234,4,239, + 15,133,244,37,139,44,252,234,248,158,139,141,233,35,136,233,105,201,239,198, + 133,233,0,3,141,233,248,1,129,185,233,239,15,133,244,251,57,129,233,15,133, + 244,251,129,121,253,4,239,15,132,244,250,248,2,255,252,246,133,233,235,15, + 133,244,253,248,3,15,182,70,252,253,139,108,194,4,139,4,194,137,105,4,137, + 1,139,6,15,182,204,15,182,232,131,198,4,193,232,16,252,255,36,252,235,248, + 4,131,189,233,0,15,132,244,2,137,76,36,80,139,141,233,252,246,129,233,235, + 15,132,244,37,139,76,36,80,252,233,244,2,248,5,139,137,233,133,201,15,133, + 244,1,255,139,141,233,133,201,15,132,244,252,252,246,129,233,235,15,132,244, + 37,248,6,137,68,36,80,199,68,36,84,237,137,108,36,32,139,76,36,96,137,145, + 233,76,141,68,36,80,137,252,234,137,205,137,116,36,100,232,251,1,32,139,149, + 233,139,108,36,32,137,193,252,233,244,2,248,7,128,165,233,235,139,131,233, + 137,171,233,137,133,233,252,233,244,3,255,15,182,252,236,15,182,192,129,124, + 253,252,234,4,239,15,133,244,38,139,44,252,234,59,133,233,15,131,244,38,193, + 224,3,3,133,233,129,120,253,4,239,15,132,244,249,248,1,252,246,133,233,235, + 15,133,244,253,248,2,139,108,202,4,139,12,202,137,104,4,137,8,139,6,15,182, + 204,15,182,232,131,198,4,193,232,16,252,255,36,252,235,248,3,131,189,233, + 0,15,132,244,1,255,139,141,233,252,246,129,233,235,15,132,244,38,15,182,78, + 252,253,252,233,244,1,248,7,128,165,233,235,139,139,233,137,171,233,137,141, + 233,15,182,78,252,253,252,233,244,2,255,137,124,36,80,255,252,242,15,45,60, + 199,255,248,1,141,12,202,139,105,252,248,252,246,133,233,235,15,133,244,253, + 248,2,139,68,36,84,131,232,1,15,132,244,250,1,252,248,59,133,233,15,131,244, + 251,41,252,248,193,231,3,3,189,233,248,3,139,41,137,47,139,105,4,131,193, + 8,137,111,4,131,199,8,131,232,1,15,133,244,3,248,4,139,124,36,80,139,6,15, + 182,204,15,182,232,131,198,4,193,232,16,252,255,36,252,235,248,5,139,76,36, + 96,137,145,233,137,252,234,65,137,192,137,205,137,116,36,100,232,251,1,33, + 139,149,233,15,182,78,252,253,252,233,244,1,248,7,255,128,165,233,235,139, + 131,233,137,171,233,137,133,233,252,233,244,2,255,3,68,36,84,255,129,124, + 253,202,4,239,139,44,202,15,133,244,51,141,84,202,8,137,114,252,252,139,181, + 233,139,14,15,182,252,233,15,182,205,131,198,4,252,255,36,252,235,255,141, + 76,202,8,137,215,139,105,252,248,129,121,253,252,252,239,15,133,244,28,248, + 52,139,114,252,252,252,247,198,237,15,133,244,253,248,1,137,106,252,248,137, + 68,36,84,131,232,1,15,132,244,249,248,2,139,41,137,47,139,105,4,137,111,4, + 131,199,8,131,193,8,131,232,1,15,133,244,2,139,106,252,248,248,3,139,68,36, + 84,128,189,233,1,15,135,244,251,248,4,139,181,233,139,14,15,182,252,233,15, + 182,205,131,198,4,252,255,36,252,235,248,5,255,252,247,198,237,15,133,244, + 4,15,182,78,252,253,72,252,247,209,141,12,202,139,121,252,248,139,191,233, + 139,191,233,252,233,244,4,248,7,15,139,244,1,131,230,252,248,41,252,242,137, + 215,139,114,252,252,252,233,244,1,255,141,76,202,8,139,105,232,139,65,252, + 236,137,41,137,65,4,139,105,252,240,139,65,252,244,137,105,8,137,65,12,139, + 105,224,139,65,228,137,105,252,248,137,65,252,252,129,252,248,239,184,237, + 15,133,244,28,137,202,137,114,252,252,139,181,233,139,14,15,182,252,233,15, + 182,205,131,198,4,252,255,36,252,235,255,15,182,252,236,139,66,252,248,141, + 12,202,139,128,233,15,182,128,233,137,124,36,80,141,188,253,194,233,43,122, + 252,252,133,252,237,15,132,244,251,141,108,252,233,252,248,57,215,15,131, + 244,248,248,1,139,71,252,248,137,1,139,71,252,252,131,199,8,137,65,4,131, + 193,8,57,252,233,15,131,244,249,57,215,15,130,244,1,248,2,199,65,4,237,131, + 193,8,57,252,233,15,130,244,2,248,3,139,124,36,80,139,6,15,182,204,15,182, + 232,131,198,4,193,232,16,252,255,36,252,235,248,5,199,68,36,84,1,0,0,0,137, + 208,41,252,248,15,134,244,3,255,137,197,193,252,237,3,131,197,1,137,108,36, + 84,139,108,36,96,1,200,59,133,233,15,135,244,253,248,6,139,71,252,248,137, + 1,139,71,252,252,131,199,8,137,65,4,131,193,8,57,215,15,130,244,6,252,233, + 244,3,248,7,137,149,233,137,141,233,137,116,36,100,41,215,139,84,36,84,131, + 252,234,1,137,252,233,232,251,1,0,139,149,233,139,141,233,1,215,252,233,244, + 6,255,193,225,3,255,248,1,139,114,252,252,137,68,36,84,252,247,198,237,15, + 133,244,253,255,248,13,137,215,131,232,1,15,132,244,249,248,2,139,44,15,137, + 111,252,248,139,108,15,4,137,111,252,252,131,199,8,131,232,1,15,133,244,2, + 248,3,139,68,36,84,15,182,110,252,255,248,5,57,197,15,135,244,252,255,139, + 108,10,4,137,106,252,252,139,44,10,137,106,252,248,255,248,5,56,70,252,255, + 15,135,244,252,255,15,182,78,252,253,72,252,247,209,141,20,202,139,122,252, + 248,139,191,233,139,191,233,139,6,15,182,204,15,182,232,131,198,4,193,232, + 16,252,255,36,252,235,248,6,255,199,71,252,252,237,131,199,8,255,199,68,194, 252,244,237,255,131,192,1,252,233,244,5,248,7,15,139,244,14,131,230,252,248, 41,252,242,255,1,252,241,255,137,252,245,209,252,237,129,229,239,102,131, 172,253,43,233,1,15,132,244,140,255,141,12,202,255,129,121,253,4,239,15,135, @@ -1367,63 +1367,63 @@ static void build_subroutines(BuildCtx *ctx, int cmov, int sse) #endif dasm_put(Dst, 7251, Dt1(->base), Dt1(->top)); #if LJ_HASJIT - dasm_put(Dst, 7282, DISPATCH_GL(vmstate), DISPATCH_GL(vmstate), ~LJ_VMST_EXIT, DISPATCH_J(exitno), DISPATCH_J(parent), 16*8+4*8, DISPATCH_GL(jit_L), DISPATCH_GL(jit_base), DISPATCH_J(L), Dt1(->base), 4*8, GG_DISP2J, Dt1(->cframe), CFRAME_RAWMASK, CFRAME_OFS_L, Dt1(->base), CFRAME_OFS_PC); + dasm_put(Dst, 7282, DISPATCH_GL(vmstate), DISPATCH_GL(vmstate), ~LJ_VMST_EXIT, DISPATCH_J(exitno), DISPATCH_J(parent), 16*8+4*8, DISPATCH_GL(jit_L), DISPATCH_GL(jit_base), DISPATCH_J(L), DISPATCH_GL(jit_L), Dt1(->base), 4*8, GG_DISP2J, Dt1(->cframe), CFRAME_RAWMASK, CFRAME_OFS_L, Dt1(->base), CFRAME_OFS_PC); #endif - dasm_put(Dst, 7505); + dasm_put(Dst, 7512); #if LJ_HASJIT - dasm_put(Dst, 7508, 9*16+4*8, -9*16, -8*16, -7*16, -6*16, -5*16, -4*16, -3*16, -2*16, -1*16, Dt7(->pc), PC2PROTO(k), DISPATCH_GL(jit_L), DISPATCH_GL(vmstate), ~LJ_VMST_INTERP, BC_FUNCF); - dasm_put(Dst, 7650); + dasm_put(Dst, 7515, 9*16+4*8, -9*16, -8*16, -7*16, -6*16, -5*16, -4*16, -3*16, -2*16, -1*16, Dt7(->pc), PC2PROTO(k), DISPATCH_GL(jit_L), DISPATCH_GL(vmstate), ~LJ_VMST_INTERP, BC_FUNCF); + dasm_put(Dst, 7657); #endif - dasm_put(Dst, 7676); + dasm_put(Dst, 7683); if (!sse) { - dasm_put(Dst, 7679); + dasm_put(Dst, 7686); } - dasm_put(Dst, 7724, (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)); + dasm_put(Dst, 7731, (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)); if (!sse) { - dasm_put(Dst, 7810); + dasm_put(Dst, 7817); } - dasm_put(Dst, 7855, (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)); + dasm_put(Dst, 7862, (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)); if (!sse) { - dasm_put(Dst, 7941); + dasm_put(Dst, 7948); } - dasm_put(Dst, 7980, (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)); + dasm_put(Dst, 7987, (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)); if (sse) { - dasm_put(Dst, 8069, (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)); + dasm_put(Dst, 8076, (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)); } else { - dasm_put(Dst, 8183); + dasm_put(Dst, 8190); } - dasm_put(Dst, 8230); + dasm_put(Dst, 8237); if (!sse) { } else { - dasm_put(Dst, 8304); + dasm_put(Dst, 8311); } - dasm_put(Dst, 8307); - dasm_put(Dst, 8392, (unsigned int)(U64x(3ff00000,00000000)), (unsigned int)((U64x(3ff00000,00000000))>>32), (unsigned int)(U64x(3ff00000,00000000)), (unsigned int)((U64x(3ff00000,00000000))>>32)); - dasm_put(Dst, 8493, (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(3ff00000,00000000)), (unsigned int)((U64x(3ff00000,00000000))>>32), (unsigned int)(U64x(7ff00000,00000000)), (unsigned int)((U64x(7ff00000,00000000))>>32)); - dasm_put(Dst, 8661); + dasm_put(Dst, 8314); + dasm_put(Dst, 8399, (unsigned int)(U64x(3ff00000,00000000)), (unsigned int)((U64x(3ff00000,00000000))>>32), (unsigned int)(U64x(3ff00000,00000000)), (unsigned int)((U64x(3ff00000,00000000))>>32)); + dasm_put(Dst, 8500, (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(3ff00000,00000000)), (unsigned int)((U64x(3ff00000,00000000))>>32), (unsigned int)(U64x(7ff00000,00000000)), (unsigned int)((U64x(7ff00000,00000000))>>32)); + dasm_put(Dst, 8668); if (sse) { - dasm_put(Dst, 8702); - dasm_put(Dst, 8772); - dasm_put(Dst, 8845); + dasm_put(Dst, 8709); + dasm_put(Dst, 8779); + dasm_put(Dst, 8852); } else { - dasm_put(Dst, 8895); - dasm_put(Dst, 8987); + dasm_put(Dst, 8902); + dasm_put(Dst, 8994); } - dasm_put(Dst, 9033); + dasm_put(Dst, 9040); if (sse) { - dasm_put(Dst, 9039, (unsigned int)(U64x(80000000,00000000)), (unsigned int)((U64x(80000000,00000000))>>32)); - dasm_put(Dst, 9128, (unsigned int)(U64x(7fffffff,ffffffff)), (unsigned int)((U64x(7fffffff,ffffffff))>>32)); + dasm_put(Dst, 9046, (unsigned int)(U64x(80000000,00000000)), (unsigned int)((U64x(80000000,00000000))>>32)); + dasm_put(Dst, 9135, (unsigned int)(U64x(7fffffff,ffffffff)), (unsigned int)((U64x(7fffffff,ffffffff))>>32)); } else { - dasm_put(Dst, 9252); - dasm_put(Dst, 9335); + dasm_put(Dst, 9259); + dasm_put(Dst, 9342); if (cmov) { - dasm_put(Dst, 9390); + dasm_put(Dst, 9397); } else { - dasm_put(Dst, 9409); + dasm_put(Dst, 9416); } - dasm_put(Dst, 9248); + dasm_put(Dst, 9255); } - dasm_put(Dst, 9450); + dasm_put(Dst, 9457); } /* Generate the code for a single instruction. */ @@ -1439,595 +1439,595 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop, int cmov, int sse) /* Remember: all ops branch for a true comparison, fall through otherwise. */ case BC_ISLT: case BC_ISGE: case BC_ISLE: case BC_ISGT: - dasm_put(Dst, 9476, LJ_TISNUM, LJ_TISNUM); + dasm_put(Dst, 9483, LJ_TISNUM, LJ_TISNUM); if (sse) { - dasm_put(Dst, 9497); + dasm_put(Dst, 9504); } else { - dasm_put(Dst, 9512); + dasm_put(Dst, 9519); if (cmov) { - dasm_put(Dst, 9522); + dasm_put(Dst, 9529); } else { - dasm_put(Dst, 9528); + dasm_put(Dst, 9535); } } switch (op) { case BC_ISLT: - dasm_put(Dst, 9535); + dasm_put(Dst, 9542); break; case BC_ISGE: - dasm_put(Dst, 9330); + dasm_put(Dst, 9337); break; case BC_ISLE: dasm_put(Dst, 5900); break; case BC_ISGT: - dasm_put(Dst, 9540); + dasm_put(Dst, 9547); break; default: break; /* Shut up GCC. */ } - dasm_put(Dst, 9545, -BCBIAS_J*4); + dasm_put(Dst, 9552, -BCBIAS_J*4); break; case BC_ISEQV: case BC_ISNEV: vk = op == BC_ISEQV; - dasm_put(Dst, 9579, LJ_TISNUM, LJ_TISNUM); + dasm_put(Dst, 9586, LJ_TISNUM, LJ_TISNUM); if (sse) { - dasm_put(Dst, 9605); + dasm_put(Dst, 9612); } else { - dasm_put(Dst, 9617); + dasm_put(Dst, 9624); if (cmov) { - dasm_put(Dst, 9522); + dasm_put(Dst, 9529); } else { - dasm_put(Dst, 9528); + dasm_put(Dst, 9535); } } iseqne_fp: if (vk) { - dasm_put(Dst, 9624); + dasm_put(Dst, 9631); } else { - dasm_put(Dst, 9633); + dasm_put(Dst, 9640); } iseqne_end: if (vk) { - dasm_put(Dst, 9642, -BCBIAS_J*4); + dasm_put(Dst, 9649, -BCBIAS_J*4); } else { - dasm_put(Dst, 9657, -BCBIAS_J*4); + dasm_put(Dst, 9664, -BCBIAS_J*4); } - dasm_put(Dst, 9559); + dasm_put(Dst, 9566); if (op == BC_ISEQV || op == BC_ISNEV) { - dasm_put(Dst, 9672, LJ_TISPRI, LJ_TISTABUD, Dt6(->metatable), Dt6(->nomm), 1<metatable), Dt6(->nomm), 1<>32)); + dasm_put(Dst, 9967, (unsigned int)(U64x(80000000,00000000)), (unsigned int)((U64x(80000000,00000000))>>32)); } else { - dasm_put(Dst, 9985); + dasm_put(Dst, 9992); } - dasm_put(Dst, 9559); + dasm_put(Dst, 9566); break; case BC_LEN: - dasm_put(Dst, 9994, LJ_TSTR); + dasm_put(Dst, 10001, LJ_TSTR); if (sse) { - dasm_put(Dst, 10008, Dt5(->len)); + dasm_put(Dst, 10015, Dt5(->len)); } else { - dasm_put(Dst, 10026, Dt5(->len)); + dasm_put(Dst, 10033, Dt5(->len)); } - dasm_put(Dst, 10035, LJ_TTAB); + dasm_put(Dst, 10042, LJ_TTAB); if (sse) { - dasm_put(Dst, 10076); + dasm_put(Dst, 10083); } else { } - dasm_put(Dst, 10085); + dasm_put(Dst, 10092); break; /* -- Binary ops -------------------------------------------------------- */ case BC_ADDVN: case BC_ADDNV: case BC_ADDVV: - dasm_put(Dst, 10095); + dasm_put(Dst, 10102); vk = ((int)op - BC_ADDVN) / (BC_ADDNV-BC_ADDVN); switch (vk) { case 0: - dasm_put(Dst, 10103, LJ_TISNUM); + dasm_put(Dst, 10110, LJ_TISNUM); if (sse) { - dasm_put(Dst, 10115); + dasm_put(Dst, 10122); } else { - dasm_put(Dst, 10129); + dasm_put(Dst, 10136); } break; case 1: - dasm_put(Dst, 10137, LJ_TISNUM); + dasm_put(Dst, 10144, LJ_TISNUM); if (sse) { - dasm_put(Dst, 10149); + dasm_put(Dst, 10156); } else { - dasm_put(Dst, 10163); + dasm_put(Dst, 10170); } break; default: - dasm_put(Dst, 10171, LJ_TISNUM, LJ_TISNUM); + dasm_put(Dst, 10178, LJ_TISNUM, LJ_TISNUM); if (sse) { - dasm_put(Dst, 10193); + dasm_put(Dst, 10200); } else { - dasm_put(Dst, 10207); + dasm_put(Dst, 10214); } break; } if (sse) { - dasm_put(Dst, 9978); + dasm_put(Dst, 9985); } else { - dasm_put(Dst, 9990); + dasm_put(Dst, 9997); } - dasm_put(Dst, 9559); + dasm_put(Dst, 9566); break; case BC_SUBVN: case BC_SUBNV: case BC_SUBVV: - dasm_put(Dst, 10095); + dasm_put(Dst, 10102); vk = ((int)op - BC_ADDVN) / (BC_ADDNV-BC_ADDVN); switch (vk) { case 0: - dasm_put(Dst, 10103, LJ_TISNUM); + dasm_put(Dst, 10110, LJ_TISNUM); if (sse) { - dasm_put(Dst, 10215); + dasm_put(Dst, 10222); } else { - dasm_put(Dst, 10229); + dasm_put(Dst, 10236); } break; case 1: - dasm_put(Dst, 10137, LJ_TISNUM); + dasm_put(Dst, 10144, LJ_TISNUM); if (sse) { - dasm_put(Dst, 10237); + dasm_put(Dst, 10244); } else { - dasm_put(Dst, 10251); + dasm_put(Dst, 10258); } break; default: - dasm_put(Dst, 10171, LJ_TISNUM, LJ_TISNUM); + dasm_put(Dst, 10178, LJ_TISNUM, LJ_TISNUM); if (sse) { - dasm_put(Dst, 10259); + dasm_put(Dst, 10266); } else { - dasm_put(Dst, 10273); + dasm_put(Dst, 10280); } break; } if (sse) { - dasm_put(Dst, 9978); + dasm_put(Dst, 9985); } else { - dasm_put(Dst, 9990); + dasm_put(Dst, 9997); } - dasm_put(Dst, 9559); + dasm_put(Dst, 9566); break; case BC_MULVN: case BC_MULNV: case BC_MULVV: - dasm_put(Dst, 10095); + dasm_put(Dst, 10102); vk = ((int)op - BC_ADDVN) / (BC_ADDNV-BC_ADDVN); switch (vk) { case 0: - dasm_put(Dst, 10103, LJ_TISNUM); + dasm_put(Dst, 10110, LJ_TISNUM); if (sse) { - dasm_put(Dst, 10281); + dasm_put(Dst, 10288); } else { - dasm_put(Dst, 10295); + dasm_put(Dst, 10302); } break; case 1: - dasm_put(Dst, 10137, LJ_TISNUM); + dasm_put(Dst, 10144, LJ_TISNUM); if (sse) { - dasm_put(Dst, 10303); + dasm_put(Dst, 10310); } else { - dasm_put(Dst, 10317); + dasm_put(Dst, 10324); } break; default: - dasm_put(Dst, 10171, LJ_TISNUM, LJ_TISNUM); + dasm_put(Dst, 10178, LJ_TISNUM, LJ_TISNUM); if (sse) { - dasm_put(Dst, 10325); + dasm_put(Dst, 10332); } else { - dasm_put(Dst, 10339); + dasm_put(Dst, 10346); } break; } if (sse) { - dasm_put(Dst, 9978); + dasm_put(Dst, 9985); } else { - dasm_put(Dst, 9990); + dasm_put(Dst, 9997); } - dasm_put(Dst, 9559); + dasm_put(Dst, 9566); break; case BC_DIVVN: case BC_DIVNV: case BC_DIVVV: - dasm_put(Dst, 10095); + dasm_put(Dst, 10102); vk = ((int)op - BC_ADDVN) / (BC_ADDNV-BC_ADDVN); switch (vk) { case 0: - dasm_put(Dst, 10103, LJ_TISNUM); + dasm_put(Dst, 10110, LJ_TISNUM); if (sse) { - dasm_put(Dst, 10347); + dasm_put(Dst, 10354); } else { - dasm_put(Dst, 10361); + dasm_put(Dst, 10368); } break; case 1: - dasm_put(Dst, 10137, LJ_TISNUM); + dasm_put(Dst, 10144, LJ_TISNUM); if (sse) { - dasm_put(Dst, 10369); + dasm_put(Dst, 10376); } else { - dasm_put(Dst, 10383); + dasm_put(Dst, 10390); } break; default: - dasm_put(Dst, 10171, LJ_TISNUM, LJ_TISNUM); + dasm_put(Dst, 10178, LJ_TISNUM, LJ_TISNUM); if (sse) { - dasm_put(Dst, 10391); + dasm_put(Dst, 10398); } else { - dasm_put(Dst, 10405); + dasm_put(Dst, 10412); } break; } if (sse) { - dasm_put(Dst, 9978); + dasm_put(Dst, 9985); } else { - dasm_put(Dst, 9990); + dasm_put(Dst, 9997); } - dasm_put(Dst, 9559); + dasm_put(Dst, 9566); break; case BC_MODVN: - dasm_put(Dst, 10095); + dasm_put(Dst, 10102); vk = ((int)op - BC_ADDVN) / (BC_ADDNV-BC_ADDVN); switch (vk) { case 0: - dasm_put(Dst, 10103, LJ_TISNUM); + dasm_put(Dst, 10110, LJ_TISNUM); if (sse) { - dasm_put(Dst, 10413); + dasm_put(Dst, 10420); } else { - dasm_put(Dst, 10427); + dasm_put(Dst, 10434); } break; case 1: - dasm_put(Dst, 10137, LJ_TISNUM); + dasm_put(Dst, 10144, LJ_TISNUM); if (sse) { - dasm_put(Dst, 10435); + dasm_put(Dst, 10442); } else { - dasm_put(Dst, 10449); + dasm_put(Dst, 10456); } break; default: - dasm_put(Dst, 10171, LJ_TISNUM, LJ_TISNUM); + dasm_put(Dst, 10178, LJ_TISNUM, LJ_TISNUM); if (sse) { - dasm_put(Dst, 10457); + dasm_put(Dst, 10464); } else { - dasm_put(Dst, 10471); + dasm_put(Dst, 10478); } break; } - dasm_put(Dst, 10479); + dasm_put(Dst, 10486); if (sse) { - dasm_put(Dst, 9978); + dasm_put(Dst, 9985); } else { - dasm_put(Dst, 9990); + dasm_put(Dst, 9997); } - dasm_put(Dst, 9559); + dasm_put(Dst, 9566); break; case BC_MODNV: case BC_MODVV: - dasm_put(Dst, 10095); + dasm_put(Dst, 10102); vk = ((int)op - BC_ADDVN) / (BC_ADDNV-BC_ADDVN); switch (vk) { case 0: - dasm_put(Dst, 10103, LJ_TISNUM); + dasm_put(Dst, 10110, LJ_TISNUM); if (sse) { - dasm_put(Dst, 10413); + dasm_put(Dst, 10420); } else { - dasm_put(Dst, 10427); + dasm_put(Dst, 10434); } break; case 1: - dasm_put(Dst, 10137, LJ_TISNUM); + dasm_put(Dst, 10144, LJ_TISNUM); if (sse) { - dasm_put(Dst, 10435); + dasm_put(Dst, 10442); } else { - dasm_put(Dst, 10449); + dasm_put(Dst, 10456); } break; default: - dasm_put(Dst, 10171, LJ_TISNUM, LJ_TISNUM); + dasm_put(Dst, 10178, LJ_TISNUM, LJ_TISNUM); if (sse) { - dasm_put(Dst, 10457); + dasm_put(Dst, 10464); } else { - dasm_put(Dst, 10471); + dasm_put(Dst, 10478); } break; } - dasm_put(Dst, 10485); + dasm_put(Dst, 10492); break; case BC_POW: - dasm_put(Dst, 10095); + dasm_put(Dst, 10102); vk = ((int)op - BC_ADDVN) / (BC_ADDNV-BC_ADDVN); switch (vk) { case 0: - dasm_put(Dst, 10103, LJ_TISNUM); + dasm_put(Dst, 10110, LJ_TISNUM); if (sse) { - dasm_put(Dst, 10413); + dasm_put(Dst, 10420); } else { - dasm_put(Dst, 10427); + dasm_put(Dst, 10434); } break; case 1: - dasm_put(Dst, 10137, LJ_TISNUM); + dasm_put(Dst, 10144, LJ_TISNUM); if (sse) { - dasm_put(Dst, 10435); + dasm_put(Dst, 10442); } else { - dasm_put(Dst, 10449); + dasm_put(Dst, 10456); } break; default: - dasm_put(Dst, 10171, LJ_TISNUM, LJ_TISNUM); + dasm_put(Dst, 10178, LJ_TISNUM, LJ_TISNUM); if (sse) { - dasm_put(Dst, 10457); + dasm_put(Dst, 10464); } else { - dasm_put(Dst, 10471); + dasm_put(Dst, 10478); } break; } - dasm_put(Dst, 10490); + dasm_put(Dst, 10497); if (sse) { - dasm_put(Dst, 9978); + dasm_put(Dst, 9985); } else { - dasm_put(Dst, 9990); + dasm_put(Dst, 9997); } - dasm_put(Dst, 9559); + dasm_put(Dst, 9566); break; case BC_CAT: - dasm_put(Dst, 10494, Dt1(->base), Dt1(->base)); + dasm_put(Dst, 10501, Dt1(->base), Dt1(->base)); break; /* -- Constant ops ------------------------------------------------------ */ case BC_KSTR: - dasm_put(Dst, 10584, LJ_TSTR); + dasm_put(Dst, 10591, LJ_TSTR); break; case BC_KSHORT: if (sse) { - dasm_put(Dst, 10619); + dasm_put(Dst, 10626); } else { - dasm_put(Dst, 10634); + dasm_put(Dst, 10641); } - dasm_put(Dst, 9559); + dasm_put(Dst, 9566); break; case BC_KNUM: if (sse) { - dasm_put(Dst, 10642); + dasm_put(Dst, 10649); } else { - dasm_put(Dst, 10655); + dasm_put(Dst, 10662); } - dasm_put(Dst, 9559); + dasm_put(Dst, 9566); break; case BC_KPRI: - dasm_put(Dst, 10662); + dasm_put(Dst, 10669); break; case BC_KNIL: - dasm_put(Dst, 10690, LJ_TNIL); + dasm_put(Dst, 10697, LJ_TNIL); break; /* -- Upvalue and function ops ------------------------------------------ */ case BC_UGET: - dasm_put(Dst, 10737, offsetof(GCfuncL, uvptr), DtA(->v)); + dasm_put(Dst, 10744, offsetof(GCfuncL, uvptr), DtA(->v)); break; case BC_USETV: #define TV2MARKOFS \ ((int32_t)offsetof(GCupval, marked)-(int32_t)offsetof(GCupval, tv)) - dasm_put(Dst, 10782, offsetof(GCfuncL, uvptr), DtA(->closed), DtA(->v), TV2MARKOFS, LJ_GC_BLACK, LJ_TISGCV, LJ_TISNUM - LJ_TISGCV, Dt4(->gch.marked), LJ_GC_WHITES, GG_DISP2G); - dasm_put(Dst, 10873); + dasm_put(Dst, 10789, offsetof(GCfuncL, uvptr), DtA(->closed), DtA(->v), TV2MARKOFS, LJ_GC_BLACK, LJ_TISGCV, LJ_TISNUM - LJ_TISGCV, Dt4(->gch.marked), LJ_GC_WHITES, GG_DISP2G); + dasm_put(Dst, 10880); break; #undef TV2MARKOFS case BC_USETS: - dasm_put(Dst, 10885, offsetof(GCfuncL, uvptr), DtA(->v), LJ_TSTR, DtA(->marked), LJ_GC_BLACK, Dt4(->gch.marked), LJ_GC_WHITES, DtA(->closed), GG_DISP2G); + dasm_put(Dst, 10892, offsetof(GCfuncL, uvptr), DtA(->v), LJ_TSTR, DtA(->marked), LJ_GC_BLACK, Dt4(->gch.marked), LJ_GC_WHITES, DtA(->closed), GG_DISP2G); break; case BC_USETN: - dasm_put(Dst, 10978); + dasm_put(Dst, 10985); if (sse) { - dasm_put(Dst, 10983); + dasm_put(Dst, 10990); } else { - dasm_put(Dst, 9798); + dasm_put(Dst, 9805); } - dasm_put(Dst, 10990, offsetof(GCfuncL, uvptr), DtA(->v)); + dasm_put(Dst, 10997, offsetof(GCfuncL, uvptr), DtA(->v)); if (sse) { - dasm_put(Dst, 10999); + dasm_put(Dst, 11006); } else { - dasm_put(Dst, 11005); + dasm_put(Dst, 11012); } - dasm_put(Dst, 9559); + dasm_put(Dst, 9566); break; case BC_USETP: - dasm_put(Dst, 11008, offsetof(GCfuncL, uvptr), DtA(->v)); + dasm_put(Dst, 11015, offsetof(GCfuncL, uvptr), DtA(->v)); break; case BC_UCLO: - dasm_put(Dst, 11047, -BCBIAS_J*4, Dt1(->openupval), Dt1(->base), Dt1(->base)); + dasm_put(Dst, 11054, -BCBIAS_J*4, Dt1(->openupval), Dt1(->base), Dt1(->base)); break; case BC_FNEW: - dasm_put(Dst, 11102, Dt1(->base), Dt1(->base), LJ_TFUNC); + dasm_put(Dst, 11109, Dt1(->base), Dt1(->base), LJ_TFUNC); break; /* -- Table ops --------------------------------------------------------- */ case BC_TNEW: - dasm_put(Dst, 11168, Dt1(->base), DISPATCH_GL(gc.total), DISPATCH_GL(gc.threshold), Dt1(->base), LJ_TTAB); + dasm_put(Dst, 11175, Dt1(->base), DISPATCH_GL(gc.total), DISPATCH_GL(gc.threshold), Dt1(->base), LJ_TTAB); break; case BC_TDUP: - dasm_put(Dst, 11289, DISPATCH_GL(gc.total), DISPATCH_GL(gc.threshold), Dt1(->base), Dt1(->base), LJ_TTAB); + dasm_put(Dst, 11296, DISPATCH_GL(gc.total), DISPATCH_GL(gc.threshold), Dt1(->base), Dt1(->base), LJ_TTAB); break; case BC_GGET: - dasm_put(Dst, 11384, Dt7(->env)); + dasm_put(Dst, 11391, Dt7(->env)); break; case BC_GSET: - dasm_put(Dst, 11403, Dt7(->env)); + dasm_put(Dst, 11410, Dt7(->env)); break; case BC_TGETV: - dasm_put(Dst, 11422, LJ_TTAB, LJ_TISNUM); + dasm_put(Dst, 11429, LJ_TTAB, LJ_TISNUM); if (sse) { - dasm_put(Dst, 11455); + dasm_put(Dst, 11462); } else { } - dasm_put(Dst, 11476, Dt6(->asize), Dt6(->array), LJ_TNIL, Dt6(->metatable), Dt6(->metatable), Dt6(->nomm), 1<asize), Dt6(->array), LJ_TNIL, Dt6(->metatable), Dt6(->metatable), Dt6(->nomm), 1<hmask), Dt5(->hash), sizeof(Node), Dt6(->node), DtB(->key.it), LJ_TSTR, DtB(->key.gcr), LJ_TNIL); - dasm_put(Dst, 11672, LJ_TNIL, DtB(->next), Dt6(->metatable), Dt6(->nomm), 1<hmask), Dt5(->hash), sizeof(Node), Dt6(->node), DtB(->key.it), LJ_TSTR, DtB(->key.gcr), LJ_TNIL); + dasm_put(Dst, 11679, LJ_TNIL, DtB(->next), Dt6(->metatable), Dt6(->nomm), 1<asize), Dt6(->array), LJ_TNIL, Dt6(->metatable), Dt6(->metatable), Dt6(->nomm), 1<asize), Dt6(->array), LJ_TNIL, Dt6(->metatable), Dt6(->metatable), Dt6(->nomm), 1<asize), Dt6(->array), LJ_TNIL, Dt6(->marked), LJ_GC_BLACK, Dt6(->metatable), Dt6(->metatable)); - dasm_put(Dst, 11961, Dt6(->nomm), 1<marked), cast_byte(~LJ_GC_BLACK), DISPATCH_GL(gc.grayagain), DISPATCH_GL(gc.grayagain), Dt6(->gclist)); + dasm_put(Dst, 11884, Dt6(->asize), Dt6(->array), LJ_TNIL, Dt6(->marked), LJ_GC_BLACK, Dt6(->metatable), Dt6(->metatable)); + dasm_put(Dst, 11968, Dt6(->nomm), 1<marked), cast_byte(~LJ_GC_BLACK), DISPATCH_GL(gc.grayagain), DISPATCH_GL(gc.grayagain), Dt6(->gclist)); break; case BC_TSETS: - dasm_put(Dst, 12023, LJ_TTAB, Dt6(->hmask), Dt5(->hash), sizeof(Node), Dt6(->nomm), Dt6(->node), DtB(->key.it), LJ_TSTR, DtB(->key.gcr), LJ_TNIL); - dasm_put(Dst, 12099, Dt6(->marked), LJ_GC_BLACK, Dt6(->metatable), Dt6(->metatable), Dt6(->nomm), 1<next)); - dasm_put(Dst, 12192, Dt6(->metatable), Dt6(->nomm), 1<base), Dt1(->base), Dt6(->marked), cast_byte(~LJ_GC_BLACK), DISPATCH_GL(gc.grayagain), DISPATCH_GL(gc.grayagain), Dt6(->gclist)); + dasm_put(Dst, 12030, LJ_TTAB, Dt6(->hmask), Dt5(->hash), sizeof(Node), Dt6(->nomm), Dt6(->node), DtB(->key.it), LJ_TSTR, DtB(->key.gcr), LJ_TNIL); + dasm_put(Dst, 12106, Dt6(->marked), LJ_GC_BLACK, Dt6(->metatable), Dt6(->metatable), Dt6(->nomm), 1<next)); + dasm_put(Dst, 12199, Dt6(->metatable), Dt6(->nomm), 1<base), Dt1(->base), Dt6(->marked), cast_byte(~LJ_GC_BLACK), DISPATCH_GL(gc.grayagain), DISPATCH_GL(gc.grayagain), Dt6(->gclist)); break; case BC_TSETB: - dasm_put(Dst, 12283, LJ_TTAB, Dt6(->asize), Dt6(->array), LJ_TNIL, Dt6(->marked), LJ_GC_BLACK, Dt6(->metatable)); - dasm_put(Dst, 12382, Dt6(->metatable), Dt6(->nomm), 1<marked), cast_byte(~LJ_GC_BLACK), DISPATCH_GL(gc.grayagain), DISPATCH_GL(gc.grayagain), Dt6(->gclist)); + dasm_put(Dst, 12290, LJ_TTAB, Dt6(->asize), Dt6(->array), LJ_TNIL, Dt6(->marked), LJ_GC_BLACK, Dt6(->metatable)); + dasm_put(Dst, 12389, Dt6(->metatable), Dt6(->nomm), 1<marked), cast_byte(~LJ_GC_BLACK), DISPATCH_GL(gc.grayagain), DISPATCH_GL(gc.grayagain), Dt6(->gclist)); break; case BC_TSETM: - dasm_put(Dst, 12428); + dasm_put(Dst, 12435); if (sse) { - dasm_put(Dst, 12433); + dasm_put(Dst, 12440); } else { } - dasm_put(Dst, 12440, Dt6(->marked), LJ_GC_BLACK, Dt6(->asize), Dt6(->array), Dt1(->base), Dt1(->base)); - dasm_put(Dst, 12580, Dt6(->marked), cast_byte(~LJ_GC_BLACK), DISPATCH_GL(gc.grayagain), DISPATCH_GL(gc.grayagain), Dt6(->gclist)); + dasm_put(Dst, 12447, Dt6(->marked), LJ_GC_BLACK, Dt6(->asize), Dt6(->array), Dt1(->base), Dt1(->base)); + dasm_put(Dst, 12587, Dt6(->marked), cast_byte(~LJ_GC_BLACK), DISPATCH_GL(gc.grayagain), DISPATCH_GL(gc.grayagain), Dt6(->gclist)); break; /* -- Calls and vararg handling ----------------------------------------- */ case BC_CALL: case BC_CALLM: - dasm_put(Dst, 10099); + dasm_put(Dst, 10106); if (op == BC_CALLM) { - dasm_put(Dst, 12598); + dasm_put(Dst, 12605); } - dasm_put(Dst, 12603, LJ_TFUNC, Dt7(->pc)); + dasm_put(Dst, 12610, LJ_TFUNC, Dt7(->pc)); break; case BC_CALLMT: - dasm_put(Dst, 12598); + dasm_put(Dst, 12605); break; case BC_CALLT: - dasm_put(Dst, 12645, LJ_TFUNC, FRAME_TYPE, Dt7(->ffid), Dt7(->pc)); - dasm_put(Dst, 12764, FRAME_TYPE, Dt7(->pc), PC2PROTO(k)); + dasm_put(Dst, 12652, LJ_TFUNC, FRAME_TYPE, Dt7(->ffid), Dt7(->pc)); + dasm_put(Dst, 12771, FRAME_TYPE, Dt7(->pc), PC2PROTO(k)); break; case BC_ITERC: - dasm_put(Dst, 12822, LJ_TFUNC, 2+1, Dt7(->pc)); + dasm_put(Dst, 12829, LJ_TFUNC, 2+1, Dt7(->pc)); break; case BC_VARG: - dasm_put(Dst, 12903, Dt7(->pc), PC2PROTO(numparams), (8+FRAME_VARG), LJ_TNIL); - dasm_put(Dst, 13048, Dt1(->maxstack), Dt1(->base), Dt1(->top), Dt1(->base), Dt1(->top)); + dasm_put(Dst, 12910, Dt7(->pc), PC2PROTO(numparams), (8+FRAME_VARG), LJ_TNIL); + dasm_put(Dst, 13055, Dt1(->maxstack), Dt1(->base), Dt1(->top), Dt1(->base), Dt1(->top)); break; /* -- Returns ----------------------------------------------------------- */ case BC_RETM: - dasm_put(Dst, 12598); + dasm_put(Dst, 12605); break; case BC_RET: case BC_RET0: case BC_RET1: if (op != BC_RET0) { - dasm_put(Dst, 13147); + dasm_put(Dst, 13154); } - dasm_put(Dst, 13151, FRAME_TYPE); + dasm_put(Dst, 13158, FRAME_TYPE); switch (op) { case BC_RET: - dasm_put(Dst, 13170); + dasm_put(Dst, 13177); break; case BC_RET1: - dasm_put(Dst, 13228); + dasm_put(Dst, 13235); /* fallthrough */ case BC_RET0: - dasm_put(Dst, 13244); + dasm_put(Dst, 13251); default: break; } - dasm_put(Dst, 13255, Dt7(->pc), PC2PROTO(k)); + dasm_put(Dst, 13262, Dt7(->pc), PC2PROTO(k)); if (op == BC_RET) { - dasm_put(Dst, 13299, LJ_TNIL); + dasm_put(Dst, 13306, LJ_TNIL); } else { - dasm_put(Dst, 13308, LJ_TNIL); + dasm_put(Dst, 13315, LJ_TNIL); } - dasm_put(Dst, 13315); + dasm_put(Dst, 13322); if (op != BC_RET0) { - dasm_put(Dst, 13336); + dasm_put(Dst, 13343); } dasm_put(Dst, 4570); break; @@ -2037,7 +2037,7 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop, int cmov, int sse) case BC_FORL: #if LJ_HASJIT - dasm_put(Dst, 13340, HOTCOUNT_PCMASK, GG_DISP2HOT); + dasm_put(Dst, 13347, HOTCOUNT_PCMASK, GG_DISP2HOT); #endif break; @@ -2049,57 +2049,57 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop, int cmov, int sse) case BC_FORI: case BC_IFORL: vk = (op == BC_IFORL || op == BC_JFORL); - dasm_put(Dst, 13361); + dasm_put(Dst, 13368); if (!vk) { - dasm_put(Dst, 13365, LJ_TISNUM, LJ_TISNUM); + dasm_put(Dst, 13372, LJ_TISNUM, LJ_TISNUM); } - dasm_put(Dst, 13384); + dasm_put(Dst, 13391); if (!vk) { - dasm_put(Dst, 13388, LJ_TISNUM); + dasm_put(Dst, 13395, LJ_TISNUM); } if (sse) { - dasm_put(Dst, 13397); + dasm_put(Dst, 13404); if (vk) { - dasm_put(Dst, 13409); + dasm_put(Dst, 13416); } else { - dasm_put(Dst, 13428); + dasm_put(Dst, 13435); } - dasm_put(Dst, 13433); + dasm_put(Dst, 13440); } else { - dasm_put(Dst, 13446); + dasm_put(Dst, 13453); if (vk) { - dasm_put(Dst, 13452); + dasm_put(Dst, 13459); } else { - dasm_put(Dst, 13468); + dasm_put(Dst, 13475); } - dasm_put(Dst, 13476); + dasm_put(Dst, 13483); if (cmov) { - dasm_put(Dst, 9522); + dasm_put(Dst, 9529); } else { - dasm_put(Dst, 9528); + dasm_put(Dst, 9535); } if (!cmov) { - dasm_put(Dst, 13481); + dasm_put(Dst, 13488); } } if (op == BC_FORI) { - dasm_put(Dst, 13487, -BCBIAS_J*4); + dasm_put(Dst, 13494, -BCBIAS_J*4); } else if (op == BC_JFORI) { - dasm_put(Dst, 13497, -BCBIAS_J*4, BC_JLOOP); + dasm_put(Dst, 13504, -BCBIAS_J*4, BC_JLOOP); } else if (op == BC_IFORL) { - dasm_put(Dst, 13511, -BCBIAS_J*4); + dasm_put(Dst, 13518, -BCBIAS_J*4); } else { - dasm_put(Dst, 13507, BC_JLOOP); + dasm_put(Dst, 13514, BC_JLOOP); } - dasm_put(Dst, 9557); + dasm_put(Dst, 9564); if (sse) { - dasm_put(Dst, 13521); + dasm_put(Dst, 13528); } break; case BC_ITERL: #if LJ_HASJIT - dasm_put(Dst, 13340, HOTCOUNT_PCMASK, GG_DISP2HOT); + dasm_put(Dst, 13347, HOTCOUNT_PCMASK, GG_DISP2HOT); #endif break; @@ -2108,33 +2108,33 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop, int cmov, int sse) break; #endif case BC_IITERL: - dasm_put(Dst, 13532, LJ_TNIL); + dasm_put(Dst, 13539, LJ_TNIL); if (op == BC_JITERL) { - dasm_put(Dst, 13547, BC_JLOOP); + dasm_put(Dst, 13554, BC_JLOOP); } else { - dasm_put(Dst, 13561, -BCBIAS_J*4); + dasm_put(Dst, 13568, -BCBIAS_J*4); } - dasm_put(Dst, 9857); + dasm_put(Dst, 9864); break; case BC_LOOP: #if LJ_HASJIT - dasm_put(Dst, 13340, HOTCOUNT_PCMASK, GG_DISP2HOT); + dasm_put(Dst, 13347, HOTCOUNT_PCMASK, GG_DISP2HOT); #endif break; case BC_ILOOP: - dasm_put(Dst, 9559); + dasm_put(Dst, 9566); break; case BC_JLOOP: #if LJ_HASJIT - dasm_put(Dst, 13577, DISPATCH_J(trace), DtD(->mcode), DISPATCH_GL(jit_base), DISPATCH_GL(jit_L), 9*16+4*8, -1*16, -2*16, -3*16, -4*16, -5*16, -6*16, -7*16, -8*16, -9*16); + dasm_put(Dst, 13584, DISPATCH_J(trace), DtD(->mcode), DISPATCH_GL(jit_base), DISPATCH_GL(jit_L), 9*16+4*8, -1*16, -2*16, -3*16, -4*16, -5*16, -6*16, -7*16, -8*16, -9*16); #endif break; case BC_JMP: - dasm_put(Dst, 13686, -BCBIAS_J*4); + dasm_put(Dst, 13693, -BCBIAS_J*4); break; /* -- Function headers -------------------------------------------------- */ @@ -2148,7 +2148,7 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop, int cmov, int sse) case BC_FUNCF: #if LJ_HASJIT - dasm_put(Dst, 13711, HOTCOUNT_PCMASK, GG_DISP2HOT); + dasm_put(Dst, 13718, HOTCOUNT_PCMASK, GG_DISP2HOT); #endif case BC_FUNCV: /* NYI: compiled vararg functions. */ break; @@ -2158,47 +2158,47 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop, int cmov, int sse) break; #endif case BC_IFUNCF: - dasm_put(Dst, 13732, -4+PC2PROTO(k), Dt1(->maxstack), -4+PC2PROTO(numparams)); + dasm_put(Dst, 13739, -4+PC2PROTO(k), Dt1(->maxstack), -4+PC2PROTO(numparams)); if (op == BC_JFUNCF) { - dasm_put(Dst, 13762, BC_JLOOP); + dasm_put(Dst, 13769, BC_JLOOP); } else { - dasm_put(Dst, 9559); + dasm_put(Dst, 9566); } - dasm_put(Dst, 13771, LJ_TNIL); + dasm_put(Dst, 13778, LJ_TNIL); break; case BC_JFUNCV: #if !LJ_HASJIT break; #endif - dasm_put(Dst, 9250); + dasm_put(Dst, 9257); break; /* NYI: compiled vararg functions. */ case BC_IFUNCV: - dasm_put(Dst, 13793, FRAME_VARG, Dt1(->maxstack), -4+PC2PROTO(numparams), LJ_TNIL); + dasm_put(Dst, 13800, FRAME_VARG, Dt1(->maxstack), -4+PC2PROTO(numparams), LJ_TNIL); if (op == BC_JFUNCV) { - dasm_put(Dst, 13762, BC_JLOOP); + dasm_put(Dst, 13769, BC_JLOOP); } else { - dasm_put(Dst, 13884, -4+PC2PROTO(k)); + dasm_put(Dst, 13891, -4+PC2PROTO(k)); } - dasm_put(Dst, 13907, LJ_TNIL); + dasm_put(Dst, 13914, LJ_TNIL); break; case BC_FUNCC: case BC_FUNCCW: - dasm_put(Dst, 13929, Dt8(->f), Dt1(->base), 8*LUA_MINSTACK, Dt1(->maxstack), Dt1(->top)); + dasm_put(Dst, 13936, Dt8(->f), Dt1(->base), 8*LUA_MINSTACK, Dt1(->maxstack), Dt1(->top)); if (op == BC_FUNCC) { - dasm_put(Dst, 13959); + dasm_put(Dst, 13966); } else { - dasm_put(Dst, 13963); + dasm_put(Dst, 13970); } - dasm_put(Dst, 13971, DISPATCH_GL(vmstate), ~LJ_VMST_C); + dasm_put(Dst, 13978, DISPATCH_GL(vmstate), ~LJ_VMST_C); if (op == BC_FUNCC) { - dasm_put(Dst, 13980); + dasm_put(Dst, 13987); } else { - dasm_put(Dst, 13984, DISPATCH_GL(wrapf)); + dasm_put(Dst, 13991, DISPATCH_GL(wrapf)); } - dasm_put(Dst, 13989, DISPATCH_GL(vmstate), ~LJ_VMST_INTERP, Dt1(->base), Dt1(->top)); + dasm_put(Dst, 13996, DISPATCH_GL(vmstate), ~LJ_VMST_INTERP, Dt1(->base), Dt1(->top)); break; /* ---------------------------------------------------------------------- */ @@ -2226,7 +2226,7 @@ static int build_backend(BuildCtx *ctx) build_subroutines(ctx, cmov, sse); - dasm_put(Dst, 14014); + dasm_put(Dst, 14021); for (op = 0; op < BC__MAX; op++) build_ins(ctx, (BCOp)op, op, cmov, sse); diff --git a/src/buildvm_x86.dasc b/src/buildvm_x86.dasc index 579e39da..0fcfc1a9 100644 --- a/src/buildvm_x86.dasc +++ b/src/buildvm_x86.dasc @@ -2613,6 +2613,7 @@ static void build_subroutines(BuildCtx *ctx, int cmov, int sse) | mov L:RB, [DISPATCH+DISPATCH_GL(jit_L)] | mov BASE, [DISPATCH+DISPATCH_GL(jit_base)] | mov aword [DISPATCH+DISPATCH_J(L)], L:RBa + | mov dword [DISPATCH+DISPATCH_GL(jit_L)], 0 | mov L:RB->base, BASE |.if X64WIN | lea CARG2, [rsp+4*8] diff --git a/src/buildvm_x86.h b/src/buildvm_x86.h index c36e2aa5..d1a08ef8 100644 --- a/src/buildvm_x86.h +++ b/src/buildvm_x86.h @@ -12,7 +12,7 @@ #define DASM_SECTION_CODE_OP 0 #define DASM_SECTION_CODE_SUB 1 #define DASM_MAXSECTION 2 -static const unsigned char build_actionlist[15217] = { +static const unsigned char build_actionlist[15224] = { 254,1,248,10,252,247,198,237,15,132,244,11,131,230,252,248,41,252,242,141, 76,49,252,248,139,114,252,252,199,68,10,4,237,248,12,131,192,1,137,68,36, 20,252,247,198,237,15,132,244,13,248,14,252,247,198,237,15,132,244,10,199, @@ -416,336 +416,337 @@ static const unsigned char build_actionlist[15217] = { 233,137,139,233,129,252,236,239,252,242,15,17,125,216,252,242,15,17,117,208, 252,242,15,17,109,200,252,242,15,17,101,192,252,242,15,17,93,184,252,242, 15,17,85,176,252,242,15,17,77,168,252,242,15,17,69,160,139,171,233,139,147, - 233,137,171,233,137,149,233,141,84,36,16,141,139,233,232,251,1,23,139,141, - 233,129,225,239,137,204,137,169,233,139,149,233,139,177,233,255,248,144,255, - 133,192,15,136,244,249,137,68,36,20,139,122,252,248,139,191,233,139,191,233, - 199,131,233,0,0,0,0,199,131,233,237,139,6,15,182,204,15,182,232,131,198,4, - 193,232,16,129,252,253,239,15,130,244,248,139,68,36,20,248,2,252,255,36,171, - 248,3,252,247,216,137,252,233,137,194,232,251,1,24,255,248,82,255,217,124, - 36,4,137,68,36,8,102,184,0,4,102,11,68,36,4,102,37,252,255,252,247,102,137, - 68,36,6,217,108,36,6,217,252,252,217,108,36,4,139,68,36,8,195,255,248,145, - 102,15,252,239,210,102,15,118,210,102,15,115,210,1,184,0,0,48,67,102,15,110, - 216,102,15,112,219,81,15,40,200,102,15,84,202,102,15,46,217,15,134,244,247, - 102,15,85,208,252,242,15,88,203,252,242,15,92,203,102,15,86,202,184,0,0,252, - 240,63,102,15,110,208,102,15,112,210,81,252,242,15,194,193,1,102,15,84,194, - 252,242,15,92,200,15,40,193,248,1,195,248,84,255,217,124,36,4,137,68,36,8, - 102,184,0,8,102,11,68,36,4,102,37,252,255,252,251,102,137,68,36,6,217,108, - 36,6,217,252,252,217,108,36,4,139,68,36,8,195,255,248,146,102,15,252,239, - 210,102,15,118,210,102,15,115,210,1,184,0,0,48,67,102,15,110,216,102,15,112, - 219,81,15,40,200,102,15,84,202,102,15,46,217,15,134,244,247,102,15,85,208, - 252,242,15,88,203,252,242,15,92,203,102,15,86,202,184,0,0,252,240,191,102, - 15,110,208,102,15,112,210,81,252,242,15,194,193,6,102,15,84,194,252,242,15, - 92,200,15,40,193,248,1,195,248,104,255,217,124,36,4,137,68,36,8,102,184,0, - 12,102,11,68,36,4,102,137,68,36,6,217,108,36,6,217,252,252,217,108,36,4,139, - 68,36,8,195,255,248,147,102,15,252,239,210,102,15,118,210,102,15,115,210, - 1,184,0,0,48,67,102,15,110,216,102,15,112,219,81,15,40,200,102,15,84,202, - 102,15,46,217,15,134,244,247,102,15,85,208,15,40,193,252,242,15,88,203,252, - 242,15,92,203,184,0,0,252,240,63,102,15,110,216,102,15,112,219,81,252,242, - 15,194,193,1,102,15,84,195,252,242,15,92,200,102,15,86,202,15,40,193,248, - 1,195,248,148,255,15,40,232,252,242,15,94,193,102,15,252,239,210,102,15,118, - 210,102,15,115,210,1,184,0,0,48,67,102,15,110,216,102,15,112,219,81,15,40, - 224,102,15,84,226,102,15,46,220,15,134,244,247,102,15,85,208,252,242,15,88, - 227,252,242,15,92,227,102,15,86,226,184,0,0,252,240,63,102,15,110,208,102, - 15,112,210,81,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,255,217,193,216,252,241,217,124,36,4,102,184,0, - 4,102,11,68,36,4,102,37,252,255,252,247,102,137,68,36,6,217,108,36,6,217, - 252,252,217,108,36,4,222,201,222,252,233,195,255,248,88,217,252,234,222,201, - 248,149,217,84,36,4,129,124,36,4,0,0,128,127,15,132,244,247,129,124,36,4, - 0,0,128,252,255,15,132,244,248,248,150,217,192,217,252,252,220,252,233,217, - 201,217,252,240,217,232,222,193,217,252,253,221,217,248,1,195,248,2,221,216, - 217,252,238,195,255,248,107,219,84,36,4,219,68,36,4,255,223,252,233,255,221, - 252,233,223,224,158,255,15,133,244,254,15,138,244,255,221,216,139,68,36,4, - 131,252,248,1,15,142,244,252,248,1,169,1,0,0,0,15,133,244,248,216,200,209, - 232,252,233,244,1,248,2,209,232,15,132,244,251,217,192,248,3,216,200,209, - 232,15,132,244,250,15,131,244,3,220,201,252,233,244,3,248,4,255,222,201,248, - 5,195,248,6,15,132,244,5,15,130,244,253,217,232,222,252,241,252,247,216,131, - 252,248,1,15,132,244,5,252,233,244,1,248,7,221,216,217,232,195,248,8,217, - 84,36,4,217,201,217,84,36,8,139,68,36,4,209,224,61,0,0,0,252,255,15,132,244, - 248,139,68,36,8,209,224,15,132,244,250,61,0,0,0,252,255,15,132,244,250,217, - 252,241,252,233,244,150,248,9,255,217,232,255,223,252,234,255,221,252,234, - 223,224,158,255,15,132,244,247,217,201,248,1,221,216,195,248,2,217,225,217, - 232,255,15,132,244,249,221,216,217,225,217,252,238,184,0,0,0,0,15,146,208, - 209,200,51,68,36,4,15,137,244,249,217,201,248,3,221,217,217,225,195,248,4, - 131,124,36,4,0,15,141,244,3,221,216,221,216,133,192,15,132,244,251,217,252, - 238,195,248,5,199,68,36,4,0,0,128,127,217,68,36,4,195,255,248,107,255,248, - 151,252,242,15,45,193,252,242,15,42,208,102,15,46,202,15,133,244,254,15,138, - 244,255,248,152,131,252,248,1,15,142,244,252,248,1,169,1,0,0,0,15,133,244, - 248,252,242,15,89,192,209,232,252,233,244,1,248,2,209,232,15,132,244,251, - 15,40,200,248,3,252,242,15,89,192,209,232,15,132,244,250,15,131,244,3,255, - 252,242,15,89,200,252,233,244,3,248,4,252,242,15,89,193,248,5,195,248,6,15, - 132,244,5,15,130,244,253,80,184,0,0,252,240,63,102,15,110,200,102,15,112, - 201,81,252,242,15,94,200,88,15,40,193,252,247,216,131,252,248,1,15,132,244, - 5,252,233,244,1,248,7,184,0,0,252,240,63,102,15,110,192,102,15,112,192,81, - 195,248,8,252,242,15,17,76,36,12,252,242,15,17,68,36,4,131,124,36,12,0,15, - 133,244,247,139,68,36,16,209,224,61,0,0,224,252,255,15,132,244,248,248,1, - 255,131,124,36,4,0,15,133,244,247,139,68,36,8,209,224,15,132,244,250,61,0, - 0,224,252,255,15,132,244,251,248,1,221,68,36,12,221,68,36,4,217,252,241,217, - 192,217,252,252,220,252,233,217,201,217,252,240,217,232,222,193,217,252,253, - 221,217,221,92,36,4,252,242,15,16,68,36,4,195,248,9,184,0,0,252,240,63,102, - 15,110,208,102,15,112,210,81,102,15,46,194,15,132,244,247,15,40,193,248,1, - 195,248,2,102,15,252,239,210,102,15,118,210,102,15,115,210,1,102,15,84,194, - 184,0,0,252,240,63,102,15,110,208,102,15,112,210,81,102,15,46,194,15,132, - 244,1,102,15,80,193,15,87,192,136,196,15,146,208,48,224,15,133,244,1,248, - 3,184,0,0,252,240,127,102,15,110,192,102,15,112,192,81,195,248,4,102,15,80, - 193,133,192,15,133,244,3,255,15,87,192,195,248,5,102,15,80,193,133,192,15, - 132,244,3,15,87,192,195,248,153,255,139,68,36,12,252,242,15,16,68,36,4,131, - 252,248,1,15,132,244,247,15,135,244,248,232,244,82,252,233,244,253,248,1, - 232,244,84,252,233,244,253,248,2,131,252,248,3,15,132,244,247,15,135,244, - 248,232,244,104,255,252,233,244,253,248,1,252,242,15,81,192,248,7,252,242, - 15,17,68,36,4,221,68,36,4,195,248,2,221,68,36,4,131,252,248,5,15,130,244, - 88,15,132,244,149,248,2,131,252,248,7,15,132,244,247,15,135,244,248,217,252, - 237,217,201,217,252,241,195,248,1,217,232,217,201,217,252,241,195,248,2,131, - 252,248,9,15,132,244,247,15,135,244,248,255,217,252,236,217,201,217,252,241, - 195,248,1,217,252,254,195,248,2,131,252,248,11,15,132,244,247,15,135,244, - 255,217,252,255,195,248,1,217,252,242,221,216,195,255,139,68,36,12,221,68, - 36,4,131,252,248,1,15,130,244,82,15,132,244,84,131,252,248,3,15,130,244,104, - 15,135,244,248,217,252,250,195,248,2,131,252,248,5,15,130,244,88,15,132,244, - 149,131,252,248,7,15,132,244,247,15,135,244,248,217,252,237,217,201,217,252, - 241,195,248,1,217,232,217,201,217,252,241,195,248,2,131,252,248,9,15,132, - 244,247,255,15,135,244,248,217,252,236,217,201,217,252,241,195,248,1,217, - 252,254,195,248,2,131,252,248,11,15,132,244,247,15,135,244,255,217,252,255, - 195,248,1,217,252,242,221,216,195,255,248,9,204,248,154,255,139,68,36,20, - 252,242,15,16,68,36,4,252,242,15,16,76,36,12,131,252,248,1,15,132,244,247, - 15,135,244,248,252,242,15,88,193,248,7,252,242,15,17,68,36,4,221,68,36,4, - 195,248,1,252,242,15,92,193,252,233,244,7,248,2,131,252,248,3,15,132,244, - 247,15,135,244,248,252,242,15,89,193,252,233,244,7,248,1,252,242,15,94,193, - 252,233,244,7,248,2,131,252,248,5,15,132,244,247,255,15,135,244,248,232,244, - 148,252,233,244,7,248,1,90,232,244,107,82,252,233,244,7,248,2,131,252,248, - 7,15,132,244,247,15,135,244,248,184,0,0,0,128,102,15,110,200,102,15,112,201, - 81,15,87,193,252,233,244,7,248,1,102,15,252,239,201,102,15,118,201,102,15, - 115,209,1,15,84,193,252,233,244,7,248,2,255,131,252,248,9,15,135,244,248, - 221,68,36,4,221,68,36,12,15,132,244,247,217,252,243,195,248,1,217,201,217, - 252,253,221,217,195,248,2,131,252,248,11,15,132,244,247,15,135,244,255,252, - 242,15,93,193,252,233,244,7,248,1,252,242,15,95,193,252,233,244,7,248,9,204, - 255,139,68,36,20,221,68,36,4,221,68,36,12,131,252,248,1,15,132,244,247,15, - 135,244,248,222,193,195,248,1,222,252,233,195,248,2,131,252,248,3,15,132, - 244,247,15,135,244,248,222,201,195,248,1,222,252,249,195,248,2,131,252,248, - 5,15,130,244,148,15,132,244,107,131,252,248,7,15,132,244,247,15,135,244,248, - 255,221,216,217,224,195,248,1,221,216,217,225,195,248,2,131,252,248,9,15, - 132,244,247,15,135,244,248,217,252,243,195,248,1,217,201,217,252,253,221, - 217,195,248,2,131,252,248,11,15,132,244,247,15,135,244,255,255,219,252,233, - 219,209,221,217,195,248,1,219,252,233,218,209,221,217,195,255,221,225,223, - 224,252,246,196,1,15,132,244,248,217,201,248,2,221,216,195,248,1,221,225, - 223,224,252,246,196,1,15,133,244,248,217,201,248,2,221,216,195,255,248,155, - 156,90,137,209,129,252,242,0,0,32,0,82,157,156,90,49,192,57,209,15,132,244, - 247,139,68,36,4,87,83,15,162,139,124,36,16,137,7,137,95,4,137,79,8,137,87, - 12,91,95,248,1,195,255,249,255,129,124,253,202,4,239,15,135,244,41,129,124, - 253,194,4,239,15,135,244,41,255,252,242,15,16,4,194,131,198,4,102,15,46,4, - 202,255,221,4,202,221,4,194,131,198,4,255,223,252,233,221,216,255,218,252, - 233,223,224,158,255,15,134,244,248,255,15,131,244,248,255,248,1,15,183,70, - 252,254,141,180,253,134,233,248,2,139,6,15,182,204,15,182,232,131,198,4,193, - 232,16,252,255,36,171,255,139,108,194,4,131,198,4,129,252,253,239,15,135, - 244,251,129,124,253,202,4,239,15,135,244,251,255,252,242,15,16,4,194,102, - 15,46,4,202,255,221,4,202,221,4,194,255,15,138,244,248,15,133,244,248,255, - 15,138,244,248,15,132,244,247,255,248,1,15,183,70,252,254,141,180,253,134, - 233,248,2,255,248,2,15,183,70,252,254,141,180,253,134,233,248,1,255,248,5, - 57,108,202,4,15,133,244,2,129,252,253,239,15,131,244,1,139,12,202,139,4,194, - 57,193,15,132,244,1,129,252,253,239,15,135,244,2,139,169,233,133,252,237, - 15,132,244,2,252,246,133,233,235,15,133,244,2,255,49,252,237,255,189,1,0, - 0,0,255,252,233,244,45,255,252,247,208,131,198,4,129,124,253,202,4,239,15, - 133,244,248,139,12,202,59,12,135,255,131,198,4,129,124,253,202,4,239,15,135, - 244,248,255,252,242,15,16,4,199,102,15,46,4,202,255,221,4,202,221,4,199,255, - 252,247,208,131,198,4,57,68,202,4,255,139,108,194,4,131,198,4,129,252,253, - 239,255,15,131,244,247,255,15,130,244,247,255,137,108,202,4,139,44,194,137, - 44,202,255,15,183,70,252,254,141,180,253,134,233,248,1,139,6,15,182,204,15, - 182,232,131,198,4,193,232,16,252,255,36,171,255,139,108,194,4,139,4,194,137, - 108,202,4,137,4,202,139,6,15,182,204,15,182,232,131,198,4,193,232,16,252, - 255,36,171,255,49,252,237,129,124,253,194,4,239,129,213,239,137,108,202,4, - 139,6,15,182,204,15,182,232,131,198,4,193,232,16,252,255,36,171,255,129,124, - 253,194,4,239,15,135,244,48,255,252,242,15,16,4,194,184,0,0,0,128,102,15, - 110,200,102,15,112,201,81,15,87,193,252,242,15,17,4,202,255,221,4,194,217, - 224,221,28,202,255,129,124,253,194,4,239,15,133,244,248,139,4,194,255,15, - 87,192,252,242,15,42,128,233,248,1,252,242,15,17,4,202,255,219,128,233,248, - 1,221,28,202,255,139,6,15,182,204,15,182,232,131,198,4,193,232,16,252,255, - 36,171,248,2,129,124,253,194,4,239,15,133,244,50,139,12,194,137,213,232,251, - 1,18,255,252,242,15,42,192,137,252,234,255,137,4,36,137,252,234,219,4,36, - 255,15,182,78,252,253,252,233,244,1,255,15,182,252,236,15,182,192,255,129, - 124,253,252,234,4,239,15,135,244,46,255,252,242,15,16,4,252,234,252,242,15, - 88,4,199,255,221,4,252,234,220,4,199,255,129,124,253,252,234,4,239,15,135, - 244,47,255,252,242,15,16,4,199,252,242,15,88,4,252,234,255,221,4,199,220, - 4,252,234,255,129,124,253,252,234,4,239,15,135,244,49,129,124,253,194,4,239, - 15,135,244,49,255,252,242,15,16,4,252,234,252,242,15,88,4,194,255,221,4,252, - 234,220,4,194,255,252,242,15,16,4,252,234,252,242,15,92,4,199,255,221,4,252, - 234,220,36,199,255,252,242,15,16,4,199,252,242,15,92,4,252,234,255,221,4, - 199,220,36,252,234,255,252,242,15,16,4,252,234,252,242,15,92,4,194,255,221, - 4,252,234,220,36,194,255,252,242,15,16,4,252,234,252,242,15,89,4,199,255, - 221,4,252,234,220,12,199,255,252,242,15,16,4,199,252,242,15,89,4,252,234, - 255,221,4,199,220,12,252,234,255,252,242,15,16,4,252,234,252,242,15,89,4, - 194,255,221,4,252,234,220,12,194,255,252,242,15,16,4,252,234,252,242,15,94, - 4,199,255,221,4,252,234,220,52,199,255,252,242,15,16,4,199,252,242,15,94, - 4,252,234,255,221,4,199,220,52,252,234,255,252,242,15,16,4,252,234,252,242, - 15,94,4,194,255,221,4,252,234,220,52,194,255,252,242,15,16,4,252,234,252, - 242,15,16,12,199,255,221,4,252,234,221,4,199,255,252,242,15,16,4,199,252, - 242,15,16,12,252,234,255,221,4,199,221,4,252,234,255,252,242,15,16,4,252, - 234,252,242,15,16,12,194,255,221,4,252,234,221,4,194,255,248,156,232,244, - 148,255,252,233,244,156,255,232,244,107,255,15,182,252,236,15,182,192,141, - 12,194,41,232,137,76,36,4,137,68,36,8,248,33,139,108,36,48,137,44,36,137, - 149,233,137,116,36,24,232,251,1,25,139,149,233,133,192,15,133,244,42,15,182, - 110,252,255,15,182,78,252,253,139,68,252,234,4,139,44,252,234,137,68,202, - 4,137,44,202,139,6,15,182,204,15,182,232,131,198,4,193,232,16,252,255,36, - 171,255,252,247,208,139,4,135,199,68,202,4,237,137,4,202,139,6,15,182,204, - 15,182,232,131,198,4,193,232,16,252,255,36,171,255,15,191,192,252,242,15, - 42,192,252,242,15,17,4,202,255,223,70,252,254,221,28,202,255,252,242,15,16, - 4,199,252,242,15,17,4,202,255,221,4,199,221,28,202,255,252,247,208,137,68, - 202,4,139,6,15,182,204,15,182,232,131,198,4,193,232,16,252,255,36,171,255, - 141,76,202,12,141,68,194,4,189,237,137,105,252,248,248,1,137,41,131,193,8, - 57,193,15,134,244,1,139,6,15,182,204,15,182,232,131,198,4,193,232,16,252, - 255,36,171,255,139,106,252,248,139,172,253,133,233,139,173,233,139,69,4,139, - 109,0,137,68,202,4,137,44,202,139,6,15,182,204,15,182,232,131,198,4,193,232, - 16,252,255,36,171,255,139,106,252,248,139,172,253,141,233,128,189,233,0,139, - 173,233,139,12,194,139,68,194,4,137,77,0,137,69,4,15,132,244,247,252,246, - 133,233,235,15,133,244,248,248,1,139,6,15,182,204,15,182,232,131,198,4,193, - 232,16,252,255,36,171,248,2,129,232,239,129,252,248,239,15,134,244,1,252, - 246,129,233,235,15,132,244,1,135,213,141,139,233,255,232,251,1,26,137,252, - 234,252,233,244,1,255,252,247,208,139,106,252,248,139,172,253,141,233,139, - 12,135,139,133,233,137,8,199,64,4,237,252,246,133,233,235,15,133,244,248, - 248,1,139,6,15,182,204,15,182,232,131,198,4,193,232,16,252,255,36,171,248, - 2,252,246,129,233,235,15,132,244,1,128,189,233,0,15,132,244,1,137,213,137, - 194,141,139,233,232,251,1,26,137,252,234,252,233,244,1,255,139,106,252,248, - 255,252,242,15,16,4,199,255,139,172,253,141,233,139,141,233,255,252,242,15, - 17,1,255,221,25,255,252,247,208,139,106,252,248,139,172,253,141,233,139,141, - 233,137,65,4,139,6,15,182,204,15,182,232,131,198,4,193,232,16,252,255,36, - 171,255,141,180,253,134,233,139,108,36,48,131,189,233,0,15,132,244,247,137, - 149,233,141,20,202,137,252,233,232,251,1,27,139,149,233,248,1,139,6,15,182, - 204,15,182,232,131,198,4,193,232,16,252,255,36,171,255,252,247,208,139,74, - 252,248,139,4,135,139,108,36,48,137,76,36,8,137,68,36,4,137,44,36,137,149, - 233,137,116,36,24,232,251,1,28,139,149,233,15,182,78,252,253,137,4,202,199, - 68,202,4,237,139,6,15,182,204,15,182,232,131,198,4,193,232,16,252,255,36, - 171,255,137,197,37,252,255,7,0,0,193,252,237,11,61,252,255,7,0,0,15,132,244, - 249,248,2,137,108,36,8,139,108,36,48,137,68,36,4,137,116,36,24,139,131,233, - 137,44,36,59,131,233,137,149,233,15,131,244,251,248,1,232,251,1,29,139,149, + 233,137,171,233,199,131,233,0,0,0,0,137,149,233,141,84,36,16,141,139,233, + 232,251,1,23,139,141,233,129,225,239,137,204,137,169,233,139,149,233,139, + 177,233,255,248,144,255,133,192,15,136,244,249,137,68,36,20,139,122,252,248, + 139,191,233,139,191,233,199,131,233,0,0,0,0,199,131,233,237,139,6,15,182, + 204,15,182,232,131,198,4,193,232,16,129,252,253,239,15,130,244,248,139,68, + 36,20,248,2,252,255,36,171,248,3,252,247,216,137,252,233,137,194,232,251, + 1,24,255,248,82,255,217,124,36,4,137,68,36,8,102,184,0,4,102,11,68,36,4,102, + 37,252,255,252,247,102,137,68,36,6,217,108,36,6,217,252,252,217,108,36,4, + 139,68,36,8,195,255,248,145,102,15,252,239,210,102,15,118,210,102,15,115, + 210,1,184,0,0,48,67,102,15,110,216,102,15,112,219,81,15,40,200,102,15,84, + 202,102,15,46,217,15,134,244,247,102,15,85,208,252,242,15,88,203,252,242, + 15,92,203,102,15,86,202,184,0,0,252,240,63,102,15,110,208,102,15,112,210, + 81,252,242,15,194,193,1,102,15,84,194,252,242,15,92,200,15,40,193,248,1,195, + 248,84,255,217,124,36,4,137,68,36,8,102,184,0,8,102,11,68,36,4,102,37,252, + 255,252,251,102,137,68,36,6,217,108,36,6,217,252,252,217,108,36,4,139,68, + 36,8,195,255,248,146,102,15,252,239,210,102,15,118,210,102,15,115,210,1,184, + 0,0,48,67,102,15,110,216,102,15,112,219,81,15,40,200,102,15,84,202,102,15, + 46,217,15,134,244,247,102,15,85,208,252,242,15,88,203,252,242,15,92,203,102, + 15,86,202,184,0,0,252,240,191,102,15,110,208,102,15,112,210,81,252,242,15, + 194,193,6,102,15,84,194,252,242,15,92,200,15,40,193,248,1,195,248,104,255, + 217,124,36,4,137,68,36,8,102,184,0,12,102,11,68,36,4,102,137,68,36,6,217, + 108,36,6,217,252,252,217,108,36,4,139,68,36,8,195,255,248,147,102,15,252, + 239,210,102,15,118,210,102,15,115,210,1,184,0,0,48,67,102,15,110,216,102, + 15,112,219,81,15,40,200,102,15,84,202,102,15,46,217,15,134,244,247,102,15, + 85,208,15,40,193,252,242,15,88,203,252,242,15,92,203,184,0,0,252,240,63,102, + 15,110,216,102,15,112,219,81,252,242,15,194,193,1,102,15,84,195,252,242,15, + 92,200,102,15,86,202,15,40,193,248,1,195,248,148,255,15,40,232,252,242,15, + 94,193,102,15,252,239,210,102,15,118,210,102,15,115,210,1,184,0,0,48,67,102, + 15,110,216,102,15,112,219,81,15,40,224,102,15,84,226,102,15,46,220,15,134, + 244,247,102,15,85,208,252,242,15,88,227,252,242,15,92,227,102,15,86,226,184, + 0,0,252,240,63,102,15,110,208,102,15,112,210,81,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,255,217,193,216, + 252,241,217,124,36,4,102,184,0,4,102,11,68,36,4,102,37,252,255,252,247,102, + 137,68,36,6,217,108,36,6,217,252,252,217,108,36,4,222,201,222,252,233,195, + 255,248,88,217,252,234,222,201,248,149,217,84,36,4,129,124,36,4,0,0,128,127, + 15,132,244,247,129,124,36,4,0,0,128,252,255,15,132,244,248,248,150,217,192, + 217,252,252,220,252,233,217,201,217,252,240,217,232,222,193,217,252,253,221, + 217,248,1,195,248,2,221,216,217,252,238,195,255,248,107,219,84,36,4,219,68, + 36,4,255,223,252,233,255,221,252,233,223,224,158,255,15,133,244,254,15,138, + 244,255,221,216,139,68,36,4,131,252,248,1,15,142,244,252,248,1,169,1,0,0, + 0,15,133,244,248,216,200,209,232,252,233,244,1,248,2,209,232,15,132,244,251, + 217,192,248,3,216,200,209,232,15,132,244,250,15,131,244,3,220,201,252,233, + 244,3,248,4,255,222,201,248,5,195,248,6,15,132,244,5,15,130,244,253,217,232, + 222,252,241,252,247,216,131,252,248,1,15,132,244,5,252,233,244,1,248,7,221, + 216,217,232,195,248,8,217,84,36,4,217,201,217,84,36,8,139,68,36,4,209,224, + 61,0,0,0,252,255,15,132,244,248,139,68,36,8,209,224,15,132,244,250,61,0,0, + 0,252,255,15,132,244,250,217,252,241,252,233,244,150,248,9,255,217,232,255, + 223,252,234,255,221,252,234,223,224,158,255,15,132,244,247,217,201,248,1, + 221,216,195,248,2,217,225,217,232,255,15,132,244,249,221,216,217,225,217, + 252,238,184,0,0,0,0,15,146,208,209,200,51,68,36,4,15,137,244,249,217,201, + 248,3,221,217,217,225,195,248,4,131,124,36,4,0,15,141,244,3,221,216,221,216, + 133,192,15,132,244,251,217,252,238,195,248,5,199,68,36,4,0,0,128,127,217, + 68,36,4,195,255,248,107,255,248,151,252,242,15,45,193,252,242,15,42,208,102, + 15,46,202,15,133,244,254,15,138,244,255,248,152,131,252,248,1,15,142,244, + 252,248,1,169,1,0,0,0,15,133,244,248,252,242,15,89,192,209,232,252,233,244, + 1,248,2,209,232,15,132,244,251,15,40,200,248,3,252,242,15,89,192,209,232, + 15,132,244,250,15,131,244,3,255,252,242,15,89,200,252,233,244,3,248,4,252, + 242,15,89,193,248,5,195,248,6,15,132,244,5,15,130,244,253,80,184,0,0,252, + 240,63,102,15,110,200,102,15,112,201,81,252,242,15,94,200,88,15,40,193,252, + 247,216,131,252,248,1,15,132,244,5,252,233,244,1,248,7,184,0,0,252,240,63, + 102,15,110,192,102,15,112,192,81,195,248,8,252,242,15,17,76,36,12,252,242, + 15,17,68,36,4,131,124,36,12,0,15,133,244,247,139,68,36,16,209,224,61,0,0, + 224,252,255,15,132,244,248,248,1,255,131,124,36,4,0,15,133,244,247,139,68, + 36,8,209,224,15,132,244,250,61,0,0,224,252,255,15,132,244,251,248,1,221,68, + 36,12,221,68,36,4,217,252,241,217,192,217,252,252,220,252,233,217,201,217, + 252,240,217,232,222,193,217,252,253,221,217,221,92,36,4,252,242,15,16,68, + 36,4,195,248,9,184,0,0,252,240,63,102,15,110,208,102,15,112,210,81,102,15, + 46,194,15,132,244,247,15,40,193,248,1,195,248,2,102,15,252,239,210,102,15, + 118,210,102,15,115,210,1,102,15,84,194,184,0,0,252,240,63,102,15,110,208, + 102,15,112,210,81,102,15,46,194,15,132,244,1,102,15,80,193,15,87,192,136, + 196,15,146,208,48,224,15,133,244,1,248,3,184,0,0,252,240,127,102,15,110,192, + 102,15,112,192,81,195,248,4,102,15,80,193,133,192,15,133,244,3,255,15,87, + 192,195,248,5,102,15,80,193,133,192,15,132,244,3,15,87,192,195,248,153,255, + 139,68,36,12,252,242,15,16,68,36,4,131,252,248,1,15,132,244,247,15,135,244, + 248,232,244,82,252,233,244,253,248,1,232,244,84,252,233,244,253,248,2,131, + 252,248,3,15,132,244,247,15,135,244,248,232,244,104,255,252,233,244,253,248, + 1,252,242,15,81,192,248,7,252,242,15,17,68,36,4,221,68,36,4,195,248,2,221, + 68,36,4,131,252,248,5,15,130,244,88,15,132,244,149,248,2,131,252,248,7,15, + 132,244,247,15,135,244,248,217,252,237,217,201,217,252,241,195,248,1,217, + 232,217,201,217,252,241,195,248,2,131,252,248,9,15,132,244,247,15,135,244, + 248,255,217,252,236,217,201,217,252,241,195,248,1,217,252,254,195,248,2,131, + 252,248,11,15,132,244,247,15,135,244,255,217,252,255,195,248,1,217,252,242, + 221,216,195,255,139,68,36,12,221,68,36,4,131,252,248,1,15,130,244,82,15,132, + 244,84,131,252,248,3,15,130,244,104,15,135,244,248,217,252,250,195,248,2, + 131,252,248,5,15,130,244,88,15,132,244,149,131,252,248,7,15,132,244,247,15, + 135,244,248,217,252,237,217,201,217,252,241,195,248,1,217,232,217,201,217, + 252,241,195,248,2,131,252,248,9,15,132,244,247,255,15,135,244,248,217,252, + 236,217,201,217,252,241,195,248,1,217,252,254,195,248,2,131,252,248,11,15, + 132,244,247,15,135,244,255,217,252,255,195,248,1,217,252,242,221,216,195, + 255,248,9,204,248,154,255,139,68,36,20,252,242,15,16,68,36,4,252,242,15,16, + 76,36,12,131,252,248,1,15,132,244,247,15,135,244,248,252,242,15,88,193,248, + 7,252,242,15,17,68,36,4,221,68,36,4,195,248,1,252,242,15,92,193,252,233,244, + 7,248,2,131,252,248,3,15,132,244,247,15,135,244,248,252,242,15,89,193,252, + 233,244,7,248,1,252,242,15,94,193,252,233,244,7,248,2,131,252,248,5,15,132, + 244,247,255,15,135,244,248,232,244,148,252,233,244,7,248,1,90,232,244,107, + 82,252,233,244,7,248,2,131,252,248,7,15,132,244,247,15,135,244,248,184,0, + 0,0,128,102,15,110,200,102,15,112,201,81,15,87,193,252,233,244,7,248,1,102, + 15,252,239,201,102,15,118,201,102,15,115,209,1,15,84,193,252,233,244,7,248, + 2,255,131,252,248,9,15,135,244,248,221,68,36,4,221,68,36,12,15,132,244,247, + 217,252,243,195,248,1,217,201,217,252,253,221,217,195,248,2,131,252,248,11, + 15,132,244,247,15,135,244,255,252,242,15,93,193,252,233,244,7,248,1,252,242, + 15,95,193,252,233,244,7,248,9,204,255,139,68,36,20,221,68,36,4,221,68,36, + 12,131,252,248,1,15,132,244,247,15,135,244,248,222,193,195,248,1,222,252, + 233,195,248,2,131,252,248,3,15,132,244,247,15,135,244,248,222,201,195,248, + 1,222,252,249,195,248,2,131,252,248,5,15,130,244,148,15,132,244,107,131,252, + 248,7,15,132,244,247,15,135,244,248,255,221,216,217,224,195,248,1,221,216, + 217,225,195,248,2,131,252,248,9,15,132,244,247,15,135,244,248,217,252,243, + 195,248,1,217,201,217,252,253,221,217,195,248,2,131,252,248,11,15,132,244, + 247,15,135,244,255,255,219,252,233,219,209,221,217,195,248,1,219,252,233, + 218,209,221,217,195,255,221,225,223,224,252,246,196,1,15,132,244,248,217, + 201,248,2,221,216,195,248,1,221,225,223,224,252,246,196,1,15,133,244,248, + 217,201,248,2,221,216,195,255,248,155,156,90,137,209,129,252,242,0,0,32,0, + 82,157,156,90,49,192,57,209,15,132,244,247,139,68,36,4,87,83,15,162,139,124, + 36,16,137,7,137,95,4,137,79,8,137,87,12,91,95,248,1,195,255,249,255,129,124, + 253,202,4,239,15,135,244,41,129,124,253,194,4,239,15,135,244,41,255,252,242, + 15,16,4,194,131,198,4,102,15,46,4,202,255,221,4,202,221,4,194,131,198,4,255, + 223,252,233,221,216,255,218,252,233,223,224,158,255,15,134,244,248,255,15, + 131,244,248,255,248,1,15,183,70,252,254,141,180,253,134,233,248,2,139,6,15, + 182,204,15,182,232,131,198,4,193,232,16,252,255,36,171,255,139,108,194,4, + 131,198,4,129,252,253,239,15,135,244,251,129,124,253,202,4,239,15,135,244, + 251,255,252,242,15,16,4,194,102,15,46,4,202,255,221,4,202,221,4,194,255,15, + 138,244,248,15,133,244,248,255,15,138,244,248,15,132,244,247,255,248,1,15, + 183,70,252,254,141,180,253,134,233,248,2,255,248,2,15,183,70,252,254,141, + 180,253,134,233,248,1,255,248,5,57,108,202,4,15,133,244,2,129,252,253,239, + 15,131,244,1,139,12,202,139,4,194,57,193,15,132,244,1,129,252,253,239,15, + 135,244,2,139,169,233,133,252,237,15,132,244,2,252,246,133,233,235,15,133, + 244,2,255,49,252,237,255,189,1,0,0,0,255,252,233,244,45,255,252,247,208,131, + 198,4,129,124,253,202,4,239,15,133,244,248,139,12,202,59,12,135,255,131,198, + 4,129,124,253,202,4,239,15,135,244,248,255,252,242,15,16,4,199,102,15,46, + 4,202,255,221,4,202,221,4,199,255,252,247,208,131,198,4,57,68,202,4,255,139, + 108,194,4,131,198,4,129,252,253,239,255,15,131,244,247,255,15,130,244,247, + 255,137,108,202,4,139,44,194,137,44,202,255,15,183,70,252,254,141,180,253, + 134,233,248,1,139,6,15,182,204,15,182,232,131,198,4,193,232,16,252,255,36, + 171,255,139,108,194,4,139,4,194,137,108,202,4,137,4,202,139,6,15,182,204, + 15,182,232,131,198,4,193,232,16,252,255,36,171,255,49,252,237,129,124,253, + 194,4,239,129,213,239,137,108,202,4,139,6,15,182,204,15,182,232,131,198,4, + 193,232,16,252,255,36,171,255,129,124,253,194,4,239,15,135,244,48,255,252, + 242,15,16,4,194,184,0,0,0,128,102,15,110,200,102,15,112,201,81,15,87,193, + 252,242,15,17,4,202,255,221,4,194,217,224,221,28,202,255,129,124,253,194, + 4,239,15,133,244,248,139,4,194,255,15,87,192,252,242,15,42,128,233,248,1, + 252,242,15,17,4,202,255,219,128,233,248,1,221,28,202,255,139,6,15,182,204, + 15,182,232,131,198,4,193,232,16,252,255,36,171,248,2,129,124,253,194,4,239, + 15,133,244,50,139,12,194,137,213,232,251,1,18,255,252,242,15,42,192,137,252, + 234,255,137,4,36,137,252,234,219,4,36,255,15,182,78,252,253,252,233,244,1, + 255,15,182,252,236,15,182,192,255,129,124,253,252,234,4,239,15,135,244,46, + 255,252,242,15,16,4,252,234,252,242,15,88,4,199,255,221,4,252,234,220,4,199, + 255,129,124,253,252,234,4,239,15,135,244,47,255,252,242,15,16,4,199,252,242, + 15,88,4,252,234,255,221,4,199,220,4,252,234,255,129,124,253,252,234,4,239, + 15,135,244,49,129,124,253,194,4,239,15,135,244,49,255,252,242,15,16,4,252, + 234,252,242,15,88,4,194,255,221,4,252,234,220,4,194,255,252,242,15,16,4,252, + 234,252,242,15,92,4,199,255,221,4,252,234,220,36,199,255,252,242,15,16,4, + 199,252,242,15,92,4,252,234,255,221,4,199,220,36,252,234,255,252,242,15,16, + 4,252,234,252,242,15,92,4,194,255,221,4,252,234,220,36,194,255,252,242,15, + 16,4,252,234,252,242,15,89,4,199,255,221,4,252,234,220,12,199,255,252,242, + 15,16,4,199,252,242,15,89,4,252,234,255,221,4,199,220,12,252,234,255,252, + 242,15,16,4,252,234,252,242,15,89,4,194,255,221,4,252,234,220,12,194,255, + 252,242,15,16,4,252,234,252,242,15,94,4,199,255,221,4,252,234,220,52,199, + 255,252,242,15,16,4,199,252,242,15,94,4,252,234,255,221,4,199,220,52,252, + 234,255,252,242,15,16,4,252,234,252,242,15,94,4,194,255,221,4,252,234,220, + 52,194,255,252,242,15,16,4,252,234,252,242,15,16,12,199,255,221,4,252,234, + 221,4,199,255,252,242,15,16,4,199,252,242,15,16,12,252,234,255,221,4,199, + 221,4,252,234,255,252,242,15,16,4,252,234,252,242,15,16,12,194,255,221,4, + 252,234,221,4,194,255,248,156,232,244,148,255,252,233,244,156,255,232,244, + 107,255,15,182,252,236,15,182,192,141,12,194,41,232,137,76,36,4,137,68,36, + 8,248,33,139,108,36,48,137,44,36,137,149,233,137,116,36,24,232,251,1,25,139, + 149,233,133,192,15,133,244,42,15,182,110,252,255,15,182,78,252,253,139,68, + 252,234,4,139,44,252,234,137,68,202,4,137,44,202,139,6,15,182,204,15,182, + 232,131,198,4,193,232,16,252,255,36,171,255,252,247,208,139,4,135,199,68, + 202,4,237,137,4,202,139,6,15,182,204,15,182,232,131,198,4,193,232,16,252, + 255,36,171,255,15,191,192,252,242,15,42,192,252,242,15,17,4,202,255,223,70, + 252,254,221,28,202,255,252,242,15,16,4,199,252,242,15,17,4,202,255,221,4, + 199,221,28,202,255,252,247,208,137,68,202,4,139,6,15,182,204,15,182,232,131, + 198,4,193,232,16,252,255,36,171,255,141,76,202,12,141,68,194,4,189,237,137, + 105,252,248,248,1,137,41,131,193,8,57,193,15,134,244,1,139,6,15,182,204,15, + 182,232,131,198,4,193,232,16,252,255,36,171,255,139,106,252,248,139,172,253, + 133,233,139,173,233,139,69,4,139,109,0,137,68,202,4,137,44,202,139,6,15,182, + 204,15,182,232,131,198,4,193,232,16,252,255,36,171,255,139,106,252,248,139, + 172,253,141,233,128,189,233,0,139,173,233,139,12,194,139,68,194,4,137,77, + 0,137,69,4,15,132,244,247,252,246,133,233,235,15,133,244,248,248,1,139,6, + 15,182,204,15,182,232,131,198,4,193,232,16,252,255,36,171,248,2,129,232,239, + 129,252,248,239,15,134,244,1,252,246,129,233,235,15,132,244,1,135,213,141, + 139,233,255,232,251,1,26,137,252,234,252,233,244,1,255,252,247,208,139,106, + 252,248,139,172,253,141,233,139,12,135,139,133,233,137,8,199,64,4,237,252, + 246,133,233,235,15,133,244,248,248,1,139,6,15,182,204,15,182,232,131,198, + 4,193,232,16,252,255,36,171,248,2,252,246,129,233,235,15,132,244,1,128,189, + 233,0,15,132,244,1,137,213,137,194,141,139,233,232,251,1,26,137,252,234,252, + 233,244,1,255,139,106,252,248,255,252,242,15,16,4,199,255,139,172,253,141, + 233,139,141,233,255,252,242,15,17,1,255,221,25,255,252,247,208,139,106,252, + 248,139,172,253,141,233,139,141,233,137,65,4,139,6,15,182,204,15,182,232, + 131,198,4,193,232,16,252,255,36,171,255,141,180,253,134,233,139,108,36,48, + 131,189,233,0,15,132,244,247,137,149,233,141,20,202,137,252,233,232,251,1, + 27,139,149,233,248,1,139,6,15,182,204,15,182,232,131,198,4,193,232,16,252, + 255,36,171,255,252,247,208,139,74,252,248,139,4,135,139,108,36,48,137,76, + 36,8,137,68,36,4,137,44,36,137,149,233,137,116,36,24,232,251,1,28,139,149, 233,15,182,78,252,253,137,4,202,199,68,202,4,237,139,6,15,182,204,15,182, - 232,131,198,4,193,232,16,252,255,36,171,248,3,184,1,8,0,0,252,233,244,2,248, - 5,137,252,233,232,251,1,30,252,233,244,1,255,252,247,208,139,108,36,48,139, - 139,233,137,116,36,24,59,139,233,137,149,233,15,131,244,249,248,2,139,20, - 135,137,252,233,232,251,1,31,139,149,233,15,182,78,252,253,137,4,202,199, - 68,202,4,237,139,6,15,182,204,15,182,232,131,198,4,193,232,16,252,255,36, - 171,248,3,137,252,233,232,251,1,30,15,183,70,252,254,252,247,208,252,233, - 244,2,255,252,247,208,139,106,252,248,139,173,233,139,4,135,252,233,244,157, - 255,252,247,208,139,106,252,248,139,173,233,139,4,135,252,233,244,158,255, - 15,182,252,236,15,182,192,129,124,253,252,234,4,239,15,133,244,36,139,44, - 252,234,129,124,253,194,4,239,15,135,244,251,255,252,242,15,16,4,194,252, - 242,15,45,192,252,242,15,42,200,102,15,46,193,255,221,4,194,219,20,36,219, - 4,36,255,15,133,244,36,59,133,233,15,131,244,36,193,224,3,3,133,233,129,120, - 253,4,239,15,132,244,248,248,1,139,40,139,64,4,137,44,202,137,68,202,4,139, - 6,15,182,204,15,182,232,131,198,4,193,232,16,252,255,36,171,248,2,131,189, - 233,0,15,132,244,1,139,141,233,252,246,129,233,235,15,132,244,36,15,182,78, - 252,253,252,233,244,1,248,5,255,129,124,253,194,4,239,15,133,244,36,139,4, - 194,252,233,244,157,255,15,182,252,236,15,182,192,252,247,208,139,4,135,129, - 124,253,252,234,4,239,15,133,244,34,139,44,252,234,248,157,139,141,233,35, - 136,233,105,201,239,3,141,233,248,1,129,185,233,239,15,133,244,250,57,129, - 233,15,133,244,250,129,121,253,4,239,15,132,244,251,15,182,70,252,253,139, - 41,139,73,4,137,44,194,248,2,255,137,76,194,4,139,6,15,182,204,15,182,232, - 131,198,4,193,232,16,252,255,36,171,248,3,15,182,70,252,253,185,237,252,233, - 244,2,248,4,139,137,233,133,201,15,133,244,1,248,5,139,141,233,133,201,15, - 132,244,3,252,246,129,233,235,15,133,244,3,252,233,244,34,255,15,182,252, - 236,15,182,192,129,124,253,252,234,4,239,15,133,244,35,139,44,252,234,59, - 133,233,15,131,244,35,193,224,3,3,133,233,129,120,253,4,239,15,132,244,248, - 248,1,139,40,139,64,4,137,44,202,137,68,202,4,139,6,15,182,204,15,182,232, - 131,198,4,193,232,16,252,255,36,171,248,2,131,189,233,0,15,132,244,1,139, - 141,233,252,246,129,233,235,15,132,244,35,255,15,182,252,236,15,182,192,129, - 124,253,252,234,4,239,15,133,244,39,139,44,252,234,129,124,253,194,4,239, - 15,135,244,251,255,15,133,244,39,59,133,233,15,131,244,39,193,224,3,3,133, + 232,131,198,4,193,232,16,252,255,36,171,255,137,197,37,252,255,7,0,0,193, + 252,237,11,61,252,255,7,0,0,15,132,244,249,248,2,137,108,36,8,139,108,36, + 48,137,68,36,4,137,116,36,24,139,131,233,137,44,36,59,131,233,137,149,233, + 15,131,244,251,248,1,232,251,1,29,139,149,233,15,182,78,252,253,137,4,202, + 199,68,202,4,237,139,6,15,182,204,15,182,232,131,198,4,193,232,16,252,255, + 36,171,248,3,184,1,8,0,0,252,233,244,2,248,5,137,252,233,232,251,1,30,252, + 233,244,1,255,252,247,208,139,108,36,48,139,139,233,137,116,36,24,59,139, + 233,137,149,233,15,131,244,249,248,2,139,20,135,137,252,233,232,251,1,31, + 139,149,233,15,182,78,252,253,137,4,202,199,68,202,4,237,139,6,15,182,204, + 15,182,232,131,198,4,193,232,16,252,255,36,171,248,3,137,252,233,232,251, + 1,30,15,183,70,252,254,252,247,208,252,233,244,2,255,252,247,208,139,106, + 252,248,139,173,233,139,4,135,252,233,244,157,255,252,247,208,139,106,252, + 248,139,173,233,139,4,135,252,233,244,158,255,15,182,252,236,15,182,192,129, + 124,253,252,234,4,239,15,133,244,36,139,44,252,234,129,124,253,194,4,239, + 15,135,244,251,255,252,242,15,16,4,194,252,242,15,45,192,252,242,15,42,200, + 102,15,46,193,255,221,4,194,219,20,36,219,4,36,255,15,133,244,36,59,133,233, + 15,131,244,36,193,224,3,3,133,233,129,120,253,4,239,15,132,244,248,248,1, + 139,40,139,64,4,137,44,202,137,68,202,4,139,6,15,182,204,15,182,232,131,198, + 4,193,232,16,252,255,36,171,248,2,131,189,233,0,15,132,244,1,139,141,233, + 252,246,129,233,235,15,132,244,36,15,182,78,252,253,252,233,244,1,248,5,255, + 129,124,253,194,4,239,15,133,244,36,139,4,194,252,233,244,157,255,15,182, + 252,236,15,182,192,252,247,208,139,4,135,129,124,253,252,234,4,239,15,133, + 244,34,139,44,252,234,248,157,139,141,233,35,136,233,105,201,239,3,141,233, + 248,1,129,185,233,239,15,133,244,250,57,129,233,15,133,244,250,129,121,253, + 4,239,15,132,244,251,15,182,70,252,253,139,41,139,73,4,137,44,194,248,2,255, + 137,76,194,4,139,6,15,182,204,15,182,232,131,198,4,193,232,16,252,255,36, + 171,248,3,15,182,70,252,253,185,237,252,233,244,2,248,4,139,137,233,133,201, + 15,133,244,1,248,5,139,141,233,133,201,15,132,244,3,252,246,129,233,235,15, + 133,244,3,252,233,244,34,255,15,182,252,236,15,182,192,129,124,253,252,234, + 4,239,15,133,244,35,139,44,252,234,59,133,233,15,131,244,35,193,224,3,3,133, + 233,129,120,253,4,239,15,132,244,248,248,1,139,40,139,64,4,137,44,202,137, + 68,202,4,139,6,15,182,204,15,182,232,131,198,4,193,232,16,252,255,36,171, + 248,2,131,189,233,0,15,132,244,1,139,141,233,252,246,129,233,235,15,132,244, + 35,255,15,182,252,236,15,182,192,129,124,253,252,234,4,239,15,133,244,39, + 139,44,252,234,129,124,253,194,4,239,15,135,244,251,255,15,133,244,39,59, + 133,233,15,131,244,39,193,224,3,3,133,233,129,120,253,4,239,15,132,244,249, + 248,1,252,246,133,233,235,15,133,244,253,248,2,139,108,202,4,139,12,202,137, + 104,4,137,8,139,6,15,182,204,15,182,232,131,198,4,193,232,16,252,255,36,171, + 248,3,131,189,233,0,15,132,244,1,139,141,233,255,252,246,129,233,235,15,132, + 244,39,15,182,78,252,253,252,233,244,1,248,5,129,124,253,194,4,239,15,133, + 244,39,139,4,194,252,233,244,158,248,7,128,165,233,235,139,139,233,137,171, + 233,137,141,233,15,182,78,252,253,252,233,244,2,255,15,182,252,236,15,182, + 192,252,247,208,139,4,135,129,124,253,252,234,4,239,15,133,244,37,139,44, + 252,234,248,158,139,141,233,35,136,233,105,201,239,198,133,233,0,3,141,233, + 248,1,129,185,233,239,15,133,244,251,57,129,233,15,133,244,251,129,121,253, + 4,239,15,132,244,250,248,2,255,252,246,133,233,235,15,133,244,253,248,3,15, + 182,70,252,253,139,108,194,4,139,4,194,137,105,4,137,1,139,6,15,182,204,15, + 182,232,131,198,4,193,232,16,252,255,36,171,248,4,131,189,233,0,15,132,244, + 2,137,76,36,16,139,141,233,252,246,129,233,235,15,132,244,37,139,76,36,16, + 252,233,244,2,248,5,139,137,233,133,201,15,133,244,1,255,139,141,233,133, + 201,15,132,244,252,252,246,129,233,235,15,132,244,37,248,6,137,68,36,16,199, + 68,36,20,237,137,108,36,12,141,68,36,16,137,108,36,4,139,108,36,48,137,68, + 36,8,137,44,36,137,149,233,137,116,36,24,232,251,1,32,139,149,233,139,108, + 36,12,137,193,252,233,244,2,248,7,128,165,233,235,139,131,233,137,171,233, + 137,133,233,252,233,244,3,255,15,182,252,236,15,182,192,129,124,253,252,234, + 4,239,15,133,244,38,139,44,252,234,59,133,233,15,131,244,38,193,224,3,3,133, 233,129,120,253,4,239,15,132,244,249,248,1,252,246,133,233,235,15,133,244, 253,248,2,139,108,202,4,139,12,202,137,104,4,137,8,139,6,15,182,204,15,182, 232,131,198,4,193,232,16,252,255,36,171,248,3,131,189,233,0,15,132,244,1, - 139,141,233,255,252,246,129,233,235,15,132,244,39,15,182,78,252,253,252,233, - 244,1,248,5,129,124,253,194,4,239,15,133,244,39,139,4,194,252,233,244,158, - 248,7,128,165,233,235,139,139,233,137,171,233,137,141,233,15,182,78,252,253, - 252,233,244,2,255,15,182,252,236,15,182,192,252,247,208,139,4,135,129,124, - 253,252,234,4,239,15,133,244,37,139,44,252,234,248,158,139,141,233,35,136, - 233,105,201,239,198,133,233,0,3,141,233,248,1,129,185,233,239,15,133,244, - 251,57,129,233,15,133,244,251,129,121,253,4,239,15,132,244,250,248,2,255, - 252,246,133,233,235,15,133,244,253,248,3,15,182,70,252,253,139,108,194,4, - 139,4,194,137,105,4,137,1,139,6,15,182,204,15,182,232,131,198,4,193,232,16, - 252,255,36,171,248,4,131,189,233,0,15,132,244,2,137,76,36,16,139,141,233, - 252,246,129,233,235,15,132,244,37,139,76,36,16,252,233,244,2,248,5,139,137, - 233,133,201,15,133,244,1,255,139,141,233,133,201,15,132,244,252,252,246,129, - 233,235,15,132,244,37,248,6,137,68,36,16,199,68,36,20,237,137,108,36,12,141, - 68,36,16,137,108,36,4,139,108,36,48,137,68,36,8,137,44,36,137,149,233,137, - 116,36,24,232,251,1,32,139,149,233,139,108,36,12,137,193,252,233,244,2,248, - 7,128,165,233,235,139,131,233,137,171,233,137,133,233,252,233,244,3,255,15, - 182,252,236,15,182,192,129,124,253,252,234,4,239,15,133,244,38,139,44,252, - 234,59,133,233,15,131,244,38,193,224,3,3,133,233,129,120,253,4,239,15,132, - 244,249,248,1,252,246,133,233,235,15,133,244,253,248,2,139,108,202,4,139, - 12,202,137,104,4,137,8,139,6,15,182,204,15,182,232,131,198,4,193,232,16,252, - 255,36,171,248,3,131,189,233,0,15,132,244,1,255,139,141,233,252,246,129,233, - 235,15,132,244,38,15,182,78,252,253,252,233,244,1,248,7,128,165,233,235,139, - 139,233,137,171,233,137,141,233,15,182,78,252,253,252,233,244,2,255,137,124, - 36,16,255,252,242,15,45,60,199,255,221,4,199,219,92,36,12,139,124,36,12,255, - 248,1,141,12,202,139,105,252,248,252,246,133,233,235,15,133,244,253,248,2, - 139,68,36,20,131,232,1,15,132,244,250,1,252,248,59,133,233,15,131,244,251, - 41,252,248,193,231,3,3,189,233,248,3,139,41,137,47,139,105,4,131,193,8,137, - 111,4,131,199,8,131,232,1,15,133,244,3,248,4,139,124,36,16,139,6,15,182,204, - 15,182,232,131,198,4,193,232,16,252,255,36,171,248,5,137,108,36,4,139,108, - 36,48,137,149,233,137,68,36,8,137,44,36,137,116,36,24,232,251,1,33,139,149, - 233,15,182,78,252,253,252,233,244,1,248,7,255,128,165,233,235,139,131,233, - 137,171,233,137,133,233,252,233,244,2,255,3,68,36,20,255,129,124,253,202, - 4,239,139,44,202,15,133,244,51,141,84,202,8,137,114,252,252,139,181,233,139, - 14,15,182,252,233,15,182,205,131,198,4,252,255,36,171,255,141,76,202,8,137, - 215,139,105,252,248,129,121,253,252,252,239,15,133,244,28,248,52,139,114, - 252,252,252,247,198,237,15,133,244,253,248,1,137,106,252,248,137,68,36,20, - 131,232,1,15,132,244,249,248,2,139,41,137,47,139,105,4,137,111,4,131,199, - 8,131,193,8,131,232,1,15,133,244,2,139,106,252,248,248,3,139,68,36,20,128, - 189,233,1,15,135,244,251,248,4,139,181,233,139,14,15,182,252,233,15,182,205, - 131,198,4,252,255,36,171,248,5,255,252,247,198,237,15,133,244,4,15,182,78, - 252,253,252,247,209,141,12,202,139,121,252,248,139,191,233,139,191,233,252, - 233,244,4,248,7,15,139,244,1,131,230,252,248,41,252,242,137,215,139,114,252, - 252,252,233,244,1,255,141,76,202,8,139,105,232,139,65,252,236,137,41,137, - 65,4,139,105,252,240,139,65,252,244,137,105,8,137,65,12,139,105,224,139,65, - 228,137,105,252,248,137,65,252,252,129,252,248,239,184,237,15,133,244,28, - 137,202,137,114,252,252,139,181,233,139,14,15,182,252,233,15,182,205,131, - 198,4,252,255,36,171,255,15,182,252,236,139,66,252,248,141,12,202,139,128, - 233,15,182,128,233,137,124,36,16,141,188,253,194,233,43,122,252,252,133,252, - 237,15,132,244,251,141,108,252,233,252,248,57,215,15,131,244,248,248,1,139, - 71,252,248,137,1,139,71,252,252,131,199,8,137,65,4,131,193,8,57,252,233,15, - 131,244,249,57,215,15,130,244,1,248,2,199,65,4,237,131,193,8,57,252,233,15, - 130,244,2,248,3,139,124,36,16,139,6,15,182,204,15,182,232,131,198,4,193,232, - 16,252,255,36,171,248,5,199,68,36,20,1,0,0,0,137,208,41,252,248,15,134,244, - 3,255,137,197,193,252,237,3,131,197,1,137,108,36,20,139,108,36,48,1,200,59, - 133,233,15,135,244,253,248,6,139,71,252,248,137,1,139,71,252,252,131,199, - 8,137,65,4,131,193,8,57,215,15,130,244,6,252,233,244,3,248,7,137,149,233, - 137,141,233,137,116,36,24,41,215,139,84,36,20,131,252,234,1,137,252,233,232, - 251,1,0,139,149,233,139,141,233,1,215,252,233,244,6,255,193,225,3,255,248, - 1,139,114,252,252,137,68,36,20,252,247,198,237,15,133,244,253,255,248,13, - 137,215,131,232,1,15,132,244,249,248,2,139,44,15,137,111,252,248,139,108, - 15,4,137,111,252,252,131,199,8,131,232,1,15,133,244,2,248,3,139,68,36,20, - 15,182,110,252,255,248,5,57,197,15,135,244,252,255,139,108,10,4,137,106,252, - 252,139,44,10,137,106,252,248,255,248,5,56,70,252,255,15,135,244,252,255, - 15,182,78,252,253,252,247,209,141,20,202,139,122,252,248,139,191,233,139, - 191,233,139,6,15,182,204,15,182,232,131,198,4,193,232,16,252,255,36,171,248, - 6,255,199,71,252,252,237,131,199,8,255,199,68,194,252,244,237,255,131,192, - 1,252,233,244,5,248,7,15,139,244,14,131,230,252,248,41,252,242,255,1,252, - 241,255,137,252,245,209,252,237,129,229,239,102,131,172,253,43,233,1,15,132, - 244,140,255,141,12,202,255,129,121,253,4,239,15,135,244,53,129,121,253,12, - 239,15,135,244,53,255,139,105,20,255,129,252,253,239,15,135,244,53,255,252, - 242,15,16,1,252,242,15,16,73,8,255,252,242,15,88,65,16,252,242,15,17,1,133, - 252,237,15,136,244,249,255,15,140,244,249,255,102,15,46,200,248,1,252,242, - 15,17,65,24,255,221,65,8,221,1,255,220,65,16,221,17,221,81,24,133,252,237, - 15,136,244,247,255,221,81,24,15,140,244,247,255,217,201,248,1,255,15,183, - 70,252,254,255,15,131,244,248,141,180,253,134,233,255,141,180,253,134,233, - 15,183,70,252,254,15,131,245,255,15,130,244,248,141,180,253,134,233,255,248, - 3,102,15,46,193,252,233,244,1,255,141,12,202,139,105,4,129,252,253,239,15, - 132,244,247,255,137,105,252,252,139,41,137,105,252,248,252,233,245,255,141, - 180,253,134,233,139,1,137,105,252,252,137,65,252,248,255,139,139,233,139, - 4,129,139,128,233,139,108,36,48,137,147,233,137,171,233,252,255,224,255,141, - 180,253,134,233,139,6,15,182,204,15,182,232,131,198,4,193,232,16,252,255, - 36,171,255,137,252,245,209,252,237,129,229,239,102,131,172,253,43,233,1,15, - 132,244,142,255,139,190,233,139,108,36,48,141,12,202,59,141,233,15,135,244, - 23,15,182,142,233,57,200,15,134,244,249,248,2,255,15,183,70,252,254,252,233, - 245,255,248,3,199,68,194,252,252,237,131,192,1,57,200,15,134,244,3,252,233, - 244,2,255,141,44,197,237,141,4,194,139,122,252,248,137,104,252,252,137,120, - 252,248,139,108,36,48,141,12,200,59,141,233,15,135,244,22,137,209,137,194, - 15,182,174,233,133,252,237,15,132,244,248,248,1,131,193,8,57,209,15,131,244, - 249,139,121,252,248,137,56,139,121,252,252,137,120,4,131,192,8,199,65,252, - 252,237,131,252,237,1,15,133,244,1,248,2,255,139,190,233,139,6,15,182,204, - 15,182,232,131,198,4,193,232,16,252,255,36,171,255,248,3,199,64,4,237,131, - 192,8,131,252,237,1,15,133,244,3,252,233,244,2,255,139,106,252,248,139,189, - 233,139,108,36,48,141,68,194,252,248,137,149,233,141,136,233,59,141,233,137, - 133,233,255,137,44,36,255,137,124,36,4,137,44,36,255,15,135,244,21,199,131, - 233,237,255,252,255,215,255,252,255,147,233,255,199,131,233,237,139,149,233, - 141,12,194,252,247,217,3,141,233,139,114,252,252,252,233,244,12,255,254,0 + 255,139,141,233,252,246,129,233,235,15,132,244,38,15,182,78,252,253,252,233, + 244,1,248,7,128,165,233,235,139,139,233,137,171,233,137,141,233,15,182,78, + 252,253,252,233,244,2,255,137,124,36,16,255,252,242,15,45,60,199,255,221, + 4,199,219,92,36,12,139,124,36,12,255,248,1,141,12,202,139,105,252,248,252, + 246,133,233,235,15,133,244,253,248,2,139,68,36,20,131,232,1,15,132,244,250, + 1,252,248,59,133,233,15,131,244,251,41,252,248,193,231,3,3,189,233,248,3, + 139,41,137,47,139,105,4,131,193,8,137,111,4,131,199,8,131,232,1,15,133,244, + 3,248,4,139,124,36,16,139,6,15,182,204,15,182,232,131,198,4,193,232,16,252, + 255,36,171,248,5,137,108,36,4,139,108,36,48,137,149,233,137,68,36,8,137,44, + 36,137,116,36,24,232,251,1,33,139,149,233,15,182,78,252,253,252,233,244,1, + 248,7,255,128,165,233,235,139,131,233,137,171,233,137,133,233,252,233,244, + 2,255,3,68,36,20,255,129,124,253,202,4,239,139,44,202,15,133,244,51,141,84, + 202,8,137,114,252,252,139,181,233,139,14,15,182,252,233,15,182,205,131,198, + 4,252,255,36,171,255,141,76,202,8,137,215,139,105,252,248,129,121,253,252, + 252,239,15,133,244,28,248,52,139,114,252,252,252,247,198,237,15,133,244,253, + 248,1,137,106,252,248,137,68,36,20,131,232,1,15,132,244,249,248,2,139,41, + 137,47,139,105,4,137,111,4,131,199,8,131,193,8,131,232,1,15,133,244,2,139, + 106,252,248,248,3,139,68,36,20,128,189,233,1,15,135,244,251,248,4,139,181, + 233,139,14,15,182,252,233,15,182,205,131,198,4,252,255,36,171,248,5,255,252, + 247,198,237,15,133,244,4,15,182,78,252,253,252,247,209,141,12,202,139,121, + 252,248,139,191,233,139,191,233,252,233,244,4,248,7,15,139,244,1,131,230, + 252,248,41,252,242,137,215,139,114,252,252,252,233,244,1,255,141,76,202,8, + 139,105,232,139,65,252,236,137,41,137,65,4,139,105,252,240,139,65,252,244, + 137,105,8,137,65,12,139,105,224,139,65,228,137,105,252,248,137,65,252,252, + 129,252,248,239,184,237,15,133,244,28,137,202,137,114,252,252,139,181,233, + 139,14,15,182,252,233,15,182,205,131,198,4,252,255,36,171,255,15,182,252, + 236,139,66,252,248,141,12,202,139,128,233,15,182,128,233,137,124,36,16,141, + 188,253,194,233,43,122,252,252,133,252,237,15,132,244,251,141,108,252,233, + 252,248,57,215,15,131,244,248,248,1,139,71,252,248,137,1,139,71,252,252,131, + 199,8,137,65,4,131,193,8,57,252,233,15,131,244,249,57,215,15,130,244,1,248, + 2,199,65,4,237,131,193,8,57,252,233,15,130,244,2,248,3,139,124,36,16,139, + 6,15,182,204,15,182,232,131,198,4,193,232,16,252,255,36,171,248,5,199,68, + 36,20,1,0,0,0,137,208,41,252,248,15,134,244,3,255,137,197,193,252,237,3,131, + 197,1,137,108,36,20,139,108,36,48,1,200,59,133,233,15,135,244,253,248,6,139, + 71,252,248,137,1,139,71,252,252,131,199,8,137,65,4,131,193,8,57,215,15,130, + 244,6,252,233,244,3,248,7,137,149,233,137,141,233,137,116,36,24,41,215,139, + 84,36,20,131,252,234,1,137,252,233,232,251,1,0,139,149,233,139,141,233,1, + 215,252,233,244,6,255,193,225,3,255,248,1,139,114,252,252,137,68,36,20,252, + 247,198,237,15,133,244,253,255,248,13,137,215,131,232,1,15,132,244,249,248, + 2,139,44,15,137,111,252,248,139,108,15,4,137,111,252,252,131,199,8,131,232, + 1,15,133,244,2,248,3,139,68,36,20,15,182,110,252,255,248,5,57,197,15,135, + 244,252,255,139,108,10,4,137,106,252,252,139,44,10,137,106,252,248,255,248, + 5,56,70,252,255,15,135,244,252,255,15,182,78,252,253,252,247,209,141,20,202, + 139,122,252,248,139,191,233,139,191,233,139,6,15,182,204,15,182,232,131,198, + 4,193,232,16,252,255,36,171,248,6,255,199,71,252,252,237,131,199,8,255,199, + 68,194,252,244,237,255,131,192,1,252,233,244,5,248,7,15,139,244,14,131,230, + 252,248,41,252,242,255,1,252,241,255,137,252,245,209,252,237,129,229,239, + 102,131,172,253,43,233,1,15,132,244,140,255,141,12,202,255,129,121,253,4, + 239,15,135,244,53,129,121,253,12,239,15,135,244,53,255,139,105,20,255,129, + 252,253,239,15,135,244,53,255,252,242,15,16,1,252,242,15,16,73,8,255,252, + 242,15,88,65,16,252,242,15,17,1,133,252,237,15,136,244,249,255,15,140,244, + 249,255,102,15,46,200,248,1,252,242,15,17,65,24,255,221,65,8,221,1,255,220, + 65,16,221,17,221,81,24,133,252,237,15,136,244,247,255,221,81,24,15,140,244, + 247,255,217,201,248,1,255,15,183,70,252,254,255,15,131,244,248,141,180,253, + 134,233,255,141,180,253,134,233,15,183,70,252,254,15,131,245,255,15,130,244, + 248,141,180,253,134,233,255,248,3,102,15,46,193,252,233,244,1,255,141,12, + 202,139,105,4,129,252,253,239,15,132,244,247,255,137,105,252,252,139,41,137, + 105,252,248,252,233,245,255,141,180,253,134,233,139,1,137,105,252,252,137, + 65,252,248,255,139,139,233,139,4,129,139,128,233,139,108,36,48,137,147,233, + 137,171,233,252,255,224,255,141,180,253,134,233,139,6,15,182,204,15,182,232, + 131,198,4,193,232,16,252,255,36,171,255,137,252,245,209,252,237,129,229,239, + 102,131,172,253,43,233,1,15,132,244,142,255,139,190,233,139,108,36,48,141, + 12,202,59,141,233,15,135,244,23,15,182,142,233,57,200,15,134,244,249,248, + 2,255,15,183,70,252,254,252,233,245,255,248,3,199,68,194,252,252,237,131, + 192,1,57,200,15,134,244,3,252,233,244,2,255,141,44,197,237,141,4,194,139, + 122,252,248,137,104,252,252,137,120,252,248,139,108,36,48,141,12,200,59,141, + 233,15,135,244,22,137,209,137,194,15,182,174,233,133,252,237,15,132,244,248, + 248,1,131,193,8,57,209,15,131,244,249,139,121,252,248,137,56,139,121,252, + 252,137,120,4,131,192,8,199,65,252,252,237,131,252,237,1,15,133,244,1,248, + 2,255,139,190,233,139,6,15,182,204,15,182,232,131,198,4,193,232,16,252,255, + 36,171,255,248,3,199,64,4,237,131,192,8,131,252,237,1,15,133,244,3,252,233, + 244,2,255,139,106,252,248,139,189,233,139,108,36,48,141,68,194,252,248,137, + 149,233,141,136,233,59,141,233,137,133,233,255,137,44,36,255,137,124,36,4, + 137,44,36,255,15,135,244,21,199,131,233,237,255,252,255,215,255,252,255,147, + 233,255,199,131,233,237,139,149,233,141,12,194,252,247,217,3,141,233,139, + 114,252,252,252,233,244,12,255,254,0 }; enum { @@ -1455,91 +1456,91 @@ static void build_subroutines(BuildCtx *ctx, int cmov, int sse) #endif dasm_put(Dst, 8218, Dt1(->base), Dt1(->top)); #if LJ_HASJIT - dasm_put(Dst, 8247, DISPATCH_GL(vmstate), DISPATCH_GL(vmstate), ~LJ_VMST_EXIT, DISPATCH_J(exitno), DISPATCH_J(parent), 8*8+16, DISPATCH_GL(jit_L), DISPATCH_GL(jit_base), DISPATCH_J(L), Dt1(->base), GG_DISP2J, Dt1(->cframe), CFRAME_RAWMASK, CFRAME_OFS_L, Dt1(->base), CFRAME_OFS_PC); + dasm_put(Dst, 8247, DISPATCH_GL(vmstate), DISPATCH_GL(vmstate), ~LJ_VMST_EXIT, DISPATCH_J(exitno), DISPATCH_J(parent), 8*8+16, DISPATCH_GL(jit_L), DISPATCH_GL(jit_base), DISPATCH_J(L), DISPATCH_GL(jit_L), Dt1(->base), GG_DISP2J, Dt1(->cframe), CFRAME_RAWMASK, CFRAME_OFS_L, Dt1(->base), CFRAME_OFS_PC); #endif - dasm_put(Dst, 8383); + dasm_put(Dst, 8390); #if LJ_HASJIT - dasm_put(Dst, 8386, Dt7(->pc), PC2PROTO(k), DISPATCH_GL(jit_L), DISPATCH_GL(vmstate), ~LJ_VMST_INTERP, BC_FUNCF); + dasm_put(Dst, 8393, Dt7(->pc), PC2PROTO(k), DISPATCH_GL(jit_L), DISPATCH_GL(vmstate), ~LJ_VMST_INTERP, BC_FUNCF); #endif - dasm_put(Dst, 8464); + dasm_put(Dst, 8471); if (!sse) { - dasm_put(Dst, 8467); + dasm_put(Dst, 8474); } - dasm_put(Dst, 8512); + dasm_put(Dst, 8519); if (!sse) { - dasm_put(Dst, 8614); + dasm_put(Dst, 8621); } - dasm_put(Dst, 8659); + dasm_put(Dst, 8666); if (!sse) { - dasm_put(Dst, 8761); + dasm_put(Dst, 8768); } - dasm_put(Dst, 8800); + dasm_put(Dst, 8807); if (sse) { - dasm_put(Dst, 8905); + dasm_put(Dst, 8912); } else { - dasm_put(Dst, 9035); + dasm_put(Dst, 9042); } - dasm_put(Dst, 9082); + dasm_put(Dst, 9089); if (!sse) { - dasm_put(Dst, 9156); + dasm_put(Dst, 9163); if (cmov) { - dasm_put(Dst, 9167); + dasm_put(Dst, 9174); } else { - dasm_put(Dst, 9171); - } dasm_put(Dst, 9178); - dasm_put(Dst, 9252); - dasm_put(Dst, 9352); - if (cmov) { - dasm_put(Dst, 9355); - } else { + } + dasm_put(Dst, 9185); + dasm_put(Dst, 9259); dasm_put(Dst, 9359); - } - dasm_put(Dst, 9366); if (cmov) { - dasm_put(Dst, 9167); + dasm_put(Dst, 9362); } else { - dasm_put(Dst, 9171); + dasm_put(Dst, 9366); } - dasm_put(Dst, 9384); + dasm_put(Dst, 9373); + if (cmov) { + dasm_put(Dst, 9174); } else { - dasm_put(Dst, 9463); + dasm_put(Dst, 9178); } - dasm_put(Dst, 9466); - dasm_put(Dst, 9551); - dasm_put(Dst, 9682); - dasm_put(Dst, 9881); + dasm_put(Dst, 9391); + } else { + dasm_put(Dst, 9470); + } + dasm_put(Dst, 9473); + dasm_put(Dst, 9558); + dasm_put(Dst, 9689); + dasm_put(Dst, 9888); if (sse) { - dasm_put(Dst, 9904); - dasm_put(Dst, 9961); - dasm_put(Dst, 10052); + dasm_put(Dst, 9911); + dasm_put(Dst, 9968); + dasm_put(Dst, 10059); } else { - dasm_put(Dst, 10094); - dasm_put(Dst, 10186); + dasm_put(Dst, 10101); + dasm_put(Dst, 10193); } - dasm_put(Dst, 10232); + dasm_put(Dst, 10239); if (sse) { - dasm_put(Dst, 10238); - dasm_put(Dst, 10343); - dasm_put(Dst, 10426); + dasm_put(Dst, 10245); + dasm_put(Dst, 10350); + dasm_put(Dst, 10433); } else { - dasm_put(Dst, 10498); - dasm_put(Dst, 10581); + dasm_put(Dst, 10505); + dasm_put(Dst, 10588); if (cmov) { - dasm_put(Dst, 10636); + dasm_put(Dst, 10643); } else { - dasm_put(Dst, 10655); + dasm_put(Dst, 10662); } - dasm_put(Dst, 10494); + dasm_put(Dst, 10501); } - dasm_put(Dst, 10696); + dasm_put(Dst, 10703); } /* Generate the code for a single instruction. */ static void build_ins(BuildCtx *ctx, BCOp op, int defop, int cmov, int sse) { int vk = 0; - dasm_put(Dst, 10750, defop); + dasm_put(Dst, 10757, defop); switch (op) { @@ -1548,611 +1549,611 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop, int cmov, int sse) /* Remember: all ops branch for a true comparison, fall through otherwise. */ case BC_ISLT: case BC_ISGE: case BC_ISLE: case BC_ISGT: - dasm_put(Dst, 10752, LJ_TISNUM, LJ_TISNUM); + dasm_put(Dst, 10759, LJ_TISNUM, LJ_TISNUM); if (sse) { - dasm_put(Dst, 10773); + dasm_put(Dst, 10780); } else { - dasm_put(Dst, 10788); + dasm_put(Dst, 10795); if (cmov) { - dasm_put(Dst, 10798); + dasm_put(Dst, 10805); } else { - dasm_put(Dst, 10804); + dasm_put(Dst, 10811); } } switch (op) { case BC_ISLT: - dasm_put(Dst, 10811); + dasm_put(Dst, 10818); break; case BC_ISGE: - dasm_put(Dst, 10047); + dasm_put(Dst, 10054); break; case BC_ISLE: dasm_put(Dst, 6181); break; case BC_ISGT: - dasm_put(Dst, 10816); + dasm_put(Dst, 10823); break; default: break; /* Shut up GCC. */ } - dasm_put(Dst, 10821, -BCBIAS_J*4); + dasm_put(Dst, 10828, -BCBIAS_J*4); break; case BC_ISEQV: case BC_ISNEV: vk = op == BC_ISEQV; - dasm_put(Dst, 10854, LJ_TISNUM, LJ_TISNUM); + dasm_put(Dst, 10861, LJ_TISNUM, LJ_TISNUM); if (sse) { - dasm_put(Dst, 10880); + dasm_put(Dst, 10887); } else { - dasm_put(Dst, 10892); + dasm_put(Dst, 10899); if (cmov) { - dasm_put(Dst, 10798); + dasm_put(Dst, 10805); } else { - dasm_put(Dst, 10804); + dasm_put(Dst, 10811); } } iseqne_fp: if (vk) { - dasm_put(Dst, 10899); + dasm_put(Dst, 10906); } else { - dasm_put(Dst, 10908); + dasm_put(Dst, 10915); } iseqne_end: if (vk) { - dasm_put(Dst, 10917, -BCBIAS_J*4); + dasm_put(Dst, 10924, -BCBIAS_J*4); } else { - dasm_put(Dst, 10932, -BCBIAS_J*4); + dasm_put(Dst, 10939, -BCBIAS_J*4); } - dasm_put(Dst, 10835); + dasm_put(Dst, 10842); if (op == BC_ISEQV || op == BC_ISNEV) { - dasm_put(Dst, 10947, LJ_TISPRI, LJ_TISTABUD, Dt6(->metatable), Dt6(->nomm), 1<metatable), Dt6(->nomm), 1<len)); + dasm_put(Dst, 11290, Dt5(->len)); } else { - dasm_put(Dst, 11301, Dt5(->len)); + dasm_put(Dst, 11308, Dt5(->len)); } - dasm_put(Dst, 11310, LJ_TTAB); + dasm_put(Dst, 11317, LJ_TTAB); if (sse) { - dasm_put(Dst, 11350); + dasm_put(Dst, 11357); } else { - dasm_put(Dst, 11359); + dasm_put(Dst, 11366); } - dasm_put(Dst, 11369); + dasm_put(Dst, 11376); break; /* -- Binary ops -------------------------------------------------------- */ case BC_ADDVN: case BC_ADDNV: case BC_ADDVV: - dasm_put(Dst, 11379); + dasm_put(Dst, 11386); vk = ((int)op - BC_ADDVN) / (BC_ADDNV-BC_ADDVN); switch (vk) { case 0: - dasm_put(Dst, 11387, LJ_TISNUM); + dasm_put(Dst, 11394, LJ_TISNUM); if (sse) { - dasm_put(Dst, 11399); + dasm_put(Dst, 11406); } else { - dasm_put(Dst, 11413); + dasm_put(Dst, 11420); } break; case 1: - dasm_put(Dst, 11421, LJ_TISNUM); + dasm_put(Dst, 11428, LJ_TISNUM); if (sse) { - dasm_put(Dst, 11433); + dasm_put(Dst, 11440); } else { - dasm_put(Dst, 11447); + dasm_put(Dst, 11454); } break; default: - dasm_put(Dst, 11455, LJ_TISNUM, LJ_TISNUM); + dasm_put(Dst, 11462, LJ_TISNUM, LJ_TISNUM); if (sse) { - dasm_put(Dst, 11477); + dasm_put(Dst, 11484); } else { - dasm_put(Dst, 11491); + dasm_put(Dst, 11498); } break; } if (sse) { - dasm_put(Dst, 11253); + dasm_put(Dst, 11260); } else { - dasm_put(Dst, 11265); + dasm_put(Dst, 11272); } - dasm_put(Dst, 10835); + dasm_put(Dst, 10842); break; case BC_SUBVN: case BC_SUBNV: case BC_SUBVV: - dasm_put(Dst, 11379); + dasm_put(Dst, 11386); vk = ((int)op - BC_ADDVN) / (BC_ADDNV-BC_ADDVN); switch (vk) { case 0: - dasm_put(Dst, 11387, LJ_TISNUM); + dasm_put(Dst, 11394, LJ_TISNUM); if (sse) { - dasm_put(Dst, 11499); + dasm_put(Dst, 11506); } else { - dasm_put(Dst, 11513); + dasm_put(Dst, 11520); } break; case 1: - dasm_put(Dst, 11421, LJ_TISNUM); + dasm_put(Dst, 11428, LJ_TISNUM); if (sse) { - dasm_put(Dst, 11521); + dasm_put(Dst, 11528); } else { - dasm_put(Dst, 11535); + dasm_put(Dst, 11542); } break; default: - dasm_put(Dst, 11455, LJ_TISNUM, LJ_TISNUM); + dasm_put(Dst, 11462, LJ_TISNUM, LJ_TISNUM); if (sse) { - dasm_put(Dst, 11543); + dasm_put(Dst, 11550); } else { - dasm_put(Dst, 11557); + dasm_put(Dst, 11564); } break; } if (sse) { - dasm_put(Dst, 11253); + dasm_put(Dst, 11260); } else { - dasm_put(Dst, 11265); + dasm_put(Dst, 11272); } - dasm_put(Dst, 10835); + dasm_put(Dst, 10842); break; case BC_MULVN: case BC_MULNV: case BC_MULVV: - dasm_put(Dst, 11379); + dasm_put(Dst, 11386); vk = ((int)op - BC_ADDVN) / (BC_ADDNV-BC_ADDVN); switch (vk) { case 0: - dasm_put(Dst, 11387, LJ_TISNUM); + dasm_put(Dst, 11394, LJ_TISNUM); if (sse) { - dasm_put(Dst, 11565); + dasm_put(Dst, 11572); } else { - dasm_put(Dst, 11579); + dasm_put(Dst, 11586); } break; case 1: - dasm_put(Dst, 11421, LJ_TISNUM); + dasm_put(Dst, 11428, LJ_TISNUM); if (sse) { - dasm_put(Dst, 11587); + dasm_put(Dst, 11594); } else { - dasm_put(Dst, 11601); + dasm_put(Dst, 11608); } break; default: - dasm_put(Dst, 11455, LJ_TISNUM, LJ_TISNUM); + dasm_put(Dst, 11462, LJ_TISNUM, LJ_TISNUM); if (sse) { - dasm_put(Dst, 11609); + dasm_put(Dst, 11616); } else { - dasm_put(Dst, 11623); + dasm_put(Dst, 11630); } break; } if (sse) { - dasm_put(Dst, 11253); + dasm_put(Dst, 11260); } else { - dasm_put(Dst, 11265); + dasm_put(Dst, 11272); } - dasm_put(Dst, 10835); + dasm_put(Dst, 10842); break; case BC_DIVVN: case BC_DIVNV: case BC_DIVVV: - dasm_put(Dst, 11379); + dasm_put(Dst, 11386); vk = ((int)op - BC_ADDVN) / (BC_ADDNV-BC_ADDVN); switch (vk) { case 0: - dasm_put(Dst, 11387, LJ_TISNUM); + dasm_put(Dst, 11394, LJ_TISNUM); if (sse) { - dasm_put(Dst, 11631); + dasm_put(Dst, 11638); } else { - dasm_put(Dst, 11645); + dasm_put(Dst, 11652); } break; case 1: - dasm_put(Dst, 11421, LJ_TISNUM); + dasm_put(Dst, 11428, LJ_TISNUM); if (sse) { - dasm_put(Dst, 11653); + dasm_put(Dst, 11660); } else { - dasm_put(Dst, 11667); + dasm_put(Dst, 11674); } break; default: - dasm_put(Dst, 11455, LJ_TISNUM, LJ_TISNUM); + dasm_put(Dst, 11462, LJ_TISNUM, LJ_TISNUM); if (sse) { - dasm_put(Dst, 11675); + dasm_put(Dst, 11682); } else { - dasm_put(Dst, 11689); + dasm_put(Dst, 11696); } break; } if (sse) { - dasm_put(Dst, 11253); + dasm_put(Dst, 11260); } else { - dasm_put(Dst, 11265); + dasm_put(Dst, 11272); } - dasm_put(Dst, 10835); + dasm_put(Dst, 10842); break; case BC_MODVN: - dasm_put(Dst, 11379); + dasm_put(Dst, 11386); vk = ((int)op - BC_ADDVN) / (BC_ADDNV-BC_ADDVN); switch (vk) { case 0: - dasm_put(Dst, 11387, LJ_TISNUM); + dasm_put(Dst, 11394, LJ_TISNUM); if (sse) { - dasm_put(Dst, 11697); + dasm_put(Dst, 11704); } else { - dasm_put(Dst, 11711); + dasm_put(Dst, 11718); } break; case 1: - dasm_put(Dst, 11421, LJ_TISNUM); + dasm_put(Dst, 11428, LJ_TISNUM); if (sse) { - dasm_put(Dst, 11719); + dasm_put(Dst, 11726); } else { - dasm_put(Dst, 11733); + dasm_put(Dst, 11740); } break; default: - dasm_put(Dst, 11455, LJ_TISNUM, LJ_TISNUM); + dasm_put(Dst, 11462, LJ_TISNUM, LJ_TISNUM); if (sse) { - dasm_put(Dst, 11741); + dasm_put(Dst, 11748); } else { - dasm_put(Dst, 11755); + dasm_put(Dst, 11762); } break; } - dasm_put(Dst, 11763); + dasm_put(Dst, 11770); if (sse) { - dasm_put(Dst, 11253); + dasm_put(Dst, 11260); } else { - dasm_put(Dst, 11265); + dasm_put(Dst, 11272); } - dasm_put(Dst, 10835); + dasm_put(Dst, 10842); break; case BC_MODNV: case BC_MODVV: - dasm_put(Dst, 11379); + dasm_put(Dst, 11386); vk = ((int)op - BC_ADDVN) / (BC_ADDNV-BC_ADDVN); switch (vk) { case 0: - dasm_put(Dst, 11387, LJ_TISNUM); + dasm_put(Dst, 11394, LJ_TISNUM); if (sse) { - dasm_put(Dst, 11697); + dasm_put(Dst, 11704); } else { - dasm_put(Dst, 11711); + dasm_put(Dst, 11718); } break; case 1: - dasm_put(Dst, 11421, LJ_TISNUM); + dasm_put(Dst, 11428, LJ_TISNUM); if (sse) { - dasm_put(Dst, 11719); + dasm_put(Dst, 11726); } else { - dasm_put(Dst, 11733); + dasm_put(Dst, 11740); } break; default: - dasm_put(Dst, 11455, LJ_TISNUM, LJ_TISNUM); + dasm_put(Dst, 11462, LJ_TISNUM, LJ_TISNUM); if (sse) { - dasm_put(Dst, 11741); + dasm_put(Dst, 11748); } else { - dasm_put(Dst, 11755); + dasm_put(Dst, 11762); } break; } - dasm_put(Dst, 11769); + dasm_put(Dst, 11776); break; case BC_POW: - dasm_put(Dst, 11379); + dasm_put(Dst, 11386); vk = ((int)op - BC_ADDVN) / (BC_ADDNV-BC_ADDVN); switch (vk) { case 0: - dasm_put(Dst, 11387, LJ_TISNUM); + dasm_put(Dst, 11394, LJ_TISNUM); if (sse) { - dasm_put(Dst, 11697); + dasm_put(Dst, 11704); } else { - dasm_put(Dst, 11711); + dasm_put(Dst, 11718); } break; case 1: - dasm_put(Dst, 11421, LJ_TISNUM); + dasm_put(Dst, 11428, LJ_TISNUM); if (sse) { - dasm_put(Dst, 11719); + dasm_put(Dst, 11726); } else { - dasm_put(Dst, 11733); + dasm_put(Dst, 11740); } break; default: - dasm_put(Dst, 11455, LJ_TISNUM, LJ_TISNUM); + dasm_put(Dst, 11462, LJ_TISNUM, LJ_TISNUM); if (sse) { - dasm_put(Dst, 11741); + dasm_put(Dst, 11748); } else { - dasm_put(Dst, 11755); + dasm_put(Dst, 11762); } break; } - dasm_put(Dst, 11774); + dasm_put(Dst, 11781); if (sse) { - dasm_put(Dst, 11253); + dasm_put(Dst, 11260); } else { - dasm_put(Dst, 11265); + dasm_put(Dst, 11272); } - dasm_put(Dst, 10835); + dasm_put(Dst, 10842); break; case BC_CAT: - dasm_put(Dst, 11778, Dt1(->base), Dt1(->base)); + dasm_put(Dst, 11785, Dt1(->base), Dt1(->base)); break; /* -- Constant ops ------------------------------------------------------ */ case BC_KSTR: - dasm_put(Dst, 11872, LJ_TSTR); + dasm_put(Dst, 11879, LJ_TSTR); break; case BC_KSHORT: if (sse) { - dasm_put(Dst, 11905); + dasm_put(Dst, 11912); } else { - dasm_put(Dst, 11920); + dasm_put(Dst, 11927); } - dasm_put(Dst, 10835); + dasm_put(Dst, 10842); break; case BC_KNUM: if (sse) { - dasm_put(Dst, 11928); + dasm_put(Dst, 11935); } else { - dasm_put(Dst, 11941); + dasm_put(Dst, 11948); } - dasm_put(Dst, 10835); + dasm_put(Dst, 10842); break; case BC_KPRI: - dasm_put(Dst, 11948); + dasm_put(Dst, 11955); break; case BC_KNIL: - dasm_put(Dst, 11974, LJ_TNIL); + dasm_put(Dst, 11981, LJ_TNIL); break; /* -- Upvalue and function ops ------------------------------------------ */ case BC_UGET: - dasm_put(Dst, 12020, offsetof(GCfuncL, uvptr), DtA(->v)); + dasm_put(Dst, 12027, offsetof(GCfuncL, uvptr), DtA(->v)); break; case BC_USETV: #define TV2MARKOFS \ ((int32_t)offsetof(GCupval, marked)-(int32_t)offsetof(GCupval, tv)) - dasm_put(Dst, 12064, offsetof(GCfuncL, uvptr), DtA(->closed), DtA(->v), TV2MARKOFS, LJ_GC_BLACK, LJ_TISGCV, LJ_TISNUM - LJ_TISGCV, Dt4(->gch.marked), LJ_GC_WHITES, GG_DISP2G); - dasm_put(Dst, 12154); + dasm_put(Dst, 12071, offsetof(GCfuncL, uvptr), DtA(->closed), DtA(->v), TV2MARKOFS, LJ_GC_BLACK, LJ_TISGCV, LJ_TISNUM - LJ_TISGCV, Dt4(->gch.marked), LJ_GC_WHITES, GG_DISP2G); + dasm_put(Dst, 12161); break; #undef TV2MARKOFS case BC_USETS: - dasm_put(Dst, 12166, offsetof(GCfuncL, uvptr), DtA(->v), LJ_TSTR, DtA(->marked), LJ_GC_BLACK, Dt4(->gch.marked), LJ_GC_WHITES, DtA(->closed), GG_DISP2G); + dasm_put(Dst, 12173, offsetof(GCfuncL, uvptr), DtA(->v), LJ_TSTR, DtA(->marked), LJ_GC_BLACK, Dt4(->gch.marked), LJ_GC_WHITES, DtA(->closed), GG_DISP2G); break; case BC_USETN: - dasm_put(Dst, 12257); + dasm_put(Dst, 12264); if (sse) { - dasm_put(Dst, 12262); + dasm_put(Dst, 12269); } else { - dasm_put(Dst, 11072); + dasm_put(Dst, 11079); } - dasm_put(Dst, 12269, offsetof(GCfuncL, uvptr), DtA(->v)); + dasm_put(Dst, 12276, offsetof(GCfuncL, uvptr), DtA(->v)); if (sse) { - dasm_put(Dst, 12278); + dasm_put(Dst, 12285); } else { - dasm_put(Dst, 12284); + dasm_put(Dst, 12291); } - dasm_put(Dst, 10835); + dasm_put(Dst, 10842); break; case BC_USETP: - dasm_put(Dst, 12287, offsetof(GCfuncL, uvptr), DtA(->v)); + dasm_put(Dst, 12294, offsetof(GCfuncL, uvptr), DtA(->v)); break; case BC_UCLO: - dasm_put(Dst, 12324, -BCBIAS_J*4, Dt1(->openupval), Dt1(->base), Dt1(->base)); + dasm_put(Dst, 12331, -BCBIAS_J*4, Dt1(->openupval), Dt1(->base), Dt1(->base)); break; case BC_FNEW: - dasm_put(Dst, 12378, Dt1(->base), Dt1(->base), LJ_TFUNC); + dasm_put(Dst, 12385, Dt1(->base), Dt1(->base), LJ_TFUNC); break; /* -- Table ops --------------------------------------------------------- */ case BC_TNEW: - dasm_put(Dst, 12449, DISPATCH_GL(gc.total), DISPATCH_GL(gc.threshold), Dt1(->base), Dt1(->base), LJ_TTAB); + dasm_put(Dst, 12456, DISPATCH_GL(gc.total), DISPATCH_GL(gc.threshold), Dt1(->base), Dt1(->base), LJ_TTAB); break; case BC_TDUP: - dasm_put(Dst, 12570, DISPATCH_GL(gc.total), DISPATCH_GL(gc.threshold), Dt1(->base), Dt1(->base), LJ_TTAB); + dasm_put(Dst, 12577, DISPATCH_GL(gc.total), DISPATCH_GL(gc.threshold), Dt1(->base), Dt1(->base), LJ_TTAB); break; case BC_GGET: - dasm_put(Dst, 12662, Dt7(->env)); + dasm_put(Dst, 12669, Dt7(->env)); break; case BC_GSET: - dasm_put(Dst, 12680, Dt7(->env)); + dasm_put(Dst, 12687, Dt7(->env)); break; case BC_TGETV: - dasm_put(Dst, 12698, LJ_TTAB, LJ_TISNUM); + dasm_put(Dst, 12705, LJ_TTAB, LJ_TISNUM); if (sse) { - dasm_put(Dst, 12731); + dasm_put(Dst, 12738); } else { - dasm_put(Dst, 12752); + dasm_put(Dst, 12759); if (cmov) { - dasm_put(Dst, 10798); + dasm_put(Dst, 10805); } else { - dasm_put(Dst, 10804); + dasm_put(Dst, 10811); } dasm_put(Dst, 2524); } - dasm_put(Dst, 12762, Dt6(->asize), Dt6(->array), LJ_TNIL, Dt6(->metatable), Dt6(->metatable), Dt6(->nomm), 1<asize), Dt6(->array), LJ_TNIL, Dt6(->metatable), Dt6(->metatable), Dt6(->nomm), 1<hmask), Dt5(->hash), sizeof(Node), Dt6(->node), DtB(->key.it), LJ_TSTR, DtB(->key.gcr), LJ_TNIL); - dasm_put(Dst, 12956, LJ_TNIL, DtB(->next), Dt6(->metatable), Dt6(->nomm), 1<hmask), Dt5(->hash), sizeof(Node), Dt6(->node), DtB(->key.it), LJ_TSTR, DtB(->key.gcr), LJ_TNIL); + dasm_put(Dst, 12963, LJ_TNIL, DtB(->next), Dt6(->metatable), Dt6(->nomm), 1<asize), Dt6(->array), LJ_TNIL, Dt6(->metatable), Dt6(->metatable), Dt6(->nomm), 1<asize), Dt6(->array), LJ_TNIL, Dt6(->metatable), Dt6(->metatable), Dt6(->nomm), 1<asize), Dt6(->array), LJ_TNIL, Dt6(->marked), LJ_GC_BLACK, Dt6(->metatable), Dt6(->metatable)); - dasm_put(Dst, 13242, Dt6(->nomm), 1<marked), cast_byte(~LJ_GC_BLACK), DISPATCH_GL(gc.grayagain), DISPATCH_GL(gc.grayagain), Dt6(->gclist)); + dasm_put(Dst, 13166, Dt6(->asize), Dt6(->array), LJ_TNIL, Dt6(->marked), LJ_GC_BLACK, Dt6(->metatable), Dt6(->metatable)); + dasm_put(Dst, 13249, Dt6(->nomm), 1<marked), cast_byte(~LJ_GC_BLACK), DISPATCH_GL(gc.grayagain), DISPATCH_GL(gc.grayagain), Dt6(->gclist)); break; case BC_TSETS: - dasm_put(Dst, 13304, LJ_TTAB, Dt6(->hmask), Dt5(->hash), sizeof(Node), Dt6(->nomm), Dt6(->node), DtB(->key.it), LJ_TSTR, DtB(->key.gcr), LJ_TNIL); - dasm_put(Dst, 13379, Dt6(->marked), LJ_GC_BLACK, Dt6(->metatable), Dt6(->metatable), Dt6(->nomm), 1<next)); - dasm_put(Dst, 13471, Dt6(->metatable), Dt6(->nomm), 1<base), Dt1(->base), Dt6(->marked), cast_byte(~LJ_GC_BLACK), DISPATCH_GL(gc.grayagain), DISPATCH_GL(gc.grayagain), Dt6(->gclist)); + dasm_put(Dst, 13311, LJ_TTAB, Dt6(->hmask), Dt5(->hash), sizeof(Node), Dt6(->nomm), Dt6(->node), DtB(->key.it), LJ_TSTR, DtB(->key.gcr), LJ_TNIL); + dasm_put(Dst, 13386, Dt6(->marked), LJ_GC_BLACK, Dt6(->metatable), Dt6(->metatable), Dt6(->nomm), 1<next)); + dasm_put(Dst, 13478, Dt6(->metatable), Dt6(->nomm), 1<base), Dt1(->base), Dt6(->marked), cast_byte(~LJ_GC_BLACK), DISPATCH_GL(gc.grayagain), DISPATCH_GL(gc.grayagain), Dt6(->gclist)); break; case BC_TSETB: - dasm_put(Dst, 13567, LJ_TTAB, Dt6(->asize), Dt6(->array), LJ_TNIL, Dt6(->marked), LJ_GC_BLACK, Dt6(->metatable)); - dasm_put(Dst, 13665, Dt6(->metatable), Dt6(->nomm), 1<marked), cast_byte(~LJ_GC_BLACK), DISPATCH_GL(gc.grayagain), DISPATCH_GL(gc.grayagain), Dt6(->gclist)); + dasm_put(Dst, 13574, LJ_TTAB, Dt6(->asize), Dt6(->array), LJ_TNIL, Dt6(->marked), LJ_GC_BLACK, Dt6(->metatable)); + dasm_put(Dst, 13672, Dt6(->metatable), Dt6(->nomm), 1<marked), cast_byte(~LJ_GC_BLACK), DISPATCH_GL(gc.grayagain), DISPATCH_GL(gc.grayagain), Dt6(->gclist)); break; case BC_TSETM: - dasm_put(Dst, 13711); + dasm_put(Dst, 13718); if (sse) { - dasm_put(Dst, 13716); - } else { dasm_put(Dst, 13723); + } else { + dasm_put(Dst, 13730); } - dasm_put(Dst, 13735, Dt6(->marked), LJ_GC_BLACK, Dt6(->asize), Dt6(->array), Dt1(->base), Dt1(->base)); - dasm_put(Dst, 13877, Dt6(->marked), cast_byte(~LJ_GC_BLACK), DISPATCH_GL(gc.grayagain), DISPATCH_GL(gc.grayagain), Dt6(->gclist)); + dasm_put(Dst, 13742, Dt6(->marked), LJ_GC_BLACK, Dt6(->asize), Dt6(->array), Dt1(->base), Dt1(->base)); + dasm_put(Dst, 13884, Dt6(->marked), cast_byte(~LJ_GC_BLACK), DISPATCH_GL(gc.grayagain), DISPATCH_GL(gc.grayagain), Dt6(->gclist)); break; /* -- Calls and vararg handling ----------------------------------------- */ case BC_CALL: case BC_CALLM: - dasm_put(Dst, 11383); + dasm_put(Dst, 11390); if (op == BC_CALLM) { - dasm_put(Dst, 13895); + dasm_put(Dst, 13902); } - dasm_put(Dst, 13900, LJ_TFUNC, Dt7(->pc)); + dasm_put(Dst, 13907, LJ_TFUNC, Dt7(->pc)); break; case BC_CALLMT: - dasm_put(Dst, 13895); + dasm_put(Dst, 13902); break; case BC_CALLT: - dasm_put(Dst, 13941, LJ_TFUNC, FRAME_TYPE, Dt7(->ffid), Dt7(->pc)); - dasm_put(Dst, 14059, FRAME_TYPE, Dt7(->pc), PC2PROTO(k)); + dasm_put(Dst, 13948, LJ_TFUNC, FRAME_TYPE, Dt7(->ffid), Dt7(->pc)); + dasm_put(Dst, 14066, FRAME_TYPE, Dt7(->pc), PC2PROTO(k)); break; case BC_ITERC: - dasm_put(Dst, 14116, LJ_TFUNC, 2+1, Dt7(->pc)); + dasm_put(Dst, 14123, LJ_TFUNC, 2+1, Dt7(->pc)); break; case BC_VARG: - dasm_put(Dst, 14196, Dt7(->pc), PC2PROTO(numparams), (8+FRAME_VARG), LJ_TNIL); - dasm_put(Dst, 14340, Dt1(->maxstack), Dt1(->base), Dt1(->top), Dt1(->base), Dt1(->top)); + dasm_put(Dst, 14203, Dt7(->pc), PC2PROTO(numparams), (8+FRAME_VARG), LJ_TNIL); + dasm_put(Dst, 14347, Dt1(->maxstack), Dt1(->base), Dt1(->top), Dt1(->base), Dt1(->top)); break; /* -- Returns ----------------------------------------------------------- */ case BC_RETM: - dasm_put(Dst, 13895); + dasm_put(Dst, 13902); break; case BC_RET: case BC_RET0: case BC_RET1: if (op != BC_RET0) { - dasm_put(Dst, 14439); + dasm_put(Dst, 14446); } - dasm_put(Dst, 14443, FRAME_TYPE); + dasm_put(Dst, 14450, FRAME_TYPE); switch (op) { case BC_RET: - dasm_put(Dst, 14462); + dasm_put(Dst, 14469); break; case BC_RET1: - dasm_put(Dst, 14520); + dasm_put(Dst, 14527); /* fallthrough */ case BC_RET0: - dasm_put(Dst, 14536); + dasm_put(Dst, 14543); default: break; } - dasm_put(Dst, 14547, Dt7(->pc), PC2PROTO(k)); + dasm_put(Dst, 14554, Dt7(->pc), PC2PROTO(k)); if (op == BC_RET) { - dasm_put(Dst, 14589, LJ_TNIL); + dasm_put(Dst, 14596, LJ_TNIL); } else { - dasm_put(Dst, 14598, LJ_TNIL); + dasm_put(Dst, 14605, LJ_TNIL); } - dasm_put(Dst, 14605); + dasm_put(Dst, 14612); if (op != BC_RET0) { - dasm_put(Dst, 14626); + dasm_put(Dst, 14633); } dasm_put(Dst, 4680); break; @@ -2162,7 +2163,7 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop, int cmov, int sse) case BC_FORL: #if LJ_HASJIT - dasm_put(Dst, 14630, HOTCOUNT_PCMASK, GG_DISP2HOT); + dasm_put(Dst, 14637, HOTCOUNT_PCMASK, GG_DISP2HOT); #endif break; @@ -2174,57 +2175,57 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop, int cmov, int sse) case BC_FORI: case BC_IFORL: vk = (op == BC_IFORL || op == BC_JFORL); - dasm_put(Dst, 14651); + dasm_put(Dst, 14658); if (!vk) { - dasm_put(Dst, 14655, LJ_TISNUM, LJ_TISNUM); + dasm_put(Dst, 14662, LJ_TISNUM, LJ_TISNUM); } - dasm_put(Dst, 14674); + dasm_put(Dst, 14681); if (!vk) { - dasm_put(Dst, 14678, LJ_TISNUM); + dasm_put(Dst, 14685, LJ_TISNUM); } if (sse) { - dasm_put(Dst, 14687); + dasm_put(Dst, 14694); if (vk) { - dasm_put(Dst, 14699); + dasm_put(Dst, 14706); } else { - dasm_put(Dst, 14718); + dasm_put(Dst, 14725); } - dasm_put(Dst, 14723); + dasm_put(Dst, 14730); } else { - dasm_put(Dst, 14736); + dasm_put(Dst, 14743); if (vk) { - dasm_put(Dst, 14742); + dasm_put(Dst, 14749); } else { - dasm_put(Dst, 14758); + dasm_put(Dst, 14765); } - dasm_put(Dst, 14766); + dasm_put(Dst, 14773); if (cmov) { - dasm_put(Dst, 10798); + dasm_put(Dst, 10805); } else { - dasm_put(Dst, 10804); + dasm_put(Dst, 10811); } if (!cmov) { - dasm_put(Dst, 14771); + dasm_put(Dst, 14778); } } if (op == BC_FORI) { - dasm_put(Dst, 14777, -BCBIAS_J*4); + dasm_put(Dst, 14784, -BCBIAS_J*4); } else if (op == BC_JFORI) { - dasm_put(Dst, 14787, -BCBIAS_J*4, BC_JLOOP); + dasm_put(Dst, 14794, -BCBIAS_J*4, BC_JLOOP); } else if (op == BC_IFORL) { - dasm_put(Dst, 14801, -BCBIAS_J*4); + dasm_put(Dst, 14808, -BCBIAS_J*4); } else { - dasm_put(Dst, 14797, BC_JLOOP); + dasm_put(Dst, 14804, BC_JLOOP); } - dasm_put(Dst, 10833); + dasm_put(Dst, 10840); if (sse) { - dasm_put(Dst, 14811); + dasm_put(Dst, 14818); } break; case BC_ITERL: #if LJ_HASJIT - dasm_put(Dst, 14630, HOTCOUNT_PCMASK, GG_DISP2HOT); + dasm_put(Dst, 14637, HOTCOUNT_PCMASK, GG_DISP2HOT); #endif break; @@ -2233,33 +2234,33 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop, int cmov, int sse) break; #endif case BC_IITERL: - dasm_put(Dst, 14822, LJ_TNIL); + dasm_put(Dst, 14829, LJ_TNIL); if (op == BC_JITERL) { - dasm_put(Dst, 14837, BC_JLOOP); + dasm_put(Dst, 14844, BC_JLOOP); } else { - dasm_put(Dst, 14851, -BCBIAS_J*4); + dasm_put(Dst, 14858, -BCBIAS_J*4); } - dasm_put(Dst, 11130); + dasm_put(Dst, 11137); break; case BC_LOOP: #if LJ_HASJIT - dasm_put(Dst, 14630, HOTCOUNT_PCMASK, GG_DISP2HOT); + dasm_put(Dst, 14637, HOTCOUNT_PCMASK, GG_DISP2HOT); #endif break; case BC_ILOOP: - dasm_put(Dst, 10835); + dasm_put(Dst, 10842); break; case BC_JLOOP: #if LJ_HASJIT - dasm_put(Dst, 14867, DISPATCH_J(trace), DtD(->mcode), DISPATCH_GL(jit_base), DISPATCH_GL(jit_L)); + dasm_put(Dst, 14874, DISPATCH_J(trace), DtD(->mcode), DISPATCH_GL(jit_base), DISPATCH_GL(jit_L)); #endif break; case BC_JMP: - dasm_put(Dst, 14890, -BCBIAS_J*4); + dasm_put(Dst, 14897, -BCBIAS_J*4); break; /* -- Function headers -------------------------------------------------- */ @@ -2273,7 +2274,7 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop, int cmov, int sse) case BC_FUNCF: #if LJ_HASJIT - dasm_put(Dst, 14914, HOTCOUNT_PCMASK, GG_DISP2HOT); + dasm_put(Dst, 14921, HOTCOUNT_PCMASK, GG_DISP2HOT); #endif case BC_FUNCV: /* NYI: compiled vararg functions. */ break; @@ -2283,47 +2284,47 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop, int cmov, int sse) break; #endif case BC_IFUNCF: - dasm_put(Dst, 14935, -4+PC2PROTO(k), Dt1(->maxstack), -4+PC2PROTO(numparams)); + dasm_put(Dst, 14942, -4+PC2PROTO(k), Dt1(->maxstack), -4+PC2PROTO(numparams)); if (op == BC_JFUNCF) { - dasm_put(Dst, 14965, BC_JLOOP); + dasm_put(Dst, 14972, BC_JLOOP); } else { - dasm_put(Dst, 10835); + dasm_put(Dst, 10842); } - dasm_put(Dst, 14974, LJ_TNIL); + dasm_put(Dst, 14981, LJ_TNIL); break; case BC_JFUNCV: #if !LJ_HASJIT break; #endif - dasm_put(Dst, 10496); + dasm_put(Dst, 10503); break; /* NYI: compiled vararg functions. */ case BC_IFUNCV: - dasm_put(Dst, 14996, FRAME_VARG, Dt1(->maxstack), -4+PC2PROTO(numparams), LJ_TNIL); + dasm_put(Dst, 15003, FRAME_VARG, Dt1(->maxstack), -4+PC2PROTO(numparams), LJ_TNIL); if (op == BC_JFUNCV) { - dasm_put(Dst, 14965, BC_JLOOP); + dasm_put(Dst, 14972, BC_JLOOP); } else { - dasm_put(Dst, 15087, -4+PC2PROTO(k)); + dasm_put(Dst, 15094, -4+PC2PROTO(k)); } - dasm_put(Dst, 15109, LJ_TNIL); + dasm_put(Dst, 15116, LJ_TNIL); break; case BC_FUNCC: case BC_FUNCCW: - dasm_put(Dst, 15131, Dt8(->f), Dt1(->base), 8*LUA_MINSTACK, Dt1(->maxstack), Dt1(->top)); + dasm_put(Dst, 15138, Dt8(->f), Dt1(->base), 8*LUA_MINSTACK, Dt1(->maxstack), Dt1(->top)); if (op == BC_FUNCC) { - dasm_put(Dst, 15160); + dasm_put(Dst, 15167); } else { - dasm_put(Dst, 15164); + dasm_put(Dst, 15171); } - dasm_put(Dst, 15172, DISPATCH_GL(vmstate), ~LJ_VMST_C); + dasm_put(Dst, 15179, DISPATCH_GL(vmstate), ~LJ_VMST_C); if (op == BC_FUNCC) { - dasm_put(Dst, 15181); + dasm_put(Dst, 15188); } else { - dasm_put(Dst, 15185, DISPATCH_GL(wrapf)); + dasm_put(Dst, 15192, DISPATCH_GL(wrapf)); } - dasm_put(Dst, 15190, DISPATCH_GL(vmstate), ~LJ_VMST_INTERP, Dt1(->base), Dt1(->top)); + dasm_put(Dst, 15197, DISPATCH_GL(vmstate), ~LJ_VMST_INTERP, Dt1(->base), Dt1(->top)); break; /* ---------------------------------------------------------------------- */ @@ -2351,7 +2352,7 @@ static int build_backend(BuildCtx *ctx) build_subroutines(ctx, cmov, sse); - dasm_put(Dst, 15215); + dasm_put(Dst, 15222); for (op = 0; op < BC__MAX; op++) build_ins(ctx, (BCOp)op, op, cmov, sse); diff --git a/src/lj_asm.c b/src/lj_asm.c index 75a0cd53..73416768 100644 --- a/src/lj_asm.c +++ b/src/lj_asm.c @@ -2752,67 +2752,32 @@ static void asm_stack_restore(ASMState *as, SnapShot *snap) /* -- GC handling --------------------------------------------------------- */ -/* Sync all live GC values to Lua stack slots. */ -static void asm_gc_sync(ASMState *as, SnapShot *snap, Reg base) -{ - /* Some care must be taken when allocating registers here, since this is - ** not part of the fast path. All scratch registers are evicted in the - ** fast path, so it's easiest to force allocation from scratch registers - ** only. This avoids register allocation state unification. - */ - RegSet allow = rset_exclude(RSET_SCRATCH & RSET_GPR, base); - SnapEntry *map = &as->T->snapmap[snap->mapofs]; - MSize n, nent = snap->nent; - for (n = 0; n < nent; n++) { - SnapEntry sn = map[n]; - IRRef ref = snap_ref(sn); - /* NYI: sync the frame, bump base, set topslot, clear new slots. */ - if ((sn & (SNAP_CONT|SNAP_FRAME))) - lj_trace_err(as->J, LJ_TRERR_NYIGCF); - if (!irref_isk(ref)) { - IRIns *ir = IR(ref); - if (irt_isgcv(ir->t)) { - int32_t ofs = 8*(int32_t)(snap_slot(sn)-1); - Reg src = ra_alloc1(as, ref, allow); - emit_movtomro(as, src, base, ofs); - emit_movmroi(as, base, ofs+4, irt_toitype(ir->t)); - checkmclim(as); - } - } - } -} - /* Check GC threshold and do one or more GC steps. */ -static void asm_gc_check(ASMState *as, SnapShot *snap) +static void asm_gc_check(ASMState *as) { const CCallInfo *ci = &lj_ir_callinfo[IRCALL_lj_gc_step_jit]; IRRef args[2]; MCLabel l_end; Reg base, lstate, tmp; - RegSet drop = RSET_SCRATCH; - if (ra_hasreg(IR(REF_BASE)->r)) /* Stack may be reallocated by the GC. */ - drop |= RID2RSET(IR(REF_BASE)->r); /* Need to evict BASE, too. */ - ra_evictset(as, drop); + ra_evictset(as, RSET_SCRATCH); l_end = emit_label(as); + /* Exit trace if in GCSatomic or GCSfinalize. Avoids syncing GC objects. */ + asm_guardcc(as, CC_NE); /* Assumes asm_snap_prep() already done. */ + emit_rr(as, XO_TEST, RID_RET, RID_RET); args[0] = ASMREF_L; args[1] = ASMREF_TMP1; asm_gencall(as, ci, args); tmp = ra_releasetmp(as, ASMREF_TMP1); emit_loadi(as, tmp, (int32_t)as->gcsteps); - /* We don't know spadj yet, so get the C frame from L->cframe. */ - emit_movmroi(as, tmp, CFRAME_OFS_PC, - (int32_t)as->T->snapmap[snap->mapofs+snap->nent]); - emit_gri(as, XG_ARITHi(XOg_AND), tmp|REX_64, CFRAME_RAWMASK); - lstate = IR(ASMREF_L)->r; - emit_rmro(as, XO_MOV, tmp|REX_64, lstate, offsetof(lua_State, cframe)); /* It's ok if lstate is already in a non-scratch reg. But all allocations - ** in the non-fast path must use a scratch reg. See comment above. + ** in the non-fast path must use a scratch reg (avoids unification). */ + lstate = IR(ASMREF_L)->r; base = ra_alloc1(as, REF_BASE, rset_exclude(RSET_SCRATCH & RSET_GPR, lstate)); emit_movtomro(as, base|REX_64, lstate, offsetof(lua_State, base)); - asm_gc_sync(as, snap, base); /* BASE/L get restored anyway, better do it inside the slow path. */ - if (as->parent || as->curins == as->loopref) ra_restore(as, REF_BASE); + if (rset_test(RSET_SCRATCH, base) && (as->parent || as->snapno != 0)) + ra_restore(as, REF_BASE); if (rset_test(RSET_SCRATCH, lstate) && ra_hasreg(IR(ASMREF_L)->r)) ra_restore(as, ASMREF_L); /* Jump around GC step if GC total < GC threshold. */ @@ -3034,7 +2999,7 @@ static void asm_loop(ASMState *as) /* LOOP is a guard, so the snapno is up to date. */ as->loopsnapno = as->snapno; if (as->gcsteps) - asm_gc_check(as, &as->T->snap[as->loopsnapno]); + asm_gc_check(as); /* LOOP marks the transition from the variant to the invariant part. */ as->testmcp = as->invmcp = NULL; as->sectref = 0; @@ -3126,7 +3091,7 @@ static void asm_head_side(ASMState *as) allow = asm_head_side_base(as, pbase, allow); /* Scan all parent SLOADs and collect register dependencies. */ - for (i = as->curins; i > REF_BASE; i--) { + for (i = as->stopins; i > REF_BASE; i--) { IRIns *ir = IR(i); RegSP rs; lua_assert(ir->o == IR_SLOAD && (ir->op2 & IRSLOAD_PARENT)); @@ -3161,7 +3126,7 @@ static void asm_head_side(ASMState *as) /* Reload spilled target registers. */ if (pass2) { - for (i = as->curins; i > REF_BASE; i--) { + for (i = as->stopins; i > REF_BASE; i--) { IRIns *ir = IR(i); if (irt_ismarked(ir->t)) { RegSet mask; @@ -3686,8 +3651,11 @@ void lj_asm_trace(jit_State *J, Trace *T) RA_DBG_REF(); checkmclim(as); - if (as->gcsteps) - asm_gc_check(as, &as->T->snap[0]); + if (as->gcsteps) { + as->curins = as->T->snap[0].ref; + asm_snap_prep(as); /* The GC check is a guard. */ + asm_gc_check(as); + } ra_evictk(as); if (as->parent) asm_head_side(as); diff --git a/src/lj_gc.c b/src/lj_gc.c index d38238dd..18c07533 100644 --- a/src/lj_gc.c +++ b/src/lj_gc.c @@ -442,6 +442,7 @@ static void gc_finalize(lua_State *L) GCobj *o = gcnext(gcref(g->gc.mmudata)); GCudata *ud = gco2ud(o); cTValue *mo; + lua_assert(gcref(g->jit_L) == NULL); /* Must not be called on trace. */ /* Unchain from list of userdata to be finalized. */ if (o == gcref(g->gc.mmudata)) setgcrefnull(g->gc.mmudata); @@ -457,16 +458,8 @@ static void gc_finalize(lua_State *L) /* Save and restore lots of state around the __gc callback. */ uint8_t oldh = hook_save(g); MSize oldt = g->gc.threshold; - GCobj *oldjl = gcref(g->jit_L); - MSize oldjs = 0; - ptrdiff_t oldjb = 0; int errcode; TValue *top; - if (oldjl) { - oldjs = gco2th(oldjl)->stacksize; - oldjb = savestack(gco2th(oldjl), mref(g->jit_base, TValue )); - setgcrefnull(g->jit_L); - } lj_trace_abort(g); top = L->top; L->top = top+2; @@ -477,12 +470,6 @@ static void gc_finalize(lua_State *L) errcode = lj_vm_pcall(L, top+1, 1+0, -1); /* Stack: |mo|ud| -> | */ hook_restore(g, oldh); g->gc.threshold = oldt; /* Restore GC threshold. */ - if (oldjl) { - if (gco2th(oldjl)->stacksize < oldjs) - lj_state_growstack(gco2th(oldjl), oldjs - gco2th(oldjl)->stacksize); - setgcref(g->jit_L, oldjl); - setmref(g->jit_base, restorestack(gco2th(oldjl), oldjb)); - } if (errcode) lj_err_throw(L, errcode); /* Propagate errors. */ } @@ -514,7 +501,6 @@ static void atomic(global_State *g, lua_State *L) { size_t udsize; - g->gc.state = GCSatomic; gc_mark_uv(g); /* Need to remark open upvalues (the thread may be dead). */ gc_propagate_gray(g); /* Propagate any left-overs. */ @@ -539,9 +525,7 @@ static void atomic(global_State *g, lua_State *L) /* Prepare for sweep phase. */ g->gc.currentwhite = cast_byte(otherwhite(g)); /* Flip current white. */ - g->gc.sweepstr = 0; setmref(g->gc.sweep, &g->gc.root); - g->gc.state = GCSsweepstring; g->gc.estimate = g->gc.total - (MSize)udsize; /* Initial estimate. */ } @@ -556,7 +540,14 @@ static size_t gc_onestep(lua_State *L) case GCSpropagate: if (gcref(g->gc.gray) != NULL) return propagatemark(g); /* Propagate one gray object. */ - atomic(g, L); /* End of mark phase. */ + g->gc.state = GCSatomic; /* End of mark phase. */ + return 0; + case GCSatomic: + if (gcref(g->jit_L)) /* Don't run atomic phase on trace. */ + return LJ_MAX_MEM; + atomic(g, L); + g->gc.state = GCSsweepstring; /* Start of sweep phase. */ + g->gc.sweepstr = 0; return 0; case GCSsweepstring: { MSize old = g->gc.total; @@ -572,7 +563,12 @@ static size_t gc_onestep(lua_State *L) setmref(g->gc.sweep, gc_sweep(g, mref(g->gc.sweep, GCRef), GCSWEEPMAX)); if (gcref(*mref(g->gc.sweep, GCRef)) == NULL) { gc_shrink(g, L); - g->gc.state = GCSfinalize; /* End of sweep phase. */ + if (gcref(g->gc.mmudata)) { /* Need any finalizations? */ + g->gc.state = GCSfinalize; + } else { /* Otherwise skip this phase to help the JIT. */ + g->gc.state = GCSpause; /* End of GC cycle. */ + g->gc.debt = 0; + } } lua_assert(old >= g->gc.total); g->gc.estimate -= old - g->gc.total; @@ -580,6 +576,8 @@ static size_t gc_onestep(lua_State *L) } case GCSfinalize: if (gcref(g->gc.mmudata) != NULL) { + if (gcref(g->jit_L)) /* Don't call finalizers on trace. */ + return LJ_MAX_MEM; gc_finalize(L); /* Finalize one userdata object. */ if (g->gc.estimate > GCFINALIZECOST) g->gc.estimate -= GCFINALIZECOST; @@ -633,11 +631,13 @@ void LJ_FASTCALL lj_gc_step_fixtop(lua_State *L) #if LJ_HASJIT /* Perform multiple GC steps. Called from JIT-compiled code. */ -void LJ_FASTCALL lj_gc_step_jit(lua_State *L, MSize steps) +int LJ_FASTCALL lj_gc_step_jit(lua_State *L, MSize steps) { L->top = curr_topL(L); while (steps-- > 0 && lj_gc_step(L) == 0) ; + /* Return 1 to force a trace exit. */ + return (G(L)->gc.state == GCSatomic || G(L)->gc.state == GCSfinalize); } #endif @@ -647,23 +647,20 @@ void lj_gc_fullgc(lua_State *L) global_State *g = G(L); int32_t ostate = g->vmstate; setvmstate(g, GC); - if (g->gc.state <= GCSpropagate) { /* Caught somewhere in the middle. */ - g->gc.sweepstr = 0; + if (g->gc.state <= GCSatomic) { /* Caught somewhere in the middle. */ setmref(g->gc.sweep, &g->gc.root); /* Sweep everything (preserving it). */ setgcrefnull(g->gc.gray); /* Reset lists from partial propagation. */ setgcrefnull(g->gc.grayagain); setgcrefnull(g->gc.weak); g->gc.state = GCSsweepstring; /* Fast forward to the sweep phase. */ + g->gc.sweepstr = 0; } - lua_assert(g->gc.state != GCSpause && g->gc.state != GCSpropagate); - while (g->gc.state != GCSfinalize) { /* Finish sweep. */ - lua_assert(g->gc.state == GCSsweepstring || g->gc.state == GCSsweep); - gc_onestep(L); - } + while (g->gc.state == GCSsweepstring || g->gc.state == GCSsweep) + gc_onestep(L); /* Finish sweep. */ + lua_assert(g->gc.state == GCSfinalize || g->gc.state == GCSpause); /* Now perform a full GC. */ - gc_mark_start(g); - while (g->gc.state != GCSpause) - gc_onestep(L); + g->gc.state = GCSpause; + do { gc_onestep(L); } while (g->gc.state != GCSpause); g->gc.threshold = (g->gc.estimate/100) * g->gc.pause; g->vmstate = ostate; } diff --git a/src/lj_gc.h b/src/lj_gc.h index 228835ac..4832eca8 100644 --- a/src/lj_gc.h +++ b/src/lj_gc.h @@ -47,7 +47,7 @@ LJ_FUNC void lj_gc_freeall(global_State *g); LJ_FUNCA int LJ_FASTCALL lj_gc_step(lua_State *L); LJ_FUNCA void LJ_FASTCALL lj_gc_step_fixtop(lua_State *L); #if LJ_HASJIT -LJ_FUNC void LJ_FASTCALL lj_gc_step_jit(lua_State *L, MSize steps); +LJ_FUNC int LJ_FASTCALL lj_gc_step_jit(lua_State *L, MSize steps); #endif LJ_FUNC void lj_gc_fullgc(lua_State *L); diff --git a/src/lj_parse.c b/src/lj_parse.c index 3bef225a..31a70d38 100644 --- a/src/lj_parse.c +++ b/src/lj_parse.c @@ -1228,7 +1228,7 @@ static void fs_init(LexState *ls, FuncState *fs) fs->flags = 0; fs->framesize = 2; /* Minimum frame size. */ fs->kt = lj_tab_new(L, 0, 0); - /* Anchor table of constants and prototype (to avoid being collected). */ + /* Anchor table of constants in stack to avoid being collected. */ settabV(L, L->top, fs->kt); incr_top(L); } diff --git a/src/lj_record.c b/src/lj_record.c index e89d9c26..206eedca 100644 --- a/src/lj_record.c +++ b/src/lj_record.c @@ -1885,13 +1885,22 @@ static TRef rec_tnew(jit_State *J, uint32_t ah) /* -- Record bytecode ops ------------------------------------------------- */ -/* Optimize state after comparison. */ -static void optstate_comp(jit_State *J, int cond) +/* Prepare for comparison. */ +static void rec_comp_prep(jit_State *J) +{ + /* Prevent merging with snapshot #0 (GC exit) since we fixup the PC. */ + if (J->cur.nsnap == 1 && J->cur.snap[0].ref == J->cur.nins) + emitir_raw(IRT(IR_NOP, IRT_NIL), 0, 0); + lj_snap_add(J); +} + +/* Fixup comparison. */ +static void rec_comp_fixup(jit_State *J, int cond) { BCIns jmpins = J->pc[1]; const BCIns *npc = J->pc + 2 + (cond ? bc_j(jmpins) : 0); SnapShot *snap = &J->cur.snap[J->cur.nsnap-1]; - /* Avoid re-recording the comparison in side traces. */ + /* Set PC to opposite target to avoid re-recording the comp. in side trace. */ J->cur.snapmap[snap->mapofs + snap->nent] = SNAP_MKPC(npc); J->needsnap = 1; /* Shrink last snapshot if possible. */ @@ -1987,7 +1996,7 @@ void lj_record_ins(jit_State *J) break; /* Interpreter will throw for two different types. */ } } - lj_snap_add(J); + rec_comp_prep(J); irop = (int)op - (int)BC_ISLT + (int)IR_LT; if (ta == IRT_NUM) { if ((irop & 1)) irop ^= 4; /* ISGE/ISGT are unordered. */ @@ -2004,7 +2013,7 @@ void lj_record_ins(jit_State *J) break; } emitir(IRTG(irop, ta), ra, rc); - optstate_comp(J, ((int)op ^ irop) & 1); + rec_comp_fixup(J, ((int)op ^ irop) & 1); } break; @@ -2015,14 +2024,14 @@ void lj_record_ins(jit_State *J) /* Emit nothing for two non-table, non-udata consts. */ if (!(tref_isk2(ra, rc) && !(tref_istab(ra) || tref_isudata(ra)))) { int diff; - lj_snap_add(J); + rec_comp_prep(J); diff = rec_objcmp(J, ra, rc, rav, rcv); if (diff == 1 && (tref_istab(ra) || tref_isudata(ra))) { /* Only check __eq if different, but the same type (table or udata). */ rec_mm_equal(J, &ix, (int)op); break; } - optstate_comp(J, ((int)op & 1) == !diff); + rec_comp_fixup(J, ((int)op & 1) == !diff); } break; diff --git a/src/lj_trace.c b/src/lj_trace.c index cbd7ca6e..5571293e 100644 --- a/src/lj_trace.c +++ b/src/lj_trace.c @@ -692,8 +692,12 @@ int LJ_FASTCALL lj_trace_exit(jit_State *J, void *exptr) ); pc = exd.pc; - trace_hotside(J, pc); cf = cframe_raw(L->cframe); + setcframe_pc(cf, pc); + if (G(L)->gc.state == GCSatomic || G(L)->gc.state == GCSfinalize) + lj_gc_step(L); /* Exited because of GC: drive GC forward. */ + else + trace_hotside(J, pc); if (bc_op(*pc) == BC_JLOOP) { BCIns *retpc = &J->trace[bc_d(*pc)]->startins; if (bc_isret(bc_op(*retpc))) { @@ -703,10 +707,10 @@ int LJ_FASTCALL lj_trace_exit(jit_State *J, void *exptr) *J->patchpc = *retpc; } else { pc = retpc; + setcframe_pc(cf, pc); } } } - setcframe_pc(cf, pc); /* Return MULTRES or 0. */ switch (bc_op(*pc)) { case BC_CALLM: case BC_CALLMT: diff --git a/src/lj_traceerr.h b/src/lj_traceerr.h index 7b0dd813..1b0df055 100644 --- a/src/lj_traceerr.h +++ b/src/lj_traceerr.h @@ -49,7 +49,6 @@ TREDEF(BADRA, "inconsistent register allocation") TREDEF(NYIIR, "NYI: cannot assemble IR instruction %d") TREDEF(NYIPHI, "NYI: PHI shuffling too complex") TREDEF(NYICOAL, "NYI: register coalescing too complex") -TREDEF(NYIGCF, "NYI: gcstep sync with frames") #undef TREDEF