PatchworkOS
Loading...
Searching...
No Matches
memcpy.c
Go to the documentation of this file.
1
#include <
stdint.h
>
2
#include <
string.h
>
3
4
void
*
memcpy
(
void
*
_RESTRICT
s1,
const
void
*
_RESTRICT
s2,
size_t
n)
5
{
6
uint8_t
* d = s1;
7
const
uint8_t
* s = s2;
8
9
while
(((
uintptr_t
)d & 7) && n)
10
{
11
*d++ = *s++;
12
n--;
13
}
14
15
while
(n >= 64)
16
{
17
*(
uint64_t
*)(d + 0) = *(
const
uint64_t
*)(s + 0);
18
*(
uint64_t
*)(d + 8) = *(
const
uint64_t
*)(s + 8);
19
*(
uint64_t
*)(d + 16) = *(
const
uint64_t
*)(s + 16);
20
*(
uint64_t
*)(d + 24) = *(
const
uint64_t
*)(s + 24);
21
*(
uint64_t
*)(d + 32) = *(
const
uint64_t
*)(s + 32);
22
*(
uint64_t
*)(d + 40) = *(
const
uint64_t
*)(s + 40);
23
*(
uint64_t
*)(d + 48) = *(
const
uint64_t
*)(s + 48);
24
*(
uint64_t
*)(d + 56) = *(
const
uint64_t
*)(s + 56);
25
d += 64;
26
s += 64;
27
n -= 64;
28
}
29
30
while
(n >= 8)
31
{
32
*(
uint64_t
*)d = *(
const
uint64_t
*)s;
33
d += 8;
34
s += 8;
35
n -= 8;
36
}
37
38
while
(n--)
39
{
40
*d++ = *s++;
41
}
42
43
return
s1;
44
}
_RESTRICT
#define _RESTRICT
Definition
config.h:17
memcpy
void * memcpy(void *_RESTRICT s1, const void *_RESTRICT s2, size_t n)
Definition
memcpy.c:4
stdint.h
uint64_t
__UINT64_TYPE__ uint64_t
Definition
stdint.h:17
uint8_t
__UINT8_TYPE__ uint8_t
Definition
stdint.h:11
uintptr_t
__UINTPTR_TYPE__ uintptr_t
Definition
stdint.h:43
string.h
src
libstd
functions
string
memcpy.c
Generated by
1.9.8