From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1LoIbt-0007y9-Uv for qemu-devel@nongnu.org; Mon, 30 Mar 2009 10:37:10 -0400 Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1LoIbm-0007tA-BL for qemu-devel@nongnu.org; Mon, 30 Mar 2009 10:37:05 -0400 Received: from [199.232.76.173] (port=54195 helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1LoIbl-0007sY-DS for qemu-devel@nongnu.org; Mon, 30 Mar 2009 10:37:01 -0400 Received: from mel.act-europe.fr ([212.99.106.210]:60660) by monty-python.gnu.org with esmtp (Exim 4.60) (envelope-from ) id 1LoIbj-00013Z-Rs for qemu-devel@nongnu.org; Mon, 30 Mar 2009 10:37:00 -0400 Received: from localhost (localhost [127.0.0.1]) by filtered-smtp.eu.adacore.com (Postfix) with ESMTP id D3D96290039 for ; Mon, 30 Mar 2009 16:36:37 +0200 (CEST) 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 HGzxP5LHHZUK for ; Mon, 30 Mar 2009 16:36:37 +0200 (CEST) Received: from ulanbator.act-europe.fr (ulanbator.act-europe.fr [10.10.1.67]) by mel.act-europe.fr (Postfix) with ESMTP id 3955B29005C for ; Mon, 30 Mar 2009 16:36:35 +0200 (CEST) From: Tristan Gingold Date: Mon, 30 Mar 2009 16:36:30 +0200 Message-Id: <1238423794-25455-16-git-send-email-gingold@adacore.com> In-Reply-To: <1238423794-25455-15-git-send-email-gingold@adacore.com> References: <1238423794-25455-1-git-send-email-gingold@adacore.com> <1238423794-25455-2-git-send-email-gingold@adacore.com> <1238423794-25455-3-git-send-email-gingold@adacore.com> <1238423794-25455-4-git-send-email-gingold@adacore.com> <1238423794-25455-5-git-send-email-gingold@adacore.com> <1238423794-25455-6-git-send-email-gingold@adacore.com> <1238423794-25455-7-git-send-email-gingold@adacore.com> <1238423794-25455-8-git-send-email-gingold@adacore.com> <1238423794-25455-9-git-send-email-gingold@adacore.com> <1238423794-25455-10-git-send-email-gingold@adacore.com> <1238423794-25455-11-git-send-email-gingold@adacore.com> <1238423794-25455-12-git-send-email-gingold@adacore.com> <1238423794-25455-13-git-send-email-gingold@adacore.com> <1238423794-25455-14-git-send-email-gingold@adacore.com> <1238423794-25455-15-git-send-email-gingold@adacore.com> Subject: [Qemu-devel] [PATCH 15/19] 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 db53650..c27e89f 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 41f24a5..dab8d78 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