1
2#include <linux/types.h>
3#include <linux/autoconf.h>
4
5void * memcpy(void * to, const void * from, size_t n)
6{
7#ifdef CONFIG_COLDFIRE
8  void *xto = to;
9  size_t temp;
10
11  if (!n)
12    return xto;
13  if ((long) to & 1)
14    {
15      char *cto = to;
16      const char *cfrom = from;
17      *cto++ = *cfrom++;
18      to = cto;
19      from = cfrom;
20      n--;
21    }
22  if (n > 2 && (long) to & 2)
23    {
24      short *sto = to;
25      const short *sfrom = from;
26      *sto++ = *sfrom++;
27      to = sto;
28      from = sfrom;
29      n -= 2;
30    }
31  temp = n >> 2;
32  if (temp)
33    {
34      long *lto = to;
35      const long *lfrom = from;
36      for (; temp; temp--)
37	*lto++ = *lfrom++;
38      to = lto;
39      from = lfrom;
40    }
41  if (n & 2)
42    {
43      short *sto = to;
44      const short *sfrom = from;
45      *sto++ = *sfrom++;
46      to = sto;
47      from = sfrom;
48    }
49  if (n & 1)
50    {
51      char *cto = to;
52      const char *cfrom = from;
53      *cto = *cfrom;
54    }
55  return xto;
56#else
57  const char *c_from = from;
58  char *c_to = to;
59  while (n-- > 0)
60    *c_to++ = *c_from++;
61  return((void *) to);
62#endif
63}
64