Message ID | 20220103220746.3916246-2-farosas@linux.ibm.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | target/ppc: powerpc_excp improvements (2/n) | expand |
Hello Fabiano, On 1/3/22 23:07, Fabiano Rosas wrote: > Signed-off-by: Fabiano Rosas <farosas@linux.ibm.com> > --- > target/ppc/excp_helper.c | 63 +++++++++++++++++++++++----------------- > 1 file changed, 36 insertions(+), 27 deletions(-) > > diff --git a/target/ppc/excp_helper.c b/target/ppc/excp_helper.c > index c7e55800af..002a42261b 100644 > --- a/target/ppc/excp_helper.c > +++ b/target/ppc/excp_helper.c > @@ -63,6 +63,41 @@ static inline void dump_hcall(CPUPPCState *env) > env->nip); > } > > +static void ppc_excp_debug_sw_tlb(CPUPPCState *env, int excp) > +{ > +#if defined(DEBUG_SOFTWARE_TLB) I would get rid of the define > + const char *es; > + target_ulong *miss, *cmp; > + int en; > + > + if (!qemu_log_enabled()) { > + return; > + } > + > + if (excp == POWERPC_EXCP_IFTLB) { > + es = "I"; > + en = 'I'; > + miss = &env->spr[SPR_IMISS]; > + cmp = &env->spr[SPR_ICMP]; > + } else { > + if (excp == POWERPC_EXCP_DLTLB) { > + es = "DL"; > + } else { > + es = "DS"; > + } > + en = 'D'; > + miss = &env->spr[SPR_DMISS]; > + cmp = &env->spr[SPR_DCMP]; > + } and simply use : qemu_log_mask(CPU_LOG_MMU, ... Thanks, C. > + qemu_log("6xx %sTLB miss: %cM " TARGET_FMT_lx " %cC " > + TARGET_FMT_lx " H1 " TARGET_FMT_lx " H2 " > + TARGET_FMT_lx " %08x\n", es, en, *miss, en, *cmp, > + env->spr[SPR_HASH1], env->spr[SPR_HASH2], > + env->error_code); > +#endif > +} > + > + > static int powerpc_reset_wakeup(CPUState *cs, CPUPPCState *env, int excp, > target_ulong *msr) > { > @@ -704,34 +739,8 @@ static inline void powerpc_excp(PowerPCCPU *cpu, int excp) > } > /* fall through */ > case POWERPC_EXCP_7x5: > -#if defined(DEBUG_SOFTWARE_TLB) > - if (qemu_log_enabled()) { > - const char *es; > - target_ulong *miss, *cmp; > - int en; > + ppc_excp_debug_sw_tlb(env, excp); > > - if (excp == POWERPC_EXCP_IFTLB) { > - es = "I"; > - en = 'I'; > - miss = &env->spr[SPR_IMISS]; > - cmp = &env->spr[SPR_ICMP]; > - } else { > - if (excp == POWERPC_EXCP_DLTLB) { > - es = "DL"; > - } else { > - es = "DS"; > - } > - en = 'D'; > - miss = &env->spr[SPR_DMISS]; > - cmp = &env->spr[SPR_DCMP]; > - } > - qemu_log("6xx %sTLB miss: %cM " TARGET_FMT_lx " %cC " > - TARGET_FMT_lx " H1 " TARGET_FMT_lx " H2 " > - TARGET_FMT_lx " %08x\n", es, en, *miss, en, *cmp, > - env->spr[SPR_HASH1], env->spr[SPR_HASH2], > - env->error_code); > - } > -#endif > msr |= env->crf[0] << 28; > msr |= env->error_code; /* key, D/I, S/L bits */ > /* Set way using a LRU mechanism */ >
diff --git a/target/ppc/excp_helper.c b/target/ppc/excp_helper.c index c7e55800af..002a42261b 100644 --- a/target/ppc/excp_helper.c +++ b/target/ppc/excp_helper.c @@ -63,6 +63,41 @@ static inline void dump_hcall(CPUPPCState *env) env->nip); } +static void ppc_excp_debug_sw_tlb(CPUPPCState *env, int excp) +{ +#if defined(DEBUG_SOFTWARE_TLB) + const char *es; + target_ulong *miss, *cmp; + int en; + + if (!qemu_log_enabled()) { + return; + } + + if (excp == POWERPC_EXCP_IFTLB) { + es = "I"; + en = 'I'; + miss = &env->spr[SPR_IMISS]; + cmp = &env->spr[SPR_ICMP]; + } else { + if (excp == POWERPC_EXCP_DLTLB) { + es = "DL"; + } else { + es = "DS"; + } + en = 'D'; + miss = &env->spr[SPR_DMISS]; + cmp = &env->spr[SPR_DCMP]; + } + qemu_log("6xx %sTLB miss: %cM " TARGET_FMT_lx " %cC " + TARGET_FMT_lx " H1 " TARGET_FMT_lx " H2 " + TARGET_FMT_lx " %08x\n", es, en, *miss, en, *cmp, + env->spr[SPR_HASH1], env->spr[SPR_HASH2], + env->error_code); +#endif +} + + static int powerpc_reset_wakeup(CPUState *cs, CPUPPCState *env, int excp, target_ulong *msr) { @@ -704,34 +739,8 @@ static inline void powerpc_excp(PowerPCCPU *cpu, int excp) } /* fall through */ case POWERPC_EXCP_7x5: -#if defined(DEBUG_SOFTWARE_TLB) - if (qemu_log_enabled()) { - const char *es; - target_ulong *miss, *cmp; - int en; + ppc_excp_debug_sw_tlb(env, excp); - if (excp == POWERPC_EXCP_IFTLB) { - es = "I"; - en = 'I'; - miss = &env->spr[SPR_IMISS]; - cmp = &env->spr[SPR_ICMP]; - } else { - if (excp == POWERPC_EXCP_DLTLB) { - es = "DL"; - } else { - es = "DS"; - } - en = 'D'; - miss = &env->spr[SPR_DMISS]; - cmp = &env->spr[SPR_DCMP]; - } - qemu_log("6xx %sTLB miss: %cM " TARGET_FMT_lx " %cC " - TARGET_FMT_lx " H1 " TARGET_FMT_lx " H2 " - TARGET_FMT_lx " %08x\n", es, en, *miss, en, *cmp, - env->spr[SPR_HASH1], env->spr[SPR_HASH2], - env->error_code); - } -#endif msr |= env->crf[0] << 28; msr |= env->error_code; /* key, D/I, S/L bits */ /* Set way using a LRU mechanism */
Signed-off-by: Fabiano Rosas <farosas@linux.ibm.com> --- target/ppc/excp_helper.c | 63 +++++++++++++++++++++++----------------- 1 file changed, 36 insertions(+), 27 deletions(-)