Patchwork [1/3] target-arm: add feature flag for ARMv8

login
register
mail settings
Submitter Måns Rullgård
Date June 7, 2013, 12:06 p.m.
Message ID <1370606786-5650-1-git-send-email-mans@mansr.com>
Download mbox | patch
Permalink /patch/249752/
State New
Headers show

Comments

Måns Rullgård - June 7, 2013, 12:06 p.m.
Signed-off-by: Mans Rullgard <mans@mansr.com>
---
 target-arm/cpu.c       | 5 ++++-
 target-arm/cpu.h       | 1 +
 target-arm/translate.c | 1 +
 3 files changed, 6 insertions(+), 1 deletion(-)
Peter Maydell - June 13, 2013, 12:54 p.m.
On 7 June 2013 13:06, Mans Rullgard <mans@mansr.com> wrote:
> Signed-off-by: Mans Rullgard <mans@mansr.com>
> ---
>  target-arm/cpu.c       | 5 ++++-
>  target-arm/cpu.h       | 1 +
>  target-arm/translate.c | 1 +
>  3 files changed, 6 insertions(+), 1 deletion(-)
>
> diff --git a/target-arm/cpu.c b/target-arm/cpu.c
> index 496a59f..f5a1314 100644
> --- a/target-arm/cpu.c
> +++ b/target-arm/cpu.c
> @@ -162,6 +162,9 @@ static void arm_cpu_realizefn(DeviceState *dev, Error **errp)
>      CPUARMState *env = &cpu->env;
>
>      /* Some features automatically imply others: */
> +    if (arm_feature(env, ARM_FEATURE_V8)) {
> +        set_feature(env, ARM_FEATURE_V7);
> +    }

This should also imply ARM_FEATURE_ARM_DIV and ARM_FEATURE_LPAE.

thanks
-- PMM

Patch

diff --git a/target-arm/cpu.c b/target-arm/cpu.c
index 496a59f..f5a1314 100644
--- a/target-arm/cpu.c
+++ b/target-arm/cpu.c
@@ -162,6 +162,9 @@  static void arm_cpu_realizefn(DeviceState *dev, Error **errp)
     CPUARMState *env = &cpu->env;
 
     /* Some features automatically imply others: */
+    if (arm_feature(env, ARM_FEATURE_V8)) {
+        set_feature(env, ARM_FEATURE_V7);
+    }
     if (arm_feature(env, ARM_FEATURE_V7)) {
         set_feature(env, ARM_FEATURE_VAPA);
         set_feature(env, ARM_FEATURE_THUMB2);
@@ -748,7 +751,7 @@  static void pxa270c5_initfn(Object *obj)
 static void arm_any_initfn(Object *obj)
 {
     ARMCPU *cpu = ARM_CPU(obj);
-    set_feature(&cpu->env, ARM_FEATURE_V7);
+    set_feature(&cpu->env, ARM_FEATURE_V8);
     set_feature(&cpu->env, ARM_FEATURE_VFP4);
     set_feature(&cpu->env, ARM_FEATURE_VFP_FP16);
     set_feature(&cpu->env, ARM_FEATURE_NEON);
diff --git a/target-arm/cpu.h b/target-arm/cpu.h
index 5438444..b3be588 100644
--- a/target-arm/cpu.h
+++ b/target-arm/cpu.h
@@ -392,6 +392,7 @@  enum arm_features {
     ARM_FEATURE_MPIDR, /* has cp15 MPIDR */
     ARM_FEATURE_PXN, /* has Privileged Execute Never bit */
     ARM_FEATURE_LPAE, /* has Large Physical Address Extension */
+    ARM_FEATURE_V8,
 };
 
 static inline int arm_feature(CPUARMState *env, int feature)
diff --git a/target-arm/translate.c b/target-arm/translate.c
index b3f26d6..96ac5bc 100644
--- a/target-arm/translate.c
+++ b/target-arm/translate.c
@@ -42,6 +42,7 @@ 
 #define ENABLE_ARCH_6K   arm_feature(env, ARM_FEATURE_V6K)
 #define ENABLE_ARCH_6T2   arm_feature(env, ARM_FEATURE_THUMB2)
 #define ENABLE_ARCH_7     arm_feature(env, ARM_FEATURE_V7)
+#define ENABLE_ARCH_8     arm_feature(env, ARM_FEATURE_V8)
 
 #define ARCH(x) do { if (!ENABLE_ARCH_##x) goto illegal_op; } while(0)