From patchwork Wed Dec 9 23:46:36 2009 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Richard Henderson X-Patchwork-Id: 40767 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from lists.gnu.org (lists.gnu.org [199.232.76.165]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (Client did not present a certificate) by ozlabs.org (Postfix) with ESMTPS id 12201B6F2B for ; Thu, 10 Dec 2009 11:27:22 +1100 (EST) Received: from localhost ([127.0.0.1]:60757 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1NIWsJ-0003Ow-2h for incoming@patchwork.ozlabs.org; Wed, 09 Dec 2009 19:27:19 -0500 Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1NIWln-0000g6-TS for qemu-devel@nongnu.org; Wed, 09 Dec 2009 19:20:36 -0500 Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1NIWll-0000dN-B9 for qemu-devel@nongnu.org; Wed, 09 Dec 2009 19:20:33 -0500 Received: from [199.232.76.173] (port=44269 helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1NIWll-0000dE-0R for qemu-devel@nongnu.org; Wed, 09 Dec 2009 19:20:33 -0500 Received: from are.twiddle.net ([75.149.56.221]:47480) by monty-python.gnu.org with esmtp (Exim 4.60) (envelope-from ) id 1NIWlk-0008Lh-KE for qemu-devel@nongnu.org; Wed, 09 Dec 2009 19:20:32 -0500 Received: by are.twiddle.net (Postfix, from userid 5000) id C83BBC8C; Wed, 9 Dec 2009 16:20:28 -0800 (PST) Message-Id: <20ef21d71847c4d9394771cb921e313e545272a9.1260403522.git.rth@twiddle.net> In-Reply-To: References: From: Richard Henderson Date: Wed, 9 Dec 2009 15:46:36 -0800 To: qemu-devel@nongnu.org X-detected-operating-system: by monty-python.gnu.org: GNU/Linux 2.6 (newer, 2) Subject: [Qemu-devel] [PATCH 5/7] alpha: Honor the -cpu command line argument. X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: qemu-devel.nongnu.org List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Also change the default cpu to ev67. Signed-off-by: Richard Henderson --- target-alpha/translate.c | 44 ++++++++++++++++++++++++++++++++++++++++++-- 1 files changed, 42 insertions(+), 2 deletions(-) diff --git a/target-alpha/translate.c b/target-alpha/translate.c index ae1f5a8..3f8d1b2 100644 --- a/target-alpha/translate.c +++ b/target-alpha/translate.c @@ -2460,17 +2460,57 @@ void gen_intermediate_code_pc (CPUState *env, struct TranslationBlock *tb) gen_intermediate_code_internal(env, tb, 1); } +struct cpu_def_t { + const char *name; + int implver, amask; +}; + +static const struct cpu_def_t cpu_defs[] = { + { "ev4", IMPLVER_2106x, 0 }, + { "ev5", IMPLVER_21164, 0 }, + { "ev56", IMPLVER_21164, AMASK_BWX }, + { "pca56", IMPLVER_21164, AMASK_BWX | AMASK_MVI }, + { "ev6", IMPLVER_21264, AMASK_BWX | AMASK_FIX | AMASK_MVI | AMASK_TRAP }, + { "ev67", IMPLVER_21264, (AMASK_BWX | AMASK_FIX | AMASK_CIX + | AMASK_MVI | AMASK_TRAP | AMASK_PREFETCH), }, + { "ev68", IMPLVER_21264, (AMASK_BWX | AMASK_FIX | AMASK_CIX + | AMASK_MVI | AMASK_TRAP | AMASK_PREFETCH), }, + { "21064", IMPLVER_2106x, 0 }, + { "21164", IMPLVER_21164, 0 }, + { "21164a", IMPLVER_21164, AMASK_BWX }, + { "21164pc", IMPLVER_21164, AMASK_BWX | AMASK_MVI }, + { "21264", IMPLVER_21264, AMASK_BWX | AMASK_FIX | AMASK_MVI | AMASK_TRAP }, + { "21264a", IMPLVER_21264, (AMASK_BWX | AMASK_FIX | AMASK_CIX + | AMASK_MVI | AMASK_TRAP | AMASK_PREFETCH), } +}; + CPUAlphaState * cpu_alpha_init (const char *cpu_model) { CPUAlphaState *env; uint64_t hwpcb; + int implver, amask, i, max; 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; + + /* Default to ev67; no reason not to emulate insns by default. */ + implver = IMPLVER_21264; + amask = (AMASK_BWX | AMASK_FIX | AMASK_CIX | AMASK_MVI + | AMASK_TRAP | AMASK_PREFETCH); + + max = ARRAY_SIZE(cpu_defs); + for (i = 0; i < max; i++) { + if (strcmp (cpu_model, cpu_defs[i].name) == 0) { + implver = cpu_defs[i].implver; + amask = cpu_defs[i].amask; + break; + } + } + env->implver = implver; + env->amask = amask; + env->ps = 0x1F00; #if defined (CONFIG_USER_ONLY) env->ps |= 1 << 3;