@@ -1572,6 +1572,9 @@ static void tcg_out_qemu_ld(TCGContext *s, const TCGArg *args, bool is64)
if (GUEST_BASE && guest_base_flags) {
seg = guest_base_flags;
offset = 0;
+ if (TARGET_LONG_BITS == 32) {
+ seg |= P_ADDR32;
+ }
} else if (TCG_TARGET_REG_BITS == 64 && offset != GUEST_BASE) {
tcg_out_movi(s, TCG_TYPE_I64, TCG_REG_L1, GUEST_BASE);
tgen_arithr(s, ARITH_ADD + P_REXW, TCG_REG_L1, base);
@@ -1705,6 +1708,9 @@ static void tcg_out_qemu_st(TCGContext *s, const TCGArg *args, bool is64)
if (GUEST_BASE && guest_base_flags) {
seg = guest_base_flags;
offset = 0;
+ if (TARGET_LONG_BITS == 32) {
+ seg |= P_ADDR32;
+ }
} else if (TCG_TARGET_REG_BITS == 64 && offset != GUEST_BASE) {
tcg_out_movi(s, TCG_TYPE_I64, TCG_REG_L1, GUEST_BASE);
tgen_arithr(s, ARITH_ADD + P_REXW, TCG_REG_L1, base);