summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndree Buschmann <AndreeBuschmann@t-online.de>2010-05-10 19:12:03 +0000
committerAndree Buschmann <AndreeBuschmann@t-online.de>2010-05-10 19:12:03 +0000
commit18b5488a4a5c84e64f1d45537ee0e46055f83482 (patch)
treecbe7891e1b243292b264738738dd22eda352ed8b
parent08d3c0be378a8e929379b398e0feb2eb164bc36a (diff)
downloadrockbox-18b5488a4a5c84e64f1d45537ee0e46055f83482.tar.gz
rockbox-18b5488a4a5c84e64f1d45537ee0e46055f83482.zip
Minor speed up (+3%) of iPod Video screen updates.
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@25938 a1c6a512-1295-4272-9138-f99709370657
-rw-r--r--firmware/target/arm/ipod/video/lcd-as-video.S20
1 files changed, 13 insertions, 7 deletions
diff --git a/firmware/target/arm/ipod/video/lcd-as-video.S b/firmware/target/arm/ipod/video/lcd-as-video.S
index 4b0cabcec2..21a04a6529 100644
--- a/firmware/target/arm/ipod/video/lcd-as-video.S
+++ b/firmware/target/arm/ipod/video/lcd-as-video.S
@@ -25,7 +25,9 @@
25 * void lcd_write_data(const fb_data *addr, 25 * void lcd_write_data(const fb_data *addr,
26 * int pixelcount); 26 * int pixelcount);
27 * 27 *
28 * Writes pixelcount pixels from src-pointer (lcd_framebuffer) to BCM dataport. 28 * Writes pixelcount pixels from src-pointer (lcd_framebuffer) to BCM dataport.
29 * Use the sequence ld 2, wr 2, ld 2, wr 2 with alternating registers for best
30 * performance.
29 */ 31 */
30 .align 2 32 .align 2
31 .global lcd_write_data 33 .global lcd_write_data
@@ -37,20 +39,24 @@ lcd_write_data: /* r1 = pixel count, must be even */
37 39
38 subs r1, r1, #16 40 subs r1, r1, #16
39.loop16: 41.loop16:
40 ldmgeia r0!, {r2-r4, r12} 42 ldmgeia r0!, {r2-r3}
41 stmgeia lr, {r2-r4, r12} 43 stmgeia lr, {r2-r3}
42 ldmgeia r0!, {r2-r4, r12} 44 ldmgeia r0!, {r4, r12}
43 stmgeia lr, {r2-r4, r12} 45 stmgeia lr, {r4, r12}
46 ldmgeia r0!, {r2-r3}
47 stmgeia lr, {r2-r3}
48 ldmgeia r0!, {r4, r12}
49 stmgeia lr, {r4, r12}
44 subges r1, r1, #16 50 subges r1, r1, #16
45 bge .loop16 51 bge .loop16
46 52
47 /* no need to correct the count, we're just checking bits from now */ 53 /* no need to correct the count, we're just checking bits from now */
48 tst r1, #8 54 tst r1, #8
49 ldmneia r0!, {r2-r4, r12} 55 ldmneia r0!, {r2-r4, r12}
50 stmneia lr, {r2-r4, r12} 56 stmneia lr, {r2-r4, r12}
51 tst r1, #4 57 tst r1, #4
52 ldmneia r0!, {r2-r3} 58 ldmneia r0!, {r2-r3}
53 stmneia lr, {r2-r3} 59 stmneia lr, {r2-r3}
54 tst r1, #2 60 tst r1, #2
55 ldrne r3, [r0], #4 61 ldrne r3, [r0], #4
56 strne r3, [lr] 62 strne r3, [lr]