mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-07 17:53:56 -06:00
target/i386: Pass env to do_pause and do_hlt
Having the callers upcast to X86CPU is a waste, since we don't need it. We even have to recover env in do_hlt. Signed-off-by: Richard Henderson <richard.henderson@linaro.org> Reviewed-by: Paolo Bonzini <pbonzini@redhat.com> Message-Id: <20210514151342.384376-41-richard.henderson@linaro.org>
This commit is contained in:
parent
7eff2e7c65
commit
eb26784fe1
1 changed files with 8 additions and 14 deletions
|
@ -101,19 +101,18 @@ void QEMU_NORETURN helper_rdpmc(CPUX86State *env)
|
||||||
raise_exception_err(env, EXCP06_ILLOP, 0);
|
raise_exception_err(env, EXCP06_ILLOP, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
static QEMU_NORETURN void do_pause(X86CPU *cpu)
|
static void QEMU_NORETURN do_pause(CPUX86State *env)
|
||||||
{
|
{
|
||||||
CPUState *cs = CPU(cpu);
|
CPUState *cs = env_cpu(env);
|
||||||
|
|
||||||
/* Just let another CPU run. */
|
/* Just let another CPU run. */
|
||||||
cs->exception_index = EXCP_INTERRUPT;
|
cs->exception_index = EXCP_INTERRUPT;
|
||||||
cpu_loop_exit(cs);
|
cpu_loop_exit(cs);
|
||||||
}
|
}
|
||||||
|
|
||||||
static QEMU_NORETURN void do_hlt(X86CPU *cpu)
|
static void QEMU_NORETURN do_hlt(CPUX86State *env)
|
||||||
{
|
{
|
||||||
CPUState *cs = CPU(cpu);
|
CPUState *cs = env_cpu(env);
|
||||||
CPUX86State *env = &cpu->env;
|
|
||||||
|
|
||||||
env->hflags &= ~HF_INHIBIT_IRQ_MASK; /* needed if sti is just before */
|
env->hflags &= ~HF_INHIBIT_IRQ_MASK; /* needed if sti is just before */
|
||||||
cs->halted = 1;
|
cs->halted = 1;
|
||||||
|
@ -123,12 +122,10 @@ static QEMU_NORETURN void do_hlt(X86CPU *cpu)
|
||||||
|
|
||||||
void QEMU_NORETURN helper_hlt(CPUX86State *env, int next_eip_addend)
|
void QEMU_NORETURN helper_hlt(CPUX86State *env, int next_eip_addend)
|
||||||
{
|
{
|
||||||
X86CPU *cpu = env_archcpu(env);
|
|
||||||
|
|
||||||
cpu_svm_check_intercept_param(env, SVM_EXIT_HLT, 0, GETPC());
|
cpu_svm_check_intercept_param(env, SVM_EXIT_HLT, 0, GETPC());
|
||||||
env->eip += next_eip_addend;
|
env->eip += next_eip_addend;
|
||||||
|
|
||||||
do_hlt(cpu);
|
do_hlt(env);
|
||||||
}
|
}
|
||||||
|
|
||||||
void helper_monitor(CPUX86State *env, target_ulong ptr)
|
void helper_monitor(CPUX86State *env, target_ulong ptr)
|
||||||
|
@ -143,7 +140,6 @@ void helper_monitor(CPUX86State *env, target_ulong ptr)
|
||||||
void QEMU_NORETURN helper_mwait(CPUX86State *env, int next_eip_addend)
|
void QEMU_NORETURN helper_mwait(CPUX86State *env, int next_eip_addend)
|
||||||
{
|
{
|
||||||
CPUState *cs = env_cpu(env);
|
CPUState *cs = env_cpu(env);
|
||||||
X86CPU *cpu = env_archcpu(env);
|
|
||||||
|
|
||||||
if ((uint32_t)env->regs[R_ECX] != 0) {
|
if ((uint32_t)env->regs[R_ECX] != 0) {
|
||||||
raise_exception_ra(env, EXCP0D_GPF, GETPC());
|
raise_exception_ra(env, EXCP0D_GPF, GETPC());
|
||||||
|
@ -153,20 +149,18 @@ void QEMU_NORETURN helper_mwait(CPUX86State *env, int next_eip_addend)
|
||||||
|
|
||||||
/* XXX: not complete but not completely erroneous */
|
/* XXX: not complete but not completely erroneous */
|
||||||
if (cs->cpu_index != 0 || CPU_NEXT(cs) != NULL) {
|
if (cs->cpu_index != 0 || CPU_NEXT(cs) != NULL) {
|
||||||
do_pause(cpu);
|
do_pause(env);
|
||||||
} else {
|
} else {
|
||||||
do_hlt(cpu);
|
do_hlt(env);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void QEMU_NORETURN helper_pause(CPUX86State *env, int next_eip_addend)
|
void QEMU_NORETURN helper_pause(CPUX86State *env, int next_eip_addend)
|
||||||
{
|
{
|
||||||
X86CPU *cpu = env_archcpu(env);
|
|
||||||
|
|
||||||
cpu_svm_check_intercept_param(env, SVM_EXIT_PAUSE, 0, GETPC());
|
cpu_svm_check_intercept_param(env, SVM_EXIT_PAUSE, 0, GETPC());
|
||||||
env->eip += next_eip_addend;
|
env->eip += next_eip_addend;
|
||||||
|
|
||||||
do_pause(cpu);
|
do_pause(env);
|
||||||
}
|
}
|
||||||
|
|
||||||
void QEMU_NORETURN helper_debug(CPUX86State *env)
|
void QEMU_NORETURN helper_debug(CPUX86State *env)
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue