159 lines
		
	
	
		
			4.1 KiB
		
	
	
	
		
			ArmAsm
		
	
	
	
			
		
		
	
	
			159 lines
		
	
	
		
			4.1 KiB
		
	
	
	
		
			ArmAsm
		
	
	
	
| @/******************************************************************************
 | |
| @ *
 | |
| @ * 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}
 | |
| 
 |