RequestContext support
[folly.git] / folly / Portability.h
index 156e8bb4afb693743c9e385b9266620466cd96b8..fbd8e3aba8786fab5297c0073e5fa5b459c1df0e 100644 (file)
 
 #include <folly/CPortability.h>
 
+#ifdef __APPLE__
+# include <malloc/malloc.h>
+#endif
+
 #if FOLLY_HAVE_SCHED_H
  #include <sched.h>
  #ifndef FOLLY_HAVE_PTHREAD_YIELD
@@ -75,6 +79,13 @@ struct MaxAlign { char c; } __attribute__((__aligned__));
   __attribute__((__format__(__printf__, format_param, dots_param)))
 #endif
 
+// deprecated
+#if defined(__clang__) || defined(__GNUC__)
+# define FOLLY_DEPRECATED(msg) __attribute__((__deprecated__(msg)))
+#else
+# define FOLLY_DEPRECATED
+#endif
+
 // noreturn
 #if defined(_MSC_VER)
 # define FOLLY_NORETURN __declspec(noreturn)
@@ -109,6 +120,12 @@ struct MaxAlign { char c; } __attribute__((__aligned__));
 # define FOLLY_X64 0
 #endif
 
+#if defined(__aarch64__)
+# define FOLLY_A64 1
+#else
+# define FOLLY_A64 0
+#endif
+
 // packing is very ugly in msvc
 #ifdef _MSC_VER
 # define FOLLY_PACK_ATTR /**/
@@ -255,4 +272,35 @@ using namespace FOLLY_GFLAGS_NAMESPACE;
 #include <TargetConditionals.h>
 #endif
 
+// MacOS doesn't have malloc_usable_size()
+#if defined(__APPLE__) && !defined(FOLLY_HAVE_MALLOC_USABLE_SIZE)
+inline size_t malloc_usable_size(void* ptr) {
+  return malloc_size(ptr);
+}
+#endif
+
+// RTTI may not be enabled for this compilation unit.
+#if defined(__GXX_RTTI) || defined(__cpp_rtti)
+# define FOLLY_HAS_RTTI 1
+#endif
+
+namespace folly {
+
+inline void asm_volatile_pause() {
+#if defined(__i386__) || FOLLY_X64
+  asm volatile ("pause");
+#elif FOLLY_A64
+  asm volatile ("wfe");
+#endif
+}
+inline void asm_pause() {
+#if defined(__i386__) || FOLLY_X64
+  asm ("pause");
+#elif FOLLY_A64
+  asm ("wfe");
+#endif
+}
+
+}
+
 #endif // FOLLY_PORTABILITY_H_