52{
53 unsigned int index, lastIndex;
55 uint32_t wordRem, wordShiftedRem, wordProd;
57
60 dwordProd = (
uint64_t) bPtr[index] * q;
61 wordRem = remPtr[index];
62 wordShiftedRem = wordRem<<dist;
63 wordProd = dwordProd;
64 zPtr[index] = wordShiftedRem - wordProd;
65 if ( index != lastIndex ) {
66 uNegDist = -dist;
67 borrow = (wordShiftedRem < wordProd);
68 for (;;) {
69 wordShiftedRem = wordRem>>(uNegDist & 31);
71 dwordProd = (
uint64_t) bPtr[index] * q + (dwordProd>>32);
72 wordRem = remPtr[index];
73 wordShiftedRem |= wordRem<<dist;
74 wordProd = dwordProd;
75 zPtr[index] = wordShiftedRem - wordProd - borrow;
76 if ( index == lastIndex ) break;
77 borrow =
78 borrow ? (wordShiftedRem <= wordProd)
79 : (wordShiftedRem < wordProd);
80 }
81 }
82
83}
#define indexWordLo(total)
#define indexWordHi(total)
unsigned __int64 uint64_t