/*! @header * This header defines functions for constructing, extending, and truncating * simd vector types. * * For each vector type `simd_typeN` supported by , the following * constructors are provided: * * ~~~ * simd_typeN simd_make_typeN(type other); * simd_typeN simd_make_typeN(simd_typeM other); * ~~~ * For the scalar-input version, or if M < N, these functions zero-extend * `other` to produce a wider vector. If M == N, `other` is passed through * unmodified. If `M > N`, `other` is truncated to form the result. * * ~~~ * simd_typeN simd_make_typeN_undef(type other); * simd_typeN simd_make_typeN_undef(simd_typeM other); * ~~~ * These functions are only available for M < N and for scalar inputs. They * extend `other` to produce a wider vector where the contents of the newly- * formed lanes are undefined. * * In addition, if N is 2, 3, or 4, the following constructors are available: * ~~~ * simd_make_typeN(parts ...) * ~~~ * where parts is a list of scalars and smaller vectors such that the sum of * the number of lanes in the arguments is equal to N. For example, a * `simd_float3` can be constructed from three `floats`, or a `float` and a * `simd_float2` in any order: * ~~~ * simd_float2 ab = { 1, 2 }; * simd_float3 vector = simd_make_float3(ab, 3); * ~~~ * * In C++ the above functions are templated in the simd:: namespace. * * C++ Function Equivalent C Function * ------------------------------------------------------------------- * simd::make(x ...) simd_make_typeN(x ...) * simd::make_undef(x ...) simd_make_typeN_undef(x ...) * * * In addition, templated Vector struct is available for * templated code based on the scalar type. * * template struct simd::Vector { * // static const size_t count * // typedef scalar_t * // typedef type * // typedef packed_t * }; * * Lookup the equivalent Vector struct according to typeN: * template struct simd::get_traits * { * // using type = Vector; * }; * * This is commonly used to get the type traits of typeN, so a helper type, * namely traits, is available to query the type traits easily. * simd::traits::count * simd::traits::scalar_t * * @copyright 2014-2016 Apple, Inc. All rights reserved. * @unsorted */ #ifndef SIMD_VECTOR_CONSTRUCTORS #define SIMD_VECTOR_CONSTRUCTORS #include #if SIMD_COMPILER_HAS_REQUIRED_FEATURES #ifdef __cplusplus extern "C" { #endif /*! @abstract Concatenates `x` and `y` to form a vector of two 8-bit signed * (twos-complement) integers. */ static inline SIMD_CFUNC simd_char2 simd_make_char2(char x, char y) { simd_char2 result; result.x = x; result.y = y; return result; } /*! @abstract Zero-extends `other` to form a vector of two 8-bit signed * (twos-complement) integers. */ static inline SIMD_CFUNC simd_char2 simd_make_char2(char other) { simd_char2 result = 0; result.x = other; return result; } /*! @abstract Extends `other` to form a vector of two 8-bit signed (twos- * complement) integers. The contents of the newly-created vector lanes are * unspecified. */ static inline SIMD_CFUNC simd_char2 simd_make_char2_undef(char other) { simd_char2 result; result.x = other; return result; } /*! @abstract Returns `other` unmodified. This function is a convenience for * templated and autogenerated code. */ static inline SIMD_CFUNC simd_char2 simd_make_char2(simd_char2 other) { return other; } /*! @abstract Truncates `other` to form a vector of two 8-bit signed (twos- * complement) integers. */ static inline SIMD_CFUNC simd_char2 simd_make_char2(simd_char3 other) { return other.xy; } /*! @abstract Truncates `other` to form a vector of two 8-bit signed (twos- * complement) integers. */ static inline SIMD_CFUNC simd_char2 simd_make_char2(simd_char4 other) { return other.xy; } /*! @abstract Truncates `other` to form a vector of two 8-bit signed (twos- * complement) integers. */ static inline SIMD_CFUNC simd_char2 simd_make_char2(simd_char8 other) { return other.xy; } /*! @abstract Truncates `other` to form a vector of two 8-bit signed (twos- * complement) integers. */ static inline SIMD_CFUNC simd_char2 simd_make_char2(simd_char16 other) { return other.xy; } /*! @abstract Truncates `other` to form a vector of two 8-bit signed (twos- * complement) integers. */ static inline SIMD_CFUNC simd_char2 simd_make_char2(simd_char32 other) { return other.xy; } /*! @abstract Truncates `other` to form a vector of two 8-bit signed (twos- * complement) integers. */ static inline SIMD_CFUNC simd_char2 simd_make_char2(simd_char64 other) { return other.xy; } /*! @abstract Concatenates `x`, `y` and `z` to form a vector of three 8-bit * signed (twos-complement) integers. */ static inline SIMD_CFUNC simd_char3 simd_make_char3(char x, char y, char z) { simd_char3 result; result.x = x; result.y = y; result.z = z; return result; } /*! @abstract Concatenates `x` and `yz` to form a vector of three 8-bit * signed (twos-complement) integers. */ static inline SIMD_CFUNC simd_char3 simd_make_char3(char x, simd_char2 yz) { simd_char3 result; result.x = x; result.yz = yz; return result; } /*! @abstract Concatenates `xy` and `z` to form a vector of three 8-bit * signed (twos-complement) integers. */ static inline SIMD_CFUNC simd_char3 simd_make_char3(simd_char2 xy, char z) { simd_char3 result; result.xy = xy; result.z = z; return result; } /*! @abstract Zero-extends `other` to form a vector of three 8-bit signed * (twos-complement) integers. */ static inline SIMD_CFUNC simd_char3 simd_make_char3(char other) { simd_char3 result = 0; result.x = other; return result; } /*! @abstract Extends `other` to form a vector of three 8-bit signed (twos- * complement) integers. The contents of the newly-created vector lanes are * unspecified. */ static inline SIMD_CFUNC simd_char3 simd_make_char3_undef(char other) { simd_char3 result; result.x = other; return result; } /*! @abstract Zero-extends `other` to form a vector of three 8-bit signed * (twos-complement) integers. */ static inline SIMD_CFUNC simd_char3 simd_make_char3(simd_char2 other) { simd_char3 result = 0; result.xy = other; return result; } /*! @abstract Extends `other` to form a vector of three 8-bit signed (twos- * complement) integers. The contents of the newly-created vector lanes are * unspecified. */ static inline SIMD_CFUNC simd_char3 simd_make_char3_undef(simd_char2 other) { simd_char3 result; result.xy = other; return result; } /*! @abstract Returns `other` unmodified. This function is a convenience for * templated and autogenerated code. */ static inline SIMD_CFUNC simd_char3 simd_make_char3(simd_char3 other) { return other; } /*! @abstract Truncates `other` to form a vector of three 8-bit signed * (twos-complement) integers. */ static inline SIMD_CFUNC simd_char3 simd_make_char3(simd_char4 other) { return other.xyz; } /*! @abstract Truncates `other` to form a vector of three 8-bit signed * (twos-complement) integers. */ static inline SIMD_CFUNC simd_char3 simd_make_char3(simd_char8 other) { return other.xyz; } /*! @abstract Truncates `other` to form a vector of three 8-bit signed * (twos-complement) integers. */ static inline SIMD_CFUNC simd_char3 simd_make_char3(simd_char16 other) { return other.xyz; } /*! @abstract Truncates `other` to form a vector of three 8-bit signed * (twos-complement) integers. */ static inline SIMD_CFUNC simd_char3 simd_make_char3(simd_char32 other) { return other.xyz; } /*! @abstract Truncates `other` to form a vector of three 8-bit signed * (twos-complement) integers. */ static inline SIMD_CFUNC simd_char3 simd_make_char3(simd_char64 other) { return other.xyz; } /*! @abstract Concatenates `x`, `y`, `z` and `w` to form a vector of four * 8-bit signed (twos-complement) integers. */ static inline SIMD_CFUNC simd_char4 simd_make_char4(char x, char y, char z, char w) { simd_char4 result; result.x = x; result.y = y; result.z = z; result.w = w; return result; } /*! @abstract Concatenates `x`, `y` and `zw` to form a vector of four 8-bit * signed (twos-complement) integers. */ static inline SIMD_CFUNC simd_char4 simd_make_char4(char x, char y, simd_char2 zw) { simd_char4 result; result.x = x; result.y = y; result.zw = zw; return result; } /*! @abstract Concatenates `x`, `yz` and `w` to form a vector of four 8-bit * signed (twos-complement) integers. */ static inline SIMD_CFUNC simd_char4 simd_make_char4(char x, simd_char2 yz, char w) { simd_char4 result; result.x = x; result.yz = yz; result.w = w; return result; } /*! @abstract Concatenates `xy`, `z` and `w` to form a vector of four 8-bit * signed (twos-complement) integers. */ static inline SIMD_CFUNC simd_char4 simd_make_char4(simd_char2 xy, char z, char w) { simd_char4 result; result.xy = xy; result.z = z; result.w = w; return result; } /*! @abstract Concatenates `x` and `yzw` to form a vector of four 8-bit * signed (twos-complement) integers. */ static inline SIMD_CFUNC simd_char4 simd_make_char4(char x, simd_char3 yzw) { simd_char4 result; result.x = x; result.yzw = yzw; return result; } /*! @abstract Concatenates `xy` and `zw` to form a vector of four 8-bit * signed (twos-complement) integers. */ static inline SIMD_CFUNC simd_char4 simd_make_char4(simd_char2 xy, simd_char2 zw) { simd_char4 result; result.xy = xy; result.zw = zw; return result; } /*! @abstract Concatenates `xyz` and `w` to form a vector of four 8-bit * signed (twos-complement) integers. */ static inline SIMD_CFUNC simd_char4 simd_make_char4(simd_char3 xyz, char w) { simd_char4 result; result.xyz = xyz; result.w = w; return result; } /*! @abstract Zero-extends `other` to form a vector of four 8-bit signed * (twos-complement) integers. */ static inline SIMD_CFUNC simd_char4 simd_make_char4(char other) { simd_char4 result = 0; result.x = other; return result; } /*! @abstract Extends `other` to form a vector of four 8-bit signed (twos- * complement) integers. The contents of the newly-created vector lanes are * unspecified. */ static inline SIMD_CFUNC simd_char4 simd_make_char4_undef(char other) { simd_char4 result; result.x = other; return result; } /*! @abstract Zero-extends `other` to form a vector of four 8-bit signed * (twos-complement) integers. */ static inline SIMD_CFUNC simd_char4 simd_make_char4(simd_char2 other) { simd_char4 result = 0; result.xy = other; return result; } /*! @abstract Extends `other` to form a vector of four 8-bit signed (twos- * complement) integers. The contents of the newly-created vector lanes are * unspecified. */ static inline SIMD_CFUNC simd_char4 simd_make_char4_undef(simd_char2 other) { simd_char4 result; result.xy = other; return result; } /*! @abstract Zero-extends `other` to form a vector of four 8-bit signed * (twos-complement) integers. */ static inline SIMD_CFUNC simd_char4 simd_make_char4(simd_char3 other) { simd_char4 result = 0; result.xyz = other; return result; } /*! @abstract Extends `other` to form a vector of four 8-bit signed (twos- * complement) integers. The contents of the newly-created vector lanes are * unspecified. */ static inline SIMD_CFUNC simd_char4 simd_make_char4_undef(simd_char3 other) { simd_char4 result; result.xyz = other; return result; } /*! @abstract Returns `other` unmodified. This function is a convenience for * templated and autogenerated code. */ static inline SIMD_CFUNC simd_char4 simd_make_char4(simd_char4 other) { return other; } /*! @abstract Truncates `other` to form a vector of four 8-bit signed (twos- * complement) integers. */ static inline SIMD_CFUNC simd_char4 simd_make_char4(simd_char8 other) { return other.xyzw; } /*! @abstract Truncates `other` to form a vector of four 8-bit signed (twos- * complement) integers. */ static inline SIMD_CFUNC simd_char4 simd_make_char4(simd_char16 other) { return other.xyzw; } /*! @abstract Truncates `other` to form a vector of four 8-bit signed (twos- * complement) integers. */ static inline SIMD_CFUNC simd_char4 simd_make_char4(simd_char32 other) { return other.xyzw; } /*! @abstract Truncates `other` to form a vector of four 8-bit signed (twos- * complement) integers. */ static inline SIMD_CFUNC simd_char4 simd_make_char4(simd_char64 other) { return other.xyzw; } /*! @abstract Concatenates `lo` and `hi` to form a vector of eight 8-bit * signed (twos-complement) integers. */ static inline SIMD_CFUNC simd_char8 simd_make_char8(simd_char4 lo, simd_char4 hi) { simd_char8 result; result.lo = lo; result.hi = hi; return result; } /*! @abstract Zero-extends `other` to form a vector of eight 8-bit signed * (twos-complement) integers. */ static inline SIMD_CFUNC simd_char8 simd_make_char8(char other) { simd_char8 result = 0; result.x = other; return result; } /*! @abstract Extends `other` to form a vector of eight 8-bit signed (twos- * complement) integers. The contents of the newly-created vector lanes are * unspecified. */ static inline SIMD_CFUNC simd_char8 simd_make_char8_undef(char other) { simd_char8 result; result.x = other; return result; } /*! @abstract Zero-extends `other` to form a vector of eight 8-bit signed * (twos-complement) integers. */ static inline SIMD_CFUNC simd_char8 simd_make_char8(simd_char2 other) { simd_char8 result = 0; result.xy = other; return result; } /*! @abstract Extends `other` to form a vector of eight 8-bit signed (twos- * complement) integers. The contents of the newly-created vector lanes are * unspecified. */ static inline SIMD_CFUNC simd_char8 simd_make_char8_undef(simd_char2 other) { simd_char8 result; result.xy = other; return result; } /*! @abstract Zero-extends `other` to form a vector of eight 8-bit signed * (twos-complement) integers. */ static inline SIMD_CFUNC simd_char8 simd_make_char8(simd_char3 other) { simd_char8 result = 0; result.xyz = other; return result; } /*! @abstract Extends `other` to form a vector of eight 8-bit signed (twos- * complement) integers. The contents of the newly-created vector lanes are * unspecified. */ static inline SIMD_CFUNC simd_char8 simd_make_char8_undef(simd_char3 other) { simd_char8 result; result.xyz = other; return result; } /*! @abstract Zero-extends `other` to form a vector of eight 8-bit signed * (twos-complement) integers. */ static inline SIMD_CFUNC simd_char8 simd_make_char8(simd_char4 other) { simd_char8 result = 0; result.xyzw = other; return result; } /*! @abstract Extends `other` to form a vector of eight 8-bit signed (twos- * complement) integers. The contents of the newly-created vector lanes are * unspecified. */ static inline SIMD_CFUNC simd_char8 simd_make_char8_undef(simd_char4 other) { simd_char8 result; result.xyzw = other; return result; } /*! @abstract Returns `other` unmodified. This function is a convenience for * templated and autogenerated code. */ static inline SIMD_CFUNC simd_char8 simd_make_char8(simd_char8 other) { return other; } /*! @abstract Truncates `other` to form a vector of eight 8-bit signed * (twos-complement) integers. */ static inline SIMD_CFUNC simd_char8 simd_make_char8(simd_char16 other) { return simd_make_char8(other.lo); } /*! @abstract Truncates `other` to form a vector of eight 8-bit signed * (twos-complement) integers. */ static inline SIMD_CFUNC simd_char8 simd_make_char8(simd_char32 other) { return simd_make_char8(other.lo); } /*! @abstract Truncates `other` to form a vector of eight 8-bit signed * (twos-complement) integers. */ static inline SIMD_CFUNC simd_char8 simd_make_char8(simd_char64 other) { return simd_make_char8(other.lo); } /*! @abstract Concatenates `lo` and `hi` to form a vector of sixteen 8-bit * signed (twos-complement) integers. */ static inline SIMD_CFUNC simd_char16 simd_make_char16(simd_char8 lo, simd_char8 hi) { simd_char16 result; result.lo = lo; result.hi = hi; return result; } /*! @abstract Zero-extends `other` to form a vector of sixteen 8-bit signed * (twos-complement) integers. */ static inline SIMD_CFUNC simd_char16 simd_make_char16(char other) { simd_char16 result = 0; result.x = other; return result; } /*! @abstract Extends `other` to form a vector of sixteen 8-bit signed * (twos-complement) integers. The contents of the newly-created vector * lanes are unspecified. */ static inline SIMD_CFUNC simd_char16 simd_make_char16_undef(char other) { simd_char16 result; result.x = other; return result; } /*! @abstract Zero-extends `other` to form a vector of sixteen 8-bit signed * (twos-complement) integers. */ static inline SIMD_CFUNC simd_char16 simd_make_char16(simd_char2 other) { simd_char16 result = 0; result.xy = other; return result; } /*! @abstract Extends `other` to form a vector of sixteen 8-bit signed * (twos-complement) integers. The contents of the newly-created vector * lanes are unspecified. */ static inline SIMD_CFUNC simd_char16 simd_make_char16_undef(simd_char2 other) { simd_char16 result; result.xy = other; return result; } /*! @abstract Zero-extends `other` to form a vector of sixteen 8-bit signed * (twos-complement) integers. */ static inline SIMD_CFUNC simd_char16 simd_make_char16(simd_char3 other) { simd_char16 result = 0; result.xyz = other; return result; } /*! @abstract Extends `other` to form a vector of sixteen 8-bit signed * (twos-complement) integers. The contents of the newly-created vector * lanes are unspecified. */ static inline SIMD_CFUNC simd_char16 simd_make_char16_undef(simd_char3 other) { simd_char16 result; result.xyz = other; return result; } /*! @abstract Zero-extends `other` to form a vector of sixteen 8-bit signed * (twos-complement) integers. */ static inline SIMD_CFUNC simd_char16 simd_make_char16(simd_char4 other) { simd_char16 result = 0; result.xyzw = other; return result; } /*! @abstract Extends `other` to form a vector of sixteen 8-bit signed * (twos-complement) integers. The contents of the newly-created vector * lanes are unspecified. */ static inline SIMD_CFUNC simd_char16 simd_make_char16_undef(simd_char4 other) { simd_char16 result; result.xyzw = other; return result; } /*! @abstract Zero-extends `other` to form a vector of sixteen 8-bit signed * (twos-complement) integers. */ static inline SIMD_CFUNC simd_char16 simd_make_char16(simd_char8 other) { simd_char16 result = 0; result.lo = simd_make_char8(other); return result; } /*! @abstract Extends `other` to form a vector of sixteen 8-bit signed * (twos-complement) integers. The contents of the newly-created vector * lanes are unspecified. */ static inline SIMD_CFUNC simd_char16 simd_make_char16_undef(simd_char8 other) { simd_char16 result; result.lo = simd_make_char8(other); return result; } /*! @abstract Returns `other` unmodified. This function is a convenience for * templated and autogenerated code. */ static inline SIMD_CFUNC simd_char16 simd_make_char16(simd_char16 other) { return other; } /*! @abstract Truncates `other` to form a vector of sixteen 8-bit signed * (twos-complement) integers. */ static inline SIMD_CFUNC simd_char16 simd_make_char16(simd_char32 other) { return simd_make_char16(other.lo); } /*! @abstract Truncates `other` to form a vector of sixteen 8-bit signed * (twos-complement) integers. */ static inline SIMD_CFUNC simd_char16 simd_make_char16(simd_char64 other) { return simd_make_char16(other.lo); } /*! @abstract Concatenates `lo` and `hi` to form a vector of thirty-two * 8-bit signed (twos-complement) integers. */ static inline SIMD_CFUNC simd_char32 simd_make_char32(simd_char16 lo, simd_char16 hi) { simd_char32 result; result.lo = lo; result.hi = hi; return result; } /*! @abstract Zero-extends `other` to form a vector of thirty-two 8-bit * signed (twos-complement) integers. */ static inline SIMD_CFUNC simd_char32 simd_make_char32(char other) { simd_char32 result = 0; result.x = other; return result; } /*! @abstract Extends `other` to form a vector of thirty-two 8-bit signed * (twos-complement) integers. The contents of the newly-created vector * lanes are unspecified. */ static inline SIMD_CFUNC simd_char32 simd_make_char32_undef(char other) { simd_char32 result; result.x = other; return result; } /*! @abstract Zero-extends `other` to form a vector of thirty-two 8-bit * signed (twos-complement) integers. */ static inline SIMD_CFUNC simd_char32 simd_make_char32(simd_char2 other) { simd_char32 result = 0; result.xy = other; return result; } /*! @abstract Extends `other` to form a vector of thirty-two 8-bit signed * (twos-complement) integers. The contents of the newly-created vector * lanes are unspecified. */ static inline SIMD_CFUNC simd_char32 simd_make_char32_undef(simd_char2 other) { simd_char32 result; result.xy = other; return result; } /*! @abstract Zero-extends `other` to form a vector of thirty-two 8-bit * signed (twos-complement) integers. */ static inline SIMD_CFUNC simd_char32 simd_make_char32(simd_char3 other) { simd_char32 result = 0; result.xyz = other; return result; } /*! @abstract Extends `other` to form a vector of thirty-two 8-bit signed * (twos-complement) integers. The contents of the newly-created vector * lanes are unspecified. */ static inline SIMD_CFUNC simd_char32 simd_make_char32_undef(simd_char3 other) { simd_char32 result; result.xyz = other; return result; } /*! @abstract Zero-extends `other` to form a vector of thirty-two 8-bit * signed (twos-complement) integers. */ static inline SIMD_CFUNC simd_char32 simd_make_char32(simd_char4 other) { simd_char32 result = 0; result.xyzw = other; return result; } /*! @abstract Extends `other` to form a vector of thirty-two 8-bit signed * (twos-complement) integers. The contents of the newly-created vector * lanes are unspecified. */ static inline SIMD_CFUNC simd_char32 simd_make_char32_undef(simd_char4 other) { simd_char32 result; result.xyzw = other; return result; } /*! @abstract Zero-extends `other` to form a vector of thirty-two 8-bit * signed (twos-complement) integers. */ static inline SIMD_CFUNC simd_char32 simd_make_char32(simd_char8 other) { simd_char32 result = 0; result.lo = simd_make_char16(other); return result; } /*! @abstract Extends `other` to form a vector of thirty-two 8-bit signed * (twos-complement) integers. The contents of the newly-created vector * lanes are unspecified. */ static inline SIMD_CFUNC simd_char32 simd_make_char32_undef(simd_char8 other) { simd_char32 result; result.lo = simd_make_char16(other); return result; } /*! @abstract Zero-extends `other` to form a vector of thirty-two 8-bit * signed (twos-complement) integers. */ static inline SIMD_CFUNC simd_char32 simd_make_char32(simd_char16 other) { simd_char32 result = 0; result.lo = simd_make_char16(other); return result; } /*! @abstract Extends `other` to form a vector of thirty-two 8-bit signed * (twos-complement) integers. The contents of the newly-created vector * lanes are unspecified. */ static inline SIMD_CFUNC simd_char32 simd_make_char32_undef(simd_char16 other) { simd_char32 result; result.lo = simd_make_char16(other); return result; } /*! @abstract Returns `other` unmodified. This function is a convenience for * templated and autogenerated code. */ static inline SIMD_CFUNC simd_char32 simd_make_char32(simd_char32 other) { return other; } /*! @abstract Truncates `other` to form a vector of thirty-two 8-bit signed * (twos-complement) integers. */ static inline SIMD_CFUNC simd_char32 simd_make_char32(simd_char64 other) { return simd_make_char32(other.lo); } /*! @abstract Concatenates `lo` and `hi` to form a vector of sixty-four * 8-bit signed (twos-complement) integers. */ static inline SIMD_CFUNC simd_char64 simd_make_char64(simd_char32 lo, simd_char32 hi) { simd_char64 result; result.lo = lo; result.hi = hi; return result; } /*! @abstract Zero-extends `other` to form a vector of sixty-four 8-bit * signed (twos-complement) integers. */ static inline SIMD_CFUNC simd_char64 simd_make_char64(char other) { simd_char64 result = 0; result.x = other; return result; } /*! @abstract Extends `other` to form a vector of sixty-four 8-bit signed * (twos-complement) integers. The contents of the newly-created vector * lanes are unspecified. */ static inline SIMD_CFUNC simd_char64 simd_make_char64_undef(char other) { simd_char64 result; result.x = other; return result; } /*! @abstract Zero-extends `other` to form a vector of sixty-four 8-bit * signed (twos-complement) integers. */ static inline SIMD_CFUNC simd_char64 simd_make_char64(simd_char2 other) { simd_char64 result = 0; result.xy = other; return result; } /*! @abstract Extends `other` to form a vector of sixty-four 8-bit signed * (twos-complement) integers. The contents of the newly-created vector * lanes are unspecified. */ static inline SIMD_CFUNC simd_char64 simd_make_char64_undef(simd_char2 other) { simd_char64 result; result.xy = other; return result; } /*! @abstract Zero-extends `other` to form a vector of sixty-four 8-bit * signed (twos-complement) integers. */ static inline SIMD_CFUNC simd_char64 simd_make_char64(simd_char3 other) { simd_char64 result = 0; result.xyz = other; return result; } /*! @abstract Extends `other` to form a vector of sixty-four 8-bit signed * (twos-complement) integers. The contents of the newly-created vector * lanes are unspecified. */ static inline SIMD_CFUNC simd_char64 simd_make_char64_undef(simd_char3 other) { simd_char64 result; result.xyz = other; return result; } /*! @abstract Zero-extends `other` to form a vector of sixty-four 8-bit * signed (twos-complement) integers. */ static inline SIMD_CFUNC simd_char64 simd_make_char64(simd_char4 other) { simd_char64 result = 0; result.xyzw = other; return result; } /*! @abstract Extends `other` to form a vector of sixty-four 8-bit signed * (twos-complement) integers. The contents of the newly-created vector * lanes are unspecified. */ static inline SIMD_CFUNC simd_char64 simd_make_char64_undef(simd_char4 other) { simd_char64 result; result.xyzw = other; return result; } /*! @abstract Zero-extends `other` to form a vector of sixty-four 8-bit * signed (twos-complement) integers. */ static inline SIMD_CFUNC simd_char64 simd_make_char64(simd_char8 other) { simd_char64 result = 0; result.lo = simd_make_char32(other); return result; } /*! @abstract Extends `other` to form a vector of sixty-four 8-bit signed * (twos-complement) integers. The contents of the newly-created vector * lanes are unspecified. */ static inline SIMD_CFUNC simd_char64 simd_make_char64_undef(simd_char8 other) { simd_char64 result; result.lo = simd_make_char32(other); return result; } /*! @abstract Zero-extends `other` to form a vector of sixty-four 8-bit * signed (twos-complement) integers. */ static inline SIMD_CFUNC simd_char64 simd_make_char64(simd_char16 other) { simd_char64 result = 0; result.lo = simd_make_char32(other); return result; } /*! @abstract Extends `other` to form a vector of sixty-four 8-bit signed * (twos-complement) integers. The contents of the newly-created vector * lanes are unspecified. */ static inline SIMD_CFUNC simd_char64 simd_make_char64_undef(simd_char16 other) { simd_char64 result; result.lo = simd_make_char32(other); return result; } /*! @abstract Zero-extends `other` to form a vector of sixty-four 8-bit * signed (twos-complement) integers. */ static inline SIMD_CFUNC simd_char64 simd_make_char64(simd_char32 other) { simd_char64 result = 0; result.lo = simd_make_char32(other); return result; } /*! @abstract Extends `other` to form a vector of sixty-four 8-bit signed * (twos-complement) integers. The contents of the newly-created vector * lanes are unspecified. */ static inline SIMD_CFUNC simd_char64 simd_make_char64_undef(simd_char32 other) { simd_char64 result; result.lo = simd_make_char32(other); return result; } /*! @abstract Returns `other` unmodified. This function is a convenience for * templated and autogenerated code. */ static inline SIMD_CFUNC simd_char64 simd_make_char64(simd_char64 other) { return other; } /*! @abstract Concatenates `x` and `y` to form a vector of two 8-bit * unsigned integers. */ static inline SIMD_CFUNC simd_uchar2 simd_make_uchar2(unsigned char x, unsigned char y) { simd_uchar2 result; result.x = x; result.y = y; return result; } /*! @abstract Zero-extends `other` to form a vector of two 8-bit unsigned * integers. */ static inline SIMD_CFUNC simd_uchar2 simd_make_uchar2(unsigned char other) { simd_uchar2 result = 0; result.x = other; return result; } /*! @abstract Extends `other` to form a vector of two 8-bit unsigned * integers. The contents of the newly-created vector lanes are * unspecified. */ static inline SIMD_CFUNC simd_uchar2 simd_make_uchar2_undef(unsigned char other) { simd_uchar2 result; result.x = other; return result; } /*! @abstract Returns `other` unmodified. This function is a convenience for * templated and autogenerated code. */ static inline SIMD_CFUNC simd_uchar2 simd_make_uchar2(simd_uchar2 other) { return other; } /*! @abstract Truncates `other` to form a vector of two 8-bit unsigned * integers. */ static inline SIMD_CFUNC simd_uchar2 simd_make_uchar2(simd_uchar3 other) { return other.xy; } /*! @abstract Truncates `other` to form a vector of two 8-bit unsigned * integers. */ static inline SIMD_CFUNC simd_uchar2 simd_make_uchar2(simd_uchar4 other) { return other.xy; } /*! @abstract Truncates `other` to form a vector of two 8-bit unsigned * integers. */ static inline SIMD_CFUNC simd_uchar2 simd_make_uchar2(simd_uchar8 other) { return other.xy; } /*! @abstract Truncates `other` to form a vector of two 8-bit unsigned * integers. */ static inline SIMD_CFUNC simd_uchar2 simd_make_uchar2(simd_uchar16 other) { return other.xy; } /*! @abstract Truncates `other` to form a vector of two 8-bit unsigned * integers. */ static inline SIMD_CFUNC simd_uchar2 simd_make_uchar2(simd_uchar32 other) { return other.xy; } /*! @abstract Truncates `other` to form a vector of two 8-bit unsigned * integers. */ static inline SIMD_CFUNC simd_uchar2 simd_make_uchar2(simd_uchar64 other) { return other.xy; } /*! @abstract Concatenates `x`, `y` and `z` to form a vector of three 8-bit * unsigned integers. */ static inline SIMD_CFUNC simd_uchar3 simd_make_uchar3(unsigned char x, unsigned char y, unsigned char z) { simd_uchar3 result; result.x = x; result.y = y; result.z = z; return result; } /*! @abstract Concatenates `x` and `yz` to form a vector of three 8-bit * unsigned integers. */ static inline SIMD_CFUNC simd_uchar3 simd_make_uchar3(unsigned char x, simd_uchar2 yz) { simd_uchar3 result; result.x = x; result.yz = yz; return result; } /*! @abstract Concatenates `xy` and `z` to form a vector of three 8-bit * unsigned integers. */ static inline SIMD_CFUNC simd_uchar3 simd_make_uchar3(simd_uchar2 xy, unsigned char z) { simd_uchar3 result; result.xy = xy; result.z = z; return result; } /*! @abstract Zero-extends `other` to form a vector of three 8-bit unsigned * integers. */ static inline SIMD_CFUNC simd_uchar3 simd_make_uchar3(unsigned char other) { simd_uchar3 result = 0; result.x = other; return result; } /*! @abstract Extends `other` to form a vector of three 8-bit unsigned * integers. The contents of the newly-created vector lanes are * unspecified. */ static inline SIMD_CFUNC simd_uchar3 simd_make_uchar3_undef(unsigned char other) { simd_uchar3 result; result.x = other; return result; } /*! @abstract Zero-extends `other` to form a vector of three 8-bit unsigned * integers. */ static inline SIMD_CFUNC simd_uchar3 simd_make_uchar3(simd_uchar2 other) { simd_uchar3 result = 0; result.xy = other; return result; } /*! @abstract Extends `other` to form a vector of three 8-bit unsigned * integers. The contents of the newly-created vector lanes are * unspecified. */ static inline SIMD_CFUNC simd_uchar3 simd_make_uchar3_undef(simd_uchar2 other) { simd_uchar3 result; result.xy = other; return result; } /*! @abstract Returns `other` unmodified. This function is a convenience for * templated and autogenerated code. */ static inline SIMD_CFUNC simd_uchar3 simd_make_uchar3(simd_uchar3 other) { return other; } /*! @abstract Truncates `other` to form a vector of three 8-bit unsigned * integers. */ static inline SIMD_CFUNC simd_uchar3 simd_make_uchar3(simd_uchar4 other) { return other.xyz; } /*! @abstract Truncates `other` to form a vector of three 8-bit unsigned * integers. */ static inline SIMD_CFUNC simd_uchar3 simd_make_uchar3(simd_uchar8 other) { return other.xyz; } /*! @abstract Truncates `other` to form a vector of three 8-bit unsigned * integers. */ static inline SIMD_CFUNC simd_uchar3 simd_make_uchar3(simd_uchar16 other) { return other.xyz; } /*! @abstract Truncates `other` to form a vector of three 8-bit unsigned * integers. */ static inline SIMD_CFUNC simd_uchar3 simd_make_uchar3(simd_uchar32 other) { return other.xyz; } /*! @abstract Truncates `other` to form a vector of three 8-bit unsigned * integers. */ static inline SIMD_CFUNC simd_uchar3 simd_make_uchar3(simd_uchar64 other) { return other.xyz; } /*! @abstract Concatenates `x`, `y`, `z` and `w` to form a vector of four * 8-bit unsigned integers. */ static inline SIMD_CFUNC simd_uchar4 simd_make_uchar4(unsigned char x, unsigned char y, unsigned char z, unsigned char w) { simd_uchar4 result; result.x = x; result.y = y; result.z = z; result.w = w; return result; } /*! @abstract Concatenates `x`, `y` and `zw` to form a vector of four 8-bit * unsigned integers. */ static inline SIMD_CFUNC simd_uchar4 simd_make_uchar4(unsigned char x, unsigned char y, simd_uchar2 zw) { simd_uchar4 result; result.x = x; result.y = y; result.zw = zw; return result; } /*! @abstract Concatenates `x`, `yz` and `w` to form a vector of four 8-bit * unsigned integers. */ static inline SIMD_CFUNC simd_uchar4 simd_make_uchar4(unsigned char x, simd_uchar2 yz, unsigned char w) { simd_uchar4 result; result.x = x; result.yz = yz; result.w = w; return result; } /*! @abstract Concatenates `xy`, `z` and `w` to form a vector of four 8-bit * unsigned integers. */ static inline SIMD_CFUNC simd_uchar4 simd_make_uchar4(simd_uchar2 xy, unsigned char z, unsigned char w) { simd_uchar4 result; result.xy = xy; result.z = z; result.w = w; return result; } /*! @abstract Concatenates `x` and `yzw` to form a vector of four 8-bit * unsigned integers. */ static inline SIMD_CFUNC simd_uchar4 simd_make_uchar4(unsigned char x, simd_uchar3 yzw) { simd_uchar4 result; result.x = x; result.yzw = yzw; return result; } /*! @abstract Concatenates `xy` and `zw` to form a vector of four 8-bit * unsigned integers. */ static inline SIMD_CFUNC simd_uchar4 simd_make_uchar4(simd_uchar2 xy, simd_uchar2 zw) { simd_uchar4 result; result.xy = xy; result.zw = zw; return result; } /*! @abstract Concatenates `xyz` and `w` to form a vector of four 8-bit * unsigned integers. */ static inline SIMD_CFUNC simd_uchar4 simd_make_uchar4(simd_uchar3 xyz, unsigned char w) { simd_uchar4 result; result.xyz = xyz; result.w = w; return result; } /*! @abstract Zero-extends `other` to form a vector of four 8-bit unsigned * integers. */ static inline SIMD_CFUNC simd_uchar4 simd_make_uchar4(unsigned char other) { simd_uchar4 result = 0; result.x = other; return result; } /*! @abstract Extends `other` to form a vector of four 8-bit unsigned * integers. The contents of the newly-created vector lanes are * unspecified. */ static inline SIMD_CFUNC simd_uchar4 simd_make_uchar4_undef(unsigned char other) { simd_uchar4 result; result.x = other; return result; } /*! @abstract Zero-extends `other` to form a vector of four 8-bit unsigned * integers. */ static inline SIMD_CFUNC simd_uchar4 simd_make_uchar4(simd_uchar2 other) { simd_uchar4 result = 0; result.xy = other; return result; } /*! @abstract Extends `other` to form a vector of four 8-bit unsigned * integers. The contents of the newly-created vector lanes are * unspecified. */ static inline SIMD_CFUNC simd_uchar4 simd_make_uchar4_undef(simd_uchar2 other) { simd_uchar4 result; result.xy = other; return result; } /*! @abstract Zero-extends `other` to form a vector of four 8-bit unsigned * integers. */ static inline SIMD_CFUNC simd_uchar4 simd_make_uchar4(simd_uchar3 other) { simd_uchar4 result = 0; result.xyz = other; return result; } /*! @abstract Extends `other` to form a vector of four 8-bit unsigned * integers. The contents of the newly-created vector lanes are * unspecified. */ static inline SIMD_CFUNC simd_uchar4 simd_make_uchar4_undef(simd_uchar3 other) { simd_uchar4 result; result.xyz = other; return result; } /*! @abstract Returns `other` unmodified. This function is a convenience for * templated and autogenerated code. */ static inline SIMD_CFUNC simd_uchar4 simd_make_uchar4(simd_uchar4 other) { return other; } /*! @abstract Truncates `other` to form a vector of four 8-bit unsigned * integers. */ static inline SIMD_CFUNC simd_uchar4 simd_make_uchar4(simd_uchar8 other) { return other.xyzw; } /*! @abstract Truncates `other` to form a vector of four 8-bit unsigned * integers. */ static inline SIMD_CFUNC simd_uchar4 simd_make_uchar4(simd_uchar16 other) { return other.xyzw; } /*! @abstract Truncates `other` to form a vector of four 8-bit unsigned * integers. */ static inline SIMD_CFUNC simd_uchar4 simd_make_uchar4(simd_uchar32 other) { return other.xyzw; } /*! @abstract Truncates `other` to form a vector of four 8-bit unsigned * integers. */ static inline SIMD_CFUNC simd_uchar4 simd_make_uchar4(simd_uchar64 other) { return other.xyzw; } /*! @abstract Concatenates `lo` and `hi` to form a vector of eight 8-bit * unsigned integers. */ static inline SIMD_CFUNC simd_uchar8 simd_make_uchar8(simd_uchar4 lo, simd_uchar4 hi) { simd_uchar8 result; result.lo = lo; result.hi = hi; return result; } /*! @abstract Zero-extends `other` to form a vector of eight 8-bit unsigned * integers. */ static inline SIMD_CFUNC simd_uchar8 simd_make_uchar8(unsigned char other) { simd_uchar8 result = 0; result.x = other; return result; } /*! @abstract Extends `other` to form a vector of eight 8-bit unsigned * integers. The contents of the newly-created vector lanes are * unspecified. */ static inline SIMD_CFUNC simd_uchar8 simd_make_uchar8_undef(unsigned char other) { simd_uchar8 result; result.x = other; return result; } /*! @abstract Zero-extends `other` to form a vector of eight 8-bit unsigned * integers. */ static inline SIMD_CFUNC simd_uchar8 simd_make_uchar8(simd_uchar2 other) { simd_uchar8 result = 0; result.xy = other; return result; } /*! @abstract Extends `other` to form a vector of eight 8-bit unsigned * integers. The contents of the newly-created vector lanes are * unspecified. */ static inline SIMD_CFUNC simd_uchar8 simd_make_uchar8_undef(simd_uchar2 other) { simd_uchar8 result; result.xy = other; return result; } /*! @abstract Zero-extends `other` to form a vector of eight 8-bit unsigned * integers. */ static inline SIMD_CFUNC simd_uchar8 simd_make_uchar8(simd_uchar3 other) { simd_uchar8 result = 0; result.xyz = other; return result; } /*! @abstract Extends `other` to form a vector of eight 8-bit unsigned * integers. The contents of the newly-created vector lanes are * unspecified. */ static inline SIMD_CFUNC simd_uchar8 simd_make_uchar8_undef(simd_uchar3 other) { simd_uchar8 result; result.xyz = other; return result; } /*! @abstract Zero-extends `other` to form a vector of eight 8-bit unsigned * integers. */ static inline SIMD_CFUNC simd_uchar8 simd_make_uchar8(simd_uchar4 other) { simd_uchar8 result = 0; result.xyzw = other; return result; } /*! @abstract Extends `other` to form a vector of eight 8-bit unsigned * integers. The contents of the newly-created vector lanes are * unspecified. */ static inline SIMD_CFUNC simd_uchar8 simd_make_uchar8_undef(simd_uchar4 other) { simd_uchar8 result; result.xyzw = other; return result; } /*! @abstract Returns `other` unmodified. This function is a convenience for * templated and autogenerated code. */ static inline SIMD_CFUNC simd_uchar8 simd_make_uchar8(simd_uchar8 other) { return other; } /*! @abstract Truncates `other` to form a vector of eight 8-bit unsigned * integers. */ static inline SIMD_CFUNC simd_uchar8 simd_make_uchar8(simd_uchar16 other) { return simd_make_uchar8(other.lo); } /*! @abstract Truncates `other` to form a vector of eight 8-bit unsigned * integers. */ static inline SIMD_CFUNC simd_uchar8 simd_make_uchar8(simd_uchar32 other) { return simd_make_uchar8(other.lo); } /*! @abstract Truncates `other` to form a vector of eight 8-bit unsigned * integers. */ static inline SIMD_CFUNC simd_uchar8 simd_make_uchar8(simd_uchar64 other) { return simd_make_uchar8(other.lo); } /*! @abstract Concatenates `lo` and `hi` to form a vector of sixteen 8-bit * unsigned integers. */ static inline SIMD_CFUNC simd_uchar16 simd_make_uchar16(simd_uchar8 lo, simd_uchar8 hi) { simd_uchar16 result; result.lo = lo; result.hi = hi; return result; } /*! @abstract Zero-extends `other` to form a vector of sixteen 8-bit * unsigned integers. */ static inline SIMD_CFUNC simd_uchar16 simd_make_uchar16(unsigned char other) { simd_uchar16 result = 0; result.x = other; return result; } /*! @abstract Extends `other` to form a vector of sixteen 8-bit unsigned * integers. The contents of the newly-created vector lanes are * unspecified. */ static inline SIMD_CFUNC simd_uchar16 simd_make_uchar16_undef(unsigned char other) { simd_uchar16 result; result.x = other; return result; } /*! @abstract Zero-extends `other` to form a vector of sixteen 8-bit * unsigned integers. */ static inline SIMD_CFUNC simd_uchar16 simd_make_uchar16(simd_uchar2 other) { simd_uchar16 result = 0; result.xy = other; return result; } /*! @abstract Extends `other` to form a vector of sixteen 8-bit unsigned * integers. The contents of the newly-created vector lanes are * unspecified. */ static inline SIMD_CFUNC simd_uchar16 simd_make_uchar16_undef(simd_uchar2 other) { simd_uchar16 result; result.xy = other; return result; } /*! @abstract Zero-extends `other` to form a vector of sixteen 8-bit * unsigned integers. */ static inline SIMD_CFUNC simd_uchar16 simd_make_uchar16(simd_uchar3 other) { simd_uchar16 result = 0; result.xyz = other; return result; } /*! @abstract Extends `other` to form a vector of sixteen 8-bit unsigned * integers. The contents of the newly-created vector lanes are * unspecified. */ static inline SIMD_CFUNC simd_uchar16 simd_make_uchar16_undef(simd_uchar3 other) { simd_uchar16 result; result.xyz = other; return result; } /*! @abstract Zero-extends `other` to form a vector of sixteen 8-bit * unsigned integers. */ static inline SIMD_CFUNC simd_uchar16 simd_make_uchar16(simd_uchar4 other) { simd_uchar16 result = 0; result.xyzw = other; return result; } /*! @abstract Extends `other` to form a vector of sixteen 8-bit unsigned * integers. The contents of the newly-created vector lanes are * unspecified. */ static inline SIMD_CFUNC simd_uchar16 simd_make_uchar16_undef(simd_uchar4 other) { simd_uchar16 result; result.xyzw = other; return result; } /*! @abstract Zero-extends `other` to form a vector of sixteen 8-bit * unsigned integers. */ static inline SIMD_CFUNC simd_uchar16 simd_make_uchar16(simd_uchar8 other) { simd_uchar16 result = 0; result.lo = simd_make_uchar8(other); return result; } /*! @abstract Extends `other` to form a vector of sixteen 8-bit unsigned * integers. The contents of the newly-created vector lanes are * unspecified. */ static inline SIMD_CFUNC simd_uchar16 simd_make_uchar16_undef(simd_uchar8 other) { simd_uchar16 result; result.lo = simd_make_uchar8(other); return result; } /*! @abstract Returns `other` unmodified. This function is a convenience for * templated and autogenerated code. */ static inline SIMD_CFUNC simd_uchar16 simd_make_uchar16(simd_uchar16 other) { return other; } /*! @abstract Truncates `other` to form a vector of sixteen 8-bit unsigned * integers. */ static inline SIMD_CFUNC simd_uchar16 simd_make_uchar16(simd_uchar32 other) { return simd_make_uchar16(other.lo); } /*! @abstract Truncates `other` to form a vector of sixteen 8-bit unsigned * integers. */ static inline SIMD_CFUNC simd_uchar16 simd_make_uchar16(simd_uchar64 other) { return simd_make_uchar16(other.lo); } /*! @abstract Concatenates `lo` and `hi` to form a vector of thirty-two * 8-bit unsigned integers. */ static inline SIMD_CFUNC simd_uchar32 simd_make_uchar32(simd_uchar16 lo, simd_uchar16 hi) { simd_uchar32 result; result.lo = lo; result.hi = hi; return result; } /*! @abstract Zero-extends `other` to form a vector of thirty-two 8-bit * unsigned integers. */ static inline SIMD_CFUNC simd_uchar32 simd_make_uchar32(unsigned char other) { simd_uchar32 result = 0; result.x = other; return result; } /*! @abstract Extends `other` to form a vector of thirty-two 8-bit unsigned * integers. The contents of the newly-created vector lanes are * unspecified. */ static inline SIMD_CFUNC simd_uchar32 simd_make_uchar32_undef(unsigned char other) { simd_uchar32 result; result.x = other; return result; } /*! @abstract Zero-extends `other` to form a vector of thirty-two 8-bit * unsigned integers. */ static inline SIMD_CFUNC simd_uchar32 simd_make_uchar32(simd_uchar2 other) { simd_uchar32 result = 0; result.xy = other; return result; } /*! @abstract Extends `other` to form a vector of thirty-two 8-bit unsigned * integers. The contents of the newly-created vector lanes are * unspecified. */ static inline SIMD_CFUNC simd_uchar32 simd_make_uchar32_undef(simd_uchar2 other) { simd_uchar32 result; result.xy = other; return result; } /*! @abstract Zero-extends `other` to form a vector of thirty-two 8-bit * unsigned integers. */ static inline SIMD_CFUNC simd_uchar32 simd_make_uchar32(simd_uchar3 other) { simd_uchar32 result = 0; result.xyz = other; return result; } /*! @abstract Extends `other` to form a vector of thirty-two 8-bit unsigned * integers. The contents of the newly-created vector lanes are * unspecified. */ static inline SIMD_CFUNC simd_uchar32 simd_make_uchar32_undef(simd_uchar3 other) { simd_uchar32 result; result.xyz = other; return result; } /*! @abstract Zero-extends `other` to form a vector of thirty-two 8-bit * unsigned integers. */ static inline SIMD_CFUNC simd_uchar32 simd_make_uchar32(simd_uchar4 other) { simd_uchar32 result = 0; result.xyzw = other; return result; } /*! @abstract Extends `other` to form a vector of thirty-two 8-bit unsigned * integers. The contents of the newly-created vector lanes are * unspecified. */ static inline SIMD_CFUNC simd_uchar32 simd_make_uchar32_undef(simd_uchar4 other) { simd_uchar32 result; result.xyzw = other; return result; } /*! @abstract Zero-extends `other` to form a vector of thirty-two 8-bit * unsigned integers. */ static inline SIMD_CFUNC simd_uchar32 simd_make_uchar32(simd_uchar8 other) { simd_uchar32 result = 0; result.lo = simd_make_uchar16(other); return result; } /*! @abstract Extends `other` to form a vector of thirty-two 8-bit unsigned * integers. The contents of the newly-created vector lanes are * unspecified. */ static inline SIMD_CFUNC simd_uchar32 simd_make_uchar32_undef(simd_uchar8 other) { simd_uchar32 result; result.lo = simd_make_uchar16(other); return result; } /*! @abstract Zero-extends `other` to form a vector of thirty-two 8-bit * unsigned integers. */ static inline SIMD_CFUNC simd_uchar32 simd_make_uchar32(simd_uchar16 other) { simd_uchar32 result = 0; result.lo = simd_make_uchar16(other); return result; } /*! @abstract Extends `other` to form a vector of thirty-two 8-bit unsigned * integers. The contents of the newly-created vector lanes are * unspecified. */ static inline SIMD_CFUNC simd_uchar32 simd_make_uchar32_undef(simd_uchar16 other) { simd_uchar32 result; result.lo = simd_make_uchar16(other); return result; } /*! @abstract Returns `other` unmodified. This function is a convenience for * templated and autogenerated code. */ static inline SIMD_CFUNC simd_uchar32 simd_make_uchar32(simd_uchar32 other) { return other; } /*! @abstract Truncates `other` to form a vector of thirty-two 8-bit * unsigned integers. */ static inline SIMD_CFUNC simd_uchar32 simd_make_uchar32(simd_uchar64 other) { return simd_make_uchar32(other.lo); } /*! @abstract Concatenates `lo` and `hi` to form a vector of sixty-four * 8-bit unsigned integers. */ static inline SIMD_CFUNC simd_uchar64 simd_make_uchar64(simd_uchar32 lo, simd_uchar32 hi) { simd_uchar64 result; result.lo = lo; result.hi = hi; return result; } /*! @abstract Zero-extends `other` to form a vector of sixty-four 8-bit * unsigned integers. */ static inline SIMD_CFUNC simd_uchar64 simd_make_uchar64(unsigned char other) { simd_uchar64 result = 0; result.x = other; return result; } /*! @abstract Extends `other` to form a vector of sixty-four 8-bit unsigned * integers. The contents of the newly-created vector lanes are * unspecified. */ static inline SIMD_CFUNC simd_uchar64 simd_make_uchar64_undef(unsigned char other) { simd_uchar64 result; result.x = other; return result; } /*! @abstract Zero-extends `other` to form a vector of sixty-four 8-bit * unsigned integers. */ static inline SIMD_CFUNC simd_uchar64 simd_make_uchar64(simd_uchar2 other) { simd_uchar64 result = 0; result.xy = other; return result; } /*! @abstract Extends `other` to form a vector of sixty-four 8-bit unsigned * integers. The contents of the newly-created vector lanes are * unspecified. */ static inline SIMD_CFUNC simd_uchar64 simd_make_uchar64_undef(simd_uchar2 other) { simd_uchar64 result; result.xy = other; return result; } /*! @abstract Zero-extends `other` to form a vector of sixty-four 8-bit * unsigned integers. */ static inline SIMD_CFUNC simd_uchar64 simd_make_uchar64(simd_uchar3 other) { simd_uchar64 result = 0; result.xyz = other; return result; } /*! @abstract Extends `other` to form a vector of sixty-four 8-bit unsigned * integers. The contents of the newly-created vector lanes are * unspecified. */ static inline SIMD_CFUNC simd_uchar64 simd_make_uchar64_undef(simd_uchar3 other) { simd_uchar64 result; result.xyz = other; return result; } /*! @abstract Zero-extends `other` to form a vector of sixty-four 8-bit * unsigned integers. */ static inline SIMD_CFUNC simd_uchar64 simd_make_uchar64(simd_uchar4 other) { simd_uchar64 result = 0; result.xyzw = other; return result; } /*! @abstract Extends `other` to form a vector of sixty-four 8-bit unsigned * integers. The contents of the newly-created vector lanes are * unspecified. */ static inline SIMD_CFUNC simd_uchar64 simd_make_uchar64_undef(simd_uchar4 other) { simd_uchar64 result; result.xyzw = other; return result; } /*! @abstract Zero-extends `other` to form a vector of sixty-four 8-bit * unsigned integers. */ static inline SIMD_CFUNC simd_uchar64 simd_make_uchar64(simd_uchar8 other) { simd_uchar64 result = 0; result.lo = simd_make_uchar32(other); return result; } /*! @abstract Extends `other` to form a vector of sixty-four 8-bit unsigned * integers. The contents of the newly-created vector lanes are * unspecified. */ static inline SIMD_CFUNC simd_uchar64 simd_make_uchar64_undef(simd_uchar8 other) { simd_uchar64 result; result.lo = simd_make_uchar32(other); return result; } /*! @abstract Zero-extends `other` to form a vector of sixty-four 8-bit * unsigned integers. */ static inline SIMD_CFUNC simd_uchar64 simd_make_uchar64(simd_uchar16 other) { simd_uchar64 result = 0; result.lo = simd_make_uchar32(other); return result; } /*! @abstract Extends `other` to form a vector of sixty-four 8-bit unsigned * integers. The contents of the newly-created vector lanes are * unspecified. */ static inline SIMD_CFUNC simd_uchar64 simd_make_uchar64_undef(simd_uchar16 other) { simd_uchar64 result; result.lo = simd_make_uchar32(other); return result; } /*! @abstract Zero-extends `other` to form a vector of sixty-four 8-bit * unsigned integers. */ static inline SIMD_CFUNC simd_uchar64 simd_make_uchar64(simd_uchar32 other) { simd_uchar64 result = 0; result.lo = simd_make_uchar32(other); return result; } /*! @abstract Extends `other` to form a vector of sixty-four 8-bit unsigned * integers. The contents of the newly-created vector lanes are * unspecified. */ static inline SIMD_CFUNC simd_uchar64 simd_make_uchar64_undef(simd_uchar32 other) { simd_uchar64 result; result.lo = simd_make_uchar32(other); return result; } /*! @abstract Returns `other` unmodified. This function is a convenience for * templated and autogenerated code. */ static inline SIMD_CFUNC simd_uchar64 simd_make_uchar64(simd_uchar64 other) { return other; } /*! @abstract Concatenates `x` and `y` to form a vector of two 16-bit signed * (twos-complement) integers. */ static inline SIMD_CFUNC simd_short2 simd_make_short2(short x, short y) { simd_short2 result; result.x = x; result.y = y; return result; } /*! @abstract Zero-extends `other` to form a vector of two 16-bit signed * (twos-complement) integers. */ static inline SIMD_CFUNC simd_short2 simd_make_short2(short other) { simd_short2 result = 0; result.x = other; return result; } /*! @abstract Extends `other` to form a vector of two 16-bit signed (twos- * complement) integers. The contents of the newly-created vector lanes are * unspecified. */ static inline SIMD_CFUNC simd_short2 simd_make_short2_undef(short other) { simd_short2 result; result.x = other; return result; } /*! @abstract Returns `other` unmodified. This function is a convenience for * templated and autogenerated code. */ static inline SIMD_CFUNC simd_short2 simd_make_short2(simd_short2 other) { return other; } /*! @abstract Truncates `other` to form a vector of two 16-bit signed (twos- * complement) integers. */ static inline SIMD_CFUNC simd_short2 simd_make_short2(simd_short3 other) { return other.xy; } /*! @abstract Truncates `other` to form a vector of two 16-bit signed (twos- * complement) integers. */ static inline SIMD_CFUNC simd_short2 simd_make_short2(simd_short4 other) { return other.xy; } /*! @abstract Truncates `other` to form a vector of two 16-bit signed (twos- * complement) integers. */ static inline SIMD_CFUNC simd_short2 simd_make_short2(simd_short8 other) { return other.xy; } /*! @abstract Truncates `other` to form a vector of two 16-bit signed (twos- * complement) integers. */ static inline SIMD_CFUNC simd_short2 simd_make_short2(simd_short16 other) { return other.xy; } /*! @abstract Truncates `other` to form a vector of two 16-bit signed (twos- * complement) integers. */ static inline SIMD_CFUNC simd_short2 simd_make_short2(simd_short32 other) { return other.xy; } /*! @abstract Concatenates `x`, `y` and `z` to form a vector of three 16-bit * signed (twos-complement) integers. */ static inline SIMD_CFUNC simd_short3 simd_make_short3(short x, short y, short z) { simd_short3 result; result.x = x; result.y = y; result.z = z; return result; } /*! @abstract Concatenates `x` and `yz` to form a vector of three 16-bit * signed (twos-complement) integers. */ static inline SIMD_CFUNC simd_short3 simd_make_short3(short x, simd_short2 yz) { simd_short3 result; result.x = x; result.yz = yz; return result; } /*! @abstract Concatenates `xy` and `z` to form a vector of three 16-bit * signed (twos-complement) integers. */ static inline SIMD_CFUNC simd_short3 simd_make_short3(simd_short2 xy, short z) { simd_short3 result; result.xy = xy; result.z = z; return result; } /*! @abstract Zero-extends `other` to form a vector of three 16-bit signed * (twos-complement) integers. */ static inline SIMD_CFUNC simd_short3 simd_make_short3(short other) { simd_short3 result = 0; result.x = other; return result; } /*! @abstract Extends `other` to form a vector of three 16-bit signed (twos- * complement) integers. The contents of the newly-created vector lanes are * unspecified. */ static inline SIMD_CFUNC simd_short3 simd_make_short3_undef(short other) { simd_short3 result; result.x = other; return result; } /*! @abstract Zero-extends `other` to form a vector of three 16-bit signed * (twos-complement) integers. */ static inline SIMD_CFUNC simd_short3 simd_make_short3(simd_short2 other) { simd_short3 result = 0; result.xy = other; return result; } /*! @abstract Extends `other` to form a vector of three 16-bit signed (twos- * complement) integers. The contents of the newly-created vector lanes are * unspecified. */ static inline SIMD_CFUNC simd_short3 simd_make_short3_undef(simd_short2 other) { simd_short3 result; result.xy = other; return result; } /*! @abstract Returns `other` unmodified. This function is a convenience for * templated and autogenerated code. */ static inline SIMD_CFUNC simd_short3 simd_make_short3(simd_short3 other) { return other; } /*! @abstract Truncates `other` to form a vector of three 16-bit signed * (twos-complement) integers. */ static inline SIMD_CFUNC simd_short3 simd_make_short3(simd_short4 other) { return other.xyz; } /*! @abstract Truncates `other` to form a vector of three 16-bit signed * (twos-complement) integers. */ static inline SIMD_CFUNC simd_short3 simd_make_short3(simd_short8 other) { return other.xyz; } /*! @abstract Truncates `other` to form a vector of three 16-bit signed * (twos-complement) integers. */ static inline SIMD_CFUNC simd_short3 simd_make_short3(simd_short16 other) { return other.xyz; } /*! @abstract Truncates `other` to form a vector of three 16-bit signed * (twos-complement) integers. */ static inline SIMD_CFUNC simd_short3 simd_make_short3(simd_short32 other) { return other.xyz; } /*! @abstract Concatenates `x`, `y`, `z` and `w` to form a vector of four * 16-bit signed (twos-complement) integers. */ static inline SIMD_CFUNC simd_short4 simd_make_short4(short x, short y, short z, short w) { simd_short4 result; result.x = x; result.y = y; result.z = z; result.w = w; return result; } /*! @abstract Concatenates `x`, `y` and `zw` to form a vector of four 16-bit * signed (twos-complement) integers. */ static inline SIMD_CFUNC simd_short4 simd_make_short4(short x, short y, simd_short2 zw) { simd_short4 result; result.x = x; result.y = y; result.zw = zw; return result; } /*! @abstract Concatenates `x`, `yz` and `w` to form a vector of four 16-bit * signed (twos-complement) integers. */ static inline SIMD_CFUNC simd_short4 simd_make_short4(short x, simd_short2 yz, short w) { simd_short4 result; result.x = x; result.yz = yz; result.w = w; return result; } /*! @abstract Concatenates `xy`, `z` and `w` to form a vector of four 16-bit * signed (twos-complement) integers. */ static inline SIMD_CFUNC simd_short4 simd_make_short4(simd_short2 xy, short z, short w) { simd_short4 result; result.xy = xy; result.z = z; result.w = w; return result; } /*! @abstract Concatenates `x` and `yzw` to form a vector of four 16-bit * signed (twos-complement) integers. */ static inline SIMD_CFUNC simd_short4 simd_make_short4(short x, simd_short3 yzw) { simd_short4 result; result.x = x; result.yzw = yzw; return result; } /*! @abstract Concatenates `xy` and `zw` to form a vector of four 16-bit * signed (twos-complement) integers. */ static inline SIMD_CFUNC simd_short4 simd_make_short4(simd_short2 xy, simd_short2 zw) { simd_short4 result; result.xy = xy; result.zw = zw; return result; } /*! @abstract Concatenates `xyz` and `w` to form a vector of four 16-bit * signed (twos-complement) integers. */ static inline SIMD_CFUNC simd_short4 simd_make_short4(simd_short3 xyz, short w) { simd_short4 result; result.xyz = xyz; result.w = w; return result; } /*! @abstract Zero-extends `other` to form a vector of four 16-bit signed * (twos-complement) integers. */ static inline SIMD_CFUNC simd_short4 simd_make_short4(short other) { simd_short4 result = 0; result.x = other; return result; } /*! @abstract Extends `other` to form a vector of four 16-bit signed (twos- * complement) integers. The contents of the newly-created vector lanes are * unspecified. */ static inline SIMD_CFUNC simd_short4 simd_make_short4_undef(short other) { simd_short4 result; result.x = other; return result; } /*! @abstract Zero-extends `other` to form a vector of four 16-bit signed * (twos-complement) integers. */ static inline SIMD_CFUNC simd_short4 simd_make_short4(simd_short2 other) { simd_short4 result = 0; result.xy = other; return result; } /*! @abstract Extends `other` to form a vector of four 16-bit signed (twos- * complement) integers. The contents of the newly-created vector lanes are * unspecified. */ static inline SIMD_CFUNC simd_short4 simd_make_short4_undef(simd_short2 other) { simd_short4 result; result.xy = other; return result; } /*! @abstract Zero-extends `other` to form a vector of four 16-bit signed * (twos-complement) integers. */ static inline SIMD_CFUNC simd_short4 simd_make_short4(simd_short3 other) { simd_short4 result = 0; result.xyz = other; return result; } /*! @abstract Extends `other` to form a vector of four 16-bit signed (twos- * complement) integers. The contents of the newly-created vector lanes are * unspecified. */ static inline SIMD_CFUNC simd_short4 simd_make_short4_undef(simd_short3 other) { simd_short4 result; result.xyz = other; return result; } /*! @abstract Returns `other` unmodified. This function is a convenience for * templated and autogenerated code. */ static inline SIMD_CFUNC simd_short4 simd_make_short4(simd_short4 other) { return other; } /*! @abstract Truncates `other` to form a vector of four 16-bit signed * (twos-complement) integers. */ static inline SIMD_CFUNC simd_short4 simd_make_short4(simd_short8 other) { return other.xyzw; } /*! @abstract Truncates `other` to form a vector of four 16-bit signed * (twos-complement) integers. */ static inline SIMD_CFUNC simd_short4 simd_make_short4(simd_short16 other) { return other.xyzw; } /*! @abstract Truncates `other` to form a vector of four 16-bit signed * (twos-complement) integers. */ static inline SIMD_CFUNC simd_short4 simd_make_short4(simd_short32 other) { return other.xyzw; } /*! @abstract Concatenates `lo` and `hi` to form a vector of eight 16-bit * signed (twos-complement) integers. */ static inline SIMD_CFUNC simd_short8 simd_make_short8(simd_short4 lo, simd_short4 hi) { simd_short8 result; result.lo = lo; result.hi = hi; return result; } /*! @abstract Zero-extends `other` to form a vector of eight 16-bit signed * (twos-complement) integers. */ static inline SIMD_CFUNC simd_short8 simd_make_short8(short other) { simd_short8 result = 0; result.x = other; return result; } /*! @abstract Extends `other` to form a vector of eight 16-bit signed (twos- * complement) integers. The contents of the newly-created vector lanes are * unspecified. */ static inline SIMD_CFUNC simd_short8 simd_make_short8_undef(short other) { simd_short8 result; result.x = other; return result; } /*! @abstract Zero-extends `other` to form a vector of eight 16-bit signed * (twos-complement) integers. */ static inline SIMD_CFUNC simd_short8 simd_make_short8(simd_short2 other) { simd_short8 result = 0; result.xy = other; return result; } /*! @abstract Extends `other` to form a vector of eight 16-bit signed (twos- * complement) integers. The contents of the newly-created vector lanes are * unspecified. */ static inline SIMD_CFUNC simd_short8 simd_make_short8_undef(simd_short2 other) { simd_short8 result; result.xy = other; return result; } /*! @abstract Zero-extends `other` to form a vector of eight 16-bit signed * (twos-complement) integers. */ static inline SIMD_CFUNC simd_short8 simd_make_short8(simd_short3 other) { simd_short8 result = 0; result.xyz = other; return result; } /*! @abstract Extends `other` to form a vector of eight 16-bit signed (twos- * complement) integers. The contents of the newly-created vector lanes are * unspecified. */ static inline SIMD_CFUNC simd_short8 simd_make_short8_undef(simd_short3 other) { simd_short8 result; result.xyz = other; return result; } /*! @abstract Zero-extends `other` to form a vector of eight 16-bit signed * (twos-complement) integers. */ static inline SIMD_CFUNC simd_short8 simd_make_short8(simd_short4 other) { simd_short8 result = 0; result.xyzw = other; return result; } /*! @abstract Extends `other` to form a vector of eight 16-bit signed (twos- * complement) integers. The contents of the newly-created vector lanes are * unspecified. */ static inline SIMD_CFUNC simd_short8 simd_make_short8_undef(simd_short4 other) { simd_short8 result; result.xyzw = other; return result; } /*! @abstract Returns `other` unmodified. This function is a convenience for * templated and autogenerated code. */ static inline SIMD_CFUNC simd_short8 simd_make_short8(simd_short8 other) { return other; } /*! @abstract Truncates `other` to form a vector of eight 16-bit signed * (twos-complement) integers. */ static inline SIMD_CFUNC simd_short8 simd_make_short8(simd_short16 other) { return simd_make_short8(other.lo); } /*! @abstract Truncates `other` to form a vector of eight 16-bit signed * (twos-complement) integers. */ static inline SIMD_CFUNC simd_short8 simd_make_short8(simd_short32 other) { return simd_make_short8(other.lo); } /*! @abstract Concatenates `lo` and `hi` to form a vector of sixteen 16-bit * signed (twos-complement) integers. */ static inline SIMD_CFUNC simd_short16 simd_make_short16(simd_short8 lo, simd_short8 hi) { simd_short16 result; result.lo = lo; result.hi = hi; return result; } /*! @abstract Zero-extends `other` to form a vector of sixteen 16-bit signed * (twos-complement) integers. */ static inline SIMD_CFUNC simd_short16 simd_make_short16(short other) { simd_short16 result = 0; result.x = other; return result; } /*! @abstract Extends `other` to form a vector of sixteen 16-bit signed * (twos-complement) integers. The contents of the newly-created vector * lanes are unspecified. */ static inline SIMD_CFUNC simd_short16 simd_make_short16_undef(short other) { simd_short16 result; result.x = other; return result; } /*! @abstract Zero-extends `other` to form a vector of sixteen 16-bit signed * (twos-complement) integers. */ static inline SIMD_CFUNC simd_short16 simd_make_short16(simd_short2 other) { simd_short16 result = 0; result.xy = other; return result; } /*! @abstract Extends `other` to form a vector of sixteen 16-bit signed * (twos-complement) integers. The contents of the newly-created vector * lanes are unspecified. */ static inline SIMD_CFUNC simd_short16 simd_make_short16_undef(simd_short2 other) { simd_short16 result; result.xy = other; return result; } /*! @abstract Zero-extends `other` to form a vector of sixteen 16-bit signed * (twos-complement) integers. */ static inline SIMD_CFUNC simd_short16 simd_make_short16(simd_short3 other) { simd_short16 result = 0; result.xyz = other; return result; } /*! @abstract Extends `other` to form a vector of sixteen 16-bit signed * (twos-complement) integers. The contents of the newly-created vector * lanes are unspecified. */ static inline SIMD_CFUNC simd_short16 simd_make_short16_undef(simd_short3 other) { simd_short16 result; result.xyz = other; return result; } /*! @abstract Zero-extends `other` to form a vector of sixteen 16-bit signed * (twos-complement) integers. */ static inline SIMD_CFUNC simd_short16 simd_make_short16(simd_short4 other) { simd_short16 result = 0; result.xyzw = other; return result; } /*! @abstract Extends `other` to form a vector of sixteen 16-bit signed * (twos-complement) integers. The contents of the newly-created vector * lanes are unspecified. */ static inline SIMD_CFUNC simd_short16 simd_make_short16_undef(simd_short4 other) { simd_short16 result; result.xyzw = other; return result; } /*! @abstract Zero-extends `other` to form a vector of sixteen 16-bit signed * (twos-complement) integers. */ static inline SIMD_CFUNC simd_short16 simd_make_short16(simd_short8 other) { simd_short16 result = 0; result.lo = simd_make_short8(other); return result; } /*! @abstract Extends `other` to form a vector of sixteen 16-bit signed * (twos-complement) integers. The contents of the newly-created vector * lanes are unspecified. */ static inline SIMD_CFUNC simd_short16 simd_make_short16_undef(simd_short8 other) { simd_short16 result; result.lo = simd_make_short8(other); return result; } /*! @abstract Returns `other` unmodified. This function is a convenience for * templated and autogenerated code. */ static inline SIMD_CFUNC simd_short16 simd_make_short16(simd_short16 other) { return other; } /*! @abstract Truncates `other` to form a vector of sixteen 16-bit signed * (twos-complement) integers. */ static inline SIMD_CFUNC simd_short16 simd_make_short16(simd_short32 other) { return simd_make_short16(other.lo); } /*! @abstract Concatenates `lo` and `hi` to form a vector of thirty-two * 16-bit signed (twos-complement) integers. */ static inline SIMD_CFUNC simd_short32 simd_make_short32(simd_short16 lo, simd_short16 hi) { simd_short32 result; result.lo = lo; result.hi = hi; return result; } /*! @abstract Zero-extends `other` to form a vector of thirty-two 16-bit * signed (twos-complement) integers. */ static inline SIMD_CFUNC simd_short32 simd_make_short32(short other) { simd_short32 result = 0; result.x = other; return result; } /*! @abstract Extends `other` to form a vector of thirty-two 16-bit signed * (twos-complement) integers. The contents of the newly-created vector * lanes are unspecified. */ static inline SIMD_CFUNC simd_short32 simd_make_short32_undef(short other) { simd_short32 result; result.x = other; return result; } /*! @abstract Zero-extends `other` to form a vector of thirty-two 16-bit * signed (twos-complement) integers. */ static inline SIMD_CFUNC simd_short32 simd_make_short32(simd_short2 other) { simd_short32 result = 0; result.xy = other; return result; } /*! @abstract Extends `other` to form a vector of thirty-two 16-bit signed * (twos-complement) integers. The contents of the newly-created vector * lanes are unspecified. */ static inline SIMD_CFUNC simd_short32 simd_make_short32_undef(simd_short2 other) { simd_short32 result; result.xy = other; return result; } /*! @abstract Zero-extends `other` to form a vector of thirty-two 16-bit * signed (twos-complement) integers. */ static inline SIMD_CFUNC simd_short32 simd_make_short32(simd_short3 other) { simd_short32 result = 0; result.xyz = other; return result; } /*! @abstract Extends `other` to form a vector of thirty-two 16-bit signed * (twos-complement) integers. The contents of the newly-created vector * lanes are unspecified. */ static inline SIMD_CFUNC simd_short32 simd_make_short32_undef(simd_short3 other) { simd_short32 result; result.xyz = other; return result; } /*! @abstract Zero-extends `other` to form a vector of thirty-two 16-bit * signed (twos-complement) integers. */ static inline SIMD_CFUNC simd_short32 simd_make_short32(simd_short4 other) { simd_short32 result = 0; result.xyzw = other; return result; } /*! @abstract Extends `other` to form a vector of thirty-two 16-bit signed * (twos-complement) integers. The contents of the newly-created vector * lanes are unspecified. */ static inline SIMD_CFUNC simd_short32 simd_make_short32_undef(simd_short4 other) { simd_short32 result; result.xyzw = other; return result; } /*! @abstract Zero-extends `other` to form a vector of thirty-two 16-bit * signed (twos-complement) integers. */ static inline SIMD_CFUNC simd_short32 simd_make_short32(simd_short8 other) { simd_short32 result = 0; result.lo = simd_make_short16(other); return result; } /*! @abstract Extends `other` to form a vector of thirty-two 16-bit signed * (twos-complement) integers. The contents of the newly-created vector * lanes are unspecified. */ static inline SIMD_CFUNC simd_short32 simd_make_short32_undef(simd_short8 other) { simd_short32 result; result.lo = simd_make_short16(other); return result; } /*! @abstract Zero-extends `other` to form a vector of thirty-two 16-bit * signed (twos-complement) integers. */ static inline SIMD_CFUNC simd_short32 simd_make_short32(simd_short16 other) { simd_short32 result = 0; result.lo = simd_make_short16(other); return result; } /*! @abstract Extends `other` to form a vector of thirty-two 16-bit signed * (twos-complement) integers. The contents of the newly-created vector * lanes are unspecified. */ static inline SIMD_CFUNC simd_short32 simd_make_short32_undef(simd_short16 other) { simd_short32 result; result.lo = simd_make_short16(other); return result; } /*! @abstract Returns `other` unmodified. This function is a convenience for * templated and autogenerated code. */ static inline SIMD_CFUNC simd_short32 simd_make_short32(simd_short32 other) { return other; } /*! @abstract Concatenates `x` and `y` to form a vector of two 16-bit * unsigned integers. */ static inline SIMD_CFUNC simd_ushort2 simd_make_ushort2(unsigned short x, unsigned short y) { simd_ushort2 result; result.x = x; result.y = y; return result; } /*! @abstract Zero-extends `other` to form a vector of two 16-bit unsigned * integers. */ static inline SIMD_CFUNC simd_ushort2 simd_make_ushort2(unsigned short other) { simd_ushort2 result = 0; result.x = other; return result; } /*! @abstract Extends `other` to form a vector of two 16-bit unsigned * integers. The contents of the newly-created vector lanes are * unspecified. */ static inline SIMD_CFUNC simd_ushort2 simd_make_ushort2_undef(unsigned short other) { simd_ushort2 result; result.x = other; return result; } /*! @abstract Returns `other` unmodified. This function is a convenience for * templated and autogenerated code. */ static inline SIMD_CFUNC simd_ushort2 simd_make_ushort2(simd_ushort2 other) { return other; } /*! @abstract Truncates `other` to form a vector of two 16-bit unsigned * integers. */ static inline SIMD_CFUNC simd_ushort2 simd_make_ushort2(simd_ushort3 other) { return other.xy; } /*! @abstract Truncates `other` to form a vector of two 16-bit unsigned * integers. */ static inline SIMD_CFUNC simd_ushort2 simd_make_ushort2(simd_ushort4 other) { return other.xy; } /*! @abstract Truncates `other` to form a vector of two 16-bit unsigned * integers. */ static inline SIMD_CFUNC simd_ushort2 simd_make_ushort2(simd_ushort8 other) { return other.xy; } /*! @abstract Truncates `other` to form a vector of two 16-bit unsigned * integers. */ static inline SIMD_CFUNC simd_ushort2 simd_make_ushort2(simd_ushort16 other) { return other.xy; } /*! @abstract Truncates `other` to form a vector of two 16-bit unsigned * integers. */ static inline SIMD_CFUNC simd_ushort2 simd_make_ushort2(simd_ushort32 other) { return other.xy; } /*! @abstract Concatenates `x`, `y` and `z` to form a vector of three 16-bit * unsigned integers. */ static inline SIMD_CFUNC simd_ushort3 simd_make_ushort3(unsigned short x, unsigned short y, unsigned short z) { simd_ushort3 result; result.x = x; result.y = y; result.z = z; return result; } /*! @abstract Concatenates `x` and `yz` to form a vector of three 16-bit * unsigned integers. */ static inline SIMD_CFUNC simd_ushort3 simd_make_ushort3(unsigned short x, simd_ushort2 yz) { simd_ushort3 result; result.x = x; result.yz = yz; return result; } /*! @abstract Concatenates `xy` and `z` to form a vector of three 16-bit * unsigned integers. */ static inline SIMD_CFUNC simd_ushort3 simd_make_ushort3(simd_ushort2 xy, unsigned short z) { simd_ushort3 result; result.xy = xy; result.z = z; return result; } /*! @abstract Zero-extends `other` to form a vector of three 16-bit unsigned * integers. */ static inline SIMD_CFUNC simd_ushort3 simd_make_ushort3(unsigned short other) { simd_ushort3 result = 0; result.x = other; return result; } /*! @abstract Extends `other` to form a vector of three 16-bit unsigned * integers. The contents of the newly-created vector lanes are * unspecified. */ static inline SIMD_CFUNC simd_ushort3 simd_make_ushort3_undef(unsigned short other) { simd_ushort3 result; result.x = other; return result; } /*! @abstract Zero-extends `other` to form a vector of three 16-bit unsigned * integers. */ static inline SIMD_CFUNC simd_ushort3 simd_make_ushort3(simd_ushort2 other) { simd_ushort3 result = 0; result.xy = other; return result; } /*! @abstract Extends `other` to form a vector of three 16-bit unsigned * integers. The contents of the newly-created vector lanes are * unspecified. */ static inline SIMD_CFUNC simd_ushort3 simd_make_ushort3_undef(simd_ushort2 other) { simd_ushort3 result; result.xy = other; return result; } /*! @abstract Returns `other` unmodified. This function is a convenience for * templated and autogenerated code. */ static inline SIMD_CFUNC simd_ushort3 simd_make_ushort3(simd_ushort3 other) { return other; } /*! @abstract Truncates `other` to form a vector of three 16-bit unsigned * integers. */ static inline SIMD_CFUNC simd_ushort3 simd_make_ushort3(simd_ushort4 other) { return other.xyz; } /*! @abstract Truncates `other` to form a vector of three 16-bit unsigned * integers. */ static inline SIMD_CFUNC simd_ushort3 simd_make_ushort3(simd_ushort8 other) { return other.xyz; } /*! @abstract Truncates `other` to form a vector of three 16-bit unsigned * integers. */ static inline SIMD_CFUNC simd_ushort3 simd_make_ushort3(simd_ushort16 other) { return other.xyz; } /*! @abstract Truncates `other` to form a vector of three 16-bit unsigned * integers. */ static inline SIMD_CFUNC simd_ushort3 simd_make_ushort3(simd_ushort32 other) { return other.xyz; } /*! @abstract Concatenates `x`, `y`, `z` and `w` to form a vector of four * 16-bit unsigned integers. */ static inline SIMD_CFUNC simd_ushort4 simd_make_ushort4(unsigned short x, unsigned short y, unsigned short z, unsigned short w) { simd_ushort4 result; result.x = x; result.y = y; result.z = z; result.w = w; return result; } /*! @abstract Concatenates `x`, `y` and `zw` to form a vector of four 16-bit * unsigned integers. */ static inline SIMD_CFUNC simd_ushort4 simd_make_ushort4(unsigned short x, unsigned short y, simd_ushort2 zw) { simd_ushort4 result; result.x = x; result.y = y; result.zw = zw; return result; } /*! @abstract Concatenates `x`, `yz` and `w` to form a vector of four 16-bit * unsigned integers. */ static inline SIMD_CFUNC simd_ushort4 simd_make_ushort4(unsigned short x, simd_ushort2 yz, unsigned short w) { simd_ushort4 result; result.x = x; result.yz = yz; result.w = w; return result; } /*! @abstract Concatenates `xy`, `z` and `w` to form a vector of four 16-bit * unsigned integers. */ static inline SIMD_CFUNC simd_ushort4 simd_make_ushort4(simd_ushort2 xy, unsigned short z, unsigned short w) { simd_ushort4 result; result.xy = xy; result.z = z; result.w = w; return result; } /*! @abstract Concatenates `x` and `yzw` to form a vector of four 16-bit * unsigned integers. */ static inline SIMD_CFUNC simd_ushort4 simd_make_ushort4(unsigned short x, simd_ushort3 yzw) { simd_ushort4 result; result.x = x; result.yzw = yzw; return result; } /*! @abstract Concatenates `xy` and `zw` to form a vector of four 16-bit * unsigned integers. */ static inline SIMD_CFUNC simd_ushort4 simd_make_ushort4(simd_ushort2 xy, simd_ushort2 zw) { simd_ushort4 result; result.xy = xy; result.zw = zw; return result; } /*! @abstract Concatenates `xyz` and `w` to form a vector of four 16-bit * unsigned integers. */ static inline SIMD_CFUNC simd_ushort4 simd_make_ushort4(simd_ushort3 xyz, unsigned short w) { simd_ushort4 result; result.xyz = xyz; result.w = w; return result; } /*! @abstract Zero-extends `other` to form a vector of four 16-bit unsigned * integers. */ static inline SIMD_CFUNC simd_ushort4 simd_make_ushort4(unsigned short other) { simd_ushort4 result = 0; result.x = other; return result; } /*! @abstract Extends `other` to form a vector of four 16-bit unsigned * integers. The contents of the newly-created vector lanes are * unspecified. */ static inline SIMD_CFUNC simd_ushort4 simd_make_ushort4_undef(unsigned short other) { simd_ushort4 result; result.x = other; return result; } /*! @abstract Zero-extends `other` to form a vector of four 16-bit unsigned * integers. */ static inline SIMD_CFUNC simd_ushort4 simd_make_ushort4(simd_ushort2 other) { simd_ushort4 result = 0; result.xy = other; return result; } /*! @abstract Extends `other` to form a vector of four 16-bit unsigned * integers. The contents of the newly-created vector lanes are * unspecified. */ static inline SIMD_CFUNC simd_ushort4 simd_make_ushort4_undef(simd_ushort2 other) { simd_ushort4 result; result.xy = other; return result; } /*! @abstract Zero-extends `other` to form a vector of four 16-bit unsigned * integers. */ static inline SIMD_CFUNC simd_ushort4 simd_make_ushort4(simd_ushort3 other) { simd_ushort4 result = 0; result.xyz = other; return result; } /*! @abstract Extends `other` to form a vector of four 16-bit unsigned * integers. The contents of the newly-created vector lanes are * unspecified. */ static inline SIMD_CFUNC simd_ushort4 simd_make_ushort4_undef(simd_ushort3 other) { simd_ushort4 result; result.xyz = other; return result; } /*! @abstract Returns `other` unmodified. This function is a convenience for * templated and autogenerated code. */ static inline SIMD_CFUNC simd_ushort4 simd_make_ushort4(simd_ushort4 other) { return other; } /*! @abstract Truncates `other` to form a vector of four 16-bit unsigned * integers. */ static inline SIMD_CFUNC simd_ushort4 simd_make_ushort4(simd_ushort8 other) { return other.xyzw; } /*! @abstract Truncates `other` to form a vector of four 16-bit unsigned * integers. */ static inline SIMD_CFUNC simd_ushort4 simd_make_ushort4(simd_ushort16 other) { return other.xyzw; } /*! @abstract Truncates `other` to form a vector of four 16-bit unsigned * integers. */ static inline SIMD_CFUNC simd_ushort4 simd_make_ushort4(simd_ushort32 other) { return other.xyzw; } /*! @abstract Concatenates `lo` and `hi` to form a vector of eight 16-bit * unsigned integers. */ static inline SIMD_CFUNC simd_ushort8 simd_make_ushort8(simd_ushort4 lo, simd_ushort4 hi) { simd_ushort8 result; result.lo = lo; result.hi = hi; return result; } /*! @abstract Zero-extends `other` to form a vector of eight 16-bit unsigned * integers. */ static inline SIMD_CFUNC simd_ushort8 simd_make_ushort8(unsigned short other) { simd_ushort8 result = 0; result.x = other; return result; } /*! @abstract Extends `other` to form a vector of eight 16-bit unsigned * integers. The contents of the newly-created vector lanes are * unspecified. */ static inline SIMD_CFUNC simd_ushort8 simd_make_ushort8_undef(unsigned short other) { simd_ushort8 result; result.x = other; return result; } /*! @abstract Zero-extends `other` to form a vector of eight 16-bit unsigned * integers. */ static inline SIMD_CFUNC simd_ushort8 simd_make_ushort8(simd_ushort2 other) { simd_ushort8 result = 0; result.xy = other; return result; } /*! @abstract Extends `other` to form a vector of eight 16-bit unsigned * integers. The contents of the newly-created vector lanes are * unspecified. */ static inline SIMD_CFUNC simd_ushort8 simd_make_ushort8_undef(simd_ushort2 other) { simd_ushort8 result; result.xy = other; return result; } /*! @abstract Zero-extends `other` to form a vector of eight 16-bit unsigned * integers. */ static inline SIMD_CFUNC simd_ushort8 simd_make_ushort8(simd_ushort3 other) { simd_ushort8 result = 0; result.xyz = other; return result; } /*! @abstract Extends `other` to form a vector of eight 16-bit unsigned * integers. The contents of the newly-created vector lanes are * unspecified. */ static inline SIMD_CFUNC simd_ushort8 simd_make_ushort8_undef(simd_ushort3 other) { simd_ushort8 result; result.xyz = other; return result; } /*! @abstract Zero-extends `other` to form a vector of eight 16-bit unsigned * integers. */ static inline SIMD_CFUNC simd_ushort8 simd_make_ushort8(simd_ushort4 other) { simd_ushort8 result = 0; result.xyzw = other; return result; } /*! @abstract Extends `other` to form a vector of eight 16-bit unsigned * integers. The contents of the newly-created vector lanes are * unspecified. */ static inline SIMD_CFUNC simd_ushort8 simd_make_ushort8_undef(simd_ushort4 other) { simd_ushort8 result; result.xyzw = other; return result; } /*! @abstract Returns `other` unmodified. This function is a convenience for * templated and autogenerated code. */ static inline SIMD_CFUNC simd_ushort8 simd_make_ushort8(simd_ushort8 other) { return other; } /*! @abstract Truncates `other` to form a vector of eight 16-bit unsigned * integers. */ static inline SIMD_CFUNC simd_ushort8 simd_make_ushort8(simd_ushort16 other) { return simd_make_ushort8(other.lo); } /*! @abstract Truncates `other` to form a vector of eight 16-bit unsigned * integers. */ static inline SIMD_CFUNC simd_ushort8 simd_make_ushort8(simd_ushort32 other) { return simd_make_ushort8(other.lo); } /*! @abstract Concatenates `lo` and `hi` to form a vector of sixteen 16-bit * unsigned integers. */ static inline SIMD_CFUNC simd_ushort16 simd_make_ushort16(simd_ushort8 lo, simd_ushort8 hi) { simd_ushort16 result; result.lo = lo; result.hi = hi; return result; } /*! @abstract Zero-extends `other` to form a vector of sixteen 16-bit * unsigned integers. */ static inline SIMD_CFUNC simd_ushort16 simd_make_ushort16(unsigned short other) { simd_ushort16 result = 0; result.x = other; return result; } /*! @abstract Extends `other` to form a vector of sixteen 16-bit unsigned * integers. The contents of the newly-created vector lanes are * unspecified. */ static inline SIMD_CFUNC simd_ushort16 simd_make_ushort16_undef(unsigned short other) { simd_ushort16 result; result.x = other; return result; } /*! @abstract Zero-extends `other` to form a vector of sixteen 16-bit * unsigned integers. */ static inline SIMD_CFUNC simd_ushort16 simd_make_ushort16(simd_ushort2 other) { simd_ushort16 result = 0; result.xy = other; return result; } /*! @abstract Extends `other` to form a vector of sixteen 16-bit unsigned * integers. The contents of the newly-created vector lanes are * unspecified. */ static inline SIMD_CFUNC simd_ushort16 simd_make_ushort16_undef(simd_ushort2 other) { simd_ushort16 result; result.xy = other; return result; } /*! @abstract Zero-extends `other` to form a vector of sixteen 16-bit * unsigned integers. */ static inline SIMD_CFUNC simd_ushort16 simd_make_ushort16(simd_ushort3 other) { simd_ushort16 result = 0; result.xyz = other; return result; } /*! @abstract Extends `other` to form a vector of sixteen 16-bit unsigned * integers. The contents of the newly-created vector lanes are * unspecified. */ static inline SIMD_CFUNC simd_ushort16 simd_make_ushort16_undef(simd_ushort3 other) { simd_ushort16 result; result.xyz = other; return result; } /*! @abstract Zero-extends `other` to form a vector of sixteen 16-bit * unsigned integers. */ static inline SIMD_CFUNC simd_ushort16 simd_make_ushort16(simd_ushort4 other) { simd_ushort16 result = 0; result.xyzw = other; return result; } /*! @abstract Extends `other` to form a vector of sixteen 16-bit unsigned * integers. The contents of the newly-created vector lanes are * unspecified. */ static inline SIMD_CFUNC simd_ushort16 simd_make_ushort16_undef(simd_ushort4 other) { simd_ushort16 result; result.xyzw = other; return result; } /*! @abstract Zero-extends `other` to form a vector of sixteen 16-bit * unsigned integers. */ static inline SIMD_CFUNC simd_ushort16 simd_make_ushort16(simd_ushort8 other) { simd_ushort16 result = 0; result.lo = simd_make_ushort8(other); return result; } /*! @abstract Extends `other` to form a vector of sixteen 16-bit unsigned * integers. The contents of the newly-created vector lanes are * unspecified. */ static inline SIMD_CFUNC simd_ushort16 simd_make_ushort16_undef(simd_ushort8 other) { simd_ushort16 result; result.lo = simd_make_ushort8(other); return result; } /*! @abstract Returns `other` unmodified. This function is a convenience for * templated and autogenerated code. */ static inline SIMD_CFUNC simd_ushort16 simd_make_ushort16(simd_ushort16 other) { return other; } /*! @abstract Truncates `other` to form a vector of sixteen 16-bit unsigned * integers. */ static inline SIMD_CFUNC simd_ushort16 simd_make_ushort16(simd_ushort32 other) { return simd_make_ushort16(other.lo); } /*! @abstract Concatenates `lo` and `hi` to form a vector of thirty-two * 16-bit unsigned integers. */ static inline SIMD_CFUNC simd_ushort32 simd_make_ushort32(simd_ushort16 lo, simd_ushort16 hi) { simd_ushort32 result; result.lo = lo; result.hi = hi; return result; } /*! @abstract Zero-extends `other` to form a vector of thirty-two 16-bit * unsigned integers. */ static inline SIMD_CFUNC simd_ushort32 simd_make_ushort32(unsigned short other) { simd_ushort32 result = 0; result.x = other; return result; } /*! @abstract Extends `other` to form a vector of thirty-two 16-bit unsigned * integers. The contents of the newly-created vector lanes are * unspecified. */ static inline SIMD_CFUNC simd_ushort32 simd_make_ushort32_undef(unsigned short other) { simd_ushort32 result; result.x = other; return result; } /*! @abstract Zero-extends `other` to form a vector of thirty-two 16-bit * unsigned integers. */ static inline SIMD_CFUNC simd_ushort32 simd_make_ushort32(simd_ushort2 other) { simd_ushort32 result = 0; result.xy = other; return result; } /*! @abstract Extends `other` to form a vector of thirty-two 16-bit unsigned * integers. The contents of the newly-created vector lanes are * unspecified. */ static inline SIMD_CFUNC simd_ushort32 simd_make_ushort32_undef(simd_ushort2 other) { simd_ushort32 result; result.xy = other; return result; } /*! @abstract Zero-extends `other` to form a vector of thirty-two 16-bit * unsigned integers. */ static inline SIMD_CFUNC simd_ushort32 simd_make_ushort32(simd_ushort3 other) { simd_ushort32 result = 0; result.xyz = other; return result; } /*! @abstract Extends `other` to form a vector of thirty-two 16-bit unsigned * integers. The contents of the newly-created vector lanes are * unspecified. */ static inline SIMD_CFUNC simd_ushort32 simd_make_ushort32_undef(simd_ushort3 other) { simd_ushort32 result; result.xyz = other; return result; } /*! @abstract Zero-extends `other` to form a vector of thirty-two 16-bit * unsigned integers. */ static inline SIMD_CFUNC simd_ushort32 simd_make_ushort32(simd_ushort4 other) { simd_ushort32 result = 0; result.xyzw = other; return result; } /*! @abstract Extends `other` to form a vector of thirty-two 16-bit unsigned * integers. The contents of the newly-created vector lanes are * unspecified. */ static inline SIMD_CFUNC simd_ushort32 simd_make_ushort32_undef(simd_ushort4 other) { simd_ushort32 result; result.xyzw = other; return result; } /*! @abstract Zero-extends `other` to form a vector of thirty-two 16-bit * unsigned integers. */ static inline SIMD_CFUNC simd_ushort32 simd_make_ushort32(simd_ushort8 other) { simd_ushort32 result = 0; result.lo = simd_make_ushort16(other); return result; } /*! @abstract Extends `other` to form a vector of thirty-two 16-bit unsigned * integers. The contents of the newly-created vector lanes are * unspecified. */ static inline SIMD_CFUNC simd_ushort32 simd_make_ushort32_undef(simd_ushort8 other) { simd_ushort32 result; result.lo = simd_make_ushort16(other); return result; } /*! @abstract Zero-extends `other` to form a vector of thirty-two 16-bit * unsigned integers. */ static inline SIMD_CFUNC simd_ushort32 simd_make_ushort32(simd_ushort16 other) { simd_ushort32 result = 0; result.lo = simd_make_ushort16(other); return result; } /*! @abstract Extends `other` to form a vector of thirty-two 16-bit unsigned * integers. The contents of the newly-created vector lanes are * unspecified. */ static inline SIMD_CFUNC simd_ushort32 simd_make_ushort32_undef(simd_ushort16 other) { simd_ushort32 result; result.lo = simd_make_ushort16(other); return result; } /*! @abstract Returns `other` unmodified. This function is a convenience for * templated and autogenerated code. */ static inline SIMD_CFUNC simd_ushort32 simd_make_ushort32(simd_ushort32 other) { return other; } /*! @abstract Concatenates `x` and `y` to form a vector of two 32-bit signed * (twos-complement) integers. */ static inline SIMD_CFUNC simd_int2 simd_make_int2(int x, int y) { simd_int2 result; result.x = x; result.y = y; return result; } /*! @abstract Zero-extends `other` to form a vector of two 32-bit signed * (twos-complement) integers. */ static inline SIMD_CFUNC simd_int2 simd_make_int2(int other) { simd_int2 result = 0; result.x = other; return result; } /*! @abstract Extends `other` to form a vector of two 32-bit signed (twos- * complement) integers. The contents of the newly-created vector lanes are * unspecified. */ static inline SIMD_CFUNC simd_int2 simd_make_int2_undef(int other) { simd_int2 result; result.x = other; return result; } /*! @abstract Returns `other` unmodified. This function is a convenience for * templated and autogenerated code. */ static inline SIMD_CFUNC simd_int2 simd_make_int2(simd_int2 other) { return other; } /*! @abstract Truncates `other` to form a vector of two 32-bit signed (twos- * complement) integers. */ static inline SIMD_CFUNC simd_int2 simd_make_int2(simd_int3 other) { return other.xy; } /*! @abstract Truncates `other` to form a vector of two 32-bit signed (twos- * complement) integers. */ static inline SIMD_CFUNC simd_int2 simd_make_int2(simd_int4 other) { return other.xy; } /*! @abstract Truncates `other` to form a vector of two 32-bit signed (twos- * complement) integers. */ static inline SIMD_CFUNC simd_int2 simd_make_int2(simd_int8 other) { return other.xy; } /*! @abstract Truncates `other` to form a vector of two 32-bit signed (twos- * complement) integers. */ static inline SIMD_CFUNC simd_int2 simd_make_int2(simd_int16 other) { return other.xy; } /*! @abstract Concatenates `x`, `y` and `z` to form a vector of three 32-bit * signed (twos-complement) integers. */ static inline SIMD_CFUNC simd_int3 simd_make_int3(int x, int y, int z) { simd_int3 result; result.x = x; result.y = y; result.z = z; return result; } /*! @abstract Concatenates `x` and `yz` to form a vector of three 32-bit * signed (twos-complement) integers. */ static inline SIMD_CFUNC simd_int3 simd_make_int3(int x, simd_int2 yz) { simd_int3 result; result.x = x; result.yz = yz; return result; } /*! @abstract Concatenates `xy` and `z` to form a vector of three 32-bit * signed (twos-complement) integers. */ static inline SIMD_CFUNC simd_int3 simd_make_int3(simd_int2 xy, int z) { simd_int3 result; result.xy = xy; result.z = z; return result; } /*! @abstract Zero-extends `other` to form a vector of three 32-bit signed * (twos-complement) integers. */ static inline SIMD_CFUNC simd_int3 simd_make_int3(int other) { simd_int3 result = 0; result.x = other; return result; } /*! @abstract Extends `other` to form a vector of three 32-bit signed (twos- * complement) integers. The contents of the newly-created vector lanes are * unspecified. */ static inline SIMD_CFUNC simd_int3 simd_make_int3_undef(int other) { simd_int3 result; result.x = other; return result; } /*! @abstract Zero-extends `other` to form a vector of three 32-bit signed * (twos-complement) integers. */ static inline SIMD_CFUNC simd_int3 simd_make_int3(simd_int2 other) { simd_int3 result = 0; result.xy = other; return result; } /*! @abstract Extends `other` to form a vector of three 32-bit signed (twos- * complement) integers. The contents of the newly-created vector lanes are * unspecified. */ static inline SIMD_CFUNC simd_int3 simd_make_int3_undef(simd_int2 other) { simd_int3 result; result.xy = other; return result; } /*! @abstract Returns `other` unmodified. This function is a convenience for * templated and autogenerated code. */ static inline SIMD_CFUNC simd_int3 simd_make_int3(simd_int3 other) { return other; } /*! @abstract Truncates `other` to form a vector of three 32-bit signed * (twos-complement) integers. */ static inline SIMD_CFUNC simd_int3 simd_make_int3(simd_int4 other) { return other.xyz; } /*! @abstract Truncates `other` to form a vector of three 32-bit signed * (twos-complement) integers. */ static inline SIMD_CFUNC simd_int3 simd_make_int3(simd_int8 other) { return other.xyz; } /*! @abstract Truncates `other` to form a vector of three 32-bit signed * (twos-complement) integers. */ static inline SIMD_CFUNC simd_int3 simd_make_int3(simd_int16 other) { return other.xyz; } /*! @abstract Concatenates `x`, `y`, `z` and `w` to form a vector of four * 32-bit signed (twos-complement) integers. */ static inline SIMD_CFUNC simd_int4 simd_make_int4(int x, int y, int z, int w) { simd_int4 result; result.x = x; result.y = y; result.z = z; result.w = w; return result; } /*! @abstract Concatenates `x`, `y` and `zw` to form a vector of four 32-bit * signed (twos-complement) integers. */ static inline SIMD_CFUNC simd_int4 simd_make_int4(int x, int y, simd_int2 zw) { simd_int4 result; result.x = x; result.y = y; result.zw = zw; return result; } /*! @abstract Concatenates `x`, `yz` and `w` to form a vector of four 32-bit * signed (twos-complement) integers. */ static inline SIMD_CFUNC simd_int4 simd_make_int4(int x, simd_int2 yz, int w) { simd_int4 result; result.x = x; result.yz = yz; result.w = w; return result; } /*! @abstract Concatenates `xy`, `z` and `w` to form a vector of four 32-bit * signed (twos-complement) integers. */ static inline SIMD_CFUNC simd_int4 simd_make_int4(simd_int2 xy, int z, int w) { simd_int4 result; result.xy = xy; result.z = z; result.w = w; return result; } /*! @abstract Concatenates `x` and `yzw` to form a vector of four 32-bit * signed (twos-complement) integers. */ static inline SIMD_CFUNC simd_int4 simd_make_int4(int x, simd_int3 yzw) { simd_int4 result; result.x = x; result.yzw = yzw; return result; } /*! @abstract Concatenates `xy` and `zw` to form a vector of four 32-bit * signed (twos-complement) integers. */ static inline SIMD_CFUNC simd_int4 simd_make_int4(simd_int2 xy, simd_int2 zw) { simd_int4 result; result.xy = xy; result.zw = zw; return result; } /*! @abstract Concatenates `xyz` and `w` to form a vector of four 32-bit * signed (twos-complement) integers. */ static inline SIMD_CFUNC simd_int4 simd_make_int4(simd_int3 xyz, int w) { simd_int4 result; result.xyz = xyz; result.w = w; return result; } /*! @abstract Zero-extends `other` to form a vector of four 32-bit signed * (twos-complement) integers. */ static inline SIMD_CFUNC simd_int4 simd_make_int4(int other) { simd_int4 result = 0; result.x = other; return result; } /*! @abstract Extends `other` to form a vector of four 32-bit signed (twos- * complement) integers. The contents of the newly-created vector lanes are * unspecified. */ static inline SIMD_CFUNC simd_int4 simd_make_int4_undef(int other) { simd_int4 result; result.x = other; return result; } /*! @abstract Zero-extends `other` to form a vector of four 32-bit signed * (twos-complement) integers. */ static inline SIMD_CFUNC simd_int4 simd_make_int4(simd_int2 other) { simd_int4 result = 0; result.xy = other; return result; } /*! @abstract Extends `other` to form a vector of four 32-bit signed (twos- * complement) integers. The contents of the newly-created vector lanes are * unspecified. */ static inline SIMD_CFUNC simd_int4 simd_make_int4_undef(simd_int2 other) { simd_int4 result; result.xy = other; return result; } /*! @abstract Zero-extends `other` to form a vector of four 32-bit signed * (twos-complement) integers. */ static inline SIMD_CFUNC simd_int4 simd_make_int4(simd_int3 other) { simd_int4 result = 0; result.xyz = other; return result; } /*! @abstract Extends `other` to form a vector of four 32-bit signed (twos- * complement) integers. The contents of the newly-created vector lanes are * unspecified. */ static inline SIMD_CFUNC simd_int4 simd_make_int4_undef(simd_int3 other) { simd_int4 result; result.xyz = other; return result; } /*! @abstract Returns `other` unmodified. This function is a convenience for * templated and autogenerated code. */ static inline SIMD_CFUNC simd_int4 simd_make_int4(simd_int4 other) { return other; } /*! @abstract Truncates `other` to form a vector of four 32-bit signed * (twos-complement) integers. */ static inline SIMD_CFUNC simd_int4 simd_make_int4(simd_int8 other) { return other.xyzw; } /*! @abstract Truncates `other` to form a vector of four 32-bit signed * (twos-complement) integers. */ static inline SIMD_CFUNC simd_int4 simd_make_int4(simd_int16 other) { return other.xyzw; } /*! @abstract Concatenates `lo` and `hi` to form a vector of eight 32-bit * signed (twos-complement) integers. */ static inline SIMD_CFUNC simd_int8 simd_make_int8(simd_int4 lo, simd_int4 hi) { simd_int8 result; result.lo = lo; result.hi = hi; return result; } /*! @abstract Zero-extends `other` to form a vector of eight 32-bit signed * (twos-complement) integers. */ static inline SIMD_CFUNC simd_int8 simd_make_int8(int other) { simd_int8 result = 0; result.x = other; return result; } /*! @abstract Extends `other` to form a vector of eight 32-bit signed (twos- * complement) integers. The contents of the newly-created vector lanes are * unspecified. */ static inline SIMD_CFUNC simd_int8 simd_make_int8_undef(int other) { simd_int8 result; result.x = other; return result; } /*! @abstract Zero-extends `other` to form a vector of eight 32-bit signed * (twos-complement) integers. */ static inline SIMD_CFUNC simd_int8 simd_make_int8(simd_int2 other) { simd_int8 result = 0; result.xy = other; return result; } /*! @abstract Extends `other` to form a vector of eight 32-bit signed (twos- * complement) integers. The contents of the newly-created vector lanes are * unspecified. */ static inline SIMD_CFUNC simd_int8 simd_make_int8_undef(simd_int2 other) { simd_int8 result; result.xy = other; return result; } /*! @abstract Zero-extends `other` to form a vector of eight 32-bit signed * (twos-complement) integers. */ static inline SIMD_CFUNC simd_int8 simd_make_int8(simd_int3 other) { simd_int8 result = 0; result.xyz = other; return result; } /*! @abstract Extends `other` to form a vector of eight 32-bit signed (twos- * complement) integers. The contents of the newly-created vector lanes are * unspecified. */ static inline SIMD_CFUNC simd_int8 simd_make_int8_undef(simd_int3 other) { simd_int8 result; result.xyz = other; return result; } /*! @abstract Zero-extends `other` to form a vector of eight 32-bit signed * (twos-complement) integers. */ static inline SIMD_CFUNC simd_int8 simd_make_int8(simd_int4 other) { simd_int8 result = 0; result.xyzw = other; return result; } /*! @abstract Extends `other` to form a vector of eight 32-bit signed (twos- * complement) integers. The contents of the newly-created vector lanes are * unspecified. */ static inline SIMD_CFUNC simd_int8 simd_make_int8_undef(simd_int4 other) { simd_int8 result; result.xyzw = other; return result; } /*! @abstract Returns `other` unmodified. This function is a convenience for * templated and autogenerated code. */ static inline SIMD_CFUNC simd_int8 simd_make_int8(simd_int8 other) { return other; } /*! @abstract Truncates `other` to form a vector of eight 32-bit signed * (twos-complement) integers. */ static inline SIMD_CFUNC simd_int8 simd_make_int8(simd_int16 other) { return simd_make_int8(other.lo); } /*! @abstract Concatenates `lo` and `hi` to form a vector of sixteen 32-bit * signed (twos-complement) integers. */ static inline SIMD_CFUNC simd_int16 simd_make_int16(simd_int8 lo, simd_int8 hi) { simd_int16 result; result.lo = lo; result.hi = hi; return result; } /*! @abstract Zero-extends `other` to form a vector of sixteen 32-bit signed * (twos-complement) integers. */ static inline SIMD_CFUNC simd_int16 simd_make_int16(int other) { simd_int16 result = 0; result.x = other; return result; } /*! @abstract Extends `other` to form a vector of sixteen 32-bit signed * (twos-complement) integers. The contents of the newly-created vector * lanes are unspecified. */ static inline SIMD_CFUNC simd_int16 simd_make_int16_undef(int other) { simd_int16 result; result.x = other; return result; } /*! @abstract Zero-extends `other` to form a vector of sixteen 32-bit signed * (twos-complement) integers. */ static inline SIMD_CFUNC simd_int16 simd_make_int16(simd_int2 other) { simd_int16 result = 0; result.xy = other; return result; } /*! @abstract Extends `other` to form a vector of sixteen 32-bit signed * (twos-complement) integers. The contents of the newly-created vector * lanes are unspecified. */ static inline SIMD_CFUNC simd_int16 simd_make_int16_undef(simd_int2 other) { simd_int16 result; result.xy = other; return result; } /*! @abstract Zero-extends `other` to form a vector of sixteen 32-bit signed * (twos-complement) integers. */ static inline SIMD_CFUNC simd_int16 simd_make_int16(simd_int3 other) { simd_int16 result = 0; result.xyz = other; return result; } /*! @abstract Extends `other` to form a vector of sixteen 32-bit signed * (twos-complement) integers. The contents of the newly-created vector * lanes are unspecified. */ static inline SIMD_CFUNC simd_int16 simd_make_int16_undef(simd_int3 other) { simd_int16 result; result.xyz = other; return result; } /*! @abstract Zero-extends `other` to form a vector of sixteen 32-bit signed * (twos-complement) integers. */ static inline SIMD_CFUNC simd_int16 simd_make_int16(simd_int4 other) { simd_int16 result = 0; result.xyzw = other; return result; } /*! @abstract Extends `other` to form a vector of sixteen 32-bit signed * (twos-complement) integers. The contents of the newly-created vector * lanes are unspecified. */ static inline SIMD_CFUNC simd_int16 simd_make_int16_undef(simd_int4 other) { simd_int16 result; result.xyzw = other; return result; } /*! @abstract Zero-extends `other` to form a vector of sixteen 32-bit signed * (twos-complement) integers. */ static inline SIMD_CFUNC simd_int16 simd_make_int16(simd_int8 other) { simd_int16 result = 0; result.lo = simd_make_int8(other); return result; } /*! @abstract Extends `other` to form a vector of sixteen 32-bit signed * (twos-complement) integers. The contents of the newly-created vector * lanes are unspecified. */ static inline SIMD_CFUNC simd_int16 simd_make_int16_undef(simd_int8 other) { simd_int16 result; result.lo = simd_make_int8(other); return result; } /*! @abstract Returns `other` unmodified. This function is a convenience for * templated and autogenerated code. */ static inline SIMD_CFUNC simd_int16 simd_make_int16(simd_int16 other) { return other; } /*! @abstract Concatenates `x` and `y` to form a vector of two 32-bit * unsigned integers. */ static inline SIMD_CFUNC simd_uint2 simd_make_uint2(unsigned int x, unsigned int y) { simd_uint2 result; result.x = x; result.y = y; return result; } /*! @abstract Zero-extends `other` to form a vector of two 32-bit unsigned * integers. */ static inline SIMD_CFUNC simd_uint2 simd_make_uint2(unsigned int other) { simd_uint2 result = 0; result.x = other; return result; } /*! @abstract Extends `other` to form a vector of two 32-bit unsigned * integers. The contents of the newly-created vector lanes are * unspecified. */ static inline SIMD_CFUNC simd_uint2 simd_make_uint2_undef(unsigned int other) { simd_uint2 result; result.x = other; return result; } /*! @abstract Returns `other` unmodified. This function is a convenience for * templated and autogenerated code. */ static inline SIMD_CFUNC simd_uint2 simd_make_uint2(simd_uint2 other) { return other; } /*! @abstract Truncates `other` to form a vector of two 32-bit unsigned * integers. */ static inline SIMD_CFUNC simd_uint2 simd_make_uint2(simd_uint3 other) { return other.xy; } /*! @abstract Truncates `other` to form a vector of two 32-bit unsigned * integers. */ static inline SIMD_CFUNC simd_uint2 simd_make_uint2(simd_uint4 other) { return other.xy; } /*! @abstract Truncates `other` to form a vector of two 32-bit unsigned * integers. */ static inline SIMD_CFUNC simd_uint2 simd_make_uint2(simd_uint8 other) { return other.xy; } /*! @abstract Truncates `other` to form a vector of two 32-bit unsigned * integers. */ static inline SIMD_CFUNC simd_uint2 simd_make_uint2(simd_uint16 other) { return other.xy; } /*! @abstract Concatenates `x`, `y` and `z` to form a vector of three 32-bit * unsigned integers. */ static inline SIMD_CFUNC simd_uint3 simd_make_uint3(unsigned int x, unsigned int y, unsigned int z) { simd_uint3 result; result.x = x; result.y = y; result.z = z; return result; } /*! @abstract Concatenates `x` and `yz` to form a vector of three 32-bit * unsigned integers. */ static inline SIMD_CFUNC simd_uint3 simd_make_uint3(unsigned int x, simd_uint2 yz) { simd_uint3 result; result.x = x; result.yz = yz; return result; } /*! @abstract Concatenates `xy` and `z` to form a vector of three 32-bit * unsigned integers. */ static inline SIMD_CFUNC simd_uint3 simd_make_uint3(simd_uint2 xy, unsigned int z) { simd_uint3 result; result.xy = xy; result.z = z; return result; } /*! @abstract Zero-extends `other` to form a vector of three 32-bit unsigned * integers. */ static inline SIMD_CFUNC simd_uint3 simd_make_uint3(unsigned int other) { simd_uint3 result = 0; result.x = other; return result; } /*! @abstract Extends `other` to form a vector of three 32-bit unsigned * integers. The contents of the newly-created vector lanes are * unspecified. */ static inline SIMD_CFUNC simd_uint3 simd_make_uint3_undef(unsigned int other) { simd_uint3 result; result.x = other; return result; } /*! @abstract Zero-extends `other` to form a vector of three 32-bit unsigned * integers. */ static inline SIMD_CFUNC simd_uint3 simd_make_uint3(simd_uint2 other) { simd_uint3 result = 0; result.xy = other; return result; } /*! @abstract Extends `other` to form a vector of three 32-bit unsigned * integers. The contents of the newly-created vector lanes are * unspecified. */ static inline SIMD_CFUNC simd_uint3 simd_make_uint3_undef(simd_uint2 other) { simd_uint3 result; result.xy = other; return result; } /*! @abstract Returns `other` unmodified. This function is a convenience for * templated and autogenerated code. */ static inline SIMD_CFUNC simd_uint3 simd_make_uint3(simd_uint3 other) { return other; } /*! @abstract Truncates `other` to form a vector of three 32-bit unsigned * integers. */ static inline SIMD_CFUNC simd_uint3 simd_make_uint3(simd_uint4 other) { return other.xyz; } /*! @abstract Truncates `other` to form a vector of three 32-bit unsigned * integers. */ static inline SIMD_CFUNC simd_uint3 simd_make_uint3(simd_uint8 other) { return other.xyz; } /*! @abstract Truncates `other` to form a vector of three 32-bit unsigned * integers. */ static inline SIMD_CFUNC simd_uint3 simd_make_uint3(simd_uint16 other) { return other.xyz; } /*! @abstract Concatenates `x`, `y`, `z` and `w` to form a vector of four * 32-bit unsigned integers. */ static inline SIMD_CFUNC simd_uint4 simd_make_uint4(unsigned int x, unsigned int y, unsigned int z, unsigned int w) { simd_uint4 result; result.x = x; result.y = y; result.z = z; result.w = w; return result; } /*! @abstract Concatenates `x`, `y` and `zw` to form a vector of four 32-bit * unsigned integers. */ static inline SIMD_CFUNC simd_uint4 simd_make_uint4(unsigned int x, unsigned int y, simd_uint2 zw) { simd_uint4 result; result.x = x; result.y = y; result.zw = zw; return result; } /*! @abstract Concatenates `x`, `yz` and `w` to form a vector of four 32-bit * unsigned integers. */ static inline SIMD_CFUNC simd_uint4 simd_make_uint4(unsigned int x, simd_uint2 yz, unsigned int w) { simd_uint4 result; result.x = x; result.yz = yz; result.w = w; return result; } /*! @abstract Concatenates `xy`, `z` and `w` to form a vector of four 32-bit * unsigned integers. */ static inline SIMD_CFUNC simd_uint4 simd_make_uint4(simd_uint2 xy, unsigned int z, unsigned int w) { simd_uint4 result; result.xy = xy; result.z = z; result.w = w; return result; } /*! @abstract Concatenates `x` and `yzw` to form a vector of four 32-bit * unsigned integers. */ static inline SIMD_CFUNC simd_uint4 simd_make_uint4(unsigned int x, simd_uint3 yzw) { simd_uint4 result; result.x = x; result.yzw = yzw; return result; } /*! @abstract Concatenates `xy` and `zw` to form a vector of four 32-bit * unsigned integers. */ static inline SIMD_CFUNC simd_uint4 simd_make_uint4(simd_uint2 xy, simd_uint2 zw) { simd_uint4 result; result.xy = xy; result.zw = zw; return result; } /*! @abstract Concatenates `xyz` and `w` to form a vector of four 32-bit * unsigned integers. */ static inline SIMD_CFUNC simd_uint4 simd_make_uint4(simd_uint3 xyz, unsigned int w) { simd_uint4 result; result.xyz = xyz; result.w = w; return result; } /*! @abstract Zero-extends `other` to form a vector of four 32-bit unsigned * integers. */ static inline SIMD_CFUNC simd_uint4 simd_make_uint4(unsigned int other) { simd_uint4 result = 0; result.x = other; return result; } /*! @abstract Extends `other` to form a vector of four 32-bit unsigned * integers. The contents of the newly-created vector lanes are * unspecified. */ static inline SIMD_CFUNC simd_uint4 simd_make_uint4_undef(unsigned int other) { simd_uint4 result; result.x = other; return result; } /*! @abstract Zero-extends `other` to form a vector of four 32-bit unsigned * integers. */ static inline SIMD_CFUNC simd_uint4 simd_make_uint4(simd_uint2 other) { simd_uint4 result = 0; result.xy = other; return result; } /*! @abstract Extends `other` to form a vector of four 32-bit unsigned * integers. The contents of the newly-created vector lanes are * unspecified. */ static inline SIMD_CFUNC simd_uint4 simd_make_uint4_undef(simd_uint2 other) { simd_uint4 result; result.xy = other; return result; } /*! @abstract Zero-extends `other` to form a vector of four 32-bit unsigned * integers. */ static inline SIMD_CFUNC simd_uint4 simd_make_uint4(simd_uint3 other) { simd_uint4 result = 0; result.xyz = other; return result; } /*! @abstract Extends `other` to form a vector of four 32-bit unsigned * integers. The contents of the newly-created vector lanes are * unspecified. */ static inline SIMD_CFUNC simd_uint4 simd_make_uint4_undef(simd_uint3 other) { simd_uint4 result; result.xyz = other; return result; } /*! @abstract Returns `other` unmodified. This function is a convenience for * templated and autogenerated code. */ static inline SIMD_CFUNC simd_uint4 simd_make_uint4(simd_uint4 other) { return other; } /*! @abstract Truncates `other` to form a vector of four 32-bit unsigned * integers. */ static inline SIMD_CFUNC simd_uint4 simd_make_uint4(simd_uint8 other) { return other.xyzw; } /*! @abstract Truncates `other` to form a vector of four 32-bit unsigned * integers. */ static inline SIMD_CFUNC simd_uint4 simd_make_uint4(simd_uint16 other) { return other.xyzw; } /*! @abstract Concatenates `lo` and `hi` to form a vector of eight 32-bit * unsigned integers. */ static inline SIMD_CFUNC simd_uint8 simd_make_uint8(simd_uint4 lo, simd_uint4 hi) { simd_uint8 result; result.lo = lo; result.hi = hi; return result; } /*! @abstract Zero-extends `other` to form a vector of eight 32-bit unsigned * integers. */ static inline SIMD_CFUNC simd_uint8 simd_make_uint8(unsigned int other) { simd_uint8 result = 0; result.x = other; return result; } /*! @abstract Extends `other` to form a vector of eight 32-bit unsigned * integers. The contents of the newly-created vector lanes are * unspecified. */ static inline SIMD_CFUNC simd_uint8 simd_make_uint8_undef(unsigned int other) { simd_uint8 result; result.x = other; return result; } /*! @abstract Zero-extends `other` to form a vector of eight 32-bit unsigned * integers. */ static inline SIMD_CFUNC simd_uint8 simd_make_uint8(simd_uint2 other) { simd_uint8 result = 0; result.xy = other; return result; } /*! @abstract Extends `other` to form a vector of eight 32-bit unsigned * integers. The contents of the newly-created vector lanes are * unspecified. */ static inline SIMD_CFUNC simd_uint8 simd_make_uint8_undef(simd_uint2 other) { simd_uint8 result; result.xy = other; return result; } /*! @abstract Zero-extends `other` to form a vector of eight 32-bit unsigned * integers. */ static inline SIMD_CFUNC simd_uint8 simd_make_uint8(simd_uint3 other) { simd_uint8 result = 0; result.xyz = other; return result; } /*! @abstract Extends `other` to form a vector of eight 32-bit unsigned * integers. The contents of the newly-created vector lanes are * unspecified. */ static inline SIMD_CFUNC simd_uint8 simd_make_uint8_undef(simd_uint3 other) { simd_uint8 result; result.xyz = other; return result; } /*! @abstract Zero-extends `other` to form a vector of eight 32-bit unsigned * integers. */ static inline SIMD_CFUNC simd_uint8 simd_make_uint8(simd_uint4 other) { simd_uint8 result = 0; result.xyzw = other; return result; } /*! @abstract Extends `other` to form a vector of eight 32-bit unsigned * integers. The contents of the newly-created vector lanes are * unspecified. */ static inline SIMD_CFUNC simd_uint8 simd_make_uint8_undef(simd_uint4 other) { simd_uint8 result; result.xyzw = other; return result; } /*! @abstract Returns `other` unmodified. This function is a convenience for * templated and autogenerated code. */ static inline SIMD_CFUNC simd_uint8 simd_make_uint8(simd_uint8 other) { return other; } /*! @abstract Truncates `other` to form a vector of eight 32-bit unsigned * integers. */ static inline SIMD_CFUNC simd_uint8 simd_make_uint8(simd_uint16 other) { return simd_make_uint8(other.lo); } /*! @abstract Concatenates `lo` and `hi` to form a vector of sixteen 32-bit * unsigned integers. */ static inline SIMD_CFUNC simd_uint16 simd_make_uint16(simd_uint8 lo, simd_uint8 hi) { simd_uint16 result; result.lo = lo; result.hi = hi; return result; } /*! @abstract Zero-extends `other` to form a vector of sixteen 32-bit * unsigned integers. */ static inline SIMD_CFUNC simd_uint16 simd_make_uint16(unsigned int other) { simd_uint16 result = 0; result.x = other; return result; } /*! @abstract Extends `other` to form a vector of sixteen 32-bit unsigned * integers. The contents of the newly-created vector lanes are * unspecified. */ static inline SIMD_CFUNC simd_uint16 simd_make_uint16_undef(unsigned int other) { simd_uint16 result; result.x = other; return result; } /*! @abstract Zero-extends `other` to form a vector of sixteen 32-bit * unsigned integers. */ static inline SIMD_CFUNC simd_uint16 simd_make_uint16(simd_uint2 other) { simd_uint16 result = 0; result.xy = other; return result; } /*! @abstract Extends `other` to form a vector of sixteen 32-bit unsigned * integers. The contents of the newly-created vector lanes are * unspecified. */ static inline SIMD_CFUNC simd_uint16 simd_make_uint16_undef(simd_uint2 other) { simd_uint16 result; result.xy = other; return result; } /*! @abstract Zero-extends `other` to form a vector of sixteen 32-bit * unsigned integers. */ static inline SIMD_CFUNC simd_uint16 simd_make_uint16(simd_uint3 other) { simd_uint16 result = 0; result.xyz = other; return result; } /*! @abstract Extends `other` to form a vector of sixteen 32-bit unsigned * integers. The contents of the newly-created vector lanes are * unspecified. */ static inline SIMD_CFUNC simd_uint16 simd_make_uint16_undef(simd_uint3 other) { simd_uint16 result; result.xyz = other; return result; } /*! @abstract Zero-extends `other` to form a vector of sixteen 32-bit * unsigned integers. */ static inline SIMD_CFUNC simd_uint16 simd_make_uint16(simd_uint4 other) { simd_uint16 result = 0; result.xyzw = other; return result; } /*! @abstract Extends `other` to form a vector of sixteen 32-bit unsigned * integers. The contents of the newly-created vector lanes are * unspecified. */ static inline SIMD_CFUNC simd_uint16 simd_make_uint16_undef(simd_uint4 other) { simd_uint16 result; result.xyzw = other; return result; } /*! @abstract Zero-extends `other` to form a vector of sixteen 32-bit * unsigned integers. */ static inline SIMD_CFUNC simd_uint16 simd_make_uint16(simd_uint8 other) { simd_uint16 result = 0; result.lo = simd_make_uint8(other); return result; } /*! @abstract Extends `other` to form a vector of sixteen 32-bit unsigned * integers. The contents of the newly-created vector lanes are * unspecified. */ static inline SIMD_CFUNC simd_uint16 simd_make_uint16_undef(simd_uint8 other) { simd_uint16 result; result.lo = simd_make_uint8(other); return result; } /*! @abstract Returns `other` unmodified. This function is a convenience for * templated and autogenerated code. */ static inline SIMD_CFUNC simd_uint16 simd_make_uint16(simd_uint16 other) { return other; } /*! @abstract Concatenates `x` and `y` to form a vector of two 32-bit * floating-point numbers. */ static inline SIMD_CFUNC simd_float2 simd_make_float2(float x, float y) { simd_float2 result; result.x = x; result.y = y; return result; } /*! @abstract Zero-extends `other` to form a vector of two 32-bit floating- * point numbers. */ static inline SIMD_CFUNC simd_float2 simd_make_float2(float other) { simd_float2 result = 0; result.x = other; return result; } /*! @abstract Extends `other` to form a vector of two 32-bit floating-point * numbers. The contents of the newly-created vector lanes are unspecified. */ static inline SIMD_CFUNC simd_float2 simd_make_float2_undef(float other) { simd_float2 result; result.x = other; return result; } /*! @abstract Returns `other` unmodified. This function is a convenience for * templated and autogenerated code. */ static inline SIMD_CFUNC simd_float2 simd_make_float2(simd_float2 other) { return other; } /*! @abstract Truncates `other` to form a vector of two 32-bit floating- * point numbers. */ static inline SIMD_CFUNC simd_float2 simd_make_float2(simd_float3 other) { return other.xy; } /*! @abstract Truncates `other` to form a vector of two 32-bit floating- * point numbers. */ static inline SIMD_CFUNC simd_float2 simd_make_float2(simd_float4 other) { return other.xy; } /*! @abstract Truncates `other` to form a vector of two 32-bit floating- * point numbers. */ static inline SIMD_CFUNC simd_float2 simd_make_float2(simd_float8 other) { return other.xy; } /*! @abstract Truncates `other` to form a vector of two 32-bit floating- * point numbers. */ static inline SIMD_CFUNC simd_float2 simd_make_float2(simd_float16 other) { return other.xy; } /*! @abstract Concatenates `x`, `y` and `z` to form a vector of three 32-bit * floating-point numbers. */ static inline SIMD_CFUNC simd_float3 simd_make_float3(float x, float y, float z) { simd_float3 result; result.x = x; result.y = y; result.z = z; return result; } /*! @abstract Concatenates `x` and `yz` to form a vector of three 32-bit * floating-point numbers. */ static inline SIMD_CFUNC simd_float3 simd_make_float3(float x, simd_float2 yz) { simd_float3 result; result.x = x; result.yz = yz; return result; } /*! @abstract Concatenates `xy` and `z` to form a vector of three 32-bit * floating-point numbers. */ static inline SIMD_CFUNC simd_float3 simd_make_float3(simd_float2 xy, float z) { simd_float3 result; result.xy = xy; result.z = z; return result; } /*! @abstract Zero-extends `other` to form a vector of three 32-bit * floating-point numbers. */ static inline SIMD_CFUNC simd_float3 simd_make_float3(float other) { simd_float3 result = 0; result.x = other; return result; } /*! @abstract Extends `other` to form a vector of three 32-bit floating- * point numbers. The contents of the newly-created vector lanes are * unspecified. */ static inline SIMD_CFUNC simd_float3 simd_make_float3_undef(float other) { simd_float3 result; result.x = other; return result; } /*! @abstract Zero-extends `other` to form a vector of three 32-bit * floating-point numbers. */ static inline SIMD_CFUNC simd_float3 simd_make_float3(simd_float2 other) { simd_float3 result = 0; result.xy = other; return result; } /*! @abstract Extends `other` to form a vector of three 32-bit floating- * point numbers. The contents of the newly-created vector lanes are * unspecified. */ static inline SIMD_CFUNC simd_float3 simd_make_float3_undef(simd_float2 other) { simd_float3 result; result.xy = other; return result; } /*! @abstract Returns `other` unmodified. This function is a convenience for * templated and autogenerated code. */ static inline SIMD_CFUNC simd_float3 simd_make_float3(simd_float3 other) { return other; } /*! @abstract Truncates `other` to form a vector of three 32-bit floating- * point numbers. */ static inline SIMD_CFUNC simd_float3 simd_make_float3(simd_float4 other) { return other.xyz; } /*! @abstract Truncates `other` to form a vector of three 32-bit floating- * point numbers. */ static inline SIMD_CFUNC simd_float3 simd_make_float3(simd_float8 other) { return other.xyz; } /*! @abstract Truncates `other` to form a vector of three 32-bit floating- * point numbers. */ static inline SIMD_CFUNC simd_float3 simd_make_float3(simd_float16 other) { return other.xyz; } /*! @abstract Concatenates `x`, `y`, `z` and `w` to form a vector of four * 32-bit floating-point numbers. */ static inline SIMD_CFUNC simd_float4 simd_make_float4(float x, float y, float z, float w) { simd_float4 result; result.x = x; result.y = y; result.z = z; result.w = w; return result; } /*! @abstract Concatenates `x`, `y` and `zw` to form a vector of four 32-bit * floating-point numbers. */ static inline SIMD_CFUNC simd_float4 simd_make_float4(float x, float y, simd_float2 zw) { simd_float4 result; result.x = x; result.y = y; result.zw = zw; return result; } /*! @abstract Concatenates `x`, `yz` and `w` to form a vector of four 32-bit * floating-point numbers. */ static inline SIMD_CFUNC simd_float4 simd_make_float4(float x, simd_float2 yz, float w) { simd_float4 result; result.x = x; result.yz = yz; result.w = w; return result; } /*! @abstract Concatenates `xy`, `z` and `w` to form a vector of four 32-bit * floating-point numbers. */ static inline SIMD_CFUNC simd_float4 simd_make_float4(simd_float2 xy, float z, float w) { simd_float4 result; result.xy = xy; result.z = z; result.w = w; return result; } /*! @abstract Concatenates `x` and `yzw` to form a vector of four 32-bit * floating-point numbers. */ static inline SIMD_CFUNC simd_float4 simd_make_float4(float x, simd_float3 yzw) { simd_float4 result; result.x = x; result.yzw = yzw; return result; } /*! @abstract Concatenates `xy` and `zw` to form a vector of four 32-bit * floating-point numbers. */ static inline SIMD_CFUNC simd_float4 simd_make_float4(simd_float2 xy, simd_float2 zw) { simd_float4 result; result.xy = xy; result.zw = zw; return result; } /*! @abstract Concatenates `xyz` and `w` to form a vector of four 32-bit * floating-point numbers. */ static inline SIMD_CFUNC simd_float4 simd_make_float4(simd_float3 xyz, float w) { simd_float4 result; result.xyz = xyz; result.w = w; return result; } /*! @abstract Zero-extends `other` to form a vector of four 32-bit floating- * point numbers. */ static inline SIMD_CFUNC simd_float4 simd_make_float4(float other) { simd_float4 result = 0; result.x = other; return result; } /*! @abstract Extends `other` to form a vector of four 32-bit floating-point * numbers. The contents of the newly-created vector lanes are unspecified. */ static inline SIMD_CFUNC simd_float4 simd_make_float4_undef(float other) { simd_float4 result; result.x = other; return result; } /*! @abstract Zero-extends `other` to form a vector of four 32-bit floating- * point numbers. */ static inline SIMD_CFUNC simd_float4 simd_make_float4(simd_float2 other) { simd_float4 result = 0; result.xy = other; return result; } /*! @abstract Extends `other` to form a vector of four 32-bit floating-point * numbers. The contents of the newly-created vector lanes are unspecified. */ static inline SIMD_CFUNC simd_float4 simd_make_float4_undef(simd_float2 other) { simd_float4 result; result.xy = other; return result; } /*! @abstract Zero-extends `other` to form a vector of four 32-bit floating- * point numbers. */ static inline SIMD_CFUNC simd_float4 simd_make_float4(simd_float3 other) { simd_float4 result = 0; result.xyz = other; return result; } /*! @abstract Extends `other` to form a vector of four 32-bit floating-point * numbers. The contents of the newly-created vector lanes are unspecified. */ static inline SIMD_CFUNC simd_float4 simd_make_float4_undef(simd_float3 other) { simd_float4 result; result.xyz = other; return result; } /*! @abstract Returns `other` unmodified. This function is a convenience for * templated and autogenerated code. */ static inline SIMD_CFUNC simd_float4 simd_make_float4(simd_float4 other) { return other; } /*! @abstract Truncates `other` to form a vector of four 32-bit floating- * point numbers. */ static inline SIMD_CFUNC simd_float4 simd_make_float4(simd_float8 other) { return other.xyzw; } /*! @abstract Truncates `other` to form a vector of four 32-bit floating- * point numbers. */ static inline SIMD_CFUNC simd_float4 simd_make_float4(simd_float16 other) { return other.xyzw; } /*! @abstract Concatenates `lo` and `hi` to form a vector of eight 32-bit * floating-point numbers. */ static inline SIMD_CFUNC simd_float8 simd_make_float8(simd_float4 lo, simd_float4 hi) { simd_float8 result; result.lo = lo; result.hi = hi; return result; } /*! @abstract Zero-extends `other` to form a vector of eight 32-bit * floating-point numbers. */ static inline SIMD_CFUNC simd_float8 simd_make_float8(float other) { simd_float8 result = 0; result.x = other; return result; } /*! @abstract Extends `other` to form a vector of eight 32-bit floating- * point numbers. The contents of the newly-created vector lanes are * unspecified. */ static inline SIMD_CFUNC simd_float8 simd_make_float8_undef(float other) { simd_float8 result; result.x = other; return result; } /*! @abstract Zero-extends `other` to form a vector of eight 32-bit * floating-point numbers. */ static inline SIMD_CFUNC simd_float8 simd_make_float8(simd_float2 other) { simd_float8 result = 0; result.xy = other; return result; } /*! @abstract Extends `other` to form a vector of eight 32-bit floating- * point numbers. The contents of the newly-created vector lanes are * unspecified. */ static inline SIMD_CFUNC simd_float8 simd_make_float8_undef(simd_float2 other) { simd_float8 result; result.xy = other; return result; } /*! @abstract Zero-extends `other` to form a vector of eight 32-bit * floating-point numbers. */ static inline SIMD_CFUNC simd_float8 simd_make_float8(simd_float3 other) { simd_float8 result = 0; result.xyz = other; return result; } /*! @abstract Extends `other` to form a vector of eight 32-bit floating- * point numbers. The contents of the newly-created vector lanes are * unspecified. */ static inline SIMD_CFUNC simd_float8 simd_make_float8_undef(simd_float3 other) { simd_float8 result; result.xyz = other; return result; } /*! @abstract Zero-extends `other` to form a vector of eight 32-bit * floating-point numbers. */ static inline SIMD_CFUNC simd_float8 simd_make_float8(simd_float4 other) { simd_float8 result = 0; result.xyzw = other; return result; } /*! @abstract Extends `other` to form a vector of eight 32-bit floating- * point numbers. The contents of the newly-created vector lanes are * unspecified. */ static inline SIMD_CFUNC simd_float8 simd_make_float8_undef(simd_float4 other) { simd_float8 result; result.xyzw = other; return result; } /*! @abstract Returns `other` unmodified. This function is a convenience for * templated and autogenerated code. */ static inline SIMD_CFUNC simd_float8 simd_make_float8(simd_float8 other) { return other; } /*! @abstract Truncates `other` to form a vector of eight 32-bit floating- * point numbers. */ static inline SIMD_CFUNC simd_float8 simd_make_float8(simd_float16 other) { return simd_make_float8(other.lo); } /*! @abstract Concatenates `lo` and `hi` to form a vector of sixteen 32-bit * floating-point numbers. */ static inline SIMD_CFUNC simd_float16 simd_make_float16(simd_float8 lo, simd_float8 hi) { simd_float16 result; result.lo = lo; result.hi = hi; return result; } /*! @abstract Zero-extends `other` to form a vector of sixteen 32-bit * floating-point numbers. */ static inline SIMD_CFUNC simd_float16 simd_make_float16(float other) { simd_float16 result = 0; result.x = other; return result; } /*! @abstract Extends `other` to form a vector of sixteen 32-bit floating- * point numbers. The contents of the newly-created vector lanes are * unspecified. */ static inline SIMD_CFUNC simd_float16 simd_make_float16_undef(float other) { simd_float16 result; result.x = other; return result; } /*! @abstract Zero-extends `other` to form a vector of sixteen 32-bit * floating-point numbers. */ static inline SIMD_CFUNC simd_float16 simd_make_float16(simd_float2 other) { simd_float16 result = 0; result.xy = other; return result; } /*! @abstract Extends `other` to form a vector of sixteen 32-bit floating- * point numbers. The contents of the newly-created vector lanes are * unspecified. */ static inline SIMD_CFUNC simd_float16 simd_make_float16_undef(simd_float2 other) { simd_float16 result; result.xy = other; return result; } /*! @abstract Zero-extends `other` to form a vector of sixteen 32-bit * floating-point numbers. */ static inline SIMD_CFUNC simd_float16 simd_make_float16(simd_float3 other) { simd_float16 result = 0; result.xyz = other; return result; } /*! @abstract Extends `other` to form a vector of sixteen 32-bit floating- * point numbers. The contents of the newly-created vector lanes are * unspecified. */ static inline SIMD_CFUNC simd_float16 simd_make_float16_undef(simd_float3 other) { simd_float16 result; result.xyz = other; return result; } /*! @abstract Zero-extends `other` to form a vector of sixteen 32-bit * floating-point numbers. */ static inline SIMD_CFUNC simd_float16 simd_make_float16(simd_float4 other) { simd_float16 result = 0; result.xyzw = other; return result; } /*! @abstract Extends `other` to form a vector of sixteen 32-bit floating- * point numbers. The contents of the newly-created vector lanes are * unspecified. */ static inline SIMD_CFUNC simd_float16 simd_make_float16_undef(simd_float4 other) { simd_float16 result; result.xyzw = other; return result; } /*! @abstract Zero-extends `other` to form a vector of sixteen 32-bit * floating-point numbers. */ static inline SIMD_CFUNC simd_float16 simd_make_float16(simd_float8 other) { simd_float16 result = 0; result.lo = simd_make_float8(other); return result; } /*! @abstract Extends `other` to form a vector of sixteen 32-bit floating- * point numbers. The contents of the newly-created vector lanes are * unspecified. */ static inline SIMD_CFUNC simd_float16 simd_make_float16_undef(simd_float8 other) { simd_float16 result; result.lo = simd_make_float8(other); return result; } /*! @abstract Returns `other` unmodified. This function is a convenience for * templated and autogenerated code. */ static inline SIMD_CFUNC simd_float16 simd_make_float16(simd_float16 other) { return other; } /*! @abstract Concatenates `x` and `y` to form a vector of two 64-bit signed * (twos-complement) integers. */ static inline SIMD_CFUNC simd_long2 simd_make_long2(simd_long1 x, simd_long1 y) { simd_long2 result; result.x = x; result.y = y; return result; } /*! @abstract Zero-extends `other` to form a vector of two 64-bit signed * (twos-complement) integers. */ static inline SIMD_CFUNC simd_long2 simd_make_long2(simd_long1 other) { simd_long2 result = 0; result.x = other; return result; } /*! @abstract Extends `other` to form a vector of two 64-bit signed (twos- * complement) integers. The contents of the newly-created vector lanes are * unspecified. */ static inline SIMD_CFUNC simd_long2 simd_make_long2_undef(simd_long1 other) { simd_long2 result; result.x = other; return result; } /*! @abstract Returns `other` unmodified. This function is a convenience for * templated and autogenerated code. */ static inline SIMD_CFUNC simd_long2 simd_make_long2(simd_long2 other) { return other; } /*! @abstract Truncates `other` to form a vector of two 64-bit signed (twos- * complement) integers. */ static inline SIMD_CFUNC simd_long2 simd_make_long2(simd_long3 other) { return other.xy; } /*! @abstract Truncates `other` to form a vector of two 64-bit signed (twos- * complement) integers. */ static inline SIMD_CFUNC simd_long2 simd_make_long2(simd_long4 other) { return other.xy; } /*! @abstract Truncates `other` to form a vector of two 64-bit signed (twos- * complement) integers. */ static inline SIMD_CFUNC simd_long2 simd_make_long2(simd_long8 other) { return other.xy; } /*! @abstract Concatenates `x`, `y` and `z` to form a vector of three 64-bit * signed (twos-complement) integers. */ static inline SIMD_CFUNC simd_long3 simd_make_long3(simd_long1 x, simd_long1 y, simd_long1 z) { simd_long3 result; result.x = x; result.y = y; result.z = z; return result; } /*! @abstract Concatenates `x` and `yz` to form a vector of three 64-bit * signed (twos-complement) integers. */ static inline SIMD_CFUNC simd_long3 simd_make_long3(simd_long1 x, simd_long2 yz) { simd_long3 result; result.x = x; result.yz = yz; return result; } /*! @abstract Concatenates `xy` and `z` to form a vector of three 64-bit * signed (twos-complement) integers. */ static inline SIMD_CFUNC simd_long3 simd_make_long3(simd_long2 xy, simd_long1 z) { simd_long3 result; result.xy = xy; result.z = z; return result; } /*! @abstract Zero-extends `other` to form a vector of three 64-bit signed * (twos-complement) integers. */ static inline SIMD_CFUNC simd_long3 simd_make_long3(simd_long1 other) { simd_long3 result = 0; result.x = other; return result; } /*! @abstract Extends `other` to form a vector of three 64-bit signed (twos- * complement) integers. The contents of the newly-created vector lanes are * unspecified. */ static inline SIMD_CFUNC simd_long3 simd_make_long3_undef(simd_long1 other) { simd_long3 result; result.x = other; return result; } /*! @abstract Zero-extends `other` to form a vector of three 64-bit signed * (twos-complement) integers. */ static inline SIMD_CFUNC simd_long3 simd_make_long3(simd_long2 other) { simd_long3 result = 0; result.xy = other; return result; } /*! @abstract Extends `other` to form a vector of three 64-bit signed (twos- * complement) integers. The contents of the newly-created vector lanes are * unspecified. */ static inline SIMD_CFUNC simd_long3 simd_make_long3_undef(simd_long2 other) { simd_long3 result; result.xy = other; return result; } /*! @abstract Returns `other` unmodified. This function is a convenience for * templated and autogenerated code. */ static inline SIMD_CFUNC simd_long3 simd_make_long3(simd_long3 other) { return other; } /*! @abstract Truncates `other` to form a vector of three 64-bit signed * (twos-complement) integers. */ static inline SIMD_CFUNC simd_long3 simd_make_long3(simd_long4 other) { return other.xyz; } /*! @abstract Truncates `other` to form a vector of three 64-bit signed * (twos-complement) integers. */ static inline SIMD_CFUNC simd_long3 simd_make_long3(simd_long8 other) { return other.xyz; } /*! @abstract Concatenates `x`, `y`, `z` and `w` to form a vector of four * 64-bit signed (twos-complement) integers. */ static inline SIMD_CFUNC simd_long4 simd_make_long4(simd_long1 x, simd_long1 y, simd_long1 z, simd_long1 w) { simd_long4 result; result.x = x; result.y = y; result.z = z; result.w = w; return result; } /*! @abstract Concatenates `x`, `y` and `zw` to form a vector of four 64-bit * signed (twos-complement) integers. */ static inline SIMD_CFUNC simd_long4 simd_make_long4(simd_long1 x, simd_long1 y, simd_long2 zw) { simd_long4 result; result.x = x; result.y = y; result.zw = zw; return result; } /*! @abstract Concatenates `x`, `yz` and `w` to form a vector of four 64-bit * signed (twos-complement) integers. */ static inline SIMD_CFUNC simd_long4 simd_make_long4(simd_long1 x, simd_long2 yz, simd_long1 w) { simd_long4 result; result.x = x; result.yz = yz; result.w = w; return result; } /*! @abstract Concatenates `xy`, `z` and `w` to form a vector of four 64-bit * signed (twos-complement) integers. */ static inline SIMD_CFUNC simd_long4 simd_make_long4(simd_long2 xy, simd_long1 z, simd_long1 w) { simd_long4 result; result.xy = xy; result.z = z; result.w = w; return result; } /*! @abstract Concatenates `x` and `yzw` to form a vector of four 64-bit * signed (twos-complement) integers. */ static inline SIMD_CFUNC simd_long4 simd_make_long4(simd_long1 x, simd_long3 yzw) { simd_long4 result; result.x = x; result.yzw = yzw; return result; } /*! @abstract Concatenates `xy` and `zw` to form a vector of four 64-bit * signed (twos-complement) integers. */ static inline SIMD_CFUNC simd_long4 simd_make_long4(simd_long2 xy, simd_long2 zw) { simd_long4 result; result.xy = xy; result.zw = zw; return result; } /*! @abstract Concatenates `xyz` and `w` to form a vector of four 64-bit * signed (twos-complement) integers. */ static inline SIMD_CFUNC simd_long4 simd_make_long4(simd_long3 xyz, simd_long1 w) { simd_long4 result; result.xyz = xyz; result.w = w; return result; } /*! @abstract Zero-extends `other` to form a vector of four 64-bit signed * (twos-complement) integers. */ static inline SIMD_CFUNC simd_long4 simd_make_long4(simd_long1 other) { simd_long4 result = 0; result.x = other; return result; } /*! @abstract Extends `other` to form a vector of four 64-bit signed (twos- * complement) integers. The contents of the newly-created vector lanes are * unspecified. */ static inline SIMD_CFUNC simd_long4 simd_make_long4_undef(simd_long1 other) { simd_long4 result; result.x = other; return result; } /*! @abstract Zero-extends `other` to form a vector of four 64-bit signed * (twos-complement) integers. */ static inline SIMD_CFUNC simd_long4 simd_make_long4(simd_long2 other) { simd_long4 result = 0; result.xy = other; return result; } /*! @abstract Extends `other` to form a vector of four 64-bit signed (twos- * complement) integers. The contents of the newly-created vector lanes are * unspecified. */ static inline SIMD_CFUNC simd_long4 simd_make_long4_undef(simd_long2 other) { simd_long4 result; result.xy = other; return result; } /*! @abstract Zero-extends `other` to form a vector of four 64-bit signed * (twos-complement) integers. */ static inline SIMD_CFUNC simd_long4 simd_make_long4(simd_long3 other) { simd_long4 result = 0; result.xyz = other; return result; } /*! @abstract Extends `other` to form a vector of four 64-bit signed (twos- * complement) integers. The contents of the newly-created vector lanes are * unspecified. */ static inline SIMD_CFUNC simd_long4 simd_make_long4_undef(simd_long3 other) { simd_long4 result; result.xyz = other; return result; } /*! @abstract Returns `other` unmodified. This function is a convenience for * templated and autogenerated code. */ static inline SIMD_CFUNC simd_long4 simd_make_long4(simd_long4 other) { return other; } /*! @abstract Truncates `other` to form a vector of four 64-bit signed * (twos-complement) integers. */ static inline SIMD_CFUNC simd_long4 simd_make_long4(simd_long8 other) { return other.xyzw; } /*! @abstract Concatenates `lo` and `hi` to form a vector of eight 64-bit * signed (twos-complement) integers. */ static inline SIMD_CFUNC simd_long8 simd_make_long8(simd_long4 lo, simd_long4 hi) { simd_long8 result; result.lo = lo; result.hi = hi; return result; } /*! @abstract Zero-extends `other` to form a vector of eight 64-bit signed * (twos-complement) integers. */ static inline SIMD_CFUNC simd_long8 simd_make_long8(simd_long1 other) { simd_long8 result = 0; result.x = other; return result; } /*! @abstract Extends `other` to form a vector of eight 64-bit signed (twos- * complement) integers. The contents of the newly-created vector lanes are * unspecified. */ static inline SIMD_CFUNC simd_long8 simd_make_long8_undef(simd_long1 other) { simd_long8 result; result.x = other; return result; } /*! @abstract Zero-extends `other` to form a vector of eight 64-bit signed * (twos-complement) integers. */ static inline SIMD_CFUNC simd_long8 simd_make_long8(simd_long2 other) { simd_long8 result = 0; result.xy = other; return result; } /*! @abstract Extends `other` to form a vector of eight 64-bit signed (twos- * complement) integers. The contents of the newly-created vector lanes are * unspecified. */ static inline SIMD_CFUNC simd_long8 simd_make_long8_undef(simd_long2 other) { simd_long8 result; result.xy = other; return result; } /*! @abstract Zero-extends `other` to form a vector of eight 64-bit signed * (twos-complement) integers. */ static inline SIMD_CFUNC simd_long8 simd_make_long8(simd_long3 other) { simd_long8 result = 0; result.xyz = other; return result; } /*! @abstract Extends `other` to form a vector of eight 64-bit signed (twos- * complement) integers. The contents of the newly-created vector lanes are * unspecified. */ static inline SIMD_CFUNC simd_long8 simd_make_long8_undef(simd_long3 other) { simd_long8 result; result.xyz = other; return result; } /*! @abstract Zero-extends `other` to form a vector of eight 64-bit signed * (twos-complement) integers. */ static inline SIMD_CFUNC simd_long8 simd_make_long8(simd_long4 other) { simd_long8 result = 0; result.xyzw = other; return result; } /*! @abstract Extends `other` to form a vector of eight 64-bit signed (twos- * complement) integers. The contents of the newly-created vector lanes are * unspecified. */ static inline SIMD_CFUNC simd_long8 simd_make_long8_undef(simd_long4 other) { simd_long8 result; result.xyzw = other; return result; } /*! @abstract Returns `other` unmodified. This function is a convenience for * templated and autogenerated code. */ static inline SIMD_CFUNC simd_long8 simd_make_long8(simd_long8 other) { return other; } /*! @abstract Concatenates `x` and `y` to form a vector of two 64-bit * unsigned integers. */ static inline SIMD_CFUNC simd_ulong2 simd_make_ulong2(simd_ulong1 x, simd_ulong1 y) { simd_ulong2 result; result.x = x; result.y = y; return result; } /*! @abstract Zero-extends `other` to form a vector of two 64-bit unsigned * integers. */ static inline SIMD_CFUNC simd_ulong2 simd_make_ulong2(simd_ulong1 other) { simd_ulong2 result = 0; result.x = other; return result; } /*! @abstract Extends `other` to form a vector of two 64-bit unsigned * integers. The contents of the newly-created vector lanes are * unspecified. */ static inline SIMD_CFUNC simd_ulong2 simd_make_ulong2_undef(simd_ulong1 other) { simd_ulong2 result; result.x = other; return result; } /*! @abstract Returns `other` unmodified. This function is a convenience for * templated and autogenerated code. */ static inline SIMD_CFUNC simd_ulong2 simd_make_ulong2(simd_ulong2 other) { return other; } /*! @abstract Truncates `other` to form a vector of two 64-bit unsigned * integers. */ static inline SIMD_CFUNC simd_ulong2 simd_make_ulong2(simd_ulong3 other) { return other.xy; } /*! @abstract Truncates `other` to form a vector of two 64-bit unsigned * integers. */ static inline SIMD_CFUNC simd_ulong2 simd_make_ulong2(simd_ulong4 other) { return other.xy; } /*! @abstract Truncates `other` to form a vector of two 64-bit unsigned * integers. */ static inline SIMD_CFUNC simd_ulong2 simd_make_ulong2(simd_ulong8 other) { return other.xy; } /*! @abstract Concatenates `x`, `y` and `z` to form a vector of three 64-bit * unsigned integers. */ static inline SIMD_CFUNC simd_ulong3 simd_make_ulong3(simd_ulong1 x, simd_ulong1 y, simd_ulong1 z) { simd_ulong3 result; result.x = x; result.y = y; result.z = z; return result; } /*! @abstract Concatenates `x` and `yz` to form a vector of three 64-bit * unsigned integers. */ static inline SIMD_CFUNC simd_ulong3 simd_make_ulong3(simd_ulong1 x, simd_ulong2 yz) { simd_ulong3 result; result.x = x; result.yz = yz; return result; } /*! @abstract Concatenates `xy` and `z` to form a vector of three 64-bit * unsigned integers. */ static inline SIMD_CFUNC simd_ulong3 simd_make_ulong3(simd_ulong2 xy, simd_ulong1 z) { simd_ulong3 result; result.xy = xy; result.z = z; return result; } /*! @abstract Zero-extends `other` to form a vector of three 64-bit unsigned * integers. */ static inline SIMD_CFUNC simd_ulong3 simd_make_ulong3(simd_ulong1 other) { simd_ulong3 result = 0; result.x = other; return result; } /*! @abstract Extends `other` to form a vector of three 64-bit unsigned * integers. The contents of the newly-created vector lanes are * unspecified. */ static inline SIMD_CFUNC simd_ulong3 simd_make_ulong3_undef(simd_ulong1 other) { simd_ulong3 result; result.x = other; return result; } /*! @abstract Zero-extends `other` to form a vector of three 64-bit unsigned * integers. */ static inline SIMD_CFUNC simd_ulong3 simd_make_ulong3(simd_ulong2 other) { simd_ulong3 result = 0; result.xy = other; return result; } /*! @abstract Extends `other` to form a vector of three 64-bit unsigned * integers. The contents of the newly-created vector lanes are * unspecified. */ static inline SIMD_CFUNC simd_ulong3 simd_make_ulong3_undef(simd_ulong2 other) { simd_ulong3 result; result.xy = other; return result; } /*! @abstract Returns `other` unmodified. This function is a convenience for * templated and autogenerated code. */ static inline SIMD_CFUNC simd_ulong3 simd_make_ulong3(simd_ulong3 other) { return other; } /*! @abstract Truncates `other` to form a vector of three 64-bit unsigned * integers. */ static inline SIMD_CFUNC simd_ulong3 simd_make_ulong3(simd_ulong4 other) { return other.xyz; } /*! @abstract Truncates `other` to form a vector of three 64-bit unsigned * integers. */ static inline SIMD_CFUNC simd_ulong3 simd_make_ulong3(simd_ulong8 other) { return other.xyz; } /*! @abstract Concatenates `x`, `y`, `z` and `w` to form a vector of four * 64-bit unsigned integers. */ static inline SIMD_CFUNC simd_ulong4 simd_make_ulong4(simd_ulong1 x, simd_ulong1 y, simd_ulong1 z, simd_ulong1 w) { simd_ulong4 result; result.x = x; result.y = y; result.z = z; result.w = w; return result; } /*! @abstract Concatenates `x`, `y` and `zw` to form a vector of four 64-bit * unsigned integers. */ static inline SIMD_CFUNC simd_ulong4 simd_make_ulong4(simd_ulong1 x, simd_ulong1 y, simd_ulong2 zw) { simd_ulong4 result; result.x = x; result.y = y; result.zw = zw; return result; } /*! @abstract Concatenates `x`, `yz` and `w` to form a vector of four 64-bit * unsigned integers. */ static inline SIMD_CFUNC simd_ulong4 simd_make_ulong4(simd_ulong1 x, simd_ulong2 yz, simd_ulong1 w) { simd_ulong4 result; result.x = x; result.yz = yz; result.w = w; return result; } /*! @abstract Concatenates `xy`, `z` and `w` to form a vector of four 64-bit * unsigned integers. */ static inline SIMD_CFUNC simd_ulong4 simd_make_ulong4(simd_ulong2 xy, simd_ulong1 z, simd_ulong1 w) { simd_ulong4 result; result.xy = xy; result.z = z; result.w = w; return result; } /*! @abstract Concatenates `x` and `yzw` to form a vector of four 64-bit * unsigned integers. */ static inline SIMD_CFUNC simd_ulong4 simd_make_ulong4(simd_ulong1 x, simd_ulong3 yzw) { simd_ulong4 result; result.x = x; result.yzw = yzw; return result; } /*! @abstract Concatenates `xy` and `zw` to form a vector of four 64-bit * unsigned integers. */ static inline SIMD_CFUNC simd_ulong4 simd_make_ulong4(simd_ulong2 xy, simd_ulong2 zw) { simd_ulong4 result; result.xy = xy; result.zw = zw; return result; } /*! @abstract Concatenates `xyz` and `w` to form a vector of four 64-bit * unsigned integers. */ static inline SIMD_CFUNC simd_ulong4 simd_make_ulong4(simd_ulong3 xyz, simd_ulong1 w) { simd_ulong4 result; result.xyz = xyz; result.w = w; return result; } /*! @abstract Zero-extends `other` to form a vector of four 64-bit unsigned * integers. */ static inline SIMD_CFUNC simd_ulong4 simd_make_ulong4(simd_ulong1 other) { simd_ulong4 result = 0; result.x = other; return result; } /*! @abstract Extends `other` to form a vector of four 64-bit unsigned * integers. The contents of the newly-created vector lanes are * unspecified. */ static inline SIMD_CFUNC simd_ulong4 simd_make_ulong4_undef(simd_ulong1 other) { simd_ulong4 result; result.x = other; return result; } /*! @abstract Zero-extends `other` to form a vector of four 64-bit unsigned * integers. */ static inline SIMD_CFUNC simd_ulong4 simd_make_ulong4(simd_ulong2 other) { simd_ulong4 result = 0; result.xy = other; return result; } /*! @abstract Extends `other` to form a vector of four 64-bit unsigned * integers. The contents of the newly-created vector lanes are * unspecified. */ static inline SIMD_CFUNC simd_ulong4 simd_make_ulong4_undef(simd_ulong2 other) { simd_ulong4 result; result.xy = other; return result; } /*! @abstract Zero-extends `other` to form a vector of four 64-bit unsigned * integers. */ static inline SIMD_CFUNC simd_ulong4 simd_make_ulong4(simd_ulong3 other) { simd_ulong4 result = 0; result.xyz = other; return result; } /*! @abstract Extends `other` to form a vector of four 64-bit unsigned * integers. The contents of the newly-created vector lanes are * unspecified. */ static inline SIMD_CFUNC simd_ulong4 simd_make_ulong4_undef(simd_ulong3 other) { simd_ulong4 result; result.xyz = other; return result; } /*! @abstract Returns `other` unmodified. This function is a convenience for * templated and autogenerated code. */ static inline SIMD_CFUNC simd_ulong4 simd_make_ulong4(simd_ulong4 other) { return other; } /*! @abstract Truncates `other` to form a vector of four 64-bit unsigned * integers. */ static inline SIMD_CFUNC simd_ulong4 simd_make_ulong4(simd_ulong8 other) { return other.xyzw; } /*! @abstract Concatenates `lo` and `hi` to form a vector of eight 64-bit * unsigned integers. */ static inline SIMD_CFUNC simd_ulong8 simd_make_ulong8(simd_ulong4 lo, simd_ulong4 hi) { simd_ulong8 result; result.lo = lo; result.hi = hi; return result; } /*! @abstract Zero-extends `other` to form a vector of eight 64-bit unsigned * integers. */ static inline SIMD_CFUNC simd_ulong8 simd_make_ulong8(simd_ulong1 other) { simd_ulong8 result = 0; result.x = other; return result; } /*! @abstract Extends `other` to form a vector of eight 64-bit unsigned * integers. The contents of the newly-created vector lanes are * unspecified. */ static inline SIMD_CFUNC simd_ulong8 simd_make_ulong8_undef(simd_ulong1 other) { simd_ulong8 result; result.x = other; return result; } /*! @abstract Zero-extends `other` to form a vector of eight 64-bit unsigned * integers. */ static inline SIMD_CFUNC simd_ulong8 simd_make_ulong8(simd_ulong2 other) { simd_ulong8 result = 0; result.xy = other; return result; } /*! @abstract Extends `other` to form a vector of eight 64-bit unsigned * integers. The contents of the newly-created vector lanes are * unspecified. */ static inline SIMD_CFUNC simd_ulong8 simd_make_ulong8_undef(simd_ulong2 other) { simd_ulong8 result; result.xy = other; return result; } /*! @abstract Zero-extends `other` to form a vector of eight 64-bit unsigned * integers. */ static inline SIMD_CFUNC simd_ulong8 simd_make_ulong8(simd_ulong3 other) { simd_ulong8 result = 0; result.xyz = other; return result; } /*! @abstract Extends `other` to form a vector of eight 64-bit unsigned * integers. The contents of the newly-created vector lanes are * unspecified. */ static inline SIMD_CFUNC simd_ulong8 simd_make_ulong8_undef(simd_ulong3 other) { simd_ulong8 result; result.xyz = other; return result; } /*! @abstract Zero-extends `other` to form a vector of eight 64-bit unsigned * integers. */ static inline SIMD_CFUNC simd_ulong8 simd_make_ulong8(simd_ulong4 other) { simd_ulong8 result = 0; result.xyzw = other; return result; } /*! @abstract Extends `other` to form a vector of eight 64-bit unsigned * integers. The contents of the newly-created vector lanes are * unspecified. */ static inline SIMD_CFUNC simd_ulong8 simd_make_ulong8_undef(simd_ulong4 other) { simd_ulong8 result; result.xyzw = other; return result; } /*! @abstract Returns `other` unmodified. This function is a convenience for * templated and autogenerated code. */ static inline SIMD_CFUNC simd_ulong8 simd_make_ulong8(simd_ulong8 other) { return other; } /*! @abstract Concatenates `x` and `y` to form a vector of two 64-bit * floating-point numbers. */ static inline SIMD_CFUNC simd_double2 simd_make_double2(double x, double y) { simd_double2 result; result.x = x; result.y = y; return result; } /*! @abstract Zero-extends `other` to form a vector of two 64-bit floating- * point numbers. */ static inline SIMD_CFUNC simd_double2 simd_make_double2(double other) { simd_double2 result = 0; result.x = other; return result; } /*! @abstract Extends `other` to form a vector of two 64-bit floating-point * numbers. The contents of the newly-created vector lanes are unspecified. */ static inline SIMD_CFUNC simd_double2 simd_make_double2_undef(double other) { simd_double2 result; result.x = other; return result; } /*! @abstract Returns `other` unmodified. This function is a convenience for * templated and autogenerated code. */ static inline SIMD_CFUNC simd_double2 simd_make_double2(simd_double2 other) { return other; } /*! @abstract Truncates `other` to form a vector of two 64-bit floating- * point numbers. */ static inline SIMD_CFUNC simd_double2 simd_make_double2(simd_double3 other) { return other.xy; } /*! @abstract Truncates `other` to form a vector of two 64-bit floating- * point numbers. */ static inline SIMD_CFUNC simd_double2 simd_make_double2(simd_double4 other) { return other.xy; } /*! @abstract Truncates `other` to form a vector of two 64-bit floating- * point numbers. */ static inline SIMD_CFUNC simd_double2 simd_make_double2(simd_double8 other) { return other.xy; } /*! @abstract Concatenates `x`, `y` and `z` to form a vector of three 64-bit * floating-point numbers. */ static inline SIMD_CFUNC simd_double3 simd_make_double3(double x, double y, double z) { simd_double3 result; result.x = x; result.y = y; result.z = z; return result; } /*! @abstract Concatenates `x` and `yz` to form a vector of three 64-bit * floating-point numbers. */ static inline SIMD_CFUNC simd_double3 simd_make_double3(double x, simd_double2 yz) { simd_double3 result; result.x = x; result.yz = yz; return result; } /*! @abstract Concatenates `xy` and `z` to form a vector of three 64-bit * floating-point numbers. */ static inline SIMD_CFUNC simd_double3 simd_make_double3(simd_double2 xy, double z) { simd_double3 result; result.xy = xy; result.z = z; return result; } /*! @abstract Zero-extends `other` to form a vector of three 64-bit * floating-point numbers. */ static inline SIMD_CFUNC simd_double3 simd_make_double3(double other) { simd_double3 result = 0; result.x = other; return result; } /*! @abstract Extends `other` to form a vector of three 64-bit floating- * point numbers. The contents of the newly-created vector lanes are * unspecified. */ static inline SIMD_CFUNC simd_double3 simd_make_double3_undef(double other) { simd_double3 result; result.x = other; return result; } /*! @abstract Zero-extends `other` to form a vector of three 64-bit * floating-point numbers. */ static inline SIMD_CFUNC simd_double3 simd_make_double3(simd_double2 other) { simd_double3 result = 0; result.xy = other; return result; } /*! @abstract Extends `other` to form a vector of three 64-bit floating- * point numbers. The contents of the newly-created vector lanes are * unspecified. */ static inline SIMD_CFUNC simd_double3 simd_make_double3_undef(simd_double2 other) { simd_double3 result; result.xy = other; return result; } /*! @abstract Returns `other` unmodified. This function is a convenience for * templated and autogenerated code. */ static inline SIMD_CFUNC simd_double3 simd_make_double3(simd_double3 other) { return other; } /*! @abstract Truncates `other` to form a vector of three 64-bit floating- * point numbers. */ static inline SIMD_CFUNC simd_double3 simd_make_double3(simd_double4 other) { return other.xyz; } /*! @abstract Truncates `other` to form a vector of three 64-bit floating- * point numbers. */ static inline SIMD_CFUNC simd_double3 simd_make_double3(simd_double8 other) { return other.xyz; } /*! @abstract Concatenates `x`, `y`, `z` and `w` to form a vector of four * 64-bit floating-point numbers. */ static inline SIMD_CFUNC simd_double4 simd_make_double4(double x, double y, double z, double w) { simd_double4 result; result.x = x; result.y = y; result.z = z; result.w = w; return result; } /*! @abstract Concatenates `x`, `y` and `zw` to form a vector of four 64-bit * floating-point numbers. */ static inline SIMD_CFUNC simd_double4 simd_make_double4(double x, double y, simd_double2 zw) { simd_double4 result; result.x = x; result.y = y; result.zw = zw; return result; } /*! @abstract Concatenates `x`, `yz` and `w` to form a vector of four 64-bit * floating-point numbers. */ static inline SIMD_CFUNC simd_double4 simd_make_double4(double x, simd_double2 yz, double w) { simd_double4 result; result.x = x; result.yz = yz; result.w = w; return result; } /*! @abstract Concatenates `xy`, `z` and `w` to form a vector of four 64-bit * floating-point numbers. */ static inline SIMD_CFUNC simd_double4 simd_make_double4(simd_double2 xy, double z, double w) { simd_double4 result; result.xy = xy; result.z = z; result.w = w; return result; } /*! @abstract Concatenates `x` and `yzw` to form a vector of four 64-bit * floating-point numbers. */ static inline SIMD_CFUNC simd_double4 simd_make_double4(double x, simd_double3 yzw) { simd_double4 result; result.x = x; result.yzw = yzw; return result; } /*! @abstract Concatenates `xy` and `zw` to form a vector of four 64-bit * floating-point numbers. */ static inline SIMD_CFUNC simd_double4 simd_make_double4(simd_double2 xy, simd_double2 zw) { simd_double4 result; result.xy = xy; result.zw = zw; return result; } /*! @abstract Concatenates `xyz` and `w` to form a vector of four 64-bit * floating-point numbers. */ static inline SIMD_CFUNC simd_double4 simd_make_double4(simd_double3 xyz, double w) { simd_double4 result; result.xyz = xyz; result.w = w; return result; } /*! @abstract Zero-extends `other` to form a vector of four 64-bit floating- * point numbers. */ static inline SIMD_CFUNC simd_double4 simd_make_double4(double other) { simd_double4 result = 0; result.x = other; return result; } /*! @abstract Extends `other` to form a vector of four 64-bit floating-point * numbers. The contents of the newly-created vector lanes are unspecified. */ static inline SIMD_CFUNC simd_double4 simd_make_double4_undef(double other) { simd_double4 result; result.x = other; return result; } /*! @abstract Zero-extends `other` to form a vector of four 64-bit floating- * point numbers. */ static inline SIMD_CFUNC simd_double4 simd_make_double4(simd_double2 other) { simd_double4 result = 0; result.xy = other; return result; } /*! @abstract Extends `other` to form a vector of four 64-bit floating-point * numbers. The contents of the newly-created vector lanes are unspecified. */ static inline SIMD_CFUNC simd_double4 simd_make_double4_undef(simd_double2 other) { simd_double4 result; result.xy = other; return result; } /*! @abstract Zero-extends `other` to form a vector of four 64-bit floating- * point numbers. */ static inline SIMD_CFUNC simd_double4 simd_make_double4(simd_double3 other) { simd_double4 result = 0; result.xyz = other; return result; } /*! @abstract Extends `other` to form a vector of four 64-bit floating-point * numbers. The contents of the newly-created vector lanes are unspecified. */ static inline SIMD_CFUNC simd_double4 simd_make_double4_undef(simd_double3 other) { simd_double4 result; result.xyz = other; return result; } /*! @abstract Returns `other` unmodified. This function is a convenience for * templated and autogenerated code. */ static inline SIMD_CFUNC simd_double4 simd_make_double4(simd_double4 other) { return other; } /*! @abstract Truncates `other` to form a vector of four 64-bit floating- * point numbers. */ static inline SIMD_CFUNC simd_double4 simd_make_double4(simd_double8 other) { return other.xyzw; } /*! @abstract Concatenates `lo` and `hi` to form a vector of eight 64-bit * floating-point numbers. */ static inline SIMD_CFUNC simd_double8 simd_make_double8(simd_double4 lo, simd_double4 hi) { simd_double8 result; result.lo = lo; result.hi = hi; return result; } /*! @abstract Zero-extends `other` to form a vector of eight 64-bit * floating-point numbers. */ static inline SIMD_CFUNC simd_double8 simd_make_double8(double other) { simd_double8 result = 0; result.x = other; return result; } /*! @abstract Extends `other` to form a vector of eight 64-bit floating- * point numbers. The contents of the newly-created vector lanes are * unspecified. */ static inline SIMD_CFUNC simd_double8 simd_make_double8_undef(double other) { simd_double8 result; result.x = other; return result; } /*! @abstract Zero-extends `other` to form a vector of eight 64-bit * floating-point numbers. */ static inline SIMD_CFUNC simd_double8 simd_make_double8(simd_double2 other) { simd_double8 result = 0; result.xy = other; return result; } /*! @abstract Extends `other` to form a vector of eight 64-bit floating- * point numbers. The contents of the newly-created vector lanes are * unspecified. */ static inline SIMD_CFUNC simd_double8 simd_make_double8_undef(simd_double2 other) { simd_double8 result; result.xy = other; return result; } /*! @abstract Zero-extends `other` to form a vector of eight 64-bit * floating-point numbers. */ static inline SIMD_CFUNC simd_double8 simd_make_double8(simd_double3 other) { simd_double8 result = 0; result.xyz = other; return result; } /*! @abstract Extends `other` to form a vector of eight 64-bit floating- * point numbers. The contents of the newly-created vector lanes are * unspecified. */ static inline SIMD_CFUNC simd_double8 simd_make_double8_undef(simd_double3 other) { simd_double8 result; result.xyz = other; return result; } /*! @abstract Zero-extends `other` to form a vector of eight 64-bit * floating-point numbers. */ static inline SIMD_CFUNC simd_double8 simd_make_double8(simd_double4 other) { simd_double8 result = 0; result.xyzw = other; return result; } /*! @abstract Extends `other` to form a vector of eight 64-bit floating- * point numbers. The contents of the newly-created vector lanes are * unspecified. */ static inline SIMD_CFUNC simd_double8 simd_make_double8_undef(simd_double4 other) { simd_double8 result; result.xyzw = other; return result; } /*! @abstract Returns `other` unmodified. This function is a convenience for * templated and autogenerated code. */ static inline SIMD_CFUNC simd_double8 simd_make_double8(simd_double8 other) { return other; } #ifdef __cplusplus } /* extern "C" */ #include #include namespace simd { /*! @abstract Concatenates `x` and `y` to form a vector of two 8-bit signed * (twos-complement) integers. */ static inline SIMD_CPPFUNC char2 make_char2(char x, char y) { return ::simd_make_char2(x, y); } /*! @abstract Truncates or zero-extends `other` to form a vector of two * 8-bit signed (twos-complement) integers. */ template static SIMD_CPPFUNC char2 make_char2(typeN other) { return ::simd_make_char2(other); } /*! @abstract Extends `other` to form a vector of two 8-bit signed (twos- * complement) integers. The contents of the newly-created vector lanes are * unspecified. */ template static SIMD_CPPFUNC char2 make_char2_undef(typeN other) { return ::simd_make_char2_undef(other); } /*! @abstract Concatenates `x`, `y` and `z` to form a vector of three 8-bit * signed (twos-complement) integers. */ static inline SIMD_CPPFUNC char3 make_char3(char x, char y, char z) { return ::simd_make_char3(x, y, z); } /*! @abstract Concatenates `x` and `yz` to form a vector of three 8-bit * signed (twos-complement) integers. */ static inline SIMD_CPPFUNC char3 make_char3(char x, char2 yz) { return ::simd_make_char3(x, yz); } /*! @abstract Concatenates `xy` and `z` to form a vector of three 8-bit * signed (twos-complement) integers. */ static inline SIMD_CPPFUNC char3 make_char3(char2 xy, char z) { return ::simd_make_char3(xy, z); } /*! @abstract Truncates or zero-extends `other` to form a vector of three * 8-bit signed (twos-complement) integers. */ template static SIMD_CPPFUNC char3 make_char3(typeN other) { return ::simd_make_char3(other); } /*! @abstract Extends `other` to form a vector of three 8-bit signed (twos- * complement) integers. The contents of the newly-created vector lanes are * unspecified. */ template static SIMD_CPPFUNC char3 make_char3_undef(typeN other) { return ::simd_make_char3_undef(other); } /*! @abstract Concatenates `x`, `y`, `z` and `w` to form a vector of four * 8-bit signed (twos-complement) integers. */ static inline SIMD_CPPFUNC char4 make_char4(char x, char y, char z, char w) { return ::simd_make_char4(x, y, z, w); } /*! @abstract Concatenates `x`, `y` and `zw` to form a vector of four 8-bit * signed (twos-complement) integers. */ static inline SIMD_CPPFUNC char4 make_char4(char x, char y, char2 zw) { return ::simd_make_char4(x, y, zw); } /*! @abstract Concatenates `x`, `yz` and `w` to form a vector of four 8-bit * signed (twos-complement) integers. */ static inline SIMD_CPPFUNC char4 make_char4(char x, char2 yz, char w) { return ::simd_make_char4(x, yz, w); } /*! @abstract Concatenates `xy`, `z` and `w` to form a vector of four 8-bit * signed (twos-complement) integers. */ static inline SIMD_CPPFUNC char4 make_char4(char2 xy, char z, char w) { return ::simd_make_char4(xy, z, w); } /*! @abstract Concatenates `x` and `yzw` to form a vector of four 8-bit * signed (twos-complement) integers. */ static inline SIMD_CPPFUNC char4 make_char4(char x, char3 yzw) { return ::simd_make_char4(x, yzw); } /*! @abstract Concatenates `xy` and `zw` to form a vector of four 8-bit * signed (twos-complement) integers. */ static inline SIMD_CPPFUNC char4 make_char4(char2 xy, char2 zw) { return ::simd_make_char4(xy, zw); } /*! @abstract Concatenates `xyz` and `w` to form a vector of four 8-bit * signed (twos-complement) integers. */ static inline SIMD_CPPFUNC char4 make_char4(char3 xyz, char w) { return ::simd_make_char4(xyz, w); } /*! @abstract Truncates or zero-extends `other` to form a vector of four * 8-bit signed (twos-complement) integers. */ template static SIMD_CPPFUNC char4 make_char4(typeN other) { return ::simd_make_char4(other); } /*! @abstract Extends `other` to form a vector of four 8-bit signed (twos- * complement) integers. The contents of the newly-created vector lanes are * unspecified. */ template static SIMD_CPPFUNC char4 make_char4_undef(typeN other) { return ::simd_make_char4_undef(other); } /*! @abstract Concatenates `lo` and `hi` to form a vector of eight 8-bit * signed (twos-complement) integers. */ static inline SIMD_CPPFUNC char8 make_char8(char4 lo, char4 hi) { return ::simd_make_char8(lo, hi); } /*! @abstract Truncates or zero-extends `other` to form a vector of eight * 8-bit signed (twos-complement) integers. */ template static SIMD_CPPFUNC char8 make_char8(typeN other) { return ::simd_make_char8(other); } /*! @abstract Extends `other` to form a vector of eight 8-bit signed (twos- * complement) integers. The contents of the newly-created vector lanes are * unspecified. */ template static SIMD_CPPFUNC char8 make_char8_undef(typeN other) { return ::simd_make_char8_undef(other); } /*! @abstract Concatenates `lo` and `hi` to form a vector of sixteen 8-bit * signed (twos-complement) integers. */ static inline SIMD_CPPFUNC char16 make_char16(char8 lo, char8 hi) { return ::simd_make_char16(lo, hi); } /*! @abstract Truncates or zero-extends `other` to form a vector of sixteen * 8-bit signed (twos-complement) integers. */ template static SIMD_CPPFUNC char16 make_char16(typeN other) { return ::simd_make_char16(other); } /*! @abstract Extends `other` to form a vector of sixteen 8-bit signed * (twos-complement) integers. The contents of the newly-created vector * lanes are unspecified. */ template static SIMD_CPPFUNC char16 make_char16_undef(typeN other) { return ::simd_make_char16_undef(other); } /*! @abstract Concatenates `lo` and `hi` to form a vector of thirty-two * 8-bit signed (twos-complement) integers. */ static inline SIMD_CPPFUNC char32 make_char32(char16 lo, char16 hi) { return ::simd_make_char32(lo, hi); } /*! @abstract Truncates or zero-extends `other` to form a vector of thirty- * two 8-bit signed (twos-complement) integers. */ template static SIMD_CPPFUNC char32 make_char32(typeN other) { return ::simd_make_char32(other); } /*! @abstract Extends `other` to form a vector of thirty-two 8-bit signed * (twos-complement) integers. The contents of the newly-created vector * lanes are unspecified. */ template static SIMD_CPPFUNC char32 make_char32_undef(typeN other) { return ::simd_make_char32_undef(other); } /*! @abstract Concatenates `lo` and `hi` to form a vector of sixty-four * 8-bit signed (twos-complement) integers. */ static inline SIMD_CPPFUNC char64 make_char64(char32 lo, char32 hi) { return ::simd_make_char64(lo, hi); } /*! @abstract Truncates or zero-extends `other` to form a vector of sixty- * four 8-bit signed (twos-complement) integers. */ template static SIMD_CPPFUNC char64 make_char64(typeN other) { return ::simd_make_char64(other); } /*! @abstract Extends `other` to form a vector of sixty-four 8-bit signed * (twos-complement) integers. The contents of the newly-created vector * lanes are unspecified. */ template static SIMD_CPPFUNC char64 make_char64_undef(typeN other) { return ::simd_make_char64_undef(other); } /*! @abstract Concatenates `x` and `y` to form a vector of two 8-bit * unsigned integers. */ static inline SIMD_CPPFUNC uchar2 make_uchar2(unsigned char x, unsigned char y) { return ::simd_make_uchar2(x, y); } /*! @abstract Truncates or zero-extends `other` to form a vector of two * 8-bit unsigned integers. */ template static SIMD_CPPFUNC uchar2 make_uchar2(typeN other) { return ::simd_make_uchar2(other); } /*! @abstract Extends `other` to form a vector of two 8-bit unsigned * integers. The contents of the newly-created vector lanes are * unspecified. */ template static SIMD_CPPFUNC uchar2 make_uchar2_undef(typeN other) { return ::simd_make_uchar2_undef(other); } /*! @abstract Concatenates `x`, `y` and `z` to form a vector of three 8-bit * unsigned integers. */ static inline SIMD_CPPFUNC uchar3 make_uchar3(unsigned char x, unsigned char y, unsigned char z) { return ::simd_make_uchar3(x, y, z); } /*! @abstract Concatenates `x` and `yz` to form a vector of three 8-bit * unsigned integers. */ static inline SIMD_CPPFUNC uchar3 make_uchar3(unsigned char x, uchar2 yz) { return ::simd_make_uchar3(x, yz); } /*! @abstract Concatenates `xy` and `z` to form a vector of three 8-bit * unsigned integers. */ static inline SIMD_CPPFUNC uchar3 make_uchar3(uchar2 xy, unsigned char z) { return ::simd_make_uchar3(xy, z); } /*! @abstract Truncates or zero-extends `other` to form a vector of three * 8-bit unsigned integers. */ template static SIMD_CPPFUNC uchar3 make_uchar3(typeN other) { return ::simd_make_uchar3(other); } /*! @abstract Extends `other` to form a vector of three 8-bit unsigned * integers. The contents of the newly-created vector lanes are * unspecified. */ template static SIMD_CPPFUNC uchar3 make_uchar3_undef(typeN other) { return ::simd_make_uchar3_undef(other); } /*! @abstract Concatenates `x`, `y`, `z` and `w` to form a vector of four * 8-bit unsigned integers. */ static inline SIMD_CPPFUNC uchar4 make_uchar4(unsigned char x, unsigned char y, unsigned char z, unsigned char w) { return ::simd_make_uchar4(x, y, z, w); } /*! @abstract Concatenates `x`, `y` and `zw` to form a vector of four 8-bit * unsigned integers. */ static inline SIMD_CPPFUNC uchar4 make_uchar4(unsigned char x, unsigned char y, uchar2 zw) { return ::simd_make_uchar4(x, y, zw); } /*! @abstract Concatenates `x`, `yz` and `w` to form a vector of four 8-bit * unsigned integers. */ static inline SIMD_CPPFUNC uchar4 make_uchar4(unsigned char x, uchar2 yz, unsigned char w) { return ::simd_make_uchar4(x, yz, w); } /*! @abstract Concatenates `xy`, `z` and `w` to form a vector of four 8-bit * unsigned integers. */ static inline SIMD_CPPFUNC uchar4 make_uchar4(uchar2 xy, unsigned char z, unsigned char w) { return ::simd_make_uchar4(xy, z, w); } /*! @abstract Concatenates `x` and `yzw` to form a vector of four 8-bit * unsigned integers. */ static inline SIMD_CPPFUNC uchar4 make_uchar4(unsigned char x, uchar3 yzw) { return ::simd_make_uchar4(x, yzw); } /*! @abstract Concatenates `xy` and `zw` to form a vector of four 8-bit * unsigned integers. */ static inline SIMD_CPPFUNC uchar4 make_uchar4(uchar2 xy, uchar2 zw) { return ::simd_make_uchar4(xy, zw); } /*! @abstract Concatenates `xyz` and `w` to form a vector of four 8-bit * unsigned integers. */ static inline SIMD_CPPFUNC uchar4 make_uchar4(uchar3 xyz, unsigned char w) { return ::simd_make_uchar4(xyz, w); } /*! @abstract Truncates or zero-extends `other` to form a vector of four * 8-bit unsigned integers. */ template static SIMD_CPPFUNC uchar4 make_uchar4(typeN other) { return ::simd_make_uchar4(other); } /*! @abstract Extends `other` to form a vector of four 8-bit unsigned * integers. The contents of the newly-created vector lanes are * unspecified. */ template static SIMD_CPPFUNC uchar4 make_uchar4_undef(typeN other) { return ::simd_make_uchar4_undef(other); } /*! @abstract Concatenates `lo` and `hi` to form a vector of eight 8-bit * unsigned integers. */ static inline SIMD_CPPFUNC uchar8 make_uchar8(uchar4 lo, uchar4 hi) { return ::simd_make_uchar8(lo, hi); } /*! @abstract Truncates or zero-extends `other` to form a vector of eight * 8-bit unsigned integers. */ template static SIMD_CPPFUNC uchar8 make_uchar8(typeN other) { return ::simd_make_uchar8(other); } /*! @abstract Extends `other` to form a vector of eight 8-bit unsigned * integers. The contents of the newly-created vector lanes are * unspecified. */ template static SIMD_CPPFUNC uchar8 make_uchar8_undef(typeN other) { return ::simd_make_uchar8_undef(other); } /*! @abstract Concatenates `lo` and `hi` to form a vector of sixteen 8-bit * unsigned integers. */ static inline SIMD_CPPFUNC uchar16 make_uchar16(uchar8 lo, uchar8 hi) { return ::simd_make_uchar16(lo, hi); } /*! @abstract Truncates or zero-extends `other` to form a vector of sixteen * 8-bit unsigned integers. */ template static SIMD_CPPFUNC uchar16 make_uchar16(typeN other) { return ::simd_make_uchar16(other); } /*! @abstract Extends `other` to form a vector of sixteen 8-bit unsigned * integers. The contents of the newly-created vector lanes are * unspecified. */ template static SIMD_CPPFUNC uchar16 make_uchar16_undef(typeN other) { return ::simd_make_uchar16_undef(other); } /*! @abstract Concatenates `lo` and `hi` to form a vector of thirty-two * 8-bit unsigned integers. */ static inline SIMD_CPPFUNC uchar32 make_uchar32(uchar16 lo, uchar16 hi) { return ::simd_make_uchar32(lo, hi); } /*! @abstract Truncates or zero-extends `other` to form a vector of thirty- * two 8-bit unsigned integers. */ template static SIMD_CPPFUNC uchar32 make_uchar32(typeN other) { return ::simd_make_uchar32(other); } /*! @abstract Extends `other` to form a vector of thirty-two 8-bit unsigned * integers. The contents of the newly-created vector lanes are * unspecified. */ template static SIMD_CPPFUNC uchar32 make_uchar32_undef(typeN other) { return ::simd_make_uchar32_undef(other); } /*! @abstract Concatenates `lo` and `hi` to form a vector of sixty-four * 8-bit unsigned integers. */ static inline SIMD_CPPFUNC uchar64 make_uchar64(uchar32 lo, uchar32 hi) { return ::simd_make_uchar64(lo, hi); } /*! @abstract Truncates or zero-extends `other` to form a vector of sixty- * four 8-bit unsigned integers. */ template static SIMD_CPPFUNC uchar64 make_uchar64(typeN other) { return ::simd_make_uchar64(other); } /*! @abstract Extends `other` to form a vector of sixty-four 8-bit unsigned * integers. The contents of the newly-created vector lanes are * unspecified. */ template static SIMD_CPPFUNC uchar64 make_uchar64_undef(typeN other) { return ::simd_make_uchar64_undef(other); } /*! @abstract Concatenates `x` and `y` to form a vector of two 16-bit signed * (twos-complement) integers. */ static inline SIMD_CPPFUNC short2 make_short2(short x, short y) { return ::simd_make_short2(x, y); } /*! @abstract Truncates or zero-extends `other` to form a vector of two * 16-bit signed (twos-complement) integers. */ template static SIMD_CPPFUNC short2 make_short2(typeN other) { return ::simd_make_short2(other); } /*! @abstract Extends `other` to form a vector of two 16-bit signed (twos- * complement) integers. The contents of the newly-created vector lanes are * unspecified. */ template static SIMD_CPPFUNC short2 make_short2_undef(typeN other) { return ::simd_make_short2_undef(other); } /*! @abstract Concatenates `x`, `y` and `z` to form a vector of three 16-bit * signed (twos-complement) integers. */ static inline SIMD_CPPFUNC short3 make_short3(short x, short y, short z) { return ::simd_make_short3(x, y, z); } /*! @abstract Concatenates `x` and `yz` to form a vector of three 16-bit * signed (twos-complement) integers. */ static inline SIMD_CPPFUNC short3 make_short3(short x, short2 yz) { return ::simd_make_short3(x, yz); } /*! @abstract Concatenates `xy` and `z` to form a vector of three 16-bit * signed (twos-complement) integers. */ static inline SIMD_CPPFUNC short3 make_short3(short2 xy, short z) { return ::simd_make_short3(xy, z); } /*! @abstract Truncates or zero-extends `other` to form a vector of three * 16-bit signed (twos-complement) integers. */ template static SIMD_CPPFUNC short3 make_short3(typeN other) { return ::simd_make_short3(other); } /*! @abstract Extends `other` to form a vector of three 16-bit signed (twos- * complement) integers. The contents of the newly-created vector lanes are * unspecified. */ template static SIMD_CPPFUNC short3 make_short3_undef(typeN other) { return ::simd_make_short3_undef(other); } /*! @abstract Concatenates `x`, `y`, `z` and `w` to form a vector of four * 16-bit signed (twos-complement) integers. */ static inline SIMD_CPPFUNC short4 make_short4(short x, short y, short z, short w) { return ::simd_make_short4(x, y, z, w); } /*! @abstract Concatenates `x`, `y` and `zw` to form a vector of four 16-bit * signed (twos-complement) integers. */ static inline SIMD_CPPFUNC short4 make_short4(short x, short y, short2 zw) { return ::simd_make_short4(x, y, zw); } /*! @abstract Concatenates `x`, `yz` and `w` to form a vector of four 16-bit * signed (twos-complement) integers. */ static inline SIMD_CPPFUNC short4 make_short4(short x, short2 yz, short w) { return ::simd_make_short4(x, yz, w); } /*! @abstract Concatenates `xy`, `z` and `w` to form a vector of four 16-bit * signed (twos-complement) integers. */ static inline SIMD_CPPFUNC short4 make_short4(short2 xy, short z, short w) { return ::simd_make_short4(xy, z, w); } /*! @abstract Concatenates `x` and `yzw` to form a vector of four 16-bit * signed (twos-complement) integers. */ static inline SIMD_CPPFUNC short4 make_short4(short x, short3 yzw) { return ::simd_make_short4(x, yzw); } /*! @abstract Concatenates `xy` and `zw` to form a vector of four 16-bit * signed (twos-complement) integers. */ static inline SIMD_CPPFUNC short4 make_short4(short2 xy, short2 zw) { return ::simd_make_short4(xy, zw); } /*! @abstract Concatenates `xyz` and `w` to form a vector of four 16-bit * signed (twos-complement) integers. */ static inline SIMD_CPPFUNC short4 make_short4(short3 xyz, short w) { return ::simd_make_short4(xyz, w); } /*! @abstract Truncates or zero-extends `other` to form a vector of four * 16-bit signed (twos-complement) integers. */ template static SIMD_CPPFUNC short4 make_short4(typeN other) { return ::simd_make_short4(other); } /*! @abstract Extends `other` to form a vector of four 16-bit signed (twos- * complement) integers. The contents of the newly-created vector lanes are * unspecified. */ template static SIMD_CPPFUNC short4 make_short4_undef(typeN other) { return ::simd_make_short4_undef(other); } /*! @abstract Concatenates `lo` and `hi` to form a vector of eight 16-bit * signed (twos-complement) integers. */ static inline SIMD_CPPFUNC short8 make_short8(short4 lo, short4 hi) { return ::simd_make_short8(lo, hi); } /*! @abstract Truncates or zero-extends `other` to form a vector of eight * 16-bit signed (twos-complement) integers. */ template static SIMD_CPPFUNC short8 make_short8(typeN other) { return ::simd_make_short8(other); } /*! @abstract Extends `other` to form a vector of eight 16-bit signed (twos- * complement) integers. The contents of the newly-created vector lanes are * unspecified. */ template static SIMD_CPPFUNC short8 make_short8_undef(typeN other) { return ::simd_make_short8_undef(other); } /*! @abstract Concatenates `lo` and `hi` to form a vector of sixteen 16-bit * signed (twos-complement) integers. */ static inline SIMD_CPPFUNC short16 make_short16(short8 lo, short8 hi) { return ::simd_make_short16(lo, hi); } /*! @abstract Truncates or zero-extends `other` to form a vector of sixteen * 16-bit signed (twos-complement) integers. */ template static SIMD_CPPFUNC short16 make_short16(typeN other) { return ::simd_make_short16(other); } /*! @abstract Extends `other` to form a vector of sixteen 16-bit signed * (twos-complement) integers. The contents of the newly-created vector * lanes are unspecified. */ template static SIMD_CPPFUNC short16 make_short16_undef(typeN other) { return ::simd_make_short16_undef(other); } /*! @abstract Concatenates `lo` and `hi` to form a vector of thirty-two * 16-bit signed (twos-complement) integers. */ static inline SIMD_CPPFUNC short32 make_short32(short16 lo, short16 hi) { return ::simd_make_short32(lo, hi); } /*! @abstract Truncates or zero-extends `other` to form a vector of thirty- * two 16-bit signed (twos-complement) integers. */ template static SIMD_CPPFUNC short32 make_short32(typeN other) { return ::simd_make_short32(other); } /*! @abstract Extends `other` to form a vector of thirty-two 16-bit signed * (twos-complement) integers. The contents of the newly-created vector * lanes are unspecified. */ template static SIMD_CPPFUNC short32 make_short32_undef(typeN other) { return ::simd_make_short32_undef(other); } /*! @abstract Concatenates `x` and `y` to form a vector of two 16-bit * unsigned integers. */ static inline SIMD_CPPFUNC ushort2 make_ushort2(unsigned short x, unsigned short y) { return ::simd_make_ushort2(x, y); } /*! @abstract Truncates or zero-extends `other` to form a vector of two * 16-bit unsigned integers. */ template static SIMD_CPPFUNC ushort2 make_ushort2(typeN other) { return ::simd_make_ushort2(other); } /*! @abstract Extends `other` to form a vector of two 16-bit unsigned * integers. The contents of the newly-created vector lanes are * unspecified. */ template static SIMD_CPPFUNC ushort2 make_ushort2_undef(typeN other) { return ::simd_make_ushort2_undef(other); } /*! @abstract Concatenates `x`, `y` and `z` to form a vector of three 16-bit * unsigned integers. */ static inline SIMD_CPPFUNC ushort3 make_ushort3(unsigned short x, unsigned short y, unsigned short z) { return ::simd_make_ushort3(x, y, z); } /*! @abstract Concatenates `x` and `yz` to form a vector of three 16-bit * unsigned integers. */ static inline SIMD_CPPFUNC ushort3 make_ushort3(unsigned short x, ushort2 yz) { return ::simd_make_ushort3(x, yz); } /*! @abstract Concatenates `xy` and `z` to form a vector of three 16-bit * unsigned integers. */ static inline SIMD_CPPFUNC ushort3 make_ushort3(ushort2 xy, unsigned short z) { return ::simd_make_ushort3(xy, z); } /*! @abstract Truncates or zero-extends `other` to form a vector of three * 16-bit unsigned integers. */ template static SIMD_CPPFUNC ushort3 make_ushort3(typeN other) { return ::simd_make_ushort3(other); } /*! @abstract Extends `other` to form a vector of three 16-bit unsigned * integers. The contents of the newly-created vector lanes are * unspecified. */ template static SIMD_CPPFUNC ushort3 make_ushort3_undef(typeN other) { return ::simd_make_ushort3_undef(other); } /*! @abstract Concatenates `x`, `y`, `z` and `w` to form a vector of four * 16-bit unsigned integers. */ static inline SIMD_CPPFUNC ushort4 make_ushort4(unsigned short x, unsigned short y, unsigned short z, unsigned short w) { return ::simd_make_ushort4(x, y, z, w); } /*! @abstract Concatenates `x`, `y` and `zw` to form a vector of four 16-bit * unsigned integers. */ static inline SIMD_CPPFUNC ushort4 make_ushort4(unsigned short x, unsigned short y, ushort2 zw) { return ::simd_make_ushort4(x, y, zw); } /*! @abstract Concatenates `x`, `yz` and `w` to form a vector of four 16-bit * unsigned integers. */ static inline SIMD_CPPFUNC ushort4 make_ushort4(unsigned short x, ushort2 yz, unsigned short w) { return ::simd_make_ushort4(x, yz, w); } /*! @abstract Concatenates `xy`, `z` and `w` to form a vector of four 16-bit * unsigned integers. */ static inline SIMD_CPPFUNC ushort4 make_ushort4(ushort2 xy, unsigned short z, unsigned short w) { return ::simd_make_ushort4(xy, z, w); } /*! @abstract Concatenates `x` and `yzw` to form a vector of four 16-bit * unsigned integers. */ static inline SIMD_CPPFUNC ushort4 make_ushort4(unsigned short x, ushort3 yzw) { return ::simd_make_ushort4(x, yzw); } /*! @abstract Concatenates `xy` and `zw` to form a vector of four 16-bit * unsigned integers. */ static inline SIMD_CPPFUNC ushort4 make_ushort4(ushort2 xy, ushort2 zw) { return ::simd_make_ushort4(xy, zw); } /*! @abstract Concatenates `xyz` and `w` to form a vector of four 16-bit * unsigned integers. */ static inline SIMD_CPPFUNC ushort4 make_ushort4(ushort3 xyz, unsigned short w) { return ::simd_make_ushort4(xyz, w); } /*! @abstract Truncates or zero-extends `other` to form a vector of four * 16-bit unsigned integers. */ template static SIMD_CPPFUNC ushort4 make_ushort4(typeN other) { return ::simd_make_ushort4(other); } /*! @abstract Extends `other` to form a vector of four 16-bit unsigned * integers. The contents of the newly-created vector lanes are * unspecified. */ template static SIMD_CPPFUNC ushort4 make_ushort4_undef(typeN other) { return ::simd_make_ushort4_undef(other); } /*! @abstract Concatenates `lo` and `hi` to form a vector of eight 16-bit * unsigned integers. */ static inline SIMD_CPPFUNC ushort8 make_ushort8(ushort4 lo, ushort4 hi) { return ::simd_make_ushort8(lo, hi); } /*! @abstract Truncates or zero-extends `other` to form a vector of eight * 16-bit unsigned integers. */ template static SIMD_CPPFUNC ushort8 make_ushort8(typeN other) { return ::simd_make_ushort8(other); } /*! @abstract Extends `other` to form a vector of eight 16-bit unsigned * integers. The contents of the newly-created vector lanes are * unspecified. */ template static SIMD_CPPFUNC ushort8 make_ushort8_undef(typeN other) { return ::simd_make_ushort8_undef(other); } /*! @abstract Concatenates `lo` and `hi` to form a vector of sixteen 16-bit * unsigned integers. */ static inline SIMD_CPPFUNC ushort16 make_ushort16(ushort8 lo, ushort8 hi) { return ::simd_make_ushort16(lo, hi); } /*! @abstract Truncates or zero-extends `other` to form a vector of sixteen * 16-bit unsigned integers. */ template static SIMD_CPPFUNC ushort16 make_ushort16(typeN other) { return ::simd_make_ushort16(other); } /*! @abstract Extends `other` to form a vector of sixteen 16-bit unsigned * integers. The contents of the newly-created vector lanes are * unspecified. */ template static SIMD_CPPFUNC ushort16 make_ushort16_undef(typeN other) { return ::simd_make_ushort16_undef(other); } /*! @abstract Concatenates `lo` and `hi` to form a vector of thirty-two * 16-bit unsigned integers. */ static inline SIMD_CPPFUNC ushort32 make_ushort32(ushort16 lo, ushort16 hi) { return ::simd_make_ushort32(lo, hi); } /*! @abstract Truncates or zero-extends `other` to form a vector of thirty- * two 16-bit unsigned integers. */ template static SIMD_CPPFUNC ushort32 make_ushort32(typeN other) { return ::simd_make_ushort32(other); } /*! @abstract Extends `other` to form a vector of thirty-two 16-bit unsigned * integers. The contents of the newly-created vector lanes are * unspecified. */ template static SIMD_CPPFUNC ushort32 make_ushort32_undef(typeN other) { return ::simd_make_ushort32_undef(other); } /*! @abstract Concatenates `x` and `y` to form a vector of two 32-bit signed * (twos-complement) integers. */ static inline SIMD_CPPFUNC int2 make_int2(int x, int y) { return ::simd_make_int2(x, y); } /*! @abstract Truncates or zero-extends `other` to form a vector of two * 32-bit signed (twos-complement) integers. */ template static SIMD_CPPFUNC int2 make_int2(typeN other) { return ::simd_make_int2(other); } /*! @abstract Extends `other` to form a vector of two 32-bit signed (twos- * complement) integers. The contents of the newly-created vector lanes are * unspecified. */ template static SIMD_CPPFUNC int2 make_int2_undef(typeN other) { return ::simd_make_int2_undef(other); } /*! @abstract Concatenates `x`, `y` and `z` to form a vector of three 32-bit * signed (twos-complement) integers. */ static inline SIMD_CPPFUNC int3 make_int3(int x, int y, int z) { return ::simd_make_int3(x, y, z); } /*! @abstract Concatenates `x` and `yz` to form a vector of three 32-bit * signed (twos-complement) integers. */ static inline SIMD_CPPFUNC int3 make_int3(int x, int2 yz) { return ::simd_make_int3(x, yz); } /*! @abstract Concatenates `xy` and `z` to form a vector of three 32-bit * signed (twos-complement) integers. */ static inline SIMD_CPPFUNC int3 make_int3(int2 xy, int z) { return ::simd_make_int3(xy, z); } /*! @abstract Truncates or zero-extends `other` to form a vector of three * 32-bit signed (twos-complement) integers. */ template static SIMD_CPPFUNC int3 make_int3(typeN other) { return ::simd_make_int3(other); } /*! @abstract Extends `other` to form a vector of three 32-bit signed (twos- * complement) integers. The contents of the newly-created vector lanes are * unspecified. */ template static SIMD_CPPFUNC int3 make_int3_undef(typeN other) { return ::simd_make_int3_undef(other); } /*! @abstract Concatenates `x`, `y`, `z` and `w` to form a vector of four * 32-bit signed (twos-complement) integers. */ static inline SIMD_CPPFUNC int4 make_int4(int x, int y, int z, int w) { return ::simd_make_int4(x, y, z, w); } /*! @abstract Concatenates `x`, `y` and `zw` to form a vector of four 32-bit * signed (twos-complement) integers. */ static inline SIMD_CPPFUNC int4 make_int4(int x, int y, int2 zw) { return ::simd_make_int4(x, y, zw); } /*! @abstract Concatenates `x`, `yz` and `w` to form a vector of four 32-bit * signed (twos-complement) integers. */ static inline SIMD_CPPFUNC int4 make_int4(int x, int2 yz, int w) { return ::simd_make_int4(x, yz, w); } /*! @abstract Concatenates `xy`, `z` and `w` to form a vector of four 32-bit * signed (twos-complement) integers. */ static inline SIMD_CPPFUNC int4 make_int4(int2 xy, int z, int w) { return ::simd_make_int4(xy, z, w); } /*! @abstract Concatenates `x` and `yzw` to form a vector of four 32-bit * signed (twos-complement) integers. */ static inline SIMD_CPPFUNC int4 make_int4(int x, int3 yzw) { return ::simd_make_int4(x, yzw); } /*! @abstract Concatenates `xy` and `zw` to form a vector of four 32-bit * signed (twos-complement) integers. */ static inline SIMD_CPPFUNC int4 make_int4(int2 xy, int2 zw) { return ::simd_make_int4(xy, zw); } /*! @abstract Concatenates `xyz` and `w` to form a vector of four 32-bit * signed (twos-complement) integers. */ static inline SIMD_CPPFUNC int4 make_int4(int3 xyz, int w) { return ::simd_make_int4(xyz, w); } /*! @abstract Truncates or zero-extends `other` to form a vector of four * 32-bit signed (twos-complement) integers. */ template static SIMD_CPPFUNC int4 make_int4(typeN other) { return ::simd_make_int4(other); } /*! @abstract Extends `other` to form a vector of four 32-bit signed (twos- * complement) integers. The contents of the newly-created vector lanes are * unspecified. */ template static SIMD_CPPFUNC int4 make_int4_undef(typeN other) { return ::simd_make_int4_undef(other); } /*! @abstract Concatenates `lo` and `hi` to form a vector of eight 32-bit * signed (twos-complement) integers. */ static inline SIMD_CPPFUNC int8 make_int8(int4 lo, int4 hi) { return ::simd_make_int8(lo, hi); } /*! @abstract Truncates or zero-extends `other` to form a vector of eight * 32-bit signed (twos-complement) integers. */ template static SIMD_CPPFUNC int8 make_int8(typeN other) { return ::simd_make_int8(other); } /*! @abstract Extends `other` to form a vector of eight 32-bit signed (twos- * complement) integers. The contents of the newly-created vector lanes are * unspecified. */ template static SIMD_CPPFUNC int8 make_int8_undef(typeN other) { return ::simd_make_int8_undef(other); } /*! @abstract Concatenates `lo` and `hi` to form a vector of sixteen 32-bit * signed (twos-complement) integers. */ static inline SIMD_CPPFUNC int16 make_int16(int8 lo, int8 hi) { return ::simd_make_int16(lo, hi); } /*! @abstract Truncates or zero-extends `other` to form a vector of sixteen * 32-bit signed (twos-complement) integers. */ template static SIMD_CPPFUNC int16 make_int16(typeN other) { return ::simd_make_int16(other); } /*! @abstract Extends `other` to form a vector of sixteen 32-bit signed * (twos-complement) integers. The contents of the newly-created vector * lanes are unspecified. */ template static SIMD_CPPFUNC int16 make_int16_undef(typeN other) { return ::simd_make_int16_undef(other); } /*! @abstract Concatenates `x` and `y` to form a vector of two 32-bit * unsigned integers. */ static inline SIMD_CPPFUNC uint2 make_uint2(unsigned int x, unsigned int y) { return ::simd_make_uint2(x, y); } /*! @abstract Truncates or zero-extends `other` to form a vector of two * 32-bit unsigned integers. */ template static SIMD_CPPFUNC uint2 make_uint2(typeN other) { return ::simd_make_uint2(other); } /*! @abstract Extends `other` to form a vector of two 32-bit unsigned * integers. The contents of the newly-created vector lanes are * unspecified. */ template static SIMD_CPPFUNC uint2 make_uint2_undef(typeN other) { return ::simd_make_uint2_undef(other); } /*! @abstract Concatenates `x`, `y` and `z` to form a vector of three 32-bit * unsigned integers. */ static inline SIMD_CPPFUNC uint3 make_uint3(unsigned int x, unsigned int y, unsigned int z) { return ::simd_make_uint3(x, y, z); } /*! @abstract Concatenates `x` and `yz` to form a vector of three 32-bit * unsigned integers. */ static inline SIMD_CPPFUNC uint3 make_uint3(unsigned int x, uint2 yz) { return ::simd_make_uint3(x, yz); } /*! @abstract Concatenates `xy` and `z` to form a vector of three 32-bit * unsigned integers. */ static inline SIMD_CPPFUNC uint3 make_uint3(uint2 xy, unsigned int z) { return ::simd_make_uint3(xy, z); } /*! @abstract Truncates or zero-extends `other` to form a vector of three * 32-bit unsigned integers. */ template static SIMD_CPPFUNC uint3 make_uint3(typeN other) { return ::simd_make_uint3(other); } /*! @abstract Extends `other` to form a vector of three 32-bit unsigned * integers. The contents of the newly-created vector lanes are * unspecified. */ template static SIMD_CPPFUNC uint3 make_uint3_undef(typeN other) { return ::simd_make_uint3_undef(other); } /*! @abstract Concatenates `x`, `y`, `z` and `w` to form a vector of four * 32-bit unsigned integers. */ static inline SIMD_CPPFUNC uint4 make_uint4(unsigned int x, unsigned int y, unsigned int z, unsigned int w) { return ::simd_make_uint4(x, y, z, w); } /*! @abstract Concatenates `x`, `y` and `zw` to form a vector of four 32-bit * unsigned integers. */ static inline SIMD_CPPFUNC uint4 make_uint4(unsigned int x, unsigned int y, uint2 zw) { return ::simd_make_uint4(x, y, zw); } /*! @abstract Concatenates `x`, `yz` and `w` to form a vector of four 32-bit * unsigned integers. */ static inline SIMD_CPPFUNC uint4 make_uint4(unsigned int x, uint2 yz, unsigned int w) { return ::simd_make_uint4(x, yz, w); } /*! @abstract Concatenates `xy`, `z` and `w` to form a vector of four 32-bit * unsigned integers. */ static inline SIMD_CPPFUNC uint4 make_uint4(uint2 xy, unsigned int z, unsigned int w) { return ::simd_make_uint4(xy, z, w); } /*! @abstract Concatenates `x` and `yzw` to form a vector of four 32-bit * unsigned integers. */ static inline SIMD_CPPFUNC uint4 make_uint4(unsigned int x, uint3 yzw) { return ::simd_make_uint4(x, yzw); } /*! @abstract Concatenates `xy` and `zw` to form a vector of four 32-bit * unsigned integers. */ static inline SIMD_CPPFUNC uint4 make_uint4(uint2 xy, uint2 zw) { return ::simd_make_uint4(xy, zw); } /*! @abstract Concatenates `xyz` and `w` to form a vector of four 32-bit * unsigned integers. */ static inline SIMD_CPPFUNC uint4 make_uint4(uint3 xyz, unsigned int w) { return ::simd_make_uint4(xyz, w); } /*! @abstract Truncates or zero-extends `other` to form a vector of four * 32-bit unsigned integers. */ template static SIMD_CPPFUNC uint4 make_uint4(typeN other) { return ::simd_make_uint4(other); } /*! @abstract Extends `other` to form a vector of four 32-bit unsigned * integers. The contents of the newly-created vector lanes are * unspecified. */ template static SIMD_CPPFUNC uint4 make_uint4_undef(typeN other) { return ::simd_make_uint4_undef(other); } /*! @abstract Concatenates `lo` and `hi` to form a vector of eight 32-bit * unsigned integers. */ static inline SIMD_CPPFUNC uint8 make_uint8(uint4 lo, uint4 hi) { return ::simd_make_uint8(lo, hi); } /*! @abstract Truncates or zero-extends `other` to form a vector of eight * 32-bit unsigned integers. */ template static SIMD_CPPFUNC uint8 make_uint8(typeN other) { return ::simd_make_uint8(other); } /*! @abstract Extends `other` to form a vector of eight 32-bit unsigned * integers. The contents of the newly-created vector lanes are * unspecified. */ template static SIMD_CPPFUNC uint8 make_uint8_undef(typeN other) { return ::simd_make_uint8_undef(other); } /*! @abstract Concatenates `lo` and `hi` to form a vector of sixteen 32-bit * unsigned integers. */ static inline SIMD_CPPFUNC uint16 make_uint16(uint8 lo, uint8 hi) { return ::simd_make_uint16(lo, hi); } /*! @abstract Truncates or zero-extends `other` to form a vector of sixteen * 32-bit unsigned integers. */ template static SIMD_CPPFUNC uint16 make_uint16(typeN other) { return ::simd_make_uint16(other); } /*! @abstract Extends `other` to form a vector of sixteen 32-bit unsigned * integers. The contents of the newly-created vector lanes are * unspecified. */ template static SIMD_CPPFUNC uint16 make_uint16_undef(typeN other) { return ::simd_make_uint16_undef(other); } /*! @abstract Concatenates `x` and `y` to form a vector of two 32-bit * floating-point numbers. */ static inline SIMD_CPPFUNC float2 make_float2(float x, float y) { return ::simd_make_float2(x, y); } /*! @abstract Truncates or zero-extends `other` to form a vector of two * 32-bit floating-point numbers. */ template static SIMD_CPPFUNC float2 make_float2(typeN other) { return ::simd_make_float2(other); } /*! @abstract Extends `other` to form a vector of two 32-bit floating-point * numbers. The contents of the newly-created vector lanes are unspecified. */ template static SIMD_CPPFUNC float2 make_float2_undef(typeN other) { return ::simd_make_float2_undef(other); } /*! @abstract Concatenates `x`, `y` and `z` to form a vector of three 32-bit * floating-point numbers. */ static inline SIMD_CPPFUNC float3 make_float3(float x, float y, float z) { return ::simd_make_float3(x, y, z); } /*! @abstract Concatenates `x` and `yz` to form a vector of three 32-bit * floating-point numbers. */ static inline SIMD_CPPFUNC float3 make_float3(float x, float2 yz) { return ::simd_make_float3(x, yz); } /*! @abstract Concatenates `xy` and `z` to form a vector of three 32-bit * floating-point numbers. */ static inline SIMD_CPPFUNC float3 make_float3(float2 xy, float z) { return ::simd_make_float3(xy, z); } /*! @abstract Truncates or zero-extends `other` to form a vector of three * 32-bit floating-point numbers. */ template static SIMD_CPPFUNC float3 make_float3(typeN other) { return ::simd_make_float3(other); } /*! @abstract Extends `other` to form a vector of three 32-bit floating- * point numbers. The contents of the newly-created vector lanes are * unspecified. */ template static SIMD_CPPFUNC float3 make_float3_undef(typeN other) { return ::simd_make_float3_undef(other); } /*! @abstract Concatenates `x`, `y`, `z` and `w` to form a vector of four * 32-bit floating-point numbers. */ static inline SIMD_CPPFUNC float4 make_float4(float x, float y, float z, float w) { return ::simd_make_float4(x, y, z, w); } /*! @abstract Concatenates `x`, `y` and `zw` to form a vector of four 32-bit * floating-point numbers. */ static inline SIMD_CPPFUNC float4 make_float4(float x, float y, float2 zw) { return ::simd_make_float4(x, y, zw); } /*! @abstract Concatenates `x`, `yz` and `w` to form a vector of four 32-bit * floating-point numbers. */ static inline SIMD_CPPFUNC float4 make_float4(float x, float2 yz, float w) { return ::simd_make_float4(x, yz, w); } /*! @abstract Concatenates `xy`, `z` and `w` to form a vector of four 32-bit * floating-point numbers. */ static inline SIMD_CPPFUNC float4 make_float4(float2 xy, float z, float w) { return ::simd_make_float4(xy, z, w); } /*! @abstract Concatenates `x` and `yzw` to form a vector of four 32-bit * floating-point numbers. */ static inline SIMD_CPPFUNC float4 make_float4(float x, float3 yzw) { return ::simd_make_float4(x, yzw); } /*! @abstract Concatenates `xy` and `zw` to form a vector of four 32-bit * floating-point numbers. */ static inline SIMD_CPPFUNC float4 make_float4(float2 xy, float2 zw) { return ::simd_make_float4(xy, zw); } /*! @abstract Concatenates `xyz` and `w` to form a vector of four 32-bit * floating-point numbers. */ static inline SIMD_CPPFUNC float4 make_float4(float3 xyz, float w) { return ::simd_make_float4(xyz, w); } /*! @abstract Truncates or zero-extends `other` to form a vector of four * 32-bit floating-point numbers. */ template static SIMD_CPPFUNC float4 make_float4(typeN other) { return ::simd_make_float4(other); } /*! @abstract Extends `other` to form a vector of four 32-bit floating-point * numbers. The contents of the newly-created vector lanes are unspecified. */ template static SIMD_CPPFUNC float4 make_float4_undef(typeN other) { return ::simd_make_float4_undef(other); } /*! @abstract Concatenates `lo` and `hi` to form a vector of eight 32-bit * floating-point numbers. */ static inline SIMD_CPPFUNC float8 make_float8(float4 lo, float4 hi) { return ::simd_make_float8(lo, hi); } /*! @abstract Truncates or zero-extends `other` to form a vector of eight * 32-bit floating-point numbers. */ template static SIMD_CPPFUNC float8 make_float8(typeN other) { return ::simd_make_float8(other); } /*! @abstract Extends `other` to form a vector of eight 32-bit floating- * point numbers. The contents of the newly-created vector lanes are * unspecified. */ template static SIMD_CPPFUNC float8 make_float8_undef(typeN other) { return ::simd_make_float8_undef(other); } /*! @abstract Concatenates `lo` and `hi` to form a vector of sixteen 32-bit * floating-point numbers. */ static inline SIMD_CPPFUNC float16 make_float16(float8 lo, float8 hi) { return ::simd_make_float16(lo, hi); } /*! @abstract Truncates or zero-extends `other` to form a vector of sixteen * 32-bit floating-point numbers. */ template static SIMD_CPPFUNC float16 make_float16(typeN other) { return ::simd_make_float16(other); } /*! @abstract Extends `other` to form a vector of sixteen 32-bit floating- * point numbers. The contents of the newly-created vector lanes are * unspecified. */ template static SIMD_CPPFUNC float16 make_float16_undef(typeN other) { return ::simd_make_float16_undef(other); } /*! @abstract Concatenates `x` and `y` to form a vector of two 64-bit signed * (twos-complement) integers. */ static inline SIMD_CPPFUNC long2 make_long2(long1 x, long1 y) { return ::simd_make_long2(x, y); } /*! @abstract Truncates or zero-extends `other` to form a vector of two * 64-bit signed (twos-complement) integers. */ template static SIMD_CPPFUNC long2 make_long2(typeN other) { return ::simd_make_long2(other); } /*! @abstract Extends `other` to form a vector of two 64-bit signed (twos- * complement) integers. The contents of the newly-created vector lanes are * unspecified. */ template static SIMD_CPPFUNC long2 make_long2_undef(typeN other) { return ::simd_make_long2_undef(other); } /*! @abstract Concatenates `x`, `y` and `z` to form a vector of three 64-bit * signed (twos-complement) integers. */ static inline SIMD_CPPFUNC long3 make_long3(long1 x, long1 y, long1 z) { return ::simd_make_long3(x, y, z); } /*! @abstract Concatenates `x` and `yz` to form a vector of three 64-bit * signed (twos-complement) integers. */ static inline SIMD_CPPFUNC long3 make_long3(long1 x, long2 yz) { return ::simd_make_long3(x, yz); } /*! @abstract Concatenates `xy` and `z` to form a vector of three 64-bit * signed (twos-complement) integers. */ static inline SIMD_CPPFUNC long3 make_long3(long2 xy, long1 z) { return ::simd_make_long3(xy, z); } /*! @abstract Truncates or zero-extends `other` to form a vector of three * 64-bit signed (twos-complement) integers. */ template static SIMD_CPPFUNC long3 make_long3(typeN other) { return ::simd_make_long3(other); } /*! @abstract Extends `other` to form a vector of three 64-bit signed (twos- * complement) integers. The contents of the newly-created vector lanes are * unspecified. */ template static SIMD_CPPFUNC long3 make_long3_undef(typeN other) { return ::simd_make_long3_undef(other); } /*! @abstract Concatenates `x`, `y`, `z` and `w` to form a vector of four * 64-bit signed (twos-complement) integers. */ static inline SIMD_CPPFUNC long4 make_long4(long1 x, long1 y, long1 z, long1 w) { return ::simd_make_long4(x, y, z, w); } /*! @abstract Concatenates `x`, `y` and `zw` to form a vector of four 64-bit * signed (twos-complement) integers. */ static inline SIMD_CPPFUNC long4 make_long4(long1 x, long1 y, long2 zw) { return ::simd_make_long4(x, y, zw); } /*! @abstract Concatenates `x`, `yz` and `w` to form a vector of four 64-bit * signed (twos-complement) integers. */ static inline SIMD_CPPFUNC long4 make_long4(long1 x, long2 yz, long1 w) { return ::simd_make_long4(x, yz, w); } /*! @abstract Concatenates `xy`, `z` and `w` to form a vector of four 64-bit * signed (twos-complement) integers. */ static inline SIMD_CPPFUNC long4 make_long4(long2 xy, long1 z, long1 w) { return ::simd_make_long4(xy, z, w); } /*! @abstract Concatenates `x` and `yzw` to form a vector of four 64-bit * signed (twos-complement) integers. */ static inline SIMD_CPPFUNC long4 make_long4(long1 x, long3 yzw) { return ::simd_make_long4(x, yzw); } /*! @abstract Concatenates `xy` and `zw` to form a vector of four 64-bit * signed (twos-complement) integers. */ static inline SIMD_CPPFUNC long4 make_long4(long2 xy, long2 zw) { return ::simd_make_long4(xy, zw); } /*! @abstract Concatenates `xyz` and `w` to form a vector of four 64-bit * signed (twos-complement) integers. */ static inline SIMD_CPPFUNC long4 make_long4(long3 xyz, long1 w) { return ::simd_make_long4(xyz, w); } /*! @abstract Truncates or zero-extends `other` to form a vector of four * 64-bit signed (twos-complement) integers. */ template static SIMD_CPPFUNC long4 make_long4(typeN other) { return ::simd_make_long4(other); } /*! @abstract Extends `other` to form a vector of four 64-bit signed (twos- * complement) integers. The contents of the newly-created vector lanes are * unspecified. */ template static SIMD_CPPFUNC long4 make_long4_undef(typeN other) { return ::simd_make_long4_undef(other); } /*! @abstract Concatenates `lo` and `hi` to form a vector of eight 64-bit * signed (twos-complement) integers. */ static inline SIMD_CPPFUNC long8 make_long8(long4 lo, long4 hi) { return ::simd_make_long8(lo, hi); } /*! @abstract Truncates or zero-extends `other` to form a vector of eight * 64-bit signed (twos-complement) integers. */ template static SIMD_CPPFUNC long8 make_long8(typeN other) { return ::simd_make_long8(other); } /*! @abstract Extends `other` to form a vector of eight 64-bit signed (twos- * complement) integers. The contents of the newly-created vector lanes are * unspecified. */ template static SIMD_CPPFUNC long8 make_long8_undef(typeN other) { return ::simd_make_long8_undef(other); } /*! @abstract Concatenates `x` and `y` to form a vector of two 64-bit * unsigned integers. */ static inline SIMD_CPPFUNC ulong2 make_ulong2(ulong1 x, ulong1 y) { return ::simd_make_ulong2(x, y); } /*! @abstract Truncates or zero-extends `other` to form a vector of two * 64-bit unsigned integers. */ template static SIMD_CPPFUNC ulong2 make_ulong2(typeN other) { return ::simd_make_ulong2(other); } /*! @abstract Extends `other` to form a vector of two 64-bit unsigned * integers. The contents of the newly-created vector lanes are * unspecified. */ template static SIMD_CPPFUNC ulong2 make_ulong2_undef(typeN other) { return ::simd_make_ulong2_undef(other); } /*! @abstract Concatenates `x`, `y` and `z` to form a vector of three 64-bit * unsigned integers. */ static inline SIMD_CPPFUNC ulong3 make_ulong3(ulong1 x, ulong1 y, ulong1 z) { return ::simd_make_ulong3(x, y, z); } /*! @abstract Concatenates `x` and `yz` to form a vector of three 64-bit * unsigned integers. */ static inline SIMD_CPPFUNC ulong3 make_ulong3(ulong1 x, ulong2 yz) { return ::simd_make_ulong3(x, yz); } /*! @abstract Concatenates `xy` and `z` to form a vector of three 64-bit * unsigned integers. */ static inline SIMD_CPPFUNC ulong3 make_ulong3(ulong2 xy, ulong1 z) { return ::simd_make_ulong3(xy, z); } /*! @abstract Truncates or zero-extends `other` to form a vector of three * 64-bit unsigned integers. */ template static SIMD_CPPFUNC ulong3 make_ulong3(typeN other) { return ::simd_make_ulong3(other); } /*! @abstract Extends `other` to form a vector of three 64-bit unsigned * integers. The contents of the newly-created vector lanes are * unspecified. */ template static SIMD_CPPFUNC ulong3 make_ulong3_undef(typeN other) { return ::simd_make_ulong3_undef(other); } /*! @abstract Concatenates `x`, `y`, `z` and `w` to form a vector of four * 64-bit unsigned integers. */ static inline SIMD_CPPFUNC ulong4 make_ulong4(ulong1 x, ulong1 y, ulong1 z, ulong1 w) { return ::simd_make_ulong4(x, y, z, w); } /*! @abstract Concatenates `x`, `y` and `zw` to form a vector of four 64-bit * unsigned integers. */ static inline SIMD_CPPFUNC ulong4 make_ulong4(ulong1 x, ulong1 y, ulong2 zw) { return ::simd_make_ulong4(x, y, zw); } /*! @abstract Concatenates `x`, `yz` and `w` to form a vector of four 64-bit * unsigned integers. */ static inline SIMD_CPPFUNC ulong4 make_ulong4(ulong1 x, ulong2 yz, ulong1 w) { return ::simd_make_ulong4(x, yz, w); } /*! @abstract Concatenates `xy`, `z` and `w` to form a vector of four 64-bit * unsigned integers. */ static inline SIMD_CPPFUNC ulong4 make_ulong4(ulong2 xy, ulong1 z, ulong1 w) { return ::simd_make_ulong4(xy, z, w); } /*! @abstract Concatenates `x` and `yzw` to form a vector of four 64-bit * unsigned integers. */ static inline SIMD_CPPFUNC ulong4 make_ulong4(ulong1 x, ulong3 yzw) { return ::simd_make_ulong4(x, yzw); } /*! @abstract Concatenates `xy` and `zw` to form a vector of four 64-bit * unsigned integers. */ static inline SIMD_CPPFUNC ulong4 make_ulong4(ulong2 xy, ulong2 zw) { return ::simd_make_ulong4(xy, zw); } /*! @abstract Concatenates `xyz` and `w` to form a vector of four 64-bit * unsigned integers. */ static inline SIMD_CPPFUNC ulong4 make_ulong4(ulong3 xyz, ulong1 w) { return ::simd_make_ulong4(xyz, w); } /*! @abstract Truncates or zero-extends `other` to form a vector of four * 64-bit unsigned integers. */ template static SIMD_CPPFUNC ulong4 make_ulong4(typeN other) { return ::simd_make_ulong4(other); } /*! @abstract Extends `other` to form a vector of four 64-bit unsigned * integers. The contents of the newly-created vector lanes are * unspecified. */ template static SIMD_CPPFUNC ulong4 make_ulong4_undef(typeN other) { return ::simd_make_ulong4_undef(other); } /*! @abstract Concatenates `lo` and `hi` to form a vector of eight 64-bit * unsigned integers. */ static inline SIMD_CPPFUNC ulong8 make_ulong8(ulong4 lo, ulong4 hi) { return ::simd_make_ulong8(lo, hi); } /*! @abstract Truncates or zero-extends `other` to form a vector of eight * 64-bit unsigned integers. */ template static SIMD_CPPFUNC ulong8 make_ulong8(typeN other) { return ::simd_make_ulong8(other); } /*! @abstract Extends `other` to form a vector of eight 64-bit unsigned * integers. The contents of the newly-created vector lanes are * unspecified. */ template static SIMD_CPPFUNC ulong8 make_ulong8_undef(typeN other) { return ::simd_make_ulong8_undef(other); } /*! @abstract Concatenates `x` and `y` to form a vector of two 64-bit * floating-point numbers. */ static inline SIMD_CPPFUNC double2 make_double2(double x, double y) { return ::simd_make_double2(x, y); } /*! @abstract Truncates or zero-extends `other` to form a vector of two * 64-bit floating-point numbers. */ template static SIMD_CPPFUNC double2 make_double2(typeN other) { return ::simd_make_double2(other); } /*! @abstract Extends `other` to form a vector of two 64-bit floating-point * numbers. The contents of the newly-created vector lanes are unspecified. */ template static SIMD_CPPFUNC double2 make_double2_undef(typeN other) { return ::simd_make_double2_undef(other); } /*! @abstract Concatenates `x`, `y` and `z` to form a vector of three 64-bit * floating-point numbers. */ static inline SIMD_CPPFUNC double3 make_double3(double x, double y, double z) { return ::simd_make_double3(x, y, z); } /*! @abstract Concatenates `x` and `yz` to form a vector of three 64-bit * floating-point numbers. */ static inline SIMD_CPPFUNC double3 make_double3(double x, double2 yz) { return ::simd_make_double3(x, yz); } /*! @abstract Concatenates `xy` and `z` to form a vector of three 64-bit * floating-point numbers. */ static inline SIMD_CPPFUNC double3 make_double3(double2 xy, double z) { return ::simd_make_double3(xy, z); } /*! @abstract Truncates or zero-extends `other` to form a vector of three * 64-bit floating-point numbers. */ template static SIMD_CPPFUNC double3 make_double3(typeN other) { return ::simd_make_double3(other); } /*! @abstract Extends `other` to form a vector of three 64-bit floating- * point numbers. The contents of the newly-created vector lanes are * unspecified. */ template static SIMD_CPPFUNC double3 make_double3_undef(typeN other) { return ::simd_make_double3_undef(other); } /*! @abstract Concatenates `x`, `y`, `z` and `w` to form a vector of four * 64-bit floating-point numbers. */ static inline SIMD_CPPFUNC double4 make_double4(double x, double y, double z, double w) { return ::simd_make_double4(x, y, z, w); } /*! @abstract Concatenates `x`, `y` and `zw` to form a vector of four 64-bit * floating-point numbers. */ static inline SIMD_CPPFUNC double4 make_double4(double x, double y, double2 zw) { return ::simd_make_double4(x, y, zw); } /*! @abstract Concatenates `x`, `yz` and `w` to form a vector of four 64-bit * floating-point numbers. */ static inline SIMD_CPPFUNC double4 make_double4(double x, double2 yz, double w) { return ::simd_make_double4(x, yz, w); } /*! @abstract Concatenates `xy`, `z` and `w` to form a vector of four 64-bit * floating-point numbers. */ static inline SIMD_CPPFUNC double4 make_double4(double2 xy, double z, double w) { return ::simd_make_double4(xy, z, w); } /*! @abstract Concatenates `x` and `yzw` to form a vector of four 64-bit * floating-point numbers. */ static inline SIMD_CPPFUNC double4 make_double4(double x, double3 yzw) { return ::simd_make_double4(x, yzw); } /*! @abstract Concatenates `xy` and `zw` to form a vector of four 64-bit * floating-point numbers. */ static inline SIMD_CPPFUNC double4 make_double4(double2 xy, double2 zw) { return ::simd_make_double4(xy, zw); } /*! @abstract Concatenates `xyz` and `w` to form a vector of four 64-bit * floating-point numbers. */ static inline SIMD_CPPFUNC double4 make_double4(double3 xyz, double w) { return ::simd_make_double4(xyz, w); } /*! @abstract Truncates or zero-extends `other` to form a vector of four * 64-bit floating-point numbers. */ template static SIMD_CPPFUNC double4 make_double4(typeN other) { return ::simd_make_double4(other); } /*! @abstract Extends `other` to form a vector of four 64-bit floating-point * numbers. The contents of the newly-created vector lanes are unspecified. */ template static SIMD_CPPFUNC double4 make_double4_undef(typeN other) { return ::simd_make_double4_undef(other); } /*! @abstract Concatenates `lo` and `hi` to form a vector of eight 64-bit * floating-point numbers. */ static inline SIMD_CPPFUNC double8 make_double8(double4 lo, double4 hi) { return ::simd_make_double8(lo, hi); } /*! @abstract Truncates or zero-extends `other` to form a vector of eight * 64-bit floating-point numbers. */ template static SIMD_CPPFUNC double8 make_double8(typeN other) { return ::simd_make_double8(other); } /*! @abstract Extends `other` to form a vector of eight 64-bit floating- * point numbers. The contents of the newly-created vector lanes are * unspecified. */ template static SIMD_CPPFUNC double8 make_double8_undef(typeN other) { return ::simd_make_double8_undef(other); } /*! @struct Vector * @abstract Templated Vector struct based on scalar type and number of * elements * @field count Number of elements in the vector * @field scalar_t The scalar type of each element * @field type The inferred simd::typeN type * @field packed_t The inferred simd::packed::typeN type * @field mask_t The return type of comparison operations */ template struct Vector { // static const size_t count // typedef scalar_t // typedef type // typedef packed_t // typedef mask_t }; /*! @abstract Helper type to access the simd type easily. */ template using Vector_t = typename Vector::type; /*! @abstract Look up the equivalent Vector struct according to the simd * type. */ template struct get_traits { // using type = Vector; }; /*! @abstract Helper type to access the Vector struct easily. * @discussion This is commonly used to query the type traits of a simd * type. * For example, simd::traits::count is 4. */ template using traits = typename get_traits::type; template<> struct Vector { static const size_t count = 1; typedef char1 scalar_t; typedef char1 type; typedef char1 mask_t; }; template <> struct get_traits { using type = Vector; }; template<> struct Vector { static const size_t count = 2; typedef char1 scalar_t; typedef char2 type; typedef packed::char2 packed_t; typedef char2 mask_t; }; template <> struct get_traits { using type = Vector; }; template<> struct Vector { static const size_t count = 3; typedef char1 scalar_t; typedef char3 type; typedef char3 mask_t; }; template <> struct get_traits { using type = Vector; }; template<> struct Vector { static const size_t count = 4; typedef char1 scalar_t; typedef char4 type; typedef packed::char4 packed_t; typedef char4 mask_t; }; template <> struct get_traits { using type = Vector; }; template<> struct Vector { static const size_t count = 8; typedef char1 scalar_t; typedef char8 type; typedef packed::char8 packed_t; typedef char8 mask_t; }; template <> struct get_traits { using type = Vector; }; template<> struct Vector { static const size_t count = 16; typedef char1 scalar_t; typedef char16 type; typedef packed::char16 packed_t; typedef char16 mask_t; }; template <> struct get_traits { using type = Vector; }; template<> struct Vector { static const size_t count = 32; typedef char1 scalar_t; typedef char32 type; typedef packed::char32 packed_t; typedef char32 mask_t; }; template <> struct get_traits { using type = Vector; }; template<> struct Vector { static const size_t count = 64; typedef char1 scalar_t; typedef char64 type; typedef packed::char64 packed_t; typedef char64 mask_t; }; template <> struct get_traits { using type = Vector; }; template<> struct Vector { static const size_t count = 1; typedef uchar1 scalar_t; typedef uchar1 type; typedef char1 mask_t; }; template <> struct get_traits { using type = Vector; }; template<> struct Vector { static const size_t count = 2; typedef uchar1 scalar_t; typedef uchar2 type; typedef packed::uchar2 packed_t; typedef char2 mask_t; }; template <> struct get_traits { using type = Vector; }; template<> struct Vector { static const size_t count = 3; typedef uchar1 scalar_t; typedef uchar3 type; typedef char3 mask_t; }; template <> struct get_traits { using type = Vector; }; template<> struct Vector { static const size_t count = 4; typedef uchar1 scalar_t; typedef uchar4 type; typedef packed::uchar4 packed_t; typedef char4 mask_t; }; template <> struct get_traits { using type = Vector; }; template<> struct Vector { static const size_t count = 8; typedef uchar1 scalar_t; typedef uchar8 type; typedef packed::uchar8 packed_t; typedef char8 mask_t; }; template <> struct get_traits { using type = Vector; }; template<> struct Vector { static const size_t count = 16; typedef uchar1 scalar_t; typedef uchar16 type; typedef packed::uchar16 packed_t; typedef char16 mask_t; }; template <> struct get_traits { using type = Vector; }; template<> struct Vector { static const size_t count = 32; typedef uchar1 scalar_t; typedef uchar32 type; typedef packed::uchar32 packed_t; typedef char32 mask_t; }; template <> struct get_traits { using type = Vector; }; template<> struct Vector { static const size_t count = 64; typedef uchar1 scalar_t; typedef uchar64 type; typedef packed::uchar64 packed_t; typedef char64 mask_t; }; template <> struct get_traits { using type = Vector; }; template<> struct Vector { static const size_t count = 1; typedef short1 scalar_t; typedef short1 type; typedef short1 mask_t; }; template <> struct get_traits { using type = Vector; }; template<> struct Vector { static const size_t count = 2; typedef short1 scalar_t; typedef short2 type; typedef packed::short2 packed_t; typedef short2 mask_t; }; template <> struct get_traits { using type = Vector; }; template<> struct Vector { static const size_t count = 3; typedef short1 scalar_t; typedef short3 type; typedef short3 mask_t; }; template <> struct get_traits { using type = Vector; }; template<> struct Vector { static const size_t count = 4; typedef short1 scalar_t; typedef short4 type; typedef packed::short4 packed_t; typedef short4 mask_t; }; template <> struct get_traits { using type = Vector; }; template<> struct Vector { static const size_t count = 8; typedef short1 scalar_t; typedef short8 type; typedef packed::short8 packed_t; typedef short8 mask_t; }; template <> struct get_traits { using type = Vector; }; template<> struct Vector { static const size_t count = 16; typedef short1 scalar_t; typedef short16 type; typedef packed::short16 packed_t; typedef short16 mask_t; }; template <> struct get_traits { using type = Vector; }; template<> struct Vector { static const size_t count = 32; typedef short1 scalar_t; typedef short32 type; typedef packed::short32 packed_t; typedef short32 mask_t; }; template <> struct get_traits { using type = Vector; }; template<> struct Vector { static const size_t count = 1; typedef ushort1 scalar_t; typedef ushort1 type; typedef short1 mask_t; }; template <> struct get_traits { using type = Vector; }; template<> struct Vector { static const size_t count = 2; typedef ushort1 scalar_t; typedef ushort2 type; typedef packed::ushort2 packed_t; typedef short2 mask_t; }; template <> struct get_traits { using type = Vector; }; template<> struct Vector { static const size_t count = 3; typedef ushort1 scalar_t; typedef ushort3 type; typedef short3 mask_t; }; template <> struct get_traits { using type = Vector; }; template<> struct Vector { static const size_t count = 4; typedef ushort1 scalar_t; typedef ushort4 type; typedef packed::ushort4 packed_t; typedef short4 mask_t; }; template <> struct get_traits { using type = Vector; }; template<> struct Vector { static const size_t count = 8; typedef ushort1 scalar_t; typedef ushort8 type; typedef packed::ushort8 packed_t; typedef short8 mask_t; }; template <> struct get_traits { using type = Vector; }; template<> struct Vector { static const size_t count = 16; typedef ushort1 scalar_t; typedef ushort16 type; typedef packed::ushort16 packed_t; typedef short16 mask_t; }; template <> struct get_traits { using type = Vector; }; template<> struct Vector { static const size_t count = 32; typedef ushort1 scalar_t; typedef ushort32 type; typedef packed::ushort32 packed_t; typedef short32 mask_t; }; template <> struct get_traits { using type = Vector; }; template<> struct Vector { static const size_t count = 1; typedef int1 scalar_t; typedef int1 type; typedef int1 mask_t; }; template <> struct get_traits { using type = Vector; }; template<> struct Vector { static const size_t count = 2; typedef int1 scalar_t; typedef int2 type; typedef packed::int2 packed_t; typedef int2 mask_t; }; template <> struct get_traits { using type = Vector; }; template<> struct Vector { static const size_t count = 3; typedef int1 scalar_t; typedef int3 type; typedef int3 mask_t; }; template <> struct get_traits { using type = Vector; }; template<> struct Vector { static const size_t count = 4; typedef int1 scalar_t; typedef int4 type; typedef packed::int4 packed_t; typedef int4 mask_t; }; template <> struct get_traits { using type = Vector; }; template<> struct Vector { static const size_t count = 8; typedef int1 scalar_t; typedef int8 type; typedef packed::int8 packed_t; typedef int8 mask_t; }; template <> struct get_traits { using type = Vector; }; template<> struct Vector { static const size_t count = 16; typedef int1 scalar_t; typedef int16 type; typedef packed::int16 packed_t; typedef int16 mask_t; }; template <> struct get_traits { using type = Vector; }; template<> struct Vector { static const size_t count = 1; typedef uint1 scalar_t; typedef uint1 type; typedef int1 mask_t; }; template <> struct get_traits { using type = Vector; }; template<> struct Vector { static const size_t count = 2; typedef uint1 scalar_t; typedef uint2 type; typedef packed::uint2 packed_t; typedef int2 mask_t; }; template <> struct get_traits { using type = Vector; }; template<> struct Vector { static const size_t count = 3; typedef uint1 scalar_t; typedef uint3 type; typedef int3 mask_t; }; template <> struct get_traits { using type = Vector; }; template<> struct Vector { static const size_t count = 4; typedef uint1 scalar_t; typedef uint4 type; typedef packed::uint4 packed_t; typedef int4 mask_t; }; template <> struct get_traits { using type = Vector; }; template<> struct Vector { static const size_t count = 8; typedef uint1 scalar_t; typedef uint8 type; typedef packed::uint8 packed_t; typedef int8 mask_t; }; template <> struct get_traits { using type = Vector; }; template<> struct Vector { static const size_t count = 16; typedef uint1 scalar_t; typedef uint16 type; typedef packed::uint16 packed_t; typedef int16 mask_t; }; template <> struct get_traits { using type = Vector; }; template<> struct Vector { static const size_t count = 1; typedef float1 scalar_t; typedef float1 type; typedef int1 mask_t; }; template <> struct get_traits { using type = Vector; }; template<> struct Vector { static const size_t count = 2; typedef float1 scalar_t; typedef float2 type; typedef packed::float2 packed_t; typedef int2 mask_t; }; template <> struct get_traits { using type = Vector; }; template<> struct Vector { static const size_t count = 3; typedef float1 scalar_t; typedef float3 type; typedef int3 mask_t; }; template <> struct get_traits { using type = Vector; }; template<> struct Vector { static const size_t count = 4; typedef float1 scalar_t; typedef float4 type; typedef packed::float4 packed_t; typedef int4 mask_t; }; template <> struct get_traits { using type = Vector; }; template<> struct Vector { static const size_t count = 8; typedef float1 scalar_t; typedef float8 type; typedef packed::float8 packed_t; typedef int8 mask_t; }; template <> struct get_traits { using type = Vector; }; template<> struct Vector { static const size_t count = 16; typedef float1 scalar_t; typedef float16 type; typedef packed::float16 packed_t; typedef int16 mask_t; }; template <> struct get_traits { using type = Vector; }; template<> struct Vector { static const size_t count = 1; typedef long1 scalar_t; typedef long1 type; typedef long1 mask_t; }; template <> struct get_traits { using type = Vector; }; template<> struct Vector { static const size_t count = 2; typedef long1 scalar_t; typedef long2 type; typedef packed::long2 packed_t; typedef long2 mask_t; }; template <> struct get_traits { using type = Vector; }; template<> struct Vector { static const size_t count = 3; typedef long1 scalar_t; typedef long3 type; typedef long3 mask_t; }; template <> struct get_traits { using type = Vector; }; template<> struct Vector { static const size_t count = 4; typedef long1 scalar_t; typedef long4 type; typedef packed::long4 packed_t; typedef long4 mask_t; }; template <> struct get_traits { using type = Vector; }; template<> struct Vector { static const size_t count = 8; typedef long1 scalar_t; typedef long8 type; typedef packed::long8 packed_t; typedef long8 mask_t; }; template <> struct get_traits { using type = Vector; }; template<> struct Vector { static const size_t count = 1; typedef ulong1 scalar_t; typedef ulong1 type; typedef long1 mask_t; }; template <> struct get_traits { using type = Vector; }; template<> struct Vector { static const size_t count = 2; typedef ulong1 scalar_t; typedef ulong2 type; typedef packed::ulong2 packed_t; typedef long2 mask_t; }; template <> struct get_traits { using type = Vector; }; template<> struct Vector { static const size_t count = 3; typedef ulong1 scalar_t; typedef ulong3 type; typedef long3 mask_t; }; template <> struct get_traits { using type = Vector; }; template<> struct Vector { static const size_t count = 4; typedef ulong1 scalar_t; typedef ulong4 type; typedef packed::ulong4 packed_t; typedef long4 mask_t; }; template <> struct get_traits { using type = Vector; }; template<> struct Vector { static const size_t count = 8; typedef ulong1 scalar_t; typedef ulong8 type; typedef packed::ulong8 packed_t; typedef long8 mask_t; }; template <> struct get_traits { using type = Vector; }; template<> struct Vector { static const size_t count = 1; typedef double1 scalar_t; typedef double1 type; typedef long1 mask_t; }; template <> struct get_traits { using type = Vector; }; template<> struct Vector { static const size_t count = 2; typedef double1 scalar_t; typedef double2 type; typedef packed::double2 packed_t; typedef long2 mask_t; }; template <> struct get_traits { using type = Vector; }; template<> struct Vector { static const size_t count = 3; typedef double1 scalar_t; typedef double3 type; typedef long3 mask_t; }; template <> struct get_traits { using type = Vector; }; template<> struct Vector { static const size_t count = 4; typedef double1 scalar_t; typedef double4 type; typedef packed::double4 packed_t; typedef long4 mask_t; }; template <> struct get_traits { using type = Vector; }; template<> struct Vector { static const size_t count = 8; typedef double1 scalar_t; typedef double8 type; typedef packed::double8 packed_t; typedef long8 mask_t; }; template <> struct get_traits { using type = Vector; }; #if __has_feature(cxx_constexpr) /*! @abstract Templated make function based on return type and argument * type. */ template static constexpr typeN make(Args... args) { if constexpr (traits::count == 1) { using FirstArgType = typename std::tuple_element<0, std::tuple>::type; if constexpr (std::is_same::scalar_t>::value) return typeN(std::get<0>(std::make_tuple(args...))); else return typeN(std::get<0>(std::make_tuple(args...))[0]); } else if constexpr (std::is_same::value) return make_char2(args...); else if constexpr (std::is_same::value) return make_char3(args...); else if constexpr (std::is_same::value) return make_char4(args...); else if constexpr (std::is_same::value) return make_char8(args...); else if constexpr (std::is_same::value) return make_char16(args...); else if constexpr (std::is_same::value) return make_char32(args...); else if constexpr (std::is_same::value) return make_char64(args...); else if constexpr (std::is_same::value) return make_uchar2(args...); else if constexpr (std::is_same::value) return make_uchar3(args...); else if constexpr (std::is_same::value) return make_uchar4(args...); else if constexpr (std::is_same::value) return make_uchar8(args...); else if constexpr (std::is_same::value) return make_uchar16(args...); else if constexpr (std::is_same::value) return make_uchar32(args...); else if constexpr (std::is_same::value) return make_uchar64(args...); else if constexpr (std::is_same::value) return make_short2(args...); else if constexpr (std::is_same::value) return make_short3(args...); else if constexpr (std::is_same::value) return make_short4(args...); else if constexpr (std::is_same::value) return make_short8(args...); else if constexpr (std::is_same::value) return make_short16(args...); else if constexpr (std::is_same::value) return make_short32(args...); else if constexpr (std::is_same::value) return make_ushort2(args...); else if constexpr (std::is_same::value) return make_ushort3(args...); else if constexpr (std::is_same::value) return make_ushort4(args...); else if constexpr (std::is_same::value) return make_ushort8(args...); else if constexpr (std::is_same::value) return make_ushort16(args...); else if constexpr (std::is_same::value) return make_ushort32(args...); else if constexpr (std::is_same::value) return make_int2(args...); else if constexpr (std::is_same::value) return make_int3(args...); else if constexpr (std::is_same::value) return make_int4(args...); else if constexpr (std::is_same::value) return make_int8(args...); else if constexpr (std::is_same::value) return make_int16(args...); else if constexpr (std::is_same::value) return make_uint2(args...); else if constexpr (std::is_same::value) return make_uint3(args...); else if constexpr (std::is_same::value) return make_uint4(args...); else if constexpr (std::is_same::value) return make_uint8(args...); else if constexpr (std::is_same::value) return make_uint16(args...); else if constexpr (std::is_same::value) return make_float2(args...); else if constexpr (std::is_same::value) return make_float3(args...); else if constexpr (std::is_same::value) return make_float4(args...); else if constexpr (std::is_same::value) return make_float8(args...); else if constexpr (std::is_same::value) return make_float16(args...); else if constexpr (std::is_same::value) return make_long2(args...); else if constexpr (std::is_same::value) return make_long3(args...); else if constexpr (std::is_same::value) return make_long4(args...); else if constexpr (std::is_same::value) return make_long8(args...); else if constexpr (std::is_same::value) return make_ulong2(args...); else if constexpr (std::is_same::value) return make_ulong3(args...); else if constexpr (std::is_same::value) return make_ulong4(args...); else if constexpr (std::is_same::value) return make_ulong8(args...); else if constexpr (std::is_same::value) return make_double2(args...); else if constexpr (std::is_same::value) return make_double3(args...); else if constexpr (std::is_same::value) return make_double4(args...); else if constexpr (std::is_same::value) return make_double8(args...); } /*! @abstract Templated make_undef function based on return type and * argument type. */ template static constexpr typeN make_undef(Args... args) { if constexpr (traits::count == 1) { using FirstArgType = typename std::tuple_element<0, std::tuple>::type; if constexpr (std::is_same::scalar_t>::value) return typeN(std::get<0>(std::make_tuple(args...))); else return typeN(std::get<0>(std::make_tuple(args...))[0]); } else if constexpr (std::is_same::value) return make_char2_undef(args...); else if constexpr (std::is_same::value) return make_char3_undef(args...); else if constexpr (std::is_same::value) return make_char4_undef(args...); else if constexpr (std::is_same::value) return make_char8_undef(args...); else if constexpr (std::is_same::value) return make_char16_undef(args...); else if constexpr (std::is_same::value) return make_char32_undef(args...); else if constexpr (std::is_same::value) return make_char64_undef(args...); else if constexpr (std::is_same::value) return make_uchar2_undef(args...); else if constexpr (std::is_same::value) return make_uchar3_undef(args...); else if constexpr (std::is_same::value) return make_uchar4_undef(args...); else if constexpr (std::is_same::value) return make_uchar8_undef(args...); else if constexpr (std::is_same::value) return make_uchar16_undef(args...); else if constexpr (std::is_same::value) return make_uchar32_undef(args...); else if constexpr (std::is_same::value) return make_uchar64_undef(args...); else if constexpr (std::is_same::value) return make_short2_undef(args...); else if constexpr (std::is_same::value) return make_short3_undef(args...); else if constexpr (std::is_same::value) return make_short4_undef(args...); else if constexpr (std::is_same::value) return make_short8_undef(args...); else if constexpr (std::is_same::value) return make_short16_undef(args...); else if constexpr (std::is_same::value) return make_short32_undef(args...); else if constexpr (std::is_same::value) return make_ushort2_undef(args...); else if constexpr (std::is_same::value) return make_ushort3_undef(args...); else if constexpr (std::is_same::value) return make_ushort4_undef(args...); else if constexpr (std::is_same::value) return make_ushort8_undef(args...); else if constexpr (std::is_same::value) return make_ushort16_undef(args...); else if constexpr (std::is_same::value) return make_ushort32_undef(args...); else if constexpr (std::is_same::value) return make_int2_undef(args...); else if constexpr (std::is_same::value) return make_int3_undef(args...); else if constexpr (std::is_same::value) return make_int4_undef(args...); else if constexpr (std::is_same::value) return make_int8_undef(args...); else if constexpr (std::is_same::value) return make_int16_undef(args...); else if constexpr (std::is_same::value) return make_uint2_undef(args...); else if constexpr (std::is_same::value) return make_uint3_undef(args...); else if constexpr (std::is_same::value) return make_uint4_undef(args...); else if constexpr (std::is_same::value) return make_uint8_undef(args...); else if constexpr (std::is_same::value) return make_uint16_undef(args...); else if constexpr (std::is_same::value) return make_float2_undef(args...); else if constexpr (std::is_same::value) return make_float3_undef(args...); else if constexpr (std::is_same::value) return make_float4_undef(args...); else if constexpr (std::is_same::value) return make_float8_undef(args...); else if constexpr (std::is_same::value) return make_float16_undef(args...); else if constexpr (std::is_same::value) return make_long2_undef(args...); else if constexpr (std::is_same::value) return make_long3_undef(args...); else if constexpr (std::is_same::value) return make_long4_undef(args...); else if constexpr (std::is_same::value) return make_long8_undef(args...); else if constexpr (std::is_same::value) return make_ulong2_undef(args...); else if constexpr (std::is_same::value) return make_ulong3_undef(args...); else if constexpr (std::is_same::value) return make_ulong4_undef(args...); else if constexpr (std::is_same::value) return make_ulong8_undef(args...); else if constexpr (std::is_same::value) return make_double2_undef(args...); else if constexpr (std::is_same::value) return make_double3_undef(args...); else if constexpr (std::is_same::value) return make_double4_undef(args...); else if constexpr (std::is_same::value) return make_double8_undef(args...); } #endif /* __has_feature(cxx_constexpr) */ } /* namespace simd */ #endif /* __cplusplus */ #endif /* SIMD_COMPILER_HAS_REQUIRED_FEATURES */ #endif /* SIMD_VECTOR_CONSTRUCTORS */