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