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_neg_shift_spec_armv7 25 26ixheaacd_neg_shift_spec_armv7: 27 STMFD sp!, {R4-R12, R14} 28 VPUSH {D8 - D15} 29 MOV R5, #448 30 SUB R6, R5, #1 31 MOV R6, R6, LSL #2 32 ADD R6, R6, R0 33 MOV R8, #-16 34 SUB R6, R6, #12 35 MOV R7, R3, LSL #1 36 VDUP.32 Q1, R2 37 MOV R4, #0x8000 38 VDUP.32 Q2, R4 39 40 VLD1.32 {D0, D1}, [R6], R8 41 VQNEG.S32 Q0, Q0 42 43 44 VLD1.32 {D6, D7}, [R6], R8 45 VQSHL.S32 Q15, Q0, Q1 46 VQADD.S32 Q14, Q15, Q2 47 VSHR.S32 Q13, Q14, #16 48 VREV64.32 Q13, Q13 49 SUB R5, R5, #8 50 51 VUZP.16 D27, D26 52 VQNEG.S32 Q3, Q3 53 54 55LOOP_1: 56 57 58 VST1.16 D27[0], [R1], R7 59 VQSHL.S32 Q12, Q3, Q1 60 VLD1.32 {D0, D1}, [R6], R8 61 VST1.16 D27[1], [R1], R7 62 VQADD.S32 Q11, Q12, Q2 63 VST1.16 D27[2], [R1], R7 64 VQNEG.S32 Q0, Q0 65 VST1.16 D27[3], [R1], R7 66 VSHR.S32 Q10, Q11, #16 67 VREV64.32 Q10, Q10 68 SUBS R5, R5, #8 69 70 71 VUZP.16 D21, D20 72 VQSHL.S32 Q15, Q0, Q1 73 VST1.16 D21[0], [R1], R7 74 VLD1.32 {D6, D7}, [R6], R8 75 VQADD.S32 Q14, Q15, Q2 76 VST1.16 D21[1], [R1], R7 77 VSHR.S32 Q13, Q14, #16 78 VST1.16 D21[2], [R1], R7 79 VREV64.32 Q13, Q13 80 VST1.16 D21[3], [R1], R7 81 82 83 VUZP.16 D27, D26 84 VQNEG.S32 Q3, Q3 85 86 87 88 BGT LOOP_1 89 90 VST1.16 D27[0], [R1], R7 91 VQSHL.S32 Q12, Q3, Q1 92 VST1.16 D27[1], [R1], R7 93 VST1.16 D27[2], [R1], R7 94 VQADD.S32 Q11, Q12, Q2 95 VST1.16 D27[3], [R1], R7 96 VSHR.S32 Q10, Q11, #16 97 98 99 VREV64.32 Q10, Q10 100 101 VUZP.16 D21, D20 102 103 VST1.16 D21[0], [R1], R7 104 VST1.16 D21[1], [R1], R7 105 VST1.16 D21[2], [R1], R7 106 VST1.16 D21[3], [R1], R7 107 VPOP {D8 - D15} 108 LDMFD sp!, {R4-R12, R15} 109.end 110 111