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