X-Git-Url: https://pd.if.org/git/?a=blobdiff_plain;f=functions%2Fstring%2Fmemcpy.c;h=2990952679275fba517edfb5fe0e50f23848eec7;hb=34ec605229b4640c3f4ac8b4c6268e7197012a4f;hp=d0da5567a018c7b947de9b372a6d2ba20cce5a4d;hpb=34893ecc2200dc7017c36a54cb6c5f4c2378b5ec;p=pdclib diff --git a/functions/string/memcpy.c b/functions/string/memcpy.c index d0da556..2990952 100644 --- a/functions/string/memcpy.c +++ b/functions/string/memcpy.c @@ -5,4 +5,55 @@ // This code is Public Domain. Use, modify, and redistribute at will. // ---------------------------------------------------------------------------- -void * memcpy( void * restrict s1, const void * restrict s2, size_t n ) { /* TODO */ }; +#include + +void * memcpy( void * restrict dest, const void * restrict src, size_t n ) +{ + const char * src_p = (const char *) src; + char * dest_p = (char *) dest; + while ( n-- ) + { + *dest_p++ = *src_p++; + } + return dest; +} + +/* TODO: This is code from PDPC, optimizing for word access. + +void *memcpy(void *s1, const void *s2, size_t n) +{ + register unsigned int *p = (unsigned int *)s1; + register unsigned int *cs2 = (unsigned int *)s2; + register unsigned int *endi; + + endi = (unsigned int *)((char *)p + (n & ~0x03)); + while (p != endi) + { + *p++ = *cs2++; + } + switch (n & 0x03) + { + case 0: + break; + case 1: + *(char *)p = *(char *)cs2; + break; + case 2: + *(char *)p = *(char *)cs2; + p = (unsigned int *)((char *)p + 1); + cs2 = (unsigned int *)((char *)cs2 + 1); + *(char *)p = *(char *)cs2; + break; + case 3: + *(char *)p = *(char *)cs2; + p = (unsigned int *)((char *)p + 1); + cs2 = (unsigned int *)((char *)cs2 + 1); + *(char *)p = *(char *)cs2; + p = (unsigned int *)((char *)p + 1); + cs2 = (unsigned int *)((char *)cs2 + 1); + *(char *)p = *(char *)cs2; + break; + } + return (s1); +} +*/