aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMike Pall <mike>2010-09-21 21:36:37 +0200
committerMike Pall <mike>2010-09-21 21:36:37 +0200
commit0c0047e50c847a609dd1aa8f40973f1ed222033b (patch)
tree7515fa8e27037e393b8ba3a1a695abf11f50a452 /src
parent7336305e7c254e3ec4eb9274580e60e176d736b6 (diff)
downloadluajit-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.dasc12
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.