Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

sparc: Commonize memcmp assembler.

Signed-off-by: David S. Miller <davem@davemloft.net>

+28 -63
-2
arch/sparc/kernel/sparc_ksyms_32.c
··· 61 61 extern void *__bzero(void *, size_t); 62 62 extern void *__memscan_zero(void *, size_t); 63 63 extern void *__memscan_generic(void *, int, size_t); 64 - extern int __memcmp(const void *, const void *, __kernel_size_t); 65 64 extern int __strncmp(const char *, const char *, __kernel_size_t); 66 65 67 66 extern int __ashrdi3(int, int); ··· 210 211 EXPORT_SYMBOL(__bzero); 211 212 EXPORT_SYMBOL(__memscan_zero); 212 213 EXPORT_SYMBOL(__memscan_generic); 213 - EXPORT_SYMBOL(__memcmp); 214 214 EXPORT_SYMBOL(__strncmp); 215 215 EXPORT_SYMBOL(__memmove); 216 216
-2
arch/sparc/kernel/sparc_ksyms_64.c
··· 62 62 extern void *__bzero(void *, size_t); 63 63 extern void *__memscan_zero(void *, size_t); 64 64 extern void *__memscan_generic(void *, int, size_t); 65 - extern int __memcmp(const void *, const void *, __kernel_size_t); 66 65 extern __kernel_size_t strlen(const char *); 67 66 extern void sys_sigsuspend(void); 68 67 extern int compat_sys_ioctl(unsigned int fd, unsigned int cmd, u32 arg); ··· 222 223 EXPORT_SYMBOL(__bzero); 223 224 EXPORT_SYMBOL(__memscan_zero); 224 225 EXPORT_SYMBOL(__memscan_generic); 225 - EXPORT_SYMBOL(__memcmp); 226 226 EXPORT_SYMBOL(__memset); 227 227 228 228 EXPORT_SYMBOL(csum_partial);
+1 -1
arch/sparc/lib/Makefile
··· 9 9 lib-y += strlen.o 10 10 lib-y += checksum_$(BITS).o 11 11 lib-$(CONFIG_SPARC32) += blockops.o 12 - lib-y += memscan_$(BITS).o memcmp_$(BITS).o strncmp_$(BITS).o 12 + lib-y += memscan_$(BITS).o memcmp.o strncmp_$(BITS).o 13 13 lib-y += strncpy_from_user_$(BITS).o strlen_user_$(BITS).o 14 14 lib-$(CONFIG_SPARC32) += divdi3.o udivdi3.o 15 15 lib-$(CONFIG_SPARC32) += copy_user.o locks.o
+27
arch/sparc/lib/memcmp.S
··· 1 + /* Sparc optimized memcmp code. 2 + * 3 + * Copyright (C) 1997 Jakub Jelinek (jj@sunsite.mff.cuni.cz) 4 + * Copyright (C) 2000, 2008 David S. Miller (davem@davemloft.net) 5 + */ 6 + 7 + #include <linux/linkage.h> 8 + #include <asm/asm.h> 9 + 10 + .text 11 + ENTRY(memcmp) 12 + cmp %o2, 0 13 + 1: BRANCH32(be, pn, 2f) 14 + nop 15 + ldub [%o0], %g7 16 + ldub [%o1], %g3 17 + sub %o2, 1, %o2 18 + add %o0, 1, %o0 19 + add %o1, 1, %o1 20 + subcc %g7, %g3, %g3 21 + BRANCH32(be, pt, 1b) 22 + cmp %o2, 0 23 + retl 24 + mov %g3, %o0 25 + 2: retl 26 + mov 0, %o0 27 + ENDPROC(memcmp)
-30
arch/sparc/lib/memcmp_32.S
··· 1 - .text 2 - .align 4 3 - .global __memcmp, memcmp 4 - __memcmp: 5 - memcmp: 6 - cmp %o2, 0 7 - ble L3 8 - mov 0, %g3 9 - L5: 10 - ldub [%o0], %g2 11 - ldub [%o1], %g3 12 - sub %g2, %g3, %g2 13 - mov %g2, %g3 14 - sll %g2, 24, %g2 15 - 16 - cmp %g2, 0 17 - bne L3 18 - add %o0, 1, %o0 19 - 20 - add %o2, -1, %o2 21 - 22 - cmp %o2, 0 23 - bg L5 24 - add %o1, 1, %o1 25 - L3: 26 - sll %g3, 24, %o0 27 - sra %o0, 24, %o0 28 - 29 - retl 30 - nop
-28
arch/sparc/lib/memcmp_64.S
··· 1 - /* 2 - * Sparc64 optimized memcmp code. 3 - * 4 - * Copyright (C) 1997 Jakub Jelinek (jj@sunsite.mff.cuni.cz) 5 - * Copyright (C) 2000 David S. Miller (davem@redhat.com) 6 - */ 7 - 8 - .text 9 - .align 32 10 - .globl __memcmp, memcmp 11 - __memcmp: 12 - memcmp: 13 - cmp %o2, 0 ! IEU1 Group 14 - loop: be,pn %icc, ret_0 ! CTI 15 - nop ! IEU0 16 - ldub [%o0], %g7 ! LSU Group 17 - ldub [%o1], %g3 ! LSU Group 18 - sub %o2, 1, %o2 ! IEU0 19 - add %o0, 1, %o0 ! IEU1 20 - add %o1, 1, %o1 ! IEU0 Group 21 - subcc %g7, %g3, %g3 ! IEU1 Group 22 - be,pt %icc, loop ! CTI 23 - cmp %o2, 0 ! IEU1 Group 24 - 25 - ret_n0: retl 26 - mov %g3, %o0 27 - ret_0: retl 28 - mov 0, %o0