From d417ded17945b4211608d497d50b509e0274f5e0 Mon Sep 17 00:00:00 2001
From: Mike Pall <mike>
Date: Sat, 18 Nov 2017 12:23:57 +0100
Subject: [PATCH 24/72] ARM64: Fix xpcall() error case (really).
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Thanks to François Perrad and Stefan Pejic.
---
src/vm_arm64.dasc | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/src/vm_arm64.dasc b/src/vm_arm64.dasc
index 241c58a..c55794a 100644
--- a/src/vm_arm64.dasc
+++ b/src/vm_arm64.dasc
@@ -1182,7 +1182,7 @@ static void build_subroutines(BuildCtx *ctx)
|.ffunc xpcall
| ldp CARG1, CARG2, [BASE]
| ldrb TMP0w, GL->hookmask
- | subs NARGS8:RC, NARGS8:RC, #16
+ | subs NARGS8:TMP1, NARGS8:RC, #16
| blo ->fff_fallback
| mov RB, BASE
| asr ITYPE, CARG2, #47
@@ -1190,6 +1190,7 @@ static void build_subroutines(BuildCtx *ctx)
| cmn ITYPE, #-LJ_TFUNC
| add PC, TMP0, #24+FRAME_PCALL
| bne ->fff_fallback // Traceback must be a function.
+ | mov NARGS8:RC, NARGS8:TMP1
| add BASE, BASE, #24
| stp CARG2, CARG1, [RB] // Swap function and traceback.
| cbz NARGS8:RC, ->vm_call_dispatch
--
2.20.1