From cbfd2a8e62835544db750d8be834096e4e4f3a9d Mon Sep 17 00:00:00 2001 From: Sergey Sharybin Date: Mon, 19 Aug 2013 14:03:44 +0000 Subject: Apparently sizeof(unsigned) is 4 bytes on both 32 and 64 bit platforms For now assume sizeof(int) == 4 for all supported platforms, could be changed in the future. Added an assert to functions which depends on this this, so we'll easily notice bad things happening. --- intern/atomic/atomic_ops.h | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) (limited to 'intern/atomic') diff --git a/intern/atomic/atomic_ops.h b/intern/atomic/atomic_ops.h index 0df5e0c4cb1..c064d92d260 100644 --- a/intern/atomic/atomic_ops.h +++ b/intern/atomic/atomic_ops.h @@ -29,6 +29,8 @@ #ifndef ATOMIC_OPS_H__ #define ATOMIC_OPS_H__ +#include + #if defined (__APPLE__) # include #elif defined(_MSC_VER) @@ -52,7 +54,7 @@ #if defined(_M_X64) || defined(__amd64__) || defined(__x86_64__) # define LG_SIZEOF_PTR 3 -# define LG_SIZEOF_INT 3 +# define LG_SIZEOF_INT 2 #else # define LG_SIZEOF_PTR 2 # define LG_SIZEOF_INT 2 @@ -251,6 +253,8 @@ atomic_sub_uint32(uint32_t *p, uint32_t x) ATOMIC_INLINE size_t atomic_add_z(size_t *p, size_t x) { + assert(sizeof(size_t) == 1 << LG_SIZEOF_PTR); + #if (LG_SIZEOF_PTR == 3) return ((size_t)atomic_add_uint64((uint64_t *)p, (uint64_t)x)); #elif (LG_SIZEOF_PTR == 2) @@ -261,6 +265,8 @@ atomic_add_z(size_t *p, size_t x) ATOMIC_INLINE size_t atomic_sub_z(size_t *p, size_t x) { + assert(sizeof(size_t) == 1 << LG_SIZEOF_PTR); + #if (LG_SIZEOF_PTR == 3) return ((size_t)atomic_add_uint64((uint64_t *)p, (uint64_t)-((int64_t)x))); @@ -275,6 +281,8 @@ atomic_sub_z(size_t *p, size_t x) ATOMIC_INLINE unsigned atomic_add_u(unsigned *p, unsigned x) { + assert(sizeof(unsigned) == 1 << LG_SIZEOF_INT); + #if (LG_SIZEOF_INT == 3) return ((unsigned)atomic_add_uint64((uint64_t *)p, (uint64_t)x)); #elif (LG_SIZEOF_INT == 2) @@ -285,6 +293,8 @@ atomic_add_u(unsigned *p, unsigned x) ATOMIC_INLINE unsigned atomic_sub_u(unsigned *p, unsigned x) { + assert(sizeof(unsigned) == 1 << LG_SIZEOF_INT); + #if (LG_SIZEOF_INT == 3) return ((unsigned)atomic_add_uint64((uint64_t *)p, (uint64_t)-((int64_t)x))); -- cgit v1.2.3