On 09/21/2016 01:07 AM, Leon Alrae wrote:
+    tcg_gen_brcond_tl(TCG_COND_EQ, addr, cpu_lladdr, l1);
+    tcg_temp_free(addr);
+    tcg_gen_movi_tl(t0, 0);
+    tcg_gen_br(done);
+
+    gen_set_label(l1);
+    /* generate cmpxchg */
+    val = tcg_temp_new();
+    gen_load_gpr(val, rt);
+    tcg_gen_atomic_cmpxchg_tl(t0, cpu_lladdr, cpu_llval, val,
+                              ctx->mem_idx, tcg_mo);
+    tcg_gen_setcond_tl(TCG_COND_EQ, t0, t0, cpu_llval);
+    tcg_temp_free(val);
+
+    gen_set_label(done);
+    /* store the result into the register */
+    gen_store_gpr(t0, rt);
     tcg_temp_free(t0);

The only thing I would change is to duplicate the gen_store_gpr into both branches, so that we don't have to store t0 into the stack across the blocks.

Otherwise,

Reviewed-by: Richard Henderson <r...@twiddle.net>


r~

Reply via email to