sparc: Commonize memcmp assembler.

Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
David S. Miller
2008-12-09 04:09:07 -08:00
parent ae984d72e0
commit 18cdae68e7
6 changed files with 28 additions and 63 deletions

View File

@@ -9,7 +9,7 @@ lib-$(CONFIG_SPARC32) += memcpy.o memset.o
lib-y += strlen.o
lib-y += checksum_$(BITS).o
lib-$(CONFIG_SPARC32) += blockops.o
lib-y += memscan_$(BITS).o memcmp_$(BITS).o strncmp_$(BITS).o
lib-y += memscan_$(BITS).o memcmp.o strncmp_$(BITS).o
lib-y += strncpy_from_user_$(BITS).o strlen_user_$(BITS).o
lib-$(CONFIG_SPARC32) += divdi3.o udivdi3.o
lib-$(CONFIG_SPARC32) += copy_user.o locks.o

27
arch/sparc/lib/memcmp.S Normal file
View File

@@ -0,0 +1,27 @@
/* Sparc optimized memcmp code.
*
* Copyright (C) 1997 Jakub Jelinek (jj@sunsite.mff.cuni.cz)
* Copyright (C) 2000, 2008 David S. Miller (davem@davemloft.net)
*/
#include <linux/linkage.h>
#include <asm/asm.h>
.text
ENTRY(memcmp)
cmp %o2, 0
1: BRANCH32(be, pn, 2f)
nop
ldub [%o0], %g7
ldub [%o1], %g3
sub %o2, 1, %o2
add %o0, 1, %o0
add %o1, 1, %o1
subcc %g7, %g3, %g3
BRANCH32(be, pt, 1b)
cmp %o2, 0
retl
mov %g3, %o0
2: retl
mov 0, %o0
ENDPROC(memcmp)

View File

@@ -1,30 +0,0 @@
.text
.align 4
.global __memcmp, memcmp
__memcmp:
memcmp:
cmp %o2, 0
ble L3
mov 0, %g3
L5:
ldub [%o0], %g2
ldub [%o1], %g3
sub %g2, %g3, %g2
mov %g2, %g3
sll %g2, 24, %g2
cmp %g2, 0
bne L3
add %o0, 1, %o0
add %o2, -1, %o2
cmp %o2, 0
bg L5
add %o1, 1, %o1
L3:
sll %g3, 24, %o0
sra %o0, 24, %o0
retl
nop

View File

@@ -1,28 +0,0 @@
/*
* Sparc64 optimized memcmp code.
*
* Copyright (C) 1997 Jakub Jelinek (jj@sunsite.mff.cuni.cz)
* Copyright (C) 2000 David S. Miller (davem@redhat.com)
*/
.text
.align 32
.globl __memcmp, memcmp
__memcmp:
memcmp:
cmp %o2, 0 ! IEU1 Group
loop: be,pn %icc, ret_0 ! CTI
nop ! IEU0
ldub [%o0], %g7 ! LSU Group
ldub [%o1], %g3 ! LSU Group
sub %o2, 1, %o2 ! IEU0
add %o0, 1, %o0 ! IEU1
add %o1, 1, %o1 ! IEU0 Group
subcc %g7, %g3, %g3 ! IEU1 Group
be,pt %icc, loop ! CTI
cmp %o2, 0 ! IEU1 Group
ret_n0: retl
mov %g3, %o0
ret_0: retl
mov 0, %o0