70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
|
return __sync_add_and_fetch(p, i);
#elif defined(OF_HAVE_OSATOMIC)
return OSAtomicAdd32Barrier(i, p);
#endif
}
static OF_INLINE void*
of_atomic_add_ptr(volatile void **p, intptr_t i)
{
#if !defined(OF_THREADS)
return (*p += i);
#elif defined(OF_X86_ASM) || defined(OF_AMD64_ASM)
__asm__ (
"lock\n\t"
"xaddl %0, %2\n\t"
|
|
|
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
|
return __sync_add_and_fetch(p, i);
#elif defined(OF_HAVE_OSATOMIC)
return OSAtomicAdd32Barrier(i, p);
#endif
}
static OF_INLINE void*
of_atomic_add_ptr(void* volatile *p, intptr_t i)
{
#if !defined(OF_THREADS)
return (*p += i);
#elif defined(OF_X86_ASM) || defined(OF_AMD64_ASM)
__asm__ (
"lock\n\t"
"xaddl %0, %2\n\t"
|
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
|
return __sync_sub_and_fetch(p, i);
#elif defined(OF_HAVE_OSATOMIC)
return OSAtomicAdd32Barrier(-i, p);
#endif
}
static OF_INLINE void*
of_atomic_sub_ptr(volatile void **p, intptr_t i)
{
#if !defined(OF_THREADS)
return (*p -= i);
#elif defined(OF_X86_ASM) || defined(OF_AMD64_ASM)
__asm__ (
"negl %0\n\t"
"lock\n\t"
|
|
|
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
|
return __sync_sub_and_fetch(p, i);
#elif defined(OF_HAVE_OSATOMIC)
return OSAtomicAdd32Barrier(-i, p);
#endif
}
static OF_INLINE void*
of_atomic_sub_ptr(void* volatile *p, intptr_t i)
{
#if !defined(OF_THREADS)
return (*p -= i);
#elif defined(OF_X86_ASM) || defined(OF_AMD64_ASM)
__asm__ (
"negl %0\n\t"
"lock\n\t"
|