1 /* { dg-do run } */ 2 /* { dg-options "-O2 -msse2" } */ 3 /* { dg-require-effective-target sse2 } */ 4 5 #include "sse2-check.h" 6 7 #include <emmintrin.h> 8 9 static void sse2_test(void)10sse2_test (void) 11 { 12 union 13 { 14 __m128i x; 15 char c[16]; 16 short s[8]; 17 int i[4]; 18 long long ll[2]; 19 } val1; 20 int res[4]; 21 int masks[4]; 22 int i; 23 24 for (i = 0; i < 16; i++) 25 val1.c[i] = i; 26 27 res[0] = __builtin_ia32_vec_ext_v4si ((__v4si)val1.x, 0); 28 res[1] = __builtin_ia32_vec_ext_v4si ((__v4si)val1.x, 1); 29 res[2] = __builtin_ia32_vec_ext_v4si ((__v4si)val1.x, 2); 30 res[3] = __builtin_ia32_vec_ext_v4si ((__v4si)val1.x, 3); 31 32 for (i = 0; i < 4; i++) 33 masks[i] = i; 34 35 for (i = 0; i < 4; i++) 36 if (res[i] != val1.i [masks[i]]) 37 abort (); 38 } 39