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    .global ixheaacd_calc_post_twid_armv7
26ixheaacd_calc_post_twid_armv7:
27
28    STMFD           sp!, {r4-r12, r14}
29    VPUSH           {D8-D15}
30    LDR             R4, [SP, #104]
31    LDR             R5, [SP, #108]
32    ADD             R6, R0, R3, LSL #3
33    SUB             R6, R6, #4
34    MOV             R7, #-8
35    MOV             R8, #8
36
37LOOP1:
38    VLD1.32         {D0, D1}, [R4]!
39    VLD1.32         {D2, D3}, [R5]!
40    VLD1.32         {D4, D5}, [R1]!
41    VLD1.32         {D6, D7}, [R2]!
42
43    VMULL.S32       Q4, D4, D0
44    VMULL.S32       Q5, D6, D2
45    VMULL.S32       Q6, D6, D0
46    VMULL.S32       Q7, D4, D2
47    VMULL.S32       Q8, D5, D1
48    VMULL.S32       Q9, D7, D3
49    VMULL.S32       Q10, D7, D1
50    VMULL.S32       Q11, D5, D3
51
52    VSHRN.S64       D6, Q4, #32
53    VSHRN.S64       D8, Q5, #32
54    VSHRN.S64       D10, Q6, #32
55    VSHRN.S64       D12, Q7, #32
56    VSHRN.S64       D7, Q8, #32
57    VSHRN.S64       D9, Q9, #32
58    VSHRN.S64       D11, Q10, #32
59    VSHRN.S64       D13, Q11, #32
60
61    VSUB.I32        D0, D6, D8
62    VADD.I32        D1, D10, D12
63    VSUB.I32        D2, D7, D9
64    VADD.I32        D3, D11, D13
65
66    VNEG.S32        Q0, Q0
67    VNEG.S32        Q1, Q1
68    SUBS            R3, R3, #4
69
70    VST1.32         {D0[0]}, [R0], R8
71    VST1.32         {D1[0]}, [R6], R7
72    VST1.32         {D0[1]}, [R0], R8
73    VST1.32         {D1[1]}, [R6], R7
74
75    VST1.32         {D2[0]}, [R0], R8
76    VST1.32         {D3[0]}, [R6], R7
77    VST1.32         {D2[1]}, [R0], R8
78    VST1.32         {D3[1]}, [R6], R7
79    BGT             LOOP1
80    VPOP            {D8-D15}
81    LDMFD           sp!, {r4-r12, r15}
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110