aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMike Pall <mike>2023-09-15 05:27:29 +0200
committerMike Pall <mike>2023-09-15 05:27:29 +0200
commit18b8fd8de794d1de7c3193189f42c5b0534043f5 (patch)
treea85782389317883a6be5a073584eff0ddc99eb1a /src
parentb36f9fad63de19074d97df787146056c028e8fba (diff)
downloadluajit-18b8fd8de794d1de7c3193189f42c5b0534043f5.tar.gz
luajit-18b8fd8de794d1de7c3193189f42c5b0534043f5.tar.bz2
luajit-18b8fd8de794d1de7c3193189f42c5b0534043f5.zip
ARM64: External unwinder already restores non-volatile registers.
Thanks to Peter Cawley. #593
Diffstat (limited to 'src')
-rw-r--r--src/vm_arm64.dasc8
1 files changed, 4 insertions, 4 deletions
diff --git a/src/vm_arm64.dasc b/src/vm_arm64.dasc
index d622d2a0..34d29982 100644
--- a/src/vm_arm64.dasc
+++ b/src/vm_arm64.dasc
@@ -432,24 +432,24 @@ static void build_subroutines(BuildCtx *ctx)
432 | // (void *cframe, int errcode) 432 | // (void *cframe, int errcode)
433 | mov sp, CARG1 433 | mov sp, CARG1
434 | mov CRET1, CARG2 434 | mov CRET1, CARG2
435 |->vm_unwind_c_eh: // Landing pad for external unwinder.
436 | ldr L, SAVE_L 435 | ldr L, SAVE_L
437 | mv_vmstate TMP0w, C
438 | ldr GL, L->glref 436 | ldr GL, L->glref
437 |->vm_unwind_c_eh: // Landing pad for external unwinder.
438 | mv_vmstate TMP0w, C
439 | st_vmstate TMP0w 439 | st_vmstate TMP0w
440 | b ->vm_leave_unw 440 | b ->vm_leave_unw
441 | 441 |
442 |->vm_unwind_ff: // Unwind C stack, return from ff pcall. 442 |->vm_unwind_ff: // Unwind C stack, return from ff pcall.
443 | // (void *cframe) 443 | // (void *cframe)
444 | and sp, CARG1, #CFRAME_RAWMASK 444 | and sp, CARG1, #CFRAME_RAWMASK
445 |->vm_unwind_ff_eh: // Landing pad for external unwinder.
446 | ldr L, SAVE_L 445 | ldr L, SAVE_L
447 | movz TISNUM, #(LJ_TISNUM>>1)&0xffff, lsl #48 446 | movz TISNUM, #(LJ_TISNUM>>1)&0xffff, lsl #48
448 | movz TISNUMhi, #(LJ_TISNUM>>1)&0xffff, lsl #16 447 | movz TISNUMhi, #(LJ_TISNUM>>1)&0xffff, lsl #16
449 | movn TISNIL, #0 448 | movn TISNIL, #0
449 | ldr GL, L->glref // Setup pointer to global state.
450 |->vm_unwind_ff_eh: // Landing pad for external unwinder.
450 | mov RC, #16 // 2 results: false + error message. 451 | mov RC, #16 // 2 results: false + error message.
451 | ldr BASE, L->base 452 | ldr BASE, L->base
452 | ldr GL, L->glref // Setup pointer to global state.
453 | mov_false TMP0 453 | mov_false TMP0
454 | sub RA, BASE, #8 // Results start at BASE-8. 454 | sub RA, BASE, #8 // Results start at BASE-8.
455 | ldr PC, [BASE, FRAME_PC] // Fetch PC of previous frame. 455 | ldr PC, [BASE, FRAME_PC] // Fetch PC of previous frame.