[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [PATCH v2 05/17] target/arm: Improve ID_AA64PFR0 FP/SIMD validation
From: |
Peter Maydell |
Subject: |
Re: [PATCH v2 05/17] target/arm: Improve ID_AA64PFR0 FP/SIMD validation |
Date: |
Tue, 25 Feb 2020 13:24:01 +0000 |
On Mon, 24 Feb 2020 at 22:22, Richard Henderson
<address@hidden> wrote:
>
> When sanity checking id_aa64pfr0, use the raw FP and SIMD fields,
> because the values must match. Delay the test until we've finished
> modifying the id_aa64pfr0 register.
>
> Signed-off-by: Richard Henderson <address@hidden>
> ---
> target/arm/cpu.c | 23 ++++++++++++-----------
> 1 file changed, 12 insertions(+), 11 deletions(-)
>
> diff --git a/target/arm/cpu.c b/target/arm/cpu.c
> index 5be4c25809..f10f34b655 100644
> --- a/target/arm/cpu.c
> +++ b/target/arm/cpu.c
> @@ -1427,17 +1427,6 @@ static void arm_cpu_realizefn(DeviceState *dev, Error
> **errp)
> return;
> }
>
> - if (arm_feature(env, ARM_FEATURE_AARCH64) &&
> - cpu->has_vfp != cpu->has_neon) {
> - /*
> - * This is an architectural requirement for AArch64; AArch32 is
> - * more flexible and permits VFP-no-Neon and Neon-no-VFP.
> - */
> - error_setg(errp,
> - "AArch64 CPUs must have both VFP and Neon or neither");
> - return;
> - }
> -
> if (!cpu->has_vfp) {
> uint64_t t;
> uint32_t u;
> @@ -1537,6 +1526,18 @@ static void arm_cpu_realizefn(DeviceState *dev, Error
> **errp)
> cpu->isar.mvfr0 = u;
> }
>
> + if (arm_feature(env, ARM_FEATURE_AARCH64) &&
> + FIELD_EX64(cpu->isar.id_aa64pfr0, ID_AA64PFR0, FP) !=
> + FIELD_EX64(cpu->isar.id_aa64pfr0, ID_AA64PFR0, ADVSIMD)) {
> + /*
> + * This is an architectural requirement for AArch64. Not only
> + * both vfp and advsimd or neither, but further both must
> + * support fp16 or neither.
> + */
> + error_setg(errp, "AArch64 CPUs must match VFP and NEON");
> + return;
> + }
> +
> if (arm_feature(env, ARM_FEATURE_M) && !cpu->has_dsp) {
> uint32_t u;
This check is supposed to be "did the user accidentally specify
some incompatible settings on their '-cpu,+this,-that' option?".
By making it check the actual ID register values, you're turning
it into also a check on "does the implementation specify sane
ID register values", which (a) is useful for TCG but ought to
be an assert and (b) we shouldn't be checking for KVM in case
the h/w is giving us dubious ID values.
thanks
-- PMM
- [PATCH v2 00/17] target/arm: vfp feature and decodetree cleanup, Richard Henderson, 2020/02/24
- [PATCH v2 02/17] target/arm: Rename isar_feature_aa32_fpdp_v2, Richard Henderson, 2020/02/24
- [PATCH v2 03/17] target/arm: Add isar_feature_aa32_{fpsp_v2, fpsp_v3, fpdp_v3}, Richard Henderson, 2020/02/24
- [PATCH v2 01/17] target/arm: Add isar_feature_aa32_vfp_simd, Richard Henderson, 2020/02/24
- [PATCH v2 04/17] target/arm: Add isar_feature_aa64_fp_simd, isar_feature_aa32_vfp, Richard Henderson, 2020/02/24
- [PATCH v2 05/17] target/arm: Improve ID_AA64PFR0 FP/SIMD validation, Richard Henderson, 2020/02/24
- Re: [PATCH v2 05/17] target/arm: Improve ID_AA64PFR0 FP/SIMD validation,
Peter Maydell <=
[PATCH v2 06/17] target/arm: Perform fpdp_v2 check first, Richard Henderson, 2020/02/24
[PATCH v2 07/17] target/arm: Replace ARM_FEATURE_VFP3 checks with fp{sp, dp}_v3, Richard Henderson, 2020/02/24
[PATCH v2 08/17] target/arm: Add missing checks for fpsp_v2, Richard Henderson, 2020/02/24
[PATCH v2 10/17] target/arm: Remove ARM_FEATURE_VFP check from disas_vfp_insn, Richard Henderson, 2020/02/24
[PATCH v2 09/17] target/arm: Replace ARM_FEATURE_VFP4 with isar_feature_aa32_simdfmac, Richard Henderson, 2020/02/24
[PATCH v2 11/17] target/arm: Move VLLDM and VLSTM to vfp.decode, Richard Henderson, 2020/02/24