[testsuite] require sqrt_insn effective target where needed
[official-gcc.git] / gcc / testsuite / gcc.target / powerpc / sse4_1-roundpd.c
blob58d9cc5241679ff13f7375da86c68b7271293f3b
1 /* { dg-do run } */
2 /* { dg-require-effective-target vsx_hw } */
3 /* { dg-options "-O2 -mvsx" } */
5 #define NO_WARN_X86_INTRINSICS 1
6 #include <smmintrin.h>
8 #define VEC_T __m128d
9 #define FP_T double
11 #define ROUND_INTRIN(x, ignored, mode) _mm_round_pd (x, mode)
13 #include "sse4_1-round-data.h"
15 struct data2 data[] = {
16 { .value1 = { .f = { 0.00, 0.25 } } },
17 { .value1 = { .f = { 0.50, 0.75 } } },
19 { .value1 = { .f = { 0x1.ffffffffffffcp+50, 0x1.ffffffffffffdp+50 } } },
20 { .value1 = { .f = { 0x1.ffffffffffffep+50, 0x1.fffffffffffffp+50 } } },
21 { .value1 = { .f = { 0x1.0000000000000p+51, 0x1.0000000000001p+51 } } },
22 { .value1 = { .f = { 0x1.0000000000002p+51, 0x1.0000000000003p+51 } } },
24 { .value1 = { .f = { 0x1.ffffffffffffep+51, 0x1.fffffffffffffp+51 } } },
25 { .value1 = { .f = { 0x1.0000000000000p+52, 0x1.0000000000001p+52 } } },
27 { .value1 = { .f = { -0x1.0000000000001p+52, -0x1.0000000000000p+52 } } },
28 { .value1 = { .f = { -0x1.fffffffffffffp+51, -0x1.ffffffffffffep+51 } } },
30 { .value1 = { .f = { -0x1.0000000000004p+51, -0x1.0000000000002p+51 } } },
31 { .value1 = { .f = { -0x1.0000000000001p+51, -0x1.0000000000000p+51 } } },
32 { .value1 = { .f = { -0x1.ffffffffffffcp+50, -0x1.ffffffffffffep+50 } } },
33 { .value1 = { .f = { -0x1.ffffffffffffdp+50, -0x1.ffffffffffffcp+50 } } },
35 { .value1 = { .f = { -1.00, -0.75 } } },
36 { .value1 = { .f = { -0.50, -0.25 } } }
39 union value answers_NEAREST_INT[] = {
40 { .f = { 0.00, 0.00 } },
41 { .f = { 0.00, 1.00 } },
43 { .f = { 0x1.ffffffffffffcp+50, 0x1.ffffffffffffcp+50 } },
44 { .f = { 0x1.0000000000000p+51, 0x1.0000000000000p+51 } },
45 { .f = { 0x1.0000000000000p+51, 0x1.0000000000000p+51 } },
46 { .f = { 0x1.0000000000002p+51, 0x1.0000000000004p+51 } },
48 { .f = { 0x1.ffffffffffffep+51, 0x1.0000000000000p+52 } },
49 { .f = { 0x1.0000000000000p+52, 0x1.0000000000001p+52 } },
51 { .f = { -0x1.0000000000001p+52, -0x1.0000000000000p+52 } },
52 { .f = { -0x1.0000000000000p+52, -0x1.ffffffffffffep+51 } },
54 { .f = { -0x1.0000000000004p+51, -0x1.0000000000002p+51 } },
55 { .f = { -0x1.0000000000000p+51, -0x1.0000000000000p+51 } },
56 { .f = { -0x1.ffffffffffffcp+50, -0x1.0000000000000p+51 } },
57 { .f = { -0x1.ffffffffffffcp+50, -0x1.ffffffffffffcp+50 } },
59 { .f = { -1.00, -1.00 } },
60 { .f = { 0.00, 0.00 } }
63 union value answers_NEG_INF[] = {
64 { .f = { 0.00, 0.00 } },
65 { .f = { 0.00, 0.00 } },
67 { .f = { 0x1.ffffffffffffcp+50, 0x1.ffffffffffffcp+50 } },
68 { .f = { 0x1.ffffffffffffcp+50, 0x1.ffffffffffffcp+50 } },
69 { .f = { 0x1.0000000000000p+51, 0x1.0000000000000p+51 } },
70 { .f = { 0x1.0000000000002p+51, 0x1.0000000000002p+51 } },
72 { .f = { 0x1.ffffffffffffep+51, 0x1.ffffffffffffep+51 } },
73 { .f = { 0x1.0000000000000p+52, 0x1.0000000000001p+52 } },
75 { .f = { -0x1.0000000000001p+52, -0x1.0000000000000p+52 } },
76 { .f = { -0x1.0000000000000p+52, -0x1.ffffffffffffep+51 } },
78 { .f = { -0x1.0000000000004p+51, -0x1.0000000000002p+51 } },
79 { .f = { -0x1.0000000000002p+51, -0x1.0000000000000p+51 } },
80 { .f = { -0x1.ffffffffffffcp+50, -0x1.0000000000000p+51 } },
81 { .f = { -0x1.0000000000000p+51, -0x1.ffffffffffffcp+50 } },
83 { .f = { -1.00, -1.00 } },
84 { .f = { -1.00, -1.00 } }
87 union value answers_POS_INF[] = {
88 { .f = { 0.00, 1.00 } },
89 { .f = { 1.00, 1.00 } },
91 { .f = { 0x1.ffffffffffffcp+50, 0x1.0000000000000p+51 } },
92 { .f = { 0x1.0000000000000p+51, 0x1.0000000000000p+51 } },
93 { .f = { 0x1.0000000000000p+51, 0x1.0000000000002p+51 } },
94 { .f = { 0x1.0000000000002p+51, 0x1.0000000000004p+51 } },
96 { .f = { 0x1.ffffffffffffep+51, 0x1.0000000000000p+52 } },
97 { .f = { 0x1.0000000000000p+52, 0x1.0000000000001p+52 } },
99 { .f = { -0x1.0000000000001p+52, -0x1.0000000000000p+52 } },
100 { .f = { -0x1.ffffffffffffep+51, -0x1.ffffffffffffep+51 } },
102 { .f = { -0x1.0000000000004p+51, -0x1.0000000000002p+51 } },
103 { .f = { -0x1.0000000000000p+51, -0x1.0000000000000p+51 } },
104 { .f = { -0x1.ffffffffffffcp+50, -0x1.ffffffffffffcp+50 } },
105 { .f = { -0x1.ffffffffffffcp+50, -0x1.ffffffffffffcp+50 } },
107 { .f = { -1.00, 0.00 } },
108 { .f = { 0.00, 0.00 } }
111 union value answers_ZERO[] = {
112 { .f = { 0.00, 0.00 } },
113 { .f = { 0.00, 0.00 } },
115 { .f = { 0x1.ffffffffffffcp+50, 0x1.ffffffffffffcp+50 } },
116 { .f = { 0x1.ffffffffffffcp+50, 0x1.ffffffffffffcp+50 } },
117 { .f = { 0x1.0000000000000p+51, 0x1.0000000000000p+51 } },
118 { .f = { 0x1.0000000000002p+51, 0x1.0000000000002p+51 } },
120 { .f = { 0x1.ffffffffffffep+51, 0x1.ffffffffffffep+51 } },
121 { .f = { 0x1.0000000000000p+52, 0x1.0000000000001p+52 } },
123 { .f = { -0x1.0000000000001p+52, -0x1.0000000000000p+52 } },
124 { .f = { -0x1.ffffffffffffep+51, -0x1.ffffffffffffep+51 } },
126 { .f = { -0x1.0000000000004p+51, -0x1.0000000000002p+51 } },
127 { .f = { -0x1.0000000000000p+51, -0x1.0000000000000p+51 } },
128 { .f = { -0x1.ffffffffffffcp+50, -0x1.ffffffffffffcp+50 } },
129 { .f = { -0x1.ffffffffffffcp+50, -0x1.ffffffffffffcp+50 } },
131 { .f = { -1.00, 0.00 } },
132 { .f = { 0.00, 0.00 } }
135 union value *answers[] = {
136 answers_NEAREST_INT,
137 answers_NEG_INF,
138 answers_POS_INF,
139 answers_ZERO,
140 0 /* CUR_DIRECTION answers depend on current rounding mode. */
143 #include "sse4_1-round3.h"