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