#define _MUM_ATTRIBUTE_UNUSED __attribute__((unused))
#define _MUM_OPTIMIZE(opts) __attribute__((__optimize__ (opts)))
#define _MUM_TARGET(opts) __attribute__((__target__ (opts)))
+#define _MUM_INLINE __attribute__((always_inline))
#else
#define _MUM_ATTRIBUTE_UNUSED
#define _MUM_OPTIMIZE(opts)
#define _MUM_TARGET(opts)
+#define _MUM_INLINE
#endif
/* Multiply 64-bit V and P and return sum of high and low parts of the
result. */
-static inline uint64_t
+static inline uint64_t _MUM_INLINE
_mum (uint64_t v, uint64_t p) {
uint64_t hi, lo;
#if _MUM_USE_INT128
#define _mum_bswap64(x) bswap64 (x)
#endif
-static inline uint64_t
+static inline uint64_t _MUM_INLINE
_mum_le (uint64_t v) {
#if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__ || !defined(MUM_TARGET_INDEPENDENT_HASH)
return v;
#endif
}
-static inline uint32_t
+static inline uint32_t _MUM_INLINE
_mum_le32 (uint32_t v) {
#if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__ || !defined(MUM_TARGET_INDEPENDENT_HASH)
return v;
#define _MUM_UNROLL_FACTOR (1 << _MUM_UNROLL_FACTOR_POWER)
-static inline uint64_t _MUM_OPTIMIZE("unroll-loops")
+static inline uint64_t _MUM_OPTIMIZE("unroll-loops") _MUM_INLINE
_mum_hash_aligned (uint64_t start, const void *key, size_t len) {
uint64_t result = start;
const unsigned char *str = (const unsigned char *) key;
return _mum_final (result);
}
-static inline uint64_t
+static inline uint64_t _MUM_INLINE
_mum_next_factor (void) {
uint64_t start = 0;
int i;
/* Hash data KEY of length LEN and SEED. The hash depends on the
target endianess and the unroll factor. */
-static inline uint64_t
+static inline uint64_t _MUM_INLINE
mum_hash (const void *key, size_t len, uint64_t seed) {
#if defined(__x86_64__) && defined(_MUM_FRESH_GCC)
static int avx2_support = 0;