diff options
author | Mike Pall <mike> | 2021-09-19 17:49:25 +0200 |
---|---|---|
committer | Mike Pall <mike> | 2021-09-19 17:49:25 +0200 |
commit | bb0f24101565d34ea8b70fdec4dd3f3b35a70e7b (patch) | |
tree | 01ea9267c638c96967036e03ff296d8dac82d610 /src/lj_asm_arm64.h | |
parent | 986bb406ad6af93eebd781860c384cc853103827 (diff) | |
download | luajit-bb0f24101565d34ea8b70fdec4dd3f3b35a70e7b.tar.gz luajit-bb0f24101565d34ea8b70fdec4dd3f3b35a70e7b.tar.bz2 luajit-bb0f24101565d34ea8b70fdec4dd3f3b35a70e7b.zip |
Compile table traversals: next(), pairs(), BC_ISNEXT/BC_ITERN.
Sponsored by OpenResty Inc.
Diffstat (limited to 'src/lj_asm_arm64.h')
-rw-r--r-- | src/lj_asm_arm64.h | 9 |
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 { |