]> zoso.dev Git - nano-pow.git/commitdiff
Optimize 64-bit addition. More to come since this is producing valid results.
authorChris Duncan <chris@zoso.dev>
Mon, 13 Jan 2025 22:32:47 +0000 (14:32 -0800)
committerChris Duncan <chris@zoso.dev>
Mon, 13 Jan 2025 22:32:47 +0000 (14:32 -0800)
src/shaders/compute.wgsl

index 354b65fb931a2eafd70a4c687750f08330c4ce9e..16f2af182b91560b36129e79a8edd5d011b020af 100644 (file)
@@ -114,11 +114,9 @@ fn main(@builtin(global_invocation_id) id: vec3<u32>) {
        */
 
        // a = a + b
-       o0 = v0 + v8;
-       o1 = v1 + v9;
-       o1 = o1 + select(0u, 1u, o0 < v0);
-       v0 = o0;
-       v1 = o1;
+       v1 = v1 + v9;
+       v1 = v1 + select(0u, 1u, v0 + v8 < v0);
+       v0 = v0 + v8;
 
        // a = a + m[sigma[r][2*i+0]]
        o0 = v0 + m0;
@@ -147,11 +145,9 @@ fn main(@builtin(global_invocation_id) id: vec3<u32>) {
        v9 = (xor1 >> 24u) ^ (xor0 << 8u);
 
        // a = a + b
-       o0 = v0 + v8;
-       o1 = v1 + v9;
-       o1 = o1 + select(0u, 1u, o0 < v0);
-       v0 = o0;
-       v1 = o1;
+       v1 = v1 + v9;
+       v1 = v1 + select(0u, 1u, v0 + v8 < v0);
+       v0 = v0 + v8;
 
        // a = a + m[sigma[r][2*i+1]]
        o0 = v0 + m2;
@@ -743,11 +739,9 @@ fn main(@builtin(global_invocation_id) id: vec3<u32>) {
        */
 
        // a = a + b
-       o0 = v0 + v8;
-       o1 = v1 + v9;
-       o1 = o1 + select(0u, 1u, o0 < v0);
-       v0 = o0;
-       v1 = o1;
+       v1 = v1 + v9;
+       v1 = v1 + select(0u, 1u, v0 + v8 < v0);
+       v0 = v0 + v8;
 
        // // a = a + m[sigma[r][2*i+0]]
        // // skip since adding 0u does nothing
@@ -779,11 +773,9 @@ fn main(@builtin(global_invocation_id) id: vec3<u32>) {
        v9 = (xor1 >> 24u) ^ (xor0 << 8u);
 
        // a = a + b
-       o0 = v0 + v8;
-       o1 = v1 + v9;
-       o1 = o1 + select(0u, 1u, o0 < v0);
-       v0 = o0;
-       v1 = o1;
+       v1 = v1 + v9;
+       v1 = v1 + select(0u, 1u, v0 + v8 < v0);
+       v0 = v0 + v8;
 
        // // a = a + m[sigma[r][2*i+1]]
        // // skip since adding 0u does nothing
@@ -1372,11 +1364,9 @@ fn main(@builtin(global_invocation_id) id: vec3<u32>) {
        */
 
        // a = a + b
-       o0 = v0 + v8;
-       o1 = v1 + v9;
-       o1 = o1 + select(0u, 1u, o0 < v0);
-       v0 = o0;
-       v1 = o1;
+       v1 = v1 + v9;
+       v1 = v1 + select(0u, 1u, v0 + v8 < v0);
+       v0 = v0 + v8;
 
        // // a = a + m[sigma[r][2*i+0]]
        // // skip since adding 0u does nothing
@@ -1408,11 +1398,9 @@ fn main(@builtin(global_invocation_id) id: vec3<u32>) {
        v9 = (xor1 >> 24u) ^ (xor0 << 8u);
 
        // a = a + b
-       o0 = v0 + v8;
-       o1 = v1 + v9;
-       o1 = o1 + select(0u, 1u, o0 < v0);
-       v0 = o0;
-       v1 = o1;
+       v1 = v1 + v9;
+       v1 = v1 + select(0u, 1u, v0 + v8 < v0);
+       v0 = v0 + v8;
 
        // // a = a + m[sigma[r][2*i+1]]
        // // skip since adding 0u does nothing
@@ -2001,11 +1989,9 @@ fn main(@builtin(global_invocation_id) id: vec3<u32>) {
        */
 
        // a = a + b
-       o0 = v0 + v8;
-       o1 = v1 + v9;
-       o1 = o1 + select(0u, 1u, o0 < v0);
-       v0 = o0;
-       v1 = o1;
+       v1 = v1 + v9;
+       v1 = v1 + select(0u, 1u, v0 + v8 < v0);
+       v0 = v0 + v8;
 
        // // a = a + m[sigma[r][2*i+0]]
        // // skip since adding 0u does nothing
@@ -2037,11 +2023,9 @@ fn main(@builtin(global_invocation_id) id: vec3<u32>) {
        v9 = (xor1 >> 24u) ^ (xor0 << 8u);
 
        // a = a + b
-       o0 = v0 + v8;
-       o1 = v1 + v9;
-       o1 = o1 + select(0u, 1u, o0 < v0);
-       v0 = o0;
-       v1 = o1;
+       v1 = v1 + v9;
+       v1 = v1 + select(0u, 1u, v0 + v8 < v0);
+       v0 = v0 + v8;
 
        // // a = a + m[sigma[r][2*i+1]]
        // // skip since adding 0u does nothing
@@ -2630,11 +2614,9 @@ fn main(@builtin(global_invocation_id) id: vec3<u32>) {
        */
 
        // a = a + b
-       o0 = v0 + v8;
-       o1 = v1 + v9;
-       o1 = o1 + select(0u, 1u, o0 < v0);
-       v0 = o0;
-       v1 = o1;
+       v1 = v1 + v9;
+       v1 = v1 + select(0u, 1u, v0 + v8 < v0);
+       v0 = v0 + v8;
 
        // // a = a + m[sigma[r][2*i+0]]
        // // skip since adding 0u does nothing
@@ -2666,11 +2648,9 @@ fn main(@builtin(global_invocation_id) id: vec3<u32>) {
        v9 = (xor1 >> 24u) ^ (xor0 << 8u);
 
        // a = a + b
-       o0 = v0 + v8;
-       o1 = v1 + v9;
-       o1 = o1 + select(0u, 1u, o0 < v0);
-       v0 = o0;
-       v1 = o1;
+       v1 = v1 + v9;
+       v1 = v1 + select(0u, 1u, v0 + v8 < v0);
+       v0 = v0 + v8;
 
        // a = a + m[sigma[r][2*i+1]]
        o0 = v0 + m0;
@@ -3259,11 +3239,9 @@ fn main(@builtin(global_invocation_id) id: vec3<u32>) {
        */
 
        // a = a + b
-       o0 = v0 + v8;
-       o1 = v1 + v9;
-       o1 = o1 + select(0u, 1u, o0 < v0);
-       v0 = o0;
-       v1 = o1;
+       v1 = v1 + v9;
+       v1 = v1 + select(0u, 1u, v0 + v8 < v0);
+       v0 = v0 + v8;
 
        // a = a + m[sigma[r][2*i+0]]
        o0 = v0 + m4;
@@ -3292,11 +3270,9 @@ fn main(@builtin(global_invocation_id) id: vec3<u32>) {
        v9 = (xor1 >> 24u) ^ (xor0 << 8u);
 
        // a = a + b
-       o0 = v0 + v8;
-       o1 = v1 + v9;
-       o1 = o1 + select(0u, 1u, o0 < v0);
-       v0 = o0;
-       v1 = o1;
+       v1 = v1 + v9;
+       v1 = v1 + select(0u, 1u, v0 + v8 < v0);
+       v0 = v0 + v8;
 
        // // a = a + m[sigma[r][2*i+1]]
        // // skip since adding 0u does nothing
@@ -3888,11 +3864,9 @@ fn main(@builtin(global_invocation_id) id: vec3<u32>) {
        */
 
        // a = a + b
-       o0 = v0 + v8;
-       o1 = v1 + v9;
-       o1 = o1 + select(0u, 1u, o0 < v0);
-       v0 = o0;
-       v1 = o1;
+       v1 = v1 + v9;
+       v1 = v1 + select(0u, 1u, v0 + v8 < v0);
+       v0 = v0 + v8;
 
        // // a = a + m[sigma[r][2*i+0]]
        // // skip since adding 0u does nothing
@@ -3924,11 +3898,9 @@ fn main(@builtin(global_invocation_id) id: vec3<u32>) {
        v9 = (xor1 >> 24u) ^ (xor0 << 8u);
 
        // a = a + b
-       o0 = v0 + v8;
-       o1 = v1 + v9;
-       o1 = o1 + select(0u, 1u, o0 < v0);
-       v0 = o0;
-       v1 = o1;
+       v1 = v1 + v9;
+       v1 = v1 + select(0u, 1u, v0 + v8 < v0);
+       v0 = v0 + v8;
 
        // // a = a + m[sigma[r][2*i+1]]
        // // skip since adding 0u does nothing
@@ -4517,11 +4489,9 @@ fn main(@builtin(global_invocation_id) id: vec3<u32>) {
        */
 
        // a = a + b
-       o0 = v0 + v8;
-       o1 = v1 + v9;
-       o1 = o1 + select(0u, 1u, o0 < v0);
-       v0 = o0;
-       v1 = o1;
+       v1 = v1 + v9;
+       v1 = v1 + select(0u, 1u, v0 + v8 < v0);
+       v0 = v0 + v8;
 
        // // a = a + m[sigma[r][2*i+0]]
        // // skip since adding 0u does nothing
@@ -4553,11 +4523,9 @@ fn main(@builtin(global_invocation_id) id: vec3<u32>) {
        v9 = (xor1 >> 24u) ^ (xor0 << 8u);
 
        // a = a + b
-       o0 = v0 + v8;
-       o1 = v1 + v9;
-       o1 = o1 + select(0u, 1u, o0 < v0);
-       v0 = o0;
-       v1 = o1;
+       v1 = v1 + v9;
+       v1 = v1 + select(0u, 1u, v0 + v8 < v0);
+       v0 = v0 + v8;
 
        // // a = a + m[sigma[r][2*i+1]]
        // // skip since adding 0u does nothing
@@ -5146,11 +5114,9 @@ fn main(@builtin(global_invocation_id) id: vec3<u32>) {
        */
 
        // a = a + b
-       o0 = v0 + v8;
-       o1 = v1 + v9;
-       o1 = o1 + select(0u, 1u, o0 < v0);
-       v0 = o0;
-       v1 = o1;
+       v1 = v1 + v9;
+       v1 = v1 + select(0u, 1u, v0 + v8 < v0);
+       v0 = v0 + v8;
 
        // // a = a + m[sigma[r][2*i+0]]
        // // skip since adding 0u does nothing
@@ -5182,11 +5148,9 @@ fn main(@builtin(global_invocation_id) id: vec3<u32>) {
        v9 = (xor1 >> 24u) ^ (xor0 << 8u);
 
        // a = a + b
-       o0 = v0 + v8;
-       o1 = v1 + v9;
-       o1 = o1 + select(0u, 1u, o0 < v0);
-       v0 = o0;
-       v1 = o1;
+       v1 = v1 + v9;
+       v1 = v1 + select(0u, 1u, v0 + v8 < v0);
+       v0 = v0 + v8;
 
        // // a = a + m[sigma[r][2*i+1]]
        // // skip since adding 0u does nothing
@@ -5775,11 +5739,9 @@ fn main(@builtin(global_invocation_id) id: vec3<u32>) {
        */
 
        // a = a + b
-       o0 = v0 + v8;
-       o1 = v1 + v9;
-       o1 = o1 + select(0u, 1u, o0 < v0);
-       v0 = o0;
-       v1 = o1;
+       v1 = v1 + v9;
+       v1 = v1 + select(0u, 1u, v0 + v8 < v0);
+       v0 = v0 + v8;
 
        // // a = a + m[sigma[r][2*i+0]]
        // // skip since adding 0u does nothing
@@ -5811,11 +5773,9 @@ fn main(@builtin(global_invocation_id) id: vec3<u32>) {
        v9 = (xor1 >> 24u) ^ (xor0 << 8u);
 
        // a = a + b
-       o0 = v0 + v8;
-       o1 = v1 + v9;
-       o1 = o1 + select(0u, 1u, o0 < v0);
-       v0 = o0;
-       v1 = o1;
+       v1 = v1 + v9;
+       v1 = v1 + select(0u, 1u, v0 + v8 < v0);
+       v0 = v0 + v8;
 
        // a = a + m[sigma[r][2*i+1]]
        o0 = v0 + m4;
@@ -6404,11 +6364,9 @@ fn main(@builtin(global_invocation_id) id: vec3<u32>) {
        */
 
        // a = a + b
-       o0 = v0 + v8;
-       o1 = v1 + v9;
-       o1 = o1 + select(0u, 1u, o0 < v0);
-       v0 = o0;
-       v1 = o1;
+       v1 = v1 + v9;
+       v1 = v1 + select(0u, 1u, v0 + v8 < v0);
+       v0 = v0 + v8;
 
        // a = a + m[sigma[r][2*i+0]]
        o0 = v0 + m0;
@@ -6437,11 +6395,9 @@ fn main(@builtin(global_invocation_id) id: vec3<u32>) {
        v9 = (xor1 >> 24u) ^ (xor0 << 8u);
 
        // a = a + b
-       o0 = v0 + v8;
-       o1 = v1 + v9;
-       o1 = o1 + select(0u, 1u, o0 < v0);
-       v0 = o0;
-       v1 = o1;
+       v1 = v1 + v9;
+       v1 = v1 + select(0u, 1u, v0 + v8 < v0);
+       v0 = v0 + v8;
 
        // a = a + m[sigma[r][2*i+1]]
        o0 = v0 + m2;
@@ -7033,11 +6989,9 @@ fn main(@builtin(global_invocation_id) id: vec3<u32>) {
        */
 
        // a = a + b
-       o0 = v0 + v8;
-       o1 = v1 + v9;
-       o1 = o1 + select(0u, 1u, o0 < v0);
-       v0 = o0;
-       v1 = o1;
+       v1 = v1 + v9;
+       v1 = v1 + select(0u, 1u, v0 + v8 < v0);
+       v0 = v0 + v8;
 
        // // a = a + m[sigma[r][2*i+0]]
        // // skip since adding 0u does nothing
@@ -7069,11 +7023,9 @@ fn main(@builtin(global_invocation_id) id: vec3<u32>) {
        v9 = (xor1 >> 24u) ^ (xor0 << 8u);
 
        // a = a + b
-       o0 = v0 + v8;
-       o1 = v1 + v9;
-       o1 = o1 + select(0u, 1u, o0 < v0);
-       v0 = o0;
-       v1 = o1;
+       v1 = v1 + v9;
+       v1 = v1 + select(0u, 1u, v0 + v8 < v0);
+       v0 = v0 + v8;
 
        // // a = a + m[sigma[r][2*i+1]]
        // // skip since adding 0u does nothing