On 10/21/22 23:17, Qi Hu wrote:
t0 = tcg_temp_local_new(); + t1 = tcg_temp_local_new(); label1 = gen_new_label();tcg_gen_mov_tl(a0, s->A0);tcg_gen_mov_tl(t0, s->T0);gen_set_label(label1);- t1 = tcg_temp_new(); t2 = tcg_temp_new(); tcg_gen_mov_tl(t2, t0); tcg_gen_neg_tl(t1, t0); tcg_gen_atomic_cmpxchg_tl(t0, a0, t0, t1, s->mem_index, ot | MO_LE); - tcg_temp_free(t1); tcg_gen_brcond_tl(TCG_COND_NE, t0, t2, label1);tcg_temp_free(t2);+ + tcg_gen_mov_tl(s->T0, t1); + tcg_temp_free(t1); tcg_temp_free(a0); - tcg_gen_mov_tl(s->T0, t0);
Instead of creating another temporary stored across the branch, simply replace this final mov with a neg. r~
