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