From patchwork Wed Dec 11 19:30:45 2013 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Richard Henderson X-Patchwork-Id: 300312 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)) (Client did not present a certificate) by ozlabs.org (Postfix) with ESMTPS id 404EB2C00E5 for ; Thu, 12 Dec 2013 06:32:19 +1100 (EST) Received: from localhost ([::1]:59862 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1VqpW4-00056n-ME for incoming@patchwork.ozlabs.org; Wed, 11 Dec 2013 14:32:16 -0500 Received: from eggs.gnu.org ([2001:4830:134:3::10]:47662) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1VqpVO-00050X-Mf for qemu-devel@nongnu.org; Wed, 11 Dec 2013 14:31:40 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1VqpVF-0004CW-ED for qemu-devel@nongnu.org; Wed, 11 Dec 2013 14:31:34 -0500 Received: from mail-qc0-x232.google.com ([2607:f8b0:400d:c01::232]:38100) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1VqpVF-0004CS-9a for qemu-devel@nongnu.org; Wed, 11 Dec 2013 14:31:25 -0500 Received: by mail-qc0-f178.google.com with SMTP id i17so5448581qcy.37 for ; Wed, 11 Dec 2013 11:31:24 -0800 (PST) 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=YWj8J4QwkO74+aevc/kt8ZHaHsACgcg3pbu97UoY2ys=; b=lTXIO854/0Ycu51ic8E/vzoypSNbdvX60g+aWHCUaHRcNlhh9cbThy6aprNriYTDUq 0j6mbYqKY9HTVi+b/P/dCwlb+nVFW5D7h/0f75e5HLKIWYiE6Jpmj/exryGYOwgvQsLu ueSvzKKBYpTGnvkog9OjQlV0QWiU7t3bDiR1bqXlShwW/V3TKNkcr1021Gt9IWr9ufVE Fd/ppWEza5LDA/FUVCCY05nrH8X6R9qq8XDDwqTFkLnLIv14UFsjiadyM/T3MkGyZeQ8 zYKA1OmjICaHJeZ6d+a6XsS+p94ffhc1gWZ6mrul9+5Bpu1VIZOjPhcEoA1mXhp9swBX xg5A== X-Received: by 10.224.39.15 with SMTP id d15mr5781422qae.36.1386790284910; Wed, 11 Dec 2013 11:31:24 -0800 (PST) Received: from pebble.com (50-194-63-110-static.hfc.comcastbusiness.net. [50.194.63.110]) by mx.google.com with ESMTPSA id d1sm8240017qai.7.2013.12.11.11.31.23 for (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 11 Dec 2013 11:31:24 -0800 (PST) From: Richard Henderson To: qemu-devel@nongnu.org Date: Wed, 11 Dec 2013 11:30:45 -0800 Message-Id: <1386790247-14267-4-git-send-email-rth@twiddle.net> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1386790247-14267-1-git-send-email-rth@twiddle.net> References: <1386790247-14267-1-git-send-email-rth@twiddle.net> X-detected-operating-system: by eggs.gnu.org: Error: Malformed IPv6 address (bad octet value). X-Received-From: 2607:f8b0:400d:c01::232 Cc: agraf@suse.de Subject: [Qemu-devel] [PATCH 3/5] target-s390: Simplify op_cs, op_soc, op_stm X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Unifying 2 different code paths each. Signed-off-by: Richard Henderson --- target-s390x/translate.c | 28 +++++++--------------------- 1 file changed, 7 insertions(+), 21 deletions(-) diff --git a/target-s390x/translate.c b/target-s390x/translate.c index 8f8567e..3e88c23 100644 --- a/target-s390x/translate.c +++ b/target-s390x/translate.c @@ -1818,7 +1818,7 @@ static ExitStatus op_cs(DisasContext *s, DisasOps *o) /* FIXME: needs an atomic solution for CONFIG_USER_ONLY. */ int d2 = get_field(s->fields, d2); int b2 = get_field(s->fields, b2); - int is_64 = s->insn->data; + TCGMemOp mop = s->insn->data ? MO_BEQ : MO_BEUL; TCGv_i64 addr, mem, cc, z; /* Note that in1 = R3 (new value) and @@ -1828,11 +1828,7 @@ static ExitStatus op_cs(DisasContext *s, DisasOps *o) about moving the memory to R1 on inequality, if we include equality it means that R1 is equal to the memory in all conditions. */ addr = get_address(s, 0, b2, d2); - if (is_64) { - tcg_gen_qemu_ld_i64(o->out, addr, get_mem_index(s), MO_BEQ); - } else { - tcg_gen_qemu_ld_i64(o->out, addr, get_mem_index(s), MO_BEUL); - } + tcg_gen_qemu_ld_i64(o->out, addr, get_mem_index(s), mop); /* Are the memory and expected values (un)equal? Note that this setcond produces the output CC value, thus the NE sense of the test. */ @@ -1846,11 +1842,7 @@ static ExitStatus op_cs(DisasContext *s, DisasOps *o) z = tcg_const_i64(0); mem = tcg_temp_new_i64(); tcg_gen_movcond_i64(TCG_COND_EQ, mem, cc, z, o->in1, o->out); - if (is_64) { - tcg_gen_qemu_st_i64(mem, addr, get_mem_index(s), MO_BEQ); - } else { - tcg_gen_qemu_st_i64(mem, addr, get_mem_index(s), MO_BEUL); - } + tcg_gen_qemu_st_i64(mem, addr, get_mem_index(s), mop); tcg_temp_free_i64(z); tcg_temp_free_i64(mem); tcg_temp_free_i64(addr); @@ -2986,6 +2978,7 @@ static ExitStatus op_sigp(DisasContext *s, DisasOps *o) static ExitStatus op_soc(DisasContext *s, DisasOps *o) { + TCGMemOp mop = s->insn->data ? MO_BEQ : MO_BEUL; DisasCompare c; TCGv_i64 a; int lab, r1; @@ -3002,11 +2995,7 @@ static ExitStatus op_soc(DisasContext *s, DisasOps *o) r1 = get_field(s->fields, r1); a = get_address(s, 0, get_field(s->fields, b2), get_field(s->fields, d2)); - if (s->insn->data) { - tcg_gen_qemu_st_i64(regs[r1], a, get_mem_index(s), MO_BEQ); - } else { - tcg_gen_qemu_st_i64(regs[r1], a, get_mem_index(s), MO_BEUL); - } + tcg_gen_qemu_st_i64(regs[r1], a, get_mem_index(s), mop); tcg_temp_free_i64(a); gen_set_label(lab); @@ -3387,14 +3376,11 @@ static ExitStatus op_stm(DisasContext *s, DisasOps *o) int r1 = get_field(s->fields, r1); int r3 = get_field(s->fields, r3); int size = s->insn->data; + TCGMemOp mop = size == 8 ? MO_BEQ : MO_BEUL; TCGv_i64 tsize = tcg_const_i64(size); while (1) { - if (size == 8) { - tcg_gen_qemu_st_i64(regs[r1], o->in2, get_mem_index(s), MO_BEQ); - } else { - tcg_gen_qemu_st_i64(regs[r1], o->in2, get_mem_index(s), MO_BEUL); - } + tcg_gen_qemu_st_i64(regs[r1], o->in2, get_mem_index(s), mop); if (r1 == r3) { break; }