]> git.karo-electronics.de Git - karo-tx-linux.git/commitdiff
sparc: Unify strlen assembler.
authorDavid S. Miller <davem@davemloft.net>
Tue, 9 Dec 2008 09:07:09 +0000 (01:07 -0800)
committerDavid S. Miller <davem@davemloft.net>
Tue, 9 Dec 2008 09:07:09 +0000 (01:07 -0800)
Use the new asm/asm.h header to help commonize the
strlen assembler between 32-bit and 64-bit

While we're here, use proper linux/linkage.h macros
instead of by-hand stuff.

Signed-off-by: David S. Miller <davem@davemloft.net>
arch/sparc/lib/Makefile
arch/sparc/lib/strlen.S [moved from arch/sparc/lib/strlen_64.S with 67% similarity]
arch/sparc/lib/strlen_32.S [deleted file]

index 05ae5c945e35aaed3bf3f6521c960978fd773c55..0db2c61a0f7890ea066e80b7e38d7487d072da96 100644 (file)
@@ -6,7 +6,7 @@ ccflags-y := -Werror
 
 lib-$(CONFIG_SPARC32) += mul.o rem.o sdiv.o udiv.o umul.o urem.o ashrdi3.o
 lib-$(CONFIG_SPARC32) += memcpy.o memset.o
-lib-y                 += strlen_$(BITS).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
similarity index 67%
rename from arch/sparc/lib/strlen_64.S
rename to arch/sparc/lib/strlen.S
index e9ba1920d818e2c714c1beb8ed75010224563b2d..536f83507fbff1dc669f998f5e6b7336812225a5 100644 (file)
@@ -1,37 +1,38 @@
-/* strlen.S: Sparc64 optimized strlen code
+/* strlen.S: Sparc optimized strlen code
  * Hand optimized from GNU libc's strlen
  * Copyright (C) 1991,1996 Free Software Foundation
- * Copyright (C) 1996 David S. Miller (davem@caip.rutgers.edu)
+ * Copyright (C) 1996,2008 David S. Miller (davem@davemloft.net)
  * Copyright (C) 1996, 1997 Jakub Jelinek (jj@sunsite.mff.cuni.cz)
  */
 
+#include <linux/linkage.h>
+#include <asm/asm.h>
+
 #define LO_MAGIC 0x01010101
 #define HI_MAGIC 0x80808080
 
-       .align  32
-       .globl  strlen
-       .type   strlen,#function
-strlen:
+       .text
+ENTRY(strlen)
        mov     %o0, %o1
        andcc   %o0, 3, %g0
-       be,pt   %icc, 9f
+       BRANCH32(be, pt, 9f)
         sethi  %hi(HI_MAGIC), %o4
        ldub    [%o0], %o5
-       brz,pn  %o5, 11f
+       BRANCH_REG_ZERO(pn, %o5, 11f)
         add    %o0, 1, %o0
        andcc   %o0, 3, %g0
-       be,pn   %icc, 4f
+       BRANCH32(be, pn, 4f)
         or     %o4, %lo(HI_MAGIC), %o3
        ldub    [%o0], %o5
-       brz,pn  %o5, 12f
+       BRANCH_REG_ZERO(pn, %o5, 12f)
         add    %o0, 1, %o0
        andcc   %o0, 3, %g0
-       be,pt   %icc, 5f
+       BRANCH32(be, pt, 5f)
         sethi  %hi(LO_MAGIC), %o4
        ldub    [%o0], %o5
-       brz,pn  %o5, 13f
+       BRANCH_REG_ZERO(pn, %o5, 13f)
         add    %o0, 1, %o0
-       ba,pt   %icc, 8f
+       BRANCH32(ba, pt, 8f)
         or     %o4, %lo(LO_MAGIC), %o2
 9:
        or      %o4, %lo(HI_MAGIC), %o3
@@ -44,24 +45,24 @@ strlen:
 2:
        sub     %o5, %o2, %o4
        andcc   %o4, %o3, %g0
-       be,pt   %icc, 8b
+       BRANCH32(be, pt, 8b)
         add    %o0, 4, %o0
 
        /* Check every byte. */
        srl     %o5, 24, %g7
        andcc   %g7, 0xff, %g0
-       be,pn   %icc, 1f
+       BRANCH32(be, pn, 1f)
         add    %o0, -4, %o4
        srl     %o5, 16, %g7
        andcc   %g7, 0xff, %g0
-       be,pn   %icc, 1f
+       BRANCH32(be, pn, 1f)
         add    %o4, 1, %o4
        srl     %o5, 8, %g7
        andcc   %g7, 0xff, %g0
-       be,pn   %icc, 1f
+       BRANCH32(be, pn, 1f)
         add    %o4, 1, %o4
        andcc   %o5, 0xff, %g0
-       bne,a,pt %icc, 2b
+       BRANCH32_ANNUL(bne, pt, 2b)
         ld     [%o0], %o5
        add     %o4, 1, %o4
 1:
@@ -76,5 +77,4 @@ strlen:
 13:
        retl
         mov    2, %o0
-
-       .size   strlen, .-strlen
+ENDPROC(strlen)
diff --git a/arch/sparc/lib/strlen_32.S b/arch/sparc/lib/strlen_32.S
deleted file mode 100644 (file)
index ed9a763..0000000
+++ /dev/null
@@ -1,81 +0,0 @@
-/* strlen.S: Sparc optimized strlen code
- * Hand optimized from GNU libc's strlen
- * Copyright (C) 1991,1996 Free Software Foundation
- * Copyright (C) 1996 David S. Miller (davem@caip.rutgers.edu)
- * Copyright (C) 1996 Jakub Jelinek (jj@sunsite.mff.cuni.cz)
- */
-
-#define LO_MAGIC 0x01010101
-#define HI_MAGIC 0x80808080
-
-0:
-       ldub    [%o0], %o5
-       cmp     %o5, 0
-       be      1f
-        add    %o0, 1, %o0
-       andcc   %o0, 3, %g0
-       be      4f
-        or     %o4, %lo(HI_MAGIC), %o3
-       ldub    [%o0], %o5
-       cmp     %o5, 0
-       be      2f
-        add    %o0, 1, %o0
-       andcc   %o0, 3, %g0
-       be      5f
-        sethi  %hi(LO_MAGIC), %o4
-       ldub    [%o0], %o5
-       cmp     %o5, 0
-       be      3f
-        add    %o0, 1, %o0
-       b       8f
-        or     %o4, %lo(LO_MAGIC), %o2
-1:
-       retl
-        mov    0, %o0
-2:
-       retl
-        mov    1, %o0
-3:
-       retl
-        mov    2, %o0
-
-       .align 4
-       .global strlen
-strlen:
-       mov     %o0, %o1
-       andcc   %o0, 3, %g0
-       bne     0b
-        sethi  %hi(HI_MAGIC), %o4
-       or      %o4, %lo(HI_MAGIC), %o3
-4:
-       sethi   %hi(LO_MAGIC), %o4
-5:
-       or      %o4, %lo(LO_MAGIC), %o2
-8:
-       ld      [%o0], %o5
-2:
-       sub     %o5, %o2, %o4
-       andcc   %o4, %o3, %g0
-       be      8b
-        add    %o0, 4, %o0
-
-       /* Check every byte. */
-       srl     %o5, 24, %g5
-       andcc   %g5, 0xff, %g0
-       be      1f
-        add    %o0, -4, %o4
-       srl     %o5, 16, %g5
-       andcc   %g5, 0xff, %g0
-       be      1f
-        add    %o4, 1, %o4
-       srl     %o5, 8, %g5
-       andcc   %g5, 0xff, %g0
-       be      1f
-        add    %o4, 1, %o4
-       andcc   %o5, 0xff, %g0
-       bne,a   2b
-        ld     [%o0], %o5
-       add     %o4, 1, %o4
-1:
-       retl
-        sub    %o4, %o1, %o0