OSDN Git Service

PR middle-end/29274
[pf3gnuchains/gcc-fork.git] / gcc / testsuite / gcc.target / i386 / pr42542-4.c
1 /* { dg-do run } */
2 /* { dg-require-effective-target sse4 } */
3 /* { dg-options "-O1 -msse4.2 -ftree-vectorize" } */
4
5 #include "sse4_2-check.h"
6
7 unsigned long long v1[] __attribute__ ((aligned(16))) =
8 {
9   0x8000000000000000ULL, 2,
10   3, 0xd000000000000000ULL
11 };
12 unsigned long long v2[] __attribute__ ((aligned(16))) =
13 {
14   4, 0xb000000000000000ULL,
15   0xf000000000000000ULL, 6
16 };
17
18 unsigned long long max[] =
19 {
20   0x8000000000000000ULL, 0xb000000000000000ULL,
21   0xf000000000000000ULL, 0xd000000000000000ULL
22 };
23
24 unsigned long long min[] =
25 {
26   4, 2,
27   3, 6
28 };
29
30 unsigned long long res[4] __attribute__ ((aligned(16)));
31
32 extern void abort (void);
33
34 void
35 find_max (void)
36 {
37   int i;
38
39   for (i = 0; i < 4; i++)
40     res[i] = v1[i] < v2[i] ? v2[i] : v1[i];
41 }
42
43 void
44 find_min (void)
45 {
46   int i;
47
48   for (i = 0; i < 4; i++)
49     res[i] = v1[i] > v2[i] ? v2[i] : v1[i];
50 }
51
52 static void
53 sse4_2_test (void)
54 {
55   int i;
56   int err = 0;
57
58   find_max ();
59   for (i = 0; i < 4; i++)
60     if (res[i] != max[i])
61       err++;
62
63   find_min ();
64   for (i = 0; i < 4; i++)
65     if (res[i] != min[i])
66       err++;
67
68   if (err)
69     abort ();
70 }