2 #include <linux/types.h>
3 #include <linux/module.h>
5 void *memset(void *s, int c, size_t count)
21 if (count > 2 && (long)s & 2) {
36 " jmp %%pc@(2f,%2:w:2)\n"
49 : "=a" (ls), "=d" (temp), "=&d" (temp1)
50 : "d" (c), "0" (ls), "1" (temp));
64 EXPORT_SYMBOL(memset);
66 void *memcpy(void *to, const void *from, size_t n)
75 const char *cfrom = from;
81 if (n > 2 && (long)to & 2) {
83 const short *sfrom = from;
92 const long *lfrom = from;
99 " jmp %%pc@(1f,%3:w:2)\n"
100 "4: movel %0@+,%1@+\n"
112 : "=a" (lfrom), "=a" (lto), "=d" (temp), "=&d" (temp1)
113 : "0" (lfrom), "1" (lto), "2" (temp));
119 const short *sfrom = from;
126 const char *cfrom = from;
131 EXPORT_SYMBOL(memcpy);
133 void *memmove(void *dest, const void *src, size_t n)
142 if ((long)dest & 1) {
144 const char *csrc = src;
150 if (n > 2 && (long)dest & 2) {
152 const short *ssrc = src;
161 const long *lsrc = src;
171 const short *ssrc = src;
178 const char *csrc = src;
182 dest = (char *)dest + n;
183 src = (const char *)src + n;
184 if ((long)dest & 1) {
186 const char *csrc = src;
192 if (n > 2 && (long)dest & 2) {
194 const short *ssrc = src;
203 const long *lsrc = src;
213 const short *ssrc = src;
220 const char *csrc = src;
226 EXPORT_SYMBOL(memmove);
228 int memcmp(const void *cs, const void *ct, size_t count)
230 const unsigned char *su1, *su2;
232 for (su1 = cs, su2 = ct; count > 0; ++su1, ++su2, count--)
234 return *su1 < *su2 ? -1 : +1;
237 EXPORT_SYMBOL(memcmp);