Merge git://git.infradead.org/mtd-2.6
[linux-2.6.git] / arch / m68knommu / lib / memset.c
1 #include <linux/types.h>
2
3 void * memset(void * s, int c, size_t count)
4 {
5   void *xs = s;
6   size_t temp;
7
8   if (!count)
9     return xs;
10   c &= 0xff;
11   c |= c << 8;
12   c |= c << 16;
13   if ((long) s & 1)
14     {
15       char *cs = s;
16       *cs++ = c;
17       s = cs;
18       count--;
19     }
20   if (count > 2 && (long) s & 2)
21     {
22       short *ss = s;
23       *ss++ = c;
24       s = ss;
25       count -= 2;
26     }
27   temp = count >> 2;
28   if (temp)
29     {
30       long *ls = s;
31       for (; temp; temp--)
32         *ls++ = c;
33       s = ls;
34     }
35   if (count & 2)
36     {
37       short *ss = s;
38       *ss++ = c;
39       s = ss;
40     }
41   if (count & 1)
42     {
43       char *cs = s;
44       *cs = c;
45     }
46   return xs;
47 }