generic_unix_port.h 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. #include <limits.h>
  2. #include <sys/param.h>
  3. static inline int32_t
  4. OSAtomicIncrement32(volatile int32_t *var)
  5. {
  6. return __c11_atomic_fetch_add((_Atomic(int)*)var, 1, __ATOMIC_RELAXED)+1;
  7. }
  8. static inline int32_t
  9. OSAtomicIncrement32Barrier(volatile int32_t *var)
  10. {
  11. return __c11_atomic_fetch_add((_Atomic(int)*)var, 1, __ATOMIC_SEQ_CST)+1;
  12. }
  13. static inline int32_t
  14. OSAtomicAdd32(int32_t val, volatile int32_t *var)
  15. {
  16. return __c11_atomic_fetch_add((_Atomic(int)*)var, val, __ATOMIC_RELAXED)+val;
  17. }
  18. // Simulation of mach_absolute_time related infrastructure
  19. // For now, use gettimeofday.
  20. // Consider using clockgettime(CLOCK_MONOTONIC) instead.
  21. #include <sys/time.h>
  22. struct mach_timebase_info {
  23. uint32_t numer;
  24. uint32_t denom;
  25. };
  26. typedef struct mach_timebase_info *mach_timebase_info_t;
  27. typedef struct mach_timebase_info mach_timebase_info_data_t;
  28. typedef int kern_return_t;
  29. static inline
  30. uint64_t
  31. mach_absolute_time()
  32. {
  33. struct timeval tv;
  34. gettimeofday(&tv,NULL);
  35. return (1000ull)*((unsigned long long)tv.tv_sec*(1000000ull) + (unsigned long long)tv.tv_usec);
  36. }
  37. static inline
  38. int
  39. mach_timebase_info(mach_timebase_info_t tbi)
  40. {
  41. tbi->numer = 1;
  42. tbi->denom = 1;
  43. return 0;
  44. }