1*c0909341SAndroid Build Coastguard Worker/****************************************************************************** 2*c0909341SAndroid Build Coastguard Worker * Copyright © 2024, VideoLAN and dav1d authors 3*c0909341SAndroid Build Coastguard Worker * Copyright © 2024, Loongson Technology Corporation Limited 4*c0909341SAndroid Build Coastguard Worker * All rights reserved. 5*c0909341SAndroid Build Coastguard Worker * 6*c0909341SAndroid Build Coastguard Worker * Redistribution and use in source and binary forms, with or without 7*c0909341SAndroid Build Coastguard Worker * modification, are permitted provided that the following conditions are met: 8*c0909341SAndroid Build Coastguard Worker * 9*c0909341SAndroid Build Coastguard Worker * 1. Redistributions of source code must retain the above copyright notice, this 10*c0909341SAndroid Build Coastguard Worker * list of conditions and the following disclaimer. 11*c0909341SAndroid Build Coastguard Worker * 12*c0909341SAndroid Build Coastguard Worker * 2. Redistributions in binary form must reproduce the above copyright notice, 13*c0909341SAndroid Build Coastguard Worker * this list of conditions and the following disclaimer in the documentation 14*c0909341SAndroid Build Coastguard Worker * and/or other materials provided with the distribution. 15*c0909341SAndroid Build Coastguard Worker * 16*c0909341SAndroid Build Coastguard Worker * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND 17*c0909341SAndroid Build Coastguard Worker * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 18*c0909341SAndroid Build Coastguard Worker * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 19*c0909341SAndroid Build Coastguard Worker * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR 20*c0909341SAndroid Build Coastguard Worker * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 21*c0909341SAndroid Build Coastguard Worker * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 22*c0909341SAndroid Build Coastguard Worker * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND 23*c0909341SAndroid Build Coastguard Worker * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 24*c0909341SAndroid Build Coastguard Worker * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 25*c0909341SAndroid Build Coastguard Worker * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 26*c0909341SAndroid Build Coastguard Worker *****************************************************************************/ 27*c0909341SAndroid Build Coastguard Worker 28*c0909341SAndroid Build Coastguard Worker#ifndef DAV1D_SRC_LOONGSON_UTIL_S 29*c0909341SAndroid Build Coastguard Worker#define DAV1D_SRC_LOONGSON_UTIL_S 30*c0909341SAndroid Build Coastguard Worker 31*c0909341SAndroid Build Coastguard Worker#ifndef DEFAULT_ALIGN 32*c0909341SAndroid Build Coastguard Worker#define DEFAULT_ALIGN 5 33*c0909341SAndroid Build Coastguard Worker#endif 34*c0909341SAndroid Build Coastguard Worker 35*c0909341SAndroid Build Coastguard Worker//That l means local defines local functions 36*c0909341SAndroid Build Coastguard Worker.macro functionl name, align=DEFAULT_ALIGN 37*c0909341SAndroid Build Coastguard Worker.macro endfuncl 38*c0909341SAndroid Build Coastguard Worker jirl $r0, $r1, 0x0 39*c0909341SAndroid Build Coastguard Worker .size \name, . - \name 40*c0909341SAndroid Build Coastguard Worker .purgem endfuncl 41*c0909341SAndroid Build Coastguard Worker.endm 42*c0909341SAndroid Build Coastguard Worker.text ; 43*c0909341SAndroid Build Coastguard Worker.align \align ; 44*c0909341SAndroid Build Coastguard Worker.hidden \name ; 45*c0909341SAndroid Build Coastguard Worker.type \name, @function ; 46*c0909341SAndroid Build Coastguard Worker\name: ; 47*c0909341SAndroid Build Coastguard Worker.endm 48*c0909341SAndroid Build Coastguard Worker 49*c0909341SAndroid Build Coastguard Worker.macro TRANSPOSE_4x16B in0, in1 ,in2, in3, in4, in5, in6, in7 50*c0909341SAndroid Build Coastguard Worker vpackev.b \in4, \in1, \in0 51*c0909341SAndroid Build Coastguard Worker vpackod.b \in5, \in1, \in0 52*c0909341SAndroid Build Coastguard Worker vpackev.b \in6, \in3, \in2 53*c0909341SAndroid Build Coastguard Worker vpackod.b \in7, \in3, \in2 54*c0909341SAndroid Build Coastguard Worker 55*c0909341SAndroid Build Coastguard Worker vpackev.h \in0, \in6, \in4 56*c0909341SAndroid Build Coastguard Worker vpackod.h \in2, \in6, \in4 57*c0909341SAndroid Build Coastguard Worker vpackev.h \in1, \in7, \in5 58*c0909341SAndroid Build Coastguard Worker vpackod.h \in3, \in7, \in5 59*c0909341SAndroid Build Coastguard Worker.endm 60*c0909341SAndroid Build Coastguard Worker 61*c0909341SAndroid Build Coastguard Worker.macro TRANSPOSE_8x16B in0, in1, in2, in3, in4, in5, in6, in7, in8, in9 62*c0909341SAndroid Build Coastguard Worker vpackev.b \in8, \in1, \in0 63*c0909341SAndroid Build Coastguard Worker vpackod.b \in9, \in1, \in0 64*c0909341SAndroid Build Coastguard Worker vpackev.b \in1, \in3, \in2 65*c0909341SAndroid Build Coastguard Worker vpackod.b \in3, \in3, \in2 66*c0909341SAndroid Build Coastguard Worker vpackev.b \in0, \in5, \in4 67*c0909341SAndroid Build Coastguard Worker vpackod.b \in5, \in5, \in4 68*c0909341SAndroid Build Coastguard Worker vpackev.b \in2, \in7, \in6 69*c0909341SAndroid Build Coastguard Worker vpackod.b \in7, \in7, \in6 70*c0909341SAndroid Build Coastguard Worker 71*c0909341SAndroid Build Coastguard Worker vpackev.h \in4, \in2, \in0 72*c0909341SAndroid Build Coastguard Worker vpackod.h \in2, \in2, \in0 73*c0909341SAndroid Build Coastguard Worker vpackev.h \in6, \in7, \in5 74*c0909341SAndroid Build Coastguard Worker vpackod.h \in7, \in7, \in5 75*c0909341SAndroid Build Coastguard Worker vpackev.h \in5, \in3, \in9 76*c0909341SAndroid Build Coastguard Worker vpackod.h \in9, \in3, \in9 77*c0909341SAndroid Build Coastguard Worker vpackev.h \in3, \in1, \in8 78*c0909341SAndroid Build Coastguard Worker vpackod.h \in8, \in1, \in8 79*c0909341SAndroid Build Coastguard Worker 80*c0909341SAndroid Build Coastguard Worker vpackev.w \in0, \in4, \in3 81*c0909341SAndroid Build Coastguard Worker vpackod.w \in4, \in4, \in3 82*c0909341SAndroid Build Coastguard Worker vpackev.w \in1, \in6, \in5 83*c0909341SAndroid Build Coastguard Worker vpackod.w \in5, \in6, \in5 84*c0909341SAndroid Build Coastguard Worker vpackod.w \in6, \in2, \in8 85*c0909341SAndroid Build Coastguard Worker vpackev.w \in2, \in2, \in8 86*c0909341SAndroid Build Coastguard Worker vpackev.w \in3, \in7, \in9 87*c0909341SAndroid Build Coastguard Worker vpackod.w \in7, \in7, \in9 88*c0909341SAndroid Build Coastguard Worker.endm 89*c0909341SAndroid Build Coastguard Worker 90*c0909341SAndroid Build Coastguard Worker.macro vld_x8 src, start, stride, in0, in1, in2, in3, in4, in5, in6, in7 91*c0909341SAndroid Build Coastguard Worker vld \in0, \src, \start 92*c0909341SAndroid Build Coastguard Worker vld \in1, \src, \start+(\stride*1) 93*c0909341SAndroid Build Coastguard Worker vld \in2, \src, \start+(\stride*2) 94*c0909341SAndroid Build Coastguard Worker vld \in3, \src, \start+(\stride*3) 95*c0909341SAndroid Build Coastguard Worker vld \in4, \src, \start+(\stride*4) 96*c0909341SAndroid Build Coastguard Worker vld \in5, \src, \start+(\stride*5) 97*c0909341SAndroid Build Coastguard Worker vld \in6, \src, \start+(\stride*6) 98*c0909341SAndroid Build Coastguard Worker vld \in7, \src, \start+(\stride*7) 99*c0909341SAndroid Build Coastguard Worker.endm 100*c0909341SAndroid Build Coastguard Worker 101*c0909341SAndroid Build Coastguard Worker.macro vst_x8 src, start, stride, in0, in1, in2, in3, in4, in5, in6, in7 102*c0909341SAndroid Build Coastguard Worker vst \in0, \src, \start 103*c0909341SAndroid Build Coastguard Worker vst \in1, \src, \start+(\stride*1) 104*c0909341SAndroid Build Coastguard Worker vst \in2, \src, \start+(\stride*2) 105*c0909341SAndroid Build Coastguard Worker vst \in3, \src, \start+(\stride*3) 106*c0909341SAndroid Build Coastguard Worker vst \in4, \src, \start+(\stride*4) 107*c0909341SAndroid Build Coastguard Worker vst \in5, \src, \start+(\stride*5) 108*c0909341SAndroid Build Coastguard Worker vst \in6, \src, \start+(\stride*6) 109*c0909341SAndroid Build Coastguard Worker vst \in7, \src, \start+(\stride*7) 110*c0909341SAndroid Build Coastguard Worker.endm 111*c0909341SAndroid Build Coastguard Worker 112*c0909341SAndroid Build Coastguard Worker.macro vld_x16 src, start, stride, in0, in1, in2, in3, in4, in5, in6, in7, \ 113*c0909341SAndroid Build Coastguard Worker in8, in9, in10, in11, in12, in13, in14, in15 114*c0909341SAndroid Build Coastguard Worker 115*c0909341SAndroid Build Coastguard Worker vld_x8 \src, \start, \stride, \in0, \in1, \in2, \in3, \in4, \in5, \in6, \in7 116*c0909341SAndroid Build Coastguard Worker 117*c0909341SAndroid Build Coastguard Worker vld \in8, \src, \start+(\stride*8) 118*c0909341SAndroid Build Coastguard Worker vld \in9, \src, \start+(\stride*9) 119*c0909341SAndroid Build Coastguard Worker vld \in10, \src, \start+(\stride*10) 120*c0909341SAndroid Build Coastguard Worker vld \in11, \src, \start+(\stride*11) 121*c0909341SAndroid Build Coastguard Worker vld \in12, \src, \start+(\stride*12) 122*c0909341SAndroid Build Coastguard Worker vld \in13, \src, \start+(\stride*13) 123*c0909341SAndroid Build Coastguard Worker vld \in14, \src, \start+(\stride*14) 124*c0909341SAndroid Build Coastguard Worker vld \in15, \src, \start+(\stride*15) 125*c0909341SAndroid Build Coastguard Worker.endm 126*c0909341SAndroid Build Coastguard Worker 127*c0909341SAndroid Build Coastguard Worker.macro vst_x16 src, start, stride, in0, in1, in2, in3, in4, in5, in6, in7, \ 128*c0909341SAndroid Build Coastguard Worker in8, in9, in10, in11, in12, in13, in14, in15 129*c0909341SAndroid Build Coastguard Worker 130*c0909341SAndroid Build Coastguard Worker vst_x8 \src, \start, \stride, \in0, \in1, \in2, \in3, \in4, \in5, \in6, \in7 131*c0909341SAndroid Build Coastguard Worker 132*c0909341SAndroid Build Coastguard Worker vst \in8, \src, \start+(\stride*8) 133*c0909341SAndroid Build Coastguard Worker vst \in9, \src, \start+(\stride*9) 134*c0909341SAndroid Build Coastguard Worker vst \in10, \src, \start+(\stride*10) 135*c0909341SAndroid Build Coastguard Worker vst \in11, \src, \start+(\stride*11) 136*c0909341SAndroid Build Coastguard Worker vst \in12, \src, \start+(\stride*12) 137*c0909341SAndroid Build Coastguard Worker vst \in13, \src, \start+(\stride*13) 138*c0909341SAndroid Build Coastguard Worker vst \in14, \src, \start+(\stride*14) 139*c0909341SAndroid Build Coastguard Worker vst \in15, \src, \start+(\stride*15) 140*c0909341SAndroid Build Coastguard Worker.endm 141*c0909341SAndroid Build Coastguard Worker 142*c0909341SAndroid Build Coastguard Worker.macro xvld_x8 src, start, stride, in0, in1, in2, in3, in4, in5, in6, in7 143*c0909341SAndroid Build Coastguard Worker xvld \in0, \src, \start 144*c0909341SAndroid Build Coastguard Worker xvld \in1, \src, \start+(\stride) 145*c0909341SAndroid Build Coastguard Worker xvld \in2, \src, \start+(\stride<<1) 146*c0909341SAndroid Build Coastguard Worker xvld \in3, \src, \start+(\stride<<1)+(\stride) 147*c0909341SAndroid Build Coastguard Worker xvld \in4, \src, \start+(\stride<<2) 148*c0909341SAndroid Build Coastguard Worker xvld \in5, \src, \start+(\stride<<2)+(\stride) 149*c0909341SAndroid Build Coastguard Worker xvld \in6, \src, \start+(\stride*6) 150*c0909341SAndroid Build Coastguard Worker xvld \in7, \src, \start+(\stride<<3)-(\stride) 151*c0909341SAndroid Build Coastguard Worker.endm 152*c0909341SAndroid Build Coastguard Worker 153*c0909341SAndroid Build Coastguard Worker.macro xvst_x8 src, start, stride, in0, in1, in2, in3, in4, in5, in6, in7 154*c0909341SAndroid Build Coastguard Worker xvst \in0, \src, \start 155*c0909341SAndroid Build Coastguard Worker xvst \in1, \src, \start+(\stride) 156*c0909341SAndroid Build Coastguard Worker xvst \in2, \src, \start+(\stride<<1) 157*c0909341SAndroid Build Coastguard Worker xvst \in3, \src, \start+(\stride<<1)+(\stride) 158*c0909341SAndroid Build Coastguard Worker xvst \in4, \src, \start+(\stride<<2) 159*c0909341SAndroid Build Coastguard Worker xvst \in5, \src, \start+(\stride<<2)+(\stride) 160*c0909341SAndroid Build Coastguard Worker xvst \in6, \src, \start+(\stride*6) 161*c0909341SAndroid Build Coastguard Worker xvst \in7, \src, \start+(\stride<<3)-(\stride) 162*c0909341SAndroid Build Coastguard Worker.endm 163*c0909341SAndroid Build Coastguard Worker 164*c0909341SAndroid Build Coastguard Worker.macro xvld_x16 src, start, stride, in0, in1, in2, in3, in4, in5, in6, in7, \ 165*c0909341SAndroid Build Coastguard Worker in8, in9, in10, in11, in12, in13, in14, in15 166*c0909341SAndroid Build Coastguard Worker xvld_x8 \src, \start, \stride, \in0, \in1, \in2, \in3, \in4, \in5, \in6, \in7 167*c0909341SAndroid Build Coastguard Worker 168*c0909341SAndroid Build Coastguard Worker xvld \in8, \src, \start+(\stride<<3) 169*c0909341SAndroid Build Coastguard Worker xvld \in9, \src, \start+(\stride<<3)+(\stride) 170*c0909341SAndroid Build Coastguard Worker xvld \in10, \src, \start+(\stride*10) 171*c0909341SAndroid Build Coastguard Worker xvld \in11, \src, \start+(\stride*11) 172*c0909341SAndroid Build Coastguard Worker xvld \in12, \src, \start+(\stride*12) 173*c0909341SAndroid Build Coastguard Worker xvld \in13, \src, \start+(\stride*13) 174*c0909341SAndroid Build Coastguard Worker xvld \in14, \src, \start+(\stride*14) 175*c0909341SAndroid Build Coastguard Worker xvld \in15, \src, \start+(\stride<<4)-(\stride) 176*c0909341SAndroid Build Coastguard Worker.endm 177*c0909341SAndroid Build Coastguard Worker 178*c0909341SAndroid Build Coastguard Worker.macro xvst_x16 src, start, stride, in0, in1, in2, in3, in4, in5, in6, in7, \ 179*c0909341SAndroid Build Coastguard Worker in8, in9, in10, in11, in12, in13, in14, in15 180*c0909341SAndroid Build Coastguard Worker xvst_x8 \src, \start, \stride, \in0, \in1, \in2, \in3, \in4, \in5, \in6, \in7 181*c0909341SAndroid Build Coastguard Worker 182*c0909341SAndroid Build Coastguard Worker xvst \in8, \src, \start+(\stride<<3) 183*c0909341SAndroid Build Coastguard Worker xvst \in9, \src, \start+(\stride<<3)+(\stride) 184*c0909341SAndroid Build Coastguard Worker xvst \in10, \src, \start+(\stride*10) 185*c0909341SAndroid Build Coastguard Worker xvst \in11, \src, \start+(\stride*11) 186*c0909341SAndroid Build Coastguard Worker xvst \in12, \src, \start+(\stride*12) 187*c0909341SAndroid Build Coastguard Worker xvst \in13, \src, \start+(\stride*13) 188*c0909341SAndroid Build Coastguard Worker xvst \in14, \src, \start+(\stride*14) 189*c0909341SAndroid Build Coastguard Worker xvst \in15, \src, \start+(\stride<<4)-(\stride) 190*c0909341SAndroid Build Coastguard Worker.endm 191*c0909341SAndroid Build Coastguard Worker 192*c0909341SAndroid Build Coastguard Worker#endif /* DAV1D_SRC_LOONGSON_UTIL_S */ 193