From: Chris Duncan Date: Wed, 8 Jan 2025 23:25:49 +0000 (-0800) Subject: Lay out inlining to all remaining rounds. New code is still commented out, so origina... X-Git-Url: https://zoso.dev/?a=commitdiff_plain;h=a2201d155467d850a8d336ae48c38d81b5c44d59;p=libnemo.git Lay out inlining to all remaining rounds. New code is still commented out, so original G function calls still function as before. --- diff --git a/src/lib/nano-pow/shaders/gpu-compute.ts b/src/lib/nano-pow/shaders/gpu-compute.ts index 8537d78..e0e507e 100644 --- a/src/lib/nano-pow/shaders/gpu-compute.ts +++ b/src/lib/nano-pow/shaders/gpu-compute.ts @@ -916,163 +916,7344 @@ 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); + // // 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); + + + + + + /**************************************************************************** + * ROUND(2) * + ****************************************************************************/ + + 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(2) * - ****************************************************************************/ - 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) * + * ROUND(11) * ****************************************************************************/ 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; - /**************************************************************************** - * ROUND(4) * - ****************************************************************************/ + // // 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, 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); - /**************************************************************************** - * ROUND(5) * - ****************************************************************************/ - 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); + 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; - /**************************************************************************** - * ROUND(6) * - ****************************************************************************/ + // // 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, 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); - /**************************************************************************** - * ROUND(7) * - ****************************************************************************/ - 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); + 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; - /**************************************************************************** - * ROUND(8) * - ****************************************************************************/ + // // 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, 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); - /**************************************************************************** - * ROUND(9) * - ****************************************************************************/ - 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); + 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; - /**************************************************************************** - * ROUND(10) * - ****************************************************************************/ + // // 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, 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); - /**************************************************************************** - * 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); + // // 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);