aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMike Pall <mike>2012-05-10 16:20:21 +0200
committerMike Pall <mike>2012-05-10 16:21:14 +0200
commit74205dc64b58cbe7dcc56b700d1798622e9e4063 (patch)
tree737ff2391554a78ebbb9e79299d0b1eb41751d44 /src
parent3fc5948abf1b2179e54f5d31bf694893b8413f1a (diff)
downloadluajit-74205dc64b58cbe7dcc56b700d1798622e9e4063.tar.gz
luajit-74205dc64b58cbe7dcc56b700d1798622e9e4063.tar.bz2
luajit-74205dc64b58cbe7dcc56b700d1798622e9e4063.zip
ARM/PPC/MIPS: Fix tailcall from fast function (esp. tostring).
Diffstat (limited to 'src')
-rw-r--r--src/buildvm_arm.dasc1
-rw-r--r--src/buildvm_arm.h849
-rw-r--r--src/buildvm_mips.dasc1
-rw-r--r--src/buildvm_mips.h409
-rw-r--r--src/buildvm_ppc.dasc1
-rw-r--r--src/buildvm_ppc.h809
6 files changed, 1041 insertions, 1029 deletions
diff --git a/src/buildvm_arm.dasc b/src/buildvm_arm.dasc
index 3b1b8d7f..6f0e3878 100644
--- a/src/buildvm_arm.dasc
+++ b/src/buildvm_arm.dasc
@@ -1809,6 +1809,7 @@ static void build_subroutines(BuildCtx *ctx)
1809 | bic CARG2, PC, #FRAME_TYPEP 1809 | bic CARG2, PC, #FRAME_TYPEP
1810 | ldreq INS, [PC, #-4] 1810 | ldreq INS, [PC, #-4]
1811 | andeq CARG2, MASKR8, INS, lsr #5 // Conditional decode_RA8. 1811 | andeq CARG2, MASKR8, INS, lsr #5 // Conditional decode_RA8.
1812 | addeq CARG2, CARG2, #8
1812 | sub RB, BASE, CARG2 1813 | sub RB, BASE, CARG2
1813 | b ->vm_call_dispatch // Resolve again for tailcall. 1814 | b ->vm_call_dispatch // Resolve again for tailcall.
1814 | 1815 |
diff --git a/src/buildvm_arm.h b/src/buildvm_arm.h
index ca94ed18..aec421dd 100644
--- a/src/buildvm_arm.h
+++ b/src/buildvm_arm.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 int build_actionlist[5777] = { 15static const unsigned int build_actionlist[5784] = {
160x00010001, 160x00010001,
170x00060014, 170x00060014,
180xe3160000, 180xe3160000,
@@ -1421,6 +1421,8 @@ static const unsigned int build_actionlist[5777] = {
14210xea000000, 14210xea000000,
14220x00050049, 14220x00050049,
14230x0006000c, 14230x0006000c,
14240x2a000000,
14250x00050049,
14240xe1822000, 14260xe1822000,
14250xe1120fc1, 14270xe1120fc1,
14260x03a00000, 14280x03a00000,
@@ -1484,6 +1486,8 @@ static const unsigned int build_actionlist[5777] = {
14840xea000000, 14860xea000000,
14850x00050049, 14870x00050049,
14860x0006000c, 14880x0006000c,
14890x2a000000,
14900x00050049,
14870xe1822000, 14910xe1822000,
14880xe1d22fc1, 14920xe1d22fc1,
14890x03a00000, 14930x03a00000,
@@ -1501,9 +1505,9 @@ static const unsigned int build_actionlist[5777] = {
15010x4a000000, 15050x4a000000,
15020x0005000b, 15060x0005000b,
15030x0006000e, 15070x0006000e,
15080x00000000,
15040xeb000000, 15090xeb000000,
15050x0005005c, 15100x0005005c,
15060x00000000,
15070xea000000, 15110xea000000,
15080x00050049, 15120x00050049,
15090x00040007, 15130x00040007,
@@ -1563,11 +1567,11 @@ static const unsigned int build_actionlist[5777] = {
15630xea000000, 15670xea000000,
15640x0005000f, 15680x0005000f,
15650x0006005f, 15690x0006005f,
15700x00000000,
15660xe1c900d0, 15710xe1c900d0,
15670xe35b0008, 15720xe35b0008,
15680x3a000000, 15730x3a000000,
15690x00050046, 15740x00050046,
15700x00000000,
15710xe3710000, 15750xe3710000,
15720x000a0000, 15760x000a0000,
15730x2a000000, 15770x2a000000,
@@ -2711,6 +2715,7 @@ static const unsigned int build_actionlist[5777] = {
27110x0516e004, 27150x0516e004,
27120x00020000, 27160x00020000,
27130x000412ae, 27170x000412ae,
27180x02811008,
27140xe049c001, 27190xe049c001,
27150xea000000, 27200xea000000,
27160x00050024, 27210x00050024,
@@ -2995,6 +3000,7 @@ static const unsigned int build_actionlist[5777] = {
29950xe0c11002, 30000xe0c11002,
29960xe12fff1e, 30010xe12fff1e,
29970x0006000c, 30020x0006000c,
30030x212fff1e,
29980xe1822000, 30040xe1822000,
29990xe1120fc1, 30050xe1120fc1,
30000xe3a00000, 30060xe3a00000,
@@ -3030,6 +3036,7 @@ static const unsigned int build_actionlist[5777] = {
30300xe0c11002, 30360xe0c11002,
30310xe12fff1e, 30370xe12fff1e,
30320x0006000c, 30380x0006000c,
30390x212fff1e,
30330xe1822000, 30400xe1822000,
30340xe1d22fc1, 30410xe1d22fc1,
30350xe3a00000, 30420xe3a00000,
@@ -6299,235 +6306,235 @@ static void build_subroutines(BuildCtx *ctx)
6299 dasm_put(Dst, 1246, Dt8(->upvalue[0].gcr), Dt1(->base), Dt1(->top), Dt1(->status), Dt1(->base), Dt1(->maxstack), Dt1(->cframe), LUA_YIELD, Dt1(->top), Dt1(->top), Dt1(->base), LJ_VMST_INTERP, Dt1(->top), DISPATCH_GL(vmstate), LUA_YIELD); 6306 dasm_put(Dst, 1246, Dt8(->upvalue[0].gcr), Dt1(->base), Dt1(->top), Dt1(->status), Dt1(->base), Dt1(->maxstack), Dt1(->cframe), LUA_YIELD, Dt1(->top), Dt1(->top), Dt1(->base), LJ_VMST_INTERP, Dt1(->top), DISPATCH_GL(vmstate), LUA_YIELD);
6300 dasm_put(Dst, 1302, Dt1(->base), Dt1(->maxstack), Dt1(->top), FRAME_TYPE, Dt1(->cframe), Dt1(->base), CFRAME_RESUME, Dt1(->top)); 6307 dasm_put(Dst, 1302, Dt1(->base), Dt1(->maxstack), Dt1(->top), FRAME_TYPE, Dt1(->cframe), Dt1(->base), CFRAME_RESUME, Dt1(->top));
6301 dasm_put(Dst, 1361, LUA_YIELD, Dt1(->cframe), Dt1(->status), -LJ_TISNUM, ~LJ_TISNUM, ~LJ_TISNUM); 6308 dasm_put(Dst, 1361, LUA_YIELD, Dt1(->cframe), Dt1(->status), -LJ_TISNUM, ~LJ_TISNUM, ~LJ_TISNUM);
6302 dasm_put(Dst, 1427, -LJ_TISNUM, ~LJ_TISNUM, ~LJ_TISNUM); 6309 dasm_put(Dst, 1429, -LJ_TISNUM, ~LJ_TISNUM, ~LJ_TISNUM);
6303 dasm_put(Dst, 1491, -LJ_TISNUM, (1+1)*8, FRAME_TYPE, ~LJ_TNIL); 6310 dasm_put(Dst, 1493, -LJ_TISNUM, (1+1)*8, FRAME_TYPE, ~LJ_TNIL);
6304 dasm_put(Dst, 1555, -LJ_TISNUM); 6311 dasm_put(Dst, 1555, -LJ_TISNUM);
6305 if (LJ_TARGET_OSX) { 6312 if (LJ_TARGET_OSX) {
6306 dasm_put(Dst, 1560); 6313 dasm_put(Dst, 1564);
6307 } 6314 }
6308 dasm_put(Dst, 1562); 6315 dasm_put(Dst, 1566);
6309 if (LJ_TARGET_OSX) { 6316 if (LJ_TARGET_OSX) {
6310 dasm_put(Dst, 1565); 6317 dasm_put(Dst, 1569);
6311 } 6318 }
6312 dasm_put(Dst, 1567, -LJ_TISNUM); 6319 dasm_put(Dst, 1571, -LJ_TISNUM);
6313 if (LJ_TARGET_OSX) { 6320 if (LJ_TARGET_OSX) {
6314 dasm_put(Dst, 1579); 6321 dasm_put(Dst, 1583);
6315 } 6322 }
6316 dasm_put(Dst, 1581); 6323 dasm_put(Dst, 1585);
6317 if (LJ_TARGET_OSX) { 6324 if (LJ_TARGET_OSX) {
6318 dasm_put(Dst, 1584); 6325 dasm_put(Dst, 1588);
6319 } 6326 }
6320 dasm_put(Dst, 1586, -LJ_TISNUM); 6327 dasm_put(Dst, 1590, -LJ_TISNUM);
6321 if (LJ_TARGET_OSX) { 6328 if (LJ_TARGET_OSX) {
6322 dasm_put(Dst, 1598); 6329 dasm_put(Dst, 1602);
6323 } 6330 }
6324 dasm_put(Dst, 1600); 6331 dasm_put(Dst, 1604);
6325 if (LJ_TARGET_OSX) { 6332 if (LJ_TARGET_OSX) {
6326 dasm_put(Dst, 1603); 6333 dasm_put(Dst, 1607);
6327 } 6334 }
6328 dasm_put(Dst, 1605, -LJ_TISNUM); 6335 dasm_put(Dst, 1609, -LJ_TISNUM);
6329 if (LJ_TARGET_OSX) { 6336 if (LJ_TARGET_OSX) {
6330 dasm_put(Dst, 1617); 6337 dasm_put(Dst, 1621);
6331 } 6338 }
6332 dasm_put(Dst, 1619); 6339 dasm_put(Dst, 1623);
6333 if (LJ_TARGET_OSX) { 6340 if (LJ_TARGET_OSX) {
6334 dasm_put(Dst, 1622); 6341 dasm_put(Dst, 1626);
6335 } 6342 }
6336 dasm_put(Dst, 1624, -LJ_TISNUM); 6343 dasm_put(Dst, 1628, -LJ_TISNUM);
6337 if (LJ_TARGET_OSX) { 6344 if (LJ_TARGET_OSX) {
6338 dasm_put(Dst, 1636); 6345 dasm_put(Dst, 1640);
6339 } 6346 }
6340 dasm_put(Dst, 1638); 6347 dasm_put(Dst, 1642);
6341 if (LJ_TARGET_OSX) { 6348 if (LJ_TARGET_OSX) {
6342 dasm_put(Dst, 1641); 6349 dasm_put(Dst, 1645);
6343 } 6350 }
6344 dasm_put(Dst, 1643, -LJ_TISNUM); 6351 dasm_put(Dst, 1647, -LJ_TISNUM);
6345 if (LJ_TARGET_OSX) { 6352 if (LJ_TARGET_OSX) {
6346 dasm_put(Dst, 1655); 6353 dasm_put(Dst, 1659);
6347 } 6354 }
6348 dasm_put(Dst, 1657); 6355 dasm_put(Dst, 1661);
6349 if (LJ_TARGET_OSX) { 6356 if (LJ_TARGET_OSX) {
6350 dasm_put(Dst, 1660); 6357 dasm_put(Dst, 1664);
6351 } 6358 }
6352 dasm_put(Dst, 1662, -LJ_TISNUM); 6359 dasm_put(Dst, 1666, -LJ_TISNUM);
6353 if (LJ_TARGET_OSX) { 6360 if (LJ_TARGET_OSX) {
6354 dasm_put(Dst, 1674); 6361 dasm_put(Dst, 1678);
6355 } 6362 }
6356 dasm_put(Dst, 1676); 6363 dasm_put(Dst, 1680);
6357 if (LJ_TARGET_OSX) { 6364 if (LJ_TARGET_OSX) {
6358 dasm_put(Dst, 1679); 6365 dasm_put(Dst, 1683);
6359 } 6366 }
6360 dasm_put(Dst, 1681, -LJ_TISNUM); 6367 dasm_put(Dst, 1685, -LJ_TISNUM);
6361 if (LJ_TARGET_OSX) { 6368 if (LJ_TARGET_OSX) {
6362 dasm_put(Dst, 1693); 6369 dasm_put(Dst, 1697);
6363 } 6370 }
6364 dasm_put(Dst, 1695); 6371 dasm_put(Dst, 1699);
6365 if (LJ_TARGET_OSX) { 6372 if (LJ_TARGET_OSX) {
6366 dasm_put(Dst, 1698); 6373 dasm_put(Dst, 1702);
6367 } 6374 }
6368 dasm_put(Dst, 1700, -LJ_TISNUM); 6375 dasm_put(Dst, 1704, -LJ_TISNUM);
6369 if (LJ_TARGET_OSX) { 6376 if (LJ_TARGET_OSX) {
6370 dasm_put(Dst, 1712); 6377 dasm_put(Dst, 1716);
6371 } 6378 }
6372 dasm_put(Dst, 1714); 6379 dasm_put(Dst, 1718);
6373 if (LJ_TARGET_OSX) { 6380 if (LJ_TARGET_OSX) {
6374 dasm_put(Dst, 1717); 6381 dasm_put(Dst, 1721);
6375 } 6382 }
6376 dasm_put(Dst, 1719, -LJ_TISNUM); 6383 dasm_put(Dst, 1723, -LJ_TISNUM);
6377 if (LJ_TARGET_OSX) { 6384 if (LJ_TARGET_OSX) {
6378 dasm_put(Dst, 1731); 6385 dasm_put(Dst, 1735);
6379 } 6386 }
6380 dasm_put(Dst, 1733); 6387 dasm_put(Dst, 1737);
6381 if (LJ_TARGET_OSX) { 6388 if (LJ_TARGET_OSX) {
6382 dasm_put(Dst, 1736); 6389 dasm_put(Dst, 1740);
6383 } 6390 }
6384 dasm_put(Dst, 1738, -LJ_TISNUM); 6391 dasm_put(Dst, 1742, -LJ_TISNUM);
6385 if (LJ_TARGET_OSX) { 6392 if (LJ_TARGET_OSX) {
6386 dasm_put(Dst, 1750); 6393 dasm_put(Dst, 1754);
6387 } 6394 }
6388 dasm_put(Dst, 1752); 6395 dasm_put(Dst, 1756);
6389 if (LJ_TARGET_OSX) { 6396 if (LJ_TARGET_OSX) {
6390 dasm_put(Dst, 1755); 6397 dasm_put(Dst, 1759);
6391 } 6398 }
6392 dasm_put(Dst, 1757, -LJ_TISNUM); 6399 dasm_put(Dst, 1761, -LJ_TISNUM);
6393 if (LJ_TARGET_OSX) { 6400 if (LJ_TARGET_OSX) {
6394 dasm_put(Dst, 1769); 6401 dasm_put(Dst, 1773);
6395 } 6402 }
6396 dasm_put(Dst, 1771); 6403 dasm_put(Dst, 1775);
6397 if (LJ_TARGET_OSX) { 6404 if (LJ_TARGET_OSX) {
6398 dasm_put(Dst, 1774); 6405 dasm_put(Dst, 1778);
6399 } 6406 }
6400 dasm_put(Dst, 1776, -LJ_TISNUM); 6407 dasm_put(Dst, 1780, -LJ_TISNUM);
6401 if (LJ_TARGET_OSX) { 6408 if (LJ_TARGET_OSX) {
6402 dasm_put(Dst, 1788); 6409 dasm_put(Dst, 1792);
6403 } 6410 }
6404 dasm_put(Dst, 1790); 6411 dasm_put(Dst, 1794);
6405 if (LJ_TARGET_OSX) { 6412 if (LJ_TARGET_OSX) {
6406 dasm_put(Dst, 1793); 6413 dasm_put(Dst, 1797);
6407 } 6414 }
6408 dasm_put(Dst, 1795, -LJ_TISNUM, -LJ_TISNUM); 6415 dasm_put(Dst, 1799, -LJ_TISNUM, -LJ_TISNUM);
6409 if (LJ_TARGET_OSX) { 6416 if (LJ_TARGET_OSX) {
6410 dasm_put(Dst, 1810); 6417 dasm_put(Dst, 1814);
6411 } 6418 }
6412 dasm_put(Dst, 1812); 6419 dasm_put(Dst, 1816);
6413 if (LJ_TARGET_OSX) { 6420 if (LJ_TARGET_OSX) {
6414 dasm_put(Dst, 1815); 6421 dasm_put(Dst, 1819);
6415 } 6422 }
6416 dasm_put(Dst, 1817, -LJ_TISNUM, -LJ_TISNUM); 6423 dasm_put(Dst, 1821, -LJ_TISNUM, -LJ_TISNUM);
6417 if (LJ_TARGET_OSX) { 6424 if (LJ_TARGET_OSX) {
6418 dasm_put(Dst, 1832); 6425 dasm_put(Dst, 1836);
6419 } 6426 }
6420 dasm_put(Dst, 1834); 6427 dasm_put(Dst, 1838);
6421 if (LJ_TARGET_OSX) { 6428 if (LJ_TARGET_OSX) {
6422 dasm_put(Dst, 1837); 6429 dasm_put(Dst, 1841);
6423 } 6430 }
6424 dasm_put(Dst, 1839, -LJ_TISNUM, -LJ_TISNUM); 6431 dasm_put(Dst, 1843, -LJ_TISNUM, -LJ_TISNUM);
6425 if (LJ_TARGET_OSX) { 6432 if (LJ_TARGET_OSX) {
6426 dasm_put(Dst, 1854); 6433 dasm_put(Dst, 1858);
6427 } 6434 }
6428 dasm_put(Dst, 1856); 6435 dasm_put(Dst, 1860);
6429 if (LJ_TARGET_OSX) { 6436 if (LJ_TARGET_OSX) {
6430 dasm_put(Dst, 1859); 6437 dasm_put(Dst, 1863);
6431 } 6438 }
6432 dasm_put(Dst, 1861, -LJ_TISNUM, Dt8(->upvalue[0]), -LJ_TISNUM, -LJ_TISNUM); 6439 dasm_put(Dst, 1865, -LJ_TISNUM, Dt8(->upvalue[0]), -LJ_TISNUM, -LJ_TISNUM);
6433 if (LJ_TARGET_OSX) { 6440 if (LJ_TARGET_OSX) {
6434 dasm_put(Dst, 1894); 6441 dasm_put(Dst, 1898);
6435 } 6442 }
6436 dasm_put(Dst, 1896); 6443 dasm_put(Dst, 1900);
6437 if (LJ_TARGET_OSX) { 6444 if (LJ_TARGET_OSX) {
6438 dasm_put(Dst, 1899); 6445 dasm_put(Dst, 1903);
6439 } 6446 }
6440 dasm_put(Dst, 1901, -LJ_TISNUM); 6447 dasm_put(Dst, 1905, -LJ_TISNUM);
6441 if (LJ_TARGET_OSX) { 6448 if (LJ_TARGET_OSX) {
6442 dasm_put(Dst, 1914); 6449 dasm_put(Dst, 1918);
6443 } 6450 }
6444 dasm_put(Dst, 1916); 6451 dasm_put(Dst, 1920);
6445 if (LJ_TARGET_OSX) { 6452 if (LJ_TARGET_OSX) {
6446 dasm_put(Dst, 1919); 6453 dasm_put(Dst, 1923);
6447 } 6454 }
6448 dasm_put(Dst, 1921, ~LJ_TISNUM, (2+1)*8, -LJ_TISNUM); 6455 dasm_put(Dst, 1925, ~LJ_TISNUM, (2+1)*8, -LJ_TISNUM);
6449 if (LJ_TARGET_OSX) { 6456 if (LJ_TARGET_OSX) {
6450 dasm_put(Dst, 1943); 6457 dasm_put(Dst, 1947);
6451 } 6458 }
6452 dasm_put(Dst, 1945); 6459 dasm_put(Dst, 1949);
6453 if (LJ_TARGET_OSX) { 6460 if (LJ_TARGET_OSX) {
6454 dasm_put(Dst, 1948); 6461 dasm_put(Dst, 1952);
6455 } 6462 }
6456 dasm_put(Dst, 1950, (2+1)*8, -LJ_TISNUM, -LJ_TISNUM, -LJ_TISNUM); 6463 dasm_put(Dst, 1954, (2+1)*8, -LJ_TISNUM, -LJ_TISNUM, -LJ_TISNUM);
6457 dasm_put(Dst, 2001, -LJ_TISNUM, -LJ_TISNUM); 6464 dasm_put(Dst, 2005, -LJ_TISNUM, -LJ_TISNUM);
6458 dasm_put(Dst, 2055, -LJ_TISNUM, -LJ_TSTR, Dt5(->len), ~LJ_TISNUM, -LJ_TSTR, Dt5(->len), Dt5([1])); 6465 dasm_put(Dst, 2059, -LJ_TISNUM, -LJ_TSTR, Dt5(->len), ~LJ_TISNUM, -LJ_TSTR, Dt5(->len), Dt5([1]));
6459 dasm_put(Dst, 2109, ~LJ_TISNUM, (0+1)*8, (1+1)*8, DISPATCH_GL(gc.total), DISPATCH_GL(gc.threshold), -LJ_TISNUM, Dt1(->base), Dt1(->base), ~LJ_TSTR, DISPATCH_GL(gc.total), DISPATCH_GL(gc.threshold)); 6466 dasm_put(Dst, 2113, ~LJ_TISNUM, (0+1)*8, (1+1)*8, DISPATCH_GL(gc.total), DISPATCH_GL(gc.threshold), -LJ_TISNUM, Dt1(->base), Dt1(->base), ~LJ_TSTR, DISPATCH_GL(gc.total), DISPATCH_GL(gc.threshold));
6460 dasm_put(Dst, 2168, -LJ_TISNUM, -LJ_TSTR, Dt5(->len), -LJ_TISNUM, sizeof(GCstr)-1, -DISPATCH_GL(strempty), ~LJ_TSTR, DISPATCH_GL(gc.total), DISPATCH_GL(gc.threshold), -LJ_TSTR, -LJ_TISNUM, Dt5(->len)); 6467 dasm_put(Dst, 2172, -LJ_TISNUM, -LJ_TSTR, Dt5(->len), -LJ_TISNUM, sizeof(GCstr)-1, -DISPATCH_GL(strempty), ~LJ_TSTR, DISPATCH_GL(gc.total), DISPATCH_GL(gc.threshold), -LJ_TSTR, -LJ_TISNUM, Dt5(->len));
6461 dasm_put(Dst, 2230, DISPATCH_GL(tmpbuf.sz), DISPATCH_GL(tmpbuf.buf), Dt5([1]), DISPATCH_GL(gc.total), DISPATCH_GL(gc.threshold), -LJ_TSTR, Dt5(->len), DISPATCH_GL(tmpbuf.sz), DISPATCH_GL(tmpbuf.buf), sizeof(GCstr)); 6468 dasm_put(Dst, 2234, DISPATCH_GL(tmpbuf.sz), DISPATCH_GL(tmpbuf.buf), Dt5([1]), DISPATCH_GL(gc.total), DISPATCH_GL(gc.threshold), -LJ_TSTR, Dt5(->len), DISPATCH_GL(tmpbuf.sz), DISPATCH_GL(tmpbuf.buf), sizeof(GCstr));
6462 dasm_put(Dst, 2283, DISPATCH_GL(gc.total), DISPATCH_GL(gc.threshold), -LJ_TSTR, Dt5(->len), DISPATCH_GL(tmpbuf.sz), DISPATCH_GL(tmpbuf.buf), sizeof(GCstr), DISPATCH_GL(gc.total), DISPATCH_GL(gc.threshold)); 6469 dasm_put(Dst, 2287, DISPATCH_GL(gc.total), DISPATCH_GL(gc.threshold), -LJ_TSTR, Dt5(->len), DISPATCH_GL(tmpbuf.sz), DISPATCH_GL(tmpbuf.buf), sizeof(GCstr), DISPATCH_GL(gc.total), DISPATCH_GL(gc.threshold));
6463 dasm_put(Dst, 2343, -LJ_TSTR, Dt5(->len), DISPATCH_GL(tmpbuf.sz), DISPATCH_GL(tmpbuf.buf), sizeof(GCstr), -LJ_TTAB); 6470 dasm_put(Dst, 2347, -LJ_TSTR, Dt5(->len), DISPATCH_GL(tmpbuf.sz), DISPATCH_GL(tmpbuf.buf), sizeof(GCstr), -LJ_TTAB);
6464 if (LJ_TARGET_OSX) { 6471 if (LJ_TARGET_OSX) {
6465 dasm_put(Dst, 2381); 6472 dasm_put(Dst, 2385);
6466 } 6473 }
6467 dasm_put(Dst, 2383); 6474 dasm_put(Dst, 2387);
6468 if (LJ_TARGET_OSX) { 6475 if (LJ_TARGET_OSX) {
6469 dasm_put(Dst, 2386); 6476 dasm_put(Dst, 2390);
6470 } 6477 }
6471 dasm_put(Dst, 2388, ~LJ_TISNUM, -LJ_TISNUM, ~LJ_TISNUM, -LJ_TISNUM, -LJ_TISNUM); 6478 dasm_put(Dst, 2392, ~LJ_TISNUM, -LJ_TISNUM, ~LJ_TISNUM, -LJ_TISNUM, -LJ_TISNUM);
6472 dasm_put(Dst, 2459, -LJ_TISNUM, -LJ_TISNUM, -LJ_TISNUM, -LJ_TISNUM, ~LJ_TISNUM); 6479 dasm_put(Dst, 2463, -LJ_TISNUM, -LJ_TISNUM, -LJ_TISNUM, -LJ_TISNUM, ~LJ_TISNUM);
6473 dasm_put(Dst, 2519, -LJ_TISNUM, ~LJ_TISNUM, -LJ_TISNUM, ~LJ_TISNUM, -LJ_TISNUM, -LJ_TISNUM, ~LJ_TISNUM, -LJ_TISNUM); 6480 dasm_put(Dst, 2523, -LJ_TISNUM, ~LJ_TISNUM, -LJ_TISNUM, ~LJ_TISNUM, -LJ_TISNUM, -LJ_TISNUM, ~LJ_TISNUM, -LJ_TISNUM);
6474 dasm_put(Dst, 2575, -LJ_TISNUM, ~LJ_TISNUM, -LJ_TISNUM, -LJ_TISNUM, ~LJ_TISNUM, -LJ_TISNUM, -LJ_TISNUM, ~LJ_TISNUM); 6481 dasm_put(Dst, 2579, -LJ_TISNUM, ~LJ_TISNUM, -LJ_TISNUM, -LJ_TISNUM, ~LJ_TISNUM, -LJ_TISNUM, -LJ_TISNUM, ~LJ_TISNUM);
6475 dasm_put(Dst, 2632, -LJ_TISNUM, -LJ_TISNUM, ~LJ_TISNUM, Dt1(->maxstack), Dt1(->top), Dt8(->f), Dt1(->base), 8*LUA_MINSTACK, Dt1(->base), Dt1(->top), Dt7(->field_pc), FRAME_TYPE, FRAME_TYPEP); 6482 dasm_put(Dst, 2636, -LJ_TISNUM, -LJ_TISNUM, ~LJ_TISNUM, Dt1(->maxstack), Dt1(->top), Dt8(->f), Dt1(->base), 8*LUA_MINSTACK, Dt1(->base), Dt1(->top), Dt7(->field_pc), FRAME_TYPE, FRAME_TYPEP);
6476 dasm_put(Dst, 2695, LUA_MINSTACK, Dt1(->base), Dt1(->base), Dt1(->top), Dt1(->base)); 6483 dasm_put(Dst, 2699, LUA_MINSTACK, Dt1(->base), Dt1(->base), Dt1(->top), Dt1(->base));
6477#if LJ_HASJIT 6484#if LJ_HASJIT
6478 dasm_put(Dst, 2729, DISPATCH_GL(hookmask), HOOK_VMEVENT, DISPATCH_GL(hookcount), HOOK_ACTIVE, LUA_MASKLINE|LUA_MASKCOUNT, DISPATCH_GL(hookcount)); 6485 dasm_put(Dst, 2734, DISPATCH_GL(hookmask), HOOK_VMEVENT, DISPATCH_GL(hookcount), HOOK_ACTIVE, LUA_MASKLINE|LUA_MASKCOUNT, DISPATCH_GL(hookcount));
6479#endif 6486#endif
6480 dasm_put(Dst, 2749, DISPATCH_GL(hookmask), HOOK_ACTIVE, GG_DISP2STATIC, DISPATCH_GL(hookmask), DISPATCH_GL(hookcount), HOOK_ACTIVE, LUA_MASKLINE|LUA_MASKCOUNT, DISPATCH_GL(hookcount), LUA_MASKLINE, Dt1(->base), Dt1(->base)); 6487 dasm_put(Dst, 2754, DISPATCH_GL(hookmask), HOOK_ACTIVE, GG_DISP2STATIC, DISPATCH_GL(hookmask), DISPATCH_GL(hookcount), HOOK_ACTIVE, LUA_MASKLINE|LUA_MASKCOUNT, DISPATCH_GL(hookcount), LUA_MASKLINE, Dt1(->base), Dt1(->base));
6481 dasm_put(Dst, 2795, GG_DISP2STATIC); 6488 dasm_put(Dst, 2800, GG_DISP2STATIC);
6482#if LJ_HASJIT 6489#if LJ_HASJIT
6483 dasm_put(Dst, 2811, -GG_DISP2J, Dt7(->field_pc), DISPATCH_J(L), PC2PROTO(framesize), Dt1(->base), Dt1(->top)); 6490 dasm_put(Dst, 2816, -GG_DISP2J, Dt7(->field_pc), DISPATCH_J(L), PC2PROTO(framesize), Dt1(->base), Dt1(->top));
6484#endif 6491#endif
6485 dasm_put(Dst, 2832); 6492 dasm_put(Dst, 2837);
6486#if LJ_HASJIT 6493#if LJ_HASJIT
6487 dasm_put(Dst, 2835); 6494 dasm_put(Dst, 2840);
6488#endif 6495#endif
6489 dasm_put(Dst, 2838); 6496 dasm_put(Dst, 2843);
6490#if LJ_HASJIT 6497#if LJ_HASJIT
6491 dasm_put(Dst, 2840); 6498 dasm_put(Dst, 2845);
6492#endif 6499#endif
6493 dasm_put(Dst, 2843, Dt1(->base), Dt1(->top), Dt1(->base), Dt1(->top)); 6500 dasm_put(Dst, 2848, Dt1(->base), Dt1(->top), Dt1(->base), Dt1(->top));
6494#if LJ_HASJIT 6501#if LJ_HASJIT
6495 dasm_put(Dst, 2866, LJ_VMST_EXIT, DISPATCH_GL(vmstate), DISPATCH_GL(jit_L), DISPATCH_GL(jit_base), DISPATCH_J(exitno), DISPATCH_J(L), Dt1(->base), DISPATCH_GL(jit_L), -GG_DISP2J, Dt1(->cframe), Dt1(->base), ~CFRAME_RAWMASK); 6502 dasm_put(Dst, 2871, LJ_VMST_EXIT, DISPATCH_GL(vmstate), DISPATCH_GL(jit_L), DISPATCH_GL(jit_base), DISPATCH_J(exitno), DISPATCH_J(L), Dt1(->base), DISPATCH_GL(jit_L), -GG_DISP2J, Dt1(->cframe), Dt1(->base), ~CFRAME_RAWMASK);
6496#endif 6503#endif
6497 dasm_put(Dst, 2914); 6504 dasm_put(Dst, 2919);
6498#if LJ_HASJIT 6505#if LJ_HASJIT
6499 dasm_put(Dst, 2916, Dt7(->field_pc), DISPATCH_GL(jit_L), LJ_VMST_INTERP, PC2PROTO(k), DISPATCH_GL(vmstate), BC_FUNCF); 6506 dasm_put(Dst, 2921, Dt7(->field_pc), DISPATCH_GL(jit_L), LJ_VMST_INTERP, PC2PROTO(k), DISPATCH_GL(vmstate), BC_FUNCF);
6500#endif 6507#endif
6501 dasm_put(Dst, 2953); 6508 dasm_put(Dst, 2958);
6502#if LJ_HASJIT 6509#if LJ_HASJIT
6503 dasm_put(Dst, 3027); 6510 dasm_put(Dst, 3034);
6504#endif 6511#endif
6505 dasm_put(Dst, 3041); 6512 dasm_put(Dst, 3048);
6506 { 6513 {
6507 int i; 6514 int i;
6508 for (i = 31; i >= 0; i--) { 6515 for (i = 31; i >= 0; i--) {
6509 dasm_put(Dst, 3077, i, i); 6516 dasm_put(Dst, 3084, i, i);
6510 } 6517 }
6511 } 6518 }
6512 dasm_put(Dst, 3082); 6519 dasm_put(Dst, 3089);
6513#if LJ_HASJIT 6520#if LJ_HASJIT
6514 dasm_put(Dst, 3111); 6521 dasm_put(Dst, 3118);
6515#else 6522#else
6516 dasm_put(Dst, 3136); 6523 dasm_put(Dst, 3143);
6517#endif 6524#endif
6518 dasm_put(Dst, 3138); 6525 dasm_put(Dst, 3145);
6519#if LJ_HASFFI 6526#if LJ_HASFFI
6520#define DtE(_V) (int)(ptrdiff_t)&(((CTState *)0)_V) 6527#define DtE(_V) (int)(ptrdiff_t)&(((CTState *)0)_V)
6521 dasm_put(Dst, 3140, Dt2(->ctype_state), GG_G2DISP, DtE(->cb.gpr[0]), DtE(->cb.gpr[2]), CFRAME_SIZE, DtE(->cb.stack), DtE(->cb.slot), Dt1(->base), LJ_VMST_INTERP, Dt1(->top), DISPATCH_GL(vmstate), Dt7(->field_pc)); 6528 dasm_put(Dst, 3147, Dt2(->ctype_state), GG_G2DISP, DtE(->cb.gpr[0]), DtE(->cb.gpr[2]), CFRAME_SIZE, DtE(->cb.stack), DtE(->cb.slot), Dt1(->base), LJ_VMST_INTERP, Dt1(->top), DISPATCH_GL(vmstate), Dt7(->field_pc));
6522#endif 6529#endif
6523 dasm_put(Dst, 3183); 6530 dasm_put(Dst, 3190);
6524#if LJ_HASFFI 6531#if LJ_HASFFI
6525 dasm_put(Dst, 3185, DISPATCH_GL(ctype_state), Dt1(->base), Dt1(->top), DtE(->L), DtE(->cb.gpr[0])); 6532 dasm_put(Dst, 3192, DISPATCH_GL(ctype_state), Dt1(->base), Dt1(->top), DtE(->L), DtE(->cb.gpr[0]));
6526#endif 6533#endif
6527 dasm_put(Dst, 3202); 6534 dasm_put(Dst, 3209);
6528#if LJ_HASFFI 6535#if LJ_HASFFI
6529#define DtF(_V) (int)(ptrdiff_t)&(((CCallState *)0)_V) 6536#define DtF(_V) (int)(ptrdiff_t)&(((CCallState *)0)_V)
6530 dasm_put(Dst, 3204, DtF(->spadj), DtF(->nsp), offsetof(CCallState, stack), DtF(->func), DtF(->gpr[0]), DtF(->gpr[1]), DtF(->gpr[2]), DtF(->gpr[3]), DtF(->gpr[0]), DtF(->gpr[1])); 6537 dasm_put(Dst, 3211, DtF(->spadj), DtF(->nsp), offsetof(CCallState, stack), DtF(->func), DtF(->gpr[0]), DtF(->gpr[1]), DtF(->gpr[2]), DtF(->gpr[3]), DtF(->gpr[0]), DtF(->gpr[1]));
6531#endif 6538#endif
6532} 6539}
6533 6540
@@ -6535,7 +6542,7 @@ static void build_subroutines(BuildCtx *ctx)
6535static void build_ins(BuildCtx *ctx, BCOp op, int defop) 6542static void build_ins(BuildCtx *ctx, BCOp op, int defop)
6536{ 6543{
6537 int vk = 0; 6544 int vk = 0;
6538 dasm_put(Dst, 3242, defop); 6545 dasm_put(Dst, 3249, defop);
6539 6546
6540 switch (op) { 6547 switch (op) {
6541 6548
@@ -6544,174 +6551,174 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop)
6544 /* Remember: all ops branch for a true comparison, fall through otherwise. */ 6551 /* Remember: all ops branch for a true comparison, fall through otherwise. */
6545 6552
6546 case BC_ISLT: case BC_ISGE: case BC_ISLE: case BC_ISGT: 6553 case BC_ISLT: case BC_ISGE: case BC_ISLE: case BC_ISGT:
6547 dasm_put(Dst, 3244, -LJ_TISNUM, -LJ_TISNUM); 6554 dasm_put(Dst, 3251, -LJ_TISNUM, -LJ_TISNUM);
6548 if (op == BC_ISLT) { 6555 if (op == BC_ISLT) {
6549 dasm_put(Dst, 3260); 6556 dasm_put(Dst, 3267);
6550 } else if (op == BC_ISGE) { 6557 } else if (op == BC_ISGE) {
6551 dasm_put(Dst, 3262); 6558 dasm_put(Dst, 3269);
6552 } else if (op == BC_ISLE) { 6559 } else if (op == BC_ISLE) {
6553 dasm_put(Dst, 3264); 6560 dasm_put(Dst, 3271);
6554 } else { 6561 } else {
6555 dasm_put(Dst, 3266); 6562 dasm_put(Dst, 3273);
6556 } 6563 }
6557 dasm_put(Dst, 3268, -LJ_TISNUM); 6564 dasm_put(Dst, 3275, -LJ_TISNUM);
6558 if (op == BC_ISLT) { 6565 if (op == BC_ISLT) {
6559 dasm_put(Dst, 3304); 6566 dasm_put(Dst, 3311);
6560 } else if (op == BC_ISGE) { 6567 } else if (op == BC_ISGE) {
6561 dasm_put(Dst, 3306); 6568 dasm_put(Dst, 3313);
6562 } else if (op == BC_ISLE) { 6569 } else if (op == BC_ISLE) {
6563 dasm_put(Dst, 3308); 6570 dasm_put(Dst, 3315);
6564 } else { 6571 } else {
6565 dasm_put(Dst, 3310); 6572 dasm_put(Dst, 3317);
6566 } 6573 }
6567 dasm_put(Dst, 3312); 6574 dasm_put(Dst, 3319);
6568 break; 6575 break;
6569 6576
6570 case BC_ISEQV: case BC_ISNEV: 6577 case BC_ISEQV: case BC_ISNEV:
6571 vk = op == BC_ISEQV; 6578 vk = op == BC_ISEQV;
6572 dasm_put(Dst, 3315, -LJ_TISNUM, -LJ_TISNUM); 6579 dasm_put(Dst, 3322, -LJ_TISNUM, -LJ_TISNUM);
6573 if (vk) { 6580 if (vk) {
6574 dasm_put(Dst, 3326); 6581 dasm_put(Dst, 3333);
6575 } else { 6582 } else {
6576 dasm_put(Dst, 3329); 6583 dasm_put(Dst, 3336);
6577 } 6584 }
6578 if (LJ_HASFFI) { 6585 if (LJ_HASFFI) {
6579 dasm_put(Dst, 3332, -LJ_TCDATA, -LJ_TCDATA); 6586 dasm_put(Dst, 3339, -LJ_TCDATA, -LJ_TCDATA);
6580 } 6587 }
6581 dasm_put(Dst, 3339, -LJ_TISPRI); 6588 dasm_put(Dst, 3346, -LJ_TISPRI);
6582 if (vk) { 6589 if (vk) {
6583 dasm_put(Dst, 3348, -LJ_TISTABUD); 6590 dasm_put(Dst, 3355, -LJ_TISTABUD);
6584 } else { 6591 } else {
6585 dasm_put(Dst, 3365, -LJ_TISTABUD); 6592 dasm_put(Dst, 3372, -LJ_TISTABUD);
6586 } 6593 }
6587 dasm_put(Dst, 3372, Dt6(->metatable)); 6594 dasm_put(Dst, 3379, Dt6(->metatable));
6588 if (vk) { 6595 if (vk) {
6589 dasm_put(Dst, 3376); 6596 dasm_put(Dst, 3383);
6590 } else { 6597 } else {
6591 dasm_put(Dst, 3379); 6598 dasm_put(Dst, 3386);
6592 } 6599 }
6593 dasm_put(Dst, 3382, Dt6(->nomm), 1-vk, 1<<MM_eq); 6600 dasm_put(Dst, 3389, Dt6(->nomm), 1-vk, 1<<MM_eq);
6594 if (vk) { 6601 if (vk) {
6595 dasm_put(Dst, 3392); 6602 dasm_put(Dst, 3399);
6596 } else { 6603 } else {
6597 dasm_put(Dst, 3395); 6604 dasm_put(Dst, 3402);
6598 } 6605 }
6599 break; 6606 break;
6600 6607
6601 case BC_ISEQS: case BC_ISNES: 6608 case BC_ISEQS: case BC_ISNES:
6602 vk = op == BC_ISEQS; 6609 vk = op == BC_ISEQS;
6603 dasm_put(Dst, 3405, -LJ_TSTR); 6610 dasm_put(Dst, 3412, -LJ_TSTR);
6604 if (LJ_HASFFI) { 6611 if (LJ_HASFFI) {
6605 dasm_put(Dst, 3414); 6612 dasm_put(Dst, 3421);
6606 } else { 6613 } else {
6607 dasm_put(Dst, 3418); 6614 dasm_put(Dst, 3425);
6608 } 6615 }
6609 if (vk) { 6616 if (vk) {
6610 dasm_put(Dst, 3420); 6617 dasm_put(Dst, 3427);
6611 } else { 6618 } else {
6612 dasm_put(Dst, 3423); 6619 dasm_put(Dst, 3430);
6613 } 6620 }
6614 dasm_put(Dst, 3426); 6621 dasm_put(Dst, 3433);
6615 if (LJ_HASFFI) { 6622 if (LJ_HASFFI) {
6616 dasm_put(Dst, 3433, -LJ_TCDATA); 6623 dasm_put(Dst, 3440, -LJ_TCDATA);
6617 } 6624 }
6618 break; 6625 break;
6619 6626
6620 case BC_ISEQN: case BC_ISNEN: 6627 case BC_ISEQN: case BC_ISNEN:
6621 vk = op == BC_ISEQN; 6628 vk = op == BC_ISEQN;
6622 dasm_put(Dst, 3441); 6629 dasm_put(Dst, 3448);
6623 if (vk) { 6630 if (vk) {
6624 dasm_put(Dst, 3448); 6631 dasm_put(Dst, 3455);
6625 } else { 6632 } else {
6626 dasm_put(Dst, 3450); 6633 dasm_put(Dst, 3457);
6627 } 6634 }
6628 dasm_put(Dst, 3452, -LJ_TISNUM, -LJ_TISNUM); 6635 dasm_put(Dst, 3459, -LJ_TISNUM, -LJ_TISNUM);
6629 if (vk) { 6636 if (vk) {
6630 dasm_put(Dst, 3462); 6637 dasm_put(Dst, 3469);
6631 } else { 6638 } else {
6632 dasm_put(Dst, 3465); 6639 dasm_put(Dst, 3472);
6633 } 6640 }
6634 dasm_put(Dst, 3468); 6641 dasm_put(Dst, 3475);
6635 if (LJ_HASFFI) { 6642 if (LJ_HASFFI) {
6636 dasm_put(Dst, 3477); 6643 dasm_put(Dst, 3484);
6637 } else { 6644 } else {
6638 if (!vk) { 6645 if (!vk) {
6639 dasm_put(Dst, 3480); 6646 dasm_put(Dst, 3487);
6640 } 6647 }
6641 dasm_put(Dst, 3482); 6648 dasm_put(Dst, 3489);
6642 } 6649 }
6643 dasm_put(Dst, 3485, -LJ_TISNUM); 6650 dasm_put(Dst, 3492, -LJ_TISNUM);
6644 if (vk) { 6651 if (vk) {
6645 dasm_put(Dst, 3501); 6652 dasm_put(Dst, 3508);
6646 } else { 6653 } else {
6647 dasm_put(Dst, 3503); 6654 dasm_put(Dst, 3510);
6648 } 6655 }
6649 dasm_put(Dst, 3505); 6656 dasm_put(Dst, 3512);
6650 if (LJ_HASFFI) { 6657 if (LJ_HASFFI) {
6651 dasm_put(Dst, 3508, -LJ_TCDATA); 6658 dasm_put(Dst, 3515, -LJ_TCDATA);
6652 } 6659 }
6653 break; 6660 break;
6654 6661
6655 case BC_ISEQP: case BC_ISNEP: 6662 case BC_ISEQP: case BC_ISNEP:
6656 vk = op == BC_ISEQP; 6663 vk = op == BC_ISEQP;
6657 dasm_put(Dst, 3516); 6664 dasm_put(Dst, 3523);
6658 if (LJ_HASFFI) { 6665 if (LJ_HASFFI) {
6659 dasm_put(Dst, 3522, -LJ_TCDATA); 6666 dasm_put(Dst, 3529, -LJ_TCDATA);
6660 } 6667 }
6661 dasm_put(Dst, 3527); 6668 dasm_put(Dst, 3534);
6662 if (vk) { 6669 if (vk) {
6663 dasm_put(Dst, 3529); 6670 dasm_put(Dst, 3536);
6664 } else { 6671 } else {
6665 dasm_put(Dst, 3531); 6672 dasm_put(Dst, 3538);
6666 } 6673 }
6667 dasm_put(Dst, 3533); 6674 dasm_put(Dst, 3540);
6668 break; 6675 break;
6669 6676
6670 /* -- Unary test and copy ops ------------------------------------------- */ 6677 /* -- Unary test and copy ops ------------------------------------------- */
6671 6678
6672 case BC_ISTC: case BC_ISFC: case BC_IST: case BC_ISF: 6679 case BC_ISTC: case BC_ISFC: case BC_IST: case BC_ISF:
6673 dasm_put(Dst, 3540, -LJ_TTRUE); 6680 dasm_put(Dst, 3547, -LJ_TTRUE);
6674 if (op == BC_ISTC || op == BC_IST) { 6681 if (op == BC_ISTC || op == BC_IST) {
6675 dasm_put(Dst, 3548); 6682 dasm_put(Dst, 3555);
6676 if (op == BC_ISTC) { 6683 if (op == BC_ISTC) {
6677 dasm_put(Dst, 3550); 6684 dasm_put(Dst, 3557);
6678 } 6685 }
6679 } else { 6686 } else {
6680 dasm_put(Dst, 3552); 6687 dasm_put(Dst, 3559);
6681 if (op == BC_ISFC) { 6688 if (op == BC_ISFC) {
6682 dasm_put(Dst, 3554); 6689 dasm_put(Dst, 3561);
6683 } 6690 }
6684 } 6691 }
6685 dasm_put(Dst, 3556); 6692 dasm_put(Dst, 3563);
6686 break; 6693 break;
6687 6694
6688 /* -- Unary ops --------------------------------------------------------- */ 6695 /* -- Unary ops --------------------------------------------------------- */
6689 6696
6690 case BC_MOV: 6697 case BC_MOV:
6691 dasm_put(Dst, 3563); 6698 dasm_put(Dst, 3570);
6692 break; 6699 break;
6693 case BC_NOT: 6700 case BC_NOT:
6694 dasm_put(Dst, 3573, -LJ_TTRUE, ~LJ_TFALSE, ~LJ_TTRUE); 6701 dasm_put(Dst, 3580, -LJ_TTRUE, ~LJ_TFALSE, ~LJ_TTRUE);
6695 break; 6702 break;
6696 case BC_UNM: 6703 case BC_UNM:
6697 dasm_put(Dst, 3590, -LJ_TISNUM); 6704 dasm_put(Dst, 3597, -LJ_TISNUM);
6698 break; 6705 break;
6699 case BC_LEN: 6706 case BC_LEN:
6700 dasm_put(Dst, 3616, -LJ_TSTR, Dt5(->len), ~LJ_TISNUM, -LJ_TTAB); 6707 dasm_put(Dst, 3623, -LJ_TSTR, Dt5(->len), ~LJ_TISNUM, -LJ_TTAB);
6701#ifdef LUAJIT_ENABLE_LUA52COMPAT 6708#ifdef LUAJIT_ENABLE_LUA52COMPAT
6702 dasm_put(Dst, 3640, Dt6(->metatable)); 6709 dasm_put(Dst, 3647, Dt6(->metatable));
6703#endif 6710#endif
6704 dasm_put(Dst, 3647); 6711 dasm_put(Dst, 3654);
6705 if (LJ_TARGET_OSX) { 6712 if (LJ_TARGET_OSX) {
6706 dasm_put(Dst, 3649); 6713 dasm_put(Dst, 3656);
6707 } 6714 }
6708 dasm_put(Dst, 3651); 6715 dasm_put(Dst, 3658);
6709 if (LJ_TARGET_OSX) { 6716 if (LJ_TARGET_OSX) {
6710 dasm_put(Dst, 3654); 6717 dasm_put(Dst, 3661);
6711 } 6718 }
6712 dasm_put(Dst, 3656); 6719 dasm_put(Dst, 3663);
6713#ifdef LUAJIT_ENABLE_LUA52COMPAT 6720#ifdef LUAJIT_ENABLE_LUA52COMPAT
6714 dasm_put(Dst, 3659, Dt6(->nomm), 1<<MM_len); 6721 dasm_put(Dst, 3666, Dt6(->nomm), 1<<MM_len);
6715#endif 6722#endif
6716 break; 6723 break;
6717 6724
@@ -6719,403 +6726,403 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop)
6719 6726
6720 6727
6721 case BC_ADDVN: case BC_ADDNV: case BC_ADDVV: 6728 case BC_ADDVN: case BC_ADDNV: case BC_ADDVV:
6722 dasm_put(Dst, 3669); 6729 dasm_put(Dst, 3676);
6723 vk = ((int)op - BC_ADDVN) / (BC_ADDNV-BC_ADDVN); 6730 vk = ((int)op - BC_ADDVN) / (BC_ADDNV-BC_ADDVN);
6724 switch (vk) { 6731 switch (vk) {
6725 case 0: 6732 case 0:
6726 dasm_put(Dst, 3672); 6733 dasm_put(Dst, 3679);
6727 break; 6734 break;
6728 case 1: 6735 case 1:
6729 dasm_put(Dst, 3675); 6736 dasm_put(Dst, 3682);
6730 break; 6737 break;
6731 default: 6738 default:
6732 dasm_put(Dst, 3678); 6739 dasm_put(Dst, 3685);
6733 break; 6740 break;
6734 } 6741 }
6735 dasm_put(Dst, 3681); 6742 dasm_put(Dst, 3688);
6736 if (vk == 1) { 6743 if (vk == 1) {
6737 dasm_put(Dst, 3683, -LJ_TISNUM, -LJ_TISNUM); 6744 dasm_put(Dst, 3690, -LJ_TISNUM, -LJ_TISNUM);
6738 } else { 6745 } else {
6739 dasm_put(Dst, 3688, -LJ_TISNUM, -LJ_TISNUM); 6746 dasm_put(Dst, 3695, -LJ_TISNUM, -LJ_TISNUM);
6740 } 6747 }
6741 dasm_put(Dst, 3693); 6748 dasm_put(Dst, 3700);
6742 switch (vk) { 6749 switch (vk) {
6743 case 0: 6750 case 0:
6744 dasm_put(Dst, 3697); 6751 dasm_put(Dst, 3704);
6745 break; 6752 break;
6746 case 1: 6753 case 1:
6747 dasm_put(Dst, 3700); 6754 dasm_put(Dst, 3707);
6748 break; 6755 break;
6749 default: 6756 default:
6750 dasm_put(Dst, 3703); 6757 dasm_put(Dst, 3710);
6751 break; 6758 break;
6752 } 6759 }
6753 dasm_put(Dst, 3706); 6760 dasm_put(Dst, 3713);
6754 switch (vk) { 6761 switch (vk) {
6755 case 0: 6762 case 0:
6756 if (vk == 1) { 6763 if (vk == 1) {
6757 dasm_put(Dst, 3715, -LJ_TISNUM, -LJ_TISNUM); 6764 dasm_put(Dst, 3722, -LJ_TISNUM, -LJ_TISNUM);
6758 } else { 6765 } else {
6759 dasm_put(Dst, 3720, -LJ_TISNUM, -LJ_TISNUM); 6766 dasm_put(Dst, 3727, -LJ_TISNUM, -LJ_TISNUM);
6760 } 6767 }
6761 dasm_put(Dst, 3725); 6768 dasm_put(Dst, 3732);
6762 break; 6769 break;
6763 case 1: 6770 case 1:
6764 if (vk == 1) { 6771 if (vk == 1) {
6765 dasm_put(Dst, 3728, -LJ_TISNUM, -LJ_TISNUM); 6772 dasm_put(Dst, 3735, -LJ_TISNUM, -LJ_TISNUM);
6766 } else { 6773 } else {
6767 dasm_put(Dst, 3733, -LJ_TISNUM, -LJ_TISNUM); 6774 dasm_put(Dst, 3740, -LJ_TISNUM, -LJ_TISNUM);
6768 } 6775 }
6769 dasm_put(Dst, 3738); 6776 dasm_put(Dst, 3745);
6770 break; 6777 break;
6771 default: 6778 default:
6772 if (vk == 1) { 6779 if (vk == 1) {
6773 dasm_put(Dst, 3741, -LJ_TISNUM, -LJ_TISNUM); 6780 dasm_put(Dst, 3748, -LJ_TISNUM, -LJ_TISNUM);
6774 } else { 6781 } else {
6775 dasm_put(Dst, 3746, -LJ_TISNUM, -LJ_TISNUM); 6782 dasm_put(Dst, 3753, -LJ_TISNUM, -LJ_TISNUM);
6776 } 6783 }
6777 dasm_put(Dst, 3751); 6784 dasm_put(Dst, 3758);
6778 break; 6785 break;
6779 } 6786 }
6780 dasm_put(Dst, 3754); 6787 dasm_put(Dst, 3761);
6781 break; 6788 break;
6782 case BC_SUBVN: case BC_SUBNV: case BC_SUBVV: 6789 case BC_SUBVN: case BC_SUBNV: case BC_SUBVV:
6783 dasm_put(Dst, 3760); 6790 dasm_put(Dst, 3767);
6784 vk = ((int)op - BC_ADDVN) / (BC_ADDNV-BC_ADDVN); 6791 vk = ((int)op - BC_ADDVN) / (BC_ADDNV-BC_ADDVN);
6785 switch (vk) { 6792 switch (vk) {
6786 case 0: 6793 case 0:
6787 dasm_put(Dst, 3763); 6794 dasm_put(Dst, 3770);
6788 break; 6795 break;
6789 case 1: 6796 case 1:
6790 dasm_put(Dst, 3766); 6797 dasm_put(Dst, 3773);
6791 break; 6798 break;
6792 default: 6799 default:
6793 dasm_put(Dst, 3769); 6800 dasm_put(Dst, 3776);
6794 break; 6801 break;
6795 } 6802 }
6796 dasm_put(Dst, 3772); 6803 dasm_put(Dst, 3779);
6797 if (vk == 1) { 6804 if (vk == 1) {
6798 dasm_put(Dst, 3774, -LJ_TISNUM, -LJ_TISNUM); 6805 dasm_put(Dst, 3781, -LJ_TISNUM, -LJ_TISNUM);
6799 } else { 6806 } else {
6800 dasm_put(Dst, 3779, -LJ_TISNUM, -LJ_TISNUM); 6807 dasm_put(Dst, 3786, -LJ_TISNUM, -LJ_TISNUM);
6801 } 6808 }
6802 dasm_put(Dst, 3784); 6809 dasm_put(Dst, 3791);
6803 switch (vk) { 6810 switch (vk) {
6804 case 0: 6811 case 0:
6805 dasm_put(Dst, 3788); 6812 dasm_put(Dst, 3795);
6806 break; 6813 break;
6807 case 1: 6814 case 1:
6808 dasm_put(Dst, 3791); 6815 dasm_put(Dst, 3798);
6809 break; 6816 break;
6810 default: 6817 default:
6811 dasm_put(Dst, 3794); 6818 dasm_put(Dst, 3801);
6812 break; 6819 break;
6813 } 6820 }
6814 dasm_put(Dst, 3797); 6821 dasm_put(Dst, 3804);
6815 switch (vk) { 6822 switch (vk) {
6816 case 0: 6823 case 0:
6817 if (vk == 1) { 6824 if (vk == 1) {
6818 dasm_put(Dst, 3806, -LJ_TISNUM, -LJ_TISNUM); 6825 dasm_put(Dst, 3813, -LJ_TISNUM, -LJ_TISNUM);
6819 } else { 6826 } else {
6820 dasm_put(Dst, 3811, -LJ_TISNUM, -LJ_TISNUM); 6827 dasm_put(Dst, 3818, -LJ_TISNUM, -LJ_TISNUM);
6821 } 6828 }
6822 dasm_put(Dst, 3816); 6829 dasm_put(Dst, 3823);
6823 break; 6830 break;
6824 case 1: 6831 case 1:
6825 if (vk == 1) { 6832 if (vk == 1) {
6826 dasm_put(Dst, 3819, -LJ_TISNUM, -LJ_TISNUM); 6833 dasm_put(Dst, 3826, -LJ_TISNUM, -LJ_TISNUM);
6827 } else { 6834 } else {
6828 dasm_put(Dst, 3824, -LJ_TISNUM, -LJ_TISNUM); 6835 dasm_put(Dst, 3831, -LJ_TISNUM, -LJ_TISNUM);
6829 } 6836 }
6830 dasm_put(Dst, 3829); 6837 dasm_put(Dst, 3836);
6831 break; 6838 break;
6832 default: 6839 default:
6833 if (vk == 1) { 6840 if (vk == 1) {
6834 dasm_put(Dst, 3832, -LJ_TISNUM, -LJ_TISNUM); 6841 dasm_put(Dst, 3839, -LJ_TISNUM, -LJ_TISNUM);
6835 } else { 6842 } else {
6836 dasm_put(Dst, 3837, -LJ_TISNUM, -LJ_TISNUM); 6843 dasm_put(Dst, 3844, -LJ_TISNUM, -LJ_TISNUM);
6837 } 6844 }
6838 dasm_put(Dst, 3842); 6845 dasm_put(Dst, 3849);
6839 break; 6846 break;
6840 } 6847 }
6841 dasm_put(Dst, 3845); 6848 dasm_put(Dst, 3852);
6842 break; 6849 break;
6843 case BC_MULVN: case BC_MULNV: case BC_MULVV: 6850 case BC_MULVN: case BC_MULNV: case BC_MULVV:
6844 dasm_put(Dst, 3851); 6851 dasm_put(Dst, 3858);
6845 vk = ((int)op - BC_ADDVN) / (BC_ADDNV-BC_ADDVN); 6852 vk = ((int)op - BC_ADDVN) / (BC_ADDNV-BC_ADDVN);
6846 switch (vk) { 6853 switch (vk) {
6847 case 0: 6854 case 0:
6848 dasm_put(Dst, 3854); 6855 dasm_put(Dst, 3861);
6849 break; 6856 break;
6850 case 1: 6857 case 1:
6851 dasm_put(Dst, 3857); 6858 dasm_put(Dst, 3864);
6852 break; 6859 break;
6853 default: 6860 default:
6854 dasm_put(Dst, 3860); 6861 dasm_put(Dst, 3867);
6855 break; 6862 break;
6856 } 6863 }
6857 dasm_put(Dst, 3863); 6864 dasm_put(Dst, 3870);
6858 if (vk == 1) { 6865 if (vk == 1) {
6859 dasm_put(Dst, 3865, -LJ_TISNUM, -LJ_TISNUM); 6866 dasm_put(Dst, 3872, -LJ_TISNUM, -LJ_TISNUM);
6860 } else { 6867 } else {
6861 dasm_put(Dst, 3870, -LJ_TISNUM, -LJ_TISNUM); 6868 dasm_put(Dst, 3877, -LJ_TISNUM, -LJ_TISNUM);
6862 } 6869 }
6863 dasm_put(Dst, 3875); 6870 dasm_put(Dst, 3882);
6864 switch (vk) { 6871 switch (vk) {
6865 case 0: 6872 case 0:
6866 dasm_put(Dst, 3880); 6873 dasm_put(Dst, 3887);
6867 break; 6874 break;
6868 case 1: 6875 case 1:
6869 dasm_put(Dst, 3883); 6876 dasm_put(Dst, 3890);
6870 break; 6877 break;
6871 default: 6878 default:
6872 dasm_put(Dst, 3886); 6879 dasm_put(Dst, 3893);
6873 break; 6880 break;
6874 } 6881 }
6875 dasm_put(Dst, 3889); 6882 dasm_put(Dst, 3896);
6876 switch (vk) { 6883 switch (vk) {
6877 case 0: 6884 case 0:
6878 if (vk == 1) { 6885 if (vk == 1) {
6879 dasm_put(Dst, 3898, -LJ_TISNUM, -LJ_TISNUM); 6886 dasm_put(Dst, 3905, -LJ_TISNUM, -LJ_TISNUM);
6880 } else { 6887 } else {
6881 dasm_put(Dst, 3903, -LJ_TISNUM, -LJ_TISNUM); 6888 dasm_put(Dst, 3910, -LJ_TISNUM, -LJ_TISNUM);
6882 } 6889 }
6883 dasm_put(Dst, 3908); 6890 dasm_put(Dst, 3915);
6884 break; 6891 break;
6885 case 1: 6892 case 1:
6886 if (vk == 1) { 6893 if (vk == 1) {
6887 dasm_put(Dst, 3911, -LJ_TISNUM, -LJ_TISNUM); 6894 dasm_put(Dst, 3918, -LJ_TISNUM, -LJ_TISNUM);
6888 } else { 6895 } else {
6889 dasm_put(Dst, 3916, -LJ_TISNUM, -LJ_TISNUM); 6896 dasm_put(Dst, 3923, -LJ_TISNUM, -LJ_TISNUM);
6890 } 6897 }
6891 dasm_put(Dst, 3921); 6898 dasm_put(Dst, 3928);
6892 break; 6899 break;
6893 default: 6900 default:
6894 if (vk == 1) { 6901 if (vk == 1) {
6895 dasm_put(Dst, 3924, -LJ_TISNUM, -LJ_TISNUM); 6902 dasm_put(Dst, 3931, -LJ_TISNUM, -LJ_TISNUM);
6896 } else { 6903 } else {
6897 dasm_put(Dst, 3929, -LJ_TISNUM, -LJ_TISNUM); 6904 dasm_put(Dst, 3936, -LJ_TISNUM, -LJ_TISNUM);
6898 } 6905 }
6899 dasm_put(Dst, 3934); 6906 dasm_put(Dst, 3941);
6900 break; 6907 break;
6901 } 6908 }
6902 dasm_put(Dst, 3937); 6909 dasm_put(Dst, 3944);
6903 break; 6910 break;
6904 case BC_DIVVN: case BC_DIVNV: case BC_DIVVV: 6911 case BC_DIVVN: case BC_DIVNV: case BC_DIVVV:
6905 dasm_put(Dst, 3943); 6912 dasm_put(Dst, 3950);
6906 vk = ((int)op - BC_ADDVN) / (BC_ADDNV-BC_ADDVN); 6913 vk = ((int)op - BC_ADDVN) / (BC_ADDNV-BC_ADDVN);
6907 switch (vk) { 6914 switch (vk) {
6908 case 0: 6915 case 0:
6909 dasm_put(Dst, 3946); 6916 dasm_put(Dst, 3953);
6910 break; 6917 break;
6911 case 1: 6918 case 1:
6912 dasm_put(Dst, 3949); 6919 dasm_put(Dst, 3956);
6913 break; 6920 break;
6914 default: 6921 default:
6915 dasm_put(Dst, 3952); 6922 dasm_put(Dst, 3959);
6916 break; 6923 break;
6917 } 6924 }
6918 switch (vk) { 6925 switch (vk) {
6919 case 0: 6926 case 0:
6920 if (vk == 1) { 6927 if (vk == 1) {
6921 dasm_put(Dst, 3955, -LJ_TISNUM, -LJ_TISNUM); 6928 dasm_put(Dst, 3962, -LJ_TISNUM, -LJ_TISNUM);
6922 } else { 6929 } else {
6923 dasm_put(Dst, 3960, -LJ_TISNUM, -LJ_TISNUM); 6930 dasm_put(Dst, 3967, -LJ_TISNUM, -LJ_TISNUM);
6924 } 6931 }
6925 dasm_put(Dst, 3965); 6932 dasm_put(Dst, 3972);
6926 break; 6933 break;
6927 case 1: 6934 case 1:
6928 if (vk == 1) { 6935 if (vk == 1) {
6929 dasm_put(Dst, 3968, -LJ_TISNUM, -LJ_TISNUM); 6936 dasm_put(Dst, 3975, -LJ_TISNUM, -LJ_TISNUM);
6930 } else { 6937 } else {
6931 dasm_put(Dst, 3973, -LJ_TISNUM, -LJ_TISNUM); 6938 dasm_put(Dst, 3980, -LJ_TISNUM, -LJ_TISNUM);
6932 } 6939 }
6933 dasm_put(Dst, 3978); 6940 dasm_put(Dst, 3985);
6934 break; 6941 break;
6935 default: 6942 default:
6936 if (vk == 1) { 6943 if (vk == 1) {
6937 dasm_put(Dst, 3981, -LJ_TISNUM, -LJ_TISNUM); 6944 dasm_put(Dst, 3988, -LJ_TISNUM, -LJ_TISNUM);
6938 } else { 6945 } else {
6939 dasm_put(Dst, 3986, -LJ_TISNUM, -LJ_TISNUM); 6946 dasm_put(Dst, 3993, -LJ_TISNUM, -LJ_TISNUM);
6940 } 6947 }
6941 dasm_put(Dst, 3991); 6948 dasm_put(Dst, 3998);
6942 break; 6949 break;
6943 } 6950 }
6944 dasm_put(Dst, 3994); 6951 dasm_put(Dst, 4001);
6945 break; 6952 break;
6946 case BC_MODVN: case BC_MODNV: case BC_MODVV: 6953 case BC_MODVN: case BC_MODNV: case BC_MODVV:
6947 dasm_put(Dst, 4004); 6954 dasm_put(Dst, 4011);
6948 vk = ((int)op - BC_ADDVN) / (BC_ADDNV-BC_ADDVN); 6955 vk = ((int)op - BC_ADDVN) / (BC_ADDNV-BC_ADDVN);
6949 switch (vk) { 6956 switch (vk) {
6950 case 0: 6957 case 0:
6951 dasm_put(Dst, 4007); 6958 dasm_put(Dst, 4014);
6952 break; 6959 break;
6953 case 1: 6960 case 1:
6954 dasm_put(Dst, 4010); 6961 dasm_put(Dst, 4017);
6955 break; 6962 break;
6956 default: 6963 default:
6957 dasm_put(Dst, 4013); 6964 dasm_put(Dst, 4020);
6958 break; 6965 break;
6959 } 6966 }
6960 if (vk == 1) { 6967 if (vk == 1) {
6961 dasm_put(Dst, 4016, -LJ_TISNUM, -LJ_TISNUM); 6968 dasm_put(Dst, 4023, -LJ_TISNUM, -LJ_TISNUM);
6962 } else { 6969 } else {
6963 dasm_put(Dst, 4021, -LJ_TISNUM, -LJ_TISNUM); 6970 dasm_put(Dst, 4028, -LJ_TISNUM, -LJ_TISNUM);
6964 } 6971 }
6965 dasm_put(Dst, 4026); 6972 dasm_put(Dst, 4033);
6966 switch (vk) { 6973 switch (vk) {
6967 case 0: 6974 case 0:
6968 dasm_put(Dst, 4030); 6975 dasm_put(Dst, 4037);
6969 break; 6976 break;
6970 case 1: 6977 case 1:
6971 dasm_put(Dst, 4033); 6978 dasm_put(Dst, 4040);
6972 break; 6979 break;
6973 default: 6980 default:
6974 dasm_put(Dst, 4036); 6981 dasm_put(Dst, 4043);
6975 break; 6982 break;
6976 } 6983 }
6977 dasm_put(Dst, 4039, ~LJ_TISNUM); 6984 dasm_put(Dst, 4046, ~LJ_TISNUM);
6978 switch (vk) { 6985 switch (vk) {
6979 case 0: 6986 case 0:
6980 if (vk == 1) { 6987 if (vk == 1) {
6981 dasm_put(Dst, 4053, -LJ_TISNUM, -LJ_TISNUM); 6988 dasm_put(Dst, 4060, -LJ_TISNUM, -LJ_TISNUM);
6982 } else { 6989 } else {
6983 dasm_put(Dst, 4058, -LJ_TISNUM, -LJ_TISNUM); 6990 dasm_put(Dst, 4065, -LJ_TISNUM, -LJ_TISNUM);
6984 } 6991 }
6985 dasm_put(Dst, 4063); 6992 dasm_put(Dst, 4070);
6986 break; 6993 break;
6987 case 1: 6994 case 1:
6988 if (vk == 1) { 6995 if (vk == 1) {
6989 dasm_put(Dst, 4066, -LJ_TISNUM, -LJ_TISNUM); 6996 dasm_put(Dst, 4073, -LJ_TISNUM, -LJ_TISNUM);
6990 } else { 6997 } else {
6991 dasm_put(Dst, 4071, -LJ_TISNUM, -LJ_TISNUM); 6998 dasm_put(Dst, 4078, -LJ_TISNUM, -LJ_TISNUM);
6992 } 6999 }
6993 dasm_put(Dst, 4076); 7000 dasm_put(Dst, 4083);
6994 break; 7001 break;
6995 default: 7002 default:
6996 if (vk == 1) { 7003 if (vk == 1) {
6997 dasm_put(Dst, 4079, -LJ_TISNUM, -LJ_TISNUM); 7004 dasm_put(Dst, 4086, -LJ_TISNUM, -LJ_TISNUM);
6998 } else { 7005 } else {
6999 dasm_put(Dst, 4084, -LJ_TISNUM, -LJ_TISNUM); 7006 dasm_put(Dst, 4091, -LJ_TISNUM, -LJ_TISNUM);
7000 } 7007 }
7001 dasm_put(Dst, 4089); 7008 dasm_put(Dst, 4096);
7002 break; 7009 break;
7003 } 7010 }
7004 dasm_put(Dst, 4092); 7011 dasm_put(Dst, 4099);
7005 break; 7012 break;
7006 case BC_POW: 7013 case BC_POW:
7007 dasm_put(Dst, 4097); 7014 dasm_put(Dst, 4104);
7008 vk = ((int)op - BC_ADDVN) / (BC_ADDNV-BC_ADDVN); 7015 vk = ((int)op - BC_ADDVN) / (BC_ADDNV-BC_ADDVN);
7009 switch (vk) { 7016 switch (vk) {
7010 case 0: 7017 case 0:
7011 dasm_put(Dst, 4100); 7018 dasm_put(Dst, 4107);
7012 break; 7019 break;
7013 case 1: 7020 case 1:
7014 dasm_put(Dst, 4103); 7021 dasm_put(Dst, 4110);
7015 break; 7022 break;
7016 default: 7023 default:
7017 dasm_put(Dst, 4106); 7024 dasm_put(Dst, 4113);
7018 break; 7025 break;
7019 } 7026 }
7020 switch (vk) { 7027 switch (vk) {
7021 case 0: 7028 case 0:
7022 if (vk == 1) { 7029 if (vk == 1) {
7023 dasm_put(Dst, 4109, -LJ_TISNUM, -LJ_TISNUM); 7030 dasm_put(Dst, 4116, -LJ_TISNUM, -LJ_TISNUM);
7024 } else { 7031 } else {
7025 dasm_put(Dst, 4114, -LJ_TISNUM, -LJ_TISNUM); 7032 dasm_put(Dst, 4121, -LJ_TISNUM, -LJ_TISNUM);
7026 } 7033 }
7027 dasm_put(Dst, 4119); 7034 dasm_put(Dst, 4126);
7028 break; 7035 break;
7029 case 1: 7036 case 1:
7030 if (vk == 1) { 7037 if (vk == 1) {
7031 dasm_put(Dst, 4122, -LJ_TISNUM, -LJ_TISNUM); 7038 dasm_put(Dst, 4129, -LJ_TISNUM, -LJ_TISNUM);
7032 } else { 7039 } else {
7033 dasm_put(Dst, 4127, -LJ_TISNUM, -LJ_TISNUM); 7040 dasm_put(Dst, 4134, -LJ_TISNUM, -LJ_TISNUM);
7034 } 7041 }
7035 dasm_put(Dst, 4132); 7042 dasm_put(Dst, 4139);
7036 break; 7043 break;
7037 default: 7044 default:
7038 if (vk == 1) { 7045 if (vk == 1) {
7039 dasm_put(Dst, 4135, -LJ_TISNUM, -LJ_TISNUM); 7046 dasm_put(Dst, 4142, -LJ_TISNUM, -LJ_TISNUM);
7040 } else { 7047 } else {
7041 dasm_put(Dst, 4140, -LJ_TISNUM, -LJ_TISNUM); 7048 dasm_put(Dst, 4147, -LJ_TISNUM, -LJ_TISNUM);
7042 } 7049 }
7043 dasm_put(Dst, 4145); 7050 dasm_put(Dst, 4152);
7044 break; 7051 break;
7045 } 7052 }
7046 if (LJ_TARGET_OSX) { 7053 if (LJ_TARGET_OSX) {
7047 dasm_put(Dst, 4148); 7054 dasm_put(Dst, 4155);
7048 } 7055 }
7049 dasm_put(Dst, 4150); 7056 dasm_put(Dst, 4157);
7050 if (LJ_TARGET_OSX) { 7057 if (LJ_TARGET_OSX) {
7051 dasm_put(Dst, 4153); 7058 dasm_put(Dst, 4160);
7052 } 7059 }
7053 dasm_put(Dst, 4155); 7060 dasm_put(Dst, 4162);
7054 break; 7061 break;
7055 7062
7056 case BC_CAT: 7063 case BC_CAT:
7057 dasm_put(Dst, 4163, Dt1(->base), Dt1(->base)); 7064 dasm_put(Dst, 4170, Dt1(->base), Dt1(->base));
7058 break; 7065 break;
7059 7066
7060 /* -- Constant ops ------------------------------------------------------ */ 7067 /* -- Constant ops ------------------------------------------------------ */
7061 7068
7062 case BC_KSTR: 7069 case BC_KSTR:
7063 dasm_put(Dst, 4189, ~LJ_TSTR); 7070 dasm_put(Dst, 4196, ~LJ_TSTR);
7064 break; 7071 break;
7065 case BC_KCDATA: 7072 case BC_KCDATA:
7066#if LJ_HASFFI 7073#if LJ_HASFFI
7067 dasm_put(Dst, 4201, ~LJ_TCDATA); 7074 dasm_put(Dst, 4208, ~LJ_TCDATA);
7068#endif 7075#endif
7069 break; 7076 break;
7070 case BC_KSHORT: 7077 case BC_KSHORT:
7071 dasm_put(Dst, 4213, ~LJ_TISNUM); 7078 dasm_put(Dst, 4220, ~LJ_TISNUM);
7072 break; 7079 break;
7073 case BC_KNUM: 7080 case BC_KNUM:
7074 dasm_put(Dst, 4224); 7081 dasm_put(Dst, 4231);
7075 break; 7082 break;
7076 case BC_KPRI: 7083 case BC_KPRI:
7077 dasm_put(Dst, 4234); 7084 dasm_put(Dst, 4241);
7078 break; 7085 break;
7079 case BC_KNIL: 7086 case BC_KNIL:
7080 dasm_put(Dst, 4244, ~LJ_TNIL); 7087 dasm_put(Dst, 4251, ~LJ_TNIL);
7081 break; 7088 break;
7082 7089
7083 /* -- Upvalue and function ops ------------------------------------------ */ 7090 /* -- Upvalue and function ops ------------------------------------------ */
7084 7091
7085 case BC_UGET: 7092 case BC_UGET:
7086 dasm_put(Dst, 4263, offsetof(GCfuncL, uvptr), DtA(->v)); 7093 dasm_put(Dst, 4270, offsetof(GCfuncL, uvptr), DtA(->v));
7087 break; 7094 break;
7088 case BC_USETV: 7095 case BC_USETV:
7089 dasm_put(Dst, 4279, offsetof(GCfuncL, uvptr), DtA(->marked), DtA(->closed), DtA(->v), LJ_GC_BLACK, -LJ_TISGCV, -(LJ_TISNUM - LJ_TISGCV), Dt4(->gch.marked), -GG_DISP2G, LJ_GC_WHITES); 7096 dasm_put(Dst, 4286, offsetof(GCfuncL, uvptr), DtA(->marked), DtA(->closed), DtA(->v), LJ_GC_BLACK, -LJ_TISGCV, -(LJ_TISNUM - LJ_TISGCV), Dt4(->gch.marked), -GG_DISP2G, LJ_GC_WHITES);
7090 if (LJ_TARGET_OSX) { 7097 if (LJ_TARGET_OSX) {
7091 dasm_put(Dst, 4319);
7092 } else {
7093 dasm_put(Dst, 4326); 7098 dasm_put(Dst, 4326);
7099 } else {
7100 dasm_put(Dst, 4333);
7094 } 7101 }
7095 dasm_put(Dst, 4329); 7102 dasm_put(Dst, 4336);
7096 break; 7103 break;
7097 case BC_USETS: 7104 case BC_USETS:
7098 dasm_put(Dst, 4332, offsetof(GCfuncL, uvptr), ~LJ_TSTR, DtA(->marked), DtA(->v), DtA(->closed), LJ_GC_BLACK, Dt5(->marked), LJ_GC_WHITES, -GG_DISP2G); 7105 dasm_put(Dst, 4339, offsetof(GCfuncL, uvptr), ~LJ_TSTR, DtA(->marked), DtA(->v), DtA(->closed), LJ_GC_BLACK, Dt5(->marked), LJ_GC_WHITES, -GG_DISP2G);
7099 if (LJ_TARGET_OSX) { 7106 if (LJ_TARGET_OSX) {
7100 dasm_put(Dst, 4368);
7101 } else {
7102 dasm_put(Dst, 4375); 7107 dasm_put(Dst, 4375);
7108 } else {
7109 dasm_put(Dst, 4382);
7103 } 7110 }
7104 dasm_put(Dst, 4378); 7111 dasm_put(Dst, 4385);
7105 break; 7112 break;
7106 case BC_USETN: 7113 case BC_USETN:
7107 dasm_put(Dst, 4381, offsetof(GCfuncL, uvptr), DtA(->v)); 7114 dasm_put(Dst, 4388, offsetof(GCfuncL, uvptr), DtA(->v));
7108 break; 7115 break;
7109 case BC_USETP: 7116 case BC_USETP:
7110 dasm_put(Dst, 4398, offsetof(GCfuncL, uvptr), DtA(->v)); 7117 dasm_put(Dst, 4405, offsetof(GCfuncL, uvptr), DtA(->v));
7111 break; 7118 break;
7112 7119
7113 case BC_UCLO: 7120 case BC_UCLO:
7114 dasm_put(Dst, 4414, Dt1(->openupval), Dt1(->base), Dt1(->base)); 7121 dasm_put(Dst, 4421, Dt1(->openupval), Dt1(->base), Dt1(->base));
7115 break; 7122 break;
7116 7123
7117 case BC_FNEW: 7124 case BC_FNEW:
7118 dasm_put(Dst, 4437, Dt1(->base), Dt1(->base), ~LJ_TFUNC); 7125 dasm_put(Dst, 4444, Dt1(->base), Dt1(->base), ~LJ_TFUNC);
7119 break; 7126 break;
7120 7127
7121 /* -- Table ops --------------------------------------------------------- */ 7128 /* -- Table ops --------------------------------------------------------- */
@@ -7123,115 +7130,115 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop)
7123 case BC_TNEW: 7130 case BC_TNEW:
7124 case BC_TDUP: 7131 case BC_TDUP:
7125 if (op == BC_TDUP) { 7132 if (op == BC_TDUP) {
7126 dasm_put(Dst, 4458); 7133 dasm_put(Dst, 4465);
7127 } 7134 }
7128 dasm_put(Dst, 4460, DISPATCH_GL(gc.total), DISPATCH_GL(gc.threshold), Dt1(->base)); 7135 dasm_put(Dst, 4467, DISPATCH_GL(gc.total), DISPATCH_GL(gc.threshold), Dt1(->base));
7129 if (op == BC_TNEW) { 7136 if (op == BC_TNEW) {
7130 dasm_put(Dst, 4473); 7137 dasm_put(Dst, 4480);
7131 } else { 7138 } else {
7132 dasm_put(Dst, 4482); 7139 dasm_put(Dst, 4489);
7133 } 7140 }
7134 dasm_put(Dst, 4486, Dt1(->base), ~LJ_TTAB); 7141 dasm_put(Dst, 4493, Dt1(->base), ~LJ_TTAB);
7135 break; 7142 break;
7136 7143
7137 case BC_GGET: 7144 case BC_GGET:
7138 case BC_GSET: 7145 case BC_GSET:
7139 dasm_put(Dst, 4504, Dt7(->env)); 7146 dasm_put(Dst, 4511, Dt7(->env));
7140 if (op == BC_GGET) { 7147 if (op == BC_GGET) {
7141 dasm_put(Dst, 4510); 7148 dasm_put(Dst, 4517);
7142 } else { 7149 } else {
7143 dasm_put(Dst, 4513); 7150 dasm_put(Dst, 4520);
7144 } 7151 }
7145 break; 7152 break;
7146 7153
7147 case BC_TGETV: 7154 case BC_TGETV:
7148 dasm_put(Dst, 4516, -LJ_TTAB, -LJ_TISNUM, Dt6(->array), Dt6(->asize), -LJ_TNIL, Dt6(->metatable), Dt6(->nomm), 1<<MM_index, -LJ_TSTR); 7155 dasm_put(Dst, 4523, -LJ_TTAB, -LJ_TISNUM, Dt6(->array), Dt6(->asize), -LJ_TNIL, Dt6(->metatable), Dt6(->nomm), 1<<MM_index, -LJ_TSTR);
7149 break; 7156 break;
7150 case BC_TGETS: 7157 case BC_TGETS:
7151 dasm_put(Dst, 4573, -LJ_TTAB, Dt6(->hmask), Dt5(->hash), Dt6(->node), DtB(->key), DtB(->val), DtB(->next), -LJ_TSTR, -LJ_TNIL, Dt6(->metatable), ~LJ_TNIL, Dt6(->nomm)); 7158 dasm_put(Dst, 4580, -LJ_TTAB, Dt6(->hmask), Dt5(->hash), Dt6(->node), DtB(->key), DtB(->val), DtB(->next), -LJ_TSTR, -LJ_TNIL, Dt6(->metatable), ~LJ_TNIL, Dt6(->nomm));
7152 dasm_put(Dst, 4633, 1<<MM_index); 7159 dasm_put(Dst, 4640, 1<<MM_index);
7153 break; 7160 break;
7154 case BC_TGETB: 7161 case BC_TGETB:
7155 dasm_put(Dst, 4640, -LJ_TTAB, Dt6(->asize), Dt6(->array), -LJ_TNIL, Dt6(->metatable), Dt6(->nomm), 1<<MM_index); 7162 dasm_put(Dst, 4647, -LJ_TTAB, Dt6(->asize), Dt6(->array), -LJ_TNIL, Dt6(->metatable), Dt6(->nomm), 1<<MM_index);
7156 break; 7163 break;
7157 7164
7158 case BC_TSETV: 7165 case BC_TSETV:
7159 dasm_put(Dst, 4683, -LJ_TTAB, -LJ_TISNUM, Dt6(->array), Dt6(->asize), -LJ_TNIL, Dt6(->marked), LJ_GC_BLACK, Dt6(->metatable), Dt6(->nomm), 1<<MM_newindex); 7166 dasm_put(Dst, 4690, -LJ_TTAB, -LJ_TISNUM, Dt6(->array), Dt6(->asize), -LJ_TNIL, Dt6(->marked), LJ_GC_BLACK, Dt6(->metatable), Dt6(->nomm), 1<<MM_newindex);
7160 dasm_put(Dst, 4743, DISPATCH_GL(gc.grayagain), LJ_GC_BLACK, DISPATCH_GL(gc.grayagain), Dt6(->marked), Dt6(->gclist), -LJ_TSTR); 7167 dasm_put(Dst, 4750, DISPATCH_GL(gc.grayagain), LJ_GC_BLACK, DISPATCH_GL(gc.grayagain), Dt6(->marked), Dt6(->gclist), -LJ_TSTR);
7161 break; 7168 break;
7162 case BC_TSETS: 7169 case BC_TSETS:
7163 dasm_put(Dst, 4764, -LJ_TTAB, Dt6(->hmask), Dt5(->hash), Dt6(->node), Dt6(->nomm), DtB(->key), DtB(->val.it), DtB(->next), -LJ_TSTR, Dt6(->marked), -LJ_TNIL, LJ_GC_BLACK, DtB(->val)); 7170 dasm_put(Dst, 4771, -LJ_TTAB, Dt6(->hmask), Dt5(->hash), Dt6(->node), Dt6(->nomm), DtB(->key), DtB(->val.it), DtB(->next), -LJ_TSTR, Dt6(->marked), -LJ_TNIL, LJ_GC_BLACK, DtB(->val));
7164 dasm_put(Dst, 4822, Dt6(->metatable), Dt6(->nomm), 1<<MM_newindex, Dt6(->metatable), Dt1(->base), Dt6(->nomm), 1<<MM_newindex, ~LJ_TSTR, Dt1(->base), DISPATCH_GL(gc.grayagain), LJ_GC_BLACK); 7171 dasm_put(Dst, 4829, Dt6(->metatable), Dt6(->nomm), 1<<MM_newindex, Dt6(->metatable), Dt1(->base), Dt6(->nomm), 1<<MM_newindex, ~LJ_TSTR, Dt1(->base), DISPATCH_GL(gc.grayagain), LJ_GC_BLACK);
7165 dasm_put(Dst, 4875, DISPATCH_GL(gc.grayagain), Dt6(->marked), Dt6(->gclist)); 7172 dasm_put(Dst, 4882, DISPATCH_GL(gc.grayagain), Dt6(->marked), Dt6(->gclist));
7166 break; 7173 break;
7167 case BC_TSETB: 7174 case BC_TSETB:
7168 dasm_put(Dst, 4884, -LJ_TTAB, Dt6(->asize), Dt6(->array), -LJ_TNIL, Dt6(->marked), LJ_GC_BLACK, Dt6(->metatable), Dt6(->nomm), 1<<MM_newindex, DISPATCH_GL(gc.grayagain), LJ_GC_BLACK); 7175 dasm_put(Dst, 4891, -LJ_TTAB, Dt6(->asize), Dt6(->array), -LJ_TNIL, Dt6(->marked), LJ_GC_BLACK, Dt6(->metatable), Dt6(->nomm), 1<<MM_newindex, DISPATCH_GL(gc.grayagain), LJ_GC_BLACK);
7169 dasm_put(Dst, 4942, DISPATCH_GL(gc.grayagain), Dt6(->marked), Dt6(->gclist)); 7176 dasm_put(Dst, 4949, DISPATCH_GL(gc.grayagain), Dt6(->marked), Dt6(->gclist));
7170 break; 7177 break;
7171 7178
7172 case BC_TSETM: 7179 case BC_TSETM:
7173 dasm_put(Dst, 4951, Dt6(->asize), Dt6(->array), Dt6(->marked), LJ_GC_BLACK, Dt1(->base)); 7180 dasm_put(Dst, 4958, Dt6(->asize), Dt6(->array), Dt6(->marked), LJ_GC_BLACK, Dt1(->base));
7174 if (LJ_TARGET_OSX) { 7181 if (LJ_TARGET_OSX) {
7175 dasm_put(Dst, 4996, Dt1(->base)); 7182 dasm_put(Dst, 5003, Dt1(->base));
7176 } 7183 }
7177 dasm_put(Dst, 4999, DISPATCH_GL(gc.grayagain), LJ_GC_BLACK, DISPATCH_GL(gc.grayagain), Dt6(->marked), Dt6(->gclist)); 7184 dasm_put(Dst, 5006, DISPATCH_GL(gc.grayagain), LJ_GC_BLACK, DISPATCH_GL(gc.grayagain), Dt6(->marked), Dt6(->gclist));
7178 break; 7185 break;
7179 7186
7180 /* -- Calls and vararg handling ----------------------------------------- */ 7187 /* -- Calls and vararg handling ----------------------------------------- */
7181 7188
7182 case BC_CALLM: 7189 case BC_CALLM:
7183 dasm_put(Dst, 5015); 7190 dasm_put(Dst, 5022);
7184 break; 7191 break;
7185 case BC_CALL: 7192 case BC_CALL:
7186 dasm_put(Dst, 5021, -LJ_TFUNC, Dt7(->field_pc)); 7193 dasm_put(Dst, 5028, -LJ_TFUNC, Dt7(->field_pc));
7187 break; 7194 break;
7188 7195
7189 case BC_CALLMT: 7196 case BC_CALLMT:
7190 dasm_put(Dst, 5041); 7197 dasm_put(Dst, 5048);
7191 break; 7198 break;
7192 case BC_CALLT: 7199 case BC_CALLT:
7193 dasm_put(Dst, 5046, -LJ_TFUNC, Dt7(->ffid), FRAME_TYPE, Dt7(->field_pc), Dt7(->field_pc), PC2PROTO(k), FRAME_VARG, FRAME_TYPEP); 7200 dasm_put(Dst, 5053, -LJ_TFUNC, Dt7(->ffid), FRAME_TYPE, Dt7(->field_pc), Dt7(->field_pc), PC2PROTO(k), FRAME_VARG, FRAME_TYPEP);
7194 dasm_put(Dst, 5107, FRAME_TYPE); 7201 dasm_put(Dst, 5114, FRAME_TYPE);
7195 break; 7202 break;
7196 7203
7197 case BC_ITERC: 7204 case BC_ITERC:
7198 dasm_put(Dst, 5118, -LJ_TFUNC, Dt7(->field_pc)); 7205 dasm_put(Dst, 5125, -LJ_TFUNC, Dt7(->field_pc));
7199 break; 7206 break;
7200 7207
7201 case BC_ITERN: 7208 case BC_ITERN:
7202#if LJ_HASJIT 7209#if LJ_HASJIT
7203#endif 7210#endif
7204 dasm_put(Dst, 5142, Dt6(->asize), Dt6(->array), -LJ_TNIL, ~LJ_TISNUM, Dt6(->hmask), Dt6(->node), DtB(->val), -LJ_TNIL, DtB(->key)); 7211 dasm_put(Dst, 5149, Dt6(->asize), Dt6(->array), -LJ_TNIL, ~LJ_TISNUM, Dt6(->hmask), Dt6(->node), DtB(->val), -LJ_TNIL, DtB(->key));
7205 break; 7212 break;
7206 7213
7207 case BC_ISNEXT: 7214 case BC_ISNEXT:
7208 dasm_put(Dst, 5207, -LJ_TFUNC, Dt8(->ffid), -LJ_TTAB, -LJ_TNIL, FF_next_N, BC_JMP, BC_ITERC); 7215 dasm_put(Dst, 5214, -LJ_TFUNC, Dt8(->ffid), -LJ_TTAB, -LJ_TNIL, FF_next_N, BC_JMP, BC_ITERC);
7209 break; 7216 break;
7210 7217
7211 case BC_VARG: 7218 case BC_VARG:
7212 dasm_put(Dst, 5246, FRAME_VARG, ~LJ_TNIL, Dt1(->maxstack), Dt1(->top), Dt1(->base), Dt1(->base)); 7219 dasm_put(Dst, 5253, FRAME_VARG, ~LJ_TNIL, Dt1(->maxstack), Dt1(->top), Dt1(->base), Dt1(->base));
7213 break; 7220 break;
7214 7221
7215 /* -- Returns ----------------------------------------------------------- */ 7222 /* -- Returns ----------------------------------------------------------- */
7216 7223
7217 case BC_RETM: 7224 case BC_RETM:
7218 dasm_put(Dst, 5318); 7225 dasm_put(Dst, 5325);
7219 break; 7226 break;
7220 7227
7221 case BC_RET: 7228 case BC_RET:
7222 dasm_put(Dst, 5325, FRAME_TYPE, FRAME_VARG, Dt7(->field_pc), PC2PROTO(k), ~LJ_TNIL, FRAME_TYPEP); 7229 dasm_put(Dst, 5332, FRAME_TYPE, FRAME_VARG, Dt7(->field_pc), PC2PROTO(k), ~LJ_TNIL, FRAME_TYPEP);
7223 break; 7230 break;
7224 7231
7225 case BC_RET0: case BC_RET1: 7232 case BC_RET0: case BC_RET1:
7226 dasm_put(Dst, 5390, FRAME_TYPE, FRAME_VARG); 7233 dasm_put(Dst, 5397, FRAME_TYPE, FRAME_VARG);
7227 if (op == BC_RET1) { 7234 if (op == BC_RET1) {
7228 dasm_put(Dst, 5401); 7235 dasm_put(Dst, 5408);
7229 } 7236 }
7230 dasm_put(Dst, 5403); 7237 dasm_put(Dst, 5410);
7231 if (op == BC_RET1) { 7238 if (op == BC_RET1) {
7232 dasm_put(Dst, 5406); 7239 dasm_put(Dst, 5413);
7233 } 7240 }
7234 dasm_put(Dst, 5408, Dt7(->field_pc), PC2PROTO(k), ~LJ_TNIL); 7241 dasm_put(Dst, 5415, Dt7(->field_pc), PC2PROTO(k), ~LJ_TNIL);
7235 break; 7242 break;
7236 7243
7237 /* -- Loops and branches ------------------------------------------------ */ 7244 /* -- Loops and branches ------------------------------------------------ */
@@ -7239,7 +7246,7 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop)
7239 7246
7240 case BC_FORL: 7247 case BC_FORL:
7241#if LJ_HASJIT 7248#if LJ_HASJIT
7242 dasm_put(Dst, 5434, -GG_DISP2HOT, HOTCOUNT_LOOP); 7249 dasm_put(Dst, 5441, -GG_DISP2HOT, HOTCOUNT_LOOP);
7243#endif 7250#endif
7244 break; 7251 break;
7245 7252
@@ -7251,68 +7258,68 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop)
7251 case BC_FORI: 7258 case BC_FORI:
7252 case BC_IFORL: 7259 case BC_IFORL:
7253 vk = (op == BC_IFORL || op == BC_JFORL); 7260 vk = (op == BC_IFORL || op == BC_JFORL);
7254 dasm_put(Dst, 5445); 7261 dasm_put(Dst, 5452);
7255 if (op != BC_JFORL) { 7262 if (op != BC_JFORL) {
7256 dasm_put(Dst, 5447); 7263 dasm_put(Dst, 5454);
7257 } 7264 }
7258 if (!vk) { 7265 if (!vk) {
7259 dasm_put(Dst, 5449, -LJ_TISNUM, -LJ_TISNUM, -LJ_TISNUM); 7266 dasm_put(Dst, 5456, -LJ_TISNUM, -LJ_TISNUM, -LJ_TISNUM);
7260 } else { 7267 } else {
7261 dasm_put(Dst, 5467, -LJ_TISNUM); 7268 dasm_put(Dst, 5474, -LJ_TISNUM);
7262 if (op == BC_IFORL) { 7269 if (op == BC_IFORL) {
7263 dasm_put(Dst, 5475); 7270 dasm_put(Dst, 5482);
7264 } else { 7271 } else {
7265 dasm_put(Dst, 5477); 7272 dasm_put(Dst, 5484);
7266 } 7273 }
7267 dasm_put(Dst, 5480); 7274 dasm_put(Dst, 5487);
7268 } 7275 }
7269 dasm_put(Dst, 5485); 7276 dasm_put(Dst, 5492);
7270 if (op == BC_FORI) { 7277 if (op == BC_FORI) {
7271 dasm_put(Dst, 5487); 7278 dasm_put(Dst, 5494);
7272 } else if (op == BC_JFORI) { 7279 } else if (op == BC_JFORI) {
7273 dasm_put(Dst, 5489); 7280 dasm_put(Dst, 5496);
7274 } else if (op == BC_IFORL) { 7281 } else if (op == BC_IFORL) {
7275 dasm_put(Dst, 5492); 7282 dasm_put(Dst, 5499);
7276 } 7283 }
7277 if (vk) { 7284 if (vk) {
7278 dasm_put(Dst, 5494); 7285 dasm_put(Dst, 5501);
7279 } 7286 }
7280 dasm_put(Dst, 5496); 7287 dasm_put(Dst, 5503);
7281 if (op == BC_JFORI || op == BC_JFORL) { 7288 if (op == BC_JFORI || op == BC_JFORL) {
7282 dasm_put(Dst, 5501, BC_JLOOP); 7289 dasm_put(Dst, 5508, BC_JLOOP);
7283 } 7290 }
7284 dasm_put(Dst, 5504); 7291 dasm_put(Dst, 5511);
7285 if (!vk) { 7292 if (!vk) {
7286 dasm_put(Dst, 5511); 7293 dasm_put(Dst, 5518);
7287 } else { 7294 } else {
7288 dasm_put(Dst, 5513); 7295 dasm_put(Dst, 5520);
7289 } 7296 }
7290 dasm_put(Dst, 5515); 7297 dasm_put(Dst, 5522);
7291 if (!vk) { 7298 if (!vk) {
7292 dasm_put(Dst, 5519, -LJ_TISNUM, -LJ_TISNUM); 7299 dasm_put(Dst, 5526, -LJ_TISNUM, -LJ_TISNUM);
7293 } else { 7300 } else {
7294 dasm_put(Dst, 5531); 7301 dasm_put(Dst, 5538);
7295 } 7302 }
7296 dasm_put(Dst, 5540); 7303 dasm_put(Dst, 5547);
7297 if (op == BC_FORI) { 7304 if (op == BC_FORI) {
7298 dasm_put(Dst, 5544); 7305 dasm_put(Dst, 5551);
7299 } else if (op == BC_JFORI) { 7306 } else if (op == BC_JFORI) {
7300 dasm_put(Dst, 5546, BC_JLOOP); 7307 dasm_put(Dst, 5553, BC_JLOOP);
7301 } else if (op == BC_IFORL) { 7308 } else if (op == BC_IFORL) {
7302 dasm_put(Dst, 5551); 7309 dasm_put(Dst, 5558);
7303 } else { 7310 } else {
7304 dasm_put(Dst, 5553, BC_JLOOP); 7311 dasm_put(Dst, 5560, BC_JLOOP);
7305 } 7312 }
7306 dasm_put(Dst, 5556); 7313 dasm_put(Dst, 5563);
7307 if (vk) { 7314 if (vk) {
7308 dasm_put(Dst, 5562); 7315 dasm_put(Dst, 5569);
7309 } 7316 }
7310 dasm_put(Dst, 5567); 7317 dasm_put(Dst, 5574);
7311 break; 7318 break;
7312 7319
7313 case BC_ITERL: 7320 case BC_ITERL:
7314#if LJ_HASJIT 7321#if LJ_HASJIT
7315 dasm_put(Dst, 5573, -GG_DISP2HOT, HOTCOUNT_LOOP); 7322 dasm_put(Dst, 5580, -GG_DISP2HOT, HOTCOUNT_LOOP);
7316#endif 7323#endif
7317 break; 7324 break;
7318 7325
@@ -7321,40 +7328,40 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop)
7321 break; 7328 break;
7322#endif 7329#endif
7323 case BC_IITERL: 7330 case BC_IITERL:
7324 dasm_put(Dst, 5584); 7331 dasm_put(Dst, 5591);
7325 if (op == BC_JITERL) { 7332 if (op == BC_JITERL) {
7326 dasm_put(Dst, 5586, -LJ_TNIL, BC_JLOOP); 7333 dasm_put(Dst, 5593, -LJ_TNIL, BC_JLOOP);
7327 } else { 7334 } else {
7328 dasm_put(Dst, 5592, -LJ_TNIL); 7335 dasm_put(Dst, 5599, -LJ_TNIL);
7329 } 7336 }
7330 dasm_put(Dst, 5598); 7337 dasm_put(Dst, 5605);
7331 break; 7338 break;
7332 7339
7333 case BC_LOOP: 7340 case BC_LOOP:
7334#if LJ_HASJIT 7341#if LJ_HASJIT
7335 dasm_put(Dst, 5605, -GG_DISP2HOT, HOTCOUNT_LOOP); 7342 dasm_put(Dst, 5612, -GG_DISP2HOT, HOTCOUNT_LOOP);
7336#endif 7343#endif
7337 break; 7344 break;
7338 7345
7339 case BC_ILOOP: 7346 case BC_ILOOP:
7340 dasm_put(Dst, 5616); 7347 dasm_put(Dst, 5623);
7341 break; 7348 break;
7342 7349
7343 case BC_JLOOP: 7350 case BC_JLOOP:
7344#if LJ_HASJIT 7351#if LJ_HASJIT
7345 dasm_put(Dst, 5623, DISPATCH_J(trace), DISPATCH_GL(vmstate), DtD(->mcode), DISPATCH_GL(jit_base), DISPATCH_GL(jit_L)); 7352 dasm_put(Dst, 5630, DISPATCH_J(trace), DISPATCH_GL(vmstate), DtD(->mcode), DISPATCH_GL(jit_base), DISPATCH_GL(jit_L));
7346#endif 7353#endif
7347 break; 7354 break;
7348 7355
7349 case BC_JMP: 7356 case BC_JMP:
7350 dasm_put(Dst, 5637); 7357 dasm_put(Dst, 5644);
7351 break; 7358 break;
7352 7359
7353 /* -- Function headers -------------------------------------------------- */ 7360 /* -- Function headers -------------------------------------------------- */
7354 7361
7355 case BC_FUNCF: 7362 case BC_FUNCF:
7356#if LJ_HASJIT 7363#if LJ_HASJIT
7357 dasm_put(Dst, 5646, -GG_DISP2HOT, HOTCOUNT_CALL); 7364 dasm_put(Dst, 5653, -GG_DISP2HOT, HOTCOUNT_CALL);
7358#endif 7365#endif
7359 case BC_FUNCV: /* NYI: compiled vararg functions. */ 7366 case BC_FUNCV: /* NYI: compiled vararg functions. */
7360 break; 7367 break;
@@ -7364,42 +7371,42 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop)
7364 break; 7371 break;
7365#endif 7372#endif
7366 case BC_IFUNCF: 7373 case BC_IFUNCF:
7367 dasm_put(Dst, 5657, Dt1(->maxstack), -4+PC2PROTO(numparams), -4+PC2PROTO(k)); 7374 dasm_put(Dst, 5664, Dt1(->maxstack), -4+PC2PROTO(numparams), -4+PC2PROTO(k));
7368 if (op != BC_JFUNCF) { 7375 if (op != BC_JFUNCF) {
7369 dasm_put(Dst, 5667); 7376 dasm_put(Dst, 5674);
7370 } 7377 }
7371 dasm_put(Dst, 5670, ~LJ_TNIL); 7378 dasm_put(Dst, 5677, ~LJ_TNIL);
7372 if (op == BC_JFUNCF) { 7379 if (op == BC_JFUNCF) {
7373 dasm_put(Dst, 5677, BC_JLOOP); 7380 dasm_put(Dst, 5684, BC_JLOOP);
7374 } else { 7381 } else {
7375 dasm_put(Dst, 5681); 7382 dasm_put(Dst, 5688);
7376 } 7383 }
7377 dasm_put(Dst, 5686); 7384 dasm_put(Dst, 5693);
7378 break; 7385 break;
7379 7386
7380 case BC_JFUNCV: 7387 case BC_JFUNCV:
7381#if !LJ_HASJIT 7388#if !LJ_HASJIT
7382 break; 7389 break;
7383#endif 7390#endif
7384 dasm_put(Dst, 5692); 7391 dasm_put(Dst, 5699);
7385 break; /* NYI: compiled vararg functions. */ 7392 break; /* NYI: compiled vararg functions. */
7386 7393
7387 case BC_IFUNCV: 7394 case BC_IFUNCV:
7388 dasm_put(Dst, 5694, Dt1(->maxstack), 8+FRAME_VARG, -4+PC2PROTO(k), -4+PC2PROTO(numparams), ~LJ_TNIL); 7395 dasm_put(Dst, 5701, Dt1(->maxstack), 8+FRAME_VARG, -4+PC2PROTO(k), -4+PC2PROTO(numparams), ~LJ_TNIL);
7389 break; 7396 break;
7390 7397
7391 case BC_FUNCC: 7398 case BC_FUNCC:
7392 case BC_FUNCCW: 7399 case BC_FUNCCW:
7393 if (op == BC_FUNCC) { 7400 if (op == BC_FUNCC) {
7394 dasm_put(Dst, 5735, Dt8(->f)); 7401 dasm_put(Dst, 5742, Dt8(->f));
7395 } else { 7402 } else {
7396 dasm_put(Dst, 5738, DISPATCH_GL(wrapf)); 7403 dasm_put(Dst, 5745, DISPATCH_GL(wrapf));
7397 } 7404 }
7398 dasm_put(Dst, 5741, Dt1(->maxstack), Dt1(->base), Dt1(->top)); 7405 dasm_put(Dst, 5748, Dt1(->maxstack), Dt1(->base), Dt1(->top));
7399 if (op == BC_FUNCCW) { 7406 if (op == BC_FUNCCW) {
7400 dasm_put(Dst, 5751, Dt8(->f)); 7407 dasm_put(Dst, 5758, Dt8(->f));
7401 } 7408 }
7402 dasm_put(Dst, 5754, LJ_VMST_C, DISPATCH_GL(vmstate), Dt1(->base), LJ_VMST_INTERP, Dt1(->top), DISPATCH_GL(vmstate)); 7409 dasm_put(Dst, 5761, LJ_VMST_C, DISPATCH_GL(vmstate), Dt1(->base), LJ_VMST_INTERP, Dt1(->top), DISPATCH_GL(vmstate));
7403 break; 7410 break;
7404 7411
7405 /* ---------------------------------------------------------------------- */ 7412 /* ---------------------------------------------------------------------- */
@@ -7419,7 +7426,7 @@ static int build_backend(BuildCtx *ctx)
7419 7426
7420 build_subroutines(ctx); 7427 build_subroutines(ctx);
7421 7428
7422 dasm_put(Dst, 5776); 7429 dasm_put(Dst, 5783);
7423 for (op = 0; op < BC__MAX; op++) 7430 for (op = 0; op < BC__MAX; op++)
7424 build_ins(ctx, (BCOp)op, op); 7431 build_ins(ctx, (BCOp)op, op);
7425 7432
diff --git a/src/buildvm_mips.dasc b/src/buildvm_mips.dasc
index 9e984189..a7c3b4ae 100644
--- a/src/buildvm_mips.dasc
+++ b/src/buildvm_mips.dasc
@@ -1900,6 +1900,7 @@ static void build_subroutines(BuildCtx *ctx)
1900 |. and TMP1, PC, AT 1900 |. and TMP1, PC, AT
1901 | lbu TMP1, OFS_RA(PC) 1901 | lbu TMP1, OFS_RA(PC)
1902 | sll TMP1, TMP1, 3 1902 | sll TMP1, TMP1, 3
1903 | addiu TMP1, TMP1, 8
1903 |3: 1904 |3:
1904 | b ->vm_call_dispatch // Resolve again for tailcall. 1905 | b ->vm_call_dispatch // Resolve again for tailcall.
1905 |. subu TMP2, BASE, TMP1 1906 |. subu TMP2, BASE, TMP1
diff --git a/src/buildvm_mips.h b/src/buildvm_mips.h
index 7c0f90bf..bab93343 100644
--- a/src/buildvm_mips.h
+++ b/src/buildvm_mips.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 int build_actionlist[6323] = { 15static const unsigned int build_actionlist[6324] = {
160xff010001, 160xff010001,
170xff060014, 170xff060014,
180x32410000, 180x32410000,
@@ -2930,6 +2930,7 @@ static const unsigned int build_actionlist[6323] = {
29300x924d0000, 29300x924d0000,
29310xff098200, 29310xff098200,
29320x000d68c0, 29320x000d68c0,
29330x25ad0008,
29330xff06000d, 29340xff06000d,
29340x10000000, 29350x10000000,
29350xff050824, 29360xff050824,
@@ -6736,51 +6737,51 @@ static void build_subroutines(BuildCtx *ctx)
6736 dasm_put(Dst, 2719, 8+LJ_ENDIAN_SELECT(4,0), LJ_TISNUM, LJ_TISNUM, LJ_ENDIAN_SELECT(4,0), 8+LJ_ENDIAN_SELECT(4,0), LJ_TISNUM, LJ_TISNUM, LJ_ENDIAN_SELECT(4,0), 8+LJ_ENDIAN_SELECT(4,0), LJ_TISNUM, LJ_TISNUM, LJ_ENDIAN_SELECT(4,0)); 6737 dasm_put(Dst, 2719, 8+LJ_ENDIAN_SELECT(4,0), LJ_TISNUM, LJ_TISNUM, LJ_ENDIAN_SELECT(4,0), 8+LJ_ENDIAN_SELECT(4,0), LJ_TISNUM, LJ_TISNUM, LJ_ENDIAN_SELECT(4,0), 8+LJ_ENDIAN_SELECT(4,0), LJ_TISNUM, LJ_TISNUM, LJ_ENDIAN_SELECT(4,0));
6737 dasm_put(Dst, 2790, 8+LJ_ENDIAN_SELECT(4,0), LJ_TISNUM, LJ_TISNUM, LJ_ENDIAN_SELECT(4,0), 8+LJ_ENDIAN_SELECT(4,0), LJ_TISNUM, LJ_TISNUM, LJ_ENDIAN_SELECT(4,0), LJ_TISNUM, Dt8(->f)); 6738 dasm_put(Dst, 2790, 8+LJ_ENDIAN_SELECT(4,0), LJ_TISNUM, LJ_TISNUM, LJ_ENDIAN_SELECT(4,0), 8+LJ_ENDIAN_SELECT(4,0), LJ_TISNUM, LJ_TISNUM, LJ_ENDIAN_SELECT(4,0), LJ_TISNUM, Dt8(->f));
6738 dasm_put(Dst, 2863, LJ_ENDIAN_SELECT(-4,-8), 8*LUA_MINSTACK, Dt1(->maxstack), Dt1(->base), Dt1(->top), Dt1(->base), Dt1(->top), LJ_ENDIAN_SELECT(-8,-4), Dt7(->pc), FRAME_TYPE, LJ_ENDIAN_SELECT(1,2), DISPATCH_GOT(lj_state_growstack), LUA_MINSTACK, Dt1(->base)); 6739 dasm_put(Dst, 2863, LJ_ENDIAN_SELECT(-4,-8), 8*LUA_MINSTACK, Dt1(->maxstack), Dt1(->base), Dt1(->top), Dt1(->base), Dt1(->top), LJ_ENDIAN_SELECT(-8,-4), Dt7(->pc), FRAME_TYPE, LJ_ENDIAN_SELECT(1,2), DISPATCH_GOT(lj_state_growstack), LUA_MINSTACK, Dt1(->base));
6739 dasm_put(Dst, 2931, DISPATCH_GOT(lj_gc_step), Dt1(->base), Dt1(->top), Dt1(->base), Dt1(->top), LJ_ENDIAN_SELECT(-8,-4)); 6740 dasm_put(Dst, 2932, DISPATCH_GOT(lj_gc_step), Dt1(->base), Dt1(->top), Dt1(->base), Dt1(->top), LJ_ENDIAN_SELECT(-8,-4));
6740#if LJ_HASJIT 6741#if LJ_HASJIT
6741 dasm_put(Dst, 2957, DISPATCH_GL(hookmask), HOOK_VMEVENT, DISPATCH_GL(hookcount), HOOK_ACTIVE, LUA_MASKLINE|LUA_MASKCOUNT, DISPATCH_GL(hookcount)); 6742 dasm_put(Dst, 2958, DISPATCH_GL(hookmask), HOOK_VMEVENT, DISPATCH_GL(hookcount), HOOK_ACTIVE, LUA_MASKLINE|LUA_MASKCOUNT, DISPATCH_GL(hookcount));
6742#endif 6743#endif
6743 dasm_put(Dst, 2980, DISPATCH_GL(hookmask), HOOK_ACTIVE, GG_DISP2STATIC, DISPATCH_GL(hookmask), DISPATCH_GL(hookcount), HOOK_ACTIVE, LUA_MASKLINE|LUA_MASKCOUNT, DISPATCH_GL(hookcount), LUA_MASKLINE, DISPATCH_GOT(lj_dispatch_ins), Dt1(->base), Dt1(->base)); 6744 dasm_put(Dst, 2981, DISPATCH_GL(hookmask), HOOK_ACTIVE, GG_DISP2STATIC, DISPATCH_GL(hookmask), DISPATCH_GL(hookcount), HOOK_ACTIVE, LUA_MASKLINE|LUA_MASKCOUNT, DISPATCH_GL(hookcount), LUA_MASKLINE, DISPATCH_GOT(lj_dispatch_ins), Dt1(->base), Dt1(->base));
6744 dasm_put(Dst, 3028, GG_DISP2STATIC, -24+LJ_ENDIAN_SELECT(0,4)); 6745 dasm_put(Dst, 3029, GG_DISP2STATIC, -24+LJ_ENDIAN_SELECT(0,4));
6745#if LJ_HASJIT 6746#if LJ_HASJIT
6746 dasm_put(Dst, 3047, LJ_ENDIAN_SELECT(-8,-4), GG_DISP2J, Dt7(->pc), DISPATCH_J(L), PC2PROTO(framesize), DISPATCH_GOT(lj_trace_hot), Dt1(->base), Dt1(->top)); 6747 dasm_put(Dst, 3048, LJ_ENDIAN_SELECT(-8,-4), GG_DISP2J, Dt7(->pc), DISPATCH_J(L), PC2PROTO(framesize), DISPATCH_GOT(lj_trace_hot), Dt1(->base), Dt1(->top));
6747#endif 6748#endif
6748 dasm_put(Dst, 3072); 6749 dasm_put(Dst, 3073);
6749#if LJ_HASJIT 6750#if LJ_HASJIT
6750 dasm_put(Dst, 3074); 6751 dasm_put(Dst, 3075);
6751#endif 6752#endif
6752 dasm_put(Dst, 3077); 6753 dasm_put(Dst, 3078);
6753#if LJ_HASJIT 6754#if LJ_HASJIT
6754 dasm_put(Dst, 3080); 6755 dasm_put(Dst, 3081);
6755#endif 6756#endif
6756 dasm_put(Dst, 3083, DISPATCH_GOT(lj_dispatch_call), Dt1(->base), Dt1(->top), Dt1(->base), Dt1(->top), LJ_ENDIAN_SELECT(-8,-4)); 6757 dasm_put(Dst, 3084, DISPATCH_GOT(lj_dispatch_call), Dt1(->base), Dt1(->top), Dt1(->base), Dt1(->top), LJ_ENDIAN_SELECT(-8,-4));
6757#if LJ_HASJIT 6758#if LJ_HASJIT
6758 dasm_put(Dst, 3107, -(16+32*8+32*4), 16+0*8, 16+32*8+0*4, 16+32*8+1*4, 16+2*8, 16+32*8+2*4, 16+32*8+3*4, 16+4*8, 16+32*8+4*4, 16+32*8+5*4, 16+6*8, 16+32*8+6*4, 16+32*8+7*4, 16+8*8, 16+32*8+8*4, 16+32*8+9*4, 16+10*8, 16+32*8+10*4, 16+32*8+11*4, 16+12*8, 16+32*8+12*4, 16+32*8+13*4, 16+14*8); 6759 dasm_put(Dst, 3108, -(16+32*8+32*4), 16+0*8, 16+32*8+0*4, 16+32*8+1*4, 16+2*8, 16+32*8+2*4, 16+32*8+3*4, 16+4*8, 16+32*8+4*4, 16+32*8+5*4, 16+6*8, 16+32*8+6*4, 16+32*8+7*4, 16+8*8, 16+32*8+8*4, 16+32*8+9*4, 16+10*8, 16+32*8+10*4, 16+32*8+11*4, 16+12*8, 16+32*8+12*4, 16+32*8+13*4, 16+14*8);
6759 dasm_put(Dst, 3154, 16+32*8+14*4, 16+32*8+15*4, 16+16*8, 16+32*8+16*4, 16+32*8+17*4, 16+18*8, 16+32*8+18*4, 16+32*8+19*4, 16+20*8, 16+32*8+20*4, 16+32*8+21*4, 16+22*8, 16+32*8+22*4, 16+32*8+23*4, 16+24*8, 16+32*8+24*4, 16+32*8+25*4, 16+26*8, 16+32*8+26*4, 16+32*8+27*4, 16+28*8, 16+32*8+28*4, 16+30*8); 6760 dasm_put(Dst, 3155, 16+32*8+14*4, 16+32*8+15*4, 16+16*8, 16+32*8+16*4, 16+32*8+17*4, 16+18*8, 16+32*8+18*4, 16+32*8+19*4, 16+20*8, 16+32*8+20*4, 16+32*8+21*4, 16+22*8, 16+32*8+22*4, 16+32*8+23*4, 16+24*8, 16+32*8+24*4, 16+32*8+25*4, 16+26*8, 16+32*8+26*4, 16+32*8+27*4, 16+28*8, 16+32*8+28*4, 16+30*8);
6760 dasm_put(Dst, 3201, 16+32*8+30*4, 16+32*8+31*4, ~LJ_VMST_EXIT, 16+32*8+32*4, -GG_DISP2G-32768, DISPATCH_GL(vmstate), 16+32*8+29*4, DISPATCH_GL(jit_L), DISPATCH_GL(jit_base), DISPATCH_GOT(lj_trace_exit), DISPATCH_J(L), DISPATCH_J(parent), DISPATCH_J(exitno), GG_DISP2J, Dt1(->base), Dt1(->cframe), Dt1(->base)); 6761 dasm_put(Dst, 3202, 16+32*8+30*4, 16+32*8+31*4, ~LJ_VMST_EXIT, 16+32*8+32*4, -GG_DISP2G-32768, DISPATCH_GL(vmstate), 16+32*8+29*4, DISPATCH_GL(jit_L), DISPATCH_GL(jit_base), DISPATCH_GOT(lj_trace_exit), DISPATCH_J(L), DISPATCH_J(parent), DISPATCH_J(exitno), GG_DISP2J, Dt1(->base), Dt1(->cframe), Dt1(->base));
6761#endif 6762#endif
6762 dasm_put(Dst, 3245); 6763 dasm_put(Dst, 3246);
6763#if LJ_HASJIT 6764#if LJ_HASJIT
6764 dasm_put(Dst, 3247, -GG_DISP2G-32768, LJ_ENDIAN_SELECT(-8,-4), LJ_TNIL, Dt7(->pc), DISPATCH_GL(jit_L), PC2PROTO(k), DISPATCH_GL(vmstate), BC_FUNCF*4, DISPATCH_GOT(lj_err_throw)); 6765 dasm_put(Dst, 3248, -GG_DISP2G-32768, LJ_ENDIAN_SELECT(-8,-4), LJ_TNIL, Dt7(->pc), DISPATCH_GL(jit_L), PC2PROTO(k), DISPATCH_GL(vmstate), BC_FUNCF*4, DISPATCH_GOT(lj_err_throw));
6765#endif 6766#endif
6766 dasm_put(Dst, 3296); 6767 dasm_put(Dst, 3297);
6767#if LJ_HASJIT 6768#if LJ_HASJIT
6768 dasm_put(Dst, 3344); 6769 dasm_put(Dst, 3345);
6769#endif 6770#endif
6770 dasm_put(Dst, 3367); 6771 dasm_put(Dst, 3368);
6771#if LJ_HASFFI 6772#if LJ_HASFFI
6772#define DtE(_V) (int)(ptrdiff_t)&(((CTState *)0)_V) 6773#define DtE(_V) (int)(ptrdiff_t)&(((CTState *)0)_V)
6773 dasm_put(Dst, 3369, 72+9*4, 72+8*4, 24+5*8, 72+7*4, 72+6*4, 24+4*8, 72+5*4, 72+4*4, 24+3*8, 72+3*4, 72+2*4, 24+2*8, 72+1*4, 72+0*4, 24+1*8, 24+0*8, Dt2(->ctype_state), GG_G2DISP, DISPATCH_GOT(lj_ccallback_enter), DtE(->cb.slot), DtE(->cb.gpr[0]), DtE(->cb.gpr[1]), DtE(->cb.fpr[0])); 6774 dasm_put(Dst, 3370, 72+9*4, 72+8*4, 24+5*8, 72+7*4, 72+6*4, 24+4*8, 72+5*4, 72+4*4, 24+3*8, 72+3*4, 72+2*4, 24+2*8, 72+1*4, 72+0*4, 24+1*8, 24+0*8, Dt2(->ctype_state), GG_G2DISP, DISPATCH_GOT(lj_ccallback_enter), DtE(->cb.slot), DtE(->cb.gpr[0]), DtE(->cb.gpr[1]), DtE(->cb.fpr[0]));
6774 dasm_put(Dst, 3417, DtE(->cb.gpr[2]), DtE(->cb.gpr[3]), DtE(->cb.fpr[1]), 112+16, DtE(->cb.stack), Dt1(->base), Dt1(->top), LJ_ENDIAN_SELECT(-8,-4), ~LJ_VMST_INTERP, LJ_TNIL, DISPATCH_GL(vmstate), Dt7(->pc)); 6775 dasm_put(Dst, 3418, DtE(->cb.gpr[2]), DtE(->cb.gpr[3]), DtE(->cb.fpr[1]), 112+16, DtE(->cb.stack), Dt1(->base), Dt1(->top), LJ_ENDIAN_SELECT(-8,-4), ~LJ_VMST_INTERP, LJ_TNIL, DISPATCH_GL(vmstate), Dt7(->pc));
6775#endif 6776#endif
6776 dasm_put(Dst, 3461); 6777 dasm_put(Dst, 3462);
6777#if LJ_HASFFI 6778#if LJ_HASFFI
6778 dasm_put(Dst, 3463, DISPATCH_GOT(lj_ccallback_leave), DISPATCH_GL(ctype_state), Dt1(->base), Dt1(->top), DtE(->L), DtE(->cb.gpr[0]), DtE(->cb.fpr[0]), DtE(->cb.gpr[1]), DtE(->cb.fpr[1])); 6779 dasm_put(Dst, 3464, DISPATCH_GOT(lj_ccallback_leave), DISPATCH_GL(ctype_state), Dt1(->base), Dt1(->top), DtE(->L), DtE(->cb.gpr[0]), DtE(->cb.fpr[0]), DtE(->cb.gpr[1]), DtE(->cb.fpr[1]));
6779#endif 6780#endif
6780 dasm_put(Dst, 3487); 6781 dasm_put(Dst, 3488);
6781#if LJ_HASFFI 6782#if LJ_HASFFI
6782#define DtF(_V) (int)(ptrdiff_t)&(((CCallState *)0)_V) 6783#define DtF(_V) (int)(ptrdiff_t)&(((CCallState *)0)_V)
6783 dasm_put(Dst, 3489, DtF(->spadj), DtF(->nsp), offsetof(CCallState, stack), DtF(->func), DtF(->gpr[1]), DtF(->gpr[2]), DtF(->gpr[3]), DtF(->fpr[0]), DtF(->fpr[1]), DtF(->gpr[0]), DtF(->gpr[0]), DtF(->gpr[1]), DtF(->fpr[0]), DtF(->fpr[1])); 6784 dasm_put(Dst, 3490, DtF(->spadj), DtF(->nsp), offsetof(CCallState, stack), DtF(->func), DtF(->gpr[1]), DtF(->gpr[2]), DtF(->gpr[3]), DtF(->fpr[0]), DtF(->fpr[1]), DtF(->gpr[0]), DtF(->gpr[0]), DtF(->gpr[1]), DtF(->fpr[0]), DtF(->fpr[1]));
6784#endif 6785#endif
6785} 6786}
6786 6787
@@ -6788,7 +6789,7 @@ static void build_subroutines(BuildCtx *ctx)
6788static void build_ins(BuildCtx *ctx, BCOp op, int defop) 6789static void build_ins(BuildCtx *ctx, BCOp op, int defop)
6789{ 6790{
6790 int vk = 0; 6791 int vk = 0;
6791 dasm_put(Dst, 3545, defop); 6792 dasm_put(Dst, 3546, defop);
6792 6793
6793 switch (op) { 6794 switch (op) {
6794 6795
@@ -6797,138 +6798,138 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop)
6797 /* Remember: all ops branch for a true comparison, fall through otherwise. */ 6798 /* Remember: all ops branch for a true comparison, fall through otherwise. */
6798 6799
6799 case BC_ISLT: case BC_ISGE: case BC_ISLE: case BC_ISGT: 6800 case BC_ISLT: case BC_ISGE: case BC_ISLE: case BC_ISGT:
6800 dasm_put(Dst, 3547, LJ_ENDIAN_SELECT(4,0), LJ_ENDIAN_SELECT(4,0), LJ_TISNUM, LJ_TISNUM, LJ_ENDIAN_SELECT(2,0), (-(BCBIAS_J*4 >> 16) & 65535)); 6801 dasm_put(Dst, 3548, LJ_ENDIAN_SELECT(4,0), LJ_ENDIAN_SELECT(4,0), LJ_TISNUM, LJ_TISNUM, LJ_ENDIAN_SELECT(2,0), (-(BCBIAS_J*4 >> 16) & 65535));
6801 if (op == BC_ISLT || op == BC_ISGE) { 6802 if (op == BC_ISLT || op == BC_ISGE) {
6802 dasm_put(Dst, 3570); 6803 dasm_put(Dst, 3571);
6803 } else { 6804 } else {
6804 dasm_put(Dst, 3572); 6805 dasm_put(Dst, 3573);
6805 } 6806 }
6806 if (op == BC_ISLT || op == BC_ISLE) { 6807 if (op == BC_ISLT || op == BC_ISLE) {
6807 dasm_put(Dst, 3574); 6808 dasm_put(Dst, 3575);
6808 } else { 6809 } else {
6809 dasm_put(Dst, 3576); 6810 dasm_put(Dst, 3577);
6810 } 6811 }
6811 dasm_put(Dst, 3578); 6812 dasm_put(Dst, 3579);
6812 break; 6813 break;
6813 6814
6814 case BC_ISEQV: case BC_ISNEV: 6815 case BC_ISEQV: case BC_ISNEV:
6815 vk = op == BC_ISEQV; 6816 vk = op == BC_ISEQV;
6816 dasm_put(Dst, 3592, LJ_ENDIAN_SELECT(4,0), -4+LJ_ENDIAN_SELECT(2,0), LJ_ENDIAN_SELECT(4,0), (-(BCBIAS_J*4 >> 16) & 65535), LJ_TISNUM, LJ_TISNUM); 6817 dasm_put(Dst, 3593, LJ_ENDIAN_SELECT(4,0), -4+LJ_ENDIAN_SELECT(2,0), LJ_ENDIAN_SELECT(4,0), (-(BCBIAS_J*4 >> 16) & 65535), LJ_TISNUM, LJ_TISNUM);
6817 if (vk) { 6818 if (vk) {
6818 dasm_put(Dst, 3616); 6819 dasm_put(Dst, 3617);
6819 } else { 6820 } else {
6820 dasm_put(Dst, 3618); 6821 dasm_put(Dst, 3619);
6821 } 6822 }
6822 dasm_put(Dst, 3620, LJ_ENDIAN_SELECT(0,4), LJ_ENDIAN_SELECT(0,4)); 6823 dasm_put(Dst, 3621, LJ_ENDIAN_SELECT(0,4), LJ_ENDIAN_SELECT(0,4));
6823 if (LJ_HASFFI) { 6824 if (LJ_HASFFI) {
6824 dasm_put(Dst, 3639, LJ_TCDATA); 6825 dasm_put(Dst, 3640, LJ_TCDATA);
6825 } 6826 }
6826 dasm_put(Dst, 3644, LJ_TISPRI); 6827 dasm_put(Dst, 3645, LJ_TISPRI);
6827 if (LJ_HASFFI) { 6828 if (LJ_HASFFI) {
6828 dasm_put(Dst, 3647); 6829 dasm_put(Dst, 3648);
6829 } 6830 }
6830 dasm_put(Dst, 3650, LJ_TISTABUD+1); 6831 dasm_put(Dst, 3651, LJ_TISTABUD+1);
6831 if (vk) { 6832 if (vk) {
6832 dasm_put(Dst, 3661); 6833 dasm_put(Dst, 3662);
6833 } else { 6834 } else {
6834 dasm_put(Dst, 3663); 6835 dasm_put(Dst, 3664);
6835 } 6836 }
6836 dasm_put(Dst, 3665, Dt6(->metatable), Dt6(->nomm), 1<<MM_eq, 1-vk); 6837 dasm_put(Dst, 3666, Dt6(->metatable), Dt6(->nomm), 1<<MM_eq, 1-vk);
6837 break; 6838 break;
6838 6839
6839 case BC_ISEQS: case BC_ISNES: 6840 case BC_ISEQS: case BC_ISNES:
6840 vk = op == BC_ISEQS; 6841 vk = op == BC_ISEQS;
6841 dasm_put(Dst, 3682, LJ_ENDIAN_SELECT(4,0), LJ_ENDIAN_SELECT(0,4), -4+LJ_ENDIAN_SELECT(2,0)); 6842 dasm_put(Dst, 3683, LJ_ENDIAN_SELECT(4,0), LJ_ENDIAN_SELECT(0,4), -4+LJ_ENDIAN_SELECT(2,0));
6842 if (LJ_HASFFI) { 6843 if (LJ_HASFFI) {
6843 dasm_put(Dst, 3693, LJ_TCDATA); 6844 dasm_put(Dst, 3694, LJ_TCDATA);
6844 } 6845 }
6845 dasm_put(Dst, 3698, -LJ_TSTR, (-(BCBIAS_J*4 >> 16) & 65535)); 6846 dasm_put(Dst, 3699, -LJ_TSTR, (-(BCBIAS_J*4 >> 16) & 65535));
6846 if (vk) { 6847 if (vk) {
6847 dasm_put(Dst, 3708); 6848 dasm_put(Dst, 3709);
6848 } else { 6849 } else {
6849 dasm_put(Dst, 3710); 6850 dasm_put(Dst, 3711);
6850 } 6851 }
6851 dasm_put(Dst, 3712); 6852 dasm_put(Dst, 3713);
6852 break; 6853 break;
6853 6854
6854 case BC_ISEQN: case BC_ISNEN: 6855 case BC_ISEQN: case BC_ISNEN:
6855 vk = op == BC_ISEQN; 6856 vk = op == BC_ISEQN;
6856 dasm_put(Dst, 3725, LJ_ENDIAN_SELECT(4,0), -4+LJ_ENDIAN_SELECT(2,0), (-(BCBIAS_J*4 >> 16) & 65535), LJ_TISNUM); 6857 dasm_put(Dst, 3726, LJ_ENDIAN_SELECT(4,0), -4+LJ_ENDIAN_SELECT(2,0), (-(BCBIAS_J*4 >> 16) & 65535), LJ_TISNUM);
6857 if (LJ_HASFFI) { 6858 if (LJ_HASFFI) {
6858 dasm_put(Dst, 3740); 6859 dasm_put(Dst, 3741);
6859 } else { 6860 } else {
6860 dasm_put(Dst, 3743); 6861 dasm_put(Dst, 3744);
6861 } 6862 }
6862 dasm_put(Dst, 3746); 6863 dasm_put(Dst, 3747);
6863 if (vk) { 6864 if (vk) {
6864 dasm_put(Dst, 3749); 6865 dasm_put(Dst, 3750);
6865 } else { 6866 } else {
6866 dasm_put(Dst, 3753); 6867 dasm_put(Dst, 3754);
6867 } 6868 }
6868 dasm_put(Dst, 3757); 6869 dasm_put(Dst, 3758);
6869 if (LJ_HASFFI) { 6870 if (LJ_HASFFI) {
6870 dasm_put(Dst, 3769, LJ_TCDATA); 6871 dasm_put(Dst, 3770, LJ_TCDATA);
6871 } 6872 }
6872 break; 6873 break;
6873 6874
6874 case BC_ISEQP: case BC_ISNEP: 6875 case BC_ISEQP: case BC_ISNEP:
6875 vk = op == BC_ISEQP; 6876 vk = op == BC_ISEQP;
6876 dasm_put(Dst, 3779, LJ_ENDIAN_SELECT(4,0), LJ_ENDIAN_SELECT(2,0)); 6877 dasm_put(Dst, 3780, LJ_ENDIAN_SELECT(4,0), LJ_ENDIAN_SELECT(2,0));
6877 if (LJ_HASFFI) { 6878 if (LJ_HASFFI) {
6878 dasm_put(Dst, 3788, LJ_TCDATA); 6879 dasm_put(Dst, 3789, LJ_TCDATA);
6879 } 6880 }
6880 dasm_put(Dst, 3793, (-(BCBIAS_J*4 >> 16) & 65535)); 6881 dasm_put(Dst, 3794, (-(BCBIAS_J*4 >> 16) & 65535));
6881 if (vk) { 6882 if (vk) {
6882 dasm_put(Dst, 3799); 6883 dasm_put(Dst, 3800);
6883 } else { 6884 } else {
6884 dasm_put(Dst, 3801); 6885 dasm_put(Dst, 3802);
6885 } 6886 }
6886 dasm_put(Dst, 3803); 6887 dasm_put(Dst, 3804);
6887 break; 6888 break;
6888 6889
6889 /* -- Unary test and copy ops ------------------------------------------- */ 6890 /* -- Unary test and copy ops ------------------------------------------- */
6890 6891
6891 case BC_ISTC: case BC_ISFC: case BC_IST: case BC_ISF: 6892 case BC_ISTC: case BC_ISFC: case BC_IST: case BC_ISF:
6892 dasm_put(Dst, 3816, LJ_ENDIAN_SELECT(2,0), LJ_ENDIAN_SELECT(4,0)); 6893 dasm_put(Dst, 3817, LJ_ENDIAN_SELECT(2,0), LJ_ENDIAN_SELECT(4,0));
6893 if (op == BC_IST || op == BC_ISF) { 6894 if (op == BC_IST || op == BC_ISF) {
6894 dasm_put(Dst, 3823, LJ_TISTRUECOND, (-(BCBIAS_J*4 >> 16) & 65535)); 6895 dasm_put(Dst, 3824, LJ_TISTRUECOND, (-(BCBIAS_J*4 >> 16) & 65535));
6895 if (op == BC_IST) { 6896 if (op == BC_IST) {
6896 dasm_put(Dst, 3830); 6897 dasm_put(Dst, 3831);
6897 } else { 6898 } else {
6898 dasm_put(Dst, 3832); 6899 dasm_put(Dst, 3833);
6899 } 6900 }
6900 dasm_put(Dst, 3834); 6901 dasm_put(Dst, 3835);
6901 } else { 6902 } else {
6902 dasm_put(Dst, 3836, LJ_TISTRUECOND); 6903 dasm_put(Dst, 3837, LJ_TISTRUECOND);
6903 if (op == BC_ISTC) { 6904 if (op == BC_ISTC) {
6904 dasm_put(Dst, 3840); 6905 dasm_put(Dst, 3841);
6905 } else { 6906 } else {
6906 dasm_put(Dst, 3843); 6907 dasm_put(Dst, 3844);
6907 } 6908 }
6908 dasm_put(Dst, 3846, (-(BCBIAS_J*4 >> 16) & 65535)); 6909 dasm_put(Dst, 3847, (-(BCBIAS_J*4 >> 16) & 65535));
6909 } 6910 }
6910 dasm_put(Dst, 3855); 6911 dasm_put(Dst, 3856);
6911 break; 6912 break;
6912 6913
6913 /* -- Unary ops --------------------------------------------------------- */ 6914 /* -- Unary ops --------------------------------------------------------- */
6914 6915
6915 case BC_MOV: 6916 case BC_MOV:
6916 dasm_put(Dst, 3867); 6917 dasm_put(Dst, 3868);
6917 break; 6918 break;
6918 case BC_NOT: 6919 case BC_NOT:
6919 dasm_put(Dst, 3883, LJ_ENDIAN_SELECT(4,0), LJ_TFALSE, LJ_TISTRUECOND, LJ_TTRUE, LJ_ENDIAN_SELECT(4,0)); 6920 dasm_put(Dst, 3884, LJ_ENDIAN_SELECT(4,0), LJ_TFALSE, LJ_TISTRUECOND, LJ_TTRUE, LJ_ENDIAN_SELECT(4,0));
6920 break; 6921 break;
6921 case BC_UNM: 6922 case BC_UNM:
6922 dasm_put(Dst, 3907, LJ_ENDIAN_SELECT(4,0), LJ_TISNUM); 6923 dasm_put(Dst, 3908, LJ_ENDIAN_SELECT(4,0), LJ_TISNUM);
6923 break; 6924 break;
6924 case BC_LEN: 6925 case BC_LEN:
6925 dasm_put(Dst, 3930, LJ_ENDIAN_SELECT(4,0), LJ_ENDIAN_SELECT(0,4), LJ_TSTR, LJ_TTAB, Dt5(->len)); 6926 dasm_put(Dst, 3931, LJ_ENDIAN_SELECT(4,0), LJ_ENDIAN_SELECT(0,4), LJ_TSTR, LJ_TTAB, Dt5(->len));
6926#ifdef LUAJIT_ENABLE_LUA52COMPAT 6927#ifdef LUAJIT_ENABLE_LUA52COMPAT
6927 dasm_put(Dst, 3964, Dt6(->metatable)); 6928 dasm_put(Dst, 3965, Dt6(->metatable));
6928#endif 6929#endif
6929 dasm_put(Dst, 3971, DISPATCH_GOT(lj_tab_len)); 6930 dasm_put(Dst, 3972, DISPATCH_GOT(lj_tab_len));
6930#ifdef LUAJIT_ENABLE_LUA52COMPAT 6931#ifdef LUAJIT_ENABLE_LUA52COMPAT
6931 dasm_put(Dst, 3980, Dt6(->nomm), 1<<MM_len); 6932 dasm_put(Dst, 3981, Dt6(->nomm), 1<<MM_len);
6932#endif 6933#endif
6933 break; 6934 break;
6934 6935
@@ -6937,273 +6938,273 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop)
6937 6938
6938 case BC_ADDVN: case BC_ADDNV: case BC_ADDVV: 6939 case BC_ADDVN: case BC_ADDNV: case BC_ADDVV:
6939 vk = ((int)op - BC_ADDVN) / (BC_ADDNV-BC_ADDVN); 6940 vk = ((int)op - BC_ADDVN) / (BC_ADDNV-BC_ADDVN);
6940 dasm_put(Dst, 3992); 6941 dasm_put(Dst, 3993);
6941 switch (vk) { 6942 switch (vk) {
6942 case 0: 6943 case 0:
6943 dasm_put(Dst, 3996, LJ_ENDIAN_SELECT(4,0), LJ_TISNUM); 6944 dasm_put(Dst, 3997, LJ_ENDIAN_SELECT(4,0), LJ_TISNUM);
6944 break; 6945 break;
6945 case 1: 6946 case 1:
6946 dasm_put(Dst, 4005, LJ_ENDIAN_SELECT(4,0), LJ_TISNUM); 6947 dasm_put(Dst, 4006, LJ_ENDIAN_SELECT(4,0), LJ_TISNUM);
6947 break; 6948 break;
6948 default: 6949 default:
6949 dasm_put(Dst, 4014, LJ_ENDIAN_SELECT(4,0), LJ_ENDIAN_SELECT(4,0), LJ_TISNUM, LJ_TISNUM); 6950 dasm_put(Dst, 4015, LJ_ENDIAN_SELECT(4,0), LJ_ENDIAN_SELECT(4,0), LJ_TISNUM, LJ_TISNUM);
6950 break; 6951 break;
6951 } 6952 }
6952 dasm_put(Dst, 4028); 6953 dasm_put(Dst, 4029);
6953 break; 6954 break;
6954 case BC_SUBVN: case BC_SUBNV: case BC_SUBVV: 6955 case BC_SUBVN: case BC_SUBNV: case BC_SUBVV:
6955 vk = ((int)op - BC_ADDVN) / (BC_ADDNV-BC_ADDVN); 6956 vk = ((int)op - BC_ADDVN) / (BC_ADDNV-BC_ADDVN);
6956 dasm_put(Dst, 4045); 6957 dasm_put(Dst, 4046);
6957 switch (vk) { 6958 switch (vk) {
6958 case 0: 6959 case 0:
6959 dasm_put(Dst, 4049, LJ_ENDIAN_SELECT(4,0), LJ_TISNUM); 6960 dasm_put(Dst, 4050, LJ_ENDIAN_SELECT(4,0), LJ_TISNUM);
6960 break; 6961 break;
6961 case 1: 6962 case 1:
6962 dasm_put(Dst, 4058, LJ_ENDIAN_SELECT(4,0), LJ_TISNUM); 6963 dasm_put(Dst, 4059, LJ_ENDIAN_SELECT(4,0), LJ_TISNUM);
6963 break; 6964 break;
6964 default: 6965 default:
6965 dasm_put(Dst, 4067, LJ_ENDIAN_SELECT(4,0), LJ_ENDIAN_SELECT(4,0), LJ_TISNUM, LJ_TISNUM); 6966 dasm_put(Dst, 4068, LJ_ENDIAN_SELECT(4,0), LJ_ENDIAN_SELECT(4,0), LJ_TISNUM, LJ_TISNUM);
6966 break; 6967 break;
6967 } 6968 }
6968 dasm_put(Dst, 4081); 6969 dasm_put(Dst, 4082);
6969 break; 6970 break;
6970 case BC_MULVN: case BC_MULNV: case BC_MULVV: 6971 case BC_MULVN: case BC_MULNV: case BC_MULVV:
6971 vk = ((int)op - BC_ADDVN) / (BC_ADDNV-BC_ADDVN); 6972 vk = ((int)op - BC_ADDVN) / (BC_ADDNV-BC_ADDVN);
6972 dasm_put(Dst, 4098); 6973 dasm_put(Dst, 4099);
6973 switch (vk) { 6974 switch (vk) {
6974 case 0: 6975 case 0:
6975 dasm_put(Dst, 4102, LJ_ENDIAN_SELECT(4,0), LJ_TISNUM); 6976 dasm_put(Dst, 4103, LJ_ENDIAN_SELECT(4,0), LJ_TISNUM);
6976 break; 6977 break;
6977 case 1: 6978 case 1:
6978 dasm_put(Dst, 4111, LJ_ENDIAN_SELECT(4,0), LJ_TISNUM); 6979 dasm_put(Dst, 4112, LJ_ENDIAN_SELECT(4,0), LJ_TISNUM);
6979 break; 6980 break;
6980 default: 6981 default:
6981 dasm_put(Dst, 4120, LJ_ENDIAN_SELECT(4,0), LJ_ENDIAN_SELECT(4,0), LJ_TISNUM, LJ_TISNUM); 6982 dasm_put(Dst, 4121, LJ_ENDIAN_SELECT(4,0), LJ_ENDIAN_SELECT(4,0), LJ_TISNUM, LJ_TISNUM);
6982 break; 6983 break;
6983 } 6984 }
6984 dasm_put(Dst, 4134); 6985 dasm_put(Dst, 4135);
6985 break; 6986 break;
6986 case BC_DIVVN: case BC_DIVNV: case BC_DIVVV: 6987 case BC_DIVVN: case BC_DIVNV: case BC_DIVVV:
6987 vk = ((int)op - BC_ADDVN) / (BC_ADDNV-BC_ADDVN); 6988 vk = ((int)op - BC_ADDVN) / (BC_ADDNV-BC_ADDVN);
6988 dasm_put(Dst, 4151); 6989 dasm_put(Dst, 4152);
6989 switch (vk) { 6990 switch (vk) {
6990 case 0: 6991 case 0:
6991 dasm_put(Dst, 4155, LJ_ENDIAN_SELECT(4,0), LJ_TISNUM); 6992 dasm_put(Dst, 4156, LJ_ENDIAN_SELECT(4,0), LJ_TISNUM);
6992 break; 6993 break;
6993 case 1: 6994 case 1:
6994 dasm_put(Dst, 4164, LJ_ENDIAN_SELECT(4,0), LJ_TISNUM); 6995 dasm_put(Dst, 4165, LJ_ENDIAN_SELECT(4,0), LJ_TISNUM);
6995 break; 6996 break;
6996 default: 6997 default:
6997 dasm_put(Dst, 4173, LJ_ENDIAN_SELECT(4,0), LJ_ENDIAN_SELECT(4,0), LJ_TISNUM, LJ_TISNUM); 6998 dasm_put(Dst, 4174, LJ_ENDIAN_SELECT(4,0), LJ_ENDIAN_SELECT(4,0), LJ_TISNUM, LJ_TISNUM);
6998 break; 6999 break;
6999 } 7000 }
7000 dasm_put(Dst, 4187); 7001 dasm_put(Dst, 4188);
7001 break; 7002 break;
7002 case BC_MODVN: 7003 case BC_MODVN:
7003 vk = ((int)op - BC_ADDVN) / (BC_ADDNV-BC_ADDVN); 7004 vk = ((int)op - BC_ADDVN) / (BC_ADDNV-BC_ADDVN);
7004 dasm_put(Dst, 4204); 7005 dasm_put(Dst, 4205);
7005 switch (vk) { 7006 switch (vk) {
7006 case 0: 7007 case 0:
7007 dasm_put(Dst, 4208, LJ_ENDIAN_SELECT(4,0), LJ_TISNUM); 7008 dasm_put(Dst, 4209, LJ_ENDIAN_SELECT(4,0), LJ_TISNUM);
7008 break; 7009 break;
7009 case 1: 7010 case 1:
7010 dasm_put(Dst, 4217, LJ_ENDIAN_SELECT(4,0), LJ_TISNUM); 7011 dasm_put(Dst, 4218, LJ_ENDIAN_SELECT(4,0), LJ_TISNUM);
7011 break; 7012 break;
7012 default: 7013 default:
7013 dasm_put(Dst, 4226, LJ_ENDIAN_SELECT(4,0), LJ_ENDIAN_SELECT(4,0), LJ_TISNUM, LJ_TISNUM); 7014 dasm_put(Dst, 4227, LJ_ENDIAN_SELECT(4,0), LJ_ENDIAN_SELECT(4,0), LJ_TISNUM, LJ_TISNUM);
7014 break; 7015 break;
7015 } 7016 }
7016 dasm_put(Dst, 4240); 7017 dasm_put(Dst, 4241);
7017 break; 7018 break;
7018 case BC_MODNV: case BC_MODVV: 7019 case BC_MODNV: case BC_MODVV:
7019 vk = ((int)op - BC_ADDVN) / (BC_ADDNV-BC_ADDVN); 7020 vk = ((int)op - BC_ADDVN) / (BC_ADDNV-BC_ADDVN);
7020 dasm_put(Dst, 4262); 7021 dasm_put(Dst, 4263);
7021 switch (vk) { 7022 switch (vk) {
7022 case 0: 7023 case 0:
7023 dasm_put(Dst, 4266, LJ_ENDIAN_SELECT(4,0), LJ_TISNUM); 7024 dasm_put(Dst, 4267, LJ_ENDIAN_SELECT(4,0), LJ_TISNUM);
7024 break; 7025 break;
7025 case 1: 7026 case 1:
7026 dasm_put(Dst, 4275, LJ_ENDIAN_SELECT(4,0), LJ_TISNUM); 7027 dasm_put(Dst, 4276, LJ_ENDIAN_SELECT(4,0), LJ_TISNUM);
7027 break; 7028 break;
7028 default: 7029 default:
7029 dasm_put(Dst, 4284, LJ_ENDIAN_SELECT(4,0), LJ_ENDIAN_SELECT(4,0), LJ_TISNUM, LJ_TISNUM); 7030 dasm_put(Dst, 4285, LJ_ENDIAN_SELECT(4,0), LJ_ENDIAN_SELECT(4,0), LJ_TISNUM, LJ_TISNUM);
7030 break; 7031 break;
7031 } 7032 }
7032 dasm_put(Dst, 4298); 7033 dasm_put(Dst, 4299);
7033 break; 7034 break;
7034 case BC_POW: 7035 case BC_POW:
7035 dasm_put(Dst, 4305, LJ_ENDIAN_SELECT(4,0), LJ_ENDIAN_SELECT(4,0), LJ_TISNUM, LJ_TISNUM, DISPATCH_GOT(pow)); 7036 dasm_put(Dst, 4306, LJ_ENDIAN_SELECT(4,0), LJ_ENDIAN_SELECT(4,0), LJ_TISNUM, LJ_TISNUM, DISPATCH_GOT(pow));
7036 break; 7037 break;
7037 7038
7038 case BC_CAT: 7039 case BC_CAT:
7039 dasm_put(Dst, 4341, Dt1(->base), DISPATCH_GOT(lj_meta_cat), Dt1(->base)); 7040 dasm_put(Dst, 4342, Dt1(->base), DISPATCH_GOT(lj_meta_cat), Dt1(->base));
7040 break; 7041 break;
7041 7042
7042 /* -- Constant ops ------------------------------------------------------ */ 7043 /* -- Constant ops ------------------------------------------------------ */
7043 7044
7044 case BC_KSTR: 7045 case BC_KSTR:
7045 dasm_put(Dst, 4376, LJ_TSTR, LJ_ENDIAN_SELECT(0,4), LJ_ENDIAN_SELECT(4,0)); 7046 dasm_put(Dst, 4377, LJ_TSTR, LJ_ENDIAN_SELECT(0,4), LJ_ENDIAN_SELECT(4,0));
7046 break; 7047 break;
7047 case BC_KCDATA: 7048 case BC_KCDATA:
7048#if LJ_HASFFI 7049#if LJ_HASFFI
7049 dasm_put(Dst, 4398, LJ_TCDATA, LJ_ENDIAN_SELECT(0,4), LJ_ENDIAN_SELECT(4,0)); 7050 dasm_put(Dst, 4399, LJ_TCDATA, LJ_ENDIAN_SELECT(0,4), LJ_ENDIAN_SELECT(4,0));
7050#endif 7051#endif
7051 break; 7052 break;
7052 case BC_KSHORT: 7053 case BC_KSHORT:
7053 dasm_put(Dst, 4420); 7054 dasm_put(Dst, 4421);
7054 break; 7055 break;
7055 case BC_KNUM: 7056 case BC_KNUM:
7056 dasm_put(Dst, 4437); 7057 dasm_put(Dst, 4438);
7057 break; 7058 break;
7058 case BC_KPRI: 7059 case BC_KPRI:
7059 dasm_put(Dst, 4453, LJ_ENDIAN_SELECT(4,0)); 7060 dasm_put(Dst, 4454, LJ_ENDIAN_SELECT(4,0));
7060 break; 7061 break;
7061 case BC_KNIL: 7062 case BC_KNIL:
7062 dasm_put(Dst, 4470, LJ_ENDIAN_SELECT(4,0), LJ_ENDIAN_SELECT(4,0)); 7063 dasm_put(Dst, 4471, LJ_ENDIAN_SELECT(4,0), LJ_ENDIAN_SELECT(4,0));
7063 break; 7064 break;
7064 7065
7065 /* -- Upvalue and function ops ------------------------------------------ */ 7066 /* -- Upvalue and function ops ------------------------------------------ */
7066 7067
7067 case BC_UGET: 7068 case BC_UGET:
7068 dasm_put(Dst, 4494, LJ_ENDIAN_SELECT(-8,-4), Dt7(->uvptr), DtA(->v)); 7069 dasm_put(Dst, 4495, LJ_ENDIAN_SELECT(-8,-4), Dt7(->uvptr), DtA(->v));
7069 break; 7070 break;
7070 case BC_USETV: 7071 case BC_USETV:
7071 dasm_put(Dst, 4517, LJ_ENDIAN_SELECT(-8,-4), Dt7(->uvptr), DtA(->marked), DtA(->v), LJ_GC_BLACK, DtA(->closed), LJ_ENDIAN_SELECT(4,0), LJ_GC_BLACK|1, -(LJ_TISNUM+1), LJ_TISGCV - (LJ_TISNUM+1), LJ_ENDIAN_SELECT(0,4), Dt4(->gch.marked), LJ_GC_WHITES, DISPATCH_GOT(lj_gc_barrieruv), GG_DISP2G); 7072 dasm_put(Dst, 4518, LJ_ENDIAN_SELECT(-8,-4), Dt7(->uvptr), DtA(->marked), DtA(->v), LJ_GC_BLACK, DtA(->closed), LJ_ENDIAN_SELECT(4,0), LJ_GC_BLACK|1, -(LJ_TISNUM+1), LJ_TISGCV - (LJ_TISNUM+1), LJ_ENDIAN_SELECT(0,4), Dt4(->gch.marked), LJ_GC_WHITES, DISPATCH_GOT(lj_gc_barrieruv), GG_DISP2G);
7072 break; 7073 break;
7073 case BC_USETS: 7074 case BC_USETS:
7074 dasm_put(Dst, 4577, LJ_ENDIAN_SELECT(-8,-4), Dt7(->uvptr), DtA(->marked), DtA(->v), Dt5(->marked), LJ_GC_BLACK, DtA(->closed), LJ_TSTR, LJ_ENDIAN_SELECT(0,4), LJ_ENDIAN_SELECT(4,0), LJ_GC_WHITES, DISPATCH_GOT(lj_gc_barrieruv), GG_DISP2G); 7075 dasm_put(Dst, 4578, LJ_ENDIAN_SELECT(-8,-4), Dt7(->uvptr), DtA(->marked), DtA(->v), Dt5(->marked), LJ_GC_BLACK, DtA(->closed), LJ_TSTR, LJ_ENDIAN_SELECT(0,4), LJ_ENDIAN_SELECT(4,0), LJ_GC_WHITES, DISPATCH_GOT(lj_gc_barrieruv), GG_DISP2G);
7075 break; 7076 break;
7076 case BC_USETN: 7077 case BC_USETN:
7077 dasm_put(Dst, 4632, LJ_ENDIAN_SELECT(-8,-4), Dt7(->uvptr), DtA(->v)); 7078 dasm_put(Dst, 4633, LJ_ENDIAN_SELECT(-8,-4), Dt7(->uvptr), DtA(->v));
7078 break; 7079 break;
7079 case BC_USETP: 7080 case BC_USETP:
7080 dasm_put(Dst, 4655, LJ_ENDIAN_SELECT(-8,-4), Dt7(->uvptr), DtA(->v), LJ_ENDIAN_SELECT(4,0)); 7081 dasm_put(Dst, 4656, LJ_ENDIAN_SELECT(-8,-4), Dt7(->uvptr), DtA(->v), LJ_ENDIAN_SELECT(4,0));
7081 break; 7082 break;
7082 7083
7083 case BC_UCLO: 7084 case BC_UCLO:
7084 dasm_put(Dst, 4679, Dt1(->openupval), (-(BCBIAS_J*4 >> 16) & 65535), DISPATCH_GOT(lj_func_closeuv), Dt1(->base), Dt1(->base)); 7085 dasm_put(Dst, 4680, Dt1(->openupval), (-(BCBIAS_J*4 >> 16) & 65535), DISPATCH_GOT(lj_func_closeuv), Dt1(->base), Dt1(->base));
7085 break; 7086 break;
7086 7087
7087 case BC_FNEW: 7088 case BC_FNEW:
7088 dasm_put(Dst, 4710, DISPATCH_GOT(lj_func_newL_gc), LJ_ENDIAN_SELECT(-8,-4), Dt1(->base), Dt1(->base), LJ_TFUNC, LJ_ENDIAN_SELECT(4,0), LJ_ENDIAN_SELECT(0,4)); 7089 dasm_put(Dst, 4711, DISPATCH_GOT(lj_func_newL_gc), LJ_ENDIAN_SELECT(-8,-4), Dt1(->base), Dt1(->base), LJ_TFUNC, LJ_ENDIAN_SELECT(4,0), LJ_ENDIAN_SELECT(0,4));
7089 break; 7090 break;
7090 7091
7091 /* -- Table ops --------------------------------------------------------- */ 7092 /* -- Table ops --------------------------------------------------------- */
7092 7093
7093 case BC_TNEW: 7094 case BC_TNEW:
7094 case BC_TDUP: 7095 case BC_TDUP:
7095 dasm_put(Dst, 4743, DISPATCH_GL(gc.total), DISPATCH_GL(gc.threshold), Dt1(->base)); 7096 dasm_put(Dst, 4744, DISPATCH_GL(gc.total), DISPATCH_GL(gc.threshold), Dt1(->base));
7096 if (op == BC_TNEW) { 7097 if (op == BC_TNEW) {
7097 dasm_put(Dst, 4755, DISPATCH_GOT(lj_tab_new)); 7098 dasm_put(Dst, 4756, DISPATCH_GOT(lj_tab_new));
7098 } else { 7099 } else {
7099 dasm_put(Dst, 4766, DISPATCH_GOT(lj_tab_dup)); 7100 dasm_put(Dst, 4767, DISPATCH_GOT(lj_tab_dup));
7100 } 7101 }
7101 dasm_put(Dst, 4774, Dt1(->base), LJ_TTAB, LJ_ENDIAN_SELECT(0,4), LJ_ENDIAN_SELECT(4,0), DISPATCH_GOT(lj_gc_step_fixtop)); 7102 dasm_put(Dst, 4775, Dt1(->base), LJ_TTAB, LJ_ENDIAN_SELECT(0,4), LJ_ENDIAN_SELECT(4,0), DISPATCH_GOT(lj_gc_step_fixtop));
7102 break; 7103 break;
7103 7104
7104 case BC_GGET: 7105 case BC_GGET:
7105 case BC_GSET: 7106 case BC_GSET:
7106 dasm_put(Dst, 4804, LJ_ENDIAN_SELECT(-8,-4), Dt7(->env)); 7107 dasm_put(Dst, 4805, LJ_ENDIAN_SELECT(-8,-4), Dt7(->env));
7107 if (op == BC_GGET) { 7108 if (op == BC_GGET) {
7108 dasm_put(Dst, 4812); 7109 dasm_put(Dst, 4813);
7109 } else { 7110 } else {
7110 dasm_put(Dst, 4815); 7111 dasm_put(Dst, 4816);
7111 } 7112 }
7112 dasm_put(Dst, 4818); 7113 dasm_put(Dst, 4819);
7113 break; 7114 break;
7114 7115
7115 case BC_TGETV: 7116 case BC_TGETV:
7116 dasm_put(Dst, 4820, LJ_ENDIAN_SELECT(4,0), LJ_ENDIAN_SELECT(4,0), LJ_ENDIAN_SELECT(0,4), LJ_TTAB, LJ_TISNUM, LJ_TSTR, Dt6(->asize), Dt6(->array), LJ_ENDIAN_SELECT(4,0), Dt6(->metatable), Dt6(->nomm), 1<<MM_index); 7117 dasm_put(Dst, 4821, LJ_ENDIAN_SELECT(4,0), LJ_ENDIAN_SELECT(4,0), LJ_ENDIAN_SELECT(0,4), LJ_TTAB, LJ_TISNUM, LJ_TSTR, Dt6(->asize), Dt6(->array), LJ_ENDIAN_SELECT(4,0), Dt6(->metatable), Dt6(->nomm), 1<<MM_index);
7117 dasm_put(Dst, 4895, LJ_ENDIAN_SELECT(0,4)); 7118 dasm_put(Dst, 4896, LJ_ENDIAN_SELECT(0,4));
7118 break; 7119 break;
7119 case BC_TGETS: 7120 case BC_TGETS:
7120 dasm_put(Dst, 4901, LJ_ENDIAN_SELECT(4,0), LJ_TTAB, LJ_ENDIAN_SELECT(0,4), Dt6(->hmask), Dt5(->hash), Dt6(->node), offsetof(Node, key)+LJ_ENDIAN_SELECT(4,0), offsetof(Node, key)+LJ_ENDIAN_SELECT(0,4), DtB(->next), offsetof(Node, val)+LJ_ENDIAN_SELECT(4,0), -LJ_TSTR, Dt6(->metatable), offsetof(Node, val)+LJ_ENDIAN_SELECT(0,4), LJ_ENDIAN_SELECT(4,0), LJ_ENDIAN_SELECT(0,4)); 7121 dasm_put(Dst, 4902, LJ_ENDIAN_SELECT(4,0), LJ_TTAB, LJ_ENDIAN_SELECT(0,4), Dt6(->hmask), Dt5(->hash), Dt6(->node), offsetof(Node, key)+LJ_ENDIAN_SELECT(4,0), offsetof(Node, key)+LJ_ENDIAN_SELECT(0,4), DtB(->next), offsetof(Node, val)+LJ_ENDIAN_SELECT(4,0), -LJ_TSTR, Dt6(->metatable), offsetof(Node, val)+LJ_ENDIAN_SELECT(0,4), LJ_ENDIAN_SELECT(4,0), LJ_ENDIAN_SELECT(0,4));
7121 dasm_put(Dst, 4970, LJ_TNIL, Dt6(->nomm), 1<<MM_index); 7122 dasm_put(Dst, 4971, LJ_TNIL, Dt6(->nomm), 1<<MM_index);
7122 break; 7123 break;
7123 case BC_TGETB: 7124 case BC_TGETB:
7124 dasm_put(Dst, 4987, LJ_ENDIAN_SELECT(4,0), LJ_TTAB, LJ_ENDIAN_SELECT(0,4), Dt6(->asize), Dt6(->array), LJ_ENDIAN_SELECT(4,0), Dt6(->metatable), Dt6(->nomm), 1<<MM_index); 7125 dasm_put(Dst, 4988, LJ_ENDIAN_SELECT(4,0), LJ_TTAB, LJ_ENDIAN_SELECT(0,4), Dt6(->asize), Dt6(->array), LJ_ENDIAN_SELECT(4,0), Dt6(->metatable), Dt6(->nomm), 1<<MM_index);
7125 break; 7126 break;
7126 7127
7127 case BC_TSETV: 7128 case BC_TSETV:
7128 dasm_put(Dst, 5044, LJ_ENDIAN_SELECT(4,0), LJ_ENDIAN_SELECT(4,0), LJ_ENDIAN_SELECT(0,4), LJ_TTAB, LJ_TISNUM, LJ_TSTR, Dt6(->asize), Dt6(->array), Dt6(->marked), LJ_ENDIAN_SELECT(4,0), LJ_GC_BLACK, Dt6(->metatable), Dt6(->nomm), 1<<MM_newindex); 7129 dasm_put(Dst, 5045, LJ_ENDIAN_SELECT(4,0), LJ_ENDIAN_SELECT(4,0), LJ_ENDIAN_SELECT(0,4), LJ_TTAB, LJ_TISNUM, LJ_TSTR, Dt6(->asize), Dt6(->array), Dt6(->marked), LJ_ENDIAN_SELECT(4,0), LJ_GC_BLACK, Dt6(->metatable), Dt6(->nomm), 1<<MM_newindex);
7129 dasm_put(Dst, 5117, LJ_ENDIAN_SELECT(0,4), DISPATCH_GL(gc.grayagain), ~LJ_GC_BLACK & 255, DISPATCH_GL(gc.grayagain), Dt6(->marked), Dt6(->gclist)); 7130 dasm_put(Dst, 5118, LJ_ENDIAN_SELECT(0,4), DISPATCH_GL(gc.grayagain), ~LJ_GC_BLACK & 255, DISPATCH_GL(gc.grayagain), Dt6(->marked), Dt6(->gclist));
7130 break; 7131 break;
7131 case BC_TSETS: 7132 case BC_TSETS:
7132 dasm_put(Dst, 5145, LJ_ENDIAN_SELECT(4,0), LJ_TTAB, LJ_ENDIAN_SELECT(0,4), Dt6(->hmask), Dt5(->hash), Dt6(->node), Dt6(->nomm), offsetof(Node, key)+LJ_ENDIAN_SELECT(4,0), offsetof(Node, key)+LJ_ENDIAN_SELECT(0,4), LJ_TSTR, DtB(->next), offsetof(Node, val)+LJ_ENDIAN_SELECT(4,0), Dt6(->marked), Dt6(->metatable), LJ_GC_BLACK); 7133 dasm_put(Dst, 5146, LJ_ENDIAN_SELECT(4,0), LJ_TTAB, LJ_ENDIAN_SELECT(0,4), Dt6(->hmask), Dt5(->hash), Dt6(->node), Dt6(->nomm), offsetof(Node, key)+LJ_ENDIAN_SELECT(4,0), offsetof(Node, key)+LJ_ENDIAN_SELECT(0,4), LJ_TSTR, DtB(->next), offsetof(Node, val)+LJ_ENDIAN_SELECT(4,0), Dt6(->marked), Dt6(->metatable), LJ_GC_BLACK);
7133 dasm_put(Dst, 5203, DtB(->val), Dt6(->nomm), 1<<MM_newindex, Dt6(->metatable), DISPATCH_GL(tmptv), Dt6(->nomm), 1<<MM_newindex, LJ_TSTR, DISPATCH_GOT(lj_tab_newkey), LJ_ENDIAN_SELECT(0,4), LJ_ENDIAN_SELECT(4,0), Dt1(->base), Dt1(->base)); 7134 dasm_put(Dst, 5204, DtB(->val), Dt6(->nomm), 1<<MM_newindex, Dt6(->metatable), DISPATCH_GL(tmptv), Dt6(->nomm), 1<<MM_newindex, LJ_TSTR, DISPATCH_GOT(lj_tab_newkey), LJ_ENDIAN_SELECT(0,4), LJ_ENDIAN_SELECT(4,0), Dt1(->base), Dt1(->base));
7134 dasm_put(Dst, 5265, DISPATCH_GL(gc.grayagain), ~LJ_GC_BLACK & 255, DISPATCH_GL(gc.grayagain), Dt6(->marked), Dt6(->gclist)); 7135 dasm_put(Dst, 5266, DISPATCH_GL(gc.grayagain), ~LJ_GC_BLACK & 255, DISPATCH_GL(gc.grayagain), Dt6(->marked), Dt6(->gclist));
7135 break; 7136 break;
7136 case BC_TSETB: 7137 case BC_TSETB:
7137 dasm_put(Dst, 5282, LJ_ENDIAN_SELECT(4,0), LJ_TTAB, LJ_ENDIAN_SELECT(0,4), Dt6(->asize), Dt6(->array), LJ_ENDIAN_SELECT(4,0), Dt6(->marked), LJ_GC_BLACK, Dt6(->metatable), Dt6(->nomm), 1<<MM_newindex, DISPATCH_GL(gc.grayagain)); 7138 dasm_put(Dst, 5283, LJ_ENDIAN_SELECT(4,0), LJ_TTAB, LJ_ENDIAN_SELECT(0,4), Dt6(->asize), Dt6(->array), LJ_ENDIAN_SELECT(4,0), Dt6(->marked), LJ_GC_BLACK, Dt6(->metatable), Dt6(->nomm), 1<<MM_newindex, DISPATCH_GL(gc.grayagain));
7138 dasm_put(Dst, 5349, ~LJ_GC_BLACK & 255, DISPATCH_GL(gc.grayagain), Dt6(->marked), Dt6(->gclist)); 7139 dasm_put(Dst, 5350, ~LJ_GC_BLACK & 255, DISPATCH_GL(gc.grayagain), Dt6(->marked), Dt6(->gclist));
7139 break; 7140 break;
7140 7141
7141 case BC_TSETM: 7142 case BC_TSETM:
7142 dasm_put(Dst, 5360, -8+LJ_ENDIAN_SELECT(0,4), LJ_ENDIAN_SELECT(0,4), Dt6(->asize), Dt6(->marked), Dt6(->array), LJ_GC_BLACK, DISPATCH_GOT(lj_tab_reasize), Dt1(->base), Dt1(->base), DISPATCH_GL(gc.grayagain), ~LJ_GC_BLACK & 255, DISPATCH_GL(gc.grayagain), Dt6(->marked)); 7143 dasm_put(Dst, 5361, -8+LJ_ENDIAN_SELECT(0,4), LJ_ENDIAN_SELECT(0,4), Dt6(->asize), Dt6(->marked), Dt6(->array), LJ_GC_BLACK, DISPATCH_GOT(lj_tab_reasize), Dt1(->base), Dt1(->base), DISPATCH_GL(gc.grayagain), ~LJ_GC_BLACK & 255, DISPATCH_GL(gc.grayagain), Dt6(->marked));
7143 dasm_put(Dst, 5433, Dt6(->gclist)); 7144 dasm_put(Dst, 5434, Dt6(->gclist));
7144 break; 7145 break;
7145 7146
7146 /* -- Calls and vararg handling ----------------------------------------- */ 7147 /* -- Calls and vararg handling ----------------------------------------- */
7147 7148
7148 case BC_CALLM: 7149 case BC_CALLM:
7149 dasm_put(Dst, 5438); 7150 dasm_put(Dst, 5439);
7150 break; 7151 break;
7151 case BC_CALL: 7152 case BC_CALL:
7152 dasm_put(Dst, 5443, LJ_TFUNC, LJ_ENDIAN_SELECT(4,0), LJ_ENDIAN_SELECT(0,4), LJ_ENDIAN_SELECT(-4,-8), Dt7(->pc)); 7153 dasm_put(Dst, 5444, LJ_TFUNC, LJ_ENDIAN_SELECT(4,0), LJ_ENDIAN_SELECT(0,4), LJ_ENDIAN_SELECT(-4,-8), Dt7(->pc));
7153 break; 7154 break;
7154 7155
7155 case BC_CALLMT: 7156 case BC_CALLMT:
7156 dasm_put(Dst, 5472); 7157 dasm_put(Dst, 5473);
7157 break; 7158 break;
7158 case BC_CALLT: 7159 case BC_CALLT:
7159 dasm_put(Dst, 5474, LJ_TFUNC, LJ_ENDIAN_SELECT(4,0), LJ_ENDIAN_SELECT(0,4), LJ_ENDIAN_SELECT(-4,-8), FRAME_TYPE, Dt7(->ffid), FRAME_VARG, LJ_ENDIAN_SELECT(-8,-4), Dt7(->pc), -8+LJ_ENDIAN_SELECT(-8,-4), Dt7(->pc)); 7160 dasm_put(Dst, 5475, LJ_TFUNC, LJ_ENDIAN_SELECT(4,0), LJ_ENDIAN_SELECT(0,4), LJ_ENDIAN_SELECT(-4,-8), FRAME_TYPE, Dt7(->ffid), FRAME_VARG, LJ_ENDIAN_SELECT(-8,-4), Dt7(->pc), -8+LJ_ENDIAN_SELECT(-8,-4), Dt7(->pc));
7160 dasm_put(Dst, 5543, PC2PROTO(k), FRAME_TYPEP, LJ_ENDIAN_SELECT(-4,-8), FRAME_TYPE); 7161 dasm_put(Dst, 5544, PC2PROTO(k), FRAME_TYPEP, LJ_ENDIAN_SELECT(-4,-8), FRAME_TYPE);
7161 break; 7162 break;
7162 7163
7163 case BC_ITERC: 7164 case BC_ITERC:
7164 dasm_put(Dst, 5559, LJ_TFUNC, -24+LJ_ENDIAN_SELECT(4,0), -24+LJ_ENDIAN_SELECT(0,4), LJ_ENDIAN_SELECT(4,0), LJ_ENDIAN_SELECT(0,4), LJ_ENDIAN_SELECT(-4,-8), Dt7(->pc)); 7165 dasm_put(Dst, 5560, LJ_TFUNC, -24+LJ_ENDIAN_SELECT(4,0), -24+LJ_ENDIAN_SELECT(0,4), LJ_ENDIAN_SELECT(4,0), LJ_ENDIAN_SELECT(0,4), LJ_ENDIAN_SELECT(-4,-8), Dt7(->pc));
7165 break; 7166 break;
7166 7167
7167 case BC_ITERN: 7168 case BC_ITERN:
7168#if LJ_HASJIT 7169#if LJ_HASJIT
7169#endif 7170#endif
7170 dasm_put(Dst, 5594, -16+LJ_ENDIAN_SELECT(0,4), -8+LJ_ENDIAN_SELECT(0,4), Dt6(->asize), Dt6(->array), LJ_ENDIAN_SELECT(4,0), -4+LJ_ENDIAN_SELECT(2,0), (-(BCBIAS_J*4 >> 16) & 65535), -8+LJ_ENDIAN_SELECT(0,4), Dt6(->hmask), Dt6(->node), LJ_ENDIAN_SELECT(4,0), -4+LJ_ENDIAN_SELECT(2,0), DtB(->key), (-(BCBIAS_J*4 >> 16) & 65535)); 7171 dasm_put(Dst, 5595, -16+LJ_ENDIAN_SELECT(0,4), -8+LJ_ENDIAN_SELECT(0,4), Dt6(->asize), Dt6(->array), LJ_ENDIAN_SELECT(4,0), -4+LJ_ENDIAN_SELECT(2,0), (-(BCBIAS_J*4 >> 16) & 65535), -8+LJ_ENDIAN_SELECT(0,4), Dt6(->hmask), Dt6(->node), LJ_ENDIAN_SELECT(4,0), -4+LJ_ENDIAN_SELECT(2,0), DtB(->key), (-(BCBIAS_J*4 >> 16) & 65535));
7171 dasm_put(Dst, 5676, -8+LJ_ENDIAN_SELECT(0,4)); 7172 dasm_put(Dst, 5677, -8+LJ_ENDIAN_SELECT(0,4));
7172 break; 7173 break;
7173 7174
7174 case BC_ISNEXT: 7175 case BC_ISNEXT:
7175 dasm_put(Dst, 5679, -24+LJ_ENDIAN_SELECT(4,0), -24+LJ_ENDIAN_SELECT(0,4), -16+LJ_ENDIAN_SELECT(4,0), -8+LJ_ENDIAN_SELECT(4,0), LJ_TFUNC, -LJ_TTAB, Dt8(->ffid), -LJ_TNIL, -FF_next_N, (-(BCBIAS_J*4 >> 16) & 65535), -8+LJ_ENDIAN_SELECT(0,4), BC_JMP, BC_ITERC, -4+LJ_ENDIAN_SELECT(0,3), LJ_ENDIAN_SELECT(0,3)); 7176 dasm_put(Dst, 5680, -24+LJ_ENDIAN_SELECT(4,0), -24+LJ_ENDIAN_SELECT(0,4), -16+LJ_ENDIAN_SELECT(4,0), -8+LJ_ENDIAN_SELECT(4,0), LJ_TFUNC, -LJ_TTAB, Dt8(->ffid), -LJ_TNIL, -FF_next_N, (-(BCBIAS_J*4 >> 16) & 65535), -8+LJ_ENDIAN_SELECT(0,4), BC_JMP, BC_ITERC, -4+LJ_ENDIAN_SELECT(0,3), LJ_ENDIAN_SELECT(0,3));
7176 break; 7177 break;
7177 7178
7178 case BC_VARG: 7179 case BC_VARG:
7179 dasm_put(Dst, 5736, LJ_ENDIAN_SELECT(-4,-8), FRAME_VARG, LJ_ENDIAN_SELECT(4,0), LJ_ENDIAN_SELECT(0,4), LJ_ENDIAN_SELECT(4,0), LJ_ENDIAN_SELECT(0,4), Dt1(->maxstack), DISPATCH_GOT(lj_state_growstack), Dt1(->top), Dt1(->base), Dt1(->base)); 7180 dasm_put(Dst, 5737, LJ_ENDIAN_SELECT(-4,-8), FRAME_VARG, LJ_ENDIAN_SELECT(4,0), LJ_ENDIAN_SELECT(0,4), LJ_ENDIAN_SELECT(4,0), LJ_ENDIAN_SELECT(0,4), Dt1(->maxstack), DISPATCH_GOT(lj_state_growstack), Dt1(->top), Dt1(->base), Dt1(->base));
7180 dasm_put(Dst, 5823); 7181 dasm_put(Dst, 5824);
7181 break; 7182 break;
7182 7183
7183 /* -- Returns ----------------------------------------------------------- */ 7184 /* -- Returns ----------------------------------------------------------- */
7184 7185
7185 case BC_RETM: 7186 case BC_RETM:
7186 dasm_put(Dst, 5825); 7187 dasm_put(Dst, 5826);
7187 break; 7188 break;
7188 7189
7189 case BC_RET: 7190 case BC_RET:
7190 dasm_put(Dst, 5827, LJ_ENDIAN_SELECT(-4,-8), FRAME_TYPE, FRAME_VARG, LJ_ENDIAN_SELECT(-8,-4), Dt7(->pc), PC2PROTO(k), LJ_ENDIAN_SELECT(4,0), FRAME_TYPEP, LJ_ENDIAN_SELECT(-4,-8)); 7191 dasm_put(Dst, 5828, LJ_ENDIAN_SELECT(-4,-8), FRAME_TYPE, FRAME_VARG, LJ_ENDIAN_SELECT(-8,-4), Dt7(->pc), PC2PROTO(k), LJ_ENDIAN_SELECT(4,0), FRAME_TYPEP, LJ_ENDIAN_SELECT(-4,-8));
7191 break; 7192 break;
7192 7193
7193 case BC_RET0: case BC_RET1: 7194 case BC_RET0: case BC_RET1:
7194 dasm_put(Dst, 5899, LJ_ENDIAN_SELECT(-4,-8), FRAME_TYPE, FRAME_VARG); 7195 dasm_put(Dst, 5900, LJ_ENDIAN_SELECT(-4,-8), FRAME_TYPE, FRAME_VARG);
7195 if (op == BC_RET1) { 7196 if (op == BC_RET1) {
7196 dasm_put(Dst, 5912); 7197 dasm_put(Dst, 5913);
7197 } 7198 }
7198 dasm_put(Dst, 5914); 7199 dasm_put(Dst, 5915);
7199 if (op == BC_RET1) { 7200 if (op == BC_RET1) {
7200 dasm_put(Dst, 5919); 7201 dasm_put(Dst, 5920);
7201 } 7202 }
7202 dasm_put(Dst, 5921, LJ_ENDIAN_SELECT(-8,-4), Dt7(->pc), PC2PROTO(k)); 7203 dasm_put(Dst, 5922, LJ_ENDIAN_SELECT(-8,-4), Dt7(->pc), PC2PROTO(k));
7203 if (op == BC_RET1) { 7204 if (op == BC_RET1) {
7204 dasm_put(Dst, 5949, LJ_ENDIAN_SELECT(4,0)); 7205 dasm_put(Dst, 5950, LJ_ENDIAN_SELECT(4,0));
7205 } else { 7206 } else {
7206 dasm_put(Dst, 5952, -8+LJ_ENDIAN_SELECT(4,0)); 7207 dasm_put(Dst, 5953, -8+LJ_ENDIAN_SELECT(4,0));
7207 } 7208 }
7208 break; 7209 break;
7209 7210
@@ -7211,7 +7212,7 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop)
7211 7212
7212 case BC_FORL: 7213 case BC_FORL:
7213#if LJ_HASJIT 7214#if LJ_HASJIT
7214 dasm_put(Dst, 5955, GG_DISP2HOT, -HOTCOUNT_LOOP, GG_DISP2HOT); 7215 dasm_put(Dst, 5956, GG_DISP2HOT, -HOTCOUNT_LOOP, GG_DISP2HOT);
7215#endif 7216#endif
7216 break; 7217 break;
7217 7218
@@ -7223,35 +7224,35 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop)
7223 case BC_FORI: 7224 case BC_FORI:
7224 case BC_IFORL: 7225 case BC_IFORL:
7225 vk = (op == BC_IFORL || op == BC_JFORL); 7226 vk = (op == BC_IFORL || op == BC_JFORL);
7226 dasm_put(Dst, 5967); 7227 dasm_put(Dst, 5968);
7227 if (vk) { 7228 if (vk) {
7228 dasm_put(Dst, 5969, FORL_IDX*8, FORL_STEP*8, FORL_STOP*8, FORL_STEP*8+LJ_ENDIAN_SELECT(4,0), FORL_IDX*8); 7229 dasm_put(Dst, 5970, FORL_IDX*8, FORL_STEP*8, FORL_STOP*8, FORL_STEP*8+LJ_ENDIAN_SELECT(4,0), FORL_IDX*8);
7229 } else { 7230 } else {
7230 dasm_put(Dst, 5981, FORL_IDX*8+LJ_ENDIAN_SELECT(4,0), FORL_STEP*8+LJ_ENDIAN_SELECT(4,0), FORL_STOP*8+LJ_ENDIAN_SELECT(4,0), LJ_TISNUM, LJ_TISNUM, LJ_TISNUM, FORL_IDX*8, FORL_STOP*8); 7231 dasm_put(Dst, 5982, FORL_IDX*8+LJ_ENDIAN_SELECT(4,0), FORL_STEP*8+LJ_ENDIAN_SELECT(4,0), FORL_STOP*8+LJ_ENDIAN_SELECT(4,0), LJ_TISNUM, LJ_TISNUM, LJ_TISNUM, FORL_IDX*8, FORL_STOP*8);
7231 } 7232 }
7232 if (op != BC_JFORL) { 7233 if (op != BC_JFORL) {
7233 dasm_put(Dst, 6002, (-(BCBIAS_J*4 >> 16) & 65535)); 7234 dasm_put(Dst, 6003, (-(BCBIAS_J*4 >> 16) & 65535));
7234 } 7235 }
7235 dasm_put(Dst, 6006, FORL_EXT*8); 7236 dasm_put(Dst, 6007, FORL_EXT*8);
7236 if (op == BC_JFORI) { 7237 if (op == BC_JFORI) {
7237 dasm_put(Dst, 6011, -4+LJ_ENDIAN_SELECT(2,0), BC_JLOOP); 7238 dasm_put(Dst, 6012, -4+LJ_ENDIAN_SELECT(2,0), BC_JLOOP);
7238 } else if (op == BC_JFORL) { 7239 } else if (op == BC_JFORL) {
7239 dasm_put(Dst, 6025, BC_JLOOP); 7240 dasm_put(Dst, 6026, BC_JLOOP);
7240 } else { 7241 } else {
7241 dasm_put(Dst, 6035); 7242 dasm_put(Dst, 6036);
7242 if (op == BC_FORI) { 7243 if (op == BC_FORI) {
7243 dasm_put(Dst, 6039); 7244 dasm_put(Dst, 6040);
7244 } else { 7245 } else {
7245 dasm_put(Dst, 6042); 7246 dasm_put(Dst, 6043);
7246 } 7247 }
7247 dasm_put(Dst, 6045); 7248 dasm_put(Dst, 6046);
7248 } 7249 }
7249 dasm_put(Dst, 6048); 7250 dasm_put(Dst, 6049);
7250 break; 7251 break;
7251 7252
7252 case BC_ITERL: 7253 case BC_ITERL:
7253#if LJ_HASJIT 7254#if LJ_HASJIT
7254 dasm_put(Dst, 6060, GG_DISP2HOT, -HOTCOUNT_LOOP, GG_DISP2HOT); 7255 dasm_put(Dst, 6061, GG_DISP2HOT, -HOTCOUNT_LOOP, GG_DISP2HOT);
7255#endif 7256#endif
7256 break; 7257 break;
7257 7258
@@ -7260,40 +7261,40 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop)
7260 break; 7261 break;
7261#endif 7262#endif
7262 case BC_IITERL: 7263 case BC_IITERL:
7263 dasm_put(Dst, 6072, LJ_ENDIAN_SELECT(4,0), LJ_ENDIAN_SELECT(0,4)); 7264 dasm_put(Dst, 6073, LJ_ENDIAN_SELECT(4,0), LJ_ENDIAN_SELECT(0,4));
7264 if (op == BC_JITERL) { 7265 if (op == BC_JITERL) {
7265 dasm_put(Dst, 6080, -8+LJ_ENDIAN_SELECT(4,0), BC_JLOOP, -8+LJ_ENDIAN_SELECT(0,4)); 7266 dasm_put(Dst, 6081, -8+LJ_ENDIAN_SELECT(4,0), BC_JLOOP, -8+LJ_ENDIAN_SELECT(0,4));
7266 } else { 7267 } else {
7267 dasm_put(Dst, 6087, (-(BCBIAS_J*4 >> 16) & 65535), -8+LJ_ENDIAN_SELECT(4,0), -8+LJ_ENDIAN_SELECT(0,4)); 7268 dasm_put(Dst, 6088, (-(BCBIAS_J*4 >> 16) & 65535), -8+LJ_ENDIAN_SELECT(4,0), -8+LJ_ENDIAN_SELECT(0,4));
7268 } 7269 }
7269 dasm_put(Dst, 6097); 7270 dasm_put(Dst, 6098);
7270 break; 7271 break;
7271 7272
7272 case BC_LOOP: 7273 case BC_LOOP:
7273#if LJ_HASJIT 7274#if LJ_HASJIT
7274 dasm_put(Dst, 6110, GG_DISP2HOT, -HOTCOUNT_LOOP, GG_DISP2HOT); 7275 dasm_put(Dst, 6111, GG_DISP2HOT, -HOTCOUNT_LOOP, GG_DISP2HOT);
7275#endif 7276#endif
7276 break; 7277 break;
7277 7278
7278 case BC_ILOOP: 7279 case BC_ILOOP:
7279 dasm_put(Dst, 6122); 7280 dasm_put(Dst, 6123);
7280 break; 7281 break;
7281 7282
7282 case BC_JLOOP: 7283 case BC_JLOOP:
7283#if LJ_HASJIT 7284#if LJ_HASJIT
7284 dasm_put(Dst, 6134, DISPATCH_J(trace), DISPATCH_GL(vmstate), DISPATCH_GL(jit_base), DISPATCH_GL(jit_L), DtD(->mcode), GG_DISP2G+32768); 7285 dasm_put(Dst, 6135, DISPATCH_J(trace), DISPATCH_GL(vmstate), DISPATCH_GL(jit_base), DISPATCH_GL(jit_L), DtD(->mcode), GG_DISP2G+32768);
7285#endif 7286#endif
7286 break; 7287 break;
7287 7288
7288 case BC_JMP: 7289 case BC_JMP:
7289 dasm_put(Dst, 6152, (-(BCBIAS_J*4 >> 16) & 65535)); 7290 dasm_put(Dst, 6153, (-(BCBIAS_J*4 >> 16) & 65535));
7290 break; 7291 break;
7291 7292
7292 /* -- Function headers -------------------------------------------------- */ 7293 /* -- Function headers -------------------------------------------------- */
7293 7294
7294 case BC_FUNCF: 7295 case BC_FUNCF:
7295#if LJ_HASJIT 7296#if LJ_HASJIT
7296 dasm_put(Dst, 6169, GG_DISP2HOT, -HOTCOUNT_CALL, GG_DISP2HOT); 7297 dasm_put(Dst, 6170, GG_DISP2HOT, -HOTCOUNT_CALL, GG_DISP2HOT);
7297#endif 7298#endif
7298 case BC_FUNCV: /* NYI: compiled vararg functions. */ 7299 case BC_FUNCV: /* NYI: compiled vararg functions. */
7299 break; 7300 break;
@@ -7303,42 +7304,42 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop)
7303 break; 7304 break;
7304#endif 7305#endif
7305 case BC_IFUNCF: 7306 case BC_IFUNCF:
7306 dasm_put(Dst, 6181, Dt1(->maxstack), -4+PC2PROTO(numparams), -4+PC2PROTO(k)); 7307 dasm_put(Dst, 6182, Dt1(->maxstack), -4+PC2PROTO(numparams), -4+PC2PROTO(k));
7307 if (op != BC_JFUNCF) { 7308 if (op != BC_JFUNCF) {
7308 dasm_put(Dst, 6192); 7309 dasm_put(Dst, 6193);
7309 } 7310 }
7310 dasm_put(Dst, 6195); 7311 dasm_put(Dst, 6196);
7311 if (op == BC_JFUNCF) { 7312 if (op == BC_JFUNCF) {
7312 dasm_put(Dst, 6201, BC_JLOOP); 7313 dasm_put(Dst, 6202, BC_JLOOP);
7313 } else { 7314 } else {
7314 dasm_put(Dst, 6206); 7315 dasm_put(Dst, 6207);
7315 } 7316 }
7316 dasm_put(Dst, 6216, LJ_ENDIAN_SELECT(4,0)); 7317 dasm_put(Dst, 6217, LJ_ENDIAN_SELECT(4,0));
7317 break; 7318 break;
7318 7319
7319 case BC_JFUNCV: 7320 case BC_JFUNCV:
7320#if !LJ_HASJIT 7321#if !LJ_HASJIT
7321 break; 7322 break;
7322#endif 7323#endif
7323 dasm_put(Dst, 6223); 7324 dasm_put(Dst, 6224);
7324 break; /* NYI: compiled vararg functions. */ 7325 break; /* NYI: compiled vararg functions. */
7325 7326
7326 case BC_IFUNCV: 7327 case BC_IFUNCV:
7327 dasm_put(Dst, 6225, Dt1(->maxstack), LJ_ENDIAN_SELECT(0,4), 8+FRAME_VARG, -4+PC2PROTO(k), LJ_ENDIAN_SELECT(4,0), -4+PC2PROTO(numparams), LJ_ENDIAN_SELECT(4,0), LJ_ENDIAN_SELECT(0,4), 8+LJ_ENDIAN_SELECT(0,4), 8+LJ_ENDIAN_SELECT(4,0), LJ_ENDIAN_SELECT(4,0)); 7328 dasm_put(Dst, 6226, Dt1(->maxstack), LJ_ENDIAN_SELECT(0,4), 8+FRAME_VARG, -4+PC2PROTO(k), LJ_ENDIAN_SELECT(4,0), -4+PC2PROTO(numparams), LJ_ENDIAN_SELECT(4,0), LJ_ENDIAN_SELECT(0,4), 8+LJ_ENDIAN_SELECT(0,4), 8+LJ_ENDIAN_SELECT(4,0), LJ_ENDIAN_SELECT(4,0));
7328 break; 7329 break;
7329 7330
7330 case BC_FUNCC: 7331 case BC_FUNCC:
7331 case BC_FUNCCW: 7332 case BC_FUNCCW:
7332 if (op == BC_FUNCC) { 7333 if (op == BC_FUNCC) {
7333 dasm_put(Dst, 6280, Dt8(->f)); 7334 dasm_put(Dst, 6281, Dt8(->f));
7334 } else { 7335 } else {
7335 dasm_put(Dst, 6283, DISPATCH_GL(wrapf)); 7336 dasm_put(Dst, 6284, DISPATCH_GL(wrapf));
7336 } 7337 }
7337 dasm_put(Dst, 6286, Dt1(->maxstack), Dt1(->base), Dt1(->top), ~LJ_VMST_C); 7338 dasm_put(Dst, 6287, Dt1(->maxstack), Dt1(->base), Dt1(->top), ~LJ_VMST_C);
7338 if (op == BC_FUNCCW) { 7339 if (op == BC_FUNCCW) {
7339 dasm_put(Dst, 6298, Dt8(->f)); 7340 dasm_put(Dst, 6299, Dt8(->f));
7340 } 7341 }
7341 dasm_put(Dst, 6301, DISPATCH_GL(vmstate), Dt1(->base), Dt1(->top), ~LJ_VMST_INTERP, LJ_ENDIAN_SELECT(-4,-8), DISPATCH_GL(vmstate)); 7342 dasm_put(Dst, 6302, DISPATCH_GL(vmstate), Dt1(->base), Dt1(->top), ~LJ_VMST_INTERP, LJ_ENDIAN_SELECT(-4,-8), DISPATCH_GL(vmstate));
7342 break; 7343 break;
7343 7344
7344 /* ---------------------------------------------------------------------- */ 7345 /* ---------------------------------------------------------------------- */
@@ -7358,7 +7359,7 @@ static int build_backend(BuildCtx *ctx)
7358 7359
7359 build_subroutines(ctx); 7360 build_subroutines(ctx);
7360 7361
7361 dasm_put(Dst, 6322); 7362 dasm_put(Dst, 6323);
7362 for (op = 0; op < BC__MAX; op++) 7363 for (op = 0; op < BC__MAX; op++)
7363 build_ins(ctx, (BCOp)op, op); 7364 build_ins(ctx, (BCOp)op, op);
7364 7365
diff --git a/src/buildvm_ppc.dasc b/src/buildvm_ppc.dasc
index 027e75b0..49f92d0a 100644
--- a/src/buildvm_ppc.dasc
+++ b/src/buildvm_ppc.dasc
@@ -2189,6 +2189,7 @@ static void build_subroutines(BuildCtx *ctx)
2189 | bne >3 2189 | bne >3
2190 | lwz INS, -4(PC) 2190 | lwz INS, -4(PC)
2191 | decode_RA8 TMP1, INS 2191 | decode_RA8 TMP1, INS
2192 | addi TMP1, TMP1, 8
2192 |3: 2193 |3:
2193 | sub TMP2, BASE, TMP1 2194 | sub TMP2, BASE, TMP1
2194 | b ->vm_call_dispatch // Resolve again for tailcall. 2195 | b ->vm_call_dispatch // Resolve again for tailcall.
diff --git a/src/buildvm_ppc.h b/src/buildvm_ppc.h
index 81285d63..ce0941ec 100644
--- a/src/buildvm_ppc.h
+++ b/src/buildvm_ppc.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 int build_actionlist[7762] = { 15static const unsigned int build_actionlist[7763] = {
160x00010001, 160x00010001,
170x00060014, 170x00060014,
180x72000000, 180x72000000,
@@ -3624,6 +3624,7 @@ static const unsigned int build_actionlist[7762] = {
36240x00050803, 36240x00050803,
36250x80f0fffc, 36250x80f0fffc,
36260x54e8dd78, 36260x54e8dd78,
36270x39080008,
36270x0006000d, 36280x0006000d,
36280x7d287050, 36290x7d287050,
36290x48000000, 36300x48000000,
@@ -8512,59 +8513,59 @@ static void build_subroutines(BuildCtx *ctx)
8512 dasm_put(Dst, 3550); 8513 dasm_put(Dst, 3550);
8513 } 8514 }
8514 dasm_put(Dst, 3558, Dt8(->f), 8*LUA_MINSTACK, Dt1(->maxstack), Dt1(->base), Dt1(->top), Dt1(->base), 31-3, Dt1(->top), Dt7(->pc), FRAME_TYPE, LUA_MINSTACK); 8515 dasm_put(Dst, 3558, Dt8(->f), 8*LUA_MINSTACK, Dt1(->maxstack), Dt1(->base), Dt1(->top), Dt1(->base), 31-3, Dt1(->top), Dt7(->pc), FRAME_TYPE, LUA_MINSTACK);
8515 dasm_put(Dst, 3621, Dt1(->base), Dt1(->base), Dt1(->top), Dt1(->base), Dt1(->top)); 8516 dasm_put(Dst, 3622, Dt1(->base), Dt1(->base), Dt1(->top), Dt1(->base), Dt1(->top));
8516#if LJ_HASJIT 8517#if LJ_HASJIT
8517 dasm_put(Dst, 3647, DISPATCH_GL(hookmask), HOOK_VMEVENT, DISPATCH_GL(hookcount), HOOK_ACTIVE, LUA_MASKLINE|LUA_MASKCOUNT, DISPATCH_GL(hookcount)); 8518 dasm_put(Dst, 3648, DISPATCH_GL(hookmask), HOOK_VMEVENT, DISPATCH_GL(hookcount), HOOK_ACTIVE, LUA_MASKLINE|LUA_MASKCOUNT, DISPATCH_GL(hookcount));
8518#endif 8519#endif
8519 dasm_put(Dst, 3669, DISPATCH_GL(hookmask), HOOK_ACTIVE, GG_DISP2STATIC, DISPATCH_GL(hookmask), DISPATCH_GL(hookcount), HOOK_ACTIVE, 31-LUA_HOOKLINE, DISPATCH_GL(hookcount), Dt1(->base), Dt1(->base)); 8520 dasm_put(Dst, 3670, DISPATCH_GL(hookmask), HOOK_ACTIVE, GG_DISP2STATIC, DISPATCH_GL(hookmask), DISPATCH_GL(hookcount), HOOK_ACTIVE, 31-LUA_HOOKLINE, DISPATCH_GL(hookcount), Dt1(->base), Dt1(->base));
8520 dasm_put(Dst, 3716, GG_DISP2STATIC); 8521 dasm_put(Dst, 3717, GG_DISP2STATIC);
8521#if LJ_HASJIT 8522#if LJ_HASJIT
8522 dasm_put(Dst, 3734, GG_DISP2J, Dt7(->pc), DISPATCH_J(L), PC2PROTO(framesize), Dt1(->base), 31-3, Dt1(->top)); 8523 dasm_put(Dst, 3735, GG_DISP2J, Dt7(->pc), DISPATCH_J(L), PC2PROTO(framesize), Dt1(->base), 31-3, Dt1(->top));
8523#endif 8524#endif
8524 dasm_put(Dst, 3757); 8525 dasm_put(Dst, 3758);
8525#if LJ_HASJIT 8526#if LJ_HASJIT
8526 dasm_put(Dst, 3760); 8527 dasm_put(Dst, 3761);
8527#endif 8528#endif
8528 dasm_put(Dst, 3763); 8529 dasm_put(Dst, 3764);
8529#if LJ_HASJIT 8530#if LJ_HASJIT
8530 dasm_put(Dst, 3765); 8531 dasm_put(Dst, 3766);
8531#endif 8532#endif
8532 dasm_put(Dst, 3768, Dt1(->base), Dt1(->top), Dt1(->base), Dt1(->top)); 8533 dasm_put(Dst, 3769, Dt1(->base), Dt1(->top), Dt1(->base), Dt1(->top));
8533#if LJ_HASJIT 8534#if LJ_HASJIT
8534 dasm_put(Dst, 3791, -(16+32*8+32*4), 16+32*8+2*4, -GG_DISP2G-32768, ~LJ_VMST_EXIT, 16+32*8+32*4, DISPATCH_GL(vmstate), 16+0*8, 16+1*8, 16+2*8, 16+3*8, 16+4*8, 16+5*8, 16+6*8, 16+7*8, 16+32*8+32*4, 16+8*8, 16+9*8, 16+10*8, 16+11*8, 16+32*8+1*4, 16+12*8, 16+13*8); 8535 dasm_put(Dst, 3792, -(16+32*8+32*4), 16+32*8+2*4, -GG_DISP2G-32768, ~LJ_VMST_EXIT, 16+32*8+32*4, DISPATCH_GL(vmstate), 16+0*8, 16+1*8, 16+2*8, 16+3*8, 16+4*8, 16+5*8, 16+6*8, 16+7*8, 16+32*8+32*4, 16+8*8, 16+9*8, 16+10*8, 16+11*8, 16+32*8+1*4, 16+12*8, 16+13*8);
8535 dasm_put(Dst, 3838, 16+14*8, 16+15*8, 16+16*8, 16+17*8, 16+18*8, 16+19*8, 16+32*8+0*4, 16+20*8, 16+21*8, 16+22*8, 16+23*8, 16+24*8, 16+25*8, 16+26*8, 16+27*8, DISPATCH_GL(jit_L), 16+28*8, 16+29*8, 16+30*8, 16+31*8, DISPATCH_GL(jit_base), 32-2); 8536 dasm_put(Dst, 3839, 16+14*8, 16+15*8, 16+16*8, 16+17*8, 16+18*8, 16+19*8, 16+32*8+0*4, 16+20*8, 16+21*8, 16+22*8, 16+23*8, 16+24*8, 16+25*8, 16+26*8, 16+27*8, DISPATCH_GL(jit_L), 16+28*8, 16+29*8, 16+30*8, 16+31*8, DISPATCH_GL(jit_base), 32-2);
8536 dasm_put(Dst, 3887, DISPATCH_J(L), DISPATCH_GL(jit_L), DISPATCH_J(parent), Dt1(->base), GG_DISP2J, DISPATCH_J(exitno), Dt1(->cframe), Dt1(->base)); 8537 dasm_put(Dst, 3888, DISPATCH_J(L), DISPATCH_GL(jit_L), DISPATCH_J(parent), Dt1(->base), GG_DISP2J, DISPATCH_J(exitno), Dt1(->cframe), Dt1(->base));
8537#endif 8538#endif
8538 dasm_put(Dst, 3915); 8539 dasm_put(Dst, 3916);
8539#if LJ_HASJIT 8540#if LJ_HASJIT
8540 dasm_put(Dst, 3917, -GG_DISP2G-32768, 31-3, Dt7(->pc), DISPATCH_GL(jit_L), PC2PROTO(k), LJ_TISNUM, LJ_TNIL, DISPATCH_GL(vmstate), BC_FUNCF*4); 8541 dasm_put(Dst, 3918, -GG_DISP2G-32768, 31-3, Dt7(->pc), DISPATCH_GL(jit_L), PC2PROTO(k), LJ_TISNUM, LJ_TNIL, DISPATCH_GL(vmstate), BC_FUNCF*4);
8541#endif 8542#endif
8542 dasm_put(Dst, 3974); 8543 dasm_put(Dst, 3975);
8543#if LJ_HASJIT 8544#if LJ_HASJIT
8544 dasm_put(Dst, 3982); 8545 dasm_put(Dst, 3983);
8545#endif 8546#endif
8546 dasm_put(Dst, 3985); 8547 dasm_put(Dst, 3986);
8547#if LJ_HASJIT 8548#if LJ_HASJIT
8548 dasm_put(Dst, 4065); 8549 dasm_put(Dst, 4066);
8549#else 8550#else
8550 dasm_put(Dst, 4087); 8551 dasm_put(Dst, 4088);
8551#endif 8552#endif
8552 dasm_put(Dst, 4089); 8553 dasm_put(Dst, 4090);
8553#if LJ_HASFFI 8554#if LJ_HASFFI
8554#define DtE(_V) (int)(ptrdiff_t)&(((CTState *)0)_V) 8555#define DtE(_V) (int)(ptrdiff_t)&(((CTState *)0)_V)
8555 dasm_put(Dst, 4113, 56+(14-14)*4, 128+(14-14)*8, 56+(15-14)*4, 128+(15-14)*8, 56+(16-14)*4, 128+(16-14)*8, 56+(17-14)*4, 128+(17-14)*8, 56+(18-14)*4, 128+(18-14)*8, 56+(19-14)*4, 128+(19-14)*8, 56+(20-14)*4, 128+(20-14)*8, 56+(21-14)*4, 128+(21-14)*8, 56+(22-14)*4, 128+(22-14)*8, 56+(23-14)*4, 128+(23-14)*8, 56+(24-14)*4, 128+(24-14)*8); 8556 dasm_put(Dst, 4114, 56+(14-14)*4, 128+(14-14)*8, 56+(15-14)*4, 128+(15-14)*8, 56+(16-14)*4, 128+(16-14)*8, 56+(17-14)*4, 128+(17-14)*8, 56+(18-14)*4, 128+(18-14)*8, 56+(19-14)*4, 128+(19-14)*8, 56+(20-14)*4, 128+(20-14)*8, 56+(21-14)*4, 128+(21-14)*8, 56+(22-14)*4, 128+(22-14)*8, 56+(23-14)*4, 128+(23-14)*8, 56+(24-14)*4, 128+(24-14)*8);
8556 dasm_put(Dst, 4161, 56+(25-14)*4, 128+(25-14)*8, 56+(26-14)*4, 128+(26-14)*8, 56+(27-14)*4, 128+(27-14)*8, 56+(28-14)*4, 128+(28-14)*8, 56+(29-14)*4, 128+(29-14)*8, 56+(30-14)*4, 128+(30-14)*8, 56+(31-14)*4, 128+(31-14)*8, Dt2(->ctype_state), GG_G2DISP, DtE(->cb.slot), DtE(->cb.gpr[0]), DtE(->cb.fpr[0]), DtE(->cb.gpr[1]), DtE(->cb.fpr[1]), DtE(->cb.gpr[2])); 8557 dasm_put(Dst, 4162, 56+(25-14)*4, 128+(25-14)*8, 56+(26-14)*4, 128+(26-14)*8, 56+(27-14)*4, 128+(27-14)*8, 56+(28-14)*4, 128+(28-14)*8, 56+(29-14)*4, 128+(29-14)*8, 56+(30-14)*4, 128+(30-14)*8, 56+(31-14)*4, 128+(31-14)*8, Dt2(->ctype_state), GG_G2DISP, DtE(->cb.slot), DtE(->cb.gpr[0]), DtE(->cb.fpr[0]), DtE(->cb.gpr[1]), DtE(->cb.fpr[1]), DtE(->cb.gpr[2]));
8557 dasm_put(Dst, 4208, DtE(->cb.fpr[2]), DtE(->cb.gpr[3]), DtE(->cb.fpr[3]), DtE(->cb.gpr[4]), DtE(->cb.fpr[4]), DtE(->cb.gpr[5]), DtE(->cb.fpr[5]), DtE(->cb.gpr[6]), DtE(->cb.fpr[6]), DtE(->cb.gpr[7]), DtE(->cb.fpr[7]), 272+8, DtE(->cb.stack), Dt1(->base), LJ_TISNUM, Dt1(->top), LJ_TNIL, ~LJ_VMST_INTERP, DISPATCH_GL(vmstate), Dt7(->pc)); 8558 dasm_put(Dst, 4209, DtE(->cb.fpr[2]), DtE(->cb.gpr[3]), DtE(->cb.fpr[3]), DtE(->cb.gpr[4]), DtE(->cb.fpr[4]), DtE(->cb.gpr[5]), DtE(->cb.fpr[5]), DtE(->cb.gpr[6]), DtE(->cb.fpr[6]), DtE(->cb.gpr[7]), DtE(->cb.fpr[7]), 272+8, DtE(->cb.stack), Dt1(->base), LJ_TISNUM, Dt1(->top), LJ_TNIL, ~LJ_VMST_INTERP, DISPATCH_GL(vmstate), Dt7(->pc));
8558#endif 8559#endif
8559 dasm_put(Dst, 4272); 8560 dasm_put(Dst, 4273);
8560#if LJ_HASFFI 8561#if LJ_HASFFI
8561 dasm_put(Dst, 4274, DISPATCH_GL(ctype_state), Dt1(->base), Dt1(->top), DtE(->L), DtE(->cb.gpr[0]), DtE(->cb.fpr[0]), DtE(->cb.gpr[1])); 8562 dasm_put(Dst, 4275, DISPATCH_GL(ctype_state), Dt1(->base), Dt1(->top), DtE(->L), DtE(->cb.gpr[0]), DtE(->cb.fpr[0]), DtE(->cb.gpr[1]));
8562#endif 8563#endif
8563 dasm_put(Dst, 4295); 8564 dasm_put(Dst, 4296);
8564#if LJ_HASFFI 8565#if LJ_HASFFI
8565#define DtF(_V) (int)(ptrdiff_t)&(((CCallState *)0)_V) 8566#define DtF(_V) (int)(ptrdiff_t)&(((CCallState *)0)_V)
8566 dasm_put(Dst, 4297, DtF(->spadj), DtF(->nsp), DtF(->nfpr), DtF(->stack), 31-2, DtF(->fpr[0]), DtF(->fpr[1]), DtF(->fpr[2]), DtF(->fpr[3]), DtF(->fpr[4]), DtF(->fpr[5]), DtF(->fpr[6]), DtF(->fpr[7]), DtF(->func), DtF(->gpr[1]), DtF(->gpr[2])); 8567 dasm_put(Dst, 4298, DtF(->spadj), DtF(->nsp), DtF(->nfpr), DtF(->stack), 31-2, DtF(->fpr[0]), DtF(->fpr[1]), DtF(->fpr[2]), DtF(->fpr[3]), DtF(->fpr[4]), DtF(->fpr[5]), DtF(->fpr[6]), DtF(->fpr[7]), DtF(->func), DtF(->gpr[1]), DtF(->gpr[2]));
8567 dasm_put(Dst, 4354, DtF(->gpr[3]), DtF(->gpr[4]), DtF(->gpr[5]), DtF(->gpr[6]), DtF(->gpr[7]), DtF(->gpr[0]), DtF(->gpr[0]), DtF(->fpr[0]), DtF(->gpr[1]), DtF(->gpr[2]), DtF(->gpr[3])); 8568 dasm_put(Dst, 4355, DtF(->gpr[3]), DtF(->gpr[4]), DtF(->gpr[5]), DtF(->gpr[6]), DtF(->gpr[7]), DtF(->gpr[0]), DtF(->gpr[0]), DtF(->fpr[0]), DtF(->gpr[1]), DtF(->gpr[2]), DtF(->gpr[3]));
8568#endif 8569#endif
8569} 8570}
8570 8571
@@ -8572,7 +8573,7 @@ static void build_subroutines(BuildCtx *ctx)
8572static void build_ins(BuildCtx *ctx, BCOp op, int defop) 8573static void build_ins(BuildCtx *ctx, BCOp op, int defop)
8573{ 8574{
8574 int vk = 0; 8575 int vk = 0;
8575 dasm_put(Dst, 4386, defop); 8576 dasm_put(Dst, 4387, defop);
8576 8577
8577 switch (op) { 8578 switch (op) {
8578 8579
@@ -8582,224 +8583,224 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop)
8582 8583
8583 case BC_ISLT: case BC_ISGE: case BC_ISLE: case BC_ISGT: 8584 case BC_ISLT: case BC_ISGE: case BC_ISLE: case BC_ISGT:
8584 if (LJ_DUALNUM) { 8585 if (LJ_DUALNUM) {
8585 dasm_put(Dst, 4388, -(BCBIAS_J*4 >> 16)); 8586 dasm_put(Dst, 4389, -(BCBIAS_J*4 >> 16));
8586 if (op == BC_ISLT) { 8587 if (op == BC_ISLT) {
8587 dasm_put(Dst, 4405); 8588 dasm_put(Dst, 4406);
8588 } else if (op == BC_ISGE) { 8589 } else if (op == BC_ISGE) {
8589 dasm_put(Dst, 4408); 8590 dasm_put(Dst, 4409);
8590 } else if (op == BC_ISLE) { 8591 } else if (op == BC_ISLE) {
8591 dasm_put(Dst, 4411); 8592 dasm_put(Dst, 4412);
8592 } else { 8593 } else {
8593 dasm_put(Dst, 4414); 8594 dasm_put(Dst, 4415);
8594 } 8595 }
8595 dasm_put(Dst, 4417); 8596 dasm_put(Dst, 4418);
8596 if (op == BC_ISLT) { 8597 if (op == BC_ISLT) {
8597 dasm_put(Dst, 4456); 8598 dasm_put(Dst, 4457);
8598 } else if (op == BC_ISGE) { 8599 } else if (op == BC_ISGE) {
8599 dasm_put(Dst, 4459); 8600 dasm_put(Dst, 4460);
8600 } else if (op == BC_ISLE) { 8601 } else if (op == BC_ISLE) {
8601 dasm_put(Dst, 4462); 8602 dasm_put(Dst, 4463);
8602 } else { 8603 } else {
8603 dasm_put(Dst, 4466); 8604 dasm_put(Dst, 4467);
8604 } 8605 }
8605 dasm_put(Dst, 4470); 8606 dasm_put(Dst, 4471);
8606 } else { 8607 } else {
8607 dasm_put(Dst, 4473, -(BCBIAS_J*4 >> 16)); 8608 dasm_put(Dst, 4474, -(BCBIAS_J*4 >> 16));
8608 if (op == BC_ISLT) { 8609 if (op == BC_ISLT) {
8609 dasm_put(Dst, 4490); 8610 dasm_put(Dst, 4491);
8610 } else if (op == BC_ISGE) { 8611 } else if (op == BC_ISGE) {
8611 dasm_put(Dst, 4493); 8612 dasm_put(Dst, 4494);
8612 } else if (op == BC_ISLE) { 8613 } else if (op == BC_ISLE) {
8613 dasm_put(Dst, 4496); 8614 dasm_put(Dst, 4497);
8614 } else { 8615 } else {
8615 dasm_put(Dst, 4500); 8616 dasm_put(Dst, 4501);
8616 } 8617 }
8617 dasm_put(Dst, 4504); 8618 dasm_put(Dst, 4505);
8618 } 8619 }
8619 break; 8620 break;
8620 8621
8621 case BC_ISEQV: case BC_ISNEV: 8622 case BC_ISEQV: case BC_ISNEV:
8622 vk = op == BC_ISEQV; 8623 vk = op == BC_ISEQV;
8623 if (LJ_DUALNUM) { 8624 if (LJ_DUALNUM) {
8624 dasm_put(Dst, 4517, -(BCBIAS_J*4 >> 16)); 8625 dasm_put(Dst, 4518, -(BCBIAS_J*4 >> 16));
8625 if (vk) { 8626 if (vk) {
8626 dasm_put(Dst, 4530); 8627 dasm_put(Dst, 4531);
8627 } else { 8628 } else {
8628 dasm_put(Dst, 4533); 8629 dasm_put(Dst, 4534);
8629 } 8630 }
8630 } else { 8631 } else {
8631 dasm_put(Dst, 4536, -(BCBIAS_J*4 >> 16)); 8632 dasm_put(Dst, 4537, -(BCBIAS_J*4 >> 16));
8632 if (vk) { 8633 if (vk) {
8633 dasm_put(Dst, 4553); 8634 dasm_put(Dst, 4554);
8634 } else { 8635 } else {
8635 dasm_put(Dst, 4557); 8636 dasm_put(Dst, 4558);
8636 } 8637 }
8637 dasm_put(Dst, 4561); 8638 dasm_put(Dst, 4562);
8638 } 8639 }
8639 dasm_put(Dst, 4573); 8640 dasm_put(Dst, 4574);
8640 if (!LJ_DUALNUM) { 8641 if (!LJ_DUALNUM) {
8641 dasm_put(Dst, 4575); 8642 dasm_put(Dst, 4576);
8642 } 8643 }
8643 if (LJ_HASFFI) { 8644 if (LJ_HASFFI) {
8644 dasm_put(Dst, 4578, LJ_TCDATA, LJ_TCDATA); 8645 dasm_put(Dst, 4579, LJ_TCDATA, LJ_TCDATA);
8645 } 8646 }
8646 dasm_put(Dst, 4583, ~LJ_TISPRI); 8647 dasm_put(Dst, 4584, ~LJ_TISPRI);
8647 if (LJ_HASFFI) { 8648 if (LJ_HASFFI) {
8648 dasm_put(Dst, 4588); 8649 dasm_put(Dst, 4589);
8649 } 8650 }
8650 dasm_put(Dst, 4590, ~LJ_TISTABUD); 8651 dasm_put(Dst, 4591, ~LJ_TISTABUD);
8651 if (LJ_HASFFI) { 8652 if (LJ_HASFFI) {
8652 dasm_put(Dst, 4593); 8653 dasm_put(Dst, 4594);
8653 } 8654 }
8654 dasm_put(Dst, 4596); 8655 dasm_put(Dst, 4597);
8655 if (vk) { 8656 if (vk) {
8656 dasm_put(Dst, 4604); 8657 dasm_put(Dst, 4605);
8657 } else { 8658 } else {
8658 dasm_put(Dst, 4609); 8659 dasm_put(Dst, 4610);
8659 } 8660 }
8660 if (LJ_DUALNUM) { 8661 if (LJ_DUALNUM) {
8661 dasm_put(Dst, 4614); 8662 dasm_put(Dst, 4615);
8662 } else { 8663 } else {
8663 dasm_put(Dst, 4629); 8664 dasm_put(Dst, 4630);
8664 } 8665 }
8665 dasm_put(Dst, 4632, Dt6(->metatable), 1-vk, Dt6(->nomm), 1<<MM_eq); 8666 dasm_put(Dst, 4633, Dt6(->metatable), 1-vk, Dt6(->nomm), 1<<MM_eq);
8666 break; 8667 break;
8667 8668
8668 case BC_ISEQS: case BC_ISNES: 8669 case BC_ISEQS: case BC_ISNES:
8669 vk = op == BC_ISEQS; 8670 vk = op == BC_ISEQS;
8670 dasm_put(Dst, 4651, 32-1); 8671 dasm_put(Dst, 4652, 32-1);
8671 if (LJ_HASFFI) { 8672 if (LJ_HASFFI) {
8672 dasm_put(Dst, 4659, LJ_TCDATA); 8673 dasm_put(Dst, 4660, LJ_TCDATA);
8673 } 8674 }
8674 dasm_put(Dst, 4662, LJ_TSTR); 8675 dasm_put(Dst, 4663, LJ_TSTR);
8675 if (LJ_HASFFI) { 8676 if (LJ_HASFFI) {
8676 dasm_put(Dst, 4666); 8677 dasm_put(Dst, 4667);
8677 } 8678 }
8678 dasm_put(Dst, 4669, -(BCBIAS_J*4 >> 16)); 8679 dasm_put(Dst, 4670, -(BCBIAS_J*4 >> 16));
8679 if (vk) { 8680 if (vk) {
8680 dasm_put(Dst, 4677); 8681 dasm_put(Dst, 4678);
8681 } else { 8682 } else {
8682 dasm_put(Dst, 4679); 8683 dasm_put(Dst, 4680);
8683 } 8684 }
8684 dasm_put(Dst, 4681); 8685 dasm_put(Dst, 4682);
8685 break; 8686 break;
8686 8687
8687 case BC_ISEQN: case BC_ISNEN: 8688 case BC_ISEQN: case BC_ISNEN:
8688 vk = op == BC_ISEQN; 8689 vk = op == BC_ISEQN;
8689 if (LJ_DUALNUM) { 8690 if (LJ_DUALNUM) {
8690 dasm_put(Dst, 4693, -(BCBIAS_J*4 >> 16)); 8691 dasm_put(Dst, 4694, -(BCBIAS_J*4 >> 16));
8691 if (vk) { 8692 if (vk) {
8692 dasm_put(Dst, 4705); 8693 dasm_put(Dst, 4706);
8693 } else { 8694 } else {
8694 dasm_put(Dst, 4707); 8695 dasm_put(Dst, 4708);
8695 } 8696 }
8696 dasm_put(Dst, 4709); 8697 dasm_put(Dst, 4710);
8697 } else { 8698 } else {
8698 if (vk) { 8699 if (vk) {
8699 dasm_put(Dst, 4716); 8700 dasm_put(Dst, 4717);
8700 } else { 8701 } else {
8701 dasm_put(Dst, 4718); 8702 dasm_put(Dst, 4719);
8702 } 8703 }
8703 dasm_put(Dst, 4720, -(BCBIAS_J*4 >> 16)); 8704 dasm_put(Dst, 4721, -(BCBIAS_J*4 >> 16));
8704 } 8705 }
8705 if (vk) { 8706 if (vk) {
8706 dasm_put(Dst, 4733); 8707 dasm_put(Dst, 4734);
8707 if (!LJ_HASFFI) { 8708 if (!LJ_HASFFI) {
8708 dasm_put(Dst, 4738); 8709 dasm_put(Dst, 4739);
8709 } 8710 }
8710 } else { 8711 } else {
8711 dasm_put(Dst, 4740); 8712 dasm_put(Dst, 4741);
8712 if (!LJ_HASFFI) { 8713 if (!LJ_HASFFI) {
8713 dasm_put(Dst, 4744); 8714 dasm_put(Dst, 4745);
8714 } 8715 }
8715 dasm_put(Dst, 4746); 8716 dasm_put(Dst, 4747);
8716 } 8717 }
8717 dasm_put(Dst, 4749); 8718 dasm_put(Dst, 4750);
8718 if (LJ_HASFFI) { 8719 if (LJ_HASFFI) {
8719 dasm_put(Dst, 4760, LJ_TCDATA); 8720 dasm_put(Dst, 4761, LJ_TCDATA);
8720 } 8721 }
8721 if (LJ_DUALNUM) { 8722 if (LJ_DUALNUM) {
8722 dasm_put(Dst, 4768); 8723 dasm_put(Dst, 4769);
8723 } 8724 }
8724 break; 8725 break;
8725 8726
8726 case BC_ISEQP: case BC_ISNEP: 8727 case BC_ISEQP: case BC_ISNEP:
8727 vk = op == BC_ISEQP; 8728 vk = op == BC_ISEQP;
8728 dasm_put(Dst, 4792, 32-3); 8729 dasm_put(Dst, 4793, 32-3);
8729 if (LJ_HASFFI) { 8730 if (LJ_HASFFI) {
8730 dasm_put(Dst, 4799, LJ_TCDATA); 8731 dasm_put(Dst, 4800, LJ_TCDATA);
8731 } 8732 }
8732 dasm_put(Dst, 4802); 8733 dasm_put(Dst, 4803);
8733 if (LJ_HASFFI) { 8734 if (LJ_HASFFI) {
8734 dasm_put(Dst, 4804); 8735 dasm_put(Dst, 4805);
8735 } 8736 }
8736 dasm_put(Dst, 4807, -(BCBIAS_J*4 >> 16)); 8737 dasm_put(Dst, 4808, -(BCBIAS_J*4 >> 16));
8737 if (vk) { 8738 if (vk) {
8738 dasm_put(Dst, 4813); 8739 dasm_put(Dst, 4814);
8739 } else { 8740 } else {
8740 dasm_put(Dst, 4815); 8741 dasm_put(Dst, 4816);
8741 } 8742 }
8742 dasm_put(Dst, 4817); 8743 dasm_put(Dst, 4818);
8743 break; 8744 break;
8744 8745
8745 /* -- Unary test and copy ops ------------------------------------------- */ 8746 /* -- Unary test and copy ops ------------------------------------------- */
8746 8747
8747 case BC_ISTC: case BC_ISFC: case BC_IST: case BC_ISF: 8748 case BC_ISTC: case BC_ISFC: case BC_IST: case BC_ISF:
8748 dasm_put(Dst, 4829); 8749 dasm_put(Dst, 4830);
8749 if (op == BC_IST || op == BC_ISF) { 8750 if (op == BC_IST || op == BC_ISF) {
8750 dasm_put(Dst, 4833, LJ_TTRUE, -(BCBIAS_J*4 >> 16)); 8751 dasm_put(Dst, 4834, LJ_TTRUE, -(BCBIAS_J*4 >> 16));
8751 if (op == BC_IST) { 8752 if (op == BC_IST) {
8752 dasm_put(Dst, 4840); 8753 dasm_put(Dst, 4841);
8753 } else { 8754 } else {
8754 dasm_put(Dst, 4842); 8755 dasm_put(Dst, 4843);
8755 } 8756 }
8756 dasm_put(Dst, 4844); 8757 dasm_put(Dst, 4845);
8757 } else { 8758 } else {
8758 dasm_put(Dst, 4846, LJ_TFALSE); 8759 dasm_put(Dst, 4847, LJ_TFALSE);
8759 if (op == BC_ISTC) { 8760 if (op == BC_ISTC) {
8760 dasm_put(Dst, 4851); 8761 dasm_put(Dst, 4852);
8761 } else { 8762 } else {
8762 dasm_put(Dst, 4854); 8763 dasm_put(Dst, 4855);
8763 } 8764 }
8764 dasm_put(Dst, 4857, -(BCBIAS_J*4 >> 16)); 8765 dasm_put(Dst, 4858, -(BCBIAS_J*4 >> 16));
8765 } 8766 }
8766 dasm_put(Dst, 4864); 8767 dasm_put(Dst, 4865);
8767 break; 8768 break;
8768 8769
8769 /* -- Unary ops --------------------------------------------------------- */ 8770 /* -- Unary ops --------------------------------------------------------- */
8770 8771
8771 case BC_MOV: 8772 case BC_MOV:
8772 dasm_put(Dst, 4875); 8773 dasm_put(Dst, 4876);
8773 break; 8774 break;
8774 case BC_NOT: 8775 case BC_NOT:
8775 dasm_put(Dst, 4888, LJ_TTRUE); 8776 dasm_put(Dst, 4889, LJ_TTRUE);
8776 break; 8777 break;
8777 case BC_UNM: 8778 case BC_UNM:
8778 dasm_put(Dst, 4904); 8779 dasm_put(Dst, 4905);
8779 if (LJ_DUALNUM) { 8780 if (LJ_DUALNUM) {
8780 dasm_put(Dst, 4908); 8781 dasm_put(Dst, 4909);
8781 } 8782 }
8782 dasm_put(Dst, 4936); 8783 dasm_put(Dst, 4937);
8783 if (LJ_DUALNUM) { 8784 if (LJ_DUALNUM) {
8784 dasm_put(Dst, 4946); 8785 dasm_put(Dst, 4947);
8785 } else { 8786 } else {
8786 dasm_put(Dst, 4949); 8787 dasm_put(Dst, 4950);
8787 } 8788 }
8788 break; 8789 break;
8789 case BC_LEN: 8790 case BC_LEN:
8790 dasm_put(Dst, 4958, LJ_TSTR, Dt5(->len)); 8791 dasm_put(Dst, 4959, LJ_TSTR, Dt5(->len));
8791 if (LJ_DUALNUM) { 8792 if (LJ_DUALNUM) {
8792 dasm_put(Dst, 4968); 8793 dasm_put(Dst, 4969);
8793 } else { 8794 } else {
8794 dasm_put(Dst, 4973); 8795 dasm_put(Dst, 4974);
8795 } 8796 }
8796 dasm_put(Dst, 4980, LJ_TTAB); 8797 dasm_put(Dst, 4981, LJ_TTAB);
8797#ifdef LUAJIT_ENABLE_LUA52COMPAT 8798#ifdef LUAJIT_ENABLE_LUA52COMPAT
8798 dasm_put(Dst, 4994, Dt6(->metatable)); 8799 dasm_put(Dst, 4995, Dt6(->metatable));
8799#endif 8800#endif
8800 dasm_put(Dst, 5001); 8801 dasm_put(Dst, 5002);
8801#ifdef LUAJIT_ENABLE_LUA52COMPAT 8802#ifdef LUAJIT_ENABLE_LUA52COMPAT
8802 dasm_put(Dst, 5007, Dt6(->nomm), 1<<MM_len); 8803 dasm_put(Dst, 5008, Dt6(->nomm), 1<<MM_len);
8803#endif 8804#endif
8804 break; 8805 break;
8805 8806
@@ -8811,77 +8812,77 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop)
8811 vk = ((int)op - BC_ADDVN) / (BC_ADDNV-BC_ADDVN); 8812 vk = ((int)op - BC_ADDVN) / (BC_ADDNV-BC_ADDVN);
8812 switch (vk) { 8813 switch (vk) {
8813 case 0: 8814 case 0:
8814 dasm_put(Dst, 5017); 8815 dasm_put(Dst, 5018);
8815 break; 8816 break;
8816 case 1: 8817 case 1:
8817 dasm_put(Dst, 5023); 8818 dasm_put(Dst, 5024);
8818 break; 8819 break;
8819 default: 8820 default:
8820 dasm_put(Dst, 5029); 8821 dasm_put(Dst, 5030);
8821 break; 8822 break;
8822 } 8823 }
8823 dasm_put(Dst, 5035); 8824 dasm_put(Dst, 5036);
8824 switch (vk) { 8825 switch (vk) {
8825 case 0: 8826 case 0:
8826 dasm_put(Dst, 5062); 8827 dasm_put(Dst, 5063);
8827 break; 8828 break;
8828 case 1: 8829 case 1:
8829 dasm_put(Dst, 5065); 8830 dasm_put(Dst, 5066);
8830 break; 8831 break;
8831 default: 8832 default:
8832 dasm_put(Dst, 5068); 8833 dasm_put(Dst, 5069);
8833 break; 8834 break;
8834 } 8835 }
8835 dasm_put(Dst, 5071); 8836 dasm_put(Dst, 5072);
8836 if (vk == 1) { 8837 if (vk == 1) {
8837 dasm_put(Dst, 5073); 8838 dasm_put(Dst, 5074);
8838 } else { 8839 } else {
8839 dasm_put(Dst, 5077); 8840 dasm_put(Dst, 5078);
8840 } 8841 }
8841 switch (vk) { 8842 switch (vk) {
8842 case 0: 8843 case 0:
8843 dasm_put(Dst, 5081); 8844 dasm_put(Dst, 5082);
8844 break; 8845 break;
8845 case 1: 8846 case 1:
8846 dasm_put(Dst, 5084); 8847 dasm_put(Dst, 5085);
8847 break; 8848 break;
8848 default: 8849 default:
8849 dasm_put(Dst, 5087); 8850 dasm_put(Dst, 5088);
8850 break; 8851 break;
8851 } 8852 }
8852 dasm_put(Dst, 5090); 8853 dasm_put(Dst, 5091);
8853 } else { 8854 } else {
8854 vk = ((int)op - BC_ADDVN) / (BC_ADDNV-BC_ADDVN); 8855 vk = ((int)op - BC_ADDVN) / (BC_ADDNV-BC_ADDVN);
8855 switch (vk) { 8856 switch (vk) {
8856 case 0: 8857 case 0:
8857 dasm_put(Dst, 5097); 8858 dasm_put(Dst, 5098);
8858 if (LJ_DUALNUM) { 8859 if (LJ_DUALNUM) {
8859 dasm_put(Dst, 5099); 8860 dasm_put(Dst, 5100);
8860 } 8861 }
8861 dasm_put(Dst, 5101); 8862 dasm_put(Dst, 5102);
8862 if (LJ_DUALNUM) { 8863 if (LJ_DUALNUM) {
8863 dasm_put(Dst, 5104); 8864 dasm_put(Dst, 5105);
8864 } else { 8865 } else {
8865 dasm_put(Dst, 5110); 8866 dasm_put(Dst, 5111);
8866 } 8867 }
8867 break; 8868 break;
8868 case 1: 8869 case 1:
8869 dasm_put(Dst, 5114); 8870 dasm_put(Dst, 5115);
8870 if (LJ_DUALNUM) { 8871 if (LJ_DUALNUM) {
8871 dasm_put(Dst, 5116); 8872 dasm_put(Dst, 5117);
8872 } 8873 }
8873 dasm_put(Dst, 5118); 8874 dasm_put(Dst, 5119);
8874 if (LJ_DUALNUM) { 8875 if (LJ_DUALNUM) {
8875 dasm_put(Dst, 5121); 8876 dasm_put(Dst, 5122);
8876 } else { 8877 } else {
8877 dasm_put(Dst, 5127); 8878 dasm_put(Dst, 5128);
8878 } 8879 }
8879 break; 8880 break;
8880 default: 8881 default:
8881 dasm_put(Dst, 5131); 8882 dasm_put(Dst, 5132);
8882 break; 8883 break;
8883 } 8884 }
8884 dasm_put(Dst, 5141); 8885 dasm_put(Dst, 5142);
8885 } 8886 }
8886 break; 8887 break;
8887 case BC_SUBVN: case BC_SUBNV: case BC_SUBVV: 8888 case BC_SUBVN: case BC_SUBNV: case BC_SUBVV:
@@ -8889,77 +8890,77 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop)
8889 vk = ((int)op - BC_ADDVN) / (BC_ADDNV-BC_ADDVN); 8890 vk = ((int)op - BC_ADDVN) / (BC_ADDNV-BC_ADDVN);
8890 switch (vk) { 8891 switch (vk) {
8891 case 0: 8892 case 0:
8892 dasm_put(Dst, 5154); 8893 dasm_put(Dst, 5155);
8893 break; 8894 break;
8894 case 1: 8895 case 1:
8895 dasm_put(Dst, 5160); 8896 dasm_put(Dst, 5161);
8896 break; 8897 break;
8897 default: 8898 default:
8898 dasm_put(Dst, 5166); 8899 dasm_put(Dst, 5167);
8899 break; 8900 break;
8900 } 8901 }
8901 dasm_put(Dst, 5172); 8902 dasm_put(Dst, 5173);
8902 switch (vk) { 8903 switch (vk) {
8903 case 0: 8904 case 0:
8904 dasm_put(Dst, 5199); 8905 dasm_put(Dst, 5200);
8905 break; 8906 break;
8906 case 1: 8907 case 1:
8907 dasm_put(Dst, 5202); 8908 dasm_put(Dst, 5203);
8908 break; 8909 break;
8909 default: 8910 default:
8910 dasm_put(Dst, 5205); 8911 dasm_put(Dst, 5206);
8911 break; 8912 break;
8912 } 8913 }
8913 dasm_put(Dst, 5208); 8914 dasm_put(Dst, 5209);
8914 if (vk == 1) { 8915 if (vk == 1) {
8915 dasm_put(Dst, 5210); 8916 dasm_put(Dst, 5211);
8916 } else { 8917 } else {
8917 dasm_put(Dst, 5214); 8918 dasm_put(Dst, 5215);
8918 } 8919 }
8919 switch (vk) { 8920 switch (vk) {
8920 case 0: 8921 case 0:
8921 dasm_put(Dst, 5218); 8922 dasm_put(Dst, 5219);
8922 break; 8923 break;
8923 case 1: 8924 case 1:
8924 dasm_put(Dst, 5221); 8925 dasm_put(Dst, 5222);
8925 break; 8926 break;
8926 default: 8927 default:
8927 dasm_put(Dst, 5224); 8928 dasm_put(Dst, 5225);
8928 break; 8929 break;
8929 } 8930 }
8930 dasm_put(Dst, 5227); 8931 dasm_put(Dst, 5228);
8931 } else { 8932 } else {
8932 vk = ((int)op - BC_ADDVN) / (BC_ADDNV-BC_ADDVN); 8933 vk = ((int)op - BC_ADDVN) / (BC_ADDNV-BC_ADDVN);
8933 switch (vk) { 8934 switch (vk) {
8934 case 0: 8935 case 0:
8935 dasm_put(Dst, 5234); 8936 dasm_put(Dst, 5235);
8936 if (LJ_DUALNUM) { 8937 if (LJ_DUALNUM) {
8937 dasm_put(Dst, 5236); 8938 dasm_put(Dst, 5237);
8938 } 8939 }
8939 dasm_put(Dst, 5238); 8940 dasm_put(Dst, 5239);
8940 if (LJ_DUALNUM) { 8941 if (LJ_DUALNUM) {
8941 dasm_put(Dst, 5241); 8942 dasm_put(Dst, 5242);
8942 } else { 8943 } else {
8943 dasm_put(Dst, 5247); 8944 dasm_put(Dst, 5248);
8944 } 8945 }
8945 break; 8946 break;
8946 case 1: 8947 case 1:
8947 dasm_put(Dst, 5251); 8948 dasm_put(Dst, 5252);
8948 if (LJ_DUALNUM) { 8949 if (LJ_DUALNUM) {
8949 dasm_put(Dst, 5253); 8950 dasm_put(Dst, 5254);
8950 } 8951 }
8951 dasm_put(Dst, 5255); 8952 dasm_put(Dst, 5256);
8952 if (LJ_DUALNUM) { 8953 if (LJ_DUALNUM) {
8953 dasm_put(Dst, 5258); 8954 dasm_put(Dst, 5259);
8954 } else { 8955 } else {
8955 dasm_put(Dst, 5264); 8956 dasm_put(Dst, 5265);
8956 } 8957 }
8957 break; 8958 break;
8958 default: 8959 default:
8959 dasm_put(Dst, 5268); 8960 dasm_put(Dst, 5269);
8960 break; 8961 break;
8961 } 8962 }
8962 dasm_put(Dst, 5278); 8963 dasm_put(Dst, 5279);
8963 } 8964 }
8964 break; 8965 break;
8965 case BC_MULVN: case BC_MULNV: case BC_MULVV: 8966 case BC_MULVN: case BC_MULNV: case BC_MULVV:
@@ -8967,188 +8968,188 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop)
8967 vk = ((int)op - BC_ADDVN) / (BC_ADDNV-BC_ADDVN); 8968 vk = ((int)op - BC_ADDVN) / (BC_ADDNV-BC_ADDVN);
8968 switch (vk) { 8969 switch (vk) {
8969 case 0: 8970 case 0:
8970 dasm_put(Dst, 5291); 8971 dasm_put(Dst, 5292);
8971 break; 8972 break;
8972 case 1: 8973 case 1:
8973 dasm_put(Dst, 5297); 8974 dasm_put(Dst, 5298);
8974 break; 8975 break;
8975 default: 8976 default:
8976 dasm_put(Dst, 5303); 8977 dasm_put(Dst, 5304);
8977 break; 8978 break;
8978 } 8979 }
8979 dasm_put(Dst, 5309); 8980 dasm_put(Dst, 5310);
8980 switch (vk) { 8981 switch (vk) {
8981 case 0: 8982 case 0:
8982 dasm_put(Dst, 5336); 8983 dasm_put(Dst, 5337);
8983 break; 8984 break;
8984 case 1: 8985 case 1:
8985 dasm_put(Dst, 5339); 8986 dasm_put(Dst, 5340);
8986 break; 8987 break;
8987 default: 8988 default:
8988 dasm_put(Dst, 5342); 8989 dasm_put(Dst, 5343);
8989 break; 8990 break;
8990 } 8991 }
8991 dasm_put(Dst, 5345); 8992 dasm_put(Dst, 5346);
8992 if (vk == 1) { 8993 if (vk == 1) {
8993 dasm_put(Dst, 5347); 8994 dasm_put(Dst, 5348);
8994 } else { 8995 } else {
8995 dasm_put(Dst, 5351); 8996 dasm_put(Dst, 5352);
8996 } 8997 }
8997 switch (vk) { 8998 switch (vk) {
8998 case 0: 8999 case 0:
8999 dasm_put(Dst, 5355); 9000 dasm_put(Dst, 5356);
9000 break; 9001 break;
9001 case 1: 9002 case 1:
9002 dasm_put(Dst, 5358); 9003 dasm_put(Dst, 5359);
9003 break; 9004 break;
9004 default: 9005 default:
9005 dasm_put(Dst, 5361); 9006 dasm_put(Dst, 5362);
9006 break; 9007 break;
9007 } 9008 }
9008 dasm_put(Dst, 5364); 9009 dasm_put(Dst, 5365);
9009 } else { 9010 } else {
9010 vk = ((int)op - BC_ADDVN) / (BC_ADDNV-BC_ADDVN); 9011 vk = ((int)op - BC_ADDVN) / (BC_ADDNV-BC_ADDVN);
9011 switch (vk) { 9012 switch (vk) {
9012 case 0: 9013 case 0:
9013 dasm_put(Dst, 5371); 9014 dasm_put(Dst, 5372);
9014 if (LJ_DUALNUM) { 9015 if (LJ_DUALNUM) {
9015 dasm_put(Dst, 5373); 9016 dasm_put(Dst, 5374);
9016 } 9017 }
9017 dasm_put(Dst, 5375); 9018 dasm_put(Dst, 5376);
9018 if (LJ_DUALNUM) { 9019 if (LJ_DUALNUM) {
9019 dasm_put(Dst, 5378); 9020 dasm_put(Dst, 5379);
9020 } else { 9021 } else {
9021 dasm_put(Dst, 5384); 9022 dasm_put(Dst, 5385);
9022 } 9023 }
9023 break; 9024 break;
9024 case 1: 9025 case 1:
9025 dasm_put(Dst, 5388); 9026 dasm_put(Dst, 5389);
9026 if (LJ_DUALNUM) { 9027 if (LJ_DUALNUM) {
9027 dasm_put(Dst, 5390); 9028 dasm_put(Dst, 5391);
9028 } 9029 }
9029 dasm_put(Dst, 5392); 9030 dasm_put(Dst, 5393);
9030 if (LJ_DUALNUM) { 9031 if (LJ_DUALNUM) {
9031 dasm_put(Dst, 5395); 9032 dasm_put(Dst, 5396);
9032 } else { 9033 } else {
9033 dasm_put(Dst, 5401); 9034 dasm_put(Dst, 5402);
9034 } 9035 }
9035 break; 9036 break;
9036 default: 9037 default:
9037 dasm_put(Dst, 5405); 9038 dasm_put(Dst, 5406);
9038 break; 9039 break;
9039 } 9040 }
9040 dasm_put(Dst, 5415); 9041 dasm_put(Dst, 5416);
9041 } 9042 }
9042 break; 9043 break;
9043 case BC_DIVVN: case BC_DIVNV: case BC_DIVVV: 9044 case BC_DIVVN: case BC_DIVNV: case BC_DIVVV:
9044 vk = ((int)op - BC_ADDVN) / (BC_ADDNV-BC_ADDVN); 9045 vk = ((int)op - BC_ADDVN) / (BC_ADDNV-BC_ADDVN);
9045 switch (vk) { 9046 switch (vk) {
9046 case 0: 9047 case 0:
9047 dasm_put(Dst, 5428); 9048 dasm_put(Dst, 5429);
9048 if (LJ_DUALNUM) { 9049 if (LJ_DUALNUM) {
9049 dasm_put(Dst, 5430); 9050 dasm_put(Dst, 5431);
9050 } 9051 }
9051 dasm_put(Dst, 5432); 9052 dasm_put(Dst, 5433);
9052 if (LJ_DUALNUM) { 9053 if (LJ_DUALNUM) {
9053 dasm_put(Dst, 5435); 9054 dasm_put(Dst, 5436);
9054 } else { 9055 } else {
9055 dasm_put(Dst, 5441); 9056 dasm_put(Dst, 5442);
9056 } 9057 }
9057 break; 9058 break;
9058 case 1: 9059 case 1:
9059 dasm_put(Dst, 5445); 9060 dasm_put(Dst, 5446);
9060 if (LJ_DUALNUM) { 9061 if (LJ_DUALNUM) {
9061 dasm_put(Dst, 5447); 9062 dasm_put(Dst, 5448);
9062 } 9063 }
9063 dasm_put(Dst, 5449); 9064 dasm_put(Dst, 5450);
9064 if (LJ_DUALNUM) { 9065 if (LJ_DUALNUM) {
9065 dasm_put(Dst, 5452); 9066 dasm_put(Dst, 5453);
9066 } else { 9067 } else {
9067 dasm_put(Dst, 5458); 9068 dasm_put(Dst, 5459);
9068 } 9069 }
9069 break; 9070 break;
9070 default: 9071 default:
9071 dasm_put(Dst, 5462); 9072 dasm_put(Dst, 5463);
9072 break; 9073 break;
9073 } 9074 }
9074 dasm_put(Dst, 5472); 9075 dasm_put(Dst, 5473);
9075 break; 9076 break;
9076 case BC_MODVN: 9077 case BC_MODVN:
9077 if (LJ_DUALNUM) { 9078 if (LJ_DUALNUM) {
9078 vk = ((int)op - BC_ADDVN) / (BC_ADDNV-BC_ADDVN); 9079 vk = ((int)op - BC_ADDVN) / (BC_ADDNV-BC_ADDVN);
9079 switch (vk) { 9080 switch (vk) {
9080 case 0: 9081 case 0:
9081 dasm_put(Dst, 5485); 9082 dasm_put(Dst, 5486);
9082 break; 9083 break;
9083 case 1: 9084 case 1:
9084 dasm_put(Dst, 5491); 9085 dasm_put(Dst, 5492);
9085 break; 9086 break;
9086 default: 9087 default:
9087 dasm_put(Dst, 5497); 9088 dasm_put(Dst, 5498);
9088 break; 9089 break;
9089 } 9090 }
9090 dasm_put(Dst, 5503); 9091 dasm_put(Dst, 5504);
9091 switch (vk) { 9092 switch (vk) {
9092 case 0: 9093 case 0:
9093 dasm_put(Dst, 5531); 9094 dasm_put(Dst, 5532);
9094 break; 9095 break;
9095 case 1: 9096 case 1:
9096 dasm_put(Dst, 5534); 9097 dasm_put(Dst, 5535);
9097 break; 9098 break;
9098 default: 9099 default:
9099 dasm_put(Dst, 5537); 9100 dasm_put(Dst, 5538);
9100 break; 9101 break;
9101 } 9102 }
9102 dasm_put(Dst, 5540); 9103 dasm_put(Dst, 5541);
9103 if (vk == 1) { 9104 if (vk == 1) {
9104 dasm_put(Dst, 5542); 9105 dasm_put(Dst, 5543);
9105 } else { 9106 } else {
9106 dasm_put(Dst, 5546); 9107 dasm_put(Dst, 5547);
9107 } 9108 }
9108 switch (vk) { 9109 switch (vk) {
9109 case 0: 9110 case 0:
9110 dasm_put(Dst, 5550); 9111 dasm_put(Dst, 5551);
9111 break; 9112 break;
9112 case 1: 9113 case 1:
9113 dasm_put(Dst, 5553); 9114 dasm_put(Dst, 5554);
9114 break; 9115 break;
9115 default: 9116 default:
9116 dasm_put(Dst, 5556); 9117 dasm_put(Dst, 5557);
9117 break; 9118 break;
9118 } 9119 }
9119 dasm_put(Dst, 5559); 9120 dasm_put(Dst, 5560);
9120 } else { 9121 } else {
9121 vk = ((int)op - BC_ADDVN) / (BC_ADDNV-BC_ADDVN); 9122 vk = ((int)op - BC_ADDVN) / (BC_ADDNV-BC_ADDVN);
9122 switch (vk) { 9123 switch (vk) {
9123 case 0: 9124 case 0:
9124 dasm_put(Dst, 5571); 9125 dasm_put(Dst, 5572);
9125 if (LJ_DUALNUM) { 9126 if (LJ_DUALNUM) {
9126 dasm_put(Dst, 5573); 9127 dasm_put(Dst, 5574);
9127 } 9128 }
9128 dasm_put(Dst, 5575); 9129 dasm_put(Dst, 5576);
9129 if (LJ_DUALNUM) { 9130 if (LJ_DUALNUM) {
9130 dasm_put(Dst, 5578); 9131 dasm_put(Dst, 5579);
9131 } else { 9132 } else {
9132 dasm_put(Dst, 5584); 9133 dasm_put(Dst, 5585);
9133 } 9134 }
9134 break; 9135 break;
9135 case 1: 9136 case 1:
9136 dasm_put(Dst, 5588); 9137 dasm_put(Dst, 5589);
9137 if (LJ_DUALNUM) { 9138 if (LJ_DUALNUM) {
9138 dasm_put(Dst, 5590); 9139 dasm_put(Dst, 5591);
9139 } 9140 }
9140 dasm_put(Dst, 5592); 9141 dasm_put(Dst, 5593);
9141 if (LJ_DUALNUM) { 9142 if (LJ_DUALNUM) {
9142 dasm_put(Dst, 5595); 9143 dasm_put(Dst, 5596);
9143 } else { 9144 } else {
9144 dasm_put(Dst, 5601); 9145 dasm_put(Dst, 5602);
9145 } 9146 }
9146 break; 9147 break;
9147 default: 9148 default:
9148 dasm_put(Dst, 5605); 9149 dasm_put(Dst, 5606);
9149 break; 9150 break;
9150 } 9151 }
9151 dasm_put(Dst, 5615); 9152 dasm_put(Dst, 5616);
9152 } 9153 }
9153 break; 9154 break;
9154 case BC_MODNV: case BC_MODVV: 9155 case BC_MODNV: case BC_MODVV:
@@ -9156,297 +9157,297 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop)
9156 vk = ((int)op - BC_ADDVN) / (BC_ADDNV-BC_ADDVN); 9157 vk = ((int)op - BC_ADDVN) / (BC_ADDNV-BC_ADDVN);
9157 switch (vk) { 9158 switch (vk) {
9158 case 0: 9159 case 0:
9159 dasm_put(Dst, 5633); 9160 dasm_put(Dst, 5634);
9160 break; 9161 break;
9161 case 1: 9162 case 1:
9162 dasm_put(Dst, 5639); 9163 dasm_put(Dst, 5640);
9163 break; 9164 break;
9164 default: 9165 default:
9165 dasm_put(Dst, 5645); 9166 dasm_put(Dst, 5646);
9166 break; 9167 break;
9167 } 9168 }
9168 dasm_put(Dst, 5651); 9169 dasm_put(Dst, 5652);
9169 switch (vk) { 9170 switch (vk) {
9170 case 0: 9171 case 0:
9171 dasm_put(Dst, 5679); 9172 dasm_put(Dst, 5680);
9172 break; 9173 break;
9173 case 1: 9174 case 1:
9174 dasm_put(Dst, 5682); 9175 dasm_put(Dst, 5683);
9175 break; 9176 break;
9176 default: 9177 default:
9177 dasm_put(Dst, 5685); 9178 dasm_put(Dst, 5686);
9178 break; 9179 break;
9179 } 9180 }
9180 dasm_put(Dst, 5688); 9181 dasm_put(Dst, 5689);
9181 if (vk == 1) { 9182 if (vk == 1) {
9182 dasm_put(Dst, 5690); 9183 dasm_put(Dst, 5691);
9183 } else { 9184 } else {
9184 dasm_put(Dst, 5694); 9185 dasm_put(Dst, 5695);
9185 } 9186 }
9186 switch (vk) { 9187 switch (vk) {
9187 case 0: 9188 case 0:
9188 dasm_put(Dst, 5698); 9189 dasm_put(Dst, 5699);
9189 break; 9190 break;
9190 case 1: 9191 case 1:
9191 dasm_put(Dst, 5701); 9192 dasm_put(Dst, 5702);
9192 break; 9193 break;
9193 default: 9194 default:
9194 dasm_put(Dst, 5704); 9195 dasm_put(Dst, 5705);
9195 break; 9196 break;
9196 } 9197 }
9197 dasm_put(Dst, 5707); 9198 dasm_put(Dst, 5708);
9198 } else { 9199 } else {
9199 vk = ((int)op - BC_ADDVN) / (BC_ADDNV-BC_ADDVN); 9200 vk = ((int)op - BC_ADDVN) / (BC_ADDNV-BC_ADDVN);
9200 switch (vk) { 9201 switch (vk) {
9201 case 0: 9202 case 0:
9202 dasm_put(Dst, 5710); 9203 dasm_put(Dst, 5711);
9203 if (LJ_DUALNUM) { 9204 if (LJ_DUALNUM) {
9204 dasm_put(Dst, 5712); 9205 dasm_put(Dst, 5713);
9205 } 9206 }
9206 dasm_put(Dst, 5714); 9207 dasm_put(Dst, 5715);
9207 if (LJ_DUALNUM) { 9208 if (LJ_DUALNUM) {
9208 dasm_put(Dst, 5717); 9209 dasm_put(Dst, 5718);
9209 } else { 9210 } else {
9210 dasm_put(Dst, 5723); 9211 dasm_put(Dst, 5724);
9211 } 9212 }
9212 break; 9213 break;
9213 case 1: 9214 case 1:
9214 dasm_put(Dst, 5727); 9215 dasm_put(Dst, 5728);
9215 if (LJ_DUALNUM) { 9216 if (LJ_DUALNUM) {
9216 dasm_put(Dst, 5729); 9217 dasm_put(Dst, 5730);
9217 } 9218 }
9218 dasm_put(Dst, 5731); 9219 dasm_put(Dst, 5732);
9219 if (LJ_DUALNUM) { 9220 if (LJ_DUALNUM) {
9220 dasm_put(Dst, 5734); 9221 dasm_put(Dst, 5735);
9221 } else { 9222 } else {
9222 dasm_put(Dst, 5740); 9223 dasm_put(Dst, 5741);
9223 } 9224 }
9224 break; 9225 break;
9225 default: 9226 default:
9226 dasm_put(Dst, 5744); 9227 dasm_put(Dst, 5745);
9227 break; 9228 break;
9228 } 9229 }
9229 dasm_put(Dst, 5754); 9230 dasm_put(Dst, 5755);
9230 } 9231 }
9231 break; 9232 break;
9232 case BC_POW: 9233 case BC_POW:
9233 dasm_put(Dst, 5757); 9234 dasm_put(Dst, 5758);
9234 break; 9235 break;
9235 9236
9236 case BC_CAT: 9237 case BC_CAT:
9237 dasm_put(Dst, 5780, Dt1(->base), 32-3, Dt1(->base)); 9238 dasm_put(Dst, 5781, Dt1(->base), 32-3, Dt1(->base));
9238 break; 9239 break;
9239 9240
9240 /* -- Constant ops ------------------------------------------------------ */ 9241 /* -- Constant ops ------------------------------------------------------ */
9241 9242
9242 case BC_KSTR: 9243 case BC_KSTR:
9243 dasm_put(Dst, 5810, 32-1, LJ_TSTR); 9244 dasm_put(Dst, 5811, 32-1, LJ_TSTR);
9244 break; 9245 break;
9245 case BC_KCDATA: 9246 case BC_KCDATA:
9246#if LJ_HASFFI 9247#if LJ_HASFFI
9247 dasm_put(Dst, 5829, 32-1, LJ_TCDATA); 9248 dasm_put(Dst, 5830, 32-1, LJ_TCDATA);
9248#endif 9249#endif
9249 break; 9250 break;
9250 case BC_KSHORT: 9251 case BC_KSHORT:
9251 if (LJ_DUALNUM) { 9252 if (LJ_DUALNUM) {
9252 dasm_put(Dst, 5848, 31-13); 9253 dasm_put(Dst, 5849, 31-13);
9253 } else { 9254 } else {
9254 dasm_put(Dst, 5864, 31-13, 31-20); 9255 dasm_put(Dst, 5865, 31-13, 31-20);
9255 } 9256 }
9256 break; 9257 break;
9257 case BC_KNUM: 9258 case BC_KNUM:
9258 dasm_put(Dst, 5892); 9259 dasm_put(Dst, 5893);
9259 break; 9260 break;
9260 case BC_KPRI: 9261 case BC_KPRI:
9261 dasm_put(Dst, 5905, 32-3); 9262 dasm_put(Dst, 5906, 32-3);
9262 break; 9263 break;
9263 case BC_KNIL: 9264 case BC_KNIL:
9264 dasm_put(Dst, 5920); 9265 dasm_put(Dst, 5921);
9265 break; 9266 break;
9266 9267
9267 /* -- Upvalue and function ops ------------------------------------------ */ 9268 /* -- Upvalue and function ops ------------------------------------------ */
9268 9269
9269 case BC_UGET: 9270 case BC_UGET:
9270 dasm_put(Dst, 5939, 32-1, offsetof(GCfuncL, uvptr), DtA(->v)); 9271 dasm_put(Dst, 5940, 32-1, offsetof(GCfuncL, uvptr), DtA(->v));
9271 break; 9272 break;
9272 case BC_USETV: 9273 case BC_USETV:
9273 dasm_put(Dst, 5960, 32-1, offsetof(GCfuncL, uvptr), DtA(->marked), DtA(->v), LJ_GC_BLACK, DtA(->closed), -(LJ_TISNUM+1), LJ_TISGCV - (LJ_TISNUM+1), Dt4(->gch.marked), LJ_GC_WHITES, GG_DISP2G); 9274 dasm_put(Dst, 5961, 32-1, offsetof(GCfuncL, uvptr), DtA(->marked), DtA(->v), LJ_GC_BLACK, DtA(->closed), -(LJ_TISNUM+1), LJ_TISGCV - (LJ_TISNUM+1), Dt4(->gch.marked), LJ_GC_WHITES, GG_DISP2G);
9274 break; 9275 break;
9275 case BC_USETS: 9276 case BC_USETS:
9276 dasm_put(Dst, 6013, 32-1, 32-1, offsetof(GCfuncL, uvptr), DtA(->marked), DtA(->v), LJ_GC_BLACK, Dt5(->marked), DtA(->closed), LJ_TSTR, LJ_GC_WHITES, GG_DISP2G); 9277 dasm_put(Dst, 6014, 32-1, 32-1, offsetof(GCfuncL, uvptr), DtA(->marked), DtA(->v), LJ_GC_BLACK, Dt5(->marked), DtA(->closed), LJ_TSTR, LJ_GC_WHITES, GG_DISP2G);
9277 break; 9278 break;
9278 case BC_USETN: 9279 case BC_USETN:
9279 dasm_put(Dst, 6064, 32-1, offsetof(GCfuncL, uvptr), DtA(->v)); 9280 dasm_put(Dst, 6065, 32-1, offsetof(GCfuncL, uvptr), DtA(->v));
9280 break; 9281 break;
9281 case BC_USETP: 9282 case BC_USETP:
9282 dasm_put(Dst, 6085, 32-1, 32-3, offsetof(GCfuncL, uvptr), DtA(->v)); 9283 dasm_put(Dst, 6086, 32-1, 32-3, offsetof(GCfuncL, uvptr), DtA(->v));
9283 break; 9284 break;
9284 9285
9285 case BC_UCLO: 9286 case BC_UCLO:
9286 dasm_put(Dst, 6108, Dt1(->openupval), 32-1, -(BCBIAS_J*4 >> 16), Dt1(->base), Dt1(->base)); 9287 dasm_put(Dst, 6109, Dt1(->openupval), 32-1, -(BCBIAS_J*4 >> 16), Dt1(->base), Dt1(->base));
9287 break; 9288 break;
9288 9289
9289 case BC_FNEW: 9290 case BC_FNEW:
9290 dasm_put(Dst, 6138, 32-1, Dt1(->base), Dt1(->base), LJ_TFUNC); 9291 dasm_put(Dst, 6139, 32-1, Dt1(->base), Dt1(->base), LJ_TFUNC);
9291 break; 9292 break;
9292 9293
9293 /* -- Table ops --------------------------------------------------------- */ 9294 /* -- Table ops --------------------------------------------------------- */
9294 9295
9295 case BC_TNEW: 9296 case BC_TNEW:
9296 case BC_TDUP: 9297 case BC_TDUP:
9297 dasm_put(Dst, 6166, DISPATCH_GL(gc.total), DISPATCH_GL(gc.threshold), Dt1(->base)); 9298 dasm_put(Dst, 6167, DISPATCH_GL(gc.total), DISPATCH_GL(gc.threshold), Dt1(->base));
9298 if (op == BC_TNEW) { 9299 if (op == BC_TNEW) {
9299 dasm_put(Dst, 6179); 9300 dasm_put(Dst, 6180);
9300 } else { 9301 } else {
9301 dasm_put(Dst, 6188, 32-1); 9302 dasm_put(Dst, 6189, 32-1);
9302 } 9303 }
9303 dasm_put(Dst, 6195, Dt1(->base), LJ_TTAB); 9304 dasm_put(Dst, 6196, Dt1(->base), LJ_TTAB);
9304 if (op == BC_TNEW) { 9305 if (op == BC_TNEW) {
9305 dasm_put(Dst, 6212); 9306 dasm_put(Dst, 6213);
9306 } 9307 }
9307 dasm_put(Dst, 6217); 9308 dasm_put(Dst, 6218);
9308 break; 9309 break;
9309 9310
9310 case BC_GGET: 9311 case BC_GGET:
9311 case BC_GSET: 9312 case BC_GSET:
9312 dasm_put(Dst, 6226, 32-1, Dt7(->env)); 9313 dasm_put(Dst, 6227, 32-1, Dt7(->env));
9313 if (op == BC_GGET) { 9314 if (op == BC_GGET) {
9314 dasm_put(Dst, 6234); 9315 dasm_put(Dst, 6235);
9315 } else { 9316 } else {
9316 dasm_put(Dst, 6237); 9317 dasm_put(Dst, 6238);
9317 } 9318 }
9318 break; 9319 break;
9319 9320
9320 case BC_TGETV: 9321 case BC_TGETV:
9321 dasm_put(Dst, 6240); 9322 dasm_put(Dst, 6241);
9322 if (LJ_DUALNUM) { 9323 if (LJ_DUALNUM) {
9323 dasm_put(Dst, 6244); 9324 dasm_put(Dst, 6245);
9324 } else { 9325 } else {
9325 dasm_put(Dst, 6246); 9326 dasm_put(Dst, 6247);
9326 } 9327 }
9327 dasm_put(Dst, 6248, LJ_TTAB); 9328 dasm_put(Dst, 6249, LJ_TTAB);
9328 if (LJ_DUALNUM) { 9329 if (LJ_DUALNUM) {
9329 dasm_put(Dst, 6254, Dt6(->asize), Dt6(->array), 31-3); 9330 dasm_put(Dst, 6255, Dt6(->asize), Dt6(->array), 31-3);
9330 } else { 9331 } else {
9331 dasm_put(Dst, 6264, Dt6(->asize), Dt6(->array), 31-3); 9332 dasm_put(Dst, 6265, Dt6(->asize), Dt6(->array), 31-3);
9332 } 9333 }
9333 dasm_put(Dst, 6281, LJ_TNIL, Dt6(->metatable), Dt6(->nomm), 1<<MM_index, LJ_TSTR); 9334 dasm_put(Dst, 6282, LJ_TNIL, Dt6(->metatable), Dt6(->nomm), 1<<MM_index, LJ_TSTR);
9334 if (!LJ_DUALNUM) { 9335 if (!LJ_DUALNUM) {
9335 dasm_put(Dst, 6321); 9336 dasm_put(Dst, 6322);
9336 } 9337 }
9337 dasm_put(Dst, 6323); 9338 dasm_put(Dst, 6324);
9338 break; 9339 break;
9339 case BC_TGETS: 9340 case BC_TGETS:
9340 dasm_put(Dst, 6326, 32-1, LJ_TTAB, Dt6(->hmask), Dt5(->hash), Dt6(->node), 31-5, 31-3, DtB(->key), 4+offsetof(Node, key), DtB(->val), 4+offsetof(Node, val), LJ_TSTR, LJ_TNIL, DtB(->next)); 9341 dasm_put(Dst, 6327, 32-1, LJ_TTAB, Dt6(->hmask), Dt5(->hash), Dt6(->node), 31-5, 31-3, DtB(->key), 4+offsetof(Node, key), DtB(->val), 4+offsetof(Node, val), LJ_TSTR, LJ_TNIL, DtB(->next));
9341 dasm_put(Dst, 6387, LJ_TNIL, Dt6(->metatable), Dt6(->nomm), 1<<MM_index); 9342 dasm_put(Dst, 6388, LJ_TNIL, Dt6(->metatable), Dt6(->nomm), 1<<MM_index);
9342 break; 9343 break;
9343 case BC_TGETB: 9344 case BC_TGETB:
9344 dasm_put(Dst, 6407, 32-3, LJ_TTAB, Dt6(->asize), Dt6(->array), LJ_TNIL, Dt6(->metatable), Dt6(->nomm), 1<<MM_index); 9345 dasm_put(Dst, 6408, 32-3, LJ_TTAB, Dt6(->asize), Dt6(->array), LJ_TNIL, Dt6(->metatable), Dt6(->nomm), 1<<MM_index);
9345 break; 9346 break;
9346 9347
9347 case BC_TSETV: 9348 case BC_TSETV:
9348 dasm_put(Dst, 6455); 9349 dasm_put(Dst, 6456);
9349 if (LJ_DUALNUM) { 9350 if (LJ_DUALNUM) {
9350 dasm_put(Dst, 6459); 9351 dasm_put(Dst, 6460);
9351 } else { 9352 } else {
9352 dasm_put(Dst, 6461); 9353 dasm_put(Dst, 6462);
9353 } 9354 }
9354 dasm_put(Dst, 6463, LJ_TTAB); 9355 dasm_put(Dst, 6464, LJ_TTAB);
9355 if (LJ_DUALNUM) { 9356 if (LJ_DUALNUM) {
9356 dasm_put(Dst, 6469, Dt6(->asize), Dt6(->array), 31-3); 9357 dasm_put(Dst, 6470, Dt6(->asize), Dt6(->array), 31-3);
9357 } else { 9358 } else {
9358 dasm_put(Dst, 6479, Dt6(->asize), Dt6(->array), 31-3); 9359 dasm_put(Dst, 6480, Dt6(->asize), Dt6(->array), 31-3);
9359 } 9360 }
9360 dasm_put(Dst, 6496, Dt6(->marked), LJ_TNIL, LJ_GC_BLACK, Dt6(->metatable), Dt6(->nomm), 1<<MM_newindex, LJ_TSTR); 9361 dasm_put(Dst, 6497, Dt6(->marked), LJ_TNIL, LJ_GC_BLACK, Dt6(->metatable), Dt6(->nomm), 1<<MM_newindex, LJ_TSTR);
9361 if (!LJ_DUALNUM) { 9362 if (!LJ_DUALNUM) {
9362 dasm_put(Dst, 6543); 9363 dasm_put(Dst, 6544);
9363 } 9364 }
9364 dasm_put(Dst, 6545, DISPATCH_GL(gc.grayagain), DISPATCH_GL(gc.grayagain), Dt6(->marked), Dt6(->gclist)); 9365 dasm_put(Dst, 6546, DISPATCH_GL(gc.grayagain), DISPATCH_GL(gc.grayagain), Dt6(->marked), Dt6(->gclist));
9365 break; 9366 break;
9366 case BC_TSETS: 9367 case BC_TSETS:
9367 dasm_put(Dst, 6560, 32-1, LJ_TTAB, Dt6(->hmask), Dt5(->hash), Dt6(->node), Dt6(->nomm), 31-5, 31-3, Dt6(->marked), DtB(->key), 4+offsetof(Node, key), DtB(->val), DtB(->next), LJ_TSTR, LJ_TNIL); 9368 dasm_put(Dst, 6561, 32-1, LJ_TTAB, Dt6(->hmask), Dt5(->hash), Dt6(->node), Dt6(->nomm), 31-5, 31-3, Dt6(->marked), DtB(->key), 4+offsetof(Node, key), DtB(->val), DtB(->next), LJ_TSTR, LJ_TNIL);
9368 dasm_put(Dst, 6611, LJ_GC_BLACK, DtB(->val), Dt6(->metatable), Dt6(->nomm), 1<<MM_newindex, Dt6(->metatable), DISPATCH_GL(tmptv), Dt1(->base), Dt6(->nomm), 1<<MM_newindex, LJ_TSTR); 9369 dasm_put(Dst, 6612, LJ_GC_BLACK, DtB(->val), Dt6(->metatable), Dt6(->nomm), 1<<MM_newindex, Dt6(->metatable), DISPATCH_GL(tmptv), Dt1(->base), Dt6(->nomm), 1<<MM_newindex, LJ_TSTR);
9369 dasm_put(Dst, 6668, Dt1(->base), DISPATCH_GL(gc.grayagain), DISPATCH_GL(gc.grayagain), Dt6(->marked), Dt6(->gclist)); 9370 dasm_put(Dst, 6669, Dt1(->base), DISPATCH_GL(gc.grayagain), DISPATCH_GL(gc.grayagain), Dt6(->marked), Dt6(->gclist));
9370 break; 9371 break;
9371 case BC_TSETB: 9372 case BC_TSETB:
9372 dasm_put(Dst, 6691, 32-3, LJ_TTAB, Dt6(->asize), Dt6(->array), Dt6(->marked), LJ_TNIL, LJ_GC_BLACK, Dt6(->metatable), Dt6(->nomm), 1<<MM_newindex, DISPATCH_GL(gc.grayagain)); 9373 dasm_put(Dst, 6692, 32-3, LJ_TTAB, Dt6(->asize), Dt6(->array), Dt6(->marked), LJ_TNIL, LJ_GC_BLACK, Dt6(->metatable), Dt6(->nomm), 1<<MM_newindex, DISPATCH_GL(gc.grayagain));
9373 dasm_put(Dst, 6749, DISPATCH_GL(gc.grayagain), Dt6(->marked), Dt6(->gclist)); 9374 dasm_put(Dst, 6750, DISPATCH_GL(gc.grayagain), Dt6(->marked), Dt6(->gclist));
9374 break; 9375 break;
9375 9376
9376 case BC_TSETM: 9377 case BC_TSETM:
9377 dasm_put(Dst, 6759, 32-3, Dt6(->asize), 31-3, Dt6(->marked), Dt6(->array), LJ_GC_BLACK, Dt1(->base), DISPATCH_GL(gc.grayagain), DISPATCH_GL(gc.grayagain), Dt6(->marked), Dt6(->gclist)); 9378 dasm_put(Dst, 6760, 32-3, Dt6(->asize), 31-3, Dt6(->marked), Dt6(->array), LJ_GC_BLACK, Dt1(->base), DISPATCH_GL(gc.grayagain), DISPATCH_GL(gc.grayagain), Dt6(->marked), Dt6(->gclist));
9378 dasm_put(Dst, 6828); 9379 dasm_put(Dst, 6829);
9379 break; 9380 break;
9380 9381
9381 /* -- Calls and vararg handling ----------------------------------------- */ 9382 /* -- Calls and vararg handling ----------------------------------------- */
9382 9383
9383 case BC_CALLM: 9384 case BC_CALLM:
9384 dasm_put(Dst, 6831); 9385 dasm_put(Dst, 6832);
9385 break; 9386 break;
9386 case BC_CALL: 9387 case BC_CALL:
9387 dasm_put(Dst, 6833, LJ_TFUNC, Dt7(->pc)); 9388 dasm_put(Dst, 6834, LJ_TFUNC, Dt7(->pc));
9388 break; 9389 break;
9389 9390
9390 case BC_CALLMT: 9391 case BC_CALLMT:
9391 dasm_put(Dst, 6854); 9392 dasm_put(Dst, 6855);
9392 break; 9393 break;
9393 case BC_CALLT: 9394 case BC_CALLT:
9394 dasm_put(Dst, 6856, LJ_TFUNC, FRAME_TYPE, Dt7(->ffid), FRAME_VARG, Dt7(->pc), -4-8, Dt7(->pc), PC2PROTO(k), FRAME_TYPEP); 9395 dasm_put(Dst, 6857, LJ_TFUNC, FRAME_TYPE, Dt7(->ffid), FRAME_VARG, Dt7(->pc), -4-8, Dt7(->pc), PC2PROTO(k), FRAME_TYPEP);
9395 dasm_put(Dst, 6920, FRAME_TYPE); 9396 dasm_put(Dst, 6921, FRAME_TYPE);
9396 break; 9397 break;
9397 9398
9398 case BC_ITERC: 9399 case BC_ITERC:
9399 dasm_put(Dst, 6929, LJ_TFUNC, Dt7(->pc)); 9400 dasm_put(Dst, 6930, LJ_TFUNC, Dt7(->pc));
9400 break; 9401 break;
9401 9402
9402 case BC_ITERN: 9403 case BC_ITERN:
9403#if LJ_HASJIT 9404#if LJ_HASJIT
9404#endif 9405#endif
9405 dasm_put(Dst, 6956, Dt6(->asize), Dt6(->array), 31-3, LJ_TNIL); 9406 dasm_put(Dst, 6957, Dt6(->asize), Dt6(->array), 31-3, LJ_TNIL);
9406 if (LJ_DUALNUM) { 9407 if (LJ_DUALNUM) {
9407 dasm_put(Dst, 6978); 9408 dasm_put(Dst, 6979);
9408 } else { 9409 } else {
9409 dasm_put(Dst, 6981); 9410 dasm_put(Dst, 6982);
9410 } 9411 }
9411 dasm_put(Dst, 6985, -(BCBIAS_J*4 >> 16)); 9412 dasm_put(Dst, 6986, -(BCBIAS_J*4 >> 16));
9412 if (!LJ_DUALNUM) { 9413 if (!LJ_DUALNUM) {
9413 dasm_put(Dst, 6993); 9414 dasm_put(Dst, 6994);
9414 } 9415 }
9415 dasm_put(Dst, 6995, Dt6(->hmask), Dt6(->node), 31-5, 31-3, LJ_TNIL, DtB(->key), -(BCBIAS_J*4 >> 16)); 9416 dasm_put(Dst, 6996, Dt6(->hmask), Dt6(->node), 31-5, 31-3, LJ_TNIL, DtB(->key), -(BCBIAS_J*4 >> 16));
9416 break; 9417 break;
9417 9418
9418 case BC_ISNEXT: 9419 case BC_ISNEXT:
9419 dasm_put(Dst, 7051, LJ_TTAB, LJ_TFUNC, LJ_TNIL, Dt8(->ffid), FF_next_N, 32-1, -(BCBIAS_J*4 >> 16), BC_JMP, BC_ITERC, -(BCBIAS_J*4 >> 16)); 9420 dasm_put(Dst, 7052, LJ_TTAB, LJ_TFUNC, LJ_TNIL, Dt8(->ffid), FF_next_N, 32-1, -(BCBIAS_J*4 >> 16), BC_JMP, BC_ITERC, -(BCBIAS_J*4 >> 16));
9420 break; 9421 break;
9421 9422
9422 case BC_VARG: 9423 case BC_VARG:
9423 dasm_put(Dst, 7101, FRAME_VARG, Dt1(->maxstack), Dt1(->top), Dt1(->base), 32-3, Dt1(->base)); 9424 dasm_put(Dst, 7102, FRAME_VARG, Dt1(->maxstack), Dt1(->top), Dt1(->base), 32-3, Dt1(->base));
9424 dasm_put(Dst, 7181); 9425 dasm_put(Dst, 7182);
9425 break; 9426 break;
9426 9427
9427 /* -- Returns ----------------------------------------------------------- */ 9428 /* -- Returns ----------------------------------------------------------- */
9428 9429
9429 case BC_RETM: 9430 case BC_RETM:
9430 dasm_put(Dst, 7187); 9431 dasm_put(Dst, 7188);
9431 break; 9432 break;
9432 9433
9433 case BC_RET: 9434 case BC_RET:
9434 dasm_put(Dst, 7189, FRAME_TYPE, FRAME_VARG, Dt7(->pc), PC2PROTO(k), FRAME_TYPEP); 9435 dasm_put(Dst, 7190, FRAME_TYPE, FRAME_VARG, Dt7(->pc), PC2PROTO(k), FRAME_TYPEP);
9435 break; 9436 break;
9436 9437
9437 case BC_RET0: case BC_RET1: 9438 case BC_RET0: case BC_RET1:
9438 dasm_put(Dst, 7259, FRAME_TYPE, FRAME_VARG); 9439 dasm_put(Dst, 7260, FRAME_TYPE, FRAME_VARG);
9439 if (op == BC_RET1) { 9440 if (op == BC_RET1) {
9440 dasm_put(Dst, 7272); 9441 dasm_put(Dst, 7273);
9441 } 9442 }
9442 dasm_put(Dst, 7275, Dt7(->pc), PC2PROTO(k)); 9443 dasm_put(Dst, 7276, Dt7(->pc), PC2PROTO(k));
9443 break; 9444 break;
9444 9445
9445 /* -- Loops and branches ------------------------------------------------ */ 9446 /* -- Loops and branches ------------------------------------------------ */
9446 9447
9447 case BC_FORL: 9448 case BC_FORL:
9448#if LJ_HASJIT 9449#if LJ_HASJIT
9449 dasm_put(Dst, 7303, GG_DISP2HOT, -HOTCOUNT_LOOP); 9450 dasm_put(Dst, 7304, GG_DISP2HOT, -HOTCOUNT_LOOP);
9450#endif 9451#endif
9451 break; 9452 break;
9452 9453
@@ -9459,100 +9460,100 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop)
9459 case BC_IFORL: 9460 case BC_IFORL:
9460 vk = (op == BC_IFORL || op == BC_JFORL); 9461 vk = (op == BC_IFORL || op == BC_JFORL);
9461 if (LJ_DUALNUM) { 9462 if (LJ_DUALNUM) {
9462 dasm_put(Dst, 7313, FORL_IDX*8+4); 9463 dasm_put(Dst, 7314, FORL_IDX*8+4);
9463 if (vk) { 9464 if (vk) {
9464 dasm_put(Dst, 7318, FORL_STEP*8+4, FORL_STOP*8+4, FORL_IDX*8+4); 9465 dasm_put(Dst, 7319, FORL_STEP*8+4, FORL_STOP*8+4, FORL_IDX*8+4);
9465 } else { 9466 } else {
9466 dasm_put(Dst, 7332, FORL_STEP*8, FORL_STEP*8+4, FORL_STOP*8, FORL_STOP*8+4); 9467 dasm_put(Dst, 7333, FORL_STEP*8, FORL_STEP*8+4, FORL_STOP*8, FORL_STOP*8+4);
9467 } 9468 }
9468 dasm_put(Dst, 7348, FORL_EXT*8); 9469 dasm_put(Dst, 7349, FORL_EXT*8);
9469 if (op != BC_JFORL) { 9470 if (op != BC_JFORL) {
9470 dasm_put(Dst, 7355, 32-1); 9471 dasm_put(Dst, 7356, 32-1);
9471 } 9472 }
9472 dasm_put(Dst, 7358, FORL_EXT*8+4); 9473 dasm_put(Dst, 7359, FORL_EXT*8+4);
9473 if (op != BC_JFORL) { 9474 if (op != BC_JFORL) {
9474 dasm_put(Dst, 7361); 9475 dasm_put(Dst, 7362);
9475 } 9476 }
9476 if (op == BC_FORI) { 9477 if (op == BC_FORI) {
9477 dasm_put(Dst, 7363); 9478 dasm_put(Dst, 7364);
9478 } else if (op == BC_JFORI) { 9479 } else if (op == BC_JFORI) {
9479 dasm_put(Dst, 7366, -(BCBIAS_J*4 >> 16)); 9480 dasm_put(Dst, 7367, -(BCBIAS_J*4 >> 16));
9480 } else if (op == BC_IFORL) { 9481 } else if (op == BC_IFORL) {
9481 dasm_put(Dst, 7371, -(BCBIAS_J*4 >> 16)); 9482 dasm_put(Dst, 7372, -(BCBIAS_J*4 >> 16));
9482 } else { 9483 } else {
9483 dasm_put(Dst, 7376, BC_JLOOP); 9484 dasm_put(Dst, 7377, BC_JLOOP);
9484 } 9485 }
9485 dasm_put(Dst, 7379); 9486 dasm_put(Dst, 7380);
9486 if (vk) { 9487 if (vk) {
9487 dasm_put(Dst, 7395); 9488 dasm_put(Dst, 7396);
9488 } 9489 }
9489 } 9490 }
9490 if (vk) { 9491 if (vk) {
9491 if (LJ_DUALNUM) { 9492 if (LJ_DUALNUM) {
9492 dasm_put(Dst, 7402, FORL_IDX*8); 9493 dasm_put(Dst, 7403, FORL_IDX*8);
9493 } else { 9494 } else {
9494 dasm_put(Dst, 7406); 9495 dasm_put(Dst, 7407);
9495 } 9496 }
9496 dasm_put(Dst, 7408, FORL_STEP*8, FORL_STOP*8, FORL_STEP*8, FORL_IDX*8); 9497 dasm_put(Dst, 7409, FORL_STEP*8, FORL_STOP*8, FORL_STEP*8, FORL_IDX*8);
9497 } else { 9498 } else {
9498 if (LJ_DUALNUM) { 9499 if (LJ_DUALNUM) {
9499 dasm_put(Dst, 7418); 9500 dasm_put(Dst, 7419);
9500 } else { 9501 } else {
9501 dasm_put(Dst, 7420, FORL_STEP*8, FORL_STOP*8); 9502 dasm_put(Dst, 7421, FORL_STEP*8, FORL_STOP*8);
9502 } 9503 }
9503 dasm_put(Dst, 7429, FORL_IDX*8, FORL_STOP*8); 9504 dasm_put(Dst, 7430, FORL_IDX*8, FORL_STOP*8);
9504 } 9505 }
9505 dasm_put(Dst, 7438); 9506 dasm_put(Dst, 7439);
9506 if (op != BC_JFORL) { 9507 if (op != BC_JFORL) {
9507 dasm_put(Dst, 7440, 32-1); 9508 dasm_put(Dst, 7441, 32-1);
9508 } 9509 }
9509 dasm_put(Dst, 7443, FORL_EXT*8); 9510 dasm_put(Dst, 7444, FORL_EXT*8);
9510 if (op != BC_JFORL) { 9511 if (op != BC_JFORL) {
9511 dasm_put(Dst, 7446); 9512 dasm_put(Dst, 7447);
9512 } 9513 }
9513 dasm_put(Dst, 7448); 9514 dasm_put(Dst, 7449);
9514 if (op == BC_JFORI) { 9515 if (op == BC_JFORI) {
9515 dasm_put(Dst, 7450, -(BCBIAS_J*4 >> 16)); 9516 dasm_put(Dst, 7451, -(BCBIAS_J*4 >> 16));
9516 } 9517 }
9517 dasm_put(Dst, 7453); 9518 dasm_put(Dst, 7454);
9518 if (op == BC_FORI) { 9519 if (op == BC_FORI) {
9519 dasm_put(Dst, 7456); 9520 dasm_put(Dst, 7457);
9520 } else if (op == BC_IFORL) { 9521 } else if (op == BC_IFORL) {
9521 if (LJ_DUALNUM) { 9522 if (LJ_DUALNUM) {
9522 dasm_put(Dst, 7459); 9523 dasm_put(Dst, 7460);
9523 } else { 9524 } else {
9524 dasm_put(Dst, 7462); 9525 dasm_put(Dst, 7463);
9525 } 9526 }
9526 dasm_put(Dst, 7465, -(BCBIAS_J*4 >> 16)); 9527 dasm_put(Dst, 7466, -(BCBIAS_J*4 >> 16));
9527 } else if (op == BC_JFORI) { 9528 } else if (op == BC_JFORI) {
9528 dasm_put(Dst, 7469); 9529 dasm_put(Dst, 7470);
9529 } else { 9530 } else {
9530 dasm_put(Dst, 7472, BC_JLOOP); 9531 dasm_put(Dst, 7473, BC_JLOOP);
9531 } 9532 }
9532 if (LJ_DUALNUM) { 9533 if (LJ_DUALNUM) {
9533 dasm_put(Dst, 7475); 9534 dasm_put(Dst, 7476);
9534 } else { 9535 } else {
9535 dasm_put(Dst, 7478); 9536 dasm_put(Dst, 7479);
9536 } 9537 }
9537 dasm_put(Dst, 7490); 9538 dasm_put(Dst, 7491);
9538 if (op == BC_FORI) { 9539 if (op == BC_FORI) {
9539 dasm_put(Dst, 7492, -(BCBIAS_J*4 >> 16)); 9540 dasm_put(Dst, 7493, -(BCBIAS_J*4 >> 16));
9540 } else if (op == BC_IFORL) { 9541 } else if (op == BC_IFORL) {
9541 dasm_put(Dst, 7498); 9542 dasm_put(Dst, 7499);
9542 } else if (op == BC_JFORI) { 9543 } else if (op == BC_JFORI) {
9543 dasm_put(Dst, 7501); 9544 dasm_put(Dst, 7502);
9544 } else { 9545 } else {
9545 dasm_put(Dst, 7504, BC_JLOOP); 9546 dasm_put(Dst, 7505, BC_JLOOP);
9546 } 9547 }
9547 dasm_put(Dst, 7507); 9548 dasm_put(Dst, 7508);
9548 if (op == BC_JFORI) { 9549 if (op == BC_JFORI) {
9549 dasm_put(Dst, 7510, BC_JLOOP); 9550 dasm_put(Dst, 7511, BC_JLOOP);
9550 } 9551 }
9551 break; 9552 break;
9552 9553
9553 case BC_ITERL: 9554 case BC_ITERL:
9554#if LJ_HASJIT 9555#if LJ_HASJIT
9555 dasm_put(Dst, 7516, GG_DISP2HOT, -HOTCOUNT_LOOP); 9556 dasm_put(Dst, 7517, GG_DISP2HOT, -HOTCOUNT_LOOP);
9556#endif 9557#endif
9557 break; 9558 break;
9558 9559
@@ -9561,40 +9562,40 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop)
9561 break; 9562 break;
9562#endif 9563#endif
9563 case BC_IITERL: 9564 case BC_IITERL:
9564 dasm_put(Dst, 7526, LJ_TNIL); 9565 dasm_put(Dst, 7527, LJ_TNIL);
9565 if (op == BC_JITERL) { 9566 if (op == BC_JITERL) {
9566 dasm_put(Dst, 7533, BC_JLOOP); 9567 dasm_put(Dst, 7534, BC_JLOOP);
9567 } else { 9568 } else {
9568 dasm_put(Dst, 7538, 32-1, -(BCBIAS_J*4 >> 16)); 9569 dasm_put(Dst, 7539, 32-1, -(BCBIAS_J*4 >> 16));
9569 } 9570 }
9570 dasm_put(Dst, 7546); 9571 dasm_put(Dst, 7547);
9571 break; 9572 break;
9572 9573
9573 case BC_LOOP: 9574 case BC_LOOP:
9574#if LJ_HASJIT 9575#if LJ_HASJIT
9575 dasm_put(Dst, 7558, GG_DISP2HOT, -HOTCOUNT_LOOP); 9576 dasm_put(Dst, 7559, GG_DISP2HOT, -HOTCOUNT_LOOP);
9576#endif 9577#endif
9577 break; 9578 break;
9578 9579
9579 case BC_ILOOP: 9580 case BC_ILOOP:
9580 dasm_put(Dst, 7568); 9581 dasm_put(Dst, 7569);
9581 break; 9582 break;
9582 9583
9583 case BC_JLOOP: 9584 case BC_JLOOP:
9584#if LJ_HASJIT 9585#if LJ_HASJIT
9585 dasm_put(Dst, 7579, DISPATCH_J(trace), 32-1, DISPATCH_GL(vmstate), DtD(->mcode), DISPATCH_GL(jit_base), DISPATCH_GL(jit_L), GG_DISP2G+32768); 9586 dasm_put(Dst, 7580, DISPATCH_J(trace), 32-1, DISPATCH_GL(vmstate), DtD(->mcode), DISPATCH_GL(jit_base), DISPATCH_GL(jit_L), GG_DISP2G+32768);
9586#endif 9587#endif
9587 break; 9588 break;
9588 9589
9589 case BC_JMP: 9590 case BC_JMP:
9590 dasm_put(Dst, 7598, 32-1, -(BCBIAS_J*4 >> 16)); 9591 dasm_put(Dst, 7599, 32-1, -(BCBIAS_J*4 >> 16));
9591 break; 9592 break;
9592 9593
9593 /* -- Function headers -------------------------------------------------- */ 9594 /* -- Function headers -------------------------------------------------- */
9594 9595
9595 case BC_FUNCF: 9596 case BC_FUNCF:
9596#if LJ_HASJIT 9597#if LJ_HASJIT
9597 dasm_put(Dst, 7614, GG_DISP2HOT, -HOTCOUNT_CALL); 9598 dasm_put(Dst, 7615, GG_DISP2HOT, -HOTCOUNT_CALL);
9598#endif 9599#endif
9599 case BC_FUNCV: /* NYI: compiled vararg functions. */ 9600 case BC_FUNCV: /* NYI: compiled vararg functions. */
9600 break; 9601 break;
@@ -9604,42 +9605,42 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop)
9604 break; 9605 break;
9605#endif 9606#endif
9606 case BC_IFUNCF: 9607 case BC_IFUNCF:
9607 dasm_put(Dst, 7624, Dt1(->maxstack), -4+PC2PROTO(numparams), -4+PC2PROTO(k), 31-3); 9608 dasm_put(Dst, 7625, Dt1(->maxstack), -4+PC2PROTO(numparams), -4+PC2PROTO(k), 31-3);
9608 if (op != BC_JFUNCF) { 9609 if (op != BC_JFUNCF) {
9609 dasm_put(Dst, 7636); 9610 dasm_put(Dst, 7637);
9610 } 9611 }
9611 dasm_put(Dst, 7639); 9612 dasm_put(Dst, 7640);
9612 if (op == BC_JFUNCF) { 9613 if (op == BC_JFUNCF) {
9613 dasm_put(Dst, 7644, BC_JLOOP); 9614 dasm_put(Dst, 7645, BC_JLOOP);
9614 } else { 9615 } else {
9615 dasm_put(Dst, 7648); 9616 dasm_put(Dst, 7649);
9616 } 9617 }
9617 dasm_put(Dst, 7657); 9618 dasm_put(Dst, 7658);
9618 break; 9619 break;
9619 9620
9620 case BC_JFUNCV: 9621 case BC_JFUNCV:
9621#if !LJ_HASJIT 9622#if !LJ_HASJIT
9622 break; 9623 break;
9623#endif 9624#endif
9624 dasm_put(Dst, 7663); 9625 dasm_put(Dst, 7664);
9625 break; /* NYI: compiled vararg functions. */ 9626 break; /* NYI: compiled vararg functions. */
9626 9627
9627 case BC_IFUNCV: 9628 case BC_IFUNCV:
9628 dasm_put(Dst, 7665, Dt1(->maxstack), 8+FRAME_VARG, -4+PC2PROTO(k), -4+PC2PROTO(numparams), LJ_TNIL); 9629 dasm_put(Dst, 7666, Dt1(->maxstack), 8+FRAME_VARG, -4+PC2PROTO(k), -4+PC2PROTO(numparams), LJ_TNIL);
9629 break; 9630 break;
9630 9631
9631 case BC_FUNCC: 9632 case BC_FUNCC:
9632 case BC_FUNCCW: 9633 case BC_FUNCCW:
9633 if (op == BC_FUNCC) { 9634 if (op == BC_FUNCC) {
9634 dasm_put(Dst, 7718, Dt8(->f)); 9635 dasm_put(Dst, 7719, Dt8(->f));
9635 } else { 9636 } else {
9636 dasm_put(Dst, 7721, DISPATCH_GL(wrapf)); 9637 dasm_put(Dst, 7722, DISPATCH_GL(wrapf));
9637 } 9638 }
9638 dasm_put(Dst, 7724, Dt1(->maxstack), Dt1(->base), Dt1(->top), ~LJ_VMST_C); 9639 dasm_put(Dst, 7725, Dt1(->maxstack), Dt1(->base), Dt1(->top), ~LJ_VMST_C);
9639 if (op == BC_FUNCCW) { 9640 if (op == BC_FUNCCW) {
9640 dasm_put(Dst, 7737, Dt8(->f)); 9641 dasm_put(Dst, 7738, Dt8(->f));
9641 } 9642 }
9642 dasm_put(Dst, 7740, DISPATCH_GL(vmstate), Dt1(->base), 31-3, Dt1(->top), ~LJ_VMST_INTERP, DISPATCH_GL(vmstate)); 9643 dasm_put(Dst, 7741, DISPATCH_GL(vmstate), Dt1(->base), 31-3, Dt1(->top), ~LJ_VMST_INTERP, DISPATCH_GL(vmstate));
9643 break; 9644 break;
9644 9645
9645 /* ---------------------------------------------------------------------- */ 9646 /* ---------------------------------------------------------------------- */
@@ -9659,7 +9660,7 @@ static int build_backend(BuildCtx *ctx)
9659 9660
9660 build_subroutines(ctx); 9661 build_subroutines(ctx);
9661 9662
9662 dasm_put(Dst, 7761); 9663 dasm_put(Dst, 7762);
9663 for (op = 0; op < BC__MAX; op++) 9664 for (op = 0; op < BC__MAX; op++)
9664 build_ins(ctx, (BCOp)op, op); 9665 build_ins(ctx, (BCOp)op, op);
9665 9666