summaryrefslogtreecommitdiff
path: root/firmware/target/arm/ipod/video/lcd-as-video.S
diff options
context:
space:
mode:
Diffstat (limited to 'firmware/target/arm/ipod/video/lcd-as-video.S')
-rw-r--r--firmware/target/arm/ipod/video/lcd-as-video.S26
1 files changed, 13 insertions, 13 deletions
diff --git a/firmware/target/arm/ipod/video/lcd-as-video.S b/firmware/target/arm/ipod/video/lcd-as-video.S
index e14b9dafb8..4b0cabcec2 100644
--- a/firmware/target/arm/ipod/video/lcd-as-video.S
+++ b/firmware/target/arm/ipod/video/lcd-as-video.S
@@ -32,22 +32,22 @@
32 .type lcd_write_data, %function 32 .type lcd_write_data, %function
33 /* r0 = addr, must be aligned */ 33 /* r0 = addr, must be aligned */
34lcd_write_data: /* r1 = pixel count, must be even */ 34lcd_write_data: /* r1 = pixel count, must be even */
35 stmfd sp!, {r4-r5, lr} 35 stmfd sp!, {r4, lr}
36 mov lr, #0x30000000 /* LCD data port */ 36 mov lr, #0x30000000 /* LCD data port */
37 37
38 subs r1, r1, #16 38 subs r1, r1, #16
39.loop16: 39.loop16:
40 ldmgeia r0!, {r2-r5} 40 ldmgeia r0!, {r2-r4, r12}
41 stmgeia lr, {r2-r5} 41 stmgeia lr, {r2-r4, r12}
42 ldmgeia r0!, {r2-r5} 42 ldmgeia r0!, {r2-r4, r12}
43 stmgeia lr, {r2-r5} 43 stmgeia lr, {r2-r4, r12}
44 subges r1, r1, #16 44 subges r1, r1, #16
45 bge .loop16 45 bge .loop16
46 46
47 /* no need to correct the count, we're just checking bits from now */ 47 /* no need to correct the count, we're just checking bits from now */
48 tst r1, #8 48 tst r1, #8
49 ldmneia r0!, {r2-r5} 49 ldmneia r0!, {r2-r4, r12}
50 stmneia lr, {r2-r5} 50 stmneia lr, {r2-r4, r12}
51 tst r1, #4 51 tst r1, #4
52 ldmneia r0!, {r2-r3} 52 ldmneia r0!, {r2-r3}
53 stmneia lr, {r2-r3} 53 stmneia lr, {r2-r3}
@@ -55,7 +55,7 @@ lcd_write_data: /* r1 = pixel count, must be even */
55 ldrne r3, [r0], #4 55 ldrne r3, [r0], #4
56 strne r3, [lr] 56 strne r3, [lr]
57 57
58 ldmfd sp!, {r4-r5, pc} 58 ldmfd sp!, {r4, pc}
59 59
60/**************************************************************************** 60/****************************************************************************
61 * extern void lcd_write_yuv420_lines(unsigned char const * const src[3], 61 * extern void lcd_write_yuv420_lines(unsigned char const * const src[3],
@@ -87,10 +87,10 @@ lcd_write_yuv420_lines:
87 /* r1 = dst = bcmaddr */ 87 /* r1 = dst = bcmaddr */
88 /* r2 = width */ 88 /* r2 = width */
89 /* r3 = stride */ 89 /* r3 = stride */
90 stmfd sp!, { r4-r11, lr } /* save non-scratch */ 90 stmfd sp!, { r4-r10, lr } /* save non-scratch */
91 ldmia r0, { r9-r11 } /* r9 = yuv_src[0] = Y'_p */ 91 ldmia r0, { r9, r10, r12 } /* r9 = yuv_src[0] = Y'_p */
92 /* r10 = yuv_src[1] = Cb_p */ 92 /* r10 = yuv_src[1] = Cb_p */
93 /* r11 = yuv_src[2] = Cr_p */ 93 /* r12 = yuv_src[2] = Cr_p */
94 add r3, r9, r3 /* r3 = &ysrc[stride] */ 94 add r3, r9, r3 /* r3 = &ysrc[stride] */
95 add r4, r2, r2, asr #1 /* chroma buffer lenght = width/2 *3 */ 95 add r4, r2, r2, asr #1 /* chroma buffer lenght = width/2 *3 */
96 mov r4, r4, asl #2 /* use words for str/ldm possibility */ 96 mov r4, r4, asl #2 /* use words for str/ldm possibility */
@@ -116,7 +116,7 @@ lcd_write_yuv420_lines:
11610: /* loop start */ 11610: /* loop start */
117 117
118 ldrb r0, [r10], #1 /* r0 = *usrc++ = *Cb_p++ */ 118 ldrb r0, [r10], #1 /* r0 = *usrc++ = *Cb_p++ */
119 ldrb r1, [r11], #1 /* r1 = *vsrc++ = *Cr_p++ */ 119 ldrb r1, [r12], #1 /* r1 = *vsrc++ = *Cr_p++ */
120 120
121 sub r0, r0, #128 /* r0 = Cb-128 */ 121 sub r0, r0, #128 /* r0 = Cb-128 */
122 sub r1, r1, #128 /* r1 = Cr-128 */ 122 sub r1, r1, #128 /* r1 = Cr-128 */
@@ -289,7 +289,7 @@ lcd_write_yuv420_lines:
289 289
290 ldr r3, [sp, #12] 290 ldr r3, [sp, #12]
291 add sp, sp, r3 /* deallocate buffer */ 291 add sp, sp, r3 /* deallocate buffer */
292 ldmfd sp!, { r4-r11, pc } /* restore registers */ 292 ldmfd sp!, { r4-r10, pc } /* restore registers */
293 293
294 .ltorg 294 .ltorg
295 .size lcd_write_yuv420_lines, .-lcd_write_yuv420_lines 295 .size lcd_write_yuv420_lines, .-lcd_write_yuv420_lines