From: svenpanne@chromium.org Date: Thu, 21 Feb 2013 14:02:52 +0000 (+0000) Subject: Forced inlining of some GC-related methods. X-Git-Tag: upstream/4.7.83~15045 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=54b4b1ecc2b023e6104a867d04d34effa424734d;p=platform%2Fupstream%2Fv8.git Forced inlining of some GC-related methods. The selection of methods were driven by GCC's -Winline plus some benchmarking. On ia32, the additional amount of code is roughly 63kB (= 0.07% of Chrome ;-). BUG=v8:1607 Review URL: https://codereview.chromium.org/12338002 git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@13710 ce2b1a6d-e550-0410-aec6-3dcde31c8c00 --- diff --git a/src/heap.h b/src/heap.h index 67152c0..eaa4cd0 100644 --- a/src/heap.h +++ b/src/heap.h @@ -1373,10 +1373,10 @@ class Heap { MUST_USE_RESULT MaybeObject* CreateSymbol(String* str); // Write barrier support for address[offset] = o. - inline void RecordWrite(Address address, int offset); + INLINE(void RecordWrite(Address address, int offset)); // Write barrier support for address[start : start + len[ = o. - inline void RecordWrites(Address address, int start, int len); + INLINE(void RecordWrites(Address address, int start, int len)); // Given an address occupied by a live code object, return that object. Object* FindCodeObject(Address a); diff --git a/src/mark-compact.cc b/src/mark-compact.cc index 6a21419..6acf5f2 100644 --- a/src/mark-compact.cc +++ b/src/mark-compact.cc @@ -1293,9 +1293,9 @@ class MarkCompactMarkingVisitor // Visit all unmarked objects pointed to by [start, end). // Returns false if the operation fails (lack of stack space). - static inline bool VisitUnmarkedObjects(Heap* heap, + INLINE(static bool VisitUnmarkedObjects(Heap* heap, Object** start, - Object** end) { + Object** end)) { // Return false is we are close to the stack limit. StackLimitCheck check(heap->isolate()); if (check.HasOverflowed()) return false; diff --git a/src/mark-compact.h b/src/mark-compact.h index 718398b..38ea4ed 100644 --- a/src/mark-compact.h +++ b/src/mark-compact.h @@ -53,59 +53,59 @@ class Marking { : heap_(heap) { } - static inline MarkBit MarkBitFrom(Address addr); + INLINE(static MarkBit MarkBitFrom(Address addr)); - static inline MarkBit MarkBitFrom(HeapObject* obj) { + INLINE(static MarkBit MarkBitFrom(HeapObject* obj)) { return MarkBitFrom(reinterpret_cast
(obj)); } // Impossible markbits: 01 static const char* kImpossibleBitPattern; - static inline bool IsImpossible(MarkBit mark_bit) { + INLINE(static bool IsImpossible(MarkBit mark_bit)) { return !mark_bit.Get() && mark_bit.Next().Get(); } // Black markbits: 10 - this is required by the sweeper. static const char* kBlackBitPattern; - static inline bool IsBlack(MarkBit mark_bit) { + INLINE(static bool IsBlack(MarkBit mark_bit)) { return mark_bit.Get() && !mark_bit.Next().Get(); } // White markbits: 00 - this is required by the mark bit clearer. static const char* kWhiteBitPattern; - static inline bool IsWhite(MarkBit mark_bit) { + INLINE(static bool IsWhite(MarkBit mark_bit)) { return !mark_bit.Get(); } // Grey markbits: 11 static const char* kGreyBitPattern; - static inline bool IsGrey(MarkBit mark_bit) { + INLINE(static bool IsGrey(MarkBit mark_bit)) { return mark_bit.Get() && mark_bit.Next().Get(); } - static inline void MarkBlack(MarkBit mark_bit) { + INLINE(static void MarkBlack(MarkBit mark_bit)) { mark_bit.Set(); mark_bit.Next().Clear(); } - static inline void BlackToGrey(MarkBit markbit) { + INLINE(static void BlackToGrey(MarkBit markbit)) { markbit.Next().Set(); } - static inline void WhiteToGrey(MarkBit markbit) { + INLINE(static void WhiteToGrey(MarkBit markbit)) { markbit.Set(); markbit.Next().Set(); } - static inline void GreyToBlack(MarkBit markbit) { + INLINE(static void GreyToBlack(MarkBit markbit)) { markbit.Next().Clear(); } - static inline void BlackToGrey(HeapObject* obj) { + INLINE(static void BlackToGrey(HeapObject* obj)) { BlackToGrey(MarkBitFrom(obj)); } - static inline void AnyToGrey(MarkBit markbit) { + INLINE(static void AnyToGrey(MarkBit markbit)) { markbit.Set(); markbit.Next().Set(); } @@ -194,7 +194,7 @@ class MarkingDeque { // Push the (marked) object on the marking stack if there is room, // otherwise mark the object as overflowed and wait for a rescan of the // heap. - inline void PushBlack(HeapObject* object) { + INLINE(void PushBlack(HeapObject* object)) { ASSERT(object->IsHeapObject()); if (IsFull()) { Marking::BlackToGrey(object); @@ -206,7 +206,7 @@ class MarkingDeque { } } - inline void PushGrey(HeapObject* object) { + INLINE(void PushGrey(HeapObject* object)) { ASSERT(object->IsHeapObject()); if (IsFull()) { SetOverflowed(); @@ -216,7 +216,7 @@ class MarkingDeque { } } - inline HeapObject* Pop() { + INLINE(HeapObject* Pop()) { ASSERT(!IsEmpty()); top_ = ((top_ - 1) & mask_); HeapObject* object = array_[top_]; @@ -224,7 +224,7 @@ class MarkingDeque { return object; } - inline void UnshiftGrey(HeapObject* object) { + INLINE(void UnshiftGrey(HeapObject* object)) { ASSERT(object->IsHeapObject()); if (IsFull()) { SetOverflowed(); @@ -366,10 +366,10 @@ class SlotsBuffer { return buffer != NULL && buffer->chain_length_ >= kChainLengthThreshold; } - static bool AddTo(SlotsBufferAllocator* allocator, - SlotsBuffer** buffer_address, - ObjectSlot slot, - AdditionMode mode) { + INLINE(static bool AddTo(SlotsBufferAllocator* allocator, + SlotsBuffer** buffer_address, + ObjectSlot slot, + AdditionMode mode)) { SlotsBuffer* buffer = *buffer_address; if (buffer == NULL || buffer->IsFull()) { if (mode == FAIL_ON_OVERFLOW && ChainLengthThresholdReached(buffer)) { @@ -634,7 +634,7 @@ class MarkCompactCollector { IsEvacuationCandidate(); } - void EvictEvacuationCandidate(Page* page) { + INLINE(void EvictEvacuationCandidate(Page* page)) { if (FLAG_trace_fragmentation) { PrintF("Page %p is too popular. Disabling evacuation.\n", reinterpret_cast(page));