master
1/*! @header
2 * This header defines functions for constructing, extending, and truncating
3 * simd vector types.
4 *
5 * For each vector type `simd_typeN` supported by <simd/simd.h>, the following
6 * constructors are provided:
7 *
8 * ~~~
9 * simd_typeN simd_make_typeN(type other);
10 * simd_typeN simd_make_typeN(simd_typeM other);
11 * ~~~
12 * For the scalar-input version, or if M < N, these functions zero-extend
13 * `other` to produce a wider vector. If M == N, `other` is passed through
14 * unmodified. If `M > N`, `other` is truncated to form the result.
15 *
16 * ~~~
17 * simd_typeN simd_make_typeN_undef(type other);
18 * simd_typeN simd_make_typeN_undef(simd_typeM other);
19 * ~~~
20 * These functions are only available for M < N and for scalar inputs. They
21 * extend `other` to produce a wider vector where the contents of the newly-
22 * formed lanes are undefined.
23 *
24 * In addition, if N is 2, 3, or 4, the following constructors are available:
25 * ~~~
26 * simd_make_typeN(parts ...)
27 * ~~~
28 * where parts is a list of scalars and smaller vectors such that the sum of
29 * the number of lanes in the arguments is equal to N. For example, a
30 * `simd_float3` can be constructed from three `floats`, or a `float` and a
31 * `simd_float2` in any order:
32 * ~~~
33 * simd_float2 ab = { 1, 2 };
34 * simd_float3 vector = simd_make_float3(ab, 3);
35 * ~~~
36 *
37 * In C++ the above functions are templated in the simd:: namespace.
38 *
39 * C++ Function Equivalent C Function
40 * -------------------------------------------------------------------
41 * simd::make<simd::typeN>(x ...) simd_make_typeN(x ...)
42 * simd::make_undef<simd::typeN>(x ...) simd_make_typeN_undef(x ...)
43 *
44 *
45 * In addition, templated Vector<ScalarType, count> struct is available for
46 * templated code based on the scalar type.
47 *
48 * template <typename ScalarType, size_t count> struct simd::Vector {
49 * // static const size_t count
50 * // typedef scalar_t
51 * // typedef type
52 * // typedef packed_t
53 * };
54 *
55 * Lookup the equivalent Vector struct according to typeN:
56 * template <typename typeN> struct simd::get_traits
57 * {
58 * // using type = Vector<ScalarType, count>;
59 * };
60 *
61 * This is commonly used to get the type traits of typeN, so a helper type,
62 * namely traits, is available to query the type traits easily.
63 * simd::traits<typeN>::count
64 * simd::traits<typeN>::scalar_t
65 *
66 * @copyright 2014-2016 Apple, Inc. All rights reserved.
67 * @unsorted */
68
69#ifndef SIMD_VECTOR_CONSTRUCTORS
70#define SIMD_VECTOR_CONSTRUCTORS
71
72#include <simd/vector_types.h>
73#include <stddef.h>
74#if SIMD_COMPILER_HAS_REQUIRED_FEATURES
75
76#ifdef __cplusplus
77extern "C" {
78#endif
79
80/*! @abstract Concatenates `x` and `y` to form a vector of two 8-bit signed
81 * (twos-complement) integers. */
82static inline SIMD_CFUNC simd_char2 simd_make_char2(char x, char y) {
83 simd_char2 result;
84 result.x = x;
85 result.y = y;
86 return result;
87}
88
89/*! @abstract Zero-extends `other` to form a vector of two 8-bit signed
90 * (twos-complement) integers. */
91static inline SIMD_CFUNC simd_char2 simd_make_char2(char other) {
92 simd_char2 result = 0;
93 result.x = other;
94 return result;
95}
96
97/*! @abstract Extends `other` to form a vector of two 8-bit signed (twos-
98 * complement) integers. The contents of the newly-created vector lanes are
99 * unspecified. */
100static inline SIMD_CFUNC simd_char2 simd_make_char2_undef(char other) {
101 simd_char2 result;
102 result.x = other;
103 return result;
104}
105
106/*! @abstract Returns `other` unmodified. This function is a convenience for
107 * templated and autogenerated code. */
108static inline SIMD_CFUNC simd_char2 simd_make_char2(simd_char2 other) {
109 return other;
110}
111
112/*! @abstract Truncates `other` to form a vector of two 8-bit signed (twos-
113 * complement) integers. */
114static inline SIMD_CFUNC simd_char2 simd_make_char2(simd_char3 other) {
115 return other.xy;
116}
117
118/*! @abstract Truncates `other` to form a vector of two 8-bit signed (twos-
119 * complement) integers. */
120static inline SIMD_CFUNC simd_char2 simd_make_char2(simd_char4 other) {
121 return other.xy;
122}
123
124/*! @abstract Truncates `other` to form a vector of two 8-bit signed (twos-
125 * complement) integers. */
126static inline SIMD_CFUNC simd_char2 simd_make_char2(simd_char8 other) {
127 return other.xy;
128}
129
130/*! @abstract Truncates `other` to form a vector of two 8-bit signed (twos-
131 * complement) integers. */
132static inline SIMD_CFUNC simd_char2 simd_make_char2(simd_char16 other) {
133 return other.xy;
134}
135
136/*! @abstract Truncates `other` to form a vector of two 8-bit signed (twos-
137 * complement) integers. */
138static inline SIMD_CFUNC simd_char2 simd_make_char2(simd_char32 other) {
139 return other.xy;
140}
141
142/*! @abstract Truncates `other` to form a vector of two 8-bit signed (twos-
143 * complement) integers. */
144static inline SIMD_CFUNC simd_char2 simd_make_char2(simd_char64 other) {
145 return other.xy;
146}
147
148/*! @abstract Concatenates `x`, `y` and `z` to form a vector of three 8-bit
149 * signed (twos-complement) integers. */
150static inline SIMD_CFUNC simd_char3 simd_make_char3(char x, char y, char z) {
151 simd_char3 result;
152 result.x = x;
153 result.y = y;
154 result.z = z;
155 return result;
156}
157
158/*! @abstract Concatenates `x` and `yz` to form a vector of three 8-bit
159 * signed (twos-complement) integers. */
160static inline SIMD_CFUNC simd_char3 simd_make_char3(char x, simd_char2 yz) {
161 simd_char3 result;
162 result.x = x;
163 result.yz = yz;
164 return result;
165}
166
167/*! @abstract Concatenates `xy` and `z` to form a vector of three 8-bit
168 * signed (twos-complement) integers. */
169static inline SIMD_CFUNC simd_char3 simd_make_char3(simd_char2 xy, char z) {
170 simd_char3 result;
171 result.xy = xy;
172 result.z = z;
173 return result;
174}
175
176/*! @abstract Zero-extends `other` to form a vector of three 8-bit signed
177 * (twos-complement) integers. */
178static inline SIMD_CFUNC simd_char3 simd_make_char3(char other) {
179 simd_char3 result = 0;
180 result.x = other;
181 return result;
182}
183
184/*! @abstract Extends `other` to form a vector of three 8-bit signed (twos-
185 * complement) integers. The contents of the newly-created vector lanes are
186 * unspecified. */
187static inline SIMD_CFUNC simd_char3 simd_make_char3_undef(char other) {
188 simd_char3 result;
189 result.x = other;
190 return result;
191}
192
193/*! @abstract Zero-extends `other` to form a vector of three 8-bit signed
194 * (twos-complement) integers. */
195static inline SIMD_CFUNC simd_char3 simd_make_char3(simd_char2 other) {
196 simd_char3 result = 0;
197 result.xy = other;
198 return result;
199}
200
201/*! @abstract Extends `other` to form a vector of three 8-bit signed (twos-
202 * complement) integers. The contents of the newly-created vector lanes are
203 * unspecified. */
204static inline SIMD_CFUNC simd_char3 simd_make_char3_undef(simd_char2 other) {
205 simd_char3 result;
206 result.xy = other;
207 return result;
208}
209
210/*! @abstract Returns `other` unmodified. This function is a convenience for
211 * templated and autogenerated code. */
212static inline SIMD_CFUNC simd_char3 simd_make_char3(simd_char3 other) {
213 return other;
214}
215
216/*! @abstract Truncates `other` to form a vector of three 8-bit signed
217 * (twos-complement) integers. */
218static inline SIMD_CFUNC simd_char3 simd_make_char3(simd_char4 other) {
219 return other.xyz;
220}
221
222/*! @abstract Truncates `other` to form a vector of three 8-bit signed
223 * (twos-complement) integers. */
224static inline SIMD_CFUNC simd_char3 simd_make_char3(simd_char8 other) {
225 return other.xyz;
226}
227
228/*! @abstract Truncates `other` to form a vector of three 8-bit signed
229 * (twos-complement) integers. */
230static inline SIMD_CFUNC simd_char3 simd_make_char3(simd_char16 other) {
231 return other.xyz;
232}
233
234/*! @abstract Truncates `other` to form a vector of three 8-bit signed
235 * (twos-complement) integers. */
236static inline SIMD_CFUNC simd_char3 simd_make_char3(simd_char32 other) {
237 return other.xyz;
238}
239
240/*! @abstract Truncates `other` to form a vector of three 8-bit signed
241 * (twos-complement) integers. */
242static inline SIMD_CFUNC simd_char3 simd_make_char3(simd_char64 other) {
243 return other.xyz;
244}
245
246/*! @abstract Concatenates `x`, `y`, `z` and `w` to form a vector of four
247 * 8-bit signed (twos-complement) integers. */
248static inline SIMD_CFUNC simd_char4 simd_make_char4(char x, char y, char z, char w) {
249 simd_char4 result;
250 result.x = x;
251 result.y = y;
252 result.z = z;
253 result.w = w;
254 return result;
255}
256
257/*! @abstract Concatenates `x`, `y` and `zw` to form a vector of four 8-bit
258 * signed (twos-complement) integers. */
259static inline SIMD_CFUNC simd_char4 simd_make_char4(char x, char y, simd_char2 zw) {
260 simd_char4 result;
261 result.x = x;
262 result.y = y;
263 result.zw = zw;
264 return result;
265}
266
267/*! @abstract Concatenates `x`, `yz` and `w` to form a vector of four 8-bit
268 * signed (twos-complement) integers. */
269static inline SIMD_CFUNC simd_char4 simd_make_char4(char x, simd_char2 yz, char w) {
270 simd_char4 result;
271 result.x = x;
272 result.yz = yz;
273 result.w = w;
274 return result;
275}
276
277/*! @abstract Concatenates `xy`, `z` and `w` to form a vector of four 8-bit
278 * signed (twos-complement) integers. */
279static inline SIMD_CFUNC simd_char4 simd_make_char4(simd_char2 xy, char z, char w) {
280 simd_char4 result;
281 result.xy = xy;
282 result.z = z;
283 result.w = w;
284 return result;
285}
286
287/*! @abstract Concatenates `x` and `yzw` to form a vector of four 8-bit
288 * signed (twos-complement) integers. */
289static inline SIMD_CFUNC simd_char4 simd_make_char4(char x, simd_char3 yzw) {
290 simd_char4 result;
291 result.x = x;
292 result.yzw = yzw;
293 return result;
294}
295
296/*! @abstract Concatenates `xy` and `zw` to form a vector of four 8-bit
297 * signed (twos-complement) integers. */
298static inline SIMD_CFUNC simd_char4 simd_make_char4(simd_char2 xy, simd_char2 zw) {
299 simd_char4 result;
300 result.xy = xy;
301 result.zw = zw;
302 return result;
303}
304
305/*! @abstract Concatenates `xyz` and `w` to form a vector of four 8-bit
306 * signed (twos-complement) integers. */
307static inline SIMD_CFUNC simd_char4 simd_make_char4(simd_char3 xyz, char w) {
308 simd_char4 result;
309 result.xyz = xyz;
310 result.w = w;
311 return result;
312}
313
314/*! @abstract Zero-extends `other` to form a vector of four 8-bit signed
315 * (twos-complement) integers. */
316static inline SIMD_CFUNC simd_char4 simd_make_char4(char other) {
317 simd_char4 result = 0;
318 result.x = other;
319 return result;
320}
321
322/*! @abstract Extends `other` to form a vector of four 8-bit signed (twos-
323 * complement) integers. The contents of the newly-created vector lanes are
324 * unspecified. */
325static inline SIMD_CFUNC simd_char4 simd_make_char4_undef(char other) {
326 simd_char4 result;
327 result.x = other;
328 return result;
329}
330
331/*! @abstract Zero-extends `other` to form a vector of four 8-bit signed
332 * (twos-complement) integers. */
333static inline SIMD_CFUNC simd_char4 simd_make_char4(simd_char2 other) {
334 simd_char4 result = 0;
335 result.xy = other;
336 return result;
337}
338
339/*! @abstract Extends `other` to form a vector of four 8-bit signed (twos-
340 * complement) integers. The contents of the newly-created vector lanes are
341 * unspecified. */
342static inline SIMD_CFUNC simd_char4 simd_make_char4_undef(simd_char2 other) {
343 simd_char4 result;
344 result.xy = other;
345 return result;
346}
347
348/*! @abstract Zero-extends `other` to form a vector of four 8-bit signed
349 * (twos-complement) integers. */
350static inline SIMD_CFUNC simd_char4 simd_make_char4(simd_char3 other) {
351 simd_char4 result = 0;
352 result.xyz = other;
353 return result;
354}
355
356/*! @abstract Extends `other` to form a vector of four 8-bit signed (twos-
357 * complement) integers. The contents of the newly-created vector lanes are
358 * unspecified. */
359static inline SIMD_CFUNC simd_char4 simd_make_char4_undef(simd_char3 other) {
360 simd_char4 result;
361 result.xyz = other;
362 return result;
363}
364
365/*! @abstract Returns `other` unmodified. This function is a convenience for
366 * templated and autogenerated code. */
367static inline SIMD_CFUNC simd_char4 simd_make_char4(simd_char4 other) {
368 return other;
369}
370
371/*! @abstract Truncates `other` to form a vector of four 8-bit signed (twos-
372 * complement) integers. */
373static inline SIMD_CFUNC simd_char4 simd_make_char4(simd_char8 other) {
374 return other.xyzw;
375}
376
377/*! @abstract Truncates `other` to form a vector of four 8-bit signed (twos-
378 * complement) integers. */
379static inline SIMD_CFUNC simd_char4 simd_make_char4(simd_char16 other) {
380 return other.xyzw;
381}
382
383/*! @abstract Truncates `other` to form a vector of four 8-bit signed (twos-
384 * complement) integers. */
385static inline SIMD_CFUNC simd_char4 simd_make_char4(simd_char32 other) {
386 return other.xyzw;
387}
388
389/*! @abstract Truncates `other` to form a vector of four 8-bit signed (twos-
390 * complement) integers. */
391static inline SIMD_CFUNC simd_char4 simd_make_char4(simd_char64 other) {
392 return other.xyzw;
393}
394
395/*! @abstract Concatenates `lo` and `hi` to form a vector of eight 8-bit
396 * signed (twos-complement) integers. */
397static inline SIMD_CFUNC simd_char8 simd_make_char8(simd_char4 lo, simd_char4 hi) {
398 simd_char8 result;
399 result.lo = lo;
400 result.hi = hi;
401 return result;
402}
403
404/*! @abstract Zero-extends `other` to form a vector of eight 8-bit signed
405 * (twos-complement) integers. */
406static inline SIMD_CFUNC simd_char8 simd_make_char8(char other) {
407 simd_char8 result = 0;
408 result.x = other;
409 return result;
410}
411
412/*! @abstract Extends `other` to form a vector of eight 8-bit signed (twos-
413 * complement) integers. The contents of the newly-created vector lanes are
414 * unspecified. */
415static inline SIMD_CFUNC simd_char8 simd_make_char8_undef(char other) {
416 simd_char8 result;
417 result.x = other;
418 return result;
419}
420
421/*! @abstract Zero-extends `other` to form a vector of eight 8-bit signed
422 * (twos-complement) integers. */
423static inline SIMD_CFUNC simd_char8 simd_make_char8(simd_char2 other) {
424 simd_char8 result = 0;
425 result.xy = other;
426 return result;
427}
428
429/*! @abstract Extends `other` to form a vector of eight 8-bit signed (twos-
430 * complement) integers. The contents of the newly-created vector lanes are
431 * unspecified. */
432static inline SIMD_CFUNC simd_char8 simd_make_char8_undef(simd_char2 other) {
433 simd_char8 result;
434 result.xy = other;
435 return result;
436}
437
438/*! @abstract Zero-extends `other` to form a vector of eight 8-bit signed
439 * (twos-complement) integers. */
440static inline SIMD_CFUNC simd_char8 simd_make_char8(simd_char3 other) {
441 simd_char8 result = 0;
442 result.xyz = other;
443 return result;
444}
445
446/*! @abstract Extends `other` to form a vector of eight 8-bit signed (twos-
447 * complement) integers. The contents of the newly-created vector lanes are
448 * unspecified. */
449static inline SIMD_CFUNC simd_char8 simd_make_char8_undef(simd_char3 other) {
450 simd_char8 result;
451 result.xyz = other;
452 return result;
453}
454
455/*! @abstract Zero-extends `other` to form a vector of eight 8-bit signed
456 * (twos-complement) integers. */
457static inline SIMD_CFUNC simd_char8 simd_make_char8(simd_char4 other) {
458 simd_char8 result = 0;
459 result.xyzw = other;
460 return result;
461}
462
463/*! @abstract Extends `other` to form a vector of eight 8-bit signed (twos-
464 * complement) integers. The contents of the newly-created vector lanes are
465 * unspecified. */
466static inline SIMD_CFUNC simd_char8 simd_make_char8_undef(simd_char4 other) {
467 simd_char8 result;
468 result.xyzw = other;
469 return result;
470}
471
472/*! @abstract Returns `other` unmodified. This function is a convenience for
473 * templated and autogenerated code. */
474static inline SIMD_CFUNC simd_char8 simd_make_char8(simd_char8 other) {
475 return other;
476}
477
478/*! @abstract Truncates `other` to form a vector of eight 8-bit signed
479 * (twos-complement) integers. */
480static inline SIMD_CFUNC simd_char8 simd_make_char8(simd_char16 other) {
481 return simd_make_char8(other.lo);
482}
483
484/*! @abstract Truncates `other` to form a vector of eight 8-bit signed
485 * (twos-complement) integers. */
486static inline SIMD_CFUNC simd_char8 simd_make_char8(simd_char32 other) {
487 return simd_make_char8(other.lo);
488}
489
490/*! @abstract Truncates `other` to form a vector of eight 8-bit signed
491 * (twos-complement) integers. */
492static inline SIMD_CFUNC simd_char8 simd_make_char8(simd_char64 other) {
493 return simd_make_char8(other.lo);
494}
495
496/*! @abstract Concatenates `lo` and `hi` to form a vector of sixteen 8-bit
497 * signed (twos-complement) integers. */
498static inline SIMD_CFUNC simd_char16 simd_make_char16(simd_char8 lo, simd_char8 hi) {
499 simd_char16 result;
500 result.lo = lo;
501 result.hi = hi;
502 return result;
503}
504
505/*! @abstract Zero-extends `other` to form a vector of sixteen 8-bit signed
506 * (twos-complement) integers. */
507static inline SIMD_CFUNC simd_char16 simd_make_char16(char other) {
508 simd_char16 result = 0;
509 result.x = other;
510 return result;
511}
512
513/*! @abstract Extends `other` to form a vector of sixteen 8-bit signed
514 * (twos-complement) integers. The contents of the newly-created vector
515 * lanes are unspecified. */
516static inline SIMD_CFUNC simd_char16 simd_make_char16_undef(char other) {
517 simd_char16 result;
518 result.x = other;
519 return result;
520}
521
522/*! @abstract Zero-extends `other` to form a vector of sixteen 8-bit signed
523 * (twos-complement) integers. */
524static inline SIMD_CFUNC simd_char16 simd_make_char16(simd_char2 other) {
525 simd_char16 result = 0;
526 result.xy = other;
527 return result;
528}
529
530/*! @abstract Extends `other` to form a vector of sixteen 8-bit signed
531 * (twos-complement) integers. The contents of the newly-created vector
532 * lanes are unspecified. */
533static inline SIMD_CFUNC simd_char16 simd_make_char16_undef(simd_char2 other) {
534 simd_char16 result;
535 result.xy = other;
536 return result;
537}
538
539/*! @abstract Zero-extends `other` to form a vector of sixteen 8-bit signed
540 * (twos-complement) integers. */
541static inline SIMD_CFUNC simd_char16 simd_make_char16(simd_char3 other) {
542 simd_char16 result = 0;
543 result.xyz = other;
544 return result;
545}
546
547/*! @abstract Extends `other` to form a vector of sixteen 8-bit signed
548 * (twos-complement) integers. The contents of the newly-created vector
549 * lanes are unspecified. */
550static inline SIMD_CFUNC simd_char16 simd_make_char16_undef(simd_char3 other) {
551 simd_char16 result;
552 result.xyz = other;
553 return result;
554}
555
556/*! @abstract Zero-extends `other` to form a vector of sixteen 8-bit signed
557 * (twos-complement) integers. */
558static inline SIMD_CFUNC simd_char16 simd_make_char16(simd_char4 other) {
559 simd_char16 result = 0;
560 result.xyzw = other;
561 return result;
562}
563
564/*! @abstract Extends `other` to form a vector of sixteen 8-bit signed
565 * (twos-complement) integers. The contents of the newly-created vector
566 * lanes are unspecified. */
567static inline SIMD_CFUNC simd_char16 simd_make_char16_undef(simd_char4 other) {
568 simd_char16 result;
569 result.xyzw = other;
570 return result;
571}
572
573/*! @abstract Zero-extends `other` to form a vector of sixteen 8-bit signed
574 * (twos-complement) integers. */
575static inline SIMD_CFUNC simd_char16 simd_make_char16(simd_char8 other) {
576 simd_char16 result = 0;
577 result.lo = simd_make_char8(other);
578 return result;
579}
580
581/*! @abstract Extends `other` to form a vector of sixteen 8-bit signed
582 * (twos-complement) integers. The contents of the newly-created vector
583 * lanes are unspecified. */
584static inline SIMD_CFUNC simd_char16 simd_make_char16_undef(simd_char8 other) {
585 simd_char16 result;
586 result.lo = simd_make_char8(other);
587 return result;
588}
589
590/*! @abstract Returns `other` unmodified. This function is a convenience for
591 * templated and autogenerated code. */
592static inline SIMD_CFUNC simd_char16 simd_make_char16(simd_char16 other) {
593 return other;
594}
595
596/*! @abstract Truncates `other` to form a vector of sixteen 8-bit signed
597 * (twos-complement) integers. */
598static inline SIMD_CFUNC simd_char16 simd_make_char16(simd_char32 other) {
599 return simd_make_char16(other.lo);
600}
601
602/*! @abstract Truncates `other` to form a vector of sixteen 8-bit signed
603 * (twos-complement) integers. */
604static inline SIMD_CFUNC simd_char16 simd_make_char16(simd_char64 other) {
605 return simd_make_char16(other.lo);
606}
607
608/*! @abstract Concatenates `lo` and `hi` to form a vector of thirty-two
609 * 8-bit signed (twos-complement) integers. */
610static inline SIMD_CFUNC simd_char32 simd_make_char32(simd_char16 lo, simd_char16 hi) {
611 simd_char32 result;
612 result.lo = lo;
613 result.hi = hi;
614 return result;
615}
616
617/*! @abstract Zero-extends `other` to form a vector of thirty-two 8-bit
618 * signed (twos-complement) integers. */
619static inline SIMD_CFUNC simd_char32 simd_make_char32(char other) {
620 simd_char32 result = 0;
621 result.x = other;
622 return result;
623}
624
625/*! @abstract Extends `other` to form a vector of thirty-two 8-bit signed
626 * (twos-complement) integers. The contents of the newly-created vector
627 * lanes are unspecified. */
628static inline SIMD_CFUNC simd_char32 simd_make_char32_undef(char other) {
629 simd_char32 result;
630 result.x = other;
631 return result;
632}
633
634/*! @abstract Zero-extends `other` to form a vector of thirty-two 8-bit
635 * signed (twos-complement) integers. */
636static inline SIMD_CFUNC simd_char32 simd_make_char32(simd_char2 other) {
637 simd_char32 result = 0;
638 result.xy = other;
639 return result;
640}
641
642/*! @abstract Extends `other` to form a vector of thirty-two 8-bit signed
643 * (twos-complement) integers. The contents of the newly-created vector
644 * lanes are unspecified. */
645static inline SIMD_CFUNC simd_char32 simd_make_char32_undef(simd_char2 other) {
646 simd_char32 result;
647 result.xy = other;
648 return result;
649}
650
651/*! @abstract Zero-extends `other` to form a vector of thirty-two 8-bit
652 * signed (twos-complement) integers. */
653static inline SIMD_CFUNC simd_char32 simd_make_char32(simd_char3 other) {
654 simd_char32 result = 0;
655 result.xyz = other;
656 return result;
657}
658
659/*! @abstract Extends `other` to form a vector of thirty-two 8-bit signed
660 * (twos-complement) integers. The contents of the newly-created vector
661 * lanes are unspecified. */
662static inline SIMD_CFUNC simd_char32 simd_make_char32_undef(simd_char3 other) {
663 simd_char32 result;
664 result.xyz = other;
665 return result;
666}
667
668/*! @abstract Zero-extends `other` to form a vector of thirty-two 8-bit
669 * signed (twos-complement) integers. */
670static inline SIMD_CFUNC simd_char32 simd_make_char32(simd_char4 other) {
671 simd_char32 result = 0;
672 result.xyzw = other;
673 return result;
674}
675
676/*! @abstract Extends `other` to form a vector of thirty-two 8-bit signed
677 * (twos-complement) integers. The contents of the newly-created vector
678 * lanes are unspecified. */
679static inline SIMD_CFUNC simd_char32 simd_make_char32_undef(simd_char4 other) {
680 simd_char32 result;
681 result.xyzw = other;
682 return result;
683}
684
685/*! @abstract Zero-extends `other` to form a vector of thirty-two 8-bit
686 * signed (twos-complement) integers. */
687static inline SIMD_CFUNC simd_char32 simd_make_char32(simd_char8 other) {
688 simd_char32 result = 0;
689 result.lo = simd_make_char16(other);
690 return result;
691}
692
693/*! @abstract Extends `other` to form a vector of thirty-two 8-bit signed
694 * (twos-complement) integers. The contents of the newly-created vector
695 * lanes are unspecified. */
696static inline SIMD_CFUNC simd_char32 simd_make_char32_undef(simd_char8 other) {
697 simd_char32 result;
698 result.lo = simd_make_char16(other);
699 return result;
700}
701
702/*! @abstract Zero-extends `other` to form a vector of thirty-two 8-bit
703 * signed (twos-complement) integers. */
704static inline SIMD_CFUNC simd_char32 simd_make_char32(simd_char16 other) {
705 simd_char32 result = 0;
706 result.lo = simd_make_char16(other);
707 return result;
708}
709
710/*! @abstract Extends `other` to form a vector of thirty-two 8-bit signed
711 * (twos-complement) integers. The contents of the newly-created vector
712 * lanes are unspecified. */
713static inline SIMD_CFUNC simd_char32 simd_make_char32_undef(simd_char16 other) {
714 simd_char32 result;
715 result.lo = simd_make_char16(other);
716 return result;
717}
718
719/*! @abstract Returns `other` unmodified. This function is a convenience for
720 * templated and autogenerated code. */
721static inline SIMD_CFUNC simd_char32 simd_make_char32(simd_char32 other) {
722 return other;
723}
724
725/*! @abstract Truncates `other` to form a vector of thirty-two 8-bit signed
726 * (twos-complement) integers. */
727static inline SIMD_CFUNC simd_char32 simd_make_char32(simd_char64 other) {
728 return simd_make_char32(other.lo);
729}
730
731/*! @abstract Concatenates `lo` and `hi` to form a vector of sixty-four
732 * 8-bit signed (twos-complement) integers. */
733static inline SIMD_CFUNC simd_char64 simd_make_char64(simd_char32 lo, simd_char32 hi) {
734 simd_char64 result;
735 result.lo = lo;
736 result.hi = hi;
737 return result;
738}
739
740/*! @abstract Zero-extends `other` to form a vector of sixty-four 8-bit
741 * signed (twos-complement) integers. */
742static inline SIMD_CFUNC simd_char64 simd_make_char64(char other) {
743 simd_char64 result = 0;
744 result.x = other;
745 return result;
746}
747
748/*! @abstract Extends `other` to form a vector of sixty-four 8-bit signed
749 * (twos-complement) integers. The contents of the newly-created vector
750 * lanes are unspecified. */
751static inline SIMD_CFUNC simd_char64 simd_make_char64_undef(char other) {
752 simd_char64 result;
753 result.x = other;
754 return result;
755}
756
757/*! @abstract Zero-extends `other` to form a vector of sixty-four 8-bit
758 * signed (twos-complement) integers. */
759static inline SIMD_CFUNC simd_char64 simd_make_char64(simd_char2 other) {
760 simd_char64 result = 0;
761 result.xy = other;
762 return result;
763}
764
765/*! @abstract Extends `other` to form a vector of sixty-four 8-bit signed
766 * (twos-complement) integers. The contents of the newly-created vector
767 * lanes are unspecified. */
768static inline SIMD_CFUNC simd_char64 simd_make_char64_undef(simd_char2 other) {
769 simd_char64 result;
770 result.xy = other;
771 return result;
772}
773
774/*! @abstract Zero-extends `other` to form a vector of sixty-four 8-bit
775 * signed (twos-complement) integers. */
776static inline SIMD_CFUNC simd_char64 simd_make_char64(simd_char3 other) {
777 simd_char64 result = 0;
778 result.xyz = other;
779 return result;
780}
781
782/*! @abstract Extends `other` to form a vector of sixty-four 8-bit signed
783 * (twos-complement) integers. The contents of the newly-created vector
784 * lanes are unspecified. */
785static inline SIMD_CFUNC simd_char64 simd_make_char64_undef(simd_char3 other) {
786 simd_char64 result;
787 result.xyz = other;
788 return result;
789}
790
791/*! @abstract Zero-extends `other` to form a vector of sixty-four 8-bit
792 * signed (twos-complement) integers. */
793static inline SIMD_CFUNC simd_char64 simd_make_char64(simd_char4 other) {
794 simd_char64 result = 0;
795 result.xyzw = other;
796 return result;
797}
798
799/*! @abstract Extends `other` to form a vector of sixty-four 8-bit signed
800 * (twos-complement) integers. The contents of the newly-created vector
801 * lanes are unspecified. */
802static inline SIMD_CFUNC simd_char64 simd_make_char64_undef(simd_char4 other) {
803 simd_char64 result;
804 result.xyzw = other;
805 return result;
806}
807
808/*! @abstract Zero-extends `other` to form a vector of sixty-four 8-bit
809 * signed (twos-complement) integers. */
810static inline SIMD_CFUNC simd_char64 simd_make_char64(simd_char8 other) {
811 simd_char64 result = 0;
812 result.lo = simd_make_char32(other);
813 return result;
814}
815
816/*! @abstract Extends `other` to form a vector of sixty-four 8-bit signed
817 * (twos-complement) integers. The contents of the newly-created vector
818 * lanes are unspecified. */
819static inline SIMD_CFUNC simd_char64 simd_make_char64_undef(simd_char8 other) {
820 simd_char64 result;
821 result.lo = simd_make_char32(other);
822 return result;
823}
824
825/*! @abstract Zero-extends `other` to form a vector of sixty-four 8-bit
826 * signed (twos-complement) integers. */
827static inline SIMD_CFUNC simd_char64 simd_make_char64(simd_char16 other) {
828 simd_char64 result = 0;
829 result.lo = simd_make_char32(other);
830 return result;
831}
832
833/*! @abstract Extends `other` to form a vector of sixty-four 8-bit signed
834 * (twos-complement) integers. The contents of the newly-created vector
835 * lanes are unspecified. */
836static inline SIMD_CFUNC simd_char64 simd_make_char64_undef(simd_char16 other) {
837 simd_char64 result;
838 result.lo = simd_make_char32(other);
839 return result;
840}
841
842/*! @abstract Zero-extends `other` to form a vector of sixty-four 8-bit
843 * signed (twos-complement) integers. */
844static inline SIMD_CFUNC simd_char64 simd_make_char64(simd_char32 other) {
845 simd_char64 result = 0;
846 result.lo = simd_make_char32(other);
847 return result;
848}
849
850/*! @abstract Extends `other` to form a vector of sixty-four 8-bit signed
851 * (twos-complement) integers. The contents of the newly-created vector
852 * lanes are unspecified. */
853static inline SIMD_CFUNC simd_char64 simd_make_char64_undef(simd_char32 other) {
854 simd_char64 result;
855 result.lo = simd_make_char32(other);
856 return result;
857}
858
859/*! @abstract Returns `other` unmodified. This function is a convenience for
860 * templated and autogenerated code. */
861static inline SIMD_CFUNC simd_char64 simd_make_char64(simd_char64 other) {
862 return other;
863}
864
865/*! @abstract Concatenates `x` and `y` to form a vector of two 8-bit
866 * unsigned integers. */
867static inline SIMD_CFUNC simd_uchar2 simd_make_uchar2(unsigned char x, unsigned char y) {
868 simd_uchar2 result;
869 result.x = x;
870 result.y = y;
871 return result;
872}
873
874/*! @abstract Zero-extends `other` to form a vector of two 8-bit unsigned
875 * integers. */
876static inline SIMD_CFUNC simd_uchar2 simd_make_uchar2(unsigned char other) {
877 simd_uchar2 result = 0;
878 result.x = other;
879 return result;
880}
881
882/*! @abstract Extends `other` to form a vector of two 8-bit unsigned
883 * integers. The contents of the newly-created vector lanes are
884 * unspecified. */
885static inline SIMD_CFUNC simd_uchar2 simd_make_uchar2_undef(unsigned char other) {
886 simd_uchar2 result;
887 result.x = other;
888 return result;
889}
890
891/*! @abstract Returns `other` unmodified. This function is a convenience for
892 * templated and autogenerated code. */
893static inline SIMD_CFUNC simd_uchar2 simd_make_uchar2(simd_uchar2 other) {
894 return other;
895}
896
897/*! @abstract Truncates `other` to form a vector of two 8-bit unsigned
898 * integers. */
899static inline SIMD_CFUNC simd_uchar2 simd_make_uchar2(simd_uchar3 other) {
900 return other.xy;
901}
902
903/*! @abstract Truncates `other` to form a vector of two 8-bit unsigned
904 * integers. */
905static inline SIMD_CFUNC simd_uchar2 simd_make_uchar2(simd_uchar4 other) {
906 return other.xy;
907}
908
909/*! @abstract Truncates `other` to form a vector of two 8-bit unsigned
910 * integers. */
911static inline SIMD_CFUNC simd_uchar2 simd_make_uchar2(simd_uchar8 other) {
912 return other.xy;
913}
914
915/*! @abstract Truncates `other` to form a vector of two 8-bit unsigned
916 * integers. */
917static inline SIMD_CFUNC simd_uchar2 simd_make_uchar2(simd_uchar16 other) {
918 return other.xy;
919}
920
921/*! @abstract Truncates `other` to form a vector of two 8-bit unsigned
922 * integers. */
923static inline SIMD_CFUNC simd_uchar2 simd_make_uchar2(simd_uchar32 other) {
924 return other.xy;
925}
926
927/*! @abstract Truncates `other` to form a vector of two 8-bit unsigned
928 * integers. */
929static inline SIMD_CFUNC simd_uchar2 simd_make_uchar2(simd_uchar64 other) {
930 return other.xy;
931}
932
933/*! @abstract Concatenates `x`, `y` and `z` to form a vector of three 8-bit
934 * unsigned integers. */
935static inline SIMD_CFUNC simd_uchar3 simd_make_uchar3(unsigned char x, unsigned char y, unsigned char z) {
936 simd_uchar3 result;
937 result.x = x;
938 result.y = y;
939 result.z = z;
940 return result;
941}
942
943/*! @abstract Concatenates `x` and `yz` to form a vector of three 8-bit
944 * unsigned integers. */
945static inline SIMD_CFUNC simd_uchar3 simd_make_uchar3(unsigned char x, simd_uchar2 yz) {
946 simd_uchar3 result;
947 result.x = x;
948 result.yz = yz;
949 return result;
950}
951
952/*! @abstract Concatenates `xy` and `z` to form a vector of three 8-bit
953 * unsigned integers. */
954static inline SIMD_CFUNC simd_uchar3 simd_make_uchar3(simd_uchar2 xy, unsigned char z) {
955 simd_uchar3 result;
956 result.xy = xy;
957 result.z = z;
958 return result;
959}
960
961/*! @abstract Zero-extends `other` to form a vector of three 8-bit unsigned
962 * integers. */
963static inline SIMD_CFUNC simd_uchar3 simd_make_uchar3(unsigned char other) {
964 simd_uchar3 result = 0;
965 result.x = other;
966 return result;
967}
968
969/*! @abstract Extends `other` to form a vector of three 8-bit unsigned
970 * integers. The contents of the newly-created vector lanes are
971 * unspecified. */
972static inline SIMD_CFUNC simd_uchar3 simd_make_uchar3_undef(unsigned char other) {
973 simd_uchar3 result;
974 result.x = other;
975 return result;
976}
977
978/*! @abstract Zero-extends `other` to form a vector of three 8-bit unsigned
979 * integers. */
980static inline SIMD_CFUNC simd_uchar3 simd_make_uchar3(simd_uchar2 other) {
981 simd_uchar3 result = 0;
982 result.xy = other;
983 return result;
984}
985
986/*! @abstract Extends `other` to form a vector of three 8-bit unsigned
987 * integers. The contents of the newly-created vector lanes are
988 * unspecified. */
989static inline SIMD_CFUNC simd_uchar3 simd_make_uchar3_undef(simd_uchar2 other) {
990 simd_uchar3 result;
991 result.xy = other;
992 return result;
993}
994
995/*! @abstract Returns `other` unmodified. This function is a convenience for
996 * templated and autogenerated code. */
997static inline SIMD_CFUNC simd_uchar3 simd_make_uchar3(simd_uchar3 other) {
998 return other;
999}
1000
1001/*! @abstract Truncates `other` to form a vector of three 8-bit unsigned
1002 * integers. */
1003static inline SIMD_CFUNC simd_uchar3 simd_make_uchar3(simd_uchar4 other) {
1004 return other.xyz;
1005}
1006
1007/*! @abstract Truncates `other` to form a vector of three 8-bit unsigned
1008 * integers. */
1009static inline SIMD_CFUNC simd_uchar3 simd_make_uchar3(simd_uchar8 other) {
1010 return other.xyz;
1011}
1012
1013/*! @abstract Truncates `other` to form a vector of three 8-bit unsigned
1014 * integers. */
1015static inline SIMD_CFUNC simd_uchar3 simd_make_uchar3(simd_uchar16 other) {
1016 return other.xyz;
1017}
1018
1019/*! @abstract Truncates `other` to form a vector of three 8-bit unsigned
1020 * integers. */
1021static inline SIMD_CFUNC simd_uchar3 simd_make_uchar3(simd_uchar32 other) {
1022 return other.xyz;
1023}
1024
1025/*! @abstract Truncates `other` to form a vector of three 8-bit unsigned
1026 * integers. */
1027static inline SIMD_CFUNC simd_uchar3 simd_make_uchar3(simd_uchar64 other) {
1028 return other.xyz;
1029}
1030
1031/*! @abstract Concatenates `x`, `y`, `z` and `w` to form a vector of four
1032 * 8-bit unsigned integers. */
1033static inline SIMD_CFUNC simd_uchar4 simd_make_uchar4(unsigned char x, unsigned char y, unsigned char z, unsigned char w) {
1034 simd_uchar4 result;
1035 result.x = x;
1036 result.y = y;
1037 result.z = z;
1038 result.w = w;
1039 return result;
1040}
1041
1042/*! @abstract Concatenates `x`, `y` and `zw` to form a vector of four 8-bit
1043 * unsigned integers. */
1044static inline SIMD_CFUNC simd_uchar4 simd_make_uchar4(unsigned char x, unsigned char y, simd_uchar2 zw) {
1045 simd_uchar4 result;
1046 result.x = x;
1047 result.y = y;
1048 result.zw = zw;
1049 return result;
1050}
1051
1052/*! @abstract Concatenates `x`, `yz` and `w` to form a vector of four 8-bit
1053 * unsigned integers. */
1054static inline SIMD_CFUNC simd_uchar4 simd_make_uchar4(unsigned char x, simd_uchar2 yz, unsigned char w) {
1055 simd_uchar4 result;
1056 result.x = x;
1057 result.yz = yz;
1058 result.w = w;
1059 return result;
1060}
1061
1062/*! @abstract Concatenates `xy`, `z` and `w` to form a vector of four 8-bit
1063 * unsigned integers. */
1064static inline SIMD_CFUNC simd_uchar4 simd_make_uchar4(simd_uchar2 xy, unsigned char z, unsigned char w) {
1065 simd_uchar4 result;
1066 result.xy = xy;
1067 result.z = z;
1068 result.w = w;
1069 return result;
1070}
1071
1072/*! @abstract Concatenates `x` and `yzw` to form a vector of four 8-bit
1073 * unsigned integers. */
1074static inline SIMD_CFUNC simd_uchar4 simd_make_uchar4(unsigned char x, simd_uchar3 yzw) {
1075 simd_uchar4 result;
1076 result.x = x;
1077 result.yzw = yzw;
1078 return result;
1079}
1080
1081/*! @abstract Concatenates `xy` and `zw` to form a vector of four 8-bit
1082 * unsigned integers. */
1083static inline SIMD_CFUNC simd_uchar4 simd_make_uchar4(simd_uchar2 xy, simd_uchar2 zw) {
1084 simd_uchar4 result;
1085 result.xy = xy;
1086 result.zw = zw;
1087 return result;
1088}
1089
1090/*! @abstract Concatenates `xyz` and `w` to form a vector of four 8-bit
1091 * unsigned integers. */
1092static inline SIMD_CFUNC simd_uchar4 simd_make_uchar4(simd_uchar3 xyz, unsigned char w) {
1093 simd_uchar4 result;
1094 result.xyz = xyz;
1095 result.w = w;
1096 return result;
1097}
1098
1099/*! @abstract Zero-extends `other` to form a vector of four 8-bit unsigned
1100 * integers. */
1101static inline SIMD_CFUNC simd_uchar4 simd_make_uchar4(unsigned char other) {
1102 simd_uchar4 result = 0;
1103 result.x = other;
1104 return result;
1105}
1106
1107/*! @abstract Extends `other` to form a vector of four 8-bit unsigned
1108 * integers. The contents of the newly-created vector lanes are
1109 * unspecified. */
1110static inline SIMD_CFUNC simd_uchar4 simd_make_uchar4_undef(unsigned char other) {
1111 simd_uchar4 result;
1112 result.x = other;
1113 return result;
1114}
1115
1116/*! @abstract Zero-extends `other` to form a vector of four 8-bit unsigned
1117 * integers. */
1118static inline SIMD_CFUNC simd_uchar4 simd_make_uchar4(simd_uchar2 other) {
1119 simd_uchar4 result = 0;
1120 result.xy = other;
1121 return result;
1122}
1123
1124/*! @abstract Extends `other` to form a vector of four 8-bit unsigned
1125 * integers. The contents of the newly-created vector lanes are
1126 * unspecified. */
1127static inline SIMD_CFUNC simd_uchar4 simd_make_uchar4_undef(simd_uchar2 other) {
1128 simd_uchar4 result;
1129 result.xy = other;
1130 return result;
1131}
1132
1133/*! @abstract Zero-extends `other` to form a vector of four 8-bit unsigned
1134 * integers. */
1135static inline SIMD_CFUNC simd_uchar4 simd_make_uchar4(simd_uchar3 other) {
1136 simd_uchar4 result = 0;
1137 result.xyz = other;
1138 return result;
1139}
1140
1141/*! @abstract Extends `other` to form a vector of four 8-bit unsigned
1142 * integers. The contents of the newly-created vector lanes are
1143 * unspecified. */
1144static inline SIMD_CFUNC simd_uchar4 simd_make_uchar4_undef(simd_uchar3 other) {
1145 simd_uchar4 result;
1146 result.xyz = other;
1147 return result;
1148}
1149
1150/*! @abstract Returns `other` unmodified. This function is a convenience for
1151 * templated and autogenerated code. */
1152static inline SIMD_CFUNC simd_uchar4 simd_make_uchar4(simd_uchar4 other) {
1153 return other;
1154}
1155
1156/*! @abstract Truncates `other` to form a vector of four 8-bit unsigned
1157 * integers. */
1158static inline SIMD_CFUNC simd_uchar4 simd_make_uchar4(simd_uchar8 other) {
1159 return other.xyzw;
1160}
1161
1162/*! @abstract Truncates `other` to form a vector of four 8-bit unsigned
1163 * integers. */
1164static inline SIMD_CFUNC simd_uchar4 simd_make_uchar4(simd_uchar16 other) {
1165 return other.xyzw;
1166}
1167
1168/*! @abstract Truncates `other` to form a vector of four 8-bit unsigned
1169 * integers. */
1170static inline SIMD_CFUNC simd_uchar4 simd_make_uchar4(simd_uchar32 other) {
1171 return other.xyzw;
1172}
1173
1174/*! @abstract Truncates `other` to form a vector of four 8-bit unsigned
1175 * integers. */
1176static inline SIMD_CFUNC simd_uchar4 simd_make_uchar4(simd_uchar64 other) {
1177 return other.xyzw;
1178}
1179
1180/*! @abstract Concatenates `lo` and `hi` to form a vector of eight 8-bit
1181 * unsigned integers. */
1182static inline SIMD_CFUNC simd_uchar8 simd_make_uchar8(simd_uchar4 lo, simd_uchar4 hi) {
1183 simd_uchar8 result;
1184 result.lo = lo;
1185 result.hi = hi;
1186 return result;
1187}
1188
1189/*! @abstract Zero-extends `other` to form a vector of eight 8-bit unsigned
1190 * integers. */
1191static inline SIMD_CFUNC simd_uchar8 simd_make_uchar8(unsigned char other) {
1192 simd_uchar8 result = 0;
1193 result.x = other;
1194 return result;
1195}
1196
1197/*! @abstract Extends `other` to form a vector of eight 8-bit unsigned
1198 * integers. The contents of the newly-created vector lanes are
1199 * unspecified. */
1200static inline SIMD_CFUNC simd_uchar8 simd_make_uchar8_undef(unsigned char other) {
1201 simd_uchar8 result;
1202 result.x = other;
1203 return result;
1204}
1205
1206/*! @abstract Zero-extends `other` to form a vector of eight 8-bit unsigned
1207 * integers. */
1208static inline SIMD_CFUNC simd_uchar8 simd_make_uchar8(simd_uchar2 other) {
1209 simd_uchar8 result = 0;
1210 result.xy = other;
1211 return result;
1212}
1213
1214/*! @abstract Extends `other` to form a vector of eight 8-bit unsigned
1215 * integers. The contents of the newly-created vector lanes are
1216 * unspecified. */
1217static inline SIMD_CFUNC simd_uchar8 simd_make_uchar8_undef(simd_uchar2 other) {
1218 simd_uchar8 result;
1219 result.xy = other;
1220 return result;
1221}
1222
1223/*! @abstract Zero-extends `other` to form a vector of eight 8-bit unsigned
1224 * integers. */
1225static inline SIMD_CFUNC simd_uchar8 simd_make_uchar8(simd_uchar3 other) {
1226 simd_uchar8 result = 0;
1227 result.xyz = other;
1228 return result;
1229}
1230
1231/*! @abstract Extends `other` to form a vector of eight 8-bit unsigned
1232 * integers. The contents of the newly-created vector lanes are
1233 * unspecified. */
1234static inline SIMD_CFUNC simd_uchar8 simd_make_uchar8_undef(simd_uchar3 other) {
1235 simd_uchar8 result;
1236 result.xyz = other;
1237 return result;
1238}
1239
1240/*! @abstract Zero-extends `other` to form a vector of eight 8-bit unsigned
1241 * integers. */
1242static inline SIMD_CFUNC simd_uchar8 simd_make_uchar8(simd_uchar4 other) {
1243 simd_uchar8 result = 0;
1244 result.xyzw = other;
1245 return result;
1246}
1247
1248/*! @abstract Extends `other` to form a vector of eight 8-bit unsigned
1249 * integers. The contents of the newly-created vector lanes are
1250 * unspecified. */
1251static inline SIMD_CFUNC simd_uchar8 simd_make_uchar8_undef(simd_uchar4 other) {
1252 simd_uchar8 result;
1253 result.xyzw = other;
1254 return result;
1255}
1256
1257/*! @abstract Returns `other` unmodified. This function is a convenience for
1258 * templated and autogenerated code. */
1259static inline SIMD_CFUNC simd_uchar8 simd_make_uchar8(simd_uchar8 other) {
1260 return other;
1261}
1262
1263/*! @abstract Truncates `other` to form a vector of eight 8-bit unsigned
1264 * integers. */
1265static inline SIMD_CFUNC simd_uchar8 simd_make_uchar8(simd_uchar16 other) {
1266 return simd_make_uchar8(other.lo);
1267}
1268
1269/*! @abstract Truncates `other` to form a vector of eight 8-bit unsigned
1270 * integers. */
1271static inline SIMD_CFUNC simd_uchar8 simd_make_uchar8(simd_uchar32 other) {
1272 return simd_make_uchar8(other.lo);
1273}
1274
1275/*! @abstract Truncates `other` to form a vector of eight 8-bit unsigned
1276 * integers. */
1277static inline SIMD_CFUNC simd_uchar8 simd_make_uchar8(simd_uchar64 other) {
1278 return simd_make_uchar8(other.lo);
1279}
1280
1281/*! @abstract Concatenates `lo` and `hi` to form a vector of sixteen 8-bit
1282 * unsigned integers. */
1283static inline SIMD_CFUNC simd_uchar16 simd_make_uchar16(simd_uchar8 lo, simd_uchar8 hi) {
1284 simd_uchar16 result;
1285 result.lo = lo;
1286 result.hi = hi;
1287 return result;
1288}
1289
1290/*! @abstract Zero-extends `other` to form a vector of sixteen 8-bit
1291 * unsigned integers. */
1292static inline SIMD_CFUNC simd_uchar16 simd_make_uchar16(unsigned char other) {
1293 simd_uchar16 result = 0;
1294 result.x = other;
1295 return result;
1296}
1297
1298/*! @abstract Extends `other` to form a vector of sixteen 8-bit unsigned
1299 * integers. The contents of the newly-created vector lanes are
1300 * unspecified. */
1301static inline SIMD_CFUNC simd_uchar16 simd_make_uchar16_undef(unsigned char other) {
1302 simd_uchar16 result;
1303 result.x = other;
1304 return result;
1305}
1306
1307/*! @abstract Zero-extends `other` to form a vector of sixteen 8-bit
1308 * unsigned integers. */
1309static inline SIMD_CFUNC simd_uchar16 simd_make_uchar16(simd_uchar2 other) {
1310 simd_uchar16 result = 0;
1311 result.xy = other;
1312 return result;
1313}
1314
1315/*! @abstract Extends `other` to form a vector of sixteen 8-bit unsigned
1316 * integers. The contents of the newly-created vector lanes are
1317 * unspecified. */
1318static inline SIMD_CFUNC simd_uchar16 simd_make_uchar16_undef(simd_uchar2 other) {
1319 simd_uchar16 result;
1320 result.xy = other;
1321 return result;
1322}
1323
1324/*! @abstract Zero-extends `other` to form a vector of sixteen 8-bit
1325 * unsigned integers. */
1326static inline SIMD_CFUNC simd_uchar16 simd_make_uchar16(simd_uchar3 other) {
1327 simd_uchar16 result = 0;
1328 result.xyz = other;
1329 return result;
1330}
1331
1332/*! @abstract Extends `other` to form a vector of sixteen 8-bit unsigned
1333 * integers. The contents of the newly-created vector lanes are
1334 * unspecified. */
1335static inline SIMD_CFUNC simd_uchar16 simd_make_uchar16_undef(simd_uchar3 other) {
1336 simd_uchar16 result;
1337 result.xyz = other;
1338 return result;
1339}
1340
1341/*! @abstract Zero-extends `other` to form a vector of sixteen 8-bit
1342 * unsigned integers. */
1343static inline SIMD_CFUNC simd_uchar16 simd_make_uchar16(simd_uchar4 other) {
1344 simd_uchar16 result = 0;
1345 result.xyzw = other;
1346 return result;
1347}
1348
1349/*! @abstract Extends `other` to form a vector of sixteen 8-bit unsigned
1350 * integers. The contents of the newly-created vector lanes are
1351 * unspecified. */
1352static inline SIMD_CFUNC simd_uchar16 simd_make_uchar16_undef(simd_uchar4 other) {
1353 simd_uchar16 result;
1354 result.xyzw = other;
1355 return result;
1356}
1357
1358/*! @abstract Zero-extends `other` to form a vector of sixteen 8-bit
1359 * unsigned integers. */
1360static inline SIMD_CFUNC simd_uchar16 simd_make_uchar16(simd_uchar8 other) {
1361 simd_uchar16 result = 0;
1362 result.lo = simd_make_uchar8(other);
1363 return result;
1364}
1365
1366/*! @abstract Extends `other` to form a vector of sixteen 8-bit unsigned
1367 * integers. The contents of the newly-created vector lanes are
1368 * unspecified. */
1369static inline SIMD_CFUNC simd_uchar16 simd_make_uchar16_undef(simd_uchar8 other) {
1370 simd_uchar16 result;
1371 result.lo = simd_make_uchar8(other);
1372 return result;
1373}
1374
1375/*! @abstract Returns `other` unmodified. This function is a convenience for
1376 * templated and autogenerated code. */
1377static inline SIMD_CFUNC simd_uchar16 simd_make_uchar16(simd_uchar16 other) {
1378 return other;
1379}
1380
1381/*! @abstract Truncates `other` to form a vector of sixteen 8-bit unsigned
1382 * integers. */
1383static inline SIMD_CFUNC simd_uchar16 simd_make_uchar16(simd_uchar32 other) {
1384 return simd_make_uchar16(other.lo);
1385}
1386
1387/*! @abstract Truncates `other` to form a vector of sixteen 8-bit unsigned
1388 * integers. */
1389static inline SIMD_CFUNC simd_uchar16 simd_make_uchar16(simd_uchar64 other) {
1390 return simd_make_uchar16(other.lo);
1391}
1392
1393/*! @abstract Concatenates `lo` and `hi` to form a vector of thirty-two
1394 * 8-bit unsigned integers. */
1395static inline SIMD_CFUNC simd_uchar32 simd_make_uchar32(simd_uchar16 lo, simd_uchar16 hi) {
1396 simd_uchar32 result;
1397 result.lo = lo;
1398 result.hi = hi;
1399 return result;
1400}
1401
1402/*! @abstract Zero-extends `other` to form a vector of thirty-two 8-bit
1403 * unsigned integers. */
1404static inline SIMD_CFUNC simd_uchar32 simd_make_uchar32(unsigned char other) {
1405 simd_uchar32 result = 0;
1406 result.x = other;
1407 return result;
1408}
1409
1410/*! @abstract Extends `other` to form a vector of thirty-two 8-bit unsigned
1411 * integers. The contents of the newly-created vector lanes are
1412 * unspecified. */
1413static inline SIMD_CFUNC simd_uchar32 simd_make_uchar32_undef(unsigned char other) {
1414 simd_uchar32 result;
1415 result.x = other;
1416 return result;
1417}
1418
1419/*! @abstract Zero-extends `other` to form a vector of thirty-two 8-bit
1420 * unsigned integers. */
1421static inline SIMD_CFUNC simd_uchar32 simd_make_uchar32(simd_uchar2 other) {
1422 simd_uchar32 result = 0;
1423 result.xy = other;
1424 return result;
1425}
1426
1427/*! @abstract Extends `other` to form a vector of thirty-two 8-bit unsigned
1428 * integers. The contents of the newly-created vector lanes are
1429 * unspecified. */
1430static inline SIMD_CFUNC simd_uchar32 simd_make_uchar32_undef(simd_uchar2 other) {
1431 simd_uchar32 result;
1432 result.xy = other;
1433 return result;
1434}
1435
1436/*! @abstract Zero-extends `other` to form a vector of thirty-two 8-bit
1437 * unsigned integers. */
1438static inline SIMD_CFUNC simd_uchar32 simd_make_uchar32(simd_uchar3 other) {
1439 simd_uchar32 result = 0;
1440 result.xyz = other;
1441 return result;
1442}
1443
1444/*! @abstract Extends `other` to form a vector of thirty-two 8-bit unsigned
1445 * integers. The contents of the newly-created vector lanes are
1446 * unspecified. */
1447static inline SIMD_CFUNC simd_uchar32 simd_make_uchar32_undef(simd_uchar3 other) {
1448 simd_uchar32 result;
1449 result.xyz = other;
1450 return result;
1451}
1452
1453/*! @abstract Zero-extends `other` to form a vector of thirty-two 8-bit
1454 * unsigned integers. */
1455static inline SIMD_CFUNC simd_uchar32 simd_make_uchar32(simd_uchar4 other) {
1456 simd_uchar32 result = 0;
1457 result.xyzw = other;
1458 return result;
1459}
1460
1461/*! @abstract Extends `other` to form a vector of thirty-two 8-bit unsigned
1462 * integers. The contents of the newly-created vector lanes are
1463 * unspecified. */
1464static inline SIMD_CFUNC simd_uchar32 simd_make_uchar32_undef(simd_uchar4 other) {
1465 simd_uchar32 result;
1466 result.xyzw = other;
1467 return result;
1468}
1469
1470/*! @abstract Zero-extends `other` to form a vector of thirty-two 8-bit
1471 * unsigned integers. */
1472static inline SIMD_CFUNC simd_uchar32 simd_make_uchar32(simd_uchar8 other) {
1473 simd_uchar32 result = 0;
1474 result.lo = simd_make_uchar16(other);
1475 return result;
1476}
1477
1478/*! @abstract Extends `other` to form a vector of thirty-two 8-bit unsigned
1479 * integers. The contents of the newly-created vector lanes are
1480 * unspecified. */
1481static inline SIMD_CFUNC simd_uchar32 simd_make_uchar32_undef(simd_uchar8 other) {
1482 simd_uchar32 result;
1483 result.lo = simd_make_uchar16(other);
1484 return result;
1485}
1486
1487/*! @abstract Zero-extends `other` to form a vector of thirty-two 8-bit
1488 * unsigned integers. */
1489static inline SIMD_CFUNC simd_uchar32 simd_make_uchar32(simd_uchar16 other) {
1490 simd_uchar32 result = 0;
1491 result.lo = simd_make_uchar16(other);
1492 return result;
1493}
1494
1495/*! @abstract Extends `other` to form a vector of thirty-two 8-bit unsigned
1496 * integers. The contents of the newly-created vector lanes are
1497 * unspecified. */
1498static inline SIMD_CFUNC simd_uchar32 simd_make_uchar32_undef(simd_uchar16 other) {
1499 simd_uchar32 result;
1500 result.lo = simd_make_uchar16(other);
1501 return result;
1502}
1503
1504/*! @abstract Returns `other` unmodified. This function is a convenience for
1505 * templated and autogenerated code. */
1506static inline SIMD_CFUNC simd_uchar32 simd_make_uchar32(simd_uchar32 other) {
1507 return other;
1508}
1509
1510/*! @abstract Truncates `other` to form a vector of thirty-two 8-bit
1511 * unsigned integers. */
1512static inline SIMD_CFUNC simd_uchar32 simd_make_uchar32(simd_uchar64 other) {
1513 return simd_make_uchar32(other.lo);
1514}
1515
1516/*! @abstract Concatenates `lo` and `hi` to form a vector of sixty-four
1517 * 8-bit unsigned integers. */
1518static inline SIMD_CFUNC simd_uchar64 simd_make_uchar64(simd_uchar32 lo, simd_uchar32 hi) {
1519 simd_uchar64 result;
1520 result.lo = lo;
1521 result.hi = hi;
1522 return result;
1523}
1524
1525/*! @abstract Zero-extends `other` to form a vector of sixty-four 8-bit
1526 * unsigned integers. */
1527static inline SIMD_CFUNC simd_uchar64 simd_make_uchar64(unsigned char other) {
1528 simd_uchar64 result = 0;
1529 result.x = other;
1530 return result;
1531}
1532
1533/*! @abstract Extends `other` to form a vector of sixty-four 8-bit unsigned
1534 * integers. The contents of the newly-created vector lanes are
1535 * unspecified. */
1536static inline SIMD_CFUNC simd_uchar64 simd_make_uchar64_undef(unsigned char other) {
1537 simd_uchar64 result;
1538 result.x = other;
1539 return result;
1540}
1541
1542/*! @abstract Zero-extends `other` to form a vector of sixty-four 8-bit
1543 * unsigned integers. */
1544static inline SIMD_CFUNC simd_uchar64 simd_make_uchar64(simd_uchar2 other) {
1545 simd_uchar64 result = 0;
1546 result.xy = other;
1547 return result;
1548}
1549
1550/*! @abstract Extends `other` to form a vector of sixty-four 8-bit unsigned
1551 * integers. The contents of the newly-created vector lanes are
1552 * unspecified. */
1553static inline SIMD_CFUNC simd_uchar64 simd_make_uchar64_undef(simd_uchar2 other) {
1554 simd_uchar64 result;
1555 result.xy = other;
1556 return result;
1557}
1558
1559/*! @abstract Zero-extends `other` to form a vector of sixty-four 8-bit
1560 * unsigned integers. */
1561static inline SIMD_CFUNC simd_uchar64 simd_make_uchar64(simd_uchar3 other) {
1562 simd_uchar64 result = 0;
1563 result.xyz = other;
1564 return result;
1565}
1566
1567/*! @abstract Extends `other` to form a vector of sixty-four 8-bit unsigned
1568 * integers. The contents of the newly-created vector lanes are
1569 * unspecified. */
1570static inline SIMD_CFUNC simd_uchar64 simd_make_uchar64_undef(simd_uchar3 other) {
1571 simd_uchar64 result;
1572 result.xyz = other;
1573 return result;
1574}
1575
1576/*! @abstract Zero-extends `other` to form a vector of sixty-four 8-bit
1577 * unsigned integers. */
1578static inline SIMD_CFUNC simd_uchar64 simd_make_uchar64(simd_uchar4 other) {
1579 simd_uchar64 result = 0;
1580 result.xyzw = other;
1581 return result;
1582}
1583
1584/*! @abstract Extends `other` to form a vector of sixty-four 8-bit unsigned
1585 * integers. The contents of the newly-created vector lanes are
1586 * unspecified. */
1587static inline SIMD_CFUNC simd_uchar64 simd_make_uchar64_undef(simd_uchar4 other) {
1588 simd_uchar64 result;
1589 result.xyzw = other;
1590 return result;
1591}
1592
1593/*! @abstract Zero-extends `other` to form a vector of sixty-four 8-bit
1594 * unsigned integers. */
1595static inline SIMD_CFUNC simd_uchar64 simd_make_uchar64(simd_uchar8 other) {
1596 simd_uchar64 result = 0;
1597 result.lo = simd_make_uchar32(other);
1598 return result;
1599}
1600
1601/*! @abstract Extends `other` to form a vector of sixty-four 8-bit unsigned
1602 * integers. The contents of the newly-created vector lanes are
1603 * unspecified. */
1604static inline SIMD_CFUNC simd_uchar64 simd_make_uchar64_undef(simd_uchar8 other) {
1605 simd_uchar64 result;
1606 result.lo = simd_make_uchar32(other);
1607 return result;
1608}
1609
1610/*! @abstract Zero-extends `other` to form a vector of sixty-four 8-bit
1611 * unsigned integers. */
1612static inline SIMD_CFUNC simd_uchar64 simd_make_uchar64(simd_uchar16 other) {
1613 simd_uchar64 result = 0;
1614 result.lo = simd_make_uchar32(other);
1615 return result;
1616}
1617
1618/*! @abstract Extends `other` to form a vector of sixty-four 8-bit unsigned
1619 * integers. The contents of the newly-created vector lanes are
1620 * unspecified. */
1621static inline SIMD_CFUNC simd_uchar64 simd_make_uchar64_undef(simd_uchar16 other) {
1622 simd_uchar64 result;
1623 result.lo = simd_make_uchar32(other);
1624 return result;
1625}
1626
1627/*! @abstract Zero-extends `other` to form a vector of sixty-four 8-bit
1628 * unsigned integers. */
1629static inline SIMD_CFUNC simd_uchar64 simd_make_uchar64(simd_uchar32 other) {
1630 simd_uchar64 result = 0;
1631 result.lo = simd_make_uchar32(other);
1632 return result;
1633}
1634
1635/*! @abstract Extends `other` to form a vector of sixty-four 8-bit unsigned
1636 * integers. The contents of the newly-created vector lanes are
1637 * unspecified. */
1638static inline SIMD_CFUNC simd_uchar64 simd_make_uchar64_undef(simd_uchar32 other) {
1639 simd_uchar64 result;
1640 result.lo = simd_make_uchar32(other);
1641 return result;
1642}
1643
1644/*! @abstract Returns `other` unmodified. This function is a convenience for
1645 * templated and autogenerated code. */
1646static inline SIMD_CFUNC simd_uchar64 simd_make_uchar64(simd_uchar64 other) {
1647 return other;
1648}
1649
1650/*! @abstract Concatenates `x` and `y` to form a vector of two 16-bit signed
1651 * (twos-complement) integers. */
1652static inline SIMD_CFUNC simd_short2 simd_make_short2(short x, short y) {
1653 simd_short2 result;
1654 result.x = x;
1655 result.y = y;
1656 return result;
1657}
1658
1659/*! @abstract Zero-extends `other` to form a vector of two 16-bit signed
1660 * (twos-complement) integers. */
1661static inline SIMD_CFUNC simd_short2 simd_make_short2(short other) {
1662 simd_short2 result = 0;
1663 result.x = other;
1664 return result;
1665}
1666
1667/*! @abstract Extends `other` to form a vector of two 16-bit signed (twos-
1668 * complement) integers. The contents of the newly-created vector lanes are
1669 * unspecified. */
1670static inline SIMD_CFUNC simd_short2 simd_make_short2_undef(short other) {
1671 simd_short2 result;
1672 result.x = other;
1673 return result;
1674}
1675
1676/*! @abstract Returns `other` unmodified. This function is a convenience for
1677 * templated and autogenerated code. */
1678static inline SIMD_CFUNC simd_short2 simd_make_short2(simd_short2 other) {
1679 return other;
1680}
1681
1682/*! @abstract Truncates `other` to form a vector of two 16-bit signed (twos-
1683 * complement) integers. */
1684static inline SIMD_CFUNC simd_short2 simd_make_short2(simd_short3 other) {
1685 return other.xy;
1686}
1687
1688/*! @abstract Truncates `other` to form a vector of two 16-bit signed (twos-
1689 * complement) integers. */
1690static inline SIMD_CFUNC simd_short2 simd_make_short2(simd_short4 other) {
1691 return other.xy;
1692}
1693
1694/*! @abstract Truncates `other` to form a vector of two 16-bit signed (twos-
1695 * complement) integers. */
1696static inline SIMD_CFUNC simd_short2 simd_make_short2(simd_short8 other) {
1697 return other.xy;
1698}
1699
1700/*! @abstract Truncates `other` to form a vector of two 16-bit signed (twos-
1701 * complement) integers. */
1702static inline SIMD_CFUNC simd_short2 simd_make_short2(simd_short16 other) {
1703 return other.xy;
1704}
1705
1706/*! @abstract Truncates `other` to form a vector of two 16-bit signed (twos-
1707 * complement) integers. */
1708static inline SIMD_CFUNC simd_short2 simd_make_short2(simd_short32 other) {
1709 return other.xy;
1710}
1711
1712/*! @abstract Concatenates `x`, `y` and `z` to form a vector of three 16-bit
1713 * signed (twos-complement) integers. */
1714static inline SIMD_CFUNC simd_short3 simd_make_short3(short x, short y, short z) {
1715 simd_short3 result;
1716 result.x = x;
1717 result.y = y;
1718 result.z = z;
1719 return result;
1720}
1721
1722/*! @abstract Concatenates `x` and `yz` to form a vector of three 16-bit
1723 * signed (twos-complement) integers. */
1724static inline SIMD_CFUNC simd_short3 simd_make_short3(short x, simd_short2 yz) {
1725 simd_short3 result;
1726 result.x = x;
1727 result.yz = yz;
1728 return result;
1729}
1730
1731/*! @abstract Concatenates `xy` and `z` to form a vector of three 16-bit
1732 * signed (twos-complement) integers. */
1733static inline SIMD_CFUNC simd_short3 simd_make_short3(simd_short2 xy, short z) {
1734 simd_short3 result;
1735 result.xy = xy;
1736 result.z = z;
1737 return result;
1738}
1739
1740/*! @abstract Zero-extends `other` to form a vector of three 16-bit signed
1741 * (twos-complement) integers. */
1742static inline SIMD_CFUNC simd_short3 simd_make_short3(short other) {
1743 simd_short3 result = 0;
1744 result.x = other;
1745 return result;
1746}
1747
1748/*! @abstract Extends `other` to form a vector of three 16-bit signed (twos-
1749 * complement) integers. The contents of the newly-created vector lanes are
1750 * unspecified. */
1751static inline SIMD_CFUNC simd_short3 simd_make_short3_undef(short other) {
1752 simd_short3 result;
1753 result.x = other;
1754 return result;
1755}
1756
1757/*! @abstract Zero-extends `other` to form a vector of three 16-bit signed
1758 * (twos-complement) integers. */
1759static inline SIMD_CFUNC simd_short3 simd_make_short3(simd_short2 other) {
1760 simd_short3 result = 0;
1761 result.xy = other;
1762 return result;
1763}
1764
1765/*! @abstract Extends `other` to form a vector of three 16-bit signed (twos-
1766 * complement) integers. The contents of the newly-created vector lanes are
1767 * unspecified. */
1768static inline SIMD_CFUNC simd_short3 simd_make_short3_undef(simd_short2 other) {
1769 simd_short3 result;
1770 result.xy = other;
1771 return result;
1772}
1773
1774/*! @abstract Returns `other` unmodified. This function is a convenience for
1775 * templated and autogenerated code. */
1776static inline SIMD_CFUNC simd_short3 simd_make_short3(simd_short3 other) {
1777 return other;
1778}
1779
1780/*! @abstract Truncates `other` to form a vector of three 16-bit signed
1781 * (twos-complement) integers. */
1782static inline SIMD_CFUNC simd_short3 simd_make_short3(simd_short4 other) {
1783 return other.xyz;
1784}
1785
1786/*! @abstract Truncates `other` to form a vector of three 16-bit signed
1787 * (twos-complement) integers. */
1788static inline SIMD_CFUNC simd_short3 simd_make_short3(simd_short8 other) {
1789 return other.xyz;
1790}
1791
1792/*! @abstract Truncates `other` to form a vector of three 16-bit signed
1793 * (twos-complement) integers. */
1794static inline SIMD_CFUNC simd_short3 simd_make_short3(simd_short16 other) {
1795 return other.xyz;
1796}
1797
1798/*! @abstract Truncates `other` to form a vector of three 16-bit signed
1799 * (twos-complement) integers. */
1800static inline SIMD_CFUNC simd_short3 simd_make_short3(simd_short32 other) {
1801 return other.xyz;
1802}
1803
1804/*! @abstract Concatenates `x`, `y`, `z` and `w` to form a vector of four
1805 * 16-bit signed (twos-complement) integers. */
1806static inline SIMD_CFUNC simd_short4 simd_make_short4(short x, short y, short z, short w) {
1807 simd_short4 result;
1808 result.x = x;
1809 result.y = y;
1810 result.z = z;
1811 result.w = w;
1812 return result;
1813}
1814
1815/*! @abstract Concatenates `x`, `y` and `zw` to form a vector of four 16-bit
1816 * signed (twos-complement) integers. */
1817static inline SIMD_CFUNC simd_short4 simd_make_short4(short x, short y, simd_short2 zw) {
1818 simd_short4 result;
1819 result.x = x;
1820 result.y = y;
1821 result.zw = zw;
1822 return result;
1823}
1824
1825/*! @abstract Concatenates `x`, `yz` and `w` to form a vector of four 16-bit
1826 * signed (twos-complement) integers. */
1827static inline SIMD_CFUNC simd_short4 simd_make_short4(short x, simd_short2 yz, short w) {
1828 simd_short4 result;
1829 result.x = x;
1830 result.yz = yz;
1831 result.w = w;
1832 return result;
1833}
1834
1835/*! @abstract Concatenates `xy`, `z` and `w` to form a vector of four 16-bit
1836 * signed (twos-complement) integers. */
1837static inline SIMD_CFUNC simd_short4 simd_make_short4(simd_short2 xy, short z, short w) {
1838 simd_short4 result;
1839 result.xy = xy;
1840 result.z = z;
1841 result.w = w;
1842 return result;
1843}
1844
1845/*! @abstract Concatenates `x` and `yzw` to form a vector of four 16-bit
1846 * signed (twos-complement) integers. */
1847static inline SIMD_CFUNC simd_short4 simd_make_short4(short x, simd_short3 yzw) {
1848 simd_short4 result;
1849 result.x = x;
1850 result.yzw = yzw;
1851 return result;
1852}
1853
1854/*! @abstract Concatenates `xy` and `zw` to form a vector of four 16-bit
1855 * signed (twos-complement) integers. */
1856static inline SIMD_CFUNC simd_short4 simd_make_short4(simd_short2 xy, simd_short2 zw) {
1857 simd_short4 result;
1858 result.xy = xy;
1859 result.zw = zw;
1860 return result;
1861}
1862
1863/*! @abstract Concatenates `xyz` and `w` to form a vector of four 16-bit
1864 * signed (twos-complement) integers. */
1865static inline SIMD_CFUNC simd_short4 simd_make_short4(simd_short3 xyz, short w) {
1866 simd_short4 result;
1867 result.xyz = xyz;
1868 result.w = w;
1869 return result;
1870}
1871
1872/*! @abstract Zero-extends `other` to form a vector of four 16-bit signed
1873 * (twos-complement) integers. */
1874static inline SIMD_CFUNC simd_short4 simd_make_short4(short other) {
1875 simd_short4 result = 0;
1876 result.x = other;
1877 return result;
1878}
1879
1880/*! @abstract Extends `other` to form a vector of four 16-bit signed (twos-
1881 * complement) integers. The contents of the newly-created vector lanes are
1882 * unspecified. */
1883static inline SIMD_CFUNC simd_short4 simd_make_short4_undef(short other) {
1884 simd_short4 result;
1885 result.x = other;
1886 return result;
1887}
1888
1889/*! @abstract Zero-extends `other` to form a vector of four 16-bit signed
1890 * (twos-complement) integers. */
1891static inline SIMD_CFUNC simd_short4 simd_make_short4(simd_short2 other) {
1892 simd_short4 result = 0;
1893 result.xy = other;
1894 return result;
1895}
1896
1897/*! @abstract Extends `other` to form a vector of four 16-bit signed (twos-
1898 * complement) integers. The contents of the newly-created vector lanes are
1899 * unspecified. */
1900static inline SIMD_CFUNC simd_short4 simd_make_short4_undef(simd_short2 other) {
1901 simd_short4 result;
1902 result.xy = other;
1903 return result;
1904}
1905
1906/*! @abstract Zero-extends `other` to form a vector of four 16-bit signed
1907 * (twos-complement) integers. */
1908static inline SIMD_CFUNC simd_short4 simd_make_short4(simd_short3 other) {
1909 simd_short4 result = 0;
1910 result.xyz = other;
1911 return result;
1912}
1913
1914/*! @abstract Extends `other` to form a vector of four 16-bit signed (twos-
1915 * complement) integers. The contents of the newly-created vector lanes are
1916 * unspecified. */
1917static inline SIMD_CFUNC simd_short4 simd_make_short4_undef(simd_short3 other) {
1918 simd_short4 result;
1919 result.xyz = other;
1920 return result;
1921}
1922
1923/*! @abstract Returns `other` unmodified. This function is a convenience for
1924 * templated and autogenerated code. */
1925static inline SIMD_CFUNC simd_short4 simd_make_short4(simd_short4 other) {
1926 return other;
1927}
1928
1929/*! @abstract Truncates `other` to form a vector of four 16-bit signed
1930 * (twos-complement) integers. */
1931static inline SIMD_CFUNC simd_short4 simd_make_short4(simd_short8 other) {
1932 return other.xyzw;
1933}
1934
1935/*! @abstract Truncates `other` to form a vector of four 16-bit signed
1936 * (twos-complement) integers. */
1937static inline SIMD_CFUNC simd_short4 simd_make_short4(simd_short16 other) {
1938 return other.xyzw;
1939}
1940
1941/*! @abstract Truncates `other` to form a vector of four 16-bit signed
1942 * (twos-complement) integers. */
1943static inline SIMD_CFUNC simd_short4 simd_make_short4(simd_short32 other) {
1944 return other.xyzw;
1945}
1946
1947/*! @abstract Concatenates `lo` and `hi` to form a vector of eight 16-bit
1948 * signed (twos-complement) integers. */
1949static inline SIMD_CFUNC simd_short8 simd_make_short8(simd_short4 lo, simd_short4 hi) {
1950 simd_short8 result;
1951 result.lo = lo;
1952 result.hi = hi;
1953 return result;
1954}
1955
1956/*! @abstract Zero-extends `other` to form a vector of eight 16-bit signed
1957 * (twos-complement) integers. */
1958static inline SIMD_CFUNC simd_short8 simd_make_short8(short other) {
1959 simd_short8 result = 0;
1960 result.x = other;
1961 return result;
1962}
1963
1964/*! @abstract Extends `other` to form a vector of eight 16-bit signed (twos-
1965 * complement) integers. The contents of the newly-created vector lanes are
1966 * unspecified. */
1967static inline SIMD_CFUNC simd_short8 simd_make_short8_undef(short other) {
1968 simd_short8 result;
1969 result.x = other;
1970 return result;
1971}
1972
1973/*! @abstract Zero-extends `other` to form a vector of eight 16-bit signed
1974 * (twos-complement) integers. */
1975static inline SIMD_CFUNC simd_short8 simd_make_short8(simd_short2 other) {
1976 simd_short8 result = 0;
1977 result.xy = other;
1978 return result;
1979}
1980
1981/*! @abstract Extends `other` to form a vector of eight 16-bit signed (twos-
1982 * complement) integers. The contents of the newly-created vector lanes are
1983 * unspecified. */
1984static inline SIMD_CFUNC simd_short8 simd_make_short8_undef(simd_short2 other) {
1985 simd_short8 result;
1986 result.xy = other;
1987 return result;
1988}
1989
1990/*! @abstract Zero-extends `other` to form a vector of eight 16-bit signed
1991 * (twos-complement) integers. */
1992static inline SIMD_CFUNC simd_short8 simd_make_short8(simd_short3 other) {
1993 simd_short8 result = 0;
1994 result.xyz = other;
1995 return result;
1996}
1997
1998/*! @abstract Extends `other` to form a vector of eight 16-bit signed (twos-
1999 * complement) integers. The contents of the newly-created vector lanes are
2000 * unspecified. */
2001static inline SIMD_CFUNC simd_short8 simd_make_short8_undef(simd_short3 other) {
2002 simd_short8 result;
2003 result.xyz = other;
2004 return result;
2005}
2006
2007/*! @abstract Zero-extends `other` to form a vector of eight 16-bit signed
2008 * (twos-complement) integers. */
2009static inline SIMD_CFUNC simd_short8 simd_make_short8(simd_short4 other) {
2010 simd_short8 result = 0;
2011 result.xyzw = other;
2012 return result;
2013}
2014
2015/*! @abstract Extends `other` to form a vector of eight 16-bit signed (twos-
2016 * complement) integers. The contents of the newly-created vector lanes are
2017 * unspecified. */
2018static inline SIMD_CFUNC simd_short8 simd_make_short8_undef(simd_short4 other) {
2019 simd_short8 result;
2020 result.xyzw = other;
2021 return result;
2022}
2023
2024/*! @abstract Returns `other` unmodified. This function is a convenience for
2025 * templated and autogenerated code. */
2026static inline SIMD_CFUNC simd_short8 simd_make_short8(simd_short8 other) {
2027 return other;
2028}
2029
2030/*! @abstract Truncates `other` to form a vector of eight 16-bit signed
2031 * (twos-complement) integers. */
2032static inline SIMD_CFUNC simd_short8 simd_make_short8(simd_short16 other) {
2033 return simd_make_short8(other.lo);
2034}
2035
2036/*! @abstract Truncates `other` to form a vector of eight 16-bit signed
2037 * (twos-complement) integers. */
2038static inline SIMD_CFUNC simd_short8 simd_make_short8(simd_short32 other) {
2039 return simd_make_short8(other.lo);
2040}
2041
2042/*! @abstract Concatenates `lo` and `hi` to form a vector of sixteen 16-bit
2043 * signed (twos-complement) integers. */
2044static inline SIMD_CFUNC simd_short16 simd_make_short16(simd_short8 lo, simd_short8 hi) {
2045 simd_short16 result;
2046 result.lo = lo;
2047 result.hi = hi;
2048 return result;
2049}
2050
2051/*! @abstract Zero-extends `other` to form a vector of sixteen 16-bit signed
2052 * (twos-complement) integers. */
2053static inline SIMD_CFUNC simd_short16 simd_make_short16(short other) {
2054 simd_short16 result = 0;
2055 result.x = other;
2056 return result;
2057}
2058
2059/*! @abstract Extends `other` to form a vector of sixteen 16-bit signed
2060 * (twos-complement) integers. The contents of the newly-created vector
2061 * lanes are unspecified. */
2062static inline SIMD_CFUNC simd_short16 simd_make_short16_undef(short other) {
2063 simd_short16 result;
2064 result.x = other;
2065 return result;
2066}
2067
2068/*! @abstract Zero-extends `other` to form a vector of sixteen 16-bit signed
2069 * (twos-complement) integers. */
2070static inline SIMD_CFUNC simd_short16 simd_make_short16(simd_short2 other) {
2071 simd_short16 result = 0;
2072 result.xy = other;
2073 return result;
2074}
2075
2076/*! @abstract Extends `other` to form a vector of sixteen 16-bit signed
2077 * (twos-complement) integers. The contents of the newly-created vector
2078 * lanes are unspecified. */
2079static inline SIMD_CFUNC simd_short16 simd_make_short16_undef(simd_short2 other) {
2080 simd_short16 result;
2081 result.xy = other;
2082 return result;
2083}
2084
2085/*! @abstract Zero-extends `other` to form a vector of sixteen 16-bit signed
2086 * (twos-complement) integers. */
2087static inline SIMD_CFUNC simd_short16 simd_make_short16(simd_short3 other) {
2088 simd_short16 result = 0;
2089 result.xyz = other;
2090 return result;
2091}
2092
2093/*! @abstract Extends `other` to form a vector of sixteen 16-bit signed
2094 * (twos-complement) integers. The contents of the newly-created vector
2095 * lanes are unspecified. */
2096static inline SIMD_CFUNC simd_short16 simd_make_short16_undef(simd_short3 other) {
2097 simd_short16 result;
2098 result.xyz = other;
2099 return result;
2100}
2101
2102/*! @abstract Zero-extends `other` to form a vector of sixteen 16-bit signed
2103 * (twos-complement) integers. */
2104static inline SIMD_CFUNC simd_short16 simd_make_short16(simd_short4 other) {
2105 simd_short16 result = 0;
2106 result.xyzw = other;
2107 return result;
2108}
2109
2110/*! @abstract Extends `other` to form a vector of sixteen 16-bit signed
2111 * (twos-complement) integers. The contents of the newly-created vector
2112 * lanes are unspecified. */
2113static inline SIMD_CFUNC simd_short16 simd_make_short16_undef(simd_short4 other) {
2114 simd_short16 result;
2115 result.xyzw = other;
2116 return result;
2117}
2118
2119/*! @abstract Zero-extends `other` to form a vector of sixteen 16-bit signed
2120 * (twos-complement) integers. */
2121static inline SIMD_CFUNC simd_short16 simd_make_short16(simd_short8 other) {
2122 simd_short16 result = 0;
2123 result.lo = simd_make_short8(other);
2124 return result;
2125}
2126
2127/*! @abstract Extends `other` to form a vector of sixteen 16-bit signed
2128 * (twos-complement) integers. The contents of the newly-created vector
2129 * lanes are unspecified. */
2130static inline SIMD_CFUNC simd_short16 simd_make_short16_undef(simd_short8 other) {
2131 simd_short16 result;
2132 result.lo = simd_make_short8(other);
2133 return result;
2134}
2135
2136/*! @abstract Returns `other` unmodified. This function is a convenience for
2137 * templated and autogenerated code. */
2138static inline SIMD_CFUNC simd_short16 simd_make_short16(simd_short16 other) {
2139 return other;
2140}
2141
2142/*! @abstract Truncates `other` to form a vector of sixteen 16-bit signed
2143 * (twos-complement) integers. */
2144static inline SIMD_CFUNC simd_short16 simd_make_short16(simd_short32 other) {
2145 return simd_make_short16(other.lo);
2146}
2147
2148/*! @abstract Concatenates `lo` and `hi` to form a vector of thirty-two
2149 * 16-bit signed (twos-complement) integers. */
2150static inline SIMD_CFUNC simd_short32 simd_make_short32(simd_short16 lo, simd_short16 hi) {
2151 simd_short32 result;
2152 result.lo = lo;
2153 result.hi = hi;
2154 return result;
2155}
2156
2157/*! @abstract Zero-extends `other` to form a vector of thirty-two 16-bit
2158 * signed (twos-complement) integers. */
2159static inline SIMD_CFUNC simd_short32 simd_make_short32(short other) {
2160 simd_short32 result = 0;
2161 result.x = other;
2162 return result;
2163}
2164
2165/*! @abstract Extends `other` to form a vector of thirty-two 16-bit signed
2166 * (twos-complement) integers. The contents of the newly-created vector
2167 * lanes are unspecified. */
2168static inline SIMD_CFUNC simd_short32 simd_make_short32_undef(short other) {
2169 simd_short32 result;
2170 result.x = other;
2171 return result;
2172}
2173
2174/*! @abstract Zero-extends `other` to form a vector of thirty-two 16-bit
2175 * signed (twos-complement) integers. */
2176static inline SIMD_CFUNC simd_short32 simd_make_short32(simd_short2 other) {
2177 simd_short32 result = 0;
2178 result.xy = other;
2179 return result;
2180}
2181
2182/*! @abstract Extends `other` to form a vector of thirty-two 16-bit signed
2183 * (twos-complement) integers. The contents of the newly-created vector
2184 * lanes are unspecified. */
2185static inline SIMD_CFUNC simd_short32 simd_make_short32_undef(simd_short2 other) {
2186 simd_short32 result;
2187 result.xy = other;
2188 return result;
2189}
2190
2191/*! @abstract Zero-extends `other` to form a vector of thirty-two 16-bit
2192 * signed (twos-complement) integers. */
2193static inline SIMD_CFUNC simd_short32 simd_make_short32(simd_short3 other) {
2194 simd_short32 result = 0;
2195 result.xyz = other;
2196 return result;
2197}
2198
2199/*! @abstract Extends `other` to form a vector of thirty-two 16-bit signed
2200 * (twos-complement) integers. The contents of the newly-created vector
2201 * lanes are unspecified. */
2202static inline SIMD_CFUNC simd_short32 simd_make_short32_undef(simd_short3 other) {
2203 simd_short32 result;
2204 result.xyz = other;
2205 return result;
2206}
2207
2208/*! @abstract Zero-extends `other` to form a vector of thirty-two 16-bit
2209 * signed (twos-complement) integers. */
2210static inline SIMD_CFUNC simd_short32 simd_make_short32(simd_short4 other) {
2211 simd_short32 result = 0;
2212 result.xyzw = other;
2213 return result;
2214}
2215
2216/*! @abstract Extends `other` to form a vector of thirty-two 16-bit signed
2217 * (twos-complement) integers. The contents of the newly-created vector
2218 * lanes are unspecified. */
2219static inline SIMD_CFUNC simd_short32 simd_make_short32_undef(simd_short4 other) {
2220 simd_short32 result;
2221 result.xyzw = other;
2222 return result;
2223}
2224
2225/*! @abstract Zero-extends `other` to form a vector of thirty-two 16-bit
2226 * signed (twos-complement) integers. */
2227static inline SIMD_CFUNC simd_short32 simd_make_short32(simd_short8 other) {
2228 simd_short32 result = 0;
2229 result.lo = simd_make_short16(other);
2230 return result;
2231}
2232
2233/*! @abstract Extends `other` to form a vector of thirty-two 16-bit signed
2234 * (twos-complement) integers. The contents of the newly-created vector
2235 * lanes are unspecified. */
2236static inline SIMD_CFUNC simd_short32 simd_make_short32_undef(simd_short8 other) {
2237 simd_short32 result;
2238 result.lo = simd_make_short16(other);
2239 return result;
2240}
2241
2242/*! @abstract Zero-extends `other` to form a vector of thirty-two 16-bit
2243 * signed (twos-complement) integers. */
2244static inline SIMD_CFUNC simd_short32 simd_make_short32(simd_short16 other) {
2245 simd_short32 result = 0;
2246 result.lo = simd_make_short16(other);
2247 return result;
2248}
2249
2250/*! @abstract Extends `other` to form a vector of thirty-two 16-bit signed
2251 * (twos-complement) integers. The contents of the newly-created vector
2252 * lanes are unspecified. */
2253static inline SIMD_CFUNC simd_short32 simd_make_short32_undef(simd_short16 other) {
2254 simd_short32 result;
2255 result.lo = simd_make_short16(other);
2256 return result;
2257}
2258
2259/*! @abstract Returns `other` unmodified. This function is a convenience for
2260 * templated and autogenerated code. */
2261static inline SIMD_CFUNC simd_short32 simd_make_short32(simd_short32 other) {
2262 return other;
2263}
2264
2265/*! @abstract Concatenates `x` and `y` to form a vector of two 16-bit
2266 * unsigned integers. */
2267static inline SIMD_CFUNC simd_ushort2 simd_make_ushort2(unsigned short x, unsigned short y) {
2268 simd_ushort2 result;
2269 result.x = x;
2270 result.y = y;
2271 return result;
2272}
2273
2274/*! @abstract Zero-extends `other` to form a vector of two 16-bit unsigned
2275 * integers. */
2276static inline SIMD_CFUNC simd_ushort2 simd_make_ushort2(unsigned short other) {
2277 simd_ushort2 result = 0;
2278 result.x = other;
2279 return result;
2280}
2281
2282/*! @abstract Extends `other` to form a vector of two 16-bit unsigned
2283 * integers. The contents of the newly-created vector lanes are
2284 * unspecified. */
2285static inline SIMD_CFUNC simd_ushort2 simd_make_ushort2_undef(unsigned short other) {
2286 simd_ushort2 result;
2287 result.x = other;
2288 return result;
2289}
2290
2291/*! @abstract Returns `other` unmodified. This function is a convenience for
2292 * templated and autogenerated code. */
2293static inline SIMD_CFUNC simd_ushort2 simd_make_ushort2(simd_ushort2 other) {
2294 return other;
2295}
2296
2297/*! @abstract Truncates `other` to form a vector of two 16-bit unsigned
2298 * integers. */
2299static inline SIMD_CFUNC simd_ushort2 simd_make_ushort2(simd_ushort3 other) {
2300 return other.xy;
2301}
2302
2303/*! @abstract Truncates `other` to form a vector of two 16-bit unsigned
2304 * integers. */
2305static inline SIMD_CFUNC simd_ushort2 simd_make_ushort2(simd_ushort4 other) {
2306 return other.xy;
2307}
2308
2309/*! @abstract Truncates `other` to form a vector of two 16-bit unsigned
2310 * integers. */
2311static inline SIMD_CFUNC simd_ushort2 simd_make_ushort2(simd_ushort8 other) {
2312 return other.xy;
2313}
2314
2315/*! @abstract Truncates `other` to form a vector of two 16-bit unsigned
2316 * integers. */
2317static inline SIMD_CFUNC simd_ushort2 simd_make_ushort2(simd_ushort16 other) {
2318 return other.xy;
2319}
2320
2321/*! @abstract Truncates `other` to form a vector of two 16-bit unsigned
2322 * integers. */
2323static inline SIMD_CFUNC simd_ushort2 simd_make_ushort2(simd_ushort32 other) {
2324 return other.xy;
2325}
2326
2327/*! @abstract Concatenates `x`, `y` and `z` to form a vector of three 16-bit
2328 * unsigned integers. */
2329static inline SIMD_CFUNC simd_ushort3 simd_make_ushort3(unsigned short x, unsigned short y, unsigned short z) {
2330 simd_ushort3 result;
2331 result.x = x;
2332 result.y = y;
2333 result.z = z;
2334 return result;
2335}
2336
2337/*! @abstract Concatenates `x` and `yz` to form a vector of three 16-bit
2338 * unsigned integers. */
2339static inline SIMD_CFUNC simd_ushort3 simd_make_ushort3(unsigned short x, simd_ushort2 yz) {
2340 simd_ushort3 result;
2341 result.x = x;
2342 result.yz = yz;
2343 return result;
2344}
2345
2346/*! @abstract Concatenates `xy` and `z` to form a vector of three 16-bit
2347 * unsigned integers. */
2348static inline SIMD_CFUNC simd_ushort3 simd_make_ushort3(simd_ushort2 xy, unsigned short z) {
2349 simd_ushort3 result;
2350 result.xy = xy;
2351 result.z = z;
2352 return result;
2353}
2354
2355/*! @abstract Zero-extends `other` to form a vector of three 16-bit unsigned
2356 * integers. */
2357static inline SIMD_CFUNC simd_ushort3 simd_make_ushort3(unsigned short other) {
2358 simd_ushort3 result = 0;
2359 result.x = other;
2360 return result;
2361}
2362
2363/*! @abstract Extends `other` to form a vector of three 16-bit unsigned
2364 * integers. The contents of the newly-created vector lanes are
2365 * unspecified. */
2366static inline SIMD_CFUNC simd_ushort3 simd_make_ushort3_undef(unsigned short other) {
2367 simd_ushort3 result;
2368 result.x = other;
2369 return result;
2370}
2371
2372/*! @abstract Zero-extends `other` to form a vector of three 16-bit unsigned
2373 * integers. */
2374static inline SIMD_CFUNC simd_ushort3 simd_make_ushort3(simd_ushort2 other) {
2375 simd_ushort3 result = 0;
2376 result.xy = other;
2377 return result;
2378}
2379
2380/*! @abstract Extends `other` to form a vector of three 16-bit unsigned
2381 * integers. The contents of the newly-created vector lanes are
2382 * unspecified. */
2383static inline SIMD_CFUNC simd_ushort3 simd_make_ushort3_undef(simd_ushort2 other) {
2384 simd_ushort3 result;
2385 result.xy = other;
2386 return result;
2387}
2388
2389/*! @abstract Returns `other` unmodified. This function is a convenience for
2390 * templated and autogenerated code. */
2391static inline SIMD_CFUNC simd_ushort3 simd_make_ushort3(simd_ushort3 other) {
2392 return other;
2393}
2394
2395/*! @abstract Truncates `other` to form a vector of three 16-bit unsigned
2396 * integers. */
2397static inline SIMD_CFUNC simd_ushort3 simd_make_ushort3(simd_ushort4 other) {
2398 return other.xyz;
2399}
2400
2401/*! @abstract Truncates `other` to form a vector of three 16-bit unsigned
2402 * integers. */
2403static inline SIMD_CFUNC simd_ushort3 simd_make_ushort3(simd_ushort8 other) {
2404 return other.xyz;
2405}
2406
2407/*! @abstract Truncates `other` to form a vector of three 16-bit unsigned
2408 * integers. */
2409static inline SIMD_CFUNC simd_ushort3 simd_make_ushort3(simd_ushort16 other) {
2410 return other.xyz;
2411}
2412
2413/*! @abstract Truncates `other` to form a vector of three 16-bit unsigned
2414 * integers. */
2415static inline SIMD_CFUNC simd_ushort3 simd_make_ushort3(simd_ushort32 other) {
2416 return other.xyz;
2417}
2418
2419/*! @abstract Concatenates `x`, `y`, `z` and `w` to form a vector of four
2420 * 16-bit unsigned integers. */
2421static inline SIMD_CFUNC simd_ushort4 simd_make_ushort4(unsigned short x, unsigned short y, unsigned short z, unsigned short w) {
2422 simd_ushort4 result;
2423 result.x = x;
2424 result.y = y;
2425 result.z = z;
2426 result.w = w;
2427 return result;
2428}
2429
2430/*! @abstract Concatenates `x`, `y` and `zw` to form a vector of four 16-bit
2431 * unsigned integers. */
2432static inline SIMD_CFUNC simd_ushort4 simd_make_ushort4(unsigned short x, unsigned short y, simd_ushort2 zw) {
2433 simd_ushort4 result;
2434 result.x = x;
2435 result.y = y;
2436 result.zw = zw;
2437 return result;
2438}
2439
2440/*! @abstract Concatenates `x`, `yz` and `w` to form a vector of four 16-bit
2441 * unsigned integers. */
2442static inline SIMD_CFUNC simd_ushort4 simd_make_ushort4(unsigned short x, simd_ushort2 yz, unsigned short w) {
2443 simd_ushort4 result;
2444 result.x = x;
2445 result.yz = yz;
2446 result.w = w;
2447 return result;
2448}
2449
2450/*! @abstract Concatenates `xy`, `z` and `w` to form a vector of four 16-bit
2451 * unsigned integers. */
2452static inline SIMD_CFUNC simd_ushort4 simd_make_ushort4(simd_ushort2 xy, unsigned short z, unsigned short w) {
2453 simd_ushort4 result;
2454 result.xy = xy;
2455 result.z = z;
2456 result.w = w;
2457 return result;
2458}
2459
2460/*! @abstract Concatenates `x` and `yzw` to form a vector of four 16-bit
2461 * unsigned integers. */
2462static inline SIMD_CFUNC simd_ushort4 simd_make_ushort4(unsigned short x, simd_ushort3 yzw) {
2463 simd_ushort4 result;
2464 result.x = x;
2465 result.yzw = yzw;
2466 return result;
2467}
2468
2469/*! @abstract Concatenates `xy` and `zw` to form a vector of four 16-bit
2470 * unsigned integers. */
2471static inline SIMD_CFUNC simd_ushort4 simd_make_ushort4(simd_ushort2 xy, simd_ushort2 zw) {
2472 simd_ushort4 result;
2473 result.xy = xy;
2474 result.zw = zw;
2475 return result;
2476}
2477
2478/*! @abstract Concatenates `xyz` and `w` to form a vector of four 16-bit
2479 * unsigned integers. */
2480static inline SIMD_CFUNC simd_ushort4 simd_make_ushort4(simd_ushort3 xyz, unsigned short w) {
2481 simd_ushort4 result;
2482 result.xyz = xyz;
2483 result.w = w;
2484 return result;
2485}
2486
2487/*! @abstract Zero-extends `other` to form a vector of four 16-bit unsigned
2488 * integers. */
2489static inline SIMD_CFUNC simd_ushort4 simd_make_ushort4(unsigned short other) {
2490 simd_ushort4 result = 0;
2491 result.x = other;
2492 return result;
2493}
2494
2495/*! @abstract Extends `other` to form a vector of four 16-bit unsigned
2496 * integers. The contents of the newly-created vector lanes are
2497 * unspecified. */
2498static inline SIMD_CFUNC simd_ushort4 simd_make_ushort4_undef(unsigned short other) {
2499 simd_ushort4 result;
2500 result.x = other;
2501 return result;
2502}
2503
2504/*! @abstract Zero-extends `other` to form a vector of four 16-bit unsigned
2505 * integers. */
2506static inline SIMD_CFUNC simd_ushort4 simd_make_ushort4(simd_ushort2 other) {
2507 simd_ushort4 result = 0;
2508 result.xy = other;
2509 return result;
2510}
2511
2512/*! @abstract Extends `other` to form a vector of four 16-bit unsigned
2513 * integers. The contents of the newly-created vector lanes are
2514 * unspecified. */
2515static inline SIMD_CFUNC simd_ushort4 simd_make_ushort4_undef(simd_ushort2 other) {
2516 simd_ushort4 result;
2517 result.xy = other;
2518 return result;
2519}
2520
2521/*! @abstract Zero-extends `other` to form a vector of four 16-bit unsigned
2522 * integers. */
2523static inline SIMD_CFUNC simd_ushort4 simd_make_ushort4(simd_ushort3 other) {
2524 simd_ushort4 result = 0;
2525 result.xyz = other;
2526 return result;
2527}
2528
2529/*! @abstract Extends `other` to form a vector of four 16-bit unsigned
2530 * integers. The contents of the newly-created vector lanes are
2531 * unspecified. */
2532static inline SIMD_CFUNC simd_ushort4 simd_make_ushort4_undef(simd_ushort3 other) {
2533 simd_ushort4 result;
2534 result.xyz = other;
2535 return result;
2536}
2537
2538/*! @abstract Returns `other` unmodified. This function is a convenience for
2539 * templated and autogenerated code. */
2540static inline SIMD_CFUNC simd_ushort4 simd_make_ushort4(simd_ushort4 other) {
2541 return other;
2542}
2543
2544/*! @abstract Truncates `other` to form a vector of four 16-bit unsigned
2545 * integers. */
2546static inline SIMD_CFUNC simd_ushort4 simd_make_ushort4(simd_ushort8 other) {
2547 return other.xyzw;
2548}
2549
2550/*! @abstract Truncates `other` to form a vector of four 16-bit unsigned
2551 * integers. */
2552static inline SIMD_CFUNC simd_ushort4 simd_make_ushort4(simd_ushort16 other) {
2553 return other.xyzw;
2554}
2555
2556/*! @abstract Truncates `other` to form a vector of four 16-bit unsigned
2557 * integers. */
2558static inline SIMD_CFUNC simd_ushort4 simd_make_ushort4(simd_ushort32 other) {
2559 return other.xyzw;
2560}
2561
2562/*! @abstract Concatenates `lo` and `hi` to form a vector of eight 16-bit
2563 * unsigned integers. */
2564static inline SIMD_CFUNC simd_ushort8 simd_make_ushort8(simd_ushort4 lo, simd_ushort4 hi) {
2565 simd_ushort8 result;
2566 result.lo = lo;
2567 result.hi = hi;
2568 return result;
2569}
2570
2571/*! @abstract Zero-extends `other` to form a vector of eight 16-bit unsigned
2572 * integers. */
2573static inline SIMD_CFUNC simd_ushort8 simd_make_ushort8(unsigned short other) {
2574 simd_ushort8 result = 0;
2575 result.x = other;
2576 return result;
2577}
2578
2579/*! @abstract Extends `other` to form a vector of eight 16-bit unsigned
2580 * integers. The contents of the newly-created vector lanes are
2581 * unspecified. */
2582static inline SIMD_CFUNC simd_ushort8 simd_make_ushort8_undef(unsigned short other) {
2583 simd_ushort8 result;
2584 result.x = other;
2585 return result;
2586}
2587
2588/*! @abstract Zero-extends `other` to form a vector of eight 16-bit unsigned
2589 * integers. */
2590static inline SIMD_CFUNC simd_ushort8 simd_make_ushort8(simd_ushort2 other) {
2591 simd_ushort8 result = 0;
2592 result.xy = other;
2593 return result;
2594}
2595
2596/*! @abstract Extends `other` to form a vector of eight 16-bit unsigned
2597 * integers. The contents of the newly-created vector lanes are
2598 * unspecified. */
2599static inline SIMD_CFUNC simd_ushort8 simd_make_ushort8_undef(simd_ushort2 other) {
2600 simd_ushort8 result;
2601 result.xy = other;
2602 return result;
2603}
2604
2605/*! @abstract Zero-extends `other` to form a vector of eight 16-bit unsigned
2606 * integers. */
2607static inline SIMD_CFUNC simd_ushort8 simd_make_ushort8(simd_ushort3 other) {
2608 simd_ushort8 result = 0;
2609 result.xyz = other;
2610 return result;
2611}
2612
2613/*! @abstract Extends `other` to form a vector of eight 16-bit unsigned
2614 * integers. The contents of the newly-created vector lanes are
2615 * unspecified. */
2616static inline SIMD_CFUNC simd_ushort8 simd_make_ushort8_undef(simd_ushort3 other) {
2617 simd_ushort8 result;
2618 result.xyz = other;
2619 return result;
2620}
2621
2622/*! @abstract Zero-extends `other` to form a vector of eight 16-bit unsigned
2623 * integers. */
2624static inline SIMD_CFUNC simd_ushort8 simd_make_ushort8(simd_ushort4 other) {
2625 simd_ushort8 result = 0;
2626 result.xyzw = other;
2627 return result;
2628}
2629
2630/*! @abstract Extends `other` to form a vector of eight 16-bit unsigned
2631 * integers. The contents of the newly-created vector lanes are
2632 * unspecified. */
2633static inline SIMD_CFUNC simd_ushort8 simd_make_ushort8_undef(simd_ushort4 other) {
2634 simd_ushort8 result;
2635 result.xyzw = other;
2636 return result;
2637}
2638
2639/*! @abstract Returns `other` unmodified. This function is a convenience for
2640 * templated and autogenerated code. */
2641static inline SIMD_CFUNC simd_ushort8 simd_make_ushort8(simd_ushort8 other) {
2642 return other;
2643}
2644
2645/*! @abstract Truncates `other` to form a vector of eight 16-bit unsigned
2646 * integers. */
2647static inline SIMD_CFUNC simd_ushort8 simd_make_ushort8(simd_ushort16 other) {
2648 return simd_make_ushort8(other.lo);
2649}
2650
2651/*! @abstract Truncates `other` to form a vector of eight 16-bit unsigned
2652 * integers. */
2653static inline SIMD_CFUNC simd_ushort8 simd_make_ushort8(simd_ushort32 other) {
2654 return simd_make_ushort8(other.lo);
2655}
2656
2657/*! @abstract Concatenates `lo` and `hi` to form a vector of sixteen 16-bit
2658 * unsigned integers. */
2659static inline SIMD_CFUNC simd_ushort16 simd_make_ushort16(simd_ushort8 lo, simd_ushort8 hi) {
2660 simd_ushort16 result;
2661 result.lo = lo;
2662 result.hi = hi;
2663 return result;
2664}
2665
2666/*! @abstract Zero-extends `other` to form a vector of sixteen 16-bit
2667 * unsigned integers. */
2668static inline SIMD_CFUNC simd_ushort16 simd_make_ushort16(unsigned short other) {
2669 simd_ushort16 result = 0;
2670 result.x = other;
2671 return result;
2672}
2673
2674/*! @abstract Extends `other` to form a vector of sixteen 16-bit unsigned
2675 * integers. The contents of the newly-created vector lanes are
2676 * unspecified. */
2677static inline SIMD_CFUNC simd_ushort16 simd_make_ushort16_undef(unsigned short other) {
2678 simd_ushort16 result;
2679 result.x = other;
2680 return result;
2681}
2682
2683/*! @abstract Zero-extends `other` to form a vector of sixteen 16-bit
2684 * unsigned integers. */
2685static inline SIMD_CFUNC simd_ushort16 simd_make_ushort16(simd_ushort2 other) {
2686 simd_ushort16 result = 0;
2687 result.xy = other;
2688 return result;
2689}
2690
2691/*! @abstract Extends `other` to form a vector of sixteen 16-bit unsigned
2692 * integers. The contents of the newly-created vector lanes are
2693 * unspecified. */
2694static inline SIMD_CFUNC simd_ushort16 simd_make_ushort16_undef(simd_ushort2 other) {
2695 simd_ushort16 result;
2696 result.xy = other;
2697 return result;
2698}
2699
2700/*! @abstract Zero-extends `other` to form a vector of sixteen 16-bit
2701 * unsigned integers. */
2702static inline SIMD_CFUNC simd_ushort16 simd_make_ushort16(simd_ushort3 other) {
2703 simd_ushort16 result = 0;
2704 result.xyz = other;
2705 return result;
2706}
2707
2708/*! @abstract Extends `other` to form a vector of sixteen 16-bit unsigned
2709 * integers. The contents of the newly-created vector lanes are
2710 * unspecified. */
2711static inline SIMD_CFUNC simd_ushort16 simd_make_ushort16_undef(simd_ushort3 other) {
2712 simd_ushort16 result;
2713 result.xyz = other;
2714 return result;
2715}
2716
2717/*! @abstract Zero-extends `other` to form a vector of sixteen 16-bit
2718 * unsigned integers. */
2719static inline SIMD_CFUNC simd_ushort16 simd_make_ushort16(simd_ushort4 other) {
2720 simd_ushort16 result = 0;
2721 result.xyzw = other;
2722 return result;
2723}
2724
2725/*! @abstract Extends `other` to form a vector of sixteen 16-bit unsigned
2726 * integers. The contents of the newly-created vector lanes are
2727 * unspecified. */
2728static inline SIMD_CFUNC simd_ushort16 simd_make_ushort16_undef(simd_ushort4 other) {
2729 simd_ushort16 result;
2730 result.xyzw = other;
2731 return result;
2732}
2733
2734/*! @abstract Zero-extends `other` to form a vector of sixteen 16-bit
2735 * unsigned integers. */
2736static inline SIMD_CFUNC simd_ushort16 simd_make_ushort16(simd_ushort8 other) {
2737 simd_ushort16 result = 0;
2738 result.lo = simd_make_ushort8(other);
2739 return result;
2740}
2741
2742/*! @abstract Extends `other` to form a vector of sixteen 16-bit unsigned
2743 * integers. The contents of the newly-created vector lanes are
2744 * unspecified. */
2745static inline SIMD_CFUNC simd_ushort16 simd_make_ushort16_undef(simd_ushort8 other) {
2746 simd_ushort16 result;
2747 result.lo = simd_make_ushort8(other);
2748 return result;
2749}
2750
2751/*! @abstract Returns `other` unmodified. This function is a convenience for
2752 * templated and autogenerated code. */
2753static inline SIMD_CFUNC simd_ushort16 simd_make_ushort16(simd_ushort16 other) {
2754 return other;
2755}
2756
2757/*! @abstract Truncates `other` to form a vector of sixteen 16-bit unsigned
2758 * integers. */
2759static inline SIMD_CFUNC simd_ushort16 simd_make_ushort16(simd_ushort32 other) {
2760 return simd_make_ushort16(other.lo);
2761}
2762
2763/*! @abstract Concatenates `lo` and `hi` to form a vector of thirty-two
2764 * 16-bit unsigned integers. */
2765static inline SIMD_CFUNC simd_ushort32 simd_make_ushort32(simd_ushort16 lo, simd_ushort16 hi) {
2766 simd_ushort32 result;
2767 result.lo = lo;
2768 result.hi = hi;
2769 return result;
2770}
2771
2772/*! @abstract Zero-extends `other` to form a vector of thirty-two 16-bit
2773 * unsigned integers. */
2774static inline SIMD_CFUNC simd_ushort32 simd_make_ushort32(unsigned short other) {
2775 simd_ushort32 result = 0;
2776 result.x = other;
2777 return result;
2778}
2779
2780/*! @abstract Extends `other` to form a vector of thirty-two 16-bit unsigned
2781 * integers. The contents of the newly-created vector lanes are
2782 * unspecified. */
2783static inline SIMD_CFUNC simd_ushort32 simd_make_ushort32_undef(unsigned short other) {
2784 simd_ushort32 result;
2785 result.x = other;
2786 return result;
2787}
2788
2789/*! @abstract Zero-extends `other` to form a vector of thirty-two 16-bit
2790 * unsigned integers. */
2791static inline SIMD_CFUNC simd_ushort32 simd_make_ushort32(simd_ushort2 other) {
2792 simd_ushort32 result = 0;
2793 result.xy = other;
2794 return result;
2795}
2796
2797/*! @abstract Extends `other` to form a vector of thirty-two 16-bit unsigned
2798 * integers. The contents of the newly-created vector lanes are
2799 * unspecified. */
2800static inline SIMD_CFUNC simd_ushort32 simd_make_ushort32_undef(simd_ushort2 other) {
2801 simd_ushort32 result;
2802 result.xy = other;
2803 return result;
2804}
2805
2806/*! @abstract Zero-extends `other` to form a vector of thirty-two 16-bit
2807 * unsigned integers. */
2808static inline SIMD_CFUNC simd_ushort32 simd_make_ushort32(simd_ushort3 other) {
2809 simd_ushort32 result = 0;
2810 result.xyz = other;
2811 return result;
2812}
2813
2814/*! @abstract Extends `other` to form a vector of thirty-two 16-bit unsigned
2815 * integers. The contents of the newly-created vector lanes are
2816 * unspecified. */
2817static inline SIMD_CFUNC simd_ushort32 simd_make_ushort32_undef(simd_ushort3 other) {
2818 simd_ushort32 result;
2819 result.xyz = other;
2820 return result;
2821}
2822
2823/*! @abstract Zero-extends `other` to form a vector of thirty-two 16-bit
2824 * unsigned integers. */
2825static inline SIMD_CFUNC simd_ushort32 simd_make_ushort32(simd_ushort4 other) {
2826 simd_ushort32 result = 0;
2827 result.xyzw = other;
2828 return result;
2829}
2830
2831/*! @abstract Extends `other` to form a vector of thirty-two 16-bit unsigned
2832 * integers. The contents of the newly-created vector lanes are
2833 * unspecified. */
2834static inline SIMD_CFUNC simd_ushort32 simd_make_ushort32_undef(simd_ushort4 other) {
2835 simd_ushort32 result;
2836 result.xyzw = other;
2837 return result;
2838}
2839
2840/*! @abstract Zero-extends `other` to form a vector of thirty-two 16-bit
2841 * unsigned integers. */
2842static inline SIMD_CFUNC simd_ushort32 simd_make_ushort32(simd_ushort8 other) {
2843 simd_ushort32 result = 0;
2844 result.lo = simd_make_ushort16(other);
2845 return result;
2846}
2847
2848/*! @abstract Extends `other` to form a vector of thirty-two 16-bit unsigned
2849 * integers. The contents of the newly-created vector lanes are
2850 * unspecified. */
2851static inline SIMD_CFUNC simd_ushort32 simd_make_ushort32_undef(simd_ushort8 other) {
2852 simd_ushort32 result;
2853 result.lo = simd_make_ushort16(other);
2854 return result;
2855}
2856
2857/*! @abstract Zero-extends `other` to form a vector of thirty-two 16-bit
2858 * unsigned integers. */
2859static inline SIMD_CFUNC simd_ushort32 simd_make_ushort32(simd_ushort16 other) {
2860 simd_ushort32 result = 0;
2861 result.lo = simd_make_ushort16(other);
2862 return result;
2863}
2864
2865/*! @abstract Extends `other` to form a vector of thirty-two 16-bit unsigned
2866 * integers. The contents of the newly-created vector lanes are
2867 * unspecified. */
2868static inline SIMD_CFUNC simd_ushort32 simd_make_ushort32_undef(simd_ushort16 other) {
2869 simd_ushort32 result;
2870 result.lo = simd_make_ushort16(other);
2871 return result;
2872}
2873
2874/*! @abstract Returns `other` unmodified. This function is a convenience for
2875 * templated and autogenerated code. */
2876static inline SIMD_CFUNC simd_ushort32 simd_make_ushort32(simd_ushort32 other) {
2877 return other;
2878}
2879
2880/*! @abstract Concatenates `x` and `y` to form a vector of two 16-bit
2881 * floating-point numbers. */
2882static inline SIMD_CFUNC simd_half2 simd_make_half2(_Float16 x, _Float16 y) {
2883 simd_half2 result;
2884 result.x = x;
2885 result.y = y;
2886 return result;
2887}
2888
2889/*! @abstract Zero-extends `other` to form a vector of two 16-bit floating-
2890 * point numbers. */
2891static inline SIMD_CFUNC simd_half2 simd_make_half2(_Float16 other) {
2892 simd_half2 result = 0;
2893 result.x = other;
2894 return result;
2895}
2896
2897/*! @abstract Extends `other` to form a vector of two 16-bit floating-point
2898 * numbers. The contents of the newly-created vector lanes are unspecified. */
2899static inline SIMD_CFUNC simd_half2 simd_make_half2_undef(_Float16 other) {
2900 simd_half2 result;
2901 result.x = other;
2902 return result;
2903}
2904
2905/*! @abstract Returns `other` unmodified. This function is a convenience for
2906 * templated and autogenerated code. */
2907static inline SIMD_CFUNC simd_half2 simd_make_half2(simd_half2 other) {
2908 return other;
2909}
2910
2911/*! @abstract Truncates `other` to form a vector of two 16-bit floating-
2912 * point numbers. */
2913static inline SIMD_CFUNC simd_half2 simd_make_half2(simd_half3 other) {
2914 return other.xy;
2915}
2916
2917/*! @abstract Truncates `other` to form a vector of two 16-bit floating-
2918 * point numbers. */
2919static inline SIMD_CFUNC simd_half2 simd_make_half2(simd_half4 other) {
2920 return other.xy;
2921}
2922
2923/*! @abstract Truncates `other` to form a vector of two 16-bit floating-
2924 * point numbers. */
2925static inline SIMD_CFUNC simd_half2 simd_make_half2(simd_half8 other) {
2926 return other.xy;
2927}
2928
2929/*! @abstract Truncates `other` to form a vector of two 16-bit floating-
2930 * point numbers. */
2931static inline SIMD_CFUNC simd_half2 simd_make_half2(simd_half16 other) {
2932 return other.xy;
2933}
2934
2935/*! @abstract Truncates `other` to form a vector of two 16-bit floating-
2936 * point numbers. */
2937static inline SIMD_CFUNC simd_half2 simd_make_half2(simd_half32 other) {
2938 return other.xy;
2939}
2940
2941/*! @abstract Concatenates `x`, `y` and `z` to form a vector of three 16-bit
2942 * floating-point numbers. */
2943static inline SIMD_CFUNC simd_half3 simd_make_half3(_Float16 x, _Float16 y, _Float16 z) {
2944 simd_half3 result;
2945 result.x = x;
2946 result.y = y;
2947 result.z = z;
2948 return result;
2949}
2950
2951/*! @abstract Concatenates `x` and `yz` to form a vector of three 16-bit
2952 * floating-point numbers. */
2953static inline SIMD_CFUNC simd_half3 simd_make_half3(_Float16 x, simd_half2 yz) {
2954 simd_half3 result;
2955 result.x = x;
2956 result.yz = yz;
2957 return result;
2958}
2959
2960/*! @abstract Concatenates `xy` and `z` to form a vector of three 16-bit
2961 * floating-point numbers. */
2962static inline SIMD_CFUNC simd_half3 simd_make_half3(simd_half2 xy, _Float16 z) {
2963 simd_half3 result;
2964 result.xy = xy;
2965 result.z = z;
2966 return result;
2967}
2968
2969/*! @abstract Zero-extends `other` to form a vector of three 16-bit
2970 * floating-point numbers. */
2971static inline SIMD_CFUNC simd_half3 simd_make_half3(_Float16 other) {
2972 simd_half3 result = 0;
2973 result.x = other;
2974 return result;
2975}
2976
2977/*! @abstract Extends `other` to form a vector of three 16-bit floating-
2978 * point numbers. The contents of the newly-created vector lanes are
2979 * unspecified. */
2980static inline SIMD_CFUNC simd_half3 simd_make_half3_undef(_Float16 other) {
2981 simd_half3 result;
2982 result.x = other;
2983 return result;
2984}
2985
2986/*! @abstract Zero-extends `other` to form a vector of three 16-bit
2987 * floating-point numbers. */
2988static inline SIMD_CFUNC simd_half3 simd_make_half3(simd_half2 other) {
2989 simd_half3 result = 0;
2990 result.xy = other;
2991 return result;
2992}
2993
2994/*! @abstract Extends `other` to form a vector of three 16-bit floating-
2995 * point numbers. The contents of the newly-created vector lanes are
2996 * unspecified. */
2997static inline SIMD_CFUNC simd_half3 simd_make_half3_undef(simd_half2 other) {
2998 simd_half3 result;
2999 result.xy = other;
3000 return result;
3001}
3002
3003/*! @abstract Returns `other` unmodified. This function is a convenience for
3004 * templated and autogenerated code. */
3005static inline SIMD_CFUNC simd_half3 simd_make_half3(simd_half3 other) {
3006 return other;
3007}
3008
3009/*! @abstract Truncates `other` to form a vector of three 16-bit floating-
3010 * point numbers. */
3011static inline SIMD_CFUNC simd_half3 simd_make_half3(simd_half4 other) {
3012 return other.xyz;
3013}
3014
3015/*! @abstract Truncates `other` to form a vector of three 16-bit floating-
3016 * point numbers. */
3017static inline SIMD_CFUNC simd_half3 simd_make_half3(simd_half8 other) {
3018 return other.xyz;
3019}
3020
3021/*! @abstract Truncates `other` to form a vector of three 16-bit floating-
3022 * point numbers. */
3023static inline SIMD_CFUNC simd_half3 simd_make_half3(simd_half16 other) {
3024 return other.xyz;
3025}
3026
3027/*! @abstract Truncates `other` to form a vector of three 16-bit floating-
3028 * point numbers. */
3029static inline SIMD_CFUNC simd_half3 simd_make_half3(simd_half32 other) {
3030 return other.xyz;
3031}
3032
3033/*! @abstract Concatenates `x`, `y`, `z` and `w` to form a vector of four
3034 * 16-bit floating-point numbers. */
3035static inline SIMD_CFUNC simd_half4 simd_make_half4(_Float16 x, _Float16 y, _Float16 z, _Float16 w) {
3036 simd_half4 result;
3037 result.x = x;
3038 result.y = y;
3039 result.z = z;
3040 result.w = w;
3041 return result;
3042}
3043
3044/*! @abstract Concatenates `x`, `y` and `zw` to form a vector of four 16-bit
3045 * floating-point numbers. */
3046static inline SIMD_CFUNC simd_half4 simd_make_half4(_Float16 x, _Float16 y, simd_half2 zw) {
3047 simd_half4 result;
3048 result.x = x;
3049 result.y = y;
3050 result.zw = zw;
3051 return result;
3052}
3053
3054/*! @abstract Concatenates `x`, `yz` and `w` to form a vector of four 16-bit
3055 * floating-point numbers. */
3056static inline SIMD_CFUNC simd_half4 simd_make_half4(_Float16 x, simd_half2 yz, _Float16 w) {
3057 simd_half4 result;
3058 result.x = x;
3059 result.yz = yz;
3060 result.w = w;
3061 return result;
3062}
3063
3064/*! @abstract Concatenates `xy`, `z` and `w` to form a vector of four 16-bit
3065 * floating-point numbers. */
3066static inline SIMD_CFUNC simd_half4 simd_make_half4(simd_half2 xy, _Float16 z, _Float16 w) {
3067 simd_half4 result;
3068 result.xy = xy;
3069 result.z = z;
3070 result.w = w;
3071 return result;
3072}
3073
3074/*! @abstract Concatenates `x` and `yzw` to form a vector of four 16-bit
3075 * floating-point numbers. */
3076static inline SIMD_CFUNC simd_half4 simd_make_half4(_Float16 x, simd_half3 yzw) {
3077 simd_half4 result;
3078 result.x = x;
3079 result.yzw = yzw;
3080 return result;
3081}
3082
3083/*! @abstract Concatenates `xy` and `zw` to form a vector of four 16-bit
3084 * floating-point numbers. */
3085static inline SIMD_CFUNC simd_half4 simd_make_half4(simd_half2 xy, simd_half2 zw) {
3086 simd_half4 result;
3087 result.xy = xy;
3088 result.zw = zw;
3089 return result;
3090}
3091
3092/*! @abstract Concatenates `xyz` and `w` to form a vector of four 16-bit
3093 * floating-point numbers. */
3094static inline SIMD_CFUNC simd_half4 simd_make_half4(simd_half3 xyz, _Float16 w) {
3095 simd_half4 result;
3096 result.xyz = xyz;
3097 result.w = w;
3098 return result;
3099}
3100
3101/*! @abstract Zero-extends `other` to form a vector of four 16-bit floating-
3102 * point numbers. */
3103static inline SIMD_CFUNC simd_half4 simd_make_half4(_Float16 other) {
3104 simd_half4 result = 0;
3105 result.x = other;
3106 return result;
3107}
3108
3109/*! @abstract Extends `other` to form a vector of four 16-bit floating-point
3110 * numbers. The contents of the newly-created vector lanes are unspecified. */
3111static inline SIMD_CFUNC simd_half4 simd_make_half4_undef(_Float16 other) {
3112 simd_half4 result;
3113 result.x = other;
3114 return result;
3115}
3116
3117/*! @abstract Zero-extends `other` to form a vector of four 16-bit floating-
3118 * point numbers. */
3119static inline SIMD_CFUNC simd_half4 simd_make_half4(simd_half2 other) {
3120 simd_half4 result = 0;
3121 result.xy = other;
3122 return result;
3123}
3124
3125/*! @abstract Extends `other` to form a vector of four 16-bit floating-point
3126 * numbers. The contents of the newly-created vector lanes are unspecified. */
3127static inline SIMD_CFUNC simd_half4 simd_make_half4_undef(simd_half2 other) {
3128 simd_half4 result;
3129 result.xy = other;
3130 return result;
3131}
3132
3133/*! @abstract Zero-extends `other` to form a vector of four 16-bit floating-
3134 * point numbers. */
3135static inline SIMD_CFUNC simd_half4 simd_make_half4(simd_half3 other) {
3136 simd_half4 result = 0;
3137 result.xyz = other;
3138 return result;
3139}
3140
3141/*! @abstract Extends `other` to form a vector of four 16-bit floating-point
3142 * numbers. The contents of the newly-created vector lanes are unspecified. */
3143static inline SIMD_CFUNC simd_half4 simd_make_half4_undef(simd_half3 other) {
3144 simd_half4 result;
3145 result.xyz = other;
3146 return result;
3147}
3148
3149/*! @abstract Returns `other` unmodified. This function is a convenience for
3150 * templated and autogenerated code. */
3151static inline SIMD_CFUNC simd_half4 simd_make_half4(simd_half4 other) {
3152 return other;
3153}
3154
3155/*! @abstract Truncates `other` to form a vector of four 16-bit floating-
3156 * point numbers. */
3157static inline SIMD_CFUNC simd_half4 simd_make_half4(simd_half8 other) {
3158 return other.xyzw;
3159}
3160
3161/*! @abstract Truncates `other` to form a vector of four 16-bit floating-
3162 * point numbers. */
3163static inline SIMD_CFUNC simd_half4 simd_make_half4(simd_half16 other) {
3164 return other.xyzw;
3165}
3166
3167/*! @abstract Truncates `other` to form a vector of four 16-bit floating-
3168 * point numbers. */
3169static inline SIMD_CFUNC simd_half4 simd_make_half4(simd_half32 other) {
3170 return other.xyzw;
3171}
3172
3173/*! @abstract Concatenates `lo` and `hi` to form a vector of eight 16-bit
3174 * floating-point numbers. */
3175static inline SIMD_CFUNC simd_half8 simd_make_half8(simd_half4 lo, simd_half4 hi) {
3176 simd_half8 result;
3177 result.lo = lo;
3178 result.hi = hi;
3179 return result;
3180}
3181
3182/*! @abstract Zero-extends `other` to form a vector of eight 16-bit
3183 * floating-point numbers. */
3184static inline SIMD_CFUNC simd_half8 simd_make_half8(_Float16 other) {
3185 simd_half8 result = 0;
3186 result.x = other;
3187 return result;
3188}
3189
3190/*! @abstract Extends `other` to form a vector of eight 16-bit floating-
3191 * point numbers. The contents of the newly-created vector lanes are
3192 * unspecified. */
3193static inline SIMD_CFUNC simd_half8 simd_make_half8_undef(_Float16 other) {
3194 simd_half8 result;
3195 result.x = other;
3196 return result;
3197}
3198
3199/*! @abstract Zero-extends `other` to form a vector of eight 16-bit
3200 * floating-point numbers. */
3201static inline SIMD_CFUNC simd_half8 simd_make_half8(simd_half2 other) {
3202 simd_half8 result = 0;
3203 result.xy = other;
3204 return result;
3205}
3206
3207/*! @abstract Extends `other` to form a vector of eight 16-bit floating-
3208 * point numbers. The contents of the newly-created vector lanes are
3209 * unspecified. */
3210static inline SIMD_CFUNC simd_half8 simd_make_half8_undef(simd_half2 other) {
3211 simd_half8 result;
3212 result.xy = other;
3213 return result;
3214}
3215
3216/*! @abstract Zero-extends `other` to form a vector of eight 16-bit
3217 * floating-point numbers. */
3218static inline SIMD_CFUNC simd_half8 simd_make_half8(simd_half3 other) {
3219 simd_half8 result = 0;
3220 result.xyz = other;
3221 return result;
3222}
3223
3224/*! @abstract Extends `other` to form a vector of eight 16-bit floating-
3225 * point numbers. The contents of the newly-created vector lanes are
3226 * unspecified. */
3227static inline SIMD_CFUNC simd_half8 simd_make_half8_undef(simd_half3 other) {
3228 simd_half8 result;
3229 result.xyz = other;
3230 return result;
3231}
3232
3233/*! @abstract Zero-extends `other` to form a vector of eight 16-bit
3234 * floating-point numbers. */
3235static inline SIMD_CFUNC simd_half8 simd_make_half8(simd_half4 other) {
3236 simd_half8 result = 0;
3237 result.xyzw = other;
3238 return result;
3239}
3240
3241/*! @abstract Extends `other` to form a vector of eight 16-bit floating-
3242 * point numbers. The contents of the newly-created vector lanes are
3243 * unspecified. */
3244static inline SIMD_CFUNC simd_half8 simd_make_half8_undef(simd_half4 other) {
3245 simd_half8 result;
3246 result.xyzw = other;
3247 return result;
3248}
3249
3250/*! @abstract Returns `other` unmodified. This function is a convenience for
3251 * templated and autogenerated code. */
3252static inline SIMD_CFUNC simd_half8 simd_make_half8(simd_half8 other) {
3253 return other;
3254}
3255
3256/*! @abstract Truncates `other` to form a vector of eight 16-bit floating-
3257 * point numbers. */
3258static inline SIMD_CFUNC simd_half8 simd_make_half8(simd_half16 other) {
3259 return simd_make_half8(other.lo);
3260}
3261
3262/*! @abstract Truncates `other` to form a vector of eight 16-bit floating-
3263 * point numbers. */
3264static inline SIMD_CFUNC simd_half8 simd_make_half8(simd_half32 other) {
3265 return simd_make_half8(other.lo);
3266}
3267
3268/*! @abstract Concatenates `lo` and `hi` to form a vector of sixteen 16-bit
3269 * floating-point numbers. */
3270static inline SIMD_CFUNC simd_half16 simd_make_half16(simd_half8 lo, simd_half8 hi) {
3271 simd_half16 result;
3272 result.lo = lo;
3273 result.hi = hi;
3274 return result;
3275}
3276
3277/*! @abstract Zero-extends `other` to form a vector of sixteen 16-bit
3278 * floating-point numbers. */
3279static inline SIMD_CFUNC simd_half16 simd_make_half16(_Float16 other) {
3280 simd_half16 result = 0;
3281 result.x = other;
3282 return result;
3283}
3284
3285/*! @abstract Extends `other` to form a vector of sixteen 16-bit floating-
3286 * point numbers. The contents of the newly-created vector lanes are
3287 * unspecified. */
3288static inline SIMD_CFUNC simd_half16 simd_make_half16_undef(_Float16 other) {
3289 simd_half16 result;
3290 result.x = other;
3291 return result;
3292}
3293
3294/*! @abstract Zero-extends `other` to form a vector of sixteen 16-bit
3295 * floating-point numbers. */
3296static inline SIMD_CFUNC simd_half16 simd_make_half16(simd_half2 other) {
3297 simd_half16 result = 0;
3298 result.xy = other;
3299 return result;
3300}
3301
3302/*! @abstract Extends `other` to form a vector of sixteen 16-bit floating-
3303 * point numbers. The contents of the newly-created vector lanes are
3304 * unspecified. */
3305static inline SIMD_CFUNC simd_half16 simd_make_half16_undef(simd_half2 other) {
3306 simd_half16 result;
3307 result.xy = other;
3308 return result;
3309}
3310
3311/*! @abstract Zero-extends `other` to form a vector of sixteen 16-bit
3312 * floating-point numbers. */
3313static inline SIMD_CFUNC simd_half16 simd_make_half16(simd_half3 other) {
3314 simd_half16 result = 0;
3315 result.xyz = other;
3316 return result;
3317}
3318
3319/*! @abstract Extends `other` to form a vector of sixteen 16-bit floating-
3320 * point numbers. The contents of the newly-created vector lanes are
3321 * unspecified. */
3322static inline SIMD_CFUNC simd_half16 simd_make_half16_undef(simd_half3 other) {
3323 simd_half16 result;
3324 result.xyz = other;
3325 return result;
3326}
3327
3328/*! @abstract Zero-extends `other` to form a vector of sixteen 16-bit
3329 * floating-point numbers. */
3330static inline SIMD_CFUNC simd_half16 simd_make_half16(simd_half4 other) {
3331 simd_half16 result = 0;
3332 result.xyzw = other;
3333 return result;
3334}
3335
3336/*! @abstract Extends `other` to form a vector of sixteen 16-bit floating-
3337 * point numbers. The contents of the newly-created vector lanes are
3338 * unspecified. */
3339static inline SIMD_CFUNC simd_half16 simd_make_half16_undef(simd_half4 other) {
3340 simd_half16 result;
3341 result.xyzw = other;
3342 return result;
3343}
3344
3345/*! @abstract Zero-extends `other` to form a vector of sixteen 16-bit
3346 * floating-point numbers. */
3347static inline SIMD_CFUNC simd_half16 simd_make_half16(simd_half8 other) {
3348 simd_half16 result = 0;
3349 result.lo = simd_make_half8(other);
3350 return result;
3351}
3352
3353/*! @abstract Extends `other` to form a vector of sixteen 16-bit floating-
3354 * point numbers. The contents of the newly-created vector lanes are
3355 * unspecified. */
3356static inline SIMD_CFUNC simd_half16 simd_make_half16_undef(simd_half8 other) {
3357 simd_half16 result;
3358 result.lo = simd_make_half8(other);
3359 return result;
3360}
3361
3362/*! @abstract Returns `other` unmodified. This function is a convenience for
3363 * templated and autogenerated code. */
3364static inline SIMD_CFUNC simd_half16 simd_make_half16(simd_half16 other) {
3365 return other;
3366}
3367
3368/*! @abstract Truncates `other` to form a vector of sixteen 16-bit floating-
3369 * point numbers. */
3370static inline SIMD_CFUNC simd_half16 simd_make_half16(simd_half32 other) {
3371 return simd_make_half16(other.lo);
3372}
3373
3374/*! @abstract Concatenates `lo` and `hi` to form a vector of thirty-two
3375 * 16-bit floating-point numbers. */
3376static inline SIMD_CFUNC simd_half32 simd_make_half32(simd_half16 lo, simd_half16 hi) {
3377 simd_half32 result;
3378 result.lo = lo;
3379 result.hi = hi;
3380 return result;
3381}
3382
3383/*! @abstract Zero-extends `other` to form a vector of thirty-two 16-bit
3384 * floating-point numbers. */
3385static inline SIMD_CFUNC simd_half32 simd_make_half32(_Float16 other) {
3386 simd_half32 result = 0;
3387 result.x = other;
3388 return result;
3389}
3390
3391/*! @abstract Extends `other` to form a vector of thirty-two 16-bit
3392 * floating-point numbers. The contents of the newly-created vector lanes
3393 * are unspecified. */
3394static inline SIMD_CFUNC simd_half32 simd_make_half32_undef(_Float16 other) {
3395 simd_half32 result;
3396 result.x = other;
3397 return result;
3398}
3399
3400/*! @abstract Zero-extends `other` to form a vector of thirty-two 16-bit
3401 * floating-point numbers. */
3402static inline SIMD_CFUNC simd_half32 simd_make_half32(simd_half2 other) {
3403 simd_half32 result = 0;
3404 result.xy = other;
3405 return result;
3406}
3407
3408/*! @abstract Extends `other` to form a vector of thirty-two 16-bit
3409 * floating-point numbers. The contents of the newly-created vector lanes
3410 * are unspecified. */
3411static inline SIMD_CFUNC simd_half32 simd_make_half32_undef(simd_half2 other) {
3412 simd_half32 result;
3413 result.xy = other;
3414 return result;
3415}
3416
3417/*! @abstract Zero-extends `other` to form a vector of thirty-two 16-bit
3418 * floating-point numbers. */
3419static inline SIMD_CFUNC simd_half32 simd_make_half32(simd_half3 other) {
3420 simd_half32 result = 0;
3421 result.xyz = other;
3422 return result;
3423}
3424
3425/*! @abstract Extends `other` to form a vector of thirty-two 16-bit
3426 * floating-point numbers. The contents of the newly-created vector lanes
3427 * are unspecified. */
3428static inline SIMD_CFUNC simd_half32 simd_make_half32_undef(simd_half3 other) {
3429 simd_half32 result;
3430 result.xyz = other;
3431 return result;
3432}
3433
3434/*! @abstract Zero-extends `other` to form a vector of thirty-two 16-bit
3435 * floating-point numbers. */
3436static inline SIMD_CFUNC simd_half32 simd_make_half32(simd_half4 other) {
3437 simd_half32 result = 0;
3438 result.xyzw = other;
3439 return result;
3440}
3441
3442/*! @abstract Extends `other` to form a vector of thirty-two 16-bit
3443 * floating-point numbers. The contents of the newly-created vector lanes
3444 * are unspecified. */
3445static inline SIMD_CFUNC simd_half32 simd_make_half32_undef(simd_half4 other) {
3446 simd_half32 result;
3447 result.xyzw = other;
3448 return result;
3449}
3450
3451/*! @abstract Zero-extends `other` to form a vector of thirty-two 16-bit
3452 * floating-point numbers. */
3453static inline SIMD_CFUNC simd_half32 simd_make_half32(simd_half8 other) {
3454 simd_half32 result = 0;
3455 result.lo = simd_make_half16(other);
3456 return result;
3457}
3458
3459/*! @abstract Extends `other` to form a vector of thirty-two 16-bit
3460 * floating-point numbers. The contents of the newly-created vector lanes
3461 * are unspecified. */
3462static inline SIMD_CFUNC simd_half32 simd_make_half32_undef(simd_half8 other) {
3463 simd_half32 result;
3464 result.lo = simd_make_half16(other);
3465 return result;
3466}
3467
3468/*! @abstract Zero-extends `other` to form a vector of thirty-two 16-bit
3469 * floating-point numbers. */
3470static inline SIMD_CFUNC simd_half32 simd_make_half32(simd_half16 other) {
3471 simd_half32 result = 0;
3472 result.lo = simd_make_half16(other);
3473 return result;
3474}
3475
3476/*! @abstract Extends `other` to form a vector of thirty-two 16-bit
3477 * floating-point numbers. The contents of the newly-created vector lanes
3478 * are unspecified. */
3479static inline SIMD_CFUNC simd_half32 simd_make_half32_undef(simd_half16 other) {
3480 simd_half32 result;
3481 result.lo = simd_make_half16(other);
3482 return result;
3483}
3484
3485/*! @abstract Returns `other` unmodified. This function is a convenience for
3486 * templated and autogenerated code. */
3487static inline SIMD_CFUNC simd_half32 simd_make_half32(simd_half32 other) {
3488 return other;
3489}
3490
3491/*! @abstract Concatenates `x` and `y` to form a vector of two 32-bit signed
3492 * (twos-complement) integers. */
3493static inline SIMD_CFUNC simd_int2 simd_make_int2(int x, int y) {
3494 simd_int2 result;
3495 result.x = x;
3496 result.y = y;
3497 return result;
3498}
3499
3500/*! @abstract Zero-extends `other` to form a vector of two 32-bit signed
3501 * (twos-complement) integers. */
3502static inline SIMD_CFUNC simd_int2 simd_make_int2(int other) {
3503 simd_int2 result = 0;
3504 result.x = other;
3505 return result;
3506}
3507
3508/*! @abstract Extends `other` to form a vector of two 32-bit signed (twos-
3509 * complement) integers. The contents of the newly-created vector lanes are
3510 * unspecified. */
3511static inline SIMD_CFUNC simd_int2 simd_make_int2_undef(int other) {
3512 simd_int2 result;
3513 result.x = other;
3514 return result;
3515}
3516
3517/*! @abstract Returns `other` unmodified. This function is a convenience for
3518 * templated and autogenerated code. */
3519static inline SIMD_CFUNC simd_int2 simd_make_int2(simd_int2 other) {
3520 return other;
3521}
3522
3523/*! @abstract Truncates `other` to form a vector of two 32-bit signed (twos-
3524 * complement) integers. */
3525static inline SIMD_CFUNC simd_int2 simd_make_int2(simd_int3 other) {
3526 return other.xy;
3527}
3528
3529/*! @abstract Truncates `other` to form a vector of two 32-bit signed (twos-
3530 * complement) integers. */
3531static inline SIMD_CFUNC simd_int2 simd_make_int2(simd_int4 other) {
3532 return other.xy;
3533}
3534
3535/*! @abstract Truncates `other` to form a vector of two 32-bit signed (twos-
3536 * complement) integers. */
3537static inline SIMD_CFUNC simd_int2 simd_make_int2(simd_int8 other) {
3538 return other.xy;
3539}
3540
3541/*! @abstract Truncates `other` to form a vector of two 32-bit signed (twos-
3542 * complement) integers. */
3543static inline SIMD_CFUNC simd_int2 simd_make_int2(simd_int16 other) {
3544 return other.xy;
3545}
3546
3547/*! @abstract Concatenates `x`, `y` and `z` to form a vector of three 32-bit
3548 * signed (twos-complement) integers. */
3549static inline SIMD_CFUNC simd_int3 simd_make_int3(int x, int y, int z) {
3550 simd_int3 result;
3551 result.x = x;
3552 result.y = y;
3553 result.z = z;
3554 return result;
3555}
3556
3557/*! @abstract Concatenates `x` and `yz` to form a vector of three 32-bit
3558 * signed (twos-complement) integers. */
3559static inline SIMD_CFUNC simd_int3 simd_make_int3(int x, simd_int2 yz) {
3560 simd_int3 result;
3561 result.x = x;
3562 result.yz = yz;
3563 return result;
3564}
3565
3566/*! @abstract Concatenates `xy` and `z` to form a vector of three 32-bit
3567 * signed (twos-complement) integers. */
3568static inline SIMD_CFUNC simd_int3 simd_make_int3(simd_int2 xy, int z) {
3569 simd_int3 result;
3570 result.xy = xy;
3571 result.z = z;
3572 return result;
3573}
3574
3575/*! @abstract Zero-extends `other` to form a vector of three 32-bit signed
3576 * (twos-complement) integers. */
3577static inline SIMD_CFUNC simd_int3 simd_make_int3(int other) {
3578 simd_int3 result = 0;
3579 result.x = other;
3580 return result;
3581}
3582
3583/*! @abstract Extends `other` to form a vector of three 32-bit signed (twos-
3584 * complement) integers. The contents of the newly-created vector lanes are
3585 * unspecified. */
3586static inline SIMD_CFUNC simd_int3 simd_make_int3_undef(int other) {
3587 simd_int3 result;
3588 result.x = other;
3589 return result;
3590}
3591
3592/*! @abstract Zero-extends `other` to form a vector of three 32-bit signed
3593 * (twos-complement) integers. */
3594static inline SIMD_CFUNC simd_int3 simd_make_int3(simd_int2 other) {
3595 simd_int3 result = 0;
3596 result.xy = other;
3597 return result;
3598}
3599
3600/*! @abstract Extends `other` to form a vector of three 32-bit signed (twos-
3601 * complement) integers. The contents of the newly-created vector lanes are
3602 * unspecified. */
3603static inline SIMD_CFUNC simd_int3 simd_make_int3_undef(simd_int2 other) {
3604 simd_int3 result;
3605 result.xy = other;
3606 return result;
3607}
3608
3609/*! @abstract Returns `other` unmodified. This function is a convenience for
3610 * templated and autogenerated code. */
3611static inline SIMD_CFUNC simd_int3 simd_make_int3(simd_int3 other) {
3612 return other;
3613}
3614
3615/*! @abstract Truncates `other` to form a vector of three 32-bit signed
3616 * (twos-complement) integers. */
3617static inline SIMD_CFUNC simd_int3 simd_make_int3(simd_int4 other) {
3618 return other.xyz;
3619}
3620
3621/*! @abstract Truncates `other` to form a vector of three 32-bit signed
3622 * (twos-complement) integers. */
3623static inline SIMD_CFUNC simd_int3 simd_make_int3(simd_int8 other) {
3624 return other.xyz;
3625}
3626
3627/*! @abstract Truncates `other` to form a vector of three 32-bit signed
3628 * (twos-complement) integers. */
3629static inline SIMD_CFUNC simd_int3 simd_make_int3(simd_int16 other) {
3630 return other.xyz;
3631}
3632
3633/*! @abstract Concatenates `x`, `y`, `z` and `w` to form a vector of four
3634 * 32-bit signed (twos-complement) integers. */
3635static inline SIMD_CFUNC simd_int4 simd_make_int4(int x, int y, int z, int w) {
3636 simd_int4 result;
3637 result.x = x;
3638 result.y = y;
3639 result.z = z;
3640 result.w = w;
3641 return result;
3642}
3643
3644/*! @abstract Concatenates `x`, `y` and `zw` to form a vector of four 32-bit
3645 * signed (twos-complement) integers. */
3646static inline SIMD_CFUNC simd_int4 simd_make_int4(int x, int y, simd_int2 zw) {
3647 simd_int4 result;
3648 result.x = x;
3649 result.y = y;
3650 result.zw = zw;
3651 return result;
3652}
3653
3654/*! @abstract Concatenates `x`, `yz` and `w` to form a vector of four 32-bit
3655 * signed (twos-complement) integers. */
3656static inline SIMD_CFUNC simd_int4 simd_make_int4(int x, simd_int2 yz, int w) {
3657 simd_int4 result;
3658 result.x = x;
3659 result.yz = yz;
3660 result.w = w;
3661 return result;
3662}
3663
3664/*! @abstract Concatenates `xy`, `z` and `w` to form a vector of four 32-bit
3665 * signed (twos-complement) integers. */
3666static inline SIMD_CFUNC simd_int4 simd_make_int4(simd_int2 xy, int z, int w) {
3667 simd_int4 result;
3668 result.xy = xy;
3669 result.z = z;
3670 result.w = w;
3671 return result;
3672}
3673
3674/*! @abstract Concatenates `x` and `yzw` to form a vector of four 32-bit
3675 * signed (twos-complement) integers. */
3676static inline SIMD_CFUNC simd_int4 simd_make_int4(int x, simd_int3 yzw) {
3677 simd_int4 result;
3678 result.x = x;
3679 result.yzw = yzw;
3680 return result;
3681}
3682
3683/*! @abstract Concatenates `xy` and `zw` to form a vector of four 32-bit
3684 * signed (twos-complement) integers. */
3685static inline SIMD_CFUNC simd_int4 simd_make_int4(simd_int2 xy, simd_int2 zw) {
3686 simd_int4 result;
3687 result.xy = xy;
3688 result.zw = zw;
3689 return result;
3690}
3691
3692/*! @abstract Concatenates `xyz` and `w` to form a vector of four 32-bit
3693 * signed (twos-complement) integers. */
3694static inline SIMD_CFUNC simd_int4 simd_make_int4(simd_int3 xyz, int w) {
3695 simd_int4 result;
3696 result.xyz = xyz;
3697 result.w = w;
3698 return result;
3699}
3700
3701/*! @abstract Zero-extends `other` to form a vector of four 32-bit signed
3702 * (twos-complement) integers. */
3703static inline SIMD_CFUNC simd_int4 simd_make_int4(int other) {
3704 simd_int4 result = 0;
3705 result.x = other;
3706 return result;
3707}
3708
3709/*! @abstract Extends `other` to form a vector of four 32-bit signed (twos-
3710 * complement) integers. The contents of the newly-created vector lanes are
3711 * unspecified. */
3712static inline SIMD_CFUNC simd_int4 simd_make_int4_undef(int other) {
3713 simd_int4 result;
3714 result.x = other;
3715 return result;
3716}
3717
3718/*! @abstract Zero-extends `other` to form a vector of four 32-bit signed
3719 * (twos-complement) integers. */
3720static inline SIMD_CFUNC simd_int4 simd_make_int4(simd_int2 other) {
3721 simd_int4 result = 0;
3722 result.xy = other;
3723 return result;
3724}
3725
3726/*! @abstract Extends `other` to form a vector of four 32-bit signed (twos-
3727 * complement) integers. The contents of the newly-created vector lanes are
3728 * unspecified. */
3729static inline SIMD_CFUNC simd_int4 simd_make_int4_undef(simd_int2 other) {
3730 simd_int4 result;
3731 result.xy = other;
3732 return result;
3733}
3734
3735/*! @abstract Zero-extends `other` to form a vector of four 32-bit signed
3736 * (twos-complement) integers. */
3737static inline SIMD_CFUNC simd_int4 simd_make_int4(simd_int3 other) {
3738 simd_int4 result = 0;
3739 result.xyz = other;
3740 return result;
3741}
3742
3743/*! @abstract Extends `other` to form a vector of four 32-bit signed (twos-
3744 * complement) integers. The contents of the newly-created vector lanes are
3745 * unspecified. */
3746static inline SIMD_CFUNC simd_int4 simd_make_int4_undef(simd_int3 other) {
3747 simd_int4 result;
3748 result.xyz = other;
3749 return result;
3750}
3751
3752/*! @abstract Returns `other` unmodified. This function is a convenience for
3753 * templated and autogenerated code. */
3754static inline SIMD_CFUNC simd_int4 simd_make_int4(simd_int4 other) {
3755 return other;
3756}
3757
3758/*! @abstract Truncates `other` to form a vector of four 32-bit signed
3759 * (twos-complement) integers. */
3760static inline SIMD_CFUNC simd_int4 simd_make_int4(simd_int8 other) {
3761 return other.xyzw;
3762}
3763
3764/*! @abstract Truncates `other` to form a vector of four 32-bit signed
3765 * (twos-complement) integers. */
3766static inline SIMD_CFUNC simd_int4 simd_make_int4(simd_int16 other) {
3767 return other.xyzw;
3768}
3769
3770/*! @abstract Concatenates `lo` and `hi` to form a vector of eight 32-bit
3771 * signed (twos-complement) integers. */
3772static inline SIMD_CFUNC simd_int8 simd_make_int8(simd_int4 lo, simd_int4 hi) {
3773 simd_int8 result;
3774 result.lo = lo;
3775 result.hi = hi;
3776 return result;
3777}
3778
3779/*! @abstract Zero-extends `other` to form a vector of eight 32-bit signed
3780 * (twos-complement) integers. */
3781static inline SIMD_CFUNC simd_int8 simd_make_int8(int other) {
3782 simd_int8 result = 0;
3783 result.x = other;
3784 return result;
3785}
3786
3787/*! @abstract Extends `other` to form a vector of eight 32-bit signed (twos-
3788 * complement) integers. The contents of the newly-created vector lanes are
3789 * unspecified. */
3790static inline SIMD_CFUNC simd_int8 simd_make_int8_undef(int other) {
3791 simd_int8 result;
3792 result.x = other;
3793 return result;
3794}
3795
3796/*! @abstract Zero-extends `other` to form a vector of eight 32-bit signed
3797 * (twos-complement) integers. */
3798static inline SIMD_CFUNC simd_int8 simd_make_int8(simd_int2 other) {
3799 simd_int8 result = 0;
3800 result.xy = other;
3801 return result;
3802}
3803
3804/*! @abstract Extends `other` to form a vector of eight 32-bit signed (twos-
3805 * complement) integers. The contents of the newly-created vector lanes are
3806 * unspecified. */
3807static inline SIMD_CFUNC simd_int8 simd_make_int8_undef(simd_int2 other) {
3808 simd_int8 result;
3809 result.xy = other;
3810 return result;
3811}
3812
3813/*! @abstract Zero-extends `other` to form a vector of eight 32-bit signed
3814 * (twos-complement) integers. */
3815static inline SIMD_CFUNC simd_int8 simd_make_int8(simd_int3 other) {
3816 simd_int8 result = 0;
3817 result.xyz = other;
3818 return result;
3819}
3820
3821/*! @abstract Extends `other` to form a vector of eight 32-bit signed (twos-
3822 * complement) integers. The contents of the newly-created vector lanes are
3823 * unspecified. */
3824static inline SIMD_CFUNC simd_int8 simd_make_int8_undef(simd_int3 other) {
3825 simd_int8 result;
3826 result.xyz = other;
3827 return result;
3828}
3829
3830/*! @abstract Zero-extends `other` to form a vector of eight 32-bit signed
3831 * (twos-complement) integers. */
3832static inline SIMD_CFUNC simd_int8 simd_make_int8(simd_int4 other) {
3833 simd_int8 result = 0;
3834 result.xyzw = other;
3835 return result;
3836}
3837
3838/*! @abstract Extends `other` to form a vector of eight 32-bit signed (twos-
3839 * complement) integers. The contents of the newly-created vector lanes are
3840 * unspecified. */
3841static inline SIMD_CFUNC simd_int8 simd_make_int8_undef(simd_int4 other) {
3842 simd_int8 result;
3843 result.xyzw = other;
3844 return result;
3845}
3846
3847/*! @abstract Returns `other` unmodified. This function is a convenience for
3848 * templated and autogenerated code. */
3849static inline SIMD_CFUNC simd_int8 simd_make_int8(simd_int8 other) {
3850 return other;
3851}
3852
3853/*! @abstract Truncates `other` to form a vector of eight 32-bit signed
3854 * (twos-complement) integers. */
3855static inline SIMD_CFUNC simd_int8 simd_make_int8(simd_int16 other) {
3856 return simd_make_int8(other.lo);
3857}
3858
3859/*! @abstract Concatenates `lo` and `hi` to form a vector of sixteen 32-bit
3860 * signed (twos-complement) integers. */
3861static inline SIMD_CFUNC simd_int16 simd_make_int16(simd_int8 lo, simd_int8 hi) {
3862 simd_int16 result;
3863 result.lo = lo;
3864 result.hi = hi;
3865 return result;
3866}
3867
3868/*! @abstract Zero-extends `other` to form a vector of sixteen 32-bit signed
3869 * (twos-complement) integers. */
3870static inline SIMD_CFUNC simd_int16 simd_make_int16(int other) {
3871 simd_int16 result = 0;
3872 result.x = other;
3873 return result;
3874}
3875
3876/*! @abstract Extends `other` to form a vector of sixteen 32-bit signed
3877 * (twos-complement) integers. The contents of the newly-created vector
3878 * lanes are unspecified. */
3879static inline SIMD_CFUNC simd_int16 simd_make_int16_undef(int other) {
3880 simd_int16 result;
3881 result.x = other;
3882 return result;
3883}
3884
3885/*! @abstract Zero-extends `other` to form a vector of sixteen 32-bit signed
3886 * (twos-complement) integers. */
3887static inline SIMD_CFUNC simd_int16 simd_make_int16(simd_int2 other) {
3888 simd_int16 result = 0;
3889 result.xy = other;
3890 return result;
3891}
3892
3893/*! @abstract Extends `other` to form a vector of sixteen 32-bit signed
3894 * (twos-complement) integers. The contents of the newly-created vector
3895 * lanes are unspecified. */
3896static inline SIMD_CFUNC simd_int16 simd_make_int16_undef(simd_int2 other) {
3897 simd_int16 result;
3898 result.xy = other;
3899 return result;
3900}
3901
3902/*! @abstract Zero-extends `other` to form a vector of sixteen 32-bit signed
3903 * (twos-complement) integers. */
3904static inline SIMD_CFUNC simd_int16 simd_make_int16(simd_int3 other) {
3905 simd_int16 result = 0;
3906 result.xyz = other;
3907 return result;
3908}
3909
3910/*! @abstract Extends `other` to form a vector of sixteen 32-bit signed
3911 * (twos-complement) integers. The contents of the newly-created vector
3912 * lanes are unspecified. */
3913static inline SIMD_CFUNC simd_int16 simd_make_int16_undef(simd_int3 other) {
3914 simd_int16 result;
3915 result.xyz = other;
3916 return result;
3917}
3918
3919/*! @abstract Zero-extends `other` to form a vector of sixteen 32-bit signed
3920 * (twos-complement) integers. */
3921static inline SIMD_CFUNC simd_int16 simd_make_int16(simd_int4 other) {
3922 simd_int16 result = 0;
3923 result.xyzw = other;
3924 return result;
3925}
3926
3927/*! @abstract Extends `other` to form a vector of sixteen 32-bit signed
3928 * (twos-complement) integers. The contents of the newly-created vector
3929 * lanes are unspecified. */
3930static inline SIMD_CFUNC simd_int16 simd_make_int16_undef(simd_int4 other) {
3931 simd_int16 result;
3932 result.xyzw = other;
3933 return result;
3934}
3935
3936/*! @abstract Zero-extends `other` to form a vector of sixteen 32-bit signed
3937 * (twos-complement) integers. */
3938static inline SIMD_CFUNC simd_int16 simd_make_int16(simd_int8 other) {
3939 simd_int16 result = 0;
3940 result.lo = simd_make_int8(other);
3941 return result;
3942}
3943
3944/*! @abstract Extends `other` to form a vector of sixteen 32-bit signed
3945 * (twos-complement) integers. The contents of the newly-created vector
3946 * lanes are unspecified. */
3947static inline SIMD_CFUNC simd_int16 simd_make_int16_undef(simd_int8 other) {
3948 simd_int16 result;
3949 result.lo = simd_make_int8(other);
3950 return result;
3951}
3952
3953/*! @abstract Returns `other` unmodified. This function is a convenience for
3954 * templated and autogenerated code. */
3955static inline SIMD_CFUNC simd_int16 simd_make_int16(simd_int16 other) {
3956 return other;
3957}
3958
3959/*! @abstract Concatenates `x` and `y` to form a vector of two 32-bit
3960 * unsigned integers. */
3961static inline SIMD_CFUNC simd_uint2 simd_make_uint2(unsigned int x, unsigned int y) {
3962 simd_uint2 result;
3963 result.x = x;
3964 result.y = y;
3965 return result;
3966}
3967
3968/*! @abstract Zero-extends `other` to form a vector of two 32-bit unsigned
3969 * integers. */
3970static inline SIMD_CFUNC simd_uint2 simd_make_uint2(unsigned int other) {
3971 simd_uint2 result = 0;
3972 result.x = other;
3973 return result;
3974}
3975
3976/*! @abstract Extends `other` to form a vector of two 32-bit unsigned
3977 * integers. The contents of the newly-created vector lanes are
3978 * unspecified. */
3979static inline SIMD_CFUNC simd_uint2 simd_make_uint2_undef(unsigned int other) {
3980 simd_uint2 result;
3981 result.x = other;
3982 return result;
3983}
3984
3985/*! @abstract Returns `other` unmodified. This function is a convenience for
3986 * templated and autogenerated code. */
3987static inline SIMD_CFUNC simd_uint2 simd_make_uint2(simd_uint2 other) {
3988 return other;
3989}
3990
3991/*! @abstract Truncates `other` to form a vector of two 32-bit unsigned
3992 * integers. */
3993static inline SIMD_CFUNC simd_uint2 simd_make_uint2(simd_uint3 other) {
3994 return other.xy;
3995}
3996
3997/*! @abstract Truncates `other` to form a vector of two 32-bit unsigned
3998 * integers. */
3999static inline SIMD_CFUNC simd_uint2 simd_make_uint2(simd_uint4 other) {
4000 return other.xy;
4001}
4002
4003/*! @abstract Truncates `other` to form a vector of two 32-bit unsigned
4004 * integers. */
4005static inline SIMD_CFUNC simd_uint2 simd_make_uint2(simd_uint8 other) {
4006 return other.xy;
4007}
4008
4009/*! @abstract Truncates `other` to form a vector of two 32-bit unsigned
4010 * integers. */
4011static inline SIMD_CFUNC simd_uint2 simd_make_uint2(simd_uint16 other) {
4012 return other.xy;
4013}
4014
4015/*! @abstract Concatenates `x`, `y` and `z` to form a vector of three 32-bit
4016 * unsigned integers. */
4017static inline SIMD_CFUNC simd_uint3 simd_make_uint3(unsigned int x, unsigned int y, unsigned int z) {
4018 simd_uint3 result;
4019 result.x = x;
4020 result.y = y;
4021 result.z = z;
4022 return result;
4023}
4024
4025/*! @abstract Concatenates `x` and `yz` to form a vector of three 32-bit
4026 * unsigned integers. */
4027static inline SIMD_CFUNC simd_uint3 simd_make_uint3(unsigned int x, simd_uint2 yz) {
4028 simd_uint3 result;
4029 result.x = x;
4030 result.yz = yz;
4031 return result;
4032}
4033
4034/*! @abstract Concatenates `xy` and `z` to form a vector of three 32-bit
4035 * unsigned integers. */
4036static inline SIMD_CFUNC simd_uint3 simd_make_uint3(simd_uint2 xy, unsigned int z) {
4037 simd_uint3 result;
4038 result.xy = xy;
4039 result.z = z;
4040 return result;
4041}
4042
4043/*! @abstract Zero-extends `other` to form a vector of three 32-bit unsigned
4044 * integers. */
4045static inline SIMD_CFUNC simd_uint3 simd_make_uint3(unsigned int other) {
4046 simd_uint3 result = 0;
4047 result.x = other;
4048 return result;
4049}
4050
4051/*! @abstract Extends `other` to form a vector of three 32-bit unsigned
4052 * integers. The contents of the newly-created vector lanes are
4053 * unspecified. */
4054static inline SIMD_CFUNC simd_uint3 simd_make_uint3_undef(unsigned int other) {
4055 simd_uint3 result;
4056 result.x = other;
4057 return result;
4058}
4059
4060/*! @abstract Zero-extends `other` to form a vector of three 32-bit unsigned
4061 * integers. */
4062static inline SIMD_CFUNC simd_uint3 simd_make_uint3(simd_uint2 other) {
4063 simd_uint3 result = 0;
4064 result.xy = other;
4065 return result;
4066}
4067
4068/*! @abstract Extends `other` to form a vector of three 32-bit unsigned
4069 * integers. The contents of the newly-created vector lanes are
4070 * unspecified. */
4071static inline SIMD_CFUNC simd_uint3 simd_make_uint3_undef(simd_uint2 other) {
4072 simd_uint3 result;
4073 result.xy = other;
4074 return result;
4075}
4076
4077/*! @abstract Returns `other` unmodified. This function is a convenience for
4078 * templated and autogenerated code. */
4079static inline SIMD_CFUNC simd_uint3 simd_make_uint3(simd_uint3 other) {
4080 return other;
4081}
4082
4083/*! @abstract Truncates `other` to form a vector of three 32-bit unsigned
4084 * integers. */
4085static inline SIMD_CFUNC simd_uint3 simd_make_uint3(simd_uint4 other) {
4086 return other.xyz;
4087}
4088
4089/*! @abstract Truncates `other` to form a vector of three 32-bit unsigned
4090 * integers. */
4091static inline SIMD_CFUNC simd_uint3 simd_make_uint3(simd_uint8 other) {
4092 return other.xyz;
4093}
4094
4095/*! @abstract Truncates `other` to form a vector of three 32-bit unsigned
4096 * integers. */
4097static inline SIMD_CFUNC simd_uint3 simd_make_uint3(simd_uint16 other) {
4098 return other.xyz;
4099}
4100
4101/*! @abstract Concatenates `x`, `y`, `z` and `w` to form a vector of four
4102 * 32-bit unsigned integers. */
4103static inline SIMD_CFUNC simd_uint4 simd_make_uint4(unsigned int x, unsigned int y, unsigned int z, unsigned int w) {
4104 simd_uint4 result;
4105 result.x = x;
4106 result.y = y;
4107 result.z = z;
4108 result.w = w;
4109 return result;
4110}
4111
4112/*! @abstract Concatenates `x`, `y` and `zw` to form a vector of four 32-bit
4113 * unsigned integers. */
4114static inline SIMD_CFUNC simd_uint4 simd_make_uint4(unsigned int x, unsigned int y, simd_uint2 zw) {
4115 simd_uint4 result;
4116 result.x = x;
4117 result.y = y;
4118 result.zw = zw;
4119 return result;
4120}
4121
4122/*! @abstract Concatenates `x`, `yz` and `w` to form a vector of four 32-bit
4123 * unsigned integers. */
4124static inline SIMD_CFUNC simd_uint4 simd_make_uint4(unsigned int x, simd_uint2 yz, unsigned int w) {
4125 simd_uint4 result;
4126 result.x = x;
4127 result.yz = yz;
4128 result.w = w;
4129 return result;
4130}
4131
4132/*! @abstract Concatenates `xy`, `z` and `w` to form a vector of four 32-bit
4133 * unsigned integers. */
4134static inline SIMD_CFUNC simd_uint4 simd_make_uint4(simd_uint2 xy, unsigned int z, unsigned int w) {
4135 simd_uint4 result;
4136 result.xy = xy;
4137 result.z = z;
4138 result.w = w;
4139 return result;
4140}
4141
4142/*! @abstract Concatenates `x` and `yzw` to form a vector of four 32-bit
4143 * unsigned integers. */
4144static inline SIMD_CFUNC simd_uint4 simd_make_uint4(unsigned int x, simd_uint3 yzw) {
4145 simd_uint4 result;
4146 result.x = x;
4147 result.yzw = yzw;
4148 return result;
4149}
4150
4151/*! @abstract Concatenates `xy` and `zw` to form a vector of four 32-bit
4152 * unsigned integers. */
4153static inline SIMD_CFUNC simd_uint4 simd_make_uint4(simd_uint2 xy, simd_uint2 zw) {
4154 simd_uint4 result;
4155 result.xy = xy;
4156 result.zw = zw;
4157 return result;
4158}
4159
4160/*! @abstract Concatenates `xyz` and `w` to form a vector of four 32-bit
4161 * unsigned integers. */
4162static inline SIMD_CFUNC simd_uint4 simd_make_uint4(simd_uint3 xyz, unsigned int w) {
4163 simd_uint4 result;
4164 result.xyz = xyz;
4165 result.w = w;
4166 return result;
4167}
4168
4169/*! @abstract Zero-extends `other` to form a vector of four 32-bit unsigned
4170 * integers. */
4171static inline SIMD_CFUNC simd_uint4 simd_make_uint4(unsigned int other) {
4172 simd_uint4 result = 0;
4173 result.x = other;
4174 return result;
4175}
4176
4177/*! @abstract Extends `other` to form a vector of four 32-bit unsigned
4178 * integers. The contents of the newly-created vector lanes are
4179 * unspecified. */
4180static inline SIMD_CFUNC simd_uint4 simd_make_uint4_undef(unsigned int other) {
4181 simd_uint4 result;
4182 result.x = other;
4183 return result;
4184}
4185
4186/*! @abstract Zero-extends `other` to form a vector of four 32-bit unsigned
4187 * integers. */
4188static inline SIMD_CFUNC simd_uint4 simd_make_uint4(simd_uint2 other) {
4189 simd_uint4 result = 0;
4190 result.xy = other;
4191 return result;
4192}
4193
4194/*! @abstract Extends `other` to form a vector of four 32-bit unsigned
4195 * integers. The contents of the newly-created vector lanes are
4196 * unspecified. */
4197static inline SIMD_CFUNC simd_uint4 simd_make_uint4_undef(simd_uint2 other) {
4198 simd_uint4 result;
4199 result.xy = other;
4200 return result;
4201}
4202
4203/*! @abstract Zero-extends `other` to form a vector of four 32-bit unsigned
4204 * integers. */
4205static inline SIMD_CFUNC simd_uint4 simd_make_uint4(simd_uint3 other) {
4206 simd_uint4 result = 0;
4207 result.xyz = other;
4208 return result;
4209}
4210
4211/*! @abstract Extends `other` to form a vector of four 32-bit unsigned
4212 * integers. The contents of the newly-created vector lanes are
4213 * unspecified. */
4214static inline SIMD_CFUNC simd_uint4 simd_make_uint4_undef(simd_uint3 other) {
4215 simd_uint4 result;
4216 result.xyz = other;
4217 return result;
4218}
4219
4220/*! @abstract Returns `other` unmodified. This function is a convenience for
4221 * templated and autogenerated code. */
4222static inline SIMD_CFUNC simd_uint4 simd_make_uint4(simd_uint4 other) {
4223 return other;
4224}
4225
4226/*! @abstract Truncates `other` to form a vector of four 32-bit unsigned
4227 * integers. */
4228static inline SIMD_CFUNC simd_uint4 simd_make_uint4(simd_uint8 other) {
4229 return other.xyzw;
4230}
4231
4232/*! @abstract Truncates `other` to form a vector of four 32-bit unsigned
4233 * integers. */
4234static inline SIMD_CFUNC simd_uint4 simd_make_uint4(simd_uint16 other) {
4235 return other.xyzw;
4236}
4237
4238/*! @abstract Concatenates `lo` and `hi` to form a vector of eight 32-bit
4239 * unsigned integers. */
4240static inline SIMD_CFUNC simd_uint8 simd_make_uint8(simd_uint4 lo, simd_uint4 hi) {
4241 simd_uint8 result;
4242 result.lo = lo;
4243 result.hi = hi;
4244 return result;
4245}
4246
4247/*! @abstract Zero-extends `other` to form a vector of eight 32-bit unsigned
4248 * integers. */
4249static inline SIMD_CFUNC simd_uint8 simd_make_uint8(unsigned int other) {
4250 simd_uint8 result = 0;
4251 result.x = other;
4252 return result;
4253}
4254
4255/*! @abstract Extends `other` to form a vector of eight 32-bit unsigned
4256 * integers. The contents of the newly-created vector lanes are
4257 * unspecified. */
4258static inline SIMD_CFUNC simd_uint8 simd_make_uint8_undef(unsigned int other) {
4259 simd_uint8 result;
4260 result.x = other;
4261 return result;
4262}
4263
4264/*! @abstract Zero-extends `other` to form a vector of eight 32-bit unsigned
4265 * integers. */
4266static inline SIMD_CFUNC simd_uint8 simd_make_uint8(simd_uint2 other) {
4267 simd_uint8 result = 0;
4268 result.xy = other;
4269 return result;
4270}
4271
4272/*! @abstract Extends `other` to form a vector of eight 32-bit unsigned
4273 * integers. The contents of the newly-created vector lanes are
4274 * unspecified. */
4275static inline SIMD_CFUNC simd_uint8 simd_make_uint8_undef(simd_uint2 other) {
4276 simd_uint8 result;
4277 result.xy = other;
4278 return result;
4279}
4280
4281/*! @abstract Zero-extends `other` to form a vector of eight 32-bit unsigned
4282 * integers. */
4283static inline SIMD_CFUNC simd_uint8 simd_make_uint8(simd_uint3 other) {
4284 simd_uint8 result = 0;
4285 result.xyz = other;
4286 return result;
4287}
4288
4289/*! @abstract Extends `other` to form a vector of eight 32-bit unsigned
4290 * integers. The contents of the newly-created vector lanes are
4291 * unspecified. */
4292static inline SIMD_CFUNC simd_uint8 simd_make_uint8_undef(simd_uint3 other) {
4293 simd_uint8 result;
4294 result.xyz = other;
4295 return result;
4296}
4297
4298/*! @abstract Zero-extends `other` to form a vector of eight 32-bit unsigned
4299 * integers. */
4300static inline SIMD_CFUNC simd_uint8 simd_make_uint8(simd_uint4 other) {
4301 simd_uint8 result = 0;
4302 result.xyzw = other;
4303 return result;
4304}
4305
4306/*! @abstract Extends `other` to form a vector of eight 32-bit unsigned
4307 * integers. The contents of the newly-created vector lanes are
4308 * unspecified. */
4309static inline SIMD_CFUNC simd_uint8 simd_make_uint8_undef(simd_uint4 other) {
4310 simd_uint8 result;
4311 result.xyzw = other;
4312 return result;
4313}
4314
4315/*! @abstract Returns `other` unmodified. This function is a convenience for
4316 * templated and autogenerated code. */
4317static inline SIMD_CFUNC simd_uint8 simd_make_uint8(simd_uint8 other) {
4318 return other;
4319}
4320
4321/*! @abstract Truncates `other` to form a vector of eight 32-bit unsigned
4322 * integers. */
4323static inline SIMD_CFUNC simd_uint8 simd_make_uint8(simd_uint16 other) {
4324 return simd_make_uint8(other.lo);
4325}
4326
4327/*! @abstract Concatenates `lo` and `hi` to form a vector of sixteen 32-bit
4328 * unsigned integers. */
4329static inline SIMD_CFUNC simd_uint16 simd_make_uint16(simd_uint8 lo, simd_uint8 hi) {
4330 simd_uint16 result;
4331 result.lo = lo;
4332 result.hi = hi;
4333 return result;
4334}
4335
4336/*! @abstract Zero-extends `other` to form a vector of sixteen 32-bit
4337 * unsigned integers. */
4338static inline SIMD_CFUNC simd_uint16 simd_make_uint16(unsigned int other) {
4339 simd_uint16 result = 0;
4340 result.x = other;
4341 return result;
4342}
4343
4344/*! @abstract Extends `other` to form a vector of sixteen 32-bit unsigned
4345 * integers. The contents of the newly-created vector lanes are
4346 * unspecified. */
4347static inline SIMD_CFUNC simd_uint16 simd_make_uint16_undef(unsigned int other) {
4348 simd_uint16 result;
4349 result.x = other;
4350 return result;
4351}
4352
4353/*! @abstract Zero-extends `other` to form a vector of sixteen 32-bit
4354 * unsigned integers. */
4355static inline SIMD_CFUNC simd_uint16 simd_make_uint16(simd_uint2 other) {
4356 simd_uint16 result = 0;
4357 result.xy = other;
4358 return result;
4359}
4360
4361/*! @abstract Extends `other` to form a vector of sixteen 32-bit unsigned
4362 * integers. The contents of the newly-created vector lanes are
4363 * unspecified. */
4364static inline SIMD_CFUNC simd_uint16 simd_make_uint16_undef(simd_uint2 other) {
4365 simd_uint16 result;
4366 result.xy = other;
4367 return result;
4368}
4369
4370/*! @abstract Zero-extends `other` to form a vector of sixteen 32-bit
4371 * unsigned integers. */
4372static inline SIMD_CFUNC simd_uint16 simd_make_uint16(simd_uint3 other) {
4373 simd_uint16 result = 0;
4374 result.xyz = other;
4375 return result;
4376}
4377
4378/*! @abstract Extends `other` to form a vector of sixteen 32-bit unsigned
4379 * integers. The contents of the newly-created vector lanes are
4380 * unspecified. */
4381static inline SIMD_CFUNC simd_uint16 simd_make_uint16_undef(simd_uint3 other) {
4382 simd_uint16 result;
4383 result.xyz = other;
4384 return result;
4385}
4386
4387/*! @abstract Zero-extends `other` to form a vector of sixteen 32-bit
4388 * unsigned integers. */
4389static inline SIMD_CFUNC simd_uint16 simd_make_uint16(simd_uint4 other) {
4390 simd_uint16 result = 0;
4391 result.xyzw = other;
4392 return result;
4393}
4394
4395/*! @abstract Extends `other` to form a vector of sixteen 32-bit unsigned
4396 * integers. The contents of the newly-created vector lanes are
4397 * unspecified. */
4398static inline SIMD_CFUNC simd_uint16 simd_make_uint16_undef(simd_uint4 other) {
4399 simd_uint16 result;
4400 result.xyzw = other;
4401 return result;
4402}
4403
4404/*! @abstract Zero-extends `other` to form a vector of sixteen 32-bit
4405 * unsigned integers. */
4406static inline SIMD_CFUNC simd_uint16 simd_make_uint16(simd_uint8 other) {
4407 simd_uint16 result = 0;
4408 result.lo = simd_make_uint8(other);
4409 return result;
4410}
4411
4412/*! @abstract Extends `other` to form a vector of sixteen 32-bit unsigned
4413 * integers. The contents of the newly-created vector lanes are
4414 * unspecified. */
4415static inline SIMD_CFUNC simd_uint16 simd_make_uint16_undef(simd_uint8 other) {
4416 simd_uint16 result;
4417 result.lo = simd_make_uint8(other);
4418 return result;
4419}
4420
4421/*! @abstract Returns `other` unmodified. This function is a convenience for
4422 * templated and autogenerated code. */
4423static inline SIMD_CFUNC simd_uint16 simd_make_uint16(simd_uint16 other) {
4424 return other;
4425}
4426
4427/*! @abstract Concatenates `x` and `y` to form a vector of two 32-bit
4428 * floating-point numbers. */
4429static inline SIMD_CFUNC simd_float2 simd_make_float2(float x, float y) {
4430 simd_float2 result;
4431 result.x = x;
4432 result.y = y;
4433 return result;
4434}
4435
4436/*! @abstract Zero-extends `other` to form a vector of two 32-bit floating-
4437 * point numbers. */
4438static inline SIMD_CFUNC simd_float2 simd_make_float2(float other) {
4439 simd_float2 result = 0;
4440 result.x = other;
4441 return result;
4442}
4443
4444/*! @abstract Extends `other` to form a vector of two 32-bit floating-point
4445 * numbers. The contents of the newly-created vector lanes are unspecified. */
4446static inline SIMD_CFUNC simd_float2 simd_make_float2_undef(float other) {
4447 simd_float2 result;
4448 result.x = other;
4449 return result;
4450}
4451
4452/*! @abstract Returns `other` unmodified. This function is a convenience for
4453 * templated and autogenerated code. */
4454static inline SIMD_CFUNC simd_float2 simd_make_float2(simd_float2 other) {
4455 return other;
4456}
4457
4458/*! @abstract Truncates `other` to form a vector of two 32-bit floating-
4459 * point numbers. */
4460static inline SIMD_CFUNC simd_float2 simd_make_float2(simd_float3 other) {
4461 return other.xy;
4462}
4463
4464/*! @abstract Truncates `other` to form a vector of two 32-bit floating-
4465 * point numbers. */
4466static inline SIMD_CFUNC simd_float2 simd_make_float2(simd_float4 other) {
4467 return other.xy;
4468}
4469
4470/*! @abstract Truncates `other` to form a vector of two 32-bit floating-
4471 * point numbers. */
4472static inline SIMD_CFUNC simd_float2 simd_make_float2(simd_float8 other) {
4473 return other.xy;
4474}
4475
4476/*! @abstract Truncates `other` to form a vector of two 32-bit floating-
4477 * point numbers. */
4478static inline SIMD_CFUNC simd_float2 simd_make_float2(simd_float16 other) {
4479 return other.xy;
4480}
4481
4482/*! @abstract Concatenates `x`, `y` and `z` to form a vector of three 32-bit
4483 * floating-point numbers. */
4484static inline SIMD_CFUNC simd_float3 simd_make_float3(float x, float y, float z) {
4485 simd_float3 result;
4486 result.x = x;
4487 result.y = y;
4488 result.z = z;
4489 return result;
4490}
4491
4492/*! @abstract Concatenates `x` and `yz` to form a vector of three 32-bit
4493 * floating-point numbers. */
4494static inline SIMD_CFUNC simd_float3 simd_make_float3(float x, simd_float2 yz) {
4495 simd_float3 result;
4496 result.x = x;
4497 result.yz = yz;
4498 return result;
4499}
4500
4501/*! @abstract Concatenates `xy` and `z` to form a vector of three 32-bit
4502 * floating-point numbers. */
4503static inline SIMD_CFUNC simd_float3 simd_make_float3(simd_float2 xy, float z) {
4504 simd_float3 result;
4505 result.xy = xy;
4506 result.z = z;
4507 return result;
4508}
4509
4510/*! @abstract Zero-extends `other` to form a vector of three 32-bit
4511 * floating-point numbers. */
4512static inline SIMD_CFUNC simd_float3 simd_make_float3(float other) {
4513 simd_float3 result = 0;
4514 result.x = other;
4515 return result;
4516}
4517
4518/*! @abstract Extends `other` to form a vector of three 32-bit floating-
4519 * point numbers. The contents of the newly-created vector lanes are
4520 * unspecified. */
4521static inline SIMD_CFUNC simd_float3 simd_make_float3_undef(float other) {
4522 simd_float3 result;
4523 result.x = other;
4524 return result;
4525}
4526
4527/*! @abstract Zero-extends `other` to form a vector of three 32-bit
4528 * floating-point numbers. */
4529static inline SIMD_CFUNC simd_float3 simd_make_float3(simd_float2 other) {
4530 simd_float3 result = 0;
4531 result.xy = other;
4532 return result;
4533}
4534
4535/*! @abstract Extends `other` to form a vector of three 32-bit floating-
4536 * point numbers. The contents of the newly-created vector lanes are
4537 * unspecified. */
4538static inline SIMD_CFUNC simd_float3 simd_make_float3_undef(simd_float2 other) {
4539 simd_float3 result;
4540 result.xy = other;
4541 return result;
4542}
4543
4544/*! @abstract Returns `other` unmodified. This function is a convenience for
4545 * templated and autogenerated code. */
4546static inline SIMD_CFUNC simd_float3 simd_make_float3(simd_float3 other) {
4547 return other;
4548}
4549
4550/*! @abstract Truncates `other` to form a vector of three 32-bit floating-
4551 * point numbers. */
4552static inline SIMD_CFUNC simd_float3 simd_make_float3(simd_float4 other) {
4553 return other.xyz;
4554}
4555
4556/*! @abstract Truncates `other` to form a vector of three 32-bit floating-
4557 * point numbers. */
4558static inline SIMD_CFUNC simd_float3 simd_make_float3(simd_float8 other) {
4559 return other.xyz;
4560}
4561
4562/*! @abstract Truncates `other` to form a vector of three 32-bit floating-
4563 * point numbers. */
4564static inline SIMD_CFUNC simd_float3 simd_make_float3(simd_float16 other) {
4565 return other.xyz;
4566}
4567
4568/*! @abstract Concatenates `x`, `y`, `z` and `w` to form a vector of four
4569 * 32-bit floating-point numbers. */
4570static inline SIMD_CFUNC simd_float4 simd_make_float4(float x, float y, float z, float w) {
4571 simd_float4 result;
4572 result.x = x;
4573 result.y = y;
4574 result.z = z;
4575 result.w = w;
4576 return result;
4577}
4578
4579/*! @abstract Concatenates `x`, `y` and `zw` to form a vector of four 32-bit
4580 * floating-point numbers. */
4581static inline SIMD_CFUNC simd_float4 simd_make_float4(float x, float y, simd_float2 zw) {
4582 simd_float4 result;
4583 result.x = x;
4584 result.y = y;
4585 result.zw = zw;
4586 return result;
4587}
4588
4589/*! @abstract Concatenates `x`, `yz` and `w` to form a vector of four 32-bit
4590 * floating-point numbers. */
4591static inline SIMD_CFUNC simd_float4 simd_make_float4(float x, simd_float2 yz, float w) {
4592 simd_float4 result;
4593 result.x = x;
4594 result.yz = yz;
4595 result.w = w;
4596 return result;
4597}
4598
4599/*! @abstract Concatenates `xy`, `z` and `w` to form a vector of four 32-bit
4600 * floating-point numbers. */
4601static inline SIMD_CFUNC simd_float4 simd_make_float4(simd_float2 xy, float z, float w) {
4602 simd_float4 result;
4603 result.xy = xy;
4604 result.z = z;
4605 result.w = w;
4606 return result;
4607}
4608
4609/*! @abstract Concatenates `x` and `yzw` to form a vector of four 32-bit
4610 * floating-point numbers. */
4611static inline SIMD_CFUNC simd_float4 simd_make_float4(float x, simd_float3 yzw) {
4612 simd_float4 result;
4613 result.x = x;
4614 result.yzw = yzw;
4615 return result;
4616}
4617
4618/*! @abstract Concatenates `xy` and `zw` to form a vector of four 32-bit
4619 * floating-point numbers. */
4620static inline SIMD_CFUNC simd_float4 simd_make_float4(simd_float2 xy, simd_float2 zw) {
4621 simd_float4 result;
4622 result.xy = xy;
4623 result.zw = zw;
4624 return result;
4625}
4626
4627/*! @abstract Concatenates `xyz` and `w` to form a vector of four 32-bit
4628 * floating-point numbers. */
4629static inline SIMD_CFUNC simd_float4 simd_make_float4(simd_float3 xyz, float w) {
4630 simd_float4 result;
4631 result.xyz = xyz;
4632 result.w = w;
4633 return result;
4634}
4635
4636/*! @abstract Zero-extends `other` to form a vector of four 32-bit floating-
4637 * point numbers. */
4638static inline SIMD_CFUNC simd_float4 simd_make_float4(float other) {
4639 simd_float4 result = 0;
4640 result.x = other;
4641 return result;
4642}
4643
4644/*! @abstract Extends `other` to form a vector of four 32-bit floating-point
4645 * numbers. The contents of the newly-created vector lanes are unspecified. */
4646static inline SIMD_CFUNC simd_float4 simd_make_float4_undef(float other) {
4647 simd_float4 result;
4648 result.x = other;
4649 return result;
4650}
4651
4652/*! @abstract Zero-extends `other` to form a vector of four 32-bit floating-
4653 * point numbers. */
4654static inline SIMD_CFUNC simd_float4 simd_make_float4(simd_float2 other) {
4655 simd_float4 result = 0;
4656 result.xy = other;
4657 return result;
4658}
4659
4660/*! @abstract Extends `other` to form a vector of four 32-bit floating-point
4661 * numbers. The contents of the newly-created vector lanes are unspecified. */
4662static inline SIMD_CFUNC simd_float4 simd_make_float4_undef(simd_float2 other) {
4663 simd_float4 result;
4664 result.xy = other;
4665 return result;
4666}
4667
4668/*! @abstract Zero-extends `other` to form a vector of four 32-bit floating-
4669 * point numbers. */
4670static inline SIMD_CFUNC simd_float4 simd_make_float4(simd_float3 other) {
4671 simd_float4 result = 0;
4672 result.xyz = other;
4673 return result;
4674}
4675
4676/*! @abstract Extends `other` to form a vector of four 32-bit floating-point
4677 * numbers. The contents of the newly-created vector lanes are unspecified. */
4678static inline SIMD_CFUNC simd_float4 simd_make_float4_undef(simd_float3 other) {
4679 simd_float4 result;
4680 result.xyz = other;
4681 return result;
4682}
4683
4684/*! @abstract Returns `other` unmodified. This function is a convenience for
4685 * templated and autogenerated code. */
4686static inline SIMD_CFUNC simd_float4 simd_make_float4(simd_float4 other) {
4687 return other;
4688}
4689
4690/*! @abstract Truncates `other` to form a vector of four 32-bit floating-
4691 * point numbers. */
4692static inline SIMD_CFUNC simd_float4 simd_make_float4(simd_float8 other) {
4693 return other.xyzw;
4694}
4695
4696/*! @abstract Truncates `other` to form a vector of four 32-bit floating-
4697 * point numbers. */
4698static inline SIMD_CFUNC simd_float4 simd_make_float4(simd_float16 other) {
4699 return other.xyzw;
4700}
4701
4702/*! @abstract Concatenates `lo` and `hi` to form a vector of eight 32-bit
4703 * floating-point numbers. */
4704static inline SIMD_CFUNC simd_float8 simd_make_float8(simd_float4 lo, simd_float4 hi) {
4705 simd_float8 result;
4706 result.lo = lo;
4707 result.hi = hi;
4708 return result;
4709}
4710
4711/*! @abstract Zero-extends `other` to form a vector of eight 32-bit
4712 * floating-point numbers. */
4713static inline SIMD_CFUNC simd_float8 simd_make_float8(float other) {
4714 simd_float8 result = 0;
4715 result.x = other;
4716 return result;
4717}
4718
4719/*! @abstract Extends `other` to form a vector of eight 32-bit floating-
4720 * point numbers. The contents of the newly-created vector lanes are
4721 * unspecified. */
4722static inline SIMD_CFUNC simd_float8 simd_make_float8_undef(float other) {
4723 simd_float8 result;
4724 result.x = other;
4725 return result;
4726}
4727
4728/*! @abstract Zero-extends `other` to form a vector of eight 32-bit
4729 * floating-point numbers. */
4730static inline SIMD_CFUNC simd_float8 simd_make_float8(simd_float2 other) {
4731 simd_float8 result = 0;
4732 result.xy = other;
4733 return result;
4734}
4735
4736/*! @abstract Extends `other` to form a vector of eight 32-bit floating-
4737 * point numbers. The contents of the newly-created vector lanes are
4738 * unspecified. */
4739static inline SIMD_CFUNC simd_float8 simd_make_float8_undef(simd_float2 other) {
4740 simd_float8 result;
4741 result.xy = other;
4742 return result;
4743}
4744
4745/*! @abstract Zero-extends `other` to form a vector of eight 32-bit
4746 * floating-point numbers. */
4747static inline SIMD_CFUNC simd_float8 simd_make_float8(simd_float3 other) {
4748 simd_float8 result = 0;
4749 result.xyz = other;
4750 return result;
4751}
4752
4753/*! @abstract Extends `other` to form a vector of eight 32-bit floating-
4754 * point numbers. The contents of the newly-created vector lanes are
4755 * unspecified. */
4756static inline SIMD_CFUNC simd_float8 simd_make_float8_undef(simd_float3 other) {
4757 simd_float8 result;
4758 result.xyz = other;
4759 return result;
4760}
4761
4762/*! @abstract Zero-extends `other` to form a vector of eight 32-bit
4763 * floating-point numbers. */
4764static inline SIMD_CFUNC simd_float8 simd_make_float8(simd_float4 other) {
4765 simd_float8 result = 0;
4766 result.xyzw = other;
4767 return result;
4768}
4769
4770/*! @abstract Extends `other` to form a vector of eight 32-bit floating-
4771 * point numbers. The contents of the newly-created vector lanes are
4772 * unspecified. */
4773static inline SIMD_CFUNC simd_float8 simd_make_float8_undef(simd_float4 other) {
4774 simd_float8 result;
4775 result.xyzw = other;
4776 return result;
4777}
4778
4779/*! @abstract Returns `other` unmodified. This function is a convenience for
4780 * templated and autogenerated code. */
4781static inline SIMD_CFUNC simd_float8 simd_make_float8(simd_float8 other) {
4782 return other;
4783}
4784
4785/*! @abstract Truncates `other` to form a vector of eight 32-bit floating-
4786 * point numbers. */
4787static inline SIMD_CFUNC simd_float8 simd_make_float8(simd_float16 other) {
4788 return simd_make_float8(other.lo);
4789}
4790
4791/*! @abstract Concatenates `lo` and `hi` to form a vector of sixteen 32-bit
4792 * floating-point numbers. */
4793static inline SIMD_CFUNC simd_float16 simd_make_float16(simd_float8 lo, simd_float8 hi) {
4794 simd_float16 result;
4795 result.lo = lo;
4796 result.hi = hi;
4797 return result;
4798}
4799
4800/*! @abstract Zero-extends `other` to form a vector of sixteen 32-bit
4801 * floating-point numbers. */
4802static inline SIMD_CFUNC simd_float16 simd_make_float16(float other) {
4803 simd_float16 result = 0;
4804 result.x = other;
4805 return result;
4806}
4807
4808/*! @abstract Extends `other` to form a vector of sixteen 32-bit floating-
4809 * point numbers. The contents of the newly-created vector lanes are
4810 * unspecified. */
4811static inline SIMD_CFUNC simd_float16 simd_make_float16_undef(float other) {
4812 simd_float16 result;
4813 result.x = other;
4814 return result;
4815}
4816
4817/*! @abstract Zero-extends `other` to form a vector of sixteen 32-bit
4818 * floating-point numbers. */
4819static inline SIMD_CFUNC simd_float16 simd_make_float16(simd_float2 other) {
4820 simd_float16 result = 0;
4821 result.xy = other;
4822 return result;
4823}
4824
4825/*! @abstract Extends `other` to form a vector of sixteen 32-bit floating-
4826 * point numbers. The contents of the newly-created vector lanes are
4827 * unspecified. */
4828static inline SIMD_CFUNC simd_float16 simd_make_float16_undef(simd_float2 other) {
4829 simd_float16 result;
4830 result.xy = other;
4831 return result;
4832}
4833
4834/*! @abstract Zero-extends `other` to form a vector of sixteen 32-bit
4835 * floating-point numbers. */
4836static inline SIMD_CFUNC simd_float16 simd_make_float16(simd_float3 other) {
4837 simd_float16 result = 0;
4838 result.xyz = other;
4839 return result;
4840}
4841
4842/*! @abstract Extends `other` to form a vector of sixteen 32-bit floating-
4843 * point numbers. The contents of the newly-created vector lanes are
4844 * unspecified. */
4845static inline SIMD_CFUNC simd_float16 simd_make_float16_undef(simd_float3 other) {
4846 simd_float16 result;
4847 result.xyz = other;
4848 return result;
4849}
4850
4851/*! @abstract Zero-extends `other` to form a vector of sixteen 32-bit
4852 * floating-point numbers. */
4853static inline SIMD_CFUNC simd_float16 simd_make_float16(simd_float4 other) {
4854 simd_float16 result = 0;
4855 result.xyzw = other;
4856 return result;
4857}
4858
4859/*! @abstract Extends `other` to form a vector of sixteen 32-bit floating-
4860 * point numbers. The contents of the newly-created vector lanes are
4861 * unspecified. */
4862static inline SIMD_CFUNC simd_float16 simd_make_float16_undef(simd_float4 other) {
4863 simd_float16 result;
4864 result.xyzw = other;
4865 return result;
4866}
4867
4868/*! @abstract Zero-extends `other` to form a vector of sixteen 32-bit
4869 * floating-point numbers. */
4870static inline SIMD_CFUNC simd_float16 simd_make_float16(simd_float8 other) {
4871 simd_float16 result = 0;
4872 result.lo = simd_make_float8(other);
4873 return result;
4874}
4875
4876/*! @abstract Extends `other` to form a vector of sixteen 32-bit floating-
4877 * point numbers. The contents of the newly-created vector lanes are
4878 * unspecified. */
4879static inline SIMD_CFUNC simd_float16 simd_make_float16_undef(simd_float8 other) {
4880 simd_float16 result;
4881 result.lo = simd_make_float8(other);
4882 return result;
4883}
4884
4885/*! @abstract Returns `other` unmodified. This function is a convenience for
4886 * templated and autogenerated code. */
4887static inline SIMD_CFUNC simd_float16 simd_make_float16(simd_float16 other) {
4888 return other;
4889}
4890
4891/*! @abstract Concatenates `x` and `y` to form a vector of two 64-bit signed
4892 * (twos-complement) integers. */
4893static inline SIMD_CFUNC simd_long2 simd_make_long2(simd_long1 x, simd_long1 y) {
4894 simd_long2 result;
4895 result.x = x;
4896 result.y = y;
4897 return result;
4898}
4899
4900/*! @abstract Zero-extends `other` to form a vector of two 64-bit signed
4901 * (twos-complement) integers. */
4902static inline SIMD_CFUNC simd_long2 simd_make_long2(simd_long1 other) {
4903 simd_long2 result = 0;
4904 result.x = other;
4905 return result;
4906}
4907
4908/*! @abstract Extends `other` to form a vector of two 64-bit signed (twos-
4909 * complement) integers. The contents of the newly-created vector lanes are
4910 * unspecified. */
4911static inline SIMD_CFUNC simd_long2 simd_make_long2_undef(simd_long1 other) {
4912 simd_long2 result;
4913 result.x = other;
4914 return result;
4915}
4916
4917/*! @abstract Returns `other` unmodified. This function is a convenience for
4918 * templated and autogenerated code. */
4919static inline SIMD_CFUNC simd_long2 simd_make_long2(simd_long2 other) {
4920 return other;
4921}
4922
4923/*! @abstract Truncates `other` to form a vector of two 64-bit signed (twos-
4924 * complement) integers. */
4925static inline SIMD_CFUNC simd_long2 simd_make_long2(simd_long3 other) {
4926 return other.xy;
4927}
4928
4929/*! @abstract Truncates `other` to form a vector of two 64-bit signed (twos-
4930 * complement) integers. */
4931static inline SIMD_CFUNC simd_long2 simd_make_long2(simd_long4 other) {
4932 return other.xy;
4933}
4934
4935/*! @abstract Truncates `other` to form a vector of two 64-bit signed (twos-
4936 * complement) integers. */
4937static inline SIMD_CFUNC simd_long2 simd_make_long2(simd_long8 other) {
4938 return other.xy;
4939}
4940
4941/*! @abstract Concatenates `x`, `y` and `z` to form a vector of three 64-bit
4942 * signed (twos-complement) integers. */
4943static inline SIMD_CFUNC simd_long3 simd_make_long3(simd_long1 x, simd_long1 y, simd_long1 z) {
4944 simd_long3 result;
4945 result.x = x;
4946 result.y = y;
4947 result.z = z;
4948 return result;
4949}
4950
4951/*! @abstract Concatenates `x` and `yz` to form a vector of three 64-bit
4952 * signed (twos-complement) integers. */
4953static inline SIMD_CFUNC simd_long3 simd_make_long3(simd_long1 x, simd_long2 yz) {
4954 simd_long3 result;
4955 result.x = x;
4956 result.yz = yz;
4957 return result;
4958}
4959
4960/*! @abstract Concatenates `xy` and `z` to form a vector of three 64-bit
4961 * signed (twos-complement) integers. */
4962static inline SIMD_CFUNC simd_long3 simd_make_long3(simd_long2 xy, simd_long1 z) {
4963 simd_long3 result;
4964 result.xy = xy;
4965 result.z = z;
4966 return result;
4967}
4968
4969/*! @abstract Zero-extends `other` to form a vector of three 64-bit signed
4970 * (twos-complement) integers. */
4971static inline SIMD_CFUNC simd_long3 simd_make_long3(simd_long1 other) {
4972 simd_long3 result = 0;
4973 result.x = other;
4974 return result;
4975}
4976
4977/*! @abstract Extends `other` to form a vector of three 64-bit signed (twos-
4978 * complement) integers. The contents of the newly-created vector lanes are
4979 * unspecified. */
4980static inline SIMD_CFUNC simd_long3 simd_make_long3_undef(simd_long1 other) {
4981 simd_long3 result;
4982 result.x = other;
4983 return result;
4984}
4985
4986/*! @abstract Zero-extends `other` to form a vector of three 64-bit signed
4987 * (twos-complement) integers. */
4988static inline SIMD_CFUNC simd_long3 simd_make_long3(simd_long2 other) {
4989 simd_long3 result = 0;
4990 result.xy = other;
4991 return result;
4992}
4993
4994/*! @abstract Extends `other` to form a vector of three 64-bit signed (twos-
4995 * complement) integers. The contents of the newly-created vector lanes are
4996 * unspecified. */
4997static inline SIMD_CFUNC simd_long3 simd_make_long3_undef(simd_long2 other) {
4998 simd_long3 result;
4999 result.xy = other;
5000 return result;
5001}
5002
5003/*! @abstract Returns `other` unmodified. This function is a convenience for
5004 * templated and autogenerated code. */
5005static inline SIMD_CFUNC simd_long3 simd_make_long3(simd_long3 other) {
5006 return other;
5007}
5008
5009/*! @abstract Truncates `other` to form a vector of three 64-bit signed
5010 * (twos-complement) integers. */
5011static inline SIMD_CFUNC simd_long3 simd_make_long3(simd_long4 other) {
5012 return other.xyz;
5013}
5014
5015/*! @abstract Truncates `other` to form a vector of three 64-bit signed
5016 * (twos-complement) integers. */
5017static inline SIMD_CFUNC simd_long3 simd_make_long3(simd_long8 other) {
5018 return other.xyz;
5019}
5020
5021/*! @abstract Concatenates `x`, `y`, `z` and `w` to form a vector of four
5022 * 64-bit signed (twos-complement) integers. */
5023static inline SIMD_CFUNC simd_long4 simd_make_long4(simd_long1 x, simd_long1 y, simd_long1 z, simd_long1 w) {
5024 simd_long4 result;
5025 result.x = x;
5026 result.y = y;
5027 result.z = z;
5028 result.w = w;
5029 return result;
5030}
5031
5032/*! @abstract Concatenates `x`, `y` and `zw` to form a vector of four 64-bit
5033 * signed (twos-complement) integers. */
5034static inline SIMD_CFUNC simd_long4 simd_make_long4(simd_long1 x, simd_long1 y, simd_long2 zw) {
5035 simd_long4 result;
5036 result.x = x;
5037 result.y = y;
5038 result.zw = zw;
5039 return result;
5040}
5041
5042/*! @abstract Concatenates `x`, `yz` and `w` to form a vector of four 64-bit
5043 * signed (twos-complement) integers. */
5044static inline SIMD_CFUNC simd_long4 simd_make_long4(simd_long1 x, simd_long2 yz, simd_long1 w) {
5045 simd_long4 result;
5046 result.x = x;
5047 result.yz = yz;
5048 result.w = w;
5049 return result;
5050}
5051
5052/*! @abstract Concatenates `xy`, `z` and `w` to form a vector of four 64-bit
5053 * signed (twos-complement) integers. */
5054static inline SIMD_CFUNC simd_long4 simd_make_long4(simd_long2 xy, simd_long1 z, simd_long1 w) {
5055 simd_long4 result;
5056 result.xy = xy;
5057 result.z = z;
5058 result.w = w;
5059 return result;
5060}
5061
5062/*! @abstract Concatenates `x` and `yzw` to form a vector of four 64-bit
5063 * signed (twos-complement) integers. */
5064static inline SIMD_CFUNC simd_long4 simd_make_long4(simd_long1 x, simd_long3 yzw) {
5065 simd_long4 result;
5066 result.x = x;
5067 result.yzw = yzw;
5068 return result;
5069}
5070
5071/*! @abstract Concatenates `xy` and `zw` to form a vector of four 64-bit
5072 * signed (twos-complement) integers. */
5073static inline SIMD_CFUNC simd_long4 simd_make_long4(simd_long2 xy, simd_long2 zw) {
5074 simd_long4 result;
5075 result.xy = xy;
5076 result.zw = zw;
5077 return result;
5078}
5079
5080/*! @abstract Concatenates `xyz` and `w` to form a vector of four 64-bit
5081 * signed (twos-complement) integers. */
5082static inline SIMD_CFUNC simd_long4 simd_make_long4(simd_long3 xyz, simd_long1 w) {
5083 simd_long4 result;
5084 result.xyz = xyz;
5085 result.w = w;
5086 return result;
5087}
5088
5089/*! @abstract Zero-extends `other` to form a vector of four 64-bit signed
5090 * (twos-complement) integers. */
5091static inline SIMD_CFUNC simd_long4 simd_make_long4(simd_long1 other) {
5092 simd_long4 result = 0;
5093 result.x = other;
5094 return result;
5095}
5096
5097/*! @abstract Extends `other` to form a vector of four 64-bit signed (twos-
5098 * complement) integers. The contents of the newly-created vector lanes are
5099 * unspecified. */
5100static inline SIMD_CFUNC simd_long4 simd_make_long4_undef(simd_long1 other) {
5101 simd_long4 result;
5102 result.x = other;
5103 return result;
5104}
5105
5106/*! @abstract Zero-extends `other` to form a vector of four 64-bit signed
5107 * (twos-complement) integers. */
5108static inline SIMD_CFUNC simd_long4 simd_make_long4(simd_long2 other) {
5109 simd_long4 result = 0;
5110 result.xy = other;
5111 return result;
5112}
5113
5114/*! @abstract Extends `other` to form a vector of four 64-bit signed (twos-
5115 * complement) integers. The contents of the newly-created vector lanes are
5116 * unspecified. */
5117static inline SIMD_CFUNC simd_long4 simd_make_long4_undef(simd_long2 other) {
5118 simd_long4 result;
5119 result.xy = other;
5120 return result;
5121}
5122
5123/*! @abstract Zero-extends `other` to form a vector of four 64-bit signed
5124 * (twos-complement) integers. */
5125static inline SIMD_CFUNC simd_long4 simd_make_long4(simd_long3 other) {
5126 simd_long4 result = 0;
5127 result.xyz = other;
5128 return result;
5129}
5130
5131/*! @abstract Extends `other` to form a vector of four 64-bit signed (twos-
5132 * complement) integers. The contents of the newly-created vector lanes are
5133 * unspecified. */
5134static inline SIMD_CFUNC simd_long4 simd_make_long4_undef(simd_long3 other) {
5135 simd_long4 result;
5136 result.xyz = other;
5137 return result;
5138}
5139
5140/*! @abstract Returns `other` unmodified. This function is a convenience for
5141 * templated and autogenerated code. */
5142static inline SIMD_CFUNC simd_long4 simd_make_long4(simd_long4 other) {
5143 return other;
5144}
5145
5146/*! @abstract Truncates `other` to form a vector of four 64-bit signed
5147 * (twos-complement) integers. */
5148static inline SIMD_CFUNC simd_long4 simd_make_long4(simd_long8 other) {
5149 return other.xyzw;
5150}
5151
5152/*! @abstract Concatenates `lo` and `hi` to form a vector of eight 64-bit
5153 * signed (twos-complement) integers. */
5154static inline SIMD_CFUNC simd_long8 simd_make_long8(simd_long4 lo, simd_long4 hi) {
5155 simd_long8 result;
5156 result.lo = lo;
5157 result.hi = hi;
5158 return result;
5159}
5160
5161/*! @abstract Zero-extends `other` to form a vector of eight 64-bit signed
5162 * (twos-complement) integers. */
5163static inline SIMD_CFUNC simd_long8 simd_make_long8(simd_long1 other) {
5164 simd_long8 result = 0;
5165 result.x = other;
5166 return result;
5167}
5168
5169/*! @abstract Extends `other` to form a vector of eight 64-bit signed (twos-
5170 * complement) integers. The contents of the newly-created vector lanes are
5171 * unspecified. */
5172static inline SIMD_CFUNC simd_long8 simd_make_long8_undef(simd_long1 other) {
5173 simd_long8 result;
5174 result.x = other;
5175 return result;
5176}
5177
5178/*! @abstract Zero-extends `other` to form a vector of eight 64-bit signed
5179 * (twos-complement) integers. */
5180static inline SIMD_CFUNC simd_long8 simd_make_long8(simd_long2 other) {
5181 simd_long8 result = 0;
5182 result.xy = other;
5183 return result;
5184}
5185
5186/*! @abstract Extends `other` to form a vector of eight 64-bit signed (twos-
5187 * complement) integers. The contents of the newly-created vector lanes are
5188 * unspecified. */
5189static inline SIMD_CFUNC simd_long8 simd_make_long8_undef(simd_long2 other) {
5190 simd_long8 result;
5191 result.xy = other;
5192 return result;
5193}
5194
5195/*! @abstract Zero-extends `other` to form a vector of eight 64-bit signed
5196 * (twos-complement) integers. */
5197static inline SIMD_CFUNC simd_long8 simd_make_long8(simd_long3 other) {
5198 simd_long8 result = 0;
5199 result.xyz = other;
5200 return result;
5201}
5202
5203/*! @abstract Extends `other` to form a vector of eight 64-bit signed (twos-
5204 * complement) integers. The contents of the newly-created vector lanes are
5205 * unspecified. */
5206static inline SIMD_CFUNC simd_long8 simd_make_long8_undef(simd_long3 other) {
5207 simd_long8 result;
5208 result.xyz = other;
5209 return result;
5210}
5211
5212/*! @abstract Zero-extends `other` to form a vector of eight 64-bit signed
5213 * (twos-complement) integers. */
5214static inline SIMD_CFUNC simd_long8 simd_make_long8(simd_long4 other) {
5215 simd_long8 result = 0;
5216 result.xyzw = other;
5217 return result;
5218}
5219
5220/*! @abstract Extends `other` to form a vector of eight 64-bit signed (twos-
5221 * complement) integers. The contents of the newly-created vector lanes are
5222 * unspecified. */
5223static inline SIMD_CFUNC simd_long8 simd_make_long8_undef(simd_long4 other) {
5224 simd_long8 result;
5225 result.xyzw = other;
5226 return result;
5227}
5228
5229/*! @abstract Returns `other` unmodified. This function is a convenience for
5230 * templated and autogenerated code. */
5231static inline SIMD_CFUNC simd_long8 simd_make_long8(simd_long8 other) {
5232 return other;
5233}
5234
5235/*! @abstract Concatenates `x` and `y` to form a vector of two 64-bit
5236 * unsigned integers. */
5237static inline SIMD_CFUNC simd_ulong2 simd_make_ulong2(simd_ulong1 x, simd_ulong1 y) {
5238 simd_ulong2 result;
5239 result.x = x;
5240 result.y = y;
5241 return result;
5242}
5243
5244/*! @abstract Zero-extends `other` to form a vector of two 64-bit unsigned
5245 * integers. */
5246static inline SIMD_CFUNC simd_ulong2 simd_make_ulong2(simd_ulong1 other) {
5247 simd_ulong2 result = 0;
5248 result.x = other;
5249 return result;
5250}
5251
5252/*! @abstract Extends `other` to form a vector of two 64-bit unsigned
5253 * integers. The contents of the newly-created vector lanes are
5254 * unspecified. */
5255static inline SIMD_CFUNC simd_ulong2 simd_make_ulong2_undef(simd_ulong1 other) {
5256 simd_ulong2 result;
5257 result.x = other;
5258 return result;
5259}
5260
5261/*! @abstract Returns `other` unmodified. This function is a convenience for
5262 * templated and autogenerated code. */
5263static inline SIMD_CFUNC simd_ulong2 simd_make_ulong2(simd_ulong2 other) {
5264 return other;
5265}
5266
5267/*! @abstract Truncates `other` to form a vector of two 64-bit unsigned
5268 * integers. */
5269static inline SIMD_CFUNC simd_ulong2 simd_make_ulong2(simd_ulong3 other) {
5270 return other.xy;
5271}
5272
5273/*! @abstract Truncates `other` to form a vector of two 64-bit unsigned
5274 * integers. */
5275static inline SIMD_CFUNC simd_ulong2 simd_make_ulong2(simd_ulong4 other) {
5276 return other.xy;
5277}
5278
5279/*! @abstract Truncates `other` to form a vector of two 64-bit unsigned
5280 * integers. */
5281static inline SIMD_CFUNC simd_ulong2 simd_make_ulong2(simd_ulong8 other) {
5282 return other.xy;
5283}
5284
5285/*! @abstract Concatenates `x`, `y` and `z` to form a vector of three 64-bit
5286 * unsigned integers. */
5287static inline SIMD_CFUNC simd_ulong3 simd_make_ulong3(simd_ulong1 x, simd_ulong1 y, simd_ulong1 z) {
5288 simd_ulong3 result;
5289 result.x = x;
5290 result.y = y;
5291 result.z = z;
5292 return result;
5293}
5294
5295/*! @abstract Concatenates `x` and `yz` to form a vector of three 64-bit
5296 * unsigned integers. */
5297static inline SIMD_CFUNC simd_ulong3 simd_make_ulong3(simd_ulong1 x, simd_ulong2 yz) {
5298 simd_ulong3 result;
5299 result.x = x;
5300 result.yz = yz;
5301 return result;
5302}
5303
5304/*! @abstract Concatenates `xy` and `z` to form a vector of three 64-bit
5305 * unsigned integers. */
5306static inline SIMD_CFUNC simd_ulong3 simd_make_ulong3(simd_ulong2 xy, simd_ulong1 z) {
5307 simd_ulong3 result;
5308 result.xy = xy;
5309 result.z = z;
5310 return result;
5311}
5312
5313/*! @abstract Zero-extends `other` to form a vector of three 64-bit unsigned
5314 * integers. */
5315static inline SIMD_CFUNC simd_ulong3 simd_make_ulong3(simd_ulong1 other) {
5316 simd_ulong3 result = 0;
5317 result.x = other;
5318 return result;
5319}
5320
5321/*! @abstract Extends `other` to form a vector of three 64-bit unsigned
5322 * integers. The contents of the newly-created vector lanes are
5323 * unspecified. */
5324static inline SIMD_CFUNC simd_ulong3 simd_make_ulong3_undef(simd_ulong1 other) {
5325 simd_ulong3 result;
5326 result.x = other;
5327 return result;
5328}
5329
5330/*! @abstract Zero-extends `other` to form a vector of three 64-bit unsigned
5331 * integers. */
5332static inline SIMD_CFUNC simd_ulong3 simd_make_ulong3(simd_ulong2 other) {
5333 simd_ulong3 result = 0;
5334 result.xy = other;
5335 return result;
5336}
5337
5338/*! @abstract Extends `other` to form a vector of three 64-bit unsigned
5339 * integers. The contents of the newly-created vector lanes are
5340 * unspecified. */
5341static inline SIMD_CFUNC simd_ulong3 simd_make_ulong3_undef(simd_ulong2 other) {
5342 simd_ulong3 result;
5343 result.xy = other;
5344 return result;
5345}
5346
5347/*! @abstract Returns `other` unmodified. This function is a convenience for
5348 * templated and autogenerated code. */
5349static inline SIMD_CFUNC simd_ulong3 simd_make_ulong3(simd_ulong3 other) {
5350 return other;
5351}
5352
5353/*! @abstract Truncates `other` to form a vector of three 64-bit unsigned
5354 * integers. */
5355static inline SIMD_CFUNC simd_ulong3 simd_make_ulong3(simd_ulong4 other) {
5356 return other.xyz;
5357}
5358
5359/*! @abstract Truncates `other` to form a vector of three 64-bit unsigned
5360 * integers. */
5361static inline SIMD_CFUNC simd_ulong3 simd_make_ulong3(simd_ulong8 other) {
5362 return other.xyz;
5363}
5364
5365/*! @abstract Concatenates `x`, `y`, `z` and `w` to form a vector of four
5366 * 64-bit unsigned integers. */
5367static inline SIMD_CFUNC simd_ulong4 simd_make_ulong4(simd_ulong1 x, simd_ulong1 y, simd_ulong1 z, simd_ulong1 w) {
5368 simd_ulong4 result;
5369 result.x = x;
5370 result.y = y;
5371 result.z = z;
5372 result.w = w;
5373 return result;
5374}
5375
5376/*! @abstract Concatenates `x`, `y` and `zw` to form a vector of four 64-bit
5377 * unsigned integers. */
5378static inline SIMD_CFUNC simd_ulong4 simd_make_ulong4(simd_ulong1 x, simd_ulong1 y, simd_ulong2 zw) {
5379 simd_ulong4 result;
5380 result.x = x;
5381 result.y = y;
5382 result.zw = zw;
5383 return result;
5384}
5385
5386/*! @abstract Concatenates `x`, `yz` and `w` to form a vector of four 64-bit
5387 * unsigned integers. */
5388static inline SIMD_CFUNC simd_ulong4 simd_make_ulong4(simd_ulong1 x, simd_ulong2 yz, simd_ulong1 w) {
5389 simd_ulong4 result;
5390 result.x = x;
5391 result.yz = yz;
5392 result.w = w;
5393 return result;
5394}
5395
5396/*! @abstract Concatenates `xy`, `z` and `w` to form a vector of four 64-bit
5397 * unsigned integers. */
5398static inline SIMD_CFUNC simd_ulong4 simd_make_ulong4(simd_ulong2 xy, simd_ulong1 z, simd_ulong1 w) {
5399 simd_ulong4 result;
5400 result.xy = xy;
5401 result.z = z;
5402 result.w = w;
5403 return result;
5404}
5405
5406/*! @abstract Concatenates `x` and `yzw` to form a vector of four 64-bit
5407 * unsigned integers. */
5408static inline SIMD_CFUNC simd_ulong4 simd_make_ulong4(simd_ulong1 x, simd_ulong3 yzw) {
5409 simd_ulong4 result;
5410 result.x = x;
5411 result.yzw = yzw;
5412 return result;
5413}
5414
5415/*! @abstract Concatenates `xy` and `zw` to form a vector of four 64-bit
5416 * unsigned integers. */
5417static inline SIMD_CFUNC simd_ulong4 simd_make_ulong4(simd_ulong2 xy, simd_ulong2 zw) {
5418 simd_ulong4 result;
5419 result.xy = xy;
5420 result.zw = zw;
5421 return result;
5422}
5423
5424/*! @abstract Concatenates `xyz` and `w` to form a vector of four 64-bit
5425 * unsigned integers. */
5426static inline SIMD_CFUNC simd_ulong4 simd_make_ulong4(simd_ulong3 xyz, simd_ulong1 w) {
5427 simd_ulong4 result;
5428 result.xyz = xyz;
5429 result.w = w;
5430 return result;
5431}
5432
5433/*! @abstract Zero-extends `other` to form a vector of four 64-bit unsigned
5434 * integers. */
5435static inline SIMD_CFUNC simd_ulong4 simd_make_ulong4(simd_ulong1 other) {
5436 simd_ulong4 result = 0;
5437 result.x = other;
5438 return result;
5439}
5440
5441/*! @abstract Extends `other` to form a vector of four 64-bit unsigned
5442 * integers. The contents of the newly-created vector lanes are
5443 * unspecified. */
5444static inline SIMD_CFUNC simd_ulong4 simd_make_ulong4_undef(simd_ulong1 other) {
5445 simd_ulong4 result;
5446 result.x = other;
5447 return result;
5448}
5449
5450/*! @abstract Zero-extends `other` to form a vector of four 64-bit unsigned
5451 * integers. */
5452static inline SIMD_CFUNC simd_ulong4 simd_make_ulong4(simd_ulong2 other) {
5453 simd_ulong4 result = 0;
5454 result.xy = other;
5455 return result;
5456}
5457
5458/*! @abstract Extends `other` to form a vector of four 64-bit unsigned
5459 * integers. The contents of the newly-created vector lanes are
5460 * unspecified. */
5461static inline SIMD_CFUNC simd_ulong4 simd_make_ulong4_undef(simd_ulong2 other) {
5462 simd_ulong4 result;
5463 result.xy = other;
5464 return result;
5465}
5466
5467/*! @abstract Zero-extends `other` to form a vector of four 64-bit unsigned
5468 * integers. */
5469static inline SIMD_CFUNC simd_ulong4 simd_make_ulong4(simd_ulong3 other) {
5470 simd_ulong4 result = 0;
5471 result.xyz = other;
5472 return result;
5473}
5474
5475/*! @abstract Extends `other` to form a vector of four 64-bit unsigned
5476 * integers. The contents of the newly-created vector lanes are
5477 * unspecified. */
5478static inline SIMD_CFUNC simd_ulong4 simd_make_ulong4_undef(simd_ulong3 other) {
5479 simd_ulong4 result;
5480 result.xyz = other;
5481 return result;
5482}
5483
5484/*! @abstract Returns `other` unmodified. This function is a convenience for
5485 * templated and autogenerated code. */
5486static inline SIMD_CFUNC simd_ulong4 simd_make_ulong4(simd_ulong4 other) {
5487 return other;
5488}
5489
5490/*! @abstract Truncates `other` to form a vector of four 64-bit unsigned
5491 * integers. */
5492static inline SIMD_CFUNC simd_ulong4 simd_make_ulong4(simd_ulong8 other) {
5493 return other.xyzw;
5494}
5495
5496/*! @abstract Concatenates `lo` and `hi` to form a vector of eight 64-bit
5497 * unsigned integers. */
5498static inline SIMD_CFUNC simd_ulong8 simd_make_ulong8(simd_ulong4 lo, simd_ulong4 hi) {
5499 simd_ulong8 result;
5500 result.lo = lo;
5501 result.hi = hi;
5502 return result;
5503}
5504
5505/*! @abstract Zero-extends `other` to form a vector of eight 64-bit unsigned
5506 * integers. */
5507static inline SIMD_CFUNC simd_ulong8 simd_make_ulong8(simd_ulong1 other) {
5508 simd_ulong8 result = 0;
5509 result.x = other;
5510 return result;
5511}
5512
5513/*! @abstract Extends `other` to form a vector of eight 64-bit unsigned
5514 * integers. The contents of the newly-created vector lanes are
5515 * unspecified. */
5516static inline SIMD_CFUNC simd_ulong8 simd_make_ulong8_undef(simd_ulong1 other) {
5517 simd_ulong8 result;
5518 result.x = other;
5519 return result;
5520}
5521
5522/*! @abstract Zero-extends `other` to form a vector of eight 64-bit unsigned
5523 * integers. */
5524static inline SIMD_CFUNC simd_ulong8 simd_make_ulong8(simd_ulong2 other) {
5525 simd_ulong8 result = 0;
5526 result.xy = other;
5527 return result;
5528}
5529
5530/*! @abstract Extends `other` to form a vector of eight 64-bit unsigned
5531 * integers. The contents of the newly-created vector lanes are
5532 * unspecified. */
5533static inline SIMD_CFUNC simd_ulong8 simd_make_ulong8_undef(simd_ulong2 other) {
5534 simd_ulong8 result;
5535 result.xy = other;
5536 return result;
5537}
5538
5539/*! @abstract Zero-extends `other` to form a vector of eight 64-bit unsigned
5540 * integers. */
5541static inline SIMD_CFUNC simd_ulong8 simd_make_ulong8(simd_ulong3 other) {
5542 simd_ulong8 result = 0;
5543 result.xyz = other;
5544 return result;
5545}
5546
5547/*! @abstract Extends `other` to form a vector of eight 64-bit unsigned
5548 * integers. The contents of the newly-created vector lanes are
5549 * unspecified. */
5550static inline SIMD_CFUNC simd_ulong8 simd_make_ulong8_undef(simd_ulong3 other) {
5551 simd_ulong8 result;
5552 result.xyz = other;
5553 return result;
5554}
5555
5556/*! @abstract Zero-extends `other` to form a vector of eight 64-bit unsigned
5557 * integers. */
5558static inline SIMD_CFUNC simd_ulong8 simd_make_ulong8(simd_ulong4 other) {
5559 simd_ulong8 result = 0;
5560 result.xyzw = other;
5561 return result;
5562}
5563
5564/*! @abstract Extends `other` to form a vector of eight 64-bit unsigned
5565 * integers. The contents of the newly-created vector lanes are
5566 * unspecified. */
5567static inline SIMD_CFUNC simd_ulong8 simd_make_ulong8_undef(simd_ulong4 other) {
5568 simd_ulong8 result;
5569 result.xyzw = other;
5570 return result;
5571}
5572
5573/*! @abstract Returns `other` unmodified. This function is a convenience for
5574 * templated and autogenerated code. */
5575static inline SIMD_CFUNC simd_ulong8 simd_make_ulong8(simd_ulong8 other) {
5576 return other;
5577}
5578
5579/*! @abstract Concatenates `x` and `y` to form a vector of two 64-bit
5580 * floating-point numbers. */
5581static inline SIMD_CFUNC simd_double2 simd_make_double2(double x, double y) {
5582 simd_double2 result;
5583 result.x = x;
5584 result.y = y;
5585 return result;
5586}
5587
5588/*! @abstract Zero-extends `other` to form a vector of two 64-bit floating-
5589 * point numbers. */
5590static inline SIMD_CFUNC simd_double2 simd_make_double2(double other) {
5591 simd_double2 result = 0;
5592 result.x = other;
5593 return result;
5594}
5595
5596/*! @abstract Extends `other` to form a vector of two 64-bit floating-point
5597 * numbers. The contents of the newly-created vector lanes are unspecified. */
5598static inline SIMD_CFUNC simd_double2 simd_make_double2_undef(double other) {
5599 simd_double2 result;
5600 result.x = other;
5601 return result;
5602}
5603
5604/*! @abstract Returns `other` unmodified. This function is a convenience for
5605 * templated and autogenerated code. */
5606static inline SIMD_CFUNC simd_double2 simd_make_double2(simd_double2 other) {
5607 return other;
5608}
5609
5610/*! @abstract Truncates `other` to form a vector of two 64-bit floating-
5611 * point numbers. */
5612static inline SIMD_CFUNC simd_double2 simd_make_double2(simd_double3 other) {
5613 return other.xy;
5614}
5615
5616/*! @abstract Truncates `other` to form a vector of two 64-bit floating-
5617 * point numbers. */
5618static inline SIMD_CFUNC simd_double2 simd_make_double2(simd_double4 other) {
5619 return other.xy;
5620}
5621
5622/*! @abstract Truncates `other` to form a vector of two 64-bit floating-
5623 * point numbers. */
5624static inline SIMD_CFUNC simd_double2 simd_make_double2(simd_double8 other) {
5625 return other.xy;
5626}
5627
5628/*! @abstract Concatenates `x`, `y` and `z` to form a vector of three 64-bit
5629 * floating-point numbers. */
5630static inline SIMD_CFUNC simd_double3 simd_make_double3(double x, double y, double z) {
5631 simd_double3 result;
5632 result.x = x;
5633 result.y = y;
5634 result.z = z;
5635 return result;
5636}
5637
5638/*! @abstract Concatenates `x` and `yz` to form a vector of three 64-bit
5639 * floating-point numbers. */
5640static inline SIMD_CFUNC simd_double3 simd_make_double3(double x, simd_double2 yz) {
5641 simd_double3 result;
5642 result.x = x;
5643 result.yz = yz;
5644 return result;
5645}
5646
5647/*! @abstract Concatenates `xy` and `z` to form a vector of three 64-bit
5648 * floating-point numbers. */
5649static inline SIMD_CFUNC simd_double3 simd_make_double3(simd_double2 xy, double z) {
5650 simd_double3 result;
5651 result.xy = xy;
5652 result.z = z;
5653 return result;
5654}
5655
5656/*! @abstract Zero-extends `other` to form a vector of three 64-bit
5657 * floating-point numbers. */
5658static inline SIMD_CFUNC simd_double3 simd_make_double3(double other) {
5659 simd_double3 result = 0;
5660 result.x = other;
5661 return result;
5662}
5663
5664/*! @abstract Extends `other` to form a vector of three 64-bit floating-
5665 * point numbers. The contents of the newly-created vector lanes are
5666 * unspecified. */
5667static inline SIMD_CFUNC simd_double3 simd_make_double3_undef(double other) {
5668 simd_double3 result;
5669 result.x = other;
5670 return result;
5671}
5672
5673/*! @abstract Zero-extends `other` to form a vector of three 64-bit
5674 * floating-point numbers. */
5675static inline SIMD_CFUNC simd_double3 simd_make_double3(simd_double2 other) {
5676 simd_double3 result = 0;
5677 result.xy = other;
5678 return result;
5679}
5680
5681/*! @abstract Extends `other` to form a vector of three 64-bit floating-
5682 * point numbers. The contents of the newly-created vector lanes are
5683 * unspecified. */
5684static inline SIMD_CFUNC simd_double3 simd_make_double3_undef(simd_double2 other) {
5685 simd_double3 result;
5686 result.xy = other;
5687 return result;
5688}
5689
5690/*! @abstract Returns `other` unmodified. This function is a convenience for
5691 * templated and autogenerated code. */
5692static inline SIMD_CFUNC simd_double3 simd_make_double3(simd_double3 other) {
5693 return other;
5694}
5695
5696/*! @abstract Truncates `other` to form a vector of three 64-bit floating-
5697 * point numbers. */
5698static inline SIMD_CFUNC simd_double3 simd_make_double3(simd_double4 other) {
5699 return other.xyz;
5700}
5701
5702/*! @abstract Truncates `other` to form a vector of three 64-bit floating-
5703 * point numbers. */
5704static inline SIMD_CFUNC simd_double3 simd_make_double3(simd_double8 other) {
5705 return other.xyz;
5706}
5707
5708/*! @abstract Concatenates `x`, `y`, `z` and `w` to form a vector of four
5709 * 64-bit floating-point numbers. */
5710static inline SIMD_CFUNC simd_double4 simd_make_double4(double x, double y, double z, double w) {
5711 simd_double4 result;
5712 result.x = x;
5713 result.y = y;
5714 result.z = z;
5715 result.w = w;
5716 return result;
5717}
5718
5719/*! @abstract Concatenates `x`, `y` and `zw` to form a vector of four 64-bit
5720 * floating-point numbers. */
5721static inline SIMD_CFUNC simd_double4 simd_make_double4(double x, double y, simd_double2 zw) {
5722 simd_double4 result;
5723 result.x = x;
5724 result.y = y;
5725 result.zw = zw;
5726 return result;
5727}
5728
5729/*! @abstract Concatenates `x`, `yz` and `w` to form a vector of four 64-bit
5730 * floating-point numbers. */
5731static inline SIMD_CFUNC simd_double4 simd_make_double4(double x, simd_double2 yz, double w) {
5732 simd_double4 result;
5733 result.x = x;
5734 result.yz = yz;
5735 result.w = w;
5736 return result;
5737}
5738
5739/*! @abstract Concatenates `xy`, `z` and `w` to form a vector of four 64-bit
5740 * floating-point numbers. */
5741static inline SIMD_CFUNC simd_double4 simd_make_double4(simd_double2 xy, double z, double w) {
5742 simd_double4 result;
5743 result.xy = xy;
5744 result.z = z;
5745 result.w = w;
5746 return result;
5747}
5748
5749/*! @abstract Concatenates `x` and `yzw` to form a vector of four 64-bit
5750 * floating-point numbers. */
5751static inline SIMD_CFUNC simd_double4 simd_make_double4(double x, simd_double3 yzw) {
5752 simd_double4 result;
5753 result.x = x;
5754 result.yzw = yzw;
5755 return result;
5756}
5757
5758/*! @abstract Concatenates `xy` and `zw` to form a vector of four 64-bit
5759 * floating-point numbers. */
5760static inline SIMD_CFUNC simd_double4 simd_make_double4(simd_double2 xy, simd_double2 zw) {
5761 simd_double4 result;
5762 result.xy = xy;
5763 result.zw = zw;
5764 return result;
5765}
5766
5767/*! @abstract Concatenates `xyz` and `w` to form a vector of four 64-bit
5768 * floating-point numbers. */
5769static inline SIMD_CFUNC simd_double4 simd_make_double4(simd_double3 xyz, double w) {
5770 simd_double4 result;
5771 result.xyz = xyz;
5772 result.w = w;
5773 return result;
5774}
5775
5776/*! @abstract Zero-extends `other` to form a vector of four 64-bit floating-
5777 * point numbers. */
5778static inline SIMD_CFUNC simd_double4 simd_make_double4(double other) {
5779 simd_double4 result = 0;
5780 result.x = other;
5781 return result;
5782}
5783
5784/*! @abstract Extends `other` to form a vector of four 64-bit floating-point
5785 * numbers. The contents of the newly-created vector lanes are unspecified. */
5786static inline SIMD_CFUNC simd_double4 simd_make_double4_undef(double other) {
5787 simd_double4 result;
5788 result.x = other;
5789 return result;
5790}
5791
5792/*! @abstract Zero-extends `other` to form a vector of four 64-bit floating-
5793 * point numbers. */
5794static inline SIMD_CFUNC simd_double4 simd_make_double4(simd_double2 other) {
5795 simd_double4 result = 0;
5796 result.xy = other;
5797 return result;
5798}
5799
5800/*! @abstract Extends `other` to form a vector of four 64-bit floating-point
5801 * numbers. The contents of the newly-created vector lanes are unspecified. */
5802static inline SIMD_CFUNC simd_double4 simd_make_double4_undef(simd_double2 other) {
5803 simd_double4 result;
5804 result.xy = other;
5805 return result;
5806}
5807
5808/*! @abstract Zero-extends `other` to form a vector of four 64-bit floating-
5809 * point numbers. */
5810static inline SIMD_CFUNC simd_double4 simd_make_double4(simd_double3 other) {
5811 simd_double4 result = 0;
5812 result.xyz = other;
5813 return result;
5814}
5815
5816/*! @abstract Extends `other` to form a vector of four 64-bit floating-point
5817 * numbers. The contents of the newly-created vector lanes are unspecified. */
5818static inline SIMD_CFUNC simd_double4 simd_make_double4_undef(simd_double3 other) {
5819 simd_double4 result;
5820 result.xyz = other;
5821 return result;
5822}
5823
5824/*! @abstract Returns `other` unmodified. This function is a convenience for
5825 * templated and autogenerated code. */
5826static inline SIMD_CFUNC simd_double4 simd_make_double4(simd_double4 other) {
5827 return other;
5828}
5829
5830/*! @abstract Truncates `other` to form a vector of four 64-bit floating-
5831 * point numbers. */
5832static inline SIMD_CFUNC simd_double4 simd_make_double4(simd_double8 other) {
5833 return other.xyzw;
5834}
5835
5836/*! @abstract Concatenates `lo` and `hi` to form a vector of eight 64-bit
5837 * floating-point numbers. */
5838static inline SIMD_CFUNC simd_double8 simd_make_double8(simd_double4 lo, simd_double4 hi) {
5839 simd_double8 result;
5840 result.lo = lo;
5841 result.hi = hi;
5842 return result;
5843}
5844
5845/*! @abstract Zero-extends `other` to form a vector of eight 64-bit
5846 * floating-point numbers. */
5847static inline SIMD_CFUNC simd_double8 simd_make_double8(double other) {
5848 simd_double8 result = 0;
5849 result.x = other;
5850 return result;
5851}
5852
5853/*! @abstract Extends `other` to form a vector of eight 64-bit floating-
5854 * point numbers. The contents of the newly-created vector lanes are
5855 * unspecified. */
5856static inline SIMD_CFUNC simd_double8 simd_make_double8_undef(double other) {
5857 simd_double8 result;
5858 result.x = other;
5859 return result;
5860}
5861
5862/*! @abstract Zero-extends `other` to form a vector of eight 64-bit
5863 * floating-point numbers. */
5864static inline SIMD_CFUNC simd_double8 simd_make_double8(simd_double2 other) {
5865 simd_double8 result = 0;
5866 result.xy = other;
5867 return result;
5868}
5869
5870/*! @abstract Extends `other` to form a vector of eight 64-bit floating-
5871 * point numbers. The contents of the newly-created vector lanes are
5872 * unspecified. */
5873static inline SIMD_CFUNC simd_double8 simd_make_double8_undef(simd_double2 other) {
5874 simd_double8 result;
5875 result.xy = other;
5876 return result;
5877}
5878
5879/*! @abstract Zero-extends `other` to form a vector of eight 64-bit
5880 * floating-point numbers. */
5881static inline SIMD_CFUNC simd_double8 simd_make_double8(simd_double3 other) {
5882 simd_double8 result = 0;
5883 result.xyz = other;
5884 return result;
5885}
5886
5887/*! @abstract Extends `other` to form a vector of eight 64-bit floating-
5888 * point numbers. The contents of the newly-created vector lanes are
5889 * unspecified. */
5890static inline SIMD_CFUNC simd_double8 simd_make_double8_undef(simd_double3 other) {
5891 simd_double8 result;
5892 result.xyz = other;
5893 return result;
5894}
5895
5896/*! @abstract Zero-extends `other` to form a vector of eight 64-bit
5897 * floating-point numbers. */
5898static inline SIMD_CFUNC simd_double8 simd_make_double8(simd_double4 other) {
5899 simd_double8 result = 0;
5900 result.xyzw = other;
5901 return result;
5902}
5903
5904/*! @abstract Extends `other` to form a vector of eight 64-bit floating-
5905 * point numbers. The contents of the newly-created vector lanes are
5906 * unspecified. */
5907static inline SIMD_CFUNC simd_double8 simd_make_double8_undef(simd_double4 other) {
5908 simd_double8 result;
5909 result.xyzw = other;
5910 return result;
5911}
5912
5913/*! @abstract Returns `other` unmodified. This function is a convenience for
5914 * templated and autogenerated code. */
5915static inline SIMD_CFUNC simd_double8 simd_make_double8(simd_double8 other) {
5916 return other;
5917}
5918
5919#ifdef __cplusplus
5920} /* extern "C" */
5921
5922#include <tuple>
5923#include <simd/packed.h>
5924
5925namespace simd {
5926/*! @abstract Concatenates `x` and `y` to form a vector of two 8-bit signed
5927 * (twos-complement) integers. */
5928static inline SIMD_CPPFUNC char2 make_char2(char x, char y) {
5929 return ::simd_make_char2(x, y);
5930}
5931
5932/*! @abstract Truncates or zero-extends `other` to form a vector of two
5933 * 8-bit signed (twos-complement) integers. */
5934template <typename typeN> static SIMD_CPPFUNC char2 make_char2(typeN other) {
5935 return ::simd_make_char2(other);
5936}
5937
5938/*! @abstract Extends `other` to form a vector of two 8-bit signed (twos-
5939 * complement) integers. The contents of the newly-created vector lanes are
5940 * unspecified. */
5941template <typename typeN> static SIMD_CPPFUNC char2 make_char2_undef(typeN other) {
5942 return ::simd_make_char2_undef(other);
5943}
5944
5945/*! @abstract Concatenates `x`, `y` and `z` to form a vector of three 8-bit
5946 * signed (twos-complement) integers. */
5947static inline SIMD_CPPFUNC char3 make_char3(char x, char y, char z) {
5948 return ::simd_make_char3(x, y, z);
5949}
5950
5951/*! @abstract Concatenates `x` and `yz` to form a vector of three 8-bit
5952 * signed (twos-complement) integers. */
5953static inline SIMD_CPPFUNC char3 make_char3(char x, char2 yz) {
5954 return ::simd_make_char3(x, yz);
5955}
5956
5957/*! @abstract Concatenates `xy` and `z` to form a vector of three 8-bit
5958 * signed (twos-complement) integers. */
5959static inline SIMD_CPPFUNC char3 make_char3(char2 xy, char z) {
5960 return ::simd_make_char3(xy, z);
5961}
5962
5963/*! @abstract Truncates or zero-extends `other` to form a vector of three
5964 * 8-bit signed (twos-complement) integers. */
5965template <typename typeN> static SIMD_CPPFUNC char3 make_char3(typeN other) {
5966 return ::simd_make_char3(other);
5967}
5968
5969/*! @abstract Extends `other` to form a vector of three 8-bit signed (twos-
5970 * complement) integers. The contents of the newly-created vector lanes are
5971 * unspecified. */
5972template <typename typeN> static SIMD_CPPFUNC char3 make_char3_undef(typeN other) {
5973 return ::simd_make_char3_undef(other);
5974}
5975
5976/*! @abstract Concatenates `x`, `y`, `z` and `w` to form a vector of four
5977 * 8-bit signed (twos-complement) integers. */
5978static inline SIMD_CPPFUNC char4 make_char4(char x, char y, char z, char w) {
5979 return ::simd_make_char4(x, y, z, w);
5980}
5981
5982/*! @abstract Concatenates `x`, `y` and `zw` to form a vector of four 8-bit
5983 * signed (twos-complement) integers. */
5984static inline SIMD_CPPFUNC char4 make_char4(char x, char y, char2 zw) {
5985 return ::simd_make_char4(x, y, zw);
5986}
5987
5988/*! @abstract Concatenates `x`, `yz` and `w` to form a vector of four 8-bit
5989 * signed (twos-complement) integers. */
5990static inline SIMD_CPPFUNC char4 make_char4(char x, char2 yz, char w) {
5991 return ::simd_make_char4(x, yz, w);
5992}
5993
5994/*! @abstract Concatenates `xy`, `z` and `w` to form a vector of four 8-bit
5995 * signed (twos-complement) integers. */
5996static inline SIMD_CPPFUNC char4 make_char4(char2 xy, char z, char w) {
5997 return ::simd_make_char4(xy, z, w);
5998}
5999
6000/*! @abstract Concatenates `x` and `yzw` to form a vector of four 8-bit
6001 * signed (twos-complement) integers. */
6002static inline SIMD_CPPFUNC char4 make_char4(char x, char3 yzw) {
6003 return ::simd_make_char4(x, yzw);
6004}
6005
6006/*! @abstract Concatenates `xy` and `zw` to form a vector of four 8-bit
6007 * signed (twos-complement) integers. */
6008static inline SIMD_CPPFUNC char4 make_char4(char2 xy, char2 zw) {
6009 return ::simd_make_char4(xy, zw);
6010}
6011
6012/*! @abstract Concatenates `xyz` and `w` to form a vector of four 8-bit
6013 * signed (twos-complement) integers. */
6014static inline SIMD_CPPFUNC char4 make_char4(char3 xyz, char w) {
6015 return ::simd_make_char4(xyz, w);
6016}
6017
6018/*! @abstract Truncates or zero-extends `other` to form a vector of four
6019 * 8-bit signed (twos-complement) integers. */
6020template <typename typeN> static SIMD_CPPFUNC char4 make_char4(typeN other) {
6021 return ::simd_make_char4(other);
6022}
6023
6024/*! @abstract Extends `other` to form a vector of four 8-bit signed (twos-
6025 * complement) integers. The contents of the newly-created vector lanes are
6026 * unspecified. */
6027template <typename typeN> static SIMD_CPPFUNC char4 make_char4_undef(typeN other) {
6028 return ::simd_make_char4_undef(other);
6029}
6030
6031/*! @abstract Concatenates `lo` and `hi` to form a vector of eight 8-bit
6032 * signed (twos-complement) integers. */
6033static inline SIMD_CPPFUNC char8 make_char8(char4 lo, char4 hi) {
6034 return ::simd_make_char8(lo, hi);
6035}
6036
6037/*! @abstract Truncates or zero-extends `other` to form a vector of eight
6038 * 8-bit signed (twos-complement) integers. */
6039template <typename typeN> static SIMD_CPPFUNC char8 make_char8(typeN other) {
6040 return ::simd_make_char8(other);
6041}
6042
6043/*! @abstract Extends `other` to form a vector of eight 8-bit signed (twos-
6044 * complement) integers. The contents of the newly-created vector lanes are
6045 * unspecified. */
6046template <typename typeN> static SIMD_CPPFUNC char8 make_char8_undef(typeN other) {
6047 return ::simd_make_char8_undef(other);
6048}
6049
6050/*! @abstract Concatenates `lo` and `hi` to form a vector of sixteen 8-bit
6051 * signed (twos-complement) integers. */
6052static inline SIMD_CPPFUNC char16 make_char16(char8 lo, char8 hi) {
6053 return ::simd_make_char16(lo, hi);
6054}
6055
6056/*! @abstract Truncates or zero-extends `other` to form a vector of sixteen
6057 * 8-bit signed (twos-complement) integers. */
6058template <typename typeN> static SIMD_CPPFUNC char16 make_char16(typeN other) {
6059 return ::simd_make_char16(other);
6060}
6061
6062/*! @abstract Extends `other` to form a vector of sixteen 8-bit signed
6063 * (twos-complement) integers. The contents of the newly-created vector
6064 * lanes are unspecified. */
6065template <typename typeN> static SIMD_CPPFUNC char16 make_char16_undef(typeN other) {
6066 return ::simd_make_char16_undef(other);
6067}
6068
6069/*! @abstract Concatenates `lo` and `hi` to form a vector of thirty-two
6070 * 8-bit signed (twos-complement) integers. */
6071static inline SIMD_CPPFUNC char32 make_char32(char16 lo, char16 hi) {
6072 return ::simd_make_char32(lo, hi);
6073}
6074
6075/*! @abstract Truncates or zero-extends `other` to form a vector of thirty-
6076 * two 8-bit signed (twos-complement) integers. */
6077template <typename typeN> static SIMD_CPPFUNC char32 make_char32(typeN other) {
6078 return ::simd_make_char32(other);
6079}
6080
6081/*! @abstract Extends `other` to form a vector of thirty-two 8-bit signed
6082 * (twos-complement) integers. The contents of the newly-created vector
6083 * lanes are unspecified. */
6084template <typename typeN> static SIMD_CPPFUNC char32 make_char32_undef(typeN other) {
6085 return ::simd_make_char32_undef(other);
6086}
6087
6088/*! @abstract Concatenates `lo` and `hi` to form a vector of sixty-four
6089 * 8-bit signed (twos-complement) integers. */
6090static inline SIMD_CPPFUNC char64 make_char64(char32 lo, char32 hi) {
6091 return ::simd_make_char64(lo, hi);
6092}
6093
6094/*! @abstract Truncates or zero-extends `other` to form a vector of sixty-
6095 * four 8-bit signed (twos-complement) integers. */
6096template <typename typeN> static SIMD_CPPFUNC char64 make_char64(typeN other) {
6097 return ::simd_make_char64(other);
6098}
6099
6100/*! @abstract Extends `other` to form a vector of sixty-four 8-bit signed
6101 * (twos-complement) integers. The contents of the newly-created vector
6102 * lanes are unspecified. */
6103template <typename typeN> static SIMD_CPPFUNC char64 make_char64_undef(typeN other) {
6104 return ::simd_make_char64_undef(other);
6105}
6106
6107/*! @abstract Concatenates `x` and `y` to form a vector of two 8-bit
6108 * unsigned integers. */
6109static inline SIMD_CPPFUNC uchar2 make_uchar2(unsigned char x, unsigned char y) {
6110 return ::simd_make_uchar2(x, y);
6111}
6112
6113/*! @abstract Truncates or zero-extends `other` to form a vector of two
6114 * 8-bit unsigned integers. */
6115template <typename typeN> static SIMD_CPPFUNC uchar2 make_uchar2(typeN other) {
6116 return ::simd_make_uchar2(other);
6117}
6118
6119/*! @abstract Extends `other` to form a vector of two 8-bit unsigned
6120 * integers. The contents of the newly-created vector lanes are
6121 * unspecified. */
6122template <typename typeN> static SIMD_CPPFUNC uchar2 make_uchar2_undef(typeN other) {
6123 return ::simd_make_uchar2_undef(other);
6124}
6125
6126/*! @abstract Concatenates `x`, `y` and `z` to form a vector of three 8-bit
6127 * unsigned integers. */
6128static inline SIMD_CPPFUNC uchar3 make_uchar3(unsigned char x, unsigned char y, unsigned char z) {
6129 return ::simd_make_uchar3(x, y, z);
6130}
6131
6132/*! @abstract Concatenates `x` and `yz` to form a vector of three 8-bit
6133 * unsigned integers. */
6134static inline SIMD_CPPFUNC uchar3 make_uchar3(unsigned char x, uchar2 yz) {
6135 return ::simd_make_uchar3(x, yz);
6136}
6137
6138/*! @abstract Concatenates `xy` and `z` to form a vector of three 8-bit
6139 * unsigned integers. */
6140static inline SIMD_CPPFUNC uchar3 make_uchar3(uchar2 xy, unsigned char z) {
6141 return ::simd_make_uchar3(xy, z);
6142}
6143
6144/*! @abstract Truncates or zero-extends `other` to form a vector of three
6145 * 8-bit unsigned integers. */
6146template <typename typeN> static SIMD_CPPFUNC uchar3 make_uchar3(typeN other) {
6147 return ::simd_make_uchar3(other);
6148}
6149
6150/*! @abstract Extends `other` to form a vector of three 8-bit unsigned
6151 * integers. The contents of the newly-created vector lanes are
6152 * unspecified. */
6153template <typename typeN> static SIMD_CPPFUNC uchar3 make_uchar3_undef(typeN other) {
6154 return ::simd_make_uchar3_undef(other);
6155}
6156
6157/*! @abstract Concatenates `x`, `y`, `z` and `w` to form a vector of four
6158 * 8-bit unsigned integers. */
6159static inline SIMD_CPPFUNC uchar4 make_uchar4(unsigned char x, unsigned char y, unsigned char z, unsigned char w) {
6160 return ::simd_make_uchar4(x, y, z, w);
6161}
6162
6163/*! @abstract Concatenates `x`, `y` and `zw` to form a vector of four 8-bit
6164 * unsigned integers. */
6165static inline SIMD_CPPFUNC uchar4 make_uchar4(unsigned char x, unsigned char y, uchar2 zw) {
6166 return ::simd_make_uchar4(x, y, zw);
6167}
6168
6169/*! @abstract Concatenates `x`, `yz` and `w` to form a vector of four 8-bit
6170 * unsigned integers. */
6171static inline SIMD_CPPFUNC uchar4 make_uchar4(unsigned char x, uchar2 yz, unsigned char w) {
6172 return ::simd_make_uchar4(x, yz, w);
6173}
6174
6175/*! @abstract Concatenates `xy`, `z` and `w` to form a vector of four 8-bit
6176 * unsigned integers. */
6177static inline SIMD_CPPFUNC uchar4 make_uchar4(uchar2 xy, unsigned char z, unsigned char w) {
6178 return ::simd_make_uchar4(xy, z, w);
6179}
6180
6181/*! @abstract Concatenates `x` and `yzw` to form a vector of four 8-bit
6182 * unsigned integers. */
6183static inline SIMD_CPPFUNC uchar4 make_uchar4(unsigned char x, uchar3 yzw) {
6184 return ::simd_make_uchar4(x, yzw);
6185}
6186
6187/*! @abstract Concatenates `xy` and `zw` to form a vector of four 8-bit
6188 * unsigned integers. */
6189static inline SIMD_CPPFUNC uchar4 make_uchar4(uchar2 xy, uchar2 zw) {
6190 return ::simd_make_uchar4(xy, zw);
6191}
6192
6193/*! @abstract Concatenates `xyz` and `w` to form a vector of four 8-bit
6194 * unsigned integers. */
6195static inline SIMD_CPPFUNC uchar4 make_uchar4(uchar3 xyz, unsigned char w) {
6196 return ::simd_make_uchar4(xyz, w);
6197}
6198
6199/*! @abstract Truncates or zero-extends `other` to form a vector of four
6200 * 8-bit unsigned integers. */
6201template <typename typeN> static SIMD_CPPFUNC uchar4 make_uchar4(typeN other) {
6202 return ::simd_make_uchar4(other);
6203}
6204
6205/*! @abstract Extends `other` to form a vector of four 8-bit unsigned
6206 * integers. The contents of the newly-created vector lanes are
6207 * unspecified. */
6208template <typename typeN> static SIMD_CPPFUNC uchar4 make_uchar4_undef(typeN other) {
6209 return ::simd_make_uchar4_undef(other);
6210}
6211
6212/*! @abstract Concatenates `lo` and `hi` to form a vector of eight 8-bit
6213 * unsigned integers. */
6214static inline SIMD_CPPFUNC uchar8 make_uchar8(uchar4 lo, uchar4 hi) {
6215 return ::simd_make_uchar8(lo, hi);
6216}
6217
6218/*! @abstract Truncates or zero-extends `other` to form a vector of eight
6219 * 8-bit unsigned integers. */
6220template <typename typeN> static SIMD_CPPFUNC uchar8 make_uchar8(typeN other) {
6221 return ::simd_make_uchar8(other);
6222}
6223
6224/*! @abstract Extends `other` to form a vector of eight 8-bit unsigned
6225 * integers. The contents of the newly-created vector lanes are
6226 * unspecified. */
6227template <typename typeN> static SIMD_CPPFUNC uchar8 make_uchar8_undef(typeN other) {
6228 return ::simd_make_uchar8_undef(other);
6229}
6230
6231/*! @abstract Concatenates `lo` and `hi` to form a vector of sixteen 8-bit
6232 * unsigned integers. */
6233static inline SIMD_CPPFUNC uchar16 make_uchar16(uchar8 lo, uchar8 hi) {
6234 return ::simd_make_uchar16(lo, hi);
6235}
6236
6237/*! @abstract Truncates or zero-extends `other` to form a vector of sixteen
6238 * 8-bit unsigned integers. */
6239template <typename typeN> static SIMD_CPPFUNC uchar16 make_uchar16(typeN other) {
6240 return ::simd_make_uchar16(other);
6241}
6242
6243/*! @abstract Extends `other` to form a vector of sixteen 8-bit unsigned
6244 * integers. The contents of the newly-created vector lanes are
6245 * unspecified. */
6246template <typename typeN> static SIMD_CPPFUNC uchar16 make_uchar16_undef(typeN other) {
6247 return ::simd_make_uchar16_undef(other);
6248}
6249
6250/*! @abstract Concatenates `lo` and `hi` to form a vector of thirty-two
6251 * 8-bit unsigned integers. */
6252static inline SIMD_CPPFUNC uchar32 make_uchar32(uchar16 lo, uchar16 hi) {
6253 return ::simd_make_uchar32(lo, hi);
6254}
6255
6256/*! @abstract Truncates or zero-extends `other` to form a vector of thirty-
6257 * two 8-bit unsigned integers. */
6258template <typename typeN> static SIMD_CPPFUNC uchar32 make_uchar32(typeN other) {
6259 return ::simd_make_uchar32(other);
6260}
6261
6262/*! @abstract Extends `other` to form a vector of thirty-two 8-bit unsigned
6263 * integers. The contents of the newly-created vector lanes are
6264 * unspecified. */
6265template <typename typeN> static SIMD_CPPFUNC uchar32 make_uchar32_undef(typeN other) {
6266 return ::simd_make_uchar32_undef(other);
6267}
6268
6269/*! @abstract Concatenates `lo` and `hi` to form a vector of sixty-four
6270 * 8-bit unsigned integers. */
6271static inline SIMD_CPPFUNC uchar64 make_uchar64(uchar32 lo, uchar32 hi) {
6272 return ::simd_make_uchar64(lo, hi);
6273}
6274
6275/*! @abstract Truncates or zero-extends `other` to form a vector of sixty-
6276 * four 8-bit unsigned integers. */
6277template <typename typeN> static SIMD_CPPFUNC uchar64 make_uchar64(typeN other) {
6278 return ::simd_make_uchar64(other);
6279}
6280
6281/*! @abstract Extends `other` to form a vector of sixty-four 8-bit unsigned
6282 * integers. The contents of the newly-created vector lanes are
6283 * unspecified. */
6284template <typename typeN> static SIMD_CPPFUNC uchar64 make_uchar64_undef(typeN other) {
6285 return ::simd_make_uchar64_undef(other);
6286}
6287
6288/*! @abstract Concatenates `x` and `y` to form a vector of two 16-bit signed
6289 * (twos-complement) integers. */
6290static inline SIMD_CPPFUNC short2 make_short2(short x, short y) {
6291 return ::simd_make_short2(x, y);
6292}
6293
6294/*! @abstract Truncates or zero-extends `other` to form a vector of two
6295 * 16-bit signed (twos-complement) integers. */
6296template <typename typeN> static SIMD_CPPFUNC short2 make_short2(typeN other) {
6297 return ::simd_make_short2(other);
6298}
6299
6300/*! @abstract Extends `other` to form a vector of two 16-bit signed (twos-
6301 * complement) integers. The contents of the newly-created vector lanes are
6302 * unspecified. */
6303template <typename typeN> static SIMD_CPPFUNC short2 make_short2_undef(typeN other) {
6304 return ::simd_make_short2_undef(other);
6305}
6306
6307/*! @abstract Concatenates `x`, `y` and `z` to form a vector of three 16-bit
6308 * signed (twos-complement) integers. */
6309static inline SIMD_CPPFUNC short3 make_short3(short x, short y, short z) {
6310 return ::simd_make_short3(x, y, z);
6311}
6312
6313/*! @abstract Concatenates `x` and `yz` to form a vector of three 16-bit
6314 * signed (twos-complement) integers. */
6315static inline SIMD_CPPFUNC short3 make_short3(short x, short2 yz) {
6316 return ::simd_make_short3(x, yz);
6317}
6318
6319/*! @abstract Concatenates `xy` and `z` to form a vector of three 16-bit
6320 * signed (twos-complement) integers. */
6321static inline SIMD_CPPFUNC short3 make_short3(short2 xy, short z) {
6322 return ::simd_make_short3(xy, z);
6323}
6324
6325/*! @abstract Truncates or zero-extends `other` to form a vector of three
6326 * 16-bit signed (twos-complement) integers. */
6327template <typename typeN> static SIMD_CPPFUNC short3 make_short3(typeN other) {
6328 return ::simd_make_short3(other);
6329}
6330
6331/*! @abstract Extends `other` to form a vector of three 16-bit signed (twos-
6332 * complement) integers. The contents of the newly-created vector lanes are
6333 * unspecified. */
6334template <typename typeN> static SIMD_CPPFUNC short3 make_short3_undef(typeN other) {
6335 return ::simd_make_short3_undef(other);
6336}
6337
6338/*! @abstract Concatenates `x`, `y`, `z` and `w` to form a vector of four
6339 * 16-bit signed (twos-complement) integers. */
6340static inline SIMD_CPPFUNC short4 make_short4(short x, short y, short z, short w) {
6341 return ::simd_make_short4(x, y, z, w);
6342}
6343
6344/*! @abstract Concatenates `x`, `y` and `zw` to form a vector of four 16-bit
6345 * signed (twos-complement) integers. */
6346static inline SIMD_CPPFUNC short4 make_short4(short x, short y, short2 zw) {
6347 return ::simd_make_short4(x, y, zw);
6348}
6349
6350/*! @abstract Concatenates `x`, `yz` and `w` to form a vector of four 16-bit
6351 * signed (twos-complement) integers. */
6352static inline SIMD_CPPFUNC short4 make_short4(short x, short2 yz, short w) {
6353 return ::simd_make_short4(x, yz, w);
6354}
6355
6356/*! @abstract Concatenates `xy`, `z` and `w` to form a vector of four 16-bit
6357 * signed (twos-complement) integers. */
6358static inline SIMD_CPPFUNC short4 make_short4(short2 xy, short z, short w) {
6359 return ::simd_make_short4(xy, z, w);
6360}
6361
6362/*! @abstract Concatenates `x` and `yzw` to form a vector of four 16-bit
6363 * signed (twos-complement) integers. */
6364static inline SIMD_CPPFUNC short4 make_short4(short x, short3 yzw) {
6365 return ::simd_make_short4(x, yzw);
6366}
6367
6368/*! @abstract Concatenates `xy` and `zw` to form a vector of four 16-bit
6369 * signed (twos-complement) integers. */
6370static inline SIMD_CPPFUNC short4 make_short4(short2 xy, short2 zw) {
6371 return ::simd_make_short4(xy, zw);
6372}
6373
6374/*! @abstract Concatenates `xyz` and `w` to form a vector of four 16-bit
6375 * signed (twos-complement) integers. */
6376static inline SIMD_CPPFUNC short4 make_short4(short3 xyz, short w) {
6377 return ::simd_make_short4(xyz, w);
6378}
6379
6380/*! @abstract Truncates or zero-extends `other` to form a vector of four
6381 * 16-bit signed (twos-complement) integers. */
6382template <typename typeN> static SIMD_CPPFUNC short4 make_short4(typeN other) {
6383 return ::simd_make_short4(other);
6384}
6385
6386/*! @abstract Extends `other` to form a vector of four 16-bit signed (twos-
6387 * complement) integers. The contents of the newly-created vector lanes are
6388 * unspecified. */
6389template <typename typeN> static SIMD_CPPFUNC short4 make_short4_undef(typeN other) {
6390 return ::simd_make_short4_undef(other);
6391}
6392
6393/*! @abstract Concatenates `lo` and `hi` to form a vector of eight 16-bit
6394 * signed (twos-complement) integers. */
6395static inline SIMD_CPPFUNC short8 make_short8(short4 lo, short4 hi) {
6396 return ::simd_make_short8(lo, hi);
6397}
6398
6399/*! @abstract Truncates or zero-extends `other` to form a vector of eight
6400 * 16-bit signed (twos-complement) integers. */
6401template <typename typeN> static SIMD_CPPFUNC short8 make_short8(typeN other) {
6402 return ::simd_make_short8(other);
6403}
6404
6405/*! @abstract Extends `other` to form a vector of eight 16-bit signed (twos-
6406 * complement) integers. The contents of the newly-created vector lanes are
6407 * unspecified. */
6408template <typename typeN> static SIMD_CPPFUNC short8 make_short8_undef(typeN other) {
6409 return ::simd_make_short8_undef(other);
6410}
6411
6412/*! @abstract Concatenates `lo` and `hi` to form a vector of sixteen 16-bit
6413 * signed (twos-complement) integers. */
6414static inline SIMD_CPPFUNC short16 make_short16(short8 lo, short8 hi) {
6415 return ::simd_make_short16(lo, hi);
6416}
6417
6418/*! @abstract Truncates or zero-extends `other` to form a vector of sixteen
6419 * 16-bit signed (twos-complement) integers. */
6420template <typename typeN> static SIMD_CPPFUNC short16 make_short16(typeN other) {
6421 return ::simd_make_short16(other);
6422}
6423
6424/*! @abstract Extends `other` to form a vector of sixteen 16-bit signed
6425 * (twos-complement) integers. The contents of the newly-created vector
6426 * lanes are unspecified. */
6427template <typename typeN> static SIMD_CPPFUNC short16 make_short16_undef(typeN other) {
6428 return ::simd_make_short16_undef(other);
6429}
6430
6431/*! @abstract Concatenates `lo` and `hi` to form a vector of thirty-two
6432 * 16-bit signed (twos-complement) integers. */
6433static inline SIMD_CPPFUNC short32 make_short32(short16 lo, short16 hi) {
6434 return ::simd_make_short32(lo, hi);
6435}
6436
6437/*! @abstract Truncates or zero-extends `other` to form a vector of thirty-
6438 * two 16-bit signed (twos-complement) integers. */
6439template <typename typeN> static SIMD_CPPFUNC short32 make_short32(typeN other) {
6440 return ::simd_make_short32(other);
6441}
6442
6443/*! @abstract Extends `other` to form a vector of thirty-two 16-bit signed
6444 * (twos-complement) integers. The contents of the newly-created vector
6445 * lanes are unspecified. */
6446template <typename typeN> static SIMD_CPPFUNC short32 make_short32_undef(typeN other) {
6447 return ::simd_make_short32_undef(other);
6448}
6449
6450/*! @abstract Concatenates `x` and `y` to form a vector of two 16-bit
6451 * unsigned integers. */
6452static inline SIMD_CPPFUNC ushort2 make_ushort2(unsigned short x, unsigned short y) {
6453 return ::simd_make_ushort2(x, y);
6454}
6455
6456/*! @abstract Truncates or zero-extends `other` to form a vector of two
6457 * 16-bit unsigned integers. */
6458template <typename typeN> static SIMD_CPPFUNC ushort2 make_ushort2(typeN other) {
6459 return ::simd_make_ushort2(other);
6460}
6461
6462/*! @abstract Extends `other` to form a vector of two 16-bit unsigned
6463 * integers. The contents of the newly-created vector lanes are
6464 * unspecified. */
6465template <typename typeN> static SIMD_CPPFUNC ushort2 make_ushort2_undef(typeN other) {
6466 return ::simd_make_ushort2_undef(other);
6467}
6468
6469/*! @abstract Concatenates `x`, `y` and `z` to form a vector of three 16-bit
6470 * unsigned integers. */
6471static inline SIMD_CPPFUNC ushort3 make_ushort3(unsigned short x, unsigned short y, unsigned short z) {
6472 return ::simd_make_ushort3(x, y, z);
6473}
6474
6475/*! @abstract Concatenates `x` and `yz` to form a vector of three 16-bit
6476 * unsigned integers. */
6477static inline SIMD_CPPFUNC ushort3 make_ushort3(unsigned short x, ushort2 yz) {
6478 return ::simd_make_ushort3(x, yz);
6479}
6480
6481/*! @abstract Concatenates `xy` and `z` to form a vector of three 16-bit
6482 * unsigned integers. */
6483static inline SIMD_CPPFUNC ushort3 make_ushort3(ushort2 xy, unsigned short z) {
6484 return ::simd_make_ushort3(xy, z);
6485}
6486
6487/*! @abstract Truncates or zero-extends `other` to form a vector of three
6488 * 16-bit unsigned integers. */
6489template <typename typeN> static SIMD_CPPFUNC ushort3 make_ushort3(typeN other) {
6490 return ::simd_make_ushort3(other);
6491}
6492
6493/*! @abstract Extends `other` to form a vector of three 16-bit unsigned
6494 * integers. The contents of the newly-created vector lanes are
6495 * unspecified. */
6496template <typename typeN> static SIMD_CPPFUNC ushort3 make_ushort3_undef(typeN other) {
6497 return ::simd_make_ushort3_undef(other);
6498}
6499
6500/*! @abstract Concatenates `x`, `y`, `z` and `w` to form a vector of four
6501 * 16-bit unsigned integers. */
6502static inline SIMD_CPPFUNC ushort4 make_ushort4(unsigned short x, unsigned short y, unsigned short z, unsigned short w) {
6503 return ::simd_make_ushort4(x, y, z, w);
6504}
6505
6506/*! @abstract Concatenates `x`, `y` and `zw` to form a vector of four 16-bit
6507 * unsigned integers. */
6508static inline SIMD_CPPFUNC ushort4 make_ushort4(unsigned short x, unsigned short y, ushort2 zw) {
6509 return ::simd_make_ushort4(x, y, zw);
6510}
6511
6512/*! @abstract Concatenates `x`, `yz` and `w` to form a vector of four 16-bit
6513 * unsigned integers. */
6514static inline SIMD_CPPFUNC ushort4 make_ushort4(unsigned short x, ushort2 yz, unsigned short w) {
6515 return ::simd_make_ushort4(x, yz, w);
6516}
6517
6518/*! @abstract Concatenates `xy`, `z` and `w` to form a vector of four 16-bit
6519 * unsigned integers. */
6520static inline SIMD_CPPFUNC ushort4 make_ushort4(ushort2 xy, unsigned short z, unsigned short w) {
6521 return ::simd_make_ushort4(xy, z, w);
6522}
6523
6524/*! @abstract Concatenates `x` and `yzw` to form a vector of four 16-bit
6525 * unsigned integers. */
6526static inline SIMD_CPPFUNC ushort4 make_ushort4(unsigned short x, ushort3 yzw) {
6527 return ::simd_make_ushort4(x, yzw);
6528}
6529
6530/*! @abstract Concatenates `xy` and `zw` to form a vector of four 16-bit
6531 * unsigned integers. */
6532static inline SIMD_CPPFUNC ushort4 make_ushort4(ushort2 xy, ushort2 zw) {
6533 return ::simd_make_ushort4(xy, zw);
6534}
6535
6536/*! @abstract Concatenates `xyz` and `w` to form a vector of four 16-bit
6537 * unsigned integers. */
6538static inline SIMD_CPPFUNC ushort4 make_ushort4(ushort3 xyz, unsigned short w) {
6539 return ::simd_make_ushort4(xyz, w);
6540}
6541
6542/*! @abstract Truncates or zero-extends `other` to form a vector of four
6543 * 16-bit unsigned integers. */
6544template <typename typeN> static SIMD_CPPFUNC ushort4 make_ushort4(typeN other) {
6545 return ::simd_make_ushort4(other);
6546}
6547
6548/*! @abstract Extends `other` to form a vector of four 16-bit unsigned
6549 * integers. The contents of the newly-created vector lanes are
6550 * unspecified. */
6551template <typename typeN> static SIMD_CPPFUNC ushort4 make_ushort4_undef(typeN other) {
6552 return ::simd_make_ushort4_undef(other);
6553}
6554
6555/*! @abstract Concatenates `lo` and `hi` to form a vector of eight 16-bit
6556 * unsigned integers. */
6557static inline SIMD_CPPFUNC ushort8 make_ushort8(ushort4 lo, ushort4 hi) {
6558 return ::simd_make_ushort8(lo, hi);
6559}
6560
6561/*! @abstract Truncates or zero-extends `other` to form a vector of eight
6562 * 16-bit unsigned integers. */
6563template <typename typeN> static SIMD_CPPFUNC ushort8 make_ushort8(typeN other) {
6564 return ::simd_make_ushort8(other);
6565}
6566
6567/*! @abstract Extends `other` to form a vector of eight 16-bit unsigned
6568 * integers. The contents of the newly-created vector lanes are
6569 * unspecified. */
6570template <typename typeN> static SIMD_CPPFUNC ushort8 make_ushort8_undef(typeN other) {
6571 return ::simd_make_ushort8_undef(other);
6572}
6573
6574/*! @abstract Concatenates `lo` and `hi` to form a vector of sixteen 16-bit
6575 * unsigned integers. */
6576static inline SIMD_CPPFUNC ushort16 make_ushort16(ushort8 lo, ushort8 hi) {
6577 return ::simd_make_ushort16(lo, hi);
6578}
6579
6580/*! @abstract Truncates or zero-extends `other` to form a vector of sixteen
6581 * 16-bit unsigned integers. */
6582template <typename typeN> static SIMD_CPPFUNC ushort16 make_ushort16(typeN other) {
6583 return ::simd_make_ushort16(other);
6584}
6585
6586/*! @abstract Extends `other` to form a vector of sixteen 16-bit unsigned
6587 * integers. The contents of the newly-created vector lanes are
6588 * unspecified. */
6589template <typename typeN> static SIMD_CPPFUNC ushort16 make_ushort16_undef(typeN other) {
6590 return ::simd_make_ushort16_undef(other);
6591}
6592
6593/*! @abstract Concatenates `lo` and `hi` to form a vector of thirty-two
6594 * 16-bit unsigned integers. */
6595static inline SIMD_CPPFUNC ushort32 make_ushort32(ushort16 lo, ushort16 hi) {
6596 return ::simd_make_ushort32(lo, hi);
6597}
6598
6599/*! @abstract Truncates or zero-extends `other` to form a vector of thirty-
6600 * two 16-bit unsigned integers. */
6601template <typename typeN> static SIMD_CPPFUNC ushort32 make_ushort32(typeN other) {
6602 return ::simd_make_ushort32(other);
6603}
6604
6605/*! @abstract Extends `other` to form a vector of thirty-two 16-bit unsigned
6606 * integers. The contents of the newly-created vector lanes are
6607 * unspecified. */
6608template <typename typeN> static SIMD_CPPFUNC ushort32 make_ushort32_undef(typeN other) {
6609 return ::simd_make_ushort32_undef(other);
6610}
6611
6612/*! @abstract Concatenates `x` and `y` to form a vector of two 16-bit
6613 * floating-point numbers. */
6614static inline SIMD_CPPFUNC half2 make_half2(_Float16 x, _Float16 y) {
6615 return ::simd_make_half2(x, y);
6616}
6617
6618/*! @abstract Truncates or zero-extends `other` to form a vector of two
6619 * 16-bit floating-point numbers. */
6620template <typename typeN> static SIMD_CPPFUNC half2 make_half2(typeN other) {
6621 return ::simd_make_half2(other);
6622}
6623
6624/*! @abstract Extends `other` to form a vector of two 16-bit floating-point
6625 * numbers. The contents of the newly-created vector lanes are unspecified. */
6626template <typename typeN> static SIMD_CPPFUNC half2 make_half2_undef(typeN other) {
6627 return ::simd_make_half2_undef(other);
6628}
6629
6630/*! @abstract Concatenates `x`, `y` and `z` to form a vector of three 16-bit
6631 * floating-point numbers. */
6632static inline SIMD_CPPFUNC half3 make_half3(_Float16 x, _Float16 y, _Float16 z) {
6633 return ::simd_make_half3(x, y, z);
6634}
6635
6636/*! @abstract Concatenates `x` and `yz` to form a vector of three 16-bit
6637 * floating-point numbers. */
6638static inline SIMD_CPPFUNC half3 make_half3(_Float16 x, half2 yz) {
6639 return ::simd_make_half3(x, yz);
6640}
6641
6642/*! @abstract Concatenates `xy` and `z` to form a vector of three 16-bit
6643 * floating-point numbers. */
6644static inline SIMD_CPPFUNC half3 make_half3(half2 xy, _Float16 z) {
6645 return ::simd_make_half3(xy, z);
6646}
6647
6648/*! @abstract Truncates or zero-extends `other` to form a vector of three
6649 * 16-bit floating-point numbers. */
6650template <typename typeN> static SIMD_CPPFUNC half3 make_half3(typeN other) {
6651 return ::simd_make_half3(other);
6652}
6653
6654/*! @abstract Extends `other` to form a vector of three 16-bit floating-
6655 * point numbers. The contents of the newly-created vector lanes are
6656 * unspecified. */
6657template <typename typeN> static SIMD_CPPFUNC half3 make_half3_undef(typeN other) {
6658 return ::simd_make_half3_undef(other);
6659}
6660
6661/*! @abstract Concatenates `x`, `y`, `z` and `w` to form a vector of four
6662 * 16-bit floating-point numbers. */
6663static inline SIMD_CPPFUNC half4 make_half4(_Float16 x, _Float16 y, _Float16 z, _Float16 w) {
6664 return ::simd_make_half4(x, y, z, w);
6665}
6666
6667/*! @abstract Concatenates `x`, `y` and `zw` to form a vector of four 16-bit
6668 * floating-point numbers. */
6669static inline SIMD_CPPFUNC half4 make_half4(_Float16 x, _Float16 y, half2 zw) {
6670 return ::simd_make_half4(x, y, zw);
6671}
6672
6673/*! @abstract Concatenates `x`, `yz` and `w` to form a vector of four 16-bit
6674 * floating-point numbers. */
6675static inline SIMD_CPPFUNC half4 make_half4(_Float16 x, half2 yz, _Float16 w) {
6676 return ::simd_make_half4(x, yz, w);
6677}
6678
6679/*! @abstract Concatenates `xy`, `z` and `w` to form a vector of four 16-bit
6680 * floating-point numbers. */
6681static inline SIMD_CPPFUNC half4 make_half4(half2 xy, _Float16 z, _Float16 w) {
6682 return ::simd_make_half4(xy, z, w);
6683}
6684
6685/*! @abstract Concatenates `x` and `yzw` to form a vector of four 16-bit
6686 * floating-point numbers. */
6687static inline SIMD_CPPFUNC half4 make_half4(_Float16 x, half3 yzw) {
6688 return ::simd_make_half4(x, yzw);
6689}
6690
6691/*! @abstract Concatenates `xy` and `zw` to form a vector of four 16-bit
6692 * floating-point numbers. */
6693static inline SIMD_CPPFUNC half4 make_half4(half2 xy, half2 zw) {
6694 return ::simd_make_half4(xy, zw);
6695}
6696
6697/*! @abstract Concatenates `xyz` and `w` to form a vector of four 16-bit
6698 * floating-point numbers. */
6699static inline SIMD_CPPFUNC half4 make_half4(half3 xyz, _Float16 w) {
6700 return ::simd_make_half4(xyz, w);
6701}
6702
6703/*! @abstract Truncates or zero-extends `other` to form a vector of four
6704 * 16-bit floating-point numbers. */
6705template <typename typeN> static SIMD_CPPFUNC half4 make_half4(typeN other) {
6706 return ::simd_make_half4(other);
6707}
6708
6709/*! @abstract Extends `other` to form a vector of four 16-bit floating-point
6710 * numbers. The contents of the newly-created vector lanes are unspecified. */
6711template <typename typeN> static SIMD_CPPFUNC half4 make_half4_undef(typeN other) {
6712 return ::simd_make_half4_undef(other);
6713}
6714
6715/*! @abstract Concatenates `lo` and `hi` to form a vector of eight 16-bit
6716 * floating-point numbers. */
6717static inline SIMD_CPPFUNC half8 make_half8(half4 lo, half4 hi) {
6718 return ::simd_make_half8(lo, hi);
6719}
6720
6721/*! @abstract Truncates or zero-extends `other` to form a vector of eight
6722 * 16-bit floating-point numbers. */
6723template <typename typeN> static SIMD_CPPFUNC half8 make_half8(typeN other) {
6724 return ::simd_make_half8(other);
6725}
6726
6727/*! @abstract Extends `other` to form a vector of eight 16-bit floating-
6728 * point numbers. The contents of the newly-created vector lanes are
6729 * unspecified. */
6730template <typename typeN> static SIMD_CPPFUNC half8 make_half8_undef(typeN other) {
6731 return ::simd_make_half8_undef(other);
6732}
6733
6734/*! @abstract Concatenates `lo` and `hi` to form a vector of sixteen 16-bit
6735 * floating-point numbers. */
6736static inline SIMD_CPPFUNC half16 make_half16(half8 lo, half8 hi) {
6737 return ::simd_make_half16(lo, hi);
6738}
6739
6740/*! @abstract Truncates or zero-extends `other` to form a vector of sixteen
6741 * 16-bit floating-point numbers. */
6742template <typename typeN> static SIMD_CPPFUNC half16 make_half16(typeN other) {
6743 return ::simd_make_half16(other);
6744}
6745
6746/*! @abstract Extends `other` to form a vector of sixteen 16-bit floating-
6747 * point numbers. The contents of the newly-created vector lanes are
6748 * unspecified. */
6749template <typename typeN> static SIMD_CPPFUNC half16 make_half16_undef(typeN other) {
6750 return ::simd_make_half16_undef(other);
6751}
6752
6753/*! @abstract Concatenates `lo` and `hi` to form a vector of thirty-two
6754 * 16-bit floating-point numbers. */
6755static inline SIMD_CPPFUNC half32 make_half32(half16 lo, half16 hi) {
6756 return ::simd_make_half32(lo, hi);
6757}
6758
6759/*! @abstract Truncates or zero-extends `other` to form a vector of thirty-
6760 * two 16-bit floating-point numbers. */
6761template <typename typeN> static SIMD_CPPFUNC half32 make_half32(typeN other) {
6762 return ::simd_make_half32(other);
6763}
6764
6765/*! @abstract Extends `other` to form a vector of thirty-two 16-bit
6766 * floating-point numbers. The contents of the newly-created vector lanes
6767 * are unspecified. */
6768template <typename typeN> static SIMD_CPPFUNC half32 make_half32_undef(typeN other) {
6769 return ::simd_make_half32_undef(other);
6770}
6771
6772/*! @abstract Concatenates `x` and `y` to form a vector of two 32-bit signed
6773 * (twos-complement) integers. */
6774static inline SIMD_CPPFUNC int2 make_int2(int x, int y) {
6775 return ::simd_make_int2(x, y);
6776}
6777
6778/*! @abstract Truncates or zero-extends `other` to form a vector of two
6779 * 32-bit signed (twos-complement) integers. */
6780template <typename typeN> static SIMD_CPPFUNC int2 make_int2(typeN other) {
6781 return ::simd_make_int2(other);
6782}
6783
6784/*! @abstract Extends `other` to form a vector of two 32-bit signed (twos-
6785 * complement) integers. The contents of the newly-created vector lanes are
6786 * unspecified. */
6787template <typename typeN> static SIMD_CPPFUNC int2 make_int2_undef(typeN other) {
6788 return ::simd_make_int2_undef(other);
6789}
6790
6791/*! @abstract Concatenates `x`, `y` and `z` to form a vector of three 32-bit
6792 * signed (twos-complement) integers. */
6793static inline SIMD_CPPFUNC int3 make_int3(int x, int y, int z) {
6794 return ::simd_make_int3(x, y, z);
6795}
6796
6797/*! @abstract Concatenates `x` and `yz` to form a vector of three 32-bit
6798 * signed (twos-complement) integers. */
6799static inline SIMD_CPPFUNC int3 make_int3(int x, int2 yz) {
6800 return ::simd_make_int3(x, yz);
6801}
6802
6803/*! @abstract Concatenates `xy` and `z` to form a vector of three 32-bit
6804 * signed (twos-complement) integers. */
6805static inline SIMD_CPPFUNC int3 make_int3(int2 xy, int z) {
6806 return ::simd_make_int3(xy, z);
6807}
6808
6809/*! @abstract Truncates or zero-extends `other` to form a vector of three
6810 * 32-bit signed (twos-complement) integers. */
6811template <typename typeN> static SIMD_CPPFUNC int3 make_int3(typeN other) {
6812 return ::simd_make_int3(other);
6813}
6814
6815/*! @abstract Extends `other` to form a vector of three 32-bit signed (twos-
6816 * complement) integers. The contents of the newly-created vector lanes are
6817 * unspecified. */
6818template <typename typeN> static SIMD_CPPFUNC int3 make_int3_undef(typeN other) {
6819 return ::simd_make_int3_undef(other);
6820}
6821
6822/*! @abstract Concatenates `x`, `y`, `z` and `w` to form a vector of four
6823 * 32-bit signed (twos-complement) integers. */
6824static inline SIMD_CPPFUNC int4 make_int4(int x, int y, int z, int w) {
6825 return ::simd_make_int4(x, y, z, w);
6826}
6827
6828/*! @abstract Concatenates `x`, `y` and `zw` to form a vector of four 32-bit
6829 * signed (twos-complement) integers. */
6830static inline SIMD_CPPFUNC int4 make_int4(int x, int y, int2 zw) {
6831 return ::simd_make_int4(x, y, zw);
6832}
6833
6834/*! @abstract Concatenates `x`, `yz` and `w` to form a vector of four 32-bit
6835 * signed (twos-complement) integers. */
6836static inline SIMD_CPPFUNC int4 make_int4(int x, int2 yz, int w) {
6837 return ::simd_make_int4(x, yz, w);
6838}
6839
6840/*! @abstract Concatenates `xy`, `z` and `w` to form a vector of four 32-bit
6841 * signed (twos-complement) integers. */
6842static inline SIMD_CPPFUNC int4 make_int4(int2 xy, int z, int w) {
6843 return ::simd_make_int4(xy, z, w);
6844}
6845
6846/*! @abstract Concatenates `x` and `yzw` to form a vector of four 32-bit
6847 * signed (twos-complement) integers. */
6848static inline SIMD_CPPFUNC int4 make_int4(int x, int3 yzw) {
6849 return ::simd_make_int4(x, yzw);
6850}
6851
6852/*! @abstract Concatenates `xy` and `zw` to form a vector of four 32-bit
6853 * signed (twos-complement) integers. */
6854static inline SIMD_CPPFUNC int4 make_int4(int2 xy, int2 zw) {
6855 return ::simd_make_int4(xy, zw);
6856}
6857
6858/*! @abstract Concatenates `xyz` and `w` to form a vector of four 32-bit
6859 * signed (twos-complement) integers. */
6860static inline SIMD_CPPFUNC int4 make_int4(int3 xyz, int w) {
6861 return ::simd_make_int4(xyz, w);
6862}
6863
6864/*! @abstract Truncates or zero-extends `other` to form a vector of four
6865 * 32-bit signed (twos-complement) integers. */
6866template <typename typeN> static SIMD_CPPFUNC int4 make_int4(typeN other) {
6867 return ::simd_make_int4(other);
6868}
6869
6870/*! @abstract Extends `other` to form a vector of four 32-bit signed (twos-
6871 * complement) integers. The contents of the newly-created vector lanes are
6872 * unspecified. */
6873template <typename typeN> static SIMD_CPPFUNC int4 make_int4_undef(typeN other) {
6874 return ::simd_make_int4_undef(other);
6875}
6876
6877/*! @abstract Concatenates `lo` and `hi` to form a vector of eight 32-bit
6878 * signed (twos-complement) integers. */
6879static inline SIMD_CPPFUNC int8 make_int8(int4 lo, int4 hi) {
6880 return ::simd_make_int8(lo, hi);
6881}
6882
6883/*! @abstract Truncates or zero-extends `other` to form a vector of eight
6884 * 32-bit signed (twos-complement) integers. */
6885template <typename typeN> static SIMD_CPPFUNC int8 make_int8(typeN other) {
6886 return ::simd_make_int8(other);
6887}
6888
6889/*! @abstract Extends `other` to form a vector of eight 32-bit signed (twos-
6890 * complement) integers. The contents of the newly-created vector lanes are
6891 * unspecified. */
6892template <typename typeN> static SIMD_CPPFUNC int8 make_int8_undef(typeN other) {
6893 return ::simd_make_int8_undef(other);
6894}
6895
6896/*! @abstract Concatenates `lo` and `hi` to form a vector of sixteen 32-bit
6897 * signed (twos-complement) integers. */
6898static inline SIMD_CPPFUNC int16 make_int16(int8 lo, int8 hi) {
6899 return ::simd_make_int16(lo, hi);
6900}
6901
6902/*! @abstract Truncates or zero-extends `other` to form a vector of sixteen
6903 * 32-bit signed (twos-complement) integers. */
6904template <typename typeN> static SIMD_CPPFUNC int16 make_int16(typeN other) {
6905 return ::simd_make_int16(other);
6906}
6907
6908/*! @abstract Extends `other` to form a vector of sixteen 32-bit signed
6909 * (twos-complement) integers. The contents of the newly-created vector
6910 * lanes are unspecified. */
6911template <typename typeN> static SIMD_CPPFUNC int16 make_int16_undef(typeN other) {
6912 return ::simd_make_int16_undef(other);
6913}
6914
6915/*! @abstract Concatenates `x` and `y` to form a vector of two 32-bit
6916 * unsigned integers. */
6917static inline SIMD_CPPFUNC uint2 make_uint2(unsigned int x, unsigned int y) {
6918 return ::simd_make_uint2(x, y);
6919}
6920
6921/*! @abstract Truncates or zero-extends `other` to form a vector of two
6922 * 32-bit unsigned integers. */
6923template <typename typeN> static SIMD_CPPFUNC uint2 make_uint2(typeN other) {
6924 return ::simd_make_uint2(other);
6925}
6926
6927/*! @abstract Extends `other` to form a vector of two 32-bit unsigned
6928 * integers. The contents of the newly-created vector lanes are
6929 * unspecified. */
6930template <typename typeN> static SIMD_CPPFUNC uint2 make_uint2_undef(typeN other) {
6931 return ::simd_make_uint2_undef(other);
6932}
6933
6934/*! @abstract Concatenates `x`, `y` and `z` to form a vector of three 32-bit
6935 * unsigned integers. */
6936static inline SIMD_CPPFUNC uint3 make_uint3(unsigned int x, unsigned int y, unsigned int z) {
6937 return ::simd_make_uint3(x, y, z);
6938}
6939
6940/*! @abstract Concatenates `x` and `yz` to form a vector of three 32-bit
6941 * unsigned integers. */
6942static inline SIMD_CPPFUNC uint3 make_uint3(unsigned int x, uint2 yz) {
6943 return ::simd_make_uint3(x, yz);
6944}
6945
6946/*! @abstract Concatenates `xy` and `z` to form a vector of three 32-bit
6947 * unsigned integers. */
6948static inline SIMD_CPPFUNC uint3 make_uint3(uint2 xy, unsigned int z) {
6949 return ::simd_make_uint3(xy, z);
6950}
6951
6952/*! @abstract Truncates or zero-extends `other` to form a vector of three
6953 * 32-bit unsigned integers. */
6954template <typename typeN> static SIMD_CPPFUNC uint3 make_uint3(typeN other) {
6955 return ::simd_make_uint3(other);
6956}
6957
6958/*! @abstract Extends `other` to form a vector of three 32-bit unsigned
6959 * integers. The contents of the newly-created vector lanes are
6960 * unspecified. */
6961template <typename typeN> static SIMD_CPPFUNC uint3 make_uint3_undef(typeN other) {
6962 return ::simd_make_uint3_undef(other);
6963}
6964
6965/*! @abstract Concatenates `x`, `y`, `z` and `w` to form a vector of four
6966 * 32-bit unsigned integers. */
6967static inline SIMD_CPPFUNC uint4 make_uint4(unsigned int x, unsigned int y, unsigned int z, unsigned int w) {
6968 return ::simd_make_uint4(x, y, z, w);
6969}
6970
6971/*! @abstract Concatenates `x`, `y` and `zw` to form a vector of four 32-bit
6972 * unsigned integers. */
6973static inline SIMD_CPPFUNC uint4 make_uint4(unsigned int x, unsigned int y, uint2 zw) {
6974 return ::simd_make_uint4(x, y, zw);
6975}
6976
6977/*! @abstract Concatenates `x`, `yz` and `w` to form a vector of four 32-bit
6978 * unsigned integers. */
6979static inline SIMD_CPPFUNC uint4 make_uint4(unsigned int x, uint2 yz, unsigned int w) {
6980 return ::simd_make_uint4(x, yz, w);
6981}
6982
6983/*! @abstract Concatenates `xy`, `z` and `w` to form a vector of four 32-bit
6984 * unsigned integers. */
6985static inline SIMD_CPPFUNC uint4 make_uint4(uint2 xy, unsigned int z, unsigned int w) {
6986 return ::simd_make_uint4(xy, z, w);
6987}
6988
6989/*! @abstract Concatenates `x` and `yzw` to form a vector of four 32-bit
6990 * unsigned integers. */
6991static inline SIMD_CPPFUNC uint4 make_uint4(unsigned int x, uint3 yzw) {
6992 return ::simd_make_uint4(x, yzw);
6993}
6994
6995/*! @abstract Concatenates `xy` and `zw` to form a vector of four 32-bit
6996 * unsigned integers. */
6997static inline SIMD_CPPFUNC uint4 make_uint4(uint2 xy, uint2 zw) {
6998 return ::simd_make_uint4(xy, zw);
6999}
7000
7001/*! @abstract Concatenates `xyz` and `w` to form a vector of four 32-bit
7002 * unsigned integers. */
7003static inline SIMD_CPPFUNC uint4 make_uint4(uint3 xyz, unsigned int w) {
7004 return ::simd_make_uint4(xyz, w);
7005}
7006
7007/*! @abstract Truncates or zero-extends `other` to form a vector of four
7008 * 32-bit unsigned integers. */
7009template <typename typeN> static SIMD_CPPFUNC uint4 make_uint4(typeN other) {
7010 return ::simd_make_uint4(other);
7011}
7012
7013/*! @abstract Extends `other` to form a vector of four 32-bit unsigned
7014 * integers. The contents of the newly-created vector lanes are
7015 * unspecified. */
7016template <typename typeN> static SIMD_CPPFUNC uint4 make_uint4_undef(typeN other) {
7017 return ::simd_make_uint4_undef(other);
7018}
7019
7020/*! @abstract Concatenates `lo` and `hi` to form a vector of eight 32-bit
7021 * unsigned integers. */
7022static inline SIMD_CPPFUNC uint8 make_uint8(uint4 lo, uint4 hi) {
7023 return ::simd_make_uint8(lo, hi);
7024}
7025
7026/*! @abstract Truncates or zero-extends `other` to form a vector of eight
7027 * 32-bit unsigned integers. */
7028template <typename typeN> static SIMD_CPPFUNC uint8 make_uint8(typeN other) {
7029 return ::simd_make_uint8(other);
7030}
7031
7032/*! @abstract Extends `other` to form a vector of eight 32-bit unsigned
7033 * integers. The contents of the newly-created vector lanes are
7034 * unspecified. */
7035template <typename typeN> static SIMD_CPPFUNC uint8 make_uint8_undef(typeN other) {
7036 return ::simd_make_uint8_undef(other);
7037}
7038
7039/*! @abstract Concatenates `lo` and `hi` to form a vector of sixteen 32-bit
7040 * unsigned integers. */
7041static inline SIMD_CPPFUNC uint16 make_uint16(uint8 lo, uint8 hi) {
7042 return ::simd_make_uint16(lo, hi);
7043}
7044
7045/*! @abstract Truncates or zero-extends `other` to form a vector of sixteen
7046 * 32-bit unsigned integers. */
7047template <typename typeN> static SIMD_CPPFUNC uint16 make_uint16(typeN other) {
7048 return ::simd_make_uint16(other);
7049}
7050
7051/*! @abstract Extends `other` to form a vector of sixteen 32-bit unsigned
7052 * integers. The contents of the newly-created vector lanes are
7053 * unspecified. */
7054template <typename typeN> static SIMD_CPPFUNC uint16 make_uint16_undef(typeN other) {
7055 return ::simd_make_uint16_undef(other);
7056}
7057
7058/*! @abstract Concatenates `x` and `y` to form a vector of two 32-bit
7059 * floating-point numbers. */
7060static inline SIMD_CPPFUNC float2 make_float2(float x, float y) {
7061 return ::simd_make_float2(x, y);
7062}
7063
7064/*! @abstract Truncates or zero-extends `other` to form a vector of two
7065 * 32-bit floating-point numbers. */
7066template <typename typeN> static SIMD_CPPFUNC float2 make_float2(typeN other) {
7067 return ::simd_make_float2(other);
7068}
7069
7070/*! @abstract Extends `other` to form a vector of two 32-bit floating-point
7071 * numbers. The contents of the newly-created vector lanes are unspecified. */
7072template <typename typeN> static SIMD_CPPFUNC float2 make_float2_undef(typeN other) {
7073 return ::simd_make_float2_undef(other);
7074}
7075
7076/*! @abstract Concatenates `x`, `y` and `z` to form a vector of three 32-bit
7077 * floating-point numbers. */
7078static inline SIMD_CPPFUNC float3 make_float3(float x, float y, float z) {
7079 return ::simd_make_float3(x, y, z);
7080}
7081
7082/*! @abstract Concatenates `x` and `yz` to form a vector of three 32-bit
7083 * floating-point numbers. */
7084static inline SIMD_CPPFUNC float3 make_float3(float x, float2 yz) {
7085 return ::simd_make_float3(x, yz);
7086}
7087
7088/*! @abstract Concatenates `xy` and `z` to form a vector of three 32-bit
7089 * floating-point numbers. */
7090static inline SIMD_CPPFUNC float3 make_float3(float2 xy, float z) {
7091 return ::simd_make_float3(xy, z);
7092}
7093
7094/*! @abstract Truncates or zero-extends `other` to form a vector of three
7095 * 32-bit floating-point numbers. */
7096template <typename typeN> static SIMD_CPPFUNC float3 make_float3(typeN other) {
7097 return ::simd_make_float3(other);
7098}
7099
7100/*! @abstract Extends `other` to form a vector of three 32-bit floating-
7101 * point numbers. The contents of the newly-created vector lanes are
7102 * unspecified. */
7103template <typename typeN> static SIMD_CPPFUNC float3 make_float3_undef(typeN other) {
7104 return ::simd_make_float3_undef(other);
7105}
7106
7107/*! @abstract Concatenates `x`, `y`, `z` and `w` to form a vector of four
7108 * 32-bit floating-point numbers. */
7109static inline SIMD_CPPFUNC float4 make_float4(float x, float y, float z, float w) {
7110 return ::simd_make_float4(x, y, z, w);
7111}
7112
7113/*! @abstract Concatenates `x`, `y` and `zw` to form a vector of four 32-bit
7114 * floating-point numbers. */
7115static inline SIMD_CPPFUNC float4 make_float4(float x, float y, float2 zw) {
7116 return ::simd_make_float4(x, y, zw);
7117}
7118
7119/*! @abstract Concatenates `x`, `yz` and `w` to form a vector of four 32-bit
7120 * floating-point numbers. */
7121static inline SIMD_CPPFUNC float4 make_float4(float x, float2 yz, float w) {
7122 return ::simd_make_float4(x, yz, w);
7123}
7124
7125/*! @abstract Concatenates `xy`, `z` and `w` to form a vector of four 32-bit
7126 * floating-point numbers. */
7127static inline SIMD_CPPFUNC float4 make_float4(float2 xy, float z, float w) {
7128 return ::simd_make_float4(xy, z, w);
7129}
7130
7131/*! @abstract Concatenates `x` and `yzw` to form a vector of four 32-bit
7132 * floating-point numbers. */
7133static inline SIMD_CPPFUNC float4 make_float4(float x, float3 yzw) {
7134 return ::simd_make_float4(x, yzw);
7135}
7136
7137/*! @abstract Concatenates `xy` and `zw` to form a vector of four 32-bit
7138 * floating-point numbers. */
7139static inline SIMD_CPPFUNC float4 make_float4(float2 xy, float2 zw) {
7140 return ::simd_make_float4(xy, zw);
7141}
7142
7143/*! @abstract Concatenates `xyz` and `w` to form a vector of four 32-bit
7144 * floating-point numbers. */
7145static inline SIMD_CPPFUNC float4 make_float4(float3 xyz, float w) {
7146 return ::simd_make_float4(xyz, w);
7147}
7148
7149/*! @abstract Truncates or zero-extends `other` to form a vector of four
7150 * 32-bit floating-point numbers. */
7151template <typename typeN> static SIMD_CPPFUNC float4 make_float4(typeN other) {
7152 return ::simd_make_float4(other);
7153}
7154
7155/*! @abstract Extends `other` to form a vector of four 32-bit floating-point
7156 * numbers. The contents of the newly-created vector lanes are unspecified. */
7157template <typename typeN> static SIMD_CPPFUNC float4 make_float4_undef(typeN other) {
7158 return ::simd_make_float4_undef(other);
7159}
7160
7161/*! @abstract Concatenates `lo` and `hi` to form a vector of eight 32-bit
7162 * floating-point numbers. */
7163static inline SIMD_CPPFUNC float8 make_float8(float4 lo, float4 hi) {
7164 return ::simd_make_float8(lo, hi);
7165}
7166
7167/*! @abstract Truncates or zero-extends `other` to form a vector of eight
7168 * 32-bit floating-point numbers. */
7169template <typename typeN> static SIMD_CPPFUNC float8 make_float8(typeN other) {
7170 return ::simd_make_float8(other);
7171}
7172
7173/*! @abstract Extends `other` to form a vector of eight 32-bit floating-
7174 * point numbers. The contents of the newly-created vector lanes are
7175 * unspecified. */
7176template <typename typeN> static SIMD_CPPFUNC float8 make_float8_undef(typeN other) {
7177 return ::simd_make_float8_undef(other);
7178}
7179
7180/*! @abstract Concatenates `lo` and `hi` to form a vector of sixteen 32-bit
7181 * floating-point numbers. */
7182static inline SIMD_CPPFUNC float16 make_float16(float8 lo, float8 hi) {
7183 return ::simd_make_float16(lo, hi);
7184}
7185
7186/*! @abstract Truncates or zero-extends `other` to form a vector of sixteen
7187 * 32-bit floating-point numbers. */
7188template <typename typeN> static SIMD_CPPFUNC float16 make_float16(typeN other) {
7189 return ::simd_make_float16(other);
7190}
7191
7192/*! @abstract Extends `other` to form a vector of sixteen 32-bit floating-
7193 * point numbers. The contents of the newly-created vector lanes are
7194 * unspecified. */
7195template <typename typeN> static SIMD_CPPFUNC float16 make_float16_undef(typeN other) {
7196 return ::simd_make_float16_undef(other);
7197}
7198
7199/*! @abstract Concatenates `x` and `y` to form a vector of two 64-bit signed
7200 * (twos-complement) integers. */
7201static inline SIMD_CPPFUNC long2 make_long2(long1 x, long1 y) {
7202 return ::simd_make_long2(x, y);
7203}
7204
7205/*! @abstract Truncates or zero-extends `other` to form a vector of two
7206 * 64-bit signed (twos-complement) integers. */
7207template <typename typeN> static SIMD_CPPFUNC long2 make_long2(typeN other) {
7208 return ::simd_make_long2(other);
7209}
7210
7211/*! @abstract Extends `other` to form a vector of two 64-bit signed (twos-
7212 * complement) integers. The contents of the newly-created vector lanes are
7213 * unspecified. */
7214template <typename typeN> static SIMD_CPPFUNC long2 make_long2_undef(typeN other) {
7215 return ::simd_make_long2_undef(other);
7216}
7217
7218/*! @abstract Concatenates `x`, `y` and `z` to form a vector of three 64-bit
7219 * signed (twos-complement) integers. */
7220static inline SIMD_CPPFUNC long3 make_long3(long1 x, long1 y, long1 z) {
7221 return ::simd_make_long3(x, y, z);
7222}
7223
7224/*! @abstract Concatenates `x` and `yz` to form a vector of three 64-bit
7225 * signed (twos-complement) integers. */
7226static inline SIMD_CPPFUNC long3 make_long3(long1 x, long2 yz) {
7227 return ::simd_make_long3(x, yz);
7228}
7229
7230/*! @abstract Concatenates `xy` and `z` to form a vector of three 64-bit
7231 * signed (twos-complement) integers. */
7232static inline SIMD_CPPFUNC long3 make_long3(long2 xy, long1 z) {
7233 return ::simd_make_long3(xy, z);
7234}
7235
7236/*! @abstract Truncates or zero-extends `other` to form a vector of three
7237 * 64-bit signed (twos-complement) integers. */
7238template <typename typeN> static SIMD_CPPFUNC long3 make_long3(typeN other) {
7239 return ::simd_make_long3(other);
7240}
7241
7242/*! @abstract Extends `other` to form a vector of three 64-bit signed (twos-
7243 * complement) integers. The contents of the newly-created vector lanes are
7244 * unspecified. */
7245template <typename typeN> static SIMD_CPPFUNC long3 make_long3_undef(typeN other) {
7246 return ::simd_make_long3_undef(other);
7247}
7248
7249/*! @abstract Concatenates `x`, `y`, `z` and `w` to form a vector of four
7250 * 64-bit signed (twos-complement) integers. */
7251static inline SIMD_CPPFUNC long4 make_long4(long1 x, long1 y, long1 z, long1 w) {
7252 return ::simd_make_long4(x, y, z, w);
7253}
7254
7255/*! @abstract Concatenates `x`, `y` and `zw` to form a vector of four 64-bit
7256 * signed (twos-complement) integers. */
7257static inline SIMD_CPPFUNC long4 make_long4(long1 x, long1 y, long2 zw) {
7258 return ::simd_make_long4(x, y, zw);
7259}
7260
7261/*! @abstract Concatenates `x`, `yz` and `w` to form a vector of four 64-bit
7262 * signed (twos-complement) integers. */
7263static inline SIMD_CPPFUNC long4 make_long4(long1 x, long2 yz, long1 w) {
7264 return ::simd_make_long4(x, yz, w);
7265}
7266
7267/*! @abstract Concatenates `xy`, `z` and `w` to form a vector of four 64-bit
7268 * signed (twos-complement) integers. */
7269static inline SIMD_CPPFUNC long4 make_long4(long2 xy, long1 z, long1 w) {
7270 return ::simd_make_long4(xy, z, w);
7271}
7272
7273/*! @abstract Concatenates `x` and `yzw` to form a vector of four 64-bit
7274 * signed (twos-complement) integers. */
7275static inline SIMD_CPPFUNC long4 make_long4(long1 x, long3 yzw) {
7276 return ::simd_make_long4(x, yzw);
7277}
7278
7279/*! @abstract Concatenates `xy` and `zw` to form a vector of four 64-bit
7280 * signed (twos-complement) integers. */
7281static inline SIMD_CPPFUNC long4 make_long4(long2 xy, long2 zw) {
7282 return ::simd_make_long4(xy, zw);
7283}
7284
7285/*! @abstract Concatenates `xyz` and `w` to form a vector of four 64-bit
7286 * signed (twos-complement) integers. */
7287static inline SIMD_CPPFUNC long4 make_long4(long3 xyz, long1 w) {
7288 return ::simd_make_long4(xyz, w);
7289}
7290
7291/*! @abstract Truncates or zero-extends `other` to form a vector of four
7292 * 64-bit signed (twos-complement) integers. */
7293template <typename typeN> static SIMD_CPPFUNC long4 make_long4(typeN other) {
7294 return ::simd_make_long4(other);
7295}
7296
7297/*! @abstract Extends `other` to form a vector of four 64-bit signed (twos-
7298 * complement) integers. The contents of the newly-created vector lanes are
7299 * unspecified. */
7300template <typename typeN> static SIMD_CPPFUNC long4 make_long4_undef(typeN other) {
7301 return ::simd_make_long4_undef(other);
7302}
7303
7304/*! @abstract Concatenates `lo` and `hi` to form a vector of eight 64-bit
7305 * signed (twos-complement) integers. */
7306static inline SIMD_CPPFUNC long8 make_long8(long4 lo, long4 hi) {
7307 return ::simd_make_long8(lo, hi);
7308}
7309
7310/*! @abstract Truncates or zero-extends `other` to form a vector of eight
7311 * 64-bit signed (twos-complement) integers. */
7312template <typename typeN> static SIMD_CPPFUNC long8 make_long8(typeN other) {
7313 return ::simd_make_long8(other);
7314}
7315
7316/*! @abstract Extends `other` to form a vector of eight 64-bit signed (twos-
7317 * complement) integers. The contents of the newly-created vector lanes are
7318 * unspecified. */
7319template <typename typeN> static SIMD_CPPFUNC long8 make_long8_undef(typeN other) {
7320 return ::simd_make_long8_undef(other);
7321}
7322
7323/*! @abstract Concatenates `x` and `y` to form a vector of two 64-bit
7324 * unsigned integers. */
7325static inline SIMD_CPPFUNC ulong2 make_ulong2(ulong1 x, ulong1 y) {
7326 return ::simd_make_ulong2(x, y);
7327}
7328
7329/*! @abstract Truncates or zero-extends `other` to form a vector of two
7330 * 64-bit unsigned integers. */
7331template <typename typeN> static SIMD_CPPFUNC ulong2 make_ulong2(typeN other) {
7332 return ::simd_make_ulong2(other);
7333}
7334
7335/*! @abstract Extends `other` to form a vector of two 64-bit unsigned
7336 * integers. The contents of the newly-created vector lanes are
7337 * unspecified. */
7338template <typename typeN> static SIMD_CPPFUNC ulong2 make_ulong2_undef(typeN other) {
7339 return ::simd_make_ulong2_undef(other);
7340}
7341
7342/*! @abstract Concatenates `x`, `y` and `z` to form a vector of three 64-bit
7343 * unsigned integers. */
7344static inline SIMD_CPPFUNC ulong3 make_ulong3(ulong1 x, ulong1 y, ulong1 z) {
7345 return ::simd_make_ulong3(x, y, z);
7346}
7347
7348/*! @abstract Concatenates `x` and `yz` to form a vector of three 64-bit
7349 * unsigned integers. */
7350static inline SIMD_CPPFUNC ulong3 make_ulong3(ulong1 x, ulong2 yz) {
7351 return ::simd_make_ulong3(x, yz);
7352}
7353
7354/*! @abstract Concatenates `xy` and `z` to form a vector of three 64-bit
7355 * unsigned integers. */
7356static inline SIMD_CPPFUNC ulong3 make_ulong3(ulong2 xy, ulong1 z) {
7357 return ::simd_make_ulong3(xy, z);
7358}
7359
7360/*! @abstract Truncates or zero-extends `other` to form a vector of three
7361 * 64-bit unsigned integers. */
7362template <typename typeN> static SIMD_CPPFUNC ulong3 make_ulong3(typeN other) {
7363 return ::simd_make_ulong3(other);
7364}
7365
7366/*! @abstract Extends `other` to form a vector of three 64-bit unsigned
7367 * integers. The contents of the newly-created vector lanes are
7368 * unspecified. */
7369template <typename typeN> static SIMD_CPPFUNC ulong3 make_ulong3_undef(typeN other) {
7370 return ::simd_make_ulong3_undef(other);
7371}
7372
7373/*! @abstract Concatenates `x`, `y`, `z` and `w` to form a vector of four
7374 * 64-bit unsigned integers. */
7375static inline SIMD_CPPFUNC ulong4 make_ulong4(ulong1 x, ulong1 y, ulong1 z, ulong1 w) {
7376 return ::simd_make_ulong4(x, y, z, w);
7377}
7378
7379/*! @abstract Concatenates `x`, `y` and `zw` to form a vector of four 64-bit
7380 * unsigned integers. */
7381static inline SIMD_CPPFUNC ulong4 make_ulong4(ulong1 x, ulong1 y, ulong2 zw) {
7382 return ::simd_make_ulong4(x, y, zw);
7383}
7384
7385/*! @abstract Concatenates `x`, `yz` and `w` to form a vector of four 64-bit
7386 * unsigned integers. */
7387static inline SIMD_CPPFUNC ulong4 make_ulong4(ulong1 x, ulong2 yz, ulong1 w) {
7388 return ::simd_make_ulong4(x, yz, w);
7389}
7390
7391/*! @abstract Concatenates `xy`, `z` and `w` to form a vector of four 64-bit
7392 * unsigned integers. */
7393static inline SIMD_CPPFUNC ulong4 make_ulong4(ulong2 xy, ulong1 z, ulong1 w) {
7394 return ::simd_make_ulong4(xy, z, w);
7395}
7396
7397/*! @abstract Concatenates `x` and `yzw` to form a vector of four 64-bit
7398 * unsigned integers. */
7399static inline SIMD_CPPFUNC ulong4 make_ulong4(ulong1 x, ulong3 yzw) {
7400 return ::simd_make_ulong4(x, yzw);
7401}
7402
7403/*! @abstract Concatenates `xy` and `zw` to form a vector of four 64-bit
7404 * unsigned integers. */
7405static inline SIMD_CPPFUNC ulong4 make_ulong4(ulong2 xy, ulong2 zw) {
7406 return ::simd_make_ulong4(xy, zw);
7407}
7408
7409/*! @abstract Concatenates `xyz` and `w` to form a vector of four 64-bit
7410 * unsigned integers. */
7411static inline SIMD_CPPFUNC ulong4 make_ulong4(ulong3 xyz, ulong1 w) {
7412 return ::simd_make_ulong4(xyz, w);
7413}
7414
7415/*! @abstract Truncates or zero-extends `other` to form a vector of four
7416 * 64-bit unsigned integers. */
7417template <typename typeN> static SIMD_CPPFUNC ulong4 make_ulong4(typeN other) {
7418 return ::simd_make_ulong4(other);
7419}
7420
7421/*! @abstract Extends `other` to form a vector of four 64-bit unsigned
7422 * integers. The contents of the newly-created vector lanes are
7423 * unspecified. */
7424template <typename typeN> static SIMD_CPPFUNC ulong4 make_ulong4_undef(typeN other) {
7425 return ::simd_make_ulong4_undef(other);
7426}
7427
7428/*! @abstract Concatenates `lo` and `hi` to form a vector of eight 64-bit
7429 * unsigned integers. */
7430static inline SIMD_CPPFUNC ulong8 make_ulong8(ulong4 lo, ulong4 hi) {
7431 return ::simd_make_ulong8(lo, hi);
7432}
7433
7434/*! @abstract Truncates or zero-extends `other` to form a vector of eight
7435 * 64-bit unsigned integers. */
7436template <typename typeN> static SIMD_CPPFUNC ulong8 make_ulong8(typeN other) {
7437 return ::simd_make_ulong8(other);
7438}
7439
7440/*! @abstract Extends `other` to form a vector of eight 64-bit unsigned
7441 * integers. The contents of the newly-created vector lanes are
7442 * unspecified. */
7443template <typename typeN> static SIMD_CPPFUNC ulong8 make_ulong8_undef(typeN other) {
7444 return ::simd_make_ulong8_undef(other);
7445}
7446
7447/*! @abstract Concatenates `x` and `y` to form a vector of two 64-bit
7448 * floating-point numbers. */
7449static inline SIMD_CPPFUNC double2 make_double2(double x, double y) {
7450 return ::simd_make_double2(x, y);
7451}
7452
7453/*! @abstract Truncates or zero-extends `other` to form a vector of two
7454 * 64-bit floating-point numbers. */
7455template <typename typeN> static SIMD_CPPFUNC double2 make_double2(typeN other) {
7456 return ::simd_make_double2(other);
7457}
7458
7459/*! @abstract Extends `other` to form a vector of two 64-bit floating-point
7460 * numbers. The contents of the newly-created vector lanes are unspecified. */
7461template <typename typeN> static SIMD_CPPFUNC double2 make_double2_undef(typeN other) {
7462 return ::simd_make_double2_undef(other);
7463}
7464
7465/*! @abstract Concatenates `x`, `y` and `z` to form a vector of three 64-bit
7466 * floating-point numbers. */
7467static inline SIMD_CPPFUNC double3 make_double3(double x, double y, double z) {
7468 return ::simd_make_double3(x, y, z);
7469}
7470
7471/*! @abstract Concatenates `x` and `yz` to form a vector of three 64-bit
7472 * floating-point numbers. */
7473static inline SIMD_CPPFUNC double3 make_double3(double x, double2 yz) {
7474 return ::simd_make_double3(x, yz);
7475}
7476
7477/*! @abstract Concatenates `xy` and `z` to form a vector of three 64-bit
7478 * floating-point numbers. */
7479static inline SIMD_CPPFUNC double3 make_double3(double2 xy, double z) {
7480 return ::simd_make_double3(xy, z);
7481}
7482
7483/*! @abstract Truncates or zero-extends `other` to form a vector of three
7484 * 64-bit floating-point numbers. */
7485template <typename typeN> static SIMD_CPPFUNC double3 make_double3(typeN other) {
7486 return ::simd_make_double3(other);
7487}
7488
7489/*! @abstract Extends `other` to form a vector of three 64-bit floating-
7490 * point numbers. The contents of the newly-created vector lanes are
7491 * unspecified. */
7492template <typename typeN> static SIMD_CPPFUNC double3 make_double3_undef(typeN other) {
7493 return ::simd_make_double3_undef(other);
7494}
7495
7496/*! @abstract Concatenates `x`, `y`, `z` and `w` to form a vector of four
7497 * 64-bit floating-point numbers. */
7498static inline SIMD_CPPFUNC double4 make_double4(double x, double y, double z, double w) {
7499 return ::simd_make_double4(x, y, z, w);
7500}
7501
7502/*! @abstract Concatenates `x`, `y` and `zw` to form a vector of four 64-bit
7503 * floating-point numbers. */
7504static inline SIMD_CPPFUNC double4 make_double4(double x, double y, double2 zw) {
7505 return ::simd_make_double4(x, y, zw);
7506}
7507
7508/*! @abstract Concatenates `x`, `yz` and `w` to form a vector of four 64-bit
7509 * floating-point numbers. */
7510static inline SIMD_CPPFUNC double4 make_double4(double x, double2 yz, double w) {
7511 return ::simd_make_double4(x, yz, w);
7512}
7513
7514/*! @abstract Concatenates `xy`, `z` and `w` to form a vector of four 64-bit
7515 * floating-point numbers. */
7516static inline SIMD_CPPFUNC double4 make_double4(double2 xy, double z, double w) {
7517 return ::simd_make_double4(xy, z, w);
7518}
7519
7520/*! @abstract Concatenates `x` and `yzw` to form a vector of four 64-bit
7521 * floating-point numbers. */
7522static inline SIMD_CPPFUNC double4 make_double4(double x, double3 yzw) {
7523 return ::simd_make_double4(x, yzw);
7524}
7525
7526/*! @abstract Concatenates `xy` and `zw` to form a vector of four 64-bit
7527 * floating-point numbers. */
7528static inline SIMD_CPPFUNC double4 make_double4(double2 xy, double2 zw) {
7529 return ::simd_make_double4(xy, zw);
7530}
7531
7532/*! @abstract Concatenates `xyz` and `w` to form a vector of four 64-bit
7533 * floating-point numbers. */
7534static inline SIMD_CPPFUNC double4 make_double4(double3 xyz, double w) {
7535 return ::simd_make_double4(xyz, w);
7536}
7537
7538/*! @abstract Truncates or zero-extends `other` to form a vector of four
7539 * 64-bit floating-point numbers. */
7540template <typename typeN> static SIMD_CPPFUNC double4 make_double4(typeN other) {
7541 return ::simd_make_double4(other);
7542}
7543
7544/*! @abstract Extends `other` to form a vector of four 64-bit floating-point
7545 * numbers. The contents of the newly-created vector lanes are unspecified. */
7546template <typename typeN> static SIMD_CPPFUNC double4 make_double4_undef(typeN other) {
7547 return ::simd_make_double4_undef(other);
7548}
7549
7550/*! @abstract Concatenates `lo` and `hi` to form a vector of eight 64-bit
7551 * floating-point numbers. */
7552static inline SIMD_CPPFUNC double8 make_double8(double4 lo, double4 hi) {
7553 return ::simd_make_double8(lo, hi);
7554}
7555
7556/*! @abstract Truncates or zero-extends `other` to form a vector of eight
7557 * 64-bit floating-point numbers. */
7558template <typename typeN> static SIMD_CPPFUNC double8 make_double8(typeN other) {
7559 return ::simd_make_double8(other);
7560}
7561
7562/*! @abstract Extends `other` to form a vector of eight 64-bit floating-
7563 * point numbers. The contents of the newly-created vector lanes are
7564 * unspecified. */
7565template <typename typeN> static SIMD_CPPFUNC double8 make_double8_undef(typeN other) {
7566 return ::simd_make_double8_undef(other);
7567}
7568
7569/*! @struct Vector
7570 * @abstract Templated Vector struct based on scalar type and number of
7571 * elements
7572 * @field count Number of elements in the vector
7573 * @field scalar_t The scalar type of each element
7574 * @field type The inferred simd::typeN type
7575 * @field packed_t The inferred simd::packed::typeN type
7576 * @field mask_t The return type of comparison operations */
7577template <typename ScalarType, size_t count> struct Vector {
7578 // static const size_t count
7579 // typedef scalar_t
7580 // typedef type
7581 // typedef packed_t
7582 // typedef mask_t
7583};
7584/*! @abstract Helper type to access the simd type easily. */
7585template <typename ScalarType, size_t count>
7586using Vector_t = typename Vector<ScalarType, count>::type;
7587
7588/*! @abstract Look up the equivalent Vector struct according to the simd
7589 * type. */
7590template <typename typeN> struct get_traits
7591{
7592// using type = Vector<ScalarType, count>;
7593};
7594/*! @abstract Helper type to access the Vector struct easily.
7595 * @discussion This is commonly used to query the type traits of a simd
7596 * type.
7597 * For example, simd::traits<simd::float4>::count is 4. */
7598template<typename typeN>
7599using traits = typename get_traits<typeN>::type;
7600
7601template<> struct Vector<char1, 1> {
7602 static const size_t count = 1;
7603 typedef char1 scalar_t;
7604 typedef char1 type;
7605 typedef char1 mask_t;
7606};
7607
7608template <> struct get_traits<char1>
7609{
7610 using type = Vector<char1, 1>;
7611};
7612
7613template<> struct Vector<char1, 2> {
7614 static const size_t count = 2;
7615 typedef char1 scalar_t;
7616 typedef char2 type;
7617 typedef packed::char2 packed_t;
7618 typedef char2 mask_t;
7619};
7620
7621template <> struct get_traits<char2>
7622{
7623 using type = Vector<char1, 2>;
7624};
7625
7626template<> struct Vector<char1, 3> {
7627 static const size_t count = 3;
7628 typedef char1 scalar_t;
7629 typedef char3 type;
7630 typedef char3 mask_t;
7631};
7632
7633template <> struct get_traits<char3>
7634{
7635 using type = Vector<char1, 3>;
7636};
7637
7638template<> struct Vector<char1, 4> {
7639 static const size_t count = 4;
7640 typedef char1 scalar_t;
7641 typedef char4 type;
7642 typedef packed::char4 packed_t;
7643 typedef char4 mask_t;
7644};
7645
7646template <> struct get_traits<char4>
7647{
7648 using type = Vector<char1, 4>;
7649};
7650
7651template<> struct Vector<char1, 8> {
7652 static const size_t count = 8;
7653 typedef char1 scalar_t;
7654 typedef char8 type;
7655 typedef packed::char8 packed_t;
7656 typedef char8 mask_t;
7657};
7658
7659template <> struct get_traits<char8>
7660{
7661 using type = Vector<char1, 8>;
7662};
7663
7664template<> struct Vector<char1, 16> {
7665 static const size_t count = 16;
7666 typedef char1 scalar_t;
7667 typedef char16 type;
7668 typedef packed::char16 packed_t;
7669 typedef char16 mask_t;
7670};
7671
7672template <> struct get_traits<char16>
7673{
7674 using type = Vector<char1, 16>;
7675};
7676
7677template<> struct Vector<char1, 32> {
7678 static const size_t count = 32;
7679 typedef char1 scalar_t;
7680 typedef char32 type;
7681 typedef packed::char32 packed_t;
7682 typedef char32 mask_t;
7683};
7684
7685template <> struct get_traits<char32>
7686{
7687 using type = Vector<char1, 32>;
7688};
7689
7690template<> struct Vector<char1, 64> {
7691 static const size_t count = 64;
7692 typedef char1 scalar_t;
7693 typedef char64 type;
7694 typedef packed::char64 packed_t;
7695 typedef char64 mask_t;
7696};
7697
7698template <> struct get_traits<char64>
7699{
7700 using type = Vector<char1, 64>;
7701};
7702
7703template<> struct Vector<uchar1, 1> {
7704 static const size_t count = 1;
7705 typedef uchar1 scalar_t;
7706 typedef uchar1 type;
7707 typedef char1 mask_t;
7708};
7709
7710template <> struct get_traits<uchar1>
7711{
7712 using type = Vector<uchar1, 1>;
7713};
7714
7715template<> struct Vector<uchar1, 2> {
7716 static const size_t count = 2;
7717 typedef uchar1 scalar_t;
7718 typedef uchar2 type;
7719 typedef packed::uchar2 packed_t;
7720 typedef char2 mask_t;
7721};
7722
7723template <> struct get_traits<uchar2>
7724{
7725 using type = Vector<uchar1, 2>;
7726};
7727
7728template<> struct Vector<uchar1, 3> {
7729 static const size_t count = 3;
7730 typedef uchar1 scalar_t;
7731 typedef uchar3 type;
7732 typedef char3 mask_t;
7733};
7734
7735template <> struct get_traits<uchar3>
7736{
7737 using type = Vector<uchar1, 3>;
7738};
7739
7740template<> struct Vector<uchar1, 4> {
7741 static const size_t count = 4;
7742 typedef uchar1 scalar_t;
7743 typedef uchar4 type;
7744 typedef packed::uchar4 packed_t;
7745 typedef char4 mask_t;
7746};
7747
7748template <> struct get_traits<uchar4>
7749{
7750 using type = Vector<uchar1, 4>;
7751};
7752
7753template<> struct Vector<uchar1, 8> {
7754 static const size_t count = 8;
7755 typedef uchar1 scalar_t;
7756 typedef uchar8 type;
7757 typedef packed::uchar8 packed_t;
7758 typedef char8 mask_t;
7759};
7760
7761template <> struct get_traits<uchar8>
7762{
7763 using type = Vector<uchar1, 8>;
7764};
7765
7766template<> struct Vector<uchar1, 16> {
7767 static const size_t count = 16;
7768 typedef uchar1 scalar_t;
7769 typedef uchar16 type;
7770 typedef packed::uchar16 packed_t;
7771 typedef char16 mask_t;
7772};
7773
7774template <> struct get_traits<uchar16>
7775{
7776 using type = Vector<uchar1, 16>;
7777};
7778
7779template<> struct Vector<uchar1, 32> {
7780 static const size_t count = 32;
7781 typedef uchar1 scalar_t;
7782 typedef uchar32 type;
7783 typedef packed::uchar32 packed_t;
7784 typedef char32 mask_t;
7785};
7786
7787template <> struct get_traits<uchar32>
7788{
7789 using type = Vector<uchar1, 32>;
7790};
7791
7792template<> struct Vector<uchar1, 64> {
7793 static const size_t count = 64;
7794 typedef uchar1 scalar_t;
7795 typedef uchar64 type;
7796 typedef packed::uchar64 packed_t;
7797 typedef char64 mask_t;
7798};
7799
7800template <> struct get_traits<uchar64>
7801{
7802 using type = Vector<uchar1, 64>;
7803};
7804
7805template<> struct Vector<short1, 1> {
7806 static const size_t count = 1;
7807 typedef short1 scalar_t;
7808 typedef short1 type;
7809 typedef short1 mask_t;
7810};
7811
7812template <> struct get_traits<short1>
7813{
7814 using type = Vector<short1, 1>;
7815};
7816
7817template<> struct Vector<short1, 2> {
7818 static const size_t count = 2;
7819 typedef short1 scalar_t;
7820 typedef short2 type;
7821 typedef packed::short2 packed_t;
7822 typedef short2 mask_t;
7823};
7824
7825template <> struct get_traits<short2>
7826{
7827 using type = Vector<short1, 2>;
7828};
7829
7830template<> struct Vector<short1, 3> {
7831 static const size_t count = 3;
7832 typedef short1 scalar_t;
7833 typedef short3 type;
7834 typedef short3 mask_t;
7835};
7836
7837template <> struct get_traits<short3>
7838{
7839 using type = Vector<short1, 3>;
7840};
7841
7842template<> struct Vector<short1, 4> {
7843 static const size_t count = 4;
7844 typedef short1 scalar_t;
7845 typedef short4 type;
7846 typedef packed::short4 packed_t;
7847 typedef short4 mask_t;
7848};
7849
7850template <> struct get_traits<short4>
7851{
7852 using type = Vector<short1, 4>;
7853};
7854
7855template<> struct Vector<short1, 8> {
7856 static const size_t count = 8;
7857 typedef short1 scalar_t;
7858 typedef short8 type;
7859 typedef packed::short8 packed_t;
7860 typedef short8 mask_t;
7861};
7862
7863template <> struct get_traits<short8>
7864{
7865 using type = Vector<short1, 8>;
7866};
7867
7868template<> struct Vector<short1, 16> {
7869 static const size_t count = 16;
7870 typedef short1 scalar_t;
7871 typedef short16 type;
7872 typedef packed::short16 packed_t;
7873 typedef short16 mask_t;
7874};
7875
7876template <> struct get_traits<short16>
7877{
7878 using type = Vector<short1, 16>;
7879};
7880
7881template<> struct Vector<short1, 32> {
7882 static const size_t count = 32;
7883 typedef short1 scalar_t;
7884 typedef short32 type;
7885 typedef packed::short32 packed_t;
7886 typedef short32 mask_t;
7887};
7888
7889template <> struct get_traits<short32>
7890{
7891 using type = Vector<short1, 32>;
7892};
7893
7894template<> struct Vector<ushort1, 1> {
7895 static const size_t count = 1;
7896 typedef ushort1 scalar_t;
7897 typedef ushort1 type;
7898 typedef short1 mask_t;
7899};
7900
7901template <> struct get_traits<ushort1>
7902{
7903 using type = Vector<ushort1, 1>;
7904};
7905
7906template<> struct Vector<ushort1, 2> {
7907 static const size_t count = 2;
7908 typedef ushort1 scalar_t;
7909 typedef ushort2 type;
7910 typedef packed::ushort2 packed_t;
7911 typedef short2 mask_t;
7912};
7913
7914template <> struct get_traits<ushort2>
7915{
7916 using type = Vector<ushort1, 2>;
7917};
7918
7919template<> struct Vector<ushort1, 3> {
7920 static const size_t count = 3;
7921 typedef ushort1 scalar_t;
7922 typedef ushort3 type;
7923 typedef short3 mask_t;
7924};
7925
7926template <> struct get_traits<ushort3>
7927{
7928 using type = Vector<ushort1, 3>;
7929};
7930
7931template<> struct Vector<ushort1, 4> {
7932 static const size_t count = 4;
7933 typedef ushort1 scalar_t;
7934 typedef ushort4 type;
7935 typedef packed::ushort4 packed_t;
7936 typedef short4 mask_t;
7937};
7938
7939template <> struct get_traits<ushort4>
7940{
7941 using type = Vector<ushort1, 4>;
7942};
7943
7944template<> struct Vector<ushort1, 8> {
7945 static const size_t count = 8;
7946 typedef ushort1 scalar_t;
7947 typedef ushort8 type;
7948 typedef packed::ushort8 packed_t;
7949 typedef short8 mask_t;
7950};
7951
7952template <> struct get_traits<ushort8>
7953{
7954 using type = Vector<ushort1, 8>;
7955};
7956
7957template<> struct Vector<ushort1, 16> {
7958 static const size_t count = 16;
7959 typedef ushort1 scalar_t;
7960 typedef ushort16 type;
7961 typedef packed::ushort16 packed_t;
7962 typedef short16 mask_t;
7963};
7964
7965template <> struct get_traits<ushort16>
7966{
7967 using type = Vector<ushort1, 16>;
7968};
7969
7970template<> struct Vector<ushort1, 32> {
7971 static const size_t count = 32;
7972 typedef ushort1 scalar_t;
7973 typedef ushort32 type;
7974 typedef packed::ushort32 packed_t;
7975 typedef short32 mask_t;
7976};
7977
7978template <> struct get_traits<ushort32>
7979{
7980 using type = Vector<ushort1, 32>;
7981};
7982
7983template<> struct Vector<half1, 1> {
7984 static const size_t count = 1;
7985 typedef half1 scalar_t;
7986 typedef half1 type;
7987 typedef short1 mask_t;
7988};
7989
7990template <> struct get_traits<half1>
7991{
7992 using type = Vector<half1, 1>;
7993};
7994
7995template<> struct Vector<half1, 2> {
7996 static const size_t count = 2;
7997 typedef half1 scalar_t;
7998 typedef half2 type;
7999 typedef packed::half2 packed_t;
8000 typedef short2 mask_t;
8001};
8002
8003template <> struct get_traits<half2>
8004{
8005 using type = Vector<half1, 2>;
8006};
8007
8008template<> struct Vector<half1, 3> {
8009 static const size_t count = 3;
8010 typedef half1 scalar_t;
8011 typedef half3 type;
8012 typedef short3 mask_t;
8013};
8014
8015template <> struct get_traits<half3>
8016{
8017 using type = Vector<half1, 3>;
8018};
8019
8020template<> struct Vector<half1, 4> {
8021 static const size_t count = 4;
8022 typedef half1 scalar_t;
8023 typedef half4 type;
8024 typedef packed::half4 packed_t;
8025 typedef short4 mask_t;
8026};
8027
8028template <> struct get_traits<half4>
8029{
8030 using type = Vector<half1, 4>;
8031};
8032
8033template<> struct Vector<half1, 8> {
8034 static const size_t count = 8;
8035 typedef half1 scalar_t;
8036 typedef half8 type;
8037 typedef packed::half8 packed_t;
8038 typedef short8 mask_t;
8039};
8040
8041template <> struct get_traits<half8>
8042{
8043 using type = Vector<half1, 8>;
8044};
8045
8046template<> struct Vector<half1, 16> {
8047 static const size_t count = 16;
8048 typedef half1 scalar_t;
8049 typedef half16 type;
8050 typedef packed::half16 packed_t;
8051 typedef short16 mask_t;
8052};
8053
8054template <> struct get_traits<half16>
8055{
8056 using type = Vector<half1, 16>;
8057};
8058
8059template<> struct Vector<half1, 32> {
8060 static const size_t count = 32;
8061 typedef half1 scalar_t;
8062 typedef half32 type;
8063 typedef packed::half32 packed_t;
8064 typedef short32 mask_t;
8065};
8066
8067template <> struct get_traits<half32>
8068{
8069 using type = Vector<half1, 32>;
8070};
8071
8072template<> struct Vector<int1, 1> {
8073 static const size_t count = 1;
8074 typedef int1 scalar_t;
8075 typedef int1 type;
8076 typedef int1 mask_t;
8077};
8078
8079template <> struct get_traits<int1>
8080{
8081 using type = Vector<int1, 1>;
8082};
8083
8084template<> struct Vector<int1, 2> {
8085 static const size_t count = 2;
8086 typedef int1 scalar_t;
8087 typedef int2 type;
8088 typedef packed::int2 packed_t;
8089 typedef int2 mask_t;
8090};
8091
8092template <> struct get_traits<int2>
8093{
8094 using type = Vector<int1, 2>;
8095};
8096
8097template<> struct Vector<int1, 3> {
8098 static const size_t count = 3;
8099 typedef int1 scalar_t;
8100 typedef int3 type;
8101 typedef int3 mask_t;
8102};
8103
8104template <> struct get_traits<int3>
8105{
8106 using type = Vector<int1, 3>;
8107};
8108
8109template<> struct Vector<int1, 4> {
8110 static const size_t count = 4;
8111 typedef int1 scalar_t;
8112 typedef int4 type;
8113 typedef packed::int4 packed_t;
8114 typedef int4 mask_t;
8115};
8116
8117template <> struct get_traits<int4>
8118{
8119 using type = Vector<int1, 4>;
8120};
8121
8122template<> struct Vector<int1, 8> {
8123 static const size_t count = 8;
8124 typedef int1 scalar_t;
8125 typedef int8 type;
8126 typedef packed::int8 packed_t;
8127 typedef int8 mask_t;
8128};
8129
8130template <> struct get_traits<int8>
8131{
8132 using type = Vector<int1, 8>;
8133};
8134
8135template<> struct Vector<int1, 16> {
8136 static const size_t count = 16;
8137 typedef int1 scalar_t;
8138 typedef int16 type;
8139 typedef packed::int16 packed_t;
8140 typedef int16 mask_t;
8141};
8142
8143template <> struct get_traits<int16>
8144{
8145 using type = Vector<int1, 16>;
8146};
8147
8148template<> struct Vector<uint1, 1> {
8149 static const size_t count = 1;
8150 typedef uint1 scalar_t;
8151 typedef uint1 type;
8152 typedef int1 mask_t;
8153};
8154
8155template <> struct get_traits<uint1>
8156{
8157 using type = Vector<uint1, 1>;
8158};
8159
8160template<> struct Vector<uint1, 2> {
8161 static const size_t count = 2;
8162 typedef uint1 scalar_t;
8163 typedef uint2 type;
8164 typedef packed::uint2 packed_t;
8165 typedef int2 mask_t;
8166};
8167
8168template <> struct get_traits<uint2>
8169{
8170 using type = Vector<uint1, 2>;
8171};
8172
8173template<> struct Vector<uint1, 3> {
8174 static const size_t count = 3;
8175 typedef uint1 scalar_t;
8176 typedef uint3 type;
8177 typedef int3 mask_t;
8178};
8179
8180template <> struct get_traits<uint3>
8181{
8182 using type = Vector<uint1, 3>;
8183};
8184
8185template<> struct Vector<uint1, 4> {
8186 static const size_t count = 4;
8187 typedef uint1 scalar_t;
8188 typedef uint4 type;
8189 typedef packed::uint4 packed_t;
8190 typedef int4 mask_t;
8191};
8192
8193template <> struct get_traits<uint4>
8194{
8195 using type = Vector<uint1, 4>;
8196};
8197
8198template<> struct Vector<uint1, 8> {
8199 static const size_t count = 8;
8200 typedef uint1 scalar_t;
8201 typedef uint8 type;
8202 typedef packed::uint8 packed_t;
8203 typedef int8 mask_t;
8204};
8205
8206template <> struct get_traits<uint8>
8207{
8208 using type = Vector<uint1, 8>;
8209};
8210
8211template<> struct Vector<uint1, 16> {
8212 static const size_t count = 16;
8213 typedef uint1 scalar_t;
8214 typedef uint16 type;
8215 typedef packed::uint16 packed_t;
8216 typedef int16 mask_t;
8217};
8218
8219template <> struct get_traits<uint16>
8220{
8221 using type = Vector<uint1, 16>;
8222};
8223
8224template<> struct Vector<float1, 1> {
8225 static const size_t count = 1;
8226 typedef float1 scalar_t;
8227 typedef float1 type;
8228 typedef int1 mask_t;
8229};
8230
8231template <> struct get_traits<float1>
8232{
8233 using type = Vector<float1, 1>;
8234};
8235
8236template<> struct Vector<float1, 2> {
8237 static const size_t count = 2;
8238 typedef float1 scalar_t;
8239 typedef float2 type;
8240 typedef packed::float2 packed_t;
8241 typedef int2 mask_t;
8242};
8243
8244template <> struct get_traits<float2>
8245{
8246 using type = Vector<float1, 2>;
8247};
8248
8249template<> struct Vector<float1, 3> {
8250 static const size_t count = 3;
8251 typedef float1 scalar_t;
8252 typedef float3 type;
8253 typedef int3 mask_t;
8254};
8255
8256template <> struct get_traits<float3>
8257{
8258 using type = Vector<float1, 3>;
8259};
8260
8261template<> struct Vector<float1, 4> {
8262 static const size_t count = 4;
8263 typedef float1 scalar_t;
8264 typedef float4 type;
8265 typedef packed::float4 packed_t;
8266 typedef int4 mask_t;
8267};
8268
8269template <> struct get_traits<float4>
8270{
8271 using type = Vector<float1, 4>;
8272};
8273
8274template<> struct Vector<float1, 8> {
8275 static const size_t count = 8;
8276 typedef float1 scalar_t;
8277 typedef float8 type;
8278 typedef packed::float8 packed_t;
8279 typedef int8 mask_t;
8280};
8281
8282template <> struct get_traits<float8>
8283{
8284 using type = Vector<float1, 8>;
8285};
8286
8287template<> struct Vector<float1, 16> {
8288 static const size_t count = 16;
8289 typedef float1 scalar_t;
8290 typedef float16 type;
8291 typedef packed::float16 packed_t;
8292 typedef int16 mask_t;
8293};
8294
8295template <> struct get_traits<float16>
8296{
8297 using type = Vector<float1, 16>;
8298};
8299
8300template<> struct Vector<long1, 1> {
8301 static const size_t count = 1;
8302 typedef long1 scalar_t;
8303 typedef long1 type;
8304 typedef long1 mask_t;
8305};
8306
8307template <> struct get_traits<long1>
8308{
8309 using type = Vector<long1, 1>;
8310};
8311
8312template<> struct Vector<long1, 2> {
8313 static const size_t count = 2;
8314 typedef long1 scalar_t;
8315 typedef long2 type;
8316 typedef packed::long2 packed_t;
8317 typedef long2 mask_t;
8318};
8319
8320template <> struct get_traits<long2>
8321{
8322 using type = Vector<long1, 2>;
8323};
8324
8325template<> struct Vector<long1, 3> {
8326 static const size_t count = 3;
8327 typedef long1 scalar_t;
8328 typedef long3 type;
8329 typedef long3 mask_t;
8330};
8331
8332template <> struct get_traits<long3>
8333{
8334 using type = Vector<long1, 3>;
8335};
8336
8337template<> struct Vector<long1, 4> {
8338 static const size_t count = 4;
8339 typedef long1 scalar_t;
8340 typedef long4 type;
8341 typedef packed::long4 packed_t;
8342 typedef long4 mask_t;
8343};
8344
8345template <> struct get_traits<long4>
8346{
8347 using type = Vector<long1, 4>;
8348};
8349
8350template<> struct Vector<long1, 8> {
8351 static const size_t count = 8;
8352 typedef long1 scalar_t;
8353 typedef long8 type;
8354 typedef packed::long8 packed_t;
8355 typedef long8 mask_t;
8356};
8357
8358template <> struct get_traits<long8>
8359{
8360 using type = Vector<long1, 8>;
8361};
8362
8363template<> struct Vector<ulong1, 1> {
8364 static const size_t count = 1;
8365 typedef ulong1 scalar_t;
8366 typedef ulong1 type;
8367 typedef long1 mask_t;
8368};
8369
8370template <> struct get_traits<ulong1>
8371{
8372 using type = Vector<ulong1, 1>;
8373};
8374
8375template<> struct Vector<ulong1, 2> {
8376 static const size_t count = 2;
8377 typedef ulong1 scalar_t;
8378 typedef ulong2 type;
8379 typedef packed::ulong2 packed_t;
8380 typedef long2 mask_t;
8381};
8382
8383template <> struct get_traits<ulong2>
8384{
8385 using type = Vector<ulong1, 2>;
8386};
8387
8388template<> struct Vector<ulong1, 3> {
8389 static const size_t count = 3;
8390 typedef ulong1 scalar_t;
8391 typedef ulong3 type;
8392 typedef long3 mask_t;
8393};
8394
8395template <> struct get_traits<ulong3>
8396{
8397 using type = Vector<ulong1, 3>;
8398};
8399
8400template<> struct Vector<ulong1, 4> {
8401 static const size_t count = 4;
8402 typedef ulong1 scalar_t;
8403 typedef ulong4 type;
8404 typedef packed::ulong4 packed_t;
8405 typedef long4 mask_t;
8406};
8407
8408template <> struct get_traits<ulong4>
8409{
8410 using type = Vector<ulong1, 4>;
8411};
8412
8413template<> struct Vector<ulong1, 8> {
8414 static const size_t count = 8;
8415 typedef ulong1 scalar_t;
8416 typedef ulong8 type;
8417 typedef packed::ulong8 packed_t;
8418 typedef long8 mask_t;
8419};
8420
8421template <> struct get_traits<ulong8>
8422{
8423 using type = Vector<ulong1, 8>;
8424};
8425
8426template<> struct Vector<double1, 1> {
8427 static const size_t count = 1;
8428 typedef double1 scalar_t;
8429 typedef double1 type;
8430 typedef long1 mask_t;
8431};
8432
8433template <> struct get_traits<double1>
8434{
8435 using type = Vector<double1, 1>;
8436};
8437
8438template<> struct Vector<double1, 2> {
8439 static const size_t count = 2;
8440 typedef double1 scalar_t;
8441 typedef double2 type;
8442 typedef packed::double2 packed_t;
8443 typedef long2 mask_t;
8444};
8445
8446template <> struct get_traits<double2>
8447{
8448 using type = Vector<double1, 2>;
8449};
8450
8451template<> struct Vector<double1, 3> {
8452 static const size_t count = 3;
8453 typedef double1 scalar_t;
8454 typedef double3 type;
8455 typedef long3 mask_t;
8456};
8457
8458template <> struct get_traits<double3>
8459{
8460 using type = Vector<double1, 3>;
8461};
8462
8463template<> struct Vector<double1, 4> {
8464 static const size_t count = 4;
8465 typedef double1 scalar_t;
8466 typedef double4 type;
8467 typedef packed::double4 packed_t;
8468 typedef long4 mask_t;
8469};
8470
8471template <> struct get_traits<double4>
8472{
8473 using type = Vector<double1, 4>;
8474};
8475
8476template<> struct Vector<double1, 8> {
8477 static const size_t count = 8;
8478 typedef double1 scalar_t;
8479 typedef double8 type;
8480 typedef packed::double8 packed_t;
8481 typedef long8 mask_t;
8482};
8483
8484template <> struct get_traits<double8>
8485{
8486 using type = Vector<double1, 8>;
8487};
8488
8489#if __has_feature(cxx_constexpr)
8490/*! @abstract Templated make function based on return type and argument
8491 * type. */
8492template<typename typeN, typename... Args>
8493static constexpr typeN make(Args... args)
8494{
8495 if constexpr (traits<typeN>::count == 1)
8496 {
8497 using FirstArgType = typename std::tuple_element<0, std::tuple<Args...>>::type;
8498 if constexpr (std::is_same<FirstArgType, typename traits<FirstArgType>::scalar_t>::value)
8499 return typeN(std::get<0>(std::make_tuple(args...)));
8500 else
8501 return typeN(std::get<0>(std::make_tuple(args...))[0]);
8502 }
8503 else if constexpr (std::is_same<typeN, char2>::value)
8504 return make_char2(args...);
8505 else if constexpr (std::is_same<typeN, char3>::value)
8506 return make_char3(args...);
8507 else if constexpr (std::is_same<typeN, char4>::value)
8508 return make_char4(args...);
8509 else if constexpr (std::is_same<typeN, char8>::value)
8510 return make_char8(args...);
8511 else if constexpr (std::is_same<typeN, char16>::value)
8512 return make_char16(args...);
8513 else if constexpr (std::is_same<typeN, char32>::value)
8514 return make_char32(args...);
8515 else if constexpr (std::is_same<typeN, char64>::value)
8516 return make_char64(args...);
8517 else if constexpr (std::is_same<typeN, uchar2>::value)
8518 return make_uchar2(args...);
8519 else if constexpr (std::is_same<typeN, uchar3>::value)
8520 return make_uchar3(args...);
8521 else if constexpr (std::is_same<typeN, uchar4>::value)
8522 return make_uchar4(args...);
8523 else if constexpr (std::is_same<typeN, uchar8>::value)
8524 return make_uchar8(args...);
8525 else if constexpr (std::is_same<typeN, uchar16>::value)
8526 return make_uchar16(args...);
8527 else if constexpr (std::is_same<typeN, uchar32>::value)
8528 return make_uchar32(args...);
8529 else if constexpr (std::is_same<typeN, uchar64>::value)
8530 return make_uchar64(args...);
8531 else if constexpr (std::is_same<typeN, short2>::value)
8532 return make_short2(args...);
8533 else if constexpr (std::is_same<typeN, short3>::value)
8534 return make_short3(args...);
8535 else if constexpr (std::is_same<typeN, short4>::value)
8536 return make_short4(args...);
8537 else if constexpr (std::is_same<typeN, short8>::value)
8538 return make_short8(args...);
8539 else if constexpr (std::is_same<typeN, short16>::value)
8540 return make_short16(args...);
8541 else if constexpr (std::is_same<typeN, short32>::value)
8542 return make_short32(args...);
8543 else if constexpr (std::is_same<typeN, ushort2>::value)
8544 return make_ushort2(args...);
8545 else if constexpr (std::is_same<typeN, ushort3>::value)
8546 return make_ushort3(args...);
8547 else if constexpr (std::is_same<typeN, ushort4>::value)
8548 return make_ushort4(args...);
8549 else if constexpr (std::is_same<typeN, ushort8>::value)
8550 return make_ushort8(args...);
8551 else if constexpr (std::is_same<typeN, ushort16>::value)
8552 return make_ushort16(args...);
8553 else if constexpr (std::is_same<typeN, ushort32>::value)
8554 return make_ushort32(args...);
8555 else if constexpr (std::is_same<typeN, half2>::value)
8556 return make_half2(args...);
8557 else if constexpr (std::is_same<typeN, half3>::value)
8558 return make_half3(args...);
8559 else if constexpr (std::is_same<typeN, half4>::value)
8560 return make_half4(args...);
8561 else if constexpr (std::is_same<typeN, half8>::value)
8562 return make_half8(args...);
8563 else if constexpr (std::is_same<typeN, half16>::value)
8564 return make_half16(args...);
8565 else if constexpr (std::is_same<typeN, half32>::value)
8566 return make_half32(args...);
8567 else if constexpr (std::is_same<typeN, int2>::value)
8568 return make_int2(args...);
8569 else if constexpr (std::is_same<typeN, int3>::value)
8570 return make_int3(args...);
8571 else if constexpr (std::is_same<typeN, int4>::value)
8572 return make_int4(args...);
8573 else if constexpr (std::is_same<typeN, int8>::value)
8574 return make_int8(args...);
8575 else if constexpr (std::is_same<typeN, int16>::value)
8576 return make_int16(args...);
8577 else if constexpr (std::is_same<typeN, uint2>::value)
8578 return make_uint2(args...);
8579 else if constexpr (std::is_same<typeN, uint3>::value)
8580 return make_uint3(args...);
8581 else if constexpr (std::is_same<typeN, uint4>::value)
8582 return make_uint4(args...);
8583 else if constexpr (std::is_same<typeN, uint8>::value)
8584 return make_uint8(args...);
8585 else if constexpr (std::is_same<typeN, uint16>::value)
8586 return make_uint16(args...);
8587 else if constexpr (std::is_same<typeN, float2>::value)
8588 return make_float2(args...);
8589 else if constexpr (std::is_same<typeN, float3>::value)
8590 return make_float3(args...);
8591 else if constexpr (std::is_same<typeN, float4>::value)
8592 return make_float4(args...);
8593 else if constexpr (std::is_same<typeN, float8>::value)
8594 return make_float8(args...);
8595 else if constexpr (std::is_same<typeN, float16>::value)
8596 return make_float16(args...);
8597 else if constexpr (std::is_same<typeN, long2>::value)
8598 return make_long2(args...);
8599 else if constexpr (std::is_same<typeN, long3>::value)
8600 return make_long3(args...);
8601 else if constexpr (std::is_same<typeN, long4>::value)
8602 return make_long4(args...);
8603 else if constexpr (std::is_same<typeN, long8>::value)
8604 return make_long8(args...);
8605 else if constexpr (std::is_same<typeN, ulong2>::value)
8606 return make_ulong2(args...);
8607 else if constexpr (std::is_same<typeN, ulong3>::value)
8608 return make_ulong3(args...);
8609 else if constexpr (std::is_same<typeN, ulong4>::value)
8610 return make_ulong4(args...);
8611 else if constexpr (std::is_same<typeN, ulong8>::value)
8612 return make_ulong8(args...);
8613 else if constexpr (std::is_same<typeN, double2>::value)
8614 return make_double2(args...);
8615 else if constexpr (std::is_same<typeN, double3>::value)
8616 return make_double3(args...);
8617 else if constexpr (std::is_same<typeN, double4>::value)
8618 return make_double4(args...);
8619 else if constexpr (std::is_same<typeN, double8>::value)
8620 return make_double8(args...);
8621}
8622
8623/*! @abstract Templated make_undef function based on return type and
8624 * argument type. */
8625template<typename typeN, typename... Args>
8626static constexpr typeN make_undef(Args... args)
8627{
8628 if constexpr (traits<typeN>::count == 1)
8629 {
8630 using FirstArgType = typename std::tuple_element<0, std::tuple<Args...>>::type;
8631 if constexpr (std::is_same<FirstArgType, typename traits<FirstArgType>::scalar_t>::value)
8632 return typeN(std::get<0>(std::make_tuple(args...)));
8633 else
8634 return typeN(std::get<0>(std::make_tuple(args...))[0]);
8635 }
8636 else if constexpr (std::is_same<typeN, char2>::value)
8637 return make_char2_undef(args...);
8638 else if constexpr (std::is_same<typeN, char3>::value)
8639 return make_char3_undef(args...);
8640 else if constexpr (std::is_same<typeN, char4>::value)
8641 return make_char4_undef(args...);
8642 else if constexpr (std::is_same<typeN, char8>::value)
8643 return make_char8_undef(args...);
8644 else if constexpr (std::is_same<typeN, char16>::value)
8645 return make_char16_undef(args...);
8646 else if constexpr (std::is_same<typeN, char32>::value)
8647 return make_char32_undef(args...);
8648 else if constexpr (std::is_same<typeN, char64>::value)
8649 return make_char64_undef(args...);
8650 else if constexpr (std::is_same<typeN, uchar2>::value)
8651 return make_uchar2_undef(args...);
8652 else if constexpr (std::is_same<typeN, uchar3>::value)
8653 return make_uchar3_undef(args...);
8654 else if constexpr (std::is_same<typeN, uchar4>::value)
8655 return make_uchar4_undef(args...);
8656 else if constexpr (std::is_same<typeN, uchar8>::value)
8657 return make_uchar8_undef(args...);
8658 else if constexpr (std::is_same<typeN, uchar16>::value)
8659 return make_uchar16_undef(args...);
8660 else if constexpr (std::is_same<typeN, uchar32>::value)
8661 return make_uchar32_undef(args...);
8662 else if constexpr (std::is_same<typeN, uchar64>::value)
8663 return make_uchar64_undef(args...);
8664 else if constexpr (std::is_same<typeN, short2>::value)
8665 return make_short2_undef(args...);
8666 else if constexpr (std::is_same<typeN, short3>::value)
8667 return make_short3_undef(args...);
8668 else if constexpr (std::is_same<typeN, short4>::value)
8669 return make_short4_undef(args...);
8670 else if constexpr (std::is_same<typeN, short8>::value)
8671 return make_short8_undef(args...);
8672 else if constexpr (std::is_same<typeN, short16>::value)
8673 return make_short16_undef(args...);
8674 else if constexpr (std::is_same<typeN, short32>::value)
8675 return make_short32_undef(args...);
8676 else if constexpr (std::is_same<typeN, ushort2>::value)
8677 return make_ushort2_undef(args...);
8678 else if constexpr (std::is_same<typeN, ushort3>::value)
8679 return make_ushort3_undef(args...);
8680 else if constexpr (std::is_same<typeN, ushort4>::value)
8681 return make_ushort4_undef(args...);
8682 else if constexpr (std::is_same<typeN, ushort8>::value)
8683 return make_ushort8_undef(args...);
8684 else if constexpr (std::is_same<typeN, ushort16>::value)
8685 return make_ushort16_undef(args...);
8686 else if constexpr (std::is_same<typeN, ushort32>::value)
8687 return make_ushort32_undef(args...);
8688 else if constexpr (std::is_same<typeN, half2>::value)
8689 return make_half2_undef(args...);
8690 else if constexpr (std::is_same<typeN, half3>::value)
8691 return make_half3_undef(args...);
8692 else if constexpr (std::is_same<typeN, half4>::value)
8693 return make_half4_undef(args...);
8694 else if constexpr (std::is_same<typeN, half8>::value)
8695 return make_half8_undef(args...);
8696 else if constexpr (std::is_same<typeN, half16>::value)
8697 return make_half16_undef(args...);
8698 else if constexpr (std::is_same<typeN, half32>::value)
8699 return make_half32_undef(args...);
8700 else if constexpr (std::is_same<typeN, int2>::value)
8701 return make_int2_undef(args...);
8702 else if constexpr (std::is_same<typeN, int3>::value)
8703 return make_int3_undef(args...);
8704 else if constexpr (std::is_same<typeN, int4>::value)
8705 return make_int4_undef(args...);
8706 else if constexpr (std::is_same<typeN, int8>::value)
8707 return make_int8_undef(args...);
8708 else if constexpr (std::is_same<typeN, int16>::value)
8709 return make_int16_undef(args...);
8710 else if constexpr (std::is_same<typeN, uint2>::value)
8711 return make_uint2_undef(args...);
8712 else if constexpr (std::is_same<typeN, uint3>::value)
8713 return make_uint3_undef(args...);
8714 else if constexpr (std::is_same<typeN, uint4>::value)
8715 return make_uint4_undef(args...);
8716 else if constexpr (std::is_same<typeN, uint8>::value)
8717 return make_uint8_undef(args...);
8718 else if constexpr (std::is_same<typeN, uint16>::value)
8719 return make_uint16_undef(args...);
8720 else if constexpr (std::is_same<typeN, float2>::value)
8721 return make_float2_undef(args...);
8722 else if constexpr (std::is_same<typeN, float3>::value)
8723 return make_float3_undef(args...);
8724 else if constexpr (std::is_same<typeN, float4>::value)
8725 return make_float4_undef(args...);
8726 else if constexpr (std::is_same<typeN, float8>::value)
8727 return make_float8_undef(args...);
8728 else if constexpr (std::is_same<typeN, float16>::value)
8729 return make_float16_undef(args...);
8730 else if constexpr (std::is_same<typeN, long2>::value)
8731 return make_long2_undef(args...);
8732 else if constexpr (std::is_same<typeN, long3>::value)
8733 return make_long3_undef(args...);
8734 else if constexpr (std::is_same<typeN, long4>::value)
8735 return make_long4_undef(args...);
8736 else if constexpr (std::is_same<typeN, long8>::value)
8737 return make_long8_undef(args...);
8738 else if constexpr (std::is_same<typeN, ulong2>::value)
8739 return make_ulong2_undef(args...);
8740 else if constexpr (std::is_same<typeN, ulong3>::value)
8741 return make_ulong3_undef(args...);
8742 else if constexpr (std::is_same<typeN, ulong4>::value)
8743 return make_ulong4_undef(args...);
8744 else if constexpr (std::is_same<typeN, ulong8>::value)
8745 return make_ulong8_undef(args...);
8746 else if constexpr (std::is_same<typeN, double2>::value)
8747 return make_double2_undef(args...);
8748 else if constexpr (std::is_same<typeN, double3>::value)
8749 return make_double3_undef(args...);
8750 else if constexpr (std::is_same<typeN, double4>::value)
8751 return make_double4_undef(args...);
8752 else if constexpr (std::is_same<typeN, double8>::value)
8753 return make_double8_undef(args...);
8754}
8755#endif /* __has_feature(cxx_constexpr) */
8756} /* namespace simd */
8757#endif /* __cplusplus */
8758#endif /* SIMD_COMPILER_HAS_REQUIRED_FEATURES */
8759#endif /* SIMD_VECTOR_CONSTRUCTORS */