1 /* { dg-do run { target i?86-*-* x86_64-*-* } } */
2 /* { dg-options "-msse" } */
3 /* { dg-require-effective-target sse_runtime } */
5 typedef float __m128 __attribute__ ((__vector_size__ (16), __may_alias__));
6 typedef float __v4sf __attribute__ ((__vector_size__ (16)));
8 extern __inline __m128 __attribute__((__gnu_inline__, __always_inline__,
10 _mm_set_ps (const float __Z, const float __Y, const float __X, const float __W)
12 return __extension__ (__m128)(__v4sf){ __W, __X, __Y, __Z };
22 static const vec & zero()
24 static const vec v = _mm_set_ps(0, 0, 0, 0);
29 vec(const __m128 & a) : v(a) {}
31 operator const __m128&() const { return v; }
40 vec2(const vec & a, const vec & b) : _v1(a), _v2(b) {}
42 static vec2 load(const float * a)
45 __builtin_ia32_loadups(&a[0]),
46 __builtin_ia32_loadups(&a[4]));
49 const vec & v1() const { return _v1; }
50 const vec & v2() const { return _v2; }
53 extern "C" void abort(void);
56 inline bool operator==(const vec & a, const vec & b)
57 { return 0xf == __builtin_ia32_movmskps(__builtin_ia32_cmpeqps(a, b)); }
59 int main( int argc, char * argv[] )
61 __attribute__((aligned(16))) float data[] =
62 { 16, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5 };