Rev 2071 | 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 | ); |