From 8e38231f9ea0bd1185c0b9688e71cef52f96bb31 Mon Sep 17 00:00:00 2001 From: Mike Pall Date: Sun, 14 Feb 2010 17:47:03 +0100 Subject: Implement call hooks (zero-cost if disabled). --- src/buildvm_x64.h | 1069 ++++++++++++++++++++-------------------- src/buildvm_x64win.h | 747 ++++++++++++++-------------- src/buildvm_x86.dasc | 31 +- src/buildvm_x86.h | 1310 +++++++++++++++++++++++++------------------------- src/lj_dispatch.c | 109 ++++- src/lj_dispatch.h | 5 +- src/lj_vm.h | 1 + 7 files changed, 1690 insertions(+), 1582 deletions(-) (limited to 'src') diff --git a/src/buildvm_x64.h b/src/buildvm_x64.h index a9e093bf..ac2ee63e 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[13578] = { +static const unsigned char build_actionlist[13665] = { 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, @@ -359,249 +359,253 @@ static const unsigned char build_actionlist[13578] = { 149,233,137,222,137,252,239,232,251,1,20,248,3,139,149,233,248,4,15,182,75, 252,253,248,5,255,15,182,107,252,252,15,183,67,252,254,65,252,255,164,253, 252,238,233,248,138,131,195,4,139,77,232,137,76,36,4,252,233,244,4,248,139, - 255,204,255,248,140,255,248,141,255,248,142,255,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,65,252,255,36,252,238,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,143,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,144,72,184,237,237,102,72,15,110,208,72,184,237,237,102, + 255,204,255,248,140,255,73,199,134,233,0,0,0,0,252,233,244,247,255,248,141, + 255,73,137,174,233,248,1,255,141,68,194,252,248,139,108,36,16,137,149,233, + 137,133,233,137,222,137,252,239,137,92,36,20,232,251,1,21,199,68,36,20,0, + 0,0,0,139,149,233,72,137,193,139,133,233,41,208,72,137,205,15,182,75,252, + 253,193,232,3,131,192,1,252,255,229,248,142,255,248,143,255,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,65,252,255,36,252,238,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,144,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,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,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,146,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,147,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,148,217,192,217,252,252,220,252,233,217,201,217,252,240,217,232,222,193, - 217,252,253,221,217,248,1,195,248,2,221,216,217,252,238,195,255,248,107,255, - 248,149,252,242,15,45,193,252,242,15,42,208,102,15,46,202,15,133,244,254, - 15,138,244,255,248,150,131,252,248,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, - 151,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,147,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,147,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,152,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,146,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,146,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, - 153,137,252,248,83,15,162,137,6,137,94,4,137,78,8,137,86,12,91,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,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,154,232,244,146,255,252,233,244,154,255,232, - 244,107,255,15,182,252,236,15,182,192,139,124,36,16,137,151,233,141,52,194, - 137,194,41,252,234,248,33,137,252,253,137,92,36,20,232,251,1,21,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,22,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, - 22,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, + 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,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,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,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,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,147,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,148,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,149,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,150,252,242,15,45,193,252,242,15,42,208,102,15,46,202, + 15,133,244,254,15,138,244,255,248,151,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,152,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,148,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,148,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, + 153,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,147,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,147,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,154,137,252,248,83,15,162,137,6,137,94,4,137,78, + 8,137,86,12,91,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,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,155,232,244,147,255,252,233,244, + 155,255,232,244,107,255,15,182,252,236,15,182,192,139,124,36,16,137,151,233, + 141,52,194,137,194,41,252,234,248,33,137,252,253,137,92,36,20,232,251,1,22, + 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, - 156,253,131,233,139,108,36,16,131,189,233,0,15,132,244,247,137,149,233,141, - 52,202,137,252,239,232,251,1,23,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,16,137,149,233,139,82,252,248,65,139,52,135,137,252,239,137,92,36,20,232, - 251,1,24,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,16,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,20,15,131,244,251,232,251,1,25,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,26,15, - 183,67,252,254,137,252,239,252,233,244,1,255,72,252,247,208,139,108,36,16, - 65,139,142,233,137,92,36,20,65,59,142,233,137,149,233,15,131,244,249,248, - 2,65,139,52,135,137,252,239,232,251,1,27,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,26,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,155,255,72,252,247,208,139,106,252,248,139,173,233,65,139, - 4,135,252,233,244,156,255,15,182,252,236,15,182,192,129,124,253,252,234,4, - 239,15,133,244,36,139,44,252,234,129,124,253,194,4,239,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,155,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,155,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,156,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,156,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,24,139,124,36,16,137,151,233,72,141,20,36, - 137,252,238,137,252,253,137,92,36,20,232,251,1,28,139,149,233,139,108,36, - 24,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,248,1,141,12, - 202,139,105,252,248,252,246,133,233,235,15,133,244,253,248,2,139,68,36,4, - 255,252,242,68,15,45,252,248,255,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, + 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,23,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,23,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,16,131,189,233,0,15,132,244,247,137,149, + 233,141,52,202,137,252,239,232,251,1,24,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,16,137,149,233,139,82,252,248,65,139,52,135,137,252,239,137,92, + 36,20,232,251,1,25,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,16,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,20,15,131,244,251,232,251,1,26,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,27,15,183,67,252,254,137,252,239,252,233,244,1,255,72,252,247,208,139, + 108,36,16,65,139,142,233,137,92,36,20,65,59,142,233,137,149,233,15,131,244, + 249,248,2,65,139,52,135,137,252,239,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,248,3,137,252,239,232,251,1,27,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,156,255,72,252,247,208,139,106,252,248,139,173, + 233,65,139,4,135,252,233,244,157,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,156,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,156, + 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,157,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,157,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,24,139,124,36,16,137,151,233,72, + 141,20,36,137,252,238,137,252,253,137,92,36,20,232,251,1,29,139,149,233,139, + 108,36,24,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,248,1,141, + 12,202,139,105,252,248,252,246,133,233,235,15,133,244,253,248,2,139,68,36, + 4,255,252,242,68,15,45,252,248,255,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,16,137,151,233,137,252,238,137,194, - 137,252,253,137,92,36,20,232,251,1,29,139,149,233,15,182,75,252,253,252,233, + 137,252,253,137,92,36,20,232,251,1,30,139,149,233,15,182,75,252,253,252,233, 244,1,248,7,128,165,233,235,65,139,134,233,65,137,174,233,255,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, @@ -803,6 +807,7 @@ enum { GLOB_vm_hook, GLOB_cont_hook, GLOB_vm_hotloop, + GLOB_vm_callhook, GLOB_vm_hotcall, GLOB_vm_exit_handler, GLOB_vm_exit_interp, @@ -953,6 +958,7 @@ static const char *const globnames[] = { "vm_hook", "cont_hook", "vm_hotloop", + "vm_callhook", "vm_hotcall", "vm_exit_handler", "vm_exit_interp", @@ -994,6 +1000,7 @@ static const char *const extnames[] = { "lj_tab_len@4", "lj_gc_step@4", "lj_dispatch_ins@8", + "lj_dispatch_call@8", "lj_meta_cat", "lj_gc_barrieruv@8", "lj_func_closeuv@8", @@ -1322,73 +1329,77 @@ static void build_subroutines(BuildCtx *ctx, int cmov, int sse) #endif dasm_put(Dst, 7148); #if LJ_HASJIT - dasm_put(Dst, 7146); + dasm_put(Dst, 7151, DISPATCH_J(L)); +#endif + dasm_put(Dst, 7164); +#if LJ_HASJIT + dasm_put(Dst, 7167, DISPATCH_J(L)); #endif - dasm_put(Dst, 7151); + dasm_put(Dst, 7174, Dt1(->base), Dt1(->top), Dt1(->base), Dt1(->top)); #if LJ_HASJIT dasm_put(Dst, 7146); #endif - dasm_put(Dst, 7154); + dasm_put(Dst, 7241); #if LJ_HASJIT - dasm_put(Dst, 7157, Dt7(->pc), PC2PROTO(k), DISPATCH_GL(jit_L), DISPATCH_GL(vmstate), ~LJ_VMST_INTERP); + dasm_put(Dst, 7244, Dt7(->pc), PC2PROTO(k), DISPATCH_GL(jit_L), DISPATCH_GL(vmstate), ~LJ_VMST_INTERP); #endif - dasm_put(Dst, 7204); + dasm_put(Dst, 7291); if (!sse) { - dasm_put(Dst, 7207); + dasm_put(Dst, 7294); } - dasm_put(Dst, 7252, (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, 7339, (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, 7338); + dasm_put(Dst, 7425); } - dasm_put(Dst, 7383, (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, 7470, (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, 7469); + dasm_put(Dst, 7556); } - dasm_put(Dst, 7508, (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, 7595, (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, 7597, (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, 7684, (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, 7711); + dasm_put(Dst, 7798); } - dasm_put(Dst, 7758); + dasm_put(Dst, 7845); if (!sse) { } else { - dasm_put(Dst, 7835); + dasm_put(Dst, 7922); } - dasm_put(Dst, 7838); - dasm_put(Dst, 7923, (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, 8024, (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, 8198); + dasm_put(Dst, 7925); + dasm_put(Dst, 8010, (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, 8111, (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, 8285); if (sse) { - dasm_put(Dst, 8239); - dasm_put(Dst, 8309); - dasm_put(Dst, 8381); + dasm_put(Dst, 8326); + dasm_put(Dst, 8396); + dasm_put(Dst, 8468); } else { - dasm_put(Dst, 8433); - dasm_put(Dst, 8525); + dasm_put(Dst, 8520); + dasm_put(Dst, 8612); } - dasm_put(Dst, 8571); + dasm_put(Dst, 8658); if (sse) { - dasm_put(Dst, 8577, (unsigned int)(U64x(80000000,00000000)), (unsigned int)((U64x(80000000,00000000))>>32)); - dasm_put(Dst, 8662, (unsigned int)(U64x(7fffffff,ffffffff)), (unsigned int)((U64x(7fffffff,ffffffff))>>32)); + dasm_put(Dst, 8664, (unsigned int)(U64x(80000000,00000000)), (unsigned int)((U64x(80000000,00000000))>>32)); + dasm_put(Dst, 8749, (unsigned int)(U64x(7fffffff,ffffffff)), (unsigned int)((U64x(7fffffff,ffffffff))>>32)); } else { - dasm_put(Dst, 8790); - dasm_put(Dst, 8873); + dasm_put(Dst, 8877); + dasm_put(Dst, 8960); if (cmov) { - dasm_put(Dst, 8928); + dasm_put(Dst, 9015); } else { - dasm_put(Dst, 8947); + dasm_put(Dst, 9034); } - dasm_put(Dst, 8786); + dasm_put(Dst, 8873); } - dasm_put(Dst, 8988); + dasm_put(Dst, 9075); } /* 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, 9010, defop); + dasm_put(Dst, 9097, defop); switch (op) { @@ -1397,600 +1408,600 @@ 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, 9012, LJ_TISNUM, LJ_TISNUM); + dasm_put(Dst, 9099, LJ_TISNUM, LJ_TISNUM); if (sse) { - dasm_put(Dst, 9033); + dasm_put(Dst, 9120); } else { - dasm_put(Dst, 9048); + dasm_put(Dst, 9135); if (cmov) { - dasm_put(Dst, 9058); + dasm_put(Dst, 9145); } else { - dasm_put(Dst, 9064); + dasm_put(Dst, 9151); } } switch (op) { case BC_ISLT: - dasm_put(Dst, 9071); + dasm_put(Dst, 9158); break; case BC_ISGE: - dasm_put(Dst, 8868); + dasm_put(Dst, 8955); break; case BC_ISLE: dasm_put(Dst, 5914); break; case BC_ISGT: - dasm_put(Dst, 9076); + dasm_put(Dst, 9163); break; default: break; /* Shut up GCC. */ } - dasm_put(Dst, 9081, -BCBIAS_J*4); + dasm_put(Dst, 9168, -BCBIAS_J*4); break; case BC_ISEQV: case BC_ISNEV: vk = op == BC_ISEQV; - dasm_put(Dst, 9116, LJ_TISNUM, LJ_TISNUM); + dasm_put(Dst, 9203, LJ_TISNUM, LJ_TISNUM); if (sse) { - dasm_put(Dst, 9142); + dasm_put(Dst, 9229); } else { - dasm_put(Dst, 9154); + dasm_put(Dst, 9241); if (cmov) { - dasm_put(Dst, 9058); + dasm_put(Dst, 9145); } else { - dasm_put(Dst, 9064); + dasm_put(Dst, 9151); } } iseqne_fp: if (vk) { - dasm_put(Dst, 9161); + dasm_put(Dst, 9248); } else { - dasm_put(Dst, 9170); + dasm_put(Dst, 9257); } iseqne_end: if (vk) { - dasm_put(Dst, 9179, -BCBIAS_J*4); + dasm_put(Dst, 9266, -BCBIAS_J*4); } else { - dasm_put(Dst, 9194, -BCBIAS_J*4); + dasm_put(Dst, 9281, -BCBIAS_J*4); } - dasm_put(Dst, 7183); + dasm_put(Dst, 7270); if (op == BC_ISEQV || op == BC_ISNEV) { - dasm_put(Dst, 9209, LJ_TISPRI, LJ_TISTABUD, Dt6(->metatable), Dt6(->nomm), 1<metatable), Dt6(->nomm), 1<>32)); + dasm_put(Dst, 9590, (unsigned int)(U64x(80000000,00000000)), (unsigned int)((U64x(80000000,00000000))>>32)); } else { - dasm_put(Dst, 9528); + dasm_put(Dst, 9615); } - dasm_put(Dst, 7183); + dasm_put(Dst, 7270); break; case BC_LEN: - dasm_put(Dst, 9537, LJ_TSTR); + dasm_put(Dst, 9624, LJ_TSTR); if (sse) { - dasm_put(Dst, 9551, Dt5(->len)); + dasm_put(Dst, 9638, Dt5(->len)); } else { - dasm_put(Dst, 9569, Dt5(->len)); + dasm_put(Dst, 9656, Dt5(->len)); } - dasm_put(Dst, 9578, LJ_TTAB); + dasm_put(Dst, 9665, LJ_TTAB); if (sse) { - dasm_put(Dst, 9620); + dasm_put(Dst, 9707); } else { } - dasm_put(Dst, 9629); + dasm_put(Dst, 9716); break; /* -- Binary ops -------------------------------------------------------- */ case BC_ADDVN: case BC_ADDNV: case BC_ADDVV: - dasm_put(Dst, 9639); + dasm_put(Dst, 9726); vk = ((int)op - BC_ADDVN) / (BC_ADDNV-BC_ADDVN); switch (vk) { case 0: - dasm_put(Dst, 9647, LJ_TISNUM); + dasm_put(Dst, 9734, LJ_TISNUM); if (sse) { - dasm_put(Dst, 9659); + dasm_put(Dst, 9746); } else { - dasm_put(Dst, 9674); + dasm_put(Dst, 9761); } break; case 1: - dasm_put(Dst, 9683, LJ_TISNUM); + dasm_put(Dst, 9770, LJ_TISNUM); if (sse) { - dasm_put(Dst, 9695); + dasm_put(Dst, 9782); } else { - dasm_put(Dst, 9710); + dasm_put(Dst, 9797); } break; default: - dasm_put(Dst, 9719, LJ_TISNUM, LJ_TISNUM); + dasm_put(Dst, 9806, LJ_TISNUM, LJ_TISNUM); if (sse) { - dasm_put(Dst, 9741); + dasm_put(Dst, 9828); } else { - dasm_put(Dst, 9755); + dasm_put(Dst, 9842); } break; } if (sse) { - dasm_put(Dst, 9521); + dasm_put(Dst, 9608); } else { - dasm_put(Dst, 9533); + dasm_put(Dst, 9620); } - dasm_put(Dst, 7183); + dasm_put(Dst, 7270); break; case BC_SUBVN: case BC_SUBNV: case BC_SUBVV: - dasm_put(Dst, 9639); + dasm_put(Dst, 9726); vk = ((int)op - BC_ADDVN) / (BC_ADDNV-BC_ADDVN); switch (vk) { case 0: - dasm_put(Dst, 9647, LJ_TISNUM); + dasm_put(Dst, 9734, LJ_TISNUM); if (sse) { - dasm_put(Dst, 9763); + dasm_put(Dst, 9850); } else { - dasm_put(Dst, 9778); + dasm_put(Dst, 9865); } break; case 1: - dasm_put(Dst, 9683, LJ_TISNUM); + dasm_put(Dst, 9770, LJ_TISNUM); if (sse) { - dasm_put(Dst, 9787); + dasm_put(Dst, 9874); } else { - dasm_put(Dst, 9802); + dasm_put(Dst, 9889); } break; default: - dasm_put(Dst, 9719, LJ_TISNUM, LJ_TISNUM); + dasm_put(Dst, 9806, LJ_TISNUM, LJ_TISNUM); if (sse) { - dasm_put(Dst, 9811); + dasm_put(Dst, 9898); } else { - dasm_put(Dst, 9825); + dasm_put(Dst, 9912); } break; } if (sse) { - dasm_put(Dst, 9521); + dasm_put(Dst, 9608); } else { - dasm_put(Dst, 9533); + dasm_put(Dst, 9620); } - dasm_put(Dst, 7183); + dasm_put(Dst, 7270); break; case BC_MULVN: case BC_MULNV: case BC_MULVV: - dasm_put(Dst, 9639); + dasm_put(Dst, 9726); vk = ((int)op - BC_ADDVN) / (BC_ADDNV-BC_ADDVN); switch (vk) { case 0: - dasm_put(Dst, 9647, LJ_TISNUM); + dasm_put(Dst, 9734, LJ_TISNUM); if (sse) { - dasm_put(Dst, 9833); + dasm_put(Dst, 9920); } else { - dasm_put(Dst, 9848); + dasm_put(Dst, 9935); } break; case 1: - dasm_put(Dst, 9683, LJ_TISNUM); + dasm_put(Dst, 9770, LJ_TISNUM); if (sse) { - dasm_put(Dst, 9857); + dasm_put(Dst, 9944); } else { - dasm_put(Dst, 9872); + dasm_put(Dst, 9959); } break; default: - dasm_put(Dst, 9719, LJ_TISNUM, LJ_TISNUM); + dasm_put(Dst, 9806, LJ_TISNUM, LJ_TISNUM); if (sse) { - dasm_put(Dst, 9881); + dasm_put(Dst, 9968); } else { - dasm_put(Dst, 9895); + dasm_put(Dst, 9982); } break; } if (sse) { - dasm_put(Dst, 9521); + dasm_put(Dst, 9608); } else { - dasm_put(Dst, 9533); + dasm_put(Dst, 9620); } - dasm_put(Dst, 7183); + dasm_put(Dst, 7270); break; case BC_DIVVN: case BC_DIVNV: case BC_DIVVV: - dasm_put(Dst, 9639); + dasm_put(Dst, 9726); vk = ((int)op - BC_ADDVN) / (BC_ADDNV-BC_ADDVN); switch (vk) { case 0: - dasm_put(Dst, 9647, LJ_TISNUM); + dasm_put(Dst, 9734, LJ_TISNUM); if (sse) { - dasm_put(Dst, 9903); + dasm_put(Dst, 9990); } else { - dasm_put(Dst, 9918); + dasm_put(Dst, 10005); } break; case 1: - dasm_put(Dst, 9683, LJ_TISNUM); + dasm_put(Dst, 9770, LJ_TISNUM); if (sse) { - dasm_put(Dst, 9927); + dasm_put(Dst, 10014); } else { - dasm_put(Dst, 9942); + dasm_put(Dst, 10029); } break; default: - dasm_put(Dst, 9719, LJ_TISNUM, LJ_TISNUM); + dasm_put(Dst, 9806, LJ_TISNUM, LJ_TISNUM); if (sse) { - dasm_put(Dst, 9951); + dasm_put(Dst, 10038); } else { - dasm_put(Dst, 9965); + dasm_put(Dst, 10052); } break; } if (sse) { - dasm_put(Dst, 9521); + dasm_put(Dst, 9608); } else { - dasm_put(Dst, 9533); + dasm_put(Dst, 9620); } - dasm_put(Dst, 7183); + dasm_put(Dst, 7270); break; case BC_MODVN: - dasm_put(Dst, 9639); + dasm_put(Dst, 9726); vk = ((int)op - BC_ADDVN) / (BC_ADDNV-BC_ADDVN); switch (vk) { case 0: - dasm_put(Dst, 9647, LJ_TISNUM); + dasm_put(Dst, 9734, LJ_TISNUM); if (sse) { - dasm_put(Dst, 9973); + dasm_put(Dst, 10060); } else { - dasm_put(Dst, 9988); + dasm_put(Dst, 10075); } break; case 1: - dasm_put(Dst, 9683, LJ_TISNUM); + dasm_put(Dst, 9770, LJ_TISNUM); if (sse) { - dasm_put(Dst, 9997); + dasm_put(Dst, 10084); } else { - dasm_put(Dst, 10012); + dasm_put(Dst, 10099); } break; default: - dasm_put(Dst, 9719, LJ_TISNUM, LJ_TISNUM); + dasm_put(Dst, 9806, LJ_TISNUM, LJ_TISNUM); if (sse) { - dasm_put(Dst, 10021); + dasm_put(Dst, 10108); } else { - dasm_put(Dst, 10035); + dasm_put(Dst, 10122); } break; } - dasm_put(Dst, 10043); + dasm_put(Dst, 10130); if (sse) { - dasm_put(Dst, 9521); + dasm_put(Dst, 9608); } else { - dasm_put(Dst, 9533); + dasm_put(Dst, 9620); } - dasm_put(Dst, 7183); + dasm_put(Dst, 7270); break; case BC_MODNV: case BC_MODVV: - dasm_put(Dst, 9639); + dasm_put(Dst, 9726); vk = ((int)op - BC_ADDVN) / (BC_ADDNV-BC_ADDVN); switch (vk) { case 0: - dasm_put(Dst, 9647, LJ_TISNUM); + dasm_put(Dst, 9734, LJ_TISNUM); if (sse) { - dasm_put(Dst, 9973); + dasm_put(Dst, 10060); } else { - dasm_put(Dst, 9988); + dasm_put(Dst, 10075); } break; case 1: - dasm_put(Dst, 9683, LJ_TISNUM); + dasm_put(Dst, 9770, LJ_TISNUM); if (sse) { - dasm_put(Dst, 9997); + dasm_put(Dst, 10084); } else { - dasm_put(Dst, 10012); + dasm_put(Dst, 10099); } break; default: - dasm_put(Dst, 9719, LJ_TISNUM, LJ_TISNUM); + dasm_put(Dst, 9806, LJ_TISNUM, LJ_TISNUM); if (sse) { - dasm_put(Dst, 10021); + dasm_put(Dst, 10108); } else { - dasm_put(Dst, 10035); + dasm_put(Dst, 10122); } break; } - dasm_put(Dst, 10049); + dasm_put(Dst, 10136); break; case BC_POW: - dasm_put(Dst, 9639); + dasm_put(Dst, 9726); vk = ((int)op - BC_ADDVN) / (BC_ADDNV-BC_ADDVN); switch (vk) { case 0: - dasm_put(Dst, 9647, LJ_TISNUM); + dasm_put(Dst, 9734, LJ_TISNUM); if (sse) { - dasm_put(Dst, 9973); + dasm_put(Dst, 10060); } else { - dasm_put(Dst, 9988); + dasm_put(Dst, 10075); } break; case 1: - dasm_put(Dst, 9683, LJ_TISNUM); + dasm_put(Dst, 9770, LJ_TISNUM); if (sse) { - dasm_put(Dst, 9997); + dasm_put(Dst, 10084); } else { - dasm_put(Dst, 10012); + dasm_put(Dst, 10099); } break; default: - dasm_put(Dst, 9719, LJ_TISNUM, LJ_TISNUM); + dasm_put(Dst, 9806, LJ_TISNUM, LJ_TISNUM); if (sse) { - dasm_put(Dst, 10021); + dasm_put(Dst, 10108); } else { - dasm_put(Dst, 10035); + dasm_put(Dst, 10122); } break; } - dasm_put(Dst, 10054); + dasm_put(Dst, 10141); if (sse) { - dasm_put(Dst, 9521); + dasm_put(Dst, 9608); } else { - dasm_put(Dst, 9533); + dasm_put(Dst, 9620); } - dasm_put(Dst, 7183); + dasm_put(Dst, 7270); break; case BC_CAT: - dasm_put(Dst, 10058, Dt1(->base), Dt1(->base)); + dasm_put(Dst, 10145, Dt1(->base), Dt1(->base)); break; /* -- Constant ops ------------------------------------------------------ */ case BC_KSTR: - dasm_put(Dst, 10149, LJ_TSTR); + dasm_put(Dst, 10236, LJ_TSTR); break; case BC_KSHORT: if (sse) { - dasm_put(Dst, 10186); + dasm_put(Dst, 10273); } else { - dasm_put(Dst, 10201); + dasm_put(Dst, 10288); } - dasm_put(Dst, 7183); + dasm_put(Dst, 7270); break; case BC_KNUM: if (sse) { - dasm_put(Dst, 10209); + dasm_put(Dst, 10296); } else { - dasm_put(Dst, 10223); + dasm_put(Dst, 10310); } - dasm_put(Dst, 7183); + dasm_put(Dst, 7270); break; case BC_KPRI: - dasm_put(Dst, 10231); + dasm_put(Dst, 10318); break; case BC_KNIL: - dasm_put(Dst, 10260, LJ_TNIL); + dasm_put(Dst, 10347, LJ_TNIL); break; /* -- Upvalue and function ops ------------------------------------------ */ case BC_UGET: - dasm_put(Dst, 10308, offsetof(GCfuncL, uvptr), DtA(->v)); + dasm_put(Dst, 10395, offsetof(GCfuncL, uvptr), DtA(->v)); break; case BC_USETV: #define TV2MARKOFS \ ((int32_t)offsetof(GCupval, marked)-(int32_t)offsetof(GCupval, tv)) - dasm_put(Dst, 10354, 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, 10450); + dasm_put(Dst, 10441, 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, 10537); break; #undef TV2MARKOFS case BC_USETS: - dasm_put(Dst, 10462, 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, 10549, 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, 10558); + dasm_put(Dst, 10645); if (sse) { - dasm_put(Dst, 10563); + dasm_put(Dst, 10650); } else { - dasm_put(Dst, 9337); + dasm_put(Dst, 9424); } - dasm_put(Dst, 10571, offsetof(GCfuncL, uvptr), DtA(->v)); + dasm_put(Dst, 10658, offsetof(GCfuncL, uvptr), DtA(->v)); if (sse) { - dasm_put(Dst, 10580); + dasm_put(Dst, 10667); } else { - dasm_put(Dst, 10586); + dasm_put(Dst, 10673); } - dasm_put(Dst, 7183); + dasm_put(Dst, 7270); break; case BC_USETP: - dasm_put(Dst, 10589, offsetof(GCfuncL, uvptr), DtA(->v)); + dasm_put(Dst, 10676, offsetof(GCfuncL, uvptr), DtA(->v)); break; case BC_UCLO: - dasm_put(Dst, 10629, -BCBIAS_J*4, Dt1(->openupval), Dt1(->base), Dt1(->base)); + dasm_put(Dst, 10716, -BCBIAS_J*4, Dt1(->openupval), Dt1(->base), Dt1(->base)); break; case BC_FNEW: - dasm_put(Dst, 10685, Dt1(->base), Dt1(->base), LJ_TFUNC); + dasm_put(Dst, 10772, Dt1(->base), Dt1(->base), LJ_TFUNC); break; /* -- Table ops --------------------------------------------------------- */ case BC_TNEW: - dasm_put(Dst, 10752, Dt1(->base), DISPATCH_GL(gc.total), DISPATCH_GL(gc.threshold), Dt1(->base), LJ_TTAB); + dasm_put(Dst, 10839, Dt1(->base), DISPATCH_GL(gc.total), DISPATCH_GL(gc.threshold), Dt1(->base), LJ_TTAB); break; case BC_TDUP: - dasm_put(Dst, 10876, DISPATCH_GL(gc.total), DISPATCH_GL(gc.threshold), Dt1(->base), Dt1(->base), LJ_TTAB); + dasm_put(Dst, 10963, DISPATCH_GL(gc.total), DISPATCH_GL(gc.threshold), Dt1(->base), Dt1(->base), LJ_TTAB); break; case BC_GGET: - dasm_put(Dst, 10975, Dt7(->env)); + dasm_put(Dst, 11062, Dt7(->env)); break; case BC_GSET: - dasm_put(Dst, 10995, Dt7(->env)); + dasm_put(Dst, 11082, Dt7(->env)); break; case BC_TGETV: - dasm_put(Dst, 11015, LJ_TTAB, LJ_TISNUM); + dasm_put(Dst, 11102, LJ_TTAB, LJ_TISNUM); if (sse) { - dasm_put(Dst, 11048); + dasm_put(Dst, 11135); } else { } - dasm_put(Dst, 11069, 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, 11267, 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, 11354, 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, 11559, Dt6(->nomm), 1<marked), cast_byte(~LJ_GC_BLACK), DISPATCH_GL(gc.grayagain), DISPATCH_GL(gc.grayagain), Dt6(->gclist)); + dasm_put(Dst, 11561, Dt6(->asize), Dt6(->array), LJ_TNIL, Dt6(->marked), LJ_GC_BLACK, Dt6(->metatable), Dt6(->metatable)); + dasm_put(Dst, 11646, 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, 11623, 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, 11700, Dt6(->marked), LJ_GC_BLACK, Dt6(->metatable), Dt6(->metatable), Dt6(->nomm), 1<next)); - dasm_put(Dst, 11792, 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, 11710, 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, 11787, Dt6(->marked), LJ_GC_BLACK, Dt6(->metatable), Dt6(->metatable), Dt6(->nomm), 1<next)); + dasm_put(Dst, 11879, 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, 11884, LJ_TTAB, Dt6(->asize), Dt6(->array), LJ_TNIL, Dt6(->marked), LJ_GC_BLACK, Dt6(->metatable)); - dasm_put(Dst, 11984, Dt6(->metatable), Dt6(->nomm), 1<marked), cast_byte(~LJ_GC_BLACK), DISPATCH_GL(gc.grayagain), DISPATCH_GL(gc.grayagain), Dt6(->gclist)); + dasm_put(Dst, 11971, LJ_TTAB, Dt6(->asize), Dt6(->array), LJ_TNIL, Dt6(->marked), LJ_GC_BLACK, Dt6(->metatable)); + dasm_put(Dst, 12071, 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, 12032); + dasm_put(Dst, 12119); if (sse) { - dasm_put(Dst, 10563); + dasm_put(Dst, 10650); } else { } - dasm_put(Dst, 12037, Dt6(->marked), LJ_GC_BLACK); + dasm_put(Dst, 12124, Dt6(->marked), LJ_GC_BLACK); if (sse) { - dasm_put(Dst, 12062); + dasm_put(Dst, 12149); } else { } - dasm_put(Dst, 12070, Dt6(->asize), Dt6(->array), Dt1(->base), Dt1(->base), Dt6(->marked), cast_byte(~LJ_GC_BLACK), DISPATCH_GL(gc.grayagain), DISPATCH_GL(gc.grayagain)); - dasm_put(Dst, 12206, Dt6(->gclist)); + dasm_put(Dst, 12157, Dt6(->asize), Dt6(->array), Dt1(->base), Dt1(->base), Dt6(->marked), cast_byte(~LJ_GC_BLACK), DISPATCH_GL(gc.grayagain), DISPATCH_GL(gc.grayagain)); + dasm_put(Dst, 12293, Dt6(->gclist)); break; /* -- Calls and vararg handling ----------------------------------------- */ case BC_CALL: case BC_CALLM: - dasm_put(Dst, 9643); + dasm_put(Dst, 9730); if (op == BC_CALLM) { - dasm_put(Dst, 12214); + dasm_put(Dst, 12301); } - dasm_put(Dst, 12219, LJ_TFUNC, Dt7(->pc)); + dasm_put(Dst, 12306, LJ_TFUNC, Dt7(->pc)); break; case BC_CALLMT: - dasm_put(Dst, 12214); + dasm_put(Dst, 12301); break; case BC_CALLT: - dasm_put(Dst, 12262, LJ_TFUNC, FRAME_TYPE, Dt7(->ffid), Dt7(->pc)); - dasm_put(Dst, 12386, FRAME_TYPE, Dt7(->pc), PC2PROTO(k)); + dasm_put(Dst, 12349, LJ_TFUNC, FRAME_TYPE, Dt7(->ffid), Dt7(->pc)); + dasm_put(Dst, 12473, FRAME_TYPE, Dt7(->pc), PC2PROTO(k)); break; case BC_ITERC: - dasm_put(Dst, 12447, LJ_TFUNC, 2+1, Dt7(->pc)); + dasm_put(Dst, 12534, LJ_TFUNC, 2+1, Dt7(->pc)); break; case BC_VARG: - dasm_put(Dst, 12529, Dt7(->pc), PC2PROTO(numparams), (8+FRAME_VARG), LJ_TNIL); - dasm_put(Dst, 12683, Dt1(->maxstack), Dt1(->base), Dt1(->top), Dt1(->base), Dt1(->top)); + dasm_put(Dst, 12616, Dt7(->pc), PC2PROTO(numparams), (8+FRAME_VARG), LJ_TNIL); + dasm_put(Dst, 12770, Dt1(->maxstack), Dt1(->base), Dt1(->top), Dt1(->base), Dt1(->top)); break; /* -- Returns ----------------------------------------------------------- */ case BC_RETM: - dasm_put(Dst, 12214); + dasm_put(Dst, 12301); break; case BC_RET: case BC_RET0: case BC_RET1: if (op != BC_RET0) { - dasm_put(Dst, 12788); + dasm_put(Dst, 12875); } - dasm_put(Dst, 12792, FRAME_TYPE); + dasm_put(Dst, 12879, FRAME_TYPE); switch (op) { case BC_RET: - dasm_put(Dst, 12811); + dasm_put(Dst, 12898); break; case BC_RET1: - dasm_put(Dst, 12875); + dasm_put(Dst, 12962); /* fallthrough */ case BC_RET0: - dasm_put(Dst, 12891); + dasm_put(Dst, 12978); default: break; } - dasm_put(Dst, 12902, Dt7(->pc), PC2PROTO(k)); + dasm_put(Dst, 12989, Dt7(->pc), PC2PROTO(k)); if (op == BC_RET) { - dasm_put(Dst, 12950, LJ_TNIL); + dasm_put(Dst, 13037, LJ_TNIL); } else { - dasm_put(Dst, 12961, LJ_TNIL); + dasm_put(Dst, 13048, LJ_TNIL); } - dasm_put(Dst, 12968); + dasm_put(Dst, 13055); if (op != BC_RET0) { - dasm_put(Dst, 12988); + dasm_put(Dst, 13075); } dasm_put(Dst, 4568); break; @@ -2000,7 +2011,7 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop, int cmov, int sse) case BC_FORL: #if LJ_HASJIT - dasm_put(Dst, 12991, HOTCOUNT_PCMASK, GG_DISP2HOT); + dasm_put(Dst, 13078, HOTCOUNT_PCMASK, GG_DISP2HOT); #endif break; @@ -2012,57 +2023,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, 13012); + dasm_put(Dst, 13099); if (!vk) { - dasm_put(Dst, 13016, LJ_TISNUM, LJ_TISNUM); + dasm_put(Dst, 13103, LJ_TISNUM, LJ_TISNUM); } - dasm_put(Dst, 13035); + dasm_put(Dst, 13122); if (!vk) { - dasm_put(Dst, 13039, LJ_TISNUM); + dasm_put(Dst, 13126, LJ_TISNUM); } if (sse) { - dasm_put(Dst, 13048); + dasm_put(Dst, 13135); if (vk) { - dasm_put(Dst, 13060); + dasm_put(Dst, 13147); } else { - dasm_put(Dst, 13079); + dasm_put(Dst, 13166); } - dasm_put(Dst, 13084); + dasm_put(Dst, 13171); } else { - dasm_put(Dst, 13097); + dasm_put(Dst, 13184); if (vk) { - dasm_put(Dst, 13103); + dasm_put(Dst, 13190); } else { - dasm_put(Dst, 13119); + dasm_put(Dst, 13206); } - dasm_put(Dst, 13127); + dasm_put(Dst, 13214); if (cmov) { - dasm_put(Dst, 9058); + dasm_put(Dst, 9145); } else { - dasm_put(Dst, 9064); + dasm_put(Dst, 9151); } if (!cmov) { - dasm_put(Dst, 13132); + dasm_put(Dst, 13219); } } if (op == BC_FORI) { - dasm_put(Dst, 13138, -BCBIAS_J*4); + dasm_put(Dst, 13225, -BCBIAS_J*4); } else if (op == BC_JFORI) { - dasm_put(Dst, 13148, -BCBIAS_J*4, BC_JLOOP); + dasm_put(Dst, 13235, -BCBIAS_J*4, BC_JLOOP); } else if (op == BC_IFORL) { - dasm_put(Dst, 13162, -BCBIAS_J*4); + dasm_put(Dst, 13249, -BCBIAS_J*4); } else { - dasm_put(Dst, 13158, BC_JLOOP); + dasm_put(Dst, 13245, BC_JLOOP); } - dasm_put(Dst, 9093); + dasm_put(Dst, 9180); if (sse) { - dasm_put(Dst, 13172); + dasm_put(Dst, 13259); } break; case BC_ITERL: #if LJ_HASJIT - dasm_put(Dst, 12991, HOTCOUNT_PCMASK, GG_DISP2HOT); + dasm_put(Dst, 13078, HOTCOUNT_PCMASK, GG_DISP2HOT); #endif break; @@ -2071,33 +2082,33 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop, int cmov, int sse) break; #endif case BC_IITERL: - dasm_put(Dst, 13183, LJ_TNIL); + dasm_put(Dst, 13270, LJ_TNIL); if (op == BC_JITERL) { - dasm_put(Dst, 13198, BC_JLOOP); + dasm_put(Dst, 13285, BC_JLOOP); } else { - dasm_put(Dst, 13212, -BCBIAS_J*4); + dasm_put(Dst, 13299, -BCBIAS_J*4); } - dasm_put(Dst, 9397); + dasm_put(Dst, 9484); break; case BC_LOOP: #if LJ_HASJIT - dasm_put(Dst, 12991, HOTCOUNT_PCMASK, GG_DISP2HOT); + dasm_put(Dst, 13078, HOTCOUNT_PCMASK, GG_DISP2HOT); #endif break; case BC_ILOOP: - dasm_put(Dst, 7183); + dasm_put(Dst, 7270); break; case BC_JLOOP: #if LJ_HASJIT - dasm_put(Dst, 13228, DISPATCH_J(trace), DtD(->mcode), DISPATCH_GL(jit_base), DISPATCH_GL(jit_L)); + dasm_put(Dst, 13315, DISPATCH_J(trace), DtD(->mcode), DISPATCH_GL(jit_base), DISPATCH_GL(jit_L)); #endif break; case BC_JMP: - dasm_put(Dst, 13255, -BCBIAS_J*4); + dasm_put(Dst, 13342, -BCBIAS_J*4); break; /* -- Function headers -------------------------------------------------- */ @@ -2120,13 +2131,13 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop, int cmov, int sse) break; #endif case BC_IFUNCF: - dasm_put(Dst, 13281, -4+PC2PROTO(k), Dt1(->maxstack), -4+PC2PROTO(numparams)); + dasm_put(Dst, 13368, -4+PC2PROTO(k), Dt1(->maxstack), -4+PC2PROTO(numparams)); if (op == BC_JFUNCF) { - dasm_put(Dst, 13312, BC_JLOOP); + dasm_put(Dst, 13399, BC_JLOOP); } else { - dasm_put(Dst, 7183); + dasm_put(Dst, 7270); } - dasm_put(Dst, 13321, LJ_TNIL); + dasm_put(Dst, 13408, LJ_TNIL); break; case BC_JFUNCV: @@ -2137,30 +2148,30 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop, int cmov, int sse) break; /* NYI: compiled vararg functions. */ case BC_IFUNCV: - dasm_put(Dst, 13343, FRAME_VARG, Dt1(->maxstack), -4+PC2PROTO(numparams), LJ_TNIL); + dasm_put(Dst, 13430, FRAME_VARG, Dt1(->maxstack), -4+PC2PROTO(numparams), LJ_TNIL); if (op == BC_JFUNCV) { - dasm_put(Dst, 13312, BC_JLOOP); + dasm_put(Dst, 13399, BC_JLOOP); } else { - dasm_put(Dst, 13440, -4+PC2PROTO(k)); + dasm_put(Dst, 13527, -4+PC2PROTO(k)); } - dasm_put(Dst, 13465, LJ_TNIL); + dasm_put(Dst, 13552, LJ_TNIL); break; case BC_FUNCC: case BC_FUNCCW: - dasm_put(Dst, 13487, Dt8(->f), Dt1(->base), 8*LUA_MINSTACK, Dt1(->maxstack), Dt1(->top)); + dasm_put(Dst, 13574, Dt8(->f), Dt1(->base), 8*LUA_MINSTACK, Dt1(->maxstack), Dt1(->top)); if (op == BC_FUNCC) { - dasm_put(Dst, 13517); + dasm_put(Dst, 13604); } else { - dasm_put(Dst, 13521); + dasm_put(Dst, 13608); } - dasm_put(Dst, 13529, DISPATCH_GL(vmstate), ~LJ_VMST_C); + dasm_put(Dst, 13616, DISPATCH_GL(vmstate), ~LJ_VMST_C); if (op == BC_FUNCC) { - dasm_put(Dst, 13539); + dasm_put(Dst, 13626); } else { - dasm_put(Dst, 13544, DISPATCH_GL(wrapf)); + dasm_put(Dst, 13631, DISPATCH_GL(wrapf)); } - dasm_put(Dst, 13550, DISPATCH_GL(vmstate), ~LJ_VMST_INTERP, Dt1(->base), Dt1(->top)); + dasm_put(Dst, 13637, DISPATCH_GL(vmstate), ~LJ_VMST_INTERP, Dt1(->base), Dt1(->top)); break; /* ---------------------------------------------------------------------- */ @@ -2188,7 +2199,7 @@ static int build_backend(BuildCtx *ctx) build_subroutines(ctx, cmov, sse); - dasm_put(Dst, 13576); + dasm_put(Dst, 13663); 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 8784aecf..772660d9 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[13390] = { +static const unsigned char build_actionlist[13478] = { 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, @@ -359,62 +359,66 @@ static const unsigned char build_actionlist[13390] = { 137,252,233,232,251,1,20,248,3,139,149,233,248,4,15,182,78,252,253,248,5, 255,15,182,110,252,252,15,183,70,252,254,252,255,164,253,252,235,233,248, 138,131,198,4,139,77,232,137,76,36,84,252,233,244,4,248,139,255,204,255,248, - 140,255,248,141,255,248,142,255,139,122,252,248,139,191,233,139,191,233,199, - 131,233,0,0,0,0,199,131,233,237,139,6,15,182,204,15,182,232,131,198,4,193, - 232,16,252,255,36,252,235,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,143,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, + 140,255,72,199,131,233,0,0,0,0,252,233,244,247,255,248,141,255,72,137,171, + 233,248,1,255,141,68,194,252,248,139,108,36,96,137,149,233,137,133,233,137, + 252,242,137,252,233,137,116,36,100,232,251,1,21,199,68,36,100,0,0,0,0,139, + 149,233,72,137,193,139,133,233,41,208,72,137,205,15,182,78,252,253,193,232, + 3,131,192,1,252,255,229,248,142,255,248,143,255,139,122,252,248,139,191,233, + 139,191,233,199,131,233,0,0,0,0,199,131,233,237,139,6,15,182,204,15,182,232, + 131,198,4,193,232,16,252,255,36,252,235,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,144,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,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,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,146,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,147,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,148,217,192,217,252,252,220,252,233,217, - 201,217,252,240,217,232,222,193,217,252,253,221,217,248,1,195,248,2,221,216, - 217,252,238,195,255,248,107,255,248,149,252,242,15,45,193,252,242,15,42,208, - 102,15,46,202,15,133,244,254,15,138,244,255,248,150,131,252,248,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, - 151,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,147,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, + 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,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,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,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,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, + 147,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,148,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,149,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,150,252,242,15,45,193,252,242, + 15,42,208,102,15,46,202,15,133,244,254,15,138,244,255,248,151,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,152,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,148,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, @@ -422,14 +426,14 @@ static const unsigned char build_actionlist[13390] = { 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, - 147,131,252,250,7,15,132,244,247,15,135,244,248,217,252,237,217,201,217,252, + 148,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,152,255,65,131,252,248, + 195,248,1,217,252,242,221,216,195,255,248,9,204,248,153,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,146, + 193,195,248,1,252,242,15,94,193,195,248,2,65,131,252,248,5,15,130,244,147, 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, @@ -439,14 +443,14 @@ static const unsigned char build_actionlist[13390] = { 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,146, + 248,222,201,195,248,1,222,252,249,195,248,2,131,252,248,5,15,130,244,147, 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,153,137,200,86,72,137,214, + 15,133,244,248,217,201,248,2,221,216,195,255,248,154,137,200,86,72,137,214, 83,15,162,137,6,137,94,4,137,78,8,137,86,12,91,94,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, @@ -495,10 +499,10 @@ static const unsigned char build_actionlist[13390] = { 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,154, - 232,244,146,255,252,233,244,154,255,232,244,107,255,15,182,252,236,15,182, + 16,4,252,234,252,242,15,16,12,194,255,221,4,252,234,221,4,194,255,248,155, + 232,244,147,255,252,233,244,155,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,21,139,149,233,133,192,15,133,244,42,15,182,110, + 137,116,36,100,232,251,1,22,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, @@ -515,33 +519,33 @@ static const unsigned char build_actionlist[13390] = { 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,22,137,252,234,252,233,244,1,255,72,252,247,208,139,106,252, + 255,232,251,1,23,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,22,137,252,234,252, + 233,0,15,132,244,1,137,213,137,194,141,139,233,232,251,1,23,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,23,139,149,233,248,1,139,6,15,182,204,15,182,232,131,198,4,193,232, + 251,1,24,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,24,139,149,233, + 66,252,248,139,20,135,137,252,233,137,116,36,100,232,251,1,25,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,25,139,149,233,15,182,78,252,253,137,4,202,199,68,202,4,237,139, + 232,251,1,26,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,26,15,183,70,252,254,137,252,233,252, + 1,8,0,0,252,233,244,2,248,5,232,251,1,27,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, - 27,139,149,233,15,182,78,252,253,137,4,202,199,68,202,4,237,139,6,15,182, + 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,248,3,137,252,233, - 232,251,1,26,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,155,255,72,252,247, - 208,139,106,252,248,139,173,233,139,4,135,252,233,244,156,255,15,182,252, + 232,251,1,27,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,156,255,72,252,247, + 208,139,106,252,248,139,173,233,139,4,135,252,233,244,157,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, @@ -549,9 +553,9 @@ static const unsigned char build_actionlist[13390] = { 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,155,255,15,182,252,236,15,182, + 194,4,239,15,133,244,36,139,4,194,252,233,244,156,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,155,139,141,233,35,136,233,105,201,239,3,141,233,248,1,129, + 44,252,234,248,156,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, @@ -569,10 +573,10 @@ static const unsigned char build_actionlist[13390] = { 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,156,248,7,128,165,233,235,139,139, + 239,15,133,244,39,139,4,194,252,233,244,157,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,156,139,141,233,35,136,233,105,201,239,198,133, + 244,37,139,44,252,234,248,157,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, @@ -581,7 +585,7 @@ static const unsigned char build_actionlist[13390] = { 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,28,139,149,233, + 76,141,68,36,80,137,252,234,137,205,137,116,36,100,232,251,1,29,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, @@ -597,7 +601,7 @@ static const unsigned char build_actionlist[13390] = { 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,29,139,149,233,15,182,78,252,253,252,233,244,1,248,7,128,165,233,235,139, + 1,30,139,149,233,15,182,78,252,253,252,233,244,1,248,7,128,165,233,235,139, 131,233,137,171,233,255,137,133,233,252,233,244,2,255,3,68,36,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, @@ -796,6 +800,7 @@ enum { GLOB_vm_hook, GLOB_cont_hook, GLOB_vm_hotloop, + GLOB_vm_callhook, GLOB_vm_hotcall, GLOB_vm_exit_handler, GLOB_vm_exit_interp, @@ -946,6 +951,7 @@ static const char *const globnames[] = { "vm_hook", "cont_hook", "vm_hotloop", + "vm_callhook", "vm_hotcall", "vm_exit_handler", "vm_exit_interp", @@ -987,6 +993,7 @@ static const char *const extnames[] = { "lj_tab_len@4", "lj_gc_step@4", "lj_dispatch_ins@8", + "lj_dispatch_call@8", "lj_meta_cat", "lj_gc_barrieruv@8", "lj_func_closeuv@8", @@ -1315,73 +1322,77 @@ static void build_subroutines(BuildCtx *ctx, int cmov, int sse) #endif dasm_put(Dst, 7103); #if LJ_HASJIT - dasm_put(Dst, 7101); + dasm_put(Dst, 7106, DISPATCH_J(L)); +#endif + dasm_put(Dst, 7119); +#if LJ_HASJIT + dasm_put(Dst, 7122, DISPATCH_J(L)); #endif - dasm_put(Dst, 7106); + dasm_put(Dst, 7129, Dt1(->base), Dt1(->top), Dt1(->base), Dt1(->top)); #if LJ_HASJIT dasm_put(Dst, 7101); #endif - dasm_put(Dst, 7109); + dasm_put(Dst, 7197); #if LJ_HASJIT - dasm_put(Dst, 7112, Dt7(->pc), PC2PROTO(k), DISPATCH_GL(jit_L), DISPATCH_GL(vmstate), ~LJ_VMST_INTERP); + dasm_put(Dst, 7200, Dt7(->pc), PC2PROTO(k), DISPATCH_GL(jit_L), DISPATCH_GL(vmstate), ~LJ_VMST_INTERP); #endif - dasm_put(Dst, 7153); + dasm_put(Dst, 7241); if (!sse) { - dasm_put(Dst, 7156); + dasm_put(Dst, 7244); } - dasm_put(Dst, 7201, (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, 7289, (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, 7287); + dasm_put(Dst, 7375); } - dasm_put(Dst, 7332, (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, 7420, (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, 7418); + dasm_put(Dst, 7506); } - dasm_put(Dst, 7457, (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, 7545, (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, 7546, (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, 7634, (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, 7660); + dasm_put(Dst, 7748); } - dasm_put(Dst, 7707); + dasm_put(Dst, 7795); if (!sse) { } else { - dasm_put(Dst, 7781); + dasm_put(Dst, 7869); } - dasm_put(Dst, 7784); - dasm_put(Dst, 7869, (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, 7970, (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, 8138); + dasm_put(Dst, 7872); + dasm_put(Dst, 7957, (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, 8058, (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, 8226); if (sse) { - dasm_put(Dst, 8179); - dasm_put(Dst, 8249); - dasm_put(Dst, 8322); + dasm_put(Dst, 8267); + dasm_put(Dst, 8337); + dasm_put(Dst, 8410); } else { - dasm_put(Dst, 8372); - dasm_put(Dst, 8464); + dasm_put(Dst, 8460); + dasm_put(Dst, 8552); } - dasm_put(Dst, 8510); + dasm_put(Dst, 8598); if (sse) { - dasm_put(Dst, 8516, (unsigned int)(U64x(80000000,00000000)), (unsigned int)((U64x(80000000,00000000))>>32)); - dasm_put(Dst, 8605, (unsigned int)(U64x(7fffffff,ffffffff)), (unsigned int)((U64x(7fffffff,ffffffff))>>32)); + dasm_put(Dst, 8604, (unsigned int)(U64x(80000000,00000000)), (unsigned int)((U64x(80000000,00000000))>>32)); + dasm_put(Dst, 8693, (unsigned int)(U64x(7fffffff,ffffffff)), (unsigned int)((U64x(7fffffff,ffffffff))>>32)); } else { - dasm_put(Dst, 8729); - dasm_put(Dst, 8812); + dasm_put(Dst, 8817); + dasm_put(Dst, 8900); if (cmov) { - dasm_put(Dst, 8867); + dasm_put(Dst, 8955); } else { - dasm_put(Dst, 8886); + dasm_put(Dst, 8974); } - dasm_put(Dst, 8725); + dasm_put(Dst, 8813); } - dasm_put(Dst, 8927); + dasm_put(Dst, 9015); } /* 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, 8953, defop); + dasm_put(Dst, 9041, defop); switch (op) { @@ -1390,600 +1401,600 @@ 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, 8955, LJ_TISNUM, LJ_TISNUM); + dasm_put(Dst, 9043, LJ_TISNUM, LJ_TISNUM); if (sse) { - dasm_put(Dst, 8976); + dasm_put(Dst, 9064); } else { - dasm_put(Dst, 8991); + dasm_put(Dst, 9079); if (cmov) { - dasm_put(Dst, 9001); + dasm_put(Dst, 9089); } else { - dasm_put(Dst, 9007); + dasm_put(Dst, 9095); } } switch (op) { case BC_ISLT: - dasm_put(Dst, 9014); + dasm_put(Dst, 9102); break; case BC_ISGE: - dasm_put(Dst, 8807); + dasm_put(Dst, 8895); break; case BC_ISLE: dasm_put(Dst, 5872); break; case BC_ISGT: - dasm_put(Dst, 9019); + dasm_put(Dst, 9107); break; default: break; /* Shut up GCC. */ } - dasm_put(Dst, 9024, -BCBIAS_J*4); + dasm_put(Dst, 9112, -BCBIAS_J*4); break; case BC_ISEQV: case BC_ISNEV: vk = op == BC_ISEQV; - dasm_put(Dst, 9058, LJ_TISNUM, LJ_TISNUM); + dasm_put(Dst, 9146, LJ_TISNUM, LJ_TISNUM); if (sse) { - dasm_put(Dst, 9084); + dasm_put(Dst, 9172); } else { - dasm_put(Dst, 9096); + dasm_put(Dst, 9184); if (cmov) { - dasm_put(Dst, 9001); + dasm_put(Dst, 9089); } else { - dasm_put(Dst, 9007); + dasm_put(Dst, 9095); } } iseqne_fp: if (vk) { - dasm_put(Dst, 9103); + dasm_put(Dst, 9191); } else { - dasm_put(Dst, 9112); + dasm_put(Dst, 9200); } iseqne_end: if (vk) { - dasm_put(Dst, 9121, -BCBIAS_J*4); + dasm_put(Dst, 9209, -BCBIAS_J*4); } else { - dasm_put(Dst, 9136, -BCBIAS_J*4); + dasm_put(Dst, 9224, -BCBIAS_J*4); } - dasm_put(Dst, 7133); + dasm_put(Dst, 7221); if (op == BC_ISEQV || op == BC_ISNEV) { - dasm_put(Dst, 9151, LJ_TISPRI, LJ_TISTABUD, Dt6(->metatable), Dt6(->nomm), 1<metatable), Dt6(->nomm), 1<>32)); + dasm_put(Dst, 9527, (unsigned int)(U64x(80000000,00000000)), (unsigned int)((U64x(80000000,00000000))>>32)); } else { - dasm_put(Dst, 9464); + dasm_put(Dst, 9552); } - dasm_put(Dst, 7133); + dasm_put(Dst, 7221); break; case BC_LEN: - dasm_put(Dst, 9473, LJ_TSTR); + dasm_put(Dst, 9561, LJ_TSTR); if (sse) { - dasm_put(Dst, 9487, Dt5(->len)); + dasm_put(Dst, 9575, Dt5(->len)); } else { - dasm_put(Dst, 9505, Dt5(->len)); + dasm_put(Dst, 9593, Dt5(->len)); } - dasm_put(Dst, 9514, LJ_TTAB); + dasm_put(Dst, 9602, LJ_TTAB); if (sse) { - dasm_put(Dst, 9555); + dasm_put(Dst, 9643); } else { } - dasm_put(Dst, 9564); + dasm_put(Dst, 9652); break; /* -- Binary ops -------------------------------------------------------- */ case BC_ADDVN: case BC_ADDNV: case BC_ADDVV: - dasm_put(Dst, 9574); + dasm_put(Dst, 9662); vk = ((int)op - BC_ADDVN) / (BC_ADDNV-BC_ADDVN); switch (vk) { case 0: - dasm_put(Dst, 9582, LJ_TISNUM); + dasm_put(Dst, 9670, LJ_TISNUM); if (sse) { - dasm_put(Dst, 9594); + dasm_put(Dst, 9682); } else { - dasm_put(Dst, 9608); + dasm_put(Dst, 9696); } break; case 1: - dasm_put(Dst, 9616, LJ_TISNUM); + dasm_put(Dst, 9704, LJ_TISNUM); if (sse) { - dasm_put(Dst, 9628); + dasm_put(Dst, 9716); } else { - dasm_put(Dst, 9642); + dasm_put(Dst, 9730); } break; default: - dasm_put(Dst, 9650, LJ_TISNUM, LJ_TISNUM); + dasm_put(Dst, 9738, LJ_TISNUM, LJ_TISNUM); if (sse) { - dasm_put(Dst, 9672); + dasm_put(Dst, 9760); } else { - dasm_put(Dst, 9686); + dasm_put(Dst, 9774); } break; } if (sse) { - dasm_put(Dst, 9457); + dasm_put(Dst, 9545); } else { - dasm_put(Dst, 9469); + dasm_put(Dst, 9557); } - dasm_put(Dst, 7133); + dasm_put(Dst, 7221); break; case BC_SUBVN: case BC_SUBNV: case BC_SUBVV: - dasm_put(Dst, 9574); + dasm_put(Dst, 9662); vk = ((int)op - BC_ADDVN) / (BC_ADDNV-BC_ADDVN); switch (vk) { case 0: - dasm_put(Dst, 9582, LJ_TISNUM); + dasm_put(Dst, 9670, LJ_TISNUM); if (sse) { - dasm_put(Dst, 9694); + dasm_put(Dst, 9782); } else { - dasm_put(Dst, 9708); + dasm_put(Dst, 9796); } break; case 1: - dasm_put(Dst, 9616, LJ_TISNUM); + dasm_put(Dst, 9704, LJ_TISNUM); if (sse) { - dasm_put(Dst, 9716); + dasm_put(Dst, 9804); } else { - dasm_put(Dst, 9730); + dasm_put(Dst, 9818); } break; default: - dasm_put(Dst, 9650, LJ_TISNUM, LJ_TISNUM); + dasm_put(Dst, 9738, LJ_TISNUM, LJ_TISNUM); if (sse) { - dasm_put(Dst, 9738); + dasm_put(Dst, 9826); } else { - dasm_put(Dst, 9752); + dasm_put(Dst, 9840); } break; } if (sse) { - dasm_put(Dst, 9457); + dasm_put(Dst, 9545); } else { - dasm_put(Dst, 9469); + dasm_put(Dst, 9557); } - dasm_put(Dst, 7133); + dasm_put(Dst, 7221); break; case BC_MULVN: case BC_MULNV: case BC_MULVV: - dasm_put(Dst, 9574); + dasm_put(Dst, 9662); vk = ((int)op - BC_ADDVN) / (BC_ADDNV-BC_ADDVN); switch (vk) { case 0: - dasm_put(Dst, 9582, LJ_TISNUM); + dasm_put(Dst, 9670, LJ_TISNUM); if (sse) { - dasm_put(Dst, 9760); + dasm_put(Dst, 9848); } else { - dasm_put(Dst, 9774); + dasm_put(Dst, 9862); } break; case 1: - dasm_put(Dst, 9616, LJ_TISNUM); + dasm_put(Dst, 9704, LJ_TISNUM); if (sse) { - dasm_put(Dst, 9782); + dasm_put(Dst, 9870); } else { - dasm_put(Dst, 9796); + dasm_put(Dst, 9884); } break; default: - dasm_put(Dst, 9650, LJ_TISNUM, LJ_TISNUM); + dasm_put(Dst, 9738, LJ_TISNUM, LJ_TISNUM); if (sse) { - dasm_put(Dst, 9804); + dasm_put(Dst, 9892); } else { - dasm_put(Dst, 9818); + dasm_put(Dst, 9906); } break; } if (sse) { - dasm_put(Dst, 9457); + dasm_put(Dst, 9545); } else { - dasm_put(Dst, 9469); + dasm_put(Dst, 9557); } - dasm_put(Dst, 7133); + dasm_put(Dst, 7221); break; case BC_DIVVN: case BC_DIVNV: case BC_DIVVV: - dasm_put(Dst, 9574); + dasm_put(Dst, 9662); vk = ((int)op - BC_ADDVN) / (BC_ADDNV-BC_ADDVN); switch (vk) { case 0: - dasm_put(Dst, 9582, LJ_TISNUM); + dasm_put(Dst, 9670, LJ_TISNUM); if (sse) { - dasm_put(Dst, 9826); + dasm_put(Dst, 9914); } else { - dasm_put(Dst, 9840); + dasm_put(Dst, 9928); } break; case 1: - dasm_put(Dst, 9616, LJ_TISNUM); + dasm_put(Dst, 9704, LJ_TISNUM); if (sse) { - dasm_put(Dst, 9848); + dasm_put(Dst, 9936); } else { - dasm_put(Dst, 9862); + dasm_put(Dst, 9950); } break; default: - dasm_put(Dst, 9650, LJ_TISNUM, LJ_TISNUM); + dasm_put(Dst, 9738, LJ_TISNUM, LJ_TISNUM); if (sse) { - dasm_put(Dst, 9870); + dasm_put(Dst, 9958); } else { - dasm_put(Dst, 9884); + dasm_put(Dst, 9972); } break; } if (sse) { - dasm_put(Dst, 9457); + dasm_put(Dst, 9545); } else { - dasm_put(Dst, 9469); + dasm_put(Dst, 9557); } - dasm_put(Dst, 7133); + dasm_put(Dst, 7221); break; case BC_MODVN: - dasm_put(Dst, 9574); + dasm_put(Dst, 9662); vk = ((int)op - BC_ADDVN) / (BC_ADDNV-BC_ADDVN); switch (vk) { case 0: - dasm_put(Dst, 9582, LJ_TISNUM); + dasm_put(Dst, 9670, LJ_TISNUM); if (sse) { - dasm_put(Dst, 9892); + dasm_put(Dst, 9980); } else { - dasm_put(Dst, 9906); + dasm_put(Dst, 9994); } break; case 1: - dasm_put(Dst, 9616, LJ_TISNUM); + dasm_put(Dst, 9704, LJ_TISNUM); if (sse) { - dasm_put(Dst, 9914); + dasm_put(Dst, 10002); } else { - dasm_put(Dst, 9928); + dasm_put(Dst, 10016); } break; default: - dasm_put(Dst, 9650, LJ_TISNUM, LJ_TISNUM); + dasm_put(Dst, 9738, LJ_TISNUM, LJ_TISNUM); if (sse) { - dasm_put(Dst, 9936); + dasm_put(Dst, 10024); } else { - dasm_put(Dst, 9950); + dasm_put(Dst, 10038); } break; } - dasm_put(Dst, 9958); + dasm_put(Dst, 10046); if (sse) { - dasm_put(Dst, 9457); + dasm_put(Dst, 9545); } else { - dasm_put(Dst, 9469); + dasm_put(Dst, 9557); } - dasm_put(Dst, 7133); + dasm_put(Dst, 7221); break; case BC_MODNV: case BC_MODVV: - dasm_put(Dst, 9574); + dasm_put(Dst, 9662); vk = ((int)op - BC_ADDVN) / (BC_ADDNV-BC_ADDVN); switch (vk) { case 0: - dasm_put(Dst, 9582, LJ_TISNUM); + dasm_put(Dst, 9670, LJ_TISNUM); if (sse) { - dasm_put(Dst, 9892); + dasm_put(Dst, 9980); } else { - dasm_put(Dst, 9906); + dasm_put(Dst, 9994); } break; case 1: - dasm_put(Dst, 9616, LJ_TISNUM); + dasm_put(Dst, 9704, LJ_TISNUM); if (sse) { - dasm_put(Dst, 9914); + dasm_put(Dst, 10002); } else { - dasm_put(Dst, 9928); + dasm_put(Dst, 10016); } break; default: - dasm_put(Dst, 9650, LJ_TISNUM, LJ_TISNUM); + dasm_put(Dst, 9738, LJ_TISNUM, LJ_TISNUM); if (sse) { - dasm_put(Dst, 9936); + dasm_put(Dst, 10024); } else { - dasm_put(Dst, 9950); + dasm_put(Dst, 10038); } break; } - dasm_put(Dst, 9964); + dasm_put(Dst, 10052); break; case BC_POW: - dasm_put(Dst, 9574); + dasm_put(Dst, 9662); vk = ((int)op - BC_ADDVN) / (BC_ADDNV-BC_ADDVN); switch (vk) { case 0: - dasm_put(Dst, 9582, LJ_TISNUM); + dasm_put(Dst, 9670, LJ_TISNUM); if (sse) { - dasm_put(Dst, 9892); + dasm_put(Dst, 9980); } else { - dasm_put(Dst, 9906); + dasm_put(Dst, 9994); } break; case 1: - dasm_put(Dst, 9616, LJ_TISNUM); + dasm_put(Dst, 9704, LJ_TISNUM); if (sse) { - dasm_put(Dst, 9914); + dasm_put(Dst, 10002); } else { - dasm_put(Dst, 9928); + dasm_put(Dst, 10016); } break; default: - dasm_put(Dst, 9650, LJ_TISNUM, LJ_TISNUM); + dasm_put(Dst, 9738, LJ_TISNUM, LJ_TISNUM); if (sse) { - dasm_put(Dst, 9936); + dasm_put(Dst, 10024); } else { - dasm_put(Dst, 9950); + dasm_put(Dst, 10038); } break; } - dasm_put(Dst, 9969); + dasm_put(Dst, 10057); if (sse) { - dasm_put(Dst, 9457); + dasm_put(Dst, 9545); } else { - dasm_put(Dst, 9469); + dasm_put(Dst, 9557); } - dasm_put(Dst, 7133); + dasm_put(Dst, 7221); break; case BC_CAT: - dasm_put(Dst, 9973, Dt1(->base), Dt1(->base)); + dasm_put(Dst, 10061, Dt1(->base), Dt1(->base)); break; /* -- Constant ops ------------------------------------------------------ */ case BC_KSTR: - dasm_put(Dst, 10063, LJ_TSTR); + dasm_put(Dst, 10151, LJ_TSTR); break; case BC_KSHORT: if (sse) { - dasm_put(Dst, 10098); + dasm_put(Dst, 10186); } else { - dasm_put(Dst, 10113); + dasm_put(Dst, 10201); } - dasm_put(Dst, 7133); + dasm_put(Dst, 7221); break; case BC_KNUM: if (sse) { - dasm_put(Dst, 10121); + dasm_put(Dst, 10209); } else { - dasm_put(Dst, 10134); + dasm_put(Dst, 10222); } - dasm_put(Dst, 7133); + dasm_put(Dst, 7221); break; case BC_KPRI: - dasm_put(Dst, 10141); + dasm_put(Dst, 10229); break; case BC_KNIL: - dasm_put(Dst, 10169, LJ_TNIL); + dasm_put(Dst, 10257, LJ_TNIL); break; /* -- Upvalue and function ops ------------------------------------------ */ case BC_UGET: - dasm_put(Dst, 10216, offsetof(GCfuncL, uvptr), DtA(->v)); + dasm_put(Dst, 10304, offsetof(GCfuncL, uvptr), DtA(->v)); break; case BC_USETV: #define TV2MARKOFS \ ((int32_t)offsetof(GCupval, marked)-(int32_t)offsetof(GCupval, tv)) - dasm_put(Dst, 10261, 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, 10352); + dasm_put(Dst, 10349, 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, 10440); break; #undef TV2MARKOFS case BC_USETS: - dasm_put(Dst, 10364, 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, 10452, 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, 10457); + dasm_put(Dst, 10545); if (sse) { - dasm_put(Dst, 10462); + dasm_put(Dst, 10550); } else { - dasm_put(Dst, 9277); + dasm_put(Dst, 9365); } - dasm_put(Dst, 10469, offsetof(GCfuncL, uvptr), DtA(->v)); + dasm_put(Dst, 10557, offsetof(GCfuncL, uvptr), DtA(->v)); if (sse) { - dasm_put(Dst, 10478); + dasm_put(Dst, 10566); } else { - dasm_put(Dst, 10484); + dasm_put(Dst, 10572); } - dasm_put(Dst, 7133); + dasm_put(Dst, 7221); break; case BC_USETP: - dasm_put(Dst, 10487, offsetof(GCfuncL, uvptr), DtA(->v)); + dasm_put(Dst, 10575, offsetof(GCfuncL, uvptr), DtA(->v)); break; case BC_UCLO: - dasm_put(Dst, 10526, -BCBIAS_J*4, Dt1(->openupval), Dt1(->base), Dt1(->base)); + dasm_put(Dst, 10614, -BCBIAS_J*4, Dt1(->openupval), Dt1(->base), Dt1(->base)); break; case BC_FNEW: - dasm_put(Dst, 10581, Dt1(->base), Dt1(->base), LJ_TFUNC); + dasm_put(Dst, 10669, Dt1(->base), Dt1(->base), LJ_TFUNC); break; /* -- Table ops --------------------------------------------------------- */ case BC_TNEW: - dasm_put(Dst, 10647, Dt1(->base), DISPATCH_GL(gc.total), DISPATCH_GL(gc.threshold), Dt1(->base), LJ_TTAB); + dasm_put(Dst, 10735, Dt1(->base), DISPATCH_GL(gc.total), DISPATCH_GL(gc.threshold), Dt1(->base), LJ_TTAB); break; case BC_TDUP: - dasm_put(Dst, 10768, DISPATCH_GL(gc.total), DISPATCH_GL(gc.threshold), Dt1(->base), Dt1(->base), LJ_TTAB); + dasm_put(Dst, 10856, DISPATCH_GL(gc.total), DISPATCH_GL(gc.threshold), Dt1(->base), Dt1(->base), LJ_TTAB); break; case BC_GGET: - dasm_put(Dst, 10863, Dt7(->env)); + dasm_put(Dst, 10951, Dt7(->env)); break; case BC_GSET: - dasm_put(Dst, 10882, Dt7(->env)); + dasm_put(Dst, 10970, Dt7(->env)); break; case BC_TGETV: - dasm_put(Dst, 10901, LJ_TTAB, LJ_TISNUM); + dasm_put(Dst, 10989, LJ_TTAB, LJ_TISNUM); if (sse) { - dasm_put(Dst, 10934); + dasm_put(Dst, 11022); } else { } - dasm_put(Dst, 10955, 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, 11151, 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, 11239, 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, 11440, Dt6(->nomm), 1<marked), cast_byte(~LJ_GC_BLACK), DISPATCH_GL(gc.grayagain), DISPATCH_GL(gc.grayagain), Dt6(->gclist)); + dasm_put(Dst, 11444, Dt6(->asize), Dt6(->array), LJ_TNIL, Dt6(->marked), LJ_GC_BLACK, Dt6(->metatable), Dt6(->metatable)); + dasm_put(Dst, 11528, 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, 11502, 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, 11578, Dt6(->marked), LJ_GC_BLACK, Dt6(->metatable), Dt6(->metatable), Dt6(->nomm), 1<next)); - dasm_put(Dst, 11671, 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, 11590, 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, 11666, Dt6(->marked), LJ_GC_BLACK, Dt6(->metatable), Dt6(->metatable), Dt6(->nomm), 1<next)); + dasm_put(Dst, 11759, 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, 11762, LJ_TTAB, Dt6(->asize), Dt6(->array), LJ_TNIL, Dt6(->marked), LJ_GC_BLACK, Dt6(->metatable)); - dasm_put(Dst, 11861, Dt6(->metatable), Dt6(->nomm), 1<marked), cast_byte(~LJ_GC_BLACK), DISPATCH_GL(gc.grayagain), DISPATCH_GL(gc.grayagain), Dt6(->gclist)); + dasm_put(Dst, 11850, LJ_TTAB, Dt6(->asize), Dt6(->array), LJ_TNIL, Dt6(->marked), LJ_GC_BLACK, Dt6(->metatable)); + dasm_put(Dst, 11949, 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, 11907); + dasm_put(Dst, 11995); if (sse) { - dasm_put(Dst, 10462); + dasm_put(Dst, 10550); } else { } - dasm_put(Dst, 11912, Dt6(->marked), LJ_GC_BLACK); + dasm_put(Dst, 12000, Dt6(->marked), LJ_GC_BLACK); if (sse) { - dasm_put(Dst, 11937); + dasm_put(Dst, 12025); } else { } - dasm_put(Dst, 11944, Dt6(->asize), Dt6(->array), Dt1(->base), Dt1(->base), Dt6(->marked), cast_byte(~LJ_GC_BLACK), DISPATCH_GL(gc.grayagain), DISPATCH_GL(gc.grayagain)); - dasm_put(Dst, 12070, Dt6(->gclist)); + dasm_put(Dst, 12032, Dt6(->asize), Dt6(->array), Dt1(->base), Dt1(->base), Dt6(->marked), cast_byte(~LJ_GC_BLACK), DISPATCH_GL(gc.grayagain), DISPATCH_GL(gc.grayagain)); + dasm_put(Dst, 12158, Dt6(->gclist)); break; /* -- Calls and vararg handling ----------------------------------------- */ case BC_CALL: case BC_CALLM: - dasm_put(Dst, 9578); + dasm_put(Dst, 9666); if (op == BC_CALLM) { - dasm_put(Dst, 12078); + dasm_put(Dst, 12166); } - dasm_put(Dst, 12083, LJ_TFUNC, Dt7(->pc)); + dasm_put(Dst, 12171, LJ_TFUNC, Dt7(->pc)); break; case BC_CALLMT: - dasm_put(Dst, 12078); + dasm_put(Dst, 12166); break; case BC_CALLT: - dasm_put(Dst, 12125, LJ_TFUNC, FRAME_TYPE, Dt7(->ffid), Dt7(->pc)); - dasm_put(Dst, 12244, FRAME_TYPE, Dt7(->pc), PC2PROTO(k)); + dasm_put(Dst, 12213, LJ_TFUNC, FRAME_TYPE, Dt7(->ffid), Dt7(->pc)); + dasm_put(Dst, 12332, FRAME_TYPE, Dt7(->pc), PC2PROTO(k)); break; case BC_ITERC: - dasm_put(Dst, 12302, LJ_TFUNC, 2+1, Dt7(->pc)); + dasm_put(Dst, 12390, LJ_TFUNC, 2+1, Dt7(->pc)); break; case BC_VARG: - dasm_put(Dst, 12383, Dt7(->pc), PC2PROTO(numparams), (8+FRAME_VARG), LJ_TNIL); - dasm_put(Dst, 12528, Dt1(->maxstack), Dt1(->base), Dt1(->top), Dt1(->base), Dt1(->top)); + dasm_put(Dst, 12471, Dt7(->pc), PC2PROTO(numparams), (8+FRAME_VARG), LJ_TNIL); + dasm_put(Dst, 12616, Dt1(->maxstack), Dt1(->base), Dt1(->top), Dt1(->base), Dt1(->top)); break; /* -- Returns ----------------------------------------------------------- */ case BC_RETM: - dasm_put(Dst, 12078); + dasm_put(Dst, 12166); break; case BC_RET: case BC_RET0: case BC_RET1: if (op != BC_RET0) { - dasm_put(Dst, 12627); + dasm_put(Dst, 12715); } - dasm_put(Dst, 12631, FRAME_TYPE); + dasm_put(Dst, 12719, FRAME_TYPE); switch (op) { case BC_RET: - dasm_put(Dst, 12650); + dasm_put(Dst, 12738); break; case BC_RET1: - dasm_put(Dst, 12708); + dasm_put(Dst, 12796); /* fallthrough */ case BC_RET0: - dasm_put(Dst, 12724); + dasm_put(Dst, 12812); default: break; } - dasm_put(Dst, 12735, Dt7(->pc), PC2PROTO(k)); + dasm_put(Dst, 12823, Dt7(->pc), PC2PROTO(k)); if (op == BC_RET) { - dasm_put(Dst, 12779, LJ_TNIL); + dasm_put(Dst, 12867, LJ_TNIL); } else { - dasm_put(Dst, 12788, LJ_TNIL); + dasm_put(Dst, 12876, LJ_TNIL); } - dasm_put(Dst, 12795); + dasm_put(Dst, 12883); if (op != BC_RET0) { - dasm_put(Dst, 12816); + dasm_put(Dst, 12904); } dasm_put(Dst, 4542); break; @@ -1993,7 +2004,7 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop, int cmov, int sse) case BC_FORL: #if LJ_HASJIT - dasm_put(Dst, 12820, HOTCOUNT_PCMASK, GG_DISP2HOT); + dasm_put(Dst, 12908, HOTCOUNT_PCMASK, GG_DISP2HOT); #endif break; @@ -2005,57 +2016,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, 12841); + dasm_put(Dst, 12929); if (!vk) { - dasm_put(Dst, 12845, LJ_TISNUM, LJ_TISNUM); + dasm_put(Dst, 12933, LJ_TISNUM, LJ_TISNUM); } - dasm_put(Dst, 12864); + dasm_put(Dst, 12952); if (!vk) { - dasm_put(Dst, 12868, LJ_TISNUM); + dasm_put(Dst, 12956, LJ_TISNUM); } if (sse) { - dasm_put(Dst, 12877); + dasm_put(Dst, 12965); if (vk) { - dasm_put(Dst, 12889); + dasm_put(Dst, 12977); } else { - dasm_put(Dst, 12908); + dasm_put(Dst, 12996); } - dasm_put(Dst, 12913); + dasm_put(Dst, 13001); } else { - dasm_put(Dst, 12926); + dasm_put(Dst, 13014); if (vk) { - dasm_put(Dst, 12932); + dasm_put(Dst, 13020); } else { - dasm_put(Dst, 12948); + dasm_put(Dst, 13036); } - dasm_put(Dst, 12956); + dasm_put(Dst, 13044); if (cmov) { - dasm_put(Dst, 9001); + dasm_put(Dst, 9089); } else { - dasm_put(Dst, 9007); + dasm_put(Dst, 9095); } if (!cmov) { - dasm_put(Dst, 12961); + dasm_put(Dst, 13049); } } if (op == BC_FORI) { - dasm_put(Dst, 12967, -BCBIAS_J*4); + dasm_put(Dst, 13055, -BCBIAS_J*4); } else if (op == BC_JFORI) { - dasm_put(Dst, 12977, -BCBIAS_J*4, BC_JLOOP); + dasm_put(Dst, 13065, -BCBIAS_J*4, BC_JLOOP); } else if (op == BC_IFORL) { - dasm_put(Dst, 12991, -BCBIAS_J*4); + dasm_put(Dst, 13079, -BCBIAS_J*4); } else { - dasm_put(Dst, 12987, BC_JLOOP); + dasm_put(Dst, 13075, BC_JLOOP); } - dasm_put(Dst, 9036); + dasm_put(Dst, 9124); if (sse) { - dasm_put(Dst, 13001); + dasm_put(Dst, 13089); } break; case BC_ITERL: #if LJ_HASJIT - dasm_put(Dst, 12820, HOTCOUNT_PCMASK, GG_DISP2HOT); + dasm_put(Dst, 12908, HOTCOUNT_PCMASK, GG_DISP2HOT); #endif break; @@ -2064,33 +2075,33 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop, int cmov, int sse) break; #endif case BC_IITERL: - dasm_put(Dst, 13012, LJ_TNIL); + dasm_put(Dst, 13100, LJ_TNIL); if (op == BC_JITERL) { - dasm_put(Dst, 13027, BC_JLOOP); + dasm_put(Dst, 13115, BC_JLOOP); } else { - dasm_put(Dst, 13041, -BCBIAS_J*4); + dasm_put(Dst, 13129, -BCBIAS_J*4); } - dasm_put(Dst, 9336); + dasm_put(Dst, 9424); break; case BC_LOOP: #if LJ_HASJIT - dasm_put(Dst, 12820, HOTCOUNT_PCMASK, GG_DISP2HOT); + dasm_put(Dst, 12908, HOTCOUNT_PCMASK, GG_DISP2HOT); #endif break; case BC_ILOOP: - dasm_put(Dst, 7133); + dasm_put(Dst, 7221); break; case BC_JLOOP: #if LJ_HASJIT - dasm_put(Dst, 13057, DISPATCH_J(trace), DtD(->mcode), DISPATCH_GL(jit_base), DISPATCH_GL(jit_L)); + dasm_put(Dst, 13145, DISPATCH_J(trace), DtD(->mcode), DISPATCH_GL(jit_base), DISPATCH_GL(jit_L)); #endif break; case BC_JMP: - dasm_put(Dst, 13081, -BCBIAS_J*4); + dasm_put(Dst, 13169, -BCBIAS_J*4); break; /* -- Function headers -------------------------------------------------- */ @@ -2113,13 +2124,13 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop, int cmov, int sse) break; #endif case BC_IFUNCF: - dasm_put(Dst, 13106, -4+PC2PROTO(k), Dt1(->maxstack), -4+PC2PROTO(numparams)); + dasm_put(Dst, 13194, -4+PC2PROTO(k), Dt1(->maxstack), -4+PC2PROTO(numparams)); if (op == BC_JFUNCF) { - dasm_put(Dst, 13136, BC_JLOOP); + dasm_put(Dst, 13224, BC_JLOOP); } else { - dasm_put(Dst, 7133); + dasm_put(Dst, 7221); } - dasm_put(Dst, 13145, LJ_TNIL); + dasm_put(Dst, 13233, LJ_TNIL); break; case BC_JFUNCV: @@ -2130,30 +2141,30 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop, int cmov, int sse) break; /* NYI: compiled vararg functions. */ case BC_IFUNCV: - dasm_put(Dst, 13167, FRAME_VARG, Dt1(->maxstack), -4+PC2PROTO(numparams), LJ_TNIL); + dasm_put(Dst, 13255, FRAME_VARG, Dt1(->maxstack), -4+PC2PROTO(numparams), LJ_TNIL); if (op == BC_JFUNCV) { - dasm_put(Dst, 13136, BC_JLOOP); + dasm_put(Dst, 13224, BC_JLOOP); } else { - dasm_put(Dst, 13258, -4+PC2PROTO(k)); + dasm_put(Dst, 13346, -4+PC2PROTO(k)); } - dasm_put(Dst, 13281, LJ_TNIL); + dasm_put(Dst, 13369, LJ_TNIL); break; case BC_FUNCC: case BC_FUNCCW: - dasm_put(Dst, 13303, Dt8(->f), Dt1(->base), 8*LUA_MINSTACK, Dt1(->maxstack), Dt1(->top)); + dasm_put(Dst, 13391, Dt8(->f), Dt1(->base), 8*LUA_MINSTACK, Dt1(->maxstack), Dt1(->top)); if (op == BC_FUNCC) { - dasm_put(Dst, 13333); + dasm_put(Dst, 13421); } else { - dasm_put(Dst, 13337); + dasm_put(Dst, 13425); } - dasm_put(Dst, 13345, DISPATCH_GL(vmstate), ~LJ_VMST_C); + dasm_put(Dst, 13433, DISPATCH_GL(vmstate), ~LJ_VMST_C); if (op == BC_FUNCC) { - dasm_put(Dst, 13354); + dasm_put(Dst, 13442); } else { - dasm_put(Dst, 13358, DISPATCH_GL(wrapf)); + dasm_put(Dst, 13446, DISPATCH_GL(wrapf)); } - dasm_put(Dst, 13363, DISPATCH_GL(vmstate), ~LJ_VMST_INTERP, Dt1(->base), Dt1(->top)); + dasm_put(Dst, 13451, DISPATCH_GL(vmstate), ~LJ_VMST_INTERP, Dt1(->base), Dt1(->top)); break; /* ---------------------------------------------------------------------- */ @@ -2181,7 +2192,7 @@ static int build_backend(BuildCtx *ctx) build_subroutines(ctx, cmov, sse); - dasm_put(Dst, 13388); + dasm_put(Dst, 13476); 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 b970278e..b9036273 100644 --- a/src/buildvm_x86.dasc +++ b/src/buildvm_x86.dasc @@ -2504,36 +2504,43 @@ static void build_subroutines(BuildCtx *ctx, int cmov, int sse) | mov L:RB->top, RD | mov FCARG2, PC | lea FCARG1, [DISPATCH+GG_DISP2J] - | mov [DISPATCH+DISPATCH_J(L)], L:RB + | mov aword [DISPATCH+DISPATCH_J(L)], L:RBa | mov SAVE_PC, PC | call extern lj_trace_hot@8 // (jit_State *J, const BCIns *pc) | jmp <3 |.endif +#endif + | + |->vm_callhook: // Dispatch target for call hooks. +#if LJ_HASJIT + | mov aword [DISPATCH+DISPATCH_J(L)], 0 // Marker for call hook. + | jmp >1 #endif | |->vm_hotcall: // Hot call counter underflow. #if LJ_HASJIT - |.if X64 - | int3 // NYI - |.else + | mov aword [DISPATCH+DISPATCH_J(L)], L:RBa + |1: +#endif | lea RD, [BASE+NARGS:RD*8-8] | mov L:RB, SAVE_L | mov L:RB->base, BASE | mov L:RB->top, RD | mov FCARG2, PC - | lea FCARG1, [DISPATCH+GG_DISP2J] - | mov [DISPATCH+DISPATCH_J(L)], L:RB + | mov FCARG1, L:RB | mov SAVE_PC, PC - | call extern lj_trace_hot@8 // (jit_State *J, const BCIns *pc) + | call extern lj_dispatch_call@8 // (lua_State *L, const BCIns *pc) + | // ASMFunction returned in eax/rax (RDa). + | mov SAVE_PC, 0 // Invalidate for subsequent line hook. | mov BASE, L:RB->base + | mov RAa, RDa | mov RD, L:RB->top | sub RD, BASE + | mov RBa, RAa + | movzx RA, PC_RA | shr RD, 3 | add NARGS:RD, 1 - | mov LFUNC:RB, [BASE-8] - | ins_callt - |.endif -#endif + | jmp RBa | |//----------------------------------------------------------------------- |//-- Trace exit handler ------------------------------------------------- @@ -2570,7 +2577,7 @@ static void build_subroutines(BuildCtx *ctx, int cmov, int sse) | // Caveat: RB is ebp. | mov L:RB, [DISPATCH+DISPATCH_GL(jit_L)] | mov BASE, [DISPATCH+DISPATCH_GL(jit_base)] - | mov [DISPATCH+DISPATCH_J(L)], L:RB + | mov aword [DISPATCH+DISPATCH_J(L)], L:RBa | mov L:RB->base, BASE | lea FCARG2, [esp+16] | lea FCARG1, [DISPATCH+GG_DISP2J] diff --git a/src/buildvm_x86.h b/src/buildvm_x86.h index f50d16b8..dc7e64c6 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[15137] = { +static const unsigned char build_actionlist[15151] = { 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, @@ -406,343 +406,344 @@ static const unsigned char build_actionlist[15137] = { 232,137,76,36,20,252,233,244,4,248,139,255,139,106,252,248,139,173,233,15, 182,133,233,141,4,194,139,108,36,48,137,149,233,137,133,233,137,252,242,141, 139,233,137,171,233,137,116,36,24,232,251,1,21,252,233,244,3,255,248,140, + 255,199,131,233,0,0,0,0,252,233,244,247,255,248,141,255,137,171,233,248,1, 255,141,68,194,252,248,139,108,36,48,137,149,233,137,133,233,137,252,242, - 141,139,233,137,171,233,137,116,36,24,232,251,1,21,139,149,233,139,133,233, - 41,208,193,232,3,131,192,1,139,106,252,248,139,181,233,139,14,15,182,252, - 233,15,182,205,131,198,4,252,255,36,171,255,248,141,255,85,141,108,36,12, - 85,83,82,81,80,15,182,69,252,252,138,101,252,248,137,125,252,252,137,117, - 252,248,139,93,0,139,139,233,199,131,233,237,137,131,233,137,139,233,129, - 252,236,239,252,247,131,233,237,15,132,244,247,252,242,15,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, - 248,1,139,171,233,139,147,233,137,171,233,137,149,233,141,84,36,16,141,139, - 233,232,251,1,22,137,196,139,149,233,139,116,36,24,137,108,36,48,255,248, - 142,255,139,122,252,248,139,191,233,139,191,233,199,131,233,0,0,0,0,199,131, - 233,237,139,6,15,182,204,15,182,232,131,198,4,193,232,16,252,255,36,171,255, - 248,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,143,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,144,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,145,102,15,252,239,210,102,15, + 137,252,233,137,116,36,24,232,251,1,22,199,68,36,24,0,0,0,0,139,149,233,137, + 193,139,133,233,41,208,137,205,15,182,78,252,253,193,232,3,131,192,1,252, + 255,229,248,142,255,85,141,108,36,12,85,83,82,81,80,15,182,69,252,252,138, + 101,252,248,137,125,252,252,137,117,252,248,139,93,0,139,139,233,199,131, + 233,237,137,131,233,137,139,233,129,252,236,239,252,247,131,233,237,15,132, + 244,247,252,242,15,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,248,1,139,171,233,139,147,233,137,171,233, + 137,149,233,141,84,36,16,141,139,233,232,251,1,23,137,196,139,149,233,139, + 116,36,24,137,108,36,48,255,248,143,255,139,122,252,248,139,191,233,139,191, + 233,199,131,233,0,0,0,0,199,131,233,237,139,6,15,182,204,15,182,232,131,198, + 4,193,232,16,252,255,36,171,255,248,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,144,102,15,252,239,210,102,15, 118,210,102,15,115,210,1,184,0,0,48,67,102,15,110,216,102,15,112,219,81,15, - 40,200,102,15,84,202,102,15,46,217,15,134,244,247,102,15,85,208,15,40,193, - 252,242,15,88,203,252,242,15,92,203,184,0,0,252,240,63,102,15,110,216,102, - 15,112,219,81,252,242,15,194,193,1,102,15,84,195,252,242,15,92,200,102,15, - 86,202,15,40,193,248,1,195,248,146,255,15,40,232,252,242,15,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,147,217,84,36,4,129,124,36,4,0,0,128,127,15,132,244, - 247,129,124,36,4,0,0,128,252,255,15,132,244,248,248,148,217,192,217,252,252, - 220,252,233,217,201,217,252,240,217,232,222,193,217,252,253,221,217,248,1, - 195,248,2,221,216,217,252,238,195,255,248,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,148,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,149,252,242,15,45,193,252,242,15,42,208,102,15, - 46,202,15,133,244,254,15,138,244,255,248,150,131,252,248,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,151,255,139,68,36, - 12,252,242,15,16,68,36,4,131,252,248,1,15,132,244,247,15,135,244,248,232, - 244,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,147,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,147,131,252,248,7,15,132,244,247,15,135,244, - 248,217,252,237,217,201,217,252,241,195,248,1,217,232,217,201,217,252,241, - 195,248,2,131,252,248,9,15,132,244,247,255,15,135,244,248,217,252,236,217, - 201,217,252,241,195,248,1,217,252,254,195,248,2,131,252,248,11,15,132,244, - 247,15,135,244,255,217,252,255,195,248,1,217,252,242,221,216,195,255,248, - 9,204,248,152,255,139,68,36,20,252,242,15,16,68,36,4,252,242,15,16,76,36, - 12,131,252,248,1,15,132,244,247,15,135,244,248,252,242,15,88,193,248,7,252, - 242,15,17,68,36,4,221,68,36,4,195,248,1,252,242,15,92,193,252,233,244,7,248, - 2,131,252,248,3,15,132,244,247,15,135,244,248,252,242,15,89,193,252,233,244, - 7,248,1,252,242,15,94,193,252,233,244,7,248,2,131,252,248,5,15,132,244,247, - 255,15,135,244,248,232,244,146,252,233,244,7,248,1,90,232,244,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,146,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,153,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,154,232,244,146,255,252,233,244,154,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,23,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,24,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,24,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, - 25,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,26,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,27,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,28,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,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,137,252,233,232,251, - 1,28,15,183,70,252,254,252,247,208,252,233,244,2,255,252,247,208,139,106, - 252,248,139,173,233,139,4,135,252,233,244,155,255,252,247,208,139,106,252, - 248,139,173,233,139,4,135,252,233,244,156,255,15,182,252,236,15,182,192,129, - 124,253,252,234,4,239,15,133,244,36,139,44,252,234,129,124,253,194,4,239, - 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,155,255,15,182, - 252,236,15,182,192,252,247,208,139,4,135,129,124,253,252,234,4,239,15,133, - 244,34,139,44,252,234,248,155,139,141,233,35,136,233,105,201,239,3,141,233, - 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,156,248,7,128,165,233,235,139,139,233,137,171, - 233,137,141,233,15,182,78,252,253,252,233,244,2,255,15,182,252,236,15,182, - 192,252,247,208,139,4,135,129,124,253,252,234,4,239,15,133,244,37,139,44, - 252,234,248,156,139,141,233,35,136,233,105,201,239,198,133,233,0,3,141,233, - 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,30,139,149,233,139,108, - 36,12,137,193,252,233,244,2,248,7,128,165,233,235,139,131,233,137,171,233, - 137,133,233,252,233,244,3,255,15,182,252,236,15,182,192,129,124,253,252,234, - 4,239,15,133,244,38,139,44,252,234,59,133,233,15,131,244,38,193,224,3,3,133, - 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,221,4,199,219,92,36,12,255,248, - 1,141,12,202,139,105,252,248,252,246,133,233,235,15,133,244,253,248,2,139, - 68,36,20,255,252,242,15,45,252,248,255,139,124,36,12,255,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,31,139,149,233,15,182,78,252,253,252, - 233,244,1,248,7,128,165,233,235,139,131,233,137,171,233,255,137,133,233,252, - 233,244,2,255,3,68,36,20,255,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,139,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,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 + 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,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,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, + 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,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,147,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,148,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,149,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, + 149,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,150,252,242,15,45, + 193,252,242,15,42,208,102,15,46,202,15,133,244,254,15,138,244,255,248,151, + 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,152,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,148,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,148,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,153,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,147,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, + 147,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,154,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,155,232,244,147,255,252,233, + 244,155,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,24,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,25,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,25,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,26,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,27,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,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,29,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,30,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,29,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,156,255,252, + 247,208,139,106,252,248,139,173,233,139,4,135,252,233,244,157,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,156,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,156,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,157,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,157,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,31,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,221,4,199,219,92,36,12,255,248,1,141,12,202,139,105,252,248,252, + 246,133,233,235,15,133,244,253,248,2,139,68,36,20,255,252,242,15,45,252,248, + 255,139,124,36,12,255,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,32,139,149,233,15,182,78,252,253,252,233,244,1,248,7,128,165,233,235,139, + 131,233,137,171,233,255,137,133,233,252,233,244,2,255,3,68,36,20,255,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,139,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,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 { @@ -876,6 +877,7 @@ enum { GLOB_vm_hook, GLOB_cont_hook, GLOB_vm_hotloop, + GLOB_vm_callhook, GLOB_vm_hotcall, GLOB_vm_exit_handler, GLOB_vm_exit_interp, @@ -1026,6 +1028,7 @@ static const char *const globnames[] = { "vm_hook", "cont_hook", "vm_hotloop", + "vm_callhook", "vm_hotcall", "vm_exit_handler", "vm_exit_interp", @@ -1068,6 +1071,7 @@ static const char *const extnames[] = { "lj_gc_step@4", "lj_dispatch_ins@8", "lj_trace_hot@8", + "lj_dispatch_call@8", "lj_trace_exit@8", "lj_meta_cat", "lj_gc_barrieruv@8", @@ -1434,95 +1438,99 @@ static void build_subroutines(BuildCtx *ctx, int cmov, int sse) #endif dasm_put(Dst, 8141); #if LJ_HASJIT - dasm_put(Dst, 8144, Dt1(->base), Dt1(->top), GG_DISP2J, DISPATCH_J(L), Dt1(->base), Dt1(->top), Dt7(->pc)); + dasm_put(Dst, 8144, DISPATCH_J(L)); #endif - dasm_put(Dst, 8214); + dasm_put(Dst, 8156); #if LJ_HASJIT - dasm_put(Dst, 8217, DISPATCH_GL(vmstate), DISPATCH_GL(vmstate), ~LJ_VMST_EXIT, DISPATCH_J(exitno), DISPATCH_J(parent), 8*8+16, DISPATCH_J(flags), JIT_F_SSE2, DISPATCH_GL(jit_L), DISPATCH_GL(jit_base), DISPATCH_J(L), Dt1(->base), GG_DISP2J, Dt1(->base)); + dasm_put(Dst, 8159, DISPATCH_J(L)); #endif - dasm_put(Dst, 8360); + dasm_put(Dst, 8165, Dt1(->base), Dt1(->top), Dt1(->base), Dt1(->top)); #if LJ_HASJIT - dasm_put(Dst, 8363, Dt7(->pc), PC2PROTO(k), DISPATCH_GL(jit_L), DISPATCH_GL(vmstate), ~LJ_VMST_INTERP); + dasm_put(Dst, 8231, DISPATCH_GL(vmstate), DISPATCH_GL(vmstate), ~LJ_VMST_EXIT, DISPATCH_J(exitno), DISPATCH_J(parent), 8*8+16, DISPATCH_J(flags), JIT_F_SSE2, DISPATCH_GL(jit_L), DISPATCH_GL(jit_base), DISPATCH_J(L), Dt1(->base), GG_DISP2J, Dt1(->base)); #endif - dasm_put(Dst, 8403); + dasm_put(Dst, 8374); +#if LJ_HASJIT + dasm_put(Dst, 8377, Dt7(->pc), PC2PROTO(k), DISPATCH_GL(jit_L), DISPATCH_GL(vmstate), ~LJ_VMST_INTERP); +#endif + dasm_put(Dst, 8417); if (!sse) { - dasm_put(Dst, 8406); + dasm_put(Dst, 8420); } - dasm_put(Dst, 8451); + dasm_put(Dst, 8465); if (!sse) { - dasm_put(Dst, 8553); + dasm_put(Dst, 8567); } - dasm_put(Dst, 8598); + dasm_put(Dst, 8612); if (!sse) { - dasm_put(Dst, 8700); + dasm_put(Dst, 8714); } - dasm_put(Dst, 8739); + dasm_put(Dst, 8753); if (sse) { - dasm_put(Dst, 8844); + dasm_put(Dst, 8858); } else { - dasm_put(Dst, 8974); + dasm_put(Dst, 8988); } - dasm_put(Dst, 9021); + dasm_put(Dst, 9035); if (!sse) { - dasm_put(Dst, 9095); + dasm_put(Dst, 9109); if (cmov) { - dasm_put(Dst, 9106); + dasm_put(Dst, 9120); } else { - dasm_put(Dst, 9110); + dasm_put(Dst, 9124); } - dasm_put(Dst, 9117); - dasm_put(Dst, 9191); - dasm_put(Dst, 9291); + dasm_put(Dst, 9131); + dasm_put(Dst, 9205); + dasm_put(Dst, 9305); if (cmov) { - dasm_put(Dst, 9294); + dasm_put(Dst, 9308); } else { - dasm_put(Dst, 9298); + dasm_put(Dst, 9312); } - dasm_put(Dst, 9305); + dasm_put(Dst, 9319); if (cmov) { - dasm_put(Dst, 9106); + dasm_put(Dst, 9120); } else { - dasm_put(Dst, 9110); + dasm_put(Dst, 9124); } - dasm_put(Dst, 9323); + dasm_put(Dst, 9337); } else { - dasm_put(Dst, 9402); + dasm_put(Dst, 9416); } - dasm_put(Dst, 9405); - dasm_put(Dst, 9490); - dasm_put(Dst, 9621); - dasm_put(Dst, 9820); + dasm_put(Dst, 9419); + dasm_put(Dst, 9504); + dasm_put(Dst, 9635); + dasm_put(Dst, 9834); if (sse) { - dasm_put(Dst, 9843); - dasm_put(Dst, 9900); - dasm_put(Dst, 9991); + dasm_put(Dst, 9857); + dasm_put(Dst, 9914); + dasm_put(Dst, 10005); } else { - dasm_put(Dst, 10033); - dasm_put(Dst, 10125); + dasm_put(Dst, 10047); + dasm_put(Dst, 10139); } - dasm_put(Dst, 10171); + dasm_put(Dst, 10185); if (sse) { - dasm_put(Dst, 10177); - dasm_put(Dst, 10282); - dasm_put(Dst, 10365); + dasm_put(Dst, 10191); + dasm_put(Dst, 10296); + dasm_put(Dst, 10379); } else { - dasm_put(Dst, 10437); - dasm_put(Dst, 10520); + dasm_put(Dst, 10451); + dasm_put(Dst, 10534); if (cmov) { - dasm_put(Dst, 10575); + dasm_put(Dst, 10589); } else { - dasm_put(Dst, 10594); + dasm_put(Dst, 10608); } - dasm_put(Dst, 10433); + dasm_put(Dst, 10447); } - dasm_put(Dst, 10635); + dasm_put(Dst, 10649); } /* 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, 10689, defop); + dasm_put(Dst, 10703, defop); switch (op) { @@ -1531,617 +1539,617 @@ 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, 10691, LJ_TISNUM, LJ_TISNUM); + dasm_put(Dst, 10705, LJ_TISNUM, LJ_TISNUM); if (sse) { - dasm_put(Dst, 10712); + dasm_put(Dst, 10726); } else { - dasm_put(Dst, 10727); + dasm_put(Dst, 10741); if (cmov) { - dasm_put(Dst, 10737); + dasm_put(Dst, 10751); } else { - dasm_put(Dst, 10743); + dasm_put(Dst, 10757); } } switch (op) { case BC_ISLT: - dasm_put(Dst, 10750); + dasm_put(Dst, 10764); break; case BC_ISGE: - dasm_put(Dst, 9986); + dasm_put(Dst, 10000); break; case BC_ISLE: dasm_put(Dst, 6179); break; case BC_ISGT: - dasm_put(Dst, 10755); + dasm_put(Dst, 10769); break; default: break; /* Shut up GCC. */ } - dasm_put(Dst, 10760, -BCBIAS_J*4); + dasm_put(Dst, 10774, -BCBIAS_J*4); break; case BC_ISEQV: case BC_ISNEV: vk = op == BC_ISEQV; - dasm_put(Dst, 10793, LJ_TISNUM, LJ_TISNUM); + dasm_put(Dst, 10807, LJ_TISNUM, LJ_TISNUM); if (sse) { - dasm_put(Dst, 10819); + dasm_put(Dst, 10833); } else { - dasm_put(Dst, 10831); + dasm_put(Dst, 10845); if (cmov) { - dasm_put(Dst, 10737); + dasm_put(Dst, 10751); } else { - dasm_put(Dst, 10743); + dasm_put(Dst, 10757); } } iseqne_fp: if (vk) { - dasm_put(Dst, 10838); + dasm_put(Dst, 10852); } else { - dasm_put(Dst, 10847); + dasm_put(Dst, 10861); } iseqne_end: if (vk) { - dasm_put(Dst, 10856, -BCBIAS_J*4); + dasm_put(Dst, 10870, -BCBIAS_J*4); } else { - dasm_put(Dst, 10871, -BCBIAS_J*4); + dasm_put(Dst, 10885, -BCBIAS_J*4); } - dasm_put(Dst, 8384); + dasm_put(Dst, 8398); if (op == BC_ISEQV || op == BC_ISNEV) { - dasm_put(Dst, 10886, LJ_TISPRI, LJ_TISTABUD, Dt6(->metatable), Dt6(->nomm), 1<metatable), Dt6(->nomm), 1<len)); + dasm_put(Dst, 11236, Dt5(->len)); } else { - dasm_put(Dst, 11240, Dt5(->len)); + dasm_put(Dst, 11254, Dt5(->len)); } - dasm_put(Dst, 11249, LJ_TTAB); + dasm_put(Dst, 11263, LJ_TTAB); if (sse) { - dasm_put(Dst, 11289); + dasm_put(Dst, 11303); } else { - dasm_put(Dst, 11298); + dasm_put(Dst, 11312); } - dasm_put(Dst, 11308); + dasm_put(Dst, 11322); break; /* -- Binary ops -------------------------------------------------------- */ case BC_ADDVN: case BC_ADDNV: case BC_ADDVV: - dasm_put(Dst, 11318); + dasm_put(Dst, 11332); vk = ((int)op - BC_ADDVN) / (BC_ADDNV-BC_ADDVN); switch (vk) { case 0: - dasm_put(Dst, 11326, LJ_TISNUM); + dasm_put(Dst, 11340, LJ_TISNUM); if (sse) { - dasm_put(Dst, 11338); - } else { dasm_put(Dst, 11352); + } else { + dasm_put(Dst, 11366); } break; case 1: - dasm_put(Dst, 11360, LJ_TISNUM); + dasm_put(Dst, 11374, LJ_TISNUM); if (sse) { - dasm_put(Dst, 11372); - } else { dasm_put(Dst, 11386); + } else { + dasm_put(Dst, 11400); } break; default: - dasm_put(Dst, 11394, LJ_TISNUM, LJ_TISNUM); + dasm_put(Dst, 11408, LJ_TISNUM, LJ_TISNUM); if (sse) { - dasm_put(Dst, 11416); - } else { dasm_put(Dst, 11430); + } else { + dasm_put(Dst, 11444); } break; } if (sse) { - dasm_put(Dst, 11192); + dasm_put(Dst, 11206); } else { - dasm_put(Dst, 11204); + dasm_put(Dst, 11218); } - dasm_put(Dst, 8384); + dasm_put(Dst, 8398); break; case BC_SUBVN: case BC_SUBNV: case BC_SUBVV: - dasm_put(Dst, 11318); + dasm_put(Dst, 11332); vk = ((int)op - BC_ADDVN) / (BC_ADDNV-BC_ADDVN); switch (vk) { case 0: - dasm_put(Dst, 11326, LJ_TISNUM); + dasm_put(Dst, 11340, LJ_TISNUM); if (sse) { - dasm_put(Dst, 11438); - } else { dasm_put(Dst, 11452); + } else { + dasm_put(Dst, 11466); } break; case 1: - dasm_put(Dst, 11360, LJ_TISNUM); + dasm_put(Dst, 11374, LJ_TISNUM); if (sse) { - dasm_put(Dst, 11460); - } else { dasm_put(Dst, 11474); + } else { + dasm_put(Dst, 11488); } break; default: - dasm_put(Dst, 11394, LJ_TISNUM, LJ_TISNUM); + dasm_put(Dst, 11408, LJ_TISNUM, LJ_TISNUM); if (sse) { - dasm_put(Dst, 11482); - } else { dasm_put(Dst, 11496); + } else { + dasm_put(Dst, 11510); } break; } if (sse) { - dasm_put(Dst, 11192); + dasm_put(Dst, 11206); } else { - dasm_put(Dst, 11204); + dasm_put(Dst, 11218); } - dasm_put(Dst, 8384); + dasm_put(Dst, 8398); break; case BC_MULVN: case BC_MULNV: case BC_MULVV: - dasm_put(Dst, 11318); + dasm_put(Dst, 11332); vk = ((int)op - BC_ADDVN) / (BC_ADDNV-BC_ADDVN); switch (vk) { case 0: - dasm_put(Dst, 11326, LJ_TISNUM); + dasm_put(Dst, 11340, LJ_TISNUM); if (sse) { - dasm_put(Dst, 11504); - } else { dasm_put(Dst, 11518); + } else { + dasm_put(Dst, 11532); } break; case 1: - dasm_put(Dst, 11360, LJ_TISNUM); + dasm_put(Dst, 11374, LJ_TISNUM); if (sse) { - dasm_put(Dst, 11526); - } else { dasm_put(Dst, 11540); + } else { + dasm_put(Dst, 11554); } break; default: - dasm_put(Dst, 11394, LJ_TISNUM, LJ_TISNUM); + dasm_put(Dst, 11408, LJ_TISNUM, LJ_TISNUM); if (sse) { - dasm_put(Dst, 11548); - } else { dasm_put(Dst, 11562); + } else { + dasm_put(Dst, 11576); } break; } if (sse) { - dasm_put(Dst, 11192); + dasm_put(Dst, 11206); } else { - dasm_put(Dst, 11204); + dasm_put(Dst, 11218); } - dasm_put(Dst, 8384); + dasm_put(Dst, 8398); break; case BC_DIVVN: case BC_DIVNV: case BC_DIVVV: - dasm_put(Dst, 11318); + dasm_put(Dst, 11332); vk = ((int)op - BC_ADDVN) / (BC_ADDNV-BC_ADDVN); switch (vk) { case 0: - dasm_put(Dst, 11326, LJ_TISNUM); + dasm_put(Dst, 11340, LJ_TISNUM); if (sse) { - dasm_put(Dst, 11570); - } else { dasm_put(Dst, 11584); + } else { + dasm_put(Dst, 11598); } break; case 1: - dasm_put(Dst, 11360, LJ_TISNUM); + dasm_put(Dst, 11374, LJ_TISNUM); if (sse) { - dasm_put(Dst, 11592); - } else { dasm_put(Dst, 11606); + } else { + dasm_put(Dst, 11620); } break; default: - dasm_put(Dst, 11394, LJ_TISNUM, LJ_TISNUM); + dasm_put(Dst, 11408, LJ_TISNUM, LJ_TISNUM); if (sse) { - dasm_put(Dst, 11614); - } else { dasm_put(Dst, 11628); + } else { + dasm_put(Dst, 11642); } break; } if (sse) { - dasm_put(Dst, 11192); + dasm_put(Dst, 11206); } else { - dasm_put(Dst, 11204); + dasm_put(Dst, 11218); } - dasm_put(Dst, 8384); + dasm_put(Dst, 8398); break; case BC_MODVN: - dasm_put(Dst, 11318); + dasm_put(Dst, 11332); vk = ((int)op - BC_ADDVN) / (BC_ADDNV-BC_ADDVN); switch (vk) { case 0: - dasm_put(Dst, 11326, LJ_TISNUM); + dasm_put(Dst, 11340, LJ_TISNUM); if (sse) { - dasm_put(Dst, 11636); - } else { dasm_put(Dst, 11650); + } else { + dasm_put(Dst, 11664); } break; case 1: - dasm_put(Dst, 11360, LJ_TISNUM); + dasm_put(Dst, 11374, LJ_TISNUM); if (sse) { - dasm_put(Dst, 11658); - } else { dasm_put(Dst, 11672); + } else { + dasm_put(Dst, 11686); } break; default: - dasm_put(Dst, 11394, LJ_TISNUM, LJ_TISNUM); + dasm_put(Dst, 11408, LJ_TISNUM, LJ_TISNUM); if (sse) { - dasm_put(Dst, 11680); - } else { dasm_put(Dst, 11694); + } else { + dasm_put(Dst, 11708); } break; } - dasm_put(Dst, 11702); + dasm_put(Dst, 11716); if (sse) { - dasm_put(Dst, 11192); + dasm_put(Dst, 11206); } else { - dasm_put(Dst, 11204); + dasm_put(Dst, 11218); } - dasm_put(Dst, 8384); + dasm_put(Dst, 8398); break; case BC_MODNV: case BC_MODVV: - dasm_put(Dst, 11318); + dasm_put(Dst, 11332); vk = ((int)op - BC_ADDVN) / (BC_ADDNV-BC_ADDVN); switch (vk) { case 0: - dasm_put(Dst, 11326, LJ_TISNUM); + dasm_put(Dst, 11340, LJ_TISNUM); if (sse) { - dasm_put(Dst, 11636); - } else { dasm_put(Dst, 11650); + } else { + dasm_put(Dst, 11664); } break; case 1: - dasm_put(Dst, 11360, LJ_TISNUM); + dasm_put(Dst, 11374, LJ_TISNUM); if (sse) { - dasm_put(Dst, 11658); - } else { dasm_put(Dst, 11672); + } else { + dasm_put(Dst, 11686); } break; default: - dasm_put(Dst, 11394, LJ_TISNUM, LJ_TISNUM); + dasm_put(Dst, 11408, LJ_TISNUM, LJ_TISNUM); if (sse) { - dasm_put(Dst, 11680); - } else { dasm_put(Dst, 11694); + } else { + dasm_put(Dst, 11708); } break; } - dasm_put(Dst, 11708); + dasm_put(Dst, 11722); break; case BC_POW: - dasm_put(Dst, 11318); + dasm_put(Dst, 11332); vk = ((int)op - BC_ADDVN) / (BC_ADDNV-BC_ADDVN); switch (vk) { case 0: - dasm_put(Dst, 11326, LJ_TISNUM); + dasm_put(Dst, 11340, LJ_TISNUM); if (sse) { - dasm_put(Dst, 11636); - } else { dasm_put(Dst, 11650); + } else { + dasm_put(Dst, 11664); } break; case 1: - dasm_put(Dst, 11360, LJ_TISNUM); + dasm_put(Dst, 11374, LJ_TISNUM); if (sse) { - dasm_put(Dst, 11658); - } else { dasm_put(Dst, 11672); + } else { + dasm_put(Dst, 11686); } break; default: - dasm_put(Dst, 11394, LJ_TISNUM, LJ_TISNUM); + dasm_put(Dst, 11408, LJ_TISNUM, LJ_TISNUM); if (sse) { - dasm_put(Dst, 11680); - } else { dasm_put(Dst, 11694); + } else { + dasm_put(Dst, 11708); } break; } - dasm_put(Dst, 11713); + dasm_put(Dst, 11727); if (sse) { - dasm_put(Dst, 11192); + dasm_put(Dst, 11206); } else { - dasm_put(Dst, 11204); + dasm_put(Dst, 11218); } - dasm_put(Dst, 8384); + dasm_put(Dst, 8398); break; case BC_CAT: - dasm_put(Dst, 11717, Dt1(->base), Dt1(->base)); + dasm_put(Dst, 11731, Dt1(->base), Dt1(->base)); break; /* -- Constant ops ------------------------------------------------------ */ case BC_KSTR: - dasm_put(Dst, 11811, LJ_TSTR); + dasm_put(Dst, 11825, LJ_TSTR); break; case BC_KSHORT: if (sse) { - dasm_put(Dst, 11844); + dasm_put(Dst, 11858); } else { - dasm_put(Dst, 11859); + dasm_put(Dst, 11873); } - dasm_put(Dst, 8384); + dasm_put(Dst, 8398); break; case BC_KNUM: if (sse) { - dasm_put(Dst, 11867); + dasm_put(Dst, 11881); } else { - dasm_put(Dst, 11880); + dasm_put(Dst, 11894); } - dasm_put(Dst, 8384); + dasm_put(Dst, 8398); break; case BC_KPRI: - dasm_put(Dst, 11887); + dasm_put(Dst, 11901); break; case BC_KNIL: - dasm_put(Dst, 11913, LJ_TNIL); + dasm_put(Dst, 11927, LJ_TNIL); break; /* -- Upvalue and function ops ------------------------------------------ */ case BC_UGET: - dasm_put(Dst, 11959, offsetof(GCfuncL, uvptr), DtA(->v)); + dasm_put(Dst, 11973, offsetof(GCfuncL, uvptr), DtA(->v)); break; case BC_USETV: #define TV2MARKOFS \ ((int32_t)offsetof(GCupval, marked)-(int32_t)offsetof(GCupval, tv)) - dasm_put(Dst, 12003, 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, 12093); + dasm_put(Dst, 12017, 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, 12107); break; #undef TV2MARKOFS case BC_USETS: - dasm_put(Dst, 12105, 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, 12119, 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, 12196); + dasm_put(Dst, 12210); if (sse) { - dasm_put(Dst, 12201); + dasm_put(Dst, 12215); } else { - dasm_put(Dst, 11011); + dasm_put(Dst, 11025); } - dasm_put(Dst, 12208, offsetof(GCfuncL, uvptr), DtA(->v)); + dasm_put(Dst, 12222, offsetof(GCfuncL, uvptr), DtA(->v)); if (sse) { - dasm_put(Dst, 12217); + dasm_put(Dst, 12231); } else { - dasm_put(Dst, 12223); + dasm_put(Dst, 12237); } - dasm_put(Dst, 8384); + dasm_put(Dst, 8398); break; case BC_USETP: - dasm_put(Dst, 12226, offsetof(GCfuncL, uvptr), DtA(->v)); + dasm_put(Dst, 12240, offsetof(GCfuncL, uvptr), DtA(->v)); break; case BC_UCLO: - dasm_put(Dst, 12263, -BCBIAS_J*4, Dt1(->openupval), Dt1(->base), Dt1(->base)); + dasm_put(Dst, 12277, -BCBIAS_J*4, Dt1(->openupval), Dt1(->base), Dt1(->base)); break; case BC_FNEW: - dasm_put(Dst, 12317, Dt1(->base), Dt1(->base), LJ_TFUNC); + dasm_put(Dst, 12331, Dt1(->base), Dt1(->base), LJ_TFUNC); break; /* -- Table ops --------------------------------------------------------- */ case BC_TNEW: - dasm_put(Dst, 12388, DISPATCH_GL(gc.total), DISPATCH_GL(gc.threshold), Dt1(->base), Dt1(->base), LJ_TTAB); + dasm_put(Dst, 12402, DISPATCH_GL(gc.total), DISPATCH_GL(gc.threshold), Dt1(->base), Dt1(->base), LJ_TTAB); break; case BC_TDUP: - dasm_put(Dst, 12509, DISPATCH_GL(gc.total), DISPATCH_GL(gc.threshold), Dt1(->base), Dt1(->base), LJ_TTAB); + dasm_put(Dst, 12523, DISPATCH_GL(gc.total), DISPATCH_GL(gc.threshold), Dt1(->base), Dt1(->base), LJ_TTAB); break; case BC_GGET: - dasm_put(Dst, 12601, Dt7(->env)); + dasm_put(Dst, 12615, Dt7(->env)); break; case BC_GSET: - dasm_put(Dst, 12619, Dt7(->env)); + dasm_put(Dst, 12633, Dt7(->env)); break; case BC_TGETV: - dasm_put(Dst, 12637, LJ_TTAB, LJ_TISNUM); + dasm_put(Dst, 12651, LJ_TTAB, LJ_TISNUM); if (sse) { - dasm_put(Dst, 12670); + dasm_put(Dst, 12684); } else { - dasm_put(Dst, 12691); + dasm_put(Dst, 12705); if (cmov) { - dasm_put(Dst, 10737); + dasm_put(Dst, 10751); } else { - dasm_put(Dst, 10743); + dasm_put(Dst, 10757); } dasm_put(Dst, 2522); } - dasm_put(Dst, 12701, 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, 12895, 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, 12909, 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, 13181, Dt6(->nomm), 1<marked), cast_byte(~LJ_GC_BLACK), DISPATCH_GL(gc.grayagain), DISPATCH_GL(gc.grayagain), Dt6(->gclist)); + dasm_put(Dst, 13112, Dt6(->asize), Dt6(->array), LJ_TNIL, Dt6(->marked), LJ_GC_BLACK, Dt6(->metatable), Dt6(->metatable)); + dasm_put(Dst, 13195, 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, 13243, 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, 13318, Dt6(->marked), LJ_GC_BLACK, Dt6(->metatable), Dt6(->metatable), Dt6(->nomm), 1<next)); - dasm_put(Dst, 13410, 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, 13257, 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, 13332, Dt6(->marked), LJ_GC_BLACK, Dt6(->metatable), Dt6(->metatable), Dt6(->nomm), 1<next)); + dasm_put(Dst, 13424, 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, 13506, LJ_TTAB, Dt6(->asize), Dt6(->array), LJ_TNIL, Dt6(->marked), LJ_GC_BLACK, Dt6(->metatable)); - dasm_put(Dst, 13604, Dt6(->metatable), Dt6(->nomm), 1<marked), cast_byte(~LJ_GC_BLACK), DISPATCH_GL(gc.grayagain), DISPATCH_GL(gc.grayagain), Dt6(->gclist)); + dasm_put(Dst, 13520, LJ_TTAB, Dt6(->asize), Dt6(->array), LJ_TNIL, Dt6(->marked), LJ_GC_BLACK, Dt6(->metatable)); + dasm_put(Dst, 13618, 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, 13650); + dasm_put(Dst, 13664); if (sse) { - dasm_put(Dst, 12201); + dasm_put(Dst, 12215); } else { - dasm_put(Dst, 13655); + dasm_put(Dst, 13669); } - dasm_put(Dst, 13663, Dt6(->marked), LJ_GC_BLACK); + dasm_put(Dst, 13677, Dt6(->marked), LJ_GC_BLACK); if (sse) { - dasm_put(Dst, 13688); + dasm_put(Dst, 13702); } else { - dasm_put(Dst, 13695); + dasm_put(Dst, 13709); } - dasm_put(Dst, 13700, Dt6(->asize), Dt6(->array), Dt1(->base), Dt1(->base), Dt6(->marked), cast_byte(~LJ_GC_BLACK), DISPATCH_GL(gc.grayagain), DISPATCH_GL(gc.grayagain)); - dasm_put(Dst, 13828, Dt6(->gclist)); + dasm_put(Dst, 13714, Dt6(->asize), Dt6(->array), Dt1(->base), Dt1(->base), Dt6(->marked), cast_byte(~LJ_GC_BLACK), DISPATCH_GL(gc.grayagain), DISPATCH_GL(gc.grayagain)); + dasm_put(Dst, 13842, Dt6(->gclist)); break; /* -- Calls and vararg handling ----------------------------------------- */ case BC_CALL: case BC_CALLM: - dasm_put(Dst, 11322); + dasm_put(Dst, 11336); if (op == BC_CALLM) { - dasm_put(Dst, 13836); + dasm_put(Dst, 13850); } - dasm_put(Dst, 13841, LJ_TFUNC, Dt7(->pc)); + dasm_put(Dst, 13855, LJ_TFUNC, Dt7(->pc)); break; case BC_CALLMT: - dasm_put(Dst, 13836); + dasm_put(Dst, 13850); break; case BC_CALLT: - dasm_put(Dst, 13882, LJ_TFUNC, FRAME_TYPE, Dt7(->ffid), Dt7(->pc)); - dasm_put(Dst, 14000, FRAME_TYPE, Dt7(->pc), PC2PROTO(k)); + dasm_put(Dst, 13896, LJ_TFUNC, FRAME_TYPE, Dt7(->ffid), Dt7(->pc)); + dasm_put(Dst, 14014, FRAME_TYPE, Dt7(->pc), PC2PROTO(k)); break; case BC_ITERC: - dasm_put(Dst, 14057, LJ_TFUNC, 2+1, Dt7(->pc)); + dasm_put(Dst, 14071, LJ_TFUNC, 2+1, Dt7(->pc)); break; case BC_VARG: - dasm_put(Dst, 14137, Dt7(->pc), PC2PROTO(numparams), (8+FRAME_VARG), LJ_TNIL); - dasm_put(Dst, 14281, Dt1(->maxstack), Dt1(->base), Dt1(->top), Dt1(->base), Dt1(->top)); + dasm_put(Dst, 14151, Dt7(->pc), PC2PROTO(numparams), (8+FRAME_VARG), LJ_TNIL); + dasm_put(Dst, 14295, Dt1(->maxstack), Dt1(->base), Dt1(->top), Dt1(->base), Dt1(->top)); break; /* -- Returns ----------------------------------------------------------- */ case BC_RETM: - dasm_put(Dst, 13836); + dasm_put(Dst, 13850); break; case BC_RET: case BC_RET0: case BC_RET1: if (op != BC_RET0) { - dasm_put(Dst, 14380); + dasm_put(Dst, 14394); } - dasm_put(Dst, 14384, FRAME_TYPE); + dasm_put(Dst, 14398, FRAME_TYPE); switch (op) { case BC_RET: - dasm_put(Dst, 14403); + dasm_put(Dst, 14417); break; case BC_RET1: - dasm_put(Dst, 14461); + dasm_put(Dst, 14475); /* fallthrough */ case BC_RET0: - dasm_put(Dst, 14477); + dasm_put(Dst, 14491); default: break; } - dasm_put(Dst, 14488, Dt7(->pc), PC2PROTO(k)); + dasm_put(Dst, 14502, Dt7(->pc), PC2PROTO(k)); if (op == BC_RET) { - dasm_put(Dst, 14530, LJ_TNIL); + dasm_put(Dst, 14544, LJ_TNIL); } else { - dasm_put(Dst, 14539, LJ_TNIL); + dasm_put(Dst, 14553, LJ_TNIL); } - dasm_put(Dst, 14546); + dasm_put(Dst, 14560); if (op != BC_RET0) { - dasm_put(Dst, 14567); + dasm_put(Dst, 14581); } dasm_put(Dst, 4678); break; @@ -2151,7 +2159,7 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop, int cmov, int sse) case BC_FORL: #if LJ_HASJIT - dasm_put(Dst, 14571, HOTCOUNT_PCMASK, GG_DISP2HOT); + dasm_put(Dst, 14585, HOTCOUNT_PCMASK, GG_DISP2HOT); #endif break; @@ -2163,57 +2171,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, 14592); + dasm_put(Dst, 14606); if (!vk) { - dasm_put(Dst, 14596, LJ_TISNUM, LJ_TISNUM); + dasm_put(Dst, 14610, LJ_TISNUM, LJ_TISNUM); } - dasm_put(Dst, 14615); + dasm_put(Dst, 14629); if (!vk) { - dasm_put(Dst, 14619, LJ_TISNUM); + dasm_put(Dst, 14633, LJ_TISNUM); } if (sse) { - dasm_put(Dst, 14628); + dasm_put(Dst, 14642); if (vk) { - dasm_put(Dst, 14640); + dasm_put(Dst, 14654); } else { - dasm_put(Dst, 14659); + dasm_put(Dst, 14673); } - dasm_put(Dst, 14664); + dasm_put(Dst, 14678); } else { - dasm_put(Dst, 14677); + dasm_put(Dst, 14691); if (vk) { - dasm_put(Dst, 14683); + dasm_put(Dst, 14697); } else { - dasm_put(Dst, 14699); + dasm_put(Dst, 14713); } - dasm_put(Dst, 14707); + dasm_put(Dst, 14721); if (cmov) { - dasm_put(Dst, 10737); + dasm_put(Dst, 10751); } else { - dasm_put(Dst, 10743); + dasm_put(Dst, 10757); } if (!cmov) { - dasm_put(Dst, 14712); + dasm_put(Dst, 14726); } } if (op == BC_FORI) { - dasm_put(Dst, 14718, -BCBIAS_J*4); + dasm_put(Dst, 14732, -BCBIAS_J*4); } else if (op == BC_JFORI) { - dasm_put(Dst, 14728, -BCBIAS_J*4, BC_JLOOP); + dasm_put(Dst, 14742, -BCBIAS_J*4, BC_JLOOP); } else if (op == BC_IFORL) { - dasm_put(Dst, 14742, -BCBIAS_J*4); + dasm_put(Dst, 14756, -BCBIAS_J*4); } else { - dasm_put(Dst, 14738, BC_JLOOP); + dasm_put(Dst, 14752, BC_JLOOP); } - dasm_put(Dst, 10772); + dasm_put(Dst, 10786); if (sse) { - dasm_put(Dst, 14752); + dasm_put(Dst, 14766); } break; case BC_ITERL: #if LJ_HASJIT - dasm_put(Dst, 14571, HOTCOUNT_PCMASK, GG_DISP2HOT); + dasm_put(Dst, 14585, HOTCOUNT_PCMASK, GG_DISP2HOT); #endif break; @@ -2222,33 +2230,33 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop, int cmov, int sse) break; #endif case BC_IITERL: - dasm_put(Dst, 14763, LJ_TNIL); + dasm_put(Dst, 14777, LJ_TNIL); if (op == BC_JITERL) { - dasm_put(Dst, 14778, BC_JLOOP); + dasm_put(Dst, 14792, BC_JLOOP); } else { - dasm_put(Dst, 14792, -BCBIAS_J*4); + dasm_put(Dst, 14806, -BCBIAS_J*4); } - dasm_put(Dst, 11069); + dasm_put(Dst, 11083); break; case BC_LOOP: #if LJ_HASJIT - dasm_put(Dst, 14571, HOTCOUNT_PCMASK, GG_DISP2HOT); + dasm_put(Dst, 14585, HOTCOUNT_PCMASK, GG_DISP2HOT); #endif break; case BC_ILOOP: - dasm_put(Dst, 8384); + dasm_put(Dst, 8398); break; case BC_JLOOP: #if LJ_HASJIT - dasm_put(Dst, 14808, DISPATCH_J(trace), DtD(->mcode), DISPATCH_GL(jit_base), DISPATCH_GL(jit_L)); + dasm_put(Dst, 14822, DISPATCH_J(trace), DtD(->mcode), DISPATCH_GL(jit_base), DISPATCH_GL(jit_L)); #endif break; case BC_JMP: - dasm_put(Dst, 14831, -BCBIAS_J*4); + dasm_put(Dst, 14845, -BCBIAS_J*4); break; /* -- Function headers -------------------------------------------------- */ @@ -2271,47 +2279,47 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop, int cmov, int sse) break; #endif case BC_IFUNCF: - dasm_put(Dst, 14855, -4+PC2PROTO(k), Dt1(->maxstack), -4+PC2PROTO(numparams)); + dasm_put(Dst, 14869, -4+PC2PROTO(k), Dt1(->maxstack), -4+PC2PROTO(numparams)); if (op == BC_JFUNCF) { - dasm_put(Dst, 14885, BC_JLOOP); + dasm_put(Dst, 14899, BC_JLOOP); } else { - dasm_put(Dst, 8384); + dasm_put(Dst, 8398); } - dasm_put(Dst, 14894, LJ_TNIL); + dasm_put(Dst, 14908, LJ_TNIL); break; case BC_JFUNCV: #if !LJ_HASJIT break; #endif - dasm_put(Dst, 10435); + dasm_put(Dst, 10449); break; /* NYI: compiled vararg functions. */ case BC_IFUNCV: - dasm_put(Dst, 14916, FRAME_VARG, Dt1(->maxstack), -4+PC2PROTO(numparams), LJ_TNIL); + dasm_put(Dst, 14930, FRAME_VARG, Dt1(->maxstack), -4+PC2PROTO(numparams), LJ_TNIL); if (op == BC_JFUNCV) { - dasm_put(Dst, 14885, BC_JLOOP); + dasm_put(Dst, 14899, BC_JLOOP); } else { - dasm_put(Dst, 15007, -4+PC2PROTO(k)); + dasm_put(Dst, 15021, -4+PC2PROTO(k)); } - dasm_put(Dst, 15029, LJ_TNIL); + dasm_put(Dst, 15043, LJ_TNIL); break; case BC_FUNCC: case BC_FUNCCW: - dasm_put(Dst, 15051, Dt8(->f), Dt1(->base), 8*LUA_MINSTACK, Dt1(->maxstack), Dt1(->top)); + dasm_put(Dst, 15065, Dt8(->f), Dt1(->base), 8*LUA_MINSTACK, Dt1(->maxstack), Dt1(->top)); if (op == BC_FUNCC) { - dasm_put(Dst, 15080); + dasm_put(Dst, 15094); } else { - dasm_put(Dst, 15084); + dasm_put(Dst, 15098); } - dasm_put(Dst, 15092, DISPATCH_GL(vmstate), ~LJ_VMST_C); + dasm_put(Dst, 15106, DISPATCH_GL(vmstate), ~LJ_VMST_C); if (op == BC_FUNCC) { - dasm_put(Dst, 15101); + dasm_put(Dst, 15115); } else { - dasm_put(Dst, 15105, DISPATCH_GL(wrapf)); + dasm_put(Dst, 15119, DISPATCH_GL(wrapf)); } - dasm_put(Dst, 15110, DISPATCH_GL(vmstate), ~LJ_VMST_INTERP, Dt1(->base), Dt1(->top)); + dasm_put(Dst, 15124, DISPATCH_GL(vmstate), ~LJ_VMST_INTERP, Dt1(->base), Dt1(->top)); break; /* ---------------------------------------------------------------------- */ @@ -2339,7 +2347,7 @@ static int build_backend(BuildCtx *ctx) build_subroutines(ctx, cmov, sse); - dasm_put(Dst, 15135); + dasm_put(Dst, 15149); for (op = 0; op < BC__MAX; op++) build_ins(ctx, (BCOp)op, op, cmov, sse); diff --git a/src/lj_dispatch.c b/src/lj_dispatch.c index 72211dca..42ffd2b8 100644 --- a/src/lj_dispatch.c +++ b/src/lj_dispatch.c @@ -57,21 +57,30 @@ void lj_dispatch_init_hotcount(global_State *g) } #endif +/* Internal dispatch mode bits. */ +#define DISPMODE_JIT 0x01 /* JIT compiler on. */ +#define DISPMODE_REC 0x02 /* Recording active. */ +#define DISPMODE_INS 0x04 /* Override instruction dispatch. */ +#define DISPMODE_CALL 0x08 /* Override call dispatch. */ + /* Update dispatch table depending on various flags. */ void lj_dispatch_update(global_State *g) { uint8_t oldmode = g->dispatchmode; uint8_t mode = 0; #if LJ_HASJIT - mode |= (G2J(g)->flags & JIT_F_ON) ? 1 : 0; - mode |= G2J(g)->state != LJ_TRACE_IDLE ? 6 : 0; + mode |= (G2J(g)->flags & JIT_F_ON) ? DISPMODE_JIT : 0; + mode |= G2J(g)->state != LJ_TRACE_IDLE ? (DISPMODE_REC|DISPMODE_INS) : 0; #endif - mode |= (g->hookmask & (LUA_MASKLINE|LUA_MASKCOUNT)) ? 2 : 0; + mode |= (g->hookmask & (LUA_MASKLINE|LUA_MASKCOUNT)) ? DISPMODE_INS : 0; + mode |= (g->hookmask & LUA_MASKCALL) ? DISPMODE_CALL : 0; if (oldmode != mode) { /* Mode changed? */ ASMFunction *disp = G2GG(g)->dispatch; ASMFunction f_forl, f_iterl, f_loop, f_funcf, f_funcv; g->dispatchmode = mode; - if ((mode & 5) == 1) { /* Hotcount if JIT is on, but not when recording. */ + + /* Hotcount if JIT is on, but not while recording. */ + if ((mode & (DISPMODE_JIT|DISPMODE_REC)) == DISPMODE_JIT) { f_forl = makeasmfunc(lj_bc_ofs[BC_FORL]); f_iterl = makeasmfunc(lj_bc_ofs[BC_ITERL]); f_loop = makeasmfunc(lj_bc_ofs[BC_LOOP]); @@ -81,38 +90,53 @@ void lj_dispatch_update(global_State *g) f_forl = disp[GG_LEN_DDISP+BC_IFORL]; f_iterl = disp[GG_LEN_DDISP+BC_IITERL]; f_loop = disp[GG_LEN_DDISP+BC_ILOOP]; - f_funcf = disp[GG_LEN_DDISP+BC_IFUNCF]; - f_funcv = disp[GG_LEN_DDISP+BC_IFUNCV]; + f_funcf = makeasmfunc(lj_bc_ofs[BC_IFUNCF]); + f_funcv = makeasmfunc(lj_bc_ofs[BC_IFUNCV]); } - /* Set static counting ins first (may be copied below). */ + /* Init static counting instruction dispatch first (may be copied below). */ disp[GG_LEN_DDISP+BC_FORL] = f_forl; disp[GG_LEN_DDISP+BC_ITERL] = f_iterl; disp[GG_LEN_DDISP+BC_LOOP] = f_loop; - disp[GG_LEN_DDISP+BC_FUNCF] = f_funcf; - disp[GG_LEN_DDISP+BC_FUNCV] = f_funcv; - if ((oldmode & 6) != (mode & 6)) { /* Need to change whole table? */ - if ((mode & 6) == 0) { /* No hooks and no recording? */ + + /* Set dynamic instruction dispatch. */ + if ((oldmode ^ mode) & (DISPMODE_REC|DISPMODE_INS)) { + /* Need to update the whole table. */ + if (!(mode & (DISPMODE_REC|DISPMODE_INS))) { /* No ins dispatch? */ /* Copy static dispatch table to dynamic dispatch table. */ memcpy(&disp[0], &disp[GG_LEN_DDISP], GG_LEN_SDISP*sizeof(ASMFunction)); } else { /* The recording dispatch also checks for hooks. */ - ASMFunction f = (mode & 6) == 6 ? lj_vm_record : lj_vm_hook; + ASMFunction f = (mode & DISPMODE_REC) ? lj_vm_record : lj_vm_hook; uint32_t i; - for (i = 0; i < BC_FUNCF; i++) + for (i = 0; i < GG_LEN_SDISP; i++) disp[i] = f; - /* NYI: call hooks for function headers. */ - memcpy(&disp[BC_FUNCF], &disp[GG_LEN_DDISP+BC_FUNCF], - (GG_LEN_SDISP-BC_FUNCF)*sizeof(ASMFunction)); } - } else if ((mode & 6) == 0) { /* Set dynamic counting ins. */ + } else if (!(mode & (DISPMODE_REC|DISPMODE_INS))) { + /* Otherwise only set dynamic counting ins. */ disp[BC_FORL] = f_forl; disp[BC_ITERL] = f_iterl; disp[BC_LOOP] = f_loop; + } + + /* Set dynamic call dispatch. */ + if ((oldmode ^ mode) & DISPMODE_CALL) { /* Update the whole table? */ + uint32_t i; + if ((mode & 8) == 0) { /* No call hooks? */ + for (i = GG_LEN_SDISP; i < GG_LEN_DDISP; i++) + disp[i] = makeasmfunc(lj_bc_ofs[i]); + } else { + for (i = GG_LEN_SDISP; i < GG_LEN_DDISP; i++) + disp[i] = lj_vm_callhook; + } + } + if (!(mode & DISPMODE_CALL)) { /* Overwrite dynamic counting ins. */ disp[BC_FUNCF] = f_funcf; disp[BC_FUNCV] = f_funcv; } + #if LJ_HASJIT - if ((mode & 1) && !(oldmode & 1)) /* JIT off to on transition. */ + /* Reset hotcounts for JIT off to on transition. */ + if ((mode & DISPMODE_JIT) && !(oldmode & DISPMODE_JIT)) lj_dispatch_init_hotcount(g); #endif } @@ -279,7 +303,7 @@ static void callhook(lua_State *L, int event, BCLine line) } } -/* -- Instruction dispatch callbacks -------------------------------------- */ +/* -- Dispatch callbacks -------------------------------------------------- */ /* Calculate number of used stack slots in the current frame. */ static BCReg cur_topslot(GCproto *pt, const BCIns *pc, uint32_t nres) @@ -297,7 +321,7 @@ static BCReg cur_topslot(GCproto *pt, const BCIns *pc, uint32_t nres) } } -/* Instruction dispatch callback for instr/line hooks or when recording. */ +/* Instruction dispatch. Used by instr/line hooks or when recording. */ void LJ_FASTCALL lj_dispatch_ins(lua_State *L, const BCIns *pc) { GCfunc *fn = curr_func(L); @@ -337,3 +361,48 @@ void LJ_FASTCALL lj_dispatch_ins(lua_State *L, const BCIns *pc) } } +/* Initialize call. Ensure stack space and clear missing parameters. */ +static void call_init(lua_State *L, GCfunc *fn) +{ + if (isluafunc(fn)) { + MSize numparams = funcproto(fn)->numparams; + TValue *o; + lj_state_checkstack(L, numparams); + for (o = L->base + numparams; L->top < o; L->top++) + setnilV(L->top); /* Clear missing parameters. */ + } else { + lj_state_checkstack(L, LUA_MINSTACK); + } +} + +/* Call dispatch. Used by call hooks and hot calls. */ +ASMFunction LJ_FASTCALL lj_dispatch_call(lua_State *L, const BCIns *pc) +{ + GCfunc *fn = curr_func(L); + BCOp op; + global_State *g = G(L); +#if LJ_HASJIT + jit_State *J = G2J(g); +#endif + call_init(L, fn); +#if LJ_HASJIT + if (J->L) { /* Marker for hot call. */ + lj_trace_hot(J, pc); + goto out; + } +#endif + if ((g->hookmask & LUA_MASKCALL)) + callhook(L, LUA_HOOKCALL, -1); +#if LJ_HASJIT +out: +#endif + op = bc_op(pc[-1]); /* Get FUNC* op. */ +#if LJ_HASJIT + /* Use the non-hotcounting variants if JIT is off or while recording. */ + if ((!(J->flags & JIT_F_ON) || J->state != LJ_TRACE_IDLE) && + (op == BC_FUNCF || op == BC_FUNCV)) + op = (BCOp)((int)op+(int)BC_IFUNCF-(int)BC_FUNCF); +#endif + return makeasmfunc(lj_bc_ofs[op]); /* Return static dispatch target. */ +} + diff --git a/src/lj_dispatch.h b/src/lj_dispatch.h index 865ee790..935fa821 100644 --- a/src/lj_dispatch.h +++ b/src/lj_dispatch.h @@ -26,7 +26,7 @@ typedef uint16_t HotCount; #define GG_NUM_ASMFF 62 #define GG_LEN_DDISP (BC__MAX + GG_NUM_ASMFF) -#define GG_LEN_SDISP BC_FUNCC +#define GG_LEN_SDISP BC_FUNCF #define GG_LEN_DISP (GG_LEN_DDISP + GG_LEN_SDISP) /* Global state, main thread and extra fields are allocated together. */ @@ -64,7 +64,8 @@ LJ_FUNC void lj_dispatch_init(GG_State *GG); LJ_FUNC void lj_dispatch_init_hotcount(global_State *g); LJ_FUNC void lj_dispatch_update(global_State *g); -/* Instruction dispatch callback for instr/line hooks or when recording. */ +/* Instruction dispatch callback for hooks or when recording. */ LJ_FUNCA void LJ_FASTCALL lj_dispatch_ins(lua_State *L, const BCIns *pc); +LJ_FUNCA ASMFunction LJ_FASTCALL lj_dispatch_call(lua_State *L, const BCIns *pc); #endif diff --git a/src/lj_vm.h b/src/lj_vm.h index 46312bb8..f6ae498f 100644 --- a/src/lj_vm.h +++ b/src/lj_vm.h @@ -30,6 +30,7 @@ LJ_ASMF double lj_vm_foldfpm(double x, int op); /* Dispatch targets for recording and hooks. */ LJ_ASMF void lj_vm_record(void); LJ_ASMF void lj_vm_hook(void); +LJ_ASMF void lj_vm_callhook(void); /* Trace exit handling. */ LJ_ASMF void lj_vm_exit_handler(void); -- cgit v1.2.3-55-g6feb