aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMike Pall <mike>2021-10-02 17:49:50 +0200
committerMike Pall <mike>2021-10-02 17:49:50 +0200
commite4b4d9451402be704d5b47a359f640a29db4977f (patch)
tree9a8129936f61be1730f322d4e1391b9076a0fca7
parent4a70bd71ac18ccd57a335a4f5b8cbdefbbd4931b (diff)
downloadluajit-e4b4d9451402be704d5b47a359f640a29db4977f.tar.gz
luajit-e4b4d9451402be704d5b47a359f640a29db4977f.tar.bz2
luajit-e4b4d9451402be704d5b47a359f640a29db4977f.zip
ARM64: Fix IR_HREF code generation.
-rw-r--r--src/lj_asm_arm64.h6
1 files changed, 3 insertions, 3 deletions
diff --git a/src/lj_asm_arm64.h b/src/lj_asm_arm64.h
index 5decfff4..67c53ee2 100644
--- a/src/lj_asm_arm64.h
+++ b/src/lj_asm_arm64.h
@@ -791,7 +791,7 @@ static void asm_href(ASMState *as, IRIns *ir, IROp merge)
791 } 791 }
792 } else if (irt_isaddr(kt)) { 792 } else if (irt_isaddr(kt)) {
793 if (isk) { 793 if (isk) {
794 int64_t kk = ((int64_t)irt_toitype(irkey->t) << 47) | irkey[1].tv.u64; 794 int64_t kk = ((int64_t)irt_toitype(kt) << 47) | irkey[1].tv.u64;
795 scr = ra_allock(as, kk, allow); 795 scr = ra_allock(as, kk, allow);
796 } else { 796 } else {
797 scr = ra_scratch(as, allow); 797 scr = ra_scratch(as, allow);
@@ -799,7 +799,7 @@ static void asm_href(ASMState *as, IRIns *ir, IROp merge)
799 rset_clear(allow, scr); 799 rset_clear(allow, scr);
800 } else { 800 } else {
801 lj_assertA(irt_ispri(kt) && !irt_isnil(kt), "bad HREF key type"); 801 lj_assertA(irt_ispri(kt) && !irt_isnil(kt), "bad HREF key type");
802 type = ra_allock(as, ~((int64_t)~irt_toitype(ir->t) << 47), allow); 802 type = ra_allock(as, ~((int64_t)~irt_toitype(kt) << 47), allow);
803 scr = ra_scratch(as, rset_clear(allow, type)); 803 scr = ra_scratch(as, rset_clear(allow, type));
804 rset_clear(allow, scr); 804 rset_clear(allow, scr);
805 } 805 }
@@ -848,7 +848,7 @@ static void asm_href(ASMState *as, IRIns *ir, IROp merge)
848 emit_lso(as, A64I_LDRx, scr, dest, offsetof(Node, key.u64)); 848 emit_lso(as, A64I_LDRx, scr, dest, offsetof(Node, key.u64));
849 } 849 }
850 } else { 850 } else {
851 emit_nm(as, A64I_CMPw, scr, type); 851 emit_nm(as, A64I_CMPx, scr, type);
852 emit_lso(as, A64I_LDRx, scr, dest, offsetof(Node, key)); 852 emit_lso(as, A64I_LDRx, scr, dest, offsetof(Node, key));
853 } 853 }
854 854