1*15dc779aSAndroid Build Coastguard Worker@/****************************************************************************** 2*15dc779aSAndroid Build Coastguard Worker@ * 3*15dc779aSAndroid Build Coastguard Worker@ * Copyright (C) 2018 The Android Open Source Project 4*15dc779aSAndroid Build Coastguard Worker@ * 5*15dc779aSAndroid Build Coastguard Worker@ * Licensed under the Apache License, Version 2.0 (the "License"); 6*15dc779aSAndroid Build Coastguard Worker@ * you may not use this file except in compliance with the License. 7*15dc779aSAndroid Build Coastguard Worker@ * You may obtain a copy of the License at: 8*15dc779aSAndroid Build Coastguard Worker@ * 9*15dc779aSAndroid Build Coastguard Worker@ * http://www.apache.org/licenses/LICENSE-2.0 10*15dc779aSAndroid Build Coastguard Worker@ * 11*15dc779aSAndroid Build Coastguard Worker@ * Unless required by applicable law or agreed to in writing, software 12*15dc779aSAndroid Build Coastguard Worker@ * distributed under the License is distributed on an "AS IS" BASIS, 13*15dc779aSAndroid Build Coastguard Worker@ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14*15dc779aSAndroid Build Coastguard Worker@ * See the License for the specific language governing permissions and 15*15dc779aSAndroid Build Coastguard Worker@ * limitations under the License. 16*15dc779aSAndroid Build Coastguard Worker@ * 17*15dc779aSAndroid Build Coastguard Worker@ ***************************************************************************** 18*15dc779aSAndroid Build Coastguard Worker@ * Originally developed and contributed by Ittiam Systems Pvt. Ltd, Bangalore 19*15dc779aSAndroid Build Coastguard Worker@*/ 20*15dc779aSAndroid Build Coastguard Worker 21*15dc779aSAndroid Build Coastguard Worker 22*15dc779aSAndroid Build Coastguard Worker.text 23*15dc779aSAndroid Build Coastguard Worker.p2align 2 24*15dc779aSAndroid Build Coastguard Worker .global ixheaacd_over_lap_add2_armv7 25*15dc779aSAndroid Build Coastguard Worker 26*15dc779aSAndroid Build Coastguard Workerixheaacd_over_lap_add2_armv7: 27*15dc779aSAndroid Build Coastguard Worker 28*15dc779aSAndroid Build Coastguard Worker STMFD sp!, {R4-R12, R14} 29*15dc779aSAndroid Build Coastguard Worker VPUSH {d8 - d15} 30*15dc779aSAndroid Build Coastguard Worker 31*15dc779aSAndroid Build Coastguard Worker LDR R4, [SP, #104] 32*15dc779aSAndroid Build Coastguard Worker LDR R5, [SP, #108] 33*15dc779aSAndroid Build Coastguard Worker LDR R6, [SP, #112] 34*15dc779aSAndroid Build Coastguard Worker RSB R4, R4, #15 35*15dc779aSAndroid Build Coastguard Worker CMP R4, #31 36*15dc779aSAndroid Build Coastguard Worker MOVGT R4, #31 37*15dc779aSAndroid Build Coastguard Worker SUB R9, R4, #1 38*15dc779aSAndroid Build Coastguard Worker MOV R8, #1 39*15dc779aSAndroid Build Coastguard Worker MOV R8, R8, LSL R9 40*15dc779aSAndroid Build Coastguard Worker RSB R4, R4, #0 41*15dc779aSAndroid Build Coastguard Worker VDUP.32 Q11, R4 42*15dc779aSAndroid Build Coastguard Worker VDUP.32 Q10, R8 43*15dc779aSAndroid Build Coastguard Worker MOV R8, R5 44*15dc779aSAndroid Build Coastguard Worker SUB R12, R5, #1 45*15dc779aSAndroid Build Coastguard Worker MOV R9, R5, LSL #2 46*15dc779aSAndroid Build Coastguard Worker MOV R12, R12, LSL #2 47*15dc779aSAndroid Build Coastguard Worker ADD R10, R0, R9 48*15dc779aSAndroid Build Coastguard Worker ADD R7, R1, R12 49*15dc779aSAndroid Build Coastguard Worker VLD2.16 {D0, D1}, [R10]! 50*15dc779aSAndroid Build Coastguard Worker MOV R11, R6, LSL #2 51*15dc779aSAndroid Build Coastguard Worker SUB R7, R7, #12 52*15dc779aSAndroid Build Coastguard Worker ADD R4, R4, #1 53*15dc779aSAndroid Build Coastguard Worker MOV R12, #-16 54*15dc779aSAndroid Build Coastguard Worker VLD2.16 {D6, D7}, [R7], R12 55*15dc779aSAndroid Build Coastguard Worker MOV R4, #0x8000 56*15dc779aSAndroid Build Coastguard Worker VREV64.16 D4, D6 57*15dc779aSAndroid Build Coastguard Worker VREV64.16 D5, D7 58*15dc779aSAndroid Build Coastguard Worker MOV R4, R3 59*15dc779aSAndroid Build Coastguard Worker 60*15dc779aSAndroid Build Coastguard Worker MOV R9, R2 61*15dc779aSAndroid Build Coastguard Worker VLD2.16 {D2, D3}, [R3]! 62*15dc779aSAndroid Build Coastguard Worker 63*15dc779aSAndroid Build Coastguard Worker VMULL.U16 Q13, D0, D2 64*15dc779aSAndroid Build Coastguard Worker VMLSL.U16 Q13, D4, D3 65*15dc779aSAndroid Build Coastguard Worker VLD2.16 {D8, D9}, [R10]! 66*15dc779aSAndroid Build Coastguard Worker VSHR.S32 Q13, Q13, #16 67*15dc779aSAndroid Build Coastguard Worker VLD2.16 {D10, D11}, [R3]! 68*15dc779aSAndroid Build Coastguard Worker VMLAL.S16 Q13, D1, D2 69*15dc779aSAndroid Build Coastguard Worker VMLSL.S16 Q13, D5, D3 70*15dc779aSAndroid Build Coastguard Worker VLD2.16 {D14, D15}, [R7], R12 71*15dc779aSAndroid Build Coastguard Worker VREV64.16 Q6, Q7 72*15dc779aSAndroid Build Coastguard Worker VQADD.S32 Q12, Q13, Q10 73*15dc779aSAndroid Build Coastguard Worker VQSHL.S32 Q12, Q12, Q11 74*15dc779aSAndroid Build Coastguard Worker SUB R8, R8, #8 75*15dc779aSAndroid Build Coastguard Worker 76*15dc779aSAndroid Build Coastguard Worker 77*15dc779aSAndroid Build Coastguard WorkerLOOP_1: 78*15dc779aSAndroid Build Coastguard Worker 79*15dc779aSAndroid Build Coastguard Worker VLD2.16 {D0, D1}, [R10]! 80*15dc779aSAndroid Build Coastguard Worker VMULL.U16 Q9, D8, D10 81*15dc779aSAndroid Build Coastguard Worker VLD2.16 {D2, D3}, [R3]! 82*15dc779aSAndroid Build Coastguard Worker VMLSL.U16 Q9, D12, D11 83*15dc779aSAndroid Build Coastguard Worker VLD2.16 {D6, D7}, [R7], R12 84*15dc779aSAndroid Build Coastguard Worker VMULL.U16 Q13, D0, D2 85*15dc779aSAndroid Build Coastguard Worker VREV64.16 D4, D6 86*15dc779aSAndroid Build Coastguard Worker VMLSL.U16 Q13, D4, D3 87*15dc779aSAndroid Build Coastguard Worker VREV64.16 D5, D7 88*15dc779aSAndroid Build Coastguard Worker VSHR.S32 Q9, Q9, #16 89*15dc779aSAndroid Build Coastguard Worker VST1.32 {D24[0]}, [R2], R11 90*15dc779aSAndroid Build Coastguard Worker VMLAL.S16 Q9, D9, D10 91*15dc779aSAndroid Build Coastguard Worker VST1.32 {D24[1]}, [R2], R11 92*15dc779aSAndroid Build Coastguard Worker VSHR.S32 Q13, Q13, #16 93*15dc779aSAndroid Build Coastguard Worker VST1.32 {D25[0]}, [R2], R11 94*15dc779aSAndroid Build Coastguard Worker VMLAL.S16 Q13, D1, D2 95*15dc779aSAndroid Build Coastguard Worker 96*15dc779aSAndroid Build Coastguard Worker VST1.32 {D25[1]}, [R2], R11 97*15dc779aSAndroid Build Coastguard Worker VMLSL.S16 Q9, D13, D11 98*15dc779aSAndroid Build Coastguard Worker VMLSL.S16 Q13, D5, D3 99*15dc779aSAndroid Build Coastguard Worker 100*15dc779aSAndroid Build Coastguard Worker VLD2.16 {D8, D9}, [R10]! 101*15dc779aSAndroid Build Coastguard Worker VLD2.16 {D10, D11}, [R3]! 102*15dc779aSAndroid Build Coastguard Worker 103*15dc779aSAndroid Build Coastguard Worker 104*15dc779aSAndroid Build Coastguard Worker VLD2.16 {D14, D15}, [R7], R12 105*15dc779aSAndroid Build Coastguard Worker VQADD.S32 Q8, Q9, Q10 106*15dc779aSAndroid Build Coastguard Worker VREV64.16 Q6, Q7 107*15dc779aSAndroid Build Coastguard Worker VQADD.S32 Q12, Q13, Q10 108*15dc779aSAndroid Build Coastguard Worker VQSHL.S32 Q8, Q8, Q11 109*15dc779aSAndroid Build Coastguard Worker VST1.32 D16[0], [R2], R11 110*15dc779aSAndroid Build Coastguard Worker VQSHL.S32 Q12, Q12, Q11 111*15dc779aSAndroid Build Coastguard Worker 112*15dc779aSAndroid Build Coastguard Worker 113*15dc779aSAndroid Build Coastguard Worker SUBS R8, R8, #8 114*15dc779aSAndroid Build Coastguard Worker 115*15dc779aSAndroid Build Coastguard Worker VST1.32 D16[1], [R2], R11 116*15dc779aSAndroid Build Coastguard Worker VST1.32 D17[0], [R2], R11 117*15dc779aSAndroid Build Coastguard Worker VST1.32 D17[1], [R2], R11 118*15dc779aSAndroid Build Coastguard Worker 119*15dc779aSAndroid Build Coastguard Worker 120*15dc779aSAndroid Build Coastguard Worker BGT LOOP_1 121*15dc779aSAndroid Build Coastguard Worker 122*15dc779aSAndroid Build Coastguard Worker 123*15dc779aSAndroid Build Coastguard Worker VST1.32 D24[0], [R2], R11 124*15dc779aSAndroid Build Coastguard Worker VMULL.U16 Q9, D8, D10 125*15dc779aSAndroid Build Coastguard Worker VMLSL.U16 Q9, D12, D11 126*15dc779aSAndroid Build Coastguard Worker VST1.32 D24[1], [R2], R11 127*15dc779aSAndroid Build Coastguard Worker VST1.32 D25[0], [R2], R11 128*15dc779aSAndroid Build Coastguard Worker VSHR.S32 Q9, Q9, #16 129*15dc779aSAndroid Build Coastguard Worker VST1.32 D25[1], [R2], R11 130*15dc779aSAndroid Build Coastguard Worker VMLAL.S16 Q9, D9, D10 131*15dc779aSAndroid Build Coastguard Worker VMLSL.S16 Q9, D13, D11 132*15dc779aSAndroid Build Coastguard Worker MOV R12, #12 133*15dc779aSAndroid Build Coastguard Worker SMULBB R7, R5, R6 134*15dc779aSAndroid Build Coastguard Worker MOV R10, R5, LSL #1 135*15dc779aSAndroid Build Coastguard Worker VQADD.S32 Q8, Q9, Q10 136*15dc779aSAndroid Build Coastguard Worker VQSHL.S32 Q8, Q8, Q11 137*15dc779aSAndroid Build Coastguard Worker 138*15dc779aSAndroid Build Coastguard Worker VST1.32 D16[0], [R2], R11 139*15dc779aSAndroid Build Coastguard Worker MOV R7, R7, LSL #2 140*15dc779aSAndroid Build Coastguard Worker 141*15dc779aSAndroid Build Coastguard Worker VST1.32 D16[1], [R2], R11 142*15dc779aSAndroid Build Coastguard Worker ADD R7, R7, R9 143*15dc779aSAndroid Build Coastguard Worker 144*15dc779aSAndroid Build Coastguard Worker VST1.32 D17[0], [R2], R11 145*15dc779aSAndroid Build Coastguard Worker VST1.32 D17[1], [R2], R11 146*15dc779aSAndroid Build Coastguard Worker 147*15dc779aSAndroid Build Coastguard Worker SUB R11, R10, #1 148*15dc779aSAndroid Build Coastguard Worker MOV R10, R11, LSL #2 149*15dc779aSAndroid Build Coastguard Worker ADD R10, R0, R10 150*15dc779aSAndroid Build Coastguard Worker MOV R11, R11, LSL #1 151*15dc779aSAndroid Build Coastguard Worker SUB R10, R10, R12 152*15dc779aSAndroid Build Coastguard Worker MOV R8, R6, LSL #2 153*15dc779aSAndroid Build Coastguard Worker MOV R12, #-16 154*15dc779aSAndroid Build Coastguard Worker ADD R11, R11, R4 155*15dc779aSAndroid Build Coastguard Worker 156*15dc779aSAndroid Build Coastguard Worker VLD1.32 {D6, D7}, [R10], R12 157*15dc779aSAndroid Build Coastguard Worker SUB R11, R11, #14 158*15dc779aSAndroid Build Coastguard Worker 159*15dc779aSAndroid Build Coastguard Worker 160*15dc779aSAndroid Build Coastguard Worker VREV64.32 D0, D6 161*15dc779aSAndroid Build Coastguard Worker VREV64.32 D1, D7 162*15dc779aSAndroid Build Coastguard Worker VQNEG.S32 D0, D0 163*15dc779aSAndroid Build Coastguard Worker VQNEG.S32 D1, D1 164*15dc779aSAndroid Build Coastguard Worker VUZP.16 D1, D0 165*15dc779aSAndroid Build Coastguard Worker VLD2.16 {D2, D3}, [R11], R12 166*15dc779aSAndroid Build Coastguard Worker VREV64.16 D2, D2 167*15dc779aSAndroid Build Coastguard Worker VREV64.16 D3, D3 168*15dc779aSAndroid Build Coastguard Worker 169*15dc779aSAndroid Build Coastguard Worker VLD2.16 {D4, D5}, [R1]! 170*15dc779aSAndroid Build Coastguard Worker 171*15dc779aSAndroid Build Coastguard Worker VMULL.U16 Q13, D1, D3 172*15dc779aSAndroid Build Coastguard Worker VMLSL.U16 Q13, D4, D2 173*15dc779aSAndroid Build Coastguard Worker VSHR.S32 Q13, Q13, #16 174*15dc779aSAndroid Build Coastguard Worker VMLAL.S16 Q13, D0, D3 175*15dc779aSAndroid Build Coastguard Worker VMLSL.S16 Q13, D5, D2 176*15dc779aSAndroid Build Coastguard Worker @VQSHL.S32 Q12,Q13,Q11 177*15dc779aSAndroid Build Coastguard Worker @VQADD.S32 Q12,Q12,Q10 178*15dc779aSAndroid Build Coastguard Worker @VSHR.S32 Q12,Q12,#16 179*15dc779aSAndroid Build Coastguard Worker VQADD.S32 Q12, Q13, Q10 180*15dc779aSAndroid Build Coastguard Worker VQSHL.S32 Q12, Q12, Q11 181*15dc779aSAndroid Build Coastguard Worker VUZP.16 D24, D25 182*15dc779aSAndroid Build Coastguard Worker 183*15dc779aSAndroid Build Coastguard Worker 184*15dc779aSAndroid Build Coastguard Worker VLD1.32 {D14, D15}, [R10], R12 185*15dc779aSAndroid Build Coastguard Worker VMULL.U16 Q13, D1, D3 186*15dc779aSAndroid Build Coastguard Worker VMLSL.U16 Q13, D4, D2 187*15dc779aSAndroid Build Coastguard Worker VREV64.32 Q4, Q7 188*15dc779aSAndroid Build Coastguard Worker VQNEG.S32 Q4, Q4 189*15dc779aSAndroid Build Coastguard Worker VLD2.16 {D10, D11}, [R11], R12 190*15dc779aSAndroid Build Coastguard Worker VSHR.S32 Q13, Q13, #16 191*15dc779aSAndroid Build Coastguard Worker VLD2.16 {D12, D13}, [R1]! 192*15dc779aSAndroid Build Coastguard Worker VMLAL.S16 Q13, D0, D3 193*15dc779aSAndroid Build Coastguard Worker VMLSL.S16 Q13, D5, D2 194*15dc779aSAndroid Build Coastguard Worker VUZP.16 D9, D8 195*15dc779aSAndroid Build Coastguard Worker VREV64.16 Q5, Q5 196*15dc779aSAndroid Build Coastguard Worker VQADD.S32 Q12, Q13, Q10 197*15dc779aSAndroid Build Coastguard Worker SUB R5, R5, #8 198*15dc779aSAndroid Build Coastguard Worker VQSHL.S32 Q12, Q12, Q11 199*15dc779aSAndroid Build Coastguard Worker 200*15dc779aSAndroid Build Coastguard Worker 201*15dc779aSAndroid Build Coastguard Worker 202*15dc779aSAndroid Build Coastguard Worker 203*15dc779aSAndroid Build Coastguard Worker 204*15dc779aSAndroid Build Coastguard WorkerLOOP_2: 205*15dc779aSAndroid Build Coastguard Worker 206*15dc779aSAndroid Build Coastguard Worker 207*15dc779aSAndroid Build Coastguard Worker VLD1.32 {D6, D7}, [R10], R12 208*15dc779aSAndroid Build Coastguard Worker VMULL.U16 Q9, D9, D11 209*15dc779aSAndroid Build Coastguard Worker VREV64.32 Q0, Q3 210*15dc779aSAndroid Build Coastguard Worker VQNEG.S32 Q0, Q0 211*15dc779aSAndroid Build Coastguard Worker VUZP.16 D1, D0 212*15dc779aSAndroid Build Coastguard Worker VLD2.16 {D2, D3}, [R11], R12 213*15dc779aSAndroid Build Coastguard Worker VREV64.16 Q1, Q1 214*15dc779aSAndroid Build Coastguard Worker 215*15dc779aSAndroid Build Coastguard Worker VLD2.16 {D4, D5}, [R1]! 216*15dc779aSAndroid Build Coastguard Worker VMLSL.U16 Q9, D12, D10 217*15dc779aSAndroid Build Coastguard Worker VST1.32 D24[0], [R7], R8 218*15dc779aSAndroid Build Coastguard Worker VMULL.U16 Q13, D1, D3 219*15dc779aSAndroid Build Coastguard Worker VST1.32 D24[1], [R7], R8 220*15dc779aSAndroid Build Coastguard Worker VSHR.S32 Q9, Q9, #16 221*15dc779aSAndroid Build Coastguard Worker VST1.32 D25[0], [R7], R8 222*15dc779aSAndroid Build Coastguard Worker VMLSL.U16 Q13, D4, D2 223*15dc779aSAndroid Build Coastguard Worker VST1.32 D25[1], [R7], R8 224*15dc779aSAndroid Build Coastguard Worker VMLAL.S16 Q9, D8, D11 225*15dc779aSAndroid Build Coastguard Worker VLD1.32 {D14, D15}, [R10], R12 226*15dc779aSAndroid Build Coastguard Worker VSHR.S32 Q13, Q13, #16 227*15dc779aSAndroid Build Coastguard Worker VMLSL.S16 Q9, D13, D10 228*15dc779aSAndroid Build Coastguard Worker VLD2.16 {D10, D11}, [R11], R12 229*15dc779aSAndroid Build Coastguard Worker VMLAL.S16 Q13, D0, D3 230*15dc779aSAndroid Build Coastguard Worker VMLSL.S16 Q13, D5, D2 231*15dc779aSAndroid Build Coastguard Worker VREV64.32 Q4, Q7 232*15dc779aSAndroid Build Coastguard Worker VLD2.16 {D12, D13}, [R1]! 233*15dc779aSAndroid Build Coastguard Worker VQNEG.S32 Q4, Q4 234*15dc779aSAndroid Build Coastguard Worker VREV64.16 Q5, Q5 235*15dc779aSAndroid Build Coastguard Worker VQADD.S32 Q8, Q9, Q10 236*15dc779aSAndroid Build Coastguard Worker VUZP.16 D9, D8 237*15dc779aSAndroid Build Coastguard Worker VQADD.S32 Q12, Q13, Q10 238*15dc779aSAndroid Build Coastguard Worker VQSHL.S32 Q8, Q8, Q11 239*15dc779aSAndroid Build Coastguard Worker SUBS R5, R5, #8 240*15dc779aSAndroid Build Coastguard Worker VST1.32 D16[0], [R7], R8 241*15dc779aSAndroid Build Coastguard Worker VQSHL.S32 Q12, Q12, Q11 242*15dc779aSAndroid Build Coastguard Worker VST1.32 D16[1], [R7], R8 243*15dc779aSAndroid Build Coastguard Worker 244*15dc779aSAndroid Build Coastguard Worker VST1.32 D17[0], [R7], R8 245*15dc779aSAndroid Build Coastguard Worker VST1.32 D17[1], [R7], R8 246*15dc779aSAndroid Build Coastguard Worker 247*15dc779aSAndroid Build Coastguard Worker BGT LOOP_2 248*15dc779aSAndroid Build Coastguard Worker 249*15dc779aSAndroid Build Coastguard Worker VST1.32 D24[0], [R7], R8 250*15dc779aSAndroid Build Coastguard Worker VMULL.U16 Q9, D9, D11 251*15dc779aSAndroid Build Coastguard Worker VMLSL.U16 Q9, D12, D10 252*15dc779aSAndroid Build Coastguard Worker VST1.32 D24[1], [R7], R8 253*15dc779aSAndroid Build Coastguard Worker VST1.32 D25[0], [R7], R8 254*15dc779aSAndroid Build Coastguard Worker VSHR.S32 Q9, Q9, #16 255*15dc779aSAndroid Build Coastguard Worker VST1.32 D25[1], [R7], R8 256*15dc779aSAndroid Build Coastguard Worker 257*15dc779aSAndroid Build Coastguard Worker VMLAL.S16 Q9, D8, D11 258*15dc779aSAndroid Build Coastguard Worker VMLSL.S16 Q9, D13, D10 259*15dc779aSAndroid Build Coastguard Worker VQADD.S32 Q8, Q9, Q10 260*15dc779aSAndroid Build Coastguard Worker VQSHL.S32 Q8, Q8, Q11 261*15dc779aSAndroid Build Coastguard Worker 262*15dc779aSAndroid Build Coastguard Worker VST1.32 D16[0], [R7], R8 263*15dc779aSAndroid Build Coastguard Worker VST1.32 D16[1], [R7], R8 264*15dc779aSAndroid Build Coastguard Worker VST1.32 D17[0], [R7], R8 265*15dc779aSAndroid Build Coastguard Worker VST1.32 D17[1], [R7], R8 266*15dc779aSAndroid Build Coastguard Worker 267*15dc779aSAndroid Build Coastguard Worker VPOP {d8 - d15} 268*15dc779aSAndroid Build Coastguard Worker LDMFD sp!, {R4-R12, R15} 269