target-m68k: Use cpu_exec_interrupt qom hook

Since do_interrupt_m68k_hardirq is no longer used outside
op_helper.c, make it static.

Signed-off-by: Richard Henderson <rth@twiddle.net>
Reviewed-by: Alex Bennée <alex.bennee@linaro.org>
Message-id: 1410626734-3804-10-git-send-email-rth@twiddle.net
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
This commit is contained in:
Richard Henderson 2014-09-13 09:45:20 -07:00 committed by Peter Maydell
parent 02bb9bbf1d
commit ab409bb3fe
5 changed files with 22 additions and 16 deletions

View File

@ -650,19 +650,6 @@ int cpu_exec(CPUArchState *env)
next_tb = 0; next_tb = 0;
} }
} }
#elif defined(TARGET_M68K)
if (interrupt_request & CPU_INTERRUPT_HARD
&& ((env->sr & SR_I) >> SR_I_SHIFT)
< env->pending_level) {
/* Real hardware gets the interrupt vector via an
IACK cycle at this point. Current emulated
hardware doesn't rely on this, so we
provide/save the vector when the interrupt is
first signalled. */
cpu->exception_index = env->pending_vector;
do_interrupt_m68k_hardirq(env);
next_tb = 0;
}
#endif #endif
/* The target hook has 3 exit conditions: /* The target hook has 3 exit conditions:
False when the interrupt isn't processed, False when the interrupt isn't processed,

View File

@ -71,6 +71,7 @@ static inline M68kCPU *m68k_env_get_cpu(CPUM68KState *env)
#define ENV_OFFSET offsetof(M68kCPU, env) #define ENV_OFFSET offsetof(M68kCPU, env)
void m68k_cpu_do_interrupt(CPUState *cpu); void m68k_cpu_do_interrupt(CPUState *cpu);
bool m68k_cpu_exec_interrupt(CPUState *cpu, int int_req);
void m68k_cpu_dump_state(CPUState *cpu, FILE *f, fprintf_function cpu_fprintf, void m68k_cpu_dump_state(CPUState *cpu, FILE *f, fprintf_function cpu_fprintf,
int flags); int flags);
hwaddr m68k_cpu_get_phys_page_debug(CPUState *cpu, vaddr addr); hwaddr m68k_cpu_get_phys_page_debug(CPUState *cpu, vaddr addr);

View File

@ -196,6 +196,7 @@ static void m68k_cpu_class_init(ObjectClass *c, void *data)
cc->class_by_name = m68k_cpu_class_by_name; cc->class_by_name = m68k_cpu_class_by_name;
cc->has_work = m68k_cpu_has_work; cc->has_work = m68k_cpu_has_work;
cc->do_interrupt = m68k_cpu_do_interrupt; cc->do_interrupt = m68k_cpu_do_interrupt;
cc->cpu_exec_interrupt = m68k_cpu_exec_interrupt;
cc->dump_state = m68k_cpu_dump_state; cc->dump_state = m68k_cpu_dump_state;
cc->set_pc = m68k_cpu_set_pc; cc->set_pc = m68k_cpu_set_pc;
cc->gdb_read_register = m68k_cpu_gdb_read_register; cc->gdb_read_register = m68k_cpu_gdb_read_register;

View File

@ -120,7 +120,6 @@ void m68k_tcg_init(void);
void m68k_cpu_init_gdb(M68kCPU *cpu); void m68k_cpu_init_gdb(M68kCPU *cpu);
M68kCPU *cpu_m68k_init(const char *cpu_model); M68kCPU *cpu_m68k_init(const char *cpu_model);
int cpu_m68k_exec(CPUM68KState *s); int cpu_m68k_exec(CPUM68KState *s);
void do_interrupt_m68k_hardirq(CPUM68KState *env1);
/* you can call this signal handler from your SIGBUS and SIGSEGV /* you can call this signal handler from your SIGBUS and SIGSEGV
signal handlers to inform the virtual CPU of exceptions. non zero signal handlers to inform the virtual CPU of exceptions. non zero
is returned if the signal was handled by the virtual CPU. */ is returned if the signal was handled by the virtual CPU. */

View File

@ -27,7 +27,7 @@ void m68k_cpu_do_interrupt(CPUState *cs)
cs->exception_index = -1; cs->exception_index = -1;
} }
void do_interrupt_m68k_hardirq(CPUM68KState *env) static inline void do_interrupt_m68k_hardirq(CPUM68KState *env)
{ {
} }
@ -141,12 +141,30 @@ void m68k_cpu_do_interrupt(CPUState *cs)
do_interrupt_all(env, 0); do_interrupt_all(env, 0);
} }
void do_interrupt_m68k_hardirq(CPUM68KState *env) static inline void do_interrupt_m68k_hardirq(CPUM68KState *env)
{ {
do_interrupt_all(env, 1); do_interrupt_all(env, 1);
} }
#endif #endif
bool m68k_cpu_exec_interrupt(CPUState *cs, int interrupt_request)
{
M68kCPU *cpu = M68K_CPU(cs);
CPUM68KState *env = &cpu->env;
if (interrupt_request & CPU_INTERRUPT_HARD
&& ((env->sr & SR_I) >> SR_I_SHIFT) < env->pending_level) {
/* Real hardware gets the interrupt vector via an IACK cycle
at this point. Current emulated hardware doesn't rely on
this, so we provide/save the vector when the interrupt is
first signalled. */
cs->exception_index = env->pending_vector;
do_interrupt_m68k_hardirq(env);
return true;
}
return false;
}
static void raise_exception(CPUM68KState *env, int tt) static void raise_exception(CPUM68KState *env, int tt)
{ {
CPUState *cs = CPU(m68k_env_get_cpu(env)); CPUState *cs = CPU(m68k_env_get_cpu(env));