]> zoso.dev Git - nano-pow.git/commitdiff
Start inlining m[sigma] addition.
authorChris Duncan <chris@zoso.dev>
Sat, 18 Jan 2025 00:44:16 +0000 (16:44 -0800)
committerChris Duncan <chris@zoso.dev>
Sat, 18 Jan 2025 00:44:16 +0000 (16:44 -0800)
benchmarks.md
src/shaders/compute.wgsl
test.html

index 40e069ee01a88cf6c9f856f2dc71fb19c9fa509b..4534b70ff3cf1f9ae43136da23b9b828db7edc0d 100644 (file)
@@ -31,16 +31,16 @@ After fixing test page bug setting Effort incorrectly
                "geometric": 171.1679993707545
        }
 
-"NanoPow (WebGPU) | Effort: 4 | Dispatch: 1048576 | Threads: 67108864": {
+"NanoPow (WebGPU) | Effort: 4 | Dispatch: 4194304 | Threads: 268435456": {
                "count": 512,
-               "total": 132850.19999996573,
-               "rate": 4.789670775618824,
-               "min": 6.899999998509884,
-               "max": 1723.5,
-               "arithmetic": 259.47304687493306,
-               "truncated": 208.78261718746217,
-               "harmonic": 74.8604325904412,
-               "geometric": 155.17772167307342
+               "total": 130945.59999998286,
+               "rate": 4.937419176281642,
+               "min": 7,
+               "max": 1650.7999999970198,
+               "arithmetic": 255.75312499996653,
+               "truncated": 202.53496093744616,
+               "harmonic": 78.50458783656828,
+               "geometric": 155.70211798018283
        }
 
 
index beec4a9755d4d185bd8a98210ffa7307f579356f..50ccc2f8bf6ed7bfa3a56d591fe4dfee8fba3318 100644 (file)
@@ -138,13 +138,11 @@ fn main(id: vec3<u32>) {
        /**
        * r=0, i=0, a=v[0], b=v[4], c=v[8], d=v[12]
        */
-       v0 = v0 + v4 + vec2(0u, u32(v0.x + v4.x < v0.x));
-       v0 = v0 + m0 + vec2(0u, u32(v0.x + m0.x < v0.x));
+       v0 = v0 + v4 + m0 + vec2(0u, u32(v0.x + v4.x < v0.x)) + vec2(0u, u32(v0.x + v4.x + m0.x < v0.x + v4.x));
        v12 = v12.yx ^ v0.yx;
        v8 = v8 + v12 + vec2(0u, u32(v8.x + v12.x < v8.x));
        v4 = ((v4 ^ v8).xy >> ROTATE_24) | ((v4 ^ v8).yx << ROTATE_8);
-       v0 = v0 + v4 + vec2(0u, u32(v0.x + v4.x < v0.x));
-       v0 = v0 + m1 + vec2(0u, u32(v0.x + m1.x < v0.x));
+       v0 = v0 + v4 + m1 + vec2(0u, u32(v0.x + v4.x < v0.x)) + vec2(0u, u32(v0.x + v4.x + m1.x < v0.x + v4.x));
        v12 = ((v12 ^ v0).xy >> ROTATE_16) | ((v12 ^ v0).yx << ROTATE_16);
        v8 = v8 + v12 + vec2(0u, u32(v8.x + v12.x < v8.x));
        v4 = ((v4 ^ v8).xy << ROTATE_1) | ((v4 ^ v8).yx >> ROTATE_31);
@@ -152,13 +150,11 @@ fn main(id: vec3<u32>) {
        /**
        * r=0, i=1, a=v[1], b=v[5], c=v[9], d=v[13]
        */
-       v1 = v1 + v5 + vec2(0u, u32(v1.x + v5.x < v1.x));
-       v1 = v1 + m2 + vec2(0u, u32(v1.x + m2.x < v1.x));
+       v1 = v1 + v5 + m2 + vec2(0u, u32(v1.x + v5.x < v1.x)) + vec2(0u, u32(v1.x + v5.x + m2.x < v1.x + v5.x));
        v13 = v13.yx ^ v1.yx;
        v9 = v9 + v13 + vec2(0u, u32(v9.x + v13.x < v9.x));
        v5 = ((v5 ^ v9).xy >> ROTATE_24) | ((v5 ^ v9).yx << ROTATE_8);
-       v1 = v1 + v5 + vec2(0u, u32(v1.x + v5.x < v1.x));
-       v1 = v1 + m3 + vec2(0u, u32(v1.x + m3.x < v1.x));
+       v1 = v1 + v5 + m3 + vec2(0u, u32(v1.x + v5.x < v1.x)) + vec2(0u, u32(v1.x + v5.x + m3.x < v1.x + v5.x));
        v13 = ((v13 ^ v1).xy >> ROTATE_16) | ((v13 ^ v1).yx << ROTATE_16);
        v9 = v9 + v13 + vec2(0u, u32(v9.x + v13.x < v9.x));
        v5 = ((v5 ^ v9).xy << ROTATE_1) | ((v5 ^ v9).yx >> ROTATE_31);
@@ -166,8 +162,7 @@ fn main(id: vec3<u32>) {
        /**
        * r=0, i=2, a=v[2], b=v[6], c=v[10], d=v[14]
        */
-       v2 = v2 + v6 + vec2(0u, u32(v2.x + v6.x < v2.x));
-       v2 = v2 + m4 + vec2(0u, u32(v2.x + m4.x < v2.x));
+       v2 = v2 + v6 + m4 + vec2(0u, u32(v2.x + v6.x < v2.x)) + vec2(0u, u32(v2.x + v6.x + m4.x < v2.x + v6.x));
        v14 = v14.yx ^ v2.yx;
        v10 = v10 + v14 + vec2(0u, u32(v10.x + v14.x < v10.x));
        v6 = ((v6 ^ v10).xy >> ROTATE_24) | ((v6 ^ v10).yx << ROTATE_8);
@@ -272,8 +267,7 @@ fn main(id: vec3<u32>) {
        /**
        * r=1, i=1, a=v[1], b=v[5], c=v[9], d=v[13]
        */
-       v1 = v1 + v5 + vec2(0u, u32(v1.x + v5.x < v1.x));
-       v1 = v1 + m4 + vec2(0u, u32(v1.x + m4.x < v1.x));
+       v1 = v1 + v5 + m4 + vec2(0u, u32(v1.x + v5.x < v1.x)) + vec2(0u, u32(v1.x + v5.x + m4.x < v1.x + v5.x));
        v13 = v13.yx ^ v1.yx;
        v9 = v9 + v13 + vec2(0u, u32(v9.x + v13.x < v9.x));
        v5 = ((v5 ^ v9).xy >> ROTATE_24) | ((v5 ^ v9).yx << ROTATE_8);
@@ -314,8 +308,7 @@ fn main(id: vec3<u32>) {
        /**
        * r=1, i=4, a=v[0], b=v[5], c=v[10], d=v[15]
        */
-       v0 = v0 + v5 + vec2(0u, u32(v0.x + v5.x < v0.x));
-       v0 = v0 + m1 + vec2(0u, u32(v0.x + m1.x < v0.x));
+       v0 = v0 + v5 + m1 + vec2(0u, u32(v0.x + v5.x < v0.x)) + vec2(0u, u32(v0.x + v5.x + m1.x < v0.x + v5.x));
        v15 = v15.yx ^ v0.yx;
        v10 = v10 + v15 + vec2(0u, u32(v10.x + v15.x < v10.x));
        v5 = ((v5 ^ v10).xy >> ROTATE_24) | ((v5 ^ v10).yx << ROTATE_8);
@@ -328,13 +321,11 @@ fn main(id: vec3<u32>) {
        /**
        * r=1, i=5, a=v[1], b=v[6], c=v[11], d=v[12]
        */
-       v1 = v1 + v6 + vec2(0u, u32(v1.x + v6.x < v1.x));
-       v1 = v1 + m0 + vec2(0u, u32(v1.x + m0.x < v1.x));
+       v1 = v1 + v6 + m0 + vec2(0u, u32(v1.x + v6.x < v1.x)) + vec2(0u, u32(v1.x + v6.x + m0.x < v1.x + v6.x));
        v12 = v12.yx ^ v1.yx;
        v11 = v11 + v12 + vec2(0u, u32(v11.x + v12.x < v11.x));
        v6 = ((v6 ^ v11).xy >> ROTATE_24) | ((v6 ^ v11).yx << ROTATE_8);
-       v1 = v1 + v6 + vec2(0u, u32(v1.x + v6.x < v1.x));
-       v1 = v1 + m2 + vec2(0u, u32(v1.x + m2.x < v1.x));
+       v1 = v1 + v6 + m2 + vec2(0u, u32(v1.x + v6.x < v1.x)) + vec2(0u, u32(v1.x + v6.x + m2.x < v1.x + v6.x));
        v12 = ((v12 ^ v1).xy >> ROTATE_16) | ((v12 ^ v1).yx << ROTATE_16);
        v11 = v11 + v12 + vec2(0u, u32(v11.x + v12.x < v11.x));
        v6 = ((v6 ^ v11).xy << ROTATE_1) | ((v6 ^ v11).yx >> ROTATE_31);
@@ -361,8 +352,7 @@ fn main(id: vec3<u32>) {
        v14 = v14.yx ^ v3.yx;
        v9 = v9 + v14 + vec2(0u, u32(v9.x + v14.x < v9.x));
        v4 = ((v4 ^ v9).xy >> ROTATE_24) | ((v4 ^ v9).yx << ROTATE_8);
-       v3 = v3 + v4 + vec2(0u, u32(v3.x + v4.x < v3.x));
-       v3 = v3 + m3 + vec2(0u, u32(v3.x + m3.x < v3.x));
+       v3 = v3 + v4 + m3 + vec2(0u, u32(v3.x + v4.x < v3.x)) + vec2(0u, u32(v3.x + v4.x + m3.x < v3.x + v4.x));
        v14 = ((v14 ^ v3).xy >> ROTATE_16) | ((v14 ^ v3).yx << ROTATE_16);
        v9 = v9 + v14 + vec2(0u, u32(v9.x + v14.x < v9.x));
        v4 = ((v4 ^ v9).xy << ROTATE_1) | ((v4 ^ v9).yx >> ROTATE_31);
@@ -397,8 +387,7 @@ fn main(id: vec3<u32>) {
        v13 = v13.yx ^ v1.yx;
        v9 = v9 + v13 + vec2(0u, u32(v9.x + v13.x < v9.x));
        v5 = ((v5 ^ v9).xy >> ROTATE_24) | ((v5 ^ v9).yx << ROTATE_8);
-       v1 = v1 + v5 + vec2(0u, u32(v1.x + v5.x < v1.x));
-       v1 = v1 + m0 + vec2(0u, u32(v1.x + m0.x < v1.x));
+       v1 = v1 + v5 + m0 + vec2(0u, u32(v1.x + v5.x < v1.x)) + vec2(0u, u32(v1.x + v5.x + m0.x < v1.x + v5.x));
        v13 = ((v13 ^ v1).xy >> ROTATE_16) | ((v13 ^ v1).yx << ROTATE_16);
        v9 = v9 + v13 + vec2(0u, u32(v9.x + v13.x < v9.x));
        v5 = ((v5 ^ v9).xy << ROTATE_1) | ((v5 ^ v9).yx >> ROTATE_31);
@@ -411,8 +400,7 @@ fn main(id: vec3<u32>) {
        v14 = v14.yx ^ v2.yx;
        v10 = v10 + v14 + vec2(0u, u32(v10.x + v14.x < v10.x));
        v6 = ((v6 ^ v10).xy >> ROTATE_24) | ((v6 ^ v10).yx << ROTATE_8);
-       v2 = v2 + v6 + vec2(0u, u32(v2.x + v6.x < v2.x));
-       v2 = v2 + m2 + vec2(0u, u32(v2.x + m2.x < v2.x));
+       v2 = v2 + v6 + m2 + vec2(0u, u32(v2.x + v6.x < v2.x)) + vec2(0u, u32(v2.x + v6.x + m2.x < v2.x + v6.x));
        v14 = ((v14 ^ v2).xy >> ROTATE_16) | ((v14 ^ v2).yx << ROTATE_16);
        v10 = v10 + v14 + vec2(0u, u32(v10.x + v14.x < v10.x));
        v6 = ((v6 ^ v10).xy << ROTATE_1) | ((v6 ^ v10).yx >> ROTATE_31);
@@ -448,8 +436,7 @@ fn main(id: vec3<u32>) {
        /**
        * r=2, i=5, a=v[1], b=v[6], c=v[11], d=v[12]
        */
-       v1 = v1 + v6 + vec2(0u, u32(v1.x + v6.x < v1.x));
-       v1 = v1 + m3 + vec2(0u, u32(v1.x + m3.x < v1.x));
+       v1 = v1 + v6 + m3 + vec2(0u, u32(v1.x + v6.x < v1.x)) + vec2(0u, u32(v1.x + v6.x + m3.x < v1.x + v6.x));
        v12 = v12.yx ^ v1.yx;
        v11 = v11 + v12 + vec2(0u, u32(v11.x + v12.x < v11.x));
        v6 = ((v6 ^ v11).xy >> ROTATE_24) | ((v6 ^ v11).yx << ROTATE_8);
@@ -467,8 +454,7 @@ fn main(id: vec3<u32>) {
        v13 = v13.yx ^ v2.yx;
        v8 = v8 + v13 + vec2(0u, u32(v8.x + v13.x < v8.x));
        v7 = ((v7 ^ v8).xy >> ROTATE_24) | ((v7 ^ v8).yx << ROTATE_8);
-       v2 = v2 + v7 + vec2(0u, u32(v2.x + v7.x < v2.x));
-       v2 = v2 + m1 + vec2(0u, u32(v2.x + m1.x < v2.x));
+       v2 = v2 + v7 + m1 + vec2(0u, u32(v2.x + v7.x < v2.x)) + vec2(0u, u32(v2.x + v7.x + m1.x < v2.x + v7.x));
        v13 = ((v13 ^ v2).xy >> ROTATE_16) | ((v13 ^ v2).yx << ROTATE_16);
        v8 = v8 + v13 + vec2(0u, u32(v8.x + v13.x < v8.x));
        v7 = ((v7 ^ v8).xy << ROTATE_1) | ((v7 ^ v8).yx >> ROTATE_31);
@@ -481,8 +467,7 @@ fn main(id: vec3<u32>) {
        v14 = v14.yx ^ v3.yx;
        v9 = v9 + v14 + vec2(0u, u32(v9.x + v14.x < v9.x));
        v4 = ((v4 ^ v9).xy >> ROTATE_24) | ((v4 ^ v9).yx << ROTATE_8);
-       v3 = v3 + v4 + vec2(0u, u32(v3.x + v4.x < v3.x));
-       v3 = v3 + m4 + vec2(0u, u32(v3.x + m4.x < v3.x));
+       v3 = v3 + v4 + m4 + vec2(0u, u32(v3.x + v4.x < v3.x)) + vec2(0u, u32(v3.x + v4.x + m4.x < v3.x + v4.x));
        v14 = ((v14 ^ v3).xy >> ROTATE_16) | ((v14 ^ v3).yx << ROTATE_16);
        v9 = v9 + v14 + vec2(0u, u32(v9.x + v14.x < v9.x));
        v4 = ((v4 ^ v9).xy << ROTATE_1) | ((v4 ^ v9).yx >> ROTATE_31);
@@ -512,13 +497,11 @@ fn main(id: vec3<u32>) {
        /**
        * r=3, i=1, a=v[1], b=v[5], c=v[9], d=v[13]
        */
-       v1 = v1 + v5 + vec2(0u, u32(v1.x + v5.x < v1.x));
-       v1 = v1 + m3 + vec2(0u, u32(v1.x + m3.x < v1.x));
+       v1 = v1 + v5 + m3 + vec2(0u, u32(v1.x + v5.x < v1.x)) + vec2(0u, u32(v1.x + v5.x + m3.x < v1.x + v5.x));
        v13 = v13.yx ^ v1.yx;
        v9 = v9 + v13 + vec2(0u, u32(v9.x + v13.x < v9.x));
        v5 = ((v5 ^ v9).xy >> ROTATE_24) | ((v5 ^ v9).yx << ROTATE_8);
-       v1 = v1 + v5 + vec2(0u, u32(v1.x + v5.x < v1.x));
-       v1 = v1 + m1 + vec2(0u, u32(v1.x + m1.x < v1.x));
+       v1 = v1 + v5 + m1 + vec2(0u, u32(v1.x + v5.x < v1.x)) + vec2(0u, u32(v1.x + v5.x + m1.x < v1.x + v5.x));
        v13 = ((v13 ^ v1).xy >> ROTATE_16) | ((v13 ^ v1).yx << ROTATE_16);
        v9 = v9 + v13 + vec2(0u, u32(v9.x + v13.x < v9.x));
        v5 = ((v5 ^ v9).xy << ROTATE_1) | ((v5 ^ v9).yx >> ROTATE_31);
@@ -554,8 +537,7 @@ fn main(id: vec3<u32>) {
        /**
        * r=3, i=4, a=v[0], b=v[5], c=v[10], d=v[15]
        */
-       v0 = v0 + v5 + vec2(0u, u32(v0.x + v5.x < v0.x));
-       v0 = v0 + m2 + vec2(0u, u32(v0.x + m2.x < v0.x));
+       v0 = v0 + v5 + m2 + vec2(0u, u32(v0.x + v5.x < v0.x)) + vec2(0u, u32(v0.x + v5.x + m2.x < v0.x + v5.x));
        v15 = v15.yx ^ v0.yx;
        v10 = v10 + v15 + vec2(0u, u32(v10.x + v15.x < v10.x));
        v5 = ((v5 ^ v10).xy >> ROTATE_24) | ((v5 ^ v10).yx << ROTATE_8);
@@ -582,13 +564,11 @@ fn main(id: vec3<u32>) {
        /**
        * r=3, i=6, a=v[2], b=v[7], c=v[8], d=v[13]
        */
-       v2 = v2 + v7 + vec2(0u, u32(v2.x + v7.x < v2.x));
-       v2 = v2 + m4 + vec2(0u, u32(v2.x + m4.x < v2.x));
+       v2 = v2 + v7 + m4 + vec2(0u, u32(v2.x + v7.x < v2.x)) + vec2(0u, u32(v2.x + v7.x + m4.x < v2.x + v7.x));
        v13 = v13.yx ^ v2.yx;
        v8 = v8 + v13 + vec2(0u, u32(v8.x + v13.x < v8.x));
        v7 = ((v7 ^ v8).xy >> ROTATE_24) | ((v7 ^ v8).yx << ROTATE_8);
-       v2 = v2 + v7 + vec2(0u, u32(v2.x + v7.x < v2.x));
-       v2 = v2 + m0 + vec2(0u, u32(v2.x + m0.x < v2.x));
+       v2 = v2 + v7 + m0 + vec2(0u, u32(v2.x + v7.x < v2.x)) + vec2(0u, u32(v2.x + v7.x + m0.x < v2.x + v7.x));
        v13 = ((v13 ^ v2).xy >> ROTATE_16) | ((v13 ^ v2).yx << ROTATE_16);
        v8 = v8 + v13 + vec2(0u, u32(v8.x + v13.x < v8.x));
        v7 = ((v7 ^ v8).xy << ROTATE_1) | ((v7 ^ v8).yx >> ROTATE_31);
@@ -623,8 +603,7 @@ fn main(id: vec3<u32>) {
        v12 = v12.yx ^ v0.yx;
        v8 = v8 + v12 + vec2(0u, u32(v8.x + v12.x < v8.x));
        v4 = ((v4 ^ v8).xy >> ROTATE_24) | ((v4 ^ v8).yx << ROTATE_8);
-       v0 = v0 + v4 + vec2(0u, u32(v0.x + v4.x < v0.x));
-       v0 = v0 + m0 + vec2(0u, u32(v0.x + m0.x < v0.x));
+       v0 = v0 + v4 + m0 + vec2(0u, u32(v0.x + v4.x < v0.x)) + vec2(0u, u32(v0.x + v4.x + m0.x < v0.x + v4.x));
        v12 = ((v12 ^ v0).xy >> ROTATE_16) | ((v12 ^ v0).yx << ROTATE_16);
        v8 = v8 + v12 + vec2(0u, u32(v8.x + v12.x < v8.x));
        v4 = ((v4 ^ v8).xy << ROTATE_1) | ((v4 ^ v8).yx >> ROTATE_31);
@@ -646,13 +625,11 @@ fn main(id: vec3<u32>) {
        /**
        * r=4, i=2, a=v[2], b=v[6], c=v[10], d=v[14]
        */
-       v2 = v2 + v6 + vec2(0u, u32(v2.x + v6.x < v2.x));
-       v2 = v2 + m2 + vec2(0u, u32(v2.x + m2.x < v2.x));
+       v2 = v2 + v6 + m2 + vec2(0u, u32(v2.x + v6.x < v2.x)) + vec2(0u, u32(v2.x + v6.x + m2.x < v2.x + v6.x));
        v14 = v14.yx ^ v2.yx;
        v10 = v10 + v14 + vec2(0u, u32(v10.x + v14.x < v10.x));
        v6 = ((v6 ^ v10).xy >> ROTATE_24) | ((v6 ^ v10).yx << ROTATE_8);
-       v2 = v2 + v6 + vec2(0u, u32(v2.x + v6.x < v2.x));
-       v2 = v2 + m4 + vec2(0u, u32(v2.x + m4.x < v2.x));
+       v2 = v2 + v6 + m4 + vec2(0u, u32(v2.x + v6.x < v2.x)) + vec2(0u, u32(v2.x + v6.x + m4.x < v2.x + v6.x));
        v14 = ((v14 ^ v2).xy >> ROTATE_16) | ((v14 ^ v2).yx << ROTATE_16);
        v10 = v10 + v14 + vec2(0u, u32(v10.x + v14.x < v10.x));
        v6 = ((v6 ^ v10).xy << ROTATE_1) | ((v6 ^ v10).yx >> ROTATE_31);
@@ -679,8 +656,7 @@ fn main(id: vec3<u32>) {
        v15 = v15.yx ^ v0.yx;
        v10 = v10 + v15 + vec2(0u, u32(v10.x + v15.x < v10.x));
        v5 = ((v5 ^ v10).xy >> ROTATE_24) | ((v5 ^ v10).yx << ROTATE_8);
-       v0 = v0 + v5 + vec2(0u, u32(v0.x + v5.x < v0.x));
-       v0 = v0 + m1 + vec2(0u, u32(v0.x + m1.x < v0.x));
+       v0 = v0 + v5 + m1 + vec2(0u, u32(v0.x + v5.x < v0.x)) + vec2(0u, u32(v0.x + v5.x + m1.x < v0.x + v5.x));
        v15 = ((v15 ^ v0).xy >> ROTATE_16) | ((v15 ^ v0).yx << ROTATE_16);
        v10 = v10 + v15 + vec2(0u, u32(v10.x + v15.x < v10.x));
        v5 = ((v5 ^ v10).xy << ROTATE_1) | ((v5 ^ v10).yx >> ROTATE_31);
@@ -716,8 +692,7 @@ fn main(id: vec3<u32>) {
        /**
        * r=4, i=7, a=v[3], b=v[4], c=v[9], d=v[14]
        */
-       v3 = v3 + v4 + vec2(0u, u32(v3.x + v4.x < v3.x));
-       v3 = v3 + m3 + vec2(0u, u32(v3.x + m3.x < v3.x));
+       v3 = v3 + v4 + m3 + vec2(0u, u32(v3.x + v4.x < v3.x)) + vec2(0u, u32(v3.x + v4.x + m3.x < v3.x + v4.x));
        v14 = v14.yx ^ v3.yx;
        v9 = v9 + v14 + vec2(0u, u32(v9.x + v14.x < v9.x));
        v4 = ((v4 ^ v9).xy >> ROTATE_24) | ((v4 ^ v9).yx << ROTATE_8);
@@ -738,8 +713,7 @@ fn main(id: vec3<u32>) {
        /**
        * r=5, i=0, a=v[0], b=v[4], c=v[8], d=v[12]
        */
-       v0 = v0 + v4 + vec2(0u, u32(v0.x + v4.x < v0.x));
-       v0 = v0 + m2 + vec2(0u, u32(v0.x + m2.x < v0.x));
+       v0 = v0 + v4 + m2 + vec2(0u, u32(v0.x + v4.x < v0.x)) + vec2(0u, u32(v0.x + v4.x + m2.x < v0.x + v4.x));
        v12 = v12.yx ^ v0.yx;
        v8 = v8 + v12 + vec2(0u, u32(v8.x + v12.x < v8.x));
        v4 = ((v4 ^ v8).xy >> ROTATE_24) | ((v4 ^ v8).yx << ROTATE_8);
@@ -766,8 +740,7 @@ fn main(id: vec3<u32>) {
        /**
        * r=5, i=2, a=v[2], b=v[6], c=v[10], d=v[14]
        */
-       v2 = v2 + v6 + vec2(0u, u32(v2.x + v6.x < v2.x));
-       v2 = v2 + m0 + vec2(0u, u32(v2.x + m0.x < v2.x));
+       v2 = v2 + v6 + m0 + vec2(0u, u32(v2.x + v6.x < v2.x)) + vec2(0u, u32(v2.x + v6.x + m0.x < v2.x + v6.x));
        v14 = v14.yx ^ v2.yx;
        v10 = v10 + v14 + vec2(0u, u32(v10.x + v14.x < v10.x));
        v6 = ((v6 ^ v10).xy >> ROTATE_24) | ((v6 ^ v10).yx << ROTATE_8);
@@ -785,8 +758,7 @@ fn main(id: vec3<u32>) {
        v15 = v15.yx ^ v3.yx;
        v11 = v11 + v15 + vec2(0u, u32(v11.x + v15.x < v11.x));
        v7 = ((v7 ^ v11).xy >> ROTATE_24) | ((v7 ^ v11).yx << ROTATE_8);
-       v3 = v3 + v7 + vec2(0u, u32(v3.x + v7.x < v3.x));
-       v3 = v3 + m3 + vec2(0u, u32(v3.x + m3.x < v3.x));
+       v3 = v3 + v7 + m3 + vec2(0u, u32(v3.x + v7.x < v3.x)) + vec2(0u, u32(v3.x + v7.x + m3.x < v3.x + v7.x));
        v15 = ((v15 ^ v3).xy >> ROTATE_16) | ((v15 ^ v3).yx << ROTATE_16);
        v11 = v11 + v15 + vec2(0u, u32(v11.x + v15.x < v11.x));
        v7 = ((v7 ^ v11).xy << ROTATE_1) | ((v7 ^ v11).yx >> ROTATE_31);
@@ -794,8 +766,7 @@ fn main(id: vec3<u32>) {
        /**
        * r=5, i=4, a=v[0], b=v[5], c=v[10], d=v[15]
        */
-       v0 = v0 + v5 + vec2(0u, u32(v0.x + v5.x < v0.x));
-       v0 = v0 + m4 + vec2(0u, u32(v0.x + m4.x < v0.x));
+       v0 = v0 + v5 + m4 + vec2(0u, u32(v0.x + v5.x < v0.x)) + vec2(0u, u32(v0.x + v5.x + m4.x < v0.x + v5.x));
        v15 = v15.yx ^ v0.yx;
        v10 = v10 + v15 + vec2(0u, u32(v10.x + v15.x < v10.x));
        v5 = ((v5 ^ v10).xy >> ROTATE_24) | ((v5 ^ v10).yx << ROTATE_8);
@@ -836,8 +807,7 @@ fn main(id: vec3<u32>) {
        /**
        * r=5, i=7, a=v[3], b=v[4], c=v[9], d=v[14]
        */
-       v3 = v3 + v4 + vec2(0u, u32(v3.x + v4.x < v3.x));
-       v3 = v3 + m1 + vec2(0u, u32(v3.x + m1.x < v3.x));
+       v3 = v3 + v4 + m1 + vec2(0u, u32(v3.x + v4.x < v3.x)) + vec2(0u, u32(v3.x + v4.x + m1.x < v3.x + v4.x));
        v14 = v14.yx ^ v3.yx;
        v9 = v9 + v14 + vec2(0u, u32(v9.x + v14.x < v9.x));
        v4 = ((v4 ^ v9).xy >> ROTATE_24) | ((v4 ^ v9).yx << ROTATE_8);
@@ -872,8 +842,7 @@ fn main(id: vec3<u32>) {
        /**
        * r=6, i=1, a=v[1], b=v[5], c=v[9], d=v[13]
        */
-       v1 = v1 + v5 + vec2(0u, u32(v1.x + v5.x < v1.x));
-       v1 = v1 + m1 + vec2(0u, u32(v1.x + m1.x < v1.x));
+       v1 = v1 + v5 + m1 + vec2(0u, u32(v1.x + v5.x < v1.x)) + vec2(0u, u32(v1.x + v5.x + m1.x < v1.x + v5.x));
        v13 = v13.yx ^ v1.yx;
        v9 = v9 + v13 + vec2(0u, u32(v9.x + v13.x < v9.x));
        v5 = ((v5 ^ v9).xy >> ROTATE_24) | ((v5 ^ v9).yx << ROTATE_8);
@@ -900,8 +869,7 @@ fn main(id: vec3<u32>) {
        /**
        * r=6, i=3, a=v[3], b=v[7], c=v[11], d=v[15]
        */
-       v3 = v3 + v7 + vec2(0u, u32(v3.x + v7.x < v3.x));
-       v3 = v3 + m4 + vec2(0u, u32(v3.x + m4.x < v3.x));
+       v3 = v3 + v7 + m4 + vec2(0u, u32(v3.x + v7.x < v3.x)) + vec2(0u, u32(v3.x + v7.x + m4.x < v3.x + v7.x));
        v15 = v15.yx ^ v3.yx;
        v11 = v11 + v15 + vec2(0u, u32(v11.x + v15.x < v11.x));
        v7 = ((v7 ^ v11).xy >> ROTATE_24) | ((v7 ^ v11).yx << ROTATE_8);
@@ -933,8 +901,7 @@ fn main(id: vec3<u32>) {
        v12 = v12.yx ^ v1.yx;
        v11 = v11 + v12 + vec2(0u, u32(v11.x + v12.x < v11.x));
        v6 = ((v6 ^ v11).xy >> ROTATE_24) | ((v6 ^ v11).yx << ROTATE_8);
-       v1 = v1 + v6 + vec2(0u, u32(v1.x + v6.x < v1.x));
-       v1 = v1 + m3 + vec2(0u, u32(v1.x + m3.x < v1.x));
+       v1 = v1 + v6 + m3 + vec2(0u, u32(v1.x + v6.x < v1.x)) + vec2(0u, u32(v1.x + v6.x + m3.x < v1.x + v6.x));
        v12 = ((v12 ^ v1).xy >> ROTATE_16) | ((v12 ^ v1).yx << ROTATE_16);
        v11 = v11 + v12 + vec2(0u, u32(v11.x + v12.x < v11.x));
        v6 = ((v6 ^ v11).xy << ROTATE_1) | ((v6 ^ v11).yx >> ROTATE_31);
@@ -1020,8 +987,7 @@ fn main(id: vec3<u32>) {
        /**
        * r=7, i=3, a=v[3], b=v[7], c=v[11], d=v[15]
        */
-       v3 = v3 + v7 + vec2(0u, u32(v3.x + v7.x < v3.x));
-       v3 = v3 + m3 + vec2(0u, u32(v3.x + m3.x < v3.x));
+       v3 = v3 + v7 + m3 + vec2(0u, u32(v3.x + v7.x < v3.x)) + vec2(0u, u32(v3.x + v7.x + m3.x < v3.x + v7.x));
        v15 = v15.yx ^ v3.yx;
        v11 = v11 + v15 + vec2(0u, u32(v11.x + v15.x < v11.x));
        v7 = ((v7 ^ v11).xy >> ROTATE_24) | ((v7 ^ v11).yx << ROTATE_8);
@@ -1159,8 +1125,7 @@ fn main(id: vec3<u32>) {
        v15 = v15.yx ^ v0.yx;
        v10 = v10 + v15 + vec2(0u, u32(v10.x + v15.x < v10.x));
        v5 = ((v5 ^ v10).xy >> ROTATE_24) | ((v5 ^ v10).yx << ROTATE_8);
-       v0 = v0 + v5 + vec2(0u, u32(v0.x + v5.x < v0.x));
-       v0 = v0 + m2 + vec2(0u, u32(v0.x + m2.x < v0.x));
+       v0 = v0 + v5 + m2 + vec2(0u, u32(v0.x + v5.x < v0.x)) + vec2(0u, u32(v0.x + v5.x + m2.x < v0.x + v5.x));
        v15 = ((v15 ^ v0).xy >> ROTATE_16) | ((v15 ^ v0).yx << ROTATE_16);
        v10 = v10 + v15 + vec2(0u, u32(v10.x + v15.x < v10.x));
        v5 = ((v5 ^ v10).xy << ROTATE_1) | ((v5 ^ v10).yx >> ROTATE_31);
@@ -1182,13 +1147,11 @@ fn main(id: vec3<u32>) {
        /**
        * r=8, i=6, a=v[2], b=v[7], c=v[8], d=v[13]
        */
-       v2 = v2 + v7 + vec2(0u, u32(v2.x + v7.x < v2.x));
-       v2 = v2 + m1 + vec2(0u, u32(v2.x + m1.x < v2.x));
+       v2 = v2 + v7 + m1 + vec2(0u, u32(v2.x + v7.x < v2.x)) + vec2(0u, u32(v2.x + v7.x + m1.x < v2.x + v7.x));
        v13 = v13.yx ^ v2.yx;
        v8 = v8 + v13 + vec2(0u, u32(v8.x + v13.x < v8.x));
        v7 = ((v7 ^ v8).xy >> ROTATE_24) | ((v7 ^ v8).yx << ROTATE_8);
-       v2 = v2 + v7 + vec2(0u, u32(v2.x + v7.x < v2.x));
-       v2 = v2 + m4 + vec2(0u, u32(v2.x + m4.x < v2.x));
+       v2 = v2 + v7 + m4 + vec2(0u, u32(v2.x + v7.x < v2.x)) + vec2(0u, u32(v2.x + v7.x + m4.x < v2.x + v7.x));
        v13 = ((v13 ^ v2).xy >> ROTATE_16) | ((v13 ^ v2).yx << ROTATE_16);
        v8 = v8 + v13 + vec2(0u, u32(v8.x + v13.x < v8.x));
        v7 = ((v7 ^ v8).xy << ROTATE_1) | ((v7 ^ v8).yx >> ROTATE_31);
@@ -1223,8 +1186,7 @@ fn main(id: vec3<u32>) {
        v12 = v12.yx ^ v0.yx;
        v8 = v8 + v12 + vec2(0u, u32(v8.x + v12.x < v8.x));
        v4 = ((v4 ^ v8).xy >> ROTATE_24) | ((v4 ^ v8).yx << ROTATE_8);
-       v0 = v0 + v4 + vec2(0u, u32(v0.x + v4.x < v0.x));
-       v0 = v0 + m2 + vec2(0u, u32(v0.x + m2.x < v0.x));
+       v0 = v0 + v4 + m2 + vec2(0u, u32(v0.x + v4.x < v0.x)) + vec2(0u, u32(v0.x + v4.x + m2.x < v0.x + v4.x));
        v12 = ((v12 ^ v0).xy >> ROTATE_16) | ((v12 ^ v0).yx << ROTATE_16);
        v8 = v8 + v12 + vec2(0u, u32(v8.x + v12.x < v8.x));
        v4 = ((v4 ^ v8).xy << ROTATE_1) | ((v4 ^ v8).yx >> ROTATE_31);
@@ -1237,8 +1199,7 @@ fn main(id: vec3<u32>) {
        v13 = v13.yx ^ v1.yx;
        v9 = v9 + v13 + vec2(0u, u32(v9.x + v13.x < v9.x));
        v5 = ((v5 ^ v9).xy >> ROTATE_24) | ((v5 ^ v9).yx << ROTATE_8);
-       v1 = v1 + v5 + vec2(0u, u32(v1.x + v5.x < v1.x));
-       v1 = v1 + m4 + vec2(0u, u32(v1.x + m4.x < v1.x));
+       v1 = v1 + v5 + m4 + vec2(0u, u32(v1.x + v5.x < v1.x)) + vec2(0u, u32(v1.x + v5.x + m4.x < v1.x + v5.x));
        v13 = ((v13 ^ v1).xy >> ROTATE_16) | ((v13 ^ v1).yx << ROTATE_16);
        v9 = v9 + v13 + vec2(0u, u32(v9.x + v13.x < v9.x));
        v5 = ((v5 ^ v9).xy << ROTATE_1) | ((v5 ^ v9).yx >> ROTATE_31);
@@ -1338,13 +1299,11 @@ fn main(id: vec3<u32>) {
        /**
        * r=10, i=0, a=v[0], b=v[4], c=v[8], d=v[12]
        */
-       v0 = v0 + v4 + vec2(0u, u32(v0.x + v4.x < v0.x));
-       v0 = v0 + m0 + vec2(0u, u32(v0.x + m0.x < v0.x));
+       v0 = v0 + v4 + m0 + vec2(0u, u32(v0.x + v4.x < v0.x)) + vec2(0u, u32(v0.x + v4.x + m0.x < v0.x + v4.x));
        v12 = v12.yx ^ v0.yx;
        v8 = v8 + v12 + vec2(0u, u32(v8.x + v12.x < v8.x));
        v4 = ((v4 ^ v8).xy >> ROTATE_24) | ((v4 ^ v8).yx << ROTATE_8);
-       v0 = v0 + v4 + vec2(0u, u32(v0.x + v4.x < v0.x));
-       v0 = v0 + m1 + vec2(0u, u32(v0.x + m1.x < v0.x));
+       v0 = v0 + v4 + m1 + vec2(0u, u32(v0.x + v4.x < v0.x)) + vec2(0u, u32(v0.x + v4.x + m1.x < v0.x + v4.x));
        v12 = ((v12 ^ v0).xy >> ROTATE_16) | ((v12 ^ v0).yx << ROTATE_16);
        v8 = v8 + v12 + vec2(0u, u32(v8.x + v12.x < v8.x));
        v4 = ((v4 ^ v8).xy << ROTATE_1) | ((v4 ^ v8).yx >> ROTATE_31);
@@ -1352,13 +1311,11 @@ fn main(id: vec3<u32>) {
        /**
        * r=10, i=1, a=v[1], b=v[5], c=v[9], d=v[13]
        */
-       v1 = v1 + v5 + vec2(0u, u32(v1.x + v5.x < v1.x));
-       v1 = v1 + m2 + vec2(0u, u32(v1.x + m2.x < v1.x));
+       v1 = v1 + v5 + m2 + vec2(0u, u32(v1.x + v5.x < v1.x)) + vec2(0u, u32(v1.x + v5.x + m2.x < v1.x + v5.x));
        v13 = v13.yx ^ v1.yx;
        v9 = v9 + v13 + vec2(0u, u32(v9.x + v13.x < v9.x));
        v5 = ((v5 ^ v9).xy >> ROTATE_24) | ((v5 ^ v9).yx << ROTATE_8);
-       v1 = v1 + v5 + vec2(0u, u32(v1.x + v5.x < v1.x));
-       v1 = v1 + m3 + vec2(0u, u32(v1.x + m3.x < v1.x));
+       v1 = v1 + v5 + m3 + vec2(0u, u32(v1.x + v5.x < v1.x)) + vec2(0u, u32(v1.x + v5.x + m3.x < v1.x + v5.x));
        v13 = ((v13 ^ v1).xy >> ROTATE_16) | ((v13 ^ v1).yx << ROTATE_16);
        v9 = v9 + v13 + vec2(0u, u32(v9.x + v13.x < v9.x));
        v5 = ((v5 ^ v9).xy << ROTATE_1) | ((v5 ^ v9).yx >> ROTATE_31);
@@ -1366,8 +1323,7 @@ fn main(id: vec3<u32>) {
        /**
        * r=10, i=2, a=v[2], b=v[6], c=v[10], d=v[14]
        */
-       v2 = v2 + v6 + vec2(0u, u32(v2.x + v6.x < v2.x));
-       v2 = v2 + m4 + vec2(0u, u32(v2.x + m4.x < v2.x));
+       v2 = v2 + v6 + m4 + vec2(0u, u32(v2.x + v6.x < v2.x)) + vec2(0u, u32(v2.x + v6.x + m4.x < v2.x + v6.x));
        v14 = v14.yx ^ v2.yx;
        v10 = v10 + v14 + vec2(0u, u32(v10.x + v14.x < v10.x));
        v6 = ((v6 ^ v10).xy >> ROTATE_24) | ((v6 ^ v10).yx << ROTATE_8);
@@ -1472,8 +1428,7 @@ fn main(id: vec3<u32>) {
        /**
        * r=11, i=1, a=v[1], b=v[5], c=v[9], d=v[13]
        */
-       v1 = v1 + v5 + vec2(0u, u32(v1.x + v5.x < v1.x));
-       v1 = v1 + m4 + vec2(0u, u32(v1.x + m4.x < v1.x));
+       v1 = v1 + v5 + m4 + vec2(0u, u32(v1.x + v5.x < v1.x)) + vec2(0u, u32(v1.x + v5.x + m4.x < v1.x + v5.x));
        v13 = v13.yx ^ v1.yx;
        v9 = v9 + v13 + vec2(0u, u32(v9.x + v13.x < v9.x));
        v5 = ((v5 ^ v9).xy >> ROTATE_24) | ((v5 ^ v9).yx << ROTATE_8);
@@ -1514,8 +1469,7 @@ fn main(id: vec3<u32>) {
        /**
        * r=11, i=4, a=v[0], b=v[5], c=v[10], d=v[15]
        */
-       v0 = v0 + v5 + vec2(0u, u32(v0.x + v5.x < v0.x));
-       v0 = v0 + m1 + vec2(0u, u32(v0.x + m1.x < v0.x));
+       v0 = v0 + v5 + m1 + vec2(0u, u32(v0.x + v5.x < v0.x)) + vec2(0u, u32(v0.x + v5.x + m1.x < v0.x + v5.x));
        v15 = v15.yx ^ v0.yx;
        v10 = v10 + v15 + vec2(0u, u32(v10.x + v15.x < v10.x));
        v5 = ((v5 ^ v10).xy >> ROTATE_24) | ((v5 ^ v10).yx << ROTATE_8);
index 32fed1f12a9cd23a213bcd6d5f503186ac37a772..64ef24add763b09029ca67647262d37d32939533 100644 (file)
--- a/test.html
+++ b/test.html
@@ -165,7 +165,7 @@ SPDX-License-Identifier: GPL-3.0-or-later
        <span id="validation"></span>
        <hr />
        <label for="size">Test Size</label>
-       <input id="size" type="number" value="64" autofocus />
+       <input id="size" type="number" value="1" autofocus />
        <label for="effort">Effort (1-32)</label>
        <input id="effort" type="number" value="8" min="1" max="32" />
        <span>