[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH 3/4] target/m68k: use M68K_FEATURE_MOVEFROMSR_PRIV feature for mo
From: |
Mark Cave-Ayland |
Subject: |
[PATCH 3/4] target/m68k: use M68K_FEATURE_MOVEFROMSR_PRIV feature for move_from_sr privilege check |
Date: |
Sat, 17 Sep 2022 12:25:14 +0100 |
Now that M68K_FEATURE_M68000 has been renamed to M68K_FEATURE_M68K it is easier
to see that the privilege exception check is wrong: it is currently only
generated
for ColdFire CPUs when in fact it should also be generated for Motorola CPUs
from
the 68010 onwards.
Introduce a new M68K_FEATURE_MOVEFROMSR_PRIV feature which is set for all non-
Motorola CPUs, and for all Motorola CPUs from the 68010 onwards and use it to
determine whether a privilege exception should be generated for the MOVE-from-SR
instruction.
Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk>
---
target/m68k/cpu.c | 5 +++++
target/m68k/cpu.h | 2 ++
target/m68k/translate.c | 2 +-
3 files changed, 8 insertions(+), 1 deletion(-)
diff --git a/target/m68k/cpu.c b/target/m68k/cpu.c
index 7b4797e2f1..cc5311a4ac 100644
--- a/target/m68k/cpu.c
+++ b/target/m68k/cpu.c
@@ -102,6 +102,7 @@ static void m5206_cpu_initfn(Object *obj)
CPUM68KState *env = &cpu->env;
m68k_set_feature(env, M68K_FEATURE_CF_ISA_A);
+ m68k_set_feature(env, M68K_FEATURE_MOVEFROMSR_PRIV);
}
/* Base feature set, including isns. for m68k family */
@@ -129,6 +130,7 @@ static void m68010_cpu_initfn(Object *obj)
m68k_set_feature(env, M68K_FEATURE_RTD);
m68k_set_feature(env, M68K_FEATURE_BKPT);
m68k_set_feature(env, M68K_FEATURE_MOVEC);
+ m68k_set_feature(env, M68K_FEATURE_MOVEFROMSR_PRIV);
}
/*
@@ -241,6 +243,7 @@ static void m5208_cpu_initfn(Object *obj)
m68k_set_feature(env, M68K_FEATURE_BRAL);
m68k_set_feature(env, M68K_FEATURE_CF_EMAC);
m68k_set_feature(env, M68K_FEATURE_USP);
+ m68k_set_feature(env, M68K_FEATURE_MOVEFROMSR_PRIV);
}
static void cfv4e_cpu_initfn(Object *obj)
@@ -254,6 +257,7 @@ static void cfv4e_cpu_initfn(Object *obj)
m68k_set_feature(env, M68K_FEATURE_CF_FPU);
m68k_set_feature(env, M68K_FEATURE_CF_EMAC);
m68k_set_feature(env, M68K_FEATURE_USP);
+ m68k_set_feature(env, M68K_FEATURE_MOVEFROMSR_PRIV);
}
static void any_cpu_initfn(Object *obj)
@@ -275,6 +279,7 @@ static void any_cpu_initfn(Object *obj)
m68k_set_feature(env, M68K_FEATURE_USP);
m68k_set_feature(env, M68K_FEATURE_EXT_FULL);
m68k_set_feature(env, M68K_FEATURE_WORD_INDEX);
+ m68k_set_feature(env, M68K_FEATURE_MOVEFROMSR_PRIV);
}
static void m68k_cpu_realizefn(DeviceState *dev, Error **errp)
diff --git a/target/m68k/cpu.h b/target/m68k/cpu.h
index d3384e5d98..57936ea780 100644
--- a/target/m68k/cpu.h
+++ b/target/m68k/cpu.h
@@ -537,6 +537,8 @@ enum m68k_features {
M68K_FEATURE_UNALIGNED_DATA,
/* TRAPcc insn. (680[2346]0, and CPU32) */
M68K_FEATURE_TRAPCC,
+ /* MOVE from SR privileged (from 68010) */
+ M68K_FEATURE_MOVEFROMSR_PRIV,
};
static inline uint64_t m68k_feature(CPUM68KState *env, int feature)
diff --git a/target/m68k/translate.c b/target/m68k/translate.c
index fad8af8f83..be5561e1e9 100644
--- a/target/m68k/translate.c
+++ b/target/m68k/translate.c
@@ -4598,7 +4598,7 @@ DISAS_INSN(move_from_sr)
{
TCGv sr;
- if (IS_USER(s) && !m68k_feature(env, M68K_FEATURE_M68K)) {
+ if (IS_USER(s) && m68k_feature(env, M68K_FEATURE_MOVEFROMSR_PRIV)) {
gen_exception(s, s->base.pc_next, EXCP_PRIVILEGE);
return;
}
--
2.30.2
- Re: [PATCH 1/4] target/m68k: rename M68K_FEATURE_M68000 to M68K_FEATURE_M68K, (continued)
- [PATCH 2/4] target/m68k: increase size of m68k CPU features from uint32_t to uint64_t, Mark Cave-Ayland, 2022/09/17
- Re: [PATCH 2/4] target/m68k: increase size of m68k CPU features from uint32_t to uint64_t, BALATON Zoltan, 2022/09/17
- Re: [PATCH 2/4] target/m68k: increase size of m68k CPU features from uint32_t to uint64_t, Philippe Mathieu-Daudé, 2022/09/17
- Re: [PATCH 2/4] target/m68k: increase size of m68k CPU features from uint32_t to uint64_t, Mark Cave-Ayland, 2022/09/20
- Re: [PATCH 2/4] target/m68k: increase size of m68k CPU features from uint32_t to uint64_t, Philippe Mathieu-Daudé, 2022/09/20
- Re: [PATCH 2/4] target/m68k: increase size of m68k CPU features from uint32_t to uint64_t, BALATON Zoltan, 2022/09/20
- Re: [PATCH 2/4] target/m68k: increase size of m68k CPU features from uint32_t to uint64_t, Laurent Vivier, 2022/09/21
- Re: [PATCH 2/4] target/m68k: increase size of m68k CPU features from uint32_t to uint64_t, Mark Cave-Ayland, 2022/09/20
[PATCH 3/4] target/m68k: use M68K_FEATURE_MOVEFROMSR_PRIV feature for move_from_sr privilege check,
Mark Cave-Ayland <=
[PATCH 4/4] target/m68k: always call gen_exit_tb() after writes to SR, Mark Cave-Ayland, 2022/09/17
Re: [PATCH 4/4] target/m68k: always call gen_exit_tb() after writes to SR, Richard Henderson, 2022/09/19
Re: [PATCH 4/4] target/m68k: always call gen_exit_tb() after writes to SR, Laurent Vivier, 2022/09/21