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

Side by Side Diff: crosstest/test_cast_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_cast.cpp --test=test_cast_to_u1.ll --driver=test_cast_m ain.cpp --prefix=Subzero_ --output=test_cast
2
3 #include <stdio.h>
4 #include <stdint.h>
5 #include <string.h>
6
7 #include "test_cast.h"
8
9 namespace Subzero_ {
10 #include "test_cast.h"
11 }
12
13 #define XSTR(s) STR(s)
14 #define STR(s) #s
15 #define COMPARE(FromCName, FromIceName, FromPrintf, ToCName, ToIceName, \
16 ToPrintf, Input) \
17 do { \
18 ToCName ResultSz, ResultLlc; \
19 ResultLlc = cast##FromIceName##To##ToIceName(Input); \
20 ResultSz = Subzero_::cast##FromIceName##To##ToIceName(Input); \
21 ++TotalTests; \
22 if (!memcmp(&ResultLlc, &ResultSz, sizeof(ToCName))) { \
23 ++Passes; \
24 } else { \
25 ++Failures; \
26 printf("cast" XSTR(FromIceName) "To" XSTR(ToIceName) "(" XSTR( \
27 FromPrintf) "): " \
28 "sz=" ToPrintf " llc=" ToPrintf "\n", \
29 Input, ResultSz, ResultLlc); \
30 } \
31 } while (0)
32
33 int main(int argc, char **argv) {
34 unsigned TotalTests = 0;
35 unsigned Passes = 0;
36 unsigned Failures = 0;
37
38 static const bool ValsUi1[] = { false, true };
39 static const unsigned NumValsUi1 = sizeof(ValsUi1) / sizeof(*ValsUi1);
40 static const unsigned char ValsUi8[] = { 0, 1, 0x7e, 0x7f,
41 0x80, 0x81, 0xfe, 0xff };
42 static const unsigned NumValsUi8 = sizeof(ValsUi8) / sizeof(*ValsUi8);
43
44 static const signed char ValsSi8[] = { 0, 1, 0x7e, 0x7f,
45 0x80, 0x81, 0xfe, 0xff };
46 static const unsigned NumValsSi8 = sizeof(ValsSi8) / sizeof(*ValsSi8);
47
48 static const unsigned short ValsUi16[] = { 0, 1, 0x7e, 0x7f,
49 0x80, 0x81, 0xfe, 0xff,
50 0x7ffe, 0x7fff, 0x8000, 0x8001,
51 0xfffe, 0xffff };
52 static const unsigned NumValsUi16 = sizeof(ValsUi16) / sizeof(*ValsUi16);
53
54 static const short ValsSi16[] = { 0, 1, 0x7e, 0x7f, 0x80,
55 0x81, 0xfe, 0xff, 0x7ffe, 0x7fff,
56 0x8000, 0x8001, 0xfffe, 0xffff };
57 static const unsigned NumValsSi16 = sizeof(ValsSi16) / sizeof(*ValsSi16);
58
59 static const unsigned ValsUi32[] = {
60 0, 1, 0x7e, 0x7f, 0x80,
61 0x81, 0xfe, 0xff, 0x7ffe, 0x7fff,
62 0x8000, 0x8001, 0xfffe, 0xffff, 0x7ffffffe,
63 0x7fffffff, 0x80000000, 0x80000001, 0xfffffffe, 0xffffffff
64 };
65 static const unsigned NumValsUi32 = sizeof(ValsUi32) / sizeof(*ValsUi32);
66
67 static const unsigned ValsSi32[] = {
68 0, 1, 0x7e, 0x7f, 0x80,
69 0x81, 0xfe, 0xff, 0x7ffe, 0x7fff,
70 0x8000, 0x8001, 0xfffe, 0xffff, 0x7ffffffe,
71 0x7fffffff, 0x80000000, 0x80000001, 0xfffffffe, 0xffffffff
72 };
73 static const unsigned NumValsSi32 = sizeof(ValsSi32) / sizeof(*ValsSi32);
74
75 static const uint64_t ValsUi64[] = {
76 0, 1, 0x7e,
77 0x7f, 0x80, 0x81,
78 0xfe, 0xff, 0x7ffe,
79 0x7fff, 0x8000, 0x8001,
80 0xfffe, 0xffff, 0x7ffffffe,
81 0x7fffffff, 0x80000000, 0x80000001,
82 0xfffffffe, 0xffffffff, 0x100000000ull,
83 0x100000001ull, 0x7ffffffffffffffeull, 0x7fffffffffffffffull,
84 0x8000000000000000ull, 0x8000000000000001ull, 0xfffffffffffffffeull,
85 0xffffffffffffffffull
86 };
87 static const unsigned NumValsUi64 = sizeof(ValsUi64) / sizeof(*ValsUi64);
88
89 static const int64_t ValsSi64[] = {
90 0, 1, 0x7e,
91 0x7f, 0x80, 0x81,
92 0xfe, 0xff, 0x7ffe,
93 0x7fff, 0x8000, 0x8001,
94 0xfffe, 0xffff, 0x7ffffffe,
95 0x7fffffff, 0x80000000, 0x80000001,
96 0xfffffffe, 0xffffffff, 0x100000000ll,
97 0x100000001ll, 0x7ffffffffffffffell, 0x7fffffffffffffffll,
98 0x8000000000000000ll, 0x8000000000000001ll, 0xfffffffffffffffell,
99 0xffffffffffffffffll
100 };
101 static const unsigned NumValsSi64 = sizeof(ValsSi64) / sizeof(*ValsSi64);
102
103 static const float ValsF32[] = {
104 0, 1, 0x7e,
105 0x7f, 0x80, 0x81,
106 0xfe, 0xff, 0x7ffe,
107 0x7fff, 0x8000, 0x8001,
108 0xfffe, 0xffff, 0x7ffffffe,
109 0x7fffffff, 0x80000000, 0x80000001,
110 0xfffffffe, 0xffffffff, 0x100000000ll,
111 0x100000001ll, 0x7ffffffffffffffell, 0x7fffffffffffffffll,
112 0x8000000000000000ll, 0x8000000000000001ll, 0xfffffffffffffffell,
113 0xffffffffffffffffll
114 };
115 static const unsigned NumValsF32 = sizeof(ValsF32) / sizeof(*ValsF32);
116
117 static const double ValsF64[] = {
118 0, 1, 0x7e,
119 0x7f, 0x80, 0x81,
120 0xfe, 0xff, 0x7ffe,
121 0x7fff, 0x8000, 0x8001,
122 0xfffe, 0xffff, 0x7ffffffe,
123 0x7fffffff, 0x80000000, 0x80000001,
124 0xfffffffe, 0xffffffff, 0x100000000ll,
125 0x100000001ll, 0x7ffffffffffffffell, 0x7fffffffffffffffll,
126 0x8000000000000000ll, 0x8000000000000001ll, 0xfffffffffffffffell,
127 0xffffffffffffffffll
128 };
129 static const unsigned NumValsF64 = sizeof(ValsF64) / sizeof(*ValsF64);
130
131 for (unsigned i = 0; i < NumValsUi1; ++i) {
132 {
133 bool Val = ValsUi1[i];
134 COMPARE(bool, Ui1, "%u", bool, Ui1, "%u", Val);
135 COMPARE(bool, Ui1, "%u", unsigned char, Ui8, "%u", Val);
136 COMPARE(bool, Ui1, "%u", signed char, Si8, "%d", Val);
137 COMPARE(bool, Ui1, "%u", unsigned short, Ui16, "%u", Val);
138 COMPARE(bool, Ui1, "%u", short, Si16, "%d", Val);
139 COMPARE(bool, Ui1, "%u", uint32_t, Ui32, "%u", Val);
140 COMPARE(bool, Ui1, "%u", int32_t, Si32, "%d", Val);
141 COMPARE(bool, Ui1, "%u", uint64_t, Ui64, "%llu", Val);
142 COMPARE(bool, Ui1, "%u", int64_t, Si64, "%lld", Val);
143 COMPARE(bool, Ui1, "%u", float, F32, "%f", Val);
144 COMPARE(bool, Ui1, "%u", double, F64, "%f", Val);
145 }
146 }
147 for (unsigned i = 0; i < NumValsUi8; ++i) {
148 {
149 unsigned char Val = ValsUi8[i];
150 COMPARE(unsigned char, Ui8, "%u", bool, Ui1, "%u", Val);
151 COMPARE(unsigned char, Ui8, "%u", unsigned char, Ui8, "%u", Val);
152 COMPARE(unsigned char, Ui8, "%u", signed char, Si8, "%d", Val);
153 COMPARE(unsigned char, Ui8, "%u", unsigned short, Ui16, "%u", Val);
154 COMPARE(unsigned char, Ui8, "%u", short, Si16, "%d", Val);
155 COMPARE(unsigned char, Ui8, "%u", uint32_t, Ui32, "%u", Val);
156 COMPARE(unsigned char, Ui8, "%u", int32_t, Si32, "%d", Val);
157 COMPARE(unsigned char, Ui8, "%u", uint64_t, Ui64, "%llu", Val);
158 COMPARE(unsigned char, Ui8, "%u", int64_t, Si64, "%lld", Val);
159 COMPARE(unsigned char, Ui8, "%u", float, F32, "%f", Val);
160 COMPARE(unsigned char, Ui8, "%u", double, F64, "%f", Val);
161 }
162 }
163 for (unsigned i = 0; i < NumValsSi8; ++i) {
164 {
165 signed char Val = ValsSi8[i];
166 COMPARE(signed char, Si8, "%d", bool, Ui1, "%u", Val);
167 COMPARE(signed char, Si8, "%d", unsigned char, Ui8, "%u", Val);
168 COMPARE(signed char, Si8, "%d", signed char, Si8, "%d", Val);
169 COMPARE(signed char, Si8, "%d", unsigned short, Ui16, "%u", Val);
170 COMPARE(signed char, Si8, "%d", short, Si16, "%d", Val);
171 COMPARE(signed char, Si8, "%d", uint32_t, Ui32, "%u", Val);
172 COMPARE(signed char, Si8, "%d", int32_t, Si32, "%d", Val);
173 COMPARE(signed char, Si8, "%d", uint64_t, Ui64, "%llu", Val);
174 COMPARE(signed char, Si8, "%d", int64_t, Si64, "%lld", Val);
175 COMPARE(signed char, Si8, "%d", float, F32, "%f", Val);
176 COMPARE(signed char, Si8, "%d", double, F64, "%f", Val);
177 }
178 }
179 for (unsigned i = 0; i < NumValsUi16; ++i) {
180 {
181 unsigned short Val = ValsUi16[i];
182 COMPARE(unsigned short, Ui16, "%u", bool, Ui1, "%u", Val);
183 COMPARE(unsigned short, Ui16, "%u", unsigned char, Ui8, "%u", Val);
184 COMPARE(unsigned short, Ui16, "%u", signed char, Si8, "%d", Val);
185 COMPARE(unsigned short, Ui16, "%u", unsigned short, Ui16, "%u", Val);
186 COMPARE(unsigned short, Ui16, "%u", short, Si16, "%d", Val);
187 COMPARE(unsigned short, Ui16, "%u", uint32_t, Ui32, "%u", Val);
188 COMPARE(unsigned short, Ui16, "%u", int32_t, Si32, "%d", Val);
189 COMPARE(unsigned short, Ui16, "%u", uint64_t, Ui64, "%llu", Val);
190 COMPARE(unsigned short, Ui16, "%u", int64_t, Si64, "%lld", Val);
191 COMPARE(unsigned short, Ui16, "%u", float, F32, "%f", Val);
192 COMPARE(unsigned short, Ui16, "%u", double, F64, "%f", Val);
193 }
194 }
195 for (unsigned i = 0; i < NumValsSi16; ++i) {
196 {
197 signed char Val = ValsSi16[i];
198 COMPARE(short, Si16, "%d", bool, Ui1, "%u", Val);
199 COMPARE(short, Si16, "%d", unsigned char, Ui8, "%u", Val);
200 COMPARE(short, Si16, "%d", signed char, Si8, "%d", Val);
201 COMPARE(short, Si16, "%d", unsigned short, Ui16, "%u", Val);
202 COMPARE(short, Si16, "%d", short, Si16, "%d", Val);
203 COMPARE(short, Si16, "%d", uint32_t, Ui32, "%u", Val);
204 COMPARE(short, Si16, "%d", int32_t, Si32, "%d", Val);
205 COMPARE(short, Si16, "%d", uint64_t, Ui64, "%llu", Val);
206 COMPARE(short, Si16, "%d", int64_t, Si64, "%lld", Val);
207 COMPARE(short, Si16, "%d", float, F32, "%f", Val);
208 COMPARE(short, Si16, "%d", double, F64, "%f", Val);
209 }
210 }
211 for (unsigned i = 0; i < NumValsUi32; ++i) {
212 {
213 unsigned Val = ValsUi32[i];
214 COMPARE(unsigned, Ui32, "%u", bool, Ui1, "%u", Val);
215 COMPARE(unsigned, Ui32, "%u", unsigned char, Ui8, "%u", Val);
216 COMPARE(unsigned, Ui32, "%u", signed char, Si8, "%d", Val);
217 COMPARE(unsigned, Ui32, "%u", unsigned short, Ui16, "%u", Val);
218 COMPARE(unsigned, Ui32, "%u", short, Si16, "%d", Val);
219 COMPARE(unsigned, Ui32, "%u", uint32_t, Ui32, "%u", Val);
220 COMPARE(unsigned, Ui32, "%u", int32_t, Si32, "%d", Val);
221 COMPARE(unsigned, Ui32, "%u", uint64_t, Ui64, "%llu", Val);
222 COMPARE(unsigned, Ui32, "%u", int64_t, Si64, "%lld", Val);
223 COMPARE(unsigned, Ui32, "%u", float, F32, "%f", Val);
224 COMPARE(unsigned, Ui32, "%u", double, F64, "%f", Val);
225 COMPARE(unsigned, bits_Ui32, "%u", float, F32, "%f", Val);
226 }
227 }
228 for (unsigned i = 0; i < NumValsSi32; ++i) {
229 {
230 int Val = ValsSi32[i];
231 COMPARE(int, Si32, "%d", bool, Ui1, "%u", Val);
232 COMPARE(int, Si32, "%d", unsigned char, Ui8, "%u", Val);
233 COMPARE(int, Si32, "%d", signed char, Si8, "%d", Val);
234 COMPARE(int, Si32, "%d", unsigned short, Ui16, "%u", Val);
235 COMPARE(int, Si32, "%d", short, Si16, "%d", Val);
236 COMPARE(int, Si32, "%d", uint32_t, Ui32, "%u", Val);
237 COMPARE(int, Si32, "%d", int32_t, Si32, "%d", Val);
238 COMPARE(int, Si32, "%d", uint64_t, Ui64, "%llu", Val);
239 COMPARE(int, Si32, "%d", int64_t, Si64, "%lld", Val);
240 COMPARE(int, Si32, "%d", float, F32, "%f", Val);
241 COMPARE(int, Si32, "%d", double, F64, "%f", Val);
242 }
243 }
244 for (unsigned i = 0; i < NumValsUi64; ++i) {
245 {
246 uint64_t Val = ValsUi64[i];
247 COMPARE(uint64_t, Ui64, "%llu", bool, Ui1, "%u", Val);
248 COMPARE(uint64_t, Ui64, "%llu", unsigned char, Ui8, "%u", Val);
249 COMPARE(uint64_t, Ui64, "%llu", signed char, Si8, "%d", Val);
250 COMPARE(uint64_t, Ui64, "%llu", unsigned short, Ui16, "%u", Val);
251 COMPARE(uint64_t, Ui64, "%llu", short, Si16, "%d", Val);
252 COMPARE(uint64_t, Ui64, "%llu", uint32_t, Ui32, "%u", Val);
253 COMPARE(uint64_t, Ui64, "%llu", int32_t, Si32, "%d", Val);
254 COMPARE(uint64_t, Ui64, "%llu", uint64_t, Ui64, "%llu", Val);
255 COMPARE(uint64_t, Ui64, "%llu", int64_t, Si64, "%lld", Val);
256 COMPARE(uint64_t, Ui64, "%llu", float, F32, "%f", Val);
257 COMPARE(uint64_t, Ui64, "%llu", double, F64, "%f", Val);
258 COMPARE(uint64_t, bits_Ui64, "%llu", float, F64, "%f", Val);
259 }
260 }
261 for (unsigned i = 0; i < NumValsSi64; ++i) {
262 {
263 uint64_t Val = ValsSi64[i];
264 COMPARE(int64_t, Si64, "%lld", bool, Ui1, "%u", Val);
265 COMPARE(int64_t, Si64, "%lld", unsigned char, Ui8, "%u", Val);
266 COMPARE(int64_t, Si64, "%lld", signed char, Si8, "%d", Val);
267 COMPARE(int64_t, Si64, "%lld", unsigned short, Ui16, "%u", Val);
268 COMPARE(int64_t, Si64, "%lld", short, Si16, "%d", Val);
269 COMPARE(int64_t, Si64, "%lld", uint32_t, Ui32, "%u", Val);
270 COMPARE(int64_t, Si64, "%lld", int32_t, Si32, "%d", Val);
271 COMPARE(int64_t, Si64, "%lld", uint64_t, Ui64, "%llu", Val);
272 COMPARE(int64_t, Si64, "%lld", int64_t, Si64, "%lld", Val);
273 COMPARE(int64_t, Si64, "%lld", float, F32, "%f", Val);
274 COMPARE(int64_t, Si64, "%lld", double, F64, "%f", Val);
275 }
276 }
277 for (unsigned i = 0; i < NumValsF32; ++i) {
278 for (unsigned j = 0; j < 2; ++j) {
279 float Val = ValsF32[i];
280 if (j > 0)
281 Val = -Val;
282 COMPARE(float, F32, "%f", bool, Ui1, "%u", Val);
283 COMPARE(float, F32, "%f", unsigned char, Ui8, "%u", Val);
284 COMPARE(float, F32, "%f", signed char, Si8, "%d", Val);
285 COMPARE(float, F32, "%f", unsigned short, Ui16, "%u", Val);
286 COMPARE(float, F32, "%f", short, Si16, "%d", Val);
287 COMPARE(float, F32, "%f", uint32_t, Ui32, "%u", Val);
288 COMPARE(float, F32, "%f", int32_t, Si32, "%d", Val);
289 COMPARE(float, F32, "%f", uint64_t, Ui64, "%llu", Val);
290 COMPARE(float, F32, "%f", int64_t, Si64, "%lld", Val);
291 COMPARE(float, F32, "%f", float, F32, "%f", Val);
292 COMPARE(float, F32, "%f", double, F64, "%f", Val);
293 COMPARE(float, bits_F32, "%f", uint32_t, Ui32, "%u", Val);
294 }
295 }
296 for (unsigned i = 0; i < NumValsF64; ++i) {
297 for (unsigned j = 0; j < 2; ++j) {
298 double Val = ValsF64[i];
299 if (j > 0)
300 Val = -Val;
301 COMPARE(double, F64, "%f", bool, Ui1, "%u", Val);
302 COMPARE(double, F64, "%f", unsigned char, Ui8, "%u", Val);
303 COMPARE(double, F64, "%f", signed char, Si8, "%d", Val);
304 COMPARE(double, F64, "%f", unsigned short, Ui16, "%u", Val);
305 COMPARE(double, F64, "%f", short, Si16, "%d", Val);
306 COMPARE(double, F64, "%f", uint32_t, Ui32, "%u", Val);
307 COMPARE(double, F64, "%f", int32_t, Si32, "%d", Val);
308 COMPARE(double, F64, "%f", uint64_t, Ui64, "%llu", Val);
309 COMPARE(double, F64, "%f", int64_t, Si64, "%lld", Val);
310 COMPARE(double, F64, "%f", float, F32, "%f", Val);
311 COMPARE(double, F64, "%f", double, F64, "%f", Val);
312 COMPARE(double, bits_F64, "%f", uint64_t, Ui64, "%llu", Val);
313 }
314 }
315
316 printf("TotalTests=%u Passes=%u Failures=%u\n", TotalTests, Passes, Failures);
317 return Failures;
318 }
319
320 ////////////////////////////////////////////////////////////////
321
322 // The following are helper definitions that should be part of the
323 // Subzero runtime.
324
325 extern "C" uint32_t cvtdtoui32(double a) { return (uint32_t)a; }
326
327 extern "C" uint32_t cvtftoui32(float a) { return (uint32_t)a; }
328
329 extern "C" int64_t cvtdtosi64(double a) { return (int64_t)a; }
330
331 extern "C" int64_t cvtftosi64(float a) { return (int64_t)a; }
332
333 extern "C" uint64_t cvtdtoui64(double a) { return (uint64_t)a; }
334
335 extern "C" uint64_t cvtftoui64(float a) { return (uint64_t)a; }
336
337 extern "C" float cvtui64tof(uint64_t a) { return (float)a; }
338
339 extern "C" double cvtui64tod(uint64_t a) { return (double)a; }
340
341 extern "C" float cvtsi64tof(int64_t a) { return (float)a; }
342
343 extern "C" float cvtui32tof(uint32_t a) { return (float)a; }
344
345 extern "C" double cvtui32tod(uint32_t a) { return (double)a; }
346
347 extern "C" double cvtsi64tod(int64_t a) { return (double)a; }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698