Commit 52898b94 by Bill Schmidt Committed by William Schmidt

gcc-bug-i.c: Add little endian variant.

2013-10-28  Bill Schmidt  <wschmidt@linux.vnet.ibm.com>

	* gcc.dg/vmx/gcc-bug-i.c: Add little endian variant.
	* gcc.dg/vmx/eg-5.c: Likewise.

From-SVN: r204138
parent ff4c81cc
2013-10-28 Bill Schmidt <wschmidt@linux.vnet.ibm.com>
* gcc.dg/vmx/gcc-bug-i.c: Add little endian variant.
* gcc.dg/vmx/eg-5.c: Likewise.
2013-10-28 Claudiu Zissulescu <claziss@synopsys.com> 2013-10-28 Claudiu Zissulescu <claziss@synopsys.com>
Joern Rennecke <joern.rennecke@embecosm.com> Joern Rennecke <joern.rennecke@embecosm.com>
......
...@@ -7,10 +7,17 @@ matvecmul4 (vector float c0, vector float c1, vector float c2, ...@@ -7,10 +7,17 @@ matvecmul4 (vector float c0, vector float c1, vector float c2,
/* Set result to a vector of f32 0's */ /* Set result to a vector of f32 0's */
vector float result = ((vector float){0.,0.,0.,0.}); vector float result = ((vector float){0.,0.,0.,0.});
#ifdef __LITTLE_ENDIAN__
result = vec_madd (c0, vec_splat (v, 3), result);
result = vec_madd (c1, vec_splat (v, 2), result);
result = vec_madd (c2, vec_splat (v, 1), result);
result = vec_madd (c3, vec_splat (v, 0), result);
#else
result = vec_madd (c0, vec_splat (v, 0), result); result = vec_madd (c0, vec_splat (v, 0), result);
result = vec_madd (c1, vec_splat (v, 1), result); result = vec_madd (c1, vec_splat (v, 1), result);
result = vec_madd (c2, vec_splat (v, 2), result); result = vec_madd (c2, vec_splat (v, 2), result);
result = vec_madd (c3, vec_splat (v, 3), result); result = vec_madd (c3, vec_splat (v, 3), result);
#endif
return result; return result;
} }
......
...@@ -13,12 +13,27 @@ ...@@ -13,12 +13,27 @@
#define DO_INLINE __attribute__ ((always_inline)) #define DO_INLINE __attribute__ ((always_inline))
#define DONT_INLINE __attribute__ ((noinline)) #define DONT_INLINE __attribute__ ((noinline))
#ifdef __LITTLE_ENDIAN__
static inline DO_INLINE int inline_me(vector signed short data)
{
union {vector signed short v; signed short s[8];} u;
signed short x;
unsigned char x1, x2;
u.v = data;
x = u.s[7];
x1 = (x >> 8) & 0xff;
x2 = x & 0xff;
return ((x2 << 8) | x1);
}
#else
static inline DO_INLINE int inline_me(vector signed short data) static inline DO_INLINE int inline_me(vector signed short data)
{ {
union {vector signed short v; signed short s[8];} u; union {vector signed short v; signed short s[8];} u;
u.v = data; u.v = data;
return u.s[7]; return u.s[7];
} }
#endif
static DONT_INLINE int foo(vector signed short data) static DONT_INLINE int foo(vector signed short data)
{ {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment