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