--- a/arch/mips/include/asm/string.h +++ b/arch/mips/include/asm/string.h @@ -133,11 +133,44 @@ strncmp(__const__ char *__cs, __const__ #define __HAVE_ARCH_MEMSET extern void *memset(void *__s, int __c, size_t __count); +#define memset(__s, __c, len) \ +({ \ + size_t __len = (len); \ + void *__ret; \ + if (__builtin_constant_p(len) && __len >= 64) \ + __ret = memset((__s), (__c), __len); \ + else \ + __ret = __builtin_memset((__s), (__c), __len); \ + __ret; \ +}) #define __HAVE_ARCH_MEMCPY extern void *memcpy(void *__to, __const__ void *__from, size_t __n); +#define memcpy(dst, src, len) \ +({ \ + size_t __len = (len); \ + void *__ret; \ + if (__builtin_constant_p(len) && __len >= 64) \ + __ret = memcpy((dst), (src), __len); \ + else \ + __ret = __builtin_memcpy((dst), (src), __len); \ + __ret; \ +}) #define __HAVE_ARCH_MEMMOVE extern void *memmove(void *__dest, __const__ void *__src, size_t __n); +#define memmove(dst, src, len) \ +({ \ + size_t __len = (len); \ + void *__ret; \ + if (__builtin_constant_p(len) && __len >= 64) \ + __ret = memmove((dst), (src), __len); \ + else \ + __ret = __builtin_memmove((dst), (src), __len); \ + __ret; \ +}) + +#define __HAVE_ARCH_MEMCMP +#define memcmp(src1, src2, len) __builtin_memcmp((src1), (src2), (len)) #endif /* _ASM_STRING_H */ --- a/arch/mips/lib/Makefile +++ b/arch/mips/lib/Makefile @@ -4,7 +4,7 @@ lib-y += bitops.o csum_partial.o delay.o memcpy.o memset.o \ mips-atomic.o strlen_user.o strncpy_user.o \ - strnlen_user.o uncached.o + strnlen_user.o uncached.o memcmp.o obj-y += iomap.o obj-$(CONFIG_PCI) += iomap-pci.o --- /dev/null +++ b/arch/mips/lib/memcmp.c @@ -0,0 +1,22 @@ +/* + * copied from linux/lib/string.c + * + * Copyright (C) 1991, 1992 Linus Torvalds + */ + +#include <linux/module.h> +#include <linux/string.h> + +#undef memcmp +int memcmp(const void *cs, const void *ct, size_t count) +{ + const unsigned char *su1, *su2; + int res = 0; + + for (su1 = cs, su2 = ct; 0 < count; ++su1, ++su2, count--) + if ((res = *su1 - *su2) != 0) + break; + return res; +} +EXPORT_SYMBOL(memcmp); +