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.
Review URL: http://codereview.chromium.org/6576

git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@469 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
This commit is contained in:
kasperl@chromium.org 2008-10-08 09:01:10 +00:00
parent 079a607442
commit 614d78367f

View File

@ -733,10 +733,20 @@ HeapObject* Heap::MigrateObject(HeapObject** source_p,
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));