Skip to contentSkip to conversation

s390: cleanup string functions.

PATCH New Martin Schwidefsky 1 participant 1 message Jun 11, 2004 s390

lore
Share & tools
lore
#0 lore raw

PATCH 1/1 s390: cleanup string functions.

[PATCH] s390: cleanup string functions.

From: Martin Schwidefsky <[email protected]>

Cleanup s390* string functions. This replaces the 31/64 bit assembler files (strcmp[64].S, strcpy[64].S & strncpy[64].S) with a single string.c file that uses some inline assemblies to issue the string instructions. In addition some more of the generic string function got an architecture dependent implementation.

diffstat:

 arch/s390/kernel/s390_ksyms.c |   19 -
 arch/s390/lib/Makefile        |    6 
 arch/s390/lib/memset.S        |   30 ---
 arch/s390/lib/memset64.S      |   30 ---
 arch/s390/lib/strcmp.S        |   27 --
 arch/s390/lib/strcmp64.S      |   27 --
 arch/s390/lib/strcpy.S        |   20 --
 arch/s390/lib/strcpy64.S      |   20 --
 arch/s390/lib/string.c        |  405 ++++++++++++++++++++++++++++++++++++++++++
 arch/s390/lib/strncpy.S       |   35 ---
 arch/s390/lib/strncpy64.S     |   35 ---
 include/asm-s390/string.h     |  228 +++++++++++------------
 12 files changed, 516 insertions(+), 366 deletions(-)
arch/s390/kernel/s390_ksyms.c +0 -19
diff -urN linux-2.6/arch/s390/kernel/s390_ksyms.c linux-2.6-s390/arch/s390/kernel/s390_ksyms.c
@@ -45,25 +45,6 @@
 EXPORT_SYMBOL(__down_interruptible);
 
 /*
- * string functions
- */
-EXPORT_SYMBOL_NOVERS(memcmp);
-EXPORT_SYMBOL_NOVERS(memset);
-EXPORT_SYMBOL_NOVERS(memmove);
-EXPORT_SYMBOL_NOVERS(memscan);
-EXPORT_SYMBOL_NOVERS(strlen);
-EXPORT_SYMBOL_NOVERS(strchr);
-EXPORT_SYMBOL_NOVERS(strcmp);
-EXPORT_SYMBOL_NOVERS(strncat);
-EXPORT_SYMBOL_NOVERS(strncmp);
-EXPORT_SYMBOL_NOVERS(strncpy);
-EXPORT_SYMBOL_NOVERS(strnlen);
-EXPORT_SYMBOL_NOVERS(strrchr);
-EXPORT_SYMBOL_NOVERS(strstr);
-EXPORT_SYMBOL_NOVERS(strpbrk);
-EXPORT_SYMBOL_NOVERS(strcpy);
-
-/*
  * binfmt_elf loader 
  */
 extern int dump_fpu (struct pt_regs * regs, s390_fp_regs *fpregs);
arch/s390/lib/Makefile +3 -3
diff -urN linux-2.6/arch/s390/lib/Makefile linux-2.6-s390/arch/s390/lib/Makefile
@@ -4,6 +4,6 @@
 
 EXTRA_AFLAGS := -traditional
 
-lib-y += delay.o 
-lib-$(CONFIG_ARCH_S390_31) += memset.o strcmp.o strcpy.o strncpy.o uaccess.o
-lib-$(CONFIG_ARCH_S390X) += memset64.o strcmp64.o strcpy64.o strncpy64.o uaccess64.o
+lib-y += delay.o string.o
+lib-$(CONFIG_ARCH_S390_31) += uaccess.o
+lib-$(CONFIG_ARCH_S390X) += uaccess64.o
arch/s390/lib/memset.S +0 -30
diff -urN linux-2.6/arch/s390/lib/memset.S linux-2.6-s390/arch/s390/lib/memset.S
@@ -1,30 +0,0 @@
-/*
- *  arch/s390/lib/memset.S
- *    S390 fast memset routine
- *
- *  S390 version
- *    Copyright (C) 1999 IBM Deutschland Entwicklung GmbH, IBM Corporation
- *    Author(s): Martin Schwidefsky ([email protected]),
- */
-
-/*
- * R2 = address to memory area
- * R3 = byte to fill memory with
- * R4 = number of bytes to fill
- */
-        .globl  memset
-memset:
-        LTR     4,4
-        JZ      memset_end
-        LR      0,2                    # save pointer to memory area
-        LR      1,3                    # move pad byte to R1
-        LR      3,4
-        SR      4,4                    # no source for MVCLE, only a pad byte
-        SR      5,5
-        MVCLE   2,4,0(1)               # thats it, MVCLE is your friend
-        JO      .-4
-        LR      2,0                    # return pointer to mem.
-memset_end:
-        BR      14
-        
-
arch/s390/lib/memset64.S +0 -30
diff -urN linux-2.6/arch/s390/lib/memset64.S linux-2.6-s390/arch/s390/lib/memset64.S
@@ -1,30 +0,0 @@
-/*
- *  arch/s390/lib/memset.S
- *    S390 fast memset routine
- *
- *  S390 version
- *    Copyright (C) 1999 IBM Deutschland Entwicklung GmbH, IBM Corporation
- *    Author(s): Martin Schwidefsky ([email protected]),
- */
-
-/*
- * R2 = address to memory area
- * R3 = byte to fill memory with
- * R4 = number of bytes to fill
- */
-        .globl  memset
-memset:
-        LTGR    4,4
-        JZ      memset_end
-        LGR     0,2                    # save pointer to memory area
-        LGR     1,3                    # move pad byte to R1
-        LGR     3,4
-        SGR     4,4                    # no source for MVCLE, only a pad byte
-        SGR     5,5
-        MVCLE   2,4,0(1)               # thats it, MVCLE is your friend
-        JO      .-4
-        LGR     2,0                    # return pointer to mem.
-memset_end:
-        BR      14
-        
-
arch/s390/lib/strcmp.S +0 -27
diff -urN linux-2.6/arch/s390/lib/strcmp.S linux-2.6-s390/arch/s390/lib/strcmp.S
@@ -1,27 +0,0 @@
-/*
- *  arch/s390/lib/strcmp.S
- *    S390 strcmp routine
- *
- *  S390 version
- *    Copyright (C) 1999 IBM Deutschland Entwicklung GmbH, IBM Corporation
- *    Author(s): Martin Schwidefsky ([email protected]),
- */
-
-/*
- * R2 = address of compare string
- * R3 = address of test string
- */
-        .globl   strcmp
-strcmp:
-        SR      0,0
-        SR      1,1
-        CLST    2,3
-        JO      .-4
-        JE      strcmp_equal
-        IC      0,0(3)
-        IC      1,0(2)
-        SR      1,0
-strcmp_equal:
-        LR      2,1
-        BR      14
-        
arch/s390/lib/strcmp64.S +0 -27
diff -urN linux-2.6/arch/s390/lib/strcmp64.S linux-2.6-s390/arch/s390/lib/strcmp64.S
@@ -1,27 +0,0 @@
-/*
- *  arch/s390/lib/strcmp.S
- *    S390 strcmp routine
- *
- *  S390 version
- *    Copyright (C) 1999 IBM Deutschland Entwicklung GmbH, IBM Corporation
- *    Author(s): Martin Schwidefsky ([email protected]),
- */
-
-/*
- * R2 = address of compare string
- * R3 = address of test string
- */
-        .globl   strcmp
-strcmp:
-        SGR     0,0
-        SGR     1,1
-        CLST    2,3
-        JO      .-4
-        JE      strcmp_equal
-        IC      0,0(3)
-        IC      1,0(2)
-        SGR     1,0
-strcmp_equal:
-        LGR     2,1
-        BR      14
-        
arch/s390/lib/strcpy.S +0 -20
diff -urN linux-2.6/arch/s390/lib/strcpy.S linux-2.6-s390/arch/s390/lib/strcpy.S
@@ -1,20 +0,0 @@
-/*
- *  arch/s390/kernel/strcpy.S
- *    S390 strcpy routine
- *
- *  S390 version
- *    Copyright (C) 2004 IBM Deutschland Entwicklung GmbH, IBM Corporation
- *    Author(s): Martin Schwidefsky ([email protected]),
- */
-
-/*
- * R2 = address of destination
- * R3 = address of source string
- */
-        .globl   strcpy
-strcpy:
-	sr	%r0,%r0
-0:	mvst	%r2,%r3
-	jo	0b
-	br	%r14
-
arch/s390/lib/strcpy64.S +0 -20
diff -urN linux-2.6/arch/s390/lib/strcpy64.S linux-2.6-s390/arch/s390/lib/strcpy64.S
@@ -1,20 +0,0 @@
-/*
- *  arch/s390/kernel/strcpy.S
- *    S390 strcpy routine
- *
- *  S390 version
- *    Copyright (C) 2004 IBM Deutschland Entwicklung GmbH, IBM Corporation
- *    Author(s): Martin Schwidefsky ([email protected]),
- */
-
-/*
- * R2 = address of destination
- * R3 = address of source string
- */
-        .globl   strcpy
-strcpy:
-	sgr	%r0,%r0
-0:	mvst	%r2,%r3
-	jo	0b
-	br	%r14
-
arch/s390/lib/string.c +405 -0

405 lines not on this page · raw message

arch/s390/lib/strncpy.S +0 -35
diff -urN linux-2.6/arch/s390/lib/strncpy.S linux-2.6-s390/arch/s390/lib/strncpy.S
@@ -1,35 +0,0 @@
-/*
- *  arch/s390/kernel/strncpy.S
- *    S390 strncpy routine
- *
- *  S390 version
- *    Copyright (C) 1999 IBM Deutschland Entwicklung GmbH, IBM Corporation
- *    Author(s): Martin Schwidefsky ([email protected]),
- */
-
-/*
- * R2 = address of destination
- * R3 = address of source string
- * R4 = max number of bytes to copy
- */
-        .globl   strncpy
-strncpy:
-        LR      1,2            # don't touch address in R2
-	LTR     4,4
-        JZ      strncpy_exit   # 0 bytes -> nothing to do
-	SR      0,0
-strncpy_loop:
-        ICM     0,1,0(3)       # ICM sets the cc, IC does not
-	LA      3,1(3)
-        STC     0,0(1)
-	LA      1,1(1)
-        JZ      strncpy_pad    # ICM inserted a 0x00
-        BRCT    4,strncpy_loop # R4 -= 1, jump to strncpy_loop if >  0
-strncpy_exit:
-        BR      14
-strncpy_clear:
-	STC	0,0(1)
-	LA	1,1(1)
-strncpy_pad:
-	BRCT	4,strncpy_clear
-	BR	14
arch/s390/lib/strncpy64.S +0 -35
diff -urN linux-2.6/arch/s390/lib/strncpy64.S linux-2.6-s390/arch/s390/lib/strncpy64.S
@@ -1,35 +0,0 @@
-/*
- *  arch/s390/kernel/strncpy.S
- *    S390 strncpy routine
- *
- *  S390 version
- *    Copyright (C) 1999 IBM Deutschland Entwicklung GmbH, IBM Corporation
- *    Author(s): Martin Schwidefsky ([email protected]),
- */
-
-/*
- * R2 = address of destination
- * R3 = address of source string
- * R4 = max number of bytes to copy
- */
-        .globl   strncpy
-strncpy:
-        LGR     1,2            # don't touch address in R2
-	LTR     4,4
-        JZ      strncpy_exit   # 0 bytes -> nothing to do
-	SGR     0,0
-strncpy_loop:
-        ICM     0,1,0(3)       # ICM sets the cc, IC does not
-	LA      3,1(3)
-        STC     0,0(1)
-	LA      1,1(1)
-        JZ      strncpy_pad    # ICM inserted a 0x00
-        BRCTG   4,strncpy_loop # R4 -= 1, jump to strncpy_loop if > 0
-strncpy_exit:
-        BR      14
-strncpy_clear:
-	STC	0,0(1)
-	LA	1,1(1)
-strncpy_pad:
-	BRCTG	4,strncpy_clear
-	BR	14
include/asm-s390/string.h +108 -120

244 lines not on this page · raw message