OSDN Git Service

PR middle-end/29274
[pf3gnuchains/gcc-fork.git] / gcc / testsuite / gcc.target / i386 / sse4_1-pextrd.c
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
23 TEST (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 }