blob: 15f8a19341a944bd51cf8009c3ba7f0a9c09bc09 [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_scale_factor_process_armv7
ixheaacd_scale_factor_process_armv7:
STMFD sp!, {r4-r12, r14}
LDR r9, [sp, #0x28]
LDR r11, [sp, #0x2c]
CMP r2, #0
BLE END
MOV r10, #0
CMP r11, #2
MOVLE r11, #0x25
MOVGT r11, #0x22
TBANDS_LOOP:
LDRSH r5, [r1], #2
LDRB r4, [r3], #1
LDR r6, [sp, #0x30]
LDR r7, [sp, #0x34]
CMP r5, #0x18
BGE SCALE_FACTOR_GE_12
CMP r4, #0
BLE OFFSET_ZERO
SCALE_FACTOR_LT_12:
STR r10, [r0], #4
STR r10, [r0], #4
STR r10, [r0], #4
STR r10, [r0], #4
SUBS r4, r4, #4
BGT SCALE_FACTOR_LT_12
B OFFSET_ZERO
SCALE_FACTOR_GE_12:
SUBS r6, r11, r5, ASR #2
AND r5, r5, #3
LDR r5, [r9, r5, LSL #2]
BLE SHIFT_LE_ZERO
SUB r14, r6, #1
SHIFT_POSITIVE:
LDRD r6, [r0, #0]
SMULWB r6, r6, r5
SMULWB r7, r7, r5
MOV r6, r6, ASR r14
MOV r7, r7, ASR r14
STRD r6, [r0], #8
LDRD r6, [r0, #0]
SMULWB r6, r6, r5
SMULWB r7, r7, r5
SUBS r4, r4, #4
MOV r6, r6, ASR r14
MOV r7, r7, ASR r14
STRD r6, [r0], #8
BGT SHIFT_POSITIVE
B OFFSET_ZERO
SHIFT_LE_ZERO:
RSBS r14, r6, #0
BGT SHIFT_NEGTIVE1
SHIFT_ZERO:
LDRD r6, [r0, #0]
SMULWB r6, r6, r5
SMULWB r7, r7, r5
MOV r6, r6, LSL #1
MOV r7, r7, LSL #1
STRD r6, [r0], #8
SUBS r4, r4, #2
BGT SHIFT_ZERO
B OFFSET_ZERO
SHIFT_NEGTIVE1:
SUB r14, r14, #1
SHIFT_NEGTIVE:
LDRD r6, [r0, #0]
MOV r6, r6, LSL r14
MOV r7, r7, LSL r14
SMULWB r6, r6, r5
SMULWB r7, r7, r5
MOV r6, r6, LSL #2
MOV r7, r7, LSL #2
STRD r6, [r0], #8
SUBS r4, r4, #2
BGT SHIFT_NEGTIVE
OFFSET_ZERO:
SUBS r2, r2, #1
BGT TBANDS_LOOP
END:
LDMFD sp!, {r4-r12, r15}