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