1*61046927SAndroid Build Coastguard Worker /* Copyright (c) 2018-2019 Alyssa Rosenzweig ([email protected]) 2*61046927SAndroid Build Coastguard Worker * Copyright (C) 2019-2020 Collabora, Ltd. 3*61046927SAndroid Build Coastguard Worker * 4*61046927SAndroid Build Coastguard Worker * Permission is hereby granted, free of charge, to any person obtaining a copy 5*61046927SAndroid Build Coastguard Worker * of this software and associated documentation files (the "Software"), to deal 6*61046927SAndroid Build Coastguard Worker * in the Software without restriction, including without limitation the rights 7*61046927SAndroid Build Coastguard Worker * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 8*61046927SAndroid Build Coastguard Worker * copies of the Software, and to permit persons to whom the Software is 9*61046927SAndroid Build Coastguard Worker * furnished to do so, subject to the following conditions: 10*61046927SAndroid Build Coastguard Worker * 11*61046927SAndroid Build Coastguard Worker * The above copyright notice and this permission notice shall be included in 12*61046927SAndroid Build Coastguard Worker * all copies or substantial portions of the Software. 13*61046927SAndroid Build Coastguard Worker * 14*61046927SAndroid Build Coastguard Worker * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 15*61046927SAndroid Build Coastguard Worker * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 16*61046927SAndroid Build Coastguard Worker * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 17*61046927SAndroid Build Coastguard Worker * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 18*61046927SAndroid Build Coastguard Worker * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 19*61046927SAndroid Build Coastguard Worker * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 20*61046927SAndroid Build Coastguard Worker * THE SOFTWARE. 21*61046927SAndroid Build Coastguard Worker */ 22*61046927SAndroid Build Coastguard Worker 23*61046927SAndroid Build Coastguard Worker #include "midgard.h" 24*61046927SAndroid Build Coastguard Worker 25*61046927SAndroid Build Coastguard Worker /* Include the definitions of the macros and such */ 26*61046927SAndroid Build Coastguard Worker 27*61046927SAndroid Build Coastguard Worker #define MIDGARD_OPS_TABLE 28*61046927SAndroid Build Coastguard Worker #include "helpers.h" 29*61046927SAndroid Build Coastguard Worker #undef MIDGARD_OPS_TABLE 30*61046927SAndroid Build Coastguard Worker 31*61046927SAndroid Build Coastguard Worker #include "midgard_ops.h" 32*61046927SAndroid Build Coastguard Worker 33*61046927SAndroid Build Coastguard Worker /* 34*61046927SAndroid Build Coastguard Worker * Table of mapping opcodes to accompanying properties. This is used for both 35*61046927SAndroid Build Coastguard Worker * the disassembler and the compiler. It is placed in a .c file like this to 36*61046927SAndroid Build Coastguard Worker * avoid duplications in the binary. 37*61046927SAndroid Build Coastguard Worker */ 38*61046927SAndroid Build Coastguard Worker 39*61046927SAndroid Build Coastguard Worker /* clang-format off */ 40*61046927SAndroid Build Coastguard Worker struct mir_op_props alu_opcode_props[256] = { 41*61046927SAndroid Build Coastguard Worker [midgard_alu_op_fadd] = {"FADD", UNITS_ADD | OP_COMMUTES}, 42*61046927SAndroid Build Coastguard Worker [midgard_alu_op_fadd_rtz] = {"FADD.rtz", UNITS_ADD | OP_COMMUTES}, 43*61046927SAndroid Build Coastguard Worker [midgard_alu_op_fadd_rtn] = {"FADD.rtn", UNITS_ADD | OP_COMMUTES}, 44*61046927SAndroid Build Coastguard Worker [midgard_alu_op_fadd_rtp] = {"FADD.rtp", UNITS_ADD | OP_COMMUTES}, 45*61046927SAndroid Build Coastguard Worker [midgard_alu_op_fmul] = {"FMUL", UNITS_MUL | UNIT_VLUT | OP_COMMUTES}, 46*61046927SAndroid Build Coastguard Worker [midgard_alu_op_fmul_rtz] = {"FMUL.rtz", UNITS_MUL | UNIT_VLUT | OP_COMMUTES}, 47*61046927SAndroid Build Coastguard Worker [midgard_alu_op_fmul_rtn] = {"FMUL.rtn", UNITS_MUL | UNIT_VLUT | OP_COMMUTES}, 48*61046927SAndroid Build Coastguard Worker [midgard_alu_op_fmul_rtp] = {"FMUL.rtp", UNITS_MUL | UNIT_VLUT | OP_COMMUTES}, 49*61046927SAndroid Build Coastguard Worker [midgard_alu_op_fmin] = {"FMIN", UNITS_MOST | OP_COMMUTES}, 50*61046927SAndroid Build Coastguard Worker [midgard_alu_op_fmin_nan] = {"FMIN.nan", UNITS_MOST | OP_COMMUTES}, 51*61046927SAndroid Build Coastguard Worker [midgard_alu_op_fabsmin] = {"FABSMIN", UNITS_MOST | OP_COMMUTES}, 52*61046927SAndroid Build Coastguard Worker [midgard_alu_op_fabsmin_nan] = {"FABSMIN.nan", UNITS_MOST | OP_COMMUTES}, 53*61046927SAndroid Build Coastguard Worker [midgard_alu_op_fmax] = {"FMAX", UNITS_MOST | OP_COMMUTES}, 54*61046927SAndroid Build Coastguard Worker [midgard_alu_op_fmax_nan] = {"FMAX.nan", UNITS_MOST | OP_COMMUTES}, 55*61046927SAndroid Build Coastguard Worker [midgard_alu_op_fabsmax] = {"FABSMAX", UNITS_MOST | OP_COMMUTES}, 56*61046927SAndroid Build Coastguard Worker [midgard_alu_op_fabsmax_nan] = {"FABSMAX.nan", UNITS_MOST | OP_COMMUTES}, 57*61046927SAndroid Build Coastguard Worker [midgard_alu_op_imin] = {"MIN", UNITS_MOST | OP_COMMUTES}, 58*61046927SAndroid Build Coastguard Worker [midgard_alu_op_imax] = {"MAX", UNITS_MOST | OP_COMMUTES}, 59*61046927SAndroid Build Coastguard Worker [midgard_alu_op_umin] = {"MIN", UNITS_MOST | OP_COMMUTES}, 60*61046927SAndroid Build Coastguard Worker [midgard_alu_op_umax] = {"MAX", UNITS_MOST | OP_COMMUTES}, 61*61046927SAndroid Build Coastguard Worker [midgard_alu_op_iavg] = {"AVG.rtz", UNITS_ADD | OP_COMMUTES}, 62*61046927SAndroid Build Coastguard Worker [midgard_alu_op_uavg] = {"AVG.rtz", UNITS_ADD | OP_COMMUTES}, 63*61046927SAndroid Build Coastguard Worker [midgard_alu_op_iravg] = {"AVG.round", UNITS_ADD | OP_COMMUTES}, 64*61046927SAndroid Build Coastguard Worker [midgard_alu_op_uravg] = {"AVG.round", UNITS_ADD | OP_COMMUTES}, 65*61046927SAndroid Build Coastguard Worker 66*61046927SAndroid Build Coastguard Worker [midgard_alu_op_fmov] = {"FMOV", UNITS_ALL | QUIRK_FLIPPED_R24}, 67*61046927SAndroid Build Coastguard Worker [midgard_alu_op_fmov_rtz] = {"FMOV.rtz", UNITS_ALL | QUIRK_FLIPPED_R24}, 68*61046927SAndroid Build Coastguard Worker [midgard_alu_op_fmov_rtn] = {"FMOV.rtn", UNITS_ALL | QUIRK_FLIPPED_R24}, 69*61046927SAndroid Build Coastguard Worker [midgard_alu_op_fmov_rtp] = {"FMOV.rtp", UNITS_ALL | QUIRK_FLIPPED_R24}, 70*61046927SAndroid Build Coastguard Worker [midgard_alu_op_froundaway] = {"FROUNDAWAY", UNITS_ADD}, 71*61046927SAndroid Build Coastguard Worker [midgard_alu_op_froundeven] = {"FROUNDEVEN", UNITS_ADD}, 72*61046927SAndroid Build Coastguard Worker [midgard_alu_op_ftrunc] = {"FTRUNC", UNITS_ADD}, 73*61046927SAndroid Build Coastguard Worker [midgard_alu_op_ffloor] = {"FFLOOR", UNITS_ADD}, 74*61046927SAndroid Build Coastguard Worker [midgard_alu_op_fceil] = {"FCEIL", UNITS_ADD}, 75*61046927SAndroid Build Coastguard Worker 76*61046927SAndroid Build Coastguard Worker /* Multiplies the X/Y components of the first arg and adds the second 77*61046927SAndroid Build Coastguard Worker * arg. Like other LUTs, it must be scalarized. */ 78*61046927SAndroid Build Coastguard Worker [midgard_alu_op_ffma] = {"FMA", UNIT_VLUT}, 79*61046927SAndroid Build Coastguard Worker [midgard_alu_op_ffma_rtz] = {"FMA.rtz", UNIT_VLUT}, 80*61046927SAndroid Build Coastguard Worker [midgard_alu_op_ffma_rtn] = {"FMA.rtn", UNIT_VLUT}, 81*61046927SAndroid Build Coastguard Worker [midgard_alu_op_ffma_rtp] = {"FMA.rtp", UNIT_VLUT}, 82*61046927SAndroid Build Coastguard Worker 83*61046927SAndroid Build Coastguard Worker /* Though they output a scalar, they need to run on a vector unit 84*61046927SAndroid Build Coastguard Worker * since they process vectors */ 85*61046927SAndroid Build Coastguard Worker [midgard_alu_op_fdot3] = {"FDOT3", UNIT_VMUL | OP_CHANNEL_COUNT(3) | OP_COMMUTES}, 86*61046927SAndroid Build Coastguard Worker [midgard_alu_op_fdot3r] = {"FDOT3R", UNIT_VMUL | OP_CHANNEL_COUNT(3) | OP_COMMUTES}, 87*61046927SAndroid Build Coastguard Worker [midgard_alu_op_fdot4] = {"FDOT4", UNIT_VMUL | OP_CHANNEL_COUNT(4) | OP_COMMUTES}, 88*61046927SAndroid Build Coastguard Worker 89*61046927SAndroid Build Coastguard Worker /* Incredibly, iadd can run on vmul, etc */ 90*61046927SAndroid Build Coastguard Worker [midgard_alu_op_iadd] = {"ADD", UNITS_MOST | OP_COMMUTES}, 91*61046927SAndroid Build Coastguard Worker [midgard_alu_op_ishladd] = {"ADD", UNITS_MUL}, 92*61046927SAndroid Build Coastguard Worker [midgard_alu_op_iaddsat] = {"ADDSAT", UNITS_ADD | OP_COMMUTES}, 93*61046927SAndroid Build Coastguard Worker [midgard_alu_op_uaddsat] = {"ADDSAT", UNITS_ADD | OP_COMMUTES}, 94*61046927SAndroid Build Coastguard Worker [midgard_alu_op_uabsdiff] = {"ABSDIFF", UNITS_ADD}, 95*61046927SAndroid Build Coastguard Worker [midgard_alu_op_iabsdiff] = {"ABSDIFF", UNITS_ADD}, 96*61046927SAndroid Build Coastguard Worker [midgard_alu_op_ichoose] = {"CHOOSE", UNITS_ADD}, 97*61046927SAndroid Build Coastguard Worker [midgard_alu_op_isub] = {"SUB", UNITS_MOST}, 98*61046927SAndroid Build Coastguard Worker [midgard_alu_op_ishlsub] = {"SUB", UNITS_MUL}, 99*61046927SAndroid Build Coastguard Worker [midgard_alu_op_isubsat] = {"SUBSAT", UNITS_ADD}, 100*61046927SAndroid Build Coastguard Worker [midgard_alu_op_usubsat] = {"SUBSAT", UNITS_ADD}, 101*61046927SAndroid Build Coastguard Worker [midgard_alu_op_imul] = {"MUL", UNITS_MUL | OP_COMMUTES}, 102*61046927SAndroid Build Coastguard Worker [midgard_alu_op_iwmul] = {"WMUL.s", UNIT_VMUL | OP_COMMUTES}, 103*61046927SAndroid Build Coastguard Worker [midgard_alu_op_uwmul] = {"WMUL.u", UNIT_VMUL | OP_COMMUTES}, 104*61046927SAndroid Build Coastguard Worker [midgard_alu_op_iuwmul] = {"WMUL.su", UNIT_VMUL | OP_COMMUTES}, 105*61046927SAndroid Build Coastguard Worker [midgard_alu_op_imov] = {"MOV", UNITS_ALL | QUIRK_FLIPPED_R24}, 106*61046927SAndroid Build Coastguard Worker 107*61046927SAndroid Build Coastguard Worker /* For vector comparisons, use ball etc */ 108*61046927SAndroid Build Coastguard Worker [midgard_alu_op_feq] = {"FCMP.eq", UNITS_MOST | OP_TYPE_CONVERT | OP_COMMUTES}, 109*61046927SAndroid Build Coastguard Worker [midgard_alu_op_fne] = {"FCMP.ne", UNITS_MOST | OP_TYPE_CONVERT | OP_COMMUTES}, 110*61046927SAndroid Build Coastguard Worker [midgard_alu_op_fle] = {"FCMP.le", UNITS_MOST | OP_TYPE_CONVERT}, 111*61046927SAndroid Build Coastguard Worker [midgard_alu_op_flt] = {"FCMP.lt", UNITS_MOST | OP_TYPE_CONVERT}, 112*61046927SAndroid Build Coastguard Worker [midgard_alu_op_ieq] = {"CMP.eq", UNITS_MOST | OP_COMMUTES}, 113*61046927SAndroid Build Coastguard Worker [midgard_alu_op_ine] = {"CMP.ne", UNITS_MOST | OP_COMMUTES}, 114*61046927SAndroid Build Coastguard Worker [midgard_alu_op_ilt] = {"CMP.lt", UNITS_MOST}, 115*61046927SAndroid Build Coastguard Worker [midgard_alu_op_ile] = {"CMP.le", UNITS_MOST}, 116*61046927SAndroid Build Coastguard Worker [midgard_alu_op_ult] = {"CMP.lt", UNITS_MOST}, 117*61046927SAndroid Build Coastguard Worker [midgard_alu_op_ule] = {"CMP.le", UNITS_MOST}, 118*61046927SAndroid Build Coastguard Worker 119*61046927SAndroid Build Coastguard Worker /* CSEL (MUX) runs in the second pipeline stage, sourcing its selector 120*61046927SAndroid Build Coastguard Worker * the previous scalar or vector stage as indicated in the opcode. It 121*61046927SAndroid Build Coastguard Worker * muxes individual bits based on the selector, implementing both 122*61046927SAndroid Build Coastguard Worker * bit_select and bcsel (the latter because CMP returns 0/~0 booleans). 123*61046927SAndroid Build Coastguard Worker * 124*61046927SAndroid Build Coastguard Worker * It is legal to schedule (F)CSEL.vector to the scalar unit, but it 125*61046927SAndroid Build Coastguard Worker * isn't usually useful. Our scheduler does not handle that case, so 126*61046927SAndroid Build Coastguard Worker * don't try to and fall over. 127*61046927SAndroid Build Coastguard Worker */ 128*61046927SAndroid Build Coastguard Worker [midgard_alu_op_icsel] = {"CSEL.scalar", UNIT_VADD | UNIT_SMUL}, 129*61046927SAndroid Build Coastguard Worker [midgard_alu_op_icsel_v] = {"CSEL.vector", UNIT_VADD}, 130*61046927SAndroid Build Coastguard Worker [midgard_alu_op_fcsel_v] = {"FCSEL.vector", UNIT_VADD}, 131*61046927SAndroid Build Coastguard Worker [midgard_alu_op_fcsel] = {"FCSEL.scalar", UNIT_VADD | UNIT_SMUL}, 132*61046927SAndroid Build Coastguard Worker 133*61046927SAndroid Build Coastguard Worker [midgard_alu_op_frcp] = {"FRCP", UNIT_VLUT}, 134*61046927SAndroid Build Coastguard Worker [midgard_alu_op_frsqrt] = {"FRSQRT", UNIT_VLUT}, 135*61046927SAndroid Build Coastguard Worker [midgard_alu_op_fsqrt] = {"FSQRT", UNIT_VLUT}, 136*61046927SAndroid Build Coastguard Worker [midgard_alu_op_fpow_pt1] = {"FPOW_PT1", UNIT_VLUT}, 137*61046927SAndroid Build Coastguard Worker [midgard_alu_op_fpown_pt1] = {"FPOWN_PT1", UNIT_VLUT}, 138*61046927SAndroid Build Coastguard Worker [midgard_alu_op_fpowr_pt1] = {"FPOWR_PT1", UNIT_VLUT}, 139*61046927SAndroid Build Coastguard Worker [midgard_alu_op_fexp2] = {"FEXP2", UNIT_VLUT}, 140*61046927SAndroid Build Coastguard Worker [midgard_alu_op_flog2] = {"FLOG2", UNIT_VLUT}, 141*61046927SAndroid Build Coastguard Worker 142*61046927SAndroid Build Coastguard Worker [midgard_alu_op_f2i_rte] = {"F2I", UNITS_ADD | OP_TYPE_CONVERT | MIDGARD_ROUNDS}, 143*61046927SAndroid Build Coastguard Worker [midgard_alu_op_f2i_rtz] = {"F2I.rtz", UNITS_ADD | OP_TYPE_CONVERT}, 144*61046927SAndroid Build Coastguard Worker [midgard_alu_op_f2i_rtn] = {"F2I.rtn", UNITS_ADD | OP_TYPE_CONVERT}, 145*61046927SAndroid Build Coastguard Worker [midgard_alu_op_f2i_rtp] = {"F2I.rtp", UNITS_ADD | OP_TYPE_CONVERT}, 146*61046927SAndroid Build Coastguard Worker [midgard_alu_op_f2u_rte] = {"F2U", UNITS_ADD | OP_TYPE_CONVERT | MIDGARD_ROUNDS}, 147*61046927SAndroid Build Coastguard Worker [midgard_alu_op_f2u_rtz] = {"F2U.rtz", UNITS_ADD | OP_TYPE_CONVERT}, 148*61046927SAndroid Build Coastguard Worker [midgard_alu_op_f2u_rtn] = {"F2U.rtn", UNITS_ADD | OP_TYPE_CONVERT}, 149*61046927SAndroid Build Coastguard Worker [midgard_alu_op_f2u_rtp] = {"F2U.rtp", UNITS_ADD | OP_TYPE_CONVERT}, 150*61046927SAndroid Build Coastguard Worker [midgard_alu_op_i2f_rte] = {"I2F", UNITS_ADD | OP_TYPE_CONVERT}, 151*61046927SAndroid Build Coastguard Worker [midgard_alu_op_i2f_rtz] = {"I2F.rtz", UNITS_ADD | OP_TYPE_CONVERT}, 152*61046927SAndroid Build Coastguard Worker [midgard_alu_op_i2f_rtn] = {"I2F.rtn", UNITS_ADD | OP_TYPE_CONVERT}, 153*61046927SAndroid Build Coastguard Worker [midgard_alu_op_i2f_rtp] = {"I2F.rtp", UNITS_ADD | OP_TYPE_CONVERT}, 154*61046927SAndroid Build Coastguard Worker [midgard_alu_op_u2f_rte] = {"U2F", UNITS_ADD | OP_TYPE_CONVERT}, 155*61046927SAndroid Build Coastguard Worker [midgard_alu_op_u2f_rtz] = {"U2F.rtz", UNITS_ADD | OP_TYPE_CONVERT}, 156*61046927SAndroid Build Coastguard Worker [midgard_alu_op_u2f_rtn] = {"U2F.rtn", UNITS_ADD | OP_TYPE_CONVERT}, 157*61046927SAndroid Build Coastguard Worker [midgard_alu_op_u2f_rtp] = {"U2F.rtp", UNITS_ADD | OP_TYPE_CONVERT}, 158*61046927SAndroid Build Coastguard Worker 159*61046927SAndroid Build Coastguard Worker [midgard_alu_op_fsinpi] = {"FSINPI", UNIT_VLUT}, 160*61046927SAndroid Build Coastguard Worker [midgard_alu_op_fcospi] = {"FCOSPI", UNIT_VLUT}, 161*61046927SAndroid Build Coastguard Worker 162*61046927SAndroid Build Coastguard Worker [midgard_alu_op_iand] = {"AND", UNITS_MOST | OP_COMMUTES}, 163*61046927SAndroid Build Coastguard Worker [midgard_alu_op_iandnot] = {"ANDNOT", UNITS_MOST}, 164*61046927SAndroid Build Coastguard Worker 165*61046927SAndroid Build Coastguard Worker [midgard_alu_op_ior] = {"OR", UNITS_MOST | OP_COMMUTES}, 166*61046927SAndroid Build Coastguard Worker [midgard_alu_op_iornot] = {"ORNOT", UNITS_MOST | OP_COMMUTES}, 167*61046927SAndroid Build Coastguard Worker [midgard_alu_op_inor] = {"NOR", UNITS_MOST | OP_COMMUTES}, 168*61046927SAndroid Build Coastguard Worker [midgard_alu_op_ixor] = {"XOR", UNITS_MOST | OP_COMMUTES}, 169*61046927SAndroid Build Coastguard Worker [midgard_alu_op_inxor] = {"NXOR", UNITS_MOST | OP_COMMUTES}, 170*61046927SAndroid Build Coastguard Worker [midgard_alu_op_iclz] = {"CLZ", UNITS_ADD}, 171*61046927SAndroid Build Coastguard Worker [midgard_alu_op_ipopcnt] = {"POPCNT", UNIT_VADD}, 172*61046927SAndroid Build Coastguard Worker [midgard_alu_op_inand] = {"NAND", UNITS_MOST}, 173*61046927SAndroid Build Coastguard Worker [midgard_alu_op_ishl] = {"SHL", UNITS_ADD}, 174*61046927SAndroid Build Coastguard Worker [midgard_alu_op_ishlsat] = {"SHL.sat", UNITS_ADD}, 175*61046927SAndroid Build Coastguard Worker [midgard_alu_op_ushlsat] = {"SHL.sat", UNITS_ADD}, 176*61046927SAndroid Build Coastguard Worker [midgard_alu_op_iasr] = {"ASR", UNITS_ADD}, 177*61046927SAndroid Build Coastguard Worker [midgard_alu_op_ilsr] = {"LSR", UNITS_ADD}, 178*61046927SAndroid Build Coastguard Worker 179*61046927SAndroid Build Coastguard Worker [midgard_alu_op_fball_eq] = {"FCMP.all.eq", UNITS_VECTOR | OP_CHANNEL_COUNT(4) | OP_COMMUTES | OP_TYPE_CONVERT}, 180*61046927SAndroid Build Coastguard Worker [midgard_alu_op_fball_neq] = {"FCMP.all.ne", UNITS_VECTOR | OP_CHANNEL_COUNT(4) | OP_COMMUTES | OP_TYPE_CONVERT}, 181*61046927SAndroid Build Coastguard Worker [midgard_alu_op_fball_lt] = {"FCMP.all.lt", UNITS_VECTOR | OP_CHANNEL_COUNT(4) | OP_COMMUTES | OP_TYPE_CONVERT}, 182*61046927SAndroid Build Coastguard Worker [midgard_alu_op_fball_lte] = {"FCMP.all.le", UNITS_VECTOR | OP_CHANNEL_COUNT(4) | OP_COMMUTES | OP_TYPE_CONVERT}, 183*61046927SAndroid Build Coastguard Worker 184*61046927SAndroid Build Coastguard Worker [midgard_alu_op_fbany_eq] = {"FCMP.any.eq", UNITS_VECTOR | OP_CHANNEL_COUNT(4) | OP_COMMUTES | OP_TYPE_CONVERT}, 185*61046927SAndroid Build Coastguard Worker [midgard_alu_op_fbany_neq] = {"FCMP.any.ne", UNITS_VECTOR | OP_CHANNEL_COUNT(4) | OP_COMMUTES | OP_TYPE_CONVERT}, 186*61046927SAndroid Build Coastguard Worker [midgard_alu_op_fbany_lt] = {"FCMP.any.lt", UNITS_VECTOR | OP_CHANNEL_COUNT(4) | OP_COMMUTES | OP_TYPE_CONVERT}, 187*61046927SAndroid Build Coastguard Worker [midgard_alu_op_fbany_lte] = {"FCMP.any.le", UNITS_VECTOR | OP_CHANNEL_COUNT(4) | OP_COMMUTES | OP_TYPE_CONVERT}, 188*61046927SAndroid Build Coastguard Worker 189*61046927SAndroid Build Coastguard Worker [midgard_alu_op_iball_eq] = {"CMP.all.eq", UNITS_VECTOR | OP_CHANNEL_COUNT(4) | OP_COMMUTES}, 190*61046927SAndroid Build Coastguard Worker [midgard_alu_op_iball_neq] = {"CMP.all.ne", UNITS_VECTOR | OP_CHANNEL_COUNT(4) | OP_COMMUTES}, 191*61046927SAndroid Build Coastguard Worker [midgard_alu_op_iball_lt] = {"CMP.all.lt", UNITS_VECTOR | OP_CHANNEL_COUNT(4) | OP_COMMUTES}, 192*61046927SAndroid Build Coastguard Worker [midgard_alu_op_iball_lte] = {"CMP.all.le", UNITS_VECTOR | OP_CHANNEL_COUNT(4) | OP_COMMUTES}, 193*61046927SAndroid Build Coastguard Worker [midgard_alu_op_uball_lt] = {"CMP.all.lt", UNITS_VECTOR | OP_CHANNEL_COUNT(4) | OP_COMMUTES}, 194*61046927SAndroid Build Coastguard Worker [midgard_alu_op_uball_lte] = {"CMP.all.le", UNITS_VECTOR | OP_CHANNEL_COUNT(4) | OP_COMMUTES}, 195*61046927SAndroid Build Coastguard Worker 196*61046927SAndroid Build Coastguard Worker [midgard_alu_op_ibany_eq] = {"CMP.any.eq", UNITS_VECTOR | OP_CHANNEL_COUNT(4) | OP_COMMUTES}, 197*61046927SAndroid Build Coastguard Worker [midgard_alu_op_ibany_neq] = {"CMP.any.ne", UNITS_VECTOR | OP_CHANNEL_COUNT(4) | OP_COMMUTES}, 198*61046927SAndroid Build Coastguard Worker [midgard_alu_op_ibany_lt] = {"CMP.any.lt", UNITS_VECTOR | OP_CHANNEL_COUNT(4) | OP_COMMUTES}, 199*61046927SAndroid Build Coastguard Worker [midgard_alu_op_ibany_lte] = {"CMP.any.le", UNITS_VECTOR | OP_CHANNEL_COUNT(4) | OP_COMMUTES}, 200*61046927SAndroid Build Coastguard Worker [midgard_alu_op_ubany_lt] = {"CMP.any.lt", UNITS_VECTOR | OP_CHANNEL_COUNT(4) | OP_COMMUTES}, 201*61046927SAndroid Build Coastguard Worker [midgard_alu_op_ubany_lte] = {"CMP.any.le", UNITS_VECTOR | OP_CHANNEL_COUNT(4) | OP_COMMUTES}, 202*61046927SAndroid Build Coastguard Worker 203*61046927SAndroid Build Coastguard Worker [midgard_alu_op_fatan2_pt1] = {"FATAN2_PT1", UNIT_VLUT}, 204*61046927SAndroid Build Coastguard Worker [midgard_alu_op_fatan2_pt2] = {"FATAN2_PT2", UNIT_VLUT}, 205*61046927SAndroid Build Coastguard Worker 206*61046927SAndroid Build Coastguard Worker /* Haven't seen in a while */ 207*61046927SAndroid Build Coastguard Worker [midgard_alu_op_freduce] = {"FREDUCE", 0}, 208*61046927SAndroid Build Coastguard Worker }; 209*61046927SAndroid Build Coastguard Worker 210*61046927SAndroid Build Coastguard Worker /* Define shorthands */ 211*61046927SAndroid Build Coastguard Worker 212*61046927SAndroid Build Coastguard Worker #define M8 midgard_reg_mode_8 213*61046927SAndroid Build Coastguard Worker #define M16 midgard_reg_mode_16 214*61046927SAndroid Build Coastguard Worker #define M32 midgard_reg_mode_32 215*61046927SAndroid Build Coastguard Worker #define M64 midgard_reg_mode_64 216*61046927SAndroid Build Coastguard Worker 217*61046927SAndroid Build Coastguard Worker struct mir_ldst_op_props load_store_opcode_props[256] = { 218*61046927SAndroid Build Coastguard Worker [midgard_op_unpack_colour_f32] = {"UNPACK.f32", M32}, 219*61046927SAndroid Build Coastguard Worker [midgard_op_unpack_colour_f16] = {"UNPACK.f16", M32}, 220*61046927SAndroid Build Coastguard Worker [midgard_op_unpack_colour_u32] = {"UNPACK.u32", M32}, 221*61046927SAndroid Build Coastguard Worker [midgard_op_unpack_colour_s32] = {"UNPACK.s32", M32}, 222*61046927SAndroid Build Coastguard Worker [midgard_op_pack_colour_f32] = {"PACK.f32", M32}, 223*61046927SAndroid Build Coastguard Worker [midgard_op_pack_colour_f16] = {"PACK.f16", M32}, 224*61046927SAndroid Build Coastguard Worker [midgard_op_pack_colour_u32] = {"PACK.u32", M32}, 225*61046927SAndroid Build Coastguard Worker [midgard_op_pack_colour_s32] = {"PACK.s32", M32}, 226*61046927SAndroid Build Coastguard Worker [midgard_op_lea] = {"LEA", M32 | LDST_ADDRESS }, 227*61046927SAndroid Build Coastguard Worker [midgard_op_lea_image] = {"LEA_IMAGE", M32 | LDST_ATTRIB }, 228*61046927SAndroid Build Coastguard Worker [midgard_op_ld_cubemap_coords] = {"CUBEMAP", M32}, 229*61046927SAndroid Build Coastguard Worker [midgard_op_ldst_mov] = {"LDST_MOV", M32}, 230*61046927SAndroid Build Coastguard Worker [midgard_op_ldst_perspective_div_y] = {"LDST_PERSPECTIVE_DIV_Y", M32}, 231*61046927SAndroid Build Coastguard Worker [midgard_op_ldst_perspective_div_z] = {"LDST_PERSPECTIVE_DIV_Z", M32}, 232*61046927SAndroid Build Coastguard Worker [midgard_op_ldst_perspective_div_w] = {"LDST_PERSPECTIVE_DIV_W", M32}, 233*61046927SAndroid Build Coastguard Worker 234*61046927SAndroid Build Coastguard Worker [midgard_op_atomic_add] = {"AADD.32", M32 | LDST_SIDE_FX | LDST_ADDRESS | LDST_ATOMIC}, 235*61046927SAndroid Build Coastguard Worker [midgard_op_atomic_and] = {"AAND.32", M32 | LDST_SIDE_FX | LDST_ADDRESS | LDST_ATOMIC}, 236*61046927SAndroid Build Coastguard Worker [midgard_op_atomic_or] = {"AOR.32", M32 | LDST_SIDE_FX | LDST_ADDRESS | LDST_ATOMIC}, 237*61046927SAndroid Build Coastguard Worker [midgard_op_atomic_xor] = {"AXOR.32", M32 | LDST_SIDE_FX | LDST_ADDRESS | LDST_ATOMIC}, 238*61046927SAndroid Build Coastguard Worker [midgard_op_atomic_imin] = {"AMIN.s32", M32 | LDST_SIDE_FX | LDST_ADDRESS | LDST_ATOMIC}, 239*61046927SAndroid Build Coastguard Worker [midgard_op_atomic_umin] = {"AMIN.u32", M32 | LDST_SIDE_FX | LDST_ADDRESS | LDST_ATOMIC}, 240*61046927SAndroid Build Coastguard Worker [midgard_op_atomic_imax] = {"AMAX.s32", M32 | LDST_SIDE_FX | LDST_ADDRESS | LDST_ATOMIC}, 241*61046927SAndroid Build Coastguard Worker [midgard_op_atomic_umax] = {"AMAX.u32", M32 | LDST_SIDE_FX | LDST_ADDRESS | LDST_ATOMIC}, 242*61046927SAndroid Build Coastguard Worker [midgard_op_atomic_xchg] = {"XCHG.32", M32 | LDST_SIDE_FX | LDST_ADDRESS | LDST_ATOMIC}, 243*61046927SAndroid Build Coastguard Worker [midgard_op_atomic_cmpxchg] = {"CMPXCHG.32", M32 | LDST_SIDE_FX | LDST_ADDRESS | LDST_ATOMIC}, 244*61046927SAndroid Build Coastguard Worker 245*61046927SAndroid Build Coastguard Worker [midgard_op_atomic_add64] = {"AADD.64", M64 | LDST_SIDE_FX | LDST_ADDRESS | LDST_ATOMIC}, 246*61046927SAndroid Build Coastguard Worker [midgard_op_atomic_and64] = {"AAND.64", M64 | LDST_SIDE_FX | LDST_ADDRESS | LDST_ATOMIC}, 247*61046927SAndroid Build Coastguard Worker [midgard_op_atomic_or64] = {"AOR.64", M64 | LDST_SIDE_FX | LDST_ADDRESS | LDST_ATOMIC}, 248*61046927SAndroid Build Coastguard Worker [midgard_op_atomic_xor64] = {"AXOR.64", M64 | LDST_SIDE_FX | LDST_ADDRESS | LDST_ATOMIC}, 249*61046927SAndroid Build Coastguard Worker [midgard_op_atomic_imin64] = {"AMIN.s64", M64 | LDST_SIDE_FX | LDST_ADDRESS | LDST_ATOMIC}, 250*61046927SAndroid Build Coastguard Worker [midgard_op_atomic_umin64] = {"AMIN.u64", M64 | LDST_SIDE_FX | LDST_ADDRESS | LDST_ATOMIC}, 251*61046927SAndroid Build Coastguard Worker [midgard_op_atomic_imax64] = {"AMAX.s64", M64 | LDST_SIDE_FX | LDST_ADDRESS | LDST_ATOMIC}, 252*61046927SAndroid Build Coastguard Worker [midgard_op_atomic_umax64] = {"AMAX.u64", M64 | LDST_SIDE_FX | LDST_ADDRESS | LDST_ATOMIC}, 253*61046927SAndroid Build Coastguard Worker [midgard_op_atomic_xchg64] = {"XCHG.64", M64 | LDST_SIDE_FX | LDST_ADDRESS | LDST_ATOMIC}, 254*61046927SAndroid Build Coastguard Worker [midgard_op_atomic_cmpxchg64] = {"CMPXCHG.64", M64 | LDST_SIDE_FX | LDST_ADDRESS | LDST_ATOMIC}, 255*61046927SAndroid Build Coastguard Worker 256*61046927SAndroid Build Coastguard Worker [midgard_op_atomic_add_be] = {"AADD.32.be", M32 | LDST_SIDE_FX | LDST_ADDRESS | LDST_ATOMIC}, 257*61046927SAndroid Build Coastguard Worker [midgard_op_atomic_and_be] = {"AAND.32.be", M32 | LDST_SIDE_FX | LDST_ADDRESS | LDST_ATOMIC}, 258*61046927SAndroid Build Coastguard Worker [midgard_op_atomic_or_be] = {"AOR.32.be", M32 | LDST_SIDE_FX | LDST_ADDRESS | LDST_ATOMIC}, 259*61046927SAndroid Build Coastguard Worker [midgard_op_atomic_xor_be] = {"AXOR.32.be", M32 | LDST_SIDE_FX | LDST_ADDRESS | LDST_ATOMIC}, 260*61046927SAndroid Build Coastguard Worker [midgard_op_atomic_imin_be] = {"AMIN.s32.be", M32 | LDST_SIDE_FX | LDST_ADDRESS | LDST_ATOMIC}, 261*61046927SAndroid Build Coastguard Worker [midgard_op_atomic_umin_be] = {"AMIN.u32.be", M32 | LDST_SIDE_FX | LDST_ADDRESS | LDST_ATOMIC}, 262*61046927SAndroid Build Coastguard Worker [midgard_op_atomic_imax_be] = {"AMAX.s32.be", M32 | LDST_SIDE_FX | LDST_ADDRESS | LDST_ATOMIC}, 263*61046927SAndroid Build Coastguard Worker [midgard_op_atomic_umax_be] = {"AMAX.u32.be", M32 | LDST_SIDE_FX | LDST_ADDRESS | LDST_ATOMIC}, 264*61046927SAndroid Build Coastguard Worker [midgard_op_atomic_xchg_be] = {"XCHG.32.be", M32 | LDST_SIDE_FX | LDST_ADDRESS | LDST_ATOMIC}, 265*61046927SAndroid Build Coastguard Worker [midgard_op_atomic_cmpxchg_be] = {"CMPXCHG.32.be", M32 | LDST_SIDE_FX | LDST_ADDRESS | LDST_ATOMIC}, 266*61046927SAndroid Build Coastguard Worker 267*61046927SAndroid Build Coastguard Worker [midgard_op_atomic_add64] = {"AADD.64.be", M64 | LDST_SIDE_FX | LDST_ADDRESS | LDST_ATOMIC}, 268*61046927SAndroid Build Coastguard Worker [midgard_op_atomic_and64] = {"AAND.64.be", M64 | LDST_SIDE_FX | LDST_ADDRESS | LDST_ATOMIC}, 269*61046927SAndroid Build Coastguard Worker [midgard_op_atomic_or64] = {"AOR.64.be", M64 | LDST_SIDE_FX | LDST_ADDRESS | LDST_ATOMIC}, 270*61046927SAndroid Build Coastguard Worker [midgard_op_atomic_xor64] = {"AXOR.64.be", M64 | LDST_SIDE_FX | LDST_ADDRESS | LDST_ATOMIC}, 271*61046927SAndroid Build Coastguard Worker [midgard_op_atomic_imin64] = {"AMIN.s64.be", M64 | LDST_SIDE_FX | LDST_ADDRESS | LDST_ATOMIC}, 272*61046927SAndroid Build Coastguard Worker [midgard_op_atomic_umin64] = {"AMIN.u64.be", M64 | LDST_SIDE_FX | LDST_ADDRESS | LDST_ATOMIC}, 273*61046927SAndroid Build Coastguard Worker [midgard_op_atomic_imax64] = {"AMAX.s64.be", M64 | LDST_SIDE_FX | LDST_ADDRESS | LDST_ATOMIC}, 274*61046927SAndroid Build Coastguard Worker [midgard_op_atomic_umax64] = {"AMAX.u64.be", M64 | LDST_SIDE_FX | LDST_ADDRESS | LDST_ATOMIC}, 275*61046927SAndroid Build Coastguard Worker [midgard_op_atomic_xchg64] = {"XCHG.64.be", M64 | LDST_SIDE_FX | LDST_ADDRESS | LDST_ATOMIC}, 276*61046927SAndroid Build Coastguard Worker [midgard_op_atomic_cmpxchg64] = {"CMPXCHG.64.be", M64 | LDST_SIDE_FX | LDST_ADDRESS | LDST_ATOMIC}, 277*61046927SAndroid Build Coastguard Worker 278*61046927SAndroid Build Coastguard Worker [midgard_op_ld_u8] = {"LD.u8", M32 | LDST_ADDRESS}, 279*61046927SAndroid Build Coastguard Worker [midgard_op_ld_i8] = {"LD.s8", M32 | LDST_ADDRESS}, 280*61046927SAndroid Build Coastguard Worker [midgard_op_ld_u16] = {"LD.u16", M32 | LDST_ADDRESS}, 281*61046927SAndroid Build Coastguard Worker [midgard_op_ld_i16] = {"LD.s16", M32 | LDST_ADDRESS}, 282*61046927SAndroid Build Coastguard Worker [midgard_op_ld_u16_be] = {"LD.u16.be", M32 | LDST_ADDRESS}, 283*61046927SAndroid Build Coastguard Worker [midgard_op_ld_i16_be] = {"LD.s16.be", M32 | LDST_ADDRESS}, 284*61046927SAndroid Build Coastguard Worker [midgard_op_ld_32] = {"LD.32", M32 | LDST_ADDRESS}, 285*61046927SAndroid Build Coastguard Worker [midgard_op_ld_32_bswap2] = {"LD.32.bswap2", M32 | LDST_ADDRESS}, 286*61046927SAndroid Build Coastguard Worker [midgard_op_ld_32_bswap4] = {"LD.32.bswap4", M32 | LDST_ADDRESS}, 287*61046927SAndroid Build Coastguard Worker [midgard_op_ld_64] = {"LD.64", M32 | LDST_ADDRESS}, 288*61046927SAndroid Build Coastguard Worker [midgard_op_ld_64_bswap2] = {"LD.64.bswap2", M32 | LDST_ADDRESS}, 289*61046927SAndroid Build Coastguard Worker [midgard_op_ld_64_bswap4] = {"LD.64.bswap4", M32 | LDST_ADDRESS}, 290*61046927SAndroid Build Coastguard Worker [midgard_op_ld_64_bswap8] = {"LD.64.bswap8", M32 | LDST_ADDRESS}, 291*61046927SAndroid Build Coastguard Worker [midgard_op_ld_128] = {"LD.128", M32 | LDST_ADDRESS}, 292*61046927SAndroid Build Coastguard Worker [midgard_op_ld_128_bswap2] = {"LD.128.bswap2", M32 | LDST_ADDRESS}, 293*61046927SAndroid Build Coastguard Worker [midgard_op_ld_128_bswap4] = {"LD.128.bswap4", M32 | LDST_ADDRESS}, 294*61046927SAndroid Build Coastguard Worker [midgard_op_ld_128_bswap8] = {"LD.128.bswap8", M32 | LDST_ADDRESS}, 295*61046927SAndroid Build Coastguard Worker 296*61046927SAndroid Build Coastguard Worker [midgard_op_ld_attr_32] = {"LD_ATTR.f32", M32 | LDST_ATTRIB}, 297*61046927SAndroid Build Coastguard Worker [midgard_op_ld_attr_32i] = {"LD_ATTR.s32", M32 | LDST_ATTRIB}, 298*61046927SAndroid Build Coastguard Worker [midgard_op_ld_attr_32u] = {"LD_ATTR.u32", M32 | LDST_ATTRIB}, 299*61046927SAndroid Build Coastguard Worker [midgard_op_ld_attr_16] = {"LD_ATTR.f16", M32 | LDST_ATTRIB}, 300*61046927SAndroid Build Coastguard Worker 301*61046927SAndroid Build Coastguard Worker [midgard_op_ld_vary_32] = {"LD_VARY.f32", M32 | LDST_ATTRIB}, 302*61046927SAndroid Build Coastguard Worker [midgard_op_ld_vary_16] = {"LD_VARY.f16", M32 | LDST_ATTRIB}, 303*61046927SAndroid Build Coastguard Worker [midgard_op_ld_vary_32i] = {"LD_VARY.s32", M32 | LDST_ATTRIB}, 304*61046927SAndroid Build Coastguard Worker [midgard_op_ld_vary_32u] = {"LD_VARY.u32", M32 | LDST_ATTRIB}, 305*61046927SAndroid Build Coastguard Worker 306*61046927SAndroid Build Coastguard Worker [midgard_op_ld_special_32f] = {"LD_SPECIAL.f32", M32 | LDST_SPECIAL_MASK}, 307*61046927SAndroid Build Coastguard Worker [midgard_op_ld_special_16f] = {"LD_SPECIAL.f16", M16 | LDST_SPECIAL_MASK}, 308*61046927SAndroid Build Coastguard Worker [midgard_op_ld_special_32u] = {"LD_SPECIAL.u32", M32}, 309*61046927SAndroid Build Coastguard Worker [midgard_op_ld_special_32i] = {"LD_SPECIAL.s32", M32}, 310*61046927SAndroid Build Coastguard Worker 311*61046927SAndroid Build Coastguard Worker [midgard_op_ld_tilebuffer_32f] = {"LD_TILEBUFFER.f32", M32}, 312*61046927SAndroid Build Coastguard Worker [midgard_op_ld_tilebuffer_16f] = {"LD_TILEBUFFER.f16", M16}, 313*61046927SAndroid Build Coastguard Worker [midgard_op_ld_tilebuffer_raw] = {"LD_TILEBUFFER.raw", M32}, 314*61046927SAndroid Build Coastguard Worker 315*61046927SAndroid Build Coastguard Worker [midgard_op_ld_ubo_u8] = {"LD_UBO.u8", M32}, 316*61046927SAndroid Build Coastguard Worker [midgard_op_ld_ubo_i8] = {"LD_UBO.s8", M32}, 317*61046927SAndroid Build Coastguard Worker [midgard_op_ld_ubo_u16] = {"LD_UBO.u16", M16}, 318*61046927SAndroid Build Coastguard Worker [midgard_op_ld_ubo_i16] = {"LD_UBO.s16", M16}, 319*61046927SAndroid Build Coastguard Worker [midgard_op_ld_ubo_u16_be] = {"LD_UBO.u16.be", M16}, 320*61046927SAndroid Build Coastguard Worker [midgard_op_ld_ubo_i16_be] = {"LD_UBO.s16.be", M16}, 321*61046927SAndroid Build Coastguard Worker [midgard_op_ld_ubo_32] = {"LD_UBO.32", M32}, 322*61046927SAndroid Build Coastguard Worker [midgard_op_ld_ubo_32_bswap2] = {"LD_UBO.32.bswap2", M32}, 323*61046927SAndroid Build Coastguard Worker [midgard_op_ld_ubo_32_bswap4] = {"LD_UBO.32.bswap4", M32}, 324*61046927SAndroid Build Coastguard Worker [midgard_op_ld_ubo_64] = {"LD_UBO.64", M32}, 325*61046927SAndroid Build Coastguard Worker [midgard_op_ld_ubo_64_bswap2] = {"LD_UBO.64.bswap2", M32}, 326*61046927SAndroid Build Coastguard Worker [midgard_op_ld_ubo_64_bswap4] = {"LD_UBO.64.bswap4", M32}, 327*61046927SAndroid Build Coastguard Worker [midgard_op_ld_ubo_64_bswap8] = {"LD_UBO.64.bswap8", M32}, 328*61046927SAndroid Build Coastguard Worker [midgard_op_ld_ubo_128] = {"LD_UBO.128", M32}, 329*61046927SAndroid Build Coastguard Worker [midgard_op_ld_ubo_128_bswap2] = {"LD_UBO.128.bswap2", M32}, 330*61046927SAndroid Build Coastguard Worker [midgard_op_ld_ubo_128_bswap4] = {"LD_UBO.128.bswap4", M32}, 331*61046927SAndroid Build Coastguard Worker [midgard_op_ld_ubo_128_bswap8] = {"LD_UBO.128.bswap8", M32}, 332*61046927SAndroid Build Coastguard Worker 333*61046927SAndroid Build Coastguard Worker [midgard_op_ld_image_32f] = {"LD_IMAGE.f32", M32 | LDST_ATTRIB}, 334*61046927SAndroid Build Coastguard Worker [midgard_op_ld_image_16f] = {"LD_IMAGE.f16", M16 | LDST_ATTRIB}, 335*61046927SAndroid Build Coastguard Worker [midgard_op_ld_image_32i] = {"LD_IMAGE.s32", M32 | LDST_ATTRIB}, 336*61046927SAndroid Build Coastguard Worker [midgard_op_ld_image_32u] = {"LD_IMAGE.u32", M32 | LDST_ATTRIB}, 337*61046927SAndroid Build Coastguard Worker 338*61046927SAndroid Build Coastguard Worker [midgard_op_st_u8] = {"ST.u8", M32 | LDST_STORE | LDST_ADDRESS}, 339*61046927SAndroid Build Coastguard Worker [midgard_op_st_i8] = {"ST.s8", M32 | LDST_STORE | LDST_ADDRESS}, 340*61046927SAndroid Build Coastguard Worker [midgard_op_st_u16] = {"ST.u16", M32 | LDST_STORE | LDST_ADDRESS}, 341*61046927SAndroid Build Coastguard Worker [midgard_op_st_i16] = {"ST.s16", M32 | LDST_STORE | LDST_ADDRESS}, 342*61046927SAndroid Build Coastguard Worker [midgard_op_st_u16_be] = {"ST.u16.be", M32 | LDST_STORE | LDST_ADDRESS}, 343*61046927SAndroid Build Coastguard Worker [midgard_op_st_i16_be] = {"ST.s16.be", M32 | LDST_STORE | LDST_ADDRESS}, 344*61046927SAndroid Build Coastguard Worker [midgard_op_st_32] = {"ST.32", M32 | LDST_STORE | LDST_ADDRESS}, 345*61046927SAndroid Build Coastguard Worker [midgard_op_st_32_bswap2] = {"ST.32.bswap2", M32 | LDST_STORE | LDST_ADDRESS}, 346*61046927SAndroid Build Coastguard Worker [midgard_op_st_32_bswap4] = {"ST.32.bswap4", M32 | LDST_STORE | LDST_ADDRESS}, 347*61046927SAndroid Build Coastguard Worker [midgard_op_st_64] = {"ST.64", M32 | LDST_STORE | LDST_ADDRESS}, 348*61046927SAndroid Build Coastguard Worker [midgard_op_st_64_bswap2] = {"ST.64.bswap2", M32 | LDST_STORE | LDST_ADDRESS}, 349*61046927SAndroid Build Coastguard Worker [midgard_op_st_64_bswap4] = {"ST.64.bswap4", M32 | LDST_STORE | LDST_ADDRESS}, 350*61046927SAndroid Build Coastguard Worker [midgard_op_st_64_bswap8] = {"ST.64.bswap8", M32 | LDST_STORE | LDST_ADDRESS}, 351*61046927SAndroid Build Coastguard Worker [midgard_op_st_128] = {"ST.128", M32 | LDST_STORE | LDST_ADDRESS}, 352*61046927SAndroid Build Coastguard Worker [midgard_op_st_128_bswap2] = {"ST.128.bswap2", M32 | LDST_STORE | LDST_ADDRESS}, 353*61046927SAndroid Build Coastguard Worker [midgard_op_st_128_bswap4] = {"ST.128.bswap4", M32 | LDST_STORE | LDST_ADDRESS}, 354*61046927SAndroid Build Coastguard Worker [midgard_op_st_128_bswap8] = {"ST.128.bswap8", M32 | LDST_STORE | LDST_ADDRESS}, 355*61046927SAndroid Build Coastguard Worker 356*61046927SAndroid Build Coastguard Worker [midgard_op_st_vary_32] = {"ST_VARY.f32", M32 | LDST_STORE | LDST_ATTRIB}, 357*61046927SAndroid Build Coastguard Worker [midgard_op_st_vary_32i] = {"ST_VARY.s32", M32 | LDST_STORE | LDST_ATTRIB}, 358*61046927SAndroid Build Coastguard Worker [midgard_op_st_vary_32u] = {"ST_VARY.u32", M32 | LDST_STORE | LDST_ATTRIB}, 359*61046927SAndroid Build Coastguard Worker [midgard_op_st_vary_16] = {"ST_VARY.f16", M16 | LDST_STORE | LDST_ATTRIB}, 360*61046927SAndroid Build Coastguard Worker 361*61046927SAndroid Build Coastguard Worker [midgard_op_st_image_32f] = {"ST_IMAGE.f32", M32 | LDST_STORE | LDST_ATTRIB}, 362*61046927SAndroid Build Coastguard Worker [midgard_op_st_image_16f] = {"ST_IMAGE.f16", M16 | LDST_STORE | LDST_ATTRIB}, 363*61046927SAndroid Build Coastguard Worker [midgard_op_st_image_32i] = {"ST_IMAGE.u32", M32 | LDST_STORE | LDST_ATTRIB}, 364*61046927SAndroid Build Coastguard Worker [midgard_op_st_image_32u] = {"ST_IMAGE.s32", M32 | LDST_STORE | LDST_ATTRIB}, 365*61046927SAndroid Build Coastguard Worker 366*61046927SAndroid Build Coastguard Worker [midgard_op_st_special_32f] = {"ST_SPECIAL.f32", M32}, 367*61046927SAndroid Build Coastguard Worker [midgard_op_st_special_16f] = {"ST_SPECIAL.f16", M16}, 368*61046927SAndroid Build Coastguard Worker [midgard_op_st_special_32u] = {"ST_SPECIAL.u32", M32}, 369*61046927SAndroid Build Coastguard Worker [midgard_op_st_special_32i] = {"ST_SPECIAL.s32", M32}, 370*61046927SAndroid Build Coastguard Worker 371*61046927SAndroid Build Coastguard Worker [midgard_op_st_tilebuffer_32f] = {"ST_TILEBUFFER.f32", M32}, 372*61046927SAndroid Build Coastguard Worker [midgard_op_st_tilebuffer_16f] = {"ST_TILEBUFFER.f16", M16}, 373*61046927SAndroid Build Coastguard Worker [midgard_op_st_tilebuffer_raw] = {"ST_TILEBUFFER.raw", M32}, 374*61046927SAndroid Build Coastguard Worker }; 375*61046927SAndroid Build Coastguard Worker 376*61046927SAndroid Build Coastguard Worker struct mir_tex_op_props tex_opcode_props[16] = { 377*61046927SAndroid Build Coastguard Worker [midgard_tex_op_normal] = {"TEX", M32}, 378*61046927SAndroid Build Coastguard Worker [midgard_tex_op_gradient] = {"TEX_GRAD", M32}, 379*61046927SAndroid Build Coastguard Worker [midgard_tex_op_fetch] = {"TEX_FETCH", M32}, 380*61046927SAndroid Build Coastguard Worker [midgard_tex_op_grad_from_derivative] = {"DER_TO_GRAD", M32}, 381*61046927SAndroid Build Coastguard Worker [midgard_tex_op_grad_from_coords] = {"COORDS_TO_GRAD", M32}, 382*61046927SAndroid Build Coastguard Worker [midgard_tex_op_mov] = {"MOV", M32}, 383*61046927SAndroid Build Coastguard Worker [midgard_tex_op_barrier] = {"BARRIER", M32}, 384*61046927SAndroid Build Coastguard Worker [midgard_tex_op_derivative] = {"DERIVATIVE", M32} 385*61046927SAndroid Build Coastguard Worker }; 386*61046927SAndroid Build Coastguard Worker 387*61046927SAndroid Build Coastguard Worker #undef M8 388*61046927SAndroid Build Coastguard Worker #undef M16 389*61046927SAndroid Build Coastguard Worker #undef M32 390*61046927SAndroid Build Coastguard Worker #undef M64 391*61046927SAndroid Build Coastguard Worker 392*61046927SAndroid Build Coastguard Worker struct mir_tag_props midgard_tag_props[16] = { 393*61046927SAndroid Build Coastguard Worker [TAG_INVALID] = {"invalid", 0}, 394*61046927SAndroid Build Coastguard Worker [TAG_BREAK] = {"break", 0}, 395*61046927SAndroid Build Coastguard Worker [TAG_TEXTURE_4_VTX] = {"tex/vt", 1}, 396*61046927SAndroid Build Coastguard Worker [TAG_TEXTURE_4] = {"tex", 1}, 397*61046927SAndroid Build Coastguard Worker [TAG_TEXTURE_4_BARRIER] = {"tex/bar", 1}, 398*61046927SAndroid Build Coastguard Worker [TAG_LOAD_STORE_4] = {"ldst", 1}, 399*61046927SAndroid Build Coastguard Worker [TAG_UNKNOWN_1] = {"unk1", 1}, 400*61046927SAndroid Build Coastguard Worker [TAG_UNKNOWN_2] = {"unk2", 1}, 401*61046927SAndroid Build Coastguard Worker [TAG_ALU_4] = {"alu/4", 1}, 402*61046927SAndroid Build Coastguard Worker [TAG_ALU_8] = {"alu/8", 2}, 403*61046927SAndroid Build Coastguard Worker [TAG_ALU_12] = {"alu/12", 3}, 404*61046927SAndroid Build Coastguard Worker [TAG_ALU_16] = {"alu/16", 4}, 405*61046927SAndroid Build Coastguard Worker [TAG_ALU_4_WRITEOUT] = {"aluw/4", 1}, 406*61046927SAndroid Build Coastguard Worker [TAG_ALU_8_WRITEOUT] = {"aluw/8", 2}, 407*61046927SAndroid Build Coastguard Worker [TAG_ALU_12_WRITEOUT] = {"aluw/12", 3}, 408*61046927SAndroid Build Coastguard Worker [TAG_ALU_16_WRITEOUT] = {"aluw/16", 4} 409*61046927SAndroid Build Coastguard Worker }; 410*61046927SAndroid Build Coastguard Worker /* clang-format on */ 411