| 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)); |
nothing calls this directly
no test coverage detected