]> zoso.dev Git - libnemo.git/commitdiff
Intermediate update to convert m array lookups to variables. Remaining 10 rounds...
authorChris Duncan <chris@zoso.dev>
Mon, 6 Jan 2025 13:39:40 +0000 (05:39 -0800)
committerChris Duncan <chris@zoso.dev>
Mon, 6 Jan 2025 13:39:40 +0000 (05:39 -0800)
src/lib/workers/powgpu.ts

index 06e1340d39abd6a5daac448c1135c447991f65d7..6db7e34a81ecf697eaf20385ded8656561588ee0 100644 (file)
@@ -90,7 +90,7 @@ export class PowGpu extends WorkerInterface {
                /**
                * G Mixing function
                */
-               fn G (v: ptr<function, array<u32, 32>>, m: ptr<function, array<u32, 16>>, a: u32, b: u32, c: u32, d: u32, ix: u32, iy: u32) {
+               fn G (v: ptr<function, array<u32, 32>>, a: u32, b: u32, c: u32, d: u32, mx0: u32, mx1: u32, my0: u32, my1: u32) {
                        var o0: u32;
                        var o1: u32;
                        var xor0: u32;
@@ -106,9 +106,9 @@ export class PowGpu extends WorkerInterface {
                        (*v)[a+1u] = o1;
 
                        // a = a + m[sigma[r][2*i+0]];
-                       o0 = (*v)[a] + (*m)[ix];
-                       o1 = (*v)[a+1u] + (*m)[ix+1u];
-                       if ((*v)[a] > 0xFFFFFFFFu - (*m)[ix]) {
+                       o0 = (*v)[a] + mx0;
+                       o1 = (*v)[a+1u] + mx1;
+                       if ((*v)[a] > 0xFFFFFFFFu - mx0) {
                                o1 = o1 + 1u;
                        }
                        (*v)[a] = o0;
@@ -145,9 +145,9 @@ export class PowGpu extends WorkerInterface {
                        (*v)[a+1u] = o1;
 
                        // a = a + m[sigma[r][2*i+1]];
-                       o0 = (*v)[a] + (*m)[iy];
-                       o1 = (*v)[a+1u] + (*m)[iy+1u];
-                       if ((*v)[a] > 0xFFFFFFFFu - (*m)[iy]) {
+                       o0 = (*v)[a] + my0;
+                       o1 = (*v)[a+1u] + my1;
+                       if ((*v)[a] > 0xFFFFFFFFu - my0) {
                                o1 = o1 + 1u;
                        }
                        (*v)[a] = o0;
@@ -282,24 +282,24 @@ export class PowGpu extends WorkerInterface {
                        * Twelve rounds of mixing as part of BLAKE2b compression step
                        */
                        // ROUND(0)
-                       G(&v, &m, 0u, 8u, 16u, 24u, 0u, 2u);
-                       G(&v, &m, 2u, 10u, 18u, 26u, 4u, 6u);
-                       G(&v, &m, 4u, 12u, 20u, 28u, 8u, 10u);
-                       G(&v, &m, 6u, 14u, 22u, 30u, 12u, 14u);
-                       G(&v, &m, 0u, 10u, 20u, 30u, 16u, 18u);
-                       G(&v, &m, 2u, 12u, 22u, 24u, 20u, 22u);
-                       G(&v, &m, 4u, 14u, 16u, 26u, 24u, 26u);
-                       G(&v, &m, 6u, 8u, 18u, 28u, 28u, 30u);
+                       G(&v, &m, 0u, 8u, 16u, 24u, m[0u], m[1u], m[2u], m[3u]);
+                       G(&v, &m, 2u, 10u, 18u, 26u, m[4u], m[5u], m[6u], m[7u]);
+                       G(&v, &m, 4u, 12u, 20u, 28u, m[8u], m[9u], m[10u], m[11u]);
+                       G(&v, &m, 6u, 14u, 22u, 30u, m[12u], m[13u], m[14u], m[15u]);
+                       G(&v, &m, 0u, 10u, 20u, 30u, m[16u], m[17u], m[18u], m[19u]);
+                       G(&v, &m, 2u, 12u, 22u, 24u, m[20u], m[21u], m[22u], m[23u]);
+                       G(&v, &m, 4u, 14u, 16u, 26u, m[24u], m[25u], m[26u], m[27u]);
+                       G(&v, &m, 6u, 8u, 18u, 28u, m[28u], m[29u], m[30u], m[31u]);
 
                        // ROUND(1)
-                       G(&v, &m, 0u, 8u, 16u, 24u, 28u, 20u);
-                       G(&v, &m, 2u, 10u, 18u, 26u, 8u, 16u);
-                       G(&v, &m, 4u, 12u, 20u, 28u, 18u, 30u);
-                       G(&v, &m, 6u, 14u, 22u, 30u, 26u, 12u);
-                       G(&v, &m, 0u, 10u, 20u, 30u, 2u, 24u);
-                       G(&v, &m, 2u, 12u, 22u, 24u, 0u, 4u);
-                       G(&v, &m, 4u, 14u, 16u, 26u, 22u, 14u);
-                       G(&v, &m, 6u, 8u, 18u, 28u, 10u, 6u);
+                       G(&v, &m, 0u, 8u, 16u, 24u, m[28u], m[29u], m[20u], m[21u]);
+                       G(&v, &m, 2u, 10u, 18u, 26u, m[8u], m[9u], m[16u], m[17u]);
+                       G(&v, &m, 4u, 12u, 20u, 28u, m[18u], m[19u], m[30u], m[31u]);
+                       G(&v, &m, 6u, 14u, 22u, 30u, m[26u], m[27u], m[12u], m[13u]);
+                       G(&v, &m, 0u, 10u, 20u, 30u, m[2u], m[3u], m[24u], m[25u]);
+                       G(&v, &m, 2u, 12u, 22u, 24u, m[0u], m[1u], m[4u], m[5u]);
+                       G(&v, &m, 4u, 14u, 16u, 26u, m[22u], m[23u], m[14u], m[15u]);
+                       G(&v, &m, 6u, 8u, 18u, 28u, m[10u], m[11u], m[6u], m[7u]);
 
                        // ROUND(2)
                        G(&v, &m, 0u, 8u, 16u, 24u, 22u, 16u);