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; } |