qemu-devel
[Top][All Lists]
Advanced

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

[Qemu-devel] [PATCH 20/24] Add alpha_cpu_list.


From: Tristan Gingold
Subject: [Qemu-devel] [PATCH 20/24] Add alpha_cpu_list.
Date: Thu, 19 Mar 2009 15:35:52 +0100

Add alpha_cpu_list and use cpu_model to select the model in cpu_alpha_init.
Set implver and amask from the model.

Signed-off-by: Tristan Gingold <address@hidden>
---
 target-alpha/cpu.h       |    1 +
 target-alpha/translate.c |   40 ++++++++++++++++++++++++++++++++++++++--
 2 files changed, 39 insertions(+), 2 deletions(-)

diff --git a/target-alpha/cpu.h b/target-alpha/cpu.h
index 629d72b..ae9de3c 100644
--- a/target-alpha/cpu.h
+++ b/target-alpha/cpu.h
@@ -436,6 +436,7 @@ enum {
 
 CPUAlphaState * cpu_alpha_init (const char *cpu_model);
 int cpu_alpha_exec(CPUAlphaState *s);
+void alpha_cpu_list(FILE *f, int (*cpu_fprintf)(FILE *f, const char *fmt, 
...));
 /* you can call this signal handler from your SIGBUS and SIGSEGV
    signal handlers to inform the virtual CPU of exceptions. non zero
    is returned if the signal was handled by the virtual CPU.  */
diff --git a/target-alpha/translate.c b/target-alpha/translate.c
index 46ec733..bcd156f 100644
--- a/target-alpha/translate.c
+++ b/target-alpha/translate.c
@@ -2460,17 +2460,53 @@ void gen_intermediate_code_pc (CPUState *env, struct 
TranslationBlock *tb)
     gen_intermediate_code_internal(env, tb, 1);
 }
 
+struct alpha_def {
+    const char *name;
+    uint32_t implver;
+    uint32_t amask;
+};
+
+static const struct alpha_def alpha_defs[] = {
+#if 0
+    { "21064", IMPLVER_2106x, 0 },
+    { "21164", IMPLVER_21164, 0 },
+#endif
+    { "21264", IMPLVER_21264, (AMASK_PREFETCH | AMASK_TRAP | AMASK_BWX
+                               | AMASK_FIX) },
+};
+
+void alpha_cpu_list(FILE *f, int (*cpu_fprintf)(FILE *f, const char *fmt, ...))
+{
+    int i;
+
+    for (i = 0; i < ARRAY_SIZE(alpha_defs); i++)
+        (*cpu_fprintf)(f, "%s\n", alpha_defs[i].name);
+}
+
 CPUAlphaState * cpu_alpha_init (const char *cpu_model)
 {
     CPUAlphaState *env;
     uint64_t hwpcb;
+    const struct alpha_def *cpu = alpha_defs;
+
+    if (cpu_model != NULL) {
+        int i;
 
+        for (i = 0; i < ARRAY_SIZE(alpha_defs); i++)
+            if (strcmp (alpha_defs[i].name, cpu_model) == 0) {
+                cpu = &alpha_defs[i];
+                break;
+            }
+        if (cpu == NULL)
+            return NULL;
+    }
     env = qemu_mallocz(sizeof(CPUAlphaState));
     cpu_exec_init(env);
     alpha_translate_init();
     tlb_flush(env, 1);
-    /* XXX: should not be hardcoded */
-    env->implver = IMPLVER_2106x;
+
+    env->implver = cpu->implver;
+    env->amask = cpu->amask;
     env->ps = 0x1F00;
 #if defined (CONFIG_USER_ONLY)
     env->ps |= 1 << 3;
-- 
1.6.2





reply via email to

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