diff options
author | Mike Pall <mike> | 2010-09-21 21:36:37 +0200 |
---|---|---|
committer | Mike Pall <mike> | 2010-09-21 21:36:37 +0200 |
commit | 0c0047e50c847a609dd1aa8f40973f1ed222033b (patch) | |
tree | 7515fa8e27037e393b8ba3a1a695abf11f50a452 /src | |
parent | 7336305e7c254e3ec4eb9274580e60e176d736b6 (diff) | |
download | luajit-0c0047e50c847a609dd1aa8f40973f1ed222033b.tar.gz luajit-0c0047e50c847a609dd1aa8f40973f1ed222033b.tar.bz2 luajit-0c0047e50c847a609dd1aa8f40973f1ed222033b.zip |
PPC: Add missing register setup after unwind to ff pcall.
Diffstat (limited to 'src')
-rw-r--r-- | src/buildvm_ppc.dasc | 12 |
1 files changed, 10 insertions, 2 deletions
diff --git a/src/buildvm_ppc.dasc b/src/buildvm_ppc.dasc index 856311c7..a6ac25e2 100644 --- a/src/buildvm_ppc.dasc +++ b/src/buildvm_ppc.dasc | |||
@@ -391,12 +391,20 @@ static void build_subroutines(BuildCtx *ctx) | |||
391 | | rlwinm sp, CARG1, 0, 0, 29 | 391 | | rlwinm sp, CARG1, 0, 0, 29 |
392 | |->vm_unwind_ff_eh: // Landing pad for external unwinder. | 392 | |->vm_unwind_ff_eh: // Landing pad for external unwinder. |
393 | | lwz L, SAVE_L | 393 | | lwz L, SAVE_L |
394 | | evsplati TISNUM, LJ_TISNUM+1 // Setup type comparison constants. | ||
395 | | evsplati TISFUNC, LJ_TFUNC | ||
396 | | lus TOBIT, 0x4338 | ||
397 | | evsplati TISTAB, LJ_TTAB | ||
398 | | li TMP0, 0 | ||
394 | | lwz BASE, L->base | 399 | | lwz BASE, L->base |
395 | | li TMP1, LJ_TFALSE | 400 | | evmergelo TOBIT, TOBIT, TMP0 |
396 | | lwz DISPATCH, L->glref // Setup pointer to dispatch table. | 401 | | lwz DISPATCH, L->glref // Setup pointer to dispatch table. |
402 | | evsplati TISSTR, LJ_TSTR | ||
403 | | li TMP1, LJ_TFALSE | ||
404 | | evsplati TISNIL, LJ_TNIL | ||
397 | | li_vmstate INTERP | 405 | | li_vmstate INTERP |
398 | | lwz PC, FRAME_PC(BASE) // Fetch PC of previous frame. | 406 | | lwz PC, FRAME_PC(BASE) // Fetch PC of previous frame. |
399 | | subi RA, BASE, 8 // Results start at BASE-8. | 407 | | la RA, -8(BASE) // Results start at BASE-8. |
400 | | addi DISPATCH, DISPATCH, GG_G2DISP | 408 | | addi DISPATCH, DISPATCH, GG_G2DISP |
401 | | stw TMP1, 0(RA) // Prepend false to error message. | 409 | | stw TMP1, 0(RA) // Prepend false to error message. |
402 | | li RD, 16 // 2 results: false + error message. | 410 | | li RD, 16 // 2 results: false + error message. |