@/* | |
@ ** 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 Pred_lt4( | |
@ Word16 exc[], /* in/out: excitation buffer */ | |
@ Word16 T0, /* input : integer pitch lag */ | |
@ Word16 frac, /* input : fraction of lag */ | |
@ Word16 L_subfr /* input : subframe size */ | |
@) | |
@*********************************************************************** | |
@ r0 --- exc[] | |
@ r1 --- T0 | |
@ r2 --- frac | |
@ r3 --- L_subfr | |
.section .text | |
.global pred_lt4_asm | |
.extern inter4_2 | |
pred_lt4_asm: | |
STMFD r13!, {r4 - r12, r14} | |
SUB r4, r0, r1, LSL #1 @ x = exc - T0 | |
RSB r2, r2, #0 @ frac = - frac | |
SUB r4, r4, #30 @ x -= L_INTERPOL2 - 1 | |
CMP r2, #0 | |
ADDLT r2, r2, #4 @ frac += UP_SAMP | |
SUBLT r4, r4, #2 @ x-- | |
LDR r11, Lable1 | |
RSB r2, r2, #3 @ k = UP_SAMP - 1 - frac | |
MOV r8, #0 @ j = 0 | |
ADD r11, r11, r2, LSL #6 @ get inter4_2[k][] | |
VLD1.S16 {Q0, Q1}, [r11]! | |
VLD1.S16 {Q2, Q3}, [r11]! | |
MOV r6, #0x8000 | |
VLD1.S16 {Q4, Q5}, [r4]! @load 16 x[] | |
VLD1.S16 {Q6, Q7}, [r4]! @load 16 x[] | |
LOOP: | |
VQDMULL.S16 Q15, D8, D0 | |
VQDMLAL.S16 Q15, D9, D1 | |
VQDMLAL.S16 Q15, D10, D2 | |
VQDMLAL.S16 Q15, D11, D3 | |
VQDMLAL.S16 Q15, D12, D4 | |
VQDMLAL.S16 Q15, D13, D5 | |
VQDMLAL.S16 Q15, D14, D6 | |
VQDMLAL.S16 Q15, D15, D7 | |
LDRSH r12, [r4], #2 | |
VEXT.S16 D8, D8, D9, #1 | |
VEXT.S16 D9, D9, D10, #1 | |
VEXT.S16 D10, D10, D11, #1 | |
VEXT.S16 D11, D11, D12, #1 | |
VDUP.S16 D24, r12 | |
VEXT.S16 D12, D12, D13, #1 | |
VEXT.S16 D13, D13, D14, #1 | |
VQADD.S32 D30, D30, D31 | |
MOV r11, #0x8000 | |
VPADD.S32 D30, D30, D30 | |
ADD r8, r8, #1 | |
VMOV.S32 r12, D30[0] | |
VEXT.S16 D14, D14, D15, #1 | |
QADD r1, r12, r12 @ L_sum = (L_sum << 2) | |
VEXT.S16 D15, D15, D24, #1 | |
QADD r5, r1, r6 | |
MOV r1, r5, ASR #16 | |
CMP r8, r3 | |
STRH r1, [r0], #2 @ exc[j] = (L_sum + 0x8000) >> 16 | |
BLT LOOP | |
pred_lt4_end: | |
LDMFD r13!, {r4 - r12, r15} | |
Lable1: | |
.word inter4_2 | |
@ENDFUNC | |
.END | |