[Beignet] [PATCH] Generate all supported as_* functions

Zhigang Gong zhigang.gong at linux.intel.com
Thu May 16 21:05:28 PDT 2013


Simon,

Nice work. One comment,  as the ocl_stdlib.h is already too large, and
this patch almost double its size. Could you consider to put the generated
part in a separated header file?

On Mon, May 13, 2013 at 10:43:34PM +0200, Simon Richter wrote:
> This adds support for all type conversions currently possible.
> 
> The conversion functions can be updated by invoking the
> update_conversions.sh script.
> ---
>  backend/src/gen_conversions.sh    |   89 +++
>  backend/src/ocl_stdlib.h          | 1138 ++++++++++++++++++++++++++++++++++++-
>  backend/src/update_conversions.sh |   11 +
>  3 files changed, 1231 insertions(+), 7 deletions(-)
>  create mode 100755 backend/src/gen_conversions.sh
>  create mode 100755 backend/src/update_conversions.sh
> 
> diff --git a/backend/src/gen_conversions.sh b/backend/src/gen_conversions.sh
> new file mode 100755
> index 0000000..50a3668
> --- /dev/null
> +++ b/backend/src/gen_conversions.sh
> @@ -0,0 +1,89 @@
> +#! /bin/sh -e
> +
> +# Supported base types and their lengths
> +TYPES="int:4 uint:4 short:2 ushort:2 char:1 uchar:1 float:4"
> +
> +# Supported vector lengths
> +VECTOR_LENGTHS="1 2 3 4 8 16"
> +
> +## No user serviceable parts below here
> +
> +# Generate list of union sizes
> +for type in $TYPES; do
> +        size=`IFS=:; set -- dummy $type; echo $3`
> +        for vector_length in $VECTOR_LENGTHS; do
> +                union_sizes="$union_sizes `expr $vector_length \* $size`"
> +        done
> +done
> +union_sizes="`echo $union_sizes | tr ' ' '\n' | sort -n | uniq`"
> +
> +# For each union size
> +for union_size in $union_sizes; do
> +
> +        # Define an union that contains all vector types that have the same size as the union
> +        unionname="union _type_cast_${union_size}_b"
> +        echo "$unionname {"
> +        for type in $TYPES; 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 $union_size -ne $vector_size_in_union; then
> +                                continue
> +                        fi
> +                        if test $vector_length -eq 1; then
> +                                vectortype=$basetype
> +                        else
> +                                vectortype=$basetype$vector_length
> +                        fi
> +                        echo "  $vectortype _$vectortype;"
> +                done
> +                
> +        done
> +        echo "};"
> +        echo
> +
> +        # For each tuple of vector types that has the same size as the current union size,
> +        # define an as_* function that converts types without changing binary representation.
> +        for ftype in $TYPES; 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 $union_size -ne $fvector_size_in_union; then
> +                                continue
> +                        fi
> +                        if test $fvector_length -eq 1; then
> +                                fvectortype=$fbasetype
> +                        else
> +                                fvectortype=$fbasetype$fvector_length
> +                        fi
> +                        for ttype in $TYPES; do
> +                                tbasetype=`IFS=:; set -- dummy $ttype; echo $2`
> +                                tbasesize=`IFS=:; set -- dummy $ttype; echo $3`
> +                                if test $fbasetype = $tbasetype; then
> +                                        continue
> +                                fi
> +                                for tvector_length in $VECTOR_LENGTHS; do
> +                                        tvector_size_in_union="`expr $tvector_length \* $tbasesize`"
> +                                        if test $union_size -ne $tvector_size_in_union; then
> +                                                continue
> +                                        fi
> +                                        if test $tvector_length -eq 1; then
> +                                                tvectortype=$tbasetype
> +                                        else
> +                                                tvectortype=$tbasetype$tvector_length
> +                                        fi
> +                                        echo "INLINE OVERLOADABLE $tvectortype as_$tvectortype($fvectortype v) {"
> +                                        echo "  $unionname u;"
> +                                        echo "  u._$fvectortype = v;"
> +                                        echo "  return u._$tvectortype;"
> +                                        echo "}"
> +                                        echo
> +                                done
> +                        done
> +                done
> +                
> +        done
> +
> +done
> diff --git a/backend/src/ocl_stdlib.h b/backend/src/ocl_stdlib.h
> index 4c0d39c..f52b5bd 100644
> --- a/backend/src/ocl_stdlib.h
> +++ b/backend/src/ocl_stdlib.h
> @@ -79,18 +79,1142 @@ struct _image3d_t;
>  typedef __texture struct _image3d_t* image3d_t;
>  typedef __sampler uint* sampler_t;
>  typedef size_t event_t;
> +
>  /////////////////////////////////////////////////////////////////////////////
>  // OpenCL conversions & type casting
>  /////////////////////////////////////////////////////////////////////////////
> -union type_cast_4_b {
> -  float f;
> -  uchar4 u4;
> +
> +// ##BEGIN_CONVERSIONS##
> +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;
>  };
> -uchar4 INLINE_OVERLOADABLE as_uchar4(float f) {
> -    union type_cast_4_b u;
> -    u.f = f;
> -    return u.u4;
> +
> +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_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;
> +  char4 _char4;
> +  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 char4 as_char4(int v) {
> +  union _type_cast_4_b u;
> +  u._int = v;
> +  return u._char4;
> +}
> +
> +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 char4 as_char4(uint v) {
> +  union _type_cast_4_b u;
> +  u._uint = v;
> +  return u._char4;
> +}
> +
> +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 char4 as_char4(short2 v) {
> +  union _type_cast_4_b u;
> +  u._short2 = v;
> +  return u._char4;
> +}
> +
> +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 char4 as_char4(ushort2 v) {
> +  union _type_cast_4_b u;
> +  u._ushort2 = v;
> +  return u._char4;
> +}
> +
> +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(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 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(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 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 char4 as_char4(float v) {
> +  union _type_cast_4_b u;
> +  u._float = v;
> +  return u._char4;
> +}
> +
> +INLINE OVERLOADABLE uchar4 as_uchar4(float v) {
> +  union _type_cast_4_b u;
> +  u._float = v;
> +  return u._uchar4;
> +}
> +
> +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 short3 as_short3(ushort3 v) {
> +  union _type_cast_6_b u;
> +  u._ushort3 = v;
> +  return u._short3;
> +}
> +
> +union _type_cast_8_b {
> +  int2 _int2;
> +  uint2 _uint2;
> +  short4 _short4;
> +  ushort4 _ushort4;
> +  char8 _char8;
> +  uchar8 _uchar8;
> +  float2 _float2;
> +};
> +
> +INLINE OVERLOADABLE uint2 as_uint2(int2 v) {
> +  union _type_cast_8_b u;
> +  u._int2 = v;
> +  return u._uint2;
> +}
> +
> +INLINE OVERLOADABLE short4 as_short4(int2 v) {
> +  union _type_cast_8_b u;
> +  u._int2 = v;
> +  return u._short4;
> +}
> +
> +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 float2 as_float2(int2 v) {
> +  union _type_cast_8_b u;
> +  u._int2 = v;
> +  return u._float2;
> +}
> +
> +INLINE OVERLOADABLE int2 as_int2(uint2 v) {
> +  union _type_cast_8_b u;
> +  u._uint2 = v;
> +  return u._int2;
> +}
> +
> +INLINE OVERLOADABLE short4 as_short4(uint2 v) {
> +  union _type_cast_8_b u;
> +  u._uint2 = v;
> +  return u._short4;
> +}
> +
> +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 float2 as_float2(uint2 v) {
> +  union _type_cast_8_b u;
> +  u._uint2 = v;
> +  return u._float2;
> +}
> +
> +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 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 float2 as_float2(short4 v) {
> +  union _type_cast_8_b u;
> +  u._short4 = v;
> +  return u._float2;
> +}
> +
> +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 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 float2 as_float2(ushort4 v) {
> +  union _type_cast_8_b u;
> +  u._ushort4 = v;
> +  return u._float2;
> +}
> +
> +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 short4 as_short4(char8 v) {
> +  union _type_cast_8_b u;
> +  u._char8 = v;
> +  return u._short4;
> +}
> +
> +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 float2 as_float2(char8 v) {
> +  union _type_cast_8_b u;
> +  u._char8 = v;
> +  return u._float2;
> +}
> +
> +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 short4 as_short4(uchar8 v) {
> +  union _type_cast_8_b u;
> +  u._uchar8 = v;
> +  return u._short4;
> +}
> +
> +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 float2 as_float2(uchar8 v) {
> +  union _type_cast_8_b u;
> +  u._uchar8 = v;
> +  return u._float2;
> +}
> +
> +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 short4 as_short4(float2 v) {
> +  union _type_cast_8_b u;
> +  u._float2 = v;
> +  return u._short4;
> +}
> +
> +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;
> +}
> +
> +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 {
> +  int4 _int4;
> +  uint4 _uint4;
> +  short8 _short8;
> +  ushort8 _ushort8;
> +  char16 _char16;
> +  uchar16 _uchar16;
> +  float4 _float4;
> +};
> +
> +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 float4 as_float4(int4 v) {
> +  union _type_cast_16_b u;
> +  u._int4 = v;
> +  return u._float4;
> +}
> +
> +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 float4 as_float4(uint4 v) {
> +  union _type_cast_16_b u;
> +  u._uint4 = v;
> +  return u._float4;
> +}
> +
> +INLINE OVERLOADABLE int4 as_int4(short8 v) {
> +  union _type_cast_16_b u;
> +  u._short8 = v;
> +  return u._int4;
> +}
> +
> +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 float4 as_float4(short8 v) {
> +  union _type_cast_16_b u;
> +  u._short8 = v;
> +  return u._float4;
> +}
> +
> +INLINE OVERLOADABLE int4 as_int4(ushort8 v) {
> +  union _type_cast_16_b u;
> +  u._ushort8 = v;
> +  return u._int4;
> +}
> +
> +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 float4 as_float4(ushort8 v) {
> +  union _type_cast_16_b u;
> +  u._ushort8 = v;
> +  return u._float4;
> +}
> +
> +INLINE OVERLOADABLE int4 as_int4(char16 v) {
> +  union _type_cast_16_b u;
> +  u._char16 = v;
> +  return u._int4;
> +}
> +
> +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 float4 as_float4(char16 v) {
> +  union _type_cast_16_b u;
> +  u._char16 = v;
> +  return u._float4;
> +}
> +
> +INLINE OVERLOADABLE int4 as_int4(uchar16 v) {
> +  union _type_cast_16_b u;
> +  u._uchar16 = v;
> +  return u._int4;
> +}
> +
> +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 float4 as_float4(uchar16 v) {
> +  union _type_cast_16_b u;
> +  u._uchar16 = v;
> +  return u._float4;
> +}
> +
> +INLINE OVERLOADABLE int4 as_int4(float4 v) {
> +  union _type_cast_16_b u;
> +  u._float4 = v;
> +  return u._int4;
> +}
> +
> +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;
> +}
> +
> +union _type_cast_32_b {
> +  int8 _int8;
> +  uint8 _uint8;
> +  short16 _short16;
> +  ushort16 _ushort16;
> +  float8 _float8;
> +};
> +
> +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 float8 as_float8(int8 v) {
> +  union _type_cast_32_b u;
> +  u._int8 = v;
> +  return u._float8;
> +}
> +
> +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 float8 as_float8(uint8 v) {
> +  union _type_cast_32_b u;
> +  u._uint8 = v;
> +  return u._float8;
> +}
> +
> +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 float8 as_float8(short16 v) {
> +  union _type_cast_32_b u;
> +  u._short16 = v;
> +  return u._float8;
> +}
> +
> +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 float8 as_float8(ushort16 v) {
> +  union _type_cast_32_b u;
> +  u._ushort16 = v;
> +  return u._float8;
> +}
> +
> +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;
> +}
> +
> +union _type_cast_64_b {
> +  int16 _int16;
> +  uint16 _uint16;
> +  float16 _float16;
> +};
> +
> +INLINE OVERLOADABLE uint16 as_uint16(int16 v) {
> +  union _type_cast_64_b u;
> +  u._int16 = v;
> +  return u._uint16;
> +}
> +
> +INLINE OVERLOADABLE float16 as_float16(int16 v) {
> +  union _type_cast_64_b u;
> +  u._int16 = v;
> +  return u._float16;
> +}
> +
> +INLINE OVERLOADABLE int16 as_int16(uint16 v) {
> +  union _type_cast_64_b u;
> +  u._uint16 = v;
> +  return u._int16;
> +}
> +
> +INLINE OVERLOADABLE float16 as_float16(uint16 v) {
> +  union _type_cast_64_b u;
> +  u._uint16 = v;
> +  return u._float16;
> +}
> +
> +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;
> +}
> +
> +// ##END_CONVERSIONS##
> +
>  #define DEF(type, n, type2) type##n INLINE_OVERLOADABLE convert_##type##n(type2##n d) { \
>      return (type##n)((type)(d.s0), (type)(d.s1), (type)(d.s2), (type)(d.s3)); \
>   }
> diff --git a/backend/src/update_conversions.sh b/backend/src/update_conversions.sh
> new file mode 100755
> index 0000000..bd9099f
> --- /dev/null
> +++ b/backend/src/update_conversions.sh
> @@ -0,0 +1,11 @@
> +#! /bin/sh -e
> +
> +STDLIB_HEADER=ocl_stdlib.h
> +
> +exec >$STDLIB_HEADER.tmp
> +sed -n -e '1,/##BEGIN_CONVERSIONS##/p' $STDLIB_HEADER
> +./gen_conversions.sh
> +sed -n -e '/##END_CONVERSIONS##/,$p' $STDLIB_HEADER
> +exec >&2
> +
> +mv $STDLIB_HEADER.tmp $STDLIB_HEADER
> -- 
> 1.7.10.4
> 
> _______________________________________________
> Beignet mailing list
> Beignet at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/beignet


More information about the Beignet mailing list