| @/****************************************************************************** |
| @ * |
| @ * 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} |