summaryrefslogtreecommitdiff
path: root/apps/plugins
diff options
context:
space:
mode:
authorJens Arnold <amiconn@rockbox.org>2009-07-12 13:14:35 +0000
committerJens Arnold <amiconn@rockbox.org>2009-07-12 13:14:35 +0000
commit02c031709c931da6f1ee9db0c6aadda2b37ae0aa (patch)
tree8bbe5490c0a5fe3c40b18d599e36103ac3eb72fa /apps/plugins
parente12c1c0a62a9ffd3456146f16a497ee3e9d5e089 (diff)
downloadrockbox-02c031709c931da6f1ee9db0c6aadda2b37ae0aa.tar.gz
rockbox-02c031709c931da6f1ee9db0c6aadda2b37ae0aa.zip
* ARM asm DSP and codec/plugin functions: Use r12 scratch register properly
* Fix saving another unused reg in dsp code * Use less regs in the generic ARM mpegplayer adding idct pure DC case * Fix ARMv6 mpegplayer adding idct using an unsaved register in pure DC case git-svn-id: svn://svn.rockbox.org/rockbox/trunk@21803 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'apps/plugins')
-rw-r--r--apps/plugins/mpegplayer/idct_arm.S69
-rw-r--r--apps/plugins/mpegplayer/idct_armv6.S35
2 files changed, 51 insertions, 53 deletions
diff --git a/apps/plugins/mpegplayer/idct_arm.S b/apps/plugins/mpegplayer/idct_arm.S
index 7de2d7f881..3cb1554de2 100644
--- a/apps/plugins/mpegplayer/idct_arm.S
+++ b/apps/plugins/mpegplayer/idct_arm.S
@@ -268,7 +268,7 @@
268 bx lr 268 bx lr
269 269
270mpeg2_idct_copy: 270mpeg2_idct_copy:
271 stmfd sp!, { r1-r2, r4-r12, lr } 271 stmfd sp!, { r1-r2, r4-r11, lr }
272 bl .idct 272 bl .idct
273 ldmfd sp!, { r1-r2 } 273 ldmfd sp!, { r1-r2 }
274 mov r11, #0 274 mov r11, #0
@@ -313,7 +313,7 @@ mpeg2_idct_copy:
313 add r1, r1, r2 313 add r1, r1, r2
314 cmp r0, r12 314 cmp r0, r12
315 blo 1b 315 blo 1b
316 ldmfd sp!, { r4-r12, pc } 316 ldmfd sp!, { r4-r11, pc }
317 317
318mpeg2_idct_add: 318mpeg2_idct_add:
319 cmp r0, #129 319 cmp r0, #129
@@ -324,7 +324,7 @@ mpeg2_idct_add:
324 cmp r1, #0x40 324 cmp r1, #0x40
325 bne 3f 325 bne 3f
3261: 3261:
327 stmfd sp!, { r2-r12, lr } 327 stmfd sp!, { r2-r11, lr }
328 bl .idct 328 bl .idct
329 ldmfd sp!, { r1-r2 } 329 ldmfd sp!, { r1-r2 }
330 mov r11, #0 330 mov r11, #0
@@ -385,24 +385,20 @@ mpeg2_idct_add:
385 add r1, r1, r2 385 add r1, r1, r2
386 cmp r0, r12 386 cmp r0, r12
387 blo 2b 387 blo 2b
388 ldmfd sp!, { r4-r12, pc } 388 ldmfd sp!, { r4-r11, pc }
3893: 3893:
390 stmfd sp!, { r4-r11 } 390 stmfd sp!, { r4-r6, lr }
391 ldrsh r1, [r0, #0] /* r1 = block[0] */ 391 ldrsh r1, [r0, #0] /* r1 = block[0] */
392 mov r11, #0 392 mov r4, #0
393 strh r11, [r0, #0] /* block[0] = 0 */ 393 strh r4, [r0, #0] /* block[0] = 0 */
394 strh r11, [r0, #126] /* block[63] = 0 */ 394 strh r4, [r0, #126] /* block[63] = 0 */
395 add r1, r1, #64 /* r1 = DC << 7 */ 395 add r1, r1, #64 /* r1 = DC << 7 */
396 add r0, r2, r3, asl #3 396 add r0, r2, r3, asl #3
3974: 3974:
398 ldrb r4, [r2, #0] 398 ldrb r4, [r2, #0]
399 ldrb r5, [r2, #1] 399 ldrb r5, [r2, #1]
400 ldrb r6, [r2, #2] 400 ldrb r6, [r2, #2]
401 ldrb r7, [r2, #3] 401 ldrb lr, [r2, #3]
402 ldrb r8, [r2, #4]
403 ldrb r9, [r2, #5]
404 ldrb r10, [r2, #6]
405 ldrb r11, [r2, #7]
406 add r4, r4, r1, asr #7 402 add r4, r4, r1, asr #7
407 cmp r4, #255 403 cmp r4, #255
408 mvnhi r4, r4, asr #31 404 mvnhi r4, r4, asr #31
@@ -415,28 +411,31 @@ mpeg2_idct_add:
415 cmp r6, #255 411 cmp r6, #255
416 mvnhi r6, r6, asr #31 412 mvnhi r6, r6, asr #31
417 strb r6, [r2, #2] 413 strb r6, [r2, #2]
418 add r7, r7, r1, asr #7 414 add lr, lr, r1, asr #7
419 cmp r7, #255 415 cmp lr, #255
420 mvnhi r7, r7, asr #31 416 mvnhi lr, lr, asr #31
421 strb r7, [r2, #3] 417 strb lr, [r2, #3]
422 add r8, r8, r1, asr #7 418 ldrb r4, [r2, #4]
423 cmp r8, #255 419 ldrb r5, [r2, #5]
424 mvnhi r8, r8, asr #31 420 ldrb r6, [r2, #6]
425 strb r8, [r2, #4] 421 ldrb lr, [r2, #7]
426 add r9, r9, r1, asr #7 422 add r4, r4, r1, asr #7
427 cmp r9, #255 423 cmp r4, #255
428 mvnhi r9, r9, asr #31 424 mvnhi r4, r4, asr #31
429 strb r9, [r2, #5] 425 strb r4, [r2, #4]
430 add r10, r10, r1, asr #7 426 add r5, r5, r1, asr #7
431 cmp r10, #255 427 cmp r5, #255
432 mvnhi r10, r10, asr #31 428 mvnhi r5, r5, asr #31
433 strb r10, [r2, #6] 429 strb r5, [r2, #5]
434 add r11, r11, r1, asr #7 430 add r6, r6, r1, asr #7
435 cmp r11, #255 431 cmp r6, #255
436 mvnhi r11, r11, asr #31 432 mvnhi r6, r6, asr #31
437 strb r11, [r2, #7] 433 strb r6, [r2, #6]
434 add lr, lr, r1, asr #7
435 cmp lr, #255
436 mvnhi lr, lr, asr #31
437 strb lr, [r2, #7]
438 add r2, r2, r3 438 add r2, r2, r3
439 cmp r2, r0 439 cmp r2, r0
440 blo 4b 440 blo 4b
441 ldmfd sp!, { r4-r11 } 441 ldmfd sp!, { r4-r6, pc }
442 bx lr
diff --git a/apps/plugins/mpegplayer/idct_armv6.S b/apps/plugins/mpegplayer/idct_armv6.S
index 73feed4785..ca97d12b83 100644
--- a/apps/plugins/mpegplayer/idct_armv6.S
+++ b/apps/plugins/mpegplayer/idct_armv6.S
@@ -196,7 +196,7 @@ L_W0246:
196 196
197 197
198mpeg2_idct_copy: 198mpeg2_idct_copy:
199 stmfd sp!, {r1-r2, r4-r12, lr} 199 stmfd sp!, {r1-r2, r4-r11, lr}
200 bl .idct 200 bl .idct
201 ldmfd sp!, {r1-r2} 201 ldmfd sp!, {r1-r2}
202 202
@@ -230,7 +230,7 @@ mpeg2_idct_copy:
230 cmp r0, r12 230 cmp r0, r12
231 blo 1b 231 blo 1b
232 232
233 ldmfd sp!, {r4-r12, pc} 233 ldmfd sp!, {r4-r11, pc}
234 234
235mpeg2_idct_add: 235mpeg2_idct_add:
236 cmp r0, #129 236 cmp r0, #129
@@ -241,7 +241,7 @@ mpeg2_idct_add:
241 cmp r1, #0x40 241 cmp r1, #0x40
242 bne 3f 242 bne 3f
2431: 2431:
244 stmfd sp!, {r2-r12, lr} 244 stmfd sp!, {r2-r11, lr}
245 bl .idct 245 bl .idct
246 ldmfd sp!, {r1-r2} 246 ldmfd sp!, {r1-r2}
247 mov r11, #0 247 mov r11, #0
@@ -287,21 +287,21 @@ mpeg2_idct_add:
287 add r1, r1, r2 287 add r1, r1, r2
288 cmp r0, r12 288 cmp r0, r12
289 blo 2b 289 blo 2b
290 ldmfd sp!, {r4-r12, pc} 290 ldmfd sp!, {r4-r11, pc}
291 291
2923: 2923:
293 stmfd sp!, {r4-r7} 293 stmfd sp!, {r4-r6, lr}
294 ldrsh r1, [r0, #0] /* r1 = block[0] */ 294 ldrsh r1, [r0, #0] /* r1 = block[0] */
295 mov r11, #0 295 mov r4, #0
296 strh r11, [r0, #0] /* block[0] = 0 */ 296 strh r4, [r0, #0] /* block[0] = 0 */
297 strh r11, [r0, #126] /* block[63] = 0 */ 297 strh r4, [r0, #126] /* block[63] = 0 */
298 add r1, r1, #64 /* r1 = DC << 7 */ 298 add r1, r1, #64 /* r1 = DC << 7 */
299 add r0, r2, r3, asl #3 299 add r0, r2, r3, asl #3
3004: 3004:
301 ldrb r4, [r2, #0] 301 ldrb r4, [r2, #0]
302 ldrb r5, [r2, #1] 302 ldrb r5, [r2, #1]
303 ldrb r6, [r2, #2] 303 ldrb r6, [r2, #2]
304 ldrb r7, [r2, #3] 304 ldrb lr, [r2, #3]
305 add r4, r4, r1, asr #7 305 add r4, r4, r1, asr #7
306 usat r4, #8, r4 306 usat r4, #8, r4
307 strb r4, [r2, #0] 307 strb r4, [r2, #0]
@@ -311,13 +311,13 @@ mpeg2_idct_add:
311 add r6, r6, r1, asr #7 311 add r6, r6, r1, asr #7
312 usat r6, #8, r6 312 usat r6, #8, r6
313 strb r6, [r2, #2] 313 strb r6, [r2, #2]
314 add r7, r7, r1, asr #7 314 add lr, lr, r1, asr #7
315 usat r7, #8, r7 315 usat lr, #8, lr
316 strb r7, [r2, #3] 316 strb lr, [r2, #3]
317 ldrb r4, [r2, #4] 317 ldrb r4, [r2, #4]
318 ldrb r5, [r2, #5] 318 ldrb r5, [r2, #5]
319 ldrb r6, [r2, #6] 319 ldrb r6, [r2, #6]
320 ldrb r7, [r2, #7] 320 ldrb lr, [r2, #7]
321 add r4, r4, r1, asr #7 321 add r4, r4, r1, asr #7
322 usat r4, #8, r4 322 usat r4, #8, r4
323 strb r4, [r2, #4] 323 strb r4, [r2, #4]
@@ -327,11 +327,10 @@ mpeg2_idct_add:
327 add r6, r6, r1, asr #7 327 add r6, r6, r1, asr #7
328 usat r6, #8, r6 328 usat r6, #8, r6
329 strb r6, [r2, #6] 329 strb r6, [r2, #6]
330 add r7, r7, r1, asr #7 330 add lr, lr, r1, asr #7
331 usat r7, #8, r7 331 usat lr, #8, lr
332 strb r7, [r2, #7] 332 strb lr, [r2, #7]
333 add r2, r2, r3 333 add r2, r2, r3
334 cmp r2, r0 334 cmp r2, r0
335 blo 4b 335 blo 4b
336 ldmfd sp!, {r4-r7} 336 ldmfd sp!, {r4-r6, pc}
337 bx lr