summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJens Arnold <amiconn@rockbox.org>2008-03-28 18:56:50 +0000
committerJens Arnold <amiconn@rockbox.org>2008-03-28 18:56:50 +0000
commit567105b2193d7acf5ac6f62d7f68f65b126ddb9a (patch)
treeb84293c2bd1ddfd2aa20a845cd50eeb607c949eb
parentc70f81ff932d9e4a9b4ca1aafcb78c8aa98af5d3 (diff)
downloadrockbox-567105b2193d7acf5ac6f62d7f68f65b126ddb9a.tar.gz
rockbox-567105b2193d7acf5ac6f62d7f68f65b126ddb9a.zip
Stop saving more registers than necessary.
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@16866 a1c6a512-1295-4272-9138-f99709370657
-rw-r--r--firmware/target/arm/ipod/lcd-as-gray.S156
1 files changed, 78 insertions, 78 deletions
diff --git a/firmware/target/arm/ipod/lcd-as-gray.S b/firmware/target/arm/ipod/lcd-as-gray.S
index 6a39f98e24..1009ee6ceb 100644
--- a/firmware/target/arm/ipod/lcd-as-gray.S
+++ b/firmware/target/arm/ipod/lcd-as-gray.S
@@ -32,40 +32,40 @@
32 .type lcd_write_data,%function 32 .type lcd_write_data,%function
33 33
34lcd_write_data: 34lcd_write_data:
35 stmfd sp!, {r4, lr} 35 str lr, [sp, #-4]!
36 ldr r2, =LCD1_BASE 36 ldr lr, =LCD1_BASE
37 37
38.loop: 38.loop:
39 ldrb r3, [r0], #1 39 ldrb r2, [r0], #1
40 40
41#ifdef IPOD_MINI2G 41#ifdef IPOD_MINI2G
42 ldrb r4, [r0], #1 42 ldrb r3, [r0], #1
43 orr r3, r4, r3, lsl #8 43 orr r2, r3, r2, lsl #8
44 orr r3, r3, #0x760000 44 orr r2, r2, #0x760000
451: 451:
46 ldr r4, [r2] 46 ldr r3, [lr]
47 tst r4, #LCD1_BUSY_MASK 47 tst r3, #LCD1_BUSY_MASK
48 bne 1b 48 bne 1b
49 str r3, [r2, #0x08] 49 str r2, [lr, #0x08]
50#else 50#else
511: 511:
52 ldr r4, [r2] 52 ldr r3, [lr]
53 tst r4, #LCD1_BUSY_MASK 53 tst r3, #LCD1_BUSY_MASK
54 bne 1b 54 bne 1b
55 str r3, [r2, #0x10] 55 str r2, [lr, #0x10]
56 56
57 ldrb r3, [r0], #1 57 ldrb r2, [r0], #1
581: 581:
59 ldr r4, [r2] 59 ldr r3, [lr]
60 tst r4, #LCD1_BUSY_MASK 60 tst r3, #LCD1_BUSY_MASK
61 bne 1b 61 bne 1b
62 str r3, [r2, #0x10] 62 str r2, [lr, #0x10]
63#endif 63#endif
64 64
65 subs r1, r1, #1 65 subs r1, r1, #1
66 bne .loop 66 bne .loop
67 67
68 ldmfd sp!, {r4, pc} 68 ldr pc, [sp], #4
69 .size lcd_write_data,.-lcd_write_data 69 .size lcd_write_data,.-lcd_write_data
70 70
71 71
@@ -75,28 +75,28 @@ lcd_write_data:
75 .type lcd_write_data_shifted,%function 75 .type lcd_write_data_shifted,%function
76 76
77lcd_write_data_shifted: 77lcd_write_data_shifted:
78 stmfd sp!, {r4-r6, lr} 78 stmfd sp!, {r4, r5, lr}
79 ldr r2, =LCD1_BASE 79 ldr lr, =LCD1_BASE
80 mov r6, #0x760000 80 mov r5, #0x760000
81 ldrb r3, [r0], #1 81 ldrb r2, [r0], #1
82 82
83.sloop: 83.sloop:
84 ldrb r4, [r0], #1 84 ldrb r3, [r0], #1
85 orr r3, r4, r3, lsl #8 85 orr r2, r3, r2, lsl #8
86 ldrb r4, [r0], #1 86 ldrb r3, [r0], #1
87 orr r3, r4, r3, lsl #8 87 orr r2, r3, r2, lsl #8
88 mov r5, r3, lsl #12 88 mov r4, r2, lsl #12
89 orr r5, r6, r5, lsr #16 89 orr r4, r5, r4, lsr #16
901: 901:
91 ldr r4, [r2] 91 ldr r3, [lr]
92 tst r4, #LCD1_BUSY_MASK 92 tst r3, #LCD1_BUSY_MASK
93 bne 1b 93 bne 1b
94 str r5, [r2, #0x08] 94 str r4, [lr, #0x08]
95 95
96 subs r1, r1, #1 96 subs r1, r1, #1
97 bne .sloop 97 bne .sloop
98 98
99 ldmfd sp!, {r4-r6, pc} 99 ldmfd sp!, {r4, r5, pc}
100 .size lcd_write_data_shifted,.-lcd_write_data_shifted 100 .size lcd_write_data_shifted,.-lcd_write_data_shifted
101 101
102#elif defined IPOD_MINI 102#elif defined IPOD_MINI
@@ -105,33 +105,33 @@ lcd_write_data_shifted:
105 .type lcd_write_data_shifted,%function 105 .type lcd_write_data_shifted,%function
106 106
107lcd_write_data_shifted: 107lcd_write_data_shifted:
108 stmfd sp!, {r4, r5, lr} 108 stmfd sp!, {r4, lr}
109 ldr r2, =LCD1_BASE 109 ldr lr, =LCD1_BASE
110 ldrb r3, [r0], #1 110 ldrb r2, [r0], #1
111 111
112.sloop: 112.sloop:
113 ldrb r4, [r0], #1 113 ldrb r3, [r0], #1
114 orr r3, r4, r3, lsl #8 114 orr r2, r3, r2, lsl #8
115 mov r5, r3, lsr #4 115 mov r4, r2, lsr #4
1161: 1161:
117 ldr r4, [r2] 117 ldr r3, [lr]
118 tst r4, #LCD1_BUSY_MASK 118 tst r3, #LCD1_BUSY_MASK
119 bne 1b 119 bne 1b
120 str r5, [r2, #0x10] 120 str r4, [lr, #0x10]
121 121
122 ldrb r4, [r0], #1 122 ldrb r3, [r0], #1
123 orr r3, r4, r3, lsl #8 123 orr r2, r3, r2, lsl #8
124 mov r5, r3, lsr #4 124 mov r4, r2, lsr #4
1251: 1251:
126 ldr r4, [r2] 126 ldr r3, [lr]
127 tst r4, #LCD1_BUSY_MASK 127 tst r3, #LCD1_BUSY_MASK
128 bne 1b 128 bne 1b
129 str r5, [r2, #0x10] 129 str r4, [lr, #0x10]
130 130
131 subs r1, r1, #1 131 subs r1, r1, #1
132 bne .sloop 132 bne .sloop
133 133
134 ldmfd sp!, {r4, r5, pc} 134 ldmfd sp!, {r4, pc}
135 .size lcd_write_data_shifted,.-lcd_write_data_shifted 135 .size lcd_write_data_shifted,.-lcd_write_data_shifted
136 136
137#endif 137#endif
@@ -140,45 +140,45 @@ lcd_write_data_shifted:
140 .type lcd_mono_data,%function 140 .type lcd_mono_data,%function
141 141
142lcd_mono_data: 142lcd_mono_data:
143 stmfd sp!, {r4-r6, lr} 143 stmfd sp!, {r4, r5, lr}
144 ldr r2, =LCD1_BASE 144 ldr lr, =LCD1_BASE
145 adr r6, .dibits 145 adr r5, .dibits
146 146
147.mloop: 147.mloop:
148 ldrb r3, [r0], #1 148 ldrb r2, [r0], #1
149 mov r4, r3, lsr #4 149 mov r3, r2, lsr #4
150 ldrb r5, [r6, r4] 150 ldrb r4, [r5, r3]
151 151
152#ifdef IPOD_MINI2G 152#ifdef IPOD_MINI2G
153 and r4, r3, #0x0f 153 and r3, r2, #0x0f
154 ldrb r4, [r6, r4] 154 ldrb r3, [r5, r3]
155 orr r5, r4, r5, lsl #8 155 orr r4, r3, r4, lsl #8
156 orr r5, r5, #0x760000 156 orr r4, r4, #0x760000
1571: 1571:
158 ldr r4, [r2] 158 ldr r3, [lr]
159 tst r4, #LCD1_BUSY_MASK 159 tst r3, #LCD1_BUSY_MASK
160 bne 1b 160 bne 1b
161 str r5, [r2, #0x08] 161 str r4, [lr, #0x08]
162#else 162#else
1631: 1631:
164 ldr r4, [r2] 164 ldr r3, [lr]
165 tst r4, #LCD1_BUSY_MASK 165 tst r3, #LCD1_BUSY_MASK
166 bne 1b 166 bne 1b
167 str r5, [r2, #0x10] 167 str r4, [lr, #0x10]
168 168
169 and r4, r3, #0x0f 169 and r3, r2, #0x0f
170 ldrb r5, [r6, r4] 170 ldrb r4, [r5, r3]
1711: 1711:
172 ldr r4, [r2] 172 ldr r3, [lr]
173 tst r4, #LCD1_BUSY_MASK 173 tst r3, #LCD1_BUSY_MASK
174 bne 1b 174 bne 1b
175 str r5, [r2, #0x10] 175 str r4, [lr, #0x10]
176#endif 176#endif
177 177
178 subs r1, r1, #1 178 subs r1, r1, #1
179 bne .mloop 179 bne .mloop
180 180
181 ldmfd sp!, {r4-r6, pc} 181 ldmfd sp!, {r4, r5, pc}
182 182
183.dibits: 183.dibits:
184 .byte 0x00, 0x03, 0x0C, 0x0F, 0x30, 0x33, 0x3C, 0x3F 184 .byte 0x00, 0x03, 0x0C, 0x0F, 0x30, 0x33, 0x3C, 0x3F
@@ -203,15 +203,15 @@ lcd_mono_data:
203 * r5/r6 - current block of values 203 * r5/r6 - current block of values
204 * r7 - lcd data accumulator 204 * r7 - lcd data accumulator
205 * r8 - phase signs mask 205 * r8 - phase signs mask
206 * r9 - lcd bridge address 206 * lr - lcd bridge address
207 */ 207 */
208 208
209lcd_grey_data: 209lcd_grey_data:
210 stmfd sp!, {r4-r9, lr} 210 stmfd sp!, {r4-r8, lr}
211 mov r8, #0x80 211 mov r8, #0x80
212 orr r8, r8, r8, lsl #8 212 orr r8, r8, r8, lsl #8
213 orr r8, r8, r8, lsl #16 213 orr r8, r8, r8, lsl #16
214 ldr r9, =LCD1_BASE 214 ldr lr, =LCD1_BASE
215 215
216.greyloop: 216.greyloop:
217 ldmia r1, {r3-r4} /* Fetch 8 pixel phases */ 217 ldmia r1, {r3-r4} /* Fetch 8 pixel phases */
@@ -243,11 +243,11 @@ lcd_grey_data:
243 add r3, r3, r5 243 add r3, r3, r5
244 244
2451: 2451:
246 ldr r5, [r9] 246 ldr r5, [lr]
247 tst r5, #LCD1_BUSY_MASK 247 tst r5, #LCD1_BUSY_MASK
248 bne 1b 248 bne 1b
249 249
250 str r7, [r9, #0x10] 250 str r7, [lr, #0x10]
251 mov r7, #0 251 mov r7, #0
252#endif 252#endif
253 253
@@ -265,18 +265,18 @@ lcd_grey_data:
265 stmia r1!, {r3-r4} 265 stmia r1!, {r3-r4}
266 266
2671: 2671:
268 ldr r5, [r9] 268 ldr r5, [lr]
269 tst r5, #LCD1_BUSY_MASK 269 tst r5, #LCD1_BUSY_MASK
270 bne 1b 270 bne 1b
271#ifdef IPOD_MINI2G 271#ifdef IPOD_MINI2G
272 str r7, [r9, #0x08] 272 str r7, [lr, #0x08]
273#else 273#else
274 str r7, [r9, #0x10] 274 str r7, [lr, #0x10]
275#endif 275#endif
276 276
277 subs r2, r2, #1 277 subs r2, r2, #1
278 bne .greyloop 278 bne .greyloop
279 279
280 ldmfd sp!, {r4-r9, pc} 280 ldmfd sp!, {r4-r8, pc}
281 .size lcd_grey_data,.-lcd_grey_data 281 .size lcd_grey_data,.-lcd_grey_data
282 282