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

Side by Side Diff: src/code-stubs.h

Issue 14576005: Adapt hydrogen-based Array constructor to also support InternalArray and function call (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: Refactoring and restored flag for now Created 7 years, 7 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 | Annotate | Revision Log
OLDNEW
1 // Copyright 2012 the V8 project authors. All rights reserved. 1 // Copyright 2012 the V8 project authors. All rights reserved.
2 // Redistribution and use in source and binary forms, with or without 2 // Redistribution and use in source and binary forms, with or without
3 // modification, are permitted provided that the following conditions are 3 // modification, are permitted provided that the following conditions are
4 // met: 4 // met:
5 // 5 //
6 // * Redistributions of source code must retain the above copyright 6 // * Redistributions of source code must retain the above copyright
7 // notice, this list of conditions and the following disclaimer. 7 // notice, this list of conditions and the following disclaimer.
8 // * Redistributions in binary form must reproduce the above 8 // * Redistributions in binary form must reproduce the above
9 // copyright notice, this list of conditions and the following 9 // copyright notice, this list of conditions and the following
10 // disclaimer in the documentation and/or other materials provided 10 // disclaimer in the documentation and/or other materials provided
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after
70 V(ToNumber) \ 70 V(ToNumber) \
71 V(ArgumentsAccess) \ 71 V(ArgumentsAccess) \
72 V(RegExpConstructResult) \ 72 V(RegExpConstructResult) \
73 V(NumberToString) \ 73 V(NumberToString) \
74 V(CEntry) \ 74 V(CEntry) \
75 V(JSEntry) \ 75 V(JSEntry) \
76 V(KeyedLoadElement) \ 76 V(KeyedLoadElement) \
77 V(ArrayNoArgumentConstructor) \ 77 V(ArrayNoArgumentConstructor) \
78 V(ArraySingleArgumentConstructor) \ 78 V(ArraySingleArgumentConstructor) \
79 V(ArrayNArgumentsConstructor) \ 79 V(ArrayNArgumentsConstructor) \
80 V(InternalArrayNoArgumentConstructor) \
81 V(InternalArraySingleArgumentConstructor) \
82 V(InternalArrayNArgumentsConstructor) \
80 V(KeyedStoreElement) \ 83 V(KeyedStoreElement) \
81 V(DebuggerStatement) \ 84 V(DebuggerStatement) \
82 V(NameDictionaryLookup) \ 85 V(NameDictionaryLookup) \
83 V(ElementsTransitionAndStore) \ 86 V(ElementsTransitionAndStore) \
84 V(TransitionElementsKind) \ 87 V(TransitionElementsKind) \
85 V(StoreArrayLiteralElement) \ 88 V(StoreArrayLiteralElement) \
86 V(StubFailureTrampoline) \ 89 V(StubFailureTrampoline) \
87 V(ArrayConstructor) \ 90 V(ArrayConstructor) \
91 V(InternalArrayConstructor) \
88 V(ProfileEntryHook) \ 92 V(ProfileEntryHook) \
89 /* IC Handler stubs */ \ 93 /* IC Handler stubs */ \
90 V(LoadField) \ 94 V(LoadField) \
91 V(KeyedLoadField) 95 V(KeyedLoadField)
92 96
93 // List of code stubs only used on ARM platforms. 97 // List of code stubs only used on ARM platforms.
94 #ifdef V8_TARGET_ARCH_ARM 98 #ifdef V8_TARGET_ARCH_ARM
95 #define CODE_STUB_LIST_ARM(V) \ 99 #define CODE_STUB_LIST_ARM(V) \
96 V(GetProperty) \ 100 V(GetProperty) \
97 V(SetProperty) \ 101 V(SetProperty) \
(...skipping 550 matching lines...) Expand 10 before | Expand all | Expand 10 after
648 void Generate(MacroAssembler* masm); 652 void Generate(MacroAssembler* masm);
649 653
650 private: 654 private:
651 virtual CodeStub::Major MajorKey() { return ArrayConstructor; } 655 virtual CodeStub::Major MajorKey() { return ArrayConstructor; }
652 virtual int MinorKey() { return argument_count_; } 656 virtual int MinorKey() { return argument_count_; }
653 657
654 ArgumentCountKey argument_count_; 658 ArgumentCountKey argument_count_;
655 }; 659 };
656 660
657 661
662 class InternalArrayConstructorStub: public PlatformCodeStub {
663 public:
664 explicit InternalArrayConstructorStub(Isolate* isolate);
665
666 void Generate(MacroAssembler* masm);
667
668 private:
669 virtual CodeStub::Major MajorKey() { return InternalArrayConstructor; }
670 virtual int MinorKey() { return 0; }
671
672 void GenerateCase(MacroAssembler* masm, ElementsKind kind);
673 };
674
675
658 class MathPowStub: public PlatformCodeStub { 676 class MathPowStub: public PlatformCodeStub {
659 public: 677 public:
660 enum ExponentType { INTEGER, DOUBLE, TAGGED, ON_STACK}; 678 enum ExponentType { INTEGER, DOUBLE, TAGGED, ON_STACK};
661 679
662 explicit MathPowStub(ExponentType exponent_type) 680 explicit MathPowStub(ExponentType exponent_type)
663 : exponent_type_(exponent_type) { } 681 : exponent_type_(exponent_type) { }
664 virtual void Generate(MacroAssembler* masm); 682 virtual void Generate(MacroAssembler* masm);
665 683
666 private: 684 private:
667 virtual CodeStub::Major MajorKey() { return MathPow; } 685 virtual CodeStub::Major MajorKey() { return MathPow; }
(...skipping 969 matching lines...) Expand 10 before | Expand all | Expand 10 after
1637 1655
1638 Major MajorKey() { return TransitionElementsKind; } 1656 Major MajorKey() { return TransitionElementsKind; }
1639 int NotMissMinorKey() { return bit_field_; } 1657 int NotMissMinorKey() { return bit_field_; }
1640 1658
1641 DISALLOW_COPY_AND_ASSIGN(TransitionElementsKindStub); 1659 DISALLOW_COPY_AND_ASSIGN(TransitionElementsKindStub);
1642 }; 1660 };
1643 1661
1644 1662
1645 class ArrayConstructorStubBase : public HydrogenCodeStub { 1663 class ArrayConstructorStubBase : public HydrogenCodeStub {
1646 public: 1664 public:
1647 ArrayConstructorStubBase(ElementsKind kind, AllocationSiteMode mode) 1665 ArrayConstructorStubBase(
1666 ElementsKind kind,
1667 AllocationSiteMode mode)
1648 : HydrogenCodeStub(CODE_STUB_IS_NOT_MISS) { 1668 : HydrogenCodeStub(CODE_STUB_IS_NOT_MISS) {
1649 bit_field_ = ElementsKindBits::encode(kind) | 1669 bit_field_ = ElementsKindBits::encode(kind) |
1650 AllocationSiteModeBits::encode(mode == TRACK_ALLOCATION_SITE); 1670 AllocationSiteModeBits::encode(mode == TRACK_ALLOCATION_SITE);
1651 } 1671 }
1652 1672
1653 ElementsKind elements_kind() const { 1673 ElementsKind elements_kind() const {
1654 return ElementsKindBits::decode(bit_field_); 1674 return ElementsKindBits::decode(bit_field_);
1655 } 1675 }
1656 1676
1657 AllocationSiteMode mode() const { 1677 AllocationSiteMode mode() const {
1658 return AllocationSiteModeBits::decode(bit_field_) 1678 return AllocationSiteModeBits::decode(bit_field_)
1659 ? TRACK_ALLOCATION_SITE 1679 ? TRACK_ALLOCATION_SITE
1660 : DONT_TRACK_ALLOCATION_SITE; 1680 : DONT_TRACK_ALLOCATION_SITE;
1661 } 1681 }
1662 1682
1663 virtual bool IsPregenerated() { return true; } 1683 virtual bool IsPregenerated() { return true; }
1664 static void GenerateStubsAheadOfTime(Isolate* isolate); 1684 static void GenerateStubsAheadOfTime(Isolate* isolate);
1665 static void InstallDescriptors(Isolate* isolate); 1685 static void InstallDescriptors(Isolate* isolate);
1666 1686
1667 // Parameters accessed via CodeStubGraphBuilder::GetParameter() 1687 // Parameters accessed via CodeStubGraphBuilder::GetParameter()
1668 static const int kConstructor = 0; 1688 static const int kConstructor = 0;
1669 static const int kPropertyCell = 1; 1689 static const int kPropertyCell = 1;
1670 1690
1671 private: 1691 private:
1672 int NotMissMinorKey() { return bit_field_; } 1692 int NotMissMinorKey() { return bit_field_; }
1673 1693
1674 class ElementsKindBits: public BitField<ElementsKind, 0, 8> {}; 1694 class ElementsKindBits: public BitField<ElementsKind, 0, 8> {};
1675 class AllocationSiteModeBits: public BitField<bool, 8, 1> {}; 1695 class AllocationSiteModeBits: public BitField<bool, 8, 1> {};
1696
1676 uint32_t bit_field_; 1697 uint32_t bit_field_;
1677 1698
1678 DISALLOW_COPY_AND_ASSIGN(ArrayConstructorStubBase); 1699 DISALLOW_COPY_AND_ASSIGN(ArrayConstructorStubBase);
1679 }; 1700 };
1680 1701
1681 1702
1682 class ArrayNoArgumentConstructorStub : public ArrayConstructorStubBase { 1703 class ArrayNoArgumentConstructorStub : public ArrayConstructorStubBase {
1683 public: 1704 public:
1684 ArrayNoArgumentConstructorStub( 1705 ArrayNoArgumentConstructorStub(
1685 ElementsKind kind, 1706 ElementsKind kind,
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
1718 Major MajorKey() { return ArraySingleArgumentConstructor; } 1739 Major MajorKey() { return ArraySingleArgumentConstructor; }
1719 1740
1720 DISALLOW_COPY_AND_ASSIGN(ArraySingleArgumentConstructorStub); 1741 DISALLOW_COPY_AND_ASSIGN(ArraySingleArgumentConstructorStub);
1721 }; 1742 };
1722 1743
1723 1744
1724 class ArrayNArgumentsConstructorStub : public ArrayConstructorStubBase { 1745 class ArrayNArgumentsConstructorStub : public ArrayConstructorStubBase {
1725 public: 1746 public:
1726 ArrayNArgumentsConstructorStub( 1747 ArrayNArgumentsConstructorStub(
1727 ElementsKind kind, 1748 ElementsKind kind,
1728 AllocationSiteMode mode = TRACK_ALLOCATION_SITE) : 1749 AllocationSiteMode mode = TRACK_ALLOCATION_SITE)
1729 ArrayConstructorStubBase(kind, mode) { 1750 : ArrayConstructorStubBase(kind, mode) {
1730 } 1751 }
1731 1752
1732 virtual Handle<Code> GenerateCode(); 1753 virtual Handle<Code> GenerateCode();
1733 1754
1734 virtual void InitializeInterfaceDescriptor( 1755 virtual void InitializeInterfaceDescriptor(
1735 Isolate* isolate, 1756 Isolate* isolate,
1736 CodeStubInterfaceDescriptor* descriptor); 1757 CodeStubInterfaceDescriptor* descriptor);
1737 1758
1738 private: 1759 private:
1739 Major MajorKey() { return ArrayNArgumentsConstructor; } 1760 Major MajorKey() { return ArrayNArgumentsConstructor; }
1740 1761
1741 DISALLOW_COPY_AND_ASSIGN(ArrayNArgumentsConstructorStub); 1762 DISALLOW_COPY_AND_ASSIGN(ArrayNArgumentsConstructorStub);
1742 }; 1763 };
1743 1764
1744 1765
1766 class InternalArrayConstructorStubBase : public HydrogenCodeStub {
1767 public:
1768 explicit InternalArrayConstructorStubBase(ElementsKind kind)
1769 : HydrogenCodeStub(CODE_STUB_IS_NOT_MISS) {
1770 kind_ = kind;
1771 }
1772
1773 virtual bool IsPregenerated() { return true; }
1774 static void GenerateStubsAheadOfTime(Isolate* isolate);
1775 static void InstallDescriptors(Isolate* isolate);
1776
1777 // Parameters accessed via CodeStubGraphBuilder::GetParameter()
1778 static const int kConstructor = 0;
1779
1780 ElementsKind elements_kind() const { return kind_; }
1781
1782 private:
1783 int NotMissMinorKey() { return kind_; }
1784
1785 ElementsKind kind_;
1786
1787 DISALLOW_COPY_AND_ASSIGN(InternalArrayConstructorStubBase);
1788 };
1789
1790
1791 class InternalArrayNoArgumentConstructorStub : public
1792 InternalArrayConstructorStubBase {
1793 public:
1794 explicit InternalArrayNoArgumentConstructorStub(ElementsKind kind)
1795 : InternalArrayConstructorStubBase(kind) { }
1796
1797 virtual Handle<Code> GenerateCode();
1798
1799 virtual void InitializeInterfaceDescriptor(
1800 Isolate* isolate,
1801 CodeStubInterfaceDescriptor* descriptor);
1802
1803 private:
1804 Major MajorKey() { return InternalArrayNoArgumentConstructor; }
1805
1806 DISALLOW_COPY_AND_ASSIGN(InternalArrayNoArgumentConstructorStub);
1807 };
1808
1809
1810 class InternalArraySingleArgumentConstructorStub : public
1811 InternalArrayConstructorStubBase {
1812 public:
1813 explicit InternalArraySingleArgumentConstructorStub(ElementsKind kind)
1814 : InternalArrayConstructorStubBase(kind) { }
1815
1816 virtual Handle<Code> GenerateCode();
1817
1818 virtual void InitializeInterfaceDescriptor(
1819 Isolate* isolate,
1820 CodeStubInterfaceDescriptor* descriptor);
1821
1822 private:
1823 Major MajorKey() { return InternalArraySingleArgumentConstructor; }
1824
1825 DISALLOW_COPY_AND_ASSIGN(InternalArraySingleArgumentConstructorStub);
1826 };
1827
1828
1829 class InternalArrayNArgumentsConstructorStub : public
1830 InternalArrayConstructorStubBase {
1831 public:
1832 explicit InternalArrayNArgumentsConstructorStub(ElementsKind kind)
1833 : InternalArrayConstructorStubBase(kind) { }
1834
1835 virtual Handle<Code> GenerateCode();
1836
1837 virtual void InitializeInterfaceDescriptor(
1838 Isolate* isolate,
1839 CodeStubInterfaceDescriptor* descriptor);
1840
1841 private:
1842 Major MajorKey() { return InternalArrayNArgumentsConstructor; }
1843
1844 DISALLOW_COPY_AND_ASSIGN(InternalArrayNArgumentsConstructorStub);
1845 };
1846
1847
1745 class KeyedStoreElementStub : public PlatformCodeStub { 1848 class KeyedStoreElementStub : public PlatformCodeStub {
1746 public: 1849 public:
1747 KeyedStoreElementStub(bool is_js_array, 1850 KeyedStoreElementStub(bool is_js_array,
1748 ElementsKind elements_kind, 1851 ElementsKind elements_kind,
1749 KeyedAccessStoreMode store_mode) 1852 KeyedAccessStoreMode store_mode)
1750 : is_js_array_(is_js_array), 1853 : is_js_array_(is_js_array),
1751 elements_kind_(elements_kind), 1854 elements_kind_(elements_kind),
1752 store_mode_(store_mode), 1855 store_mode_(store_mode),
1753 fp_registers_(CanUseFPRegisters()) { } 1856 fp_registers_(CanUseFPRegisters()) { }
1754 1857
(...skipping 209 matching lines...) Expand 10 before | Expand all | Expand 10 after
1964 2067
1965 // The current function entry hook. 2068 // The current function entry hook.
1966 static FunctionEntryHook entry_hook_; 2069 static FunctionEntryHook entry_hook_;
1967 2070
1968 DISALLOW_COPY_AND_ASSIGN(ProfileEntryHookStub); 2071 DISALLOW_COPY_AND_ASSIGN(ProfileEntryHookStub);
1969 }; 2072 };
1970 2073
1971 } } // namespace v8::internal 2074 } } // namespace v8::internal
1972 2075
1973 #endif // V8_CODE_STUBS_H_ 2076 #endif // V8_CODE_STUBS_H_
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698