#ifndef __ASM_X86_HASH_H #define __ASM_X86_HASH_H #include #include u32 __intel_crc4_2_hash(const void *data, u32 len, u32 seed); u32 __intel_crc4_2_hash2(const u32 *data, u32 len, u32 seed); /* * non-inline versions of jhash so gcc does not need to generate * duplicate code in every object file */ u32 __jhash(const void *data, u32 len, u32 seed); u32 __jhash2(const u32 *data, u32 len, u32 seed); /* * for documentation of these functions please look into * */ static inline u32 arch_fast_hash(const void *data, u32 len, u32 seed) { u32 hash; alternative_call(__jhash, __intel_crc4_2_hash, X86_FEATURE_XMM4_2, #ifdef CONFIG_X86_64 "=a" (hash), "D" (data), "S" (len), "d" (seed)); #else "=a" (hash), "a" (data), "d" (len), "c" (seed)); #endif return hash; } static inline u32 arch_fast_hash2(const u32 *data, u32 len, u32 seed) { u32 hash; alternative_call(__jhash2, __intel_crc4_2_hash2, X86_FEATURE_XMM4_2, #ifdef CONFIG_X86_64 "=a" (hash), "D" (data), "S" (len), "d" (seed)); #else "=a" (hash), "a" (data), "d" (len), "c" (seed)); #endif return hash; } #endif /* __ASM_X86_HASH_H */