From patchwork Thu Apr 17 19:33:02 2014 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Richard Henderson X-Patchwork-Id: 340038 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) (using TLSv1 with cipher AES256-SHA (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 8B62B140092 for ; Fri, 18 Apr 2014 05:47:26 +1000 (EST) Received: from localhost ([::1]:34747 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1WasHM-0001qY-Dn for incoming@patchwork.ozlabs.org; Thu, 17 Apr 2014 15:47:24 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:56180) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Was4z-0001ng-Jf for qemu-devel@nongnu.org; Thu, 17 Apr 2014 15:34:44 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1Was4t-0002Ts-Di for qemu-devel@nongnu.org; Thu, 17 Apr 2014 15:34:37 -0400 Received: from mail-qa0-x22c.google.com ([2607:f8b0:400d:c00::22c]:44821) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Was4t-0002Te-2Y for qemu-devel@nongnu.org; Thu, 17 Apr 2014 15:34:31 -0400 Received: by mail-qa0-f44.google.com with SMTP id hw13so812379qab.3 for ; Thu, 17 Apr 2014 12:34:30 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=sender:from:to:subject:date:message-id:in-reply-to:references; bh=g2baJhXZ2Jo3V3H7fRvUkBCJbUeNa6SWNFbk5GRb+Ok=; b=Bru4tOMR9tagBg1FuKKsKCtjo/pPsVcAU2CxPPjrTQL9Ju/WrO/BX8URUScnnbTtzG EBXKkjoTAZ9iYNAmMoX0mDqn0Ge7Nv3m88Gvvi7K1ShyCcDnaPGrrB5JK7Gi54X2YNHN yqQUe8CaA2G0qxzxOPXYuHv80f7S8TSJUMMBhPu6kY8h6que4XfirFW3zZqtEWuj6cHf x239KqgeUU0iRGJyRN2O9O1S4xkmDJxyQYyrwmyp0Lb/ftejUpFcusy3BZ0S3fVfRcks Fuf+ID/4iiwFNpfROxN0mtT7YdMTn5wMPo0ewe9I1YcNe5lDjwhPjT5+2IQKb7SHC6tz qmiA== X-Received: by 10.140.86.168 with SMTP id p37mr19728951qgd.23.1397763270675; Thu, 17 Apr 2014 12:34:30 -0700 (PDT) Received: from anchor.com (50-194-63-110-static.hfc.comcastbusiness.net. [50.194.63.110]) by mx.google.com with ESMTPSA id b62sm2694452qge.2.2014.04.17.12.34.29 for (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Thu, 17 Apr 2014 12:34:29 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Date: Thu, 17 Apr 2014 12:33:02 -0700 Message-Id: <1397763195-1485-28-git-send-email-rth@twiddle.net> X-Mailer: git-send-email 1.9.0 In-Reply-To: <1397763195-1485-1-git-send-email-rth@twiddle.net> References: <1397763195-1485-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:c00::22c Subject: [Qemu-devel] [PATCH 27/40] target-alpha: Convert ARITH3 to source/sink 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 Signed-off-by: Richard Henderson --- target-alpha/translate.c | 108 +++++++++++++++++------------------------------ 1 file changed, 39 insertions(+), 69 deletions(-) diff --git a/target-alpha/translate.c b/target-alpha/translate.c index bb84d8c..cff79ef 100644 --- a/target-alpha/translate.c +++ b/target-alpha/translate.c @@ -1258,43 +1258,6 @@ static void gen_msk_l(DisasContext *ctx, TCGv vc, TCGv va, int rb, bool islit, } } -/* Code to call arith3 helpers */ -#define ARITH3(name) \ -static inline void glue(gen_, name)(int ra, int rb, int rc, int islit,\ - uint8_t lit) \ -{ \ - if (unlikely(rc == 31)) \ - return; \ - \ - if (ra != 31) { \ - if (islit) { \ - TCGv tmp = tcg_const_i64(lit); \ - gen_helper_ ## name(cpu_ir[rc], cpu_ir[ra], tmp); \ - tcg_temp_free(tmp); \ - } else \ - gen_helper_ ## name (cpu_ir[rc], cpu_ir[ra], cpu_ir[rb]); \ - } else { \ - TCGv tmp1 = tcg_const_i64(0); \ - if (islit) { \ - TCGv tmp2 = tcg_const_i64(lit); \ - gen_helper_ ## name (cpu_ir[rc], tmp1, tmp2); \ - tcg_temp_free(tmp2); \ - } else \ - gen_helper_ ## name (cpu_ir[rc], tmp1, cpu_ir[rb]); \ - tcg_temp_free(tmp1); \ - } \ -} -ARITH3(cmpbge) -ARITH3(minub8) -ARITH3(minsb8) -ARITH3(minuw4) -ARITH3(minsw4) -ARITH3(maxub8) -ARITH3(maxsb8) -ARITH3(maxuw4) -ARITH3(maxsw4) -ARITH3(perr) - #define MVIOP2(name) \ static inline void glue(gen_, name)(int rb, int rc) \ { \ @@ -1765,7 +1728,7 @@ static ExitStatus translate_one(DisasContext *ctx, uint32_t insn) break; case 0x0F: /* CMPBGE */ - gen_cmpbge(ra, rb, rc, islit, lit); + gen_helper_cmpbge(vc, va, vb); break; case 0x12: /* S8ADDL */ @@ -2619,45 +2582,61 @@ static ExitStatus translate_one(DisasContext *ctx, uint32_t insn) case 0x1C: vc = dest_gpr(ctx, rc); + if (fn7 == 0x70) { + /* FTOIT */ + REQUIRE_TB_FLAG(TB_FLAGS_AMASK_FIX); + REQUIRE_REG_31(rb); + va = load_fpr(ctx, ra); + tcg_gen_mov_i64(vc, va); + break; + } else if (fn7 == 0x78) { + /* FTOIS */ + REQUIRE_TB_FLAG(TB_FLAGS_AMASK_FIX); + REQUIRE_REG_31(rb); + t32 = tcg_temp_new_i32(); + va = load_fpr(ctx, ra); + gen_helper_s_to_memory(t32, va); + tcg_gen_ext_i32_i64(vc, t32); + tcg_temp_free_i32(t32); + break; + } + + vb = load_gpr_lit(ctx, rb, lit, islit); switch (fn7) { case 0x00: /* SEXTB */ REQUIRE_TB_FLAG(TB_FLAGS_AMASK_BWX); REQUIRE_REG_31(ra); - vb = load_gpr_lit(ctx, rb, lit, islit); tcg_gen_ext8s_i64(vc, vb); break; case 0x01: /* SEXTW */ REQUIRE_TB_FLAG(TB_FLAGS_AMASK_BWX); REQUIRE_REG_31(ra); - vb = load_gpr_lit(ctx, rb, lit, islit); tcg_gen_ext16s_i64(vc, vb); break; case 0x30: /* CTPOP */ REQUIRE_TB_FLAG(TB_FLAGS_AMASK_CIX); REQUIRE_REG_31(ra); - vb = load_gpr_lit(ctx, rb, lit, islit); gen_helper_ctpop(vc, vb); break; case 0x31: /* PERR */ REQUIRE_TB_FLAG(TB_FLAGS_AMASK_MVI); - gen_perr(ra, rb, rc, islit, lit); + va = load_gpr(ctx, ra); + gen_helper_perr(vc, va, vb); break; case 0x32: /* CTLZ */ REQUIRE_TB_FLAG(TB_FLAGS_AMASK_CIX); REQUIRE_REG_31(ra); - vb = load_gpr_lit(ctx, rb, lit, islit); gen_helper_ctlz(vc, vb); break; case 0x33: /* CTTZ */ REQUIRE_TB_FLAG(TB_FLAGS_AMASK_CIX); REQUIRE_REG_31(ra); - vb = load_gpr_lit(ctx, rb, lit, islit); gen_helper_cttz(vc, vb); break; case 0x34: @@ -2687,59 +2666,50 @@ static ExitStatus translate_one(DisasContext *ctx, uint32_t insn) case 0x38: /* MINSB8 */ REQUIRE_TB_FLAG(TB_FLAGS_AMASK_MVI); - gen_minsb8(ra, rb, rc, islit, lit); + va = load_gpr(ctx, ra); + gen_helper_minsb8(vc, va, vb); break; case 0x39: /* MINSW4 */ REQUIRE_TB_FLAG(TB_FLAGS_AMASK_MVI); - gen_minsw4(ra, rb, rc, islit, lit); + va = load_gpr(ctx, ra); + gen_helper_minsw4(vc, va, vb); break; case 0x3A: /* MINUB8 */ REQUIRE_TB_FLAG(TB_FLAGS_AMASK_MVI); - gen_minub8(ra, rb, rc, islit, lit); + va = load_gpr(ctx, ra); + gen_helper_minub8(vc, va, vb); break; case 0x3B: /* MINUW4 */ REQUIRE_TB_FLAG(TB_FLAGS_AMASK_MVI); - gen_minuw4(ra, rb, rc, islit, lit); + va = load_gpr(ctx, ra); + gen_helper_minuw4(vc, va, vb); break; case 0x3C: /* MAXUB8 */ REQUIRE_TB_FLAG(TB_FLAGS_AMASK_MVI); - gen_maxub8(ra, rb, rc, islit, lit); + va = load_gpr(ctx, ra); + gen_helper_maxub8(vc, va, vb); break; case 0x3D: /* MAXUW4 */ REQUIRE_TB_FLAG(TB_FLAGS_AMASK_MVI); - gen_maxuw4(ra, rb, rc, islit, lit); + va = load_gpr(ctx, ra); + gen_helper_maxuw4(vc, va, vb); break; case 0x3E: /* MAXSB8 */ REQUIRE_TB_FLAG(TB_FLAGS_AMASK_MVI); - gen_maxsb8(ra, rb, rc, islit, lit); + va = load_gpr(ctx, ra); + gen_helper_maxsb8(vc, va, vb); break; case 0x3F: /* MAXSW4 */ REQUIRE_TB_FLAG(TB_FLAGS_AMASK_MVI); - gen_maxsw4(ra, rb, rc, islit, lit); - break; - case 0x70: - /* FTOIT */ - REQUIRE_TB_FLAG(TB_FLAGS_AMASK_FIX); - REQUIRE_REG_31(rb); - va = load_fpr(ctx, ra); - tcg_gen_mov_i64(vc, va); - break; - case 0x78: - /* FTOIS */ - REQUIRE_TB_FLAG(TB_FLAGS_AMASK_FIX); - REQUIRE_REG_31(rb); - t32 = tcg_temp_new_i32(); - va = load_fpr(ctx, ra); - gen_helper_s_to_memory(t32, va); - tcg_gen_ext_i32_i64(vc, t32); - tcg_temp_free_i32(t32); + va = load_gpr(ctx, ra); + gen_helper_maxsw4(vc, va, vb); break; default: goto invalid_opc;