Rev 358 | Rev 361 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 358 | Rev 359 | ||
---|---|---|---|
Line 227... | Line 227... | ||
227 | static inline void * memcpy(void * dst, const void * src, size_t cnt) |
227 | static inline void * memcpy(void * dst, const void * src, size_t cnt) |
228 | { |
228 | { |
229 | __u32 d0, d1, d2; |
229 | __u32 d0, d1, d2; |
230 | 230 | ||
231 | __asm__ __volatile__( |
231 | __asm__ __volatile__( |
- | 232 | /* copy all full dwords */ |
|
232 | "rep movsl\n\t" |
233 | "rep movsl\n\t" |
- | 234 | /* load count again */ |
|
233 | "movl %4, %%ecx\n\t" |
235 | "movl %4, %%ecx\n\t" |
- | 236 | /* ecx = ecx mod 4 */ |
|
234 | "andl $3, %%ecx\n\t" |
237 | "andl $3, %%ecx\n\t" |
- | 238 | /* are there last <=3 bytes? */ |
|
235 | "jz 1f\n\t" |
239 | "jz 1f\n\t" |
- | 240 | /* copy last <=3 bytes */ |
|
236 | "rep movsb\n\t" |
241 | "rep movsb\n\t" |
- | 242 | /* exit from asm block */ |
|
237 | "1:\n" |
243 | "1:\n" |
238 | : "=&c" (d0), "=&D" (d1), "=&S" (d2) |
244 | : "=&c" (d0), "=&D" (d1), "=&S" (d2) |
239 | : "0" (cnt / 4), "g" (cnt), "1" ((__u32) dst), "2" ((__u32) src) |
245 | : "0" (cnt / 4), "g" (cnt), "1" ((__u32) dst), "2" ((__u32) src) |
240 | : "memory"); |
246 | : "memory"); |
241 | 247 |