Subversion Repositories HelenOS-historic

Rev

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