diff options
| author | Jens Arnold <amiconn@rockbox.org> | 2009-07-12 13:14:35 +0000 |
|---|---|---|
| committer | Jens Arnold <amiconn@rockbox.org> | 2009-07-12 13:14:35 +0000 |
| commit | 02c031709c931da6f1ee9db0c6aadda2b37ae0aa (patch) | |
| tree | 8bbe5490c0a5fe3c40b18d599e36103ac3eb72fa /apps/plugins | |
| parent | e12c1c0a62a9ffd3456146f16a497ee3e9d5e089 (diff) | |
| download | rockbox-02c031709c931da6f1ee9db0c6aadda2b37ae0aa.zip rockbox-02c031709c931da6f1ee9db0c6aadda2b37ae0aa.tar.gz rockbox-02c031709c931da6f1ee9db0c6aadda2b37ae0aa.tar.bz2 rockbox-02c031709c931da6f1ee9db0c6aadda2b37ae0aa.tar.xz | |
* 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.S | 69 | ||||
| -rw-r--r-- | apps/plugins/mpegplayer/idct_armv6.S | 35 |
2 files changed, 51 insertions, 53 deletions
diff --git a/apps/plugins/mpegplayer/idct_arm.S b/apps/plugins/mpegplayer/idct_arm.S index 7de2d7f..3cb1554 100644 --- a/apps/plugins/mpegplayer/idct_arm.S +++ b/apps/plugins/mpegplayer/idct_arm.S @@ -268,7 +268,7 @@ bx lr mpeg2_idct_copy: - stmfd sp!, { r1-r2, r4-r12, lr } + stmfd sp!, { r1-r2, r4-r11, lr } bl .idct ldmfd sp!, { r1-r2 } mov r11, #0 @@ -313,7 +313,7 @@ mpeg2_idct_copy: add r1, r1, r2 cmp r0, r12 blo 1b - ldmfd sp!, { r4-r12, pc } + ldmfd sp!, { r4-r11, pc } mpeg2_idct_add: cmp r0, #129 @@ -324,7 +324,7 @@ mpeg2_idct_add: cmp r1, #0x40 bne 3f 1: - stmfd sp!, { r2-r12, lr } + stmfd sp!, { r2-r11, lr } bl .idct ldmfd sp!, { r1-r2 } mov r11, #0 @@ -385,24 +385,20 @@ mpeg2_idct_add: add r1, r1, r2 cmp r0, r12 blo 2b - ldmfd sp!, { r4-r12, pc } + ldmfd sp!, { r4-r11, pc } 3: - stmfd sp!, { r4-r11 } + stmfd sp!, { r4-r6, lr } ldrsh r1, [r0, #0] /* r1 = block[0] */ - mov r11, #0 - strh r11, [r0, #0] /* block[0] = 0 */ - strh r11, [r0, #126] /* block[63] = 0 */ + mov r4, #0 + strh r4, [r0, #0] /* block[0] = 0 */ + strh r4, [r0, #126] /* block[63] = 0 */ add r1, r1, #64 /* r1 = DC << 7 */ add r0, r2, r3, asl #3 4: ldrb r4, [r2, #0] ldrb r5, [r2, #1] ldrb r6, [r2, #2] - ldrb r7, [r2, #3] - ldrb r8, [r2, #4] - ldrb r9, [r2, #5] - ldrb r10, [r2, #6] - ldrb r11, [r2, #7] + ldrb lr, [r2, #3] add r4, r4, r1, asr #7 cmp r4, #255 mvnhi r4, r4, asr #31 @@ -415,28 +411,31 @@ mpeg2_idct_add: cmp r6, #255 mvnhi r6, r6, asr #31 strb r6, [r2, #2] - add r7, r7, r1, asr #7 - cmp r7, #255 - mvnhi r7, r7, asr #31 - strb r7, [r2, #3] - add r8, r8, r1, asr #7 - cmp r8, #255 - mvnhi r8, r8, asr #31 - strb r8, [r2, #4] - add r9, r9, r1, asr #7 - cmp r9, #255 - mvnhi r9, r9, asr #31 - strb r9, [r2, #5] - add r10, r10, r1, asr #7 - cmp r10, #255 - mvnhi r10, r10, asr #31 - strb r10, [r2, #6] - add r11, r11, r1, asr #7 - cmp r11, #255 - mvnhi r11, r11, asr #31 - strb r11, [r2, #7] + add lr, lr, r1, asr #7 + cmp lr, #255 + mvnhi lr, lr, asr #31 + strb lr, [r2, #3] + ldrb r4, [r2, #4] + ldrb r5, [r2, #5] + ldrb r6, [r2, #6] + ldrb lr, [r2, #7] + add r4, r4, r1, asr #7 + cmp r4, #255 + mvnhi r4, r4, asr #31 + strb r4, [r2, #4] + add r5, r5, r1, asr #7 + cmp r5, #255 + mvnhi r5, r5, asr #31 + strb r5, [r2, #5] + add r6, r6, r1, asr #7 + cmp r6, #255 + mvnhi r6, r6, asr #31 + strb r6, [r2, #6] + add lr, lr, r1, asr #7 + cmp lr, #255 + mvnhi lr, lr, asr #31 + strb lr, [r2, #7] add r2, r2, r3 cmp r2, r0 blo 4b - ldmfd sp!, { r4-r11 } - bx lr + ldmfd sp!, { r4-r6, pc } diff --git a/apps/plugins/mpegplayer/idct_armv6.S b/apps/plugins/mpegplayer/idct_armv6.S index 73feed4..ca97d12 100644 --- a/apps/plugins/mpegplayer/idct_armv6.S +++ b/apps/plugins/mpegplayer/idct_armv6.S @@ -196,7 +196,7 @@ L_W0246: mpeg2_idct_copy: - stmfd sp!, {r1-r2, r4-r12, lr} + stmfd sp!, {r1-r2, r4-r11, lr} bl .idct ldmfd sp!, {r1-r2} @@ -230,7 +230,7 @@ mpeg2_idct_copy: cmp r0, r12 blo 1b - ldmfd sp!, {r4-r12, pc} + ldmfd sp!, {r4-r11, pc} mpeg2_idct_add: cmp r0, #129 @@ -241,7 +241,7 @@ mpeg2_idct_add: cmp r1, #0x40 bne 3f 1: - stmfd sp!, {r2-r12, lr} + stmfd sp!, {r2-r11, lr} bl .idct ldmfd sp!, {r1-r2} mov r11, #0 @@ -287,21 +287,21 @@ mpeg2_idct_add: add r1, r1, r2 cmp r0, r12 blo 2b - ldmfd sp!, {r4-r12, pc} + ldmfd sp!, {r4-r11, pc} 3: - stmfd sp!, {r4-r7} + stmfd sp!, {r4-r6, lr} ldrsh r1, [r0, #0] /* r1 = block[0] */ - mov r11, #0 - strh r11, [r0, #0] /* block[0] = 0 */ - strh r11, [r0, #126] /* block[63] = 0 */ + mov r4, #0 + strh r4, [r0, #0] /* block[0] = 0 */ + strh r4, [r0, #126] /* block[63] = 0 */ add r1, r1, #64 /* r1 = DC << 7 */ add r0, r2, r3, asl #3 4: ldrb r4, [r2, #0] ldrb r5, [r2, #1] ldrb r6, [r2, #2] - ldrb r7, [r2, #3] + ldrb lr, [r2, #3] add r4, r4, r1, asr #7 usat r4, #8, r4 strb r4, [r2, #0] @@ -311,13 +311,13 @@ mpeg2_idct_add: add r6, r6, r1, asr #7 usat r6, #8, r6 strb r6, [r2, #2] - add r7, r7, r1, asr #7 - usat r7, #8, r7 - strb r7, [r2, #3] + add lr, lr, r1, asr #7 + usat lr, #8, lr + strb lr, [r2, #3] ldrb r4, [r2, #4] ldrb r5, [r2, #5] ldrb r6, [r2, #6] - ldrb r7, [r2, #7] + ldrb lr, [r2, #7] add r4, r4, r1, asr #7 usat r4, #8, r4 strb r4, [r2, #4] @@ -327,11 +327,10 @@ mpeg2_idct_add: add r6, r6, r1, asr #7 usat r6, #8, r6 strb r6, [r2, #6] - add r7, r7, r1, asr #7 - usat r7, #8, r7 - strb r7, [r2, #7] + add lr, lr, r1, asr #7 + usat lr, #8, lr + strb lr, [r2, #7] add r2, r2, r3 cmp r2, r0 blo 4b - ldmfd sp!, {r4-r7} - bx lr + ldmfd sp!, {r4-r6, pc} |