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

Side by Side Diff: test/unittests/compiler/interpreter-assembler-unittest.cc

Issue 1568493002: [Interpreter] Add support for calling runtime functions which return a pair. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Address Michi's review comments. Created 4 years, 11 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 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
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
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
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
OLDNEW
« no previous file with comments | « src/interpreter/interpreter.cc ('k') | test/unittests/interpreter/bytecode-array-builder-unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698