brintos

brintos / llvm-project-archived public Read only

0
0
Text · 3.3 KiB · 6926b82 Raw
83 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#ifndef __CLC_CASTTYPE25#define __CLC_CASTTYPE __CLC_GENTYPE26#endif27 28#ifndef __CLC_AS_RETTYPE29#define __CLC_AS_RETTYPE(x) x30#endif31 32#ifndef __CLC_AS_CASTTYPE33#define __CLC_AS_CASTTYPE(x) x34#endif35 36#ifdef __CLC_NO_VALUE_ARG37#define __CLC_DEFINE_ATOMIC(ADDRSPACE)                                         \38  _CLC_OVERLOAD _CLC_DEF __CLC_GENTYPE __CLC_FUNCTION(                         \39      volatile ADDRSPACE __CLC_GENTYPE *Ptr, int MemoryOrder,                  \40      int MemoryScope) {                                                       \41    return __CLC_AS_RETTYPE(__CLC_IMPL_FUNCTION(                               \42        (ADDRSPACE __CLC_CASTTYPE *)Ptr, MemoryOrder, MemoryScope));           \43  }44#elif defined(__CLC_INC_DEC)45#define __CLC_DEFINE_ATOMIC(ADDRSPACE)                                         \46  _CLC_OVERLOAD _CLC_DEF __CLC_GENTYPE __CLC_FUNCTION(                         \47      volatile ADDRSPACE __CLC_GENTYPE *Ptr, int MemoryOrder,                  \48      int MemoryScope) {                                                       \49    return __CLC_IMPL_FUNCTION(Ptr, (__CLC_U_GENTYPE)(-1), MemoryOrder,        \50                               MemoryScope);                                   \51  }52#elif defined(__CLC_RETURN_VOID)53#define __CLC_DEFINE_ATOMIC(ADDRSPACE)                                         \54  _CLC_OVERLOAD _CLC_DEF void __CLC_FUNCTION(                                  \55      volatile ADDRSPACE __CLC_GENTYPE *Ptr, __CLC_GENTYPE Value,              \56      int MemoryOrder, int MemoryScope) {                                      \57    __CLC_IMPL_FUNCTION((ADDRSPACE __CLC_CASTTYPE *)Ptr,                       \58                        __CLC_AS_CASTTYPE(Value), MemoryOrder, MemoryScope);   \59  }60#else61#define __CLC_DEFINE_ATOMIC(ADDRSPACE)                                         \62  _CLC_OVERLOAD _CLC_DEF __CLC_GENTYPE __CLC_FUNCTION(                         \63      volatile ADDRSPACE __CLC_GENTYPE *Ptr, __CLC_GENTYPE Value,              \64      int MemoryOrder, int MemoryScope) {                                      \65    return __CLC_AS_RETTYPE(__CLC_IMPL_FUNCTION(                               \66        (ADDRSPACE __CLC_CASTTYPE *)Ptr, __CLC_AS_CASTTYPE(Value),             \67        MemoryOrder, MemoryScope));                                            \68  }69#endif70 71__CLC_DEFINE_ATOMIC(global)72__CLC_DEFINE_ATOMIC(local)73#if _CLC_GENERIC_AS_SUPPORTED74__CLC_DEFINE_ATOMIC()75#endif76 77#undef __CLC_DEFINE_ATOMIC78 79#endif // __CLC_HAS_ATOMIC80#undef __CLC_HAS_ATOMIC81 82#endif // __CLC_SCALAR83