#include 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 }