Subversion Repositories HelenOS

Rev

Rev 2071 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 2071 Rev 2082
Line 49... Line 49...
49
 */
49
 */
50
static inline void * memcpy(void * dst, const void * src, size_t cnt)
50
static inline void * memcpy(void * dst, const void * src, size_t cnt)
51
{
51
{
52
        unative_t d0, d1, d2;
52
        unative_t d0, d1, d2;
53
 
53
 
54
        __asm__ __volatile__(
54
        asm volatile(
55
                "rep movsq\n\t"
55
                "rep movsq\n\t"
56
                "movq %4, %%rcx\n\t"
56
                "movq %4, %%rcx\n\t"
57
                "andq $7, %%rcx\n\t"
57
                "andq $7, %%rcx\n\t"
58
                "jz 1f\n\t"
58
                "jz 1f\n\t"
59
                "rep movsb\n\t"
59
                "rep movsb\n\t"
Line 80... Line 80...
80
static inline int memcmp(const void * src, const void * dst, size_t cnt)
80
static inline int memcmp(const void * src, const void * dst, size_t cnt)
81
{
81
{
82
    unative_t d0, d1, d2;
82
    unative_t d0, d1, d2;
83
    unative_t ret;
83
    unative_t ret;
84
   
84
   
85
    __asm__ (
85
    asm (
86
        "repe cmpsb\n\t"
86
        "repe cmpsb\n\t"
87
        "je 1f\n\t"
87
        "je 1f\n\t"
88
        "movq %3, %0\n\t"
88
        "movq %3, %0\n\t"
89
        "addq $1, %0\n\t"
89
        "addq $1, %0\n\t"
90
        "1:\n"
90
        "1:\n"
Line 106... Line 106...
106
 */
106
 */
107
static inline void memsetw(uintptr_t dst, size_t cnt, uint16_t x)
107
static inline void memsetw(uintptr_t dst, size_t cnt, uint16_t x)
108
{
108
{
109
    unative_t d0, d1;
109
    unative_t d0, d1;
110
   
110
   
111
    __asm__ __volatile__ (
111
    asm volatile (
112
        "rep stosw\n\t"
112
        "rep stosw\n\t"
113
        : "=&D" (d0), "=&c" (d1), "=a" (x)
113
        : "=&D" (d0), "=&c" (d1), "=a" (x)
114
        : "0" (dst), "1" ((unative_t)cnt), "2" (x)
114
        : "0" (dst), "1" ((unative_t)cnt), "2" (x)
115
        : "memory"
115
        : "memory"
116
    );
116
    );
Line 128... Line 128...
128
 */
128
 */
129
static inline void memsetb(uintptr_t dst, size_t cnt, uint8_t x)
129
static inline void memsetb(uintptr_t dst, size_t cnt, uint8_t x)
130
{
130
{
131
    unative_t d0, d1;
131
    unative_t d0, d1;
132
   
132
   
133
    __asm__ __volatile__ (
133
    asm volatile (
134
        "rep stosb\n\t"
134
        "rep stosb\n\t"
135
        : "=&D" (d0), "=&c" (d1), "=a" (x)
135
        : "=&D" (d0), "=&c" (d1), "=a" (x)
136
        : "0" (dst), "1" ((unative_t)cnt), "2" (x)
136
        : "0" (dst), "1" ((unative_t)cnt), "2" (x)
137
        : "memory"
137
        : "memory"
138
    );
138
    );