blob: e8802f5bc13501ff16a89474918a55caa425d6f5 [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) */
@ )
@
@r0 --- x[]
@r1 --- lg
@r2 --- exp
.section .text
.global Scale_sig_opt
Scale_sig_opt:
STMFD r13!, {r4 - r12, r14}
SUB r3, r1, #1 @i = lg - 1
CMP r2, #0 @Compare exp and 0
RSB r7, r2, #0 @exp = -exp
ADD r10, r2, #16 @16 + exp
ADD r4, r0, r3, LSL #1 @x[i] address
MOV r8, #0x7fffffff
MOV r9, #0x8000
BLE LOOP2
LOOP1:
LDRSH r5, [r4] @load x[i]
MOV r12, r5, LSL r10
TEQ r5, r12, ASR r10
EORNE r12, r8, r5, ASR #31
SUBS r3, r3, #1
QADD r11, r12, r9
MOV r12, r11, ASR #16
STRH r12, [r4], #-2
BGE LOOP1
BL The_end
LOOP2:
LDRSH r5, [r4] @load x[i]
MOV r6, r5, LSL #16 @L_tmp = x[i] << 16
MOV r5, r6, ASR r7 @L_tmp >>= exp
QADD r11, r5, r9
MOV r12, r11, ASR #16
SUBS r3, r3, #1
STRH r12, [r4], #-2
BGE LOOP2
The_end:
LDMFD r13!, {r4 - r12, r15}
@ENDFUNC
.end