From: Chris Duncan Date: Mon, 6 Jan 2025 13:39:40 +0000 (-0800) Subject: Intermediate update to convert m array lookups to variables. Remaining 10 rounds... X-Git-Url: https://zoso.dev/?a=commitdiff_plain;h=e458a082a43939bf9cff9f8bc16bd83dec0e9c80;p=libnemo.git Intermediate update to convert m array lookups to variables. Remaining 10 rounds of G mixing must be converted still. --- diff --git a/src/lib/workers/powgpu.ts b/src/lib/workers/powgpu.ts index 06e1340..6db7e34 100644 --- a/src/lib/workers/powgpu.ts +++ b/src/lib/workers/powgpu.ts @@ -90,7 +90,7 @@ export class PowGpu extends WorkerInterface { /** * G Mixing function */ - fn G (v: ptr>, m: ptr>, a: u32, b: u32, c: u32, d: u32, ix: u32, iy: u32) { + fn G (v: ptr>, 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);