Casting scalars to vectors

According to the AltiVec standard (section 2.4.6 in http://www.freescale.com/files/32bit/doc/ref_manual/ALTIVECPIM.pdf), casting a scalar to a vector is illegal, yet gcc seems to support it, as seen in many of those little files in the PS3 SDK in target\ppu\include\bits, which have statements like:

vec_uint4 mask = (vec_uint4)(vec_int4)(-1);

where vec_uint4 and vec_int4 are typedefs for vector types, i.e.:

typedef vector int vec_int4;

What does this actually do? I’m guessing it’s supposed to fill the vector components with -1.

How should this be handled in Clang?

I filed a Bugzilla bug 6846 on this.

If Clang should support it
, I might be able to take a crack at it, with a little guidance.

My colleague pointed out that it’s not a cast, but a literal, which Clang should support.

-John

My colleague pointed out that it's not a cast, but a literal, which Clang
should support.

I'm pretty sure that's already implemented... are you passing
-faltivec to clang?

-Eli

I’m pretty sure that’s already implemented… are you passing
-faltivec to clang?

Yes.

This stops the error, but is it enough?:

Index: lib/Sema/SemaInit.cpp

I’m pretty sure that’s already implemented… are you passing
-faltivec to clang?

Yes.

This stops the error, but is it enough?:

That should be enough, if you like that patch go ahead and commit it (with a testcase).

-Chris