Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSergey Sharybin <sergey.vfx@gmail.com>2013-08-19 18:03:44 +0400
committerSergey Sharybin <sergey.vfx@gmail.com>2013-08-19 18:03:44 +0400
commitcbfd2a8e62835544db750d8be834096e4e4f3a9d (patch)
treea976e520e00ba0e32e9d71a20a790be9f2564fd5 /intern/atomic/atomic_ops.h
parentc79e175d9b4206183cb969442210e4be1dba40b2 (diff)
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.
Diffstat (limited to 'intern/atomic/atomic_ops.h')
-rw-r--r--intern/atomic/atomic_ops.h12
1 files changed, 11 insertions, 1 deletions
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 <assert.h>
+
#if defined (__APPLE__)
# include <libkern/OSAtomic.h>
#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)));