blob: 5c40bf9f4ebd0eeeb15acb81b9380a20d439d3bb (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
#include <linux/kernel.h>
void mix_lfsr2(u32 h[4], const u32 v[4])
{
size_t i;
u32 w;
#define R(a) ({ \
u32 x = (a); \
x ^= rol32(x, 1) ^ rol32(x, 2); \
x ^= rol32(x, 7) ^ rol32(x, 14); \
x ^= rol32(x, 12) ^ rol32(x, 24); \
x; \
})
for (i = 0; i < 4; ++i) {
h[0] ^= v[i];
w = R(h[0]) ^ (h[0] << 1) ^ (h[2] << 2) ^ R(h[3]);
h[0] = h[1];
h[1] = h[2];
h[2] = h[3];
h[3] = w;
}
#undef R
}
|