OLD | NEW |
1 // Copyright 2015 the V8 project authors. All rights reserved. | 1 // Copyright 2015 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 #include "test/unittests/compiler/interpreter-assembler-unittest.h" | 5 #include "test/unittests/compiler/interpreter-assembler-unittest.h" |
6 | 6 |
7 #include "src/code-factory.h" | 7 #include "src/code-factory.h" |
8 #include "src/compiler/graph.h" | 8 #include "src/compiler/graph.h" |
9 #include "src/compiler/node.h" | 9 #include "src/compiler/node.h" |
10 #include "src/interface-descriptors.h" | 10 #include "src/interface-descriptors.h" |
(...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
80 template <class... A> | 80 template <class... A> |
81 Matcher<Node*> InterpreterAssemblerTest::InterpreterAssemblerForTest::IsCall( | 81 Matcher<Node*> InterpreterAssemblerTest::InterpreterAssemblerForTest::IsCall( |
82 const Matcher<const CallDescriptor*>& descriptor_matcher, A... args) { | 82 const Matcher<const CallDescriptor*>& descriptor_matcher, A... args) { |
83 return ::i::compiler::IsCall(descriptor_matcher, args..., graph()->start(), | 83 return ::i::compiler::IsCall(descriptor_matcher, args..., graph()->start(), |
84 graph()->start()); | 84 graph()->start()); |
85 } | 85 } |
86 | 86 |
87 | 87 |
88 Matcher<Node*> | 88 Matcher<Node*> |
89 InterpreterAssemblerTest::InterpreterAssemblerForTest::IsBytecodeOperand( | 89 InterpreterAssemblerTest::InterpreterAssemblerForTest::IsBytecodeOperand( |
90 int operand) { | 90 int offset) { |
91 return IsLoad( | 91 return IsLoad( |
92 kMachUint8, IsParameter(Linkage::kInterpreterBytecodeArrayParameter), | 92 kMachUint8, IsParameter(Linkage::kInterpreterBytecodeArrayParameter), |
93 IsIntPtrAdd(IsParameter(Linkage::kInterpreterBytecodeOffsetParameter), | 93 IsIntPtrAdd(IsParameter(Linkage::kInterpreterBytecodeOffsetParameter), |
94 IsInt32Constant(1 + operand))); | 94 IsInt32Constant(offset))); |
95 } | 95 } |
96 | 96 |
97 | 97 |
98 Matcher<Node*> InterpreterAssemblerTest::InterpreterAssemblerForTest:: | 98 Matcher<Node*> InterpreterAssemblerTest::InterpreterAssemblerForTest:: |
99 IsBytecodeOperandSignExtended(int operand) { | 99 IsBytecodeOperandSignExtended(int offset) { |
100 Matcher<Node*> load_matcher = IsLoad( | 100 Matcher<Node*> load_matcher = IsLoad( |
101 kMachInt8, IsParameter(Linkage::kInterpreterBytecodeArrayParameter), | 101 kMachInt8, IsParameter(Linkage::kInterpreterBytecodeArrayParameter), |
102 IsIntPtrAdd(IsParameter(Linkage::kInterpreterBytecodeOffsetParameter), | 102 IsIntPtrAdd(IsParameter(Linkage::kInterpreterBytecodeOffsetParameter), |
103 IsInt32Constant(1 + operand))); | 103 IsInt32Constant(offset))); |
104 if (kPointerSize == 8) { | 104 if (kPointerSize == 8) { |
105 load_matcher = IsChangeInt32ToInt64(load_matcher); | 105 load_matcher = IsChangeInt32ToInt64(load_matcher); |
106 } | 106 } |
107 return load_matcher; | 107 return load_matcher; |
108 } | 108 } |
109 | 109 |
110 | 110 |
| 111 Matcher<Node*> |
| 112 InterpreterAssemblerTest::InterpreterAssemblerForTest::IsBytecodeOperandWide( |
| 113 int offset) { |
| 114 return IsLoad( |
| 115 kMachUint16, IsParameter(Linkage::kInterpreterBytecodeArrayParameter), |
| 116 IsIntPtrAdd(IsParameter(Linkage::kInterpreterBytecodeOffsetParameter), |
| 117 IsInt32Constant(offset))); |
| 118 } |
| 119 |
| 120 |
111 Graph* | 121 Graph* |
112 InterpreterAssemblerTest::InterpreterAssemblerForTest::GetCompletedGraph() { | 122 InterpreterAssemblerTest::InterpreterAssemblerForTest::GetCompletedGraph() { |
113 End(); | 123 End(); |
114 return graph(); | 124 return graph(); |
115 } | 125 } |
116 | 126 |
117 | 127 |
118 TARGET_TEST_F(InterpreterAssemblerTest, Dispatch) { | 128 TARGET_TEST_F(InterpreterAssemblerTest, Dispatch) { |
119 TRACED_FOREACH(interpreter::Bytecode, bytecode, kBytecodes) { | 129 TRACED_FOREACH(interpreter::Bytecode, bytecode, kBytecodes) { |
120 InterpreterAssemblerForTest m(this, bytecode); | 130 InterpreterAssemblerForTest m(this, bytecode); |
(...skipping 140 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
261 graph->start(), graph->start())); | 271 graph->start(), graph->start())); |
262 } | 272 } |
263 } | 273 } |
264 | 274 |
265 | 275 |
266 TARGET_TEST_F(InterpreterAssemblerTest, BytecodeOperand) { | 276 TARGET_TEST_F(InterpreterAssemblerTest, BytecodeOperand) { |
267 TRACED_FOREACH(interpreter::Bytecode, bytecode, kBytecodes) { | 277 TRACED_FOREACH(interpreter::Bytecode, bytecode, kBytecodes) { |
268 InterpreterAssemblerForTest m(this, bytecode); | 278 InterpreterAssemblerForTest m(this, bytecode); |
269 int number_of_operands = interpreter::Bytecodes::NumberOfOperands(bytecode); | 279 int number_of_operands = interpreter::Bytecodes::NumberOfOperands(bytecode); |
270 for (int i = 0; i < number_of_operands; i++) { | 280 for (int i = 0; i < number_of_operands; i++) { |
| 281 int offset = interpreter::Bytecodes::GetOperandOffset(bytecode, i); |
271 switch (interpreter::Bytecodes::GetOperandType(bytecode, i)) { | 282 switch (interpreter::Bytecodes::GetOperandType(bytecode, i)) { |
272 case interpreter::OperandType::kCount: | 283 case interpreter::OperandType::kCount: |
273 EXPECT_THAT(m.BytecodeOperandCount(i), m.IsBytecodeOperand(i)); | 284 EXPECT_THAT(m.BytecodeOperandCount(i), m.IsBytecodeOperand(offset)); |
274 break; | 285 break; |
275 case interpreter::OperandType::kIdx: | 286 case interpreter::OperandType::kIdx: |
276 EXPECT_THAT(m.BytecodeOperandIdx(i), m.IsBytecodeOperand(i)); | 287 EXPECT_THAT(m.BytecodeOperandIdx(i), m.IsBytecodeOperand(offset)); |
277 break; | 288 break; |
278 case interpreter::OperandType::kImm8: | 289 case interpreter::OperandType::kImm8: |
279 EXPECT_THAT(m.BytecodeOperandImm8(i), | 290 EXPECT_THAT(m.BytecodeOperandImm8(i), |
280 m.IsBytecodeOperandSignExtended(i)); | 291 m.IsBytecodeOperandSignExtended(offset)); |
281 break; | 292 break; |
282 case interpreter::OperandType::kReg: | 293 case interpreter::OperandType::kReg: |
283 EXPECT_THAT(m.BytecodeOperandReg(i), | 294 EXPECT_THAT(m.BytecodeOperandReg(i), |
284 m.IsBytecodeOperandSignExtended(i)); | 295 m.IsBytecodeOperandSignExtended(offset)); |
| 296 break; |
| 297 case interpreter::OperandType::kWideIdx: |
| 298 EXPECT_THAT(m.BytecodeOperandWideIdx(i), |
| 299 m.IsBytecodeOperandWide(offset)); |
285 break; | 300 break; |
286 case interpreter::OperandType::kNone: | 301 case interpreter::OperandType::kNone: |
287 UNREACHABLE(); | 302 UNREACHABLE(); |
288 break; | 303 break; |
289 } | 304 } |
290 } | 305 } |
291 } | 306 } |
292 } | 307 } |
293 | 308 |
294 | 309 |
(...skipping 230 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
525 feedback_vector, | 540 feedback_vector, |
526 m.IsLoad(kMachAnyTagged, load_shared_function_info_matcher, | 541 m.IsLoad(kMachAnyTagged, load_shared_function_info_matcher, |
527 IsIntPtrConstant(SharedFunctionInfo::kFeedbackVectorOffset - | 542 IsIntPtrConstant(SharedFunctionInfo::kFeedbackVectorOffset - |
528 kHeapObjectTag))); | 543 kHeapObjectTag))); |
529 } | 544 } |
530 } | 545 } |
531 | 546 |
532 } // namespace compiler | 547 } // namespace compiler |
533 } // namespace internal | 548 } // namespace internal |
534 } // namespace v8 | 549 } // namespace v8 |
OLD | NEW |