eathread_sync_arm.h 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. ///////////////////////////////////////////////////////////////////////////////
  2. // Copyright (c) Electronic Arts Inc. All rights reserved.
  3. ///////////////////////////////////////////////////////////////////////////////
  4. #if defined(EA_PRAGMA_ONCE_SUPPORTED)
  5. #pragma once // Some compilers (e.g. VC++) benefit significantly from using this. We've measured 3-4% build speed improvements in apps as a result.
  6. #endif
  7. /////////////////////////////////////////////////////////////////////////////
  8. // Functionality related to memory and code generation synchronization.
  9. //
  10. // Created by Rob Parolin
  11. /////////////////////////////////////////////////////////////////////////////
  12. #ifndef EATHREAD_ARM_EATHREAD_SYNC_ARM_H
  13. #define EATHREAD_ARM_EATHREAD_SYNC_ARM_H
  14. #include <EABase/eabase.h>
  15. #if defined(EA_COMPILER_CLANG)
  16. #define EA_THREAD_SYNC_IMPLEMENTED
  17. #define EAProcessorPause()
  18. #define EAReadBarrier __sync_synchronize
  19. #define EAWriteBarrier __sync_synchronize
  20. #define EAReadWriteBarrier __sync_synchronize
  21. #define EACompilerMemoryBarrier() __asm__ __volatile__ ("" : : : "memory")
  22. #elif defined(EA_COMPILER_GNUC)
  23. #define EA_THREAD_SYNC_IMPLEMENTED
  24. #define EAProcessorPause()
  25. #if (((__GNUC__ * 100) + __GNUC_MINOR__) >= 401) // GCC 4.1 or later
  26. #define EAReadBarrier __sync_synchronize
  27. #define EAWriteBarrier __sync_synchronize
  28. #define EAReadWriteBarrier __sync_synchronize
  29. #else
  30. #define EAReadBarrier EACompilerMemoryBarrier
  31. #define EAWriteBarrier EACompilerMemoryBarrier
  32. #define EAReadWriteBarrier EACompilerMemoryBarrier
  33. #endif
  34. #define EACompilerMemoryBarrier() __asm__ __volatile__ ("" : : : "memory")
  35. #endif
  36. #endif // EATHREAD_ARM_EATHREAD_SYNC_ARM_H