xref: /aosp_15_r20/external/mesa3d/src/panfrost/midgard/midgard_ops.c (revision 6104692788411f58d303aa86923a9ff6ecaded22)
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