|
@@ -584,8 +584,8 @@ static void asm_href(ASMState *as, IRIns *ir, IROp merge)
|
|
|
else
|
|
|
emit_branch(as, ARMF_CC(ARMI_B, CC_EQ), l_end);
|
|
|
if (!irt_ispri(kt)) {
|
|
|
- emit_nm(as, ARMF_CC(ARMI_CMP, CC_EQ)^khi, tmp+1, keyhi);
|
|
|
- emit_nm(as, ARMI_CMP^k, tmp, key);
|
|
|
+ emit_nm(as, ARMF_CC(ARMI_CMP, CC_EQ)^k, tmp, key);
|
|
|
+ emit_nm(as, ARMI_CMP^khi, tmp+1, keyhi);
|
|
|
emit_lsox(as, ARMI_LDRD, tmp, dest, (int32_t)offsetof(Node, key));
|
|
|
} else {
|
|
|
emit_n(as, ARMI_CMP^khi, tmp);
|
|
@@ -674,10 +674,9 @@ static void asm_hrefk(ASMState *as, IRIns *ir)
|
|
|
(int32_t)ir_knum(irkey)->u32.hi, allow);
|
|
|
emit_opk(as, ARMI_CMP, 0, key,
|
|
|
(int32_t)ir_knum(irkey)->u32.lo, allow);
|
|
|
- } else if (ra_hasreg(key)) {
|
|
|
- emit_n(as, ARMF_CC(ARMI_CMN, CC_EQ)|ARMI_K12|-irt_toitype(irkey->t), type);
|
|
|
- emit_opk(as, ARMI_CMP, 0, key, irkey->i, allow);
|
|
|
} else {
|
|
|
+ if (ra_hasreg(key))
|
|
|
+ emit_opk(as, ARMF_CC(ARMI_CMP, CC_EQ), 0, key, irkey->i, allow);
|
|
|
emit_n(as, ARMI_CMN|ARMI_K12|-irt_toitype(irkey->t), type);
|
|
|
}
|
|
|
emit_lso(as, ARMI_LDR, type, idx, kofs+4);
|