On 8/27/19 4:10 AM, Peter Maydell wrote: > On Tue, 27 Aug 2019 at 11:46, Peter Maydell <peter.mayd...@linaro.org> wrote: >> ...OK, not this specific function, as I just noticed it's the _a32 >> one, but trans_STREXB(), trans_STREXH(), etc are wrong. > > I did a quick grep through for places checking the 6K condition, > and I think these are the only ones that need changing: > > diff --git a/target/arm/translate.c b/target/arm/translate.c > index b4d53f3d37f..58e50f2d808 100644 > --- a/target/arm/translate.c > +++ b/target/arm/translate.c > @@ -8874,7 +8874,7 @@ static bool trans_STREXD_t32(DisasContext *s, > arg_STREX *a) > > static bool trans_STREXB(DisasContext *s, arg_STREX *a) > { > - if (!ENABLE_ARCH_6K) { > + if (!ENABLE_ARCH_6K && !arm_dc_feature(s, ARM_FEATURE_M)) {
Looking again, I think the correct test is if (s->thumb ? !ENABLE_ARCH_7 : !ENABLE_ARCH_6K) for all of these. r~