Index: src/interpreter/bytecodes.cc |
diff --git a/src/interpreter/bytecodes.cc b/src/interpreter/bytecodes.cc |
index 5f7a9085aec33bdba04bcd4764a8cfac73a6e667..2ad06bffd5aeb8d26246d76bac2b89b7bb2be9a7 100644 |
--- a/src/interpreter/bytecodes.cc |
+++ b/src/interpreter/bytecodes.cc |
@@ -25,6 +25,19 @@ const char* Bytecodes::ToString(Bytecode bytecode) { |
return ""; |
} |
+// static |
+std::string Bytecodes::ToString(Bytecode bytecode, OperandScale operand_scale) { |
+ static const char kSeparator = '.'; |
+ |
+ std::string value(ToString(bytecode)); |
+ if (operand_scale > OperandScale::kSingle) { |
+ Bytecode prefix_bytecode = OperandScaleToPrefixBytecode(operand_scale); |
+ std::string suffix = ToString(prefix_bytecode); |
+ return value.append(1, kSeparator).append(suffix); |
+ } else { |
+ return value; |
+ } |
+} |
// static |
const char* Bytecodes::OperandTypeToString(OperandType operand_type) { |
@@ -39,6 +52,20 @@ const char* Bytecodes::OperandTypeToString(OperandType operand_type) { |
return ""; |
} |
+// static |
+const char* Bytecodes::OperandScaleToString(OperandScale operand_scale) { |
+ switch (operand_scale) { |
+ case OperandScale::kSingle: |
+ return "Single"; |
+ case OperandScale::kDouble: |
+ return "Double"; |
+ case OperandScale::kQuadruple: |
+ return "Quadruple"; |
+ case OperandScale::kInvalid: |
+ UNREACHABLE(); |
+ } |
+ return ""; |
+} |
// static |
const char* Bytecodes::OperandSizeToString(OperandSize operand_size) { |
@@ -49,6 +76,8 @@ const char* Bytecodes::OperandSizeToString(OperandSize operand_size) { |
return "Byte"; |
case OperandSize::kShort: |
return "Short"; |
+ case OperandSize::kQuad: |
+ return "Quad"; |
} |
UNREACHABLE(); |
return ""; |
@@ -72,31 +101,34 @@ Bytecode Bytecodes::FromByte(uint8_t value) { |
// static |
Bytecode Bytecodes::GetDebugBreak(Bytecode bytecode) { |
- switch (Size(bytecode)) { |
-#define CASE(Name, ...) \ |
- case BytecodeTraits<__VA_ARGS__, OPERAND_TERM>::kSize: \ |
- return Bytecode::k##Name; |
- DEBUG_BREAK_BYTECODE_LIST(CASE) |
-#undef CASE |
- default: |
- break; |
+ DCHECK(!IsDebugBreak(bytecode)); |
+ if (bytecode == Bytecode::kWide) { |
+ return Bytecode::kDebugBreakWide; |
+ } |
+ if (bytecode == Bytecode::kExtraWide) { |
+ return Bytecode::kDebugBreakExtraWide; |
+ } |
+ int bytecode_size = Size(bytecode, OperandScale::kSingle); |
+#define RETURN_IF_DEBUG_BREAK_SIZE_MATCHES(Name, ...) \ |
+ if (bytecode_size == Size(Bytecode::k##Name, OperandScale::kSingle)) { \ |
+ return Bytecode::k##Name; \ |
} |
+ DEBUG_BREAK_PLAIN_BYTECODE_LIST(RETURN_IF_DEBUG_BREAK_SIZE_MATCHES) |
+#undef RETURN_IF_DEBUG_BREAK_SIZE_MATCHES |
UNREACHABLE(); |
- return static_cast<Bytecode>(-1); |
+ return Bytecode::kIllegal; |
} |
// static |
-int Bytecodes::Size(Bytecode bytecode) { |
- DCHECK(bytecode <= Bytecode::kLast); |
- switch (bytecode) { |
-#define CASE(Name, ...) \ |
- case Bytecode::k##Name: \ |
- return BytecodeTraits<__VA_ARGS__, OPERAND_TERM>::kSize; |
- BYTECODE_LIST(CASE) |
-#undef CASE |
+int Bytecodes::Size(Bytecode bytecode, OperandScale operand_scale) { |
+ int size = 1; |
+ for (int i = 0; i < NumberOfOperands(bytecode); i++) { |
+ OperandSize operand_size = GetOperandSize(bytecode, i, operand_scale); |
+ int delta = static_cast<int>(operand_size); |
+ DCHECK(base::bits::IsPowerOfTwo32(static_cast<uint32_t>(delta))); |
+ size += delta; |
} |
- UNREACHABLE(); |
- return 0; |
+ return size; |
} |
@@ -131,34 +163,58 @@ int Bytecodes::NumberOfRegisterOperands(Bytecode bytecode) { |
} |
// static |
-OperandType Bytecodes::GetOperandType(Bytecode bytecode, int i) { |
- DCHECK(bytecode <= Bytecode::kLast); |
- switch (bytecode) { |
-#define CASE(Name, ...) \ |
- case Bytecode::k##Name: \ |
- return BytecodeTraits<__VA_ARGS__, OPERAND_TERM>::GetOperandType(i); |
- BYTECODE_LIST(CASE) |
-#undef CASE |
+Bytecode Bytecodes::OperandScaleToPrefixBytecode(OperandScale operand_scale) { |
+ switch (operand_scale) { |
+ case OperandScale::kQuadruple: |
+ return Bytecode::kExtraWide; |
+ case OperandScale::kDouble: |
+ return Bytecode::kWide; |
+ default: |
+ UNREACHABLE(); |
+ return Bytecode::kIllegal; |
} |
- UNREACHABLE(); |
- return OperandType::kNone; |
} |
+// static |
+bool Bytecodes::OperandScaleRequiresPrefixBytecode(OperandScale operand_scale) { |
+ return operand_scale != OperandScale::kSingle; |
+} |
+ |
+// static |
+OperandScale Bytecodes::PrefixBytecodeToOperandScale(Bytecode bytecode) { |
+ switch (bytecode) { |
+ case Bytecode::kExtraWide: |
+ case Bytecode::kDebugBreakExtraWide: |
+ return OperandScale::kQuadruple; |
+ case Bytecode::kWide: |
+ case Bytecode::kDebugBreakWide: |
+ return OperandScale::kDouble; |
+ default: |
+ UNREACHABLE(); |
+ return OperandScale::kSingle; |
+ } |
+} |
// static |
-OperandSize Bytecodes::GetOperandSize(Bytecode bytecode, int i) { |
+OperandType Bytecodes::GetOperandType(Bytecode bytecode, int i) { |
DCHECK(bytecode <= Bytecode::kLast); |
switch (bytecode) { |
#define CASE(Name, ...) \ |
case Bytecode::k##Name: \ |
- return BytecodeTraits<__VA_ARGS__, OPERAND_TERM>::GetOperandSize(i); |
+ return BytecodeTraits<__VA_ARGS__, OPERAND_TERM>::GetOperandType(i); |
BYTECODE_LIST(CASE) |
#undef CASE |
} |
UNREACHABLE(); |
- return OperandSize::kNone; |
+ return OperandType::kNone; |
} |
+// static |
+OperandSize Bytecodes::GetOperandSize(Bytecode bytecode, int i, |
+ OperandScale operand_scale) { |
+ OperandType op_type = GetOperandType(bytecode, i); |
+ return ScaledOperandSize(op_type, operand_scale); |
+} |
// static |
int Bytecodes::GetRegisterOperandBitmap(Bytecode bytecode) { |
@@ -176,34 +232,25 @@ int Bytecodes::GetRegisterOperandBitmap(Bytecode bytecode) { |
} |
// static |
-int Bytecodes::GetOperandOffset(Bytecode bytecode, int i) { |
- DCHECK(bytecode <= Bytecode::kLast); |
- switch (bytecode) { |
-#define CASE(Name, ...) \ |
- case Bytecode::k##Name: \ |
- return BytecodeTraits<__VA_ARGS__, OPERAND_TERM>::GetOperandOffset(i); |
- BYTECODE_LIST(CASE) |
-#undef CASE |
+int Bytecodes::GetOperandOffset(Bytecode bytecode, int i, |
+ OperandScale operand_scale) { |
+ // TODO(oth): restore this to a statically determined constant. |
+ int offset = 1; |
+ for (int operand_index = 0; operand_index < i; ++operand_index) { |
+ OperandSize operand_size = |
+ GetOperandSize(bytecode, operand_index, operand_scale); |
+ offset += static_cast<int>(operand_size); |
} |
- UNREACHABLE(); |
- return 0; |
+ return offset; |
} |
- |
// static |
-OperandSize Bytecodes::SizeOfOperand(OperandType operand_type) { |
- switch (operand_type) { |
-#define CASE(Name, Size) \ |
- case OperandType::k##Name: \ |
- return Size; |
- OPERAND_TYPE_LIST(CASE) |
-#undef CASE |
- } |
- UNREACHABLE(); |
- return OperandSize::kNone; |
+OperandSize Bytecodes::SizeOfOperand(OperandType operand_type, |
+ OperandScale operand_scale) { |
+ return static_cast<OperandSize>( |
+ ScaledOperandSize(operand_type, operand_scale)); |
} |
- |
// static |
bool Bytecodes::IsConditionalJumpImmediate(Bytecode bytecode) { |
return bytecode == Bytecode::kJumpIfTrue || |
@@ -227,24 +274,10 @@ bool Bytecodes::IsConditionalJumpConstant(Bytecode bytecode) { |
bytecode == Bytecode::kJumpIfUndefinedConstant; |
} |
- |
-// static |
-bool Bytecodes::IsConditionalJumpConstantWide(Bytecode bytecode) { |
- return bytecode == Bytecode::kJumpIfTrueConstantWide || |
- bytecode == Bytecode::kJumpIfFalseConstantWide || |
- bytecode == Bytecode::kJumpIfToBooleanTrueConstantWide || |
- bytecode == Bytecode::kJumpIfToBooleanFalseConstantWide || |
- bytecode == Bytecode::kJumpIfNotHoleConstantWide || |
- bytecode == Bytecode::kJumpIfNullConstantWide || |
- bytecode == Bytecode::kJumpIfUndefinedConstantWide; |
-} |
- |
- |
// static |
bool Bytecodes::IsConditionalJump(Bytecode bytecode) { |
return IsConditionalJumpImmediate(bytecode) || |
- IsConditionalJumpConstant(bytecode) || |
- IsConditionalJumpConstantWide(bytecode); |
+ IsConditionalJumpConstant(bytecode); |
} |
@@ -260,34 +293,22 @@ bool Bytecodes::IsJumpConstant(Bytecode bytecode) { |
IsConditionalJumpConstant(bytecode); |
} |
- |
-// static |
-bool Bytecodes::IsJumpConstantWide(Bytecode bytecode) { |
- return bytecode == Bytecode::kJumpConstantWide || |
- IsConditionalJumpConstantWide(bytecode); |
-} |
- |
- |
// static |
bool Bytecodes::IsJump(Bytecode bytecode) { |
- return IsJumpImmediate(bytecode) || IsJumpConstant(bytecode) || |
- IsJumpConstantWide(bytecode); |
+ return IsJumpImmediate(bytecode) || IsJumpConstant(bytecode); |
} |
// static |
bool Bytecodes::IsCallOrNew(Bytecode bytecode) { |
return bytecode == Bytecode::kCall || bytecode == Bytecode::kTailCall || |
- bytecode == Bytecode::kNew || bytecode == Bytecode::kCallWide || |
- bytecode == Bytecode::kTailCallWide || bytecode == Bytecode::kNewWide; |
+ bytecode == Bytecode::kNew; |
} |
// static |
bool Bytecodes::IsCallRuntime(Bytecode bytecode) { |
return bytecode == Bytecode::kCallRuntime || |
- bytecode == Bytecode::kCallRuntimeWide || |
- bytecode == Bytecode::kCallRuntimeForPair || |
- bytecode == Bytecode::kCallRuntimeForPairWide; |
+ bytecode == Bytecode::kCallRuntimeForPair; |
} |
// static |
@@ -304,31 +325,40 @@ bool Bytecodes::IsDebugBreak(Bytecode bytecode) { |
} |
// static |
-bool Bytecodes::IsJumpOrReturn(Bytecode bytecode) { |
- return bytecode == Bytecode::kReturn || IsJump(bytecode); |
-} |
- |
-// static |
-bool Bytecodes::IsIndexOperandType(OperandType operand_type) { |
- return operand_type == OperandType::kIdx8 || |
- operand_type == OperandType::kIdx16; |
+bool Bytecodes::IsBytecodeWithScalableOperands(Bytecode bytecode) { |
+ switch (bytecode) { |
+#define CASE(Name, ...) \ |
+ case Bytecode::k##Name: \ |
+ typedef BytecodeTraits<__VA_ARGS__, OPERAND_TERM> Name##Trait; \ |
+ return Name##Trait::IsScalable(); |
+ BYTECODE_LIST(CASE) |
+#undef CASE |
+ } |
+ UNREACHABLE(); |
+ return false; |
} |
// static |
-bool Bytecodes::IsImmediateOperandType(OperandType operand_type) { |
- return operand_type == OperandType::kImm8; |
+bool Bytecodes::IsPrefixScalingBytecode(Bytecode bytecode) { |
+ switch (bytecode) { |
+ case Bytecode::kExtraWide: |
+ case Bytecode::kDebugBreakExtraWide: |
+ case Bytecode::kWide: |
+ case Bytecode::kDebugBreakWide: |
+ return true; |
+ default: |
+ return false; |
+ } |
} |
// static |
-bool Bytecodes::IsRegisterCountOperandType(OperandType operand_type) { |
- return (operand_type == OperandType::kRegCount8 || |
- operand_type == OperandType::kRegCount16); |
+bool Bytecodes::IsJumpOrReturn(Bytecode bytecode) { |
+ return bytecode == Bytecode::kReturn || IsJump(bytecode); |
} |
// static |
bool Bytecodes::IsMaybeRegisterOperandType(OperandType operand_type) { |
- return (operand_type == OperandType::kMaybeReg8 || |
- operand_type == OperandType::kMaybeReg16); |
+ return operand_type == OperandType::kMaybeReg; |
} |
// static |
@@ -384,22 +414,71 @@ bool Bytecodes::IsRegisterOutputOperandType(OperandType operand_type) { |
return false; |
} |
-namespace { |
-static Register DecodeRegister(const uint8_t* operand_start, |
- OperandType operand_type) { |
- switch (Bytecodes::SizeOfOperand(operand_type)) { |
+// static |
+bool Bytecodes::IsUnsignedOperandType(OperandType operand_type) { |
+ switch (operand_type) { |
+#define CASE(Name, _) \ |
+ case OperandType::k##Name: \ |
+ return OperandTraits<OperandType::k##Name>::TypeInfo::kIsUnsigned; |
+ OPERAND_TYPE_LIST(CASE) |
+#undef CASE |
+ } |
+ UNREACHABLE(); |
+ return false; |
+} |
+ |
+// static |
+OperandScale Bytecodes::NextOperandScale(OperandScale operand_scale) { |
+ DCHECK(operand_scale >= OperandScale::kSingle && |
+ operand_scale <= OperandScale::kMaxValid); |
+ return static_cast<OperandScale>(2 * static_cast<int>(operand_scale)); |
+} |
+ |
+// static |
+Register Bytecodes::DecodeRegisterOperand(const uint8_t* operand_start, |
+ OperandType operand_type, |
+ OperandScale operand_scale) { |
+ DCHECK(Bytecodes::IsRegisterOperandType(operand_type)); |
+ int32_t operand = |
+ DecodeSignedOperand(operand_start, operand_type, operand_scale); |
+ return Register::FromOperand(operand); |
+} |
+ |
+// static |
+int32_t Bytecodes::DecodeSignedOperand(const uint8_t* operand_start, |
+ OperandType operand_type, |
+ OperandScale operand_scale) { |
+ DCHECK(!Bytecodes::IsUnsignedOperandType(operand_type)); |
+ switch (Bytecodes::SizeOfOperand(operand_type, operand_scale)) { |
case OperandSize::kByte: |
- return Register::FromOperand(*operand_start); |
+ return static_cast<int8_t>(*operand_start); |
case OperandSize::kShort: |
- return Register::FromWideOperand(ReadUnalignedUInt16(operand_start)); |
- case OperandSize::kNone: { |
+ return static_cast<int16_t>(ReadUnalignedUInt16(operand_start)); |
+ case OperandSize::kQuad: |
+ return static_cast<int32_t>(ReadUnalignedUInt32(operand_start)); |
+ case OperandSize::kNone: |
UNREACHABLE(); |
- } |
} |
- return Register(); |
+ return 0; |
} |
-} // namespace |
+// static |
+uint32_t Bytecodes::DecodeUnsignedOperand(const uint8_t* operand_start, |
+ OperandType operand_type, |
+ OperandScale operand_scale) { |
+ DCHECK(Bytecodes::IsUnsignedOperandType(operand_type)); |
+ switch (Bytecodes::SizeOfOperand(operand_type, operand_scale)) { |
+ case OperandSize::kByte: |
+ return *operand_start; |
+ case OperandSize::kShort: |
+ return ReadUnalignedUInt16(operand_start); |
+ case OperandSize::kQuad: |
+ return ReadUnalignedUInt32(operand_start); |
+ case OperandSize::kNone: |
+ UNREACHABLE(); |
+ } |
+ return 0; |
+} |
// static |
std::ostream& Bytecodes::Decode(std::ostream& os, const uint8_t* bytecode_start, |
@@ -407,18 +486,23 @@ std::ostream& Bytecodes::Decode(std::ostream& os, const uint8_t* bytecode_start, |
Vector<char> buf = Vector<char>::New(50); |
Bytecode bytecode = Bytecodes::FromByte(bytecode_start[0]); |
- int bytecode_size = Bytecodes::Size(bytecode); |
- |
- for (int i = 0; i < bytecode_size; i++) { |
+ int prefix_offset = 0; |
+ OperandScale operand_scale = OperandScale::kSingle; |
+ if (IsPrefixScalingBytecode(bytecode)) { |
+ prefix_offset = 1; |
+ bytecode = Bytecodes::FromByte(bytecode_start[1]); |
+ } |
+ int bytecode_size = Bytecodes::Size(bytecode, operand_scale); |
+ for (int i = 0; i < prefix_offset + bytecode_size; i++) { |
SNPrintF(buf, "%02x ", bytecode_start[i]); |
os << buf.start(); |
} |
const int kBytecodeColumnSize = 6; |
- for (int i = bytecode_size; i < kBytecodeColumnSize; i++) { |
+ for (int i = prefix_offset + bytecode_size; i < kBytecodeColumnSize; i++) { |
os << " "; |
} |
- os << bytecode << " "; |
+ os << Bytecodes::ToString(bytecode, operand_scale) << " "; |
// Operands for the debug break are from the original instruction. |
if (IsDebugBreak(bytecode)) return os; |
@@ -428,42 +512,42 @@ std::ostream& Bytecodes::Decode(std::ostream& os, const uint8_t* bytecode_start, |
for (int i = 0; i < number_of_operands; i++) { |
OperandType op_type = GetOperandType(bytecode, i); |
const uint8_t* operand_start = |
- &bytecode_start[GetOperandOffset(bytecode, i)]; |
+ &bytecode_start[prefix_offset + |
+ GetOperandOffset(bytecode, i, operand_scale)]; |
switch (op_type) { |
- case interpreter::OperandType::kRegCount8: |
- os << "#" << static_cast<unsigned int>(*operand_start); |
- break; |
- case interpreter::OperandType::kRegCount16: |
- os << '#' << ReadUnalignedUInt16(operand_start); |
+ case interpreter::OperandType::kRegCount: |
+ os << "#" |
+ << DecodeUnsignedOperand(operand_start, op_type, operand_scale); |
break; |
- case interpreter::OperandType::kIdx8: |
- os << "[" << static_cast<unsigned int>(*operand_start) << "]"; |
+ case interpreter::OperandType::kIdx: |
+ case interpreter::OperandType::kRuntimeId: |
+ os << "[" |
+ << DecodeUnsignedOperand(operand_start, op_type, operand_scale) |
+ << "]"; |
break; |
- case interpreter::OperandType::kIdx16: |
- os << "[" << ReadUnalignedUInt16(operand_start) << "]"; |
+ case interpreter::OperandType::kImm: |
+ os << "[" << DecodeSignedOperand(operand_start, op_type, operand_scale) |
+ << "]"; |
break; |
- case interpreter::OperandType::kImm8: |
- os << "#" << static_cast<int>(static_cast<int8_t>(*operand_start)); |
+ case interpreter::OperandType::kFlag8: |
+ os << "#" |
+ << DecodeUnsignedOperand(operand_start, op_type, operand_scale); |
break; |
- case interpreter::OperandType::kMaybeReg8: |
- case interpreter::OperandType::kMaybeReg16: |
- case interpreter::OperandType::kReg8: |
- case interpreter::OperandType::kReg16: |
- case interpreter::OperandType::kRegOut8: |
- case interpreter::OperandType::kRegOut16: { |
- Register reg = DecodeRegister(operand_start, op_type); |
+ case interpreter::OperandType::kMaybeReg: |
+ case interpreter::OperandType::kReg: |
+ case interpreter::OperandType::kRegOut: { |
+ Register reg = |
+ DecodeRegisterOperand(operand_start, op_type, operand_scale); |
os << reg.ToString(parameter_count); |
break; |
} |
- case interpreter::OperandType::kRegOutTriple8: |
- case interpreter::OperandType::kRegOutTriple16: |
+ case interpreter::OperandType::kRegOutTriple: |
range += 1; |
- case interpreter::OperandType::kRegOutPair8: |
- case interpreter::OperandType::kRegOutPair16: |
- case interpreter::OperandType::kRegPair8: |
- case interpreter::OperandType::kRegPair16: { |
+ case interpreter::OperandType::kRegOutPair: |
+ case interpreter::OperandType::kRegPair: { |
range += 1; |
- Register first_reg = DecodeRegister(operand_start, op_type); |
+ Register first_reg = |
+ DecodeRegisterOperand(operand_start, op_type, operand_scale); |
Register last_reg = Register(first_reg.index() + range); |
os << first_reg.ToString(parameter_count) << "-" |
<< last_reg.ToString(parameter_count); |
@@ -484,14 +568,16 @@ std::ostream& operator<<(std::ostream& os, const Bytecode& bytecode) { |
return os << Bytecodes::ToString(bytecode); |
} |
- |
-std::ostream& operator<<(std::ostream& os, const OperandType& operand_type) { |
- return os << Bytecodes::OperandTypeToString(operand_type); |
+std::ostream& operator<<(std::ostream& os, const OperandSize& operand_size) { |
+ return os << Bytecodes::OperandSizeToString(operand_size); |
} |
+std::ostream& operator<<(std::ostream& os, const OperandScale& operand_scale) { |
+ return os << Bytecodes::OperandScaleToString(operand_scale); |
+} |
-std::ostream& operator<<(std::ostream& os, const OperandSize& operand_size) { |
- return os << Bytecodes::OperandSizeToString(operand_size); |
+std::ostream& operator<<(std::ostream& os, const OperandType& operand_type) { |
+ return os << Bytecodes::OperandTypeToString(operand_type); |
} |
static const int kLastParamRegisterIndex = |
@@ -503,29 +589,17 @@ static const int kCurrentContextRegisterIndex = |
static const int kNewTargetRegisterIndex = |
-InterpreterFrameConstants::kNewTargetFromRegisterPointer / kPointerSize; |
-// The register space is a signed 16-bit space. Register operands |
-// occupy range above 0. Parameter indices are biased with the |
-// negative value kLastParamRegisterIndex for ease of access in the |
-// interpreter. |
-static const int kMaxParameterIndex = kMaxInt16 + kLastParamRegisterIndex; |
-static const int kMaxRegisterIndex = -kMinInt16; |
-static const int kMaxReg8Index = -kMinInt8; |
-static const int kMinReg8Index = -kMaxInt8; |
-static const int kMaxReg16Index = -kMinInt16; |
-static const int kMinReg16Index = -kMaxInt16; |
- |
bool Register::is_byte_operand() const { |
- return index_ >= kMinReg8Index && index_ <= kMaxReg8Index; |
+ return index_ >= -kMaxInt8 && index_ <= -kMinInt8; |
} |
bool Register::is_short_operand() const { |
- return index_ >= kMinReg16Index && index_ <= kMaxReg16Index; |
+ return index_ >= -kMaxInt16 && index_ <= -kMinInt16; |
} |
Register Register::FromParameterIndex(int index, int parameter_count) { |
DCHECK_GE(index, 0); |
DCHECK_LT(index, parameter_count); |
- DCHECK_LE(parameter_count, kMaxParameterIndex + 1); |
int register_index = kLastParamRegisterIndex - parameter_count + index + 1; |
DCHECK_LT(register_index, 0); |
return Register(register_index); |
@@ -565,44 +639,6 @@ bool Register::is_new_target() const { |
return index() == kNewTargetRegisterIndex; |
} |
-int Register::MaxParameterIndex() { return kMaxParameterIndex; } |
- |
-int Register::MaxRegisterIndex() { return kMaxRegisterIndex; } |
- |
-int Register::MaxRegisterIndexForByteOperand() { return kMaxReg8Index; } |
- |
-uint8_t Register::ToOperand() const { |
- DCHECK(is_byte_operand()); |
- return static_cast<uint8_t>(-index_); |
-} |
- |
- |
-Register Register::FromOperand(uint8_t operand) { |
- return Register(-static_cast<int8_t>(operand)); |
-} |
- |
- |
-uint16_t Register::ToWideOperand() const { |
- DCHECK(is_short_operand()); |
- return static_cast<uint16_t>(-index_); |
-} |
- |
- |
-Register Register::FromWideOperand(uint16_t operand) { |
- return Register(-static_cast<int16_t>(operand)); |
-} |
- |
- |
-uint32_t Register::ToRawOperand() const { |
- return static_cast<uint32_t>(-index_); |
-} |
- |
- |
-Register Register::FromRawOperand(uint32_t operand) { |
- return Register(-static_cast<int32_t>(operand)); |
-} |
- |
- |
bool Register::AreContiguous(Register reg1, Register reg2, Register reg3, |
Register reg4, Register reg5) { |
if (reg1.index() + 1 != reg2.index()) { |