Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(127)

Side by Side Diff: crosstest/test_fcmp_main.cpp

Issue 265703002: Add Om1 lowering with no optimizations (Closed) Base URL: https://gerrit.chromium.org/gerrit/p/native_client/pnacl-subzero.git@master
Patch Set: Created 6 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
(Empty)
1 // abtest.py --test=test_fcmp.pnacl.ll --driver=test_fcmp_main.cpp --prefix=Subz ero_ --output=test_fcmp
2
3 #include <stdio.h>
4 #include <float.h>
5 #include <math.h>
6 #include <assert.h>
7
8 extern "C" {
9
10 bool fcmpFalseFloat(float a, float b);
11 bool fcmpOeqFloat(float a, float b);
12 bool fcmpOgtFloat(float a, float b);
13 bool fcmpOgeFloat(float a, float b);
14 bool fcmpOltFloat(float a, float b);
15 bool fcmpOleFloat(float a, float b);
16 bool fcmpOneFloat(float a, float b);
17 bool fcmpOrdFloat(float a, float b);
18 bool fcmpUeqFloat(float a, float b);
19 bool fcmpUgtFloat(float a, float b);
20 bool fcmpUgeFloat(float a, float b);
21 bool fcmpUltFloat(float a, float b);
22 bool fcmpUleFloat(float a, float b);
23 bool fcmpUneFloat(float a, float b);
24 bool fcmpUnoFloat(float a, float b);
25 bool fcmpTrueFloat(float a, float b);
26
27 bool fcmpFalseDouble(double a, double b);
28 bool fcmpOeqDouble(double a, double b);
29 bool fcmpOgtDouble(double a, double b);
30 bool fcmpOgeDouble(double a, double b);
31 bool fcmpOltDouble(double a, double b);
32 bool fcmpOleDouble(double a, double b);
33 bool fcmpOneDouble(double a, double b);
34 bool fcmpOrdDouble(double a, double b);
35 bool fcmpUeqDouble(double a, double b);
36 bool fcmpUgtDouble(double a, double b);
37 bool fcmpUgeDouble(double a, double b);
38 bool fcmpUltDouble(double a, double b);
39 bool fcmpUleDouble(double a, double b);
40 bool fcmpUneDouble(double a, double b);
41 bool fcmpUnoDouble(double a, double b);
42 bool fcmpTrueDouble(double a, double b);
43
44 bool Subzero_fcmpFalseFloat(float a, float b);
45 bool Subzero_fcmpOeqFloat(float a, float b);
46 bool Subzero_fcmpOgtFloat(float a, float b);
47 bool Subzero_fcmpOgeFloat(float a, float b);
48 bool Subzero_fcmpOltFloat(float a, float b);
49 bool Subzero_fcmpOleFloat(float a, float b);
50 bool Subzero_fcmpOneFloat(float a, float b);
51 bool Subzero_fcmpOrdFloat(float a, float b);
52 bool Subzero_fcmpUeqFloat(float a, float b);
53 bool Subzero_fcmpUgtFloat(float a, float b);
54 bool Subzero_fcmpUgeFloat(float a, float b);
55 bool Subzero_fcmpUltFloat(float a, float b);
56 bool Subzero_fcmpUleFloat(float a, float b);
57 bool Subzero_fcmpUneFloat(float a, float b);
58 bool Subzero_fcmpUnoFloat(float a, float b);
59 bool Subzero_fcmpTrueFloat(float a, float b);
60
61 bool Subzero_fcmpFalseDouble(double a, double b);
62 bool Subzero_fcmpOeqDouble(double a, double b);
63 bool Subzero_fcmpOgtDouble(double a, double b);
64 bool Subzero_fcmpOgeDouble(double a, double b);
65 bool Subzero_fcmpOltDouble(double a, double b);
66 bool Subzero_fcmpOleDouble(double a, double b);
67 bool Subzero_fcmpOneDouble(double a, double b);
68 bool Subzero_fcmpOrdDouble(double a, double b);
69 bool Subzero_fcmpUeqDouble(double a, double b);
70 bool Subzero_fcmpUgtDouble(double a, double b);
71 bool Subzero_fcmpUgeDouble(double a, double b);
72 bool Subzero_fcmpUltDouble(double a, double b);
73 bool Subzero_fcmpUleDouble(double a, double b);
74 bool Subzero_fcmpUneDouble(double a, double b);
75 bool Subzero_fcmpUnoDouble(double a, double b);
76 bool Subzero_fcmpTrueDouble(double a, double b);
77 }
78
79 int main(int argc, char **argv) {
80 static const float FloatNegInf = -1.0 / 0.0;
81 static const float FloatZero = 0.0;
82 static const float FloatTen = 10.0;
83 static const float FloatPosInf = 1.0 / 0.0;
84 static const float FloatNan = 0.0 / 0.0;
85 assert(fpclassify(FloatNegInf) == FP_INFINITE);
86 assert(fpclassify(FloatPosInf) == FP_INFINITE);
87 assert(fpclassify(FloatNan) == FP_NAN);
88 assert(FloatNegInf < FloatZero);
89 assert(FloatNegInf < FloatPosInf);
90 assert(FloatZero < FloatPosInf);
91
92 static const double DoubleNegInf = -1.0 / 0.0;
93 static const double DoubleZero = 0.0;
94 static const double DoubleTen = 10.0;
95 static const double DoublePosInf = 1.0 / 0.0;
96 static const double DoubleNan = 0.0 / 0.0;
97 assert(fpclassify(DoubleNegInf) == FP_INFINITE);
98 assert(fpclassify(DoublePosInf) == FP_INFINITE);
99 assert(fpclassify(DoubleNan) == FP_NAN);
100 assert(DoubleNegInf < DoubleZero);
101 assert(DoubleNegInf < DoublePosInf);
102 assert(DoubleZero < DoublePosInf);
103
104 static float FloatValues[] = { FloatNegInf, FloatZero, FLT_MIN, FloatTen,
105 FLT_MAX, FloatPosInf, FloatNan, };
106 const static unsigned NumFloatValues =
107 sizeof(FloatValues) / sizeof(*FloatValues);
108
109 static double DoubleValues[] = { DoubleNegInf, DoubleZero, DBL_MIN,
110 DoubleTen, DBL_MAX, DoublePosInf,
111 DoubleNan, };
112 const static unsigned NumDoubleValues =
113 sizeof(DoubleValues) / sizeof(*DoubleValues);
114
115 typedef bool (*FuncTypeFloat)(float, float);
116 static struct {
117 const char *Name;
118 FuncTypeFloat FuncSz;
119 FuncTypeFloat FuncLlc;
120 } FuncFloat[] = {
121 { "fcmpFalseFloat", Subzero_fcmpFalseFloat, fcmpFalseFloat },
122 { "fcmpOeqFloat", Subzero_fcmpOeqFloat, fcmpOeqFloat },
123 { "fcmpOgtFloat", Subzero_fcmpOgtFloat, fcmpOgtFloat },
124 { "fcmpOgeFloat", Subzero_fcmpOgeFloat, fcmpOgeFloat },
125 { "fcmpOltFloat", Subzero_fcmpOltFloat, fcmpOltFloat },
126 { "fcmpOleFloat", Subzero_fcmpOleFloat, fcmpOleFloat },
127 { "fcmpOneFloat", Subzero_fcmpOneFloat, fcmpOneFloat },
128 { "fcmpOrdFloat", Subzero_fcmpOrdFloat, fcmpOrdFloat },
129 { "fcmpUeqFloat", Subzero_fcmpUeqFloat, fcmpUeqFloat },
130 { "fcmpUgtFloat", Subzero_fcmpUgtFloat, fcmpUgtFloat },
131 { "fcmpUgeFloat", Subzero_fcmpUgeFloat, fcmpUgeFloat },
132 { "fcmpUltFloat", Subzero_fcmpUltFloat, fcmpUltFloat },
133 { "fcmpUleFloat", Subzero_fcmpUleFloat, fcmpUleFloat },
134 { "fcmpUneFloat", Subzero_fcmpUneFloat, fcmpUneFloat },
135 { "fcmpUnoFloat", Subzero_fcmpUnoFloat, fcmpUnoFloat },
136 { "fcmpTrueFloat", Subzero_fcmpTrueFloat, fcmpTrueFloat },
137 };
138 const static unsigned NumFuncFloat = sizeof(FuncFloat) / sizeof(*FuncFloat);
139
140 typedef bool (*FuncTypeDouble)(double, double);
141 static struct {
142 const char *Name;
143 FuncTypeDouble FuncSz;
144 FuncTypeDouble FuncLlc;
145 } FuncDouble[] = {
146 { "fcmpFalseDouble", Subzero_fcmpFalseDouble, fcmpFalseDouble },
147 { "fcmpOeqDouble", Subzero_fcmpOeqDouble, fcmpOeqDouble },
148 { "fcmpOgtDouble", Subzero_fcmpOgtDouble, fcmpOgtDouble },
149 { "fcmpOgeDouble", Subzero_fcmpOgeDouble, fcmpOgeDouble },
150 { "fcmpOltDouble", Subzero_fcmpOltDouble, fcmpOltDouble },
151 { "fcmpOleDouble", Subzero_fcmpOleDouble, fcmpOleDouble },
152 { "fcmpOneDouble", Subzero_fcmpOneDouble, fcmpOneDouble },
153 { "fcmpOrdDouble", Subzero_fcmpOrdDouble, fcmpOrdDouble },
154 { "fcmpUeqDouble", Subzero_fcmpUeqDouble, fcmpUeqDouble },
155 { "fcmpUgtDouble", Subzero_fcmpUgtDouble, fcmpUgtDouble },
156 { "fcmpUgeDouble", Subzero_fcmpUgeDouble, fcmpUgeDouble },
157 { "fcmpUltDouble", Subzero_fcmpUltDouble, fcmpUltDouble },
158 { "fcmpUleDouble", Subzero_fcmpUleDouble, fcmpUleDouble },
159 { "fcmpUneDouble", Subzero_fcmpUneDouble, fcmpUneDouble },
160 { "fcmpUnoDouble", Subzero_fcmpUnoDouble, fcmpUnoDouble },
161 { "fcmpTrueDouble", Subzero_fcmpTrueDouble, fcmpTrueDouble },
162 };
163 const static unsigned NumFuncDouble =
164 sizeof(FuncDouble) / sizeof(*FuncDouble);
165
166 bool ResultSz, ResultLlc;
167
168 unsigned TotalTests = 0;
169 unsigned Passes = 0;
170 unsigned Failures = 0;
171
172 for (unsigned f = 0; f < NumFuncFloat; ++f) {
173 for (unsigned i = 0; i < NumFloatValues; ++i) {
174 for (unsigned j = 0; j < NumFloatValues; ++j) {
175 ++TotalTests;
176 ResultSz = FuncFloat[f].FuncSz(FloatValues[i], FloatValues[j]);
177 ResultLlc = FuncFloat[f].FuncLlc(FloatValues[i], FloatValues[j]);
178 if (ResultSz == ResultLlc) {
179 ++Passes;
180 } else {
181 ++Failures;
182 printf("%s(%g, %g): sz=%d llc=%d\n", FuncFloat[f].Name,
183 FloatValues[i], FloatValues[j], ResultSz, ResultLlc);
184 }
185 }
186 }
187 }
188
189 for (unsigned f = 0; f < NumFuncDouble; ++f) {
190 for (unsigned i = 0; i < NumDoubleValues; ++i) {
191 for (unsigned j = 0; j < NumDoubleValues; ++j) {
192 ++TotalTests;
193 ResultSz = FuncDouble[f].FuncSz(DoubleValues[i], DoubleValues[j]);
194 ResultLlc = FuncDouble[f].FuncLlc(DoubleValues[i], DoubleValues[j]);
195 if (ResultSz == ResultLlc) {
196 ++Passes;
197 } else {
198 ++Failures;
199 printf("%s(%g, %g): sz=%d llc=%d\n", FuncDouble[f].Name,
200 DoubleValues[i], DoubleValues[j], ResultSz, ResultLlc);
201 }
202 }
203 }
204 }
205
206 printf("TotalTests=%u Passes=%u Failures=%u\n", TotalTests, Passes, Failures);
207 return Failures;
208 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698