use 64-bit for mul

This commit is contained in:
NIIBE Yutaka
2014-03-20 15:51:55 +09:00
parent 7d8696946a
commit 25e71cb29b

View File

@@ -158,40 +158,31 @@ mod25638_mul (bn256 *X, const bn256 *A, const bn256 *B)
s = &word[8]; d = &word[0]; w = 38;
{
int i;
uint32_t r0, r1;
uint64_t r;
uint32_t r0;
uint32_t carry;
r0 = r1 = 0;
r = 0;
for (i = 0; i < BN256_WORDS; i++)
{
uint64_t uv;
uint32_t u, v;
uint32_t carry;
r0 += d[i];
r1 += (r0 < d[i]);
carry = (r1 < (r0 < d[i]));
r += d[i];
carry = (r < d[i]);
uv = ((uint64_t)s[i])*w;
v = uv;
u = (uv >> 32);
r0 += v;
r1 += (r0 < v);
carry += (r1 < (r0 < v));
r1 += u;
carry += (r1 < u);
r += uv;
carry += (r < uv);
d[i] = r0;
r0 = r1;
r1 = carry;
d[i] = (uint32_t)r;
r = ((r >> 32) | ((uint64_t)carry << 32));
}
d[i] = r0;
d[i] = (uint32_t)r;
r0 = word[8] * 38;
d = word;
for (i = 0; i < BN256_WORDS; i++)
{
uint32_t carry;
r0 += d[i];
carry = (r0 < d[i]);
d[i] = r0;