1#if !defined(__SM_ATOMIC_FUNCTIONS_H__)
2# define __SM_ATOMIC_FUNCTIONS_H__
43__uAtomicOr(
unsigned int *address,
unsigned int val);
53__uAtomicCAS(
unsigned int *address,
unsigned int compare,
unsigned int val);
59 __ESBMC_atomic_begin();
60 int old_value, new_value;
63 new_value = old_value + val;
73 __ESBMC_atomic_begin();
74 unsigned int old_value, new_value;
77 new_value = old_value + val;
86 __ESBMC_atomic_begin();
99 __ESBMC_atomic_begin();
100 unsigned int old_value;
102 old_value = *address;
105 __ESBMC_atomic_end();
111 __ESBMC_atomic_begin();
114 old_value = *address;
117 __ESBMC_atomic_end();
123 __ESBMC_atomic_begin();
126 old_value = *address;
130 __ESBMC_atomic_end();
137 __ESBMC_atomic_begin();
138 unsigned int old_value;
140 old_value = *address;
144 __ESBMC_atomic_end();
150 __ESBMC_atomic_begin();
153 old_value = *address;
157 __ESBMC_atomic_end();
164 __ESBMC_atomic_begin();
165 unsigned int old_value;
167 old_value = *address;
171 __ESBMC_atomic_end();
178 __ESBMC_atomic_begin();
179 unsigned int old_value;
181 old_value = *address;
186 if (old_value >= val)
189 *address = (old_value + 1);
191 __ESBMC_atomic_end();
198 __ESBMC_atomic_begin();
199 unsigned int old_value;
201 old_value = *address;
207 if ((old_value == val) | (old_value > val))
210 *address = (old_value - 1);
212 __ESBMC_atomic_end();
218 __ESBMC_atomic_begin();
220 old_value = *address;
222 *address = (old_value & val);
224 __ESBMC_atomic_end();
231 __ESBMC_atomic_begin();
232 unsigned int old_value;
233 old_value = *address;
235 *address = (old_value & val);
237 __ESBMC_atomic_end();
243 __ESBMC_atomic_begin();
245 old_value = *address;
247 *address = (old_value | val);
249 __ESBMC_atomic_end();
256 __ESBMC_atomic_begin();
257 unsigned int old_value;
258 old_value = *address;
260 *address = (old_value | val);
262 __ESBMC_atomic_end();
268 __ESBMC_atomic_begin();
270 old_value = *address;
272 *address = (old_value ^ val);
274 __ESBMC_atomic_end();
281 __ESBMC_atomic_begin();
283 old_value = *address;
285 *address = (old_value ^ val);
287 __ESBMC_atomic_end();
293 __ESBMC_atomic_begin();
295 old_value = *address;
300 if (old_value == compare)
303 *address = old_value;
305 __ESBMC_atomic_end();
310__uAtomicCAS(
unsigned int *address,
unsigned int compare,
unsigned int val)
312 __ESBMC_atomic_begin();
313 unsigned int old_value;
314 old_value = *address;
319 if (old_value == compare)
322 *address = old_value;
324 __ESBMC_atomic_end();
441atomicCAS(
unsigned int *address,
unsigned int compare,
unsigned int val)
450__ullAtomicAdd(
unsigned long long int *address,
unsigned long long int val);
453__ullAtomicExch(
unsigned long long int *address,
unsigned long long int val);
456 unsigned long long int *address,
457 unsigned long long int compare,
458 unsigned long long int val);
470 __ESBMC_atomic_begin();
471 unsigned long long int old_value, new_value;
473 old_value = *address;
474 new_value = old_value + val;
475 *address = new_value;
477 __ESBMC_atomic_end();
484 __ESBMC_atomic_begin();
485 unsigned long long int old_value;
487 old_value = *address;
490 __ESBMC_atomic_end();
495 unsigned long long int *address,
496 unsigned long long int compare,
497 unsigned long long int val)
499 __ESBMC_atomic_begin();
500 unsigned long long int old_value;
501 old_value = *address;
506 if (old_value == compare)
509 *address = old_value;
511 __ESBMC_atomic_end();
524atomicAdd(
unsigned long long int *address,
unsigned long long int val)
530atomicExch(
unsigned long long int *address,
unsigned long long int val)
536 unsigned long long int *address,
537 unsigned long long int compare,
538 unsigned long long int val)
562 __ESBMC_atomic_begin();
563 float old_value, new_value;
565 old_value = *address;
566 new_value = old_value + val;
567 *address = new_value;
569 __ESBMC_atomic_end();
587__ullAtomicMin(
unsigned long long *address,
unsigned long long val);
589__ullAtomicMax(
unsigned long long *address,
unsigned long long val);
591__ullAtomicAnd(
unsigned long long int *address,
unsigned long long int val);
593__ullAtomicOr(
unsigned long long *address,
unsigned long long val);
595__ullAtomicXor(
unsigned long long *address,
unsigned long long val);
602 __ESBMC_atomic_begin();
605 old_value = *address;
609 __ESBMC_atomic_end();
616 __ESBMC_atomic_begin();
619 old_value = *address;
623 __ESBMC_atomic_end();
630 __ESBMC_atomic_begin();
631 unsigned long long old_value;
633 old_value = *address;
637 __ESBMC_atomic_end();
644 __ESBMC_atomic_begin();
645 unsigned long long old_value;
647 old_value = *address;
651 __ESBMC_atomic_end();
658 __ESBMC_atomic_begin();
659 unsigned long long int old_value;
660 old_value = *address;
662 *address = (old_value & val);
664 __ESBMC_atomic_end();
671 __ESBMC_atomic_begin();
672 unsigned long long old_value;
673 old_value = *address;
675 *address = (old_value | val);
677 __ESBMC_atomic_end();
684 __ESBMC_atomic_begin();
685 unsigned long long old_value;
686 old_value = *address;
688 *address = (old_value ^ val);
690 __ESBMC_atomic_end();
709atomicMin(
unsigned long long *address,
unsigned long long val)
715atomicMax(
unsigned long long *address,
unsigned long long val)
721atomicAnd(
unsigned long long int *address,
unsigned long long int val)
727atomicOr(
unsigned long long *address,
unsigned long long val)
733atomicXor(
unsigned long long *address,
unsigned long long val)
pthread_cond_t cond
Definition cuda.h:50
#define __device_builtin__
Definition host_defines.h:120
#define __device__
Definition host_defines.h:113
#define __inline__
Definition linux.hpp:101
__device__ unsigned long long int __ullAtomicAdd(unsigned long long int *address, unsigned long long int val)
Definition sm_atomic_functions.h:468
__device__ __device_builtin__ unsigned long long __ullAtomicOr(unsigned long long *address, unsigned long long val)
Definition sm_atomic_functions.h:669
__device__ __device_builtin__ unsigned long long __ullAtomicMin(unsigned long long *address, unsigned long long val)
Definition sm_atomic_functions.h:628
__device__ unsigned long long int __ullAtomicCAS(unsigned long long int *address, unsigned long long int compare, unsigned long long int val)
Definition sm_atomic_functions.h:494
__device__ int __iAtomicXor(int *address, int val)
Definition sm_atomic_functions.h:266
__device__ unsigned long long int __ullAtomicExch(unsigned long long int *address, unsigned long long int val)
Definition sm_atomic_functions.h:482
static __inline__ __device__ int atomicAnd(int *address, int val)
Definition sm_atomic_functions.h:402
__device__ int __iAtomicExch(int *address, int val)
Definition sm_atomic_functions.h:84
__device__ int __iAtomicOr(int *address, int val)
Definition sm_atomic_functions.h:241
__device__ __device_builtin__ unsigned long long int __ullAtomicAnd(unsigned long long int *address, unsigned long long int val)
Definition sm_atomic_functions.h:656
__device__ unsigned int __uAtomicOr(unsigned int *address, unsigned int val)
Definition sm_atomic_functions.h:254
__device__ int __iAtomicAnd(int *address, int val)
Definition sm_atomic_functions.h:216
static __inline__ __device__ int atomicXor(int *address, int val)
Definition sm_atomic_functions.h:424
__device__ __device_builtin__ long long __illAtomicMin(long long *address, long long val)
Definition sm_atomic_functions.h:600
__device__ int __iAtomicAdd(int *address, int val)
Definition sm_atomic_functions.h:57
__device__ int __all(int cond)
static __inline__ __device__ int atomicOr(int *address, int val)
Definition sm_atomic_functions.h:413
__device__ int __any(int cond)
static __inline__ __device__ unsigned int atomicDec(unsigned int *address, unsigned int val)
Definition sm_atomic_functions.h:397
__device__ unsigned int __uAtomicMin(unsigned int *address, unsigned int val)
Definition sm_atomic_functions.h:135
__device__ __device_builtin__ unsigned long long __ullAtomicXor(unsigned long long *address, unsigned long long val)
Definition sm_atomic_functions.h:682
__device__ int __iAtomicMin(int *address, int val)
Definition sm_atomic_functions.h:121
static __inline__ __device__ int atomicAdd(int *address, int val)
Definition sm_atomic_functions.h:330
__device__ unsigned int __uAtomicXor(unsigned int *address, unsigned int val)
Definition sm_atomic_functions.h:279
__device__ __device_builtin__ unsigned long long __ullAtomicMax(unsigned long long *address, unsigned long long val)
Definition sm_atomic_functions.h:642
__device__ float __fAtomicAdd(float *address, float val)
Definition sm_atomic_functions.h:560
__device__ unsigned int __uAtomicAnd(unsigned int *address, unsigned int val)
Definition sm_atomic_functions.h:229
__device__ int __iAtomicMax(int *address, int val)
Definition sm_atomic_functions.h:148
static __inline__ __device__ unsigned int atomicInc(unsigned int *address, unsigned int val)
Definition sm_atomic_functions.h:391
static __inline__ __device__ int atomicExch(int *address, int val)
Definition sm_atomic_functions.h:352
static __inline__ __device__ int atomicSub(int *address, int val)
Definition sm_atomic_functions.h:341
__device__ unsigned int __uAtomicInc(unsigned int *address, unsigned int val)
Definition sm_atomic_functions.h:176
static __inline__ __device__ int atomicCAS(int *address, int compare, int val)
Definition sm_atomic_functions.h:435
__device__ float __fAtomicExch(float *address, float val)
Definition sm_atomic_functions.h:109
__device__ unsigned int __uAtomicDec(unsigned int *address, unsigned int val)
Definition sm_atomic_functions.h:196
__device__ __device_builtin__ long long __illAtomicMax(long long *address, long long val)
Definition sm_atomic_functions.h:614
__device__ unsigned int __uAtomicExch(unsigned int *address, unsigned int val)
Definition sm_atomic_functions.h:97
static __inline__ __device__ int atomicMin(int *address, int val)
Definition sm_atomic_functions.h:368
__device__ unsigned int __uAtomicAdd(unsigned int *address, unsigned int val)
Definition sm_atomic_functions.h:71
__device__ unsigned int __uAtomicCAS(unsigned int *address, unsigned int compare, unsigned int val)
Definition sm_atomic_functions.h:310
static __inline__ __device__ int atomicMax(int *address, int val)
Definition sm_atomic_functions.h:379
__device__ unsigned int __uAtomicMax(unsigned int *address, unsigned int val)
Definition sm_atomic_functions.h:162
__device__ int __iAtomicCAS(int *address, int compare, int val)
Definition sm_atomic_functions.h:291
static __inline__ __device__ bool any(bool cond)
Definition sm_atomic_functions.h:543
static __inline__ __device__ bool all(bool cond)
Definition sm_atomic_functions.h:548