Lines Matching +full:4 +full:v
72 * __qdivrem(u, v, rem) returns u/v and, optionally, sets *rem to u%v.
76 * divisor are 4 `digits' in this base (they are shorter if they have
83 digit *u, *v, *q; in __qdivrem() local
90 * Take care of special cases: divide by zero, and u < v. in __qdivrem()
107 v = &vspace[0]; in __qdivrem()
115 * v = (v[1]v[2]...v[n]) sub B in __qdivrem()
116 * v[1] != 0 in __qdivrem()
117 * 1 < n <= 4 (if n = 1, we use a different division algorithm) in __qdivrem()
118 * m >= 0 (otherwise u < v, which we already checked) in __qdivrem()
119 * m + n = 4 in __qdivrem()
121 * m = 4 - n <= 2 in __qdivrem()
128 u[4] = LHALF(tmp.ul[L]); in __qdivrem()
130 v[1] = HHALF(tmp.ul[H]); in __qdivrem()
131 v[2] = LHALF(tmp.ul[H]); in __qdivrem()
132 v[3] = HHALF(tmp.ul[L]); in __qdivrem()
133 v[4] = LHALF(tmp.ul[L]); in __qdivrem()
134 for (n = 4; v[1] == 0; v++) { in __qdivrem()
142 * for j = 1..4: in __qdivrem()
143 * q[j] = floor((r*B + u[j]) / v), in __qdivrem()
144 * r = (r*B + u[j]) % v; in __qdivrem()
147 t = v[2]; /* nonzero, by definition */ in __qdivrem()
153 rbj = COMBINE(rbj % t, u[4]); in __qdivrem()
168 for (m = 4 - n; u[1] == 0; u++) in __qdivrem()
170 for (i = 4 - m; --i >= 0;) in __qdivrem()
172 q += 4 - m; in __qdivrem()
178 * D1: choose multiplier 1 << d to ensure v[1] >= B/2. in __qdivrem()
181 for (t = v[1]; t < B / 2; t <<= 1) in __qdivrem()
185 __shl(&v[1], n - 1, d); /* v <<= d */ in __qdivrem()
191 v1 = v[1]; /* for D3 -- note that v[1..n] are constant */ in __qdivrem()
192 v2 = v[2]; /* for D3 */ in __qdivrem()
198 * Let qhat = min((u[j]*B + u[j+1])/v[1], B-1), and in __qdivrem()
199 * let rhat = (u[j]*B + u[j+1]) mod v[1]. in __qdivrem()
200 * While rhat < B and v[2]*qhat > rhat*B+u[j+2], in __qdivrem()
202 * Note that if rhat >= B, v[2]*qhat < rhat*B. in __qdivrem()
225 * We split this up so that we do not require v[0] = 0, in __qdivrem()
229 t = u[i + j] - v[i] * qhat - t; in __qdivrem()
239 * Fix it by adding v[1..n] to u[j..j+n]. in __qdivrem()
244 t += u[i + j] + v[i]; in __qdivrem()
266 tmp.ul[L] = COMBINE(uspace[3], uspace[4]); in __qdivrem()
271 tmp.ul[L] = COMBINE(qspace[3], qspace[4]); in __qdivrem()