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            \r6\().4H,  \r2\().4H,  \r3\().4H
111        trn2            \r7\().4H,  \r2\().4H,  \r3\().4H
112
113        trn1            \r0\().2S,  \r4\().2S,  \r6\().2S
114        trn2            \r2\().2S,  \r4\().2S,  \r6\().2S
115        trn1            \r1\().2S,  \r5\().2S,  \r7\().2S
116        trn2            \r3\().2S,  \r5\().2S,  \r7\().2S
117.endm
118
119.macro transpose_4x8H r0, r1, r2, r3, t4, t5, t6, t7
120        trn1            \t4\().8H,  \r0\().8H,  \r1\().8H
121        trn2            \t5\().8H,  \r0\().8H,  \r1\().8H
122        trn1            \t6\().8H,  \r2\().8H,  \r3\().8H
123        trn2            \t7\().8H,  \r2\().8H,  \r3\().8H
124
125        trn1            \r0\().4S,  \t4\().4S,  \t6\().4S
126        trn2            \r2\().4S,  \t4\().4S,  \t6\().4S
127        trn1            \r1\().4S,  \t5\().4S,  \t7\().4S
128        trn2            \r3\().4S,  \t5\().4S,  \t7\().4S
129.endm
130
131.macro  transpose_8x8H  r0, r1, r2, r3, r4, r5, r6, r7, r8, r9
132        trn1            \r8\().8H,  \r0\().8H,  \r1\().8H
133        trn2            \r9\().8H,  \r0\().8H,  \r1\().8H
134        trn1            \r1\().8H,  \r2\().8H,  \r3\().8H
135        trn2            \r3\().8H,  \r2\().8H,  \r3\().8H
136        trn1            \r0\().8H,  \r4\().8H,  \r5\().8H
137        trn2            \r5\().8H,  \r4\().8H,  \r5\().8H
138        trn1            \r2\().8H,  \r6\().8H,  \r7\().8H
139        trn2            \r7\().8H,  \r6\().8H,  \r7\().8H
140
141        trn1            \r4\().4S,  \r0\().4S,  \r2\().4S
142        trn2            \r2\().4S,  \r0\().4S,  \r2\().4S
143        trn1            \r6\().4S,  \r5\().4S,  \r7\().4S
144        trn2            \r7\().4S,  \r5\().4S,  \r7\().4S
145        trn1            \r5\().4S,  \r9\().4S,  \r3\().4S
146        trn2            \r9\().4S,  \r9\().4S,  \r3\().4S
147        trn1            \r3\().4S,  \r8\().4S,  \r1\().4S
148        trn2            \r8\().4S,  \r8\().4S,  \r1\().4S
149
150        trn1            \r0\().2D,  \r3\().2D,  \r4\().2D
151        trn2            \r4\().2D,  \r3\().2D,  \r4\().2D
152
153        trn1            \r1\().2D,  \r5\().2D,  \r6\().2D
154        trn2            \r5\().2D,  \r5\().2D,  \r6\().2D
155
156        trn2            \r6\().2D,  \r8\().2D,  \r2\().2D
157        trn1            \r2\().2D,  \r8\().2D,  \r2\().2D
158
159        trn1            \r3\().2D,  \r9\().2D,  \r7\().2D
160        trn2            \r7\().2D,  \r9\().2D,  \r7\().2D
161
162.endm
163