Won't memcpy always be an inlined intrinsic?

On Wed, Oct 8, 2008 at 10:38 AM, Kevin Millikin <[EMAIL PROTECTED]> wrote:
> LGTM.
>
> On Wed, Oct 8, 2008 at 10:31 AM, <[EMAIL PROTECTED]> wrote:
>>
>> 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));
>>
>>
>>
>>
>>
>
>
>
> --
> Google Denmark ApS
> CVR nr. 28 86 69 84
> c/o Philip & Partners, 7 Vognmagergade, P.O. Box 2227, DK-1018 Copenhagen K,
> Denmark
>
> >
>

--~--~---------~--~----~------------~-------~--~----~
v8-dev mailing list
[email protected]
http://groups.google.com/group/v8-dev
-~----------~----~----~----~------~----~------~--~---

Reply via email to