/* { dg-do compile { target *-*-mingw* *-*-cygwin* } } */ /* { dg-require-effective-target ia32 } */ /* { dg-options "-msse -O" } */ extern void abort (void); typedef float __m128 __attribute__ ((__vector_size__ (16), __may_alias__)); static __m128 load_m128 (float *e) { return * (__m128 *) e; } typedef union { __m128 x; float a[4]; } union128; void test (void) { union128 u; float e[4] __attribute__ ((aligned (16))) = {2134.3343, 1234.635654, 1.2234, 876.8976}; int i; u.x = load_m128 (e); for (i = 0; i < 4; i++) if (u.a[i] != e[i]) abort (); } /* { dg-final { scan-assembler "andl\\t\\$-16, %esp" } } */