1@/* 2@ ** Copyright 2003-2010, VisualOn, Inc. 3@ ** 4@ ** Licensed under the Apache License, Version 2.0 (the "License"); 5@ ** you may not use this file except in compliance with the License. 6@ ** You may obtain a copy of the License at 7@ ** 8@ ** http://www.apache.org/licenses/LICENSE-2.0 9@ ** 10@ ** Unless required by applicable law or agreed to in writing, software 11@ ** distributed under the License is distributed on an "AS IS" BASIS, 12@ ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13@ ** See the License for the specific language governing permissions and 14@ ** limitations under the License. 15@ */ 16@**********************************************************************/ 17@void Syn_filt( 18@ Word16 a[], /* (i) Q12 : a[m+1] prediction coefficients */ 19@ Word16 x[], /* (i) : input signal */ 20@ Word16 y[], /* (o) : output signal */ 21@ Word16 mem[], /* (i/o) : memory associated with this filtering. */ 22@) 23@*********************************************************************** 24@ a[] --- r0 25@ x[] --- r1 26@ y[] --- r2 27@ mem[] --- r3 28@ m --- 16 lg --- 80 update --- 1 29 30 .section .text 31 .global Syn_filt_asm 32 .extern voAWB_Copy 33 34Syn_filt_asm: 35 36 STMFD r13!, {r4 - r12, r14} 37 SUB r13, r13, #700 @ y_buf[L_FRAME16k + M16k] 38 39 MOV r4, r3 @ copy mem[] address 40 MOV r5, r13 @ copy yy = y_buf address 41 42 @ for(i = 0@ i < m@ i++) 43 @{ 44 @ *yy++ = mem[i]@ 45 @} 46 47 LDRH r6, [r4], #2 48 LDRH r7, [r4], #2 49 LDRH r8, [r4], #2 50 LDRH r9, [r4], #2 51 LDRH r10, [r4], #2 52 LDRH r11, [r4], #2 53 LDRH r12, [r4], #2 54 LDRH r14, [r4], #2 55 56 STRH r6, [r5], #2 57 STRH r7, [r5], #2 58 STRH r8, [r5], #2 59 STRH r9, [r5], #2 60 STRH r10, [r5], #2 61 STRH r11, [r5], #2 62 STRH r12, [r5], #2 63 STRH r14, [r5], #2 64 65 LDRH r6, [r4], #2 66 LDRH r7, [r4], #2 67 LDRH r8, [r4], #2 68 LDRH r9, [r4], #2 69 LDRH r10, [r4], #2 70 LDRH r11, [r4], #2 71 LDRH r12, [r4], #2 72 LDRH r14, [r4], #2 73 74 STRH r6, [r5], #2 75 STRH r7, [r5], #2 76 STRH r8, [r5], #2 77 STRH r9, [r5], #2 78 STRH r10, [r5], #2 79 STRH r11, [r5], #2 80 STRH r12, [r5], #2 81 STRH r14, [r5], #2 82 83 LDRSH r5, [r0] @ load a[0] 84 MOV r8, #0 @ i = 0 85 MOV r5, r5, ASR #1 @ a0 = a[0] >> 1 86 @MOV r4, r13 87 @ load all a[] 88 89 LDR r14, =0xffff 90 LDRSH r6, [r0, #2] @ load a[1] 91 LDRSH r7, [r0, #4] @ load a[2] 92 LDRSH r9, [r0, #6] @ load a[3] 93 LDRSH r11,[r0, #8] @ load a[4] 94 AND r6, r6, r14 95 AND r9, r9, r14 96 ORR r10, r6, r7, LSL #16 @ -a[2] -- -a[1] 97 ORR r12, r9, r11, LSL #16 @ -a[4] -- -a[3] 98 STR r10, [r13, #-4] 99 STR r12, [r13, #-8] 100 101 LDRSH r6, [r0, #10] @ load a[5] 102 LDRSH r7, [r0, #12] @ load a[6] 103 LDRSH r9, [r0, #14] @ load a[7] 104 LDRSH r11,[r0, #16] @ load a[8] 105 AND r6, r6, r14 106 AND r9, r9, r14 107 ORR r10, r6, r7, LSL #16 @ -a[6] -- -a[5] 108 ORR r12, r9, r11, LSL #16 @ -a[8] -- -a[7] 109 STR r10, [r13, #-12] 110 STR r12, [r13, #-16] 111 112 LDRSH r6, [r0, #18] @ load a[9] 113 LDRSH r7, [r0, #20] @ load a[10] 114 LDRSH r9, [r0, #22] @ load a[11] 115 LDRSH r11,[r0, #24] @ load a[12] 116 AND r6, r6, r14 117 AND r9, r9, r14 118 ORR r10, r6, r7, LSL #16 @ -a[10] -- -a[9] 119 ORR r12, r9, r11, LSL #16 @ -a[12] -- -a[11] 120 STR r10, [r13, #-20] 121 STR r12, [r13, #-24] 122 123 LDRSH r6, [r0, #26] @ load a[13] 124 LDRSH r7, [r0, #28] @ load a[14] 125 LDRSH r9, [r0, #30] @ load a[15] 126 LDRSH r11,[r0, #32] @ load a[16] 127 AND r6, r6, r14 128 AND r9, r9, r14 129 ORR r10, r6, r7, LSL #16 @ -a[14] -- -a[13] 130 ORR r12, r9, r11, LSL #16 @ -a[16] -- -a[15] 131 STR r10, [r13, #-28] 132 STR r12, [r13, #-32] 133 134 ADD r4, r13, #32 135LOOP: 136 LDRSH r6, [r1], #2 @ load x[i] 137 ADD r10, r4, r8, LSL #1 @ temp_p = yy + i 138 139 MUL r0, r5, r6 @ L_tmp = x[i] * a0 140 @ for(j = 1@ j <= m, j+=8) 141 LDR r7, [r13, #-4] @ -a[2] -a[1] 142 LDRSH r9, [r10, #-2] @ *(temp_p - 1) 143 LDRSH r12, [r10, #-4] @ *(temp_p - 2) 144 145 146 SMULBB r14, r9, r7 @ -a[1] * (*(temp_p -1)) 147 148 LDRSH r6, [r10, #-6] @ *(temp_p - 3) 149 150 SMLABT r14, r12, r7, r14 @ -a[2] * (*(temp_p - 2)) 151 152 LDR r7, [r13, #-8] @ -a[4] -a[3] 153 LDRSH r11, [r10, #-8] @ *(temp_p - 4) 154 155 SMLABB r14, r6, r7, r14 @ -a[3] * (*(temp_p -3)) 156 157 LDRSH r9, [r10, #-10] @ *(temp_p - 5) 158 159 SMLABT r14, r11, r7, r14 @ -a[4] * (*(temp_p -4)) 160 161 LDR r7, [r13, #-12] @ -a[6] -a[5] 162 LDRSH r12, [r10, #-12] @ *(temp_p - 6) 163 164 SMLABB r14, r9, r7, r14 @ -a[5] * (*(temp_p -5)) 165 166 LDRSH r6, [r10, #-14] @ *(temp_p - 7) 167 168 SMLABT r14, r12, r7, r14 @ -a[6] * (*(temp_p - 6)) 169 170 LDR r7, [r13, #-16] @ -a[8] -a[7] 171 LDRSH r11, [r10, #-16] @ *(temp_p - 8) 172 173 SMLABB r14, r6, r7, r14 @ -a[7] * (*(temp_p -7)) 174 175 LDRSH r9, [r10, #-18] @ *(temp_p - 9) 176 177 SMLABT r14, r11, r7, r14 @ -a[8] * (*(temp_p -8)) 178 179 LDR r7, [r13, #-20] @ -a[10] -a[9] 180 LDRSH r12, [r10, #-20] @ *(temp_p - 10) 181 182 SMLABB r14, r9, r7, r14 @ -a[9] * (*(temp_p -9)) 183 184 LDRSH r6, [r10, #-22] @ *(temp_p - 11) 185 186 SMLABT r14, r12, r7, r14 @ -a[10] * (*(temp_p - 10)) 187 188 LDR r7, [r13, #-24] @ -a[12] -a[11] 189 LDRSH r11, [r10, #-24] @ *(temp_p - 12) 190 191 SMLABB r14, r6, r7, r14 @ -a[11] * (*(temp_p -11)) 192 193 LDRSH r9, [r10, #-26] @ *(temp_p - 13) 194 195 SMLABT r14, r11, r7, r14 @ -a[12] * (*(temp_p -12)) 196 197 LDR r7, [r13, #-28] @ -a[14] -a[13] 198 LDRSH r12, [r10, #-28] @ *(temp_p - 14) 199 200 SMLABB r14, r9, r7, r14 @ -a[13] * (*(temp_p -13)) 201 202 LDRSH r6, [r10, #-30] @ *(temp_p - 15) 203 204 SMLABT r14, r12, r7, r14 @ -a[14] * (*(temp_p - 14)) 205 206 LDR r7, [r13, #-32] @ -a[16] -a[15] 207 LDRSH r11, [r10, #-32] @ *(temp_p - 16) 208 209 SMLABB r14, r6, r7, r14 @ -a[15] * (*(temp_p -15)) 210 211 SMLABT r14, r11, r7, r14 @ -a[16] * (*(temp_p -16)) 212 213 RSB r14, r14, r0 214 215 MOV r7, r14, LSL #4 @ L_tmp <<=4 216 ADD r8, r8, #1 217 ADD r14, r7, #0x8000 218 MOV r7, r14, ASR #16 @ (L_tmp + 0x8000) >> 16 219 CMP r8, #80 220 STRH r7, [r10] @ yy[i] 221 STRH r7, [r2], #2 @ y[i] 222 BLT LOOP 223 224 @ update mem[] 225 ADD r5, r13, #160 @ yy[64] address 226 MOV r1, r3 227 MOV r0, r5 228 MOV r2, #16 229 BL voAWB_Copy 230 231Syn_filt_asm_end: 232 233 ADD r13, r13, #700 234 LDMFD r13!, {r4 - r12, r15} 235 @ENDFUNC 236 .end 237 238 239