diff --git a/jerry-libc/jerry-libc.c b/jerry-libc/jerry-libc.c index e6d056c1e..fbfda73ec 100644 --- a/jerry-libc/jerry-libc.c +++ b/jerry-libc/jerry-libc.c @@ -103,6 +103,24 @@ memcpy (void *s1, /**< destination */ const void *s2, /**< source */ size_t n) /**< bytes number */ { + /* Aligned fast case. */ + if (n >= 4 && !(((uintptr_t) s1) & 0x3) && !(((uintptr_t) s2) & 0x3)) + { + size_t chunks = (n >> 2); + uint32_t *area1_p = (uint32_t *) s1; + const uint32_t *area2_p = (const uint32_t *) s2; + + do + { + *area1_p++ = *area2_p++; + } + while (--chunks); + + n &= 0x3; + s1 = area1_p; + s2 = area2_p; + } + uint8_t *area1_p = (uint8_t *) s1; const uint8_t *area2_p = (const uint8_t *) s2;