diff options
author | Andree Buschmann <AndreeBuschmann@t-online.de> | 2010-05-10 19:12:03 +0000 |
---|---|---|
committer | Andree Buschmann <AndreeBuschmann@t-online.de> | 2010-05-10 19:12:03 +0000 |
commit | 18b5488a4a5c84e64f1d45537ee0e46055f83482 (patch) | |
tree | cbe7891e1b243292b264738738dd22eda352ed8b /firmware/target/arm/ipod/video/lcd-as-video.S | |
parent | 08d3c0be378a8e929379b398e0feb2eb164bc36a (diff) | |
download | rockbox-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
Diffstat (limited to 'firmware/target/arm/ipod/video/lcd-as-video.S')
-rw-r--r-- | firmware/target/arm/ipod/video/lcd-as-video.S | 20 |
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] |