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)
---

Reply via email to