[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH v5 12/31] target/arm: Merge gen_aa32_frob64 into gen_aa32_ld_i64
From: |
Richard Henderson |
Subject: |
[PATCH v5 12/31] target/arm: Merge gen_aa32_frob64 into gen_aa32_ld_i64 |
Date: |
Mon, 19 Apr 2021 13:22:38 -0700 |
This is the only caller. Adjust some commentary to talk
about SCTLR_B instead of the vanishing function.
Reviewed-by: Peter Maydell <peter.maydell@linaro.org>
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
---
target/arm/translate.c | 37 ++++++++++++++++---------------------
1 file changed, 16 insertions(+), 21 deletions(-)
diff --git a/target/arm/translate.c b/target/arm/translate.c
index d46030248a..b47a58ee9a 100644
--- a/target/arm/translate.c
+++ b/target/arm/translate.c
@@ -975,20 +975,17 @@ static void gen_aa32_st_i32(DisasContext *s, TCGv_i32
val, TCGv_i32 a32,
gen_aa32_st_i32(s, val, a32, index, OPC); \
}
-static inline void gen_aa32_frob64(DisasContext *s, TCGv_i64 val)
-{
- /* Not needed for user-mode BE32, where we use MO_BE instead. */
- if (!IS_USER_ONLY && s->sctlr_b) {
- tcg_gen_rotri_i64(val, val, 32);
- }
-}
-
static void gen_aa32_ld_i64(DisasContext *s, TCGv_i64 val, TCGv_i32 a32,
int index, MemOp opc)
{
TCGv addr = gen_aa32_addr(s, a32, opc);
tcg_gen_qemu_ld_i64(val, addr, index, opc);
- gen_aa32_frob64(s, val);
+
+ /* Not needed for user-mode BE32, where we use MO_BE instead. */
+ if (!IS_USER_ONLY && s->sctlr_b) {
+ tcg_gen_rotri_i64(val, val, 32);
+ }
+
tcg_temp_free(addr);
}
@@ -4987,16 +4984,13 @@ static void gen_load_exclusive(DisasContext *s, int rt,
int rt2,
TCGv_i32 tmp2 = tcg_temp_new_i32();
TCGv_i64 t64 = tcg_temp_new_i64();
- /* For AArch32, architecturally the 32-bit word at the lowest
+ /*
+ * For AArch32, architecturally the 32-bit word at the lowest
* address is always Rt and the one at addr+4 is Rt2, even if
* the CPU is big-endian. That means we don't want to do a
- * gen_aa32_ld_i64(), which invokes gen_aa32_frob64() as if
- * for an architecturally 64-bit access, but instead do a
- * 64-bit access using MO_BE if appropriate and then split
- * the two halves.
- * This only makes a difference for BE32 user-mode, where
- * frob64() must not flip the two halves of the 64-bit data
- * but this code must treat BE32 user-mode like BE32 system.
+ * gen_aa32_ld_i64(), which checks SCTLR_B as if for an
+ * architecturally 64-bit access, but instead do a 64-bit access
+ * using MO_BE if appropriate and then split the two halves.
*/
TCGv taddr = gen_aa32_addr(s, addr, opc);
@@ -5056,14 +5050,15 @@ static void gen_store_exclusive(DisasContext *s, int
rd, int rt, int rt2,
TCGv_i64 n64 = tcg_temp_new_i64();
t2 = load_reg(s, rt2);
- /* For AArch32, architecturally the 32-bit word at the lowest
+
+ /*
+ * For AArch32, architecturally the 32-bit word at the lowest
* address is always Rt and the one at addr+4 is Rt2, even if
* the CPU is big-endian. Since we're going to treat this as a
* single 64-bit BE store, we need to put the two halves in the
* opposite order for BE to LE, so that they end up in the right
- * places.
- * We don't want gen_aa32_frob64() because that does the wrong
- * thing for BE32 usermode.
+ * places. We don't want gen_aa32_st_i64, because that checks
+ * SCTLR_B as if for an architectural 64-bit access.
*/
if (s->be_data == MO_BE) {
tcg_gen_concat_i32_i64(n64, t2, t1);
--
2.25.1
- [PATCH v5 02/31] target/arm: Rename TBFLAG_A32, SCTLR_B, (continued)
- [PATCH v5 02/31] target/arm: Rename TBFLAG_A32, SCTLR_B, Richard Henderson, 2021/04/19
- [PATCH v5 03/31] target/arm: Rename TBFLAG_ANY, PSTATE_SS, Richard Henderson, 2021/04/19
- [PATCH v5 05/31] target/arm: Introduce CPUARMTBFlags, Richard Henderson, 2021/04/19
- [PATCH v5 04/31] target/arm: Add wrapper macros for accessing tbflags, Richard Henderson, 2021/04/19
- [PATCH v5 06/31] target/arm: Move mode specific TB flags to tb->cs_base, Richard Henderson, 2021/04/19
- [PATCH v5 07/31] target/arm: Use cpu_abort in assert_hflags_rebuild_correctly, Richard Henderson, 2021/04/19
- [PATCH v5 08/31] target/arm: Move TBFLAG_AM32 bits to the top, Richard Henderson, 2021/04/19
- [PATCH v5 09/31] target/arm: Move TBFLAG_ANY bits to the bottom, Richard Henderson, 2021/04/19
- [PATCH v5 10/31] target/arm: Add ALIGN_MEM to TBFLAG_ANY, Richard Henderson, 2021/04/19
- [PATCH v5 12/31] target/arm: Merge gen_aa32_frob64 into gen_aa32_ld_i64,
Richard Henderson <=
- [PATCH v5 13/31] target/arm: Fix SCTLR_B test for TCGv_i64 load/store, Richard Henderson, 2021/04/19
- [PATCH v5 14/31] target/arm: Adjust gen_aa32_{ld, st}_i64 for align+endianness, Richard Henderson, 2021/04/19
- [PATCH v5 11/31] target/arm: Adjust gen_aa32_{ld, st}_i32 for align+endianness, Richard Henderson, 2021/04/19
- [PATCH v5 15/31] target/arm: Enforce word alignment for LDRD/STRD, Richard Henderson, 2021/04/19
- [PATCH v5 17/31] target/arm: Enforce alignment for LDM/STM, Richard Henderson, 2021/04/19
- [PATCH v5 16/31] target/arm: Enforce alignment for LDA/LDAH/STL/STLH, Richard Henderson, 2021/04/19
- [PATCH v5 18/31] target/arm: Enforce alignment for RFE, Richard Henderson, 2021/04/19
- [PATCH v5 19/31] target/arm: Enforce alignment for SRS, Richard Henderson, 2021/04/19
- [PATCH v5 20/31] target/arm: Enforce alignment for VLDM/VSTM, Richard Henderson, 2021/04/19
- [PATCH v5 21/31] target/arm: Enforce alignment for VLDR/VSTR, Richard Henderson, 2021/04/19