Reviewers: Kevin Millikin, Description: Minor adjustments to the object migration code: When copying large objects we use memcpy. If this turns out to be a wash on the benchmarks, I'd be happy to rip it out again.
Please review this at http://codereview.chromium.org/6576 Affected files: M src/heap.cc Index: src/heap.cc =================================================================== --- src/heap.cc (revision 465) +++ src/heap.cc (working copy) @@ -733,11 +733,21 @@ int size) { void** src = reinterpret_cast<void**>((*source_p)->address()); void** dst = reinterpret_cast<void**>(target->address()); - int counter = size/kPointerSize - 1; - do { - *dst++ = *src++; - } while (counter-- > 0); + // Use block copying memcpy if the object we're migrating is big + // enough to justify the extra call/setup overhead. + static const int kBlockCopyLimit = 16 * kPointerSize; + + if (size >= kBlockCopyLimit) { + memcpy(dst, src, size); + } else { + int remaining = size / kPointerSize; + do { + remaining--; + *dst++ = *src++; + } while (remaining > 0); + } + // Set the forwarding address. (*source_p)->set_map_word(MapWord::FromForwardingAddress(target)); --~--~---------~--~----~------------~-------~--~----~ v8-dev mailing list [email protected] http://groups.google.com/group/v8-dev -~----------~----~----~----~------~----~------~--~---
