aboutsummaryrefslogtreecommitdiff
path: root/src/lj_asm_arm64.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/lj_asm_arm64.h')
-rw-r--r--src/lj_asm_arm64.h9
1 files changed, 8 insertions, 1 deletions
diff --git a/src/lj_asm_arm64.h b/src/lj_asm_arm64.h
index 3cedd021..5decfff4 100644
--- a/src/lj_asm_arm64.h
+++ b/src/lj_asm_arm64.h
@@ -1814,7 +1814,14 @@ static void asm_stack_restore(ASMState *as, SnapShot *snap)
1814 IRIns *ir = IR(ref); 1814 IRIns *ir = IR(ref);
1815 if ((sn & SNAP_NORESTORE)) 1815 if ((sn & SNAP_NORESTORE))
1816 continue; 1816 continue;
1817 if (irt_isnum(ir->t)) { 1817 if ((sn & SNAP_KEYINDEX)) {
1818 RegSet allow = rset_exclude(RSET_GPR, RID_BASE);
1819 Reg r = irref_isk(ref) ? ra_allock(as, ir->i, allow) :
1820 ra_alloc1(as, ref, allow);
1821 rset_clear(allow, r);
1822 emit_lso(as, A64I_STRw, r, RID_BASE, ofs);
1823 emit_lso(as, A64I_STRw, ra_allock(as, LJ_KEYINDEX, allow), RID_BASE, ofs+4);
1824 } else if (irt_isnum(ir->t)) {
1818 Reg src = ra_alloc1(as, ref, RSET_FPR); 1825 Reg src = ra_alloc1(as, ref, RSET_FPR);
1819 emit_lso(as, A64I_STRd, (src & 31), RID_BASE, ofs); 1826 emit_lso(as, A64I_STRd, (src & 31), RID_BASE, ofs);
1820 } else { 1827 } else {