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

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

Issue 15806005: fix the compare nil ic (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: 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
« no previous file with comments | « src/arm/code-stubs-arm.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 // 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 259 matching lines...) Expand 10 before | Expand all | Expand 10 after
270 struct CodeStubInterfaceDescriptor { 270 struct CodeStubInterfaceDescriptor {
271 CodeStubInterfaceDescriptor(); 271 CodeStubInterfaceDescriptor();
272 int register_param_count_; 272 int register_param_count_;
273 const Register* stack_parameter_count_; 273 const Register* stack_parameter_count_;
274 // if hint_stack_parameter_count_ > 0, the code stub can optimize the 274 // if hint_stack_parameter_count_ > 0, the code stub can optimize the
275 // return sequence. Default value is -1, which means it is ignored. 275 // return sequence. Default value is -1, which means it is ignored.
276 int hint_stack_parameter_count_; 276 int hint_stack_parameter_count_;
277 StubFunctionMode function_mode_; 277 StubFunctionMode function_mode_;
278 Register* register_params_; 278 Register* register_params_;
279 Address deoptimization_handler_; 279 Address deoptimization_handler_;
280 ExternalReference miss_handler_;
281 280
282 int environment_length() const { 281 int environment_length() const {
283 if (stack_parameter_count_ != NULL) { 282 if (stack_parameter_count_ != NULL) {
284 return register_param_count_ + 1; 283 return register_param_count_ + 1;
285 } 284 }
286 return register_param_count_; 285 return register_param_count_;
287 } 286 }
288 287
289 bool initialized() const { return register_param_count_ >= 0; } 288 bool initialized() const { return register_param_count_ >= 0; }
289
290 void SetMissHandler(ExternalReference handler) {
291 miss_handler_ = handler;
292 has_miss_handler_ = true;
293 }
294
295 ExternalReference miss_handler() {
296 ASSERT(has_miss_handler_);
297 return miss_handler_;
298 }
299
300 bool has_miss_handler() {
301 return has_miss_handler_;
302 }
303
304 private:
305 ExternalReference miss_handler_;
306 bool has_miss_handler_;
290 }; 307 };
291 308
292 // A helper to make up for the fact that type Register is not fully 309 // A helper to make up for the fact that type Register is not fully
293 // defined outside of the platform directories 310 // defined outside of the platform directories
294 #define DESCRIPTOR_GET_PARAMETER_REGISTER(descriptor, index) \ 311 #define DESCRIPTOR_GET_PARAMETER_REGISTER(descriptor, index) \
295 ((index) == (descriptor)->register_param_count_) \ 312 ((index) == (descriptor)->register_param_count_) \
296 ? *((descriptor)->stack_parameter_count_) \ 313 ? *((descriptor)->stack_parameter_count_) \
297 : (descriptor)->register_params_[(index)] 314 : (descriptor)->register_params_[(index)]
298 315
299 316
300 class HydrogenCodeStub : public CodeStub { 317 class HydrogenCodeStub : public CodeStub {
301 public: 318 public:
302 enum InitializationState { 319 enum InitializationState {
303 CODE_STUB_IS_NOT_MISS, 320 UNINITIALIZED,
304 CODE_STUB_IS_MISS 321 INITIALIZED
305 }; 322 };
306 323
307 explicit HydrogenCodeStub(InitializationState state) { 324 explicit HydrogenCodeStub(InitializationState state = INITIALIZED) {
308 is_miss_ = (state == CODE_STUB_IS_MISS); 325 is_uninitialized_ = (state == UNINITIALIZED);
309 } 326 }
310 327
311 virtual Code::Kind GetCodeKind() const { return Code::STUB; } 328 virtual Code::Kind GetCodeKind() const { return Code::STUB; }
312 329
313 CodeStubInterfaceDescriptor* GetInterfaceDescriptor(Isolate* isolate) { 330 CodeStubInterfaceDescriptor* GetInterfaceDescriptor(Isolate* isolate) {
314 return isolate->code_stub_interface_descriptor(MajorKey()); 331 return isolate->code_stub_interface_descriptor(MajorKey());
315 } 332 }
316 333
317 bool IsMiss() { return is_miss_; } 334 bool IsUninitialized() { return is_uninitialized_; }
318 335
319 template<class SubClass> 336 template<class SubClass>
320 static Handle<Code> GetUninitialized(Isolate* isolate) { 337 static Handle<Code> GetUninitialized(Isolate* isolate) {
321 SubClass::GenerateAheadOfTime(isolate); 338 SubClass::GenerateAheadOfTime(isolate);
322 return SubClass().GetCode(isolate); 339 return SubClass().GetCode(isolate);
323 } 340 }
324 341
325 virtual void InitializeInterfaceDescriptor( 342 virtual void InitializeInterfaceDescriptor(
326 Isolate* isolate, 343 Isolate* isolate,
327 CodeStubInterfaceDescriptor* descriptor) = 0; 344 CodeStubInterfaceDescriptor* descriptor) = 0;
328 345
329 // Retrieve the code for the stub. Generate the code if needed. 346 // Retrieve the code for the stub. Generate the code if needed.
330 virtual Handle<Code> GenerateCode() = 0; 347 virtual Handle<Code> GenerateCode() = 0;
331 348
332 virtual int NotMissMinorKey() = 0; 349 virtual int NotMissMinorKey() = 0;
333 350
334 Handle<Code> GenerateLightweightMissCode(Isolate* isolate); 351 Handle<Code> GenerateLightweightMissCode(Isolate* isolate);
335 352
336 private: 353 private:
337 class MinorKeyBits: public BitField<int, 0, kStubMinorKeyBits - 1> {}; 354 class MinorKeyBits: public BitField<int, 0, kStubMinorKeyBits - 1> {};
338 class IsMissBits: public BitField<bool, kStubMinorKeyBits - 1, 1> {}; 355 class IsMissBits: public BitField<bool, kStubMinorKeyBits - 1, 1> {};
339 356
340 void GenerateLightweightMiss(MacroAssembler* masm); 357 void GenerateLightweightMiss(MacroAssembler* masm);
341 virtual int MinorKey() { 358 virtual int MinorKey() {
342 return IsMissBits::encode(is_miss_) | 359 return IsMissBits::encode(is_uninitialized_) |
343 MinorKeyBits::encode(NotMissMinorKey()); 360 MinorKeyBits::encode(NotMissMinorKey());
344 } 361 }
345 362
346 bool is_miss_; 363 bool is_uninitialized_;
347 }; 364 };
348 365
349 366
350 // Helper interface to prepare to/restore after making runtime calls. 367 // Helper interface to prepare to/restore after making runtime calls.
351 class RuntimeCallHelper { 368 class RuntimeCallHelper {
352 public: 369 public:
353 virtual ~RuntimeCallHelper() {} 370 virtual ~RuntimeCallHelper() {}
354 371
355 virtual void BeforeCall(MacroAssembler* masm) const = 0; 372 virtual void BeforeCall(MacroAssembler* masm) const = 0;
356 373
(...skipping 152 matching lines...) Expand 10 before | Expand all | Expand 10 after
509 COPY_ON_WRITE_ELEMENTS, 526 COPY_ON_WRITE_ELEMENTS,
510 CLONE_ANY_ELEMENTS, 527 CLONE_ANY_ELEMENTS,
511 LAST_CLONE_MODE = CLONE_ANY_ELEMENTS 528 LAST_CLONE_MODE = CLONE_ANY_ELEMENTS
512 }; 529 };
513 530
514 static const int kFastCloneModeCount = LAST_CLONE_MODE + 1; 531 static const int kFastCloneModeCount = LAST_CLONE_MODE + 1;
515 532
516 FastCloneShallowArrayStub(Mode mode, 533 FastCloneShallowArrayStub(Mode mode,
517 AllocationSiteMode allocation_site_mode, 534 AllocationSiteMode allocation_site_mode,
518 int length) 535 int length)
519 : HydrogenCodeStub(CODE_STUB_IS_NOT_MISS), 536 : mode_(mode),
520 mode_(mode),
521 allocation_site_mode_(allocation_site_mode), 537 allocation_site_mode_(allocation_site_mode),
522 length_((mode == COPY_ON_WRITE_ELEMENTS) ? 0 : length) { 538 length_((mode == COPY_ON_WRITE_ELEMENTS) ? 0 : length) {
523 ASSERT_GE(length_, 0); 539 ASSERT_GE(length_, 0);
524 ASSERT_LE(length_, kMaximumClonedLength); 540 ASSERT_LE(length_, kMaximumClonedLength);
525 } 541 }
526 542
527 Mode mode() const { return mode_; } 543 Mode mode() const { return mode_; }
528 int length() const { return length_; } 544 int length() const { return length_; }
529 AllocationSiteMode allocation_site_mode() const { 545 AllocationSiteMode allocation_site_mode() const {
530 return allocation_site_mode_; 546 return allocation_site_mode_;
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after
570 } 586 }
571 }; 587 };
572 588
573 589
574 class FastCloneShallowObjectStub : public HydrogenCodeStub { 590 class FastCloneShallowObjectStub : public HydrogenCodeStub {
575 public: 591 public:
576 // Maximum number of properties in copied object. 592 // Maximum number of properties in copied object.
577 static const int kMaximumClonedProperties = 6; 593 static const int kMaximumClonedProperties = 6;
578 594
579 explicit FastCloneShallowObjectStub(int length) 595 explicit FastCloneShallowObjectStub(int length)
580 : HydrogenCodeStub(CODE_STUB_IS_NOT_MISS), 596 : length_(length) {
581 length_(length) {
582 ASSERT_GE(length_, 0); 597 ASSERT_GE(length_, 0);
583 ASSERT_LE(length_, kMaximumClonedProperties); 598 ASSERT_LE(length_, kMaximumClonedProperties);
584 } 599 }
585 600
586 int length() const { return length_; } 601 int length() const { return length_; }
587 602
588 virtual Handle<Code> GenerateCode(); 603 virtual Handle<Code> GenerateCode();
589 604
590 virtual void InitializeInterfaceDescriptor( 605 virtual void InitializeInterfaceDescriptor(
591 Isolate* isolate, 606 Isolate* isolate,
(...skipping 164 matching lines...) Expand 10 before | Expand all | Expand 10 after
756 virtual CodeStub::Major MajorKey() { return StoreArrayLength; } 771 virtual CodeStub::Major MajorKey() { return StoreArrayLength; }
757 }; 772 };
758 773
759 774
760 class HICStub: public HydrogenCodeStub { 775 class HICStub: public HydrogenCodeStub {
761 public: 776 public:
762 virtual Code::Kind GetCodeKind() const { return kind(); } 777 virtual Code::Kind GetCodeKind() const { return kind(); }
763 virtual InlineCacheState GetICState() { return MONOMORPHIC; } 778 virtual InlineCacheState GetICState() { return MONOMORPHIC; }
764 779
765 protected: 780 protected:
766 HICStub() : HydrogenCodeStub(CODE_STUB_IS_NOT_MISS) { } 781 HICStub() { }
767 class KindBits: public BitField<Code::Kind, 0, 4> {}; 782 class KindBits: public BitField<Code::Kind, 0, 4> {};
768 virtual Code::Kind kind() const = 0; 783 virtual Code::Kind kind() const = 0;
769 }; 784 };
770 785
771 786
772 class HandlerStub: public HICStub { 787 class HandlerStub: public HICStub {
773 public: 788 public:
774 virtual Code::Kind GetCodeKind() const { return Code::STUB; } 789 virtual Code::Kind GetCodeKind() const { return Code::STUB; }
775 virtual int GetStubFlags() { return kind(); } 790 virtual int GetStubFlags() { return kind(); }
776 791
(...skipping 292 matching lines...) Expand 10 before | Expand all | Expand 10 after
1069 } 1084 }
1070 1085
1071 void Print(StringStream* stream) const; 1086 void Print(StringStream* stream) const;
1072 }; 1087 };
1073 1088
1074 // At most 6 different types can be distinguished, because the Code object 1089 // At most 6 different types can be distinguished, because the Code object
1075 // only has room for a single byte to hold a set and there are two more 1090 // only has room for a single byte to hold a set and there are two more
1076 // boolean flags we need to store. :-P 1091 // boolean flags we need to store. :-P
1077 STATIC_ASSERT(NUMBER_OF_TYPES <= 6); 1092 STATIC_ASSERT(NUMBER_OF_TYPES <= 6);
1078 1093
1079 CompareNilICStub(EqualityKind kind, NilValue nil, Types types) 1094 CompareNilICStub(EqualityKind kind, NilValue nil, Types types = Types())
1080 : HydrogenCodeStub(CODE_STUB_IS_NOT_MISS), types_(types) { 1095 : types_(types) {
1081 equality_kind_ = kind; 1096 equality_kind_ = kind;
1082 nil_value_ = nil; 1097 nil_value_ = nil;
1083 } 1098 }
1084 1099
1085 explicit CompareNilICStub(Code::ExtraICState ic_state) 1100 CompareNilICStub(Code::ExtraICState ic_state,
1086 : HydrogenCodeStub(CODE_STUB_IS_NOT_MISS) { 1101 InitializationState init_state = INITIALIZED)
1102 : HydrogenCodeStub(init_state) {
1087 equality_kind_ = EqualityKindField::decode(ic_state); 1103 equality_kind_ = EqualityKindField::decode(ic_state);
1088 nil_value_ = NilValueField::decode(ic_state); 1104 nil_value_ = NilValueField::decode(ic_state);
1089 types_ = Types(ExtractTypesFromExtraICState(ic_state)); 1105 types_ = Types(ExtractTypesFromExtraICState(ic_state));
1090 } 1106 }
1091 1107
1092 static Handle<Code> GetUninitialized(Isolate* isolate, 1108 static Handle<Code> GetUninitialized(Isolate* isolate,
1093 EqualityKind kind, 1109 EqualityKind kind,
1094 NilValue nil) { 1110 NilValue nil) {
1095 return CompareNilICStub(kind, nil, CODE_STUB_IS_MISS).GetCode(isolate); 1111 return CompareNilICStub(kind, nil, UNINITIALIZED).GetCode(isolate);
1096 } 1112 }
1097 1113
1098 virtual void InitializeInterfaceDescriptor( 1114 virtual void InitializeInterfaceDescriptor(
1099 Isolate* isolate, 1115 Isolate* isolate,
1100 CodeStubInterfaceDescriptor* descriptor); 1116 CodeStubInterfaceDescriptor* descriptor);
1101 1117
1102 static void InitializeForIsolate(Isolate* isolate) { 1118 static void InitializeForIsolate(Isolate* isolate) {
1103 CompareNilICStub compare_stub(kStrictEquality, kNullValue, 1119 CompareNilICStub compare_stub(kStrictEquality, kNullValue, UNINITIALIZED);
1104 CODE_STUB_IS_MISS);
1105 compare_stub.InitializeInterfaceDescriptor( 1120 compare_stub.InitializeInterfaceDescriptor(
1106 isolate, 1121 isolate,
1107 isolate->code_stub_interface_descriptor(CodeStub::CompareNilIC)); 1122 isolate->code_stub_interface_descriptor(CodeStub::CompareNilIC));
1108 } 1123 }
1109 1124
1110 virtual InlineCacheState GetICState() { 1125 virtual InlineCacheState GetICState() {
1111 if (types_ == Types::FullCompare()) { 1126 if (types_ == Types::FullCompare()) {
1112 return MEGAMORPHIC; 1127 return MEGAMORPHIC;
1113 } else if (types_.Contains(MONOMORPHIC_MAP)) { 1128 } else if (types_.Contains(MONOMORPHIC_MAP)) {
1114 return MONOMORPHIC; 1129 return MONOMORPHIC;
(...skipping 26 matching lines...) Expand all
1141 void ClearTypes() { types_.RemoveAll(); } 1156 void ClearTypes() { types_.RemoveAll(); }
1142 void SetKind(EqualityKind kind) { equality_kind_ = kind; } 1157 void SetKind(EqualityKind kind) { equality_kind_ = kind; }
1143 1158
1144 virtual void PrintName(StringStream* stream); 1159 virtual void PrintName(StringStream* stream);
1145 1160
1146 private: 1161 private:
1147 friend class CompareNilIC; 1162 friend class CompareNilIC;
1148 1163
1149 CompareNilICStub(EqualityKind kind, NilValue nil, 1164 CompareNilICStub(EqualityKind kind, NilValue nil,
1150 InitializationState init_state) 1165 InitializationState init_state)
1151 : HydrogenCodeStub(init_state), types_(0) { 1166 : HydrogenCodeStub(init_state) {
1152 equality_kind_ = kind; 1167 equality_kind_ = kind;
1153 nil_value_ = nil; 1168 nil_value_ = nil;
1154 } 1169 }
1155 1170
1156 CompareNilICStub(Code::ExtraICState ic_state, InitializationState init_state)
1157 : HydrogenCodeStub(init_state) {
1158 equality_kind_ = EqualityKindField::decode(ic_state);
1159 nil_value_ = NilValueField::decode(ic_state);
1160 types_ = Types(ExtractTypesFromExtraICState(ic_state));
1161 }
1162
1163 class EqualityKindField : public BitField<EqualityKind, NUMBER_OF_TYPES, 1> { 1171 class EqualityKindField : public BitField<EqualityKind, NUMBER_OF_TYPES, 1> {
1164 }; 1172 };
1165 class NilValueField : public BitField<NilValue, NUMBER_OF_TYPES+1, 1> {}; 1173 class NilValueField : public BitField<NilValue, NUMBER_OF_TYPES+1, 1> {};
1166 1174
1167 virtual CodeStub::Major MajorKey() { return CompareNilIC; } 1175 virtual CodeStub::Major MajorKey() { return CompareNilIC; }
1168 virtual int NotMissMinorKey() { return GetExtraICState(); } 1176 virtual int NotMissMinorKey() { return GetExtraICState(); }
1169 1177
1170 EqualityKind equality_kind_; 1178 EqualityKind equality_kind_;
1171 NilValue nil_value_; 1179 NilValue nil_value_;
1172 Types types_; 1180 Types types_;
(...skipping 387 matching lines...) Expand 10 before | Expand all | Expand 10 after
1560 private: 1568 private:
1561 Major MajorKey() { return KeyedLoadElement; } 1569 Major MajorKey() { return KeyedLoadElement; }
1562 int MinorKey() { return DICTIONARY_ELEMENTS; } 1570 int MinorKey() { return DICTIONARY_ELEMENTS; }
1563 1571
1564 DISALLOW_COPY_AND_ASSIGN(KeyedLoadDictionaryElementStub); 1572 DISALLOW_COPY_AND_ASSIGN(KeyedLoadDictionaryElementStub);
1565 }; 1573 };
1566 1574
1567 1575
1568 class KeyedLoadFastElementStub : public HydrogenCodeStub { 1576 class KeyedLoadFastElementStub : public HydrogenCodeStub {
1569 public: 1577 public:
1570 KeyedLoadFastElementStub(bool is_js_array, ElementsKind elements_kind) 1578 KeyedLoadFastElementStub(bool is_js_array, ElementsKind elements_kind) {
1571 : HydrogenCodeStub(CODE_STUB_IS_NOT_MISS) {
1572 bit_field_ = ElementsKindBits::encode(elements_kind) | 1579 bit_field_ = ElementsKindBits::encode(elements_kind) |
1573 IsJSArrayBits::encode(is_js_array); 1580 IsJSArrayBits::encode(is_js_array);
1574 } 1581 }
1575 1582
1576 bool is_js_array() const { 1583 bool is_js_array() const {
1577 return IsJSArrayBits::decode(bit_field_); 1584 return IsJSArrayBits::decode(bit_field_);
1578 } 1585 }
1579 1586
1580 ElementsKind elements_kind() const { 1587 ElementsKind elements_kind() const {
1581 return ElementsKindBits::decode(bit_field_); 1588 return ElementsKindBits::decode(bit_field_);
(...skipping 14 matching lines...) Expand all
1596 int NotMissMinorKey() { return bit_field_; } 1603 int NotMissMinorKey() { return bit_field_; }
1597 1604
1598 DISALLOW_COPY_AND_ASSIGN(KeyedLoadFastElementStub); 1605 DISALLOW_COPY_AND_ASSIGN(KeyedLoadFastElementStub);
1599 }; 1606 };
1600 1607
1601 1608
1602 class KeyedStoreFastElementStub : public HydrogenCodeStub { 1609 class KeyedStoreFastElementStub : public HydrogenCodeStub {
1603 public: 1610 public:
1604 KeyedStoreFastElementStub(bool is_js_array, 1611 KeyedStoreFastElementStub(bool is_js_array,
1605 ElementsKind elements_kind, 1612 ElementsKind elements_kind,
1606 KeyedAccessStoreMode mode) 1613 KeyedAccessStoreMode mode) {
1607 : HydrogenCodeStub(CODE_STUB_IS_NOT_MISS) {
1608 bit_field_ = ElementsKindBits::encode(elements_kind) | 1614 bit_field_ = ElementsKindBits::encode(elements_kind) |
1609 IsJSArrayBits::encode(is_js_array) | 1615 IsJSArrayBits::encode(is_js_array) |
1610 StoreModeBits::encode(mode); 1616 StoreModeBits::encode(mode);
1611 } 1617 }
1612 1618
1613 bool is_js_array() const { 1619 bool is_js_array() const {
1614 return IsJSArrayBits::decode(bit_field_); 1620 return IsJSArrayBits::decode(bit_field_);
1615 } 1621 }
1616 1622
1617 ElementsKind elements_kind() const { 1623 ElementsKind elements_kind() const {
(...skipping 19 matching lines...) Expand all
1637 Major MajorKey() { return KeyedStoreElement; } 1643 Major MajorKey() { return KeyedStoreElement; }
1638 int NotMissMinorKey() { return bit_field_; } 1644 int NotMissMinorKey() { return bit_field_; }
1639 1645
1640 DISALLOW_COPY_AND_ASSIGN(KeyedStoreFastElementStub); 1646 DISALLOW_COPY_AND_ASSIGN(KeyedStoreFastElementStub);
1641 }; 1647 };
1642 1648
1643 1649
1644 class TransitionElementsKindStub : public HydrogenCodeStub { 1650 class TransitionElementsKindStub : public HydrogenCodeStub {
1645 public: 1651 public:
1646 TransitionElementsKindStub(ElementsKind from_kind, 1652 TransitionElementsKindStub(ElementsKind from_kind,
1647 ElementsKind to_kind) 1653 ElementsKind to_kind) {
1648 : HydrogenCodeStub(CODE_STUB_IS_NOT_MISS) {
1649 bit_field_ = FromKindBits::encode(from_kind) | 1654 bit_field_ = FromKindBits::encode(from_kind) |
1650 ToKindBits::encode(to_kind); 1655 ToKindBits::encode(to_kind);
1651 } 1656 }
1652 1657
1653 ElementsKind from_kind() const { 1658 ElementsKind from_kind() const {
1654 return FromKindBits::decode(bit_field_); 1659 return FromKindBits::decode(bit_field_);
1655 } 1660 }
1656 1661
1657 ElementsKind to_kind() const { 1662 ElementsKind to_kind() const {
1658 return ToKindBits::decode(bit_field_); 1663 return ToKindBits::decode(bit_field_);
(...skipping 12 matching lines...) Expand all
1671 1676
1672 Major MajorKey() { return TransitionElementsKind; } 1677 Major MajorKey() { return TransitionElementsKind; }
1673 int NotMissMinorKey() { return bit_field_; } 1678 int NotMissMinorKey() { return bit_field_; }
1674 1679
1675 DISALLOW_COPY_AND_ASSIGN(TransitionElementsKindStub); 1680 DISALLOW_COPY_AND_ASSIGN(TransitionElementsKindStub);
1676 }; 1681 };
1677 1682
1678 1683
1679 class ArrayConstructorStubBase : public HydrogenCodeStub { 1684 class ArrayConstructorStubBase : public HydrogenCodeStub {
1680 public: 1685 public:
1681 ArrayConstructorStubBase(ElementsKind kind, AllocationSiteMode mode) 1686 ArrayConstructorStubBase(ElementsKind kind, AllocationSiteMode mode) {
1682 : HydrogenCodeStub(CODE_STUB_IS_NOT_MISS) {
1683 bit_field_ = ElementsKindBits::encode(kind) | 1687 bit_field_ = ElementsKindBits::encode(kind) |
1684 AllocationSiteModeBits::encode(mode == TRACK_ALLOCATION_SITE); 1688 AllocationSiteModeBits::encode(mode == TRACK_ALLOCATION_SITE);
1685 } 1689 }
1686 1690
1687 ElementsKind elements_kind() const { 1691 ElementsKind elements_kind() const {
1688 return ElementsKindBits::decode(bit_field_); 1692 return ElementsKindBits::decode(bit_field_);
1689 } 1693 }
1690 1694
1691 AllocationSiteMode mode() const { 1695 AllocationSiteMode mode() const {
1692 return AllocationSiteModeBits::decode(bit_field_) 1696 return AllocationSiteModeBits::decode(bit_field_)
(...skipping 297 matching lines...) Expand 10 before | Expand all | Expand 10 after
1990 1994
1991 // The current function entry hook. 1995 // The current function entry hook.
1992 static FunctionEntryHook entry_hook_; 1996 static FunctionEntryHook entry_hook_;
1993 1997
1994 DISALLOW_COPY_AND_ASSIGN(ProfileEntryHookStub); 1998 DISALLOW_COPY_AND_ASSIGN(ProfileEntryHookStub);
1995 }; 1999 };
1996 2000
1997 } } // namespace v8::internal 2001 } } // namespace v8::internal
1998 2002
1999 #endif // V8_CODE_STUBS_H_ 2003 #endif // V8_CODE_STUBS_H_
OLDNEW
« no previous file with comments | « src/arm/code-stubs-arm.cc ('k') | src/code-stubs.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698