David Gibson <da...@gibson.dropbear.id.au> writes: > b) AFAICT this is the *only* thing that looks for the LE bit in > hflags. Given that, and the fact that it would be wrong in most cases, > we should remove it from hflags entirely along with this change. >
I see there is: static void ppc_tr_init_disas_context(DisasContextBase *dcbase, CPUState *cs) { ... ctx->le_mode = !!(env->hflags & (1 << MSR_LE)); ... } And we call hreg_recompute_hflags in some places: - powerpc_excp (target/ppc/excp_helper.c) Called from TCG do_interrupt - ppc_cpu_reset (target/ppc/translate_init.inc.c) Called from spapr_machine_reset - hreg_store_msr (target/ppc/helper_regs.h) This is used for migration and for do_rfi, store_msr - h_cede (hw/ppc/spapr_hcall.c) QEMU-side H_CEDE hypercall implementation It looks like the hflags MSR_LE is being updated correctly with TCG. But with KVM we only touch it on system_reset (and possibly h_cede? I don't know if it is QEMU who handles it). So I would let hflags be. ... Actually, I don't really know the purpose of hflags. It comes from: commit 3f3373166227b13e762e20d2fb51eadfa6a2d653 Author: Fabrice Bellard <fabr...@bellard.org> Date: Wed Aug 20 23:02:09 2003 +0000 pop ss, mov ss, x and sti disable irqs for the next instruction - began dispatch optimization by adding new x86 cpu 'hidden' flags git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@372 c046a42c-6fe2-441c-8c8c-71466251a162 Could any one clarify that? Thanks >> --- >> target/ppc/translate_init.inc.c | 2 +- >> 1 file changed, 1 insertion(+), 1 deletion(-) >> >> diff --git a/target/ppc/translate_init.inc.c >> b/target/ppc/translate_init.inc.c >> index d33d65dff7..a0b384da9e 100644 >> --- a/target/ppc/translate_init.inc.c >> +++ b/target/ppc/translate_init.inc.c >> @@ -10830,7 +10830,7 @@ static void ppc_disas_set_info(CPUState *cs, >> disassemble_info *info) >> PowerPCCPU *cpu = POWERPC_CPU(cs); >> CPUPPCState *env = &cpu->env; >> >> - if ((env->hflags >> MSR_LE) & 1) { >> + if (msr_le) { >> info->endian = BFD_ENDIAN_LITTLE; >> } >> info->mach = env->bfd_mach;