| 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 <vector> | 8 #include <vector> |
| 9 | 9 |
| 10 #include "src/ast/ast.h" | 10 #include "src/ast/ast.h" |
| (...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 63 | 63 |
| 64 Register Parameter(int parameter_index) const; | 64 Register Parameter(int parameter_index) const; |
| 65 | 65 |
| 66 // Return true if the register |reg| represents a parameter or a | 66 // Return true if the register |reg| represents a parameter or a |
| 67 // local. | 67 // local. |
| 68 bool RegisterIsParameterOrLocal(Register reg) const; | 68 bool RegisterIsParameterOrLocal(Register reg) const; |
| 69 | 69 |
| 70 // Return true if the register |reg| represents a temporary register. | 70 // Return true if the register |reg| represents a temporary register. |
| 71 bool RegisterIsTemporary(Register reg) const; | 71 bool RegisterIsTemporary(Register reg) const; |
| 72 | 72 |
| 73 // Gets a constant pool entry for the |object|. | |
| 74 size_t GetConstantPoolEntry(Handle<Object> object); | |
| 75 | |
| 76 // Constant loads to accumulator. | 73 // Constant loads to accumulator. |
| 77 BytecodeArrayBuilder& LoadLiteral(v8::internal::Smi* value); | 74 BytecodeArrayBuilder& LoadLiteral(v8::internal::Smi* value); |
| 78 BytecodeArrayBuilder& LoadLiteral(Handle<Object> object); | 75 BytecodeArrayBuilder& LoadLiteral(Handle<Object> object); |
| 79 BytecodeArrayBuilder& LoadUndefined(); | 76 BytecodeArrayBuilder& LoadUndefined(); |
| 80 BytecodeArrayBuilder& LoadNull(); | 77 BytecodeArrayBuilder& LoadNull(); |
| 81 BytecodeArrayBuilder& LoadTheHole(); | 78 BytecodeArrayBuilder& LoadTheHole(); |
| 82 BytecodeArrayBuilder& LoadTrue(); | 79 BytecodeArrayBuilder& LoadTrue(); |
| 83 BytecodeArrayBuilder& LoadFalse(); | 80 BytecodeArrayBuilder& LoadFalse(); |
| 84 BytecodeArrayBuilder& LoadBooleanConstant(bool value); | 81 BytecodeArrayBuilder& LoadBooleanConstant(bool value); |
| 85 | 82 |
| 86 // Global loads to the accumulator and stores from the accumulator. | 83 // Global loads to the accumulator and stores from the accumulator. |
| 87 BytecodeArrayBuilder& LoadGlobal(size_t name_index, int feedback_slot, | 84 BytecodeArrayBuilder& LoadGlobal(const Handle<String> name, int feedback_slot, |
| 88 LanguageMode language_mode, | 85 LanguageMode language_mode, |
| 89 TypeofMode typeof_mode); | 86 TypeofMode typeof_mode); |
| 90 BytecodeArrayBuilder& StoreGlobal(size_t name_index, int feedback_slot, | 87 BytecodeArrayBuilder& StoreGlobal(const Handle<String> name, |
| 88 int feedback_slot, |
| 91 LanguageMode language_mode); | 89 LanguageMode language_mode); |
| 92 | 90 |
| 93 // Load the object at |slot_index| in |context| into the accumulator. | 91 // Load the object at |slot_index| in |context| into the accumulator. |
| 94 BytecodeArrayBuilder& LoadContextSlot(Register context, int slot_index); | 92 BytecodeArrayBuilder& LoadContextSlot(Register context, int slot_index); |
| 95 | 93 |
| 96 // Stores the object in the accumulator into |slot_index| of |context|. | 94 // Stores the object in the accumulator into |slot_index| of |context|. |
| 97 BytecodeArrayBuilder& StoreContextSlot(Register context, int slot_index); | 95 BytecodeArrayBuilder& StoreContextSlot(Register context, int slot_index); |
| 98 | 96 |
| 99 // Register-accumulator transfers. | 97 // Register-accumulator transfers. |
| 100 BytecodeArrayBuilder& LoadAccumulatorWithRegister(Register reg); | 98 BytecodeArrayBuilder& LoadAccumulatorWithRegister(Register reg); |
| 101 BytecodeArrayBuilder& StoreAccumulatorInRegister(Register reg); | 99 BytecodeArrayBuilder& StoreAccumulatorInRegister(Register reg); |
| 102 | 100 |
| 103 // Register-register transfer. | 101 // Register-register transfer. |
| 104 BytecodeArrayBuilder& MoveRegister(Register from, Register to); | 102 BytecodeArrayBuilder& MoveRegister(Register from, Register to); |
| 105 | 103 |
| 106 // Named load property. | 104 // Named load property. |
| 107 BytecodeArrayBuilder& LoadNamedProperty(Register object, size_t name_index, | 105 BytecodeArrayBuilder& LoadNamedProperty(Register object, |
| 106 const Handle<String> name, |
| 108 int feedback_slot, | 107 int feedback_slot, |
| 109 LanguageMode language_mode); | 108 LanguageMode language_mode); |
| 110 // Keyed load property. The key should be in the accumulator. | 109 // Keyed load property. The key should be in the accumulator. |
| 111 BytecodeArrayBuilder& LoadKeyedProperty(Register object, int feedback_slot, | 110 BytecodeArrayBuilder& LoadKeyedProperty(Register object, int feedback_slot, |
| 112 LanguageMode language_mode); | 111 LanguageMode language_mode); |
| 113 | 112 |
| 114 // Store properties. The value to be stored should be in the accumulator. | 113 // Store properties. The value to be stored should be in the accumulator. |
| 115 BytecodeArrayBuilder& StoreNamedProperty(Register object, size_t name_index, | 114 BytecodeArrayBuilder& StoreNamedProperty(Register object, |
| 115 const Handle<String> name, |
| 116 int feedback_slot, | 116 int feedback_slot, |
| 117 LanguageMode language_mode); | 117 LanguageMode language_mode); |
| 118 BytecodeArrayBuilder& StoreKeyedProperty(Register object, Register key, | 118 BytecodeArrayBuilder& StoreKeyedProperty(Register object, Register key, |
| 119 int feedback_slot, | 119 int feedback_slot, |
| 120 LanguageMode language_mode); | 120 LanguageMode language_mode); |
| 121 | 121 |
| 122 // Lookup the variable with |name|. | 122 // Lookup the variable with |name|. |
| 123 BytecodeArrayBuilder& LoadLookupSlot(const Handle<String> name, | 123 BytecodeArrayBuilder& LoadLookupSlot(const Handle<String> name, |
| 124 TypeofMode typeof_mode); | 124 TypeofMode typeof_mode); |
| 125 | 125 |
| (...skipping 155 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 281 int BorrowTemporaryRegisterNotInRange(int start_index, int end_index); | 281 int BorrowTemporaryRegisterNotInRange(int start_index, int end_index); |
| 282 int AllocateAndBorrowTemporaryRegister(); | 282 int AllocateAndBorrowTemporaryRegister(); |
| 283 void ReturnTemporaryRegister(int reg_index); | 283 void ReturnTemporaryRegister(int reg_index); |
| 284 int PrepareForConsecutiveTemporaryRegisters(size_t count); | 284 int PrepareForConsecutiveTemporaryRegisters(size_t count); |
| 285 void BorrowConsecutiveTemporaryRegister(int reg_index); | 285 void BorrowConsecutiveTemporaryRegister(int reg_index); |
| 286 bool TemporaryRegisterIsLive(Register reg) const; | 286 bool TemporaryRegisterIsLive(Register reg) const; |
| 287 | 287 |
| 288 Register first_temporary_register() const; | 288 Register first_temporary_register() const; |
| 289 Register last_temporary_register() const; | 289 Register last_temporary_register() const; |
| 290 | 290 |
| 291 // Gets a constant pool entry for the |object|. |
| 292 size_t GetConstantPoolEntry(Handle<Object> object); |
| 293 |
| 291 Isolate* isolate_; | 294 Isolate* isolate_; |
| 292 Zone* zone_; | 295 Zone* zone_; |
| 293 ZoneVector<uint8_t> bytecodes_; | 296 ZoneVector<uint8_t> bytecodes_; |
| 294 bool bytecode_generated_; | 297 bool bytecode_generated_; |
| 295 size_t last_block_end_; | 298 size_t last_block_end_; |
| 296 size_t last_bytecode_start_; | 299 size_t last_bytecode_start_; |
| 297 bool exit_seen_in_block_; | 300 bool exit_seen_in_block_; |
| 298 int unbound_jumps_; | 301 int unbound_jumps_; |
| 299 | 302 |
| 300 IdentityMap<size_t> constants_map_; | 303 IdentityMap<size_t> constants_map_; |
| (...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 384 | 387 |
| 385 DISALLOW_COPY_AND_ASSIGN(TemporaryRegisterScope); | 388 DISALLOW_COPY_AND_ASSIGN(TemporaryRegisterScope); |
| 386 }; | 389 }; |
| 387 | 390 |
| 388 | 391 |
| 389 } // namespace interpreter | 392 } // namespace interpreter |
| 390 } // namespace internal | 393 } // namespace internal |
| 391 } // namespace v8 | 394 } // namespace v8 |
| 392 | 395 |
| 393 #endif // V8_INTERPRETER_BYTECODE_ARRAY_BUILDER_H_ | 396 #endif // V8_INTERPRETER_BYTECODE_ARRAY_BUILDER_H_ |
| OLD | NEW |