diff options
Diffstat (limited to 'src/lj_asm_arm.h')
-rw-r--r-- | src/lj_asm_arm.h | 9 |
1 files changed, 4 insertions, 5 deletions
diff --git a/src/lj_asm_arm.h b/src/lj_asm_arm.h index a618c8a9..77751ca9 100644 --- a/src/lj_asm_arm.h +++ b/src/lj_asm_arm.h | |||
@@ -584,8 +584,8 @@ static void asm_href(ASMState *as, IRIns *ir, IROp merge) | |||
584 | else | 584 | else |
585 | emit_branch(as, ARMF_CC(ARMI_B, CC_EQ), l_end); | 585 | emit_branch(as, ARMF_CC(ARMI_B, CC_EQ), l_end); |
586 | if (!irt_ispri(kt)) { | 586 | if (!irt_ispri(kt)) { |
587 | emit_nm(as, ARMF_CC(ARMI_CMP, CC_EQ)^khi, tmp+1, keyhi); | 587 | emit_nm(as, ARMF_CC(ARMI_CMP, CC_EQ)^k, tmp, key); |
588 | emit_nm(as, ARMI_CMP^k, tmp, key); | 588 | emit_nm(as, ARMI_CMP^khi, tmp+1, keyhi); |
589 | emit_lsox(as, ARMI_LDRD, tmp, dest, (int32_t)offsetof(Node, key)); | 589 | emit_lsox(as, ARMI_LDRD, tmp, dest, (int32_t)offsetof(Node, key)); |
590 | } else { | 590 | } else { |
591 | emit_n(as, ARMI_CMP^khi, tmp); | 591 | emit_n(as, ARMI_CMP^khi, tmp); |
@@ -674,10 +674,9 @@ static void asm_hrefk(ASMState *as, IRIns *ir) | |||
674 | (int32_t)ir_knum(irkey)->u32.hi, allow); | 674 | (int32_t)ir_knum(irkey)->u32.hi, allow); |
675 | emit_opk(as, ARMI_CMP, 0, key, | 675 | emit_opk(as, ARMI_CMP, 0, key, |
676 | (int32_t)ir_knum(irkey)->u32.lo, allow); | 676 | (int32_t)ir_knum(irkey)->u32.lo, allow); |
677 | } else if (ra_hasreg(key)) { | ||
678 | emit_n(as, ARMF_CC(ARMI_CMN, CC_EQ)|ARMI_K12|-irt_toitype(irkey->t), type); | ||
679 | emit_opk(as, ARMI_CMP, 0, key, irkey->i, allow); | ||
680 | } else { | 677 | } else { |
678 | if (ra_hasreg(key)) | ||
679 | emit_opk(as, ARMF_CC(ARMI_CMP, CC_EQ), 0, key, irkey->i, allow); | ||
681 | emit_n(as, ARMI_CMN|ARMI_K12|-irt_toitype(irkey->t), type); | 680 | emit_n(as, ARMI_CMN|ARMI_K12|-irt_toitype(irkey->t), type); |
682 | } | 681 | } |
683 | emit_lso(as, ARMI_LDR, type, idx, kofs+4); | 682 | emit_lso(as, ARMI_LDR, type, idx, kofs+4); |