From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:58618) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1c1Etq-0001mw-J8 for qemu-devel@nongnu.org; Mon, 31 Oct 2016 11:53:30 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1c1Etp-0000rq-Bf for qemu-devel@nongnu.org; Mon, 31 Oct 2016 11:53:26 -0400 Received: from mail-qk0-x244.google.com ([2607:f8b0:400d:c09::244]:35151) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1c1Eto-0000rd-W0 for qemu-devel@nongnu.org; Mon, 31 Oct 2016 11:53:25 -0400 Received: by mail-qk0-x244.google.com with SMTP id v138so7512509qka.2 for ; Mon, 31 Oct 2016 08:53:24 -0700 (PDT) Sender: Richard Henderson From: Richard Henderson Date: Mon, 31 Oct 2016 09:52:53 -0600 Message-Id: <1477929173-2006-16-git-send-email-rth@twiddle.net> In-Reply-To: <1477929173-2006-1-git-send-email-rth@twiddle.net> References: <1477929173-2006-1-git-send-email-rth@twiddle.net> Subject: [Qemu-devel] [PULL for-2.8 15/15] target-sparc: Use tcg_gen_atomic_cmpxchg_tl List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org Cc: peter.maydell@linaro.org Tested-by: Mark Cave-Ayland Signed-off-by: Richard Henderson --- target-sparc/translate.c | 31 +++++++------------------------ 1 file changed, 7 insertions(+), 24 deletions(-) diff --git a/target-sparc/translate.c b/target-sparc/translate.c index 4c0346c..1ef2654 100644 --- a/target-sparc/translate.c +++ b/target-sparc/translate.c @@ -2391,31 +2391,21 @@ static void gen_swap_asi(DisasContext *dc, TCGv dst, TCGv src, } } -static void gen_cas_asi(DisasContext *dc, TCGv addr, TCGv cmpr, +static void gen_cas_asi(DisasContext *dc, TCGv addr, TCGv cmpv, int insn, int rd) { DisasASI da = get_asi(dc, insn, MO_TEUL); - TCGv cmpv, oldv, tmpv; + TCGv oldv; switch (da.type) { case GET_ASI_EXCP: return; case GET_ASI_DIRECT: - cmpv = tcg_temp_new(); oldv = tcg_temp_new(); - tmpv = tcg_temp_new(); - tcg_gen_ext32u_tl(cmpv, cmpr); - - /* ??? Should be atomic. */ - tcg_gen_qemu_ld_tl(oldv, addr, da.mem_idx, da.memop); - tcg_gen_movcond_tl(TCG_COND_EQ, tmpv, oldv, cmpv, - gen_load_gpr(dc, rd), oldv); - tcg_gen_qemu_st_tl(tmpv, addr, da.mem_idx, da.memop); - + tcg_gen_atomic_cmpxchg_tl(oldv, addr, cmpv, gen_load_gpr(dc, rd), + da.mem_idx, da.memop); gen_store_gpr(dc, rd, oldv); - tcg_temp_free(cmpv); tcg_temp_free(oldv); - tcg_temp_free(tmpv); break; default: /* ??? Should be DAE_invalid_asi. */ @@ -2770,24 +2760,17 @@ static void gen_casx_asi(DisasContext *dc, TCGv addr, TCGv cmpv, int insn, int rd) { DisasASI da = get_asi(dc, insn, MO_TEQ); - TCGv oldv, tmpv; + TCGv oldv; switch (da.type) { case GET_ASI_EXCP: return; case GET_ASI_DIRECT: oldv = tcg_temp_new(); - tmpv = tcg_temp_new(); - - /* ??? Should be atomic. */ - tcg_gen_qemu_ld_tl(oldv, addr, da.mem_idx, da.memop); - tcg_gen_movcond_tl(TCG_COND_EQ, tmpv, oldv, cmpv, - gen_load_gpr(dc, rd), oldv); - tcg_gen_qemu_st_tl(tmpv, addr, da.mem_idx, da.memop); - + tcg_gen_atomic_cmpxchg_tl(oldv, addr, cmpv, gen_load_gpr(dc, rd), + da.mem_idx, da.memop); gen_store_gpr(dc, rd, oldv); tcg_temp_free(oldv); - tcg_temp_free(tmpv); break; default: /* ??? Should be DAE_invalid_asi. */ -- 2.7.4