blob: 126e382f1638eb7a0267b27bf741c8a1ec2ea325 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
|
#include "dolphin/types.h"
#include "string.h"
SECTION_INIT void* memcpy(void* dst, const void* src, size_t n)
{
const char* p;
char* q;
int rev = ((u32)src < (u32)dst);
if (!rev) {
for (p = (const char*)src - 1, q = (char*)dst - 1, n++; --n;)
*++q = *++p;
} else {
for (p = (const char*)src + n, q = (char*)dst + n, n++; --n;)
*--q = *--p;
}
return (dst);
}
SECTION_INIT void __fill_mem(void* dst, int val, u32 n)
{
u32 v = (u8)val;
u32 i;
((u8*)dst) = ((u8*)dst) - 1;
if (n >= 32) {
i = (~(u32)dst) & 3;
if (i) {
n -= i;
do
*++(((u8*)dst)) = v;
while (--i);
}
if (v)
v |= v << 24 | v << 16 | v << 8;
((u32*)dst) = ((u32*)(((u8*)dst) + 1)) - 1;
i = n >> 5;
if (i)
do {
*++(((u32*)dst)) = v;
*++(((u32*)dst)) = v;
*++(((u32*)dst)) = v;
*++(((u32*)dst)) = v;
*++(((u32*)dst)) = v;
*++(((u32*)dst)) = v;
*++(((u32*)dst)) = v;
*++(((u32*)dst)) = v;
} while (--i);
i = (n & 31) >> 2;
if (i)
do
*++(((u32*)dst)) = v;
while (--i);
((u8*)dst) = ((u8*)(((u32*)dst) + 1)) - 1;
n = n & 3;
}
if (n)
do
*++(((u8*)dst)) = v;
while (--n);
return;
}
SECTION_INIT void* memset(void* dst, int val, size_t n)
{
__fill_mem(dst, val, n);
return (dst);
}
|