From patchwork Mon Feb 24 22:22:32 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Richard Henderson X-Patchwork-Id: 183789 Delivered-To: patch@linaro.org Received: by 2002:a92:1f12:0:0:0:0:0 with SMTP id i18csp926522ile; Mon, 24 Feb 2020 14:29:30 -0800 (PST) X-Google-Smtp-Source: APXvYqxabOr5amM9m7TxxsZ9XVvs8Pb/dJZKNNTTuYA7KvtsUbhCJjY8MqJ4LRca3AstHDkYTAC+ X-Received: by 2002:aed:35c1:: with SMTP id d1mr49755489qte.218.1582583370779; Mon, 24 Feb 2020 14:29:30 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1582583370; cv=none; d=google.com; s=arc-20160816; b=xz5jG2ccWl0Vatxdg5cOB7JutE+eJ1tK4kbbPkVHy8FquIevXgvmoMZ+cLlLuogwHZ 2OxB7alrNV29ULD7FDCM5HvClUCD10X+WYhVxwVB7x7QYVKz9korzAVlVSH1fg/0a15Y 5/bg85GMAp1fhRTqatJ042wCZGML+LirvP86DzR0oLzNlAs4psq5NvVTXivl6pPpsCBz wh36lD+nGMXBsVBMuJ/rCZH6LAAl0WN/Dv6gMrlObA3Cm9Txo4mPGHLpLnR1AINUAyOC sHGF+GeTH5TtDmvXzGjppeSmtTJF6NuQ6Xu5m83zCQhq6bg5CNfsPg6Gdc9rfBwZeemd Dj+g== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:cc:list-subscribe:list-help:list-post:list-archive :list-unsubscribe:list-id:precedence:content-transfer-encoding :mime-version:references:in-reply-to:message-id:date:subject:to:from :dkim-signature; bh=NtGab2HLNp8uF7NgRHRNjel2MNsIDKcBiKBTctaOBVU=; b=UcQdwrK+CzdXJFqIeH/mykU94tWk4s8AhxXGGp/I45Zf1YsXEXwccbA0DDWRnMnil6 RrV0ZE9GtSeN3PFcm0Rd4l9D/t1lnd3ZJBtmFSrrq10lhFJ3lLQLI6O0p2HIrRnOsQc6 ZL/xBNAXSuZyADfc0FpCROZ2htwUrw050Qn6zf3r8GCXlZz614+y4lIZoYyy1Xs+v/EH 115TyaSEpCOR9AdbBO394iZc8FuB4rgN7M0ZBfn9YXHObI4VWRNu8ewJ2KA2PSu4vBV1 kfaQH+7e+iOeIX1sartocYpAwYHfOzivz4gNw8l75Zfrv3iMIg43VHVbQOMntHsE0ku0 XZ8w== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=iQKbjljP; spf=pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom="qemu-devel-bounces+patch=linaro.org@nongnu.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Return-Path: Received: from lists.gnu.org (lists.gnu.org. [209.51.188.17]) by mx.google.com with ESMTPS id c8si6578466qtg.53.2020.02.24.14.29.30 for (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Mon, 24 Feb 2020 14:29:30 -0800 (PST) Received-SPF: pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; Authentication-Results: mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=iQKbjljP; spf=pass (google.com: domain of qemu-devel-bounces+patch=linaro.org@nongnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom="qemu-devel-bounces+patch=linaro.org@nongnu.org"; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: from localhost ([::1]:45374 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1j6MEE-0008JO-7Y for patch@linaro.org; Mon, 24 Feb 2020 17:29:30 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:38093) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1j6M7v-0004pp-Jh for qemu-devel@nongnu.org; Mon, 24 Feb 2020 17:23:00 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1j6M7u-0005za-7k for qemu-devel@nongnu.org; Mon, 24 Feb 2020 17:22:59 -0500 Received: from mail-pg1-x544.google.com ([2607:f8b0:4864:20::544]:43792) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1j6M7u-0005z3-1n for qemu-devel@nongnu.org; Mon, 24 Feb 2020 17:22:58 -0500 Received: by mail-pg1-x544.google.com with SMTP id u12so5829888pgb.10 for ; Mon, 24 Feb 2020 14:22:57 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=NtGab2HLNp8uF7NgRHRNjel2MNsIDKcBiKBTctaOBVU=; b=iQKbjljPuxbGNNgKNsXt6A8vQsPZeMQ6t0A/1omR+FMYdp6gH6ymirmemstaOOBQ2i mSvR53Eeo717IJ30DBt4YVBmg2w/S5gRZ0kWUImGOyPp2z14cXRjxIF0hELBUuFkFVae jdr0vLr2hLkwbkX9nqcahPOQbXLBCXwV472O1Ux7Ad71QDgfNUeCkkxBSTq/v1kkhskQ t/gAY366vjLW4cwxfY+tbPLekF15AG4h95KJtSL8cl6k3CXY+HDEkun6xIqYSVU6jMlz ohrvbBrYTOmpyU/a6BCvL0mPBKU7xat2KxWeDb2QEJlUdPNfz3ybK6NewtrreHlgjnzD M1RA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=NtGab2HLNp8uF7NgRHRNjel2MNsIDKcBiKBTctaOBVU=; b=HYVtA3F7NbLwHnQIDkZJOn7OHCzoa707UiCj90W5P3fdRrkP+EYZWNfKJVVXqZIu5s 79ERUpzYq305LeLGuxHX1XBF040YePbNgvfX2ucvZMtfigLim57fXAlre+DaA3wS4DES 0MF6hhfVyEJH9wdbZyXgShxWZ7kvI+ZVhVLxnuRTSte2mk9CkNcuFoamqUm0QVyZ086Y O6n5dQxOcdfgeUvHH4efOiZOCYNklXXo2OtxugoMSRtPW4XIaKjVTHGxGdrYAW92VqH1 96gReBTcmNTiijNt75938JlFGaDYl7e+DQ6lGJ3SzgWXigG0UHkA+Ctgajsa4Fnu/5QM cg9Q== X-Gm-Message-State: APjAAAXR8LuzUV11dMJa8clTZwtXf47/w78kWSKr+EqYvCzjMxZwEEsE M7CMRkAN8JISHyXPO4xe6/YyjseoGc0= X-Received: by 2002:a63:3085:: with SMTP id w127mr16713345pgw.176.1582582976686; Mon, 24 Feb 2020 14:22:56 -0800 (PST) Received: from localhost.localdomain (97-126-123-70.tukw.qwest.net. [97.126.123.70]) by smtp.gmail.com with ESMTPSA id o6sm13897097pgg.37.2020.02.24.14.22.55 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 24 Feb 2020 14:22:56 -0800 (PST) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH v2 17/17] target/arm: Split VMINMAXNM decode Date: Mon, 24 Feb 2020 14:22:32 -0800 Message-Id: <20200224222232.13807-18-richard.henderson@linaro.org> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20200224222232.13807-1-richard.henderson@linaro.org> References: <20200224222232.13807-1-richard.henderson@linaro.org> MIME-Version: 1.0 X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2607:f8b0:4864:20::544 X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: peter.maydell@linaro.org, qemu-arm@nongnu.org Errors-To: qemu-devel-bounces+patch=linaro.org@nongnu.org Sender: "Qemu-devel" Passing the raw op field from the manual is less instructive than it might be. Do the full decode and use the existing helpers to perform the expansion. Since these are v8 insns, VECLEN+VECSTRIDE are already RES0. Reviewed-by: Peter Maydell Signed-off-by: Richard Henderson --- target/arm/vfp-uncond.decode | 12 ++-- target/arm/translate-vfp.inc.c | 109 +++++++++++---------------------- 2 files changed, 44 insertions(+), 77 deletions(-) -- 2.20.1 diff --git a/target/arm/vfp-uncond.decode b/target/arm/vfp-uncond.decode index 5af1f2ee66..34ca164266 100644 --- a/target/arm/vfp-uncond.decode +++ b/target/arm/vfp-uncond.decode @@ -41,15 +41,19 @@ %vd_dp 22:1 12:4 %vd_sp 12:4 22:1 +@vfp_dnm_s ................................ vm=%vm_sp vn=%vn_sp vd=%vd_sp +@vfp_dnm_d ................................ vm=%vm_dp vn=%vn_dp vd=%vd_dp + VSEL 1111 1110 0. cc:2 .... .... 1010 .0.0 .... \ vm=%vm_sp vn=%vn_sp vd=%vd_sp dp=0 VSEL 1111 1110 0. cc:2 .... .... 1011 .0.0 .... \ vm=%vm_dp vn=%vn_dp vd=%vd_dp dp=1 -VMINMAXNM 1111 1110 1.00 .... .... 1010 . op:1 .0 .... \ - vm=%vm_sp vn=%vn_sp vd=%vd_sp dp=0 -VMINMAXNM 1111 1110 1.00 .... .... 1011 . op:1 .0 .... \ - vm=%vm_dp vn=%vn_dp vd=%vd_dp dp=1 +VMAXNM_sp 1111 1110 1.00 .... .... 1010 .0.0 .... @vfp_dnm_s +VMINNM_sp 1111 1110 1.00 .... .... 1010 .1.0 .... @vfp_dnm_s + +VMAXNM_dp 1111 1110 1.00 .... .... 1011 .0.0 .... @vfp_dnm_d +VMINNM_dp 1111 1110 1.00 .... .... 1011 .1.0 .... @vfp_dnm_d VRINT 1111 1110 1.11 10 rm:2 .... 1010 01.0 .... \ vm=%vm_sp vd=%vd_sp dp=0 diff --git a/target/arm/translate-vfp.inc.c b/target/arm/translate-vfp.inc.c index 41aa67c133..b087bbd812 100644 --- a/target/arm/translate-vfp.inc.c +++ b/target/arm/translate-vfp.inc.c @@ -322,79 +322,6 @@ static bool trans_VSEL(DisasContext *s, arg_VSEL *a) return true; } -static bool trans_VMINMAXNM(DisasContext *s, arg_VMINMAXNM *a) -{ - uint32_t rd, rn, rm; - bool dp = a->dp; - bool vmin = a->op; - TCGv_ptr fpst; - - if (!dc_isar_feature(aa32_vminmaxnm, s)) { - return false; - } - - if (dp && !dc_isar_feature(aa32_fpdp_v2, s)) { - return false; - } - - /* UNDEF accesses to D16-D31 if they don't exist */ - if (dp && !dc_isar_feature(aa32_simd_r32, s) && - ((a->vm | a->vn | a->vd) & 0x10)) { - return false; - } - - rd = a->vd; - rn = a->vn; - rm = a->vm; - - if (!vfp_access_check(s)) { - return true; - } - - fpst = get_fpstatus_ptr(0); - - if (dp) { - TCGv_i64 frn, frm, dest; - - frn = tcg_temp_new_i64(); - frm = tcg_temp_new_i64(); - dest = tcg_temp_new_i64(); - - neon_load_reg64(frn, rn); - neon_load_reg64(frm, rm); - if (vmin) { - gen_helper_vfp_minnumd(dest, frn, frm, fpst); - } else { - gen_helper_vfp_maxnumd(dest, frn, frm, fpst); - } - neon_store_reg64(dest, rd); - tcg_temp_free_i64(frn); - tcg_temp_free_i64(frm); - tcg_temp_free_i64(dest); - } else { - TCGv_i32 frn, frm, dest; - - frn = tcg_temp_new_i32(); - frm = tcg_temp_new_i32(); - dest = tcg_temp_new_i32(); - - neon_load_reg32(frn, rn); - neon_load_reg32(frm, rm); - if (vmin) { - gen_helper_vfp_minnums(dest, frn, frm, fpst); - } else { - gen_helper_vfp_maxnums(dest, frn, frm, fpst); - } - neon_store_reg32(dest, rd); - tcg_temp_free_i32(frn); - tcg_temp_free_i32(frm); - tcg_temp_free_i32(dest); - } - - tcg_temp_free_ptr(fpst); - return true; -} - /* * Table for converting the most common AArch32 encoding of * rounding mode to arm_fprounding order (which matches the @@ -1784,6 +1711,42 @@ static bool trans_VDIV_dp(DisasContext *s, arg_VDIV_dp *a) return do_vfp_3op_dp(s, gen_helper_vfp_divd, a->vd, a->vn, a->vm, false); } +static bool trans_VMINNM_sp(DisasContext *s, arg_VMINNM_sp *a) +{ + if (!dc_isar_feature(aa32_vminmaxnm, s)) { + return false; + } + return do_vfp_3op_sp(s, gen_helper_vfp_minnums, + a->vd, a->vn, a->vm, false); +} + +static bool trans_VMAXNM_sp(DisasContext *s, arg_VMAXNM_sp *a) +{ + if (!dc_isar_feature(aa32_vminmaxnm, s)) { + return false; + } + return do_vfp_3op_sp(s, gen_helper_vfp_maxnums, + a->vd, a->vn, a->vm, false); +} + +static bool trans_VMINNM_dp(DisasContext *s, arg_VMINNM_dp *a) +{ + if (!dc_isar_feature(aa32_vminmaxnm, s)) { + return false; + } + return do_vfp_3op_dp(s, gen_helper_vfp_minnumd, + a->vd, a->vn, a->vm, false); +} + +static bool trans_VMAXNM_dp(DisasContext *s, arg_VMAXNM_dp *a) +{ + if (!dc_isar_feature(aa32_vminmaxnm, s)) { + return false; + } + return do_vfp_3op_dp(s, gen_helper_vfp_maxnumd, + a->vd, a->vn, a->vm, false); +} + static bool do_vfm_sp(DisasContext *s, arg_VFMA_sp *a, bool neg_n, bool neg_d) { /*