| Index: src/platform-posix.cc
|
| diff --git a/src/platform-posix.cc b/src/platform-posix.cc
|
| index 2b5f40c9abc0bf3ac063b0431f7ee254654f9c8b..1972505565eef5c7dff7cb0a282a750547d7bdf0 100644
|
| --- a/src/platform-posix.cc
|
| +++ b/src/platform-posix.cc
|
| @@ -447,6 +447,72 @@ int OS::VSNPrintF(Vector<char> str,
|
| }
|
|
|
|
|
| +#if V8_TARGET_ARCH_IA32 || V8_TARGET_ARCH_X87
|
| +static void MemMoveWrapper(void* dest, const void* src, size_t size) {
|
| + memmove(dest, src, size);
|
| +}
|
| +
|
| +
|
| +// Initialize to library version so we can call this at any time during startup.
|
| +static OS::MemMoveFunction memmove_function = &MemMoveWrapper;
|
| +
|
| +// Defined in codegen-ia32.cc.
|
| +OS::MemMoveFunction CreateMemMoveFunction();
|
| +
|
| +// Copy memory area. No restrictions.
|
| +void OS::MemMove(void* dest, const void* src, size_t size) {
|
| + if (size == 0) return;
|
| + // Note: here we rely on dependent reads being ordered. This is true
|
| + // on all architectures we currently support.
|
| + (*memmove_function)(dest, src, size);
|
| +}
|
| +
|
| +#elif defined(V8_HOST_ARCH_ARM)
|
| +void OS::MemCopyUint16Uint8Wrapper(uint16_t* dest,
|
| + const uint8_t* src,
|
| + size_t chars) {
|
| + uint16_t *limit = dest + chars;
|
| + while (dest < limit) {
|
| + *dest++ = static_cast<uint16_t>(*src++);
|
| + }
|
| +}
|
| +
|
| +
|
| +OS::MemCopyUint8Function OS::memcopy_uint8_function = &OS::MemCopyUint8Wrapper;
|
| +OS::MemCopyUint16Uint8Function OS::memcopy_uint16_uint8_function =
|
| + &OS::MemCopyUint16Uint8Wrapper;
|
| +// Defined in codegen-arm.cc.
|
| +OS::MemCopyUint8Function CreateMemCopyUint8Function(
|
| + OS::MemCopyUint8Function stub);
|
| +OS::MemCopyUint16Uint8Function CreateMemCopyUint16Uint8Function(
|
| + OS::MemCopyUint16Uint8Function stub);
|
| +
|
| +#elif defined(V8_HOST_ARCH_MIPS)
|
| +OS::MemCopyUint8Function OS::memcopy_uint8_function = &OS::MemCopyUint8Wrapper;
|
| +// Defined in codegen-mips.cc.
|
| +OS::MemCopyUint8Function CreateMemCopyUint8Function(
|
| + OS::MemCopyUint8Function stub);
|
| +#endif
|
| +
|
| +
|
| +void OS::PostSetUp() {
|
| +#if V8_TARGET_ARCH_IA32 || V8_TARGET_ARCH_X87
|
| + OS::MemMoveFunction generated_memmove = CreateMemMoveFunction();
|
| + if (generated_memmove != NULL) {
|
| + memmove_function = generated_memmove;
|
| + }
|
| +#elif defined(V8_HOST_ARCH_ARM)
|
| + OS::memcopy_uint8_function =
|
| + CreateMemCopyUint8Function(&OS::MemCopyUint8Wrapper);
|
| + OS::memcopy_uint16_uint8_function =
|
| + CreateMemCopyUint16Uint8Function(&OS::MemCopyUint16Uint8Wrapper);
|
| +#elif defined(V8_HOST_ARCH_MIPS)
|
| + OS::memcopy_uint8_function =
|
| + CreateMemCopyUint8Function(&OS::MemCopyUint8Wrapper);
|
| +#endif
|
| +}
|
| +
|
| +
|
| // ----------------------------------------------------------------------------
|
| // POSIX string support.
|
| //
|
|
|