aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMike Pall <mike>2009-12-22 05:04:21 +0100
committerMike Pall <mike>2009-12-22 05:04:21 +0100
commit298e3f5d54bcc676eff0be85688e4538bffce131 (patch)
tree97109c0e71448a6e5c69dfe8faff5216bda202e5 /src
parentab02f069aae80ec6772bf7e6b2856c50922d92ee (diff)
downloadluajit-298e3f5d54bcc676eff0be85688e4538bffce131.tar.gz
luajit-298e3f5d54bcc676eff0be85688e4538bffce131.tar.bz2
luajit-298e3f5d54bcc676eff0be85688e4538bffce131.zip
Add SSE2 variants for all FP ops (except vm_pow*) in interpreter.
Diffstat (limited to 'src')
-rw-r--r--src/buildvm_x86.dasc683
-rw-r--r--src/buildvm_x86.h2233
2 files changed, 1864 insertions, 1052 deletions
diff --git a/src/buildvm_x86.dasc b/src/buildvm_x86.dasc
index b220c58f..58767c1e 100644
--- a/src/buildvm_x86.dasc
+++ b/src/buildvm_x86.dasc
@@ -34,6 +34,7 @@
34|.if X64; .define RAa, rcx; .else; .define RAa, RA; .endif 34|.if X64; .define RAa, rcx; .else; .define RAa, RA; .endif
35|.define RAL, cl 35|.define RAL, cl
36|.define RB, ebp // Must be ebp (C callee-save). 36|.define RB, ebp // Must be ebp (C callee-save).
37|.if X64; .define RBa, rbp; .else; .define RBa, RB; .endif
37|.define RC, eax // Must be eax (fcomparepp and others). 38|.define RC, eax // Must be eax (fcomparepp and others).
38|.define RCW, ax 39|.define RCW, ax
39|.define RCH, ah 40|.define RCH, ah
@@ -41,6 +42,7 @@
41|.define OP, RB 42|.define OP, RB
42|.define RD, RC 43|.define RD, RC
43|.if X64; .define RDa, rax; .else; .define RDa, RD; .endif 44|.if X64; .define RDa, rax; .else; .define RDa, RD; .endif
45|.define RDW, RCW
44|.define RDL, RCL 46|.define RDL, RCL
45| 47|
46|.if not X64 48|.if not X64
@@ -323,14 +325,6 @@
323|.macro fpop1; fstp st1; .endmacro 325|.macro fpop1; fstp st1; .endmacro
324| 326|
325|// Synthesize SSE FP constants. 327|// Synthesize SSE FP constants.
326|.macro sseconst_sign, reg, tmp // Synthesize sign mask.
327|.if X64
328| mov64 tmp, U64x(80000000,00000000); movd reg, tmp
329|.else
330| mov tmp, 0x80000000; movd xmm1, tmp; pshufd reg, reg, 0x51
331|.endif
332|.endmacro
333|
334|.macro sseconst_abs, reg, tmp // Synthesize abs mask. 328|.macro sseconst_abs, reg, tmp // Synthesize abs mask.
335|.if X64 329|.if X64
336| mov64 tmp, U64x(7fffffff,ffffffff); movd reg, tmp 330| mov64 tmp, U64x(7fffffff,ffffffff); movd reg, tmp
@@ -339,21 +333,28 @@
339|.endif 333|.endif
340|.endmacro 334|.endmacro
341| 335|
342|.macro sseconst_1, reg, tmp // Synthesize 1.0. 336|.macro sseconst_hi, reg, tmp, val // Synthesize hi-32 bit const.
343|.if X64 337|.if X64
344| mov64 tmp, U64x(3ff00000,00000000) 338| mov64 tmp, U64x(val,00000000); movd reg, tmp
345| movd reg, tmp
346|.else 339|.else
347| mov tmp, 0x3ff00000; movd reg, tmp; pshufd reg, reg, 0x51 340| mov tmp, 0x .. val; movd reg, tmp; pshufd reg, reg, 0x51
348|.endif 341|.endif
349|.endmacro 342|.endmacro
350| 343|
344|.macro sseconst_sign, reg, tmp // Synthesize sign mask.
345| sseconst_hi reg, tmp, 80000000
346|.endmacro
347|.macro sseconst_1, reg, tmp // Synthesize 1.0.
348| sseconst_hi reg, tmp, 3ff00000
349|.endmacro
350|.macro sseconst_m1, reg, tmp // Synthesize -1.0.
351| sseconst_hi reg, tmp, bff00000
352|.endmacro
351|.macro sseconst_2p52, reg, tmp // Synthesize 2^52. 353|.macro sseconst_2p52, reg, tmp // Synthesize 2^52.
352|.if X64 354| sseconst_hi reg, tmp, 43300000
353| mov64 tmp, U64x(43300000,00000000); movd reg, tmp 355|.endmacro
354|.else 356|.macro sseconst_tobit, reg, tmp // Synthesize 2^52 + 2^51.
355| mov tmp, 0x43300000; movd reg, tmp; pshufd reg, reg, 0x51 357| sseconst_hi reg, tmp, 43380000
356|.endif
357|.endmacro 358|.endmacro
358| 359|
359|// Move table write barrier back. Overwrites reg. 360|// Move table write barrier back. Overwrites reg.
@@ -894,10 +895,15 @@ static void build_subroutines(BuildCtx *ctx, int cmov, int sse)
894 | jmp >2 895 | jmp >2
895 | 896 |
896 |->vmeta_tgetb: 897 |->vmeta_tgetb:
897 | movzx RC, PC_RC // Ugly, cannot fild from a byte. 898 | movzx RC, PC_RC
898 | mov ARG4, RC 899 if (sse) {
899 | fild ARG4 900 | cvtsi2sd xmm0, RC
900 | fstp TMPQ 901 | movsd TMPQ, xmm0
902 } else {
903 | mov ARG4, RC
904 | fild ARG4
905 | fstp TMPQ
906 }
901 | lea RC, TMP1 // Store temp. TValue in TMP1/TMP2. 907 | lea RC, TMP1 // Store temp. TValue in TMP1/TMP2.
902 | jmp >1 908 | jmp >1
903 | 909 |
@@ -960,10 +966,15 @@ static void build_subroutines(BuildCtx *ctx, int cmov, int sse)
960 | jmp >2 966 | jmp >2
961 | 967 |
962 |->vmeta_tsetb: 968 |->vmeta_tsetb:
963 | movzx RC, PC_RC // Ugly, cannot fild from a byte. 969 | movzx RC, PC_RC
964 | mov ARG4, RC 970 if (sse) {
965 | fild ARG4 971 | cvtsi2sd xmm0, RC
966 | fstp TMPQ 972 | movsd TMPQ, xmm0
973 } else {
974 | mov ARG4, RC
975 | fild ARG4
976 | fstp TMPQ
977 }
967 | lea RC, TMP1 // Store temp. TValue in TMP1/TMP2. 978 | lea RC, TMP1 // Store temp. TValue in TMP1/TMP2.
968 | jmp >1 979 | jmp >1
969 | 980 |
@@ -1274,6 +1285,16 @@ static void build_subroutines(BuildCtx *ctx, int cmov, int sse)
1274 | fld qword [RA] 1285 | fld qword [RA]
1275 |.endmacro 1286 |.endmacro
1276 | 1287 |
1288 |.macro .ffunc_nsse, name, op
1289 | .ffunc_1 name
1290 | cmp dword [RA+4], LJ_TISNUM; ja ->fff_fallback
1291 | op xmm0, qword [RA]
1292 |.endmacro
1293 |
1294 |.macro .ffunc_nsse, name
1295 | .ffunc_nsse name, movsd
1296 |.endmacro
1297 |
1277 |.macro .ffunc_nn, name 1298 |.macro .ffunc_nn, name
1278 | .ffunc_2 name 1299 | .ffunc_2 name
1279 | cmp dword [RA+4], LJ_TISNUM; ja ->fff_fallback 1300 | cmp dword [RA+4], LJ_TISNUM; ja ->fff_fallback
@@ -1282,6 +1303,14 @@ static void build_subroutines(BuildCtx *ctx, int cmov, int sse)
1282 | fld qword [RA+8] 1303 | fld qword [RA+8]
1283 |.endmacro 1304 |.endmacro
1284 | 1305 |
1306 |.macro .ffunc_nnsse, name
1307 | .ffunc_1 name
1308 | cmp dword [RA+4], LJ_TISNUM; ja ->fff_fallback
1309 | cmp dword [RA+12], LJ_TISNUM; ja ->fff_fallback
1310 | movsd xmm0, qword [RA]
1311 | movsd xmm1, qword [RA+8]
1312 |.endmacro
1313 |
1285 |.macro .ffunc_nnr, name 1314 |.macro .ffunc_nnr, name
1286 | .ffunc_2 name 1315 | .ffunc_2 name
1287 | cmp dword [RA+4], LJ_TISNUM; ja ->fff_fallback 1316 | cmp dword [RA+4], LJ_TISNUM; ja ->fff_fallback
@@ -1440,8 +1469,11 @@ static void build_subroutines(BuildCtx *ctx, int cmov, int sse)
1440 | // Only handles the number case inline (without a base argument). 1469 | // Only handles the number case inline (without a base argument).
1441 | cmp NARGS:RC, 1+1; jne ->fff_fallback // Exactly one argument. 1470 | cmp NARGS:RC, 1+1; jne ->fff_fallback // Exactly one argument.
1442 | cmp dword [RA+4], LJ_TISNUM; ja ->fff_fallback 1471 | cmp dword [RA+4], LJ_TISNUM; ja ->fff_fallback
1443 | fld qword [RA] 1472 if (sse) {
1444 | jmp ->fff_resn 1473 | movsd xmm0, qword [RA]; jmp ->fff_resxmm0
1474 } else {
1475 | fld qword [RA]; jmp ->fff_resn
1476 }
1445 | 1477 |
1446 |.ffunc_1 tostring 1478 |.ffunc_1 tostring
1447 | // Only handles the string or number case inline. 1479 | // Only handles the string or number case inline.
@@ -1531,13 +1563,33 @@ static void build_subroutines(BuildCtx *ctx, int cmov, int sse)
1531 |.ffunc_1 ipairs_aux 1563 |.ffunc_1 ipairs_aux
1532 | cmp dword [RA+4], LJ_TTAB; jne ->fff_fallback 1564 | cmp dword [RA+4], LJ_TTAB; jne ->fff_fallback
1533 | cmp dword [RA+12], LJ_TISNUM; ja ->fff_fallback 1565 | cmp dword [RA+12], LJ_TISNUM; ja ->fff_fallback
1534 | fld qword [RA+8] 1566 | // Caveat: xmm0/xmm1/ARG2 used in getinth call, too.
1535 | fld1 1567 if (sse) {
1536 | faddp st1 1568 | movsd xmm0, qword [RA+8]
1537 | fist ARG2 // Caveat: used in getinth call, too. 1569 | sseconst_1 xmm1, RBa
1538 | fstp qword [RA-8] 1570 |.if X64WIN
1571 | addsd xmm1, xmm0
1572 | cvtsd2si RC, xmm1
1573 | movsd qword [RA-8], xmm1
1574 |.else
1575 | addsd xmm0, xmm1
1576 | cvtsd2si RC, xmm0
1577 | movsd qword [RA-8], xmm0
1578 | .if not X64
1579 | mov ARG2, RC
1580 | .endif
1581 |.endif
1582 } else {
1583 |.if not X64
1584 | fld qword [RA+8]
1585 | fld1
1586 | faddp st1
1587 | fist ARG2
1588 | fstp qword [RA-8]
1589 | mov RC, ARG2
1590 |.endif
1591 }
1539 | mov TAB:RB, [RA] 1592 | mov TAB:RB, [RA]
1540 | mov RC, ARG2
1541 | cmp RC, TAB:RB->asize; jae >2 // Not in array part? 1593 | cmp RC, TAB:RB->asize; jae >2 // Not in array part?
1542 | shl RC, 3 1594 | shl RC, 3
1543 | add RC, TAB:RB->array 1595 | add RC, TAB:RB->array
@@ -1572,8 +1624,13 @@ static void build_subroutines(BuildCtx *ctx, int cmov, int sse)
1572 | mov CFUNC:RC, CFUNC:RB->upvalue[0] 1624 | mov CFUNC:RC, CFUNC:RB->upvalue[0]
1573 | mov dword [RA-4], LJ_TFUNC 1625 | mov dword [RA-4], LJ_TFUNC
1574 | mov [RA-8], CFUNC:RC 1626 | mov [RA-8], CFUNC:RC
1575 | fldz 1627 if (sse) {
1576 | fstp qword [RA+8] 1628 | xorps xmm0, xmm0
1629 | movsd qword [RA+8], xmm0
1630 } else {
1631 | fldz
1632 | fstp qword [RA+8]
1633 }
1577 | mov RD, 1+3 1634 | mov RD, 1+3
1578 | jmp ->fff_res 1635 | jmp ->fff_res
1579 | 1636 |
@@ -1804,11 +1861,25 @@ static void build_subroutines(BuildCtx *ctx, int cmov, int sse)
1804 | 1861 |
1805 |//-- Math library ------------------------------------------------------- 1862 |//-- Math library -------------------------------------------------------
1806 | 1863 |
1807 |.ffunc_n math_abs 1864 if (sse) {
1808 | fabs 1865 |->fff_resn:
1809 | // fallthrough 1866 | fstp qword [RA-8]
1810 |->fff_resn: 1867 | jmp ->fff_res1
1811 | fstp qword [RA-8] 1868 |
1869 |.ffunc_nsse math_abs
1870 | sseconst_abs xmm1, RDa
1871 | andps xmm0, xmm1
1872 |->fff_resxmm0:
1873 | movsd qword [RA-8], xmm0
1874 | // fallthrough
1875 } else {
1876 |.ffunc_n math_abs
1877 | fabs
1878 | // fallthrough
1879 |->fff_resxmm0: // Dummy.
1880 |->fff_resn:
1881 | fstp qword [RA-8]
1882 }
1812 |->fff_res1: 1883 |->fff_res1:
1813 | mov RD, 1+1 1884 | mov RD, 1+1
1814 |->fff_res: 1885 |->fff_res:
@@ -1832,10 +1903,15 @@ static void build_subroutines(BuildCtx *ctx, int cmov, int sse)
1832 | mov RA, -8 // Results start at BASE+RA = BASE-8. 1903 | mov RA, -8 // Results start at BASE+RA = BASE-8.
1833 | jmp ->vm_return 1904 | jmp ->vm_return
1834 | 1905 |
1835 |.ffunc_n math_floor; call ->vm_floor; jmp ->fff_resn 1906 if (sse) {
1836 |.ffunc_n math_ceil; call ->vm_ceil; jmp ->fff_resn 1907 |.ffunc_nsse math_sqrt, sqrtsd; jmp ->fff_resxmm0
1837 | 1908 |.ffunc_nsse math_floor; call ->vm_floor; jmp ->fff_resxmm0
1838 |.ffunc_n math_sqrt; fsqrt; jmp ->fff_resn 1909 |.ffunc_nsse math_ceil; call ->vm_ceil; jmp ->fff_resxmm0
1910 } else {
1911 |.ffunc_n math_sqrt; fsqrt; jmp ->fff_resn
1912 |.ffunc_n math_floor; call ->vm_floor; jmp ->fff_resn
1913 |.ffunc_n math_ceil; call ->vm_ceil; jmp ->fff_resn
1914 }
1839 | 1915 |
1840 |.ffunc_n math_log, fldln2; fyl2x; jmp ->fff_resn 1916 |.ffunc_n math_log, fldln2; fyl2x; jmp ->fff_resn
1841 |.ffunc_n math_log10, fldlg2; fyl2x; jmp ->fff_resn 1917 |.ffunc_n math_log10, fldlg2; fyl2x; jmp ->fff_resn
@@ -1854,14 +1930,27 @@ static void build_subroutines(BuildCtx *ctx, int cmov, int sse)
1854 |.ffunc_n math_atan; fld1; fpatan; jmp ->fff_resn 1930 |.ffunc_n math_atan; fld1; fpatan; jmp ->fff_resn
1855 | 1931 |
1856 |.macro math_extern, func 1932 |.macro math_extern, func
1857 |.ffunc_n math_ .. func 1933 ||if (sse) {
1934 | .ffunc_nsse math_ .. func
1935 | .if not X64
1936 | movsd FPARG1, xmm0
1937 | .endif
1938 ||} else {
1939 | .if not X64
1940 | .ffunc_n math_ .. func
1941 | fstp FPARG1
1942 | .endif
1943 ||}
1858 | mov TMP1, RA 1944 | mov TMP1, RA
1859 | fstp FPARG1
1860 | mov RB, BASE 1945 | mov RB, BASE
1861 | call extern lj_wrapper_ .. func 1946 | call extern lj_wrapper_ .. func
1862 | mov RA, TMP1 1947 | mov RA, TMP1
1863 | mov BASE, RB 1948 | mov BASE, RB
1864 | jmp ->fff_resn 1949 | .if X64
1950 | jmp ->fff_resxmm0
1951 | .else
1952 | jmp ->fff_resn
1953 | .endif
1865 |.endmacro 1954 |.endmacro
1866 | 1955 |
1867 | math_extern sinh 1956 | math_extern sinh
@@ -1869,7 +1958,15 @@ static void build_subroutines(BuildCtx *ctx, int cmov, int sse)
1869 | math_extern tanh 1958 | math_extern tanh
1870 | 1959 |
1871 |->ff_math_deg: 1960 |->ff_math_deg:
1872 |.ffunc_n math_rad; fmul qword CFUNC:RB->upvalue[0]; jmp ->fff_resn 1961 if (sse) {
1962 |.ffunc_nsse math_rad
1963 | mulsd xmm0, qword CFUNC:RB->upvalue[0]
1964 | jmp ->fff_resxmm0
1965 } else {
1966 |.ffunc_n math_rad
1967 | fmul qword CFUNC:RB->upvalue[0]
1968 | jmp ->fff_resn
1969 }
1873 | 1970 |
1874 |.ffunc_nn math_atan2; fpatan; jmp ->fff_resn 1971 |.ffunc_nn math_atan2; fpatan; jmp ->fff_resn
1875 |.ffunc_nnr math_ldexp; fscale; fpop1; jmp ->fff_resn 1972 |.ffunc_nnr math_ldexp; fscale; fpop1; jmp ->fff_resn
@@ -1885,31 +1982,64 @@ static void build_subroutines(BuildCtx *ctx, int cmov, int sse)
1885 | cmp RB, 0x00200000; jb >4 1982 | cmp RB, 0x00200000; jb >4
1886 |1: 1983 |1:
1887 | shr RB, 21; sub RB, RC // Extract and unbias exponent. 1984 | shr RB, 21; sub RB, RC // Extract and unbias exponent.
1888 | mov TMP1, RB; fild TMP1 1985 if (sse) {
1986 | cvtsi2sd xmm0, RB
1987 } else {
1988 | mov TMP1, RB; fild TMP1
1989 }
1889 | mov RB, [RA-4] 1990 | mov RB, [RA-4]
1890 | and RB, 0x800fffff // Mask off exponent. 1991 | and RB, 0x800fffff // Mask off exponent.
1891 | or RB, 0x3fe00000 // Put mantissa in range [0.5,1) or 0. 1992 | or RB, 0x3fe00000 // Put mantissa in range [0.5,1) or 0.
1892 | mov [RA-4], RB 1993 | mov [RA-4], RB
1893 |2: 1994 |2:
1894 | fstp qword [RA] 1995 if (sse) {
1996 | movsd qword [RA], xmm0
1997 } else {
1998 | fstp qword [RA]
1999 }
1895 | mov RD, 1+2 2000 | mov RD, 1+2
1896 | jmp ->fff_res 2001 | jmp ->fff_res
1897 |3: // Return +-0, +-Inf, NaN unmodified and an exponent of 0. 2002 |3: // Return +-0, +-Inf, NaN unmodified and an exponent of 0.
1898 | fldz; jmp <2 2003 if (sse) {
2004 | xorps xmm0, xmm0; jmp <2
2005 } else {
2006 | fldz; jmp <2
2007 }
1899 |4: // Handle denormals by multiplying with 2^54 and adjusting the bias. 2008 |4: // Handle denormals by multiplying with 2^54 and adjusting the bias.
1900 | fld qword [RA] 2009 if (sse) {
1901 | mov TMP1, 0x5a800000; fmul TMP1 // x = x*2^54 2010 | movsd xmm0, qword [RA]
1902 | fstp qword [RA-8] 2011 | sseconst_hi xmm1, RBa, 43500000 // 2^54.
2012 | mulsd xmm0, xmm1
2013 | movsd qword [RA-8], xmm0
2014 } else {
2015 | fld qword [RA]
2016 | mov TMP1, 0x5a800000; fmul TMP1 // x = x*2^54
2017 | fstp qword [RA-8]
2018 }
1903 | mov RB, [RA-4]; mov RC, 1076; shl RB, 1; jmp <1 2019 | mov RB, [RA-4]; mov RC, 1076; shl RB, 1; jmp <1
1904 | 2020 |
1905 |.ffunc_n math_modf 2021 if (sse) {
2022 |.ffunc_nsse math_modf
2023 } else {
2024 |.ffunc_n math_modf
2025 }
1906 | mov RB, [RA+4] 2026 | mov RB, [RA+4]
1907 | shl RB, 1; cmp RB, 0xffe00000; je >4 // +-Inf? 2027 | shl RB, 1; cmp RB, 0xffe00000; je >4 // +-Inf?
1908 | fdup 2028 if (sse) {
1909 | call ->vm_trunc 2029 | movaps xmm4, xmm0
1910 | fsub st1, st0 2030 | call ->vm_trunc
1911 |1: 2031 | subsd xmm4, xmm0
1912 | fstp qword [RA-8]; fstp qword [RA] 2032 |1:
2033 | movsd qword [RA-8], xmm0
2034 | movsd qword [RA], xmm4
2035 } else {
2036 | fdup
2037 | call ->vm_trunc
2038 | fsub st1, st0
2039 |1:
2040 | fstp qword [RA-8]
2041 | fstp qword [RA]
2042 }
1913 | mov RC, [RA-4]; mov RB, [RA+4] 2043 | mov RC, [RA-4]; mov RB, [RA+4]
1914 | xor RC, RB; js >3 // Need to adjust sign? 2044 | xor RC, RB; js >3 // Need to adjust sign?
1915 |2: 2045 |2:
@@ -1918,20 +2048,41 @@ static void build_subroutines(BuildCtx *ctx, int cmov, int sse)
1918 |3: 2048 |3:
1919 | xor RB, 0x80000000; mov [RA+4], RB; jmp <2 // Flip sign of fraction. 2049 | xor RB, 0x80000000; mov [RA+4], RB; jmp <2 // Flip sign of fraction.
1920 |4: 2050 |4:
1921 | fldz; fxch; jmp <1 // Return +-Inf and +-0. 2051 if (sse) {
2052 | xorps xmm4, xmm4; jmp <1 // Return +-Inf and +-0.
2053 } else {
2054 | fldz; fxch; jmp <1 // Return +-Inf and +-0.
2055 }
1922 | 2056 |
1923 |.ffunc_nnr math_fmod 2057 |.ffunc_nnr math_fmod
1924 |1: ; fprem; fnstsw ax; sahf; jp <1 2058 |1: ; fprem; fnstsw ax; sahf; jp <1
1925 | fpop1 2059 | fpop1
1926 | jmp ->fff_resn 2060 | jmp ->fff_resn
1927 | 2061 |
1928 |.ffunc_nn math_pow; call ->vm_pow; jmp ->fff_resn 2062 if (0 && sse) { // NYI
2063 |.ffunc_nnsse math_pow; call ->vm_pow; jmp ->fff_resxmm0
2064 } else {
2065 |.ffunc_nn math_pow; call ->vm_pow; jmp ->fff_resn
2066 }
1929 | 2067 |
1930 |.macro math_minmax, name, cmovop, nocmovop 2068 |.macro math_minmax, name, cmovop, nocmovop, sseop
2069 ||if (sse) {
2070 |.ffunc_nsse name
2071 | mov RB, 2
2072 |1:
2073 | cmp RB, RD
2074 | jae ->fff_resxmm0
2075 | cmp dword [RA+RB*8-4], LJ_TISNUM; ja ->fff_fallback
2076 | movsd xmm1, qword [RA+RB*8-8]
2077 | sseop xmm0, xmm1
2078 | add RB, 1
2079 | jmp <1
2080 ||} else {
1931 |.ffunc_n name 2081 |.ffunc_n name
1932 | mov RB, 2 2082 | mov RB, 2
1933 |1: 2083 |1:
1934 | cmp RB, RD; jae ->fff_resn 2084 | cmp RB, RD
2085 | jae ->fff_resn
1935 | cmp dword [RA+RB*8-4], LJ_TISNUM; ja >5 2086 | cmp dword [RA+RB*8-4], LJ_TISNUM; ja >5
1936 | fld qword [RA+RB*8-8] 2087 | fld qword [RA+RB*8-8]
1937 ||if (cmov) { 2088 ||if (cmov) {
@@ -1943,20 +2094,26 @@ static void build_subroutines(BuildCtx *ctx, int cmov, int sse)
1943 ||} 2094 ||}
1944 | add RB, 1 2095 | add RB, 1
1945 | jmp <1 2096 | jmp <1
2097 ||}
1946 |.endmacro 2098 |.endmacro
1947 | 2099 |
1948 | math_minmax math_min, fcmovnbe, jz 2100 | math_minmax math_min, fcmovnbe, jz, minsd
1949 | math_minmax math_max, fcmovbe, jnz 2101 | math_minmax math_max, fcmovbe, jnz, maxsd
1950 |5: 2102 if (!sse) {
1951 | fpop; jmp ->fff_fallback 2103 |5:
2104 | fpop; jmp ->fff_fallback
2105 }
1952 | 2106 |
1953 |//-- String library ----------------------------------------------------- 2107 |//-- String library -----------------------------------------------------
1954 | 2108 |
1955 |.ffunc_1 string_len 2109 |.ffunc_1 string_len
1956 | cmp dword [RA+4], LJ_TSTR; jne ->fff_fallback 2110 | cmp dword [RA+4], LJ_TSTR; jne ->fff_fallback
1957 | mov STR:RB, [RA] 2111 | mov STR:RB, [RA]
1958 | fild dword STR:RB->len 2112 if (sse) {
1959 | jmp ->fff_resn 2113 | cvtsi2sd xmm0, dword STR:RB->len; jmp ->fff_resxmm0
2114 } else {
2115 | fild dword STR:RB->len; jmp ->fff_resn
2116 }
1960 | 2117 |
1961 |.ffunc string_byte // Only handle the 1-arg case here. 2118 |.ffunc string_byte // Only handle the 1-arg case here.
1962 | cmp NARGS:RC, 1+1; jne ->fff_fallback 2119 | cmp NARGS:RC, 1+1; jne ->fff_fallback
@@ -1965,17 +2122,25 @@ static void build_subroutines(BuildCtx *ctx, int cmov, int sse)
1965 | cmp dword STR:RB->len, 1 2122 | cmp dword STR:RB->len, 1
1966 | jb ->fff_res0 // Return no results for empty string. 2123 | jb ->fff_res0 // Return no results for empty string.
1967 | movzx RB, byte STR:RB[1] 2124 | movzx RB, byte STR:RB[1]
1968 | mov TMP1, RB 2125 if (sse) {
1969 | fild TMP1 2126 | cvtsi2sd xmm0, RB; jmp ->fff_resxmm0
1970 | jmp ->fff_resn 2127 } else {
2128 | mov TMP1, RB; fild TMP1; jmp ->fff_resn
2129 }
1971 | 2130 |
1972 |.ffunc string_char // Only handle the 1-arg case here. 2131 |.ffunc string_char // Only handle the 1-arg case here.
1973 | ffgccheck 2132 | ffgccheck
1974 | cmp NARGS:RC, 1+1; jne ->fff_fallback // *Exactly* 1 arg. 2133 | cmp NARGS:RC, 1+1; jne ->fff_fallback // *Exactly* 1 arg.
1975 | cmp dword [RA+4], LJ_TISNUM; ja ->fff_fallback 2134 | cmp dword [RA+4], LJ_TISNUM; ja ->fff_fallback
1976 | fld qword [RA] 2135 if (sse) {
1977 | fistp TMP2 2136 | cvtsd2si RC, qword [RA]
1978 | cmp TMP2, 255; ja ->fff_fallback 2137 | cmp RC, 255; ja ->fff_fallback
2138 | mov TMP2, RC
2139 } else {
2140 | fld qword [RA]
2141 | fistp TMP2
2142 | cmp TMP2, 255; ja ->fff_fallback
2143 }
1979 | lea RC, TMP2 // Little-endian. 2144 | lea RC, TMP2 // Little-endian.
1980 | mov TMP1, RA // Save RA. 2145 | mov TMP1, RA // Save RA.
1981 | mov ARG3, 1 2146 | mov ARG3, 1
@@ -2000,16 +2165,26 @@ static void build_subroutines(BuildCtx *ctx, int cmov, int sse)
2000 | cmp NARGS:RC, 1+2; jb ->fff_fallback 2165 | cmp NARGS:RC, 1+2; jb ->fff_fallback
2001 | jna >1 2166 | jna >1
2002 | cmp dword [RA+20], LJ_TISNUM; ja ->fff_fallback 2167 | cmp dword [RA+20], LJ_TISNUM; ja ->fff_fallback
2003 | fld qword [RA+16] 2168 if (sse) {
2004 | fistp TMP2 2169 | cvtsd2si RB, qword [RA+16]
2170 | mov TMP2, RB
2171 } else {
2172 | fld qword [RA+16]
2173 | fistp TMP2
2174 }
2005 |1: 2175 |1:
2006 | cmp dword [RA+4], LJ_TSTR; jne ->fff_fallback 2176 | cmp dword [RA+4], LJ_TSTR; jne ->fff_fallback
2007 | cmp dword [RA+12], LJ_TISNUM; ja ->fff_fallback 2177 | cmp dword [RA+12], LJ_TISNUM; ja ->fff_fallback
2008 | mov STR:RB, [RA] 2178 | mov STR:RB, [RA]
2009 | mov ARG2, STR:RB 2179 | mov ARG2, STR:RB
2010 | mov RB, STR:RB->len 2180 | mov RB, STR:RB->len
2011 | fld qword [RA+8] 2181 if (sse) {
2012 | fistp ARG3 2182 | cvtsd2si RC, qword [RA+8]
2183 | mov ARG3, RC
2184 } else {
2185 | fld qword [RA+8]
2186 | fistp ARG3
2187 }
2013 | mov RC, TMP2 2188 | mov RC, TMP2
2014 | cmp RB, RC // len < end? (unsigned compare) 2189 | cmp RB, RC // len < end? (unsigned compare)
2015 | jb >5 2190 | jb >5
@@ -2055,9 +2230,13 @@ static void build_subroutines(BuildCtx *ctx, int cmov, int sse)
2055 | cmp dword [RA+4], LJ_TSTR; jne ->fff_fallback 2230 | cmp dword [RA+4], LJ_TSTR; jne ->fff_fallback
2056 | cmp dword [RA+12], LJ_TISNUM; ja ->fff_fallback 2231 | cmp dword [RA+12], LJ_TISNUM; ja ->fff_fallback
2057 | mov STR:RB, [RA] 2232 | mov STR:RB, [RA]
2058 | fld qword [RA+8] 2233 if (sse) {
2059 | fistp TMP2 2234 | cvtsd2si RC, qword [RA+8]
2060 | mov RC, TMP2 2235 } else {
2236 | fld qword [RA+8]
2237 | fistp TMP2
2238 | mov RC, TMP2
2239 }
2061 | test RC, RC 2240 | test RC, RC
2062 | jle ->fff_emptystr // Count <= 0? (or non-int) 2241 | jle ->fff_emptystr // Count <= 0? (or non-int)
2063 | cmp dword STR:RB->len, 1 2242 | cmp dword STR:RB->len, 1
@@ -2140,43 +2319,73 @@ static void build_subroutines(BuildCtx *ctx, int cmov, int sse)
2140 | mov TAB:FCARG1, [RA] // Caveat: FCARG1 == RA 2319 | mov TAB:FCARG1, [RA] // Caveat: FCARG1 == RA
2141 | call extern lj_tab_len@4 // LJ_FASTCALL (GCtab *t) 2320 | call extern lj_tab_len@4 // LJ_FASTCALL (GCtab *t)
2142 | // Length of table returned in eax (RC). 2321 | // Length of table returned in eax (RC).
2143 | mov ARG1, RC
2144 | mov RA, RB // Restore RA and BASE. 2322 | mov RA, RB // Restore RA and BASE.
2145 | mov BASE, TMP1 2323 | mov BASE, TMP1
2146 | fild ARG1 2324 if (sse) {
2147 | jmp ->fff_resn 2325 | cvtsi2sd xmm0, RC; jmp ->fff_resxmm0
2326 } else {
2327 | mov ARG1, RC; fild ARG1; jmp ->fff_resn
2328 }
2148 | 2329 |
2149 |//-- Bit library -------------------------------------------------------- 2330 |//-- Bit library --------------------------------------------------------
2150 | 2331 |
2151 |.define TOBIT_BIAS, 0x59c00000 // 2^52 + 2^51 (float, not double!). 2332 |.define TOBIT_BIAS, 0x59c00000 // 2^52 + 2^51 (float, not double!).
2152 | 2333 |
2153 |.ffunc_n bit_tobit 2334 if (sse) {
2154 | mov TMP1, TOBIT_BIAS 2335 |.ffunc_nsse bit_tobit
2155 | fadd TMP1 2336 | sseconst_tobit xmm1, RBa
2156 | fstp FPARG1 // 64 bit FP store. 2337 | addsd xmm0, xmm1
2157 | fild ARG1 // 32 bit integer load (s2lfwd ok). 2338 | movd RB, xmm0
2158 | jmp ->fff_resn 2339 | cvtsi2sd xmm0, RB
2340 | jmp ->fff_resxmm0
2341 } else {
2342 |.ffunc_n bit_tobit
2343 | mov TMP1, TOBIT_BIAS
2344 | fadd TMP1
2345 | fstp FPARG1 // 64 bit FP store.
2346 | fild ARG1 // 32 bit integer load (s2lfwd ok).
2347 | jmp ->fff_resn
2348 }
2159 | 2349 |
2160 |.macro .ffunc_bit, name 2350 |.macro .ffunc_bit, name
2351 ||if (sse) {
2352 | .ffunc_nsse name
2353 | sseconst_tobit xmm1, RBa
2354 | addsd xmm0, xmm1
2355 | movd RB, xmm0
2356 ||} else {
2161 | .ffunc_n name 2357 | .ffunc_n name
2162 | mov TMP1, TOBIT_BIAS 2358 | mov TMP1, TOBIT_BIAS
2163 | fadd TMP1 2359 | fadd TMP1
2164 | fstp FPARG1 2360 | fstp FPARG1
2165 | mov RB, ARG1 2361 | mov RB, ARG1
2362 ||}
2166 |.endmacro 2363 |.endmacro
2167 | 2364 |
2168 |.macro .ffunc_bit_op, name, ins 2365 |.macro .ffunc_bit_op, name, ins
2169 | .ffunc_bit name 2366 | .ffunc_bit name
2170 | mov NRESULTS, NARGS:RC // Save for fallback. 2367 | mov TMP2, NARGS:RC // Save for fallback.
2171 | lea RC, [RA+NARGS:RC*8-16] 2368 | lea RC, [RA+NARGS:RC*8-16]
2369 ||if (sse) {
2370 | mov TMP1, BASE // Need BASE as a scratch register.
2371 ||}
2172 |1: 2372 |1:
2173 | cmp RC, RA 2373 | cmp RC, RA
2174 | jbe ->fff_resbit 2374 | jbe ->fff_resbit_op
2175 | cmp dword [RC+4], LJ_TISNUM; ja ->fff_fallback_bit_op 2375 | cmp dword [RC+4], LJ_TISNUM; ja ->fff_fallback_bit_op
2376 ||if (sse) {
2377 | movsd xmm0, qword [RC]
2378 | addsd xmm0, xmm1
2379 | movd BASE, xmm0
2380 | ins RB, BASE
2381 ||} else {
2382 |.if not X64
2176 | fld qword [RC] 2383 | fld qword [RC]
2177 | fadd TMP1 2384 | fadd TMP1
2178 | fstp FPARG1 2385 | fstp FPARG1
2179 | ins RB, ARG1 2386 | ins RB, ARG1
2387 |.endif
2388 ||}
2180 | sub RC, 8 2389 | sub RC, 8
2181 | jmp <1 2390 | jmp <1
2182 |.endmacro 2391 |.endmacro
@@ -2191,16 +2400,39 @@ static void build_subroutines(BuildCtx *ctx, int cmov, int sse)
2191 | 2400 |
2192 |.ffunc_bit bit_bnot 2401 |.ffunc_bit bit_bnot
2193 | not RB 2402 | not RB
2194 |->fff_resbit: 2403 if (sse) {
2195 | mov ARG1, RB 2404 |->fff_resbit:
2196 | fild ARG1 2405 | cvtsi2sd xmm0, RB
2197 | jmp ->fff_resn 2406 | jmp ->fff_resxmm0
2407 |->fff_resbit_op:
2408 | cvtsi2sd xmm0, RB
2409 | mov BASE, TMP1
2410 | jmp ->fff_resxmm0
2411 } else {
2412 |->fff_resbit:
2413 |->fff_resbit_op:
2414 | mov ARG1, RB
2415 | fild ARG1
2416 | jmp ->fff_resn
2417 }
2198 | 2418 |
2199 |->fff_fallback_bit_op: 2419 |->fff_fallback_bit_op:
2200 | mov NARGS:RC, NRESULTS // Restore for fallback 2420 if (sse) {
2421 | mov BASE, TMP1
2422 }
2423 | mov NARGS:RC, TMP2 // Restore for fallback
2201 | jmp ->fff_fallback 2424 | jmp ->fff_fallback
2202 | 2425 |
2203 |.macro .ffunc_bit_sh, name, ins 2426 |.macro .ffunc_bit_sh, name, ins
2427 ||if (sse) {
2428 | .ffunc_nnsse name
2429 | sseconst_tobit xmm2, RBa
2430 | addsd xmm0, xmm2
2431 | addsd xmm1, xmm2
2432 | mov RC, RA // Assumes RA is ecx.
2433 | movd RB, xmm0
2434 | movd RA, xmm1
2435 ||} else {
2204 | .ffunc_nn name 2436 | .ffunc_nn name
2205 | mov TMP1, TOBIT_BIAS 2437 | mov TMP1, TOBIT_BIAS
2206 | fadd TMP1 2438 | fadd TMP1
@@ -2210,6 +2442,7 @@ static void build_subroutines(BuildCtx *ctx, int cmov, int sse)
2210 | mov RC, RA // Assumes RA is ecx. 2442 | mov RC, RA // Assumes RA is ecx.
2211 | mov RA, ARG3 2443 | mov RA, ARG3
2212 | mov RB, ARG1 2444 | mov RB, ARG1
2445 ||}
2213 | ins RB, cl 2446 | ins RB, cl
2214 | mov RA, RC 2447 | mov RA, RC
2215 | jmp ->fff_resbit 2448 | jmp ->fff_resbit
@@ -2461,8 +2694,10 @@ static void build_subroutines(BuildCtx *ctx, int cmov, int sse)
2461 |//----------------------------------------------------------------------- 2694 |//-----------------------------------------------------------------------
2462 | 2695 |
2463 |// FP value rounding. Called by math.floor/math.ceil fast functions 2696 |// FP value rounding. Called by math.floor/math.ceil fast functions
2464 |// and from JIT code. Arg/ret on x87 stack. No int/xmm registers modified. 2697 |// and from JIT code.
2465 |.macro vm_round, mode1, mode2 2698 |
2699 |// x87 variant: Arg/ret on x87 stack. No int/xmm registers modified.
2700 |.macro vm_round_x87, mode1, mode2
2466 | fnstcw word [esp+4] // Caveat: overwrites ARG1 and ARG2. 2701 | fnstcw word [esp+4] // Caveat: overwrites ARG1 and ARG2.
2467 | mov [esp+8], eax 2702 | mov [esp+8], eax
2468 | mov ax, mode1 2703 | mov ax, mode1
@@ -2478,14 +2713,55 @@ static void build_subroutines(BuildCtx *ctx, int cmov, int sse)
2478 | ret 2713 | ret
2479 |.endmacro 2714 |.endmacro
2480 | 2715 |
2481 |->vm_floor: 2716 |// SSE variant: arg/ret is xmm0. xmm0-xmm3 and RD (eax) modified.
2482 | vm_round 0x0400, 0xf7ff 2717 |.macro vm_round_sse, mode
2718 | sseconst_abs xmm2, RDa
2719 | sseconst_2p52 xmm3, RDa
2720 | movaps xmm1, xmm0
2721 | andpd xmm1, xmm2 // |x|
2722 | ucomisd xmm3, xmm1 // No truncation if 2^52 <= |x|.
2723 | jbe >1
2724 | andnpd xmm2, xmm0 // Isolate sign bit.
2725 |.if mode == 2 // trunc(x)?
2726 | movaps xmm0, xmm1
2727 | addsd xmm1, xmm3 // (|x| + 2^52) - 2^52
2728 | subsd xmm1, xmm3
2729 | sseconst_1 xmm3, RDa
2730 | cmpsd xmm0, xmm1, 1 // |x| < result?
2731 | andpd xmm0, xmm3
2732 | subsd xmm1, xmm0 // If yes, subtract -1.
2733 | orpd xmm1, xmm2 // Merge sign bit back in.
2734 |.else
2735 | addsd xmm1, xmm3 // (|x| + 2^52) - 2^52
2736 | subsd xmm1, xmm3
2737 | orpd xmm1, xmm2 // Merge sign bit back in.
2738 | .if mode == 1 // ceil(x)?
2739 | sseconst_m1 xmm2, RDa // Must subtract -1 to preserve -0.
2740 | cmpsd xmm0, xmm1, 6 // x > result?
2741 | .else // floor(x)?
2742 | sseconst_1 xmm2, RDa
2743 | cmpsd xmm0, xmm1, 1 // x < result?
2744 | .endif
2745 | andpd xmm0, xmm2
2746 | subsd xmm1, xmm0 // If yes, subtract +-1.
2747 |.endif
2748 | movaps xmm0, xmm1
2749 |1:
2750 | ret
2751 |.endmacro
2483 | 2752 |
2484 |->vm_ceil: 2753 |.macro vm_round, name, ssemode, mode1, mode2
2485 | vm_round 0x0800, 0xfbff 2754 |->name:
2755 ||if (!sse) {
2756 | vm_round_x87 mode1, mode2
2757 ||}
2758 |->name .. _sse:
2759 | vm_round_sse ssemode
2760 |.endmacro
2486 | 2761 |
2487 |->vm_trunc: 2762 | vm_round vm_floor, 0, 0x0400, 0xf7ff
2488 | vm_round 0x0c00, 0xffff 2763 | vm_round vm_ceil, 1, 0x0800, 0xfbff
2764 | vm_round vm_trunc, 2, 0x0c00, 0xffff
2489 | 2765 |
2490 |// FP modulo x%y. Called by BC_MOD* and vm_arith. 2766 |// FP modulo x%y. Called by BC_MOD* and vm_arith.
2491 |->vm_mod: 2767 |->vm_mod:
@@ -2532,8 +2808,8 @@ static void build_subroutines(BuildCtx *ctx, int cmov, int sse)
2532 | fldcw word [esp+4] 2808 | fldcw word [esp+4]
2533 | fmulp st1 2809 | fmulp st1
2534 | fsubp st1 2810 | fsubp st1
2811 | ret
2535 } 2812 }
2536 | ret
2537 | 2813 |
2538 |// FP exponentiation e^x and 2^x. Called by math.exp fast function and 2814 |// FP exponentiation e^x and 2^x. Called by math.exp fast function and
2539 |// from JIT code. Arg/ret on x87 stack. No int/xmm regs modified. 2815 |// from JIT code. Arg/ret on x87 stack. No int/xmm regs modified.
@@ -2662,19 +2938,51 @@ static void build_subroutines(BuildCtx *ctx, int cmov, int sse)
2662 |// Callable from C: double lj_vm_foldfpm(double x, int fpm) 2938 |// Callable from C: double lj_vm_foldfpm(double x, int fpm)
2663 |// Computes fpm(x) for extended math functions. ORDER FPM. 2939 |// Computes fpm(x) for extended math functions. ORDER FPM.
2664 |->vm_foldfpm: 2940 |->vm_foldfpm:
2665 | mov eax, [esp+12] 2941 if (sse) {
2666 | fld qword [esp+4] 2942 |.if X64WIN
2667 | cmp eax, 1; jb ->vm_floor; je ->vm_ceil 2943 | .define fpmop, CARG2d
2668 | cmp eax, 3; jb ->vm_trunc; ja >1 2944 |.elif X64
2669 | fsqrt; ret 2945 | .define fpmop, CARG1d
2670 |1: ; cmp eax, 5; jb ->vm_exp; je ->vm_exp2 2946 |.else
2671 | cmp eax, 7; je >1; ja >2 2947 | .define fpmop, eax
2948 | mov fpmop, [esp+12]
2949 | movsd xmm0, qword [esp+4]
2950 |.endif
2951 |.if X64
2952 | cmp fpmop, 1; jb ->vm_floor; je ->vm_ceil
2953 | cmp fpmop, 3; jb ->vm_trunc; ja >2
2954 | sqrtsd xmm0, xmm0; ret
2955 |.else
2956 | cmp fpmop, 1; je >1; ja >2
2957 | call ->vm_floor; jmp >7
2958 |1: ; call ->vm_ceil; jmp >7
2959 |2: ; cmp fpmop, 3; je >1; ja >2
2960 | call ->vm_trunc; jmp >7
2961 |1:
2962 | sqrtsd xmm0, xmm0
2963 |7:
2964 | movsd qword [esp+4], xmm0 // Overwrite callee-owned args.
2965 | fld qword [esp+4]
2966 | ret
2967 |.endif
2968 |2:
2969 | fld qword [esp+4]
2970 } else {
2971 | mov fpmop, [esp+12]
2972 | fld qword [esp+4]
2973 | cmp fpmop, 1; jb ->vm_floor; je ->vm_ceil
2974 | cmp fpmop, 3; jb ->vm_trunc; ja >2
2975 | fsqrt; ret
2976 |2:
2977 }
2978 | cmp fpmop, 5; jb ->vm_exp; je ->vm_exp2
2979 | cmp fpmop, 7; je >1; ja >2
2672 | fldln2; fxch; fyl2x; ret 2980 | fldln2; fxch; fyl2x; ret
2673 |1: ; fld1; fxch; fyl2x; ret 2981 |1: ; fld1; fxch; fyl2x; ret
2674 |2: ; cmp eax, 9; je >1; ja >2 2982 |2: ; cmp fpmop, 9; je >1; ja >2
2675 | fldlg2; fxch; fyl2x; ret 2983 | fldlg2; fxch; fyl2x; ret
2676 |1: ; fsin; ret 2984 |1: ; fsin; ret
2677 |2: ; cmp eax, 11; je >1; ja >9 2985 |2: ; cmp fpmop, 11; je >1; ja >9
2678 | fcos; ret 2986 | fcos; ret
2679 |1: ; fptan; fpop; ret 2987 |1: ; fptan; fpop; ret
2680 |9: ; int3 // Bad fpm. 2988 |9: ; int3 // Bad fpm.
@@ -3198,14 +3506,25 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop, int cmov, int sse)
3198 break; 3506 break;
3199 case BC_KSHORT: 3507 case BC_KSHORT:
3200 | ins_AD // RA = dst, RD = signed int16 literal 3508 | ins_AD // RA = dst, RD = signed int16 literal
3201 | fild PC_RD // Refetch signed RD from instruction. 3509 if (sse) {
3202 | fstp qword [BASE+RA*8] 3510 | movsx RD, RDW // Sign-extend literal.
3511 | cvtsi2sd xmm0, RD
3512 | movsd qword [BASE+RA*8], xmm0
3513 } else {
3514 | fild PC_RD // Refetch signed RD from instruction.
3515 | fstp qword [BASE+RA*8]
3516 }
3203 | ins_next 3517 | ins_next
3204 break; 3518 break;
3205 case BC_KNUM: 3519 case BC_KNUM:
3206 | ins_AD // RA = dst, RD = num const 3520 | ins_AD // RA = dst, RD = num const
3207 | fld qword [KBASE+RD*8] 3521 if (sse) {
3208 | fstp qword [BASE+RA*8] 3522 | movsd xmm0, qword [KBASE+RD*8]
3523 | movsd qword [BASE+RA*8], xmm0
3524 } else {
3525 | fld qword [KBASE+RD*8]
3526 | fstp qword [BASE+RA*8]
3527 }
3209 | ins_next 3528 | ins_next
3210 break; 3529 break;
3211 case BC_KPRI: 3530 case BC_KPRI:
@@ -3307,10 +3626,18 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop, int cmov, int sse)
3307 case BC_USETN: 3626 case BC_USETN:
3308 | ins_AD // RA = upvalue #, RD = num const 3627 | ins_AD // RA = upvalue #, RD = num const
3309 | mov LFUNC:RB, [BASE-8] 3628 | mov LFUNC:RB, [BASE-8]
3310 | fld qword [KBASE+RD*8] 3629 if (sse) {
3630 | movsd xmm0, qword [KBASE+RD*8]
3631 } else {
3632 | fld qword [KBASE+RD*8]
3633 }
3311 | mov UPVAL:RB, [LFUNC:RB+RA*4+offsetof(GCfuncL, uvptr)] 3634 | mov UPVAL:RB, [LFUNC:RB+RA*4+offsetof(GCfuncL, uvptr)]
3312 | mov RA, UPVAL:RB->v 3635 | mov RA, UPVAL:RB->v
3313 | fstp qword [RA] 3636 if (sse) {
3637 | movsd qword [RA], xmm0
3638 } else {
3639 | fstp qword [RA]
3640 }
3314 | ins_next 3641 | ins_next
3315 break; 3642 break;
3316 case BC_USETP: 3643 case BC_USETP:
@@ -3438,11 +3765,20 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop, int cmov, int sse)
3438 | 3765 |
3439 | // Integer key? Convert number to int and back and compare. 3766 | // Integer key? Convert number to int and back and compare.
3440 | checknum RC, >5 3767 | checknum RC, >5
3441 | fld qword [BASE+RC*8] 3768 if (sse) {
3442 | fist ARG1 3769 | movsd xmm0, qword [BASE+RC*8]
3443 | fild ARG1 3770 | cvtsd2si RC, xmm0
3444 | fcomparepp // eax (RC) modified! 3771 | cvtsi2sd xmm1, RC
3445 | mov RC, ARG1 3772 | ucomisd xmm0, xmm1
3773 } else {
3774 |.if not X64
3775 | fld qword [BASE+RC*8]
3776 | fist ARG1
3777 | fild ARG1
3778 | fcomparepp // eax (RC) modified!
3779 | mov RC, ARG1
3780 |.endif
3781 }
3446 | jne ->vmeta_tgetv // Generic numeric key? Use fallback. 3782 | jne ->vmeta_tgetv // Generic numeric key? Use fallback.
3447 | cmp RC, TAB:RB->asize // Takes care of unordered, too. 3783 | cmp RC, TAB:RB->asize // Takes care of unordered, too.
3448 | jae ->vmeta_tgetv // Not in array part? Use fallback. 3784 | jae ->vmeta_tgetv // Not in array part? Use fallback.
@@ -3551,11 +3887,20 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop, int cmov, int sse)
3551 | 3887 |
3552 | // Integer key? Convert number to int and back and compare. 3888 | // Integer key? Convert number to int and back and compare.
3553 | checknum RC, >5 3889 | checknum RC, >5
3554 | fld qword [BASE+RC*8] 3890 if (sse) {
3555 | fist ARG1 3891 | movsd xmm0, qword [BASE+RC*8]
3556 | fild ARG1 3892 | cvtsd2si RC, xmm0
3557 | fcomparepp // eax (RC) modified! 3893 | cvtsi2sd xmm1, RC
3558 | mov RC, ARG1 3894 | ucomisd xmm0, xmm1
3895 } else {
3896 |.if not X64
3897 | fld qword [BASE+RC*8]
3898 | fist ARG1
3899 | fild ARG1
3900 | fcomparepp // eax (RC) modified!
3901 | mov RC, ARG1
3902 |.endif
3903 }
3559 | jne ->vmeta_tsetv // Generic numeric key? Use fallback. 3904 | jne ->vmeta_tsetv // Generic numeric key? Use fallback.
3560 | cmp RC, TAB:RB->asize // Takes care of unordered, too. 3905 | cmp RC, TAB:RB->asize // Takes care of unordered, too.
3561 | jae ->vmeta_tsetv 3906 | jae ->vmeta_tsetv
@@ -3626,11 +3971,11 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop, int cmov, int sse)
3626 |4: // Check for __newindex if previous value is nil. 3971 |4: // Check for __newindex if previous value is nil.
3627 | cmp dword TAB:RB->metatable, 0 // Shouldn't overwrite RA for fastpath. 3972 | cmp dword TAB:RB->metatable, 0 // Shouldn't overwrite RA for fastpath.
3628 | jz <2 3973 | jz <2
3629 | mov ARG1, RA // Save RA. 3974 | mov TMP1, RA // Save RA.
3630 | mov TAB:RA, TAB:RB->metatable 3975 | mov TAB:RA, TAB:RB->metatable
3631 | test byte TAB:RA->nomm, 1<<MM_newindex 3976 | test byte TAB:RA->nomm, 1<<MM_newindex
3632 | jz ->vmeta_tsets // 'no __newindex' flag NOT set: check. 3977 | jz ->vmeta_tsets // 'no __newindex' flag NOT set: check.
3633 | mov RA, ARG1 // Restore RA. 3978 | mov RA, TMP1 // Restore RA.
3634 | jmp <2 3979 | jmp <2
3635 | 3980 |
3636 |5: // Follow hash chain. 3981 |5: // Follow hash chain.
@@ -3705,8 +4050,14 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop, int cmov, int sse)
3705 case BC_TSETM: 4050 case BC_TSETM:
3706 | ins_AD // RA = base (table at base-1), RD = num const (start index) 4051 | ins_AD // RA = base (table at base-1), RD = num const (start index)
3707 | mov TMP1, KBASE // Need one more free register. 4052 | mov TMP1, KBASE // Need one more free register.
3708 | fld qword [KBASE+RD*8] 4053 if (sse) {
3709 | fistp ARG4 // Const is guaranteed to be an int. 4054 | movsd xmm0, qword [KBASE+RD*8]
4055 } else {
4056 |.if not X64
4057 | fld qword [KBASE+RD*8]
4058 | fistp ARG4 // Const is guaranteed to be an int.
4059 |.endif
4060 }
3710 |1: 4061 |1:
3711 | lea RA, [BASE+RA*8] 4062 | lea RA, [BASE+RA*8]
3712 | mov TAB:RB, [RA-8] // Guaranteed to be a table. 4063 | mov TAB:RB, [RA-8] // Guaranteed to be a table.
@@ -3714,7 +4065,13 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop, int cmov, int sse)
3714 | jnz >7 4065 | jnz >7
3715 |2: 4066 |2:
3716 | mov RD, NRESULTS 4067 | mov RD, NRESULTS
3717 | mov KBASE, ARG4 4068 if (sse) {
4069 | cvtsd2si KBASE, xmm0 // Const is guaranteed to be an int.
4070 } else {
4071 |.if not X64
4072 | mov KBASE, ARG4
4073 |.endif
4074 }
3718 | sub RD, 1 4075 | sub RD, 1
3719 | jz >4 // Nothing to copy? 4076 | jz >4 // Nothing to copy?
3720 | add RD, KBASE // Compute needed size. 4077 | add RD, KBASE // Compute needed size.
@@ -4034,20 +4391,37 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop, int cmov, int sse)
4034 if (!vk) { 4391 if (!vk) {
4035 | cmp RB, LJ_TISNUM; ja ->vmeta_for 4392 | cmp RB, LJ_TISNUM; ja ->vmeta_for
4036 } 4393 }
4037 | fld FOR_STOP 4394 if (sse) {
4038 | fld FOR_IDX 4395 | movsd xmm0, FOR_IDX
4039 if (vk) { 4396 | movsd xmm1, FOR_STOP
4040 | fadd FOR_STEP // nidx = idx + step 4397 if (vk) {
4041 | fst FOR_IDX 4398 | addsd xmm0, FOR_STEP
4042 } 4399 | movsd FOR_IDX, xmm0
4043 | fst FOR_EXT 4400 | test RB, RB; js >3
4044 | test RB, RB // Swap lim/(n)idx if step non-negative. 4401 } else {
4045 | js >1 4402 | jl >3
4046 | fxch 4403 }
4047 |1: 4404 | ucomisd xmm1, xmm0
4048 | fcomparepp // eax (RD) modified if !cmov. 4405 |1:
4049 if (!cmov) { 4406 | movsd FOR_EXT, xmm0
4050 | movzx RD, PC_RD // Need to reload RD. 4407 } else {
4408 | fld FOR_STOP
4409 | fld FOR_IDX
4410 if (vk) {
4411 | fadd FOR_STEP // nidx = idx + step
4412 | fst FOR_IDX
4413 | fst FOR_EXT
4414 | test RB, RB; js >1
4415 } else {
4416 | fst FOR_EXT
4417 | jl >1
4418 }
4419 | fxch // Swap lim/(n)idx if step non-negative.
4420 |1:
4421 | fcomparepp // eax (RD) modified if !cmov.
4422 if (!cmov) {
4423 | movzx RD, PC_RD // Need to reload RD.
4424 }
4051 } 4425 }
4052 if (op == BC_FORI) { 4426 if (op == BC_FORI) {
4053 | jnb >2 4427 | jnb >2
@@ -4064,6 +4438,11 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop, int cmov, int sse)
4064 } 4438 }
4065 |2: 4439 |2:
4066 | ins_next 4440 | ins_next
4441 if (sse) {
4442 |3: // Invert comparison if step is negative.
4443 | ucomisd xmm0, xmm1
4444 | jmp <1
4445 }
4067 break; 4446 break;
4068 4447
4069 case BC_ITERL: 4448 case BC_ITERL:
diff --git a/src/buildvm_x86.h b/src/buildvm_x86.h
index 1f990f09..feb94924 100644
--- a/src/buildvm_x86.h
+++ b/src/buildvm_x86.h
@@ -12,7 +12,7 @@
12#define DASM_SECTION_CODE_OP 0 12#define DASM_SECTION_CODE_OP 0
13#define DASM_SECTION_CODE_SUB 1 13#define DASM_SECTION_CODE_SUB 1
14#define DASM_MAXSECTION 2 14#define DASM_MAXSECTION 2
15static const unsigned char build_actionlist[12791] = { 15static const unsigned char build_actionlist[14716] = {
16 254,1,248,10,137,202,139,173,233,137,114,252,252,15,182,141,233,139,181,233, 16 254,1,248,10,137,202,139,173,233,137,114,252,252,15,182,141,233,139,181,233,
17 139,189,233,139,108,36,48,141,12,202,141,68,194,252,252,59,141,233,15,135, 17 139,189,233,139,108,36,48,141,12,202,141,68,194,252,252,59,141,233,15,135,
18 244,11,248,9,189,237,248,1,137,40,137,104,8,131,192,16,57,200,15,130,244, 18 244,11,248,9,189,237,248,1,137,40,137,104,8,131,192,16,57,200,15,130,244,
@@ -70,428 +70,515 @@ static const unsigned char build_actionlist[12791] = {
70 233,15,132,244,32,252,247,217,193,252,233,3,137,76,36,8,139,72,4,139,0,137, 70 233,15,132,244,32,252,247,217,193,252,233,3,137,76,36,8,139,72,4,139,0,137,
71 77,4,137,69,0,137,108,36,4,252,233,244,33,248,34,137,68,36,16,199,68,36,20, 71 77,4,137,69,0,137,108,36,4,252,233,244,33,248,34,137,68,36,16,199,68,36,20,
72 237,255,141,68,36,16,128,126,252,252,235,15,133,244,247,141,139,233,137,41, 72 237,255,141,68,36,16,128,126,252,252,235,15,133,244,247,141,139,233,137,41,
73 199,65,4,237,137,205,252,233,244,248,248,35,15,182,70,252,254,137,68,36,12, 73 199,65,4,237,137,205,252,233,244,248,248,35,15,182,70,252,254,255,252,242,
74 219,68,36,12,221,92,36,16,141,68,36,16,252,233,244,247,248,36,15,182,70,252, 74 15,42,192,252,242,15,17,68,36,16,255,137,68,36,12,219,68,36,12,221,92,36,
75 254,141,4,194,248,1,15,182,110,252,255,141,44,252,234,248,2,137,108,36,4, 75 16,255,141,68,36,16,252,233,244,247,248,36,15,182,70,252,254,141,4,194,248,
76 139,108,36,48,137,68,36,8,137,44,36,137,149,233,137,116,36,24,232,251,1,1, 76 1,15,182,110,252,255,141,44,252,234,248,2,137,108,36,4,139,108,36,48,137,
77 139,149,233,133,192,15,132,244,249,248,32,15,182,78,252,253,139,104,4,139, 77 68,36,8,137,44,36,137,149,233,137,116,36,24,232,251,1,1,139,149,233,133,192,
78 0,137,108,202,4,137,4,202,139,6,15,182,204,15,182,232,131,198,4,193,232,16, 78 15,132,244,249,248,32,15,182,78,252,253,139,104,4,139,0,137,108,202,4,137,
79 252,255,36,171,248,3,139,141,233,255,137,113,252,244,141,177,233,41,214,139, 79 4,202,139,6,15,182,204,15,182,232,131,198,4,193,232,16,252,255,36,171,248,
80 105,252,248,184,3,0,0,0,252,255,165,233,248,37,137,68,36,16,199,68,36,20, 80 3,139,141,233,137,113,252,244,141,177,233,41,214,139,105,252,248,184,3,0,
81 237,141,68,36,16,128,126,252,252,235,15,133,244,247,141,139,233,137,41,199, 81 0,0,252,255,165,233,248,37,137,68,36,16,199,68,36,20,237,141,68,36,16,128,
82 65,4,237,137,205,252,233,244,248,248,38,15,182,70,252,254,137,68,36,12,219, 82 126,252,252,235,15,133,244,247,141,139,233,255,137,41,199,65,4,237,137,205,
83 68,36,12,221,92,36,16,141,68,36,16,252,233,244,247,248,39,15,182,70,252,254, 83 252,233,244,248,248,38,15,182,70,252,254,255,141,68,36,16,252,233,244,247,
84 141,4,194,248,1,15,182,110,252,255,141,44,252,234,248,2,137,108,36,4,139, 84 248,39,15,182,70,252,254,141,4,194,248,1,15,182,110,252,255,141,44,252,234,
85 108,36,48,137,68,36,8,137,44,36,137,149,233,137,116,36,24,232,251,1,2,139, 85 248,2,137,108,36,4,139,108,36,48,137,68,36,8,137,44,36,137,149,233,137,116,
86 149,233,133,192,15,132,244,249,255,15,182,78,252,253,139,108,202,4,139,12, 86 36,24,232,251,1,2,139,149,233,133,192,15,132,244,249,15,182,78,252,253,139,
87 202,137,104,4,137,8,248,40,139,6,15,182,204,15,182,232,131,198,4,193,232, 87 108,202,4,139,12,202,137,104,4,137,8,248,40,139,6,15,182,204,15,182,232,131,
88 16,252,255,36,171,248,3,139,141,233,137,113,252,244,15,182,70,252,253,139, 88 198,4,193,232,16,252,255,36,171,248,3,139,141,233,137,113,252,244,15,182,
89 108,194,4,139,4,194,137,105,20,137,65,16,141,177,233,41,214,139,105,252,248, 89 70,252,253,139,108,194,4,139,4,194,137,105,20,137,65,16,141,177,233,41,214,
90 184,4,0,0,0,252,255,165,233,248,41,15,182,110,252,252,141,4,194,141,12,202, 90 139,105,252,248,184,4,0,0,0,252,255,165,233,248,41,15,182,110,252,252,141,
91 137,108,36,12,139,108,36,48,137,68,36,8,137,76,36,4,137,44,36,137,149,233, 91 4,194,141,12,202,137,108,36,12,139,108,36,48,137,68,36,8,137,76,36,4,137,
92 137,116,36,24,232,251,1,3,248,3,139,149,233,131,252,248,1,15,135,244,42,248, 92 44,36,137,149,233,137,116,36,24,232,251,1,3,248,3,139,149,233,131,252,248,
93 4,141,118,4,15,130,244,252,248,5,15,183,70,252,254,141,180,253,134,233,248, 93 1,15,135,244,42,248,4,255,141,118,4,15,130,244,252,248,5,15,183,70,252,254,
94 6,139,6,15,182,204,15,182,232,131,198,4,193,232,16,252,255,36,171,248,43, 94 141,180,253,134,233,248,6,139,6,15,182,204,15,182,232,131,198,4,193,232,16,
95 131,198,4,129,120,253,4,239,15,130,244,5,255,252,233,244,6,248,44,129,120, 95 252,255,36,171,248,43,131,198,4,129,120,253,4,239,15,130,244,5,252,233,244,
96 253,4,239,252,233,244,4,248,45,131,252,238,4,137,108,36,12,139,108,36,48, 96 6,248,44,129,120,253,4,239,252,233,244,4,248,45,131,252,238,4,137,108,36,
97 137,68,36,8,137,76,36,4,137,44,36,137,149,233,137,116,36,24,232,251,1,4,252, 97 12,139,108,36,48,137,68,36,8,137,76,36,4,137,44,36,137,149,233,137,116,36,
98 233,244,3,248,46,141,4,199,252,233,244,247,248,47,141,4,199,141,44,252,234, 98 24,232,251,1,4,252,233,244,3,248,46,255,141,4,199,252,233,244,247,248,47,
99 149,252,233,244,248,248,48,141,4,194,137,197,252,233,244,248,248,49,255,141, 99 141,4,199,141,44,252,234,149,252,233,244,248,248,48,141,4,194,137,197,252,
100 4,194,248,1,141,44,252,234,248,2,141,12,202,137,108,36,8,139,108,36,48,137, 100 233,244,248,248,49,141,4,194,248,1,141,44,252,234,248,2,141,12,202,137,108,
101 68,36,12,15,182,70,252,252,137,76,36,4,137,68,36,16,137,44,36,137,149,233, 101 36,8,139,108,36,48,137,68,36,12,15,182,70,252,252,137,76,36,4,137,68,36,16,
102 137,116,36,24,232,251,1,5,139,149,233,133,192,15,132,244,40,248,42,137,193, 102 137,44,36,137,149,233,137,116,36,24,232,251,1,5,139,149,233,133,192,15,132,
103 41,208,137,113,252,244,141,176,233,139,105,252,248,184,3,0,0,0,129,121,253, 103 244,40,248,42,137,193,41,208,137,113,252,244,141,176,233,139,105,252,248,
104 252,252,239,15,133,244,29,252,255,165,233,248,50,141,4,194,139,108,36,48, 104 184,3,0,0,0,129,121,253,252,252,239,15,133,244,29,255,252,255,165,233,248,
105 137,68,36,4,137,44,36,137,149,233,137,116,36,24,232,251,1,6,139,149,233,252, 105 50,141,4,194,139,108,36,48,137,68,36,4,137,44,36,137,149,233,137,116,36,24,
106 233,244,42,248,29,137,76,36,20,137,68,36,16,131,252,233,8,141,4,193,139,108, 106 232,251,1,6,139,149,233,252,233,244,42,248,29,137,76,36,20,137,68,36,16,131,
107 36,48,137,76,36,4,137,68,36,8,137,44,36,137,149,233,137,116,36,24,232,251, 107 252,233,8,141,4,193,139,108,36,48,137,76,36,4,137,68,36,8,137,44,36,137,149,
108 1,7,139,149,233,255,139,76,36,20,139,68,36,16,139,105,252,248,131,192,1,57, 108 233,137,116,36,24,232,251,1,7,139,149,233,139,76,36,20,139,68,36,16,139,105,
109 215,15,132,244,51,252,255,165,233,248,52,139,108,36,48,137,76,36,4,137,44, 109 252,248,131,192,1,57,215,15,132,244,51,252,255,165,233,248,52,139,108,36,
110 36,137,149,233,137,116,36,24,232,251,1,8,139,149,233,139,70,252,252,15,182, 110 48,137,76,36,4,137,44,36,137,149,233,137,116,36,24,232,251,1,8,139,149,233,
111 204,15,182,232,193,232,16,252,255,164,253,171,233,248,53,129,252,248,239, 111 139,70,252,252,15,182,204,15,182,232,193,232,16,252,255,164,253,171,233,248,
112 15,130,244,54,139,105,4,129,252,253,239,15,131,244,54,137,68,36,20,137,105, 112 53,129,252,248,239,15,130,244,54,255,139,105,4,129,252,253,239,15,131,244,
113 252,252,139,41,137,105,252,248,131,232,2,15,132,244,248,137,76,36,16,248, 113 54,137,68,36,20,137,105,252,252,139,41,137,105,252,248,131,232,2,15,132,244,
114 1,131,193,8,139,105,4,137,105,252,252,139,41,137,105,252,248,131,232,1,15, 114 248,137,76,36,16,248,1,131,193,8,139,105,4,137,105,252,252,139,41,137,105,
115 133,244,1,139,76,36,16,248,2,255,139,68,36,20,252,233,244,55,248,56,129,252, 115 252,248,131,232,1,15,133,244,1,139,76,36,16,248,2,139,68,36,20,252,233,244,
116 248,239,15,130,244,54,139,105,4,184,237,252,247,213,57,232,255,15,71,197, 116 55,248,56,129,252,248,239,15,130,244,54,139,105,4,184,237,252,247,213,57,
117 255,15,134,244,247,137,232,248,1,255,139,105,252,248,139,132,253,197,233, 117 232,255,15,71,197,255,15,134,244,247,137,232,248,1,255,139,105,252,248,139,
118 199,65,252,252,237,137,65,252,248,252,233,244,57,248,58,129,252,248,239,15, 118 132,253,197,233,199,65,252,252,237,137,65,252,248,252,233,244,57,248,58,129,
119 130,244,54,139,105,4,129,252,253,239,15,133,244,252,248,1,139,41,139,173, 119 252,248,239,15,130,244,54,139,105,4,129,252,253,239,15,133,244,252,248,1,
120 233,248,2,133,252,237,199,65,252,252,237,15,132,244,57,139,65,252,248,139, 120 139,41,139,173,233,248,2,133,252,237,199,65,252,252,237,15,132,244,57,139,
121 131,233,199,65,252,252,237,137,105,252,248,137,76,36,16,139,141,233,255,35, 121 65,252,248,139,131,233,199,65,252,252,237,137,105,252,248,137,76,36,16,139,
122 136,233,105,201,239,3,141,233,248,3,129,185,233,239,15,133,244,250,57,129, 122 141,233,255,35,136,233,105,201,239,3,141,233,248,3,129,185,233,239,15,133,
123 233,15,132,244,251,248,4,139,137,233,133,201,15,133,244,3,252,233,244,57, 123 244,250,57,129,233,15,132,244,251,248,4,139,137,233,133,201,15,133,244,3,
124 248,5,139,105,4,129,252,253,239,15,132,244,57,255,139,1,139,76,36,16,137, 124 252,233,244,57,248,5,139,105,4,129,252,253,239,15,132,244,57,255,139,1,139,
125 105,252,252,137,65,252,248,252,233,244,57,248,6,129,252,253,239,15,132,244, 125 76,36,16,137,105,252,252,137,65,252,248,252,233,244,57,248,6,129,252,253,
126 1,129,252,253,239,15,135,244,253,189,237,248,7,252,247,213,139,172,253,171, 126 239,15,132,244,1,129,252,253,239,15,135,244,253,189,237,248,7,252,247,213,
127 233,252,233,244,2,248,59,129,252,248,239,15,130,244,54,129,121,253,4,239, 127 139,172,253,171,233,252,233,244,2,248,59,129,252,248,239,15,130,244,54,129,
128 15,133,244,54,255,139,41,131,189,233,0,15,133,244,54,129,121,253,12,239,15, 128 121,253,4,239,15,133,244,54,255,139,41,131,189,233,0,15,133,244,54,129,121,
129 133,244,54,139,65,8,137,133,233,199,65,252,252,237,137,105,252,248,252,246, 129 253,12,239,15,133,244,54,139,65,8,137,133,233,199,65,252,252,237,137,105,
130 133,233,235,15,132,244,247,128,165,233,235,139,131,233,137,171,233,137,133, 130 252,248,252,246,133,233,235,15,132,244,247,128,165,233,235,139,131,233,137,
131 233,248,1,252,233,244,57,248,60,255,129,252,248,239,15,130,244,54,129,121, 131 171,233,137,133,233,248,1,252,233,244,57,248,60,255,129,252,248,239,15,130,
132 253,4,239,15,133,244,54,139,1,139,108,36,48,137,68,36,4,137,44,36,137,205, 132 244,54,129,121,253,4,239,15,133,244,54,139,1,139,108,36,48,137,68,36,4,137,
133 137,84,36,16,131,193,8,137,76,36,8,232,251,1,9,137,252,233,139,84,36,16,139, 133 44,36,137,205,137,84,36,16,131,193,8,137,76,36,8,232,251,1,9,137,252,233,
134 40,139,64,4,137,105,252,248,137,65,252,252,252,233,244,57,248,61,129,252, 134 139,84,36,16,139,40,139,64,4,137,105,252,248,137,65,252,252,252,233,244,57,
135 248,239,15,133,244,54,129,121,253,4,239,15,135,244,54,221,1,252,233,244,62, 135 248,61,129,252,248,239,15,133,244,54,129,121,253,4,239,15,135,244,54,255,
136 248,63,129,252,248,239,15,130,244,54,255,129,121,253,4,239,15,133,244,249, 136 252,242,15,16,1,252,233,244,62,255,221,1,252,233,244,63,255,248,64,129,252,
137 139,1,248,2,199,65,252,252,237,137,65,252,248,252,233,244,57,248,3,129,121, 137 248,239,15,130,244,54,129,121,253,4,239,15,133,244,249,139,1,248,2,199,65,
138 253,4,239,15,135,244,54,131,187,233,0,15,133,244,54,139,171,233,59,171,233, 138 252,252,237,137,65,252,248,252,233,244,57,248,3,129,121,253,4,239,15,135,
139 15,130,244,247,232,244,64,248,1,255,139,108,36,48,137,141,233,137,113,252, 139 244,54,131,187,233,0,15,133,244,54,139,171,233,59,171,233,255,15,130,244,
140 252,137,116,36,24,137,84,36,16,137,202,137,252,233,232,251,1,10,139,141,233, 140 247,232,244,65,248,1,139,108,36,48,137,141,233,137,113,252,252,137,116,36,
141 139,84,36,16,252,233,244,2,248,65,129,252,248,239,15,130,244,54,15,132,244, 141 24,137,84,36,16,137,202,137,252,233,232,251,1,10,139,141,233,139,84,36,16,
142 248,248,1,129,121,253,4,239,15,133,244,54,139,41,137,108,36,4,139,108,36, 142 252,233,244,2,248,66,129,252,248,239,15,130,244,54,15,132,244,248,248,1,129,
143 48,137,44,36,137,141,233,137,113,252,252,137,84,36,16,131,193,8,137,76,36, 143 121,253,4,239,15,133,244,54,139,41,137,108,36,4,139,108,36,48,137,44,36,137,
144 8,137,116,36,24,232,251,1,11,139,141,233,139,84,36,16,133,192,15,132,244, 144 141,233,255,137,113,252,252,137,84,36,16,131,193,8,137,76,36,8,137,116,36,
145 249,139,105,8,139,65,12,137,105,252,248,137,65,252,252,139,105,16,139,65, 145 24,232,251,1,11,139,141,233,139,84,36,16,133,192,15,132,244,249,139,105,8,
146 20,137,41,137,65,4,248,66,184,237,255,252,233,244,67,248,2,199,65,12,237, 146 139,65,12,137,105,252,248,137,65,252,252,139,105,16,139,65,20,137,41,137,
147 252,233,244,1,248,3,199,65,252,252,237,252,233,244,57,248,68,129,252,248, 147 65,4,248,67,184,237,252,233,244,68,248,2,199,65,12,237,252,233,244,1,248,
148 239,15,130,244,54,129,121,253,4,239,15,133,244,54,139,133,233,199,65,252, 148 3,199,65,252,252,237,252,233,244,57,248,69,129,252,248,239,15,130,244,54,
149 252,237,137,65,252,248,199,65,12,237,255,184,237,252,233,244,67,248,69,129, 149 129,121,253,4,239,255,15,133,244,54,139,133,233,199,65,252,252,237,137,65,
150 252,248,239,15,130,244,54,129,121,253,4,239,15,133,244,54,129,121,253,12, 150 252,248,199,65,12,237,184,237,252,233,244,68,248,70,129,252,248,239,15,130,
151 239,15,135,244,54,221,65,8,217,232,222,193,219,84,36,4,221,89,252,248,139, 151 244,54,129,121,253,4,239,15,133,244,54,129,121,253,12,239,15,135,244,54,255,
152 41,139,68,36,4,59,133,233,15,131,244,248,193,224,3,3,133,233,248,1,129,120, 152 252,242,15,16,65,8,189,0,0,252,240,63,102,15,110,205,102,15,112,201,81,252,
153 253,4,239,15,132,244,70,255,139,40,139,64,4,137,41,137,65,4,252,233,244,66, 153 242,15,88,193,252,242,15,45,192,252,242,15,17,65,252,248,137,68,36,4,255,
154 248,2,131,189,233,0,15,132,244,70,137,44,36,137,84,36,16,137,205,232,251, 154 221,65,8,217,232,222,193,219,84,36,4,221,89,252,248,139,68,36,4,255,139,41,
155 1,12,137,252,233,139,84,36,16,133,192,15,133,244,1,248,70,184,237,252,233, 155 59,133,233,15,131,244,248,193,224,3,3,133,233,248,1,129,120,253,4,239,15,
156 244,67,248,71,129,252,248,239,15,130,244,54,129,121,253,4,239,15,133,244, 156 132,244,71,139,40,139,64,4,137,41,137,65,4,252,233,244,67,248,2,131,189,233,
157 54,139,133,233,255,199,65,252,252,237,137,65,252,248,217,252,238,221,89,8, 157 0,15,132,244,71,137,44,36,137,84,36,16,137,205,232,251,1,12,137,252,233,139,
158 184,237,252,233,244,67,248,72,129,252,248,239,15,130,244,54,137,113,252,252, 158 84,36,16,133,192,15,133,244,1,248,71,184,237,252,233,244,68,248,72,255,129,
159 190,237,137,202,131,193,8,131,232,1,139,105,252,248,248,1,252,246,131,233, 159 252,248,239,15,130,244,54,129,121,253,4,239,15,133,244,54,139,133,233,199,
160 235,15,133,244,249,248,2,129,121,253,252,252,239,15,133,244,29,252,255,165, 160 65,252,252,237,137,65,252,248,255,15,87,192,252,242,15,17,65,8,255,217,252,
161 233,248,3,255,131,198,1,252,233,244,2,248,73,129,252,248,239,15,130,244,54, 161 238,221,89,8,255,184,237,252,233,244,68,248,73,129,252,248,239,15,130,244,
162 129,121,253,12,239,15,133,244,54,137,113,252,252,139,105,4,137,105,12,199, 162 54,137,113,252,252,190,237,137,202,131,193,8,131,232,1,139,105,252,248,248,
163 65,4,237,139,41,139,113,8,137,105,8,137,49,190,237,137,202,129,193,239,131, 163 1,252,246,131,233,235,15,133,244,249,248,2,129,121,253,252,252,239,15,133,
164 232,2,252,233,244,1,248,9,139,116,36,24,252,233,244,54,248,74,129,252,248, 164 244,29,252,255,165,233,248,3,131,198,1,252,233,244,2,248,74,255,129,252,248,
165 239,15,130,244,54,255,139,41,137,113,252,252,137,116,36,24,137,44,36,129, 165 239,15,130,244,54,129,121,253,12,239,15,133,244,54,137,113,252,252,139,105,
166 121,253,4,239,15,133,244,9,131,189,233,0,15,133,244,9,128,189,233,235,15, 166 4,137,105,12,199,65,4,237,139,41,139,113,8,137,105,8,137,49,190,237,137,202,
167 135,244,9,139,181,233,137,116,36,4,15,132,244,247,59,181,233,15,132,244,9, 167 129,193,239,131,232,2,252,233,244,1,248,9,139,116,36,24,252,233,244,54,248,
168 248,1,141,116,198,252,240,59,181,233,15,135,244,9,255,137,181,233,139,108, 168 75,129,252,248,239,15,130,244,54,139,41,137,113,252,252,137,116,36,24,137,
169 36,48,137,141,233,131,193,8,137,141,233,139,108,36,4,141,76,193,232,41,252, 169 44,36,129,121,253,4,239,15,133,244,9,255,131,189,233,0,15,133,244,9,128,189,
170 241,57,252,238,15,132,244,249,248,2,139,68,14,4,137,70,252,252,139,4,14,137, 170 233,235,15,135,244,9,139,181,233,137,116,36,4,15,132,244,247,59,181,233,15,
171 70,252,248,131,252,238,8,57,252,238,15,133,244,2,248,3,49,201,137,76,36,12, 171 132,244,9,248,1,141,116,198,252,240,59,181,233,15,135,244,9,137,181,233,139,
172 137,76,36,8,232,244,26,199,131,233,237,139,108,36,48,139,52,36,139,149,233, 172 108,36,48,137,141,233,131,193,8,137,141,233,255,139,108,36,4,141,76,193,232,
173 129,252,248,239,15,135,244,254,248,4,139,142,233,139,190,233,255,137,142, 173 41,252,241,57,252,238,15,132,244,249,248,2,139,68,14,4,137,70,252,252,139,
174 233,137,252,254,41,206,15,132,244,252,141,4,50,193,252,238,3,59,133,233,15, 174 4,14,137,70,252,248,131,252,238,8,57,252,238,15,133,244,2,248,3,49,201,137,
175 135,244,255,137,213,41,205,248,5,139,1,137,4,41,139,65,4,137,68,41,4,131, 175 76,36,12,137,76,36,8,232,244,26,199,131,233,237,139,108,36,48,139,52,36,139,
176 193,8,57,252,249,15,133,244,5,248,6,141,70,2,199,66,252,252,237,248,7,139, 176 149,233,129,252,248,239,15,135,244,254,248,4,139,142,233,139,190,233,137,
177 116,36,24,137,68,36,20,185,252,248,252,255,252,255,252,255,252,247,198,237, 177 142,233,137,252,254,41,206,15,132,244,252,255,141,4,50,193,252,238,3,59,133,
178 15,132,244,17,252,233,244,18,248,8,199,66,252,252,237,139,142,233,255,131, 178 233,15,135,244,255,137,213,41,205,248,5,139,1,137,4,41,139,65,4,137,68,41,
179 252,233,8,137,142,233,139,1,137,2,139,65,4,137,66,4,184,237,252,233,244,7, 179 4,131,193,8,57,252,249,15,133,244,5,248,6,141,70,2,199,66,252,252,237,248,
180 248,9,139,12,36,137,185,233,137,116,36,4,137,44,36,232,251,1,0,139,149,233, 180 7,139,116,36,24,137,68,36,20,185,252,248,252,255,252,255,252,255,252,247,
181 252,233,244,4,248,9,139,116,36,24,252,233,244,54,248,75,139,173,233,137,113, 181 198,237,15,132,244,17,252,233,244,18,248,8,199,66,252,252,237,139,142,233,
182 252,252,137,116,36,24,137,44,36,131,189,233,0,15,133,244,9,128,189,233,235, 182 131,252,233,8,137,142,233,139,1,137,2,139,65,4,137,66,4,184,237,252,233,244,
183 15,135,244,9,255,139,181,233,137,116,36,4,15,132,244,247,59,181,233,15,132, 183 7,248,9,255,139,12,36,137,185,233,137,116,36,4,137,44,36,232,251,1,0,139,
184 244,9,248,1,141,116,198,252,248,59,181,233,15,135,244,9,137,181,233,139,108, 184 149,233,252,233,244,4,248,9,139,116,36,24,252,233,244,54,248,76,139,173,233,
185 36,48,137,141,233,137,141,233,139,108,36,4,141,76,193,252,240,41,252,241, 185 137,113,252,252,137,116,36,24,137,44,36,131,189,233,0,15,133,244,9,128,189,
186 57,252,238,15,132,244,249,248,2,139,68,14,4,137,70,252,252,139,4,14,137,70, 186 233,235,15,135,244,9,139,181,233,137,116,36,4,15,132,244,247,59,181,233,255,
187 252,248,131,252,238,8,57,252,238,15,133,244,2,248,3,49,201,137,76,36,12,137, 187 15,132,244,9,248,1,141,116,198,252,248,59,181,233,15,135,244,9,137,181,233,
188 76,36,8,232,244,26,255,199,131,233,237,139,108,36,48,139,52,36,139,149,233, 188 139,108,36,48,137,141,233,137,141,233,139,108,36,4,141,76,193,252,240,41,
189 129,252,248,239,15,135,244,254,248,4,139,142,233,139,190,233,137,142,233, 189 252,241,57,252,238,15,132,244,249,248,2,139,68,14,4,137,70,252,252,139,4,
190 137,252,254,41,206,15,132,244,252,141,4,50,193,252,238,3,59,133,233,15,135, 190 14,137,70,252,248,131,252,238,8,57,252,238,15,133,244,2,248,3,49,201,137,
191 244,255,137,213,41,205,248,5,139,1,137,4,41,139,65,4,137,68,41,4,131,193, 191 76,36,12,137,76,36,8,232,244,26,199,131,233,237,139,108,36,48,139,52,36,139,
192 8,57,252,249,15,133,244,5,248,6,141,70,1,248,7,255,139,116,36,24,137,68,36, 192 149,233,255,129,252,248,239,15,135,244,254,248,4,139,142,233,139,190,233,
193 20,49,201,252,247,198,237,15,132,244,17,252,233,244,18,248,8,137,116,36,4, 193 137,142,233,137,252,254,41,206,15,132,244,252,141,4,50,193,252,238,3,59,133,
194 137,44,36,232,251,1,13,248,9,139,12,36,137,185,233,137,116,36,4,137,44,36, 194 233,15,135,244,255,137,213,41,205,248,5,139,1,137,4,41,139,65,4,137,68,41,
195 232,251,1,0,139,149,233,252,233,244,4,248,76,139,108,36,48,137,113,252,252, 195 4,131,193,8,57,252,249,15,133,244,5,248,6,141,70,1,248,7,139,116,36,24,137,
196 252,247,133,233,237,15,132,244,54,137,141,233,141,68,193,252,248,137,133, 196 68,36,20,49,201,252,247,198,237,15,132,244,17,255,252,233,244,18,248,8,137,
197 233,49,192,137,133,233,176,235,255,136,133,233,252,233,244,22,248,77,129, 197 116,36,4,137,44,36,232,251,1,13,248,9,139,12,36,137,185,233,137,116,36,4,
198 252,248,239,15,130,244,54,129,121,253,4,239,15,135,244,54,221,1,217,225,248, 198 137,44,36,232,251,1,0,139,149,233,252,233,244,4,248,77,139,108,36,48,137,
199 62,221,89,252,248,248,57,184,237,248,67,137,68,36,20,248,55,252,247,198,237, 199 113,252,252,252,247,133,233,237,15,132,244,54,137,141,233,141,68,193,252,
200 15,133,244,253,248,5,56,70,252,255,15,135,244,252,255,139,6,15,182,204,15, 200 248,137,133,233,49,192,137,133,233,176,235,136,133,233,252,233,244,22,255,
201 182,232,131,198,4,193,232,16,252,255,36,171,248,6,199,68,193,252,244,237, 201 248,63,221,89,252,248,252,233,244,57,248,78,129,252,248,239,15,130,244,54,
202 131,192,1,252,233,244,5,248,7,137,202,185,252,248,252,255,252,255,252,255, 202 129,121,253,4,239,15,135,244,54,252,242,15,16,1,102,15,252,239,201,102,15,
203 252,233,244,18,248,78,129,252,248,239,15,130,244,54,129,121,253,4,239,15, 203 118,201,102,15,115,209,1,15,84,193,248,62,252,242,15,17,65,252,248,255,248,
204 135,244,54,221,1,232,244,79,252,233,244,62,248,80,129,252,248,239,255,15, 204 78,129,252,248,239,15,130,244,54,129,121,253,4,239,15,135,244,54,221,1,217,
205 130,244,54,129,121,253,4,239,15,135,244,54,221,1,232,244,81,252,233,244,62, 205 225,248,62,248,63,221,89,252,248,255,248,57,184,237,248,68,137,68,36,20,248,
206 248,82,129,252,248,239,15,130,244,54,129,121,253,4,239,15,135,244,54,221, 206 55,252,247,198,237,15,133,244,253,248,5,56,70,252,255,15,135,244,252,139,
207 1,217,252,250,252,233,244,62,248,83,129,252,248,239,255,15,130,244,54,129, 207 6,15,182,204,15,182,232,131,198,4,193,232,16,252,255,36,171,248,6,199,68,
208 121,253,4,239,15,135,244,54,217,252,237,221,1,217,252,241,252,233,244,62, 208 193,252,244,237,131,192,1,252,233,244,5,248,7,137,202,185,252,248,252,255,
209 248,84,129,252,248,239,15,130,244,54,129,121,253,4,239,15,135,244,54,217, 209 252,255,252,255,252,233,244,18,255,248,79,129,252,248,239,15,130,244,54,129,
210 252,236,221,1,217,252,241,252,233,244,62,248,85,129,252,248,239,15,130,244, 210 121,253,4,239,15,135,244,54,252,242,15,81,1,252,233,244,62,248,80,129,252,
211 54,255,129,121,253,4,239,15,135,244,54,221,1,232,244,86,252,233,244,62,248, 211 248,239,15,130,244,54,129,121,253,4,239,15,135,244,54,252,242,15,16,1,232,
212 87,129,252,248,239,15,130,244,54,129,121,253,4,239,15,135,244,54,221,1,217, 212 244,81,252,233,244,62,248,82,255,129,252,248,239,15,130,244,54,129,121,253,
213 252,254,252,233,244,62,248,88,129,252,248,239,15,130,244,54,255,129,121,253, 213 4,239,15,135,244,54,252,242,15,16,1,232,244,83,252,233,244,62,255,248,79,
214 4,239,15,135,244,54,221,1,217,252,255,252,233,244,62,248,89,129,252,248,239, 214 129,252,248,239,15,130,244,54,129,121,253,4,239,15,135,244,54,221,1,217,252,
215 15,130,244,54,129,121,253,4,239,15,135,244,54,221,1,217,252,242,221,216,252, 215 250,252,233,244,63,248,80,129,252,248,239,15,130,244,54,129,121,253,4,239,
216 233,244,62,248,90,129,252,248,239,15,130,244,54,129,121,253,4,239,15,135, 216 15,135,244,54,221,1,232,244,81,252,233,244,63,248,82,255,129,252,248,239,
217 244,54,255,221,1,217,192,216,200,217,232,222,225,217,252,250,217,252,243, 217 15,130,244,54,129,121,253,4,239,15,135,244,54,221,1,232,244,83,252,233,244,
218 252,233,244,62,248,91,129,252,248,239,15,130,244,54,129,121,253,4,239,15, 218 63,255,248,84,129,252,248,239,15,130,244,54,129,121,253,4,239,15,135,244,
219 135,244,54,221,1,217,192,216,200,217,232,222,225,217,252,250,217,201,217, 219 54,217,252,237,221,1,217,252,241,252,233,244,63,248,85,129,252,248,239,15,
220 252,243,252,233,244,62,248,92,129,252,248,239,15,130,244,54,129,121,253,4, 220 130,244,54,129,121,253,4,239,15,135,244,54,217,252,236,221,1,217,252,241,
221 239,15,135,244,54,221,1,217,232,217,252,243,252,233,244,62,248,93,255,129, 221 252,233,244,63,248,86,129,252,248,239,255,15,130,244,54,129,121,253,4,239,
222 252,248,239,15,130,244,54,129,121,253,4,239,15,135,244,54,221,1,137,76,36, 222 15,135,244,54,221,1,232,244,87,252,233,244,63,248,88,129,252,248,239,15,130,
223 16,221,28,36,137,213,232,251,1,14,139,76,36,16,137,252,234,252,233,244,62, 223 244,54,129,121,253,4,239,15,135,244,54,221,1,217,252,254,252,233,244,63,248,
224 248,94,129,252,248,239,15,130,244,54,129,121,253,4,239,15,135,244,54,221, 224 89,129,252,248,239,255,15,130,244,54,129,121,253,4,239,15,135,244,54,221,
225 1,137,76,36,16,221,28,36,137,213,232,251,1,15,139,76,36,16,137,252,234,252, 225 1,217,252,255,252,233,244,63,248,90,129,252,248,239,15,130,244,54,129,121,
226 233,244,62,248,95,129,252,248,239,15,130,244,54,255,129,121,253,4,239,15, 226 253,4,239,15,135,244,54,221,1,217,252,242,221,216,252,233,244,63,248,91,129,
227 135,244,54,221,1,137,76,36,16,221,28,36,137,213,232,251,1,16,139,76,36,16, 227 252,248,239,15,130,244,54,255,129,121,253,4,239,15,135,244,54,221,1,217,192,
228 137,252,234,252,233,244,62,248,96,248,97,129,252,248,239,15,130,244,54,129, 228 216,200,217,232,222,225,217,252,250,217,252,243,252,233,244,63,248,92,129,
229 121,253,4,239,15,135,244,54,221,1,220,141,233,252,233,244,62,248,98,129,252, 229 252,248,239,15,130,244,54,129,121,253,4,239,15,135,244,54,221,1,217,192,216,
230 248,239,15,130,244,54,255,129,121,253,4,239,15,135,244,54,129,121,253,12, 230 200,217,232,222,225,217,252,250,217,201,217,252,243,252,233,244,63,248,93,
231 239,15,135,244,54,221,1,221,65,8,217,252,243,252,233,244,62,248,99,129,252, 231 129,252,248,239,15,130,244,54,129,121,253,4,239,15,135,244,54,255,221,1,217,
232 248,239,15,130,244,54,129,121,253,4,239,15,135,244,54,129,121,253,12,239, 232 232,217,252,243,252,233,244,63,255,248,94,129,252,248,239,15,130,244,54,129,
233 15,135,244,54,221,65,8,221,1,217,252,253,221,217,252,233,244,62,248,100,255, 233 121,253,4,239,15,135,244,54,252,242,15,16,1,252,242,15,17,4,36,255,248,94,
234 129,252,248,239,15,130,244,54,139,105,4,129,252,253,239,15,135,244,54,139, 234 129,252,248,239,15,130,244,54,129,121,253,4,239,15,135,244,54,221,1,221,28,
235 1,137,105,252,252,137,65,252,248,209,229,129,252,253,0,0,224,252,255,15,131, 235 36,255,137,76,36,16,137,213,232,251,1,14,139,76,36,16,137,252,234,252,233,
236 244,249,9,232,15,132,244,249,184,252,254,3,0,0,129,252,253,0,0,32,0,15,130, 236 244,63,255,248,95,129,252,248,239,15,130,244,54,129,121,253,4,239,15,135,
237 244,250,248,1,193,252,237,21,41,197,137,108,36,16,219,68,36,16,139,105,252, 237 244,54,252,242,15,16,1,252,242,15,17,4,36,255,248,95,129,252,248,239,15,130,
238 252,129,229,252,255,252,255,15,128,129,205,0,0,224,63,137,105,252,252,248, 238 244,54,129,121,253,4,239,15,135,244,54,221,1,221,28,36,255,137,76,36,16,137,
239 2,221,25,184,237,252,233,244,67,248,3,217,252,238,252,233,244,2,248,4,255, 239 213,232,251,1,15,139,76,36,16,137,252,234,252,233,244,63,255,248,96,129,252,
240 221,1,199,68,36,16,0,0,128,90,216,76,36,16,221,89,252,248,139,105,252,252, 240 248,239,15,130,244,54,129,121,253,4,239,15,135,244,54,252,242,15,16,1,252,
241 184,52,4,0,0,209,229,252,233,244,1,248,101,129,252,248,239,15,130,244,54, 241 242,15,17,4,36,255,248,96,129,252,248,239,15,130,244,54,129,121,253,4,239,
242 129,121,253,4,239,15,135,244,54,221,1,139,105,4,209,229,129,252,253,0,0,224, 242 15,135,244,54,221,1,221,28,36,255,137,76,36,16,137,213,232,251,1,16,139,76,
243 252,255,15,132,244,250,217,192,232,244,102,220,252,233,248,1,221,89,252,248, 243 36,16,137,252,234,252,233,244,63,248,97,255,248,98,129,252,248,239,15,130,
244 221,25,139,65,252,252,139,105,4,49,232,15,136,244,249,248,2,184,237,252,233, 244 244,54,129,121,253,4,239,15,135,244,54,252,242,15,16,1,252,242,15,89,133,
245 244,67,248,3,255,129,252,245,0,0,0,128,137,105,4,252,233,244,2,248,4,217, 245 233,252,233,244,62,255,248,98,129,252,248,239,15,130,244,54,129,121,253,4,
246 252,238,217,201,252,233,244,1,248,103,129,252,248,239,15,130,244,54,129,121, 246 239,15,135,244,54,221,1,220,141,233,252,233,244,63,255,248,99,129,252,248,
247 253,4,239,15,135,244,54,129,121,253,12,239,15,135,244,54,221,65,8,221,1,248, 247 239,15,130,244,54,129,121,253,4,239,15,135,244,54,129,121,253,12,239,15,135,
248 1,217,252,248,223,224,158,15,138,244,1,221,217,252,233,244,62,248,104,255, 248 244,54,221,1,221,65,8,217,252,243,252,233,244,63,248,100,129,252,248,239,
249 129,252,248,239,15,130,244,54,129,121,253,4,239,15,135,244,54,129,121,253, 249 15,130,244,54,129,121,253,4,239,15,135,244,54,129,121,253,12,239,255,15,135,
250 12,239,15,135,244,54,221,1,221,65,8,232,244,105,252,233,244,62,248,106,129, 250 244,54,221,65,8,221,1,217,252,253,221,217,252,233,244,63,248,101,129,252,
251 252,248,239,15,130,244,54,129,121,253,4,239,15,135,244,54,255,221,1,189,2, 251 248,239,15,130,244,54,139,105,4,129,252,253,239,15,135,244,54,139,1,137,105,
252 0,0,0,248,1,57,197,15,131,244,62,129,124,253,252,233,252,252,239,15,135,244, 252 252,252,137,65,252,248,209,229,129,252,253,0,0,224,252,255,15,131,244,249,
253 251,221,68,252,233,252,248,255,219,252,233,219,209,221,217,255,80,221,225, 253 9,232,15,132,244,249,184,252,254,3,0,0,129,252,253,0,0,32,0,15,130,244,250,
254 223,224,252,246,196,1,15,132,244,248,217,201,248,2,221,216,88,255,131,197, 254 248,1,193,252,237,21,41,197,255,252,242,15,42,197,255,137,108,36,16,219,68,
255 1,252,233,244,1,248,107,129,252,248,239,15,130,244,54,129,121,253,4,239,15, 255 36,16,255,139,105,252,252,129,229,252,255,252,255,15,128,129,205,0,0,224,
256 135,244,54,221,1,189,2,0,0,0,248,1,57,197,15,131,244,62,129,124,253,252,233, 256 63,137,105,252,252,248,2,255,252,242,15,17,1,255,221,25,255,184,237,252,233,
257 252,252,239,15,135,244,251,221,68,252,233,252,248,255,219,252,233,218,209, 257 244,68,248,3,255,15,87,192,252,233,244,2,255,217,252,238,252,233,244,2,255,
258 221,217,255,80,221,225,223,224,252,246,196,1,15,133,244,248,217,201,248,2, 258 252,242,15,16,1,189,0,0,80,67,102,15,110,205,102,15,112,201,81,252,242,15,
259 221,216,88,255,131,197,1,252,233,244,1,248,5,221,216,252,233,244,54,248,108, 259 89,193,252,242,15,17,65,252,248,255,221,1,199,68,36,16,0,0,128,90,216,76,
260 129,252,248,239,15,130,244,54,129,121,253,4,239,15,133,244,54,139,41,219, 260 36,16,221,89,252,248,255,139,105,252,252,184,52,4,0,0,209,229,252,233,244,
261 133,233,252,233,244,62,248,109,129,252,248,239,15,133,244,54,129,121,253, 261 1,255,248,102,129,252,248,239,15,130,244,54,129,121,253,4,239,15,135,244,
262 4,239,255,15,133,244,54,139,41,131,189,233,1,15,130,244,70,15,182,173,233, 262 54,252,242,15,16,1,255,248,102,129,252,248,239,15,130,244,54,129,121,253,
263 137,108,36,16,219,68,36,16,252,233,244,62,248,110,139,171,233,59,171,233, 263 4,239,15,135,244,54,221,1,255,139,105,4,209,229,129,252,253,0,0,224,252,255,
264 15,130,244,247,232,244,64,248,1,129,252,248,239,15,133,244,54,129,121,253, 264 15,132,244,250,255,15,40,224,232,244,103,252,242,15,92,224,248,1,252,242,
265 4,239,255,15,135,244,54,221,1,219,92,36,20,129,124,36,20,252,255,0,0,0,15, 265 15,17,65,252,248,252,242,15,17,33,255,217,192,232,244,103,220,252,233,248,
266 135,244,54,141,68,36,20,137,76,36,16,199,68,36,8,1,0,0,0,137,68,36,4,248, 266 1,221,89,252,248,221,25,255,139,65,252,252,139,105,4,49,232,15,136,244,249,
267 111,139,108,36,48,137,44,36,137,116,36,24,137,149,233,232,251,1,17,139,76, 267 248,2,184,237,252,233,244,68,248,3,129,252,245,0,0,0,128,137,105,4,252,233,
268 36,16,139,149,233,199,65,252,252,237,137,65,252,248,252,233,244,57,248,112, 268 244,2,248,4,255,15,87,228,252,233,244,1,255,217,252,238,217,201,252,233,244,
269 139,171,233,59,171,233,15,130,244,247,232,244,64,248,1,137,76,36,16,199,68, 269 1,255,248,104,129,252,248,239,15,130,244,54,129,121,253,4,239,15,135,244,
270 36,20,252,255,252,255,252,255,252,255,129,252,248,239,15,130,244,54,255,15, 270 54,129,121,253,12,239,15,135,244,54,221,65,8,221,1,248,1,217,252,248,223,
271 134,244,247,129,121,253,20,239,15,135,244,54,221,65,16,219,92,36,20,248,1, 271 224,158,15,138,244,1,221,217,252,233,244,63,255,248,105,129,252,248,239,15,
272 129,121,253,4,239,15,133,244,54,129,121,253,12,239,15,135,244,54,139,41,137, 272 130,244,54,129,121,253,4,239,15,135,244,54,129,121,253,12,239,15,135,244,
273 108,36,4,139,173,233,221,65,8,219,92,36,8,139,68,36,20,57,197,15,130,244, 273 54,252,242,15,16,1,252,242,15,16,73,8,232,244,106,252,233,244,62,255,248,
274 251,248,2,139,76,36,8,133,201,15,142,244,253,248,3,139,108,36,4,41,200,15, 274 105,129,252,248,239,15,130,244,54,129,121,253,4,239,15,135,244,54,129,121,
275 140,244,113,255,141,172,253,13,233,131,192,1,248,4,137,108,36,4,137,68,36, 275 253,12,239,15,135,244,54,221,1,221,65,8,232,244,106,252,233,244,63,255,248,
276 8,252,233,244,111,248,5,15,140,244,252,141,68,40,1,252,233,244,2,248,6,137, 276 107,129,252,248,239,15,130,244,54,129,121,253,4,239,15,135,244,54,252,242,
277 232,252,233,244,2,248,7,15,132,244,254,1,252,233,131,193,1,15,143,244,3,248, 277 15,16,1,189,2,0,0,0,248,1,57,197,15,131,244,62,129,124,253,252,233,252,252,
278 8,185,1,0,0,0,252,233,244,3,248,113,255,49,192,252,233,244,4,248,114,129, 278 239,15,135,244,54,252,242,15,16,76,252,233,252,248,252,242,15,93,193,131,
279 252,248,239,15,130,244,54,139,171,233,59,171,233,15,130,244,247,232,244,64, 279 197,1,252,233,244,1,255,248,107,129,252,248,239,15,130,244,54,129,121,253,
280 248,1,137,76,36,16,129,121,253,4,239,15,133,244,54,129,121,253,12,239,15, 280 4,239,15,135,244,54,221,1,189,2,0,0,0,248,1,57,197,15,131,244,63,129,124,
281 135,244,54,139,41,221,65,8,219,92,36,20,139,68,36,20,133,192,15,142,244,113, 281 253,252,233,252,252,239,15,135,244,251,221,68,252,233,252,248,255,219,252,
282 255,131,189,233,1,15,130,244,113,15,133,244,115,57,131,233,15,130,244,115, 282 233,219,209,221,217,255,80,221,225,223,224,252,246,196,1,15,132,244,248,217,
283 15,182,141,233,139,171,233,137,68,36,8,137,108,36,4,248,1,136,77,0,131,197, 283 201,248,2,221,216,88,255,248,108,129,252,248,239,15,130,244,54,129,121,253,
284 1,131,232,1,15,133,244,1,252,233,244,111,248,116,129,252,248,239,15,130,244, 284 4,239,15,135,244,54,252,242,15,16,1,189,2,0,0,0,248,1,57,197,15,131,244,62,
285 54,139,171,233,255,59,171,233,15,130,244,247,232,244,64,248,1,137,76,36,16, 285 129,124,253,252,233,252,252,239,15,135,244,54,252,242,15,16,76,252,233,252,
286 129,121,253,4,239,15,133,244,54,139,41,139,133,233,133,192,15,132,244,113, 286 248,252,242,15,95,193,131,197,1,252,233,244,1,255,248,108,129,252,248,239,
287 57,131,233,15,130,244,117,129,197,239,137,116,36,20,137,68,36,8,139,179,233, 287 15,130,244,54,129,121,253,4,239,15,135,244,54,221,1,189,2,0,0,0,248,1,57,
288 137,116,36,4,248,1,15,182,77,0,131,197,1,131,232,1,136,12,6,15,133,244,1, 288 197,15,131,244,63,129,124,253,252,233,252,252,239,15,135,244,251,221,68,252,
289 255,139,116,36,20,252,233,244,111,248,118,129,252,248,239,15,130,244,54,139, 289 233,252,248,255,219,252,233,218,209,221,217,255,80,221,225,223,224,252,246,
290 171,233,59,171,233,15,130,244,247,232,244,64,248,1,137,76,36,16,129,121,253, 290 196,1,15,133,244,248,217,201,248,2,221,216,88,255,248,5,221,216,252,233,244,
291 4,239,15,133,244,54,139,41,139,133,233,57,131,233,15,130,244,117,255,129, 291 54,255,248,109,129,252,248,239,15,130,244,54,129,121,253,4,239,15,133,244,
292 197,239,137,116,36,20,137,68,36,8,139,179,233,137,116,36,4,252,233,244,249, 292 54,139,41,255,252,242,15,42,133,233,252,233,244,62,255,219,133,233,252,233,
293 248,1,15,182,76,5,0,131,252,249,65,15,130,244,248,131,252,249,90,15,135,244, 293 244,63,255,248,110,129,252,248,239,15,133,244,54,129,121,253,4,239,15,133,
294 248,131,252,241,32,248,2,136,12,6,248,3,131,232,1,15,137,244,1,139,116,36, 294 244,54,139,41,131,189,233,1,15,130,244,71,15,182,173,233,255,252,242,15,42,
295 20,252,233,244,111,248,119,129,252,248,239,15,130,244,54,139,171,233,255, 295 197,252,233,244,62,255,137,108,36,16,219,68,36,16,252,233,244,63,255,248,
296 59,171,233,15,130,244,247,232,244,64,248,1,137,76,36,16,129,121,253,4,239, 296 111,139,171,233,59,171,233,15,130,244,247,232,244,65,248,1,129,252,248,239,
297 15,133,244,54,139,41,139,133,233,57,131,233,15,130,244,117,129,197,239,137, 297 15,133,244,54,129,121,253,4,239,15,135,244,54,255,252,242,15,45,1,61,252,
298 116,36,20,137,68,36,8,139,179,233,137,116,36,4,252,233,244,249,248,1,15,182, 298 255,0,0,0,15,135,244,54,137,68,36,20,255,221,1,219,92,36,20,129,124,36,20,
299 76,5,0,131,252,249,97,15,130,244,248,255,131,252,249,122,15,135,244,248,131, 299 252,255,0,0,0,15,135,244,54,255,141,68,36,20,137,76,36,16,199,68,36,8,1,0,
300 252,241,32,248,2,136,12,6,248,3,131,232,1,15,137,244,1,139,116,36,20,252, 300 0,0,137,68,36,4,248,112,139,108,36,48,137,44,36,137,116,36,24,137,149,233,
301 233,244,111,248,120,129,252,248,239,15,130,244,54,129,121,253,4,239,15,133, 301 232,251,1,17,139,76,36,16,139,149,233,199,65,252,252,237,137,65,252,248,252,
302 244,54,137,84,36,16,137,205,139,9,232,251,1,18,137,4,36,137,252,233,139,84, 302 233,244,57,248,113,139,171,233,59,171,233,15,130,244,247,232,244,65,248,1,
303 36,16,219,4,36,252,233,244,62,248,121,129,252,248,239,15,130,244,54,255,129, 303 137,76,36,16,199,68,36,20,252,255,252,255,252,255,252,255,129,252,248,239,
304 121,253,4,239,15,135,244,54,221,1,199,68,36,16,0,0,192,89,216,68,36,16,221, 304 15,130,244,54,15,134,244,247,129,121,253,20,239,255,252,242,15,45,105,16,
305 28,36,219,4,36,252,233,244,62,248,122,129,252,248,239,15,130,244,54,129,121, 305 137,108,36,20,255,221,65,16,219,92,36,20,255,248,1,129,121,253,4,239,15,133,
306 253,4,239,15,135,244,54,221,1,199,68,36,16,0,0,192,89,216,68,36,16,221,28, 306 244,54,129,121,253,12,239,15,135,244,54,139,41,137,108,36,4,139,173,233,255,
307 36,139,44,36,137,68,36,20,141,68,193,252,240,248,1,57,200,15,134,244,123, 307 252,242,15,45,65,8,137,68,36,8,255,221,65,8,219,92,36,8,255,139,68,36,20,
308 129,120,253,4,239,15,135,244,124,221,0,216,68,36,16,221,28,36,35,44,36,131, 308 57,197,15,130,244,251,248,2,139,76,36,8,133,201,15,142,244,253,248,3,139,
309 232,8,252,233,244,1,248,125,255,129,252,248,239,15,130,244,54,129,121,253, 309 108,36,4,41,200,15,140,244,114,141,172,253,13,233,131,192,1,248,4,137,108,
310 4,239,15,135,244,54,221,1,199,68,36,16,0,0,192,89,216,68,36,16,221,28,36, 310 36,4,137,68,36,8,252,233,244,112,248,5,15,140,244,252,141,68,40,1,252,233,
311 139,44,36,137,68,36,20,141,68,193,252,240,248,1,57,200,15,134,244,123,129, 311 244,2,248,6,137,232,252,233,244,2,248,7,255,15,132,244,254,1,252,233,131,
312 120,253,4,239,15,135,244,124,221,0,216,68,36,16,221,28,36,11,44,36,131,232, 312 193,1,15,143,244,3,248,8,185,1,0,0,0,252,233,244,3,248,114,49,192,252,233,
313 8,252,233,244,1,248,126,129,252,248,239,15,130,244,54,129,121,253,4,239,15, 313 244,4,248,115,129,252,248,239,15,130,244,54,139,171,233,59,171,233,15,130,
314 135,244,54,255,221,1,199,68,36,16,0,0,192,89,216,68,36,16,221,28,36,139,44, 314 244,247,232,244,65,248,1,255,137,76,36,16,129,121,253,4,239,15,133,244,54,
315 36,137,68,36,20,141,68,193,252,240,248,1,57,200,15,134,244,123,129,120,253, 315 129,121,253,12,239,15,135,244,54,139,41,255,252,242,15,45,65,8,255,221,65,
316 4,239,15,135,244,124,221,0,216,68,36,16,221,28,36,51,44,36,131,232,8,252, 316 8,219,92,36,20,139,68,36,20,255,133,192,15,142,244,114,131,189,233,1,15,130,
317 233,244,1,248,127,129,252,248,239,15,130,244,54,129,121,253,4,239,15,135, 317 244,114,15,133,244,116,57,131,233,15,130,244,116,15,182,141,233,139,171,233,
318 244,54,221,1,199,68,36,16,0,0,192,89,216,68,36,16,221,28,36,139,44,36,15, 318 137,68,36,8,137,108,36,4,248,1,136,77,0,131,197,1,131,232,1,15,133,244,1,
319 205,252,233,244,123,248,128,129,252,248,239,15,130,244,54,255,129,121,253, 319 252,233,244,112,248,117,129,252,248,239,15,130,244,54,255,139,171,233,59,
320 4,239,15,135,244,54,221,1,199,68,36,16,0,0,192,89,216,68,36,16,221,28,36, 320 171,233,15,130,244,247,232,244,65,248,1,137,76,36,16,129,121,253,4,239,15,
321 139,44,36,252,247,213,248,123,137,44,36,219,4,36,252,233,244,62,248,124,139, 321 133,244,54,139,41,139,133,233,133,192,15,132,244,114,57,131,233,15,130,244,
322 68,36,20,252,233,244,54,248,129,129,252,248,239,15,130,244,54,129,121,253, 322 118,129,197,239,137,116,36,20,137,68,36,8,139,179,233,137,116,36,4,248,1,
323 4,239,15,135,244,54,129,121,253,12,239,15,135,244,54,221,1,221,65,8,199,68, 323 15,182,77,0,131,197,1,131,232,1,136,12,6,15,133,244,1,255,139,116,36,20,252,
324 36,16,0,0,192,89,216,68,36,16,221,92,36,8,216,68,36,16,221,28,36,137,200, 324 233,244,112,248,119,129,252,248,239,15,130,244,54,139,171,233,59,171,233,
325 139,76,36,8,139,44,36,211,229,137,193,252,233,244,123,248,130,255,129,252, 325 15,130,244,247,232,244,65,248,1,137,76,36,16,129,121,253,4,239,15,133,244,
326 248,239,15,130,244,54,129,121,253,4,239,15,135,244,54,129,121,253,12,239, 326 54,139,41,139,133,233,57,131,233,15,130,244,118,255,129,197,239,137,116,36,
327 15,135,244,54,221,1,221,65,8,199,68,36,16,0,0,192,89,216,68,36,16,221,92, 327 20,137,68,36,8,139,179,233,137,116,36,4,252,233,244,249,248,1,15,182,76,5,
328 36,8,216,68,36,16,221,28,36,137,200,139,76,36,8,139,44,36,211,252,237,137, 328 0,131,252,249,65,15,130,244,248,131,252,249,90,15,135,244,248,131,252,241,
329 193,252,233,244,123,248,131,129,252,248,239,15,130,244,54,129,121,253,4,239, 329 32,248,2,136,12,6,248,3,131,232,1,15,137,244,1,139,116,36,20,252,233,244,
330 15,135,244,54,129,121,253,12,239,15,135,244,54,255,221,1,221,65,8,199,68, 330 112,248,120,129,252,248,239,15,130,244,54,139,171,233,255,59,171,233,15,130,
331 36,16,0,0,192,89,216,68,36,16,221,92,36,8,216,68,36,16,221,28,36,137,200, 331 244,247,232,244,65,248,1,137,76,36,16,129,121,253,4,239,15,133,244,54,139,
332 139,76,36,8,139,44,36,211,252,253,137,193,252,233,244,123,248,132,129,252, 332 41,139,133,233,57,131,233,15,130,244,118,129,197,239,137,116,36,20,137,68,
333 248,239,15,130,244,54,129,121,253,4,239,15,135,244,54,129,121,253,12,239, 333 36,8,139,179,233,137,116,36,4,252,233,244,249,248,1,15,182,76,5,0,131,252,
334 15,135,244,54,221,1,221,65,8,199,68,36,16,0,0,192,89,216,68,36,16,221,92, 334 249,97,15,130,244,248,255,131,252,249,122,15,135,244,248,131,252,241,32,248,
335 36,8,216,68,36,16,221,28,36,137,200,139,76,36,8,139,44,36,211,197,137,193, 335 2,136,12,6,248,3,131,232,1,15,137,244,1,139,116,36,20,252,233,244,112,248,
336 252,233,244,123,248,133,129,252,248,239,15,130,244,54,129,121,253,4,239,15, 336 121,129,252,248,239,15,130,244,54,129,121,253,4,239,15,133,244,54,137,84,
337 135,244,54,255,129,121,253,12,239,15,135,244,54,221,1,221,65,8,199,68,36, 337 36,16,137,205,139,9,232,251,1,18,137,252,233,139,84,36,16,255,252,242,15,
338 16,0,0,192,89,216,68,36,16,221,92,36,8,216,68,36,16,221,28,36,137,200,139, 338 42,192,252,233,244,62,255,137,4,36,219,4,36,252,233,244,63,255,248,122,129,
339 76,36,8,139,44,36,211,205,137,193,252,233,244,123,248,115,184,237,252,233, 339 252,248,239,15,130,244,54,129,121,253,4,239,15,135,244,54,252,242,15,16,1,
340 244,54,248,117,184,237,248,54,139,108,36,48,41,202,137,113,252,252,137,116, 340 189,0,0,56,67,102,15,110,205,102,15,112,201,81,252,242,15,88,193,102,15,126,
341 36,24,137,84,36,8,137,141,233,141,68,193,252,248,137,44,36,141,144,233,137, 341 197,252,242,15,42,197,252,233,244,62,255,248,122,129,252,248,239,15,130,244,
342 133,233,139,73,252,248,59,149,233,15,135,244,251,252,255,145,233,133,192, 342 54,129,121,253,4,239,15,135,244,54,221,1,199,68,36,16,0,0,192,89,216,68,36,
343 15,133,244,249,248,1,255,139,141,233,139,133,233,41,200,193,232,3,131,192, 343 16,221,28,36,219,4,36,252,233,244,63,255,248,123,129,252,248,239,15,130,244,
344 1,139,105,252,248,139,84,36,8,1,202,57,113,252,252,15,133,244,248,252,255, 344 54,129,121,253,4,239,15,135,244,54,252,242,15,16,1,189,0,0,56,67,102,15,110,
345 165,233,248,2,129,121,253,252,252,239,15,133,244,29,252,255,165,233,248,3, 345 205,102,15,112,201,81,252,242,15,88,193,102,15,126,197,255,248,123,129,252,
346 139,141,233,139,84,36,8,1,202,252,233,244,67,248,5,199,68,36,4,237,232,251, 346 248,239,15,130,244,54,129,121,253,4,239,15,135,244,54,221,1,199,68,36,16,
347 1,0,252,233,244,1,248,64,93,137,108,36,8,139,108,36,48,41,202,137,84,36,4, 347 0,0,192,89,216,68,36,16,221,28,36,139,44,36,255,137,68,36,20,141,68,193,252,
348 137,113,252,252,137,116,36,24,137,141,233,255,141,68,193,252,248,137,44,36, 348 240,255,137,84,36,16,255,248,1,57,200,15,134,244,124,129,120,253,4,239,15,
349 137,133,233,232,251,1,19,139,141,233,139,133,233,41,200,193,232,3,131,192, 349 135,244,125,255,252,242,15,16,0,252,242,15,88,193,102,15,126,194,33,213,255,
350 1,139,113,252,252,139,84,36,4,1,202,139,108,36,8,85,139,105,252,248,195,248, 350 221,0,216,68,36,16,221,28,36,35,44,36,255,131,232,8,252,233,244,1,255,248,
351 134,255,15,182,131,233,168,235,15,133,244,251,168,235,15,133,244,247,168, 351 126,129,252,248,239,15,130,244,54,129,121,253,4,239,15,135,244,54,252,242,
352 235,15,132,244,247,252,255,139,233,252,233,244,247,255,248,135,15,182,131, 352 15,16,1,189,0,0,56,67,102,15,110,205,102,15,112,201,81,252,242,15,88,193,
353 233,168,235,15,133,244,251,168,235,15,132,244,251,252,255,139,233,15,132, 353 102,15,126,197,255,248,126,129,252,248,239,15,130,244,54,129,121,253,4,239,
354 244,247,168,235,15,132,244,251,248,1,139,108,36,48,139,68,36,20,137,68,36, 354 15,135,244,54,221,1,199,68,36,16,0,0,192,89,216,68,36,16,221,28,36,139,44,
355 8,137,149,233,137,116,36,4,137,44,36,232,251,1,20,248,4,139,149,233,15,182, 355 36,255,252,242,15,16,0,252,242,15,88,193,102,15,126,194,9,213,255,221,0,216,
356 78,252,253,248,5,15,182,110,252,252,15,183,70,252,254,252,255,164,253,171, 356 68,36,16,221,28,36,11,44,36,255,248,127,129,252,248,239,15,130,244,54,129,
357 233,248,136,255,139,108,36,48,137,149,233,141,139,233,137,116,36,4,137,12, 357 121,253,4,239,15,135,244,54,252,242,15,16,1,189,0,0,56,67,102,15,110,205,
358 36,137,171,233,137,116,36,24,232,251,1,21,252,233,244,4,255,248,137,255,139, 358 102,15,112,201,81,252,242,15,88,193,102,15,126,197,255,248,127,129,252,248,
359 108,36,48,137,149,233,141,139,233,137,116,36,4,137,12,36,137,171,233,137, 359 239,15,130,244,54,129,121,253,4,239,15,135,244,54,221,1,199,68,36,16,0,0,
360 116,36,24,232,251,1,21,139,149,233,139,6,15,182,204,15,182,232,131,198,4, 360 192,89,216,68,36,16,221,28,36,139,44,36,255,252,242,15,16,0,252,242,15,88,
361 193,232,16,252,255,36,171,255,248,138,255,85,141,108,36,12,85,83,82,81,80, 361 193,102,15,126,194,49,213,255,221,0,216,68,36,16,221,28,36,51,44,36,255,248,
362 15,182,69,252,252,138,101,252,248,137,125,252,252,137,117,252,248,139,93, 362 128,129,252,248,239,15,130,244,54,129,121,253,4,239,15,135,244,54,252,242,
363 0,139,139,233,199,131,233,237,137,131,233,137,139,233,129,252,236,239,252, 363 15,16,1,189,0,0,56,67,102,15,110,205,102,15,112,201,81,252,242,15,88,193,
364 247,131,233,237,15,132,244,247,252,242,15,17,125,216,252,242,15,17,117,208, 364 102,15,126,197,255,248,128,129,252,248,239,15,130,244,54,129,121,253,4,239,
365 252,242,15,17,109,200,252,242,15,17,101,192,252,242,15,17,93,184,252,242, 365 15,135,244,54,221,1,199,68,36,16,0,0,192,89,216,68,36,16,221,28,36,139,44,
366 15,17,85,176,252,242,15,17,77,168,252,242,15,17,69,160,248,1,139,171,233, 366 36,255,15,205,252,233,244,129,255,248,130,129,252,248,239,15,130,244,54,129,
367 139,147,233,137,171,233,141,68,36,16,137,149,233,141,139,233,137,68,36,4, 367 121,253,4,239,15,135,244,54,252,242,15,16,1,189,0,0,56,67,102,15,110,205,
368 137,12,36,232,251,1,22,137,196,139,149,233,139,116,36,24,137,108,36,48,255, 368 102,15,112,201,81,252,242,15,88,193,102,15,126,197,255,248,130,129,252,248,
369 248,139,255,139,122,252,248,139,191,233,139,191,233,199,131,233,0,0,0,0,199, 369 239,15,130,244,54,129,121,253,4,239,15,135,244,54,221,1,199,68,36,16,0,0,
370 131,233,237,139,6,15,182,204,15,182,232,131,198,4,193,232,16,252,255,36,171, 370 192,89,216,68,36,16,221,28,36,139,44,36,255,252,247,213,255,248,129,252,242,
371 255,248,79,217,124,36,4,137,68,36,8,102,184,0,4,102,11,68,36,4,102,37,252, 371 15,42,197,252,233,244,62,248,124,252,242,15,42,197,139,84,36,16,252,233,244,
372 255,252,247,102,137,68,36,6,217,108,36,6,217,252,252,217,108,36,4,139,68, 372 62,255,248,129,248,124,137,44,36,219,4,36,252,233,244,63,255,248,125,255,
373 36,8,195,248,81,217,124,36,4,137,68,36,8,102,184,0,8,102,11,68,36,4,102,37, 373 139,68,36,20,252,233,244,54,255,248,131,129,252,248,239,15,130,244,54,129,
374 252,255,252,251,102,137,68,36,6,217,108,36,6,217,252,252,217,108,36,4,139, 374 121,253,4,239,15,135,244,54,129,121,253,12,239,15,135,244,54,252,242,15,16,
375 68,36,8,195,248,102,217,124,36,4,137,68,36,8,102,184,0,12,102,11,68,36,4, 375 1,252,242,15,16,73,8,189,0,0,56,67,102,15,110,213,102,15,112,210,81,252,242,
376 102,137,68,36,6,217,108,36,6,217,252,252,217,108,36,4,139,68,36,8,195,248, 376 15,88,194,252,242,15,88,202,137,200,102,15,126,197,102,15,126,201,255,248,
377 140,255,15,40,232,252,242,15,94,193,102,15,252,239,210,102,15,118,210,102, 377 131,129,252,248,239,15,130,244,54,129,121,253,4,239,15,135,244,54,129,121,
378 15,115,210,1,184,0,0,48,67,102,15,110,216,102,15,112,219,81,15,40,224,102, 378 253,12,239,15,135,244,54,221,1,221,65,8,199,68,36,16,0,0,192,89,216,68,36,
379 15,84,226,102,15,46,220,15,134,244,247,102,15,85,208,252,242,15,88,227,252, 379 16,221,92,36,8,216,68,36,16,221,28,36,137,200,139,76,36,8,139,44,36,255,211,
380 242,15,92,227,102,15,86,226,184,0,0,252,240,63,102,15,110,208,102,15,112, 380 229,137,193,252,233,244,129,255,248,132,129,252,248,239,15,130,244,54,129,
381 210,81,252,242,15,194,196,1,102,15,84,194,252,242,15,92,224,15,40,197,252, 381 121,253,4,239,15,135,244,54,129,121,253,12,239,15,135,244,54,252,242,15,16,
382 242,15,89,204,252,242,15,92,193,195,248,1,252,242,15,89,200,15,40,197,252, 382 1,252,242,15,16,73,8,189,0,0,56,67,102,15,110,213,102,15,112,210,81,252,242,
383 242,15,92,193,195,255,217,193,216,252,241,217,124,36,4,102,184,0,4,102,11, 383 15,88,194,252,242,15,88,202,137,200,102,15,126,197,102,15,126,201,255,248,
384 68,36,4,102,37,252,255,252,247,102,137,68,36,6,217,108,36,6,217,252,252,217, 384 132,129,252,248,239,15,130,244,54,129,121,253,4,239,15,135,244,54,129,121,
385 108,36,4,222,201,222,252,233,255,195,248,86,217,252,234,222,201,248,141,217, 385 253,12,239,15,135,244,54,221,1,221,65,8,199,68,36,16,0,0,192,89,216,68,36,
386 84,36,4,129,124,36,4,0,0,128,127,15,132,244,247,129,124,36,4,0,0,128,252, 386 16,221,92,36,8,216,68,36,16,221,28,36,137,200,139,76,36,8,139,44,36,255,211,
387 255,15,132,244,248,248,142,217,192,217,252,252,220,252,233,217,201,217,252, 387 252,237,137,193,252,233,244,129,255,248,133,129,252,248,239,15,130,244,54,
388 240,217,232,222,193,217,252,253,221,217,248,1,195,248,2,221,216,217,252,238, 388 129,121,253,4,239,15,135,244,54,129,121,253,12,239,15,135,244,54,252,242,
389 195,248,105,219,84,36,4,219,68,36,4,255,223,252,233,255,80,221,252,233,223, 389 15,16,1,252,242,15,16,73,8,189,0,0,56,67,102,15,110,213,102,15,112,210,81,
390 224,158,88,255,15,133,244,254,15,138,244,255,221,216,248,143,80,139,68,36, 390 252,242,15,88,194,252,242,15,88,202,137,200,102,15,126,197,102,15,126,201,
391 8,131,252,248,1,15,142,244,252,248,1,169,1,0,0,0,15,133,244,248,216,200,209, 391 255,248,133,129,252,248,239,15,130,244,54,129,121,253,4,239,15,135,244,54,
392 232,252,233,244,1,248,2,209,232,15,132,244,251,217,192,248,3,216,200,209, 392 129,121,253,12,239,15,135,244,54,221,1,221,65,8,199,68,36,16,0,0,192,89,216,
393 232,15,132,244,250,15,131,244,3,255,220,201,252,233,244,3,248,4,222,201,248, 393 68,36,16,221,92,36,8,216,68,36,16,221,28,36,137,200,139,76,36,8,139,44,36,
394 5,88,195,248,6,15,132,244,5,15,130,244,253,217,232,222,252,241,252,247,216, 394 255,211,252,253,137,193,252,233,244,129,255,248,134,129,252,248,239,15,130,
395 131,252,248,1,15,132,244,5,252,233,244,1,248,7,221,216,217,232,88,195,248, 395 244,54,129,121,253,4,239,15,135,244,54,129,121,253,12,239,15,135,244,54,252,
396 8,80,217,84,36,8,217,201,217,84,36,12,139,68,36,8,209,224,61,0,0,0,252,255, 396 242,15,16,1,252,242,15,16,73,8,189,0,0,56,67,102,15,110,213,102,15,112,210,
397 15,132,244,248,139,68,36,12,209,224,15,132,244,250,61,0,0,0,252,255,15,132, 397 81,252,242,15,88,194,252,242,15,88,202,137,200,102,15,126,197,102,15,126,
398 244,250,255,88,217,252,241,252,233,244,142,248,9,217,232,255,223,252,234, 398 201,255,248,134,129,252,248,239,15,130,244,54,129,121,253,4,239,15,135,244,
399 255,80,221,252,234,223,224,158,88,255,15,132,244,247,217,201,248,1,221,216, 399 54,129,121,253,12,239,15,135,244,54,221,1,221,65,8,199,68,36,16,0,0,192,89,
400 195,248,2,217,225,217,232,255,221,252,233,223,224,158,255,15,132,244,249, 400 216,68,36,16,221,92,36,8,216,68,36,16,221,28,36,137,200,139,76,36,8,139,44,
401 221,216,217,225,217,252,238,184,0,0,0,0,15,146,208,209,200,51,68,36,8,15, 401 36,255,211,197,137,193,252,233,244,129,255,248,135,129,252,248,239,15,130,
402 137,244,249,217,201,248,3,221,217,217,225,88,195,248,4,131,124,36,8,0,15, 402 244,54,129,121,253,4,239,15,135,244,54,129,121,253,12,239,15,135,244,54,252,
403 141,244,3,221,216,221,216,133,192,88,15,132,244,251,217,252,238,195,248,5, 403 242,15,16,1,252,242,15,16,73,8,189,0,0,56,67,102,15,110,213,102,15,112,210,
404 199,68,36,8,0,0,128,127,217,68,36,8,195,248,144,139,68,36,12,221,68,36,4, 404 81,252,242,15,88,194,252,242,15,88,202,137,200,102,15,126,197,102,15,126,
405 131,252,248,1,15,130,244,79,15,132,244,81,131,252,248,3,15,130,244,102,15, 405 201,255,248,135,129,252,248,239,15,130,244,54,129,121,253,4,239,15,135,244,
406 135,244,247,255,217,252,250,195,248,1,131,252,248,5,15,130,244,86,15,132, 406 54,129,121,253,12,239,15,135,244,54,221,1,221,65,8,199,68,36,16,0,0,192,89,
407 244,141,131,252,248,7,15,132,244,247,15,135,244,248,217,252,237,217,201,217, 407 216,68,36,16,221,92,36,8,216,68,36,16,221,28,36,137,200,139,76,36,8,139,44,
408 252,241,195,248,1,217,232,217,201,217,252,241,195,248,2,131,252,248,9,15, 408 36,255,211,205,137,193,252,233,244,129,248,116,184,237,252,233,244,54,248,
409 132,244,247,15,135,244,248,217,252,236,217,201,217,252,241,195,248,1,217, 409 118,184,237,248,54,139,108,36,48,41,202,137,113,252,252,137,116,36,24,137,
410 252,254,195,248,2,131,252,248,11,15,132,244,247,15,135,244,255,255,217,252, 410 84,36,8,137,141,233,141,68,193,252,248,137,44,36,141,144,233,137,133,233,
411 255,195,248,1,217,252,242,221,216,195,248,9,204,248,145,255,139,68,36,20, 411 139,73,252,248,59,149,233,15,135,244,251,252,255,145,233,133,192,15,133,244,
412 252,242,15,16,68,36,4,252,242,15,16,76,36,12,131,252,248,1,15,132,244,247, 412 249,248,1,139,141,233,255,139,133,233,41,200,193,232,3,131,192,1,139,105,
413 15,135,244,248,252,242,15,88,193,252,233,244,253,248,1,252,242,15,92,193, 413 252,248,139,84,36,8,1,202,57,113,252,252,15,133,244,248,252,255,165,233,248,
414 252,233,244,253,248,2,131,252,248,3,15,132,244,247,15,135,244,248,252,242, 414 2,129,121,253,252,252,239,15,133,244,29,252,255,165,233,248,3,139,141,233,
415 15,89,193,252,233,244,253,248,1,252,242,15,94,193,252,233,244,253,248,2,255, 415 139,84,36,8,1,202,252,233,244,68,248,5,199,68,36,4,237,232,251,1,0,252,233,
416 131,252,248,5,15,132,244,247,15,135,244,248,232,244,140,252,233,244,253,248, 416 244,1,248,65,93,137,108,36,8,139,108,36,48,41,202,137,84,36,4,137,113,252,
417 1,221,68,36,4,221,68,36,12,252,233,244,105,248,2,131,252,248,7,15,132,244, 417 252,137,116,36,24,137,141,233,141,68,193,252,248,137,44,36,137,133,233,255,
418 247,15,135,244,248,184,0,0,0,128,102,15,110,200,102,15,112,201,81,15,87,193, 418 232,251,1,19,139,141,233,139,133,233,41,200,193,232,3,131,192,1,139,113,252,
419 252,233,244,253,248,1,102,15,252,239,201,102,15,118,201,102,15,115,209,1, 419 252,139,84,36,4,1,202,139,108,36,8,85,139,105,252,248,195,248,136,255,15,
420 15,84,193,252,233,244,253,248,2,255,131,252,248,9,15,135,244,248,221,68,36, 420 182,131,233,168,235,15,133,244,251,168,235,15,133,244,247,168,235,15,132,
421 4,221,68,36,12,15,132,244,247,217,252,243,195,248,1,217,201,217,252,253,221, 421 244,247,252,255,139,233,252,233,244,247,255,248,137,15,182,131,233,168,235,
422 217,195,248,2,131,252,248,11,15,132,244,247,15,135,244,255,252,242,15,93, 422 15,133,244,251,168,235,15,132,244,251,252,255,139,233,15,132,244,247,168,
423 193,252,233,244,253,248,1,252,242,15,95,193,252,233,244,253,248,9,204,248, 423 235,15,132,244,251,248,1,139,108,36,48,139,68,36,20,137,68,36,8,137,149,233,
424 7,252,242,15,17,68,36,4,221,68,36,4,195,255,139,68,36,20,221,68,36,4,221, 424 137,116,36,4,137,44,36,232,251,1,20,248,4,139,149,233,15,182,78,252,253,248,
425 68,36,12,131,252,248,1,15,132,244,247,15,135,244,248,222,193,195,248,1,222, 425 5,15,182,110,252,252,15,183,70,252,254,252,255,164,253,171,233,248,138,255,
426 252,233,195,248,2,131,252,248,3,15,132,244,247,15,135,244,248,222,201,195, 426 139,108,36,48,137,149,233,141,139,233,137,116,36,4,137,12,36,137,171,233,
427 248,1,222,252,249,195,248,2,131,252,248,5,15,130,244,140,15,132,244,105,131, 427 137,116,36,24,232,251,1,21,252,233,244,4,255,248,139,255,139,108,36,48,137,
428 252,248,7,15,132,244,247,15,135,244,248,255,221,216,217,224,195,248,1,221, 428 149,233,141,139,233,137,116,36,4,137,12,36,137,171,233,137,116,36,24,232,
429 216,217,225,195,248,2,131,252,248,9,15,132,244,247,15,135,244,248,217,252, 429 251,1,21,139,149,233,139,6,15,182,204,15,182,232,131,198,4,193,232,16,252,
430 255,36,171,255,248,140,255,85,141,108,36,12,85,83,82,81,80,15,182,69,252,
431 252,138,101,252,248,137,125,252,252,137,117,252,248,139,93,0,139,139,233,
432 199,131,233,237,137,131,233,137,139,233,129,252,236,239,252,247,131,233,237,
433 15,132,244,247,252,242,15,17,125,216,252,242,15,17,117,208,252,242,15,17,
434 109,200,252,242,15,17,101,192,252,242,15,17,93,184,252,242,15,17,85,176,252,
435 242,15,17,77,168,252,242,15,17,69,160,248,1,139,171,233,139,147,233,137,171,
436 233,141,68,36,16,137,149,233,141,139,233,137,68,36,4,137,12,36,232,251,1,
437 22,137,196,139,149,233,139,116,36,24,137,108,36,48,255,248,141,255,139,122,
438 252,248,139,191,233,139,191,233,199,131,233,0,0,0,0,199,131,233,237,139,6,
439 15,182,204,15,182,232,131,198,4,193,232,16,252,255,36,171,255,248,81,255,
440 217,124,36,4,137,68,36,8,102,184,0,4,102,11,68,36,4,102,37,252,255,252,247,
441 102,137,68,36,6,217,108,36,6,217,252,252,217,108,36,4,139,68,36,8,195,255,
442 248,142,102,15,252,239,210,102,15,118,210,102,15,115,210,1,184,0,0,48,67,
443 102,15,110,216,102,15,112,219,81,15,40,200,102,15,84,202,102,15,46,217,15,
444 134,244,247,102,15,85,208,252,242,15,88,203,252,242,15,92,203,102,15,86,202,
445 184,0,0,252,240,63,102,15,110,208,102,15,112,210,81,252,242,15,194,193,1,
446 102,15,84,194,252,242,15,92,200,15,40,193,248,1,195,248,83,255,217,124,36,
447 4,137,68,36,8,102,184,0,8,102,11,68,36,4,102,37,252,255,252,251,102,137,68,
448 36,6,217,108,36,6,217,252,252,217,108,36,4,139,68,36,8,195,255,248,143,102,
449 15,252,239,210,102,15,118,210,102,15,115,210,1,184,0,0,48,67,102,15,110,216,
450 102,15,112,219,81,15,40,200,102,15,84,202,102,15,46,217,15,134,244,247,102,
451 15,85,208,252,242,15,88,203,252,242,15,92,203,102,15,86,202,184,0,0,252,240,
452 191,102,15,110,208,102,15,112,210,81,252,242,15,194,193,6,102,15,84,194,252,
453 242,15,92,200,15,40,193,248,1,195,248,103,255,217,124,36,4,137,68,36,8,102,
454 184,0,12,102,11,68,36,4,102,137,68,36,6,217,108,36,6,217,252,252,217,108,
455 36,4,139,68,36,8,195,255,248,144,102,15,252,239,210,102,15,118,210,102,15,
456 115,210,1,184,0,0,48,67,102,15,110,216,102,15,112,219,81,15,40,200,102,15,
457 84,202,102,15,46,217,15,134,244,247,102,15,85,208,15,40,193,252,242,15,88,
458 203,252,242,15,92,203,184,0,0,252,240,63,102,15,110,216,102,15,112,219,81,
459 252,242,15,194,193,1,102,15,84,195,252,242,15,92,200,102,15,86,202,15,40,
460 193,248,1,195,248,145,255,15,40,232,252,242,15,94,193,102,15,252,239,210,
461 102,15,118,210,102,15,115,210,1,184,0,0,48,67,102,15,110,216,102,15,112,219,
462 81,15,40,224,102,15,84,226,102,15,46,220,15,134,244,247,102,15,85,208,252,
463 242,15,88,227,252,242,15,92,227,102,15,86,226,184,0,0,252,240,63,102,15,110,
464 208,102,15,112,210,81,252,242,15,194,196,1,102,15,84,194,252,242,15,92,224,
465 15,40,197,252,242,15,89,204,252,242,15,92,193,195,248,1,252,242,15,89,200,
466 15,40,197,252,242,15,92,193,195,255,217,193,216,252,241,217,124,36,4,102,
467 184,0,4,102,11,68,36,4,102,37,252,255,252,247,102,137,68,36,6,217,108,36,
468 6,217,252,252,217,108,36,4,222,201,222,252,233,195,255,248,87,217,252,234,
469 222,201,248,146,217,84,36,4,129,124,36,4,0,0,128,127,15,132,244,247,129,124,
470 36,4,0,0,128,252,255,15,132,244,248,248,147,217,192,217,252,252,220,252,233,
471 217,201,217,252,240,217,232,222,193,217,252,253,221,217,248,1,195,248,2,221,
472 216,217,252,238,195,248,106,219,84,36,4,219,68,36,4,255,223,252,233,255,80,
473 221,252,233,223,224,158,88,255,15,133,244,254,15,138,244,255,221,216,248,
474 148,80,139,68,36,8,131,252,248,1,15,142,244,252,248,1,169,1,0,0,0,15,133,
475 244,248,216,200,209,232,252,233,244,1,248,2,209,232,15,132,244,251,217,192,
476 248,3,216,200,209,232,15,132,244,250,15,131,244,3,255,220,201,252,233,244,
477 3,248,4,222,201,248,5,88,195,248,6,15,132,244,5,15,130,244,253,217,232,222,
478 252,241,252,247,216,131,252,248,1,15,132,244,5,252,233,244,1,248,7,221,216,
479 217,232,88,195,248,8,80,217,84,36,8,217,201,217,84,36,12,139,68,36,8,209,
480 224,61,0,0,0,252,255,15,132,244,248,139,68,36,12,209,224,15,132,244,250,61,
481 0,0,0,252,255,15,132,244,250,255,88,217,252,241,252,233,244,147,248,9,217,
482 232,255,223,252,234,255,80,221,252,234,223,224,158,88,255,15,132,244,247,
483 217,201,248,1,221,216,195,248,2,217,225,217,232,255,221,252,233,223,224,158,
484 255,15,132,244,249,221,216,217,225,217,252,238,184,0,0,0,0,15,146,208,209,
485 200,51,68,36,8,15,137,244,249,217,201,248,3,221,217,217,225,88,195,248,4,
486 131,124,36,8,0,15,141,244,3,221,216,221,216,133,192,88,15,132,244,251,217,
487 252,238,195,248,5,199,68,36,8,0,0,128,127,217,68,36,8,195,248,149,255,139,
488 68,36,12,252,242,15,16,68,36,4,131,252,248,1,15,132,244,247,15,135,244,248,
489 232,244,81,252,233,244,253,248,1,232,244,83,252,233,244,253,248,2,131,252,
490 248,3,15,132,244,247,15,135,244,248,232,244,103,255,252,233,244,253,248,1,
491 252,242,15,81,192,248,7,252,242,15,17,68,36,4,221,68,36,4,195,248,2,221,68,
492 36,4,255,139,68,36,12,221,68,36,4,131,252,248,1,15,130,244,81,15,132,244,
493 83,131,252,248,3,15,130,244,103,15,135,244,248,217,252,250,195,248,2,255,
494 131,252,248,5,15,130,244,87,15,132,244,146,131,252,248,7,15,132,244,247,15,
495 135,244,248,217,252,237,217,201,217,252,241,195,248,1,217,232,217,201,217,
496 252,241,195,248,2,131,252,248,9,15,132,244,247,15,135,244,248,217,252,236,
497 217,201,217,252,241,195,248,1,217,252,254,195,248,2,131,252,248,11,15,132,
498 244,247,15,135,244,255,255,217,252,255,195,248,1,217,252,242,221,216,195,
499 248,9,204,248,150,255,139,68,36,20,252,242,15,16,68,36,4,252,242,15,16,76,
500 36,12,131,252,248,1,15,132,244,247,15,135,244,248,252,242,15,88,193,252,233,
501 244,253,248,1,252,242,15,92,193,252,233,244,253,248,2,131,252,248,3,15,132,
502 244,247,15,135,244,248,252,242,15,89,193,252,233,244,253,248,1,252,242,15,
503 94,193,252,233,244,253,248,2,255,131,252,248,5,15,132,244,247,15,135,244,
504 248,232,244,145,252,233,244,253,248,1,221,68,36,4,221,68,36,12,252,233,244,
505 106,248,2,131,252,248,7,15,132,244,247,15,135,244,248,184,0,0,0,128,102,15,
506 110,200,102,15,112,201,81,15,87,193,252,233,244,253,248,1,102,15,252,239,
507 201,102,15,118,201,102,15,115,209,1,15,84,193,252,233,244,253,248,2,255,131,
508 252,248,9,15,135,244,248,221,68,36,4,221,68,36,12,15,132,244,247,217,252,
430 243,195,248,1,217,201,217,252,253,221,217,195,248,2,131,252,248,11,15,132, 509 243,195,248,1,217,201,217,252,253,221,217,195,248,2,131,252,248,11,15,132,
431 244,247,15,135,244,255,255,219,252,233,219,209,221,217,195,248,1,219,252, 510 244,247,15,135,244,255,252,242,15,93,193,252,233,244,253,248,1,252,242,15,
432 233,218,209,221,217,195,255,221,225,223,224,252,246,196,1,15,132,244,248, 511 95,193,252,233,244,253,248,9,204,248,7,252,242,15,17,68,36,4,221,68,36,4,
433 217,201,248,2,221,216,195,248,1,221,225,223,224,252,246,196,1,15,133,244, 512 195,255,139,68,36,20,221,68,36,4,221,68,36,12,131,252,248,1,15,132,244,247,
434 248,217,201,248,2,221,216,195,255,248,9,204,255,248,146,156,90,137,209,129, 513 15,135,244,248,222,193,195,248,1,222,252,233,195,248,2,131,252,248,3,15,132,
435 252,242,0,0,32,0,82,157,156,90,49,192,57,209,15,132,244,247,139,68,36,4,87, 514 244,247,15,135,244,248,222,201,195,248,1,222,252,249,195,248,2,131,252,248,
436 83,15,162,139,124,36,16,137,7,137,95,4,137,79,8,137,87,12,91,95,248,1,195, 515 5,15,130,244,145,15,132,244,106,131,252,248,7,15,132,244,247,15,135,244,248,
437 255,129,124,253,202,4,239,15,135,244,41,129,124,253,194,4,239,15,135,244, 516 255,221,216,217,224,195,248,1,221,216,217,225,195,248,2,131,252,248,9,15,
438 41,255,252,242,15,16,4,194,131,198,4,102,15,46,4,202,255,221,4,202,221,4, 517 132,244,247,15,135,244,248,217,252,243,195,248,1,217,201,217,252,253,221,
439 194,131,198,4,255,223,252,233,221,216,255,218,252,233,223,224,158,255,15, 518 217,195,248,2,131,252,248,11,15,132,244,247,15,135,244,255,255,219,252,233,
440 134,244,248,255,15,131,244,248,255,248,1,15,183,70,252,254,141,180,253,134, 519 219,209,221,217,195,248,1,219,252,233,218,209,221,217,195,255,221,225,223,
441 233,248,2,139,6,15,182,204,15,182,232,131,198,4,193,232,16,252,255,36,171, 520 224,252,246,196,1,15,132,244,248,217,201,248,2,221,216,195,248,1,221,225,
442 255,139,108,194,4,131,198,4,129,252,253,239,15,135,244,251,129,124,253,202, 521 223,224,252,246,196,1,15,133,244,248,217,201,248,2,221,216,195,255,248,9,
443 4,239,15,135,244,251,255,252,242,15,16,4,194,102,15,46,4,202,255,221,4,202, 522 204,255,248,151,156,90,137,209,129,252,242,0,0,32,0,82,157,156,90,49,192,
444 221,4,194,255,15,138,244,248,15,133,244,248,255,15,138,244,248,15,132,244, 523 57,209,15,132,244,247,139,68,36,4,87,83,15,162,139,124,36,16,137,7,137,95,
445 247,255,248,1,15,183,70,252,254,141,180,253,134,233,248,2,255,248,2,15,183, 524 4,137,79,8,137,87,12,91,95,248,1,195,255,249,255,129,124,253,202,4,239,15,
446 70,252,254,141,180,253,134,233,248,1,255,248,5,57,108,202,4,15,133,244,2, 525 135,244,41,129,124,253,194,4,239,15,135,244,41,255,252,242,15,16,4,194,131,
447 129,252,253,239,15,131,244,1,139,12,202,139,4,194,57,193,15,132,244,1,129, 526 198,4,102,15,46,4,202,255,221,4,202,221,4,194,131,198,4,255,223,252,233,221,
448 252,253,239,15,135,244,2,139,169,233,133,252,237,15,132,244,2,252,246,133, 527 216,255,218,252,233,223,224,158,255,15,134,244,248,255,15,131,244,248,255,
449 233,235,15,133,244,2,255,49,252,237,255,189,1,0,0,0,255,252,233,244,45,255, 528 248,1,15,183,70,252,254,141,180,253,134,233,248,2,139,6,15,182,204,15,182,
450 252,247,208,131,198,4,129,124,253,202,4,239,15,133,244,248,139,12,202,59, 529 232,131,198,4,193,232,16,252,255,36,171,255,139,108,194,4,131,198,4,129,252,
451 12,135,255,131,198,4,129,124,253,202,4,239,15,135,244,248,255,252,242,15, 530 253,239,15,135,244,251,129,124,253,202,4,239,15,135,244,251,255,252,242,15,
452 16,4,199,102,15,46,4,202,255,221,4,202,221,4,199,255,252,247,208,131,198, 531 16,4,194,102,15,46,4,202,255,221,4,202,221,4,194,255,15,138,244,248,15,133,
453 4,57,68,202,4,255,139,108,194,4,131,198,4,129,252,253,239,255,15,131,244, 532 244,248,255,15,138,244,248,15,132,244,247,255,248,1,15,183,70,252,254,141,
454 247,255,15,130,244,247,255,137,108,202,4,139,44,194,137,44,202,255,15,183, 533 180,253,134,233,248,2,255,248,2,15,183,70,252,254,141,180,253,134,233,248,
455 70,252,254,141,180,253,134,233,248,1,139,6,15,182,204,15,182,232,131,198, 534 1,255,248,5,57,108,202,4,15,133,244,2,129,252,253,239,15,131,244,1,139,12,
456 4,193,232,16,252,255,36,171,255,139,108,194,4,139,4,194,137,108,202,4,137, 535 202,139,4,194,57,193,15,132,244,1,129,252,253,239,15,135,244,2,139,169,233,
457 4,202,139,6,15,182,204,15,182,232,131,198,4,193,232,16,252,255,36,171,255, 536 133,252,237,15,132,244,2,252,246,133,233,235,15,133,244,2,255,49,252,237,
458 49,252,237,129,124,253,194,4,239,129,213,239,137,108,202,4,139,6,15,182,204, 537 255,189,1,0,0,0,255,252,233,244,45,255,252,247,208,131,198,4,129,124,253,
459 15,182,232,131,198,4,193,232,16,252,255,36,171,255,129,124,253,194,4,239, 538 202,4,239,15,133,244,248,139,12,202,59,12,135,255,131,198,4,129,124,253,202,
460 15,135,244,48,255,252,242,15,16,4,194,184,0,0,0,128,102,15,110,200,102,15, 539 4,239,15,135,244,248,255,252,242,15,16,4,199,102,15,46,4,202,255,221,4,202,
461 112,201,81,15,87,193,252,242,15,17,4,202,255,221,4,194,217,224,221,28,202, 540 221,4,199,255,252,247,208,131,198,4,57,68,202,4,255,139,108,194,4,131,198,
462 255,129,124,253,194,4,239,15,133,244,248,139,4,194,255,15,87,192,252,242, 541 4,129,252,253,239,255,15,131,244,247,255,15,130,244,247,255,137,108,202,4,
463 15,42,128,233,248,1,252,242,15,17,4,202,255,219,128,233,248,1,221,28,202, 542 139,44,194,137,44,202,255,15,183,70,252,254,141,180,253,134,233,248,1,139,
464 255,139,6,15,182,204,15,182,232,131,198,4,193,232,16,252,255,36,171,248,2, 543 6,15,182,204,15,182,232,131,198,4,193,232,16,252,255,36,171,255,139,108,194,
465 129,124,253,194,4,239,15,133,244,50,139,12,194,137,213,232,251,1,18,255,252, 544 4,139,4,194,137,108,202,4,137,4,202,139,6,15,182,204,15,182,232,131,198,4,
466 242,15,42,192,137,252,234,255,137,4,36,137,252,234,219,4,36,255,15,182,78, 545 193,232,16,252,255,36,171,255,49,252,237,129,124,253,194,4,239,129,213,239,
467 252,253,252,233,244,1,255,15,182,252,236,15,182,192,255,129,124,253,252,234, 546 137,108,202,4,139,6,15,182,204,15,182,232,131,198,4,193,232,16,252,255,36,
468 4,239,15,135,244,46,255,252,242,15,16,4,252,234,252,242,15,88,4,199,255,221, 547 171,255,129,124,253,194,4,239,15,135,244,48,255,252,242,15,16,4,194,184,0,
469 4,252,234,220,4,199,255,129,124,253,252,234,4,239,15,135,244,47,255,252,242, 548 0,0,128,102,15,110,200,102,15,112,201,81,15,87,193,252,242,15,17,4,202,255,
470 15,16,4,199,252,242,15,88,4,252,234,255,221,4,199,220,4,252,234,255,129,124, 549 221,4,194,217,224,221,28,202,255,129,124,253,194,4,239,15,133,244,248,139,
471 253,252,234,4,239,15,135,244,49,129,124,253,194,4,239,15,135,244,49,255,252, 550 4,194,255,15,87,192,252,242,15,42,128,233,248,1,252,242,15,17,4,202,255,219,
472 242,15,16,4,252,234,252,242,15,88,4,194,255,221,4,252,234,220,4,194,255,252, 551 128,233,248,1,221,28,202,255,139,6,15,182,204,15,182,232,131,198,4,193,232,
473 242,15,16,4,252,234,252,242,15,92,4,199,255,221,4,252,234,220,36,199,255, 552 16,252,255,36,171,248,2,129,124,253,194,4,239,15,133,244,50,139,12,194,137,
474 252,242,15,16,4,199,252,242,15,92,4,252,234,255,221,4,199,220,36,252,234, 553 213,232,251,1,18,255,252,242,15,42,192,137,252,234,255,137,4,36,137,252,234,
475 255,252,242,15,16,4,252,234,252,242,15,92,4,194,255,221,4,252,234,220,36, 554 219,4,36,255,15,182,78,252,253,252,233,244,1,255,15,182,252,236,15,182,192,
476 194,255,252,242,15,16,4,252,234,252,242,15,89,4,199,255,221,4,252,234,220, 555 255,129,124,253,252,234,4,239,15,135,244,46,255,252,242,15,16,4,252,234,252,
477 12,199,255,252,242,15,16,4,199,252,242,15,89,4,252,234,255,221,4,199,220, 556 242,15,88,4,199,255,221,4,252,234,220,4,199,255,129,124,253,252,234,4,239,
478 12,252,234,255,252,242,15,16,4,252,234,252,242,15,89,4,194,255,221,4,252, 557 15,135,244,47,255,252,242,15,16,4,199,252,242,15,88,4,252,234,255,221,4,199,
479 234,220,12,194,255,252,242,15,16,4,252,234,252,242,15,94,4,199,255,221,4, 558 220,4,252,234,255,129,124,253,252,234,4,239,15,135,244,49,129,124,253,194,
480 252,234,220,52,199,255,252,242,15,16,4,199,252,242,15,94,4,252,234,255,221, 559 4,239,15,135,244,49,255,252,242,15,16,4,252,234,252,242,15,88,4,194,255,221,
481 4,199,220,52,252,234,255,252,242,15,16,4,252,234,252,242,15,94,4,194,255, 560 4,252,234,220,4,194,255,252,242,15,16,4,252,234,252,242,15,92,4,199,255,221,
482 221,4,252,234,220,52,194,255,252,242,15,16,4,252,234,252,242,15,16,12,199, 561 4,252,234,220,36,199,255,252,242,15,16,4,199,252,242,15,92,4,252,234,255,
483 255,221,4,252,234,221,4,199,255,252,242,15,16,4,199,252,242,15,16,12,252, 562 221,4,199,220,36,252,234,255,252,242,15,16,4,252,234,252,242,15,92,4,194,
484 234,255,221,4,199,221,4,252,234,255,252,242,15,16,4,252,234,252,242,15,16, 563 255,221,4,252,234,220,36,194,255,252,242,15,16,4,252,234,252,242,15,89,4,
485 12,194,255,221,4,252,234,221,4,194,255,248,147,232,244,140,255,252,233,244, 564 199,255,221,4,252,234,220,12,199,255,252,242,15,16,4,199,252,242,15,89,4,
486 147,255,232,244,105,255,15,182,252,236,15,182,192,141,12,194,41,232,137,76, 565 252,234,255,221,4,199,220,12,252,234,255,252,242,15,16,4,252,234,252,242,
487 36,4,137,68,36,8,248,33,139,108,36,48,137,44,36,137,116,36,24,137,149,233, 566 15,89,4,194,255,221,4,252,234,220,12,194,255,252,242,15,16,4,252,234,252,
488 232,251,1,23,139,149,233,133,192,15,133,244,42,15,182,110,252,255,15,182, 567 242,15,94,4,199,255,221,4,252,234,220,52,199,255,252,242,15,16,4,199,252,
489 78,252,253,139,68,252,234,4,139,44,252,234,137,68,202,4,137,44,202,139,6, 568 242,15,94,4,252,234,255,221,4,199,220,52,252,234,255,252,242,15,16,4,252,
490 15,182,204,15,182,232,131,198,4,193,232,16,252,255,36,171,255,252,247,208, 569 234,252,242,15,94,4,194,255,221,4,252,234,220,52,194,255,252,242,15,16,4,
491 139,4,135,199,68,202,4,237,137,4,202,139,6,15,182,204,15,182,232,131,198, 570 252,234,252,242,15,16,12,199,255,221,4,252,234,221,4,199,255,252,242,15,16,
492 4,193,232,16,252,255,36,171,255,223,70,252,254,221,28,202,139,6,15,182,204, 571 4,199,252,242,15,16,12,252,234,255,221,4,199,221,4,252,234,255,252,242,15,
493 15,182,232,131,198,4,193,232,16,252,255,36,171,255,221,4,199,221,28,202,139, 572 16,4,252,234,252,242,15,16,12,194,255,221,4,252,234,221,4,194,255,248,152,
494 6,15,182,204,15,182,232,131,198,4,193,232,16,252,255,36,171,255,252,247,208, 573 232,244,145,255,252,233,244,152,255,232,244,106,255,15,182,252,236,15,182,
574 192,141,12,194,41,232,137,76,36,4,137,68,36,8,248,33,139,108,36,48,137,44,
575 36,137,116,36,24,137,149,233,232,251,1,23,139,149,233,133,192,15,133,244,
576 42,15,182,110,252,255,15,182,78,252,253,139,68,252,234,4,139,44,252,234,137,
577 68,202,4,137,44,202,139,6,15,182,204,15,182,232,131,198,4,193,232,16,252,
578 255,36,171,255,252,247,208,139,4,135,199,68,202,4,237,137,4,202,139,6,15,
579 182,204,15,182,232,131,198,4,193,232,16,252,255,36,171,255,15,191,192,252,
580 242,15,42,192,252,242,15,17,4,202,255,223,70,252,254,221,28,202,255,252,242,
581 15,16,4,199,252,242,15,17,4,202,255,221,4,199,221,28,202,255,252,247,208,
495 137,68,202,4,139,6,15,182,204,15,182,232,131,198,4,193,232,16,252,255,36, 582 137,68,202,4,139,6,15,182,204,15,182,232,131,198,4,193,232,16,252,255,36,
496 171,255,141,76,202,12,141,68,194,4,189,237,137,105,252,248,248,1,137,41,131, 583 171,255,141,76,202,12,141,68,194,4,189,237,137,105,252,248,248,1,137,41,131,
497 193,8,57,193,15,134,244,1,139,6,15,182,204,15,182,232,131,198,4,193,232,16, 584 193,8,57,193,15,134,244,1,139,6,15,182,204,15,182,232,131,198,4,193,232,16,
@@ -507,127 +594,132 @@ static const unsigned char build_actionlist[12791] = {
507 133,244,248,248,1,139,6,15,182,204,15,182,232,131,198,4,193,232,16,252,255, 594 133,244,248,248,1,139,6,15,182,204,15,182,232,131,198,4,193,232,16,252,255,
508 36,171,248,2,252,246,129,233,235,15,132,244,1,128,189,233,0,15,132,244,1, 595 36,171,248,2,252,246,129,233,235,15,132,244,1,128,189,233,0,15,132,244,1,
509 137,213,137,194,141,139,233,232,251,1,24,137,252,234,252,233,244,1,255,139, 596 137,213,137,194,141,139,233,232,251,1,24,137,252,234,252,233,244,1,255,139,
510 106,252,248,221,4,199,139,172,253,141,233,139,141,233,221,25,139,6,15,182, 597 106,252,248,255,252,242,15,16,4,199,255,139,172,253,141,233,139,141,233,255,
511 204,15,182,232,131,198,4,193,232,16,252,255,36,171,255,252,247,208,139,106, 598 252,247,208,139,106,252,248,139,172,253,141,233,139,141,233,137,65,4,139,
512 252,248,139,172,253,141,233,139,141,233,137,65,4,139,6,15,182,204,15,182, 599 6,15,182,204,15,182,232,131,198,4,193,232,16,252,255,36,171,255,141,180,253,
513 232,131,198,4,193,232,16,252,255,36,171,255,141,180,253,134,233,139,108,36, 600 134,233,139,108,36,48,131,189,233,0,15,132,244,247,141,12,202,137,76,36,4,
514 48,131,189,233,0,15,132,244,247,141,12,202,137,76,36,4,137,44,36,137,149, 601 137,44,36,137,149,233,232,251,1,25,139,149,233,248,1,139,6,15,182,204,15,
515 233,232,251,1,25,139,149,233,248,1,139,6,15,182,204,15,182,232,131,198,4, 602 182,232,131,198,4,193,232,16,252,255,36,171,255,252,247,208,139,74,252,248,
516 193,232,16,252,255,36,171,255,252,247,208,139,74,252,248,139,4,135,139,108, 603 139,4,135,139,108,36,48,137,76,36,8,137,68,36,4,137,116,36,24,137,44,36,137,
517 36,48,137,76,36,8,137,68,36,4,137,116,36,24,137,44,36,137,149,233,232,251, 604 149,233,232,251,1,26,139,149,233,15,182,78,252,253,137,4,202,199,68,202,4,
518 1,26,139,149,233,15,182,78,252,253,137,4,202,199,68,202,4,237,139,6,15,182, 605 237,139,6,15,182,204,15,182,232,131,198,4,193,232,16,252,255,36,171,255,137,
519 204,15,182,232,131,198,4,193,232,16,252,255,36,171,255,137,197,37,252,255, 606 197,37,252,255,7,0,0,193,252,237,11,61,252,255,7,0,0,15,148,209,137,108,36,
520 7,0,0,193,252,237,11,61,252,255,7,0,0,15,148,209,137,108,36,8,1,200,139,108, 607 8,1,200,139,108,36,48,1,200,137,68,36,4,137,116,36,24,139,139,233,137,44,
521 36,48,1,200,137,68,36,4,137,116,36,24,139,139,233,137,44,36,59,139,233,137, 608 36,59,139,233,137,149,233,15,131,244,248,248,1,232,251,1,27,139,149,233,15,
522 149,233,15,131,244,248,248,1,232,251,1,27,139,149,233,15,182,78,252,253,137, 609 182,78,252,253,137,4,202,199,68,202,4,237,139,6,15,182,204,15,182,232,131,
523 4,202,199,68,202,4,237,139,6,15,182,204,15,182,232,131,198,4,193,232,16,252, 610 198,4,193,232,16,252,255,36,171,248,2,137,252,233,232,251,1,28,252,233,244,
524 255,36,171,248,2,137,252,233,232,251,1,28,252,233,244,1,255,252,247,208,139, 611 1,255,252,247,208,139,108,36,48,139,139,233,137,116,36,24,59,139,233,137,
525 108,36,48,139,139,233,137,116,36,24,59,139,233,137,149,233,15,131,244,249, 612 149,233,15,131,244,249,248,2,139,20,135,137,252,233,232,251,1,29,139,149,
526 248,2,139,20,135,137,252,233,232,251,1,29,139,149,233,15,182,78,252,253,137, 613 233,15,182,78,252,253,137,4,202,199,68,202,4,237,139,6,15,182,204,15,182,
527 4,202,199,68,202,4,237,139,6,15,182,204,15,182,232,131,198,4,193,232,16,252, 614 232,131,198,4,193,232,16,252,255,36,171,248,3,137,252,233,232,251,1,28,15,
528 255,36,171,248,3,137,252,233,232,251,1,28,15,183,70,252,254,252,247,208,252, 615 183,70,252,254,252,247,208,252,233,244,2,255,252,247,208,139,106,252,248,
529 233,244,2,255,252,247,208,139,106,252,248,139,173,233,139,4,135,252,233,244, 616 139,173,233,139,4,135,252,233,244,153,255,252,247,208,139,106,252,248,139,
530 148,255,252,247,208,139,106,252,248,139,173,233,139,4,135,252,233,244,149, 617 173,233,139,4,135,252,233,244,154,255,15,182,252,236,15,182,192,129,124,253,
531 255,15,182,252,236,15,182,192,129,124,253,252,234,4,239,15,133,244,36,139, 618 252,234,4,239,15,133,244,36,139,44,252,234,129,124,253,194,4,239,15,135,244,
532 44,252,234,129,124,253,194,4,239,15,135,244,251,221,4,194,219,20,36,219,4, 619 251,255,252,242,15,16,4,194,252,242,15,45,192,252,242,15,42,200,102,15,46,
533 36,255,139,4,36,15,133,244,36,59,133,233,15,131,244,36,193,224,3,3,133,233, 620 193,255,221,4,194,219,20,36,219,4,36,255,139,4,36,255,15,133,244,36,59,133,
534 129,120,253,4,239,15,132,244,248,248,1,139,40,139,64,4,137,44,202,137,68, 621 233,15,131,244,36,193,224,3,3,133,233,129,120,253,4,239,15,132,244,248,248,
535 202,4,139,6,15,182,204,15,182,232,131,198,4,193,232,16,252,255,36,171,248, 622 1,139,40,139,64,4,137,44,202,137,68,202,4,139,6,15,182,204,15,182,232,131,
536 2,131,189,233,0,15,132,244,1,139,141,233,252,246,129,233,235,15,132,244,36, 623 198,4,193,232,16,252,255,36,171,248,2,131,189,233,0,15,132,244,1,139,141,
537 15,182,78,252,253,252,233,244,1,248,5,255,129,124,253,194,4,239,15,133,244, 624 233,252,246,129,233,235,15,132,244,36,15,182,78,252,253,252,233,244,1,248,
538 36,139,4,194,252,233,244,148,255,15,182,252,236,15,182,192,252,247,208,139, 625 5,255,129,124,253,194,4,239,15,133,244,36,139,4,194,252,233,244,153,255,15,
539 4,135,129,124,253,252,234,4,239,15,133,244,34,139,44,252,234,248,148,139, 626 182,252,236,15,182,192,252,247,208,139,4,135,129,124,253,252,234,4,239,15,
540 141,233,35,136,233,105,201,239,3,141,233,248,1,129,185,233,239,15,133,244, 627 133,244,34,139,44,252,234,248,153,139,141,233,35,136,233,105,201,239,3,141,
541 250,57,129,233,15,133,244,250,129,121,253,4,239,15,132,244,251,15,182,70, 628 233,248,1,129,185,233,239,15,133,244,250,57,129,233,15,133,244,250,129,121,
542 252,253,139,41,139,73,4,137,44,194,248,2,255,137,76,194,4,139,6,15,182,204, 629 253,4,239,15,132,244,251,15,182,70,252,253,139,41,139,73,4,137,44,194,248,
543 15,182,232,131,198,4,193,232,16,252,255,36,171,248,3,15,182,70,252,253,185, 630 2,255,137,76,194,4,139,6,15,182,204,15,182,232,131,198,4,193,232,16,252,255,
544 237,252,233,244,2,248,4,139,137,233,133,201,15,133,244,1,248,5,139,141,233, 631 36,171,248,3,15,182,70,252,253,185,237,252,233,244,2,248,4,139,137,233,133,
545 133,201,15,132,244,3,252,246,129,233,235,15,133,244,3,252,233,244,34,255, 632 201,15,133,244,1,248,5,139,141,233,133,201,15,132,244,3,252,246,129,233,235,
546 15,182,252,236,15,182,192,129,124,253,252,234,4,239,15,133,244,35,139,44, 633 15,133,244,3,252,233,244,34,255,15,182,252,236,15,182,192,129,124,253,252,
547 252,234,59,133,233,15,131,244,35,193,224,3,3,133,233,129,120,253,4,239,15, 634 234,4,239,15,133,244,35,139,44,252,234,59,133,233,15,131,244,35,193,224,3,
548 132,244,248,248,1,139,40,139,64,4,137,44,202,137,68,202,4,139,6,15,182,204, 635 3,133,233,129,120,253,4,239,15,132,244,248,248,1,139,40,139,64,4,137,44,202,
549 15,182,232,131,198,4,193,232,16,252,255,36,171,248,2,131,189,233,0,15,132, 636 137,68,202,4,139,6,15,182,204,15,182,232,131,198,4,193,232,16,252,255,36,
550 244,1,139,141,233,252,246,129,233,235,15,132,244,35,255,15,182,252,236,15, 637 171,248,2,131,189,233,0,15,132,244,1,139,141,233,252,246,129,233,235,15,132,
551 182,192,129,124,253,252,234,4,239,15,133,244,39,139,44,252,234,129,124,253, 638 244,35,255,15,182,252,236,15,182,192,129,124,253,252,234,4,239,15,133,244,
552 194,4,239,15,135,244,251,221,4,194,219,20,36,219,4,36,255,139,4,36,15,133, 639 39,139,44,252,234,129,124,253,194,4,239,15,135,244,251,255,15,133,244,39,
553 244,39,59,133,233,15,131,244,39,193,224,3,3,133,233,129,120,253,4,239,15, 640 59,133,233,15,131,244,39,193,224,3,3,133,233,129,120,253,4,239,15,132,244,
554 132,244,249,248,1,252,246,133,233,235,15,133,244,253,248,2,139,108,202,4, 641 249,248,1,252,246,133,233,235,15,133,244,253,248,2,139,108,202,4,139,12,202,
555 139,12,202,137,104,4,137,8,139,6,15,182,204,15,182,232,131,198,4,193,232, 642 137,104,4,137,8,139,6,15,182,204,15,182,232,131,198,4,193,232,16,252,255,
556 16,252,255,36,171,248,3,131,189,233,0,15,132,244,1,139,141,233,255,252,246, 643 36,171,248,3,131,189,233,0,15,132,244,1,139,141,233,255,252,246,129,233,235,
557 129,233,235,15,132,244,39,15,182,78,252,253,252,233,244,1,248,5,129,124,253, 644 15,132,244,39,15,182,78,252,253,252,233,244,1,248,5,129,124,253,194,4,239,
558 194,4,239,15,133,244,39,139,4,194,252,233,244,149,248,7,128,165,233,235,139, 645 15,133,244,39,139,4,194,252,233,244,154,248,7,128,165,233,235,139,139,233,
559 139,233,137,171,233,137,141,233,15,182,78,252,253,252,233,244,2,255,15,182, 646 137,171,233,137,141,233,15,182,78,252,253,252,233,244,2,255,15,182,252,236,
560 252,236,15,182,192,252,247,208,139,4,135,129,124,253,252,234,4,239,15,133, 647 15,182,192,252,247,208,139,4,135,129,124,253,252,234,4,239,15,133,244,37,
561 244,37,139,44,252,234,248,149,139,141,233,35,136,233,105,201,239,198,133, 648 139,44,252,234,248,154,139,141,233,35,136,233,105,201,239,198,133,233,0,3,
562 233,0,3,141,233,248,1,129,185,233,239,15,133,244,251,57,129,233,15,133,244, 649 141,233,248,1,129,185,233,239,15,133,244,251,57,129,233,15,133,244,251,129,
563 251,129,121,253,4,239,15,132,244,250,248,2,255,252,246,133,233,235,15,133, 650 121,253,4,239,15,132,244,250,248,2,255,252,246,133,233,235,15,133,244,253,
564 244,253,248,3,15,182,70,252,253,139,108,194,4,139,4,194,137,105,4,137,1,139, 651 248,3,15,182,70,252,253,139,108,194,4,139,4,194,137,105,4,137,1,139,6,15,
565 6,15,182,204,15,182,232,131,198,4,193,232,16,252,255,36,171,248,4,131,189, 652 182,204,15,182,232,131,198,4,193,232,16,252,255,36,171,248,4,131,189,233,
566 233,0,15,132,244,2,137,12,36,139,141,233,252,246,129,233,235,15,132,244,37, 653 0,15,132,244,2,137,76,36,16,139,141,233,252,246,129,233,235,15,132,244,37,
567 139,12,36,252,233,244,2,248,5,139,137,233,133,201,15,133,244,1,255,139,141, 654 139,76,36,16,252,233,244,2,248,5,139,137,233,133,201,15,133,244,1,255,139,
568 233,133,201,15,132,244,252,252,246,129,233,235,15,132,244,37,248,6,137,68, 655 141,233,133,201,15,132,244,252,252,246,129,233,235,15,132,244,37,248,6,137,
569 36,16,199,68,36,20,237,141,68,36,16,137,108,36,12,137,108,36,4,139,108,36, 656 68,36,16,199,68,36,20,237,141,68,36,16,137,108,36,12,137,108,36,4,139,108,
570 48,137,68,36,8,137,44,36,137,116,36,24,137,149,233,232,251,1,30,139,149,233, 657 36,48,137,68,36,8,137,44,36,137,116,36,24,137,149,233,232,251,1,30,139,149,
571 139,108,36,12,137,193,252,233,244,2,248,7,128,165,233,235,139,131,233,137, 658 233,139,108,36,12,137,193,252,233,244,2,248,7,128,165,233,235,139,131,233,
572 171,233,137,133,233,252,233,244,3,255,15,182,252,236,15,182,192,129,124,253, 659 137,171,233,137,133,233,252,233,244,3,255,15,182,252,236,15,182,192,129,124,
573 252,234,4,239,15,133,244,38,139,44,252,234,59,133,233,15,131,244,38,193,224, 660 253,252,234,4,239,15,133,244,38,139,44,252,234,59,133,233,15,131,244,38,193,
574 3,3,133,233,129,120,253,4,239,15,132,244,249,248,1,252,246,133,233,235,15, 661 224,3,3,133,233,129,120,253,4,239,15,132,244,249,248,1,252,246,133,233,235,
575 133,244,253,248,2,139,108,202,4,139,12,202,137,104,4,137,8,139,6,15,182,204, 662 15,133,244,253,248,2,139,108,202,4,139,12,202,137,104,4,137,8,139,6,15,182,
576 15,182,232,131,198,4,193,232,16,252,255,36,171,248,3,131,189,233,0,15,132, 663 204,15,182,232,131,198,4,193,232,16,252,255,36,171,248,3,131,189,233,0,15,
577 244,1,255,139,141,233,252,246,129,233,235,15,132,244,38,15,182,78,252,253, 664 132,244,1,255,139,141,233,252,246,129,233,235,15,132,244,38,15,182,78,252,
578 252,233,244,1,248,7,128,165,233,235,139,139,233,137,171,233,137,141,233,15, 665 253,252,233,244,1,248,7,128,165,233,235,139,139,233,137,171,233,137,141,233,
579 182,78,252,253,252,233,244,2,255,137,124,36,16,221,4,199,219,92,36,12,248, 666 15,182,78,252,253,252,233,244,2,255,137,124,36,16,255,221,4,199,219,92,36,
580 1,141,12,202,139,105,252,248,252,246,133,233,235,15,133,244,253,248,2,139, 667 12,255,248,1,141,12,202,139,105,252,248,252,246,133,233,235,15,133,244,253,
581 68,36,20,139,124,36,12,131,232,1,15,132,244,250,1,252,248,59,133,233,15,131, 668 248,2,139,68,36,20,255,252,242,15,45,252,248,255,139,124,36,12,255,131,232,
582 244,251,41,252,248,193,231,3,3,189,233,248,3,139,41,137,47,139,105,4,131, 669 1,15,132,244,250,1,252,248,59,133,233,15,131,244,251,41,252,248,193,231,3,
583 193,8,137,111,4,131,199,8,131,232,1,15,133,244,3,248,4,139,124,36,16,139, 670 3,189,233,248,3,139,41,137,47,139,105,4,131,193,8,137,111,4,131,199,8,131,
584 6,15,182,204,15,182,232,131,198,4,193,232,16,252,255,36,171,248,5,137,108, 671 232,1,15,133,244,3,248,4,139,124,36,16,139,6,15,182,204,15,182,232,131,198,
585 36,4,139,108,36,48,137,68,36,8,137,44,36,137,116,36,24,137,149,233,232,251, 672 4,193,232,16,252,255,36,171,248,5,137,108,36,4,139,108,36,48,137,68,36,8,
586 1,31,139,149,233,15,182,78,252,253,252,233,244,1,248,7,255,128,165,233,235, 673 137,44,36,137,116,36,24,137,149,233,232,251,1,31,139,149,233,15,182,78,252,
587 139,131,233,137,171,233,137,133,233,252,233,244,2,255,3,68,36,20,255,141, 674 253,252,233,244,1,248,7,128,165,233,235,139,131,233,137,171,233,255,137,133,
588 76,202,8,139,105,252,248,129,121,253,252,252,239,15,133,244,29,252,255,165, 675 233,252,233,244,2,255,3,68,36,20,255,141,76,202,8,139,105,252,248,129,121,
589 233,255,141,76,202,8,137,215,139,105,252,248,129,121,253,252,252,239,15,133, 676 253,252,252,239,15,133,244,29,252,255,165,233,255,141,76,202,8,137,215,139,
590 244,29,248,51,139,114,252,252,252,247,198,237,15,133,244,253,248,1,137,106, 677 105,252,248,129,121,253,252,252,239,15,133,244,29,248,51,139,114,252,252,
591 252,248,137,68,36,20,131,232,1,15,132,244,249,248,2,139,41,137,47,139,105, 678 252,247,198,237,15,133,244,253,248,1,137,106,252,248,137,68,36,20,131,232,
592 4,137,111,4,131,199,8,131,193,8,131,232,1,15,133,244,2,139,106,252,248,248, 679 1,15,132,244,249,248,2,139,41,137,47,139,105,4,137,111,4,131,199,8,131,193,
593 3,137,209,128,189,233,1,15,135,244,251,248,4,139,68,36,20,252,255,165,233, 680 8,131,232,1,15,133,244,2,139,106,252,248,248,3,137,209,128,189,233,1,15,135,
594 248,5,255,252,247,198,237,15,133,244,4,15,182,70,252,253,252,247,208,141, 681 244,251,248,4,139,68,36,20,252,255,165,233,248,5,255,252,247,198,237,15,133,
595 20,194,139,122,252,248,139,191,233,139,191,233,252,233,244,4,248,7,15,139, 682 244,4,15,182,70,252,253,252,247,208,141,20,194,139,122,252,248,139,191,233,
596 244,1,131,230,252,248,41,252,242,137,215,139,114,252,252,252,233,244,1,255, 683 139,191,233,252,233,244,4,248,7,15,139,244,1,131,230,252,248,41,252,242,137,
597 141,76,202,8,139,105,232,139,65,252,236,137,41,137,65,4,139,105,252,240,139, 684 215,139,114,252,252,252,233,244,1,255,141,76,202,8,139,105,232,139,65,252,
598 65,252,244,137,105,8,137,65,12,139,105,224,139,65,228,137,105,252,248,137, 685 236,137,41,137,65,4,139,105,252,240,139,65,252,244,137,105,8,137,65,12,139,
599 65,252,252,129,252,248,239,184,3,0,0,0,15,133,244,29,252,255,165,233,255, 686 105,224,139,65,228,137,105,252,248,137,65,252,252,129,252,248,239,184,3,0,
600 15,182,252,236,139,66,252,248,141,12,202,139,128,233,15,182,128,233,137,124, 687 0,0,15,133,244,29,252,255,165,233,255,15,182,252,236,139,66,252,248,141,12,
601 36,8,141,188,253,194,233,43,122,252,252,133,252,237,15,132,244,251,141,108, 688 202,139,128,233,15,182,128,233,137,124,36,8,141,188,253,194,233,43,122,252,
602 252,233,252,248,57,215,15,131,244,248,248,1,139,71,252,248,137,1,139,71,252, 689 252,133,252,237,15,132,244,251,141,108,252,233,252,248,57,215,15,131,244,
603 252,131,199,8,137,65,4,131,193,8,57,252,233,15,131,244,249,57,215,15,130, 690 248,248,1,139,71,252,248,137,1,139,71,252,252,131,199,8,137,65,4,131,193,
604 244,1,248,2,199,65,4,237,131,193,8,57,252,233,15,130,244,2,248,3,139,124, 691 8,57,252,233,15,131,244,249,57,215,15,130,244,1,248,2,199,65,4,237,131,193,
605 36,8,139,6,15,182,204,15,182,232,131,198,4,193,232,16,252,255,36,171,248, 692 8,57,252,233,15,130,244,2,248,3,139,124,36,8,139,6,15,182,204,15,182,232,
606 5,199,68,36,20,1,0,0,0,137,208,41,252,248,15,134,244,3,255,137,197,193,252, 693 131,198,4,193,232,16,252,255,36,171,248,5,199,68,36,20,1,0,0,0,137,208,41,
607 237,3,137,108,36,4,131,197,1,137,108,36,20,139,108,36,48,1,200,59,133,233, 694 252,248,15,134,244,3,255,137,197,193,252,237,3,137,108,36,4,131,197,1,137,
608 15,135,244,253,248,6,139,71,252,248,137,1,139,71,252,252,131,199,8,137,65, 695 108,36,20,139,108,36,48,1,200,59,133,233,15,135,244,253,248,6,139,71,252,
609 4,131,193,8,57,215,15,130,244,6,252,233,244,3,248,7,137,149,233,137,141,233, 696 248,137,1,139,71,252,252,131,199,8,137,65,4,131,193,8,57,215,15,130,244,6,
610 137,116,36,24,41,215,137,44,36,232,251,1,0,139,149,233,139,141,233,1,215, 697 252,233,244,3,248,7,137,149,233,137,141,233,137,116,36,24,41,215,137,44,36,
611 252,233,244,6,255,193,225,3,255,248,1,139,114,252,252,137,68,36,20,252,247, 698 232,251,1,0,139,149,233,139,141,233,1,215,252,233,244,6,255,193,225,3,255,
612 198,237,15,133,244,253,255,248,17,137,215,131,232,1,15,132,244,249,248,2, 699 248,1,139,114,252,252,137,68,36,20,252,247,198,237,15,133,244,253,255,248,
613 139,44,15,137,111,252,248,139,108,15,4,137,111,252,252,131,199,8,131,232, 700 17,137,215,131,232,1,15,132,244,249,248,2,139,44,15,137,111,252,248,139,108,
614 1,15,133,244,2,248,3,139,68,36,20,15,182,110,252,255,248,5,57,197,15,135, 701 15,4,137,111,252,252,131,199,8,131,232,1,15,133,244,2,248,3,139,68,36,20,
615 244,252,255,139,108,10,4,137,106,252,252,139,44,10,137,106,252,248,255,15, 702 15,182,110,252,255,248,5,57,197,15,135,244,252,255,139,108,10,4,137,106,252,
616 182,78,252,253,252,247,209,141,20,202,139,122,252,248,139,191,233,139,191, 703 252,139,44,10,137,106,252,248,255,248,5,56,70,252,255,15,135,244,252,255,
617 233,139,6,15,182,204,15,182,232,131,198,4,193,232,16,252,255,36,171,248,6, 704 15,182,78,252,253,252,247,209,141,20,202,139,122,252,248,139,191,233,139,
618 255,199,71,252,252,237,131,199,8,255,199,68,194,252,244,237,255,131,192,1, 705 191,233,139,6,15,182,204,15,182,232,131,198,4,193,232,16,252,255,36,171,248,
619 252,233,244,5,248,7,15,139,244,18,131,230,252,248,41,252,242,255,1,252,241, 706 6,255,199,71,252,252,237,131,199,8,255,199,68,194,252,244,237,255,131,192,
620 255,137,252,245,209,252,237,129,229,239,102,131,172,253,43,233,1,15,132,244, 707 1,252,233,244,5,248,7,15,139,244,18,131,230,252,248,41,252,242,255,1,252,
621 136,255,141,12,202,255,129,121,253,4,239,15,135,244,52,129,121,253,12,239, 708 241,255,137,252,245,209,252,237,129,229,239,102,131,172,253,43,233,1,15,132,
622 15,135,244,52,255,139,105,20,255,129,252,253,239,15,135,244,52,255,221,65, 709 244,138,255,141,12,202,255,129,121,253,4,239,15,135,244,52,129,121,253,12,
623 8,221,1,255,220,65,16,221,17,255,221,81,24,133,252,237,15,136,244,247,217, 710 239,15,135,244,52,255,139,105,20,255,129,252,253,239,15,135,244,52,255,252,
624 201,248,1,255,15,183,70,252,254,255,15,131,244,248,141,180,253,134,233,255, 711 242,15,16,1,252,242,15,16,73,8,255,252,242,15,88,65,16,252,242,15,17,1,133,
625 141,180,253,134,233,15,183,70,252,254,15,131,245,255,15,130,244,248,141,180, 712 252,237,15,136,244,249,255,15,140,244,249,255,102,15,46,200,248,1,252,242,
626 253,134,233,255,141,12,202,139,105,4,129,252,253,239,15,132,244,247,255,137, 713 15,17,65,24,255,221,65,8,221,1,255,220,65,16,221,17,221,81,24,133,252,237,
627 105,252,252,139,41,137,105,252,248,252,233,245,255,141,180,253,134,233,139, 714 15,136,244,247,255,221,81,24,15,140,244,247,255,217,201,248,1,255,15,183,
628 1,137,105,252,252,137,65,252,248,255,139,139,233,139,4,129,139,128,233,139, 715 70,252,254,255,15,131,244,248,141,180,253,134,233,255,141,180,253,134,233,
629 108,36,48,137,147,233,137,171,233,252,255,224,255,141,180,253,134,233,139, 716 15,183,70,252,254,15,131,245,255,15,130,244,248,141,180,253,134,233,255,248,
630 6,15,182,204,15,182,232,131,198,4,193,232,16,252,255,36,171,255,254,0 717 3,102,15,46,193,252,233,244,1,255,141,12,202,139,105,4,129,252,253,239,15,
718 132,244,247,255,137,105,252,252,139,41,137,105,252,248,252,233,245,255,141,
719 180,253,134,233,139,1,137,105,252,252,137,65,252,248,255,139,139,233,139,
720 4,129,139,128,233,139,108,36,48,137,147,233,137,171,233,252,255,224,255,141,
721 180,253,134,233,139,6,15,182,204,15,182,232,131,198,4,193,232,16,252,255,
722 36,171,255,254,0
631}; 723};
632 724
633enum { 725enum {
@@ -683,6 +775,7 @@ enum {
683 GLOB_ff_setmetatable, 775 GLOB_ff_setmetatable,
684 GLOB_ff_rawget, 776 GLOB_ff_rawget,
685 GLOB_ff_tonumber, 777 GLOB_ff_tonumber,
778 GLOB_fff_resxmm0,
686 GLOB_fff_resn, 779 GLOB_fff_resn,
687 GLOB_ff_tostring, 780 GLOB_ff_tostring,
688 GLOB_fff_gcstep, 781 GLOB_fff_gcstep,
@@ -699,11 +792,11 @@ enum {
699 GLOB_ff_coroutine_wrap_aux, 792 GLOB_ff_coroutine_wrap_aux,
700 GLOB_ff_coroutine_yield, 793 GLOB_ff_coroutine_yield,
701 GLOB_ff_math_abs, 794 GLOB_ff_math_abs,
795 GLOB_ff_math_sqrt,
702 GLOB_ff_math_floor, 796 GLOB_ff_math_floor,
703 GLOB_vm_floor, 797 GLOB_vm_floor,
704 GLOB_ff_math_ceil, 798 GLOB_ff_math_ceil,
705 GLOB_vm_ceil, 799 GLOB_vm_ceil,
706 GLOB_ff_math_sqrt,
707 GLOB_ff_math_log, 800 GLOB_ff_math_log,
708 GLOB_ff_math_log10, 801 GLOB_ff_math_log10,
709 GLOB_ff_math_exp, 802 GLOB_ff_math_exp,
@@ -744,11 +837,12 @@ enum {
744 GLOB_ff_table_getn, 837 GLOB_ff_table_getn,
745 GLOB_ff_bit_tobit, 838 GLOB_ff_bit_tobit,
746 GLOB_ff_bit_band, 839 GLOB_ff_bit_band,
747 GLOB_fff_resbit, 840 GLOB_fff_resbit_op,
748 GLOB_fff_fallback_bit_op, 841 GLOB_fff_fallback_bit_op,
749 GLOB_ff_bit_bor, 842 GLOB_ff_bit_bor,
750 GLOB_ff_bit_bxor, 843 GLOB_ff_bit_bxor,
751 GLOB_ff_bit_bswap, 844 GLOB_ff_bit_bswap,
845 GLOB_fff_resbit,
752 GLOB_ff_bit_bnot, 846 GLOB_ff_bit_bnot,
753 GLOB_ff_bit_lshift, 847 GLOB_ff_bit_lshift,
754 GLOB_ff_bit_rshift, 848 GLOB_ff_bit_rshift,
@@ -761,6 +855,9 @@ enum {
761 GLOB_vm_hotcall, 855 GLOB_vm_hotcall,
762 GLOB_vm_exit_handler, 856 GLOB_vm_exit_handler,
763 GLOB_vm_exit_interp, 857 GLOB_vm_exit_interp,
858 GLOB_vm_floor_sse,
859 GLOB_vm_ceil_sse,
860 GLOB_vm_trunc_sse,
764 GLOB_vm_mod, 861 GLOB_vm_mod,
765 GLOB_vm_exp2, 862 GLOB_vm_exp2,
766 GLOB_vm_exp2raw, 863 GLOB_vm_exp2raw,
@@ -826,6 +923,7 @@ static const char *const globnames[] = {
826 "ff_setmetatable", 923 "ff_setmetatable",
827 "ff_rawget", 924 "ff_rawget",
828 "ff_tonumber", 925 "ff_tonumber",
926 "fff_resxmm0",
829 "fff_resn", 927 "fff_resn",
830 "ff_tostring", 928 "ff_tostring",
831 "fff_gcstep", 929 "fff_gcstep",
@@ -842,11 +940,11 @@ static const char *const globnames[] = {
842 "ff_coroutine_wrap_aux", 940 "ff_coroutine_wrap_aux",
843 "ff_coroutine_yield", 941 "ff_coroutine_yield",
844 "ff_math_abs", 942 "ff_math_abs",
943 "ff_math_sqrt",
845 "ff_math_floor", 944 "ff_math_floor",
846 "vm_floor", 945 "vm_floor",
847 "ff_math_ceil", 946 "ff_math_ceil",
848 "vm_ceil", 947 "vm_ceil",
849 "ff_math_sqrt",
850 "ff_math_log", 948 "ff_math_log",
851 "ff_math_log10", 949 "ff_math_log10",
852 "ff_math_exp", 950 "ff_math_exp",
@@ -887,11 +985,12 @@ static const char *const globnames[] = {
887 "ff_table_getn", 985 "ff_table_getn",
888 "ff_bit_tobit", 986 "ff_bit_tobit",
889 "ff_bit_band", 987 "ff_bit_band",
890 "fff_resbit", 988 "fff_resbit_op",
891 "fff_fallback_bit_op", 989 "fff_fallback_bit_op",
892 "ff_bit_bor", 990 "ff_bit_bor",
893 "ff_bit_bxor", 991 "ff_bit_bxor",
894 "ff_bit_bswap", 992 "ff_bit_bswap",
993 "fff_resbit",
895 "ff_bit_bnot", 994 "ff_bit_bnot",
896 "ff_bit_lshift", 995 "ff_bit_lshift",
897 "ff_bit_rshift", 996 "ff_bit_rshift",
@@ -904,6 +1003,9 @@ static const char *const globnames[] = {
904 "vm_hotcall", 1003 "vm_hotcall",
905 "vm_exit_handler", 1004 "vm_exit_handler",
906 "vm_exit_interp", 1005 "vm_exit_interp",
1006 "vm_floor_sse",
1007 "vm_ceil_sse",
1008 "vm_trunc_sse",
907 "vm_mod", 1009 "vm_mod",
908 "vm_exp2", 1010 "vm_exp2",
909 "vm_exp2raw", 1011 "vm_exp2raw",
@@ -986,154 +1088,424 @@ static void build_subroutines(BuildCtx *ctx, int cmov, int sse)
986 dasm_put(Dst, 766, FRAME_C, CFRAME_RESUME, Dt1(->glref), GG_G2DISP, Dt1(->cframe), Dt1(->status), DISPATCH_GL(vmstate), ~LJ_VMST_INTERP, Dt1(->status), Dt1(->base), Dt1(->top), FRAME_TYPE, FRAME_CP); 1088 dasm_put(Dst, 766, FRAME_C, CFRAME_RESUME, Dt1(->glref), GG_G2DISP, Dt1(->cframe), Dt1(->status), DISPATCH_GL(vmstate), ~LJ_VMST_INTERP, Dt1(->status), Dt1(->base), Dt1(->top), FRAME_TYPE, FRAME_CP);
987 dasm_put(Dst, 871, FRAME_C, Dt1(->cframe), Dt1(->cframe), Dt1(->glref), GG_G2DISP, DISPATCH_GL(vmstate), ~LJ_VMST_INTERP, Dt1(->base), Dt1(->top), LJ_TFUNC, Dt7(->gate)); 1089 dasm_put(Dst, 871, FRAME_C, Dt1(->cframe), Dt1(->cframe), Dt1(->glref), GG_G2DISP, DISPATCH_GL(vmstate), ~LJ_VMST_INTERP, Dt1(->base), Dt1(->top), LJ_TFUNC, Dt7(->gate));
988 dasm_put(Dst, 964, Dt1(->stack), Dt1(->top), Dt1(->cframe), Dt1(->cframe), FRAME_CP, LJ_TNIL, Dt7(->pt), Dt9(->k), LJ_TSTR); 1090 dasm_put(Dst, 964, Dt1(->stack), Dt1(->top), Dt1(->cframe), Dt1(->cframe), FRAME_CP, LJ_TNIL, Dt7(->pt), Dt9(->k), LJ_TSTR);
989 dasm_put(Dst, 1153, BC_GGET, DISPATCH_GL(tmptv), LJ_TTAB, Dt1(->base), Dt1(->base), Dt1(->top)); 1091 dasm_put(Dst, 1153, BC_GGET, DISPATCH_GL(tmptv), LJ_TTAB);
990 dasm_put(Dst, 1309, FRAME_CONT, Dt7(->gate), LJ_TSTR, BC_GSET, DISPATCH_GL(tmptv), LJ_TTAB, Dt1(->base), Dt1(->base)); 1092 if (sse) {
991 dasm_put(Dst, 1456, Dt1(->top), FRAME_CONT, Dt7(->gate), Dt1(->base), Dt1(->base), -BCBIAS_J*4, LJ_TISTRUECOND); 1093 dasm_put(Dst, 1189);
992 dasm_put(Dst, 1650, LJ_TISTRUECOND, Dt1(->base)); 1094 } else {
993 dasm_put(Dst, 1742, Dt1(->base), Dt1(->base), FRAME_CONT, LJ_TFUNC, Dt7(->gate), Dt1(->base), Dt1(->base), Dt1(->base), Dt1(->base)); 1095 dasm_put(Dst, 1202);
994 dasm_put(Dst, 1921, Dt7(->gate), Dt1(->base), Dt1(->base), GG_DISP_STATIC*4, 1+1, LJ_TISTRUECOND); 1096 }
995 dasm_put(Dst, 2070, 1+1, ~LJ_TNUMX); 1097 dasm_put(Dst, 1215, Dt1(->base), Dt1(->base), Dt1(->top), FRAME_CONT, Dt7(->gate), LJ_TSTR, BC_GSET, DISPATCH_GL(tmptv));
1098 dasm_put(Dst, 1373, LJ_TTAB);
1099 if (sse) {
1100 dasm_put(Dst, 1189);
1101 } else {
1102 dasm_put(Dst, 1202);
1103 }
1104 dasm_put(Dst, 1393, Dt1(->base), Dt1(->base), Dt1(->top), FRAME_CONT, Dt7(->gate), Dt1(->base), Dt1(->base));
1105 dasm_put(Dst, 1600, -BCBIAS_J*4, LJ_TISTRUECOND, LJ_TISTRUECOND, Dt1(->base));
1106 dasm_put(Dst, 1711, Dt1(->base), Dt1(->base), FRAME_CONT, LJ_TFUNC);
1107 dasm_put(Dst, 1840, Dt7(->gate), Dt1(->base), Dt1(->base), Dt1(->base), Dt1(->base), Dt7(->gate), Dt1(->base), Dt1(->base), GG_DISP_STATIC*4, 1+1);
1108 dasm_put(Dst, 2006, LJ_TISTRUECOND, 1+1, ~LJ_TNUMX);
996 if (cmov) { 1109 if (cmov) {
997 dasm_put(Dst, 2099); 1110 dasm_put(Dst, 2102);
1111 } else {
1112 dasm_put(Dst, 2106);
1113 }
1114 dasm_put(Dst, 2115, ((char *)(&((GCfuncC *)0)->upvalue)), LJ_TSTR, 1+1, LJ_TTAB, Dt6(->metatable), LJ_TNIL, DISPATCH_GL(mmname)+4*MM_metatable, LJ_TTAB, Dt6(->hmask));
1115 dasm_put(Dst, 2203, Dt5(->hash), sizeof(Node), Dt6(->node), DtB(->key.it), LJ_TSTR, DtB(->key.gcr), DtB(->next), LJ_TNIL);
1116 dasm_put(Dst, 2258, LJ_TUDATA, LJ_TISNUM, LJ_TNUMX, DISPATCH_GL(gcroot[GCROOT_BASEMT]), 2+1, LJ_TTAB);
1117 dasm_put(Dst, 2330, Dt6(->metatable), LJ_TTAB, Dt6(->metatable), LJ_TTAB, Dt6(->marked), LJ_GC_BLACK, Dt6(->marked), cast_byte(~LJ_GC_BLACK), DISPATCH_GL(gc.grayagain), DISPATCH_GL(gc.grayagain), Dt6(->gclist));
1118 dasm_put(Dst, 2395, 2+1, LJ_TTAB, 1+1, LJ_TISNUM);
1119 if (sse) {
1120 dasm_put(Dst, 2486);
1121 } else {
1122 dasm_put(Dst, 2496);
1123 }
1124 dasm_put(Dst, 2503, 1+1, LJ_TSTR, LJ_TSTR, LJ_TISNUM, DISPATCH_GL(gcroot[GCROOT_BASEMT_NUM]), DISPATCH_GL(gc.total), DISPATCH_GL(gc.threshold));
1125 dasm_put(Dst, 2565, Dt1(->base), Dt1(->base), 1+1, LJ_TTAB, Dt1(->base));
1126 dasm_put(Dst, 2655, Dt1(->base), 1+2, LJ_TNIL, LJ_TNIL, 1+1, LJ_TTAB);
1127 dasm_put(Dst, 2761, Dt8(->upvalue[0]), LJ_TFUNC, LJ_TNIL, 1+3, 1+1, LJ_TTAB, LJ_TISNUM);
1128 if (sse) {
1129 dasm_put(Dst, 2816);
1130 } else {
1131 dasm_put(Dst, 2859);
1132 }
1133 dasm_put(Dst, 2879, Dt6(->asize), Dt6(->array), LJ_TNIL, Dt6(->hmask), 1+0);
1134 dasm_put(Dst, 2966, 1+1, LJ_TTAB, Dt8(->upvalue[0]), LJ_TFUNC);
1135 if (sse) {
1136 dasm_put(Dst, 2996);
1137 } else {
1138 dasm_put(Dst, 3006);
1139 }
1140 dasm_put(Dst, 3013, 1+3, 1+1, 8+FRAME_PCALL, DISPATCH_GL(hookmask), HOOK_ACTIVE, LJ_TFUNC, Dt7(->gate));
1141 dasm_put(Dst, 3086, 2+1, LJ_TFUNC, LJ_TFUNC, 2*8+FRAME_PCALL, 2*8, 1+1, LJ_TTHREAD);
1142 dasm_put(Dst, 3184, Dt1(->cframe), Dt1(->status), LUA_YIELD, Dt1(->top), Dt1(->base), Dt1(->maxstack), Dt1(->top), Dt1(->base), Dt1(->top));
1143 dasm_put(Dst, 3249, DISPATCH_GL(vmstate), ~LJ_VMST_INTERP, Dt1(->base), LUA_YIELD, Dt1(->base), Dt1(->top), Dt1(->top));
1144 dasm_put(Dst, 3353, Dt1(->maxstack), LJ_TTRUE, FRAME_TYPE, LJ_TFALSE, Dt1(->top), Dt1(->top), 1+2);
1145 dasm_put(Dst, 3472, Dt1(->top), Dt1(->base), Dt8(->upvalue[0].gcr), Dt1(->cframe), Dt1(->status), LUA_YIELD, Dt1(->top), Dt1(->base));
1146 dasm_put(Dst, 3553, Dt1(->maxstack), Dt1(->top), Dt1(->base), Dt1(->top), DISPATCH_GL(vmstate), ~LJ_VMST_INTERP, Dt1(->base));
1147 dasm_put(Dst, 3661, LUA_YIELD, Dt1(->base), Dt1(->top), Dt1(->top), Dt1(->maxstack), FRAME_TYPE);
1148 dasm_put(Dst, 3757, Dt1(->top), Dt1(->base), Dt1(->cframe), CFRAME_CANYIELD, Dt1(->base), Dt1(->top), Dt1(->cframe), LUA_YIELD, Dt1(->status));
1149 if (sse) {
1150 dasm_put(Dst, 3845, 1+1, LJ_TISNUM);
998 } else { 1151 } else {
999 dasm_put(Dst, 2103); 1152 dasm_put(Dst, 3906, 1+1, LJ_TISNUM);
1000 } 1153 }
1001 dasm_put(Dst, 2112, ((char *)(&((GCfuncC *)0)->upvalue)), LJ_TSTR, 1+1, LJ_TTAB, Dt6(->metatable), LJ_TNIL, DISPATCH_GL(mmname)+4*MM_metatable, LJ_TTAB, Dt6(->hmask)); 1154 dasm_put(Dst, 3938, 1+1, FRAME_TYPE, LJ_TNIL);
1002 dasm_put(Dst, 2200, Dt5(->hash), sizeof(Node), Dt6(->node), DtB(->key.it), LJ_TSTR, DtB(->key.gcr), DtB(->next), LJ_TNIL); 1155 if (sse) {
1003 dasm_put(Dst, 2255, LJ_TUDATA, LJ_TISNUM, LJ_TNUMX, DISPATCH_GL(gcroot[GCROOT_BASEMT]), 2+1, LJ_TTAB); 1156 dasm_put(Dst, 4019, 1+1, LJ_TISNUM, 1+1, LJ_TISNUM);
1004 dasm_put(Dst, 2327, Dt6(->metatable), LJ_TTAB, Dt6(->metatable), LJ_TTAB, Dt6(->marked), LJ_GC_BLACK, Dt6(->marked), cast_byte(~LJ_GC_BLACK), DISPATCH_GL(gc.grayagain), DISPATCH_GL(gc.grayagain), Dt6(->gclist)); 1157 dasm_put(Dst, 4081, 1+1, LJ_TISNUM);
1005 dasm_put(Dst, 2392, 2+1, LJ_TTAB, 1+1, LJ_TISNUM, 1+1); 1158 } else {
1006 dasm_put(Dst, 2499, LJ_TSTR, LJ_TSTR, LJ_TISNUM, DISPATCH_GL(gcroot[GCROOT_BASEMT_NUM]), DISPATCH_GL(gc.total), DISPATCH_GL(gc.threshold)); 1159 dasm_put(Dst, 4111, 1+1, LJ_TISNUM, 1+1, LJ_TISNUM);
1007 dasm_put(Dst, 2560, Dt1(->base), Dt1(->base), 1+1, LJ_TTAB, Dt1(->base), Dt1(->base), 1+2); 1160 dasm_put(Dst, 4170, 1+1, LJ_TISNUM);
1008 dasm_put(Dst, 2706, LJ_TNIL, LJ_TNIL, 1+1, LJ_TTAB, Dt8(->upvalue[0]), LJ_TFUNC, LJ_TNIL); 1161 }
1009 dasm_put(Dst, 2767, 1+3, 1+1, LJ_TTAB, LJ_TISNUM, Dt6(->asize), Dt6(->array), LJ_TNIL); 1162 dasm_put(Dst, 4197, 1+1, LJ_TISNUM, 1+1, LJ_TISNUM, 1+1);
1010 dasm_put(Dst, 2847, Dt6(->hmask), 1+0, 1+1, LJ_TTAB, Dt8(->upvalue[0])); 1163 dasm_put(Dst, 4266, LJ_TISNUM, 1+1, LJ_TISNUM, 1+1);
1011 dasm_put(Dst, 2928, LJ_TFUNC, 1+3, 1+1, 8+FRAME_PCALL, DISPATCH_GL(hookmask), HOOK_ACTIVE, LJ_TFUNC, Dt7(->gate)); 1164 dasm_put(Dst, 4323, LJ_TISNUM, 1+1, LJ_TISNUM, 1+1);
1012 dasm_put(Dst, 3007, 2+1, LJ_TFUNC, LJ_TFUNC, 2*8+FRAME_PCALL, 2*8, 1+1); 1165 dasm_put(Dst, 4386, LJ_TISNUM, 1+1, LJ_TISNUM, 1+1, LJ_TISNUM);
1013 dasm_put(Dst, 3092, LJ_TTHREAD, Dt1(->cframe), Dt1(->status), LUA_YIELD, Dt1(->top), Dt1(->base), Dt1(->maxstack)); 1166 dasm_put(Dst, 4476);
1014 dasm_put(Dst, 3163, Dt1(->top), Dt1(->base), Dt1(->top), DISPATCH_GL(vmstate), ~LJ_VMST_INTERP, Dt1(->base), LUA_YIELD, Dt1(->base), Dt1(->top)); 1167 if (sse) {
1015 dasm_put(Dst, 3271, Dt1(->top), Dt1(->maxstack), LJ_TTRUE, FRAME_TYPE, LJ_TFALSE, Dt1(->top)); 1168 dasm_put(Dst, 4488, 1+1, LJ_TISNUM);
1016 dasm_put(Dst, 3377, Dt1(->top), 1+2, Dt1(->top), Dt1(->base), Dt8(->upvalue[0].gcr), Dt1(->cframe), Dt1(->status), LUA_YIELD); 1169 } else {
1017 dasm_put(Dst, 3469, Dt1(->top), Dt1(->base), Dt1(->maxstack), Dt1(->top), Dt1(->base), Dt1(->top)); 1170 dasm_put(Dst, 4519, 1+1, LJ_TISNUM);
1018 dasm_put(Dst, 3577, DISPATCH_GL(vmstate), ~LJ_VMST_INTERP, Dt1(->base), LUA_YIELD, Dt1(->base), Dt1(->top), Dt1(->top), Dt1(->maxstack)); 1171 }
1019 dasm_put(Dst, 3669, FRAME_TYPE, Dt1(->top), Dt1(->base), Dt1(->cframe), CFRAME_CANYIELD, Dt1(->base), Dt1(->top), Dt1(->cframe), LUA_YIELD); 1172 dasm_put(Dst, 4544);
1020 dasm_put(Dst, 3768, Dt1(->status), 1+1, LJ_TISNUM, 1+1, FRAME_TYPE); 1173 if (sse) {
1021 dasm_put(Dst, 3835, LJ_TNIL, 1+1, LJ_TISNUM, 1+1); 1174 dasm_put(Dst, 4566, 1+1, LJ_TISNUM);
1022 dasm_put(Dst, 3920, LJ_TISNUM, 1+1, LJ_TISNUM, 1+1); 1175 } else {
1023 dasm_put(Dst, 3977, LJ_TISNUM, 1+1, LJ_TISNUM, 1+1); 1176 dasm_put(Dst, 4597, 1+1, LJ_TISNUM);
1024 dasm_put(Dst, 4044, LJ_TISNUM, 1+1, LJ_TISNUM, 1+1); 1177 }
1025 dasm_put(Dst, 4101, LJ_TISNUM, 1+1, LJ_TISNUM, 1+1, LJ_TISNUM); 1178 dasm_put(Dst, 4622);
1026 dasm_put(Dst, 4169, 1+1, LJ_TISNUM, 1+1, LJ_TISNUM); 1179 if (sse) {
1027 dasm_put(Dst, 4263, 1+1, LJ_TISNUM, 1+1, LJ_TISNUM, 1+1); 1180 dasm_put(Dst, 4644, 1+1, LJ_TISNUM);
1028 dasm_put(Dst, 4362, LJ_TISNUM, 1+1, LJ_TISNUM, Dt8(->upvalue[0]), 2+1); 1181 } else {
1029 dasm_put(Dst, 4438, LJ_TISNUM, LJ_TISNUM, 2+1, LJ_TISNUM, LJ_TISNUM); 1182 dasm_put(Dst, 4675, 1+1, LJ_TISNUM);
1030 dasm_put(Dst, 4513, 1+1, LJ_TISNUM, 1+2); 1183 }
1031 dasm_put(Dst, 4639, 1+1, LJ_TISNUM, 1+2); 1184 dasm_put(Dst, 4700);
1032 dasm_put(Dst, 4750, 2+1, LJ_TISNUM, LJ_TISNUM); 1185 if (sse) {
1033 dasm_put(Dst, 4829, 2+1, LJ_TISNUM, LJ_TISNUM, 1+1, LJ_TISNUM); 1186 dasm_put(Dst, 4724, 1+1, LJ_TISNUM, Dt8(->upvalue[0]));
1034 dasm_put(Dst, 4887, LJ_TISNUM); 1187 } else {
1188 dasm_put(Dst, 4759, 1+1, LJ_TISNUM, Dt8(->upvalue[0]));
1189 }
1190 dasm_put(Dst, 4788, 2+1, LJ_TISNUM, LJ_TISNUM, 2+1, LJ_TISNUM, LJ_TISNUM);
1191 dasm_put(Dst, 4853, 1+1, LJ_TISNUM);
1192 if (sse) {
1193 dasm_put(Dst, 4948);
1194 } else {
1195 dasm_put(Dst, 4954);
1196 }
1197 dasm_put(Dst, 4963);
1198 if (sse) {
1199 dasm_put(Dst, 4988);
1200 } else {
1201 dasm_put(Dst, 4994);
1202 }
1203 dasm_put(Dst, 4997, 1+2);
1204 if (sse) {
1205 dasm_put(Dst, 5006);
1206 } else {
1207 dasm_put(Dst, 5014);
1208 }
1209 dasm_put(Dst, 1597);
1210 if (sse) {
1211 dasm_put(Dst, 5022);
1212 } else {
1213 dasm_put(Dst, 5054);
1214 }
1215 dasm_put(Dst, 5073);
1216 if (sse) {
1217 dasm_put(Dst, 5089, 1+1, LJ_TISNUM);
1218 } else {
1219 dasm_put(Dst, 5114, 1+1, LJ_TISNUM);
1220 }
1221 dasm_put(Dst, 5136);
1222 if (sse) {
1223 dasm_put(Dst, 5154);
1224 } else {
1225 dasm_put(Dst, 5180);
1226 }
1227 dasm_put(Dst, 5197, 1+2);
1228 if (sse) {
1229 dasm_put(Dst, 5237);
1230 } else {
1231 dasm_put(Dst, 5245);
1232 }
1233 dasm_put(Dst, 5255, 2+1, LJ_TISNUM, LJ_TISNUM);
1234 if (0 && sse) { // NYI
1235 dasm_put(Dst, 5307, 1+1, LJ_TISNUM, LJ_TISNUM);
1236 } else {
1237 dasm_put(Dst, 5354, 2+1, LJ_TISNUM, LJ_TISNUM);
1238 }
1239 if (sse) {
1240 dasm_put(Dst, 5395, 1+1, LJ_TISNUM, LJ_TISNUM);
1241 } else {
1242 dasm_put(Dst, 5466, 1+1, LJ_TISNUM, LJ_TISNUM);
1035 if (cmov) { 1243 if (cmov) {
1036 dasm_put(Dst, 4921); 1244 dasm_put(Dst, 5519);
1037 } else { 1245 } else {
1038 dasm_put(Dst, 4929); 1246 dasm_put(Dst, 5527);
1247 }
1248 dasm_put(Dst, 5458);
1039 } 1249 }
1040 dasm_put(Dst, 4950, 1+1, LJ_TISNUM, LJ_TISNUM); 1250 if (sse) {
1251 dasm_put(Dst, 5548, 1+1, LJ_TISNUM, LJ_TISNUM);
1252 } else {
1253 dasm_put(Dst, 5619, 1+1, LJ_TISNUM, LJ_TISNUM);
1041 if (cmov) { 1254 if (cmov) {
1042 dasm_put(Dst, 5010); 1255 dasm_put(Dst, 5672);
1256 } else {
1257 dasm_put(Dst, 5680);
1258 }
1259 dasm_put(Dst, 5458);
1260 }
1261 if (!sse) {
1262 dasm_put(Dst, 5701);
1263 }
1264 dasm_put(Dst, 5710, 1+1, LJ_TSTR);
1265 if (sse) {
1266 dasm_put(Dst, 5732, Dt5(->len));
1267 } else {
1268 dasm_put(Dst, 5743, Dt5(->len));
1269 }
1270 dasm_put(Dst, 5751, 1+1, LJ_TSTR, Dt5(->len), Dt5([1]));
1271 if (sse) {
1272 dasm_put(Dst, 5785);
1273 } else {
1274 dasm_put(Dst, 5795);
1275 }
1276 dasm_put(Dst, 5808, DISPATCH_GL(gc.total), DISPATCH_GL(gc.threshold), 1+1, LJ_TISNUM);
1277 if (sse) {
1278 dasm_put(Dst, 5843);
1279 } else {
1280 dasm_put(Dst, 5863);
1281 }
1282 dasm_put(Dst, 5883, Dt1(->base), Dt1(->base), LJ_TSTR, DISPATCH_GL(gc.total), DISPATCH_GL(gc.threshold), 1+2, LJ_TISNUM);
1283 dasm_put(Dst, 2481);
1284 if (sse) {
1285 dasm_put(Dst, 5994);
1286 } else {
1287 dasm_put(Dst, 6005);
1288 }
1289 dasm_put(Dst, 6013, LJ_TSTR, LJ_TISNUM, Dt5(->len));
1290 if (sse) {
1291 dasm_put(Dst, 6043);
1292 } else {
1293 dasm_put(Dst, 6054);
1294 }
1295 dasm_put(Dst, 6062, sizeof(GCstr)-1);
1296 dasm_put(Dst, 6143, 2+1, DISPATCH_GL(gc.total), DISPATCH_GL(gc.threshold));
1297 dasm_put(Dst, 6202, LJ_TSTR, LJ_TISNUM);
1298 if (sse) {
1299 dasm_put(Dst, 6227);
1300 } else {
1301 dasm_put(Dst, 6234);
1302 }
1303 dasm_put(Dst, 6246, Dt5(->len), DISPATCH_GL(tmpbuf.sz), Dt5([1]), DISPATCH_GL(tmpbuf.buf), 1+1);
1304 dasm_put(Dst, 6316, DISPATCH_GL(gc.total), DISPATCH_GL(gc.threshold), LJ_TSTR, Dt5(->len), DISPATCH_GL(tmpbuf.sz), sizeof(GCstr), DISPATCH_GL(tmpbuf.buf));
1305 dasm_put(Dst, 6400, 1+1, DISPATCH_GL(gc.total), DISPATCH_GL(gc.threshold), LJ_TSTR, Dt5(->len), DISPATCH_GL(tmpbuf.sz));
1306 dasm_put(Dst, 6459, sizeof(GCstr), DISPATCH_GL(tmpbuf.buf), 1+1, DISPATCH_GL(gc.total));
1307 dasm_put(Dst, 6544, DISPATCH_GL(gc.threshold), LJ_TSTR, Dt5(->len), DISPATCH_GL(tmpbuf.sz), sizeof(GCstr), DISPATCH_GL(tmpbuf.buf));
1308 dasm_put(Dst, 6619, 1+1, LJ_TTAB);
1309 if (sse) {
1310 dasm_put(Dst, 6692);
1311 } else {
1312 dasm_put(Dst, 6702);
1313 }
1314 if (sse) {
1315 dasm_put(Dst, 6713, 1+1, LJ_TISNUM);
1316 } else {
1317 dasm_put(Dst, 6770, 1+1, LJ_TISNUM);
1318 }
1319 if (sse) {
1320 dasm_put(Dst, 6814, 1+1, LJ_TISNUM);
1043 } else { 1321 } else {
1044 dasm_put(Dst, 5018); 1322 dasm_put(Dst, 6862, 1+1, LJ_TISNUM);
1045 } 1323 }
1046 dasm_put(Dst, 5039, 1+1, LJ_TSTR, Dt5(->len), 1+1, LJ_TSTR); 1324 dasm_put(Dst, 6902);
1047 dasm_put(Dst, 5098, Dt5(->len), Dt5([1]), DISPATCH_GL(gc.total), DISPATCH_GL(gc.threshold), 1+1, LJ_TISNUM); 1325 if (sse) {
1048 dasm_put(Dst, 5159, Dt1(->base), Dt1(->base), LJ_TSTR, DISPATCH_GL(gc.total), DISPATCH_GL(gc.threshold), 1+2); 1326 dasm_put(Dst, 6912);
1049 dasm_put(Dst, 5284, LJ_TISNUM, LJ_TSTR, LJ_TISNUM, Dt5(->len)); 1327 }
1050 dasm_put(Dst, 5375, sizeof(GCstr)-1); 1328 dasm_put(Dst, 6917, LJ_TISNUM);
1051 dasm_put(Dst, 5449, 2+1, DISPATCH_GL(gc.total), DISPATCH_GL(gc.threshold), LJ_TSTR, LJ_TISNUM); 1329 if (sse) {
1052 dasm_put(Dst, 5522, Dt5(->len), DISPATCH_GL(tmpbuf.sz), Dt5([1]), DISPATCH_GL(tmpbuf.buf), 1+1, DISPATCH_GL(gc.total)); 1330 dasm_put(Dst, 6935);
1053 dasm_put(Dst, 5589, DISPATCH_GL(gc.threshold), LJ_TSTR, Dt5(->len), DISPATCH_GL(tmpbuf.sz), sizeof(GCstr), DISPATCH_GL(tmpbuf.buf)); 1331 } else {
1054 dasm_put(Dst, 5670, 1+1, DISPATCH_GL(gc.total), DISPATCH_GL(gc.threshold), LJ_TSTR, Dt5(->len), DISPATCH_GL(tmpbuf.sz)); 1332 dasm_put(Dst, 6952);
1055 dasm_put(Dst, 5729, sizeof(GCstr), DISPATCH_GL(tmpbuf.buf), 1+1, DISPATCH_GL(gc.total)); 1333 }
1056 dasm_put(Dst, 5814, DISPATCH_GL(gc.threshold), LJ_TSTR, Dt5(->len), DISPATCH_GL(tmpbuf.sz), sizeof(GCstr), DISPATCH_GL(tmpbuf.buf)); 1334 dasm_put(Dst, 6965);
1057 dasm_put(Dst, 5889, 1+1, LJ_TTAB, 1+1); 1335 if (sse) {
1058 dasm_put(Dst, 5982, LJ_TISNUM, 1+1, LJ_TISNUM, LJ_TISNUM); 1336 dasm_put(Dst, 6973, 1+1, LJ_TISNUM);
1059 dasm_put(Dst, 6102, 1+1, LJ_TISNUM, LJ_TISNUM, 1+1, LJ_TISNUM); 1337 } else {
1060 dasm_put(Dst, 6204, LJ_TISNUM, 1+1, LJ_TISNUM, 1+1); 1338 dasm_put(Dst, 7021, 1+1, LJ_TISNUM);
1061 dasm_put(Dst, 6325, LJ_TISNUM, 2+1, LJ_TISNUM, LJ_TISNUM); 1339 }
1062 dasm_put(Dst, 6455, 2+1, LJ_TISNUM, LJ_TISNUM, 2+1, LJ_TISNUM, LJ_TISNUM); 1340 dasm_put(Dst, 6902);
1063 dasm_put(Dst, 6556, 2+1, LJ_TISNUM, LJ_TISNUM, 2+1, LJ_TISNUM); 1341 if (sse) {
1064 dasm_put(Dst, 6695, LJ_TISNUM, 1+2, 1+1, Dt1(->base), 8*LUA_MINSTACK, Dt1(->top), Dt1(->maxstack), Dt8(->f)); 1342 dasm_put(Dst, 6912);
1065 dasm_put(Dst, 6822, Dt1(->base), Dt1(->top), Dt7(->gate), LJ_TFUNC, Dt7(->gate), Dt1(->base), LUA_MINSTACK, Dt1(->base)); 1343 }
1066 dasm_put(Dst, 6933, Dt1(->top), Dt1(->base), Dt1(->top)); 1344 dasm_put(Dst, 6917, LJ_TISNUM);
1345 if (sse) {
1346 dasm_put(Dst, 7061);
1347 } else {
1348 dasm_put(Dst, 7078);
1349 }
1350 dasm_put(Dst, 6965);
1351 if (sse) {
1352 dasm_put(Dst, 7091, 1+1, LJ_TISNUM);
1353 } else {
1354 dasm_put(Dst, 7139, 1+1, LJ_TISNUM);
1355 }
1356 dasm_put(Dst, 6902);
1357 if (sse) {
1358 dasm_put(Dst, 6912);
1359 }
1360 dasm_put(Dst, 6917, LJ_TISNUM);
1361 if (sse) {
1362 dasm_put(Dst, 7179);
1363 } else {
1364 dasm_put(Dst, 7196);
1365 }
1366 dasm_put(Dst, 6965);
1367 if (sse) {
1368 dasm_put(Dst, 7209, 1+1, LJ_TISNUM);
1369 } else {
1370 dasm_put(Dst, 7257, 1+1, LJ_TISNUM);
1371 }
1372 dasm_put(Dst, 7297);
1373 if (sse) {
1374 dasm_put(Dst, 7304, 1+1, LJ_TISNUM);
1375 } else {
1376 dasm_put(Dst, 7352, 1+1, LJ_TISNUM);
1377 }
1378 dasm_put(Dst, 7392);
1379 if (sse) {
1380 dasm_put(Dst, 7396);
1381 } else {
1382 dasm_put(Dst, 7423);
1383 }
1384 dasm_put(Dst, 7438);
1385 if (sse) {
1386 dasm_put(Dst, 6687);
1387 }
1388 dasm_put(Dst, 7441);
1389 if (sse) {
1390 dasm_put(Dst, 7450, 1+1, LJ_TISNUM, LJ_TISNUM);
1391 } else {
1392 dasm_put(Dst, 7524, 2+1, LJ_TISNUM, LJ_TISNUM);
1393 }
1394 dasm_put(Dst, 7590);
1395 if (sse) {
1396 dasm_put(Dst, 7599, 1+1, LJ_TISNUM, LJ_TISNUM);
1397 } else {
1398 dasm_put(Dst, 7673, 2+1, LJ_TISNUM, LJ_TISNUM);
1399 }
1400 dasm_put(Dst, 7739);
1401 if (sse) {
1402 dasm_put(Dst, 7749, 1+1, LJ_TISNUM, LJ_TISNUM);
1403 } else {
1404 dasm_put(Dst, 7823, 2+1, LJ_TISNUM, LJ_TISNUM);
1405 }
1406 dasm_put(Dst, 7889);
1407 if (sse) {
1408 dasm_put(Dst, 7899, 1+1, LJ_TISNUM, LJ_TISNUM);
1409 } else {
1410 dasm_put(Dst, 7973, 2+1, LJ_TISNUM, LJ_TISNUM);
1411 }
1412 dasm_put(Dst, 8039);
1413 if (sse) {
1414 dasm_put(Dst, 8048, 1+1, LJ_TISNUM, LJ_TISNUM);
1415 } else {
1416 dasm_put(Dst, 8122, 2+1, LJ_TISNUM, LJ_TISNUM);
1417 }
1418 dasm_put(Dst, 8188, 1+2, 1+1, Dt1(->base), 8*LUA_MINSTACK, Dt1(->top), Dt1(->maxstack), Dt8(->f), Dt1(->base));
1419 dasm_put(Dst, 8272, Dt1(->top), Dt7(->gate), LJ_TFUNC, Dt7(->gate), Dt1(->base), LUA_MINSTACK, Dt1(->base), Dt1(->top));
1420 dasm_put(Dst, 8391, Dt1(->base), Dt1(->top));
1067#if LJ_HASJIT 1421#if LJ_HASJIT
1068 dasm_put(Dst, 6985, DISPATCH_GL(hookmask), HOOK_VMEVENT, HOOK_ACTIVE, LUA_MASKLINE|LUA_MASKCOUNT, DISPATCH_GL(hookcount)); 1422 dasm_put(Dst, 8432, DISPATCH_GL(hookmask), HOOK_VMEVENT, HOOK_ACTIVE, LUA_MASKLINE|LUA_MASKCOUNT, DISPATCH_GL(hookcount));
1069#endif 1423#endif
1070 dasm_put(Dst, 7016, DISPATCH_GL(hookmask), HOOK_ACTIVE, LUA_MASKLINE|LUA_MASKCOUNT, DISPATCH_GL(hookcount), LUA_MASKLINE, Dt1(->base), Dt1(->base), GG_DISP_STATIC*4); 1424 dasm_put(Dst, 8463, DISPATCH_GL(hookmask), HOOK_ACTIVE, LUA_MASKLINE|LUA_MASKCOUNT, DISPATCH_GL(hookcount), LUA_MASKLINE, Dt1(->base), Dt1(->base), GG_DISP_STATIC*4);
1071#if LJ_HASJIT 1425#if LJ_HASJIT
1072 dasm_put(Dst, 7107, Dt1(->base), GG_DISP2J, DISPATCH_J(L)); 1426 dasm_put(Dst, 8554, Dt1(->base), GG_DISP2J, DISPATCH_J(L));
1073#endif 1427#endif
1074 dasm_put(Dst, 7140); 1428 dasm_put(Dst, 8587);
1075#if LJ_HASJIT 1429#if LJ_HASJIT
1076 dasm_put(Dst, 7143, Dt1(->base), GG_DISP2J, DISPATCH_J(L), Dt1(->base)); 1430 dasm_put(Dst, 8590, Dt1(->base), GG_DISP2J, DISPATCH_J(L), Dt1(->base));
1077#endif 1431#endif
1078 dasm_put(Dst, 7193); 1432 dasm_put(Dst, 8640);
1079#if LJ_HASJIT 1433#if LJ_HASJIT
1080 dasm_put(Dst, 7196, 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)); 1434 dasm_put(Dst, 8643, 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));
1081#endif 1435#endif
1082 dasm_put(Dst, 7346); 1436 dasm_put(Dst, 8793);
1083#if LJ_HASJIT 1437#if LJ_HASJIT
1084 dasm_put(Dst, 7349, Dt7(->pt), Dt9(->k), DISPATCH_GL(jit_L), DISPATCH_GL(vmstate), ~LJ_VMST_INTERP); 1438 dasm_put(Dst, 8796, Dt7(->pt), Dt9(->k), DISPATCH_GL(jit_L), DISPATCH_GL(vmstate), ~LJ_VMST_INTERP);
1085#endif 1439#endif
1086 dasm_put(Dst, 7389); 1440 dasm_put(Dst, 8836);
1441 if (!sse) {
1442 dasm_put(Dst, 8839);
1443 }
1444 dasm_put(Dst, 8884);
1445 if (!sse) {
1446 dasm_put(Dst, 8986);
1447 }
1448 dasm_put(Dst, 9031);
1449 if (!sse) {
1450 dasm_put(Dst, 9133);
1451 }
1452 dasm_put(Dst, 9172);
1087 if (sse) { 1453 if (sse) {
1088 dasm_put(Dst, 7524); 1454 dasm_put(Dst, 9277);
1089 } else { 1455 } else {
1090 dasm_put(Dst, 7654); 1456 dasm_put(Dst, 9407);
1091 } 1457 }
1092 dasm_put(Dst, 7700); 1458 dasm_put(Dst, 9454);
1093 if (cmov) { 1459 if (cmov) {
1094 dasm_put(Dst, 7785); 1460 dasm_put(Dst, 9538);
1095 } else { 1461 } else {
1096 dasm_put(Dst, 7789); 1462 dasm_put(Dst, 9542);
1097 } 1463 }
1098 dasm_put(Dst, 7798); 1464 dasm_put(Dst, 9551);
1099 dasm_put(Dst, 7867); 1465 dasm_put(Dst, 9620);
1100 dasm_put(Dst, 7969); 1466 dasm_put(Dst, 9722);
1101 if (cmov) { 1467 if (cmov) {
1102 dasm_put(Dst, 7982); 1468 dasm_put(Dst, 9735);
1103 } else { 1469 } else {
1104 dasm_put(Dst, 7986); 1470 dasm_put(Dst, 9739);
1105 } 1471 }
1106 dasm_put(Dst, 7995); 1472 dasm_put(Dst, 9748);
1107 if (cmov) { 1473 if (cmov) {
1108 dasm_put(Dst, 7785); 1474 dasm_put(Dst, 9538);
1475 } else {
1476 dasm_put(Dst, 9766);
1477 }
1478 dasm_put(Dst, 9773);
1479 if (sse) {
1480 dasm_put(Dst, 9856);
1481 dasm_put(Dst, 9913);
1109 } else { 1482 } else {
1110 dasm_put(Dst, 8013); 1483 dasm_put(Dst, 9945);
1111 } 1484 }
1112 dasm_put(Dst, 8020); 1485 dasm_put(Dst, 9984);
1113 dasm_put(Dst, 8135); 1486 dasm_put(Dst, 10071);
1114 dasm_put(Dst, 8228);
1115 if (sse) { 1487 if (sse) {
1116 dasm_put(Dst, 8246); 1488 dasm_put(Dst, 10089);
1117 dasm_put(Dst, 8333); 1489 dasm_put(Dst, 10176);
1118 dasm_put(Dst, 8427); 1490 dasm_put(Dst, 10270);
1119 } else { 1491 } else {
1120 dasm_put(Dst, 8513); 1492 dasm_put(Dst, 10356);
1121 dasm_put(Dst, 8596); 1493 dasm_put(Dst, 10439);
1122 if (cmov) { 1494 if (cmov) {
1123 dasm_put(Dst, 8651); 1495 dasm_put(Dst, 10494);
1124 } else { 1496 } else {
1125 dasm_put(Dst, 8670); 1497 dasm_put(Dst, 10513);
1126 } 1498 }
1127 dasm_put(Dst, 8711); 1499 dasm_put(Dst, 10554);
1128 } 1500 }
1129 dasm_put(Dst, 8715); 1501 dasm_put(Dst, 10558);
1130} 1502}
1131 1503
1132/* Generate the code for a single instruction. */ 1504/* Generate the code for a single instruction. */
1133static void build_ins(BuildCtx *ctx, BCOp op, int defop, int cmov, int sse) 1505static void build_ins(BuildCtx *ctx, BCOp op, int defop, int cmov, int sse)
1134{ 1506{
1135 int vk = 0; 1507 int vk = 0;
1136 dasm_put(Dst, 1454, defop); 1508 dasm_put(Dst, 10612, defop);
1137 1509
1138 switch (op) { 1510 switch (op) {
1139 1511
@@ -1142,612 +1514,658 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop, int cmov, int sse)
1142 /* Remember: all ops branch for a true comparison, fall through otherwise. */ 1514 /* Remember: all ops branch for a true comparison, fall through otherwise. */
1143 1515
1144 case BC_ISLT: case BC_ISGE: case BC_ISLE: case BC_ISGT: 1516 case BC_ISLT: case BC_ISGE: case BC_ISLE: case BC_ISGT:
1145 dasm_put(Dst, 8769, LJ_TISNUM, LJ_TISNUM); 1517 dasm_put(Dst, 10614, LJ_TISNUM, LJ_TISNUM);
1146 if (sse) { 1518 if (sse) {
1147 dasm_put(Dst, 8790); 1519 dasm_put(Dst, 10635);
1148 } else { 1520 } else {
1149 dasm_put(Dst, 8805); 1521 dasm_put(Dst, 10650);
1150 if (cmov) { 1522 if (cmov) {
1151 dasm_put(Dst, 8815); 1523 dasm_put(Dst, 10660);
1152 } else { 1524 } else {
1153 dasm_put(Dst, 8821); 1525 dasm_put(Dst, 10666);
1154 } 1526 }
1155 } 1527 }
1156 switch (op) { 1528 switch (op) {
1157 case BC_ISLT: 1529 case BC_ISLT:
1158 dasm_put(Dst, 8828); 1530 dasm_put(Dst, 10673);
1159 break; 1531 break;
1160 case BC_ISGE: 1532 case BC_ISGE:
1161 dasm_put(Dst, 8591); 1533 dasm_put(Dst, 10434);
1162 break; 1534 break;
1163 case BC_ISLE: 1535 case BC_ISLE:
1164 dasm_put(Dst, 5884); 1536 dasm_put(Dst, 6614);
1165 break; 1537 break;
1166 case BC_ISGT: 1538 case BC_ISGT:
1167 dasm_put(Dst, 8833); 1539 dasm_put(Dst, 10678);
1168 break; 1540 break;
1169 default: break; /* Shut up GCC. */ 1541 default: break; /* Shut up GCC. */
1170 } 1542 }
1171 dasm_put(Dst, 8838, -BCBIAS_J*4); 1543 dasm_put(Dst, 10683, -BCBIAS_J*4);
1172 break; 1544 break;
1173 1545
1174 case BC_ISEQV: case BC_ISNEV: 1546 case BC_ISEQV: case BC_ISNEV:
1175 vk = op == BC_ISEQV; 1547 vk = op == BC_ISEQV;
1176 dasm_put(Dst, 8871, LJ_TISNUM, LJ_TISNUM); 1548 dasm_put(Dst, 10716, LJ_TISNUM, LJ_TISNUM);
1177 if (sse) { 1549 if (sse) {
1178 dasm_put(Dst, 8897); 1550 dasm_put(Dst, 10742);
1179 } else { 1551 } else {
1180 dasm_put(Dst, 8909); 1552 dasm_put(Dst, 10754);
1181 if (cmov) { 1553 if (cmov) {
1182 dasm_put(Dst, 8815); 1554 dasm_put(Dst, 10660);
1183 } else { 1555 } else {
1184 dasm_put(Dst, 8821); 1556 dasm_put(Dst, 10666);
1185 } 1557 }
1186 } 1558 }
1187 iseqne_fp: 1559 iseqne_fp:
1188 if (vk) { 1560 if (vk) {
1189 dasm_put(Dst, 8916); 1561 dasm_put(Dst, 10761);
1190 } else { 1562 } else {
1191 dasm_put(Dst, 8925); 1563 dasm_put(Dst, 10770);
1192 } 1564 }
1193 iseqne_end: 1565 iseqne_end:
1194 if (vk) { 1566 if (vk) {
1195 dasm_put(Dst, 8934, -BCBIAS_J*4); 1567 dasm_put(Dst, 10779, -BCBIAS_J*4);
1196 } else { 1568 } else {
1197 dasm_put(Dst, 8949, -BCBIAS_J*4); 1569 dasm_put(Dst, 10794, -BCBIAS_J*4);
1198 } 1570 }
1199 dasm_put(Dst, 7174); 1571 dasm_put(Dst, 8621);
1200 if (op == BC_ISEQV || op == BC_ISNEV) { 1572 if (op == BC_ISEQV || op == BC_ISNEV) {
1201 dasm_put(Dst, 8964, LJ_TISPRI, LJ_TISTABUD, Dt6(->metatable), Dt6(->nomm), 1<<MM_eq); 1573 dasm_put(Dst, 10809, LJ_TISPRI, LJ_TISTABUD, Dt6(->metatable), Dt6(->nomm), 1<<MM_eq);
1202 if (vk) { 1574 if (vk) {
1203 dasm_put(Dst, 9022); 1575 dasm_put(Dst, 10867);
1204 } else { 1576 } else {
1205 dasm_put(Dst, 9026); 1577 dasm_put(Dst, 10871);
1206 } 1578 }
1207 dasm_put(Dst, 9032); 1579 dasm_put(Dst, 10877);
1208 } 1580 }
1209 break; 1581 break;
1210 case BC_ISEQS: case BC_ISNES: 1582 case BC_ISEQS: case BC_ISNES:
1211 vk = op == BC_ISEQS; 1583 vk = op == BC_ISEQS;
1212 dasm_put(Dst, 9037, LJ_TSTR); 1584 dasm_put(Dst, 10882, LJ_TSTR);
1213 iseqne_test: 1585 iseqne_test:
1214 if (vk) { 1586 if (vk) {
1215 dasm_put(Dst, 8920); 1587 dasm_put(Dst, 10765);
1216 } else { 1588 } else {
1217 dasm_put(Dst, 8929); 1589 dasm_put(Dst, 10774);
1218 } 1590 }
1219 goto iseqne_end; 1591 goto iseqne_end;
1220 case BC_ISEQN: case BC_ISNEN: 1592 case BC_ISEQN: case BC_ISNEN:
1221 vk = op == BC_ISEQN; 1593 vk = op == BC_ISEQN;
1222 dasm_put(Dst, 9060, LJ_TISNUM); 1594 dasm_put(Dst, 10905, LJ_TISNUM);
1223 if (sse) { 1595 if (sse) {
1224 dasm_put(Dst, 9074); 1596 dasm_put(Dst, 10919);
1225 } else { 1597 } else {
1226 dasm_put(Dst, 9086); 1598 dasm_put(Dst, 10931);
1227 if (cmov) { 1599 if (cmov) {
1228 dasm_put(Dst, 8815); 1600 dasm_put(Dst, 10660);
1229 } else { 1601 } else {
1230 dasm_put(Dst, 8821); 1602 dasm_put(Dst, 10666);
1231 } 1603 }
1232 } 1604 }
1233 goto iseqne_fp; 1605 goto iseqne_fp;
1234 case BC_ISEQP: case BC_ISNEP: 1606 case BC_ISEQP: case BC_ISNEP:
1235 vk = op == BC_ISEQP; 1607 vk = op == BC_ISEQP;
1236 dasm_put(Dst, 9093); 1608 dasm_put(Dst, 10938);
1237 goto iseqne_test; 1609 goto iseqne_test;
1238 1610
1239 /* -- Unary test and copy ops ------------------------------------------- */ 1611 /* -- Unary test and copy ops ------------------------------------------- */
1240 1612
1241 case BC_ISTC: case BC_ISFC: case BC_IST: case BC_ISF: 1613 case BC_ISTC: case BC_ISFC: case BC_IST: case BC_ISF:
1242 dasm_put(Dst, 9104, LJ_TISTRUECOND); 1614 dasm_put(Dst, 10949, LJ_TISTRUECOND);
1243 if (op == BC_IST || op == BC_ISTC) { 1615 if (op == BC_IST || op == BC_ISTC) {
1244 dasm_put(Dst, 9116); 1616 dasm_put(Dst, 10961);
1245 } else { 1617 } else {
1246 dasm_put(Dst, 9121); 1618 dasm_put(Dst, 10966);
1247 } 1619 }
1248 if (op == BC_ISTC || op == BC_ISFC) { 1620 if (op == BC_ISTC || op == BC_ISFC) {
1249 dasm_put(Dst, 9126); 1621 dasm_put(Dst, 10971);
1250 } 1622 }
1251 dasm_put(Dst, 9137, -BCBIAS_J*4); 1623 dasm_put(Dst, 10982, -BCBIAS_J*4);
1252 break; 1624 break;
1253 1625
1254 /* -- Unary ops --------------------------------------------------------- */ 1626 /* -- Unary ops --------------------------------------------------------- */
1255 1627
1256 case BC_MOV: 1628 case BC_MOV:
1257 dasm_put(Dst, 9168); 1629 dasm_put(Dst, 11013);
1258 break; 1630 break;
1259 case BC_NOT: 1631 case BC_NOT:
1260 dasm_put(Dst, 9201, LJ_TISTRUECOND, LJ_TTRUE); 1632 dasm_put(Dst, 11046, LJ_TISTRUECOND, LJ_TTRUE);
1261 break; 1633 break;
1262 case BC_UNM: 1634 case BC_UNM:
1263 dasm_put(Dst, 9236, LJ_TISNUM); 1635 dasm_put(Dst, 11081, LJ_TISNUM);
1264 if (sse) { 1636 if (sse) {
1265 dasm_put(Dst, 9247); 1637 dasm_put(Dst, 11092);
1266 } else { 1638 } else {
1267 dasm_put(Dst, 9277); 1639 dasm_put(Dst, 11122);
1268 } 1640 }
1269 dasm_put(Dst, 7174); 1641 dasm_put(Dst, 8621);
1270 break; 1642 break;
1271 case BC_LEN: 1643 case BC_LEN:
1272 dasm_put(Dst, 9286, LJ_TSTR); 1644 dasm_put(Dst, 11131, LJ_TSTR);
1273 if (sse) { 1645 if (sse) {
1274 dasm_put(Dst, 9300, Dt5(->len)); 1646 dasm_put(Dst, 11145, Dt5(->len));
1275 } else { 1647 } else {
1276 dasm_put(Dst, 9318, Dt5(->len)); 1648 dasm_put(Dst, 11163, Dt5(->len));
1277 } 1649 }
1278 dasm_put(Dst, 9327, LJ_TTAB); 1650 dasm_put(Dst, 11172, LJ_TTAB);
1279 if (sse) { 1651 if (sse) {
1280 dasm_put(Dst, 9367); 1652 dasm_put(Dst, 11212);
1281 } else { 1653 } else {
1282 dasm_put(Dst, 9376); 1654 dasm_put(Dst, 11221);
1283 } 1655 }
1284 dasm_put(Dst, 9386); 1656 dasm_put(Dst, 11231);
1285 break; 1657 break;
1286 1658
1287 /* -- Binary ops -------------------------------------------------------- */ 1659 /* -- Binary ops -------------------------------------------------------- */
1288 1660
1289 1661
1290 case BC_ADDVN: case BC_ADDNV: case BC_ADDVV: 1662 case BC_ADDVN: case BC_ADDNV: case BC_ADDVV:
1291 dasm_put(Dst, 9396); 1663 dasm_put(Dst, 11241);
1292 vk = ((int)op - BC_ADDVN) / (BC_ADDNV-BC_ADDVN); 1664 vk = ((int)op - BC_ADDVN) / (BC_ADDNV-BC_ADDVN);
1293 switch (vk) { 1665 switch (vk) {
1294 case 0: 1666 case 0:
1295 dasm_put(Dst, 9404, LJ_TISNUM); 1667 dasm_put(Dst, 11249, LJ_TISNUM);
1296 if (sse) { 1668 if (sse) {
1297 dasm_put(Dst, 9416); 1669 dasm_put(Dst, 11261);
1298 } else { 1670 } else {
1299 dasm_put(Dst, 9430); 1671 dasm_put(Dst, 11275);
1300 } 1672 }
1301 break; 1673 break;
1302 case 1: 1674 case 1:
1303 dasm_put(Dst, 9438, LJ_TISNUM); 1675 dasm_put(Dst, 11283, LJ_TISNUM);
1304 if (sse) { 1676 if (sse) {
1305 dasm_put(Dst, 9450); 1677 dasm_put(Dst, 11295);
1306 } else { 1678 } else {
1307 dasm_put(Dst, 9464); 1679 dasm_put(Dst, 11309);
1308 } 1680 }
1309 break; 1681 break;
1310 default: 1682 default:
1311 dasm_put(Dst, 9472, LJ_TISNUM, LJ_TISNUM); 1683 dasm_put(Dst, 11317, LJ_TISNUM, LJ_TISNUM);
1312 if (sse) { 1684 if (sse) {
1313 dasm_put(Dst, 9494); 1685 dasm_put(Dst, 11339);
1314 } else { 1686 } else {
1315 dasm_put(Dst, 9508); 1687 dasm_put(Dst, 11353);
1316 } 1688 }
1317 break; 1689 break;
1318 } 1690 }
1319 if (sse) { 1691 if (sse) {
1320 dasm_put(Dst, 9270); 1692 dasm_put(Dst, 11115);
1321 } else { 1693 } else {
1322 dasm_put(Dst, 9282); 1694 dasm_put(Dst, 11127);
1323 } 1695 }
1324 dasm_put(Dst, 7174); 1696 dasm_put(Dst, 8621);
1325 break; 1697 break;
1326 case BC_SUBVN: case BC_SUBNV: case BC_SUBVV: 1698 case BC_SUBVN: case BC_SUBNV: case BC_SUBVV:
1327 dasm_put(Dst, 9396); 1699 dasm_put(Dst, 11241);
1328 vk = ((int)op - BC_ADDVN) / (BC_ADDNV-BC_ADDVN); 1700 vk = ((int)op - BC_ADDVN) / (BC_ADDNV-BC_ADDVN);
1329 switch (vk) { 1701 switch (vk) {
1330 case 0: 1702 case 0:
1331 dasm_put(Dst, 9404, LJ_TISNUM); 1703 dasm_put(Dst, 11249, LJ_TISNUM);
1332 if (sse) { 1704 if (sse) {
1333 dasm_put(Dst, 9516); 1705 dasm_put(Dst, 11361);
1334 } else { 1706 } else {
1335 dasm_put(Dst, 9530); 1707 dasm_put(Dst, 11375);
1336 } 1708 }
1337 break; 1709 break;
1338 case 1: 1710 case 1:
1339 dasm_put(Dst, 9438, LJ_TISNUM); 1711 dasm_put(Dst, 11283, LJ_TISNUM);
1340 if (sse) { 1712 if (sse) {
1341 dasm_put(Dst, 9538); 1713 dasm_put(Dst, 11383);
1342 } else { 1714 } else {
1343 dasm_put(Dst, 9552); 1715 dasm_put(Dst, 11397);
1344 } 1716 }
1345 break; 1717 break;
1346 default: 1718 default:
1347 dasm_put(Dst, 9472, LJ_TISNUM, LJ_TISNUM); 1719 dasm_put(Dst, 11317, LJ_TISNUM, LJ_TISNUM);
1348 if (sse) { 1720 if (sse) {
1349 dasm_put(Dst, 9560); 1721 dasm_put(Dst, 11405);
1350 } else { 1722 } else {
1351 dasm_put(Dst, 9574); 1723 dasm_put(Dst, 11419);
1352 } 1724 }
1353 break; 1725 break;
1354 } 1726 }
1355 if (sse) { 1727 if (sse) {
1356 dasm_put(Dst, 9270); 1728 dasm_put(Dst, 11115);
1357 } else { 1729 } else {
1358 dasm_put(Dst, 9282); 1730 dasm_put(Dst, 11127);
1359 } 1731 }
1360 dasm_put(Dst, 7174); 1732 dasm_put(Dst, 8621);
1361 break; 1733 break;
1362 case BC_MULVN: case BC_MULNV: case BC_MULVV: 1734 case BC_MULVN: case BC_MULNV: case BC_MULVV:
1363 dasm_put(Dst, 9396); 1735 dasm_put(Dst, 11241);
1364 vk = ((int)op - BC_ADDVN) / (BC_ADDNV-BC_ADDVN); 1736 vk = ((int)op - BC_ADDVN) / (BC_ADDNV-BC_ADDVN);
1365 switch (vk) { 1737 switch (vk) {
1366 case 0: 1738 case 0:
1367 dasm_put(Dst, 9404, LJ_TISNUM); 1739 dasm_put(Dst, 11249, LJ_TISNUM);
1368 if (sse) { 1740 if (sse) {
1369 dasm_put(Dst, 9582); 1741 dasm_put(Dst, 11427);
1370 } else { 1742 } else {
1371 dasm_put(Dst, 9596); 1743 dasm_put(Dst, 11441);
1372 } 1744 }
1373 break; 1745 break;
1374 case 1: 1746 case 1:
1375 dasm_put(Dst, 9438, LJ_TISNUM); 1747 dasm_put(Dst, 11283, LJ_TISNUM);
1376 if (sse) { 1748 if (sse) {
1377 dasm_put(Dst, 9604); 1749 dasm_put(Dst, 11449);
1378 } else { 1750 } else {
1379 dasm_put(Dst, 9618); 1751 dasm_put(Dst, 11463);
1380 } 1752 }
1381 break; 1753 break;
1382 default: 1754 default:
1383 dasm_put(Dst, 9472, LJ_TISNUM, LJ_TISNUM); 1755 dasm_put(Dst, 11317, LJ_TISNUM, LJ_TISNUM);
1384 if (sse) { 1756 if (sse) {
1385 dasm_put(Dst, 9626); 1757 dasm_put(Dst, 11471);
1386 } else { 1758 } else {
1387 dasm_put(Dst, 9640); 1759 dasm_put(Dst, 11485);
1388 } 1760 }
1389 break; 1761 break;
1390 } 1762 }
1391 if (sse) { 1763 if (sse) {
1392 dasm_put(Dst, 9270); 1764 dasm_put(Dst, 11115);
1393 } else { 1765 } else {
1394 dasm_put(Dst, 9282); 1766 dasm_put(Dst, 11127);
1395 } 1767 }
1396 dasm_put(Dst, 7174); 1768 dasm_put(Dst, 8621);
1397 break; 1769 break;
1398 case BC_DIVVN: case BC_DIVNV: case BC_DIVVV: 1770 case BC_DIVVN: case BC_DIVNV: case BC_DIVVV:
1399 dasm_put(Dst, 9396); 1771 dasm_put(Dst, 11241);
1400 vk = ((int)op - BC_ADDVN) / (BC_ADDNV-BC_ADDVN); 1772 vk = ((int)op - BC_ADDVN) / (BC_ADDNV-BC_ADDVN);
1401 switch (vk) { 1773 switch (vk) {
1402 case 0: 1774 case 0:
1403 dasm_put(Dst, 9404, LJ_TISNUM); 1775 dasm_put(Dst, 11249, LJ_TISNUM);
1404 if (sse) { 1776 if (sse) {
1405 dasm_put(Dst, 9648); 1777 dasm_put(Dst, 11493);
1406 } else { 1778 } else {
1407 dasm_put(Dst, 9662); 1779 dasm_put(Dst, 11507);
1408 } 1780 }
1409 break; 1781 break;
1410 case 1: 1782 case 1:
1411 dasm_put(Dst, 9438, LJ_TISNUM); 1783 dasm_put(Dst, 11283, LJ_TISNUM);
1412 if (sse) { 1784 if (sse) {
1413 dasm_put(Dst, 9670); 1785 dasm_put(Dst, 11515);
1414 } else { 1786 } else {
1415 dasm_put(Dst, 9684); 1787 dasm_put(Dst, 11529);
1416 } 1788 }
1417 break; 1789 break;
1418 default: 1790 default:
1419 dasm_put(Dst, 9472, LJ_TISNUM, LJ_TISNUM); 1791 dasm_put(Dst, 11317, LJ_TISNUM, LJ_TISNUM);
1420 if (sse) { 1792 if (sse) {
1421 dasm_put(Dst, 9692); 1793 dasm_put(Dst, 11537);
1422 } else { 1794 } else {
1423 dasm_put(Dst, 9706); 1795 dasm_put(Dst, 11551);
1424 } 1796 }
1425 break; 1797 break;
1426 } 1798 }
1427 if (sse) { 1799 if (sse) {
1428 dasm_put(Dst, 9270); 1800 dasm_put(Dst, 11115);
1429 } else { 1801 } else {
1430 dasm_put(Dst, 9282); 1802 dasm_put(Dst, 11127);
1431 } 1803 }
1432 dasm_put(Dst, 7174); 1804 dasm_put(Dst, 8621);
1433 break; 1805 break;
1434 case BC_MODVN: 1806 case BC_MODVN:
1435 dasm_put(Dst, 9396); 1807 dasm_put(Dst, 11241);
1436 vk = ((int)op - BC_ADDVN) / (BC_ADDNV-BC_ADDVN); 1808 vk = ((int)op - BC_ADDVN) / (BC_ADDNV-BC_ADDVN);
1437 switch (vk) { 1809 switch (vk) {
1438 case 0: 1810 case 0:
1439 dasm_put(Dst, 9404, LJ_TISNUM); 1811 dasm_put(Dst, 11249, LJ_TISNUM);
1440 if (sse) { 1812 if (sse) {
1441 dasm_put(Dst, 9714); 1813 dasm_put(Dst, 11559);
1442 } else { 1814 } else {
1443 dasm_put(Dst, 9728); 1815 dasm_put(Dst, 11573);
1444 } 1816 }
1445 break; 1817 break;
1446 case 1: 1818 case 1:
1447 dasm_put(Dst, 9438, LJ_TISNUM); 1819 dasm_put(Dst, 11283, LJ_TISNUM);
1448 if (sse) { 1820 if (sse) {
1449 dasm_put(Dst, 9736); 1821 dasm_put(Dst, 11581);
1450 } else { 1822 } else {
1451 dasm_put(Dst, 9750); 1823 dasm_put(Dst, 11595);
1452 } 1824 }
1453 break; 1825 break;
1454 default: 1826 default:
1455 dasm_put(Dst, 9472, LJ_TISNUM, LJ_TISNUM); 1827 dasm_put(Dst, 11317, LJ_TISNUM, LJ_TISNUM);
1456 if (sse) { 1828 if (sse) {
1457 dasm_put(Dst, 9758); 1829 dasm_put(Dst, 11603);
1458 } else { 1830 } else {
1459 dasm_put(Dst, 9772); 1831 dasm_put(Dst, 11617);
1460 } 1832 }
1461 break; 1833 break;
1462 } 1834 }
1463 dasm_put(Dst, 9780); 1835 dasm_put(Dst, 11625);
1464 if (sse) { 1836 if (sse) {
1465 dasm_put(Dst, 9270); 1837 dasm_put(Dst, 11115);
1466 } else { 1838 } else {
1467 dasm_put(Dst, 9282); 1839 dasm_put(Dst, 11127);
1468 } 1840 }
1469 dasm_put(Dst, 7174); 1841 dasm_put(Dst, 8621);
1470 break; 1842 break;
1471 case BC_MODNV: case BC_MODVV: 1843 case BC_MODNV: case BC_MODVV:
1472 dasm_put(Dst, 9396); 1844 dasm_put(Dst, 11241);
1473 vk = ((int)op - BC_ADDVN) / (BC_ADDNV-BC_ADDVN); 1845 vk = ((int)op - BC_ADDVN) / (BC_ADDNV-BC_ADDVN);
1474 switch (vk) { 1846 switch (vk) {
1475 case 0: 1847 case 0:
1476 dasm_put(Dst, 9404, LJ_TISNUM); 1848 dasm_put(Dst, 11249, LJ_TISNUM);
1477 if (sse) { 1849 if (sse) {
1478 dasm_put(Dst, 9714); 1850 dasm_put(Dst, 11559);
1479 } else { 1851 } else {
1480 dasm_put(Dst, 9728); 1852 dasm_put(Dst, 11573);
1481 } 1853 }
1482 break; 1854 break;
1483 case 1: 1855 case 1:
1484 dasm_put(Dst, 9438, LJ_TISNUM); 1856 dasm_put(Dst, 11283, LJ_TISNUM);
1485 if (sse) { 1857 if (sse) {
1486 dasm_put(Dst, 9736); 1858 dasm_put(Dst, 11581);
1487 } else { 1859 } else {
1488 dasm_put(Dst, 9750); 1860 dasm_put(Dst, 11595);
1489 } 1861 }
1490 break; 1862 break;
1491 default: 1863 default:
1492 dasm_put(Dst, 9472, LJ_TISNUM, LJ_TISNUM); 1864 dasm_put(Dst, 11317, LJ_TISNUM, LJ_TISNUM);
1493 if (sse) { 1865 if (sse) {
1494 dasm_put(Dst, 9758); 1866 dasm_put(Dst, 11603);
1495 } else { 1867 } else {
1496 dasm_put(Dst, 9772); 1868 dasm_put(Dst, 11617);
1497 } 1869 }
1498 break; 1870 break;
1499 } 1871 }
1500 dasm_put(Dst, 9786); 1872 dasm_put(Dst, 11631);
1501 break; 1873 break;
1502 case BC_POW: 1874 case BC_POW:
1503 if (sse) { 1875 if (sse) {
1504 sse = 0; /* NYI: temporary workaround. */ 1876 sse = 0; /* NYI: temporary workaround. */
1505 dasm_put(Dst, 9396); 1877 dasm_put(Dst, 11241);
1506 vk = ((int)op - BC_ADDVN) / (BC_ADDNV-BC_ADDVN); 1878 vk = ((int)op - BC_ADDVN) / (BC_ADDNV-BC_ADDVN);
1507 switch (vk) { 1879 switch (vk) {
1508 case 0: 1880 case 0:
1509 dasm_put(Dst, 9404, LJ_TISNUM); 1881 dasm_put(Dst, 11249, LJ_TISNUM);
1510 if (sse) { 1882 if (sse) {
1511 dasm_put(Dst, 9714); 1883 dasm_put(Dst, 11559);
1512 } else { 1884 } else {
1513 dasm_put(Dst, 9728); 1885 dasm_put(Dst, 11573);
1514 } 1886 }
1515 break; 1887 break;
1516 case 1: 1888 case 1:
1517 dasm_put(Dst, 9438, LJ_TISNUM); 1889 dasm_put(Dst, 11283, LJ_TISNUM);
1518 if (sse) { 1890 if (sse) {
1519 dasm_put(Dst, 9736); 1891 dasm_put(Dst, 11581);
1520 } else { 1892 } else {
1521 dasm_put(Dst, 9750); 1893 dasm_put(Dst, 11595);
1522 } 1894 }
1523 break; 1895 break;
1524 default: 1896 default:
1525 dasm_put(Dst, 9472, LJ_TISNUM, LJ_TISNUM); 1897 dasm_put(Dst, 11317, LJ_TISNUM, LJ_TISNUM);
1526 if (sse) { 1898 if (sse) {
1527 dasm_put(Dst, 9758); 1899 dasm_put(Dst, 11603);
1528 } else { 1900 } else {
1529 dasm_put(Dst, 9772); 1901 dasm_put(Dst, 11617);
1530 } 1902 }
1531 break; 1903 break;
1532 } 1904 }
1533 dasm_put(Dst, 9791); 1905 dasm_put(Dst, 11636);
1534 if (sse) { 1906 if (sse) {
1535 dasm_put(Dst, 9270); 1907 dasm_put(Dst, 11115);
1536 } else { 1908 } else {
1537 dasm_put(Dst, 9282); 1909 dasm_put(Dst, 11127);
1538 } 1910 }
1539 sse = 1; 1911 sse = 1;
1540 } else { 1912 } else {
1541 dasm_put(Dst, 9396); 1913 dasm_put(Dst, 11241);
1542 vk = ((int)op - BC_ADDVN) / (BC_ADDNV-BC_ADDVN); 1914 vk = ((int)op - BC_ADDVN) / (BC_ADDNV-BC_ADDVN);
1543 switch (vk) { 1915 switch (vk) {
1544 case 0: 1916 case 0:
1545 dasm_put(Dst, 9404, LJ_TISNUM); 1917 dasm_put(Dst, 11249, LJ_TISNUM);
1546 if (sse) { 1918 if (sse) {
1547 dasm_put(Dst, 9714); 1919 dasm_put(Dst, 11559);
1548 } else { 1920 } else {
1549 dasm_put(Dst, 9728); 1921 dasm_put(Dst, 11573);
1550 } 1922 }
1551 break; 1923 break;
1552 case 1: 1924 case 1:
1553 dasm_put(Dst, 9438, LJ_TISNUM); 1925 dasm_put(Dst, 11283, LJ_TISNUM);
1554 if (sse) { 1926 if (sse) {
1555 dasm_put(Dst, 9736); 1927 dasm_put(Dst, 11581);
1556 } else { 1928 } else {
1557 dasm_put(Dst, 9750); 1929 dasm_put(Dst, 11595);
1558 } 1930 }
1559 break; 1931 break;
1560 default: 1932 default:
1561 dasm_put(Dst, 9472, LJ_TISNUM, LJ_TISNUM); 1933 dasm_put(Dst, 11317, LJ_TISNUM, LJ_TISNUM);
1562 if (sse) { 1934 if (sse) {
1563 dasm_put(Dst, 9758); 1935 dasm_put(Dst, 11603);
1564 } else { 1936 } else {
1565 dasm_put(Dst, 9772); 1937 dasm_put(Dst, 11617);
1566 } 1938 }
1567 break; 1939 break;
1568 } 1940 }
1569 dasm_put(Dst, 9791); 1941 dasm_put(Dst, 11636);
1570 if (sse) { 1942 if (sse) {
1571 dasm_put(Dst, 9270); 1943 dasm_put(Dst, 11115);
1572 } else { 1944 } else {
1573 dasm_put(Dst, 9282); 1945 dasm_put(Dst, 11127);
1574 } 1946 }
1575 } 1947 }
1576 dasm_put(Dst, 7174); 1948 dasm_put(Dst, 8621);
1577 break; 1949 break;
1578 1950
1579 case BC_CAT: 1951 case BC_CAT:
1580 dasm_put(Dst, 9795, Dt1(->base), Dt1(->base)); 1952 dasm_put(Dst, 11640, Dt1(->base), Dt1(->base));
1581 break; 1953 break;
1582 1954
1583 /* -- Constant ops ------------------------------------------------------ */ 1955 /* -- Constant ops ------------------------------------------------------ */
1584 1956
1585 case BC_KSTR: 1957 case BC_KSTR:
1586 dasm_put(Dst, 9889, LJ_TSTR); 1958 dasm_put(Dst, 11734, LJ_TSTR);
1587 break; 1959 break;
1588 case BC_KSHORT: 1960 case BC_KSHORT:
1589 dasm_put(Dst, 9922); 1961 if (sse) {
1962 dasm_put(Dst, 11767);
1963 } else {
1964 dasm_put(Dst, 11782);
1965 }
1966 dasm_put(Dst, 8621);
1590 break; 1967 break;
1591 case BC_KNUM: 1968 case BC_KNUM:
1592 dasm_put(Dst, 9948); 1969 if (sse) {
1970 dasm_put(Dst, 11790);
1971 } else {
1972 dasm_put(Dst, 11803);
1973 }
1974 dasm_put(Dst, 8621);
1593 break; 1975 break;
1594 case BC_KPRI: 1976 case BC_KPRI:
1595 dasm_put(Dst, 9973); 1977 dasm_put(Dst, 11810);
1596 break; 1978 break;
1597 case BC_KNIL: 1979 case BC_KNIL:
1598 dasm_put(Dst, 9999, LJ_TNIL); 1980 dasm_put(Dst, 11836, LJ_TNIL);
1599 break; 1981 break;
1600 1982
1601 /* -- Upvalue and function ops ------------------------------------------ */ 1983 /* -- Upvalue and function ops ------------------------------------------ */
1602 1984
1603 case BC_UGET: 1985 case BC_UGET:
1604 dasm_put(Dst, 10045, offsetof(GCfuncL, uvptr), DtA(->v)); 1986 dasm_put(Dst, 11882, offsetof(GCfuncL, uvptr), DtA(->v));
1605 break; 1987 break;
1606 case BC_USETV: 1988 case BC_USETV:
1607#define TV2MARKOFS \ 1989#define TV2MARKOFS \
1608 ((int32_t)offsetof(GCupval, marked)-(int32_t)offsetof(GCupval, tv)) 1990 ((int32_t)offsetof(GCupval, marked)-(int32_t)offsetof(GCupval, tv))
1609 dasm_put(Dst, 10089, 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); 1991 dasm_put(Dst, 11926, 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);
1610 dasm_put(Dst, 10179); 1992 dasm_put(Dst, 12016);
1611 break; 1993 break;
1612#undef TV2MARKOFS 1994#undef TV2MARKOFS
1613 case BC_USETS: 1995 case BC_USETS:
1614 dasm_put(Dst, 10191, offsetof(GCfuncL, uvptr), DtA(->v), LJ_TSTR, DtA(->marked), LJ_GC_BLACK, Dt4(->gch.marked), LJ_GC_WHITES, DtA(->closed), GG_DISP2G); 1996 dasm_put(Dst, 12028, offsetof(GCfuncL, uvptr), DtA(->v), LJ_TSTR, DtA(->marked), LJ_GC_BLACK, Dt4(->gch.marked), LJ_GC_WHITES, DtA(->closed), GG_DISP2G);
1615 break; 1997 break;
1616 case BC_USETN: 1998 case BC_USETN:
1617 dasm_put(Dst, 10282, offsetof(GCfuncL, uvptr), DtA(->v)); 1999 dasm_put(Dst, 12119);
2000 if (sse) {
2001 dasm_put(Dst, 12124);
2002 } else {
2003 dasm_put(Dst, 10934);
2004 }
2005 dasm_put(Dst, 12131, offsetof(GCfuncL, uvptr), DtA(->v));
2006 if (sse) {
2007 dasm_put(Dst, 4988);
2008 } else {
2009 dasm_put(Dst, 4994);
2010 }
2011 dasm_put(Dst, 8621);
1618 break; 2012 break;
1619 case BC_USETP: 2013 case BC_USETP:
1620 dasm_put(Dst, 10318, offsetof(GCfuncL, uvptr), DtA(->v)); 2014 dasm_put(Dst, 12140, offsetof(GCfuncL, uvptr), DtA(->v));
1621 break; 2015 break;
1622 case BC_UCLO: 2016 case BC_UCLO:
1623 dasm_put(Dst, 10355, -BCBIAS_J*4, Dt1(->openupval), Dt1(->base), Dt1(->base)); 2017 dasm_put(Dst, 12177, -BCBIAS_J*4, Dt1(->openupval), Dt1(->base), Dt1(->base));
1624 break; 2018 break;
1625 2019
1626 case BC_FNEW: 2020 case BC_FNEW:
1627 dasm_put(Dst, 10413, Dt1(->base), Dt1(->base), LJ_TFUNC); 2021 dasm_put(Dst, 12235, Dt1(->base), Dt1(->base), LJ_TFUNC);
1628 break; 2022 break;
1629 2023
1630 /* -- Table ops --------------------------------------------------------- */ 2024 /* -- Table ops --------------------------------------------------------- */
1631 2025
1632 case BC_TNEW: 2026 case BC_TNEW:
1633 dasm_put(Dst, 10484, DISPATCH_GL(gc.total), DISPATCH_GL(gc.threshold), Dt1(->base), Dt1(->base), LJ_TTAB); 2027 dasm_put(Dst, 12306, DISPATCH_GL(gc.total), DISPATCH_GL(gc.threshold), Dt1(->base), Dt1(->base), LJ_TTAB);
1634 break; 2028 break;
1635 case BC_TDUP: 2029 case BC_TDUP:
1636 dasm_put(Dst, 10595, DISPATCH_GL(gc.total), DISPATCH_GL(gc.threshold), Dt1(->base), Dt1(->base), LJ_TTAB); 2030 dasm_put(Dst, 12417, DISPATCH_GL(gc.total), DISPATCH_GL(gc.threshold), Dt1(->base), Dt1(->base), LJ_TTAB);
1637 break; 2031 break;
1638 2032
1639 case BC_GGET: 2033 case BC_GGET:
1640 dasm_put(Dst, 10687, Dt7(->env)); 2034 dasm_put(Dst, 12509, Dt7(->env));
1641 break; 2035 break;
1642 case BC_GSET: 2036 case BC_GSET:
1643 dasm_put(Dst, 10705, Dt7(->env)); 2037 dasm_put(Dst, 12527, Dt7(->env));
1644 break; 2038 break;
1645 2039
1646 case BC_TGETV: 2040 case BC_TGETV:
1647 dasm_put(Dst, 10723, LJ_TTAB, LJ_TISNUM); 2041 dasm_put(Dst, 12545, LJ_TTAB, LJ_TISNUM);
1648 if (cmov) { 2042 if (sse) {
1649 dasm_put(Dst, 8815); 2043 dasm_put(Dst, 12578);
1650 } else { 2044 } else {
1651 dasm_put(Dst, 8821); 2045 dasm_put(Dst, 12599);
2046 if (cmov) {
2047 dasm_put(Dst, 10660);
2048 } else {
2049 dasm_put(Dst, 10666);
2050 }
2051 dasm_put(Dst, 12609);
1652 } 2052 }
1653 dasm_put(Dst, 10765, Dt6(->asize), Dt6(->array), LJ_TNIL, Dt6(->metatable), Dt6(->metatable), Dt6(->nomm), 1<<MM_index); 2053 dasm_put(Dst, 12613, Dt6(->asize), Dt6(->array), LJ_TNIL, Dt6(->metatable), Dt6(->metatable), Dt6(->nomm), 1<<MM_index);
1654 dasm_put(Dst, 10860, LJ_TSTR); 2054 dasm_put(Dst, 12705, LJ_TSTR);
1655 break; 2055 break;
1656 case BC_TGETS: 2056 case BC_TGETS:
1657 dasm_put(Dst, 10878, LJ_TTAB, Dt6(->hmask), Dt5(->hash), sizeof(Node), Dt6(->node), DtB(->key.it), LJ_TSTR, DtB(->key.gcr), LJ_TNIL); 2057 dasm_put(Dst, 12723, LJ_TTAB, Dt6(->hmask), Dt5(->hash), sizeof(Node), Dt6(->node), DtB(->key.it), LJ_TSTR, DtB(->key.gcr), LJ_TNIL);
1658 dasm_put(Dst, 10962, LJ_TNIL, DtB(->next), Dt6(->metatable), Dt6(->nomm), 1<<MM_index); 2058 dasm_put(Dst, 12807, LJ_TNIL, DtB(->next), Dt6(->metatable), Dt6(->nomm), 1<<MM_index);
1659 break; 2059 break;
1660 case BC_TGETB: 2060 case BC_TGETB:
1661 dasm_put(Dst, 11033, LJ_TTAB, Dt6(->asize), Dt6(->array), LJ_TNIL, Dt6(->metatable), Dt6(->metatable), Dt6(->nomm), 1<<MM_index); 2061 dasm_put(Dst, 12878, LJ_TTAB, Dt6(->asize), Dt6(->array), LJ_TNIL, Dt6(->metatable), Dt6(->metatable), Dt6(->nomm), 1<<MM_index);
1662 dasm_put(Dst, 9386); 2062 dasm_put(Dst, 11231);
1663 break; 2063 break;
1664 2064
1665 case BC_TSETV: 2065 case BC_TSETV:
1666 dasm_put(Dst, 11132, LJ_TTAB, LJ_TISNUM); 2066 dasm_put(Dst, 12977, LJ_TTAB, LJ_TISNUM);
1667 if (cmov) { 2067 if (sse) {
1668 dasm_put(Dst, 8815); 2068 dasm_put(Dst, 12578);
1669 } else { 2069 } else {
1670 dasm_put(Dst, 8821); 2070 dasm_put(Dst, 12599);
2071 if (cmov) {
2072 dasm_put(Dst, 10660);
2073 } else {
2074 dasm_put(Dst, 10666);
2075 }
2076 dasm_put(Dst, 12609);
1671 } 2077 }
1672 dasm_put(Dst, 11174, Dt6(->asize), Dt6(->array), LJ_TNIL, Dt6(->marked), LJ_GC_BLACK, Dt6(->metatable), Dt6(->metatable)); 2078 dasm_put(Dst, 13010, Dt6(->asize), Dt6(->array), LJ_TNIL, Dt6(->marked), LJ_GC_BLACK, Dt6(->metatable), Dt6(->metatable));
1673 dasm_put(Dst, 11260, Dt6(->nomm), 1<<MM_newindex, LJ_TSTR, Dt6(->marked), cast_byte(~LJ_GC_BLACK), DISPATCH_GL(gc.grayagain), DISPATCH_GL(gc.grayagain), Dt6(->gclist)); 2079 dasm_put(Dst, 13093, Dt6(->nomm), 1<<MM_newindex, LJ_TSTR, Dt6(->marked), cast_byte(~LJ_GC_BLACK), DISPATCH_GL(gc.grayagain), DISPATCH_GL(gc.grayagain), Dt6(->gclist));
1674 break; 2080 break;
1675 case BC_TSETS: 2081 case BC_TSETS:
1676 dasm_put(Dst, 11322, LJ_TTAB, Dt6(->hmask), Dt5(->hash), sizeof(Node), Dt6(->nomm), Dt6(->node), DtB(->key.it), LJ_TSTR, DtB(->key.gcr), LJ_TNIL); 2082 dasm_put(Dst, 13155, LJ_TTAB, Dt6(->hmask), Dt5(->hash), sizeof(Node), Dt6(->nomm), Dt6(->node), DtB(->key.it), LJ_TSTR, DtB(->key.gcr), LJ_TNIL);
1677 dasm_put(Dst, 11397, Dt6(->marked), LJ_GC_BLACK, Dt6(->metatable), Dt6(->metatable), Dt6(->nomm), 1<<MM_newindex, DtB(->next)); 2083 dasm_put(Dst, 13230, Dt6(->marked), LJ_GC_BLACK, Dt6(->metatable), Dt6(->metatable), Dt6(->nomm), 1<<MM_newindex, DtB(->next));
1678 dasm_put(Dst, 11487, Dt6(->metatable), Dt6(->nomm), 1<<MM_newindex, LJ_TSTR, Dt1(->base), Dt1(->base), Dt6(->marked), cast_byte(~LJ_GC_BLACK), DISPATCH_GL(gc.grayagain), DISPATCH_GL(gc.grayagain), Dt6(->gclist)); 2084 dasm_put(Dst, 13322, Dt6(->metatable), Dt6(->nomm), 1<<MM_newindex, LJ_TSTR, Dt1(->base), Dt1(->base), Dt6(->marked), cast_byte(~LJ_GC_BLACK), DISPATCH_GL(gc.grayagain), DISPATCH_GL(gc.grayagain), Dt6(->gclist));
1679 break; 2085 break;
1680 case BC_TSETB: 2086 case BC_TSETB:
1681 dasm_put(Dst, 11583, LJ_TTAB, Dt6(->asize), Dt6(->array), LJ_TNIL, Dt6(->marked), LJ_GC_BLACK, Dt6(->metatable)); 2087 dasm_put(Dst, 13418, LJ_TTAB, Dt6(->asize), Dt6(->array), LJ_TNIL, Dt6(->marked), LJ_GC_BLACK, Dt6(->metatable));
1682 dasm_put(Dst, 11681, Dt6(->metatable), Dt6(->nomm), 1<<MM_newindex, Dt6(->marked), cast_byte(~LJ_GC_BLACK), DISPATCH_GL(gc.grayagain), DISPATCH_GL(gc.grayagain), Dt6(->gclist)); 2088 dasm_put(Dst, 13516, Dt6(->metatable), Dt6(->nomm), 1<<MM_newindex, Dt6(->marked), cast_byte(~LJ_GC_BLACK), DISPATCH_GL(gc.grayagain), DISPATCH_GL(gc.grayagain), Dt6(->gclist));
1683 break; 2089 break;
1684 2090
1685 case BC_TSETM: 2091 case BC_TSETM:
1686 dasm_put(Dst, 11727, Dt6(->marked), LJ_GC_BLACK, Dt6(->asize), Dt6(->array), Dt1(->base), Dt1(->base)); 2092 dasm_put(Dst, 13562);
1687 dasm_put(Dst, 11884, Dt6(->marked), cast_byte(~LJ_GC_BLACK), DISPATCH_GL(gc.grayagain), DISPATCH_GL(gc.grayagain), Dt6(->gclist)); 2093 if (sse) {
2094 dasm_put(Dst, 12124);
2095 } else {
2096 dasm_put(Dst, 13567);
2097 }
2098 dasm_put(Dst, 13575, Dt6(->marked), LJ_GC_BLACK);
2099 if (sse) {
2100 dasm_put(Dst, 13600);
2101 } else {
2102 dasm_put(Dst, 13607);
2103 }
2104 dasm_put(Dst, 13612, Dt6(->asize), Dt6(->array), Dt1(->base), Dt1(->base), Dt6(->marked), cast_byte(~LJ_GC_BLACK), DISPATCH_GL(gc.grayagain), DISPATCH_GL(gc.grayagain));
2105 dasm_put(Dst, 13740, Dt6(->gclist));
1688 break; 2106 break;
1689 2107
1690 /* -- Calls and vararg handling ----------------------------------------- */ 2108 /* -- Calls and vararg handling ----------------------------------------- */
1691 2109
1692 case BC_CALL: case BC_CALLM: 2110 case BC_CALL: case BC_CALLM:
1693 dasm_put(Dst, 9400); 2111 dasm_put(Dst, 11245);
1694 if (op == BC_CALLM) { 2112 if (op == BC_CALLM) {
1695 dasm_put(Dst, 11902); 2113 dasm_put(Dst, 13748);
1696 } 2114 }
1697 dasm_put(Dst, 11907, LJ_TFUNC, Dt7(->gate)); 2115 dasm_put(Dst, 13753, LJ_TFUNC, Dt7(->gate));
1698 break; 2116 break;
1699 2117
1700 case BC_CALLMT: 2118 case BC_CALLMT:
1701 dasm_put(Dst, 11902); 2119 dasm_put(Dst, 13748);
1702 break; 2120 break;
1703 case BC_CALLT: 2121 case BC_CALLT:
1704 dasm_put(Dst, 11930, LJ_TFUNC, FRAME_TYPE, Dt7(->ffid), Dt7(->gate)); 2122 dasm_put(Dst, 13776, LJ_TFUNC, FRAME_TYPE, Dt7(->ffid), Dt7(->gate));
1705 dasm_put(Dst, 12035, FRAME_TYPE, Dt7(->pt), Dt9(->k)); 2123 dasm_put(Dst, 13881, FRAME_TYPE, Dt7(->pt), Dt9(->k));
1706 break; 2124 break;
1707 2125
1708 case BC_ITERC: 2126 case BC_ITERC:
1709 dasm_put(Dst, 12092, LJ_TFUNC, Dt7(->gate)); 2127 dasm_put(Dst, 13938, LJ_TFUNC, Dt7(->gate));
1710 break; 2128 break;
1711 2129
1712 case BC_VARG: 2130 case BC_VARG:
1713 dasm_put(Dst, 12154, Dt7(->pt), Dt9(->numparams), (8+FRAME_VARG), LJ_TNIL); 2131 dasm_put(Dst, 14000, Dt7(->pt), Dt9(->numparams), (8+FRAME_VARG), LJ_TNIL);
1714 dasm_put(Dst, 12298, Dt1(->maxstack), Dt1(->base), Dt1(->top), Dt1(->base), Dt1(->top)); 2132 dasm_put(Dst, 14144, Dt1(->maxstack), Dt1(->base), Dt1(->top), Dt1(->base), Dt1(->top));
1715 break; 2133 break;
1716 2134
1717 /* -- Returns ----------------------------------------------------------- */ 2135 /* -- Returns ----------------------------------------------------------- */
1718 2136
1719 case BC_RETM: 2137 case BC_RETM:
1720 dasm_put(Dst, 11902); 2138 dasm_put(Dst, 13748);
1721 break; 2139 break;
1722 2140
1723 case BC_RET: case BC_RET0: case BC_RET1: 2141 case BC_RET: case BC_RET0: case BC_RET1:
1724 if (op != BC_RET0) { 2142 if (op != BC_RET0) {
1725 dasm_put(Dst, 12393); 2143 dasm_put(Dst, 14239);
1726 } 2144 }
1727 dasm_put(Dst, 12397, FRAME_TYPE); 2145 dasm_put(Dst, 14243, FRAME_TYPE);
1728 switch (op) { 2146 switch (op) {
1729 case BC_RET: 2147 case BC_RET:
1730 dasm_put(Dst, 12416); 2148 dasm_put(Dst, 14262);
1731 break; 2149 break;
1732 case BC_RET1: 2150 case BC_RET1:
1733 dasm_put(Dst, 12474); 2151 dasm_put(Dst, 14320);
1734 /* fallthrough */ 2152 /* fallthrough */
1735 case BC_RET0: 2153 case BC_RET0:
1736 dasm_put(Dst, 3824); 2154 dasm_put(Dst, 14336);
1737 default: 2155 default:
1738 break; 2156 break;
1739 } 2157 }
1740 dasm_put(Dst, 12490, Dt7(->pt), Dt9(->k)); 2158 dasm_put(Dst, 14347, Dt7(->pt), Dt9(->k));
1741 if (op == BC_RET) { 2159 if (op == BC_RET) {
1742 dasm_put(Dst, 12532, LJ_TNIL); 2160 dasm_put(Dst, 14389, LJ_TNIL);
1743 } else { 2161 } else {
1744 dasm_put(Dst, 12541, LJ_TNIL); 2162 dasm_put(Dst, 14398, LJ_TNIL);
1745 } 2163 }
1746 dasm_put(Dst, 12548); 2164 dasm_put(Dst, 14405);
1747 if (op != BC_RET0) { 2165 if (op != BC_RET0) {
1748 dasm_put(Dst, 12569); 2166 dasm_put(Dst, 14426);
1749 } 2167 }
1750 dasm_put(Dst, 9391); 2168 dasm_put(Dst, 5084);
1751 break; 2169 break;
1752 2170
1753 /* -- Loops and branches ------------------------------------------------ */ 2171 /* -- Loops and branches ------------------------------------------------ */
@@ -1755,7 +2173,7 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop, int cmov, int sse)
1755 2173
1756 case BC_FORL: 2174 case BC_FORL:
1757#if LJ_HASJIT 2175#if LJ_HASJIT
1758 dasm_put(Dst, 12573, HOTCOUNT_PCMASK, GG_DISP2HOT); 2176 dasm_put(Dst, 14430, HOTCOUNT_PCMASK, GG_DISP2HOT);
1759#endif 2177#endif
1760 break; 2178 break;
1761 2179
@@ -1767,42 +2185,57 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop, int cmov, int sse)
1767 case BC_FORI: 2185 case BC_FORI:
1768 case BC_IFORL: 2186 case BC_IFORL:
1769 vk = (op == BC_IFORL || op == BC_JFORL); 2187 vk = (op == BC_IFORL || op == BC_JFORL);
1770 dasm_put(Dst, 12594); 2188 dasm_put(Dst, 14451);
1771 if (!vk) { 2189 if (!vk) {
1772 dasm_put(Dst, 12598, LJ_TISNUM, LJ_TISNUM); 2190 dasm_put(Dst, 14455, LJ_TISNUM, LJ_TISNUM);
1773 } 2191 }
1774 dasm_put(Dst, 12617); 2192 dasm_put(Dst, 14474);
1775 if (!vk) { 2193 if (!vk) {
1776 dasm_put(Dst, 12621, LJ_TISNUM); 2194 dasm_put(Dst, 14478, LJ_TISNUM);
1777 }
1778 dasm_put(Dst, 12630);
1779 if (vk) {
1780 dasm_put(Dst, 12636);
1781 } 2195 }
1782 dasm_put(Dst, 12642); 2196 if (sse) {
1783 if (cmov) { 2197 dasm_put(Dst, 14487);
1784 dasm_put(Dst, 8815); 2198 if (vk) {
2199 dasm_put(Dst, 14499);
2200 } else {
2201 dasm_put(Dst, 14518);
2202 }
2203 dasm_put(Dst, 14523);
1785 } else { 2204 } else {
1786 dasm_put(Dst, 8821); 2205 dasm_put(Dst, 14536);
1787 } 2206 if (vk) {
1788 if (!cmov) { 2207 dasm_put(Dst, 14542);
1789 dasm_put(Dst, 12657); 2208 } else {
2209 dasm_put(Dst, 14558);
2210 }
2211 dasm_put(Dst, 14566);
2212 if (cmov) {
2213 dasm_put(Dst, 10660);
2214 } else {
2215 dasm_put(Dst, 10666);
2216 }
2217 if (!cmov) {
2218 dasm_put(Dst, 14571);
2219 }
1790 } 2220 }
1791 if (op == BC_FORI) { 2221 if (op == BC_FORI) {
1792 dasm_put(Dst, 12663, -BCBIAS_J*4); 2222 dasm_put(Dst, 14577, -BCBIAS_J*4);
1793 } else if (op == BC_JFORI) { 2223 } else if (op == BC_JFORI) {
1794 dasm_put(Dst, 12673, -BCBIAS_J*4, BC_JLOOP); 2224 dasm_put(Dst, 14587, -BCBIAS_J*4, BC_JLOOP);
1795 } else if (op == BC_IFORL) { 2225 } else if (op == BC_IFORL) {
1796 dasm_put(Dst, 12687, -BCBIAS_J*4); 2226 dasm_put(Dst, 14601, -BCBIAS_J*4);
1797 } else { 2227 } else {
1798 dasm_put(Dst, 12683, BC_JLOOP); 2228 dasm_put(Dst, 14597, BC_JLOOP);
2229 }
2230 dasm_put(Dst, 10695);
2231 if (sse) {
2232 dasm_put(Dst, 14611);
1799 } 2233 }
1800 dasm_put(Dst, 8850);
1801 break; 2234 break;
1802 2235
1803 case BC_ITERL: 2236 case BC_ITERL:
1804#if LJ_HASJIT 2237#if LJ_HASJIT
1805 dasm_put(Dst, 12573, HOTCOUNT_PCMASK, GG_DISP2HOT); 2238 dasm_put(Dst, 14430, HOTCOUNT_PCMASK, GG_DISP2HOT);
1806#endif 2239#endif
1807 break; 2240 break;
1808 2241
@@ -1811,33 +2244,33 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop, int cmov, int sse)
1811 break; 2244 break;
1812#endif 2245#endif
1813 case BC_IITERL: 2246 case BC_IITERL:
1814 dasm_put(Dst, 12697, LJ_TNIL); 2247 dasm_put(Dst, 14622, LJ_TNIL);
1815 if (op == BC_JITERL) { 2248 if (op == BC_JITERL) {
1816 dasm_put(Dst, 12712, BC_JLOOP); 2249 dasm_put(Dst, 14637, BC_JLOOP);
1817 } else { 2250 } else {
1818 dasm_put(Dst, 12726, -BCBIAS_J*4); 2251 dasm_put(Dst, 14651, -BCBIAS_J*4);
1819 } 2252 }
1820 dasm_put(Dst, 9147); 2253 dasm_put(Dst, 10992);
1821 break; 2254 break;
1822 2255
1823 case BC_LOOP: 2256 case BC_LOOP:
1824#if LJ_HASJIT 2257#if LJ_HASJIT
1825 dasm_put(Dst, 12573, HOTCOUNT_PCMASK, GG_DISP2HOT); 2258 dasm_put(Dst, 14430, HOTCOUNT_PCMASK, GG_DISP2HOT);
1826#endif 2259#endif
1827 break; 2260 break;
1828 2261
1829 case BC_ILOOP: 2262 case BC_ILOOP:
1830 dasm_put(Dst, 7174); 2263 dasm_put(Dst, 8621);
1831 break; 2264 break;
1832 2265
1833 case BC_JLOOP: 2266 case BC_JLOOP:
1834#if LJ_HASJIT 2267#if LJ_HASJIT
1835 dasm_put(Dst, 12742, DISPATCH_J(trace), DtD(->mcode), DISPATCH_GL(jit_base), DISPATCH_GL(jit_L)); 2268 dasm_put(Dst, 14667, DISPATCH_J(trace), DtD(->mcode), DISPATCH_GL(jit_base), DISPATCH_GL(jit_L));
1836#endif 2269#endif
1837 break; 2270 break;
1838 2271
1839 case BC_JMP: 2272 case BC_JMP:
1840 dasm_put(Dst, 12765, -BCBIAS_J*4); 2273 dasm_put(Dst, 14690, -BCBIAS_J*4);
1841 break; 2274 break;
1842 2275
1843 /* ---------------------------------------------------------------------- */ 2276 /* ---------------------------------------------------------------------- */
@@ -1865,7 +2298,7 @@ static int build_backend(BuildCtx *ctx)
1865 2298
1866 build_subroutines(ctx, cmov, sse); 2299 build_subroutines(ctx, cmov, sse);
1867 2300
1868 dasm_put(Dst, 12789); 2301 dasm_put(Dst, 14714);
1869 for (op = 0; op < BC__MAX; op++) 2302 for (op = 0; op < BC__MAX; op++)
1870 build_ins(ctx, (BCOp)op, op, cmov, sse); 2303 build_ins(ctx, (BCOp)op, op, cmov, sse);
1871 2304