[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH v2 40/68] target/arm: Convert SG
From: |
Richard Henderson |
Subject: |
[Qemu-devel] [PATCH v2 40/68] target/arm: Convert SG |
Date: |
Mon, 19 Aug 2019 14:37:27 -0700 |
Signed-off-by: Richard Henderson <address@hidden>
---
target/arm/translate.c | 51 ++++++++++++++++++++++++------------------
target/arm/t32.decode | 5 ++++-
2 files changed, 33 insertions(+), 23 deletions(-)
diff --git a/target/arm/translate.c b/target/arm/translate.c
index 7c05e7006e..9a8864e8ff 100644
--- a/target/arm/translate.c
+++ b/target/arm/translate.c
@@ -8426,6 +8426,34 @@ static bool trans_SMC(DisasContext *s, arg_SMC *a)
return true;
}
+static bool trans_SG(DisasContext *s, arg_SG *a)
+{
+ if (!arm_dc_feature(s, ARM_FEATURE_M) ||
+ !arm_dc_feature(s, ARM_FEATURE_V8)) {
+ return false;
+ }
+ /*
+ * SG (v8M only)
+ * The bulk of the behaviour for this instruction is implemented
+ * in v7m_handle_execute_nsc(), which deals with the insn when
+ * it is executed by a CPU in non-secure state from memory
+ * which is Secure & NonSecure-Callable.
+ * Here we only need to handle the remaining cases:
+ * * in NS memory (including the "security extension not
+ * implemented" case) : NOP
+ * * in S memory but CPU already secure (clear IT bits)
+ * We know that the attribute for the memory this insn is
+ * in must match the current CPU state, because otherwise
+ * get_phys_addr_pmsav8 would have generated an exception.
+ */
+ if (s->v8m_secure) {
+ /* Like the IT insn, we don't need to generate any code */
+ s->condexec_cond = 0;
+ s->condexec_mask = 0;
+ }
+ return true;
+}
+
/*
* Load/store register index
*/
@@ -10437,28 +10465,7 @@ static void disas_thumb2_insn(DisasContext *s,
uint32_t insn)
* - load/store doubleword, load/store exclusive, ldacq/strel,
* table branch, TT.
*/
- if (insn == 0xe97fe97f && arm_dc_feature(s, ARM_FEATURE_M) &&
- arm_dc_feature(s, ARM_FEATURE_V8)) {
- /* 0b1110_1001_0111_1111_1110_1001_0111_111
- * - SG (v8M only)
- * The bulk of the behaviour for this instruction is
implemented
- * in v7m_handle_execute_nsc(), which deals with the insn when
- * it is executed by a CPU in non-secure state from memory
- * which is Secure & NonSecure-Callable.
- * Here we only need to handle the remaining cases:
- * * in NS memory (including the "security extension not
- * implemented" case) : NOP
- * * in S memory but CPU already secure (clear IT bits)
- * We know that the attribute for the memory this insn is
- * in must match the current CPU state, because otherwise
- * get_phys_addr_pmsav8 would have generated an exception.
- */
- if (s->v8m_secure) {
- /* Like the IT insn, we don't need to generate any code */
- s->condexec_cond = 0;
- s->condexec_mask = 0;
- }
- } else if (insn & 0x01200000) {
+ if (insn & 0x01200000) {
/* load/store dual, in decodetree */
goto illegal_op;
} else if ((insn & (1 << 23)) == 0) {
diff --git a/target/arm/t32.decode b/target/arm/t32.decode
index 0cc0808c05..ce46650446 100644
--- a/target/arm/t32.decode
+++ b/target/arm/t32.decode
@@ -485,7 +485,10 @@ STRD_ri_t32 1110 1001 .100 .... .... .... ........
@ldstd_ri8 w=0 p=1
LDRD_ri_t32 1110 1001 .101 .... .... .... ........ @ldstd_ri8 w=0 p=1
STRD_ri_t32 1110 1001 .110 .... .... .... ........ @ldstd_ri8 w=1 p=1
-LDRD_ri_t32 1110 1001 .111 .... .... .... ........ @ldstd_ri8 w=1 p=1
+{
+ SG 1110 1001 0111 1111 1110 1001 01111111
+ LDRD_ri_t32 1110 1001 .111 .... .... .... ........ @ldstd_ri8 w=1 p=1
+}
# Load/Store Exclusive, Load-Acquire/Store-Release, and Table Branch
--
2.17.1
- [Qemu-devel] [PATCH v2 34/68] target/arm: Convert Clear-Exclusive, Barriers, (continued)
- [Qemu-devel] [PATCH v2 34/68] target/arm: Convert Clear-Exclusive, Barriers, Richard Henderson, 2019/08/19
- [Qemu-devel] [PATCH v2 37/68] target/arm: Convert PLI, PLD, PLDW, Richard Henderson, 2019/08/19
- [Qemu-devel] [PATCH v2 38/68] target/arm: Convert Unallocated memory hint, Richard Henderson, 2019/08/19
- [Qemu-devel] [PATCH v2 41/68] target/arm: Convert TT, Richard Henderson, 2019/08/19
- [Qemu-devel] [PATCH v2 39/68] target/arm: Convert Table Branch, Richard Henderson, 2019/08/19
- [Qemu-devel] [PATCH v2 40/68] target/arm: Convert SG,
Richard Henderson <=
- [Qemu-devel] [PATCH v2 44/68] target/arm: Add skeleton for T16 decodetree, Richard Henderson, 2019/08/19
- [Qemu-devel] [PATCH v2 42/68] target/arm: Simplify disas_thumb2_insn, Richard Henderson, 2019/08/19
- [Qemu-devel] [PATCH v2 45/68] target/arm: Convert T16 data-processing (two low regs), Richard Henderson, 2019/08/19
- [Qemu-devel] [PATCH v2 46/68] target/arm: Convert T16 load/store (register offset), Richard Henderson, 2019/08/19
- [Qemu-devel] [PATCH v2 43/68] target/arm: Simplify disas_arm_insn, Richard Henderson, 2019/08/19