brintos

brintos / llvm-project-archived public Read only

0
0
Text · 2.6 KiB · 74284fd Raw
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