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

Side by Side Diff: src/objects.h

Issue 400523007: Cache IC handlers on the prototype's map if possible (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: addressed comment Created 6 years, 5 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/ic-inl.h ('k') | src/objects.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 "src/allocation.h" 8 #include "src/allocation.h"
9 #include "src/assert-scope.h" 9 #include "src/assert-scope.h"
10 #include "src/builtins.h" 10 #include "src/builtins.h"
(...skipping 5646 matching lines...) Expand 10 before | Expand all | Expand 10 after
5657 Map* FindFirstMap(); 5657 Map* FindFirstMap();
5658 void FindAllMaps(MapHandleList* maps); 5658 void FindAllMaps(MapHandleList* maps);
5659 5659
5660 // Find the first handler in an IC stub. 5660 // Find the first handler in an IC stub.
5661 Code* FindFirstHandler(); 5661 Code* FindFirstHandler();
5662 5662
5663 // Find |length| handlers and put them into |code_list|. Returns false if not 5663 // Find |length| handlers and put them into |code_list|. Returns false if not
5664 // enough handlers can be found. 5664 // enough handlers can be found.
5665 bool FindHandlers(CodeHandleList* code_list, int length = -1); 5665 bool FindHandlers(CodeHandleList* code_list, int length = -1);
5666 5666
5667 // Find the handler for |map|.
5668 MaybeHandle<Code> FindHandlerForMap(Map* map);
5669
5667 // Find the first name in an IC stub. 5670 // Find the first name in an IC stub.
5668 Name* FindFirstName(); 5671 Name* FindFirstName();
5669 5672
5670 class FindAndReplacePattern; 5673 class FindAndReplacePattern;
5671 // For each (map-to-find, object-to-replace) pair in the pattern, this 5674 // For each (map-to-find, object-to-replace) pair in the pattern, this
5672 // function replaces the corresponding placeholder in the code with the 5675 // function replaces the corresponding placeholder in the code with the
5673 // object-to-replace. The function assumes that pairs in the pattern come in 5676 // object-to-replace. The function assumes that pairs in the pattern come in
5674 // the same order as the placeholders in the code. 5677 // the same order as the placeholders in the code.
5675 void FindAndReplace(const FindAndReplacePattern& pattern); 5678 void FindAndReplace(const FindAndReplacePattern& pattern);
5676 5679
5677 // The entire code object including its header is copied verbatim to the 5680 // The entire code object including its header is copied verbatim to the
5678 // snapshot so that it can be written in one, fast, memcpy during 5681 // snapshot so that it can be written in one, fast, memcpy during
5679 // deserialization. The deserializer will overwrite some pointers, rather 5682 // deserialization. The deserializer will overwrite some pointers, rather
5680 // like a runtime linker, but the random allocation addresses used in the 5683 // like a runtime linker, but the random allocation addresses used in the
5681 // mksnapshot process would still be present in the unlinked snapshot data, 5684 // mksnapshot process would still be present in the unlinked snapshot data,
5682 // which would make snapshot production non-reproducible. This method wipes 5685 // which would make snapshot production non-reproducible. This method wipes
5683 // out the to-be-overwritten header data for reproducible snapshots. 5686 // out the to-be-overwritten header data for reproducible snapshots.
5684 inline void WipeOutHeader(); 5687 inline void WipeOutHeader();
5685 5688
5686 // Flags operations. 5689 // Flags operations.
5687 static inline Flags ComputeFlags( 5690 static inline Flags ComputeFlags(
5688 Kind kind, 5691 Kind kind, InlineCacheState ic_state = UNINITIALIZED,
5689 InlineCacheState ic_state = UNINITIALIZED, 5692 ExtraICState extra_ic_state = kNoExtraICState, StubType type = NORMAL,
5690 ExtraICState extra_ic_state = kNoExtraICState, 5693 CacheHolderFlag holder = kCacheOnReceiver);
5691 StubType type = NORMAL,
5692 InlineCacheHolderFlag holder = OWN_MAP);
5693 5694
5694 static inline Flags ComputeMonomorphicFlags( 5695 static inline Flags ComputeMonomorphicFlags(
5695 Kind kind, 5696 Kind kind, ExtraICState extra_ic_state = kNoExtraICState,
5696 ExtraICState extra_ic_state = kNoExtraICState, 5697 CacheHolderFlag holder = kCacheOnReceiver, StubType type = NORMAL);
5697 InlineCacheHolderFlag holder = OWN_MAP,
5698 StubType type = NORMAL);
5699 5698
5700 static inline Flags ComputeHandlerFlags( 5699 static inline Flags ComputeHandlerFlags(
5701 Kind handler_kind, 5700 Kind handler_kind, StubType type = NORMAL,
5702 StubType type = NORMAL, 5701 CacheHolderFlag holder = kCacheOnReceiver);
5703 InlineCacheHolderFlag holder = OWN_MAP);
5704 5702
5705 static inline InlineCacheState ExtractICStateFromFlags(Flags flags); 5703 static inline InlineCacheState ExtractICStateFromFlags(Flags flags);
5706 static inline StubType ExtractTypeFromFlags(Flags flags); 5704 static inline StubType ExtractTypeFromFlags(Flags flags);
5705 static inline CacheHolderFlag ExtractCacheHolderFromFlags(Flags flags);
5707 static inline Kind ExtractKindFromFlags(Flags flags); 5706 static inline Kind ExtractKindFromFlags(Flags flags);
5708 static inline InlineCacheHolderFlag ExtractCacheHolderFromFlags(Flags flags);
5709 static inline ExtraICState ExtractExtraICStateFromFlags(Flags flags); 5707 static inline ExtraICState ExtractExtraICStateFromFlags(Flags flags);
5710 5708
5711 static inline Flags RemoveTypeFromFlags(Flags flags); 5709 static inline Flags RemoveTypeFromFlags(Flags flags);
5710 static inline Flags RemoveTypeAndHolderFromFlags(Flags flags);
5712 5711
5713 // Convert a target address into a code object. 5712 // Convert a target address into a code object.
5714 static inline Code* GetCodeFromTargetAddress(Address address); 5713 static inline Code* GetCodeFromTargetAddress(Address address);
5715 5714
5716 // Convert an entry address into an object. 5715 // Convert an entry address into an object.
5717 static inline Object* GetObjectFromEntryAddress(Address location_of_address); 5716 static inline Object* GetObjectFromEntryAddress(Address location_of_address);
5718 5717
5719 // Returns the address of the first instruction. 5718 // Returns the address of the first instruction.
5720 inline byte* instruction_start(); 5719 inline byte* instruction_start();
5721 5720
(...skipping 145 matching lines...) Expand 10 before | Expand all | Expand 10 after
5867 class FullCodeFlagsHasDeoptimizationSupportField: 5866 class FullCodeFlagsHasDeoptimizationSupportField:
5868 public BitField<bool, 0, 1> {}; // NOLINT 5867 public BitField<bool, 0, 1> {}; // NOLINT
5869 class FullCodeFlagsHasDebugBreakSlotsField: public BitField<bool, 1, 1> {}; 5868 class FullCodeFlagsHasDebugBreakSlotsField: public BitField<bool, 1, 1> {};
5870 class FullCodeFlagsIsCompiledOptimizable: public BitField<bool, 2, 1> {}; 5869 class FullCodeFlagsIsCompiledOptimizable: public BitField<bool, 2, 1> {};
5871 5870
5872 static const int kProfilerTicksOffset = kFullCodeFlags + 1; 5871 static const int kProfilerTicksOffset = kFullCodeFlags + 1;
5873 5872
5874 // Flags layout. BitField<type, shift, size>. 5873 // Flags layout. BitField<type, shift, size>.
5875 class ICStateField: public BitField<InlineCacheState, 0, 3> {}; 5874 class ICStateField: public BitField<InlineCacheState, 0, 3> {};
5876 class TypeField: public BitField<StubType, 3, 1> {}; 5875 class TypeField: public BitField<StubType, 3, 1> {};
5877 class CacheHolderField: public BitField<InlineCacheHolderFlag, 5, 1> {}; 5876 class CacheHolderField : public BitField<CacheHolderFlag, 4, 2> {};
5878 class KindField: public BitField<Kind, 6, 4> {}; 5877 class KindField: public BitField<Kind, 6, 4> {};
5879 // TODO(bmeurer): Bit 10 is available for free use. :-) 5878 // TODO(bmeurer): Bit 10 is available for free use. :-)
5880 class ExtraICStateField: public BitField<ExtraICState, 11, 5879 class ExtraICStateField: public BitField<ExtraICState, 11,
5881 PlatformSmiTagging::kSmiValueSize - 11 + 1> {}; // NOLINT 5880 PlatformSmiTagging::kSmiValueSize - 11 + 1> {}; // NOLINT
5882 5881
5883 // KindSpecificFlags1 layout (STUB and OPTIMIZED_FUNCTION) 5882 // KindSpecificFlags1 layout (STUB and OPTIMIZED_FUNCTION)
5884 static const int kStackSlotsFirstBit = 0; 5883 static const int kStackSlotsFirstBit = 0;
5885 static const int kStackSlotsBitCount = 24; 5884 static const int kStackSlotsBitCount = 24;
5886 static const int kHasFunctionCacheFirstBit = 5885 static const int kHasFunctionCacheFirstBit =
5887 kStackSlotsFirstBit + kStackSlotsBitCount; 5886 kStackSlotsFirstBit + kStackSlotsBitCount;
(...skipping 5352 matching lines...) Expand 10 before | Expand all | Expand 10 after
11240 } else { 11239 } else {
11241 value &= ~(1 << bit_position); 11240 value &= ~(1 << bit_position);
11242 } 11241 }
11243 return value; 11242 return value;
11244 } 11243 }
11245 }; 11244 };
11246 11245
11247 } } // namespace v8::internal 11246 } } // namespace v8::internal
11248 11247
11249 #endif // V8_OBJECTS_H_ 11248 #endif // V8_OBJECTS_H_
OLDNEW
« no previous file with comments | « src/ic-inl.h ('k') | src/objects.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698