diff options
author | David S. Miller <davem@davemloft.net> | 2012-05-11 22:53:29 -0400 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2012-05-11 22:53:29 -0400 |
commit | b55e81b9f8cf0256bcfc548360aef642630c2919 (patch) | |
tree | 6a4374703f104ddc4cbc3b5f599fd52937000bc5 /arch/sparc/include/asm/string_32.h | |
parent | afaedde7c9bcbae4ea9ece34990da72da9c360af (diff) |
sparc32: Remove inline strncmp "optimization" for constant counts.
Let the compiler do stuff like this.
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'arch/sparc/include/asm/string_32.h')
-rw-r--r-- | arch/sparc/include/asm/string_32.h | 63 |
1 files changed, 1 insertions, 62 deletions
diff --git a/arch/sparc/include/asm/string_32.h b/arch/sparc/include/asm/string_32.h index edf196ee4ef8..12f67857152e 100644 --- a/arch/sparc/include/asm/string_32.h +++ b/arch/sparc/include/asm/string_32.h | |||
@@ -61,68 +61,7 @@ extern int memcmp(const void *,const void *,__kernel_size_t); | |||
61 | extern __kernel_size_t strlen(const char *); | 61 | extern __kernel_size_t strlen(const char *); |
62 | 62 | ||
63 | #define __HAVE_ARCH_STRNCMP | 63 | #define __HAVE_ARCH_STRNCMP |
64 | 64 | extern int strncmp(const char *, const char *, __kernel_size_t); | |
65 | extern int __strncmp(const char *, const char *, __kernel_size_t); | ||
66 | |||
67 | static inline int __constant_strncmp(const char *src, const char *dest, __kernel_size_t count) | ||
68 | { | ||
69 | register int retval; | ||
70 | switch(count) { | ||
71 | case 0: return 0; | ||
72 | case 1: return (src[0] - dest[0]); | ||
73 | case 2: retval = (src[0] - dest[0]); | ||
74 | if(!retval && src[0]) | ||
75 | retval = (src[1] - dest[1]); | ||
76 | return retval; | ||
77 | case 3: retval = (src[0] - dest[0]); | ||
78 | if(!retval && src[0]) { | ||
79 | retval = (src[1] - dest[1]); | ||
80 | if(!retval && src[1]) | ||
81 | retval = (src[2] - dest[2]); | ||
82 | } | ||
83 | return retval; | ||
84 | case 4: retval = (src[0] - dest[0]); | ||
85 | if(!retval && src[0]) { | ||
86 | retval = (src[1] - dest[1]); | ||
87 | if(!retval && src[1]) { | ||
88 | retval = (src[2] - dest[2]); | ||
89 | if (!retval && src[2]) | ||
90 | retval = (src[3] - dest[3]); | ||
91 | } | ||
92 | } | ||
93 | return retval; | ||
94 | case 5: retval = (src[0] - dest[0]); | ||
95 | if(!retval && src[0]) { | ||
96 | retval = (src[1] - dest[1]); | ||
97 | if(!retval && src[1]) { | ||
98 | retval = (src[2] - dest[2]); | ||
99 | if (!retval && src[2]) { | ||
100 | retval = (src[3] - dest[3]); | ||
101 | if (!retval && src[3]) | ||
102 | retval = (src[4] - dest[4]); | ||
103 | } | ||
104 | } | ||
105 | } | ||
106 | return retval; | ||
107 | default: | ||
108 | retval = (src[0] - dest[0]); | ||
109 | if(!retval && src[0]) { | ||
110 | retval = (src[1] - dest[1]); | ||
111 | if(!retval && src[1]) { | ||
112 | retval = (src[2] - dest[2]); | ||
113 | if(!retval && src[2]) | ||
114 | retval = __strncmp(src+3,dest+3,count-3); | ||
115 | } | ||
116 | } | ||
117 | return retval; | ||
118 | } | ||
119 | } | ||
120 | |||
121 | #undef strncmp | ||
122 | #define strncmp(__arg0, __arg1, __arg2) \ | ||
123 | (__builtin_constant_p(__arg2) ? \ | ||
124 | __constant_strncmp(__arg0, __arg1, __arg2) : \ | ||
125 | __strncmp(__arg0, __arg1, __arg2)) | ||
126 | 65 | ||
127 | #endif /* !EXPORT_SYMTAB_STROPS */ | 66 | #endif /* !EXPORT_SYMTAB_STROPS */ |
128 | 67 | ||