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_BYTECODE_ARRAY_BUILDER_H_ | 5 #ifndef V8_INTERPRETER_BYTECODE_ARRAY_BUILDER_H_ |
6 #define V8_INTERPRETER_BYTECODE_ARRAY_BUILDER_H_ | 6 #define V8_INTERPRETER_BYTECODE_ARRAY_BUILDER_H_ |
7 | 7 |
8 #include "src/ast/ast.h" | 8 #include "src/ast/ast.h" |
9 #include "src/interpreter/bytecodes.h" | 9 #include "src/interpreter/bytecodes.h" |
10 #include "src/interpreter/constant-array-builder.h" | 10 #include "src/interpreter/constant-array-builder.h" |
(...skipping 149 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
160 // applied to the constructor. | 160 // applied to the constructor. |
161 BytecodeArrayBuilder& New(Register constructor, Register first_arg, | 161 BytecodeArrayBuilder& New(Register constructor, Register first_arg, |
162 size_t arg_count); | 162 size_t arg_count); |
163 | 163 |
164 // Call the runtime function with |function_id|. The first argument should be | 164 // Call the runtime function with |function_id|. The first argument should be |
165 // in |first_arg| and all subsequent arguments should be in registers | 165 // in |first_arg| and all subsequent arguments should be in registers |
166 // <first_arg + 1> to <first_arg + 1 + arg_count>. | 166 // <first_arg + 1> to <first_arg + 1 + arg_count>. |
167 BytecodeArrayBuilder& CallRuntime(Runtime::FunctionId function_id, | 167 BytecodeArrayBuilder& CallRuntime(Runtime::FunctionId function_id, |
168 Register first_arg, size_t arg_count); | 168 Register first_arg, size_t arg_count); |
169 | 169 |
| 170 // Call the runtime function with |function_id| that returns a pair of values. |
| 171 // The first argument should be in |first_arg| and all subsequent arguments |
| 172 // should be in registers <first_arg + 1> to <first_arg + 1 + arg_count>. The |
| 173 // return values will be returned in <first_return> and <first_return + 1>. |
| 174 BytecodeArrayBuilder& CallRuntimeForPair(Runtime::FunctionId function_id, |
| 175 Register first_arg, size_t arg_count, |
| 176 Register first_return); |
| 177 |
170 // Call the JS runtime function with |context_index|. The the receiver should | 178 // Call the JS runtime function with |context_index|. The the receiver should |
171 // be in |receiver| and all subsequent arguments should be in registers | 179 // be in |receiver| and all subsequent arguments should be in registers |
172 // <receiver + 1> to <receiver + 1 + arg_count>. | 180 // <receiver + 1> to <receiver + 1 + arg_count>. |
173 BytecodeArrayBuilder& CallJSRuntime(int context_index, Register receiver, | 181 BytecodeArrayBuilder& CallJSRuntime(int context_index, Register receiver, |
174 size_t arg_count); | 182 size_t arg_count); |
175 | 183 |
176 // Operators (register holds the lhs value, accumulator holds the rhs value). | 184 // Operators (register holds the lhs value, accumulator holds the rhs value). |
177 BytecodeArrayBuilder& BinaryOperation(Token::Value binop, Register reg, | 185 BytecodeArrayBuilder& BinaryOperation(Token::Value binop, Register reg, |
178 Strength strength); | 186 Strength strength); |
179 | 187 |
(...skipping 106 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
286 void LeaveBasicBlock(); | 294 void LeaveBasicBlock(); |
287 void EnsureReturn(); | 295 void EnsureReturn(); |
288 | 296 |
289 bool OperandIsValid(Bytecode bytecode, int operand_index, | 297 bool OperandIsValid(Bytecode bytecode, int operand_index, |
290 uint32_t operand_value) const; | 298 uint32_t operand_value) const; |
291 bool LastBytecodeInSameBlock() const; | 299 bool LastBytecodeInSameBlock() const; |
292 | 300 |
293 bool NeedToBooleanCast(); | 301 bool NeedToBooleanCast(); |
294 bool IsRegisterInAccumulator(Register reg); | 302 bool IsRegisterInAccumulator(Register reg); |
295 | 303 |
| 304 bool RegisterIsValid(Register reg) const; |
| 305 |
296 // Temporary register management. | 306 // Temporary register management. |
297 int BorrowTemporaryRegister(); | 307 int BorrowTemporaryRegister(); |
298 int BorrowTemporaryRegisterNotInRange(int start_index, int end_index); | 308 int BorrowTemporaryRegisterNotInRange(int start_index, int end_index); |
299 int AllocateAndBorrowTemporaryRegister(); | 309 int AllocateAndBorrowTemporaryRegister(); |
300 void ReturnTemporaryRegister(int reg_index); | 310 void ReturnTemporaryRegister(int reg_index); |
301 int PrepareForConsecutiveTemporaryRegisters(size_t count); | 311 int PrepareForConsecutiveTemporaryRegisters(size_t count); |
302 void BorrowConsecutiveTemporaryRegister(int reg_index); | 312 void BorrowConsecutiveTemporaryRegister(int reg_index); |
303 bool TemporaryRegisterIsLive(Register reg) const; | 313 bool TemporaryRegisterIsLive(Register reg) const; |
304 | 314 |
305 Register first_temporary_register() const; | 315 Register first_temporary_register() const; |
(...skipping 95 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
401 | 411 |
402 DISALLOW_COPY_AND_ASSIGN(TemporaryRegisterScope); | 412 DISALLOW_COPY_AND_ASSIGN(TemporaryRegisterScope); |
403 }; | 413 }; |
404 | 414 |
405 | 415 |
406 } // namespace interpreter | 416 } // namespace interpreter |
407 } // namespace internal | 417 } // namespace internal |
408 } // namespace v8 | 418 } // namespace v8 |
409 | 419 |
410 #endif // V8_INTERPRETER_BYTECODE_ARRAY_BUILDER_H_ | 420 #endif // V8_INTERPRETER_BYTECODE_ARRAY_BUILDER_H_ |
OLD | NEW |