Home | History | Annotate | Download | only in armv7
      1 @/******************************************************************************
      2 @ *
      3 @ * Copyright (C) 2018 The Android Open Source Project
      4 @ *
      5 @ * Licensed under the Apache License, Version 2.0 (the "License");
      6 @ * you may not use this file except in compliance with the License.
      7 @ * You may obtain a copy of the License at:
      8 @ *
      9 @ * http://www.apache.org/licenses/LICENSE-2.0
     10 @ *
     11 @ * Unless required by applicable law or agreed to in writing, software
     12 @ * distributed under the License is distributed on an "AS IS" BASIS,
     13 @ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     14 @ * See the License for the specific language governing permissions and
     15 @ * limitations under the License.
     16 @ *
     17 @ *****************************************************************************
     18 @ * Originally developed and contributed by Ittiam Systems Pvt. Ltd, Bangalore
     19 @*/
     20 
     21 
     22 .text
     23 .p2align 2
     24 .global ixheaacd_scale_factor_process_armv7
     25 
     26 ixheaacd_scale_factor_process_armv7:
     27 
     28 
     29 
     30 
     31     STMFD           sp!, {r4-r12, r14}
     32     LDR             r9, [sp, #0x28]
     33     LDR             r11, [sp, #0x2c]
     34 
     35     CMP             r2, #0
     36 
     37     BLE             END
     38     MOV             r10, #0
     39     CMP             r11, #2
     40     MOVLE           r11, #0x25
     41     MOVGT           r11, #0x22
     42 
     43 TBANDS_LOOP:
     44 
     45     LDRSH           r5, [r1], #2
     46     LDRB            r4, [r3], #1
     47 
     48     LDR             r6, [sp, #0x30]
     49     LDR             r7, [sp, #0x34]
     50 
     51     CMP             r5, #0x18
     52     BGE             SCALE_FACTOR_GE_12
     53 
     54     CMP             r4, #0
     55     BLE             OFFSET_ZERO
     56 
     57 SCALE_FACTOR_LT_12:
     58 
     59     STR             r10, [r0], #4
     60     STR             r10, [r0], #4
     61     STR             r10, [r0], #4
     62     STR             r10, [r0], #4
     63     SUBS            r4, r4, #4
     64     BGT             SCALE_FACTOR_LT_12
     65     B               OFFSET_ZERO
     66 
     67 SCALE_FACTOR_GE_12:
     68 
     69     SUBS            r6, r11, r5, ASR #2
     70 
     71 
     72     AND             r5, r5, #3
     73 
     74 
     75     LDR             r5, [r9, r5, LSL #2]
     76 
     77     BLE             SHIFT_LE_ZERO
     78 
     79     SUB             r14, r6, #1
     80 
     81 SHIFT_POSITIVE:
     82     LDRD            r6, [r0, #0]
     83 
     84     SMULWB          r6, r6, r5
     85     SMULWB          r7, r7, r5
     86 
     87     MOV             r6, r6, ASR r14
     88     MOV             r7, r7, ASR r14
     89 
     90     STRD            r6, [r0], #8
     91 
     92     LDRD            r6, [r0, #0]
     93 
     94     SMULWB          r6, r6, r5
     95     SMULWB          r7, r7, r5
     96     SUBS            r4, r4, #4
     97 
     98     MOV             r6, r6, ASR r14
     99     MOV             r7, r7, ASR r14
    100 
    101     STRD            r6, [r0], #8
    102 
    103     BGT             SHIFT_POSITIVE
    104     B               OFFSET_ZERO
    105 SHIFT_LE_ZERO:
    106 
    107     RSBS            r14, r6, #0
    108     BGT             SHIFT_NEGTIVE1
    109 
    110 SHIFT_ZERO:
    111     LDRD            r6, [r0, #0]
    112 
    113     SMULWB          r6, r6, r5
    114     SMULWB          r7, r7, r5
    115     MOV             r6, r6, LSL #1
    116     MOV             r7, r7, LSL #1
    117 
    118     STRD            r6, [r0], #8
    119 
    120     SUBS            r4, r4, #2
    121 
    122     BGT             SHIFT_ZERO
    123     B               OFFSET_ZERO
    124 
    125 SHIFT_NEGTIVE1:
    126     SUB             r14, r14, #1
    127 SHIFT_NEGTIVE:
    128     LDRD            r6, [r0, #0]
    129     MOV             r6, r6, LSL r14
    130     MOV             r7, r7, LSL r14
    131 
    132     SMULWB          r6, r6, r5
    133     SMULWB          r7, r7, r5
    134     MOV             r6, r6, LSL #2
    135     MOV             r7, r7, LSL #2
    136 
    137     STRD            r6, [r0], #8
    138 
    139     SUBS            r4, r4, #2
    140 
    141     BGT             SHIFT_NEGTIVE
    142 
    143 OFFSET_ZERO:
    144     SUBS            r2, r2, #1
    145     BGT             TBANDS_LOOP
    146 END:
    147     LDMFD           sp!, {r4-r12, r15}
    148