From patchwork Mon Oct 10 15:17:06 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Richard Henderson X-Patchwork-Id: 680456 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from lists.gnu.org (lists.gnu.org [IPv6:2001:4830:134:3::11]) (using TLSv1 with cipher AES256-SHA (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 3st45c5HdZz9ry7 for ; Tue, 11 Oct 2016 02:38:12 +1100 (AEDT) Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b=Jc9HF4X2; dkim-atps=neutral Received: from localhost ([::1]:50874 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1btceW-0007Ix-Uj for incoming@patchwork.ozlabs.org; Mon, 10 Oct 2016 11:38:09 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:58187) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1btcKY-0007Nf-5i for qemu-devel@nongnu.org; Mon, 10 Oct 2016 11:17:31 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1btcKW-0001xK-3x for qemu-devel@nongnu.org; Mon, 10 Oct 2016 11:17:29 -0400 Received: from mail-pa0-x244.google.com ([2607:f8b0:400e:c03::244]:33896) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1btcKV-0001x8-Tf for qemu-devel@nongnu.org; Mon, 10 Oct 2016 11:17:28 -0400 Received: by mail-pa0-x244.google.com with SMTP id r9so7401421paz.1 for ; Mon, 10 Oct 2016 08:17:27 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=sender:from:to:cc:subject:date:message-id:in-reply-to:references; bh=rnz5jVWeNLuA9MT5FLd73nn1kkYEcWCPqsWYf7cO9tE=; b=Jc9HF4X29m3QLZ3qKSJH8HTAU1oa7TtU/sxZ6I04HtWfLzuCIjMILWm4SekWoAiELu HOqkn1aJvg/R1s/04JGB3e4phABOq00xi2867xEQ7mwK6bRfl3mt0g1CdTmj2Aetuo2G ZCtzDfODsqsE2Y1h5cVYLvD290zXZMasdBVfaiK0oi+qm+zE5uNsWkHZz07cSuQSdpjx MUqPW42vsatp+E/Y0MIXTiPiaC0sZ3G7a2iaLCq4ZHu08Vs2cZsCzAq7ThcnLY+b319h w7CFtVuFJr+lm4KwKvqKLUFMNiVoO77yR8aZ4Iz7JkHvjTTKf5UKPdBfSm/DKHJi3WG3 gJBg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:sender:from:to:cc:subject:date:message-id :in-reply-to:references; bh=rnz5jVWeNLuA9MT5FLd73nn1kkYEcWCPqsWYf7cO9tE=; b=R9eGVihK31GyN45BTj2CrfQQjkWnt2m/6L9ewe1uvIN/esS0xGXNXtqWg1maWoTL5y 85JHl6dgG1cwqPRYf5onu9nZJDETfODGyer7vxMJrdzV+HufIatdlBt6hmkjSRZG3dvO CBhdd+VmBxWzus5AxK5bWXudmjrr0EHta6CKO24r1xXPrP8n2Aeo4gUgj/jGoRHxGoUS XwJFoVS8aBFKW/otouYLU1p1ion+nFTw51SDiuBai1ckf5MtKGuOIsc0A7NzFuNIWcPv gp7VW+VPiTB64pKKT1oB4khvmi7zofiZCjgE3/kwO8qsFMIFbqM1ZqmVjSiwRSkhgh+Q CoUQ== X-Gm-Message-State: AA6/9RmeWz2Kj3kCVT4QISLfiZoJVdZBSoLJdZOaG6StE0moMpQBT8vrFqETBcLfY7j5cA== X-Received: by 10.99.45.132 with SMTP id t126mr2538961pgt.86.1476112647410; Mon, 10 Oct 2016 08:17:27 -0700 (PDT) Received: from bigtime.twiddle.net ([187.217.227.243]) by smtp.gmail.com with ESMTPSA id i4sm59618259pav.27.2016.10.10.08.17.26 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Mon, 10 Oct 2016 08:17:27 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Date: Mon, 10 Oct 2016 10:17:06 -0500 Message-Id: <1476112628-12241-15-git-send-email-rth@twiddle.net> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1476112628-12241-1-git-send-email-rth@twiddle.net> References: <1476112628-12241-1-git-send-email-rth@twiddle.net> X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] X-Received-From: 2607:f8b0:400e:c03::244 Subject: [Qemu-devel] [PATCH 14/16] target-sparc: Optmize writeback of cpu_cond X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: mark.cave-ayland@ilande.co.uk, atar4qemu@gmail.com Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: "Qemu-devel" This condition variable is required for some cases of single stepping through delay slots. But otherwise it can be produced and consumed within a single TB. By copying to a temporary and discarding the original when consuming the value, we allow the TCG optimizer to avoid the writeback to ENV. Signed-off-by: Richard Henderson --- target-sparc/translate.c | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/target-sparc/translate.c b/target-sparc/translate.c index e55ca1d..158834f 100644 --- a/target-sparc/translate.c +++ b/target-sparc/translate.c @@ -977,11 +977,14 @@ static inline void gen_op_eval_fbo(TCGv dst, TCGv src, } static inline void gen_branch2(DisasContext *dc, target_ulong pc1, - target_ulong pc2, TCGv r_cond) + target_ulong pc2) { TCGLabel *l1 = gen_new_label(); + TCGv tmp = get_temp_tl(dc); - tcg_gen_brcondi_tl(TCG_COND_EQ, r_cond, 0, l1); + tcg_gen_mov_tl(tmp, cpu_cond); + tcg_gen_discard_tl(cpu_cond); + tcg_gen_brcondi_tl(TCG_COND_EQ, tmp, 0, l1); gen_goto_tb(dc, 0, pc1, pc1 + 4); @@ -993,8 +996,11 @@ static void gen_branch_a(DisasContext *dc, target_ulong pc1) { TCGLabel *l1 = gen_new_label(); target_ulong npc = dc->npc; + TCGv tmp = get_temp_tl(dc); - tcg_gen_brcondi_tl(TCG_COND_EQ, cpu_cond, 0, l1); + tcg_gen_mov_tl(tmp, cpu_cond); + tcg_gen_discard_tl(cpu_cond); + tcg_gen_brcondi_tl(TCG_COND_EQ, tmp, 0, l1); gen_goto_tb(dc, 0, npc, pc1); @@ -1024,6 +1030,7 @@ static void gen_branch_n(DisasContext *dc, target_ulong pc1) tcg_gen_movcond_tl(TCG_COND_NE, cpu_npc, cpu_cond, z, t, cpu_npc); tcg_temp_free(t); tcg_temp_free(z); + tcg_gen_discard_tl(cpu_cond); dc->pc = DYNAMIC_PC; } @@ -1036,6 +1043,7 @@ static inline void gen_generic_branch(DisasContext *dc) TCGv zero = tcg_const_tl(0); tcg_gen_movcond_tl(TCG_COND_NE, cpu_npc, cpu_cond, zero, npc0, npc1); + tcg_gen_discard_tl(cpu_cond); tcg_temp_free(npc0); tcg_temp_free(npc1); @@ -5629,7 +5637,7 @@ static void disas_sparc_insn(DisasContext * dc, unsigned int insn) gen_op_next_insn(); } else if (dc->npc == JUMP_PC) { /* we can do a static jump */ - gen_branch2(dc, dc->jump_pc[0], dc->jump_pc[1], cpu_cond); + gen_branch2(dc, dc->jump_pc[0], dc->jump_pc[1]); dc->is_br = 1; } else { dc->pc = dc->npc;