diff options
author | Zoltan Herczeg <zherczeg.u-szeged@partner.samsung.com> | 2016-06-22 03:15:04 -0700 |
---|---|---|
committer | Zoltan Herczeg <zherczeg.u-szeged@partner.samsung.com> | 2016-06-22 03:15:04 -0700 |
commit | 64f49385ae15a2f3ff3039570db2682d56540b4f (patch) | |
tree | fb7a3a4247b6c5cd0fe2b8250e40be814eeff42e /jerry-libc | |
parent | 1726bba1847850a6366b680f50a34f4d767cec2f (diff) |
Four byte optimized memcpy.
JerryScript-DCO-1.0-Signed-off-by: Zoltan Herczeg zherczeg.u-szeged@partner.samsung.com
Diffstat (limited to 'jerry-libc')
-rw-r--r-- | jerry-libc/jerry-libc.c | 18 |
1 files changed, 18 insertions, 0 deletions
diff --git a/jerry-libc/jerry-libc.c b/jerry-libc/jerry-libc.c index e6d056c1..fbfda73e 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; |