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 155 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
166 | 166 |
167 | 167 |
168 TEST_F(BytecodeArrayBuilderTest, FrameSizesLookGood) { | 168 TEST_F(BytecodeArrayBuilderTest, FrameSizesLookGood) { |
169 for (int locals = 0; locals < 5; locals++) { | 169 for (int locals = 0; locals < 5; locals++) { |
170 for (int contexts = 0; contexts < 4; contexts++) { | 170 for (int contexts = 0; contexts < 4; contexts++) { |
171 for (int temps = 0; temps < 3; temps++) { | 171 for (int temps = 0; temps < 3; temps++) { |
172 BytecodeArrayBuilder builder(isolate(), zone()); | 172 BytecodeArrayBuilder builder(isolate(), zone()); |
173 builder.set_parameter_count(0); | 173 builder.set_parameter_count(0); |
174 builder.set_locals_count(locals); | 174 builder.set_locals_count(locals); |
175 builder.set_context_count(contexts); | 175 builder.set_context_count(contexts); |
176 builder.Return(); | |
177 | 176 |
178 TemporaryRegisterScope temporaries(&builder); | 177 TemporaryRegisterScope temporaries(&builder); |
179 for (int i = 0; i < temps; i++) { | 178 for (int i = 0; i < temps; i++) { |
180 temporaries.NewRegister(); | 179 builder.StoreAccumulatorInRegister(temporaries.NewRegister()); |
181 } | 180 } |
| 181 builder.Return(); |
182 | 182 |
183 Handle<BytecodeArray> the_array = builder.ToBytecodeArray(); | 183 Handle<BytecodeArray> the_array = builder.ToBytecodeArray(); |
184 int total_registers = locals + contexts + temps; | 184 int total_registers = locals + contexts + temps; |
185 CHECK_EQ(the_array->frame_size(), total_registers * kPointerSize); | 185 CHECK_EQ(the_array->frame_size(), total_registers * kPointerSize); |
186 } | 186 } |
187 } | 187 } |
188 } | 188 } |
189 } | 189 } |
190 | 190 |
191 | 191 |
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
235 builder.set_parameter_count(10); | 235 builder.set_parameter_count(10); |
236 builder.set_locals_count(0); | 236 builder.set_locals_count(0); |
237 builder.set_context_count(0); | 237 builder.set_context_count(0); |
238 | 238 |
239 Register param0(builder.Parameter(0)); | 239 Register param0(builder.Parameter(0)); |
240 Register param9(builder.Parameter(9)); | 240 Register param9(builder.Parameter(9)); |
241 CHECK_EQ(param9.index() - param0.index(), 9); | 241 CHECK_EQ(param9.index() - param0.index(), 9); |
242 } | 242 } |
243 | 243 |
244 | 244 |
| 245 TEST_F(BytecodeArrayBuilderTest, RegisterType) { |
| 246 BytecodeArrayBuilder builder(isolate(), zone()); |
| 247 builder.set_parameter_count(10); |
| 248 builder.set_locals_count(3); |
| 249 builder.set_context_count(0); |
| 250 |
| 251 TemporaryRegisterScope temporary_register_scope(&builder); |
| 252 Register temp0 = temporary_register_scope.NewRegister(); |
| 253 Register param0(builder.Parameter(0)); |
| 254 Register param9(builder.Parameter(9)); |
| 255 Register temp1 = temporary_register_scope.NewRegister(); |
| 256 Register reg0(0); |
| 257 Register reg1(1); |
| 258 Register reg2(2); |
| 259 Register temp2 = temporary_register_scope.NewRegister(); |
| 260 CHECK_EQ(builder.RegisterIsParameterOrLocal(temp0), false); |
| 261 CHECK_EQ(builder.RegisterIsParameterOrLocal(temp1), false); |
| 262 CHECK_EQ(builder.RegisterIsParameterOrLocal(temp2), false); |
| 263 CHECK_EQ(builder.RegisterIsParameterOrLocal(param0), true); |
| 264 CHECK_EQ(builder.RegisterIsParameterOrLocal(param9), true); |
| 265 CHECK_EQ(builder.RegisterIsParameterOrLocal(reg0), true); |
| 266 CHECK_EQ(builder.RegisterIsParameterOrLocal(reg1), true); |
| 267 CHECK_EQ(builder.RegisterIsParameterOrLocal(reg2), true); |
| 268 } |
| 269 |
| 270 |
245 TEST_F(BytecodeArrayBuilderTest, Constants) { | 271 TEST_F(BytecodeArrayBuilderTest, Constants) { |
246 BytecodeArrayBuilder builder(isolate(), zone()); | 272 BytecodeArrayBuilder builder(isolate(), zone()); |
247 builder.set_parameter_count(0); | 273 builder.set_parameter_count(0); |
248 builder.set_locals_count(0); | 274 builder.set_locals_count(0); |
249 builder.set_context_count(0); | 275 builder.set_context_count(0); |
250 | 276 |
251 Factory* factory = isolate()->factory(); | 277 Factory* factory = isolate()->factory(); |
252 Handle<HeapObject> heap_num_1 = factory->NewHeapNumber(3.14); | 278 Handle<HeapObject> heap_num_1 = factory->NewHeapNumber(3.14); |
253 Handle<HeapObject> heap_num_2 = factory->NewHeapNumber(5.2); | 279 Handle<HeapObject> heap_num_2 = factory->NewHeapNumber(5.2); |
254 Handle<Object> large_smi(Smi::FromInt(0x12345678), isolate()); | 280 Handle<Object> large_smi(Smi::FromInt(0x12345678), isolate()); |
(...skipping 241 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
496 | 522 |
497 CHECK_EQ(iterator.current_bytecode(), Bytecode::kReturn); | 523 CHECK_EQ(iterator.current_bytecode(), Bytecode::kReturn); |
498 iterator.Advance(); | 524 iterator.Advance(); |
499 CHECK(iterator.done()); | 525 CHECK(iterator.done()); |
500 } | 526 } |
501 | 527 |
502 | 528 |
503 } // namespace interpreter | 529 } // namespace interpreter |
504 } // namespace internal | 530 } // namespace internal |
505 } // namespace v8 | 531 } // namespace v8 |
OLD | NEW |