Lines Matching full:divisor

95 uint64_t divu128(uint64_t *plow, uint64_t *phigh, uint64_t divisor)  in divu128()  argument
102 if (divisor == 0 || dhi == 0) { in divu128()
103 *plow = dlo / divisor; in divu128()
105 return dlo % divisor; in divu128()
107 sh = clz64(divisor); in divu128()
109 if (dhi < divisor) { in divu128()
111 /* normalize the divisor, shifting the dividend accordingly */ in divu128()
112 divisor <<= sh; in divu128()
118 *plow = udiv_qrnnd(&rem, dhi, dlo, divisor); in divu128()
121 /* normalize the divisor, shifting the dividend accordingly */ in divu128()
122 divisor <<= sh; in divu128()
127 *phigh = udiv_qrnnd(&dhi, dhighest, dhi, divisor); in divu128()
130 * dhi >= divisor in divu128()
131 * Since the MSB of divisor is set (sh == 0), in divu128()
132 * (dhi - divisor) < divisor in divu128()
136 * after subtracting divisor from dhi in divu128()
138 dhi -= divisor; in divu128()
142 *plow = udiv_qrnnd(&rem, dhi, dlo, divisor); in divu128()
146 * since the dividend/divisor might have been normalized, in divu128()
158 int64_t divs128(uint64_t *plow, int64_t *phigh, int64_t divisor) in divs128() argument
176 if (divisor < 0) { in divs128()
179 divisor = -divisor; in divs128()
182 rem = divu128(&unsig_lo, &unsig_hi, (uint64_t)divisor); in divs128()
274 * Needs a normalized divisor (most significant bit set to 1).
338 Int128 divu256(Int128 *plow, Int128 *phigh, Int128 divisor) in divu256() argument
345 if (!int128_nz(divisor) || !int128_nz(dhi)) { in divu256()
346 *plow = int128_divu(dlo, divisor); in divu256()
348 return int128_remu(dlo, divisor); in divu256()
350 sh = clz128(divisor); in divu256()
352 if (int128_ult(dhi, divisor)) { in divu256()
354 /* normalize the divisor, shifting the dividend accordingly */ in divu256()
355 divisor = int128_lshift(divisor, sh); in divu256()
362 *plow = udiv256_qrnnd(&rem, dhi, dlo, divisor); in divu256()
365 /* normalize the divisor, shifting the dividend accordingly */ in divu256()
366 divisor = int128_lshift(divisor, sh); in divu256()
372 *phigh = udiv256_qrnnd(&dhi, dhighest, dhi, divisor); in divu256()
375 * dhi >= divisor in divu256()
376 * Since the MSB of divisor is set (sh == 0), in divu256()
377 * (dhi - divisor) < divisor in divu256()
381 * after subtracting divisor from dhi in divu256()
383 dhi = int128_sub(dhi, divisor); in divu256()
387 *plow = udiv256_qrnnd(&rem, dhi, dlo, divisor); in divu256()
391 * since the dividend/divisor might have been normalized, in divu256()
404 Int128 divs256(Int128 *plow, Int128 *phigh, Int128 divisor) in divs256() argument
422 if (!int128_nonneg(divisor)) { in divs256()
425 divisor = int128_neg(divisor); in divs256()
428 rem = divu256(&unsig_lo, &unsig_hi, divisor); in divs256()