|
@@ -1673,7 +1673,7 @@ static void asm_gc_check(ASMState *as)
|
|
|
asm_gencall(as, ci, args);
|
|
asm_gencall(as, ci, args);
|
|
|
emit_tsi(as, MIPSI_ADDIU, ra_releasetmp(as, ASMREF_TMP1), RID_JGL, -32768);
|
|
emit_tsi(as, MIPSI_ADDIU, ra_releasetmp(as, ASMREF_TMP1), RID_JGL, -32768);
|
|
|
tmp = ra_releasetmp(as, ASMREF_TMP2);
|
|
tmp = ra_releasetmp(as, ASMREF_TMP2);
|
|
|
- emit_loadi(as, tmp, (int32_t)as->gcsteps);
|
|
|
|
|
|
|
+ emit_loadi(as, tmp, as->gcsteps);
|
|
|
/* Jump around GC step if GC total < GC threshold. */
|
|
/* Jump around GC step if GC total < GC threshold. */
|
|
|
emit_branch(as, MIPSI_BNE, RID_TMP, RID_ZERO, l_end);
|
|
emit_branch(as, MIPSI_BNE, RID_TMP, RID_ZERO, l_end);
|
|
|
emit_dst(as, MIPSI_SLTU, RID_TMP, RID_TMP, tmp);
|
|
emit_dst(as, MIPSI_SLTU, RID_TMP, RID_TMP, tmp);
|
|
@@ -1770,6 +1770,7 @@ static void asm_ir(ASMState *as, IRIns *ir)
|
|
|
ra_alloc1(as, ir->op1, irt_isfp(ir->t) ? RSET_FPR : RSET_GPR); break;
|
|
ra_alloc1(as, ir->op1, irt_isfp(ir->t) ? RSET_FPR : RSET_GPR); break;
|
|
|
case IR_PHI: asm_phi(as, ir); break;
|
|
case IR_PHI: asm_phi(as, ir); break;
|
|
|
case IR_HIOP: asm_hiop(as, ir); break;
|
|
case IR_HIOP: asm_hiop(as, ir); break;
|
|
|
|
|
+ case IR_GCSTEP: asm_gcstep(as, ir); break;
|
|
|
|
|
|
|
|
/* Guarded assertions. */
|
|
/* Guarded assertions. */
|
|
|
case IR_EQ: case IR_NE: asm_compeq(as, ir); break;
|
|
case IR_EQ: case IR_NE: asm_compeq(as, ir); break;
|