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 "test/unittests/test-utils.h" | 9 #include "test/unittests/test-utils.h" |
10 | 10 |
(...skipping 88 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
99 .CompareOperation(Token::Value::IN, reg, Strength::WEAK); | 99 .CompareOperation(Token::Value::IN, reg, Strength::WEAK); |
100 | 100 |
101 // Emit cast operator invocations. | 101 // Emit cast operator invocations. |
102 builder.LoadNull().CastAccumulatorToBoolean(); | 102 builder.LoadNull().CastAccumulatorToBoolean(); |
103 | 103 |
104 // Emit control flow. Return must be the last instruction. | 104 // Emit control flow. Return must be the last instruction. |
105 BytecodeLabel start; | 105 BytecodeLabel start; |
106 builder.Bind(&start); | 106 builder.Bind(&start); |
107 // Short jumps with Imm8 operands | 107 // Short jumps with Imm8 operands |
108 builder.Jump(&start).JumpIfTrue(&start).JumpIfFalse(&start); | 108 builder.Jump(&start).JumpIfTrue(&start).JumpIfFalse(&start); |
109 builder.JumpIfToBooleanTrue(&start).JumpIfToBooleanFalse(&start); | |
rmcilroy
2015/10/13 15:43:24
nit - you can avoid the builder. and just make thi
mythria
2015/10/14 13:33:42
Done.
| |
109 // Insert dummy ops to force longer jumps | 110 // Insert dummy ops to force longer jumps |
110 for (int i = 0; i < 128; i++) { | 111 for (int i = 0; i < 128; i++) { |
111 builder.LoadTrue(); | 112 builder.LoadTrue(); |
112 } | 113 } |
113 // Longer jumps requiring Constant operand | 114 // Longer jumps requiring Constant operand |
114 builder.Jump(&start).JumpIfTrue(&start).JumpIfFalse(&start); | 115 builder.Jump(&start).JumpIfTrue(&start).JumpIfFalse(&start); |
116 builder.JumpIfToBooleanTrue(&start).JumpIfToBooleanFalse(&start); | |
115 builder.Return(); | 117 builder.Return(); |
116 | 118 |
117 // Generate BytecodeArray. | 119 // Generate BytecodeArray. |
118 Handle<BytecodeArray> the_array = builder.ToBytecodeArray(); | 120 Handle<BytecodeArray> the_array = builder.ToBytecodeArray(); |
119 CHECK_EQ(the_array->frame_size(), builder.locals_count() * kPointerSize); | 121 CHECK_EQ(the_array->frame_size(), builder.locals_count() * kPointerSize); |
120 | 122 |
121 // Build scorecard of bytecodes encountered in the BytecodeArray. | 123 // Build scorecard of bytecodes encountered in the BytecodeArray. |
122 std::vector<int> scorecard(Bytecodes::ToByte(Bytecode::kLast) + 1); | 124 std::vector<int> scorecard(Bytecodes::ToByte(Bytecode::kLast) + 1); |
123 Bytecode final_bytecode = Bytecode::kLdaZero; | 125 Bytecode final_bytecode = Bytecode::kLdaZero; |
124 int i = 0; | 126 int i = 0; |
(...skipping 336 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
461 | 463 |
462 CHECK_EQ(iterator.current_bytecode(), Bytecode::kReturn); | 464 CHECK_EQ(iterator.current_bytecode(), Bytecode::kReturn); |
463 iterator.Advance(); | 465 iterator.Advance(); |
464 CHECK(iterator.done()); | 466 CHECK(iterator.done()); |
465 } | 467 } |
466 | 468 |
467 | 469 |
468 } // namespace interpreter | 470 } // namespace interpreter |
469 } // namespace internal | 471 } // namespace internal |
470 } // namespace v8 | 472 } // namespace v8 |
OLD | NEW |