aboutsummaryrefslogtreecommitdiff
path: root/src/vm_ppc.dasc
diff options
context:
space:
mode:
authorMike Pall <mike>2012-10-09 13:19:57 +0200
committerMike Pall <mike>2012-10-09 13:19:57 +0200
commiteabfdfe1aa3b4b9c37b99137e6d5fb7cadbd47e9 (patch)
treeb7cf8922d69daedd5d5733214a77439c8986f570 /src/vm_ppc.dasc
parentda682b0e9184d4db7e8e477c682947d106790240 (diff)
downloadluajit-eabfdfe1aa3b4b9c37b99137e6d5fb7cadbd47e9.tar.gz
luajit-eabfdfe1aa3b4b9c37b99137e6d5fb7cadbd47e9.tar.bz2
luajit-eabfdfe1aa3b4b9c37b99137e6d5fb7cadbd47e9.zip
Don't use stack unwinding for lua_yield().
Diffstat (limited to 'src/vm_ppc.dasc')
-rw-r--r--src/vm_ppc.dasc11
1 files changed, 7 insertions, 4 deletions
diff --git a/src/vm_ppc.dasc b/src/vm_ppc.dasc
index 5a6737ae..ac572ec5 100644
--- a/src/vm_ppc.dasc
+++ b/src/vm_ppc.dasc
@@ -452,10 +452,13 @@ static void build_subroutines(BuildCtx *ctx)
452 | stwu TMP1, FRAME_PC(RA) // Prepend true to results. 452 | stwu TMP1, FRAME_PC(RA) // Prepend true to results.
453 | 453 |
454 |->vm_returnc: 454 |->vm_returnc:
455 | andix. TMP0, PC, FRAME_TYPE 455 | addi RD, RD, 8 // RD = (nresults+1)*8.
456 | addi RD, RD, 8 // RD = (nresults+1)*8. 456 | andix. TMP0, PC, FRAME_TYPE
457 | mr MULTRES, RD 457 | cmpwi cr1, RD, 0
458 | beq ->BC_RET_Z // Handle regular return to Lua. 458 | li CRET1, LUA_YIELD
459 | beq cr1, ->vm_unwind_c_eh
460 | mr MULTRES, RD
461 | beq ->BC_RET_Z // Handle regular return to Lua.
459 | 462 |
460 |->vm_return: 463 |->vm_return:
461 | // BASE = base, RA = resultptr, RD/MULTRES = (nresults+1)*8, PC = return 464 | // BASE = base, RA = resultptr, RD/MULTRES = (nresults+1)*8, PC = return