1 /* SPDX-License-Identifier: LGPL-2.1
3 * Based on Paul Hsieh's (LGPG 2.1) hash function
4 * From: http://www.azillionmonkeys.com/qed/hash.html
7 #define get16bits(d) (*((const __u16 *) (d)))
10 __u32
SuperFastHash (const char *data
, int len
, __u32 initval
) {
15 if (len
<= 0 || data
== NULL
) return 0;
21 #pragma clang loop unroll(full)
22 for (;len
> 0; len
--) {
23 hash
+= get16bits (data
);
24 tmp
= (get16bits (data
+2) << 11) ^ hash
;
25 hash
= (hash
<< 16) ^ tmp
;
26 data
+= 2*sizeof (__u16
);
30 /* Handle end cases */
32 case 3: hash
+= get16bits (data
);
34 hash
^= ((signed char)data
[sizeof (__u16
)]) << 18;
37 case 2: hash
+= get16bits (data
);
41 case 1: hash
+= (signed char)*data
;
46 /* Force "avalanching" of final 127 bits */