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:stable-3.09fb40342d4
("target/xtensa: support MTTCG") Cc: qemu-stable@nongnu.org Signed-off-by: Max Filippov <jcmvbkbc@gmail.com> Reviewed-by: Richard Henderson <richard.henderson@linaro.org> (cherry picked from commit7a54cfbcee
) Signed-off-by: Michael Roth <mdroth@linux.vnet.ibm.com>
parent
ef6de9e720
commit
ccdd67c8d9
|
@ -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);
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue