From: Peter Maydell <[email protected]> The IT insn is introduced for A-profile starting in v6T2; for M-profile it is present when the Main Extension is implemented (which includes v7M and excludes v6M). We were missing the feature-check, so fail to UNDEF on earlier cores.
Add the missing check. Cc: [email protected] Fixes: 9ee6e8bb853bde ("ARMv7 support.") Signed-off-by: Peter Maydell <[email protected]> Reviewed-by: Richard Henderson <[email protected]> Message-id: [email protected] (cherry picked from commit 50d6757147dbc74b1b904535afaf986f72e942ae) Signed-off-by: Michael Tokarev <[email protected]> diff --git a/target/arm/tcg/translate.c b/target/arm/tcg/translate.c index 752f80b519b..7097077880e 100644 --- a/target/arm/tcg/translate.c +++ b/target/arm/tcg/translate.c @@ -1,3 +1,4 @@ + /* * ARM translation * @@ -7246,6 +7247,16 @@ static bool trans_IT(DisasContext *s, arg_IT *a) { int cond_mask = a->cond_mask; + /* + * IT insn introduced in v6T2 for A-profile; it is only present + * on M-profile if the Main Extension is implemented. + */ + if (!(arm_dc_feature(s, ARM_FEATURE_M) + ? arm_dc_feature(s, ARM_FEATURE_M_MAIN) + : arm_dc_feature(s, ARM_FEATURE_THUMB2))) { + return false; + } + /* * No actual code generated for this insn, just setup state. * -- 2.47.3
