+/* Functionally the same as 'noinline', but documents that the reason for not
+ * inlining is to prevent the annotated function from being inlined into a
+ * recursive function, thereby increasing its stack usage. */
+#define noinline_for_stack noinline
+
+/* Hint that the expression is usually true. */
+#define likely(expr) __builtin_expect(!!(expr), 1)
+
+/* Hint that the expression is usually false. */
+#define unlikely(expr) __builtin_expect(!!(expr), 0)
+
+/* Prefetch into L1 cache for read. */
+#define prefetchr(addr) __builtin_prefetch((addr), 0)
+
+/* Prefetch into L1 cache for write. */
+#define prefetchw(addr) __builtin_prefetch((addr), 1)
+
+/* Declare that the members of the annotated struct are tightly packed, and the
+ * struct itself may be misaligned. */
+#define _packed_attribute __attribute__((packed))