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 31Scale_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 50LOOP1: 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 66LOOP: 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 132Scale_sig_asm_end: 133 134 LDMFD r13!, {r4 - r12, r15} 135 @ENDFUNC 136 .end 137 138 139