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

@ -26,6 +26,8 @@
* int pixelcount); * 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 .align 2
.global lcd_write_data .global lcd_write_data
@ -37,20 +39,24 @@ lcd_write_data: /* r1 = pixel count, must be even */
subs r1, r1, #16 subs r1, r1, #16
.loop16: .loop16:
ldmgeia r0!, {r2-r4, r12} ldmgeia r0!, {r2-r3}
stmgeia lr, {r2-r4, r12} stmgeia lr, {r2-r3}
ldmgeia r0!, {r2-r4, r12} ldmgeia r0!, {r4, r12}
stmgeia lr, {r2-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 subges r1, r1, #16
bge .loop16 bge .loop16
/* no need to correct the count, we're just checking bits from now */ /* no need to correct the count, we're just checking bits from now */
tst r1, #8 tst r1, #8
ldmneia r0!, {r2-r4, r12} ldmneia r0!, {r2-r4, r12}
stmneia lr, {r2-r4, r12} stmneia lr, {r2-r4, r12}
tst r1, #4 tst r1, #4
ldmneia r0!, {r2-r3} ldmneia r0!, {r2-r3}
stmneia lr, {r2-r3} stmneia lr, {r2-r3}
tst r1, #2 tst r1, #2
ldrne r3, [r0], #4 ldrne r3, [r0], #4
strne r3, [lr] strne r3, [lr]