cpu.h 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. /*
  2. * Copyright 2010-2019 Branimir Karadzic. All rights reserved.
  3. * License: https://github.com/bkaradzic/bx#license-bsd-2-clause
  4. */
  5. #ifndef BX_CPU_H_HEADER_GUARD
  6. #define BX_CPU_H_HEADER_GUARD
  7. #include "bx.h"
  8. namespace bx
  9. {
  10. ///
  11. void readBarrier();
  12. ///
  13. void writeBarrier();
  14. ///
  15. void readWriteBarrier();
  16. ///
  17. void memoryBarrier();
  18. ///
  19. template<typename Ty>
  20. Ty atomicFetchAndAdd(volatile Ty* _ptr, Ty _value);
  21. ///
  22. template<typename Ty>
  23. Ty atomicAddAndFetch(volatile Ty* _ptr, Ty _value);
  24. ///
  25. template<typename Ty>
  26. Ty atomicFetchAndSub(volatile Ty* _ptr, Ty _value);
  27. ///
  28. template<typename Ty>
  29. Ty atomicSubAndFetch(volatile Ty* _ptr, Ty _value);
  30. ///
  31. template<typename Ty>
  32. Ty atomicCompareAndSwap(volatile Ty* _ptr, Ty _old, Ty _new);
  33. ///
  34. template<typename Ty>
  35. Ty atomicFetchTestAndAdd(volatile Ty* _ptr, Ty _test, Ty _value);
  36. ///
  37. template<typename Ty>
  38. Ty atomicFetchTestAndSub(volatile Ty* _ptr, Ty _test, Ty _value);
  39. ///
  40. template<typename Ty>
  41. Ty atomicFetchAndAddsat(volatile Ty* _ptr, Ty _value, Ty _max);
  42. ///
  43. template<typename Ty>
  44. Ty atomicFetchAndSubsat(volatile Ty* _ptr, Ty _value, Ty _min);
  45. ///
  46. void* atomicExchangePtr(void** _ptr, void* _new);
  47. } // namespace bx
  48. #include "inline/cpu.inl"
  49. #endif // BX_CPU_H_HEADER_GUARD