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