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

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: Merge changed from Karl's committed CL 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
« no previous file with comments | « crosstest/test_cast.cpp ('k') | crosstest/test_cast_to_u1.ll » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
1 /* crosstest.py --test=test_cast.cpp --test=test_cast_to_u1.ll \
2 --driver=test_cast_main.cpp --prefix=Subzero_ --output=test_cast */
3
4 #include <cstring>
5 #include <iostream>
6 #include <stdint.h>
7
8 // Include test_cast.h twice - once normally, and once within the
9 // Subzero_ namespace, corresponding to the llc and Subzero translated
10 // object files, respectively.
11 #include "test_cast.h"
12 namespace Subzero_ {
13 #include "test_cast.h"
14 }
15
16 #define XSTR(s) STR(s)
17 #define STR(s) #s
18 #define COMPARE(Func, FromCName, ToCName, Input) \
19 do { \
20 ToCName ResultSz, ResultLlc; \
21 ResultLlc = Func<FromCName, ToCName>(Input); \
22 ResultSz = Subzero_::Func<FromCName, ToCName>(Input); \
23 ++TotalTests; \
24 if (!memcmp(&ResultLlc, &ResultSz, sizeof(ToCName))) { \
25 ++Passes; \
26 } else { \
27 ++Failures; \
28 std::cout << std::fixed << XSTR(Func) \
29 << "<" XSTR(FromCName) ", " XSTR(ToCName) ">(" << Input \
30 << "): sz=" << ResultSz << " llc=" << ResultLlc << "\n"; \
31 } \
32 } while (0)
33
34 template <typename FromType>
35 void testValue(FromType Val, size_t &TotalTests, size_t &Passes,
36 size_t &Failures) {
37 COMPARE(cast, FromType, bool, Val);
38 COMPARE(cast, FromType, uint8_t, Val);
39 COMPARE(cast, FromType, int8_t, Val);
40 COMPARE(cast, FromType, uint16_t, Val);
41 COMPARE(cast, FromType, int16_t, Val);
42 COMPARE(cast, FromType, uint32_t, Val);
43 COMPARE(cast, FromType, int32_t, Val);
44 COMPARE(cast, FromType, uint64_t, Val);
45 COMPARE(cast, FromType, int64_t, Val);
46 COMPARE(cast, FromType, float, Val);
47 COMPARE(cast, FromType, double, Val);
48 }
49
50 int main(int argc, char **argv) {
51 size_t TotalTests = 0;
52 size_t Passes = 0;
53 size_t Failures = 0;
54
55 volatile bool ValsUi1[] = { false, true };
56 static const size_t NumValsUi1 = sizeof(ValsUi1) / sizeof(*ValsUi1);
57 volatile uint8_t ValsUi8[] = { 0, 1, 0x7e, 0x7f, 0x80, 0x81, 0xfe, 0xff };
58 static const size_t NumValsUi8 = sizeof(ValsUi8) / sizeof(*ValsUi8);
59
60 volatile int8_t ValsSi8[] = { 0, 1, 0x7e, 0x7f, 0x80, 0x81, 0xfe, 0xff };
61 static const size_t NumValsSi8 = sizeof(ValsSi8) / sizeof(*ValsSi8);
62
63 volatile uint16_t ValsUi16[] = { 0, 1, 0x7e, 0x7f, 0x80,
64 0x81, 0xfe, 0xff, 0x7ffe, 0x7fff,
65 0x8000, 0x8001, 0xfffe, 0xffff };
66 static const size_t NumValsUi16 = sizeof(ValsUi16) / sizeof(*ValsUi16);
67
68 volatile int16_t ValsSi16[] = { 0, 1, 0x7e, 0x7f, 0x80,
69 0x81, 0xfe, 0xff, 0x7ffe, 0x7fff,
70 0x8000, 0x8001, 0xfffe, 0xffff };
71 static const size_t NumValsSi16 = sizeof(ValsSi16) / sizeof(*ValsSi16);
72
73 volatile size_t ValsUi32[] = {
74 0, 1, 0x7e, 0x7f, 0x80,
75 0x81, 0xfe, 0xff, 0x7ffe, 0x7fff,
76 0x8000, 0x8001, 0xfffe, 0xffff, 0x7ffffffe,
77 0x7fffffff, 0x80000000, 0x80000001, 0xfffffffe, 0xffffffff
78 };
79 static const size_t NumValsUi32 = sizeof(ValsUi32) / sizeof(*ValsUi32);
80
81 volatile size_t ValsSi32[] = {
82 0, 1, 0x7e, 0x7f, 0x80,
83 0x81, 0xfe, 0xff, 0x7ffe, 0x7fff,
84 0x8000, 0x8001, 0xfffe, 0xffff, 0x7ffffffe,
85 0x7fffffff, 0x80000000, 0x80000001, 0xfffffffe, 0xffffffff
86 };
87 static const size_t NumValsSi32 = sizeof(ValsSi32) / sizeof(*ValsSi32);
88
89 volatile uint64_t ValsUi64[] = {
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, 0x100000000ull,
97 0x100000001ull, 0x7ffffffffffffffeull, 0x7fffffffffffffffull,
98 0x8000000000000000ull, 0x8000000000000001ull, 0xfffffffffffffffeull,
99 0xffffffffffffffffull
100 };
101 static const size_t NumValsUi64 = sizeof(ValsUi64) / sizeof(*ValsUi64);
102
103 volatile int64_t ValsSi64[] = {
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 size_t NumValsSi64 = sizeof(ValsSi64) / sizeof(*ValsSi64);
116
117 volatile float ValsF32[] = {
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 size_t NumValsF32 = sizeof(ValsF32) / sizeof(*ValsF32);
130
131 volatile double ValsF64[] = {
132 0, 1, 0x7e,
133 0x7f, 0x80, 0x81,
134 0xfe, 0xff, 0x7ffe,
135 0x7fff, 0x8000, 0x8001,
136 0xfffe, 0xffff, 0x7ffffffe,
137 0x7fffffff, 0x80000000, 0x80000001,
138 0xfffffffe, 0xffffffff, 0x100000000ll,
139 0x100000001ll, 0x7ffffffffffffffell, 0x7fffffffffffffffll,
140 0x8000000000000000ll, 0x8000000000000001ll, 0xfffffffffffffffell,
141 0xffffffffffffffffll
142 };
143 static const size_t NumValsF64 = sizeof(ValsF64) / sizeof(*ValsF64);
144
145 for (size_t i = 0; i < NumValsUi1; ++i) {
146 bool Val = ValsUi1[i];
147 testValue<bool>(Val, TotalTests, Passes, Failures);
148 }
149 for (size_t i = 0; i < NumValsUi8; ++i) {
150 uint8_t Val = ValsUi8[i];
151 testValue<uint8_t>(Val, TotalTests, Passes, Failures);
152 }
153 for (size_t i = 0; i < NumValsSi8; ++i) {
154 int8_t Val = ValsSi8[i];
155 testValue<int8_t>(Val, TotalTests, Passes, Failures);
156 }
157 for (size_t i = 0; i < NumValsUi16; ++i) {
158 uint16_t Val = ValsUi16[i];
159 testValue<uint16_t>(Val, TotalTests, Passes, Failures);
160 }
161 for (size_t i = 0; i < NumValsSi16; ++i) {
162 int16_t Val = ValsSi16[i];
163 testValue<int16_t>(Val, TotalTests, Passes, Failures);
164 }
165 for (size_t i = 0; i < NumValsUi32; ++i) {
166 uint32_t Val = ValsUi32[i];
167 testValue<uint32_t>(Val, TotalTests, Passes, Failures);
168 COMPARE(castBits, uint32_t, float, Val);
169 }
170 for (size_t i = 0; i < NumValsSi32; ++i) {
171 int32_t Val = ValsSi32[i];
172 testValue<int32_t>(Val, TotalTests, Passes, Failures);
173 }
174 for (size_t i = 0; i < NumValsUi64; ++i) {
175 uint64_t Val = ValsUi64[i];
176 testValue<uint64_t>(Val, TotalTests, Passes, Failures);
177 COMPARE(castBits, uint64_t, double, Val);
178 }
179 for (size_t i = 0; i < NumValsSi64; ++i) {
180 int64_t Val = ValsSi64[i];
181 testValue<int64_t>(Val, TotalTests, Passes, Failures);
182 }
183 for (size_t i = 0; i < NumValsF32; ++i) {
184 for (unsigned j = 0; j < 2; ++j) {
185 float Val = ValsF32[i];
186 if (j > 0)
187 Val = -Val;
188 testValue<float>(Val, TotalTests, Passes, Failures);
189 COMPARE(castBits, float, uint32_t, Val);
190 }
191 }
192 for (size_t i = 0; i < NumValsF64; ++i) {
193 for (unsigned j = 0; j < 2; ++j) {
194 double Val = ValsF64[i];
195 if (j > 0)
196 Val = -Val;
197 testValue<double>(Val, TotalTests, Passes, Failures);
198 COMPARE(castBits, double, uint64_t, Val);
199 }
200 }
201
202 std::cout << "TotalTests=" << TotalTests << " Passes=" << Passes
203 << " Failures=" << Failures << "\n";
204 return Failures;
205 }
206
207 ////////////////////////////////////////////////////////////////
208
209 // The following are helper definitions that should be part of the
210 // Subzero runtime.
211
212 extern "C" {
213 uint32_t cvtdtoui32(double a) { return (uint32_t)a; }
214 uint32_t cvtftoui32(float a) { return (uint32_t)a; }
215 int64_t cvtdtosi64(double a) { return (int64_t)a; }
216 int64_t cvtftosi64(float a) { return (int64_t)a; }
217 uint64_t cvtdtoui64(double a) { return (uint64_t)a; }
218 uint64_t cvtftoui64(float a) { return (uint64_t)a; }
219 float cvtui64tof(uint64_t a) { return (float)a; }
220 double cvtui64tod(uint64_t a) { return (double)a; }
221 float cvtsi64tof(int64_t a) { return (float)a; }
222 float cvtui32tof(uint32_t a) { return (float)a; }
223 double cvtui32tod(uint32_t a) { return (double)a; }
224 double cvtsi64tod(int64_t a) { return (double)a; }
225 }
OLDNEW
« no previous file with comments | « crosstest/test_cast.cpp ('k') | crosstest/test_cast_to_u1.ll » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698