Chromium Code Reviews| Index: src/interpreter/bytecodes.cc |
| diff --git a/src/interpreter/bytecodes.cc b/src/interpreter/bytecodes.cc |
| index 9a6f303ce33252623b12a88e013787159375cf69..4ea21e96fe274abeb6a7b5dca3c072577d1be6aa 100644 |
| --- a/src/interpreter/bytecodes.cc |
| +++ b/src/interpreter/bytecodes.cc |
| @@ -262,6 +262,58 @@ bool Bytecodes::IsJumpOrReturn(Bytecode bytecode) { |
| return bytecode == Bytecode::kReturn || IsJump(bytecode); |
| } |
| +// static |
| +bool Bytecodes::IsRegisterOperandType(OperandType operand_type) { |
| + switch (operand_type) { |
| +#define CASE(Name, _) \ |
| + case OperandType::k##Name: \ |
| + return true; |
| + REGISTER_OPERAND_TYPE_LIST(CASE) |
| +#undef CASE |
| +#define CASE(Name, _) \ |
| + case OperandType::k##Name: \ |
| + break; |
| + NON_REGISTER_OPERAND_TYPE_LIST(CASE) |
| +#undef CASE |
| + } |
| + return false; |
| +} |
| + |
| +// static |
| +bool Bytecodes::IsRegisterInputOperandType(OperandType operand_type) { |
| + switch (operand_type) { |
| +#define CASE(Name, _) \ |
| + case OperandType::k##Name: \ |
| + return true; |
| + REGISTER_INPUT_OPERAND_TYPE_LIST(CASE) |
| +#undef CASE |
| +#define CASE(Name, _) \ |
| + case OperandType::k##Name: \ |
| + break; |
| + NON_REGISTER_OPERAND_TYPE_LIST(CASE) |
| + REGISTER_OUTPUT_OPERAND_TYPE_LIST(CASE) |
| +#undef CASE |
| + } |
| + return false; |
| +} |
| + |
| +// static |
| +bool Bytecodes::IsRegisterOutputOperandType(OperandType operand_type) { |
| + switch (operand_type) { |
| +#define CASE(Name, _) \ |
| + case OperandType::k##Name: \ |
| + return true; |
| + REGISTER_OUTPUT_OPERAND_TYPE_LIST(CASE) |
| +#undef CASE |
| +#define CASE(Name, _) \ |
| + case OperandType::k##Name: \ |
| + break; |
| + NON_REGISTER_OPERAND_TYPE_LIST(CASE) |
| + REGISTER_INPUT_OPERAND_TYPE_LIST(CASE) |
| +#undef CASE |
| + } |
| + return false; |
| +} |
| namespace { |
| static Register DecodeRegister(const uint8_t* operand_start, |
| @@ -323,7 +375,9 @@ std::ostream& Bytecodes::Decode(std::ostream& os, const uint8_t* bytecode_start, |
| case interpreter::OperandType::kMaybeReg8: |
| case interpreter::OperandType::kMaybeReg16: |
| case interpreter::OperandType::kReg8: |
| - case interpreter::OperandType::kReg16: { |
| + case interpreter::OperandType::kReg16: |
| + case interpreter::OperandType::kRegOut8: |
| + case interpreter::OperandType::kRegOut16: { |
| Register reg = DecodeRegister(operand_start, op_type); |
| if (reg.is_current_context()) { |
| os << "<context>"; |
| @@ -343,10 +397,12 @@ std::ostream& Bytecodes::Decode(std::ostream& os, const uint8_t* bytecode_start, |
| } |
| break; |
| } |
| + case interpreter::OperandType::kRegOutPair8: |
| + case interpreter::OperandType::kRegOutPair16: |
| + case interpreter::OperandType::kRegOutTriple8: |
| + case interpreter::OperandType::kRegOutTriple16: |
| case interpreter::OperandType::kRegPair8: |
| - case interpreter::OperandType::kRegTriple8: |
| - case interpreter::OperandType::kRegPair16: |
| - case interpreter::OperandType::kRegTriple16: { |
| + case interpreter::OperandType::kRegPair16: { |
| Register reg = DecodeRegister(operand_start, op_type); |
| int range = op_type == interpreter::OperandType::kRegPair8 ? 1 : 2; |
|
rmcilroy
2016/01/26 16:49:51
Need to fix this line to deal with new output type
oth
2016/01/26 17:55:53
Done.
|
| if (reg.is_parameter()) { |
| @@ -456,7 +512,6 @@ bool Register::is_new_target() const { |
| return index() == kNewTargetRegisterIndex; |
| } |
| - |
| int Register::MaxParameterIndex() { return kMaxParameterIndex; } |
| int Register::MaxRegisterIndex() { return kMaxRegisterIndex; } |