blob: b1812dcd596055512bf21418391a2513c028dd86 [file] [log] [blame]
@/******************************************************************************
@ *
@ * Copyright (C) 2018 The Android Open Source Project
@ *
@ * 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.
@ *
@ *****************************************************************************
@ * Originally developed and contributed by Ittiam Systems Pvt. Ltd, Bangalore
@*/
.text
.p2align 2
.global ixheaacd_enery_calc_per_subband_armv7
ixheaacd_enery_calc_per_subband_armv7:
STMFD sp!, {r4-r12, r14}
LDR r10, [sp, #0x34]
MOV R4, R2
MOV R5, R3
MOV R2, R0
MOV R3, R1
SUB R12, R3, R2
LDR r10, [r10, #0]
ADD r10, r10, r12, LSL #1
LDRSH r9, [r10, #0x20]
LDR R1, [sp, #0x28]
MOV R1, R1, LSL #1
SUBS R5, R5, R4
LDR R0, [sp, #0x38]
LDR R7, [sp, #0x2C]
LDR R8, [sp, #0x30]
BLE ENDCALC
MOVS R8, R8
BEQ HQ_PART
ADD R0, R0, R4, LSL #2
ADD R0, R0, R2, LSL #8
SUB R2, R3, R2
MOV R10, #20
B LP_SBR_LOOP
HQ_PART:
ADD R0, R0, R4, LSL #2
ADD R0, R0, R2, LSL #9
SUB R2, R3, R2
MOV R2, R2, LSL #1
MOV R10, #21
SUB R1, R1, #1
LP_SBR_LOOP:
MOV R6, #0
MOV R8, R0
MOVS R11, R2
BLE STORE_ZEROES
MOV R6, #1
LOOP1_CALC_MAX:
LDR R4, [R8], #0x100
LDR R12, [R8], #0x100
EOR R4, R4, R4, ASR #31
ORR R6, R6, R4
EOR R12, R12, R12, ASR #31
SUBS R11, R11, #2
ORRGE R6, R6, R12
BGT LOOP1_CALC_MAX
CALC_NORM:
CLZ R6, R6
RSBS R14, R6, R10
MOV R6, #0
MOV R8, R0
MOV R11, R2
BLE NEG_SHIFT
LOOP2_APPLY_POS_SHIFT:
LDR R4, [R8], #0x100
LDR R12, [R8], #0x100
SUBS R11, R11, #2
MOV R4, R4, ASR R14
SMLABB R6, R4, R4, R6
MOV R12, R12, ASR R14
SMLABB R6, R12, R12, R6
BGT LOOP2_APPLY_POS_SHIFT
B CONVERT_TO_MANT_EXP
NEG_SHIFT:
RSB R12, R14, #0
LOOP2_APPLY_NEG_SHIFT:
LDR R4, [R8], #0x100
LDR R3, [R8], #0x100
SUBS R11, R11, #2
MOV R4, R4, LSL R12
SMLABB R6, R4, R4, R6
MOV R3, R3, LSL R12
SMLABB R6, R3, R3, R6
BGT LOOP2_APPLY_NEG_SHIFT
CONVERT_TO_MANT_EXP:
SUB R14, R14, #23
ADD R0, R0, #4
MOVS R6, R6
BEQ STORE_ZEROES
CLZ R12, R6
RSB R12, R12, #17
MOV R4, R6, ASR R12
SMULBB R11, R4, R9
ADD R12, R12, R14, LSL#1
MOV R11, R11, ASR #15
CMP R11, #0x00008000
MVNEQ R11, R11
STRH R11, [R7], #2
ADD R11, R1, R12
STRH R11, [R7], #2
SUBS R5, R5, #1
BGT LP_SBR_LOOP
B ENDCALC
STORE_ZEROES:
STR R6, [R7], #4
SUBS R5, R5, #1
BGT LP_SBR_LOOP
ENDCALC:
LDMFD sp!, {r4-r12, r15}