movl %ecx, %edx
shrl $2, %ecx
- cld
rep ; movsl
jnc 1f # The shrl had carry out if odd word count
movl %ecx, %edx
shrl $2, %ecx
- cld
rep ; movsl
jnc 1f # The shrl had carry out if odd word count
void *memset(void *dst, int c, size_t n)
{
char *q = dst;
-
-#if defined(__i386__)
size_t nl = n >> 2;
- asm volatile("cld ; rep ; stosl ; movl %3,%0 ; rep ; stosb"
+
+ asm volatile("rep ; stosl ; movl %3,%0 ; rep ; stosb"
: "+c" (nl), "+D" (q)
: "a" ((unsigned char)c * 0x01010101U), "r" (n & 3));
-#elif defined(__x86_64__)
- size_t nq = n >> 3;
- asm volatile("cld ; rep ; stosq ; movl %3,%%ecx ; rep ; stosb"
- : "+c" (nq), "+D" (q)
- : "a" ((unsigned char)c * 0x0101010101010101U),
- "r" ((uint32_t)n & 7));
-#else
- while ( n-- ) {
- *q++ = c;
- }
-#endif
return dst;
}
static inline void *copy_dword(void *dst, void *src, size_t dword_count)
{
- asm volatile("cld; rep; movsl"
+ asm volatile("rep; movsl"
: "+D" (dst), "+S" (src), "+c" (dword_count));
return dst; /* Updated destination pointer */
}
{
switch (sizeof(struct vesa_char)) {
case 1:
- asm volatile("cld; rep; stosb"
+ asm volatile("rep; stosb"
: "+D" (ptr), "+c" (count)
: "a" (fill)
: "memory");
break;
case 2:
- asm volatile("cld; rep; stosw"
+ asm volatile("rep; stosw"
: "+D" (ptr), "+c" (count)
: "a" (fill)
: "memory");
break;
case 4:
- asm volatile("cld; rep; stosl"
+ asm volatile("rep; stosl"
: "+D" (ptr), "+c" (count)
: "a" (fill)
: "memory");
/* asm bzero() code from com32/lib/memset.c */
char *q = (char *) secs[i].dest;
size_t nl = secs[i].size >> 2;
- asm volatile("cld ; rep ; stosl ; movl %3,%0 ; rep ; stosb"
+ asm volatile("rep ; stosl ; movl %3,%0 ; rep ; stosb"
: "+c" (nl), "+D" (q)
: "a" (0x0U), "r" (secs[i].size & 3));
} else {
char *q = (char *) secs[i].dest;
size_t n = secs[i].size;
if ( q < p ) {
- asm volatile("cld ; rep ; movsb"
+ asm volatile("rep ; movsb"
: "+c" (n), "+S" (p), "+D" (q));
} else {
p += (n-1);
q += (n-1);
- asm volatile("std ; rep ; movsb"
+ asm volatile("std ; rep ; movsb ; cld"
: "+c" (n), "+S" (p), "+D" (q));
}
}