On 2/2/26 18:56, Pierrick Bouvier wrote:
On 2/2/26 6:39 AM, Anton Johansson wrote:
On 02/02/26, Anton Johansson wrote:
On 22/01/26, Philippe Mathieu-Daudé wrote:
Introduce the ppc_code_endian() helper which returns the
MemOp endianness for the CODE path.
Use it in need_byteswap(), removing one TARGET_BIG_ENDIAN.
Signed-off-by: Philippe Mathieu-Daudé <[email protected]>
---
target/ppc/translate.c | 11 ++++++-----
1 file changed, 6 insertions(+), 5 deletions(-)
diff --git a/target/ppc/translate.c b/target/ppc/translate.c
index 17e6d07c8c2..4a9199a4473 100644
--- a/target/ppc/translate.c
+++ b/target/ppc/translate.c
@@ -214,14 +214,15 @@ static inline bool is_ppe(const DisasContext
*ctx)
return !!(ctx->flags & POWERPC_FLAG_PPE42);
}
+static inline MemOp ppc_code_endian(const DisasContext *ctx)
+{
+ return MO_BE ^ (ctx->le_mode * MO_BSWAP);
+}
This was not super obvious to me, is this a common pattern?
Ignore this comment, I see we do it for translator_ld*()!:)
I agree that even though it's used there, it's far from being obvious
when reading it :)
In order to clarify, I amended:
---
Note, the target MemOp endianness can be evaluated as (see
commit 5c43a750b67 "accel/tcg: Implement translator_ld*_end"):
MO_TE ^ (do_swap * MO_BSWAP)
For PPC we use the DisasContext::le_mode field to swap the
default (big-endian) order, so to get the PPC MemOp endianness
we can directly use:
MO_BE ^ (ctx->le_mode * MO_BSWAP)
---