+# define atomic_compare_exchange_strong(object,expected,desired) \
+ atomic_type_dispatch_16_64(InterlockedCompareExchange, object, *expected, desired) == *expected
+# define atomic_compare_exchange_strong_explicit(object,expected,desired,order) \
+ atomic_compare_exchange_strong(object, expected, desired)
+# define atomic_compare_exchange_weak(object,expected,desired) \
+ atomic_compare_exchange_strong(object, expected, desired)
+# define atomic_compare_exchange_weak_explicit(object,expected,desired,order) \
+ atomic_compare_exchange_weak(object, expected, desired)
+
+# define atomic_fetch_add(object,operand) \
+ atomic_type_dispatch_32_64(InterlockedExchangeAdd, object, operand)
+# define atomic_fetch_add_explicit(object,operand,order) \
+ atomic_fetch_add(object, operand)
+
+# define atomic_fetch_sub(object,operand) \
+ atomic_type_dispatch_32_64(InterlockedExchangeAdd, object, -(LONGLONG)operand)
+# define atomic_fetch_sub_explicit(object,operand,order) \
+ atomic_fetch_sub(object, operand)
+
+# define atomic_fetch_or(object,operand) \
+ atomic_type_dispatch_8_64(InterlockedOr, object, operand)
+# define atomic_fetch_or_explicit(object,operand,order) \
+ atomic_fetch_or(object, operand)
+
+# define atomic_fetch_xor(object,operand) \
+ atomic_type_dispatch_8_64(InterlockedXor, object, operand)
+# define atomic_fetch_xor_explicit(object,operand,order) \
+ atomic_fetch_sub(object, operand)
+
+# define atomic_fetch_and(object,operand) \
+ atomic_type_dispatch_8_64(InterlockedAnd, object, operand)
+# define atomic_fetch_and_explicit(object,operand,order) \
+ atomic_fetch_and(object, operand)
+
+# define atomic_flag_test_and_set(object) \
+ atomic_exchange(object, true)
+
+# define atomic_flag_test_and_set_explicit(object,order) \
+ atomic_flag_test_and_set(object)