306-mips_mem_functions_performance.patch 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  1. --- a/arch/mips/include/asm/string.h
  2. +++ b/arch/mips/include/asm/string.h
  3. @@ -140,4 +140,42 @@ extern void *memcpy(void *__to, __const_
  4. #define __HAVE_ARCH_MEMMOVE
  5. extern void *memmove(void *__dest, __const__ void *__src, size_t __n);
  6. +#ifndef __ZBOOT__
  7. +#define memset(__s, __c, len) \
  8. +({ \
  9. + size_t __len = (len); \
  10. + void *__ret; \
  11. + if (__builtin_constant_p(len) && __len >= 64) \
  12. + __ret = memset((__s), (__c), __len); \
  13. + else \
  14. + __ret = __builtin_memset((__s), (__c), __len); \
  15. + __ret; \
  16. +})
  17. +
  18. +#define memcpy(dst, src, len) \
  19. +({ \
  20. + size_t __len = (len); \
  21. + void *__ret; \
  22. + if (__builtin_constant_p(len) && __len >= 64) \
  23. + __ret = memcpy((dst), (src), __len); \
  24. + else \
  25. + __ret = __builtin_memcpy((dst), (src), __len); \
  26. + __ret; \
  27. +})
  28. +
  29. +#define memmove(dst, src, len) \
  30. +({ \
  31. + size_t __len = (len); \
  32. + void *__ret; \
  33. + if (__builtin_constant_p(len) && __len >= 64) \
  34. + __ret = memmove((dst), (src), __len); \
  35. + else \
  36. + __ret = __builtin_memmove((dst), (src), __len); \
  37. + __ret; \
  38. +})
  39. +
  40. +#define __HAVE_ARCH_MEMCMP
  41. +#define memcmp(src1, src2, len) __builtin_memcmp((src1), (src2), (len))
  42. +#endif
  43. +
  44. #endif /* _ASM_STRING_H */
  45. --- a/arch/mips/lib/Makefile
  46. +++ b/arch/mips/lib/Makefile
  47. @@ -4,7 +4,7 @@
  48. lib-y += bitops.o csum_partial.o delay.o memcpy.o memset.o \
  49. mips-atomic.o strlen_user.o strncpy_user.o \
  50. - strnlen_user.o uncached.o
  51. + strnlen_user.o uncached.o memcmp.o
  52. obj-y += iomap.o
  53. obj-$(CONFIG_PCI) += iomap-pci.o
  54. --- /dev/null
  55. +++ b/arch/mips/lib/memcmp.c
  56. @@ -0,0 +1,22 @@
  57. +/*
  58. + * copied from linux/lib/string.c
  59. + *
  60. + * Copyright (C) 1991, 1992 Linus Torvalds
  61. + */
  62. +
  63. +#include <linux/module.h>
  64. +#include <linux/string.h>
  65. +
  66. +#undef memcmp
  67. +int memcmp(const void *cs, const void *ct, size_t count)
  68. +{
  69. + const unsigned char *su1, *su2;
  70. + int res = 0;
  71. +
  72. + for (su1 = cs, su2 = ct; 0 < count; ++su1, ++su2, count--)
  73. + if ((res = *su1 - *su2) != 0)
  74. + break;
  75. + return res;
  76. +}
  77. +EXPORT_SYMBOL(memcmp);
  78. +
  79. --- a/arch/mips/boot/compressed/Makefile
  80. +++ b/arch/mips/boot/compressed/Makefile
  81. @@ -23,7 +23,8 @@ KBUILD_CFLAGS := $(shell echo $(KBUILD_C
  82. KBUILD_CFLAGS := $(filter-out -fstack-protector, $(KBUILD_CFLAGS))
  83. KBUILD_CFLAGS := $(LINUXINCLUDE) $(KBUILD_CFLAGS) -D__KERNEL__ \
  84. - -DBOOT_HEAP_SIZE=$(BOOT_HEAP_SIZE) -D"VMLINUX_LOAD_ADDRESS_ULL=$(VMLINUX_LOAD_ADDRESS)ull"
  85. + -DBOOT_HEAP_SIZE=$(BOOT_HEAP_SIZE) -D"VMLINUX_LOAD_ADDRESS_ULL=$(VMLINUX_LOAD_ADDRESS)ull" \
  86. + -D__ZBOOT__
  87. KBUILD_AFLAGS := $(LINUXINCLUDE) $(KBUILD_AFLAGS) -D__ASSEMBLY__ \
  88. -DBOOT_HEAP_SIZE=$(BOOT_HEAP_SIZE) \