]> git.neil.brown.name Git - history.git/commitdiff
[ARM] Optimise readsl.
authorRussell King <rmk@flint.arm.linux.org.uk>
Fri, 27 Feb 2004 15:50:02 +0000 (15:50 +0000)
committerRussell King <rmk@flint.arm.linux.org.uk>
Fri, 27 Feb 2004 15:50:02 +0000 (15:50 +0000)
This optimises the underlying string-long read function for little
endian platforms.

arch/arm/lib/io-readsl-armv4.S

index 449b7380f2ef56225e1e025b164f07682a47f8da..fa5397516d609ee9adae121476b9603de80d9f9f 100644 (file)
@@ -19,10 +19,24 @@ ENTRY(__raw_readsl)
                ands    ip, r1, #3
                bne     2f
 
-1:             ldr     r3, [r0]
-               str     r3, [r1], #4
-               subs    r2, r2, #1
-               bne     1b
+               subs    r2, r2, #4
+               bmi     1001f
+               stmfd   sp!, {r4, lr}
+1000:          ldr     r3, [r0, #0]
+               ldr     r4, [r0, #0]
+               ldr     ip, [r0, #0]
+               ldr     lr, [r0, #0]
+               subs    r2, r2, #4
+               stmia   r1!, {r3, r4, ip, lr}
+               bpl     1000b
+               ldmfd   sp!, {r4, lr}
+1001:          tst     r2, #2
+               ldrne   r3, [r0, #0]
+               ldrne   ip, [r0, #0]
+               stmneia r1!, {r3, ip}
+               tst     r2, #1
+               ldrne   r3, [r0, #0]
+               strne   r3, [r1, #0]
                mov     pc, lr
 
 2:             cmp     ip, #2