blob: bd5ee649917ed75d36e60cc922718f47f528a478 [file] [log] [blame]
Aaron Watry50a7bcb2013-09-05 16:04:01 +00001#include <clc/clc.h>
2
3#define ATOMIC_FUNC_TYPE(SIGN, TYPE, FUNCTION, CL_ADDRSPACE, LLVM_ADDRSPACE) \
4_CLC_OVERLOAD _CLC_DEF SIGN TYPE FUNCTION (volatile CL_ADDRSPACE SIGN TYPE *p, SIGN TYPE val) { \
5 return (SIGN TYPE)__clc_##FUNCTION##_addr##LLVM_ADDRSPACE((volatile CL_ADDRSPACE signed TYPE*)p, (signed TYPE)val); \
6}
7
8#define ATOMIC_FUNC_SIGN(TYPE, FUNCTION, CL_ADDRSPACE, LLVM_ADDRSPACE) \
9 _CLC_DECL signed TYPE __clc_##FUNCTION##_addr##LLVM_ADDRSPACE(volatile CL_ADDRSPACE signed TYPE*, signed TYPE); \
10 ATOMIC_FUNC_TYPE(signed, TYPE, FUNCTION, CL_ADDRSPACE, LLVM_ADDRSPACE) \
11 ATOMIC_FUNC_TYPE(unsigned, TYPE, FUNCTION, CL_ADDRSPACE, LLVM_ADDRSPACE)
12
13#define ATOMIC_FUNC_ADDRSPACE(TYPE, FUNCTION) \
14 ATOMIC_FUNC_SIGN(TYPE, FUNCTION, global, 1) \
15 ATOMIC_FUNC_SIGN(TYPE, FUNCTION, local, 3)
16
17#define ATOMIC_FUNC(FUNCTION) \
18 ATOMIC_FUNC_ADDRSPACE(int, FUNCTION)
19
20ATOMIC_FUNC(atomic_add)
Aaron Watry283e3fa2013-09-06 20:20:21 +000021ATOMIC_FUNC(atomic_sub)