pred_lt4_1_neon.s revision e2e838afcf03e603a41a0455846eaf9614537c16
1e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard@/* 2e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard@ ** Copyright 2003-2010, VisualOn, Inc. 3e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard@ ** 4e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard@ ** Licensed under the Apache License, Version 2.0 (the "License"); 5e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard@ ** you may not use this file except in compliance with the License. 6e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard@ ** You may obtain a copy of the License at 7e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard@ ** 8e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard@ ** http://www.apache.org/licenses/LICENSE-2.0 9e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard@ ** 10e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard@ ** Unless required by applicable law or agreed to in writing, software 11e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard@ ** distributed under the License is distributed on an "AS IS" BASIS, 12e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard@ ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard@ ** See the License for the specific language governing permissions and 14e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard@ ** limitations under the License. 15e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard@ */ 16e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard@ 17e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard@void Pred_lt4( 18e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard@ Word16 exc[], /* in/out: excitation buffer */ 19e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard@ Word16 T0, /* input : integer pitch lag */ 20e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard@ Word16 frac, /* input : fraction of lag */ 21e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard@ Word16 L_subfr /* input : subframe size */ 22e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard@) 23e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard@*********************************************************************** 24e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard@ r0 --- exc[] 25e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard@ r1 --- T0 26e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard@ r2 --- frac 27e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard@ r3 --- L_subfr 28e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard 29e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard .section .text 30e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard .global pred_lt4_asm 31e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard .extern inter4_2 32e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard 33e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgardpred_lt4_asm: 34e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard 35e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard STMFD r13!, {r4 - r12, r14} 36e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard SUB r4, r0, r1, LSL #1 @ x = exc - T0 37e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard RSB r2, r2, #0 @ frac = - frac 38e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard SUB r4, r4, #30 @ x -= L_INTERPOL2 - 1 39e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard CMP r2, #0 40e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard ADDLT r2, r2, #4 @ frac += UP_SAMP 41e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard SUBLT r4, r4, #2 @ x-- 42e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard 43e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard LDR r11, Lable1 44e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard RSB r2, r2, #3 @ k = UP_SAMP - 1 - frac 45e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard MOV r8, #0 @ j = 0 46e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard ADD r11, r11, r2, LSL #6 @ get inter4_2[k][] 47e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard 48e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard VLD1.S16 {Q0, Q1}, [r11]! 49e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard VLD1.S16 {Q2, Q3}, [r11]! 50e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard 51e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard MOV r6, #0x8000 52e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard 53e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard VLD1.S16 {Q4, Q5}, [r4]! @load 16 x[] 54e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard VLD1.S16 {Q6, Q7}, [r4]! @load 16 x[] 55e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard 56e2e838afcf03e603a41a0455846eaf9614537c16Mans RullgardLOOP: 57e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard VQDMULL.S16 Q15, D8, D0 58e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard VQDMLAL.S16 Q15, D9, D1 59e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard VQDMLAL.S16 Q15, D10, D2 60e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard VQDMLAL.S16 Q15, D11, D3 61e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard 62e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard VQDMLAL.S16 Q15, D12, D4 63e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard VQDMLAL.S16 Q15, D13, D5 64e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard VQDMLAL.S16 Q15, D14, D6 65e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard VQDMLAL.S16 Q15, D15, D7 66e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard 67e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard LDRSH r12, [r4], #2 68e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard 69e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard VEXT.S16 D8, D8, D9, #1 70e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard VEXT.S16 D9, D9, D10, #1 71e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard VEXT.S16 D10, D10, D11, #1 72e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard VEXT.S16 D11, D11, D12, #1 73e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard VDUP.S16 D24, r12 74e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard VEXT.S16 D12, D12, D13, #1 75e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard VEXT.S16 D13, D13, D14, #1 76e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard 77e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard VQADD.S32 D30, D30, D31 78e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard MOV r11, #0x8000 79e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard VPADD.S32 D30, D30, D30 80e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard ADD r8, r8, #1 81e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard VMOV.S32 r12, D30[0] 82e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard VEXT.S16 D14, D14, D15, #1 83e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard 84e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard QADD r1, r12, r12 @ L_sum = (L_sum << 2) 85e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard VEXT.S16 D15, D15, D24, #1 86e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard QADD r5, r1, r6 87e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard MOV r1, r5, ASR #16 88e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard CMP r8, r3 89e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard STRH r1, [r0], #2 @ exc[j] = (L_sum + 0x8000) >> 16 90e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard BLT LOOP 91e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard 92e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgardpred_lt4_end: 93e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard 94e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard LDMFD r13!, {r4 - r12, r15} 95e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard 96e2e838afcf03e603a41a0455846eaf9614537c16Mans RullgardLable1: 97e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard .word inter4_2 98e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard @ENDFUNC 99e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard .END 100e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard 101