diff --git a/qemu/aarch64.h b/qemu/aarch64.h index 19bd2902..172e750f 100644 --- a/qemu/aarch64.h +++ b/qemu/aarch64.h @@ -1408,6 +1408,10 @@ #define helper_atomic_cmpxchgl_be_mmu helper_atomic_cmpxchgl_be_mmu_aarch64 #define helper_atomic_cmpxchgl_le helper_atomic_cmpxchgl_le_aarch64 #define helper_atomic_cmpxchgl_le_mmu helper_atomic_cmpxchgl_le_mmu_aarch64 +#define helper_atomic_cmpxchgo_be helper_atomic_cmpxchgo_be_aarch64 +#define helper_atomic_cmpxchgo_be_mmu helper_atomic_cmpxchgo_be_mmu_aarch64 +#define helper_atomic_cmpxchgo_le helper_atomic_cmpxchgo_le_aarch64 +#define helper_atomic_cmpxchgo_le_mmu helper_atomic_cmpxchgo_le_mmu_aarch64 #define helper_atomic_cmpxchgq_be helper_atomic_cmpxchgq_be_aarch64 #define helper_atomic_cmpxchgq_be_mmu helper_atomic_cmpxchgq_be_mmu_aarch64 #define helper_atomic_cmpxchgq_le helper_atomic_cmpxchgq_le_aarch64 @@ -1472,6 +1476,10 @@ #define helper_atomic_fetch_xorw_be_mmu helper_atomic_fetch_xorw_be_mmu_aarch64 #define helper_atomic_fetch_xorw_le helper_atomic_fetch_xorw_le_aarch64 #define helper_atomic_fetch_xorw_le_mmu helper_atomic_fetch_xorw_le_mmu_aarch64 +#define helper_atomic_ldo_be helper_atomic_ldo_be_aarch64 +#define helper_atomic_ldo_be_mmu helper_atomic_ldo_be_mmu_aarch64 +#define helper_atomic_ldo_le helper_atomic_ldo_le_aarch64 +#define helper_atomic_ldo_le_mmu helper_atomic_ldo_le_mmu_aarch64 #define helper_atomic_or_fetchb helper_atomic_or_fetchb_aarch64 #define helper_atomic_or_fetchb_mmu helper_atomic_or_fetchb_mmu_aarch64 #define helper_atomic_or_fetchl_be helper_atomic_or_fetchl_be_aarch64 @@ -1486,6 +1494,10 @@ #define helper_atomic_or_fetchw_be_mmu helper_atomic_or_fetchw_be_mmu_aarch64 #define helper_atomic_or_fetchw_le helper_atomic_or_fetchw_le_aarch64 #define helper_atomic_or_fetchw_le_mmu helper_atomic_or_fetchw_le_mmu_aarch64 +#define helper_atomic_sto_be helper_atomic_sto_be_aarch64 +#define helper_atomic_sto_be_mmu helper_atomic_sto_be_mmu_aarch64 +#define helper_atomic_sto_le helper_atomic_sto_le_aarch64 +#define helper_atomic_sto_le_mmu helper_atomic_sto_le_mmu_aarch64 #define helper_atomic_xchgb helper_atomic_xchgb_aarch64 #define helper_atomic_xchgb helper_atomic_xchgb_aarch64 #define helper_atomic_xchgb_mmu helper_atomic_xchgb_mmu_aarch64 diff --git a/qemu/aarch64eb.h b/qemu/aarch64eb.h index 87a2f4c2..6ec1e479 100644 --- a/qemu/aarch64eb.h +++ b/qemu/aarch64eb.h @@ -1408,6 +1408,10 @@ #define helper_atomic_cmpxchgl_be_mmu helper_atomic_cmpxchgl_be_mmu_aarch64eb #define helper_atomic_cmpxchgl_le helper_atomic_cmpxchgl_le_aarch64eb #define helper_atomic_cmpxchgl_le_mmu helper_atomic_cmpxchgl_le_mmu_aarch64eb +#define helper_atomic_cmpxchgo_be helper_atomic_cmpxchgo_be_aarch64eb +#define helper_atomic_cmpxchgo_be_mmu helper_atomic_cmpxchgo_be_mmu_aarch64eb +#define helper_atomic_cmpxchgo_le helper_atomic_cmpxchgo_le_aarch64eb +#define helper_atomic_cmpxchgo_le_mmu helper_atomic_cmpxchgo_le_mmu_aarch64eb #define helper_atomic_cmpxchgq_be helper_atomic_cmpxchgq_be_aarch64eb #define helper_atomic_cmpxchgq_be_mmu helper_atomic_cmpxchgq_be_mmu_aarch64eb #define helper_atomic_cmpxchgq_le helper_atomic_cmpxchgq_le_aarch64eb @@ -1472,6 +1476,10 @@ #define helper_atomic_fetch_xorw_be_mmu helper_atomic_fetch_xorw_be_mmu_aarch64eb #define helper_atomic_fetch_xorw_le helper_atomic_fetch_xorw_le_aarch64eb #define helper_atomic_fetch_xorw_le_mmu helper_atomic_fetch_xorw_le_mmu_aarch64eb +#define helper_atomic_ldo_be helper_atomic_ldo_be_aarch64eb +#define helper_atomic_ldo_be_mmu helper_atomic_ldo_be_mmu_aarch64eb +#define helper_atomic_ldo_le helper_atomic_ldo_le_aarch64eb +#define helper_atomic_ldo_le_mmu helper_atomic_ldo_le_mmu_aarch64eb #define helper_atomic_or_fetchb helper_atomic_or_fetchb_aarch64eb #define helper_atomic_or_fetchb_mmu helper_atomic_or_fetchb_mmu_aarch64eb #define helper_atomic_or_fetchl_be helper_atomic_or_fetchl_be_aarch64eb @@ -1486,6 +1494,10 @@ #define helper_atomic_or_fetchw_be_mmu helper_atomic_or_fetchw_be_mmu_aarch64eb #define helper_atomic_or_fetchw_le helper_atomic_or_fetchw_le_aarch64eb #define helper_atomic_or_fetchw_le_mmu helper_atomic_or_fetchw_le_mmu_aarch64eb +#define helper_atomic_sto_be helper_atomic_sto_be_aarch64eb +#define helper_atomic_sto_be_mmu helper_atomic_sto_be_mmu_aarch64eb +#define helper_atomic_sto_le helper_atomic_sto_le_aarch64eb +#define helper_atomic_sto_le_mmu helper_atomic_sto_le_mmu_aarch64eb #define helper_atomic_xchgb helper_atomic_xchgb_aarch64eb #define helper_atomic_xchgb helper_atomic_xchgb_aarch64eb #define helper_atomic_xchgb_mmu helper_atomic_xchgb_mmu_aarch64eb diff --git a/qemu/arm.h b/qemu/arm.h index 283f9fa0..7338a521 100644 --- a/qemu/arm.h +++ b/qemu/arm.h @@ -1408,6 +1408,10 @@ #define helper_atomic_cmpxchgl_be_mmu helper_atomic_cmpxchgl_be_mmu_arm #define helper_atomic_cmpxchgl_le helper_atomic_cmpxchgl_le_arm #define helper_atomic_cmpxchgl_le_mmu helper_atomic_cmpxchgl_le_mmu_arm +#define helper_atomic_cmpxchgo_be helper_atomic_cmpxchgo_be_arm +#define helper_atomic_cmpxchgo_be_mmu helper_atomic_cmpxchgo_be_mmu_arm +#define helper_atomic_cmpxchgo_le helper_atomic_cmpxchgo_le_arm +#define helper_atomic_cmpxchgo_le_mmu helper_atomic_cmpxchgo_le_mmu_arm #define helper_atomic_cmpxchgq_be helper_atomic_cmpxchgq_be_arm #define helper_atomic_cmpxchgq_be_mmu helper_atomic_cmpxchgq_be_mmu_arm #define helper_atomic_cmpxchgq_le helper_atomic_cmpxchgq_le_arm @@ -1472,6 +1476,10 @@ #define helper_atomic_fetch_xorw_be_mmu helper_atomic_fetch_xorw_be_mmu_arm #define helper_atomic_fetch_xorw_le helper_atomic_fetch_xorw_le_arm #define helper_atomic_fetch_xorw_le_mmu helper_atomic_fetch_xorw_le_mmu_arm +#define helper_atomic_ldo_be helper_atomic_ldo_be_arm +#define helper_atomic_ldo_be_mmu helper_atomic_ldo_be_mmu_arm +#define helper_atomic_ldo_le helper_atomic_ldo_le_arm +#define helper_atomic_ldo_le_mmu helper_atomic_ldo_le_mmu_arm #define helper_atomic_or_fetchb helper_atomic_or_fetchb_arm #define helper_atomic_or_fetchb_mmu helper_atomic_or_fetchb_mmu_arm #define helper_atomic_or_fetchl_be helper_atomic_or_fetchl_be_arm @@ -1486,6 +1494,10 @@ #define helper_atomic_or_fetchw_be_mmu helper_atomic_or_fetchw_be_mmu_arm #define helper_atomic_or_fetchw_le helper_atomic_or_fetchw_le_arm #define helper_atomic_or_fetchw_le_mmu helper_atomic_or_fetchw_le_mmu_arm +#define helper_atomic_sto_be helper_atomic_sto_be_arm +#define helper_atomic_sto_be_mmu helper_atomic_sto_be_mmu_arm +#define helper_atomic_sto_le helper_atomic_sto_le_arm +#define helper_atomic_sto_le_mmu helper_atomic_sto_le_mmu_arm #define helper_atomic_xchgb helper_atomic_xchgb_arm #define helper_atomic_xchgb helper_atomic_xchgb_arm #define helper_atomic_xchgb_mmu helper_atomic_xchgb_mmu_arm diff --git a/qemu/armeb.h b/qemu/armeb.h index a8c726d3..4dd1ef65 100644 --- a/qemu/armeb.h +++ b/qemu/armeb.h @@ -1408,6 +1408,10 @@ #define helper_atomic_cmpxchgl_be_mmu helper_atomic_cmpxchgl_be_mmu_armeb #define helper_atomic_cmpxchgl_le helper_atomic_cmpxchgl_le_armeb #define helper_atomic_cmpxchgl_le_mmu helper_atomic_cmpxchgl_le_mmu_armeb +#define helper_atomic_cmpxchgo_be helper_atomic_cmpxchgo_be_armeb +#define helper_atomic_cmpxchgo_be_mmu helper_atomic_cmpxchgo_be_mmu_armeb +#define helper_atomic_cmpxchgo_le helper_atomic_cmpxchgo_le_armeb +#define helper_atomic_cmpxchgo_le_mmu helper_atomic_cmpxchgo_le_mmu_armeb #define helper_atomic_cmpxchgq_be helper_atomic_cmpxchgq_be_armeb #define helper_atomic_cmpxchgq_be_mmu helper_atomic_cmpxchgq_be_mmu_armeb #define helper_atomic_cmpxchgq_le helper_atomic_cmpxchgq_le_armeb @@ -1472,6 +1476,10 @@ #define helper_atomic_fetch_xorw_be_mmu helper_atomic_fetch_xorw_be_mmu_armeb #define helper_atomic_fetch_xorw_le helper_atomic_fetch_xorw_le_armeb #define helper_atomic_fetch_xorw_le_mmu helper_atomic_fetch_xorw_le_mmu_armeb +#define helper_atomic_ldo_be helper_atomic_ldo_be_armeb +#define helper_atomic_ldo_be_mmu helper_atomic_ldo_be_mmu_armeb +#define helper_atomic_ldo_le helper_atomic_ldo_le_armeb +#define helper_atomic_ldo_le_mmu helper_atomic_ldo_le_mmu_armeb #define helper_atomic_or_fetchb helper_atomic_or_fetchb_armeb #define helper_atomic_or_fetchb_mmu helper_atomic_or_fetchb_mmu_armeb #define helper_atomic_or_fetchl_be helper_atomic_or_fetchl_be_armeb @@ -1486,6 +1494,10 @@ #define helper_atomic_or_fetchw_be_mmu helper_atomic_or_fetchw_be_mmu_armeb #define helper_atomic_or_fetchw_le helper_atomic_or_fetchw_le_armeb #define helper_atomic_or_fetchw_le_mmu helper_atomic_or_fetchw_le_mmu_armeb +#define helper_atomic_sto_be helper_atomic_sto_be_armeb +#define helper_atomic_sto_be_mmu helper_atomic_sto_be_mmu_armeb +#define helper_atomic_sto_le helper_atomic_sto_le_armeb +#define helper_atomic_sto_le_mmu helper_atomic_sto_le_mmu_armeb #define helper_atomic_xchgb helper_atomic_xchgb_armeb #define helper_atomic_xchgb helper_atomic_xchgb_armeb #define helper_atomic_xchgb_mmu helper_atomic_xchgb_mmu_armeb diff --git a/qemu/atomic_template.h b/qemu/atomic_template.h index cf837254..b400b2a3 100644 --- a/qemu/atomic_template.h +++ b/qemu/atomic_template.h @@ -18,7 +18,11 @@ * License along with this library; if not, see . */ -#if DATA_SIZE == 8 +#if DATA_SIZE == 16 +# define SUFFIX o +# define DATA_TYPE Int128 +# define BSWAP bswap128 +#elif DATA_SIZE == 8 # define SUFFIX q # define DATA_TYPE uint64_t # define BSWAP bswap64 @@ -61,6 +65,21 @@ ABI_TYPE ATOMIC_NAME(cmpxchg)(CPUArchState *env, target_ulong addr, return atomic_cmpxchg__nocheck(haddr, cmpv, newv); } +#if DATA_SIZE >= 16 +ABI_TYPE ATOMIC_NAME(ld)(CPUArchState *env, target_ulong addr EXTRA_ARGS) +{ + DATA_TYPE val, *haddr = ATOMIC_MMU_LOOKUP; + __atomic_load(haddr, &val, __ATOMIC_RELAXED); + return val; +} + +void ATOMIC_NAME(st)(CPUArchState *env, target_ulong addr, + ABI_TYPE val EXTRA_ARGS) +{ + DATA_TYPE *haddr = ATOMIC_MMU_LOOKUP; + __atomic_store(haddr, &val, __ATOMIC_RELAXED); +} +#else ABI_TYPE ATOMIC_NAME(xchg)(CPUArchState *env, target_ulong addr, ABI_TYPE val EXTRA_ARGS) { @@ -86,6 +105,8 @@ GEN_ATOMIC_HELPER(or_fetch) GEN_ATOMIC_HELPER(xor_fetch) #undef GEN_ATOMIC_HELPER +#endif /* DATA SIZE >= 16 */ + #undef END #if DATA_SIZE > 1 @@ -105,6 +126,22 @@ ABI_TYPE ATOMIC_NAME(cmpxchg)(CPUArchState *env, target_ulong addr, return BSWAP(atomic_cmpxchg__nocheck(haddr, BSWAP(cmpv), BSWAP(newv))); } +#if DATA_SIZE >= 16 +ABI_TYPE ATOMIC_NAME(ld)(CPUArchState *env, target_ulong addr EXTRA_ARGS) +{ + DATA_TYPE val, *haddr = ATOMIC_MMU_LOOKUP; + __atomic_load(haddr, &val, __ATOMIC_RELAXED); + return BSWAP(val); +} + +void ATOMIC_NAME(st)(CPUArchState *env, target_ulong addr, + ABI_TYPE val EXTRA_ARGS) +{ + DATA_TYPE *haddr = ATOMIC_MMU_LOOKUP; + val = BSWAP(val); + __atomic_store(haddr, &val, __ATOMIC_RELAXED); +} +#else ABI_TYPE ATOMIC_NAME(xchg)(CPUArchState *env, target_ulong addr, ABI_TYPE val EXTRA_ARGS) { @@ -166,6 +203,7 @@ ABI_TYPE ATOMIC_NAME(add_fetch)(CPUArchState *env, target_ulong addr, ldo = ldn; } } +#endif /* DATA_SIZE >= 16 */ #undef END #endif /* DATA_SIZE > 1 */ diff --git a/qemu/configure b/qemu/configure index fbea58a5..bad699cc 100755 --- a/qemu/configure +++ b/qemu/configure @@ -602,7 +602,10 @@ case "$cpu" in cc_i386='$(CC) -m32' ;; x86_64) - CPU_CFLAGS="-m64" + # ??? Only extremely old AMD cpus do not have cmpxchg16b. + # If we truly care, we should simply detect this case at + # runtime and generate the fallback to serial emulation. + CPU_CFLAGS="-m64 -mcx16" LDFLAGS="-m64 $LDFLAGS" cc_i386='$(CC) -m32' ;; @@ -1068,6 +1071,26 @@ if compile_prog "" "" ; then int128=yes fi +######################################### +# See if 128-bit atomic operations are supported. + +atomic128=no +if test "$int128" = "yes"; then + cat > $TMPC << EOF +int main(void) +{ + unsigned __int128 x = 0, y = 0; + y = __atomic_load_16(&x, 0); + __atomic_store_16(&x, y, 0); + __atomic_compare_exchange_16(&x, &y, x, 0, 0, 0); + return 0; +} +EOF + if compile_prog "" "" ; then + atomic128=yes + fi +fi + # Now we've finished running tests it's OK to add -Werror to the compiler flags if test "$werror" = "yes"; then QEMU_CFLAGS="-Werror $QEMU_CFLAGS" @@ -1189,6 +1212,10 @@ if test "$int128" = "yes" ; then echo "CONFIG_INT128=y" >> $config_host_mak fi +if test "$atomic128" = "yes" ; then + echo "CONFIG_ATOMIC128=y" >> $config_host_mak +fi + if test "$tcg_interpreter" = "yes"; then QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/tci $QEMU_INCLUDES" elif test "$ARCH" = "sparc64" ; then diff --git a/qemu/cputlb.c b/qemu/cputlb.c index 985c2f42..ec6755ab 100644 --- a/qemu/cputlb.c +++ b/qemu/cputlb.c @@ -679,6 +679,11 @@ static void *atomic_mmu_lookup(CPUArchState *env, target_ulong addr, #define DATA_SIZE 8 #include "atomic_template.h" +#ifdef CONFIG_ATOMIC128 +#define DATA_SIZE 16 +#include "atomic_template.h" +#endif + /* Second set of helpers are directly callable from TCG as helpers. */ #undef EXTRA_ARGS diff --git a/qemu/header_gen.py b/qemu/header_gen.py index 91f79f77..e5ea1f7c 100644 --- a/qemu/header_gen.py +++ b/qemu/header_gen.py @@ -1414,6 +1414,10 @@ symbols = ( 'helper_atomic_cmpxchgl_be_mmu', 'helper_atomic_cmpxchgl_le', 'helper_atomic_cmpxchgl_le_mmu', + 'helper_atomic_cmpxchgo_be', + 'helper_atomic_cmpxchgo_be_mmu', + 'helper_atomic_cmpxchgo_le', + 'helper_atomic_cmpxchgo_le_mmu', 'helper_atomic_cmpxchgq_be', 'helper_atomic_cmpxchgq_be_mmu', 'helper_atomic_cmpxchgq_le', @@ -1478,6 +1482,10 @@ symbols = ( 'helper_atomic_fetch_xorw_be_mmu', 'helper_atomic_fetch_xorw_le', 'helper_atomic_fetch_xorw_le_mmu', + 'helper_atomic_ldo_be', + 'helper_atomic_ldo_be_mmu', + 'helper_atomic_ldo_le', + 'helper_atomic_ldo_le_mmu', 'helper_atomic_or_fetchb', 'helper_atomic_or_fetchb_mmu', 'helper_atomic_or_fetchl_be', @@ -1492,6 +1500,10 @@ symbols = ( 'helper_atomic_or_fetchw_be_mmu', 'helper_atomic_or_fetchw_le', 'helper_atomic_or_fetchw_le_mmu', + 'helper_atomic_sto_be', + 'helper_atomic_sto_be_mmu', + 'helper_atomic_sto_le', + 'helper_atomic_sto_le_mmu', 'helper_atomic_xchgb', 'helper_atomic_xchgb', 'helper_atomic_xchgb_mmu', diff --git a/qemu/include/qemu/int128.h b/qemu/include/qemu/int128.h index 70ffa9b2..fce4be74 100644 --- a/qemu/include/qemu/int128.h +++ b/qemu/include/qemu/int128.h @@ -4,6 +4,7 @@ #include "unicorn/platform.h" #ifdef CONFIG_INT128 +#include "qemu/bswap.h" typedef __int128_t Int128; @@ -139,6 +140,11 @@ static inline void int128_subfrom(Int128 *a, Int128 b) *a -= b; } +static inline Int128 bswap128(Int128 a) +{ + return int128_make128(bswap64(int128_gethi(a)), bswap64(int128_getlo(a))); +} + #else /* !CONFIG_INT128 */ typedef struct Int128 Int128; diff --git a/qemu/m68k.h b/qemu/m68k.h index c9058ee6..08bbf0a9 100644 --- a/qemu/m68k.h +++ b/qemu/m68k.h @@ -1408,6 +1408,10 @@ #define helper_atomic_cmpxchgl_be_mmu helper_atomic_cmpxchgl_be_mmu_m68k #define helper_atomic_cmpxchgl_le helper_atomic_cmpxchgl_le_m68k #define helper_atomic_cmpxchgl_le_mmu helper_atomic_cmpxchgl_le_mmu_m68k +#define helper_atomic_cmpxchgo_be helper_atomic_cmpxchgo_be_m68k +#define helper_atomic_cmpxchgo_be_mmu helper_atomic_cmpxchgo_be_mmu_m68k +#define helper_atomic_cmpxchgo_le helper_atomic_cmpxchgo_le_m68k +#define helper_atomic_cmpxchgo_le_mmu helper_atomic_cmpxchgo_le_mmu_m68k #define helper_atomic_cmpxchgq_be helper_atomic_cmpxchgq_be_m68k #define helper_atomic_cmpxchgq_be_mmu helper_atomic_cmpxchgq_be_mmu_m68k #define helper_atomic_cmpxchgq_le helper_atomic_cmpxchgq_le_m68k @@ -1472,6 +1476,10 @@ #define helper_atomic_fetch_xorw_be_mmu helper_atomic_fetch_xorw_be_mmu_m68k #define helper_atomic_fetch_xorw_le helper_atomic_fetch_xorw_le_m68k #define helper_atomic_fetch_xorw_le_mmu helper_atomic_fetch_xorw_le_mmu_m68k +#define helper_atomic_ldo_be helper_atomic_ldo_be_m68k +#define helper_atomic_ldo_be_mmu helper_atomic_ldo_be_mmu_m68k +#define helper_atomic_ldo_le helper_atomic_ldo_le_m68k +#define helper_atomic_ldo_le_mmu helper_atomic_ldo_le_mmu_m68k #define helper_atomic_or_fetchb helper_atomic_or_fetchb_m68k #define helper_atomic_or_fetchb_mmu helper_atomic_or_fetchb_mmu_m68k #define helper_atomic_or_fetchl_be helper_atomic_or_fetchl_be_m68k @@ -1486,6 +1494,10 @@ #define helper_atomic_or_fetchw_be_mmu helper_atomic_or_fetchw_be_mmu_m68k #define helper_atomic_or_fetchw_le helper_atomic_or_fetchw_le_m68k #define helper_atomic_or_fetchw_le_mmu helper_atomic_or_fetchw_le_mmu_m68k +#define helper_atomic_sto_be helper_atomic_sto_be_m68k +#define helper_atomic_sto_be_mmu helper_atomic_sto_be_mmu_m68k +#define helper_atomic_sto_le helper_atomic_sto_le_m68k +#define helper_atomic_sto_le_mmu helper_atomic_sto_le_mmu_m68k #define helper_atomic_xchgb helper_atomic_xchgb_m68k #define helper_atomic_xchgb helper_atomic_xchgb_m68k #define helper_atomic_xchgb_mmu helper_atomic_xchgb_mmu_m68k diff --git a/qemu/mips.h b/qemu/mips.h index 2906ed0c..d9a8d201 100644 --- a/qemu/mips.h +++ b/qemu/mips.h @@ -1408,6 +1408,10 @@ #define helper_atomic_cmpxchgl_be_mmu helper_atomic_cmpxchgl_be_mmu_mips #define helper_atomic_cmpxchgl_le helper_atomic_cmpxchgl_le_mips #define helper_atomic_cmpxchgl_le_mmu helper_atomic_cmpxchgl_le_mmu_mips +#define helper_atomic_cmpxchgo_be helper_atomic_cmpxchgo_be_mips +#define helper_atomic_cmpxchgo_be_mmu helper_atomic_cmpxchgo_be_mmu_mips +#define helper_atomic_cmpxchgo_le helper_atomic_cmpxchgo_le_mips +#define helper_atomic_cmpxchgo_le_mmu helper_atomic_cmpxchgo_le_mmu_mips #define helper_atomic_cmpxchgq_be helper_atomic_cmpxchgq_be_mips #define helper_atomic_cmpxchgq_be_mmu helper_atomic_cmpxchgq_be_mmu_mips #define helper_atomic_cmpxchgq_le helper_atomic_cmpxchgq_le_mips @@ -1472,6 +1476,10 @@ #define helper_atomic_fetch_xorw_be_mmu helper_atomic_fetch_xorw_be_mmu_mips #define helper_atomic_fetch_xorw_le helper_atomic_fetch_xorw_le_mips #define helper_atomic_fetch_xorw_le_mmu helper_atomic_fetch_xorw_le_mmu_mips +#define helper_atomic_ldo_be helper_atomic_ldo_be_mips +#define helper_atomic_ldo_be_mmu helper_atomic_ldo_be_mmu_mips +#define helper_atomic_ldo_le helper_atomic_ldo_le_mips +#define helper_atomic_ldo_le_mmu helper_atomic_ldo_le_mmu_mips #define helper_atomic_or_fetchb helper_atomic_or_fetchb_mips #define helper_atomic_or_fetchb_mmu helper_atomic_or_fetchb_mmu_mips #define helper_atomic_or_fetchl_be helper_atomic_or_fetchl_be_mips @@ -1486,6 +1494,10 @@ #define helper_atomic_or_fetchw_be_mmu helper_atomic_or_fetchw_be_mmu_mips #define helper_atomic_or_fetchw_le helper_atomic_or_fetchw_le_mips #define helper_atomic_or_fetchw_le_mmu helper_atomic_or_fetchw_le_mmu_mips +#define helper_atomic_sto_be helper_atomic_sto_be_mips +#define helper_atomic_sto_be_mmu helper_atomic_sto_be_mmu_mips +#define helper_atomic_sto_le helper_atomic_sto_le_mips +#define helper_atomic_sto_le_mmu helper_atomic_sto_le_mmu_mips #define helper_atomic_xchgb helper_atomic_xchgb_mips #define helper_atomic_xchgb helper_atomic_xchgb_mips #define helper_atomic_xchgb_mmu helper_atomic_xchgb_mmu_mips diff --git a/qemu/mips64.h b/qemu/mips64.h index 0a8bca94..6180aead 100644 --- a/qemu/mips64.h +++ b/qemu/mips64.h @@ -1408,6 +1408,10 @@ #define helper_atomic_cmpxchgl_be_mmu helper_atomic_cmpxchgl_be_mmu_mips64 #define helper_atomic_cmpxchgl_le helper_atomic_cmpxchgl_le_mips64 #define helper_atomic_cmpxchgl_le_mmu helper_atomic_cmpxchgl_le_mmu_mips64 +#define helper_atomic_cmpxchgo_be helper_atomic_cmpxchgo_be_mips64 +#define helper_atomic_cmpxchgo_be_mmu helper_atomic_cmpxchgo_be_mmu_mips64 +#define helper_atomic_cmpxchgo_le helper_atomic_cmpxchgo_le_mips64 +#define helper_atomic_cmpxchgo_le_mmu helper_atomic_cmpxchgo_le_mmu_mips64 #define helper_atomic_cmpxchgq_be helper_atomic_cmpxchgq_be_mips64 #define helper_atomic_cmpxchgq_be_mmu helper_atomic_cmpxchgq_be_mmu_mips64 #define helper_atomic_cmpxchgq_le helper_atomic_cmpxchgq_le_mips64 @@ -1472,6 +1476,10 @@ #define helper_atomic_fetch_xorw_be_mmu helper_atomic_fetch_xorw_be_mmu_mips64 #define helper_atomic_fetch_xorw_le helper_atomic_fetch_xorw_le_mips64 #define helper_atomic_fetch_xorw_le_mmu helper_atomic_fetch_xorw_le_mmu_mips64 +#define helper_atomic_ldo_be helper_atomic_ldo_be_mips64 +#define helper_atomic_ldo_be_mmu helper_atomic_ldo_be_mmu_mips64 +#define helper_atomic_ldo_le helper_atomic_ldo_le_mips64 +#define helper_atomic_ldo_le_mmu helper_atomic_ldo_le_mmu_mips64 #define helper_atomic_or_fetchb helper_atomic_or_fetchb_mips64 #define helper_atomic_or_fetchb_mmu helper_atomic_or_fetchb_mmu_mips64 #define helper_atomic_or_fetchl_be helper_atomic_or_fetchl_be_mips64 @@ -1486,6 +1494,10 @@ #define helper_atomic_or_fetchw_be_mmu helper_atomic_or_fetchw_be_mmu_mips64 #define helper_atomic_or_fetchw_le helper_atomic_or_fetchw_le_mips64 #define helper_atomic_or_fetchw_le_mmu helper_atomic_or_fetchw_le_mmu_mips64 +#define helper_atomic_sto_be helper_atomic_sto_be_mips64 +#define helper_atomic_sto_be_mmu helper_atomic_sto_be_mmu_mips64 +#define helper_atomic_sto_le helper_atomic_sto_le_mips64 +#define helper_atomic_sto_le_mmu helper_atomic_sto_le_mmu_mips64 #define helper_atomic_xchgb helper_atomic_xchgb_mips64 #define helper_atomic_xchgb helper_atomic_xchgb_mips64 #define helper_atomic_xchgb_mmu helper_atomic_xchgb_mmu_mips64 diff --git a/qemu/mips64el.h b/qemu/mips64el.h index 6727cf22..a4997a1f 100644 --- a/qemu/mips64el.h +++ b/qemu/mips64el.h @@ -1408,6 +1408,10 @@ #define helper_atomic_cmpxchgl_be_mmu helper_atomic_cmpxchgl_be_mmu_mips64el #define helper_atomic_cmpxchgl_le helper_atomic_cmpxchgl_le_mips64el #define helper_atomic_cmpxchgl_le_mmu helper_atomic_cmpxchgl_le_mmu_mips64el +#define helper_atomic_cmpxchgo_be helper_atomic_cmpxchgo_be_mips64el +#define helper_atomic_cmpxchgo_be_mmu helper_atomic_cmpxchgo_be_mmu_mips64el +#define helper_atomic_cmpxchgo_le helper_atomic_cmpxchgo_le_mips64el +#define helper_atomic_cmpxchgo_le_mmu helper_atomic_cmpxchgo_le_mmu_mips64el #define helper_atomic_cmpxchgq_be helper_atomic_cmpxchgq_be_mips64el #define helper_atomic_cmpxchgq_be_mmu helper_atomic_cmpxchgq_be_mmu_mips64el #define helper_atomic_cmpxchgq_le helper_atomic_cmpxchgq_le_mips64el @@ -1472,6 +1476,10 @@ #define helper_atomic_fetch_xorw_be_mmu helper_atomic_fetch_xorw_be_mmu_mips64el #define helper_atomic_fetch_xorw_le helper_atomic_fetch_xorw_le_mips64el #define helper_atomic_fetch_xorw_le_mmu helper_atomic_fetch_xorw_le_mmu_mips64el +#define helper_atomic_ldo_be helper_atomic_ldo_be_mips64el +#define helper_atomic_ldo_be_mmu helper_atomic_ldo_be_mmu_mips64el +#define helper_atomic_ldo_le helper_atomic_ldo_le_mips64el +#define helper_atomic_ldo_le_mmu helper_atomic_ldo_le_mmu_mips64el #define helper_atomic_or_fetchb helper_atomic_or_fetchb_mips64el #define helper_atomic_or_fetchb_mmu helper_atomic_or_fetchb_mmu_mips64el #define helper_atomic_or_fetchl_be helper_atomic_or_fetchl_be_mips64el @@ -1486,6 +1494,10 @@ #define helper_atomic_or_fetchw_be_mmu helper_atomic_or_fetchw_be_mmu_mips64el #define helper_atomic_or_fetchw_le helper_atomic_or_fetchw_le_mips64el #define helper_atomic_or_fetchw_le_mmu helper_atomic_or_fetchw_le_mmu_mips64el +#define helper_atomic_sto_be helper_atomic_sto_be_mips64el +#define helper_atomic_sto_be_mmu helper_atomic_sto_be_mmu_mips64el +#define helper_atomic_sto_le helper_atomic_sto_le_mips64el +#define helper_atomic_sto_le_mmu helper_atomic_sto_le_mmu_mips64el #define helper_atomic_xchgb helper_atomic_xchgb_mips64el #define helper_atomic_xchgb helper_atomic_xchgb_mips64el #define helper_atomic_xchgb_mmu helper_atomic_xchgb_mmu_mips64el diff --git a/qemu/mipsel.h b/qemu/mipsel.h index 78d3b8fa..c6638771 100644 --- a/qemu/mipsel.h +++ b/qemu/mipsel.h @@ -1408,6 +1408,10 @@ #define helper_atomic_cmpxchgl_be_mmu helper_atomic_cmpxchgl_be_mmu_mipsel #define helper_atomic_cmpxchgl_le helper_atomic_cmpxchgl_le_mipsel #define helper_atomic_cmpxchgl_le_mmu helper_atomic_cmpxchgl_le_mmu_mipsel +#define helper_atomic_cmpxchgo_be helper_atomic_cmpxchgo_be_mipsel +#define helper_atomic_cmpxchgo_be_mmu helper_atomic_cmpxchgo_be_mmu_mipsel +#define helper_atomic_cmpxchgo_le helper_atomic_cmpxchgo_le_mipsel +#define helper_atomic_cmpxchgo_le_mmu helper_atomic_cmpxchgo_le_mmu_mipsel #define helper_atomic_cmpxchgq_be helper_atomic_cmpxchgq_be_mipsel #define helper_atomic_cmpxchgq_be_mmu helper_atomic_cmpxchgq_be_mmu_mipsel #define helper_atomic_cmpxchgq_le helper_atomic_cmpxchgq_le_mipsel @@ -1472,6 +1476,10 @@ #define helper_atomic_fetch_xorw_be_mmu helper_atomic_fetch_xorw_be_mmu_mipsel #define helper_atomic_fetch_xorw_le helper_atomic_fetch_xorw_le_mipsel #define helper_atomic_fetch_xorw_le_mmu helper_atomic_fetch_xorw_le_mmu_mipsel +#define helper_atomic_ldo_be helper_atomic_ldo_be_mipsel +#define helper_atomic_ldo_be_mmu helper_atomic_ldo_be_mmu_mipsel +#define helper_atomic_ldo_le helper_atomic_ldo_le_mipsel +#define helper_atomic_ldo_le_mmu helper_atomic_ldo_le_mmu_mipsel #define helper_atomic_or_fetchb helper_atomic_or_fetchb_mipsel #define helper_atomic_or_fetchb_mmu helper_atomic_or_fetchb_mmu_mipsel #define helper_atomic_or_fetchl_be helper_atomic_or_fetchl_be_mipsel @@ -1486,6 +1494,10 @@ #define helper_atomic_or_fetchw_be_mmu helper_atomic_or_fetchw_be_mmu_mipsel #define helper_atomic_or_fetchw_le helper_atomic_or_fetchw_le_mipsel #define helper_atomic_or_fetchw_le_mmu helper_atomic_or_fetchw_le_mmu_mipsel +#define helper_atomic_sto_be helper_atomic_sto_be_mipsel +#define helper_atomic_sto_be_mmu helper_atomic_sto_be_mmu_mipsel +#define helper_atomic_sto_le helper_atomic_sto_le_mipsel +#define helper_atomic_sto_le_mmu helper_atomic_sto_le_mmu_mipsel #define helper_atomic_xchgb helper_atomic_xchgb_mipsel #define helper_atomic_xchgb helper_atomic_xchgb_mipsel #define helper_atomic_xchgb_mmu helper_atomic_xchgb_mmu_mipsel diff --git a/qemu/powerpc.h b/qemu/powerpc.h index 6a28751a..60c05e20 100644 --- a/qemu/powerpc.h +++ b/qemu/powerpc.h @@ -1408,6 +1408,10 @@ #define helper_atomic_cmpxchgl_be_mmu helper_atomic_cmpxchgl_be_mmu_powerpc #define helper_atomic_cmpxchgl_le helper_atomic_cmpxchgl_le_powerpc #define helper_atomic_cmpxchgl_le_mmu helper_atomic_cmpxchgl_le_mmu_powerpc +#define helper_atomic_cmpxchgo_be helper_atomic_cmpxchgo_be_powerpc +#define helper_atomic_cmpxchgo_be_mmu helper_atomic_cmpxchgo_be_mmu_powerpc +#define helper_atomic_cmpxchgo_le helper_atomic_cmpxchgo_le_powerpc +#define helper_atomic_cmpxchgo_le_mmu helper_atomic_cmpxchgo_le_mmu_powerpc #define helper_atomic_cmpxchgq_be helper_atomic_cmpxchgq_be_powerpc #define helper_atomic_cmpxchgq_be_mmu helper_atomic_cmpxchgq_be_mmu_powerpc #define helper_atomic_cmpxchgq_le helper_atomic_cmpxchgq_le_powerpc @@ -1472,6 +1476,10 @@ #define helper_atomic_fetch_xorw_be_mmu helper_atomic_fetch_xorw_be_mmu_powerpc #define helper_atomic_fetch_xorw_le helper_atomic_fetch_xorw_le_powerpc #define helper_atomic_fetch_xorw_le_mmu helper_atomic_fetch_xorw_le_mmu_powerpc +#define helper_atomic_ldo_be helper_atomic_ldo_be_powerpc +#define helper_atomic_ldo_be_mmu helper_atomic_ldo_be_mmu_powerpc +#define helper_atomic_ldo_le helper_atomic_ldo_le_powerpc +#define helper_atomic_ldo_le_mmu helper_atomic_ldo_le_mmu_powerpc #define helper_atomic_or_fetchb helper_atomic_or_fetchb_powerpc #define helper_atomic_or_fetchb_mmu helper_atomic_or_fetchb_mmu_powerpc #define helper_atomic_or_fetchl_be helper_atomic_or_fetchl_be_powerpc @@ -1486,6 +1494,10 @@ #define helper_atomic_or_fetchw_be_mmu helper_atomic_or_fetchw_be_mmu_powerpc #define helper_atomic_or_fetchw_le helper_atomic_or_fetchw_le_powerpc #define helper_atomic_or_fetchw_le_mmu helper_atomic_or_fetchw_le_mmu_powerpc +#define helper_atomic_sto_be helper_atomic_sto_be_powerpc +#define helper_atomic_sto_be_mmu helper_atomic_sto_be_mmu_powerpc +#define helper_atomic_sto_le helper_atomic_sto_le_powerpc +#define helper_atomic_sto_le_mmu helper_atomic_sto_le_mmu_powerpc #define helper_atomic_xchgb helper_atomic_xchgb_powerpc #define helper_atomic_xchgb helper_atomic_xchgb_powerpc #define helper_atomic_xchgb_mmu helper_atomic_xchgb_mmu_powerpc diff --git a/qemu/sparc.h b/qemu/sparc.h index f8bec480..7d9d5c74 100644 --- a/qemu/sparc.h +++ b/qemu/sparc.h @@ -1408,6 +1408,10 @@ #define helper_atomic_cmpxchgl_be_mmu helper_atomic_cmpxchgl_be_mmu_sparc #define helper_atomic_cmpxchgl_le helper_atomic_cmpxchgl_le_sparc #define helper_atomic_cmpxchgl_le_mmu helper_atomic_cmpxchgl_le_mmu_sparc +#define helper_atomic_cmpxchgo_be helper_atomic_cmpxchgo_be_sparc +#define helper_atomic_cmpxchgo_be_mmu helper_atomic_cmpxchgo_be_mmu_sparc +#define helper_atomic_cmpxchgo_le helper_atomic_cmpxchgo_le_sparc +#define helper_atomic_cmpxchgo_le_mmu helper_atomic_cmpxchgo_le_mmu_sparc #define helper_atomic_cmpxchgq_be helper_atomic_cmpxchgq_be_sparc #define helper_atomic_cmpxchgq_be_mmu helper_atomic_cmpxchgq_be_mmu_sparc #define helper_atomic_cmpxchgq_le helper_atomic_cmpxchgq_le_sparc @@ -1472,6 +1476,10 @@ #define helper_atomic_fetch_xorw_be_mmu helper_atomic_fetch_xorw_be_mmu_sparc #define helper_atomic_fetch_xorw_le helper_atomic_fetch_xorw_le_sparc #define helper_atomic_fetch_xorw_le_mmu helper_atomic_fetch_xorw_le_mmu_sparc +#define helper_atomic_ldo_be helper_atomic_ldo_be_sparc +#define helper_atomic_ldo_be_mmu helper_atomic_ldo_be_mmu_sparc +#define helper_atomic_ldo_le helper_atomic_ldo_le_sparc +#define helper_atomic_ldo_le_mmu helper_atomic_ldo_le_mmu_sparc #define helper_atomic_or_fetchb helper_atomic_or_fetchb_sparc #define helper_atomic_or_fetchb_mmu helper_atomic_or_fetchb_mmu_sparc #define helper_atomic_or_fetchl_be helper_atomic_or_fetchl_be_sparc @@ -1486,6 +1494,10 @@ #define helper_atomic_or_fetchw_be_mmu helper_atomic_or_fetchw_be_mmu_sparc #define helper_atomic_or_fetchw_le helper_atomic_or_fetchw_le_sparc #define helper_atomic_or_fetchw_le_mmu helper_atomic_or_fetchw_le_mmu_sparc +#define helper_atomic_sto_be helper_atomic_sto_be_sparc +#define helper_atomic_sto_be_mmu helper_atomic_sto_be_mmu_sparc +#define helper_atomic_sto_le helper_atomic_sto_le_sparc +#define helper_atomic_sto_le_mmu helper_atomic_sto_le_mmu_sparc #define helper_atomic_xchgb helper_atomic_xchgb_sparc #define helper_atomic_xchgb helper_atomic_xchgb_sparc #define helper_atomic_xchgb_mmu helper_atomic_xchgb_mmu_sparc diff --git a/qemu/sparc64.h b/qemu/sparc64.h index 882d3241..8633c780 100644 --- a/qemu/sparc64.h +++ b/qemu/sparc64.h @@ -1408,6 +1408,10 @@ #define helper_atomic_cmpxchgl_be_mmu helper_atomic_cmpxchgl_be_mmu_sparc64 #define helper_atomic_cmpxchgl_le helper_atomic_cmpxchgl_le_sparc64 #define helper_atomic_cmpxchgl_le_mmu helper_atomic_cmpxchgl_le_mmu_sparc64 +#define helper_atomic_cmpxchgo_be helper_atomic_cmpxchgo_be_sparc64 +#define helper_atomic_cmpxchgo_be_mmu helper_atomic_cmpxchgo_be_mmu_sparc64 +#define helper_atomic_cmpxchgo_le helper_atomic_cmpxchgo_le_sparc64 +#define helper_atomic_cmpxchgo_le_mmu helper_atomic_cmpxchgo_le_mmu_sparc64 #define helper_atomic_cmpxchgq_be helper_atomic_cmpxchgq_be_sparc64 #define helper_atomic_cmpxchgq_be_mmu helper_atomic_cmpxchgq_be_mmu_sparc64 #define helper_atomic_cmpxchgq_le helper_atomic_cmpxchgq_le_sparc64 @@ -1472,6 +1476,10 @@ #define helper_atomic_fetch_xorw_be_mmu helper_atomic_fetch_xorw_be_mmu_sparc64 #define helper_atomic_fetch_xorw_le helper_atomic_fetch_xorw_le_sparc64 #define helper_atomic_fetch_xorw_le_mmu helper_atomic_fetch_xorw_le_mmu_sparc64 +#define helper_atomic_ldo_be helper_atomic_ldo_be_sparc64 +#define helper_atomic_ldo_be_mmu helper_atomic_ldo_be_mmu_sparc64 +#define helper_atomic_ldo_le helper_atomic_ldo_le_sparc64 +#define helper_atomic_ldo_le_mmu helper_atomic_ldo_le_mmu_sparc64 #define helper_atomic_or_fetchb helper_atomic_or_fetchb_sparc64 #define helper_atomic_or_fetchb_mmu helper_atomic_or_fetchb_mmu_sparc64 #define helper_atomic_or_fetchl_be helper_atomic_or_fetchl_be_sparc64 @@ -1486,6 +1494,10 @@ #define helper_atomic_or_fetchw_be_mmu helper_atomic_or_fetchw_be_mmu_sparc64 #define helper_atomic_or_fetchw_le helper_atomic_or_fetchw_le_sparc64 #define helper_atomic_or_fetchw_le_mmu helper_atomic_or_fetchw_le_mmu_sparc64 +#define helper_atomic_sto_be helper_atomic_sto_be_sparc64 +#define helper_atomic_sto_be_mmu helper_atomic_sto_be_mmu_sparc64 +#define helper_atomic_sto_le helper_atomic_sto_le_sparc64 +#define helper_atomic_sto_le_mmu helper_atomic_sto_le_mmu_sparc64 #define helper_atomic_xchgb helper_atomic_xchgb_sparc64 #define helper_atomic_xchgb helper_atomic_xchgb_sparc64 #define helper_atomic_xchgb_mmu helper_atomic_xchgb_mmu_sparc64 diff --git a/qemu/tcg-runtime.c b/qemu/tcg-runtime.c index 7e53897a..c7cbb7e5 100644 --- a/qemu/tcg-runtime.c +++ b/qemu/tcg-runtime.c @@ -134,5 +134,23 @@ static void *atomic_mmu_lookup(CPUArchState *env, target_ulong addr, #define DATA_SIZE 8 #include "atomic_template.h" +/* The following is only callable from other helpers, and matches up + with the softmmu version. */ + +#ifdef CONFIG_ATOMIC128 + +#undef EXTRA_ARGS +#undef ATOMIC_NAME +#undef ATOMIC_MMU_LOOKUP + +#define EXTRA_ARGS , TCGMemOpIdx oi, uintptr_t retaddr +#define ATOMIC_NAME(X) \ + HELPER(glue(glue(glue(atomic_ ## X, SUFFIX), END), _mmu)) +#define ATOMIC_MMU_LOOKUP atomic_mmu_lookup(env, addr, DATA_SIZE, retaddr) + +#define DATA_SIZE 16 +#include "atomic_template.h" +#endif /* CONFIG_ATOMIC128 */ + #endif /* !CONFIG_SOFTMMU */ diff --git a/qemu/tcg/tcg.h b/qemu/tcg/tcg.h index c4ae06a9..13a7fdc4 100644 --- a/qemu/tcg/tcg.h +++ b/qemu/tcg/tcg.h @@ -1365,4 +1365,27 @@ GEN_ATOMIC_HELPER_ALL(xchg) #endif /* CONFIG_SOFTMMU */ +#ifdef CONFIG_ATOMIC128 +#include "qemu/int128.h" + +/* These aren't really a "proper" helpers because TCG cannot manage Int128. + However, use the same format as the others, for use by the backends. */ +Int128 helper_atomic_cmpxchgo_le_mmu(CPUArchState *env, target_ulong addr, + Int128 cmpv, Int128 newv, + TCGMemOpIdx oi, uintptr_t retaddr); +Int128 helper_atomic_cmpxchgo_be_mmu(CPUArchState *env, target_ulong addr, + Int128 cmpv, Int128 newv, + TCGMemOpIdx oi, uintptr_t retaddr); + +Int128 helper_atomic_ldo_le_mmu(CPUArchState *env, target_ulong addr, + TCGMemOpIdx oi, uintptr_t retaddr); +Int128 helper_atomic_ldo_be_mmu(CPUArchState *env, target_ulong addr, + TCGMemOpIdx oi, uintptr_t retaddr); +void helper_atomic_sto_le_mmu(CPUArchState *env, target_ulong addr, Int128 val, + TCGMemOpIdx oi, uintptr_t retaddr); +void helper_atomic_sto_be_mmu(CPUArchState *env, target_ulong addr, Int128 val, + TCGMemOpIdx oi, uintptr_t retaddr); + +#endif /* CONFIG_ATOMIC128 */ + #endif /* TCG_H */ diff --git a/qemu/x86_64.h b/qemu/x86_64.h index 1465b1da..b9fef23a 100644 --- a/qemu/x86_64.h +++ b/qemu/x86_64.h @@ -1408,6 +1408,10 @@ #define helper_atomic_cmpxchgl_be_mmu helper_atomic_cmpxchgl_be_mmu_x86_64 #define helper_atomic_cmpxchgl_le helper_atomic_cmpxchgl_le_x86_64 #define helper_atomic_cmpxchgl_le_mmu helper_atomic_cmpxchgl_le_mmu_x86_64 +#define helper_atomic_cmpxchgo_be helper_atomic_cmpxchgo_be_x86_64 +#define helper_atomic_cmpxchgo_be_mmu helper_atomic_cmpxchgo_be_mmu_x86_64 +#define helper_atomic_cmpxchgo_le helper_atomic_cmpxchgo_le_x86_64 +#define helper_atomic_cmpxchgo_le_mmu helper_atomic_cmpxchgo_le_mmu_x86_64 #define helper_atomic_cmpxchgq_be helper_atomic_cmpxchgq_be_x86_64 #define helper_atomic_cmpxchgq_be_mmu helper_atomic_cmpxchgq_be_mmu_x86_64 #define helper_atomic_cmpxchgq_le helper_atomic_cmpxchgq_le_x86_64 @@ -1472,6 +1476,10 @@ #define helper_atomic_fetch_xorw_be_mmu helper_atomic_fetch_xorw_be_mmu_x86_64 #define helper_atomic_fetch_xorw_le helper_atomic_fetch_xorw_le_x86_64 #define helper_atomic_fetch_xorw_le_mmu helper_atomic_fetch_xorw_le_mmu_x86_64 +#define helper_atomic_ldo_be helper_atomic_ldo_be_x86_64 +#define helper_atomic_ldo_be_mmu helper_atomic_ldo_be_mmu_x86_64 +#define helper_atomic_ldo_le helper_atomic_ldo_le_x86_64 +#define helper_atomic_ldo_le_mmu helper_atomic_ldo_le_mmu_x86_64 #define helper_atomic_or_fetchb helper_atomic_or_fetchb_x86_64 #define helper_atomic_or_fetchb_mmu helper_atomic_or_fetchb_mmu_x86_64 #define helper_atomic_or_fetchl_be helper_atomic_or_fetchl_be_x86_64 @@ -1486,6 +1494,10 @@ #define helper_atomic_or_fetchw_be_mmu helper_atomic_or_fetchw_be_mmu_x86_64 #define helper_atomic_or_fetchw_le helper_atomic_or_fetchw_le_x86_64 #define helper_atomic_or_fetchw_le_mmu helper_atomic_or_fetchw_le_mmu_x86_64 +#define helper_atomic_sto_be helper_atomic_sto_be_x86_64 +#define helper_atomic_sto_be_mmu helper_atomic_sto_be_mmu_x86_64 +#define helper_atomic_sto_le helper_atomic_sto_le_x86_64 +#define helper_atomic_sto_le_mmu helper_atomic_sto_le_mmu_x86_64 #define helper_atomic_xchgb helper_atomic_xchgb_x86_64 #define helper_atomic_xchgb helper_atomic_xchgb_x86_64 #define helper_atomic_xchgb_mmu helper_atomic_xchgb_mmu_x86_64