@@ -1283,7 +1283,6 @@ static void asm_obar(ASMState *as, IRIns *ir)
|
|||||||
const CCallInfo *ci = &lj_ir_callinfo[IRCALL_lj_gc_barrieruv];
|
const CCallInfo *ci = &lj_ir_callinfo[IRCALL_lj_gc_barrieruv];
|
||||||
IRRef args[2];
|
IRRef args[2];
|
||||||
MCLabel l_end;
|
MCLabel l_end;
|
||||||
RegSet allow = RSET_GPR;
|
|
||||||
Reg obj, val, tmp;
|
Reg obj, val, tmp;
|
||||||
/* No need for other object barriers (yet). */
|
/* No need for other object barriers (yet). */
|
||||||
lj_assertA(IR(ir->op1)->o == IR_UREFC, "bad OBAR type");
|
lj_assertA(IR(ir->op1)->o == IR_UREFC, "bad OBAR type");
|
||||||
@@ -1294,9 +1293,8 @@ static void asm_obar(ASMState *as, IRIns *ir)
|
|||||||
asm_gencall(as, ci, args);
|
asm_gencall(as, ci, args);
|
||||||
emit_dm(as, A64I_MOVx, ra_releasetmp(as, ASMREF_TMP1), RID_GL);
|
emit_dm(as, A64I_MOVx, ra_releasetmp(as, ASMREF_TMP1), RID_GL);
|
||||||
obj = IR(ir->op1)->r;
|
obj = IR(ir->op1)->r;
|
||||||
tmp = ra_scratch(as, rset_exclude(allow, obj));
|
tmp = ra_scratch(as, rset_exclude(RSET_GPR, obj));
|
||||||
emit_cond_branch(as, CC_EQ, l_end);
|
emit_tnb(as, A64I_TBZ, tmp, lj_ffs(LJ_GC_BLACK), l_end);
|
||||||
emit_n(as, A64I_TSTw^emit_isk13(LJ_GC_BLACK, 0), tmp);
|
|
||||||
emit_cond_branch(as, CC_EQ, l_end);
|
emit_cond_branch(as, CC_EQ, l_end);
|
||||||
emit_n(as, A64I_TSTw^emit_isk13(LJ_GC_WHITES, 0), RID_TMP);
|
emit_n(as, A64I_TSTw^emit_isk13(LJ_GC_WHITES, 0), RID_TMP);
|
||||||
val = ra_alloc1(as, ir->op2, rset_exclude(RSET_GPR, obj));
|
val = ra_alloc1(as, ir->op2, rset_exclude(RSET_GPR, obj));
|
||||||
|
|||||||
Reference in New Issue
Block a user