diff options
author | Mike Pall <mike> | 2017-11-18 12:23:57 +0100 |
---|---|---|
committer | Mike Pall <mike> | 2017-11-18 12:23:57 +0100 |
commit | d417ded17945b4211608d497d50b509e0274f5e0 (patch) | |
tree | 6edd90f07251a73cc4fe190ecb83bc4d42a462c9 /src | |
parent | 734a3fa32c12c031d501df055c88601810f6c666 (diff) | |
download | luajit-d417ded17945b4211608d497d50b509e0274f5e0.tar.gz luajit-d417ded17945b4211608d497d50b509e0274f5e0.tar.bz2 luajit-d417ded17945b4211608d497d50b509e0274f5e0.zip |
ARM64: Fix xpcall() error case (really).
Thanks to François Perrad and Stefan Pejic.
Diffstat (limited to 'src')
-rw-r--r-- | src/vm_arm64.dasc | 3 |
1 files changed, 2 insertions, 1 deletions
diff --git a/src/vm_arm64.dasc b/src/vm_arm64.dasc index 241c58a1..c55794a6 100644 --- a/src/vm_arm64.dasc +++ b/src/vm_arm64.dasc | |||
@@ -1182,7 +1182,7 @@ static void build_subroutines(BuildCtx *ctx) | |||
1182 | |.ffunc xpcall | 1182 | |.ffunc xpcall |
1183 | | ldp CARG1, CARG2, [BASE] | 1183 | | ldp CARG1, CARG2, [BASE] |
1184 | | ldrb TMP0w, GL->hookmask | 1184 | | ldrb TMP0w, GL->hookmask |
1185 | | subs NARGS8:RC, NARGS8:RC, #16 | 1185 | | subs NARGS8:TMP1, NARGS8:RC, #16 |
1186 | | blo ->fff_fallback | 1186 | | blo ->fff_fallback |
1187 | | mov RB, BASE | 1187 | | mov RB, BASE |
1188 | | asr ITYPE, CARG2, #47 | 1188 | | asr ITYPE, CARG2, #47 |
@@ -1190,6 +1190,7 @@ static void build_subroutines(BuildCtx *ctx) | |||
1190 | | cmn ITYPE, #-LJ_TFUNC | 1190 | | cmn ITYPE, #-LJ_TFUNC |
1191 | | add PC, TMP0, #24+FRAME_PCALL | 1191 | | add PC, TMP0, #24+FRAME_PCALL |
1192 | | bne ->fff_fallback // Traceback must be a function. | 1192 | | bne ->fff_fallback // Traceback must be a function. |
1193 | | mov NARGS8:RC, NARGS8:TMP1 | ||
1193 | | add BASE, BASE, #24 | 1194 | | add BASE, BASE, #24 |
1194 | | stp CARG2, CARG1, [RB] // Swap function and traceback. | 1195 | | stp CARG2, CARG1, [RB] // Swap function and traceback. |
1195 | | cbz NARGS8:RC, ->vm_call_dispatch | 1196 | | cbz NARGS8:RC, ->vm_call_dispatch |