xv6

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs | README | LICENSE

commit d0f3efca650eccd5179e045cd07f7d723037defc
parent e25b74ca8069e340c3f2c267d09beed6d9328250
Author: Austin Clements <amdragon@mit.edu>
Date:   Thu,  1 Sep 2011 10:41:21 -0400

Use stosl in memset; makes boot time bearable

Diffstat:
Mstring.c | 6+++++-
Mx86.h | 9+++++++++
2 files changed, 14 insertions(+), 1 deletion(-)

diff --git a/string.c b/string.c @@ -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; } diff --git a/x86.h b/x86.h @@ -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