__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)
# 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 /**/
}
#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_