24#include "../all_aligned_atomic_load_store.h"
26#if !defined(AO_ASSUME_VISTA) && _MSC_VER >= 1910
29# define AO_ASSUME_VISTA
32#if !defined(AO_ASSUME_WINDOWS98) \
33 && (defined(AO_ASSUME_VISTA) || _MSC_VER >= 1400)
35# define AO_ASSUME_WINDOWS98
38#if !defined(AO_USE_PENTIUM4_INSTRS) && _M_IX86_FP >= 2
40# define AO_USE_PENTIUM4_INSTRS
45#ifndef AO_USE_INTERLOCKED_INTRINSICS
47# define AO_USE_INTERLOCKED_INTRINSICS
58#if defined(AO_USE_PENTIUM4_INSTRS)
65#define AO_HAVE_nop_full
75#if !defined(AO_NO_ASM_XADD) && !defined(AO_HAVE_char_fetch_and_add_full)
83 lock xadd
byte ptr [ebx], al
87# define AO_HAVE_char_fetch_and_add_full
96 lock xadd word ptr [ebx], ax
100# define AO_HAVE_short_fetch_and_add_full
103#ifndef AO_HAVE_test_and_set_full
104# include "../test_and_set_t_is_char.h"
113 xchg
byte ptr [ebx],al ;
117# define AO_HAVE_test_and_set_full
120#if defined(_WIN64) && !defined(CPPCHECK)
121# error wrong architecture
124#ifdef AO_ASSUME_VISTA
125# include "../standard_ao_double_t.h"
129# define AO_ACCESS_double_CHECK_ALIGNED
130# include "../loadstore/double_atomic_load_store.h"
134# pragma intrinsic (_InterlockedCompareExchange64)
143 (__int64
volatile *)addr,
147# define AO_HAVE_double_compare_and_swap_full
156#include "../ordered_except_wr.h"
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)
AO_INLINE unsigned char AO_char_fetch_and_add_full(volatile unsigned char *p, unsigned char incr)
AO_INLINE unsigned short AO_short_fetch_and_add_full(volatile unsigned short *p, unsigned short incr)
AO_INLINE AO_TS_VAL_t AO_test_and_set_full(volatile AO_TS_t *addr)
unsigned long long double_ptr_storage
double_ptr_storage AO_whole