| 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 d0816da476620a2087ae734996b62b287afae16f..1e49b08e80d46b07c67aee6d2d3a861b41beb09f 100644
|
| --- a/test/unittests/compiler/interpreter-assembler-unittest.cc
|
| +++ b/test/unittests/compiler/interpreter-assembler-unittest.cc
|
| @@ -140,6 +140,47 @@ InterpreterAssemblerTest::InterpreterAssemblerForTest::IsBytecodeOperandShort(
|
| }
|
|
|
|
|
| +Matcher<Node*> InterpreterAssemblerTest::InterpreterAssemblerForTest::
|
| + IsBytecodeOperandShortSignExtended(int offset) {
|
| + Matcher<Node*> load_matcher;
|
| + if (TargetSupportsUnalignedAccess()) {
|
| + load_matcher = IsLoad(
|
| + MachineType::Int16(),
|
| + IsParameter(Linkage::kInterpreterBytecodeArrayParameter),
|
| + IsIntPtrAdd(IsParameter(Linkage::kInterpreterBytecodeOffsetParameter),
|
| + IsInt32Constant(offset)));
|
| + } else {
|
| +#if V8_TARGET_LITTLE_ENDIAN
|
| + int hi_byte_offset = offset + 1;
|
| + int lo_byte_offset = offset;
|
| +
|
| +#elif V8_TARGET_BIG_ENDIAN
|
| + int hi_byte_offset = offset;
|
| + int lo_byte_offset = offset + 1;
|
| +#else
|
| +#error "Unknown Architecture"
|
| +#endif
|
| + Matcher<Node*> hi_byte = IsLoad(
|
| + MachineType::Int8(),
|
| + IsParameter(Linkage::kInterpreterBytecodeArrayParameter),
|
| + IsIntPtrAdd(IsParameter(Linkage::kInterpreterBytecodeOffsetParameter),
|
| + IsInt32Constant(hi_byte_offset)));
|
| + hi_byte = IsWord32Shl(hi_byte, IsInt32Constant(kBitsPerByte));
|
| + Matcher<Node*> lo_byte = IsLoad(
|
| + MachineType::Uint8(),
|
| + IsParameter(Linkage::kInterpreterBytecodeArrayParameter),
|
| + IsIntPtrAdd(IsParameter(Linkage::kInterpreterBytecodeOffsetParameter),
|
| + IsInt32Constant(lo_byte_offset)));
|
| + load_matcher = IsWord32Or(hi_byte, lo_byte);
|
| + }
|
| +
|
| + if (kPointerSize == 8) {
|
| + load_matcher = IsChangeInt32ToInt64(load_matcher);
|
| + }
|
| + return load_matcher;
|
| +}
|
| +
|
| +
|
| TARGET_TEST_F(InterpreterAssemblerTest, Dispatch) {
|
| TRACED_FOREACH(interpreter::Bytecode, bytecode, kBytecodes) {
|
| InterpreterAssemblerForTest m(this, bytecode);
|
| @@ -320,6 +361,10 @@ TARGET_TEST_F(InterpreterAssemblerTest, BytecodeOperand) {
|
| EXPECT_THAT(m.BytecodeOperandIdx(i),
|
| m.IsBytecodeOperandShort(offset));
|
| break;
|
| + case interpreter::OperandType::kReg16:
|
| + EXPECT_THAT(m.BytecodeOperandReg(i),
|
| + m.IsBytecodeOperandShortSignExtended(offset));
|
| + break;
|
| case interpreter::OperandType::kNone:
|
| UNREACHABLE();
|
| break;
|
|
|