@/******************************************************************************
@ *
@ * 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_harm_idx_zerotwolp_armv7
ixheaacd_harm_idx_zerotwolp_armv7:
    STMFD           sp!, {r4-r12}
    SUB             r5, r2, #1
    MOV             r2, #-1
    LDR             r6, [sp, #52]
    LDR             r12, [sp, #48]
    ADD             r10, sp, #36
    LDR             r4, [sp, #44]
    LDMIA           r10, {r9, r10}
    CMP             r4, #0
    BLE             EXIT
    CMP             r12, #0
    BNE             NO_NOISE



LOOP1:
    LDR             r12, [r0, #0]
    LDRSH           r7, [r1], #2
    LDRSH           r8, [r1], #2

    ADD             r2, r2, #1
    SMULWB          r7, r12, r7
    SUBS            r8, r8, r5

    LDRH            r12, [r3], #4
    RSBLE           r8, r8, #0
    MOVLE           r8, r7, ASR r8
    MOVGT           r8, r7, LSL r8

    MOVS            r12, r12, LSL #16
    BEQ             NEXT

    CMP             r6, #0
    QADDEQ          r8, r8, r12
    QSUBNE          r8, r8, r12
    SUBS            r4, r4, #1
    B               STORE

NEXT:


    LDR             r7, [r9, r2, LSL #2]
    ADD             r12, r10, r2, LSL #2
    LDRSH           r12, [r12, #0]
    SUBS            r4, r4, #1
    SMULTB          r7, r7, r12
    ADD             r8, r8, r7, LSL #1

STORE:
    STR             r8, [r0], #4
    BGT             LOOP1
    B               EXIT


NO_NOISE:

LOOP2:
    LDR             r12, [r0, #0]
    LDRSH           r7, [r1], #2
    LDRSH           r9, [r1], #2
    LDRH            r10, [r3], #4

    SMULWB          r7, r12, r7
    SUBS            r9, r9, r5
    RSBMI           r9, r9, #0

    MOVMI           r12, r7, ASR r9
    MOVPL           r12, r7, LSL r9

    MOV             r7, r10, LSL #16

    CMP             r6, #0
    QADDEQ          r12, r12, r7
    QSUBNE          r12, r12, r7

    SUBS            r4, r4, #1
    STR             r12, [r0], #4
    BGT             LOOP2

EXIT:
    LDMFD           sp!, {r4-r12}
    BX              lr