| 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 332 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 343 break; | 343 break; |
| 344 case interpreter::OperandType::kIdx8: | 344 case interpreter::OperandType::kIdx8: |
| 345 EXPECT_THAT(m.BytecodeOperandIdx(i), m.IsBytecodeOperand(offset)); | 345 EXPECT_THAT(m.BytecodeOperandIdx(i), m.IsBytecodeOperand(offset)); |
| 346 break; | 346 break; |
| 347 case interpreter::OperandType::kImm8: | 347 case interpreter::OperandType::kImm8: |
| 348 EXPECT_THAT(m.BytecodeOperandImm(i), | 348 EXPECT_THAT(m.BytecodeOperandImm(i), |
| 349 m.IsBytecodeOperandSignExtended(offset)); | 349 m.IsBytecodeOperandSignExtended(offset)); |
| 350 break; | 350 break; |
| 351 case interpreter::OperandType::kMaybeReg8: | 351 case interpreter::OperandType::kMaybeReg8: |
| 352 case interpreter::OperandType::kReg8: | 352 case interpreter::OperandType::kReg8: |
| 353 case interpreter::OperandType::kRegPair8: |
| 353 EXPECT_THAT(m.BytecodeOperandReg(i), | 354 EXPECT_THAT(m.BytecodeOperandReg(i), |
| 354 m.IsBytecodeOperandSignExtended(offset)); | 355 m.IsBytecodeOperandSignExtended(offset)); |
| 355 break; | 356 break; |
| 356 case interpreter::OperandType::kCount16: | 357 case interpreter::OperandType::kCount16: |
| 357 EXPECT_THAT(m.BytecodeOperandCount(i), | 358 EXPECT_THAT(m.BytecodeOperandCount(i), |
| 358 m.IsBytecodeOperandShort(offset)); | 359 m.IsBytecodeOperandShort(offset)); |
| 359 break; | 360 break; |
| 360 case interpreter::OperandType::kIdx16: | 361 case interpreter::OperandType::kIdx16: |
| 361 EXPECT_THAT(m.BytecodeOperandIdx(i), | 362 EXPECT_THAT(m.BytecodeOperandIdx(i), |
| 362 m.IsBytecodeOperandShort(offset)); | 363 m.IsBytecodeOperandShort(offset)); |
| (...skipping 222 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 585 Node* call_runtime = m.CallRuntime(Runtime::kAdd, arg1, arg2); | 586 Node* call_runtime = m.CallRuntime(Runtime::kAdd, arg1, arg2); |
| 586 EXPECT_THAT( | 587 EXPECT_THAT( |
| 587 call_runtime, | 588 call_runtime, |
| 588 IsCall(_, _, arg1, arg2, _, IsInt32Constant(2), | 589 IsCall(_, _, arg1, arg2, _, IsInt32Constant(2), |
| 589 IsParameter(Linkage::kInterpreterContextParameter), _, _)); | 590 IsParameter(Linkage::kInterpreterContextParameter), _, _)); |
| 590 } | 591 } |
| 591 } | 592 } |
| 592 | 593 |
| 593 | 594 |
| 594 TARGET_TEST_F(InterpreterAssemblerTest, CallRuntime) { | 595 TARGET_TEST_F(InterpreterAssemblerTest, CallRuntime) { |
| 596 const int kResultSizes[] = {1, 2}; |
| 595 TRACED_FOREACH(interpreter::Bytecode, bytecode, kBytecodes) { | 597 TRACED_FOREACH(interpreter::Bytecode, bytecode, kBytecodes) { |
| 596 InterpreterAssemblerForTest m(this, bytecode); | 598 TRACED_FOREACH(int, result_size, kResultSizes) { |
| 597 Callable builtin = CodeFactory::InterpreterCEntry(isolate()); | 599 InterpreterAssemblerForTest m(this, bytecode); |
| 600 Callable builtin = CodeFactory::InterpreterCEntry(isolate(), result_size); |
| 598 | 601 |
| 599 Node* function_id = m.Int32Constant(0); | 602 Node* function_id = m.Int32Constant(0); |
| 600 Node* first_arg = m.Int32Constant(1); | 603 Node* first_arg = m.Int32Constant(1); |
| 601 Node* arg_count = m.Int32Constant(2); | 604 Node* arg_count = m.Int32Constant(2); |
| 602 | 605 |
| 603 Matcher<Node*> function_table = IsExternalConstant( | 606 Matcher<Node*> function_table = IsExternalConstant( |
| 604 ExternalReference::runtime_function_table_address(isolate())); | 607 ExternalReference::runtime_function_table_address(isolate())); |
| 605 Matcher<Node*> function = IsIntPtrAdd( | 608 Matcher<Node*> function = IsIntPtrAdd( |
| 606 function_table, | 609 function_table, |
| 607 IsInt32Mul(function_id, IsInt32Constant(sizeof(Runtime::Function)))); | 610 IsInt32Mul(function_id, IsInt32Constant(sizeof(Runtime::Function)))); |
| 608 Matcher<Node*> function_entry = | 611 Matcher<Node*> function_entry = |
| 609 m.IsLoad(MachineType::Pointer(), function, | 612 m.IsLoad(MachineType::Pointer(), function, |
| 610 IsInt32Constant(offsetof(Runtime::Function, entry))); | 613 IsInt32Constant(offsetof(Runtime::Function, entry))); |
| 611 | 614 |
| 612 Node* call_runtime = m.CallRuntime(function_id, first_arg, arg_count); | 615 Node* call_runtime = |
| 613 EXPECT_THAT( | 616 m.CallRuntime(function_id, first_arg, arg_count, result_size); |
| 614 call_runtime, | 617 EXPECT_THAT( |
| 615 IsCall(_, IsHeapConstant(builtin.code()), arg_count, first_arg, | 618 call_runtime, |
| 616 function_entry, | 619 IsCall(_, IsHeapConstant(builtin.code()), arg_count, first_arg, |
| 617 IsParameter(Linkage::kInterpreterContextParameter), _, _)); | 620 function_entry, |
| 621 IsParameter(Linkage::kInterpreterContextParameter), _, _)); |
| 622 } |
| 618 } | 623 } |
| 619 } | 624 } |
| 620 | 625 |
| 621 | 626 |
| 622 TARGET_TEST_F(InterpreterAssemblerTest, CallIC) { | 627 TARGET_TEST_F(InterpreterAssemblerTest, CallIC) { |
| 623 TRACED_FOREACH(interpreter::Bytecode, bytecode, kBytecodes) { | 628 TRACED_FOREACH(interpreter::Bytecode, bytecode, kBytecodes) { |
| 624 InterpreterAssemblerForTest m(this, bytecode); | 629 InterpreterAssemblerForTest m(this, bytecode); |
| 625 LoadWithVectorDescriptor descriptor(isolate()); | 630 LoadWithVectorDescriptor descriptor(isolate()); |
| 626 Node* target = m.Int32Constant(1); | 631 Node* target = m.Int32Constant(1); |
| 627 Node* arg1 = m.Int32Constant(2); | 632 Node* arg1 = m.Int32Constant(2); |
| (...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 673 feedback_vector, | 678 feedback_vector, |
| 674 m.IsLoad(MachineType::AnyTagged(), load_shared_function_info_matcher, | 679 m.IsLoad(MachineType::AnyTagged(), load_shared_function_info_matcher, |
| 675 IsIntPtrConstant(SharedFunctionInfo::kFeedbackVectorOffset - | 680 IsIntPtrConstant(SharedFunctionInfo::kFeedbackVectorOffset - |
| 676 kHeapObjectTag))); | 681 kHeapObjectTag))); |
| 677 } | 682 } |
| 678 } | 683 } |
| 679 | 684 |
| 680 } // namespace compiler | 685 } // namespace compiler |
| 681 } // namespace internal | 686 } // namespace internal |
| 682 } // namespace v8 | 687 } // namespace v8 |
| OLD | NEW |