OLD | NEW |
1 // Copyright 2014 the V8 project authors. All rights reserved. | 1 // Copyright 2014 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 #include "src/v8.h" | 5 #include "src/v8.h" |
6 | 6 |
7 #include "src/interpreter/bytecode-array-builder.h" | 7 #include "src/interpreter/bytecode-array-builder.h" |
8 #include "src/interpreter/bytecode-array-iterator.h" | 8 #include "src/interpreter/bytecode-array-iterator.h" |
9 #include "src/interpreter/bytecode-label.h" | 9 #include "src/interpreter/bytecode-label.h" |
10 #include "src/interpreter/bytecode-register-allocator.h" | 10 #include "src/interpreter/bytecode-register-allocator.h" |
(...skipping 16 matching lines...) Expand all Loading... |
27 Factory* factory = isolate()->factory(); | 27 Factory* factory = isolate()->factory(); |
28 | 28 |
29 CHECK_EQ(builder.locals_count(), 131); | 29 CHECK_EQ(builder.locals_count(), 131); |
30 CHECK_EQ(builder.context_count(), 1); | 30 CHECK_EQ(builder.context_count(), 1); |
31 CHECK_EQ(builder.fixed_register_count(), 132); | 31 CHECK_EQ(builder.fixed_register_count(), 132); |
32 | 32 |
33 Register reg(0); | 33 Register reg(0); |
34 Register other(reg.index() + 1); | 34 Register other(reg.index() + 1); |
35 Register wide(128); | 35 Register wide(128); |
36 RegisterList reg_list; | 36 RegisterList reg_list; |
| 37 RegisterList pair(0, 2), triple(0, 3); |
37 | 38 |
38 // Emit argument creation operations. | 39 // Emit argument creation operations. |
39 builder.CreateArguments(CreateArgumentsType::kMappedArguments) | 40 builder.CreateArguments(CreateArgumentsType::kMappedArguments) |
40 .CreateArguments(CreateArgumentsType::kUnmappedArguments) | 41 .CreateArguments(CreateArgumentsType::kUnmappedArguments) |
41 .CreateArguments(CreateArgumentsType::kRestParameter); | 42 .CreateArguments(CreateArgumentsType::kRestParameter); |
42 | 43 |
43 // Emit constant loads. | 44 // Emit constant loads. |
44 builder.LoadLiteral(Smi::FromInt(0)) | 45 builder.LoadLiteral(Smi::FromInt(0)) |
45 .StoreAccumulatorInRegister(reg) | 46 .StoreAccumulatorInRegister(reg) |
46 .LoadLiteral(Smi::FromInt(8)) | 47 .LoadLiteral(Smi::FromInt(8)) |
(...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
120 | 121 |
121 // Emit literal creation operations. | 122 // Emit literal creation operations. |
122 builder.CreateRegExpLiteral(factory->NewStringFromStaticChars("a"), 0, 0) | 123 builder.CreateRegExpLiteral(factory->NewStringFromStaticChars("a"), 0, 0) |
123 .CreateArrayLiteral(factory->NewFixedArray(1), 0, 0) | 124 .CreateArrayLiteral(factory->NewFixedArray(1), 0, 0) |
124 .CreateObjectLiteral(factory->NewFixedArray(1), 0, 0, reg); | 125 .CreateObjectLiteral(factory->NewFixedArray(1), 0, 0, reg); |
125 | 126 |
126 // Call operations. | 127 // Call operations. |
127 builder.Call(reg, reg_list, 1) | 128 builder.Call(reg, reg_list, 1) |
128 .Call(reg, reg_list, 1, TailCallMode::kAllow) | 129 .Call(reg, reg_list, 1, TailCallMode::kAllow) |
129 .CallRuntime(Runtime::kIsArray, reg) | 130 .CallRuntime(Runtime::kIsArray, reg) |
130 .CallRuntimeForPair(Runtime::kLoadLookupSlotForCall, reg_list, other) | 131 .CallRuntimeForPair(Runtime::kLoadLookupSlotForCall, reg_list, pair) |
131 .CallJSRuntime(Context::SPREAD_ITERABLE_INDEX, reg_list); | 132 .CallJSRuntime(Context::SPREAD_ITERABLE_INDEX, reg_list); |
132 | 133 |
133 // Emit binary operator invocations. | 134 // Emit binary operator invocations. |
134 builder.BinaryOperation(Token::Value::ADD, reg, 1) | 135 builder.BinaryOperation(Token::Value::ADD, reg, 1) |
135 .BinaryOperation(Token::Value::SUB, reg, 2) | 136 .BinaryOperation(Token::Value::SUB, reg, 2) |
136 .BinaryOperation(Token::Value::MUL, reg, 3) | 137 .BinaryOperation(Token::Value::MUL, reg, 3) |
137 .BinaryOperation(Token::Value::DIV, reg, 4) | 138 .BinaryOperation(Token::Value::DIV, reg, 4) |
138 .BinaryOperation(Token::Value::MOD, reg, 5); | 139 .BinaryOperation(Token::Value::MOD, reg, 5); |
139 | 140 |
140 // Emit bitwise operator invocations | 141 // Emit bitwise operator invocations |
(...skipping 113 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
254 // Emit stack check bytecode. | 255 // Emit stack check bytecode. |
255 builder.StackCheck(0); | 256 builder.StackCheck(0); |
256 | 257 |
257 // Emit throw and re-throw in it's own basic block so that the rest of the | 258 // Emit throw and re-throw in it's own basic block so that the rest of the |
258 // code isn't omitted due to being dead. | 259 // code isn't omitted due to being dead. |
259 BytecodeLabel after_throw; | 260 BytecodeLabel after_throw; |
260 builder.Throw().Bind(&after_throw); | 261 builder.Throw().Bind(&after_throw); |
261 BytecodeLabel after_rethrow; | 262 BytecodeLabel after_rethrow; |
262 builder.ReThrow().Bind(&after_rethrow); | 263 builder.ReThrow().Bind(&after_rethrow); |
263 | 264 |
264 builder.ForInPrepare(reg, reg) | 265 builder.ForInPrepare(reg, triple) |
265 .ForInContinue(reg, reg) | 266 .ForInContinue(reg, reg) |
266 .ForInNext(reg, reg, reg, 1) | 267 .ForInNext(reg, reg, pair, 1) |
267 .ForInStep(reg); | |
268 builder.ForInPrepare(reg, wide) | |
269 .ForInContinue(reg, other) | |
270 .ForInNext(wide, wide, wide, 1024) | |
271 .ForInStep(reg); | 268 .ForInStep(reg); |
272 | 269 |
273 // Wide constant pool loads | 270 // Wide constant pool loads |
274 for (int i = 0; i < 256; i++) { | 271 for (int i = 0; i < 256; i++) { |
275 // Emit junk in constant pool to force wide constant pool index. | 272 // Emit junk in constant pool to force wide constant pool index. |
276 builder.LoadLiteral(factory->NewNumber(2.5321 + i)); | 273 builder.LoadLiteral(factory->NewNumber(2.5321 + i)); |
277 } | 274 } |
278 builder.LoadLiteral(Smi::FromInt(20000000)); | 275 builder.LoadLiteral(Smi::FromInt(20000000)); |
279 Handle<String> wide_name = factory->NewStringFromStaticChars("var_wide_name"); | 276 Handle<String> wide_name = factory->NewStringFromStaticChars("var_wide_name"); |
280 | 277 |
(...skipping 451 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
732 iterator.Advance(); | 729 iterator.Advance(); |
733 } | 730 } |
734 CHECK_EQ(iterator.current_bytecode(), Bytecode::kReturn); | 731 CHECK_EQ(iterator.current_bytecode(), Bytecode::kReturn); |
735 iterator.Advance(); | 732 iterator.Advance(); |
736 CHECK(iterator.done()); | 733 CHECK(iterator.done()); |
737 } | 734 } |
738 | 735 |
739 } // namespace interpreter | 736 } // namespace interpreter |
740 } // namespace internal | 737 } // namespace internal |
741 } // namespace v8 | 738 } // namespace v8 |
OLD | NEW |