Merged with mainline at revision 128810.
[official-gcc.git] / gcc / testsuite / gcc.target / i386 / sse4_1-pextrw.c
blob19d783fe505bac8b8fb216e8833433180724fd53
1 /* { dg-do run } */
2 /* { dg-require-effective-target sse4 } */
3 /* { dg-options "-O2 -msse4.1" } */
5 #include "sse4_1-check.h"
7 #include <smmintrin.h>
9 #define msk0 0
10 #define msk1 1
11 #define msk2 2
12 #define msk3 3
13 #define msk4 4
14 #define msk5 5
15 #define msk6 6
16 #define msk7 7
18 static void
19 sse4_1_test (void)
21 union
23 __m128i x;
24 int i[4];
25 short s[8];
26 } val1;
27 int res[8], masks[8];
28 int i;
30 val1.i[0] = 0x04030201;
31 val1.i[1] = 0x08070605;
32 val1.i[2] = 0x0C0B0A09;
33 val1.i[3] = 0x100F0E0D;
35 res[0] = _mm_extract_epi16 (val1.x, msk0);
36 res[1] = _mm_extract_epi16 (val1.x, msk1);
37 res[2] = _mm_extract_epi16 (val1.x, msk2);
38 res[3] = _mm_extract_epi16 (val1.x, msk3);
39 res[4] = _mm_extract_epi16 (val1.x, msk4);
40 res[5] = _mm_extract_epi16 (val1.x, msk5);
41 res[6] = _mm_extract_epi16 (val1.x, msk6);
42 res[7] = _mm_extract_epi16 (val1.x, msk7);
44 masks[0] = msk0;
45 masks[1] = msk1;
46 masks[2] = msk2;
47 masks[3] = msk3;
48 masks[4] = msk4;
49 masks[5] = msk5;
50 masks[6] = msk6;
51 masks[7] = msk7;
53 for (i = 0; i < 8; i++)
54 if (res[i] != val1.s [masks[i]])
55 abort ();