| Index: test/unittests/compiler/interpreter-assembler-unittest.cc
|
| diff --git a/test/unittests/compiler/interpreter-assembler-unittest.cc b/test/unittests/compiler/interpreter-assembler-unittest.cc
|
| index 48aa8f1ec4258b93b49a81e50f08f2215da3f76e..3f05a535b09f6f96b97b6539241574c6839c64b7 100644
|
| --- a/test/unittests/compiler/interpreter-assembler-unittest.cc
|
| +++ b/test/unittests/compiler/interpreter-assembler-unittest.cc
|
| @@ -59,6 +59,13 @@ Matcher<Node*> IsWordSar(const Matcher<Node*>& lhs_matcher,
|
| }
|
|
|
|
|
| +Matcher<Node*> IsWordOr(const Matcher<Node*>& lhs_matcher,
|
| + const Matcher<Node*>& rhs_matcher) {
|
| + return kPointerSize == 8 ? IsWord64Or(lhs_matcher, rhs_matcher)
|
| + : IsWord32Or(lhs_matcher, rhs_matcher);
|
| +}
|
| +
|
| +
|
| Matcher<Node*> InterpreterAssemblerTest::InterpreterAssemblerForTest::IsLoad(
|
| const Matcher<LoadRepresentation>& rep_matcher,
|
| const Matcher<Node*>& base_matcher, const Matcher<Node*>& index_matcher) {
|
| @@ -87,20 +94,20 @@ Matcher<Node*> InterpreterAssemblerTest::InterpreterAssemblerForTest::IsCall(
|
|
|
| Matcher<Node*>
|
| InterpreterAssemblerTest::InterpreterAssemblerForTest::IsBytecodeOperand(
|
| - int operand) {
|
| + int offset) {
|
| return IsLoad(
|
| kMachUint8, IsParameter(Linkage::kInterpreterBytecodeArrayParameter),
|
| IsIntPtrAdd(IsParameter(Linkage::kInterpreterBytecodeOffsetParameter),
|
| - IsInt32Constant(1 + operand)));
|
| + IsInt32Constant(offset)));
|
| }
|
|
|
|
|
| Matcher<Node*> InterpreterAssemblerTest::InterpreterAssemblerForTest::
|
| - IsBytecodeOperandSignExtended(int operand) {
|
| + IsBytecodeOperandSignExtended(int offset) {
|
| Matcher<Node*> load_matcher = IsLoad(
|
| kMachInt8, IsParameter(Linkage::kInterpreterBytecodeArrayParameter),
|
| IsIntPtrAdd(IsParameter(Linkage::kInterpreterBytecodeOffsetParameter),
|
| - IsInt32Constant(1 + operand)));
|
| + IsInt32Constant(offset)));
|
| if (kPointerSize == 8) {
|
| load_matcher = IsChangeInt32ToInt64(load_matcher);
|
| }
|
| @@ -108,6 +115,36 @@ Matcher<Node*> InterpreterAssemblerTest::InterpreterAssemblerForTest::
|
| }
|
|
|
|
|
| +Matcher<Node*>
|
| +InterpreterAssemblerTest::InterpreterAssemblerForTest::IsBytecodeOperandShort(
|
| + int offset) {
|
| + if (TargetSupportsUnalignedAccess()) {
|
| + return IsLoad(
|
| + kMachUint16, IsParameter(Linkage::kInterpreterBytecodeArrayParameter),
|
| + IsIntPtrAdd(IsParameter(Linkage::kInterpreterBytecodeOffsetParameter),
|
| + IsInt32Constant(offset)));
|
| + } else {
|
| + Matcher<Node*> first_byte = IsLoad(
|
| + kMachUint8, IsParameter(Linkage::kInterpreterBytecodeArrayParameter),
|
| + IsIntPtrAdd(IsParameter(Linkage::kInterpreterBytecodeOffsetParameter),
|
| + IsInt32Constant(offset)));
|
| + Matcher<Node*> second_byte = IsLoad(
|
| + kMachUint8, IsParameter(Linkage::kInterpreterBytecodeArrayParameter),
|
| + IsIntPtrAdd(IsParameter(Linkage::kInterpreterBytecodeOffsetParameter),
|
| + IsInt32Constant(offset + 1)));
|
| +#if V8_TARGET_LITTLE_ENDIAN
|
| + return IsWordOr(IsWordShl(second_byte, IsInt32Constant(kBitsPerByte)),
|
| + first_byte);
|
| +#elif V8_TARGET_BIG_ENDIAN
|
| + return IsWordOr(IsWordShl(first_byte, IsInt32Constant(kBitsPerByte)),
|
| + second_byte);
|
| +#else
|
| +#error "Unknown Architecture"
|
| +#endif
|
| + }
|
| +}
|
| +
|
| +
|
| Graph*
|
| InterpreterAssemblerTest::InterpreterAssemblerForTest::GetCompletedGraph() {
|
| End();
|
| @@ -268,20 +305,25 @@ TARGET_TEST_F(InterpreterAssemblerTest, BytecodeOperand) {
|
| InterpreterAssemblerForTest m(this, bytecode);
|
| int number_of_operands = interpreter::Bytecodes::NumberOfOperands(bytecode);
|
| for (int i = 0; i < number_of_operands; i++) {
|
| + int offset = interpreter::Bytecodes::GetOperandOffset(bytecode, i);
|
| switch (interpreter::Bytecodes::GetOperandType(bytecode, i)) {
|
| - case interpreter::OperandType::kCount:
|
| - EXPECT_THAT(m.BytecodeOperandCount(i), m.IsBytecodeOperand(i));
|
| + case interpreter::OperandType::kCount8:
|
| + EXPECT_THAT(m.BytecodeOperandCount8(i), m.IsBytecodeOperand(offset));
|
| break;
|
| - case interpreter::OperandType::kIdx:
|
| - EXPECT_THAT(m.BytecodeOperandIdx(i), m.IsBytecodeOperand(i));
|
| + case interpreter::OperandType::kIdx8:
|
| + EXPECT_THAT(m.BytecodeOperandIdx8(i), m.IsBytecodeOperand(offset));
|
| break;
|
| case interpreter::OperandType::kImm8:
|
| EXPECT_THAT(m.BytecodeOperandImm8(i),
|
| - m.IsBytecodeOperandSignExtended(i));
|
| + m.IsBytecodeOperandSignExtended(offset));
|
| + break;
|
| + case interpreter::OperandType::kReg8:
|
| + EXPECT_THAT(m.BytecodeOperandReg8(i),
|
| + m.IsBytecodeOperandSignExtended(offset));
|
| break;
|
| - case interpreter::OperandType::kReg:
|
| - EXPECT_THAT(m.BytecodeOperandReg(i),
|
| - m.IsBytecodeOperandSignExtended(i));
|
| + case interpreter::OperandType::kIdx16:
|
| + EXPECT_THAT(m.BytecodeOperandIdx16(i),
|
| + m.IsBytecodeOperandShort(offset));
|
| break;
|
| case interpreter::OperandType::kNone:
|
| UNREACHABLE();
|
|
|