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 25 26 .global ixheaacd_over_lap_add1_armv7 27ixheaacd_over_lap_add1_armv7: 28 29 STMFD sp!, {R4-R12, R14} 30 VPUSH {d8 - d15} 31 32 LDR R4, [SP, #104] 33 LDR R5, [SP, #108] 34 LDR R6, [SP, #112] 35 MOV R10, R5, LSL #1 36 SUB R11, R10, #1 37 MOV R10, R11, LSL #2 38 ADD R10, R0, R10 39 SUB R10, R10, #12 40 MOV R8, R11, LSL #1 41 ADD R8, R8, R3 42 SUB R8, R8, #14 43 MOV R12, #0 44 VDUP.S16 D12, R12 45 MOV R12, #-16 46 VDUP.16 Q11, R4 47 VLD1.32 {D6, D7}, [R10], R12 48 MOV R7, #0x2000 49 VREV64.32 Q3, Q3 50 RSB R7, R7, #0 51 VQNEG.S32 Q0, Q3 52 VDUP.32 Q10, R7 53 VUZP.16 D1, D0 54 SUB R11, R5, #1 55 VUZP.16 D7, D6 56 SMULBB R11, R11, R6 57 MOV R11, R11, LSL #1 58 VLD2.16 {D2, D3}, [R8], R12 59 ADD R11, R11, R2 60 VREV64.16 Q1, Q1 61 MOV R4, R6, LSL #1 62 RSB R4, R4, #0 63 MOV R9, R6, LSL #1 64 SMULBB R6, R5, R6 65 MOV R6, R6, LSL #1 66 ADD R6, R6, R2 67 68 69 70 VMULL.U16 Q15, D7, D2 71 VLD1.32 {D4, D5}, [R1]! 72 VSHR.U32 Q15, Q15, #16 73 74 VMLAL.S16 Q15, D6, D2 75 VQSHL.S32 Q15, Q15, Q11 76 77 78 VADDL.S16 Q7, D3, D12 79 80 VMULL.S32 Q13, D4, D14 81 VQMOVN.S64 D28, Q13 82 VMULL.S32 Q13, D5, D15 83 VQMOVN.S64 D29, Q13 84 85 VQADD.S32 Q14, Q14, Q10 86 VQSUB.S32 Q13, Q15, Q14 87 VQSHL.S32 Q13, Q13, #2 88 VSHR.S32 Q13, Q13, #16 89 VUZP.16 D26, D27 90 91 92 VMULL.U16 Q12, D1, D3 93 VSHR.U32 Q12, Q12, #16 94 VMLAL.S16 Q12, D0, D3 95 VQSHL.S32 Q12, Q12, Q11 96 VLD1.32 {D6, D7}, [R10], R12 97 98 99 VADDL.S16 Q7, D2, D12 100 101 VMULL.S32 Q0, D14, D4 102 VQMOVN.S64 D16, Q0 103 VMULL.S32 Q0, D15, D5 104 VQMOVN.S64 D17, Q0 105 106 VREV64.32 Q3, Q3 107 VQADD.S32 Q8, Q8, Q10 108 VQNEG.S32 Q0, Q3 109 VUZP.16 D1, D0 110 VQSUB.S32 Q9, Q12, Q8 111 VUZP.16 D7, D6 112 VQSHL.S32 Q9, Q9, #2 113 VLD2.16 {D2, D3}, [R8], R12 114 VSHR.S32 Q9, Q9, #16 115 VREV64.16 Q1, Q1 116 VUZP.16 D18, D19 117 118 VLD1.32 {D4, D5}, [R1]! 119 SUB R5, R5, #8 120 121 122LOOP_1: 123 124 VST1.16 D26[0], [R11], R4 125 VMULL.U16 Q15, D7, D2 126 VST1.16 D26[1], [R11], R4 127 VMULL.U16 Q12, D1, D3 128 VST1.16 D26[2], [R11], R4 129 VSHR.U32 Q15, Q15, #16 130 VST1.16 D26[3], [R11], R4 131 VSHR.U32 Q12, Q12, #16 132 VST1.16 D18[0], [R6], R9 133 VMLAL.S16 Q15, D6, D2 134 VST1.16 D18[1], [R6], R9 135 VMLAL.S16 Q12, D0, D3 136 VST1.16 D18[2], [R6], R9 137 VQSHL.S32 Q15, Q15, Q11 138 VST1.16 D18[3], [R6], R9 139 VQSHL.S32 Q12, Q12, Q11 140 VLD1.32 {D6, D7}, [R10], R12 141 142 143 VADDL.S16 Q7, D3, D12 144 145 VMULL.S32 Q8, D4, D14 146 VQMOVN.S64 D28, Q8 147 VMULL.S32 Q8, D5, D15 148 VQMOVN.S64 D29, Q8 149 VREV64.32 Q3, Q3 150 151 152 153 VADDL.S16 Q7, D2, D12 154 155 VMULL.S32 Q0, D4, D14 156 VQMOVN.S64 D16, Q0 157 VMULL.S32 Q0, D5, D15 158 VQMOVN.S64 D17, Q0 159 160 VLD2.16 {D2, D3}, [R8], R12 161 VQNEG.S32 Q0, Q3 162 VLD1.32 {D4, D5}, [R1]! 163 VQADD.S32 Q14, Q14, Q10 164 VUZP.16 D1, D0 165 VQADD.S32 Q8, Q8, Q10 166 VUZP.16 D7, D6 167 VQSUB.S32 Q13, Q15, Q14 168 VREV64.16 Q1, Q1 169 VQSUB.S32 Q9, Q12, Q8 170 VQSHL.S32 Q13, Q13, #2 171 VQSHL.S32 Q9, Q9, #2 172 VMULL.U16 Q15, D7, D2 173 VSHR.S32 Q13, Q13, #16 174 VUZP.16 D26, D27 175 VSHR.S32 Q9, Q9, #16 176 VST1.16 D26[0], [R11], R4 177 VMULL.U16 Q12, D1, D3 178 VUZP.16 D18, D19 179 VSHR.U32 Q15, Q15, #16 180 VST1.16 D26[1], [R11], R4 181 VMLAL.S16 Q15, D6, D2 @MLA 182 VST1.16 D26[2], [R11], R4 183 VSHR.U32 Q12, Q12, #16 184 VST1.16 D26[3], [R11], R4 185 VMLAL.S16 Q12, D0, D3 @MLA 186 VST1.16 D18[0], [R6], R9 187 VQSHL.S32 Q15, Q15, Q11 188 VST1.16 D18[1], [R6], R9 189 VQSHL.S32 Q12, Q12, Q11 190 VST1.16 D18[2], [R6], R9 191 192 193 VADDL.S16 Q7, D3, D12 194 195 VMULL.S32 Q8, D4, D14 196 VQMOVN.S64 D28, Q8 197 VMULL.S32 Q8, D5, D15 198 VQMOVN.S64 D29, Q8 199 200 VST1.16 D18[3], [R6], R9 201 202 203 VADDL.S16 Q7, D2, D12 204 205 VMULL.S32 Q0, D4, D14 206 VQMOVN.S64 D16, Q0 207 VMULL.S32 Q0, D5, D15 208 VQMOVN.S64 D17, Q0 209 210 VLD1.32 {D6, D7}, [R10], R12 211 VQADD.S32 Q14, Q14, Q10 212 VREV64.32 Q3, Q3 213 VQNEG.S32 Q0, Q3 214 VUZP.16 D1, D0 215 VQSUB.S32 Q13, Q15, Q14 216 VUZP.16 D7, D6 217 VQADD.S32 Q8, Q8, Q10 218 VLD2.16 {D2, D3}, [R8], R12 219 VQSUB.S32 Q9, Q12, Q8 220 VREV64.16 Q1, Q1 221 VQSHL.S32 Q13, Q13, #2 222 VLD1.32 {D4, D5}, [R1]! 223 VQSHL.S32 Q9, Q9, #2 224 VSHR.S32 Q13, Q13, #16 225 SUBS R5, R5, #8 226 VSHR.S32 Q9, Q9, #16 227 VUZP.16 D26, D27 228 VUZP.16 D18, D19 229 230 231 232 BGT LOOP_1 233 234 VST1.16 D26[0], [R11], R4 235 VMULL.U16 Q15, D7, D2 236 VST1.16 D26[1], [R11], R4 237 VMULL.U16 Q12, D1, D3 238 VST1.16 D26[2], [R11], R4 239 VSHR.U32 Q15, Q15, #16 240 VST1.16 D26[3], [R11], R4 241 VSHR.U32 Q12, Q12, #16 242 243 VST1.16 D18[0], [R6], R9 244 VMLAL.S16 Q15, D6, D2 245 VST1.16 D18[1], [R6], R9 246 VMLAL.S16 Q12, D0, D3 247 VST1.16 D18[2], [R6], R9 248 VQSHL.S32 Q15, Q15, Q11 249 VST1.16 D18[3], [R6], R9 250 VQSHL.S32 Q12, Q12, Q11 251 252 253 254 255 VADDL.S16 Q7, D3, D12 256 257 VMULL.S32 Q8, D4, D14 258 VQMOVN.S64 D28, Q8 259 VMULL.S32 Q8, D5, D15 260 VQMOVN.S64 D29, Q8 261 262 263 264 VADDL.S16 Q7, D2, D12 265 266 VMULL.S32 Q13, D4, D14 267 VQMOVN.S64 D16, Q13 268 VMULL.S32 Q13, D5, D15 269 VQMOVN.S64 D17, Q13 270 271 VQADD.S32 Q14, Q14, Q10 272 VQADD.S32 Q8, Q8, Q10 273 VQSUB.S32 Q13, Q15, Q14 274 VQSUB.S32 Q9, Q12, Q8 275 VQSHL.S32 Q13, Q13, #2 276 VQSHL.S32 Q9, Q9, #2 277 VSHR.S32 Q13, Q13, #16 278 VSHR.S32 Q9, Q9, #16 279 VUZP.16 D26, D27 280 281 VUZP.16 D18, D19 282 283 284 285 VST1.16 D26[0], [R11], R4 286 VST1.16 D26[1], [R11], R4 287 VST1.16 D26[2], [R11], R4 288 VST1.16 D26[3], [R11], R4 289 290 VST1.16 D18[0], [R6], R9 291 VST1.16 D18[1], [R6], R9 292 VST1.16 D18[2], [R6], R9 293 VST1.16 D18[3], [R6], R9 294 295 VPOP {d8 - d15} 296 LDMFD sp!, {R4-R12, R15} 297 298