Home | History | Annotate | Download | only in ARMV7
      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 Scale_sig(
     19 @               Word16 x[],                           /* (i/o) : signal to scale               */
     20 @               Word16 lg,                            /* (i)   : size of x[]                   */
     21 @               Word16 exp                            /* (i)   : exponent: x = round(x << exp) */
     22 @)
     23 @***********************************************************************
     24 @  x[]   ---  r0
     25 @  lg    ---  r1
     26 @  exp   ---  r2
     27 
     28           .section  .text
     29           .global   Scale_sig_opt
     30 
     31 Scale_sig_opt:
     32 
     33           STMFD   	r13!, {r4 - r12, r14}
     34           MOV           r4, #4
     35           VMOV.S32      Q15, #0x8000
     36           VDUP.S32      Q14, r2
     37           MOV           r5, r0                          @ copy x[] address
     38           CMP           r1, #64
     39           MOVEQ         r4, #1
     40           BEQ           LOOP
     41 	  CMP           r1, #128
     42 	  MOVEQ         r4, #2
     43 	  BEQ           LOOP
     44           CMP           r1, #256
     45           BEQ           LOOP
     46 	  CMP           r1, #80
     47 	  MOVEQ         r4, #1
     48 	  BEQ           LOOP1
     49 
     50 LOOP1:
     51           VLD1.S16      {Q0, Q1}, [r5]!                 @load 16 Word16 x[]
     52           VSHLL.S16     Q10, D0, #16
     53           VSHLL.S16     Q11, D1, #16
     54           VSHLL.S16     Q12, D2, #16
     55           VSHLL.S16     Q13, D3, #16
     56           VSHL.S32      Q10, Q10, Q14
     57           VSHL.S32      Q11, Q11, Q14
     58           VSHL.S32      Q12, Q12, Q14
     59           VSHL.S32      Q13, Q13, Q14
     60           VADDHN.S32    D16, Q10, Q15
     61           VADDHN.S32    D17, Q11, Q15
     62           VADDHN.S32    D18, Q12, Q15
     63           VADDHN.S32    D19, Q13, Q15
     64           VST1.S16      {Q8, Q9}, [r0]!                 @store 16 Word16 x[]
     65 
     66 LOOP:
     67           VLD1.S16      {Q0, Q1}, [r5]!                 @load 16 Word16 x[]
     68           VLD1.S16      {Q2, Q3}, [r5]!                 @load 16 Word16 x[]
     69           VLD1.S16      {Q4, Q5}, [r5]!                 @load 16 Word16 x[]
     70           VLD1.S16      {Q6, Q7}, [r5]!                 @load 16 Word16 x[]
     71 
     72           VSHLL.S16     Q8, D0, #16
     73           VSHLL.S16     Q9, D1, #16
     74           VSHLL.S16     Q10, D2, #16
     75           VSHLL.S16     Q11, D3, #16
     76           VSHL.S32      Q8, Q8, Q14
     77           VSHL.S32      Q9, Q9, Q14
     78           VSHL.S32      Q10, Q10, Q14
     79           VSHL.S32      Q11, Q11, Q14
     80           VADDHN.S32    D16, Q8, Q15
     81           VADDHN.S32    D17, Q9, Q15
     82           VADDHN.S32    D18, Q10, Q15
     83           VADDHN.S32    D19, Q11, Q15
     84           VST1.S16      {Q8, Q9}, [r0]!                 @store 16 Word16 x[]
     85 
     86 
     87           VSHLL.S16     Q12, D4, #16
     88           VSHLL.S16     Q13, D5, #16
     89           VSHLL.S16     Q10, D6, #16
     90           VSHLL.S16     Q11, D7, #16
     91           VSHL.S32      Q12, Q12, Q14
     92           VSHL.S32      Q13, Q13, Q14
     93           VSHL.S32      Q10, Q10, Q14
     94           VSHL.S32      Q11, Q11, Q14
     95           VADDHN.S32    D16, Q12, Q15
     96           VADDHN.S32    D17, Q13, Q15
     97           VADDHN.S32    D18, Q10, Q15
     98           VADDHN.S32    D19, Q11, Q15
     99           VST1.S16      {Q8, Q9}, [r0]!                 @store 16 Word16 x[]
    100 
    101           VSHLL.S16     Q10, D8, #16
    102           VSHLL.S16     Q11, D9, #16
    103           VSHLL.S16     Q12, D10, #16
    104           VSHLL.S16     Q13, D11, #16
    105           VSHL.S32      Q10, Q10, Q14
    106           VSHL.S32      Q11, Q11, Q14
    107           VSHL.S32      Q12, Q12, Q14
    108           VSHL.S32      Q13, Q13, Q14
    109           VADDHN.S32    D16, Q10, Q15
    110           VADDHN.S32    D17, Q11, Q15
    111           VADDHN.S32    D18, Q12, Q15
    112           VADDHN.S32    D19, Q13, Q15
    113           VST1.S16      {Q8, Q9}, [r0]!                 @store 16 Word16 x[]
    114 
    115           VSHLL.S16     Q10, D12, #16
    116           VSHLL.S16     Q11, D13, #16
    117           VSHLL.S16     Q12, D14, #16
    118           VSHLL.S16     Q13, D15, #16
    119           VSHL.S32      Q10, Q10, Q14
    120           VSHL.S32      Q11, Q11, Q14
    121           VSHL.S32      Q12, Q12, Q14
    122           VSHL.S32      Q13, Q13, Q14
    123           VADDHN.S32    D16, Q10, Q15
    124           VADDHN.S32    D17, Q11, Q15
    125           VADDHN.S32    D18, Q12, Q15
    126           VADDHN.S32    D19, Q13, Q15
    127           VST1.S16      {Q8, Q9}, [r0]!                 @store 16 Word16 x[]
    128           SUBS          r4, r4, #1
    129           BGT           LOOP
    130 
    131 
    132 Scale_sig_asm_end:
    133 
    134           LDMFD   	r13!, {r4 - r12, r15}
    135           @ENDFUNC
    136           .END
    137 
    138 
    139