pred_lt4_1_neon.s revision e17bb5cafdbc6089716d8e8c5afbb00f207a59bb
1e1d666b632608a2f708cb3df06c796e16d5d1717Eric Rowe@/* 2e1d666b632608a2f708cb3df06c796e16d5d1717Eric Rowe@ ** Copyright 2003-2010, VisualOn, Inc. 3e1d666b632608a2f708cb3df06c796e16d5d1717Eric Rowe@ ** 4e1d666b632608a2f708cb3df06c796e16d5d1717Eric Rowe@ ** Licensed under the Apache License, Version 2.0 (the "License"); 5e1d666b632608a2f708cb3df06c796e16d5d1717Eric Rowe@ ** you may not use this file except in compliance with the License. 6e1d666b632608a2f708cb3df06c796e16d5d1717Eric Rowe@ ** You may obtain a copy of the License at 7e1d666b632608a2f708cb3df06c796e16d5d1717Eric Rowe@ ** 8e1d666b632608a2f708cb3df06c796e16d5d1717Eric Rowe@ ** http://www.apache.org/licenses/LICENSE-2.0 9e1d666b632608a2f708cb3df06c796e16d5d1717Eric Rowe@ ** 10e1d666b632608a2f708cb3df06c796e16d5d1717Eric Rowe@ ** Unless required by applicable law or agreed to in writing, software 11e1d666b632608a2f708cb3df06c796e16d5d1717Eric Rowe@ ** distributed under the License is distributed on an "AS IS" BASIS, 12e1d666b632608a2f708cb3df06c796e16d5d1717Eric Rowe@ ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13e1d666b632608a2f708cb3df06c796e16d5d1717Eric Rowe@ ** See the License for the specific language governing permissions and 14e1d666b632608a2f708cb3df06c796e16d5d1717Eric Rowe@ ** limitations under the License. 15e1d666b632608a2f708cb3df06c796e16d5d1717Eric Rowe@ */ 16e1d666b632608a2f708cb3df06c796e16d5d1717Eric Rowe@ 17e1d666b632608a2f708cb3df06c796e16d5d1717Eric Rowe@void Pred_lt4( 18e1d666b632608a2f708cb3df06c796e16d5d1717Eric Rowe@ Word16 exc[], /* in/out: excitation buffer */ 19e1d666b632608a2f708cb3df06c796e16d5d1717Eric Rowe@ Word16 T0, /* input : integer pitch lag */ 20e1d666b632608a2f708cb3df06c796e16d5d1717Eric Rowe@ Word16 frac, /* input : fraction of lag */ 21e1d666b632608a2f708cb3df06c796e16d5d1717Eric Rowe@ Word16 L_subfr /* input : subframe size */ 22e1d666b632608a2f708cb3df06c796e16d5d1717Eric Rowe@) 23e1d666b632608a2f708cb3df06c796e16d5d1717Eric Rowe@*********************************************************************** 24826af6266c79d76b81fe850b9cd3d351597e4adbEric Rowe@ r0 --- exc[] 25e1d666b632608a2f708cb3df06c796e16d5d1717Eric Rowe@ r1 --- T0 267e4d0c0982cb28a86bf3d45c3b316ec7eab1e017Eric Rowe@ r2 --- frac 277e4d0c0982cb28a86bf3d45c3b316ec7eab1e017Eric Rowe@ r3 --- L_subfr 287e4d0c0982cb28a86bf3d45c3b316ec7eab1e017Eric Rowe 297e4d0c0982cb28a86bf3d45c3b316ec7eab1e017Eric Rowe .section .text 307e4d0c0982cb28a86bf3d45c3b316ec7eab1e017Eric Rowe .global pred_lt4_asm 317e4d0c0982cb28a86bf3d45c3b316ec7eab1e017Eric Rowe .extern inter4_2 327e4d0c0982cb28a86bf3d45c3b316ec7eab1e017Eric Rowe .hidden inter4_2 337e4d0c0982cb28a86bf3d45c3b316ec7eab1e017Eric Rowe 347e4d0c0982cb28a86bf3d45c3b316ec7eab1e017Eric Rowepred_lt4_asm: 357e4d0c0982cb28a86bf3d45c3b316ec7eab1e017Eric Rowe 367e4d0c0982cb28a86bf3d45c3b316ec7eab1e017Eric Rowe STMFD r13!, {r4 - r12, r14} 377e4d0c0982cb28a86bf3d45c3b316ec7eab1e017Eric Rowe SUB r4, r0, r1, LSL #1 @ x = exc - T0 387e4d0c0982cb28a86bf3d45c3b316ec7eab1e017Eric Rowe RSB r2, r2, #0 @ frac = - frac 397e4d0c0982cb28a86bf3d45c3b316ec7eab1e017Eric Rowe SUB r4, r4, #30 @ x -= L_INTERPOL2 - 1 407e4d0c0982cb28a86bf3d45c3b316ec7eab1e017Eric Rowe CMP r2, #0 417e4d0c0982cb28a86bf3d45c3b316ec7eab1e017Eric Rowe ADDLT r2, r2, #4 @ frac += UP_SAMP 42835d8ee61ecddcd3fdc0aadf500d05b914ca375fEric Rowe SUBLT r4, r4, #2 @ x-- 437e4d0c0982cb28a86bf3d45c3b316ec7eab1e017Eric Rowe 447e4d0c0982cb28a86bf3d45c3b316ec7eab1e017Eric Rowe ADR r8, Lable1 457e4d0c0982cb28a86bf3d45c3b316ec7eab1e017Eric Rowe LDR r11, [r8] 467e4d0c0982cb28a86bf3d45c3b316ec7eab1e017Eric Rowe ADD r11, r8 477e4d0c0982cb28a86bf3d45c3b316ec7eab1e017Eric Rowe RSB r2, r2, #3 @ k = UP_SAMP - 1 - frac 487e4d0c0982cb28a86bf3d45c3b316ec7eab1e017Eric Rowe MOV r8, #0 @ j = 0 497e4d0c0982cb28a86bf3d45c3b316ec7eab1e017Eric Rowe ADD r11, r11, r2, LSL #6 @ get inter4_2[k][] 507af75afb2c8608dbe73509036eefd3281d646a5fEric Rowe 517e4d0c0982cb28a86bf3d45c3b316ec7eab1e017Eric Rowe VLD1.S16 {Q0, Q1}, [r11]! 527e4d0c0982cb28a86bf3d45c3b316ec7eab1e017Eric Rowe VLD1.S16 {Q2, Q3}, [r11]! 537e4d0c0982cb28a86bf3d45c3b316ec7eab1e017Eric Rowe 54e1d666b632608a2f708cb3df06c796e16d5d1717Eric Rowe MOV r6, #0x8000 55826af6266c79d76b81fe850b9cd3d351597e4adbEric Rowe 56826af6266c79d76b81fe850b9cd3d351597e4adbEric Rowe VLD1.S16 {Q4, Q5}, [r4]! @load 16 x[] 57e1d666b632608a2f708cb3df06c796e16d5d1717Eric Rowe VLD1.S16 {Q6, Q7}, [r4]! @load 16 x[] 58e1d666b632608a2f708cb3df06c796e16d5d1717Eric Rowe 59e1d666b632608a2f708cb3df06c796e16d5d1717Eric RoweLOOP: 607e4d0c0982cb28a86bf3d45c3b316ec7eab1e017Eric Rowe VQDMULL.S16 Q15, D8, D0 61826af6266c79d76b81fe850b9cd3d351597e4adbEric Rowe VQDMLAL.S16 Q15, D9, D1 62826af6266c79d76b81fe850b9cd3d351597e4adbEric Rowe VQDMLAL.S16 Q15, D10, D2 63826af6266c79d76b81fe850b9cd3d351597e4adbEric Rowe VQDMLAL.S16 Q15, D11, D3 647e4d0c0982cb28a86bf3d45c3b316ec7eab1e017Eric Rowe 657e4d0c0982cb28a86bf3d45c3b316ec7eab1e017Eric Rowe VQDMLAL.S16 Q15, D12, D4 66835d8ee61ecddcd3fdc0aadf500d05b914ca375fEric Rowe VQDMLAL.S16 Q15, D13, D5 67826af6266c79d76b81fe850b9cd3d351597e4adbEric Rowe VQDMLAL.S16 Q15, D14, D6 682b1fb45fabcb6f6e6edfd1a7a8e394928a27afe8Eric Rowe VQDMLAL.S16 Q15, D15, D7 692b1fb45fabcb6f6e6edfd1a7a8e394928a27afe8Eric Rowe 702b1fb45fabcb6f6e6edfd1a7a8e394928a27afe8Eric Rowe LDRSH r12, [r4], #2 71e1d666b632608a2f708cb3df06c796e16d5d1717Eric Rowe 72e1d666b632608a2f708cb3df06c796e16d5d1717Eric Rowe VEXT.S16 D8, D8, D9, #1 73e1d666b632608a2f708cb3df06c796e16d5d1717Eric Rowe VEXT.S16 D9, D9, D10, #1 74e1d666b632608a2f708cb3df06c796e16d5d1717Eric Rowe VEXT.S16 D10, D10, D11, #1 75e1d666b632608a2f708cb3df06c796e16d5d1717Eric Rowe VEXT.S16 D11, D11, D12, #1 76e1d666b632608a2f708cb3df06c796e16d5d1717Eric Rowe VDUP.S16 D24, r12 77e1d666b632608a2f708cb3df06c796e16d5d1717Eric Rowe VEXT.S16 D12, D12, D13, #1 78e1d666b632608a2f708cb3df06c796e16d5d1717Eric Rowe VEXT.S16 D13, D13, D14, #1 79e1d666b632608a2f708cb3df06c796e16d5d1717Eric Rowe 80e1d666b632608a2f708cb3df06c796e16d5d1717Eric Rowe VQADD.S32 D30, D30, D31 81e1d666b632608a2f708cb3df06c796e16d5d1717Eric Rowe MOV r11, #0x8000 82e1d666b632608a2f708cb3df06c796e16d5d1717Eric Rowe VPADD.S32 D30, D30, D30 83e1d666b632608a2f708cb3df06c796e16d5d1717Eric Rowe ADD r8, r8, #1 84e1d666b632608a2f708cb3df06c796e16d5d1717Eric Rowe VMOV.S32 r12, D30[0] 85e1d666b632608a2f708cb3df06c796e16d5d1717Eric Rowe VEXT.S16 D14, D14, D15, #1 86e1d666b632608a2f708cb3df06c796e16d5d1717Eric Rowe 87e1d666b632608a2f708cb3df06c796e16d5d1717Eric Rowe QADD r1, r12, r12 @ L_sum = (L_sum << 2) 88e1d666b632608a2f708cb3df06c796e16d5d1717Eric Rowe VEXT.S16 D15, D15, D24, #1 89e1d666b632608a2f708cb3df06c796e16d5d1717Eric Rowe QADD r5, r1, r6 90e1d666b632608a2f708cb3df06c796e16d5d1717Eric Rowe MOV r1, r5, ASR #16 91e1d666b632608a2f708cb3df06c796e16d5d1717Eric Rowe CMP r8, r3 92e1d666b632608a2f708cb3df06c796e16d5d1717Eric Rowe STRH r1, [r0], #2 @ exc[j] = (L_sum + 0x8000) >> 16 93e1d666b632608a2f708cb3df06c796e16d5d1717Eric Rowe BLT LOOP 94e1d666b632608a2f708cb3df06c796e16d5d1717Eric Rowe 95e1d666b632608a2f708cb3df06c796e16d5d1717Eric Rowepred_lt4_end: 96e1d666b632608a2f708cb3df06c796e16d5d1717Eric Rowe 97e1d666b632608a2f708cb3df06c796e16d5d1717Eric Rowe LDMFD r13!, {r4 - r12, r15} 98e1d666b632608a2f708cb3df06c796e16d5d1717Eric Rowe 99e1d666b632608a2f708cb3df06c796e16d5d1717Eric RoweLable1: 100e1d666b632608a2f708cb3df06c796e16d5d1717Eric Rowe .word inter4_2-Lable1 101e1d666b632608a2f708cb3df06c796e16d5d1717Eric Rowe @ENDFUNC 102e1d666b632608a2f708cb3df06c796e16d5d1717Eric Rowe .END 103e1d666b632608a2f708cb3df06c796e16d5d1717Eric Rowe 104e1d666b632608a2f708cb3df06c796e16d5d1717Eric Rowe