Home | History | Annotate | Download | only in ARMV5E
      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 Syn_filt(
     18 @     Word16 a[],                           /* (i) Q12 : a[m+1] prediction coefficients           */
     19 @     Word16 x[],                           /* (i)     : input signal                             */
     20 @     Word16 y[],                           /* (o)     : output signal                            */
     21 @     Word16 mem[],                         /* (i/o)   : memory associated with this filtering.   */
     22 @)
     23 @***********************************************************************
     24 @ a[]    ---   r0
     25 @ x[]    ---   r1
     26 @ y[]    ---   r2
     27 @ mem[]  ---   r3
     28 @ m ---  16  lg --- 80  update --- 1
     29 
     30           .section  .text
     31 	  .global   Syn_filt_asm
     32           .extern   voAWB_Copy
     33 
     34 Syn_filt_asm:
     35 
     36           STMFD   	r13!, {r4 - r12, r14}
     37           SUB           r13, r13, #700                   @ y_buf[L_FRAME16k + M16k]
     38 
     39           MOV           r4, r3                           @ copy mem[] address
     40           MOV           r5, r13                          @ copy yy = y_buf address
     41 
     42           @ for(i = 0@ i < m@ i++)
     43           @{
     44           @    *yy++ = mem[i]@
     45           @}
     46 
     47           LDRH          r6,  [r4], #2
     48           LDRH          r7,  [r4], #2
     49           LDRH          r8,  [r4], #2
     50           LDRH          r9,  [r4], #2
     51           LDRH          r10, [r4], #2
     52           LDRH          r11, [r4], #2
     53           LDRH          r12, [r4], #2
     54           LDRH          r14, [r4], #2
     55 
     56           STRH          r6,  [r5], #2
     57           STRH          r7,  [r5], #2
     58           STRH          r8,  [r5], #2
     59           STRH          r9,  [r5], #2
     60           STRH          r10, [r5], #2
     61           STRH          r11, [r5], #2
     62           STRH          r12, [r5], #2
     63           STRH          r14, [r5], #2
     64 
     65           LDRH          r6,  [r4], #2
     66           LDRH          r7,  [r4], #2
     67           LDRH          r8,  [r4], #2
     68           LDRH          r9,  [r4], #2
     69           LDRH          r10, [r4], #2
     70           LDRH          r11, [r4], #2
     71           LDRH          r12, [r4], #2
     72           LDRH          r14, [r4], #2
     73 
     74           STRH          r6,  [r5], #2
     75           STRH          r7,  [r5], #2
     76           STRH          r8,  [r5], #2
     77           STRH          r9,  [r5], #2
     78           STRH          r10, [r5], #2
     79           STRH          r11, [r5], #2
     80           STRH          r12, [r5], #2
     81           STRH          r14, [r5], #2
     82 
     83           LDRSH         r5, [r0]                         @ load a[0]
     84           MOV           r8, #0                           @ i = 0
     85           MOV           r5, r5, ASR #1                   @ a0 = a[0] >> 1
     86           @MOV           r4, r13
     87           @ load all a[]
     88 
     89           LDR           r14, =0xffff
     90           LDRSH         r6, [r0, #2]                     @ load a[1]
     91           LDRSH         r7, [r0, #4]                     @ load a[2]
     92           LDRSH         r9, [r0, #6]                     @ load a[3]
     93           LDRSH         r11,[r0, #8]                     @ load a[4]
     94           AND           r6, r6, r14
     95           AND           r9, r9, r14
     96           ORR           r10, r6, r7, LSL #16             @ -a[2] -- -a[1]
     97           ORR           r12, r9, r11, LSL #16            @ -a[4] -- -a[3]
     98           STR           r10, [r13, #-4]
     99           STR           r12, [r13, #-8]
    100 
    101           LDRSH         r6, [r0, #10]                    @ load a[5]
    102           LDRSH         r7, [r0, #12]                    @ load a[6]
    103           LDRSH         r9, [r0, #14]                    @ load a[7]
    104           LDRSH         r11,[r0, #16]                    @ load a[8]
    105           AND           r6, r6, r14
    106           AND           r9, r9, r14
    107           ORR           r10, r6, r7, LSL #16             @ -a[6] -- -a[5]
    108           ORR           r12, r9, r11, LSL #16            @ -a[8] -- -a[7]
    109           STR           r10, [r13, #-12]
    110           STR           r12, [r13, #-16]
    111 
    112           LDRSH         r6, [r0, #18]                    @ load a[9]
    113           LDRSH         r7, [r0, #20]                    @ load a[10]
    114           LDRSH         r9, [r0, #22]                    @ load a[11]
    115           LDRSH         r11,[r0, #24]                    @ load a[12]
    116           AND           r6, r6, r14
    117           AND           r9, r9, r14
    118           ORR           r10, r6, r7, LSL #16             @ -a[10] -- -a[9]
    119           ORR           r12, r9, r11, LSL #16            @ -a[12] -- -a[11]
    120           STR           r10, [r13, #-20]
    121           STR           r12, [r13, #-24]
    122 
    123           LDRSH         r6, [r0, #26]                    @ load a[13]
    124           LDRSH         r7, [r0, #28]                    @ load a[14]
    125           LDRSH         r9, [r0, #30]                    @ load a[15]
    126           LDRSH         r11,[r0, #32]                    @ load a[16]
    127           AND           r6, r6, r14
    128           AND           r9, r9, r14
    129           ORR           r10, r6, r7, LSL #16             @ -a[14] -- -a[13]
    130           ORR           r12, r9, r11, LSL #16            @ -a[16] -- -a[15]
    131           STR           r10, [r13, #-28]
    132           STR           r12, [r13, #-32]
    133 
    134           ADD           r4, r13, #32
    135 LOOP:
    136           LDRSH         r6,  [r1], #2                    @ load x[i]
    137           ADD           r10, r4, r8, LSL #1              @ temp_p = yy + i
    138 
    139           MUL           r0, r5, r6                      @ L_tmp = x[i] * a0
    140           @ for(j = 1@ j <= m, j+=8)
    141           LDR           r7,  [r13, #-4]                  @ -a[2]  -a[1]
    142           LDRSH         r9,  [r10, #-2]                  @ *(temp_p - 1)
    143           LDRSH         r12, [r10, #-4]                  @ *(temp_p - 2)
    144 
    145 
    146           SMULBB        r14, r9, r7                      @ -a[1] * (*(temp_p -1))
    147 
    148           LDRSH         r6,  [r10, #-6]                  @ *(temp_p - 3)
    149 
    150           SMLABT        r14, r12, r7, r14                @ -a[2] * (*(temp_p - 2))
    151 
    152           LDR           r7,  [r13, #-8]                  @ -a[4] -a[3]
    153           LDRSH         r11, [r10, #-8]                  @ *(temp_p - 4)
    154 
    155           SMLABB        r14, r6, r7, r14                 @ -a[3] * (*(temp_p -3))
    156 
    157           LDRSH         r9,  [r10, #-10]                 @ *(temp_p - 5)
    158 
    159           SMLABT        r14, r11, r7, r14                @ -a[4] * (*(temp_p -4))
    160 
    161           LDR           r7,  [r13, #-12]                 @ -a[6]  -a[5]
    162           LDRSH         r12, [r10, #-12]                 @ *(temp_p - 6)
    163 
    164           SMLABB        r14, r9, r7, r14                 @ -a[5] * (*(temp_p -5))
    165 
    166           LDRSH         r6,  [r10, #-14]                 @ *(temp_p - 7)
    167 
    168           SMLABT        r14, r12, r7, r14                @ -a[6] * (*(temp_p - 6))
    169 
    170           LDR           r7,  [r13, #-16]                 @ -a[8] -a[7]
    171           LDRSH         r11, [r10, #-16]                 @ *(temp_p - 8)
    172 
    173           SMLABB        r14, r6, r7, r14                 @ -a[7] * (*(temp_p -7))
    174 
    175           LDRSH         r9,  [r10, #-18]                 @ *(temp_p - 9)
    176 
    177           SMLABT        r14, r11, r7, r14                @ -a[8] * (*(temp_p -8))
    178 
    179           LDR           r7,  [r13, #-20]                 @ -a[10]  -a[9]
    180           LDRSH         r12, [r10, #-20]                 @ *(temp_p - 10)
    181 
    182           SMLABB        r14, r9, r7, r14                 @ -a[9] * (*(temp_p -9))
    183 
    184           LDRSH         r6,  [r10, #-22]                 @ *(temp_p - 11)
    185 
    186           SMLABT        r14, r12, r7, r14                @ -a[10] * (*(temp_p - 10))
    187 
    188           LDR           r7,  [r13, #-24]                 @ -a[12] -a[11]
    189           LDRSH         r11, [r10, #-24]                 @ *(temp_p - 12)
    190 
    191           SMLABB        r14, r6, r7, r14                 @ -a[11] * (*(temp_p -11))
    192 
    193           LDRSH         r9,  [r10, #-26]                 @ *(temp_p - 13)
    194 
    195           SMLABT        r14, r11, r7, r14                @ -a[12] * (*(temp_p -12))
    196 
    197           LDR           r7,  [r13, #-28]                 @ -a[14] -a[13]
    198           LDRSH         r12, [r10, #-28]                 @ *(temp_p - 14)
    199 
    200           SMLABB        r14, r9, r7, r14                 @ -a[13] * (*(temp_p -13))
    201 
    202           LDRSH         r6,  [r10, #-30]                 @ *(temp_p - 15)
    203 
    204           SMLABT        r14, r12, r7, r14                @ -a[14] * (*(temp_p - 14))
    205 
    206           LDR           r7,  [r13, #-32]                 @ -a[16] -a[15]
    207           LDRSH         r11, [r10, #-32]                 @ *(temp_p - 16)
    208 
    209           SMLABB        r14, r6, r7, r14                 @ -a[15] * (*(temp_p -15))
    210 
    211           SMLABT        r14, r11, r7, r14                @ -a[16] * (*(temp_p -16))
    212 
    213           RSB           r14, r14, r0
    214 
    215           MOV           r7, r14, LSL #4                  @ L_tmp <<=4
    216           ADD           r8, r8, #1
    217           ADD           r14, r7, #0x8000
    218           MOV           r7, r14, ASR #16                 @ (L_tmp + 0x8000) >> 16
    219           CMP           r8, #80
    220           STRH          r7, [r10]                        @ yy[i]
    221           STRH          r7, [r2], #2                     @ y[i]
    222           BLT           LOOP
    223 
    224           @ update mem[]
    225           ADD           r5, r13, #160                    @ yy[64] address
    226           MOV           r1, r3
    227           MOV           r0, r5
    228           MOV           r2, #16
    229           BL            voAWB_Copy
    230 
    231 Syn_filt_asm_end:
    232 
    233           ADD           r13, r13, #700
    234           LDMFD   	r13!, {r4 - r12, r15}
    235           @ENDFUNC
    236           .END
    237 
    238 
    239