[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [PULL 00/20] ppc-for-6.0 queue 20210310
From: |
Ivan Warren |
Subject: |
Re: [PULL 00/20] ppc-for-6.0 queue 20210310 |
Date: |
Thu, 11 Mar 2021 04:22:44 +0100 |
User-agent: |
Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:78.0) Gecko/20100101 Thunderbird/78.8.0 |
On 3/11/2021 2:47 AM, David Gibson wrote:
Sorry, I've forgotten this issue. If you had a patch, can you resend
it please.
Not mine.. (I reported it, but can't remember who sent it)...
diff --git a/target/ppc/cpu.h b/target/ppc/cpu.h
index 2609e4082e..4a05e4e544 100644
--- a/target/ppc/cpu.h
+++ b/target/ppc/cpu.h
@@ -2396,8 +2396,8 @@ static inline void
cpu_get_tb_cpu_state(CPUPPCState *env, target_ulong *pc,
target_ulong *cs_base,
uint32_t *flags)
{
*pc = env->nip;
- *cs_base = 0;
- *flags = env->hflags;
+ *cs_base = env->hflags;
+ *flags = 0;
}
void QEMU_NORETURN raise_exception(CPUPPCState *env, uint32_t exception);
diff --git a/target/ppc/translate.c b/target/ppc/translate.c
index 0984ce637b..1eb2e1b0c6 100644
--- a/target/ppc/translate.c
+++ b/target/ppc/translate.c
@@ -7879,47 +7879,37 @@ static void
ppc_tr_init_disas_context(DisasContextBase *dcbase, CPUState *cs)
{
DisasContext *ctx = container_of(dcbase, DisasContext, base);
CPUPPCState *env = cs->env_ptr;
+ target_ulong hflags = ctx->base.tb->cs_base;
int bound;
ctx->exception = POWERPC_EXCP_NONE;
ctx->spr_cb = env->spr_cb;
- ctx->pr = msr_pr;
+ ctx->pr = (hflags >> MSR_PR) & 1;
ctx->mem_idx = env->dmmu_idx;
- ctx->dr = msr_dr;
-#if !defined(CONFIG_USER_ONLY)
- ctx->hv = msr_hv || !env->has_hv_mode;
+ ctx->dr = (hflags >> MSR_DR) & 1;
+#if defined(TARGET_PPC64) && !defined(CONFIG_USER_ONLY)
+ ctx->hv = (hflags >> MSR_HV) & 1;
#endif
ctx->insns_flags = env->insns_flags;
ctx->insns_flags2 = env->insns_flags2;
ctx->access_type = -1;
ctx->need_access_type = !mmu_is_64bit(env->mmu_model);
- ctx->le_mode = !!(env->hflags & (1 << MSR_LE));
+ ctx->le_mode = (hflags >> MSR_LE) & 1;
ctx->default_tcg_memop_mask = ctx->le_mode ? MO_LE : MO_BE;
ctx->flags = env->flags;
#if defined(TARGET_PPC64)
- ctx->sf_mode = msr_is_64bit(env, env->msr);
+ ctx->sf_mode = (hflags >> MSR_SF) & 1;
ctx->has_cfar = !!(env->flags & POWERPC_FLAG_CFAR);
#endif
ctx->lazy_tlb_flush = env->mmu_model == POWERPC_MMU_32B
|| env->mmu_model == POWERPC_MMU_601
|| env->mmu_model & POWERPC_MMU_64;
- ctx->fpu_enabled = !!msr_fp;
- if ((env->flags & POWERPC_FLAG_SPE) && msr_spe) {
- ctx->spe_enabled = !!msr_spe;
- } else {
- ctx->spe_enabled = false;
- }
- if ((env->flags & POWERPC_FLAG_VRE) && msr_vr) {
- ctx->altivec_enabled = !!msr_vr;
- } else {
- ctx->altivec_enabled = false;
- }
- if ((env->flags & POWERPC_FLAG_VSX) && msr_vsx) {
- ctx->vsx_enabled = !!msr_vsx;
- } else {
- ctx->vsx_enabled = false;
- }
+ ctx->fpu_enabled = (hflags >> MSR_FP) & 1;
+ ctx->spe_enabled = (hflags >> MSR_SPE) & 1;
+ ctx->altivec_enabled = (hflags >> MSR_VR) & 1;
+ ctx->vsx_enabled = (hflags >> MSR_VSX) & 1;
+ /* FIXME: This needs to be stored in env->hflags_nmsr. */
if ((env->flags & POWERPC_FLAG_SCV)
&& (env->spr[SPR_FSCR] & (1ull << FSCR_SCV))) {
ctx->scv_enabled = true;
@@ -7927,23 +7917,21 @@ static void
ppc_tr_init_disas_context(DisasContextBase *dcbase, CPUState *cs)
ctx->scv_enabled = false;
}
#if defined(TARGET_PPC64)
- if ((env->flags & POWERPC_FLAG_TM) && msr_tm) {
- ctx->tm_enabled = !!msr_tm;
- } else {
- ctx->tm_enabled = false;
- }
+ ctx->tm_enabled = (hflags >> MSR_TM) & 1;
#endif
+ /* FIXME: This needs to be stored in env->hflags_nmsr. */
ctx->gtse = !!(env->spr[SPR_LPCR] & LPCR_GTSE);
- if ((env->flags & POWERPC_FLAG_SE) && msr_se) {
- ctx->singlestep_enabled = CPU_SINGLE_STEP;
- } else {
- ctx->singlestep_enabled = 0;
- }
- if ((env->flags & POWERPC_FLAG_BE) && msr_be) {
- ctx->singlestep_enabled |= CPU_BRANCH_STEP;
- }
- if ((env->flags & POWERPC_FLAG_DE) && msr_de) {
+
+ ctx->singlestep_enabled = ((hflags >> MSR_SE) & 1 ? CPU_SINGLE_STEP
: 0)
+ | ((hflags >> MSR_BE) & 1 ? CPU_BRANCH_STEP
: 0);
+
+ if ((hflags >> MSR_DE) & 1) {
ctx->singlestep_enabled = 0;
+ /*
+ * FIXME: This needs to be stored in env->hflags_nmsr,
+ * probably overlapping MSR_SE/MSR_BE like we do for
+ * MSR_LE and the ppc 601.
+ */
target_ulong dbcr0 = env->spr[SPR_BOOKE_DBCR0];
if (dbcr0 & DBCR0_ICMP) {
ctx->singlestep_enabled |= CPU_SINGLE_STEP;
@@ -7956,10 +7944,6 @@ static void
ppc_tr_init_disas_context(DisasContextBase *dcbase, CPUState *cs)
if (unlikely(ctx->base.singlestep_enabled)) {
ctx->singlestep_enabled |= GDBSTUB_SINGLE_STEP;
}
smime.p7s
Description: S/MIME Cryptographic Signature
- [PULL 08/20] docs/system: Extend PPC section, (continued)
- [PULL 08/20] docs/system: Extend PPC section, David Gibson, 2021/03/09
- [PULL 19/20] spapr.c: remove duplicated assert in spapr_memory_unplug_request(), David Gibson, 2021/03/09
- [PULL 16/20] spapr_pci.c: add 'unplug already in progress' message for PCI unplug, David Gibson, 2021/03/09
- [PULL 20/20] spapr.c: send QAPI event when memory hotunplug fails, David Gibson, 2021/03/09
- [PULL 18/20] target/ppc: fix icount support on Book-e vms accessing SPRs, David Gibson, 2021/03/09
- Re: [PULL 00/20] ppc-for-6.0 queue 20210310, Bin Meng, 2021/03/09
- Re: [PULL 00/20] ppc-for-6.0 queue 20210310, Ivan Warren, 2021/03/10
Re: [PULL 00/20] ppc-for-6.0 queue 20210310, Peter Maydell, 2021/03/12