qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] [PATCH v3] fix WFI/WFE length in syndrome register


From: Stefano Stabellini
Subject: Re: [Qemu-devel] [PATCH v3] fix WFI/WFE length in syndrome register
Date: Wed, 25 Oct 2017 11:51:22 -0700 (PDT)
User-agent: Alpine 2.10 (DEB 1266 2009-07-14)

On Wed, 25 Oct 2017, Peter Maydell wrote:
> On 24 October 2017 at 18:59, Stefano Stabellini <address@hidden> wrote:
> > WFI/E are often, but not always, 4 bytes long. When they are, we need to
> > set ARM_EL_IL_SHIFT in the syndrome register.
> >
> > Pass the instruction length to HELPER(wfi), use it to decrement pc
> > appropriately and to pass an is_16bit flag to syn_wfx, which sets
> > ARM_EL_IL_SHIFT if needed.
> >
> > Set dc->insn in both arm_tr_translate_insn and thumb_tr_translate_insn.
> >
> > Signed-off-by: Stefano Stabellini <address@hidden>
> 
> > diff --git a/target/arm/translate.c b/target/arm/translate.c
> > index 4da1a4c..0a7b67c 100644
> > --- a/target/arm/translate.c
> > +++ b/target/arm/translate.c
> > @@ -12124,6 +12124,7 @@ static void arm_tr_translate_insn(DisasContextBase 
> > *dcbase, CPUState *cpu)
> >      }
> >
> >      insn = arm_ldl_code(env, dc->pc, dc->sctlr_b);
> > +    dc->insn = insn;
> >      dc->pc += 4;
> >      disas_arm_insn(dc, insn);
> >
> > @@ -12191,6 +12192,7 @@ static void 
> > thumb_tr_translate_insn(DisasContextBase *dcbase, CPUState *cpu)
> >      }
> >
> >      insn = arm_lduw_code(env, dc->pc, dc->sctlr_b);
> > +    dc->insn = insn;
> >      is_16bit = thumb_insn_is_16bit(dc, insn);
> >      dc->pc += 2;
> >      if (!is_16bit) {
> 
> This isn't quite in the right place, because it's before we load the
> second half of a 32 bit Thumb insn, so it won't give dc->insn the
> correct full width insn value in that case.
> 
> I'm going to take this patch into target-arm.next and fix it up locally
> rather than making you spin a v4.

Thank you! :-)



reply via email to

[Prev in Thread] Current Thread [Next in Thread]