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
150