ARM64: Fix xpcall() error case (really).

Thanks to François Perrad and Stefan Pejic.
This commit is contained in:
Mike Pall 2017-11-18 12:23:57 +01:00
parent 734a3fa32c
commit d417ded179

View File

@ -1182,7 +1182,7 @@ static void build_subroutines(BuildCtx *ctx)
|.ffunc xpcall |.ffunc xpcall
| ldp CARG1, CARG2, [BASE] | ldp CARG1, CARG2, [BASE]
| ldrb TMP0w, GL->hookmask | ldrb TMP0w, GL->hookmask
| subs NARGS8:RC, NARGS8:RC, #16 | subs NARGS8:TMP1, NARGS8:RC, #16
| blo ->fff_fallback | blo ->fff_fallback
| mov RB, BASE | mov RB, BASE
| asr ITYPE, CARG2, #47 | asr ITYPE, CARG2, #47
@ -1190,6 +1190,7 @@ static void build_subroutines(BuildCtx *ctx)
| cmn ITYPE, #-LJ_TFUNC | cmn ITYPE, #-LJ_TFUNC
| add PC, TMP0, #24+FRAME_PCALL | add PC, TMP0, #24+FRAME_PCALL
| bne ->fff_fallback // Traceback must be a function. | bne ->fff_fallback // Traceback must be a function.
| mov NARGS8:RC, NARGS8:TMP1
| add BASE, BASE, #24 | add BASE, BASE, #24
| stp CARG2, CARG1, [RB] // Swap function and traceback. | stp CARG2, CARG1, [RB] // Swap function and traceback.
| cbz NARGS8:RC, ->vm_call_dispatch | cbz NARGS8:RC, ->vm_call_dispatch