From: "Edgar E. Iglesias" <edgar.iglesias@gmail.com>
To: qemu-devel@nongnu.org, peter.maydell@linaro.org
Cc: edgar.iglesias@xilinx.com, serge.fdrv@gmail.com,
qemu-arm@nongnu.org, alex.bennee@linaro.org, rth@twiddle.net
Subject: [Qemu-devel] [PATCH v1 7/9] target-arm: Add the ARMInsnSyndrome type
Date: Fri, 12 Feb 2016 15:34:00 +0100 [thread overview]
Message-ID: <1455287642-28166-8-git-send-email-edgar.iglesias@gmail.com> (raw)
In-Reply-To: <1455287642-28166-1-git-send-email-edgar.iglesias@gmail.com>
From: "Edgar E. Iglesias" <edgar.iglesias@xilinx.com>
Add the ARMInsnSyndrome type including helper functions to
encode and decode it into an u32. This is in preparation for
Instruction Syndrome generation for Data Aborts.
No functional change.
Signed-off-by: Edgar E. Iglesias <edgar.iglesias@xilinx.com>
---
target-arm/cpu.h | 22 +++++++++++++++++++
target-arm/translate.h | 57 ++++++++++++++++++++++++++++++++++++++++++++++++++
2 files changed, 79 insertions(+)
diff --git a/target-arm/cpu.h b/target-arm/cpu.h
index 5137632..a00a121 100644
--- a/target-arm/cpu.h
+++ b/target-arm/cpu.h
@@ -123,6 +123,28 @@ typedef struct {
uint32_t base_mask;
} TCR;
+/* Holds the state needed to create an instruction syndrome. */
+typedef struct ARMInsnSyndrome {
+ /* Data Abort section. */
+ struct {
+ bool valid;
+ unsigned int sas;
+ bool sse;
+ unsigned int srt;
+ bool sf;
+ bool ar;
+ } dabt;
+
+ /* SWStep section. */
+ struct {
+ /* True if the insn just emitted was a load-exclusive instruction
+ * (necessary for syndrome information for single step exceptions),
+ * ie A64 LDX*, LDAX*, A32/T32 LDREX*, LDAEX*.
+ */
+ bool ex;
+ } swstep;
+} ARMInsnSyndrome;
+
typedef struct CPUARMState {
/* Regs for current mode. */
uint32_t regs[16];
diff --git a/target-arm/translate.h b/target-arm/translate.h
index 53ef971..a94e17e 100644
--- a/target-arm/translate.h
+++ b/target-arm/translate.h
@@ -151,4 +151,61 @@ void arm_free_cc(DisasCompare *cmp);
void arm_jump_cc(DisasCompare *cmp, TCGLabel *label);
void arm_gen_test_cc(int cc, TCGLabel *label);
+
+/* The following describes the packing and unpacking of the Data Abort
+ * section of an ARMInsnSyndrome from/into an u32.
+ */
+
+/* Field widths. */
+#define ISYN_WIDTH_valid 1
+#define ISYN_WIDTH_sas 2
+#define ISYN_WIDTH_sse 1
+#define ISYN_WIDTH_srt 5
+#define ISYN_WIDTH_sf 1
+#define ISYN_WIDTH_ar 1
+
+/* We use 64bit deposit to allow for overflow checking. */
+#define ISYN_SHIFT_IN(val, isyn, field) \
+ { \
+ unsigned int width = xglue(ISYN_WIDTH_, field); \
+ val <<= width; \
+ val = deposit64(val, 0, width, (isyn).field); \
+ } while (0)
+
+#define ISYN_SHIFT_OUT(val, isyn, field) \
+ { \
+ unsigned int width = xglue(ISYN_WIDTH_, field); \
+ (isyn).field = extract32(val, 0, width); \
+ val >>= width; \
+ } while (0)
+
+static inline uint32_t arm_encode_dabt_isyn_u32(ARMInsnSyndrome *isyn)
+{
+ uint64_t v = 0;
+ uint32_t v32;
+
+ ISYN_SHIFT_IN(v, isyn->dabt, valid);
+ ISYN_SHIFT_IN(v, isyn->dabt, sas);
+ ISYN_SHIFT_IN(v, isyn->dabt, sse);
+ ISYN_SHIFT_IN(v, isyn->dabt, srt);
+ ISYN_SHIFT_IN(v, isyn->dabt, sf);
+ ISYN_SHIFT_IN(v, isyn->dabt, ar);
+ /* Check for overflows. */
+ v32 = v;
+ assert(v32 == v);
+ return v32;
+}
+
+static inline void arm_decode_dabt_isyn_u32(ARMInsnSyndrome *isyn, uint32_t v)
+{
+ /* The fields must be shifted out in reverse order. */
+ ISYN_SHIFT_OUT(v, isyn->dabt, ar);
+ ISYN_SHIFT_OUT(v, isyn->dabt, sf);
+ ISYN_SHIFT_OUT(v, isyn->dabt, srt);
+ ISYN_SHIFT_OUT(v, isyn->dabt, sse);
+ ISYN_SHIFT_OUT(v, isyn->dabt, sas);
+ ISYN_SHIFT_OUT(v, isyn->dabt, valid);
+ assert(v == 0);
+}
+
#endif /* TARGET_ARM_TRANSLATE_H */
--
1.9.1
next prev parent reply other threads:[~2016-02-12 14:37 UTC|newest]
Thread overview: 19+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-02-12 14:33 [Qemu-devel] [PATCH v1 0/9] arm: Steps towards EL2 support round 6 Edgar E. Iglesias
2016-02-12 14:33 ` [Qemu-devel] [PATCH v1 1/9] tcg: Add tcg_set_insn_param Edgar E. Iglesias
2016-02-12 14:33 ` [Qemu-devel] [PATCH v1 2/9] gen-icount: Use tcg_set_insn_param Edgar E. Iglesias
2016-02-12 14:33 ` [Qemu-devel] [PATCH v1 3/9] target-arm: Add the thumb/IL flag to syn_data_abort Edgar E. Iglesias
2016-02-16 19:04 ` Sergey Fedorov
2016-02-18 9:48 ` Edgar E. Iglesias
2016-02-12 14:33 ` [Qemu-devel] [PATCH v1 4/9] target-arm: Add more fields to the data abort syndrome generator Edgar E. Iglesias
2016-02-12 14:33 ` [Qemu-devel] [PATCH v1 5/9] target-arm/translate-a64.c: Use extract32 in disas_ldst_reg_imm9 Edgar E. Iglesias
2016-02-16 21:09 ` Sergey Fedorov
2016-02-12 14:33 ` [Qemu-devel] [PATCH v1 6/9] target-arm/translate-a64.c: Unify some of the ldst_reg decoding Edgar E. Iglesias
2016-02-16 21:11 ` Sergey Fedorov
2016-02-12 14:34 ` Edgar E. Iglesias [this message]
2016-02-16 19:11 ` [Qemu-devel] [PATCH v1 7/9] target-arm: Add the ARMInsnSyndrome type Peter Maydell
2016-02-12 14:34 ` [Qemu-devel] [PATCH v1 8/9] target-arm: A64: Create Instruction Syndromes for Data Aborts Edgar E. Iglesias
2016-02-16 19:13 ` Peter Maydell
2016-02-18 9:56 ` Edgar E. Iglesias
2016-02-18 11:42 ` Peter Maydell
2016-02-19 13:12 ` Edgar E. Iglesias
2016-02-12 14:34 ` [Qemu-devel] [PATCH v1 9/9] target-arm: Use isyn.swstep.ex to hold the is_ldex state Edgar E. Iglesias
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1455287642-28166-8-git-send-email-edgar.iglesias@gmail.com \
--to=edgar.iglesias@gmail.com \
--cc=alex.bennee@linaro.org \
--cc=edgar.iglesias@xilinx.com \
--cc=peter.maydell@linaro.org \
--cc=qemu-arm@nongnu.org \
--cc=qemu-devel@nongnu.org \
--cc=rth@twiddle.net \
--cc=serge.fdrv@gmail.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).