diff options
author | Mike Pall <mike> | 2012-10-09 13:19:57 +0200 |
---|---|---|
committer | Mike Pall <mike> | 2012-10-09 13:19:57 +0200 |
commit | eabfdfe1aa3b4b9c37b99137e6d5fb7cadbd47e9 (patch) | |
tree | b7cf8922d69daedd5d5733214a77439c8986f570 /src/vm_ppc.dasc | |
parent | da682b0e9184d4db7e8e477c682947d106790240 (diff) | |
download | luajit-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.dasc | 11 |
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 |