OLD | NEW |
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/compiler/instruction-selector.h" | 8 #include "src/compiler/instruction-selector.h" |
9 #include "src/compiler/pipeline.h" | 9 #include "src/compiler/pipeline.h" |
10 #include "src/compiler/raw-machine-assembler.h" | 10 #include "src/compiler/raw-machine-assembler.h" |
(...skipping 95 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
106 // memory it is possible to return 64 bit values. | 106 // memory it is possible to return 64 bit values. |
107 void Return(Node* input) { | 107 void Return(Node* input) { |
108 Store(MachineTypeForC<ReturnType>().representation(), | 108 Store(MachineTypeForC<ReturnType>().representation(), |
109 RawMachineAssembler::Parameter(return_parameter_index_), input, | 109 RawMachineAssembler::Parameter(return_parameter_index_), input, |
110 kNoWriteBarrier); | 110 kNoWriteBarrier); |
111 RawMachineAssembler::Return(Int32Constant(1234)); | 111 RawMachineAssembler::Return(Int32Constant(1234)); |
112 } | 112 } |
113 | 113 |
114 ReturnType Call() { | 114 ReturnType Call() { |
115 ReturnType return_value; | 115 ReturnType return_value; |
116 test_graph_signature_->VerifyParams(); | 116 CSignature::VerifyParams(test_graph_signature_); |
117 CallHelper<int32_t>::Call(reinterpret_cast<void*>(&return_value)); | 117 CallHelper<int32_t>::Call(reinterpret_cast<void*>(&return_value)); |
118 return return_value; | 118 return return_value; |
119 } | 119 } |
120 | 120 |
121 template <typename P0> | 121 template <typename P0> |
122 ReturnType Call(P0 p0) { | 122 ReturnType Call(P0 p0) { |
123 ReturnType return_value; | 123 ReturnType return_value; |
124 test_graph_signature_->VerifyParams<P0>(); | 124 CSignature::VerifyParams<P0>(test_graph_signature_); |
125 CallHelper<int32_t>::Call(reinterpret_cast<void*>(&p0), | 125 CallHelper<int32_t>::Call(reinterpret_cast<void*>(&p0), |
126 reinterpret_cast<void*>(&return_value)); | 126 reinterpret_cast<void*>(&return_value)); |
127 return return_value; | 127 return return_value; |
128 } | 128 } |
129 | 129 |
130 template <typename P0, typename P1> | 130 template <typename P0, typename P1> |
131 ReturnType Call(P0 p0, P1 p1) { | 131 ReturnType Call(P0 p0, P1 p1) { |
132 ReturnType return_value; | 132 ReturnType return_value; |
133 test_graph_signature_->VerifyParams<P0, P1>(); | 133 CSignature::VerifyParams<P0, P1>(test_graph_signature_); |
134 CallHelper<int32_t>::Call(reinterpret_cast<void*>(&p0), | 134 CallHelper<int32_t>::Call(reinterpret_cast<void*>(&p0), |
135 reinterpret_cast<void*>(&p1), | 135 reinterpret_cast<void*>(&p1), |
136 reinterpret_cast<void*>(&return_value)); | 136 reinterpret_cast<void*>(&return_value)); |
137 return return_value; | 137 return return_value; |
138 } | 138 } |
139 | 139 |
140 template <typename P0, typename P1, typename P2> | 140 template <typename P0, typename P1, typename P2> |
141 ReturnType Call(P0 p0, P1 p1, P2 p2) { | 141 ReturnType Call(P0 p0, P1 p1, P2 p2) { |
142 ReturnType return_value; | 142 ReturnType return_value; |
143 test_graph_signature_->VerifyParams<P0, P1, P2>(); | 143 CSignature::VerifyParams<P0, P1, P2>(test_graph_signature_); |
144 CallHelper<int32_t>::Call( | 144 CallHelper<int32_t>::Call( |
145 reinterpret_cast<void*>(&p0), reinterpret_cast<void*>(&p1), | 145 reinterpret_cast<void*>(&p0), reinterpret_cast<void*>(&p1), |
146 reinterpret_cast<void*>(&p2), reinterpret_cast<void*>(&return_value)); | 146 reinterpret_cast<void*>(&p2), reinterpret_cast<void*>(&return_value)); |
147 return return_value; | 147 return return_value; |
148 } | 148 } |
149 | 149 |
150 template <typename P0, typename P1, typename P2, typename P3> | 150 template <typename P0, typename P1, typename P2, typename P3> |
151 ReturnType Call(P0 p0, P1 p1, P2 p2, P3 p3) { | 151 ReturnType Call(P0 p0, P1 p1, P2 p2, P3 p3) { |
152 ReturnType return_value; | 152 ReturnType return_value; |
153 test_graph_signature_->VerifyParams<P0, P1, P2, P3>(); | 153 CSignature::VerifyParams<P0, P1, P2, P3>(test_graph_signature_); |
154 CallHelper<int32_t>::Call( | 154 CallHelper<int32_t>::Call( |
155 reinterpret_cast<void*>(&p0), reinterpret_cast<void*>(&p1), | 155 reinterpret_cast<void*>(&p0), reinterpret_cast<void*>(&p1), |
156 reinterpret_cast<void*>(&p2), reinterpret_cast<void*>(&p3), | 156 reinterpret_cast<void*>(&p2), reinterpret_cast<void*>(&p3), |
157 reinterpret_cast<void*>(&return_value)); | 157 reinterpret_cast<void*>(&return_value)); |
158 return return_value; | 158 return return_value; |
159 } | 159 } |
160 | 160 |
161 private: | 161 private: |
162 BufferedRawMachineAssemblerTester(uint32_t return_parameter_index, | 162 BufferedRawMachineAssemblerTester(uint32_t return_parameter_index, |
163 MachineType p0, MachineType p1, | 163 MachineType p0, MachineType p1, |
(...skipping 91 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
255 // to the IR graph, and adds Load nodes to the IR graph to load the | 255 // to the IR graph, and adds Load nodes to the IR graph to load the |
256 // parameters from memory. Thereby it is possible to pass 64 bit parameters | 256 // parameters from memory. Thereby it is possible to pass 64 bit parameters |
257 // to the IR graph. | 257 // to the IR graph. |
258 Node* Parameter(size_t index) { | 258 Node* Parameter(size_t index) { |
259 CHECK(index >= 0 && index < 4); | 259 CHECK(index >= 0 && index < 4); |
260 return parameter_nodes_[index]; | 260 return parameter_nodes_[index]; |
261 } | 261 } |
262 | 262 |
263 | 263 |
264 void Call() { | 264 void Call() { |
265 test_graph_signature_->VerifyParams(); | 265 CSignature::VerifyParams(test_graph_signature_); |
266 CallHelper<void>::Call(); | 266 CallHelper<void>::Call(); |
267 } | 267 } |
268 | 268 |
269 template <typename P0> | 269 template <typename P0> |
270 void Call(P0 p0) { | 270 void Call(P0 p0) { |
271 test_graph_signature_->VerifyParams<P0>(); | 271 CSignature::VerifyParams<P0>(test_graph_signature_); |
272 CallHelper<void>::Call(reinterpret_cast<void*>(&p0)); | 272 CallHelper<void>::Call(reinterpret_cast<void*>(&p0)); |
273 } | 273 } |
274 | 274 |
275 template <typename P0, typename P1> | 275 template <typename P0, typename P1> |
276 void Call(P0 p0, P1 p1) { | 276 void Call(P0 p0, P1 p1) { |
277 test_graph_signature_->VerifyParams<P0, P1>(); | 277 CSignature::VerifyParams<P0, P1>(test_graph_signature_); |
278 CallHelper<void>::Call(reinterpret_cast<void*>(&p0), | 278 CallHelper<void>::Call(reinterpret_cast<void*>(&p0), |
279 reinterpret_cast<void*>(&p1)); | 279 reinterpret_cast<void*>(&p1)); |
280 } | 280 } |
281 | 281 |
282 template <typename P0, typename P1, typename P2> | 282 template <typename P0, typename P1, typename P2> |
283 void Call(P0 p0, P1 p1, P2 p2) { | 283 void Call(P0 p0, P1 p1, P2 p2) { |
284 test_graph_signature_->VerifyParams<P0, P1, P2>(); | 284 CSignature::VerifyParams<P0, P1, P2>(test_graph_signature_); |
285 CallHelper<void>::Call(reinterpret_cast<void*>(&p0), | 285 CallHelper<void>::Call(reinterpret_cast<void*>(&p0), |
286 reinterpret_cast<void*>(&p1), | 286 reinterpret_cast<void*>(&p1), |
287 reinterpret_cast<void*>(&p2)); | 287 reinterpret_cast<void*>(&p2)); |
288 } | 288 } |
289 | 289 |
290 template <typename P0, typename P1, typename P2, typename P3> | 290 template <typename P0, typename P1, typename P2, typename P3> |
291 void Call(P0 p0, P1 p1, P2 p2, P3 p3) { | 291 void Call(P0 p0, P1 p1, P2 p2, P3 p3) { |
292 test_graph_signature_->VerifyParams<P0, P1, P2, P3>(); | 292 CSignature::VerifyParams<P0, P1, P2, P3>(test_graph_signature_); |
293 CallHelper<void>::Call( | 293 CallHelper<void>::Call( |
294 reinterpret_cast<void*>(&p0), reinterpret_cast<void*>(&p1), | 294 reinterpret_cast<void*>(&p0), reinterpret_cast<void*>(&p1), |
295 reinterpret_cast<void*>(&p2), reinterpret_cast<void*>(&p3)); | 295 reinterpret_cast<void*>(&p2), reinterpret_cast<void*>(&p3)); |
296 } | 296 } |
297 | 297 |
298 private: | 298 private: |
299 CSignature* test_graph_signature_; | 299 CSignature* test_graph_signature_; |
300 Node* parameter_nodes_[4]; | 300 Node* parameter_nodes_[4]; |
301 }; | 301 }; |
302 static const bool USE_RESULT_BUFFER = true; | 302 static const bool USE_RESULT_BUFFER = true; |
(...skipping 230 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
533 | 533 |
534 private: | 534 private: |
535 BinopGen<int32_t>* gen; | 535 BinopGen<int32_t>* gen; |
536 int32_t input_a; | 536 int32_t input_a; |
537 int32_t input_b; | 537 int32_t input_b; |
538 | 538 |
539 void Run(RawMachineAssemblerTester<int32_t>* m); | 539 void Run(RawMachineAssemblerTester<int32_t>* m); |
540 void RunLeft(RawMachineAssemblerTester<int32_t>* m); | 540 void RunLeft(RawMachineAssemblerTester<int32_t>* m); |
541 void RunRight(RawMachineAssemblerTester<int32_t>* m); | 541 void RunRight(RawMachineAssemblerTester<int32_t>* m); |
542 }; | 542 }; |
543 | |
544 // TODO(bmeurer): Drop this crap once we switch to GTest/Gmock. | |
545 static inline void CheckFloatEq(volatile float x, volatile float y) { | |
546 if (std::isnan(x)) { | |
547 CHECK(std::isnan(y)); | |
548 } else { | |
549 CHECK_EQ(x, y); | |
550 } | |
551 } | |
552 | |
553 static inline void CheckDoubleEq(volatile double x, volatile double y) { | |
554 if (std::isnan(x)) { | |
555 CHECK(std::isnan(y)); | |
556 } else { | |
557 CHECK_EQ(x, y); | |
558 } | |
559 } | |
560 | |
561 } // namespace compiler | 543 } // namespace compiler |
562 } // namespace internal | 544 } // namespace internal |
563 } // namespace v8 | 545 } // namespace v8 |
564 | 546 |
565 #endif // V8_CCTEST_COMPILER_CODEGEN_TESTER_H_ | 547 #endif // V8_CCTEST_COMPILER_CODEGEN_TESTER_H_ |
OLD | NEW |