1
0
Fork 0
forked from len0rd/rockbox

Minor speed up (+3%) of iPod Video screen updates.

git-svn-id: svn://svn.rockbox.org/rockbox/trunk@25938 a1c6a512-1295-4272-9138-f99709370657
This commit is contained in:
Andree Buschmann 2010-05-10 19:12:03 +00:00
parent 08d3c0be37
commit 18b5488a4a

View file

@ -25,7 +25,9 @@
* void lcd_write_data(const fb_data *addr,
* int pixelcount);
*
* Writes pixelcount pixels from src-pointer (lcd_framebuffer) to BCM dataport.
* Writes pixelcount pixels from src-pointer (lcd_framebuffer) to BCM dataport.
* Use the sequence ld 2, wr 2, ld 2, wr 2 with alternating registers for best
* performance.
*/
.align 2
.global lcd_write_data
@ -37,20 +39,24 @@ lcd_write_data: /* r1 = pixel count, must be even */
subs r1, r1, #16
.loop16:
ldmgeia r0!, {r2-r4, r12}
stmgeia lr, {r2-r4, r12}
ldmgeia r0!, {r2-r4, r12}
stmgeia lr, {r2-r4, r12}
ldmgeia r0!, {r2-r3}
stmgeia lr, {r2-r3}
ldmgeia r0!, {r4, r12}
stmgeia lr, {r4, r12}
ldmgeia r0!, {r2-r3}
stmgeia lr, {r2-r3}
ldmgeia r0!, {r4, r12}
stmgeia lr, {r4, r12}
subges r1, r1, #16
bge .loop16
/* no need to correct the count, we're just checking bits from now */
tst r1, #8
ldmneia r0!, {r2-r4, r12}
stmneia lr, {r2-r4, r12}
stmneia lr, {r2-r4, r12}
tst r1, #4
ldmneia r0!, {r2-r3}
stmneia lr, {r2-r3}
stmneia lr, {r2-r3}
tst r1, #2
ldrne r3, [r0], #4
strne r3, [lr]