1 /* { dg-do run } */ 2 /* { dg-options "-O3 -mpower8-vector -Wno-psabi" } */ 3 /* { dg-require-effective-target p8vector_hw } */ 4 5 #ifndef CHECK_H 6 #define CHECK_H "sse2-check.h" 7 #endif 8 9 #include CHECK_H 10 11 #ifndef TEST 12 #define TEST sse2_test_pextrw_1 13 #endif 14 15 #include <emmintrin.h> 16 17 #define msk0 0 18 #define msk1 1 19 #define msk2 2 20 #define msk3 3 21 #define msk4 4 22 #define msk5 5 23 #define msk6 6 24 #define msk7 7 25 26 static void TEST(void)27TEST (void) 28 { 29 union 30 { 31 __m128i x; 32 int i[4]; 33 short s[8]; 34 } val1; 35 int res[8], masks[8]; 36 int i; 37 38 val1.i[0] = 0x04030201; 39 val1.i[1] = 0x08070605; 40 val1.i[2] = 0x0C0B0A09; 41 val1.i[3] = 0x100F0E0D; 42 43 res[0] = _mm_extract_epi16 (val1.x, msk0); 44 res[1] = _mm_extract_epi16 (val1.x, msk1); 45 res[2] = _mm_extract_epi16 (val1.x, msk2); 46 res[3] = _mm_extract_epi16 (val1.x, msk3); 47 res[4] = _mm_extract_epi16 (val1.x, msk4); 48 res[5] = _mm_extract_epi16 (val1.x, msk5); 49 res[6] = _mm_extract_epi16 (val1.x, msk6); 50 res[7] = _mm_extract_epi16 (val1.x, msk7); 51 52 masks[0] = msk0; 53 masks[1] = msk1; 54 masks[2] = msk2; 55 masks[3] = msk3; 56 masks[4] = msk4; 57 masks[5] = msk5; 58 masks[6] = msk6; 59 masks[7] = msk7; 60 61 for (i = 0; i < 8; i++) 62 if (res[i] != val1.s [masks[i]]) 63 abort (); 64 } 65