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_sbr_qmfanal32_winadds 25 .type ixheaacd_sbr_qmfanal32_winadds, %function 26 27ixheaacd_sbr_qmfanal32_winadds: 28 29 STMFD sp!, {R4-R12, R14} 30 VPUSH {D8 - D15} 31 LDR R5, [SP, #108] 32 LDR R6, [SP, #112] 33 LDR R7, [SP, #116] 34 35 MOV R9, R7, LSL #1 36 37 ADD r5, r5, #64 38 MOV r10, #3 39 40LOOP: 41 LDRSH r4 , [R6], r9 42 LDRSH r8 , [R6], r9 43 LDRSH r11 , [R6], r9 44 LDRSH r12 , [R6], r9 45 46 47 STRH r4 , [r5 , #-2]! 48 STRH r8 , [r5 , #-2]! 49 STRH r11 , [r5 , #-2]! 50 STRH r12 , [r5 , #-2]! 51 52 LDRSH r4 , [R6], r9 53 LDRSH r8 , [R6], r9 54 LDRSH r11 , [R6], r9 55 LDRSH r12 , [R6], r9 56 57 58 STRH r4 , [r5 , #-2]! 59 STRH r8 , [r5 , #-2]! 60 STRH r11 , [r5 , #-2]! 61 STRH r12 , [r5 , #-2]! 62 63 64 SUBS r10, r10, #1 65 66 BPL LOOP 67 68 LDR R4, [SP, #104] 69 70 MOV R5, #8 71 VLD1.16 D0, [R0]! 72 MOV R6, #64 73 74 MOV R6, R6, LSL #1 75 VLD2.16 {D1, D2}, [R2]! 76 MOV R7, #244 77 78 MOV R9, R0 79 ADD R0, R0, #120 80 81 MOV R11, R4 82 VLD1.16 D2, [R0], R6 83 ADD R11, R11, #128 84 85 86 87 88 MOV R10, R2 89 ADD R2, R2, #240 90 91 VMULL.S16 Q15, D0, D1 92 VLD2.16 {D3, D4}, [R2]! 93 ADD R2, R2, #240 94 95 96 VLD1.16 D4, [R0], R6 97 VMLAL.S16 Q15, D2, D3 98 99 VLD2.16 {D5, D6}, [R2]! 100 101 102 ADD R2, R2, #240 103 VLD1.16 D6, [R0], R6 104 VMLAL.S16 Q15, D4, D5 105 106 VLD2.16 {D7, D8}, [R2]! 107 108 109 ADD R2, R2, #240 110 VLD1.16 D8, [R0], R6 111 VMLAL.S16 Q15, D6, D7 112 113 MOV R0, R9 114 VLD2.16 {D9, D10}, [R2]! 115 116 117 ADD R2, R2, #240 118 VLD1.16 D10, [R1]! 119 VMLAL.S16 Q15, D8, D9 120 121 122 123 MOV R9, R1 124 VLD2.16 {D11, D12}, [R3]! 125 ADD R1, R1, #120 126 127 128 MOV R2, R10 129 VLD1.16 D12, [R1], R6 130 MOV R10, R3 131 132 ADD R3, R3, #240 133 VLD2.16 {D13, D14}, [R3]! 134 ADD R3, R3, #240 135 136 137 VLD2.16 {D15, D16}, [R3]! 138 139 VLD1.16 D14, [R1], R6 140 ADD R3, R3, #240 141 142 143 144 VLD1.16 D16, [R1], R6 145 SUB R5, R5, #1 146 147 VLD2.16 {D17, D18}, [R3]! 148 149 150 ADD R3, R3, #240 151 VLD1.16 D18, [R1], R6 152 153 MOV R1, R9 154 VLD2.16 {D19, D20}, [R3]! 155 156 ADD R3, R3, #240 157 158 MOV R3, R10 159 160 161LOOP_1: 162 163 164 VLD1.16 D0, [R0]! 165 166 MOV R9, R0 167 VLD2.16 {D1, D2}, [R2]! 168 ADD R0, R0, #120 169 170 MOV R10, R2 171 VST1.32 {Q15}, [R4]! 172 ADD R2, R2, #240 173 174 175 VMULL.S16 Q15, D10, D11 176 VLD1.16 D2, [R0], R6 177 VMLAL.S16 Q15, D12, D13 178 179 VMLAL.S16 Q15, D14, D15 180 VLD2.16 {D3, D4}, [R2]! 181 VMLAL.S16 Q15, D16, D17 182 183 VMLAL.S16 Q15, D18, D19 184 VLD1.16 D4, [R0], R6 185 ADD R2, R2, #240 186 187 VST1.32 {Q15}, [R11]! 188 189 190 VMULL.S16 Q15, D0, D1 191 VLD2.16 {D5, D6}, [R2]! 192 VMLAL.S16 Q15, D2, D3 193 194 195 196 ADD R2, R2, #240 197 VLD1.16 D6, [R0], R6 198 VMLAL.S16 Q15, D4, D5 199 200 VLD2.16 {D7, D8}, [R2]! 201 202 203 ADD R2, R2, #240 204 VLD1.16 D8, [R0], R6 205 VMLAL.S16 Q15, D6, D7 206 207 MOV R0, R9 208 VLD2.16 {D9, D10}, [R2]! 209 210 211 212 ADD R2, R2, #240 213 VLD1.16 D10, [R1]! 214 MOV R2, R10 215 216 MOV R9, R1 217 VLD2.16 {D11, D12}, [R3]! 218 ADD R1, R1, #120 219 220 221 VMLAL.S16 Q15, D8, D9 222 VLD1.16 D12, [R1], R6 223 MOV R10, R3 224 225 226 ADD R3, R3, #240 227 VLD2.16 {D13, D14}, [R3]! 228 ADD R3, R3, #240 229 230 231 232 VLD1.16 D14, [R1], R6 233 VLD2.16 {D15, D16}, [R3]! 234 ADD R3, R3, #240 235 236 237 VLD1.16 D16, [R1], R6 238 VLD2.16 {D17, D18}, [R3]! 239 ADD R3, R3, #240 240 241 242 VLD1.16 D18, [R1], R6 243 SUBS R5, R5, #1 244 245 MOV R1, R9 246 VLD2.16 {D19, D20}, [R3]! 247 248 ADD R3, R3, #240 249 250 MOV R3, R10 251 252 BGT LOOP_1 253 254 VST1.32 {Q15}, [R4]! 255 VMULL.S16 Q15, D10, D11 256 VMLAL.S16 Q15, D12, D13 257 258 VMLAL.S16 Q15, D14, D15 259 VMLAL.S16 Q15, D16, D17 260 VMLAL.S16 Q15, D18, D19 261 262 VST1.32 {Q15}, [R11]! 263 264 VPOP {D8 - D15} 265 LDMFD sp!, {R4-R12, R15} 266 267