2 /* { dg-require-effective-target vsx_hw } */
3 /* { dg-options "-O2 -mvsx" } */
5 #define NO_WARN_X86_INTRINSICS 1
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
[] = {
140 0 /* CUR_DIRECTION answers depend on current rounding mode. */
143 #include "sse4_1-round3.h"