On 5 October 2017 at 19:56, Richard Henderson <richard.hender...@linaro.org> wrote: > On 09/22/2017 11:00 AM, Peter Maydell wrote: >> +void HELPER(v7m_blxns)(CPUARMState *env, uint32_t dest) >> +{ > ... >> + if (dest & 1) { >> + /* target is Secure, so this is just a normal BLX, >> + * except that the low bit doesn't indicate Thumb/not. >> + */ >> + env->regs[14] = nextinst; >> + env->thumb = 1; >> + env->regs[15] = dest & ~1; >> + return; >> + } > ... >> + switch_v7m_security_state(env, dest & 1); >> + env->thumb = 1; >> + env->regs[15] = dest & ~1; > > dest & 1 is known to be 0.
Yes. I liked the symmetry with the tail end of the v7m_bxns helper, which is conceptually doing the same thing, and assumed the compiler would be smart enough not to generate unnecessary code. >> +static inline void gen_blxns(DisasContext *s, int rm) >> +{ >> + TCGv_i32 var = load_reg(s, rm); >> + >> + /* We don't need to sync condexec state, for the same reason as blxns. > > s/blxns/bxns/ ? Yes. thanks -- PMM