mirror of
https://github.com/LuaJIT/LuaJIT.git
synced 2025-02-07 15:14:08 +00:00
ARM64: Fix register allocation for IR_*LOAD.
Thanks to Peter Cawley. #1062
This commit is contained in:
parent
356231edaf
commit
7ff8f26eb8
@ -1107,6 +1107,8 @@ static void asm_ahuvload(ASMState *as, IRIns *ir)
|
||||
}
|
||||
type = ra_scratch(as, rset_clear(gpr, tmp));
|
||||
idx = asm_fuseahuref(as, ir->op1, &ofs, rset_clear(gpr, type), A64I_LDRx);
|
||||
rset_clear(gpr, idx);
|
||||
if (ofs & FUSE_REG) rset_clear(gpr, ofs & 31);
|
||||
if (ir->o == IR_VLOAD) ofs += 8 * ir->op2;
|
||||
/* Always do the type check, even if the load result is unused. */
|
||||
asm_guardcc(as, irt_isnum(ir->t) ? CC_LS : CC_NE);
|
||||
@ -1114,7 +1116,7 @@ static void asm_ahuvload(ASMState *as, IRIns *ir)
|
||||
lj_assertA(irt_isinteger(ir->t) || irt_isnum(ir->t),
|
||||
"bad load type %d", irt_type(ir->t));
|
||||
emit_nm(as, A64I_CMPx | A64F_SH(A64SH_LSR, 32),
|
||||
ra_allock(as, LJ_TISNUM << 15, rset_exclude(gpr, idx)), tmp);
|
||||
ra_allock(as, LJ_TISNUM << 15, gpr), tmp);
|
||||
} else if (irt_isaddr(ir->t)) {
|
||||
emit_n(as, (A64I_CMNx^A64I_K12) | A64F_U12(-irt_toitype(ir->t)), type);
|
||||
emit_dn(as, A64I_ASRx | A64F_IMMR(47), type, tmp);
|
||||
|
Loading…
Reference in New Issue
Block a user