| OLD | NEW |
| 1 // Copyright 2015 the V8 project authors. All rights reserved. | 1 // Copyright 2015 the V8 project authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #ifndef V8_INTERPRETER_INTERPRETER_H_ | 5 #ifndef V8_INTERPRETER_INTERPRETER_H_ |
| 6 #define V8_INTERPRETER_INTERPRETER_H_ | 6 #define V8_INTERPRETER_INTERPRETER_H_ |
| 7 | 7 |
| 8 #include <memory> | 8 #include <memory> |
| 9 | 9 |
| 10 // Clients of this interface shouldn't depend on lots of interpreter internals. | 10 // Clients of this interface shouldn't depend on lots of interpreter internals. |
| (...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 71 | 71 |
| 72 private: | 72 private: |
| 73 // Bytecode handler generator functions. | 73 // Bytecode handler generator functions. |
| 74 #define DECLARE_BYTECODE_HANDLER_GENERATOR(Name, ...) \ | 74 #define DECLARE_BYTECODE_HANDLER_GENERATOR(Name, ...) \ |
| 75 void Do##Name(InterpreterAssembler* assembler); | 75 void Do##Name(InterpreterAssembler* assembler); |
| 76 BYTECODE_LIST(DECLARE_BYTECODE_HANDLER_GENERATOR) | 76 BYTECODE_LIST(DECLARE_BYTECODE_HANDLER_GENERATOR) |
| 77 #undef DECLARE_BYTECODE_HANDLER_GENERATOR | 77 #undef DECLARE_BYTECODE_HANDLER_GENERATOR |
| 78 | 78 |
| 79 typedef void (Interpreter::*BytecodeGeneratorFunc)(InterpreterAssembler*); | 79 typedef void (Interpreter::*BytecodeGeneratorFunc)(InterpreterAssembler*); |
| 80 | 80 |
| 81 // In the case of bytecodes that share handler implementations, copy the code |
| 82 // into the bytecode's dispatcher table entry and return true. |
| 83 bool ReuseExistingHandler(Bytecode bytecode, OperandScale operand_scale); |
| 84 |
| 81 // Generates handler for given |bytecode| and |operand_scale| using | 85 // Generates handler for given |bytecode| and |operand_scale| using |
| 82 // |generator| and installs it into the dispatch table. | 86 // |generator| and installs it into the dispatch table. |
| 83 void InstallBytecodeHandler(Zone* zone, Bytecode bytecode, | 87 void InstallBytecodeHandler(Zone* zone, Bytecode bytecode, |
| 84 OperandScale operand_scale, | 88 OperandScale operand_scale, |
| 85 BytecodeGeneratorFunc generator); | 89 BytecodeGeneratorFunc generator); |
| 86 | 90 |
| 87 // Generates code to perform the binary operation via |Generator|. | 91 // Generates code to perform the binary operation via |Generator|. |
| 88 template <class Generator> | 92 template <class Generator> |
| 89 void DoBinaryOpWithFeedback(InterpreterAssembler* assembler); | 93 void DoBinaryOpWithFeedback(InterpreterAssembler* assembler); |
| 90 | 94 |
| (...skipping 26 matching lines...) Expand all Loading... |
| 117 | 121 |
| 118 // Generates code to perform a named property store via |ic|. | 122 // Generates code to perform a named property store via |ic|. |
| 119 void DoStoreIC(Callable ic, InterpreterAssembler* assembler); | 123 void DoStoreIC(Callable ic, InterpreterAssembler* assembler); |
| 120 | 124 |
| 121 // Generates code to perform a keyed property store via |ic|. | 125 // Generates code to perform a keyed property store via |ic|. |
| 122 void DoKeyedStoreIC(Callable ic, InterpreterAssembler* assembler); | 126 void DoKeyedStoreIC(Callable ic, InterpreterAssembler* assembler); |
| 123 | 127 |
| 124 // Generates code to perform a JS call that collects type feedback. | 128 // Generates code to perform a JS call that collects type feedback. |
| 125 void DoJSCall(InterpreterAssembler* assembler, TailCallMode tail_call_mode); | 129 void DoJSCall(InterpreterAssembler* assembler, TailCallMode tail_call_mode); |
| 126 | 130 |
| 131 // Generates code to perform a JS call with a known number of arguments that |
| 132 // collects type feedback. |
| 133 void DoJSCallN(InterpreterAssembler* assembler, int n); |
| 134 |
| 127 // Generates code to perform delete via function_id. | 135 // Generates code to perform delete via function_id. |
| 128 void DoDelete(Runtime::FunctionId function_id, | 136 void DoDelete(Runtime::FunctionId function_id, |
| 129 InterpreterAssembler* assembler); | 137 InterpreterAssembler* assembler); |
| 130 | 138 |
| 131 // Generates code to perform a lookup slot load via |function_id|. | 139 // Generates code to perform a lookup slot load via |function_id|. |
| 132 void DoLdaLookupSlot(Runtime::FunctionId function_id, | 140 void DoLdaLookupSlot(Runtime::FunctionId function_id, |
| 133 InterpreterAssembler* assembler); | 141 InterpreterAssembler* assembler); |
| 134 | 142 |
| 135 // Generates code to perform a lookup slot load via |function_id| that can | 143 // Generates code to perform a lookup slot load via |function_id| that can |
| 136 // fast path to a context slot load. | 144 // fast path to a context slot load. |
| (...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 187 std::unique_ptr<uintptr_t[]> bytecode_dispatch_counters_table_; | 195 std::unique_ptr<uintptr_t[]> bytecode_dispatch_counters_table_; |
| 188 | 196 |
| 189 DISALLOW_COPY_AND_ASSIGN(Interpreter); | 197 DISALLOW_COPY_AND_ASSIGN(Interpreter); |
| 190 }; | 198 }; |
| 191 | 199 |
| 192 } // namespace interpreter | 200 } // namespace interpreter |
| 193 } // namespace internal | 201 } // namespace internal |
| 194 } // namespace v8 | 202 } // namespace v8 |
| 195 | 203 |
| 196 #endif // V8_INTERPRETER_INTERPRETER_H_ | 204 #endif // V8_INTERPRETER_INTERPRETER_H_ |
| OLD | NEW |