[cfe-dev] casting vector types

Mattias Holm holm at liacs.nl
Wed Oct 13 07:07:55 PDT 2010


I do not think this is a bug, this has been default behaviour in GCC and 
Clang for some time. IIRC, the rule is that vector casts are bitwise 
conversions, and sizeof(float3) != sizeof(short3).

You should be able to do something like this (assuming you use the 
ext_vector_extension):

typedef float __attribute__((ext_vector_type(3))) float3;
typedef short __attribute__((ext_vector_type(3))) short3;

float3 a;
short3 b;
a = (float3){(float)b.x, (float)b.y, (float)b.z};

/ Mattias

On 2010-10-10 00:37, Jochen Wilhelmy wrote:
> Hi!
>
> If I have float a; short b; then a = (float)b; works.
> If I have float3 a; short3 b; then for a = (float3)b; I get the
> following error:
>
> error: C-style cast from vector 'short3' to vector 'float3' of different
> size
>
> Is this a bug or correct and if it is correct how do I cast from short3
> to float3?
>
> -Jochen





More information about the cfe-dev mailing list