// G mixing function
void G (uint ix, uint iy, uint a, uint b, uint c, uint d) {
- bool carry;
- uint o0;
- uint o1;
+ uint carry;
uint xor0;
uint xor1;
// a = a + b;
- o0 = v[a] + v[b];
- o1 = v[a+1u] + v[b+1u];
- carry = o0 < v[a];
- o1 = o1 + uint(mix(0.0, 1.0, float(carry)));
- v[a] = o0;
- v[a+1u] = o1;
+ v[a] = v[a] + v[b];
+ carry = uint(v[a] < v[b]);
+ v[a+1u] = v[a+1u] + v[b+1u] + carry;
// a = a + m[sigma[r][2*i+0]];
- o0 = v[a] + m[ix];
- o1 = v[a+1u] + m[ix+1u];
- carry = o0 < v[a];
- o1 = o1 + uint(mix(0.0, 1.0, float(carry)));
- v[a] = o0;
- v[a+1u] = o1;
+ v[a] = v[a] + m[ix];
+ carry = uint(v[a] < m[ix]);
+ v[a+1u] = v[a+1u] + m[ix+1u] + carry;
// d = rotr64(d ^ a, 32);
xor0 = v[d] ^ v[a];
v[d+1u] = xor0;
// c = c + d;
- o0 = v[c] + v[d];
- o1 = v[c+1u] + v[d+1u];
- carry = o0 < v[c];
- o1 = o1 + uint(mix(0.0, 1.0, float(carry)));
- v[c] = o0;
- v[c+1u] = o1;
+ v[c] = v[c] + v[d];
+ carry = uint(v[c] < v[d]);
+ v[c+1u] = v[c+1u] + v[d+1u] + carry;
// b = rotr64(b ^ c, 24);
xor0 = v[b] ^ v[c];
v[b+1u] = (xor1 >> 24u) ^ (xor0 << 8u);
// a = a + b;
- o0 = v[a] + v[b];
- o1 = v[a+1u] + v[b+1u];
- carry = o0 < v[a];
- o1 = o1 + uint(mix(0.0, 1.0, float(carry)));
- v[a] = o0;
- v[a+1u] = o1;
-
- // a = a + m[sigma[r][2*i+1]];
- o0 = v[a] + m[iy];
- o1 = v[a+1u] + m[iy+1u];
- carry = o0 < v[a];
- o1 = o1 + uint(mix(0.0, 1.0, float(carry)));
- v[a] = o0;
- v[a+1u] = o1;
+ v[a] = v[a] + v[b];
+ carry = uint(v[a] < v[b]);
+ v[a+1u] = v[a+1u] + v[b+1u] + carry;
+
+ // a = a + m[sigma[r][2*i+0]];
+ v[a] = v[a] + m[iy];
+ carry = uint(v[a] < m[iy]);
+ v[a+1u] = v[a+1u] + m[iy+1u] + carry;
// d = rotr64(d ^ a, 16)
xor0 = v[d] ^ v[a];
v[d+1u] = (xor1 >> 16u) ^ (xor0 << 16u);
// c = c + d;
- o0 = v[c] + v[d];
- o1 = v[c+1u] + v[d+1u];
- carry = o0 < v[c];
- o1 = o1 + uint(mix(0.0, 1.0, float(carry)));
- v[c] = o0;
- v[c+1u] = o1;
+ v[c] = v[c] + v[d];
+ carry = uint(v[c] < v[d]);
+ v[c+1u] = v[c+1u] + v[d+1u] + carry;
// b = rotr64(b ^ c, 63)
xor0 = v[b] ^ v[c];