diff options
Diffstat (limited to 'media/libstagefright/codecs/amrwbenc/src/asm/ARMV5E/residu_asm_opt.s')
-rw-r--r-- | media/libstagefright/codecs/amrwbenc/src/asm/ARMV5E/residu_asm_opt.s | 456 |
1 files changed, 228 insertions, 228 deletions
diff --git a/media/libstagefright/codecs/amrwbenc/src/asm/ARMV5E/residu_asm_opt.s b/media/libstagefright/codecs/amrwbenc/src/asm/ARMV5E/residu_asm_opt.s index 060d9c7..86b3bd6 100644 --- a/media/libstagefright/codecs/amrwbenc/src/asm/ARMV5E/residu_asm_opt.s +++ b/media/libstagefright/codecs/amrwbenc/src/asm/ARMV5E/residu_asm_opt.s @@ -1,228 +1,228 @@ -@/*
-@ ** Copyright 2003-2010, VisualOn, Inc.
-@ **
-@ ** Licensed under the Apache License, Version 2.0 (the "License");
-@ ** you may not use this file except in compliance with the License.
-@ ** You may obtain a copy of the License at
-@ **
-@ ** http://www.apache.org/licenses/LICENSE-2.0
-@ **
-@ ** Unless required by applicable law or agreed to in writing, software
-@ ** distributed under the License is distributed on an "AS IS" BASIS,
-@ ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-@ ** See the License for the specific language governing permissions and
-@ ** limitations under the License.
-@ */
-@
-@void Residu(
-@ Word16 a[], /* (i) Q12 : prediction coefficients */
-@ Word16 x[], /* (i) : speech (values x[-m..-1] are needed */
-@ Word16 y[], /* (o) x2 : residual signal */
-@ Word16 lg /* (i) : size of filtering */
-@ )
-@a[] --- r0
-@x[] --- r1
-@y[] --- r2
-@lg --- r3
-
- .section .text
- .global Residu_opt
-
-Residu_opt:
-
- STMFD r13!, {r4 - r12, r14}
-
- LDRH r5, [r0], #2
- LDRH r6, [r0], #2
- ORR r5, r6, r5, LSL #16 @r5 --- a0, a1
-
- LDRH r6, [r0], #2
- LDRH r7, [r0], #2
- ORR r6, r7, r6, LSL #16 @r6 --- a2, a3
-
- LDRH r7, [r0], #2
- LDRH r8, [r0], #2
- ORR r7, r8, r7, LSL #16 @r7 --- a4, a5
-
- LDRH r8, [r0], #2
- LDRH r9, [r0], #2
- ORR r8, r9, r8, LSL #16 @r8 --- a6, a7
-
- LDRH r9, [r0], #2
- LDRH r10, [r0], #2
- ORR r9, r10, r9, LSL #16 @r9 --- a8, a9
-
- LDRH r10, [r0], #2
- LDRH r11, [r0], #2
- ORR r10, r11, r10, LSL #16 @r10 --- a10, a11
-
- LDRH r11, [r0], #2
- LDRH r12, [r0], #2
- ORR r11, r12, r11, LSL #16 @r11 --- a12, a13
-
- LDRH r12, [r0], #2
- LDRH r4, [r0], #2
- ORR r12, r4, r12, LSL #16 @r12 --- a14, a15
-
-
- STMFD r13!, {r8 - r12} @store r8-r12
- LDRH r4, [r0], #2 @load a16
- MOV r14, r3, ASR #2 @one loop get 4 outputs
- ADD r1, r1, #4
- MOV r0, r2
- ORR r14, r4, r14, LSL #16 @r14 --- loopnum, a16
-
-residu_loop:
-
- LDR r10, [r1], #-4 @r10 --- x[3], x[2]
- LDR r2, [r1], #-4 @r2 --- x[1], x[0]
-
- SMULTB r3, r5, r2 @i1(0) --- r3 = x[0] * a0
- SMULTT r4, r5, r2 @i2(0) --- r4 = x[1] * a0
- SMULTB r11, r5, r10 @i3(0) --- r11 = x[2] * a0
- SMULTT r12, r5, r10 @i4(0) --- r12 = x[3] * a0
-
- SMLABB r4, r5, r2, r4 @i2(1) --- r4 += x[0] * a1
- SMLABT r11, r5, r2, r11 @i3(1) --- r11 += x[1] * a0
- SMLABB r12, r5, r10, r12 @i4(1) --- r12 += x[2] * a1
-
- SMLATB r11, r6, r2, r11 @i3(2) --- r11 += x[0] * a2
- SMLATT r12, r6, r2, r12 @i4(2) --- r12 += x[1] * a2
- SMLABB r12, r6, r2, r12 @i4(3) --- r12 += x[0] * a3
-
- LDR r2, [r1], #-4 @r2 ---- x[-1], x[-2]
-
- SMLABT r3, r5, r2, r3 @i1(1) --- r3 += x[-1] * a1
- SMLATT r4, r6, r2, r4 @i2(2) --- r4 += x[-1] * a2
- SMLABT r11, r6, r2, r11 @i3(3) --- r11 += x[-1] * a3
- SMLATT r12, r7, r2, r12 @i4(4) --- r12 += x[-1] * a4
- SMLATB r3, r6, r2, r3 @i1(2) --- r3 += x[-2] * a2
-
- SMLABB r4, r6, r2, r4 @ i2 (3)
- SMLATB r11,r7, r2, r11 @ i3 (4)
- SMLABB r12,r7, r2, r12 @ i4 (5)
-
- LDR r2,[r1],#-4
- SMLABT r3, r6, r2, r3 @ i1 (3)
- SMLATT r4, r7, r2, r4 @ i2 (4)
- SMLABT r11,r7, r2, r11 @ i3 (5)
- SMLATT r12,r8, r2, r12 @ i4 (6)
- SMLATB r3, r7, r2, r3 @ i1 (4)
- SMLABB r4, r7, r2, r4 @ i2 (5)
- SMLATB r11,r8, r2, r11 @ i3 (6)
- SMLABB r12,r8, r2, r12 @ i4 (7)
-
- LDR r2,[r1],#-4
- SMLABT r3, r7, r2, r3 @ i1 (5)
- SMLATT r4, r8, r2, r4 @ i2 (6)
- SMLABT r11,r8, r2, r11 @ i3 (7)
- SMLATT r12,r9, r2, r12 @ i4 (8)
- SMLATB r3, r8, r2, r3 @ i1 (6)
- SMLABB r4, r8, r2, r4 @ i2 (7)
- SMLATB r11,r9, r2, r11 @ i3 (8)
- SMLABB r12,r9, r2, r12 @ i4 (9)
- LDR r10, [r13, #8] @ [ a10 | a11]
-
- LDR r2,[r1],#-4
- SMLABT r3, r8, r2, r3 @ i1 (7)
- SMLATT r4, r9, r2, r4 @ i2 (8)
- SMLABT r11,r9, r2, r11 @ i3 (9)
- SMLATT r12,r10, r2, r12 @ i4 (10)
- SMLATB r3, r9, r2, r3 @ i1 (8)
- SMLABB r4, r9, r2, r4 @ i2 (9)
- SMLATB r11,r10, r2, r11 @ i3 (10)
- SMLABB r12,r10, r2, r12 @ i4 (11)
- LDR r8, [r13, #12] @ [ a12 | a13 ]
-
- LDR r2,[r1],#-4
- SMLABT r3, r9, r2, r3 @ i1 (9)
- SMLATT r4, r10, r2, r4 @ i2 (10)
- SMLABT r11,r10, r2, r11 @ i3 (11)
- SMLATT r12,r8, r2, r12 @ i4 (12)
- SMLATB r3, r10, r2, r3 @ i1 (10)
- SMLABB r4, r10, r2, r4 @ i2 (11)
- SMLATB r11,r8, r2, r11 @ i3 (12)
- SMLABB r12,r8, r2, r12 @ i4 (13)
- LDR r9, [r13, #16] @ [ a14 | a15 ]
-
- LDR r2,[r1],#-4
- SMLABT r3, r10, r2, r3 @ i1 (11)
- SMLATT r4, r8, r2, r4 @ i2 (12)
- SMLABT r11,r8, r2, r11 @ i3 (13)
- SMLATT r12,r9, r2, r12 @ i4 (14)
- SMLATB r3, r8, r2, r3 @ i1 (12)
- SMLABB r4, r8, r2, r4 @ i2 (13)
- SMLATB r11,r9, r2, r11 @ i3 (14)
- SMLABB r12,r9, r2, r12 @ i4 (15)
-
-
- LDR r2,[r1],#-4
- SMLABT r3, r8, r2, r3 @ i1 (13)
- SMLATT r4, r9, r2, r4 @ i2 (14)
- SMLABT r11,r9, r2, r11 @ i3 (15)
- SMLABT r12,r14, r2, r12 @ i4 (16)
- SMLATB r3, r9, r2, r3 @ i1 (14)
- SMLABB r4, r9, r2, r4 @ i2 (15)
- SMLABB r11,r14, r2, r11 @ i3 (16)
- LDR r8, [r13] @ [ a6 | a7 ]
-
- LDR r2,[r1],#44 @ Change
- SMLABT r3, r9, r2, r3
- SMLABB r3, r14, r2, r3
- SMLABT r4, r14, r2, r4
- LDR r9, [r13, #4] @ [ a8 | a9 ]
-
-
- QADD r3,r3,r3
- QADD r4,r4,r4
- QADD r11,r11,r11
- QADD r12,r12,r12
-
- QADD r3,r3,r3
- QADD r4,r4,r4
- QADD r11,r11,r11
- QADD r12,r12,r12
-
- QADD r3,r3,r3
- QADD r4,r4,r4
- QADD r11,r11,r11
- QADD r12,r12,r12
-
- QADD r3,r3,r3
- QADD r4,r4,r4
- QADD r11,r11,r11
- QADD r12,r12,r12
-
- MOV r2,#32768
-
- QDADD r3,r2,r3
- QDADD r4,r2,r4
- QDADD r11,r2,r11
- QDADD r12,r2,r12
-
-
- MOV r3,r3,asr #16
- MOV r4,r4,asr #16
- MOV r11,r11,asr #16
- MOV r12,r12,asr #16
-
- STRH r3,[r0],#2
- STRH r4,[r0],#2
- STRH r11,[r0],#2
- STRH r12,[r0],#2
-
- MOV r2,r14,asr #16
- SUB r14, r14, #0x10000
- SUBS r2,r2,#1
- BNE residu_loop
-end:
- LDMFD r13!, {r8 -r12}
- LDMFD r13!, {r4 -r12,pc}
-
- @ENDFUNC
- .END
-
-
-
-
-
+@/* +@ ** Copyright 2003-2010, VisualOn, Inc. +@ ** +@ ** Licensed under the Apache License, Version 2.0 (the "License"); +@ ** you may not use this file except in compliance with the License. +@ ** You may obtain a copy of the License at +@ ** +@ ** http://www.apache.org/licenses/LICENSE-2.0 +@ ** +@ ** Unless required by applicable law or agreed to in writing, software +@ ** distributed under the License is distributed on an "AS IS" BASIS, +@ ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +@ ** See the License for the specific language governing permissions and +@ ** limitations under the License. +@ */ +@ +@void Residu( +@ Word16 a[], /* (i) Q12 : prediction coefficients */ +@ Word16 x[], /* (i) : speech (values x[-m..-1] are needed */ +@ Word16 y[], /* (o) x2 : residual signal */ +@ Word16 lg /* (i) : size of filtering */ +@ ) +@a[] --- r0 +@x[] --- r1 +@y[] --- r2 +@lg --- r3 + + .section .text + .global Residu_opt + +Residu_opt: + + STMFD r13!, {r4 - r12, r14} + + LDRH r5, [r0], #2 + LDRH r6, [r0], #2 + ORR r5, r6, r5, LSL #16 @r5 --- a0, a1 + + LDRH r6, [r0], #2 + LDRH r7, [r0], #2 + ORR r6, r7, r6, LSL #16 @r6 --- a2, a3 + + LDRH r7, [r0], #2 + LDRH r8, [r0], #2 + ORR r7, r8, r7, LSL #16 @r7 --- a4, a5 + + LDRH r8, [r0], #2 + LDRH r9, [r0], #2 + ORR r8, r9, r8, LSL #16 @r8 --- a6, a7 + + LDRH r9, [r0], #2 + LDRH r10, [r0], #2 + ORR r9, r10, r9, LSL #16 @r9 --- a8, a9 + + LDRH r10, [r0], #2 + LDRH r11, [r0], #2 + ORR r10, r11, r10, LSL #16 @r10 --- a10, a11 + + LDRH r11, [r0], #2 + LDRH r12, [r0], #2 + ORR r11, r12, r11, LSL #16 @r11 --- a12, a13 + + LDRH r12, [r0], #2 + LDRH r4, [r0], #2 + ORR r12, r4, r12, LSL #16 @r12 --- a14, a15 + + + STMFD r13!, {r8 - r12} @store r8-r12 + LDRH r4, [r0], #2 @load a16 + MOV r14, r3, ASR #2 @one loop get 4 outputs + ADD r1, r1, #4 + MOV r0, r2 + ORR r14, r4, r14, LSL #16 @r14 --- loopnum, a16 + +residu_loop: + + LDR r10, [r1], #-4 @r10 --- x[3], x[2] + LDR r2, [r1], #-4 @r2 --- x[1], x[0] + + SMULTB r3, r5, r2 @i1(0) --- r3 = x[0] * a0 + SMULTT r4, r5, r2 @i2(0) --- r4 = x[1] * a0 + SMULTB r11, r5, r10 @i3(0) --- r11 = x[2] * a0 + SMULTT r12, r5, r10 @i4(0) --- r12 = x[3] * a0 + + SMLABB r4, r5, r2, r4 @i2(1) --- r4 += x[0] * a1 + SMLABT r11, r5, r2, r11 @i3(1) --- r11 += x[1] * a0 + SMLABB r12, r5, r10, r12 @i4(1) --- r12 += x[2] * a1 + + SMLATB r11, r6, r2, r11 @i3(2) --- r11 += x[0] * a2 + SMLATT r12, r6, r2, r12 @i4(2) --- r12 += x[1] * a2 + SMLABB r12, r6, r2, r12 @i4(3) --- r12 += x[0] * a3 + + LDR r2, [r1], #-4 @r2 ---- x[-1], x[-2] + + SMLABT r3, r5, r2, r3 @i1(1) --- r3 += x[-1] * a1 + SMLATT r4, r6, r2, r4 @i2(2) --- r4 += x[-1] * a2 + SMLABT r11, r6, r2, r11 @i3(3) --- r11 += x[-1] * a3 + SMLATT r12, r7, r2, r12 @i4(4) --- r12 += x[-1] * a4 + SMLATB r3, r6, r2, r3 @i1(2) --- r3 += x[-2] * a2 + + SMLABB r4, r6, r2, r4 @ i2 (3) + SMLATB r11,r7, r2, r11 @ i3 (4) + SMLABB r12,r7, r2, r12 @ i4 (5) + + LDR r2,[r1],#-4 + SMLABT r3, r6, r2, r3 @ i1 (3) + SMLATT r4, r7, r2, r4 @ i2 (4) + SMLABT r11,r7, r2, r11 @ i3 (5) + SMLATT r12,r8, r2, r12 @ i4 (6) + SMLATB r3, r7, r2, r3 @ i1 (4) + SMLABB r4, r7, r2, r4 @ i2 (5) + SMLATB r11,r8, r2, r11 @ i3 (6) + SMLABB r12,r8, r2, r12 @ i4 (7) + + LDR r2,[r1],#-4 + SMLABT r3, r7, r2, r3 @ i1 (5) + SMLATT r4, r8, r2, r4 @ i2 (6) + SMLABT r11,r8, r2, r11 @ i3 (7) + SMLATT r12,r9, r2, r12 @ i4 (8) + SMLATB r3, r8, r2, r3 @ i1 (6) + SMLABB r4, r8, r2, r4 @ i2 (7) + SMLATB r11,r9, r2, r11 @ i3 (8) + SMLABB r12,r9, r2, r12 @ i4 (9) + LDR r10, [r13, #8] @ [ a10 | a11] + + LDR r2,[r1],#-4 + SMLABT r3, r8, r2, r3 @ i1 (7) + SMLATT r4, r9, r2, r4 @ i2 (8) + SMLABT r11,r9, r2, r11 @ i3 (9) + SMLATT r12,r10, r2, r12 @ i4 (10) + SMLATB r3, r9, r2, r3 @ i1 (8) + SMLABB r4, r9, r2, r4 @ i2 (9) + SMLATB r11,r10, r2, r11 @ i3 (10) + SMLABB r12,r10, r2, r12 @ i4 (11) + LDR r8, [r13, #12] @ [ a12 | a13 ] + + LDR r2,[r1],#-4 + SMLABT r3, r9, r2, r3 @ i1 (9) + SMLATT r4, r10, r2, r4 @ i2 (10) + SMLABT r11,r10, r2, r11 @ i3 (11) + SMLATT r12,r8, r2, r12 @ i4 (12) + SMLATB r3, r10, r2, r3 @ i1 (10) + SMLABB r4, r10, r2, r4 @ i2 (11) + SMLATB r11,r8, r2, r11 @ i3 (12) + SMLABB r12,r8, r2, r12 @ i4 (13) + LDR r9, [r13, #16] @ [ a14 | a15 ] + + LDR r2,[r1],#-4 + SMLABT r3, r10, r2, r3 @ i1 (11) + SMLATT r4, r8, r2, r4 @ i2 (12) + SMLABT r11,r8, r2, r11 @ i3 (13) + SMLATT r12,r9, r2, r12 @ i4 (14) + SMLATB r3, r8, r2, r3 @ i1 (12) + SMLABB r4, r8, r2, r4 @ i2 (13) + SMLATB r11,r9, r2, r11 @ i3 (14) + SMLABB r12,r9, r2, r12 @ i4 (15) + + + LDR r2,[r1],#-4 + SMLABT r3, r8, r2, r3 @ i1 (13) + SMLATT r4, r9, r2, r4 @ i2 (14) + SMLABT r11,r9, r2, r11 @ i3 (15) + SMLABT r12,r14, r2, r12 @ i4 (16) + SMLATB r3, r9, r2, r3 @ i1 (14) + SMLABB r4, r9, r2, r4 @ i2 (15) + SMLABB r11,r14, r2, r11 @ i3 (16) + LDR r8, [r13] @ [ a6 | a7 ] + + LDR r2,[r1],#44 @ Change + SMLABT r3, r9, r2, r3 + SMLABB r3, r14, r2, r3 + SMLABT r4, r14, r2, r4 + LDR r9, [r13, #4] @ [ a8 | a9 ] + + + QADD r3,r3,r3 + QADD r4,r4,r4 + QADD r11,r11,r11 + QADD r12,r12,r12 + + QADD r3,r3,r3 + QADD r4,r4,r4 + QADD r11,r11,r11 + QADD r12,r12,r12 + + QADD r3,r3,r3 + QADD r4,r4,r4 + QADD r11,r11,r11 + QADD r12,r12,r12 + + QADD r3,r3,r3 + QADD r4,r4,r4 + QADD r11,r11,r11 + QADD r12,r12,r12 + + MOV r2,#32768 + + QDADD r3,r2,r3 + QDADD r4,r2,r4 + QDADD r11,r2,r11 + QDADD r12,r2,r12 + + + MOV r3,r3,asr #16 + MOV r4,r4,asr #16 + MOV r11,r11,asr #16 + MOV r12,r12,asr #16 + + STRH r3,[r0],#2 + STRH r4,[r0],#2 + STRH r11,[r0],#2 + STRH r12,[r0],#2 + + MOV r2,r14,asr #16 + SUB r14, r14, #0x10000 + SUBS r2,r2,#1 + BNE residu_loop +end: + LDMFD r13!, {r8 -r12} + LDMFD r13!, {r4 -r12,pc} + + @ENDFUNC + .END + + + + + |