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 @**********************************************************************/
     18 @void Filt_6k_7k(
     19 @     Word16 signal[],                      /* input:  signal                  */
     20 @     Word16 lg,                            /* input:  length of input         */
     21 @     Word16 mem[]                          /* in/out: memory (size=30)        */
     22 @)
     23 @******************************************************************
     24 @ r0    ---  signal[]
     25 @ r1    ---  lg
     26 @ r2    ---  mem[]
     27 
     28           .section  .text
     29           .global  Filt_6k_7k_asm
     30           .extern  voAWB_Copy
     31           .extern  fir_6k_7k
     32           .hidden  fir_6k_7k
     33 
     34 Filt_6k_7k_asm:
     35 
     36           STMFD   		r13!, {r4 - r12, r14}
     37           SUB    		r13, r13, #240              @ x[L_SUBFR16k + (L_FIR - 1)]
     38           MOV     		r8, r0                      @ copy signal[] address
     39           MOV     		r4, r1                      @ copy lg address
     40           MOV     		r5, r2                      @ copy mem[] address
     41 
     42           MOV     		r1, r13
     43           MOV     		r0, r2
     44           MOV     		r2, #30                     @ L_FIR - 1
     45           BL      		voAWB_Copy                   @ memcpy(x, mem, (L_FIR - 1)<<1)
     46 
     47           ADR    		r3, Lable1                  @ get fir_7k address
     48           LDR   		r10, [r3]
     49           ADD   		r10, r3
     50 
     51           MOV           	r14, #0
     52           MOV                   r3, r8                      @ change myMemCopy to Copy, due to Copy will change r3 content
     53           ADD     	    	r6, r13, #60                @ get x[L_FIR - 1] address
     54           MOV           	r7, r3                      @ get signal[i]
     55 LOOP1:
     56           LDRSH         	r8,  [r7], #2
     57           LDRSH         	r9,  [r7], #2
     58           MOV           	r8, r8, ASR #2
     59           MOV           	r9, r9, ASR #2
     60           LDRSH         	r11, [r7], #2
     61           LDRSH         	r12, [r7], #2
     62           MOV           	r11, r11, ASR #2
     63           MOV           	r12, r12, ASR #2
     64           STRH          	r8, [r6], #2
     65           STRH          	r9, [r6], #2
     66           STRH          	r11, [r6], #2
     67           STRH          	r12, [r6], #2
     68           LDRSH         	r8,  [r7], #2
     69           LDRSH         	r9,  [r7], #2
     70           MOV           	r8, r8, ASR #2
     71           MOV           	r9, r9, ASR #2
     72           LDRSH         	r11, [r7], #2
     73           LDRSH         	r12, [r7], #2
     74           MOV           	r11, r11, ASR #2
     75           MOV           	r12, r12, ASR #2
     76           STRH          	r8, [r6], #2
     77           STRH          	r9, [r6], #2
     78           STRH          	r11, [r6], #2
     79           STRH          	r12, [r6], #2
     80           ADD           	r14, r14, #8
     81           CMP           	r14, #80
     82           BLT           	LOOP1
     83 
     84 
     85           STR     		r5, [sp, #-4]               @ PUSH  r5 to stack
     86 
     87           @ not use registers: r4, r10, r12, r14, r5
     88           MOV     		r4, r13
     89           MOV     		r5, #0                      @ i = 0
     90 LOOP2:
     91           LDR           	r0, [r10]
     92 
     93           LDRSH  	        r1, [r4]                   @ load x[i]
     94           LDRSH   	        r2, [r4, #60]              @ load x[i + 30]
     95           LDRSH                 r6, [r4, #2]               @ load x[i + 1]
     96           LDRSH                 r7, [r4, #58]              @ load x[i + 29]
     97           ADD                   r1, r1, r2                 @ x[i] + x[i + 30]
     98           ADD                   r6, r6, r7                 @ x[i + 1] + x[i + 29]
     99           LDRSH                 r8, [r4, #4]               @ load x[i + 2]
    100           LDRSH                 r9, [r4, #56]              @ load x[i + 28]
    101 
    102           SMULBB                r14, r1, r0                @ (x[i] + x[i + 30]) * fir_7k[0]
    103           ADD                   r8, r8, r9                 @ x[i + 2] + x[i + 28]
    104           SMLABT                r14, r6, r0, r14           @ (x[i + 1] + x[i + 29]) * fir_7k[1]
    105 
    106           LDR                   r0, [r10, #4]
    107           LDRSH                 r1, [r4, #6]               @ load x[i+3]
    108           LDRSH                 r2, [r4, #54]              @ load x[i+27]
    109           LDRSH                 r6, [r4, #8]               @ load x[i+4]
    110           LDRSH                 r7, [r4, #52]              @ load x[i+26]
    111           ADD                   r1, r1, r2                 @ x[i+3] + x[i+27]
    112           ADD                   r6, r6, r7                 @ x[i+4] + x[i+26]
    113           SMLABB                r14, r8, r0, r14           @ (x[i + 2] + x[i + 28]) * fir_7k[2]
    114           LDRSH                 r8, [r4, #10]              @ load x[i+5]
    115           LDRSH                 r9, [r4, #50]              @ load x[i+25]
    116           SMLABT                r14, r1, r0, r14           @ (x[i+3] + x[i+27]) * fir_7k[3]
    117           ADD                   r8, r8, r9                 @ x[i+5] + x[i+25]
    118 
    119           LDR                   r0, [r10, #8]
    120           LDRSH                 r1, [r4, #12]              @ x[i+6]
    121           LDRSH                 r2, [r4, #48]              @ x[i+24]
    122           SMLABB                r14, r6, r0, r14           @ (x[i+4] + x[i+26]) * fir_7k[4]
    123           LDRSH                 r6, [r4, #14]              @ x[i+7]
    124           LDRSH                 r7, [r4, #46]              @ x[i+23]
    125           SMLABT                r14, r8, r0, r14           @ (x[i+5] + x[i+25]) * fir_7k[5]
    126           LDR                   r0, [r10, #12]
    127           ADD                   r1, r1, r2                 @ (x[i+6] + x[i+24])
    128           ADD                   r6, r6, r7                 @ (x[i+7] + x[i+23])
    129           SMLABB                r14, r1, r0, r14           @ (x[i+6] + x[i+24]) * fir_7k[6]
    130           LDRSH                 r8, [r4, #16]              @ x[i+8]
    131           LDRSH                 r9, [r4, #44]              @ x[i+22]
    132           SMLABT                r14, r6, r0, r14           @ (x[i+7] + x[i+23]) * fir_7k[7]
    133           LDR                   r0, [r10, #16]
    134           LDRSH                 r1, [r4, #18]              @ x[i+9]
    135           LDRSH                 r2, [r4, #42]              @ x[i+21]
    136           LDRSH                 r6, [r4, #20]              @ x[i+10]
    137           LDRSH                 r7, [r4, #40]              @ x[i+20]
    138           ADD                   r8, r8, r9                 @ (x[i+8] + x[i+22])
    139           ADD                   r1, r1, r2                 @ (x[i+9] + x[i+21])
    140           ADD                   r6, r6, r7                 @ (x[i+10] + x[i+20])
    141           SMLABB                r14, r8, r0, r14           @ (x[i+8] + x[i+22]) * fir_7k[8]
    142           LDRSH                 r8, [r4, #22]              @ x[i+11]
    143           LDRSH                 r9, [r4, #38]              @ x[i+19]
    144           SMLABT                r14, r1, r0, r14           @ (x[i+9] + x[i+21]) * fir_7k[9]
    145           LDR                   r0, [r10, #20]
    146           LDRSH                 r1, [r4, #24]              @ x[i+12]
    147           LDRSH                 r2, [r4, #36]              @ x[i+18]
    148           SMLABB                r14, r6, r0, r14           @ (x[i+10] + x[i+20]) * fir_7k[10]
    149           LDRSH                 r6, [r4, #26]              @ x[i+13]
    150           ADD                   r8, r8, r9                 @ (x[i+11] + x[i+19])
    151           LDRSH                 r7, [r4, #34]              @ x[i+17]
    152           SMLABT                r14, r8, r0, r14           @ (x[i+11] + x[i+19]) * fir_7k[11]
    153           LDR                   r0, [r10, #24]
    154           ADD                   r1, r1, r2                 @ x[i+12] + x[i+18]
    155           LDRSH                 r8, [r4, #28]              @ x[i+14]
    156           SMLABB                r14, r1, r0, r14           @ (x[i+12] + x[i+18]) * fir_7k[12]
    157           ADD                   r6, r6, r7                 @ (x[i+13] + x[i+17])
    158           LDRSH                 r9, [r4, #32]              @ x[i+16]
    159           SMLABT                r14, r6, r0, r14           @ (x[i+13] + x[i+17]) * fir_7k[13]
    160           LDR                   r0, [r10, #28]
    161           ADD                   r8, r8, r9                 @ (x[i+14] + x[i+16])
    162           LDRSH                 r1, [r4, #30]              @ x[i+15]
    163           SMLABB                r14, r8, r0, r14           @ (x[i+14] + x[i+16]) * fir_7k[14]
    164           SMLABT                r14, r1, r0, r14           @ x[i+15] * fir_7k[15]
    165 
    166           ADD     		r5, r5, #1
    167           ADD     		r14, r14, #0x4000
    168           ADD     		r4, r4, #2
    169           MOV     		r1, r14, ASR #15
    170           CMP     		r5, #80
    171           STRH    		r1, [r3], #2               @signal[i] = (L_tmp + 0x4000) >> 15
    172           BLT     		LOOP2
    173 
    174           LDR     		r1, [sp, #-4]               @mem address
    175           ADD     		r0, r13, #160               @x + lg
    176           MOV     		r2, #30
    177           BL      		voAWB_Copy
    178 
    179 Filt_6k_7k_end:
    180           ADD     		r13, r13, #240
    181           LDMFD   		r13!, {r4 - r12, r15}
    182 
    183 Lable1:
    184           .word   		fir_6k_7k-Lable1
    185           @ENDFUNC
    186           .END
    187 
    188 
    189