@/* @ ** 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