blob: f1da22d3098d3f1da3aa799965e90fb7e9d51994 (
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
|
#define FUNC_MACRO (sizeof(unsigned long) - 1)
void FUNC(void* d, void const* s, unsigned long n)
{
const unsigned long *ass = (const unsigned long *)s;
unsigned long* adt = (unsigned long*)d;
const unsigned char* ss = (const unsigned char*)s;
unsigned char* dt = (unsigned char*)d;
unsigned long i = 0;
if (n >= 16)
{
if (((((unsigned long)ss) & FUNC_MACRO) == 0) && ((((unsigned long)dt) & FUNC_MACRO) == 0))
{
unsigned long asize = n / sizeof(unsigned long);
unsigned long rem = n & FUNC_MACRO;
for (i = 0; i < (asize - 3); i += 4)
{
adt[i] = ass[i];
adt[i+1] = ass[i+1];
adt[i+2] = ass[i+2];
adt[i+3] = ass[i+3];
}
while (i < asize)
{
adt[i] = ass[i];
++i;
}
i = n - rem;
}
else
{
for (i = 0 ; (i + 15) < n; i += 16)
{
dt[i] = ss[i];
dt[i+1] = ss[i+1];
dt[i+2] = ss[i+2];
dt[i+3] = ss[i+3];
dt[i+4] = ss[i+4];
dt[i+5] = ss[i+5];
dt[i+6] = ss[i+6];
dt[i+7] = ss[i+7];
dt[i+8] = ss[i+8];
dt[i+9] = ss[i+9];
dt[i+10] = ss[i+10];
dt[i+11] = ss[i+11];
dt[i+12] = ss[i+12];
dt[i+13] = ss[i+13];
dt[i+14] = ss[i+14];
dt[i+15] = ss[i+15];
}
}
}
while (i < n)
{
dt[i] = ss[i];
++i;
}
}
|