blob: f6d91f510870deb419bb49d8cbde7124ccada33c [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_apply_rot_armv7
ixheaacd_apply_rot_armv7:
STMFD SP!, {R4-R12, R14}
MOVW R5, #0x59e
MOV R4, #22
ADD R11, R0, R5
LOOP1:
LDRSH R5, [R11, #-98]
LDRSH R6, [R11, #94]
LDRSH R7, [R11, #-96]
LDRSH R8, [R11, #96]
ADD R9, R5, R6
STRH R9, [R11, #-98]
ADD R10, R7, R8
STRH R10, [R11, #-96]
LDRSH R5, [R11, #-2]
LDRSH R6, [R11, #190]
LDRSH R7, [R11]
LDRSH R8, [R11, #192]
ADD R9, R5, R6
STRH R9, [R11, #-2]
ADD R10, R7, R8
STRH R10, [R11], #4
LDRSH R5, [R11, #-98]
LDRSH R6, [R11, #94]
LDRSH R7, [R11, #-96]
LDRSH R8, [R11, #96]
ADD R9, R5, R6
STRH R9, [R11, #-98]
ADD R10, R7, R8
STRH R10, [R11, #-96]
SUBS R4, R4, #2
LDRSH R5, [R11, #-2]
LDRSH R6, [R11, #190]
LDRSH R7, [R11]
LDRSH R8, [R11, #192]
ADD R9, R5, R6
STRH R9, [R11, #-2]
ADD R10, R7, R8
STRH R10, [R11], #4
BGT LOOP1
MOVW R4, #0x53C
LDR R12, [R0, #44]
ADD R11, R0, R4
MOV R4, #10
LOOP2:
LDR R5, [R12]
LDR R7, [R11], #4
LDR R6, [R12, #0x80]
LDR R8, [R11, #92]
SMULWB R9, R5, R7
SMULWB R10, R6, R8
SMULWT R14, R5, R7
QADD R5, R9, R10
SMULWT R6, R6, R8
MOV R5, R5, LSL #2
QADD R14, R14, R6
STR R5, [R12], #4
MOV R14, R14, LSL #2
STR R14, [R12, #0x7c]
LDR R5, [R12, #0x3c]
LDR R6, [R12, #0xbc]
SMULWB R9, R5, R7
SMULWB R10, R6, R8
SMULWT R14, R5, R7
QADD R5, R9, R10
SMULWT R6, R6, R8
MOV R5, R5, LSL #2
QADD R14, R14, R6
STR R5, [R12, #0x3c]
MOV R14, R14, LSL #2
STR R14, [R12, #0xbc]
SUBS R4, R4, #1
BGT LOOP2
MOVW R11, #0x6c2
MOVW R5, #0x564
LDRSH R14, [R0, R11]
ADD R11, R0, R5
LDR R5, [SP, #44]
SUB SP, SP, #512
MOV R12, SP
LDR R6, [R5, #12]
MOV R4, #12
ADD R6, R6, #0xb8
LOOP3:
LDRSH R5, [R6], #2
LDRSH R7, [R6, #-4]
LDR R10, [R11, #96]
LDR R9, [R11], #4
CMP R14, R5
SUB R8, R14, R7
SUBGT R8, R5, R7
ADD R5, R12, R7, LSL #3
LOOP3INN1:
STR R10, [R5, #4]
STR R9, [R5], #8
SUBS R8, R8, #1
BGT LOOP3INN1
SUBS R4, R4, #1
BGT LOOP3
MOV R4, #3
LDR R12, [R0, #44]
LDR R9, [SP, #48+512]
LDR R0, [SP, #40+512]
STR R14, [SP, #-4]!
LOOP4:
LDR R5, [R12], #4
LDR R6, [R12, #0x3c]
LDR R7, [R12, #0x7c]
LDRSH R10, [R9], #2
LDR R8, [R12, #0xbc]
MOV R11, #5
CMP R10, #6
SUBLT R11, R10, #1
LOOP4INN1:
LDR R10, [R12], #4
LDR R14, [R12, #0x3C]
QADD R5, R5, R10
QADD R6, R6, R14
LDR R10, [R12, #0x7C]
LDR R14, [R12, #0xBC]
QADD R7, R7, R10
QADD R8, R8, R14
SUBS R11, R11, #1
BGT LOOP4INN1
STR R5, [R1], #4
STR R6, [R2], #4
STR R7, [R3], #4
STR R8, [R0], #4
SUBS R4, R4, #1
BGT LOOP4
LDR R14, [SP]
ADD R11, SP, #28
SUB R4, R14, #3
LOOP5:
LDR R5, [R1]
LDR R7, [R11], #4
LDR R6, [R3]
LDR R8, [R11], #4
SMULWB R9, R5, R7
SMULWB R10, R6, R8
SMULWT R14, R5, R7
QADD R5, R9, R10
SMULWT R6, R6, R8
MOV R5, R5, LSL #2
QADD R14, R14, R6
STR R5, [R1], #4
MOV R14, R14, LSL #2
STR R14, [R3], #4
SUBS R4, R4, #1
LDR R5, [R2]
LDR R6, [R0]
SMULWB R9, R5, R7
SMULWB R10, R6, R8
SMULWT R14, R5, R7
QADD R5, R9, R10
SMULWT R6, R6, R8
MOV R5, R5, LSL #2
QADD R14, R14, R6
STR R5, [R2], #4
MOV R14, R14, LSL #2
STR R14, [R0], #4
BGT LOOP5
ADD SP, SP, #516
LDMFD sp!, {r4-r12, r15}