diff options
author | Bastien Montagne <montagne29@wanadoo.fr> | 2017-11-23 18:13:23 +0300 |
---|---|---|
committer | Bastien Montagne <montagne29@wanadoo.fr> | 2017-11-23 18:24:33 +0300 |
commit | 105b95835f4da7cf3fa583ee2779ce3bff866891 (patch) | |
tree | 4a121171422447e9f0edcaeaba2ab440d044207c /intern/atomic/atomic_ops.h | |
parent | 75a87abdc907c9bff034f8eb88294b92f8502c44 (diff) |
atomic_ops: add signed versions of primitives.
Reason is motsly that dealing with type conversion in calling code is
not great, makes it less readable, and can generate hidden bugs in case
original type changes and atomic primitive calls are not updated
accordingly...
Diffstat (limited to 'intern/atomic/atomic_ops.h')
-rw-r--r-- | intern/atomic/atomic_ops.h | 17 |
1 files changed, 17 insertions, 0 deletions
diff --git a/intern/atomic/atomic_ops.h b/intern/atomic/atomic_ops.h index 38670be56fd..7fab8f2ac57 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,20 @@ 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 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); |