MCPcopy Create free account
hub / github.com/numpy/numpy / libdivide_u64_do_vector

Function libdivide_u64_do_vector

numpy/core/include/numpy/libdivide/libdivide.h:1311–1329  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

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));

Callers

nothing calls this directly

Calls 1

Tested by

no test coverage detected