]>
git.proxmox.com Git - wasi-libc.git/blob - libc-top-half/musl/src/string/memcpy.c
5 void *memcpy(void *restrict dest
, const void *restrict src
, size_t n
)
7 #if defined(__wasm_bulk_memory__)
8 return __builtin_memcpy(dest
, src
, n
);
10 unsigned char *d
= dest
;
11 const unsigned char *s
= src
;
15 #if __BYTE_ORDER == __LITTLE_ENDIAN
23 typedef uint32_t __attribute__((__may_alias__
)) u32
;
26 for (; (uintptr_t)s
% 4 && n
; n
--) *d
++ = *s
++;
28 if ((uintptr_t)d
% 4 == 0) {
29 for (; n
>=16; s
+=16, d
+=16, n
-=16) {
30 *(u32
*)(d
+0) = *(u32
*)(s
+0);
31 *(u32
*)(d
+4) = *(u32
*)(s
+4);
32 *(u32
*)(d
+8) = *(u32
*)(s
+8);
33 *(u32
*)(d
+12) = *(u32
*)(s
+12);
36 *(u32
*)(d
+0) = *(u32
*)(s
+0);
37 *(u32
*)(d
+4) = *(u32
*)(s
+4);
41 *(u32
*)(d
+0) = *(u32
*)(s
+0);
45 *d
++ = *s
++; *d
++ = *s
++;
53 if (n
>= 32) switch ((uintptr_t)d
% 4) {
60 for (; n
>=17; s
+=16, d
+=16, n
-=16) {
62 *(u32
*)(d
+0) = (w LS
24) | (x RS
8);
64 *(u32
*)(d
+4) = (x LS
24) | (w RS
8);
66 *(u32
*)(d
+8) = (w LS
24) | (x RS
8);
68 *(u32
*)(d
+12) = (x LS
24) | (w RS
8);
76 for (; n
>=18; s
+=16, d
+=16, n
-=16) {
78 *(u32
*)(d
+0) = (w LS
16) | (x RS
16);
80 *(u32
*)(d
+4) = (x LS
16) | (w RS
16);
82 *(u32
*)(d
+8) = (w LS
16) | (x RS
16);
84 *(u32
*)(d
+12) = (x LS
16) | (w RS
16);
91 for (; n
>=19; s
+=16, d
+=16, n
-=16) {
93 *(u32
*)(d
+0) = (w LS
8) | (x RS
24);
95 *(u32
*)(d
+4) = (x LS
8) | (w RS
24);
97 *(u32
*)(d
+8) = (w LS
8) | (x RS
24);
99 *(u32
*)(d
+12) = (x LS
8) | (w RS
24);
104 *d
++ = *s
++; *d
++ = *s
++; *d
++ = *s
++; *d
++ = *s
++;
105 *d
++ = *s
++; *d
++ = *s
++; *d
++ = *s
++; *d
++ = *s
++;
106 *d
++ = *s
++; *d
++ = *s
++; *d
++ = *s
++; *d
++ = *s
++;
107 *d
++ = *s
++; *d
++ = *s
++; *d
++ = *s
++; *d
++ = *s
++;
110 *d
++ = *s
++; *d
++ = *s
++; *d
++ = *s
++; *d
++ = *s
++;
111 *d
++ = *s
++; *d
++ = *s
++; *d
++ = *s
++; *d
++ = *s
++;
114 *d
++ = *s
++; *d
++ = *s
++; *d
++ = *s
++; *d
++ = *s
++;
117 *d
++ = *s
++; *d
++ = *s
++;
125 for (; n
; n
--) *d
++ = *s
++;
127 #endif // __wasm_bulk_memory__