This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
Re: [PATCH] RS6000 : Tidy up vector splat instructions
On Jun 17, 2005, at 11:07 AM, Aldy Hernandez wrote:
I've a test case to produces this using apple branch
based on 4.0 code base. But it does not compile with
4.1. We will get to it but right now still struggling
with gcc-4.0 conversion ;-) Altivec support does not look
good in 4.1 branch, at first glance. Obviously there
are differences regarding what is considered valid
altivec code between FSF and Apple implementation,
It'd be nice to know what is actually different so we can fix whatever
is at fault.
Try this ...
/* { dg-do assemble { target powerpc*-*-darwin* } } */
/* { dg-options "-faltivec -O3" } */
typedef unsigned char UInt8;
typedef signed char SInt8;
typedef unsigned short UInt16;
typedef signed short SInt16;
typedef signed long SInt32;
typedef unsigned long UInt32;
typedef __attribute__((altivec(vector__))) signed char VSInt8;
typedef __attribute__((altivec(vector__))) unsigned char VUInt8;
typedef __attribute__((altivec(vector__))) signed short VSInt16;
typedef __attribute__((altivec(vector__))) signed int VSInt32;
extern unsigned char *dPtr;
extern VSInt8 xyz;
unsigned long ix;
void foo ()
{
VSInt16 Y;
const VSInt32 vC1 = (VSInt32) (128, 128, 0, 0);
const VUInt8 vC2 = vec_splat((const VUInt8) vC1,3);
xyz = vec_sub(xyz, vC2);
Y = vec_unpackl (xyz);
vec_st ((VUInt8) Y, ix, dPtr);
}
-
Devang