zig

fork of https://codeberg.org/ziglang/zig
Log | Files | Refs | README | LICENSE

vector_make.h (338643B) - Raw


      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
     77 extern "C" {
     78 #endif
     79 
     80 /*! @abstract Concatenates `x` and `y` to form a vector of two 8-bit signed
     81  *  (twos-complement) integers.                                               */
     82 static 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.                                               */
     91 static 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.                                                              */
    100 static 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.                                         */
    108 static 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.                                                     */
    114 static 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.                                                     */
    120 static 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.                                                     */
    126 static 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.                                                     */
    132 static 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.                                                     */
    138 static 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.                                                     */
    144 static 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.                                        */
    150 static 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.                                        */
    160 static 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.                                        */
    169 static 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.                                               */
    178 static 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.                                                              */
    187 static 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.                                               */
    195 static 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.                                                              */
    204 static 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.                                         */
    212 static 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.                                               */
    218 static 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.                                               */
    224 static 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.                                               */
    230 static 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.                                               */
    236 static 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.                                               */
    242 static 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.                                  */
    248 static 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.                                        */
    259 static 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.                                        */
    269 static 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.                                        */
    279 static 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.                                        */
    289 static 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.                                        */
    298 static 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.                                        */
    307 static 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.                                               */
    316 static 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.                                                              */
    325 static 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.                                               */
    333 static 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.                                                              */
    342 static 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.                                               */
    350 static 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.                                                              */
    359 static 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.                                         */
    367 static 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.                                                     */
    373 static 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.                                                     */
    379 static 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.                                                     */
    385 static 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.                                                     */
    391 static 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.                                        */
    397 static 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.                                               */
    406 static 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.                                                              */
    415 static 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.                                               */
    423 static 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.                                                              */
    432 static 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.                                               */
    440 static 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.                                                              */
    449 static 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.                                               */
    457 static 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.                                                              */
    466 static 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.                                         */
    474 static 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.                                               */
    480 static 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.                                               */
    486 static 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.                                               */
    492 static 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.                                        */
    498 static 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.                                               */
    507 static 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.                                                    */
    516 static 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.                                               */
    524 static 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.                                                    */
    533 static 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.                                               */
    541 static 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.                                                    */
    550 static 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.                                               */
    558 static 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.                                                    */
    567 static 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.                                               */
    575 static 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.                                                    */
    584 static 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.                                         */
    592 static 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.                                               */
    598 static 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.                                               */
    604 static 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.                                  */
    610 static 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.                                        */
    619 static 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.                                                    */
    628 static 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.                                        */
    636 static 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.                                                    */
    645 static 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.                                        */
    653 static 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.                                                    */
    662 static 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.                                        */
    670 static 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.                                                    */
    679 static 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.                                        */
    687 static 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.                                                    */
    696 static 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.                                        */
    704 static 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.                                                    */
    713 static 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.                                         */
    721 static 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.                                               */
    727 static 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.                                  */
    733 static 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.                                        */
    742 static 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.                                                    */
    751 static 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.                                        */
    759 static 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.                                                    */
    768 static 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.                                        */
    776 static 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.                                                    */
    785 static 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.                                        */
    793 static 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.                                                    */
    802 static 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.                                        */
    810 static 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.                                                    */
    819 static 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.                                        */
    827 static 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.                                                    */
    836 static 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.                                        */
    844 static 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.                                                    */
    853 static 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.                                         */
    861 static 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.                                                        */
    867 static 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.                                                                 */
    876 static 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.                                                              */
    885 static 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.                                         */
    893 static 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.                                                                 */
    899 static 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.                                                                 */
    905 static 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.                                                                 */
    911 static 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.                                                                 */
    917 static 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.                                                                 */
    923 static 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.                                                                 */
    929 static 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.                                                        */
    935 static 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.                                                        */
    945 static 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.                                                        */
    954 static 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.                                                                 */
    963 static 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.                                                              */
    972 static 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.                                                                 */
    980 static 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.                                                              */
    989 static 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.                                         */
    997 static 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.                                                                 */
   1003 static 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.                                                                 */
   1009 static 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.                                                                 */
   1015 static 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.                                                                 */
   1021 static 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.                                                                 */
   1027 static 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.                                                  */
   1033 static 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.                                                        */
   1044 static 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.                                                        */
   1054 static 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.                                                        */
   1064 static 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.                                                        */
   1074 static 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.                                                        */
   1083 static 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.                                                        */
   1092 static 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.                                                                 */
   1101 static 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.                                                              */
   1110 static 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.                                                                 */
   1118 static 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.                                                              */
   1127 static 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.                                                                 */
   1135 static 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.                                                              */
   1144 static 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.                                         */
   1152 static 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.                                                                 */
   1158 static 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.                                                                 */
   1164 static 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.                                                                 */
   1170 static 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.                                                                 */
   1176 static 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.                                                        */
   1182 static 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.                                                                 */
   1191 static 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.                                                              */
   1200 static 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.                                                                 */
   1208 static 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.                                                              */
   1217 static 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.                                                                 */
   1225 static 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.                                                              */
   1234 static 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.                                                                 */
   1242 static 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.                                                              */
   1251 static 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.                                         */
   1259 static 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.                                                                 */
   1265 static 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.                                                                 */
   1271 static 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.                                                                 */
   1277 static 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.                                                        */
   1283 static 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.                                                        */
   1292 static 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.                                                              */
   1301 static 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.                                                        */
   1309 static 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.                                                              */
   1318 static 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.                                                        */
   1326 static 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.                                                              */
   1335 static 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.                                                        */
   1343 static 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.                                                              */
   1352 static 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.                                                        */
   1360 static 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.                                                              */
   1369 static 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.                                         */
   1377 static 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.                                                                 */
   1383 static 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.                                                                 */
   1389 static 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.                                                  */
   1395 static 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.                                                        */
   1404 static 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.                                                              */
   1413 static 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.                                                        */
   1421 static 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.                                                              */
   1430 static 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.                                                        */
   1438 static 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.                                                              */
   1447 static 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.                                                        */
   1455 static 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.                                                              */
   1464 static 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.                                                        */
   1472 static 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.                                                              */
   1481 static 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.                                                        */
   1489 static 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.                                                              */
   1498 static 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.                                         */
   1506 static 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.                                                        */
   1512 static 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.                                                  */
   1518 static 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.                                                        */
   1527 static 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.                                                              */
   1536 static 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.                                                        */
   1544 static 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.                                                              */
   1553 static 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.                                                        */
   1561 static 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.                                                              */
   1570 static 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.                                                        */
   1578 static 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.                                                              */
   1587 static 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.                                                        */
   1595 static 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.                                                              */
   1604 static 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.                                                        */
   1612 static 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.                                                              */
   1621 static 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.                                                        */
   1629 static 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.                                                              */
   1638 static 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.                                         */
   1646 static 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.                                               */
   1652 static 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.                                               */
   1661 static 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.                                                              */
   1670 static 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.                                         */
   1678 static 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.                                                     */
   1684 static 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.                                                     */
   1690 static 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.                                                     */
   1696 static 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.                                                     */
   1702 static 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.                                                     */
   1708 static 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.                                        */
   1714 static 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.                                        */
   1724 static 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.                                        */
   1733 static 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.                                               */
   1742 static 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.                                                              */
   1751 static 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.                                               */
   1759 static 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.                                                              */
   1768 static 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.                                         */
   1776 static 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.                                               */
   1782 static 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.                                               */
   1788 static 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.                                               */
   1794 static 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.                                               */
   1800 static 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.                                 */
   1806 static 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.                                        */
   1817 static 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.                                        */
   1827 static 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.                                        */
   1837 static 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.                                        */
   1847 static 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.                                        */
   1856 static 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.                                        */
   1865 static 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.                                               */
   1874 static 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.                                                              */
   1883 static 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.                                               */
   1891 static 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.                                                              */
   1900 static 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.                                               */
   1908 static 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.                                                              */
   1917 static 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.                                         */
   1925 static 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.                                               */
   1931 static 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.                                               */
   1937 static 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.                                               */
   1943 static 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.                                        */
   1949 static 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.                                               */
   1958 static 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.                                                              */
   1967 static 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.                                               */
   1975 static 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.                                                              */
   1984 static 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.                                               */
   1992 static 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.                                                              */
   2001 static 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.                                               */
   2009 static 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.                                                              */
   2018 static 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.                                         */
   2026 static 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.                                               */
   2032 static 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.                                               */
   2038 static 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.                                        */
   2044 static 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.                                               */
   2053 static 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.                                                    */
   2062 static 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.                                               */
   2070 static 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.                                                    */
   2079 static 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.                                               */
   2087 static 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.                                                    */
   2096 static 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.                                               */
   2104 static 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.                                                    */
   2113 static 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.                                               */
   2121 static 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.                                                    */
   2130 static 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.                                         */
   2138 static 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.                                               */
   2144 static 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.                                 */
   2150 static 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.                                        */
   2159 static 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.                                                    */
   2168 static 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.                                        */
   2176 static 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.                                                    */
   2185 static 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.                                        */
   2193 static 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.                                                    */
   2202 static 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.                                        */
   2210 static 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.                                                    */
   2219 static 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.                                        */
   2227 static 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.                                                    */
   2236 static 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.                                        */
   2244 static 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.                                                    */
   2253 static 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.                                         */
   2261 static 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.                                                        */
   2267 static 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.                                                                 */
   2276 static 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.                                                              */
   2285 static 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.                                         */
   2293 static 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.                                                                 */
   2299 static 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.                                                                 */
   2305 static 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.                                                                 */
   2311 static 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.                                                                 */
   2317 static 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.                                                                 */
   2323 static 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.                                                        */
   2329 static 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.                                                        */
   2339 static 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.                                                        */
   2348 static 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.                                                                 */
   2357 static 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.                                                              */
   2366 static 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.                                                                 */
   2374 static 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.                                                              */
   2383 static 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.                                         */
   2391 static 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.                                                                 */
   2397 static 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.                                                                 */
   2403 static 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.                                                                 */
   2409 static 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.                                                                 */
   2415 static 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.                                                 */
   2421 static 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.                                                        */
   2432 static 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.                                                        */
   2442 static 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.                                                        */
   2452 static 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.                                                        */
   2462 static 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.                                                        */
   2471 static 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.                                                        */
   2480 static 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.                                                                 */
   2489 static 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.                                                              */
   2498 static 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.                                                                 */
   2506 static 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.                                                              */
   2515 static 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.                                                                 */
   2523 static 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.                                                              */
   2532 static 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.                                         */
   2540 static 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.                                                                 */
   2546 static 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.                                                                 */
   2552 static 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.                                                                 */
   2558 static 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.                                                        */
   2564 static 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.                                                                 */
   2573 static 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.                                                              */
   2582 static 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.                                                                 */
   2590 static 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.                                                              */
   2599 static 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.                                                                 */
   2607 static 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.                                                              */
   2616 static 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.                                                                 */
   2624 static 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.                                                              */
   2633 static 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.                                         */
   2641 static 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.                                                                 */
   2647 static 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.                                                                 */
   2653 static 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.                                                        */
   2659 static 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.                                                        */
   2668 static 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.                                                              */
   2677 static 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.                                                        */
   2685 static 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.                                                              */
   2694 static 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.                                                        */
   2702 static 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.                                                              */
   2711 static 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.                                                        */
   2719 static 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.                                                              */
   2728 static 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.                                                        */
   2736 static 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.                                                              */
   2745 static 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.                                         */
   2753 static 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.                                                                 */
   2759 static 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.                                                 */
   2765 static 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.                                                        */
   2774 static 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.                                                              */
   2783 static 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.                                                        */
   2791 static 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.                                                              */
   2800 static 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.                                                        */
   2808 static 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.                                                              */
   2817 static 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.                                                        */
   2825 static 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.                                                              */
   2834 static 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.                                                        */
   2842 static 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.                                                              */
   2851 static 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.                                                        */
   2859 static 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.                                                              */
   2868 static 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.                                         */
   2876 static 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.                                                   */
   2882 static 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.                                                            */
   2891 static 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.  */
   2899 static 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.                                         */
   2907 static 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.                                                            */
   2913 static 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.                                                            */
   2919 static 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.                                                            */
   2925 static 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.                                                            */
   2931 static 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.                                                            */
   2937 static 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.                                                   */
   2943 static 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.                                                   */
   2953 static 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.                                                   */
   2962 static 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.                                                   */
   2971 static 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.                                                              */
   2980 static 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.                                                   */
   2988 static 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.                                                              */
   2997 static 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.                                         */
   3005 static 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.                                                            */
   3011 static 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.                                                            */
   3017 static 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.                                                            */
   3023 static 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.                                                            */
   3029 static 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.                                            */
   3035 static 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.                                                   */
   3046 static 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.                                                   */
   3056 static 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.                                                   */
   3066 static 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.                                                   */
   3076 static 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.                                                   */
   3085 static 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.                                                   */
   3094 static 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.                                                            */
   3103 static 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.  */
   3111 static 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.                                                            */
   3119 static 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.  */
   3127 static 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.                                                            */
   3135 static 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.  */
   3143 static 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.                                         */
   3151 static 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.                                                            */
   3157 static 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.                                                            */
   3163 static 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.                                                            */
   3169 static 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.                                                   */
   3175 static 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.                                                   */
   3184 static 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.                                                              */
   3193 static 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.                                                   */
   3201 static 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.                                                              */
   3210 static 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.                                                   */
   3218 static 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.                                                              */
   3227 static 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.                                                   */
   3235 static 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.                                                              */
   3244 static 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.                                         */
   3252 static 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.                                                            */
   3258 static 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.                                                            */
   3264 static 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.                                                   */
   3270 static 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.                                                   */
   3279 static 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.                                                              */
   3288 static 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.                                                   */
   3296 static 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.                                                              */
   3305 static 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.                                                   */
   3313 static 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.                                                              */
   3322 static 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.                                                   */
   3330 static 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.                                                              */
   3339 static 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.                                                   */
   3347 static 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.                                                              */
   3356 static 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.                                         */
   3364 static 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.                                                            */
   3370 static 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.                                            */
   3376 static 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.                                                   */
   3385 static 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.                                                          */
   3394 static 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.                                                   */
   3402 static 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.                                                          */
   3411 static 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.                                                   */
   3419 static 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.                                                          */
   3428 static 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.                                                   */
   3436 static 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.                                                          */
   3445 static 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.                                                   */
   3453 static 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.                                                          */
   3462 static 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.                                                   */
   3470 static 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.                                                          */
   3479 static 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.                                         */
   3487 static 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.                                               */
   3493 static 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.                                               */
   3502 static 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.                                                              */
   3511 static 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.                                         */
   3519 static 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.                                                     */
   3525 static 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.                                                     */
   3531 static 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.                                                     */
   3537 static 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.                                                     */
   3543 static 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.                                        */
   3549 static 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.                                        */
   3559 static 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.                                        */
   3568 static 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.                                               */
   3577 static 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.                                                              */
   3586 static 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.                                               */
   3594 static 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.                                                              */
   3603 static 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.                                         */
   3611 static 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.                                               */
   3617 static 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.                                               */
   3623 static 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.                                               */
   3629 static 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.                                 */
   3635 static 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.                                        */
   3646 static 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.                                        */
   3656 static 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.                                        */
   3666 static 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.                                        */
   3676 static 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.                                        */
   3685 static 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.                                        */
   3694 static 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.                                               */
   3703 static 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.                                                              */
   3712 static 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.                                               */
   3720 static 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.                                                              */
   3729 static 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.                                               */
   3737 static 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.                                                              */
   3746 static 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.                                         */
   3754 static 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.                                               */
   3760 static 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.                                               */
   3766 static 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.                                        */
   3772 static 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.                                               */
   3781 static 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.                                                              */
   3790 static 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.                                               */
   3798 static 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.                                                              */
   3807 static 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.                                               */
   3815 static 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.                                                              */
   3824 static 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.                                               */
   3832 static 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.                                                              */
   3841 static 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.                                         */
   3849 static 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.                                               */
   3855 static 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.                                        */
   3861 static 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.                                               */
   3870 static 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.                                                    */
   3879 static 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.                                               */
   3887 static 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.                                                    */
   3896 static 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.                                               */
   3904 static 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.                                                    */
   3913 static 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.                                               */
   3921 static 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.                                                    */
   3930 static 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.                                               */
   3938 static 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.                                                    */
   3947 static 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.                                         */
   3955 static 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.                                                        */
   3961 static 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.                                                                 */
   3970 static 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.                                                              */
   3979 static 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.                                         */
   3987 static 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.                                                                 */
   3993 static 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.                                                                 */
   3999 static 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.                                                                 */
   4005 static 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.                                                                 */
   4011 static 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.                                                        */
   4017 static 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.                                                        */
   4027 static 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.                                                        */
   4036 static 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.                                                                 */
   4045 static 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.                                                              */
   4054 static 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.                                                                 */
   4062 static 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.                                                              */
   4071 static 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.                                         */
   4079 static 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.                                                                 */
   4085 static 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.                                                                 */
   4091 static 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.                                                                 */
   4097 static 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.                                                 */
   4103 static 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.                                                        */
   4114 static 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.                                                        */
   4124 static 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.                                                        */
   4134 static 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.                                                        */
   4144 static 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.                                                        */
   4153 static 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.                                                        */
   4162 static 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.                                                                 */
   4171 static 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.                                                              */
   4180 static 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.                                                                 */
   4188 static 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.                                                              */
   4197 static 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.                                                                 */
   4205 static 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.                                                              */
   4214 static 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.                                         */
   4222 static 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.                                                                 */
   4228 static 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.                                                                 */
   4234 static 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.                                                        */
   4240 static 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.                                                                 */
   4249 static 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.                                                              */
   4258 static 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.                                                                 */
   4266 static 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.                                                              */
   4275 static 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.                                                                 */
   4283 static 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.                                                              */
   4292 static 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.                                                                 */
   4300 static 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.                                                              */
   4309 static 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.                                         */
   4317 static 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.                                                                 */
   4323 static 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.                                                        */
   4329 static 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.                                                        */
   4338 static 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.                                                              */
   4347 static 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.                                                        */
   4355 static 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.                                                              */
   4364 static 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.                                                        */
   4372 static 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.                                                              */
   4381 static 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.                                                        */
   4389 static 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.                                                              */
   4398 static 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.                                                        */
   4406 static 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.                                                              */
   4415 static 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.                                         */
   4423 static 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.                                                   */
   4429 static 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.                                                            */
   4438 static 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.  */
   4446 static 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.                                         */
   4454 static 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.                                                            */
   4460 static 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.                                                            */
   4466 static 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.                                                            */
   4472 static 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.                                                            */
   4478 static 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.                                                   */
   4484 static 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.                                                   */
   4494 static 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.                                                   */
   4503 static 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.                                                   */
   4512 static 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.                                                              */
   4521 static 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.                                                   */
   4529 static 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.                                                              */
   4538 static 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.                                         */
   4546 static 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.                                                            */
   4552 static 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.                                                            */
   4558 static 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.                                                            */
   4564 static 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.                                            */
   4570 static 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.                                                   */
   4581 static 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.                                                   */
   4591 static 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.                                                   */
   4601 static 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.                                                   */
   4611 static 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.                                                   */
   4620 static 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.                                                   */
   4629 static 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.                                                            */
   4638 static 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.  */
   4646 static 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.                                                            */
   4654 static 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.  */
   4662 static 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.                                                            */
   4670 static 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.  */
   4678 static 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.                                         */
   4686 static 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.                                                            */
   4692 static 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.                                                            */
   4698 static 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.                                                   */
   4704 static 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.                                                   */
   4713 static 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.                                                              */
   4722 static 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.                                                   */
   4730 static 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.                                                              */
   4739 static 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.                                                   */
   4747 static 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.                                                              */
   4756 static 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.                                                   */
   4764 static 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.                                                              */
   4773 static 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.                                         */
   4781 static 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.                                                            */
   4787 static 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.                                                   */
   4793 static 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.                                                   */
   4802 static 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.                                                              */
   4811 static 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.                                                   */
   4819 static 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.                                                              */
   4828 static 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.                                                   */
   4836 static 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.                                                              */
   4845 static 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.                                                   */
   4853 static 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.                                                              */
   4862 static 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.                                                   */
   4870 static 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.                                                              */
   4879 static 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.                                         */
   4887 static 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.                                               */
   4893 static 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.                                               */
   4902 static 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.                                                              */
   4911 static 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.                                         */
   4919 static 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.                                                     */
   4925 static 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.                                                     */
   4931 static 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.                                                     */
   4937 static 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.                                        */
   4943 static 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.                                        */
   4953 static 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.                                        */
   4962 static 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.                                               */
   4971 static 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.                                                              */
   4980 static 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.                                               */
   4988 static 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.                                                              */
   4997 static 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.                                         */
   5005 static 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.                                               */
   5011 static 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.                                               */
   5017 static 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.                                 */
   5023 static 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.                                        */
   5034 static 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.                                        */
   5044 static 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.                                        */
   5054 static 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.                                        */
   5064 static 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.                                        */
   5073 static 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.                                        */
   5082 static 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.                                               */
   5091 static 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.                                                              */
   5100 static 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.                                               */
   5108 static 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.                                                              */
   5117 static 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.                                               */
   5125 static 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.                                                              */
   5134 static 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.                                         */
   5142 static 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.                                               */
   5148 static 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.                                        */
   5154 static 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.                                               */
   5163 static 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.                                                              */
   5172 static 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.                                               */
   5180 static 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.                                                              */
   5189 static 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.                                               */
   5197 static 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.                                                              */
   5206 static 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.                                               */
   5214 static 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.                                                              */
   5223 static 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.                                         */
   5231 static 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.                                                        */
   5237 static 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.                                                                 */
   5246 static 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.                                                              */
   5255 static 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.                                         */
   5263 static 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.                                                                 */
   5269 static 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.                                                                 */
   5275 static 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.                                                                 */
   5281 static 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.                                                        */
   5287 static 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.                                                        */
   5297 static 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.                                                        */
   5306 static 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.                                                                 */
   5315 static 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.                                                              */
   5324 static 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.                                                                 */
   5332 static 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.                                                              */
   5341 static 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.                                         */
   5349 static 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.                                                                 */
   5355 static 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.                                                                 */
   5361 static 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.                                                 */
   5367 static 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.                                                        */
   5378 static 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.                                                        */
   5388 static 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.                                                        */
   5398 static 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.                                                        */
   5408 static 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.                                                        */
   5417 static 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.                                                        */
   5426 static 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.                                                                 */
   5435 static 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.                                                              */
   5444 static 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.                                                                 */
   5452 static 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.                                                              */
   5461 static 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.                                                                 */
   5469 static 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.                                                              */
   5478 static 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.                                         */
   5486 static 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.                                                                 */
   5492 static 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.                                                        */
   5498 static 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.                                                                 */
   5507 static 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.                                                              */
   5516 static 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.                                                                 */
   5524 static 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.                                                              */
   5533 static 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.                                                                 */
   5541 static 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.                                                              */
   5550 static 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.                                                                 */
   5558 static 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.                                                              */
   5567 static 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.                                         */
   5575 static 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.                                                   */
   5581 static 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.                                                            */
   5590 static 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.  */
   5598 static 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.                                         */
   5606 static 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.                                                            */
   5612 static 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.                                                            */
   5618 static 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.                                                            */
   5624 static 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.                                                   */
   5630 static 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.                                                   */
   5640 static 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.                                                   */
   5649 static 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.                                                   */
   5658 static 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.                                                              */
   5667 static 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.                                                   */
   5675 static 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.                                                              */
   5684 static 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.                                         */
   5692 static 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.                                                            */
   5698 static 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.                                                            */
   5704 static 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.                                            */
   5710 static 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.                                                   */
   5721 static 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.                                                   */
   5731 static 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.                                                   */
   5741 static 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.                                                   */
   5751 static 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.                                                   */
   5760 static 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.                                                   */
   5769 static 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.                                                            */
   5778 static 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.  */
   5786 static 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.                                                            */
   5794 static 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.  */
   5802 static 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.                                                            */
   5810 static 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.  */
   5818 static 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.                                         */
   5826 static 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.                                                            */
   5832 static 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.                                                   */
   5838 static 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.                                                   */
   5847 static 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.                                                              */
   5856 static 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.                                                   */
   5864 static 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.                                                              */
   5873 static 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.                                                   */
   5881 static 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.                                                              */
   5890 static 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.                                                   */
   5898 static 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.                                                              */
   5907 static 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.                                         */
   5915 static 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 
   5925 namespace simd {
   5926 /*! @abstract Concatenates `x` and `y` to form a vector of two 8-bit signed
   5927  *  (twos-complement) integers.                                               */
   5928 static 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.                                  */
   5934 template <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.                                                              */
   5941 template <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.                                        */
   5947 static 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.                                        */
   5953 static 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.                                        */
   5959 static 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.                                  */
   5965 template <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.                                                              */
   5972 template <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.                                  */
   5978 static 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.                                        */
   5984 static 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.                                        */
   5990 static 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.                                        */
   5996 static 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.                                        */
   6002 static 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.                                        */
   6008 static 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.                                        */
   6014 static 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.                                  */
   6020 template <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.                                                              */
   6027 template <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.                                        */
   6033 static 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.                                  */
   6039 template <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.                                                              */
   6046 template <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.                                        */
   6052 static 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.                                  */
   6058 template <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.                                                    */
   6065 template <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.                                  */
   6071 static 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.                              */
   6077 template <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.                                                    */
   6084 template <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.                                  */
   6090 static 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.                             */
   6096 template <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.                                                    */
   6103 template <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.                                                        */
   6109 static 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.                                                  */
   6115 template <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.                                                              */
   6122 template <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.                                                        */
   6128 static 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.                                                        */
   6134 static 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.                                                        */
   6140 static 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.                                                  */
   6146 template <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.                                                              */
   6153 template <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.                                                  */
   6159 static 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.                                                        */
   6165 static 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.                                                        */
   6171 static 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.                                                        */
   6177 static 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.                                                        */
   6183 static 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.                                                        */
   6189 static 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.                                                        */
   6195 static 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.                                                  */
   6201 template <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.                                                              */
   6208 template <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.                                                        */
   6214 static 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.                                                  */
   6220 template <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.                                                              */
   6227 template <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.                                                        */
   6233 static 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.                                                  */
   6239 template <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.                                                              */
   6246 template <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.                                                  */
   6252 static 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.                                              */
   6258 template <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.                                                              */
   6265 template <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.                                                  */
   6271 static 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.                                             */
   6277 template <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.                                                              */
   6284 template <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.                                               */
   6290 static 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.                                 */
   6296 template <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.                                                              */
   6303 template <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.                                        */
   6309 static 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.                                        */
   6315 static 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.                                        */
   6321 static 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.                                 */
   6327 template <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.                                                              */
   6334 template <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.                                 */
   6340 static 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.                                        */
   6346 static 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.                                        */
   6352 static 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.                                        */
   6358 static 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.                                        */
   6364 static 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.                                        */
   6370 static 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.                                        */
   6376 static 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.                                 */
   6382 template <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.                                                              */
   6389 template <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.                                        */
   6395 static 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.                                 */
   6401 template <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.                                                              */
   6408 template <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.                                        */
   6414 static 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.                                 */
   6420 template <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.                                                    */
   6427 template <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.                                 */
   6433 static 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.                             */
   6439 template <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.                                                    */
   6446 template <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.                                                        */
   6452 static 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.                                                 */
   6458 template <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.                                                              */
   6465 template <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.                                                        */
   6471 static 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.                                                        */
   6477 static 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.                                                        */
   6483 static 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.                                                 */
   6489 template <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.                                                              */
   6496 template <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.                                                 */
   6502 static 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.                                                        */
   6508 static 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.                                                        */
   6514 static 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.                                                        */
   6520 static 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.                                                        */
   6526 static 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.                                                        */
   6532 static 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.                                                        */
   6538 static 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.                                                 */
   6544 template <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.                                                              */
   6551 template <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.                                                        */
   6557 static 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.                                                 */
   6563 template <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.                                                              */
   6570 template <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.                                                        */
   6576 static 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.                                                 */
   6582 template <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.                                                              */
   6589 template <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.                                                 */
   6595 static 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.                                             */
   6601 template <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.                                                              */
   6608 template <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.                                                   */
   6614 static 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.                                            */
   6620 template <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.  */
   6626 template <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.                                                   */
   6632 static 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.                                                   */
   6638 static 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.                                                   */
   6644 static 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.                                            */
   6650 template <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.                                                              */
   6657 template <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.                                            */
   6663 static 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.                                                   */
   6669 static 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.                                                   */
   6675 static 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.                                                   */
   6681 static 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.                                                   */
   6687 static 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.                                                   */
   6693 static 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.                                                   */
   6699 static 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.                                            */
   6705 template <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.  */
   6711 template <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.                                                   */
   6717 static 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.                                            */
   6723 template <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.                                                              */
   6730 template <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.                                                   */
   6736 static 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.                                            */
   6742 template <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.                                                              */
   6749 template <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.                                            */
   6755 static 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.                                        */
   6761 template <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.                                                          */
   6768 template <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.                                               */
   6774 static 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.                                 */
   6780 template <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.                                                              */
   6787 template <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.                                        */
   6793 static 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.                                        */
   6799 static 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.                                        */
   6805 static 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.                                 */
   6811 template <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.                                                              */
   6818 template <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.                                 */
   6824 static 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.                                        */
   6830 static 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.                                        */
   6836 static 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.                                        */
   6842 static 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.                                        */
   6848 static 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.                                        */
   6854 static 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.                                        */
   6860 static 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.                                 */
   6866 template <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.                                                              */
   6873 template <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.                                        */
   6879 static 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.                                 */
   6885 template <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.                                                              */
   6892 template <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.                                        */
   6898 static 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.                                 */
   6904 template <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.                                                    */
   6911 template <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.                                                        */
   6917 static 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.                                                 */
   6923 template <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.                                                              */
   6930 template <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.                                                        */
   6936 static 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.                                                        */
   6942 static 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.                                                        */
   6948 static 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.                                                 */
   6954 template <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.                                                              */
   6961 template <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.                                                 */
   6967 static 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.                                                        */
   6973 static 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.                                                        */
   6979 static 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.                                                        */
   6985 static 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.                                                        */
   6991 static 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.                                                        */
   6997 static 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.                                                        */
   7003 static 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.                                                 */
   7009 template <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.                                                              */
   7016 template <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.                                                        */
   7022 static 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.                                                 */
   7028 template <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.                                                              */
   7035 template <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.                                                        */
   7041 static 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.                                                 */
   7047 template <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.                                                              */
   7054 template <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.                                                   */
   7060 static 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.                                            */
   7066 template <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.  */
   7072 template <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.                                                   */
   7078 static 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.                                                   */
   7084 static 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.                                                   */
   7090 static 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.                                            */
   7096 template <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.                                                              */
   7103 template <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.                                            */
   7109 static 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.                                                   */
   7115 static 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.                                                   */
   7121 static 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.                                                   */
   7127 static 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.                                                   */
   7133 static 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.                                                   */
   7139 static 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.                                                   */
   7145 static 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.                                            */
   7151 template <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.  */
   7157 template <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.                                                   */
   7163 static 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.                                            */
   7169 template <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.                                                              */
   7176 template <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.                                                   */
   7182 static 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.                                            */
   7188 template <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.                                                              */
   7195 template <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.                                               */
   7201 static 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.                                 */
   7207 template <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.                                                              */
   7214 template <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.                                        */
   7220 static 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.                                        */
   7226 static 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.                                        */
   7232 static 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.                                 */
   7238 template <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.                                                              */
   7245 template <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.                                 */
   7251 static 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.                                        */
   7257 static 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.                                        */
   7263 static 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.                                        */
   7269 static 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.                                        */
   7275 static 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.                                        */
   7281 static 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.                                        */
   7287 static 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.                                 */
   7293 template <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.                                                              */
   7300 template <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.                                        */
   7306 static 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.                                 */
   7312 template <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.                                                              */
   7319 template <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.                                                        */
   7325 static 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.                                                 */
   7331 template <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.                                                              */
   7338 template <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.                                                        */
   7344 static 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.                                                        */
   7350 static 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.                                                        */
   7356 static 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.                                                 */
   7362 template <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.                                                              */
   7369 template <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.                                                 */
   7375 static 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.                                                        */
   7381 static 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.                                                        */
   7387 static 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.                                                        */
   7393 static 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.                                                        */
   7399 static 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.                                                        */
   7405 static 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.                                                        */
   7411 static 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.                                                 */
   7417 template <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.                                                              */
   7424 template <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.                                                        */
   7430 static 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.                                                 */
   7436 template <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.                                                              */
   7443 template <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.                                                   */
   7449 static 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.                                            */
   7455 template <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.  */
   7461 template <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.                                                   */
   7467 static 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.                                                   */
   7473 static 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.                                                   */
   7479 static 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.                                            */
   7485 template <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.                                                              */
   7492 template <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.                                            */
   7498 static 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.                                                   */
   7504 static 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.                                                   */
   7510 static 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.                                                   */
   7516 static 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.                                                   */
   7522 static 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.                                                   */
   7528 static 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.                                                   */
   7534 static 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.                                            */
   7540 template <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.  */
   7546 template <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.                                                   */
   7552 static 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.                                            */
   7558 template <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.                                                              */
   7565 template <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                    */
   7577 template <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.                     */
   7585 template <typename ScalarType, size_t count>
   7586 using Vector_t = typename Vector<ScalarType, count>::type;
   7587 
   7588 /*! @abstract Look up the equivalent Vector struct according to the simd
   7589  *  type.                                                                     */
   7590 template <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.                      */
   7598 template<typename typeN>
   7599 using traits = typename get_traits<typeN>::type;
   7600 
   7601 template<> 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 
   7608 template <> struct get_traits<char1>
   7609 {
   7610     using type = Vector<char1, 1>;
   7611 };
   7612 
   7613 template<> 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 
   7621 template <> struct get_traits<char2>
   7622 {
   7623     using type = Vector<char1, 2>;
   7624 };
   7625 
   7626 template<> 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 
   7633 template <> struct get_traits<char3>
   7634 {
   7635     using type = Vector<char1, 3>;
   7636 };
   7637 
   7638 template<> 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 
   7646 template <> struct get_traits<char4>
   7647 {
   7648     using type = Vector<char1, 4>;
   7649 };
   7650 
   7651 template<> 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 
   7659 template <> struct get_traits<char8>
   7660 {
   7661     using type = Vector<char1, 8>;
   7662 };
   7663 
   7664 template<> 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 
   7672 template <> struct get_traits<char16>
   7673 {
   7674     using type = Vector<char1, 16>;
   7675 };
   7676 
   7677 template<> 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 
   7685 template <> struct get_traits<char32>
   7686 {
   7687     using type = Vector<char1, 32>;
   7688 };
   7689 
   7690 template<> 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 
   7698 template <> struct get_traits<char64>
   7699 {
   7700     using type = Vector<char1, 64>;
   7701 };
   7702 
   7703 template<> 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 
   7710 template <> struct get_traits<uchar1>
   7711 {
   7712     using type = Vector<uchar1, 1>;
   7713 };
   7714 
   7715 template<> 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 
   7723 template <> struct get_traits<uchar2>
   7724 {
   7725     using type = Vector<uchar1, 2>;
   7726 };
   7727 
   7728 template<> 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 
   7735 template <> struct get_traits<uchar3>
   7736 {
   7737     using type = Vector<uchar1, 3>;
   7738 };
   7739 
   7740 template<> 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 
   7748 template <> struct get_traits<uchar4>
   7749 {
   7750     using type = Vector<uchar1, 4>;
   7751 };
   7752 
   7753 template<> 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 
   7761 template <> struct get_traits<uchar8>
   7762 {
   7763     using type = Vector<uchar1, 8>;
   7764 };
   7765 
   7766 template<> 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 
   7774 template <> struct get_traits<uchar16>
   7775 {
   7776     using type = Vector<uchar1, 16>;
   7777 };
   7778 
   7779 template<> 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 
   7787 template <> struct get_traits<uchar32>
   7788 {
   7789     using type = Vector<uchar1, 32>;
   7790 };
   7791 
   7792 template<> 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 
   7800 template <> struct get_traits<uchar64>
   7801 {
   7802     using type = Vector<uchar1, 64>;
   7803 };
   7804 
   7805 template<> 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 
   7812 template <> struct get_traits<short1>
   7813 {
   7814     using type = Vector<short1, 1>;
   7815 };
   7816 
   7817 template<> 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 
   7825 template <> struct get_traits<short2>
   7826 {
   7827     using type = Vector<short1, 2>;
   7828 };
   7829 
   7830 template<> 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 
   7837 template <> struct get_traits<short3>
   7838 {
   7839     using type = Vector<short1, 3>;
   7840 };
   7841 
   7842 template<> 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 
   7850 template <> struct get_traits<short4>
   7851 {
   7852     using type = Vector<short1, 4>;
   7853 };
   7854 
   7855 template<> 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 
   7863 template <> struct get_traits<short8>
   7864 {
   7865     using type = Vector<short1, 8>;
   7866 };
   7867 
   7868 template<> 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 
   7876 template <> struct get_traits<short16>
   7877 {
   7878     using type = Vector<short1, 16>;
   7879 };
   7880 
   7881 template<> 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 
   7889 template <> struct get_traits<short32>
   7890 {
   7891     using type = Vector<short1, 32>;
   7892 };
   7893 
   7894 template<> 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 
   7901 template <> struct get_traits<ushort1>
   7902 {
   7903     using type = Vector<ushort1, 1>;
   7904 };
   7905 
   7906 template<> 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 
   7914 template <> struct get_traits<ushort2>
   7915 {
   7916     using type = Vector<ushort1, 2>;
   7917 };
   7918 
   7919 template<> 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 
   7926 template <> struct get_traits<ushort3>
   7927 {
   7928     using type = Vector<ushort1, 3>;
   7929 };
   7930 
   7931 template<> 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 
   7939 template <> struct get_traits<ushort4>
   7940 {
   7941     using type = Vector<ushort1, 4>;
   7942 };
   7943 
   7944 template<> 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 
   7952 template <> struct get_traits<ushort8>
   7953 {
   7954     using type = Vector<ushort1, 8>;
   7955 };
   7956 
   7957 template<> 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 
   7965 template <> struct get_traits<ushort16>
   7966 {
   7967     using type = Vector<ushort1, 16>;
   7968 };
   7969 
   7970 template<> 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 
   7978 template <> struct get_traits<ushort32>
   7979 {
   7980     using type = Vector<ushort1, 32>;
   7981 };
   7982 
   7983 template<> 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 
   7990 template <> struct get_traits<half1>
   7991 {
   7992     using type = Vector<half1, 1>;
   7993 };
   7994 
   7995 template<> 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 
   8003 template <> struct get_traits<half2>
   8004 {
   8005     using type = Vector<half1, 2>;
   8006 };
   8007 
   8008 template<> 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 
   8015 template <> struct get_traits<half3>
   8016 {
   8017     using type = Vector<half1, 3>;
   8018 };
   8019 
   8020 template<> 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 
   8028 template <> struct get_traits<half4>
   8029 {
   8030     using type = Vector<half1, 4>;
   8031 };
   8032 
   8033 template<> 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 
   8041 template <> struct get_traits<half8>
   8042 {
   8043     using type = Vector<half1, 8>;
   8044 };
   8045 
   8046 template<> 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 
   8054 template <> struct get_traits<half16>
   8055 {
   8056     using type = Vector<half1, 16>;
   8057 };
   8058 
   8059 template<> 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 
   8067 template <> struct get_traits<half32>
   8068 {
   8069     using type = Vector<half1, 32>;
   8070 };
   8071 
   8072 template<> 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 
   8079 template <> struct get_traits<int1>
   8080 {
   8081     using type = Vector<int1, 1>;
   8082 };
   8083 
   8084 template<> 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 
   8092 template <> struct get_traits<int2>
   8093 {
   8094     using type = Vector<int1, 2>;
   8095 };
   8096 
   8097 template<> 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 
   8104 template <> struct get_traits<int3>
   8105 {
   8106     using type = Vector<int1, 3>;
   8107 };
   8108 
   8109 template<> 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 
   8117 template <> struct get_traits<int4>
   8118 {
   8119     using type = Vector<int1, 4>;
   8120 };
   8121 
   8122 template<> 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 
   8130 template <> struct get_traits<int8>
   8131 {
   8132     using type = Vector<int1, 8>;
   8133 };
   8134 
   8135 template<> 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 
   8143 template <> struct get_traits<int16>
   8144 {
   8145     using type = Vector<int1, 16>;
   8146 };
   8147 
   8148 template<> 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 
   8155 template <> struct get_traits<uint1>
   8156 {
   8157     using type = Vector<uint1, 1>;
   8158 };
   8159 
   8160 template<> 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 
   8168 template <> struct get_traits<uint2>
   8169 {
   8170     using type = Vector<uint1, 2>;
   8171 };
   8172 
   8173 template<> 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 
   8180 template <> struct get_traits<uint3>
   8181 {
   8182     using type = Vector<uint1, 3>;
   8183 };
   8184 
   8185 template<> 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 
   8193 template <> struct get_traits<uint4>
   8194 {
   8195     using type = Vector<uint1, 4>;
   8196 };
   8197 
   8198 template<> 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 
   8206 template <> struct get_traits<uint8>
   8207 {
   8208     using type = Vector<uint1, 8>;
   8209 };
   8210 
   8211 template<> 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 
   8219 template <> struct get_traits<uint16>
   8220 {
   8221     using type = Vector<uint1, 16>;
   8222 };
   8223 
   8224 template<> 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 
   8231 template <> struct get_traits<float1>
   8232 {
   8233     using type = Vector<float1, 1>;
   8234 };
   8235 
   8236 template<> 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 
   8244 template <> struct get_traits<float2>
   8245 {
   8246     using type = Vector<float1, 2>;
   8247 };
   8248 
   8249 template<> 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 
   8256 template <> struct get_traits<float3>
   8257 {
   8258     using type = Vector<float1, 3>;
   8259 };
   8260 
   8261 template<> 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 
   8269 template <> struct get_traits<float4>
   8270 {
   8271     using type = Vector<float1, 4>;
   8272 };
   8273 
   8274 template<> 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 
   8282 template <> struct get_traits<float8>
   8283 {
   8284     using type = Vector<float1, 8>;
   8285 };
   8286 
   8287 template<> 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 
   8295 template <> struct get_traits<float16>
   8296 {
   8297     using type = Vector<float1, 16>;
   8298 };
   8299 
   8300 template<> 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 
   8307 template <> struct get_traits<long1>
   8308 {
   8309     using type = Vector<long1, 1>;
   8310 };
   8311 
   8312 template<> 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 
   8320 template <> struct get_traits<long2>
   8321 {
   8322     using type = Vector<long1, 2>;
   8323 };
   8324 
   8325 template<> 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 
   8332 template <> struct get_traits<long3>
   8333 {
   8334     using type = Vector<long1, 3>;
   8335 };
   8336 
   8337 template<> 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 
   8345 template <> struct get_traits<long4>
   8346 {
   8347     using type = Vector<long1, 4>;
   8348 };
   8349 
   8350 template<> 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 
   8358 template <> struct get_traits<long8>
   8359 {
   8360     using type = Vector<long1, 8>;
   8361 };
   8362 
   8363 template<> 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 
   8370 template <> struct get_traits<ulong1>
   8371 {
   8372     using type = Vector<ulong1, 1>;
   8373 };
   8374 
   8375 template<> 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 
   8383 template <> struct get_traits<ulong2>
   8384 {
   8385     using type = Vector<ulong1, 2>;
   8386 };
   8387 
   8388 template<> 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 
   8395 template <> struct get_traits<ulong3>
   8396 {
   8397     using type = Vector<ulong1, 3>;
   8398 };
   8399 
   8400 template<> 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 
   8408 template <> struct get_traits<ulong4>
   8409 {
   8410     using type = Vector<ulong1, 4>;
   8411 };
   8412 
   8413 template<> 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 
   8421 template <> struct get_traits<ulong8>
   8422 {
   8423     using type = Vector<ulong1, 8>;
   8424 };
   8425 
   8426 template<> 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 
   8433 template <> struct get_traits<double1>
   8434 {
   8435     using type = Vector<double1, 1>;
   8436 };
   8437 
   8438 template<> 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 
   8446 template <> struct get_traits<double2>
   8447 {
   8448     using type = Vector<double1, 2>;
   8449 };
   8450 
   8451 template<> 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 
   8458 template <> struct get_traits<double3>
   8459 {
   8460     using type = Vector<double1, 3>;
   8461 };
   8462 
   8463 template<> 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 
   8471 template <> struct get_traits<double4>
   8472 {
   8473     using type = Vector<double1, 4>;
   8474 };
   8475 
   8476 template<> 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 
   8484 template <> 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.                                                                     */
   8492 template<typename typeN, typename... Args>
   8493 static 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.                                                            */
   8625 template<typename typeN, typename... Args>
   8626 static 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 */