qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [PATCH v2 2/4] target/loongarch: Add cpu feature flags


From: maobibo
Subject: Re: [PATCH v2 2/4] target/loongarch: Add cpu feature flags
Date: Fri, 20 Oct 2023 16:05:18 +0800
User-agent: Mozilla/5.0 (X11; Linux loongarch64; rv:68.0) Gecko/20100101 Thunderbird/68.7.0



在 2023/10/19 下午8:58, Song Gao 写道:
CPULoongArchState adds cpu feature flags features.
Intrduce loongarch_feature() to check feature and
set_feature() to set feature.

Signed-off-by: Song Gao <gaosong@loongson.cn>
---
  target/loongarch/cpu.c |  4 ++++
  target/loongarch/cpu.h | 32 ++++++++++++++++++++++++++++++++
  2 files changed, 36 insertions(+)

diff --git a/target/loongarch/cpu.c b/target/loongarch/cpu.c
index ef6922e812..87fcd08110 100644
--- a/target/loongarch/cpu.c
+++ b/target/loongarch/cpu.c
@@ -366,6 +366,10 @@ static void loongarch_la464_initfn(Object *obj)
      CPULoongArchState *env = &cpu->env;
      int i;
+ env->features = 0;
+    set_feature(env, CPU_FEATURE_LSX);
+    set_feature(env, CPU_FEATURE_LASX);
+
      for (i = 0; i < 21; i++) {
          env->cpucfg[i] = 0x0;
      }
diff --git a/target/loongarch/cpu.h b/target/loongarch/cpu.h
index 8b54cf109c..b98064945a 100644
--- a/target/loongarch/cpu.h
+++ b/target/loongarch/cpu.h
@@ -295,6 +295,8 @@ typedef struct CPUArchState {
      uint64_t lladdr; /* LL virtual address compared against SC */
      uint64_t llval;
+ uint64_t features;
Like what Richard says, it is not necessary to use features here,
cpucfg2 can be used directly.

+
      /* LoongArch CSRs */
      uint64_t CSR_CRMD;
      uint64_t CSR_PRMD;
@@ -364,6 +366,36 @@ typedef struct CPUArchState {
  #endif
  } CPULoongArchState;
+/*
+ * See arch/loongarch/include/asm/cpu.h
+ * and arch/loongarch/include/uapi/asm/hwcap.h
+ */
+enum loongarch_features {
+    CPU_FEATURE_CPUCFG,
+    CPU_FEATURE_LAM,
+    CPU_FEATURE_UAL,
+    CPU_FEATURE_FPU,
+    CPU_FEATURE_LSX,
+    CPU_FEATURE_LASX,
+    CPU_FEATURE_CRC32,
+    CPU_FEATURE_COMPLEX,
+    CPU_FEATURE_CRYPTO,
+    CPU_FEATURE_LVZ,
+    CPU_FEATURE_LBT_X86,
+    CPU_FEATURE_LBT_ARM,
+    CPU_FEATURE_LBT_MIPS,
+};
Suggest to only list features which can be set on/off from QEMU command line.

Regards
Bibo, Mao
+
+static inline int loongarch_feature(CPULoongArchState *env, int feature)
+{
+    return (env->features & (1ULL << feature)) != 0;
+}
+
+static inline void set_feature(CPULoongArchState *env, int feature)
+{
+    env->features |= 1ULL << feature;
+}
+
  /**
   * LoongArchCPU:
   * @env: #CPULoongArchState





reply via email to

[Prev in Thread] Current Thread [Next in Thread]