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