1 /* { dg-do compile } */
2 /* { dg-options "-Os -msse2" } */
3 
4 typedef float __m128 __attribute__ ((vector_size (16)));
5 
6 static __inline __m128
_mm_mul_ps(__m128 __A,__m128 __B)7 _mm_mul_ps (__m128 __A, __m128 __B)
8 {
9   return __builtin_ia32_mulps (__A, __B);
10 }
11 
12 static __inline __m128
_mm_sub_ps(__m128 __A,__m128 __B)13 _mm_sub_ps (__m128 __A, __m128 __B)
14 {
15   return  __builtin_ia32_subps (__A, __B);
16 }
17 
POW_FUNC(__m128 x,__m128 y)18 __m128 POW_FUNC (__m128 x, __m128 y)
19 {
20     __m128 xmm0 = x, xmm1 = y, xmm2;
21 
22     xmm0 = __builtin_ia32_xorps (xmm1, xmm1);
23 
24     xmm0 = _mm_mul_ps (xmm0, xmm1);
25 
26     xmm0 = _mm_sub_ps (xmm0, xmm1);
27 
28     xmm0 = _mm_mul_ps (xmm0, xmm1);
29 
30     return xmm0;
31 }
32