blob: bddae5d3960cd03ad97955d5439815fb3f1d2de3 [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_decorr_filter2_armv7
@PRESERVE8
ixheaacd_decorr_filter2_armv7:
STMFD r13!, {r4-r12, r14}
LDR r12, [r0, #24]
LDRSH r4, [r0, #12]
LDRSH r5, [r0, #14]
LDRSH r6, [r0, #16]
MOV r11, #384
LDR r9, [r13, #44]
LDR r14, [r13, #48]
LDR r10, [r13, #40]
MLA r4, r11, r4, r12
MLA r5, r11, r5, r12
MLA r6, r11, r6, r12
ADD r11, r9, #0x0150
LDRH r7, [r0, #28]
ADD r2, r2, #12
ADD r10, r10, #12
ADD r5, r5, #140
ADD r6, r6, #268
STR r10, [r13, #-4]!
STR r2, [r13, #-4]!
LDR r8, [r0]
ADD r11, r11, #0x0c
MOV r0, #128
ADD r2, r9, #0x012
ADD r12, r11, #0x0a0
SUB r10, r11, #0x03A
ADD r3, r3, #12
MLA r0, r7, r0, r8
STR r10, [r13, #-8]!
STR r3, [r13, #-4]!
STR r14, [r13, #-4]!
ADD r1, r1, #12
ADD r0, r0, #12
ADD r4, r4, #12
DE_COR_FIL2_LOOP1:
ADD r12, r12, #12
ADD r11, r11, #12
MOV r9, #20
STR r9, [r13, #-4]!
STR r1, [r13, #16]
DE_COR_FIL2_LOOP2:
LDR r7, [r0]
LDR r8, [r11], #4
LDR r14, [r1], #4
SMULBT r3, r7, r8
SMULBB r9, r7, r8
STR r1, [r13, #16]
SMULTT r10, r7, r8
LDR r1, [r13, #20]
SMLATB r3, r7, r8, r3
MOV r8, #0x8000
QSUB r9, r9, r10
LDR r10, [r1], #4
QADD r14, r14, r8
STR r1, [r13, #20]
QADD r1, r10, r8
MOV r7, r9, asr #15
MOV r8, r3, asr #15
LDR r10, [r12], #4
LDR r9, [r4]
MOV r14, r14, asr #16
MOV r1, r1, asr #16
SMULBT r3, r10, r9
STRH r14, [r0], #2
STRH r1, [r0], #2
SMULTT r14, r10, r9
SMLATB r3, r10, r9, r3
SMULBB r9, r10, r9
LDRSH r10, [r2], #2
MOV r3, r3, asr #15
QSUB r9, r9, r14
SMULBB r14, r10, r8
SMULBB r1, r10, r7
MOV r9, r9, asr #15
SUB r3, r3, r14, asr #15
SUB r9, r9, r1, asr #15
SMULBB r14, r9, r10
SMULBB r1, r3, r10
LDR r10, [r12, #124 ]
ADD r14, r7, r14, asr #15
LDR r7, [r5]
ADD r1, r8, r1, asr #15
SMULBT r8, r10, r7
STRH r14, [r4], #2
STRH r1, [r4], #2
SMULTT r14, r10, r7
SMLATB r8, r10, r7, r8
SMULBB r7, r10, r7
LDRSH r10, [r2], #2
MOV r8, r8, asr #15
QSUB r7, r7, r14
SMULBB r14, r10, r3
SMULBB r1, r10, r9
MOV r7, r7, asr #15
SUB r8, r8, r14, asr #15
SUB r7, r7, r1, asr #15
SMULBB r14, r7, r10
SMULBB r1, r8, r10
LDR r10, [r12, #252]
ADD r14, r9, r14, asr #15
LDR r9, [r6]
ADD r1, r3, r1, asr #15
SMULBT r3, r10, r9
STRH r14, [r5], #2
STRH r1, [r5], #2
SMULTT r14, r10, r9
SMLATB r3, r10, r9, r3
SMULBB r9, r10, r9
LDRSH r10, [r2], #2
MOV r3, r3, asr #15
QSUB r9, r9, r14
SMULBB r14, r10, r8
SMULBB r1, r10, r7
MOV r9, r9, asr #15
SUB r3, r3, r14, asr #15
SUB r9, r9, r1, asr #15
SMULBB r14, r9, r10
SMULBB r1, r3, r10
LDR r10, [r13, #12]
ADD r7, r7, r14, asr #15
ADD r1, r8, r1, asr #15
LDRH r8, [r10], #2
STR r10, [r13, #12]
STRH r7, [r6], #2
LDR r10, [r13, #4]
STRH r1, [r6], #2
MOV r8, r8, lsl #1
LDRH r8, [r10, r8]
LDR r10, [r13, #8]
LDR r1, [r13, #16]
LDR r14, [r13]
LDR r7, [r13, #24]
SMULBB r3, r3, r8
SMULBB r9, r9, r8
SUBS r14, r14, #1
MOV r3, r3, lsl #1
MOV r9, r9, lsl #1
STR r3, [r7] , #4
STR r9, [r10], #4
STR r14, [r13]
STR r10, [r13, #8]
STR r7, [r13, #24]
BGT DE_COR_FIL2_LOOP2
ADD r13, r13, #28
LDMFD r13!, {r4-r12, pc}
.text
.p2align 2
.global ixheaacd_decorr_filter1_armv7
ixheaacd_decorr_filter1_armv7:
STMFD r13!, {r4-r12, r14}
ADD r12, r0, #0x0bc
LDRSH r4, [r0, #12]
LDRSH r5, [r0, #14]
LDRSH r6, [r0, #16]
MOV r11, #192
LDR r3, [r0, #0x2c]
MLA r4, r11, r4, r12
MLA r5, r11, r5, r12
MLA r6, r11, r6, r12
ADD r11, r1, #0x01b0
LDRH r7, [r0, #28]
ADD r5, r5, #64
ADD r6, r6, #128
ADD r8, r0, #0x03c
ADD r11, r11, #0x0c
MOV r0, #64
ADD r12, r11, #0x1c0
SUB r10, r11, #0x0b4
MLA r0, r7, r0, r8
MOV r9, #10
STR r10, [r13, #-4]!
STR r3, [r13, #-4]!
STR r2, [r13, #-4]!
STR r9, [r13, #-4]!
ADD r2, r1, #0x096
MOV r1, r3
DE_COR_FIL1_LOOP:
LDR r7, [r0]
LDR r8, [r11], #4
LDR r14, [r1], #4
SMULBT r3, r7, r8
SMULBB r9, r7, r8
STR r1, [r13, #8]
SMULTT r10, r7, r8
SMLATB r3, r7, r8, r3
MOV r8, #0x8000
QSUB r9, r9, r10
LDR r10, [r1, #0x3c]
QADD r14, r14, r8
QADD r1, r10, r8
MOV r7, r9, asr #15
MOV r8, r3, asr #15
LDR r10, [r12], #4
LDR r9, [r4]
MOV r14, r14, asr #16
MOV r1, r1, asr #16
SMULBT r3, r10, r9
STRH r14, [r0], #2
STRH r1, [r0], #2
SMULTT r14, r10, r9
SMLATB r3, r10, r9, r3
SMULBB r9, r10, r9
LDRSH r10, [r2]
MOV r3, r3, asr #15
QSUB r9, r9, r14
SMULBB r14, r10, r8
SMULBB r1, r10, r7
MOV r9, r9, asr #15
SUB r3, r3, r14, asr #15
SUB r9, r9, r1, asr #15
SMULBB r14, r9, r10
SMULBB r1, r3, r10
LDR r10, [r12, #60 ]
ADD r14, r7, r14, asr #15
LDR r7, [r5]
ADD r1, r8, r1, asr #15
SMULBT r8, r10, r7
STRH r14, [r4], #2
STRH r1, [r4], #2
SMULTT r14, r10, r7
SMLATB r8, r10, r7, r8
SMULBB r7, r10, r7
LDRSH r10, [r2, #2]
MOV r8, r8, asr #15
QSUB r7, r7, r14
SMULBB r14, r10, r3
SMULBB r1, r10, r9
MOV r7, r7, asr #15
SUB r8, r8, r14, asr #15
SUB r7, r7, r1, asr #15
SMULBB r14, r7, r10
SMULBB r1, r8, r10
LDR r10, [r12, #124]
ADD r14, r9, r14, asr #15
LDR r9, [r6]
ADD r1, r3, r1, asr #15
SMULBT r3, r10, r9
STRH r14, [r5], #2
STRH r1, [r5], #2
SMULTT r14, r10, r9
SMLATB r3, r10, r9, r3
SMULBB r9, r10, r9
LDRSH r10, [r2, #4]
MOV r3, r3, asr #15
QSUB r9, r9, r14
SMULBB r14, r10, r8
SMULBB r1, r10, r7
MOV r9, r9, asr #15
SUB r3, r3, r14, asr #15
SUB r9, r9, r1, asr #15
SMULBB r14, r9, r10
SMULBB r1, r3, r10
LDR r10, [r13, #12]
ADD r7, r7, r14, asr #15
ADD r1, r8, r1, asr #15
LDRH r8, [r10], #2
STR r10, [r13, #12]
STRH r7, [r6], #2
LDR r10, [r13, #4]
STRH r1, [r6], #2
MOV r8, r8, lsl #1
LDRH r8, [r10, r8]
LDR r14, [r13]
LDR r1, [r13, #8]
SMULBB r3, r3, r8
SMULBB r9, r9, r8
SUBS r14, r14, #1
MOV r3, r3, lsl #1
MOV r9, r9, lsl #1
STR r3, [r1 , #0x0bc]
STR r9, [r1, #0x7c]
STR r14, [r13]
BGT DE_COR_FIL1_LOOP
ADD r13, r13, #16
LDMFD r13!, {r4-r12, pc}
.text
.p2align 2
.global ixheaacd_divide16_pos_armv7
ixheaacd_divide16_pos_armv7:
CMP r1, #0
MOV r2, r1
@ MVNLTS r2, r2
MVNSLT r2, r2
CLZ r2, r2
SUB r2, r2, #1
MOV r0, r0, LSL r2
MOV r1, r1, LSL r2
MOV r2, r1, LSR #16
MOV r0, r0, LSR #16
MOVS r0, r0, LSL #16
MOV r2, r2, LSL #16
BXEQ r14
MOV r1, #0x10
MOV r3, #1
FFR_DIV_LOOP:
CMP r0, r2
MOVCC r0, r0, LSL #1
SUBCS r0, r0, r2
ADDCS r0, r3, r0, LSL #1
SUBS r1, r1, #1
BGT FFR_DIV_LOOP
BX r14
.text
.p2align 2
.global ixheaacd_decorrelation_armv7
ixheaacd_decorrelation_armv7:
STMFD r13!, {r4-r12, r14}
LDR r4, [r13, #40]
LDR r5, [r13, #44]
LDR r6, [r0, #0x2c]
STR r1, [r13, #-4]!
STR r2, [r13, #-4]!
STR r3, [r13, #-4]!
STR r4, [r13, #-4]!
SUB r13, r13, #124
LDR r7, [r6]
LDR r8, [r6, #20]
LDR r9, [r6, #64]
LDR r10, [r6, #84]
SMULWT r11, r7, r7
SMULWT r12, r9, r9
SMLAWT r11, r8, r8, r11
SMLAWT r12, r10, r10, r12
LDR r10, [r6, #16]
LDR r8, [r6, #80]
LDR r9, [r6, #4]
QADD r14, r11, r12
LDR r7, [r6, #68]
SMULWT r11, r10, r10
STR r14, [r13]
SMULWT r12, r9, r9
SMLAWT r11, r7, r7, r11
LDRSH r7, [r5, #0x0aa]
SMLAWT r12, r8, r8, r12
ADD r10, r6, #0x040
LDR r8, [r6, r7, lsl #2]
QADD r14, r11, r12
LDR r9, [r10, r7, lsl #2]
LDRSH r7, [r5, #0x0ac]
SMULWT r11, r8, r8
STR r14, [r13, #4]
LDR r8, [r6, r7, lsl #2]
SMLAWT r12, r9, r9, r11
LDR r9, [r10, r7, lsl #2]
LDRSH r7, [r5, #0x0ae]
SMULWT r11, r8, r8
STR r12, [r13, #8]
LDR r8, [r6, r7, lsl #2]
SMLAWT r12, r9, r9, r11
LDR r9, [r10, r7, lsl #2]
LDRSH r7, [r5, #0x0b0]
SMULWT r11, r8, r8
STR r12, [r13, #12]
LDR r8, [r6, r7, lsl #2]
SMLAWT r12, r9, r9, r11
LDR r9, [r10, r7, lsl #2]
LDRSH r7, [r5, #0x0b2]
SMULWT r11, r8, r8
STR r12, [r13, #16]
LDR r8, [r6, r7, lsl #2]
SMLAWT r12, r9, r9, r11
LDR r9, [r10, r7, lsl #2]
LDRSH r7, [r5, #0x0b4]
SMULWT r11, r8, r8
STR r12, [r13, #20]
LDR r8, [r6, r7, lsl #2]
SMLAWT r12, r9, r9, r11
LDR r9, [r10, r7, lsl #2]
LDR r6, [r1, #12]
SMULWT r11, r8, r8
LDR r7, [r2, #12]
SMLAWT r14, r9, r9, r11
STR r12, [r13, #24]
LDR r8, [r1, #16]
SMULWT r10, r6, r6
LDR r9, [r2, #16]
SMLAWT r12, r7, r7, r10
STR r14, [r13, #28]
SMULWT r10, r8, r8
LDR r6, [r1, #20]
SMLAWT r14, r9, r9, r10
LDR r7, [r2, #20]
STR r12, [r13, #32]
LDR r8, [r1, #24]
SMULWT r10, r6, r6
LDR r9, [r2, #24]
SMLAWT r12, r7, r7, r10
STR r14, [r13, #36]
SMULWT r10, r8, r8
LDR r6, [r1, #28]
SMLAWT r14, r9, r9, r10
LDR r7, [r2, #28]
STR r12, [r13, #40]
LDR r8, [r1, #32]
SMULWT r10, r6, r6
LDR r9, [r2, #32]
SMLAWT r12, r7, r7, r10
STR r14, [r13, #44]
SMULWT r10, r8, r8
ADD r7, r0, #0x06c0
SMLAWT r14, r9, r9, r10
STR r12, [r13, #48]
LDRSH r12, [r7, #2]
STR r14, [r13, #52]
STR r0, [r13, #-4]!
STR r5, [r13, #-4]!
ADD r3, r5, #0x0c2
MOV r0, #6
ADD r4, r13, #64
DE_COR_LOOP1:
LDRSH r6, [r3, #2]
LDRSH r7, [r3], #2
MOV r14, #0
CMP r6, r12
MOVGT r6, r12
SUBS r6, r6, r7
ADD r8, r1, r7, lsl #2
ADD r9, r2, r7, lsl #2
BLE DE_COR_NEXT1
LDR r10, [r8], #4
LDR r11, [r9], #4
LDRSH r7, [r3, #0x0c]
DE_COR_LOOP1_1:
SMULWT r5, r10, r10
SUBS r6, r6, #1
SMLAWT r5, r11, r11, r5
LDR r10, [r8], #4
LDR r11, [r9], #4
MOV r5, r5, asr r7
QADD r14, r14, r5
BGT DE_COR_LOOP1_1
DE_COR_NEXT1:
SUBS r0, r0, #1
STR r14, [r4], #4
BGT DE_COR_LOOP1
LDR r5, [r13], #4
LDR r0, [r13], #4
MOV r14, #20
MOV r7, r13
LDR r3, [r0, #0x020]
LDR r4, [r0, #0x028]
MOVW r12, #0x620a
LDR r6, [r0, #0x024]
STR r0, [r13, #-4]!
STR r5, [r13, #-4]!
MOV r11, #0x6000
MOV r8, #0x0ff
ADD r5, r7, #80
ORR r8, r8, #0x07f00
DE_COR_LOOP2:
LDR r9, [r3]
LDR r2, [r7]
LDR r10, [r4]
SMULWB r9, r9, r12
MOVS r2, r2, lsl #1
SMULWB r10, r10, r11
MOVLT r2, #0
MOV r9, r9, lsl #1
CMP r2, r9
MOVGT r9, r2
STR r9, [r3], #4
QSUB r9, r9, r2
MOV r10, r10, lsl #1
STR r2, [r7], #4
MOV r9, r9, asr #2
QADD r9, r9, r10
LDR r10, [r6]
MOV r2, r2, asr #2
STR r9, [r4], #4
SMULWB r10, r10, r11
MOV r0, r9, asr #1
QADD r1, r9, r0
MOV r10, r10, lsl #1
ADD r0, r10, r2
STR r0, [r6], #4
CMP r1, r0
MOVLE r0, r8
BLE DE_COR_NEXT2
MOVS r2, r1
MVNLT r2, r2
CLZ r2, r2
SUB r2, r2, #1
MOV r0, r0, lsl r2
MOV r1, r1, lsl r2
MOV r2, r1, lsr #16
MOV r0, r0, lsr #16
MOVS r0, r0, lsl #16
MOV r2, r2, lsl #16
BEQ DE_COR_NEXT1_1
MOV r1, #04
MOV r10, #1
DE_COR_DIV_LOOP:
SUBS r9, r0, r2
MOVCC r0, r0, lsl #1
ADDCS r0, r10, r9, lsl #1
SUBS r9, r0, r2
MOVCC r0, r0, lsl #1
ADDCS r0, r10, r9, lsl #1
SUBS r9, r0, r2
MOVCC r0, r0, lsl #1
ADDCS r0, r10, r9, lsl #1
SUBS r9, r0, r2
MOVCC r0, r0, lsl #1
ADDCS r0, r10, r9, lsl #1
SUBS r1, r1, #1
BGT DE_COR_DIV_LOOP
DE_COR_NEXT1_1:
MOV r0, r0, lsl #16
MOV r0, r0, asr #16
DE_COR_NEXT2:
STRH r0, [r5], #2
SUBS r14, r14, #1
BGT DE_COR_LOOP2
LDR r5, [r13], #4
LDR r0, [r13]
MOV r1, r5
ADD r2, r13, #84
BL ixheaacd_decorr_filter1_armv7
LDR r0, [r13]
LDR r1, [r13, #140]
LDR r2, [r13, #136]
ADD r7, r13, #84
MOV r8, #0
LDR r3, [r13, #132]
LDR r6, [r13, #128]
STRH r8, [r7, #40]
STR r7, [r13, #-4]!
STR r5, [r13, #-4]!
STR r6, [r13, #-4]!
BL ixheaacd_decorr_filter2_armv7
ADD r13, r13, #12
LDR r0, [r13], #4
LDR r1, [r13, #136]
LDR r2, [r13, #132]
ADD r6, r0, #0x06c0
LDR r3, [r13, #128]
LDR r4, [r13, #124]
LDRSH r10, [r0, #0x1e]
LDR r9, [r0, #4]
LDRSH r12, [r6, #2]
LDRSH r14, [r5, #0x0cc]
MOV r6, #0x030
LDRSH r11, [r5, #0x0ca]
MLA r6, r10, r6, r9
ADD r10, r10, #1
CMP r10, #14
MOVGE r10, #0
CMP r12, r14
MOVLT r14, r12
STRH r10, [r0, #0x1e]
ADD r1, r1, r11, lsl #2
ADD r2, r2, r11, lsl #2
ADD r3, r3, r11, lsl #2
ADD r4, r4, r11, lsl #2
LDRSH r8, [r7, #36]
SUBS r14, r14, r11
MOV r7, #0x08000
BLE DE_COR_NEXT3
DE_COR_LOOP3:
LDR r10, [r1], #4
LDR r11, [r2], #4
LDR r9, [r6]
QADD r10, r10, r7
QADD r11, r11, r7
SUBS r14, r14, #1
MOV r10, r10, asr #16
STRH r10, [r6], #2
SMULBB r10, r9, r8
MOV r11, r11, asr #16
STRH r11, [r6], #2
SMULTB r11, r9, r8
MOV r10, r10, lsl #1
STR r10, [r3], #4
MOV r11, r11, lsl #1
STR r11, [r4], #4
BGT DE_COR_LOOP3
DE_COR_NEXT3:
LDR r1, [r13, #136]
LDR r2, [r13, #132]
LDR r3, [r13, #128]
LDR r4, [r13, #124]
LDRSH r8, [r13, #118]
LDRSH r14, [r5, #0x0ce]
LDRSH r11, [r5, #0x0cc]
LDR r6, [r0, #8]
LDRSH r8, [r13, #118]
CMP r12, r14
MOVLT r14, r12
ADD r1, r1, r11, lsl #2
ADD r2, r2, r11, lsl #2
ADD r3, r3, r11, lsl #2
ADD r4, r4, r11, lsl #2
SUBS r14, r14, r11
BLE DE_COR_NEXT4
DE_COR_LOOP4:
LDR r10, [r1], #4
LDR r11, [r2], #4
LDR r9, [r6]
QADD r10, r10, r7
QADD r11, r11, r7
SUBS r14, r14, #1
MOV r10, r10, asr #16
STRH r10, [r6], #2
SMULBB r10, r9, r8
MOV r11, r11, asr #16
STRH r11, [r6], #2
SMULTB r11, r9, r8
MOV r10, r10, lsl #1
STR r10, [r3], #4
MOV r11, r11, lsl #1
STR r11, [r4], #4
BGT DE_COR_LOOP4
DE_COR_NEXT4:
LDR r3, [r13, #128]
LDR r4, [r13, #124]
RSBS r14, r12, #64
MOV r9, #0
LDRSH r10, [r0, #0x01c]
ADD r3, r3, r12, lsl #2
ADD r4, r4, r12, lsl #2
BLE DE_COR_NEXT5
DE_COR_LOOP5:
STR r9, [r3], #4
STR r9, [r4], #4
SUBS r14, r14, #1
BGT DE_COR_LOOP5
DE_COR_NEXT5:
ADD r10, r10, #1
CMP r10, #2
MOVGE r10, #0
STRH r10, [r0, #0x01c]
LDRSH r1, [r0, #0x0c]
LDRSH r4, [r0, #0x12]
LDRSH r2, [r0, #0x0e]
LDRSH r5, [r0, #0x14]
LDRSH r3, [r0, #0x10]
LDRSH r6, [r0, #0x16]
ADD r13, r13, #140
ADD r1, r1, #1
ADD r2, r2, #1
ADD r3, r3, #1
CMP r1, r4
MOVGE r1, #0
CMP r2, r5
MOVGE r2, #0
CMP r3, r6
MOVGE r3, #0
STRH r1, [r0, #0x0c]
STRH r2, [r0, #0x0e]
STRH r3, [r0, #0x10]
LDMFD r13!, {r4-r12, pc}