sparc32: Remove inline strncmp "optimization" for constant counts.

Let the compiler do stuff like this.

Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
David S. Miller 2012-05-11 19:53:29 -07:00
parent afaedde7c9
commit b55e81b9f8
3 changed files with 2 additions and 69 deletions

View File

@ -61,68 +61,7 @@ extern int memcmp(const void *,const void *,__kernel_size_t);
extern __kernel_size_t strlen(const char *); extern __kernel_size_t strlen(const char *);
#define __HAVE_ARCH_STRNCMP #define __HAVE_ARCH_STRNCMP
extern int strncmp(const char *, const char *, __kernel_size_t);
extern int __strncmp(const char *, const char *, __kernel_size_t);
static inline int __constant_strncmp(const char *src, const char *dest, __kernel_size_t count)
{
register int retval;
switch(count) {
case 0: return 0;
case 1: return (src[0] - dest[0]);
case 2: retval = (src[0] - dest[0]);
if(!retval && src[0])
retval = (src[1] - dest[1]);
return retval;
case 3: retval = (src[0] - dest[0]);
if(!retval && src[0]) {
retval = (src[1] - dest[1]);
if(!retval && src[1])
retval = (src[2] - dest[2]);
}
return retval;
case 4: retval = (src[0] - dest[0]);
if(!retval && src[0]) {
retval = (src[1] - dest[1]);
if(!retval && src[1]) {
retval = (src[2] - dest[2]);
if (!retval && src[2])
retval = (src[3] - dest[3]);
}
}
return retval;
case 5: retval = (src[0] - dest[0]);
if(!retval && src[0]) {
retval = (src[1] - dest[1]);
if(!retval && src[1]) {
retval = (src[2] - dest[2]);
if (!retval && src[2]) {
retval = (src[3] - dest[3]);
if (!retval && src[3])
retval = (src[4] - dest[4]);
}
}
}
return retval;
default:
retval = (src[0] - dest[0]);
if(!retval && src[0]) {
retval = (src[1] - dest[1]);
if(!retval && src[1]) {
retval = (src[2] - dest[2]);
if(!retval && src[2])
retval = __strncmp(src+3,dest+3,count-3);
}
}
return retval;
}
}
#undef strncmp
#define strncmp(__arg0, __arg1, __arg2) \
(__builtin_constant_p(__arg2) ? \
__constant_strncmp(__arg0, __arg1, __arg2) : \
__strncmp(__arg0, __arg1, __arg2))
#endif /* !EXPORT_SYMTAB_STROPS */ #endif /* !EXPORT_SYMTAB_STROPS */

View File

@ -56,8 +56,6 @@ extern int __divdi3(int, int);
extern void (*__copy_1page)(void *, const void *); extern void (*__copy_1page)(void *, const void *);
extern void (*bzero_1page)(void *); extern void (*bzero_1page)(void *);
extern int __strncmp(const char *, const char *, __kernel_size_t);
extern void ___rw_read_enter(void); extern void ___rw_read_enter(void);
extern void ___rw_read_try(void); extern void ___rw_read_try(void);
extern void ___rw_read_exit(void); extern void ___rw_read_exit(void);
@ -81,9 +79,6 @@ EXPORT_SYMBOL(__copy_1page);
EXPORT_SYMBOL(__memmove); EXPORT_SYMBOL(__memmove);
EXPORT_SYMBOL(bzero_1page); EXPORT_SYMBOL(bzero_1page);
/* string functions */
EXPORT_SYMBOL(__strncmp);
/* Moving data to/from/in userspace. */ /* Moving data to/from/in userspace. */
EXPORT_SYMBOL(__copy_user); EXPORT_SYMBOL(__copy_user);

View File

@ -5,8 +5,7 @@
.text .text
.align 4 .align 4
.global __strncmp, strncmp .global strncmp
__strncmp:
strncmp: strncmp:
mov %o0, %g3 mov %o0, %g3
mov 0, %o3 mov 0, %o3