39#define TEST(A, T, name, V1, V2) \
43 atomic_store(&object, (T)(V1)); \
44 r = atomic_exchange(&object, (T)(V2)); \
45 printf(name " exchange %lld\n", (long long)r); \
46 r = atomic_fetch_add(&object, (T)1); \
47 printf(name " add %lld\n", (long long)r); \
48 r = atomic_fetch_sub(&object, (T)((uint64_t)(V2) + 1)); \
49 printf(name " sub %lld\n", (long long)r); \
50 r = atomic_fetch_or(&object, (T)0x10); \
51 printf(name " or %lld\n", (long long)r); \
52 r = atomic_fetch_xor(&object, (T)0x10); \
53 printf(name " xor %lld\n", (long long)r); \
54 r = atomic_fetch_and(&object, (T)1); \
55 printf(name " and %lld\n", (long long)r); \
56 atomic_store(&object, (T)0x5a); \
58 r = atomic_compare_exchange_strong(&object, &expected, (T)(V2)); \
59 printf(name " cas %lld %lld\n", \
60 (long long)r, (long long)expected); \
62 r = atomic_compare_exchange_weak(&object, &expected, (T)(V1)); \
64 printf(name " cas weak %lld %lld %lld\n", \
65 (long long)r, (long long)expected, \
66 (long long)atomic_load(&object)); \
80 const int *
const arr[2] = { &x,
NULL };
85 void (*loaded_callback)(void);
96 TEST(
atomic_llong,
long long,
"llong", -9007199254740993LL, 9007199254740993LL);
111 printf(
"uint wrap %lld %lld\n",
115 printf(
"ullong add %lld %lld\n",
119 printf(
"ullong sub %lld %lld\n",
123 printf(
"uchar add %lld %lld\n",
132 printf(
"bool %d %d %d %d %d\n", r1, r2, r3,
140 printf(
"ptr %d %d %d\n", r1, r2, pe == &x);
152 printf(
"lst %d %d\n", l == arr, **l == x);
158 printf(
"flag %d %d %d\n", r1, r2, r3);
static void callback(void)
#define TEST(A, T, name, V1, V2)
#define i(width, name, range_min, range_max)
__device__ int printf(const char *,...)
static void callback(void *priv_data, int index, uint8_t *buf, int buf_size, int64_t time, enum dshowDeviceType devtype)
FF_ATOMIC_ALIGN64 int_least64_t atomic_int_least64_t
#define atomic_store(object, desired)
unsigned char atomic_uchar
FF_ATOMIC_ALIGN64 unsigned long long atomic_ullong
#define atomic_compare_exchange_strong(object, expected, desired)
#define atomic_exchange(object, desired)
FF_ATOMIC_ALIGN64 uint_least64_t atomic_uint_least64_t
#define atomic_flag_clear(object)
FF_ATOMIC_ALIGN64 long long atomic_llong
#define atomic_fetch_sub(object, operand)
#define atomic_load_explicit(object, order)
#define kill_dependency(y)
#define atomic_signal_fence(order)
#define atomic_thread_fence(order)
unsigned short atomic_ushort
unsigned long atomic_ulong
#define atomic_flag_test_and_set(object)
#define atomic_load(object)
#define atomic_store_explicit(object, desired, order)
int_fast16_t atomic_int_fast16_t
uint_fast32_t atomic_uint_fast32_t
int_least16_t atomic_int_least16_t
FF_ATOMIC_ALIGN64 intmax_t atomic_intmax_t
#define atomic_fetch_add(object, operand)
#define atomic_init(obj, value)
uint_least32_t atomic_uint_least32_t