dslinux/linux-2.6.x/arch/arm/lib memset.S

amadeus dslinux_amadeus at user.in-berlin.de
Thu Aug 17 13:03:03 CEST 2006


Update of /cvsroot/dslinux/dslinux/linux-2.6.x/arch/arm/lib
In directory antilope:/tmp/cvs-serv21518/linux-2.6.x/arch/arm/lib

Modified Files:
	memset.S 
Log Message:
8bit write cleanup

Index: memset.S
===================================================================
RCS file: /cvsroot/dslinux/dslinux/linux-2.6.x/arch/arm/lib/memset.S,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -d -r1.2 -r1.3
--- memset.S	20 Feb 2006 16:31:28 -0000	1.2
+++ memset.S	17 Aug 2006 11:03:01 -0000	1.3
@@ -9,6 +9,7 @@
  *
  *  ASM optimised string functions
  */
+#include <linux/config.h>
 #include <linux/linkage.h>
 #include <asm/assembler.h>
 
@@ -19,10 +20,20 @@
 1:	subs	r2, r2, #4		@ 1 do we have enough
 	blt	5f			@ 1 bytes to align with?
 	cmp	r3, #2			@ 1
+#ifdef CONFIG_NDS_ROM8BIT
+	add	r2, r2, r3		@ 1 (r2 = r2 - (4 - r3))
+	swpltb	r3, r1, [r0]
+	addlt	r0, r0, #1
+	swpleb	r3, r1, [r0]
+	addle	r0, r0, #1
+	swpb	r3, r1, [r0]
+	add	r0, r0, #1
+#else
 	strltb	r1, [r0], #1		@ 1
 	strleb	r1, [r0], #1		@ 1
 	strb	r1, [r0], #1		@ 1
 	add	r2, r2, r3		@ 1 (r2 = r2 - (4 - r3))
+#endif
 /*
  * The pointer is now aligned and the length is adjusted.  Try doing the
  * memzero again.
@@ -73,8 +84,20 @@
  * may have an unaligned pointer as well.
  */
 5:	tst	r2, #2
+#ifdef CONFIG_NDS_ROM8BIT
+	swpneb	r3, r1, [r0]
+	addne	r0, r0, #1
+	swpneb	r3, r1, [r0]
+	addne	r0, r0, #1
+#else
 	strneb	r1, [r0], #1
 	strneb	r1, [r0], #1
+#endif
 	tst	r2, #1
+#ifdef CONFIG_NDS_ROM8BIT
+	swpneb	r3, r1, [r0]
+	addne	r0, r0, #1
+#else
 	strneb	r1, [r0], #1
+#endif
 	RETINSTR(mov,pc,lr)




More information about the dslinux-commit mailing list