]> zoso.dev Git - libnemo.git/commitdiff
Document addition steps using structure from blake reference material.
authorChris Duncan <chris@zoso.dev>
Sun, 5 Jan 2025 23:31:19 +0000 (15:31 -0800)
committerChris Duncan <chris@zoso.dev>
Sun, 5 Jan 2025 23:31:19 +0000 (15:31 -0800)
src/lib/workers/powgpu.ts

index 67b5105af7785e3328e089842a8f77dc7b938013..a72f6314a68da848fb638a6e705f81604d0f3912 100644 (file)
@@ -110,8 +110,10 @@ export class PowGpu extends WorkerInterface {
                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) {
                        var o0: u32;
                        var o1: u32;
+                       var xor0: u32;
+                       var xor1: u32;
 
-                       // add_uint64(v, a, (*v)[b], (*v)[b+1u]);
+                       // a = a + b;
                        o0 = (*v)[a] + (*v)[b];
                        o1 = (*v)[a+1u] + (*v)[b+1u];
                        if ((*v)[a] > 0xFFFFFFFFu - (*v)[b]) {
@@ -120,7 +122,7 @@ export class PowGpu extends WorkerInterface {
                        (*v)[a] = o0;
                        (*v)[a+1u] = o1;
 
-                       // add_uint64(v, a, (*m)[ix], (*m)[ix+1u]);
+                       // 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]) {
@@ -129,17 +131,13 @@ export class PowGpu extends WorkerInterface {
                        (*v)[a] = o0;
                        (*v)[a+1u] = o1;
 
-
-
-                       // v[d,d+1] = (v[d,d+1] xor v[a,a+1]) rotated to the right by 32 bits
-                       var xor0: u32 = (*v)[d] ^ (*v)[a];
-                       var xor1: u32 = (*v)[d+1u] ^ (*v)[a+1u];
+                       // d = rotr64(d ^ a, 32);
+                       xor0 = (*v)[d] ^ (*v)[a];
+                       xor1 = (*v)[d+1u] ^ (*v)[a+1u];
                        (*v)[d] = xor1;
                        (*v)[d+1u] = xor0;
 
-
-
-                       // add_uint64(v, c, (*v)[d], (*v)[d+1u]);
+                       // c = c + d;
                        o0 = (*v)[c] + (*v)[d];
                        o1 = (*v)[c+1u] + (*v)[d+1u];
                        if ((*v)[c] > 0xFFFFFFFFu - (*v)[d]) {
@@ -148,17 +146,13 @@ export class PowGpu extends WorkerInterface {
                        (*v)[c] = o0;
                        (*v)[c+1u] = o1;
 
-
-
-                       // v[b,b+1] = (v[b,b+1] xor v[c,c+1]) rotated right by 24 bits
+                       // b = rotr64(b ^ c, 24);
                        xor0 = (*v)[b] ^ (*v)[c];
                        xor1 = (*v)[b+1u] ^ (*v)[c+1u];
                        (*v)[b] = (xor0 >> 24u) ^ (xor1 << 8u);
                        (*v)[b+1u] = (xor1 >> 24u) ^ (xor0 << 8u);
 
-
-
-                       // add_uint64(v, a, (*v)[b], (*v)[b+1u]);
+                       // a = a + b;
                        o0 = (*v)[a] + (*v)[b];
                        o1 = (*v)[a+1u] + (*v)[b+1u];
                        if ((*v)[a] > 0xFFFFFFFFu - (*v)[b]) {
@@ -167,7 +161,7 @@ export class PowGpu extends WorkerInterface {
                        (*v)[a] = o0;
                        (*v)[a+1u] = o1;
 
-                       // add_uint64(v, a, (*m)[iy], (*m)[iy+1u]);
+                       // 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]) {
@@ -176,17 +170,13 @@ export class PowGpu extends WorkerInterface {
                        (*v)[a] = o0;
                        (*v)[a+1u] = o1;
 
-
-
-                       // v[d,d+1] = (v[d,d+1] xor v[a,a+1]) rotated right by 16 bits
+                       // d = rotr64(d ^ a, 16)
                        xor0 = (*v)[d] ^ (*v)[a];
                        xor1 = (*v)[d+1u] ^ (*v)[a+1u];
                        (*v)[d] = (xor0 >> 16u) ^ (xor1 << 16u);
                        (*v)[d+1u] = (xor1 >> 16u) ^ (xor0 << 16u);
 
-
-
-                       // add_uint64(v, c, (*v)[d], (*v)[d+1u]);
+                       // c = c + d;
                        o0 = (*v)[c] + (*v)[d];
                        o1 = (*v)[c+1u] + (*v)[d+1u];
                        if ((*v)[c] > 0xFFFFFFFFu - (*v)[d]) {
@@ -195,9 +185,7 @@ export class PowGpu extends WorkerInterface {
                        (*v)[c] = o0;
                        (*v)[c+1u] = o1;
 
-
-
-                       // v[b,b+1] = (v[b,b+1] xor v[c,c+1]) rotated right by 63 bits
+                       // b = rotr64(b ^ c, 63)
                        xor0 = (*v)[b] ^ (*v)[c];
                        xor1 = (*v)[b+1u] ^ (*v)[c+1u];
                        (*v)[b] = (xor1 >> 31u) ^ (xor0 << 1u);