Index: src/platform-posix.cc |
diff --git a/src/platform-posix.cc b/src/platform-posix.cc |
index f76ec4433265df5fc347ec32cdd4a16f864eea4c..5ece279d577a165b5c36a6c2e12e2ba40dabe59f 100644 |
--- a/src/platform-posix.cc |
+++ b/src/platform-posix.cc |
@@ -340,7 +340,26 @@ void OS::MemMove(void* dest, const void* src, size_t size) { |
(*memmove_function)(dest, src, size); |
} |
-#endif // V8_TARGET_ARCH_IA32 |
+#elif defined(V8_HOST_ARCH_ARM) && defined(V8_HOST_CAN_READ_UNALIGNED) |
+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); |
+#endif |
void POSIXPostSetUp() { |
@@ -349,6 +368,11 @@ void POSIXPostSetUp() { |
if (generated_memmove != NULL) { |
memmove_function = generated_memmove; |
} |
+#elif defined(V8_HOST_ARCH_ARM) && defined(V8_HOST_CAN_READ_UNALIGNED) |
+ OS::memcopy_uint8_function = |
+ CreateMemCopyUint8Function(&OS::MemCopyUint8Wrapper); |
+ OS::memcopy_uint16_uint8_function = |
+ CreateMemCopyUint16Uint8Function(&OS::MemCopyUint16Uint8Wrapper); |
#endif |
init_fast_sin_function(); |
init_fast_cos_function(); |