]> zoso.dev Git - nano-pow.git/commitdiff
Eliminate temporary variables from G.
authorChris Duncan <chris@zoso.dev>
Sat, 25 Jan 2025 08:03:19 +0000 (00:03 -0800)
committerChris Duncan <chris@zoso.dev>
Sat, 25 Jan 2025 08:03:19 +0000 (00:03 -0800)
src/shaders/gl-fragment.ts

index 8d40372d0751c28d210f25651ad9b1bc2743f150..78c22ef25b3902de57eb871e3610735e63c8d08d 100644 (file)
@@ -76,27 +76,19 @@ const uint SIGMA82[192] = uint[192](
 
 // 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];
@@ -105,12 +97,9 @@ void G (uint ix, uint iy, uint a, uint b, uint c, uint d) {
        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];
@@ -119,20 +108,14 @@ void G (uint ix, uint iy, uint a, uint b, uint c, uint d) {
        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];
@@ -141,12 +124,9 @@ void G (uint ix, uint iy, uint a, uint b, uint c, uint d) {
        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];