From: Andy P. <at...@us...> - 2002-04-09 17:07:28
|
Update of /cvsroot/linux-vax/kernel-2.4/arch/sh/lib In directory usw-pr-cvs1:/tmp/cvs-serv15874/sh/lib Modified Files: Makefile checksum.S memchr.S memcpy.S memmove.S memset.S Added Files: strlen.S Log Message: synch 2.4.15 commit 30 --- NEW FILE --- /* $Id: strlen.S,v 1.1 2002/04/09 17:07:20 atp Exp $ * * "strlen" implementation of SuperH * * Copyright (C) 1999 Kaz Kojima * */ /* size_t strlen (const char *s) */ #include <linux/linkage.h> ENTRY(strlen) mov r4,r0 and #3,r0 tst r0,r0 bt/s 1f mov #0,r2 add #-1,r0 shll2 r0 shll r0 braf r0 nop mov.b @r4+,r1 tst r1,r1 bt 8f add #1,r2 mov.b @r4+,r1 tst r1,r1 bt 8f add #1,r2 mov.b @r4+,r1 tst r1,r1 bt 8f add #1,r2 1: mov #0,r3 2: mov.l @r4+,r1 cmp/str r3,r1 bf/s 2b add #4,r2 add #-4,r2 #ifndef __LITTLE_ENDIAN__ swap.b r1,r1 swap.w r1,r1 swap.b r1,r1 #endif extu.b r1,r0 tst r0,r0 bt/s 8f shlr8 r1 add #1,r2 extu.b r1,r0 tst r0,r0 bt/s 8f shlr8 r1 add #1,r2 extu.b r1,r0 tst r0,r0 bt 8f add #1,r2 8: rts mov r2,r0 Index: Makefile =================================================================== RCS file: /cvsroot/linux-vax/kernel-2.4/arch/sh/lib/Makefile,v retrieving revision 1.1.1.1 retrieving revision 1.2 diff -u -r1.1.1.1 -r1.2 --- Makefile 14 Jan 2001 19:48:47 -0000 1.1.1.1 +++ Makefile 9 Apr 2002 17:07:20 -0000 1.2 @@ -4,7 +4,7 @@ L_TARGET = lib.a obj-y = delay.o memcpy.o memset.o memmove.o memchr.o old-checksum.o \ - checksum.o strcasecmp.o + checksum.o strcasecmp.o strlen.o USE_STANDARD_AS_RULE := true Index: checksum.S =================================================================== RCS file: /cvsroot/linux-vax/kernel-2.4/arch/sh/lib/checksum.S,v retrieving revision 1.1.1.2 retrieving revision 1.2 diff -u -r1.1.1.2 -r1.2 --- checksum.S 25 Feb 2001 23:15:21 -0000 1.1.1.2 +++ checksum.S 9 Apr 2002 17:07:20 -0000 1.2 @@ -54,13 +54,14 @@ tst #2, r0 ! Check alignment. bt 2f ! Jump if alignment is ok. ! - add #-2, r5 ! Alignment uses up two bytes. + add #-2, r5 ! Alignment uses up two bytes. cmp/pz r5 ! bt/s 1f ! Jump if we had at least two bytes. clrt bra 6f add #2, r5 ! r5 was < 2. Deal with it. 1: + mov r5, r1 ! Save new len for later use. mov.w @r4+, r0 extu.w r0, r0 addc r0, r6 @@ -90,7 +91,7 @@ addc r3, r6 addc r0, r6 addc r2, r6 - movt r0 + movt r0 dt r5 bf/s 3b cmp/eq #1, r0 @@ -185,48 +186,48 @@ mov.l r5,@-r15 mov.l r6,@-r15 - mov #3, r0 ! Check src and dest are equally aligned - mov r4, r1 - and r0, r1 - and r5, r0 - cmp/eq r1, r0 - bf 3f ! Different alignments, use slow version - tst #1,r0 ! Check dest word aligned - bf 3f ! If not, do it the slow way + mov #3,r0 ! Check src and dest are equally aligned + mov r4,r1 + and r0,r1 + and r5,r0 + cmp/eq r1,r0 + bf 3f ! Different alignments, use slow version + tst #1,r0 ! Check dest word aligned + bf 3f ! If not, do it the slow way mov #2,r0 - tst r0,r5 ! Check dest alignment. - bt 2f ! Jump if alignment is ok. - add #-2,r6 ! Alignment uses up two bytes. - cmp/pz r6 ! Jump if we had at least two bytes. + tst r0,r5 ! Check dest alignment. + bt 2f ! Jump if alignment is ok. + add #-2,r6 ! Alignment uses up two bytes. + cmp/pz r6 ! Jump if we had at least two bytes. bt/s 1f clrt bra 4f - add #2,r6 ! r6 was < 2. Deal with it. + add #2,r6 ! r6 was < 2. Deal with it. -3: ! Handle different src and dest alinments. +3: ! Handle different src and dest alignments. ! This is not common, so simple byte by byte copy will do. - mov r6, r2 + mov r6,r2 shlr r6 - tst r6, r6 + tst r6,r6 bt 4f clrt -5: -SRC( mov.b @r4+,r0 ) -DST( mov.b r0,@r5 ) - add #1, r5 -SRC( mov.b @r4+,r1 ) -DST( mov.b r1,@r5 ) - add #1,r5 - - extu.b r0,r0 + .align 2 +5: +SRC( mov.b @r4+,r1 ) +SRC( mov.b @r4+,r0 ) extu.b r1,r1 +DST( mov.b r1,@r5 ) +DST( mov.b r0,@(1,r5) ) + extu.b r0,r0 + add #2,r5 + #ifdef __LITTLE_ENDIAN__ - shll8 r1 -#else shll8 r0 +#else + shll8 r1 #endif - or r1,r0 + or r1,r0 addc r0,r7 movt r0 @@ -238,16 +239,16 @@ mov r2, r0 tst #1, r0 - bt 7f + bt 7f bra 5f clrt ! src and dest equally aligned, but to a two byte boundary. ! Handle first two bytes as a special case - .align 5 + .align 2 1: -SRC( mov.w @r4+,r0 ) -DST( mov.w r0,@r5 ) +SRC( mov.w @r4+,r0 ) +DST( mov.w r0,@r5 ) add #2,r5 extu.w r0,r0 addc r0,r7 @@ -260,42 +261,36 @@ tst r6,r6 bt/s 2f clrt + .align 2 1: -SRC( mov.l @r4+,r0 ) -SRC( mov.l @r4+,r1 ) +SRC( mov.l @r4+,r0 ) +SRC( mov.l @r4+,r1 ) addc r0,r7 -DST( mov.l r0,@r5 ) - add #4,r5 +DST( mov.l r0,@r5 ) +DST( mov.l r1,@(4,r5) ) addc r1,r7 -DST( mov.l r1,@r5 ) - add #4,r5 -SRC( mov.l @r4+,r0 ) -SRC( mov.l @r4+,r1 ) +SRC( mov.l @r4+,r0 ) +SRC( mov.l @r4+,r1 ) addc r0,r7 -DST( mov.l r0,@r5 ) - add #4,r5 +DST( mov.l r0,@(8,r5) ) +DST( mov.l r1,@(12,r5) ) addc r1,r7 -DST( mov.l r1,@r5 ) - add #4,r5 SRC( mov.l @r4+,r0 ) -SRC( mov.l @r4+,r1 ) +SRC( mov.l @r4+,r1 ) addc r0,r7 -DST( mov.l r0,@r5 ) - add #4,r5 +DST( mov.l r0,@(16,r5) ) +DST( mov.l r1,@(20,r5) ) addc r1,r7 -DST( mov.l r1,@r5 ) - add #4,r5 -SRC( mov.l @r4+,r0 ) -SRC( mov.l @r4+,r1 ) +SRC( mov.l @r4+,r0 ) +SRC( mov.l @r4+,r1 ) addc r0,r7 -DST( mov.l r0,@r5 ) - add #4,r5 +DST( mov.l r0,@(24,r5) ) +DST( mov.l r1,@(28,r5) ) addc r1,r7 -DST( mov.l r1,@r5 ) - add #4,r5 + add #32,r5 movt r0 dt r6 bf/s 1b Index: memchr.S =================================================================== RCS file: /cvsroot/linux-vax/kernel-2.4/arch/sh/lib/memchr.S,v retrieving revision 1.1.1.1 retrieving revision 1.2 diff -u -r1.1.1.1 -r1.2 Index: memcpy.S =================================================================== RCS file: /cvsroot/linux-vax/kernel-2.4/arch/sh/lib/memcpy.S,v retrieving revision 1.1.1.1 retrieving revision 1.2 diff -u -r1.1.1.1 -r1.2 Index: memmove.S =================================================================== RCS file: /cvsroot/linux-vax/kernel-2.4/arch/sh/lib/memmove.S,v retrieving revision 1.1.1.1 retrieving revision 1.2 diff -u -r1.1.1.1 -r1.2 Index: memset.S =================================================================== RCS file: /cvsroot/linux-vax/kernel-2.4/arch/sh/lib/memset.S,v retrieving revision 1.1.1.1 retrieving revision 1.2 diff -u -r1.1.1.1 -r1.2 |