]> pd.if.org Git - pdclib/blob - functions/string/memcpy.c
Re-import from Subversion.
[pdclib] / functions / string / memcpy.c
1 /* ----------------------------------------------------------------------------
2  * $Id$
3  * ----------------------------------------------------------------------------
4  * Public Domain C Library - http://pdclib.sourceforge.net
5  * This code is Public Domain. Use, modify, and redistribute at will.
6  * --------------------------------------------------------------------------*/
7
8 #include <__size_t.h>
9
10 void * memcpy( void * restrict dest, const void * restrict src, size_t n )
11 {
12     const char * src_p = (const char *) src;
13     char * dest_p = (char *) dest;
14     while ( n-- )
15     {
16         *dest_p++ = *src_p++;
17     }
18     return dest;
19 }
20
21 /* TODO: This is code from PDPC, optimizing for word access.
22
23 void *memcpy(void *s1, const void *s2, size_t n)
24 {
25     register unsigned int *p = (unsigned int *)s1;
26     register unsigned int *cs2 = (unsigned int *)s2;
27     register unsigned int *endi;
28
29     endi = (unsigned int *)((char *)p + (n & ~0x03));
30     while (p != endi)
31     {
32         *p++ = *cs2++;
33     }
34     switch (n & 0x03)
35     {
36         case 0:
37             break;
38         case 1:
39             *(char *)p = *(char *)cs2;
40             break;
41         case 2:
42             *(char *)p = *(char *)cs2;
43             p = (unsigned int *)((char *)p + 1);
44             cs2 = (unsigned int *)((char *)cs2 + 1);
45             *(char *)p = *(char *)cs2;
46             break;
47         case 3:
48             *(char *)p = *(char *)cs2;
49             p = (unsigned int *)((char *)p + 1);
50             cs2 = (unsigned int *)((char *)cs2 + 1);
51             *(char *)p = *(char *)cs2;
52             p = (unsigned int *)((char *)p + 1);
53             cs2 = (unsigned int *)((char *)cs2 + 1);
54             *(char *)p = *(char *)cs2;
55             break;
56     }
57     return (s1);
58 }
59 */