From: Chris Duncan Date: Thu, 9 Jan 2025 08:15:07 +0000 (-0800) Subject: Add error handling to test page. Upload new bundle for testing. X-Git-Url: https://zoso.dev/?a=commitdiff_plain;h=2a2abb8074073774241bcfa286e177b947eb8be5;p=libnemo.git Add error handling to test page. Upload new bundle for testing. --- diff --git a/global.min.js b/global.min.js index b096050..9bc1313 100644 --- a/global.min.js +++ b/global.min.js @@ -3240,8 +3240,6 @@ var NanoPowGpuComputeShader; var init_gpu_compute = __esm({ "src/lib/nano-pow/shaders/gpu-compute.ts"() { "use strict"; - { - } NanoPowGpuComputeShader = ` struct UBO { blockhash: array, 2>, @@ -3437,6 +3435,10 @@ fn main( var v30: u32 = 0x137E2179u; var v31: u32 = 0x5BE0CD19u; + + + + /** * Twelve rounds of G mixing as part of BLAKE2b compression step. * Each sigma r index correlates with the reference implementation, but each @@ -4156,172 +4158,7355 @@ fn main( ****************************************************************************/ G(&v0, &v1, &v8, &v9, &v16, &v17, &v24, &v25, 0u, 0u, 0u, 0u); + // // a = a + b + // o0 = va0 + vb0; + // o1 = va1 + vb1; + // if (va0 > 0xFFFFFFFFu - vb0) { + // o1 = o1 + 1u; + // } + // va0 = o0; + // va1 = o1; + + // // a = a + m[sigma[r][2*i+0]] + // o0 = va0 + mx0; + // o1 = va1 + mx1; + // if (va0 > 0xFFFFFFFFu - mx0) { + // o1 = o1 + 1u; + // } + // va0 = o0; + // va1 = o1; + + // // d = rotr64(d ^ a, 32) + // xor0 = vd0 ^ va0; + // xor1 = vd1 ^ va1; + // vd0 = xor1; + // vd1 = xor0; + + // // c = c + d + // o0 = vc0 + vd0; + // o1 = vc1 + vd1; + // if (vc0 > 0xFFFFFFFFu - vd0) { + // o1 = o1 + 1u; + // } + // vc0 = o0; + // vc1 = o1; + + // // b = rotr64(b ^ c, 24) + // xor0 = vb0 ^ vc0; + // xor1 = vb1 ^ vc1; + // vb0 = (xor0 >> 24u) ^ (xor1 << 8u); + // vb1 = (xor1 >> 24u) ^ (xor0 << 8u); + + // // a = a + b + // o0 = va0 + vb0; + // o1 = va1 + vb1; + // if (va0 > 0xFFFFFFFFu - vb0) { + // o1 = o1 + 1u; + // } + // va0 = o0; + // va1 = o1; + + // // a = a + m[sigma[r][2*i+1]] + // o0 = va0 + my0; + // o1 = va1 + my1; + // if (va0 > 0xFFFFFFFFu - my0) { + // o1 = o1 + 1u; + // } + // va0 = o0; + // va1 = o1; + + // // d = rotr64(d ^ a, 16) + // xor0 = vd0 ^ va0; + // xor1 = vd1 ^ va1; + // vd0 = (xor0 >> 16u) ^ (xor1 << 16u); + // vd1 = (xor1 >> 16u) ^ (xor0 << 16u); + + // // c = c + d + // o0 = vc0 + vd0; + // o1 = vc1 + vd1; + // if (vc0 > 0xFFFFFFFFu - vd0) { + // o1 = o1 + 1u; + // } + // vc0 = o0; + // vc1 = o1; + + // // b = rotr64(b ^ c, 63) + // xor0 = vb0 ^ vc0; + // xor1 = vb1 ^ vc1; + // vb0 = (xor1 >> 31u) ^ (xor0 << 1u); + // vb1 = (xor0 >> 31u) ^ (xor1 << 1u); + + + + + G(&v2, &v3, &v10, &v11, &v18, &v19, &v26, &v27, m8, m9, 0u, 0u); - G(&v4, &v5, &v12, &v13, &v20, &v21, &v28, &v29, 0u, 0u, 0u, 0u); - G(&v6, &v7, &v14, &v15, &v22, &v23, &v30, &v31, 0u, 0u, 0u, 0u); - G(&v0, &v1, &v10, &v11, &v20, &v21, &v30, &v31, m2, m3, 0u, 0u); - G(&v2, &v3, &v12, &v13, &v22, &v23, &v24, &v25, m0, m1, m4, m5); - G(&v4, &v5, &v14, &v15, &v16, &v17, &v26, &v27, 0u, 0u, 0u, 0u); - G(&v6, &v7, &v8, &v9, &v18, &v19, &v28, &v29, 0u, 0u, m6, m7); + // // a = a + b + // o0 = va0 + vb0; + // o1 = va1 + vb1; + // if (va0 > 0xFFFFFFFFu - vb0) { + // o1 = o1 + 1u; + // } + // va0 = o0; + // va1 = o1; + // // a = a + m[sigma[r][2*i+0]] + // o0 = va0 + mx0; + // o1 = va1 + mx1; + // if (va0 > 0xFFFFFFFFu - mx0) { + // o1 = o1 + 1u; + // } + // va0 = o0; + // va1 = o1; + + // // d = rotr64(d ^ a, 32) + // xor0 = vd0 ^ va0; + // xor1 = vd1 ^ va1; + // vd0 = xor1; + // vd1 = xor0; + + // // c = c + d + // o0 = vc0 + vd0; + // o1 = vc1 + vd1; + // if (vc0 > 0xFFFFFFFFu - vd0) { + // o1 = o1 + 1u; + // } + // vc0 = o0; + // vc1 = o1; + + // // b = rotr64(b ^ c, 24) + // xor0 = vb0 ^ vc0; + // xor1 = vb1 ^ vc1; + // vb0 = (xor0 >> 24u) ^ (xor1 << 8u); + // vb1 = (xor1 >> 24u) ^ (xor0 << 8u); + + // // a = a + b + // o0 = va0 + vb0; + // o1 = va1 + vb1; + // if (va0 > 0xFFFFFFFFu - vb0) { + // o1 = o1 + 1u; + // } + // va0 = o0; + // va1 = o1; + // // a = a + m[sigma[r][2*i+1]] + // o0 = va0 + my0; + // o1 = va1 + my1; + // if (va0 > 0xFFFFFFFFu - my0) { + // o1 = o1 + 1u; + // } + // va0 = o0; + // va1 = o1; + + // // d = rotr64(d ^ a, 16) + // xor0 = vd0 ^ va0; + // xor1 = vd1 ^ va1; + // vd0 = (xor0 >> 16u) ^ (xor1 << 16u); + // vd1 = (xor1 >> 16u) ^ (xor0 << 16u); + + // // c = c + d + // o0 = vc0 + vd0; + // o1 = vc1 + vd1; + // if (vc0 > 0xFFFFFFFFu - vd0) { + // o1 = o1 + 1u; + // } + // vc0 = o0; + // vc1 = o1; - /**************************************************************************** - * ROUND(2) * - ****************************************************************************/ + // // b = rotr64(b ^ c, 63) + // xor0 = vb0 ^ vc0; + // xor1 = vb1 ^ vc1; + // vb0 = (xor1 >> 31u) ^ (xor0 << 1u); + // vb1 = (xor0 >> 31u) ^ (xor1 << 1u); - G(&v0, &v1, &v8, &v9, &v16, &v17, &v24, &v25, 0u, 0u, 0u, 0u); - G(&v2, &v3, &v10, &v11, &v18, &v19, &v26, &v27, 0u, 0u, m0, m1); - G(&v4, &v5, &v12, &v13, &v20, &v21, &v28, &v29, 0u, 0u, m4, m5); - G(&v6, &v7, &v14, &v15, &v22, &v23, &v30, &v31, 0u, 0u, 0u, 0u); - G(&v0, &v1, &v10, &v11, &v20, &v21, &v30, &v31, 0u, 0u, 0u, 0u); - G(&v2, &v3, &v12, &v13, &v22, &v23, &v24, &v25, m6, m7, 0u, 0u); - G(&v4, &v5, &v14, &v15, &v16, &v17, &v26, &v27, 0u, 0u, m2, m3); - G(&v6, &v7, &v8, &v9, &v18, &v19, &v28, &v29, 0u, 0u, m8, m9); - /**************************************************************************** - * ROUND(3) * - ****************************************************************************/ - G(&v0, &v1, &v8, &v9, &v16, &v17, &v24, &v25, 0u, 0u, 0u, 0u); - G(&v2, &v3, &v10, &v11, &v18, &v19, &v26, &v27, m6, m7, m2, m3); G(&v4, &v5, &v12, &v13, &v20, &v21, &v28, &v29, 0u, 0u, 0u, 0u); - G(&v6, &v7, &v14, &v15, &v22, &v23, &v30, &v31, 0u, 0u, 0u, 0u); - G(&v0, &v1, &v10, &v11, &v20, &v21, &v30, &v31, m4, m5, 0u, 0u); - G(&v2, &v3, &v12, &v13, &v22, &v23, &v24, &v25, 0u, 0u, 0u, 0u); - G(&v4, &v5, &v14, &v15, &v16, &v17, &v26, &v27, m8, m9, m0, m1); - G(&v6, &v7, &v8, &v9, &v18, &v19, &v28, &v29, 0u, 0u, 0u, 0u); + // // a = a + b + // o0 = va0 + vb0; + // o1 = va1 + vb1; + // if (va0 > 0xFFFFFFFFu - vb0) { + // o1 = o1 + 1u; + // } + // va0 = o0; + // va1 = o1; + + // // a = a + m[sigma[r][2*i+0]] + // o0 = va0 + mx0; + // o1 = va1 + mx1; + // if (va0 > 0xFFFFFFFFu - mx0) { + // o1 = o1 + 1u; + // } + // va0 = o0; + // va1 = o1; + + // // d = rotr64(d ^ a, 32) + // xor0 = vd0 ^ va0; + // xor1 = vd1 ^ va1; + // vd0 = xor1; + // vd1 = xor0; + + // // c = c + d + // o0 = vc0 + vd0; + // o1 = vc1 + vd1; + // if (vc0 > 0xFFFFFFFFu - vd0) { + // o1 = o1 + 1u; + // } + // vc0 = o0; + // vc1 = o1; + + // // b = rotr64(b ^ c, 24) + // xor0 = vb0 ^ vc0; + // xor1 = vb1 ^ vc1; + // vb0 = (xor0 >> 24u) ^ (xor1 << 8u); + // vb1 = (xor1 >> 24u) ^ (xor0 << 8u); + + // // a = a + b + // o0 = va0 + vb0; + // o1 = va1 + vb1; + // if (va0 > 0xFFFFFFFFu - vb0) { + // o1 = o1 + 1u; + // } + // va0 = o0; + // va1 = o1; + + // // a = a + m[sigma[r][2*i+1]] + // o0 = va0 + my0; + // o1 = va1 + my1; + // if (va0 > 0xFFFFFFFFu - my0) { + // o1 = o1 + 1u; + // } + // va0 = o0; + // va1 = o1; + + // // d = rotr64(d ^ a, 16) + // xor0 = vd0 ^ va0; + // xor1 = vd1 ^ va1; + // vd0 = (xor0 >> 16u) ^ (xor1 << 16u); + // vd1 = (xor1 >> 16u) ^ (xor0 << 16u); + + // // c = c + d + // o0 = vc0 + vd0; + // o1 = vc1 + vd1; + // if (vc0 > 0xFFFFFFFFu - vd0) { + // o1 = o1 + 1u; + // } + // vc0 = o0; + // vc1 = o1; + + // // b = rotr64(b ^ c, 63) + // xor0 = vb0 ^ vc0; + // xor1 = vb1 ^ vc1; + // vb0 = (xor1 >> 31u) ^ (xor0 << 1u); + // vb1 = (xor0 >> 31u) ^ (xor1 << 1u); + - /**************************************************************************** - * ROUND(4) * - ****************************************************************************/ - G(&v0, &v1, &v8, &v9, &v16, &v17, &v24, &v25, 0u, 0u, m0, m1); - G(&v2, &v3, &v10, &v11, &v18, &v19, &v26, &v27, 0u, 0u, 0u, 0u); - G(&v4, &v5, &v12, &v13, &v20, &v21, &v28, &v29, m4, m5, m8, m9); G(&v6, &v7, &v14, &v15, &v22, &v23, &v30, &v31, 0u, 0u, 0u, 0u); - G(&v0, &v1, &v10, &v11, &v20, &v21, &v30, &v31, 0u, 0u, m2, m3); - G(&v2, &v3, &v12, &v13, &v22, &v23, &v24, &v25, 0u, 0u, 0u, 0u); - G(&v4, &v5, &v14, &v15, &v16, &v17, &v26, &v27, 0u, 0u, 0u, 0u); - G(&v6, &v7, &v8, &v9, &v18, &v19, &v28, &v29, m6, m7, 0u, 0u); + // // a = a + b + // o0 = va0 + vb0; + // o1 = va1 + vb1; + // if (va0 > 0xFFFFFFFFu - vb0) { + // o1 = o1 + 1u; + // } + // va0 = o0; + // va1 = o1; + // // a = a + m[sigma[r][2*i+0]] + // o0 = va0 + mx0; + // o1 = va1 + mx1; + // if (va0 > 0xFFFFFFFFu - mx0) { + // o1 = o1 + 1u; + // } + // va0 = o0; + // va1 = o1; + + // // d = rotr64(d ^ a, 32) + // xor0 = vd0 ^ va0; + // xor1 = vd1 ^ va1; + // vd0 = xor1; + // vd1 = xor0; + + // // c = c + d + // o0 = vc0 + vd0; + // o1 = vc1 + vd1; + // if (vc0 > 0xFFFFFFFFu - vd0) { + // o1 = o1 + 1u; + // } + // vc0 = o0; + // vc1 = o1; + + // // b = rotr64(b ^ c, 24) + // xor0 = vb0 ^ vc0; + // xor1 = vb1 ^ vc1; + // vb0 = (xor0 >> 24u) ^ (xor1 << 8u); + // vb1 = (xor1 >> 24u) ^ (xor0 << 8u); + + // // a = a + b + // o0 = va0 + vb0; + // o1 = va1 + vb1; + // if (va0 > 0xFFFFFFFFu - vb0) { + // o1 = o1 + 1u; + // } + // va0 = o0; + // va1 = o1; + // // a = a + m[sigma[r][2*i+1]] + // o0 = va0 + my0; + // o1 = va1 + my1; + // if (va0 > 0xFFFFFFFFu - my0) { + // o1 = o1 + 1u; + // } + // va0 = o0; + // va1 = o1; + + // // d = rotr64(d ^ a, 16) + // xor0 = vd0 ^ va0; + // xor1 = vd1 ^ va1; + // vd0 = (xor0 >> 16u) ^ (xor1 << 16u); + // vd1 = (xor1 >> 16u) ^ (xor0 << 16u); + + // // c = c + d + // o0 = vc0 + vd0; + // o1 = vc1 + vd1; + // if (vc0 > 0xFFFFFFFFu - vd0) { + // o1 = o1 + 1u; + // } + // vc0 = o0; + // vc1 = o1; - /**************************************************************************** - * ROUND(5) * - ****************************************************************************/ + // // b = rotr64(b ^ c, 63) + // xor0 = vb0 ^ vc0; + // xor1 = vb1 ^ vc1; + // vb0 = (xor1 >> 31u) ^ (xor0 << 1u); + // vb1 = (xor0 >> 31u) ^ (xor1 << 1u); - G(&v0, &v1, &v8, &v9, &v16, &v17, &v24, &v25, m4, m5, 0u, 0u); - G(&v2, &v3, &v10, &v11, &v18, &v19, &v26, &v27, 0u, 0u, 0u, 0u); - G(&v4, &v5, &v12, &v13, &v20, &v21, &v28, &v29, m0, m1, 0u, 0u); - G(&v6, &v7, &v14, &v15, &v22, &v23, &v30, &v31, 0u, 0u, m6, m7); - G(&v0, &v1, &v10, &v11, &v20, &v21, &v30, &v31, m8, m9, 0u, 0u); - G(&v2, &v3, &v12, &v13, &v22, &v23, &v24, &v25, 0u, 0u, 0u, 0u); - G(&v4, &v5, &v14, &v15, &v16, &v17, &v26, &v27, 0u, 0u, 0u, 0u); - G(&v6, &v7, &v8, &v9, &v18, &v19, &v28, &v29, m2, m3, 0u, 0u); - /**************************************************************************** - * ROUND(6) * - ****************************************************************************/ - G(&v0, &v1, &v8, &v9, &v16, &v17, &v24, &v25, 0u, 0u, 0u, 0u); - G(&v2, &v3, &v10, &v11, &v18, &v19, &v26, &v27, m2, m3, 0u, 0u); - G(&v4, &v5, &v12, &v13, &v20, &v21, &v28, &v29, 0u, 0u, 0u, 0u); - G(&v6, &v7, &v14, &v15, &v22, &v23, &v30, &v31, m8, m9, 0u, 0u); - G(&v0, &v1, &v10, &v11, &v20, &v21, &v30, &v31, m0, m1, 0u, 0u); - G(&v2, &v3, &v12, &v13, &v22, &v23, &v24, &v25, 0u, 0u, m6, m7); - G(&v4, &v5, &v14, &v15, &v16, &v17, &v26, &v27, 0u, 0u, m4, m5); - G(&v6, &v7, &v8, &v9, &v18, &v19, &v28, &v29, 0u, 0u, 0u, 0u); + G(&v0, &v1, &v10, &v11, &v20, &v21, &v30, &v31, m2, m3, 0u, 0u); + // // a = a + b + // o0 = va0 + vb0; + // o1 = va1 + vb1; + // if (va0 > 0xFFFFFFFFu - vb0) { + // o1 = o1 + 1u; + // } + // va0 = o0; + // va1 = o1; + // // a = a + m[sigma[r][2*i+0]] + // o0 = va0 + mx0; + // o1 = va1 + mx1; + // if (va0 > 0xFFFFFFFFu - mx0) { + // o1 = o1 + 1u; + // } + // va0 = o0; + // va1 = o1; + + // // d = rotr64(d ^ a, 32) + // xor0 = vd0 ^ va0; + // xor1 = vd1 ^ va1; + // vd0 = xor1; + // vd1 = xor0; + + // // c = c + d + // o0 = vc0 + vd0; + // o1 = vc1 + vd1; + // if (vc0 > 0xFFFFFFFFu - vd0) { + // o1 = o1 + 1u; + // } + // vc0 = o0; + // vc1 = o1; + + // // b = rotr64(b ^ c, 24) + // xor0 = vb0 ^ vc0; + // xor1 = vb1 ^ vc1; + // vb0 = (xor0 >> 24u) ^ (xor1 << 8u); + // vb1 = (xor1 >> 24u) ^ (xor0 << 8u); + + // // a = a + b + // o0 = va0 + vb0; + // o1 = va1 + vb1; + // if (va0 > 0xFFFFFFFFu - vb0) { + // o1 = o1 + 1u; + // } + // va0 = o0; + // va1 = o1; + // // a = a + m[sigma[r][2*i+1]] + // o0 = va0 + my0; + // o1 = va1 + my1; + // if (va0 > 0xFFFFFFFFu - my0) { + // o1 = o1 + 1u; + // } + // va0 = o0; + // va1 = o1; + + // // d = rotr64(d ^ a, 16) + // xor0 = vd0 ^ va0; + // xor1 = vd1 ^ va1; + // vd0 = (xor0 >> 16u) ^ (xor1 << 16u); + // vd1 = (xor1 >> 16u) ^ (xor0 << 16u); + + // // c = c + d + // o0 = vc0 + vd0; + // o1 = vc1 + vd1; + // if (vc0 > 0xFFFFFFFFu - vd0) { + // o1 = o1 + 1u; + // } + // vc0 = o0; + // vc1 = o1; - /**************************************************************************** - * ROUND(7) * - ****************************************************************************/ + // // b = rotr64(b ^ c, 63) + // xor0 = vb0 ^ vc0; + // xor1 = vb1 ^ vc1; + // vb0 = (xor1 >> 31u) ^ (xor0 << 1u); + // vb1 = (xor0 >> 31u) ^ (xor1 << 1u); - G(&v0, &v1, &v8, &v9, &v16, &v17, &v24, &v25, 0u, 0u, 0u, 0u); - G(&v2, &v3, &v10, &v11, &v18, &v19, &v26, &v27, 0u, 0u, 0u, 0u); - G(&v4, &v5, &v12, &v13, &v20, &v21, &v28, &v29, 0u, 0u, m2, m3); - G(&v6, &v7, &v14, &v15, &v22, &v23, &v30, &v31, m6, m7, 0u, 0u); - G(&v0, &v1, &v10, &v11, &v20, &v21, &v30, &v31, 0u, 0u, m0, m1); - G(&v2, &v3, &v12, &v13, &v22, &v23, &v24, &v25, 0u, 0u, m8, m9); - G(&v4, &v5, &v14, &v15, &v16, &v17, &v26, &v27, 0u, 0u, 0u, 0u); - G(&v6, &v7, &v8, &v9, &v18, &v19, &v28, &v29, m4, m5, 0u, 0u); - /**************************************************************************** - * ROUND(8) * - ****************************************************************************/ - G(&v0, &v1, &v8, &v9, &v16, &v17, &v24, &v25, 0u, 0u, 0u, 0u); - G(&v2, &v3, &v10, &v11, &v18, &v19, &v26, &v27, 0u, 0u, 0u, 0u); - G(&v4, &v5, &v12, &v13, &v20, &v21, &v28, &v29, 0u, 0u, m6, m7); - G(&v6, &v7, &v14, &v15, &v22, &v23, &v30, &v31, m0, m1, 0u, 0u); - G(&v0, &v1, &v10, &v11, &v20, &v21, &v30, &v31, 0u, 0u, m4, m5); - G(&v2, &v3, &v12, &v13, &v22, &v23, &v24, &v25, 0u, 0u, 0u, 0u); - G(&v4, &v5, &v14, &v15, &v16, &v17, &v26, &v27, m2, m3, m8, m9); - G(&v6, &v7, &v8, &v9, &v18, &v19, &v28, &v29, 0u, 0u, 0u, 0u); + G(&v2, &v3, &v12, &v13, &v22, &v23, &v24, &v25, m0, m1, m4, m5); + // // a = a + b + // o0 = va0 + vb0; + // o1 = va1 + vb1; + // if (va0 > 0xFFFFFFFFu - vb0) { + // o1 = o1 + 1u; + // } + // va0 = o0; + // va1 = o1; + // // a = a + m[sigma[r][2*i+0]] + // o0 = va0 + mx0; + // o1 = va1 + mx1; + // if (va0 > 0xFFFFFFFFu - mx0) { + // o1 = o1 + 1u; + // } + // va0 = o0; + // va1 = o1; + + // // d = rotr64(d ^ a, 32) + // xor0 = vd0 ^ va0; + // xor1 = vd1 ^ va1; + // vd0 = xor1; + // vd1 = xor0; + + // // c = c + d + // o0 = vc0 + vd0; + // o1 = vc1 + vd1; + // if (vc0 > 0xFFFFFFFFu - vd0) { + // o1 = o1 + 1u; + // } + // vc0 = o0; + // vc1 = o1; + + // // b = rotr64(b ^ c, 24) + // xor0 = vb0 ^ vc0; + // xor1 = vb1 ^ vc1; + // vb0 = (xor0 >> 24u) ^ (xor1 << 8u); + // vb1 = (xor1 >> 24u) ^ (xor0 << 8u); + + // // a = a + b + // o0 = va0 + vb0; + // o1 = va1 + vb1; + // if (va0 > 0xFFFFFFFFu - vb0) { + // o1 = o1 + 1u; + // } + // va0 = o0; + // va1 = o1; + // // a = a + m[sigma[r][2*i+1]] + // o0 = va0 + my0; + // o1 = va1 + my1; + // if (va0 > 0xFFFFFFFFu - my0) { + // o1 = o1 + 1u; + // } + // va0 = o0; + // va1 = o1; + + // // d = rotr64(d ^ a, 16) + // xor0 = vd0 ^ va0; + // xor1 = vd1 ^ va1; + // vd0 = (xor0 >> 16u) ^ (xor1 << 16u); + // vd1 = (xor1 >> 16u) ^ (xor0 << 16u); + + // // c = c + d + // o0 = vc0 + vd0; + // o1 = vc1 + vd1; + // if (vc0 > 0xFFFFFFFFu - vd0) { + // o1 = o1 + 1u; + // } + // vc0 = o0; + // vc1 = o1; - /**************************************************************************** - * ROUND(9) * - ****************************************************************************/ + // // b = rotr64(b ^ c, 63) + // xor0 = vb0 ^ vc0; + // xor1 = vb1 ^ vc1; + // vb0 = (xor1 >> 31u) ^ (xor0 << 1u); + // vb1 = (xor0 >> 31u) ^ (xor1 << 1u); - G(&v0, &v1, &v8, &v9, &v16, &v17, &v24, &v25, 0u, 0u, m4, m5); - G(&v2, &v3, &v10, &v11, &v18, &v19, &v26, &v27, 0u, 0u, m8, m9); - G(&v4, &v5, &v12, &v13, &v20, &v21, &v28, &v29, 0u, 0u, 0u, 0u); - G(&v6, &v7, &v14, &v15, &v22, &v23, &v30, &v31, m2, m3, 0u, 0u); - G(&v0, &v1, &v10, &v11, &v20, &v21, &v30, &v31, 0u, 0u, 0u, 0u); - G(&v2, &v3, &v12, &v13, &v22, &v23, &v24, &v25, 0u, 0u, 0u, 0u); - G(&v4, &v5, &v14, &v15, &v16, &v17, &v26, &v27, m6, m7, 0u, 0u); - G(&v6, &v7, &v8, &v9, &v18, &v19, &v28, &v29, 0u, 0u, m0, m1); - /**************************************************************************** - * ROUND(10) * - ****************************************************************************/ - G(&v0, &v1, &v8, &v9, &v16, &v17, &v24, &v25, m0, m1, m2, m3); - G(&v2, &v3, &v10, &v11, &v18, &v19, &v26, &v27, m4, m5, m6, m7); - G(&v4, &v5, &v12, &v13, &v20, &v21, &v28, &v29, m8, m9, 0u, 0u); - G(&v6, &v7, &v14, &v15, &v22, &v23, &v30, &v31, 0u, 0u, 0u, 0u); - G(&v0, &v1, &v10, &v11, &v20, &v21, &v30, &v31, 0u, 0u, 0u, 0u); - G(&v2, &v3, &v12, &v13, &v22, &v23, &v24, &v25, 0u, 0u, 0u, 0u); G(&v4, &v5, &v14, &v15, &v16, &v17, &v26, &v27, 0u, 0u, 0u, 0u); - G(&v6, &v7, &v8, &v9, &v18, &v19, &v28, &v29, 0u, 0u, 0u, 0u); + // // a = a + b + // o0 = va0 + vb0; + // o1 = va1 + vb1; + // if (va0 > 0xFFFFFFFFu - vb0) { + // o1 = o1 + 1u; + // } + // va0 = o0; + // va1 = o1; + + // // a = a + m[sigma[r][2*i+0]] + // o0 = va0 + mx0; + // o1 = va1 + mx1; + // if (va0 > 0xFFFFFFFFu - mx0) { + // o1 = o1 + 1u; + // } + // va0 = o0; + // va1 = o1; + + // // d = rotr64(d ^ a, 32) + // xor0 = vd0 ^ va0; + // xor1 = vd1 ^ va1; + // vd0 = xor1; + // vd1 = xor0; + + // // c = c + d + // o0 = vc0 + vd0; + // o1 = vc1 + vd1; + // if (vc0 > 0xFFFFFFFFu - vd0) { + // o1 = o1 + 1u; + // } + // vc0 = o0; + // vc1 = o1; + + // // b = rotr64(b ^ c, 24) + // xor0 = vb0 ^ vc0; + // xor1 = vb1 ^ vc1; + // vb0 = (xor0 >> 24u) ^ (xor1 << 8u); + // vb1 = (xor1 >> 24u) ^ (xor0 << 8u); + + // // a = a + b + // o0 = va0 + vb0; + // o1 = va1 + vb1; + // if (va0 > 0xFFFFFFFFu - vb0) { + // o1 = o1 + 1u; + // } + // va0 = o0; + // va1 = o1; + + // // a = a + m[sigma[r][2*i+1]] + // o0 = va0 + my0; + // o1 = va1 + my1; + // if (va0 > 0xFFFFFFFFu - my0) { + // o1 = o1 + 1u; + // } + // va0 = o0; + // va1 = o1; + + // // d = rotr64(d ^ a, 16) + // xor0 = vd0 ^ va0; + // xor1 = vd1 ^ va1; + // vd0 = (xor0 >> 16u) ^ (xor1 << 16u); + // vd1 = (xor1 >> 16u) ^ (xor0 << 16u); + + // // c = c + d + // o0 = vc0 + vd0; + // o1 = vc1 + vd1; + // if (vc0 > 0xFFFFFFFFu - vd0) { + // o1 = o1 + 1u; + // } + // vc0 = o0; + // vc1 = o1; + + // // b = rotr64(b ^ c, 63) + // xor0 = vb0 ^ vc0; + // xor1 = vb1 ^ vc1; + // vb0 = (xor1 >> 31u) ^ (xor0 << 1u); + // vb1 = (xor0 >> 31u) ^ (xor1 << 1u); + - /**************************************************************************** - * ROUND(11) * - ****************************************************************************/ - G(&v0, &v1, &v8, &v9, &v16, &v17, &v24, &v25, 0u, 0u, 0u, 0u); - G(&v2, &v3, &v10, &v11, &v18, &v19, &v26, &v27, m8, m9, 0u, 0u); - G(&v4, &v5, &v12, &v13, &v20, &v21, &v28, &v29, 0u, 0u, 0u, 0u); - G(&v6, &v7, &v14, &v15, &v22, &v23, &v30, &v31, 0u, 0u, 0u, 0u); - G(&v0, &v1, &v10, &v11, &v20, &v21, &v30, &v31, m2, m3, 0u, 0u); - G(&v2, &v3, &v12, &v13, &v22, &v23, &v24, &v25, m0, m1, m4, m5); - G(&v4, &v5, &v14, &v15, &v16, &v17, &v26, &v27, 0u, 0u, 0u, 0u); G(&v6, &v7, &v8, &v9, &v18, &v19, &v28, &v29, 0u, 0u, m6, m7); + // // a = a + b + // o0 = va0 + vb0; + // o1 = va1 + vb1; + // if (va0 > 0xFFFFFFFFu - vb0) { + // o1 = o1 + 1u; + // } + // va0 = o0; + // va1 = o1; + + // // a = a + m[sigma[r][2*i+0]] + // o0 = va0 + mx0; + // o1 = va1 + mx1; + // if (va0 > 0xFFFFFFFFu - mx0) { + // o1 = o1 + 1u; + // } + // va0 = o0; + // va1 = o1; + + // // d = rotr64(d ^ a, 32) + // xor0 = vd0 ^ va0; + // xor1 = vd1 ^ va1; + // vd0 = xor1; + // vd1 = xor0; + + // // c = c + d + // o0 = vc0 + vd0; + // o1 = vc1 + vd1; + // if (vc0 > 0xFFFFFFFFu - vd0) { + // o1 = o1 + 1u; + // } + // vc0 = o0; + // vc1 = o1; + + // // b = rotr64(b ^ c, 24) + // xor0 = vb0 ^ vc0; + // xor1 = vb1 ^ vc1; + // vb0 = (xor0 >> 24u) ^ (xor1 << 8u); + // vb1 = (xor1 >> 24u) ^ (xor0 << 8u); + + // // a = a + b + // o0 = va0 + vb0; + // o1 = va1 + vb1; + // if (va0 > 0xFFFFFFFFu - vb0) { + // o1 = o1 + 1u; + // } + // va0 = o0; + // va1 = o1; + + // // a = a + m[sigma[r][2*i+1]] + // o0 = va0 + my0; + // o1 = va1 + my1; + // if (va0 > 0xFFFFFFFFu - my0) { + // o1 = o1 + 1u; + // } + // va0 = o0; + // va1 = o1; + + // // d = rotr64(d ^ a, 16) + // xor0 = vd0 ^ va0; + // xor1 = vd1 ^ va1; + // vd0 = (xor0 >> 16u) ^ (xor1 << 16u); + // vd1 = (xor1 >> 16u) ^ (xor0 << 16u); + + // // c = c + d + // o0 = vc0 + vd0; + // o1 = vc1 + vd1; + // if (vc0 > 0xFFFFFFFFu - vd0) { + // o1 = o1 + 1u; + // } + // vc0 = o0; + // vc1 = o1; + + // // b = rotr64(b ^ c, 63) + // xor0 = vb0 ^ vc0; + // xor1 = vb1 ^ vc1; + // vb0 = (xor1 >> 31u) ^ (xor0 << 1u); + // vb1 = (xor0 >> 31u) ^ (xor1 << 1u); + + /**************************************************************************** - * NONCE CHECK * + * ROUND(2) * ****************************************************************************/ - /** - * Set nonce if it passes the threshold and no other thread has set it + G(&v0, &v1, &v8, &v9, &v16, &v17, &v24, &v25, 0u, 0u, 0u, 0u); + // // a = a + b + // o0 = va0 + vb0; + // o1 = va1 + vb1; + // if (va0 > 0xFFFFFFFFu - vb0) { + // o1 = o1 + 1u; + // } + // va0 = o0; + // va1 = o1; + + // // a = a + m[sigma[r][2*i+0]] + // o0 = va0 + mx0; + // o1 = va1 + mx1; + // if (va0 > 0xFFFFFFFFu - mx0) { + // o1 = o1 + 1u; + // } + // va0 = o0; + // va1 = o1; + + // // d = rotr64(d ^ a, 32) + // xor0 = vd0 ^ va0; + // xor1 = vd1 ^ va1; + // vd0 = xor1; + // vd1 = xor0; + + // // c = c + d + // o0 = vc0 + vd0; + // o1 = vc1 + vd1; + // if (vc0 > 0xFFFFFFFFu - vd0) { + // o1 = o1 + 1u; + // } + // vc0 = o0; + // vc1 = o1; + + // // b = rotr64(b ^ c, 24) + // xor0 = vb0 ^ vc0; + // xor1 = vb1 ^ vc1; + // vb0 = (xor0 >> 24u) ^ (xor1 << 8u); + // vb1 = (xor1 >> 24u) ^ (xor0 << 8u); + + // // a = a + b + // o0 = va0 + vb0; + // o1 = va1 + vb1; + // if (va0 > 0xFFFFFFFFu - vb0) { + // o1 = o1 + 1u; + // } + // va0 = o0; + // va1 = o1; + + // // a = a + m[sigma[r][2*i+1]] + // o0 = va0 + my0; + // o1 = va1 + my1; + // if (va0 > 0xFFFFFFFFu - my0) { + // o1 = o1 + 1u; + // } + // va0 = o0; + // va1 = o1; + + // // d = rotr64(d ^ a, 16) + // xor0 = vd0 ^ va0; + // xor1 = vd1 ^ va1; + // vd0 = (xor0 >> 16u) ^ (xor1 << 16u); + // vd1 = (xor1 >> 16u) ^ (xor0 << 16u); + + // // c = c + d + // o0 = vc0 + vd0; + // o1 = vc1 + vd1; + // if (vc0 > 0xFFFFFFFFu - vd0) { + // o1 = o1 + 1u; + // } + // vc0 = o0; + // vc1 = o1; + + // // b = rotr64(b ^ c, 63) + // xor0 = vb0 ^ vc0; + // xor1 = vb1 ^ vc1; + // vb0 = (xor1 >> 31u) ^ (xor0 << 1u); + // vb1 = (xor0 >> 31u) ^ (xor1 << 1u); + + + + + + G(&v2, &v3, &v10, &v11, &v18, &v19, &v26, &v27, 0u, 0u, m0, m1); + // // a = a + b + // o0 = va0 + vb0; + // o1 = va1 + vb1; + // if (va0 > 0xFFFFFFFFu - vb0) { + // o1 = o1 + 1u; + // } + // va0 = o0; + // va1 = o1; + + // // a = a + m[sigma[r][2*i+0]] + // o0 = va0 + mx0; + // o1 = va1 + mx1; + // if (va0 > 0xFFFFFFFFu - mx0) { + // o1 = o1 + 1u; + // } + // va0 = o0; + // va1 = o1; + + // // d = rotr64(d ^ a, 32) + // xor0 = vd0 ^ va0; + // xor1 = vd1 ^ va1; + // vd0 = xor1; + // vd1 = xor0; + + // // c = c + d + // o0 = vc0 + vd0; + // o1 = vc1 + vd1; + // if (vc0 > 0xFFFFFFFFu - vd0) { + // o1 = o1 + 1u; + // } + // vc0 = o0; + // vc1 = o1; + + // // b = rotr64(b ^ c, 24) + // xor0 = vb0 ^ vc0; + // xor1 = vb1 ^ vc1; + // vb0 = (xor0 >> 24u) ^ (xor1 << 8u); + // vb1 = (xor1 >> 24u) ^ (xor0 << 8u); + + // // a = a + b + // o0 = va0 + vb0; + // o1 = va1 + vb1; + // if (va0 > 0xFFFFFFFFu - vb0) { + // o1 = o1 + 1u; + // } + // va0 = o0; + // va1 = o1; + + // // a = a + m[sigma[r][2*i+1]] + // o0 = va0 + my0; + // o1 = va1 + my1; + // if (va0 > 0xFFFFFFFFu - my0) { + // o1 = o1 + 1u; + // } + // va0 = o0; + // va1 = o1; + + // // d = rotr64(d ^ a, 16) + // xor0 = vd0 ^ va0; + // xor1 = vd1 ^ va1; + // vd0 = (xor0 >> 16u) ^ (xor1 << 16u); + // vd1 = (xor1 >> 16u) ^ (xor0 << 16u); + + // // c = c + d + // o0 = vc0 + vd0; + // o1 = vc1 + vd1; + // if (vc0 > 0xFFFFFFFFu - vd0) { + // o1 = o1 + 1u; + // } + // vc0 = o0; + // vc1 = o1; + + // // b = rotr64(b ^ c, 63) + // xor0 = vb0 ^ vc0; + // xor1 = vb1 ^ vc1; + // vb0 = (xor1 >> 31u) ^ (xor0 << 1u); + // vb1 = (xor0 >> 31u) ^ (xor1 << 1u); + + + + + + G(&v4, &v5, &v12, &v13, &v20, &v21, &v28, &v29, 0u, 0u, m4, m5); + // // a = a + b + // o0 = va0 + vb0; + // o1 = va1 + vb1; + // if (va0 > 0xFFFFFFFFu - vb0) { + // o1 = o1 + 1u; + // } + // va0 = o0; + // va1 = o1; + + // // a = a + m[sigma[r][2*i+0]] + // o0 = va0 + mx0; + // o1 = va1 + mx1; + // if (va0 > 0xFFFFFFFFu - mx0) { + // o1 = o1 + 1u; + // } + // va0 = o0; + // va1 = o1; + + // // d = rotr64(d ^ a, 32) + // xor0 = vd0 ^ va0; + // xor1 = vd1 ^ va1; + // vd0 = xor1; + // vd1 = xor0; + + // // c = c + d + // o0 = vc0 + vd0; + // o1 = vc1 + vd1; + // if (vc0 > 0xFFFFFFFFu - vd0) { + // o1 = o1 + 1u; + // } + // vc0 = o0; + // vc1 = o1; + + // // b = rotr64(b ^ c, 24) + // xor0 = vb0 ^ vc0; + // xor1 = vb1 ^ vc1; + // vb0 = (xor0 >> 24u) ^ (xor1 << 8u); + // vb1 = (xor1 >> 24u) ^ (xor0 << 8u); + + // // a = a + b + // o0 = va0 + vb0; + // o1 = va1 + vb1; + // if (va0 > 0xFFFFFFFFu - vb0) { + // o1 = o1 + 1u; + // } + // va0 = o0; + // va1 = o1; + + // // a = a + m[sigma[r][2*i+1]] + // o0 = va0 + my0; + // o1 = va1 + my1; + // if (va0 > 0xFFFFFFFFu - my0) { + // o1 = o1 + 1u; + // } + // va0 = o0; + // va1 = o1; + + // // d = rotr64(d ^ a, 16) + // xor0 = vd0 ^ va0; + // xor1 = vd1 ^ va1; + // vd0 = (xor0 >> 16u) ^ (xor1 << 16u); + // vd1 = (xor1 >> 16u) ^ (xor0 << 16u); + + // // c = c + d + // o0 = vc0 + vd0; + // o1 = vc1 + vd1; + // if (vc0 > 0xFFFFFFFFu - vd0) { + // o1 = o1 + 1u; + // } + // vc0 = o0; + // vc1 = o1; + + // // b = rotr64(b ^ c, 63) + // xor0 = vb0 ^ vc0; + // xor1 = vb1 ^ vc1; + // vb0 = (xor1 >> 31u) ^ (xor0 << 1u); + // vb1 = (xor0 >> 31u) ^ (xor1 << 1u); + + + + + + G(&v6, &v7, &v14, &v15, &v22, &v23, &v30, &v31, 0u, 0u, 0u, 0u); + // // a = a + b + // o0 = va0 + vb0; + // o1 = va1 + vb1; + // if (va0 > 0xFFFFFFFFu - vb0) { + // o1 = o1 + 1u; + // } + // va0 = o0; + // va1 = o1; + + // // a = a + m[sigma[r][2*i+0]] + // o0 = va0 + mx0; + // o1 = va1 + mx1; + // if (va0 > 0xFFFFFFFFu - mx0) { + // o1 = o1 + 1u; + // } + // va0 = o0; + // va1 = o1; + + // // d = rotr64(d ^ a, 32) + // xor0 = vd0 ^ va0; + // xor1 = vd1 ^ va1; + // vd0 = xor1; + // vd1 = xor0; + + // // c = c + d + // o0 = vc0 + vd0; + // o1 = vc1 + vd1; + // if (vc0 > 0xFFFFFFFFu - vd0) { + // o1 = o1 + 1u; + // } + // vc0 = o0; + // vc1 = o1; + + // // b = rotr64(b ^ c, 24) + // xor0 = vb0 ^ vc0; + // xor1 = vb1 ^ vc1; + // vb0 = (xor0 >> 24u) ^ (xor1 << 8u); + // vb1 = (xor1 >> 24u) ^ (xor0 << 8u); + + // // a = a + b + // o0 = va0 + vb0; + // o1 = va1 + vb1; + // if (va0 > 0xFFFFFFFFu - vb0) { + // o1 = o1 + 1u; + // } + // va0 = o0; + // va1 = o1; + + // // a = a + m[sigma[r][2*i+1]] + // o0 = va0 + my0; + // o1 = va1 + my1; + // if (va0 > 0xFFFFFFFFu - my0) { + // o1 = o1 + 1u; + // } + // va0 = o0; + // va1 = o1; + + // // d = rotr64(d ^ a, 16) + // xor0 = vd0 ^ va0; + // xor1 = vd1 ^ va1; + // vd0 = (xor0 >> 16u) ^ (xor1 << 16u); + // vd1 = (xor1 >> 16u) ^ (xor0 << 16u); + + // // c = c + d + // o0 = vc0 + vd0; + // o1 = vc1 + vd1; + // if (vc0 > 0xFFFFFFFFu - vd0) { + // o1 = o1 + 1u; + // } + // vc0 = o0; + // vc1 = o1; + + // // b = rotr64(b ^ c, 63) + // xor0 = vb0 ^ vc0; + // xor1 = vb1 ^ vc1; + // vb0 = (xor1 >> 31u) ^ (xor0 << 1u); + // vb1 = (xor0 >> 31u) ^ (xor1 << 1u); + + + + + + G(&v0, &v1, &v10, &v11, &v20, &v21, &v30, &v31, 0u, 0u, 0u, 0u); + // // a = a + b + // o0 = va0 + vb0; + // o1 = va1 + vb1; + // if (va0 > 0xFFFFFFFFu - vb0) { + // o1 = o1 + 1u; + // } + // va0 = o0; + // va1 = o1; + + // // a = a + m[sigma[r][2*i+0]] + // o0 = va0 + mx0; + // o1 = va1 + mx1; + // if (va0 > 0xFFFFFFFFu - mx0) { + // o1 = o1 + 1u; + // } + // va0 = o0; + // va1 = o1; + + // // d = rotr64(d ^ a, 32) + // xor0 = vd0 ^ va0; + // xor1 = vd1 ^ va1; + // vd0 = xor1; + // vd1 = xor0; + + // // c = c + d + // o0 = vc0 + vd0; + // o1 = vc1 + vd1; + // if (vc0 > 0xFFFFFFFFu - vd0) { + // o1 = o1 + 1u; + // } + // vc0 = o0; + // vc1 = o1; + + // // b = rotr64(b ^ c, 24) + // xor0 = vb0 ^ vc0; + // xor1 = vb1 ^ vc1; + // vb0 = (xor0 >> 24u) ^ (xor1 << 8u); + // vb1 = (xor1 >> 24u) ^ (xor0 << 8u); + + // // a = a + b + // o0 = va0 + vb0; + // o1 = va1 + vb1; + // if (va0 > 0xFFFFFFFFu - vb0) { + // o1 = o1 + 1u; + // } + // va0 = o0; + // va1 = o1; + + // // a = a + m[sigma[r][2*i+1]] + // o0 = va0 + my0; + // o1 = va1 + my1; + // if (va0 > 0xFFFFFFFFu - my0) { + // o1 = o1 + 1u; + // } + // va0 = o0; + // va1 = o1; + + // // d = rotr64(d ^ a, 16) + // xor0 = vd0 ^ va0; + // xor1 = vd1 ^ va1; + // vd0 = (xor0 >> 16u) ^ (xor1 << 16u); + // vd1 = (xor1 >> 16u) ^ (xor0 << 16u); + + // // c = c + d + // o0 = vc0 + vd0; + // o1 = vc1 + vd1; + // if (vc0 > 0xFFFFFFFFu - vd0) { + // o1 = o1 + 1u; + // } + // vc0 = o0; + // vc1 = o1; + + // // b = rotr64(b ^ c, 63) + // xor0 = vb0 ^ vc0; + // xor1 = vb1 ^ vc1; + // vb0 = (xor1 >> 31u) ^ (xor0 << 1u); + // vb1 = (xor0 >> 31u) ^ (xor1 << 1u); + + + + + + G(&v2, &v3, &v12, &v13, &v22, &v23, &v24, &v25, m6, m7, 0u, 0u); + // // a = a + b + // o0 = va0 + vb0; + // o1 = va1 + vb1; + // if (va0 > 0xFFFFFFFFu - vb0) { + // o1 = o1 + 1u; + // } + // va0 = o0; + // va1 = o1; + + // // a = a + m[sigma[r][2*i+0]] + // o0 = va0 + mx0; + // o1 = va1 + mx1; + // if (va0 > 0xFFFFFFFFu - mx0) { + // o1 = o1 + 1u; + // } + // va0 = o0; + // va1 = o1; + + // // d = rotr64(d ^ a, 32) + // xor0 = vd0 ^ va0; + // xor1 = vd1 ^ va1; + // vd0 = xor1; + // vd1 = xor0; + + // // c = c + d + // o0 = vc0 + vd0; + // o1 = vc1 + vd1; + // if (vc0 > 0xFFFFFFFFu - vd0) { + // o1 = o1 + 1u; + // } + // vc0 = o0; + // vc1 = o1; + + // // b = rotr64(b ^ c, 24) + // xor0 = vb0 ^ vc0; + // xor1 = vb1 ^ vc1; + // vb0 = (xor0 >> 24u) ^ (xor1 << 8u); + // vb1 = (xor1 >> 24u) ^ (xor0 << 8u); + + // // a = a + b + // o0 = va0 + vb0; + // o1 = va1 + vb1; + // if (va0 > 0xFFFFFFFFu - vb0) { + // o1 = o1 + 1u; + // } + // va0 = o0; + // va1 = o1; + + // // a = a + m[sigma[r][2*i+1]] + // o0 = va0 + my0; + // o1 = va1 + my1; + // if (va0 > 0xFFFFFFFFu - my0) { + // o1 = o1 + 1u; + // } + // va0 = o0; + // va1 = o1; + + // // d = rotr64(d ^ a, 16) + // xor0 = vd0 ^ va0; + // xor1 = vd1 ^ va1; + // vd0 = (xor0 >> 16u) ^ (xor1 << 16u); + // vd1 = (xor1 >> 16u) ^ (xor0 << 16u); + + // // c = c + d + // o0 = vc0 + vd0; + // o1 = vc1 + vd1; + // if (vc0 > 0xFFFFFFFFu - vd0) { + // o1 = o1 + 1u; + // } + // vc0 = o0; + // vc1 = o1; + + // // b = rotr64(b ^ c, 63) + // xor0 = vb0 ^ vc0; + // xor1 = vb1 ^ vc1; + // vb0 = (xor1 >> 31u) ^ (xor0 << 1u); + // vb1 = (xor0 >> 31u) ^ (xor1 << 1u); + + + + + + G(&v4, &v5, &v14, &v15, &v16, &v17, &v26, &v27, 0u, 0u, m2, m3); + // // a = a + b + // o0 = va0 + vb0; + // o1 = va1 + vb1; + // if (va0 > 0xFFFFFFFFu - vb0) { + // o1 = o1 + 1u; + // } + // va0 = o0; + // va1 = o1; + + // // a = a + m[sigma[r][2*i+0]] + // o0 = va0 + mx0; + // o1 = va1 + mx1; + // if (va0 > 0xFFFFFFFFu - mx0) { + // o1 = o1 + 1u; + // } + // va0 = o0; + // va1 = o1; + + // // d = rotr64(d ^ a, 32) + // xor0 = vd0 ^ va0; + // xor1 = vd1 ^ va1; + // vd0 = xor1; + // vd1 = xor0; + + // // c = c + d + // o0 = vc0 + vd0; + // o1 = vc1 + vd1; + // if (vc0 > 0xFFFFFFFFu - vd0) { + // o1 = o1 + 1u; + // } + // vc0 = o0; + // vc1 = o1; + + // // b = rotr64(b ^ c, 24) + // xor0 = vb0 ^ vc0; + // xor1 = vb1 ^ vc1; + // vb0 = (xor0 >> 24u) ^ (xor1 << 8u); + // vb1 = (xor1 >> 24u) ^ (xor0 << 8u); + + // // a = a + b + // o0 = va0 + vb0; + // o1 = va1 + vb1; + // if (va0 > 0xFFFFFFFFu - vb0) { + // o1 = o1 + 1u; + // } + // va0 = o0; + // va1 = o1; + + // // a = a + m[sigma[r][2*i+1]] + // o0 = va0 + my0; + // o1 = va1 + my1; + // if (va0 > 0xFFFFFFFFu - my0) { + // o1 = o1 + 1u; + // } + // va0 = o0; + // va1 = o1; + + // // d = rotr64(d ^ a, 16) + // xor0 = vd0 ^ va0; + // xor1 = vd1 ^ va1; + // vd0 = (xor0 >> 16u) ^ (xor1 << 16u); + // vd1 = (xor1 >> 16u) ^ (xor0 << 16u); + + // // c = c + d + // o0 = vc0 + vd0; + // o1 = vc1 + vd1; + // if (vc0 > 0xFFFFFFFFu - vd0) { + // o1 = o1 + 1u; + // } + // vc0 = o0; + // vc1 = o1; + + // // b = rotr64(b ^ c, 63) + // xor0 = vb0 ^ vc0; + // xor1 = vb1 ^ vc1; + // vb0 = (xor1 >> 31u) ^ (xor0 << 1u); + // vb1 = (xor0 >> 31u) ^ (xor1 << 1u); + + + + + + G(&v6, &v7, &v8, &v9, &v18, &v19, &v28, &v29, 0u, 0u, m8, m9); + // // a = a + b + // o0 = va0 + vb0; + // o1 = va1 + vb1; + // if (va0 > 0xFFFFFFFFu - vb0) { + // o1 = o1 + 1u; + // } + // va0 = o0; + // va1 = o1; + + // // a = a + m[sigma[r][2*i+0]] + // o0 = va0 + mx0; + // o1 = va1 + mx1; + // if (va0 > 0xFFFFFFFFu - mx0) { + // o1 = o1 + 1u; + // } + // va0 = o0; + // va1 = o1; + + // // d = rotr64(d ^ a, 32) + // xor0 = vd0 ^ va0; + // xor1 = vd1 ^ va1; + // vd0 = xor1; + // vd1 = xor0; + + // // c = c + d + // o0 = vc0 + vd0; + // o1 = vc1 + vd1; + // if (vc0 > 0xFFFFFFFFu - vd0) { + // o1 = o1 + 1u; + // } + // vc0 = o0; + // vc1 = o1; + + // // b = rotr64(b ^ c, 24) + // xor0 = vb0 ^ vc0; + // xor1 = vb1 ^ vc1; + // vb0 = (xor0 >> 24u) ^ (xor1 << 8u); + // vb1 = (xor1 >> 24u) ^ (xor0 << 8u); + + // // a = a + b + // o0 = va0 + vb0; + // o1 = va1 + vb1; + // if (va0 > 0xFFFFFFFFu - vb0) { + // o1 = o1 + 1u; + // } + // va0 = o0; + // va1 = o1; + + // // a = a + m[sigma[r][2*i+1]] + // o0 = va0 + my0; + // o1 = va1 + my1; + // if (va0 > 0xFFFFFFFFu - my0) { + // o1 = o1 + 1u; + // } + // va0 = o0; + // va1 = o1; + + // // d = rotr64(d ^ a, 16) + // xor0 = vd0 ^ va0; + // xor1 = vd1 ^ va1; + // vd0 = (xor0 >> 16u) ^ (xor1 << 16u); + // vd1 = (xor1 >> 16u) ^ (xor0 << 16u); + + // // c = c + d + // o0 = vc0 + vd0; + // o1 = vc1 + vd1; + // if (vc0 > 0xFFFFFFFFu - vd0) { + // o1 = o1 + 1u; + // } + // vc0 = o0; + // vc1 = o1; + + // // b = rotr64(b ^ c, 63) + // xor0 = vb0 ^ vc0; + // xor1 = vb1 ^ vc1; + // vb0 = (xor1 >> 31u) ^ (xor0 << 1u); + // vb1 = (xor0 >> 31u) ^ (xor1 << 1u); + + + + + + /**************************************************************************** + * ROUND(3) * + ****************************************************************************/ + + G(&v0, &v1, &v8, &v9, &v16, &v17, &v24, &v25, 0u, 0u, 0u, 0u); + // // a = a + b + // o0 = va0 + vb0; + // o1 = va1 + vb1; + // if (va0 > 0xFFFFFFFFu - vb0) { + // o1 = o1 + 1u; + // } + // va0 = o0; + // va1 = o1; + + // // a = a + m[sigma[r][2*i+0]] + // o0 = va0 + mx0; + // o1 = va1 + mx1; + // if (va0 > 0xFFFFFFFFu - mx0) { + // o1 = o1 + 1u; + // } + // va0 = o0; + // va1 = o1; + + // // d = rotr64(d ^ a, 32) + // xor0 = vd0 ^ va0; + // xor1 = vd1 ^ va1; + // vd0 = xor1; + // vd1 = xor0; + + // // c = c + d + // o0 = vc0 + vd0; + // o1 = vc1 + vd1; + // if (vc0 > 0xFFFFFFFFu - vd0) { + // o1 = o1 + 1u; + // } + // vc0 = o0; + // vc1 = o1; + + // // b = rotr64(b ^ c, 24) + // xor0 = vb0 ^ vc0; + // xor1 = vb1 ^ vc1; + // vb0 = (xor0 >> 24u) ^ (xor1 << 8u); + // vb1 = (xor1 >> 24u) ^ (xor0 << 8u); + + // // a = a + b + // o0 = va0 + vb0; + // o1 = va1 + vb1; + // if (va0 > 0xFFFFFFFFu - vb0) { + // o1 = o1 + 1u; + // } + // va0 = o0; + // va1 = o1; + + // // a = a + m[sigma[r][2*i+1]] + // o0 = va0 + my0; + // o1 = va1 + my1; + // if (va0 > 0xFFFFFFFFu - my0) { + // o1 = o1 + 1u; + // } + // va0 = o0; + // va1 = o1; + + // // d = rotr64(d ^ a, 16) + // xor0 = vd0 ^ va0; + // xor1 = vd1 ^ va1; + // vd0 = (xor0 >> 16u) ^ (xor1 << 16u); + // vd1 = (xor1 >> 16u) ^ (xor0 << 16u); + + // // c = c + d + // o0 = vc0 + vd0; + // o1 = vc1 + vd1; + // if (vc0 > 0xFFFFFFFFu - vd0) { + // o1 = o1 + 1u; + // } + // vc0 = o0; + // vc1 = o1; + + // // b = rotr64(b ^ c, 63) + // xor0 = vb0 ^ vc0; + // xor1 = vb1 ^ vc1; + // vb0 = (xor1 >> 31u) ^ (xor0 << 1u); + // vb1 = (xor0 >> 31u) ^ (xor1 << 1u); + + + + + + G(&v2, &v3, &v10, &v11, &v18, &v19, &v26, &v27, m6, m7, m2, m3); + // // a = a + b + // o0 = va0 + vb0; + // o1 = va1 + vb1; + // if (va0 > 0xFFFFFFFFu - vb0) { + // o1 = o1 + 1u; + // } + // va0 = o0; + // va1 = o1; + + // // a = a + m[sigma[r][2*i+0]] + // o0 = va0 + mx0; + // o1 = va1 + mx1; + // if (va0 > 0xFFFFFFFFu - mx0) { + // o1 = o1 + 1u; + // } + // va0 = o0; + // va1 = o1; + + // // d = rotr64(d ^ a, 32) + // xor0 = vd0 ^ va0; + // xor1 = vd1 ^ va1; + // vd0 = xor1; + // vd1 = xor0; + + // // c = c + d + // o0 = vc0 + vd0; + // o1 = vc1 + vd1; + // if (vc0 > 0xFFFFFFFFu - vd0) { + // o1 = o1 + 1u; + // } + // vc0 = o0; + // vc1 = o1; + + // // b = rotr64(b ^ c, 24) + // xor0 = vb0 ^ vc0; + // xor1 = vb1 ^ vc1; + // vb0 = (xor0 >> 24u) ^ (xor1 << 8u); + // vb1 = (xor1 >> 24u) ^ (xor0 << 8u); + + // // a = a + b + // o0 = va0 + vb0; + // o1 = va1 + vb1; + // if (va0 > 0xFFFFFFFFu - vb0) { + // o1 = o1 + 1u; + // } + // va0 = o0; + // va1 = o1; + + // // a = a + m[sigma[r][2*i+1]] + // o0 = va0 + my0; + // o1 = va1 + my1; + // if (va0 > 0xFFFFFFFFu - my0) { + // o1 = o1 + 1u; + // } + // va0 = o0; + // va1 = o1; + + // // d = rotr64(d ^ a, 16) + // xor0 = vd0 ^ va0; + // xor1 = vd1 ^ va1; + // vd0 = (xor0 >> 16u) ^ (xor1 << 16u); + // vd1 = (xor1 >> 16u) ^ (xor0 << 16u); + + // // c = c + d + // o0 = vc0 + vd0; + // o1 = vc1 + vd1; + // if (vc0 > 0xFFFFFFFFu - vd0) { + // o1 = o1 + 1u; + // } + // vc0 = o0; + // vc1 = o1; + + // // b = rotr64(b ^ c, 63) + // xor0 = vb0 ^ vc0; + // xor1 = vb1 ^ vc1; + // vb0 = (xor1 >> 31u) ^ (xor0 << 1u); + // vb1 = (xor0 >> 31u) ^ (xor1 << 1u); + + + + + + G(&v4, &v5, &v12, &v13, &v20, &v21, &v28, &v29, 0u, 0u, 0u, 0u); + // // a = a + b + // o0 = va0 + vb0; + // o1 = va1 + vb1; + // if (va0 > 0xFFFFFFFFu - vb0) { + // o1 = o1 + 1u; + // } + // va0 = o0; + // va1 = o1; + + // // a = a + m[sigma[r][2*i+0]] + // o0 = va0 + mx0; + // o1 = va1 + mx1; + // if (va0 > 0xFFFFFFFFu - mx0) { + // o1 = o1 + 1u; + // } + // va0 = o0; + // va1 = o1; + + // // d = rotr64(d ^ a, 32) + // xor0 = vd0 ^ va0; + // xor1 = vd1 ^ va1; + // vd0 = xor1; + // vd1 = xor0; + + // // c = c + d + // o0 = vc0 + vd0; + // o1 = vc1 + vd1; + // if (vc0 > 0xFFFFFFFFu - vd0) { + // o1 = o1 + 1u; + // } + // vc0 = o0; + // vc1 = o1; + + // // b = rotr64(b ^ c, 24) + // xor0 = vb0 ^ vc0; + // xor1 = vb1 ^ vc1; + // vb0 = (xor0 >> 24u) ^ (xor1 << 8u); + // vb1 = (xor1 >> 24u) ^ (xor0 << 8u); + + // // a = a + b + // o0 = va0 + vb0; + // o1 = va1 + vb1; + // if (va0 > 0xFFFFFFFFu - vb0) { + // o1 = o1 + 1u; + // } + // va0 = o0; + // va1 = o1; + + // // a = a + m[sigma[r][2*i+1]] + // o0 = va0 + my0; + // o1 = va1 + my1; + // if (va0 > 0xFFFFFFFFu - my0) { + // o1 = o1 + 1u; + // } + // va0 = o0; + // va1 = o1; + + // // d = rotr64(d ^ a, 16) + // xor0 = vd0 ^ va0; + // xor1 = vd1 ^ va1; + // vd0 = (xor0 >> 16u) ^ (xor1 << 16u); + // vd1 = (xor1 >> 16u) ^ (xor0 << 16u); + + // // c = c + d + // o0 = vc0 + vd0; + // o1 = vc1 + vd1; + // if (vc0 > 0xFFFFFFFFu - vd0) { + // o1 = o1 + 1u; + // } + // vc0 = o0; + // vc1 = o1; + + // // b = rotr64(b ^ c, 63) + // xor0 = vb0 ^ vc0; + // xor1 = vb1 ^ vc1; + // vb0 = (xor1 >> 31u) ^ (xor0 << 1u); + // vb1 = (xor0 >> 31u) ^ (xor1 << 1u); + + + + + + G(&v6, &v7, &v14, &v15, &v22, &v23, &v30, &v31, 0u, 0u, 0u, 0u); + // // a = a + b + // o0 = va0 + vb0; + // o1 = va1 + vb1; + // if (va0 > 0xFFFFFFFFu - vb0) { + // o1 = o1 + 1u; + // } + // va0 = o0; + // va1 = o1; + + // // a = a + m[sigma[r][2*i+0]] + // o0 = va0 + mx0; + // o1 = va1 + mx1; + // if (va0 > 0xFFFFFFFFu - mx0) { + // o1 = o1 + 1u; + // } + // va0 = o0; + // va1 = o1; + + // // d = rotr64(d ^ a, 32) + // xor0 = vd0 ^ va0; + // xor1 = vd1 ^ va1; + // vd0 = xor1; + // vd1 = xor0; + + // // c = c + d + // o0 = vc0 + vd0; + // o1 = vc1 + vd1; + // if (vc0 > 0xFFFFFFFFu - vd0) { + // o1 = o1 + 1u; + // } + // vc0 = o0; + // vc1 = o1; + + // // b = rotr64(b ^ c, 24) + // xor0 = vb0 ^ vc0; + // xor1 = vb1 ^ vc1; + // vb0 = (xor0 >> 24u) ^ (xor1 << 8u); + // vb1 = (xor1 >> 24u) ^ (xor0 << 8u); + + // // a = a + b + // o0 = va0 + vb0; + // o1 = va1 + vb1; + // if (va0 > 0xFFFFFFFFu - vb0) { + // o1 = o1 + 1u; + // } + // va0 = o0; + // va1 = o1; + + // // a = a + m[sigma[r][2*i+1]] + // o0 = va0 + my0; + // o1 = va1 + my1; + // if (va0 > 0xFFFFFFFFu - my0) { + // o1 = o1 + 1u; + // } + // va0 = o0; + // va1 = o1; + + // // d = rotr64(d ^ a, 16) + // xor0 = vd0 ^ va0; + // xor1 = vd1 ^ va1; + // vd0 = (xor0 >> 16u) ^ (xor1 << 16u); + // vd1 = (xor1 >> 16u) ^ (xor0 << 16u); + + // // c = c + d + // o0 = vc0 + vd0; + // o1 = vc1 + vd1; + // if (vc0 > 0xFFFFFFFFu - vd0) { + // o1 = o1 + 1u; + // } + // vc0 = o0; + // vc1 = o1; + + // // b = rotr64(b ^ c, 63) + // xor0 = vb0 ^ vc0; + // xor1 = vb1 ^ vc1; + // vb0 = (xor1 >> 31u) ^ (xor0 << 1u); + // vb1 = (xor0 >> 31u) ^ (xor1 << 1u); + + + + + + G(&v0, &v1, &v10, &v11, &v20, &v21, &v30, &v31, m4, m5, 0u, 0u); + // // a = a + b + // o0 = va0 + vb0; + // o1 = va1 + vb1; + // if (va0 > 0xFFFFFFFFu - vb0) { + // o1 = o1 + 1u; + // } + // va0 = o0; + // va1 = o1; + + // // a = a + m[sigma[r][2*i+0]] + // o0 = va0 + mx0; + // o1 = va1 + mx1; + // if (va0 > 0xFFFFFFFFu - mx0) { + // o1 = o1 + 1u; + // } + // va0 = o0; + // va1 = o1; + + // // d = rotr64(d ^ a, 32) + // xor0 = vd0 ^ va0; + // xor1 = vd1 ^ va1; + // vd0 = xor1; + // vd1 = xor0; + + // // c = c + d + // o0 = vc0 + vd0; + // o1 = vc1 + vd1; + // if (vc0 > 0xFFFFFFFFu - vd0) { + // o1 = o1 + 1u; + // } + // vc0 = o0; + // vc1 = o1; + + // // b = rotr64(b ^ c, 24) + // xor0 = vb0 ^ vc0; + // xor1 = vb1 ^ vc1; + // vb0 = (xor0 >> 24u) ^ (xor1 << 8u); + // vb1 = (xor1 >> 24u) ^ (xor0 << 8u); + + // // a = a + b + // o0 = va0 + vb0; + // o1 = va1 + vb1; + // if (va0 > 0xFFFFFFFFu - vb0) { + // o1 = o1 + 1u; + // } + // va0 = o0; + // va1 = o1; + + // // a = a + m[sigma[r][2*i+1]] + // o0 = va0 + my0; + // o1 = va1 + my1; + // if (va0 > 0xFFFFFFFFu - my0) { + // o1 = o1 + 1u; + // } + // va0 = o0; + // va1 = o1; + + // // d = rotr64(d ^ a, 16) + // xor0 = vd0 ^ va0; + // xor1 = vd1 ^ va1; + // vd0 = (xor0 >> 16u) ^ (xor1 << 16u); + // vd1 = (xor1 >> 16u) ^ (xor0 << 16u); + + // // c = c + d + // o0 = vc0 + vd0; + // o1 = vc1 + vd1; + // if (vc0 > 0xFFFFFFFFu - vd0) { + // o1 = o1 + 1u; + // } + // vc0 = o0; + // vc1 = o1; + + // // b = rotr64(b ^ c, 63) + // xor0 = vb0 ^ vc0; + // xor1 = vb1 ^ vc1; + // vb0 = (xor1 >> 31u) ^ (xor0 << 1u); + // vb1 = (xor0 >> 31u) ^ (xor1 << 1u); + + + + + + G(&v2, &v3, &v12, &v13, &v22, &v23, &v24, &v25, 0u, 0u, 0u, 0u); + // // a = a + b + // o0 = va0 + vb0; + // o1 = va1 + vb1; + // if (va0 > 0xFFFFFFFFu - vb0) { + // o1 = o1 + 1u; + // } + // va0 = o0; + // va1 = o1; + + // // a = a + m[sigma[r][2*i+0]] + // o0 = va0 + mx0; + // o1 = va1 + mx1; + // if (va0 > 0xFFFFFFFFu - mx0) { + // o1 = o1 + 1u; + // } + // va0 = o0; + // va1 = o1; + + // // d = rotr64(d ^ a, 32) + // xor0 = vd0 ^ va0; + // xor1 = vd1 ^ va1; + // vd0 = xor1; + // vd1 = xor0; + + // // c = c + d + // o0 = vc0 + vd0; + // o1 = vc1 + vd1; + // if (vc0 > 0xFFFFFFFFu - vd0) { + // o1 = o1 + 1u; + // } + // vc0 = o0; + // vc1 = o1; + + // // b = rotr64(b ^ c, 24) + // xor0 = vb0 ^ vc0; + // xor1 = vb1 ^ vc1; + // vb0 = (xor0 >> 24u) ^ (xor1 << 8u); + // vb1 = (xor1 >> 24u) ^ (xor0 << 8u); + + // // a = a + b + // o0 = va0 + vb0; + // o1 = va1 + vb1; + // if (va0 > 0xFFFFFFFFu - vb0) { + // o1 = o1 + 1u; + // } + // va0 = o0; + // va1 = o1; + + // // a = a + m[sigma[r][2*i+1]] + // o0 = va0 + my0; + // o1 = va1 + my1; + // if (va0 > 0xFFFFFFFFu - my0) { + // o1 = o1 + 1u; + // } + // va0 = o0; + // va1 = o1; + + // // d = rotr64(d ^ a, 16) + // xor0 = vd0 ^ va0; + // xor1 = vd1 ^ va1; + // vd0 = (xor0 >> 16u) ^ (xor1 << 16u); + // vd1 = (xor1 >> 16u) ^ (xor0 << 16u); + + // // c = c + d + // o0 = vc0 + vd0; + // o1 = vc1 + vd1; + // if (vc0 > 0xFFFFFFFFu - vd0) { + // o1 = o1 + 1u; + // } + // vc0 = o0; + // vc1 = o1; + + // // b = rotr64(b ^ c, 63) + // xor0 = vb0 ^ vc0; + // xor1 = vb1 ^ vc1; + // vb0 = (xor1 >> 31u) ^ (xor0 << 1u); + // vb1 = (xor0 >> 31u) ^ (xor1 << 1u); + + + + + + G(&v4, &v5, &v14, &v15, &v16, &v17, &v26, &v27, m8, m9, m0, m1); + // // a = a + b + // o0 = va0 + vb0; + // o1 = va1 + vb1; + // if (va0 > 0xFFFFFFFFu - vb0) { + // o1 = o1 + 1u; + // } + // va0 = o0; + // va1 = o1; + + // // a = a + m[sigma[r][2*i+0]] + // o0 = va0 + mx0; + // o1 = va1 + mx1; + // if (va0 > 0xFFFFFFFFu - mx0) { + // o1 = o1 + 1u; + // } + // va0 = o0; + // va1 = o1; + + // // d = rotr64(d ^ a, 32) + // xor0 = vd0 ^ va0; + // xor1 = vd1 ^ va1; + // vd0 = xor1; + // vd1 = xor0; + + // // c = c + d + // o0 = vc0 + vd0; + // o1 = vc1 + vd1; + // if (vc0 > 0xFFFFFFFFu - vd0) { + // o1 = o1 + 1u; + // } + // vc0 = o0; + // vc1 = o1; + + // // b = rotr64(b ^ c, 24) + // xor0 = vb0 ^ vc0; + // xor1 = vb1 ^ vc1; + // vb0 = (xor0 >> 24u) ^ (xor1 << 8u); + // vb1 = (xor1 >> 24u) ^ (xor0 << 8u); + + // // a = a + b + // o0 = va0 + vb0; + // o1 = va1 + vb1; + // if (va0 > 0xFFFFFFFFu - vb0) { + // o1 = o1 + 1u; + // } + // va0 = o0; + // va1 = o1; + + // // a = a + m[sigma[r][2*i+1]] + // o0 = va0 + my0; + // o1 = va1 + my1; + // if (va0 > 0xFFFFFFFFu - my0) { + // o1 = o1 + 1u; + // } + // va0 = o0; + // va1 = o1; + + // // d = rotr64(d ^ a, 16) + // xor0 = vd0 ^ va0; + // xor1 = vd1 ^ va1; + // vd0 = (xor0 >> 16u) ^ (xor1 << 16u); + // vd1 = (xor1 >> 16u) ^ (xor0 << 16u); + + // // c = c + d + // o0 = vc0 + vd0; + // o1 = vc1 + vd1; + // if (vc0 > 0xFFFFFFFFu - vd0) { + // o1 = o1 + 1u; + // } + // vc0 = o0; + // vc1 = o1; + + // // b = rotr64(b ^ c, 63) + // xor0 = vb0 ^ vc0; + // xor1 = vb1 ^ vc1; + // vb0 = (xor1 >> 31u) ^ (xor0 << 1u); + // vb1 = (xor0 >> 31u) ^ (xor1 << 1u); + + + + + + G(&v6, &v7, &v8, &v9, &v18, &v19, &v28, &v29, 0u, 0u, 0u, 0u); + // // a = a + b + // o0 = va0 + vb0; + // o1 = va1 + vb1; + // if (va0 > 0xFFFFFFFFu - vb0) { + // o1 = o1 + 1u; + // } + // va0 = o0; + // va1 = o1; + + // // a = a + m[sigma[r][2*i+0]] + // o0 = va0 + mx0; + // o1 = va1 + mx1; + // if (va0 > 0xFFFFFFFFu - mx0) { + // o1 = o1 + 1u; + // } + // va0 = o0; + // va1 = o1; + + // // d = rotr64(d ^ a, 32) + // xor0 = vd0 ^ va0; + // xor1 = vd1 ^ va1; + // vd0 = xor1; + // vd1 = xor0; + + // // c = c + d + // o0 = vc0 + vd0; + // o1 = vc1 + vd1; + // if (vc0 > 0xFFFFFFFFu - vd0) { + // o1 = o1 + 1u; + // } + // vc0 = o0; + // vc1 = o1; + + // // b = rotr64(b ^ c, 24) + // xor0 = vb0 ^ vc0; + // xor1 = vb1 ^ vc1; + // vb0 = (xor0 >> 24u) ^ (xor1 << 8u); + // vb1 = (xor1 >> 24u) ^ (xor0 << 8u); + + // // a = a + b + // o0 = va0 + vb0; + // o1 = va1 + vb1; + // if (va0 > 0xFFFFFFFFu - vb0) { + // o1 = o1 + 1u; + // } + // va0 = o0; + // va1 = o1; + + // // a = a + m[sigma[r][2*i+1]] + // o0 = va0 + my0; + // o1 = va1 + my1; + // if (va0 > 0xFFFFFFFFu - my0) { + // o1 = o1 + 1u; + // } + // va0 = o0; + // va1 = o1; + + // // d = rotr64(d ^ a, 16) + // xor0 = vd0 ^ va0; + // xor1 = vd1 ^ va1; + // vd0 = (xor0 >> 16u) ^ (xor1 << 16u); + // vd1 = (xor1 >> 16u) ^ (xor0 << 16u); + + // // c = c + d + // o0 = vc0 + vd0; + // o1 = vc1 + vd1; + // if (vc0 > 0xFFFFFFFFu - vd0) { + // o1 = o1 + 1u; + // } + // vc0 = o0; + // vc1 = o1; + + // // b = rotr64(b ^ c, 63) + // xor0 = vb0 ^ vc0; + // xor1 = vb1 ^ vc1; + // vb0 = (xor1 >> 31u) ^ (xor0 << 1u); + // vb1 = (xor0 >> 31u) ^ (xor1 << 1u); + + + + + + /**************************************************************************** + * ROUND(4) * + ****************************************************************************/ + + G(&v0, &v1, &v8, &v9, &v16, &v17, &v24, &v25, 0u, 0u, m0, m1); + // // a = a + b + // o0 = va0 + vb0; + // o1 = va1 + vb1; + // if (va0 > 0xFFFFFFFFu - vb0) { + // o1 = o1 + 1u; + // } + // va0 = o0; + // va1 = o1; + + // // a = a + m[sigma[r][2*i+0]] + // o0 = va0 + mx0; + // o1 = va1 + mx1; + // if (va0 > 0xFFFFFFFFu - mx0) { + // o1 = o1 + 1u; + // } + // va0 = o0; + // va1 = o1; + + // // d = rotr64(d ^ a, 32) + // xor0 = vd0 ^ va0; + // xor1 = vd1 ^ va1; + // vd0 = xor1; + // vd1 = xor0; + + // // c = c + d + // o0 = vc0 + vd0; + // o1 = vc1 + vd1; + // if (vc0 > 0xFFFFFFFFu - vd0) { + // o1 = o1 + 1u; + // } + // vc0 = o0; + // vc1 = o1; + + // // b = rotr64(b ^ c, 24) + // xor0 = vb0 ^ vc0; + // xor1 = vb1 ^ vc1; + // vb0 = (xor0 >> 24u) ^ (xor1 << 8u); + // vb1 = (xor1 >> 24u) ^ (xor0 << 8u); + + // // a = a + b + // o0 = va0 + vb0; + // o1 = va1 + vb1; + // if (va0 > 0xFFFFFFFFu - vb0) { + // o1 = o1 + 1u; + // } + // va0 = o0; + // va1 = o1; + + // // a = a + m[sigma[r][2*i+1]] + // o0 = va0 + my0; + // o1 = va1 + my1; + // if (va0 > 0xFFFFFFFFu - my0) { + // o1 = o1 + 1u; + // } + // va0 = o0; + // va1 = o1; + + // // d = rotr64(d ^ a, 16) + // xor0 = vd0 ^ va0; + // xor1 = vd1 ^ va1; + // vd0 = (xor0 >> 16u) ^ (xor1 << 16u); + // vd1 = (xor1 >> 16u) ^ (xor0 << 16u); + + // // c = c + d + // o0 = vc0 + vd0; + // o1 = vc1 + vd1; + // if (vc0 > 0xFFFFFFFFu - vd0) { + // o1 = o1 + 1u; + // } + // vc0 = o0; + // vc1 = o1; + + // // b = rotr64(b ^ c, 63) + // xor0 = vb0 ^ vc0; + // xor1 = vb1 ^ vc1; + // vb0 = (xor1 >> 31u) ^ (xor0 << 1u); + // vb1 = (xor0 >> 31u) ^ (xor1 << 1u); + + + + + + G(&v2, &v3, &v10, &v11, &v18, &v19, &v26, &v27, 0u, 0u, 0u, 0u); + // // a = a + b + // o0 = va0 + vb0; + // o1 = va1 + vb1; + // if (va0 > 0xFFFFFFFFu - vb0) { + // o1 = o1 + 1u; + // } + // va0 = o0; + // va1 = o1; + + // // a = a + m[sigma[r][2*i+0]] + // o0 = va0 + mx0; + // o1 = va1 + mx1; + // if (va0 > 0xFFFFFFFFu - mx0) { + // o1 = o1 + 1u; + // } + // va0 = o0; + // va1 = o1; + + // // d = rotr64(d ^ a, 32) + // xor0 = vd0 ^ va0; + // xor1 = vd1 ^ va1; + // vd0 = xor1; + // vd1 = xor0; + + // // c = c + d + // o0 = vc0 + vd0; + // o1 = vc1 + vd1; + // if (vc0 > 0xFFFFFFFFu - vd0) { + // o1 = o1 + 1u; + // } + // vc0 = o0; + // vc1 = o1; + + // // b = rotr64(b ^ c, 24) + // xor0 = vb0 ^ vc0; + // xor1 = vb1 ^ vc1; + // vb0 = (xor0 >> 24u) ^ (xor1 << 8u); + // vb1 = (xor1 >> 24u) ^ (xor0 << 8u); + + // // a = a + b + // o0 = va0 + vb0; + // o1 = va1 + vb1; + // if (va0 > 0xFFFFFFFFu - vb0) { + // o1 = o1 + 1u; + // } + // va0 = o0; + // va1 = o1; + + // // a = a + m[sigma[r][2*i+1]] + // o0 = va0 + my0; + // o1 = va1 + my1; + // if (va0 > 0xFFFFFFFFu - my0) { + // o1 = o1 + 1u; + // } + // va0 = o0; + // va1 = o1; + + // // d = rotr64(d ^ a, 16) + // xor0 = vd0 ^ va0; + // xor1 = vd1 ^ va1; + // vd0 = (xor0 >> 16u) ^ (xor1 << 16u); + // vd1 = (xor1 >> 16u) ^ (xor0 << 16u); + + // // c = c + d + // o0 = vc0 + vd0; + // o1 = vc1 + vd1; + // if (vc0 > 0xFFFFFFFFu - vd0) { + // o1 = o1 + 1u; + // } + // vc0 = o0; + // vc1 = o1; + + // // b = rotr64(b ^ c, 63) + // xor0 = vb0 ^ vc0; + // xor1 = vb1 ^ vc1; + // vb0 = (xor1 >> 31u) ^ (xor0 << 1u); + // vb1 = (xor0 >> 31u) ^ (xor1 << 1u); + + + + + + G(&v4, &v5, &v12, &v13, &v20, &v21, &v28, &v29, m4, m5, m8, m9); + // // a = a + b + // o0 = va0 + vb0; + // o1 = va1 + vb1; + // if (va0 > 0xFFFFFFFFu - vb0) { + // o1 = o1 + 1u; + // } + // va0 = o0; + // va1 = o1; + + // // a = a + m[sigma[r][2*i+0]] + // o0 = va0 + mx0; + // o1 = va1 + mx1; + // if (va0 > 0xFFFFFFFFu - mx0) { + // o1 = o1 + 1u; + // } + // va0 = o0; + // va1 = o1; + + // // d = rotr64(d ^ a, 32) + // xor0 = vd0 ^ va0; + // xor1 = vd1 ^ va1; + // vd0 = xor1; + // vd1 = xor0; + + // // c = c + d + // o0 = vc0 + vd0; + // o1 = vc1 + vd1; + // if (vc0 > 0xFFFFFFFFu - vd0) { + // o1 = o1 + 1u; + // } + // vc0 = o0; + // vc1 = o1; + + // // b = rotr64(b ^ c, 24) + // xor0 = vb0 ^ vc0; + // xor1 = vb1 ^ vc1; + // vb0 = (xor0 >> 24u) ^ (xor1 << 8u); + // vb1 = (xor1 >> 24u) ^ (xor0 << 8u); + + // // a = a + b + // o0 = va0 + vb0; + // o1 = va1 + vb1; + // if (va0 > 0xFFFFFFFFu - vb0) { + // o1 = o1 + 1u; + // } + // va0 = o0; + // va1 = o1; + + // // a = a + m[sigma[r][2*i+1]] + // o0 = va0 + my0; + // o1 = va1 + my1; + // if (va0 > 0xFFFFFFFFu - my0) { + // o1 = o1 + 1u; + // } + // va0 = o0; + // va1 = o1; + + // // d = rotr64(d ^ a, 16) + // xor0 = vd0 ^ va0; + // xor1 = vd1 ^ va1; + // vd0 = (xor0 >> 16u) ^ (xor1 << 16u); + // vd1 = (xor1 >> 16u) ^ (xor0 << 16u); + + // // c = c + d + // o0 = vc0 + vd0; + // o1 = vc1 + vd1; + // if (vc0 > 0xFFFFFFFFu - vd0) { + // o1 = o1 + 1u; + // } + // vc0 = o0; + // vc1 = o1; + + // // b = rotr64(b ^ c, 63) + // xor0 = vb0 ^ vc0; + // xor1 = vb1 ^ vc1; + // vb0 = (xor1 >> 31u) ^ (xor0 << 1u); + // vb1 = (xor0 >> 31u) ^ (xor1 << 1u); + + + + + + G(&v6, &v7, &v14, &v15, &v22, &v23, &v30, &v31, 0u, 0u, 0u, 0u); + // // a = a + b + // o0 = va0 + vb0; + // o1 = va1 + vb1; + // if (va0 > 0xFFFFFFFFu - vb0) { + // o1 = o1 + 1u; + // } + // va0 = o0; + // va1 = o1; + + // // a = a + m[sigma[r][2*i+0]] + // o0 = va0 + mx0; + // o1 = va1 + mx1; + // if (va0 > 0xFFFFFFFFu - mx0) { + // o1 = o1 + 1u; + // } + // va0 = o0; + // va1 = o1; + + // // d = rotr64(d ^ a, 32) + // xor0 = vd0 ^ va0; + // xor1 = vd1 ^ va1; + // vd0 = xor1; + // vd1 = xor0; + + // // c = c + d + // o0 = vc0 + vd0; + // o1 = vc1 + vd1; + // if (vc0 > 0xFFFFFFFFu - vd0) { + // o1 = o1 + 1u; + // } + // vc0 = o0; + // vc1 = o1; + + // // b = rotr64(b ^ c, 24) + // xor0 = vb0 ^ vc0; + // xor1 = vb1 ^ vc1; + // vb0 = (xor0 >> 24u) ^ (xor1 << 8u); + // vb1 = (xor1 >> 24u) ^ (xor0 << 8u); + + // // a = a + b + // o0 = va0 + vb0; + // o1 = va1 + vb1; + // if (va0 > 0xFFFFFFFFu - vb0) { + // o1 = o1 + 1u; + // } + // va0 = o0; + // va1 = o1; + + // // a = a + m[sigma[r][2*i+1]] + // o0 = va0 + my0; + // o1 = va1 + my1; + // if (va0 > 0xFFFFFFFFu - my0) { + // o1 = o1 + 1u; + // } + // va0 = o0; + // va1 = o1; + + // // d = rotr64(d ^ a, 16) + // xor0 = vd0 ^ va0; + // xor1 = vd1 ^ va1; + // vd0 = (xor0 >> 16u) ^ (xor1 << 16u); + // vd1 = (xor1 >> 16u) ^ (xor0 << 16u); + + // // c = c + d + // o0 = vc0 + vd0; + // o1 = vc1 + vd1; + // if (vc0 > 0xFFFFFFFFu - vd0) { + // o1 = o1 + 1u; + // } + // vc0 = o0; + // vc1 = o1; + + // // b = rotr64(b ^ c, 63) + // xor0 = vb0 ^ vc0; + // xor1 = vb1 ^ vc1; + // vb0 = (xor1 >> 31u) ^ (xor0 << 1u); + // vb1 = (xor0 >> 31u) ^ (xor1 << 1u); + + + + + + G(&v0, &v1, &v10, &v11, &v20, &v21, &v30, &v31, 0u, 0u, m2, m3); + // // a = a + b + // o0 = va0 + vb0; + // o1 = va1 + vb1; + // if (va0 > 0xFFFFFFFFu - vb0) { + // o1 = o1 + 1u; + // } + // va0 = o0; + // va1 = o1; + + // // a = a + m[sigma[r][2*i+0]] + // o0 = va0 + mx0; + // o1 = va1 + mx1; + // if (va0 > 0xFFFFFFFFu - mx0) { + // o1 = o1 + 1u; + // } + // va0 = o0; + // va1 = o1; + + // // d = rotr64(d ^ a, 32) + // xor0 = vd0 ^ va0; + // xor1 = vd1 ^ va1; + // vd0 = xor1; + // vd1 = xor0; + + // // c = c + d + // o0 = vc0 + vd0; + // o1 = vc1 + vd1; + // if (vc0 > 0xFFFFFFFFu - vd0) { + // o1 = o1 + 1u; + // } + // vc0 = o0; + // vc1 = o1; + + // // b = rotr64(b ^ c, 24) + // xor0 = vb0 ^ vc0; + // xor1 = vb1 ^ vc1; + // vb0 = (xor0 >> 24u) ^ (xor1 << 8u); + // vb1 = (xor1 >> 24u) ^ (xor0 << 8u); + + // // a = a + b + // o0 = va0 + vb0; + // o1 = va1 + vb1; + // if (va0 > 0xFFFFFFFFu - vb0) { + // o1 = o1 + 1u; + // } + // va0 = o0; + // va1 = o1; + + // // a = a + m[sigma[r][2*i+1]] + // o0 = va0 + my0; + // o1 = va1 + my1; + // if (va0 > 0xFFFFFFFFu - my0) { + // o1 = o1 + 1u; + // } + // va0 = o0; + // va1 = o1; + + // // d = rotr64(d ^ a, 16) + // xor0 = vd0 ^ va0; + // xor1 = vd1 ^ va1; + // vd0 = (xor0 >> 16u) ^ (xor1 << 16u); + // vd1 = (xor1 >> 16u) ^ (xor0 << 16u); + + // // c = c + d + // o0 = vc0 + vd0; + // o1 = vc1 + vd1; + // if (vc0 > 0xFFFFFFFFu - vd0) { + // o1 = o1 + 1u; + // } + // vc0 = o0; + // vc1 = o1; + + // // b = rotr64(b ^ c, 63) + // xor0 = vb0 ^ vc0; + // xor1 = vb1 ^ vc1; + // vb0 = (xor1 >> 31u) ^ (xor0 << 1u); + // vb1 = (xor0 >> 31u) ^ (xor1 << 1u); + + + + + + G(&v2, &v3, &v12, &v13, &v22, &v23, &v24, &v25, 0u, 0u, 0u, 0u); + // // a = a + b + // o0 = va0 + vb0; + // o1 = va1 + vb1; + // if (va0 > 0xFFFFFFFFu - vb0) { + // o1 = o1 + 1u; + // } + // va0 = o0; + // va1 = o1; + + // // a = a + m[sigma[r][2*i+0]] + // o0 = va0 + mx0; + // o1 = va1 + mx1; + // if (va0 > 0xFFFFFFFFu - mx0) { + // o1 = o1 + 1u; + // } + // va0 = o0; + // va1 = o1; + + // // d = rotr64(d ^ a, 32) + // xor0 = vd0 ^ va0; + // xor1 = vd1 ^ va1; + // vd0 = xor1; + // vd1 = xor0; + + // // c = c + d + // o0 = vc0 + vd0; + // o1 = vc1 + vd1; + // if (vc0 > 0xFFFFFFFFu - vd0) { + // o1 = o1 + 1u; + // } + // vc0 = o0; + // vc1 = o1; + + // // b = rotr64(b ^ c, 24) + // xor0 = vb0 ^ vc0; + // xor1 = vb1 ^ vc1; + // vb0 = (xor0 >> 24u) ^ (xor1 << 8u); + // vb1 = (xor1 >> 24u) ^ (xor0 << 8u); + + // // a = a + b + // o0 = va0 + vb0; + // o1 = va1 + vb1; + // if (va0 > 0xFFFFFFFFu - vb0) { + // o1 = o1 + 1u; + // } + // va0 = o0; + // va1 = o1; + + // // a = a + m[sigma[r][2*i+1]] + // o0 = va0 + my0; + // o1 = va1 + my1; + // if (va0 > 0xFFFFFFFFu - my0) { + // o1 = o1 + 1u; + // } + // va0 = o0; + // va1 = o1; + + // // d = rotr64(d ^ a, 16) + // xor0 = vd0 ^ va0; + // xor1 = vd1 ^ va1; + // vd0 = (xor0 >> 16u) ^ (xor1 << 16u); + // vd1 = (xor1 >> 16u) ^ (xor0 << 16u); + + // // c = c + d + // o0 = vc0 + vd0; + // o1 = vc1 + vd1; + // if (vc0 > 0xFFFFFFFFu - vd0) { + // o1 = o1 + 1u; + // } + // vc0 = o0; + // vc1 = o1; + + // // b = rotr64(b ^ c, 63) + // xor0 = vb0 ^ vc0; + // xor1 = vb1 ^ vc1; + // vb0 = (xor1 >> 31u) ^ (xor0 << 1u); + // vb1 = (xor0 >> 31u) ^ (xor1 << 1u); + + + + + + G(&v4, &v5, &v14, &v15, &v16, &v17, &v26, &v27, 0u, 0u, 0u, 0u); + // // a = a + b + // o0 = va0 + vb0; + // o1 = va1 + vb1; + // if (va0 > 0xFFFFFFFFu - vb0) { + // o1 = o1 + 1u; + // } + // va0 = o0; + // va1 = o1; + + // // a = a + m[sigma[r][2*i+0]] + // o0 = va0 + mx0; + // o1 = va1 + mx1; + // if (va0 > 0xFFFFFFFFu - mx0) { + // o1 = o1 + 1u; + // } + // va0 = o0; + // va1 = o1; + + // // d = rotr64(d ^ a, 32) + // xor0 = vd0 ^ va0; + // xor1 = vd1 ^ va1; + // vd0 = xor1; + // vd1 = xor0; + + // // c = c + d + // o0 = vc0 + vd0; + // o1 = vc1 + vd1; + // if (vc0 > 0xFFFFFFFFu - vd0) { + // o1 = o1 + 1u; + // } + // vc0 = o0; + // vc1 = o1; + + // // b = rotr64(b ^ c, 24) + // xor0 = vb0 ^ vc0; + // xor1 = vb1 ^ vc1; + // vb0 = (xor0 >> 24u) ^ (xor1 << 8u); + // vb1 = (xor1 >> 24u) ^ (xor0 << 8u); + + // // a = a + b + // o0 = va0 + vb0; + // o1 = va1 + vb1; + // if (va0 > 0xFFFFFFFFu - vb0) { + // o1 = o1 + 1u; + // } + // va0 = o0; + // va1 = o1; + + // // a = a + m[sigma[r][2*i+1]] + // o0 = va0 + my0; + // o1 = va1 + my1; + // if (va0 > 0xFFFFFFFFu - my0) { + // o1 = o1 + 1u; + // } + // va0 = o0; + // va1 = o1; + + // // d = rotr64(d ^ a, 16) + // xor0 = vd0 ^ va0; + // xor1 = vd1 ^ va1; + // vd0 = (xor0 >> 16u) ^ (xor1 << 16u); + // vd1 = (xor1 >> 16u) ^ (xor0 << 16u); + + // // c = c + d + // o0 = vc0 + vd0; + // o1 = vc1 + vd1; + // if (vc0 > 0xFFFFFFFFu - vd0) { + // o1 = o1 + 1u; + // } + // vc0 = o0; + // vc1 = o1; + + // // b = rotr64(b ^ c, 63) + // xor0 = vb0 ^ vc0; + // xor1 = vb1 ^ vc1; + // vb0 = (xor1 >> 31u) ^ (xor0 << 1u); + // vb1 = (xor0 >> 31u) ^ (xor1 << 1u); + + + + + + G(&v6, &v7, &v8, &v9, &v18, &v19, &v28, &v29, m6, m7, 0u, 0u); + // // a = a + b + // o0 = va0 + vb0; + // o1 = va1 + vb1; + // if (va0 > 0xFFFFFFFFu - vb0) { + // o1 = o1 + 1u; + // } + // va0 = o0; + // va1 = o1; + + // // a = a + m[sigma[r][2*i+0]] + // o0 = va0 + mx0; + // o1 = va1 + mx1; + // if (va0 > 0xFFFFFFFFu - mx0) { + // o1 = o1 + 1u; + // } + // va0 = o0; + // va1 = o1; + + // // d = rotr64(d ^ a, 32) + // xor0 = vd0 ^ va0; + // xor1 = vd1 ^ va1; + // vd0 = xor1; + // vd1 = xor0; + + // // c = c + d + // o0 = vc0 + vd0; + // o1 = vc1 + vd1; + // if (vc0 > 0xFFFFFFFFu - vd0) { + // o1 = o1 + 1u; + // } + // vc0 = o0; + // vc1 = o1; + + // // b = rotr64(b ^ c, 24) + // xor0 = vb0 ^ vc0; + // xor1 = vb1 ^ vc1; + // vb0 = (xor0 >> 24u) ^ (xor1 << 8u); + // vb1 = (xor1 >> 24u) ^ (xor0 << 8u); + + // // a = a + b + // o0 = va0 + vb0; + // o1 = va1 + vb1; + // if (va0 > 0xFFFFFFFFu - vb0) { + // o1 = o1 + 1u; + // } + // va0 = o0; + // va1 = o1; + + // // a = a + m[sigma[r][2*i+1]] + // o0 = va0 + my0; + // o1 = va1 + my1; + // if (va0 > 0xFFFFFFFFu - my0) { + // o1 = o1 + 1u; + // } + // va0 = o0; + // va1 = o1; + + // // d = rotr64(d ^ a, 16) + // xor0 = vd0 ^ va0; + // xor1 = vd1 ^ va1; + // vd0 = (xor0 >> 16u) ^ (xor1 << 16u); + // vd1 = (xor1 >> 16u) ^ (xor0 << 16u); + + // // c = c + d + // o0 = vc0 + vd0; + // o1 = vc1 + vd1; + // if (vc0 > 0xFFFFFFFFu - vd0) { + // o1 = o1 + 1u; + // } + // vc0 = o0; + // vc1 = o1; + + // // b = rotr64(b ^ c, 63) + // xor0 = vb0 ^ vc0; + // xor1 = vb1 ^ vc1; + // vb0 = (xor1 >> 31u) ^ (xor0 << 1u); + // vb1 = (xor0 >> 31u) ^ (xor1 << 1u); + + + + + + /**************************************************************************** + * ROUND(5) * + ****************************************************************************/ + + G(&v0, &v1, &v8, &v9, &v16, &v17, &v24, &v25, m4, m5, 0u, 0u); + // // a = a + b + // o0 = va0 + vb0; + // o1 = va1 + vb1; + // if (va0 > 0xFFFFFFFFu - vb0) { + // o1 = o1 + 1u; + // } + // va0 = o0; + // va1 = o1; + + // // a = a + m[sigma[r][2*i+0]] + // o0 = va0 + mx0; + // o1 = va1 + mx1; + // if (va0 > 0xFFFFFFFFu - mx0) { + // o1 = o1 + 1u; + // } + // va0 = o0; + // va1 = o1; + + // // d = rotr64(d ^ a, 32) + // xor0 = vd0 ^ va0; + // xor1 = vd1 ^ va1; + // vd0 = xor1; + // vd1 = xor0; + + // // c = c + d + // o0 = vc0 + vd0; + // o1 = vc1 + vd1; + // if (vc0 > 0xFFFFFFFFu - vd0) { + // o1 = o1 + 1u; + // } + // vc0 = o0; + // vc1 = o1; + + // // b = rotr64(b ^ c, 24) + // xor0 = vb0 ^ vc0; + // xor1 = vb1 ^ vc1; + // vb0 = (xor0 >> 24u) ^ (xor1 << 8u); + // vb1 = (xor1 >> 24u) ^ (xor0 << 8u); + + // // a = a + b + // o0 = va0 + vb0; + // o1 = va1 + vb1; + // if (va0 > 0xFFFFFFFFu - vb0) { + // o1 = o1 + 1u; + // } + // va0 = o0; + // va1 = o1; + + // // a = a + m[sigma[r][2*i+1]] + // o0 = va0 + my0; + // o1 = va1 + my1; + // if (va0 > 0xFFFFFFFFu - my0) { + // o1 = o1 + 1u; + // } + // va0 = o0; + // va1 = o1; + + // // d = rotr64(d ^ a, 16) + // xor0 = vd0 ^ va0; + // xor1 = vd1 ^ va1; + // vd0 = (xor0 >> 16u) ^ (xor1 << 16u); + // vd1 = (xor1 >> 16u) ^ (xor0 << 16u); + + // // c = c + d + // o0 = vc0 + vd0; + // o1 = vc1 + vd1; + // if (vc0 > 0xFFFFFFFFu - vd0) { + // o1 = o1 + 1u; + // } + // vc0 = o0; + // vc1 = o1; + + // // b = rotr64(b ^ c, 63) + // xor0 = vb0 ^ vc0; + // xor1 = vb1 ^ vc1; + // vb0 = (xor1 >> 31u) ^ (xor0 << 1u); + // vb1 = (xor0 >> 31u) ^ (xor1 << 1u); + + + + + + G(&v2, &v3, &v10, &v11, &v18, &v19, &v26, &v27, 0u, 0u, 0u, 0u); + // // a = a + b + // o0 = va0 + vb0; + // o1 = va1 + vb1; + // if (va0 > 0xFFFFFFFFu - vb0) { + // o1 = o1 + 1u; + // } + // va0 = o0; + // va1 = o1; + + // // a = a + m[sigma[r][2*i+0]] + // o0 = va0 + mx0; + // o1 = va1 + mx1; + // if (va0 > 0xFFFFFFFFu - mx0) { + // o1 = o1 + 1u; + // } + // va0 = o0; + // va1 = o1; + + // // d = rotr64(d ^ a, 32) + // xor0 = vd0 ^ va0; + // xor1 = vd1 ^ va1; + // vd0 = xor1; + // vd1 = xor0; + + // // c = c + d + // o0 = vc0 + vd0; + // o1 = vc1 + vd1; + // if (vc0 > 0xFFFFFFFFu - vd0) { + // o1 = o1 + 1u; + // } + // vc0 = o0; + // vc1 = o1; + + // // b = rotr64(b ^ c, 24) + // xor0 = vb0 ^ vc0; + // xor1 = vb1 ^ vc1; + // vb0 = (xor0 >> 24u) ^ (xor1 << 8u); + // vb1 = (xor1 >> 24u) ^ (xor0 << 8u); + + // // a = a + b + // o0 = va0 + vb0; + // o1 = va1 + vb1; + // if (va0 > 0xFFFFFFFFu - vb0) { + // o1 = o1 + 1u; + // } + // va0 = o0; + // va1 = o1; + + // // a = a + m[sigma[r][2*i+1]] + // o0 = va0 + my0; + // o1 = va1 + my1; + // if (va0 > 0xFFFFFFFFu - my0) { + // o1 = o1 + 1u; + // } + // va0 = o0; + // va1 = o1; + + // // d = rotr64(d ^ a, 16) + // xor0 = vd0 ^ va0; + // xor1 = vd1 ^ va1; + // vd0 = (xor0 >> 16u) ^ (xor1 << 16u); + // vd1 = (xor1 >> 16u) ^ (xor0 << 16u); + + // // c = c + d + // o0 = vc0 + vd0; + // o1 = vc1 + vd1; + // if (vc0 > 0xFFFFFFFFu - vd0) { + // o1 = o1 + 1u; + // } + // vc0 = o0; + // vc1 = o1; + + // // b = rotr64(b ^ c, 63) + // xor0 = vb0 ^ vc0; + // xor1 = vb1 ^ vc1; + // vb0 = (xor1 >> 31u) ^ (xor0 << 1u); + // vb1 = (xor0 >> 31u) ^ (xor1 << 1u); + + + + + + G(&v4, &v5, &v12, &v13, &v20, &v21, &v28, &v29, m0, m1, 0u, 0u); + // // a = a + b + // o0 = va0 + vb0; + // o1 = va1 + vb1; + // if (va0 > 0xFFFFFFFFu - vb0) { + // o1 = o1 + 1u; + // } + // va0 = o0; + // va1 = o1; + + // // a = a + m[sigma[r][2*i+0]] + // o0 = va0 + mx0; + // o1 = va1 + mx1; + // if (va0 > 0xFFFFFFFFu - mx0) { + // o1 = o1 + 1u; + // } + // va0 = o0; + // va1 = o1; + + // // d = rotr64(d ^ a, 32) + // xor0 = vd0 ^ va0; + // xor1 = vd1 ^ va1; + // vd0 = xor1; + // vd1 = xor0; + + // // c = c + d + // o0 = vc0 + vd0; + // o1 = vc1 + vd1; + // if (vc0 > 0xFFFFFFFFu - vd0) { + // o1 = o1 + 1u; + // } + // vc0 = o0; + // vc1 = o1; + + // // b = rotr64(b ^ c, 24) + // xor0 = vb0 ^ vc0; + // xor1 = vb1 ^ vc1; + // vb0 = (xor0 >> 24u) ^ (xor1 << 8u); + // vb1 = (xor1 >> 24u) ^ (xor0 << 8u); + + // // a = a + b + // o0 = va0 + vb0; + // o1 = va1 + vb1; + // if (va0 > 0xFFFFFFFFu - vb0) { + // o1 = o1 + 1u; + // } + // va0 = o0; + // va1 = o1; + + // // a = a + m[sigma[r][2*i+1]] + // o0 = va0 + my0; + // o1 = va1 + my1; + // if (va0 > 0xFFFFFFFFu - my0) { + // o1 = o1 + 1u; + // } + // va0 = o0; + // va1 = o1; + + // // d = rotr64(d ^ a, 16) + // xor0 = vd0 ^ va0; + // xor1 = vd1 ^ va1; + // vd0 = (xor0 >> 16u) ^ (xor1 << 16u); + // vd1 = (xor1 >> 16u) ^ (xor0 << 16u); + + // // c = c + d + // o0 = vc0 + vd0; + // o1 = vc1 + vd1; + // if (vc0 > 0xFFFFFFFFu - vd0) { + // o1 = o1 + 1u; + // } + // vc0 = o0; + // vc1 = o1; + + // // b = rotr64(b ^ c, 63) + // xor0 = vb0 ^ vc0; + // xor1 = vb1 ^ vc1; + // vb0 = (xor1 >> 31u) ^ (xor0 << 1u); + // vb1 = (xor0 >> 31u) ^ (xor1 << 1u); + + + + + + G(&v6, &v7, &v14, &v15, &v22, &v23, &v30, &v31, 0u, 0u, m6, m7); + // // a = a + b + // o0 = va0 + vb0; + // o1 = va1 + vb1; + // if (va0 > 0xFFFFFFFFu - vb0) { + // o1 = o1 + 1u; + // } + // va0 = o0; + // va1 = o1; + + // // a = a + m[sigma[r][2*i+0]] + // o0 = va0 + mx0; + // o1 = va1 + mx1; + // if (va0 > 0xFFFFFFFFu - mx0) { + // o1 = o1 + 1u; + // } + // va0 = o0; + // va1 = o1; + + // // d = rotr64(d ^ a, 32) + // xor0 = vd0 ^ va0; + // xor1 = vd1 ^ va1; + // vd0 = xor1; + // vd1 = xor0; + + // // c = c + d + // o0 = vc0 + vd0; + // o1 = vc1 + vd1; + // if (vc0 > 0xFFFFFFFFu - vd0) { + // o1 = o1 + 1u; + // } + // vc0 = o0; + // vc1 = o1; + + // // b = rotr64(b ^ c, 24) + // xor0 = vb0 ^ vc0; + // xor1 = vb1 ^ vc1; + // vb0 = (xor0 >> 24u) ^ (xor1 << 8u); + // vb1 = (xor1 >> 24u) ^ (xor0 << 8u); + + // // a = a + b + // o0 = va0 + vb0; + // o1 = va1 + vb1; + // if (va0 > 0xFFFFFFFFu - vb0) { + // o1 = o1 + 1u; + // } + // va0 = o0; + // va1 = o1; + + // // a = a + m[sigma[r][2*i+1]] + // o0 = va0 + my0; + // o1 = va1 + my1; + // if (va0 > 0xFFFFFFFFu - my0) { + // o1 = o1 + 1u; + // } + // va0 = o0; + // va1 = o1; + + // // d = rotr64(d ^ a, 16) + // xor0 = vd0 ^ va0; + // xor1 = vd1 ^ va1; + // vd0 = (xor0 >> 16u) ^ (xor1 << 16u); + // vd1 = (xor1 >> 16u) ^ (xor0 << 16u); + + // // c = c + d + // o0 = vc0 + vd0; + // o1 = vc1 + vd1; + // if (vc0 > 0xFFFFFFFFu - vd0) { + // o1 = o1 + 1u; + // } + // vc0 = o0; + // vc1 = o1; + + // // b = rotr64(b ^ c, 63) + // xor0 = vb0 ^ vc0; + // xor1 = vb1 ^ vc1; + // vb0 = (xor1 >> 31u) ^ (xor0 << 1u); + // vb1 = (xor0 >> 31u) ^ (xor1 << 1u); + + + + + + G(&v0, &v1, &v10, &v11, &v20, &v21, &v30, &v31, m8, m9, 0u, 0u); + // // a = a + b + // o0 = va0 + vb0; + // o1 = va1 + vb1; + // if (va0 > 0xFFFFFFFFu - vb0) { + // o1 = o1 + 1u; + // } + // va0 = o0; + // va1 = o1; + + // // a = a + m[sigma[r][2*i+0]] + // o0 = va0 + mx0; + // o1 = va1 + mx1; + // if (va0 > 0xFFFFFFFFu - mx0) { + // o1 = o1 + 1u; + // } + // va0 = o0; + // va1 = o1; + + // // d = rotr64(d ^ a, 32) + // xor0 = vd0 ^ va0; + // xor1 = vd1 ^ va1; + // vd0 = xor1; + // vd1 = xor0; + + // // c = c + d + // o0 = vc0 + vd0; + // o1 = vc1 + vd1; + // if (vc0 > 0xFFFFFFFFu - vd0) { + // o1 = o1 + 1u; + // } + // vc0 = o0; + // vc1 = o1; + + // // b = rotr64(b ^ c, 24) + // xor0 = vb0 ^ vc0; + // xor1 = vb1 ^ vc1; + // vb0 = (xor0 >> 24u) ^ (xor1 << 8u); + // vb1 = (xor1 >> 24u) ^ (xor0 << 8u); + + // // a = a + b + // o0 = va0 + vb0; + // o1 = va1 + vb1; + // if (va0 > 0xFFFFFFFFu - vb0) { + // o1 = o1 + 1u; + // } + // va0 = o0; + // va1 = o1; + + // // a = a + m[sigma[r][2*i+1]] + // o0 = va0 + my0; + // o1 = va1 + my1; + // if (va0 > 0xFFFFFFFFu - my0) { + // o1 = o1 + 1u; + // } + // va0 = o0; + // va1 = o1; + + // // d = rotr64(d ^ a, 16) + // xor0 = vd0 ^ va0; + // xor1 = vd1 ^ va1; + // vd0 = (xor0 >> 16u) ^ (xor1 << 16u); + // vd1 = (xor1 >> 16u) ^ (xor0 << 16u); + + // // c = c + d + // o0 = vc0 + vd0; + // o1 = vc1 + vd1; + // if (vc0 > 0xFFFFFFFFu - vd0) { + // o1 = o1 + 1u; + // } + // vc0 = o0; + // vc1 = o1; + + // // b = rotr64(b ^ c, 63) + // xor0 = vb0 ^ vc0; + // xor1 = vb1 ^ vc1; + // vb0 = (xor1 >> 31u) ^ (xor0 << 1u); + // vb1 = (xor0 >> 31u) ^ (xor1 << 1u); + + + + + + G(&v2, &v3, &v12, &v13, &v22, &v23, &v24, &v25, 0u, 0u, 0u, 0u); + // // a = a + b + // o0 = va0 + vb0; + // o1 = va1 + vb1; + // if (va0 > 0xFFFFFFFFu - vb0) { + // o1 = o1 + 1u; + // } + // va0 = o0; + // va1 = o1; + + // // a = a + m[sigma[r][2*i+0]] + // o0 = va0 + mx0; + // o1 = va1 + mx1; + // if (va0 > 0xFFFFFFFFu - mx0) { + // o1 = o1 + 1u; + // } + // va0 = o0; + // va1 = o1; + + // // d = rotr64(d ^ a, 32) + // xor0 = vd0 ^ va0; + // xor1 = vd1 ^ va1; + // vd0 = xor1; + // vd1 = xor0; + + // // c = c + d + // o0 = vc0 + vd0; + // o1 = vc1 + vd1; + // if (vc0 > 0xFFFFFFFFu - vd0) { + // o1 = o1 + 1u; + // } + // vc0 = o0; + // vc1 = o1; + + // // b = rotr64(b ^ c, 24) + // xor0 = vb0 ^ vc0; + // xor1 = vb1 ^ vc1; + // vb0 = (xor0 >> 24u) ^ (xor1 << 8u); + // vb1 = (xor1 >> 24u) ^ (xor0 << 8u); + + // // a = a + b + // o0 = va0 + vb0; + // o1 = va1 + vb1; + // if (va0 > 0xFFFFFFFFu - vb0) { + // o1 = o1 + 1u; + // } + // va0 = o0; + // va1 = o1; + + // // a = a + m[sigma[r][2*i+1]] + // o0 = va0 + my0; + // o1 = va1 + my1; + // if (va0 > 0xFFFFFFFFu - my0) { + // o1 = o1 + 1u; + // } + // va0 = o0; + // va1 = o1; + + // // d = rotr64(d ^ a, 16) + // xor0 = vd0 ^ va0; + // xor1 = vd1 ^ va1; + // vd0 = (xor0 >> 16u) ^ (xor1 << 16u); + // vd1 = (xor1 >> 16u) ^ (xor0 << 16u); + + // // c = c + d + // o0 = vc0 + vd0; + // o1 = vc1 + vd1; + // if (vc0 > 0xFFFFFFFFu - vd0) { + // o1 = o1 + 1u; + // } + // vc0 = o0; + // vc1 = o1; + + // // b = rotr64(b ^ c, 63) + // xor0 = vb0 ^ vc0; + // xor1 = vb1 ^ vc1; + // vb0 = (xor1 >> 31u) ^ (xor0 << 1u); + // vb1 = (xor0 >> 31u) ^ (xor1 << 1u); + + + + + + G(&v4, &v5, &v14, &v15, &v16, &v17, &v26, &v27, 0u, 0u, 0u, 0u); + // // a = a + b + // o0 = va0 + vb0; + // o1 = va1 + vb1; + // if (va0 > 0xFFFFFFFFu - vb0) { + // o1 = o1 + 1u; + // } + // va0 = o0; + // va1 = o1; + + // // a = a + m[sigma[r][2*i+0]] + // o0 = va0 + mx0; + // o1 = va1 + mx1; + // if (va0 > 0xFFFFFFFFu - mx0) { + // o1 = o1 + 1u; + // } + // va0 = o0; + // va1 = o1; + + // // d = rotr64(d ^ a, 32) + // xor0 = vd0 ^ va0; + // xor1 = vd1 ^ va1; + // vd0 = xor1; + // vd1 = xor0; + + // // c = c + d + // o0 = vc0 + vd0; + // o1 = vc1 + vd1; + // if (vc0 > 0xFFFFFFFFu - vd0) { + // o1 = o1 + 1u; + // } + // vc0 = o0; + // vc1 = o1; + + // // b = rotr64(b ^ c, 24) + // xor0 = vb0 ^ vc0; + // xor1 = vb1 ^ vc1; + // vb0 = (xor0 >> 24u) ^ (xor1 << 8u); + // vb1 = (xor1 >> 24u) ^ (xor0 << 8u); + + // // a = a + b + // o0 = va0 + vb0; + // o1 = va1 + vb1; + // if (va0 > 0xFFFFFFFFu - vb0) { + // o1 = o1 + 1u; + // } + // va0 = o0; + // va1 = o1; + + // // a = a + m[sigma[r][2*i+1]] + // o0 = va0 + my0; + // o1 = va1 + my1; + // if (va0 > 0xFFFFFFFFu - my0) { + // o1 = o1 + 1u; + // } + // va0 = o0; + // va1 = o1; + + // // d = rotr64(d ^ a, 16) + // xor0 = vd0 ^ va0; + // xor1 = vd1 ^ va1; + // vd0 = (xor0 >> 16u) ^ (xor1 << 16u); + // vd1 = (xor1 >> 16u) ^ (xor0 << 16u); + + // // c = c + d + // o0 = vc0 + vd0; + // o1 = vc1 + vd1; + // if (vc0 > 0xFFFFFFFFu - vd0) { + // o1 = o1 + 1u; + // } + // vc0 = o0; + // vc1 = o1; + + // // b = rotr64(b ^ c, 63) + // xor0 = vb0 ^ vc0; + // xor1 = vb1 ^ vc1; + // vb0 = (xor1 >> 31u) ^ (xor0 << 1u); + // vb1 = (xor0 >> 31u) ^ (xor1 << 1u); + + + + + + G(&v6, &v7, &v8, &v9, &v18, &v19, &v28, &v29, m2, m3, 0u, 0u); + // // a = a + b + // o0 = va0 + vb0; + // o1 = va1 + vb1; + // if (va0 > 0xFFFFFFFFu - vb0) { + // o1 = o1 + 1u; + // } + // va0 = o0; + // va1 = o1; + + // // a = a + m[sigma[r][2*i+0]] + // o0 = va0 + mx0; + // o1 = va1 + mx1; + // if (va0 > 0xFFFFFFFFu - mx0) { + // o1 = o1 + 1u; + // } + // va0 = o0; + // va1 = o1; + + // // d = rotr64(d ^ a, 32) + // xor0 = vd0 ^ va0; + // xor1 = vd1 ^ va1; + // vd0 = xor1; + // vd1 = xor0; + + // // c = c + d + // o0 = vc0 + vd0; + // o1 = vc1 + vd1; + // if (vc0 > 0xFFFFFFFFu - vd0) { + // o1 = o1 + 1u; + // } + // vc0 = o0; + // vc1 = o1; + + // // b = rotr64(b ^ c, 24) + // xor0 = vb0 ^ vc0; + // xor1 = vb1 ^ vc1; + // vb0 = (xor0 >> 24u) ^ (xor1 << 8u); + // vb1 = (xor1 >> 24u) ^ (xor0 << 8u); + + // // a = a + b + // o0 = va0 + vb0; + // o1 = va1 + vb1; + // if (va0 > 0xFFFFFFFFu - vb0) { + // o1 = o1 + 1u; + // } + // va0 = o0; + // va1 = o1; + + // // a = a + m[sigma[r][2*i+1]] + // o0 = va0 + my0; + // o1 = va1 + my1; + // if (va0 > 0xFFFFFFFFu - my0) { + // o1 = o1 + 1u; + // } + // va0 = o0; + // va1 = o1; + + // // d = rotr64(d ^ a, 16) + // xor0 = vd0 ^ va0; + // xor1 = vd1 ^ va1; + // vd0 = (xor0 >> 16u) ^ (xor1 << 16u); + // vd1 = (xor1 >> 16u) ^ (xor0 << 16u); + + // // c = c + d + // o0 = vc0 + vd0; + // o1 = vc1 + vd1; + // if (vc0 > 0xFFFFFFFFu - vd0) { + // o1 = o1 + 1u; + // } + // vc0 = o0; + // vc1 = o1; + + // // b = rotr64(b ^ c, 63) + // xor0 = vb0 ^ vc0; + // xor1 = vb1 ^ vc1; + // vb0 = (xor1 >> 31u) ^ (xor0 << 1u); + // vb1 = (xor0 >> 31u) ^ (xor1 << 1u); + + + + + + /**************************************************************************** + * ROUND(6) * + ****************************************************************************/ + + G(&v0, &v1, &v8, &v9, &v16, &v17, &v24, &v25, 0u, 0u, 0u, 0u); + // // a = a + b + // o0 = va0 + vb0; + // o1 = va1 + vb1; + // if (va0 > 0xFFFFFFFFu - vb0) { + // o1 = o1 + 1u; + // } + // va0 = o0; + // va1 = o1; + + // // a = a + m[sigma[r][2*i+0]] + // o0 = va0 + mx0; + // o1 = va1 + mx1; + // if (va0 > 0xFFFFFFFFu - mx0) { + // o1 = o1 + 1u; + // } + // va0 = o0; + // va1 = o1; + + // // d = rotr64(d ^ a, 32) + // xor0 = vd0 ^ va0; + // xor1 = vd1 ^ va1; + // vd0 = xor1; + // vd1 = xor0; + + // // c = c + d + // o0 = vc0 + vd0; + // o1 = vc1 + vd1; + // if (vc0 > 0xFFFFFFFFu - vd0) { + // o1 = o1 + 1u; + // } + // vc0 = o0; + // vc1 = o1; + + // // b = rotr64(b ^ c, 24) + // xor0 = vb0 ^ vc0; + // xor1 = vb1 ^ vc1; + // vb0 = (xor0 >> 24u) ^ (xor1 << 8u); + // vb1 = (xor1 >> 24u) ^ (xor0 << 8u); + + // // a = a + b + // o0 = va0 + vb0; + // o1 = va1 + vb1; + // if (va0 > 0xFFFFFFFFu - vb0) { + // o1 = o1 + 1u; + // } + // va0 = o0; + // va1 = o1; + + // // a = a + m[sigma[r][2*i+1]] + // o0 = va0 + my0; + // o1 = va1 + my1; + // if (va0 > 0xFFFFFFFFu - my0) { + // o1 = o1 + 1u; + // } + // va0 = o0; + // va1 = o1; + + // // d = rotr64(d ^ a, 16) + // xor0 = vd0 ^ va0; + // xor1 = vd1 ^ va1; + // vd0 = (xor0 >> 16u) ^ (xor1 << 16u); + // vd1 = (xor1 >> 16u) ^ (xor0 << 16u); + + // // c = c + d + // o0 = vc0 + vd0; + // o1 = vc1 + vd1; + // if (vc0 > 0xFFFFFFFFu - vd0) { + // o1 = o1 + 1u; + // } + // vc0 = o0; + // vc1 = o1; + + // // b = rotr64(b ^ c, 63) + // xor0 = vb0 ^ vc0; + // xor1 = vb1 ^ vc1; + // vb0 = (xor1 >> 31u) ^ (xor0 << 1u); + // vb1 = (xor0 >> 31u) ^ (xor1 << 1u); + + + + + + G(&v2, &v3, &v10, &v11, &v18, &v19, &v26, &v27, m2, m3, 0u, 0u); + // // a = a + b + // o0 = va0 + vb0; + // o1 = va1 + vb1; + // if (va0 > 0xFFFFFFFFu - vb0) { + // o1 = o1 + 1u; + // } + // va0 = o0; + // va1 = o1; + + // // a = a + m[sigma[r][2*i+0]] + // o0 = va0 + mx0; + // o1 = va1 + mx1; + // if (va0 > 0xFFFFFFFFu - mx0) { + // o1 = o1 + 1u; + // } + // va0 = o0; + // va1 = o1; + + // // d = rotr64(d ^ a, 32) + // xor0 = vd0 ^ va0; + // xor1 = vd1 ^ va1; + // vd0 = xor1; + // vd1 = xor0; + + // // c = c + d + // o0 = vc0 + vd0; + // o1 = vc1 + vd1; + // if (vc0 > 0xFFFFFFFFu - vd0) { + // o1 = o1 + 1u; + // } + // vc0 = o0; + // vc1 = o1; + + // // b = rotr64(b ^ c, 24) + // xor0 = vb0 ^ vc0; + // xor1 = vb1 ^ vc1; + // vb0 = (xor0 >> 24u) ^ (xor1 << 8u); + // vb1 = (xor1 >> 24u) ^ (xor0 << 8u); + + // // a = a + b + // o0 = va0 + vb0; + // o1 = va1 + vb1; + // if (va0 > 0xFFFFFFFFu - vb0) { + // o1 = o1 + 1u; + // } + // va0 = o0; + // va1 = o1; + + // // a = a + m[sigma[r][2*i+1]] + // o0 = va0 + my0; + // o1 = va1 + my1; + // if (va0 > 0xFFFFFFFFu - my0) { + // o1 = o1 + 1u; + // } + // va0 = o0; + // va1 = o1; + + // // d = rotr64(d ^ a, 16) + // xor0 = vd0 ^ va0; + // xor1 = vd1 ^ va1; + // vd0 = (xor0 >> 16u) ^ (xor1 << 16u); + // vd1 = (xor1 >> 16u) ^ (xor0 << 16u); + + // // c = c + d + // o0 = vc0 + vd0; + // o1 = vc1 + vd1; + // if (vc0 > 0xFFFFFFFFu - vd0) { + // o1 = o1 + 1u; + // } + // vc0 = o0; + // vc1 = o1; + + // // b = rotr64(b ^ c, 63) + // xor0 = vb0 ^ vc0; + // xor1 = vb1 ^ vc1; + // vb0 = (xor1 >> 31u) ^ (xor0 << 1u); + // vb1 = (xor0 >> 31u) ^ (xor1 << 1u); + + + + + + G(&v4, &v5, &v12, &v13, &v20, &v21, &v28, &v29, 0u, 0u, 0u, 0u); + // // a = a + b + // o0 = va0 + vb0; + // o1 = va1 + vb1; + // if (va0 > 0xFFFFFFFFu - vb0) { + // o1 = o1 + 1u; + // } + // va0 = o0; + // va1 = o1; + + // // a = a + m[sigma[r][2*i+0]] + // o0 = va0 + mx0; + // o1 = va1 + mx1; + // if (va0 > 0xFFFFFFFFu - mx0) { + // o1 = o1 + 1u; + // } + // va0 = o0; + // va1 = o1; + + // // d = rotr64(d ^ a, 32) + // xor0 = vd0 ^ va0; + // xor1 = vd1 ^ va1; + // vd0 = xor1; + // vd1 = xor0; + + // // c = c + d + // o0 = vc0 + vd0; + // o1 = vc1 + vd1; + // if (vc0 > 0xFFFFFFFFu - vd0) { + // o1 = o1 + 1u; + // } + // vc0 = o0; + // vc1 = o1; + + // // b = rotr64(b ^ c, 24) + // xor0 = vb0 ^ vc0; + // xor1 = vb1 ^ vc1; + // vb0 = (xor0 >> 24u) ^ (xor1 << 8u); + // vb1 = (xor1 >> 24u) ^ (xor0 << 8u); + + // // a = a + b + // o0 = va0 + vb0; + // o1 = va1 + vb1; + // if (va0 > 0xFFFFFFFFu - vb0) { + // o1 = o1 + 1u; + // } + // va0 = o0; + // va1 = o1; + + // // a = a + m[sigma[r][2*i+1]] + // o0 = va0 + my0; + // o1 = va1 + my1; + // if (va0 > 0xFFFFFFFFu - my0) { + // o1 = o1 + 1u; + // } + // va0 = o0; + // va1 = o1; + + // // d = rotr64(d ^ a, 16) + // xor0 = vd0 ^ va0; + // xor1 = vd1 ^ va1; + // vd0 = (xor0 >> 16u) ^ (xor1 << 16u); + // vd1 = (xor1 >> 16u) ^ (xor0 << 16u); + + // // c = c + d + // o0 = vc0 + vd0; + // o1 = vc1 + vd1; + // if (vc0 > 0xFFFFFFFFu - vd0) { + // o1 = o1 + 1u; + // } + // vc0 = o0; + // vc1 = o1; + + // // b = rotr64(b ^ c, 63) + // xor0 = vb0 ^ vc0; + // xor1 = vb1 ^ vc1; + // vb0 = (xor1 >> 31u) ^ (xor0 << 1u); + // vb1 = (xor0 >> 31u) ^ (xor1 << 1u); + + + + + + G(&v6, &v7, &v14, &v15, &v22, &v23, &v30, &v31, m8, m9, 0u, 0u); + // // a = a + b + // o0 = va0 + vb0; + // o1 = va1 + vb1; + // if (va0 > 0xFFFFFFFFu - vb0) { + // o1 = o1 + 1u; + // } + // va0 = o0; + // va1 = o1; + + // // a = a + m[sigma[r][2*i+0]] + // o0 = va0 + mx0; + // o1 = va1 + mx1; + // if (va0 > 0xFFFFFFFFu - mx0) { + // o1 = o1 + 1u; + // } + // va0 = o0; + // va1 = o1; + + // // d = rotr64(d ^ a, 32) + // xor0 = vd0 ^ va0; + // xor1 = vd1 ^ va1; + // vd0 = xor1; + // vd1 = xor0; + + // // c = c + d + // o0 = vc0 + vd0; + // o1 = vc1 + vd1; + // if (vc0 > 0xFFFFFFFFu - vd0) { + // o1 = o1 + 1u; + // } + // vc0 = o0; + // vc1 = o1; + + // // b = rotr64(b ^ c, 24) + // xor0 = vb0 ^ vc0; + // xor1 = vb1 ^ vc1; + // vb0 = (xor0 >> 24u) ^ (xor1 << 8u); + // vb1 = (xor1 >> 24u) ^ (xor0 << 8u); + + // // a = a + b + // o0 = va0 + vb0; + // o1 = va1 + vb1; + // if (va0 > 0xFFFFFFFFu - vb0) { + // o1 = o1 + 1u; + // } + // va0 = o0; + // va1 = o1; + + // // a = a + m[sigma[r][2*i+1]] + // o0 = va0 + my0; + // o1 = va1 + my1; + // if (va0 > 0xFFFFFFFFu - my0) { + // o1 = o1 + 1u; + // } + // va0 = o0; + // va1 = o1; + + // // d = rotr64(d ^ a, 16) + // xor0 = vd0 ^ va0; + // xor1 = vd1 ^ va1; + // vd0 = (xor0 >> 16u) ^ (xor1 << 16u); + // vd1 = (xor1 >> 16u) ^ (xor0 << 16u); + + // // c = c + d + // o0 = vc0 + vd0; + // o1 = vc1 + vd1; + // if (vc0 > 0xFFFFFFFFu - vd0) { + // o1 = o1 + 1u; + // } + // vc0 = o0; + // vc1 = o1; + + // // b = rotr64(b ^ c, 63) + // xor0 = vb0 ^ vc0; + // xor1 = vb1 ^ vc1; + // vb0 = (xor1 >> 31u) ^ (xor0 << 1u); + // vb1 = (xor0 >> 31u) ^ (xor1 << 1u); + + + + + + G(&v0, &v1, &v10, &v11, &v20, &v21, &v30, &v31, m0, m1, 0u, 0u); + // // a = a + b + // o0 = va0 + vb0; + // o1 = va1 + vb1; + // if (va0 > 0xFFFFFFFFu - vb0) { + // o1 = o1 + 1u; + // } + // va0 = o0; + // va1 = o1; + + // // a = a + m[sigma[r][2*i+0]] + // o0 = va0 + mx0; + // o1 = va1 + mx1; + // if (va0 > 0xFFFFFFFFu - mx0) { + // o1 = o1 + 1u; + // } + // va0 = o0; + // va1 = o1; + + // // d = rotr64(d ^ a, 32) + // xor0 = vd0 ^ va0; + // xor1 = vd1 ^ va1; + // vd0 = xor1; + // vd1 = xor0; + + // // c = c + d + // o0 = vc0 + vd0; + // o1 = vc1 + vd1; + // if (vc0 > 0xFFFFFFFFu - vd0) { + // o1 = o1 + 1u; + // } + // vc0 = o0; + // vc1 = o1; + + // // b = rotr64(b ^ c, 24) + // xor0 = vb0 ^ vc0; + // xor1 = vb1 ^ vc1; + // vb0 = (xor0 >> 24u) ^ (xor1 << 8u); + // vb1 = (xor1 >> 24u) ^ (xor0 << 8u); + + // // a = a + b + // o0 = va0 + vb0; + // o1 = va1 + vb1; + // if (va0 > 0xFFFFFFFFu - vb0) { + // o1 = o1 + 1u; + // } + // va0 = o0; + // va1 = o1; + + // // a = a + m[sigma[r][2*i+1]] + // o0 = va0 + my0; + // o1 = va1 + my1; + // if (va0 > 0xFFFFFFFFu - my0) { + // o1 = o1 + 1u; + // } + // va0 = o0; + // va1 = o1; + + // // d = rotr64(d ^ a, 16) + // xor0 = vd0 ^ va0; + // xor1 = vd1 ^ va1; + // vd0 = (xor0 >> 16u) ^ (xor1 << 16u); + // vd1 = (xor1 >> 16u) ^ (xor0 << 16u); + + // // c = c + d + // o0 = vc0 + vd0; + // o1 = vc1 + vd1; + // if (vc0 > 0xFFFFFFFFu - vd0) { + // o1 = o1 + 1u; + // } + // vc0 = o0; + // vc1 = o1; + + // // b = rotr64(b ^ c, 63) + // xor0 = vb0 ^ vc0; + // xor1 = vb1 ^ vc1; + // vb0 = (xor1 >> 31u) ^ (xor0 << 1u); + // vb1 = (xor0 >> 31u) ^ (xor1 << 1u); + + + + + + G(&v2, &v3, &v12, &v13, &v22, &v23, &v24, &v25, 0u, 0u, m6, m7); + // // a = a + b + // o0 = va0 + vb0; + // o1 = va1 + vb1; + // if (va0 > 0xFFFFFFFFu - vb0) { + // o1 = o1 + 1u; + // } + // va0 = o0; + // va1 = o1; + + // // a = a + m[sigma[r][2*i+0]] + // o0 = va0 + mx0; + // o1 = va1 + mx1; + // if (va0 > 0xFFFFFFFFu - mx0) { + // o1 = o1 + 1u; + // } + // va0 = o0; + // va1 = o1; + + // // d = rotr64(d ^ a, 32) + // xor0 = vd0 ^ va0; + // xor1 = vd1 ^ va1; + // vd0 = xor1; + // vd1 = xor0; + + // // c = c + d + // o0 = vc0 + vd0; + // o1 = vc1 + vd1; + // if (vc0 > 0xFFFFFFFFu - vd0) { + // o1 = o1 + 1u; + // } + // vc0 = o0; + // vc1 = o1; + + // // b = rotr64(b ^ c, 24) + // xor0 = vb0 ^ vc0; + // xor1 = vb1 ^ vc1; + // vb0 = (xor0 >> 24u) ^ (xor1 << 8u); + // vb1 = (xor1 >> 24u) ^ (xor0 << 8u); + + // // a = a + b + // o0 = va0 + vb0; + // o1 = va1 + vb1; + // if (va0 > 0xFFFFFFFFu - vb0) { + // o1 = o1 + 1u; + // } + // va0 = o0; + // va1 = o1; + + // // a = a + m[sigma[r][2*i+1]] + // o0 = va0 + my0; + // o1 = va1 + my1; + // if (va0 > 0xFFFFFFFFu - my0) { + // o1 = o1 + 1u; + // } + // va0 = o0; + // va1 = o1; + + // // d = rotr64(d ^ a, 16) + // xor0 = vd0 ^ va0; + // xor1 = vd1 ^ va1; + // vd0 = (xor0 >> 16u) ^ (xor1 << 16u); + // vd1 = (xor1 >> 16u) ^ (xor0 << 16u); + + // // c = c + d + // o0 = vc0 + vd0; + // o1 = vc1 + vd1; + // if (vc0 > 0xFFFFFFFFu - vd0) { + // o1 = o1 + 1u; + // } + // vc0 = o0; + // vc1 = o1; + + // // b = rotr64(b ^ c, 63) + // xor0 = vb0 ^ vc0; + // xor1 = vb1 ^ vc1; + // vb0 = (xor1 >> 31u) ^ (xor0 << 1u); + // vb1 = (xor0 >> 31u) ^ (xor1 << 1u); + + + + + + G(&v4, &v5, &v14, &v15, &v16, &v17, &v26, &v27, 0u, 0u, m4, m5); + // // a = a + b + // o0 = va0 + vb0; + // o1 = va1 + vb1; + // if (va0 > 0xFFFFFFFFu - vb0) { + // o1 = o1 + 1u; + // } + // va0 = o0; + // va1 = o1; + + // // a = a + m[sigma[r][2*i+0]] + // o0 = va0 + mx0; + // o1 = va1 + mx1; + // if (va0 > 0xFFFFFFFFu - mx0) { + // o1 = o1 + 1u; + // } + // va0 = o0; + // va1 = o1; + + // // d = rotr64(d ^ a, 32) + // xor0 = vd0 ^ va0; + // xor1 = vd1 ^ va1; + // vd0 = xor1; + // vd1 = xor0; + + // // c = c + d + // o0 = vc0 + vd0; + // o1 = vc1 + vd1; + // if (vc0 > 0xFFFFFFFFu - vd0) { + // o1 = o1 + 1u; + // } + // vc0 = o0; + // vc1 = o1; + + // // b = rotr64(b ^ c, 24) + // xor0 = vb0 ^ vc0; + // xor1 = vb1 ^ vc1; + // vb0 = (xor0 >> 24u) ^ (xor1 << 8u); + // vb1 = (xor1 >> 24u) ^ (xor0 << 8u); + + // // a = a + b + // o0 = va0 + vb0; + // o1 = va1 + vb1; + // if (va0 > 0xFFFFFFFFu - vb0) { + // o1 = o1 + 1u; + // } + // va0 = o0; + // va1 = o1; + + // // a = a + m[sigma[r][2*i+1]] + // o0 = va0 + my0; + // o1 = va1 + my1; + // if (va0 > 0xFFFFFFFFu - my0) { + // o1 = o1 + 1u; + // } + // va0 = o0; + // va1 = o1; + + // // d = rotr64(d ^ a, 16) + // xor0 = vd0 ^ va0; + // xor1 = vd1 ^ va1; + // vd0 = (xor0 >> 16u) ^ (xor1 << 16u); + // vd1 = (xor1 >> 16u) ^ (xor0 << 16u); + + // // c = c + d + // o0 = vc0 + vd0; + // o1 = vc1 + vd1; + // if (vc0 > 0xFFFFFFFFu - vd0) { + // o1 = o1 + 1u; + // } + // vc0 = o0; + // vc1 = o1; + + // // b = rotr64(b ^ c, 63) + // xor0 = vb0 ^ vc0; + // xor1 = vb1 ^ vc1; + // vb0 = (xor1 >> 31u) ^ (xor0 << 1u); + // vb1 = (xor0 >> 31u) ^ (xor1 << 1u); + + + + + + G(&v6, &v7, &v8, &v9, &v18, &v19, &v28, &v29, 0u, 0u, 0u, 0u); + // // a = a + b + // o0 = va0 + vb0; + // o1 = va1 + vb1; + // if (va0 > 0xFFFFFFFFu - vb0) { + // o1 = o1 + 1u; + // } + // va0 = o0; + // va1 = o1; + + // // a = a + m[sigma[r][2*i+0]] + // o0 = va0 + mx0; + // o1 = va1 + mx1; + // if (va0 > 0xFFFFFFFFu - mx0) { + // o1 = o1 + 1u; + // } + // va0 = o0; + // va1 = o1; + + // // d = rotr64(d ^ a, 32) + // xor0 = vd0 ^ va0; + // xor1 = vd1 ^ va1; + // vd0 = xor1; + // vd1 = xor0; + + // // c = c + d + // o0 = vc0 + vd0; + // o1 = vc1 + vd1; + // if (vc0 > 0xFFFFFFFFu - vd0) { + // o1 = o1 + 1u; + // } + // vc0 = o0; + // vc1 = o1; + + // // b = rotr64(b ^ c, 24) + // xor0 = vb0 ^ vc0; + // xor1 = vb1 ^ vc1; + // vb0 = (xor0 >> 24u) ^ (xor1 << 8u); + // vb1 = (xor1 >> 24u) ^ (xor0 << 8u); + + // // a = a + b + // o0 = va0 + vb0; + // o1 = va1 + vb1; + // if (va0 > 0xFFFFFFFFu - vb0) { + // o1 = o1 + 1u; + // } + // va0 = o0; + // va1 = o1; + + // // a = a + m[sigma[r][2*i+1]] + // o0 = va0 + my0; + // o1 = va1 + my1; + // if (va0 > 0xFFFFFFFFu - my0) { + // o1 = o1 + 1u; + // } + // va0 = o0; + // va1 = o1; + + // // d = rotr64(d ^ a, 16) + // xor0 = vd0 ^ va0; + // xor1 = vd1 ^ va1; + // vd0 = (xor0 >> 16u) ^ (xor1 << 16u); + // vd1 = (xor1 >> 16u) ^ (xor0 << 16u); + + // // c = c + d + // o0 = vc0 + vd0; + // o1 = vc1 + vd1; + // if (vc0 > 0xFFFFFFFFu - vd0) { + // o1 = o1 + 1u; + // } + // vc0 = o0; + // vc1 = o1; + + // // b = rotr64(b ^ c, 63) + // xor0 = vb0 ^ vc0; + // xor1 = vb1 ^ vc1; + // vb0 = (xor1 >> 31u) ^ (xor0 << 1u); + // vb1 = (xor0 >> 31u) ^ (xor1 << 1u); + + + + + + /**************************************************************************** + * ROUND(7) * + ****************************************************************************/ + + G(&v0, &v1, &v8, &v9, &v16, &v17, &v24, &v25, 0u, 0u, 0u, 0u); + // // a = a + b + // o0 = va0 + vb0; + // o1 = va1 + vb1; + // if (va0 > 0xFFFFFFFFu - vb0) { + // o1 = o1 + 1u; + // } + // va0 = o0; + // va1 = o1; + + // // a = a + m[sigma[r][2*i+0]] + // o0 = va0 + mx0; + // o1 = va1 + mx1; + // if (va0 > 0xFFFFFFFFu - mx0) { + // o1 = o1 + 1u; + // } + // va0 = o0; + // va1 = o1; + + // // d = rotr64(d ^ a, 32) + // xor0 = vd0 ^ va0; + // xor1 = vd1 ^ va1; + // vd0 = xor1; + // vd1 = xor0; + + // // c = c + d + // o0 = vc0 + vd0; + // o1 = vc1 + vd1; + // if (vc0 > 0xFFFFFFFFu - vd0) { + // o1 = o1 + 1u; + // } + // vc0 = o0; + // vc1 = o1; + + // // b = rotr64(b ^ c, 24) + // xor0 = vb0 ^ vc0; + // xor1 = vb1 ^ vc1; + // vb0 = (xor0 >> 24u) ^ (xor1 << 8u); + // vb1 = (xor1 >> 24u) ^ (xor0 << 8u); + + // // a = a + b + // o0 = va0 + vb0; + // o1 = va1 + vb1; + // if (va0 > 0xFFFFFFFFu - vb0) { + // o1 = o1 + 1u; + // } + // va0 = o0; + // va1 = o1; + + // // a = a + m[sigma[r][2*i+1]] + // o0 = va0 + my0; + // o1 = va1 + my1; + // if (va0 > 0xFFFFFFFFu - my0) { + // o1 = o1 + 1u; + // } + // va0 = o0; + // va1 = o1; + + // // d = rotr64(d ^ a, 16) + // xor0 = vd0 ^ va0; + // xor1 = vd1 ^ va1; + // vd0 = (xor0 >> 16u) ^ (xor1 << 16u); + // vd1 = (xor1 >> 16u) ^ (xor0 << 16u); + + // // c = c + d + // o0 = vc0 + vd0; + // o1 = vc1 + vd1; + // if (vc0 > 0xFFFFFFFFu - vd0) { + // o1 = o1 + 1u; + // } + // vc0 = o0; + // vc1 = o1; + + // // b = rotr64(b ^ c, 63) + // xor0 = vb0 ^ vc0; + // xor1 = vb1 ^ vc1; + // vb0 = (xor1 >> 31u) ^ (xor0 << 1u); + // vb1 = (xor0 >> 31u) ^ (xor1 << 1u); + + + + + + G(&v2, &v3, &v10, &v11, &v18, &v19, &v26, &v27, 0u, 0u, 0u, 0u); + // // a = a + b + // o0 = va0 + vb0; + // o1 = va1 + vb1; + // if (va0 > 0xFFFFFFFFu - vb0) { + // o1 = o1 + 1u; + // } + // va0 = o0; + // va1 = o1; + + // // a = a + m[sigma[r][2*i+0]] + // o0 = va0 + mx0; + // o1 = va1 + mx1; + // if (va0 > 0xFFFFFFFFu - mx0) { + // o1 = o1 + 1u; + // } + // va0 = o0; + // va1 = o1; + + // // d = rotr64(d ^ a, 32) + // xor0 = vd0 ^ va0; + // xor1 = vd1 ^ va1; + // vd0 = xor1; + // vd1 = xor0; + + // // c = c + d + // o0 = vc0 + vd0; + // o1 = vc1 + vd1; + // if (vc0 > 0xFFFFFFFFu - vd0) { + // o1 = o1 + 1u; + // } + // vc0 = o0; + // vc1 = o1; + + // // b = rotr64(b ^ c, 24) + // xor0 = vb0 ^ vc0; + // xor1 = vb1 ^ vc1; + // vb0 = (xor0 >> 24u) ^ (xor1 << 8u); + // vb1 = (xor1 >> 24u) ^ (xor0 << 8u); + + // // a = a + b + // o0 = va0 + vb0; + // o1 = va1 + vb1; + // if (va0 > 0xFFFFFFFFu - vb0) { + // o1 = o1 + 1u; + // } + // va0 = o0; + // va1 = o1; + + // // a = a + m[sigma[r][2*i+1]] + // o0 = va0 + my0; + // o1 = va1 + my1; + // if (va0 > 0xFFFFFFFFu - my0) { + // o1 = o1 + 1u; + // } + // va0 = o0; + // va1 = o1; + + // // d = rotr64(d ^ a, 16) + // xor0 = vd0 ^ va0; + // xor1 = vd1 ^ va1; + // vd0 = (xor0 >> 16u) ^ (xor1 << 16u); + // vd1 = (xor1 >> 16u) ^ (xor0 << 16u); + + // // c = c + d + // o0 = vc0 + vd0; + // o1 = vc1 + vd1; + // if (vc0 > 0xFFFFFFFFu - vd0) { + // o1 = o1 + 1u; + // } + // vc0 = o0; + // vc1 = o1; + + // // b = rotr64(b ^ c, 63) + // xor0 = vb0 ^ vc0; + // xor1 = vb1 ^ vc1; + // vb0 = (xor1 >> 31u) ^ (xor0 << 1u); + // vb1 = (xor0 >> 31u) ^ (xor1 << 1u); + + + + + + G(&v4, &v5, &v12, &v13, &v20, &v21, &v28, &v29, 0u, 0u, m2, m3); + // // a = a + b + // o0 = va0 + vb0; + // o1 = va1 + vb1; + // if (va0 > 0xFFFFFFFFu - vb0) { + // o1 = o1 + 1u; + // } + // va0 = o0; + // va1 = o1; + + // // a = a + m[sigma[r][2*i+0]] + // o0 = va0 + mx0; + // o1 = va1 + mx1; + // if (va0 > 0xFFFFFFFFu - mx0) { + // o1 = o1 + 1u; + // } + // va0 = o0; + // va1 = o1; + + // // d = rotr64(d ^ a, 32) + // xor0 = vd0 ^ va0; + // xor1 = vd1 ^ va1; + // vd0 = xor1; + // vd1 = xor0; + + // // c = c + d + // o0 = vc0 + vd0; + // o1 = vc1 + vd1; + // if (vc0 > 0xFFFFFFFFu - vd0) { + // o1 = o1 + 1u; + // } + // vc0 = o0; + // vc1 = o1; + + // // b = rotr64(b ^ c, 24) + // xor0 = vb0 ^ vc0; + // xor1 = vb1 ^ vc1; + // vb0 = (xor0 >> 24u) ^ (xor1 << 8u); + // vb1 = (xor1 >> 24u) ^ (xor0 << 8u); + + // // a = a + b + // o0 = va0 + vb0; + // o1 = va1 + vb1; + // if (va0 > 0xFFFFFFFFu - vb0) { + // o1 = o1 + 1u; + // } + // va0 = o0; + // va1 = o1; + + // // a = a + m[sigma[r][2*i+1]] + // o0 = va0 + my0; + // o1 = va1 + my1; + // if (va0 > 0xFFFFFFFFu - my0) { + // o1 = o1 + 1u; + // } + // va0 = o0; + // va1 = o1; + + // // d = rotr64(d ^ a, 16) + // xor0 = vd0 ^ va0; + // xor1 = vd1 ^ va1; + // vd0 = (xor0 >> 16u) ^ (xor1 << 16u); + // vd1 = (xor1 >> 16u) ^ (xor0 << 16u); + + // // c = c + d + // o0 = vc0 + vd0; + // o1 = vc1 + vd1; + // if (vc0 > 0xFFFFFFFFu - vd0) { + // o1 = o1 + 1u; + // } + // vc0 = o0; + // vc1 = o1; + + // // b = rotr64(b ^ c, 63) + // xor0 = vb0 ^ vc0; + // xor1 = vb1 ^ vc1; + // vb0 = (xor1 >> 31u) ^ (xor0 << 1u); + // vb1 = (xor0 >> 31u) ^ (xor1 << 1u); + + + + + + G(&v6, &v7, &v14, &v15, &v22, &v23, &v30, &v31, m6, m7, 0u, 0u); + // // a = a + b + // o0 = va0 + vb0; + // o1 = va1 + vb1; + // if (va0 > 0xFFFFFFFFu - vb0) { + // o1 = o1 + 1u; + // } + // va0 = o0; + // va1 = o1; + + // // a = a + m[sigma[r][2*i+0]] + // o0 = va0 + mx0; + // o1 = va1 + mx1; + // if (va0 > 0xFFFFFFFFu - mx0) { + // o1 = o1 + 1u; + // } + // va0 = o0; + // va1 = o1; + + // // d = rotr64(d ^ a, 32) + // xor0 = vd0 ^ va0; + // xor1 = vd1 ^ va1; + // vd0 = xor1; + // vd1 = xor0; + + // // c = c + d + // o0 = vc0 + vd0; + // o1 = vc1 + vd1; + // if (vc0 > 0xFFFFFFFFu - vd0) { + // o1 = o1 + 1u; + // } + // vc0 = o0; + // vc1 = o1; + + // // b = rotr64(b ^ c, 24) + // xor0 = vb0 ^ vc0; + // xor1 = vb1 ^ vc1; + // vb0 = (xor0 >> 24u) ^ (xor1 << 8u); + // vb1 = (xor1 >> 24u) ^ (xor0 << 8u); + + // // a = a + b + // o0 = va0 + vb0; + // o1 = va1 + vb1; + // if (va0 > 0xFFFFFFFFu - vb0) { + // o1 = o1 + 1u; + // } + // va0 = o0; + // va1 = o1; + + // // a = a + m[sigma[r][2*i+1]] + // o0 = va0 + my0; + // o1 = va1 + my1; + // if (va0 > 0xFFFFFFFFu - my0) { + // o1 = o1 + 1u; + // } + // va0 = o0; + // va1 = o1; + + // // d = rotr64(d ^ a, 16) + // xor0 = vd0 ^ va0; + // xor1 = vd1 ^ va1; + // vd0 = (xor0 >> 16u) ^ (xor1 << 16u); + // vd1 = (xor1 >> 16u) ^ (xor0 << 16u); + + // // c = c + d + // o0 = vc0 + vd0; + // o1 = vc1 + vd1; + // if (vc0 > 0xFFFFFFFFu - vd0) { + // o1 = o1 + 1u; + // } + // vc0 = o0; + // vc1 = o1; + + // // b = rotr64(b ^ c, 63) + // xor0 = vb0 ^ vc0; + // xor1 = vb1 ^ vc1; + // vb0 = (xor1 >> 31u) ^ (xor0 << 1u); + // vb1 = (xor0 >> 31u) ^ (xor1 << 1u); + + + + + + G(&v0, &v1, &v10, &v11, &v20, &v21, &v30, &v31, 0u, 0u, m0, m1); + // // a = a + b + // o0 = va0 + vb0; + // o1 = va1 + vb1; + // if (va0 > 0xFFFFFFFFu - vb0) { + // o1 = o1 + 1u; + // } + // va0 = o0; + // va1 = o1; + + // // a = a + m[sigma[r][2*i+0]] + // o0 = va0 + mx0; + // o1 = va1 + mx1; + // if (va0 > 0xFFFFFFFFu - mx0) { + // o1 = o1 + 1u; + // } + // va0 = o0; + // va1 = o1; + + // // d = rotr64(d ^ a, 32) + // xor0 = vd0 ^ va0; + // xor1 = vd1 ^ va1; + // vd0 = xor1; + // vd1 = xor0; + + // // c = c + d + // o0 = vc0 + vd0; + // o1 = vc1 + vd1; + // if (vc0 > 0xFFFFFFFFu - vd0) { + // o1 = o1 + 1u; + // } + // vc0 = o0; + // vc1 = o1; + + // // b = rotr64(b ^ c, 24) + // xor0 = vb0 ^ vc0; + // xor1 = vb1 ^ vc1; + // vb0 = (xor0 >> 24u) ^ (xor1 << 8u); + // vb1 = (xor1 >> 24u) ^ (xor0 << 8u); + + // // a = a + b + // o0 = va0 + vb0; + // o1 = va1 + vb1; + // if (va0 > 0xFFFFFFFFu - vb0) { + // o1 = o1 + 1u; + // } + // va0 = o0; + // va1 = o1; + + // // a = a + m[sigma[r][2*i+1]] + // o0 = va0 + my0; + // o1 = va1 + my1; + // if (va0 > 0xFFFFFFFFu - my0) { + // o1 = o1 + 1u; + // } + // va0 = o0; + // va1 = o1; + + // // d = rotr64(d ^ a, 16) + // xor0 = vd0 ^ va0; + // xor1 = vd1 ^ va1; + // vd0 = (xor0 >> 16u) ^ (xor1 << 16u); + // vd1 = (xor1 >> 16u) ^ (xor0 << 16u); + + // // c = c + d + // o0 = vc0 + vd0; + // o1 = vc1 + vd1; + // if (vc0 > 0xFFFFFFFFu - vd0) { + // o1 = o1 + 1u; + // } + // vc0 = o0; + // vc1 = o1; + + // // b = rotr64(b ^ c, 63) + // xor0 = vb0 ^ vc0; + // xor1 = vb1 ^ vc1; + // vb0 = (xor1 >> 31u) ^ (xor0 << 1u); + // vb1 = (xor0 >> 31u) ^ (xor1 << 1u); + + + + + + G(&v2, &v3, &v12, &v13, &v22, &v23, &v24, &v25, 0u, 0u, m8, m9); + // // a = a + b + // o0 = va0 + vb0; + // o1 = va1 + vb1; + // if (va0 > 0xFFFFFFFFu - vb0) { + // o1 = o1 + 1u; + // } + // va0 = o0; + // va1 = o1; + + // // a = a + m[sigma[r][2*i+0]] + // o0 = va0 + mx0; + // o1 = va1 + mx1; + // if (va0 > 0xFFFFFFFFu - mx0) { + // o1 = o1 + 1u; + // } + // va0 = o0; + // va1 = o1; + + // // d = rotr64(d ^ a, 32) + // xor0 = vd0 ^ va0; + // xor1 = vd1 ^ va1; + // vd0 = xor1; + // vd1 = xor0; + + // // c = c + d + // o0 = vc0 + vd0; + // o1 = vc1 + vd1; + // if (vc0 > 0xFFFFFFFFu - vd0) { + // o1 = o1 + 1u; + // } + // vc0 = o0; + // vc1 = o1; + + // // b = rotr64(b ^ c, 24) + // xor0 = vb0 ^ vc0; + // xor1 = vb1 ^ vc1; + // vb0 = (xor0 >> 24u) ^ (xor1 << 8u); + // vb1 = (xor1 >> 24u) ^ (xor0 << 8u); + + // // a = a + b + // o0 = va0 + vb0; + // o1 = va1 + vb1; + // if (va0 > 0xFFFFFFFFu - vb0) { + // o1 = o1 + 1u; + // } + // va0 = o0; + // va1 = o1; + + // // a = a + m[sigma[r][2*i+1]] + // o0 = va0 + my0; + // o1 = va1 + my1; + // if (va0 > 0xFFFFFFFFu - my0) { + // o1 = o1 + 1u; + // } + // va0 = o0; + // va1 = o1; + + // // d = rotr64(d ^ a, 16) + // xor0 = vd0 ^ va0; + // xor1 = vd1 ^ va1; + // vd0 = (xor0 >> 16u) ^ (xor1 << 16u); + // vd1 = (xor1 >> 16u) ^ (xor0 << 16u); + + // // c = c + d + // o0 = vc0 + vd0; + // o1 = vc1 + vd1; + // if (vc0 > 0xFFFFFFFFu - vd0) { + // o1 = o1 + 1u; + // } + // vc0 = o0; + // vc1 = o1; + + // // b = rotr64(b ^ c, 63) + // xor0 = vb0 ^ vc0; + // xor1 = vb1 ^ vc1; + // vb0 = (xor1 >> 31u) ^ (xor0 << 1u); + // vb1 = (xor0 >> 31u) ^ (xor1 << 1u); + + + + + + G(&v4, &v5, &v14, &v15, &v16, &v17, &v26, &v27, 0u, 0u, 0u, 0u); + // // a = a + b + // o0 = va0 + vb0; + // o1 = va1 + vb1; + // if (va0 > 0xFFFFFFFFu - vb0) { + // o1 = o1 + 1u; + // } + // va0 = o0; + // va1 = o1; + + // // a = a + m[sigma[r][2*i+0]] + // o0 = va0 + mx0; + // o1 = va1 + mx1; + // if (va0 > 0xFFFFFFFFu - mx0) { + // o1 = o1 + 1u; + // } + // va0 = o0; + // va1 = o1; + + // // d = rotr64(d ^ a, 32) + // xor0 = vd0 ^ va0; + // xor1 = vd1 ^ va1; + // vd0 = xor1; + // vd1 = xor0; + + // // c = c + d + // o0 = vc0 + vd0; + // o1 = vc1 + vd1; + // if (vc0 > 0xFFFFFFFFu - vd0) { + // o1 = o1 + 1u; + // } + // vc0 = o0; + // vc1 = o1; + + // // b = rotr64(b ^ c, 24) + // xor0 = vb0 ^ vc0; + // xor1 = vb1 ^ vc1; + // vb0 = (xor0 >> 24u) ^ (xor1 << 8u); + // vb1 = (xor1 >> 24u) ^ (xor0 << 8u); + + // // a = a + b + // o0 = va0 + vb0; + // o1 = va1 + vb1; + // if (va0 > 0xFFFFFFFFu - vb0) { + // o1 = o1 + 1u; + // } + // va0 = o0; + // va1 = o1; + + // // a = a + m[sigma[r][2*i+1]] + // o0 = va0 + my0; + // o1 = va1 + my1; + // if (va0 > 0xFFFFFFFFu - my0) { + // o1 = o1 + 1u; + // } + // va0 = o0; + // va1 = o1; + + // // d = rotr64(d ^ a, 16) + // xor0 = vd0 ^ va0; + // xor1 = vd1 ^ va1; + // vd0 = (xor0 >> 16u) ^ (xor1 << 16u); + // vd1 = (xor1 >> 16u) ^ (xor0 << 16u); + + // // c = c + d + // o0 = vc0 + vd0; + // o1 = vc1 + vd1; + // if (vc0 > 0xFFFFFFFFu - vd0) { + // o1 = o1 + 1u; + // } + // vc0 = o0; + // vc1 = o1; + + // // b = rotr64(b ^ c, 63) + // xor0 = vb0 ^ vc0; + // xor1 = vb1 ^ vc1; + // vb0 = (xor1 >> 31u) ^ (xor0 << 1u); + // vb1 = (xor0 >> 31u) ^ (xor1 << 1u); + + + + + + G(&v6, &v7, &v8, &v9, &v18, &v19, &v28, &v29, m4, m5, 0u, 0u); + // // a = a + b + // o0 = va0 + vb0; + // o1 = va1 + vb1; + // if (va0 > 0xFFFFFFFFu - vb0) { + // o1 = o1 + 1u; + // } + // va0 = o0; + // va1 = o1; + + // // a = a + m[sigma[r][2*i+0]] + // o0 = va0 + mx0; + // o1 = va1 + mx1; + // if (va0 > 0xFFFFFFFFu - mx0) { + // o1 = o1 + 1u; + // } + // va0 = o0; + // va1 = o1; + + // // d = rotr64(d ^ a, 32) + // xor0 = vd0 ^ va0; + // xor1 = vd1 ^ va1; + // vd0 = xor1; + // vd1 = xor0; + + // // c = c + d + // o0 = vc0 + vd0; + // o1 = vc1 + vd1; + // if (vc0 > 0xFFFFFFFFu - vd0) { + // o1 = o1 + 1u; + // } + // vc0 = o0; + // vc1 = o1; + + // // b = rotr64(b ^ c, 24) + // xor0 = vb0 ^ vc0; + // xor1 = vb1 ^ vc1; + // vb0 = (xor0 >> 24u) ^ (xor1 << 8u); + // vb1 = (xor1 >> 24u) ^ (xor0 << 8u); + + // // a = a + b + // o0 = va0 + vb0; + // o1 = va1 + vb1; + // if (va0 > 0xFFFFFFFFu - vb0) { + // o1 = o1 + 1u; + // } + // va0 = o0; + // va1 = o1; + + // // a = a + m[sigma[r][2*i+1]] + // o0 = va0 + my0; + // o1 = va1 + my1; + // if (va0 > 0xFFFFFFFFu - my0) { + // o1 = o1 + 1u; + // } + // va0 = o0; + // va1 = o1; + + // // d = rotr64(d ^ a, 16) + // xor0 = vd0 ^ va0; + // xor1 = vd1 ^ va1; + // vd0 = (xor0 >> 16u) ^ (xor1 << 16u); + // vd1 = (xor1 >> 16u) ^ (xor0 << 16u); + + // // c = c + d + // o0 = vc0 + vd0; + // o1 = vc1 + vd1; + // if (vc0 > 0xFFFFFFFFu - vd0) { + // o1 = o1 + 1u; + // } + // vc0 = o0; + // vc1 = o1; + + // // b = rotr64(b ^ c, 63) + // xor0 = vb0 ^ vc0; + // xor1 = vb1 ^ vc1; + // vb0 = (xor1 >> 31u) ^ (xor0 << 1u); + // vb1 = (xor0 >> 31u) ^ (xor1 << 1u); + + + + + + /**************************************************************************** + * ROUND(8) * + ****************************************************************************/ + + G(&v0, &v1, &v8, &v9, &v16, &v17, &v24, &v25, 0u, 0u, 0u, 0u); + // // a = a + b + // o0 = va0 + vb0; + // o1 = va1 + vb1; + // if (va0 > 0xFFFFFFFFu - vb0) { + // o1 = o1 + 1u; + // } + // va0 = o0; + // va1 = o1; + + // // a = a + m[sigma[r][2*i+0]] + // o0 = va0 + mx0; + // o1 = va1 + mx1; + // if (va0 > 0xFFFFFFFFu - mx0) { + // o1 = o1 + 1u; + // } + // va0 = o0; + // va1 = o1; + + // // d = rotr64(d ^ a, 32) + // xor0 = vd0 ^ va0; + // xor1 = vd1 ^ va1; + // vd0 = xor1; + // vd1 = xor0; + + // // c = c + d + // o0 = vc0 + vd0; + // o1 = vc1 + vd1; + // if (vc0 > 0xFFFFFFFFu - vd0) { + // o1 = o1 + 1u; + // } + // vc0 = o0; + // vc1 = o1; + + // // b = rotr64(b ^ c, 24) + // xor0 = vb0 ^ vc0; + // xor1 = vb1 ^ vc1; + // vb0 = (xor0 >> 24u) ^ (xor1 << 8u); + // vb1 = (xor1 >> 24u) ^ (xor0 << 8u); + + // // a = a + b + // o0 = va0 + vb0; + // o1 = va1 + vb1; + // if (va0 > 0xFFFFFFFFu - vb0) { + // o1 = o1 + 1u; + // } + // va0 = o0; + // va1 = o1; + + // // a = a + m[sigma[r][2*i+1]] + // o0 = va0 + my0; + // o1 = va1 + my1; + // if (va0 > 0xFFFFFFFFu - my0) { + // o1 = o1 + 1u; + // } + // va0 = o0; + // va1 = o1; + + // // d = rotr64(d ^ a, 16) + // xor0 = vd0 ^ va0; + // xor1 = vd1 ^ va1; + // vd0 = (xor0 >> 16u) ^ (xor1 << 16u); + // vd1 = (xor1 >> 16u) ^ (xor0 << 16u); + + // // c = c + d + // o0 = vc0 + vd0; + // o1 = vc1 + vd1; + // if (vc0 > 0xFFFFFFFFu - vd0) { + // o1 = o1 + 1u; + // } + // vc0 = o0; + // vc1 = o1; + + // // b = rotr64(b ^ c, 63) + // xor0 = vb0 ^ vc0; + // xor1 = vb1 ^ vc1; + // vb0 = (xor1 >> 31u) ^ (xor0 << 1u); + // vb1 = (xor0 >> 31u) ^ (xor1 << 1u); + + + + + + G(&v2, &v3, &v10, &v11, &v18, &v19, &v26, &v27, 0u, 0u, 0u, 0u); + // // a = a + b + // o0 = va0 + vb0; + // o1 = va1 + vb1; + // if (va0 > 0xFFFFFFFFu - vb0) { + // o1 = o1 + 1u; + // } + // va0 = o0; + // va1 = o1; + + // // a = a + m[sigma[r][2*i+0]] + // o0 = va0 + mx0; + // o1 = va1 + mx1; + // if (va0 > 0xFFFFFFFFu - mx0) { + // o1 = o1 + 1u; + // } + // va0 = o0; + // va1 = o1; + + // // d = rotr64(d ^ a, 32) + // xor0 = vd0 ^ va0; + // xor1 = vd1 ^ va1; + // vd0 = xor1; + // vd1 = xor0; + + // // c = c + d + // o0 = vc0 + vd0; + // o1 = vc1 + vd1; + // if (vc0 > 0xFFFFFFFFu - vd0) { + // o1 = o1 + 1u; + // } + // vc0 = o0; + // vc1 = o1; + + // // b = rotr64(b ^ c, 24) + // xor0 = vb0 ^ vc0; + // xor1 = vb1 ^ vc1; + // vb0 = (xor0 >> 24u) ^ (xor1 << 8u); + // vb1 = (xor1 >> 24u) ^ (xor0 << 8u); + + // // a = a + b + // o0 = va0 + vb0; + // o1 = va1 + vb1; + // if (va0 > 0xFFFFFFFFu - vb0) { + // o1 = o1 + 1u; + // } + // va0 = o0; + // va1 = o1; + + // // a = a + m[sigma[r][2*i+1]] + // o0 = va0 + my0; + // o1 = va1 + my1; + // if (va0 > 0xFFFFFFFFu - my0) { + // o1 = o1 + 1u; + // } + // va0 = o0; + // va1 = o1; + + // // d = rotr64(d ^ a, 16) + // xor0 = vd0 ^ va0; + // xor1 = vd1 ^ va1; + // vd0 = (xor0 >> 16u) ^ (xor1 << 16u); + // vd1 = (xor1 >> 16u) ^ (xor0 << 16u); + + // // c = c + d + // o0 = vc0 + vd0; + // o1 = vc1 + vd1; + // if (vc0 > 0xFFFFFFFFu - vd0) { + // o1 = o1 + 1u; + // } + // vc0 = o0; + // vc1 = o1; + + // // b = rotr64(b ^ c, 63) + // xor0 = vb0 ^ vc0; + // xor1 = vb1 ^ vc1; + // vb0 = (xor1 >> 31u) ^ (xor0 << 1u); + // vb1 = (xor0 >> 31u) ^ (xor1 << 1u); + + + + + + G(&v4, &v5, &v12, &v13, &v20, &v21, &v28, &v29, 0u, 0u, m6, m7); + // // a = a + b + // o0 = va0 + vb0; + // o1 = va1 + vb1; + // if (va0 > 0xFFFFFFFFu - vb0) { + // o1 = o1 + 1u; + // } + // va0 = o0; + // va1 = o1; + + // // a = a + m[sigma[r][2*i+0]] + // o0 = va0 + mx0; + // o1 = va1 + mx1; + // if (va0 > 0xFFFFFFFFu - mx0) { + // o1 = o1 + 1u; + // } + // va0 = o0; + // va1 = o1; + + // // d = rotr64(d ^ a, 32) + // xor0 = vd0 ^ va0; + // xor1 = vd1 ^ va1; + // vd0 = xor1; + // vd1 = xor0; + + // // c = c + d + // o0 = vc0 + vd0; + // o1 = vc1 + vd1; + // if (vc0 > 0xFFFFFFFFu - vd0) { + // o1 = o1 + 1u; + // } + // vc0 = o0; + // vc1 = o1; + + // // b = rotr64(b ^ c, 24) + // xor0 = vb0 ^ vc0; + // xor1 = vb1 ^ vc1; + // vb0 = (xor0 >> 24u) ^ (xor1 << 8u); + // vb1 = (xor1 >> 24u) ^ (xor0 << 8u); + + // // a = a + b + // o0 = va0 + vb0; + // o1 = va1 + vb1; + // if (va0 > 0xFFFFFFFFu - vb0) { + // o1 = o1 + 1u; + // } + // va0 = o0; + // va1 = o1; + + // // a = a + m[sigma[r][2*i+1]] + // o0 = va0 + my0; + // o1 = va1 + my1; + // if (va0 > 0xFFFFFFFFu - my0) { + // o1 = o1 + 1u; + // } + // va0 = o0; + // va1 = o1; + + // // d = rotr64(d ^ a, 16) + // xor0 = vd0 ^ va0; + // xor1 = vd1 ^ va1; + // vd0 = (xor0 >> 16u) ^ (xor1 << 16u); + // vd1 = (xor1 >> 16u) ^ (xor0 << 16u); + + // // c = c + d + // o0 = vc0 + vd0; + // o1 = vc1 + vd1; + // if (vc0 > 0xFFFFFFFFu - vd0) { + // o1 = o1 + 1u; + // } + // vc0 = o0; + // vc1 = o1; + + // // b = rotr64(b ^ c, 63) + // xor0 = vb0 ^ vc0; + // xor1 = vb1 ^ vc1; + // vb0 = (xor1 >> 31u) ^ (xor0 << 1u); + // vb1 = (xor0 >> 31u) ^ (xor1 << 1u); + + + + + + G(&v6, &v7, &v14, &v15, &v22, &v23, &v30, &v31, m0, m1, 0u, 0u); + // // a = a + b + // o0 = va0 + vb0; + // o1 = va1 + vb1; + // if (va0 > 0xFFFFFFFFu - vb0) { + // o1 = o1 + 1u; + // } + // va0 = o0; + // va1 = o1; + + // // a = a + m[sigma[r][2*i+0]] + // o0 = va0 + mx0; + // o1 = va1 + mx1; + // if (va0 > 0xFFFFFFFFu - mx0) { + // o1 = o1 + 1u; + // } + // va0 = o0; + // va1 = o1; + + // // d = rotr64(d ^ a, 32) + // xor0 = vd0 ^ va0; + // xor1 = vd1 ^ va1; + // vd0 = xor1; + // vd1 = xor0; + + // // c = c + d + // o0 = vc0 + vd0; + // o1 = vc1 + vd1; + // if (vc0 > 0xFFFFFFFFu - vd0) { + // o1 = o1 + 1u; + // } + // vc0 = o0; + // vc1 = o1; + + // // b = rotr64(b ^ c, 24) + // xor0 = vb0 ^ vc0; + // xor1 = vb1 ^ vc1; + // vb0 = (xor0 >> 24u) ^ (xor1 << 8u); + // vb1 = (xor1 >> 24u) ^ (xor0 << 8u); + + // // a = a + b + // o0 = va0 + vb0; + // o1 = va1 + vb1; + // if (va0 > 0xFFFFFFFFu - vb0) { + // o1 = o1 + 1u; + // } + // va0 = o0; + // va1 = o1; + + // // a = a + m[sigma[r][2*i+1]] + // o0 = va0 + my0; + // o1 = va1 + my1; + // if (va0 > 0xFFFFFFFFu - my0) { + // o1 = o1 + 1u; + // } + // va0 = o0; + // va1 = o1; + + // // d = rotr64(d ^ a, 16) + // xor0 = vd0 ^ va0; + // xor1 = vd1 ^ va1; + // vd0 = (xor0 >> 16u) ^ (xor1 << 16u); + // vd1 = (xor1 >> 16u) ^ (xor0 << 16u); + + // // c = c + d + // o0 = vc0 + vd0; + // o1 = vc1 + vd1; + // if (vc0 > 0xFFFFFFFFu - vd0) { + // o1 = o1 + 1u; + // } + // vc0 = o0; + // vc1 = o1; + + // // b = rotr64(b ^ c, 63) + // xor0 = vb0 ^ vc0; + // xor1 = vb1 ^ vc1; + // vb0 = (xor1 >> 31u) ^ (xor0 << 1u); + // vb1 = (xor0 >> 31u) ^ (xor1 << 1u); + + + + + + G(&v0, &v1, &v10, &v11, &v20, &v21, &v30, &v31, 0u, 0u, m4, m5); + // // a = a + b + // o0 = va0 + vb0; + // o1 = va1 + vb1; + // if (va0 > 0xFFFFFFFFu - vb0) { + // o1 = o1 + 1u; + // } + // va0 = o0; + // va1 = o1; + + // // a = a + m[sigma[r][2*i+0]] + // o0 = va0 + mx0; + // o1 = va1 + mx1; + // if (va0 > 0xFFFFFFFFu - mx0) { + // o1 = o1 + 1u; + // } + // va0 = o0; + // va1 = o1; + + // // d = rotr64(d ^ a, 32) + // xor0 = vd0 ^ va0; + // xor1 = vd1 ^ va1; + // vd0 = xor1; + // vd1 = xor0; + + // // c = c + d + // o0 = vc0 + vd0; + // o1 = vc1 + vd1; + // if (vc0 > 0xFFFFFFFFu - vd0) { + // o1 = o1 + 1u; + // } + // vc0 = o0; + // vc1 = o1; + + // // b = rotr64(b ^ c, 24) + // xor0 = vb0 ^ vc0; + // xor1 = vb1 ^ vc1; + // vb0 = (xor0 >> 24u) ^ (xor1 << 8u); + // vb1 = (xor1 >> 24u) ^ (xor0 << 8u); + + // // a = a + b + // o0 = va0 + vb0; + // o1 = va1 + vb1; + // if (va0 > 0xFFFFFFFFu - vb0) { + // o1 = o1 + 1u; + // } + // va0 = o0; + // va1 = o1; + + // // a = a + m[sigma[r][2*i+1]] + // o0 = va0 + my0; + // o1 = va1 + my1; + // if (va0 > 0xFFFFFFFFu - my0) { + // o1 = o1 + 1u; + // } + // va0 = o0; + // va1 = o1; + + // // d = rotr64(d ^ a, 16) + // xor0 = vd0 ^ va0; + // xor1 = vd1 ^ va1; + // vd0 = (xor0 >> 16u) ^ (xor1 << 16u); + // vd1 = (xor1 >> 16u) ^ (xor0 << 16u); + + // // c = c + d + // o0 = vc0 + vd0; + // o1 = vc1 + vd1; + // if (vc0 > 0xFFFFFFFFu - vd0) { + // o1 = o1 + 1u; + // } + // vc0 = o0; + // vc1 = o1; + + // // b = rotr64(b ^ c, 63) + // xor0 = vb0 ^ vc0; + // xor1 = vb1 ^ vc1; + // vb0 = (xor1 >> 31u) ^ (xor0 << 1u); + // vb1 = (xor0 >> 31u) ^ (xor1 << 1u); + + + + + + G(&v2, &v3, &v12, &v13, &v22, &v23, &v24, &v25, 0u, 0u, 0u, 0u); + // // a = a + b + // o0 = va0 + vb0; + // o1 = va1 + vb1; + // if (va0 > 0xFFFFFFFFu - vb0) { + // o1 = o1 + 1u; + // } + // va0 = o0; + // va1 = o1; + + // // a = a + m[sigma[r][2*i+0]] + // o0 = va0 + mx0; + // o1 = va1 + mx1; + // if (va0 > 0xFFFFFFFFu - mx0) { + // o1 = o1 + 1u; + // } + // va0 = o0; + // va1 = o1; + + // // d = rotr64(d ^ a, 32) + // xor0 = vd0 ^ va0; + // xor1 = vd1 ^ va1; + // vd0 = xor1; + // vd1 = xor0; + + // // c = c + d + // o0 = vc0 + vd0; + // o1 = vc1 + vd1; + // if (vc0 > 0xFFFFFFFFu - vd0) { + // o1 = o1 + 1u; + // } + // vc0 = o0; + // vc1 = o1; + + // // b = rotr64(b ^ c, 24) + // xor0 = vb0 ^ vc0; + // xor1 = vb1 ^ vc1; + // vb0 = (xor0 >> 24u) ^ (xor1 << 8u); + // vb1 = (xor1 >> 24u) ^ (xor0 << 8u); + + // // a = a + b + // o0 = va0 + vb0; + // o1 = va1 + vb1; + // if (va0 > 0xFFFFFFFFu - vb0) { + // o1 = o1 + 1u; + // } + // va0 = o0; + // va1 = o1; + + // // a = a + m[sigma[r][2*i+1]] + // o0 = va0 + my0; + // o1 = va1 + my1; + // if (va0 > 0xFFFFFFFFu - my0) { + // o1 = o1 + 1u; + // } + // va0 = o0; + // va1 = o1; + + // // d = rotr64(d ^ a, 16) + // xor0 = vd0 ^ va0; + // xor1 = vd1 ^ va1; + // vd0 = (xor0 >> 16u) ^ (xor1 << 16u); + // vd1 = (xor1 >> 16u) ^ (xor0 << 16u); + + // // c = c + d + // o0 = vc0 + vd0; + // o1 = vc1 + vd1; + // if (vc0 > 0xFFFFFFFFu - vd0) { + // o1 = o1 + 1u; + // } + // vc0 = o0; + // vc1 = o1; + + // // b = rotr64(b ^ c, 63) + // xor0 = vb0 ^ vc0; + // xor1 = vb1 ^ vc1; + // vb0 = (xor1 >> 31u) ^ (xor0 << 1u); + // vb1 = (xor0 >> 31u) ^ (xor1 << 1u); + + + + + + G(&v4, &v5, &v14, &v15, &v16, &v17, &v26, &v27, m2, m3, m8, m9); + // // a = a + b + // o0 = va0 + vb0; + // o1 = va1 + vb1; + // if (va0 > 0xFFFFFFFFu - vb0) { + // o1 = o1 + 1u; + // } + // va0 = o0; + // va1 = o1; + + // // a = a + m[sigma[r][2*i+0]] + // o0 = va0 + mx0; + // o1 = va1 + mx1; + // if (va0 > 0xFFFFFFFFu - mx0) { + // o1 = o1 + 1u; + // } + // va0 = o0; + // va1 = o1; + + // // d = rotr64(d ^ a, 32) + // xor0 = vd0 ^ va0; + // xor1 = vd1 ^ va1; + // vd0 = xor1; + // vd1 = xor0; + + // // c = c + d + // o0 = vc0 + vd0; + // o1 = vc1 + vd1; + // if (vc0 > 0xFFFFFFFFu - vd0) { + // o1 = o1 + 1u; + // } + // vc0 = o0; + // vc1 = o1; + + // // b = rotr64(b ^ c, 24) + // xor0 = vb0 ^ vc0; + // xor1 = vb1 ^ vc1; + // vb0 = (xor0 >> 24u) ^ (xor1 << 8u); + // vb1 = (xor1 >> 24u) ^ (xor0 << 8u); + + // // a = a + b + // o0 = va0 + vb0; + // o1 = va1 + vb1; + // if (va0 > 0xFFFFFFFFu - vb0) { + // o1 = o1 + 1u; + // } + // va0 = o0; + // va1 = o1; + + // // a = a + m[sigma[r][2*i+1]] + // o0 = va0 + my0; + // o1 = va1 + my1; + // if (va0 > 0xFFFFFFFFu - my0) { + // o1 = o1 + 1u; + // } + // va0 = o0; + // va1 = o1; + + // // d = rotr64(d ^ a, 16) + // xor0 = vd0 ^ va0; + // xor1 = vd1 ^ va1; + // vd0 = (xor0 >> 16u) ^ (xor1 << 16u); + // vd1 = (xor1 >> 16u) ^ (xor0 << 16u); + + // // c = c + d + // o0 = vc0 + vd0; + // o1 = vc1 + vd1; + // if (vc0 > 0xFFFFFFFFu - vd0) { + // o1 = o1 + 1u; + // } + // vc0 = o0; + // vc1 = o1; + + // // b = rotr64(b ^ c, 63) + // xor0 = vb0 ^ vc0; + // xor1 = vb1 ^ vc1; + // vb0 = (xor1 >> 31u) ^ (xor0 << 1u); + // vb1 = (xor0 >> 31u) ^ (xor1 << 1u); + + + + + + G(&v6, &v7, &v8, &v9, &v18, &v19, &v28, &v29, 0u, 0u, 0u, 0u); + // // a = a + b + // o0 = va0 + vb0; + // o1 = va1 + vb1; + // if (va0 > 0xFFFFFFFFu - vb0) { + // o1 = o1 + 1u; + // } + // va0 = o0; + // va1 = o1; + + // // a = a + m[sigma[r][2*i+0]] + // o0 = va0 + mx0; + // o1 = va1 + mx1; + // if (va0 > 0xFFFFFFFFu - mx0) { + // o1 = o1 + 1u; + // } + // va0 = o0; + // va1 = o1; + + // // d = rotr64(d ^ a, 32) + // xor0 = vd0 ^ va0; + // xor1 = vd1 ^ va1; + // vd0 = xor1; + // vd1 = xor0; + + // // c = c + d + // o0 = vc0 + vd0; + // o1 = vc1 + vd1; + // if (vc0 > 0xFFFFFFFFu - vd0) { + // o1 = o1 + 1u; + // } + // vc0 = o0; + // vc1 = o1; + + // // b = rotr64(b ^ c, 24) + // xor0 = vb0 ^ vc0; + // xor1 = vb1 ^ vc1; + // vb0 = (xor0 >> 24u) ^ (xor1 << 8u); + // vb1 = (xor1 >> 24u) ^ (xor0 << 8u); + + // // a = a + b + // o0 = va0 + vb0; + // o1 = va1 + vb1; + // if (va0 > 0xFFFFFFFFu - vb0) { + // o1 = o1 + 1u; + // } + // va0 = o0; + // va1 = o1; + + // // a = a + m[sigma[r][2*i+1]] + // o0 = va0 + my0; + // o1 = va1 + my1; + // if (va0 > 0xFFFFFFFFu - my0) { + // o1 = o1 + 1u; + // } + // va0 = o0; + // va1 = o1; + + // // d = rotr64(d ^ a, 16) + // xor0 = vd0 ^ va0; + // xor1 = vd1 ^ va1; + // vd0 = (xor0 >> 16u) ^ (xor1 << 16u); + // vd1 = (xor1 >> 16u) ^ (xor0 << 16u); + + // // c = c + d + // o0 = vc0 + vd0; + // o1 = vc1 + vd1; + // if (vc0 > 0xFFFFFFFFu - vd0) { + // o1 = o1 + 1u; + // } + // vc0 = o0; + // vc1 = o1; + + // // b = rotr64(b ^ c, 63) + // xor0 = vb0 ^ vc0; + // xor1 = vb1 ^ vc1; + // vb0 = (xor1 >> 31u) ^ (xor0 << 1u); + // vb1 = (xor0 >> 31u) ^ (xor1 << 1u); + + + + + + /**************************************************************************** + * ROUND(9) * + ****************************************************************************/ + + G(&v0, &v1, &v8, &v9, &v16, &v17, &v24, &v25, 0u, 0u, m4, m5); + // // a = a + b + // o0 = va0 + vb0; + // o1 = va1 + vb1; + // if (va0 > 0xFFFFFFFFu - vb0) { + // o1 = o1 + 1u; + // } + // va0 = o0; + // va1 = o1; + + // // a = a + m[sigma[r][2*i+0]] + // o0 = va0 + mx0; + // o1 = va1 + mx1; + // if (va0 > 0xFFFFFFFFu - mx0) { + // o1 = o1 + 1u; + // } + // va0 = o0; + // va1 = o1; + + // // d = rotr64(d ^ a, 32) + // xor0 = vd0 ^ va0; + // xor1 = vd1 ^ va1; + // vd0 = xor1; + // vd1 = xor0; + + // // c = c + d + // o0 = vc0 + vd0; + // o1 = vc1 + vd1; + // if (vc0 > 0xFFFFFFFFu - vd0) { + // o1 = o1 + 1u; + // } + // vc0 = o0; + // vc1 = o1; + + // // b = rotr64(b ^ c, 24) + // xor0 = vb0 ^ vc0; + // xor1 = vb1 ^ vc1; + // vb0 = (xor0 >> 24u) ^ (xor1 << 8u); + // vb1 = (xor1 >> 24u) ^ (xor0 << 8u); + + // // a = a + b + // o0 = va0 + vb0; + // o1 = va1 + vb1; + // if (va0 > 0xFFFFFFFFu - vb0) { + // o1 = o1 + 1u; + // } + // va0 = o0; + // va1 = o1; + + // // a = a + m[sigma[r][2*i+1]] + // o0 = va0 + my0; + // o1 = va1 + my1; + // if (va0 > 0xFFFFFFFFu - my0) { + // o1 = o1 + 1u; + // } + // va0 = o0; + // va1 = o1; + + // // d = rotr64(d ^ a, 16) + // xor0 = vd0 ^ va0; + // xor1 = vd1 ^ va1; + // vd0 = (xor0 >> 16u) ^ (xor1 << 16u); + // vd1 = (xor1 >> 16u) ^ (xor0 << 16u); + + // // c = c + d + // o0 = vc0 + vd0; + // o1 = vc1 + vd1; + // if (vc0 > 0xFFFFFFFFu - vd0) { + // o1 = o1 + 1u; + // } + // vc0 = o0; + // vc1 = o1; + + // // b = rotr64(b ^ c, 63) + // xor0 = vb0 ^ vc0; + // xor1 = vb1 ^ vc1; + // vb0 = (xor1 >> 31u) ^ (xor0 << 1u); + // vb1 = (xor0 >> 31u) ^ (xor1 << 1u); + + + + + + G(&v2, &v3, &v10, &v11, &v18, &v19, &v26, &v27, 0u, 0u, m8, m9); + // // a = a + b + // o0 = va0 + vb0; + // o1 = va1 + vb1; + // if (va0 > 0xFFFFFFFFu - vb0) { + // o1 = o1 + 1u; + // } + // va0 = o0; + // va1 = o1; + + // // a = a + m[sigma[r][2*i+0]] + // o0 = va0 + mx0; + // o1 = va1 + mx1; + // if (va0 > 0xFFFFFFFFu - mx0) { + // o1 = o1 + 1u; + // } + // va0 = o0; + // va1 = o1; + + // // d = rotr64(d ^ a, 32) + // xor0 = vd0 ^ va0; + // xor1 = vd1 ^ va1; + // vd0 = xor1; + // vd1 = xor0; + + // // c = c + d + // o0 = vc0 + vd0; + // o1 = vc1 + vd1; + // if (vc0 > 0xFFFFFFFFu - vd0) { + // o1 = o1 + 1u; + // } + // vc0 = o0; + // vc1 = o1; + + // // b = rotr64(b ^ c, 24) + // xor0 = vb0 ^ vc0; + // xor1 = vb1 ^ vc1; + // vb0 = (xor0 >> 24u) ^ (xor1 << 8u); + // vb1 = (xor1 >> 24u) ^ (xor0 << 8u); + + // // a = a + b + // o0 = va0 + vb0; + // o1 = va1 + vb1; + // if (va0 > 0xFFFFFFFFu - vb0) { + // o1 = o1 + 1u; + // } + // va0 = o0; + // va1 = o1; + + // // a = a + m[sigma[r][2*i+1]] + // o0 = va0 + my0; + // o1 = va1 + my1; + // if (va0 > 0xFFFFFFFFu - my0) { + // o1 = o1 + 1u; + // } + // va0 = o0; + // va1 = o1; + + // // d = rotr64(d ^ a, 16) + // xor0 = vd0 ^ va0; + // xor1 = vd1 ^ va1; + // vd0 = (xor0 >> 16u) ^ (xor1 << 16u); + // vd1 = (xor1 >> 16u) ^ (xor0 << 16u); + + // // c = c + d + // o0 = vc0 + vd0; + // o1 = vc1 + vd1; + // if (vc0 > 0xFFFFFFFFu - vd0) { + // o1 = o1 + 1u; + // } + // vc0 = o0; + // vc1 = o1; + + // // b = rotr64(b ^ c, 63) + // xor0 = vb0 ^ vc0; + // xor1 = vb1 ^ vc1; + // vb0 = (xor1 >> 31u) ^ (xor0 << 1u); + // vb1 = (xor0 >> 31u) ^ (xor1 << 1u); + + + + + + G(&v4, &v5, &v12, &v13, &v20, &v21, &v28, &v29, 0u, 0u, 0u, 0u); + // // a = a + b + // o0 = va0 + vb0; + // o1 = va1 + vb1; + // if (va0 > 0xFFFFFFFFu - vb0) { + // o1 = o1 + 1u; + // } + // va0 = o0; + // va1 = o1; + + // // a = a + m[sigma[r][2*i+0]] + // o0 = va0 + mx0; + // o1 = va1 + mx1; + // if (va0 > 0xFFFFFFFFu - mx0) { + // o1 = o1 + 1u; + // } + // va0 = o0; + // va1 = o1; + + // // d = rotr64(d ^ a, 32) + // xor0 = vd0 ^ va0; + // xor1 = vd1 ^ va1; + // vd0 = xor1; + // vd1 = xor0; + + // // c = c + d + // o0 = vc0 + vd0; + // o1 = vc1 + vd1; + // if (vc0 > 0xFFFFFFFFu - vd0) { + // o1 = o1 + 1u; + // } + // vc0 = o0; + // vc1 = o1; + + // // b = rotr64(b ^ c, 24) + // xor0 = vb0 ^ vc0; + // xor1 = vb1 ^ vc1; + // vb0 = (xor0 >> 24u) ^ (xor1 << 8u); + // vb1 = (xor1 >> 24u) ^ (xor0 << 8u); + + // // a = a + b + // o0 = va0 + vb0; + // o1 = va1 + vb1; + // if (va0 > 0xFFFFFFFFu - vb0) { + // o1 = o1 + 1u; + // } + // va0 = o0; + // va1 = o1; + + // // a = a + m[sigma[r][2*i+1]] + // o0 = va0 + my0; + // o1 = va1 + my1; + // if (va0 > 0xFFFFFFFFu - my0) { + // o1 = o1 + 1u; + // } + // va0 = o0; + // va1 = o1; + + // // d = rotr64(d ^ a, 16) + // xor0 = vd0 ^ va0; + // xor1 = vd1 ^ va1; + // vd0 = (xor0 >> 16u) ^ (xor1 << 16u); + // vd1 = (xor1 >> 16u) ^ (xor0 << 16u); + + // // c = c + d + // o0 = vc0 + vd0; + // o1 = vc1 + vd1; + // if (vc0 > 0xFFFFFFFFu - vd0) { + // o1 = o1 + 1u; + // } + // vc0 = o0; + // vc1 = o1; + + // // b = rotr64(b ^ c, 63) + // xor0 = vb0 ^ vc0; + // xor1 = vb1 ^ vc1; + // vb0 = (xor1 >> 31u) ^ (xor0 << 1u); + // vb1 = (xor0 >> 31u) ^ (xor1 << 1u); + + + + + + G(&v6, &v7, &v14, &v15, &v22, &v23, &v30, &v31, m2, m3, 0u, 0u); + // // a = a + b + // o0 = va0 + vb0; + // o1 = va1 + vb1; + // if (va0 > 0xFFFFFFFFu - vb0) { + // o1 = o1 + 1u; + // } + // va0 = o0; + // va1 = o1; + + // // a = a + m[sigma[r][2*i+0]] + // o0 = va0 + mx0; + // o1 = va1 + mx1; + // if (va0 > 0xFFFFFFFFu - mx0) { + // o1 = o1 + 1u; + // } + // va0 = o0; + // va1 = o1; + + // // d = rotr64(d ^ a, 32) + // xor0 = vd0 ^ va0; + // xor1 = vd1 ^ va1; + // vd0 = xor1; + // vd1 = xor0; + + // // c = c + d + // o0 = vc0 + vd0; + // o1 = vc1 + vd1; + // if (vc0 > 0xFFFFFFFFu - vd0) { + // o1 = o1 + 1u; + // } + // vc0 = o0; + // vc1 = o1; + + // // b = rotr64(b ^ c, 24) + // xor0 = vb0 ^ vc0; + // xor1 = vb1 ^ vc1; + // vb0 = (xor0 >> 24u) ^ (xor1 << 8u); + // vb1 = (xor1 >> 24u) ^ (xor0 << 8u); + + // // a = a + b + // o0 = va0 + vb0; + // o1 = va1 + vb1; + // if (va0 > 0xFFFFFFFFu - vb0) { + // o1 = o1 + 1u; + // } + // va0 = o0; + // va1 = o1; + + // // a = a + m[sigma[r][2*i+1]] + // o0 = va0 + my0; + // o1 = va1 + my1; + // if (va0 > 0xFFFFFFFFu - my0) { + // o1 = o1 + 1u; + // } + // va0 = o0; + // va1 = o1; + + // // d = rotr64(d ^ a, 16) + // xor0 = vd0 ^ va0; + // xor1 = vd1 ^ va1; + // vd0 = (xor0 >> 16u) ^ (xor1 << 16u); + // vd1 = (xor1 >> 16u) ^ (xor0 << 16u); + + // // c = c + d + // o0 = vc0 + vd0; + // o1 = vc1 + vd1; + // if (vc0 > 0xFFFFFFFFu - vd0) { + // o1 = o1 + 1u; + // } + // vc0 = o0; + // vc1 = o1; + + // // b = rotr64(b ^ c, 63) + // xor0 = vb0 ^ vc0; + // xor1 = vb1 ^ vc1; + // vb0 = (xor1 >> 31u) ^ (xor0 << 1u); + // vb1 = (xor0 >> 31u) ^ (xor1 << 1u); + + + + + + G(&v0, &v1, &v10, &v11, &v20, &v21, &v30, &v31, 0u, 0u, 0u, 0u); + // // a = a + b + // o0 = va0 + vb0; + // o1 = va1 + vb1; + // if (va0 > 0xFFFFFFFFu - vb0) { + // o1 = o1 + 1u; + // } + // va0 = o0; + // va1 = o1; + + // // a = a + m[sigma[r][2*i+0]] + // o0 = va0 + mx0; + // o1 = va1 + mx1; + // if (va0 > 0xFFFFFFFFu - mx0) { + // o1 = o1 + 1u; + // } + // va0 = o0; + // va1 = o1; + + // // d = rotr64(d ^ a, 32) + // xor0 = vd0 ^ va0; + // xor1 = vd1 ^ va1; + // vd0 = xor1; + // vd1 = xor0; + + // // c = c + d + // o0 = vc0 + vd0; + // o1 = vc1 + vd1; + // if (vc0 > 0xFFFFFFFFu - vd0) { + // o1 = o1 + 1u; + // } + // vc0 = o0; + // vc1 = o1; + + // // b = rotr64(b ^ c, 24) + // xor0 = vb0 ^ vc0; + // xor1 = vb1 ^ vc1; + // vb0 = (xor0 >> 24u) ^ (xor1 << 8u); + // vb1 = (xor1 >> 24u) ^ (xor0 << 8u); + + // // a = a + b + // o0 = va0 + vb0; + // o1 = va1 + vb1; + // if (va0 > 0xFFFFFFFFu - vb0) { + // o1 = o1 + 1u; + // } + // va0 = o0; + // va1 = o1; + + // // a = a + m[sigma[r][2*i+1]] + // o0 = va0 + my0; + // o1 = va1 + my1; + // if (va0 > 0xFFFFFFFFu - my0) { + // o1 = o1 + 1u; + // } + // va0 = o0; + // va1 = o1; + + // // d = rotr64(d ^ a, 16) + // xor0 = vd0 ^ va0; + // xor1 = vd1 ^ va1; + // vd0 = (xor0 >> 16u) ^ (xor1 << 16u); + // vd1 = (xor1 >> 16u) ^ (xor0 << 16u); + + // // c = c + d + // o0 = vc0 + vd0; + // o1 = vc1 + vd1; + // if (vc0 > 0xFFFFFFFFu - vd0) { + // o1 = o1 + 1u; + // } + // vc0 = o0; + // vc1 = o1; + + // // b = rotr64(b ^ c, 63) + // xor0 = vb0 ^ vc0; + // xor1 = vb1 ^ vc1; + // vb0 = (xor1 >> 31u) ^ (xor0 << 1u); + // vb1 = (xor0 >> 31u) ^ (xor1 << 1u); + + + + + + G(&v2, &v3, &v12, &v13, &v22, &v23, &v24, &v25, 0u, 0u, 0u, 0u); + // // a = a + b + // o0 = va0 + vb0; + // o1 = va1 + vb1; + // if (va0 > 0xFFFFFFFFu - vb0) { + // o1 = o1 + 1u; + // } + // va0 = o0; + // va1 = o1; + + // // a = a + m[sigma[r][2*i+0]] + // o0 = va0 + mx0; + // o1 = va1 + mx1; + // if (va0 > 0xFFFFFFFFu - mx0) { + // o1 = o1 + 1u; + // } + // va0 = o0; + // va1 = o1; + + // // d = rotr64(d ^ a, 32) + // xor0 = vd0 ^ va0; + // xor1 = vd1 ^ va1; + // vd0 = xor1; + // vd1 = xor0; + + // // c = c + d + // o0 = vc0 + vd0; + // o1 = vc1 + vd1; + // if (vc0 > 0xFFFFFFFFu - vd0) { + // o1 = o1 + 1u; + // } + // vc0 = o0; + // vc1 = o1; + + // // b = rotr64(b ^ c, 24) + // xor0 = vb0 ^ vc0; + // xor1 = vb1 ^ vc1; + // vb0 = (xor0 >> 24u) ^ (xor1 << 8u); + // vb1 = (xor1 >> 24u) ^ (xor0 << 8u); + + // // a = a + b + // o0 = va0 + vb0; + // o1 = va1 + vb1; + // if (va0 > 0xFFFFFFFFu - vb0) { + // o1 = o1 + 1u; + // } + // va0 = o0; + // va1 = o1; + + // // a = a + m[sigma[r][2*i+1]] + // o0 = va0 + my0; + // o1 = va1 + my1; + // if (va0 > 0xFFFFFFFFu - my0) { + // o1 = o1 + 1u; + // } + // va0 = o0; + // va1 = o1; + + // // d = rotr64(d ^ a, 16) + // xor0 = vd0 ^ va0; + // xor1 = vd1 ^ va1; + // vd0 = (xor0 >> 16u) ^ (xor1 << 16u); + // vd1 = (xor1 >> 16u) ^ (xor0 << 16u); + + // // c = c + d + // o0 = vc0 + vd0; + // o1 = vc1 + vd1; + // if (vc0 > 0xFFFFFFFFu - vd0) { + // o1 = o1 + 1u; + // } + // vc0 = o0; + // vc1 = o1; + + // // b = rotr64(b ^ c, 63) + // xor0 = vb0 ^ vc0; + // xor1 = vb1 ^ vc1; + // vb0 = (xor1 >> 31u) ^ (xor0 << 1u); + // vb1 = (xor0 >> 31u) ^ (xor1 << 1u); + + + + + + G(&v4, &v5, &v14, &v15, &v16, &v17, &v26, &v27, m6, m7, 0u, 0u); + // // a = a + b + // o0 = va0 + vb0; + // o1 = va1 + vb1; + // if (va0 > 0xFFFFFFFFu - vb0) { + // o1 = o1 + 1u; + // } + // va0 = o0; + // va1 = o1; + + // // a = a + m[sigma[r][2*i+0]] + // o0 = va0 + mx0; + // o1 = va1 + mx1; + // if (va0 > 0xFFFFFFFFu - mx0) { + // o1 = o1 + 1u; + // } + // va0 = o0; + // va1 = o1; + + // // d = rotr64(d ^ a, 32) + // xor0 = vd0 ^ va0; + // xor1 = vd1 ^ va1; + // vd0 = xor1; + // vd1 = xor0; + + // // c = c + d + // o0 = vc0 + vd0; + // o1 = vc1 + vd1; + // if (vc0 > 0xFFFFFFFFu - vd0) { + // o1 = o1 + 1u; + // } + // vc0 = o0; + // vc1 = o1; + + // // b = rotr64(b ^ c, 24) + // xor0 = vb0 ^ vc0; + // xor1 = vb1 ^ vc1; + // vb0 = (xor0 >> 24u) ^ (xor1 << 8u); + // vb1 = (xor1 >> 24u) ^ (xor0 << 8u); + + // // a = a + b + // o0 = va0 + vb0; + // o1 = va1 + vb1; + // if (va0 > 0xFFFFFFFFu - vb0) { + // o1 = o1 + 1u; + // } + // va0 = o0; + // va1 = o1; + + // // a = a + m[sigma[r][2*i+1]] + // o0 = va0 + my0; + // o1 = va1 + my1; + // if (va0 > 0xFFFFFFFFu - my0) { + // o1 = o1 + 1u; + // } + // va0 = o0; + // va1 = o1; + + // // d = rotr64(d ^ a, 16) + // xor0 = vd0 ^ va0; + // xor1 = vd1 ^ va1; + // vd0 = (xor0 >> 16u) ^ (xor1 << 16u); + // vd1 = (xor1 >> 16u) ^ (xor0 << 16u); + + // // c = c + d + // o0 = vc0 + vd0; + // o1 = vc1 + vd1; + // if (vc0 > 0xFFFFFFFFu - vd0) { + // o1 = o1 + 1u; + // } + // vc0 = o0; + // vc1 = o1; + + // // b = rotr64(b ^ c, 63) + // xor0 = vb0 ^ vc0; + // xor1 = vb1 ^ vc1; + // vb0 = (xor1 >> 31u) ^ (xor0 << 1u); + // vb1 = (xor0 >> 31u) ^ (xor1 << 1u); + + + + + + G(&v6, &v7, &v8, &v9, &v18, &v19, &v28, &v29, 0u, 0u, m0, m1); + // // a = a + b + // o0 = va0 + vb0; + // o1 = va1 + vb1; + // if (va0 > 0xFFFFFFFFu - vb0) { + // o1 = o1 + 1u; + // } + // va0 = o0; + // va1 = o1; + + // // a = a + m[sigma[r][2*i+0]] + // o0 = va0 + mx0; + // o1 = va1 + mx1; + // if (va0 > 0xFFFFFFFFu - mx0) { + // o1 = o1 + 1u; + // } + // va0 = o0; + // va1 = o1; + + // // d = rotr64(d ^ a, 32) + // xor0 = vd0 ^ va0; + // xor1 = vd1 ^ va1; + // vd0 = xor1; + // vd1 = xor0; + + // // c = c + d + // o0 = vc0 + vd0; + // o1 = vc1 + vd1; + // if (vc0 > 0xFFFFFFFFu - vd0) { + // o1 = o1 + 1u; + // } + // vc0 = o0; + // vc1 = o1; + + // // b = rotr64(b ^ c, 24) + // xor0 = vb0 ^ vc0; + // xor1 = vb1 ^ vc1; + // vb0 = (xor0 >> 24u) ^ (xor1 << 8u); + // vb1 = (xor1 >> 24u) ^ (xor0 << 8u); + + // // a = a + b + // o0 = va0 + vb0; + // o1 = va1 + vb1; + // if (va0 > 0xFFFFFFFFu - vb0) { + // o1 = o1 + 1u; + // } + // va0 = o0; + // va1 = o1; + + // // a = a + m[sigma[r][2*i+1]] + // o0 = va0 + my0; + // o1 = va1 + my1; + // if (va0 > 0xFFFFFFFFu - my0) { + // o1 = o1 + 1u; + // } + // va0 = o0; + // va1 = o1; + + // // d = rotr64(d ^ a, 16) + // xor0 = vd0 ^ va0; + // xor1 = vd1 ^ va1; + // vd0 = (xor0 >> 16u) ^ (xor1 << 16u); + // vd1 = (xor1 >> 16u) ^ (xor0 << 16u); + + // // c = c + d + // o0 = vc0 + vd0; + // o1 = vc1 + vd1; + // if (vc0 > 0xFFFFFFFFu - vd0) { + // o1 = o1 + 1u; + // } + // vc0 = o0; + // vc1 = o1; + + // // b = rotr64(b ^ c, 63) + // xor0 = vb0 ^ vc0; + // xor1 = vb1 ^ vc1; + // vb0 = (xor1 >> 31u) ^ (xor0 << 1u); + // vb1 = (xor0 >> 31u) ^ (xor1 << 1u); + + + + + + /**************************************************************************** + * ROUND(10) * + ****************************************************************************/ + + G(&v0, &v1, &v8, &v9, &v16, &v17, &v24, &v25, m0, m1, m2, m3); + // // a = a + b + // o0 = va0 + vb0; + // o1 = va1 + vb1; + // if (va0 > 0xFFFFFFFFu - vb0) { + // o1 = o1 + 1u; + // } + // va0 = o0; + // va1 = o1; + + // // a = a + m[sigma[r][2*i+0]] + // o0 = va0 + mx0; + // o1 = va1 + mx1; + // if (va0 > 0xFFFFFFFFu - mx0) { + // o1 = o1 + 1u; + // } + // va0 = o0; + // va1 = o1; + + // // d = rotr64(d ^ a, 32) + // xor0 = vd0 ^ va0; + // xor1 = vd1 ^ va1; + // vd0 = xor1; + // vd1 = xor0; + + // // c = c + d + // o0 = vc0 + vd0; + // o1 = vc1 + vd1; + // if (vc0 > 0xFFFFFFFFu - vd0) { + // o1 = o1 + 1u; + // } + // vc0 = o0; + // vc1 = o1; + + // // b = rotr64(b ^ c, 24) + // xor0 = vb0 ^ vc0; + // xor1 = vb1 ^ vc1; + // vb0 = (xor0 >> 24u) ^ (xor1 << 8u); + // vb1 = (xor1 >> 24u) ^ (xor0 << 8u); + + // // a = a + b + // o0 = va0 + vb0; + // o1 = va1 + vb1; + // if (va0 > 0xFFFFFFFFu - vb0) { + // o1 = o1 + 1u; + // } + // va0 = o0; + // va1 = o1; + + // // a = a + m[sigma[r][2*i+1]] + // o0 = va0 + my0; + // o1 = va1 + my1; + // if (va0 > 0xFFFFFFFFu - my0) { + // o1 = o1 + 1u; + // } + // va0 = o0; + // va1 = o1; + + // // d = rotr64(d ^ a, 16) + // xor0 = vd0 ^ va0; + // xor1 = vd1 ^ va1; + // vd0 = (xor0 >> 16u) ^ (xor1 << 16u); + // vd1 = (xor1 >> 16u) ^ (xor0 << 16u); + + // // c = c + d + // o0 = vc0 + vd0; + // o1 = vc1 + vd1; + // if (vc0 > 0xFFFFFFFFu - vd0) { + // o1 = o1 + 1u; + // } + // vc0 = o0; + // vc1 = o1; + + // // b = rotr64(b ^ c, 63) + // xor0 = vb0 ^ vc0; + // xor1 = vb1 ^ vc1; + // vb0 = (xor1 >> 31u) ^ (xor0 << 1u); + // vb1 = (xor0 >> 31u) ^ (xor1 << 1u); + + + + + + G(&v2, &v3, &v10, &v11, &v18, &v19, &v26, &v27, m4, m5, m6, m7); + // // a = a + b + // o0 = va0 + vb0; + // o1 = va1 + vb1; + // if (va0 > 0xFFFFFFFFu - vb0) { + // o1 = o1 + 1u; + // } + // va0 = o0; + // va1 = o1; + + // // a = a + m[sigma[r][2*i+0]] + // o0 = va0 + mx0; + // o1 = va1 + mx1; + // if (va0 > 0xFFFFFFFFu - mx0) { + // o1 = o1 + 1u; + // } + // va0 = o0; + // va1 = o1; + + // // d = rotr64(d ^ a, 32) + // xor0 = vd0 ^ va0; + // xor1 = vd1 ^ va1; + // vd0 = xor1; + // vd1 = xor0; + + // // c = c + d + // o0 = vc0 + vd0; + // o1 = vc1 + vd1; + // if (vc0 > 0xFFFFFFFFu - vd0) { + // o1 = o1 + 1u; + // } + // vc0 = o0; + // vc1 = o1; + + // // b = rotr64(b ^ c, 24) + // xor0 = vb0 ^ vc0; + // xor1 = vb1 ^ vc1; + // vb0 = (xor0 >> 24u) ^ (xor1 << 8u); + // vb1 = (xor1 >> 24u) ^ (xor0 << 8u); + + // // a = a + b + // o0 = va0 + vb0; + // o1 = va1 + vb1; + // if (va0 > 0xFFFFFFFFu - vb0) { + // o1 = o1 + 1u; + // } + // va0 = o0; + // va1 = o1; + + // // a = a + m[sigma[r][2*i+1]] + // o0 = va0 + my0; + // o1 = va1 + my1; + // if (va0 > 0xFFFFFFFFu - my0) { + // o1 = o1 + 1u; + // } + // va0 = o0; + // va1 = o1; + + // // d = rotr64(d ^ a, 16) + // xor0 = vd0 ^ va0; + // xor1 = vd1 ^ va1; + // vd0 = (xor0 >> 16u) ^ (xor1 << 16u); + // vd1 = (xor1 >> 16u) ^ (xor0 << 16u); + + // // c = c + d + // o0 = vc0 + vd0; + // o1 = vc1 + vd1; + // if (vc0 > 0xFFFFFFFFu - vd0) { + // o1 = o1 + 1u; + // } + // vc0 = o0; + // vc1 = o1; + + // // b = rotr64(b ^ c, 63) + // xor0 = vb0 ^ vc0; + // xor1 = vb1 ^ vc1; + // vb0 = (xor1 >> 31u) ^ (xor0 << 1u); + // vb1 = (xor0 >> 31u) ^ (xor1 << 1u); + + + + + + G(&v4, &v5, &v12, &v13, &v20, &v21, &v28, &v29, m8, m9, 0u, 0u); + // // a = a + b + // o0 = va0 + vb0; + // o1 = va1 + vb1; + // if (va0 > 0xFFFFFFFFu - vb0) { + // o1 = o1 + 1u; + // } + // va0 = o0; + // va1 = o1; + + // // a = a + m[sigma[r][2*i+0]] + // o0 = va0 + mx0; + // o1 = va1 + mx1; + // if (va0 > 0xFFFFFFFFu - mx0) { + // o1 = o1 + 1u; + // } + // va0 = o0; + // va1 = o1; + + // // d = rotr64(d ^ a, 32) + // xor0 = vd0 ^ va0; + // xor1 = vd1 ^ va1; + // vd0 = xor1; + // vd1 = xor0; + + // // c = c + d + // o0 = vc0 + vd0; + // o1 = vc1 + vd1; + // if (vc0 > 0xFFFFFFFFu - vd0) { + // o1 = o1 + 1u; + // } + // vc0 = o0; + // vc1 = o1; + + // // b = rotr64(b ^ c, 24) + // xor0 = vb0 ^ vc0; + // xor1 = vb1 ^ vc1; + // vb0 = (xor0 >> 24u) ^ (xor1 << 8u); + // vb1 = (xor1 >> 24u) ^ (xor0 << 8u); + + // // a = a + b + // o0 = va0 + vb0; + // o1 = va1 + vb1; + // if (va0 > 0xFFFFFFFFu - vb0) { + // o1 = o1 + 1u; + // } + // va0 = o0; + // va1 = o1; + + // // a = a + m[sigma[r][2*i+1]] + // o0 = va0 + my0; + // o1 = va1 + my1; + // if (va0 > 0xFFFFFFFFu - my0) { + // o1 = o1 + 1u; + // } + // va0 = o0; + // va1 = o1; + + // // d = rotr64(d ^ a, 16) + // xor0 = vd0 ^ va0; + // xor1 = vd1 ^ va1; + // vd0 = (xor0 >> 16u) ^ (xor1 << 16u); + // vd1 = (xor1 >> 16u) ^ (xor0 << 16u); + + // // c = c + d + // o0 = vc0 + vd0; + // o1 = vc1 + vd1; + // if (vc0 > 0xFFFFFFFFu - vd0) { + // o1 = o1 + 1u; + // } + // vc0 = o0; + // vc1 = o1; + + // // b = rotr64(b ^ c, 63) + // xor0 = vb0 ^ vc0; + // xor1 = vb1 ^ vc1; + // vb0 = (xor1 >> 31u) ^ (xor0 << 1u); + // vb1 = (xor0 >> 31u) ^ (xor1 << 1u); + + + + + + G(&v6, &v7, &v14, &v15, &v22, &v23, &v30, &v31, 0u, 0u, 0u, 0u); + // // a = a + b + // o0 = va0 + vb0; + // o1 = va1 + vb1; + // if (va0 > 0xFFFFFFFFu - vb0) { + // o1 = o1 + 1u; + // } + // va0 = o0; + // va1 = o1; + + // // a = a + m[sigma[r][2*i+0]] + // o0 = va0 + mx0; + // o1 = va1 + mx1; + // if (va0 > 0xFFFFFFFFu - mx0) { + // o1 = o1 + 1u; + // } + // va0 = o0; + // va1 = o1; + + // // d = rotr64(d ^ a, 32) + // xor0 = vd0 ^ va0; + // xor1 = vd1 ^ va1; + // vd0 = xor1; + // vd1 = xor0; + + // // c = c + d + // o0 = vc0 + vd0; + // o1 = vc1 + vd1; + // if (vc0 > 0xFFFFFFFFu - vd0) { + // o1 = o1 + 1u; + // } + // vc0 = o0; + // vc1 = o1; + + // // b = rotr64(b ^ c, 24) + // xor0 = vb0 ^ vc0; + // xor1 = vb1 ^ vc1; + // vb0 = (xor0 >> 24u) ^ (xor1 << 8u); + // vb1 = (xor1 >> 24u) ^ (xor0 << 8u); + + // // a = a + b + // o0 = va0 + vb0; + // o1 = va1 + vb1; + // if (va0 > 0xFFFFFFFFu - vb0) { + // o1 = o1 + 1u; + // } + // va0 = o0; + // va1 = o1; + + // // a = a + m[sigma[r][2*i+1]] + // o0 = va0 + my0; + // o1 = va1 + my1; + // if (va0 > 0xFFFFFFFFu - my0) { + // o1 = o1 + 1u; + // } + // va0 = o0; + // va1 = o1; + + // // d = rotr64(d ^ a, 16) + // xor0 = vd0 ^ va0; + // xor1 = vd1 ^ va1; + // vd0 = (xor0 >> 16u) ^ (xor1 << 16u); + // vd1 = (xor1 >> 16u) ^ (xor0 << 16u); + + // // c = c + d + // o0 = vc0 + vd0; + // o1 = vc1 + vd1; + // if (vc0 > 0xFFFFFFFFu - vd0) { + // o1 = o1 + 1u; + // } + // vc0 = o0; + // vc1 = o1; + + // // b = rotr64(b ^ c, 63) + // xor0 = vb0 ^ vc0; + // xor1 = vb1 ^ vc1; + // vb0 = (xor1 >> 31u) ^ (xor0 << 1u); + // vb1 = (xor0 >> 31u) ^ (xor1 << 1u); + + + + + + G(&v0, &v1, &v10, &v11, &v20, &v21, &v30, &v31, 0u, 0u, 0u, 0u); + // // a = a + b + // o0 = va0 + vb0; + // o1 = va1 + vb1; + // if (va0 > 0xFFFFFFFFu - vb0) { + // o1 = o1 + 1u; + // } + // va0 = o0; + // va1 = o1; + + // // a = a + m[sigma[r][2*i+0]] + // o0 = va0 + mx0; + // o1 = va1 + mx1; + // if (va0 > 0xFFFFFFFFu - mx0) { + // o1 = o1 + 1u; + // } + // va0 = o0; + // va1 = o1; + + // // d = rotr64(d ^ a, 32) + // xor0 = vd0 ^ va0; + // xor1 = vd1 ^ va1; + // vd0 = xor1; + // vd1 = xor0; + + // // c = c + d + // o0 = vc0 + vd0; + // o1 = vc1 + vd1; + // if (vc0 > 0xFFFFFFFFu - vd0) { + // o1 = o1 + 1u; + // } + // vc0 = o0; + // vc1 = o1; + + // // b = rotr64(b ^ c, 24) + // xor0 = vb0 ^ vc0; + // xor1 = vb1 ^ vc1; + // vb0 = (xor0 >> 24u) ^ (xor1 << 8u); + // vb1 = (xor1 >> 24u) ^ (xor0 << 8u); + + // // a = a + b + // o0 = va0 + vb0; + // o1 = va1 + vb1; + // if (va0 > 0xFFFFFFFFu - vb0) { + // o1 = o1 + 1u; + // } + // va0 = o0; + // va1 = o1; + + // // a = a + m[sigma[r][2*i+1]] + // o0 = va0 + my0; + // o1 = va1 + my1; + // if (va0 > 0xFFFFFFFFu - my0) { + // o1 = o1 + 1u; + // } + // va0 = o0; + // va1 = o1; + + // // d = rotr64(d ^ a, 16) + // xor0 = vd0 ^ va0; + // xor1 = vd1 ^ va1; + // vd0 = (xor0 >> 16u) ^ (xor1 << 16u); + // vd1 = (xor1 >> 16u) ^ (xor0 << 16u); + + // // c = c + d + // o0 = vc0 + vd0; + // o1 = vc1 + vd1; + // if (vc0 > 0xFFFFFFFFu - vd0) { + // o1 = o1 + 1u; + // } + // vc0 = o0; + // vc1 = o1; + + // // b = rotr64(b ^ c, 63) + // xor0 = vb0 ^ vc0; + // xor1 = vb1 ^ vc1; + // vb0 = (xor1 >> 31u) ^ (xor0 << 1u); + // vb1 = (xor0 >> 31u) ^ (xor1 << 1u); + + + + + + G(&v2, &v3, &v12, &v13, &v22, &v23, &v24, &v25, 0u, 0u, 0u, 0u); + // // a = a + b + // o0 = va0 + vb0; + // o1 = va1 + vb1; + // if (va0 > 0xFFFFFFFFu - vb0) { + // o1 = o1 + 1u; + // } + // va0 = o0; + // va1 = o1; + + // // a = a + m[sigma[r][2*i+0]] + // o0 = va0 + mx0; + // o1 = va1 + mx1; + // if (va0 > 0xFFFFFFFFu - mx0) { + // o1 = o1 + 1u; + // } + // va0 = o0; + // va1 = o1; + + // // d = rotr64(d ^ a, 32) + // xor0 = vd0 ^ va0; + // xor1 = vd1 ^ va1; + // vd0 = xor1; + // vd1 = xor0; + + // // c = c + d + // o0 = vc0 + vd0; + // o1 = vc1 + vd1; + // if (vc0 > 0xFFFFFFFFu - vd0) { + // o1 = o1 + 1u; + // } + // vc0 = o0; + // vc1 = o1; + + // // b = rotr64(b ^ c, 24) + // xor0 = vb0 ^ vc0; + // xor1 = vb1 ^ vc1; + // vb0 = (xor0 >> 24u) ^ (xor1 << 8u); + // vb1 = (xor1 >> 24u) ^ (xor0 << 8u); + + // // a = a + b + // o0 = va0 + vb0; + // o1 = va1 + vb1; + // if (va0 > 0xFFFFFFFFu - vb0) { + // o1 = o1 + 1u; + // } + // va0 = o0; + // va1 = o1; + + // // a = a + m[sigma[r][2*i+1]] + // o0 = va0 + my0; + // o1 = va1 + my1; + // if (va0 > 0xFFFFFFFFu - my0) { + // o1 = o1 + 1u; + // } + // va0 = o0; + // va1 = o1; + + // // d = rotr64(d ^ a, 16) + // xor0 = vd0 ^ va0; + // xor1 = vd1 ^ va1; + // vd0 = (xor0 >> 16u) ^ (xor1 << 16u); + // vd1 = (xor1 >> 16u) ^ (xor0 << 16u); + + // // c = c + d + // o0 = vc0 + vd0; + // o1 = vc1 + vd1; + // if (vc0 > 0xFFFFFFFFu - vd0) { + // o1 = o1 + 1u; + // } + // vc0 = o0; + // vc1 = o1; + + // // b = rotr64(b ^ c, 63) + // xor0 = vb0 ^ vc0; + // xor1 = vb1 ^ vc1; + // vb0 = (xor1 >> 31u) ^ (xor0 << 1u); + // vb1 = (xor0 >> 31u) ^ (xor1 << 1u); + + + + + + G(&v4, &v5, &v14, &v15, &v16, &v17, &v26, &v27, 0u, 0u, 0u, 0u); + // // a = a + b + // o0 = va0 + vb0; + // o1 = va1 + vb1; + // if (va0 > 0xFFFFFFFFu - vb0) { + // o1 = o1 + 1u; + // } + // va0 = o0; + // va1 = o1; + + // // a = a + m[sigma[r][2*i+0]] + // o0 = va0 + mx0; + // o1 = va1 + mx1; + // if (va0 > 0xFFFFFFFFu - mx0) { + // o1 = o1 + 1u; + // } + // va0 = o0; + // va1 = o1; + + // // d = rotr64(d ^ a, 32) + // xor0 = vd0 ^ va0; + // xor1 = vd1 ^ va1; + // vd0 = xor1; + // vd1 = xor0; + + // // c = c + d + // o0 = vc0 + vd0; + // o1 = vc1 + vd1; + // if (vc0 > 0xFFFFFFFFu - vd0) { + // o1 = o1 + 1u; + // } + // vc0 = o0; + // vc1 = o1; + + // // b = rotr64(b ^ c, 24) + // xor0 = vb0 ^ vc0; + // xor1 = vb1 ^ vc1; + // vb0 = (xor0 >> 24u) ^ (xor1 << 8u); + // vb1 = (xor1 >> 24u) ^ (xor0 << 8u); + + // // a = a + b + // o0 = va0 + vb0; + // o1 = va1 + vb1; + // if (va0 > 0xFFFFFFFFu - vb0) { + // o1 = o1 + 1u; + // } + // va0 = o0; + // va1 = o1; + + // // a = a + m[sigma[r][2*i+1]] + // o0 = va0 + my0; + // o1 = va1 + my1; + // if (va0 > 0xFFFFFFFFu - my0) { + // o1 = o1 + 1u; + // } + // va0 = o0; + // va1 = o1; + + // // d = rotr64(d ^ a, 16) + // xor0 = vd0 ^ va0; + // xor1 = vd1 ^ va1; + // vd0 = (xor0 >> 16u) ^ (xor1 << 16u); + // vd1 = (xor1 >> 16u) ^ (xor0 << 16u); + + // // c = c + d + // o0 = vc0 + vd0; + // o1 = vc1 + vd1; + // if (vc0 > 0xFFFFFFFFu - vd0) { + // o1 = o1 + 1u; + // } + // vc0 = o0; + // vc1 = o1; + + // // b = rotr64(b ^ c, 63) + // xor0 = vb0 ^ vc0; + // xor1 = vb1 ^ vc1; + // vb0 = (xor1 >> 31u) ^ (xor0 << 1u); + // vb1 = (xor0 >> 31u) ^ (xor1 << 1u); + + + + + + G(&v6, &v7, &v8, &v9, &v18, &v19, &v28, &v29, 0u, 0u, 0u, 0u); + // // a = a + b + // o0 = va0 + vb0; + // o1 = va1 + vb1; + // if (va0 > 0xFFFFFFFFu - vb0) { + // o1 = o1 + 1u; + // } + // va0 = o0; + // va1 = o1; + + // // a = a + m[sigma[r][2*i+0]] + // o0 = va0 + mx0; + // o1 = va1 + mx1; + // if (va0 > 0xFFFFFFFFu - mx0) { + // o1 = o1 + 1u; + // } + // va0 = o0; + // va1 = o1; + + // // d = rotr64(d ^ a, 32) + // xor0 = vd0 ^ va0; + // xor1 = vd1 ^ va1; + // vd0 = xor1; + // vd1 = xor0; + + // // c = c + d + // o0 = vc0 + vd0; + // o1 = vc1 + vd1; + // if (vc0 > 0xFFFFFFFFu - vd0) { + // o1 = o1 + 1u; + // } + // vc0 = o0; + // vc1 = o1; + + // // b = rotr64(b ^ c, 24) + // xor0 = vb0 ^ vc0; + // xor1 = vb1 ^ vc1; + // vb0 = (xor0 >> 24u) ^ (xor1 << 8u); + // vb1 = (xor1 >> 24u) ^ (xor0 << 8u); + + // // a = a + b + // o0 = va0 + vb0; + // o1 = va1 + vb1; + // if (va0 > 0xFFFFFFFFu - vb0) { + // o1 = o1 + 1u; + // } + // va0 = o0; + // va1 = o1; + + // // a = a + m[sigma[r][2*i+1]] + // o0 = va0 + my0; + // o1 = va1 + my1; + // if (va0 > 0xFFFFFFFFu - my0) { + // o1 = o1 + 1u; + // } + // va0 = o0; + // va1 = o1; + + // // d = rotr64(d ^ a, 16) + // xor0 = vd0 ^ va0; + // xor1 = vd1 ^ va1; + // vd0 = (xor0 >> 16u) ^ (xor1 << 16u); + // vd1 = (xor1 >> 16u) ^ (xor0 << 16u); + + // // c = c + d + // o0 = vc0 + vd0; + // o1 = vc1 + vd1; + // if (vc0 > 0xFFFFFFFFu - vd0) { + // o1 = o1 + 1u; + // } + // vc0 = o0; + // vc1 = o1; + + // // b = rotr64(b ^ c, 63) + // xor0 = vb0 ^ vc0; + // xor1 = vb1 ^ vc1; + // vb0 = (xor1 >> 31u) ^ (xor0 << 1u); + // vb1 = (xor0 >> 31u) ^ (xor1 << 1u); + + + + + + /**************************************************************************** + * ROUND(11) * + ****************************************************************************/ + + G(&v0, &v1, &v8, &v9, &v16, &v17, &v24, &v25, 0u, 0u, 0u, 0u); + // // a = a + b + // o0 = va0 + vb0; + // o1 = va1 + vb1; + // if (va0 > 0xFFFFFFFFu - vb0) { + // o1 = o1 + 1u; + // } + // va0 = o0; + // va1 = o1; + + // // a = a + m[sigma[r][2*i+0]] + // o0 = va0 + mx0; + // o1 = va1 + mx1; + // if (va0 > 0xFFFFFFFFu - mx0) { + // o1 = o1 + 1u; + // } + // va0 = o0; + // va1 = o1; + + // // d = rotr64(d ^ a, 32) + // xor0 = vd0 ^ va0; + // xor1 = vd1 ^ va1; + // vd0 = xor1; + // vd1 = xor0; + + // // c = c + d + // o0 = vc0 + vd0; + // o1 = vc1 + vd1; + // if (vc0 > 0xFFFFFFFFu - vd0) { + // o1 = o1 + 1u; + // } + // vc0 = o0; + // vc1 = o1; + + // // b = rotr64(b ^ c, 24) + // xor0 = vb0 ^ vc0; + // xor1 = vb1 ^ vc1; + // vb0 = (xor0 >> 24u) ^ (xor1 << 8u); + // vb1 = (xor1 >> 24u) ^ (xor0 << 8u); + + // // a = a + b + // o0 = va0 + vb0; + // o1 = va1 + vb1; + // if (va0 > 0xFFFFFFFFu - vb0) { + // o1 = o1 + 1u; + // } + // va0 = o0; + // va1 = o1; + + // // a = a + m[sigma[r][2*i+1]] + // o0 = va0 + my0; + // o1 = va1 + my1; + // if (va0 > 0xFFFFFFFFu - my0) { + // o1 = o1 + 1u; + // } + // va0 = o0; + // va1 = o1; + + // // d = rotr64(d ^ a, 16) + // xor0 = vd0 ^ va0; + // xor1 = vd1 ^ va1; + // vd0 = (xor0 >> 16u) ^ (xor1 << 16u); + // vd1 = (xor1 >> 16u) ^ (xor0 << 16u); + + // // c = c + d + // o0 = vc0 + vd0; + // o1 = vc1 + vd1; + // if (vc0 > 0xFFFFFFFFu - vd0) { + // o1 = o1 + 1u; + // } + // vc0 = o0; + // vc1 = o1; + + // // b = rotr64(b ^ c, 63) + // xor0 = vb0 ^ vc0; + // xor1 = vb1 ^ vc1; + // vb0 = (xor1 >> 31u) ^ (xor0 << 1u); + // vb1 = (xor0 >> 31u) ^ (xor1 << 1u); + + + + + + G(&v2, &v3, &v10, &v11, &v18, &v19, &v26, &v27, m8, m9, 0u, 0u); + // // a = a + b + // o0 = va0 + vb0; + // o1 = va1 + vb1; + // if (va0 > 0xFFFFFFFFu - vb0) { + // o1 = o1 + 1u; + // } + // va0 = o0; + // va1 = o1; + + // // a = a + m[sigma[r][2*i+0]] + // o0 = va0 + mx0; + // o1 = va1 + mx1; + // if (va0 > 0xFFFFFFFFu - mx0) { + // o1 = o1 + 1u; + // } + // va0 = o0; + // va1 = o1; + + // // d = rotr64(d ^ a, 32) + // xor0 = vd0 ^ va0; + // xor1 = vd1 ^ va1; + // vd0 = xor1; + // vd1 = xor0; + + // // c = c + d + // o0 = vc0 + vd0; + // o1 = vc1 + vd1; + // if (vc0 > 0xFFFFFFFFu - vd0) { + // o1 = o1 + 1u; + // } + // vc0 = o0; + // vc1 = o1; + + // // b = rotr64(b ^ c, 24) + // xor0 = vb0 ^ vc0; + // xor1 = vb1 ^ vc1; + // vb0 = (xor0 >> 24u) ^ (xor1 << 8u); + // vb1 = (xor1 >> 24u) ^ (xor0 << 8u); + + // // a = a + b + // o0 = va0 + vb0; + // o1 = va1 + vb1; + // if (va0 > 0xFFFFFFFFu - vb0) { + // o1 = o1 + 1u; + // } + // va0 = o0; + // va1 = o1; + + // // a = a + m[sigma[r][2*i+1]] + // o0 = va0 + my0; + // o1 = va1 + my1; + // if (va0 > 0xFFFFFFFFu - my0) { + // o1 = o1 + 1u; + // } + // va0 = o0; + // va1 = o1; + + // // d = rotr64(d ^ a, 16) + // xor0 = vd0 ^ va0; + // xor1 = vd1 ^ va1; + // vd0 = (xor0 >> 16u) ^ (xor1 << 16u); + // vd1 = (xor1 >> 16u) ^ (xor0 << 16u); + + // // c = c + d + // o0 = vc0 + vd0; + // o1 = vc1 + vd1; + // if (vc0 > 0xFFFFFFFFu - vd0) { + // o1 = o1 + 1u; + // } + // vc0 = o0; + // vc1 = o1; + + // // b = rotr64(b ^ c, 63) + // xor0 = vb0 ^ vc0; + // xor1 = vb1 ^ vc1; + // vb0 = (xor1 >> 31u) ^ (xor0 << 1u); + // vb1 = (xor0 >> 31u) ^ (xor1 << 1u); + + + + + + G(&v4, &v5, &v12, &v13, &v20, &v21, &v28, &v29, 0u, 0u, 0u, 0u); + // // a = a + b + // o0 = va0 + vb0; + // o1 = va1 + vb1; + // if (va0 > 0xFFFFFFFFu - vb0) { + // o1 = o1 + 1u; + // } + // va0 = o0; + // va1 = o1; + + // // a = a + m[sigma[r][2*i+0]] + // o0 = va0 + mx0; + // o1 = va1 + mx1; + // if (va0 > 0xFFFFFFFFu - mx0) { + // o1 = o1 + 1u; + // } + // va0 = o0; + // va1 = o1; + + // // d = rotr64(d ^ a, 32) + // xor0 = vd0 ^ va0; + // xor1 = vd1 ^ va1; + // vd0 = xor1; + // vd1 = xor0; + + // // c = c + d + // o0 = vc0 + vd0; + // o1 = vc1 + vd1; + // if (vc0 > 0xFFFFFFFFu - vd0) { + // o1 = o1 + 1u; + // } + // vc0 = o0; + // vc1 = o1; + + // // b = rotr64(b ^ c, 24) + // xor0 = vb0 ^ vc0; + // xor1 = vb1 ^ vc1; + // vb0 = (xor0 >> 24u) ^ (xor1 << 8u); + // vb1 = (xor1 >> 24u) ^ (xor0 << 8u); + + // // a = a + b + // o0 = va0 + vb0; + // o1 = va1 + vb1; + // if (va0 > 0xFFFFFFFFu - vb0) { + // o1 = o1 + 1u; + // } + // va0 = o0; + // va1 = o1; + + // // a = a + m[sigma[r][2*i+1]] + // o0 = va0 + my0; + // o1 = va1 + my1; + // if (va0 > 0xFFFFFFFFu - my0) { + // o1 = o1 + 1u; + // } + // va0 = o0; + // va1 = o1; + + // // d = rotr64(d ^ a, 16) + // xor0 = vd0 ^ va0; + // xor1 = vd1 ^ va1; + // vd0 = (xor0 >> 16u) ^ (xor1 << 16u); + // vd1 = (xor1 >> 16u) ^ (xor0 << 16u); + + // // c = c + d + // o0 = vc0 + vd0; + // o1 = vc1 + vd1; + // if (vc0 > 0xFFFFFFFFu - vd0) { + // o1 = o1 + 1u; + // } + // vc0 = o0; + // vc1 = o1; + + // // b = rotr64(b ^ c, 63) + // xor0 = vb0 ^ vc0; + // xor1 = vb1 ^ vc1; + // vb0 = (xor1 >> 31u) ^ (xor0 << 1u); + // vb1 = (xor0 >> 31u) ^ (xor1 << 1u); + + + + + + G(&v6, &v7, &v14, &v15, &v22, &v23, &v30, &v31, 0u, 0u, 0u, 0u); + // // a = a + b + // o0 = va0 + vb0; + // o1 = va1 + vb1; + // if (va0 > 0xFFFFFFFFu - vb0) { + // o1 = o1 + 1u; + // } + // va0 = o0; + // va1 = o1; + + // // a = a + m[sigma[r][2*i+0]] + // o0 = va0 + mx0; + // o1 = va1 + mx1; + // if (va0 > 0xFFFFFFFFu - mx0) { + // o1 = o1 + 1u; + // } + // va0 = o0; + // va1 = o1; + + // // d = rotr64(d ^ a, 32) + // xor0 = vd0 ^ va0; + // xor1 = vd1 ^ va1; + // vd0 = xor1; + // vd1 = xor0; + + // // c = c + d + // o0 = vc0 + vd0; + // o1 = vc1 + vd1; + // if (vc0 > 0xFFFFFFFFu - vd0) { + // o1 = o1 + 1u; + // } + // vc0 = o0; + // vc1 = o1; + + // // b = rotr64(b ^ c, 24) + // xor0 = vb0 ^ vc0; + // xor1 = vb1 ^ vc1; + // vb0 = (xor0 >> 24u) ^ (xor1 << 8u); + // vb1 = (xor1 >> 24u) ^ (xor0 << 8u); + + // // a = a + b + // o0 = va0 + vb0; + // o1 = va1 + vb1; + // if (va0 > 0xFFFFFFFFu - vb0) { + // o1 = o1 + 1u; + // } + // va0 = o0; + // va1 = o1; + + // // a = a + m[sigma[r][2*i+1]] + // o0 = va0 + my0; + // o1 = va1 + my1; + // if (va0 > 0xFFFFFFFFu - my0) { + // o1 = o1 + 1u; + // } + // va0 = o0; + // va1 = o1; + + // // d = rotr64(d ^ a, 16) + // xor0 = vd0 ^ va0; + // xor1 = vd1 ^ va1; + // vd0 = (xor0 >> 16u) ^ (xor1 << 16u); + // vd1 = (xor1 >> 16u) ^ (xor0 << 16u); + + // // c = c + d + // o0 = vc0 + vd0; + // o1 = vc1 + vd1; + // if (vc0 > 0xFFFFFFFFu - vd0) { + // o1 = o1 + 1u; + // } + // vc0 = o0; + // vc1 = o1; + + // // b = rotr64(b ^ c, 63) + // xor0 = vb0 ^ vc0; + // xor1 = vb1 ^ vc1; + // vb0 = (xor1 >> 31u) ^ (xor0 << 1u); + // vb1 = (xor0 >> 31u) ^ (xor1 << 1u); + + + + + + G(&v0, &v1, &v10, &v11, &v20, &v21, &v30, &v31, m2, m3, 0u, 0u); + // // a = a + b + // o0 = va0 + vb0; + // o1 = va1 + vb1; + // if (va0 > 0xFFFFFFFFu - vb0) { + // o1 = o1 + 1u; + // } + // va0 = o0; + // va1 = o1; + + // // a = a + m[sigma[r][2*i+0]] + // o0 = va0 + mx0; + // o1 = va1 + mx1; + // if (va0 > 0xFFFFFFFFu - mx0) { + // o1 = o1 + 1u; + // } + // va0 = o0; + // va1 = o1; + + // // d = rotr64(d ^ a, 32) + // xor0 = vd0 ^ va0; + // xor1 = vd1 ^ va1; + // vd0 = xor1; + // vd1 = xor0; + + // // c = c + d + // o0 = vc0 + vd0; + // o1 = vc1 + vd1; + // if (vc0 > 0xFFFFFFFFu - vd0) { + // o1 = o1 + 1u; + // } + // vc0 = o0; + // vc1 = o1; + + // // b = rotr64(b ^ c, 24) + // xor0 = vb0 ^ vc0; + // xor1 = vb1 ^ vc1; + // vb0 = (xor0 >> 24u) ^ (xor1 << 8u); + // vb1 = (xor1 >> 24u) ^ (xor0 << 8u); + + // // a = a + b + // o0 = va0 + vb0; + // o1 = va1 + vb1; + // if (va0 > 0xFFFFFFFFu - vb0) { + // o1 = o1 + 1u; + // } + // va0 = o0; + // va1 = o1; + + // // a = a + m[sigma[r][2*i+1]] + // o0 = va0 + my0; + // o1 = va1 + my1; + // if (va0 > 0xFFFFFFFFu - my0) { + // o1 = o1 + 1u; + // } + // va0 = o0; + // va1 = o1; + + // // d = rotr64(d ^ a, 16) + // xor0 = vd0 ^ va0; + // xor1 = vd1 ^ va1; + // vd0 = (xor0 >> 16u) ^ (xor1 << 16u); + // vd1 = (xor1 >> 16u) ^ (xor0 << 16u); + + // // c = c + d + // o0 = vc0 + vd0; + // o1 = vc1 + vd1; + // if (vc0 > 0xFFFFFFFFu - vd0) { + // o1 = o1 + 1u; + // } + // vc0 = o0; + // vc1 = o1; + + // // b = rotr64(b ^ c, 63) + // xor0 = vb0 ^ vc0; + // xor1 = vb1 ^ vc1; + // vb0 = (xor1 >> 31u) ^ (xor0 << 1u); + // vb1 = (xor0 >> 31u) ^ (xor1 << 1u); + + + + + + G(&v2, &v3, &v12, &v13, &v22, &v23, &v24, &v25, m0, m1, m4, m5); + // // a = a + b + // o0 = va0 + vb0; + // o1 = va1 + vb1; + // if (va0 > 0xFFFFFFFFu - vb0) { + // o1 = o1 + 1u; + // } + // va0 = o0; + // va1 = o1; + + // // a = a + m[sigma[r][2*i+0]] + // o0 = va0 + mx0; + // o1 = va1 + mx1; + // if (va0 > 0xFFFFFFFFu - mx0) { + // o1 = o1 + 1u; + // } + // va0 = o0; + // va1 = o1; + + // // d = rotr64(d ^ a, 32) + // xor0 = vd0 ^ va0; + // xor1 = vd1 ^ va1; + // vd0 = xor1; + // vd1 = xor0; + + // // c = c + d + // o0 = vc0 + vd0; + // o1 = vc1 + vd1; + // if (vc0 > 0xFFFFFFFFu - vd0) { + // o1 = o1 + 1u; + // } + // vc0 = o0; + // vc1 = o1; + + // // b = rotr64(b ^ c, 24) + // xor0 = vb0 ^ vc0; + // xor1 = vb1 ^ vc1; + // vb0 = (xor0 >> 24u) ^ (xor1 << 8u); + // vb1 = (xor1 >> 24u) ^ (xor0 << 8u); + + // // a = a + b + // o0 = va0 + vb0; + // o1 = va1 + vb1; + // if (va0 > 0xFFFFFFFFu - vb0) { + // o1 = o1 + 1u; + // } + // va0 = o0; + // va1 = o1; + + // // a = a + m[sigma[r][2*i+1]] + // o0 = va0 + my0; + // o1 = va1 + my1; + // if (va0 > 0xFFFFFFFFu - my0) { + // o1 = o1 + 1u; + // } + // va0 = o0; + // va1 = o1; + + // // d = rotr64(d ^ a, 16) + // xor0 = vd0 ^ va0; + // xor1 = vd1 ^ va1; + // vd0 = (xor0 >> 16u) ^ (xor1 << 16u); + // vd1 = (xor1 >> 16u) ^ (xor0 << 16u); + + // // c = c + d + // o0 = vc0 + vd0; + // o1 = vc1 + vd1; + // if (vc0 > 0xFFFFFFFFu - vd0) { + // o1 = o1 + 1u; + // } + // vc0 = o0; + // vc1 = o1; + + // // b = rotr64(b ^ c, 63) + // xor0 = vb0 ^ vc0; + // xor1 = vb1 ^ vc1; + // vb0 = (xor1 >> 31u) ^ (xor0 << 1u); + // vb1 = (xor0 >> 31u) ^ (xor1 << 1u); + + + + + + G(&v4, &v5, &v14, &v15, &v16, &v17, &v26, &v27, 0u, 0u, 0u, 0u); + // // a = a + b + // o0 = va0 + vb0; + // o1 = va1 + vb1; + // if (va0 > 0xFFFFFFFFu - vb0) { + // o1 = o1 + 1u; + // } + // va0 = o0; + // va1 = o1; + + // // a = a + m[sigma[r][2*i+0]] + // o0 = va0 + mx0; + // o1 = va1 + mx1; + // if (va0 > 0xFFFFFFFFu - mx0) { + // o1 = o1 + 1u; + // } + // va0 = o0; + // va1 = o1; + + // // d = rotr64(d ^ a, 32) + // xor0 = vd0 ^ va0; + // xor1 = vd1 ^ va1; + // vd0 = xor1; + // vd1 = xor0; + + // // c = c + d + // o0 = vc0 + vd0; + // o1 = vc1 + vd1; + // if (vc0 > 0xFFFFFFFFu - vd0) { + // o1 = o1 + 1u; + // } + // vc0 = o0; + // vc1 = o1; + + // // b = rotr64(b ^ c, 24) + // xor0 = vb0 ^ vc0; + // xor1 = vb1 ^ vc1; + // vb0 = (xor0 >> 24u) ^ (xor1 << 8u); + // vb1 = (xor1 >> 24u) ^ (xor0 << 8u); + + // // a = a + b + // o0 = va0 + vb0; + // o1 = va1 + vb1; + // if (va0 > 0xFFFFFFFFu - vb0) { + // o1 = o1 + 1u; + // } + // va0 = o0; + // va1 = o1; + + // // a = a + m[sigma[r][2*i+1]] + // o0 = va0 + my0; + // o1 = va1 + my1; + // if (va0 > 0xFFFFFFFFu - my0) { + // o1 = o1 + 1u; + // } + // va0 = o0; + // va1 = o1; + + // // d = rotr64(d ^ a, 16) + // xor0 = vd0 ^ va0; + // xor1 = vd1 ^ va1; + // vd0 = (xor0 >> 16u) ^ (xor1 << 16u); + // vd1 = (xor1 >> 16u) ^ (xor0 << 16u); + + // // c = c + d + // o0 = vc0 + vd0; + // o1 = vc1 + vd1; + // if (vc0 > 0xFFFFFFFFu - vd0) { + // o1 = o1 + 1u; + // } + // vc0 = o0; + // vc1 = o1; + + // // b = rotr64(b ^ c, 63) + // xor0 = vb0 ^ vc0; + // xor1 = vb1 ^ vc1; + // vb0 = (xor1 >> 31u) ^ (xor0 << 1u); + // vb1 = (xor0 >> 31u) ^ (xor1 << 1u); + + + + + + G(&v6, &v7, &v8, &v9, &v18, &v19, &v28, &v29, 0u, 0u, m6, m7); + // // a = a + b + // o0 = va0 + vb0; + // o1 = va1 + vb1; + // if (va0 > 0xFFFFFFFFu - vb0) { + // o1 = o1 + 1u; + // } + // va0 = o0; + // va1 = o1; + + // // a = a + m[sigma[r][2*i+0]] + // o0 = va0 + mx0; + // o1 = va1 + mx1; + // if (va0 > 0xFFFFFFFFu - mx0) { + // o1 = o1 + 1u; + // } + // va0 = o0; + // va1 = o1; + + // // d = rotr64(d ^ a, 32) + // xor0 = vd0 ^ va0; + // xor1 = vd1 ^ va1; + // vd0 = xor1; + // vd1 = xor0; + + // // c = c + d + // o0 = vc0 + vd0; + // o1 = vc1 + vd1; + // if (vc0 > 0xFFFFFFFFu - vd0) { + // o1 = o1 + 1u; + // } + // vc0 = o0; + // vc1 = o1; + + // // b = rotr64(b ^ c, 24) + // xor0 = vb0 ^ vc0; + // xor1 = vb1 ^ vc1; + // vb0 = (xor0 >> 24u) ^ (xor1 << 8u); + // vb1 = (xor1 >> 24u) ^ (xor0 << 8u); + + // // a = a + b + // o0 = va0 + vb0; + // o1 = va1 + vb1; + // if (va0 > 0xFFFFFFFFu - vb0) { + // o1 = o1 + 1u; + // } + // va0 = o0; + // va1 = o1; + + // // a = a + m[sigma[r][2*i+1]] + // o0 = va0 + my0; + // o1 = va1 + my1; + // if (va0 > 0xFFFFFFFFu - my0) { + // o1 = o1 + 1u; + // } + // va0 = o0; + // va1 = o1; + + // // d = rotr64(d ^ a, 16) + // xor0 = vd0 ^ va0; + // xor1 = vd1 ^ va1; + // vd0 = (xor0 >> 16u) ^ (xor1 << 16u); + // vd1 = (xor1 >> 16u) ^ (xor0 << 16u); + + // // c = c + d + // o0 = vc0 + vd0; + // o1 = vc1 + vd1; + // if (vc0 > 0xFFFFFFFFu - vd0) { + // o1 = o1 + 1u; + // } + // vc0 = o0; + // vc1 = o1; + + // // b = rotr64(b ^ c, 63) + // xor0 = vb0 ^ vc0; + // xor1 = vb1 ^ vc1; + // vb0 = (xor1 >> 31u) ^ (xor0 << 1u); + // vb1 = (xor0 >> 31u) ^ (xor1 << 1u); + + + + + + /**************************************************************************** + * NONCE CHECK * + ****************************************************************************/ + + /** + * Set nonce if it passes the threshold and no other thread has set it */ if ((BLAKE2B_IV32_1 ^ v1 ^ v17) > threshold && atomicLoad(&work.found) == 0u) { atomicStore(&work.found, 1u); @@ -4790,6 +11975,7 @@ var init_gpu = __esm({ init_shaders(); NanoPowGpu = class { // Initialize WebGPU + static #busy = false; static #device = null; static #uboBuffer; static #gpuBuffer; @@ -4800,66 +11986,79 @@ var init_gpu = __esm({ this.init(); } // Initialize WebGPU - static init() { + static async init() { + if (this.#busy) return; + this.#busy = true; if (navigator.gpu == null) { throw new Error("WebGPU is not supported in this browser."); } - navigator.gpu.requestAdapter().then((adapter) => { + try { + const adapter = await navigator.gpu.requestAdapter(); if (adapter == null) { throw new Error("WebGPU adapter refused by browser."); } - adapter.requestDevice().then((device) => { - this.#device = device; - this.#device.lost.then((loss) => { - console.dir(loss); - console.warn(loss.reason, loss.message); - console.warn(`Device lost. Reinitializing...`); - this.init(); - }); - this.#uboBuffer = this.#device.createBuffer({ - size: 48, - usage: GPUBufferUsage.UNIFORM | GPUBufferUsage.COPY_DST - }); - this.#gpuBuffer = this.#device.createBuffer({ - size: 16, - usage: GPUBufferUsage.STORAGE | GPUBufferUsage.COPY_DST | GPUBufferUsage.COPY_SRC - }); - this.#cpuBuffer = this.#device.createBuffer({ - size: 16, - usage: GPUBufferUsage.COPY_DST | GPUBufferUsage.MAP_READ - }); - this.#bindGroupLayout = this.#device.createBindGroupLayout({ - entries: [ - { - binding: 0, - visibility: GPUShaderStage.COMPUTE, - buffer: { - type: "uniform" - } - }, - { - binding: 1, - visibility: GPUShaderStage.COMPUTE, - buffer: { - type: "storage" - } - } - ] - }); - this.#pipeline = this.#device.createComputePipeline({ - layout: this.#device.createPipelineLayout({ - bindGroupLayouts: [this.#bindGroupLayout] - }), - compute: { - entryPoint: "main", - module: this.#device.createShaderModule({ - code: NanoPowGpuComputeShader - }) - } - }); + const device = await adapter.requestDevice(); + if (!(device instanceof GPUDevice)) { + throw new Error("WebGPU device failed to load."); + } + device.lost.then((loss) => { + console.dir(loss); + console.warn(`Device lost. Reinitializing...`); + this.#cpuBuffer?.destroy(); + this.#gpuBuffer?.destroy(); + this.#uboBuffer?.destroy(); + this.init(); }); - }).catch((err) => { - throw new Error(err.message); + this.#device = device; + this.setup(); + } catch (err) { + throw new Error(`WebGPU initialization failed. ${err}`); + } finally { + this.#busy = false; + } + } + static setup() { + if (this.#device == null) throw new Error(`WebGPU device failed to load.`); + this.#uboBuffer = this.#device.createBuffer({ + size: 48, + usage: GPUBufferUsage.UNIFORM | GPUBufferUsage.COPY_DST + }); + this.#gpuBuffer = this.#device.createBuffer({ + size: 16, + usage: GPUBufferUsage.STORAGE | GPUBufferUsage.COPY_DST | GPUBufferUsage.COPY_SRC + }); + this.#cpuBuffer = this.#device.createBuffer({ + size: 16, + usage: GPUBufferUsage.COPY_DST | GPUBufferUsage.MAP_READ + }); + this.#bindGroupLayout = this.#device.createBindGroupLayout({ + entries: [ + { + binding: 0, + visibility: GPUShaderStage.COMPUTE, + buffer: { + type: "uniform" + } + }, + { + binding: 1, + visibility: GPUShaderStage.COMPUTE, + buffer: { + type: "storage" + } + } + ] + }); + this.#pipeline = this.#device.createComputePipeline({ + layout: this.#device.createPipelineLayout({ + bindGroupLayouts: [this.#bindGroupLayout] + }), + compute: { + entryPoint: "main", + module: this.#device.createShaderModule({ + code: NanoPowGpuComputeShader + }) + } }); } /** @@ -4869,71 +12068,83 @@ var init_gpu = __esm({ * @param {number} [threshold=0xfffffff8] - Difficulty of proof-of-work calculation */ static async search(hash2, threshold = 4294967288) { + if (this.#busy) { + return new Promise((resolve) => { + setTimeout(async () => { + const result = this.search(hash2, threshold); + resolve(result); + }, 100); + }); + } + this.#busy = true; if (!/^[A-Fa-f0-9]{64}$/.test(hash2)) throw new TypeError(`Invalid hash ${hash2}`); if (typeof threshold !== "number") throw new TypeError(`Invalid threshold ${threshold}`); - while (this.#device == null && performance.now() < 8e3) { + let loads = 0; + while (this.#device == null && loads < 20) { await new Promise((resolve) => { setTimeout(resolve, 500); }); } if (this.#device == null) throw new Error(`WebGPU device failed to load.`); - const uboView = new DataView(new ArrayBuffer(48)); - for (let i = 0; i < 64; i += 8) { - const uint32 = hash2.slice(i, i + 8); - uboView.setUint32(i / 2, parseInt(uint32, 16)); - } - const random = Math.floor(Math.random() * 4294967295); - uboView.setUint32(32, random, true); - uboView.setUint32(36, threshold, true); - this.#device.queue.writeBuffer(this.#uboBuffer, 0, uboView); - this.#device.queue.writeBuffer(this.#gpuBuffer, 8, new Uint32Array([0])); - const bindGroup = this.#device.createBindGroup({ - layout: this.#bindGroupLayout, - entries: [ - { - binding: 0, - resource: { - buffer: this.#uboBuffer - } - }, - { - binding: 1, - resource: { - buffer: this.#gpuBuffer - } - } - ] - }); - const commandEncoder = this.#device.createCommandEncoder(); - const passEncoder = commandEncoder.beginComputePass(); - passEncoder.setPipeline(this.#pipeline); - passEncoder.setBindGroup(0, bindGroup); - passEncoder.dispatchWorkgroups(256, 256, 256); - passEncoder.end(); - commandEncoder.copyBufferToBuffer( - this.#gpuBuffer, - 0, - this.#cpuBuffer, - 0, - 12 - ); - this.#device.queue.submit([commandEncoder.finish()]); - await this.#cpuBuffer.mapAsync(GPUMapMode.READ); - await this.#device.queue.onSubmittedWorkDone(); + let nonce = 0n; + let found = false; try { - const data = new DataView(this.#cpuBuffer.getMappedRange()); - const nonce = data.getBigUint64(0, true); - const found = !!data.getUint32(8); - this.#cpuBuffer.unmap(); - if (found) { - const hex2 = nonce.toString(16).padStart(16, "0"); - return hex2; - } else { - return await this.search(hash2, threshold); - } + do { + const uboView = new DataView(new ArrayBuffer(48)); + for (let i = 0; i < 64; i += 8) { + const uint32 = hash2.slice(i, i + 8); + uboView.setUint32(i / 2, parseInt(uint32, 16)); + } + const random = Math.floor(Math.random() * 4294967295); + uboView.setUint32(32, random, true); + uboView.setUint32(36, threshold, true); + this.#device.queue.writeBuffer(this.#uboBuffer, 0, uboView); + this.#device.queue.writeBuffer(this.#gpuBuffer, 8, new Uint32Array([0])); + const bindGroup = this.#device.createBindGroup({ + layout: this.#bindGroupLayout, + entries: [ + { + binding: 0, + resource: { + buffer: this.#uboBuffer + } + }, + { + binding: 1, + resource: { + buffer: this.#gpuBuffer + } + } + ] + }); + const commandEncoder = this.#device.createCommandEncoder(); + const passEncoder = commandEncoder.beginComputePass(); + passEncoder.setPipeline(this.#pipeline); + passEncoder.setBindGroup(0, bindGroup); + passEncoder.dispatchWorkgroups(256, 256, 256); + passEncoder.end(); + commandEncoder.copyBufferToBuffer( + this.#gpuBuffer, + 0, + this.#cpuBuffer, + 0, + 12 + ); + this.#device.queue.submit([commandEncoder.finish()]); + await this.#cpuBuffer.mapAsync(GPUMapMode.READ); + await this.#device.queue.onSubmittedWorkDone(); + const dataBuffer = this.#cpuBuffer.getMappedRange().slice(0); + this.#cpuBuffer.unmap(); + if (dataBuffer == null) throw new Error(`Failed to get data from buffer.`); + const dataView = new DataView(dataBuffer); + nonce = dataView.getBigUint64(0, true); + found = !!dataView.getUint32(8); + } while (!found); } catch (err) { - console.warn(`Error getting data from GPU, retrying. ${err}`); - return await this.search(hash2, threshold); + console.warn(`Error getting data from GPU. ${err}`); + } finally { + this.#busy = false; + return nonce.toString(16).padStart(16, "0"); } } }; diff --git a/index.html b/index.html index c8ffa10..32253b5 100644 --- a/index.html +++ b/index.html @@ -19,11 +19,15 @@ ) for (let i = 0; i < 0x10; i++) { const start = performance.now() - await block.pow() + try { + await block.pow() + } catch (err) { + works.innerHTML += `
${JSON.stringify(err)}

` + } const end = performance.now() times.push(end - start) works.innerHTML += `${block.work} (${end - start} ms)
` - console.log(block.work) + console.log(`${block.work} (${end - start} ms)`) } let sum = 0, reciprocals = 0, logarithms = 0, count = times.length, min = 0xffff, max = 0 for (let i = 0; i < count; i++) {