34 lines
955 B
C
34 lines
955 B
C
|
/* { dg-do run { target le } } */
|
||
|
/* { dg-require-effective-target powerpc_p8vector_ok } */
|
||
|
/* { dg-options "-mdejagnu-cpu=power8 -O2 " } */
|
||
|
|
||
|
typedef __attribute__ ((__aligned__ (8))) unsigned long long __m64;
|
||
|
typedef float __m128 __attribute__ ((__vector_size__ (16), __may_alias__));
|
||
|
|
||
|
/* PR84033. Extracted from xmmintrin.h but with a pointer param to
|
||
|
allow swaps to happen when not inline. */
|
||
|
int __attribute__ ((__noinline__))
|
||
|
_mm_movemask_ps (__m128 *__A)
|
||
|
{
|
||
|
__vector __m64 result;
|
||
|
static const __vector unsigned int perm_mask =
|
||
|
{
|
||
|
0x00204060, 0x80808080, 0x80808080, 0x80808080
|
||
|
};
|
||
|
|
||
|
result = (__vector __m64)
|
||
|
__builtin_vec_vbpermq ((__vector unsigned char) (*__A),
|
||
|
(__vector unsigned char) perm_mask);
|
||
|
return result[1];
|
||
|
}
|
||
|
|
||
|
int
|
||
|
main (void)
|
||
|
{
|
||
|
union { unsigned int i[4]; __m128 m; } x
|
||
|
= { 0x80000000, 0x80000000, 0x7fffffff, 0x7fffffff };
|
||
|
if (_mm_movemask_ps (&x.m) != 3)
|
||
|
__builtin_abort ();
|
||
|
return 0;
|
||
|
}
|