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_COMPILER_INTERPRETER_ASSEMBLER_H_ | 5 #ifndef V8_COMPILER_INTERPRETER_ASSEMBLER_H_ |
6 #define V8_COMPILER_INTERPRETER_ASSEMBLER_H_ | 6 #define V8_COMPILER_INTERPRETER_ASSEMBLER_H_ |
7 | 7 |
8 // Clients of this interface shouldn't depend on lots of compiler internals. | 8 // Clients of this interface shouldn't depend on lots of compiler internals. |
9 // Do not include anything from src/compiler here! | 9 // Do not include anything from src/compiler here! |
10 #include "src/allocation.h" | 10 #include "src/allocation.h" |
(...skipping 122 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
133 Node* arg2, Node* arg3, Node* arg4, Node* arg5); | 133 Node* arg2, Node* arg3, Node* arg4, Node* arg5); |
134 | 134 |
135 // Call runtime function. | 135 // Call runtime function. |
136 Node* CallRuntime(Node* function_id, Node* first_arg, Node* arg_count, | 136 Node* CallRuntime(Node* function_id, Node* first_arg, Node* arg_count, |
137 int return_size = 1); | 137 int return_size = 1); |
138 Node* CallRuntime(Runtime::FunctionId function_id, Node* arg1); | 138 Node* CallRuntime(Runtime::FunctionId function_id, Node* arg1); |
139 Node* CallRuntime(Runtime::FunctionId function_id, Node* arg1, Node* arg2); | 139 Node* CallRuntime(Runtime::FunctionId function_id, Node* arg1, Node* arg2); |
140 Node* CallRuntime(Runtime::FunctionId function_id, Node* arg1, Node* arg2, | 140 Node* CallRuntime(Runtime::FunctionId function_id, Node* arg1, Node* arg2, |
141 Node* arg3, Node* arg4); | 141 Node* arg3, Node* arg4); |
142 | 142 |
| 143 // Optimization for a few supported intrinsics taking only one argument. |
| 144 Node* IntrinsicOneArg(Node* function_id, Node* arg); |
| 145 |
143 // Jump relative to the current bytecode by |jump_offset|. | 146 // Jump relative to the current bytecode by |jump_offset|. |
144 void Jump(Node* jump_offset); | 147 void Jump(Node* jump_offset); |
145 | 148 |
146 // Jump relative to the current bytecode by |jump_offset| if the | 149 // Jump relative to the current bytecode by |jump_offset| if the |
147 // word values |lhs| and |rhs| are equal. | 150 // word values |lhs| and |rhs| are equal. |
148 void JumpIfWordEqual(Node* lhs, Node* rhs, Node* jump_offset); | 151 void JumpIfWordEqual(Node* lhs, Node* rhs, Node* jump_offset); |
149 | 152 |
150 // Returns from the function. | 153 // Returns from the function. |
151 void Return(); | 154 void Return(); |
152 | 155 |
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
188 Node* BytecodeOperandShortSignExtended(int operand_index); | 191 Node* BytecodeOperandShortSignExtended(int operand_index); |
189 | 192 |
190 Node* CallN(CallDescriptor* descriptor, Node* code_target, Node** args); | 193 Node* CallN(CallDescriptor* descriptor, Node* code_target, Node** args); |
191 Node* CallIC(CallInterfaceDescriptor descriptor, Node* target, Node** args); | 194 Node* CallIC(CallInterfaceDescriptor descriptor, Node* target, Node** args); |
192 | 195 |
193 // Returns BytecodeOffset() advanced by delta bytecodes. Note: this does not | 196 // Returns BytecodeOffset() advanced by delta bytecodes. Note: this does not |
194 // update BytecodeOffset() itself. | 197 // update BytecodeOffset() itself. |
195 Node* Advance(int delta); | 198 Node* Advance(int delta); |
196 Node* Advance(Node* delta); | 199 Node* Advance(Node* delta); |
197 | 200 |
| 201 // Helper methods to deal with IntrinsicOneArg. |
| 202 Node* ToBoolean(Node* arg); |
| 203 Node* IsJSReceiver(Node* arg); |
| 204 Node* IsJSArray(Node* arg); |
| 205 |
198 // Starts next instruction dispatch at |new_bytecode_offset|. | 206 // Starts next instruction dispatch at |new_bytecode_offset|. |
199 void DispatchTo(Node* new_bytecode_offset); | 207 void DispatchTo(Node* new_bytecode_offset); |
200 | 208 |
201 // Abort operations for debug code. | 209 // Abort operations for debug code. |
202 void AbortIfWordNotEqual(Node* lhs, Node* rhs, BailoutReason bailout_reason); | 210 void AbortIfWordNotEqual(Node* lhs, Node* rhs, BailoutReason bailout_reason); |
203 | 211 |
204 // Private helpers which delegate to RawMachineAssembler. | 212 // Private helpers which delegate to RawMachineAssembler. |
205 Isolate* isolate(); | 213 Isolate* isolate(); |
206 Zone* zone(); | 214 Zone* zone(); |
207 | 215 |
208 interpreter::Bytecode bytecode_; | 216 interpreter::Bytecode bytecode_; |
209 base::SmartPointer<RawMachineAssembler> raw_assembler_; | 217 base::SmartPointer<RawMachineAssembler> raw_assembler_; |
210 | 218 |
211 Node* accumulator_; | 219 Node* accumulator_; |
212 Node* bytecode_offset_; | 220 Node* bytecode_offset_; |
213 Node* context_; | 221 Node* context_; |
214 | 222 |
215 bool code_generated_; | 223 bool code_generated_; |
216 | 224 |
217 DISALLOW_COPY_AND_ASSIGN(InterpreterAssembler); | 225 DISALLOW_COPY_AND_ASSIGN(InterpreterAssembler); |
218 }; | 226 }; |
219 | 227 |
220 } // namespace compiler | 228 } // namespace compiler |
221 } // namespace internal | 229 } // namespace internal |
222 } // namespace v8 | 230 } // namespace v8 |
223 | 231 |
224 #endif // V8_COMPILER_INTERPRETER_ASSEMBLER_H_ | 232 #endif // V8_COMPILER_INTERPRETER_ASSEMBLER_H_ |
OLD | NEW |