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