summaryrefslogtreecommitdiff
path: root/firmware/target/arm
diff options
context:
space:
mode:
Diffstat (limited to 'firmware/target/arm')
-rw-r--r--firmware/target/arm/ata-as-arm.S32
-rw-r--r--firmware/target/arm/ipod/video/lcd-as-video.S26
-rw-r--r--firmware/target/arm/pcm-telechips.c5
-rw-r--r--firmware/target/arm/pp/pcm-pp.c7
4 files changed, 36 insertions, 34 deletions
diff --git a/firmware/target/arm/ata-as-arm.S b/firmware/target/arm/ata-as-arm.S
index 101bc4dcc1..16c2928bf1 100644
--- a/firmware/target/arm/ata-as-arm.S
+++ b/firmware/target/arm/ata-as-arm.S
@@ -139,9 +139,9 @@ copy_read_sectors:
139.r_end2_u: 139.r_end2_u:
140 140
141 tst r1, #1 /* one halfword left? */ 141 tst r1, #1 /* one halfword left? */
142 ldrneh r4, [r2] 142 ldrhne r4, [r2]
143 orrne r3, r3, r4, lsl #8 143 orrne r3, r3, r4, lsl #8
144 strneh r3, [r0], #2 144 strhne r3, [r0], #2
145 movne r3, r4, lsr #8 145 movne r3, r4, lsr #8
146 146
147 strb r3, [r0], #1 /* store final byte */ 147 strb r3, [r0], #1 /* store final byte */
@@ -151,8 +151,8 @@ copy_read_sectors:
151 /* 16-bit aligned */ 151 /* 16-bit aligned */
152.r_aligned: 152.r_aligned:
153 tst r0, #2 /* 32 bit aligned? */ 153 tst r0, #2 /* 32 bit aligned? */
154 ldrneh r3, [r2] /* no: read first halfword */ 154 ldrhne r3, [r2] /* no: read first halfword */
155 strneh r3, [r0], #2 /* store */ 155 strhne r3, [r0], #2 /* store */
156 subne r1, r1, #1 /* one halfword taken */ 156 subne r1, r1, #1 /* one halfword taken */
157 157
158 sub r1, r1, #8 /* adjust for zero-check and doing 8 halfwords/loop */ 158 sub r1, r1, #8 /* adjust for zero-check and doing 8 halfwords/loop */
@@ -186,14 +186,14 @@ copy_read_sectors:
186.r_end4_a: 186.r_end4_a:
187 187
188 tst r1, #2 /* 2 or more halfwords left? */ 188 tst r1, #2 /* 2 or more halfwords left? */
189 ldrneh r3, [r2] 189 ldrhne r3, [r2]
190 ldrneh r4, [r2] 190 ldrhne r4, [r2]
191 orrne r3, r3, r4, lsl #16 191 orrne r3, r3, r4, lsl #16
192 strne r3, [r0], #4 192 strne r3, [r0], #4
193 193
194 tst r1, #1 /* one halfword left? */ 194 tst r1, #1 /* one halfword left? */
195 ldrneh r3, [r2] 195 ldrhne r3, [r2]
196 strneh r3, [r0], #2 196 strhne r3, [r0], #2
197 197
198 ldmpc regs=r4-r5 198 ldmpc regs=r4-r5
199 199
@@ -291,9 +291,9 @@ copy_write_sectors:
291.w_end2_u: 291.w_end2_u:
292 292
293 tst r1, #1 /* one halfword left? */ 293 tst r1, #1 /* one halfword left? */
294 ldrneh r4, [r0], #2 294 ldrhne r4, [r0], #2
295 orrne r3, r3, r4, lsl #8 295 orrne r3, r3, r4, lsl #8
296 strneh r3, [r2] 296 strhne r3, [r2]
297 movne r3, r3, lsr #16 297 movne r3, r3, lsr #16
298 298
299 ldrb r4, [r0], #1 /* load final byte */ 299 ldrb r4, [r0], #1 /* load final byte */
@@ -305,8 +305,8 @@ copy_write_sectors:
305 /* 16-bit aligned */ 305 /* 16-bit aligned */
306.w_aligned: 306.w_aligned:
307 tst r0, #2 /* 32 bit aligned? */ 307 tst r0, #2 /* 32 bit aligned? */
308 ldrneh r3, [r0], #2 /* no: load first halfword */ 308 ldrhne r3, [r0], #2 /* no: load first halfword */
309 strneh r3, [r2] /* write */ 309 strhne r3, [r2] /* write */
310 subne r1, r1, #1 /* one halfword taken */ 310 subne r1, r1, #1 /* one halfword taken */
311 311
312 sub r1, r1, #8 /* adjust for zero-check and doing 8 halfwords/loop */ 312 sub r1, r1, #8 /* adjust for zero-check and doing 8 halfwords/loop */
@@ -341,13 +341,13 @@ copy_write_sectors:
341 341
342 tst r1, #2 /* 2 or more halfwords left? */ 342 tst r1, #2 /* 2 or more halfwords left? */
343 ldrne r3, [r0], #4 343 ldrne r3, [r0], #4
344 strneh r3, [r2] 344 strhne r3, [r2]
345 movne r3, r3, lsr #16 345 movne r3, r3, lsr #16
346 strneh r3, [r2] 346 strhne r3, [r2]
347 347
348 tst r1, #1 /* one halfword left? */ 348 tst r1, #1 /* one halfword left? */
349 ldrneh r3, [r0], #2 349 ldrhne r3, [r0], #2
350 strneh r3, [r2] 350 strhne r3, [r2]
351 351
352 ldmpc regs=r4-r5 352 ldmpc regs=r4-r5
353 353
diff --git a/firmware/target/arm/ipod/video/lcd-as-video.S b/firmware/target/arm/ipod/video/lcd-as-video.S
index 47155b8c75..7d6caef448 100644
--- a/firmware/target/arm/ipod/video/lcd-as-video.S
+++ b/firmware/target/arm/ipod/video/lcd-as-video.S
@@ -40,24 +40,24 @@ lcd_write_data: /* r1 = pixel count, must be even */
40 40
41 subs r1, r1, #16 41 subs r1, r1, #16
42.loop16: 42.loop16:
43 ldmgeia r0!, {r2-r3} 43 ldmiage r0!, {r2-r3}
44 stmgeia lr, {r2-r3} 44 stmiage lr, {r2-r3}
45 ldmgeia r0!, {r2-r3} 45 ldmiage r0!, {r2-r3}
46 stmgeia lr, {r2-r3} 46 stmiage lr, {r2-r3}
47 ldmgeia r0!, {r2-r3} 47 ldmiage r0!, {r2-r3}
48 stmgeia lr, {r2-r3} 48 stmiage lr, {r2-r3}
49 ldmgeia r0!, {r2-r3} 49 ldmiage r0!, {r2-r3}
50 stmgeia lr, {r2-r3} 50 stmiage lr, {r2-r3}
51 subges r1, r1, #16 51 subsge r1, r1, #16
52 bge .loop16 52 bge .loop16
53 53
54 /* no need to correct the count, we're just checking bits from now */ 54 /* no need to correct the count, we're just checking bits from now */
55 tst r1, #8 55 tst r1, #8
56 ldmneia r0!, {r2-r4, r12} 56 ldmiane r0!, {r2-r4, r12}
57 stmneia lr, {r2-r4, r12} 57 stmiane lr, {r2-r4, r12}
58 tst r1, #4 58 tst r1, #4
59 ldmneia r0!, {r2-r3} 59 ldmiane r0!, {r2-r3}
60 stmneia lr, {r2-r3} 60 stmiane lr, {r2-r3}
61 tst r1, #2 61 tst r1, #2
62 ldrne r3, [r0], #4 62 ldrne r3, [r0], #4
63 strne r3, [lr] 63 strne r3, [lr]
diff --git a/firmware/target/arm/pcm-telechips.c b/firmware/target/arm/pcm-telechips.c
index 336b5626ca..747765d8fb 100644
--- a/firmware/target/arm/pcm-telechips.c
+++ b/firmware/target/arm/pcm-telechips.c
@@ -218,6 +218,7 @@ void fiq_handler(void)
218 * r0-r3 and r12 is a working register. 218 * r0-r3 and r12 is a working register.
219 */ 219 */
220 asm volatile ( 220 asm volatile (
221 ".syntax unified \n"
221 "sub lr, lr, #4 \n" 222 "sub lr, lr, #4 \n"
222 "stmfd sp!, { r0-r3, lr } \n" /* stack scratch regs and lr */ 223 "stmfd sp!, { r0-r3, lr } \n" /* stack scratch regs and lr */
223 "mov r14, #0 \n" /* Was the callback called? */ 224 "mov r14, #0 \n" /* Was the callback called? */
@@ -251,7 +252,7 @@ void fiq_handler(void)
251 "stmia r11, { r8-r9 } \n" /* save p and size */ 252 "stmia r11, { r8-r9 } \n" /* save p and size */
252 253
253 "cmp r14, #0 \n" /* Callback called? */ 254 "cmp r14, #0 \n" /* Callback called? */
254 "ldmeqfd sp!, { r0-r3, pc }^ \n" /* no? -> exit */ 255 "ldmfdeq sp!, { r0-r3, pc }^ \n" /* no? -> exit */
255 256
256 "ldr r1, =pcm_play_status_callback \n" 257 "ldr r1, =pcm_play_status_callback \n"
257 "ldr r1, [r1] \n" 258 "ldr r1, [r1] \n"
@@ -268,7 +269,7 @@ void fiq_handler(void)
268 "mov lr, pc \n" 269 "mov lr, pc \n"
269 "ldr pc, =pcm_play_dma_complete_callback \n" 270 "ldr pc, =pcm_play_dma_complete_callback \n"
270 "cmp r0, #0 \n" /* any more to play? */ 271 "cmp r0, #0 \n" /* any more to play? */
271 "ldmneia r11, { r8-r9 } \n" /* load new p and size */ 272 "ldmiane r11, { r8-r9 } \n" /* load new p and size */
272 "cmpne r9, #0x0f \n" /* did we actually get enough data? */ 273 "cmpne r9, #0x0f \n" /* did we actually get enough data? */
273 "bhi .fill_fifo \n" /* not stop and enough? refill */ 274 "bhi .fill_fifo \n" /* not stop and enough? refill */
274 "ldmfd sp!, { r0-r3, pc }^ \n" /* exit */ 275 "ldmfd sp!, { r0-r3, pc }^ \n" /* exit */
diff --git a/firmware/target/arm/pp/pcm-pp.c b/firmware/target/arm/pp/pcm-pp.c
index 0d61eb44ff..fd798f0506 100644
--- a/firmware/target/arm/pp/pcm-pp.c
+++ b/firmware/target/arm/pp/pcm-pp.c
@@ -327,6 +327,7 @@ void fiq_playback(void)
327 */ 327 */
328 asm volatile ( 328 asm volatile (
329 /* No external calls */ 329 /* No external calls */
330 ".syntax unified \n"
330 "sub lr, lr, #4 \n" /* Prepare return address */ 331 "sub lr, lr, #4 \n" /* Prepare return address */
331 "stmfd sp!, { lr } \n" /* stack lr so we can use it */ 332 "stmfd sp!, { lr } \n" /* stack lr so we can use it */
332 "ldr r12, =0xcf001040 \n" /* Some magic from iPodLinux ... */ 333 "ldr r12, =0xcf001040 \n" /* Some magic from iPodLinux ... */
@@ -349,8 +350,8 @@ void fiq_playback(void)
349 "bhi 0b \n" /* ... yes, continue */ 350 "bhi 0b \n" /* ... yes, continue */
350 351
351 "cmp r9, #0 \n" /* either FIFO full or size empty? */ 352 "cmp r9, #0 \n" /* either FIFO full or size empty? */
352 "stmneia r11, { r8-r9 } \n" /* save p and size, if not empty */ 353 "stmiane r11, { r8-r9 } \n" /* save p and size, if not empty */
353 "ldmnefd sp!, { pc }^ \n" /* RFE if not empty */ 354 "ldmfdne sp!, { pc }^ \n" /* RFE if not empty */
354 355
355 /* Making external calls */ 356 /* Making external calls */
356 "1: \n" 357 "1: \n"
@@ -363,7 +364,7 @@ void fiq_playback(void)
363 "mov lr, pc \n" /* long call (not in same section) */ 364 "mov lr, pc \n" /* long call (not in same section) */
364 "bx r3 \n" 365 "bx r3 \n"
365 "cmp r0, #0 \n" /* more data? */ 366 "cmp r0, #0 \n" /* more data? */
366 "ldmeqfd sp!, { r0-r3, pc }^ \n" /* no? -> exit */ 367 "ldmfdeq sp!, { r0-r3, pc }^ \n" /* no? -> exit */
367 368
368 "ldr r14, [r10, #0x1c] \n" /* read IISFIFO_CFG to check FIFO status */ 369 "ldr r14, [r10, #0x1c] \n" /* read IISFIFO_CFG to check FIFO status */
369 "ands r14, r14, #(0xe<<23) \n" /* r14 = (IIS_TX_FREE_COUNT & ~1) << 23 */ 370 "ands r14, r14, #(0xe<<23) \n" /* r14 = (IIS_TX_FREE_COUNT & ~1) << 23 */