OSDN Git Service

953f220d1b11e1593bde8c4b6e3f399ef9de0879
[pf3gnuchains/gcc-fork.git] / gcc / testsuite / gcc.target / i386 / sse2-cmpsd-1.c
1 /* { dg-do run } */
2 /* { dg-options "-O2 -msse2 -std=c99" } */
3 /* { dg-require-effective-target sse2 } */
4
5 #ifndef CHECK_H
6 #define CHECK_H "sse2-check.h"
7 #endif
8
9 #ifndef TEST
10 #define TEST sse2_test
11 #endif
12
13 #include CHECK_H
14
15 #include <math.h>
16
17 double s1[] = {2134.3343, 6678.346};
18 double s2[] = {41124.234, 6678.346};
19 long long dd[] =  {1, 2}, d[2];
20 union{long long l[2]; double d[2];} e;
21
22 void check(char *id)
23 {
24     if(checkVl(d, e.l, 2)){
25         printf("mm_cmp%s_sd FAILED\n", id);
26     }
27 }
28
29 #define CMP(cmp, rel)                                   \
30     e.l[0] = rel ? -1 : 0;                              \
31     dest = _mm_loadu_pd((double*)dd);                   \
32     source1 = _mm_loadu_pd(s1);                         \
33     source2 = _mm_loadu_pd(s2);                         \
34     dest = _mm_cmp##cmp##_sd(source1, source2);         \
35     _mm_storeu_pd((double*) d, dest);                   \
36     check("" #cmp "");
37
38 static void
39 TEST ()
40 {
41     __m128d source1, source2, dest;
42
43     e.d[1] = s1[1];
44     
45     CMP(eq, !isunordered(s1[0], s2[0]) && s1[0] == s2[0]);
46     CMP(lt, !isunordered(s1[0], s2[0]) && s1[0] < s2[0]);
47     CMP(le, !isunordered(s1[0], s2[0]) && s1[0] <= s2[0]);
48     CMP(unord, isunordered(s1[0], s2[0]));
49     CMP(neq, isunordered(s1[0], s2[0]) || s1[0] != s2[0]);
50     CMP(nlt, isunordered(s1[0], s2[0]) || s1[0] >= s2[0]);
51     CMP(nle, isunordered(s1[0], s2[0]) || s1[0] > s2[0]);
52     CMP(ord, !isunordered(s1[0], s2[0]));
53
54     CMP(ge, isunordered(s1[0], s2[0]) || s1[0] >= s2[0]);
55     CMP(gt, isunordered(s1[0], s2[0]) || s1[0] > s2[0]);
56     CMP(nge, !isunordered(s1[0], s2[0]) && s1[0] < s2[0]);
57     CMP(ngt, !isunordered(s1[0], s2[0]) && s1[0] <= s2[0]);
58 }