(h1: u64, h2: u64, k1: u64, k2: u64)
| 148 | const x64hash128c2: u64 = [0x4cf5ad43, 0x2745937f]; |
| 149 | |
| 150 | function x64mix128(h1: u64, h2: u64, k1: u64, k2: u64): [u64, u64] { |
| 151 | k1 = mul64(k1, x64hash128c1); |
| 152 | k1 = rol64(k1, 31); |
| 153 | k1 = mul64(k1, x64hash128c2); |
| 154 | h1 = xor64(h1, k1); |
| 155 | |
| 156 | h1 = rol64(h1, 27); |
| 157 | h1 = add64(h1, h2); |
| 158 | h1 = add64(mul64(h1, [0x0, 5]), [0x0, 0x52dce729]); |
| 159 | |
| 160 | k2 = mul64(k2, x64hash128c2); |
| 161 | k2 = rol64(k2, 33); |
| 162 | k2 = mul64(k2, x64hash128c1); |
| 163 | h2 = xor64(h2, k2); |
| 164 | |
| 165 | h2 = rol64(h2, 31); |
| 166 | h2 = add64(h2, h1); |
| 167 | h2 = add64(mul64(h2, [0x0, 5]), [0x0, 0x38495ab5]); |
| 168 | |
| 169 | return [h1, h2]; |
| 170 | } |
| 171 | |
| 172 | export type x64hash128State = { |
| 173 | h1: u64, |
no test coverage detected