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 15#include <smmintrin.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 26static 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