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

Side by Side Diff: test/cctest/compiler/codegen-tester.h

Issue 1044793002: [turbofan] Add backend support for float32 operations. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Add MachineOperator unit tests. Created 5 years, 8 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
1 // Copyright 2014 the V8 project authors. All rights reserved. 1 // Copyright 2014 the V8 project authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #ifndef V8_CCTEST_COMPILER_CODEGEN_TESTER_H_ 5 #ifndef V8_CCTEST_COMPILER_CODEGEN_TESTER_H_
6 #define V8_CCTEST_COMPILER_CODEGEN_TESTER_H_ 6 #define V8_CCTEST_COMPILER_CODEGEN_TESTER_H_
7 7
8 #include "src/v8.h" 8 #include "src/v8.h"
9 9
10 #include "src/compiler/instruction-selector.h" 10 #include "src/compiler/instruction-selector.h"
(...skipping 125 matching lines...) Expand 10 before | Expand all | Expand 10 after
136 Node* param0; 136 Node* param0;
137 Node* param1; 137 Node* param1;
138 138
139 CType call(CType a0, CType a1) { 139 CType call(CType a0, CType a1) {
140 p0 = a0; 140 p0 = a0;
141 p1 = a1; 141 p1 = a1;
142 if (use_result_buffer) { 142 if (use_result_buffer) {
143 CHECK_EQ(CHECK_VALUE, T->Call()); 143 CHECK_EQ(CHECK_VALUE, T->Call());
144 return result; 144 return result;
145 } else { 145 } else {
146 return T->Call(); 146 return static_cast<CType>(T->Call());
147 } 147 }
148 } 148 }
149 149
150 void AddReturn(Node* val) { 150 void AddReturn(Node* val) {
151 if (use_result_buffer) { 151 if (use_result_buffer) {
152 T->Store(rep, T->PointerConstant(&result), T->Int32Constant(0), val); 152 T->Store(rep, T->PointerConstant(&result), T->Int32Constant(0), val);
153 T->Return(T->Int32Constant(CHECK_VALUE)); 153 T->Return(T->Int32Constant(CHECK_VALUE));
154 } else { 154 } else {
155 T->Return(val); 155 T->Return(val);
156 } 156 }
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
193 : BinopTester<uint32_t, kMachUint32, USE_RETURN_REGISTER>(tester) {} 193 : BinopTester<uint32_t, kMachUint32, USE_RETURN_REGISTER>(tester) {}
194 194
195 uint32_t call(uint32_t a0, uint32_t a1) { 195 uint32_t call(uint32_t a0, uint32_t a1) {
196 p0 = a0; 196 p0 = a0;
197 p1 = a1; 197 p1 = a1;
198 return static_cast<uint32_t>(T->Call()); 198 return static_cast<uint32_t>(T->Call());
199 } 199 }
200 }; 200 };
201 201
202 202
203 // A helper class for testing code sequences that take two float parameters and
204 // return a float value.
205 // TODO(titzer): figure out how to return floats correctly on ia32.
206 class Float32BinopTester
207 : public BinopTester<float, kMachFloat32, USE_RESULT_BUFFER> {
208 public:
209 explicit Float32BinopTester(RawMachineAssemblerTester<int32_t>* tester)
210 : BinopTester<float, kMachFloat32, USE_RESULT_BUFFER>(tester) {}
211 };
212
213
203 // A helper class for testing code sequences that take two double parameters and 214 // A helper class for testing code sequences that take two double parameters and
204 // return a double value. 215 // return a double value.
205 // TODO(titzer): figure out how to return doubles correctly on ia32. 216 // TODO(titzer): figure out how to return doubles correctly on ia32.
206 class Float64BinopTester 217 class Float64BinopTester
207 : public BinopTester<double, kMachFloat64, USE_RESULT_BUFFER> { 218 : public BinopTester<double, kMachFloat64, USE_RESULT_BUFFER> {
208 public: 219 public:
209 explicit Float64BinopTester(RawMachineAssemblerTester<int32_t>* tester) 220 explicit Float64BinopTester(RawMachineAssemblerTester<int32_t>* tester)
210 : BinopTester<double, kMachFloat64, USE_RESULT_BUFFER>(tester) {} 221 : BinopTester<double, kMachFloat64, USE_RESULT_BUFFER>(tester) {}
211 }; 222 };
212 223
(...skipping 114 matching lines...) Expand 10 before | Expand all | Expand 10 after
327 BinopGen<int32_t>* gen; 338 BinopGen<int32_t>* gen;
328 int32_t input_a; 339 int32_t input_a;
329 int32_t input_b; 340 int32_t input_b;
330 341
331 void Run(RawMachineAssemblerTester<int32_t>* m); 342 void Run(RawMachineAssemblerTester<int32_t>* m);
332 void RunLeft(RawMachineAssemblerTester<int32_t>* m); 343 void RunLeft(RawMachineAssemblerTester<int32_t>* m);
333 void RunRight(RawMachineAssemblerTester<int32_t>* m); 344 void RunRight(RawMachineAssemblerTester<int32_t>* m);
334 }; 345 };
335 346
336 // TODO(bmeurer): Drop this crap once we switch to GTest/Gmock. 347 // TODO(bmeurer): Drop this crap once we switch to GTest/Gmock.
348 static inline void CheckFloatEq(volatile float x, volatile float y) {
349 if (std::isnan(x)) {
350 CHECK(std::isnan(y));
351 } else {
352 CHECK(x == y);
353 }
354 }
355
337 static inline void CheckDoubleEq(volatile double x, volatile double y) { 356 static inline void CheckDoubleEq(volatile double x, volatile double y) {
338 if (std::isnan(x)) { 357 if (std::isnan(x)) {
339 CHECK(std::isnan(y)); 358 CHECK(std::isnan(y));
340 } else { 359 } else {
341 CHECK_EQ(x, y); 360 CHECK_EQ(x, y);
342 } 361 }
343 } 362 }
344 363
345 } // namespace compiler 364 } // namespace compiler
346 } // namespace internal 365 } // namespace internal
347 } // namespace v8 366 } // namespace v8
348 367
349 #endif // V8_CCTEST_COMPILER_CODEGEN_TESTER_H_ 368 #endif // V8_CCTEST_COMPILER_CODEGEN_TESTER_H_
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698