|
|
| File: [Development] / linux-2.6-xfs / arch / m68knommu / lib / memcpy.c (download)
Revision 1.2, Tue Feb 26 16:44:40 2008 UTC (9 years, 7 months ago) by lachlan.longdrop.melbourne.sgi.com
Merge up to 2.6.25-rc3 Merge of 2.6.x-xfs-melb:linux:30555a by kenmcd. |
#include <linux/types.h>
void * memcpy(void * to, const void * from, size_t n)
{
#ifdef CONFIG_COLDFIRE
void *xto = to;
size_t temp;
if (!n)
return xto;
if ((long) to & 1)
{
char *cto = to;
const char *cfrom = from;
*cto++ = *cfrom++;
to = cto;
from = cfrom;
n--;
}
if (n > 2 && (long) to & 2)
{
short *sto = to;
const short *sfrom = from;
*sto++ = *sfrom++;
to = sto;
from = sfrom;
n -= 2;
}
temp = n >> 2;
if (temp)
{
long *lto = to;
const long *lfrom = from;
for (; temp; temp--)
*lto++ = *lfrom++;
to = lto;
from = lfrom;
}
if (n & 2)
{
short *sto = to;
const short *sfrom = from;
*sto++ = *sfrom++;
to = sto;
from = sfrom;
}
if (n & 1)
{
char *cto = to;
const char *cfrom = from;
*cto = *cfrom;
}
return xto;
#else
const char *c_from = from;
char *c_to = to;
while (n-- > 0)
*c_to++ = *c_from++;
return((void *) to);
#endif
}