29 if (!input || !output) {
35 const __m256i zero = _mm256_setzero_si256();
36 for (; i + 16 <= n; i += 16) {
37 const __m256i x = _mm256_loadu_si256((
const __m256i *)(input + i));
38 const __m256i
mask = _mm256_cmpgt_epi16(x, zero);
39 const __m256i y = _mm256_and_si256(x,
mask);
40 _mm256_storeu_si256((__m256i *)(output + i), y);
44 output[i] = (input[i] & 0x8000u) ? 0u : input[i];
56 const __m256i zero = _mm256_setzero_si256();
57 for (; i + 16 <= n; i += 16) {
58 const __m256i x = _mm256_loadu_si256((
const __m256i *)(data + i));
59 const __m256i
mask = _mm256_cmpgt_epi16(x, zero);
60 const __m256i y = _mm256_and_si256(x,
mask);
61 _mm256_storeu_si256((__m256i *)(data + i), y);
65 data[i] = (data[i] & 0x8000u) ? 0u : data[i];
70 const uint16_t *d_output,
74 if (!input || !d_output || !d_input) {
80 const __m256i zero = _mm256_setzero_si256();
81 for (; i + 16 <= n; i += 16) {
82 const __m256i x = _mm256_loadu_si256((
const __m256i *)(input + i));
83 const __m256i dy = _mm256_loadu_si256((
const __m256i *)(d_output + i));
84 const __m256i
mask = _mm256_cmpgt_epi16(x, zero);
85 const __m256i dx = _mm256_and_si256(dy,
mask);
86 _mm256_storeu_si256((__m256i *)(d_input + i), dx);
90 d_input[i] = ((input[i] & 0x8000u) == 0u && (input[i] & 0x7fffu) != 0u) ? d_output[i] : 0u;