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