brintos

brintos / llvm-project-archived public Read only

0
0
Text · 2.6 KiB · c9f9449 Raw
62 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_clear.h>10#include <clc/opencl/atomic/atomic_flag_clear.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_CLEAR(ADDRSPACE)                              \17  _CLC_OVERLOAD _CLC_DEF void atomic_flag_clear(                               \18      volatile ADDRSPACE atomic_flag *object) {                                \19    __clc_atomic_flag_clear((ADDRSPACE int *)object, __ATOMIC_SEQ_CST,         \20                            __MEMORY_SCOPE_DEVICE);                            \21  }22 23__CLC_DEFINE_ATOMIC_FLAG_CLEAR(global)24__CLC_DEFINE_ATOMIC_FLAG_CLEAR(local)25#if defined(__opencl_c_generic_address_space)26__CLC_DEFINE_ATOMIC_FLAG_CLEAR()27#endif28 29#endif // defined(__opencl_c_atomic_order_seq_cst) &&30       // defined(__opencl_c_atomic_scope_device)31 32#if defined(__opencl_c_atomic_scope_device)33 34#define __CLC_DEFINE_ATOMIC_FLAG_CLEAR_ORDER(ADDRSPACE)                        \35  _CLC_OVERLOAD _CLC_DEF void atomic_flag_clear_explicit(                      \36      volatile ADDRSPACE atomic_flag *object, memory_order order) {            \37    __clc_atomic_flag_clear((ADDRSPACE int *)object, order,                    \38                            __MEMORY_SCOPE_DEVICE);                            \39  }40 41__CLC_DEFINE_ATOMIC_FLAG_CLEAR_ORDER(global)42__CLC_DEFINE_ATOMIC_FLAG_CLEAR_ORDER(local)43#if defined(__opencl_c_generic_address_space)44__CLC_DEFINE_ATOMIC_FLAG_CLEAR_ORDER()45#endif46 47#endif // defined(__opencl_c_atomic_scope_device)48 49#define __CLC_DEFINE_ATOMIC_FLAG_CLEAR_ORDER_SCOPE(ADDRSPACE)                  \50  _CLC_OVERLOAD _CLC_DEF void atomic_flag_clear_explicit(                      \51      volatile ADDRSPACE atomic_flag *object, memory_order order,              \52      memory_scope scope) {                                                    \53    __clc_atomic_flag_clear((ADDRSPACE int *)object, order,                    \54                            __opencl_get_clang_memory_scope(scope));           \55  }56 57__CLC_DEFINE_ATOMIC_FLAG_CLEAR_ORDER_SCOPE(global)58__CLC_DEFINE_ATOMIC_FLAG_CLEAR_ORDER_SCOPE(local)59#if defined(__opencl_c_generic_address_space)60__CLC_DEFINE_ATOMIC_FLAG_CLEAR_ORDER_SCOPE()61#endif62