67 lines · plain
1//===----------------------------------------------------------------------===//2//3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.4// See https://llvm.org/LICENSE.txt for license information.5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception6//7//===----------------------------------------------------------------------===//8 9#include <clc/atomic/clc_atomic_flag_test_and_set.h>10#include <clc/opencl/atomic/atomic_flag_test_and_set.h>11#include <clc/opencl/utils.h>12 13#if defined(__opencl_c_atomic_order_seq_cst) && \14 defined(__opencl_c_atomic_scope_device)15 16#define __CLC_DEFINE_ATOMIC_FLAG_TEST_AND_SET(ADDRSPACE) \17 _CLC_OVERLOAD _CLC_DEF bool atomic_flag_test_and_set( \18 volatile ADDRSPACE atomic_flag *object) { \19 return __clc_atomic_flag_test_and_set( \20 (ADDRSPACE int *)object, __ATOMIC_SEQ_CST, __MEMORY_SCOPE_DEVICE); \21 }22 23__CLC_DEFINE_ATOMIC_FLAG_TEST_AND_SET(global)24__CLC_DEFINE_ATOMIC_FLAG_TEST_AND_SET(local)25#if defined(__opencl_c_generic_address_space)26__CLC_DEFINE_ATOMIC_FLAG_TEST_AND_SET()27#endif28 29#undef __CLC_DEFINE_ATOMIC_FLAG_TEST_AND_SET30 31#endif // defined(__opencl_c_atomic_order_seq_cst) &&32 // defined(__opencl_c_atomic_scope_device)33 34#if defined(__opencl_c_atomic_scope_device)35 36#define __CLC_DEFINE_ATOMIC_FLAG_TEST_AND_SET(ADDRSPACE) \37 _CLC_OVERLOAD _CLC_DEF bool atomic_flag_test_and_set_explicit( \38 volatile ADDRSPACE atomic_flag *object, memory_order order) { \39 return __clc_atomic_flag_test_and_set((ADDRSPACE int *)object, order, \40 __MEMORY_SCOPE_DEVICE); \41 }42 43__CLC_DEFINE_ATOMIC_FLAG_TEST_AND_SET(global)44__CLC_DEFINE_ATOMIC_FLAG_TEST_AND_SET(local)45#if defined(__opencl_c_generic_address_space)46__CLC_DEFINE_ATOMIC_FLAG_TEST_AND_SET()47#endif48 49#undef __CLC_DEFINE_ATOMIC_FLAG_TEST_AND_SET50 51#endif // defined(__opencl_c_atomic_scope_device)52 53#define __CLC_DEFINE_ATOMIC_FLAG_TEST_AND_SET(ADDRSPACE) \54 _CLC_OVERLOAD _CLC_DEF bool atomic_flag_test_and_set_explicit( \55 volatile ADDRSPACE atomic_flag *object, memory_order order, \56 memory_scope scope) { \57 return __clc_atomic_flag_test_and_set( \58 (ADDRSPACE int *)object, order, \59 __opencl_get_clang_memory_scope(scope)); \60 }61 62__CLC_DEFINE_ATOMIC_FLAG_TEST_AND_SET(global)63__CLC_DEFINE_ATOMIC_FLAG_TEST_AND_SET(local)64#if defined(__opencl_c_generic_address_space)65__CLC_DEFINE_ATOMIC_FLAG_TEST_AND_SET()66#endif67