On Thu, 21 Nov 2019 at 01:44, Jean-Hugues DeschĂȘnes <jean-hugues.desche...@ossiaco.com> wrote: > > According to the PushStack() pseudocode in the armv7m RM, > bit 4 of the LR should be set to NOT(CONTROL.PFCA) when > an FPU is present. Current implementation is doing it for > armv8, but not for armv7. This patch makes the existing > logic applicable to both code paths. > > Signed-off-by: Jean-Hugues Deschenes <jean-hugues.desche...@ossiaco.com> > --- > target/arm/m_helper.c | 7 +++---- > 1 file changed, 3 insertions(+), 4 deletions(-) > > diff --git a/target/arm/m_helper.c b/target/arm/m_helper.c > index f2512e448e..595c49fe2a 100644 > --- a/target/arm/m_helper.c > +++ b/target/arm/m_helper.c > @@ -2173,19 +2173,18 @@ void arm_v7m_cpu_do_interrupt(CPUState *cs) > if (env->v7m.secure) { > lr |= R_V7M_EXCRET_S_MASK; > } > - if (!(env->v7m.control[M_REG_S] & R_V7M_CONTROL_FPCA_MASK)) { > - lr |= R_V7M_EXCRET_FTYPE_MASK; > - } > } else { > lr = R_V7M_EXCRET_RES1_MASK | > R_V7M_EXCRET_S_MASK | > R_V7M_EXCRET_DCRS_MASK | > - R_V7M_EXCRET_FTYPE_MASK | > R_V7M_EXCRET_ES_MASK; > if (env->v7m.control[M_REG_NS] & R_V7M_CONTROL_SPSEL_MASK) { > lr |= R_V7M_EXCRET_SPSEL_MASK; > } > } > + if (!(env->v7m.control[M_REG_S] & R_V7M_CONTROL_FPCA_MASK)) { > + lr |= R_V7M_EXCRET_FTYPE_MASK; > + } > if (!arm_v7m_is_handler_mode(env)) { > lr |= R_V7M_EXCRET_MODE_MASK; > } > -- > 2.17.1
Thanks, applied to my target-arm.next branch for 4.2. -- PMM