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 |