brintos

brintos / llvm-project-archived public Read only

0
0
Text · 2.8 KiB · e58079e Raw
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