1 /* SPDX-License-Identifier: MIT
2 *
3 * Permission is hereby granted, free of charge, to any person
4 * obtaining a copy of this software and associated documentation
5 * files (the "Software"), to deal in the Software without
6 * restriction, including without limitation the rights to use, copy,
7 * modify, merge, publish, distribute, sublicense, and/or sell copies
8 * of the Software, and to permit persons to whom the Software is
9 * furnished to do so, subject to the following conditions:
10 *
11 * The above copyright notice and this permission notice shall be
12 * included in all copies or substantial portions of the Software.
13 *
14 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15 * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17 * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
18 * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
19 * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
20 * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 * SOFTWARE.
22 *
23 * Copyright:
24 * 2020 Evan Nemerson <evan@nemerson.com>
25 * 2020 Hidayat Khan <huk2209@gmail.com>
26 * 2020 Christopher Moore <moore@free.fr>
27 */
28
29 #if !defined(SIMDE_X86_AVX512_BROADCAST_H)
30 #define SIMDE_X86_AVX512_BROADCAST_H
31
32 #include "types.h"
33 #include "../avx2.h"
34
35 #include "mov.h"
36 #include "cast.h"
37 #include "set1.h"
38
39 HEDLEY_DIAGNOSTIC_PUSH
40 SIMDE_DISABLE_UNWANTED_DIAGNOSTICS
41 SIMDE_BEGIN_DECLS_
42
43 SIMDE_FUNCTION_ATTRIBUTES
44 simde__m256
simde_mm256_broadcast_f32x2(simde__m128 a)45 simde_mm256_broadcast_f32x2 (simde__m128 a) {
46 #if defined(SIMDE_X86_AVX512VL_NATIVE) && defined(SIMDE_X86_AVX512DQ_NATIVE)
47 return _mm256_broadcast_f32x2(a);
48 #else
49 simde__m256_private r_;
50 simde__m128_private a_ = simde__m128_to_private(a);
51
52 #if defined(SIMDE_VECTOR_SUBSCRIPT) && HEDLEY_HAS_BUILTIN(__builtin_shufflevector)
53 r_.f32 = __builtin_shufflevector(a_.f32, a_.f32, 0, 1, 0, 1, 0, 1, 0, 1);
54 #else
55 SIMDE_VECTORIZE
56 for (size_t i = 0 ; i < (sizeof(r_.f32) / sizeof(r_.f32[0])) ; i += 2) {
57 r_.f32[ i ] = a_.f32[0];
58 r_.f32[i + 1] = a_.f32[1];
59 }
60 #endif
61
62 return simde__m256_from_private(r_);
63 #endif
64 }
65 #if defined(SIMDE_X86_AVX512DQ_ENABLE_NATIVE_ALIASES)
66 #undef _mm256_broadcast_f32x2
67 #define _mm256_broadcast_f32x2(a) simde_mm256_broadcast_f32x2(a)
68 #endif
69
70 SIMDE_FUNCTION_ATTRIBUTES
71 simde__m256
simde_mm256_mask_broadcast_f32x2(simde__m256 src,simde__mmask8 k,simde__m128 a)72 simde_mm256_mask_broadcast_f32x2(simde__m256 src, simde__mmask8 k, simde__m128 a) {
73 #if defined(SIMDE_X86_AVX512VL_NATIVE) && defined(SIMDE_X86_AVX512DQ_NATIVE)
74 return _mm256_mask_broadcast_f32x2(src, k, a);
75 #else
76 return simde_mm256_mask_mov_ps(src, k, simde_mm256_broadcast_f32x2(a));
77 #endif
78 }
79 #if defined(SIMDE_X86_AVX512DQ_ENABLE_NATIVE_ALIASES)
80 #undef _mm256_mask_broadcast_f32x2
81 #define _mm256_mask_broadcast_f32x2(src, k, a) simde_mm256_mask_broadcast_f32x2(src, k, a)
82 #endif
83
84 SIMDE_FUNCTION_ATTRIBUTES
85 simde__m256
simde_mm256_maskz_broadcast_f32x2(simde__mmask8 k,simde__m128 a)86 simde_mm256_maskz_broadcast_f32x2(simde__mmask8 k, simde__m128 a) {
87 #if defined(SIMDE_X86_AVX512VL_NATIVE) && defined(SIMDE_X86_AVX512DQ_NATIVE)
88 return _mm256_maskz_broadcast_f32x2(k, a);
89 #else
90 return simde_mm256_maskz_mov_ps(k, simde_mm256_broadcast_f32x2(a));
91 #endif
92 }
93 #if defined(SIMDE_X86_AVX512DQ_ENABLE_NATIVE_ALIASES)
94 #undef _mm256_maskz_broadcast_f32x2
95 #define _mm256_maskz_broadcast_f32x2(k, a) simde_mm256_maskz_broadcast_f32x2(k, a)
96 #endif
97
98 SIMDE_FUNCTION_ATTRIBUTES
99 simde__m512
simde_mm512_broadcast_f32x2(simde__m128 a)100 simde_mm512_broadcast_f32x2 (simde__m128 a) {
101 #if defined(SIMDE_X86_AVX512DQ_NATIVE)
102 return _mm512_broadcast_f32x2(a);
103 #else
104 simde__m512_private r_;
105 simde__m128_private a_ = simde__m128_to_private(a);
106
107 #if defined(SIMDE_VECTOR_SUBSCRIPT) && HEDLEY_HAS_BUILTIN(__builtin_shufflevector)
108 r_.f32 = __builtin_shufflevector(a_.f32, a_.f32, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1);
109 #else
110 SIMDE_VECTORIZE
111 for (size_t i = 0 ; i < (sizeof(r_.f32) / sizeof(r_.f32[0])) ; i+=2) {
112 r_.f32[ i ] = a_.f32[0];
113 r_.f32[i + 1] = a_.f32[1];
114 }
115 #endif
116
117 return simde__m512_from_private(r_);
118 #endif
119 }
120 #if defined(SIMDE_X86_AVX512DQ_ENABLE_NATIVE_ALIASES)
121 #undef _mm512_broadcast_f32x2
122 #define _mm512_broadcast_f32x2(a) simde_mm512_broadcast_f32x2(a)
123 #endif
124
125 SIMDE_FUNCTION_ATTRIBUTES
126 simde__m512
simde_mm512_mask_broadcast_f32x2(simde__m512 src,simde__mmask16 k,simde__m128 a)127 simde_mm512_mask_broadcast_f32x2(simde__m512 src, simde__mmask16 k, simde__m128 a) {
128 #if defined(SIMDE_X86_AVX512DQ_NATIVE)
129 return _mm512_mask_broadcast_f32x2(src, k, a);
130 #else
131 return simde_mm512_mask_mov_ps(src, k, simde_mm512_broadcast_f32x2(a));
132 #endif
133 }
134 #if defined(SIMDE_X86_AVX512DQ_ENABLE_NATIVE_ALIASES)
135 #undef _mm512_mask_broadcast_f32x2
136 #define _mm512_mask_broadcast_f32x2(src, k, a) simde_mm512_mask_broadcast_f32x2(src, k, a)
137 #endif
138
139 SIMDE_FUNCTION_ATTRIBUTES
140 simde__m512
simde_mm512_maskz_broadcast_f32x2(simde__mmask16 k,simde__m128 a)141 simde_mm512_maskz_broadcast_f32x2(simde__mmask16 k, simde__m128 a) {
142 #if defined(SIMDE_X86_AVX512DQ_NATIVE)
143 return _mm512_maskz_broadcast_f32x2(k, a);
144 #else
145 return simde_mm512_maskz_mov_ps(k, simde_mm512_broadcast_f32x2(a));
146 #endif
147 }
148 #if defined(SIMDE_X86_AVX512DQ_ENABLE_NATIVE_ALIASES)
149 #undef _mm512_maskz_broadcast_f32x2
150 #define _mm512_maskz_broadcast_f32x2(k, a) simde_mm512_maskz_broadcast_f32x2(k, a)
151 #endif
152
153 SIMDE_FUNCTION_ATTRIBUTES
154 simde__m512
simde_mm512_broadcast_f32x8(simde__m256 a)155 simde_mm512_broadcast_f32x8 (simde__m256 a) {
156 #if defined(SIMDE_X86_AVX512DQ_NATIVE)
157 return _mm512_broadcast_f32x8(a);
158 #else
159 simde__m512_private r_;
160 simde__m256_private a_ = simde__m256_to_private(a);
161
162 #if defined(SIMDE_VECTOR_SUBSCRIPT) && HEDLEY_HAS_BUILTIN(__builtin_shufflevector)
163 r_.f32 = __builtin_shufflevector(a_.f32, a_.f32, 0, 1, 2, 3, 4, 5, 6, 7, 0, 1, 2, 3, 4, 5, 6, 7);
164 #else
165 SIMDE_VECTORIZE
166 for (size_t i = 0 ; i < (sizeof(r_.f32) / sizeof(r_.f32[0])) ; i+=8) {
167 r_.f32[ i ] = a_.f32[0];
168 r_.f32[i + 1] = a_.f32[1];
169 r_.f32[i + 2] = a_.f32[2];
170 r_.f32[i + 3] = a_.f32[3];
171 r_.f32[i + 4] = a_.f32[4];
172 r_.f32[i + 5] = a_.f32[5];
173 r_.f32[i + 6] = a_.f32[6];
174 r_.f32[i + 7] = a_.f32[7];
175 }
176 #endif
177
178 return simde__m512_from_private(r_);
179 #endif
180 }
181 #if defined(SIMDE_X86_AVX512DQ_ENABLE_NATIVE_ALIASES)
182 #undef _mm512_broadcast_f32x8
183 #define _mm512_broadcast_f32x8(a) simde_mm512_broadcast_f32x8(a)
184 #endif
185
186 SIMDE_FUNCTION_ATTRIBUTES
187 simde__m512
simde_mm512_mask_broadcast_f32x8(simde__m512 src,simde__mmask16 k,simde__m256 a)188 simde_mm512_mask_broadcast_f32x8(simde__m512 src, simde__mmask16 k, simde__m256 a) {
189 #if defined(SIMDE_X86_AVX512DQ_NATIVE)
190 return _mm512_mask_broadcast_f32x8(src, k, a);
191 #else
192 return simde_mm512_mask_mov_ps(src, k, simde_mm512_broadcast_f32x8(a));
193 #endif
194 }
195 #if defined(SIMDE_X86_AVX512DQ_ENABLE_NATIVE_ALIASES)
196 #undef _mm512_mask_broadcast_f32x8
197 #define _mm512_mask_broadcast_f32x8(src, k, a) simde_mm512_mask_broadcast_f32x8(src, k, a)
198 #endif
199
200 SIMDE_FUNCTION_ATTRIBUTES
201 simde__m512
simde_mm512_maskz_broadcast_f32x8(simde__mmask16 k,simde__m256 a)202 simde_mm512_maskz_broadcast_f32x8(simde__mmask16 k, simde__m256 a) {
203 #if defined(SIMDE_X86_AVX512DQ_NATIVE)
204 return _mm512_maskz_broadcast_f32x8(k, a);
205 #else
206 return simde_mm512_maskz_mov_ps(k, simde_mm512_broadcast_f32x8(a));
207 #endif
208 }
209 #if defined(SIMDE_X86_AVX512DQ_ENABLE_NATIVE_ALIASES)
210 #undef _mm512_maskz_broadcast_f32x8
211 #define _mm512_maskz_broadcast_f32x8(k, a) simde_mm512_maskz_broadcast_f32x8(k, a)
212 #endif
213
214 SIMDE_FUNCTION_ATTRIBUTES
215 simde__m512d
simde_mm512_broadcast_f64x2(simde__m128d a)216 simde_mm512_broadcast_f64x2 (simde__m128d a) {
217 #if defined(SIMDE_X86_AVX512DQ_NATIVE)
218 return _mm512_broadcast_f64x2(a);
219 #else
220 simde__m512d_private r_;
221 simde__m128d_private a_ = simde__m128d_to_private(a);
222
223 #if defined(SIMDE_VECTOR_SUBSCRIPT) && HEDLEY_HAS_BUILTIN(__builtin_shufflevector) && !defined(SIMDE_BUG_CLANG_BAD_VI64_OPS)
224 r_.f64 = __builtin_shufflevector(a_.f64, a_.f64, 0, 1, 0, 1, 0, 1, 0, 1);
225 #else
226 SIMDE_VECTORIZE
227 for (size_t i = 0 ; i < (sizeof(r_.f64) / sizeof(r_.f64[0])) ; i += 2) {
228 r_.f64[ i ] = a_.f64[0];
229 r_.f64[i + 1] = a_.f64[1];
230 }
231 #endif
232
233 return simde__m512d_from_private(r_);
234 #endif
235 }
236 #if defined(SIMDE_X86_AVX512DQ_ENABLE_NATIVE_ALIASES)
237 #undef _mm512_broadcast_f64x2
238 #define _mm512_broadcast_f64x2(a) simde_mm512_broadcast_f64x2(a)
239 #endif
240
241 SIMDE_FUNCTION_ATTRIBUTES
242 simde__m512d
simde_mm512_mask_broadcast_f64x2(simde__m512d src,simde__mmask8 k,simde__m128d a)243 simde_mm512_mask_broadcast_f64x2(simde__m512d src, simde__mmask8 k, simde__m128d a) {
244 #if defined(SIMDE_X86_AVX512DQ_NATIVE)
245 return _mm512_mask_broadcast_f64x2(src, k, a);
246 #else
247 return simde_mm512_mask_mov_pd(src, k, simde_mm512_broadcast_f64x2(a));
248 #endif
249 }
250 #if defined(SIMDE_X86_AVX512DQ_ENABLE_NATIVE_ALIASES)
251 #undef _mm512_mask_broadcast_f64x2
252 #define _mm512_mask_broadcast_f64x2(src, k, a) simde_mm512_mask_broadcast_f64x2(src, k, a)
253 #endif
254
255 SIMDE_FUNCTION_ATTRIBUTES
256 simde__m512d
simde_mm512_maskz_broadcast_f64x2(simde__mmask8 k,simde__m128d a)257 simde_mm512_maskz_broadcast_f64x2(simde__mmask8 k, simde__m128d a) {
258 #if defined(SIMDE_X86_AVX512DQ_NATIVE)
259 return _mm512_maskz_broadcast_f64x2(k, a);
260 #else
261 return simde_mm512_maskz_mov_pd(k, simde_mm512_broadcast_f64x2(a));
262 #endif
263 }
264 #if defined(SIMDE_X86_AVX512DQ_ENABLE_NATIVE_ALIASES)
265 #undef _mm512_maskz_broadcast_f64x2
266 #define _mm512_maskz_broadcast_f64x2(k, a) simde_mm512_maskz_broadcast_f64x2(k, a)
267 #endif
268
269 SIMDE_FUNCTION_ATTRIBUTES
270 simde__m256
simde_mm256_broadcast_f32x4(simde__m128 a)271 simde_mm256_broadcast_f32x4 (simde__m128 a) {
272 #if defined(SIMDE_X86_AVX512VL_NATIVE)
273 return _mm256_broadcast_f32x4(a);
274 #else
275 simde__m256_private r_;
276 simde__m128_private a_ = simde__m128_to_private(a);
277
278 #if SIMDE_NATURAL_VECTOR_SIZE_LE(128)
279 r_.m128_private[0] = a_;
280 r_.m128_private[1] = a_;
281 #elif defined(SIMDE_VECTOR_SUBSCRIPT) && HEDLEY_HAS_BUILTIN(__builtin_shufflevector)
282 r_.f32 = __builtin_shufflevector(a_.f32, a_.f32, 0, 1, 2, 3, 0, 1, 2, 3);
283 #else
284 SIMDE_VECTORIZE
285 for (size_t i = 0 ; i < (sizeof(r_.f32) / sizeof(r_.f32[0])) ; i += 4) {
286 r_.f32[ i ] = a_.f32[0];
287 r_.f32[i + 1] = a_.f32[1];
288 r_.f32[i + 2] = a_.f32[2];
289 r_.f32[i + 3] = a_.f32[3];
290 }
291 #endif
292
293 return simde__m256_from_private(r_);
294 #endif
295 }
296 #if defined(SIMDE_X86_AVX512DQ_ENABLE_NATIVE_ALIASES)
297 #undef _mm256_broadcast_f32x4
298 #define _mm256_broadcast_f32x4(a) simde_mm256_broadcast_f32x4(a)
299 #endif
300
301 SIMDE_FUNCTION_ATTRIBUTES
302 simde__m256
simde_mm256_mask_broadcast_f32x4(simde__m256 src,simde__mmask8 k,simde__m128 a)303 simde_mm256_mask_broadcast_f32x4(simde__m256 src, simde__mmask8 k, simde__m128 a) {
304 #if defined(SIMDE_X86_AVX512VL_NATIVE)
305 return _mm256_mask_broadcast_f32x4(src, k, a);
306 #else
307 return simde_mm256_mask_mov_ps(src, k, simde_mm256_broadcast_f32x4(a));
308 #endif
309 }
310 #if defined(SIMDE_X86_AVX512VL_ENABLE_NATIVE_ALIASES)
311 #undef _mm256_mask_broadcast_f32x4
312 #define _mm256_mask_broadcast_f32x4(src, k, a) simde_mm256_mask_broadcast_f32x4(src, k, a)
313 #endif
314
315 SIMDE_FUNCTION_ATTRIBUTES
316 simde__m256
simde_mm256_maskz_broadcast_f32x4(simde__mmask8 k,simde__m128 a)317 simde_mm256_maskz_broadcast_f32x4(simde__mmask8 k, simde__m128 a) {
318 #if defined(SIMDE_X86_AVX512VL_NATIVE)
319 return _mm256_maskz_broadcast_f32x4(k, a);
320 #else
321 return simde_mm256_maskz_mov_ps(k, simde_mm256_broadcast_f32x4(a));
322 #endif
323 }
324 #if defined(SIMDE_X86_AVX512VL_ENABLE_NATIVE_ALIASES)
325 #undef _mm256_maskz_broadcast_f32x4
326 #define _mm256_maskz_broadcast_f32x4(k, a) simde_mm256_maskz_broadcast_f32x4(k, a)
327 #endif
328
329 SIMDE_FUNCTION_ATTRIBUTES
330 simde__m256d
simde_mm256_broadcast_f64x2(simde__m128d a)331 simde_mm256_broadcast_f64x2 (simde__m128d a) {
332 #if defined(SIMDE_X86_AVX512VL_NATIVE) && defined(SIMDE_X86_AVX512DQ_NATIVE)
333 return _mm256_broadcast_f64x2(a);
334 #else
335 simde__m256d_private r_;
336 simde__m128d_private a_ = simde__m128d_to_private(a);
337
338 /* I don't have a bug # for this, but when compiled with clang-10 without optimization on aarch64
339 * the __builtin_shufflevector version doesn't work correctly. clang 9 and 11 aren't a problem */
340 #if defined(SIMDE_VECTOR_SUBSCRIPT) && HEDLEY_HAS_BUILTIN(__builtin_shufflevector) && \
341 (!defined(__clang__) || (SIMDE_DETECT_CLANG_VERSION < 100000 || SIMDE_DETECT_CLANG_VERSION > 100000))
342 r_.f64 = __builtin_shufflevector(a_.f64, a_.f64, 0, 1, 0, 1);
343 #else
344 SIMDE_VECTORIZE
345 for (size_t i = 0 ; i < (sizeof(r_.f64) / sizeof(r_.f64[0])) ; i += 2) {
346 r_.f64[ i ] = a_.f64[0];
347 r_.f64[i + 1] = a_.f64[1];
348 }
349 #endif
350
351 return simde__m256d_from_private(r_);
352 #endif
353 }
354 #if defined(SIMDE_X86_AVX512VL_ENABLE_NATIVE_ALIASES)
355 #undef _mm256_broadcast_f64x2
356 #define _mm256_broadcast_f64x2(a) simde_mm256_broadcast_f64x2(a)
357 #endif
358
359 SIMDE_FUNCTION_ATTRIBUTES
360 simde__m256d
simde_mm256_mask_broadcast_f64x2(simde__m256d src,simde__mmask8 k,simde__m128d a)361 simde_mm256_mask_broadcast_f64x2(simde__m256d src, simde__mmask8 k, simde__m128d a) {
362 #if defined(SIMDE_X86_AVX512VL_NATIVE) && defined(SIMDE_X86_AVX512DQ_NATIVE)
363 return _mm256_mask_broadcast_f64x2(src, k, a);
364 #else
365 return simde_mm256_mask_mov_pd(src, k, simde_mm256_broadcast_f64x2(a));
366 #endif
367 }
368 #if defined(SIMDE_X86_AVX512VL_ENABLE_NATIVE_ALIASES)
369 #undef _mm256_mask_broadcast_f64x2
370 #define _mm256_mask_broadcast_f64x2(src, k, a) simde_mm256_mask_broadcast_f64x2(src, k, a)
371 #endif
372
373 SIMDE_FUNCTION_ATTRIBUTES
374 simde__m256d
simde_mm256_maskz_broadcast_f64x2(simde__mmask8 k,simde__m128d a)375 simde_mm256_maskz_broadcast_f64x2(simde__mmask8 k, simde__m128d a) {
376 #if defined(SIMDE_X86_AVX512VL_NATIVE) && defined(SIMDE_X86_AVX512DQ_NATIVE)
377 return _mm256_maskz_broadcast_f64x2(k, a);
378 #else
379 return simde_mm256_maskz_mov_pd(k, simde_mm256_broadcast_f64x2(a));
380 #endif
381 }
382 #if defined(SIMDE_X86_AVX512VL_ENABLE_NATIVE_ALIASES)
383 #undef _mm256_maskz_broadcast_f64x2
384 #define _mm256_maskz_broadcast_f64x2(k, a) simde_mm256_maskz_broadcast_f64x2(k, a)
385 #endif
386
387 SIMDE_FUNCTION_ATTRIBUTES
388 simde__m512
simde_mm512_broadcast_f32x4(simde__m128 a)389 simde_mm512_broadcast_f32x4 (simde__m128 a) {
390 #if defined(SIMDE_X86_AVX512F_NATIVE)
391 return _mm512_broadcast_f32x4(a);
392 #else
393 simde__m512_private r_;
394
395 #if defined(SIMDE_X86_AVX2_NATIVE)
396 r_.m256[1] = r_.m256[0] = simde_mm256_castsi256_ps(simde_mm256_broadcastsi128_si256(simde_mm_castps_si128(a)));
397 #else
398 SIMDE_VECTORIZE
399 for (size_t i = 0 ; i < (sizeof(r_.m128) / sizeof(r_.m128[0])) ; i++) {
400 r_.m128[i] = a;
401 }
402 #endif
403
404 return simde__m512_from_private(r_);
405 #endif
406 }
407 #if defined(SIMDE_X86_AVX512F_ENABLE_NATIVE_ALIASES)
408 #undef _mm512_broadcast_f32x4
409 #define _mm512_broadcast_f32x4(a) simde_mm512_broadcast_f32x4(a)
410 #endif
411
412 SIMDE_FUNCTION_ATTRIBUTES
413 simde__m512
simde_mm512_mask_broadcast_f32x4(simde__m512 src,simde__mmask16 k,simde__m128 a)414 simde_mm512_mask_broadcast_f32x4(simde__m512 src, simde__mmask16 k, simde__m128 a) {
415 #if defined(SIMDE_X86_AVX512F_NATIVE)
416 return _mm512_mask_broadcast_f32x4(src, k, a);
417 #else
418 return simde_mm512_mask_mov_ps(src, k, simde_mm512_broadcast_f32x4(a));
419 #endif
420 }
421 #if defined(SIMDE_X86_AVX512F_ENABLE_NATIVE_ALIASES)
422 #undef _mm512_mask_broadcast_f32x4
423 #define _mm512_mask_broadcast_f32x4(src, k, a) simde_mm512_mask_broadcast_f32x4(src, k, a)
424 #endif
425
426 SIMDE_FUNCTION_ATTRIBUTES
427 simde__m512
simde_mm512_maskz_broadcast_f32x4(simde__mmask16 k,simde__m128 a)428 simde_mm512_maskz_broadcast_f32x4(simde__mmask16 k, simde__m128 a) {
429 #if defined(SIMDE_X86_AVX512F_NATIVE)
430 return _mm512_maskz_broadcast_f32x4(k, a);
431 #else
432 return simde_mm512_maskz_mov_ps(k, simde_mm512_broadcast_f32x4(a));
433 #endif
434 }
435 #if defined(SIMDE_X86_AVX512F_ENABLE_NATIVE_ALIASES)
436 #undef _mm512_maskz_broadcast_f32x4
437 #define _mm512_maskz_broadcast_f32x4(k, a) simde_mm512_maskz_broadcast_f32x4(k, a)
438 #endif
439
440 SIMDE_FUNCTION_ATTRIBUTES
441 simde__m512d
simde_mm512_broadcast_f64x4(simde__m256d a)442 simde_mm512_broadcast_f64x4 (simde__m256d a) {
443 #if defined(SIMDE_X86_AVX512F_NATIVE)
444 return _mm512_broadcast_f64x4(a);
445 #else
446 simde__m512d_private r_;
447
448 SIMDE_VECTORIZE
449 for (size_t i = 0 ; i < (sizeof(r_.m256d) / sizeof(r_.m256d[0])) ; i++) {
450 r_.m256d[i] = a;
451 }
452
453 return simde__m512d_from_private(r_);
454 #endif
455 }
456 #if defined(SIMDE_X86_AVX512F_ENABLE_NATIVE_ALIASES)
457 #undef _mm512_broadcast_f64x4
458 #define _mm512_broadcast_f64x4(a) simde_mm512_broadcast_f64x4(a)
459 #endif
460
461 SIMDE_FUNCTION_ATTRIBUTES
462 simde__m512d
simde_mm512_mask_broadcast_f64x4(simde__m512d src,simde__mmask8 k,simde__m256d a)463 simde_mm512_mask_broadcast_f64x4(simde__m512d src, simde__mmask8 k, simde__m256d a) {
464 #if defined(SIMDE_X86_AVX512F_NATIVE)
465 return _mm512_mask_broadcast_f64x4(src, k, a);
466 #else
467 return simde_mm512_mask_mov_pd(src, k, simde_mm512_broadcast_f64x4(a));
468 #endif
469 }
470 #if defined(SIMDE_X86_AVX512F_ENABLE_NATIVE_ALIASES)
471 #undef _mm512_mask_broadcast_f64x4
472 #define _mm512_mask_broadcast_f64x4(src, k, a) simde_mm512_mask_broadcast_f64x4(src, k, a)
473 #endif
474
475 SIMDE_FUNCTION_ATTRIBUTES
476 simde__m512d
simde_mm512_maskz_broadcast_f64x4(simde__mmask8 k,simde__m256d a)477 simde_mm512_maskz_broadcast_f64x4(simde__mmask8 k, simde__m256d a) {
478 #if defined(SIMDE_X86_AVX512F_NATIVE)
479 return _mm512_maskz_broadcast_f64x4(k, a);
480 #else
481 return simde_mm512_maskz_mov_pd(k, simde_mm512_broadcast_f64x4(a));
482 #endif
483 }
484 #if defined(SIMDE_X86_AVX512F_ENABLE_NATIVE_ALIASES)
485 #undef _mm512_maskz_broadcast_f64x4
486 #define _mm512_maskz_broadcast_f64x4(k, a) simde_mm512_maskz_broadcast_f64x4(k, a)
487 #endif
488
489 SIMDE_FUNCTION_ATTRIBUTES
490 simde__m512i
simde_mm512_broadcast_i32x4(simde__m128i a)491 simde_mm512_broadcast_i32x4 (simde__m128i a) {
492 #if defined(SIMDE_X86_AVX512F_NATIVE)
493 return _mm512_broadcast_i32x4(a);
494 #else
495 simde__m512i_private r_;
496
497 #if defined(SIMDE_X86_AVX2_NATIVE)
498 r_.m256i[1] = r_.m256i[0] = simde_mm256_broadcastsi128_si256(a);
499 #elif defined(SIMDE_X86_SSE2_NATIVE)
500 r_.m128i[3] = r_.m128i[2] = r_.m128i[1] = r_.m128i[0] = a;
501 #else
502 SIMDE_VECTORIZE
503 for (size_t i = 0 ; i < (sizeof(r_.m128i) / sizeof(r_.m128i[0])) ; i++) {
504 r_.m128i[i] = a;
505 }
506 #endif
507
508 return simde__m512i_from_private(r_);
509 #endif
510 }
511 #if defined(SIMDE_X86_AVX512F_ENABLE_NATIVE_ALIASES)
512 #undef _mm512_broadcast_i32x4
513 #define _mm512_broadcast_i32x4(a) simde_mm512_broadcast_i32x4(a)
514 #endif
515
516 SIMDE_FUNCTION_ATTRIBUTES
517 simde__m512i
simde_mm512_mask_broadcast_i32x4(simde__m512i src,simde__mmask16 k,simde__m128i a)518 simde_mm512_mask_broadcast_i32x4(simde__m512i src, simde__mmask16 k, simde__m128i a) {
519 #if defined(SIMDE_X86_AVX512F_NATIVE)
520 return _mm512_mask_broadcast_i32x4(src, k, a);
521 #else
522 return simde_mm512_mask_mov_epi32(src, k, simde_mm512_broadcast_i32x4(a));
523 #endif
524 }
525 #if defined(SIMDE_X86_AVX512F_ENABLE_NATIVE_ALIASES)
526 #undef _mm512_mask_broadcast_i32x4
527 #define _mm512_mask_broadcast_i32x4(src, k, a) simde_mm512_mask_broadcast_i32x4(src, k, a)
528 #endif
529
530 SIMDE_FUNCTION_ATTRIBUTES
531 simde__m512i
simde_mm512_maskz_broadcast_i32x4(simde__mmask16 k,simde__m128i a)532 simde_mm512_maskz_broadcast_i32x4(simde__mmask16 k, simde__m128i a) {
533 #if defined(SIMDE_X86_AVX512F_NATIVE)
534 return _mm512_maskz_broadcast_i32x4(k, a);
535 #else
536 return simde_mm512_maskz_mov_epi32(k, simde_mm512_broadcast_i32x4(a));
537 #endif
538 }
539 #if defined(SIMDE_X86_AVX512F_ENABLE_NATIVE_ALIASES)
540 #undef _mm512_maskz_broadcast_i32x4
541 #define _mm512_maskz_broadcast_i32x4(k, a) simde_mm512_maskz_broadcast_i32x4(k, a)
542 #endif
543
544 SIMDE_FUNCTION_ATTRIBUTES
545 simde__m512i
simde_mm512_broadcast_i64x4(simde__m256i a)546 simde_mm512_broadcast_i64x4 (simde__m256i a) {
547 #if defined(SIMDE_X86_AVX512F_NATIVE)
548 return _mm512_broadcast_i64x4(a);
549 #else
550 simde__m512i_private r_;
551
552 SIMDE_VECTORIZE
553 for (size_t i = 0 ; i < (sizeof(r_.m256i) / sizeof(r_.m256i[0])) ; i++) {
554 r_.m256i[i] = a;
555 }
556
557 return simde__m512i_from_private(r_);
558 #endif
559 }
560 #if defined(SIMDE_X86_AVX512F_ENABLE_NATIVE_ALIASES)
561 #undef _mm512_broadcast_i64x4
562 #define _mm512_broadcast_i64x4(a) simde_mm512_broadcast_i64x4(a)
563 #endif
564
565 SIMDE_FUNCTION_ATTRIBUTES
566 simde__m512i
simde_mm512_mask_broadcast_i64x4(simde__m512i src,simde__mmask8 k,simde__m256i a)567 simde_mm512_mask_broadcast_i64x4(simde__m512i src, simde__mmask8 k, simde__m256i a) {
568 #if defined(SIMDE_X86_AVX512F_NATIVE)
569 return _mm512_mask_broadcast_i64x4(src, k, a);
570 #else
571 return simde_mm512_mask_mov_epi64(src, k, simde_mm512_broadcast_i64x4(a));
572 #endif
573 }
574 #if defined(SIMDE_X86_AVX512F_ENABLE_NATIVE_ALIASES)
575 #undef _mm512_mask_broadcast_i64x4
576 #define _mm512_mask_broadcast_i64x4(src, k, a) simde_mm512_mask_broadcast_i64x4(src, k, a)
577 #endif
578
579 SIMDE_FUNCTION_ATTRIBUTES
580 simde__m512i
simde_mm512_maskz_broadcast_i64x4(simde__mmask8 k,simde__m256i a)581 simde_mm512_maskz_broadcast_i64x4(simde__mmask8 k, simde__m256i a) {
582 #if defined(SIMDE_X86_AVX512F_NATIVE)
583 return _mm512_maskz_broadcast_i64x4(k, a);
584 #else
585 return simde_mm512_maskz_mov_epi64(k, simde_mm512_broadcast_i64x4(a));
586 #endif
587 }
588 #if defined(SIMDE_X86_AVX512F_ENABLE_NATIVE_ALIASES)
589 #undef _mm512_maskz_broadcast_i64x4
590 #define _mm512_maskz_broadcast_i64x4(k, a) simde_mm512_maskz_broadcast_i64x4(k, a)
591 #endif
592
593 SIMDE_FUNCTION_ATTRIBUTES
594 simde__m512i
simde_mm512_broadcastd_epi32(simde__m128i a)595 simde_mm512_broadcastd_epi32 (simde__m128i a) {
596 #if defined(SIMDE_X86_AVX512F_NATIVE)
597 return _mm512_broadcastd_epi32(a);
598 #else
599 simde__m512i_private r_;
600 simde__m128i_private a_= simde__m128i_to_private(a);
601
602 SIMDE_VECTORIZE
603 for (size_t i = 0 ; i < (sizeof(r_.i32) / sizeof(r_.i32[0])) ; i++) {
604 r_.i32[i] = a_.i32[0];
605 }
606
607 return simde__m512i_from_private(r_);
608 #endif
609 }
610 #if defined(SIMDE_X86_AVX512F_ENABLE_NATIVE_ALIASES)
611 #undef _mm512_broadcastd_epi32
612 #define _mm512_broadcastd_epi32(a) simde_mm512_broadcastd_epi32(a)
613 #endif
614
615 SIMDE_FUNCTION_ATTRIBUTES
616 simde__m512i
simde_mm512_mask_broadcastd_epi32(simde__m512i src,simde__mmask16 k,simde__m128i a)617 simde_mm512_mask_broadcastd_epi32(simde__m512i src, simde__mmask16 k, simde__m128i a) {
618 #if defined(SIMDE_X86_AVX512F_NATIVE)
619 return _mm512_mask_broadcastd_epi32(src, k, a);
620 #else
621 return simde_mm512_mask_mov_epi32(src, k, simde_mm512_broadcastd_epi32(a));
622 #endif
623 }
624 #if defined(SIMDE_X86_AVX512F_ENABLE_NATIVE_ALIASES)
625 #undef _mm512_mask_broadcastd_epi32
626 #define _mm512_mask_broadcastd_epi32(src, k, a) simde_mm512_mask_broadcastd_epi32(src, k, a)
627 #endif
628
629 SIMDE_FUNCTION_ATTRIBUTES
630 simde__m512i
simde_mm512_maskz_broadcastd_epi32(simde__mmask16 k,simde__m128i a)631 simde_mm512_maskz_broadcastd_epi32(simde__mmask16 k, simde__m128i a) {
632 #if defined(SIMDE_X86_AVX512F_NATIVE)
633 return _mm512_maskz_broadcastd_epi32(k, a);
634 #else
635 return simde_mm512_maskz_mov_epi32(k, simde_mm512_broadcastd_epi32(a));
636 #endif
637 }
638 #if defined(SIMDE_X86_AVX512F_ENABLE_NATIVE_ALIASES)
639 #undef _mm512_maskz_broadcastd_epi32
640 #define _mm512_maskz_broadcastd_epi32(k, a) simde_mm512_maskz_broadcastd_epi32(k, a)
641 #endif
642
643 SIMDE_FUNCTION_ATTRIBUTES
644 simde__m512i
simde_mm512_broadcastq_epi64(simde__m128i a)645 simde_mm512_broadcastq_epi64 (simde__m128i a) {
646 #if defined(SIMDE_X86_AVX512F_NATIVE)
647 return _mm512_broadcastq_epi64(a);
648 #else
649 simde__m512i_private r_;
650 simde__m128i_private a_= simde__m128i_to_private(a);
651
652 SIMDE_VECTORIZE
653 for (size_t i = 0 ; i < (sizeof(r_.i64) / sizeof(r_.i64[0])) ; i++) {
654 r_.i64[i] = a_.i64[0];
655 }
656
657 return simde__m512i_from_private(r_);
658 #endif
659 }
660 #if defined(SIMDE_X86_AVX512F_ENABLE_NATIVE_ALIASES)
661 #undef _mm512_broadcastq_epi64
662 #define _mm512_broadcastq_epi64(a) simde_mm512_broadcastq_epi64(a)
663 #endif
664
665 SIMDE_FUNCTION_ATTRIBUTES
666 simde__m512i
simde_mm512_mask_broadcastq_epi64(simde__m512i src,simde__mmask8 k,simde__m128i a)667 simde_mm512_mask_broadcastq_epi64(simde__m512i src, simde__mmask8 k, simde__m128i a) {
668 #if defined(SIMDE_X86_AVX512F_NATIVE)
669 return _mm512_mask_broadcastq_epi64(src, k, a);
670 #else
671 return simde_mm512_mask_mov_epi64(src, k, simde_mm512_broadcastq_epi64(a));
672 #endif
673 }
674 #if defined(SIMDE_X86_AVX512F_ENABLE_NATIVE_ALIASES)
675 #undef _mm512_mask_broadcastq_epi64
676 #define _mm512_mask_broadcastq_epi64(src, k, a) simde_mm512_mask_broadcastq_epi64(src, k, a)
677 #endif
678
679 SIMDE_FUNCTION_ATTRIBUTES
680 simde__m512i
simde_mm512_maskz_broadcastq_epi64(simde__mmask8 k,simde__m128i a)681 simde_mm512_maskz_broadcastq_epi64(simde__mmask8 k, simde__m128i a) {
682 #if defined(SIMDE_X86_AVX512F_NATIVE)
683 return _mm512_maskz_broadcastq_epi64(k, a);
684 #else
685 return simde_mm512_maskz_mov_epi64(k, simde_mm512_broadcastq_epi64(a));
686 #endif
687 }
688 #if defined(SIMDE_X86_AVX512F_ENABLE_NATIVE_ALIASES)
689 #undef _mm512_maskz_broadcastq_epi64
690 #define _mm512_maskz_broadcastq_epi64(k, a) simde_mm512_maskz_broadcastq_epi64(k, a)
691 #endif
692
693 SIMDE_FUNCTION_ATTRIBUTES
694 simde__m512
simde_mm512_broadcastss_ps(simde__m128 a)695 simde_mm512_broadcastss_ps (simde__m128 a) {
696 #if defined(SIMDE_X86_AVX512F_NATIVE)
697 return _mm512_broadcastss_ps(a);
698 #else
699 simde__m512_private r_;
700 simde__m128_private a_= simde__m128_to_private(a);
701
702 SIMDE_VECTORIZE
703 for (size_t i = 0 ; i < (sizeof(r_.f32) / sizeof(r_.f32[0])) ; i++) {
704 r_.f32[i] = a_.f32[0];
705 }
706
707 return simde__m512_from_private(r_);
708 #endif
709 }
710 #if defined(SIMDE_X86_AVX512F_ENABLE_NATIVE_ALIASES)
711 #undef _mm512_broadcastss_ps
712 #define _mm512_broadcastss_ps(a) simde_mm512_broadcastss_ps(a)
713 #endif
714
715 SIMDE_FUNCTION_ATTRIBUTES
716 simde__m512
simde_mm512_mask_broadcastss_ps(simde__m512 src,simde__mmask16 k,simde__m128 a)717 simde_mm512_mask_broadcastss_ps(simde__m512 src, simde__mmask16 k, simde__m128 a) {
718 #if defined(SIMDE_X86_AVX512F_NATIVE)
719 return _mm512_mask_broadcastss_ps(src, k, a);
720 #else
721 simde__m512_private
722 src_ = simde__m512_to_private(src),
723 r_;
724 simde__m128_private
725 a_ = simde__m128_to_private(a);
726
727
728 SIMDE_VECTORIZE
729 for (size_t i = 0 ; i < (sizeof(r_.f32) / sizeof(r_.f32[0])) ; i++) {
730 r_.f32[i] = ((k >> i) & 1) ? a_.f32[0] : src_.f32[i];
731 }
732
733 return simde__m512_from_private(r_);
734 #endif
735 }
736 #if defined(SIMDE_X86_AVX512F_ENABLE_NATIVE_ALIASES)
737 #undef _mm512_mask_broadcastss_ps
738 #define _mm512_mask_broadcastss_ps(src, k, a) simde_mm512_mask_broadcastss_ps(src, k, a)
739 #endif
740
741 SIMDE_FUNCTION_ATTRIBUTES
742 simde__m512
simde_mm512_maskz_broadcastss_ps(simde__mmask16 k,simde__m128 a)743 simde_mm512_maskz_broadcastss_ps(simde__mmask16 k, simde__m128 a) {
744 #if defined(SIMDE_X86_AVX512F_NATIVE)
745 return _mm512_maskz_broadcastss_ps(k, a);
746 #else
747 simde__m512_private
748 r_;
749 simde__m128_private
750 a_ = simde__m128_to_private(a);
751
752 SIMDE_VECTORIZE
753 for (size_t i = 0 ; i < (sizeof(r_.f32) / sizeof(r_.f32[0])) ; i++) {
754 r_.f32[i] = ((k >> i) & 1) ? a_.f32[0] : INT32_C(0);
755 }
756
757 return simde__m512_from_private(r_);
758 #endif
759 }
760 #if defined(SIMDE_X86_AVX512F_ENABLE_NATIVE_ALIASES)
761 #undef _mm512_maskz_broadcastss_ps
762 #define _mm512_maskz_broadcastss_ps(k, a) simde_mm512_maskz_broadcastss_ps(k, a)
763 #endif
764
765 SIMDE_FUNCTION_ATTRIBUTES
766 simde__m512d
simde_mm512_broadcastsd_pd(simde__m128d a)767 simde_mm512_broadcastsd_pd (simde__m128d a) {
768 #if defined(SIMDE_X86_AVX512F_NATIVE)
769 return _mm512_broadcastsd_pd(a);
770 #else
771 simde__m512d_private r_;
772 simde__m128d_private a_= simde__m128d_to_private(a);
773
774 SIMDE_VECTORIZE
775 for (size_t i = 0 ; i < (sizeof(r_.f64) / sizeof(r_.f64[0])) ; i++) {
776 r_.f64[i] = a_.f64[0];
777 }
778
779 return simde__m512d_from_private(r_);
780 #endif
781 }
782 #if defined(SIMDE_X86_AVX512F_ENABLE_NATIVE_ALIASES)
783 #undef _mm512_broadcastsd_pd
784 #define _mm512_broadcastsd_pd(a) simde_mm512_broadcastsd_pd(a)
785 #endif
786
787 SIMDE_FUNCTION_ATTRIBUTES
788 simde__m512d
simde_mm512_mask_broadcastsd_pd(simde__m512d src,simde__mmask8 k,simde__m128d a)789 simde_mm512_mask_broadcastsd_pd(simde__m512d src, simde__mmask8 k, simde__m128d a) {
790 #if defined(SIMDE_X86_AVX512F_NATIVE)
791 return _mm512_mask_broadcastsd_pd(src, k, a);
792 #else
793 simde__m512d_private
794 src_ = simde__m512d_to_private(src),
795 r_;
796 simde__m128d_private
797 a_ = simde__m128d_to_private(a);
798
799 SIMDE_VECTORIZE
800 for (size_t i = 0 ; i < (sizeof(r_.f64) / sizeof(r_.f64[0])) ; i++) {
801 r_.f64[i] = ((k >> i) & 1) ? a_.f64[0] : src_.f64[i];
802 }
803
804 return simde__m512d_from_private(r_);
805 #endif
806 }
807 #if defined(SIMDE_X86_AVX512F_ENABLE_NATIVE_ALIASES)
808 #undef _mm512_mask_broadcastsd_pd
809 #define _mm512_mask_broadcastsd_pd(src, k, a) simde_mm512_mask_broadcastsd_pd(src, k, a)
810 #endif
811
812 SIMDE_FUNCTION_ATTRIBUTES
813 simde__m512d
simde_mm512_maskz_broadcastsd_pd(simde__mmask8 k,simde__m128d a)814 simde_mm512_maskz_broadcastsd_pd(simde__mmask8 k, simde__m128d a) {
815 #if defined(SIMDE_X86_AVX512F_NATIVE)
816 return _mm512_maskz_broadcastsd_pd(k, a);
817 #else
818 simde__m512d_private
819 r_;
820 simde__m128d_private
821 a_ = simde__m128d_to_private(a);
822
823 SIMDE_VECTORIZE
824 for (size_t i = 0 ; i < (sizeof(r_.f64) / sizeof(r_.f64[0])) ; i++) {
825 r_.f64[i] = ((k >> i) & 1) ? a_.f64[0] : INT64_C(0);
826 }
827
828 return simde__m512d_from_private(r_);
829 #endif
830 }
831 #if defined(SIMDE_X86_AVX512F_ENABLE_NATIVE_ALIASES)
832 #undef _mm512_maskz_broadcastsd_pd
833 #define _mm512_maskz_broadcastsd_pd(k, a) simde_mm512_maskz_broadcastsd_pd(k, a)
834 #endif
835
836 SIMDE_FUNCTION_ATTRIBUTES
837 simde__m512i
simde_mm512_broadcastb_epi8(simde__m128i a)838 simde_mm512_broadcastb_epi8 (simde__m128i a) {
839 #if defined(SIMDE_X86_AVX512BW_NATIVE)
840 return _mm512_broadcastb_epi8(a);
841 #else
842 simde__m128i_private a_= simde__m128i_to_private(a);
843 return simde_mm512_set1_epi8(a_.i8[0]);
844 #endif
845 }
846 #if defined(SIMDE_X86_AVX512BW_ENABLE_NATIVE_ALIASES)
847 #undef _mm512_broadcastb_epi8
848 #define _mm512_broadcastb_epi8(a) simde_mm512_broadcastb_epi8(a)
849 #endif
850
851 SIMDE_FUNCTION_ATTRIBUTES
852 simde__m512i
simde_mm512_mask_broadcastb_epi8(simde__m512i src,simde__mmask64 k,simde__m128i a)853 simde_mm512_mask_broadcastb_epi8 (simde__m512i src, simde__mmask64 k, simde__m128i a) {
854 #if defined(SIMDE_X86_AVX512BW_NATIVE)
855 return _mm512_mask_broadcastb_epi8(src, k, a);
856 #else
857 return simde_mm512_mask_mov_epi8(src, k, simde_mm512_broadcastb_epi8(a));
858 #endif
859 }
860 #if defined(SIMDE_X86_AVX512BW_ENABLE_NATIVE_ALIASES)
861 #undef _mm512_mask_broadcastb_epi8
862 #define _mm512_mask_broadcastb_epi8(src, k, a) simde_mm512_mask_broadcastb_epi8(src, k, a)
863 #endif
864
865 SIMDE_FUNCTION_ATTRIBUTES
866 simde__m512i
simde_mm512_maskz_broadcastb_epi8(simde__mmask64 k,simde__m128i a)867 simde_mm512_maskz_broadcastb_epi8 (simde__mmask64 k, simde__m128i a) {
868 #if defined(SIMDE_X86_AVX512BW_NATIVE)
869 return _mm512_maskz_broadcastb_epi8(k, a);
870 #else
871 return simde_mm512_maskz_mov_epi8(k, simde_mm512_broadcastb_epi8(a));
872 #endif
873 }
874 #if defined(SIMDE_X86_AVX512BW_ENABLE_NATIVE_ALIASES)
875 #undef _mm512_maskz_broadcastb_epi8
876 #define _mm512_maskz_broadcastb_epi8(k, a) simde_mm512_maskz_broadcastb_epi8(k, a)
877 #endif
878
879 SIMDE_FUNCTION_ATTRIBUTES
880 simde__m512i
simde_mm512_broadcastw_epi16(simde__m128i a)881 simde_mm512_broadcastw_epi16 (simde__m128i a) {
882 #if defined(SIMDE_X86_AVX512BW_NATIVE)
883 return _mm512_broadcastw_epi16(a);
884 #else
885 simde__m128i_private a_= simde__m128i_to_private(a);
886 return simde_mm512_set1_epi16(a_.i16[0]);
887 #endif
888 }
889 #if defined(SIMDE_X86_AVX512BW_ENABLE_NATIVE_ALIASES)
890 #undef _mm512_broadcastw_epi16
891 #define _mm512_broadcastw_epi16(a) simde_mm512_broadcastw_epi16(a)
892 #endif
893
894 SIMDE_END_DECLS_
895 HEDLEY_DIAGNOSTIC_POP
896
897 #endif /* !defined(SIMDE_X86_AVX512_BROADCAST_H) */
898