s390/decompressor: reuse lib/mem.S for mem functions
authorVasily Gorbik <gor@linux.ibm.com>
Tue, 12 Jun 2018 20:58:50 +0000 (22:58 +0200)
committerMartin Schwidefsky <schwidefsky@de.ibm.com>
Mon, 25 Jun 2018 08:14:39 +0000 (10:14 +0200)
Reusing arch/s390/lib/mem.S file solves a problem that sclp_early_core.c
and its dependencies have to be compiled with -march=z900 (no need to
compile compressed/misc.c with -march=z900). This also allows to avoid
mem functions duplicates, makes code a bit smaller and optimized mem
functions are utilized.

Reviewed-by: Heiko Carstens <heiko.carstens@de.ibm.com>
Signed-off-by: Vasily Gorbik <gor@linux.ibm.com>
Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
arch/s390/boot/Makefile
arch/s390/boot/compressed/misc.c
arch/s390/boot/mem.S [new file with mode: 0644]

index 5cf30b7..70b50b4 100644 (file)
@@ -17,6 +17,8 @@ KBUILD_CFLAGS := $(KBUILD_CFLAGS_DECOMPRESSOR)
 ifneq ($(CC_FLAGS_MARCH),-march=z900)
 AFLAGS_REMOVE_head.o           += $(CC_FLAGS_MARCH)
 AFLAGS_head.o                  += -march=z900
+AFLAGS_REMOVE_mem.o            += $(CC_FLAGS_MARCH)
+AFLAGS_mem.o                   += -march=z900
 CFLAGS_REMOVE_als.o            += $(CC_FLAGS_MARCH)
 CFLAGS_als.o                   += -march=z900
 CFLAGS_REMOVE_sclp_early_core.o        += $(CC_FLAGS_MARCH)
@@ -25,7 +27,7 @@ endif
 
 CFLAGS_sclp_early_core.o += -I$(srctree)/drivers/s390/char
 
-obj-y  := head.o als.o ebcdic.o sclp_early_core.o
+obj-y  := head.o als.o ebcdic.o sclp_early_core.o mem.o
 targets        := bzImage setup.a $(obj-y)
 subdir-        := compressed
 
index 511b2cc..f66ad73 100644 (file)
@@ -71,43 +71,6 @@ static int puts(const char *s)
        return 0;
 }
 
-void *memset(void *s, int c, size_t n)
-{
-       char *xs;
-
-       xs = s;
-       while (n--)
-               *xs++ = c;
-       return s;
-}
-
-void *memcpy(void *dest, const void *src, size_t n)
-{
-       const char *s = src;
-       char *d = dest;
-
-       while (n--)
-               *d++ = *s++;
-       return dest;
-}
-
-void *memmove(void *dest, const void *src, size_t n)
-{
-       const char *s = src;
-       char *d = dest;
-
-       if (d <= s) {
-               while (n--)
-                       *d++ = *s++;
-       } else {
-               d += n;
-               s += n;
-               while (n--)
-                       *--d = *--s;
-       }
-       return dest;
-}
-
 static void error(char *x)
 {
        unsigned long long psw = 0x000a0000deadbeefULL;
diff --git a/arch/s390/boot/mem.S b/arch/s390/boot/mem.S
new file mode 100644 (file)
index 0000000..b334636
--- /dev/null
@@ -0,0 +1,2 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+#include "../lib/mem.S"