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 */