diff options
Diffstat (limited to 'deps/v8/src/interpreter/interpreter.h')
-rw-r--r-- | deps/v8/src/interpreter/interpreter.h | 78 |
1 files changed, 50 insertions, 28 deletions
diff --git a/deps/v8/src/interpreter/interpreter.h b/deps/v8/src/interpreter/interpreter.h index ef9b5d1fe3..e02e9142b3 100644 --- a/deps/v8/src/interpreter/interpreter.h +++ b/deps/v8/src/interpreter/interpreter.h @@ -21,91 +21,113 @@ class Isolate; class Callable; class CompilationInfo; -namespace compiler { -class InterpreterAssembler; -} - namespace interpreter { +class InterpreterAssembler; + class Interpreter { public: explicit Interpreter(Isolate* isolate); virtual ~Interpreter() {} - // Creates an uninitialized interpreter handler table, where each handler - // points to the Illegal builtin. - static Handle<FixedArray> CreateUninitializedInterpreterTable( - Isolate* isolate); - - // Initializes the interpreter. + // Initializes the interpreter dispatch table. void Initialize(); + // Returns the interrupt budget which should be used for the profiler counter. + static int InterruptBudget(); + // Generate bytecode for |info|. static bool MakeBytecode(CompilationInfo* info); + // Return bytecode handler for |bytecode|. + Code* GetBytecodeHandler(Bytecode bytecode); + + // GC support. + void IterateDispatchTable(ObjectVisitor* v); + + void TraceCodegen(Handle<Code> code, const char* name); + + Address dispatch_table_address() { + return reinterpret_cast<Address>(&dispatch_table_[0]); + } + private: // Bytecode handler generator functions. #define DECLARE_BYTECODE_HANDLER_GENERATOR(Name, ...) \ - void Do##Name(compiler::InterpreterAssembler* assembler); + void Do##Name(InterpreterAssembler* assembler); BYTECODE_LIST(DECLARE_BYTECODE_HANDLER_GENERATOR) #undef DECLARE_BYTECODE_HANDLER_GENERATOR // Generates code to perform the binary operations via |function_id|. void DoBinaryOp(Runtime::FunctionId function_id, - compiler::InterpreterAssembler* assembler); + InterpreterAssembler* assembler); // Generates code to perform the count operations via |function_id|. void DoCountOp(Runtime::FunctionId function_id, - compiler::InterpreterAssembler* assembler); + InterpreterAssembler* assembler); // Generates code to perform the comparison operation associated with // |compare_op|. - void DoCompareOp(Token::Value compare_op, - compiler::InterpreterAssembler* assembler); + void DoCompareOp(Token::Value compare_op, InterpreterAssembler* assembler); // Generates code to load a constant from the constant pool. - void DoLoadConstant(compiler::InterpreterAssembler* assembler); + void DoLoadConstant(InterpreterAssembler* assembler); // Generates code to perform a global load via |ic|. - void DoLoadGlobal(Callable ic, compiler::InterpreterAssembler* assembler); + void DoLoadGlobal(Callable ic, InterpreterAssembler* assembler); // Generates code to perform a global store via |ic|. - void DoStoreGlobal(Callable ic, compiler::InterpreterAssembler* assembler); + void DoStoreGlobal(Callable ic, InterpreterAssembler* assembler); // Generates code to perform a named property load via |ic|. - void DoLoadIC(Callable ic, compiler::InterpreterAssembler* assembler); + void DoLoadIC(Callable ic, InterpreterAssembler* assembler); // Generates code to perform a keyed property load via |ic|. - void DoKeyedLoadIC(Callable ic, compiler::InterpreterAssembler* assembler); + void DoKeyedLoadIC(Callable ic, InterpreterAssembler* assembler); // Generates code to perform a namedproperty store via |ic|. - void DoStoreIC(Callable ic, compiler::InterpreterAssembler* assembler); + void DoStoreIC(Callable ic, InterpreterAssembler* assembler); // Generates code to perform a keyed property store via |ic|. - void DoKeyedStoreIC(Callable ic, compiler::InterpreterAssembler* assembler); + void DoKeyedStoreIC(Callable ic, InterpreterAssembler* assembler); // Generates code to perform a JS call. - void DoJSCall(compiler::InterpreterAssembler* assembler); + void DoJSCall(InterpreterAssembler* assembler, TailCallMode tail_call_mode); + + // Generates code to perform a runtime call. + void DoCallRuntimeCommon(InterpreterAssembler* assembler); + + // Generates code to perform a runtime call returning a pair. + void DoCallRuntimeForPairCommon(InterpreterAssembler* assembler); + + // Generates code to perform a JS runtime call. + void DoCallJSRuntimeCommon(InterpreterAssembler* assembler); + + // Generates code to perform a constructor call.. + void DoCallConstruct(InterpreterAssembler* assembler); // Generates code ro create a literal via |function_id|. void DoCreateLiteral(Runtime::FunctionId function_id, - compiler::InterpreterAssembler* assembler); + InterpreterAssembler* assembler); // Generates code to perform delete via function_id. void DoDelete(Runtime::FunctionId function_id, - compiler::InterpreterAssembler* assembler); + InterpreterAssembler* assembler); // Generates code to perform a lookup slot load via |function_id|. void DoLoadLookupSlot(Runtime::FunctionId function_id, - compiler::InterpreterAssembler* assembler); + InterpreterAssembler* assembler); // Generates code to perform a lookup slot store depending on |language_mode|. void DoStoreLookupSlot(LanguageMode language_mode, - compiler::InterpreterAssembler* assembler); + InterpreterAssembler* assembler); + + bool IsDispatchTableInitialized(); - bool IsInterpreterTableInitialized(Handle<FixedArray> handler_table); + static const int kDispatchTableSize = static_cast<int>(Bytecode::kLast) + 1; Isolate* isolate_; + Code* dispatch_table_[kDispatchTableSize]; DISALLOW_COPY_AND_ASSIGN(Interpreter); }; |