lwsync orders more than just LD_LD, importantly it matches x86 and s390 default memory ordering.
Signed-off-by: Nicholas Piggin <[email protected]> --- target/ppc/cpu.h | 2 ++ tcg/ppc/tcg-target.c.inc | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/target/ppc/cpu.h b/target/ppc/cpu.h index c2b6c987c0..0b0e9761cd 100644 --- a/target/ppc/cpu.h +++ b/target/ppc/cpu.h @@ -28,6 +28,8 @@ #define TCG_GUEST_DEFAULT_MO 0 +#define PPC_LWSYNC_MO (TCG_MO_LD_LD | TCG_MO_LD_ST | TCG_MO_ST_ST) + #define TARGET_PAGE_BITS_64K 16 #define TARGET_PAGE_BITS_16M 24 diff --git a/tcg/ppc/tcg-target.c.inc b/tcg/ppc/tcg-target.c.inc index 3ff845d063..b87fc2383e 100644 --- a/tcg/ppc/tcg-target.c.inc +++ b/tcg/ppc/tcg-target.c.inc @@ -1834,7 +1834,7 @@ static void tcg_out_mb(TCGContext *s, TCGArg a0) { uint32_t insn = HWSYNC; a0 &= TCG_MO_ALL; - if (a0 == TCG_MO_LD_LD) { + if ((a0 & PPC_LWSYNC_MO) == a0) { insn = LWSYNC; } tcg_out32(s, insn); -- 2.35.1
