Skip to content

Commit

Permalink
target/ppc: Remove interrupt handler wrapper functions
Browse files Browse the repository at this point in the history
These wrappers call out to handle POWER7 and newer in separate
functions but reduce to the generic case when TARGET_PPC64 is not
defined. It is easy enough to include the switch in the beginning of
the generic functions to branch out to the specific functions and get
rid of these wrappers. This avoids one indirection and entirely
compiles out the switch without TARGET_PPC64.

Reviewed-by: Harsh Prateek Bora <harshpb@linux.ibm.com>
Signed-off-by: BALATON Zoltan <balaton@eik.bme.hu>
Signed-off-by: Nicholas Piggin <npiggin@gmail.com>
  • Loading branch information
zbalaton authored and npiggin committed Mar 12, 2024
1 parent 5ca958c commit 868cb6b
Showing 1 changed file with 28 additions and 39 deletions.
67 changes: 28 additions & 39 deletions target/ppc/excp_helper.c
Original file line number Diff line number Diff line change
Expand Up @@ -1978,8 +1978,21 @@ static int p9_next_unmasked_interrupt(CPUPPCState *env)
}
#endif /* TARGET_PPC64 */

static int ppc_next_unmasked_interrupt_generic(CPUPPCState *env)
static int ppc_next_unmasked_interrupt(CPUPPCState *env)
{
#ifdef TARGET_PPC64
switch (env->excp_model) {
case POWERPC_EXCP_POWER7:
return p7_next_unmasked_interrupt(env);
case POWERPC_EXCP_POWER8:
return p8_next_unmasked_interrupt(env);
case POWERPC_EXCP_POWER9:
case POWERPC_EXCP_POWER10:
return p9_next_unmasked_interrupt(env);
default:
break;
}
#endif
bool async_deliver;

/* External reset */
Expand Down Expand Up @@ -2090,23 +2103,6 @@ static int ppc_next_unmasked_interrupt_generic(CPUPPCState *env)
return 0;
}

static int ppc_next_unmasked_interrupt(CPUPPCState *env)
{
switch (env->excp_model) {
#ifdef TARGET_PPC64
case POWERPC_EXCP_POWER7:
return p7_next_unmasked_interrupt(env);
case POWERPC_EXCP_POWER8:
return p8_next_unmasked_interrupt(env);
case POWERPC_EXCP_POWER9:
case POWERPC_EXCP_POWER10:
return p9_next_unmasked_interrupt(env);
#endif
default:
return ppc_next_unmasked_interrupt_generic(env);
}
}

/*
* Sets CPU_INTERRUPT_HARD if there is at least one unmasked interrupt to be
* delivered and clears CPU_INTERRUPT_HARD otherwise.
Expand Down Expand Up @@ -2336,8 +2332,21 @@ static void p9_deliver_interrupt(CPUPPCState *env, int interrupt)
}
#endif /* TARGET_PPC64 */

static void ppc_deliver_interrupt_generic(CPUPPCState *env, int interrupt)
static void ppc_deliver_interrupt(CPUPPCState *env, int interrupt)
{
#ifdef TARGET_PPC64
switch (env->excp_model) {
case POWERPC_EXCP_POWER7:
return p7_deliver_interrupt(env, interrupt);
case POWERPC_EXCP_POWER8:
return p8_deliver_interrupt(env, interrupt);
case POWERPC_EXCP_POWER9:
case POWERPC_EXCP_POWER10:
return p9_deliver_interrupt(env, interrupt);
default:
break;
}
#endif
PowerPCCPU *cpu = env_archcpu(env);

switch (interrupt) {
Expand Down Expand Up @@ -2440,26 +2449,6 @@ static void ppc_deliver_interrupt_generic(CPUPPCState *env, int interrupt)
}
}

static void ppc_deliver_interrupt(CPUPPCState *env, int interrupt)
{
switch (env->excp_model) {
#ifdef TARGET_PPC64
case POWERPC_EXCP_POWER7:
p7_deliver_interrupt(env, interrupt);
break;
case POWERPC_EXCP_POWER8:
p8_deliver_interrupt(env, interrupt);
break;
case POWERPC_EXCP_POWER9:
case POWERPC_EXCP_POWER10:
p9_deliver_interrupt(env, interrupt);
break;
#endif
default:
ppc_deliver_interrupt_generic(env, interrupt);
}
}

void ppc_cpu_do_system_reset(CPUState *cs)
{
PowerPCCPU *cpu = POWERPC_CPU(cs);
Expand Down

0 comments on commit 868cb6b

Please sign in to comment.