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
                /* copy all full dwords */
55
                /* copy all full dwords */
56
                "rep movsl\n\t"
56
                "rep movsl\n\t"
57
                /* load count again */
57
                /* load count again */
58
                "movl %4, %%ecx\n\t"
58
                "movl %4, %%ecx\n\t"
59
                /* ecx = ecx mod 4 */
59
                /* ecx = ecx mod 4 */
Line 86... Line 86...
86
static inline int memcmp(const void * src, const void * dst, size_t cnt)
86
static inline int memcmp(const void * src, const void * dst, size_t cnt)
87
{
87
{
88
    uint32_t d0, d1, d2;
88
    uint32_t d0, d1, d2;
89
    int ret;
89
    int ret;
90
   
90
   
91
    __asm__ (
91
    asm (
92
        "repe cmpsb\n\t"
92
        "repe cmpsb\n\t"
93
        "je 1f\n\t"
93
        "je 1f\n\t"
94
        "movl %3, %0\n\t"
94
        "movl %3, %0\n\t"
95
        "addl $1, %0\n\t"
95
        "addl $1, %0\n\t"
96
        "1:\n"
96
        "1:\n"
Line 112... Line 112...
112
 */
112
 */
113
static inline void memsetw(uintptr_t dst, size_t cnt, uint16_t x)
113
static inline void memsetw(uintptr_t dst, size_t cnt, uint16_t x)
114
{
114
{
115
    uint32_t d0, d1;
115
    uint32_t d0, d1;
116
   
116
   
117
    __asm__ __volatile__ (
117
    asm volatile (
118
        "rep stosw\n\t"
118
        "rep stosw\n\t"
119
        : "=&D" (d0), "=&c" (d1), "=a" (x)
119
        : "=&D" (d0), "=&c" (d1), "=a" (x)
120
        : "0" (dst), "1" (cnt), "2" (x)
120
        : "0" (dst), "1" (cnt), "2" (x)
121
        : "memory"
121
        : "memory"
122
    );
122
    );
Line 134... Line 134...
134
 */
134
 */
135
static inline void memsetb(uintptr_t dst, size_t cnt, uint8_t x)
135
static inline void memsetb(uintptr_t dst, size_t cnt, uint8_t x)
136
{
136
{
137
    uint32_t d0, d1;
137
    uint32_t d0, d1;
138
   
138
   
139
    __asm__ __volatile__ (
139
    asm volatile (
140
        "rep stosb\n\t"
140
        "rep stosb\n\t"
141
        : "=&D" (d0), "=&c" (d1), "=a" (x)
141
        : "=&D" (d0), "=&c" (d1), "=a" (x)
142
        : "0" (dst), "1" (cnt), "2" (x)
142
        : "0" (dst), "1" (cnt), "2" (x)
143
        : "memory"
143
        : "memory"
144
    );
144
    );