Subversion Repositories Kolibri OS

Rev

Rev 8793 | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 8793 Rev 9765
Line 1... Line -...
1
/* memcpy( void *, const void *, size_t )
-
 
2
 
-
 
3
   This file is part of the Public Domain C Library (PDCLib).
-
 
4
   Permission is granted to use, modify, and / or redistribute at will.
-
 
5
*/
-
 
6
 
-
 
7
#include 
1
#include 
Line 8... Line 2...
8
 
2
 
9
void * memcpy( void * s1, const void * s2, size_t n )
-
 
10
{
-
 
11
    char * dest = ( char * ) s1;
-
 
12
    const char * src = ( const char * ) s2;
-
 
13
 
-
 
14
    while ( n-- )
3
void* memcpy(void* _dest, const void* _src, size_t _n)
-
 
4
{
-
 
5
    int d0, d1, d2;
-
 
6
    __asm__ __volatile__(
15
    {
7
        "rep ; movsl\n\t"
-
 
8
        "testb $2,%b4\n\t"
-
 
9
        "je 1f\n\t"
-
 
10
        "movsw\n"
-
 
11
        "1:\ttestb $1,%b4\n\t"
-
 
12
        "je 2f\n\t"
16
        *dest++ = *src++;
13
        "movsb\n"
17
    }
-
 
-
 
14
        "2:"
-
 
15
        : "=&c"(d0), "=&D"(d1), "=&S"(d2)
-
 
16
        : "0"(_n / 4), "q"(_n), "1"((long)_dest), "2"((long)_src)
18
 
17
        : "memory");
19
    return s1;
18
    return (_dest);
20
}
19
}