aboutsummaryrefslogtreecommitdiff
path: root/jerry-libc
diff options
context:
space:
mode:
authorZoltan Herczeg <zherczeg.u-szeged@partner.samsung.com>2016-06-22 03:15:04 -0700
committerZoltan Herczeg <zherczeg.u-szeged@partner.samsung.com>2016-06-22 03:15:04 -0700
commit64f49385ae15a2f3ff3039570db2682d56540b4f (patch)
treefb7a3a4247b6c5cd0fe2b8250e40be814eeff42e /jerry-libc
parent1726bba1847850a6366b680f50a34f4d767cec2f (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.c18
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;