1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
|
/* { dg-do run { target lp64 } } */
/* { dg-require-effective-target vsx_hw } */
/* { dg-options "-O2 -mvsx" } */
#define DEBUG 0
#include "vsx-vector-6-func-cmp-all.h"
#define FLOAT_1ARG_CHECK(NAME) \
f_result = vec_##NAME (f_src); \
\
if (f_result != f_##NAME##_expected) \
{ \
if (DEBUG) \
{ \
printf("ERROR: vec_%s (float) expected value does not match\n", \
#NAME); \
printf(" expected = %d; result = %d\n", \
f_##NAME##_expected, f_result); \
} \
else \
abort(); \
}
#define FLOAT_2ARG_CHECK(NAME) \
f_result = vec_##NAME (f_src_a, f_src_b); \
\
if (f_result != f_##NAME##_expected) \
{ \
if (DEBUG) \
{ \
printf("ERROR: vec_%s (float, float) expected value does not match\n", \
#NAME); \
printf(" expected = %d; result = %d\n", \
f_##NAME##_expected, f_result); \
} \
else \
abort(); \
}
#define DOUBLE_1ARG_CHECK(NAME ) \
d_result = vec_##NAME (d_src); \
\
if (d_result != d_##NAME##_expected) \
{ \
if (DEBUG) \
{ \
printf("ERROR: vec_%s (double) expected value does not match\n", \
#NAME); \
printf(" expected = %d; result = %d\n", \
d_##NAME##_expected, d_result); \
} \
else \
abort(); \
}
#define DOUBLE_2ARG_CHECK(NAME) \
d_result = vec_##NAME (d_src_a, d_src_b); \
\
if (d_result != d_##NAME##_expected) \
{ \
if (DEBUG) \
{ \
printf("ERROR: vec_%s (double, double) expected value does not match\n", \
#NAME); \
printf(" expected = %d; result = %d\n", \
d_##NAME##_expected, d_result); \
} \
else \
abort(); \
}
int
main () {
vector float f_src = {126.0, 23.0, -338.0, 17.0};
vector float f_src_a = {126.0, 23.0, -338.0, 17.0};
vector float f_src_b = {2.00, 23.0, 1.0, 4.0};
bool f_result;
bool f_all_eq_expected = 0;
bool f_all_gt_expected = 0;
bool f_all_ge_expected = 0;
bool f_all_lt_expected = 0;
bool f_all_le_expected = 0;
bool f_all_nan_expected = 0;
bool f_all_numeric_expected = 1;
bool f_any_eq_expected = 1;
bool f_any_gt_expected = 1;
bool f_any_ge_expected = 1;
bool f_any_lt_expected = 1;
bool f_any_le_expected = 1;
bool f_any_nan_expected = 0;
bool f_any_numeric_expected = 1;
vector double d_src = { 125.44, -338.56};
vector double d_src_a = { 125.44, -338.56};
vector double d_src_b = d_src_a;
bool d_result;
bool d_all_eq_expected = 1;
bool d_all_gt_expected = 0;
bool d_all_ge_expected = 1;
bool d_all_lt_expected = 0;
bool d_all_le_expected = 1;
bool d_all_nan_expected = 0;
bool d_all_numeric_expected = 1;
bool d_any_eq_expected = 1;
bool d_any_gt_expected = 0;
bool d_any_ge_expected = 1;
bool d_any_lt_expected = 0;
bool d_any_le_expected = 1;
bool d_any_nan_expected = 0;
bool d_any_numeric_expected = 1;
/* Run tests. */
FLOAT_1ARG_CHECK (all_nan)
FLOAT_1ARG_CHECK (all_numeric)
FLOAT_1ARG_CHECK (any_nan)
FLOAT_1ARG_CHECK (any_numeric)
FLOAT_2ARG_CHECK (all_eq)
FLOAT_2ARG_CHECK (all_gt)
FLOAT_2ARG_CHECK (all_ge)
FLOAT_2ARG_CHECK (all_lt)
FLOAT_2ARG_CHECK (all_le)
FLOAT_2ARG_CHECK (any_eq)
FLOAT_2ARG_CHECK (any_gt)
FLOAT_2ARG_CHECK (any_ge)
FLOAT_2ARG_CHECK (any_lt)
FLOAT_2ARG_CHECK (any_le)
DOUBLE_1ARG_CHECK (all_nan)
DOUBLE_1ARG_CHECK (all_numeric)
DOUBLE_1ARG_CHECK (any_nan)
DOUBLE_1ARG_CHECK (any_numeric)
DOUBLE_2ARG_CHECK (all_eq)
DOUBLE_2ARG_CHECK (all_gt)
DOUBLE_2ARG_CHECK (all_ge)
DOUBLE_2ARG_CHECK (all_lt)
DOUBLE_2ARG_CHECK (all_le)
DOUBLE_2ARG_CHECK (any_eq)
DOUBLE_2ARG_CHECK (any_gt)
DOUBLE_2ARG_CHECK (any_ge)
DOUBLE_2ARG_CHECK (any_lt)
DOUBLE_2ARG_CHECK (any_le)
return 0;
}
|