aboutsummaryrefslogtreecommitdiff
path: root/arch/powerpc/lib
diff options
context:
space:
mode:
Diffstat (limited to 'arch/powerpc/lib')
-rw-r--r--arch/powerpc/lib/Makefile6
-rw-r--r--arch/powerpc/lib/checksum_32.S (renamed from arch/powerpc/lib/checksum.S)0
-rw-r--r--arch/powerpc/lib/checksum_64.S (renamed from arch/powerpc/lib/checksum64.S)0
-rw-r--r--arch/powerpc/lib/copy_32.S (renamed from arch/powerpc/lib/copy32.S)0
-rw-r--r--arch/powerpc/lib/copypage_64.S (renamed from arch/powerpc/lib/copypage.S)0
-rw-r--r--arch/powerpc/lib/copyuser_64.S (renamed from arch/powerpc/lib/copyuser.S)0
-rw-r--r--arch/powerpc/lib/mem_64.S119
-rw-r--r--arch/powerpc/lib/memcpy_64.S (renamed from arch/powerpc/lib/memcpy.S)0
-rw-r--r--arch/powerpc/lib/usercopy_64.c (renamed from arch/powerpc/lib/usercopy.c)0
9 files changed, 122 insertions, 3 deletions
diff --git a/arch/powerpc/lib/Makefile b/arch/powerpc/lib/Makefile
index 347f9798e43..a8cedb96de5 100644
--- a/arch/powerpc/lib/Makefile
+++ b/arch/powerpc/lib/Makefile
@@ -3,7 +3,7 @@
#
obj-y := strcase.o string.o
-obj-$(CONFIG_PPC32) += div64.o copy32.o checksum.o
-obj-$(CONFIG_PPC64) += copypage.o copyuser.o memcpy.o usercopy.o \
- sstep.o checksum64.o
+obj-$(CONFIG_PPC32) += div64.o copy_32.o checksum_32.o
+obj-$(CONFIG_PPC64) += copypage_64.o copyuser_64.o memcpy_64.o \
+ usercopy_64.o sstep.o checksum_64.o mem_64.o
obj-$(CONFIG_PPC_ISERIES) += e2a.o
diff --git a/arch/powerpc/lib/checksum.S b/arch/powerpc/lib/checksum_32.S
index 7874e8a8045..7874e8a8045 100644
--- a/arch/powerpc/lib/checksum.S
+++ b/arch/powerpc/lib/checksum_32.S
diff --git a/arch/powerpc/lib/checksum64.S b/arch/powerpc/lib/checksum_64.S
index ef96c6c58ef..ef96c6c58ef 100644
--- a/arch/powerpc/lib/checksum64.S
+++ b/arch/powerpc/lib/checksum_64.S
diff --git a/arch/powerpc/lib/copy32.S b/arch/powerpc/lib/copy_32.S
index 420a912198a..420a912198a 100644
--- a/arch/powerpc/lib/copy32.S
+++ b/arch/powerpc/lib/copy_32.S
diff --git a/arch/powerpc/lib/copypage.S b/arch/powerpc/lib/copypage_64.S
index 733d61618bb..733d61618bb 100644
--- a/arch/powerpc/lib/copypage.S
+++ b/arch/powerpc/lib/copypage_64.S
diff --git a/arch/powerpc/lib/copyuser.S b/arch/powerpc/lib/copyuser_64.S
index a0b3fbbd6fb..a0b3fbbd6fb 100644
--- a/arch/powerpc/lib/copyuser.S
+++ b/arch/powerpc/lib/copyuser_64.S
diff --git a/arch/powerpc/lib/mem_64.S b/arch/powerpc/lib/mem_64.S
new file mode 100644
index 00000000000..68df20283ff
--- /dev/null
+++ b/arch/powerpc/lib/mem_64.S
@@ -0,0 +1,119 @@
+/*
+ * String handling functions for PowerPC.
+ *
+ * Copyright (C) 1996 Paul Mackerras.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version
+ * 2 of the License, or (at your option) any later version.
+ */
+#include <asm/processor.h>
+#include <asm/errno.h>
+#include <asm/ppc_asm.h>
+
+_GLOBAL(memset)
+ neg r0,r3
+ rlwimi r4,r4,8,16,23
+ andi. r0,r0,7 /* # bytes to be 8-byte aligned */
+ rlwimi r4,r4,16,0,15
+ cmplw cr1,r5,r0 /* do we get that far? */
+ rldimi r4,r4,32,0
+ mtcrf 1,r0
+ mr r6,r3
+ blt cr1,8f
+ beq+ 3f /* if already 8-byte aligned */
+ subf r5,r0,r5
+ bf 31,1f
+ stb r4,0(r6)
+ addi r6,r6,1
+1: bf 30,2f
+ sth r4,0(r6)
+ addi r6,r6,2
+2: bf 29,3f
+ stw r4,0(r6)
+ addi r6,r6,4
+3: srdi. r0,r5,6
+ clrldi r5,r5,58
+ mtctr r0
+ beq 5f
+4: std r4,0(r6)
+ std r4,8(r6)
+ std r4,16(r6)
+ std r4,24(r6)
+ std r4,32(r6)
+ std r4,40(r6)
+ std r4,48(r6)
+ std r4,56(r6)
+ addi r6,r6,64
+ bdnz 4b
+5: srwi. r0,r5,3
+ clrlwi r5,r5,29
+ mtcrf 1,r0
+ beq 8f
+ bf 29,6f
+ std r4,0(r6)
+ std r4,8(r6)
+ std r4,16(r6)
+ std r4,24(r6)
+ addi r6,r6,32
+6: bf 30,7f
+ std r4,0(r6)
+ std r4,8(r6)
+ addi r6,r6,16
+7: bf 31,8f
+ std r4,0(r6)
+ addi r6,r6,8
+8: cmpwi r5,0
+ mtcrf 1,r5
+ beqlr+
+ bf 29,9f
+ stw r4,0(r6)
+ addi r6,r6,4
+9: bf 30,10f
+ sth r4,0(r6)
+ addi r6,r6,2
+10: bflr 31
+ stb r4,0(r6)
+ blr
+
+_GLOBAL(memmove)
+ cmplw 0,r3,r4
+ bgt .backwards_memcpy
+ b .memcpy
+
+_GLOBAL(backwards_memcpy)
+ rlwinm. r7,r5,32-3,3,31 /* r0 = r5 >> 3 */
+ add r6,r3,r5
+ add r4,r4,r5
+ beq 2f
+ andi. r0,r6,3
+ mtctr r7
+ bne 5f
+1: lwz r7,-4(r4)
+ lwzu r8,-8(r4)
+ stw r7,-4(r6)
+ stwu r8,-8(r6)
+ bdnz 1b
+ andi. r5,r5,7
+2: cmplwi 0,r5,4
+ blt 3f
+ lwzu r0,-4(r4)
+ subi r5,r5,4
+ stwu r0,-4(r6)
+3: cmpwi 0,r5,0
+ beqlr
+ mtctr r5
+4: lbzu r0,-1(r4)
+ stbu r0,-1(r6)
+ bdnz 4b
+ blr
+5: mtctr r0
+6: lbzu r7,-1(r4)
+ stbu r7,-1(r6)
+ bdnz 6b
+ subf r5,r0,r5
+ rlwinm. r7,r5,32-3,3,31
+ beq 2b
+ mtctr r7
+ b 1b
diff --git a/arch/powerpc/lib/memcpy.S b/arch/powerpc/lib/memcpy_64.S
index 9ccacdf5bcb..9ccacdf5bcb 100644
--- a/arch/powerpc/lib/memcpy.S
+++ b/arch/powerpc/lib/memcpy_64.S
diff --git a/arch/powerpc/lib/usercopy.c b/arch/powerpc/lib/usercopy_64.c
index 5eea6f3c1e0..5eea6f3c1e0 100644
--- a/arch/powerpc/lib/usercopy.c
+++ b/arch/powerpc/lib/usercopy_64.c