Merge commit 'd5dd8c7bf0f0d77c581db3236e0d938f06fd5591'
[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_4x4H  r0, r1, r2, r3, r4, r5, r6, r7
84         trn1            \r4\().4H,  \r0\().4H,  \r1\().4H
85         trn2            \r5\().4H,  \r0\().4H,  \r1\().4H
86         trn1            \r7\().4H,  \r3\().4H,  \r2\().4H
87         trn2            \r6\().4H,  \r3\().4H,  \r2\().4H
88         trn1            \r0\().2S,  \r4\().2S,  \r7\().2S
89         trn2            \r3\().2S,  \r4\().2S,  \r7\().2S
90         trn1            \r1\().2S,  \r5\().2S,  \r6\().2S
91         trn2            \r2\().2S,  \r5\().2S,  \r6\().2S
92 .endm
93
94 .macro  transpose_8x8H  r0, r1, r2, r3, r4, r5, r6, r7, r8, r9
95         trn1            \r8\().8H,  \r0\().8H,  \r1\().8H
96         trn2            \r9\().8H,  \r0\().8H,  \r1\().8H
97         trn1            \r1\().8H,  \r2\().8H,  \r3\().8H
98         trn2            \r3\().8H,  \r2\().8H,  \r3\().8H
99         trn1            \r0\().8H,  \r4\().8H,  \r5\().8H
100         trn2            \r5\().8H,  \r4\().8H,  \r5\().8H
101         trn1            \r2\().8H,  \r6\().8H,  \r7\().8H
102         trn2            \r7\().8H,  \r6\().8H,  \r7\().8H
103
104         trn1            \r4\().4S,  \r0\().4S,  \r2\().4S
105         trn2            \r2\().4S,  \r0\().4S,  \r2\().4S
106         trn1            \r6\().4S,  \r5\().4S,  \r7\().4S
107         trn2            \r7\().4S,  \r5\().4S,  \r7\().4S
108         trn1            \r5\().4S,  \r9\().4S,  \r3\().4S
109         trn2            \r9\().4S,  \r9\().4S,  \r3\().4S
110         trn1            \r3\().4S,  \r8\().4S,  \r1\().4S
111         trn2            \r8\().4S,  \r8\().4S,  \r1\().4S
112
113         trn1            \r0\().2D,  \r3\().2D,  \r4\().2D
114         trn2            \r4\().2D,  \r3\().2D,  \r4\().2D
115
116         trn1            \r1\().2D,  \r5\().2D,  \r6\().2D
117         trn2            \r5\().2D,  \r5\().2D,  \r6\().2D
118
119         trn2            \r6\().2D,  \r8\().2D,  \r2\().2D
120         trn1            \r2\().2D,  \r8\().2D,  \r2\().2D
121
122         trn1            \r3\().2D,  \r9\().2D,  \r7\().2D
123         trn2            \r7\().2D,  \r9\().2D,  \r7\().2D
124
125 .endm