From patchwork Fri Feb 22 17:09:35 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Peter Maydell X-Patchwork-Id: 10826695 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 9333D13B5 for ; Fri, 22 Feb 2019 17:11:37 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 76FE73294F for ; Fri, 22 Feb 2019 17:11:37 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 6B9DB32B61; Fri, 22 Feb 2019 17:11:37 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-2.7 required=2.0 tests=BAYES_00,DKIM_INVALID, DKIM_SIGNED,MAILING_LIST_MULTI autolearn=ham version=3.3.1 Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1 with cipher AES256-SHA (256/256 bits)) (No client certificate requested) by mail.wl.linuxfoundation.org (Postfix) with ESMTPS id D07F132B5F for ; Fri, 22 Feb 2019 17:11:36 +0000 (UTC) Received: from localhost ([127.0.0.1]:54485 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1gxEMK-0007N4-6K for patchwork-qemu-devel@patchwork.kernel.org; Fri, 22 Feb 2019 12:11:36 -0500 Received: from eggs.gnu.org ([209.51.188.92]:36629) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1gxEKz-0006JX-G5 for qemu-devel@nongnu.org; Fri, 22 Feb 2019 12:10:14 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1gxEKv-0001gm-Hu for qemu-devel@nongnu.org; Fri, 22 Feb 2019 12:10:11 -0500 Received: from mail-wr1-x442.google.com ([2a00:1450:4864:20::442]:43002) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1gxEKu-0000r8-QI for qemu-devel@nongnu.org; Fri, 22 Feb 2019 12:10:09 -0500 Received: by mail-wr1-x442.google.com with SMTP id r5so3138689wrg.9 for ; Fri, 22 Feb 2019 09:09:41 -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=LSf6wMGuBH8QT8k3geTNSuEE3goVFyvjOV9Q7bW9yHI=; b=k184oxEWXLgCRcouKw1Lqn1DHxWsY05ADQddz7TJ3+1xbcpRCRNckRImt6XjYy4tx+ AeOaguTvR0hfZd/BogybMzoifqpySOp3u7kGlImkT/SK2wwz7Npq9Phen8L2KeuQrVUU k0A3IlKZTVO6xbR4pLneq0+FkERPbXJTKVTvIBT/mBw/hm9V4rNU9spzeYeKW9G1pbTx AJiimFzTFU4RhrymdQ42Li913FirwtYK0O8+sPsodzs8I0WCgjhowBep5nA0/dOtIqL0 zOnw3KzuEwrGre0zsnV+cQ9YWWoJ54vJdDdQL/lNUWuxMaMgqOn4i682gYrATleIfmUF zbOA== 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=LSf6wMGuBH8QT8k3geTNSuEE3goVFyvjOV9Q7bW9yHI=; b=DcSPYNRsHVgm2XVseuDIvQwEEfC3QuDV+mID1EvACmBRhP1vYisaFAVS1apvRsFEVB wlI5SCQpqxdPpjyBlLFATzxJo6whWiQyGkd6W924asi2uPIuCRGzlEjcalL8kpCYk2wT NvpAK0dZXUpVwHWSdUBvfCmT4rIp5pTaC40lgAiulLrPZl2O3nvJ7XvNlU59p65T6VXC dgDrYdnDOPAUo5F2ue+AQWlFRD23OkSWxAZtAOKb1dmY4gHe7ghjQhqzAqLvahI69E3s U2NQDfYmAiHWRJFsZTh5LfM0Sm5XM5sM9GtQ15BiqQQpS49t1fj+DLt/BgOKaRvKZ/C9 8vtw== X-Gm-Message-State: AHQUAuYReVNbBSWL8r+QUj8HZD+zvqwN5U03Xy6jpQFYnb5tVYgX3LVs NL8NwWCv7S90jy21sItyBkkCWUzdSeo= X-Google-Smtp-Source: AHgI3IbHOTTjs5XClHs0PRDzcyz8bkpTyRGNU4NQ8QhJPAs1P4WL1EHh/YRVlN4EYrgfIWshNiyqKA== X-Received: by 2002:a05:6000:92:: with SMTP id m18mr3668638wrx.258.1550855380089; Fri, 22 Feb 2019 09:09:40 -0800 (PST) Received: from orth.archaic.org.uk (orth.archaic.org.uk. [81.2.115.148]) by smtp.gmail.com with ESMTPSA id f6sm2829077wrt.87.2019.02.22.09.09.38 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Fri, 22 Feb 2019 09:09:39 -0800 (PST) From: Peter Maydell To: qemu-arm@nongnu.org, qemu-devel@nongnu.org Date: Fri, 22 Feb 2019 17:09:35 +0000 Message-Id: <20190222170936.13268-2-peter.maydell@linaro.org> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190222170936.13268-1-peter.maydell@linaro.org> References: <20190222170936.13268-1-peter.maydell@linaro.org> MIME-Version: 1.0 X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2a00:1450:4864:20::442 Subject: [Qemu-devel] [PATCH 1/2] target/arm: Use MVFR1 feature bits to gate A32/T32 FP16 instructions 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: patches@linaro.org Errors-To: qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Sender: "Qemu-devel" X-Virus-Scanned: ClamAV using ClamSMTP Instead of gating the A32/T32 FP16 conversion instructions on the ARM_FEATURE_VFP_FP16 flag, switch to our new approach of looking at ID register bits. In this case MVFR1 fields FPHP and SIMDHP indicate the presence of these insns. This change doesn't alter behaviour for any of our CPUs. Signed-off-by: Peter Maydell Reviewed-by: Richard Henderson --- target/arm/cpu.h | 37 ++++++++++++++++++++++++++++++++++++- target/arm/cpu.c | 2 -- target/arm/kvm32.c | 3 --- target/arm/translate.c | 26 ++++++++++++++++++-------- 4 files changed, 54 insertions(+), 14 deletions(-) diff --git a/target/arm/cpu.h b/target/arm/cpu.h index 1eea1a408b8..36ea3b58567 100644 --- a/target/arm/cpu.h +++ b/target/arm/cpu.h @@ -1730,6 +1730,27 @@ FIELD(ID_DFR0, MPROFDBG, 20, 4) FIELD(ID_DFR0, PERFMON, 24, 4) FIELD(ID_DFR0, TRACEFILT, 28, 4) +FIELD(MVFR0, SIMDREG, 0, 4) +FIELD(MVFR0, FPSP, 4, 4) +FIELD(MVFR0, FPDP, 8, 4) +FIELD(MVFR0, FPTRAP, 12, 4) +FIELD(MVFR0, FPDIVIDE, 16, 4) +FIELD(MVFR0, FPSQRT, 20, 4) +FIELD(MVFR0, FPSHVEC, 24, 4) +FIELD(MVFR0, FPROUND, 28, 4) + +FIELD(MVFR1, FPFTZ, 0, 4) +FIELD(MVFR1, FPDNAN, 4, 4) +FIELD(MVFR1, SIMDLS, 8, 4) +FIELD(MVFR1, SIMDINT, 12, 4) +FIELD(MVFR1, SIMDSP, 16, 4) +FIELD(MVFR1, SIMDHP, 20, 4) +FIELD(MVFR1, FPHP, 24, 4) +FIELD(MVFR1, SIMDFMAC, 28, 4) + +FIELD(MVFR2, SIMDMISC, 0, 4) +FIELD(MVFR2, FPMISC, 4, 4) + QEMU_BUILD_BUG_ON(ARRAY_SIZE(((ARMCPU *)0)->ccsidr) <= R_V7M_CSSELR_INDEX_MASK); /* If adding a feature bit which corresponds to a Linux ELF @@ -1747,7 +1768,6 @@ enum arm_features { ARM_FEATURE_THUMB2, ARM_FEATURE_PMSA, /* no MMU; may have Memory Protection Unit */ ARM_FEATURE_VFP3, - ARM_FEATURE_VFP_FP16, ARM_FEATURE_NEON, ARM_FEATURE_M, /* Microcontroller profile. */ ARM_FEATURE_OMAPCP, /* OMAP specific CP15 ops handling. */ @@ -3293,6 +3313,21 @@ static inline bool isar_feature_aa32_fp16_arith(const ARMISARegisters *id) return FIELD_EX64(id->id_aa64pfr0, ID_AA64PFR0, FP) == 1; } +/* + * We always set the FP and SIMD FP16 fields to indicate identical + * levels of support (assuming SIMD is implemented at all), so + * we only need one set of accessors. + */ +static inline bool isar_feature_aa32_fp16_spconv(const ARMISARegisters *id) +{ + return FIELD_EX64(id->mvfr1, MVFR1, FPHP) > 0; +} + +static inline bool isar_feature_aa32_fp16_dpconv(const ARMISARegisters *id) +{ + return FIELD_EX64(id->mvfr1, MVFR1, FPHP) > 1; +} + /* * 64-bit feature tests via id registers. */ diff --git a/target/arm/cpu.c b/target/arm/cpu.c index 4d7f6a3bc0c..a3baf4eeed1 100644 --- a/target/arm/cpu.c +++ b/target/arm/cpu.c @@ -1014,7 +1014,6 @@ static void arm_cpu_realizefn(DeviceState *dev, Error **errp) } if (arm_feature(env, ARM_FEATURE_VFP4)) { set_feature(env, ARM_FEATURE_VFP3); - set_feature(env, ARM_FEATURE_VFP_FP16); } if (arm_feature(env, ARM_FEATURE_VFP3)) { set_feature(env, ARM_FEATURE_VFP); @@ -1675,7 +1674,6 @@ static void cortex_a9_initfn(Object *obj) cpu->dtb_compatible = "arm,cortex-a9"; set_feature(&cpu->env, ARM_FEATURE_V7); set_feature(&cpu->env, ARM_FEATURE_VFP3); - set_feature(&cpu->env, ARM_FEATURE_VFP_FP16); set_feature(&cpu->env, ARM_FEATURE_NEON); set_feature(&cpu->env, ARM_FEATURE_THUMB2EE); set_feature(&cpu->env, ARM_FEATURE_EL3); diff --git a/target/arm/kvm32.c b/target/arm/kvm32.c index a75e04cc8f3..327375f6252 100644 --- a/target/arm/kvm32.c +++ b/target/arm/kvm32.c @@ -125,9 +125,6 @@ bool kvm_arm_get_host_cpu_features(ARMHostCPUFeatures *ahcf) if (extract32(id_pfr0, 12, 4) == 1) { set_feature(&features, ARM_FEATURE_THUMB2EE); } - if (extract32(ahcf->isar.mvfr1, 20, 4) == 1) { - set_feature(&features, ARM_FEATURE_VFP_FP16); - } if (extract32(ahcf->isar.mvfr1, 12, 4) == 1) { set_feature(&features, ARM_FEATURE_NEON); } diff --git a/target/arm/translate.c b/target/arm/translate.c index c1175798ac9..b7702fb49f7 100644 --- a/target/arm/translate.c +++ b/target/arm/translate.c @@ -3663,17 +3663,27 @@ static int disas_vfp_insn(DisasContext *s, uint32_t insn) * UNPREDICTABLE if bit 8 is set prior to ARMv8 * (we choose to UNDEF) */ - if ((dp && !arm_dc_feature(s, ARM_FEATURE_V8)) || - !arm_dc_feature(s, ARM_FEATURE_VFP_FP16)) { - return 1; + if (dp) { + if (!dc_isar_feature(aa32_fp16_dpconv, s)) { + return 1; + } + } else { + if (!dc_isar_feature(aa32_fp16_spconv, s)) { + return 1; + } } rm_is_dp = false; break; case 0x06: /* vcvtb.f16.f32, vcvtb.f16.f64 */ case 0x07: /* vcvtt.f16.f32, vcvtt.f16.f64 */ - if ((dp && !arm_dc_feature(s, ARM_FEATURE_V8)) || - !arm_dc_feature(s, ARM_FEATURE_VFP_FP16)) { - return 1; + if (dp) { + if (!dc_isar_feature(aa32_fp16_dpconv, s)) { + return 1; + } + } else { + if (!dc_isar_feature(aa32_fp16_spconv, s)) { + return 1; + } } rd_is_dp = false; break; @@ -7876,7 +7886,7 @@ static int disas_neon_data_insn(DisasContext *s, uint32_t insn) TCGv_ptr fpst; TCGv_i32 ahp; - if (!arm_dc_feature(s, ARM_FEATURE_VFP_FP16) || + if (!dc_isar_feature(aa32_fp16_spconv, s) || q || (rm & 1)) { return 1; } @@ -7908,7 +7918,7 @@ static int disas_neon_data_insn(DisasContext *s, uint32_t insn) { TCGv_ptr fpst; TCGv_i32 ahp; - if (!arm_dc_feature(s, ARM_FEATURE_VFP_FP16) || + if (!dc_isar_feature(aa32_fp16_spconv, s) || q || (rd & 1)) { return 1; } From patchwork Fri Feb 22 17:09:36 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Peter Maydell X-Patchwork-Id: 10826697 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 228CD1575 for ; Fri, 22 Feb 2019 17:11:59 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 06E5832B68 for ; Fri, 22 Feb 2019 17:11:59 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id EEF1E32B66; Fri, 22 Feb 2019 17:11:58 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-2.7 required=2.0 tests=BAYES_00,DKIM_INVALID, DKIM_SIGNED,MAILING_LIST_MULTI autolearn=ham version=3.3.1 Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1 with cipher AES256-SHA (256/256 bits)) (No client certificate requested) by mail.wl.linuxfoundation.org (Postfix) with ESMTPS id 7E76732B1B for ; Fri, 22 Feb 2019 17:11:58 +0000 (UTC) Received: from localhost ([127.0.0.1]:54487 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1gxEMf-0007dA-NW for patchwork-qemu-devel@patchwork.kernel.org; Fri, 22 Feb 2019 12:11:57 -0500 Received: from eggs.gnu.org ([209.51.188.92]:36626) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1gxEKz-0006JT-DR for qemu-devel@nongnu.org; Fri, 22 Feb 2019 12:10:14 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1gxEKv-0001h5-Gp for qemu-devel@nongnu.org; Fri, 22 Feb 2019 12:10:11 -0500 Received: from mail-wr1-x444.google.com ([2a00:1450:4864:20::444]:44752) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1gxEKu-0000uI-TG for qemu-devel@nongnu.org; Fri, 22 Feb 2019 12:10:09 -0500 Received: by mail-wr1-x444.google.com with SMTP id w2so3134923wrt.11 for ; Fri, 22 Feb 2019 09:09:42 -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=9Y2fmsp12Tf3NP9yxnPACBVe0lEx7m4Aj9FlcnxqqZc=; b=nzheUzVfNUNTDRN0YH+G8dhIGCNgoIKpfelurAPUhwjMNPZdEu5ZApQNQ31hOxBYEC V5NTpjgs06DR0gSZ9ddxsUVSClyl6SFg7JpP7P5y3QBjJKVVgjwdVsx5WilCcwixUej/ 5160cXhPCcz/crPGc0CHexaZE9w9oEKxF7CHiTq3z1Zpx6K9Kykp1yhLIRVQ31JPj2jv t2eTOcQrWm1bJIQbtFLcEHIsn6N4G8rtpro7WLBVHEvqXlAjUBW/v+lWHNvCIfUJnKXc K72nDZsbJxyy6ANVTauad3TzCNZZIABJySkRSwcLw0FzQmt6NVAoLN38/tgBrO5HP9Mc 8RAA== 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=9Y2fmsp12Tf3NP9yxnPACBVe0lEx7m4Aj9FlcnxqqZc=; b=ob5CHogUCg+khahe6+fXLVHleGJlutvLdyz5UyD5ijOpPNH3eiPbfn69p+Gn8vFenY 2BKqqJFHhcTYmqk8yQqYgHE+gIJmk4UogwOi3yNSOUaOz5s/wO2AcLx8DaTHy3BX1DeG RdPDWZ0cx9uUjpyu3gdHc6TFZK3rnwvyfe3Pw4+ezybnLnOAwiOmTM6JeN1ZXJKkSOUN l67gpHBY5jJaeXJCn0g2KPM/r0Cvgt9DPlA/uNKJ+m0Pp4NNZIVYPaY7f0YWriPS0m78 iBDWE78J6tZuEUYO6hpkn7V+6697K4M5YjhGKzxYdyLr7cfsaUlwGd76bPg1lDuxLT6x 1D6w== X-Gm-Message-State: AHQUAubfyhIRn4SkN+nYNCQeu1cRmlTmYsbPMx3LY6pLKaBka/kMAaFp 8Bp0X4wmw5EWEIASAGZJHSbD0A== X-Google-Smtp-Source: AHgI3IaMR6dx1bXL5yQ5qtovi7+QBCgon+quRZJWFvAJ6Q/cA3o2SCoKnisL42V3r2+fhBld1BdpVA== X-Received: by 2002:adf:f70c:: with SMTP id r12mr3946648wrp.54.1550855381548; Fri, 22 Feb 2019 09:09:41 -0800 (PST) Received: from orth.archaic.org.uk (orth.archaic.org.uk. [81.2.115.148]) by smtp.gmail.com with ESMTPSA id f6sm2829077wrt.87.2019.02.22.09.09.40 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Fri, 22 Feb 2019 09:09:40 -0800 (PST) From: Peter Maydell To: qemu-arm@nongnu.org, qemu-devel@nongnu.org Date: Fri, 22 Feb 2019 17:09:36 +0000 Message-Id: <20190222170936.13268-3-peter.maydell@linaro.org> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190222170936.13268-1-peter.maydell@linaro.org> References: <20190222170936.13268-1-peter.maydell@linaro.org> MIME-Version: 1.0 X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2a00:1450:4864:20::444 Subject: [Qemu-devel] [PATCH 2/2] target/arm: Gate "miscellaneous FP" insns by ID register field 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: patches@linaro.org Errors-To: qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Sender: "Qemu-devel" X-Virus-Scanned: ClamAV using ClamSMTP There is a set of VFP instructions which we implement in disas_vfp_v8_insn() and gate on the ARM_FEATURE_V8 bit. These were all first introduced in v8 for A-profile, but in M-profile they appeared in v7M. Gate them on the MVFR2 FPMisc field instead, and rename the function appropriately. Signed-off-by: Peter Maydell Reviewed-by: Richard Henderson --- target/arm/cpu.h | 20 ++++++++++++++++++++ target/arm/translate.c | 21 +++++++++++++-------- 2 files changed, 33 insertions(+), 8 deletions(-) diff --git a/target/arm/cpu.h b/target/arm/cpu.h index 36ea3b58567..ff9ba387b42 100644 --- a/target/arm/cpu.h +++ b/target/arm/cpu.h @@ -3328,6 +3328,26 @@ static inline bool isar_feature_aa32_fp16_dpconv(const ARMISARegisters *id) return FIELD_EX64(id->mvfr1, MVFR1, FPHP) > 1; } +static inline bool isar_feature_aa32_vsel(const ARMISARegisters *id) +{ + return FIELD_EX64(id->mvfr2, MVFR2, FPMISC) >= 1; +} + +static inline bool isar_feature_aa32_vcvt_dr(const ARMISARegisters *id) +{ + return FIELD_EX64(id->mvfr2, MVFR2, FPMISC) >= 2; +} + +static inline bool isar_feature_aa32_vrint(const ARMISARegisters *id) +{ + return FIELD_EX64(id->mvfr2, MVFR2, FPMISC) >= 3; +} + +static inline bool isar_feature_aa32_vminmaxnm(const ARMISARegisters *id) +{ + return FIELD_EX64(id->mvfr2, MVFR2, FPMISC) >= 4; +} + /* * 64-bit feature tests via id registers. */ diff --git a/target/arm/translate.c b/target/arm/translate.c index b7702fb49f7..af8f9e669b8 100644 --- a/target/arm/translate.c +++ b/target/arm/translate.c @@ -3357,7 +3357,7 @@ static const uint8_t fp_decode_rm[] = { FPROUNDING_NEGINF, }; -static int disas_vfp_v8_insn(DisasContext *s, uint32_t insn) +static int disas_vfp_misc_insn(DisasContext *s, uint32_t insn) { uint32_t rd, rn, rm, dp = extract32(insn, 8, 1); @@ -3375,15 +3375,18 @@ static int disas_vfp_v8_insn(DisasContext *s, uint32_t insn) rm = VFP_SREG_M(insn); } - if ((insn & 0x0f800e50) == 0x0e000a00) { + if ((insn & 0x0f800e50) == 0x0e000a00 && dc_isar_feature(aa32_vsel, s)) { return handle_vsel(insn, rd, rn, rm, dp); - } else if ((insn & 0x0fb00e10) == 0x0e800a00) { + } else if ((insn & 0x0fb00e10) == 0x0e800a00 && + dc_isar_feature(aa32_vminmaxnm, s)) { return handle_vminmaxnm(insn, rd, rn, rm, dp); - } else if ((insn & 0x0fbc0ed0) == 0x0eb80a40) { + } else if ((insn & 0x0fbc0ed0) == 0x0eb80a40 && + dc_isar_feature(aa32_vrint, s)) { /* VRINTA, VRINTN, VRINTP, VRINTM */ int rounding = fp_decode_rm[extract32(insn, 16, 2)]; return handle_vrint(insn, rd, rm, dp, rounding); - } else if ((insn & 0x0fbc0e50) == 0x0ebc0a40) { + } else if ((insn & 0x0fbc0e50) == 0x0ebc0a40 && + dc_isar_feature(aa32_vcvt_dr, s)) { /* VCVTA, VCVTN, VCVTP, VCVTM */ int rounding = fp_decode_rm[extract32(insn, 16, 2)]; return handle_vcvt(insn, rd, rm, dp, rounding); @@ -3427,10 +3430,12 @@ static int disas_vfp_insn(DisasContext *s, uint32_t insn) } if (extract32(insn, 28, 4) == 0xf) { - /* Encodings with T=1 (Thumb) or unconditional (ARM): - * only used in v8 and above. + /* + * Encodings with T=1 (Thumb) or unconditional (ARM): + * only used for the "miscellaneous VFP features" added in v8A + * and v7M (and gated on the MVFR2.FPMisc field). */ - return disas_vfp_v8_insn(s, insn); + return disas_vfp_misc_insn(s, insn); } dp = ((insn & 0xf00) == 0xb00);