1 /* { dg-do run } */ 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 #include <smmintrin.h> 15 16 17 #define msk0 0 18 #define msk1 1 19 #define msk2 2 20 #define msk3 3 21 22 static void TEST(void)23TEST (void) 24 { 25 union 26 { 27 __m128i x; 28 int i[4]; 29 } val1; 30 int res[4], masks[4]; 31 int i; 32 33 val1.i[0] = 0x04030201; 34 val1.i[1] = 0x08070605; 35 val1.i[2] = 0x0C0B0A09; 36 val1.i[3] = 0x100F0E0D; 37 38 res[0] = _mm_extract_epi32 (val1.x, msk0); 39 res[1] = _mm_extract_epi32 (val1.x, msk1); 40 res[2] = _mm_extract_epi32 (val1.x, msk2); 41 res[3] = _mm_extract_epi32 (val1.x, msk3); 42 43 masks[0] = msk0; 44 masks[1] = msk1; 45 masks[2] = msk2; 46 masks[3] = msk3; 47 48 for (i = 0; i < 4; i++) 49 if (res[i] != val1.i [masks[i]]) 50 abort (); 51 } 52