diff options
| -rw-r--r-- | clang/lib/Headers/Intrin.h | 16 | 
1 files changed, 16 insertions, 0 deletions
diff --git a/clang/lib/Headers/Intrin.h b/clang/lib/Headers/Intrin.h index fda38a234d0..11486a31598 100644 --- a/clang/lib/Headers/Intrin.h +++ b/clang/lib/Headers/Intrin.h @@ -307,6 +307,7 @@ void __addgsbyte(unsigned long, unsigned char);  void __addgsdword(unsigned long, unsigned long);  void __addgsqword(unsigned long, unsigned __int64);  void __addgsword(unsigned long, unsigned short); +static __inline__  void __faststorefence(void);  void __incgsbyte(unsigned long);  void __incgsdword(unsigned long); @@ -394,6 +395,7 @@ __int64 _InterlockedCompareExchange64_HLERelease(__int64 volatile *, __int64,                                                   __int64);  __int64 _InterlockedCompareExchange64_np(__int64 volatile *_Destination,                                           __int64 _Exchange, __int64 _Comparand); +static __inline__  void *_InterlockedCompareExchangePointer(void *volatile *_Destination,                                           void *_Exchange, void *_Comparand);  void *_InterlockedCompareExchangePointer_np(void *volatile *_Destination, @@ -791,6 +793,14 @@ _InterlockedCompareExchange(long volatile *_Destination,    return _Comparand;  }  #ifdef __x86_64__ +static __inline__ void *__attribute__((__always_inline__, __nodebug__)) +_InterlockedCompareExchangePointer(void *volatile *_Destination, +                                   void *_Exchange, void *_Comparand) { +  __atomic_compare_exchange(_Destination, &_Comparand, &_Exchange, 0, 0, 0); +  return _Comparand; +} +#endif +#ifdef __x86_64__  static __inline__ __int64 __attribute__((__always_inline__, __nodebug__))  _InterlockedCompareExchange64(__int64 volatile *_Destination,                                __int64 _Exchange, __int64 _Comparand) { @@ -816,6 +826,12 @@ __attribute__((deprecated("use other intrinsics or C++11 atomics instead")))  _WriteBarrier(void) {    __asm__ volatile ("" : : : "memory");  } +#ifdef __x86_64__ +static __inline__ void __attribute__((__always_inline__, __nodebug__)) +__faststorefence(void) { +  __asm__ volatile("lock orq $0, (%%rsp)" : : : "memory"); +} +#endif  /*----------------------------------------------------------------------------*\  |* readfs   |* (Pointers in address space #257 are relative to the FS segment register.)  | 

