libxaac/decoder/armv7/ixheaacd_apply_rot.s
Rajat Kumar 91227e2f61 LDR changed to MOV instruction in armv8 and armv7 assemblies
Removes memory accesses to constant values and replaces
them with mov instructions. This would allow this library
to be compatible with execute-only memory layouts.

Bug: 124323156
Test: poc
Change-Id: I801d4cfff953b9d13b80a97be04a3223117df29f
2019-03-27 15:49:19 -07:00

229 lines
6.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_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}