3 #include "sse4_1-check.h"
5 #define DIM(a) (sizeof (a) / sizeof (a)[0])
7 static int roundings
[] =
9 _MM_FROUND_TO_NEAREST_INT
,
10 _MM_FROUND_TO_NEG_INF
,
11 _MM_FROUND_TO_POS_INF
,
13 _MM_FROUND_CUR_DIRECTION
27 int i
, j
, ri
, mi
, round_save
;
29 round_save
= fegetround ();
30 for (mi
= 0; mi
< DIM (modes
); mi
++) {
31 fesetround (modes
[mi
]);
32 for (i
= 0; i
< DIM (data
); i
++) {
33 for (ri
= 0; ri
< DIM (roundings
); ri
++) {
35 union value
*current_answers
= answers
[ri
];
36 switch ( roundings
[ri
] ) {
37 case _MM_FROUND_TO_NEAREST_INT
:
38 guess
.x
= ROUND_INTRIN (data
[i
].value1
.x
, data
[i
].value2
.x
,
39 _MM_FROUND_TO_NEAREST_INT
);
41 case _MM_FROUND_TO_NEG_INF
:
42 guess
.x
= ROUND_INTRIN (data
[i
].value1
.x
, data
[i
].value2
.x
,
43 _MM_FROUND_TO_NEG_INF
);
45 case _MM_FROUND_TO_POS_INF
:
46 guess
.x
= ROUND_INTRIN (data
[i
].value1
.x
, data
[i
].value2
.x
,
47 _MM_FROUND_TO_POS_INF
);
49 case _MM_FROUND_TO_ZERO
:
50 guess
.x
= ROUND_INTRIN (data
[i
].value1
.x
, data
[i
].value2
.x
,
53 case _MM_FROUND_CUR_DIRECTION
:
54 guess
.x
= ROUND_INTRIN (data
[i
].value1
.x
, data
[i
].value2
.x
,
55 _MM_FROUND_CUR_DIRECTION
);
56 switch ( modes
[mi
] ) {
58 current_answers
= answers_NEAREST_INT
;
61 current_answers
= answers_POS_INF
;
64 current_answers
= answers_NEG_INF
;
67 current_answers
= answers_ZERO
;
74 for (j
= 0; j
< DIM (guess
.f
); j
++)
75 if (guess
.f
[j
] != current_answers
[i
].f
[j
])
80 fesetround (round_save
);