1 /* { dg-do run { target { ! ia32 } } } */ 2 /* { dg-require-effective-target sse4 } */ 3 /* { dg-options "-O2 -msse4.1" } */ 4 5 #ifndef CHECK_H 6 #define CHECK_H "sse4_1-check.h" 7 #endif 8 9 #ifndef TEST 10 #define TEST sse4_1_test 11 #endif 12 13 #include CHECK_H 14 15 #include <smmintrin.h> 16 17 #define msk0 0 18 #define msk1 1 19 20 static void 21 __attribute__((noinline)) TEST(void)22TEST (void) 23 { 24 union 25 { 26 __m128i x; 27 long long ll[2]; 28 } val1; 29 long long res[2]; 30 int masks[2]; 31 int i; 32 33 val1.ll[0] = 0x0807060504030201LL; 34 val1.ll[1] = 0x100F0E0D0C0B0A09LL; 35 36 res[0] = _mm_extract_epi64 (val1.x, msk0); 37 res[1] = _mm_extract_epi64 (val1.x, msk1); 38 39 masks[0] = msk0; 40 masks[1] = msk1; 41 42 for (i = 0; i < 2; i++) 43 if (res[i] != val1.ll [masks[i]]) 44 abort (); 45 } 46