// This file is autogenerated by gen_as.sh.
// Don't modify it manually.
union _type_cast_1_b {
  char _char;
  uchar _uchar;
};

INLINE OVERLOADABLE uchar as_uchar(char v) {
  union _type_cast_1_b u;
  u._char = v;
  return u._uchar;
}

INLINE OVERLOADABLE char as_char(uchar v) {
  union _type_cast_1_b u;
  u._uchar = v;
  return u._char;
}

union _type_cast_2_b {
  short _short;
  ushort _ushort;
  char2 _char2;
  uchar2 _uchar2;
};

INLINE OVERLOADABLE ushort as_ushort(short v) {
  union _type_cast_2_b u;
  u._short = v;
  return u._ushort;
}

INLINE OVERLOADABLE char2 as_char2(short v) {
  union _type_cast_2_b u;
  u._short = v;
  return u._char2;
}

INLINE OVERLOADABLE uchar2 as_uchar2(short v) {
  union _type_cast_2_b u;
  u._short = v;
  return u._uchar2;
}

INLINE OVERLOADABLE short as_short(ushort v) {
  union _type_cast_2_b u;
  u._ushort = v;
  return u._short;
}

INLINE OVERLOADABLE char2 as_char2(ushort v) {
  union _type_cast_2_b u;
  u._ushort = v;
  return u._char2;
}

INLINE OVERLOADABLE uchar2 as_uchar2(ushort v) {
  union _type_cast_2_b u;
  u._ushort = v;
  return u._uchar2;
}

INLINE OVERLOADABLE short as_short(char2 v) {
  union _type_cast_2_b u;
  u._char2 = v;
  return u._short;
}

INLINE OVERLOADABLE ushort as_ushort(char2 v) {
  union _type_cast_2_b u;
  u._char2 = v;
  return u._ushort;
}

INLINE OVERLOADABLE uchar2 as_uchar2(char2 v) {
  union _type_cast_2_b u;
  u._char2 = v;
  return u._uchar2;
}

INLINE OVERLOADABLE short as_short(uchar2 v) {
  union _type_cast_2_b u;
  u._uchar2 = v;
  return u._short;
}

INLINE OVERLOADABLE ushort as_ushort(uchar2 v) {
  union _type_cast_2_b u;
  u._uchar2 = v;
  return u._ushort;
}

INLINE OVERLOADABLE char2 as_char2(uchar2 v) {
  union _type_cast_2_b u;
  u._uchar2 = v;
  return u._char2;
}

union _type_cast_4_b {
  int _int;
  uint _uint;
  short2 _short2;
  ushort2 _ushort2;
  char3 _char3;
  char4 _char4;
  uchar3 _uchar3;
  uchar4 _uchar4;
  float _float;
};

INLINE OVERLOADABLE uint as_uint(int v) {
  union _type_cast_4_b u;
  u._int = v;
  return u._uint;
}

INLINE OVERLOADABLE short2 as_short2(int v) {
  union _type_cast_4_b u;
  u._int = v;
  return u._short2;
}

INLINE OVERLOADABLE ushort2 as_ushort2(int v) {
  union _type_cast_4_b u;
  u._int = v;
  return u._ushort2;
}

INLINE OVERLOADABLE char3 as_char3(int v) {
  union _type_cast_4_b u;
  u._int = v;
  return u._char3;
}

INLINE OVERLOADABLE char4 as_char4(int v) {
  union _type_cast_4_b u;
  u._int = v;
  return u._char4;
}

INLINE OVERLOADABLE uchar3 as_uchar3(int v) {
  union _type_cast_4_b u;
  u._int = v;
  return u._uchar3;
}

INLINE OVERLOADABLE uchar4 as_uchar4(int v) {
  union _type_cast_4_b u;
  u._int = v;
  return u._uchar4;
}

INLINE OVERLOADABLE float as_float(int v) {
  union _type_cast_4_b u;
  u._int = v;
  return u._float;
}

INLINE OVERLOADABLE int as_int(uint v) {
  union _type_cast_4_b u;
  u._uint = v;
  return u._int;
}

INLINE OVERLOADABLE short2 as_short2(uint v) {
  union _type_cast_4_b u;
  u._uint = v;
  return u._short2;
}

INLINE OVERLOADABLE ushort2 as_ushort2(uint v) {
  union _type_cast_4_b u;
  u._uint = v;
  return u._ushort2;
}

INLINE OVERLOADABLE char3 as_char3(uint v) {
  union _type_cast_4_b u;
  u._uint = v;
  return u._char3;
}

INLINE OVERLOADABLE char4 as_char4(uint v) {
  union _type_cast_4_b u;
  u._uint = v;
  return u._char4;
}

INLINE OVERLOADABLE uchar3 as_uchar3(uint v) {
  union _type_cast_4_b u;
  u._uint = v;
  return u._uchar3;
}

INLINE OVERLOADABLE uchar4 as_uchar4(uint v) {
  union _type_cast_4_b u;
  u._uint = v;
  return u._uchar4;
}

INLINE OVERLOADABLE float as_float(uint v) {
  union _type_cast_4_b u;
  u._uint = v;
  return u._float;
}

INLINE OVERLOADABLE int as_int(short2 v) {
  union _type_cast_4_b u;
  u._short2 = v;
  return u._int;
}

INLINE OVERLOADABLE uint as_uint(short2 v) {
  union _type_cast_4_b u;
  u._short2 = v;
  return u._uint;
}

INLINE OVERLOADABLE ushort2 as_ushort2(short2 v) {
  union _type_cast_4_b u;
  u._short2 = v;
  return u._ushort2;
}

INLINE OVERLOADABLE char3 as_char3(short2 v) {
  union _type_cast_4_b u;
  u._short2 = v;
  return u._char3;
}

INLINE OVERLOADABLE char4 as_char4(short2 v) {
  union _type_cast_4_b u;
  u._short2 = v;
  return u._char4;
}

INLINE OVERLOADABLE uchar3 as_uchar3(short2 v) {
  union _type_cast_4_b u;
  u._short2 = v;
  return u._uchar3;
}

INLINE OVERLOADABLE uchar4 as_uchar4(short2 v) {
  union _type_cast_4_b u;
  u._short2 = v;
  return u._uchar4;
}

INLINE OVERLOADABLE float as_float(short2 v) {
  union _type_cast_4_b u;
  u._short2 = v;
  return u._float;
}

INLINE OVERLOADABLE int as_int(ushort2 v) {
  union _type_cast_4_b u;
  u._ushort2 = v;
  return u._int;
}

INLINE OVERLOADABLE uint as_uint(ushort2 v) {
  union _type_cast_4_b u;
  u._ushort2 = v;
  return u._uint;
}

INLINE OVERLOADABLE short2 as_short2(ushort2 v) {
  union _type_cast_4_b u;
  u._ushort2 = v;
  return u._short2;
}

INLINE OVERLOADABLE char3 as_char3(ushort2 v) {
  union _type_cast_4_b u;
  u._ushort2 = v;
  return u._char3;
}

INLINE OVERLOADABLE char4 as_char4(ushort2 v) {
  union _type_cast_4_b u;
  u._ushort2 = v;
  return u._char4;
}

INLINE OVERLOADABLE uchar3 as_uchar3(ushort2 v) {
  union _type_cast_4_b u;
  u._ushort2 = v;
  return u._uchar3;
}

INLINE OVERLOADABLE uchar4 as_uchar4(ushort2 v) {
  union _type_cast_4_b u;
  u._ushort2 = v;
  return u._uchar4;
}

INLINE OVERLOADABLE float as_float(ushort2 v) {
  union _type_cast_4_b u;
  u._ushort2 = v;
  return u._float;
}

INLINE OVERLOADABLE int as_int(char3 v) {
  union _type_cast_4_b u;
  u._char3 = v;
  return u._int;
}

INLINE OVERLOADABLE uint as_uint(char3 v) {
  union _type_cast_4_b u;
  u._char3 = v;
  return u._uint;
}

INLINE OVERLOADABLE short2 as_short2(char3 v) {
  union _type_cast_4_b u;
  u._char3 = v;
  return u._short2;
}

INLINE OVERLOADABLE ushort2 as_ushort2(char3 v) {
  union _type_cast_4_b u;
  u._char3 = v;
  return u._ushort2;
}

INLINE OVERLOADABLE uchar3 as_uchar3(char3 v) {
  union _type_cast_4_b u;
  u._char3 = v;
  return u._uchar3;
}

INLINE OVERLOADABLE uchar4 as_uchar4(char3 v) {
  union _type_cast_4_b u;
  u._char3 = v;
  return u._uchar4;
}

INLINE OVERLOADABLE float as_float(char3 v) {
  union _type_cast_4_b u;
  u._char3 = v;
  return u._float;
}

INLINE OVERLOADABLE int as_int(char4 v) {
  union _type_cast_4_b u;
  u._char4 = v;
  return u._int;
}

INLINE OVERLOADABLE uint as_uint(char4 v) {
  union _type_cast_4_b u;
  u._char4 = v;
  return u._uint;
}

INLINE OVERLOADABLE short2 as_short2(char4 v) {
  union _type_cast_4_b u;
  u._char4 = v;
  return u._short2;
}

INLINE OVERLOADABLE ushort2 as_ushort2(char4 v) {
  union _type_cast_4_b u;
  u._char4 = v;
  return u._ushort2;
}

INLINE OVERLOADABLE uchar3 as_uchar3(char4 v) {
  union _type_cast_4_b u;
  u._char4 = v;
  return u._uchar3;
}

INLINE OVERLOADABLE uchar4 as_uchar4(char4 v) {
  union _type_cast_4_b u;
  u._char4 = v;
  return u._uchar4;
}

INLINE OVERLOADABLE float as_float(char4 v) {
  union _type_cast_4_b u;
  u._char4 = v;
  return u._float;
}

INLINE OVERLOADABLE int as_int(uchar3 v) {
  union _type_cast_4_b u;
  u._uchar3 = v;
  return u._int;
}

INLINE OVERLOADABLE uint as_uint(uchar3 v) {
  union _type_cast_4_b u;
  u._uchar3 = v;
  return u._uint;
}

INLINE OVERLOADABLE short2 as_short2(uchar3 v) {
  union _type_cast_4_b u;
  u._uchar3 = v;
  return u._short2;
}

INLINE OVERLOADABLE ushort2 as_ushort2(uchar3 v) {
  union _type_cast_4_b u;
  u._uchar3 = v;
  return u._ushort2;
}

INLINE OVERLOADABLE char3 as_char3(uchar3 v) {
  union _type_cast_4_b u;
  u._uchar3 = v;
  return u._char3;
}

INLINE OVERLOADABLE char4 as_char4(uchar3 v) {
  union _type_cast_4_b u;
  u._uchar3 = v;
  return u._char4;
}

INLINE OVERLOADABLE float as_float(uchar3 v) {
  union _type_cast_4_b u;
  u._uchar3 = v;
  return u._float;
}

INLINE OVERLOADABLE int as_int(uchar4 v) {
  union _type_cast_4_b u;
  u._uchar4 = v;
  return u._int;
}

INLINE OVERLOADABLE uint as_uint(uchar4 v) {
  union _type_cast_4_b u;
  u._uchar4 = v;
  return u._uint;
}

INLINE OVERLOADABLE short2 as_short2(uchar4 v) {
  union _type_cast_4_b u;
  u._uchar4 = v;
  return u._short2;
}

INLINE OVERLOADABLE ushort2 as_ushort2(uchar4 v) {
  union _type_cast_4_b u;
  u._uchar4 = v;
  return u._ushort2;
}

INLINE OVERLOADABLE char3 as_char3(uchar4 v) {
  union _type_cast_4_b u;
  u._uchar4 = v;
  return u._char3;
}

INLINE OVERLOADABLE char4 as_char4(uchar4 v) {
  union _type_cast_4_b u;
  u._uchar4 = v;
  return u._char4;
}

INLINE OVERLOADABLE float as_float(uchar4 v) {
  union _type_cast_4_b u;
  u._uchar4 = v;
  return u._float;
}

INLINE OVERLOADABLE int as_int(float v) {
  union _type_cast_4_b u;
  u._float = v;
  return u._int;
}

INLINE OVERLOADABLE uint as_uint(float v) {
  union _type_cast_4_b u;
  u._float = v;
  return u._uint;
}

INLINE OVERLOADABLE short2 as_short2(float v) {
  union _type_cast_4_b u;
  u._float = v;
  return u._short2;
}

INLINE OVERLOADABLE ushort2 as_ushort2(float v) {
  union _type_cast_4_b u;
  u._float = v;
  return u._ushort2;
}

INLINE OVERLOADABLE char3 as_char3(float v) {
  union _type_cast_4_b u;
  u._float = v;
  return u._char3;
}

INLINE OVERLOADABLE char4 as_char4(float v) {
  union _type_cast_4_b u;
  u._float = v;
  return u._char4;
}

INLINE OVERLOADABLE uchar3 as_uchar3(float v) {
  union _type_cast_4_b u;
  u._float = v;
  return u._uchar3;
}

INLINE OVERLOADABLE uchar4 as_uchar4(float v) {
  union _type_cast_4_b u;
  u._float = v;
  return u._uchar4;
}

union _type_cast_8_b {
  long _long;
  ulong _ulong;
  int2 _int2;
  uint2 _uint2;
  short3 _short3;
  short4 _short4;
  ushort3 _ushort3;
  ushort4 _ushort4;
  char8 _char8;
  uchar8 _uchar8;
  double _double;
  float2 _float2;
};

INLINE OVERLOADABLE ulong as_ulong(long v) {
  union _type_cast_8_b u;
  u._long = v;
  return u._ulong;
}

INLINE OVERLOADABLE int2 as_int2(long v) {
  union _type_cast_8_b u;
  u._long = v;
  return u._int2;
}

INLINE OVERLOADABLE uint2 as_uint2(long v) {
  union _type_cast_8_b u;
  u._long = v;
  return u._uint2;
}

INLINE OVERLOADABLE short3 as_short3(long v) {
  union _type_cast_8_b u;
  u._long = v;
  return u._short3;
}

INLINE OVERLOADABLE short4 as_short4(long v) {
  union _type_cast_8_b u;
  u._long = v;
  return u._short4;
}

INLINE OVERLOADABLE ushort3 as_ushort3(long v) {
  union _type_cast_8_b u;
  u._long = v;
  return u._ushort3;
}

INLINE OVERLOADABLE ushort4 as_ushort4(long v) {
  union _type_cast_8_b u;
  u._long = v;
  return u._ushort4;
}

INLINE OVERLOADABLE char8 as_char8(long v) {
  union _type_cast_8_b u;
  u._long = v;
  return u._char8;
}

INLINE OVERLOADABLE uchar8 as_uchar8(long v) {
  union _type_cast_8_b u;
  u._long = v;
  return u._uchar8;
}

INLINE OVERLOADABLE double as_double(long v) {
  union _type_cast_8_b u;
  u._long = v;
  return u._double;
}

INLINE OVERLOADABLE float2 as_float2(long v) {
  union _type_cast_8_b u;
  u._long = v;
  return u._float2;
}

INLINE OVERLOADABLE long as_long(ulong v) {
  union _type_cast_8_b u;
  u._ulong = v;
  return u._long;
}

INLINE OVERLOADABLE int2 as_int2(ulong v) {
  union _type_cast_8_b u;
  u._ulong = v;
  return u._int2;
}

INLINE OVERLOADABLE uint2 as_uint2(ulong v) {
  union _type_cast_8_b u;
  u._ulong = v;
  return u._uint2;
}

INLINE OVERLOADABLE short3 as_short3(ulong v) {
  union _type_cast_8_b u;
  u._ulong = v;
  return u._short3;
}

INLINE OVERLOADABLE short4 as_short4(ulong v) {
  union _type_cast_8_b u;
  u._ulong = v;
  return u._short4;
}

INLINE OVERLOADABLE ushort3 as_ushort3(ulong v) {
  union _type_cast_8_b u;
  u._ulong = v;
  return u._ushort3;
}

INLINE OVERLOADABLE ushort4 as_ushort4(ulong v) {
  union _type_cast_8_b u;
  u._ulong = v;
  return u._ushort4;
}

INLINE OVERLOADABLE char8 as_char8(ulong v) {
  union _type_cast_8_b u;
  u._ulong = v;
  return u._char8;
}

INLINE OVERLOADABLE uchar8 as_uchar8(ulong v) {
  union _type_cast_8_b u;
  u._ulong = v;
  return u._uchar8;
}

INLINE OVERLOADABLE double as_double(ulong v) {
  union _type_cast_8_b u;
  u._ulong = v;
  return u._double;
}

INLINE OVERLOADABLE float2 as_float2(ulong v) {
  union _type_cast_8_b u;
  u._ulong = v;
  return u._float2;
}

INLINE OVERLOADABLE long as_long(int2 v) {
  union _type_cast_8_b u;
  u._int2 = v;
  return u._long;
}

INLINE OVERLOADABLE ulong as_ulong(int2 v) {
  union _type_cast_8_b u;
  u._int2 = v;
  return u._ulong;
}

INLINE OVERLOADABLE uint2 as_uint2(int2 v) {
  union _type_cast_8_b u;
  u._int2 = v;
  return u._uint2;
}

INLINE OVERLOADABLE short3 as_short3(int2 v) {
  union _type_cast_8_b u;
  u._int2 = v;
  return u._short3;
}

INLINE OVERLOADABLE short4 as_short4(int2 v) {
  union _type_cast_8_b u;
  u._int2 = v;
  return u._short4;
}

INLINE OVERLOADABLE ushort3 as_ushort3(int2 v) {
  union _type_cast_8_b u;
  u._int2 = v;
  return u._ushort3;
}

INLINE OVERLOADABLE ushort4 as_ushort4(int2 v) {
  union _type_cast_8_b u;
  u._int2 = v;
  return u._ushort4;
}

INLINE OVERLOADABLE char8 as_char8(int2 v) {
  union _type_cast_8_b u;
  u._int2 = v;
  return u._char8;
}

INLINE OVERLOADABLE uchar8 as_uchar8(int2 v) {
  union _type_cast_8_b u;
  u._int2 = v;
  return u._uchar8;
}

INLINE OVERLOADABLE double as_double(int2 v) {
  union _type_cast_8_b u;
  u._int2 = v;
  return u._double;
}

INLINE OVERLOADABLE float2 as_float2(int2 v) {
  union _type_cast_8_b u;
  u._int2 = v;
  return u._float2;
}

INLINE OVERLOADABLE long as_long(uint2 v) {
  union _type_cast_8_b u;
  u._uint2 = v;
  return u._long;
}

INLINE OVERLOADABLE ulong as_ulong(uint2 v) {
  union _type_cast_8_b u;
  u._uint2 = v;
  return u._ulong;
}

INLINE OVERLOADABLE int2 as_int2(uint2 v) {
  union _type_cast_8_b u;
  u._uint2 = v;
  return u._int2;
}

INLINE OVERLOADABLE short3 as_short3(uint2 v) {
  union _type_cast_8_b u;
  u._uint2 = v;
  return u._short3;
}

INLINE OVERLOADABLE short4 as_short4(uint2 v) {
  union _type_cast_8_b u;
  u._uint2 = v;
  return u._short4;
}

INLINE OVERLOADABLE ushort3 as_ushort3(uint2 v) {
  union _type_cast_8_b u;
  u._uint2 = v;
  return u._ushort3;
}

INLINE OVERLOADABLE ushort4 as_ushort4(uint2 v) {
  union _type_cast_8_b u;
  u._uint2 = v;
  return u._ushort4;
}

INLINE OVERLOADABLE char8 as_char8(uint2 v) {
  union _type_cast_8_b u;
  u._uint2 = v;
  return u._char8;
}

INLINE OVERLOADABLE uchar8 as_uchar8(uint2 v) {
  union _type_cast_8_b u;
  u._uint2 = v;
  return u._uchar8;
}

INLINE OVERLOADABLE double as_double(uint2 v) {
  union _type_cast_8_b u;
  u._uint2 = v;
  return u._double;
}

INLINE OVERLOADABLE float2 as_float2(uint2 v) {
  union _type_cast_8_b u;
  u._uint2 = v;
  return u._float2;
}

INLINE OVERLOADABLE long as_long(short3 v) {
  union _type_cast_8_b u;
  u._short3 = v;
  return u._long;
}

INLINE OVERLOADABLE ulong as_ulong(short3 v) {
  union _type_cast_8_b u;
  u._short3 = v;
  return u._ulong;
}

INLINE OVERLOADABLE int2 as_int2(short3 v) {
  union _type_cast_8_b u;
  u._short3 = v;
  return u._int2;
}

INLINE OVERLOADABLE uint2 as_uint2(short3 v) {
  union _type_cast_8_b u;
  u._short3 = v;
  return u._uint2;
}

INLINE OVERLOADABLE ushort3 as_ushort3(short3 v) {
  union _type_cast_8_b u;
  u._short3 = v;
  return u._ushort3;
}

INLINE OVERLOADABLE ushort4 as_ushort4(short3 v) {
  union _type_cast_8_b u;
  u._short3 = v;
  return u._ushort4;
}

INLINE OVERLOADABLE char8 as_char8(short3 v) {
  union _type_cast_8_b u;
  u._short3 = v;
  return u._char8;
}

INLINE OVERLOADABLE uchar8 as_uchar8(short3 v) {
  union _type_cast_8_b u;
  u._short3 = v;
  return u._uchar8;
}

INLINE OVERLOADABLE double as_double(short3 v) {
  union _type_cast_8_b u;
  u._short3 = v;
  return u._double;
}

INLINE OVERLOADABLE float2 as_float2(short3 v) {
  union _type_cast_8_b u;
  u._short3 = v;
  return u._float2;
}

INLINE OVERLOADABLE long as_long(short4 v) {
  union _type_cast_8_b u;
  u._short4 = v;
  return u._long;
}

INLINE OVERLOADABLE ulong as_ulong(short4 v) {
  union _type_cast_8_b u;
  u._short4 = v;
  return u._ulong;
}

INLINE OVERLOADABLE int2 as_int2(short4 v) {
  union _type_cast_8_b u;
  u._short4 = v;
  return u._int2;
}

INLINE OVERLOADABLE uint2 as_uint2(short4 v) {
  union _type_cast_8_b u;
  u._short4 = v;
  return u._uint2;
}

INLINE OVERLOADABLE ushort3 as_ushort3(short4 v) {
  union _type_cast_8_b u;
  u._short4 = v;
  return u._ushort3;
}

INLINE OVERLOADABLE ushort4 as_ushort4(short4 v) {
  union _type_cast_8_b u;
  u._short4 = v;
  return u._ushort4;
}

INLINE OVERLOADABLE char8 as_char8(short4 v) {
  union _type_cast_8_b u;
  u._short4 = v;
  return u._char8;
}

INLINE OVERLOADABLE uchar8 as_uchar8(short4 v) {
  union _type_cast_8_b u;
  u._short4 = v;
  return u._uchar8;
}

INLINE OVERLOADABLE double as_double(short4 v) {
  union _type_cast_8_b u;
  u._short4 = v;
  return u._double;
}

INLINE OVERLOADABLE float2 as_float2(short4 v) {
  union _type_cast_8_b u;
  u._short4 = v;
  return u._float2;
}

INLINE OVERLOADABLE long as_long(ushort3 v) {
  union _type_cast_8_b u;
  u._ushort3 = v;
  return u._long;
}

INLINE OVERLOADABLE ulong as_ulong(ushort3 v) {
  union _type_cast_8_b u;
  u._ushort3 = v;
  return u._ulong;
}

INLINE OVERLOADABLE int2 as_int2(ushort3 v) {
  union _type_cast_8_b u;
  u._ushort3 = v;
  return u._int2;
}

INLINE OVERLOADABLE uint2 as_uint2(ushort3 v) {
  union _type_cast_8_b u;
  u._ushort3 = v;
  return u._uint2;
}

INLINE OVERLOADABLE short3 as_short3(ushort3 v) {
  union _type_cast_8_b u;
  u._ushort3 = v;
  return u._short3;
}

INLINE OVERLOADABLE short4 as_short4(ushort3 v) {
  union _type_cast_8_b u;
  u._ushort3 = v;
  return u._short4;
}

INLINE OVERLOADABLE char8 as_char8(ushort3 v) {
  union _type_cast_8_b u;
  u._ushort3 = v;
  return u._char8;
}

INLINE OVERLOADABLE uchar8 as_uchar8(ushort3 v) {
  union _type_cast_8_b u;
  u._ushort3 = v;
  return u._uchar8;
}

INLINE OVERLOADABLE double as_double(ushort3 v) {
  union _type_cast_8_b u;
  u._ushort3 = v;
  return u._double;
}

INLINE OVERLOADABLE float2 as_float2(ushort3 v) {
  union _type_cast_8_b u;
  u._ushort3 = v;
  return u._float2;
}

INLINE OVERLOADABLE long as_long(ushort4 v) {
  union _type_cast_8_b u;
  u._ushort4 = v;
  return u._long;
}

INLINE OVERLOADABLE ulong as_ulong(ushort4 v) {
  union _type_cast_8_b u;
  u._ushort4 = v;
  return u._ulong;
}

INLINE OVERLOADABLE int2 as_int2(ushort4 v) {
  union _type_cast_8_b u;
  u._ushort4 = v;
  return u._int2;
}

INLINE OVERLOADABLE uint2 as_uint2(ushort4 v) {
  union _type_cast_8_b u;
  u._ushort4 = v;
  return u._uint2;
}

INLINE OVERLOADABLE short3 as_short3(ushort4 v) {
  union _type_cast_8_b u;
  u._ushort4 = v;
  return u._short3;
}

INLINE OVERLOADABLE short4 as_short4(ushort4 v) {
  union _type_cast_8_b u;
  u._ushort4 = v;
  return u._short4;
}

INLINE OVERLOADABLE char8 as_char8(ushort4 v) {
  union _type_cast_8_b u;
  u._ushort4 = v;
  return u._char8;
}

INLINE OVERLOADABLE uchar8 as_uchar8(ushort4 v) {
  union _type_cast_8_b u;
  u._ushort4 = v;
  return u._uchar8;
}

INLINE OVERLOADABLE double as_double(ushort4 v) {
  union _type_cast_8_b u;
  u._ushort4 = v;
  return u._double;
}

INLINE OVERLOADABLE float2 as_float2(ushort4 v) {
  union _type_cast_8_b u;
  u._ushort4 = v;
  return u._float2;
}

INLINE OVERLOADABLE long as_long(char8 v) {
  union _type_cast_8_b u;
  u._char8 = v;
  return u._long;
}

INLINE OVERLOADABLE ulong as_ulong(char8 v) {
  union _type_cast_8_b u;
  u._char8 = v;
  return u._ulong;
}

INLINE OVERLOADABLE int2 as_int2(char8 v) {
  union _type_cast_8_b u;
  u._char8 = v;
  return u._int2;
}

INLINE OVERLOADABLE uint2 as_uint2(char8 v) {
  union _type_cast_8_b u;
  u._char8 = v;
  return u._uint2;
}

INLINE OVERLOADABLE short3 as_short3(char8 v) {
  union _type_cast_8_b u;
  u._char8 = v;
  return u._short3;
}

INLINE OVERLOADABLE short4 as_short4(char8 v) {
  union _type_cast_8_b u;
  u._char8 = v;
  return u._short4;
}

INLINE OVERLOADABLE ushort3 as_ushort3(char8 v) {
  union _type_cast_8_b u;
  u._char8 = v;
  return u._ushort3;
}

INLINE OVERLOADABLE ushort4 as_ushort4(char8 v) {
  union _type_cast_8_b u;
  u._char8 = v;
  return u._ushort4;
}

INLINE OVERLOADABLE uchar8 as_uchar8(char8 v) {
  union _type_cast_8_b u;
  u._char8 = v;
  return u._uchar8;
}

INLINE OVERLOADABLE double as_double(char8 v) {
  union _type_cast_8_b u;
  u._char8 = v;
  return u._double;
}

INLINE OVERLOADABLE float2 as_float2(char8 v) {
  union _type_cast_8_b u;
  u._char8 = v;
  return u._float2;
}

INLINE OVERLOADABLE long as_long(uchar8 v) {
  union _type_cast_8_b u;
  u._uchar8 = v;
  return u._long;
}

INLINE OVERLOADABLE ulong as_ulong(uchar8 v) {
  union _type_cast_8_b u;
  u._uchar8 = v;
  return u._ulong;
}

INLINE OVERLOADABLE int2 as_int2(uchar8 v) {
  union _type_cast_8_b u;
  u._uchar8 = v;
  return u._int2;
}

INLINE OVERLOADABLE uint2 as_uint2(uchar8 v) {
  union _type_cast_8_b u;
  u._uchar8 = v;
  return u._uint2;
}

INLINE OVERLOADABLE short3 as_short3(uchar8 v) {
  union _type_cast_8_b u;
  u._uchar8 = v;
  return u._short3;
}

INLINE OVERLOADABLE short4 as_short4(uchar8 v) {
  union _type_cast_8_b u;
  u._uchar8 = v;
  return u._short4;
}

INLINE OVERLOADABLE ushort3 as_ushort3(uchar8 v) {
  union _type_cast_8_b u;
  u._uchar8 = v;
  return u._ushort3;
}

INLINE OVERLOADABLE ushort4 as_ushort4(uchar8 v) {
  union _type_cast_8_b u;
  u._uchar8 = v;
  return u._ushort4;
}

INLINE OVERLOADABLE char8 as_char8(uchar8 v) {
  union _type_cast_8_b u;
  u._uchar8 = v;
  return u._char8;
}

INLINE OVERLOADABLE double as_double(uchar8 v) {
  union _type_cast_8_b u;
  u._uchar8 = v;
  return u._double;
}

INLINE OVERLOADABLE float2 as_float2(uchar8 v) {
  union _type_cast_8_b u;
  u._uchar8 = v;
  return u._float2;
}

INLINE OVERLOADABLE long as_long(double v) {
  union _type_cast_8_b u;
  u._double = v;
  return u._long;
}

INLINE OVERLOADABLE ulong as_ulong(double v) {
  union _type_cast_8_b u;
  u._double = v;
  return u._ulong;
}

INLINE OVERLOADABLE int2 as_int2(double v) {
  union _type_cast_8_b u;
  u._double = v;
  return u._int2;
}

INLINE OVERLOADABLE uint2 as_uint2(double v) {
  union _type_cast_8_b u;
  u._double = v;
  return u._uint2;
}

INLINE OVERLOADABLE short3 as_short3(double v) {
  union _type_cast_8_b u;
  u._double = v;
  return u._short3;
}

INLINE OVERLOADABLE short4 as_short4(double v) {
  union _type_cast_8_b u;
  u._double = v;
  return u._short4;
}

INLINE OVERLOADABLE ushort3 as_ushort3(double v) {
  union _type_cast_8_b u;
  u._double = v;
  return u._ushort3;
}

INLINE OVERLOADABLE ushort4 as_ushort4(double v) {
  union _type_cast_8_b u;
  u._double = v;
  return u._ushort4;
}

INLINE OVERLOADABLE char8 as_char8(double v) {
  union _type_cast_8_b u;
  u._double = v;
  return u._char8;
}

INLINE OVERLOADABLE uchar8 as_uchar8(double v) {
  union _type_cast_8_b u;
  u._double = v;
  return u._uchar8;
}

INLINE OVERLOADABLE float2 as_float2(double v) {
  union _type_cast_8_b u;
  u._double = v;
  return u._float2;
}

INLINE OVERLOADABLE long as_long(float2 v) {
  union _type_cast_8_b u;
  u._float2 = v;
  return u._long;
}

INLINE OVERLOADABLE ulong as_ulong(float2 v) {
  union _type_cast_8_b u;
  u._float2 = v;
  return u._ulong;
}

INLINE OVERLOADABLE int2 as_int2(float2 v) {
  union _type_cast_8_b u;
  u._float2 = v;
  return u._int2;
}

INLINE OVERLOADABLE uint2 as_uint2(float2 v) {
  union _type_cast_8_b u;
  u._float2 = v;
  return u._uint2;
}

INLINE OVERLOADABLE short3 as_short3(float2 v) {
  union _type_cast_8_b u;
  u._float2 = v;
  return u._short3;
}

INLINE OVERLOADABLE short4 as_short4(float2 v) {
  union _type_cast_8_b u;
  u._float2 = v;
  return u._short4;
}

INLINE OVERLOADABLE ushort3 as_ushort3(float2 v) {
  union _type_cast_8_b u;
  u._float2 = v;
  return u._ushort3;
}

INLINE OVERLOADABLE ushort4 as_ushort4(float2 v) {
  union _type_cast_8_b u;
  u._float2 = v;
  return u._ushort4;
}

INLINE OVERLOADABLE char8 as_char8(float2 v) {
  union _type_cast_8_b u;
  u._float2 = v;
  return u._char8;
}

INLINE OVERLOADABLE uchar8 as_uchar8(float2 v) {
  union _type_cast_8_b u;
  u._float2 = v;
  return u._uchar8;
}

INLINE OVERLOADABLE double as_double(float2 v) {
  union _type_cast_8_b u;
  u._float2 = v;
  return u._double;
}

union _type_cast_16_b {
  long2 _long2;
  ulong2 _ulong2;
  int3 _int3;
  int4 _int4;
  uint3 _uint3;
  uint4 _uint4;
  short8 _short8;
  ushort8 _ushort8;
  char16 _char16;
  uchar16 _uchar16;
  double2 _double2;
  float3 _float3;
  float4 _float4;
};

INLINE OVERLOADABLE ulong2 as_ulong2(long2 v) {
  union _type_cast_16_b u;
  u._long2 = v;
  return u._ulong2;
}

INLINE OVERLOADABLE int3 as_int3(long2 v) {
  union _type_cast_16_b u;
  u._long2 = v;
  return u._int3;
}

INLINE OVERLOADABLE int4 as_int4(long2 v) {
  union _type_cast_16_b u;
  u._long2 = v;
  return u._int4;
}

INLINE OVERLOADABLE uint3 as_uint3(long2 v) {
  union _type_cast_16_b u;
  u._long2 = v;
  return u._uint3;
}

INLINE OVERLOADABLE uint4 as_uint4(long2 v) {
  union _type_cast_16_b u;
  u._long2 = v;
  return u._uint4;
}

INLINE OVERLOADABLE short8 as_short8(long2 v) {
  union _type_cast_16_b u;
  u._long2 = v;
  return u._short8;
}

INLINE OVERLOADABLE ushort8 as_ushort8(long2 v) {
  union _type_cast_16_b u;
  u._long2 = v;
  return u._ushort8;
}

INLINE OVERLOADABLE char16 as_char16(long2 v) {
  union _type_cast_16_b u;
  u._long2 = v;
  return u._char16;
}

INLINE OVERLOADABLE uchar16 as_uchar16(long2 v) {
  union _type_cast_16_b u;
  u._long2 = v;
  return u._uchar16;
}

INLINE OVERLOADABLE double2 as_double2(long2 v) {
  union _type_cast_16_b u;
  u._long2 = v;
  return u._double2;
}

INLINE OVERLOADABLE float3 as_float3(long2 v) {
  union _type_cast_16_b u;
  u._long2 = v;
  return u._float3;
}

INLINE OVERLOADABLE float4 as_float4(long2 v) {
  union _type_cast_16_b u;
  u._long2 = v;
  return u._float4;
}

INLINE OVERLOADABLE long2 as_long2(ulong2 v) {
  union _type_cast_16_b u;
  u._ulong2 = v;
  return u._long2;
}

INLINE OVERLOADABLE int3 as_int3(ulong2 v) {
  union _type_cast_16_b u;
  u._ulong2 = v;
  return u._int3;
}

INLINE OVERLOADABLE int4 as_int4(ulong2 v) {
  union _type_cast_16_b u;
  u._ulong2 = v;
  return u._int4;
}

INLINE OVERLOADABLE uint3 as_uint3(ulong2 v) {
  union _type_cast_16_b u;
  u._ulong2 = v;
  return u._uint3;
}

INLINE OVERLOADABLE uint4 as_uint4(ulong2 v) {
  union _type_cast_16_b u;
  u._ulong2 = v;
  return u._uint4;
}

INLINE OVERLOADABLE short8 as_short8(ulong2 v) {
  union _type_cast_16_b u;
  u._ulong2 = v;
  return u._short8;
}

INLINE OVERLOADABLE ushort8 as_ushort8(ulong2 v) {
  union _type_cast_16_b u;
  u._ulong2 = v;
  return u._ushort8;
}

INLINE OVERLOADABLE char16 as_char16(ulong2 v) {
  union _type_cast_16_b u;
  u._ulong2 = v;
  return u._char16;
}

INLINE OVERLOADABLE uchar16 as_uchar16(ulong2 v) {
  union _type_cast_16_b u;
  u._ulong2 = v;
  return u._uchar16;
}

INLINE OVERLOADABLE double2 as_double2(ulong2 v) {
  union _type_cast_16_b u;
  u._ulong2 = v;
  return u._double2;
}

INLINE OVERLOADABLE float3 as_float3(ulong2 v) {
  union _type_cast_16_b u;
  u._ulong2 = v;
  return u._float3;
}

INLINE OVERLOADABLE float4 as_float4(ulong2 v) {
  union _type_cast_16_b u;
  u._ulong2 = v;
  return u._float4;
}

INLINE OVERLOADABLE long2 as_long2(int3 v) {
  union _type_cast_16_b u;
  u._int3 = v;
  return u._long2;
}

INLINE OVERLOADABLE ulong2 as_ulong2(int3 v) {
  union _type_cast_16_b u;
  u._int3 = v;
  return u._ulong2;
}

INLINE OVERLOADABLE uint3 as_uint3(int3 v) {
  union _type_cast_16_b u;
  u._int3 = v;
  return u._uint3;
}

INLINE OVERLOADABLE uint4 as_uint4(int3 v) {
  union _type_cast_16_b u;
  u._int3 = v;
  return u._uint4;
}

INLINE OVERLOADABLE short8 as_short8(int3 v) {
  union _type_cast_16_b u;
  u._int3 = v;
  return u._short8;
}

INLINE OVERLOADABLE ushort8 as_ushort8(int3 v) {
  union _type_cast_16_b u;
  u._int3 = v;
  return u._ushort8;
}

INLINE OVERLOADABLE char16 as_char16(int3 v) {
  union _type_cast_16_b u;
  u._int3 = v;
  return u._char16;
}

INLINE OVERLOADABLE uchar16 as_uchar16(int3 v) {
  union _type_cast_16_b u;
  u._int3 = v;
  return u._uchar16;
}

INLINE OVERLOADABLE double2 as_double2(int3 v) {
  union _type_cast_16_b u;
  u._int3 = v;
  return u._double2;
}

INLINE OVERLOADABLE float3 as_float3(int3 v) {
  union _type_cast_16_b u;
  u._int3 = v;
  return u._float3;
}

INLINE OVERLOADABLE float4 as_float4(int3 v) {
  union _type_cast_16_b u;
  u._int3 = v;
  return u._float4;
}

INLINE OVERLOADABLE long2 as_long2(int4 v) {
  union _type_cast_16_b u;
  u._int4 = v;
  return u._long2;
}

INLINE OVERLOADABLE ulong2 as_ulong2(int4 v) {
  union _type_cast_16_b u;
  u._int4 = v;
  return u._ulong2;
}

INLINE OVERLOADABLE uint3 as_uint3(int4 v) {
  union _type_cast_16_b u;
  u._int4 = v;
  return u._uint3;
}

INLINE OVERLOADABLE uint4 as_uint4(int4 v) {
  union _type_cast_16_b u;
  u._int4 = v;
  return u._uint4;
}

INLINE OVERLOADABLE short8 as_short8(int4 v) {
  union _type_cast_16_b u;
  u._int4 = v;
  return u._short8;
}

INLINE OVERLOADABLE ushort8 as_ushort8(int4 v) {
  union _type_cast_16_b u;
  u._int4 = v;
  return u._ushort8;
}

INLINE OVERLOADABLE char16 as_char16(int4 v) {
  union _type_cast_16_b u;
  u._int4 = v;
  return u._char16;
}

INLINE OVERLOADABLE uchar16 as_uchar16(int4 v) {
  union _type_cast_16_b u;
  u._int4 = v;
  return u._uchar16;
}

INLINE OVERLOADABLE double2 as_double2(int4 v) {
  union _type_cast_16_b u;
  u._int4 = v;
  return u._double2;
}

INLINE OVERLOADABLE float3 as_float3(int4 v) {
  union _type_cast_16_b u;
  u._int4 = v;
  return u._float3;
}

INLINE OVERLOADABLE float4 as_float4(int4 v) {
  union _type_cast_16_b u;
  u._int4 = v;
  return u._float4;
}

INLINE OVERLOADABLE long2 as_long2(uint3 v) {
  union _type_cast_16_b u;
  u._uint3 = v;
  return u._long2;
}

INLINE OVERLOADABLE ulong2 as_ulong2(uint3 v) {
  union _type_cast_16_b u;
  u._uint3 = v;
  return u._ulong2;
}

INLINE OVERLOADABLE int3 as_int3(uint3 v) {
  union _type_cast_16_b u;
  u._uint3 = v;
  return u._int3;
}

INLINE OVERLOADABLE int4 as_int4(uint3 v) {
  union _type_cast_16_b u;
  u._uint3 = v;
  return u._int4;
}

INLINE OVERLOADABLE short8 as_short8(uint3 v) {
  union _type_cast_16_b u;
  u._uint3 = v;
  return u._short8;
}

INLINE OVERLOADABLE ushort8 as_ushort8(uint3 v) {
  union _type_cast_16_b u;
  u._uint3 = v;
  return u._ushort8;
}

INLINE OVERLOADABLE char16 as_char16(uint3 v) {
  union _type_cast_16_b u;
  u._uint3 = v;
  return u._char16;
}

INLINE OVERLOADABLE uchar16 as_uchar16(uint3 v) {
  union _type_cast_16_b u;
  u._uint3 = v;
  return u._uchar16;
}

INLINE OVERLOADABLE double2 as_double2(uint3 v) {
  union _type_cast_16_b u;
  u._uint3 = v;
  return u._double2;
}

INLINE OVERLOADABLE float3 as_float3(uint3 v) {
  union _type_cast_16_b u;
  u._uint3 = v;
  return u._float3;
}

INLINE OVERLOADABLE float4 as_float4(uint3 v) {
  union _type_cast_16_b u;
  u._uint3 = v;
  return u._float4;
}

INLINE OVERLOADABLE long2 as_long2(uint4 v) {
  union _type_cast_16_b u;
  u._uint4 = v;
  return u._long2;
}

INLINE OVERLOADABLE ulong2 as_ulong2(uint4 v) {
  union _type_cast_16_b u;
  u._uint4 = v;
  return u._ulong2;
}

INLINE OVERLOADABLE int3 as_int3(uint4 v) {
  union _type_cast_16_b u;
  u._uint4 = v;
  return u._int3;
}

INLINE OVERLOADABLE int4 as_int4(uint4 v) {
  union _type_cast_16_b u;
  u._uint4 = v;
  return u._int4;
}

INLINE OVERLOADABLE short8 as_short8(uint4 v) {
  union _type_cast_16_b u;
  u._uint4 = v;
  return u._short8;
}

INLINE OVERLOADABLE ushort8 as_ushort8(uint4 v) {
  union _type_cast_16_b u;
  u._uint4 = v;
  return u._ushort8;
}

INLINE OVERLOADABLE char16 as_char16(uint4 v) {
  union _type_cast_16_b u;
  u._uint4 = v;
  return u._char16;
}

INLINE OVERLOADABLE uchar16 as_uchar16(uint4 v) {
  union _type_cast_16_b u;
  u._uint4 = v;
  return u._uchar16;
}

INLINE OVERLOADABLE double2 as_double2(uint4 v) {
  union _type_cast_16_b u;
  u._uint4 = v;
  return u._double2;
}

INLINE OVERLOADABLE float3 as_float3(uint4 v) {
  union _type_cast_16_b u;
  u._uint4 = v;
  return u._float3;
}

INLINE OVERLOADABLE float4 as_float4(uint4 v) {
  union _type_cast_16_b u;
  u._uint4 = v;
  return u._float4;
}

INLINE OVERLOADABLE long2 as_long2(short8 v) {
  union _type_cast_16_b u;
  u._short8 = v;
  return u._long2;
}

INLINE OVERLOADABLE ulong2 as_ulong2(short8 v) {
  union _type_cast_16_b u;
  u._short8 = v;
  return u._ulong2;
}

INLINE OVERLOADABLE int3 as_int3(short8 v) {
  union _type_cast_16_b u;
  u._short8 = v;
  return u._int3;
}

INLINE OVERLOADABLE int4 as_int4(short8 v) {
  union _type_cast_16_b u;
  u._short8 = v;
  return u._int4;
}

INLINE OVERLOADABLE uint3 as_uint3(short8 v) {
  union _type_cast_16_b u;
  u._short8 = v;
  return u._uint3;
}

INLINE OVERLOADABLE uint4 as_uint4(short8 v) {
  union _type_cast_16_b u;
  u._short8 = v;
  return u._uint4;
}

INLINE OVERLOADABLE ushort8 as_ushort8(short8 v) {
  union _type_cast_16_b u;
  u._short8 = v;
  return u._ushort8;
}

INLINE OVERLOADABLE char16 as_char16(short8 v) {
  union _type_cast_16_b u;
  u._short8 = v;
  return u._char16;
}

INLINE OVERLOADABLE uchar16 as_uchar16(short8 v) {
  union _type_cast_16_b u;
  u._short8 = v;
  return u._uchar16;
}

INLINE OVERLOADABLE double2 as_double2(short8 v) {
  union _type_cast_16_b u;
  u._short8 = v;
  return u._double2;
}

INLINE OVERLOADABLE float3 as_float3(short8 v) {
  union _type_cast_16_b u;
  u._short8 = v;
  return u._float3;
}

INLINE OVERLOADABLE float4 as_float4(short8 v) {
  union _type_cast_16_b u;
  u._short8 = v;
  return u._float4;
}

INLINE OVERLOADABLE long2 as_long2(ushort8 v) {
  union _type_cast_16_b u;
  u._ushort8 = v;
  return u._long2;
}

INLINE OVERLOADABLE ulong2 as_ulong2(ushort8 v) {
  union _type_cast_16_b u;
  u._ushort8 = v;
  return u._ulong2;
}

INLINE OVERLOADABLE int3 as_int3(ushort8 v) {
  union _type_cast_16_b u;
  u._ushort8 = v;
  return u._int3;
}

INLINE OVERLOADABLE int4 as_int4(ushort8 v) {
  union _type_cast_16_b u;
  u._ushort8 = v;
  return u._int4;
}

INLINE OVERLOADABLE uint3 as_uint3(ushort8 v) {
  union _type_cast_16_b u;
  u._ushort8 = v;
  return u._uint3;
}

INLINE OVERLOADABLE uint4 as_uint4(ushort8 v) {
  union _type_cast_16_b u;
  u._ushort8 = v;
  return u._uint4;
}

INLINE OVERLOADABLE short8 as_short8(ushort8 v) {
  union _type_cast_16_b u;
  u._ushort8 = v;
  return u._short8;
}

INLINE OVERLOADABLE char16 as_char16(ushort8 v) {
  union _type_cast_16_b u;
  u._ushort8 = v;
  return u._char16;
}

INLINE OVERLOADABLE uchar16 as_uchar16(ushort8 v) {
  union _type_cast_16_b u;
  u._ushort8 = v;
  return u._uchar16;
}

INLINE OVERLOADABLE double2 as_double2(ushort8 v) {
  union _type_cast_16_b u;
  u._ushort8 = v;
  return u._double2;
}

INLINE OVERLOADABLE float3 as_float3(ushort8 v) {
  union _type_cast_16_b u;
  u._ushort8 = v;
  return u._float3;
}

INLINE OVERLOADABLE float4 as_float4(ushort8 v) {
  union _type_cast_16_b u;
  u._ushort8 = v;
  return u._float4;
}

INLINE OVERLOADABLE long2 as_long2(char16 v) {
  union _type_cast_16_b u;
  u._char16 = v;
  return u._long2;
}

INLINE OVERLOADABLE ulong2 as_ulong2(char16 v) {
  union _type_cast_16_b u;
  u._char16 = v;
  return u._ulong2;
}

INLINE OVERLOADABLE int3 as_int3(char16 v) {
  union _type_cast_16_b u;
  u._char16 = v;
  return u._int3;
}

INLINE OVERLOADABLE int4 as_int4(char16 v) {
  union _type_cast_16_b u;
  u._char16 = v;
  return u._int4;
}

INLINE OVERLOADABLE uint3 as_uint3(char16 v) {
  union _type_cast_16_b u;
  u._char16 = v;
  return u._uint3;
}

INLINE OVERLOADABLE uint4 as_uint4(char16 v) {
  union _type_cast_16_b u;
  u._char16 = v;
  return u._uint4;
}

INLINE OVERLOADABLE short8 as_short8(char16 v) {
  union _type_cast_16_b u;
  u._char16 = v;
  return u._short8;
}

INLINE OVERLOADABLE ushort8 as_ushort8(char16 v) {
  union _type_cast_16_b u;
  u._char16 = v;
  return u._ushort8;
}

INLINE OVERLOADABLE uchar16 as_uchar16(char16 v) {
  union _type_cast_16_b u;
  u._char16 = v;
  return u._uchar16;
}

INLINE OVERLOADABLE double2 as_double2(char16 v) {
  union _type_cast_16_b u;
  u._char16 = v;
  return u._double2;
}

INLINE OVERLOADABLE float3 as_float3(char16 v) {
  union _type_cast_16_b u;
  u._char16 = v;
  return u._float3;
}

INLINE OVERLOADABLE float4 as_float4(char16 v) {
  union _type_cast_16_b u;
  u._char16 = v;
  return u._float4;
}

INLINE OVERLOADABLE long2 as_long2(uchar16 v) {
  union _type_cast_16_b u;
  u._uchar16 = v;
  return u._long2;
}

INLINE OVERLOADABLE ulong2 as_ulong2(uchar16 v) {
  union _type_cast_16_b u;
  u._uchar16 = v;
  return u._ulong2;
}

INLINE OVERLOADABLE int3 as_int3(uchar16 v) {
  union _type_cast_16_b u;
  u._uchar16 = v;
  return u._int3;
}

INLINE OVERLOADABLE int4 as_int4(uchar16 v) {
  union _type_cast_16_b u;
  u._uchar16 = v;
  return u._int4;
}

INLINE OVERLOADABLE uint3 as_uint3(uchar16 v) {
  union _type_cast_16_b u;
  u._uchar16 = v;
  return u._uint3;
}

INLINE OVERLOADABLE uint4 as_uint4(uchar16 v) {
  union _type_cast_16_b u;
  u._uchar16 = v;
  return u._uint4;
}

INLINE OVERLOADABLE short8 as_short8(uchar16 v) {
  union _type_cast_16_b u;
  u._uchar16 = v;
  return u._short8;
}

INLINE OVERLOADABLE ushort8 as_ushort8(uchar16 v) {
  union _type_cast_16_b u;
  u._uchar16 = v;
  return u._ushort8;
}

INLINE OVERLOADABLE char16 as_char16(uchar16 v) {
  union _type_cast_16_b u;
  u._uchar16 = v;
  return u._char16;
}

INLINE OVERLOADABLE double2 as_double2(uchar16 v) {
  union _type_cast_16_b u;
  u._uchar16 = v;
  return u._double2;
}

INLINE OVERLOADABLE float3 as_float3(uchar16 v) {
  union _type_cast_16_b u;
  u._uchar16 = v;
  return u._float3;
}

INLINE OVERLOADABLE float4 as_float4(uchar16 v) {
  union _type_cast_16_b u;
  u._uchar16 = v;
  return u._float4;
}

INLINE OVERLOADABLE long2 as_long2(double2 v) {
  union _type_cast_16_b u;
  u._double2 = v;
  return u._long2;
}

INLINE OVERLOADABLE ulong2 as_ulong2(double2 v) {
  union _type_cast_16_b u;
  u._double2 = v;
  return u._ulong2;
}

INLINE OVERLOADABLE int3 as_int3(double2 v) {
  union _type_cast_16_b u;
  u._double2 = v;
  return u._int3;
}

INLINE OVERLOADABLE int4 as_int4(double2 v) {
  union _type_cast_16_b u;
  u._double2 = v;
  return u._int4;
}

INLINE OVERLOADABLE uint3 as_uint3(double2 v) {
  union _type_cast_16_b u;
  u._double2 = v;
  return u._uint3;
}

INLINE OVERLOADABLE uint4 as_uint4(double2 v) {
  union _type_cast_16_b u;
  u._double2 = v;
  return u._uint4;
}

INLINE OVERLOADABLE short8 as_short8(double2 v) {
  union _type_cast_16_b u;
  u._double2 = v;
  return u._short8;
}

INLINE OVERLOADABLE ushort8 as_ushort8(double2 v) {
  union _type_cast_16_b u;
  u._double2 = v;
  return u._ushort8;
}

INLINE OVERLOADABLE char16 as_char16(double2 v) {
  union _type_cast_16_b u;
  u._double2 = v;
  return u._char16;
}

INLINE OVERLOADABLE uchar16 as_uchar16(double2 v) {
  union _type_cast_16_b u;
  u._double2 = v;
  return u._uchar16;
}

INLINE OVERLOADABLE float3 as_float3(double2 v) {
  union _type_cast_16_b u;
  u._double2 = v;
  return u._float3;
}

INLINE OVERLOADABLE float4 as_float4(double2 v) {
  union _type_cast_16_b u;
  u._double2 = v;
  return u._float4;
}

INLINE OVERLOADABLE long2 as_long2(float3 v) {
  union _type_cast_16_b u;
  u._float3 = v;
  return u._long2;
}

INLINE OVERLOADABLE ulong2 as_ulong2(float3 v) {
  union _type_cast_16_b u;
  u._float3 = v;
  return u._ulong2;
}

INLINE OVERLOADABLE int3 as_int3(float3 v) {
  union _type_cast_16_b u;
  u._float3 = v;
  return u._int3;
}

INLINE OVERLOADABLE int4 as_int4(float3 v) {
  union _type_cast_16_b u;
  u._float3 = v;
  return u._int4;
}

INLINE OVERLOADABLE uint3 as_uint3(float3 v) {
  union _type_cast_16_b u;
  u._float3 = v;
  return u._uint3;
}

INLINE OVERLOADABLE uint4 as_uint4(float3 v) {
  union _type_cast_16_b u;
  u._float3 = v;
  return u._uint4;
}

INLINE OVERLOADABLE short8 as_short8(float3 v) {
  union _type_cast_16_b u;
  u._float3 = v;
  return u._short8;
}

INLINE OVERLOADABLE ushort8 as_ushort8(float3 v) {
  union _type_cast_16_b u;
  u._float3 = v;
  return u._ushort8;
}

INLINE OVERLOADABLE char16 as_char16(float3 v) {
  union _type_cast_16_b u;
  u._float3 = v;
  return u._char16;
}

INLINE OVERLOADABLE uchar16 as_uchar16(float3 v) {
  union _type_cast_16_b u;
  u._float3 = v;
  return u._uchar16;
}

INLINE OVERLOADABLE double2 as_double2(float3 v) {
  union _type_cast_16_b u;
  u._float3 = v;
  return u._double2;
}

INLINE OVERLOADABLE long2 as_long2(float4 v) {
  union _type_cast_16_b u;
  u._float4 = v;
  return u._long2;
}

INLINE OVERLOADABLE ulong2 as_ulong2(float4 v) {
  union _type_cast_16_b u;
  u._float4 = v;
  return u._ulong2;
}

INLINE OVERLOADABLE int3 as_int3(float4 v) {
  union _type_cast_16_b u;
  u._float4 = v;
  return u._int3;
}

INLINE OVERLOADABLE int4 as_int4(float4 v) {
  union _type_cast_16_b u;
  u._float4 = v;
  return u._int4;
}

INLINE OVERLOADABLE uint3 as_uint3(float4 v) {
  union _type_cast_16_b u;
  u._float4 = v;
  return u._uint3;
}

INLINE OVERLOADABLE uint4 as_uint4(float4 v) {
  union _type_cast_16_b u;
  u._float4 = v;
  return u._uint4;
}

INLINE OVERLOADABLE short8 as_short8(float4 v) {
  union _type_cast_16_b u;
  u._float4 = v;
  return u._short8;
}

INLINE OVERLOADABLE ushort8 as_ushort8(float4 v) {
  union _type_cast_16_b u;
  u._float4 = v;
  return u._ushort8;
}

INLINE OVERLOADABLE char16 as_char16(float4 v) {
  union _type_cast_16_b u;
  u._float4 = v;
  return u._char16;
}

INLINE OVERLOADABLE uchar16 as_uchar16(float4 v) {
  union _type_cast_16_b u;
  u._float4 = v;
  return u._uchar16;
}

INLINE OVERLOADABLE double2 as_double2(float4 v) {
  union _type_cast_16_b u;
  u._float4 = v;
  return u._double2;
}

union _type_cast_32_b {
  long3 _long3;
  long4 _long4;
  ulong3 _ulong3;
  ulong4 _ulong4;
  int8 _int8;
  uint8 _uint8;
  short16 _short16;
  ushort16 _ushort16;
  double3 _double3;
  double4 _double4;
  float8 _float8;
};

INLINE OVERLOADABLE ulong3 as_ulong3(long3 v) {
  union _type_cast_32_b u;
  u._long3 = v;
  return u._ulong3;
}

INLINE OVERLOADABLE ulong4 as_ulong4(long3 v) {
  union _type_cast_32_b u;
  u._long3 = v;
  return u._ulong4;
}

INLINE OVERLOADABLE int8 as_int8(long3 v) {
  union _type_cast_32_b u;
  u._long3 = v;
  return u._int8;
}

INLINE OVERLOADABLE uint8 as_uint8(long3 v) {
  union _type_cast_32_b u;
  u._long3 = v;
  return u._uint8;
}

INLINE OVERLOADABLE short16 as_short16(long3 v) {
  union _type_cast_32_b u;
  u._long3 = v;
  return u._short16;
}

INLINE OVERLOADABLE ushort16 as_ushort16(long3 v) {
  union _type_cast_32_b u;
  u._long3 = v;
  return u._ushort16;
}

INLINE OVERLOADABLE double3 as_double3(long3 v) {
  union _type_cast_32_b u;
  u._long3 = v;
  return u._double3;
}

INLINE OVERLOADABLE double4 as_double4(long3 v) {
  union _type_cast_32_b u;
  u._long3 = v;
  return u._double4;
}

INLINE OVERLOADABLE float8 as_float8(long3 v) {
  union _type_cast_32_b u;
  u._long3 = v;
  return u._float8;
}

INLINE OVERLOADABLE ulong3 as_ulong3(long4 v) {
  union _type_cast_32_b u;
  u._long4 = v;
  return u._ulong3;
}

INLINE OVERLOADABLE ulong4 as_ulong4(long4 v) {
  union _type_cast_32_b u;
  u._long4 = v;
  return u._ulong4;
}

INLINE OVERLOADABLE int8 as_int8(long4 v) {
  union _type_cast_32_b u;
  u._long4 = v;
  return u._int8;
}

INLINE OVERLOADABLE uint8 as_uint8(long4 v) {
  union _type_cast_32_b u;
  u._long4 = v;
  return u._uint8;
}

INLINE OVERLOADABLE short16 as_short16(long4 v) {
  union _type_cast_32_b u;
  u._long4 = v;
  return u._short16;
}

INLINE OVERLOADABLE ushort16 as_ushort16(long4 v) {
  union _type_cast_32_b u;
  u._long4 = v;
  return u._ushort16;
}

INLINE OVERLOADABLE double3 as_double3(long4 v) {
  union _type_cast_32_b u;
  u._long4 = v;
  return u._double3;
}

INLINE OVERLOADABLE double4 as_double4(long4 v) {
  union _type_cast_32_b u;
  u._long4 = v;
  return u._double4;
}

INLINE OVERLOADABLE float8 as_float8(long4 v) {
  union _type_cast_32_b u;
  u._long4 = v;
  return u._float8;
}

INLINE OVERLOADABLE long3 as_long3(ulong3 v) {
  union _type_cast_32_b u;
  u._ulong3 = v;
  return u._long3;
}

INLINE OVERLOADABLE long4 as_long4(ulong3 v) {
  union _type_cast_32_b u;
  u._ulong3 = v;
  return u._long4;
}

INLINE OVERLOADABLE int8 as_int8(ulong3 v) {
  union _type_cast_32_b u;
  u._ulong3 = v;
  return u._int8;
}

INLINE OVERLOADABLE uint8 as_uint8(ulong3 v) {
  union _type_cast_32_b u;
  u._ulong3 = v;
  return u._uint8;
}

INLINE OVERLOADABLE short16 as_short16(ulong3 v) {
  union _type_cast_32_b u;
  u._ulong3 = v;
  return u._short16;
}

INLINE OVERLOADABLE ushort16 as_ushort16(ulong3 v) {
  union _type_cast_32_b u;
  u._ulong3 = v;
  return u._ushort16;
}

INLINE OVERLOADABLE double3 as_double3(ulong3 v) {
  union _type_cast_32_b u;
  u._ulong3 = v;
  return u._double3;
}

INLINE OVERLOADABLE double4 as_double4(ulong3 v) {
  union _type_cast_32_b u;
  u._ulong3 = v;
  return u._double4;
}

INLINE OVERLOADABLE float8 as_float8(ulong3 v) {
  union _type_cast_32_b u;
  u._ulong3 = v;
  return u._float8;
}

INLINE OVERLOADABLE long3 as_long3(ulong4 v) {
  union _type_cast_32_b u;
  u._ulong4 = v;
  return u._long3;
}

INLINE OVERLOADABLE long4 as_long4(ulong4 v) {
  union _type_cast_32_b u;
  u._ulong4 = v;
  return u._long4;
}

INLINE OVERLOADABLE int8 as_int8(ulong4 v) {
  union _type_cast_32_b u;
  u._ulong4 = v;
  return u._int8;
}

INLINE OVERLOADABLE uint8 as_uint8(ulong4 v) {
  union _type_cast_32_b u;
  u._ulong4 = v;
  return u._uint8;
}

INLINE OVERLOADABLE short16 as_short16(ulong4 v) {
  union _type_cast_32_b u;
  u._ulong4 = v;
  return u._short16;
}

INLINE OVERLOADABLE ushort16 as_ushort16(ulong4 v) {
  union _type_cast_32_b u;
  u._ulong4 = v;
  return u._ushort16;
}

INLINE OVERLOADABLE double3 as_double3(ulong4 v) {
  union _type_cast_32_b u;
  u._ulong4 = v;
  return u._double3;
}

INLINE OVERLOADABLE double4 as_double4(ulong4 v) {
  union _type_cast_32_b u;
  u._ulong4 = v;
  return u._double4;
}

INLINE OVERLOADABLE float8 as_float8(ulong4 v) {
  union _type_cast_32_b u;
  u._ulong4 = v;
  return u._float8;
}

INLINE OVERLOADABLE long3 as_long3(int8 v) {
  union _type_cast_32_b u;
  u._int8 = v;
  return u._long3;
}

INLINE OVERLOADABLE long4 as_long4(int8 v) {
  union _type_cast_32_b u;
  u._int8 = v;
  return u._long4;
}

INLINE OVERLOADABLE ulong3 as_ulong3(int8 v) {
  union _type_cast_32_b u;
  u._int8 = v;
  return u._ulong3;
}

INLINE OVERLOADABLE ulong4 as_ulong4(int8 v) {
  union _type_cast_32_b u;
  u._int8 = v;
  return u._ulong4;
}

INLINE OVERLOADABLE uint8 as_uint8(int8 v) {
  union _type_cast_32_b u;
  u._int8 = v;
  return u._uint8;
}

INLINE OVERLOADABLE short16 as_short16(int8 v) {
  union _type_cast_32_b u;
  u._int8 = v;
  return u._short16;
}

INLINE OVERLOADABLE ushort16 as_ushort16(int8 v) {
  union _type_cast_32_b u;
  u._int8 = v;
  return u._ushort16;
}

INLINE OVERLOADABLE double3 as_double3(int8 v) {
  union _type_cast_32_b u;
  u._int8 = v;
  return u._double3;
}

INLINE OVERLOADABLE double4 as_double4(int8 v) {
  union _type_cast_32_b u;
  u._int8 = v;
  return u._double4;
}

INLINE OVERLOADABLE float8 as_float8(int8 v) {
  union _type_cast_32_b u;
  u._int8 = v;
  return u._float8;
}

INLINE OVERLOADABLE long3 as_long3(uint8 v) {
  union _type_cast_32_b u;
  u._uint8 = v;
  return u._long3;
}

INLINE OVERLOADABLE long4 as_long4(uint8 v) {
  union _type_cast_32_b u;
  u._uint8 = v;
  return u._long4;
}

INLINE OVERLOADABLE ulong3 as_ulong3(uint8 v) {
  union _type_cast_32_b u;
  u._uint8 = v;
  return u._ulong3;
}

INLINE OVERLOADABLE ulong4 as_ulong4(uint8 v) {
  union _type_cast_32_b u;
  u._uint8 = v;
  return u._ulong4;
}

INLINE OVERLOADABLE int8 as_int8(uint8 v) {
  union _type_cast_32_b u;
  u._uint8 = v;
  return u._int8;
}

INLINE OVERLOADABLE short16 as_short16(uint8 v) {
  union _type_cast_32_b u;
  u._uint8 = v;
  return u._short16;
}

INLINE OVERLOADABLE ushort16 as_ushort16(uint8 v) {
  union _type_cast_32_b u;
  u._uint8 = v;
  return u._ushort16;
}

INLINE OVERLOADABLE double3 as_double3(uint8 v) {
  union _type_cast_32_b u;
  u._uint8 = v;
  return u._double3;
}

INLINE OVERLOADABLE double4 as_double4(uint8 v) {
  union _type_cast_32_b u;
  u._uint8 = v;
  return u._double4;
}

INLINE OVERLOADABLE float8 as_float8(uint8 v) {
  union _type_cast_32_b u;
  u._uint8 = v;
  return u._float8;
}

INLINE OVERLOADABLE long3 as_long3(short16 v) {
  union _type_cast_32_b u;
  u._short16 = v;
  return u._long3;
}

INLINE OVERLOADABLE long4 as_long4(short16 v) {
  union _type_cast_32_b u;
  u._short16 = v;
  return u._long4;
}

INLINE OVERLOADABLE ulong3 as_ulong3(short16 v) {
  union _type_cast_32_b u;
  u._short16 = v;
  return u._ulong3;
}

INLINE OVERLOADABLE ulong4 as_ulong4(short16 v) {
  union _type_cast_32_b u;
  u._short16 = v;
  return u._ulong4;
}

INLINE OVERLOADABLE int8 as_int8(short16 v) {
  union _type_cast_32_b u;
  u._short16 = v;
  return u._int8;
}

INLINE OVERLOADABLE uint8 as_uint8(short16 v) {
  union _type_cast_32_b u;
  u._short16 = v;
  return u._uint8;
}

INLINE OVERLOADABLE ushort16 as_ushort16(short16 v) {
  union _type_cast_32_b u;
  u._short16 = v;
  return u._ushort16;
}

INLINE OVERLOADABLE double3 as_double3(short16 v) {
  union _type_cast_32_b u;
  u._short16 = v;
  return u._double3;
}

INLINE OVERLOADABLE double4 as_double4(short16 v) {
  union _type_cast_32_b u;
  u._short16 = v;
  return u._double4;
}

INLINE OVERLOADABLE float8 as_float8(short16 v) {
  union _type_cast_32_b u;
  u._short16 = v;
  return u._float8;
}

INLINE OVERLOADABLE long3 as_long3(ushort16 v) {
  union _type_cast_32_b u;
  u._ushort16 = v;
  return u._long3;
}

INLINE OVERLOADABLE long4 as_long4(ushort16 v) {
  union _type_cast_32_b u;
  u._ushort16 = v;
  return u._long4;
}

INLINE OVERLOADABLE ulong3 as_ulong3(ushort16 v) {
  union _type_cast_32_b u;
  u._ushort16 = v;
  return u._ulong3;
}

INLINE OVERLOADABLE ulong4 as_ulong4(ushort16 v) {
  union _type_cast_32_b u;
  u._ushort16 = v;
  return u._ulong4;
}

INLINE OVERLOADABLE int8 as_int8(ushort16 v) {
  union _type_cast_32_b u;
  u._ushort16 = v;
  return u._int8;
}

INLINE OVERLOADABLE uint8 as_uint8(ushort16 v) {
  union _type_cast_32_b u;
  u._ushort16 = v;
  return u._uint8;
}

INLINE OVERLOADABLE short16 as_short16(ushort16 v) {
  union _type_cast_32_b u;
  u._ushort16 = v;
  return u._short16;
}

INLINE OVERLOADABLE double3 as_double3(ushort16 v) {
  union _type_cast_32_b u;
  u._ushort16 = v;
  return u._double3;
}

INLINE OVERLOADABLE double4 as_double4(ushort16 v) {
  union _type_cast_32_b u;
  u._ushort16 = v;
  return u._double4;
}

INLINE OVERLOADABLE float8 as_float8(ushort16 v) {
  union _type_cast_32_b u;
  u._ushort16 = v;
  return u._float8;
}

INLINE OVERLOADABLE long3 as_long3(double3 v) {
  union _type_cast_32_b u;
  u._double3 = v;
  return u._long3;
}

INLINE OVERLOADABLE long4 as_long4(double3 v) {
  union _type_cast_32_b u;
  u._double3 = v;
  return u._long4;
}

INLINE OVERLOADABLE ulong3 as_ulong3(double3 v) {
  union _type_cast_32_b u;
  u._double3 = v;
  return u._ulong3;
}

INLINE OVERLOADABLE ulong4 as_ulong4(double3 v) {
  union _type_cast_32_b u;
  u._double3 = v;
  return u._ulong4;
}

INLINE OVERLOADABLE int8 as_int8(double3 v) {
  union _type_cast_32_b u;
  u._double3 = v;
  return u._int8;
}

INLINE OVERLOADABLE uint8 as_uint8(double3 v) {
  union _type_cast_32_b u;
  u._double3 = v;
  return u._uint8;
}

INLINE OVERLOADABLE short16 as_short16(double3 v) {
  union _type_cast_32_b u;
  u._double3 = v;
  return u._short16;
}

INLINE OVERLOADABLE ushort16 as_ushort16(double3 v) {
  union _type_cast_32_b u;
  u._double3 = v;
  return u._ushort16;
}

INLINE OVERLOADABLE float8 as_float8(double3 v) {
  union _type_cast_32_b u;
  u._double3 = v;
  return u._float8;
}

INLINE OVERLOADABLE long3 as_long3(double4 v) {
  union _type_cast_32_b u;
  u._double4 = v;
  return u._long3;
}

INLINE OVERLOADABLE long4 as_long4(double4 v) {
  union _type_cast_32_b u;
  u._double4 = v;
  return u._long4;
}

INLINE OVERLOADABLE ulong3 as_ulong3(double4 v) {
  union _type_cast_32_b u;
  u._double4 = v;
  return u._ulong3;
}

INLINE OVERLOADABLE ulong4 as_ulong4(double4 v) {
  union _type_cast_32_b u;
  u._double4 = v;
  return u._ulong4;
}

INLINE OVERLOADABLE int8 as_int8(double4 v) {
  union _type_cast_32_b u;
  u._double4 = v;
  return u._int8;
}

INLINE OVERLOADABLE uint8 as_uint8(double4 v) {
  union _type_cast_32_b u;
  u._double4 = v;
  return u._uint8;
}

INLINE OVERLOADABLE short16 as_short16(double4 v) {
  union _type_cast_32_b u;
  u._double4 = v;
  return u._short16;
}

INLINE OVERLOADABLE ushort16 as_ushort16(double4 v) {
  union _type_cast_32_b u;
  u._double4 = v;
  return u._ushort16;
}

INLINE OVERLOADABLE float8 as_float8(double4 v) {
  union _type_cast_32_b u;
  u._double4 = v;
  return u._float8;
}

INLINE OVERLOADABLE long3 as_long3(float8 v) {
  union _type_cast_32_b u;
  u._float8 = v;
  return u._long3;
}

INLINE OVERLOADABLE long4 as_long4(float8 v) {
  union _type_cast_32_b u;
  u._float8 = v;
  return u._long4;
}

INLINE OVERLOADABLE ulong3 as_ulong3(float8 v) {
  union _type_cast_32_b u;
  u._float8 = v;
  return u._ulong3;
}

INLINE OVERLOADABLE ulong4 as_ulong4(float8 v) {
  union _type_cast_32_b u;
  u._float8 = v;
  return u._ulong4;
}

INLINE OVERLOADABLE int8 as_int8(float8 v) {
  union _type_cast_32_b u;
  u._float8 = v;
  return u._int8;
}

INLINE OVERLOADABLE uint8 as_uint8(float8 v) {
  union _type_cast_32_b u;
  u._float8 = v;
  return u._uint8;
}

INLINE OVERLOADABLE short16 as_short16(float8 v) {
  union _type_cast_32_b u;
  u._float8 = v;
  return u._short16;
}

INLINE OVERLOADABLE ushort16 as_ushort16(float8 v) {
  union _type_cast_32_b u;
  u._float8 = v;
  return u._ushort16;
}

INLINE OVERLOADABLE double3 as_double3(float8 v) {
  union _type_cast_32_b u;
  u._float8 = v;
  return u._double3;
}

INLINE OVERLOADABLE double4 as_double4(float8 v) {
  union _type_cast_32_b u;
  u._float8 = v;
  return u._double4;
}

union _type_cast_64_b {
  long8 _long8;
  ulong8 _ulong8;
  int16 _int16;
  uint16 _uint16;
  double8 _double8;
  float16 _float16;
};

INLINE OVERLOADABLE ulong8 as_ulong8(long8 v) {
  union _type_cast_64_b u;
  u._long8 = v;
  return u._ulong8;
}

INLINE OVERLOADABLE int16 as_int16(long8 v) {
  union _type_cast_64_b u;
  u._long8 = v;
  return u._int16;
}

INLINE OVERLOADABLE uint16 as_uint16(long8 v) {
  union _type_cast_64_b u;
  u._long8 = v;
  return u._uint16;
}

INLINE OVERLOADABLE double8 as_double8(long8 v) {
  union _type_cast_64_b u;
  u._long8 = v;
  return u._double8;
}

INLINE OVERLOADABLE float16 as_float16(long8 v) {
  union _type_cast_64_b u;
  u._long8 = v;
  return u._float16;
}

INLINE OVERLOADABLE long8 as_long8(ulong8 v) {
  union _type_cast_64_b u;
  u._ulong8 = v;
  return u._long8;
}

INLINE OVERLOADABLE int16 as_int16(ulong8 v) {
  union _type_cast_64_b u;
  u._ulong8 = v;
  return u._int16;
}

INLINE OVERLOADABLE uint16 as_uint16(ulong8 v) {
  union _type_cast_64_b u;
  u._ulong8 = v;
  return u._uint16;
}

INLINE OVERLOADABLE double8 as_double8(ulong8 v) {
  union _type_cast_64_b u;
  u._ulong8 = v;
  return u._double8;
}

INLINE OVERLOADABLE float16 as_float16(ulong8 v) {
  union _type_cast_64_b u;
  u._ulong8 = v;
  return u._float16;
}

INLINE OVERLOADABLE long8 as_long8(int16 v) {
  union _type_cast_64_b u;
  u._int16 = v;
  return u._long8;
}

INLINE OVERLOADABLE ulong8 as_ulong8(int16 v) {
  union _type_cast_64_b u;
  u._int16 = v;
  return u._ulong8;
}

INLINE OVERLOADABLE uint16 as_uint16(int16 v) {
  union _type_cast_64_b u;
  u._int16 = v;
  return u._uint16;
}

INLINE OVERLOADABLE double8 as_double8(int16 v) {
  union _type_cast_64_b u;
  u._int16 = v;
  return u._double8;
}

INLINE OVERLOADABLE float16 as_float16(int16 v) {
  union _type_cast_64_b u;
  u._int16 = v;
  return u._float16;
}

INLINE OVERLOADABLE long8 as_long8(uint16 v) {
  union _type_cast_64_b u;
  u._uint16 = v;
  return u._long8;
}

INLINE OVERLOADABLE ulong8 as_ulong8(uint16 v) {
  union _type_cast_64_b u;
  u._uint16 = v;
  return u._ulong8;
}

INLINE OVERLOADABLE int16 as_int16(uint16 v) {
  union _type_cast_64_b u;
  u._uint16 = v;
  return u._int16;
}

INLINE OVERLOADABLE double8 as_double8(uint16 v) {
  union _type_cast_64_b u;
  u._uint16 = v;
  return u._double8;
}

INLINE OVERLOADABLE float16 as_float16(uint16 v) {
  union _type_cast_64_b u;
  u._uint16 = v;
  return u._float16;
}

INLINE OVERLOADABLE long8 as_long8(double8 v) {
  union _type_cast_64_b u;
  u._double8 = v;
  return u._long8;
}

INLINE OVERLOADABLE ulong8 as_ulong8(double8 v) {
  union _type_cast_64_b u;
  u._double8 = v;
  return u._ulong8;
}

INLINE OVERLOADABLE int16 as_int16(double8 v) {
  union _type_cast_64_b u;
  u._double8 = v;
  return u._int16;
}

INLINE OVERLOADABLE uint16 as_uint16(double8 v) {
  union _type_cast_64_b u;
  u._double8 = v;
  return u._uint16;
}

INLINE OVERLOADABLE float16 as_float16(double8 v) {
  union _type_cast_64_b u;
  u._double8 = v;
  return u._float16;
}

INLINE OVERLOADABLE long8 as_long8(float16 v) {
  union _type_cast_64_b u;
  u._float16 = v;
  return u._long8;
}

INLINE OVERLOADABLE ulong8 as_ulong8(float16 v) {
  union _type_cast_64_b u;
  u._float16 = v;
  return u._ulong8;
}

INLINE OVERLOADABLE int16 as_int16(float16 v) {
  union _type_cast_64_b u;
  u._float16 = v;
  return u._int16;
}

INLINE OVERLOADABLE uint16 as_uint16(float16 v) {
  union _type_cast_64_b u;
  u._float16 = v;
  return u._uint16;
}

INLINE OVERLOADABLE double8 as_double8(float16 v) {
  union _type_cast_64_b u;
  u._float16 = v;
  return u._double8;
}

union _type_cast_128_b {
  long16 _long16;
  ulong16 _ulong16;
  double16 _double16;
};

INLINE OVERLOADABLE ulong16 as_ulong16(long16 v) {
  union _type_cast_128_b u;
  u._long16 = v;
  return u._ulong16;
}

INLINE OVERLOADABLE double16 as_double16(long16 v) {
  union _type_cast_128_b u;
  u._long16 = v;
  return u._double16;
}

INLINE OVERLOADABLE long16 as_long16(ulong16 v) {
  union _type_cast_128_b u;
  u._ulong16 = v;
  return u._long16;
}

INLINE OVERLOADABLE double16 as_double16(ulong16 v) {
  union _type_cast_128_b u;
  u._ulong16 = v;
  return u._double16;
}

INLINE OVERLOADABLE long16 as_long16(double16 v) {
  union _type_cast_128_b u;
  u._double16 = v;
  return u._long16;
}

INLINE OVERLOADABLE ulong16 as_ulong16(double16 v) {
  union _type_cast_128_b u;
  u._double16 = v;
  return u._ulong16;
}

