blob: ce7a2ca0ea00a5adfbe60b50b5b183c6838b6374 [file] [edit]
/*
* A simple memcpy optimized for wasm.
*/
#include <stdint.h>
#include <string.h>
#include <emscripten/emscripten.h>
#include "libc.h"
#include "emscripten_internal.h"
// Use the simple/naive version of memcpy when building with asan
#if __has_feature(address_sanitizer)
static void *__memcpy(void *dest, const void *src, size_t n) {
unsigned char *d = (unsigned char *)dest;
const unsigned char *s = (const unsigned char *)src;
while(n--) *d++ = *s++;
return dest;
}
#else
static void *__memcpy(void *restrict dest, const void *restrict src, size_t n) {
// memory.copy traps on OOB zero-length copies, but memcpy must not.
if (n) {
__builtin_wasm_memory_copy(0, 0, dest, src, n);
}
return dest;
}
#endif
weak_alias(__memcpy, emscripten_builtin_memcpy);
weak_alias(__memcpy, memcpy);