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

Side by Side Diff: src/objects.h

Issue 12390031: Unify grow mode and stub kind (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: Review feedback Created 7 years, 9 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/stub-cache-mips.cc ('k') | src/stub-cache.h » ('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 134 matching lines...) Expand 10 before | Expand all | Expand 10 after
145 // Failure: [30 bit signed int] 11 145 // Failure: [30 bit signed int] 11
146 146
147 namespace v8 { 147 namespace v8 {
148 namespace internal { 148 namespace internal {
149 149
150 enum CompareMapMode { 150 enum CompareMapMode {
151 REQUIRE_EXACT_MAP, 151 REQUIRE_EXACT_MAP,
152 ALLOW_ELEMENT_TRANSITION_MAPS 152 ALLOW_ELEMENT_TRANSITION_MAPS
153 }; 153 };
154 154
155 enum KeyedAccessGrowMode { 155 enum KeyedAccessStoreMode {
156 DO_NOT_ALLOW_JSARRAY_GROWTH, 156 STANDARD_STORE,
157 ALLOW_JSARRAY_GROWTH 157 STORE_TRANSITION_SMI_TO_OBJECT,
158 STORE_TRANSITION_SMI_TO_DOUBLE,
159 STORE_TRANSITION_DOUBLE_TO_OBJECT,
160 STORE_TRANSITION_HOLEY_SMI_TO_OBJECT,
161 STORE_TRANSITION_HOLEY_SMI_TO_DOUBLE,
162 STORE_TRANSITION_HOLEY_DOUBLE_TO_OBJECT,
163 STORE_AND_GROW_NO_TRANSITION,
164 STORE_AND_GROW_TRANSITION_SMI_TO_OBJECT,
165 STORE_AND_GROW_TRANSITION_SMI_TO_DOUBLE,
166 STORE_AND_GROW_TRANSITION_DOUBLE_TO_OBJECT,
167 STORE_AND_GROW_TRANSITION_HOLEY_SMI_TO_OBJECT,
168 STORE_AND_GROW_TRANSITION_HOLEY_SMI_TO_DOUBLE,
169 STORE_AND_GROW_TRANSITION_HOLEY_DOUBLE_TO_OBJECT,
170 STORE_NO_TRANSITION_IGNORE_OUT_OF_BOUNDS,
171 STORE_NO_TRANSITION_HANDLE_COW
158 }; 172 };
159 173
174
175 static const int kGrowICDelta = STORE_AND_GROW_NO_TRANSITION -
176 STANDARD_STORE;
177 STATIC_ASSERT(STANDARD_STORE == 0);
178 STATIC_ASSERT(kGrowICDelta ==
179 STORE_AND_GROW_TRANSITION_SMI_TO_OBJECT -
180 STORE_TRANSITION_SMI_TO_OBJECT);
181 STATIC_ASSERT(kGrowICDelta ==
182 STORE_AND_GROW_TRANSITION_SMI_TO_DOUBLE -
183 STORE_TRANSITION_SMI_TO_DOUBLE);
184 STATIC_ASSERT(kGrowICDelta ==
185 STORE_AND_GROW_TRANSITION_DOUBLE_TO_OBJECT -
186 STORE_TRANSITION_DOUBLE_TO_OBJECT);
187
188
189 static inline KeyedAccessStoreMode GetGrowStoreMode(
190 KeyedAccessStoreMode store_mode) {
191 if (store_mode < STORE_AND_GROW_NO_TRANSITION) {
192 store_mode = static_cast<KeyedAccessStoreMode>(
193 static_cast<int>(store_mode) + kGrowICDelta);
194 }
195 return store_mode;
196 }
197
198
199 static inline bool IsTransitionStoreMode(KeyedAccessStoreMode store_mode) {
200 return store_mode > STANDARD_STORE &&
201 store_mode <= STORE_AND_GROW_TRANSITION_HOLEY_DOUBLE_TO_OBJECT &&
202 store_mode != STORE_AND_GROW_NO_TRANSITION;
203 }
204
205
206 static inline KeyedAccessStoreMode GetNonTransitioningStoreMode(
207 KeyedAccessStoreMode store_mode) {
208 if (store_mode >= STORE_NO_TRANSITION_IGNORE_OUT_OF_BOUNDS) {
209 return store_mode;
210 }
211 if (store_mode >= STORE_AND_GROW_NO_TRANSITION) {
212 return STORE_AND_GROW_NO_TRANSITION;
213 }
214 return STANDARD_STORE;
215 }
216
217
218 static inline bool IsGrowStoreMode(KeyedAccessStoreMode store_mode) {
219 return store_mode >= STORE_AND_GROW_NO_TRANSITION &&
220 store_mode <= STORE_AND_GROW_TRANSITION_HOLEY_DOUBLE_TO_OBJECT;
221 }
222
223
160 // Setter that skips the write barrier if mode is SKIP_WRITE_BARRIER. 224 // Setter that skips the write barrier if mode is SKIP_WRITE_BARRIER.
161 enum WriteBarrierMode { SKIP_WRITE_BARRIER, UPDATE_WRITE_BARRIER }; 225 enum WriteBarrierMode { SKIP_WRITE_BARRIER, UPDATE_WRITE_BARRIER };
162 226
163 227
164 // PropertyNormalizationMode is used to specify whether to keep 228 // PropertyNormalizationMode is used to specify whether to keep
165 // inobject properties when normalizing properties of a JSObject. 229 // inobject properties when normalizing properties of a JSObject.
166 enum PropertyNormalizationMode { 230 enum PropertyNormalizationMode {
167 CLEAR_INOBJECT_PROPERTIES, 231 CLEAR_INOBJECT_PROPERTIES,
168 KEEP_INOBJECT_PROPERTIES 232 KEEP_INOBJECT_PROPERTIES
169 }; 233 };
(...skipping 4297 matching lines...) Expand 10 before | Expand all | Expand 10 after
4467 4531
4468 // Find the first map in an IC stub. 4532 // Find the first map in an IC stub.
4469 Map* FindFirstMap(); 4533 Map* FindFirstMap();
4470 void FindAllMaps(MapHandleList* maps); 4534 void FindAllMaps(MapHandleList* maps);
4471 4535
4472 // Find the first code in an IC stub. 4536 // Find the first code in an IC stub.
4473 Code* FindFirstCode(); 4537 Code* FindFirstCode();
4474 void FindAllCode(CodeHandleList* code_list, int length); 4538 void FindAllCode(CodeHandleList* code_list, int length);
4475 4539
4476 class ExtraICStateStrictMode: public BitField<StrictModeFlag, 0, 1> {}; 4540 class ExtraICStateStrictMode: public BitField<StrictModeFlag, 0, 1> {};
4477 class ExtraICStateKeyedAccessGrowMode: 4541 class ExtraICStateKeyedAccessStoreMode:
4478 public BitField<KeyedAccessGrowMode, 1, 1> {}; // NOLINT 4542 public BitField<KeyedAccessStoreMode, 1, 4> {}; // NOLINT
4479
4480 static const int kExtraICStateGrowModeShift = 1;
4481 4543
4482 static inline StrictModeFlag GetStrictMode(ExtraICState extra_ic_state) { 4544 static inline StrictModeFlag GetStrictMode(ExtraICState extra_ic_state) {
4483 return ExtraICStateStrictMode::decode(extra_ic_state); 4545 return ExtraICStateStrictMode::decode(extra_ic_state);
4484 } 4546 }
4485 4547
4486 static inline KeyedAccessGrowMode GetKeyedAccessGrowMode( 4548 static inline KeyedAccessStoreMode GetKeyedAccessStoreMode(
4487 ExtraICState extra_ic_state) { 4549 ExtraICState extra_ic_state) {
4488 return ExtraICStateKeyedAccessGrowMode::decode(extra_ic_state); 4550 return ExtraICStateKeyedAccessStoreMode::decode(extra_ic_state);
4489 } 4551 }
4490 4552
4491 static inline ExtraICState ComputeExtraICState( 4553 static inline ExtraICState ComputeExtraICState(
4492 KeyedAccessGrowMode grow_mode, 4554 KeyedAccessStoreMode store_mode,
4493 StrictModeFlag strict_mode) { 4555 StrictModeFlag strict_mode) {
4494 return ExtraICStateKeyedAccessGrowMode::encode(grow_mode) | 4556 return ExtraICStateKeyedAccessStoreMode::encode(store_mode) |
4495 ExtraICStateStrictMode::encode(strict_mode); 4557 ExtraICStateStrictMode::encode(strict_mode);
4496 } 4558 }
4497 4559
4498 // Flags operations. 4560 // Flags operations.
4499 static inline Flags ComputeFlags( 4561 static inline Flags ComputeFlags(
4500 Kind kind, 4562 Kind kind,
4501 InlineCacheState ic_state = UNINITIALIZED, 4563 InlineCacheState ic_state = UNINITIALIZED,
4502 ExtraICState extra_ic_state = kNoExtraICState, 4564 ExtraICState extra_ic_state = kNoExtraICState,
4503 StubType type = NORMAL, 4565 StubType type = NORMAL,
4504 int argc = -1, 4566 int argc = -1,
(...skipping 143 matching lines...) Expand 10 before | Expand all | Expand 10 after
4648 class FullCodeFlagsIsCompiledOptimizable: public BitField<bool, 2, 1> {}; 4710 class FullCodeFlagsIsCompiledOptimizable: public BitField<bool, 2, 1> {};
4649 4711
4650 static const int kAllowOSRAtLoopNestingLevelOffset = kFullCodeFlags + 1; 4712 static const int kAllowOSRAtLoopNestingLevelOffset = kFullCodeFlags + 1;
4651 static const int kProfilerTicksOffset = kAllowOSRAtLoopNestingLevelOffset + 1; 4713 static const int kProfilerTicksOffset = kAllowOSRAtLoopNestingLevelOffset + 1;
4652 4714
4653 // Flags layout. BitField<type, shift, size>. 4715 // Flags layout. BitField<type, shift, size>.
4654 class ICStateField: public BitField<InlineCacheState, 0, 3> {}; 4716 class ICStateField: public BitField<InlineCacheState, 0, 3> {};
4655 class TypeField: public BitField<StubType, 3, 3> {}; 4717 class TypeField: public BitField<StubType, 3, 3> {};
4656 class CacheHolderField: public BitField<InlineCacheHolderFlag, 6, 1> {}; 4718 class CacheHolderField: public BitField<InlineCacheHolderFlag, 6, 1> {};
4657 class KindField: public BitField<Kind, 7, 4> {}; 4719 class KindField: public BitField<Kind, 7, 4> {};
4658 class ExtraICStateField: public BitField<ExtraICState, 11, 2> {}; 4720 class ExtraICStateField: public BitField<ExtraICState, 11, 5> {};
4659 class IsPregeneratedField: public BitField<bool, 13, 1> {}; 4721 class IsPregeneratedField: public BitField<bool, 16, 1> {};
4660 4722
4661 // KindSpecificFlags1 layout (STUB and OPTIMIZED_FUNCTION) 4723 // KindSpecificFlags1 layout (STUB and OPTIMIZED_FUNCTION)
4662 static const int kStackSlotsFirstBit = 0; 4724 static const int kStackSlotsFirstBit = 0;
4663 static const int kStackSlotsBitCount = 24; 4725 static const int kStackSlotsBitCount = 24;
4664 static const int kUnaryOpTypeFirstBit = 4726 static const int kUnaryOpTypeFirstBit =
4665 kStackSlotsFirstBit + kStackSlotsBitCount; 4727 kStackSlotsFirstBit + kStackSlotsBitCount;
4666 static const int kUnaryOpTypeBitCount = 3; 4728 static const int kUnaryOpTypeBitCount = 3;
4667 static const int kToBooleanStateFirstBit = 4729 static const int kToBooleanStateFirstBit =
4668 kStackSlotsFirstBit + kStackSlotsBitCount; 4730 kStackSlotsFirstBit + kStackSlotsBitCount;
4669 static const int kToBooleanStateBitCount = 8; 4731 static const int kToBooleanStateBitCount = 8;
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
4706 class SafepointTableOffsetField: public BitField<int, 4768 class SafepointTableOffsetField: public BitField<int,
4707 kSafepointTableOffsetFirstBit, 4769 kSafepointTableOffsetFirstBit,
4708 kSafepointTableOffsetBitCount> {}; // NOLINT 4770 kSafepointTableOffsetBitCount> {}; // NOLINT
4709 class StubMajorKeyField: public BitField<int, 4771 class StubMajorKeyField: public BitField<int,
4710 kStubMajorKeyFirstBit, kStubMajorKeyBits> {}; // NOLINT 4772 kStubMajorKeyFirstBit, kStubMajorKeyBits> {}; // NOLINT
4711 4773
4712 // KindSpecificFlags2 layout (FUNCTION) 4774 // KindSpecificFlags2 layout (FUNCTION)
4713 class StackCheckTableOffsetField: public BitField<int, 0, 31> {}; 4775 class StackCheckTableOffsetField: public BitField<int, 0, 31> {};
4714 4776
4715 // Signed field cannot be encoded using the BitField class. 4777 // Signed field cannot be encoded using the BitField class.
4716 static const int kArgumentsCountShift = 14; 4778 static const int kArgumentsCountShift = 17;
4717 static const int kArgumentsCountMask = ~((1 << kArgumentsCountShift) - 1); 4779 static const int kArgumentsCountMask = ~((1 << kArgumentsCountShift) - 1);
4718 4780
4719 // This constant should be encodable in an ARM instruction. 4781 // This constant should be encodable in an ARM instruction.
4720 static const int kFlagsNotUsedInLookup = 4782 static const int kFlagsNotUsedInLookup =
4721 TypeField::kMask | CacheHolderField::kMask; 4783 TypeField::kMask | CacheHolderField::kMask;
4722 4784
4723 private: 4785 private:
4724 friend class RelocIterator; 4786 friend class RelocIterator;
4725 4787
4726 // Code aging 4788 // Code aging
(...skipping 4372 matching lines...) Expand 10 before | Expand all | Expand 10 after
9099 } else { 9161 } else {
9100 value &= ~(1 << bit_position); 9162 value &= ~(1 << bit_position);
9101 } 9163 }
9102 return value; 9164 return value;
9103 } 9165 }
9104 }; 9166 };
9105 9167
9106 } } // namespace v8::internal 9168 } } // namespace v8::internal
9107 9169
9108 #endif // V8_OBJECTS_H_ 9170 #endif // V8_OBJECTS_H_
OLDNEW
« no previous file with comments | « src/mips/stub-cache-mips.cc ('k') | src/stub-cache.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698