diff mbox series

[1/4] arm: HVC and SMC encodings don't exist for M profile

Message ID 1487616072-9226-2-git-send-email-peter.maydell@linaro.org
State Superseded
Headers show
Series arm: Fix M profile MSR/MRS | expand

Commit Message

Peter Maydell Feb. 20, 2017, 6:41 p.m. UTC
M profile doesn't have the HVC or SMC encodings, so make them always
UNDEF rather than generating calls to helper functions that assume
A/R profile.

Signed-off-by: Peter Maydell <peter.maydell@linaro.org>

---
 target/arm/translate.c | 3 +++
 1 file changed, 3 insertions(+)

-- 
2.7.4

Comments

Alex Bennée March 20, 2017, 10:48 a.m. UTC | #1
Peter Maydell <peter.maydell@linaro.org> writes:

> M profile doesn't have the HVC or SMC encodings, so make them always

> UNDEF rather than generating calls to helper functions that assume

> A/R profile.

>

> Signed-off-by: Peter Maydell <peter.maydell@linaro.org>


Reviewed-by: Alex Bennée <alex.bennee@linaro.org>


> ---

>  target/arm/translate.c | 3 +++

>  1 file changed, 3 insertions(+)

>

> diff --git a/target/arm/translate.c b/target/arm/translate.c

> index 9fded03..895b399 100644

> --- a/target/arm/translate.c

> +++ b/target/arm/translate.c

> @@ -10365,6 +10365,9 @@ static int disas_thumb2_insn(CPUARMState *env, DisasContext *s, uint16_t insn_hw

>                      goto illegal_op;

>

>                  if (insn & (1 << 26)) {

> +                    if (arm_dc_feature(s, ARM_FEATURE_M)) {

> +                        goto illegal_op;

> +                    }

>                      if (!(insn & (1 << 20))) {

>                          /* Hypervisor call (v7) */

>                          int imm16 = extract32(insn, 16, 4) << 12



--
Alex Bennée
diff mbox series

Patch

diff --git a/target/arm/translate.c b/target/arm/translate.c
index 9fded03..895b399 100644
--- a/target/arm/translate.c
+++ b/target/arm/translate.c
@@ -10365,6 +10365,9 @@  static int disas_thumb2_insn(CPUARMState *env, DisasContext *s, uint16_t insn_hw
                     goto illegal_op;
 
                 if (insn & (1 << 26)) {
+                    if (arm_dc_feature(s, ARM_FEATURE_M)) {
+                        goto illegal_op;
+                    }
                     if (!(insn & (1 << 20))) {
                         /* Hypervisor call (v7) */
                         int imm16 = extract32(insn, 16, 4) << 12