PatchworkOS
Loading...
Searching...
No Matches
memmove.c
Go to the documentation of this file.
1
#include <
stdint.h
>
2
#include <
string.h
>
3
4
void
*
memmove
(
void
* s1,
const
void
* s2,
size_t
n)
5
{
6
uint8_t
* d = s1;
7
const
uint8_t
* s = s2;
8
9
if
(d > s && d < (s + n))
10
{
11
d += n;
12
s += n;
13
14
while
((((
uintptr_t
)d & 7) != ((
uintptr_t
)s & 7)) && n)
15
{
16
*(--d) = *(--s);
17
n--;
18
}
19
20
while
(n >= 64)
21
{
22
d -= 64;
23
s -= 64;
24
*(
uint64_t
*)(d + 56) = *(
const
uint64_t
*)(s + 56);
25
*(
uint64_t
*)(d + 48) = *(
const
uint64_t
*)(s + 48);
26
*(
uint64_t
*)(d + 40) = *(
const
uint64_t
*)(s + 40);
27
*(
uint64_t
*)(d + 32) = *(
const
uint64_t
*)(s + 32);
28
*(
uint64_t
*)(d + 24) = *(
const
uint64_t
*)(s + 24);
29
*(
uint64_t
*)(d + 16) = *(
const
uint64_t
*)(s + 16);
30
*(
uint64_t
*)(d + 8) = *(
const
uint64_t
*)(s + 8);
31
*(
uint64_t
*)(d + 0) = *(
const
uint64_t
*)(s + 0);
32
n -= 64;
33
}
34
35
while
(n >= 8)
36
{
37
d -= 8;
38
s -= 8;
39
*(
uint64_t
*)d = *(
const
uint64_t
*)s;
40
n -= 8;
41
}
42
43
while
(n--)
44
{
45
*(--d) = *(--s);
46
}
47
}
48
else
49
{
50
while
(((
uintptr_t
)d & 7) && n)
51
{
52
*d++ = *s++;
53
n--;
54
}
55
56
while
(n >= 64)
57
{
58
*(
uint64_t
*)(d + 0) = *(
const
uint64_t
*)(s + 0);
59
*(
uint64_t
*)(d + 8) = *(
const
uint64_t
*)(s + 8);
60
*(
uint64_t
*)(d + 16) = *(
const
uint64_t
*)(s + 16);
61
*(
uint64_t
*)(d + 24) = *(
const
uint64_t
*)(s + 24);
62
*(
uint64_t
*)(d + 32) = *(
const
uint64_t
*)(s + 32);
63
*(
uint64_t
*)(d + 40) = *(
const
uint64_t
*)(s + 40);
64
*(
uint64_t
*)(d + 48) = *(
const
uint64_t
*)(s + 48);
65
*(
uint64_t
*)(d + 56) = *(
const
uint64_t
*)(s + 56);
66
d += 64;
67
s += 64;
68
n -= 64;
69
}
70
71
while
(n >= 8)
72
{
73
*(
uint64_t
*)d = *(
const
uint64_t
*)s;
74
d += 8;
75
s += 8;
76
n -= 8;
77
}
78
79
while
(n--)
80
{
81
*d++ = *s++;
82
}
83
}
84
85
return
s1;
86
}
memmove
void * memmove(void *s1, const void *s2, size_t n)
Definition
memmove.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
memmove.c
Generated by
1.9.8