Chromium Code Reviews| OLD | NEW |
|---|---|
| 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 <iosfwd> | 8 #include <iosfwd> |
| 9 | 9 |
| 10 #include "src/allocation.h" | 10 #include "src/allocation.h" |
| (...skipping 5239 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 5250 // [ic_age]: Inline caching age: the value of the Heap::global_ic_age | 5250 // [ic_age]: Inline caching age: the value of the Heap::global_ic_age |
| 5251 // at the moment when this object was created. | 5251 // at the moment when this object was created. |
| 5252 inline void set_ic_age(int count); | 5252 inline void set_ic_age(int count); |
| 5253 inline int ic_age() const; | 5253 inline int ic_age() const; |
| 5254 | 5254 |
| 5255 // [prologue_offset]: Offset of the function prologue, used for aging | 5255 // [prologue_offset]: Offset of the function prologue, used for aging |
| 5256 // FUNCTIONs and OPTIMIZED_FUNCTIONs. | 5256 // FUNCTIONs and OPTIMIZED_FUNCTIONs. |
| 5257 inline int prologue_offset() const; | 5257 inline int prologue_offset() const; |
| 5258 inline void set_prologue_offset(int offset); | 5258 inline void set_prologue_offset(int offset); |
| 5259 | 5259 |
| 5260 // [constant_pool offset]: Offset of the constant pool. | |
| 5261 // Valid for FLAG_enable_embedded_constant_pool only | |
| 5262 inline int constant_pool_offset() const; | |
| 5263 inline void set_constant_pool_offset(int offset); | |
| 5264 | |
| 5260 // Unchecked accessors to be used during GC. | 5265 // Unchecked accessors to be used during GC. |
| 5261 inline ByteArray* unchecked_relocation_info(); | 5266 inline ByteArray* unchecked_relocation_info(); |
| 5262 | 5267 |
| 5263 inline int relocation_size(); | 5268 inline int relocation_size(); |
| 5264 | 5269 |
| 5265 // [flags]: Various code flags. | 5270 // [flags]: Various code flags. |
| 5266 inline Flags flags(); | 5271 inline Flags flags(); |
| 5267 inline void set_flags(Flags flags); | 5272 inline void set_flags(Flags flags); |
| 5268 | 5273 |
| 5269 // [flags]: Access to specific code flags. | 5274 // [flags]: Access to specific code flags. |
| (...skipping 117 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 5387 inline bool has_function_cache(); | 5392 inline bool has_function_cache(); |
| 5388 inline void set_has_function_cache(bool flag); | 5393 inline void set_has_function_cache(bool flag); |
| 5389 | 5394 |
| 5390 | 5395 |
| 5391 // [marked_for_deoptimization]: For kind OPTIMIZED_FUNCTION tells whether | 5396 // [marked_for_deoptimization]: For kind OPTIMIZED_FUNCTION tells whether |
| 5392 // the code is going to be deoptimized because of dead embedded maps. | 5397 // the code is going to be deoptimized because of dead embedded maps. |
| 5393 inline bool marked_for_deoptimization(); | 5398 inline bool marked_for_deoptimization(); |
| 5394 inline void set_marked_for_deoptimization(bool flag); | 5399 inline void set_marked_for_deoptimization(bool flag); |
| 5395 | 5400 |
| 5396 // [constant_pool]: The constant pool for this function. | 5401 // [constant_pool]: The constant pool for this function. |
| 5397 inline ConstantPoolArray* constant_pool(); | 5402 inline Address constant_pool(); |
| 5403 // Valid for FLAG_enable_ool_constant_pool only | |
| 5398 inline void set_constant_pool(Object* constant_pool); | 5404 inline void set_constant_pool(Object* constant_pool); |
| 5399 | 5405 |
| 5400 // Get the safepoint entry for the given pc. | 5406 // Get the safepoint entry for the given pc. |
| 5401 SafepointEntry GetSafepointEntry(Address pc); | 5407 SafepointEntry GetSafepointEntry(Address pc); |
| 5402 | 5408 |
| 5403 // Find an object in a stub with a specified map | 5409 // Find an object in a stub with a specified map |
| 5404 Object* FindNthObject(int n, Map* match_map); | 5410 Object* FindNthObject(int n, Map* match_map); |
| 5405 | 5411 |
| 5406 // Find the first allocation site in an IC stub. | 5412 // Find the first allocation site in an IC stub. |
| 5407 AllocationSite* FindFirstAllocationSite(); | 5413 AllocationSite* FindFirstAllocationSite(); |
| (...skipping 182 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 5590 | 5596 |
| 5591 static inline bool IsWeakObjectInOptimizedCode(Object* object); | 5597 static inline bool IsWeakObjectInOptimizedCode(Object* object); |
| 5592 | 5598 |
| 5593 static Handle<WeakCell> WeakCellFor(Handle<Code> code); | 5599 static Handle<WeakCell> WeakCellFor(Handle<Code> code); |
| 5594 WeakCell* CachedWeakCell(); | 5600 WeakCell* CachedWeakCell(); |
| 5595 | 5601 |
| 5596 // Max loop nesting marker used to postpose OSR. We don't take loop | 5602 // Max loop nesting marker used to postpose OSR. We don't take loop |
| 5597 // nesting that is deeper than 5 levels into account. | 5603 // nesting that is deeper than 5 levels into account. |
| 5598 static const int kMaxLoopNestingMarker = 6; | 5604 static const int kMaxLoopNestingMarker = 6; |
| 5599 | 5605 |
| 5606 static const int kOOLCPSize = | |
| 5607 FLAG_enable_ool_constant_pool ? kPointerSize : 0; | |
| 5608 static const int kECPSize = FLAG_enable_embedded_constant_pool ? kIntSize : 0; | |
| 5609 | |
| 5600 // Layout description. | 5610 // Layout description. |
| 5601 static const int kRelocationInfoOffset = HeapObject::kHeaderSize; | 5611 static const int kRelocationInfoOffset = HeapObject::kHeaderSize; |
| 5602 static const int kHandlerTableOffset = kRelocationInfoOffset + kPointerSize; | 5612 static const int kHandlerTableOffset = kRelocationInfoOffset + kPointerSize; |
| 5603 static const int kDeoptimizationDataOffset = | 5613 static const int kDeoptimizationDataOffset = |
| 5604 kHandlerTableOffset + kPointerSize; | 5614 kHandlerTableOffset + kPointerSize; |
| 5605 // For FUNCTION kind, we store the type feedback info here. | 5615 // For FUNCTION kind, we store the type feedback info here. |
| 5606 static const int kTypeFeedbackInfoOffset = | 5616 static const int kTypeFeedbackInfoOffset = |
| 5607 kDeoptimizationDataOffset + kPointerSize; | 5617 kDeoptimizationDataOffset + kPointerSize; |
| 5608 static const int kNextCodeLinkOffset = kTypeFeedbackInfoOffset + kPointerSize; | 5618 static const int kNextCodeLinkOffset = kTypeFeedbackInfoOffset + kPointerSize; |
| 5609 static const int kGCMetadataOffset = kNextCodeLinkOffset + kPointerSize; | 5619 static const int kGCMetadataOffset = kNextCodeLinkOffset + kPointerSize; |
| 5610 static const int kInstructionSizeOffset = kGCMetadataOffset + kPointerSize; | 5620 static const int kInstructionSizeOffset = kGCMetadataOffset + kPointerSize; |
| 5611 static const int kICAgeOffset = kInstructionSizeOffset + kIntSize; | 5621 static const int kICAgeOffset = kInstructionSizeOffset + kIntSize; |
| 5612 static const int kFlagsOffset = kICAgeOffset + kIntSize; | 5622 static const int kFlagsOffset = kICAgeOffset + kIntSize; |
| 5613 static const int kKindSpecificFlags1Offset = kFlagsOffset + kIntSize; | 5623 static const int kKindSpecificFlags1Offset = kFlagsOffset + kIntSize; |
| 5614 static const int kKindSpecificFlags2Offset = | 5624 static const int kKindSpecificFlags2Offset = |
| 5615 kKindSpecificFlags1Offset + kIntSize; | 5625 kKindSpecificFlags1Offset + kIntSize; |
| 5616 // Note: We might be able to squeeze this into the flags above. | 5626 // Note: We might be able to squeeze this into the flags above. |
| 5617 static const int kPrologueOffset = kKindSpecificFlags2Offset + kIntSize; | 5627 static const int kPrologueOffset = kKindSpecificFlags2Offset + kIntSize; |
| 5618 static const int kConstantPoolOffset = kPrologueOffset + kIntSize; | 5628 static const int kOOLConstantPoolOffset = kPrologueOffset + kIntSize; |
|
rmcilroy
2015/04/08 12:38:55
Let's just have a single field here which points t
MTBrandyberry
2015/05/07 20:38:32
Acknowledged.
| |
| 5629 static const int kEmbeddedConstantPoolOffset = | |
| 5630 kOOLConstantPoolOffset + kOOLCPSize; | |
| 5631 static const int kHeaderPaddingStart = kEmbeddedConstantPoolOffset + kECPSize; | |
| 5619 | 5632 |
| 5620 static const int kHeaderPaddingStart = kConstantPoolOffset + kPointerSize; | 5633 static const int kConstantPoolOffset = |
| 5634 kOOLCPSize ? kOOLConstantPoolOffset | |
| 5635 : (kECPSize ? kEmbeddedConstantPoolOffset : 0); | |
| 5621 | 5636 |
| 5622 // Add padding to align the instruction start following right after | 5637 // Add padding to align the instruction start following right after |
| 5623 // the Code object header. | 5638 // the Code object header. |
| 5624 static const int kHeaderSize = | 5639 static const int kHeaderSize = |
| 5625 (kHeaderPaddingStart + kCodeAlignmentMask) & ~kCodeAlignmentMask; | 5640 (kHeaderPaddingStart + kCodeAlignmentMask) & ~kCodeAlignmentMask; |
| 5626 // Ensure that the slot for the constant pool pointer is aligned. | 5641 // Ensure that the slot for the constant pool pointer is aligned. |
| 5627 STATIC_ASSERT((kConstantPoolOffset & kPointerAlignmentMask) == 0); | 5642 STATIC_ASSERT(kOOLCPSize == 0 || |
| 5643 (kOOLConstantPoolOffset & kPointerAlignmentMask) == 0); | |
| 5628 | 5644 |
| 5629 // Byte offsets within kKindSpecificFlags1Offset. | 5645 // Byte offsets within kKindSpecificFlags1Offset. |
| 5630 static const int kOptimizableOffset = kKindSpecificFlags1Offset; | 5646 static const int kOptimizableOffset = kKindSpecificFlags1Offset; |
| 5631 | 5647 |
| 5632 static const int kFullCodeFlags = kOptimizableOffset + 1; | 5648 static const int kFullCodeFlags = kOptimizableOffset + 1; |
| 5633 class FullCodeFlagsHasDeoptimizationSupportField: | 5649 class FullCodeFlagsHasDeoptimizationSupportField: |
| 5634 public BitField<bool, 0, 1> {}; // NOLINT | 5650 public BitField<bool, 0, 1> {}; // NOLINT |
| 5635 class FullCodeFlagsHasDebugBreakSlotsField: public BitField<bool, 1, 1> {}; | 5651 class FullCodeFlagsHasDebugBreakSlotsField: public BitField<bool, 1, 1> {}; |
| 5636 class FullCodeFlagsIsCompiledOptimizable: public BitField<bool, 2, 1> {}; | 5652 class FullCodeFlagsIsCompiledOptimizable: public BitField<bool, 2, 1> {}; |
| 5637 class FullCodeFlagsHasRelocInfoForSerialization | 5653 class FullCodeFlagsHasRelocInfoForSerialization |
| (...skipping 5434 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 11072 } else { | 11088 } else { |
| 11073 value &= ~(1 << bit_position); | 11089 value &= ~(1 << bit_position); |
| 11074 } | 11090 } |
| 11075 return value; | 11091 return value; |
| 11076 } | 11092 } |
| 11077 }; | 11093 }; |
| 11078 | 11094 |
| 11079 } } // namespace v8::internal | 11095 } } // namespace v8::internal |
| 11080 | 11096 |
| 11081 #endif // V8_OBJECTS_H_ | 11097 #endif // V8_OBJECTS_H_ |
| OLD | NEW |