| 1309 | ////////// UINT64 |
| 1310 | |
| 1311 | __m512i libdivide_u64_do_vector(__m512i numers, const struct libdivide_u64_t *denom) { |
| 1312 | uint8_t more = denom->more; |
| 1313 | if (!denom->magic) { |
| 1314 | return _mm512_srli_epi64(numers, more); |
| 1315 | } |
| 1316 | else { |
| 1317 | __m512i q = libdivide_mullhi_u64_vector(numers, _mm512_set1_epi64(denom->magic)); |
| 1318 | if (more & LIBDIVIDE_ADD_MARKER) { |
| 1319 | // uint32_t t = ((numer - q) >> 1) + q; |
| 1320 | // return t >> denom->shift; |
| 1321 | uint32_t shift = more & LIBDIVIDE_64_SHIFT_MASK; |
| 1322 | __m512i t = _mm512_add_epi64(_mm512_srli_epi64(_mm512_sub_epi64(numers, q), 1), q); |
| 1323 | return _mm512_srli_epi64(t, shift); |
| 1324 | } |
| 1325 | else { |
| 1326 | return _mm512_srli_epi64(q, more); |
| 1327 | } |
| 1328 | } |
| 1329 | } |
| 1330 | |
| 1331 | __m512i libdivide_u64_branchfree_do_vector(__m512i numers, const struct libdivide_u64_branchfree_t *denom) { |
| 1332 | __m512i q = libdivide_mullhi_u64_vector(numers, _mm512_set1_epi64(denom->magic)); |
nothing calls this directly
no test coverage detected