| 167 | // divide each signed 8-bit element by divisor (round towards zero) |
| 168 | NPY_FINLINE npyv_s16 npyv_divc_s16(npyv_s16 a, const npyv_s16x3 divisor); |
| 169 | NPY_FINLINE npyv_s8 npyv_divc_s8(npyv_s8 a, const npyv_s8x3 divisor) |
| 170 | { |
| 171 | __m512i divc_even = npyv_divc_s16(npyv_shri_s16(npyv_shli_s16(a, 8), 8), divisor); |
| 172 | __m512i divc_odd = npyv_divc_s16(npyv_shri_s16(a, 8), divisor); |
| 173 | divc_odd = npyv_shli_s16(divc_odd, 8); |
| 174 | #ifdef NPY_HAVE_AVX512BW |
| 175 | return _mm512_mask_mov_epi8(divc_even, 0xAAAAAAAAAAAAAAAA, divc_odd); |
| 176 | #else |
| 177 | const __m512i bmask = _mm512_set1_epi32(0x00FF00FF); |
| 178 | return npyv_select_u8(bmask, divc_even, divc_odd); |
| 179 | #endif |
| 180 | } |
| 181 | // divide each unsigned 16-bit element by divisor |
| 182 | NPY_FINLINE npyv_u16 npyv_divc_u16(npyv_u16 a, const npyv_u16x3 divisor) |
| 183 | { |
nothing calls this directly
no test coverage detected