56 const size_t MP_HWORD_BITS = BOTAN_MP_WORD_BITS / 2;
57 const word MP_HWORD_MASK = ((word)1 << MP_HWORD_BITS) - 1;
59 const word a_hi = (a >> MP_HWORD_BITS);
60 const word a_lo = (a & MP_HWORD_MASK);
61 const word b_hi = (b >> MP_HWORD_BITS);
62 const word b_lo = (b & MP_HWORD_MASK);
64 word x0 = a_hi * b_hi;
65 word x1 = a_lo * b_hi;
66 word x2 = a_hi * b_lo;
67 word x3 = a_lo * b_lo;
69 x2 += x3 >> (MP_HWORD_BITS);
73 x0 += ((word)1 << MP_HWORD_BITS);
75 *z0 = x0 + (x2 >> MP_HWORD_BITS);
76 *z1 = ((x2 & MP_HWORD_MASK) << MP_HWORD_BITS) + (x3 & MP_HWORD_MASK);