From patchwork Fri Feb 14 18:15:47 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Richard Henderson X-Patchwork-Id: 183521 Delivered-To: patch@linaro.org Received: by 2002:a92:1f12:0:0:0:0:0 with SMTP id i18csp2134551ile; Fri, 14 Feb 2020 10:28:16 -0800 (PST) X-Google-Smtp-Source: APXvYqzWvnHV5cCJiP+exP+F5Ry8jsh42CmiZVMR44EWyRwEMSEQ8qJA/FiliTE8uk3uvaLFcZtD X-Received: by 2002:ac8:1306:: with SMTP id e6mr3642394qtj.267.1581704896865; Fri, 14 Feb 2020 10:28:16 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1581704896; cv=none; d=google.com; s=arc-20160816; b=qySdaV0Vkyj75F+WNb578oo9SpwdF3cracr/SpOSz6F5L27tFUWsoWXrmOi5PWgsBV uVUKh+7wxevEYiYfL/lQZ3fPPAHCr8++z3kFzJei/6HfN8nR7dVnXjAc6gI7dz+mG8rh MXODEoo7j5BF11VAXz4dTdlJWIEYqM8vqq6WiE5kim3vlr3L9xoq1uIdeZP4u2evkeDI HhNjbHPLtaeWHgpapEVM9ewpBdHQ2zpkGbmzU//vBfBA8Bwxq51CUu7n6cfkWyG2Ba6M EoMTYBHmqcrH6ODgQK6gkMUCgCkDpGlWqP0NkEOmC5QAbCQAaby/4krpK3dTpDiX0ltH PpOg== 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=pMw3WexDwdJHFaht64LuoLlVbRzrqioLE5XZ9OBOKYc=; b=lwgzxVnT8VTfsBPZAdk6BELJoV6DYTkVW9QzwL9xaTOiPL7BV6tWw8X9t8KU4Rgjcq 8mKHmpy5M4w60ol3zrrECYDXuqw7koA0GSgg1iHVfW65nlIT96HjS79dwdgwKvFfqeZl +RM5U3wyLFM9OyGFTD1gwmM2CRE5C/cCDI0Xd0KXErf/f1FkUSZROPrkXhSZWWvsK3b/ bwCKXeY/9YWF9sukWfYztFcTkDHXmA+HYNoWf+ON970OeHfFa5bEtHC6vosSM4evmi3C 1CXXNNibUdIPfKB3p7RQmWyI9CI1btKDCBw4SHQVyRX5A3FxDDV0z77sAo0NwY4Tltnk QtGw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=OpOZLTFy; 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 o4si2933522qtd.56.2020.02.14.10.28.16 for (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Fri, 14 Feb 2020 10:28:16 -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=OpOZLTFy; 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]:43840 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1j2fhI-0001l5-Ca for patch@linaro.org; Fri, 14 Feb 2020 13:28:16 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:60990) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1j2fVd-0004m8-GJ for qemu-devel@nongnu.org; Fri, 14 Feb 2020 13:16:14 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1j2fVc-0000N2-4s for qemu-devel@nongnu.org; Fri, 14 Feb 2020 13:16:13 -0500 Received: from mail-pg1-x543.google.com ([2607:f8b0:4864:20::543]:33092) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1j2fVb-0000MZ-Uy for qemu-devel@nongnu.org; Fri, 14 Feb 2020 13:16:12 -0500 Received: by mail-pg1-x543.google.com with SMTP id 6so5359259pgk.0 for ; Fri, 14 Feb 2020 10:16:11 -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=pMw3WexDwdJHFaht64LuoLlVbRzrqioLE5XZ9OBOKYc=; b=OpOZLTFyEqK6z0NFplV4tDRaB/hXh8fwpOHTwR2ICSTFmNcXFYQ1/wuLXfZsyCm+b5 Z4fswPZ12UOB9MzsZ7brFasvCSl9VZMRYUWoM1eaV5PhqTWaKYYw8nkPCtZC1f2jGvtT ruQelYdHp5sstGVUnm46Dd+FG516ZEq6cfxFIH2UqwnRWE3LKG5HW18Q2w6q+QVMzBMc tOgRpxFvsk+y/YI0xjjezUTrgm0xcJDffLt236x4Vwi7E/++spbVeo0ad+WQokVu2NLZ fxzlW4JOK3lpn1EjCtsLikQ3OAE71XV7tKqHXxZpyUukL9XFQ4LNtnoL8VLpHDeczsCC 3fKw== 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=pMw3WexDwdJHFaht64LuoLlVbRzrqioLE5XZ9OBOKYc=; b=iiothwhOTDc+fSf+RUQ0fSgrZp75e4oWdicAxA5ZRLqolXt8Q+rh61VZTyxEtAmb57 d3QpnbOLjGYtZY9Q4FcGbFkdWQCjo8ky/2mcuF8M3g/jjDSINfVHaF9eYk3qGCWN/irw luBorsvt/8e1N2ya7oNz5QXQahSXACCLMIgPw6KuYyTW2qpuFWnLWHkQxPYmckQf5w9T 6LAJNUglJy+Y89VAPszv2Vvby1bjwrMdqFby3Cgo4Kdb7cuFhCAq7KEtrzZYcCMFEfQ4 Li8Cbbt0OJOk5kxgrQYltnXXXL5dNQI/6ODy+pRtxpmJL0xTMdUlr/haNaxC8lxOwKwV KQXQ== X-Gm-Message-State: APjAAAWpBJPV1Cs5YiFljjvbBCcWi++AiCFEDCXBWS4qwhB5uFE1QdpD BB9kr2hynenK/63B7bzkpVRKNQ5rUjo= X-Received: by 2002:a63:5c10:: with SMTP id q16mr4923809pgb.35.1581704170679; Fri, 14 Feb 2020 10:16:10 -0800 (PST) Received: from localhost.localdomain (97-126-123-70.tukw.qwest.net. [97.126.123.70]) by smtp.gmail.com with ESMTPSA id i3sm7525123pfg.94.2020.02.14.10.16.09 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 14 Feb 2020 10:16:09 -0800 (PST) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH 19/19] target/arm: Split VMINMAXNM decode Date: Fri, 14 Feb 2020 10:15:47 -0800 Message-Id: <20200214181547.21408-20-richard.henderson@linaro.org> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20200214181547.21408-1-richard.henderson@linaro.org> References: <20200214181547.21408-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::543 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 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. 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 Reviewed-by: Peter Maydell 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 b5f3feaf8d..2cf85e73cf 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) { /*