diff options
author | Mike Pall <mike> | 2023-11-12 15:11:29 +0100 |
---|---|---|
committer | Mike Pall <mike> | 2023-11-12 15:11:29 +0100 |
commit | 7c9671a043468b27c02301b6261a9e2a8eff787f (patch) | |
tree | 0b9d99bcc7b4319a5d9274c7b320a7e07a7dbdb2 /src | |
parent | 69bbbf77363ceb00ad2653a7729a5c9e8316e61f (diff) | |
parent | a4c1640432a9d8a60624cdc8065b15078c228e36 (diff) | |
download | luajit-7c9671a043468b27c02301b6261a9e2a8eff787f.tar.gz luajit-7c9671a043468b27c02301b6261a9e2a8eff787f.tar.bz2 luajit-7c9671a043468b27c02301b6261a9e2a8eff787f.zip |
Merge branch 'master' into v2.1
Diffstat (limited to 'src')
-rw-r--r-- | src/vm_arm.dasc | 7 | ||||
-rw-r--r-- | src/vm_arm64.dasc | 8 | ||||
-rw-r--r-- | src/vm_mips.dasc | 10 | ||||
-rw-r--r-- | src/vm_mips64.dasc | 12 | ||||
-rw-r--r-- | src/vm_ppc.dasc | 9 | ||||
-rw-r--r-- | src/vm_x64.dasc | 6 | ||||
-rw-r--r-- | src/vm_x86.dasc | 6 |
7 files changed, 55 insertions, 3 deletions
diff --git a/src/vm_arm.dasc b/src/vm_arm.dasc index 0d1ea95f..fc08c658 100644 --- a/src/vm_arm.dasc +++ b/src/vm_arm.dasc | |||
@@ -1195,8 +1195,11 @@ static void build_subroutines(BuildCtx *ctx) | |||
1195 | |//-- Base library: catch errors ---------------------------------------- | 1195 | |//-- Base library: catch errors ---------------------------------------- |
1196 | | | 1196 | | |
1197 | |.ffunc pcall | 1197 | |.ffunc pcall |
1198 | | ldr RB, L->maxstack | ||
1199 | | add INS, BASE, NARGS8:RC | ||
1198 | | ldrb RA, [DISPATCH, #DISPATCH_GL(hookmask)] | 1200 | | ldrb RA, [DISPATCH, #DISPATCH_GL(hookmask)] |
1199 | | cmp NARGS8:RC, #8 | 1201 | | cmp NARGS8:RC, #8 |
1202 | | cmphs RB, INS | ||
1200 | | blo ->fff_fallback | 1203 | | blo ->fff_fallback |
1201 | | tst RA, #HOOK_ACTIVE // Remember active hook before pcall. | 1204 | | tst RA, #HOOK_ACTIVE // Remember active hook before pcall. |
1202 | | mov RB, BASE | 1205 | | mov RB, BASE |
@@ -1207,7 +1210,11 @@ static void build_subroutines(BuildCtx *ctx) | |||
1207 | | b ->vm_call_dispatch | 1210 | | b ->vm_call_dispatch |
1208 | | | 1211 | | |
1209 | |.ffunc_2 xpcall | 1212 | |.ffunc_2 xpcall |
1213 | | ldr RB, L->maxstack | ||
1214 | | add INS, BASE, NARGS8:RC | ||
1210 | | ldrb RA, [DISPATCH, #DISPATCH_GL(hookmask)] | 1215 | | ldrb RA, [DISPATCH, #DISPATCH_GL(hookmask)] |
1216 | | cmp RB, INS | ||
1217 | | blo ->fff_fallback | ||
1211 | | checkfunc CARG4, ->fff_fallback // Traceback must be a function. | 1218 | | checkfunc CARG4, ->fff_fallback // Traceback must be a function. |
1212 | | mov RB, BASE | 1219 | | mov RB, BASE |
1213 | | strd CARG12, [BASE, #8] // Swap function and traceback. | 1220 | | strd CARG12, [BASE, #8] // Swap function and traceback. |
diff --git a/src/vm_arm64.dasc b/src/vm_arm64.dasc index 2aaa64cb..a6ce0507 100644 --- a/src/vm_arm64.dasc +++ b/src/vm_arm64.dasc | |||
@@ -1211,6 +1211,10 @@ static void build_subroutines(BuildCtx *ctx) | |||
1211 | |//-- Base library: catch errors ---------------------------------------- | 1211 | |//-- Base library: catch errors ---------------------------------------- |
1212 | | | 1212 | | |
1213 | |.ffunc pcall | 1213 | |.ffunc pcall |
1214 | | ldr TMP1, L->maxstack | ||
1215 | | add TMP2, BASE, NARGS8:RC | ||
1216 | | cmp TMP1, TMP2 | ||
1217 | | blo ->fff_fallback | ||
1214 | | cmp NARGS8:RC, #8 | 1218 | | cmp NARGS8:RC, #8 |
1215 | | ldrb TMP0w, GL->hookmask | 1219 | | ldrb TMP0w, GL->hookmask |
1216 | | blo ->fff_fallback | 1220 | | blo ->fff_fallback |
@@ -1230,6 +1234,10 @@ static void build_subroutines(BuildCtx *ctx) | |||
1230 | | b ->vm_call_dispatch | 1234 | | b ->vm_call_dispatch |
1231 | | | 1235 | | |
1232 | |.ffunc xpcall | 1236 | |.ffunc xpcall |
1237 | | ldr TMP1, L->maxstack | ||
1238 | | add TMP2, BASE, NARGS8:RC | ||
1239 | | cmp TMP1, TMP2 | ||
1240 | | blo ->fff_fallback | ||
1233 | | ldp CARG1, CARG2, [BASE] | 1241 | | ldp CARG1, CARG2, [BASE] |
1234 | | ldrb TMP0w, GL->hookmask | 1242 | | ldrb TMP0w, GL->hookmask |
1235 | | subs NARGS8:TMP1, NARGS8:RC, #16 | 1243 | | subs NARGS8:TMP1, NARGS8:RC, #16 |
diff --git a/src/vm_mips.dasc b/src/vm_mips.dasc index f276745c..8760a1f6 100644 --- a/src/vm_mips.dasc +++ b/src/vm_mips.dasc | |||
@@ -1374,9 +1374,13 @@ static void build_subroutines(BuildCtx *ctx) | |||
1374 | |//-- Base library: catch errors ---------------------------------------- | 1374 | |//-- Base library: catch errors ---------------------------------------- |
1375 | | | 1375 | | |
1376 | |.ffunc pcall | 1376 | |.ffunc pcall |
1377 | | lw TMP1, L->maxstack | ||
1378 | | addu TMP2, BASE, NARGS8:RC | ||
1377 | | lbu TMP3, DISPATCH_GL(hookmask)(DISPATCH) | 1379 | | lbu TMP3, DISPATCH_GL(hookmask)(DISPATCH) |
1378 | | beqz NARGS8:RC, ->fff_fallback | 1380 | | beqz NARGS8:RC, ->fff_fallback |
1379 | | move TMP2, BASE | 1381 | |. sltu AT, TMP1, TMP2 |
1382 | | bnez AT, ->fff_fallback | ||
1383 | |. move TMP2, BASE | ||
1380 | | addiu BASE, BASE, 8 | 1384 | | addiu BASE, BASE, 8 |
1381 | | // Remember active hook before pcall. | 1385 | | // Remember active hook before pcall. |
1382 | | srl TMP3, TMP3, HOOK_ACTIVE_SHIFT | 1386 | | srl TMP3, TMP3, HOOK_ACTIVE_SHIFT |
@@ -1386,8 +1390,12 @@ static void build_subroutines(BuildCtx *ctx) | |||
1386 | |. addiu NARGS8:RC, NARGS8:RC, -8 | 1390 | |. addiu NARGS8:RC, NARGS8:RC, -8 |
1387 | | | 1391 | | |
1388 | |.ffunc xpcall | 1392 | |.ffunc xpcall |
1393 | | lw TMP1, L->maxstack | ||
1394 | | addu TMP2, BASE, NARGS8:RC | ||
1389 | | sltiu AT, NARGS8:RC, 16 | 1395 | | sltiu AT, NARGS8:RC, 16 |
1390 | | lw CARG4, 8+HI(BASE) | 1396 | | lw CARG4, 8+HI(BASE) |
1397 | | sltu TMP1, TMP1, TMP2 | ||
1398 | | or AT, AT, TMP1 | ||
1391 | | bnez AT, ->fff_fallback | 1399 | | bnez AT, ->fff_fallback |
1392 | |. lw CARG3, 8+LO(BASE) | 1400 | |. lw CARG3, 8+LO(BASE) |
1393 | | lw CARG1, LO(BASE) | 1401 | | lw CARG1, LO(BASE) |
diff --git a/src/vm_mips64.dasc b/src/vm_mips64.dasc index ef0d901d..a8d20413 100644 --- a/src/vm_mips64.dasc +++ b/src/vm_mips64.dasc | |||
@@ -1415,8 +1415,12 @@ static void build_subroutines(BuildCtx *ctx) | |||
1415 | |//-- Base library: catch errors ---------------------------------------- | 1415 | |//-- Base library: catch errors ---------------------------------------- |
1416 | | | 1416 | | |
1417 | |.ffunc pcall | 1417 | |.ffunc pcall |
1418 | | ld TMP1, L->maxstack | ||
1419 | | daddu TMP2, BASE, NARGS8:RC | ||
1420 | | sltu AT, TMP1, TMP2 | ||
1421 | | bnez AT, ->fff_fallback | ||
1422 | |. lbu TMP3, DISPATCH_GL(hookmask)(DISPATCH) | ||
1418 | | daddiu NARGS8:RC, NARGS8:RC, -8 | 1423 | | daddiu NARGS8:RC, NARGS8:RC, -8 |
1419 | | lbu TMP3, DISPATCH_GL(hookmask)(DISPATCH) | ||
1420 | | bltz NARGS8:RC, ->fff_fallback | 1424 | | bltz NARGS8:RC, ->fff_fallback |
1421 | |. move TMP2, BASE | 1425 | |. move TMP2, BASE |
1422 | | daddiu BASE, BASE, 16 | 1426 | | daddiu BASE, BASE, 16 |
@@ -1437,8 +1441,12 @@ static void build_subroutines(BuildCtx *ctx) | |||
1437 | |. nop | 1441 | |. nop |
1438 | | | 1442 | | |
1439 | |.ffunc xpcall | 1443 | |.ffunc xpcall |
1444 | | ld TMP1, L->maxstack | ||
1445 | | daddu TMP2, BASE, NARGS8:RC | ||
1446 | | sltu AT, TMP1, TMP2 | ||
1447 | | bnez AT, ->fff_fallback | ||
1448 | |. ld CARG1, 0(BASE) | ||
1440 | | daddiu NARGS8:TMP0, NARGS8:RC, -16 | 1449 | | daddiu NARGS8:TMP0, NARGS8:RC, -16 |
1441 | | ld CARG1, 0(BASE) | ||
1442 | | ld CARG2, 8(BASE) | 1450 | | ld CARG2, 8(BASE) |
1443 | | bltz NARGS8:TMP0, ->fff_fallback | 1451 | | bltz NARGS8:TMP0, ->fff_fallback |
1444 | |. lbu TMP1, DISPATCH_GL(hookmask)(DISPATCH) | 1452 | |. lbu TMP1, DISPATCH_GL(hookmask)(DISPATCH) |
diff --git a/src/vm_ppc.dasc b/src/vm_ppc.dasc index f2e5a08f..abcc03e5 100644 --- a/src/vm_ppc.dasc +++ b/src/vm_ppc.dasc | |||
@@ -1735,8 +1735,12 @@ static void build_subroutines(BuildCtx *ctx) | |||
1735 | |//-- Base library: catch errors ---------------------------------------- | 1735 | |//-- Base library: catch errors ---------------------------------------- |
1736 | | | 1736 | | |
1737 | |.ffunc pcall | 1737 | |.ffunc pcall |
1738 | | lwz TMP1, L->maxstack | ||
1739 | | add TMP2, BASE, NARGS8:RC | ||
1738 | | cmplwi NARGS8:RC, 8 | 1740 | | cmplwi NARGS8:RC, 8 |
1739 | | lbz TMP3, DISPATCH_GL(hookmask)(DISPATCH) | 1741 | | lbz TMP3, DISPATCH_GL(hookmask)(DISPATCH) |
1742 | | cmplw cr1, TMP1, TMP2 | ||
1743 | | cror 4*cr0+lt, 4*cr0+lt, 4*cr1+lt | ||
1740 | | blt ->fff_fallback | 1744 | | blt ->fff_fallback |
1741 | | mr TMP2, BASE | 1745 | | mr TMP2, BASE |
1742 | | la BASE, 8(BASE) | 1746 | | la BASE, 8(BASE) |
@@ -1747,14 +1751,19 @@ static void build_subroutines(BuildCtx *ctx) | |||
1747 | | b ->vm_call_dispatch | 1751 | | b ->vm_call_dispatch |
1748 | | | 1752 | | |
1749 | |.ffunc xpcall | 1753 | |.ffunc xpcall |
1754 | | lwz TMP1, L->maxstack | ||
1755 | | add TMP2, BASE, NARGS8:RC | ||
1750 | | cmplwi NARGS8:RC, 16 | 1756 | | cmplwi NARGS8:RC, 16 |
1751 | | lwz CARG3, 8(BASE) | 1757 | | lwz CARG3, 8(BASE) |
1758 | | cmplw cr1, TMP1, TMP2 | ||
1752 | |.if FPU | 1759 | |.if FPU |
1753 | | lfd FARG2, 8(BASE) | 1760 | | lfd FARG2, 8(BASE) |
1761 | | cror 4*cr0+lt, 4*cr0+lt, 4*cr1+lt | ||
1754 | | lfd FARG1, 0(BASE) | 1762 | | lfd FARG1, 0(BASE) |
1755 | |.else | 1763 | |.else |
1756 | | lwz CARG1, 0(BASE) | 1764 | | lwz CARG1, 0(BASE) |
1757 | | lwz CARG2, 4(BASE) | 1765 | | lwz CARG2, 4(BASE) |
1766 | | cror 4*cr0+lt, 4*cr0+lt, 4*cr1+lt | ||
1758 | | lwz CARG4, 12(BASE) | 1767 | | lwz CARG4, 12(BASE) |
1759 | |.endif | 1768 | |.endif |
1760 | | blt ->fff_fallback | 1769 | | blt ->fff_fallback |
diff --git a/src/vm_x64.dasc b/src/vm_x64.dasc index 3635ba28..8c46ea59 100644 --- a/src/vm_x64.dasc +++ b/src/vm_x64.dasc | |||
@@ -1463,6 +1463,9 @@ static void build_subroutines(BuildCtx *ctx) | |||
1463 | |//-- Base library: catch errors ---------------------------------------- | 1463 | |//-- Base library: catch errors ---------------------------------------- |
1464 | | | 1464 | | |
1465 | |.ffunc_1 pcall | 1465 | |.ffunc_1 pcall |
1466 | | mov L:RB, SAVE_L | ||
1467 | | lea RA, [BASE+NARGS:RD*8] | ||
1468 | | cmp RA, L:RB->maxstack; ja ->fff_fallback | ||
1466 | | lea RA, [BASE+16] | 1469 | | lea RA, [BASE+16] |
1467 | | sub NARGS:RDd, 1 | 1470 | | sub NARGS:RDd, 1 |
1468 | | mov PCd, 16+FRAME_PCALL | 1471 | | mov PCd, 16+FRAME_PCALL |
@@ -1481,6 +1484,9 @@ static void build_subroutines(BuildCtx *ctx) | |||
1481 | | jmp ->vm_call_dispatch | 1484 | | jmp ->vm_call_dispatch |
1482 | | | 1485 | | |
1483 | |.ffunc_2 xpcall | 1486 | |.ffunc_2 xpcall |
1487 | | mov L:RB, SAVE_L | ||
1488 | | lea RA, [BASE+NARGS:RD*8] | ||
1489 | | cmp RA, L:RB->maxstack; ja ->fff_fallback | ||
1484 | | mov LFUNC:RA, [BASE+8] | 1490 | | mov LFUNC:RA, [BASE+8] |
1485 | | checktp_nc LFUNC:RA, LJ_TFUNC, ->fff_fallback | 1491 | | checktp_nc LFUNC:RA, LJ_TFUNC, ->fff_fallback |
1486 | | mov LFUNC:RB, [BASE] // Swap function and traceback. | 1492 | | mov LFUNC:RB, [BASE] // Swap function and traceback. |
diff --git a/src/vm_x86.dasc b/src/vm_x86.dasc index 85d9d5fe..9c5ae384 100644 --- a/src/vm_x86.dasc +++ b/src/vm_x86.dasc | |||
@@ -1793,6 +1793,9 @@ static void build_subroutines(BuildCtx *ctx) | |||
1793 | |//-- Base library: catch errors ---------------------------------------- | 1793 | |//-- Base library: catch errors ---------------------------------------- |
1794 | | | 1794 | | |
1795 | |.ffunc_1 pcall | 1795 | |.ffunc_1 pcall |
1796 | | mov L:RB, SAVE_L | ||
1797 | | lea RA, [BASE+NARGS:RD*8] | ||
1798 | | cmp RA, L:RB->maxstack; ja ->fff_fallback | ||
1796 | | lea RA, [BASE+8] | 1799 | | lea RA, [BASE+8] |
1797 | | sub NARGS:RD, 1 | 1800 | | sub NARGS:RD, 1 |
1798 | | mov PC, 8+FRAME_PCALL | 1801 | | mov PC, 8+FRAME_PCALL |
@@ -1804,6 +1807,9 @@ static void build_subroutines(BuildCtx *ctx) | |||
1804 | | jmp ->vm_call_dispatch | 1807 | | jmp ->vm_call_dispatch |
1805 | | | 1808 | | |
1806 | |.ffunc_2 xpcall | 1809 | |.ffunc_2 xpcall |
1810 | | mov L:RB, SAVE_L | ||
1811 | | lea RA, [BASE+NARGS:RD*8] | ||
1812 | | cmp RA, L:RB->maxstack; ja ->fff_fallback | ||
1807 | | cmp dword [BASE+12], LJ_TFUNC; jne ->fff_fallback | 1813 | | cmp dword [BASE+12], LJ_TFUNC; jne ->fff_fallback |
1808 | | mov RB, [BASE+4] // Swap function and traceback. | 1814 | | mov RB, [BASE+4] // Swap function and traceback. |
1809 | | mov [BASE+12], RB | 1815 | | mov [BASE+12], RB |