OSDN Git Service

028d2f8996455c35049570416ccd5ae4b2786afa
[pf3gnuchains/gcc-fork.git] / gcc / testsuite / gcc.target / i386 / pr42542-3.c
1 /* { dg-do run } */
2 /* { dg-options "-O1 -msse2 -ftree-vectorize" } */
3
4 #ifndef CHECK_H
5 #define CHECK_H "sse2-check.h"
6 #endif
7
8 #ifndef TEST
9 #define TEST sse2_test
10 #endif
11
12 #include CHECK_H
13
14 unsigned char v1[] __attribute__ ((aligned(16))) =
15 {
16   0x80, 0xd0, 0x90, 0xa0, 1, 15, 10, 15,
17   0xa0, 0xc0, 0xb0, 0xf0, 2, 25, 20, 35,
18   3, 34, 30, 36, 0xd0, 0x80, 0xe0, 0xb0,
19   0xf0, 0xe0, 0xe0, 0x80, 25, 34, 30, 40
20 };
21 unsigned char v2[] __attribute__ ((aligned(16))) =
22 {
23   4, 44, 40, 48, 0xb0, 0x80, 0x80, 0x90,
24   5, 55, 50, 51, 0xc0, 0xb0, 0xf0, 0xd0,
25   0xd0, 0x80, 0xa0, 0xf0, 6, 61, 65, 68,
26   7, 76, 75, 81, 0xe0, 0xf0, 0xc0, 0x90
27 };
28
29 unsigned char max[] =
30 {
31   0x80, 0xd0, 0x90, 0xa0, 0xb0, 0x80, 0x80, 0x90,
32   0xa0, 0xc0, 0xb0, 0xf0, 0xc0, 0xb0, 0xf0, 0xd0,
33   0xd0, 0x80, 0xa0, 0xf0, 0xd0, 0x80, 0xe0, 0xb0,
34   0xf0, 0xe0, 0xe0, 0x80, 0xe0, 0xf0, 0xc0, 0x90
35 };
36
37 unsigned char min[] =
38 {
39   4, 44, 40, 48, 1, 15, 10, 15,
40   5, 55, 50, 51, 2, 25, 20, 35,
41   3, 34, 30, 36, 6, 61, 65, 68,
42   7, 76, 75, 81, 25, 34, 30, 40
43 };
44
45 unsigned char res[32] __attribute__ ((aligned(16)));
46
47 extern void abort (void);
48
49 void
50 find_max (void)
51 {
52   int i;
53
54   for (i = 0; i < 32; i++)
55     res[i] = v1[i] < v2[i] ? v2[i] : v1[i];
56 }
57
58 void
59 find_min (void)
60 {
61   int i;
62
63   for (i = 0; i < 32; i++)
64     res[i] = v1[i] > v2[i] ? v2[i] : v1[i];
65 }
66
67 static void
68 TEST (void)
69 {
70   int i;
71   int err = 0;
72
73   find_max ();
74   for (i = 0; i < 32; i++)
75     if (res[i] != max[i])
76       err++;
77
78   find_min ();
79   for (i = 0; i < 32; i++)
80     if (res[i] != min[i])
81       err++;
82
83   if (err)
84     abort ();
85 }