| /* | 
 |  * memset.c | 
 |  */ | 
 |  | 
 | #include <string.h> | 
 | #include <stdint.h> | 
 |  | 
 | 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" | 
 | 		      : "+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; | 
 | } |