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 #include "src/interpreter/bytecode-array-builder.h" | 5 #include "src/interpreter/bytecode-array-builder.h" |
6 | 6 |
7 namespace v8 { | 7 namespace v8 { |
8 namespace internal { | 8 namespace internal { |
9 namespace interpreter { | 9 namespace interpreter { |
10 | 10 |
(...skipping 434 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
445 | 445 |
446 | 446 |
447 BytecodeArrayBuilder& BytecodeArrayBuilder::LoadLookupSlot( | 447 BytecodeArrayBuilder& BytecodeArrayBuilder::LoadLookupSlot( |
448 const Handle<String> name, TypeofMode typeof_mode) { | 448 const Handle<String> name, TypeofMode typeof_mode) { |
449 Bytecode bytecode = (typeof_mode == INSIDE_TYPEOF) | 449 Bytecode bytecode = (typeof_mode == INSIDE_TYPEOF) |
450 ? Bytecode::kLdaLookupSlotInsideTypeof | 450 ? Bytecode::kLdaLookupSlotInsideTypeof |
451 : Bytecode::kLdaLookupSlot; | 451 : Bytecode::kLdaLookupSlot; |
452 size_t name_index = GetConstantPoolEntry(name); | 452 size_t name_index = GetConstantPoolEntry(name); |
453 if (FitsInIdx8Operand(name_index)) { | 453 if (FitsInIdx8Operand(name_index)) { |
454 Output(bytecode, static_cast<uint8_t>(name_index)); | 454 Output(bytecode, static_cast<uint8_t>(name_index)); |
| 455 } else if (FitsInIdx16Operand(name_index)) { |
| 456 Output(BytecodeForWideOperands(bytecode), |
| 457 static_cast<uint16_t>(name_index)); |
455 } else { | 458 } else { |
456 UNIMPLEMENTED(); | 459 UNIMPLEMENTED(); |
457 } | 460 } |
458 return *this; | 461 return *this; |
459 } | 462 } |
460 | 463 |
461 | 464 |
462 BytecodeArrayBuilder& BytecodeArrayBuilder::StoreLookupSlot( | 465 BytecodeArrayBuilder& BytecodeArrayBuilder::StoreLookupSlot( |
463 const Handle<String> name, LanguageMode language_mode) { | 466 const Handle<String> name, LanguageMode language_mode) { |
464 Bytecode bytecode = BytecodeForStoreLookupSlot(language_mode); | 467 Bytecode bytecode = BytecodeForStoreLookupSlot(language_mode); |
465 size_t name_index = GetConstantPoolEntry(name); | 468 size_t name_index = GetConstantPoolEntry(name); |
466 if (FitsInIdx8Operand(name_index)) { | 469 if (FitsInIdx8Operand(name_index)) { |
467 Output(bytecode, static_cast<uint8_t>(name_index)); | 470 Output(bytecode, static_cast<uint8_t>(name_index)); |
| 471 } else if (FitsInIdx16Operand(name_index)) { |
| 472 Output(BytecodeForWideOperands(bytecode), |
| 473 static_cast<uint16_t>(name_index)); |
468 } else { | 474 } else { |
469 UNIMPLEMENTED(); | 475 UNIMPLEMENTED(); |
470 } | 476 } |
471 return *this; | 477 return *this; |
472 } | 478 } |
473 | 479 |
474 | 480 |
475 BytecodeArrayBuilder& BytecodeArrayBuilder::LoadNamedProperty( | 481 BytecodeArrayBuilder& BytecodeArrayBuilder::LoadNamedProperty( |
476 Register object, const Handle<String> name, int feedback_slot, | 482 Register object, const Handle<String> name, int feedback_slot, |
477 LanguageMode language_mode) { | 483 LanguageMode language_mode) { |
(...skipping 810 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1288 case Bytecode::kLdaGlobalStrict: | 1294 case Bytecode::kLdaGlobalStrict: |
1289 return Bytecode::kLdaGlobalStrictWide; | 1295 return Bytecode::kLdaGlobalStrictWide; |
1290 case Bytecode::kLdaGlobalInsideTypeofSloppy: | 1296 case Bytecode::kLdaGlobalInsideTypeofSloppy: |
1291 return Bytecode::kLdaGlobalInsideTypeofSloppyWide; | 1297 return Bytecode::kLdaGlobalInsideTypeofSloppyWide; |
1292 case Bytecode::kLdaGlobalInsideTypeofStrict: | 1298 case Bytecode::kLdaGlobalInsideTypeofStrict: |
1293 return Bytecode::kLdaGlobalInsideTypeofStrictWide; | 1299 return Bytecode::kLdaGlobalInsideTypeofStrictWide; |
1294 case Bytecode::kStaGlobalSloppy: | 1300 case Bytecode::kStaGlobalSloppy: |
1295 return Bytecode::kStaGlobalSloppyWide; | 1301 return Bytecode::kStaGlobalSloppyWide; |
1296 case Bytecode::kStaGlobalStrict: | 1302 case Bytecode::kStaGlobalStrict: |
1297 return Bytecode::kStaGlobalStrictWide; | 1303 return Bytecode::kStaGlobalStrictWide; |
| 1304 case Bytecode::kLdaLookupSlot: |
| 1305 return Bytecode::kLdaLookupSlotWide; |
| 1306 case Bytecode::kLdaLookupSlotInsideTypeof: |
| 1307 return Bytecode::kLdaLookupSlotInsideTypeofWide; |
| 1308 case Bytecode::kStaLookupSlotStrict: |
| 1309 return Bytecode::kStaLookupSlotStrictWide; |
| 1310 case Bytecode::kStaLookupSlotSloppy: |
| 1311 return Bytecode::kStaLookupSlotSloppyWide; |
1298 default: | 1312 default: |
1299 UNREACHABLE(); | 1313 UNREACHABLE(); |
1300 return static_cast<Bytecode>(-1); | 1314 return static_cast<Bytecode>(-1); |
1301 } | 1315 } |
1302 } | 1316 } |
1303 | 1317 |
1304 | 1318 |
1305 // static | 1319 // static |
1306 Bytecode BytecodeArrayBuilder::BytecodeForLoadIC(LanguageMode language_mode) { | 1320 Bytecode BytecodeArrayBuilder::BytecodeForLoadIC(LanguageMode language_mode) { |
1307 switch (language_mode) { | 1321 switch (language_mode) { |
(...skipping 235 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1543 DCHECK_GT(next_consecutive_count_, 0); | 1557 DCHECK_GT(next_consecutive_count_, 0); |
1544 builder_->BorrowConsecutiveTemporaryRegister(next_consecutive_register_); | 1558 builder_->BorrowConsecutiveTemporaryRegister(next_consecutive_register_); |
1545 allocated_.push_back(next_consecutive_register_); | 1559 allocated_.push_back(next_consecutive_register_); |
1546 next_consecutive_count_--; | 1560 next_consecutive_count_--; |
1547 return Register(next_consecutive_register_++); | 1561 return Register(next_consecutive_register_++); |
1548 } | 1562 } |
1549 | 1563 |
1550 } // namespace interpreter | 1564 } // namespace interpreter |
1551 } // namespace internal | 1565 } // namespace internal |
1552 } // namespace v8 | 1566 } // namespace v8 |
OLD | NEW |