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

Side by Side Diff: src/objects.h

Issue 306513002: Convert ElementsKind into a BitField (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: Created 6 years, 6 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/mips/macro-assembler-mips.cc ('k') | src/x64/code-stubs-x64.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_OBJECTS_H_ 5 #ifndef V8_OBJECTS_H_
6 #define V8_OBJECTS_H_ 6 #define V8_OBJECTS_H_
7 7
8 #include "allocation.h" 8 #include "allocation.h"
9 #include "assert-scope.h" 9 #include "assert-scope.h"
10 #include "builtins.h" 10 #include "builtins.h"
(...skipping 6066 matching lines...) Expand 10 before | Expand all | Expand 10 after
6077 6077
6078 inline bool is_observed() { 6078 inline bool is_observed() {
6079 return ((1 << kIsObserved) & bit_field()) != 0; 6079 return ((1 << kIsObserved) & bit_field()) != 0;
6080 } 6080 }
6081 6081
6082 inline void set_is_extensible(bool value); 6082 inline void set_is_extensible(bool value);
6083 inline bool is_extensible(); 6083 inline bool is_extensible();
6084 6084
6085 inline void set_elements_kind(ElementsKind elements_kind) { 6085 inline void set_elements_kind(ElementsKind elements_kind) {
6086 ASSERT(elements_kind < kElementsKindCount); 6086 ASSERT(elements_kind < kElementsKindCount);
6087 ASSERT(kElementsKindCount <= (1 << kElementsKindBitCount)); 6087 ASSERT(kElementsKindCount <= (1 << Map::ElementsKindBits::kSize));
6088 set_bit_field2((bit_field2() & ~kElementsKindMask) | 6088 set_bit_field2(Map::ElementsKindBits::update(bit_field2(), elements_kind));
6089 (elements_kind << kElementsKindShift));
6090 ASSERT(this->elements_kind() == elements_kind); 6089 ASSERT(this->elements_kind() == elements_kind);
6091 } 6090 }
6092 6091
6093 inline ElementsKind elements_kind() { 6092 inline ElementsKind elements_kind() {
6094 return static_cast<ElementsKind>( 6093 return Map::ElementsKindBits::decode(bit_field2());
6095 (bit_field2() & kElementsKindMask) >> kElementsKindShift);
6096 } 6094 }
6097 6095
6098 // Tells whether the instance has fast elements that are only Smis. 6096 // Tells whether the instance has fast elements that are only Smis.
6099 inline bool has_fast_smi_elements() { 6097 inline bool has_fast_smi_elements() {
6100 return IsFastSmiElementsKind(elements_kind()); 6098 return IsFastSmiElementsKind(elements_kind());
6101 } 6099 }
6102 6100
6103 // Tells whether the instance has fast elements. 6101 // Tells whether the instance has fast elements.
6104 inline bool has_fast_object_elements() { 6102 inline bool has_fast_object_elements() {
6105 return IsFastObjectElementsKind(elements_kind()); 6103 return IsFastObjectElementsKind(elements_kind());
(...skipping 460 matching lines...) Expand 10 before | Expand all | Expand 10 after
6566 static const int kHasIndexedInterceptor = 3; 6564 static const int kHasIndexedInterceptor = 3;
6567 static const int kIsUndetectable = 4; 6565 static const int kIsUndetectable = 4;
6568 static const int kIsObserved = 5; 6566 static const int kIsObserved = 5;
6569 static const int kIsAccessCheckNeeded = 6; 6567 static const int kIsAccessCheckNeeded = 6;
6570 class FunctionWithPrototype: public BitField<bool, 7, 1> {}; 6568 class FunctionWithPrototype: public BitField<bool, 7, 1> {};
6571 6569
6572 // Bit positions for bit field 2 6570 // Bit positions for bit field 2
6573 static const int kIsExtensible = 0; 6571 static const int kIsExtensible = 0;
6574 static const int kStringWrapperSafeForDefaultValueOf = 1; 6572 static const int kStringWrapperSafeForDefaultValueOf = 1;
6575 // Currently bit 2 is not used. 6573 // Currently bit 2 is not used.
6576 // No bits can be used after kElementsKindFirstBit, they are all reserved for 6574 class ElementsKindBits: public BitField<ElementsKind, 3, 5> {};
6577 // storing ElementKind.
6578 static const int kElementsKindShift = 3;
6579 static const int kElementsKindBitCount = 5;
6580 6575
6581 // Derived values from bit field 2 6576 // Derived values from bit field 2
6582 static const int kElementsKindMask = (-1 << kElementsKindShift) &
6583 ((1 << (kElementsKindShift + kElementsKindBitCount)) - 1);
6584 static const int8_t kMaximumBitField2FastElementValue = static_cast<int8_t>( 6577 static const int8_t kMaximumBitField2FastElementValue = static_cast<int8_t>(
6585 (FAST_ELEMENTS + 1) << Map::kElementsKindShift) - 1; 6578 (FAST_ELEMENTS + 1) << Map::ElementsKindBits::kShift) - 1;
6586 static const int8_t kMaximumBitField2FastSmiElementValue = 6579 static const int8_t kMaximumBitField2FastSmiElementValue =
6587 static_cast<int8_t>((FAST_SMI_ELEMENTS + 1) << 6580 static_cast<int8_t>((FAST_SMI_ELEMENTS + 1) <<
6588 Map::kElementsKindShift) - 1; 6581 Map::ElementsKindBits::kShift) - 1;
6589 static const int8_t kMaximumBitField2FastHoleyElementValue = 6582 static const int8_t kMaximumBitField2FastHoleyElementValue =
6590 static_cast<int8_t>((FAST_HOLEY_ELEMENTS + 1) << 6583 static_cast<int8_t>((FAST_HOLEY_ELEMENTS + 1) <<
6591 Map::kElementsKindShift) - 1; 6584 Map::ElementsKindBits::kShift) - 1;
6592 static const int8_t kMaximumBitField2FastHoleySmiElementValue = 6585 static const int8_t kMaximumBitField2FastHoleySmiElementValue =
6593 static_cast<int8_t>((FAST_HOLEY_SMI_ELEMENTS + 1) << 6586 static_cast<int8_t>((FAST_HOLEY_SMI_ELEMENTS + 1) <<
6594 Map::kElementsKindShift) - 1; 6587 Map::ElementsKindBits::kShift) - 1;
6595 6588
6596 typedef FixedBodyDescriptor<kPointerFieldsBeginOffset, 6589 typedef FixedBodyDescriptor<kPointerFieldsBeginOffset,
6597 kPointerFieldsEndOffset, 6590 kPointerFieldsEndOffset,
6598 kSize> BodyDescriptor; 6591 kSize> BodyDescriptor;
6599 6592
6600 // Compares this map to another to see if they describe equivalent objects. 6593 // Compares this map to another to see if they describe equivalent objects.
6601 // If |mode| is set to CLEAR_INOBJECT_PROPERTIES, |other| is treated as if 6594 // If |mode| is set to CLEAR_INOBJECT_PROPERTIES, |other| is treated as if
6602 // it had exactly zero inobject properties. 6595 // it had exactly zero inobject properties.
6603 // The "shared" flags of both this map and |other| are ignored. 6596 // The "shared" flags of both this map and |other| are ignored.
6604 bool EquivalentToForNormalization(Map* other, PropertyNormalizationMode mode); 6597 bool EquivalentToForNormalization(Map* other, PropertyNormalizationMode mode);
(...skipping 4465 matching lines...) Expand 10 before | Expand all | Expand 10 after
11070 } else { 11063 } else {
11071 value &= ~(1 << bit_position); 11064 value &= ~(1 << bit_position);
11072 } 11065 }
11073 return value; 11066 return value;
11074 } 11067 }
11075 }; 11068 };
11076 11069
11077 } } // namespace v8::internal 11070 } } // namespace v8::internal
11078 11071
11079 #endif // V8_OBJECTS_H_ 11072 #endif // V8_OBJECTS_H_
OLDNEW
« no previous file with comments | « src/mips/macro-assembler-mips.cc ('k') | src/x64/code-stubs-x64.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698