X-Git-Url: https://pd.if.org/git/?p=pdclib;a=blobdiff_plain;f=functions%2Fstring%2Fmemcpy.c;h=d53b22e0fa3ae3fb2b063ec92234989ce69cbee2;hp=d0da5567a018c7b947de9b372a6d2ba20cce5a4d;hb=0a5395faab237ba9008352b0f4bee9659bbd3d5f;hpb=34893ecc2200dc7017c36a54cb6c5f4c2378b5ec diff --git a/functions/string/memcpy.c b/functions/string/memcpy.c index d0da556..d53b22e 100644 --- a/functions/string/memcpy.c +++ b/functions/string/memcpy.c @@ -6,3 +6,69 @@ // ---------------------------------------------------------------------------- void * memcpy( void * restrict s1, const void * restrict s2, size_t n ) { /* TODO */ }; + +/* Therx code +{ + void * ret = s1; + const char * src = (const char *) s2; + char * dst = (char *) s1; + for( ; n != 0; n-- ) + { + *dst++ = *src++; + } + return ret; +} +*/ + +/* PDPC code - unreviewed +void *memcpy(void *s1, const void *s2, size_t n) +{ + register const unsigned char *f = s2; + register const unsigned char *fe; + register unsigned char *t = s1; + + fe = f + n; + while (f != fe) + { + *t++ = *f++; + } + return (s1); +} +#else +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); +} +*/