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
-~----------~----~----~----~------~----~------~--~---

Reply via email to