#define _may_alias_attribute __attribute__((may_alias))
#define likely(expr) __builtin_expect(!!(expr), 1)
#define unlikely(expr) __builtin_expect(!!(expr), 0)
-#define prefetch(addr) __builtin_prefetch(addr)
+#define prefetchr(addr) __builtin_prefetch((addr), 0)
+#define prefetchw(addr) __builtin_prefetch((addr), 1)
#if __GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4)
# define _cold_attribute __attribute__((cold))
#endif
#define _malloc_attribute __attribute__((malloc))
#define inline inline __attribute__((always_inline))
+#define noinline __attribute__((noinline))
-#define CPU_IS_BIG_ENDIAN (__BYTE_ORDER__ == __ORDER_BIG_ENDIAN__)
+/* Newer gcc supports __BYTE_ORDER__. Older gcc doesn't. */
+#ifdef __BYTE_ORDER__
+# define CPU_IS_BIG_ENDIAN (__BYTE_ORDER__ == __ORDER_BIG_ENDIAN__)
+#elif defined(HAVE_CONFIG_H)
+# include "config.h"
+# ifdef WORDS_BIGENDIAN
+# define CPU_IS_BIG_ENDIAN 1
+# else
+# define CPU_IS_BIG_ENDIAN 0
+# endif
+#endif
#if defined(__x86_64__) || defined(__i386__)
# define UNALIGNED_ACCESS_SPEED 3