Message ID | 20210521201759.85475-7-bruno.larsen@eldorado.org.br (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | target/ppc: add support to disable-tcg | expand |
On Fri, May 21, 2021 at 05:17:56PM -0300, Bruno Larsen (billionai) wrote: > Moved the ppc_cpu_do_interrupt function to cpu.c file, where it makes > more sense, and turned powerpc_excp not static, as it now needs to be > accessed from outside of excp_helper.c > > Signed-off-by: Bruno Larsen (billionai) > <bruno.larsen@eldorado.org.br> Looks ok to me, but I'd like to get a review from Richard before applying. > --- > target/ppc/cpu.c | 20 ++++++++++++++++++++ > target/ppc/cpu.h | 1 + > target/ppc/excp_helper.c | 19 +------------------ > 3 files changed, 22 insertions(+), 18 deletions(-) > > diff --git a/target/ppc/cpu.c b/target/ppc/cpu.c > index 19d67b5b07..95898f348b 100644 > --- a/target/ppc/cpu.c > +++ b/target/ppc/cpu.c > @@ -152,3 +152,23 @@ void ppc_store_fpscr(CPUPPCState *env, target_ulong val) > fpscr_set_rounding_mode(env); > } > } > + > +/* Exception processing */ > +#if defined(CONFIG_USER_ONLY) > +void ppc_cpu_do_interrupt(CPUState *cs) > +{ > + PowerPCCPU *cpu = POWERPC_CPU(cs); > + CPUPPCState *env = &cpu->env; > + > + cs->exception_index = POWERPC_EXCP_NONE; > + env->error_code = 0; > +} > +#else > +void ppc_cpu_do_interrupt(CPUState *cs) > +{ > + PowerPCCPU *cpu = POWERPC_CPU(cs); > + CPUPPCState *env = &cpu->env; > + > + powerpc_excp(cpu, env->excp_model, cs->exception_index); > +} > +#endif > diff --git a/target/ppc/cpu.h b/target/ppc/cpu.h > index 203f07e48e..65a08cc424 100644 > --- a/target/ppc/cpu.h > +++ b/target/ppc/cpu.h > @@ -1254,6 +1254,7 @@ DECLARE_OBJ_CHECKERS(PPCVirtualHypervisor, PPCVirtualHypervisorClass, > #endif /* CONFIG_USER_ONLY */ > > void ppc_cpu_do_interrupt(CPUState *cpu); > +void powerpc_excp(PowerPCCPU *cpu, int excp_model, int excp); > bool ppc_cpu_exec_interrupt(CPUState *cpu, int int_req); > void ppc_cpu_dump_state(CPUState *cpu, FILE *f, int flags); > void ppc_cpu_dump_statistics(CPUState *cpu, int flags); > diff --git a/target/ppc/excp_helper.c b/target/ppc/excp_helper.c > index f4f15279eb..80bb6e70e9 100644 > --- a/target/ppc/excp_helper.c > +++ b/target/ppc/excp_helper.c > @@ -38,15 +38,6 @@ > /*****************************************************************************/ > /* Exception processing */ > #if defined(CONFIG_USER_ONLY) > -void ppc_cpu_do_interrupt(CPUState *cs) > -{ > - PowerPCCPU *cpu = POWERPC_CPU(cs); > - CPUPPCState *env = &cpu->env; > - > - cs->exception_index = POWERPC_EXCP_NONE; > - env->error_code = 0; > -} > - > static void ppc_hw_interrupt(CPUPPCState *env) > { > CPUState *cs = env_cpu(env); > @@ -324,7 +315,7 @@ static inline void powerpc_set_excp_state(PowerPCCPU *cpu, > * Note that this function should be greatly optimized when called > * with a constant excp, from ppc_hw_interrupt > */ > -static inline void powerpc_excp(PowerPCCPU *cpu, int excp_model, int excp) > +inline void powerpc_excp(PowerPCCPU *cpu, int excp_model, int excp) > { > CPUState *cs = CPU(cpu); > CPUPPCState *env = &cpu->env; > @@ -968,14 +959,6 @@ static inline void powerpc_excp(PowerPCCPU *cpu, int excp_model, int excp) > powerpc_set_excp_state(cpu, vector, new_msr); > } > > -void ppc_cpu_do_interrupt(CPUState *cs) > -{ > - PowerPCCPU *cpu = POWERPC_CPU(cs); > - CPUPPCState *env = &cpu->env; > - > - powerpc_excp(cpu, env->excp_model, cs->exception_index); > -} > - > static void ppc_hw_interrupt(CPUPPCState *env) > { > PowerPCCPU *cpu = env_archcpu(env);
On 5/21/21 1:17 PM, Bruno Larsen (billionai) wrote: > Moved the ppc_cpu_do_interrupt function to cpu.c file, where it makes > more sense, and turned powerpc_excp not static, as it now needs to be > accessed from outside of excp_helper.c > > Signed-off-by: Bruno Larsen (billionai) <bruno.larsen@eldorado.org.br> > --- > target/ppc/cpu.c | 20 ++++++++++++++++++++ > target/ppc/cpu.h | 1 + > target/ppc/excp_helper.c | 19 +------------------ > 3 files changed, 22 insertions(+), 18 deletions(-) I don't see what this buys you really. It's not special-register access, like the rest of cpu.c so far. > diff --git a/target/ppc/excp_helper.c b/target/ppc/excp_helper.c > index f4f15279eb..80bb6e70e9 100644 > --- a/target/ppc/excp_helper.c > +++ b/target/ppc/excp_helper.c > @@ -38,15 +38,6 @@ > /*****************************************************************************/ > /* Exception processing */ > #if defined(CONFIG_USER_ONLY) > -void ppc_cpu_do_interrupt(CPUState *cs) > -{ > - PowerPCCPU *cpu = POWERPC_CPU(cs); > - CPUPPCState *env = &cpu->env; > - > - cs->exception_index = POWERPC_EXCP_NONE; > - env->error_code = 0; > -} > - This part could move to user_only_helper.c easily. > @@ -324,7 +315,7 @@ static inline void powerpc_set_excp_state(PowerPCCPU *cpu, > * Note that this function should be greatly optimized when called > * with a constant excp, from ppc_hw_interrupt > */ > -static inline void powerpc_excp(PowerPCCPU *cpu, int excp_model, int excp) > +inline void powerpc_excp(PowerPCCPU *cpu, int excp_model, int excp) Exporting powerpc_excp from this file is not an improvement, as far as I can see. r~
diff --git a/target/ppc/cpu.c b/target/ppc/cpu.c index 19d67b5b07..95898f348b 100644 --- a/target/ppc/cpu.c +++ b/target/ppc/cpu.c @@ -152,3 +152,23 @@ void ppc_store_fpscr(CPUPPCState *env, target_ulong val) fpscr_set_rounding_mode(env); } } + +/* Exception processing */ +#if defined(CONFIG_USER_ONLY) +void ppc_cpu_do_interrupt(CPUState *cs) +{ + PowerPCCPU *cpu = POWERPC_CPU(cs); + CPUPPCState *env = &cpu->env; + + cs->exception_index = POWERPC_EXCP_NONE; + env->error_code = 0; +} +#else +void ppc_cpu_do_interrupt(CPUState *cs) +{ + PowerPCCPU *cpu = POWERPC_CPU(cs); + CPUPPCState *env = &cpu->env; + + powerpc_excp(cpu, env->excp_model, cs->exception_index); +} +#endif diff --git a/target/ppc/cpu.h b/target/ppc/cpu.h index 203f07e48e..65a08cc424 100644 --- a/target/ppc/cpu.h +++ b/target/ppc/cpu.h @@ -1254,6 +1254,7 @@ DECLARE_OBJ_CHECKERS(PPCVirtualHypervisor, PPCVirtualHypervisorClass, #endif /* CONFIG_USER_ONLY */ void ppc_cpu_do_interrupt(CPUState *cpu); +void powerpc_excp(PowerPCCPU *cpu, int excp_model, int excp); bool ppc_cpu_exec_interrupt(CPUState *cpu, int int_req); void ppc_cpu_dump_state(CPUState *cpu, FILE *f, int flags); void ppc_cpu_dump_statistics(CPUState *cpu, int flags); diff --git a/target/ppc/excp_helper.c b/target/ppc/excp_helper.c index f4f15279eb..80bb6e70e9 100644 --- a/target/ppc/excp_helper.c +++ b/target/ppc/excp_helper.c @@ -38,15 +38,6 @@ /*****************************************************************************/ /* Exception processing */ #if defined(CONFIG_USER_ONLY) -void ppc_cpu_do_interrupt(CPUState *cs) -{ - PowerPCCPU *cpu = POWERPC_CPU(cs); - CPUPPCState *env = &cpu->env; - - cs->exception_index = POWERPC_EXCP_NONE; - env->error_code = 0; -} - static void ppc_hw_interrupt(CPUPPCState *env) { CPUState *cs = env_cpu(env); @@ -324,7 +315,7 @@ static inline void powerpc_set_excp_state(PowerPCCPU *cpu, * Note that this function should be greatly optimized when called * with a constant excp, from ppc_hw_interrupt */ -static inline void powerpc_excp(PowerPCCPU *cpu, int excp_model, int excp) +inline void powerpc_excp(PowerPCCPU *cpu, int excp_model, int excp) { CPUState *cs = CPU(cpu); CPUPPCState *env = &cpu->env; @@ -968,14 +959,6 @@ static inline void powerpc_excp(PowerPCCPU *cpu, int excp_model, int excp) powerpc_set_excp_state(cpu, vector, new_msr); } -void ppc_cpu_do_interrupt(CPUState *cs) -{ - PowerPCCPU *cpu = POWERPC_CPU(cs); - CPUPPCState *env = &cpu->env; - - powerpc_excp(cpu, env->excp_model, cs->exception_index); -} - static void ppc_hw_interrupt(CPUPPCState *env) { PowerPCCPU *cpu = env_archcpu(env);
Moved the ppc_cpu_do_interrupt function to cpu.c file, where it makes more sense, and turned powerpc_excp not static, as it now needs to be accessed from outside of excp_helper.c Signed-off-by: Bruno Larsen (billionai) <bruno.larsen@eldorado.org.br> --- target/ppc/cpu.c | 20 ++++++++++++++++++++ target/ppc/cpu.h | 1 + target/ppc/excp_helper.c | 19 +------------------ 3 files changed, 22 insertions(+), 18 deletions(-)