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
);