28#include "../all_aligned_atomic_load_store.h"
32#ifndef AO_ASSUME_WINDOWS98
34# define AO_ASSUME_WINDOWS98
44# define AO_HAVE_nop_full
49#ifndef AO_HAVE_test_and_set_full
50# include "../test_and_set_t_is_ao_t.h"
54#if _M_ARM >= 7 && !defined(AO_NO_DOUBLE_CAS)
56# include "../standard_ao_double_t.h"
59# pragma intrinsic (_InterlockedCompareExchange64)
60# pragma intrinsic (_InterlockedCompareExchange64_acq)
61# pragma intrinsic (_InterlockedCompareExchange64_nf)
62# pragma intrinsic (_InterlockedCompareExchange64_rel)
70 (__int64
volatile *)addr,
74# define AO_HAVE_double_compare_and_swap
82 (__int64
volatile *)addr,
86# define AO_HAVE_double_compare_and_swap_acquire
94 (__int64
volatile *)addr,
98# define AO_HAVE_double_compare_and_swap_release
106 (__int64
volatile *)addr,
110# define AO_HAVE_double_compare_and_swap_full
AO_INLINE int AO_double_compare_and_swap(volatile AO_double_t *addr, AO_double_t old_val, AO_double_t new_val)
AO_INLINE int AO_double_compare_and_swap_release(volatile AO_double_t *addr, AO_double_t old_val, AO_double_t new_val)
AO_INLINE int AO_double_compare_and_swap_acquire(volatile AO_double_t *addr, AO_double_t old_val, AO_double_t new_val)
AO_INLINE int AO_double_compare_and_swap_full(volatile AO_double_t *addr, AO_double_t old_val, AO_double_t new_val)
AO_INLINE void AO_nop_full(void)
#define AO_ASSERT_ADDR_ALIGNED(addr)
#define AO_compiler_barrier()
unsigned long long double_ptr_storage
double_ptr_storage AO_whole