Message ID | 20210524135908.47505-2-bruno.larsen@eldorado.org.br (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | target/ppc: add support to disable-tcg | expand |
On Mon, May 24, 2021 at 10:59:04AM -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> Looking at this again, I'm inclined to agree with Richard: I don't see a lot of point to this. It's not really clear to me that these belong more in cpu.c than in excp_helper.c, and I believe we're already expecting to need excp_helper.c (or at least parts of it) for !TCG builds. > --- > 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 25/05/2021 02:09, David Gibson wrote: > On Mon, May 24, 2021 at 10:59:04AM -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> > Looking at this again, I'm inclined to agree with Richard: I don't see > a lot of point to this. It's not really clear to me that these belong > more in cpu.c than in excp_helper.c, and I believe we're already > expecting to need excp_helper.c (or at least parts of it) for !TCG > builds. yeah, now that I look at it, I agree too. This was in my mind (or code, can't remember) before we agreed that excp_helper needed to be compiled, so I went ahead and posted it because it was here all along. While we compile excp_helper, there isn't really a point. I think there was a plan to remove or improve excp_helper, so could be something we come back to later, but for now I'll remove from the patch series
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(-)