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
7unsigned long long v1[] __attribute__ ((aligned(16))) =
8{
9  0x8000000000000000ULL, 2,
10  3, 0xd000000000000000ULL
11};
12unsigned long long v2[] __attribute__ ((aligned(16))) =
13{
14  4, 0xb000000000000000ULL,
15  0xf000000000000000ULL, 6
16};
17
18unsigned long long max[] =
19{
20  0x8000000000000000ULL, 0xb000000000000000ULL,
21  0xf000000000000000ULL, 0xd000000000000000ULL
22};
23
24unsigned long long min[] =
25{
26  4, 2,
27  3, 6
28};
29
30unsigned long long res[4] __attribute__ ((aligned(16)));
31
32extern void abort (void);
33
34void
35find_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
43void
44find_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
52static void
53sse4_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}
71