@/******************************************************************************
@ *
@ * 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_conv_ergtoamplitudelp_armv7
ixheaacd_conv_ergtoamplitudelp_armv7:

    STMFD           sp!, {r4-r12, r14}

    LDR             R5, [SP, #44]
    LDR             R4, [SP, #40]
    LDR             R11, =0x5A82
    LDR             R10, =0x1FF

LOOP1:

    LDRSH           R6, [R2, #0]
    MOV             R12, #0
    MOV             R14, #-16
    MOVS            R6, R6
    BLE             ENDIF1_1

    LDRSH           R7, [R2, #2]
    CLZ             R8, R6
    SUB             R8, R8, #17
    SUB             R7, R7, R8
    MOV             R6, R6, LSL R8
    MOV             R6, R6, ASR #5
    AND             R6, R6, R10

    TST             R7, #1
    BIC             R6, R6, #1
    LDRH            R12, [R6, R5]
    ADDNE           R7, R7, #3
    MOV             R14, R7, ASR #1
    SMULWBNE        R12, R12, R11

ENDIF1_1:
    STRH            R14, [R2, #2]


    LDRSH           R6, [R3, #0]
    MOV             R8, #0
    MOV             R9, #-16

    MOVS            R6, R6
    BLE             ENDIF1_2

    LDRSH           R7, [R3, #2]
    CLZ             R8, R6
    SUB             R8, R8, #17
    SUB             R7, R7, R8
    MOV             R6, R6, LSL R8
    MOV             R6, R6, ASR #5
    AND             R6, R6, R10

    TST             R7, #1
    BIC             R6, R6, #1
    LDRH            R8, [R6, R5]
    ADDNE           R7, R7, #3
    MOV             R9, R7, ASR #1
    SMULWBNE        R8, R8, R11

ENDIF1_2:
    STRH            R9, [R3, #2]
    STRH            R8, [R3], #4




    LDRSH           R6, [R4, #0]
    MOV             R8, #0
    MOV             R9, #-16
    MOVS            R6, R6
    BLE             ENDIF1_3

    LDRSH           R7, [R4, #2]
    CLZ             R8, R6
    SUB             R8, R8, #17
    SUB             R7, R7, R8
    MOV             R6, R6, LSL R8
    MOV             R6, R6, ASR #5
    ANDS            R6, R6, R10

    TST             R7, #1
    BIC             R6, R6, #1
    LDRH            R8, [R6, R5]
    ADDNE           R7, R7, #3
    MOV             R9, R7, ASR #1
    SMULWBNE        R8, R8, R11

ENDIF1_3:
    STRH            R9, [R4, #2]

    SUB             R6, R1, R9
    SUBS            R6, R6, #4

    RSBLE           R6, R6, #0
    MOVGT           R8, R8, ASR R6
    MOVLE           R8, R8, LSL R6
    STRH            R8, [R4], #4


    SUBS            R6, R14, R1
    BLE             ELSE1

    CMP             R6, #15
    MOVGT           R6, #15
    MOV             R12, R12, LSL R6
    CMP             R12, #0x8000
    MVNGE           R12, #0x8000
    CMNLT           R12, #0x00008000
    MOVLT           R12, #0x00008000
    STRH            R12, [R2], #4
    SUBS            R0, R0, #1
    BGT             LOOP1

ELSE1:
    RSB             R6, R6, #0
    MOV             R12, R12, ASR R6
    STRH            R12, [R2], #4
    SUBS            R0, R0, #1
    BGT             LOOP1
    LDMFD           sp!, {r4-r12, r15}