+/* 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))
+
+/* Declare that the annotated variable, or variables of the annotated type, are
+ * to be aligned on n-byte boundaries. */
+#define _aligned_attribute(n) __attribute__((aligned(n)))
+
+/* Declare that pointers to the annotated type may alias other pointers. */
+#define _may_alias_attribute __attribute__((may_alias))