# define unlikely(expr) (expr)
#endif
-#ifndef prefetch
-# define prefetch(addr)
+/* prefetchr() - prefetch into L1 cache for read */
+#ifndef prefetchr
+# define prefetchr(addr)
+#endif
+
+/* prefetchw() - prefetch into L1 cache for write */
+#ifndef prefetchw
+# define prefetchw(addr)
#endif
#ifndef _cold_attribute
# define noinline
#endif
+/* Same as 'noinline', but 'noinline_for_stack' documents that 'noinline' is
+ * being used to prevent the annotated function from being inlined into a
+ * recursive function and increasing its stack usage. */
+#define noinline_for_stack noinline
+
#ifndef CPU_IS_BIG_ENDIAN
# error "missing required endianness definition"
#endif
# define _force_attr
#endif
-#ifndef BUILD_BUG_ON
-# define BUILD_BUG_ON(expr) ((void)sizeof(char[1 - 2*!!(expr)]))
+/* STATIC_ASSERT() - verify the truth of an expression at compilation time. */
+#if __STDC_VERSION__ >= 201112L
+# define STATIC_ASSERT(expr) _Static_assert((expr), "")
+#else
+# define STATIC_ASSERT(expr) ((void)sizeof(char[1 - 2 * !(expr)]))
#endif
+#define CONCAT_IMPL(s1, s2) s1##s2
+
+/* CONCAT() - concatenate two tokens at preprocessing time. */
+#define CONCAT(s1, s2) CONCAT_IMPL(s1, s2)
+
#endif /* _WIMLIB_COMPILER_H */