From: Max Filippov Date: Tue, 11 Sep 2018 01:23:35 +0000 (-0700) Subject: target/xtensa: fix s32c1i TCGMemOp flags X-Git-Tag: v3.0.1~69 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=ccdd67c8d95a6d2278307c81018a49496d459d63;p=thirdparty%2Fqemu.git target/xtensa: fix s32c1i TCGMemOp flags s32c1i must load and store value with target endianness, not host. This results in an infinite loop in atomic cmpxchg sequences when target endianness doesn't match host endianness. Fixes: 9fb40342d4b3 ("target/xtensa: support MTTCG") Cc: qemu-stable@nongnu.org Signed-off-by: Max Filippov Reviewed-by: Richard Henderson (cherry picked from commit 7a54cfbcee8dd7aa87ce655a321b622107556326) Signed-off-by: Michael Roth --- diff --git a/target/xtensa/translate.c b/target/xtensa/translate.c index 25399058a0d..c626583cd95 100644 --- a/target/xtensa/translate.c +++ b/target/xtensa/translate.c @@ -2288,7 +2288,7 @@ static void translate_s32c1i(DisasContext *dc, const uint32_t arg[], gen_load_store_alignment(dc, 2, addr, true); gen_check_atomctl(dc, addr); tcg_gen_atomic_cmpxchg_i32(cpu_R[arg[0]], addr, cpu_SR[SCOMPARE1], - tmp, dc->cring, MO_32); + tmp, dc->cring, MO_TEUL); tcg_temp_free(addr); tcg_temp_free(tmp); }