qemu/target
Peter Maydell ee786ca115 target/arm: Correct STRD atomicity
Our STRD implementation doesn't correctly implement the requirement:
 * if the address is 8-aligned the access must be a 64-bit
   single-copy atomic access, not two 32-bit accesses

Rewrite the handling of STRD to use a single tcg_gen_qemu_st_i64()
of a value produced by concatenating the two 32 bit source registers.
This allows us to get the atomicity right.

As with the LDRD change, now that we don't update 'addr' in the
course of performing the store we need to adjust the offset
we pass to op_addr_ri_post() and op_addr_rr_post().

Cc: qemu-stable@nongnu.org
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
Message-id: 20250227142746.1698904-3-peter.maydell@linaro.org
2025-03-07 10:08:21 +00:00
..
alpha target/alpha: Do not mix exception flags and FPCR bits 2025-03-06 15:46:18 +01:00
arm target/arm: Correct STRD atomicity 2025-03-07 10:08:21 +00:00
avr target: Set disassemble_info::endian value for little-endian targets 2025-03-06 15:46:18 +01:00
hexagon target: Set disassemble_info::endian value for little-endian targets 2025-03-06 15:46:18 +01:00
hppa target: Set disassemble_info::endian value for big-endian targets 2025-03-06 15:46:18 +01:00
i386 target/i386: Mark WHPX APIC region as little-endian 2025-03-06 15:46:18 +01:00
loongarch target: Set disassemble_info::endian value for little-endian targets 2025-03-06 15:46:18 +01:00
m68k target: Set disassemble_info::endian value for big-endian targets 2025-03-06 15:46:18 +01:00
microblaze target/microblaze: Set disassemble_info::endian value in disas_set_info 2025-03-06 15:46:18 +01:00
mips target/mips: Set disassemble_info::endian value in disas_set_info() 2025-03-06 15:46:18 +01:00
openrisc target: Set disassemble_info::endian value for big-endian targets 2025-03-06 15:46:18 +01:00
ppc target/ppc: Set disassemble_info::endian value in disas_set_info() 2025-03-06 15:46:18 +01:00
riscv Generic CPUs / accelerators patch queue 2025-03-07 07:39:49 +08:00
rx target: Set disassemble_info::endian value for little-endian targets 2025-03-06 15:46:18 +01:00
s390x target: Set disassemble_info::endian value for big-endian targets 2025-03-06 15:46:18 +01:00
sh4 target/sh4: Set disassemble_info::endian value in disas_set_info() 2025-03-06 15:46:18 +01:00
sparc Generic CPUs / accelerators patch queue 2025-03-07 07:39:49 +08:00
tricore target/tricore: Ensure not being build on user emulation 2025-03-06 15:46:18 +01:00
xtensa target/xtensa: Finalize config in xtensa_register_core() 2025-03-06 15:46:18 +01:00
Kconfig target/cris: Remove the deprecated CRIS target 2024-09-13 20:11:13 +02:00
meson.build target/cris: Remove the deprecated CRIS target 2024-09-13 20:11:13 +02:00