dslinux/uClibc/libc/string/arm _memcpy.S memset.S
amadeus
dslinux_amadeus at user.in-berlin.de
Fri Aug 18 15:05:09 CEST 2006
Update of /cvsroot/dslinux/dslinux/uClibc/libc/string/arm
In directory antilope:/tmp/cvs-serv8280/uClibc/libc/string/arm
Modified Files:
_memcpy.S memset.S
Log Message:
8bit write cleanup
Index: memset.S
===================================================================
RCS file: /cvsroot/dslinux/dslinux/uClibc/libc/string/arm/memset.S,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -d -r1.2 -r1.3
--- memset.S 20 Feb 2006 16:39:04 -0000 1.2
+++ memset.S 18 Aug 2006 13:05:07 -0000 1.3
@@ -32,7 +32,12 @@
orr a2, a2, a2, lsl $16
1:
tst a4, $3 @ aligned yet?
+#ifdef CONFIG_NDS_ROM8BIT
+ swpneb ip, a2, [a4]
+ addne a4, a4, #1
+#else
strneb a2, [a4], $1
+#endif
subne a3, a3, $1
bne 1b
mov ip, a2
@@ -56,6 +61,12 @@
2:
movs a3, a3 @ anything left?
moveq pc, lr @ nope
+#ifdef CONFIG_NDS_ROM8BIT
+3: swpb ip, a2, [a4]
+ add a4, a4, #1
+ subs a3, a3, #1
+ bne 3b
+#else
rsb a3, a3, $7
add pc, pc, a3, lsl $2
mov r0, r0
@@ -66,6 +77,7 @@
strb a2, [a4], $1
strb a2, [a4], $1
strb a2, [a4], $1
+#endif
mov pc, lr
.size memset,.-memset;
Index: _memcpy.S
===================================================================
RCS file: /cvsroot/dslinux/dslinux/uClibc/libc/string/arm/_memcpy.S,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -d -r1.2 -r1.3
--- _memcpy.S 20 Feb 2006 16:39:04 -0000 1.2
+++ _memcpy.S 18 Aug 2006 13:05:07 -0000 1.3
@@ -145,11 +145,26 @@
/* copy the crud byte at a time */
cmp r2, #2
ldrb r3, [r1], #1
+#ifdef CONFIG_NDS_ROM8BIT
+ swpb r3, r3, [r0]
+ add r0, r0, #1
+#else
strb r3, [r0], #1
+#endif
ldrgeb r3, [r1], #1
+#ifdef CONFIG_NDS_ROM8BIT
+ swpgeb r3, r3, [r0]
+ addge r0, r0, #1
+#else
strgeb r3, [r0], #1
+#endif
ldrgtb r3, [r1], #1
+#ifdef CONFIG_NDS_ROM8BIT
+ swpgtb r3, r3, [r0]
+ addgt r0, r0, #1
+#else
strgtb r3, [r0], #1
+#endif
ldmia sp!, {r0, pc}
/* erg - unaligned destination */
@@ -159,11 +174,26 @@
/* align destination with byte copies */
ldrb r3, [r1], #1
+#ifdef CONFIG_NDS_ROM8BIT
+ swpb r3, r3, [r0]
+ add r0, r0, #1
+#else
strb r3, [r0], #1
+#endif
ldrgeb r3, [r1], #1
+#ifdef CONFIG_NDS_ROM8BIT
+ swpgeb r3, r3, [r0]
+ addge r0, r0, #1
+#else
strgeb r3, [r0], #1
+#endif
ldrgtb r3, [r1], #1
+#ifdef CONFIG_NDS_ROM8BIT
+ swpgtb r3, r3, [r0]
+ addgt r0, r0, #1
+#else
strgtb r3, [r0], #1
+#endif
subs r2, r2, r12
blt .Lmemcpy_fl4 /* less the 4 bytes */
@@ -393,11 +423,26 @@
/* copy the crud byte at a time */
cmp r2, #2
ldrb r3, [r1, #-1]!
+#ifdef CONFIG_NDS_ROM8BIT
+ sub r0, r0, #1
+ swpb r3, r3, [r0]
+#else
strb r3, [r0, #-1]!
+#endif
ldrgeb r3, [r1, #-1]!
+#ifdef CONFIG_NDS_ROM8BIT
+ subge r0, r0, #1
+ swpgeb r3, r3, [r0]
+#else
strgeb r3, [r0, #-1]!
+#endif
ldrgtb r3, [r1, #-1]!
+#ifdef CONFIG_NDS_ROM8BIT
+ subgt r0, r0, #1
+ swpgtb r3, r3, [r0]
+#else
strgtb r3, [r0, #-1]!
+#endif
mov pc, lr
/* erg - unaligned destination */
@@ -406,11 +451,26 @@
/* align destination with byte copies */
ldrb r3, [r1, #-1]!
+#ifdef CONFIG_NDS_ROM8BIT
+ sub r0, r0, #1
+ swpb r3, r3, [r0]
+#else
strb r3, [r0, #-1]!
+#endif
ldrgeb r3, [r1, #-1]!
+#ifdef CONFIG_NDS_ROM8BIT
+ subge r0, r0, #1
+ swpgeb r3, r3, [r0]
+#else
strgeb r3, [r0, #-1]!
+#endif
ldrgtb r3, [r1, #-1]!
+#ifdef CONFIG_NDS_ROM8BIT
+ subgt r0, r0, #1
+ swpgtb r3, r3, [r0]
+#else
strgtb r3, [r0, #-1]!
+#endif
subs r2, r2, r12
blt .Lmemcpy_bl4 /* less than 4 bytes to go */
ands r12, r1, #3
More information about the dslinux-commit
mailing list