Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(672)

Side by Side Diff: src/interpreter/bytecode-array-builder.cc

Issue 1676883002: [runtime] Optimize and unify rest parameters. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Created 4 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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 571 matching lines...) Expand 10 before | Expand all | Expand 10 after
582 BytecodeArrayBuilder& BytecodeArrayBuilder::CreateArguments( 582 BytecodeArrayBuilder& BytecodeArrayBuilder::CreateArguments(
583 CreateArgumentsType type) { 583 CreateArgumentsType type) {
584 // TODO(rmcilroy): Consider passing the type as a bytecode operand rather 584 // TODO(rmcilroy): Consider passing the type as a bytecode operand rather
585 // than having two different bytecodes once we have better support for 585 // than having two different bytecodes once we have better support for
586 // branches in the InterpreterAssembler. 586 // branches in the InterpreterAssembler.
587 Bytecode bytecode = BytecodeForCreateArguments(type); 587 Bytecode bytecode = BytecodeForCreateArguments(type);
588 Output(bytecode); 588 Output(bytecode);
589 return *this; 589 return *this;
590 } 590 }
591 591
592 BytecodeArrayBuilder& BytecodeArrayBuilder::CreateRestArguments(int index) {
593 size_t index_entry =
594 GetConstantPoolEntry(Handle<Object>(Smi::FromInt(index), isolate_));
595 // This will always be the first entry in the constant pool, since the rest
596 // arguments object is created at the start of the function just after
597 // creating the arguments object.
598 CHECK(FitsInIdx8Operand(index_entry));
599 Output(Bytecode::kCreateRestArguments, static_cast<uint8_t>(index_entry));
600 return *this;
601 }
602 592
603 BytecodeArrayBuilder& BytecodeArrayBuilder::CreateRegExpLiteral( 593 BytecodeArrayBuilder& BytecodeArrayBuilder::CreateRegExpLiteral(
604 Handle<String> pattern, int literal_index, int flags) { 594 Handle<String> pattern, int literal_index, int flags) {
605 DCHECK(FitsInImm8Operand(flags)); // Flags should fit in 8 bits. 595 DCHECK(FitsInImm8Operand(flags)); // Flags should fit in 8 bits.
606 size_t pattern_entry = GetConstantPoolEntry(pattern); 596 size_t pattern_entry = GetConstantPoolEntry(pattern);
607 if (FitsInIdx8Operand(literal_index) && FitsInIdx8Operand(pattern_entry)) { 597 if (FitsInIdx8Operand(literal_index) && FitsInIdx8Operand(pattern_entry)) {
608 Output(Bytecode::kCreateRegExpLiteral, static_cast<uint8_t>(pattern_entry), 598 Output(Bytecode::kCreateRegExpLiteral, static_cast<uint8_t>(pattern_entry),
609 static_cast<uint8_t>(literal_index), static_cast<uint8_t>(flags)); 599 static_cast<uint8_t>(literal_index), static_cast<uint8_t>(flags));
610 } else if (FitsInIdx16Operand(literal_index) && 600 } else if (FitsInIdx16Operand(literal_index) &&
611 FitsInIdx16Operand(pattern_entry)) { 601 FitsInIdx16Operand(pattern_entry)) {
(...skipping 998 matching lines...) Expand 10 before | Expand all | Expand 10 after
1610 case STRICT: 1600 case STRICT:
1611 return Bytecode::kStaLookupSlotStrict; 1601 return Bytecode::kStaLookupSlotStrict;
1612 case STRONG: 1602 case STRONG:
1613 UNIMPLEMENTED(); 1603 UNIMPLEMENTED();
1614 default: 1604 default:
1615 UNREACHABLE(); 1605 UNREACHABLE();
1616 } 1606 }
1617 return static_cast<Bytecode>(-1); 1607 return static_cast<Bytecode>(-1);
1618 } 1608 }
1619 1609
1620
1621 // static 1610 // static
1622 Bytecode BytecodeArrayBuilder::BytecodeForCreateArguments( 1611 Bytecode BytecodeArrayBuilder::BytecodeForCreateArguments(
1623 CreateArgumentsType type) { 1612 CreateArgumentsType type) {
1624 switch (type) { 1613 switch (type) {
1625 case CreateArgumentsType::kMappedArguments: 1614 case CreateArgumentsType::kMappedArguments:
1626 return Bytecode::kCreateMappedArguments; 1615 return Bytecode::kCreateMappedArguments;
1627 case CreateArgumentsType::kUnmappedArguments: 1616 case CreateArgumentsType::kUnmappedArguments:
1628 return Bytecode::kCreateUnmappedArguments; 1617 return Bytecode::kCreateUnmappedArguments;
1629 default: 1618 case CreateArgumentsType::kRestParameter:
1630 UNREACHABLE(); 1619 return Bytecode::kCreateRestParameter;
1631 } 1620 }
1621 UNREACHABLE();
1632 return static_cast<Bytecode>(-1); 1622 return static_cast<Bytecode>(-1);
1633 } 1623 }
1634 1624
1635 1625
1636 // static 1626 // static
1637 Bytecode BytecodeArrayBuilder::BytecodeForDelete(LanguageMode language_mode) { 1627 Bytecode BytecodeArrayBuilder::BytecodeForDelete(LanguageMode language_mode) {
1638 switch (language_mode) { 1628 switch (language_mode) {
1639 case SLOPPY: 1629 case SLOPPY:
1640 return Bytecode::kDeletePropertySloppy; 1630 return Bytecode::kDeletePropertySloppy;
1641 case STRICT: 1631 case STRICT:
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after
1696 } 1686 }
1697 1687
1698 // static 1688 // static
1699 bool BytecodeArrayBuilder::FitsInReg16OperandUntranslated(Register value) { 1689 bool BytecodeArrayBuilder::FitsInReg16OperandUntranslated(Register value) {
1700 return value.is_short_operand(); 1690 return value.is_short_operand();
1701 } 1691 }
1702 1692
1703 } // namespace interpreter 1693 } // namespace interpreter
1704 } // namespace internal 1694 } // namespace internal
1705 } // namespace v8 1695 } // namespace v8
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698