Merge commit '502512ea0f179165782777265f441d4061ff6012'
[ffmpeg.git] / libavcodec / aarch64 / neon.S
1 /*
2  * This file is part of FFmpeg.
3  *
4  * FFmpeg is free software; you can redistribute it and/or
5  * modify it under the terms of the GNU Lesser General Public
6  * License as published by the Free Software Foundation; either
7  * version 2.1 of the License, or (at your option) any later version.
8  *
9  * FFmpeg is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
12  * Lesser General Public License for more details.
13  *
14  * You should have received a copy of the GNU Lesser General Public
15  * License along with FFmpeg; if not, write to the Free Software
16  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
17  */
18
19 .macro  transpose_8x8B  r0, r1, r2, r3, r4, r5, r6, r7, r8, r9
20         trn1            \r8\().8B,  \r0\().8B,  \r1\().8B
21         trn2            \r9\().8B,  \r0\().8B,  \r1\().8B
22         trn1            \r1\().8B,  \r2\().8B,  \r3\().8B
23         trn2            \r3\().8B,  \r2\().8B,  \r3\().8B
24         trn1            \r0\().8B,  \r4\().8B,  \r5\().8B
25         trn2            \r5\().8B,  \r4\().8B,  \r5\().8B
26         trn1            \r2\().8B,  \r6\().8B,  \r7\().8B
27         trn2            \r7\().8B,  \r6\().8B,  \r7\().8B
28
29         trn1            \r4\().4H,  \r0\().4H,  \r2\().4H
30         trn2            \r2\().4H,  \r0\().4H,  \r2\().4H
31         trn1            \r6\().4H,  \r5\().4H,  \r7\().4H
32         trn2            \r7\().4H,  \r5\().4H,  \r7\().4H
33         trn1            \r5\().4H,  \r9\().4H,  \r3\().4H
34         trn2            \r9\().4H,  \r9\().4H,  \r3\().4H
35         trn1            \r3\().4H,  \r8\().4H,  \r1\().4H
36         trn2            \r8\().4H,  \r8\().4H,  \r1\().4H
37
38         trn1            \r0\().2S,  \r3\().2S,  \r4\().2S
39         trn2            \r4\().2S,  \r3\().2S,  \r4\().2S
40
41         trn1            \r1\().2S,  \r5\().2S,  \r6\().2S
42         trn2            \r5\().2S,  \r5\().2S,  \r6\().2S
43
44         trn2            \r6\().2S,  \r8\().2S,  \r2\().2S
45         trn1            \r2\().2S,  \r8\().2S,  \r2\().2S
46
47         trn1            \r3\().2S,  \r9\().2S,  \r7\().2S
48         trn2            \r7\().2S,  \r9\().2S,  \r7\().2S
49 .endm
50
51 .macro  transpose_8x16B r0, r1, r2, r3, r4, r5, r6, r7, t0, t1
52         trn1            \t0\().16B, \r0\().16B, \r1\().16B
53         trn2            \t1\().16B, \r0\().16B, \r1\().16B
54         trn1            \r1\().16B, \r2\().16B, \r3\().16B
55         trn2            \r3\().16B, \r2\().16B, \r3\().16B
56         trn1            \r0\().16B, \r4\().16B, \r5\().16B
57         trn2            \r5\().16B, \r4\().16B, \r5\().16B
58         trn1            \r2\().16B, \r6\().16B, \r7\().16B
59         trn2            \r7\().16B, \r6\().16B, \r7\().16B
60
61         trn1            \r4\().8H,  \r0\().8H,  \r2\().8H
62         trn2            \r2\().8H,  \r0\().8H,  \r2\().8H
63         trn1            \r6\().8H,  \r5\().8H,  \r7\().8H
64         trn2            \r7\().8H,  \r5\().8H,  \r7\().8H
65         trn1            \r5\().8H,  \t1\().8H,  \r3\().8H
66         trn2            \t1\().8H,  \t1\().8H,  \r3\().8H
67         trn1            \r3\().8H,  \t0\().8H,  \r1\().8H
68         trn2            \t0\().8H,  \t0\().8H,  \r1\().8H
69
70         trn1            \r0\().4S,  \r3\().4S,  \r4\().4S
71         trn2            \r4\().4S,  \r3\().4S,  \r4\().4S
72
73         trn1            \r1\().4S,  \r5\().4S,  \r6\().4S
74         trn2            \r5\().4S,  \r5\().4S,  \r6\().4S
75
76         trn2            \r6\().4S,  \t0\().4S,  \r2\().4S
77         trn1            \r2\().4S,  \t0\().4S,  \r2\().4S
78
79         trn1            \r3\().4S,  \t1\().4S,  \r7\().4S
80         trn2            \r7\().4S,  \t1\().4S,  \r7\().4S
81 .endm
82
83 .macro  transpose_4x16B r0, r1, r2, r3, t4, t5, t6, t7
84         trn1            \t4\().16B, \r0\().16B,  \r1\().16B
85         trn2            \t5\().16B, \r0\().16B,  \r1\().16B
86         trn1            \t6\().16B, \r2\().16B,  \r3\().16B
87         trn2            \t7\().16B, \r2\().16B,  \r3\().16B
88
89         trn1            \r0\().8H,  \t4\().8H,  \t6\().8H
90         trn2            \r2\().8H,  \t4\().8H,  \t6\().8H
91         trn1            \r1\().8H,  \t5\().8H,  \t7\().8H
92         trn2            \r3\().8H,  \t5\().8H,  \t7\().8H
93 .endm
94
95 .macro  transpose_4x8B  r0, r1, r2, r3, t4, t5, t6, t7
96         trn1            \t4\().8B,  \r0\().8B,  \r1\().8B
97         trn2            \t5\().8B,  \r0\().8B,  \r1\().8B
98         trn1            \t6\().8B,  \r2\().8B,  \r3\().8B
99         trn2            \t7\().8B,  \r2\().8B,  \r3\().8B
100
101         trn1            \r0\().4H,  \t4\().4H,  \t6\().4H
102         trn2            \r2\().4H,  \t4\().4H,  \t6\().4H
103         trn1            \r1\().4H,  \t5\().4H,  \t7\().4H
104         trn2            \r3\().4H,  \t5\().4H,  \t7\().4H
105 .endm
106
107 .macro  transpose_4x4H  r0, r1, r2, r3, r4, r5, r6, r7
108         trn1            \r4\().4H,  \r0\().4H,  \r1\().4H
109         trn2            \r5\().4H,  \r0\().4H,  \r1\().4H
110         trn1            \r7\().4H,  \r3\().4H,  \r2\().4H
111         trn2            \r6\().4H,  \r3\().4H,  \r2\().4H
112         trn1            \r0\().2S,  \r4\().2S,  \r7\().2S
113         trn2            \r3\().2S,  \r4\().2S,  \r7\().2S
114         trn1            \r1\().2S,  \r5\().2S,  \r6\().2S
115         trn2            \r2\().2S,  \r5\().2S,  \r6\().2S
116 .endm
117
118 .macro  transpose_8x8H  r0, r1, r2, r3, r4, r5, r6, r7, r8, r9
119         trn1            \r8\().8H,  \r0\().8H,  \r1\().8H
120         trn2            \r9\().8H,  \r0\().8H,  \r1\().8H
121         trn1            \r1\().8H,  \r2\().8H,  \r3\().8H
122         trn2            \r3\().8H,  \r2\().8H,  \r3\().8H
123         trn1            \r0\().8H,  \r4\().8H,  \r5\().8H
124         trn2            \r5\().8H,  \r4\().8H,  \r5\().8H
125         trn1            \r2\().8H,  \r6\().8H,  \r7\().8H
126         trn2            \r7\().8H,  \r6\().8H,  \r7\().8H
127
128         trn1            \r4\().4S,  \r0\().4S,  \r2\().4S
129         trn2            \r2\().4S,  \r0\().4S,  \r2\().4S
130         trn1            \r6\().4S,  \r5\().4S,  \r7\().4S
131         trn2            \r7\().4S,  \r5\().4S,  \r7\().4S
132         trn1            \r5\().4S,  \r9\().4S,  \r3\().4S
133         trn2            \r9\().4S,  \r9\().4S,  \r3\().4S
134         trn1            \r3\().4S,  \r8\().4S,  \r1\().4S
135         trn2            \r8\().4S,  \r8\().4S,  \r1\().4S
136
137         trn1            \r0\().2D,  \r3\().2D,  \r4\().2D
138         trn2            \r4\().2D,  \r3\().2D,  \r4\().2D
139
140         trn1            \r1\().2D,  \r5\().2D,  \r6\().2D
141         trn2            \r5\().2D,  \r5\().2D,  \r6\().2D
142
143         trn2            \r6\().2D,  \r8\().2D,  \r2\().2D
144         trn1            \r2\().2D,  \r8\().2D,  \r2\().2D
145
146         trn1            \r3\().2D,  \r9\().2D,  \r7\().2D
147         trn2            \r7\().2D,  \r9\().2D,  \r7\().2D
148
149 .endm