1*61046927SAndroid Build Coastguard Worker /* 2*61046927SAndroid Build Coastguard Worker * Copyright © 2022 Imagination Technologies 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 (including the next 12*61046927SAndroid Build Coastguard Worker * paragraph) shall be included in all copies or substantial portions of the 13*61046927SAndroid Build Coastguard Worker * Software. 14*61046927SAndroid Build Coastguard Worker * 15*61046927SAndroid Build Coastguard Worker * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16*61046927SAndroid Build Coastguard Worker * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17*61046927SAndroid Build Coastguard Worker * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18*61046927SAndroid Build Coastguard Worker * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19*61046927SAndroid Build Coastguard Worker * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20*61046927SAndroid Build Coastguard Worker * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21*61046927SAndroid Build Coastguard Worker * SOFTWARE. 22*61046927SAndroid Build Coastguard Worker */ 23*61046927SAndroid Build Coastguard Worker 24*61046927SAndroid Build Coastguard Worker #include "rogue.h" 25*61046927SAndroid Build Coastguard Worker 26*61046927SAndroid Build Coastguard Worker /** 27*61046927SAndroid Build Coastguard Worker * \file rogue_info.c 28*61046927SAndroid Build Coastguard Worker * 29*61046927SAndroid Build Coastguard Worker * \brief Contains information and definitions for defined types and structures. 30*61046927SAndroid Build Coastguard Worker */ 31*61046927SAndroid Build Coastguard Worker 32*61046927SAndroid Build Coastguard Worker /* TODO: Adjust according to core configurations. */ 33*61046927SAndroid Build Coastguard Worker /* TODO: Remaining restrictions, e.g. some registers are only 34*61046927SAndroid Build Coastguard Worker * usable by a particular instruction (vertex output) etc. */ 35*61046927SAndroid Build Coastguard Worker #define S(n) BITFIELD64_BIT(ROGUE_IO_S##n - 1) 36*61046927SAndroid Build Coastguard Worker const rogue_reg_info rogue_reg_infos[ROGUE_REG_CLASS_COUNT] = { 37*61046927SAndroid Build Coastguard Worker [ROGUE_REG_CLASS_INVALID] = { .name = "!INVALID!", .str = "!INVALID!", }, 38*61046927SAndroid Build Coastguard Worker [ROGUE_REG_CLASS_SSA] = { .name = "ssa", .str = "R", }, 39*61046927SAndroid Build Coastguard Worker [ROGUE_REG_CLASS_TEMP] = { .name = "temp", .str = "r", .num = 248, }, 40*61046927SAndroid Build Coastguard Worker [ROGUE_REG_CLASS_COEFF] = { .name = "coeff", .str = "cf", .num = 4096, .supported_io_srcs = S(0) | S(2) | S(3), }, 41*61046927SAndroid Build Coastguard Worker [ROGUE_REG_CLASS_SHARED] = { .name = "shared", .str = "sh", .num = 4096, .supported_io_srcs = S(0) | S(2) | S(3), }, 42*61046927SAndroid Build Coastguard Worker [ROGUE_REG_CLASS_SPECIAL] = { .name = "special", .str = "sr", .num = 240, }, /* TODO NEXT: Only S1, S2, S4. */ 43*61046927SAndroid Build Coastguard Worker [ROGUE_REG_CLASS_INTERNAL] = { .name = "internal", .str = "i", .num = 8, }, 44*61046927SAndroid Build Coastguard Worker [ROGUE_REG_CLASS_CONST] = { .name = "const", .str = "sc", .num = 240, }, 45*61046927SAndroid Build Coastguard Worker [ROGUE_REG_CLASS_PIXOUT] = { .name = "pixout", .str = "po", .num = 8, .supported_io_srcs = S(0) | S(2) | S(3), }, 46*61046927SAndroid Build Coastguard Worker [ROGUE_REG_CLASS_VTXIN] = { .name = "vtxin", .str = "vi", .num = 248, }, 47*61046927SAndroid Build Coastguard Worker [ROGUE_REG_CLASS_VTXOUT] = { .name = "vtxout", .str = "vo", .num = 256, }, 48*61046927SAndroid Build Coastguard Worker }; 49*61046927SAndroid Build Coastguard Worker #undef S 50*61046927SAndroid Build Coastguard Worker 51*61046927SAndroid Build Coastguard Worker const rogue_regalloc_info regalloc_info[ROGUE_REGALLOC_CLASS_COUNT] = { 52*61046927SAndroid Build Coastguard Worker [ROGUE_REGALLOC_CLASS_TEMP_1] = { .class = ROGUE_REG_CLASS_TEMP, .stride = 1, }, 53*61046927SAndroid Build Coastguard Worker [ROGUE_REGALLOC_CLASS_TEMP_2] = { .class = ROGUE_REG_CLASS_TEMP, .stride = 2, }, 54*61046927SAndroid Build Coastguard Worker [ROGUE_REGALLOC_CLASS_TEMP_4] = { .class = ROGUE_REG_CLASS_TEMP, .stride = 4, }, 55*61046927SAndroid Build Coastguard Worker }; 56*61046927SAndroid Build Coastguard Worker 57*61046927SAndroid Build Coastguard Worker const rogue_reg_dst_info rogue_reg_dst_infos[ROGUE_REG_DST_VARIANTS] = { 58*61046927SAndroid Build Coastguard Worker { 59*61046927SAndroid Build Coastguard Worker .num_dsts = 1, 60*61046927SAndroid Build Coastguard Worker .bank_bits = { 1 }, 61*61046927SAndroid Build Coastguard Worker .index_bits = { 6 }, 62*61046927SAndroid Build Coastguard Worker .bytes = 1, 63*61046927SAndroid Build Coastguard Worker }, 64*61046927SAndroid Build Coastguard Worker { 65*61046927SAndroid Build Coastguard Worker .num_dsts = 1, 66*61046927SAndroid Build Coastguard Worker .bank_bits = { 3 }, 67*61046927SAndroid Build Coastguard Worker .index_bits = { 11 }, 68*61046927SAndroid Build Coastguard Worker .bytes = 2, 69*61046927SAndroid Build Coastguard Worker }, 70*61046927SAndroid Build Coastguard Worker { 71*61046927SAndroid Build Coastguard Worker .num_dsts = 2, 72*61046927SAndroid Build Coastguard Worker .bank_bits = { 1, 1 }, 73*61046927SAndroid Build Coastguard Worker .index_bits = { 7, 6 }, 74*61046927SAndroid Build Coastguard Worker .bytes = 2, 75*61046927SAndroid Build Coastguard Worker }, 76*61046927SAndroid Build Coastguard Worker { 77*61046927SAndroid Build Coastguard Worker .num_dsts = 2, 78*61046927SAndroid Build Coastguard Worker .bank_bits = { 3, 3 }, 79*61046927SAndroid Build Coastguard Worker .index_bits = { 8, 8 }, 80*61046927SAndroid Build Coastguard Worker .bytes = 3, 81*61046927SAndroid Build Coastguard Worker }, 82*61046927SAndroid Build Coastguard Worker { 83*61046927SAndroid Build Coastguard Worker .num_dsts = 2, 84*61046927SAndroid Build Coastguard Worker .bank_bits = { 3, 3 }, 85*61046927SAndroid Build Coastguard Worker .index_bits = { 11, 11 }, 86*61046927SAndroid Build Coastguard Worker .bytes = 4, 87*61046927SAndroid Build Coastguard Worker }, 88*61046927SAndroid Build Coastguard Worker }; 89*61046927SAndroid Build Coastguard Worker 90*61046927SAndroid Build Coastguard Worker const rogue_reg_src_info rogue_reg_lower_src_infos[ROGUE_REG_SRC_VARIANTS] = { 91*61046927SAndroid Build Coastguard Worker { 92*61046927SAndroid Build Coastguard Worker .num_srcs = 1, 93*61046927SAndroid Build Coastguard Worker .mux_bits = 0, 94*61046927SAndroid Build Coastguard Worker .bank_bits = { 1 }, 95*61046927SAndroid Build Coastguard Worker .index_bits = { 6 }, 96*61046927SAndroid Build Coastguard Worker .bytes = 1, 97*61046927SAndroid Build Coastguard Worker }, 98*61046927SAndroid Build Coastguard Worker { 99*61046927SAndroid Build Coastguard Worker .num_srcs = 1, 100*61046927SAndroid Build Coastguard Worker .mux_bits = 2, 101*61046927SAndroid Build Coastguard Worker .bank_bits = { 3 }, 102*61046927SAndroid Build Coastguard Worker .index_bits = { 11 }, 103*61046927SAndroid Build Coastguard Worker .bytes = 3, 104*61046927SAndroid Build Coastguard Worker }, 105*61046927SAndroid Build Coastguard Worker { 106*61046927SAndroid Build Coastguard Worker .num_srcs = 2, 107*61046927SAndroid Build Coastguard Worker .mux_bits = 0, 108*61046927SAndroid Build Coastguard Worker .bank_bits = { 1, 1 }, 109*61046927SAndroid Build Coastguard Worker .index_bits = { 6, 5 }, 110*61046927SAndroid Build Coastguard Worker .bytes = 2, 111*61046927SAndroid Build Coastguard Worker }, 112*61046927SAndroid Build Coastguard Worker { 113*61046927SAndroid Build Coastguard Worker .num_srcs = 2, 114*61046927SAndroid Build Coastguard Worker .mux_bits = 2, 115*61046927SAndroid Build Coastguard Worker .bank_bits = { 2, 2 }, 116*61046927SAndroid Build Coastguard Worker .index_bits = { 7, 7 }, 117*61046927SAndroid Build Coastguard Worker .bytes = 3, 118*61046927SAndroid Build Coastguard Worker }, 119*61046927SAndroid Build Coastguard Worker { 120*61046927SAndroid Build Coastguard Worker .num_srcs = 2, 121*61046927SAndroid Build Coastguard Worker .mux_bits = 3, 122*61046927SAndroid Build Coastguard Worker .bank_bits = { 3, 2 }, 123*61046927SAndroid Build Coastguard Worker .index_bits = { 11, 8 }, 124*61046927SAndroid Build Coastguard Worker .bytes = 4, 125*61046927SAndroid Build Coastguard Worker }, 126*61046927SAndroid Build Coastguard Worker { 127*61046927SAndroid Build Coastguard Worker .num_srcs = 3, 128*61046927SAndroid Build Coastguard Worker .mux_bits = 2, 129*61046927SAndroid Build Coastguard Worker .bank_bits = { 2, 2, 2 }, 130*61046927SAndroid Build Coastguard Worker .index_bits = { 7, 7, 6 }, 131*61046927SAndroid Build Coastguard Worker .bytes = 4, 132*61046927SAndroid Build Coastguard Worker }, 133*61046927SAndroid Build Coastguard Worker { 134*61046927SAndroid Build Coastguard Worker .num_srcs = 3, 135*61046927SAndroid Build Coastguard Worker .mux_bits = 3, 136*61046927SAndroid Build Coastguard Worker .bank_bits = { 3, 2, 3 }, 137*61046927SAndroid Build Coastguard Worker .index_bits = { 8, 8, 8 }, 138*61046927SAndroid Build Coastguard Worker .bytes = 5, 139*61046927SAndroid Build Coastguard Worker }, 140*61046927SAndroid Build Coastguard Worker { 141*61046927SAndroid Build Coastguard Worker .num_srcs = 3, 142*61046927SAndroid Build Coastguard Worker .mux_bits = 3, 143*61046927SAndroid Build Coastguard Worker .bank_bits = { 3, 2, 3 }, 144*61046927SAndroid Build Coastguard Worker .index_bits = { 11, 8, 11 }, 145*61046927SAndroid Build Coastguard Worker .bytes = 6, 146*61046927SAndroid Build Coastguard Worker }, 147*61046927SAndroid Build Coastguard Worker }; 148*61046927SAndroid Build Coastguard Worker 149*61046927SAndroid Build Coastguard Worker const rogue_reg_src_info rogue_reg_upper_src_infos[ROGUE_REG_SRC_VARIANTS] = { 150*61046927SAndroid Build Coastguard Worker { 151*61046927SAndroid Build Coastguard Worker .num_srcs = 1, 152*61046927SAndroid Build Coastguard Worker .bank_bits = { 1 }, 153*61046927SAndroid Build Coastguard Worker .index_bits = { 6 }, 154*61046927SAndroid Build Coastguard Worker .bytes = 1, 155*61046927SAndroid Build Coastguard Worker }, 156*61046927SAndroid Build Coastguard Worker { 157*61046927SAndroid Build Coastguard Worker .num_srcs = 1, 158*61046927SAndroid Build Coastguard Worker .bank_bits = { 3 }, 159*61046927SAndroid Build Coastguard Worker .index_bits = { 11 }, 160*61046927SAndroid Build Coastguard Worker .bytes = 3, 161*61046927SAndroid Build Coastguard Worker }, 162*61046927SAndroid Build Coastguard Worker { 163*61046927SAndroid Build Coastguard Worker .num_srcs = 2, 164*61046927SAndroid Build Coastguard Worker .bank_bits = { 1, 1 }, 165*61046927SAndroid Build Coastguard Worker .index_bits = { 6, 5 }, 166*61046927SAndroid Build Coastguard Worker .bytes = 2, 167*61046927SAndroid Build Coastguard Worker }, 168*61046927SAndroid Build Coastguard Worker { 169*61046927SAndroid Build Coastguard Worker .num_srcs = 2, 170*61046927SAndroid Build Coastguard Worker .bank_bits = { 2, 2 }, 171*61046927SAndroid Build Coastguard Worker .index_bits = { 7, 7 }, 172*61046927SAndroid Build Coastguard Worker .bytes = 3, 173*61046927SAndroid Build Coastguard Worker }, 174*61046927SAndroid Build Coastguard Worker { 175*61046927SAndroid Build Coastguard Worker .num_srcs = 2, 176*61046927SAndroid Build Coastguard Worker .bank_bits = { 3, 2 }, 177*61046927SAndroid Build Coastguard Worker .index_bits = { 11, 8 }, 178*61046927SAndroid Build Coastguard Worker .bytes = 4, 179*61046927SAndroid Build Coastguard Worker }, 180*61046927SAndroid Build Coastguard Worker { 181*61046927SAndroid Build Coastguard Worker .num_srcs = 3, 182*61046927SAndroid Build Coastguard Worker .bank_bits = { 2, 2, 2 }, 183*61046927SAndroid Build Coastguard Worker .index_bits = { 7, 7, 6 }, 184*61046927SAndroid Build Coastguard Worker .bytes = 4, 185*61046927SAndroid Build Coastguard Worker }, 186*61046927SAndroid Build Coastguard Worker { 187*61046927SAndroid Build Coastguard Worker .num_srcs = 3, 188*61046927SAndroid Build Coastguard Worker .bank_bits = { 3, 2, 2 }, 189*61046927SAndroid Build Coastguard Worker .index_bits = { 8, 8, 8 }, 190*61046927SAndroid Build Coastguard Worker .bytes = 5, 191*61046927SAndroid Build Coastguard Worker }, 192*61046927SAndroid Build Coastguard Worker { 193*61046927SAndroid Build Coastguard Worker .num_srcs = 3, 194*61046927SAndroid Build Coastguard Worker .bank_bits = { 3, 2, 2 }, 195*61046927SAndroid Build Coastguard Worker .index_bits = { 11, 8, 8 }, 196*61046927SAndroid Build Coastguard Worker .bytes = 6, 197*61046927SAndroid Build Coastguard Worker }, 198*61046927SAndroid Build Coastguard Worker }; 199*61046927SAndroid Build Coastguard Worker 200*61046927SAndroid Build Coastguard Worker #define OM(op_mod) BITFIELD64_BIT(ROGUE_ALU_OP_MOD_##op_mod) 201*61046927SAndroid Build Coastguard Worker const rogue_alu_op_mod_info rogue_alu_op_mod_infos[ROGUE_ALU_OP_MOD_COUNT] = { 202*61046927SAndroid Build Coastguard Worker [ROGUE_ALU_OP_MOD_LP] = { .str = "lp", }, 203*61046927SAndroid Build Coastguard Worker [ROGUE_ALU_OP_MOD_SAT] = { .str = "sat", }, 204*61046927SAndroid Build Coastguard Worker [ROGUE_ALU_OP_MOD_SCALE] = { .str = "scale", }, 205*61046927SAndroid Build Coastguard Worker [ROGUE_ALU_OP_MOD_ROUNDZERO] = { .str = "roundzero", }, 206*61046927SAndroid Build Coastguard Worker 207*61046927SAndroid Build Coastguard Worker [ROGUE_ALU_OP_MOD_Z] = { .str = "z", .exclude = OM(GZ) | OM(GEZ) | OM(C) | OM(E) | OM(G) | OM(GE) | OM(NE) | OM(L) | OM(LE) }, 208*61046927SAndroid Build Coastguard Worker [ROGUE_ALU_OP_MOD_GZ] = { .str = "gz", .exclude = OM(Z) | OM(GEZ) | OM(C) | OM(E) | OM(G) | OM(GE) | OM(NE) | OM(L) | OM(LE) }, 209*61046927SAndroid Build Coastguard Worker [ROGUE_ALU_OP_MOD_GEZ] = { .str = "gez", .exclude = OM(Z) | OM(GZ) | OM(C) | OM(E) | OM(G) | OM(GE) | OM(NE) | OM(L) | OM(LE) }, 210*61046927SAndroid Build Coastguard Worker [ROGUE_ALU_OP_MOD_C] = { .str = "c", .exclude = OM(Z) | OM(GZ) | OM(GEZ) | OM(E) | OM(G) | OM(GE) | OM(NE) | OM(L) | OM(LE) }, 211*61046927SAndroid Build Coastguard Worker [ROGUE_ALU_OP_MOD_E] = { .str = "e", .exclude = OM(Z) | OM(GZ) | OM(GEZ) | OM(C) | OM(G) | OM(GE) | OM(NE) | OM(L) | OM(LE) }, 212*61046927SAndroid Build Coastguard Worker [ROGUE_ALU_OP_MOD_G] = { .str = "g", .exclude = OM(Z) | OM(GZ) | OM(GEZ) | OM(C) | OM(E) | OM(GE) | OM(NE) | OM(L) | OM(LE) }, 213*61046927SAndroid Build Coastguard Worker [ROGUE_ALU_OP_MOD_GE] = { .str = "ge", .exclude = OM(Z) | OM(GZ) | OM(GEZ) | OM(C) | OM(E) | OM(G) | OM(NE) | OM(L) | OM(LE) }, 214*61046927SAndroid Build Coastguard Worker [ROGUE_ALU_OP_MOD_NE] = { .str = "ne", .exclude = OM(Z) | OM(GZ) | OM(GEZ) | OM(C) | OM(E) | OM(G) | OM(GE) | OM(L) | OM(LE) }, 215*61046927SAndroid Build Coastguard Worker [ROGUE_ALU_OP_MOD_L] = { .str = "l", .exclude = OM(Z) | OM(GZ) | OM(GEZ) | OM(C) | OM(E) | OM(G) | OM(GE) | OM(NE) | OM(LE) }, 216*61046927SAndroid Build Coastguard Worker [ROGUE_ALU_OP_MOD_LE] = { .str = "le", .exclude = OM(Z) | OM(GZ) | OM(GEZ) | OM(C) | OM(E) | OM(G) | OM(GE) | OM(NE) | OM(L) }, 217*61046927SAndroid Build Coastguard Worker 218*61046927SAndroid Build Coastguard Worker [ROGUE_ALU_OP_MOD_F32] = { .str = "f32", .exclude = OM(U16) | OM(S16) | OM(U8) | OM(S8) | OM(U32) | OM(S32) }, 219*61046927SAndroid Build Coastguard Worker [ROGUE_ALU_OP_MOD_U16] = { .str = "u16", .exclude = OM(F32) | OM(S16) | OM(U8) | OM(S8) | OM(U32) | OM(S32) }, 220*61046927SAndroid Build Coastguard Worker [ROGUE_ALU_OP_MOD_S16] = { .str = "s16", .exclude = OM(F32) | OM(U16) | OM(U8) | OM(S8) | OM(U32) | OM(S32) }, 221*61046927SAndroid Build Coastguard Worker [ROGUE_ALU_OP_MOD_U8] = { .str = "u8", .exclude = OM(F32) | OM(U16) | OM(S16) | OM(S8) | OM(U32) | OM(S32) }, 222*61046927SAndroid Build Coastguard Worker [ROGUE_ALU_OP_MOD_S8] = { .str = "s8", .exclude = OM(F32) | OM(U16) | OM(S16) | OM(U8) | OM(U32) | OM(S32) }, 223*61046927SAndroid Build Coastguard Worker [ROGUE_ALU_OP_MOD_U32] = { .str = "u32", .exclude = OM(F32) | OM(U16) | OM(S16) | OM(U8) | OM(S8) | OM(S32) }, 224*61046927SAndroid Build Coastguard Worker [ROGUE_ALU_OP_MOD_S32] = { .str = "s32", .exclude = OM(F32) | OM(U16) | OM(S16) | OM(U8) | OM(S8) | OM(U32) }, 225*61046927SAndroid Build Coastguard Worker }; 226*61046927SAndroid Build Coastguard Worker #undef OM 227*61046927SAndroid Build Coastguard Worker 228*61046927SAndroid Build Coastguard Worker const rogue_alu_dst_mod_info rogue_alu_dst_mod_infos[ROGUE_ALU_DST_MOD_COUNT] = { 229*61046927SAndroid Build Coastguard Worker [ROGUE_ALU_DST_MOD_E0] = { .str = "e0", }, 230*61046927SAndroid Build Coastguard Worker [ROGUE_ALU_DST_MOD_E1] = { .str = "e1", }, 231*61046927SAndroid Build Coastguard Worker [ROGUE_ALU_DST_MOD_E2] = { .str = "e2", }, 232*61046927SAndroid Build Coastguard Worker [ROGUE_ALU_DST_MOD_E3] = { .str = "e3", }, 233*61046927SAndroid Build Coastguard Worker }; 234*61046927SAndroid Build Coastguard Worker 235*61046927SAndroid Build Coastguard Worker const rogue_alu_src_mod_info rogue_alu_src_mod_infos[ROGUE_ALU_SRC_MOD_COUNT] = { 236*61046927SAndroid Build Coastguard Worker [ROGUE_ALU_SRC_MOD_FLR] = { .str = "flr", }, 237*61046927SAndroid Build Coastguard Worker [ROGUE_ALU_SRC_MOD_ABS] = { .str = "abs", }, 238*61046927SAndroid Build Coastguard Worker [ROGUE_ALU_SRC_MOD_NEG] = { .str = "neg", }, 239*61046927SAndroid Build Coastguard Worker [ROGUE_ALU_SRC_MOD_E0] = { .str = "e0", }, 240*61046927SAndroid Build Coastguard Worker [ROGUE_ALU_SRC_MOD_E1] = { .str = "e1", }, 241*61046927SAndroid Build Coastguard Worker [ROGUE_ALU_SRC_MOD_E2] = { .str = "e2", }, 242*61046927SAndroid Build Coastguard Worker [ROGUE_ALU_SRC_MOD_E3] = { .str = "e3", }, 243*61046927SAndroid Build Coastguard Worker }; 244*61046927SAndroid Build Coastguard Worker 245*61046927SAndroid Build Coastguard Worker #define OM(op_mod) BITFIELD64_BIT(ROGUE_CTRL_OP_MOD_##op_mod) 246*61046927SAndroid Build Coastguard Worker const rogue_ctrl_op_mod_info rogue_ctrl_op_mod_infos[ROGUE_CTRL_OP_MOD_COUNT] = { 247*61046927SAndroid Build Coastguard Worker [ROGUE_CTRL_OP_MOD_LINK] = { .str = "link", }, 248*61046927SAndroid Build Coastguard Worker [ROGUE_CTRL_OP_MOD_ALLINST] = { .str = "allinst", .exclude = OM(ANYINST) }, 249*61046927SAndroid Build Coastguard Worker [ROGUE_CTRL_OP_MOD_ANYINST] = { .str = "anyinst", .exclude = OM(ALLINST) }, 250*61046927SAndroid Build Coastguard Worker [ROGUE_CTRL_OP_MOD_END] = { .str = "end", }, 251*61046927SAndroid Build Coastguard Worker }; 252*61046927SAndroid Build Coastguard Worker #undef OM 253*61046927SAndroid Build Coastguard Worker 254*61046927SAndroid Build Coastguard Worker #define OM(op_mod) BITFIELD64_BIT(ROGUE_CTRL_OP_MOD_##op_mod) 255*61046927SAndroid Build Coastguard Worker #define T(type) BITFIELD64_BIT(ROGUE_REF_TYPE_##type - 1) 256*61046927SAndroid Build Coastguard Worker const rogue_ctrl_op_info rogue_ctrl_op_infos[ROGUE_CTRL_OP_COUNT] = { 257*61046927SAndroid Build Coastguard Worker [ROGUE_CTRL_OP_INVALID] = { .str = "!INVALID!", }, 258*61046927SAndroid Build Coastguard Worker [ROGUE_CTRL_OP_END] = { .str = "end", .ends_block = true, }, 259*61046927SAndroid Build Coastguard Worker [ROGUE_CTRL_OP_NOP] = { .str = "nop", 260*61046927SAndroid Build Coastguard Worker .supported_op_mods = OM(END), 261*61046927SAndroid Build Coastguard Worker }, 262*61046927SAndroid Build Coastguard Worker [ROGUE_CTRL_OP_WOP] = { .str = "wop", }, 263*61046927SAndroid Build Coastguard Worker [ROGUE_CTRL_OP_BR] = { .str = "br", .has_target = true, .ends_block = true, 264*61046927SAndroid Build Coastguard Worker .supported_op_mods = OM(LINK) | OM(ALLINST) | OM(ANYINST), 265*61046927SAndroid Build Coastguard Worker }, 266*61046927SAndroid Build Coastguard Worker [ROGUE_CTRL_OP_BA] = { .str = "ba", .ends_block = true, .num_srcs = 1, 267*61046927SAndroid Build Coastguard Worker .supported_op_mods = OM(LINK) | OM(ALLINST) | OM(ANYINST), 268*61046927SAndroid Build Coastguard Worker .supported_src_types = { [0] = T(VAL), }, 269*61046927SAndroid Build Coastguard Worker }, 270*61046927SAndroid Build Coastguard Worker [ROGUE_CTRL_OP_WDF] = { .str = "wdf", .num_srcs = 1, 271*61046927SAndroid Build Coastguard Worker .supported_src_types = { [0] = T(DRC), }, 272*61046927SAndroid Build Coastguard Worker }, 273*61046927SAndroid Build Coastguard Worker }; 274*61046927SAndroid Build Coastguard Worker #undef T 275*61046927SAndroid Build Coastguard Worker #undef OM 276*61046927SAndroid Build Coastguard Worker 277*61046927SAndroid Build Coastguard Worker #define IO(io) ROGUE_IO_##io 278*61046927SAndroid Build Coastguard Worker #define OM(op_mod) BITFIELD64_BIT(ROGUE_BACKEND_OP_MOD_##op_mod) 279*61046927SAndroid Build Coastguard Worker #define T(type) BITFIELD64_BIT(ROGUE_REF_TYPE_##type - 1) 280*61046927SAndroid Build Coastguard Worker #define B(n) BITFIELD64_BIT(n) 281*61046927SAndroid Build Coastguard Worker const rogue_backend_op_info rogue_backend_op_infos[ROGUE_BACKEND_OP_COUNT] = { 282*61046927SAndroid Build Coastguard Worker [ROGUE_BACKEND_OP_INVALID] = { .str = "!INVALID!", }, 283*61046927SAndroid Build Coastguard Worker [ROGUE_BACKEND_OP_UVSW_WRITE] = { .str = "uvsw.write", .num_dsts = 1, .num_srcs = 1, 284*61046927SAndroid Build Coastguard Worker .phase_io = { .src[0] = IO(W0), }, 285*61046927SAndroid Build Coastguard Worker .supported_dst_types = { [0] = T(REG), }, 286*61046927SAndroid Build Coastguard Worker .supported_src_types = { [0] = T(REG), }, 287*61046927SAndroid Build Coastguard Worker }, 288*61046927SAndroid Build Coastguard Worker [ROGUE_BACKEND_OP_UVSW_EMIT] = { .str = "uvsw.emit", }, 289*61046927SAndroid Build Coastguard Worker [ROGUE_BACKEND_OP_UVSW_ENDTASK] = { .str = "uvsw.endtask", }, 290*61046927SAndroid Build Coastguard Worker 291*61046927SAndroid Build Coastguard Worker [ROGUE_BACKEND_OP_UVSW_EMITTHENENDTASK] = { .str = "uvsw.emitthenendtask", }, 292*61046927SAndroid Build Coastguard Worker [ROGUE_BACKEND_OP_UVSW_WRITETHENEMITTHENENDTASK] = { .str = "uvsw.writethenemitthenendtask", .num_dsts = 1, .num_srcs = 1, 293*61046927SAndroid Build Coastguard Worker .phase_io = { .src[0] = IO(W0), }, 294*61046927SAndroid Build Coastguard Worker .supported_dst_types = { [0] = T(REG), }, 295*61046927SAndroid Build Coastguard Worker .supported_src_types = { [0] = T(REG), }, 296*61046927SAndroid Build Coastguard Worker }, 297*61046927SAndroid Build Coastguard Worker [ROGUE_BACKEND_OP_IDF] = { .str = "idf", .num_srcs = 2, 298*61046927SAndroid Build Coastguard Worker .phase_io = { .src[1] = IO(S0), }, 299*61046927SAndroid Build Coastguard Worker .supported_src_types = { [0] = T(DRC), [1] = T(REGARRAY), }, 300*61046927SAndroid Build Coastguard Worker .src_stride = { 301*61046927SAndroid Build Coastguard Worker [1] = 1, 302*61046927SAndroid Build Coastguard Worker }, 303*61046927SAndroid Build Coastguard Worker }, 304*61046927SAndroid Build Coastguard Worker 305*61046927SAndroid Build Coastguard Worker [ROGUE_BACKEND_OP_EMITPIX] = { .str = "emitpix", .num_srcs = 2, 306*61046927SAndroid Build Coastguard Worker .phase_io = { .src[0] = IO(S0), .src[1] = IO(S2), }, 307*61046927SAndroid Build Coastguard Worker .supported_op_mods = OM(FREEP), 308*61046927SAndroid Build Coastguard Worker .supported_src_types = { [0] = T(REG), [1] = T(REG), }, 309*61046927SAndroid Build Coastguard Worker }, 310*61046927SAndroid Build Coastguard Worker /* .src[1] and .src[2] can actually be S0-5. */ 311*61046927SAndroid Build Coastguard Worker [ROGUE_BACKEND_OP_LD] = { .str = "ld", .num_dsts = 1, .num_srcs = 3, 312*61046927SAndroid Build Coastguard Worker .phase_io = { .dst[0] = IO(S3), .src[2] = IO(S0), }, 313*61046927SAndroid Build Coastguard Worker .supported_op_mods = OM(BYPASS) | OM(FORCELINEFILL) | OM(SLCBYPASS) | OM(SLCNOALLOC), 314*61046927SAndroid Build Coastguard Worker .supported_dst_types = { [0] = T(REG) | T(REGARRAY), }, 315*61046927SAndroid Build Coastguard Worker .supported_src_types = { 316*61046927SAndroid Build Coastguard Worker [0] = T(DRC), 317*61046927SAndroid Build Coastguard Worker [1] = T(VAL), 318*61046927SAndroid Build Coastguard Worker [2] = T(REGARRAY), 319*61046927SAndroid Build Coastguard Worker }, 320*61046927SAndroid Build Coastguard Worker .dst_stride = { 321*61046927SAndroid Build Coastguard Worker [0] = ~0U, 322*61046927SAndroid Build Coastguard Worker }, 323*61046927SAndroid Build Coastguard Worker .src_stride = { 324*61046927SAndroid Build Coastguard Worker [2] = 1, 325*61046927SAndroid Build Coastguard Worker }, 326*61046927SAndroid Build Coastguard Worker }, 327*61046927SAndroid Build Coastguard Worker /* .src[0] and .src[4] can actually be S0-5. */ 328*61046927SAndroid Build Coastguard Worker [ROGUE_BACKEND_OP_ST] = { .str = "st", .num_srcs = 6, 329*61046927SAndroid Build Coastguard Worker .phase_io = { .src[0] = IO(S3), .src[4] = IO(S0), }, 330*61046927SAndroid Build Coastguard Worker .supported_op_mods = OM(TILED) | OM(WRITETHROUGH) | OM(WRITEBACK) | OM(LAZYWRITEBACK) | 331*61046927SAndroid Build Coastguard Worker OM(SLCBYPASS) | OM(SLCWRITEBACK) | OM(SLCWRITETHROUGH) | OM(SLCNOALLOC), 332*61046927SAndroid Build Coastguard Worker .supported_src_types = { 333*61046927SAndroid Build Coastguard Worker [0] = T(REG) | T(REGARRAY), 334*61046927SAndroid Build Coastguard Worker [1] = T(VAL), 335*61046927SAndroid Build Coastguard Worker [2] = T(DRC), 336*61046927SAndroid Build Coastguard Worker [3] = T(VAL), 337*61046927SAndroid Build Coastguard Worker [4] = T(REGARRAY), 338*61046927SAndroid Build Coastguard Worker [5] = T(IO), 339*61046927SAndroid Build Coastguard Worker }, 340*61046927SAndroid Build Coastguard Worker .src_stride = { 341*61046927SAndroid Build Coastguard Worker [4] = 1, 342*61046927SAndroid Build Coastguard Worker }, 343*61046927SAndroid Build Coastguard Worker }, 344*61046927SAndroid Build Coastguard Worker [ROGUE_BACKEND_OP_FITR_PIXEL] = { .str = "fitr.pixel", .num_dsts = 1, .num_srcs = 3, 345*61046927SAndroid Build Coastguard Worker .phase_io = { .dst[0] = IO(S3), .src[1] = IO(S0), }, 346*61046927SAndroid Build Coastguard Worker .supported_op_mods = OM(SAT), 347*61046927SAndroid Build Coastguard Worker .supported_dst_types = { [0] = T(REG) | T(REGARRAY), }, 348*61046927SAndroid Build Coastguard Worker .supported_src_types = { 349*61046927SAndroid Build Coastguard Worker [0] = T(DRC), 350*61046927SAndroid Build Coastguard Worker [1] = T(REGARRAY), 351*61046927SAndroid Build Coastguard Worker [2] = T(VAL), 352*61046927SAndroid Build Coastguard Worker }, 353*61046927SAndroid Build Coastguard Worker .dst_stride = { 354*61046927SAndroid Build Coastguard Worker [0] = ~0U, 355*61046927SAndroid Build Coastguard Worker }, 356*61046927SAndroid Build Coastguard Worker .src_stride = { 357*61046927SAndroid Build Coastguard Worker [1] = ~0U, 358*61046927SAndroid Build Coastguard Worker }, 359*61046927SAndroid Build Coastguard Worker }, 360*61046927SAndroid Build Coastguard Worker [ROGUE_BACKEND_OP_FITRP_PIXEL] = { .str = "fitrp.pixel", .num_dsts = 1, .num_srcs = 4, 361*61046927SAndroid Build Coastguard Worker .phase_io = { .dst[0] = IO(S3), .src[1] = IO(S0), .src[2] = IO(S2), }, 362*61046927SAndroid Build Coastguard Worker .supported_op_mods = OM(SAT), 363*61046927SAndroid Build Coastguard Worker .supported_dst_types = { [0] = T(REG), }, 364*61046927SAndroid Build Coastguard Worker .supported_src_types = { 365*61046927SAndroid Build Coastguard Worker [0] = T(DRC), 366*61046927SAndroid Build Coastguard Worker [1] = T(REGARRAY), 367*61046927SAndroid Build Coastguard Worker [2] = T(REGARRAY), 368*61046927SAndroid Build Coastguard Worker [3] = T(VAL), 369*61046927SAndroid Build Coastguard Worker }, 370*61046927SAndroid Build Coastguard Worker .src_stride = { 371*61046927SAndroid Build Coastguard Worker [1] = 3, 372*61046927SAndroid Build Coastguard Worker [2] = ~0U, 373*61046927SAndroid Build Coastguard Worker }, 374*61046927SAndroid Build Coastguard Worker }, 375*61046927SAndroid Build Coastguard Worker [ROGUE_BACKEND_OP_SMP1D] = { .str = "smp1d", .num_dsts = 1, .num_srcs = 6, 376*61046927SAndroid Build Coastguard Worker .phase_io = { .dst[0] = IO(S4), .src[1] = IO(S0), .src[2] = IO(S1), .src[3] = IO(S2), }, 377*61046927SAndroid Build Coastguard Worker .supported_op_mods = OM(PROJ) | OM(FCNORM) | OM(NNCOORDS) | OM(BIAS) | OM(REPLACE) | 378*61046927SAndroid Build Coastguard Worker OM(GRADIENT) | OM(PPLOD) | OM(TAO) | OM(SOO) | OM(SNO) | OM(WRT) | OM(DATA) | 379*61046927SAndroid Build Coastguard Worker OM(INFO) | OM(BOTH) | OM(BYPASS) | OM(FORCELINEFILL) | OM(WRITETHROUGH) | 380*61046927SAndroid Build Coastguard Worker OM(WRITEBACK) | OM(LAZYWRITEBACK) | OM(SLCBYPASS) | OM(SLCWRITEBACK) | 381*61046927SAndroid Build Coastguard Worker OM(SLCWRITETHROUGH) | OM(SLCNOALLOC) | OM(ARRAY) | OM(INTEGER) | OM(SCHEDSWAP) | 382*61046927SAndroid Build Coastguard Worker OM(F16), 383*61046927SAndroid Build Coastguard Worker .supported_dst_types = { [0] = T(REG) | T(REGARRAY), }, 384*61046927SAndroid Build Coastguard Worker .supported_src_types = { 385*61046927SAndroid Build Coastguard Worker [0] = T(DRC), 386*61046927SAndroid Build Coastguard Worker [1] = T(REGARRAY), 387*61046927SAndroid Build Coastguard Worker [2] = T(REG) | T(REGARRAY), 388*61046927SAndroid Build Coastguard Worker [3] = T(REGARRAY), 389*61046927SAndroid Build Coastguard Worker [4] = T(REGARRAY) | T(IO), 390*61046927SAndroid Build Coastguard Worker [5] = T(VAL), 391*61046927SAndroid Build Coastguard Worker }, 392*61046927SAndroid Build Coastguard Worker /* TODO: This may depend on the other options set. */ 393*61046927SAndroid Build Coastguard Worker .src_stride = { 394*61046927SAndroid Build Coastguard Worker [1] = 3, 395*61046927SAndroid Build Coastguard Worker [2] = ~0U, 396*61046927SAndroid Build Coastguard Worker [3] = 3, 397*61046927SAndroid Build Coastguard Worker [4] = 1, 398*61046927SAndroid Build Coastguard Worker }, 399*61046927SAndroid Build Coastguard Worker .dst_stride = { 400*61046927SAndroid Build Coastguard Worker [0] = ~0U, 401*61046927SAndroid Build Coastguard Worker }, 402*61046927SAndroid Build Coastguard Worker }, 403*61046927SAndroid Build Coastguard Worker [ROGUE_BACKEND_OP_SMP2D] = { .str = "smp2d", .num_dsts = 1, .num_srcs = 6, 404*61046927SAndroid Build Coastguard Worker .phase_io = { .dst[0] = IO(S4), .src[1] = IO(S0), .src[2] = IO(S1), .src[3] = IO(S2), }, 405*61046927SAndroid Build Coastguard Worker .supported_op_mods = OM(PROJ) | OM(FCNORM) | OM(NNCOORDS) | OM(BIAS) | OM(REPLACE) | 406*61046927SAndroid Build Coastguard Worker OM(GRADIENT) | OM(PPLOD) | OM(TAO) | OM(SOO) | OM(SNO) | OM(WRT) | OM(DATA) | 407*61046927SAndroid Build Coastguard Worker OM(INFO) | OM(BOTH) | OM(BYPASS) | OM(FORCELINEFILL) | OM(WRITETHROUGH) | 408*61046927SAndroid Build Coastguard Worker OM(WRITEBACK) | OM(LAZYWRITEBACK) | OM(SLCBYPASS) | OM(SLCWRITEBACK) | 409*61046927SAndroid Build Coastguard Worker OM(SLCWRITETHROUGH) | OM(SLCNOALLOC) | OM(ARRAY) | OM(INTEGER) | OM(SCHEDSWAP) | 410*61046927SAndroid Build Coastguard Worker OM(F16), 411*61046927SAndroid Build Coastguard Worker .supported_dst_types = { [0] = T(REG) | T(REGARRAY), }, 412*61046927SAndroid Build Coastguard Worker .supported_src_types = { 413*61046927SAndroid Build Coastguard Worker [0] = T(DRC), 414*61046927SAndroid Build Coastguard Worker [1] = T(REGARRAY), 415*61046927SAndroid Build Coastguard Worker [2] = T(REG) | T(REGARRAY), 416*61046927SAndroid Build Coastguard Worker [3] = T(REGARRAY), 417*61046927SAndroid Build Coastguard Worker [4] = T(REGARRAY) | T(IO), 418*61046927SAndroid Build Coastguard Worker [5] = T(VAL), 419*61046927SAndroid Build Coastguard Worker }, 420*61046927SAndroid Build Coastguard Worker /* TODO: This may depend on the other options set. */ 421*61046927SAndroid Build Coastguard Worker .src_stride = { 422*61046927SAndroid Build Coastguard Worker [1] = 3, 423*61046927SAndroid Build Coastguard Worker [2] = ~0U, 424*61046927SAndroid Build Coastguard Worker [3] = 3, 425*61046927SAndroid Build Coastguard Worker [4] = 1, 426*61046927SAndroid Build Coastguard Worker }, 427*61046927SAndroid Build Coastguard Worker .dst_stride = { 428*61046927SAndroid Build Coastguard Worker [0] = ~0U, 429*61046927SAndroid Build Coastguard Worker }, 430*61046927SAndroid Build Coastguard Worker }, 431*61046927SAndroid Build Coastguard Worker [ROGUE_BACKEND_OP_SMP3D] = { .str = "smp3d", .num_dsts = 1, .num_srcs = 6, 432*61046927SAndroid Build Coastguard Worker .phase_io = { .dst[0] = IO(S4), .src[1] = IO(S0), .src[2] = IO(S1), .src[3] = IO(S2), }, 433*61046927SAndroid Build Coastguard Worker .supported_op_mods = OM(PROJ) | OM(FCNORM) | OM(NNCOORDS) | OM(BIAS) | OM(REPLACE) | 434*61046927SAndroid Build Coastguard Worker OM(GRADIENT) | OM(PPLOD) | OM(TAO) | OM(SOO) | OM(SNO) | OM(WRT) | OM(DATA) | 435*61046927SAndroid Build Coastguard Worker OM(INFO) | OM(BOTH) | OM(BYPASS) | OM(FORCELINEFILL) | OM(WRITETHROUGH) | 436*61046927SAndroid Build Coastguard Worker OM(WRITEBACK) | OM(LAZYWRITEBACK) | OM(SLCBYPASS) | OM(SLCWRITEBACK) | 437*61046927SAndroid Build Coastguard Worker OM(SLCWRITETHROUGH) | OM(SLCNOALLOC) | OM(ARRAY) | OM(INTEGER) | OM(SCHEDSWAP) | 438*61046927SAndroid Build Coastguard Worker OM(F16), 439*61046927SAndroid Build Coastguard Worker .supported_dst_types = { [0] = T(REG) | T(REGARRAY), }, 440*61046927SAndroid Build Coastguard Worker .supported_src_types = { 441*61046927SAndroid Build Coastguard Worker [0] = T(DRC), 442*61046927SAndroid Build Coastguard Worker [1] = T(REGARRAY), 443*61046927SAndroid Build Coastguard Worker [2] = T(REG) | T(REGARRAY), 444*61046927SAndroid Build Coastguard Worker [3] = T(REGARRAY), 445*61046927SAndroid Build Coastguard Worker [4] = T(REGARRAY) | T(IO), 446*61046927SAndroid Build Coastguard Worker [5] = T(VAL), 447*61046927SAndroid Build Coastguard Worker }, 448*61046927SAndroid Build Coastguard Worker /* TODO: This may depend on the other options set. */ 449*61046927SAndroid Build Coastguard Worker .src_stride = { 450*61046927SAndroid Build Coastguard Worker [1] = 3, 451*61046927SAndroid Build Coastguard Worker [2] = ~0U, 452*61046927SAndroid Build Coastguard Worker [3] = 3, 453*61046927SAndroid Build Coastguard Worker [4] = 1, 454*61046927SAndroid Build Coastguard Worker }, 455*61046927SAndroid Build Coastguard Worker .dst_stride = { 456*61046927SAndroid Build Coastguard Worker [0] = ~0U, 457*61046927SAndroid Build Coastguard Worker }, 458*61046927SAndroid Build Coastguard Worker }, 459*61046927SAndroid Build Coastguard Worker }; 460*61046927SAndroid Build Coastguard Worker #undef B 461*61046927SAndroid Build Coastguard Worker #undef T 462*61046927SAndroid Build Coastguard Worker #undef OM 463*61046927SAndroid Build Coastguard Worker #undef IO 464*61046927SAndroid Build Coastguard Worker 465*61046927SAndroid Build Coastguard Worker #define OM(op_mod) BITFIELD64_BIT(ROGUE_BACKEND_OP_MOD_##op_mod) 466*61046927SAndroid Build Coastguard Worker const rogue_backend_op_mod_info rogue_backend_op_mod_infos[ROGUE_BACKEND_OP_MOD_COUNT] = { 467*61046927SAndroid Build Coastguard Worker [ROGUE_BACKEND_OP_MOD_PROJ] = { .str = "proj", }, 468*61046927SAndroid Build Coastguard Worker [ROGUE_BACKEND_OP_MOD_FCNORM] = { .str = "fcnorm", }, 469*61046927SAndroid Build Coastguard Worker [ROGUE_BACKEND_OP_MOD_NNCOORDS] = { .str = "nncoords", }, 470*61046927SAndroid Build Coastguard Worker [ROGUE_BACKEND_OP_MOD_BIAS] = { .str = "bias", .exclude = OM(REPLACE) | OM(GRADIENT) }, 471*61046927SAndroid Build Coastguard Worker [ROGUE_BACKEND_OP_MOD_REPLACE] = { .str = "replace", .exclude = OM(BIAS) | OM(GRADIENT) }, 472*61046927SAndroid Build Coastguard Worker [ROGUE_BACKEND_OP_MOD_GRADIENT] = { .str = "gradient", .exclude = OM(BIAS) | OM(REPLACE) }, 473*61046927SAndroid Build Coastguard Worker [ROGUE_BACKEND_OP_MOD_PPLOD] = { .str = "pplod", .require = OM(BIAS) | OM(REPLACE) }, 474*61046927SAndroid Build Coastguard Worker [ROGUE_BACKEND_OP_MOD_TAO] = { .str = "tao", }, 475*61046927SAndroid Build Coastguard Worker [ROGUE_BACKEND_OP_MOD_SOO] = { .str = "soo", }, 476*61046927SAndroid Build Coastguard Worker [ROGUE_BACKEND_OP_MOD_SNO] = { .str = "sno", }, 477*61046927SAndroid Build Coastguard Worker [ROGUE_BACKEND_OP_MOD_WRT] = { .str = "wrt", }, 478*61046927SAndroid Build Coastguard Worker [ROGUE_BACKEND_OP_MOD_DATA] = { .str = "data", .exclude = OM(INFO) | OM(BOTH) }, 479*61046927SAndroid Build Coastguard Worker [ROGUE_BACKEND_OP_MOD_INFO] = { .str = "info", .exclude = OM(DATA) | OM(BOTH) }, 480*61046927SAndroid Build Coastguard Worker [ROGUE_BACKEND_OP_MOD_BOTH] = { .str = "both", .exclude = OM(DATA) | OM(INFO) }, 481*61046927SAndroid Build Coastguard Worker [ROGUE_BACKEND_OP_MOD_TILED] = { .str = "tiled", }, 482*61046927SAndroid Build Coastguard Worker [ROGUE_BACKEND_OP_MOD_BYPASS] = { .str = "bypass", .exclude = OM(FORCELINEFILL) | OM(WRITETHROUGH) | OM(WRITEBACK) | OM(LAZYWRITEBACK) }, 483*61046927SAndroid Build Coastguard Worker [ROGUE_BACKEND_OP_MOD_FORCELINEFILL] = { .str = "forcelinefill", .exclude = OM(BYPASS) | OM(WRITETHROUGH) | OM(WRITEBACK) | OM(LAZYWRITEBACK) }, 484*61046927SAndroid Build Coastguard Worker [ROGUE_BACKEND_OP_MOD_WRITETHROUGH] = { .str = "writethrough", .exclude = OM(BYPASS) | OM(FORCELINEFILL) | OM(WRITEBACK) | OM(LAZYWRITEBACK) }, 485*61046927SAndroid Build Coastguard Worker [ROGUE_BACKEND_OP_MOD_WRITEBACK] = { .str = "writeback", .exclude = OM(BYPASS) | OM(FORCELINEFILL) | OM(WRITETHROUGH) | OM(LAZYWRITEBACK) }, 486*61046927SAndroid Build Coastguard Worker [ROGUE_BACKEND_OP_MOD_LAZYWRITEBACK] = { .str = "lazywriteback", .exclude = OM(BYPASS) | OM(FORCELINEFILL) | OM(WRITETHROUGH) | OM(WRITEBACK) }, 487*61046927SAndroid Build Coastguard Worker [ROGUE_BACKEND_OP_MOD_SLCBYPASS] = { .str = "slcbypass", .exclude = OM(SLCWRITEBACK) | OM(SLCWRITETHROUGH) | OM(SLCNOALLOC) }, 488*61046927SAndroid Build Coastguard Worker [ROGUE_BACKEND_OP_MOD_SLCWRITEBACK] = { .str = "slcwriteback", .exclude = OM(SLCBYPASS) | OM(SLCWRITETHROUGH) | OM(SLCNOALLOC) }, 489*61046927SAndroid Build Coastguard Worker [ROGUE_BACKEND_OP_MOD_SLCWRITETHROUGH] = { .str = "slcwritethrough", .exclude = OM(SLCBYPASS) | OM(SLCWRITEBACK) | OM(SLCNOALLOC) }, 490*61046927SAndroid Build Coastguard Worker [ROGUE_BACKEND_OP_MOD_SLCNOALLOC] = { .str = "slcnoalloc", .exclude = OM(SLCBYPASS) | OM(SLCWRITEBACK) | OM(SLCWRITETHROUGH) }, 491*61046927SAndroid Build Coastguard Worker [ROGUE_BACKEND_OP_MOD_ARRAY] = { .str = "array", }, 492*61046927SAndroid Build Coastguard Worker [ROGUE_BACKEND_OP_MOD_INTEGER] = { .str = "integer", }, 493*61046927SAndroid Build Coastguard Worker [ROGUE_BACKEND_OP_MOD_SCHEDSWAP] = { .str = "schedswap", }, 494*61046927SAndroid Build Coastguard Worker [ROGUE_BACKEND_OP_MOD_F16] = { .str = "f16", }, 495*61046927SAndroid Build Coastguard Worker [ROGUE_BACKEND_OP_MOD_SAT] = { .str = "sat", }, 496*61046927SAndroid Build Coastguard Worker [ROGUE_BACKEND_OP_MOD_FREEP] = { .str = "freep", }, 497*61046927SAndroid Build Coastguard Worker }; 498*61046927SAndroid Build Coastguard Worker #undef OM 499*61046927SAndroid Build Coastguard Worker 500*61046927SAndroid Build Coastguard Worker #define OM(op_mod) BITFIELD64_BIT(ROGUE_BITWISE_OP_MOD_##op_mod) 501*61046927SAndroid Build Coastguard Worker const rogue_bitwise_op_mod_info 502*61046927SAndroid Build Coastguard Worker rogue_bitwise_op_mod_infos[ROGUE_BITWISE_OP_MOD_COUNT] = { 503*61046927SAndroid Build Coastguard Worker [ROGUE_BITWISE_OP_MOD_TWB] = { .str = "twb", 504*61046927SAndroid Build Coastguard Worker .exclude = OM(PWB) | OM(MTB) | OM(FTB) }, 505*61046927SAndroid Build Coastguard Worker [ROGUE_BITWISE_OP_MOD_PWB] = { .str = "pwb", 506*61046927SAndroid Build Coastguard Worker .exclude = OM(TWB) | OM(MTB) | OM(FTB) }, 507*61046927SAndroid Build Coastguard Worker [ROGUE_BITWISE_OP_MOD_MTB] = { .str = "mtb", 508*61046927SAndroid Build Coastguard Worker .exclude = OM(TWB) | OM(PWB) | OM(FTB) }, 509*61046927SAndroid Build Coastguard Worker [ROGUE_BITWISE_OP_MOD_FTB] = { .str = "ftb", 510*61046927SAndroid Build Coastguard Worker .exclude = OM(TWB) | OM(PWB) | OM(MTB) }, 511*61046927SAndroid Build Coastguard Worker }; 512*61046927SAndroid Build Coastguard Worker #undef OM 513*61046927SAndroid Build Coastguard Worker 514*61046927SAndroid Build Coastguard Worker #define P(type) BITFIELD64_BIT(ROGUE_INSTR_PHASE_##type) 515*61046927SAndroid Build Coastguard Worker #define PH(type) ROGUE_INSTR_PHASE_##type 516*61046927SAndroid Build Coastguard Worker #define IO(io) ROGUE_IO_##io 517*61046927SAndroid Build Coastguard Worker #define T(type) BITFIELD64_BIT(ROGUE_REF_TYPE_##type - 1) 518*61046927SAndroid Build Coastguard Worker const rogue_bitwise_op_info rogue_bitwise_op_infos[ROGUE_BITWISE_OP_COUNT] = { 519*61046927SAndroid Build Coastguard Worker [ROGUE_BITWISE_OP_INVALID] = { .str = "", }, 520*61046927SAndroid Build Coastguard Worker [ROGUE_BITWISE_OP_BYP0] = { .str = "byp", .num_dsts = 2, .num_srcs = 2, 521*61046927SAndroid Build Coastguard Worker .supported_phases = P(0_BITMASK), 522*61046927SAndroid Build Coastguard Worker .phase_io[PH(0_BITMASK)] = { .dst[1] = IO(FT1), }, 523*61046927SAndroid Build Coastguard Worker .supported_dst_types = { 524*61046927SAndroid Build Coastguard Worker [0] = T(REG) | T(REGARRAY) | T(IO), 525*61046927SAndroid Build Coastguard Worker [1] = T(REG) | T(REGARRAY) | T(IO), 526*61046927SAndroid Build Coastguard Worker }, 527*61046927SAndroid Build Coastguard Worker .supported_src_types = { 528*61046927SAndroid Build Coastguard Worker [0] = T(REG) | T(REGARRAY) | T(IO), 529*61046927SAndroid Build Coastguard Worker [1] = T(REG) | T(REGARRAY) | T(IO) | T(VAL), 530*61046927SAndroid Build Coastguard Worker }, 531*61046927SAndroid Build Coastguard Worker }, 532*61046927SAndroid Build Coastguard Worker }; 533*61046927SAndroid Build Coastguard Worker #undef T 534*61046927SAndroid Build Coastguard Worker #undef IO 535*61046927SAndroid Build Coastguard Worker #undef PH 536*61046927SAndroid Build Coastguard Worker #undef P 537*61046927SAndroid Build Coastguard Worker 538*61046927SAndroid Build Coastguard Worker const rogue_io_info rogue_io_infos[ROGUE_IO_COUNT] = { 539*61046927SAndroid Build Coastguard Worker [ROGUE_IO_INVALID] = { .str = "!INVALID!", }, 540*61046927SAndroid Build Coastguard Worker [ROGUE_IO_S0] = { .str = "s0", }, 541*61046927SAndroid Build Coastguard Worker [ROGUE_IO_S1] = { .str = "s1", }, 542*61046927SAndroid Build Coastguard Worker [ROGUE_IO_S2] = { .str = "s2", }, 543*61046927SAndroid Build Coastguard Worker [ROGUE_IO_S3] = { .str = "s3", }, 544*61046927SAndroid Build Coastguard Worker [ROGUE_IO_S4] = { .str = "s4", }, 545*61046927SAndroid Build Coastguard Worker [ROGUE_IO_S5] = { .str = "s5", }, 546*61046927SAndroid Build Coastguard Worker [ROGUE_IO_W0] = { .str = "w0", }, 547*61046927SAndroid Build Coastguard Worker [ROGUE_IO_W1] = { .str = "w1", }, 548*61046927SAndroid Build Coastguard Worker [ROGUE_IO_IS0] = { .str = "is0", }, 549*61046927SAndroid Build Coastguard Worker [ROGUE_IO_IS1] = { .str = "is1", }, 550*61046927SAndroid Build Coastguard Worker [ROGUE_IO_IS2] = { .str = "is2", }, 551*61046927SAndroid Build Coastguard Worker [ROGUE_IO_IS3] = { .str = "is3", }, 552*61046927SAndroid Build Coastguard Worker [ROGUE_IO_IS4] = { .str = "is4/w0", }, 553*61046927SAndroid Build Coastguard Worker [ROGUE_IO_IS5] = { .str = "is5/w1", }, 554*61046927SAndroid Build Coastguard Worker [ROGUE_IO_FT0] = { .str = "ft0", }, 555*61046927SAndroid Build Coastguard Worker [ROGUE_IO_FT1] = { .str = "ft1", }, 556*61046927SAndroid Build Coastguard Worker [ROGUE_IO_FT2] = { .str = "ft2", }, 557*61046927SAndroid Build Coastguard Worker [ROGUE_IO_FTE] = { .str = "fte", }, 558*61046927SAndroid Build Coastguard Worker [ROGUE_IO_FT3] = { .str = "ft3", }, 559*61046927SAndroid Build Coastguard Worker [ROGUE_IO_FT4] = { .str = "ft4", }, 560*61046927SAndroid Build Coastguard Worker [ROGUE_IO_FT5] = { .str = "ft5", }, 561*61046927SAndroid Build Coastguard Worker [ROGUE_IO_FTT] = { .str = "ftt", }, 562*61046927SAndroid Build Coastguard Worker [ROGUE_IO_P0] = { .str = "p0", }, 563*61046927SAndroid Build Coastguard Worker [ROGUE_IO_NONE] = { .str = "_", }, 564*61046927SAndroid Build Coastguard Worker }; 565*61046927SAndroid Build Coastguard Worker 566*61046927SAndroid Build Coastguard Worker #define SM(src_mod) BITFIELD64_BIT(ROGUE_ALU_SRC_MOD_##src_mod) 567*61046927SAndroid Build Coastguard Worker #define DM(dst_mod) BITFIELD64_BIT(ROGUE_ALU_DST_MOD_##dst_mod) 568*61046927SAndroid Build Coastguard Worker #define OM(op_mod) BITFIELD64_BIT(ROGUE_ALU_OP_MOD_##op_mod) 569*61046927SAndroid Build Coastguard Worker #define P(type) BITFIELD64_BIT(ROGUE_INSTR_PHASE_##type) 570*61046927SAndroid Build Coastguard Worker #define PH(type) ROGUE_INSTR_PHASE_##type 571*61046927SAndroid Build Coastguard Worker #define IO(io) ROGUE_IO_##io 572*61046927SAndroid Build Coastguard Worker #define T(type) BITFIELD64_BIT(ROGUE_REF_TYPE_##type - 1) 573*61046927SAndroid Build Coastguard Worker #define B(n) BITFIELD64_BIT(n) 574*61046927SAndroid Build Coastguard Worker const rogue_alu_op_info rogue_alu_op_infos[ROGUE_ALU_OP_COUNT] = { 575*61046927SAndroid Build Coastguard Worker [ROGUE_ALU_OP_INVALID] = { .str = "!INVALID!", }, 576*61046927SAndroid Build Coastguard Worker [ROGUE_ALU_OP_MBYP] = { .str = "mbyp", .num_dsts = 1, .num_srcs = 1, 577*61046927SAndroid Build Coastguard Worker .supported_phases = P(0), 578*61046927SAndroid Build Coastguard Worker .phase_io[PH(0)] = { .dst[0] = IO(FT0), .src[0] = IO(S0), }, 579*61046927SAndroid Build Coastguard Worker .supported_src_mods = { 580*61046927SAndroid Build Coastguard Worker [0] = SM(ABS) | SM(NEG), 581*61046927SAndroid Build Coastguard Worker }, 582*61046927SAndroid Build Coastguard Worker .supported_dst_types = { [0] = T(REG) | T(REGARRAY) | T(IO), }, 583*61046927SAndroid Build Coastguard Worker .supported_src_types = { 584*61046927SAndroid Build Coastguard Worker [0] = T(REG) | T(REGARRAY), 585*61046927SAndroid Build Coastguard Worker }, 586*61046927SAndroid Build Coastguard Worker }, 587*61046927SAndroid Build Coastguard Worker [ROGUE_ALU_OP_FADD] = { .str = "fadd", .num_dsts = 1, .num_srcs = 2, 588*61046927SAndroid Build Coastguard Worker .supported_phases = P(0), 589*61046927SAndroid Build Coastguard Worker .phase_io[PH(0)] = { .dst[0] = IO(FT0), .src[0] = IO(S0), .src[1] = IO(S1), }, 590*61046927SAndroid Build Coastguard Worker .supported_op_mods = OM(LP) | OM(SAT), 591*61046927SAndroid Build Coastguard Worker .supported_src_mods = { 592*61046927SAndroid Build Coastguard Worker [0] = SM(FLR) | SM(ABS) | SM(NEG), 593*61046927SAndroid Build Coastguard Worker [1] = SM(ABS), 594*61046927SAndroid Build Coastguard Worker }, 595*61046927SAndroid Build Coastguard Worker }, 596*61046927SAndroid Build Coastguard Worker [ROGUE_ALU_OP_FMUL] = { .str = "fmul", .num_dsts = 1, .num_srcs = 2, 597*61046927SAndroid Build Coastguard Worker .supported_phases = P(0), 598*61046927SAndroid Build Coastguard Worker .phase_io[PH(0)] = { .dst[0] = IO(FT0), .src[0] = IO(S0), .src[1] = IO(S1), }, 599*61046927SAndroid Build Coastguard Worker .supported_op_mods = OM(LP) | OM(SAT), 600*61046927SAndroid Build Coastguard Worker .supported_src_mods = { 601*61046927SAndroid Build Coastguard Worker [0] = SM(FLR) | SM(ABS) | SM(NEG), 602*61046927SAndroid Build Coastguard Worker [1] = SM(ABS), 603*61046927SAndroid Build Coastguard Worker }, 604*61046927SAndroid Build Coastguard Worker .supported_dst_types = { [0] = T(REG), }, 605*61046927SAndroid Build Coastguard Worker .supported_src_types = { 606*61046927SAndroid Build Coastguard Worker [0] = T(REG), 607*61046927SAndroid Build Coastguard Worker [1] = T(REG), 608*61046927SAndroid Build Coastguard Worker }, 609*61046927SAndroid Build Coastguard Worker }, 610*61046927SAndroid Build Coastguard Worker [ROGUE_ALU_OP_FMAD] = { .str = "fmad", .num_dsts = 1, .num_srcs = 3, 611*61046927SAndroid Build Coastguard Worker .supported_phases = P(0), 612*61046927SAndroid Build Coastguard Worker .phase_io[PH(0)] = { .dst[0] = IO(FT0), .src[0] = IO(S0), .src[1] = IO(S1), .src[2] = IO(S2), }, 613*61046927SAndroid Build Coastguard Worker .supported_op_mods = OM(LP) | OM(SAT), 614*61046927SAndroid Build Coastguard Worker .supported_src_mods = { 615*61046927SAndroid Build Coastguard Worker [0] = SM(ABS) | SM(NEG), 616*61046927SAndroid Build Coastguard Worker [1] = SM(ABS) | SM(NEG), 617*61046927SAndroid Build Coastguard Worker [2] = SM(FLR) | SM(ABS) | SM(NEG), 618*61046927SAndroid Build Coastguard Worker }, 619*61046927SAndroid Build Coastguard Worker .supported_dst_types = { [0] = T(REG), }, 620*61046927SAndroid Build Coastguard Worker .supported_src_types = { 621*61046927SAndroid Build Coastguard Worker [0] = T(REG), 622*61046927SAndroid Build Coastguard Worker [1] = T(REG), 623*61046927SAndroid Build Coastguard Worker [2] = T(REG), 624*61046927SAndroid Build Coastguard Worker }, 625*61046927SAndroid Build Coastguard Worker }, 626*61046927SAndroid Build Coastguard Worker /* TODO NEXT!: Validate - can/must only select element if non-32-bit type, element has to be same for both args if both args present, 16-bit must be 0 or 1, 32-bit must be 0-3 (can't have no element set) 627*61046927SAndroid Build Coastguard Worker * Also validate number of sources provided/nulled out based on test op */ 628*61046927SAndroid Build Coastguard Worker [ROGUE_ALU_OP_TST] = { .str = "tst", .num_dsts = 2, .num_srcs = 2, 629*61046927SAndroid Build Coastguard Worker .supported_phases = P(2_TST), 630*61046927SAndroid Build Coastguard Worker .phase_io[PH(2_TST)] = { .src[0] = IO(IS1), .src[1] = IO(IS2), }, 631*61046927SAndroid Build Coastguard Worker .supported_op_mods = OM(Z) | OM(GZ) | OM(GEZ) | OM(C) | OM(E) | OM(G) | OM(GE) | OM(NE) | OM(L) | OM(LE) | 632*61046927SAndroid Build Coastguard Worker OM(F32) | OM(U16) | OM(S16) | OM(U8) | OM(S8) | OM(U32) | OM(S32), 633*61046927SAndroid Build Coastguard Worker .supported_src_mods = { 634*61046927SAndroid Build Coastguard Worker [0] = SM(E0) | SM(E1) | SM(E2) | SM(E3), 635*61046927SAndroid Build Coastguard Worker [1] = SM(E0) | SM(E1) | SM(E2) | SM(E3), 636*61046927SAndroid Build Coastguard Worker }, 637*61046927SAndroid Build Coastguard Worker .supported_dst_types = { [0] = T(IO), [1] = T(IO), }, /* FTT and either P0 or NONE */ 638*61046927SAndroid Build Coastguard Worker .supported_src_types = { 639*61046927SAndroid Build Coastguard Worker [0] = T(REG) | T(IO), 640*61046927SAndroid Build Coastguard Worker [1] = T(REG) | T(IO), 641*61046927SAndroid Build Coastguard Worker }, 642*61046927SAndroid Build Coastguard Worker }, 643*61046927SAndroid Build Coastguard Worker /* TODO: Support fully. */ 644*61046927SAndroid Build Coastguard Worker [ROGUE_ALU_OP_MOVC] = { .str = "movc", .num_dsts = 2, .num_srcs = 3, 645*61046927SAndroid Build Coastguard Worker .supported_phases = P(2_MOV), 646*61046927SAndroid Build Coastguard Worker .phase_io[PH(2_MOV)] = { .dst[0] = IO(W0), .src[1] = IO(FTE), }, 647*61046927SAndroid Build Coastguard Worker .supported_dst_mods = { 648*61046927SAndroid Build Coastguard Worker [0] = DM(E0) | DM(E1) | DM(E2) | DM(E3), 649*61046927SAndroid Build Coastguard Worker }, 650*61046927SAndroid Build Coastguard Worker .supported_dst_types = { [0] = T(REG) | T(REGARRAY), [1] = T(REG) | T(REGARRAY) | T(IO), }, 651*61046927SAndroid Build Coastguard Worker .supported_src_types = { 652*61046927SAndroid Build Coastguard Worker [0] = T(IO), 653*61046927SAndroid Build Coastguard Worker [1] = T(REG) | T(REGARRAY) | T(IO), 654*61046927SAndroid Build Coastguard Worker [2] = T(REG) | T(REGARRAY) | T(IO), 655*61046927SAndroid Build Coastguard Worker }, 656*61046927SAndroid Build Coastguard Worker }, 657*61046927SAndroid Build Coastguard Worker [ROGUE_ALU_OP_ADD64] = { .str = "add64", .num_dsts = 3, .num_srcs = 5, 658*61046927SAndroid Build Coastguard Worker .supported_phases = P(0), 659*61046927SAndroid Build Coastguard Worker .phase_io[PH(0)] = { .dst[0] = IO(FT0), .dst[1] = IO(FTE), .src[0] = IO(S0), .src[1] = IO(S1), .src[2] = IO(S2), .src[3] = IO(IS0), }, 660*61046927SAndroid Build Coastguard Worker .supported_src_mods = { 661*61046927SAndroid Build Coastguard Worker [0] = SM(ABS) | SM(NEG), 662*61046927SAndroid Build Coastguard Worker [1] = SM(ABS) | SM(NEG), 663*61046927SAndroid Build Coastguard Worker [2] = SM(ABS) | SM(NEG), 664*61046927SAndroid Build Coastguard Worker [3] = SM(ABS) | SM(NEG), 665*61046927SAndroid Build Coastguard Worker }, 666*61046927SAndroid Build Coastguard Worker .supported_dst_types = { [0] = T(REG) | T(REGARRAY), [1] = T(REG) | T(REGARRAY) | T(IO), [2] = T(IO) }, 667*61046927SAndroid Build Coastguard Worker .supported_src_types = { 668*61046927SAndroid Build Coastguard Worker [0] = T(REG) | T(REGARRAY), 669*61046927SAndroid Build Coastguard Worker [1] = T(REG) | T(REGARRAY), 670*61046927SAndroid Build Coastguard Worker [2] = T(REG) | T(REGARRAY) | T(IMM), 671*61046927SAndroid Build Coastguard Worker [3] = T(REG) | T(REGARRAY)| T(IO) | T(IMM), 672*61046927SAndroid Build Coastguard Worker [4] = T(IO), 673*61046927SAndroid Build Coastguard Worker }, 674*61046927SAndroid Build Coastguard Worker }, 675*61046927SAndroid Build Coastguard Worker [ROGUE_ALU_OP_PCK_U8888] = { .str = "pck.u8888", .num_dsts = 1, .num_srcs = 1, 676*61046927SAndroid Build Coastguard Worker .supported_phases = P(2_PCK), 677*61046927SAndroid Build Coastguard Worker .phase_io[PH(2_PCK)] = { .dst[0] = IO(FT2), .src[0] = IO(IS3), }, 678*61046927SAndroid Build Coastguard Worker .supported_op_mods = OM(SCALE) | OM(ROUNDZERO), 679*61046927SAndroid Build Coastguard Worker .supported_dst_types = { [0] = T(REG), }, 680*61046927SAndroid Build Coastguard Worker .supported_src_types = { 681*61046927SAndroid Build Coastguard Worker [0] = T(REGARRAY), 682*61046927SAndroid Build Coastguard Worker }, 683*61046927SAndroid Build Coastguard Worker .src_repeat_mask = B(0), 684*61046927SAndroid Build Coastguard Worker }, 685*61046927SAndroid Build Coastguard Worker [ROGUE_ALU_OP_MOV] = { .str = "mov", .num_dsts = 1, .num_srcs = 1, 686*61046927SAndroid Build Coastguard Worker .supported_dst_types = { [0] = T(REG) | T(REGARRAY), }, 687*61046927SAndroid Build Coastguard Worker .supported_src_types = { 688*61046927SAndroid Build Coastguard Worker [0] = T(REG) | T(REGARRAY) | T(IMM), 689*61046927SAndroid Build Coastguard Worker }, 690*61046927SAndroid Build Coastguard Worker }, 691*61046927SAndroid Build Coastguard Worker [ROGUE_ALU_OP_CMOV] = { .str = "cmov", .num_dsts = 1, .num_srcs = 3, 692*61046927SAndroid Build Coastguard Worker .supported_dst_types = { [0] = T(REG), }, 693*61046927SAndroid Build Coastguard Worker .supported_src_types = { 694*61046927SAndroid Build Coastguard Worker [0] = T(IO), 695*61046927SAndroid Build Coastguard Worker [1] = T(REG), 696*61046927SAndroid Build Coastguard Worker [2] = T(REG), 697*61046927SAndroid Build Coastguard Worker }, 698*61046927SAndroid Build Coastguard Worker }, 699*61046927SAndroid Build Coastguard Worker [ROGUE_ALU_OP_FABS] = { .str = "fabs", .num_dsts = 1, .num_srcs = 1, }, 700*61046927SAndroid Build Coastguard Worker [ROGUE_ALU_OP_FNEG] = { .str = "fneg", .num_dsts = 1, .num_srcs = 1, }, 701*61046927SAndroid Build Coastguard Worker [ROGUE_ALU_OP_FNABS] = { .str = "fnabs", .num_dsts = 1, .num_srcs = 1, }, 702*61046927SAndroid Build Coastguard Worker 703*61046927SAndroid Build Coastguard Worker [ROGUE_ALU_OP_FMAX] = { .str = "fmax", .num_dsts = 1, .num_srcs = 2, }, /* TODO */ 704*61046927SAndroid Build Coastguard Worker [ROGUE_ALU_OP_FMIN] = { .str = "fmin", .num_dsts = 1, .num_srcs = 2, }, /* TODO */ 705*61046927SAndroid Build Coastguard Worker }; 706*61046927SAndroid Build Coastguard Worker #undef B 707*61046927SAndroid Build Coastguard Worker #undef T 708*61046927SAndroid Build Coastguard Worker #undef IO 709*61046927SAndroid Build Coastguard Worker #undef PH 710*61046927SAndroid Build Coastguard Worker #undef P 711*61046927SAndroid Build Coastguard Worker #undef OM 712*61046927SAndroid Build Coastguard Worker #undef DM 713*61046927SAndroid Build Coastguard Worker #undef SM 714*61046927SAndroid Build Coastguard Worker 715*61046927SAndroid Build Coastguard Worker const char *rogue_exec_cond_str[ROGUE_EXEC_COND_COUNT] = { 716*61046927SAndroid Build Coastguard Worker [ROGUE_EXEC_COND_INVALID] = "!INVALID!", 717*61046927SAndroid Build Coastguard Worker [ROGUE_EXEC_COND_PE_TRUE] = "if(pe)", 718*61046927SAndroid Build Coastguard Worker [ROGUE_EXEC_COND_P0_TRUE] = "if(p0)", 719*61046927SAndroid Build Coastguard Worker [ROGUE_EXEC_COND_PE_ANY] = "any(pe)", 720*61046927SAndroid Build Coastguard Worker [ROGUE_EXEC_COND_P0_FALSE] = "if(!p0)", 721*61046927SAndroid Build Coastguard Worker }; 722*61046927SAndroid Build Coastguard Worker 723*61046927SAndroid Build Coastguard Worker const char *rogue_instr_type_str[ROGUE_INSTR_TYPE_COUNT] = { 724*61046927SAndroid Build Coastguard Worker [ROGUE_INSTR_TYPE_INVALID] = "!INVALID!", 725*61046927SAndroid Build Coastguard Worker 726*61046927SAndroid Build Coastguard Worker [ROGUE_INSTR_TYPE_ALU] = "alu", 727*61046927SAndroid Build Coastguard Worker /* [ROGUE_INSTR_TYPE_CMPLX] = "cmplx", */ 728*61046927SAndroid Build Coastguard Worker [ROGUE_INSTR_TYPE_BACKEND] = "backend", 729*61046927SAndroid Build Coastguard Worker [ROGUE_INSTR_TYPE_CTRL] = "ctrl", 730*61046927SAndroid Build Coastguard Worker [ROGUE_INSTR_TYPE_BITWISE] = "bitwise", 731*61046927SAndroid Build Coastguard Worker /* [ROGUE_INSTR_TYPE_F16SOP] = "f16sop", */ 732*61046927SAndroid Build Coastguard Worker }; 733*61046927SAndroid Build Coastguard Worker 734*61046927SAndroid Build Coastguard Worker const char *const rogue_alu_str[ROGUE_ALU_COUNT] = { 735*61046927SAndroid Build Coastguard Worker [ROGUE_ALU_INVALID] = "!INVALID!", 736*61046927SAndroid Build Coastguard Worker [ROGUE_ALU_MAIN] = "main", 737*61046927SAndroid Build Coastguard Worker [ROGUE_ALU_BITWISE] = "bitwise", 738*61046927SAndroid Build Coastguard Worker [ROGUE_ALU_CONTROL] = "control", 739*61046927SAndroid Build Coastguard Worker }; 740*61046927SAndroid Build Coastguard Worker 741*61046927SAndroid Build Coastguard Worker const char *const rogue_instr_phase_str[ROGUE_ALU_COUNT][ROGUE_INSTR_PHASE_COUNT] = { 742*61046927SAndroid Build Coastguard Worker /** Main/ALU (and backend) instructions. */ 743*61046927SAndroid Build Coastguard Worker [ROGUE_ALU_MAIN] = { 744*61046927SAndroid Build Coastguard Worker [ROGUE_INSTR_PHASE_0] = "p0", 745*61046927SAndroid Build Coastguard Worker [ROGUE_INSTR_PHASE_1] = "p1", 746*61046927SAndroid Build Coastguard Worker [ROGUE_INSTR_PHASE_2_PCK] = "p2pck", 747*61046927SAndroid Build Coastguard Worker [ROGUE_INSTR_PHASE_2_TST] = "p2tst", 748*61046927SAndroid Build Coastguard Worker [ROGUE_INSTR_PHASE_2_MOV] = "p2mov", 749*61046927SAndroid Build Coastguard Worker [ROGUE_INSTR_PHASE_BACKEND] = "backend", 750*61046927SAndroid Build Coastguard Worker }, 751*61046927SAndroid Build Coastguard Worker 752*61046927SAndroid Build Coastguard Worker /** Bitwise instructions. */ 753*61046927SAndroid Build Coastguard Worker [ROGUE_ALU_BITWISE] = { 754*61046927SAndroid Build Coastguard Worker [ROGUE_INSTR_PHASE_0_BITMASK] = "p0bm", 755*61046927SAndroid Build Coastguard Worker [ROGUE_INSTR_PHASE_0_SHIFT1] = "p0shf1", 756*61046927SAndroid Build Coastguard Worker [ROGUE_INSTR_PHASE_0_COUNT] = "p0cnt", 757*61046927SAndroid Build Coastguard Worker [ROGUE_INSTR_PHASE_1_LOGICAL] = "p1log", 758*61046927SAndroid Build Coastguard Worker [ROGUE_INSTR_PHASE_2_SHIFT2] = "p2shf2", 759*61046927SAndroid Build Coastguard Worker [ROGUE_INSTR_PHASE_2_TEST] = "p2tst", 760*61046927SAndroid Build Coastguard Worker }, 761*61046927SAndroid Build Coastguard Worker 762*61046927SAndroid Build Coastguard Worker /** Control instructions (no co-issuing). */ 763*61046927SAndroid Build Coastguard Worker [ROGUE_ALU_CONTROL] = { 764*61046927SAndroid Build Coastguard Worker [ROGUE_INSTR_PHASE_CTRL] = "ctrl", 765*61046927SAndroid Build Coastguard Worker }, 766*61046927SAndroid Build Coastguard Worker }; 767