From ace2c99f63ef8c642c9fbf9b57605e7ab2a96a48 Mon Sep 17 00:00:00 2001 From: Chris Duncan Date: Sat, 25 Jan 2025 00:03:19 -0800 Subject: [PATCH] Eliminate temporary variables from G. --- src/shaders/gl-fragment.ts | 62 +++++++++++++------------------------- 1 file changed, 21 insertions(+), 41 deletions(-) diff --git a/src/shaders/gl-fragment.ts b/src/shaders/gl-fragment.ts index 8d40372..78c22ef 100644 --- a/src/shaders/gl-fragment.ts +++ b/src/shaders/gl-fragment.ts @@ -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]; -- 2.34.1