]> wimlib.net Git - wimlib/blobdiff - include/wimlib/compiler.h
Split prefetch() into prefetchr() and prefetchw()
[wimlib] / include / wimlib / compiler.h
index 11eaa2398f2a560dd336872c1e355a9d2d955fcf..1ea66968b10b6cbad675bcb55d55e823f95088a8 100644 (file)
 #  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 definition of CPU_IS_BIG_ENDIAN"
+#  error "missing required endianness definition"
 #endif
 
 #define CPU_IS_LITTLE_ENDIAN (!CPU_IS_BIG_ENDIAN)
 #  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
 
 #endif /* _WIMLIB_COMPILER_H */