From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:52489) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1XTFcg-0005qD-46 for qemu-devel@nongnu.org; Sun, 14 Sep 2014 15:38:14 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1XTFcb-0002kS-KJ for qemu-devel@nongnu.org; Sun, 14 Sep 2014 15:38:10 -0400 Received: from static.88-198-71-155.clients.your-server.de ([88.198.71.155]:58073 helo=socrates.bennee.com) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1XTFcb-0002kO-F5 for qemu-devel@nongnu.org; Sun, 14 Sep 2014 15:38:05 -0400 From: Alex =?utf-8?Q?Benn=C3=A9e?= References: <1410626734-3804-1-git-send-email-rth@twiddle.net> <1410626734-3804-4-git-send-email-rth@twiddle.net> In-reply-to: <1410626734-3804-4-git-send-email-rth@twiddle.net> Date: Sun, 14 Sep 2014 20:38:01 +0100 Message-ID: <87bnqiouw6.fsf@linaro.org> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit Subject: Re: [Qemu-devel] [PATCH 03/23] target-i386: Use cpu_exec_enter/exit qom hooks List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Richard Henderson Cc: peter.maydell@linaro.org, qemu-devel@nongnu.org, aliguori@amazon.com, afaerber@suse.de Richard Henderson writes: > Note that the code that was within the "exit" ifdef block > was identical to the cpu_compute_eflags inline, so make that > simplification at the same time. > > Signed-off-by: Richard Henderson Reviewed-by: Alex Bennée > --- > cpu-exec.c | 14 ++------------ > target-i386/cpu-qom.h | 3 +++ > target-i386/cpu.c | 2 ++ > target-i386/helper.c | 21 +++++++++++++++++++++ > 4 files changed, 28 insertions(+), 12 deletions(-) > > diff --git a/cpu-exec.c b/cpu-exec.c > index 808d34f..0c1f0d3 100644 > --- a/cpu-exec.c > +++ b/cpu-exec.c > @@ -352,13 +352,7 @@ int cpu_exec(CPUArchState *env) > cpu->exit_request = 1; > } > > -#if defined(TARGET_I386) > - /* put eflags in CPU temporary format */ > - CC_SRC = env->eflags & (CC_O | CC_S | CC_Z | CC_A | CC_P | CC_C); > - env->df = 1 - (2 * ((env->eflags >> 10) & 1)); > - CC_OP = CC_OP_EFLAGS; > - env->eflags &= ~(DF_MASK | CC_O | CC_S | CC_Z | CC_A | CC_P | CC_C); > -#elif defined(TARGET_M68K) > +#if defined(TARGET_M68K) > env->cc_op = CC_OP_FLAGS; > env->cc_dest = env->sr & 0xf; > env->cc_x = (env->sr >> 4) & 1; > @@ -811,11 +805,7 @@ int cpu_exec(CPUArchState *env) > } /* for(;;) */ > > > -#if defined(TARGET_I386) > - /* restore flags in standard format */ > - env->eflags = env->eflags | cpu_cc_compute_all(env, CC_OP) > - | (env->df & DF_MASK); > -#elif defined(TARGET_M68K) > +#if defined(TARGET_M68K) > cpu_m68k_flush_flags(env, env->cc_op); > env->cc_op = CC_OP_FLAGS; > env->sr = (env->sr & 0xffe0) > diff --git a/target-i386/cpu-qom.h b/target-i386/cpu-qom.h > index 7755466..b242cb0 100644 > --- a/target-i386/cpu-qom.h > +++ b/target-i386/cpu-qom.h > @@ -151,4 +151,7 @@ hwaddr x86_cpu_get_phys_page_debug(CPUState *cpu, vaddr addr); > int x86_cpu_gdb_read_register(CPUState *cpu, uint8_t *buf, int reg); > int x86_cpu_gdb_write_register(CPUState *cpu, uint8_t *buf, int reg); > > +void x86_cpu_exec_enter(CPUState *cpu); > +void x86_cpu_exec_exit(CPUState *cpu); > + > #endif > diff --git a/target-i386/cpu.c b/target-i386/cpu.c > index 90d0a05..223e43e 100644 > --- a/target-i386/cpu.c > +++ b/target-i386/cpu.c > @@ -2942,6 +2942,8 @@ static void x86_cpu_common_class_init(ObjectClass *oc, void *data) > #ifndef CONFIG_USER_ONLY > cc->debug_excp_handler = breakpoint_handler; > #endif > + cc->cpu_exec_enter = x86_cpu_exec_enter; > + cc->cpu_exec_exit = x86_cpu_exec_exit; > } > > static const TypeInfo x86_cpu_type_info = { > diff --git a/target-i386/helper.c b/target-i386/helper.c > index 28fefe0..345bda1 100644 > --- a/target-i386/helper.c > +++ b/target-i386/helper.c > @@ -1262,3 +1262,24 @@ void do_cpu_sipi(X86CPU *cpu) > { > } > #endif > + > +/* Frob eflags into and out of the CPU temporary format. */ > + > +void x86_cpu_exec_enter(CPUState *cs) > +{ > + X86CPU *cpu = X86_CPU(cs); > + CPUX86State *env = &cpu->env; > + > + CC_SRC = env->eflags & (CC_O | CC_S | CC_Z | CC_A | CC_P | CC_C); > + env->df = 1 - (2 * ((env->eflags >> 10) & 1)); > + CC_OP = CC_OP_EFLAGS; > + env->eflags &= ~(DF_MASK | CC_O | CC_S | CC_Z | CC_A | CC_P | CC_C); > +} > + > +void x86_cpu_exec_exit(CPUState *cs) > +{ > + X86CPU *cpu = X86_CPU(cs); > + CPUX86State *env = &cpu->env; > + > + env->eflags = cpu_compute_eflags(env); > +} -- Alex Bennée