Index: src/interpreter/bytecodes.h |
diff --git a/src/interpreter/bytecodes.h b/src/interpreter/bytecodes.h |
index aa5234924152f24a25383d980b2685749bd4d2db..741c20bfe7399ce2ba8ace56aef8bbf4203243c2 100644 |
--- a/src/interpreter/bytecodes.h |
+++ b/src/interpreter/bytecodes.h |
@@ -104,7 +104,6 @@ namespace interpreter { |
V(LoadICStrict, OperandType::kReg8, OperandType::kIdx8, OperandType::kIdx8) \ |
V(KeyedLoadICSloppy, OperandType::kReg8, OperandType::kIdx8) \ |
V(KeyedLoadICStrict, OperandType::kReg8, OperandType::kIdx8) \ |
- /* TODO(rmcilroy): Wide register operands too? */ \ |
V(LoadICSloppyWide, OperandType::kReg8, OperandType::kIdx16, \ |
OperandType::kIdx16) \ |
V(LoadICStrictWide, OperandType::kReg8, OperandType::kIdx16, \ |
@@ -119,7 +118,6 @@ namespace interpreter { |
OperandType::kIdx8) \ |
V(KeyedStoreICStrict, OperandType::kReg8, OperandType::kReg8, \ |
OperandType::kIdx8) \ |
- /* TODO(rmcilroy): Wide register operands too? */ \ |
V(StoreICSloppyWide, OperandType::kReg8, OperandType::kIdx16, \ |
OperandType::kIdx16) \ |
V(StoreICStrictWide, OperandType::kReg8, OperandType::kIdx16, \ |
@@ -289,20 +287,22 @@ enum class Bytecode : uint8_t { |
// in its stack-frame. Register hold parameters, this, and expression values. |
class Register { |
public: |
- Register() : index_(kIllegalIndex) {} |
- |
- explicit Register(int index) : index_(index) {} |
+ explicit Register(int index = kInvalidIndex) : index_(index) {} |
int index() const { |
- DCHECK(index_ != kIllegalIndex); |
+ DCHECK(index_ != kInvalidIndex); |
return index_; |
} |
bool is_parameter() const { return index() < 0; } |
- bool is_valid() const { return index_ != kIllegalIndex; } |
+ bool is_valid() const { return index_ != kInvalidIndex; } |
+ bool is_byte_operand() const; |
+ bool is_short_operand() const; |
static Register FromParameterIndex(int index, int parameter_count); |
int ToParameterIndex(int parameter_count) const; |
static int MaxParameterIndex(); |
+ static int MaxRegisterIndex(); |
+ static int MaxRegisterIndexForByteOperand(); |
// Returns the register for the function's closure object. |
static Register function_closure(); |
@@ -350,7 +350,7 @@ class Register { |
} |
private: |
- static const int kIllegalIndex = kMaxInt; |
+ static const int kInvalidIndex = kMaxInt; |
void* operator new(size_t size); |
void operator delete(void* p); |
@@ -379,6 +379,9 @@ class Bytecodes { |
// Returns the number of operands expected by |bytecode|. |
static int NumberOfOperands(Bytecode bytecode); |
+ // Returns the number of register operands expected by |bytecode|. |
+ static int NumberOfRegisterOperands(Bytecode bytecode); |
+ |
// Return the i-th operand of |bytecode|. |
static OperandType GetOperandType(Bytecode bytecode, int i); |
@@ -389,37 +392,41 @@ class Bytecodes { |
// of the bytecode. |
static int GetOperandOffset(Bytecode bytecode, int i); |
+ // Returns a zero-based bitmap of the register operand positions of |
+ // |bytecode|. |
+ static int GetRegisterOperandBitmap(Bytecode bytecode); |
+ |
// Returns the size of the bytecode including its operands. |
static int Size(Bytecode bytecode); |
// Returns the size of |operand|. |
static OperandSize SizeOfOperand(OperandType operand); |
- // Return true if the bytecode is a conditional jump taking |
+ // Returns true if the bytecode is a conditional jump taking |
// an immediate byte operand (OperandType::kImm8). |
static bool IsConditionalJumpImmediate(Bytecode bytecode); |
- // Return true if the bytecode is a conditional jump taking |
+ // Returns true if the bytecode is a conditional jump taking |
// a constant pool entry (OperandType::kIdx8). |
static bool IsConditionalJumpConstant(Bytecode bytecode); |
- // Return true if the bytecode is a conditional jump taking |
+ // Returns true if the bytecode is a conditional jump taking |
// a constant pool entry (OperandType::kIdx16). |
static bool IsConditionalJumpConstantWide(Bytecode bytecode); |
- // Return true if the bytecode is a conditional jump taking |
+ // Returns true if the bytecode is a conditional jump taking |
// any kind of operand. |
static bool IsConditionalJump(Bytecode bytecode); |
- // Return true if the bytecode is a jump or a conditional jump taking |
+ // Returns true if the bytecode is a jump or a conditional jump taking |
// an immediate byte operand (OperandType::kImm8). |
static bool IsJumpImmediate(Bytecode bytecode); |
- // Return true if the bytecode is a jump or conditional jump taking a |
+ // Returns true if the bytecode is a jump or conditional jump taking a |
// constant pool entry (OperandType::kIdx8). |
static bool IsJumpConstant(Bytecode bytecode); |
- // Return true if the bytecode is a jump or conditional jump taking a |
+ // Returns true if the bytecode is a jump or conditional jump taking a |
// constant pool entry (OperandType::kIdx16). |
static bool IsJumpConstantWide(Bytecode bytecode); |