// memset.c
void *memset(void *dest, int val, unsigned int len) {
unsigned char *ptr = dest;
unsigned int value = (unsigned char)val; // Promote to avoid unnecessary casting
// Use a word-by-word copy if possible
while (len >= 4) {
*(unsigned int*)ptr = value | (value << 8) | (value << 16) | (value << 24);
ptr += 4;
len -= 4;
}
// If any bytes are left, fill them
while (len--) {
*ptr++ = (unsigned char)value;
}
return dest;
}