Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(801)

Unified Diff: src/interpreter/bytecodes.h

Issue 1257543003: [Interpreter] Add more bytecode definitions and add operand types. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Rebase. Created 5 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « src/compiler/interpreter-assembler.cc ('k') | src/interpreter/bytecodes.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/interpreter/bytecodes.h
diff --git a/src/interpreter/bytecodes.h b/src/interpreter/bytecodes.h
index dc125162fa4f6763b5203d2d2e0bc12595361a4f..b4c0d9c4446b7eda2ac1a99a683d29e018c519b2 100644
--- a/src/interpreter/bytecodes.h
+++ b/src/interpreter/bytecodes.h
@@ -15,38 +15,70 @@ namespace v8 {
namespace internal {
namespace interpreter {
+// The list of operand types used by bytecodes.
+#define OPERAND_TYPE_LIST(V) \
+ V(None) \
+ V(Imm8) \
+ V(Reg)
+
// The list of bytecodes which are interpreted by the interpreter.
-#define BYTECODE_LIST(V) \
- V(LoadLiteral0, 1) \
- V(Return, 0)
+#define BYTECODE_LIST(V) \
+ V(LoadLiteral0, OperandType::kReg) \
+ V(LoadSmi8, OperandType::kReg, OperandType::kImm8) \
+ V(Return, OperandType::kNone)
+
+
+// Enumeration of operand types used by bytecodes.
+enum class OperandType : uint8_t {
+#define DECLARE_OPERAND_TYPE(Name) k##Name,
+ OPERAND_TYPE_LIST(DECLARE_OPERAND_TYPE)
+#undef DECLARE_OPERAND_TYPE
+#define COUNT_OPERAND_TYPES(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_TYPE_LIST(COUNT_OPERAND_TYPES)
+#undef COUNT_OPERAND_TYPES
+};
+
+// Enumeration of interpreter bytecodes.
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);
+ // Returns byte value of bytecode.
+ static uint8_t ToByte(Bytecode bytecode);
+
+ // Returns bytecode for |value|.
+ 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 OperandType GetOperandType(Bytecode bytecode, int i);
// 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);
« no previous file with comments | « src/compiler/interpreter-assembler.cc ('k') | src/interpreter/bytecodes.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698