diff options
Diffstat (limited to 'arch')
-rw-r--r-- | arch/alpha/include/asm/string.h | 24 | ||||
-rw-r--r-- | arch/alpha/kernel/alpha_ksyms.c | 1 | ||||
-rw-r--r-- | arch/alpha/lib/ev6-memset.S | 12 | ||||
-rw-r--r-- | arch/alpha/lib/memset.S | 11 |
4 files changed, 33 insertions, 15 deletions
diff --git a/arch/alpha/include/asm/string.h b/arch/alpha/include/asm/string.h index b02b8a282940..c2911f591704 100644 --- a/arch/alpha/include/asm/string.h +++ b/arch/alpha/include/asm/string.h | |||
@@ -22,15 +22,27 @@ extern void * __memcpy(void *, const void *, size_t); | |||
22 | 22 | ||
23 | #define __HAVE_ARCH_MEMSET | 23 | #define __HAVE_ARCH_MEMSET |
24 | extern void * __constant_c_memset(void *, unsigned long, size_t); | 24 | extern void * __constant_c_memset(void *, unsigned long, size_t); |
25 | extern void * ___memset(void *, int, size_t); | ||
25 | extern void * __memset(void *, int, size_t); | 26 | extern void * __memset(void *, int, size_t); |
26 | extern void * memset(void *, int, size_t); | 27 | extern void * memset(void *, int, size_t); |
27 | 28 | ||
28 | #define memset(s, c, n) \ | 29 | /* For gcc 3.x, we cannot have the inline function named "memset" because |
29 | (__builtin_constant_p(c) \ | 30 | the __builtin_memset will attempt to resolve to the inline as well, |
30 | ? (__builtin_constant_p(n) && (c) == 0 \ | 31 | leading to a "sorry" about unimplemented recursive inlining. */ |
31 | ? __builtin_memset((s),0,(n)) \ | 32 | extern inline void *__memset(void *s, int c, size_t n) |
32 | : __constant_c_memset((s),0x0101010101010101UL*(unsigned char)(c),(n))) \ | 33 | { |
33 | : __memset((s),(c),(n))) | 34 | if (__builtin_constant_p(c)) { |
35 | if (__builtin_constant_p(n)) { | ||
36 | return __builtin_memset(s, c, n); | ||
37 | } else { | ||
38 | unsigned long c8 = (c & 0xff) * 0x0101010101010101UL; | ||
39 | return __constant_c_memset(s, c8, n); | ||
40 | } | ||
41 | } | ||
42 | return ___memset(s, c, n); | ||
43 | } | ||
44 | |||
45 | #define memset __memset | ||
34 | 46 | ||
35 | #define __HAVE_ARCH_STRCPY | 47 | #define __HAVE_ARCH_STRCPY |
36 | extern char * strcpy(char *,const char *); | 48 | extern char * strcpy(char *,const char *); |
diff --git a/arch/alpha/kernel/alpha_ksyms.c b/arch/alpha/kernel/alpha_ksyms.c index 89566b346c0f..f4c7ab6f43b0 100644 --- a/arch/alpha/kernel/alpha_ksyms.c +++ b/arch/alpha/kernel/alpha_ksyms.c | |||
@@ -40,6 +40,7 @@ EXPORT_SYMBOL(strrchr); | |||
40 | EXPORT_SYMBOL(memmove); | 40 | EXPORT_SYMBOL(memmove); |
41 | EXPORT_SYMBOL(__memcpy); | 41 | EXPORT_SYMBOL(__memcpy); |
42 | EXPORT_SYMBOL(__memset); | 42 | EXPORT_SYMBOL(__memset); |
43 | EXPORT_SYMBOL(___memset); | ||
43 | EXPORT_SYMBOL(__memsetw); | 44 | EXPORT_SYMBOL(__memsetw); |
44 | EXPORT_SYMBOL(__constant_c_memset); | 45 | EXPORT_SYMBOL(__constant_c_memset); |
45 | EXPORT_SYMBOL(copy_page); | 46 | EXPORT_SYMBOL(copy_page); |
diff --git a/arch/alpha/lib/ev6-memset.S b/arch/alpha/lib/ev6-memset.S index d8b94e1c7fca..356bb2fdd705 100644 --- a/arch/alpha/lib/ev6-memset.S +++ b/arch/alpha/lib/ev6-memset.S | |||
@@ -30,14 +30,15 @@ | |||
30 | .set noat | 30 | .set noat |
31 | .set noreorder | 31 | .set noreorder |
32 | .text | 32 | .text |
33 | .globl memset | ||
33 | .globl __memset | 34 | .globl __memset |
35 | .globl ___memset | ||
34 | .globl __memsetw | 36 | .globl __memsetw |
35 | .globl __constant_c_memset | 37 | .globl __constant_c_memset |
36 | .globl memset | ||
37 | 38 | ||
38 | .ent __memset | 39 | .ent ___memset |
39 | .align 5 | 40 | .align 5 |
40 | __memset: | 41 | ___memset: |
41 | .frame $30,0,$26,0 | 42 | .frame $30,0,$26,0 |
42 | .prologue 0 | 43 | .prologue 0 |
43 | 44 | ||
@@ -227,7 +228,7 @@ end_b: | |||
227 | nop | 228 | nop |
228 | nop | 229 | nop |
229 | ret $31,($26),1 # L0 : | 230 | ret $31,($26),1 # L0 : |
230 | .end __memset | 231 | .end ___memset |
231 | 232 | ||
232 | /* | 233 | /* |
233 | * This is the original body of code, prior to replication and | 234 | * This is the original body of code, prior to replication and |
@@ -594,4 +595,5 @@ end_w: | |||
594 | 595 | ||
595 | .end __memsetw | 596 | .end __memsetw |
596 | 597 | ||
597 | memset = __memset | 598 | memset = ___memset |
599 | __memset = ___memset | ||
diff --git a/arch/alpha/lib/memset.S b/arch/alpha/lib/memset.S index 311b8cfc6914..76ccc6d1f364 100644 --- a/arch/alpha/lib/memset.S +++ b/arch/alpha/lib/memset.S | |||
@@ -19,11 +19,13 @@ | |||
19 | .text | 19 | .text |
20 | .globl memset | 20 | .globl memset |
21 | .globl __memset | 21 | .globl __memset |
22 | .globl ___memset | ||
22 | .globl __memsetw | 23 | .globl __memsetw |
23 | .globl __constant_c_memset | 24 | .globl __constant_c_memset |
24 | .ent __memset | 25 | |
26 | .ent ___memset | ||
25 | .align 5 | 27 | .align 5 |
26 | __memset: | 28 | ___memset: |
27 | .frame $30,0,$26,0 | 29 | .frame $30,0,$26,0 |
28 | .prologue 0 | 30 | .prologue 0 |
29 | 31 | ||
@@ -103,7 +105,7 @@ within_one_quad: | |||
103 | 105 | ||
104 | end: | 106 | end: |
105 | ret $31,($26),1 /* E1 */ | 107 | ret $31,($26),1 /* E1 */ |
106 | .end __memset | 108 | .end ___memset |
107 | 109 | ||
108 | .align 5 | 110 | .align 5 |
109 | .ent __memsetw | 111 | .ent __memsetw |
@@ -121,4 +123,5 @@ __memsetw: | |||
121 | 123 | ||
122 | .end __memsetw | 124 | .end __memsetw |
123 | 125 | ||
124 | memset = __memset | 126 | memset = ___memset |
127 | __memset = ___memset | ||