Index: src/interpreter/bytecodes.h |
diff --git a/src/interpreter/bytecodes.h b/src/interpreter/bytecodes.h |
index dc125162fa4f6763b5203d2d2e0bc12595361a4f..b28066ae0310bd743c7470a21e519ef0f1d03bf1 100644 |
--- a/src/interpreter/bytecodes.h |
+++ b/src/interpreter/bytecodes.h |
@@ -15,38 +15,77 @@ namespace v8 { |
namespace internal { |
namespace interpreter { |
+// The list of operands used by bytecodes. |
+#define OPERAND_LIST(V) \ |
+ V(None) \ |
+ V(Imm0) \ |
+ V(Imm8) \ |
+ V(Smi) \ |
+ V(Reg) |
+ |
+enum class Operand : int8_t { |
+#define DECLARE_OPERAND(Name) k##Name, |
+ OPERAND_LIST(DECLARE_OPERAND) |
+#undef DECLARE_OPERAND |
+#define COUNT_OPERAND(x) +1 |
+ // The COUNT_OPERAND macro will turn this into kLast = -1 +1 +1... which will |
+ // evaluate to the same value as the last operand. |
+ kLast = -1 OPERAND_LIST(COUNT_OPERAND) |
+#undef COUNT_OPERAND |
+}; |
+ |
+ |
// The list of bytecodes which are interpreted by the interpreter. |
#define BYTECODE_LIST(V) \ |
- V(LoadLiteral0, 1) \ |
- V(Return, 0) |
+ V(LoadSmi0) \ |
+ V(LoadSmi8) \ |
+ V(LoadSmi) \ |
+ V(Move) \ |
+ V(Add) \ |
+ V(Sub) \ |
+ V(Mul) \ |
+ V(Div) \ |
+ V(Mod) \ |
+ V(Return) |
+ |
enum class Bytecode : uint8_t { |
-#define DECLARE_BYTECODE(Name, _) k##Name, |
+#define DECLARE_BYTECODE(Name) k##Name, |
BYTECODE_LIST(DECLARE_BYTECODE) |
#undef DECLARE_BYTECODE |
-#define COUNT_BYTECODE(x, _) +1 |
+#define COUNT_BYTECODE(x) +1 |
// The COUNT_BYTECODE macro will turn this into kLast = -1 +1 +1... which will |
// evaluate to the same value as the last real bytecode. |
kLast = -1 BYTECODE_LIST(COUNT_BYTECODE) |
#undef COUNT_BYTECODE |
}; |
+ |
class Bytecodes { |
public: |
// Returns string representation of |bytecode|. |
static const char* ToString(Bytecode bytecode); |
- // Returns the number of arguments expected by |bytecode|. |
- static const int NumberOfArguments(Bytecode bytecode); |
+ // Converts raw byte value into Bytecode, checking validity in the process. |
+ static Bytecode FromByte(uint8_t value); |
+ |
+ // Returns the number of operands expected by |bytecode|. |
+ static const int NumberOfOperands(Bytecode bytecode); |
+ |
+ // Return the i-th operand of |bytecode|. |
+ static const Operand GetOperand(Bytecode bytecode, int i); |
+ |
+ // Return the size of |operand| in bytes. |
+ static const int GetOperandSize(Operand operand); |
// Returns the size of the bytecode including its arguments. |
static const int Size(Bytecode bytecode); |
- // The maximum number of arguments across all bytecodes. |
- static const int kMaximumNumberOfArguments = 1; |
+ // The maximum number of operands across all bytecodes. |
+ static const int MaximumNumberOfOperands(); |
// Maximum size of a bytecode and its arguments. |
- static const int kMaximumSize = 1 + kMaximumNumberOfArguments; |
+ static const int MaximumSize(); |
private: |
DISALLOW_IMPLICIT_CONSTRUCTORS(Bytecodes); |