blob: 89c057274f5f5a23d344e308d49e4f5cbf37fb8f [file] [log] [blame]
@/*
@ ** Copyright 2003-2010, VisualOn, Inc.
@ **
@ ** Licensed under the Apache License, Version 2.0 (the "License");
@ ** you may not use this file except in compliance with the License.
@ ** You may obtain a copy of the License at
@ **
@ ** http://www.apache.org/licenses/LICENSE-2.0
@ **
@ ** Unless required by applicable law or agreed to in writing, software
@ ** distributed under the License is distributed on an "AS IS" BASIS,
@ ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
@ ** See the License for the specific language governing permissions and
@ ** limitations under the License.
@ */
@
@**********************************************************************/
@void Scale_sig(
@ Word16 x[], /* (i/o) : signal to scale */
@ Word16 lg, /* (i) : size of x[] */
@ Word16 exp /* (i) : exponent: x = round(x << exp) */
@)
@***********************************************************************
@ x[] --- r0
@ lg --- r1
@ exp --- r2
.section .text
.global Scale_sig_opt
Scale_sig_opt:
STMFD r13!, {r4 - r12, r14}
MOV r4, #4
VMOV.S32 Q15, #0x8000
VDUP.S32 Q14, r2
MOV r5, r0 @ copy x[] address
CMP r1, #64
MOVEQ r4, #1
BEQ LOOP
CMP r1, #128
MOVEQ r4, #2
BEQ LOOP
CMP r1, #256
BEQ LOOP
CMP r1, #80
MOVEQ r4, #1
BEQ LOOP1
LOOP1:
VLD1.S16 {Q0, Q1}, [r5]! @load 16 Word16 x[]
VSHLL.S16 Q10, D0, #16
VSHLL.S16 Q11, D1, #16
VSHLL.S16 Q12, D2, #16
VSHLL.S16 Q13, D3, #16
VSHL.S32 Q10, Q10, Q14
VSHL.S32 Q11, Q11, Q14
VSHL.S32 Q12, Q12, Q14
VSHL.S32 Q13, Q13, Q14
VADDHN.S32 D16, Q10, Q15
VADDHN.S32 D17, Q11, Q15
VADDHN.S32 D18, Q12, Q15
VADDHN.S32 D19, Q13, Q15
VST1.S16 {Q8, Q9}, [r0]! @store 16 Word16 x[]
LOOP:
VLD1.S16 {Q0, Q1}, [r5]! @load 16 Word16 x[]
VLD1.S16 {Q2, Q3}, [r5]! @load 16 Word16 x[]
VLD1.S16 {Q4, Q5}, [r5]! @load 16 Word16 x[]
VLD1.S16 {Q6, Q7}, [r5]! @load 16 Word16 x[]
VSHLL.S16 Q8, D0, #16
VSHLL.S16 Q9, D1, #16
VSHLL.S16 Q10, D2, #16
VSHLL.S16 Q11, D3, #16
VSHL.S32 Q8, Q8, Q14
VSHL.S32 Q9, Q9, Q14
VSHL.S32 Q10, Q10, Q14
VSHL.S32 Q11, Q11, Q14
VADDHN.S32 D16, Q8, Q15
VADDHN.S32 D17, Q9, Q15
VADDHN.S32 D18, Q10, Q15
VADDHN.S32 D19, Q11, Q15
VST1.S16 {Q8, Q9}, [r0]! @store 16 Word16 x[]
VSHLL.S16 Q12, D4, #16
VSHLL.S16 Q13, D5, #16
VSHLL.S16 Q10, D6, #16
VSHLL.S16 Q11, D7, #16
VSHL.S32 Q12, Q12, Q14
VSHL.S32 Q13, Q13, Q14
VSHL.S32 Q10, Q10, Q14
VSHL.S32 Q11, Q11, Q14
VADDHN.S32 D16, Q12, Q15
VADDHN.S32 D17, Q13, Q15
VADDHN.S32 D18, Q10, Q15
VADDHN.S32 D19, Q11, Q15
VST1.S16 {Q8, Q9}, [r0]! @store 16 Word16 x[]
VSHLL.S16 Q10, D8, #16
VSHLL.S16 Q11, D9, #16
VSHLL.S16 Q12, D10, #16
VSHLL.S16 Q13, D11, #16
VSHL.S32 Q10, Q10, Q14
VSHL.S32 Q11, Q11, Q14
VSHL.S32 Q12, Q12, Q14
VSHL.S32 Q13, Q13, Q14
VADDHN.S32 D16, Q10, Q15
VADDHN.S32 D17, Q11, Q15
VADDHN.S32 D18, Q12, Q15
VADDHN.S32 D19, Q13, Q15
VST1.S16 {Q8, Q9}, [r0]! @store 16 Word16 x[]
VSHLL.S16 Q10, D12, #16
VSHLL.S16 Q11, D13, #16
VSHLL.S16 Q12, D14, #16
VSHLL.S16 Q13, D15, #16
VSHL.S32 Q10, Q10, Q14
VSHL.S32 Q11, Q11, Q14
VSHL.S32 Q12, Q12, Q14
VSHL.S32 Q13, Q13, Q14
VADDHN.S32 D16, Q10, Q15
VADDHN.S32 D17, Q11, Q15
VADDHN.S32 D18, Q12, Q15
VADDHN.S32 D19, Q13, Q15
VST1.S16 {Q8, Q9}, [r0]! @store 16 Word16 x[]
SUBS r4, r4, #1
BGT LOOP
Scale_sig_asm_end:
LDMFD r13!, {r4 - r12, r15}
@ENDFUNC
.end