65 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#ifdef __CLC_SCALAR10 11#if defined(__SPIR32__) || defined(CLC_NVPTX)12#if (defined(__CLC_FPSIZE) && __CLC_FPSIZE <= 32) || \13 (defined(__CLC_GENSIZE) && (__CLC_GENSIZE == 32))14#define __CLC_HAS_ATOMIC15#endif16#else // defined(__SPIR32__) || defined(CLC_NVPTX)17#if defined(__CLC_FPSIZE) || (__CLC_GENSIZE >= 32)18#define __CLC_HAS_ATOMIC19#endif20#endif // defined(__SPIR32__) || defined(CLC_NVPTX)21 22#ifdef __CLC_HAS_ATOMIC23 24#ifdef __CLC_FPSIZE25 26#define __CLC_DEFINE_ATOMIC(ADDRSPACE) \27 _CLC_OVERLOAD _CLC_DEF __CLC_GENTYPE __clc_atomic_compare_exchange( \28 volatile ADDRSPACE __CLC_GENTYPE *Ptr, __CLC_GENTYPE Comparator, \29 __CLC_GENTYPE Value, int MemoryOrderEqual, int MemoryOrderUnequal, \30 int MemoryScope) { \31 __CLC_U_GENTYPE Comp = __CLC_AS_U_GENTYPE(Comparator); \32 __scoped_atomic_compare_exchange_n( \33 (ADDRSPACE __CLC_U_GENTYPE *)Ptr, &Comp, __CLC_AS_U_GENTYPE(Value), \34 false, MemoryOrderEqual, MemoryOrderUnequal, MemoryScope); \35 return __CLC_AS_GENTYPE(Comp); \36 }37 38#else39 40#define __CLC_DEFINE_ATOMIC(ADDRSPACE) \41 _CLC_OVERLOAD _CLC_DEF __CLC_GENTYPE __clc_atomic_compare_exchange( \42 volatile ADDRSPACE __CLC_GENTYPE *Ptr, __CLC_GENTYPE Comparator, \43 __CLC_GENTYPE Value, int MemoryOrderEqual, int MemoryOrderUnequal, \44 int MemoryScope) { \45 __scoped_atomic_compare_exchange_n(Ptr, &Comparator, Value, false, \46 MemoryOrderEqual, MemoryOrderUnequal, \47 MemoryScope); \48 return Comparator; \49 }50 51#endif // __CLC_FPSIZE52 53__CLC_DEFINE_ATOMIC(global)54__CLC_DEFINE_ATOMIC(local)55#if _CLC_GENERIC_AS_SUPPORTED56__CLC_DEFINE_ATOMIC()57#endif58 59#undef __CLC_DEFINE_ATOMIC60 61#endif // __CLC_HAS_ATOMIC62#undef __CLC_HAS_ATOMIC63 64#endif // __CLC_SCALAR65