.. | .. |
---|
28 | 28 | |
---|
29 | 29 | /** |
---|
30 | 30 | * do_div - returns 2 values: calculate remainder and update new dividend |
---|
31 | | - * @n: pointer to uint64_t dividend (will be updated) |
---|
| 31 | + * @n: uint64_t dividend (will be updated) |
---|
32 | 32 | * @base: uint32_t divisor |
---|
33 | 33 | * |
---|
34 | 34 | * Summary: |
---|
35 | | - * ``uint32_t remainder = *n % base;`` |
---|
36 | | - * ``*n = *n / base;`` |
---|
| 35 | + * ``uint32_t remainder = n % base;`` |
---|
| 36 | + * ``n = n / base;`` |
---|
37 | 37 | * |
---|
38 | 38 | * Return: (uint32_t)remainder |
---|
39 | 39 | * |
---|
.. | .. |
---|
178 | 178 | uint32_t m_hi = m >> 32; |
---|
179 | 179 | uint32_t n_lo = n; |
---|
180 | 180 | uint32_t n_hi = n >> 32; |
---|
181 | | - uint64_t res, tmp; |
---|
| 181 | + uint64_t res; |
---|
| 182 | + uint32_t res_lo, res_hi, tmp; |
---|
182 | 183 | |
---|
183 | 184 | if (!bias) { |
---|
184 | 185 | res = ((uint64_t)m_lo * n_lo) >> 32; |
---|
.. | .. |
---|
187 | 188 | res = (m + (uint64_t)m_lo * n_lo) >> 32; |
---|
188 | 189 | } else { |
---|
189 | 190 | res = m + (uint64_t)m_lo * n_lo; |
---|
190 | | - tmp = (res < m) ? (1ULL << 32) : 0; |
---|
191 | | - res = (res >> 32) + tmp; |
---|
| 191 | + res_lo = res >> 32; |
---|
| 192 | + res_hi = (res_lo < m_hi); |
---|
| 193 | + res = res_lo | ((uint64_t)res_hi << 32); |
---|
192 | 194 | } |
---|
193 | 195 | |
---|
194 | 196 | if (!(m & ((1ULL << 63) | (1ULL << 31)))) { |
---|
.. | .. |
---|
197 | 199 | res += (uint64_t)m_hi * n_lo; |
---|
198 | 200 | res >>= 32; |
---|
199 | 201 | } else { |
---|
200 | | - tmp = res += (uint64_t)m_lo * n_hi; |
---|
| 202 | + res += (uint64_t)m_lo * n_hi; |
---|
| 203 | + tmp = res >> 32; |
---|
201 | 204 | res += (uint64_t)m_hi * n_lo; |
---|
202 | | - tmp = (res < tmp) ? (1ULL << 32) : 0; |
---|
203 | | - res = (res >> 32) + tmp; |
---|
| 205 | + res_lo = res >> 32; |
---|
| 206 | + res_hi = (res_lo < tmp); |
---|
| 207 | + res = res_lo | ((uint64_t)res_hi << 32); |
---|
204 | 208 | } |
---|
205 | 209 | |
---|
206 | 210 | res += (uint64_t)m_hi * n_hi; |
---|