[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH 15/19] linux-user/arm: Replace ARM_FEATURE_VFP* tests for HWCAP
From: |
Richard Henderson |
Subject: |
[PATCH 15/19] linux-user/arm: Replace ARM_FEATURE_VFP* tests for HWCAP |
Date: |
Fri, 14 Feb 2020 10:15:43 -0800 |
Use isar feature tests instead of feature bit tests.
Although none of QEMUs current cpus have VFPv3 without D32,
replace the large comment explaining why with one line that
sets ARM_HWCAP_ARM_VFPv3D16 under the correct conditions.
Mirror the test sequence used in the linux kernel.
Signed-off-by: Richard Henderson <address@hidden>
---
linux-user/elfload.c | 24 +++++++++++++++---------
1 file changed, 15 insertions(+), 9 deletions(-)
diff --git a/linux-user/elfload.c b/linux-user/elfload.c
index f3080a1635..c52c814a2e 100644
--- a/linux-user/elfload.c
+++ b/linux-user/elfload.c
@@ -468,22 +468,28 @@ static uint32_t get_elf_hwcap(void)
/* EDSP is in v5TE and above, but all our v5 CPUs are v5TE */
GET_FEATURE(ARM_FEATURE_V5, ARM_HWCAP_ARM_EDSP);
- GET_FEATURE(ARM_FEATURE_VFP, ARM_HWCAP_ARM_VFP);
GET_FEATURE(ARM_FEATURE_IWMMXT, ARM_HWCAP_ARM_IWMMXT);
GET_FEATURE(ARM_FEATURE_THUMB2EE, ARM_HWCAP_ARM_THUMBEE);
GET_FEATURE(ARM_FEATURE_NEON, ARM_HWCAP_ARM_NEON);
- GET_FEATURE(ARM_FEATURE_VFP3, ARM_HWCAP_ARM_VFPv3);
GET_FEATURE(ARM_FEATURE_V6K, ARM_HWCAP_ARM_TLS);
- GET_FEATURE(ARM_FEATURE_VFP4, ARM_HWCAP_ARM_VFPv4);
+ GET_FEATURE(ARM_FEATURE_LPAE, ARM_HWCAP_ARM_LPAE);
+
GET_FEATURE_ID(arm_div, ARM_HWCAP_ARM_IDIVA);
GET_FEATURE_ID(thumb_div, ARM_HWCAP_ARM_IDIVT);
- /* All QEMU's VFPv3 CPUs have 32 registers, see VFP_DREG in translate.c.
- * Note that the ARM_HWCAP_ARM_VFPv3D16 bit is always the inverse of
- * ARM_HWCAP_ARM_VFPD32 (and so always clear for QEMU); it is unrelated
- * to our VFP_FP16 feature bit.
+ /*
+ * Note that none of QEMU's cpus have double precision without single
+ * precision support in VFP, so only test the single precision field.
*/
- GET_FEATURE(ARM_FEATURE_VFP3, ARM_HWCAP_ARM_VFPD32);
- GET_FEATURE(ARM_FEATURE_LPAE, ARM_HWCAP_ARM_LPAE);
+ GET_FEATURE_ID(aa32_fpsp_v2, ARM_HWCAP_ARM_VFP);
+ if (cpu_isar_feature(aa32_fpsp_v3, cpu)) {
+ hwcaps |= ARM_HWCAP_ARM_VFPv3;
+ if (cpu_isar_feature(aa32_simd_r32, cpu)) {
+ hwcaps |= ARM_HWCAP_ARM_VFPD32;
+ } else {
+ hwcaps |= ARM_HWCAP_ARM_VFPv3D16;
+ }
+ }
+ GET_FEATURE_ID(aa32_simdfmac, ARM_HWCAP_ARM_VFPv4);
return hwcaps;
}
--
2.20.1
- [PATCH 09/19] target/arm: Replace ARM_FEATURE_VFP3 checks with fp{sp, dp}_v3, (continued)
- [PATCH 09/19] target/arm: Replace ARM_FEATURE_VFP3 checks with fp{sp, dp}_v3, Richard Henderson, 2020/02/14
- [PATCH 12/19] target/arm: Remove ARM_FEATURE_VFP check from disas_vfp_insn, Richard Henderson, 2020/02/14
- [PATCH 08/19] target/arm: Perform fpdp_v2 check first, Richard Henderson, 2020/02/14
- [PATCH 10/19] target/arm: Add missing checks for fpsp_v2, Richard Henderson, 2020/02/14
- [PATCH 11/19] target/arm: Replace ARM_FEATURE_VFP4 with isar_feature_aa32_simdfmac, Richard Henderson, 2020/02/14
- [PATCH 13/19] target/arm: Move VLLDM and VLSTM to vfp.decode, Richard Henderson, 2020/02/14
- [PATCH 15/19] linux-user/arm: Replace ARM_FEATURE_VFP* tests for HWCAP,
Richard Henderson <=
- [PATCH 14/19] target/arm: Move the vfp decodetree calls next to the base isa, Richard Henderson, 2020/02/14
- [PATCH 16/19] target/arm: Remove ARM_FEATURE_VFP*, Richard Henderson, 2020/02/14
- [PATCH 18/19] target/arm: Split VFM decode, Richard Henderson, 2020/02/14
- [PATCH 17/19] target/arm: Add formats for some vfp 2 and 3-register insns, Richard Henderson, 2020/02/14
- [PATCH 19/19] target/arm: Split VMINMAXNM decode, Richard Henderson, 2020/02/14