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 4df851d41a29..ecfb663e1fc1 100644 --- a/arch/microblaze/lib/memset.c +++ b/arch/microblaze/lib/memset.c | |||
| @@ -33,22 +33,23 @@ | |||
| 33 | #ifdef __HAVE_ARCH_MEMSET | 33 | #ifdef __HAVE_ARCH_MEMSET |
| 34 | void *memset(void *v_src, int c, __kernel_size_t n) | 34 | void *memset(void *v_src, int c, __kernel_size_t n) |
| 35 | { | 35 | { |
| 36 | |||
| 37 | char *src = v_src; | 36 | char *src = v_src; |
| 38 | #ifdef CONFIG_OPT_LIB_FUNCTION | 37 | #ifdef CONFIG_OPT_LIB_FUNCTION |
| 39 | uint32_t *i_src; | 38 | uint32_t *i_src; |
| 40 | uint32_t w32; | 39 | uint32_t w32 = 0; |
| 41 | #endif | 40 | #endif |
| 42 | /* Truncate c to 8 bits */ | 41 | /* Truncate c to 8 bits */ |
| 43 | c = (c & 0xFF); | 42 | c = (c & 0xFF); |
| 44 | 43 | ||
| 45 | #ifdef CONFIG_OPT_LIB_FUNCTION | 44 | #ifdef CONFIG_OPT_LIB_FUNCTION |
| 46 | /* Make a repeating word out of it */ | 45 | if (unlikely(c)) { |
| 47 | w32 = c; | 46 | /* Make a repeating word out of it */ |
| 48 | w32 |= w32 << 8; | 47 | w32 = c; |
| 49 | w32 |= w32 << 16; | 48 | w32 |= w32 << 8; |
| 49 | w32 |= w32 << 16; | ||
| 50 | } | ||
| 50 | 51 | ||
| 51 | if (n >= 4) { | 52 | if (likely(n >= 4)) { |
| 52 | /* Align the destination to a word boundary */ | 53 | /* Align the destination to a word boundary */ |
| 53 | /* This is done in an endian independant manner */ | 54 | /* This is done in an endian independant manner */ |
| 54 | switch ((unsigned) src & 3) { | 55 | switch ((unsigned) src & 3) { |
