mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-05 16:53:55 -06:00
cpu: Move exception_index field from CPU_COMMON to CPUState
Signed-off-by: Andreas Färber <afaerber@suse.de>
This commit is contained in:
parent
6f03bef0ff
commit
27103424c4
60 changed files with 389 additions and 319 deletions
|
@ -282,7 +282,7 @@ int m68k_cpu_handle_mmu_fault(CPUState *cs, vaddr address, int rw,
|
|||
{
|
||||
M68kCPU *cpu = M68K_CPU(cs);
|
||||
|
||||
cpu->env.exception_index = EXCP_ACCESS;
|
||||
cs->exception_index = EXCP_ACCESS;
|
||||
cpu->env.mmu.ar = address;
|
||||
return 1;
|
||||
}
|
||||
|
|
|
@ -23,10 +23,7 @@
|
|||
|
||||
void m68k_cpu_do_interrupt(CPUState *cs)
|
||||
{
|
||||
M68kCPU *cpu = M68K_CPU(cs);
|
||||
CPUM68KState *env = &cpu->env;
|
||||
|
||||
env->exception_index = -1;
|
||||
cs->exception_index = -1;
|
||||
}
|
||||
|
||||
void do_interrupt_m68k_hardirq(CPUM68KState *env)
|
||||
|
@ -88,7 +85,7 @@ static void do_rte(CPUM68KState *env)
|
|||
|
||||
static void do_interrupt_all(CPUM68KState *env, int is_hw)
|
||||
{
|
||||
CPUState *cs;
|
||||
CPUState *cs = CPU(m68k_env_get_cpu(env));
|
||||
uint32_t sp;
|
||||
uint32_t fmt;
|
||||
uint32_t retaddr;
|
||||
|
@ -98,7 +95,7 @@ static void do_interrupt_all(CPUM68KState *env, int is_hw)
|
|||
retaddr = env->pc;
|
||||
|
||||
if (!is_hw) {
|
||||
switch (env->exception_index) {
|
||||
switch (cs->exception_index) {
|
||||
case EXCP_RTE:
|
||||
/* Return from an exception. */
|
||||
do_rte(env);
|
||||
|
@ -113,20 +110,19 @@ static void do_interrupt_all(CPUM68KState *env, int is_hw)
|
|||
do_m68k_semihosting(env, env->dregs[0]);
|
||||
return;
|
||||
}
|
||||
cs = CPU(m68k_env_get_cpu(env));
|
||||
cs->halted = 1;
|
||||
env->exception_index = EXCP_HLT;
|
||||
cs->exception_index = EXCP_HLT;
|
||||
cpu_loop_exit(env);
|
||||
return;
|
||||
}
|
||||
if (env->exception_index >= EXCP_TRAP0
|
||||
&& env->exception_index <= EXCP_TRAP15) {
|
||||
if (cs->exception_index >= EXCP_TRAP0
|
||||
&& cs->exception_index <= EXCP_TRAP15) {
|
||||
/* Move the PC after the trap instruction. */
|
||||
retaddr += 2;
|
||||
}
|
||||
}
|
||||
|
||||
vector = env->exception_index << 2;
|
||||
vector = cs->exception_index << 2;
|
||||
|
||||
sp = env->aregs[7];
|
||||
|
||||
|
@ -169,7 +165,9 @@ void do_interrupt_m68k_hardirq(CPUM68KState *env)
|
|||
|
||||
static void raise_exception(CPUM68KState *env, int tt)
|
||||
{
|
||||
env->exception_index = tt;
|
||||
CPUState *cs = CPU(m68k_env_get_cpu(env));
|
||||
|
||||
cs->exception_index = tt;
|
||||
cpu_loop_exit(env);
|
||||
}
|
||||
|
||||
|
|
|
@ -7,6 +7,5 @@ DEFO32(CC_SRC, cc_src)
|
|||
DEFO32(CC_X, cc_x)
|
||||
DEFO32(DIV1, div1)
|
||||
DEFO32(DIV2, div2)
|
||||
DEFO32(EXCEPTION, exception_index)
|
||||
DEFO32(MACSR, macsr)
|
||||
DEFO32(MAC_MASK, mac_mask)
|
||||
|
|
|
@ -43,6 +43,7 @@
|
|||
#undef DEFF64
|
||||
|
||||
static TCGv_i32 cpu_halted;
|
||||
static TCGv_i32 cpu_exception_index;
|
||||
|
||||
static TCGv_ptr cpu_env;
|
||||
|
||||
|
@ -81,6 +82,10 @@ void m68k_tcg_init(void)
|
|||
cpu_halted = tcg_global_mem_new_i32(TCG_AREG0,
|
||||
-offsetof(M68kCPU, env) +
|
||||
offsetof(CPUState, halted), "HALTED");
|
||||
cpu_exception_index = tcg_global_mem_new_i32(TCG_AREG0,
|
||||
-offsetof(M68kCPU, env) +
|
||||
offsetof(CPUState, exception_index),
|
||||
"EXCEPTION");
|
||||
|
||||
cpu_env = tcg_global_reg_new_ptr(TCG_AREG0, "env");
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue