| Index: src/utils.h
|
| diff --git a/src/utils.h b/src/utils.h
|
| index 8eca39207d4aa55b222870a2e36e7ce53a273bc8..8111076f606715e776fe01d73efb373e9185e489 100644
|
| --- a/src/utils.h
|
| +++ b/src/utils.h
|
| @@ -441,6 +441,18 @@ typedef void (*MemMoveFunction)(void* dest, const void* src, size_t size);
|
| V8_INLINE void MemCopy(void* dest, const void* src, size_t size) {
|
| MemMove(dest, src, size);
|
| }
|
| +#elif defined(V8_TARGET_ARCH_X64)
|
| +// Limit below which the extra overhead of the MemCopy function is likely
|
| +// to outweigh the benefits of faster copying.
|
| +const int kMinComplexMemCopy = 8;
|
| +
|
| +// Copy memory area to disjoint memory area.
|
| +V8_INLINE void MemCopy(void* dest, const void* src, size_t size) {
|
| + memcpy(dest, src, size);
|
| +}
|
| +V8_INLINE void MemMove(void* dest, const void* src, size_t size) {
|
| + memmove(dest, src, size);
|
| +}
|
| #elif defined(V8_HOST_ARCH_ARM)
|
| typedef void (*MemCopyUint8Function)(uint8_t* dest, const uint8_t* src,
|
| size_t size);
|
| @@ -1154,7 +1166,9 @@ Vector<const char> ReadFile(FILE* file,
|
| template <typename sourcechar, typename sinkchar>
|
| INLINE(static void CopyCharsUnsigned(sinkchar* dest, const sourcechar* src,
|
| size_t chars));
|
| -#if defined(V8_HOST_ARCH_ARM)
|
| +#if defined(V8_HOST_ARCH_X64)
|
| +INLINE(void CopyCharsUnsigned(uint8_t* dest, const uint8_t* src, size_t chars));
|
| +#elif defined(V8_HOST_ARCH_ARM)
|
| INLINE(void CopyCharsUnsigned(uint8_t* dest, const uint8_t* src, size_t chars));
|
| INLINE(void CopyCharsUnsigned(uint16_t* dest, const uint8_t* src,
|
| size_t chars));
|
| @@ -1213,7 +1227,16 @@ void CopyCharsUnsigned(sinkchar* dest, const sourcechar* src, size_t chars) {
|
| }
|
|
|
|
|
| -#if defined(V8_HOST_ARCH_ARM)
|
| +#if defined(V8_HOST_ARCH_X64)
|
| +void CopyCharsUnsigned(uint8_t* dest, const uint8_t* src, size_t chars) {
|
| + uint8_t* limit = dest + chars;
|
| + if (chars >= static_cast<int>(kMinComplexMemCopy / sizeof(*dest))) {
|
| + MemCopy(dest, src, chars * sizeof(*dest));
|
| + } else {
|
| + while (dest < limit) *dest++ = *src++;
|
| + }
|
| +}
|
| +#elif defined(V8_HOST_ARCH_ARM)
|
| void CopyCharsUnsigned(uint8_t* dest, const uint8_t* src, size_t chars) {
|
| switch (static_cast<unsigned>(chars)) {
|
| case 0:
|
|
|