Aaron Watry | 50a7bcb | 2013-09-05 16:04:01 +0000 | [diff] [blame] | 1 | #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 | |
| 20 | ATOMIC_FUNC(atomic_add) |
Aaron Watry | 283e3fa | 2013-09-06 20:20:21 +0000 | [diff] [blame^] | 21 | ATOMIC_FUNC(atomic_sub) |