master
   1/*  Copyright (c) 2014-2017 Apple, Inc. All rights reserved.
   2 *
   3 *  The interfaces declared in this header provide conversions between vector
   4 *  types. The following functions are available:
   5 *
   6 *      simd_char(x)      simd_uchar(x)
   7 *      simd_short(x)     simd_ushort(x)
   8 *      simd_int(x)       simd_uint(x)
   9 *      simd_long(x)      simd_ulong(x)
  10 *      simd_float(x)
  11 *      simd_double(x)
  12 *
  13 *  Each of these functions converts x to a vector whose elements have the
  14 *  type named by the function, with the same number of elements as x. Unlike
  15 *  a vector cast, these functions convert the elements to the new element
  16 *  type. These conversions behave exactly as C scalar conversions, except
  17 *  that conversions from integer vector types to signed integer vector types
  18 *  are guaranteed to wrap modulo 2^N (where N is the number of bits in an
  19 *  element of the result type).
  20 *
  21 *  In C++ the conversion functions are templated in the simd:: namespace.
  22 *
  23 *      C++ Function                            Equivalent C Function
  24 *      -------------------------------------------------------------------
  25 *      simd::convert<ScalarType>(x)            simd_ScalarType(x)
  26 *      simd::convert_sat<ScalarType>(x)        simd_ScalarType_sat(x)
  27 *
  28 *  For integer vector types, saturating conversions are also available:
  29 *
  30 *      simd_char_sat(x)      simd_uchar_sat(x)
  31 *      simd_short_sat(x)     simd_ushort_sat(x)
  32 *      simd_int_sat(x)       simd_uint_sat(x)
  33 *      simd_long_sat(x)      simd_ulong_sat(x)
  34 *
  35 *  These conversions clamp x to the representable range of the result type
  36 *  before converting.
  37 *
  38 *  As well as round to nearest even conversions for same-width data types:
  39 *
  40 *      simd_short_rte(simd_half<N> x)      simd_ushort_rte(simd_half<N> x)
  41 *      simd_int_rte(simd_float<N> x)       simd_uint_rte(simd_float<N> x)
  42 *      simd_long_rte(simd_double<N> x)     simd_ulong_rte(simd_double<N> x)
  43 *
  44 *  Unlike most vector operations in <simd/>, there are no abbreviated C++
  45 *  names for these functions in the simd:: namespace.
  46 */
  47
  48#ifndef __SIMD_CONVERSION_HEADER__
  49#define __SIMD_CONVERSION_HEADER__
  50
  51#include <simd/base.h>
  52#if SIMD_COMPILER_HAS_REQUIRED_FEATURES
  53#include <simd/vector_types.h>
  54#include <simd/common.h>
  55#include <simd/logic.h>
  56
  57#ifdef __cplusplus
  58extern "C" {
  59#endif
  60
  61static simd_char2  SIMD_CFUNC simd_char(simd_char2    __x);
  62static simd_char3  SIMD_CFUNC simd_char(simd_char3    __x);
  63static simd_char4  SIMD_CFUNC simd_char(simd_char4    __x);
  64static simd_char8  SIMD_CFUNC simd_char(simd_char8    __x);
  65static simd_char16 SIMD_CFUNC simd_char(simd_char16   __x);
  66static simd_char32 SIMD_CFUNC simd_char(simd_char32   __x);
  67static simd_char2  SIMD_CFUNC simd_char(simd_uchar2   __x);
  68static simd_char3  SIMD_CFUNC simd_char(simd_uchar3   __x);
  69static simd_char4  SIMD_CFUNC simd_char(simd_uchar4   __x);
  70static simd_char8  SIMD_CFUNC simd_char(simd_uchar8   __x);
  71static simd_char16 SIMD_CFUNC simd_char(simd_uchar16  __x);
  72static simd_char32 SIMD_CFUNC simd_char(simd_uchar32  __x);
  73static simd_char2  SIMD_CFUNC simd_char(simd_short2   __x);
  74static simd_char3  SIMD_CFUNC simd_char(simd_short3   __x);
  75static simd_char4  SIMD_CFUNC simd_char(simd_short4   __x);
  76static simd_char8  SIMD_CFUNC simd_char(simd_short8   __x);
  77static simd_char16 SIMD_CFUNC simd_char(simd_short16  __x);
  78static simd_char32 SIMD_CFUNC simd_char(simd_short32  __x);
  79static simd_char2  SIMD_CFUNC simd_char(simd_ushort2  __x);
  80static simd_char3  SIMD_CFUNC simd_char(simd_ushort3  __x);
  81static simd_char4  SIMD_CFUNC simd_char(simd_ushort4  __x);
  82static simd_char8  SIMD_CFUNC simd_char(simd_ushort8  __x);
  83static simd_char16 SIMD_CFUNC simd_char(simd_ushort16 __x);
  84static simd_char32 SIMD_CFUNC simd_char(simd_ushort32 __x);
  85static simd_char2  SIMD_CFUNC simd_char(simd_half2    __x);
  86static simd_char3  SIMD_CFUNC simd_char(simd_half3    __x);
  87static simd_char4  SIMD_CFUNC simd_char(simd_half4    __x);
  88static simd_char8  SIMD_CFUNC simd_char(simd_half8    __x);
  89static simd_char16 SIMD_CFUNC simd_char(simd_half16   __x);
  90static simd_char32 SIMD_CFUNC simd_char(simd_half32   __x);
  91static simd_char2  SIMD_CFUNC simd_char(simd_int2     __x);
  92static simd_char3  SIMD_CFUNC simd_char(simd_int3     __x);
  93static simd_char4  SIMD_CFUNC simd_char(simd_int4     __x);
  94static simd_char8  SIMD_CFUNC simd_char(simd_int8     __x);
  95static simd_char16 SIMD_CFUNC simd_char(simd_int16    __x);
  96static simd_char2  SIMD_CFUNC simd_char(simd_uint2    __x);
  97static simd_char3  SIMD_CFUNC simd_char(simd_uint3    __x);
  98static simd_char4  SIMD_CFUNC simd_char(simd_uint4    __x);
  99static simd_char8  SIMD_CFUNC simd_char(simd_uint8    __x);
 100static simd_char16 SIMD_CFUNC simd_char(simd_uint16   __x);
 101static simd_char2  SIMD_CFUNC simd_char(simd_float2   __x);
 102static simd_char3  SIMD_CFUNC simd_char(simd_float3   __x);
 103static simd_char4  SIMD_CFUNC simd_char(simd_float4   __x);
 104static simd_char8  SIMD_CFUNC simd_char(simd_float8   __x);
 105static simd_char16 SIMD_CFUNC simd_char(simd_float16  __x);
 106static simd_char2  SIMD_CFUNC simd_char(simd_long2    __x);
 107static simd_char3  SIMD_CFUNC simd_char(simd_long3    __x);
 108static simd_char4  SIMD_CFUNC simd_char(simd_long4    __x);
 109static simd_char8  SIMD_CFUNC simd_char(simd_long8    __x);
 110static simd_char2  SIMD_CFUNC simd_char(simd_ulong2   __x);
 111static simd_char3  SIMD_CFUNC simd_char(simd_ulong3   __x);
 112static simd_char4  SIMD_CFUNC simd_char(simd_ulong4   __x);
 113static simd_char8  SIMD_CFUNC simd_char(simd_ulong8   __x);
 114static simd_char2  SIMD_CFUNC simd_char(simd_double2  __x);
 115static simd_char3  SIMD_CFUNC simd_char(simd_double3  __x);
 116static simd_char4  SIMD_CFUNC simd_char(simd_double4  __x);
 117static simd_char8  SIMD_CFUNC simd_char(simd_double8  __x);
 118static simd_char2  SIMD_CFUNC simd_char_sat(simd_char2    __x);
 119static simd_char3  SIMD_CFUNC simd_char_sat(simd_char3    __x);
 120static simd_char4  SIMD_CFUNC simd_char_sat(simd_char4    __x);
 121static simd_char8  SIMD_CFUNC simd_char_sat(simd_char8    __x);
 122static simd_char16 SIMD_CFUNC simd_char_sat(simd_char16   __x);
 123static simd_char32 SIMD_CFUNC simd_char_sat(simd_char32   __x);
 124static simd_char2  SIMD_CFUNC simd_char_sat(simd_short2   __x);
 125static simd_char3  SIMD_CFUNC simd_char_sat(simd_short3   __x);
 126static simd_char4  SIMD_CFUNC simd_char_sat(simd_short4   __x);
 127static simd_char8  SIMD_CFUNC simd_char_sat(simd_short8   __x);
 128static simd_char16 SIMD_CFUNC simd_char_sat(simd_short16  __x);
 129static simd_char32 SIMD_CFUNC simd_char_sat(simd_short32  __x);
 130static simd_char2  SIMD_CFUNC simd_char_sat(simd_half2    __x);
 131static simd_char3  SIMD_CFUNC simd_char_sat(simd_half3    __x);
 132static simd_char4  SIMD_CFUNC simd_char_sat(simd_half4    __x);
 133static simd_char8  SIMD_CFUNC simd_char_sat(simd_half8    __x);
 134static simd_char16 SIMD_CFUNC simd_char_sat(simd_half16   __x);
 135static simd_char32 SIMD_CFUNC simd_char_sat(simd_half32   __x);
 136static simd_char2  SIMD_CFUNC simd_char_sat(simd_int2     __x);
 137static simd_char3  SIMD_CFUNC simd_char_sat(simd_int3     __x);
 138static simd_char4  SIMD_CFUNC simd_char_sat(simd_int4     __x);
 139static simd_char8  SIMD_CFUNC simd_char_sat(simd_int8     __x);
 140static simd_char16 SIMD_CFUNC simd_char_sat(simd_int16    __x);
 141static simd_char2  SIMD_CFUNC simd_char_sat(simd_float2   __x);
 142static simd_char3  SIMD_CFUNC simd_char_sat(simd_float3   __x);
 143static simd_char4  SIMD_CFUNC simd_char_sat(simd_float4   __x);
 144static simd_char8  SIMD_CFUNC simd_char_sat(simd_float8   __x);
 145static simd_char16 SIMD_CFUNC simd_char_sat(simd_float16  __x);
 146static simd_char2  SIMD_CFUNC simd_char_sat(simd_long2    __x);
 147static simd_char3  SIMD_CFUNC simd_char_sat(simd_long3    __x);
 148static simd_char4  SIMD_CFUNC simd_char_sat(simd_long4    __x);
 149static simd_char8  SIMD_CFUNC simd_char_sat(simd_long8    __x);
 150static simd_char2  SIMD_CFUNC simd_char_sat(simd_double2  __x);
 151static simd_char3  SIMD_CFUNC simd_char_sat(simd_double3  __x);
 152static simd_char4  SIMD_CFUNC simd_char_sat(simd_double4  __x);
 153static simd_char8  SIMD_CFUNC simd_char_sat(simd_double8  __x);
 154static simd_char2  SIMD_CFUNC simd_char_sat(simd_uchar2   __x);
 155static simd_char3  SIMD_CFUNC simd_char_sat(simd_uchar3   __x);
 156static simd_char4  SIMD_CFUNC simd_char_sat(simd_uchar4   __x);
 157static simd_char8  SIMD_CFUNC simd_char_sat(simd_uchar8   __x);
 158static simd_char16 SIMD_CFUNC simd_char_sat(simd_uchar16  __x);
 159static simd_char32 SIMD_CFUNC simd_char_sat(simd_uchar32  __x);
 160static simd_char2  SIMD_CFUNC simd_char_sat(simd_ushort2  __x);
 161static simd_char3  SIMD_CFUNC simd_char_sat(simd_ushort3  __x);
 162static simd_char4  SIMD_CFUNC simd_char_sat(simd_ushort4  __x);
 163static simd_char8  SIMD_CFUNC simd_char_sat(simd_ushort8  __x);
 164static simd_char16 SIMD_CFUNC simd_char_sat(simd_ushort16 __x);
 165static simd_char32 SIMD_CFUNC simd_char_sat(simd_ushort32 __x);
 166static simd_char2  SIMD_CFUNC simd_char_sat(simd_uint2    __x);
 167static simd_char3  SIMD_CFUNC simd_char_sat(simd_uint3    __x);
 168static simd_char4  SIMD_CFUNC simd_char_sat(simd_uint4    __x);
 169static simd_char8  SIMD_CFUNC simd_char_sat(simd_uint8    __x);
 170static simd_char16 SIMD_CFUNC simd_char_sat(simd_uint16   __x);
 171static simd_char2  SIMD_CFUNC simd_char_sat(simd_ulong2   __x);
 172static simd_char3  SIMD_CFUNC simd_char_sat(simd_ulong3   __x);
 173static simd_char4  SIMD_CFUNC simd_char_sat(simd_ulong4   __x);
 174static simd_char8  SIMD_CFUNC simd_char_sat(simd_ulong8   __x);
 175#define vector_char simd_char
 176#define vector_char_sat simd_char_sat
 177
 178static simd_uchar2  SIMD_CFUNC simd_uchar(simd_char2    __x);
 179static simd_uchar3  SIMD_CFUNC simd_uchar(simd_char3    __x);
 180static simd_uchar4  SIMD_CFUNC simd_uchar(simd_char4    __x);
 181static simd_uchar8  SIMD_CFUNC simd_uchar(simd_char8    __x);
 182static simd_uchar16 SIMD_CFUNC simd_uchar(simd_char16   __x);
 183static simd_uchar32 SIMD_CFUNC simd_uchar(simd_char32   __x);
 184static simd_uchar2  SIMD_CFUNC simd_uchar(simd_uchar2   __x);
 185static simd_uchar3  SIMD_CFUNC simd_uchar(simd_uchar3   __x);
 186static simd_uchar4  SIMD_CFUNC simd_uchar(simd_uchar4   __x);
 187static simd_uchar8  SIMD_CFUNC simd_uchar(simd_uchar8   __x);
 188static simd_uchar16 SIMD_CFUNC simd_uchar(simd_uchar16  __x);
 189static simd_uchar32 SIMD_CFUNC simd_uchar(simd_uchar32  __x);
 190static simd_uchar2  SIMD_CFUNC simd_uchar(simd_short2   __x);
 191static simd_uchar3  SIMD_CFUNC simd_uchar(simd_short3   __x);
 192static simd_uchar4  SIMD_CFUNC simd_uchar(simd_short4   __x);
 193static simd_uchar8  SIMD_CFUNC simd_uchar(simd_short8   __x);
 194static simd_uchar16 SIMD_CFUNC simd_uchar(simd_short16  __x);
 195static simd_uchar32 SIMD_CFUNC simd_uchar(simd_short32  __x);
 196static simd_uchar2  SIMD_CFUNC simd_uchar(simd_ushort2  __x);
 197static simd_uchar3  SIMD_CFUNC simd_uchar(simd_ushort3  __x);
 198static simd_uchar4  SIMD_CFUNC simd_uchar(simd_ushort4  __x);
 199static simd_uchar8  SIMD_CFUNC simd_uchar(simd_ushort8  __x);
 200static simd_uchar16 SIMD_CFUNC simd_uchar(simd_ushort16 __x);
 201static simd_uchar32 SIMD_CFUNC simd_uchar(simd_ushort32 __x);
 202static simd_uchar2  SIMD_CFUNC simd_uchar(simd_half2    __x);
 203static simd_uchar3  SIMD_CFUNC simd_uchar(simd_half3    __x);
 204static simd_uchar4  SIMD_CFUNC simd_uchar(simd_half4    __x);
 205static simd_uchar8  SIMD_CFUNC simd_uchar(simd_half8    __x);
 206static simd_uchar16 SIMD_CFUNC simd_uchar(simd_half16   __x);
 207static simd_uchar32 SIMD_CFUNC simd_uchar(simd_half32   __x);
 208static simd_uchar2  SIMD_CFUNC simd_uchar(simd_int2     __x);
 209static simd_uchar3  SIMD_CFUNC simd_uchar(simd_int3     __x);
 210static simd_uchar4  SIMD_CFUNC simd_uchar(simd_int4     __x);
 211static simd_uchar8  SIMD_CFUNC simd_uchar(simd_int8     __x);
 212static simd_uchar16 SIMD_CFUNC simd_uchar(simd_int16    __x);
 213static simd_uchar2  SIMD_CFUNC simd_uchar(simd_uint2    __x);
 214static simd_uchar3  SIMD_CFUNC simd_uchar(simd_uint3    __x);
 215static simd_uchar4  SIMD_CFUNC simd_uchar(simd_uint4    __x);
 216static simd_uchar8  SIMD_CFUNC simd_uchar(simd_uint8    __x);
 217static simd_uchar16 SIMD_CFUNC simd_uchar(simd_uint16   __x);
 218static simd_uchar2  SIMD_CFUNC simd_uchar(simd_float2   __x);
 219static simd_uchar3  SIMD_CFUNC simd_uchar(simd_float3   __x);
 220static simd_uchar4  SIMD_CFUNC simd_uchar(simd_float4   __x);
 221static simd_uchar8  SIMD_CFUNC simd_uchar(simd_float8   __x);
 222static simd_uchar16 SIMD_CFUNC simd_uchar(simd_float16  __x);
 223static simd_uchar2  SIMD_CFUNC simd_uchar(simd_long2    __x);
 224static simd_uchar3  SIMD_CFUNC simd_uchar(simd_long3    __x);
 225static simd_uchar4  SIMD_CFUNC simd_uchar(simd_long4    __x);
 226static simd_uchar8  SIMD_CFUNC simd_uchar(simd_long8    __x);
 227static simd_uchar2  SIMD_CFUNC simd_uchar(simd_ulong2   __x);
 228static simd_uchar3  SIMD_CFUNC simd_uchar(simd_ulong3   __x);
 229static simd_uchar4  SIMD_CFUNC simd_uchar(simd_ulong4   __x);
 230static simd_uchar8  SIMD_CFUNC simd_uchar(simd_ulong8   __x);
 231static simd_uchar2  SIMD_CFUNC simd_uchar(simd_double2  __x);
 232static simd_uchar3  SIMD_CFUNC simd_uchar(simd_double3  __x);
 233static simd_uchar4  SIMD_CFUNC simd_uchar(simd_double4  __x);
 234static simd_uchar8  SIMD_CFUNC simd_uchar(simd_double8  __x);
 235static simd_uchar2  SIMD_CFUNC simd_uchar_sat(simd_char2    __x);
 236static simd_uchar3  SIMD_CFUNC simd_uchar_sat(simd_char3    __x);
 237static simd_uchar4  SIMD_CFUNC simd_uchar_sat(simd_char4    __x);
 238static simd_uchar8  SIMD_CFUNC simd_uchar_sat(simd_char8    __x);
 239static simd_uchar16 SIMD_CFUNC simd_uchar_sat(simd_char16   __x);
 240static simd_uchar32 SIMD_CFUNC simd_uchar_sat(simd_char32   __x);
 241static simd_uchar2  SIMD_CFUNC simd_uchar_sat(simd_short2   __x);
 242static simd_uchar3  SIMD_CFUNC simd_uchar_sat(simd_short3   __x);
 243static simd_uchar4  SIMD_CFUNC simd_uchar_sat(simd_short4   __x);
 244static simd_uchar8  SIMD_CFUNC simd_uchar_sat(simd_short8   __x);
 245static simd_uchar16 SIMD_CFUNC simd_uchar_sat(simd_short16  __x);
 246static simd_uchar32 SIMD_CFUNC simd_uchar_sat(simd_short32  __x);
 247static simd_uchar2  SIMD_CFUNC simd_uchar_sat(simd_half2    __x);
 248static simd_uchar3  SIMD_CFUNC simd_uchar_sat(simd_half3    __x);
 249static simd_uchar4  SIMD_CFUNC simd_uchar_sat(simd_half4    __x);
 250static simd_uchar8  SIMD_CFUNC simd_uchar_sat(simd_half8    __x);
 251static simd_uchar16 SIMD_CFUNC simd_uchar_sat(simd_half16   __x);
 252static simd_uchar32 SIMD_CFUNC simd_uchar_sat(simd_half32   __x);
 253static simd_uchar2  SIMD_CFUNC simd_uchar_sat(simd_int2     __x);
 254static simd_uchar3  SIMD_CFUNC simd_uchar_sat(simd_int3     __x);
 255static simd_uchar4  SIMD_CFUNC simd_uchar_sat(simd_int4     __x);
 256static simd_uchar8  SIMD_CFUNC simd_uchar_sat(simd_int8     __x);
 257static simd_uchar16 SIMD_CFUNC simd_uchar_sat(simd_int16    __x);
 258static simd_uchar2  SIMD_CFUNC simd_uchar_sat(simd_float2   __x);
 259static simd_uchar3  SIMD_CFUNC simd_uchar_sat(simd_float3   __x);
 260static simd_uchar4  SIMD_CFUNC simd_uchar_sat(simd_float4   __x);
 261static simd_uchar8  SIMD_CFUNC simd_uchar_sat(simd_float8   __x);
 262static simd_uchar16 SIMD_CFUNC simd_uchar_sat(simd_float16  __x);
 263static simd_uchar2  SIMD_CFUNC simd_uchar_sat(simd_long2    __x);
 264static simd_uchar3  SIMD_CFUNC simd_uchar_sat(simd_long3    __x);
 265static simd_uchar4  SIMD_CFUNC simd_uchar_sat(simd_long4    __x);
 266static simd_uchar8  SIMD_CFUNC simd_uchar_sat(simd_long8    __x);
 267static simd_uchar2  SIMD_CFUNC simd_uchar_sat(simd_double2  __x);
 268static simd_uchar3  SIMD_CFUNC simd_uchar_sat(simd_double3  __x);
 269static simd_uchar4  SIMD_CFUNC simd_uchar_sat(simd_double4  __x);
 270static simd_uchar8  SIMD_CFUNC simd_uchar_sat(simd_double8  __x);
 271static simd_uchar2  SIMD_CFUNC simd_uchar_sat(simd_uchar2   __x);
 272static simd_uchar3  SIMD_CFUNC simd_uchar_sat(simd_uchar3   __x);
 273static simd_uchar4  SIMD_CFUNC simd_uchar_sat(simd_uchar4   __x);
 274static simd_uchar8  SIMD_CFUNC simd_uchar_sat(simd_uchar8   __x);
 275static simd_uchar16 SIMD_CFUNC simd_uchar_sat(simd_uchar16  __x);
 276static simd_uchar32 SIMD_CFUNC simd_uchar_sat(simd_uchar32  __x);
 277static simd_uchar2  SIMD_CFUNC simd_uchar_sat(simd_ushort2  __x);
 278static simd_uchar3  SIMD_CFUNC simd_uchar_sat(simd_ushort3  __x);
 279static simd_uchar4  SIMD_CFUNC simd_uchar_sat(simd_ushort4  __x);
 280static simd_uchar8  SIMD_CFUNC simd_uchar_sat(simd_ushort8  __x);
 281static simd_uchar16 SIMD_CFUNC simd_uchar_sat(simd_ushort16 __x);
 282static simd_uchar32 SIMD_CFUNC simd_uchar_sat(simd_ushort32 __x);
 283static simd_uchar2  SIMD_CFUNC simd_uchar_sat(simd_uint2    __x);
 284static simd_uchar3  SIMD_CFUNC simd_uchar_sat(simd_uint3    __x);
 285static simd_uchar4  SIMD_CFUNC simd_uchar_sat(simd_uint4    __x);
 286static simd_uchar8  SIMD_CFUNC simd_uchar_sat(simd_uint8    __x);
 287static simd_uchar16 SIMD_CFUNC simd_uchar_sat(simd_uint16   __x);
 288static simd_uchar2  SIMD_CFUNC simd_uchar_sat(simd_ulong2   __x);
 289static simd_uchar3  SIMD_CFUNC simd_uchar_sat(simd_ulong3   __x);
 290static simd_uchar4  SIMD_CFUNC simd_uchar_sat(simd_ulong4   __x);
 291static simd_uchar8  SIMD_CFUNC simd_uchar_sat(simd_ulong8   __x);
 292#define vector_uchar simd_uchar
 293#define vector_uchar_sat simd_uchar_sat
 294
 295static simd_short2  SIMD_CFUNC simd_short(simd_char2    __x);
 296static simd_short3  SIMD_CFUNC simd_short(simd_char3    __x);
 297static simd_short4  SIMD_CFUNC simd_short(simd_char4    __x);
 298static simd_short8  SIMD_CFUNC simd_short(simd_char8    __x);
 299static simd_short16 SIMD_CFUNC simd_short(simd_char16   __x);
 300static simd_short32 SIMD_CFUNC simd_short(simd_char32   __x);
 301static simd_short2  SIMD_CFUNC simd_short(simd_uchar2   __x);
 302static simd_short3  SIMD_CFUNC simd_short(simd_uchar3   __x);
 303static simd_short4  SIMD_CFUNC simd_short(simd_uchar4   __x);
 304static simd_short8  SIMD_CFUNC simd_short(simd_uchar8   __x);
 305static simd_short16 SIMD_CFUNC simd_short(simd_uchar16  __x);
 306static simd_short32 SIMD_CFUNC simd_short(simd_uchar32  __x);
 307static simd_short2  SIMD_CFUNC simd_short(simd_short2   __x);
 308static simd_short3  SIMD_CFUNC simd_short(simd_short3   __x);
 309static simd_short4  SIMD_CFUNC simd_short(simd_short4   __x);
 310static simd_short8  SIMD_CFUNC simd_short(simd_short8   __x);
 311static simd_short16 SIMD_CFUNC simd_short(simd_short16  __x);
 312static simd_short32 SIMD_CFUNC simd_short(simd_short32  __x);
 313static simd_short2  SIMD_CFUNC simd_short(simd_ushort2  __x);
 314static simd_short3  SIMD_CFUNC simd_short(simd_ushort3  __x);
 315static simd_short4  SIMD_CFUNC simd_short(simd_ushort4  __x);
 316static simd_short8  SIMD_CFUNC simd_short(simd_ushort8  __x);
 317static simd_short16 SIMD_CFUNC simd_short(simd_ushort16 __x);
 318static simd_short32 SIMD_CFUNC simd_short(simd_ushort32 __x);
 319static simd_short2  SIMD_CFUNC simd_short(simd_half2    __x);
 320static simd_short3  SIMD_CFUNC simd_short(simd_half3    __x);
 321static simd_short4  SIMD_CFUNC simd_short(simd_half4    __x);
 322static simd_short8  SIMD_CFUNC simd_short(simd_half8    __x);
 323static simd_short16 SIMD_CFUNC simd_short(simd_half16   __x);
 324static simd_short32 SIMD_CFUNC simd_short(simd_half32   __x);
 325static simd_short2  SIMD_CFUNC simd_short(simd_int2     __x);
 326static simd_short3  SIMD_CFUNC simd_short(simd_int3     __x);
 327static simd_short4  SIMD_CFUNC simd_short(simd_int4     __x);
 328static simd_short8  SIMD_CFUNC simd_short(simd_int8     __x);
 329static simd_short16 SIMD_CFUNC simd_short(simd_int16    __x);
 330static simd_short2  SIMD_CFUNC simd_short(simd_uint2    __x);
 331static simd_short3  SIMD_CFUNC simd_short(simd_uint3    __x);
 332static simd_short4  SIMD_CFUNC simd_short(simd_uint4    __x);
 333static simd_short8  SIMD_CFUNC simd_short(simd_uint8    __x);
 334static simd_short16 SIMD_CFUNC simd_short(simd_uint16   __x);
 335static simd_short2  SIMD_CFUNC simd_short(simd_float2   __x);
 336static simd_short3  SIMD_CFUNC simd_short(simd_float3   __x);
 337static simd_short4  SIMD_CFUNC simd_short(simd_float4   __x);
 338static simd_short8  SIMD_CFUNC simd_short(simd_float8   __x);
 339static simd_short16 SIMD_CFUNC simd_short(simd_float16  __x);
 340static simd_short2  SIMD_CFUNC simd_short(simd_long2    __x);
 341static simd_short3  SIMD_CFUNC simd_short(simd_long3    __x);
 342static simd_short4  SIMD_CFUNC simd_short(simd_long4    __x);
 343static simd_short8  SIMD_CFUNC simd_short(simd_long8    __x);
 344static simd_short2  SIMD_CFUNC simd_short(simd_ulong2   __x);
 345static simd_short3  SIMD_CFUNC simd_short(simd_ulong3   __x);
 346static simd_short4  SIMD_CFUNC simd_short(simd_ulong4   __x);
 347static simd_short8  SIMD_CFUNC simd_short(simd_ulong8   __x);
 348static simd_short2  SIMD_CFUNC simd_short(simd_double2  __x);
 349static simd_short3  SIMD_CFUNC simd_short(simd_double3  __x);
 350static simd_short4  SIMD_CFUNC simd_short(simd_double4  __x);
 351static simd_short8  SIMD_CFUNC simd_short(simd_double8  __x);
 352static simd_short2  SIMD_CFUNC simd_short_sat(simd_char2    __x);
 353static simd_short3  SIMD_CFUNC simd_short_sat(simd_char3    __x);
 354static simd_short4  SIMD_CFUNC simd_short_sat(simd_char4    __x);
 355static simd_short8  SIMD_CFUNC simd_short_sat(simd_char8    __x);
 356static simd_short16 SIMD_CFUNC simd_short_sat(simd_char16   __x);
 357static simd_short32 SIMD_CFUNC simd_short_sat(simd_char32   __x);
 358static simd_short2  SIMD_CFUNC simd_short_sat(simd_short2   __x);
 359static simd_short3  SIMD_CFUNC simd_short_sat(simd_short3   __x);
 360static simd_short4  SIMD_CFUNC simd_short_sat(simd_short4   __x);
 361static simd_short8  SIMD_CFUNC simd_short_sat(simd_short8   __x);
 362static simd_short16 SIMD_CFUNC simd_short_sat(simd_short16  __x);
 363static simd_short32 SIMD_CFUNC simd_short_sat(simd_short32  __x);
 364static simd_short2  SIMD_CFUNC simd_short_sat(simd_half2    __x);
 365static simd_short3  SIMD_CFUNC simd_short_sat(simd_half3    __x);
 366static simd_short4  SIMD_CFUNC simd_short_sat(simd_half4    __x);
 367static simd_short8  SIMD_CFUNC simd_short_sat(simd_half8    __x);
 368static simd_short16 SIMD_CFUNC simd_short_sat(simd_half16   __x);
 369static simd_short32 SIMD_CFUNC simd_short_sat(simd_half32   __x);
 370static simd_short2  SIMD_CFUNC simd_short_sat(simd_int2     __x);
 371static simd_short3  SIMD_CFUNC simd_short_sat(simd_int3     __x);
 372static simd_short4  SIMD_CFUNC simd_short_sat(simd_int4     __x);
 373static simd_short8  SIMD_CFUNC simd_short_sat(simd_int8     __x);
 374static simd_short16 SIMD_CFUNC simd_short_sat(simd_int16    __x);
 375static simd_short2  SIMD_CFUNC simd_short_sat(simd_float2   __x);
 376static simd_short3  SIMD_CFUNC simd_short_sat(simd_float3   __x);
 377static simd_short4  SIMD_CFUNC simd_short_sat(simd_float4   __x);
 378static simd_short8  SIMD_CFUNC simd_short_sat(simd_float8   __x);
 379static simd_short16 SIMD_CFUNC simd_short_sat(simd_float16  __x);
 380static simd_short2  SIMD_CFUNC simd_short_sat(simd_long2    __x);
 381static simd_short3  SIMD_CFUNC simd_short_sat(simd_long3    __x);
 382static simd_short4  SIMD_CFUNC simd_short_sat(simd_long4    __x);
 383static simd_short8  SIMD_CFUNC simd_short_sat(simd_long8    __x);
 384static simd_short2  SIMD_CFUNC simd_short_sat(simd_double2  __x);
 385static simd_short3  SIMD_CFUNC simd_short_sat(simd_double3  __x);
 386static simd_short4  SIMD_CFUNC simd_short_sat(simd_double4  __x);
 387static simd_short8  SIMD_CFUNC simd_short_sat(simd_double8  __x);
 388static simd_short2  SIMD_CFUNC simd_short_sat(simd_uchar2   __x);
 389static simd_short3  SIMD_CFUNC simd_short_sat(simd_uchar3   __x);
 390static simd_short4  SIMD_CFUNC simd_short_sat(simd_uchar4   __x);
 391static simd_short8  SIMD_CFUNC simd_short_sat(simd_uchar8   __x);
 392static simd_short16 SIMD_CFUNC simd_short_sat(simd_uchar16  __x);
 393static simd_short32 SIMD_CFUNC simd_short_sat(simd_uchar32  __x);
 394static simd_short2  SIMD_CFUNC simd_short_sat(simd_ushort2  __x);
 395static simd_short3  SIMD_CFUNC simd_short_sat(simd_ushort3  __x);
 396static simd_short4  SIMD_CFUNC simd_short_sat(simd_ushort4  __x);
 397static simd_short8  SIMD_CFUNC simd_short_sat(simd_ushort8  __x);
 398static simd_short16 SIMD_CFUNC simd_short_sat(simd_ushort16 __x);
 399static simd_short32 SIMD_CFUNC simd_short_sat(simd_ushort32 __x);
 400static simd_short2  SIMD_CFUNC simd_short_sat(simd_uint2    __x);
 401static simd_short3  SIMD_CFUNC simd_short_sat(simd_uint3    __x);
 402static simd_short4  SIMD_CFUNC simd_short_sat(simd_uint4    __x);
 403static simd_short8  SIMD_CFUNC simd_short_sat(simd_uint8    __x);
 404static simd_short16 SIMD_CFUNC simd_short_sat(simd_uint16   __x);
 405static simd_short2  SIMD_CFUNC simd_short_sat(simd_ulong2   __x);
 406static simd_short3  SIMD_CFUNC simd_short_sat(simd_ulong3   __x);
 407static simd_short4  SIMD_CFUNC simd_short_sat(simd_ulong4   __x);
 408static simd_short8  SIMD_CFUNC simd_short_sat(simd_ulong8   __x);
 409static simd_short2  SIMD_CFUNC simd_short_rte(simd_half2    __x);
 410static simd_short3  SIMD_CFUNC simd_short_rte(simd_half3    __x);
 411static simd_short4  SIMD_CFUNC simd_short_rte(simd_half4    __x);
 412static simd_short8  SIMD_CFUNC simd_short_rte(simd_half8    __x);
 413static simd_short16 SIMD_CFUNC simd_short_rte(simd_half16   __x);
 414static simd_short32 SIMD_CFUNC simd_short_rte(simd_half32   __x);
 415#define vector_short simd_short
 416#define vector_short_sat simd_short_sat
 417
 418static simd_ushort2  SIMD_CFUNC simd_ushort(simd_char2    __x);
 419static simd_ushort3  SIMD_CFUNC simd_ushort(simd_char3    __x);
 420static simd_ushort4  SIMD_CFUNC simd_ushort(simd_char4    __x);
 421static simd_ushort8  SIMD_CFUNC simd_ushort(simd_char8    __x);
 422static simd_ushort16 SIMD_CFUNC simd_ushort(simd_char16   __x);
 423static simd_ushort32 SIMD_CFUNC simd_ushort(simd_char32   __x);
 424static simd_ushort2  SIMD_CFUNC simd_ushort(simd_uchar2   __x);
 425static simd_ushort3  SIMD_CFUNC simd_ushort(simd_uchar3   __x);
 426static simd_ushort4  SIMD_CFUNC simd_ushort(simd_uchar4   __x);
 427static simd_ushort8  SIMD_CFUNC simd_ushort(simd_uchar8   __x);
 428static simd_ushort16 SIMD_CFUNC simd_ushort(simd_uchar16  __x);
 429static simd_ushort32 SIMD_CFUNC simd_ushort(simd_uchar32  __x);
 430static simd_ushort2  SIMD_CFUNC simd_ushort(simd_short2   __x);
 431static simd_ushort3  SIMD_CFUNC simd_ushort(simd_short3   __x);
 432static simd_ushort4  SIMD_CFUNC simd_ushort(simd_short4   __x);
 433static simd_ushort8  SIMD_CFUNC simd_ushort(simd_short8   __x);
 434static simd_ushort16 SIMD_CFUNC simd_ushort(simd_short16  __x);
 435static simd_ushort32 SIMD_CFUNC simd_ushort(simd_short32  __x);
 436static simd_ushort2  SIMD_CFUNC simd_ushort(simd_ushort2  __x);
 437static simd_ushort3  SIMD_CFUNC simd_ushort(simd_ushort3  __x);
 438static simd_ushort4  SIMD_CFUNC simd_ushort(simd_ushort4  __x);
 439static simd_ushort8  SIMD_CFUNC simd_ushort(simd_ushort8  __x);
 440static simd_ushort16 SIMD_CFUNC simd_ushort(simd_ushort16 __x);
 441static simd_ushort32 SIMD_CFUNC simd_ushort(simd_ushort32 __x);
 442static simd_ushort2  SIMD_CFUNC simd_ushort(simd_half2    __x);
 443static simd_ushort3  SIMD_CFUNC simd_ushort(simd_half3    __x);
 444static simd_ushort4  SIMD_CFUNC simd_ushort(simd_half4    __x);
 445static simd_ushort8  SIMD_CFUNC simd_ushort(simd_half8    __x);
 446static simd_ushort16 SIMD_CFUNC simd_ushort(simd_half16   __x);
 447static simd_ushort32 SIMD_CFUNC simd_ushort(simd_half32   __x);
 448static simd_ushort2  SIMD_CFUNC simd_ushort(simd_int2     __x);
 449static simd_ushort3  SIMD_CFUNC simd_ushort(simd_int3     __x);
 450static simd_ushort4  SIMD_CFUNC simd_ushort(simd_int4     __x);
 451static simd_ushort8  SIMD_CFUNC simd_ushort(simd_int8     __x);
 452static simd_ushort16 SIMD_CFUNC simd_ushort(simd_int16    __x);
 453static simd_ushort2  SIMD_CFUNC simd_ushort(simd_uint2    __x);
 454static simd_ushort3  SIMD_CFUNC simd_ushort(simd_uint3    __x);
 455static simd_ushort4  SIMD_CFUNC simd_ushort(simd_uint4    __x);
 456static simd_ushort8  SIMD_CFUNC simd_ushort(simd_uint8    __x);
 457static simd_ushort16 SIMD_CFUNC simd_ushort(simd_uint16   __x);
 458static simd_ushort2  SIMD_CFUNC simd_ushort(simd_float2   __x);
 459static simd_ushort3  SIMD_CFUNC simd_ushort(simd_float3   __x);
 460static simd_ushort4  SIMD_CFUNC simd_ushort(simd_float4   __x);
 461static simd_ushort8  SIMD_CFUNC simd_ushort(simd_float8   __x);
 462static simd_ushort16 SIMD_CFUNC simd_ushort(simd_float16  __x);
 463static simd_ushort2  SIMD_CFUNC simd_ushort(simd_long2    __x);
 464static simd_ushort3  SIMD_CFUNC simd_ushort(simd_long3    __x);
 465static simd_ushort4  SIMD_CFUNC simd_ushort(simd_long4    __x);
 466static simd_ushort8  SIMD_CFUNC simd_ushort(simd_long8    __x);
 467static simd_ushort2  SIMD_CFUNC simd_ushort(simd_ulong2   __x);
 468static simd_ushort3  SIMD_CFUNC simd_ushort(simd_ulong3   __x);
 469static simd_ushort4  SIMD_CFUNC simd_ushort(simd_ulong4   __x);
 470static simd_ushort8  SIMD_CFUNC simd_ushort(simd_ulong8   __x);
 471static simd_ushort2  SIMD_CFUNC simd_ushort(simd_double2  __x);
 472static simd_ushort3  SIMD_CFUNC simd_ushort(simd_double3  __x);
 473static simd_ushort4  SIMD_CFUNC simd_ushort(simd_double4  __x);
 474static simd_ushort8  SIMD_CFUNC simd_ushort(simd_double8  __x);
 475static simd_ushort2  SIMD_CFUNC simd_ushort_sat(simd_char2    __x);
 476static simd_ushort3  SIMD_CFUNC simd_ushort_sat(simd_char3    __x);
 477static simd_ushort4  SIMD_CFUNC simd_ushort_sat(simd_char4    __x);
 478static simd_ushort8  SIMD_CFUNC simd_ushort_sat(simd_char8    __x);
 479static simd_ushort16 SIMD_CFUNC simd_ushort_sat(simd_char16   __x);
 480static simd_ushort32 SIMD_CFUNC simd_ushort_sat(simd_char32   __x);
 481static simd_ushort2  SIMD_CFUNC simd_ushort_sat(simd_short2   __x);
 482static simd_ushort3  SIMD_CFUNC simd_ushort_sat(simd_short3   __x);
 483static simd_ushort4  SIMD_CFUNC simd_ushort_sat(simd_short4   __x);
 484static simd_ushort8  SIMD_CFUNC simd_ushort_sat(simd_short8   __x);
 485static simd_ushort16 SIMD_CFUNC simd_ushort_sat(simd_short16  __x);
 486static simd_ushort32 SIMD_CFUNC simd_ushort_sat(simd_short32  __x);
 487static simd_ushort2  SIMD_CFUNC simd_ushort_sat(simd_half2    __x);
 488static simd_ushort3  SIMD_CFUNC simd_ushort_sat(simd_half3    __x);
 489static simd_ushort4  SIMD_CFUNC simd_ushort_sat(simd_half4    __x);
 490static simd_ushort8  SIMD_CFUNC simd_ushort_sat(simd_half8    __x);
 491static simd_ushort16 SIMD_CFUNC simd_ushort_sat(simd_half16   __x);
 492static simd_ushort32 SIMD_CFUNC simd_ushort_sat(simd_half32   __x);
 493static simd_ushort2  SIMD_CFUNC simd_ushort_sat(simd_int2     __x);
 494static simd_ushort3  SIMD_CFUNC simd_ushort_sat(simd_int3     __x);
 495static simd_ushort4  SIMD_CFUNC simd_ushort_sat(simd_int4     __x);
 496static simd_ushort8  SIMD_CFUNC simd_ushort_sat(simd_int8     __x);
 497static simd_ushort16 SIMD_CFUNC simd_ushort_sat(simd_int16    __x);
 498static simd_ushort2  SIMD_CFUNC simd_ushort_sat(simd_float2   __x);
 499static simd_ushort3  SIMD_CFUNC simd_ushort_sat(simd_float3   __x);
 500static simd_ushort4  SIMD_CFUNC simd_ushort_sat(simd_float4   __x);
 501static simd_ushort8  SIMD_CFUNC simd_ushort_sat(simd_float8   __x);
 502static simd_ushort16 SIMD_CFUNC simd_ushort_sat(simd_float16  __x);
 503static simd_ushort2  SIMD_CFUNC simd_ushort_sat(simd_long2    __x);
 504static simd_ushort3  SIMD_CFUNC simd_ushort_sat(simd_long3    __x);
 505static simd_ushort4  SIMD_CFUNC simd_ushort_sat(simd_long4    __x);
 506static simd_ushort8  SIMD_CFUNC simd_ushort_sat(simd_long8    __x);
 507static simd_ushort2  SIMD_CFUNC simd_ushort_sat(simd_double2  __x);
 508static simd_ushort3  SIMD_CFUNC simd_ushort_sat(simd_double3  __x);
 509static simd_ushort4  SIMD_CFUNC simd_ushort_sat(simd_double4  __x);
 510static simd_ushort8  SIMD_CFUNC simd_ushort_sat(simd_double8  __x);
 511static simd_ushort2  SIMD_CFUNC simd_ushort_sat(simd_uchar2   __x);
 512static simd_ushort3  SIMD_CFUNC simd_ushort_sat(simd_uchar3   __x);
 513static simd_ushort4  SIMD_CFUNC simd_ushort_sat(simd_uchar4   __x);
 514static simd_ushort8  SIMD_CFUNC simd_ushort_sat(simd_uchar8   __x);
 515static simd_ushort16 SIMD_CFUNC simd_ushort_sat(simd_uchar16  __x);
 516static simd_ushort32 SIMD_CFUNC simd_ushort_sat(simd_uchar32  __x);
 517static simd_ushort2  SIMD_CFUNC simd_ushort_sat(simd_ushort2  __x);
 518static simd_ushort3  SIMD_CFUNC simd_ushort_sat(simd_ushort3  __x);
 519static simd_ushort4  SIMD_CFUNC simd_ushort_sat(simd_ushort4  __x);
 520static simd_ushort8  SIMD_CFUNC simd_ushort_sat(simd_ushort8  __x);
 521static simd_ushort16 SIMD_CFUNC simd_ushort_sat(simd_ushort16 __x);
 522static simd_ushort32 SIMD_CFUNC simd_ushort_sat(simd_ushort32 __x);
 523static simd_ushort2  SIMD_CFUNC simd_ushort_sat(simd_uint2    __x);
 524static simd_ushort3  SIMD_CFUNC simd_ushort_sat(simd_uint3    __x);
 525static simd_ushort4  SIMD_CFUNC simd_ushort_sat(simd_uint4    __x);
 526static simd_ushort8  SIMD_CFUNC simd_ushort_sat(simd_uint8    __x);
 527static simd_ushort16 SIMD_CFUNC simd_ushort_sat(simd_uint16   __x);
 528static simd_ushort2  SIMD_CFUNC simd_ushort_sat(simd_ulong2   __x);
 529static simd_ushort3  SIMD_CFUNC simd_ushort_sat(simd_ulong3   __x);
 530static simd_ushort4  SIMD_CFUNC simd_ushort_sat(simd_ulong4   __x);
 531static simd_ushort8  SIMD_CFUNC simd_ushort_sat(simd_ulong8   __x);
 532static simd_ushort2  SIMD_CFUNC simd_ushort_rte(simd_half2    __x);
 533static simd_ushort3  SIMD_CFUNC simd_ushort_rte(simd_half3    __x);
 534static simd_ushort4  SIMD_CFUNC simd_ushort_rte(simd_half4    __x);
 535static simd_ushort8  SIMD_CFUNC simd_ushort_rte(simd_half8    __x);
 536static simd_ushort16 SIMD_CFUNC simd_ushort_rte(simd_half16   __x);
 537static simd_ushort32 SIMD_CFUNC simd_ushort_rte(simd_half32   __x);
 538#define vector_ushort simd_ushort
 539#define vector_ushort_sat simd_ushort_sat
 540
 541static simd_half2  SIMD_CFUNC simd_half(simd_char2    __x);
 542static simd_half3  SIMD_CFUNC simd_half(simd_char3    __x);
 543static simd_half4  SIMD_CFUNC simd_half(simd_char4    __x);
 544static simd_half8  SIMD_CFUNC simd_half(simd_char8    __x);
 545static simd_half16 SIMD_CFUNC simd_half(simd_char16   __x);
 546static simd_half2  SIMD_CFUNC simd_half(simd_uchar2   __x);
 547static simd_half3  SIMD_CFUNC simd_half(simd_uchar3   __x);
 548static simd_half4  SIMD_CFUNC simd_half(simd_uchar4   __x);
 549static simd_half8  SIMD_CFUNC simd_half(simd_uchar8   __x);
 550static simd_half16 SIMD_CFUNC simd_half(simd_uchar16  __x);
 551static simd_half2  SIMD_CFUNC simd_half(simd_short2   __x);
 552static simd_half3  SIMD_CFUNC simd_half(simd_short3   __x);
 553static simd_half4  SIMD_CFUNC simd_half(simd_short4   __x);
 554static simd_half8  SIMD_CFUNC simd_half(simd_short8   __x);
 555static simd_half16 SIMD_CFUNC simd_half(simd_short16  __x);
 556static simd_half2  SIMD_CFUNC simd_half(simd_ushort2  __x);
 557static simd_half3  SIMD_CFUNC simd_half(simd_ushort3  __x);
 558static simd_half4  SIMD_CFUNC simd_half(simd_ushort4  __x);
 559static simd_half8  SIMD_CFUNC simd_half(simd_ushort8  __x);
 560static simd_half16 SIMD_CFUNC simd_half(simd_ushort16 __x);
 561static simd_half2  SIMD_CFUNC simd_half(simd_half2    __x);
 562static simd_half3  SIMD_CFUNC simd_half(simd_half3    __x);
 563static simd_half4  SIMD_CFUNC simd_half(simd_half4    __x);
 564static simd_half8  SIMD_CFUNC simd_half(simd_half8    __x);
 565static simd_half16 SIMD_CFUNC simd_half(simd_half16   __x);
 566static simd_half2  SIMD_CFUNC simd_half(simd_int2     __x);
 567static simd_half3  SIMD_CFUNC simd_half(simd_int3     __x);
 568static simd_half4  SIMD_CFUNC simd_half(simd_int4     __x);
 569static simd_half8  SIMD_CFUNC simd_half(simd_int8     __x);
 570static simd_half16 SIMD_CFUNC simd_half(simd_int16    __x);
 571static simd_half2  SIMD_CFUNC simd_half(simd_uint2    __x);
 572static simd_half3  SIMD_CFUNC simd_half(simd_uint3    __x);
 573static simd_half4  SIMD_CFUNC simd_half(simd_uint4    __x);
 574static simd_half8  SIMD_CFUNC simd_half(simd_uint8    __x);
 575static simd_half16 SIMD_CFUNC simd_half(simd_uint16   __x);
 576static simd_half2  SIMD_CFUNC simd_half(simd_float2   __x);
 577static simd_half3  SIMD_CFUNC simd_half(simd_float3   __x);
 578static simd_half4  SIMD_CFUNC simd_half(simd_float4   __x);
 579static simd_half8  SIMD_CFUNC simd_half(simd_float8   __x);
 580static simd_half16 SIMD_CFUNC simd_half(simd_float16  __x);
 581static simd_half2  SIMD_CFUNC simd_half(simd_long2    __x);
 582static simd_half3  SIMD_CFUNC simd_half(simd_long3    __x);
 583static simd_half4  SIMD_CFUNC simd_half(simd_long4    __x);
 584static simd_half8  SIMD_CFUNC simd_half(simd_long8    __x);
 585static simd_half2  SIMD_CFUNC simd_half(simd_ulong2   __x);
 586static simd_half3  SIMD_CFUNC simd_half(simd_ulong3   __x);
 587static simd_half4  SIMD_CFUNC simd_half(simd_ulong4   __x);
 588static simd_half8  SIMD_CFUNC simd_half(simd_ulong8   __x);
 589static simd_half2  SIMD_CFUNC simd_half(simd_double2  __x);
 590static simd_half3  SIMD_CFUNC simd_half(simd_double3  __x);
 591static simd_half4  SIMD_CFUNC simd_half(simd_double4  __x);
 592static simd_half8  SIMD_CFUNC simd_half(simd_double8  __x);
 593
 594static simd_int2  SIMD_CFUNC simd_int(simd_char2    __x);
 595static simd_int3  SIMD_CFUNC simd_int(simd_char3    __x);
 596static simd_int4  SIMD_CFUNC simd_int(simd_char4    __x);
 597static simd_int8  SIMD_CFUNC simd_int(simd_char8    __x);
 598static simd_int16 SIMD_CFUNC simd_int(simd_char16   __x);
 599static simd_int2  SIMD_CFUNC simd_int(simd_uchar2   __x);
 600static simd_int3  SIMD_CFUNC simd_int(simd_uchar3   __x);
 601static simd_int4  SIMD_CFUNC simd_int(simd_uchar4   __x);
 602static simd_int8  SIMD_CFUNC simd_int(simd_uchar8   __x);
 603static simd_int16 SIMD_CFUNC simd_int(simd_uchar16  __x);
 604static simd_int2  SIMD_CFUNC simd_int(simd_short2   __x);
 605static simd_int3  SIMD_CFUNC simd_int(simd_short3   __x);
 606static simd_int4  SIMD_CFUNC simd_int(simd_short4   __x);
 607static simd_int8  SIMD_CFUNC simd_int(simd_short8   __x);
 608static simd_int16 SIMD_CFUNC simd_int(simd_short16  __x);
 609static simd_int2  SIMD_CFUNC simd_int(simd_ushort2  __x);
 610static simd_int3  SIMD_CFUNC simd_int(simd_ushort3  __x);
 611static simd_int4  SIMD_CFUNC simd_int(simd_ushort4  __x);
 612static simd_int8  SIMD_CFUNC simd_int(simd_ushort8  __x);
 613static simd_int16 SIMD_CFUNC simd_int(simd_ushort16 __x);
 614static simd_int2  SIMD_CFUNC simd_int(simd_half2    __x);
 615static simd_int3  SIMD_CFUNC simd_int(simd_half3    __x);
 616static simd_int4  SIMD_CFUNC simd_int(simd_half4    __x);
 617static simd_int8  SIMD_CFUNC simd_int(simd_half8    __x);
 618static simd_int16 SIMD_CFUNC simd_int(simd_half16   __x);
 619static simd_int2  SIMD_CFUNC simd_int(simd_int2     __x);
 620static simd_int3  SIMD_CFUNC simd_int(simd_int3     __x);
 621static simd_int4  SIMD_CFUNC simd_int(simd_int4     __x);
 622static simd_int8  SIMD_CFUNC simd_int(simd_int8     __x);
 623static simd_int16 SIMD_CFUNC simd_int(simd_int16    __x);
 624static simd_int2  SIMD_CFUNC simd_int(simd_uint2    __x);
 625static simd_int3  SIMD_CFUNC simd_int(simd_uint3    __x);
 626static simd_int4  SIMD_CFUNC simd_int(simd_uint4    __x);
 627static simd_int8  SIMD_CFUNC simd_int(simd_uint8    __x);
 628static simd_int16 SIMD_CFUNC simd_int(simd_uint16   __x);
 629static simd_int2  SIMD_CFUNC simd_int(simd_float2   __x);
 630static simd_int3  SIMD_CFUNC simd_int(simd_float3   __x);
 631static simd_int4  SIMD_CFUNC simd_int(simd_float4   __x);
 632static simd_int8  SIMD_CFUNC simd_int(simd_float8   __x);
 633static simd_int16 SIMD_CFUNC simd_int(simd_float16  __x);
 634static simd_int2  SIMD_CFUNC simd_int(simd_long2    __x);
 635static simd_int3  SIMD_CFUNC simd_int(simd_long3    __x);
 636static simd_int4  SIMD_CFUNC simd_int(simd_long4    __x);
 637static simd_int8  SIMD_CFUNC simd_int(simd_long8    __x);
 638static simd_int2  SIMD_CFUNC simd_int(simd_ulong2   __x);
 639static simd_int3  SIMD_CFUNC simd_int(simd_ulong3   __x);
 640static simd_int4  SIMD_CFUNC simd_int(simd_ulong4   __x);
 641static simd_int8  SIMD_CFUNC simd_int(simd_ulong8   __x);
 642static simd_int2  SIMD_CFUNC simd_int(simd_double2  __x);
 643static simd_int3  SIMD_CFUNC simd_int(simd_double3  __x);
 644static simd_int4  SIMD_CFUNC simd_int(simd_double4  __x);
 645static simd_int8  SIMD_CFUNC simd_int(simd_double8  __x);
 646static simd_int2  SIMD_CFUNC simd_int_sat(simd_char2    __x);
 647static simd_int3  SIMD_CFUNC simd_int_sat(simd_char3    __x);
 648static simd_int4  SIMD_CFUNC simd_int_sat(simd_char4    __x);
 649static simd_int8  SIMD_CFUNC simd_int_sat(simd_char8    __x);
 650static simd_int16 SIMD_CFUNC simd_int_sat(simd_char16   __x);
 651static simd_int2  SIMD_CFUNC simd_int_sat(simd_short2   __x);
 652static simd_int3  SIMD_CFUNC simd_int_sat(simd_short3   __x);
 653static simd_int4  SIMD_CFUNC simd_int_sat(simd_short4   __x);
 654static simd_int8  SIMD_CFUNC simd_int_sat(simd_short8   __x);
 655static simd_int16 SIMD_CFUNC simd_int_sat(simd_short16  __x);
 656static simd_int2  SIMD_CFUNC simd_int_sat(simd_half2    __x);
 657static simd_int3  SIMD_CFUNC simd_int_sat(simd_half3    __x);
 658static simd_int4  SIMD_CFUNC simd_int_sat(simd_half4    __x);
 659static simd_int8  SIMD_CFUNC simd_int_sat(simd_half8    __x);
 660static simd_int16 SIMD_CFUNC simd_int_sat(simd_half16   __x);
 661static simd_int2  SIMD_CFUNC simd_int_sat(simd_int2     __x);
 662static simd_int3  SIMD_CFUNC simd_int_sat(simd_int3     __x);
 663static simd_int4  SIMD_CFUNC simd_int_sat(simd_int4     __x);
 664static simd_int8  SIMD_CFUNC simd_int_sat(simd_int8     __x);
 665static simd_int16 SIMD_CFUNC simd_int_sat(simd_int16    __x);
 666static simd_int2  SIMD_CFUNC simd_int_sat(simd_float2   __x);
 667static simd_int3  SIMD_CFUNC simd_int_sat(simd_float3   __x);
 668static simd_int4  SIMD_CFUNC simd_int_sat(simd_float4   __x);
 669static simd_int8  SIMD_CFUNC simd_int_sat(simd_float8   __x);
 670static simd_int16 SIMD_CFUNC simd_int_sat(simd_float16  __x);
 671static simd_int2  SIMD_CFUNC simd_int_sat(simd_long2    __x);
 672static simd_int3  SIMD_CFUNC simd_int_sat(simd_long3    __x);
 673static simd_int4  SIMD_CFUNC simd_int_sat(simd_long4    __x);
 674static simd_int8  SIMD_CFUNC simd_int_sat(simd_long8    __x);
 675static simd_int2  SIMD_CFUNC simd_int_sat(simd_double2  __x);
 676static simd_int3  SIMD_CFUNC simd_int_sat(simd_double3  __x);
 677static simd_int4  SIMD_CFUNC simd_int_sat(simd_double4  __x);
 678static simd_int8  SIMD_CFUNC simd_int_sat(simd_double8  __x);
 679static simd_int2  SIMD_CFUNC simd_int_sat(simd_uchar2   __x);
 680static simd_int3  SIMD_CFUNC simd_int_sat(simd_uchar3   __x);
 681static simd_int4  SIMD_CFUNC simd_int_sat(simd_uchar4   __x);
 682static simd_int8  SIMD_CFUNC simd_int_sat(simd_uchar8   __x);
 683static simd_int16 SIMD_CFUNC simd_int_sat(simd_uchar16  __x);
 684static simd_int2  SIMD_CFUNC simd_int_sat(simd_ushort2  __x);
 685static simd_int3  SIMD_CFUNC simd_int_sat(simd_ushort3  __x);
 686static simd_int4  SIMD_CFUNC simd_int_sat(simd_ushort4  __x);
 687static simd_int8  SIMD_CFUNC simd_int_sat(simd_ushort8  __x);
 688static simd_int16 SIMD_CFUNC simd_int_sat(simd_ushort16 __x);
 689static simd_int2  SIMD_CFUNC simd_int_sat(simd_uint2    __x);
 690static simd_int3  SIMD_CFUNC simd_int_sat(simd_uint3    __x);
 691static simd_int4  SIMD_CFUNC simd_int_sat(simd_uint4    __x);
 692static simd_int8  SIMD_CFUNC simd_int_sat(simd_uint8    __x);
 693static simd_int16 SIMD_CFUNC simd_int_sat(simd_uint16   __x);
 694static simd_int2  SIMD_CFUNC simd_int_sat(simd_ulong2   __x);
 695static simd_int3  SIMD_CFUNC simd_int_sat(simd_ulong3   __x);
 696static simd_int4  SIMD_CFUNC simd_int_sat(simd_ulong4   __x);
 697static simd_int8  SIMD_CFUNC simd_int_sat(simd_ulong8   __x);
 698static simd_int2  SIMD_CFUNC simd_int_rte(simd_float2   __x);
 699static simd_int3  SIMD_CFUNC simd_int_rte(simd_float3   __x);
 700static simd_int4  SIMD_CFUNC simd_int_rte(simd_float4   __x);
 701static simd_int8  SIMD_CFUNC simd_int_rte(simd_float8   __x);
 702static simd_int16 SIMD_CFUNC simd_int_rte(simd_float16  __x);
 703#define vector_int simd_int
 704#define vector_int_sat simd_int_sat
 705
 706static simd_uint2  SIMD_CFUNC simd_uint(simd_char2    __x);
 707static simd_uint3  SIMD_CFUNC simd_uint(simd_char3    __x);
 708static simd_uint4  SIMD_CFUNC simd_uint(simd_char4    __x);
 709static simd_uint8  SIMD_CFUNC simd_uint(simd_char8    __x);
 710static simd_uint16 SIMD_CFUNC simd_uint(simd_char16   __x);
 711static simd_uint2  SIMD_CFUNC simd_uint(simd_uchar2   __x);
 712static simd_uint3  SIMD_CFUNC simd_uint(simd_uchar3   __x);
 713static simd_uint4  SIMD_CFUNC simd_uint(simd_uchar4   __x);
 714static simd_uint8  SIMD_CFUNC simd_uint(simd_uchar8   __x);
 715static simd_uint16 SIMD_CFUNC simd_uint(simd_uchar16  __x);
 716static simd_uint2  SIMD_CFUNC simd_uint(simd_short2   __x);
 717static simd_uint3  SIMD_CFUNC simd_uint(simd_short3   __x);
 718static simd_uint4  SIMD_CFUNC simd_uint(simd_short4   __x);
 719static simd_uint8  SIMD_CFUNC simd_uint(simd_short8   __x);
 720static simd_uint16 SIMD_CFUNC simd_uint(simd_short16  __x);
 721static simd_uint2  SIMD_CFUNC simd_uint(simd_ushort2  __x);
 722static simd_uint3  SIMD_CFUNC simd_uint(simd_ushort3  __x);
 723static simd_uint4  SIMD_CFUNC simd_uint(simd_ushort4  __x);
 724static simd_uint8  SIMD_CFUNC simd_uint(simd_ushort8  __x);
 725static simd_uint16 SIMD_CFUNC simd_uint(simd_ushort16 __x);
 726static simd_uint2  SIMD_CFUNC simd_uint(simd_half2    __x);
 727static simd_uint3  SIMD_CFUNC simd_uint(simd_half3    __x);
 728static simd_uint4  SIMD_CFUNC simd_uint(simd_half4    __x);
 729static simd_uint8  SIMD_CFUNC simd_uint(simd_half8    __x);
 730static simd_uint16 SIMD_CFUNC simd_uint(simd_half16   __x);
 731static simd_uint2  SIMD_CFUNC simd_uint(simd_int2     __x);
 732static simd_uint3  SIMD_CFUNC simd_uint(simd_int3     __x);
 733static simd_uint4  SIMD_CFUNC simd_uint(simd_int4     __x);
 734static simd_uint8  SIMD_CFUNC simd_uint(simd_int8     __x);
 735static simd_uint16 SIMD_CFUNC simd_uint(simd_int16    __x);
 736static simd_uint2  SIMD_CFUNC simd_uint(simd_uint2    __x);
 737static simd_uint3  SIMD_CFUNC simd_uint(simd_uint3    __x);
 738static simd_uint4  SIMD_CFUNC simd_uint(simd_uint4    __x);
 739static simd_uint8  SIMD_CFUNC simd_uint(simd_uint8    __x);
 740static simd_uint16 SIMD_CFUNC simd_uint(simd_uint16   __x);
 741static simd_uint2  SIMD_CFUNC simd_uint(simd_float2   __x);
 742static simd_uint3  SIMD_CFUNC simd_uint(simd_float3   __x);
 743static simd_uint4  SIMD_CFUNC simd_uint(simd_float4   __x);
 744static simd_uint8  SIMD_CFUNC simd_uint(simd_float8   __x);
 745static simd_uint16 SIMD_CFUNC simd_uint(simd_float16  __x);
 746static simd_uint2  SIMD_CFUNC simd_uint(simd_long2    __x);
 747static simd_uint3  SIMD_CFUNC simd_uint(simd_long3    __x);
 748static simd_uint4  SIMD_CFUNC simd_uint(simd_long4    __x);
 749static simd_uint8  SIMD_CFUNC simd_uint(simd_long8    __x);
 750static simd_uint2  SIMD_CFUNC simd_uint(simd_ulong2   __x);
 751static simd_uint3  SIMD_CFUNC simd_uint(simd_ulong3   __x);
 752static simd_uint4  SIMD_CFUNC simd_uint(simd_ulong4   __x);
 753static simd_uint8  SIMD_CFUNC simd_uint(simd_ulong8   __x);
 754static simd_uint2  SIMD_CFUNC simd_uint(simd_double2  __x);
 755static simd_uint3  SIMD_CFUNC simd_uint(simd_double3  __x);
 756static simd_uint4  SIMD_CFUNC simd_uint(simd_double4  __x);
 757static simd_uint8  SIMD_CFUNC simd_uint(simd_double8  __x);
 758static simd_uint2  SIMD_CFUNC simd_uint_sat(simd_char2    __x);
 759static simd_uint3  SIMD_CFUNC simd_uint_sat(simd_char3    __x);
 760static simd_uint4  SIMD_CFUNC simd_uint_sat(simd_char4    __x);
 761static simd_uint8  SIMD_CFUNC simd_uint_sat(simd_char8    __x);
 762static simd_uint16 SIMD_CFUNC simd_uint_sat(simd_char16   __x);
 763static simd_uint2  SIMD_CFUNC simd_uint_sat(simd_short2   __x);
 764static simd_uint3  SIMD_CFUNC simd_uint_sat(simd_short3   __x);
 765static simd_uint4  SIMD_CFUNC simd_uint_sat(simd_short4   __x);
 766static simd_uint8  SIMD_CFUNC simd_uint_sat(simd_short8   __x);
 767static simd_uint16 SIMD_CFUNC simd_uint_sat(simd_short16  __x);
 768static simd_uint2  SIMD_CFUNC simd_uint_sat(simd_half2   __x);
 769static simd_uint3  SIMD_CFUNC simd_uint_sat(simd_half3   __x);
 770static simd_uint4  SIMD_CFUNC simd_uint_sat(simd_half4   __x);
 771static simd_uint8  SIMD_CFUNC simd_uint_sat(simd_half8   __x);
 772static simd_uint16 SIMD_CFUNC simd_uint_sat(simd_half16  __x);
 773static simd_uint2  SIMD_CFUNC simd_uint_sat(simd_int2     __x);
 774static simd_uint3  SIMD_CFUNC simd_uint_sat(simd_int3     __x);
 775static simd_uint4  SIMD_CFUNC simd_uint_sat(simd_int4     __x);
 776static simd_uint8  SIMD_CFUNC simd_uint_sat(simd_int8     __x);
 777static simd_uint16 SIMD_CFUNC simd_uint_sat(simd_int16    __x);
 778static simd_uint2  SIMD_CFUNC simd_uint_sat(simd_float2   __x);
 779static simd_uint3  SIMD_CFUNC simd_uint_sat(simd_float3   __x);
 780static simd_uint4  SIMD_CFUNC simd_uint_sat(simd_float4   __x);
 781static simd_uint8  SIMD_CFUNC simd_uint_sat(simd_float8   __x);
 782static simd_uint16 SIMD_CFUNC simd_uint_sat(simd_float16  __x);
 783static simd_uint2  SIMD_CFUNC simd_uint_sat(simd_long2    __x);
 784static simd_uint3  SIMD_CFUNC simd_uint_sat(simd_long3    __x);
 785static simd_uint4  SIMD_CFUNC simd_uint_sat(simd_long4    __x);
 786static simd_uint8  SIMD_CFUNC simd_uint_sat(simd_long8    __x);
 787static simd_uint2  SIMD_CFUNC simd_uint_sat(simd_double2  __x);
 788static simd_uint3  SIMD_CFUNC simd_uint_sat(simd_double3  __x);
 789static simd_uint4  SIMD_CFUNC simd_uint_sat(simd_double4  __x);
 790static simd_uint8  SIMD_CFUNC simd_uint_sat(simd_double8  __x);
 791static simd_uint2  SIMD_CFUNC simd_uint_sat(simd_uchar2   __x);
 792static simd_uint3  SIMD_CFUNC simd_uint_sat(simd_uchar3   __x);
 793static simd_uint4  SIMD_CFUNC simd_uint_sat(simd_uchar4   __x);
 794static simd_uint8  SIMD_CFUNC simd_uint_sat(simd_uchar8   __x);
 795static simd_uint16 SIMD_CFUNC simd_uint_sat(simd_uchar16  __x);
 796static simd_uint2  SIMD_CFUNC simd_uint_sat(simd_ushort2  __x);
 797static simd_uint3  SIMD_CFUNC simd_uint_sat(simd_ushort3  __x);
 798static simd_uint4  SIMD_CFUNC simd_uint_sat(simd_ushort4  __x);
 799static simd_uint8  SIMD_CFUNC simd_uint_sat(simd_ushort8  __x);
 800static simd_uint16 SIMD_CFUNC simd_uint_sat(simd_ushort16 __x);
 801static simd_uint2  SIMD_CFUNC simd_uint_sat(simd_uint2    __x);
 802static simd_uint3  SIMD_CFUNC simd_uint_sat(simd_uint3    __x);
 803static simd_uint4  SIMD_CFUNC simd_uint_sat(simd_uint4    __x);
 804static simd_uint8  SIMD_CFUNC simd_uint_sat(simd_uint8    __x);
 805static simd_uint16 SIMD_CFUNC simd_uint_sat(simd_uint16   __x);
 806static simd_uint2  SIMD_CFUNC simd_uint_sat(simd_ulong2   __x);
 807static simd_uint3  SIMD_CFUNC simd_uint_sat(simd_ulong3   __x);
 808static simd_uint4  SIMD_CFUNC simd_uint_sat(simd_ulong4   __x);
 809static simd_uint8  SIMD_CFUNC simd_uint_sat(simd_ulong8   __x);
 810static simd_uint2  SIMD_CFUNC simd_uint_rte(simd_float2   __x);
 811static simd_uint3  SIMD_CFUNC simd_uint_rte(simd_float3   __x);
 812static simd_uint4  SIMD_CFUNC simd_uint_rte(simd_float4   __x);
 813static simd_uint8  SIMD_CFUNC simd_uint_rte(simd_float8   __x);
 814static simd_uint16 SIMD_CFUNC simd_uint_rte(simd_float16  __x);
 815#define vector_uint simd_uint
 816#define vector_uint_sat simd_uint_sat
 817
 818static simd_float2  SIMD_CFUNC simd_float(simd_char2    __x);
 819static simd_float3  SIMD_CFUNC simd_float(simd_char3    __x);
 820static simd_float4  SIMD_CFUNC simd_float(simd_char4    __x);
 821static simd_float8  SIMD_CFUNC simd_float(simd_char8    __x);
 822static simd_float16 SIMD_CFUNC simd_float(simd_char16   __x);
 823static simd_float2  SIMD_CFUNC simd_float(simd_uchar2   __x);
 824static simd_float3  SIMD_CFUNC simd_float(simd_uchar3   __x);
 825static simd_float4  SIMD_CFUNC simd_float(simd_uchar4   __x);
 826static simd_float8  SIMD_CFUNC simd_float(simd_uchar8   __x);
 827static simd_float16 SIMD_CFUNC simd_float(simd_uchar16  __x);
 828static simd_float2  SIMD_CFUNC simd_float(simd_short2   __x);
 829static simd_float3  SIMD_CFUNC simd_float(simd_short3   __x);
 830static simd_float4  SIMD_CFUNC simd_float(simd_short4   __x);
 831static simd_float8  SIMD_CFUNC simd_float(simd_short8   __x);
 832static simd_float16 SIMD_CFUNC simd_float(simd_short16  __x);
 833static simd_float2  SIMD_CFUNC simd_float(simd_ushort2  __x);
 834static simd_float3  SIMD_CFUNC simd_float(simd_ushort3  __x);
 835static simd_float4  SIMD_CFUNC simd_float(simd_ushort4  __x);
 836static simd_float8  SIMD_CFUNC simd_float(simd_ushort8  __x);
 837static simd_float16 SIMD_CFUNC simd_float(simd_ushort16 __x);
 838static simd_float2  SIMD_CFUNC simd_float(simd_half2    __x);
 839static simd_float3  SIMD_CFUNC simd_float(simd_half3    __x);
 840static simd_float4  SIMD_CFUNC simd_float(simd_half4    __x);
 841static simd_float8  SIMD_CFUNC simd_float(simd_half8    __x);
 842static simd_float16 SIMD_CFUNC simd_float(simd_half16   __x);
 843static simd_float2  SIMD_CFUNC simd_float(simd_int2     __x);
 844static simd_float3  SIMD_CFUNC simd_float(simd_int3     __x);
 845static simd_float4  SIMD_CFUNC simd_float(simd_int4     __x);
 846static simd_float8  SIMD_CFUNC simd_float(simd_int8     __x);
 847static simd_float16 SIMD_CFUNC simd_float(simd_int16    __x);
 848static simd_float2  SIMD_CFUNC simd_float(simd_uint2    __x);
 849static simd_float3  SIMD_CFUNC simd_float(simd_uint3    __x);
 850static simd_float4  SIMD_CFUNC simd_float(simd_uint4    __x);
 851static simd_float8  SIMD_CFUNC simd_float(simd_uint8    __x);
 852static simd_float16 SIMD_CFUNC simd_float(simd_uint16   __x);
 853static simd_float2  SIMD_CFUNC simd_float(simd_float2   __x);
 854static simd_float3  SIMD_CFUNC simd_float(simd_float3   __x);
 855static simd_float4  SIMD_CFUNC simd_float(simd_float4   __x);
 856static simd_float8  SIMD_CFUNC simd_float(simd_float8   __x);
 857static simd_float16 SIMD_CFUNC simd_float(simd_float16  __x);
 858static simd_float2  SIMD_CFUNC simd_float(simd_long2    __x);
 859static simd_float3  SIMD_CFUNC simd_float(simd_long3    __x);
 860static simd_float4  SIMD_CFUNC simd_float(simd_long4    __x);
 861static simd_float8  SIMD_CFUNC simd_float(simd_long8    __x);
 862static simd_float2  SIMD_CFUNC simd_float(simd_ulong2   __x);
 863static simd_float3  SIMD_CFUNC simd_float(simd_ulong3   __x);
 864static simd_float4  SIMD_CFUNC simd_float(simd_ulong4   __x);
 865static simd_float8  SIMD_CFUNC simd_float(simd_ulong8   __x);
 866static simd_float2  SIMD_CFUNC simd_float(simd_double2  __x);
 867static simd_float3  SIMD_CFUNC simd_float(simd_double3  __x);
 868static simd_float4  SIMD_CFUNC simd_float(simd_double4  __x);
 869static simd_float8  SIMD_CFUNC simd_float(simd_double8  __x);
 870#define vector_float simd_float
 871
 872static simd_long2  SIMD_CFUNC simd_long(simd_char2    __x);
 873static simd_long3  SIMD_CFUNC simd_long(simd_char3    __x);
 874static simd_long4  SIMD_CFUNC simd_long(simd_char4    __x);
 875static simd_long8  SIMD_CFUNC simd_long(simd_char8    __x);
 876static simd_long2  SIMD_CFUNC simd_long(simd_uchar2   __x);
 877static simd_long3  SIMD_CFUNC simd_long(simd_uchar3   __x);
 878static simd_long4  SIMD_CFUNC simd_long(simd_uchar4   __x);
 879static simd_long8  SIMD_CFUNC simd_long(simd_uchar8   __x);
 880static simd_long2  SIMD_CFUNC simd_long(simd_short2   __x);
 881static simd_long3  SIMD_CFUNC simd_long(simd_short3   __x);
 882static simd_long4  SIMD_CFUNC simd_long(simd_short4   __x);
 883static simd_long8  SIMD_CFUNC simd_long(simd_short8   __x);
 884static simd_long2  SIMD_CFUNC simd_long(simd_ushort2  __x);
 885static simd_long3  SIMD_CFUNC simd_long(simd_ushort3  __x);
 886static simd_long4  SIMD_CFUNC simd_long(simd_ushort4  __x);
 887static simd_long8  SIMD_CFUNC simd_long(simd_ushort8  __x);
 888static simd_long2  SIMD_CFUNC simd_long(simd_half2    __x);
 889static simd_long3  SIMD_CFUNC simd_long(simd_half3    __x);
 890static simd_long4  SIMD_CFUNC simd_long(simd_half4    __x);
 891static simd_long8  SIMD_CFUNC simd_long(simd_half8    __x);
 892static simd_long2  SIMD_CFUNC simd_long(simd_int2     __x);
 893static simd_long3  SIMD_CFUNC simd_long(simd_int3     __x);
 894static simd_long4  SIMD_CFUNC simd_long(simd_int4     __x);
 895static simd_long8  SIMD_CFUNC simd_long(simd_int8     __x);
 896static simd_long2  SIMD_CFUNC simd_long(simd_uint2    __x);
 897static simd_long3  SIMD_CFUNC simd_long(simd_uint3    __x);
 898static simd_long4  SIMD_CFUNC simd_long(simd_uint4    __x);
 899static simd_long8  SIMD_CFUNC simd_long(simd_uint8    __x);
 900static simd_long2  SIMD_CFUNC simd_long(simd_float2   __x);
 901static simd_long3  SIMD_CFUNC simd_long(simd_float3   __x);
 902static simd_long4  SIMD_CFUNC simd_long(simd_float4   __x);
 903static simd_long8  SIMD_CFUNC simd_long(simd_float8   __x);
 904static simd_long2  SIMD_CFUNC simd_long(simd_long2    __x);
 905static simd_long3  SIMD_CFUNC simd_long(simd_long3    __x);
 906static simd_long4  SIMD_CFUNC simd_long(simd_long4    __x);
 907static simd_long8  SIMD_CFUNC simd_long(simd_long8    __x);
 908static simd_long2  SIMD_CFUNC simd_long(simd_ulong2   __x);
 909static simd_long3  SIMD_CFUNC simd_long(simd_ulong3   __x);
 910static simd_long4  SIMD_CFUNC simd_long(simd_ulong4   __x);
 911static simd_long8  SIMD_CFUNC simd_long(simd_ulong8   __x);
 912static simd_long2  SIMD_CFUNC simd_long(simd_double2  __x);
 913static simd_long3  SIMD_CFUNC simd_long(simd_double3  __x);
 914static simd_long4  SIMD_CFUNC simd_long(simd_double4  __x);
 915static simd_long8  SIMD_CFUNC simd_long(simd_double8  __x);
 916static simd_long2  SIMD_CFUNC simd_long_sat(simd_char2    __x);
 917static simd_long3  SIMD_CFUNC simd_long_sat(simd_char3    __x);
 918static simd_long4  SIMD_CFUNC simd_long_sat(simd_char4    __x);
 919static simd_long8  SIMD_CFUNC simd_long_sat(simd_char8    __x);
 920static simd_long2  SIMD_CFUNC simd_long_sat(simd_short2   __x);
 921static simd_long3  SIMD_CFUNC simd_long_sat(simd_short3   __x);
 922static simd_long4  SIMD_CFUNC simd_long_sat(simd_short4   __x);
 923static simd_long8  SIMD_CFUNC simd_long_sat(simd_short8   __x);
 924static simd_long2  SIMD_CFUNC simd_long_sat(simd_half2    __x);
 925static simd_long3  SIMD_CFUNC simd_long_sat(simd_half3    __x);
 926static simd_long4  SIMD_CFUNC simd_long_sat(simd_half4    __x);
 927static simd_long8  SIMD_CFUNC simd_long_sat(simd_half8    __x);
 928static simd_long2  SIMD_CFUNC simd_long_sat(simd_int2     __x);
 929static simd_long3  SIMD_CFUNC simd_long_sat(simd_int3     __x);
 930static simd_long4  SIMD_CFUNC simd_long_sat(simd_int4     __x);
 931static simd_long8  SIMD_CFUNC simd_long_sat(simd_int8     __x);
 932static simd_long2  SIMD_CFUNC simd_long_sat(simd_float2   __x);
 933static simd_long3  SIMD_CFUNC simd_long_sat(simd_float3   __x);
 934static simd_long4  SIMD_CFUNC simd_long_sat(simd_float4   __x);
 935static simd_long8  SIMD_CFUNC simd_long_sat(simd_float8   __x);
 936static simd_long2  SIMD_CFUNC simd_long_sat(simd_long2    __x);
 937static simd_long3  SIMD_CFUNC simd_long_sat(simd_long3    __x);
 938static simd_long4  SIMD_CFUNC simd_long_sat(simd_long4    __x);
 939static simd_long8  SIMD_CFUNC simd_long_sat(simd_long8    __x);
 940static simd_long2  SIMD_CFUNC simd_long_sat(simd_double2  __x);
 941static simd_long3  SIMD_CFUNC simd_long_sat(simd_double3  __x);
 942static simd_long4  SIMD_CFUNC simd_long_sat(simd_double4  __x);
 943static simd_long8  SIMD_CFUNC simd_long_sat(simd_double8  __x);
 944static simd_long2  SIMD_CFUNC simd_long_sat(simd_uchar2   __x);
 945static simd_long3  SIMD_CFUNC simd_long_sat(simd_uchar3   __x);
 946static simd_long4  SIMD_CFUNC simd_long_sat(simd_uchar4   __x);
 947static simd_long8  SIMD_CFUNC simd_long_sat(simd_uchar8   __x);
 948static simd_long2  SIMD_CFUNC simd_long_sat(simd_ushort2  __x);
 949static simd_long3  SIMD_CFUNC simd_long_sat(simd_ushort3  __x);
 950static simd_long4  SIMD_CFUNC simd_long_sat(simd_ushort4  __x);
 951static simd_long8  SIMD_CFUNC simd_long_sat(simd_ushort8  __x);
 952static simd_long2  SIMD_CFUNC simd_long_sat(simd_uint2    __x);
 953static simd_long3  SIMD_CFUNC simd_long_sat(simd_uint3    __x);
 954static simd_long4  SIMD_CFUNC simd_long_sat(simd_uint4    __x);
 955static simd_long8  SIMD_CFUNC simd_long_sat(simd_uint8    __x);
 956static simd_long2  SIMD_CFUNC simd_long_sat(simd_ulong2   __x);
 957static simd_long3  SIMD_CFUNC simd_long_sat(simd_ulong3   __x);
 958static simd_long4  SIMD_CFUNC simd_long_sat(simd_ulong4   __x);
 959static simd_long8  SIMD_CFUNC simd_long_sat(simd_ulong8   __x);
 960static simd_long2  SIMD_CFUNC simd_long_rte(simd_double2  __x);
 961static simd_long3  SIMD_CFUNC simd_long_rte(simd_double3  __x);
 962static simd_long4  SIMD_CFUNC simd_long_rte(simd_double4  __x);
 963static simd_long8  SIMD_CFUNC simd_long_rte(simd_double8  __x);
 964#define vector_long simd_long
 965#define vector_long_sat simd_long_sat
 966
 967static simd_ulong2  SIMD_CFUNC simd_ulong(simd_char2    __x);
 968static simd_ulong3  SIMD_CFUNC simd_ulong(simd_char3    __x);
 969static simd_ulong4  SIMD_CFUNC simd_ulong(simd_char4    __x);
 970static simd_ulong8  SIMD_CFUNC simd_ulong(simd_char8    __x);
 971static simd_ulong2  SIMD_CFUNC simd_ulong(simd_uchar2   __x);
 972static simd_ulong3  SIMD_CFUNC simd_ulong(simd_uchar3   __x);
 973static simd_ulong4  SIMD_CFUNC simd_ulong(simd_uchar4   __x);
 974static simd_ulong8  SIMD_CFUNC simd_ulong(simd_uchar8   __x);
 975static simd_ulong2  SIMD_CFUNC simd_ulong(simd_short2   __x);
 976static simd_ulong3  SIMD_CFUNC simd_ulong(simd_short3   __x);
 977static simd_ulong4  SIMD_CFUNC simd_ulong(simd_short4   __x);
 978static simd_ulong8  SIMD_CFUNC simd_ulong(simd_short8   __x);
 979static simd_ulong2  SIMD_CFUNC simd_ulong(simd_ushort2  __x);
 980static simd_ulong3  SIMD_CFUNC simd_ulong(simd_ushort3  __x);
 981static simd_ulong4  SIMD_CFUNC simd_ulong(simd_ushort4  __x);
 982static simd_ulong8  SIMD_CFUNC simd_ulong(simd_ushort8  __x);
 983static simd_ulong2  SIMD_CFUNC simd_ulong(simd_half2    __x);
 984static simd_ulong3  SIMD_CFUNC simd_ulong(simd_half3    __x);
 985static simd_ulong4  SIMD_CFUNC simd_ulong(simd_half4    __x);
 986static simd_ulong8  SIMD_CFUNC simd_ulong(simd_half8    __x);
 987static simd_ulong2  SIMD_CFUNC simd_ulong(simd_int2     __x);
 988static simd_ulong3  SIMD_CFUNC simd_ulong(simd_int3     __x);
 989static simd_ulong4  SIMD_CFUNC simd_ulong(simd_int4     __x);
 990static simd_ulong8  SIMD_CFUNC simd_ulong(simd_int8     __x);
 991static simd_ulong2  SIMD_CFUNC simd_ulong(simd_uint2    __x);
 992static simd_ulong3  SIMD_CFUNC simd_ulong(simd_uint3    __x);
 993static simd_ulong4  SIMD_CFUNC simd_ulong(simd_uint4    __x);
 994static simd_ulong8  SIMD_CFUNC simd_ulong(simd_uint8    __x);
 995static simd_ulong2  SIMD_CFUNC simd_ulong(simd_float2   __x);
 996static simd_ulong3  SIMD_CFUNC simd_ulong(simd_float3   __x);
 997static simd_ulong4  SIMD_CFUNC simd_ulong(simd_float4   __x);
 998static simd_ulong8  SIMD_CFUNC simd_ulong(simd_float8   __x);
 999static simd_ulong2  SIMD_CFUNC simd_ulong(simd_long2    __x);
1000static simd_ulong3  SIMD_CFUNC simd_ulong(simd_long3    __x);
1001static simd_ulong4  SIMD_CFUNC simd_ulong(simd_long4    __x);
1002static simd_ulong8  SIMD_CFUNC simd_ulong(simd_long8    __x);
1003static simd_ulong2  SIMD_CFUNC simd_ulong(simd_ulong2   __x);
1004static simd_ulong3  SIMD_CFUNC simd_ulong(simd_ulong3   __x);
1005static simd_ulong4  SIMD_CFUNC simd_ulong(simd_ulong4   __x);
1006static simd_ulong8  SIMD_CFUNC simd_ulong(simd_ulong8   __x);
1007static simd_ulong2  SIMD_CFUNC simd_ulong(simd_double2  __x);
1008static simd_ulong3  SIMD_CFUNC simd_ulong(simd_double3  __x);
1009static simd_ulong4  SIMD_CFUNC simd_ulong(simd_double4  __x);
1010static simd_ulong8  SIMD_CFUNC simd_ulong(simd_double8  __x);
1011static simd_ulong2  SIMD_CFUNC simd_ulong_sat(simd_char2    __x);
1012static simd_ulong3  SIMD_CFUNC simd_ulong_sat(simd_char3    __x);
1013static simd_ulong4  SIMD_CFUNC simd_ulong_sat(simd_char4    __x);
1014static simd_ulong8  SIMD_CFUNC simd_ulong_sat(simd_char8    __x);
1015static simd_ulong2  SIMD_CFUNC simd_ulong_sat(simd_short2   __x);
1016static simd_ulong3  SIMD_CFUNC simd_ulong_sat(simd_short3   __x);
1017static simd_ulong4  SIMD_CFUNC simd_ulong_sat(simd_short4   __x);
1018static simd_ulong8  SIMD_CFUNC simd_ulong_sat(simd_short8   __x);
1019static simd_ulong2  SIMD_CFUNC simd_ulong_sat(simd_half2    __x);
1020static simd_ulong3  SIMD_CFUNC simd_ulong_sat(simd_half3    __x);
1021static simd_ulong4  SIMD_CFUNC simd_ulong_sat(simd_half4    __x);
1022static simd_ulong8  SIMD_CFUNC simd_ulong_sat(simd_half8    __x);
1023static simd_ulong2  SIMD_CFUNC simd_ulong_sat(simd_int2     __x);
1024static simd_ulong3  SIMD_CFUNC simd_ulong_sat(simd_int3     __x);
1025static simd_ulong4  SIMD_CFUNC simd_ulong_sat(simd_int4     __x);
1026static simd_ulong8  SIMD_CFUNC simd_ulong_sat(simd_int8     __x);
1027static simd_ulong2  SIMD_CFUNC simd_ulong_sat(simd_float2   __x);
1028static simd_ulong3  SIMD_CFUNC simd_ulong_sat(simd_float3   __x);
1029static simd_ulong4  SIMD_CFUNC simd_ulong_sat(simd_float4   __x);
1030static simd_ulong8  SIMD_CFUNC simd_ulong_sat(simd_float8   __x);
1031static simd_ulong2  SIMD_CFUNC simd_ulong_sat(simd_long2    __x);
1032static simd_ulong3  SIMD_CFUNC simd_ulong_sat(simd_long3    __x);
1033static simd_ulong4  SIMD_CFUNC simd_ulong_sat(simd_long4    __x);
1034static simd_ulong8  SIMD_CFUNC simd_ulong_sat(simd_long8    __x);
1035static simd_ulong2  SIMD_CFUNC simd_ulong_sat(simd_double2  __x);
1036static simd_ulong3  SIMD_CFUNC simd_ulong_sat(simd_double3  __x);
1037static simd_ulong4  SIMD_CFUNC simd_ulong_sat(simd_double4  __x);
1038static simd_ulong8  SIMD_CFUNC simd_ulong_sat(simd_double8  __x);
1039static simd_ulong2  SIMD_CFUNC simd_ulong_sat(simd_uchar2   __x);
1040static simd_ulong3  SIMD_CFUNC simd_ulong_sat(simd_uchar3   __x);
1041static simd_ulong4  SIMD_CFUNC simd_ulong_sat(simd_uchar4   __x);
1042static simd_ulong8  SIMD_CFUNC simd_ulong_sat(simd_uchar8   __x);
1043static simd_ulong2  SIMD_CFUNC simd_ulong_sat(simd_ushort2  __x);
1044static simd_ulong3  SIMD_CFUNC simd_ulong_sat(simd_ushort3  __x);
1045static simd_ulong4  SIMD_CFUNC simd_ulong_sat(simd_ushort4  __x);
1046static simd_ulong8  SIMD_CFUNC simd_ulong_sat(simd_ushort8  __x);
1047static simd_ulong2  SIMD_CFUNC simd_ulong_sat(simd_uint2    __x);
1048static simd_ulong3  SIMD_CFUNC simd_ulong_sat(simd_uint3    __x);
1049static simd_ulong4  SIMD_CFUNC simd_ulong_sat(simd_uint4    __x);
1050static simd_ulong8  SIMD_CFUNC simd_ulong_sat(simd_uint8    __x);
1051static simd_ulong2  SIMD_CFUNC simd_ulong_sat(simd_ulong2   __x);
1052static simd_ulong3  SIMD_CFUNC simd_ulong_sat(simd_ulong3   __x);
1053static simd_ulong4  SIMD_CFUNC simd_ulong_sat(simd_ulong4   __x);
1054static simd_ulong8  SIMD_CFUNC simd_ulong_sat(simd_ulong8   __x);
1055static simd_ulong2  SIMD_CFUNC simd_ulong_rte(simd_double2  __x);
1056static simd_ulong3  SIMD_CFUNC simd_ulong_rte(simd_double3  __x);
1057static simd_ulong4  SIMD_CFUNC simd_ulong_rte(simd_double4  __x);
1058static simd_ulong8  SIMD_CFUNC simd_ulong_rte(simd_double8  __x);
1059#define vector_ulong simd_ulong
1060#define vector_ulong_sat simd_ulong_sat
1061
1062static simd_double2  SIMD_CFUNC simd_double(simd_char2    __x);
1063static simd_double3  SIMD_CFUNC simd_double(simd_char3    __x);
1064static simd_double4  SIMD_CFUNC simd_double(simd_char4    __x);
1065static simd_double8  SIMD_CFUNC simd_double(simd_char8    __x);
1066static simd_double2  SIMD_CFUNC simd_double(simd_uchar2   __x);
1067static simd_double3  SIMD_CFUNC simd_double(simd_uchar3   __x);
1068static simd_double4  SIMD_CFUNC simd_double(simd_uchar4   __x);
1069static simd_double8  SIMD_CFUNC simd_double(simd_uchar8   __x);
1070static simd_double2  SIMD_CFUNC simd_double(simd_short2   __x);
1071static simd_double3  SIMD_CFUNC simd_double(simd_short3   __x);
1072static simd_double4  SIMD_CFUNC simd_double(simd_short4   __x);
1073static simd_double8  SIMD_CFUNC simd_double(simd_short8   __x);
1074static simd_double2  SIMD_CFUNC simd_double(simd_ushort2  __x);
1075static simd_double3  SIMD_CFUNC simd_double(simd_ushort3  __x);
1076static simd_double4  SIMD_CFUNC simd_double(simd_ushort4  __x);
1077static simd_double8  SIMD_CFUNC simd_double(simd_ushort8  __x);
1078static simd_double2  SIMD_CFUNC simd_double(simd_half2    __x);
1079static simd_double3  SIMD_CFUNC simd_double(simd_half3    __x);
1080static simd_double4  SIMD_CFUNC simd_double(simd_half4    __x);
1081static simd_double8  SIMD_CFUNC simd_double(simd_half8    __x);
1082static simd_double2  SIMD_CFUNC simd_double(simd_int2     __x);
1083static simd_double3  SIMD_CFUNC simd_double(simd_int3     __x);
1084static simd_double4  SIMD_CFUNC simd_double(simd_int4     __x);
1085static simd_double8  SIMD_CFUNC simd_double(simd_int8     __x);
1086static simd_double2  SIMD_CFUNC simd_double(simd_uint2    __x);
1087static simd_double3  SIMD_CFUNC simd_double(simd_uint3    __x);
1088static simd_double4  SIMD_CFUNC simd_double(simd_uint4    __x);
1089static simd_double8  SIMD_CFUNC simd_double(simd_uint8    __x);
1090static simd_double2  SIMD_CFUNC simd_double(simd_float2   __x);
1091static simd_double3  SIMD_CFUNC simd_double(simd_float3   __x);
1092static simd_double4  SIMD_CFUNC simd_double(simd_float4   __x);
1093static simd_double8  SIMD_CFUNC simd_double(simd_float8   __x);
1094static simd_double2  SIMD_CFUNC simd_double(simd_long2    __x);
1095static simd_double3  SIMD_CFUNC simd_double(simd_long3    __x);
1096static simd_double4  SIMD_CFUNC simd_double(simd_long4    __x);
1097static simd_double8  SIMD_CFUNC simd_double(simd_long8    __x);
1098static simd_double2  SIMD_CFUNC simd_double(simd_ulong2   __x);
1099static simd_double3  SIMD_CFUNC simd_double(simd_ulong3   __x);
1100static simd_double4  SIMD_CFUNC simd_double(simd_ulong4   __x);
1101static simd_double8  SIMD_CFUNC simd_double(simd_ulong8   __x);
1102static simd_double2  SIMD_CFUNC simd_double(simd_double2  __x);
1103static simd_double3  SIMD_CFUNC simd_double(simd_double3  __x);
1104static simd_double4  SIMD_CFUNC simd_double(simd_double4  __x);
1105static simd_double8  SIMD_CFUNC simd_double(simd_double8  __x);
1106#define vector_double simd_double
1107
1108static simd_char2   SIMD_CFUNC vector2(char           __x, char           __y) { return (  simd_char2){__x, __y}; }
1109static simd_uchar2  SIMD_CFUNC vector2(unsigned char  __x, unsigned char  __y) { return ( simd_uchar2){__x, __y}; }
1110static simd_short2  SIMD_CFUNC vector2(short          __x, short          __y) { return ( simd_short2){__x, __y}; }
1111static simd_ushort2 SIMD_CFUNC vector2(unsigned short __x, unsigned short __y) { return (simd_ushort2){__x, __y}; }
1112static simd_half2   SIMD_CFUNC vector2(_Float16       __x, _Float16       __y) { return (  simd_half2){__x, __y}; }
1113static simd_int2    SIMD_CFUNC vector2(int            __x, int            __y) { return (   simd_int2){__x, __y}; }
1114static simd_uint2   SIMD_CFUNC vector2(unsigned int   __x, unsigned int   __y) { return (  simd_uint2){__x, __y}; }
1115static simd_float2  SIMD_CFUNC vector2(float          __x, float          __y) { return ( simd_float2){__x, __y}; }
1116static simd_long2   SIMD_CFUNC vector2(simd_long1   __x, simd_long1   __y) { return (  simd_long2){__x, __y}; }
1117static simd_ulong2  SIMD_CFUNC vector2(simd_ulong1  __x, simd_ulong1  __y) { return ( simd_ulong2){__x, __y}; }
1118static simd_double2 SIMD_CFUNC vector2(double         __x, double         __y) { return (simd_double2){__x, __y}; }
1119
1120static simd_char3   SIMD_CFUNC vector3(char           __x, char           __y, char           __z) { return (  simd_char3){__x, __y, __z}; }
1121static simd_uchar3  SIMD_CFUNC vector3(unsigned char  __x, unsigned char  __y, unsigned char  __z) { return ( simd_uchar3){__x, __y, __z}; }
1122static simd_short3  SIMD_CFUNC vector3(short          __x, short          __y, short          __z) { return ( simd_short3){__x, __y, __z}; }
1123static simd_ushort3 SIMD_CFUNC vector3(unsigned short __x, unsigned short __y, unsigned short __z) { return (simd_ushort3){__x, __y, __z}; }
1124static simd_half3   SIMD_CFUNC vector3(_Float16       __x, _Float16       __y, _Float16       __z) { return (  simd_half3){__x, __y, __z}; }
1125static simd_int3    SIMD_CFUNC vector3(int            __x, int            __y, int            __z) { return (   simd_int3){__x, __y, __z}; }
1126static simd_uint3   SIMD_CFUNC vector3(unsigned int   __x, unsigned int   __y, unsigned int   __z) { return (  simd_uint3){__x, __y, __z}; }
1127static simd_float3  SIMD_CFUNC vector3(float          __x, float          __y, float          __z) { return ( simd_float3){__x, __y, __z}; }
1128static simd_long3   SIMD_CFUNC vector3(simd_long1   __x, simd_long1   __y, simd_long1   __z) { return (  simd_long3){__x, __y, __z}; }
1129static simd_ulong3  SIMD_CFUNC vector3(simd_ulong1  __x, simd_ulong1  __y, simd_ulong1  __z) { return ( simd_ulong3){__x, __y, __z}; }
1130static simd_double3 SIMD_CFUNC vector3(double         __x, double         __y, double         __z) { return (simd_double3){__x, __y, __z}; }
1131
1132static simd_char3   SIMD_CFUNC vector3(simd_char2   __xy, char           __z) { simd_char3   __r; __r.xy = __xy; __r.z = __z; return __r; }
1133static simd_uchar3  SIMD_CFUNC vector3(simd_uchar2  __xy, unsigned char  __z) { simd_uchar3  __r; __r.xy = __xy; __r.z = __z; return __r; }
1134static simd_short3  SIMD_CFUNC vector3(simd_short2  __xy, short          __z) { simd_short3  __r; __r.xy = __xy; __r.z = __z; return __r; }
1135static simd_ushort3 SIMD_CFUNC vector3(simd_ushort2 __xy, unsigned short __z) { simd_ushort3 __r; __r.xy = __xy; __r.z = __z; return __r; }
1136static simd_half3   SIMD_CFUNC vector3(simd_half2   __xy, _Float16       __z) { simd_half3   __r; __r.xy = __xy; __r.z = __z; return __r; }
1137static simd_int3    SIMD_CFUNC vector3(simd_int2    __xy, int            __z) { simd_int3    __r; __r.xy = __xy; __r.z = __z; return __r; }
1138static simd_uint3   SIMD_CFUNC vector3(simd_uint2   __xy, unsigned int   __z) { simd_uint3   __r; __r.xy = __xy; __r.z = __z; return __r; }
1139static simd_float3  SIMD_CFUNC vector3(simd_float2  __xy, float          __z) { simd_float3  __r; __r.xy = __xy; __r.z = __z; return __r; }
1140static simd_long3   SIMD_CFUNC vector3(simd_long2   __xy, simd_long1   __z) { simd_long3   __r; __r.xy = __xy; __r.z = __z; return __r; }
1141static simd_ulong3  SIMD_CFUNC vector3(simd_ulong2  __xy, simd_ulong1  __z) { simd_ulong3  __r; __r.xy = __xy; __r.z = __z; return __r; }
1142static simd_double3 SIMD_CFUNC vector3(simd_double2 __xy, double         __z) { simd_double3 __r; __r.xy = __xy; __r.z = __z; return __r; }
1143
1144static simd_char4   SIMD_CFUNC vector4(char           __x, char           __y, char           __z, char           __w) { return (  simd_char4){__x, __y, __z, __w}; }
1145static simd_uchar4  SIMD_CFUNC vector4(unsigned char  __x, unsigned char  __y, unsigned char  __z, unsigned char  __w) { return ( simd_uchar4){__x, __y, __z, __w}; }
1146static simd_short4  SIMD_CFUNC vector4(short          __x, short          __y, short          __z, short          __w) { return ( simd_short4){__x, __y, __z, __w}; }
1147static simd_ushort4 SIMD_CFUNC vector4(unsigned short __x, unsigned short __y, unsigned short __z, unsigned short __w) { return (simd_ushort4){__x, __y, __z, __w}; }
1148static simd_half4   SIMD_CFUNC vector4(_Float16       __x, _Float16       __y, _Float16       __z, _Float16       __w) { return (  simd_half4){__x, __y, __z, __w}; }
1149static simd_int4    SIMD_CFUNC vector4(int            __x, int            __y, int            __z, int            __w) { return (   simd_int4){__x, __y, __z, __w}; }
1150static simd_uint4   SIMD_CFUNC vector4(unsigned int   __x, unsigned int   __y, unsigned int   __z, unsigned int   __w) { return (  simd_uint4){__x, __y, __z, __w}; }
1151static simd_float4  SIMD_CFUNC vector4(float          __x, float          __y, float          __z, float          __w) { return ( simd_float4){__x, __y, __z, __w}; }
1152static simd_long4   SIMD_CFUNC vector4(simd_long1   __x, simd_long1   __y, simd_long1   __z, simd_long1   __w) { return (  simd_long4){__x, __y, __z, __w}; }
1153static simd_ulong4  SIMD_CFUNC vector4(simd_ulong1  __x, simd_ulong1  __y, simd_ulong1  __z, simd_ulong1  __w) { return ( simd_ulong4){__x, __y, __z, __w}; }
1154static simd_double4 SIMD_CFUNC vector4(double         __x, double         __y, double         __z, double         __w) { return (simd_double4){__x, __y, __z, __w}; }
1155
1156static simd_char4   SIMD_CFUNC vector4(simd_char2   __xy, simd_char2   __zw) { simd_char4   __r; __r.xy = __xy; __r.zw = __zw; return __r; }
1157static simd_uchar4  SIMD_CFUNC vector4(simd_uchar2  __xy, simd_uchar2  __zw) { simd_uchar4  __r; __r.xy = __xy; __r.zw = __zw; return __r; }
1158static simd_short4  SIMD_CFUNC vector4(simd_short2  __xy, simd_short2  __zw) { simd_short4  __r; __r.xy = __xy; __r.zw = __zw; return __r; }
1159static simd_ushort4 SIMD_CFUNC vector4(simd_ushort2 __xy, simd_ushort2 __zw) { simd_ushort4 __r; __r.xy = __xy; __r.zw = __zw; return __r; }
1160static simd_half4   SIMD_CFUNC vector4(simd_half2   __xy, simd_half2   __zw) { simd_half4   __r; __r.xy = __xy; __r.zw = __zw; return __r; }
1161static simd_int4    SIMD_CFUNC vector4(simd_int2    __xy, simd_int2    __zw) { simd_int4    __r; __r.xy = __xy; __r.zw = __zw; return __r; }
1162static simd_uint4   SIMD_CFUNC vector4(simd_uint2   __xy, simd_uint2   __zw) { simd_uint4   __r; __r.xy = __xy; __r.zw = __zw; return __r; }
1163static simd_float4  SIMD_CFUNC vector4(simd_float2  __xy, simd_float2  __zw) { simd_float4  __r; __r.xy = __xy; __r.zw = __zw; return __r; }
1164static simd_long4   SIMD_CFUNC vector4(simd_long2   __xy, simd_long2   __zw) { simd_long4   __r; __r.xy = __xy; __r.zw = __zw; return __r; }
1165static simd_ulong4  SIMD_CFUNC vector4(simd_ulong2  __xy, simd_ulong2  __zw) { simd_ulong4  __r; __r.xy = __xy; __r.zw = __zw; return __r; }
1166static simd_double4 SIMD_CFUNC vector4(simd_double2 __xy, simd_double2 __zw) { simd_double4 __r; __r.xy = __xy; __r.zw = __zw; return __r; }
1167
1168static simd_char4   SIMD_CFUNC vector4(simd_char3   __xyz, char           __w) { simd_char4   __r; __r.xyz = __xyz; __r.w = __w; return __r; }
1169static simd_uchar4  SIMD_CFUNC vector4(simd_uchar3  __xyz, unsigned char  __w) { simd_uchar4  __r; __r.xyz = __xyz; __r.w = __w; return __r; }
1170static simd_short4  SIMD_CFUNC vector4(simd_short3  __xyz, short          __w) { simd_short4  __r; __r.xyz = __xyz; __r.w = __w; return __r; }
1171static simd_ushort4 SIMD_CFUNC vector4(simd_ushort3 __xyz, unsigned short __w) { simd_ushort4 __r; __r.xyz = __xyz; __r.w = __w; return __r; }
1172static simd_half4   SIMD_CFUNC vector4(simd_half3   __xyz, _Float16       __w) { simd_half4   __r; __r.xyz = __xyz; __r.w = __w; return __r; }
1173static simd_int4    SIMD_CFUNC vector4(simd_int3    __xyz, int            __w) { simd_int4    __r; __r.xyz = __xyz; __r.w = __w; return __r; }
1174static simd_uint4   SIMD_CFUNC vector4(simd_uint3   __xyz, unsigned int   __w) { simd_uint4   __r; __r.xyz = __xyz; __r.w = __w; return __r; }
1175static simd_float4  SIMD_CFUNC vector4(simd_float3  __xyz, float          __w) { simd_float4  __r; __r.xyz = __xyz; __r.w = __w; return __r; }
1176static simd_long4   SIMD_CFUNC vector4(simd_long3   __xyz, simd_long1   __w) { simd_long4   __r; __r.xyz = __xyz; __r.w = __w; return __r; }
1177static simd_ulong4  SIMD_CFUNC vector4(simd_ulong3  __xyz, simd_ulong1  __w) { simd_ulong4  __r; __r.xyz = __xyz; __r.w = __w; return __r; }
1178static simd_double4 SIMD_CFUNC vector4(simd_double3 __xyz, double         __w) { simd_double4 __r; __r.xyz = __xyz; __r.w = __w; return __r; }
1179
1180static simd_char8   SIMD_CFUNC vector8(simd_char4   __lo, simd_char4   __hi) { simd_char8   __r; __r.lo = __lo; __r.hi = __hi; return __r; }
1181static simd_uchar8  SIMD_CFUNC vector8(simd_uchar4  __lo, simd_uchar4  __hi) { simd_uchar8  __r; __r.lo = __lo; __r.hi = __hi; return __r; }
1182static simd_short8  SIMD_CFUNC vector8(simd_short4  __lo, simd_short4  __hi) { simd_short8  __r; __r.lo = __lo; __r.hi = __hi; return __r; }
1183static simd_ushort8 SIMD_CFUNC vector8(simd_ushort4 __lo, simd_ushort4 __hi) { simd_ushort8 __r; __r.lo = __lo; __r.hi = __hi; return __r; }
1184static simd_half8   SIMD_CFUNC vector8(simd_half4   __lo, simd_half4   __hi) { simd_half8   __r; __r.lo = __lo; __r.hi = __hi; return __r; }
1185static simd_int8    SIMD_CFUNC vector8(simd_int4    __lo, simd_int4    __hi) { simd_int8    __r; __r.lo = __lo; __r.hi = __hi; return __r; }
1186static simd_uint8   SIMD_CFUNC vector8(simd_uint4   __lo, simd_uint4   __hi) { simd_uint8   __r; __r.lo = __lo; __r.hi = __hi; return __r; }
1187static simd_float8  SIMD_CFUNC vector8(simd_float4  __lo, simd_float4  __hi) { simd_float8  __r; __r.lo = __lo; __r.hi = __hi; return __r; }
1188static simd_long8   SIMD_CFUNC vector8(simd_long4   __lo, simd_long4   __hi) { simd_long8   __r; __r.lo = __lo; __r.hi = __hi; return __r; }
1189static simd_ulong8  SIMD_CFUNC vector8(simd_ulong4  __lo, simd_ulong4  __hi) { simd_ulong8  __r; __r.lo = __lo; __r.hi = __hi; return __r; }
1190static simd_double8 SIMD_CFUNC vector8(simd_double4 __lo, simd_double4 __hi) { simd_double8 __r; __r.lo = __lo; __r.hi = __hi; return __r; }
1191
1192static simd_char16   SIMD_CFUNC vector16(simd_char8   __lo, simd_char8   __hi) { simd_char16   __r; __r.lo = __lo; __r.hi = __hi; return __r; }
1193static simd_uchar16  SIMD_CFUNC vector16(simd_uchar8  __lo, simd_uchar8  __hi) { simd_uchar16  __r; __r.lo = __lo; __r.hi = __hi; return __r; }
1194static simd_short16  SIMD_CFUNC vector16(simd_short8  __lo, simd_short8  __hi) { simd_short16  __r; __r.lo = __lo; __r.hi = __hi; return __r; }
1195static simd_ushort16 SIMD_CFUNC vector16(simd_ushort8 __lo, simd_ushort8 __hi) { simd_ushort16 __r; __r.lo = __lo; __r.hi = __hi; return __r; }
1196static simd_half16   SIMD_CFUNC vector16(simd_half8   __lo, simd_half8   __hi) { simd_half16   __r; __r.lo = __lo; __r.hi = __hi; return __r; }
1197static simd_int16    SIMD_CFUNC vector16(simd_int8    __lo, simd_int8    __hi) { simd_int16    __r; __r.lo = __lo; __r.hi = __hi; return __r; }
1198static simd_uint16   SIMD_CFUNC vector16(simd_uint8   __lo, simd_uint8   __hi) { simd_uint16   __r; __r.lo = __lo; __r.hi = __hi; return __r; }
1199static simd_float16  SIMD_CFUNC vector16(simd_float8  __lo, simd_float8  __hi) { simd_float16  __r; __r.lo = __lo; __r.hi = __hi; return __r; }
1200
1201static simd_char32   SIMD_CFUNC vector32(simd_char16   __lo, simd_char16   __hi) { simd_char32   __r; __r.lo = __lo; __r.hi = __hi; return __r; }
1202static simd_uchar32  SIMD_CFUNC vector32(simd_uchar16  __lo, simd_uchar16  __hi) { simd_uchar32  __r; __r.lo = __lo; __r.hi = __hi; return __r; }
1203static simd_short32  SIMD_CFUNC vector32(simd_short16  __lo, simd_short16  __hi) { simd_short32  __r; __r.lo = __lo; __r.hi = __hi; return __r; }
1204static simd_ushort32 SIMD_CFUNC vector32(simd_ushort16 __lo, simd_ushort16 __hi) { simd_ushort32 __r; __r.lo = __lo; __r.hi = __hi; return __r; }
1205static simd_half32   SIMD_CFUNC vector32(simd_half16   __lo, simd_half16   __hi) { simd_half32   __r; __r.lo = __lo; __r.hi = __hi; return __r; }
1206
1207#pragma mark - Implementation
1208
1209static simd_char2  SIMD_CFUNC simd_char(simd_char2    __x) { return __x; }
1210static simd_char3  SIMD_CFUNC simd_char(simd_char3    __x) { return __x; }
1211static simd_char4  SIMD_CFUNC simd_char(simd_char4    __x) { return __x; }
1212static simd_char8  SIMD_CFUNC simd_char(simd_char8    __x) { return __x; }
1213static simd_char16 SIMD_CFUNC simd_char(simd_char16   __x) { return __x; }
1214static simd_char32 SIMD_CFUNC simd_char(simd_char32   __x) { return __x; }
1215static simd_char2  SIMD_CFUNC simd_char(simd_uchar2   __x) { return (simd_char2)__x; }
1216static simd_char3  SIMD_CFUNC simd_char(simd_uchar3   __x) { return (simd_char3)__x; }
1217static simd_char4  SIMD_CFUNC simd_char(simd_uchar4   __x) { return (simd_char4)__x; }
1218static simd_char8  SIMD_CFUNC simd_char(simd_uchar8   __x) { return (simd_char8)__x; }
1219static simd_char16 SIMD_CFUNC simd_char(simd_uchar16  __x) { return (simd_char16)__x; }
1220static simd_char32 SIMD_CFUNC simd_char(simd_uchar32  __x) { return (simd_char32)__x; }
1221static simd_char2  SIMD_CFUNC simd_char(simd_short2   __x) { return __builtin_convertvector(__x & 0xff, simd_char2); }
1222static simd_char3  SIMD_CFUNC simd_char(simd_short3   __x) { return __builtin_convertvector(__x & 0xff, simd_char3); }
1223static simd_char4  SIMD_CFUNC simd_char(simd_short4   __x) { return __builtin_convertvector(__x & 0xff, simd_char4); }
1224static simd_char8  SIMD_CFUNC simd_char(simd_short8   __x) { return __builtin_convertvector(__x & 0xff, simd_char8); }
1225static simd_char16 SIMD_CFUNC simd_char(simd_short16  __x) { return __builtin_convertvector(__x & 0xff, simd_char16); }
1226static simd_char32 SIMD_CFUNC simd_char(simd_short32  __x) { return __builtin_convertvector(__x & 0xff, simd_char32); }
1227static simd_char2  SIMD_CFUNC simd_char(simd_ushort2  __x) { return simd_char(simd_short(__x)); }
1228static simd_char3  SIMD_CFUNC simd_char(simd_ushort3  __x) { return simd_char(simd_short(__x)); }
1229static simd_char4  SIMD_CFUNC simd_char(simd_ushort4  __x) { return simd_char(simd_short(__x)); }
1230static simd_char8  SIMD_CFUNC simd_char(simd_ushort8  __x) { return simd_char(simd_short(__x)); }
1231static simd_char16 SIMD_CFUNC simd_char(simd_ushort16 __x) { return simd_char(simd_short(__x)); }
1232static simd_char32 SIMD_CFUNC simd_char(simd_ushort32 __x) { return simd_char(simd_short(__x)); }
1233static simd_char2  SIMD_CFUNC simd_char(simd_half2    __x) { return simd_char(simd_short(__x)); }
1234static simd_char3  SIMD_CFUNC simd_char(simd_half3    __x) { return simd_char(simd_short(__x)); }
1235static simd_char4  SIMD_CFUNC simd_char(simd_half4    __x) { return simd_char(simd_short(__x)); }
1236static simd_char8  SIMD_CFUNC simd_char(simd_half8    __x) { return simd_char(simd_short(__x)); }
1237static simd_char16 SIMD_CFUNC simd_char(simd_half16   __x) { return simd_char(simd_short(__x)); }
1238static simd_char32 SIMD_CFUNC simd_char(simd_half32   __x) { return simd_char(simd_short(__x)); }
1239static simd_char2  SIMD_CFUNC simd_char(simd_int2     __x) { return simd_char(simd_short(__x)); }
1240static simd_char3  SIMD_CFUNC simd_char(simd_int3     __x) { return simd_char(simd_short(__x)); }
1241static simd_char4  SIMD_CFUNC simd_char(simd_int4     __x) { return simd_char(simd_short(__x)); }
1242static simd_char8  SIMD_CFUNC simd_char(simd_int8     __x) { return simd_char(simd_short(__x)); }
1243static simd_char16 SIMD_CFUNC simd_char(simd_int16    __x) { return simd_char(simd_short(__x)); }
1244static simd_char2  SIMD_CFUNC simd_char(simd_uint2    __x) { return simd_char(simd_short(__x)); }
1245static simd_char3  SIMD_CFUNC simd_char(simd_uint3    __x) { return simd_char(simd_short(__x)); }
1246static simd_char4  SIMD_CFUNC simd_char(simd_uint4    __x) { return simd_char(simd_short(__x)); }
1247static simd_char8  SIMD_CFUNC simd_char(simd_uint8    __x) { return simd_char(simd_short(__x)); }
1248static simd_char16 SIMD_CFUNC simd_char(simd_uint16   __x) { return simd_char(simd_short(__x)); }
1249static simd_char2  SIMD_CFUNC simd_char(simd_float2   __x) { return simd_char(simd_short(__x)); }
1250static simd_char3  SIMD_CFUNC simd_char(simd_float3   __x) { return simd_char(simd_short(__x)); }
1251static simd_char4  SIMD_CFUNC simd_char(simd_float4   __x) { return simd_char(simd_short(__x)); }
1252static simd_char8  SIMD_CFUNC simd_char(simd_float8   __x) { return simd_char(simd_short(__x)); }
1253static simd_char16 SIMD_CFUNC simd_char(simd_float16  __x) { return simd_char(simd_short(__x)); }
1254static simd_char2  SIMD_CFUNC simd_char(simd_long2    __x) { return simd_char(simd_short(__x)); }
1255static simd_char3  SIMD_CFUNC simd_char(simd_long3    __x) { return simd_char(simd_short(__x)); }
1256static simd_char4  SIMD_CFUNC simd_char(simd_long4    __x) { return simd_char(simd_short(__x)); }
1257static simd_char8  SIMD_CFUNC simd_char(simd_long8    __x) { return simd_char(simd_short(__x)); }
1258static simd_char2  SIMD_CFUNC simd_char(simd_ulong2   __x) { return simd_char(simd_short(__x)); }
1259static simd_char3  SIMD_CFUNC simd_char(simd_ulong3   __x) { return simd_char(simd_short(__x)); }
1260static simd_char4  SIMD_CFUNC simd_char(simd_ulong4   __x) { return simd_char(simd_short(__x)); }
1261static simd_char8  SIMD_CFUNC simd_char(simd_ulong8   __x) { return simd_char(simd_short(__x)); }
1262static simd_char2  SIMD_CFUNC simd_char(simd_double2  __x) { return simd_char(simd_short(__x)); }
1263static simd_char3  SIMD_CFUNC simd_char(simd_double3  __x) { return simd_char(simd_short(__x)); }
1264static simd_char4  SIMD_CFUNC simd_char(simd_double4  __x) { return simd_char(simd_short(__x)); }
1265static simd_char8  SIMD_CFUNC simd_char(simd_double8  __x) { return simd_char(simd_short(__x)); }
1266    
1267static simd_char2  SIMD_CFUNC simd_char_sat(simd_char2    __x) { return __x; }
1268static simd_char3  SIMD_CFUNC simd_char_sat(simd_char3    __x) { return __x; }
1269static simd_char4  SIMD_CFUNC simd_char_sat(simd_char4    __x) { return __x; }
1270static simd_char8  SIMD_CFUNC simd_char_sat(simd_char8    __x) { return __x; }
1271static simd_char16 SIMD_CFUNC simd_char_sat(simd_char16   __x) { return __x; }
1272static simd_char32 SIMD_CFUNC simd_char_sat(simd_char32   __x) { return __x; }
1273static simd_char2  SIMD_CFUNC simd_char_sat(simd_short2   __x) { return simd_char(simd_clamp(__x,-0x80,0x7f)); }
1274static simd_char3  SIMD_CFUNC simd_char_sat(simd_short3   __x) { return simd_char(simd_clamp(__x,-0x80,0x7f)); }
1275static simd_char4  SIMD_CFUNC simd_char_sat(simd_short4   __x) { return simd_char(simd_clamp(__x,-0x80,0x7f)); }
1276static simd_char8  SIMD_CFUNC simd_char_sat(simd_short8   __x) { return simd_char(simd_clamp(__x,-0x80,0x7f)); }
1277static simd_char16 SIMD_CFUNC simd_char_sat(simd_short16  __x) { return simd_char(simd_clamp(__x,-0x80,0x7f)); }
1278static simd_char32 SIMD_CFUNC simd_char_sat(simd_short32  __x) { return simd_char(simd_clamp(__x,-0x80,0x7f)); }
1279static simd_char2  SIMD_CFUNC simd_char_sat(simd_half2    __x) { return simd_char(simd_clamp(__x,-0x80,0x7f)); }
1280static simd_char3  SIMD_CFUNC simd_char_sat(simd_half3    __x) { return simd_char(simd_clamp(__x,-0x80,0x7f)); }
1281static simd_char4  SIMD_CFUNC simd_char_sat(simd_half4    __x) { return simd_char(simd_clamp(__x,-0x80,0x7f)); }
1282static simd_char8  SIMD_CFUNC simd_char_sat(simd_half8    __x) { return simd_char(simd_clamp(__x,-0x80,0x7f)); }
1283static simd_char16 SIMD_CFUNC simd_char_sat(simd_half16   __x) { return simd_char(simd_clamp(__x,-0x80,0x7f)); }
1284static simd_char32 SIMD_CFUNC simd_char_sat(simd_half32   __x) { return simd_char(simd_clamp(__x,-0x80,0x7f)); }
1285static simd_char2  SIMD_CFUNC simd_char_sat(simd_int2     __x) { return simd_char(simd_clamp(__x,-0x80,0x7f)); }
1286static simd_char3  SIMD_CFUNC simd_char_sat(simd_int3     __x) { return simd_char(simd_clamp(__x,-0x80,0x7f)); }
1287static simd_char4  SIMD_CFUNC simd_char_sat(simd_int4     __x) { return simd_char(simd_clamp(__x,-0x80,0x7f)); }
1288static simd_char8  SIMD_CFUNC simd_char_sat(simd_int8     __x) { return simd_char(simd_clamp(__x,-0x80,0x7f)); }
1289static simd_char16 SIMD_CFUNC simd_char_sat(simd_int16    __x) { return simd_char(simd_clamp(__x,-0x80,0x7f)); }
1290static simd_char2  SIMD_CFUNC simd_char_sat(simd_float2   __x) { return simd_char(simd_clamp(__x,-0x80,0x7f)); }
1291static simd_char3  SIMD_CFUNC simd_char_sat(simd_float3   __x) { return simd_char(simd_clamp(__x,-0x80,0x7f)); }
1292static simd_char4  SIMD_CFUNC simd_char_sat(simd_float4   __x) { return simd_char(simd_clamp(__x,-0x80,0x7f)); }
1293static simd_char8  SIMD_CFUNC simd_char_sat(simd_float8   __x) { return simd_char(simd_clamp(__x,-0x80,0x7f)); }
1294static simd_char16 SIMD_CFUNC simd_char_sat(simd_float16  __x) { return simd_char(simd_clamp(__x,-0x80,0x7f)); }
1295static simd_char2  SIMD_CFUNC simd_char_sat(simd_long2    __x) { return simd_char(simd_clamp(__x,-0x80,0x7f)); }
1296static simd_char3  SIMD_CFUNC simd_char_sat(simd_long3    __x) { return simd_char(simd_clamp(__x,-0x80,0x7f)); }
1297static simd_char4  SIMD_CFUNC simd_char_sat(simd_long4    __x) { return simd_char(simd_clamp(__x,-0x80,0x7f)); }
1298static simd_char8  SIMD_CFUNC simd_char_sat(simd_long8    __x) { return simd_char(simd_clamp(__x,-0x80,0x7f)); }
1299static simd_char2  SIMD_CFUNC simd_char_sat(simd_double2  __x) { return simd_char(simd_clamp(__x,-0x80,0x7f)); }
1300static simd_char3  SIMD_CFUNC simd_char_sat(simd_double3  __x) { return simd_char(simd_clamp(__x,-0x80,0x7f)); }
1301static simd_char4  SIMD_CFUNC simd_char_sat(simd_double4  __x) { return simd_char(simd_clamp(__x,-0x80,0x7f)); }
1302static simd_char8  SIMD_CFUNC simd_char_sat(simd_double8  __x) { return simd_char(simd_clamp(__x,-0x80,0x7f)); }
1303static simd_char2  SIMD_CFUNC simd_char_sat(simd_uchar2   __x) { return simd_char(simd_min(__x,0x7f)); }
1304static simd_char3  SIMD_CFUNC simd_char_sat(simd_uchar3   __x) { return simd_char(simd_min(__x,0x7f)); }
1305static simd_char4  SIMD_CFUNC simd_char_sat(simd_uchar4   __x) { return simd_char(simd_min(__x,0x7f)); }
1306static simd_char8  SIMD_CFUNC simd_char_sat(simd_uchar8   __x) { return simd_char(simd_min(__x,0x7f)); }
1307static simd_char16 SIMD_CFUNC simd_char_sat(simd_uchar16  __x) { return simd_char(simd_min(__x,0x7f)); }
1308static simd_char32 SIMD_CFUNC simd_char_sat(simd_uchar32  __x) { return simd_char(simd_min(__x,0x7f)); }
1309static simd_char2  SIMD_CFUNC simd_char_sat(simd_ushort2  __x) { return simd_char(simd_min(__x,0x7f)); }
1310static simd_char3  SIMD_CFUNC simd_char_sat(simd_ushort3  __x) { return simd_char(simd_min(__x,0x7f)); }
1311static simd_char4  SIMD_CFUNC simd_char_sat(simd_ushort4  __x) { return simd_char(simd_min(__x,0x7f)); }
1312static simd_char8  SIMD_CFUNC simd_char_sat(simd_ushort8  __x) { return simd_char(simd_min(__x,0x7f)); }
1313static simd_char16 SIMD_CFUNC simd_char_sat(simd_ushort16 __x) { return simd_char(simd_min(__x,0x7f)); }
1314static simd_char32 SIMD_CFUNC simd_char_sat(simd_ushort32 __x) { return simd_char(simd_min(__x,0x7f)); }
1315static simd_char2  SIMD_CFUNC simd_char_sat(simd_uint2    __x) { return simd_char(simd_min(__x,0x7f)); }
1316static simd_char3  SIMD_CFUNC simd_char_sat(simd_uint3    __x) { return simd_char(simd_min(__x,0x7f)); }
1317static simd_char4  SIMD_CFUNC simd_char_sat(simd_uint4    __x) { return simd_char(simd_min(__x,0x7f)); }
1318static simd_char8  SIMD_CFUNC simd_char_sat(simd_uint8    __x) { return simd_char(simd_min(__x,0x7f)); }
1319static simd_char16 SIMD_CFUNC simd_char_sat(simd_uint16   __x) { return simd_char(simd_min(__x,0x7f)); }
1320static simd_char2  SIMD_CFUNC simd_char_sat(simd_ulong2   __x) { return simd_char(simd_min(__x,0x7f)); }
1321static simd_char3  SIMD_CFUNC simd_char_sat(simd_ulong3   __x) { return simd_char(simd_min(__x,0x7f)); }
1322static simd_char4  SIMD_CFUNC simd_char_sat(simd_ulong4   __x) { return simd_char(simd_min(__x,0x7f)); }
1323static simd_char8  SIMD_CFUNC simd_char_sat(simd_ulong8   __x) { return simd_char(simd_min(__x,0x7f)); }
1324    
1325
1326static simd_uchar2  SIMD_CFUNC simd_uchar(simd_char2    __x) { return (simd_uchar2)__x; }
1327static simd_uchar3  SIMD_CFUNC simd_uchar(simd_char3    __x) { return (simd_uchar3)__x; }
1328static simd_uchar4  SIMD_CFUNC simd_uchar(simd_char4    __x) { return (simd_uchar4)__x; }
1329static simd_uchar8  SIMD_CFUNC simd_uchar(simd_char8    __x) { return (simd_uchar8)__x; }
1330static simd_uchar16 SIMD_CFUNC simd_uchar(simd_char16   __x) { return (simd_uchar16)__x; }
1331static simd_uchar32 SIMD_CFUNC simd_uchar(simd_char32   __x) { return (simd_uchar32)__x; }
1332static simd_uchar2  SIMD_CFUNC simd_uchar(simd_uchar2   __x) { return __x; }
1333static simd_uchar3  SIMD_CFUNC simd_uchar(simd_uchar3   __x) { return __x; }
1334static simd_uchar4  SIMD_CFUNC simd_uchar(simd_uchar4   __x) { return __x; }
1335static simd_uchar8  SIMD_CFUNC simd_uchar(simd_uchar8   __x) { return __x; }
1336static simd_uchar16 SIMD_CFUNC simd_uchar(simd_uchar16  __x) { return __x; }
1337static simd_uchar32 SIMD_CFUNC simd_uchar(simd_uchar32  __x) { return __x; }
1338static simd_uchar2  SIMD_CFUNC simd_uchar(simd_short2   __x) { return simd_uchar(simd_char(__x)); }
1339static simd_uchar3  SIMD_CFUNC simd_uchar(simd_short3   __x) { return simd_uchar(simd_char(__x)); }
1340static simd_uchar4  SIMD_CFUNC simd_uchar(simd_short4   __x) { return simd_uchar(simd_char(__x)); }
1341static simd_uchar8  SIMD_CFUNC simd_uchar(simd_short8   __x) { return simd_uchar(simd_char(__x)); }
1342static simd_uchar16 SIMD_CFUNC simd_uchar(simd_short16  __x) { return simd_uchar(simd_char(__x)); }
1343static simd_uchar32 SIMD_CFUNC simd_uchar(simd_short32  __x) { return simd_uchar(simd_char(__x)); }
1344static simd_uchar2  SIMD_CFUNC simd_uchar(simd_ushort2  __x) { return simd_uchar(simd_char(__x)); }
1345static simd_uchar3  SIMD_CFUNC simd_uchar(simd_ushort3  __x) { return simd_uchar(simd_char(__x)); }
1346static simd_uchar4  SIMD_CFUNC simd_uchar(simd_ushort4  __x) { return simd_uchar(simd_char(__x)); }
1347static simd_uchar8  SIMD_CFUNC simd_uchar(simd_ushort8  __x) { return simd_uchar(simd_char(__x)); }
1348static simd_uchar16 SIMD_CFUNC simd_uchar(simd_ushort16 __x) { return simd_uchar(simd_char(__x)); }
1349static simd_uchar32 SIMD_CFUNC simd_uchar(simd_ushort32 __x) { return simd_uchar(simd_char(__x)); }
1350static simd_uchar2  SIMD_CFUNC simd_uchar(simd_half2    __x) { return simd_uchar(simd_char(__x)); }
1351static simd_uchar3  SIMD_CFUNC simd_uchar(simd_half3    __x) { return simd_uchar(simd_char(__x)); }
1352static simd_uchar4  SIMD_CFUNC simd_uchar(simd_half4    __x) { return simd_uchar(simd_char(__x)); }
1353static simd_uchar8  SIMD_CFUNC simd_uchar(simd_half8    __x) { return simd_uchar(simd_char(__x)); }
1354static simd_uchar16 SIMD_CFUNC simd_uchar(simd_half16   __x) { return simd_uchar(simd_char(__x)); }
1355static simd_uchar32 SIMD_CFUNC simd_uchar(simd_half32   __x) { return simd_uchar(simd_char(__x)); }
1356static simd_uchar2  SIMD_CFUNC simd_uchar(simd_int2     __x) { return simd_uchar(simd_char(__x)); }
1357static simd_uchar3  SIMD_CFUNC simd_uchar(simd_int3     __x) { return simd_uchar(simd_char(__x)); }
1358static simd_uchar4  SIMD_CFUNC simd_uchar(simd_int4     __x) { return simd_uchar(simd_char(__x)); }
1359static simd_uchar8  SIMD_CFUNC simd_uchar(simd_int8     __x) { return simd_uchar(simd_char(__x)); }
1360static simd_uchar16 SIMD_CFUNC simd_uchar(simd_int16    __x) { return simd_uchar(simd_char(__x)); }
1361static simd_uchar2  SIMD_CFUNC simd_uchar(simd_uint2    __x) { return simd_uchar(simd_char(__x)); }
1362static simd_uchar3  SIMD_CFUNC simd_uchar(simd_uint3    __x) { return simd_uchar(simd_char(__x)); }
1363static simd_uchar4  SIMD_CFUNC simd_uchar(simd_uint4    __x) { return simd_uchar(simd_char(__x)); }
1364static simd_uchar8  SIMD_CFUNC simd_uchar(simd_uint8    __x) { return simd_uchar(simd_char(__x)); }
1365static simd_uchar16 SIMD_CFUNC simd_uchar(simd_uint16   __x) { return simd_uchar(simd_char(__x)); }
1366static simd_uchar2  SIMD_CFUNC simd_uchar(simd_float2   __x) { return simd_uchar(simd_char(__x)); }
1367static simd_uchar3  SIMD_CFUNC simd_uchar(simd_float3   __x) { return simd_uchar(simd_char(__x)); }
1368static simd_uchar4  SIMD_CFUNC simd_uchar(simd_float4   __x) { return simd_uchar(simd_char(__x)); }
1369static simd_uchar8  SIMD_CFUNC simd_uchar(simd_float8   __x) { return simd_uchar(simd_char(__x)); }
1370static simd_uchar16 SIMD_CFUNC simd_uchar(simd_float16  __x) { return simd_uchar(simd_char(__x)); }
1371static simd_uchar2  SIMD_CFUNC simd_uchar(simd_long2    __x) { return simd_uchar(simd_char(__x)); }
1372static simd_uchar3  SIMD_CFUNC simd_uchar(simd_long3    __x) { return simd_uchar(simd_char(__x)); }
1373static simd_uchar4  SIMD_CFUNC simd_uchar(simd_long4    __x) { return simd_uchar(simd_char(__x)); }
1374static simd_uchar8  SIMD_CFUNC simd_uchar(simd_long8    __x) { return simd_uchar(simd_char(__x)); }
1375static simd_uchar2  SIMD_CFUNC simd_uchar(simd_ulong2   __x) { return simd_uchar(simd_char(__x)); }
1376static simd_uchar3  SIMD_CFUNC simd_uchar(simd_ulong3   __x) { return simd_uchar(simd_char(__x)); }
1377static simd_uchar4  SIMD_CFUNC simd_uchar(simd_ulong4   __x) { return simd_uchar(simd_char(__x)); }
1378static simd_uchar8  SIMD_CFUNC simd_uchar(simd_ulong8   __x) { return simd_uchar(simd_char(__x)); }
1379static simd_uchar2  SIMD_CFUNC simd_uchar(simd_double2  __x) { return simd_uchar(simd_char(__x)); }
1380static simd_uchar3  SIMD_CFUNC simd_uchar(simd_double3  __x) { return simd_uchar(simd_char(__x)); }
1381static simd_uchar4  SIMD_CFUNC simd_uchar(simd_double4  __x) { return simd_uchar(simd_char(__x)); }
1382static simd_uchar8  SIMD_CFUNC simd_uchar(simd_double8  __x) { return simd_uchar(simd_char(__x)); }
1383    
1384static simd_uchar2  SIMD_CFUNC simd_uchar_sat(simd_char2    __x) { return simd_uchar(simd_max(0,__x)); }
1385static simd_uchar3  SIMD_CFUNC simd_uchar_sat(simd_char3    __x) { return simd_uchar(simd_max(0,__x)); }
1386static simd_uchar4  SIMD_CFUNC simd_uchar_sat(simd_char4    __x) { return simd_uchar(simd_max(0,__x)); }
1387static simd_uchar8  SIMD_CFUNC simd_uchar_sat(simd_char8    __x) { return simd_uchar(simd_max(0,__x)); }
1388static simd_uchar16 SIMD_CFUNC simd_uchar_sat(simd_char16   __x) { return simd_uchar(simd_max(0,__x)); }
1389static simd_uchar32 SIMD_CFUNC simd_uchar_sat(simd_char32   __x) { return simd_uchar(simd_max(0,__x)); }
1390static simd_uchar2  SIMD_CFUNC simd_uchar_sat(simd_short2   __x) { return simd_uchar(simd_clamp(__x,0,0xff)); }
1391static simd_uchar3  SIMD_CFUNC simd_uchar_sat(simd_short3   __x) { return simd_uchar(simd_clamp(__x,0,0xff)); }
1392static simd_uchar4  SIMD_CFUNC simd_uchar_sat(simd_short4   __x) { return simd_uchar(simd_clamp(__x,0,0xff)); }
1393static simd_uchar8  SIMD_CFUNC simd_uchar_sat(simd_short8   __x) { return simd_uchar(simd_clamp(__x,0,0xff)); }
1394static simd_uchar16 SIMD_CFUNC simd_uchar_sat(simd_short16  __x) { return simd_uchar(simd_clamp(__x,0,0xff)); }
1395static simd_uchar32 SIMD_CFUNC simd_uchar_sat(simd_short32  __x) { return simd_uchar(simd_clamp(__x,0,0xff)); }
1396static simd_uchar2  SIMD_CFUNC simd_uchar_sat(simd_half2    __x) { return simd_uchar(simd_clamp(__x,0,0xff)); }
1397static simd_uchar3  SIMD_CFUNC simd_uchar_sat(simd_half3    __x) { return simd_uchar(simd_clamp(__x,0,0xff)); }
1398static simd_uchar4  SIMD_CFUNC simd_uchar_sat(simd_half4    __x) { return simd_uchar(simd_clamp(__x,0,0xff)); }
1399static simd_uchar8  SIMD_CFUNC simd_uchar_sat(simd_half8    __x) { return simd_uchar(simd_clamp(__x,0,0xff)); }
1400static simd_uchar16 SIMD_CFUNC simd_uchar_sat(simd_half16   __x) { return simd_uchar(simd_clamp(__x,0,0xff)); }
1401static simd_uchar32 SIMD_CFUNC simd_uchar_sat(simd_half32   __x) { return simd_uchar(simd_clamp(__x,0,0xff)); }
1402static simd_uchar2  SIMD_CFUNC simd_uchar_sat(simd_int2     __x) { return simd_uchar(simd_clamp(__x,0,0xff)); }
1403static simd_uchar3  SIMD_CFUNC simd_uchar_sat(simd_int3     __x) { return simd_uchar(simd_clamp(__x,0,0xff)); }
1404static simd_uchar4  SIMD_CFUNC simd_uchar_sat(simd_int4     __x) { return simd_uchar(simd_clamp(__x,0,0xff)); }
1405static simd_uchar8  SIMD_CFUNC simd_uchar_sat(simd_int8     __x) { return simd_uchar(simd_clamp(__x,0,0xff)); }
1406static simd_uchar16 SIMD_CFUNC simd_uchar_sat(simd_int16    __x) { return simd_uchar(simd_clamp(__x,0,0xff)); }
1407static simd_uchar2  SIMD_CFUNC simd_uchar_sat(simd_float2   __x) { return simd_uchar(simd_clamp(__x,0,0xff)); }
1408static simd_uchar3  SIMD_CFUNC simd_uchar_sat(simd_float3   __x) { return simd_uchar(simd_clamp(__x,0,0xff)); }
1409static simd_uchar4  SIMD_CFUNC simd_uchar_sat(simd_float4   __x) { return simd_uchar(simd_clamp(__x,0,0xff)); }
1410static simd_uchar8  SIMD_CFUNC simd_uchar_sat(simd_float8   __x) { return simd_uchar(simd_clamp(__x,0,0xff)); }
1411static simd_uchar16 SIMD_CFUNC simd_uchar_sat(simd_float16  __x) { return simd_uchar(simd_clamp(__x,0,0xff)); }
1412static simd_uchar2  SIMD_CFUNC simd_uchar_sat(simd_long2    __x) { return simd_uchar(simd_clamp(__x,0,0xff)); }
1413static simd_uchar3  SIMD_CFUNC simd_uchar_sat(simd_long3    __x) { return simd_uchar(simd_clamp(__x,0,0xff)); }
1414static simd_uchar4  SIMD_CFUNC simd_uchar_sat(simd_long4    __x) { return simd_uchar(simd_clamp(__x,0,0xff)); }
1415static simd_uchar8  SIMD_CFUNC simd_uchar_sat(simd_long8    __x) { return simd_uchar(simd_clamp(__x,0,0xff)); }
1416static simd_uchar2  SIMD_CFUNC simd_uchar_sat(simd_double2  __x) { return simd_uchar(simd_clamp(__x,0,0xff)); }
1417static simd_uchar3  SIMD_CFUNC simd_uchar_sat(simd_double3  __x) { return simd_uchar(simd_clamp(__x,0,0xff)); }
1418static simd_uchar4  SIMD_CFUNC simd_uchar_sat(simd_double4  __x) { return simd_uchar(simd_clamp(__x,0,0xff)); }
1419static simd_uchar8  SIMD_CFUNC simd_uchar_sat(simd_double8  __x) { return simd_uchar(simd_clamp(__x,0,0xff)); }
1420static simd_uchar2  SIMD_CFUNC simd_uchar_sat(simd_uchar2   __x) { return __x; }
1421static simd_uchar3  SIMD_CFUNC simd_uchar_sat(simd_uchar3   __x) { return __x; }
1422static simd_uchar4  SIMD_CFUNC simd_uchar_sat(simd_uchar4   __x) { return __x; }
1423static simd_uchar8  SIMD_CFUNC simd_uchar_sat(simd_uchar8   __x) { return __x; }
1424static simd_uchar16 SIMD_CFUNC simd_uchar_sat(simd_uchar16  __x) { return __x; }
1425static simd_uchar32 SIMD_CFUNC simd_uchar_sat(simd_uchar32  __x) { return __x; }
1426static simd_uchar2  SIMD_CFUNC simd_uchar_sat(simd_ushort2  __x) { return simd_uchar(simd_min(__x,0xff)); }
1427static simd_uchar3  SIMD_CFUNC simd_uchar_sat(simd_ushort3  __x) { return simd_uchar(simd_min(__x,0xff)); }
1428static simd_uchar4  SIMD_CFUNC simd_uchar_sat(simd_ushort4  __x) { return simd_uchar(simd_min(__x,0xff)); }
1429static simd_uchar8  SIMD_CFUNC simd_uchar_sat(simd_ushort8  __x) { return simd_uchar(simd_min(__x,0xff)); }
1430static simd_uchar16 SIMD_CFUNC simd_uchar_sat(simd_ushort16 __x) { return simd_uchar(simd_min(__x,0xff)); }
1431static simd_uchar32 SIMD_CFUNC simd_uchar_sat(simd_ushort32 __x) { return simd_uchar(simd_min(__x,0xff)); }
1432static simd_uchar2  SIMD_CFUNC simd_uchar_sat(simd_uint2    __x) { return simd_uchar(simd_min(__x,0xff)); }
1433static simd_uchar3  SIMD_CFUNC simd_uchar_sat(simd_uint3    __x) { return simd_uchar(simd_min(__x,0xff)); }
1434static simd_uchar4  SIMD_CFUNC simd_uchar_sat(simd_uint4    __x) { return simd_uchar(simd_min(__x,0xff)); }
1435static simd_uchar8  SIMD_CFUNC simd_uchar_sat(simd_uint8    __x) { return simd_uchar(simd_min(__x,0xff)); }
1436static simd_uchar16 SIMD_CFUNC simd_uchar_sat(simd_uint16   __x) { return simd_uchar(simd_min(__x,0xff)); }
1437static simd_uchar2  SIMD_CFUNC simd_uchar_sat(simd_ulong2   __x) { return simd_uchar(simd_min(__x,0xff)); }
1438static simd_uchar3  SIMD_CFUNC simd_uchar_sat(simd_ulong3   __x) { return simd_uchar(simd_min(__x,0xff)); }
1439static simd_uchar4  SIMD_CFUNC simd_uchar_sat(simd_ulong4   __x) { return simd_uchar(simd_min(__x,0xff)); }
1440static simd_uchar8  SIMD_CFUNC simd_uchar_sat(simd_ulong8   __x) { return simd_uchar(simd_min(__x,0xff)); }
1441    
1442
1443static simd_short2  SIMD_CFUNC simd_short(simd_char2    __x) { return __builtin_convertvector(__x, simd_short2); }
1444static simd_short3  SIMD_CFUNC simd_short(simd_char3    __x) { return __builtin_convertvector(__x, simd_short3); }
1445static simd_short4  SIMD_CFUNC simd_short(simd_char4    __x) { return __builtin_convertvector(__x, simd_short4); }
1446static simd_short8  SIMD_CFUNC simd_short(simd_char8    __x) { return __builtin_convertvector(__x, simd_short8); }
1447static simd_short16 SIMD_CFUNC simd_short(simd_char16   __x) { return __builtin_convertvector(__x, simd_short16); }
1448static simd_short32 SIMD_CFUNC simd_short(simd_char32   __x) { return __builtin_convertvector(__x, simd_short32); }
1449static simd_short2  SIMD_CFUNC simd_short(simd_uchar2   __x) { return __builtin_convertvector(__x, simd_short2); }
1450static simd_short3  SIMD_CFUNC simd_short(simd_uchar3   __x) { return __builtin_convertvector(__x, simd_short3); }
1451static simd_short4  SIMD_CFUNC simd_short(simd_uchar4   __x) { return __builtin_convertvector(__x, simd_short4); }
1452static simd_short8  SIMD_CFUNC simd_short(simd_uchar8   __x) { return __builtin_convertvector(__x, simd_short8); }
1453static simd_short16 SIMD_CFUNC simd_short(simd_uchar16  __x) { return __builtin_convertvector(__x, simd_short16); }
1454static simd_short32 SIMD_CFUNC simd_short(simd_uchar32  __x) { return __builtin_convertvector(__x, simd_short32); }
1455static simd_short2  SIMD_CFUNC simd_short(simd_short2   __x) { return __x; }
1456static simd_short3  SIMD_CFUNC simd_short(simd_short3   __x) { return __x; }
1457static simd_short4  SIMD_CFUNC simd_short(simd_short4   __x) { return __x; }
1458static simd_short8  SIMD_CFUNC simd_short(simd_short8   __x) { return __x; }
1459static simd_short16 SIMD_CFUNC simd_short(simd_short16  __x) { return __x; }
1460static simd_short32 SIMD_CFUNC simd_short(simd_short32  __x) { return __x; }
1461static simd_short2  SIMD_CFUNC simd_short(simd_ushort2  __x) { return (simd_short2)__x; }
1462static simd_short3  SIMD_CFUNC simd_short(simd_ushort3  __x) { return (simd_short3)__x; }
1463static simd_short4  SIMD_CFUNC simd_short(simd_ushort4  __x) { return (simd_short4)__x; }
1464static simd_short8  SIMD_CFUNC simd_short(simd_ushort8  __x) { return (simd_short8)__x; }
1465static simd_short16 SIMD_CFUNC simd_short(simd_ushort16 __x) { return (simd_short16)__x; }
1466static simd_short32 SIMD_CFUNC simd_short(simd_ushort32 __x) { return (simd_short32)__x; }
1467static simd_short2  SIMD_CFUNC simd_short(simd_half2    __x) { return __builtin_convertvector(__x, simd_short2); }
1468static simd_short3  SIMD_CFUNC simd_short(simd_half3    __x) { return __builtin_convertvector(__x, simd_short3); }
1469static simd_short4  SIMD_CFUNC simd_short(simd_half4    __x) { return __builtin_convertvector(__x, simd_short4); }
1470static simd_short8  SIMD_CFUNC simd_short(simd_half8    __x) { return __builtin_convertvector(__x, simd_short8); }
1471static simd_short16 SIMD_CFUNC simd_short(simd_half16   __x) { return __builtin_convertvector(__x, simd_short16); }
1472static simd_short32 SIMD_CFUNC simd_short(simd_half32   __x) { return __builtin_convertvector(__x, simd_short32); }
1473static simd_short2  SIMD_CFUNC simd_short(simd_int2     __x) { return __builtin_convertvector(__x & 0xffff, simd_short2); }
1474static simd_short3  SIMD_CFUNC simd_short(simd_int3     __x) { return __builtin_convertvector(__x & 0xffff, simd_short3); }
1475static simd_short4  SIMD_CFUNC simd_short(simd_int4     __x) { return __builtin_convertvector(__x & 0xffff, simd_short4); }
1476static simd_short8  SIMD_CFUNC simd_short(simd_int8     __x) { return __builtin_convertvector(__x & 0xffff, simd_short8); }
1477static simd_short16 SIMD_CFUNC simd_short(simd_int16    __x) { return __builtin_convertvector(__x & 0xffff, simd_short16); }
1478static simd_short2  SIMD_CFUNC simd_short(simd_uint2    __x) { return simd_short(simd_int(__x)); }
1479static simd_short3  SIMD_CFUNC simd_short(simd_uint3    __x) { return simd_short(simd_int(__x)); }
1480static simd_short4  SIMD_CFUNC simd_short(simd_uint4    __x) { return simd_short(simd_int(__x)); }
1481static simd_short8  SIMD_CFUNC simd_short(simd_uint8    __x) { return simd_short(simd_int(__x)); }
1482static simd_short16 SIMD_CFUNC simd_short(simd_uint16   __x) { return simd_short(simd_int(__x)); }
1483static simd_short2  SIMD_CFUNC simd_short(simd_float2   __x) { return simd_short(simd_int(__x)); }
1484static simd_short3  SIMD_CFUNC simd_short(simd_float3   __x) { return simd_short(simd_int(__x)); }
1485static simd_short4  SIMD_CFUNC simd_short(simd_float4   __x) { return simd_short(simd_int(__x)); }
1486static simd_short8  SIMD_CFUNC simd_short(simd_float8   __x) { return simd_short(simd_int(__x)); }
1487static simd_short16 SIMD_CFUNC simd_short(simd_float16  __x) { return simd_short(simd_int(__x)); }
1488static simd_short2  SIMD_CFUNC simd_short(simd_long2    __x) { return simd_short(simd_int(__x)); }
1489static simd_short3  SIMD_CFUNC simd_short(simd_long3    __x) { return simd_short(simd_int(__x)); }
1490static simd_short4  SIMD_CFUNC simd_short(simd_long4    __x) { return simd_short(simd_int(__x)); }
1491static simd_short8  SIMD_CFUNC simd_short(simd_long8    __x) { return simd_short(simd_int(__x)); }
1492static simd_short2  SIMD_CFUNC simd_short(simd_ulong2   __x) { return simd_short(simd_int(__x)); }
1493static simd_short3  SIMD_CFUNC simd_short(simd_ulong3   __x) { return simd_short(simd_int(__x)); }
1494static simd_short4  SIMD_CFUNC simd_short(simd_ulong4   __x) { return simd_short(simd_int(__x)); }
1495static simd_short8  SIMD_CFUNC simd_short(simd_ulong8   __x) { return simd_short(simd_int(__x)); }
1496static simd_short2  SIMD_CFUNC simd_short(simd_double2  __x) { return simd_short(simd_int(__x)); }
1497static simd_short3  SIMD_CFUNC simd_short(simd_double3  __x) { return simd_short(simd_int(__x)); }
1498static simd_short4  SIMD_CFUNC simd_short(simd_double4  __x) { return simd_short(simd_int(__x)); }
1499static simd_short8  SIMD_CFUNC simd_short(simd_double8  __x) { return simd_short(simd_int(__x)); }
1500    
1501static simd_short2  SIMD_CFUNC simd_short_sat(simd_char2    __x) { return simd_short(__x); }
1502static simd_short3  SIMD_CFUNC simd_short_sat(simd_char3    __x) { return simd_short(__x); }
1503static simd_short4  SIMD_CFUNC simd_short_sat(simd_char4    __x) { return simd_short(__x); }
1504static simd_short8  SIMD_CFUNC simd_short_sat(simd_char8    __x) { return simd_short(__x); }
1505static simd_short16 SIMD_CFUNC simd_short_sat(simd_char16   __x) { return simd_short(__x); }
1506static simd_short32 SIMD_CFUNC simd_short_sat(simd_char32   __x) { return simd_short(__x); }
1507static simd_short2  SIMD_CFUNC simd_short_sat(simd_short2   __x) { return __x; }
1508static simd_short3  SIMD_CFUNC simd_short_sat(simd_short3   __x) { return __x; }
1509static simd_short4  SIMD_CFUNC simd_short_sat(simd_short4   __x) { return __x; }
1510static simd_short8  SIMD_CFUNC simd_short_sat(simd_short8   __x) { return __x; }
1511static simd_short16 SIMD_CFUNC simd_short_sat(simd_short16  __x) { return __x; }
1512static simd_short32 SIMD_CFUNC simd_short_sat(simd_short32  __x) { return __x; }
1513static simd_short2  SIMD_CFUNC simd_short_sat(simd_half2    __x) { return simd_bitselect(simd_short(simd_max(__x,-0x1.0p15f16)), 0x7fff, __x >= 0x1.0p15f16); }
1514static simd_short3  SIMD_CFUNC simd_short_sat(simd_half3    __x) { return simd_bitselect(simd_short(simd_max(__x,-0x1.0p15f16)), 0x7fff, __x >= 0x1.0p15f16); }
1515static simd_short4  SIMD_CFUNC simd_short_sat(simd_half4    __x) { return simd_bitselect(simd_short(simd_max(__x,-0x1.0p15f16)), 0x7fff, __x >= 0x1.0p15f16); }
1516static simd_short8  SIMD_CFUNC simd_short_sat(simd_half8    __x) { return simd_bitselect(simd_short(simd_max(__x,-0x1.0p15f16)), 0x7fff, __x >= 0x1.0p15f16); }
1517static simd_short16 SIMD_CFUNC simd_short_sat(simd_half16   __x) { return simd_bitselect(simd_short(simd_max(__x,-0x1.0p15f16)), 0x7fff, __x >= 0x1.0p15f16); }
1518static simd_short32 SIMD_CFUNC simd_short_sat(simd_half32   __x) { return simd_bitselect(simd_short(simd_max(__x,-0x1.0p15f16)), 0x7fff, __x >= 0x1.0p15f16); }
1519static simd_short2  SIMD_CFUNC simd_short_sat(simd_int2     __x) { return simd_short(simd_clamp(__x,-0x8000,0x7fff)); }
1520static simd_short3  SIMD_CFUNC simd_short_sat(simd_int3     __x) { return simd_short(simd_clamp(__x,-0x8000,0x7fff)); }
1521static simd_short4  SIMD_CFUNC simd_short_sat(simd_int4     __x) { return simd_short(simd_clamp(__x,-0x8000,0x7fff)); }
1522static simd_short8  SIMD_CFUNC simd_short_sat(simd_int8     __x) { return simd_short(simd_clamp(__x,-0x8000,0x7fff)); }
1523static simd_short16 SIMD_CFUNC simd_short_sat(simd_int16    __x) { return simd_short(simd_clamp(__x,-0x8000,0x7fff)); }
1524static simd_short2  SIMD_CFUNC simd_short_sat(simd_float2   __x) { return simd_short(simd_clamp(__x,-0x8000,0x7fff)); }
1525static simd_short3  SIMD_CFUNC simd_short_sat(simd_float3   __x) { return simd_short(simd_clamp(__x,-0x8000,0x7fff)); }
1526static simd_short4  SIMD_CFUNC simd_short_sat(simd_float4   __x) { return simd_short(simd_clamp(__x,-0x8000,0x7fff)); }
1527static simd_short8  SIMD_CFUNC simd_short_sat(simd_float8   __x) { return simd_short(simd_clamp(__x,-0x8000,0x7fff)); }
1528static simd_short16 SIMD_CFUNC simd_short_sat(simd_float16  __x) { return simd_short(simd_clamp(__x,-0x8000,0x7fff)); }
1529static simd_short2  SIMD_CFUNC simd_short_sat(simd_long2    __x) { return simd_short(simd_clamp(__x,-0x8000,0x7fff)); }
1530static simd_short3  SIMD_CFUNC simd_short_sat(simd_long3    __x) { return simd_short(simd_clamp(__x,-0x8000,0x7fff)); }
1531static simd_short4  SIMD_CFUNC simd_short_sat(simd_long4    __x) { return simd_short(simd_clamp(__x,-0x8000,0x7fff)); }
1532static simd_short8  SIMD_CFUNC simd_short_sat(simd_long8    __x) { return simd_short(simd_clamp(__x,-0x8000,0x7fff)); }
1533static simd_short2  SIMD_CFUNC simd_short_sat(simd_double2  __x) { return simd_short(simd_clamp(__x,-0x8000,0x7fff)); }
1534static simd_short3  SIMD_CFUNC simd_short_sat(simd_double3  __x) { return simd_short(simd_clamp(__x,-0x8000,0x7fff)); }
1535static simd_short4  SIMD_CFUNC simd_short_sat(simd_double4  __x) { return simd_short(simd_clamp(__x,-0x8000,0x7fff)); }
1536static simd_short8  SIMD_CFUNC simd_short_sat(simd_double8  __x) { return simd_short(simd_clamp(__x,-0x8000,0x7fff)); }
1537static simd_short2  SIMD_CFUNC simd_short_sat(simd_uchar2   __x) { return simd_short(__x); }
1538static simd_short3  SIMD_CFUNC simd_short_sat(simd_uchar3   __x) { return simd_short(__x); }
1539static simd_short4  SIMD_CFUNC simd_short_sat(simd_uchar4   __x) { return simd_short(__x); }
1540static simd_short8  SIMD_CFUNC simd_short_sat(simd_uchar8   __x) { return simd_short(__x); }
1541static simd_short16 SIMD_CFUNC simd_short_sat(simd_uchar16  __x) { return simd_short(__x); }
1542static simd_short32 SIMD_CFUNC simd_short_sat(simd_uchar32  __x) { return simd_short(__x); }
1543static simd_short2  SIMD_CFUNC simd_short_sat(simd_ushort2  __x) { return simd_short(simd_min(__x,0x7fff)); }
1544static simd_short3  SIMD_CFUNC simd_short_sat(simd_ushort3  __x) { return simd_short(simd_min(__x,0x7fff)); }
1545static simd_short4  SIMD_CFUNC simd_short_sat(simd_ushort4  __x) { return simd_short(simd_min(__x,0x7fff)); }
1546static simd_short8  SIMD_CFUNC simd_short_sat(simd_ushort8  __x) { return simd_short(simd_min(__x,0x7fff)); }
1547static simd_short16 SIMD_CFUNC simd_short_sat(simd_ushort16 __x) { return simd_short(simd_min(__x,0x7fff)); }
1548static simd_short32 SIMD_CFUNC simd_short_sat(simd_ushort32 __x) { return simd_short(simd_min(__x,0x7fff)); }
1549static simd_short2  SIMD_CFUNC simd_short_sat(simd_uint2    __x) { return simd_short(simd_min(__x,0x7fff)); }
1550static simd_short3  SIMD_CFUNC simd_short_sat(simd_uint3    __x) { return simd_short(simd_min(__x,0x7fff)); }
1551static simd_short4  SIMD_CFUNC simd_short_sat(simd_uint4    __x) { return simd_short(simd_min(__x,0x7fff)); }
1552static simd_short8  SIMD_CFUNC simd_short_sat(simd_uint8    __x) { return simd_short(simd_min(__x,0x7fff)); }
1553static simd_short16 SIMD_CFUNC simd_short_sat(simd_uint16   __x) { return simd_short(simd_min(__x,0x7fff)); }
1554static simd_short2  SIMD_CFUNC simd_short_sat(simd_ulong2   __x) { return simd_short(simd_min(__x,0x7fff)); }
1555static simd_short3  SIMD_CFUNC simd_short_sat(simd_ulong3   __x) { return simd_short(simd_min(__x,0x7fff)); }
1556static simd_short4  SIMD_CFUNC simd_short_sat(simd_ulong4   __x) { return simd_short(simd_min(__x,0x7fff)); }
1557static simd_short8  SIMD_CFUNC simd_short_sat(simd_ulong8   __x) { return simd_short(simd_min(__x,0x7fff)); }
1558static simd_short2  SIMD_CFUNC simd_short_rte(simd_half2    __x) { return simd_make_short2(simd_short_rte(simd_make_half4_undef(__x))); }
1559static simd_short3  SIMD_CFUNC simd_short_rte(simd_half3    __x) { return simd_make_short3(simd_short_rte(simd_make_half4_undef(__x))); }
1560static simd_short4  SIMD_CFUNC simd_short_rte(simd_half4    __x) {
1561#if defined __ARM_FEATURE_FP16_VECTOR_ARITHMETIC
1562  return vcvtn_s16_f16(__x);
1563#else
1564  return simd_make_short4(simd_short_rte(simd_make_half8_undef(__x)));
1565#endif
1566}
1567static simd_short8  SIMD_CFUNC simd_short_rte(simd_half8    __x) {
1568#if defined __ARM_FEATURE_FP16_VECTOR_ARITHMETIC
1569  return vcvtnq_s16_f16(__x);
1570#else
1571  simd_half8 magic = __tg_copysign(0x1.0p10f16, __x);
1572  simd_short8 x_is_small = __tg_fabs(__x) < 0x1.0p10f16;
1573  return __builtin_convertvector(simd_bitselect(__x, (__x + magic) - magic, x_is_small & 0x7fff), simd_short8);
1574#endif
1575}
1576static simd_short16 SIMD_CFUNC simd_short_rte(simd_half16   __x) { return simd_make_short16(simd_short_rte(__x.lo), simd_short_rte(__x.hi)); }
1577static simd_short32 SIMD_CFUNC simd_short_rte(simd_half32   __x) { return simd_make_short32(simd_short_rte(__x.lo), simd_short_rte(__x.hi)); }
1578
1579static simd_ushort2  SIMD_CFUNC simd_ushort(simd_char2    __x) { return simd_ushort(simd_short(__x)); }
1580static simd_ushort3  SIMD_CFUNC simd_ushort(simd_char3    __x) { return simd_ushort(simd_short(__x)); }
1581static simd_ushort4  SIMD_CFUNC simd_ushort(simd_char4    __x) { return simd_ushort(simd_short(__x)); }
1582static simd_ushort8  SIMD_CFUNC simd_ushort(simd_char8    __x) { return simd_ushort(simd_short(__x)); }
1583static simd_ushort16 SIMD_CFUNC simd_ushort(simd_char16   __x) { return simd_ushort(simd_short(__x)); }
1584static simd_ushort32 SIMD_CFUNC simd_ushort(simd_char32   __x) { return simd_ushort(simd_short(__x)); }
1585static simd_ushort2  SIMD_CFUNC simd_ushort(simd_uchar2   __x) { return simd_ushort(simd_short(__x)); }
1586static simd_ushort3  SIMD_CFUNC simd_ushort(simd_uchar3   __x) { return simd_ushort(simd_short(__x)); }
1587static simd_ushort4  SIMD_CFUNC simd_ushort(simd_uchar4   __x) { return simd_ushort(simd_short(__x)); }
1588static simd_ushort8  SIMD_CFUNC simd_ushort(simd_uchar8   __x) { return simd_ushort(simd_short(__x)); }
1589static simd_ushort16 SIMD_CFUNC simd_ushort(simd_uchar16  __x) { return simd_ushort(simd_short(__x)); }
1590static simd_ushort32 SIMD_CFUNC simd_ushort(simd_uchar32  __x) { return simd_ushort(simd_short(__x)); }
1591static simd_ushort2  SIMD_CFUNC simd_ushort(simd_short2   __x) { return (simd_ushort2)__x; }
1592static simd_ushort3  SIMD_CFUNC simd_ushort(simd_short3   __x) { return (simd_ushort3)__x; }
1593static simd_ushort4  SIMD_CFUNC simd_ushort(simd_short4   __x) { return (simd_ushort4)__x; }
1594static simd_ushort8  SIMD_CFUNC simd_ushort(simd_short8   __x) { return (simd_ushort8)__x; }
1595static simd_ushort16 SIMD_CFUNC simd_ushort(simd_short16  __x) { return (simd_ushort16)__x; }
1596static simd_ushort32 SIMD_CFUNC simd_ushort(simd_short32  __x) { return (simd_ushort32)__x; }
1597static simd_ushort2  SIMD_CFUNC simd_ushort(simd_ushort2  __x) { return __x; }
1598static simd_ushort3  SIMD_CFUNC simd_ushort(simd_ushort3  __x) { return __x; }
1599static simd_ushort4  SIMD_CFUNC simd_ushort(simd_ushort4  __x) { return __x; }
1600static simd_ushort8  SIMD_CFUNC simd_ushort(simd_ushort8  __x) { return __x; }
1601static simd_ushort16 SIMD_CFUNC simd_ushort(simd_ushort16 __x) { return __x; }
1602static simd_ushort32 SIMD_CFUNC simd_ushort(simd_ushort32 __x) { return __x; }
1603static simd_ushort2  SIMD_CFUNC simd_ushort(simd_half2    __x) { return __builtin_convertvector(__x, simd_ushort2); }
1604static simd_ushort3  SIMD_CFUNC simd_ushort(simd_half3    __x) { return __builtin_convertvector(__x, simd_ushort3); }
1605static simd_ushort4  SIMD_CFUNC simd_ushort(simd_half4    __x) { return __builtin_convertvector(__x, simd_ushort4); }
1606static simd_ushort8  SIMD_CFUNC simd_ushort(simd_half8    __x) { return __builtin_convertvector(__x, simd_ushort8); }
1607static simd_ushort16 SIMD_CFUNC simd_ushort(simd_half16   __x) { return __builtin_convertvector(__x, simd_ushort16); }
1608static simd_ushort32 SIMD_CFUNC simd_ushort(simd_half32   __x) { return __builtin_convertvector(__x, simd_ushort32); }
1609static simd_ushort2  SIMD_CFUNC simd_ushort(simd_int2     __x) { return simd_ushort(simd_short(__x)); }
1610static simd_ushort3  SIMD_CFUNC simd_ushort(simd_int3     __x) { return simd_ushort(simd_short(__x)); }
1611static simd_ushort4  SIMD_CFUNC simd_ushort(simd_int4     __x) { return simd_ushort(simd_short(__x)); }
1612static simd_ushort8  SIMD_CFUNC simd_ushort(simd_int8     __x) { return simd_ushort(simd_short(__x)); }
1613static simd_ushort16 SIMD_CFUNC simd_ushort(simd_int16    __x) { return simd_ushort(simd_short(__x)); }
1614static simd_ushort2  SIMD_CFUNC simd_ushort(simd_uint2    __x) { return simd_ushort(simd_short(__x)); }
1615static simd_ushort3  SIMD_CFUNC simd_ushort(simd_uint3    __x) { return simd_ushort(simd_short(__x)); }
1616static simd_ushort4  SIMD_CFUNC simd_ushort(simd_uint4    __x) { return simd_ushort(simd_short(__x)); }
1617static simd_ushort8  SIMD_CFUNC simd_ushort(simd_uint8    __x) { return simd_ushort(simd_short(__x)); }
1618static simd_ushort16 SIMD_CFUNC simd_ushort(simd_uint16   __x) { return simd_ushort(simd_short(__x)); }
1619static simd_ushort2  SIMD_CFUNC simd_ushort(simd_float2   __x) { return simd_ushort(simd_short(__x)); }
1620static simd_ushort3  SIMD_CFUNC simd_ushort(simd_float3   __x) { return simd_ushort(simd_short(__x)); }
1621static simd_ushort4  SIMD_CFUNC simd_ushort(simd_float4   __x) { return simd_ushort(simd_short(__x)); }
1622static simd_ushort8  SIMD_CFUNC simd_ushort(simd_float8   __x) { return simd_ushort(simd_short(__x)); }
1623static simd_ushort16 SIMD_CFUNC simd_ushort(simd_float16  __x) { return simd_ushort(simd_short(__x)); }
1624static simd_ushort2  SIMD_CFUNC simd_ushort(simd_long2    __x) { return simd_ushort(simd_short(__x)); }
1625static simd_ushort3  SIMD_CFUNC simd_ushort(simd_long3    __x) { return simd_ushort(simd_short(__x)); }
1626static simd_ushort4  SIMD_CFUNC simd_ushort(simd_long4    __x) { return simd_ushort(simd_short(__x)); }
1627static simd_ushort8  SIMD_CFUNC simd_ushort(simd_long8    __x) { return simd_ushort(simd_short(__x)); }
1628static simd_ushort2  SIMD_CFUNC simd_ushort(simd_ulong2   __x) { return simd_ushort(simd_short(__x)); }
1629static simd_ushort3  SIMD_CFUNC simd_ushort(simd_ulong3   __x) { return simd_ushort(simd_short(__x)); }
1630static simd_ushort4  SIMD_CFUNC simd_ushort(simd_ulong4   __x) { return simd_ushort(simd_short(__x)); }
1631static simd_ushort8  SIMD_CFUNC simd_ushort(simd_ulong8   __x) { return simd_ushort(simd_short(__x)); }
1632static simd_ushort2  SIMD_CFUNC simd_ushort(simd_double2  __x) { return simd_ushort(simd_short(__x)); }
1633static simd_ushort3  SIMD_CFUNC simd_ushort(simd_double3  __x) { return simd_ushort(simd_short(__x)); }
1634static simd_ushort4  SIMD_CFUNC simd_ushort(simd_double4  __x) { return simd_ushort(simd_short(__x)); }
1635static simd_ushort8  SIMD_CFUNC simd_ushort(simd_double8  __x) { return simd_ushort(simd_short(__x)); }
1636    
1637static simd_ushort2  SIMD_CFUNC simd_ushort_sat(simd_char2    __x) { return simd_ushort(simd_max(__x, 0)); }
1638static simd_ushort3  SIMD_CFUNC simd_ushort_sat(simd_char3    __x) { return simd_ushort(simd_max(__x, 0)); }
1639static simd_ushort4  SIMD_CFUNC simd_ushort_sat(simd_char4    __x) { return simd_ushort(simd_max(__x, 0)); }
1640static simd_ushort8  SIMD_CFUNC simd_ushort_sat(simd_char8    __x) { return simd_ushort(simd_max(__x, 0)); }
1641static simd_ushort16 SIMD_CFUNC simd_ushort_sat(simd_char16   __x) { return simd_ushort(simd_max(__x, 0)); }
1642static simd_ushort32 SIMD_CFUNC simd_ushort_sat(simd_char32   __x) { return simd_ushort(simd_max(__x, 0)); }
1643static simd_ushort2  SIMD_CFUNC simd_ushort_sat(simd_short2   __x) { return simd_ushort(simd_max(__x, 0)); }
1644static simd_ushort3  SIMD_CFUNC simd_ushort_sat(simd_short3   __x) { return simd_ushort(simd_max(__x, 0)); }
1645static simd_ushort4  SIMD_CFUNC simd_ushort_sat(simd_short4   __x) { return simd_ushort(simd_max(__x, 0)); }
1646static simd_ushort8  SIMD_CFUNC simd_ushort_sat(simd_short8   __x) { return simd_ushort(simd_max(__x, 0)); }
1647static simd_ushort16 SIMD_CFUNC simd_ushort_sat(simd_short16  __x) { return simd_ushort(simd_max(__x, 0)); }
1648static simd_ushort32 SIMD_CFUNC simd_ushort_sat(simd_short32  __x) { return simd_ushort(simd_max(__x, 0)); }
1649static simd_ushort2  SIMD_CFUNC simd_ushort_sat(simd_half2    __x) { return simd_bitselect(simd_ushort(simd_max(__x,0)), 0xffff, __x > 0x1.ffcp15f16); }
1650static simd_ushort3  SIMD_CFUNC simd_ushort_sat(simd_half3    __x) { return simd_bitselect(simd_ushort(simd_max(__x,0)), 0xffff, __x > 0x1.ffcp15f16); }
1651static simd_ushort4  SIMD_CFUNC simd_ushort_sat(simd_half4    __x) { return simd_bitselect(simd_ushort(simd_max(__x,0)), 0xffff, __x > 0x1.ffcp15f16); }
1652static simd_ushort8  SIMD_CFUNC simd_ushort_sat(simd_half8    __x) { return simd_bitselect(simd_ushort(simd_max(__x,0)), 0xffff, __x > 0x1.ffcp15f16); }
1653static simd_ushort16 SIMD_CFUNC simd_ushort_sat(simd_half16   __x) { return simd_bitselect(simd_ushort(simd_max(__x,0)), 0xffff, __x > 0x1.ffcp15f16); }
1654static simd_ushort32 SIMD_CFUNC simd_ushort_sat(simd_half32   __x) { return simd_bitselect(simd_ushort(simd_max(__x,0)), 0xffff, __x > 0x1.ffcp15f16); }
1655static simd_ushort2  SIMD_CFUNC simd_ushort_sat(simd_int2     __x) { return simd_ushort(simd_clamp(__x, 0, 0xffff)); }
1656static simd_ushort3  SIMD_CFUNC simd_ushort_sat(simd_int3     __x) { return simd_ushort(simd_clamp(__x, 0, 0xffff)); }
1657static simd_ushort4  SIMD_CFUNC simd_ushort_sat(simd_int4     __x) { return simd_ushort(simd_clamp(__x, 0, 0xffff)); }
1658static simd_ushort8  SIMD_CFUNC simd_ushort_sat(simd_int8     __x) { return simd_ushort(simd_clamp(__x, 0, 0xffff)); }
1659static simd_ushort16 SIMD_CFUNC simd_ushort_sat(simd_int16    __x) { return simd_ushort(simd_clamp(__x, 0, 0xffff)); }
1660static simd_ushort2  SIMD_CFUNC simd_ushort_sat(simd_float2   __x) { return simd_ushort(simd_clamp(__x, 0, 0xffff)); }
1661static simd_ushort3  SIMD_CFUNC simd_ushort_sat(simd_float3   __x) { return simd_ushort(simd_clamp(__x, 0, 0xffff)); }
1662static simd_ushort4  SIMD_CFUNC simd_ushort_sat(simd_float4   __x) { return simd_ushort(simd_clamp(__x, 0, 0xffff)); }
1663static simd_ushort8  SIMD_CFUNC simd_ushort_sat(simd_float8   __x) { return simd_ushort(simd_clamp(__x, 0, 0xffff)); }
1664static simd_ushort16 SIMD_CFUNC simd_ushort_sat(simd_float16  __x) { return simd_ushort(simd_clamp(__x, 0, 0xffff)); }
1665static simd_ushort2  SIMD_CFUNC simd_ushort_sat(simd_long2    __x) { return simd_ushort(simd_clamp(__x, 0, 0xffff)); }
1666static simd_ushort3  SIMD_CFUNC simd_ushort_sat(simd_long3    __x) { return simd_ushort(simd_clamp(__x, 0, 0xffff)); }
1667static simd_ushort4  SIMD_CFUNC simd_ushort_sat(simd_long4    __x) { return simd_ushort(simd_clamp(__x, 0, 0xffff)); }
1668static simd_ushort8  SIMD_CFUNC simd_ushort_sat(simd_long8    __x) { return simd_ushort(simd_clamp(__x, 0, 0xffff)); }
1669static simd_ushort2  SIMD_CFUNC simd_ushort_sat(simd_double2  __x) { return simd_ushort(simd_clamp(__x, 0, 0xffff)); }
1670static simd_ushort3  SIMD_CFUNC simd_ushort_sat(simd_double3  __x) { return simd_ushort(simd_clamp(__x, 0, 0xffff)); }
1671static simd_ushort4  SIMD_CFUNC simd_ushort_sat(simd_double4  __x) { return simd_ushort(simd_clamp(__x, 0, 0xffff)); }
1672static simd_ushort8  SIMD_CFUNC simd_ushort_sat(simd_double8  __x) { return simd_ushort(simd_clamp(__x, 0, 0xffff)); }
1673static simd_ushort2  SIMD_CFUNC simd_ushort_sat(simd_uchar2   __x) { return simd_ushort(__x); }
1674static simd_ushort3  SIMD_CFUNC simd_ushort_sat(simd_uchar3   __x) { return simd_ushort(__x); }
1675static simd_ushort4  SIMD_CFUNC simd_ushort_sat(simd_uchar4   __x) { return simd_ushort(__x); }
1676static simd_ushort8  SIMD_CFUNC simd_ushort_sat(simd_uchar8   __x) { return simd_ushort(__x); }
1677static simd_ushort16 SIMD_CFUNC simd_ushort_sat(simd_uchar16  __x) { return simd_ushort(__x); }
1678static simd_ushort32 SIMD_CFUNC simd_ushort_sat(simd_uchar32  __x) { return simd_ushort(__x); }
1679static simd_ushort2  SIMD_CFUNC simd_ushort_sat(simd_ushort2  __x) { return __x; }
1680static simd_ushort3  SIMD_CFUNC simd_ushort_sat(simd_ushort3  __x) { return __x; }
1681static simd_ushort4  SIMD_CFUNC simd_ushort_sat(simd_ushort4  __x) { return __x; }
1682static simd_ushort8  SIMD_CFUNC simd_ushort_sat(simd_ushort8  __x) { return __x; }
1683static simd_ushort16 SIMD_CFUNC simd_ushort_sat(simd_ushort16 __x) { return __x; }
1684static simd_ushort32 SIMD_CFUNC simd_ushort_sat(simd_ushort32 __x) { return __x; }
1685static simd_ushort2  SIMD_CFUNC simd_ushort_sat(simd_uint2    __x) { return simd_ushort(simd_min(__x, 0xffff)); }
1686static simd_ushort3  SIMD_CFUNC simd_ushort_sat(simd_uint3    __x) { return simd_ushort(simd_min(__x, 0xffff)); }
1687static simd_ushort4  SIMD_CFUNC simd_ushort_sat(simd_uint4    __x) { return simd_ushort(simd_min(__x, 0xffff)); }
1688static simd_ushort8  SIMD_CFUNC simd_ushort_sat(simd_uint8    __x) { return simd_ushort(simd_min(__x, 0xffff)); }
1689static simd_ushort16 SIMD_CFUNC simd_ushort_sat(simd_uint16   __x) { return simd_ushort(simd_min(__x, 0xffff)); }
1690static simd_ushort2  SIMD_CFUNC simd_ushort_sat(simd_ulong2   __x) { return simd_ushort(simd_min(__x, 0xffff)); }
1691static simd_ushort3  SIMD_CFUNC simd_ushort_sat(simd_ulong3   __x) { return simd_ushort(simd_min(__x, 0xffff)); }
1692static simd_ushort4  SIMD_CFUNC simd_ushort_sat(simd_ulong4   __x) { return simd_ushort(simd_min(__x, 0xffff)); }
1693static simd_ushort8  SIMD_CFUNC simd_ushort_sat(simd_ulong8   __x) { return simd_ushort(simd_min(__x, 0xffff)); }
1694static simd_ushort2  SIMD_CFUNC simd_ushort_rte(simd_half2    __x) { return simd_make_ushort2(simd_ushort_rte(simd_make_half4_undef(__x))); }
1695static simd_ushort3  SIMD_CFUNC simd_ushort_rte(simd_half3    __x) { return simd_make_ushort3(simd_ushort_rte(simd_make_half4_undef(__x))); }
1696static simd_ushort4  SIMD_CFUNC simd_ushort_rte(simd_half4    __x) {
1697#if defined __ARM_FEATURE_FP16_VECTOR_ARITHMETIC
1698  return vcvtn_u16_f16(__x);
1699#else
1700  return simd_make_ushort4(simd_ushort_rte(simd_make_half8_undef(__x)));
1701#endif
1702}
1703static simd_ushort8  SIMD_CFUNC simd_ushort_rte(simd_half8    __x) {
1704#if defined __ARM_FEATURE_FP16_VECTOR_ARITHMETIC
1705  return vcvtnq_u16_f16(__x);
1706#else
1707  simd_short8  __big = __x >= 0x1.0p15f16;
1708  return simd_ushort(simd_short(__x - simd_bitselect((simd_half8) 0,0x1.0p15f16,__big))) + simd_bitselect((simd_ushort8) 0,0x8000,__big);
1709#endif
1710}
1711static simd_ushort16 SIMD_CFUNC simd_ushort_rte(simd_half16  __x) { return simd_make_ushort16(simd_ushort_rte(__x.lo), simd_ushort_rte(__x.hi)); }
1712static simd_ushort32 SIMD_CFUNC simd_ushort_rte(simd_half32  __x) { return simd_make_ushort32(simd_ushort_rte(__x.lo), simd_ushort_rte(__x.hi)); }
1713
1714static simd_half2  SIMD_CFUNC simd_half(simd_char2    __x) { return (simd_half2)(simd_short(__x) + 0x6600) - 0x1.8p10f16; }
1715static simd_half3  SIMD_CFUNC simd_half(simd_char3    __x) { return (simd_half3)(simd_short(__x) + 0x6600) - 0x1.8p10f16; }
1716static simd_half4  SIMD_CFUNC simd_half(simd_char4    __x) { return (simd_half4)(simd_short(__x) + 0x6600) - 0x1.8p10f16; }
1717static simd_half8  SIMD_CFUNC simd_half(simd_char8    __x) { return (simd_half8)(simd_short(__x) + 0x6600) - 0x1.8p10f16; }
1718static simd_half16 SIMD_CFUNC simd_half(simd_char16   __x) { return (simd_half16)(simd_short(__x) + 0x6600) - 0x1.8p10f16; }
1719static simd_half2  SIMD_CFUNC simd_half(simd_uchar2   __x) { return (simd_half2)(simd_short(__x) + 0x6600) - 0x1.8p10f16; }
1720static simd_half3  SIMD_CFUNC simd_half(simd_uchar3   __x) { return (simd_half3)(simd_short(__x) + 0x6600) - 0x1.8p10f16; }
1721static simd_half4  SIMD_CFUNC simd_half(simd_uchar4   __x) { return (simd_half4)(simd_short(__x) + 0x6600) - 0x1.8p10f16; }
1722static simd_half8  SIMD_CFUNC simd_half(simd_uchar8   __x) { return (simd_half8)(simd_short(__x) + 0x6600) - 0x1.8p10f16; }
1723static simd_half16 SIMD_CFUNC simd_half(simd_uchar16  __x) { return (simd_half16)(simd_short(__x) + 0x6600) - 0x1.8p10f16; }
1724static simd_half2  SIMD_CFUNC simd_half(simd_short2   __x) { return __builtin_convertvector(__x,simd_half2); }
1725static simd_half3  SIMD_CFUNC simd_half(simd_short3   __x) { return __builtin_convertvector(__x,simd_half3); }
1726static simd_half4  SIMD_CFUNC simd_half(simd_short4   __x) { return __builtin_convertvector(__x,simd_half4); }
1727static simd_half8  SIMD_CFUNC simd_half(simd_short8   __x) { return __builtin_convertvector(__x,simd_half8); }
1728static simd_half16 SIMD_CFUNC simd_half(simd_short16  __x) { return __builtin_convertvector(__x,simd_half16); }
1729static simd_half2  SIMD_CFUNC simd_half(simd_ushort2  __x) { return __builtin_convertvector(__x,simd_half2); }
1730static simd_half3  SIMD_CFUNC simd_half(simd_ushort3  __x) { return __builtin_convertvector(__x,simd_half3); }
1731static simd_half4  SIMD_CFUNC simd_half(simd_ushort4  __x) { return __builtin_convertvector(__x,simd_half4); }
1732static simd_half8  SIMD_CFUNC simd_half(simd_ushort8  __x) { return __builtin_convertvector(__x,simd_half8); }
1733static simd_half16 SIMD_CFUNC simd_half(simd_ushort16 __x) { return __builtin_convertvector(__x,simd_half16); }
1734static simd_half2  SIMD_CFUNC simd_half(simd_half2    __x) { return __x; }
1735static simd_half3  SIMD_CFUNC simd_half(simd_half3    __x) { return __x; }
1736static simd_half4  SIMD_CFUNC simd_half(simd_half4    __x) { return __x; }
1737static simd_half8  SIMD_CFUNC simd_half(simd_half8    __x) { return __x; }
1738static simd_half16 SIMD_CFUNC simd_half(simd_half16   __x) { return __x; }
1739static simd_half2  SIMD_CFUNC simd_half(simd_int2     __x) { return __builtin_convertvector(__x,simd_half2); }
1740static simd_half3  SIMD_CFUNC simd_half(simd_int3     __x) { return __builtin_convertvector(__x,simd_half3); }
1741static simd_half4  SIMD_CFUNC simd_half(simd_int4     __x) { return __builtin_convertvector(__x,simd_half4); }
1742static simd_half8  SIMD_CFUNC simd_half(simd_int8     __x) { return __builtin_convertvector(__x,simd_half8); }
1743static simd_half16 SIMD_CFUNC simd_half(simd_int16    __x) { return __builtin_convertvector(__x,simd_half16); }
1744static simd_half2  SIMD_CFUNC simd_half(simd_uint2    __x) { return __builtin_convertvector(__x,simd_half2); }
1745static simd_half3  SIMD_CFUNC simd_half(simd_uint3    __x) { return __builtin_convertvector(__x,simd_half3); }
1746static simd_half4  SIMD_CFUNC simd_half(simd_uint4    __x) { return __builtin_convertvector(__x,simd_half4); }
1747static simd_half8  SIMD_CFUNC simd_half(simd_uint8    __x) { return __builtin_convertvector(__x,simd_half8); }
1748static simd_half16 SIMD_CFUNC simd_half(simd_uint16   __x) { return __builtin_convertvector(__x,simd_half16); }
1749static simd_half2  SIMD_CFUNC simd_half(simd_float2   __x) { return __builtin_convertvector(__x,simd_half2); }
1750static simd_half3  SIMD_CFUNC simd_half(simd_float3   __x) { return __builtin_convertvector(__x,simd_half3); }
1751static simd_half4  SIMD_CFUNC simd_half(simd_float4   __x) { return __builtin_convertvector(__x,simd_half4); }
1752static simd_half8  SIMD_CFUNC simd_half(simd_float8   __x) { return __builtin_convertvector(__x,simd_half8); }
1753static simd_half16 SIMD_CFUNC simd_half(simd_float16  __x) { return __builtin_convertvector(__x,simd_half16); }
1754static simd_half2  SIMD_CFUNC simd_half(simd_long2    __x) { return __builtin_convertvector(__x,simd_half2); }
1755static simd_half3  SIMD_CFUNC simd_half(simd_long3    __x) { return __builtin_convertvector(__x,simd_half3); }
1756static simd_half4  SIMD_CFUNC simd_half(simd_long4    __x) { return __builtin_convertvector(__x,simd_half4); }
1757static simd_half8  SIMD_CFUNC simd_half(simd_long8    __x) { return __builtin_convertvector(__x,simd_half8); }
1758static simd_half2  SIMD_CFUNC simd_half(simd_ulong2   __x) { return __builtin_convertvector(__x,simd_half2); }
1759static simd_half3  SIMD_CFUNC simd_half(simd_ulong3   __x) { return __builtin_convertvector(__x,simd_half3); }
1760static simd_half4  SIMD_CFUNC simd_half(simd_ulong4   __x) { return __builtin_convertvector(__x,simd_half4); }
1761static simd_half8  SIMD_CFUNC simd_half(simd_ulong8   __x) { return __builtin_convertvector(__x,simd_half8); }
1762static simd_half2  SIMD_CFUNC simd_half(simd_double2  __x) { return __builtin_convertvector(__x,simd_half2); }
1763static simd_half3  SIMD_CFUNC simd_half(simd_double3  __x) { return __builtin_convertvector(__x,simd_half3); }
1764static simd_half4  SIMD_CFUNC simd_half(simd_double4  __x) { return __builtin_convertvector(__x,simd_half4); }
1765static simd_half8  SIMD_CFUNC simd_half(simd_double8  __x) { return __builtin_convertvector(__x,simd_half8); }
1766
1767static simd_int2  SIMD_CFUNC simd_int(simd_char2    __x) { return __builtin_convertvector(__x, simd_int2); }
1768static simd_int3  SIMD_CFUNC simd_int(simd_char3    __x) { return __builtin_convertvector(__x, simd_int3); }
1769static simd_int4  SIMD_CFUNC simd_int(simd_char4    __x) { return __builtin_convertvector(__x, simd_int4); }
1770static simd_int8  SIMD_CFUNC simd_int(simd_char8    __x) { return __builtin_convertvector(__x, simd_int8); }
1771static simd_int16 SIMD_CFUNC simd_int(simd_char16   __x) { return __builtin_convertvector(__x, simd_int16); }
1772static simd_int2  SIMD_CFUNC simd_int(simd_uchar2   __x) { return __builtin_convertvector(__x, simd_int2); }
1773static simd_int3  SIMD_CFUNC simd_int(simd_uchar3   __x) { return __builtin_convertvector(__x, simd_int3); }
1774static simd_int4  SIMD_CFUNC simd_int(simd_uchar4   __x) { return __builtin_convertvector(__x, simd_int4); }
1775static simd_int8  SIMD_CFUNC simd_int(simd_uchar8   __x) { return __builtin_convertvector(__x, simd_int8); }
1776static simd_int16 SIMD_CFUNC simd_int(simd_uchar16  __x) { return __builtin_convertvector(__x, simd_int16); }
1777static simd_int2  SIMD_CFUNC simd_int(simd_short2   __x) { return __builtin_convertvector(__x, simd_int2); }
1778static simd_int3  SIMD_CFUNC simd_int(simd_short3   __x) { return __builtin_convertvector(__x, simd_int3); }
1779static simd_int4  SIMD_CFUNC simd_int(simd_short4   __x) { return __builtin_convertvector(__x, simd_int4); }
1780static simd_int8  SIMD_CFUNC simd_int(simd_short8   __x) { return __builtin_convertvector(__x, simd_int8); }
1781static simd_int16 SIMD_CFUNC simd_int(simd_short16  __x) { return __builtin_convertvector(__x, simd_int16); }
1782static simd_int2  SIMD_CFUNC simd_int(simd_ushort2  __x) { return __builtin_convertvector(__x, simd_int2); }
1783static simd_int3  SIMD_CFUNC simd_int(simd_ushort3  __x) { return __builtin_convertvector(__x, simd_int3); }
1784static simd_int4  SIMD_CFUNC simd_int(simd_ushort4  __x) { return __builtin_convertvector(__x, simd_int4); }
1785static simd_int8  SIMD_CFUNC simd_int(simd_ushort8  __x) { return __builtin_convertvector(__x, simd_int8); }
1786static simd_int16 SIMD_CFUNC simd_int(simd_ushort16 __x) { return __builtin_convertvector(__x, simd_int16); }
1787static simd_int2  SIMD_CFUNC simd_int(simd_half2    __x) { return __builtin_convertvector(__x, simd_int2); }
1788static simd_int3  SIMD_CFUNC simd_int(simd_half3    __x) { return __builtin_convertvector(__x, simd_int3); }
1789static simd_int4  SIMD_CFUNC simd_int(simd_half4    __x) { return __builtin_convertvector(__x, simd_int4); }
1790static simd_int8  SIMD_CFUNC simd_int(simd_half8    __x) { return __builtin_convertvector(__x, simd_int8); }
1791static simd_int16 SIMD_CFUNC simd_int(simd_half16   __x) { return __builtin_convertvector(__x, simd_int16); }
1792static simd_int2  SIMD_CFUNC simd_int(simd_int2     __x) { return __x; }
1793static simd_int3  SIMD_CFUNC simd_int(simd_int3     __x) { return __x; }
1794static simd_int4  SIMD_CFUNC simd_int(simd_int4     __x) { return __x; }
1795static simd_int8  SIMD_CFUNC simd_int(simd_int8     __x) { return __x; }
1796static simd_int16 SIMD_CFUNC simd_int(simd_int16    __x) { return __x; }
1797static simd_int2  SIMD_CFUNC simd_int(simd_uint2    __x) { return (simd_int2)__x; }
1798static simd_int3  SIMD_CFUNC simd_int(simd_uint3    __x) { return (simd_int3)__x; }
1799static simd_int4  SIMD_CFUNC simd_int(simd_uint4    __x) { return (simd_int4)__x; }
1800static simd_int8  SIMD_CFUNC simd_int(simd_uint8    __x) { return (simd_int8)__x; }
1801static simd_int16 SIMD_CFUNC simd_int(simd_uint16   __x) { return (simd_int16)__x; }
1802static simd_int2  SIMD_CFUNC simd_int(simd_float2   __x) { return __builtin_convertvector(__x, simd_int2); }
1803static simd_int3  SIMD_CFUNC simd_int(simd_float3   __x) { return __builtin_convertvector(__x, simd_int3); }
1804static simd_int4  SIMD_CFUNC simd_int(simd_float4   __x) { return __builtin_convertvector(__x, simd_int4); }
1805static simd_int8  SIMD_CFUNC simd_int(simd_float8   __x) { return __builtin_convertvector(__x, simd_int8); }
1806static simd_int16 SIMD_CFUNC simd_int(simd_float16  __x) { return __builtin_convertvector(__x, simd_int16); }
1807static simd_int2  SIMD_CFUNC simd_int(simd_long2    __x) { return __builtin_convertvector(__x & 0xffffffff, simd_int2); }
1808static simd_int3  SIMD_CFUNC simd_int(simd_long3    __x) { return __builtin_convertvector(__x & 0xffffffff, simd_int3); }
1809static simd_int4  SIMD_CFUNC simd_int(simd_long4    __x) { return __builtin_convertvector(__x & 0xffffffff, simd_int4); }
1810static simd_int8  SIMD_CFUNC simd_int(simd_long8    __x) { return __builtin_convertvector(__x & 0xffffffff, simd_int8); }
1811static simd_int2  SIMD_CFUNC simd_int(simd_ulong2   __x) { return simd_int(simd_long(__x)); }
1812static simd_int3  SIMD_CFUNC simd_int(simd_ulong3   __x) { return simd_int(simd_long(__x)); }
1813static simd_int4  SIMD_CFUNC simd_int(simd_ulong4   __x) { return simd_int(simd_long(__x)); }
1814static simd_int8  SIMD_CFUNC simd_int(simd_ulong8   __x) { return simd_int(simd_long(__x)); }
1815static simd_int2  SIMD_CFUNC simd_int(simd_double2  __x) { return __builtin_convertvector(__x, simd_int2); }
1816static simd_int3  SIMD_CFUNC simd_int(simd_double3  __x) { return __builtin_convertvector(__x, simd_int3); }
1817static simd_int4  SIMD_CFUNC simd_int(simd_double4  __x) { return __builtin_convertvector(__x, simd_int4); }
1818static simd_int8  SIMD_CFUNC simd_int(simd_double8  __x) { return __builtin_convertvector(__x, simd_int8); }
1819    
1820static simd_int2  SIMD_CFUNC simd_int_sat(simd_char2    __x) { return simd_int(__x); }
1821static simd_int3  SIMD_CFUNC simd_int_sat(simd_char3    __x) { return simd_int(__x); }
1822static simd_int4  SIMD_CFUNC simd_int_sat(simd_char4    __x) { return simd_int(__x); }
1823static simd_int8  SIMD_CFUNC simd_int_sat(simd_char8    __x) { return simd_int(__x); }
1824static simd_int16 SIMD_CFUNC simd_int_sat(simd_char16   __x) { return simd_int(__x); }
1825static simd_int2  SIMD_CFUNC simd_int_sat(simd_short2   __x) { return simd_int(__x); }
1826static simd_int3  SIMD_CFUNC simd_int_sat(simd_short3   __x) { return simd_int(__x); }
1827static simd_int4  SIMD_CFUNC simd_int_sat(simd_short4   __x) { return simd_int(__x); }
1828static simd_int8  SIMD_CFUNC simd_int_sat(simd_short8   __x) { return simd_int(__x); }
1829static simd_int16 SIMD_CFUNC simd_int_sat(simd_short16  __x) { return simd_int(__x); }
1830static simd_int2  SIMD_CFUNC simd_int_sat(simd_half2    __x) { return simd_int(__x); }
1831static simd_int3  SIMD_CFUNC simd_int_sat(simd_half3    __x) { return simd_int(__x); }
1832static simd_int4  SIMD_CFUNC simd_int_sat(simd_half4    __x) { return simd_int(__x); }
1833static simd_int8  SIMD_CFUNC simd_int_sat(simd_half8    __x) { return simd_int(__x); }
1834static simd_int16 SIMD_CFUNC simd_int_sat(simd_half16   __x) { return simd_int(__x); }
1835static simd_int2  SIMD_CFUNC simd_int_sat(simd_int2     __x) { return __x; }
1836static simd_int3  SIMD_CFUNC simd_int_sat(simd_int3     __x) { return __x; }
1837static simd_int4  SIMD_CFUNC simd_int_sat(simd_int4     __x) { return __x; }
1838static simd_int8  SIMD_CFUNC simd_int_sat(simd_int8     __x) { return __x; }
1839static simd_int16 SIMD_CFUNC simd_int_sat(simd_int16    __x) { return __x; }
1840static simd_int2  SIMD_CFUNC simd_int_sat(simd_float2   __x) { return simd_bitselect(simd_int(simd_max(__x,-0x1.0p31f)), 0x7fffffff, __x >= 0x1.0p31f); }
1841static simd_int3  SIMD_CFUNC simd_int_sat(simd_float3   __x) { return simd_bitselect(simd_int(simd_max(__x,-0x1.0p31f)), 0x7fffffff, __x >= 0x1.0p31f); }
1842static simd_int4  SIMD_CFUNC simd_int_sat(simd_float4   __x) { return simd_bitselect(simd_int(simd_max(__x,-0x1.0p31f)), 0x7fffffff, __x >= 0x1.0p31f); }
1843static simd_int8  SIMD_CFUNC simd_int_sat(simd_float8   __x) { return simd_bitselect(simd_int(simd_max(__x,-0x1.0p31f)), 0x7fffffff, __x >= 0x1.0p31f); }
1844static simd_int16 SIMD_CFUNC simd_int_sat(simd_float16  __x) { return simd_bitselect(simd_int(simd_max(__x,-0x1.0p31f)), 0x7fffffff, __x >= 0x1.0p31f); }
1845static simd_int2  SIMD_CFUNC simd_int_sat(simd_long2    __x) { return simd_int(simd_clamp(__x,-0x80000000LL,0x7fffffffLL)); }
1846static simd_int3  SIMD_CFUNC simd_int_sat(simd_long3    __x) { return simd_int(simd_clamp(__x,-0x80000000LL,0x7fffffffLL)); }
1847static simd_int4  SIMD_CFUNC simd_int_sat(simd_long4    __x) { return simd_int(simd_clamp(__x,-0x80000000LL,0x7fffffffLL)); }
1848static simd_int8  SIMD_CFUNC simd_int_sat(simd_long8    __x) { return simd_int(simd_clamp(__x,-0x80000000LL,0x7fffffffLL)); }
1849static simd_int2  SIMD_CFUNC simd_int_sat(simd_double2  __x) { return simd_int(simd_clamp(__x,-0x1.0p31,0x1.fffffffcp30)); }
1850static simd_int3  SIMD_CFUNC simd_int_sat(simd_double3  __x) { return simd_int(simd_clamp(__x,-0x1.0p31,0x1.fffffffcp30)); }
1851static simd_int4  SIMD_CFUNC simd_int_sat(simd_double4  __x) { return simd_int(simd_clamp(__x,-0x1.0p31,0x1.fffffffcp30)); }
1852static simd_int8  SIMD_CFUNC simd_int_sat(simd_double8  __x) { return simd_int(simd_clamp(__x,-0x1.0p31,0x1.fffffffcp30)); }
1853static simd_int2  SIMD_CFUNC simd_int_sat(simd_uchar2   __x) { return simd_int(__x); }
1854static simd_int3  SIMD_CFUNC simd_int_sat(simd_uchar3   __x) { return simd_int(__x); }
1855static simd_int4  SIMD_CFUNC simd_int_sat(simd_uchar4   __x) { return simd_int(__x); }
1856static simd_int8  SIMD_CFUNC simd_int_sat(simd_uchar8   __x) { return simd_int(__x); }
1857static simd_int16 SIMD_CFUNC simd_int_sat(simd_uchar16  __x) { return simd_int(__x); }
1858static simd_int2  SIMD_CFUNC simd_int_sat(simd_ushort2  __x) { return simd_int(__x); }
1859static simd_int3  SIMD_CFUNC simd_int_sat(simd_ushort3  __x) { return simd_int(__x); }
1860static simd_int4  SIMD_CFUNC simd_int_sat(simd_ushort4  __x) { return simd_int(__x); }
1861static simd_int8  SIMD_CFUNC simd_int_sat(simd_ushort8  __x) { return simd_int(__x); }
1862static simd_int16 SIMD_CFUNC simd_int_sat(simd_ushort16 __x) { return simd_int(__x); }
1863static simd_int2  SIMD_CFUNC simd_int_sat(simd_uint2    __x) { return simd_int(simd_min(__x,0x7fffffff)); }
1864static simd_int3  SIMD_CFUNC simd_int_sat(simd_uint3    __x) { return simd_int(simd_min(__x,0x7fffffff)); }
1865static simd_int4  SIMD_CFUNC simd_int_sat(simd_uint4    __x) { return simd_int(simd_min(__x,0x7fffffff)); }
1866static simd_int8  SIMD_CFUNC simd_int_sat(simd_uint8    __x) { return simd_int(simd_min(__x,0x7fffffff)); }
1867static simd_int16 SIMD_CFUNC simd_int_sat(simd_uint16   __x) { return simd_int(simd_min(__x,0x7fffffff)); }
1868static simd_int2  SIMD_CFUNC simd_int_sat(simd_ulong2   __x) { return simd_int(simd_min(__x,0x7fffffff)); }
1869static simd_int3  SIMD_CFUNC simd_int_sat(simd_ulong3   __x) { return simd_int(simd_min(__x,0x7fffffff)); }
1870static simd_int4  SIMD_CFUNC simd_int_sat(simd_ulong4   __x) { return simd_int(simd_min(__x,0x7fffffff)); }
1871static simd_int8  SIMD_CFUNC simd_int_sat(simd_ulong8   __x) { return simd_int(simd_min(__x,0x7fffffff)); }
1872    
1873static simd_int2  SIMD_CFUNC simd_int_rte(simd_float2   __x) {
1874#if defined __arm64__ || defined __aarch64__
1875  return vcvtn_s32_f32(__x);
1876#else
1877  return simd_make_int2(simd_int_rte(simd_make_float4_undef(__x)));
1878#endif
1879}
1880
1881static simd_int3  SIMD_CFUNC simd_int_rte(simd_float3   __x) {
1882  return simd_make_int3(simd_int_rte(simd_make_float4_undef(__x)));
1883}
1884
1885static simd_int4  SIMD_CFUNC simd_int_rte(simd_float4   __x) {
1886#if defined __SSE2__
1887  return _mm_cvtps_epi32(__x);
1888#elif defined __arm64__ || defined __aarch64__
1889  return vcvtnq_s32_f32(__x);
1890#else
1891  simd_float4 magic = __tg_copysign(0x1.0p23, __x);
1892  simd_int4 x_is_small = __tg_fabs(__x) < 0x1.0p23;
1893  return __builtin_convertvector(simd_bitselect(__x, (__x + magic) - magic, x_is_small & 0x7fffffff), simd_int4);
1894#endif
1895}
1896
1897static simd_int8  SIMD_CFUNC simd_int_rte(simd_float8   __x) {
1898#if defined __AVX__
1899  return _mm256_cvtps_epi32(__x);
1900#else
1901  return simd_make_int8(simd_int_rte(__x.lo), simd_int_rte(__x.hi));
1902#endif
1903}
1904
1905static simd_int16 SIMD_CFUNC simd_int_rte(simd_float16  __x) {
1906#if defined __AVX512F__
1907  return _mm512_cvtps_epi32(__x);
1908#else
1909  return simd_make_int16(simd_int_rte(__x.lo), simd_int_rte(__x.hi));
1910#endif
1911}
1912
1913static simd_uint2  SIMD_CFUNC simd_uint(simd_char2    __x) { return simd_uint(simd_int(__x)); }
1914static simd_uint3  SIMD_CFUNC simd_uint(simd_char3    __x) { return simd_uint(simd_int(__x)); }
1915static simd_uint4  SIMD_CFUNC simd_uint(simd_char4    __x) { return simd_uint(simd_int(__x)); }
1916static simd_uint8  SIMD_CFUNC simd_uint(simd_char8    __x) { return simd_uint(simd_int(__x)); }
1917static simd_uint16 SIMD_CFUNC simd_uint(simd_char16   __x) { return simd_uint(simd_int(__x)); }
1918static simd_uint2  SIMD_CFUNC simd_uint(simd_uchar2   __x) { return simd_uint(simd_int(__x)); }
1919static simd_uint3  SIMD_CFUNC simd_uint(simd_uchar3   __x) { return simd_uint(simd_int(__x)); }
1920static simd_uint4  SIMD_CFUNC simd_uint(simd_uchar4   __x) { return simd_uint(simd_int(__x)); }
1921static simd_uint8  SIMD_CFUNC simd_uint(simd_uchar8   __x) { return simd_uint(simd_int(__x)); }
1922static simd_uint16 SIMD_CFUNC simd_uint(simd_uchar16  __x) { return simd_uint(simd_int(__x)); }
1923static simd_uint2  SIMD_CFUNC simd_uint(simd_short2   __x) { return simd_uint(simd_int(__x)); }
1924static simd_uint3  SIMD_CFUNC simd_uint(simd_short3   __x) { return simd_uint(simd_int(__x)); }
1925static simd_uint4  SIMD_CFUNC simd_uint(simd_short4   __x) { return simd_uint(simd_int(__x)); }
1926static simd_uint8  SIMD_CFUNC simd_uint(simd_short8   __x) { return simd_uint(simd_int(__x)); }
1927static simd_uint16 SIMD_CFUNC simd_uint(simd_short16  __x) { return simd_uint(simd_int(__x)); }
1928static simd_uint2  SIMD_CFUNC simd_uint(simd_ushort2  __x) { return simd_uint(simd_int(__x)); }
1929static simd_uint3  SIMD_CFUNC simd_uint(simd_ushort3  __x) { return simd_uint(simd_int(__x)); }
1930static simd_uint4  SIMD_CFUNC simd_uint(simd_ushort4  __x) { return simd_uint(simd_int(__x)); }
1931static simd_uint8  SIMD_CFUNC simd_uint(simd_ushort8  __x) { return simd_uint(simd_int(__x)); }
1932static simd_uint16 SIMD_CFUNC simd_uint(simd_ushort16 __x) { return simd_uint(simd_int(__x)); }
1933static simd_uint2  SIMD_CFUNC simd_uint(simd_half2    __x) { return simd_uint(simd_int(__x)); }
1934static simd_uint3  SIMD_CFUNC simd_uint(simd_half3    __x) { return simd_uint(simd_int(__x)); }
1935static simd_uint4  SIMD_CFUNC simd_uint(simd_half4    __x) { return simd_uint(simd_int(__x)); }
1936static simd_uint8  SIMD_CFUNC simd_uint(simd_half8    __x) { return simd_uint(simd_int(__x)); }
1937static simd_uint16 SIMD_CFUNC simd_uint(simd_half16   __x) { return simd_uint(simd_int(__x)); }
1938static simd_uint2  SIMD_CFUNC simd_uint(simd_int2     __x) { return (simd_uint2)__x; }
1939static simd_uint3  SIMD_CFUNC simd_uint(simd_int3     __x) { return (simd_uint3)__x; }
1940static simd_uint4  SIMD_CFUNC simd_uint(simd_int4     __x) { return (simd_uint4)__x; }
1941static simd_uint8  SIMD_CFUNC simd_uint(simd_int8     __x) { return (simd_uint8)__x; }
1942static simd_uint16 SIMD_CFUNC simd_uint(simd_int16    __x) { return (simd_uint16)__x; }
1943static simd_uint2  SIMD_CFUNC simd_uint(simd_uint2    __x) { return __x; }
1944static simd_uint3  SIMD_CFUNC simd_uint(simd_uint3    __x) { return __x; }
1945static simd_uint4  SIMD_CFUNC simd_uint(simd_uint4    __x) { return __x; }
1946static simd_uint8  SIMD_CFUNC simd_uint(simd_uint8    __x) { return __x; }
1947static simd_uint16 SIMD_CFUNC simd_uint(simd_uint16   __x) { return __x; }
1948static simd_uint2  SIMD_CFUNC simd_uint(simd_float2   __x) { simd_int2  __big = __x > 0x1.0p31f; return simd_uint(simd_int(__x - simd_bitselect((simd_float2)0,0x1.0p31f,__big))) + simd_bitselect((simd_uint2)0,0x80000000,__big); }
1949static simd_uint3  SIMD_CFUNC simd_uint(simd_float3   __x) { simd_int3  __big = __x > 0x1.0p31f; return simd_uint(simd_int(__x - simd_bitselect((simd_float3)0,0x1.0p31f,__big))) + simd_bitselect((simd_uint3)0,0x80000000,__big); }
1950static simd_uint4  SIMD_CFUNC simd_uint(simd_float4   __x) { simd_int4  __big = __x > 0x1.0p31f; return simd_uint(simd_int(__x - simd_bitselect((simd_float4)0,0x1.0p31f,__big))) + simd_bitselect((simd_uint4)0,0x80000000,__big); }
1951static simd_uint8  SIMD_CFUNC simd_uint(simd_float8   __x) { simd_int8  __big = __x > 0x1.0p31f; return simd_uint(simd_int(__x - simd_bitselect((simd_float8)0,0x1.0p31f,__big))) + simd_bitselect((simd_uint8)0,0x80000000,__big); }
1952static simd_uint16 SIMD_CFUNC simd_uint(simd_float16  __x) { simd_int16 __big = __x > 0x1.0p31f; return simd_uint(simd_int(__x - simd_bitselect((simd_float16)0,0x1.0p31f,__big))) + simd_bitselect((simd_uint16)0,0x80000000,__big); }
1953static simd_uint2  SIMD_CFUNC simd_uint(simd_long2    __x) { return simd_uint(simd_int(__x)); }
1954static simd_uint3  SIMD_CFUNC simd_uint(simd_long3    __x) { return simd_uint(simd_int(__x)); }
1955static simd_uint4  SIMD_CFUNC simd_uint(simd_long4    __x) { return simd_uint(simd_int(__x)); }
1956static simd_uint8  SIMD_CFUNC simd_uint(simd_long8    __x) { return simd_uint(simd_int(__x)); }
1957static simd_uint2  SIMD_CFUNC simd_uint(simd_ulong2   __x) { return simd_uint(simd_int(__x)); }
1958static simd_uint3  SIMD_CFUNC simd_uint(simd_ulong3   __x) { return simd_uint(simd_int(__x)); }
1959static simd_uint4  SIMD_CFUNC simd_uint(simd_ulong4   __x) { return simd_uint(simd_int(__x)); }
1960static simd_uint8  SIMD_CFUNC simd_uint(simd_ulong8   __x) { return simd_uint(simd_int(__x)); }
1961static simd_uint2  SIMD_CFUNC simd_uint(simd_double2  __x) { simd_long2 __big = __x > 0x1.fffffffcp30; return simd_uint(simd_int(__x - simd_bitselect((simd_double2)0,0x1.0p31,__big))) + simd_bitselect((simd_uint2)0,0x80000000,simd_int(__big)); }
1962static simd_uint3  SIMD_CFUNC simd_uint(simd_double3  __x) { simd_long3 __big = __x > 0x1.fffffffcp30; return simd_uint(simd_int(__x - simd_bitselect((simd_double3)0,0x1.0p31,__big))) + simd_bitselect((simd_uint3)0,0x80000000,simd_int(__big)); }
1963static simd_uint4  SIMD_CFUNC simd_uint(simd_double4  __x) { simd_long4 __big = __x > 0x1.fffffffcp30; return simd_uint(simd_int(__x - simd_bitselect((simd_double4)0,0x1.0p31,__big))) + simd_bitselect((simd_uint4)0,0x80000000,simd_int(__big)); }
1964static simd_uint8  SIMD_CFUNC simd_uint(simd_double8  __x) { simd_long8 __big = __x > 0x1.fffffffcp30; return simd_uint(simd_int(__x - simd_bitselect((simd_double8)0,0x1.0p31,__big))) + simd_bitselect((simd_uint8)0,0x80000000,simd_int(__big)); }
1965    
1966static simd_uint2  SIMD_CFUNC simd_uint_sat(simd_char2    __x) { return simd_uint(simd_max(__x,0)); }
1967static simd_uint3  SIMD_CFUNC simd_uint_sat(simd_char3    __x) { return simd_uint(simd_max(__x,0)); }
1968static simd_uint4  SIMD_CFUNC simd_uint_sat(simd_char4    __x) { return simd_uint(simd_max(__x,0)); }
1969static simd_uint8  SIMD_CFUNC simd_uint_sat(simd_char8    __x) { return simd_uint(simd_max(__x,0)); }
1970static simd_uint16 SIMD_CFUNC simd_uint_sat(simd_char16   __x) { return simd_uint(simd_max(__x,0)); }
1971static simd_uint2  SIMD_CFUNC simd_uint_sat(simd_short2   __x) { return simd_uint(simd_max(__x,0)); }
1972static simd_uint3  SIMD_CFUNC simd_uint_sat(simd_short3   __x) { return simd_uint(simd_max(__x,0)); }
1973static simd_uint4  SIMD_CFUNC simd_uint_sat(simd_short4   __x) { return simd_uint(simd_max(__x,0)); }
1974static simd_uint8  SIMD_CFUNC simd_uint_sat(simd_short8   __x) { return simd_uint(simd_max(__x,0)); }
1975static simd_uint16 SIMD_CFUNC simd_uint_sat(simd_short16  __x) { return simd_uint(simd_max(__x,0)); }
1976static simd_uint2  SIMD_CFUNC simd_uint_sat(simd_half2    __x) { return simd_uint(simd_max(__x,0)); }
1977static simd_uint3  SIMD_CFUNC simd_uint_sat(simd_half3    __x) { return simd_uint(simd_max(__x,0)); }
1978static simd_uint4  SIMD_CFUNC simd_uint_sat(simd_half4    __x) { return simd_uint(simd_max(__x,0)); }
1979static simd_uint8  SIMD_CFUNC simd_uint_sat(simd_half8    __x) { return simd_uint(simd_max(__x,0)); }
1980static simd_uint16 SIMD_CFUNC simd_uint_sat(simd_half16   __x) { return simd_uint(simd_max(__x,0)); }
1981static simd_uint2  SIMD_CFUNC simd_uint_sat(simd_int2     __x) { return simd_uint(simd_max(__x,0)); }
1982static simd_uint3  SIMD_CFUNC simd_uint_sat(simd_int3     __x) { return simd_uint(simd_max(__x,0)); }
1983static simd_uint4  SIMD_CFUNC simd_uint_sat(simd_int4     __x) { return simd_uint(simd_max(__x,0)); }
1984static simd_uint8  SIMD_CFUNC simd_uint_sat(simd_int8     __x) { return simd_uint(simd_max(__x,0)); }
1985static simd_uint16 SIMD_CFUNC simd_uint_sat(simd_int16    __x) { return simd_uint(simd_max(__x,0)); }
1986static simd_uint2  SIMD_CFUNC simd_uint_sat(simd_float2   __x) { return simd_bitselect(simd_uint(simd_max(__x,0)), 0xffffffff, __x >= 0x1.0p32f); }
1987static simd_uint3  SIMD_CFUNC simd_uint_sat(simd_float3   __x) { return simd_bitselect(simd_uint(simd_max(__x,0)), 0xffffffff, __x >= 0x1.0p32f); }
1988static simd_uint4  SIMD_CFUNC simd_uint_sat(simd_float4   __x) { return simd_bitselect(simd_uint(simd_max(__x,0)), 0xffffffff, __x >= 0x1.0p32f); }
1989static simd_uint8  SIMD_CFUNC simd_uint_sat(simd_float8   __x) { return simd_bitselect(simd_uint(simd_max(__x,0)), 0xffffffff, __x >= 0x1.0p32f); }
1990static simd_uint16 SIMD_CFUNC simd_uint_sat(simd_float16  __x) { return simd_bitselect(simd_uint(simd_max(__x,0)), 0xffffffff, __x >= 0x1.0p32f); }
1991static simd_uint2  SIMD_CFUNC simd_uint_sat(simd_long2    __x) { return simd_uint(simd_clamp(__x,0,0xffffffff)); }
1992static simd_uint3  SIMD_CFUNC simd_uint_sat(simd_long3    __x) { return simd_uint(simd_clamp(__x,0,0xffffffff)); }
1993static simd_uint4  SIMD_CFUNC simd_uint_sat(simd_long4    __x) { return simd_uint(simd_clamp(__x,0,0xffffffff)); }
1994static simd_uint8  SIMD_CFUNC simd_uint_sat(simd_long8    __x) { return simd_uint(simd_clamp(__x,0,0xffffffff)); }
1995static simd_uint2  SIMD_CFUNC simd_uint_sat(simd_double2  __x) { return simd_uint(simd_clamp(__x,0,0xffffffff)); }
1996static simd_uint3  SIMD_CFUNC simd_uint_sat(simd_double3  __x) { return simd_uint(simd_clamp(__x,0,0xffffffff)); }
1997static simd_uint4  SIMD_CFUNC simd_uint_sat(simd_double4  __x) { return simd_uint(simd_clamp(__x,0,0xffffffff)); }
1998static simd_uint8  SIMD_CFUNC simd_uint_sat(simd_double8  __x) { return simd_uint(simd_clamp(__x,0,0xffffffff)); }
1999static simd_uint2  SIMD_CFUNC simd_uint_sat(simd_uchar2   __x) { return simd_uint(__x); }
2000static simd_uint3  SIMD_CFUNC simd_uint_sat(simd_uchar3   __x) { return simd_uint(__x); }
2001static simd_uint4  SIMD_CFUNC simd_uint_sat(simd_uchar4   __x) { return simd_uint(__x); }
2002static simd_uint8  SIMD_CFUNC simd_uint_sat(simd_uchar8   __x) { return simd_uint(__x); }
2003static simd_uint16 SIMD_CFUNC simd_uint_sat(simd_uchar16  __x) { return simd_uint(__x); }
2004static simd_uint2  SIMD_CFUNC simd_uint_sat(simd_ushort2  __x) { return simd_uint(__x); }
2005static simd_uint3  SIMD_CFUNC simd_uint_sat(simd_ushort3  __x) { return simd_uint(__x); }
2006static simd_uint4  SIMD_CFUNC simd_uint_sat(simd_ushort4  __x) { return simd_uint(__x); }
2007static simd_uint8  SIMD_CFUNC simd_uint_sat(simd_ushort8  __x) { return simd_uint(__x); }
2008static simd_uint16 SIMD_CFUNC simd_uint_sat(simd_ushort16 __x) { return simd_uint(__x); }
2009static simd_uint2  SIMD_CFUNC simd_uint_sat(simd_uint2    __x) { return __x; }
2010static simd_uint3  SIMD_CFUNC simd_uint_sat(simd_uint3    __x) { return __x; }
2011static simd_uint4  SIMD_CFUNC simd_uint_sat(simd_uint4    __x) { return __x; }
2012static simd_uint8  SIMD_CFUNC simd_uint_sat(simd_uint8    __x) { return __x; }
2013static simd_uint16 SIMD_CFUNC simd_uint_sat(simd_uint16   __x) { return __x; }
2014static simd_uint2  SIMD_CFUNC simd_uint_sat(simd_ulong2   __x) { return simd_uint(simd_clamp(__x,0,0xffffffff)); }
2015static simd_uint3  SIMD_CFUNC simd_uint_sat(simd_ulong3   __x) { return simd_uint(simd_clamp(__x,0,0xffffffff)); }
2016static simd_uint4  SIMD_CFUNC simd_uint_sat(simd_ulong4   __x) { return simd_uint(simd_clamp(__x,0,0xffffffff)); }
2017static simd_uint8  SIMD_CFUNC simd_uint_sat(simd_ulong8   __x) { return simd_uint(simd_clamp(__x,0,0xffffffff)); }
2018    
2019static simd_uint2  SIMD_CFUNC simd_uint_rte(simd_float2   __x) {
2020#if defined __arm64__
2021  return vcvtn_u32_f32(__x);
2022#else
2023  return simd_make_uint2(simd_uint_rte(simd_make_float4_undef(__x)));
2024#endif
2025}
2026
2027static simd_uint3  SIMD_CFUNC simd_uint_rte(simd_float3   __x) {
2028  return simd_make_uint3(simd_uint_rte(simd_make_float4_undef(__x)));
2029}
2030
2031static simd_uint4  SIMD_CFUNC simd_uint_rte(simd_float4   __x) {
2032#if defined __AVX512F__
2033  return _mm_cvtps_epu32(__x);
2034#elif defined __arm64__
2035  return vcvtnq_u32_f32(__x);
2036#else
2037  simd_float4 magic = __tg_copysign(0x1.0p23, __x);
2038  simd_int4 x_is_small = __tg_fabs(__x) < 0x1.0p23;
2039  return __builtin_convertvector(simd_bitselect(__x, (__x + magic) - magic, x_is_small & 0x7fffffff), simd_uint4);
2040#endif
2041}
2042
2043static simd_uint8  SIMD_CFUNC simd_uint_rte(simd_float8   __x) {
2044#if defined __AVX512F__
2045  return _mm256_cvtps_epu32(__x);
2046#else
2047  return simd_make_uint8(simd_uint_rte(__x.lo), simd_uint_rte(__x.hi));
2048#endif
2049}
2050
2051static simd_uint16 SIMD_CFUNC simd_uint_rte(simd_float16  __x) {
2052#if defined __AVX512F__
2053  return _mm512_cvtps_epu32(__x);
2054#else
2055  return simd_make_uint16(simd_uint_rte(__x.lo), simd_uint_rte(__x.hi));
2056#endif
2057}
2058
2059static simd_float2  SIMD_CFUNC simd_float(simd_char2    __x) { return (simd_float2)(simd_int(__x) + 0x4b400000) - 0x1.8p23f; }
2060static simd_float3  SIMD_CFUNC simd_float(simd_char3    __x) { return (simd_float3)(simd_int(__x) + 0x4b400000) - 0x1.8p23f; }
2061static simd_float4  SIMD_CFUNC simd_float(simd_char4    __x) { return (simd_float4)(simd_int(__x) + 0x4b400000) - 0x1.8p23f; }
2062static simd_float8  SIMD_CFUNC simd_float(simd_char8    __x) { return (simd_float8)(simd_int(__x) + 0x4b400000) - 0x1.8p23f; }
2063static simd_float16 SIMD_CFUNC simd_float(simd_char16   __x) { return (simd_float16)(simd_int(__x) + 0x4b400000) - 0x1.8p23f; }
2064static simd_float2  SIMD_CFUNC simd_float(simd_uchar2   __x) { return (simd_float2)(simd_int(__x) + 0x4b400000) - 0x1.8p23f; }
2065static simd_float3  SIMD_CFUNC simd_float(simd_uchar3   __x) { return (simd_float3)(simd_int(__x) + 0x4b400000) - 0x1.8p23f; }
2066static simd_float4  SIMD_CFUNC simd_float(simd_uchar4   __x) { return (simd_float4)(simd_int(__x) + 0x4b400000) - 0x1.8p23f; }
2067static simd_float8  SIMD_CFUNC simd_float(simd_uchar8   __x) { return (simd_float8)(simd_int(__x) + 0x4b400000) - 0x1.8p23f; }
2068static simd_float16 SIMD_CFUNC simd_float(simd_uchar16  __x) { return (simd_float16)(simd_int(__x) + 0x4b400000) - 0x1.8p23f; }
2069static simd_float2  SIMD_CFUNC simd_float(simd_short2   __x) { return (simd_float2)(simd_int(__x) + 0x4b400000) - 0x1.8p23f; }
2070static simd_float3  SIMD_CFUNC simd_float(simd_short3   __x) { return (simd_float3)(simd_int(__x) + 0x4b400000) - 0x1.8p23f; }
2071static simd_float4  SIMD_CFUNC simd_float(simd_short4   __x) { return (simd_float4)(simd_int(__x) + 0x4b400000) - 0x1.8p23f; }
2072static simd_float8  SIMD_CFUNC simd_float(simd_short8   __x) { return (simd_float8)(simd_int(__x) + 0x4b400000) - 0x1.8p23f; }
2073static simd_float16 SIMD_CFUNC simd_float(simd_short16  __x) { return (simd_float16)(simd_int(__x) + 0x4b400000) - 0x1.8p23f; }
2074static simd_float2  SIMD_CFUNC simd_float(simd_ushort2  __x) { return (simd_float2)(simd_int(__x) + 0x4b400000) - 0x1.8p23f; }
2075static simd_float3  SIMD_CFUNC simd_float(simd_ushort3  __x) { return (simd_float3)(simd_int(__x) + 0x4b400000) - 0x1.8p23f; }
2076static simd_float4  SIMD_CFUNC simd_float(simd_ushort4  __x) { return (simd_float4)(simd_int(__x) + 0x4b400000) - 0x1.8p23f; }
2077static simd_float8  SIMD_CFUNC simd_float(simd_ushort8  __x) { return (simd_float8)(simd_int(__x) + 0x4b400000) - 0x1.8p23f; }
2078static simd_float16 SIMD_CFUNC simd_float(simd_ushort16 __x) { return (simd_float16)(simd_int(__x) + 0x4b400000) - 0x1.8p23f; }
2079static simd_float2  SIMD_CFUNC simd_float(simd_half2    __x) { return __builtin_convertvector(__x,simd_float2); }
2080static simd_float3  SIMD_CFUNC simd_float(simd_half3    __x) { return __builtin_convertvector(__x,simd_float3); }
2081static simd_float4  SIMD_CFUNC simd_float(simd_half4    __x) { return __builtin_convertvector(__x,simd_float4); }
2082static simd_float8  SIMD_CFUNC simd_float(simd_half8    __x) { return __builtin_convertvector(__x,simd_float8); }
2083static simd_float16 SIMD_CFUNC simd_float(simd_half16   __x) { return __builtin_convertvector(__x,simd_float16); }
2084static simd_float2  SIMD_CFUNC simd_float(simd_int2     __x) { return __builtin_convertvector(__x,simd_float2); }
2085static simd_float3  SIMD_CFUNC simd_float(simd_int3     __x) { return __builtin_convertvector(__x,simd_float3); }
2086static simd_float4  SIMD_CFUNC simd_float(simd_int4     __x) { return __builtin_convertvector(__x,simd_float4); }
2087static simd_float8  SIMD_CFUNC simd_float(simd_int8     __x) { return __builtin_convertvector(__x,simd_float8); }
2088static simd_float16 SIMD_CFUNC simd_float(simd_int16    __x) { return __builtin_convertvector(__x,simd_float16); }
2089static simd_float2  SIMD_CFUNC simd_float(simd_uint2    __x) { return __builtin_convertvector(__x,simd_float2); }
2090static simd_float3  SIMD_CFUNC simd_float(simd_uint3    __x) { return __builtin_convertvector(__x,simd_float3); }
2091static simd_float4  SIMD_CFUNC simd_float(simd_uint4    __x) { return __builtin_convertvector(__x,simd_float4); }
2092static simd_float8  SIMD_CFUNC simd_float(simd_uint8    __x) { return __builtin_convertvector(__x,simd_float8); }
2093static simd_float16 SIMD_CFUNC simd_float(simd_uint16   __x) { return __builtin_convertvector(__x,simd_float16); }
2094static simd_float2  SIMD_CFUNC simd_float(simd_float2   __x) { return __x; }
2095static simd_float3  SIMD_CFUNC simd_float(simd_float3   __x) { return __x; }
2096static simd_float4  SIMD_CFUNC simd_float(simd_float4   __x) { return __x; }
2097static simd_float8  SIMD_CFUNC simd_float(simd_float8   __x) { return __x; }
2098static simd_float16 SIMD_CFUNC simd_float(simd_float16  __x) { return __x; }
2099static simd_float2  SIMD_CFUNC simd_float(simd_long2    __x) { return __builtin_convertvector(__x,simd_float2); }
2100static simd_float3  SIMD_CFUNC simd_float(simd_long3    __x) { return __builtin_convertvector(__x,simd_float3); }
2101static simd_float4  SIMD_CFUNC simd_float(simd_long4    __x) { return __builtin_convertvector(__x,simd_float4); }
2102static simd_float8  SIMD_CFUNC simd_float(simd_long8    __x) { return __builtin_convertvector(__x,simd_float8); }
2103static simd_float2  SIMD_CFUNC simd_float(simd_ulong2   __x) { return __builtin_convertvector(__x,simd_float2); }
2104static simd_float3  SIMD_CFUNC simd_float(simd_ulong3   __x) { return __builtin_convertvector(__x,simd_float3); }
2105static simd_float4  SIMD_CFUNC simd_float(simd_ulong4   __x) { return __builtin_convertvector(__x,simd_float4); }
2106static simd_float8  SIMD_CFUNC simd_float(simd_ulong8   __x) { return __builtin_convertvector(__x,simd_float8); }
2107static simd_float2  SIMD_CFUNC simd_float(simd_double2  __x) { return __builtin_convertvector(__x,simd_float2); }
2108static simd_float3  SIMD_CFUNC simd_float(simd_double3  __x) { return __builtin_convertvector(__x,simd_float3); }
2109static simd_float4  SIMD_CFUNC simd_float(simd_double4  __x) { return __builtin_convertvector(__x,simd_float4); }
2110static simd_float8  SIMD_CFUNC simd_float(simd_double8  __x) { return __builtin_convertvector(__x,simd_float8); }
2111    
2112
2113static simd_long2  SIMD_CFUNC simd_long(simd_char2    __x) { return __builtin_convertvector(__x,simd_long2); }
2114static simd_long3  SIMD_CFUNC simd_long(simd_char3    __x) { return __builtin_convertvector(__x,simd_long3); }
2115static simd_long4  SIMD_CFUNC simd_long(simd_char4    __x) { return __builtin_convertvector(__x,simd_long4); }
2116static simd_long8  SIMD_CFUNC simd_long(simd_char8    __x) { return __builtin_convertvector(__x,simd_long8); }
2117static simd_long2  SIMD_CFUNC simd_long(simd_uchar2   __x) { return __builtin_convertvector(__x,simd_long2); }
2118static simd_long3  SIMD_CFUNC simd_long(simd_uchar3   __x) { return __builtin_convertvector(__x,simd_long3); }
2119static simd_long4  SIMD_CFUNC simd_long(simd_uchar4   __x) { return __builtin_convertvector(__x,simd_long4); }
2120static simd_long8  SIMD_CFUNC simd_long(simd_uchar8   __x) { return __builtin_convertvector(__x,simd_long8); }
2121static simd_long2  SIMD_CFUNC simd_long(simd_short2   __x) { return __builtin_convertvector(__x,simd_long2); }
2122static simd_long3  SIMD_CFUNC simd_long(simd_short3   __x) { return __builtin_convertvector(__x,simd_long3); }
2123static simd_long4  SIMD_CFUNC simd_long(simd_short4   __x) { return __builtin_convertvector(__x,simd_long4); }
2124static simd_long8  SIMD_CFUNC simd_long(simd_short8   __x) { return __builtin_convertvector(__x,simd_long8); }
2125static simd_long2  SIMD_CFUNC simd_long(simd_ushort2  __x) { return __builtin_convertvector(__x,simd_long2); }
2126static simd_long3  SIMD_CFUNC simd_long(simd_ushort3  __x) { return __builtin_convertvector(__x,simd_long3); }
2127static simd_long4  SIMD_CFUNC simd_long(simd_ushort4  __x) { return __builtin_convertvector(__x,simd_long4); }
2128static simd_long8  SIMD_CFUNC simd_long(simd_ushort8  __x) { return __builtin_convertvector(__x,simd_long8); }
2129static simd_long2  SIMD_CFUNC simd_long(simd_half2    __x) { return __builtin_convertvector(__x,simd_long2); }
2130static simd_long3  SIMD_CFUNC simd_long(simd_half3    __x) { return __builtin_convertvector(__x,simd_long3); }
2131static simd_long4  SIMD_CFUNC simd_long(simd_half4    __x) { return __builtin_convertvector(__x,simd_long4); }
2132static simd_long8  SIMD_CFUNC simd_long(simd_half8    __x) { return __builtin_convertvector(__x,simd_long8); }
2133static simd_long2  SIMD_CFUNC simd_long(simd_int2     __x) { return __builtin_convertvector(__x,simd_long2); }
2134static simd_long3  SIMD_CFUNC simd_long(simd_int3     __x) { return __builtin_convertvector(__x,simd_long3); }
2135static simd_long4  SIMD_CFUNC simd_long(simd_int4     __x) { return __builtin_convertvector(__x,simd_long4); }
2136static simd_long8  SIMD_CFUNC simd_long(simd_int8     __x) { return __builtin_convertvector(__x,simd_long8); }
2137static simd_long2  SIMD_CFUNC simd_long(simd_uint2    __x) { return __builtin_convertvector(__x,simd_long2); }
2138static simd_long3  SIMD_CFUNC simd_long(simd_uint3    __x) { return __builtin_convertvector(__x,simd_long3); }
2139static simd_long4  SIMD_CFUNC simd_long(simd_uint4    __x) { return __builtin_convertvector(__x,simd_long4); }
2140static simd_long8  SIMD_CFUNC simd_long(simd_uint8    __x) { return __builtin_convertvector(__x,simd_long8); }
2141static simd_long2  SIMD_CFUNC simd_long(simd_float2   __x) { return __builtin_convertvector(__x,simd_long2); }
2142static simd_long3  SIMD_CFUNC simd_long(simd_float3   __x) { return __builtin_convertvector(__x,simd_long3); }
2143static simd_long4  SIMD_CFUNC simd_long(simd_float4   __x) { return __builtin_convertvector(__x,simd_long4); }
2144static simd_long8  SIMD_CFUNC simd_long(simd_float8   __x) { return __builtin_convertvector(__x,simd_long8); }
2145static simd_long2  SIMD_CFUNC simd_long(simd_long2    __x) { return __x; }
2146static simd_long3  SIMD_CFUNC simd_long(simd_long3    __x) { return __x; }
2147static simd_long4  SIMD_CFUNC simd_long(simd_long4    __x) { return __x; }
2148static simd_long8  SIMD_CFUNC simd_long(simd_long8    __x) { return __x; }
2149static simd_long2  SIMD_CFUNC simd_long(simd_ulong2   __x) { return (simd_long2)__x; }
2150static simd_long3  SIMD_CFUNC simd_long(simd_ulong3   __x) { return (simd_long3)__x; }
2151static simd_long4  SIMD_CFUNC simd_long(simd_ulong4   __x) { return (simd_long4)__x; }
2152static simd_long8  SIMD_CFUNC simd_long(simd_ulong8   __x) { return (simd_long8)__x; }
2153static simd_long2  SIMD_CFUNC simd_long(simd_double2  __x) { return __builtin_convertvector(__x,simd_long2); }
2154static simd_long3  SIMD_CFUNC simd_long(simd_double3  __x) { return __builtin_convertvector(__x,simd_long3); }
2155static simd_long4  SIMD_CFUNC simd_long(simd_double4  __x) { return __builtin_convertvector(__x,simd_long4); }
2156static simd_long8  SIMD_CFUNC simd_long(simd_double8  __x) { return __builtin_convertvector(__x,simd_long8); }
2157    
2158static simd_long2  SIMD_CFUNC simd_long_sat(simd_char2    __x) { return simd_long(__x); }
2159static simd_long3  SIMD_CFUNC simd_long_sat(simd_char3    __x) { return simd_long(__x); }
2160static simd_long4  SIMD_CFUNC simd_long_sat(simd_char4    __x) { return simd_long(__x); }
2161static simd_long8  SIMD_CFUNC simd_long_sat(simd_char8    __x) { return simd_long(__x); }
2162static simd_long2  SIMD_CFUNC simd_long_sat(simd_short2   __x) { return simd_long(__x); }
2163static simd_long3  SIMD_CFUNC simd_long_sat(simd_short3   __x) { return simd_long(__x); }
2164static simd_long4  SIMD_CFUNC simd_long_sat(simd_short4   __x) { return simd_long(__x); }
2165static simd_long8  SIMD_CFUNC simd_long_sat(simd_short8   __x) { return simd_long(__x); }
2166static simd_long2  SIMD_CFUNC simd_long_sat(simd_half2    __x) { return simd_long(__x); }
2167static simd_long3  SIMD_CFUNC simd_long_sat(simd_half3    __x) { return simd_long(__x); }
2168static simd_long4  SIMD_CFUNC simd_long_sat(simd_half4    __x) { return simd_long(__x); }
2169static simd_long8  SIMD_CFUNC simd_long_sat(simd_half8    __x) { return simd_long(__x); }
2170static simd_long2  SIMD_CFUNC simd_long_sat(simd_int2     __x) { return simd_long(__x); }
2171static simd_long3  SIMD_CFUNC simd_long_sat(simd_int3     __x) { return simd_long(__x); }
2172static simd_long4  SIMD_CFUNC simd_long_sat(simd_int4     __x) { return simd_long(__x); }
2173static simd_long8  SIMD_CFUNC simd_long_sat(simd_int8     __x) { return simd_long(__x); }
2174static simd_long2  SIMD_CFUNC simd_long_sat(simd_float2   __x) { return simd_bitselect(simd_long(simd_max(__x,-0x1.0p63f)), 0x7fffffffffffffff, simd_long(__x >= 0x1.0p63f)); }
2175static simd_long3  SIMD_CFUNC simd_long_sat(simd_float3   __x) { return simd_bitselect(simd_long(simd_max(__x,-0x1.0p63f)), 0x7fffffffffffffff, simd_long(__x >= 0x1.0p63f)); }
2176static simd_long4  SIMD_CFUNC simd_long_sat(simd_float4   __x) { return simd_bitselect(simd_long(simd_max(__x,-0x1.0p63f)), 0x7fffffffffffffff, simd_long(__x >= 0x1.0p63f)); }
2177static simd_long8  SIMD_CFUNC simd_long_sat(simd_float8   __x) { return simd_bitselect(simd_long(simd_max(__x,-0x1.0p63f)), 0x7fffffffffffffff, simd_long(__x >= 0x1.0p63f)); }
2178static simd_long2  SIMD_CFUNC simd_long_sat(simd_long2    __x) { return __x; }
2179static simd_long3  SIMD_CFUNC simd_long_sat(simd_long3    __x) { return __x; }
2180static simd_long4  SIMD_CFUNC simd_long_sat(simd_long4    __x) { return __x; }
2181static simd_long8  SIMD_CFUNC simd_long_sat(simd_long8    __x) { return __x; }
2182static simd_long2  SIMD_CFUNC simd_long_sat(simd_double2  __x) { return simd_bitselect(simd_long(simd_max(__x,-0x1.0p63)), 0x7fffffffffffffff, __x >= 0x1.0p63); }
2183static simd_long3  SIMD_CFUNC simd_long_sat(simd_double3  __x) { return simd_bitselect(simd_long(simd_max(__x,-0x1.0p63)), 0x7fffffffffffffff, __x >= 0x1.0p63); }
2184static simd_long4  SIMD_CFUNC simd_long_sat(simd_double4  __x) { return simd_bitselect(simd_long(simd_max(__x,-0x1.0p63)), 0x7fffffffffffffff, __x >= 0x1.0p63); }
2185static simd_long8  SIMD_CFUNC simd_long_sat(simd_double8  __x) { return simd_bitselect(simd_long(simd_max(__x,-0x1.0p63)), 0x7fffffffffffffff, __x >= 0x1.0p63); }
2186static simd_long2  SIMD_CFUNC simd_long_sat(simd_uchar2   __x) { return simd_long(__x); }
2187static simd_long3  SIMD_CFUNC simd_long_sat(simd_uchar3   __x) { return simd_long(__x); }
2188static simd_long4  SIMD_CFUNC simd_long_sat(simd_uchar4   __x) { return simd_long(__x); }
2189static simd_long8  SIMD_CFUNC simd_long_sat(simd_uchar8   __x) { return simd_long(__x); }
2190static simd_long2  SIMD_CFUNC simd_long_sat(simd_ushort2  __x) { return simd_long(__x); }
2191static simd_long3  SIMD_CFUNC simd_long_sat(simd_ushort3  __x) { return simd_long(__x); }
2192static simd_long4  SIMD_CFUNC simd_long_sat(simd_ushort4  __x) { return simd_long(__x); }
2193static simd_long8  SIMD_CFUNC simd_long_sat(simd_ushort8  __x) { return simd_long(__x); }
2194static simd_long2  SIMD_CFUNC simd_long_sat(simd_uint2    __x) { return simd_long(__x); }
2195static simd_long3  SIMD_CFUNC simd_long_sat(simd_uint3    __x) { return simd_long(__x); }
2196static simd_long4  SIMD_CFUNC simd_long_sat(simd_uint4    __x) { return simd_long(__x); }
2197static simd_long8  SIMD_CFUNC simd_long_sat(simd_uint8    __x) { return simd_long(__x); }
2198static simd_long2  SIMD_CFUNC simd_long_sat(simd_ulong2   __x) { return simd_long(simd_min(__x,0x7fffffffffffffff)); }
2199static simd_long3  SIMD_CFUNC simd_long_sat(simd_ulong3   __x) { return simd_long(simd_min(__x,0x7fffffffffffffff)); }
2200static simd_long4  SIMD_CFUNC simd_long_sat(simd_ulong4   __x) { return simd_long(simd_min(__x,0x7fffffffffffffff)); }
2201static simd_long8  SIMD_CFUNC simd_long_sat(simd_ulong8   __x) { return simd_long(simd_min(__x,0x7fffffffffffffff)); }
2202    
2203static simd_long2  SIMD_CFUNC simd_long_rte(simd_double2  __x) {
2204#if defined __AVX512F__
2205  return _mm_cvtpd_epi64(__x);
2206#elif defined __arm64__ || defined __aarch64__
2207  return vcvtnq_s64_f64(__x);
2208#else
2209  simd_double2 magic = __tg_copysign(0x1.0p52, __x);
2210  simd_long2 x_is_small = __tg_fabs(__x) < 0x1.0p52;
2211  return __builtin_convertvector(simd_bitselect(__x, (__x + magic) - magic, x_is_small & 0x7fffffffffffffff), simd_long2);
2212#endif
2213}
2214
2215static simd_long3  SIMD_CFUNC simd_long_rte(simd_double3  __x) {
2216  return simd_make_long3(simd_long_rte(simd_make_double4_undef(__x)));
2217}
2218
2219static simd_long4  SIMD_CFUNC simd_long_rte(simd_double4  __x) {
2220#if defined __AVX512F__
2221  return _mm256_cvtpd_epi64(__x);
2222#else
2223  return simd_make_long4(simd_long_rte(__x.lo), simd_long_rte(__x.hi));
2224#endif
2225}
2226
2227static simd_long8  SIMD_CFUNC simd_long_rte(simd_double8  __x) {
2228#if defined __AVX512F__
2229  return _mm512_cvtpd_epi64(__x);
2230#else
2231  return simd_make_long8(simd_long_rte(__x.lo), simd_long_rte(__x.hi));
2232#endif
2233}
2234
2235
2236static simd_ulong2  SIMD_CFUNC simd_ulong(simd_char2    __x) { return simd_ulong(simd_long(__x)); }
2237static simd_ulong3  SIMD_CFUNC simd_ulong(simd_char3    __x) { return simd_ulong(simd_long(__x)); }
2238static simd_ulong4  SIMD_CFUNC simd_ulong(simd_char4    __x) { return simd_ulong(simd_long(__x)); }
2239static simd_ulong8  SIMD_CFUNC simd_ulong(simd_char8    __x) { return simd_ulong(simd_long(__x)); }
2240static simd_ulong2  SIMD_CFUNC simd_ulong(simd_uchar2   __x) { return simd_ulong(simd_long(__x)); }
2241static simd_ulong3  SIMD_CFUNC simd_ulong(simd_uchar3   __x) { return simd_ulong(simd_long(__x)); }
2242static simd_ulong4  SIMD_CFUNC simd_ulong(simd_uchar4   __x) { return simd_ulong(simd_long(__x)); }
2243static simd_ulong8  SIMD_CFUNC simd_ulong(simd_uchar8   __x) { return simd_ulong(simd_long(__x)); }
2244static simd_ulong2  SIMD_CFUNC simd_ulong(simd_short2   __x) { return simd_ulong(simd_long(__x)); }
2245static simd_ulong3  SIMD_CFUNC simd_ulong(simd_short3   __x) { return simd_ulong(simd_long(__x)); }
2246static simd_ulong4  SIMD_CFUNC simd_ulong(simd_short4   __x) { return simd_ulong(simd_long(__x)); }
2247static simd_ulong8  SIMD_CFUNC simd_ulong(simd_short8   __x) { return simd_ulong(simd_long(__x)); }
2248static simd_ulong2  SIMD_CFUNC simd_ulong(simd_ushort2  __x) { return simd_ulong(simd_long(__x)); }
2249static simd_ulong3  SIMD_CFUNC simd_ulong(simd_ushort3  __x) { return simd_ulong(simd_long(__x)); }
2250static simd_ulong4  SIMD_CFUNC simd_ulong(simd_ushort4  __x) { return simd_ulong(simd_long(__x)); }
2251static simd_ulong8  SIMD_CFUNC simd_ulong(simd_ushort8  __x) { return simd_ulong(simd_long(__x)); }
2252static simd_ulong2  SIMD_CFUNC simd_ulong(simd_half2    __x) { return simd_ulong(simd_long(__x)); }
2253static simd_ulong3  SIMD_CFUNC simd_ulong(simd_half3    __x) { return simd_ulong(simd_long(__x)); }
2254static simd_ulong4  SIMD_CFUNC simd_ulong(simd_half4    __x) { return simd_ulong(simd_long(__x)); }
2255static simd_ulong8  SIMD_CFUNC simd_ulong(simd_half8    __x) { return simd_ulong(simd_long(__x)); }
2256static simd_ulong2  SIMD_CFUNC simd_ulong(simd_int2     __x) { return simd_ulong(simd_long(__x)); }
2257static simd_ulong3  SIMD_CFUNC simd_ulong(simd_int3     __x) { return simd_ulong(simd_long(__x)); }
2258static simd_ulong4  SIMD_CFUNC simd_ulong(simd_int4     __x) { return simd_ulong(simd_long(__x)); }
2259static simd_ulong8  SIMD_CFUNC simd_ulong(simd_int8     __x) { return simd_ulong(simd_long(__x)); }
2260static simd_ulong2  SIMD_CFUNC simd_ulong(simd_uint2    __x) { return simd_ulong(simd_long(__x)); }
2261static simd_ulong3  SIMD_CFUNC simd_ulong(simd_uint3    __x) { return simd_ulong(simd_long(__x)); }
2262static simd_ulong4  SIMD_CFUNC simd_ulong(simd_uint4    __x) { return simd_ulong(simd_long(__x)); }
2263static simd_ulong8  SIMD_CFUNC simd_ulong(simd_uint8    __x) { return simd_ulong(simd_long(__x)); }
2264static simd_ulong2  SIMD_CFUNC simd_ulong(simd_float2   __x) { simd_int2 __big = __x >= 0x1.0p63f; return simd_ulong(simd_long(__x - simd_bitselect((simd_float2)0,0x1.0p63f,__big))) + simd_bitselect((simd_ulong2)0,0x8000000000000000,simd_long(__big)); }
2265static simd_ulong3  SIMD_CFUNC simd_ulong(simd_float3   __x) { simd_int3 __big = __x >= 0x1.0p63f; return simd_ulong(simd_long(__x - simd_bitselect((simd_float3)0,0x1.0p63f,__big))) + simd_bitselect((simd_ulong3)0,0x8000000000000000,simd_long(__big)); }
2266static simd_ulong4  SIMD_CFUNC simd_ulong(simd_float4   __x) { simd_int4 __big = __x >= 0x1.0p63f; return simd_ulong(simd_long(__x - simd_bitselect((simd_float4)0,0x1.0p63f,__big))) + simd_bitselect((simd_ulong4)0,0x8000000000000000,simd_long(__big)); }
2267static simd_ulong8  SIMD_CFUNC simd_ulong(simd_float8   __x) { simd_int8 __big = __x >= 0x1.0p63f; return simd_ulong(simd_long(__x - simd_bitselect((simd_float8)0,0x1.0p63f,__big))) + simd_bitselect((simd_ulong8)0,0x8000000000000000,simd_long(__big)); }
2268static simd_ulong2  SIMD_CFUNC simd_ulong(simd_long2    __x) { return (simd_ulong2)__x; }
2269static simd_ulong3  SIMD_CFUNC simd_ulong(simd_long3    __x) { return (simd_ulong3)__x; }
2270static simd_ulong4  SIMD_CFUNC simd_ulong(simd_long4    __x) { return (simd_ulong4)__x; }
2271static simd_ulong8  SIMD_CFUNC simd_ulong(simd_long8    __x) { return (simd_ulong8)__x; }
2272static simd_ulong2  SIMD_CFUNC simd_ulong(simd_ulong2   __x) { return __x; }
2273static simd_ulong3  SIMD_CFUNC simd_ulong(simd_ulong3   __x) { return __x; }
2274static simd_ulong4  SIMD_CFUNC simd_ulong(simd_ulong4   __x) { return __x; }
2275static simd_ulong8  SIMD_CFUNC simd_ulong(simd_ulong8   __x) { return __x; }
2276static simd_ulong2  SIMD_CFUNC simd_ulong(simd_double2  __x) { simd_long2 __big = __x >= 0x1.0p63; return simd_ulong(simd_long(__x - simd_bitselect((simd_double2)0,0x1.0p63,__big))) + simd_bitselect((simd_ulong2)0,0x8000000000000000,__big); }
2277static simd_ulong3  SIMD_CFUNC simd_ulong(simd_double3  __x) { simd_long3 __big = __x >= 0x1.0p63; return simd_ulong(simd_long(__x - simd_bitselect((simd_double3)0,0x1.0p63,__big))) + simd_bitselect((simd_ulong3)0,0x8000000000000000,__big); }
2278static simd_ulong4  SIMD_CFUNC simd_ulong(simd_double4  __x) { simd_long4 __big = __x >= 0x1.0p63; return simd_ulong(simd_long(__x - simd_bitselect((simd_double4)0,0x1.0p63,__big))) + simd_bitselect((simd_ulong4)0,0x8000000000000000,__big); }
2279static simd_ulong8  SIMD_CFUNC simd_ulong(simd_double8  __x) { simd_long8 __big = __x >= 0x1.0p63; return simd_ulong(simd_long(__x - simd_bitselect((simd_double8)0,0x1.0p63,__big))) + simd_bitselect((simd_ulong8)0,0x8000000000000000,__big); }
2280    
2281static simd_ulong2  SIMD_CFUNC simd_ulong_sat(simd_char2    __x) { return simd_ulong(simd_max(__x,0)); }
2282static simd_ulong3  SIMD_CFUNC simd_ulong_sat(simd_char3    __x) { return simd_ulong(simd_max(__x,0)); }
2283static simd_ulong4  SIMD_CFUNC simd_ulong_sat(simd_char4    __x) { return simd_ulong(simd_max(__x,0)); }
2284static simd_ulong8  SIMD_CFUNC simd_ulong_sat(simd_char8    __x) { return simd_ulong(simd_max(__x,0)); }
2285static simd_ulong2  SIMD_CFUNC simd_ulong_sat(simd_short2   __x) { return simd_ulong(simd_max(__x,0)); }
2286static simd_ulong3  SIMD_CFUNC simd_ulong_sat(simd_short3   __x) { return simd_ulong(simd_max(__x,0)); }
2287static simd_ulong4  SIMD_CFUNC simd_ulong_sat(simd_short4   __x) { return simd_ulong(simd_max(__x,0)); }
2288static simd_ulong8  SIMD_CFUNC simd_ulong_sat(simd_short8   __x) { return simd_ulong(simd_max(__x,0)); }
2289static simd_ulong2  SIMD_CFUNC simd_ulong_sat(simd_half2    __x) { return simd_ulong(simd_max(__x,0)); }
2290static simd_ulong3  SIMD_CFUNC simd_ulong_sat(simd_half3    __x) { return simd_ulong(simd_max(__x,0)); }
2291static simd_ulong4  SIMD_CFUNC simd_ulong_sat(simd_half4    __x) { return simd_ulong(simd_max(__x,0)); }
2292static simd_ulong8  SIMD_CFUNC simd_ulong_sat(simd_half8    __x) { return simd_ulong(simd_max(__x,0)); }
2293static simd_ulong2  SIMD_CFUNC simd_ulong_sat(simd_int2     __x) { return simd_ulong(simd_max(__x,0)); }
2294static simd_ulong3  SIMD_CFUNC simd_ulong_sat(simd_int3     __x) { return simd_ulong(simd_max(__x,0)); }
2295static simd_ulong4  SIMD_CFUNC simd_ulong_sat(simd_int4     __x) { return simd_ulong(simd_max(__x,0)); }
2296static simd_ulong8  SIMD_CFUNC simd_ulong_sat(simd_int8     __x) { return simd_ulong(simd_max(__x,0)); }
2297static simd_ulong2  SIMD_CFUNC simd_ulong_sat(simd_float2   __x) { return simd_bitselect(simd_ulong(simd_max(__x,0.f)), 0xffffffffffffffff, simd_long(__x >= 0x1.0p64f)); }
2298static simd_ulong3  SIMD_CFUNC simd_ulong_sat(simd_float3   __x) { return simd_bitselect(simd_ulong(simd_max(__x,0.f)), 0xffffffffffffffff, simd_long(__x >= 0x1.0p64f)); }
2299static simd_ulong4  SIMD_CFUNC simd_ulong_sat(simd_float4   __x) { return simd_bitselect(simd_ulong(simd_max(__x,0.f)), 0xffffffffffffffff, simd_long(__x >= 0x1.0p64f)); }
2300static simd_ulong8  SIMD_CFUNC simd_ulong_sat(simd_float8   __x) { return simd_bitselect(simd_ulong(simd_max(__x,0.f)), 0xffffffffffffffff, simd_long(__x >= 0x1.0p64f)); }
2301static simd_ulong2  SIMD_CFUNC simd_ulong_sat(simd_long2    __x) { return simd_ulong(simd_max(__x,0)); }
2302static simd_ulong3  SIMD_CFUNC simd_ulong_sat(simd_long3    __x) { return simd_ulong(simd_max(__x,0)); }
2303static simd_ulong4  SIMD_CFUNC simd_ulong_sat(simd_long4    __x) { return simd_ulong(simd_max(__x,0)); }
2304static simd_ulong8  SIMD_CFUNC simd_ulong_sat(simd_long8    __x) { return simd_ulong(simd_max(__x,0)); }
2305static simd_ulong2  SIMD_CFUNC simd_ulong_sat(simd_double2  __x) { return simd_bitselect(simd_ulong(simd_max(__x,0.0)), 0xffffffffffffffff, __x >= 0x1.0p64); }
2306static simd_ulong3  SIMD_CFUNC simd_ulong_sat(simd_double3  __x) { return simd_bitselect(simd_ulong(simd_max(__x,0.0)), 0xffffffffffffffff, __x >= 0x1.0p64); }
2307static simd_ulong4  SIMD_CFUNC simd_ulong_sat(simd_double4  __x) { return simd_bitselect(simd_ulong(simd_max(__x,0.0)), 0xffffffffffffffff, __x >= 0x1.0p64); }
2308static simd_ulong8  SIMD_CFUNC simd_ulong_sat(simd_double8  __x) { return simd_bitselect(simd_ulong(simd_max(__x,0.0)), 0xffffffffffffffff, __x >= 0x1.0p64); }
2309static simd_ulong2  SIMD_CFUNC simd_ulong_sat(simd_uchar2   __x) { return simd_ulong(__x); }
2310static simd_ulong3  SIMD_CFUNC simd_ulong_sat(simd_uchar3   __x) { return simd_ulong(__x); }
2311static simd_ulong4  SIMD_CFUNC simd_ulong_sat(simd_uchar4   __x) { return simd_ulong(__x); }
2312static simd_ulong8  SIMD_CFUNC simd_ulong_sat(simd_uchar8   __x) { return simd_ulong(__x); }
2313static simd_ulong2  SIMD_CFUNC simd_ulong_sat(simd_ushort2  __x) { return simd_ulong(__x); }
2314static simd_ulong3  SIMD_CFUNC simd_ulong_sat(simd_ushort3  __x) { return simd_ulong(__x); }
2315static simd_ulong4  SIMD_CFUNC simd_ulong_sat(simd_ushort4  __x) { return simd_ulong(__x); }
2316static simd_ulong8  SIMD_CFUNC simd_ulong_sat(simd_ushort8  __x) { return simd_ulong(__x); }
2317static simd_ulong2  SIMD_CFUNC simd_ulong_sat(simd_uint2    __x) { return simd_ulong(__x); }
2318static simd_ulong3  SIMD_CFUNC simd_ulong_sat(simd_uint3    __x) { return simd_ulong(__x); }
2319static simd_ulong4  SIMD_CFUNC simd_ulong_sat(simd_uint4    __x) { return simd_ulong(__x); }
2320static simd_ulong8  SIMD_CFUNC simd_ulong_sat(simd_uint8    __x) { return simd_ulong(__x); }
2321static simd_ulong2  SIMD_CFUNC simd_ulong_sat(simd_ulong2   __x) { return __x; }
2322static simd_ulong3  SIMD_CFUNC simd_ulong_sat(simd_ulong3   __x) { return __x; }
2323static simd_ulong4  SIMD_CFUNC simd_ulong_sat(simd_ulong4   __x) { return __x; }
2324static simd_ulong8  SIMD_CFUNC simd_ulong_sat(simd_ulong8   __x) { return __x; }
2325    
2326static simd_ulong2  SIMD_CFUNC simd_ulong_rte(simd_double2  __x) {
2327#if defined __AVX512F__
2328  return _mm_cvtpd_epu64(__x);
2329#elif defined __arm64__
2330  return vcvtnq_u64_f64(__x);
2331#else
2332  simd_double2 magic = __tg_copysign(0x1.0p52, __x);
2333  simd_long2 x_is_small = __tg_fabs(__x) < 0x1.0p52;
2334  return __builtin_convertvector(simd_bitselect(__x, (__x + magic) - magic, x_is_small & 0x7fffffffffffffff), simd_ulong2);
2335#endif
2336}
2337
2338static simd_ulong3  SIMD_CFUNC simd_ulong_rte(simd_double3  __x) {
2339  return simd_make_ulong3(simd_ulong_rte(simd_make_double4_undef(__x)));
2340}
2341
2342static simd_ulong4  SIMD_CFUNC simd_ulong_rte(simd_double4  __x) {
2343#if defined __AVX512F__
2344  return _mm256_cvtpd_epu64(__x);
2345#else
2346  return simd_make_ulong4(simd_ulong_rte(__x.lo), simd_ulong_rte(__x.hi));
2347#endif
2348}
2349
2350static simd_ulong8  SIMD_CFUNC simd_ulong_rte(simd_double8  __x) {
2351#if defined __AVX512F__
2352  return _mm512_cvtpd_epu64(__x);
2353#else
2354  return simd_make_ulong8(simd_ulong_rte(__x.lo), simd_ulong_rte(__x.hi));
2355#endif
2356}
2357
2358static simd_double2  SIMD_CFUNC simd_double(simd_char2    __x) { return simd_double(simd_int(__x)); }
2359static simd_double3  SIMD_CFUNC simd_double(simd_char3    __x) { return simd_double(simd_int(__x)); }
2360static simd_double4  SIMD_CFUNC simd_double(simd_char4    __x) { return simd_double(simd_int(__x)); }
2361static simd_double8  SIMD_CFUNC simd_double(simd_char8    __x) { return simd_double(simd_int(__x)); }
2362static simd_double2  SIMD_CFUNC simd_double(simd_uchar2   __x) { return simd_double(simd_int(__x)); }
2363static simd_double3  SIMD_CFUNC simd_double(simd_uchar3   __x) { return simd_double(simd_int(__x)); }
2364static simd_double4  SIMD_CFUNC simd_double(simd_uchar4   __x) { return simd_double(simd_int(__x)); }
2365static simd_double8  SIMD_CFUNC simd_double(simd_uchar8   __x) { return simd_double(simd_int(__x)); }
2366static simd_double2  SIMD_CFUNC simd_double(simd_short2   __x) { return simd_double(simd_int(__x)); }
2367static simd_double3  SIMD_CFUNC simd_double(simd_short3   __x) { return simd_double(simd_int(__x)); }
2368static simd_double4  SIMD_CFUNC simd_double(simd_short4   __x) { return simd_double(simd_int(__x)); }
2369static simd_double8  SIMD_CFUNC simd_double(simd_short8   __x) { return simd_double(simd_int(__x)); }
2370static simd_double2  SIMD_CFUNC simd_double(simd_ushort2  __x) { return simd_double(simd_int(__x)); }
2371static simd_double3  SIMD_CFUNC simd_double(simd_ushort3  __x) { return simd_double(simd_int(__x)); }
2372static simd_double4  SIMD_CFUNC simd_double(simd_ushort4  __x) { return simd_double(simd_int(__x)); }
2373static simd_double8  SIMD_CFUNC simd_double(simd_ushort8  __x) { return simd_double(simd_int(__x)); }
2374static simd_double2  SIMD_CFUNC simd_double(simd_half2    __x) { return __builtin_convertvector(__x, simd_double2); }
2375static simd_double3  SIMD_CFUNC simd_double(simd_half3    __x) { return __builtin_convertvector(__x, simd_double3); }
2376static simd_double4  SIMD_CFUNC simd_double(simd_half4    __x) { return __builtin_convertvector(__x, simd_double4); }
2377static simd_double8  SIMD_CFUNC simd_double(simd_half8    __x) { return __builtin_convertvector(__x, simd_double8); }
2378static simd_double2  SIMD_CFUNC simd_double(simd_int2     __x) { return __builtin_convertvector(__x, simd_double2); }
2379static simd_double3  SIMD_CFUNC simd_double(simd_int3     __x) { return __builtin_convertvector(__x, simd_double3); }
2380static simd_double4  SIMD_CFUNC simd_double(simd_int4     __x) { return __builtin_convertvector(__x, simd_double4); }
2381static simd_double8  SIMD_CFUNC simd_double(simd_int8     __x) { return __builtin_convertvector(__x, simd_double8); }
2382static simd_double2  SIMD_CFUNC simd_double(simd_uint2    __x) { return __builtin_convertvector(__x, simd_double2); }
2383static simd_double3  SIMD_CFUNC simd_double(simd_uint3    __x) { return __builtin_convertvector(__x, simd_double3); }
2384static simd_double4  SIMD_CFUNC simd_double(simd_uint4    __x) { return __builtin_convertvector(__x, simd_double4); }
2385static simd_double8  SIMD_CFUNC simd_double(simd_uint8    __x) { return __builtin_convertvector(__x, simd_double8); }
2386static simd_double2  SIMD_CFUNC simd_double(simd_float2   __x) { return __builtin_convertvector(__x, simd_double2); }
2387static simd_double3  SIMD_CFUNC simd_double(simd_float3   __x) { return __builtin_convertvector(__x, simd_double3); }
2388static simd_double4  SIMD_CFUNC simd_double(simd_float4   __x) { return __builtin_convertvector(__x, simd_double4); }
2389static simd_double8  SIMD_CFUNC simd_double(simd_float8   __x) { return __builtin_convertvector(__x, simd_double8); }
2390static simd_double2  SIMD_CFUNC simd_double(simd_long2    __x) { return __builtin_convertvector(__x, simd_double2); }
2391static simd_double3  SIMD_CFUNC simd_double(simd_long3    __x) { return __builtin_convertvector(__x, simd_double3); }
2392static simd_double4  SIMD_CFUNC simd_double(simd_long4    __x) { return __builtin_convertvector(__x, simd_double4); }
2393static simd_double8  SIMD_CFUNC simd_double(simd_long8    __x) { return __builtin_convertvector(__x, simd_double8); }
2394static simd_double2  SIMD_CFUNC simd_double(simd_ulong2   __x) { return __builtin_convertvector(__x, simd_double2); }
2395static simd_double3  SIMD_CFUNC simd_double(simd_ulong3   __x) { return __builtin_convertvector(__x, simd_double3); }
2396static simd_double4  SIMD_CFUNC simd_double(simd_ulong4   __x) { return __builtin_convertvector(__x, simd_double4); }
2397static simd_double8  SIMD_CFUNC simd_double(simd_ulong8   __x) { return __builtin_convertvector(__x, simd_double8); }
2398static simd_double2  SIMD_CFUNC simd_double(simd_double2  __x) { return __builtin_convertvector(__x, simd_double2); }
2399static simd_double3  SIMD_CFUNC simd_double(simd_double3  __x) { return __builtin_convertvector(__x, simd_double3); }
2400static simd_double4  SIMD_CFUNC simd_double(simd_double4  __x) { return __builtin_convertvector(__x, simd_double4); }
2401static simd_double8  SIMD_CFUNC simd_double(simd_double8  __x) { return __builtin_convertvector(__x, simd_double8); }
2402    
2403
2404#ifdef __cplusplus
2405} // extern "C"
2406
2407namespace simd {
2408
2409#if __has_feature(cxx_constexpr)
2410/*! @abstract Convert a vector to another vector of the ScalarType and the same number of elements. */
2411template<typename ScalarType, typename typeN>
2412static constexpr Vector_t<ScalarType, traits<typeN>::count> convert(typeN vector)
2413{
2414    if constexpr (traits<typeN>::count == 1)
2415        return static_cast<Vector_t<ScalarType, traits<typeN>::count>>(vector);
2416    else if constexpr (std::is_same<ScalarType, char1>::value)
2417        return simd_char(vector);
2418    else if constexpr (std::is_same<ScalarType, uchar1>::value)
2419        return simd_uchar(vector);
2420    else if constexpr (std::is_same<ScalarType, short1>::value)
2421        return simd_short(vector);
2422    else if constexpr (std::is_same<ScalarType, ushort1>::value)
2423        return simd_ushort(vector);
2424    else if constexpr (std::is_same<ScalarType, int1>::value)
2425        return simd_int(vector);
2426    else if constexpr (std::is_same<ScalarType, uint1>::value)
2427        return simd_uint(vector);
2428    else if constexpr (std::is_same<ScalarType, long1>::value)
2429        return simd_long(vector);
2430    else if constexpr (std::is_same<ScalarType, ulong1>::value)
2431        return simd_ulong(vector);
2432    else if constexpr (std::is_same<ScalarType, half1>::value)
2433        return simd_half(vector);
2434    else if constexpr (std::is_same<ScalarType, float1>::value)
2435        return simd_float(vector);
2436    else if constexpr (std::is_same<ScalarType, double1>::value)
2437        return simd_double(vector);
2438}
2439
2440/*! @abstract Convert a vector to another vector of the ScalarType and the same number of elements with saturation.
2441 *  @discussion When the input value is too large to be represented in the return type, the input value
2442 *  will be saturated to the maximum value of the return type.  */
2443template<typename ScalarType, typename typeN>
2444static constexpr Vector_t<ScalarType, traits<typeN>::count> convert_sat(typeN vector)
2445{
2446    static_assert(traits<typeN>::count != 1);
2447    if constexpr (std::is_same<ScalarType, char1>::value)
2448        return simd_char_sat(vector);
2449    else if constexpr (std::is_same<ScalarType, uchar1>::value)
2450        return simd_uchar_sat(vector);
2451    else if constexpr (std::is_same<ScalarType, short1>::value)
2452        return simd_short_sat(vector);
2453    else if constexpr (std::is_same<ScalarType, ushort1>::value)
2454        return simd_ushort_sat(vector);
2455    else if constexpr (std::is_same<ScalarType, int1>::value)
2456        return simd_int_sat(vector);
2457    else if constexpr (std::is_same<ScalarType, uint1>::value)
2458        return simd_uint_sat(vector);
2459    else if constexpr (std::is_same<ScalarType, long1>::value)
2460        return simd_long_sat(vector);
2461    else if constexpr (std::is_same<ScalarType, ulong1>::value)
2462        return simd_ulong_sat(vector);
2463    else
2464        return convert<ScalarType, typeN>(vector);
2465}
2466#endif /* __has_feature(cxx_constexpr) */
2467
2468} /* namespace simd */
2469#endif // __cplusplus
2470#endif // SIMD_COMPILER_HAS_REQUIRED_FEATURES
2471#endif // __SIMD_CONVERSION_HEADER__
2472