diff options
Diffstat (limited to 'intern/atomic/atomic_ops.h')
-rw-r--r-- | intern/atomic/atomic_ops.h | 23 |
1 files changed, 23 insertions, 0 deletions
diff --git a/intern/atomic/atomic_ops.h b/intern/atomic/atomic_ops.h index 38670be56fd..e849bcf6cef 100644 --- a/intern/atomic/atomic_ops.h +++ b/intern/atomic/atomic_ops.h @@ -82,6 +82,12 @@ ATOMIC_INLINE uint64_t atomic_sub_and_fetch_uint64(uint64_t *p, uint64_t x); ATOMIC_INLINE uint64_t atomic_fetch_and_add_uint64(uint64_t *p, uint64_t x); ATOMIC_INLINE uint64_t atomic_fetch_and_sub_uint64(uint64_t *p, uint64_t x); ATOMIC_INLINE uint64_t atomic_cas_uint64(uint64_t *v, uint64_t old, uint64_t _new); + +ATOMIC_INLINE int64_t atomic_add_and_fetch_int64(int64_t *p, int64_t x); +ATOMIC_INLINE int64_t atomic_sub_and_fetch_int64(int64_t *p, int64_t x); +ATOMIC_INLINE int64_t atomic_fetch_and_add_int64(int64_t *p, int64_t x); +ATOMIC_INLINE int64_t atomic_fetch_and_sub_int64(int64_t *p, int64_t x); +ATOMIC_INLINE int64_t atomic_cas_int64(int64_t *v, int64_t old, int64_t _new); #endif ATOMIC_INLINE uint32_t atomic_add_and_fetch_uint32(uint32_t *p, uint32_t x); @@ -92,9 +98,23 @@ ATOMIC_INLINE uint32_t atomic_fetch_and_add_uint32(uint32_t *p, uint32_t x); ATOMIC_INLINE uint32_t atomic_fetch_and_or_uint32(uint32_t *p, uint32_t x); ATOMIC_INLINE uint32_t atomic_fetch_and_and_uint32(uint32_t *p, uint32_t x); +ATOMIC_INLINE int32_t atomic_add_and_fetch_int32(int32_t *p, int32_t x); +ATOMIC_INLINE int32_t atomic_sub_and_fetch_int32(int32_t *p, int32_t x); +ATOMIC_INLINE int32_t atomic_cas_int32(int32_t *v, int32_t old, int32_t _new); + +ATOMIC_INLINE int32_t atomic_fetch_and_add_int32(int32_t *p, int32_t x); +ATOMIC_INLINE int32_t atomic_fetch_and_or_int32(int32_t *p, int32_t x); +ATOMIC_INLINE int32_t atomic_fetch_and_and_int32(int32_t *p, int32_t x); + ATOMIC_INLINE uint8_t atomic_fetch_and_or_uint8(uint8_t *p, uint8_t b); ATOMIC_INLINE uint8_t atomic_fetch_and_and_uint8(uint8_t *p, uint8_t b); +ATOMIC_INLINE int8_t atomic_fetch_and_or_int8(int8_t *p, int8_t b); +ATOMIC_INLINE int8_t atomic_fetch_and_and_int8(int8_t *p, int8_t b); + +ATOMIC_INLINE char atomic_fetch_and_or_char(char *p, char b); +ATOMIC_INLINE char atomic_fetch_and_and_char(char *p, char b); + ATOMIC_INLINE size_t atomic_add_and_fetch_z(size_t *p, size_t x); ATOMIC_INLINE size_t atomic_sub_and_fetch_z(size_t *p, size_t x); ATOMIC_INLINE size_t atomic_fetch_and_add_z(size_t *p, size_t x); @@ -110,6 +130,9 @@ ATOMIC_INLINE unsigned int atomic_cas_u(unsigned int *v, unsigned int old, unsig ATOMIC_INLINE void *atomic_cas_ptr(void **v, void *old, void *_new); + +ATOMIC_INLINE float atomic_cas_float(float *v, float old, float _new); + /* WARNING! Float 'atomics' are really faked ones, those are actually closer to some kind of spinlock-sync'ed operation, * which means they are only efficient if collisions are highly unlikely (i.e. if probability of two threads * working on the same pointer at the same time is very low). */ |