[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[RFC PATCH 05/11] target/ppc: introduce need_addrswizzle_le() function
From: |
Mark Cave-Ayland |
Subject: |
[RFC PATCH 05/11] target/ppc: introduce need_addrswizzle_le() function |
Date: |
Thu, 12 Dec 2024 15:14:06 +0000 |
This function determines whether the MSR_LE bit should be used to implement
little endian accesses using address swizzling, instead of reversing the
byte order.
(FIXME: which CPUs?)
Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk>
---
target/ppc/translate.c | 14 ++++++++++++--
1 file changed, 12 insertions(+), 2 deletions(-)
diff --git a/target/ppc/translate.c b/target/ppc/translate.c
index 4c47f97607..1211435039 100644
--- a/target/ppc/translate.c
+++ b/target/ppc/translate.c
@@ -208,6 +208,12 @@ struct DisasContext {
#define DISAS_CHAIN DISAS_TARGET_2 /* lookup next tb, pc updated */
#define DISAS_CHAIN_UPDATE DISAS_TARGET_3 /* lookup next tb, pc stale */
+/* Return true iff address swizzling required */
+static inline bool need_addrswizzle_le(const DisasContext *ctx)
+{
+ return ctx->le_mode && true;
+}
+
/* Return true iff byteswap is needed in a scalar memop */
static inline bool need_byteswap(const DisasContext *ctx)
{
@@ -2578,7 +2584,9 @@ static TCGv do_ea_calc_ra(DisasContext *ctx, int ra)
static void gen_ld_tl(DisasContext *ctx, TCGv val, TCGv addr, TCGArg idx,
MemOp memop)
{
- tcg_gen_qemu_ld_tl(val, addr, idx, memop);
+ if (!need_addrswizzle_le(ctx)) {
+ tcg_gen_qemu_ld_tl(val, addr, idx, memop);
+ }
}
#define GEN_QEMU_LOAD_TL(ldop, op) \
@@ -2619,7 +2627,9 @@ GEN_QEMU_LOAD_64(ld64ur, BSWAP_MEMOP(MO_UQ))
static void gen_st_tl(DisasContext *ctx, TCGv val, TCGv addr, TCGArg idx,
MemOp memop)
{
- tcg_gen_qemu_st_tl(val, addr, idx, memop);
+ if (!need_addrswizzle_le(ctx)) {
+ tcg_gen_qemu_st_tl(val, addr, idx, memop);
+ }
}
#define GEN_QEMU_STORE_TL(stop, op) \
--
2.39.5
- [RFC PATCH 00/11] target/ppc: implement legacy address-swizzling MSR_LE support, Mark Cave-Ayland, 2024/12/12
- [RFC PATCH 01/11] target/ppc: introduce gen_ld_tl() function, Mark Cave-Ayland, 2024/12/12
- [RFC PATCH 03/11] target/ppc: introduce gen_st_tl() function, Mark Cave-Ayland, 2024/12/12
- [RFC PATCH 04/11] target/ppc: replace tcg_gen_qemu_st_tl() with gen_st_tl(), Mark Cave-Ayland, 2024/12/12
- [RFC PATCH 06/11] target/ppc: introduce gen_addr_swizzle_le() function, Mark Cave-Ayland, 2024/12/12
- [RFC PATCH 07/11] target/ppc: implement address swizzle for instruction translation, Mark Cave-Ayland, 2024/12/12
- [RFC PATCH 05/11] target/ppc: introduce need_addrswizzle_le() function,
Mark Cave-Ayland <=
- [RFC PATCH 08/11] target/ppc: implement address swizzle for gen_ld_atomic(), Mark Cave-Ayland, 2024/12/12
- [RFC PATCH 11/11] target/ppc: update DisasContext default_tcg_memop_mask value, Mark Cave-Ayland, 2024/12/12
- [RFC PATCH 09/11] target/ppc: implement address swizzle for gen_st_atomic(), Mark Cave-Ayland, 2024/12/12
- [RFC PATCH 10/11] target/ppc: implement address swizzle for gen_conditional_store(), Mark Cave-Ayland, 2024/12/12
- [RFC PATCH 02/11] target/ppc: replace tcg_gen_qemu_ld_tl() with gen_ld_tl(), Mark Cave-Ayland, 2024/12/12