From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([208.118.235.92]:52847) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1SDIw3-0002kN-AF for qemu-devel@nongnu.org; Thu, 29 Mar 2012 13:14:56 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1SDIvy-0000UF-0s for qemu-devel@nongnu.org; Thu, 29 Mar 2012 13:14:54 -0400 Received: from cantor2.suse.de ([195.135.220.15]:52025 helo=mx2.suse.de) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1SDIvx-0000Tw-Na for qemu-devel@nongnu.org; Thu, 29 Mar 2012 13:14:49 -0400 From: =?UTF-8?q?Andreas=20F=C3=A4rber?= Date: Thu, 29 Mar 2012 19:14:42 +0200 Message-Id: <1333041282-3254-6-git-send-email-afaerber@suse.de> In-Reply-To: <1333041282-3254-1-git-send-email-afaerber@suse.de> References: <1333041282-3254-1-git-send-email-afaerber@suse.de> MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable Subject: [Qemu-devel] [PATCH v2 5/5] target-unicore32: Move CPU-dependent init into initfn List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org Cc: Guan Xuetao , =?UTF-8?q?Andreas=20F=C3=A4rber?= Instead of setting values in a CPUID switch, do so in initfn functions. Signed-off-by: Andreas F=C3=A4rber --- target-unicore32/cpu.c | 14 ++++++++++++++ target-unicore32/helper.c | 23 ----------------------- 2 files changed, 14 insertions(+), 23 deletions(-) diff --git a/target-unicore32/cpu.c b/target-unicore32/cpu.c index 189b6f6..de63f58 100644 --- a/target-unicore32/cpu.c +++ b/target-unicore32/cpu.c @@ -15,6 +15,11 @@ #include "cpu-qom.h" #include "qemu-common.h" =20 +static inline void set_feature(CPUUniCore32State *env, int feature) +{ + env->features |=3D feature; +} + /* CPU models */ =20 typedef struct UniCore32CPUInfo { @@ -28,6 +33,12 @@ static void unicore_ii_cpu_initfn(Object *obj) CPUUniCore32State *env =3D &cpu->env; =20 env->cp0.c0_cpuid =3D 0x40010863; + + set_feature(env, UC32_HWCAP_CMOV); + set_feature(env, UC32_HWCAP_UCF64); + env->ucf64.xregs[UC32_UCF64_FPSCR] =3D 0; + env->cp0.c0_cachetype =3D 0x1dd20d2; + env->cp0.c1_sys =3D 0x00090078; } =20 static void uc32_any_cpu_initfn(Object *obj) @@ -36,6 +47,9 @@ static void uc32_any_cpu_initfn(Object *obj) CPUUniCore32State *env =3D &cpu->env; =20 env->cp0.c0_cpuid =3D 0xffffffff; + + set_feature(env, UC32_HWCAP_CMOV); + set_feature(env, UC32_HWCAP_UCF64); } =20 static const UniCore32CPUInfo uc32_cpus[] =3D { diff --git a/target-unicore32/helper.c b/target-unicore32/helper.c index 0f23a40..9fe4a37 100644 --- a/target-unicore32/helper.c +++ b/target-unicore32/helper.c @@ -14,16 +14,10 @@ #include "helper.h" #include "host-utils.h" =20 -static inline void set_feature(CPUUniCore32State *env, int feature) -{ - env->features |=3D feature; -} - CPUUniCore32State *uc32_cpu_init(const char *cpu_model) { UniCore32CPU *cpu; CPUUniCore32State *env; - uint32_t id; static int inited =3D 1; =20 if (object_class_by_name(cpu_model) =3D=3D NULL) { @@ -32,23 +26,6 @@ CPUUniCore32State *uc32_cpu_init(const char *cpu_model= ) cpu =3D UNICORE32_CPU(object_new(cpu_model)); env =3D &cpu->env; =20 - id =3D env->cp0.c0_cpuid; - switch (id) { - case UC32_CPUID_UCV2: - set_feature(env, UC32_HWCAP_CMOV); - set_feature(env, UC32_HWCAP_UCF64); - env->ucf64.xregs[UC32_UCF64_FPSCR] =3D 0; - env->cp0.c0_cachetype =3D 0x1dd20d2; - env->cp0.c1_sys =3D 0x00090078; - break; - case UC32_CPUID_ANY: /* For userspace emulation. */ - set_feature(env, UC32_HWCAP_CMOV); - set_feature(env, UC32_HWCAP_UCF64); - break; - default: - cpu_abort(env, "Bad CPU ID: %x\n", id); - } - if (inited) { inited =3D 0; uc32_translate_init(); --=20 1.7.7