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

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

Issue 2397573004: [stubs] Reduce number of StoreTransitionStub instances. (Closed)
Patch Set: Cleanup Created 4 years, 2 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
« no previous file with comments | « src/code-stub-assembler.cc ('k') | src/code-stubs.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2012 the V8 project authors. All rights reserved. 1 // Copyright 2012 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 #ifndef V8_CODE_STUBS_H_ 5 #ifndef V8_CODE_STUBS_H_
6 #define V8_CODE_STUBS_H_ 6 #define V8_CODE_STUBS_H_
7 7
8 #include "src/allocation.h" 8 #include "src/allocation.h"
9 #include "src/assembler.h" 9 #include "src/assembler.h"
10 #include "src/code-stub-assembler.h" 10 #include "src/code-stub-assembler.h"
(...skipping 141 matching lines...) Expand 10 before | Expand all | Expand 10 after
152 V(HasProperty) \ 152 V(HasProperty) \
153 V(ForInFilter) \ 153 V(ForInFilter) \
154 V(GetProperty) \ 154 V(GetProperty) \
155 V(LoadICTF) \ 155 V(LoadICTF) \
156 V(KeyedLoadICTF) \ 156 V(KeyedLoadICTF) \
157 V(StoreFastElement) \ 157 V(StoreFastElement) \
158 V(StoreField) \ 158 V(StoreField) \
159 V(StoreGlobal) \ 159 V(StoreGlobal) \
160 V(StoreICTF) \ 160 V(StoreICTF) \
161 V(StoreInterceptor) \ 161 V(StoreInterceptor) \
162 V(StoreMap) \
162 V(StoreTransition) \ 163 V(StoreTransition) \
163 V(LoadApiGetter) \ 164 V(LoadApiGetter) \
164 V(LoadIndexedInterceptor) \ 165 V(LoadIndexedInterceptor) \
165 V(GrowArrayElements) \ 166 V(GrowArrayElements) \
166 V(ToObject) \ 167 V(ToObject) \
167 V(Typeof) \ 168 V(Typeof) \
168 /* These are only called from FGC and */ \ 169 /* These are only called from FGC and */ \
169 /* can be removed when we use ignition */ \ 170 /* can be removed when we use ignition */ \
170 /* only */ \ 171 /* only */ \
171 V(LoadICTrampolineTF) \ 172 V(LoadICTrampolineTF) \
(...skipping 1431 matching lines...) Expand 10 before | Expand all | Expand 10 after
1603 class RepresentationBits 1604 class RepresentationBits
1604 : public BitField<Representation::Kind, StoreFieldByIndexBits::kNext, 4> { 1605 : public BitField<Representation::Kind, StoreFieldByIndexBits::kNext, 4> {
1605 }; 1606 };
1606 STATIC_ASSERT(Representation::kNumRepresentations - 1 < 1607 STATIC_ASSERT(Representation::kNumRepresentations - 1 <
1607 RepresentationBits::kMax); 1608 RepresentationBits::kMax);
1608 1609
1609 DEFINE_CALL_INTERFACE_DESCRIPTOR(StoreWithVector); 1610 DEFINE_CALL_INTERFACE_DESCRIPTOR(StoreWithVector);
1610 DEFINE_TURBOFAN_CODE_STUB(StoreField, TurboFanCodeStub); 1611 DEFINE_TURBOFAN_CODE_STUB(StoreField, TurboFanCodeStub);
1611 }; 1612 };
1612 1613
1614 class StoreMapStub : public TurboFanCodeStub {
1615 public:
1616 explicit StoreMapStub(Isolate* isolate) : TurboFanCodeStub(isolate) {}
1617
1618 Code::Kind GetCodeKind() const override { return Code::HANDLER; }
1619 ExtraICState GetExtraICState() const override { return Code::STORE_IC; }
1620
1621 private:
1622 DEFINE_CALL_INTERFACE_DESCRIPTOR(StoreTransition);
1623 DEFINE_TURBOFAN_CODE_STUB(StoreMap, TurboFanCodeStub);
1624 };
1625
1613 class StoreTransitionStub : public TurboFanCodeStub { 1626 class StoreTransitionStub : public TurboFanCodeStub {
1614 public: 1627 public:
1615 enum StoreMode { 1628 enum StoreMode {
1616 StoreMapOnly,
1617 StoreMapAndValue, 1629 StoreMapAndValue,
1618 ExtendStorageAndStoreMapAndValue 1630 ExtendStorageAndStoreMapAndValue
1619 }; 1631 };
1620 1632
1621 explicit StoreTransitionStub(Isolate* isolate) : TurboFanCodeStub(isolate) { 1633 StoreTransitionStub(Isolate* isolate, bool is_inobject,
1622 minor_key_ = StoreModeBits::encode(StoreMapOnly);
1623 }
1624
1625 StoreTransitionStub(Isolate* isolate, FieldIndex index,
1626 Representation representation, StoreMode store_mode) 1634 Representation representation, StoreMode store_mode)
1627 : TurboFanCodeStub(isolate) { 1635 : TurboFanCodeStub(isolate) {
1628 DCHECK(store_mode != StoreMapOnly); 1636 minor_key_ = IsInobjectBits::encode(is_inobject) |
1629 int property_index_key = index.GetFieldAccessStubKey();
1630 minor_key_ = StoreFieldByIndexBits::encode(property_index_key) |
1631 RepresentationBits::encode(representation.kind()) | 1637 RepresentationBits::encode(representation.kind()) |
1632 StoreModeBits::encode(store_mode); 1638 StoreModeBits::encode(store_mode);
1633 } 1639 }
1634 1640
1635 Code::Kind GetCodeKind() const override { return Code::HANDLER; } 1641 Code::Kind GetCodeKind() const override { return Code::HANDLER; }
1636 ExtraICState GetExtraICState() const override { return Code::STORE_IC; } 1642 ExtraICState GetExtraICState() const override { return Code::STORE_IC; }
1637 1643
1638 FieldIndex index() const { 1644 bool is_inobject() const { return IsInobjectBits::decode(minor_key_); }
1639 DCHECK(store_mode() != StoreMapOnly);
1640 int property_index_key = StoreFieldByIndexBits::decode(minor_key_);
1641 return FieldIndex::FromFieldAccessStubKey(property_index_key);
1642 }
1643 1645
1644 Representation representation() const { 1646 Representation representation() const {
1645 DCHECK(store_mode() != StoreMapOnly);
1646 return Representation::FromKind(RepresentationBits::decode(minor_key_)); 1647 return Representation::FromKind(RepresentationBits::decode(minor_key_));
1647 } 1648 }
1648 1649
1649 StoreMode store_mode() const { return StoreModeBits::decode(minor_key_); } 1650 StoreMode store_mode() const { return StoreModeBits::decode(minor_key_); }
1650 1651
1651 private: 1652 private:
1652 class StoreFieldByIndexBits : public BitField<int, 0, 13> {}; 1653 class IsInobjectBits : public BitField<bool, 0, 1> {};
1653 class RepresentationBits : public BitField<Representation::Kind, 13, 4> {}; 1654 class RepresentationBits
1655 : public BitField<Representation::Kind, IsInobjectBits::kNext, 4> {};
1654 STATIC_ASSERT(Representation::kNumRepresentations - 1 < 1656 STATIC_ASSERT(Representation::kNumRepresentations - 1 <
1655 RepresentationBits::kMax); 1657 RepresentationBits::kMax);
1656 class StoreModeBits : public BitField<StoreMode, 17, 2> {}; 1658 class StoreModeBits
1659 : public BitField<StoreMode, RepresentationBits::kNext, 1> {};
1657 1660
1658 DEFINE_CALL_INTERFACE_DESCRIPTOR(StoreTransition); 1661 DEFINE_CALL_INTERFACE_DESCRIPTOR(StoreNamedTransition);
1659 DEFINE_TURBOFAN_CODE_STUB(StoreTransition, TurboFanCodeStub); 1662 DEFINE_TURBOFAN_CODE_STUB(StoreTransition, TurboFanCodeStub);
1660 }; 1663 };
1661 1664
1662 class StoreGlobalStub : public TurboFanCodeStub { 1665 class StoreGlobalStub : public TurboFanCodeStub {
1663 public: 1666 public:
1664 StoreGlobalStub(Isolate* isolate, PropertyCellType type, 1667 StoreGlobalStub(Isolate* isolate, PropertyCellType type,
1665 Maybe<PropertyCellConstantType> constant_type, 1668 Maybe<PropertyCellConstantType> constant_type,
1666 bool check_global) 1669 bool check_global)
1667 : TurboFanCodeStub(isolate) { 1670 : TurboFanCodeStub(isolate) {
1668 PropertyCellConstantType encoded_constant_type = 1671 PropertyCellConstantType encoded_constant_type =
(...skipping 1458 matching lines...) Expand 10 before | Expand all | Expand 10 after
3127 #undef DEFINE_HYDROGEN_CODE_STUB 3130 #undef DEFINE_HYDROGEN_CODE_STUB
3128 #undef DEFINE_CODE_STUB 3131 #undef DEFINE_CODE_STUB
3129 #undef DEFINE_CODE_STUB_BASE 3132 #undef DEFINE_CODE_STUB_BASE
3130 3133
3131 extern Representation RepresentationFromMachineType(MachineType type); 3134 extern Representation RepresentationFromMachineType(MachineType type);
3132 3135
3133 } // namespace internal 3136 } // namespace internal
3134 } // namespace v8 3137 } // namespace v8
3135 3138
3136 #endif // V8_CODE_STUBS_H_ 3139 #endif // V8_CODE_STUBS_H_
OLDNEW
« no previous file with comments | « src/code-stub-assembler.cc ('k') | src/code-stubs.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698