From 3fbe2fbe582bc42630c0b6b7b79ce2dc2d876b99 Mon Sep 17 00:00:00 2001 From: Zhigang Gong Date: Mon, 28 Oct 2013 17:33:06 +0800 Subject: [PATCH] GBE: fix 3-component vector's astype macros. According to OpenCL spec, For 3-component vector data types, the size of the data type is 4 * sizeof(component). This means that a 3-component vector data type will be aligned to a 4 * sizeof(component) boundary. The vload3 and vstore3 built-in functions can be used to read and write, respectively, 3-component vector data types from an array of packed scalar data type. Signed-off-by: Zhigang Gong Reviewed-by: "Xing, Homer" --- backend/src/gen_as.sh | 24 +- backend/src/ocl_as.h | 1285 ++++++++++++++++++++++++++++++++++++++++++------- 2 files changed, 1126 insertions(+), 183 deletions(-) diff --git a/backend/src/gen_as.sh b/backend/src/gen_as.sh index 626e6ec..7dea15d 100755 --- a/backend/src/gen_as.sh +++ b/backend/src/gen_as.sh @@ -6,6 +6,9 @@ for type in $TYPES; do size=`IFS=:; set -- dummy $type; echo $3` for vector_length in $VECTOR_LENGTHS; do + if test $vector_length -eq 3; then + continue; + fi union_sizes="$union_sizes `expr $vector_length \* $size`" done done @@ -21,7 +24,12 @@ for union_size in $union_sizes; do basetype=`IFS=:; set -- dummy $type; echo $2` basesize=`IFS=:; set -- dummy $type; echo $3` for vector_length in $VECTOR_LENGTHS; do - vector_size_in_union="`expr $vector_length \* $basesize`" + if test $vector_length -eq 3; then + vector_size_length="4" + else + vector_size_length=$vector_length; + fi + vector_size_in_union="`expr $vector_size_length \* $basesize`" if test $union_size -ne $vector_size_in_union; then continue fi @@ -43,7 +51,12 @@ for union_size in $union_sizes; do fbasetype=`IFS=:; set -- dummy $ftype; echo $2` fbasesize=`IFS=:; set -- dummy $ftype; echo $3` for fvector_length in $VECTOR_LENGTHS; do - fvector_size_in_union="`expr $fvector_length \* $fbasesize`" + if test $fvector_length -eq 3; then + fvector_size_length="4" + else + fvector_size_length=$fvector_length; + fi + fvector_size_in_union="`expr $fvector_size_length \* $fbasesize`" if test $union_size -ne $fvector_size_in_union; then continue fi @@ -59,7 +72,12 @@ for union_size in $union_sizes; do continue fi for tvector_length in $VECTOR_LENGTHS; do - tvector_size_in_union="`expr $tvector_length \* $tbasesize`" + if test $tvector_length -eq 3; then + tvector_size_length="4" + else + tvector_size_length=$tvector_length; + fi + tvector_size_in_union="`expr $tvector_size_length \* $tbasesize`" if test $union_size -ne $tvector_size_in_union; then continue fi diff --git a/backend/src/ocl_as.h b/backend/src/ocl_as.h index af98d53..692e892 100644 --- a/backend/src/ocl_as.h +++ b/backend/src/ocl_as.h @@ -96,29 +96,14 @@ INLINE OVERLOADABLE char2 as_char2(uchar2 v) { return u._char2; } -union _type_cast_3_b { - char3 _char3; - uchar3 _uchar3; -}; - -INLINE OVERLOADABLE uchar3 as_uchar3(char3 v) { - union _type_cast_3_b u; - u._char3 = v; - return u._uchar3; -} - -INLINE OVERLOADABLE char3 as_char3(uchar3 v) { - union _type_cast_3_b u; - u._uchar3 = v; - return u._char3; -} - union _type_cast_4_b { int _int; uint _uint; short2 _short2; ushort2 _ushort2; + char3 _char3; char4 _char4; + uchar3 _uchar3; uchar4 _uchar4; float _float; }; @@ -141,12 +126,24 @@ INLINE OVERLOADABLE ushort2 as_ushort2(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; @@ -177,12 +174,24 @@ INLINE OVERLOADABLE ushort2 as_ushort2(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; @@ -213,12 +222,24 @@ INLINE OVERLOADABLE ushort2 as_ushort2(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; @@ -249,12 +270,24 @@ INLINE OVERLOADABLE short2 as_short2(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; @@ -267,6 +300,48 @@ INLINE OVERLOADABLE float as_float(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; @@ -291,6 +366,12 @@ INLINE OVERLOADABLE ushort2 as_ushort2(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; @@ -303,6 +384,48 @@ INLINE OVERLOADABLE float as_float(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; @@ -327,6 +450,12 @@ INLINE OVERLOADABLE ushort2 as_ushort2(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; @@ -363,33 +492,28 @@ INLINE OVERLOADABLE ushort2 as_ushort2(float v) { return u._ushort2; } -INLINE OVERLOADABLE char4 as_char4(float v) { +INLINE OVERLOADABLE char3 as_char3(float v) { union _type_cast_4_b u; u._float = v; - return u._char4; + return u._char3; } -INLINE OVERLOADABLE uchar4 as_uchar4(float v) { +INLINE OVERLOADABLE char4 as_char4(float v) { union _type_cast_4_b u; u._float = v; - return u._uchar4; + return u._char4; } -union _type_cast_6_b { - short3 _short3; - ushort3 _ushort3; -}; - -INLINE OVERLOADABLE ushort3 as_ushort3(short3 v) { - union _type_cast_6_b u; - u._short3 = v; - return u._ushort3; +INLINE OVERLOADABLE uchar3 as_uchar3(float v) { + union _type_cast_4_b u; + u._float = v; + return u._uchar3; } -INLINE OVERLOADABLE short3 as_short3(ushort3 v) { - union _type_cast_6_b u; - u._ushort3 = v; - return u._short3; +INLINE OVERLOADABLE uchar4 as_uchar4(float v) { + union _type_cast_4_b u; + u._float = v; + return u._uchar4; } union _type_cast_8_b { @@ -397,7 +521,9 @@ union _type_cast_8_b { ulong _ulong; int2 _int2; uint2 _uint2; + short3 _short3; short4 _short4; + ushort3 _ushort3; ushort4 _ushort4; char8 _char8; uchar8 _uchar8; @@ -423,12 +549,24 @@ INLINE OVERLOADABLE uint2 as_uint2(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; @@ -477,12 +615,24 @@ INLINE OVERLOADABLE uint2 as_uint2(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; @@ -531,12 +681,24 @@ INLINE OVERLOADABLE uint2 as_uint2(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; @@ -585,12 +747,24 @@ INLINE OVERLOADABLE int2 as_int2(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; @@ -621,88 +795,220 @@ INLINE OVERLOADABLE float2 as_float2(uint2 v) { return u._float2; } -INLINE OVERLOADABLE long as_long(short4 v) { +INLINE OVERLOADABLE long as_long(short3 v) { union _type_cast_8_b u; - u._short4 = v; + u._short3 = v; return u._long; } -INLINE OVERLOADABLE ulong as_ulong(short4 v) { +INLINE OVERLOADABLE ulong as_ulong(short3 v) { union _type_cast_8_b u; - u._short4 = v; + u._short3 = v; return u._ulong; } -INLINE OVERLOADABLE int2 as_int2(short4 v) { +INLINE OVERLOADABLE int2 as_int2(short3 v) { union _type_cast_8_b u; - u._short4 = v; + u._short3 = v; return u._int2; } -INLINE OVERLOADABLE uint2 as_uint2(short4 v) { +INLINE OVERLOADABLE uint2 as_uint2(short3 v) { union _type_cast_8_b u; - u._short4 = v; + u._short3 = v; return u._uint2; } -INLINE OVERLOADABLE ushort4 as_ushort4(short4 v) { +INLINE OVERLOADABLE ushort3 as_ushort3(short3 v) { union _type_cast_8_b u; - u._short4 = v; + 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(short4 v) { +INLINE OVERLOADABLE char8 as_char8(short3 v) { union _type_cast_8_b u; - u._short4 = v; + u._short3 = v; return u._char8; } -INLINE OVERLOADABLE uchar8 as_uchar8(short4 v) { +INLINE OVERLOADABLE uchar8 as_uchar8(short3 v) { union _type_cast_8_b u; - u._short4 = v; + u._short3 = v; return u._uchar8; } -INLINE OVERLOADABLE double as_double(short4 v) { +INLINE OVERLOADABLE double as_double(short3 v) { union _type_cast_8_b u; - u._short4 = v; + u._short3 = v; return u._double; } -INLINE OVERLOADABLE float2 as_float2(short4 v) { +INLINE OVERLOADABLE float2 as_float2(short3 v) { union _type_cast_8_b u; - u._short4 = v; + u._short3 = v; return u._float2; } -INLINE OVERLOADABLE long as_long(ushort4 v) { +INLINE OVERLOADABLE long as_long(short4 v) { union _type_cast_8_b u; - u._ushort4 = v; + u._short4 = v; return u._long; } -INLINE OVERLOADABLE ulong as_ulong(ushort4 v) { +INLINE OVERLOADABLE ulong as_ulong(short4 v) { union _type_cast_8_b u; - u._ushort4 = v; + u._short4 = v; return u._ulong; } -INLINE OVERLOADABLE int2 as_int2(ushort4 v) { +INLINE OVERLOADABLE int2 as_int2(short4 v) { union _type_cast_8_b u; - u._ushort4 = v; + u._short4 = v; return u._int2; } -INLINE OVERLOADABLE uint2 as_uint2(ushort4 v) { +INLINE OVERLOADABLE uint2 as_uint2(short4 v) { union _type_cast_8_b u; - u._ushort4 = v; + u._short4 = v; return u._uint2; } -INLINE OVERLOADABLE short4 as_short4(ushort4 v) { +INLINE OVERLOADABLE ushort3 as_ushort3(short4 v) { union _type_cast_8_b u; - u._ushort4 = v; - return u._short4; + 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) { @@ -753,12 +1059,24 @@ INLINE OVERLOADABLE uint2 as_uint2(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; @@ -807,12 +1125,24 @@ INLINE OVERLOADABLE uint2 as_uint2(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; @@ -861,12 +1191,24 @@ INLINE OVERLOADABLE uint2 as_uint2(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; @@ -915,12 +1257,24 @@ INLINE OVERLOADABLE uint2 as_uint2(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; @@ -945,58 +1299,19 @@ INLINE OVERLOADABLE double as_double(float2 v) { return u._double; } -union _type_cast_12_b { - int3 _int3; - uint3 _uint3; - float3 _float3; -}; - -INLINE OVERLOADABLE uint3 as_uint3(int3 v) { - union _type_cast_12_b u; - u._int3 = v; - return u._uint3; -} - -INLINE OVERLOADABLE float3 as_float3(int3 v) { - union _type_cast_12_b u; - u._int3 = v; - return u._float3; -} - -INLINE OVERLOADABLE int3 as_int3(uint3 v) { - union _type_cast_12_b u; - u._uint3 = v; - return u._int3; -} - -INLINE OVERLOADABLE float3 as_float3(uint3 v) { - union _type_cast_12_b u; - u._uint3 = v; - return u._float3; -} - -INLINE OVERLOADABLE int3 as_int3(float3 v) { - union _type_cast_12_b u; - u._float3 = v; - return u._int3; -} - -INLINE OVERLOADABLE uint3 as_uint3(float3 v) { - union _type_cast_12_b u; - u._float3 = v; - return u._uint3; -} - 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; }; @@ -1006,12 +1321,24 @@ INLINE OVERLOADABLE ulong2 as_ulong2(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; @@ -1048,6 +1375,12 @@ INLINE OVERLOADABLE double2 as_double2(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; @@ -1060,12 +1393,24 @@ INLINE OVERLOADABLE long2 as_long2(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; @@ -1074,91 +1419,241 @@ INLINE OVERLOADABLE uint4 as_uint4(ulong2 v) { INLINE OVERLOADABLE short8 as_short8(ulong2 v) { union _type_cast_16_b u; - u._ulong2 = v; + 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(ulong2 v) { +INLINE OVERLOADABLE ushort8 as_ushort8(int4 v) { union _type_cast_16_b u; - u._ulong2 = v; + u._int4 = v; return u._ushort8; } -INLINE OVERLOADABLE char16 as_char16(ulong2 v) { +INLINE OVERLOADABLE char16 as_char16(int4 v) { union _type_cast_16_b u; - u._ulong2 = v; + u._int4 = v; return u._char16; } -INLINE OVERLOADABLE uchar16 as_uchar16(ulong2 v) { +INLINE OVERLOADABLE uchar16 as_uchar16(int4 v) { union _type_cast_16_b u; - u._ulong2 = v; + u._int4 = v; return u._uchar16; } -INLINE OVERLOADABLE double2 as_double2(ulong2 v) { +INLINE OVERLOADABLE double2 as_double2(int4 v) { union _type_cast_16_b u; - u._ulong2 = v; + u._int4 = v; return u._double2; } -INLINE OVERLOADABLE float4 as_float4(ulong2 v) { +INLINE OVERLOADABLE float3 as_float3(int4 v) { union _type_cast_16_b u; - u._ulong2 = v; - return u._float4; + u._int4 = v; + return u._float3; } -INLINE OVERLOADABLE long2 as_long2(int4 v) { +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(int4 v) { +INLINE OVERLOADABLE ulong2 as_ulong2(uint3 v) { union _type_cast_16_b u; - u._int4 = v; + u._uint3 = v; return u._ulong2; } -INLINE OVERLOADABLE uint4 as_uint4(int4 v) { +INLINE OVERLOADABLE int3 as_int3(uint3 v) { union _type_cast_16_b u; - u._int4 = v; - return u._uint4; + u._uint3 = v; + return u._int3; } -INLINE OVERLOADABLE short8 as_short8(int4 v) { +INLINE OVERLOADABLE int4 as_int4(uint3 v) { union _type_cast_16_b u; - u._int4 = v; + 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(int4 v) { +INLINE OVERLOADABLE ushort8 as_ushort8(uint3 v) { union _type_cast_16_b u; - u._int4 = v; + u._uint3 = v; return u._ushort8; } -INLINE OVERLOADABLE char16 as_char16(int4 v) { +INLINE OVERLOADABLE char16 as_char16(uint3 v) { union _type_cast_16_b u; - u._int4 = v; + u._uint3 = v; return u._char16; } -INLINE OVERLOADABLE uchar16 as_uchar16(int4 v) { +INLINE OVERLOADABLE uchar16 as_uchar16(uint3 v) { union _type_cast_16_b u; - u._int4 = v; + u._uint3 = v; return u._uchar16; } -INLINE OVERLOADABLE double2 as_double2(int4 v) { +INLINE OVERLOADABLE double2 as_double2(uint3 v) { union _type_cast_16_b u; - u._int4 = v; + u._uint3 = v; return u._double2; } -INLINE OVERLOADABLE float4 as_float4(int4 v) { +INLINE OVERLOADABLE float3 as_float3(uint3 v) { union _type_cast_16_b u; - u._int4 = v; + 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; } @@ -1174,6 +1669,12 @@ INLINE OVERLOADABLE ulong2 as_ulong2(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; @@ -1210,6 +1711,12 @@ INLINE OVERLOADABLE double2 as_double2(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; @@ -1228,12 +1735,24 @@ INLINE OVERLOADABLE ulong2 as_ulong2(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; @@ -1264,6 +1783,12 @@ INLINE OVERLOADABLE double2 as_double2(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; @@ -1282,12 +1807,24 @@ INLINE OVERLOADABLE ulong2 as_ulong2(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; @@ -1318,6 +1855,12 @@ INLINE OVERLOADABLE double2 as_double2(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; @@ -1336,12 +1879,24 @@ INLINE OVERLOADABLE ulong2 as_ulong2(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; @@ -1372,6 +1927,12 @@ INLINE OVERLOADABLE double2 as_double2(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; @@ -1390,12 +1951,24 @@ INLINE OVERLOADABLE ulong2 as_ulong2(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; @@ -1426,6 +1999,12 @@ INLINE OVERLOADABLE double2 as_double2(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; @@ -1444,12 +2023,24 @@ INLINE OVERLOADABLE ulong2 as_ulong2(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; @@ -1480,12 +2071,84 @@ INLINE OVERLOADABLE uchar16 as_uchar16(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; @@ -1498,12 +2161,24 @@ INLINE OVERLOADABLE ulong2 as_ulong2(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; @@ -1528,71 +2203,92 @@ INLINE OVERLOADABLE char16 as_char16(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 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 double2 as_double2(float4 v) { - union _type_cast_16_b u; - u._float4 = v; - return u._double2; +INLINE OVERLOADABLE uint8 as_uint8(long3 v) { + union _type_cast_32_b u; + u._long3 = v; + return u._uint8; } -union _type_cast_24_b { - long3 _long3; - ulong3 _ulong3; - double3 _double3; -}; +INLINE OVERLOADABLE short16 as_short16(long3 v) { + union _type_cast_32_b u; + u._long3 = v; + return u._short16; +} -INLINE OVERLOADABLE ulong3 as_ulong3(long3 v) { - union _type_cast_24_b u; +INLINE OVERLOADABLE ushort16 as_ushort16(long3 v) { + union _type_cast_32_b u; u._long3 = v; - return u._ulong3; + return u._ushort16; } INLINE OVERLOADABLE double3 as_double3(long3 v) { - union _type_cast_24_b u; + union _type_cast_32_b u; u._long3 = v; return u._double3; } -INLINE OVERLOADABLE long3 as_long3(ulong3 v) { - union _type_cast_24_b u; - u._ulong3 = v; - return u._long3; -} - -INLINE OVERLOADABLE double3 as_double3(ulong3 v) { - union _type_cast_24_b u; - u._ulong3 = 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 long3 as_long3(double3 v) { - union _type_cast_24_b u; - u._double3 = v; - return u._long3; +INLINE OVERLOADABLE float8 as_float8(long3 v) { + union _type_cast_32_b u; + u._long3 = v; + return u._float8; } -INLINE OVERLOADABLE ulong3 as_ulong3(double3 v) { - union _type_cast_24_b u; - u._double3 = v; +INLINE OVERLOADABLE ulong3 as_ulong3(long4 v) { + union _type_cast_32_b u; + u._long4 = v; return u._ulong3; } -union _type_cast_32_b { - long4 _long4; - ulong4 _ulong4; - int8 _int8; - uint8 _uint8; - short16 _short16; - ushort16 _ushort16; - double4 _double4; - float8 _float8; -}; - INLINE OVERLOADABLE ulong4 as_ulong4(long4 v) { union _type_cast_32_b u; u._long4 = v; @@ -1623,6 +2319,12 @@ INLINE OVERLOADABLE ushort16 as_ushort16(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; @@ -1635,6 +2337,66 @@ INLINE OVERLOADABLE float8 as_float8(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; @@ -1665,6 +2427,12 @@ INLINE OVERLOADABLE ushort16 as_ushort16(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; @@ -1677,12 +2445,24 @@ INLINE OVERLOADABLE float8 as_float8(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; @@ -1707,6 +2487,12 @@ INLINE OVERLOADABLE ushort16 as_ushort16(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; @@ -1719,12 +2505,24 @@ INLINE OVERLOADABLE float8 as_float8(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; @@ -1749,6 +2547,12 @@ INLINE OVERLOADABLE ushort16 as_ushort16(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; @@ -1761,12 +2565,24 @@ INLINE OVERLOADABLE float8 as_float8(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; @@ -1791,6 +2607,12 @@ INLINE OVERLOADABLE ushort16 as_ushort16(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; @@ -1803,12 +2625,24 @@ INLINE OVERLOADABLE float8 as_float8(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; @@ -1833,6 +2667,12 @@ INLINE OVERLOADABLE short16 as_short16(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; @@ -1845,12 +2685,78 @@ INLINE OVERLOADABLE float8 as_float8(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; @@ -1887,12 +2793,24 @@ INLINE OVERLOADABLE float8 as_float8(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; @@ -1923,6 +2841,12 @@ INLINE OVERLOADABLE ushort16 as_ushort16(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; @@ -2159,3 +3083,4 @@ INLINE OVERLOADABLE ulong16 as_ulong16(double16 v) { u._double16 = v; return u._ulong16; } + -- 2.7.4