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 |
