Lines Matching refs:lo
103 dw_reduce(mpd_uint_t hi, mpd_uint_t lo, mpd_uint_t m)
108 _mpd_div_words(&w, &r2, r1, lo, m);
119 dw_submod(mpd_uint_t a, mpd_uint_t hi, mpd_uint_t lo, mpd_uint_t m)
123 r = dw_reduce(hi, lo, m);
142 * a) hi, lo <- a * b # Calculate a * b.
144 * b) hi, lo <- R(hi, lo) # Reduce modulo p.
146 * c) Repeat step b) until 0 <= hi * 2**64 + lo < 2*p.
148 * d) If the result is less than p, return lo. Otherwise return lo - p.
154 mpd_uint_t hi, lo, x, y;
157 _mpd_mul_words(&hi, &lo, a, b);
165 x = lo - x;
166 if (x > lo) hi--;
169 lo = y + x;
170 if (lo < y) hi++;
176 x = lo - x;
177 if (x > lo) hi--;
180 lo = y + x;
181 if (lo < y) hi++;
183 return (hi || lo >= m ? lo - m : lo);
191 x = lo - x;
192 if (x > lo) hi--;
195 lo = y + x;
196 if (lo < y) hi++;
202 x = lo - x;
203 if (x > lo) hi--;
206 lo = y + x;
207 if (lo < y) hi++;
213 x = lo - x;
214 if (x > lo) hi--;
217 lo = y + x;
218 if (lo < y) hi++;
220 return (hi || lo >= m ? lo - m : lo);
228 x = lo - x;
229 if (x > lo) hi--;
232 lo = y + x;
233 if (lo < y) hi++;
239 x = lo - x;
240 if (x > lo) hi--;
243 lo = y + x;
244 if (lo < y) hi++;
250 x = lo - x;
251 if (x > lo) hi--;
254 lo = y + x;
255 if (lo < y) hi++;
257 return (hi || lo >= m ? lo - m : lo);
328 mpd_uint_t hi, lo, q, r;
329 _mpd_mul_words(&hi, &lo, a, b);
330 _mpd_div_words(&q, &r, hi, lo, m);