Introduce mo_endian_env() which returns the endian MemOp
from the vCPU env pointer. Keep it hardcoded as MO_TE.
Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
---
target/ppc/internal.h | 6 ++++++
target/ppc/mem_helper.c | 10 +++++-----
target/ppc/tcg-excp_helper.c | 2 +-
3 files changed, 12 insertions(+), 6 deletions(-)
diff --git a/target/ppc/internal.h b/target/ppc/internal.h
index 58f315ffcf5..09333bed342 100644
--- a/target/ppc/internal.h
+++ b/target/ppc/internal.h
@@ -19,10 +19,16 @@
#define PPC_INTERNAL_H
#include "exec/breakpoint.h"
+#include "exec/memop.h"
#include "hw/core/registerfields.h"
#include "exec/page-protection.h"
#include "accel/tcg/tb-cpu-state.h"
+static inline MemOp mo_endian_env(const CPUPPCState *env)
+{
+ return MO_TE;
+}
+
/* PM instructions */
typedef enum {
PPC_PM_DOZE,
diff --git a/target/ppc/mem_helper.c b/target/ppc/mem_helper.c
index cf8f1fa9c1e..3c91d641f9a 100644
--- a/target/ppc/mem_helper.c
+++ b/target/ppc/mem_helper.c
@@ -88,7 +88,7 @@ void helper_lmw(CPUPPCState *env, target_ulong addr, uint32_t reg)
}
} else {
/* Slow path -- at least some of the operation requires i/o. */
- MemOp op = MO_TE | MO_UL | MO_UNALN;
+ MemOp op = mo_endian_env(env) | MO_UL | MO_UNALN;
MemOpIdx oi = make_memop_idx(op, mmu_idx);
for (; reg < 32; reg++) {
@@ -114,7 +114,7 @@ void helper_stmw(CPUPPCState *env, target_ulong addr, uint32_t reg)
} else {
/* Slow path -- at least some of the operation requires i/o. */
for (; reg < 32; reg++) {
- MemOp op = MO_TE | MO_UL | MO_UNALN;
+ MemOp op = mo_endian_env(env) | MO_UL | MO_UNALN;
MemOpIdx oi = make_memop_idx(op, mmu_idx);
cpu_stl_mmu(env, addr, env->gpr[reg], oi, raddr);
@@ -158,7 +158,7 @@ static void do_lsw(CPUPPCState *env, target_ulong addr, uint32_t nb,
break;
}
} else {
- MemOp op = MO_TE | MO_UL | MO_UNALN;
+ MemOp op = mo_endian_env(env) | MO_UL | MO_UNALN;
MemOpIdx oi = make_memop_idx(op, mmu_idx);
/* Slow path -- at least some of the operation requires i/o. */
@@ -252,7 +252,7 @@ void helper_stsw(CPUPPCState *env, target_ulong addr, uint32_t nb,
break;
}
} else {
- MemOp op = MO_TE | MO_UL | MO_UNALN;
+ MemOp op = mo_endian_env(env) | MO_UL | MO_UNALN;
MemOpIdx oi = make_memop_idx(op, mmu_idx);
for (; nb > 3; nb -= 4) {
@@ -300,7 +300,7 @@ static void dcbz_common(CPUPPCState *env, target_ulong addr,
haddr = probe_write(env, addr, dcbz_size, mmu_idx, retaddr);
if (unlikely(!haddr)) {
/* Slow path */
- MemOp op = MO_TE | MO_UQ | MO_UNALN;
+ MemOp op = mo_endian_env(env) | MO_UQ | MO_UNALN;
MemOpIdx oi = make_memop_idx(op, mmu_idx);
for (int i = 0; i < dcbz_size; i += 8) {
diff --git a/target/ppc/tcg-excp_helper.c b/target/ppc/tcg-excp_helper.c
index a8c67364669..77d21523a5b 100644
--- a/target/ppc/tcg-excp_helper.c
+++ b/target/ppc/tcg-excp_helper.c
@@ -161,7 +161,7 @@ static void do_hash(CPUPPCState *env, target_ulong ea, target_ulong ra,
{
uint64_t calculated_hash = hash_digest(ra, rb, key), loaded_hash;
unsigned mmu_idx = cpu_mmu_index(env_cpu(env), false);
- MemOp op = MO_TE | MO_UQ;
+ MemOp op = mo_endian_env(env) | MO_UQ;
MemOpIdx oi = make_memop_idx(op, mmu_idx);
uintptr_t retaddr = GETPC();
--
2.52.0