Simplify 128<->64 bit casts

This commit is contained in:
Frank Denis
2020-08-02 19:59:22 +02:00
parent d83adfdf5c
commit 1f5f71b015
@@ -273,80 +273,57 @@ static void
fe25519_mul(fe25519 h, const fe25519 f, const fe25519 g)
{
const uint64_t mask = 0x7ffffffffffffULL;
uint128_t r0, r1, r2, r3, r4, carry;
uint64_t f0, f1, f2, f3, f4;
uint64_t f1_19, f2_19, f3_19, f4_19;
uint64_t g0, g1, g2, g3, g4;
uint128_t r0, r1, r2, r3, r4;
uint128_t f0, f1, f2, f3, f4;
uint128_t f1_19, f2_19, f3_19, f4_19;
uint128_t g0, g1, g2, g3, g4;
uint64_t r00, r01, r02, r03, r04;
uint64_t carry;
f0 = f[0];
f1 = f[1];
f2 = f[2];
f3 = f[3];
f4 = f[4];
f0 = (uint128_t) f[0];
f1 = (uint128_t) f[1];
f2 = (uint128_t) f[2];
f3 = (uint128_t) f[3];
f4 = (uint128_t) f[4];
g0 = g[0];
g1 = g[1];
g2 = g[2];
g3 = g[3];
g4 = g[4];
g0 = (uint128_t) g[0];
g1 = (uint128_t) g[1];
g2 = (uint128_t) g[2];
g3 = (uint128_t) g[3];
g4 = (uint128_t) g[4];
f1_19 = 19ULL * f1;
f2_19 = 19ULL * f2;
f3_19 = 19ULL * f3;
f4_19 = 19ULL * f4;
r0 = ((uint128_t) f0 ) * ((uint128_t) g0);
r0 += ((uint128_t) f1_19) * ((uint128_t) g4);
r0 += ((uint128_t) f2_19) * ((uint128_t) g3);
r0 += ((uint128_t) f3_19) * ((uint128_t) g2);
r0 += ((uint128_t) f4_19) * ((uint128_t) g1);
r1 = ((uint128_t) f0 ) * ((uint128_t) g1);
r1 += ((uint128_t) f1 ) * ((uint128_t) g0);
r1 += ((uint128_t) f2_19) * ((uint128_t) g4);
r1 += ((uint128_t) f3_19) * ((uint128_t) g3);
r1 += ((uint128_t) f4_19) * ((uint128_t) g2);
r2 = ((uint128_t) f0 ) * ((uint128_t) g2);
r2 += ((uint128_t) f1 ) * ((uint128_t) g1);
r2 += ((uint128_t) f2 ) * ((uint128_t) g0);
r2 += ((uint128_t) f3_19) * ((uint128_t) g4);
r2 += ((uint128_t) f4_19) * ((uint128_t) g3);
r3 = ((uint128_t) f0 ) * ((uint128_t) g3);
r3 += ((uint128_t) f1 ) * ((uint128_t) g2);
r3 += ((uint128_t) f2 ) * ((uint128_t) g1);
r3 += ((uint128_t) f3 ) * ((uint128_t) g0);
r3 += ((uint128_t) f4_19) * ((uint128_t) g4);
r4 = ((uint128_t) f0 ) * ((uint128_t) g4);
r4 += ((uint128_t) f1 ) * ((uint128_t) g3);
r4 += ((uint128_t) f2 ) * ((uint128_t) g2);
r4 += ((uint128_t) f3 ) * ((uint128_t) g1);
r4 += ((uint128_t) f4 ) * ((uint128_t) g0);
r0 = f0 * g0 + f1_19 * g4 + f2_19 * g3 + f3_19 * g2 + f4_19 * g1;
r1 = f0 * g1 + f1 * g0 + f2_19 * g4 + f3_19 * g3 + f4_19 * g2;
r2 = f0 * g2 + f1 * g1 + f2 * g0 + f3_19 * g4 + f4_19 * g3;
r3 = f0 * g3 + f1 * g2 + f2 * g1 + f3 * g0 + f4_19 * g4;
r4 = f0 * g4 + f1 * g3 + f2 * g2 + f3 * g1 + f4 * g0;
r00 = ((uint64_t) r0) & mask;
carry = r0 >> 51;
carry = (uint64_t) (r0 >> 51);
r1 += carry;
r01 = ((uint64_t) r1) & mask;
carry = r1 >> 51;
carry = (uint64_t) (r1 >> 51);
r2 += carry;
r02 = ((uint64_t) r2) & mask;
carry = r2 >> 51;
carry = (uint64_t) (r2 >> 51);
r3 += carry;
r03 = ((uint64_t) r3) & mask;
carry = r3 >> 51;
carry = (uint64_t) (r3 >> 51);
r4 += carry;
r04 = ((uint64_t) r4) & mask;
carry = r4 >> 51;
r00 += 19ULL * (uint64_t) carry;
carry = (uint64_t) (r4 >> 51);
r00 += 19ULL * carry;
carry = r00 >> 51;
r00 &= mask;
r01 += (uint64_t) carry;
r01 += carry;
carry = r01 >> 51;
r01 &= mask;
r02 += (uint64_t) carry;
r02 += carry;
h[0] = r00;
h[1] = r01;
@@ -364,16 +341,17 @@ static void
fe25519_sq(fe25519 h, const fe25519 f)
{
const uint64_t mask = 0x7ffffffffffffULL;
uint128_t r0, r1, r2, r3, r4, carry;
uint64_t f0, f1, f2, f3, f4;
uint64_t f0_2, f1_2, f1_38, f2_38, f3_38, f3_19, f4_19;
uint128_t r0, r1, r2, r3, r4;
uint128_t f0, f1, f2, f3, f4;
uint128_t f0_2, f1_2, f1_38, f2_38, f3_38, f3_19, f4_19;
uint64_t r00, r01, r02, r03, r04;
uint64_t carry;
f0 = f[0];
f1 = f[1];
f2 = f[2];
f3 = f[3];
f4 = f[4];
f0 = (uint128_t) f[0];
f1 = (uint128_t) f[1];
f2 = (uint128_t) f[2];
f3 = (uint128_t) f[3];
f4 = (uint128_t) f[4];
f0_2 = f0 << 1;
f1_2 = f1 << 1;
@@ -385,47 +363,33 @@ fe25519_sq(fe25519 h, const fe25519 f)
f3_19 = 19ULL * f3;
f4_19 = 19ULL * f4;
r0 = ((uint128_t) f0 ) * ((uint128_t) f0);
r0 += ((uint128_t) f1_38) * ((uint128_t) f4);
r0 += ((uint128_t) f2_38) * ((uint128_t) f3);
r1 = ((uint128_t) f0_2 ) * ((uint128_t) f1);
r1 += ((uint128_t) f2_38) * ((uint128_t) f4);
r1 += ((uint128_t) f3_19) * ((uint128_t) f3);
r2 = ((uint128_t) f0_2 ) * ((uint128_t) f2);
r2 += ((uint128_t) f1 ) * ((uint128_t) f1);
r2 += ((uint128_t) f3_38) * ((uint128_t) f4);
r3 = ((uint128_t) f0_2 ) * ((uint128_t) f3);
r3 += ((uint128_t) f1_2 ) * ((uint128_t) f2);
r3 += ((uint128_t) f4_19) * ((uint128_t) f4);
r4 = ((uint128_t) f0_2 ) * ((uint128_t) f4);
r4 += ((uint128_t) f1_2 ) * ((uint128_t) f3);
r4 += ((uint128_t) f2 ) * ((uint128_t) f2);
r0 = f0 * f0 + f1_38 * f4 + f2_38 * f3;
r1 = f0_2 * f1 + f2_38 * f4 + f3_19 * f3;
r2 = f0_2 * f2 + f1 * f1 + f3_38 * f4;
r3 = f0_2 * f3 + f1_2 * f2 + f4_19 * f4;
r4 = f0_2 * f4 + f1_2 * f3 + f2 * f2;
r00 = ((uint64_t) r0) & mask;
carry = r0 >> 51;
carry = (uint64_t) (r0 >> 51);
r1 += carry;
r01 = ((uint64_t) r1) & mask;
carry = r1 >> 51;
carry = (uint64_t) (r1 >> 51);
r2 += carry;
r02 = ((uint64_t) r2) & mask;
carry = r2 >> 51;
carry = (uint64_t) (r2 >> 51);
r3 += carry;
r03 = ((uint64_t) r3) & mask;
carry = r3 >> 51;
carry = (uint64_t) (r3 >> 51);
r4 += carry;
r04 = ((uint64_t) r4) & mask;
carry = r4 >> 51;
r00 += 19ULL * (uint64_t) carry;
carry = (uint64_t) (r4 >> 51);
r00 += 19ULL * carry;
carry = r00 >> 51;
r00 &= mask;
r01 += (uint64_t) carry;
r01 += carry;
carry = r01 >> 51;
r01 &= mask;
r02 += (uint64_t) carry;
r02 += carry;
h[0] = r00;
h[1] = r01;
@@ -443,16 +407,17 @@ static void
fe25519_sq2(fe25519 h, const fe25519 f)
{
const uint64_t mask = 0x7ffffffffffffULL;
uint128_t r0, r1, r2, r3, r4, carry;
uint64_t f0, f1, f2, f3, f4;
uint64_t f0_2, f1_2, f1_38, f2_38, f3_38, f3_19, f4_19;
uint128_t r0, r1, r2, r3, r4;
uint128_t f0, f1, f2, f3, f4;
uint128_t f0_2, f1_2, f1_38, f2_38, f3_38, f3_19, f4_19;
uint64_t r00, r01, r02, r03, r04;
uint64_t carry;
f0 = f[0];
f1 = f[1];
f2 = f[2];
f3 = f[3];
f4 = f[4];
f0 = (uint128_t) f[0];
f1 = (uint128_t) f[1];
f2 = (uint128_t) f[2];
f3 = (uint128_t) f[3];
f4 = (uint128_t) f[4];
f0_2 = f0 << 1;
f1_2 = f1 << 1;
@@ -464,25 +429,11 @@ fe25519_sq2(fe25519 h, const fe25519 f)
f3_19 = 19ULL * f3;
f4_19 = 19ULL * f4;
r0 = ((uint128_t) f0 ) * ((uint128_t) f0);
r0 += ((uint128_t) f1_38) * ((uint128_t) f4);
r0 += ((uint128_t) f2_38) * ((uint128_t) f3);
r1 = ((uint128_t) f0_2 ) * ((uint128_t) f1);
r1 += ((uint128_t) f2_38) * ((uint128_t) f4);
r1 += ((uint128_t) f3_19) * ((uint128_t) f3);
r2 = ((uint128_t) f0_2 ) * ((uint128_t) f2);
r2 += ((uint128_t) f1 ) * ((uint128_t) f1);
r2 += ((uint128_t) f3_38) * ((uint128_t) f4);
r3 = ((uint128_t) f0_2 ) * ((uint128_t) f3);
r3 += ((uint128_t) f1_2 ) * ((uint128_t) f2);
r3 += ((uint128_t) f4_19) * ((uint128_t) f4);
r4 = ((uint128_t) f0_2 ) * ((uint128_t) f4);
r4 += ((uint128_t) f1_2 ) * ((uint128_t) f3);
r4 += ((uint128_t) f2 ) * ((uint128_t) f2);
r0 = f0 * f0 + f1_38 * f4 + f2_38 * f3;
r1 = f0_2 * f1 + f2_38 * f4 + f3_19 * f3;
r2 = f0_2 * f2 + f1 * f1 + f3_38 * f4;
r3 = f0_2 * f3 + f1_2 * f2 + f4_19 * f4;
r4 = f0_2 * f4 + f1_2 * f3 + f2 * f2;
r0 <<= 1;
r1 <<= 1;
@@ -491,26 +442,26 @@ fe25519_sq2(fe25519 h, const fe25519 f)
r4 <<= 1;
r00 = ((uint64_t) r0) & mask;
carry = r0 >> 51;
carry = (uint64_t) (r0 >> 51);
r1 += carry;
r01 = ((uint64_t) r1) & mask;
carry = r1 >> 51;
carry = (uint64_t) (r1 >> 51);
r2 += carry;
r02 = ((uint64_t) r2) & mask;
carry = r2 >> 51;
carry = (uint64_t) (r2 >> 51);
r3 += carry;
r03 = ((uint64_t) r3) & mask;
carry = r3 >> 51;
carry = (uint64_t) (r3 >> 51);
r4 += carry;
r04 = ((uint64_t) r4) & mask;
carry = r4 >> 51;
r00 += 19ULL * (uint64_t) carry;
carry = (uint64_t) (r4 >> 51);
r00 += 19ULL * carry;
carry = r00 >> 51;
r00 &= mask;
r01 += (uint64_t) carry;
r01 += carry;
carry = r01 >> 51;
r01 &= mask;
r02 += (uint64_t) carry;
r02 += carry;
h[0] = r00;
h[1] = r01;