xref: /aosp_15_r20/external/libdav1d/src/arm/64/util.S (revision c09093415860a1c2373dacd84c4fde00c507cdfd)
1*c0909341SAndroid Build Coastguard Worker/******************************************************************************
2*c0909341SAndroid Build Coastguard Worker * Copyright © 2018, VideoLAN and dav1d authors
3*c0909341SAndroid Build Coastguard Worker * Copyright © 2015 Martin Storsjo
4*c0909341SAndroid Build Coastguard Worker * Copyright © 2015 Janne Grunau
5*c0909341SAndroid Build Coastguard Worker * All rights reserved.
6*c0909341SAndroid Build Coastguard Worker *
7*c0909341SAndroid Build Coastguard Worker * Redistribution and use in source and binary forms, with or without
8*c0909341SAndroid Build Coastguard Worker * modification, are permitted provided that the following conditions are met:
9*c0909341SAndroid Build Coastguard Worker *
10*c0909341SAndroid Build Coastguard Worker * 1. Redistributions of source code must retain the above copyright notice, this
11*c0909341SAndroid Build Coastguard Worker *    list of conditions and the following disclaimer.
12*c0909341SAndroid Build Coastguard Worker *
13*c0909341SAndroid Build Coastguard Worker * 2. Redistributions in binary form must reproduce the above copyright notice,
14*c0909341SAndroid Build Coastguard Worker *    this list of conditions and the following disclaimer in the documentation
15*c0909341SAndroid Build Coastguard Worker *    and/or other materials provided with the distribution.
16*c0909341SAndroid Build Coastguard Worker *
17*c0909341SAndroid Build Coastguard Worker * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
18*c0909341SAndroid Build Coastguard Worker * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
19*c0909341SAndroid Build Coastguard Worker * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
20*c0909341SAndroid Build Coastguard Worker * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
21*c0909341SAndroid Build Coastguard Worker * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
22*c0909341SAndroid Build Coastguard Worker * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
23*c0909341SAndroid Build Coastguard Worker * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
24*c0909341SAndroid Build Coastguard Worker * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
25*c0909341SAndroid Build Coastguard Worker * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
26*c0909341SAndroid Build Coastguard Worker * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27*c0909341SAndroid Build Coastguard Worker *****************************************************************************/
28*c0909341SAndroid Build Coastguard Worker
29*c0909341SAndroid Build Coastguard Worker#ifndef DAV1D_SRC_ARM_64_UTIL_S
30*c0909341SAndroid Build Coastguard Worker#define DAV1D_SRC_ARM_64_UTIL_S
31*c0909341SAndroid Build Coastguard Worker
32*c0909341SAndroid Build Coastguard Worker#include "config.h"
33*c0909341SAndroid Build Coastguard Worker#include "src/arm/asm.S"
34*c0909341SAndroid Build Coastguard Worker
35*c0909341SAndroid Build Coastguard Worker#ifndef __has_feature
36*c0909341SAndroid Build Coastguard Worker#define __has_feature(x) 0
37*c0909341SAndroid Build Coastguard Worker#endif
38*c0909341SAndroid Build Coastguard Worker
39*c0909341SAndroid Build Coastguard Worker.macro  movrel rd, val, offset=0
40*c0909341SAndroid Build Coastguard Worker#if defined(__APPLE__)
41*c0909341SAndroid Build Coastguard Worker  .if \offset < 0
42*c0909341SAndroid Build Coastguard Worker        adrp            \rd, \val@PAGE
43*c0909341SAndroid Build Coastguard Worker        add             \rd, \rd, \val@PAGEOFF
44*c0909341SAndroid Build Coastguard Worker        sub             \rd, \rd, -(\offset)
45*c0909341SAndroid Build Coastguard Worker  .else
46*c0909341SAndroid Build Coastguard Worker        adrp            \rd, \val+(\offset)@PAGE
47*c0909341SAndroid Build Coastguard Worker        add             \rd, \rd, \val+(\offset)@PAGEOFF
48*c0909341SAndroid Build Coastguard Worker  .endif
49*c0909341SAndroid Build Coastguard Worker#elif defined(PIC) && defined(_WIN32)
50*c0909341SAndroid Build Coastguard Worker  .if \offset < 0
51*c0909341SAndroid Build Coastguard Worker        adrp            \rd, \val
52*c0909341SAndroid Build Coastguard Worker        add             \rd, \rd, :lo12:\val
53*c0909341SAndroid Build Coastguard Worker        sub             \rd, \rd, -(\offset)
54*c0909341SAndroid Build Coastguard Worker  .else
55*c0909341SAndroid Build Coastguard Worker        adrp            \rd, \val+(\offset)
56*c0909341SAndroid Build Coastguard Worker        add             \rd, \rd, :lo12:\val+(\offset)
57*c0909341SAndroid Build Coastguard Worker  .endif
58*c0909341SAndroid Build Coastguard Worker#elif __has_feature(hwaddress_sanitizer)
59*c0909341SAndroid Build Coastguard Worker        adrp            \rd, :pg_hi21_nc:\val+(\offset)
60*c0909341SAndroid Build Coastguard Worker        movk            \rd, #:prel_g3:\val+0x100000000
61*c0909341SAndroid Build Coastguard Worker        add             \rd, \rd, :lo12:\val+(\offset)
62*c0909341SAndroid Build Coastguard Worker#elif defined(PIC)
63*c0909341SAndroid Build Coastguard Worker        adrp            \rd, \val+(\offset)
64*c0909341SAndroid Build Coastguard Worker        add             \rd, \rd, :lo12:\val+(\offset)
65*c0909341SAndroid Build Coastguard Worker#else
66*c0909341SAndroid Build Coastguard Worker        ldr             \rd, =\val+\offset
67*c0909341SAndroid Build Coastguard Worker#endif
68*c0909341SAndroid Build Coastguard Worker.endm
69*c0909341SAndroid Build Coastguard Worker
70*c0909341SAndroid Build Coastguard Worker.macro sub_sp space
71*c0909341SAndroid Build Coastguard Worker#ifdef _WIN32
72*c0909341SAndroid Build Coastguard Worker.if \space > 8192
73*c0909341SAndroid Build Coastguard Worker        // Here, we'd need to touch two (or more) pages while decrementing
74*c0909341SAndroid Build Coastguard Worker        // the stack pointer.
75*c0909341SAndroid Build Coastguard Worker        .error          "sub_sp_align doesn't support values over 8K at the moment"
76*c0909341SAndroid Build Coastguard Worker.elseif \space > 4096
77*c0909341SAndroid Build Coastguard Worker        sub             x16, sp,  #4096
78*c0909341SAndroid Build Coastguard Worker        ldr             xzr, [x16]
79*c0909341SAndroid Build Coastguard Worker        sub             sp,  x16, #(\space - 4096)
80*c0909341SAndroid Build Coastguard Worker.else
81*c0909341SAndroid Build Coastguard Worker        sub             sp,  sp,  #\space
82*c0909341SAndroid Build Coastguard Worker.endif
83*c0909341SAndroid Build Coastguard Worker#else
84*c0909341SAndroid Build Coastguard Worker.if \space >= 4096
85*c0909341SAndroid Build Coastguard Worker        sub             sp,  sp,  #(\space)/4096*4096
86*c0909341SAndroid Build Coastguard Worker.endif
87*c0909341SAndroid Build Coastguard Worker.if (\space % 4096) != 0
88*c0909341SAndroid Build Coastguard Worker        sub             sp,  sp,  #(\space)%4096
89*c0909341SAndroid Build Coastguard Worker.endif
90*c0909341SAndroid Build Coastguard Worker#endif
91*c0909341SAndroid Build Coastguard Worker.endm
92*c0909341SAndroid Build Coastguard Worker
93*c0909341SAndroid Build Coastguard Worker.macro transpose_8x8b_xtl r0, r1, r2, r3, r4, r5, r6, r7, xtl
94*c0909341SAndroid Build Coastguard Worker        // a0 b0 a1 b1 a2 b2 a3 b3 a4 b4 a5 b5 a6 b6 a7 b7
95*c0909341SAndroid Build Coastguard Worker        zip1            \r0\().16b, \r0\().16b, \r1\().16b
96*c0909341SAndroid Build Coastguard Worker        // c0 d0 c1 d1 c2 d2 d3 d3 c4 d4 c5 d5 c6 d6 d7 d7
97*c0909341SAndroid Build Coastguard Worker        zip1            \r2\().16b, \r2\().16b, \r3\().16b
98*c0909341SAndroid Build Coastguard Worker        // e0 f0 e1 f1 e2 f2 e3 f3 e4 f4 e5 f5 e6 f6 e7 f7
99*c0909341SAndroid Build Coastguard Worker        zip1            \r4\().16b, \r4\().16b, \r5\().16b
100*c0909341SAndroid Build Coastguard Worker        // g0 h0 g1 h1 g2 h2 h3 h3 g4 h4 g5 h5 g6 h6 h7 h7
101*c0909341SAndroid Build Coastguard Worker        zip1            \r6\().16b, \r6\().16b, \r7\().16b
102*c0909341SAndroid Build Coastguard Worker
103*c0909341SAndroid Build Coastguard Worker        // a0 b0 c0 d0 a2 b2 c2 d2 a4 b4 c4 d4 a6 b6 c6 d6
104*c0909341SAndroid Build Coastguard Worker        trn1            \r1\().8h,  \r0\().8h,  \r2\().8h
105*c0909341SAndroid Build Coastguard Worker        // a1 b1 c1 d1 a3 b3 c3 d3 a5 b5 c5 d5 a7 b7 c7 d7
106*c0909341SAndroid Build Coastguard Worker        trn2            \r3\().8h,  \r0\().8h,  \r2\().8h
107*c0909341SAndroid Build Coastguard Worker        // e0 f0 g0 h0 e2 f2 g2 h2 e4 f4 g4 h4 e6 f6 g6 h6
108*c0909341SAndroid Build Coastguard Worker        trn1            \r5\().8h,  \r4\().8h,  \r6\().8h
109*c0909341SAndroid Build Coastguard Worker        // e1 f1 g1 h1 e3 f3 g3 h3 e5 f5 g5 h5 e7 f7 g7 h7
110*c0909341SAndroid Build Coastguard Worker        trn2            \r7\().8h,  \r4\().8h,  \r6\().8h
111*c0909341SAndroid Build Coastguard Worker
112*c0909341SAndroid Build Coastguard Worker        // a0 b0 c0 d0 e0 f0 g0 h0 a4 b4 c4 d4 e4 f4 g4 h4
113*c0909341SAndroid Build Coastguard Worker        trn1            \r0\().4s,  \r1\().4s,  \r5\().4s
114*c0909341SAndroid Build Coastguard Worker        // a2 b2 c2 d2 e2 f2 g2 h2 a6 b6 c6 d6 e6 f6 g6 h6
115*c0909341SAndroid Build Coastguard Worker        trn2            \r2\().4s,  \r1\().4s,  \r5\().4s
116*c0909341SAndroid Build Coastguard Worker        // a1 b1 c1 d1 e1 f1 g1 h1 a5 b5 c5 d5 e5 f5 g5 h5
117*c0909341SAndroid Build Coastguard Worker        trn1            \r1\().4s,  \r3\().4s,  \r7\().4s
118*c0909341SAndroid Build Coastguard Worker        // a3 b3 c3 d3 e3 f3 g3 h3 a7 b7 c7 d7 e7 f7 g7 h7
119*c0909341SAndroid Build Coastguard Worker        trn2            \r3\().4s,  \r3\().4s,  \r7\().4s
120*c0909341SAndroid Build Coastguard Worker
121*c0909341SAndroid Build Coastguard Worker        \xtl\()2        \r4\().8h,  \r0\().16b
122*c0909341SAndroid Build Coastguard Worker        \xtl            \r0\().8h,  \r0\().8b
123*c0909341SAndroid Build Coastguard Worker        \xtl\()2        \r6\().8h,  \r2\().16b
124*c0909341SAndroid Build Coastguard Worker        \xtl            \r2\().8h,  \r2\().8b
125*c0909341SAndroid Build Coastguard Worker        \xtl\()2        \r5\().8h,  \r1\().16b
126*c0909341SAndroid Build Coastguard Worker        \xtl            \r1\().8h,  \r1\().8b
127*c0909341SAndroid Build Coastguard Worker        \xtl\()2        \r7\().8h,  \r3\().16b
128*c0909341SAndroid Build Coastguard Worker        \xtl            \r3\().8h,  \r3\().8b
129*c0909341SAndroid Build Coastguard Worker.endm
130*c0909341SAndroid Build Coastguard Worker
131*c0909341SAndroid Build Coastguard Worker.macro transpose_8x8h r0, r1, r2, r3, r4, r5, r6, r7, t8, t9
132*c0909341SAndroid Build Coastguard Worker        trn1            \t8\().8h,  \r0\().8h,  \r1\().8h
133*c0909341SAndroid Build Coastguard Worker        trn2            \t9\().8h,  \r0\().8h,  \r1\().8h
134*c0909341SAndroid Build Coastguard Worker        trn1            \r1\().8h,  \r2\().8h,  \r3\().8h
135*c0909341SAndroid Build Coastguard Worker        trn2            \r3\().8h,  \r2\().8h,  \r3\().8h
136*c0909341SAndroid Build Coastguard Worker        trn1            \r0\().8h,  \r4\().8h,  \r5\().8h
137*c0909341SAndroid Build Coastguard Worker        trn2            \r5\().8h,  \r4\().8h,  \r5\().8h
138*c0909341SAndroid Build Coastguard Worker        trn1            \r2\().8h,  \r6\().8h,  \r7\().8h
139*c0909341SAndroid Build Coastguard Worker        trn2            \r7\().8h,  \r6\().8h,  \r7\().8h
140*c0909341SAndroid Build Coastguard Worker
141*c0909341SAndroid Build Coastguard Worker        trn1            \r4\().4s,  \r0\().4s,  \r2\().4s
142*c0909341SAndroid Build Coastguard Worker        trn2            \r2\().4s,  \r0\().4s,  \r2\().4s
143*c0909341SAndroid Build Coastguard Worker        trn1            \r6\().4s,  \r5\().4s,  \r7\().4s
144*c0909341SAndroid Build Coastguard Worker        trn2            \r7\().4s,  \r5\().4s,  \r7\().4s
145*c0909341SAndroid Build Coastguard Worker        trn1            \r5\().4s,  \t9\().4s,  \r3\().4s
146*c0909341SAndroid Build Coastguard Worker        trn2            \t9\().4s,  \t9\().4s,  \r3\().4s
147*c0909341SAndroid Build Coastguard Worker        trn1            \r3\().4s,  \t8\().4s,  \r1\().4s
148*c0909341SAndroid Build Coastguard Worker        trn2            \t8\().4s,  \t8\().4s,  \r1\().4s
149*c0909341SAndroid Build Coastguard Worker
150*c0909341SAndroid Build Coastguard Worker        trn1            \r0\().2d,  \r3\().2d,  \r4\().2d
151*c0909341SAndroid Build Coastguard Worker        trn2            \r4\().2d,  \r3\().2d,  \r4\().2d
152*c0909341SAndroid Build Coastguard Worker        trn1            \r1\().2d,  \r5\().2d,  \r6\().2d
153*c0909341SAndroid Build Coastguard Worker        trn2            \r5\().2d,  \r5\().2d,  \r6\().2d
154*c0909341SAndroid Build Coastguard Worker        trn2            \r6\().2d,  \t8\().2d,  \r2\().2d
155*c0909341SAndroid Build Coastguard Worker        trn1            \r2\().2d,  \t8\().2d,  \r2\().2d
156*c0909341SAndroid Build Coastguard Worker        trn1            \r3\().2d,  \t9\().2d,  \r7\().2d
157*c0909341SAndroid Build Coastguard Worker        trn2            \r7\().2d,  \t9\().2d,  \r7\().2d
158*c0909341SAndroid Build Coastguard Worker.endm
159*c0909341SAndroid Build Coastguard Worker
160*c0909341SAndroid Build Coastguard Worker.macro transpose_8x8h_mov r0, r1, r2, r3, r4, r5, r6, r7, t8, t9, o0, o1, o2, o3, o4, o5, o6, o7
161*c0909341SAndroid Build Coastguard Worker        trn1            \t8\().8h,  \r0\().8h,  \r1\().8h
162*c0909341SAndroid Build Coastguard Worker        trn2            \t9\().8h,  \r0\().8h,  \r1\().8h
163*c0909341SAndroid Build Coastguard Worker        trn1            \r1\().8h,  \r2\().8h,  \r3\().8h
164*c0909341SAndroid Build Coastguard Worker        trn2            \r3\().8h,  \r2\().8h,  \r3\().8h
165*c0909341SAndroid Build Coastguard Worker        trn1            \r0\().8h,  \r4\().8h,  \r5\().8h
166*c0909341SAndroid Build Coastguard Worker        trn2            \r5\().8h,  \r4\().8h,  \r5\().8h
167*c0909341SAndroid Build Coastguard Worker        trn1            \r2\().8h,  \r6\().8h,  \r7\().8h
168*c0909341SAndroid Build Coastguard Worker        trn2            \r7\().8h,  \r6\().8h,  \r7\().8h
169*c0909341SAndroid Build Coastguard Worker
170*c0909341SAndroid Build Coastguard Worker        trn1            \r4\().4s,  \r0\().4s,  \r2\().4s
171*c0909341SAndroid Build Coastguard Worker        trn2            \r2\().4s,  \r0\().4s,  \r2\().4s
172*c0909341SAndroid Build Coastguard Worker        trn1            \r6\().4s,  \r5\().4s,  \r7\().4s
173*c0909341SAndroid Build Coastguard Worker        trn2            \r7\().4s,  \r5\().4s,  \r7\().4s
174*c0909341SAndroid Build Coastguard Worker        trn1            \r5\().4s,  \t9\().4s,  \r3\().4s
175*c0909341SAndroid Build Coastguard Worker        trn2            \t9\().4s,  \t9\().4s,  \r3\().4s
176*c0909341SAndroid Build Coastguard Worker        trn1            \r3\().4s,  \t8\().4s,  \r1\().4s
177*c0909341SAndroid Build Coastguard Worker        trn2            \t8\().4s,  \t8\().4s,  \r1\().4s
178*c0909341SAndroid Build Coastguard Worker
179*c0909341SAndroid Build Coastguard Worker        trn1            \o0\().2d,  \r3\().2d,  \r4\().2d
180*c0909341SAndroid Build Coastguard Worker        trn2            \o4\().2d,  \r3\().2d,  \r4\().2d
181*c0909341SAndroid Build Coastguard Worker        trn1            \o1\().2d,  \r5\().2d,  \r6\().2d
182*c0909341SAndroid Build Coastguard Worker        trn2            \o5\().2d,  \r5\().2d,  \r6\().2d
183*c0909341SAndroid Build Coastguard Worker        trn2            \o6\().2d,  \t8\().2d,  \r2\().2d
184*c0909341SAndroid Build Coastguard Worker        trn1            \o2\().2d,  \t8\().2d,  \r2\().2d
185*c0909341SAndroid Build Coastguard Worker        trn1            \o3\().2d,  \t9\().2d,  \r7\().2d
186*c0909341SAndroid Build Coastguard Worker        trn2            \o7\().2d,  \t9\().2d,  \r7\().2d
187*c0909341SAndroid Build Coastguard Worker.endm
188*c0909341SAndroid Build Coastguard Worker
189*c0909341SAndroid Build Coastguard Worker.macro transpose_8x16b r0, r1, r2, r3, r4, r5, r6, r7, t8, t9
190*c0909341SAndroid Build Coastguard Worker        trn1            \t8\().16b, \r0\().16b, \r1\().16b
191*c0909341SAndroid Build Coastguard Worker        trn2            \t9\().16b, \r0\().16b, \r1\().16b
192*c0909341SAndroid Build Coastguard Worker        trn1            \r1\().16b, \r2\().16b, \r3\().16b
193*c0909341SAndroid Build Coastguard Worker        trn2            \r3\().16b, \r2\().16b, \r3\().16b
194*c0909341SAndroid Build Coastguard Worker        trn1            \r0\().16b, \r4\().16b, \r5\().16b
195*c0909341SAndroid Build Coastguard Worker        trn2            \r5\().16b, \r4\().16b, \r5\().16b
196*c0909341SAndroid Build Coastguard Worker        trn1            \r2\().16b, \r6\().16b, \r7\().16b
197*c0909341SAndroid Build Coastguard Worker        trn2            \r7\().16b, \r6\().16b, \r7\().16b
198*c0909341SAndroid Build Coastguard Worker
199*c0909341SAndroid Build Coastguard Worker        trn1            \r4\().8h,  \r0\().8h,  \r2\().8h
200*c0909341SAndroid Build Coastguard Worker        trn2            \r2\().8h,  \r0\().8h,  \r2\().8h
201*c0909341SAndroid Build Coastguard Worker        trn1            \r6\().8h,  \r5\().8h,  \r7\().8h
202*c0909341SAndroid Build Coastguard Worker        trn2            \r7\().8h,  \r5\().8h,  \r7\().8h
203*c0909341SAndroid Build Coastguard Worker        trn1            \r5\().8h,  \t9\().8h,  \r3\().8h
204*c0909341SAndroid Build Coastguard Worker        trn2            \t9\().8h,  \t9\().8h,  \r3\().8h
205*c0909341SAndroid Build Coastguard Worker        trn1            \r3\().8h,  \t8\().8h,  \r1\().8h
206*c0909341SAndroid Build Coastguard Worker        trn2            \t8\().8h,  \t8\().8h,  \r1\().8h
207*c0909341SAndroid Build Coastguard Worker
208*c0909341SAndroid Build Coastguard Worker        trn1            \r0\().4s,  \r3\().4s,  \r4\().4s
209*c0909341SAndroid Build Coastguard Worker        trn2            \r4\().4s,  \r3\().4s,  \r4\().4s
210*c0909341SAndroid Build Coastguard Worker        trn1            \r1\().4s,  \r5\().4s,  \r6\().4s
211*c0909341SAndroid Build Coastguard Worker        trn2            \r5\().4s,  \r5\().4s,  \r6\().4s
212*c0909341SAndroid Build Coastguard Worker        trn2            \r6\().4s,  \t8\().4s,  \r2\().4s
213*c0909341SAndroid Build Coastguard Worker        trn1            \r2\().4s,  \t8\().4s,  \r2\().4s
214*c0909341SAndroid Build Coastguard Worker        trn1            \r3\().4s,  \t9\().4s,  \r7\().4s
215*c0909341SAndroid Build Coastguard Worker        trn2            \r7\().4s,  \t9\().4s,  \r7\().4s
216*c0909341SAndroid Build Coastguard Worker.endm
217*c0909341SAndroid Build Coastguard Worker
218*c0909341SAndroid Build Coastguard Worker.macro  transpose_4x16b r0, r1, r2, r3, t4, t5, t6, t7
219*c0909341SAndroid Build Coastguard Worker        trn1            \t4\().16b, \r0\().16b, \r1\().16b
220*c0909341SAndroid Build Coastguard Worker        trn2            \t5\().16b, \r0\().16b, \r1\().16b
221*c0909341SAndroid Build Coastguard Worker        trn1            \t6\().16b, \r2\().16b, \r3\().16b
222*c0909341SAndroid Build Coastguard Worker        trn2            \t7\().16b, \r2\().16b, \r3\().16b
223*c0909341SAndroid Build Coastguard Worker
224*c0909341SAndroid Build Coastguard Worker        trn1            \r0\().8h,  \t4\().8h,  \t6\().8h
225*c0909341SAndroid Build Coastguard Worker        trn2            \r2\().8h,  \t4\().8h,  \t6\().8h
226*c0909341SAndroid Build Coastguard Worker        trn1            \r1\().8h,  \t5\().8h,  \t7\().8h
227*c0909341SAndroid Build Coastguard Worker        trn2            \r3\().8h,  \t5\().8h,  \t7\().8h
228*c0909341SAndroid Build Coastguard Worker.endm
229*c0909341SAndroid Build Coastguard Worker
230*c0909341SAndroid Build Coastguard Worker.macro  transpose_4x4h  r0, r1, r2, r3, t4, t5, t6, t7
231*c0909341SAndroid Build Coastguard Worker        trn1            \t4\().4h,  \r0\().4h,  \r1\().4h
232*c0909341SAndroid Build Coastguard Worker        trn2            \t5\().4h,  \r0\().4h,  \r1\().4h
233*c0909341SAndroid Build Coastguard Worker        trn1            \t6\().4h,  \r2\().4h,  \r3\().4h
234*c0909341SAndroid Build Coastguard Worker        trn2            \t7\().4h,  \r2\().4h,  \r3\().4h
235*c0909341SAndroid Build Coastguard Worker
236*c0909341SAndroid Build Coastguard Worker        trn1            \r0\().2s,  \t4\().2s,  \t6\().2s
237*c0909341SAndroid Build Coastguard Worker        trn2            \r2\().2s,  \t4\().2s,  \t6\().2s
238*c0909341SAndroid Build Coastguard Worker        trn1            \r1\().2s,  \t5\().2s,  \t7\().2s
239*c0909341SAndroid Build Coastguard Worker        trn2            \r3\().2s,  \t5\().2s,  \t7\().2s
240*c0909341SAndroid Build Coastguard Worker.endm
241*c0909341SAndroid Build Coastguard Worker
242*c0909341SAndroid Build Coastguard Worker.macro  transpose_4x4s  r0, r1, r2, r3, t4, t5, t6, t7
243*c0909341SAndroid Build Coastguard Worker        trn1            \t4\().4s,  \r0\().4s,  \r1\().4s
244*c0909341SAndroid Build Coastguard Worker        trn2            \t5\().4s,  \r0\().4s,  \r1\().4s
245*c0909341SAndroid Build Coastguard Worker        trn1            \t6\().4s,  \r2\().4s,  \r3\().4s
246*c0909341SAndroid Build Coastguard Worker        trn2            \t7\().4s,  \r2\().4s,  \r3\().4s
247*c0909341SAndroid Build Coastguard Worker
248*c0909341SAndroid Build Coastguard Worker        trn1            \r0\().2d,  \t4\().2d,  \t6\().2d
249*c0909341SAndroid Build Coastguard Worker        trn2            \r2\().2d,  \t4\().2d,  \t6\().2d
250*c0909341SAndroid Build Coastguard Worker        trn1            \r1\().2d,  \t5\().2d,  \t7\().2d
251*c0909341SAndroid Build Coastguard Worker        trn2            \r3\().2d,  \t5\().2d,  \t7\().2d
252*c0909341SAndroid Build Coastguard Worker.endm
253*c0909341SAndroid Build Coastguard Worker
254*c0909341SAndroid Build Coastguard Worker.macro  transpose_4x8h  r0, r1, r2, r3, t4, t5, t6, t7
255*c0909341SAndroid Build Coastguard Worker        trn1            \t4\().8h,  \r0\().8h,  \r1\().8h
256*c0909341SAndroid Build Coastguard Worker        trn2            \t5\().8h,  \r0\().8h,  \r1\().8h
257*c0909341SAndroid Build Coastguard Worker        trn1            \t6\().8h,  \r2\().8h,  \r3\().8h
258*c0909341SAndroid Build Coastguard Worker        trn2            \t7\().8h,  \r2\().8h,  \r3\().8h
259*c0909341SAndroid Build Coastguard Worker
260*c0909341SAndroid Build Coastguard Worker        trn1            \r0\().4s,  \t4\().4s,  \t6\().4s
261*c0909341SAndroid Build Coastguard Worker        trn2            \r2\().4s,  \t4\().4s,  \t6\().4s
262*c0909341SAndroid Build Coastguard Worker        trn1            \r1\().4s,  \t5\().4s,  \t7\().4s
263*c0909341SAndroid Build Coastguard Worker        trn2            \r3\().4s,  \t5\().4s,  \t7\().4s
264*c0909341SAndroid Build Coastguard Worker.endm
265*c0909341SAndroid Build Coastguard Worker
266*c0909341SAndroid Build Coastguard Worker.macro  transpose_4x8h_mov r0, r1, r2, r3, t4, t5, t6, t7, o0, o1, o2, o3
267*c0909341SAndroid Build Coastguard Worker        trn1            \t4\().8h,  \r0\().8h,  \r1\().8h
268*c0909341SAndroid Build Coastguard Worker        trn2            \t5\().8h,  \r0\().8h,  \r1\().8h
269*c0909341SAndroid Build Coastguard Worker        trn1            \t6\().8h,  \r2\().8h,  \r3\().8h
270*c0909341SAndroid Build Coastguard Worker        trn2            \t7\().8h,  \r2\().8h,  \r3\().8h
271*c0909341SAndroid Build Coastguard Worker
272*c0909341SAndroid Build Coastguard Worker        trn1            \o0\().4s,  \t4\().4s,  \t6\().4s
273*c0909341SAndroid Build Coastguard Worker        trn2            \o2\().4s,  \t4\().4s,  \t6\().4s
274*c0909341SAndroid Build Coastguard Worker        trn1            \o1\().4s,  \t5\().4s,  \t7\().4s
275*c0909341SAndroid Build Coastguard Worker        trn2            \o3\().4s,  \t5\().4s,  \t7\().4s
276*c0909341SAndroid Build Coastguard Worker.endm
277*c0909341SAndroid Build Coastguard Worker
278*c0909341SAndroid Build Coastguard Worker#endif /* DAV1D_SRC_ARM_64_UTIL_S */
279