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

Function libdivide_u32_do_vector

numpy/core/include/numpy/libdivide/libdivide.h:1283–1301  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1281////////// UINT32
1282
1283__m512i libdivide_u32_do_vector(__m512i numers, const struct libdivide_u32_t *denom) {
1284 uint8_t more = denom->more;
1285 if (!denom->magic) {
1286 return _mm512_srli_epi32(numers, more);
1287 }
1288 else {
1289 __m512i q = libdivide_mullhi_u32_vector(numers, _mm512_set1_epi32(denom->magic));
1290 if (more & LIBDIVIDE_ADD_MARKER) {
1291 // uint32_t t = ((numer - q) >> 1) + q;
1292 // return t >> denom->shift;
1293 uint32_t shift = more & LIBDIVIDE_32_SHIFT_MASK;
1294 __m512i t = _mm512_add_epi32(_mm512_srli_epi32(_mm512_sub_epi32(numers, q), 1), q);
1295 return _mm512_srli_epi32(t, shift);
1296 }
1297 else {
1298 return _mm512_srli_epi32(q, more);
1299 }
1300 }
1301}
1302
1303__m512i libdivide_u32_branchfree_do_vector(__m512i numers, const struct libdivide_u32_branchfree_t *denom) {
1304 __m512i q = libdivide_mullhi_u32_vector(numers, _mm512_set1_epi32(denom->magic));

Callers

nothing calls this directly

Calls 1

Tested by

no test coverage detected