divide each unsigned 64-bit element by a precomputed divisor
| 220 | } |
| 221 | // divide each unsigned 64-bit element by a precomputed divisor |
| 222 | NPY_FINLINE npyv_u64 npyv_divc_u64(npyv_u64 a, const npyv_u64x3 divisor) |
| 223 | { |
| 224 | // high part of unsigned multiplication |
| 225 | __m128i mulhi = npyv__mullhi_u64(a, divisor.val[0]); |
| 226 | // floor(a/d) = (mulhi + ((a-mulhi) >> sh1)) >> sh2 |
| 227 | __m128i q = _mm_sub_epi64(a, mulhi); |
| 228 | q = _mm_srl_epi64(q, divisor.val[1]); |
| 229 | q = _mm_add_epi64(mulhi, q); |
| 230 | q = _mm_srl_epi64(q, divisor.val[2]); |
| 231 | return q; |
| 232 | } |
| 233 | // divide each signed 64-bit element by a precomputed divisor (round towards zero) |
| 234 | NPY_FINLINE npyv_s64 npyv_divc_s64(npyv_s64 a, const npyv_s64x3 divisor) |
| 235 | { |
nothing calls this directly
no test coverage detected