Wow. Since it took me a while to understand this I'll notice that it
the parallel mixes are from *different* iterations so you have
Temp = GetSomeKeybits()
Mix1(Temp)
Hash += Temp
Mix2(Hash) **
Temp = GetSomeKeybits()
Mix1(Temp) **
Hash += Temp
Mix2(Hash)
and it is the two asterisk-ed mixes that run in parallel.
I noticed that your mixing function is now
#define MIX(h,k,m) { k *= m; k ^= k >> r; k *= m; h += k; h *= m; }
^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^
Mix1 Mix2
Are the two multiplications really necessary?
Paolo