From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1Lm8rt-0002pV-Jd for qemu-devel@nongnu.org; Tue, 24 Mar 2009 11:48:45 -0400 Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1Lm8rj-0002jK-5v for qemu-devel@nongnu.org; Tue, 24 Mar 2009 11:48:38 -0400 Received: from [199.232.76.173] (port=33147 helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1Lm8rh-0002i3-9t for qemu-devel@nongnu.org; Tue, 24 Mar 2009 11:48:33 -0400 Received: from mel.act-europe.fr ([212.99.106.210]:52853) by monty-python.gnu.org with esmtp (Exim 4.60) (envelope-from ) id 1Lm8rf-0003gW-9i for qemu-devel@nongnu.org; Tue, 24 Mar 2009 11:48:32 -0400 Received: from localhost (localhost [127.0.0.1]) by filtered-smtp.eu.adacore.com (Postfix) with ESMTP id 8BC19290060 for ; Tue, 24 Mar 2009 16:48:07 +0100 (CET) Received: from mel.act-europe.fr ([127.0.0.1]) by localhost (smtp.eu.adacore.com [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id qDHmdRCLMnDE for ; Tue, 24 Mar 2009 16:48:07 +0100 (CET) Received: from ulanbator.act-europe.fr (ulanbator.act-europe.fr [10.10.1.67]) by mel.act-europe.fr (Postfix) with ESMTP id 66681290063 for ; Tue, 24 Mar 2009 16:48:07 +0100 (CET) From: Tristan Gingold Date: Tue, 24 Mar 2009 16:48:03 +0100 Message-Id: <1237909687-31711-22-git-send-email-gingold@adacore.com> In-Reply-To: <1237909687-31711-21-git-send-email-gingold@adacore.com> References: <1237909687-31711-1-git-send-email-gingold@adacore.com> <1237909687-31711-2-git-send-email-gingold@adacore.com> <1237909687-31711-3-git-send-email-gingold@adacore.com> <1237909687-31711-4-git-send-email-gingold@adacore.com> <1237909687-31711-5-git-send-email-gingold@adacore.com> <1237909687-31711-6-git-send-email-gingold@adacore.com> <1237909687-31711-7-git-send-email-gingold@adacore.com> <1237909687-31711-8-git-send-email-gingold@adacore.com> <1237909687-31711-9-git-send-email-gingold@adacore.com> <1237909687-31711-10-git-send-email-gingold@adacore.com> <1237909687-31711-11-git-send-email-gingold@adacore.com> <1237909687-31711-12-git-send-email-gingold@adacore.com> <1237909687-31711-13-git-send-email-gingold@adacore.com> <1237909687-31711-14-git-send-email-gingold@adacore.com> <1237909687-31711-15-git-send-email-gingold@adacore.com> <1237909687-31711-16-git-send-email-gingold@adacore.com> <1237909687-31711-17-git-send-email-gingold@adacore.com> <1237909687-31711-18-git-send-email-gingold@adacore.com> <1237909687-31711-19-git-send-email-gingold@adacore.com> <1237909687-31711-20-git-send-email-gingold@adacore.com> <1237909687-31711-21-git-send-email-gingold@adacore.com> Subject: [Qemu-devel] [PATCH 21/25] Add alpha_cpu_list. Reply-To: qemu-devel@nongnu.org List-Id: qemu-devel.nongnu.org List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org 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 --- 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 3798157..1086309 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 6936802..1eba0a6 100644 --- a/target-alpha/translate.c +++ b/target-alpha/translate.c @@ -2459,17 +2459,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[] = { +#ifdef CONFIG_USER_ONLY + { "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