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 Pred_lt4( 18@ Word16 exc[], /* in/out: excitation buffer */ 19@ Word16 T0, /* input : integer pitch lag */ 20@ Word16 frac, /* input : fraction of lag */ 21@ Word16 L_subfr /* input : subframe size */ 22@ ) 23 24@****************************** 25@ ARM Register 26@****************************** 27@ r0 --- exc[] 28@ r1 --- T0 29@ r2 --- frac 30@ r3 --- L_subfr 31 32 .section .text 33 .global pred_lt4_asm 34 .extern inter4_2 35 36pred_lt4_asm: 37 38 STMFD r13!, {r4 - r12, r14} 39 RSB r4, r1, #0 @-T0 40 RSB r2, r2, #0 @frac = -frac 41 ADD r5, r0, r4, LSL #1 @x = exc - T0 42 CMP r2, #0 43 ADDLT r2, r2, #4 @frac += UP_SAMP 44 SUBLT r5, r5, #2 @x-- 45 SUB r5, r5, #30 @x -= 15 46 RSB r4, r2, #3 @k = 3 - frac 47 LDR r6, Table 48 MOV r8, r4, LSL #6 49 @MOV r7, #0 @j = 0 50 ADD r8, r6, r8 @ptr2 = &(inter4_2[k][0]) 51 52 MOV r1, r5 53 MOV r5, #0x8000 54 MOV r14, #21 55@ used register 56 @r0 --- exc[] r1 --- x r7 --- j r8 --- ptr2 r5 --- 0x8000 57THREE_LOOP: 58 59 @MOV r1, r5 @ptr1 = x 60 MOV r2, r8 @ptr = ptr2 61 LDR r3, [r2], #4 @h[0], h[1] 62 LDRSH r4, [r1], #2 @x[0] 63 LDRSH r6, [r1], #2 @x[1] 64 LDRSH r9, [r1], #2 @x[2] 65 66 SMULBB r10, r4, r3 @x[0] * h[0] 67 SMULBB r11, r6, r3 @x[1] * h[0] 68 SMULBB r12, r9, r3 @x[2] * h[0] 69 70 LDRSH r4, [r1], #2 @x[3] 71 SMLABT r10, r6, r3, r10 @x[1] * h[1] 72 SMLABT r11, r9, r3, r11 @x[2] * h[1] 73 SMLABT r12, r4, r3, r12 @x[3] * h[1] 74 75 LDR r3, [r2], #4 @h[2], h[3] 76 LDRSH r6, [r1], #2 @x[4] 77 SMLABB r10, r9, r3, r10 @x[2] * h[2] 78 SMLABB r11, r4, r3, r11 @x[3] * h[2] 79 SMLABB r12, r6, r3, r12 @x[4] * h[2] 80 81 LDRSH r9, [r1], #2 @x[5] 82 SMLABT r10, r4, r3, r10 @x[3] * h[3] 83 SMLABT r11, r6, r3, r11 @x[4] * h[3] 84 SMLABT r12, r9, r3, r12 @x[5] * h[3] 85 86 LDR r3, [r2], #4 @h[4], h[5] 87 LDRSH r4, [r1], #2 @x[6] 88 SMLABB r10, r6, r3, r10 @x[4] * h[4] 89 SMLABB r11, r9, r3, r11 @x[5] * h[4] 90 SMLABB r12, r4, r3, r12 @x[6] * h[4] 91 92 LDRSH r6, [r1], #2 @x[7] 93 SMLABT r10, r9, r3, r10 @x[5] * h[5] 94 SMLABT r11, r4, r3, r11 @x[6] * h[5] 95 SMLABT r12, r6, r3, r12 @x[7] * h[5] 96 97 LDR r3, [r2], #4 @h[6], h[7] 98 LDRSH r9, [r1], #2 @x[8] 99 SMLABB r10, r4, r3, r10 @x[6] * h[6] 100 SMLABB r11, r6, r3, r11 @x[7] * h[6] 101 SMLABB r12, r9, r3, r12 @x[8] * h[6] 102 103 LDRSH r4, [r1], #2 @x[9] 104 SMLABT r10, r6, r3, r10 @x[7] * h[7] 105 SMLABT r11, r9, r3, r11 @x[8] * h[7] 106 SMLABT r12, r4, r3, r12 @x[9] * h[7] 107 108 LDR r3, [r2], #4 @h[8], h[9] 109 LDRSH r6, [r1], #2 @x[10] 110 SMLABB r10, r9, r3, r10 @x[8] * h[8] 111 SMLABB r11, r4, r3, r11 @x[9] * h[8] 112 SMLABB r12, r6, r3, r12 @x[10] * h[8] 113 114 LDRSH r9, [r1], #2 @x[11] 115 SMLABT r10, r4, r3, r10 @x[9] * h[9] 116 SMLABT r11, r6, r3, r11 @x[10] * h[9] 117 SMLABT r12, r9, r3, r12 @x[11] * h[9] 118 119 LDR r3, [r2], #4 @h[10], h[11] 120 LDRSH r4, [r1], #2 @x[12] 121 SMLABB r10, r6, r3, r10 @x[10] * h[10] 122 SMLABB r11, r9, r3, r11 @x[11] * h[10] 123 SMLABB r12, r4, r3, r12 @x[12] * h[10] 124 125 LDRSH r6, [r1], #2 @x[13] 126 SMLABT r10, r9, r3, r10 @x[11] * h[11] 127 SMLABT r11, r4, r3, r11 @x[12] * h[11] 128 SMLABT r12, r6, r3, r12 @x[13] * h[11] 129 130 LDR r3, [r2], #4 @h[12], h[13] 131 LDRSH r9, [r1], #2 @x[14] 132 SMLABB r10, r4, r3, r10 @x[12] * h[12] 133 SMLABB r11, r6, r3, r11 @x[13] * h[12] 134 SMLABB r12, r9, r3, r12 @x[14] * h[12] 135 136 LDRSH r4, [r1], #2 @x[15] 137 SMLABT r10, r6, r3, r10 @x[13] * h[13] 138 SMLABT r11, r9, r3, r11 @x[14] * h[13] 139 SMLABT r12, r4, r3, r12 @x[15] * h[13] 140 141 LDR r3, [r2], #4 @h[14], h[15] 142 LDRSH r6, [r1], #2 @x[16] 143 SMLABB r10, r9, r3, r10 @x[14] * h[14] 144 SMLABB r11, r4, r3, r11 @x[15] * h[14] 145 SMLABB r12, r6, r3, r12 @x[16] * h[14] 146 147 LDRSH r9, [r1], #2 @x[17] 148 SMLABT r10, r4, r3, r10 @x[15] * h[15] 149 SMLABT r11, r6, r3, r11 @x[16] * h[15] 150 SMLABT r12, r9, r3, r12 @x[17] * h[15] 151 152 LDR r3, [r2], #4 @h[16], h[17] 153 LDRSH r4, [r1], #2 @x[18] 154 SMLABB r10, r6, r3, r10 @x[16] * h[16] 155 SMLABB r11, r9, r3, r11 @x[17] * h[16] 156 SMLABB r12, r4, r3, r12 @x[18] * h[16] 157 158 LDRSH r6, [r1], #2 @x[19] 159 SMLABT r10, r9, r3, r10 @x[17] * h[17] 160 SMLABT r11, r4, r3, r11 @x[18] * h[17] 161 SMLABT r12, r6, r3, r12 @x[19] * h[17] 162 163 LDR r3, [r2], #4 @h[18], h[19] 164 LDRSH r9, [r1], #2 @x[20] 165 SMLABB r10, r4, r3, r10 @x[18] * h[18] 166 SMLABB r11, r6, r3, r11 @x[19] * h[18] 167 SMLABB r12, r9, r3, r12 @x[20] * h[18] 168 169 LDRSH r4, [r1], #2 @x[21] 170 SMLABT r10, r6, r3, r10 @x[19] * h[19] 171 SMLABT r11, r9, r3, r11 @x[20] * h[19] 172 SMLABT r12, r4, r3, r12 @x[21] * h[19] 173 174 LDR r3, [r2], #4 @h[20], h[21] 175 LDRSH r6, [r1], #2 @x[22] 176 SMLABB r10, r9, r3, r10 @x[20] * h[20] 177 SMLABB r11, r4, r3, r11 @x[21] * h[20] 178 SMLABB r12, r6, r3, r12 @x[22] * h[20] 179 180 LDRSH r9, [r1], #2 @x[23] 181 SMLABT r10, r4, r3, r10 @x[21] * h[21] 182 SMLABT r11, r6, r3, r11 @x[22] * h[21] 183 SMLABT r12, r9, r3, r12 @x[23] * h[21] 184 185 LDR r3, [r2], #4 @h[22], h[23] 186 LDRSH r4, [r1], #2 @x[24] 187 SMLABB r10, r6, r3, r10 @x[22] * h[22] 188 SMLABB r11, r9, r3, r11 @x[23] * h[22] 189 SMLABB r12, r4, r3, r12 @x[24] * h[22] 190 191 LDRSH r6, [r1], #2 @x[25] 192 SMLABT r10, r9, r3, r10 @x[23] * h[23] 193 SMLABT r11, r4, r3, r11 @x[24] * h[23] 194 SMLABT r12, r6, r3, r12 @x[25] * h[23] 195 196 LDR r3, [r2], #4 @h[24], h[25] 197 LDRSH r9, [r1], #2 @x[26] 198 SMLABB r10, r4, r3, r10 @x[24] * h[24] 199 SMLABB r11, r6, r3, r11 @x[25] * h[24] 200 SMLABB r12, r9, r3, r12 @x[26] * h[24] 201 202 LDRSH r4, [r1], #2 @x[27] 203 SMLABT r10, r6, r3, r10 @x[25] * h[25] 204 SMLABT r11, r9, r3, r11 @x[26] * h[25] 205 SMLABT r12, r4, r3, r12 @x[27] * h[25] 206 207 LDR r3, [r2], #4 @h[26], h[27] 208 LDRSH r6, [r1], #2 @x[28] 209 SMLABB r10, r9, r3, r10 @x[26] * h[26] 210 SMLABB r11, r4, r3, r11 @x[27] * h[26] 211 SMLABB r12, r6, r3, r12 @x[28] * h[26] 212 213 LDRSH r9, [r1], #2 @x[29] 214 SMLABT r10, r4, r3, r10 @x[27] * h[27] 215 SMLABT r11, r6, r3, r11 @x[28] * h[27] 216 SMLABT r12, r9, r3, r12 @x[29] * h[27] 217 218 LDR r3, [r2], #4 @h[28], h[29] 219 LDRSH r4, [r1], #2 @x[30] 220 SMLABB r10, r6, r3, r10 @x[28] * h[28] 221 SMLABB r11, r9, r3, r11 @x[29] * h[28] 222 SMLABB r12, r4, r3, r12 @x[30] * h[28] 223 224 LDRSH r6, [r1], #2 @x[31] 225 SMLABT r10, r9, r3, r10 @x[29] * h[29] 226 SMLABT r11, r4, r3, r11 @x[30] * h[29] 227 SMLABT r12, r6, r3, r12 @x[31] * h[29] 228 229 LDR r3, [r2], #4 @h[30], h[31] 230 LDRSH r9, [r1], #2 @x[32] 231 SMLABB r10, r4, r3, r10 @x[30] * h[30] 232 SMLABB r11, r6, r3, r11 @x[31] * h[30] 233 SMLABB r12, r9, r3, r12 @x[32] * h[30] 234 235 LDRSH r4, [r1], #-60 @x[33] 236 SMLABT r10, r6, r3, r10 @x[31] * h[31] 237 SMLABT r11, r9, r3, r11 @x[32] * h[31] 238 SMLABT r12, r4, r3, r12 @x[33] * h[31] 239 240 @SSAT r10, #32, r10, LSL #2 241 @SSAT r11, #32, r11, LSL #2 242 @SSAT r12, #32, r12, LSL #2 243 244 MOV r10, r10, LSL #1 245 MOV r11, r11, LSL #1 246 MOV r12, r12, LSL #1 247 248 QADD r10, r10, r10 249 QADD r11, r11, r11 250 QADD r12, r12, r12 251 252 QADD r10, r10, r5 253 QADD r11, r11, r5 254 QADD r12, r12, r5 255 256 SUBS r14, r14, #1 257 258 MOV r10, r10, ASR #16 259 MOV r11, r11, ASR #16 260 MOV r12, r12, ASR #16 261 262 STRH r10, [r0], #2 263 STRH r11, [r0], #2 264 STRH r12, [r0], #2 265 BNE THREE_LOOP 266 267 MOV r2, r8 @ptr = ptr2 268 269Last2LOOP: 270 271 LDR r3, [r2], #4 @h[0], h[1] 272 LDRSH r4, [r1], #2 @x[0] 273 LDRSH r6, [r1], #2 @x[1] 274 LDRSH r9, [r1], #2 @x[2] 275 276 SMULBB r10, r4, r3 @x[0] * h[0] 277 SMULBB r11, r6, r3 @x[1] * h[0] 278 279 SMLABT r10, r6, r3, r10 @x[1] * h[1] 280 SMLABT r11, r9, r3, r11 @x[2] * h[1] 281 282 LDR r3, [r2], #4 @h[2], h[3] 283 LDRSH r4, [r1], #2 @x[3] 284 LDRSH r6, [r1], #2 @x[4] 285 286 SMLABB r10, r9, r3, r10 @x[2] * h[2] 287 SMLABB r11, r4, r3, r11 @x[3] * h[2] 288 289 SMLABT r10, r4, r3, r10 @x[3] * h[3] 290 SMLABT r11, r6, r3, r11 @x[4] * h[3] 291 292 LDR r3, [r2], #4 @h[4], h[5] 293 LDRSH r9, [r1], #2 @x[5] 294 LDRSH r4, [r1], #2 @x[6] 295 296 SMLABB r10, r6, r3, r10 @x[4] * h[4] 297 SMLABB r11, r9, r3, r11 @x[5] * h[4] 298 299 SMLABT r10, r9, r3, r10 @x[5] * h[5] 300 SMLABT r11, r4, r3, r11 @x[6] * h[5] 301 302 LDR r3, [r2], #4 @h[6], h[7] 303 LDRSH r6, [r1], #2 @x[7] 304 LDRSH r9, [r1], #2 @x[8] 305 306 SMLABB r10, r4, r3, r10 @x[6] * h[6] 307 SMLABB r11, r6, r3, r11 @x[7] * h[6] 308 309 SMLABT r10, r6, r3, r10 @x[7] * h[7] 310 SMLABT r11, r9, r3, r11 @x[8] * h[7] 311 312 LDR r3, [r2], #4 @h[8], h[9] 313 LDRSH r4, [r1], #2 @x[9] 314 LDRSH r6, [r1], #2 @x[10] 315 316 SMLABB r10, r9, r3, r10 @x[8] * h[8] 317 SMLABB r11, r4, r3, r11 @x[9] * h[8] 318 319 SMLABT r10, r4, r3, r10 @x[9] * h[9] 320 SMLABT r11, r6, r3, r11 @x[10] * h[9] 321 322 LDR r3, [r2], #4 @h[10], h[11] 323 LDRSH r9, [r1], #2 @x[11] 324 LDRSH r4, [r1], #2 @x[12] 325 326 SMLABB r10, r6, r3, r10 @x[10] * h[10] 327 SMLABB r11, r9, r3, r11 @x[11] * h[10] 328 329 SMLABT r10, r9, r3, r10 @x[11] * h[11] 330 SMLABT r11, r4, r3, r11 @x[12] * h[11] 331 332 LDR r3, [r2], #4 @h[12], h[13] 333 LDRSH r6, [r1], #2 @x[13] 334 LDRSH r9, [r1], #2 @x[14] 335 336 SMLABB r10, r4, r3, r10 @x[12] * h[12] 337 SMLABB r11, r6, r3, r11 @x[13] * h[12] 338 339 SMLABT r10, r6, r3, r10 @x[13] * h[13] 340 SMLABT r11, r9, r3, r11 @x[14] * h[13] 341 342 LDR r3, [r2], #4 @h[14], h[15] 343 LDRSH r4, [r1], #2 @x[15] 344 LDRSH r6, [r1], #2 @x[16] 345 346 SMLABB r10, r9, r3, r10 @x[14] * h[14] 347 SMLABB r11, r4, r3, r11 @x[15] * h[14] 348 349 SMLABT r10, r4, r3, r10 @x[15] * h[15] 350 SMLABT r11, r6, r3, r11 @x[16] * h[15] 351 352 LDR r3, [r2], #4 @h[16], h[17] 353 LDRSH r9, [r1], #2 @x[17] 354 LDRSH r4, [r1], #2 @x[18] 355 356 SMLABB r10, r6, r3, r10 @x[16] * h[16] 357 SMLABB r11, r9, r3, r11 @x[17] * h[16] 358 359 SMLABT r10, r9, r3, r10 @x[17] * h[17] 360 SMLABT r11, r4, r3, r11 @x[18] * h[17] 361 362 LDR r3, [r2], #4 @h[18], h[19] 363 LDRSH r6, [r1], #2 @x[19] 364 LDRSH r9, [r1], #2 @x[20] 365 366 SMLABB r10, r4, r3, r10 @x[18] * h[18] 367 SMLABB r11, r6, r3, r11 @x[19] * h[18] 368 369 SMLABT r10, r6, r3, r10 @x[19] * h[19] 370 SMLABT r11, r9, r3, r11 @x[20] * h[19] 371 372 LDR r3, [r2], #4 @h[20], h[21] 373 LDRSH r4, [r1], #2 @x[21] 374 LDRSH r6, [r1], #2 @x[22] 375 376 SMLABB r10, r9, r3, r10 @x[20] * h[20] 377 SMLABB r11, r4, r3, r11 @x[21] * h[20] 378 379 SMLABT r10, r4, r3, r10 @x[21] * h[21] 380 SMLABT r11, r6, r3, r11 @x[22] * h[21] 381 382 LDR r3, [r2], #4 @h[22], h[23] 383 LDRSH r9, [r1], #2 @x[23] 384 LDRSH r4, [r1], #2 @x[24] 385 386 SMLABB r10, r6, r3, r10 @x[22] * h[22] 387 SMLABB r11, r9, r3, r11 @x[23] * h[22] 388 389 SMLABT r10, r9, r3, r10 @x[23] * h[23] 390 SMLABT r11, r4, r3, r11 @x[24] * h[23] 391 392 LDR r3, [r2], #4 @h[24], h[25] 393 LDRSH r6, [r1], #2 @x[25] 394 LDRSH r9, [r1], #2 @x[26] 395 396 SMLABB r10, r4, r3, r10 @x[24] * h[24] 397 SMLABB r11, r6, r3, r11 @x[25] * h[24] 398 399 SMLABT r10, r6, r3, r10 @x[25] * h[25] 400 SMLABT r11, r9, r3, r11 @x[26] * h[25] 401 402 LDR r3, [r2], #4 @h[26], h[27] 403 LDRSH r4, [r1], #2 @x[27] 404 LDRSH r6, [r1], #2 @x[28] 405 406 SMLABB r10, r9, r3, r10 @x[26] * h[26] 407 SMLABB r11, r4, r3, r11 @x[27] * h[26] 408 409 SMLABT r10, r4, r3, r10 @x[27] * h[27] 410 SMLABT r11, r6, r3, r11 @x[28] * h[27] 411 412 LDR r3, [r2], #4 @h[28], h[29] 413 LDRSH r9, [r1], #2 @x[29] 414 LDRSH r4, [r1], #2 @x[30] 415 416 SMLABB r10, r6, r3, r10 @x[28] * h[28] 417 SMLABB r11, r9, r3, r11 @x[29] * h[28] 418 419 SMLABT r10, r9, r3, r10 @x[29] * h[29] 420 SMLABT r11, r4, r3, r11 @x[30] * h[29] 421 422 LDR r3, [r2], #4 @h[30], h[31] 423 LDRSH r6, [r1], #2 @x[31] 424 LDRSH r9, [r1], #2 @x[32] 425 426 SMLABB r10, r4, r3, r10 @x[30] * h[30] 427 SMLABB r11, r6, r3, r11 @x[31] * h[30] 428 429 SMLABT r10, r6, r3, r10 @x[31] * h[31] 430 SMLABT r11, r9, r3, r11 @x[32] * h[31] 431 432 @SSAT r10, #32, r10, LSL #2 433 @SSAT r11, #32, r11, LSL #2 434 MOV r10, r10, LSL #1 435 MOV r11, r11, LSL #1 436 437 QADD r10, r10, r10 438 QADD r11, r11, r11 439 440 QADD r10, r10, r5 441 QADD r11, r11, r5 442 443 MOV r10, r10, ASR #16 444 MOV r11, r11, ASR #16 445 446 STRH r10, [r0], #2 447 STRH r11, [r0], #2 448 449 450pred_lt4_end: 451 LDMFD r13!, {r4 - r12, r15} 452 453Table: 454 .word inter4_2 455 @ENDFUNC 456 .END 457 458 459 460 461