1 /* { dg-do run { target le } } */ 2 /* { dg-require-effective-target powerpc_p8vector_ok } */ 3 /* { dg-options "-mdejagnu-cpu=power8 -O2 " } */ 4 5 typedef __attribute__ ((__aligned__ (8))) unsigned long long __m64; 6 typedef float __m128 __attribute__ ((__vector_size__ (16), __may_alias__)); 7 8 /* PR84033. Extracted from xmmintrin.h but with a pointer param to 9 allow swaps to happen when not inline. */ 10 int __attribute__ ((__noinline__)) _mm_movemask_ps(__m128 * __A)11_mm_movemask_ps (__m128 *__A) 12 { 13 __vector __m64 result; 14 static const __vector unsigned int perm_mask = 15 { 16 0x00204060, 0x80808080, 0x80808080, 0x80808080 17 }; 18 19 result = (__vector __m64) 20 __builtin_vec_vbpermq ((__vector unsigned char) (*__A), 21 (__vector unsigned char) perm_mask); 22 return result[1]; 23 } 24 25 int main(void)26main (void) 27 { 28 union { unsigned int i[4]; __m128 m; } x 29 = { 0x80000000, 0x80000000, 0x7fffffff, 0x7fffffff }; 30 if (_mm_movemask_ps (&x.m) != 3) 31 __builtin_abort (); 32 return 0; 33 } 34