diff options
Diffstat (limited to 'arch/microblaze/lib/memset.c')
| -rw-r--r-- | arch/microblaze/lib/memset.c | 15 | 
1 files changed, 8 insertions, 7 deletions
diff --git a/arch/microblaze/lib/memset.c b/arch/microblaze/lib/memset.c index 4df851d41a2..ecfb663e1fc 100644 --- a/arch/microblaze/lib/memset.c +++ b/arch/microblaze/lib/memset.c @@ -33,22 +33,23 @@  #ifdef __HAVE_ARCH_MEMSET  void *memset(void *v_src, int c, __kernel_size_t n)  { -  	char *src = v_src;  #ifdef CONFIG_OPT_LIB_FUNCTION  	uint32_t *i_src; -	uint32_t w32; +	uint32_t w32 = 0;  #endif  	/* Truncate c to 8 bits */  	c = (c & 0xFF);  #ifdef CONFIG_OPT_LIB_FUNCTION -	/* Make a repeating word out of it */ -	w32 = c; -	w32 |= w32 << 8; -	w32 |= w32 << 16; +	if (unlikely(c)) { +		/* Make a repeating word out of it */ +		w32 = c; +		w32 |= w32 << 8; +		w32 |= w32 << 16; +	} -	if (n >= 4) { +	if (likely(n >= 4)) {  		/* Align the destination to a word boundary */  		/* This is done in an endian independant manner */  		switch ((unsigned) src & 3) {  |