diff options
| -rw-r--r-- | string.c | 6 | ||||
| -rw-r--r-- | x86.h | 9 | 
2 files changed, 14 insertions, 1 deletions
| @@ -4,7 +4,11 @@  void*  memset(void *dst, int c, uint n)  { -  stosb(dst, c, n); +  if ((int)dst%4 == 0 && n%4 == 0){ +    c &= 0xFF; +    stosl(dst, (c<<24)|(c<<16)|(c<<8)|c, n/4); +  } else +    stosb(dst, c, n);    return dst;  } @@ -48,6 +48,15 @@ stosb(void *addr, int data, int cnt)                 "memory", "cc");  } +static inline void +stosl(void *addr, int data, int cnt) +{ +  asm volatile("cld; rep stosl" : +               "=D" (addr), "=c" (cnt) : +               "0" (addr), "1" (cnt), "a" (data) : +               "memory", "cc"); +} +  struct segdesc;  static inline void | 
