1bf215546Sopenharmony_ci/* 2bf215546Sopenharmony_ci * Copyright © 2016 Broadcom 3bf215546Sopenharmony_ci * 4bf215546Sopenharmony_ci * Permission is hereby granted, free of charge, to any person obtaining a 5bf215546Sopenharmony_ci * copy of this software and associated documentation files (the "Software"), 6bf215546Sopenharmony_ci * to deal in the Software without restriction, including without limitation 7bf215546Sopenharmony_ci * the rights to use, copy, modify, merge, publish, distribute, sublicense, 8bf215546Sopenharmony_ci * and/or sell copies of the Software, and to permit persons to whom the 9bf215546Sopenharmony_ci * Software is furnished to do so, subject to the following conditions: 10bf215546Sopenharmony_ci * 11bf215546Sopenharmony_ci * The above copyright notice and this permission notice (including the next 12bf215546Sopenharmony_ci * paragraph) shall be included in all copies or substantial portions of the 13bf215546Sopenharmony_ci * Software. 14bf215546Sopenharmony_ci * 15bf215546Sopenharmony_ci * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16bf215546Sopenharmony_ci * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17bf215546Sopenharmony_ci * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 18bf215546Sopenharmony_ci * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19bf215546Sopenharmony_ci * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 20bf215546Sopenharmony_ci * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS 21bf215546Sopenharmony_ci * IN THE SOFTWARE. 22bf215546Sopenharmony_ci */ 23bf215546Sopenharmony_ci 24bf215546Sopenharmony_ci#include <stdlib.h> 25bf215546Sopenharmony_ci#include <string.h> 26bf215546Sopenharmony_ci#include "util/macros.h" 27bf215546Sopenharmony_ci#include "broadcom/common/v3d_device_info.h" 28bf215546Sopenharmony_ci#include "qpu_instr.h" 29bf215546Sopenharmony_ci 30bf215546Sopenharmony_ciconst char * 31bf215546Sopenharmony_civ3d_qpu_magic_waddr_name(const struct v3d_device_info *devinfo, 32bf215546Sopenharmony_ci enum v3d_qpu_waddr waddr) 33bf215546Sopenharmony_ci{ 34bf215546Sopenharmony_ci /* V3D 4.x UNIFA aliases TMU in V3D 3.x in the table below */ 35bf215546Sopenharmony_ci if (devinfo->ver < 40 && waddr == V3D_QPU_WADDR_TMU) 36bf215546Sopenharmony_ci return "tmu"; 37bf215546Sopenharmony_ci 38bf215546Sopenharmony_ci static const char *waddr_magic[] = { 39bf215546Sopenharmony_ci [V3D_QPU_WADDR_R0] = "r0", 40bf215546Sopenharmony_ci [V3D_QPU_WADDR_R1] = "r1", 41bf215546Sopenharmony_ci [V3D_QPU_WADDR_R2] = "r2", 42bf215546Sopenharmony_ci [V3D_QPU_WADDR_R3] = "r3", 43bf215546Sopenharmony_ci [V3D_QPU_WADDR_R4] = "r4", 44bf215546Sopenharmony_ci [V3D_QPU_WADDR_R5] = "r5", 45bf215546Sopenharmony_ci [V3D_QPU_WADDR_NOP] = "-", 46bf215546Sopenharmony_ci [V3D_QPU_WADDR_TLB] = "tlb", 47bf215546Sopenharmony_ci [V3D_QPU_WADDR_TLBU] = "tlbu", 48bf215546Sopenharmony_ci [V3D_QPU_WADDR_UNIFA] = "unifa", 49bf215546Sopenharmony_ci [V3D_QPU_WADDR_TMUL] = "tmul", 50bf215546Sopenharmony_ci [V3D_QPU_WADDR_TMUD] = "tmud", 51bf215546Sopenharmony_ci [V3D_QPU_WADDR_TMUA] = "tmua", 52bf215546Sopenharmony_ci [V3D_QPU_WADDR_TMUAU] = "tmuau", 53bf215546Sopenharmony_ci [V3D_QPU_WADDR_VPM] = "vpm", 54bf215546Sopenharmony_ci [V3D_QPU_WADDR_VPMU] = "vpmu", 55bf215546Sopenharmony_ci [V3D_QPU_WADDR_SYNC] = "sync", 56bf215546Sopenharmony_ci [V3D_QPU_WADDR_SYNCU] = "syncu", 57bf215546Sopenharmony_ci [V3D_QPU_WADDR_SYNCB] = "syncb", 58bf215546Sopenharmony_ci [V3D_QPU_WADDR_RECIP] = "recip", 59bf215546Sopenharmony_ci [V3D_QPU_WADDR_RSQRT] = "rsqrt", 60bf215546Sopenharmony_ci [V3D_QPU_WADDR_EXP] = "exp", 61bf215546Sopenharmony_ci [V3D_QPU_WADDR_LOG] = "log", 62bf215546Sopenharmony_ci [V3D_QPU_WADDR_SIN] = "sin", 63bf215546Sopenharmony_ci [V3D_QPU_WADDR_RSQRT2] = "rsqrt2", 64bf215546Sopenharmony_ci [V3D_QPU_WADDR_TMUC] = "tmuc", 65bf215546Sopenharmony_ci [V3D_QPU_WADDR_TMUS] = "tmus", 66bf215546Sopenharmony_ci [V3D_QPU_WADDR_TMUT] = "tmut", 67bf215546Sopenharmony_ci [V3D_QPU_WADDR_TMUR] = "tmur", 68bf215546Sopenharmony_ci [V3D_QPU_WADDR_TMUI] = "tmui", 69bf215546Sopenharmony_ci [V3D_QPU_WADDR_TMUB] = "tmub", 70bf215546Sopenharmony_ci [V3D_QPU_WADDR_TMUDREF] = "tmudref", 71bf215546Sopenharmony_ci [V3D_QPU_WADDR_TMUOFF] = "tmuoff", 72bf215546Sopenharmony_ci [V3D_QPU_WADDR_TMUSCM] = "tmuscm", 73bf215546Sopenharmony_ci [V3D_QPU_WADDR_TMUSF] = "tmusf", 74bf215546Sopenharmony_ci [V3D_QPU_WADDR_TMUSLOD] = "tmuslod", 75bf215546Sopenharmony_ci [V3D_QPU_WADDR_TMUHS] = "tmuhs", 76bf215546Sopenharmony_ci [V3D_QPU_WADDR_TMUHSCM] = "tmuscm", 77bf215546Sopenharmony_ci [V3D_QPU_WADDR_TMUHSF] = "tmuhsf", 78bf215546Sopenharmony_ci [V3D_QPU_WADDR_TMUHSLOD] = "tmuhslod", 79bf215546Sopenharmony_ci [V3D_QPU_WADDR_R5REP] = "r5rep", 80bf215546Sopenharmony_ci }; 81bf215546Sopenharmony_ci 82bf215546Sopenharmony_ci return waddr_magic[waddr]; 83bf215546Sopenharmony_ci} 84bf215546Sopenharmony_ci 85bf215546Sopenharmony_ciconst char * 86bf215546Sopenharmony_civ3d_qpu_add_op_name(enum v3d_qpu_add_op op) 87bf215546Sopenharmony_ci{ 88bf215546Sopenharmony_ci static const char *op_names[] = { 89bf215546Sopenharmony_ci [V3D_QPU_A_FADD] = "fadd", 90bf215546Sopenharmony_ci [V3D_QPU_A_FADDNF] = "faddnf", 91bf215546Sopenharmony_ci [V3D_QPU_A_VFPACK] = "vfpack", 92bf215546Sopenharmony_ci [V3D_QPU_A_ADD] = "add", 93bf215546Sopenharmony_ci [V3D_QPU_A_SUB] = "sub", 94bf215546Sopenharmony_ci [V3D_QPU_A_FSUB] = "fsub", 95bf215546Sopenharmony_ci [V3D_QPU_A_MIN] = "min", 96bf215546Sopenharmony_ci [V3D_QPU_A_MAX] = "max", 97bf215546Sopenharmony_ci [V3D_QPU_A_UMIN] = "umin", 98bf215546Sopenharmony_ci [V3D_QPU_A_UMAX] = "umax", 99bf215546Sopenharmony_ci [V3D_QPU_A_SHL] = "shl", 100bf215546Sopenharmony_ci [V3D_QPU_A_SHR] = "shr", 101bf215546Sopenharmony_ci [V3D_QPU_A_ASR] = "asr", 102bf215546Sopenharmony_ci [V3D_QPU_A_ROR] = "ror", 103bf215546Sopenharmony_ci [V3D_QPU_A_FMIN] = "fmin", 104bf215546Sopenharmony_ci [V3D_QPU_A_FMAX] = "fmax", 105bf215546Sopenharmony_ci [V3D_QPU_A_VFMIN] = "vfmin", 106bf215546Sopenharmony_ci [V3D_QPU_A_AND] = "and", 107bf215546Sopenharmony_ci [V3D_QPU_A_OR] = "or", 108bf215546Sopenharmony_ci [V3D_QPU_A_XOR] = "xor", 109bf215546Sopenharmony_ci [V3D_QPU_A_VADD] = "vadd", 110bf215546Sopenharmony_ci [V3D_QPU_A_VSUB] = "vsub", 111bf215546Sopenharmony_ci [V3D_QPU_A_NOT] = "not", 112bf215546Sopenharmony_ci [V3D_QPU_A_NEG] = "neg", 113bf215546Sopenharmony_ci [V3D_QPU_A_FLAPUSH] = "flapush", 114bf215546Sopenharmony_ci [V3D_QPU_A_FLBPUSH] = "flbpush", 115bf215546Sopenharmony_ci [V3D_QPU_A_FLPOP] = "flpop", 116bf215546Sopenharmony_ci [V3D_QPU_A_RECIP] = "recip", 117bf215546Sopenharmony_ci [V3D_QPU_A_SETMSF] = "setmsf", 118bf215546Sopenharmony_ci [V3D_QPU_A_SETREVF] = "setrevf", 119bf215546Sopenharmony_ci [V3D_QPU_A_NOP] = "nop", 120bf215546Sopenharmony_ci [V3D_QPU_A_TIDX] = "tidx", 121bf215546Sopenharmony_ci [V3D_QPU_A_EIDX] = "eidx", 122bf215546Sopenharmony_ci [V3D_QPU_A_LR] = "lr", 123bf215546Sopenharmony_ci [V3D_QPU_A_VFLA] = "vfla", 124bf215546Sopenharmony_ci [V3D_QPU_A_VFLNA] = "vflna", 125bf215546Sopenharmony_ci [V3D_QPU_A_VFLB] = "vflb", 126bf215546Sopenharmony_ci [V3D_QPU_A_VFLNB] = "vflnb", 127bf215546Sopenharmony_ci [V3D_QPU_A_FXCD] = "fxcd", 128bf215546Sopenharmony_ci [V3D_QPU_A_XCD] = "xcd", 129bf215546Sopenharmony_ci [V3D_QPU_A_FYCD] = "fycd", 130bf215546Sopenharmony_ci [V3D_QPU_A_YCD] = "ycd", 131bf215546Sopenharmony_ci [V3D_QPU_A_MSF] = "msf", 132bf215546Sopenharmony_ci [V3D_QPU_A_REVF] = "revf", 133bf215546Sopenharmony_ci [V3D_QPU_A_VDWWT] = "vdwwt", 134bf215546Sopenharmony_ci [V3D_QPU_A_IID] = "iid", 135bf215546Sopenharmony_ci [V3D_QPU_A_SAMPID] = "sampid", 136bf215546Sopenharmony_ci [V3D_QPU_A_BARRIERID] = "barrierid", 137bf215546Sopenharmony_ci [V3D_QPU_A_TMUWT] = "tmuwt", 138bf215546Sopenharmony_ci [V3D_QPU_A_VPMSETUP] = "vpmsetup", 139bf215546Sopenharmony_ci [V3D_QPU_A_VPMWT] = "vpmwt", 140bf215546Sopenharmony_ci [V3D_QPU_A_FLAFIRST] = "flafirst", 141bf215546Sopenharmony_ci [V3D_QPU_A_FLNAFIRST] = "flnafirst", 142bf215546Sopenharmony_ci [V3D_QPU_A_LDVPMV_IN] = "ldvpmv_in", 143bf215546Sopenharmony_ci [V3D_QPU_A_LDVPMV_OUT] = "ldvpmv_out", 144bf215546Sopenharmony_ci [V3D_QPU_A_LDVPMD_IN] = "ldvpmd_in", 145bf215546Sopenharmony_ci [V3D_QPU_A_LDVPMD_OUT] = "ldvpmd_out", 146bf215546Sopenharmony_ci [V3D_QPU_A_LDVPMP] = "ldvpmp", 147bf215546Sopenharmony_ci [V3D_QPU_A_RSQRT] = "rsqrt", 148bf215546Sopenharmony_ci [V3D_QPU_A_EXP] = "exp", 149bf215546Sopenharmony_ci [V3D_QPU_A_LOG] = "log", 150bf215546Sopenharmony_ci [V3D_QPU_A_SIN] = "sin", 151bf215546Sopenharmony_ci [V3D_QPU_A_RSQRT2] = "rsqrt2", 152bf215546Sopenharmony_ci [V3D_QPU_A_LDVPMG_IN] = "ldvpmg_in", 153bf215546Sopenharmony_ci [V3D_QPU_A_LDVPMG_OUT] = "ldvpmg_out", 154bf215546Sopenharmony_ci [V3D_QPU_A_FCMP] = "fcmp", 155bf215546Sopenharmony_ci [V3D_QPU_A_VFMAX] = "vfmax", 156bf215546Sopenharmony_ci [V3D_QPU_A_FROUND] = "fround", 157bf215546Sopenharmony_ci [V3D_QPU_A_FTOIN] = "ftoin", 158bf215546Sopenharmony_ci [V3D_QPU_A_FTRUNC] = "ftrunc", 159bf215546Sopenharmony_ci [V3D_QPU_A_FTOIZ] = "ftoiz", 160bf215546Sopenharmony_ci [V3D_QPU_A_FFLOOR] = "ffloor", 161bf215546Sopenharmony_ci [V3D_QPU_A_FTOUZ] = "ftouz", 162bf215546Sopenharmony_ci [V3D_QPU_A_FCEIL] = "fceil", 163bf215546Sopenharmony_ci [V3D_QPU_A_FTOC] = "ftoc", 164bf215546Sopenharmony_ci [V3D_QPU_A_FDX] = "fdx", 165bf215546Sopenharmony_ci [V3D_QPU_A_FDY] = "fdy", 166bf215546Sopenharmony_ci [V3D_QPU_A_STVPMV] = "stvpmv", 167bf215546Sopenharmony_ci [V3D_QPU_A_STVPMD] = "stvpmd", 168bf215546Sopenharmony_ci [V3D_QPU_A_STVPMP] = "stvpmp", 169bf215546Sopenharmony_ci [V3D_QPU_A_ITOF] = "itof", 170bf215546Sopenharmony_ci [V3D_QPU_A_CLZ] = "clz", 171bf215546Sopenharmony_ci [V3D_QPU_A_UTOF] = "utof", 172bf215546Sopenharmony_ci }; 173bf215546Sopenharmony_ci 174bf215546Sopenharmony_ci if (op >= ARRAY_SIZE(op_names)) 175bf215546Sopenharmony_ci return NULL; 176bf215546Sopenharmony_ci 177bf215546Sopenharmony_ci return op_names[op]; 178bf215546Sopenharmony_ci} 179bf215546Sopenharmony_ci 180bf215546Sopenharmony_ciconst char * 181bf215546Sopenharmony_civ3d_qpu_mul_op_name(enum v3d_qpu_mul_op op) 182bf215546Sopenharmony_ci{ 183bf215546Sopenharmony_ci static const char *op_names[] = { 184bf215546Sopenharmony_ci [V3D_QPU_M_ADD] = "add", 185bf215546Sopenharmony_ci [V3D_QPU_M_SUB] = "sub", 186bf215546Sopenharmony_ci [V3D_QPU_M_UMUL24] = "umul24", 187bf215546Sopenharmony_ci [V3D_QPU_M_VFMUL] = "vfmul", 188bf215546Sopenharmony_ci [V3D_QPU_M_SMUL24] = "smul24", 189bf215546Sopenharmony_ci [V3D_QPU_M_MULTOP] = "multop", 190bf215546Sopenharmony_ci [V3D_QPU_M_FMOV] = "fmov", 191bf215546Sopenharmony_ci [V3D_QPU_M_MOV] = "mov", 192bf215546Sopenharmony_ci [V3D_QPU_M_NOP] = "nop", 193bf215546Sopenharmony_ci [V3D_QPU_M_FMUL] = "fmul", 194bf215546Sopenharmony_ci }; 195bf215546Sopenharmony_ci 196bf215546Sopenharmony_ci if (op >= ARRAY_SIZE(op_names)) 197bf215546Sopenharmony_ci return NULL; 198bf215546Sopenharmony_ci 199bf215546Sopenharmony_ci return op_names[op]; 200bf215546Sopenharmony_ci} 201bf215546Sopenharmony_ci 202bf215546Sopenharmony_ciconst char * 203bf215546Sopenharmony_civ3d_qpu_cond_name(enum v3d_qpu_cond cond) 204bf215546Sopenharmony_ci{ 205bf215546Sopenharmony_ci switch (cond) { 206bf215546Sopenharmony_ci case V3D_QPU_COND_NONE: 207bf215546Sopenharmony_ci return ""; 208bf215546Sopenharmony_ci case V3D_QPU_COND_IFA: 209bf215546Sopenharmony_ci return ".ifa"; 210bf215546Sopenharmony_ci case V3D_QPU_COND_IFB: 211bf215546Sopenharmony_ci return ".ifb"; 212bf215546Sopenharmony_ci case V3D_QPU_COND_IFNA: 213bf215546Sopenharmony_ci return ".ifna"; 214bf215546Sopenharmony_ci case V3D_QPU_COND_IFNB: 215bf215546Sopenharmony_ci return ".ifnb"; 216bf215546Sopenharmony_ci default: 217bf215546Sopenharmony_ci unreachable("bad cond value"); 218bf215546Sopenharmony_ci } 219bf215546Sopenharmony_ci} 220bf215546Sopenharmony_ci 221bf215546Sopenharmony_ciconst char * 222bf215546Sopenharmony_civ3d_qpu_branch_cond_name(enum v3d_qpu_branch_cond cond) 223bf215546Sopenharmony_ci{ 224bf215546Sopenharmony_ci switch (cond) { 225bf215546Sopenharmony_ci case V3D_QPU_BRANCH_COND_ALWAYS: 226bf215546Sopenharmony_ci return ""; 227bf215546Sopenharmony_ci case V3D_QPU_BRANCH_COND_A0: 228bf215546Sopenharmony_ci return ".a0"; 229bf215546Sopenharmony_ci case V3D_QPU_BRANCH_COND_NA0: 230bf215546Sopenharmony_ci return ".na0"; 231bf215546Sopenharmony_ci case V3D_QPU_BRANCH_COND_ALLA: 232bf215546Sopenharmony_ci return ".alla"; 233bf215546Sopenharmony_ci case V3D_QPU_BRANCH_COND_ANYNA: 234bf215546Sopenharmony_ci return ".anyna"; 235bf215546Sopenharmony_ci case V3D_QPU_BRANCH_COND_ANYA: 236bf215546Sopenharmony_ci return ".anya"; 237bf215546Sopenharmony_ci case V3D_QPU_BRANCH_COND_ALLNA: 238bf215546Sopenharmony_ci return ".allna"; 239bf215546Sopenharmony_ci default: 240bf215546Sopenharmony_ci unreachable("bad branch cond value"); 241bf215546Sopenharmony_ci } 242bf215546Sopenharmony_ci} 243bf215546Sopenharmony_ci 244bf215546Sopenharmony_ciconst char * 245bf215546Sopenharmony_civ3d_qpu_msfign_name(enum v3d_qpu_msfign msfign) 246bf215546Sopenharmony_ci{ 247bf215546Sopenharmony_ci switch (msfign) { 248bf215546Sopenharmony_ci case V3D_QPU_MSFIGN_NONE: 249bf215546Sopenharmony_ci return ""; 250bf215546Sopenharmony_ci case V3D_QPU_MSFIGN_P: 251bf215546Sopenharmony_ci return "p"; 252bf215546Sopenharmony_ci case V3D_QPU_MSFIGN_Q: 253bf215546Sopenharmony_ci return "q"; 254bf215546Sopenharmony_ci default: 255bf215546Sopenharmony_ci unreachable("bad branch cond value"); 256bf215546Sopenharmony_ci } 257bf215546Sopenharmony_ci} 258bf215546Sopenharmony_ci 259bf215546Sopenharmony_ciconst char * 260bf215546Sopenharmony_civ3d_qpu_pf_name(enum v3d_qpu_pf pf) 261bf215546Sopenharmony_ci{ 262bf215546Sopenharmony_ci switch (pf) { 263bf215546Sopenharmony_ci case V3D_QPU_PF_NONE: 264bf215546Sopenharmony_ci return ""; 265bf215546Sopenharmony_ci case V3D_QPU_PF_PUSHZ: 266bf215546Sopenharmony_ci return ".pushz"; 267bf215546Sopenharmony_ci case V3D_QPU_PF_PUSHN: 268bf215546Sopenharmony_ci return ".pushn"; 269bf215546Sopenharmony_ci case V3D_QPU_PF_PUSHC: 270bf215546Sopenharmony_ci return ".pushc"; 271bf215546Sopenharmony_ci default: 272bf215546Sopenharmony_ci unreachable("bad pf value"); 273bf215546Sopenharmony_ci } 274bf215546Sopenharmony_ci} 275bf215546Sopenharmony_ci 276bf215546Sopenharmony_ciconst char * 277bf215546Sopenharmony_civ3d_qpu_uf_name(enum v3d_qpu_uf uf) 278bf215546Sopenharmony_ci{ 279bf215546Sopenharmony_ci switch (uf) { 280bf215546Sopenharmony_ci case V3D_QPU_UF_NONE: 281bf215546Sopenharmony_ci return ""; 282bf215546Sopenharmony_ci case V3D_QPU_UF_ANDZ: 283bf215546Sopenharmony_ci return ".andz"; 284bf215546Sopenharmony_ci case V3D_QPU_UF_ANDNZ: 285bf215546Sopenharmony_ci return ".andnz"; 286bf215546Sopenharmony_ci case V3D_QPU_UF_NORZ: 287bf215546Sopenharmony_ci return ".norz"; 288bf215546Sopenharmony_ci case V3D_QPU_UF_NORNZ: 289bf215546Sopenharmony_ci return ".nornz"; 290bf215546Sopenharmony_ci case V3D_QPU_UF_ANDN: 291bf215546Sopenharmony_ci return ".andn"; 292bf215546Sopenharmony_ci case V3D_QPU_UF_ANDNN: 293bf215546Sopenharmony_ci return ".andnn"; 294bf215546Sopenharmony_ci case V3D_QPU_UF_NORN: 295bf215546Sopenharmony_ci return ".norn"; 296bf215546Sopenharmony_ci case V3D_QPU_UF_NORNN: 297bf215546Sopenharmony_ci return ".nornn"; 298bf215546Sopenharmony_ci case V3D_QPU_UF_ANDC: 299bf215546Sopenharmony_ci return ".andc"; 300bf215546Sopenharmony_ci case V3D_QPU_UF_ANDNC: 301bf215546Sopenharmony_ci return ".andnc"; 302bf215546Sopenharmony_ci case V3D_QPU_UF_NORC: 303bf215546Sopenharmony_ci return ".norc"; 304bf215546Sopenharmony_ci case V3D_QPU_UF_NORNC: 305bf215546Sopenharmony_ci return ".nornc"; 306bf215546Sopenharmony_ci default: 307bf215546Sopenharmony_ci unreachable("bad pf value"); 308bf215546Sopenharmony_ci } 309bf215546Sopenharmony_ci} 310bf215546Sopenharmony_ci 311bf215546Sopenharmony_ciconst char * 312bf215546Sopenharmony_civ3d_qpu_pack_name(enum v3d_qpu_output_pack pack) 313bf215546Sopenharmony_ci{ 314bf215546Sopenharmony_ci switch (pack) { 315bf215546Sopenharmony_ci case V3D_QPU_PACK_NONE: 316bf215546Sopenharmony_ci return ""; 317bf215546Sopenharmony_ci case V3D_QPU_PACK_L: 318bf215546Sopenharmony_ci return ".l"; 319bf215546Sopenharmony_ci case V3D_QPU_PACK_H: 320bf215546Sopenharmony_ci return ".h"; 321bf215546Sopenharmony_ci default: 322bf215546Sopenharmony_ci unreachable("bad pack value"); 323bf215546Sopenharmony_ci } 324bf215546Sopenharmony_ci} 325bf215546Sopenharmony_ci 326bf215546Sopenharmony_ciconst char * 327bf215546Sopenharmony_civ3d_qpu_unpack_name(enum v3d_qpu_input_unpack unpack) 328bf215546Sopenharmony_ci{ 329bf215546Sopenharmony_ci switch (unpack) { 330bf215546Sopenharmony_ci case V3D_QPU_UNPACK_NONE: 331bf215546Sopenharmony_ci return ""; 332bf215546Sopenharmony_ci case V3D_QPU_UNPACK_L: 333bf215546Sopenharmony_ci return ".l"; 334bf215546Sopenharmony_ci case V3D_QPU_UNPACK_H: 335bf215546Sopenharmony_ci return ".h"; 336bf215546Sopenharmony_ci case V3D_QPU_UNPACK_ABS: 337bf215546Sopenharmony_ci return ".abs"; 338bf215546Sopenharmony_ci case V3D_QPU_UNPACK_REPLICATE_32F_16: 339bf215546Sopenharmony_ci return ".ff"; 340bf215546Sopenharmony_ci case V3D_QPU_UNPACK_REPLICATE_L_16: 341bf215546Sopenharmony_ci return ".ll"; 342bf215546Sopenharmony_ci case V3D_QPU_UNPACK_REPLICATE_H_16: 343bf215546Sopenharmony_ci return ".hh"; 344bf215546Sopenharmony_ci case V3D_QPU_UNPACK_SWAP_16: 345bf215546Sopenharmony_ci return ".swp"; 346bf215546Sopenharmony_ci default: 347bf215546Sopenharmony_ci unreachable("bad unpack value"); 348bf215546Sopenharmony_ci } 349bf215546Sopenharmony_ci} 350bf215546Sopenharmony_ci 351bf215546Sopenharmony_ci#define D 1 352bf215546Sopenharmony_ci#define A 2 353bf215546Sopenharmony_ci#define B 4 354bf215546Sopenharmony_cistatic const uint8_t add_op_args[] = { 355bf215546Sopenharmony_ci [V3D_QPU_A_FADD] = D | A | B, 356bf215546Sopenharmony_ci [V3D_QPU_A_FADDNF] = D | A | B, 357bf215546Sopenharmony_ci [V3D_QPU_A_VFPACK] = D | A | B, 358bf215546Sopenharmony_ci [V3D_QPU_A_ADD] = D | A | B, 359bf215546Sopenharmony_ci [V3D_QPU_A_VFPACK] = D | A | B, 360bf215546Sopenharmony_ci [V3D_QPU_A_SUB] = D | A | B, 361bf215546Sopenharmony_ci [V3D_QPU_A_VFPACK] = D | A | B, 362bf215546Sopenharmony_ci [V3D_QPU_A_FSUB] = D | A | B, 363bf215546Sopenharmony_ci [V3D_QPU_A_MIN] = D | A | B, 364bf215546Sopenharmony_ci [V3D_QPU_A_MAX] = D | A | B, 365bf215546Sopenharmony_ci [V3D_QPU_A_UMIN] = D | A | B, 366bf215546Sopenharmony_ci [V3D_QPU_A_UMAX] = D | A | B, 367bf215546Sopenharmony_ci [V3D_QPU_A_SHL] = D | A | B, 368bf215546Sopenharmony_ci [V3D_QPU_A_SHR] = D | A | B, 369bf215546Sopenharmony_ci [V3D_QPU_A_ASR] = D | A | B, 370bf215546Sopenharmony_ci [V3D_QPU_A_ROR] = D | A | B, 371bf215546Sopenharmony_ci [V3D_QPU_A_FMIN] = D | A | B, 372bf215546Sopenharmony_ci [V3D_QPU_A_FMAX] = D | A | B, 373bf215546Sopenharmony_ci [V3D_QPU_A_VFMIN] = D | A | B, 374bf215546Sopenharmony_ci 375bf215546Sopenharmony_ci [V3D_QPU_A_AND] = D | A | B, 376bf215546Sopenharmony_ci [V3D_QPU_A_OR] = D | A | B, 377bf215546Sopenharmony_ci [V3D_QPU_A_XOR] = D | A | B, 378bf215546Sopenharmony_ci 379bf215546Sopenharmony_ci [V3D_QPU_A_VADD] = D | A | B, 380bf215546Sopenharmony_ci [V3D_QPU_A_VSUB] = D | A | B, 381bf215546Sopenharmony_ci [V3D_QPU_A_NOT] = D | A, 382bf215546Sopenharmony_ci [V3D_QPU_A_NEG] = D | A, 383bf215546Sopenharmony_ci [V3D_QPU_A_FLAPUSH] = D | A, 384bf215546Sopenharmony_ci [V3D_QPU_A_FLBPUSH] = D | A, 385bf215546Sopenharmony_ci [V3D_QPU_A_FLPOP] = D | A, 386bf215546Sopenharmony_ci [V3D_QPU_A_RECIP] = D | A, 387bf215546Sopenharmony_ci [V3D_QPU_A_SETMSF] = D | A, 388bf215546Sopenharmony_ci [V3D_QPU_A_SETREVF] = D | A, 389bf215546Sopenharmony_ci [V3D_QPU_A_NOP] = 0, 390bf215546Sopenharmony_ci [V3D_QPU_A_TIDX] = D, 391bf215546Sopenharmony_ci [V3D_QPU_A_EIDX] = D, 392bf215546Sopenharmony_ci [V3D_QPU_A_LR] = D, 393bf215546Sopenharmony_ci [V3D_QPU_A_VFLA] = D, 394bf215546Sopenharmony_ci [V3D_QPU_A_VFLNA] = D, 395bf215546Sopenharmony_ci [V3D_QPU_A_VFLB] = D, 396bf215546Sopenharmony_ci [V3D_QPU_A_VFLNB] = D, 397bf215546Sopenharmony_ci 398bf215546Sopenharmony_ci [V3D_QPU_A_FXCD] = D, 399bf215546Sopenharmony_ci [V3D_QPU_A_XCD] = D, 400bf215546Sopenharmony_ci [V3D_QPU_A_FYCD] = D, 401bf215546Sopenharmony_ci [V3D_QPU_A_YCD] = D, 402bf215546Sopenharmony_ci 403bf215546Sopenharmony_ci [V3D_QPU_A_MSF] = D, 404bf215546Sopenharmony_ci [V3D_QPU_A_REVF] = D, 405bf215546Sopenharmony_ci [V3D_QPU_A_VDWWT] = D, 406bf215546Sopenharmony_ci [V3D_QPU_A_IID] = D, 407bf215546Sopenharmony_ci [V3D_QPU_A_SAMPID] = D, 408bf215546Sopenharmony_ci [V3D_QPU_A_BARRIERID] = D, 409bf215546Sopenharmony_ci [V3D_QPU_A_TMUWT] = D, 410bf215546Sopenharmony_ci [V3D_QPU_A_VPMWT] = D, 411bf215546Sopenharmony_ci [V3D_QPU_A_FLAFIRST] = D, 412bf215546Sopenharmony_ci [V3D_QPU_A_FLNAFIRST] = D, 413bf215546Sopenharmony_ci 414bf215546Sopenharmony_ci [V3D_QPU_A_VPMSETUP] = D | A, 415bf215546Sopenharmony_ci 416bf215546Sopenharmony_ci [V3D_QPU_A_LDVPMV_IN] = D | A, 417bf215546Sopenharmony_ci [V3D_QPU_A_LDVPMV_OUT] = D | A, 418bf215546Sopenharmony_ci [V3D_QPU_A_LDVPMD_IN] = D | A, 419bf215546Sopenharmony_ci [V3D_QPU_A_LDVPMD_OUT] = D | A, 420bf215546Sopenharmony_ci [V3D_QPU_A_LDVPMP] = D | A, 421bf215546Sopenharmony_ci [V3D_QPU_A_RSQRT] = D | A, 422bf215546Sopenharmony_ci [V3D_QPU_A_EXP] = D | A, 423bf215546Sopenharmony_ci [V3D_QPU_A_LOG] = D | A, 424bf215546Sopenharmony_ci [V3D_QPU_A_SIN] = D | A, 425bf215546Sopenharmony_ci [V3D_QPU_A_RSQRT2] = D | A, 426bf215546Sopenharmony_ci [V3D_QPU_A_LDVPMG_IN] = D | A | B, 427bf215546Sopenharmony_ci [V3D_QPU_A_LDVPMG_OUT] = D | A | B, 428bf215546Sopenharmony_ci 429bf215546Sopenharmony_ci /* FIXME: MOVABSNEG */ 430bf215546Sopenharmony_ci 431bf215546Sopenharmony_ci [V3D_QPU_A_FCMP] = D | A | B, 432bf215546Sopenharmony_ci [V3D_QPU_A_VFMAX] = D | A | B, 433bf215546Sopenharmony_ci 434bf215546Sopenharmony_ci [V3D_QPU_A_FROUND] = D | A, 435bf215546Sopenharmony_ci [V3D_QPU_A_FTOIN] = D | A, 436bf215546Sopenharmony_ci [V3D_QPU_A_FTRUNC] = D | A, 437bf215546Sopenharmony_ci [V3D_QPU_A_FTOIZ] = D | A, 438bf215546Sopenharmony_ci [V3D_QPU_A_FFLOOR] = D | A, 439bf215546Sopenharmony_ci [V3D_QPU_A_FTOUZ] = D | A, 440bf215546Sopenharmony_ci [V3D_QPU_A_FCEIL] = D | A, 441bf215546Sopenharmony_ci [V3D_QPU_A_FTOC] = D | A, 442bf215546Sopenharmony_ci 443bf215546Sopenharmony_ci [V3D_QPU_A_FDX] = D | A, 444bf215546Sopenharmony_ci [V3D_QPU_A_FDY] = D | A, 445bf215546Sopenharmony_ci 446bf215546Sopenharmony_ci [V3D_QPU_A_STVPMV] = A | B, 447bf215546Sopenharmony_ci [V3D_QPU_A_STVPMD] = A | B, 448bf215546Sopenharmony_ci [V3D_QPU_A_STVPMP] = A | B, 449bf215546Sopenharmony_ci 450bf215546Sopenharmony_ci [V3D_QPU_A_ITOF] = D | A, 451bf215546Sopenharmony_ci [V3D_QPU_A_CLZ] = D | A, 452bf215546Sopenharmony_ci [V3D_QPU_A_UTOF] = D | A, 453bf215546Sopenharmony_ci}; 454bf215546Sopenharmony_ci 455bf215546Sopenharmony_cistatic const uint8_t mul_op_args[] = { 456bf215546Sopenharmony_ci [V3D_QPU_M_ADD] = D | A | B, 457bf215546Sopenharmony_ci [V3D_QPU_M_SUB] = D | A | B, 458bf215546Sopenharmony_ci [V3D_QPU_M_UMUL24] = D | A | B, 459bf215546Sopenharmony_ci [V3D_QPU_M_VFMUL] = D | A | B, 460bf215546Sopenharmony_ci [V3D_QPU_M_SMUL24] = D | A | B, 461bf215546Sopenharmony_ci [V3D_QPU_M_MULTOP] = D | A | B, 462bf215546Sopenharmony_ci [V3D_QPU_M_FMOV] = D | A, 463bf215546Sopenharmony_ci [V3D_QPU_M_NOP] = 0, 464bf215546Sopenharmony_ci [V3D_QPU_M_MOV] = D | A, 465bf215546Sopenharmony_ci [V3D_QPU_M_FMUL] = D | A | B, 466bf215546Sopenharmony_ci}; 467bf215546Sopenharmony_ci 468bf215546Sopenharmony_cibool 469bf215546Sopenharmony_civ3d_qpu_add_op_has_dst(enum v3d_qpu_add_op op) 470bf215546Sopenharmony_ci{ 471bf215546Sopenharmony_ci assert(op < ARRAY_SIZE(add_op_args)); 472bf215546Sopenharmony_ci 473bf215546Sopenharmony_ci return add_op_args[op] & D; 474bf215546Sopenharmony_ci} 475bf215546Sopenharmony_ci 476bf215546Sopenharmony_cibool 477bf215546Sopenharmony_civ3d_qpu_mul_op_has_dst(enum v3d_qpu_mul_op op) 478bf215546Sopenharmony_ci{ 479bf215546Sopenharmony_ci assert(op < ARRAY_SIZE(mul_op_args)); 480bf215546Sopenharmony_ci 481bf215546Sopenharmony_ci return mul_op_args[op] & D; 482bf215546Sopenharmony_ci} 483bf215546Sopenharmony_ci 484bf215546Sopenharmony_ciint 485bf215546Sopenharmony_civ3d_qpu_add_op_num_src(enum v3d_qpu_add_op op) 486bf215546Sopenharmony_ci{ 487bf215546Sopenharmony_ci assert(op < ARRAY_SIZE(add_op_args)); 488bf215546Sopenharmony_ci 489bf215546Sopenharmony_ci uint8_t args = add_op_args[op]; 490bf215546Sopenharmony_ci if (args & B) 491bf215546Sopenharmony_ci return 2; 492bf215546Sopenharmony_ci else if (args & A) 493bf215546Sopenharmony_ci return 1; 494bf215546Sopenharmony_ci else 495bf215546Sopenharmony_ci return 0; 496bf215546Sopenharmony_ci} 497bf215546Sopenharmony_ci 498bf215546Sopenharmony_ciint 499bf215546Sopenharmony_civ3d_qpu_mul_op_num_src(enum v3d_qpu_mul_op op) 500bf215546Sopenharmony_ci{ 501bf215546Sopenharmony_ci assert(op < ARRAY_SIZE(mul_op_args)); 502bf215546Sopenharmony_ci 503bf215546Sopenharmony_ci uint8_t args = mul_op_args[op]; 504bf215546Sopenharmony_ci if (args & B) 505bf215546Sopenharmony_ci return 2; 506bf215546Sopenharmony_ci else if (args & A) 507bf215546Sopenharmony_ci return 1; 508bf215546Sopenharmony_ci else 509bf215546Sopenharmony_ci return 0; 510bf215546Sopenharmony_ci} 511bf215546Sopenharmony_ci 512bf215546Sopenharmony_cienum v3d_qpu_cond 513bf215546Sopenharmony_civ3d_qpu_cond_invert(enum v3d_qpu_cond cond) 514bf215546Sopenharmony_ci{ 515bf215546Sopenharmony_ci switch (cond) { 516bf215546Sopenharmony_ci case V3D_QPU_COND_IFA: 517bf215546Sopenharmony_ci return V3D_QPU_COND_IFNA; 518bf215546Sopenharmony_ci case V3D_QPU_COND_IFNA: 519bf215546Sopenharmony_ci return V3D_QPU_COND_IFA; 520bf215546Sopenharmony_ci case V3D_QPU_COND_IFB: 521bf215546Sopenharmony_ci return V3D_QPU_COND_IFNB; 522bf215546Sopenharmony_ci case V3D_QPU_COND_IFNB: 523bf215546Sopenharmony_ci return V3D_QPU_COND_IFB; 524bf215546Sopenharmony_ci default: 525bf215546Sopenharmony_ci unreachable("Non-invertible cond"); 526bf215546Sopenharmony_ci } 527bf215546Sopenharmony_ci} 528bf215546Sopenharmony_ci 529bf215546Sopenharmony_cibool 530bf215546Sopenharmony_civ3d_qpu_magic_waddr_is_sfu(enum v3d_qpu_waddr waddr) 531bf215546Sopenharmony_ci{ 532bf215546Sopenharmony_ci switch (waddr) { 533bf215546Sopenharmony_ci case V3D_QPU_WADDR_RECIP: 534bf215546Sopenharmony_ci case V3D_QPU_WADDR_RSQRT: 535bf215546Sopenharmony_ci case V3D_QPU_WADDR_EXP: 536bf215546Sopenharmony_ci case V3D_QPU_WADDR_LOG: 537bf215546Sopenharmony_ci case V3D_QPU_WADDR_SIN: 538bf215546Sopenharmony_ci case V3D_QPU_WADDR_RSQRT2: 539bf215546Sopenharmony_ci return true; 540bf215546Sopenharmony_ci default: 541bf215546Sopenharmony_ci return false; 542bf215546Sopenharmony_ci } 543bf215546Sopenharmony_ci} 544bf215546Sopenharmony_ci 545bf215546Sopenharmony_cibool 546bf215546Sopenharmony_civ3d_qpu_magic_waddr_is_tmu(const struct v3d_device_info *devinfo, 547bf215546Sopenharmony_ci enum v3d_qpu_waddr waddr) 548bf215546Sopenharmony_ci{ 549bf215546Sopenharmony_ci if (devinfo->ver >= 40) { 550bf215546Sopenharmony_ci return ((waddr >= V3D_QPU_WADDR_TMUD && 551bf215546Sopenharmony_ci waddr <= V3D_QPU_WADDR_TMUAU) || 552bf215546Sopenharmony_ci (waddr >= V3D_QPU_WADDR_TMUC && 553bf215546Sopenharmony_ci waddr <= V3D_QPU_WADDR_TMUHSLOD)); 554bf215546Sopenharmony_ci } else { 555bf215546Sopenharmony_ci return ((waddr >= V3D_QPU_WADDR_TMU && 556bf215546Sopenharmony_ci waddr <= V3D_QPU_WADDR_TMUAU) || 557bf215546Sopenharmony_ci (waddr >= V3D_QPU_WADDR_TMUC && 558bf215546Sopenharmony_ci waddr <= V3D_QPU_WADDR_TMUHSLOD)); 559bf215546Sopenharmony_ci } 560bf215546Sopenharmony_ci} 561bf215546Sopenharmony_ci 562bf215546Sopenharmony_cibool 563bf215546Sopenharmony_civ3d_qpu_waits_on_tmu(const struct v3d_qpu_instr *inst) 564bf215546Sopenharmony_ci{ 565bf215546Sopenharmony_ci return (inst->sig.ldtmu || 566bf215546Sopenharmony_ci (inst->type == V3D_QPU_INSTR_TYPE_ALU && 567bf215546Sopenharmony_ci inst->alu.add.op == V3D_QPU_A_TMUWT)); 568bf215546Sopenharmony_ci} 569bf215546Sopenharmony_ci 570bf215546Sopenharmony_cibool 571bf215546Sopenharmony_civ3d_qpu_magic_waddr_is_tlb(enum v3d_qpu_waddr waddr) 572bf215546Sopenharmony_ci{ 573bf215546Sopenharmony_ci return (waddr == V3D_QPU_WADDR_TLB || 574bf215546Sopenharmony_ci waddr == V3D_QPU_WADDR_TLBU); 575bf215546Sopenharmony_ci} 576bf215546Sopenharmony_ci 577bf215546Sopenharmony_cibool 578bf215546Sopenharmony_civ3d_qpu_magic_waddr_is_vpm(enum v3d_qpu_waddr waddr) 579bf215546Sopenharmony_ci{ 580bf215546Sopenharmony_ci return (waddr == V3D_QPU_WADDR_VPM || 581bf215546Sopenharmony_ci waddr == V3D_QPU_WADDR_VPMU); 582bf215546Sopenharmony_ci} 583bf215546Sopenharmony_ci 584bf215546Sopenharmony_cibool 585bf215546Sopenharmony_civ3d_qpu_magic_waddr_is_tsy(enum v3d_qpu_waddr waddr) 586bf215546Sopenharmony_ci{ 587bf215546Sopenharmony_ci return (waddr == V3D_QPU_WADDR_SYNC || 588bf215546Sopenharmony_ci waddr == V3D_QPU_WADDR_SYNCB || 589bf215546Sopenharmony_ci waddr == V3D_QPU_WADDR_SYNCU); 590bf215546Sopenharmony_ci} 591bf215546Sopenharmony_ci 592bf215546Sopenharmony_cibool 593bf215546Sopenharmony_civ3d_qpu_magic_waddr_loads_unif(enum v3d_qpu_waddr waddr) 594bf215546Sopenharmony_ci{ 595bf215546Sopenharmony_ci switch (waddr) { 596bf215546Sopenharmony_ci case V3D_QPU_WADDR_VPMU: 597bf215546Sopenharmony_ci case V3D_QPU_WADDR_TLBU: 598bf215546Sopenharmony_ci case V3D_QPU_WADDR_TMUAU: 599bf215546Sopenharmony_ci case V3D_QPU_WADDR_SYNCU: 600bf215546Sopenharmony_ci return true; 601bf215546Sopenharmony_ci default: 602bf215546Sopenharmony_ci return false; 603bf215546Sopenharmony_ci } 604bf215546Sopenharmony_ci} 605bf215546Sopenharmony_ci 606bf215546Sopenharmony_cistatic bool 607bf215546Sopenharmony_civ3d_qpu_add_op_reads_vpm(enum v3d_qpu_add_op op) 608bf215546Sopenharmony_ci{ 609bf215546Sopenharmony_ci switch (op) { 610bf215546Sopenharmony_ci case V3D_QPU_A_VPMSETUP: 611bf215546Sopenharmony_ci case V3D_QPU_A_LDVPMV_IN: 612bf215546Sopenharmony_ci case V3D_QPU_A_LDVPMV_OUT: 613bf215546Sopenharmony_ci case V3D_QPU_A_LDVPMD_IN: 614bf215546Sopenharmony_ci case V3D_QPU_A_LDVPMD_OUT: 615bf215546Sopenharmony_ci case V3D_QPU_A_LDVPMP: 616bf215546Sopenharmony_ci case V3D_QPU_A_LDVPMG_IN: 617bf215546Sopenharmony_ci case V3D_QPU_A_LDVPMG_OUT: 618bf215546Sopenharmony_ci return true; 619bf215546Sopenharmony_ci default: 620bf215546Sopenharmony_ci return false; 621bf215546Sopenharmony_ci } 622bf215546Sopenharmony_ci} 623bf215546Sopenharmony_ci 624bf215546Sopenharmony_cistatic bool 625bf215546Sopenharmony_civ3d_qpu_add_op_writes_vpm(enum v3d_qpu_add_op op) 626bf215546Sopenharmony_ci{ 627bf215546Sopenharmony_ci switch (op) { 628bf215546Sopenharmony_ci case V3D_QPU_A_VPMSETUP: 629bf215546Sopenharmony_ci case V3D_QPU_A_STVPMV: 630bf215546Sopenharmony_ci case V3D_QPU_A_STVPMD: 631bf215546Sopenharmony_ci case V3D_QPU_A_STVPMP: 632bf215546Sopenharmony_ci return true; 633bf215546Sopenharmony_ci default: 634bf215546Sopenharmony_ci return false; 635bf215546Sopenharmony_ci } 636bf215546Sopenharmony_ci} 637bf215546Sopenharmony_ci 638bf215546Sopenharmony_cibool 639bf215546Sopenharmony_civ3d_qpu_uses_tlb(const struct v3d_qpu_instr *inst) 640bf215546Sopenharmony_ci{ 641bf215546Sopenharmony_ci if (inst->sig.ldtlb || 642bf215546Sopenharmony_ci inst->sig.ldtlbu) 643bf215546Sopenharmony_ci return true; 644bf215546Sopenharmony_ci 645bf215546Sopenharmony_ci if (inst->type == V3D_QPU_INSTR_TYPE_ALU) { 646bf215546Sopenharmony_ci if (inst->alu.add.magic_write && 647bf215546Sopenharmony_ci v3d_qpu_magic_waddr_is_tlb(inst->alu.add.waddr)) { 648bf215546Sopenharmony_ci return true; 649bf215546Sopenharmony_ci } 650bf215546Sopenharmony_ci 651bf215546Sopenharmony_ci if (inst->alu.mul.magic_write && 652bf215546Sopenharmony_ci v3d_qpu_magic_waddr_is_tlb(inst->alu.mul.waddr)) { 653bf215546Sopenharmony_ci return true; 654bf215546Sopenharmony_ci } 655bf215546Sopenharmony_ci } 656bf215546Sopenharmony_ci 657bf215546Sopenharmony_ci return false; 658bf215546Sopenharmony_ci} 659bf215546Sopenharmony_ci 660bf215546Sopenharmony_cibool 661bf215546Sopenharmony_civ3d_qpu_uses_sfu(const struct v3d_qpu_instr *inst) 662bf215546Sopenharmony_ci{ 663bf215546Sopenharmony_ci if (v3d_qpu_instr_is_sfu(inst)) 664bf215546Sopenharmony_ci return true; 665bf215546Sopenharmony_ci 666bf215546Sopenharmony_ci if (inst->type == V3D_QPU_INSTR_TYPE_ALU) { 667bf215546Sopenharmony_ci if (inst->alu.add.magic_write && 668bf215546Sopenharmony_ci v3d_qpu_magic_waddr_is_sfu(inst->alu.add.waddr)) { 669bf215546Sopenharmony_ci return true; 670bf215546Sopenharmony_ci } 671bf215546Sopenharmony_ci 672bf215546Sopenharmony_ci if (inst->alu.mul.magic_write && 673bf215546Sopenharmony_ci v3d_qpu_magic_waddr_is_sfu(inst->alu.mul.waddr)) { 674bf215546Sopenharmony_ci return true; 675bf215546Sopenharmony_ci } 676bf215546Sopenharmony_ci } 677bf215546Sopenharmony_ci 678bf215546Sopenharmony_ci return false; 679bf215546Sopenharmony_ci} 680bf215546Sopenharmony_ci 681bf215546Sopenharmony_cibool 682bf215546Sopenharmony_civ3d_qpu_instr_is_sfu(const struct v3d_qpu_instr *inst) 683bf215546Sopenharmony_ci{ 684bf215546Sopenharmony_ci if (inst->type == V3D_QPU_INSTR_TYPE_ALU) { 685bf215546Sopenharmony_ci switch (inst->alu.add.op) { 686bf215546Sopenharmony_ci case V3D_QPU_A_RECIP: 687bf215546Sopenharmony_ci case V3D_QPU_A_RSQRT: 688bf215546Sopenharmony_ci case V3D_QPU_A_EXP: 689bf215546Sopenharmony_ci case V3D_QPU_A_LOG: 690bf215546Sopenharmony_ci case V3D_QPU_A_SIN: 691bf215546Sopenharmony_ci case V3D_QPU_A_RSQRT2: 692bf215546Sopenharmony_ci return true; 693bf215546Sopenharmony_ci default: 694bf215546Sopenharmony_ci return false; 695bf215546Sopenharmony_ci } 696bf215546Sopenharmony_ci } 697bf215546Sopenharmony_ci return false; 698bf215546Sopenharmony_ci} 699bf215546Sopenharmony_ci 700bf215546Sopenharmony_cibool 701bf215546Sopenharmony_civ3d_qpu_writes_tmu(const struct v3d_device_info *devinfo, 702bf215546Sopenharmony_ci const struct v3d_qpu_instr *inst) 703bf215546Sopenharmony_ci{ 704bf215546Sopenharmony_ci return (inst->type == V3D_QPU_INSTR_TYPE_ALU && 705bf215546Sopenharmony_ci ((inst->alu.add.magic_write && 706bf215546Sopenharmony_ci v3d_qpu_magic_waddr_is_tmu(devinfo, inst->alu.add.waddr)) || 707bf215546Sopenharmony_ci (inst->alu.mul.magic_write && 708bf215546Sopenharmony_ci v3d_qpu_magic_waddr_is_tmu(devinfo, inst->alu.mul.waddr)))); 709bf215546Sopenharmony_ci} 710bf215546Sopenharmony_ci 711bf215546Sopenharmony_cibool 712bf215546Sopenharmony_civ3d_qpu_writes_tmu_not_tmuc(const struct v3d_device_info *devinfo, 713bf215546Sopenharmony_ci const struct v3d_qpu_instr *inst) 714bf215546Sopenharmony_ci{ 715bf215546Sopenharmony_ci return v3d_qpu_writes_tmu(devinfo, inst) && 716bf215546Sopenharmony_ci (!inst->alu.add.magic_write || 717bf215546Sopenharmony_ci inst->alu.add.waddr != V3D_QPU_WADDR_TMUC) && 718bf215546Sopenharmony_ci (!inst->alu.mul.magic_write || 719bf215546Sopenharmony_ci inst->alu.mul.waddr != V3D_QPU_WADDR_TMUC); 720bf215546Sopenharmony_ci} 721bf215546Sopenharmony_ci 722bf215546Sopenharmony_cibool 723bf215546Sopenharmony_civ3d_qpu_reads_vpm(const struct v3d_qpu_instr *inst) 724bf215546Sopenharmony_ci{ 725bf215546Sopenharmony_ci if (inst->sig.ldvpm) 726bf215546Sopenharmony_ci return true; 727bf215546Sopenharmony_ci 728bf215546Sopenharmony_ci if (inst->type == V3D_QPU_INSTR_TYPE_ALU) { 729bf215546Sopenharmony_ci if (v3d_qpu_add_op_reads_vpm(inst->alu.add.op)) 730bf215546Sopenharmony_ci return true; 731bf215546Sopenharmony_ci } 732bf215546Sopenharmony_ci 733bf215546Sopenharmony_ci return false; 734bf215546Sopenharmony_ci} 735bf215546Sopenharmony_ci 736bf215546Sopenharmony_cibool 737bf215546Sopenharmony_civ3d_qpu_writes_vpm(const struct v3d_qpu_instr *inst) 738bf215546Sopenharmony_ci{ 739bf215546Sopenharmony_ci if (inst->type == V3D_QPU_INSTR_TYPE_ALU) { 740bf215546Sopenharmony_ci if (v3d_qpu_add_op_writes_vpm(inst->alu.add.op)) 741bf215546Sopenharmony_ci return true; 742bf215546Sopenharmony_ci 743bf215546Sopenharmony_ci if (inst->alu.add.magic_write && 744bf215546Sopenharmony_ci v3d_qpu_magic_waddr_is_vpm(inst->alu.add.waddr)) { 745bf215546Sopenharmony_ci return true; 746bf215546Sopenharmony_ci } 747bf215546Sopenharmony_ci 748bf215546Sopenharmony_ci if (inst->alu.mul.magic_write && 749bf215546Sopenharmony_ci v3d_qpu_magic_waddr_is_vpm(inst->alu.mul.waddr)) { 750bf215546Sopenharmony_ci return true; 751bf215546Sopenharmony_ci } 752bf215546Sopenharmony_ci } 753bf215546Sopenharmony_ci 754bf215546Sopenharmony_ci return false; 755bf215546Sopenharmony_ci} 756bf215546Sopenharmony_ci 757bf215546Sopenharmony_cibool 758bf215546Sopenharmony_civ3d_qpu_writes_unifa(const struct v3d_device_info *devinfo, 759bf215546Sopenharmony_ci const struct v3d_qpu_instr *inst) 760bf215546Sopenharmony_ci{ 761bf215546Sopenharmony_ci if (devinfo->ver < 40) 762bf215546Sopenharmony_ci return false; 763bf215546Sopenharmony_ci 764bf215546Sopenharmony_ci if (inst->type == V3D_QPU_INSTR_TYPE_ALU) { 765bf215546Sopenharmony_ci if (inst->alu.add.op != V3D_QPU_A_NOP && 766bf215546Sopenharmony_ci inst->alu.add.magic_write && 767bf215546Sopenharmony_ci inst->alu.add.waddr == V3D_QPU_WADDR_UNIFA) { 768bf215546Sopenharmony_ci return true; 769bf215546Sopenharmony_ci } 770bf215546Sopenharmony_ci 771bf215546Sopenharmony_ci if (inst->alu.mul.op != V3D_QPU_M_NOP && 772bf215546Sopenharmony_ci inst->alu.mul.magic_write && 773bf215546Sopenharmony_ci inst->alu.mul.waddr == V3D_QPU_WADDR_UNIFA) { 774bf215546Sopenharmony_ci return true; 775bf215546Sopenharmony_ci } 776bf215546Sopenharmony_ci } 777bf215546Sopenharmony_ci 778bf215546Sopenharmony_ci return false; 779bf215546Sopenharmony_ci} 780bf215546Sopenharmony_ci 781bf215546Sopenharmony_cibool 782bf215546Sopenharmony_civ3d_qpu_waits_vpm(const struct v3d_qpu_instr *inst) 783bf215546Sopenharmony_ci{ 784bf215546Sopenharmony_ci return inst->type == V3D_QPU_INSTR_TYPE_ALU && 785bf215546Sopenharmony_ci inst->alu.add.op == V3D_QPU_A_VPMWT; 786bf215546Sopenharmony_ci} 787bf215546Sopenharmony_ci 788bf215546Sopenharmony_cibool 789bf215546Sopenharmony_civ3d_qpu_reads_or_writes_vpm(const struct v3d_qpu_instr *inst) 790bf215546Sopenharmony_ci{ 791bf215546Sopenharmony_ci return v3d_qpu_reads_vpm(inst) || v3d_qpu_writes_vpm(inst); 792bf215546Sopenharmony_ci} 793bf215546Sopenharmony_ci 794bf215546Sopenharmony_cibool 795bf215546Sopenharmony_civ3d_qpu_uses_vpm(const struct v3d_qpu_instr *inst) 796bf215546Sopenharmony_ci{ 797bf215546Sopenharmony_ci return v3d_qpu_reads_vpm(inst) || 798bf215546Sopenharmony_ci v3d_qpu_writes_vpm(inst) || 799bf215546Sopenharmony_ci v3d_qpu_waits_vpm(inst); 800bf215546Sopenharmony_ci} 801bf215546Sopenharmony_ci 802bf215546Sopenharmony_cistatic bool 803bf215546Sopenharmony_ciqpu_writes_magic_waddr_explicitly(const struct v3d_device_info *devinfo, 804bf215546Sopenharmony_ci const struct v3d_qpu_instr *inst, 805bf215546Sopenharmony_ci uint32_t waddr) 806bf215546Sopenharmony_ci{ 807bf215546Sopenharmony_ci if (inst->type == V3D_QPU_INSTR_TYPE_ALU) { 808bf215546Sopenharmony_ci if (inst->alu.add.magic_write && inst->alu.add.waddr == waddr) 809bf215546Sopenharmony_ci return true; 810bf215546Sopenharmony_ci 811bf215546Sopenharmony_ci if (inst->alu.mul.magic_write && inst->alu.mul.waddr == waddr) 812bf215546Sopenharmony_ci return true; 813bf215546Sopenharmony_ci } 814bf215546Sopenharmony_ci 815bf215546Sopenharmony_ci if (v3d_qpu_sig_writes_address(devinfo, &inst->sig) && 816bf215546Sopenharmony_ci inst->sig_magic && inst->sig_addr == waddr) { 817bf215546Sopenharmony_ci return true; 818bf215546Sopenharmony_ci } 819bf215546Sopenharmony_ci 820bf215546Sopenharmony_ci return false; 821bf215546Sopenharmony_ci} 822bf215546Sopenharmony_ci 823bf215546Sopenharmony_cibool 824bf215546Sopenharmony_civ3d_qpu_writes_r3(const struct v3d_device_info *devinfo, 825bf215546Sopenharmony_ci const struct v3d_qpu_instr *inst) 826bf215546Sopenharmony_ci{ 827bf215546Sopenharmony_ci if (qpu_writes_magic_waddr_explicitly(devinfo, inst, V3D_QPU_WADDR_R3)) 828bf215546Sopenharmony_ci return true; 829bf215546Sopenharmony_ci 830bf215546Sopenharmony_ci return (devinfo->ver < 41 && inst->sig.ldvary) || inst->sig.ldvpm; 831bf215546Sopenharmony_ci} 832bf215546Sopenharmony_ci 833bf215546Sopenharmony_cibool 834bf215546Sopenharmony_civ3d_qpu_writes_r4(const struct v3d_device_info *devinfo, 835bf215546Sopenharmony_ci const struct v3d_qpu_instr *inst) 836bf215546Sopenharmony_ci{ 837bf215546Sopenharmony_ci if (inst->type == V3D_QPU_INSTR_TYPE_ALU) { 838bf215546Sopenharmony_ci if (inst->alu.add.magic_write && 839bf215546Sopenharmony_ci (inst->alu.add.waddr == V3D_QPU_WADDR_R4 || 840bf215546Sopenharmony_ci v3d_qpu_magic_waddr_is_sfu(inst->alu.add.waddr))) { 841bf215546Sopenharmony_ci return true; 842bf215546Sopenharmony_ci } 843bf215546Sopenharmony_ci 844bf215546Sopenharmony_ci if (inst->alu.mul.magic_write && 845bf215546Sopenharmony_ci (inst->alu.mul.waddr == V3D_QPU_WADDR_R4 || 846bf215546Sopenharmony_ci v3d_qpu_magic_waddr_is_sfu(inst->alu.mul.waddr))) { 847bf215546Sopenharmony_ci return true; 848bf215546Sopenharmony_ci } 849bf215546Sopenharmony_ci } 850bf215546Sopenharmony_ci 851bf215546Sopenharmony_ci if (v3d_qpu_sig_writes_address(devinfo, &inst->sig)) { 852bf215546Sopenharmony_ci if (inst->sig_magic && inst->sig_addr == V3D_QPU_WADDR_R4) 853bf215546Sopenharmony_ci return true; 854bf215546Sopenharmony_ci } else if (inst->sig.ldtmu) { 855bf215546Sopenharmony_ci return true; 856bf215546Sopenharmony_ci } 857bf215546Sopenharmony_ci 858bf215546Sopenharmony_ci return false; 859bf215546Sopenharmony_ci} 860bf215546Sopenharmony_ci 861bf215546Sopenharmony_cibool 862bf215546Sopenharmony_civ3d_qpu_writes_r5(const struct v3d_device_info *devinfo, 863bf215546Sopenharmony_ci const struct v3d_qpu_instr *inst) 864bf215546Sopenharmony_ci{ 865bf215546Sopenharmony_ci if (qpu_writes_magic_waddr_explicitly(devinfo, inst, V3D_QPU_WADDR_R5)) 866bf215546Sopenharmony_ci return true; 867bf215546Sopenharmony_ci 868bf215546Sopenharmony_ci return inst->sig.ldvary || inst->sig.ldunif || inst->sig.ldunifa; 869bf215546Sopenharmony_ci} 870bf215546Sopenharmony_ci 871bf215546Sopenharmony_cibool 872bf215546Sopenharmony_civ3d_qpu_writes_accum(const struct v3d_device_info *devinfo, 873bf215546Sopenharmony_ci const struct v3d_qpu_instr *inst) 874bf215546Sopenharmony_ci{ 875bf215546Sopenharmony_ci if (v3d_qpu_writes_r5(devinfo, inst)) 876bf215546Sopenharmony_ci return true; 877bf215546Sopenharmony_ci if (v3d_qpu_writes_r4(devinfo, inst)) 878bf215546Sopenharmony_ci return true; 879bf215546Sopenharmony_ci if (v3d_qpu_writes_r3(devinfo, inst)) 880bf215546Sopenharmony_ci return true; 881bf215546Sopenharmony_ci if (qpu_writes_magic_waddr_explicitly(devinfo, inst, V3D_QPU_WADDR_R2)) 882bf215546Sopenharmony_ci return true; 883bf215546Sopenharmony_ci if (qpu_writes_magic_waddr_explicitly(devinfo, inst, V3D_QPU_WADDR_R1)) 884bf215546Sopenharmony_ci return true; 885bf215546Sopenharmony_ci if (qpu_writes_magic_waddr_explicitly(devinfo, inst, V3D_QPU_WADDR_R0)) 886bf215546Sopenharmony_ci return true; 887bf215546Sopenharmony_ci 888bf215546Sopenharmony_ci return false; 889bf215546Sopenharmony_ci} 890bf215546Sopenharmony_ci 891bf215546Sopenharmony_cibool 892bf215546Sopenharmony_civ3d_qpu_uses_mux(const struct v3d_qpu_instr *inst, enum v3d_qpu_mux mux) 893bf215546Sopenharmony_ci{ 894bf215546Sopenharmony_ci int add_nsrc = v3d_qpu_add_op_num_src(inst->alu.add.op); 895bf215546Sopenharmony_ci int mul_nsrc = v3d_qpu_mul_op_num_src(inst->alu.mul.op); 896bf215546Sopenharmony_ci 897bf215546Sopenharmony_ci return ((add_nsrc > 0 && inst->alu.add.a == mux) || 898bf215546Sopenharmony_ci (add_nsrc > 1 && inst->alu.add.b == mux) || 899bf215546Sopenharmony_ci (mul_nsrc > 0 && inst->alu.mul.a == mux) || 900bf215546Sopenharmony_ci (mul_nsrc > 1 && inst->alu.mul.b == mux)); 901bf215546Sopenharmony_ci} 902bf215546Sopenharmony_ci 903bf215546Sopenharmony_cibool 904bf215546Sopenharmony_civ3d_qpu_sig_writes_address(const struct v3d_device_info *devinfo, 905bf215546Sopenharmony_ci const struct v3d_qpu_sig *sig) 906bf215546Sopenharmony_ci{ 907bf215546Sopenharmony_ci if (devinfo->ver < 41) 908bf215546Sopenharmony_ci return false; 909bf215546Sopenharmony_ci 910bf215546Sopenharmony_ci return (sig->ldunifrf || 911bf215546Sopenharmony_ci sig->ldunifarf || 912bf215546Sopenharmony_ci sig->ldvary || 913bf215546Sopenharmony_ci sig->ldtmu || 914bf215546Sopenharmony_ci sig->ldtlb || 915bf215546Sopenharmony_ci sig->ldtlbu); 916bf215546Sopenharmony_ci} 917bf215546Sopenharmony_ci 918bf215546Sopenharmony_cibool 919bf215546Sopenharmony_civ3d_qpu_reads_flags(const struct v3d_qpu_instr *inst) 920bf215546Sopenharmony_ci{ 921bf215546Sopenharmony_ci if (inst->type == V3D_QPU_INSTR_TYPE_BRANCH) { 922bf215546Sopenharmony_ci return inst->branch.cond != V3D_QPU_BRANCH_COND_ALWAYS; 923bf215546Sopenharmony_ci } else if (inst->type == V3D_QPU_INSTR_TYPE_ALU) { 924bf215546Sopenharmony_ci if (inst->flags.ac != V3D_QPU_COND_NONE || 925bf215546Sopenharmony_ci inst->flags.mc != V3D_QPU_COND_NONE || 926bf215546Sopenharmony_ci inst->flags.auf != V3D_QPU_UF_NONE || 927bf215546Sopenharmony_ci inst->flags.muf != V3D_QPU_UF_NONE) 928bf215546Sopenharmony_ci return true; 929bf215546Sopenharmony_ci 930bf215546Sopenharmony_ci switch (inst->alu.add.op) { 931bf215546Sopenharmony_ci case V3D_QPU_A_VFLA: 932bf215546Sopenharmony_ci case V3D_QPU_A_VFLNA: 933bf215546Sopenharmony_ci case V3D_QPU_A_VFLB: 934bf215546Sopenharmony_ci case V3D_QPU_A_VFLNB: 935bf215546Sopenharmony_ci case V3D_QPU_A_FLAPUSH: 936bf215546Sopenharmony_ci case V3D_QPU_A_FLBPUSH: 937bf215546Sopenharmony_ci case V3D_QPU_A_FLAFIRST: 938bf215546Sopenharmony_ci case V3D_QPU_A_FLNAFIRST: 939bf215546Sopenharmony_ci return true; 940bf215546Sopenharmony_ci default: 941bf215546Sopenharmony_ci break; 942bf215546Sopenharmony_ci } 943bf215546Sopenharmony_ci } 944bf215546Sopenharmony_ci 945bf215546Sopenharmony_ci return false; 946bf215546Sopenharmony_ci} 947bf215546Sopenharmony_ci 948bf215546Sopenharmony_cibool 949bf215546Sopenharmony_civ3d_qpu_writes_flags(const struct v3d_qpu_instr *inst) 950bf215546Sopenharmony_ci{ 951bf215546Sopenharmony_ci if (inst->flags.apf != V3D_QPU_PF_NONE || 952bf215546Sopenharmony_ci inst->flags.mpf != V3D_QPU_PF_NONE || 953bf215546Sopenharmony_ci inst->flags.auf != V3D_QPU_UF_NONE || 954bf215546Sopenharmony_ci inst->flags.muf != V3D_QPU_UF_NONE) { 955bf215546Sopenharmony_ci return true; 956bf215546Sopenharmony_ci } 957bf215546Sopenharmony_ci 958bf215546Sopenharmony_ci return false; 959bf215546Sopenharmony_ci} 960bf215546Sopenharmony_ci 961bf215546Sopenharmony_cibool 962bf215546Sopenharmony_civ3d_qpu_unpacks_f32(const struct v3d_qpu_instr *inst) 963bf215546Sopenharmony_ci{ 964bf215546Sopenharmony_ci if (inst->type != V3D_QPU_INSTR_TYPE_ALU) 965bf215546Sopenharmony_ci return false; 966bf215546Sopenharmony_ci 967bf215546Sopenharmony_ci switch (inst->alu.add.op) { 968bf215546Sopenharmony_ci case V3D_QPU_A_FADD: 969bf215546Sopenharmony_ci case V3D_QPU_A_FADDNF: 970bf215546Sopenharmony_ci case V3D_QPU_A_FSUB: 971bf215546Sopenharmony_ci case V3D_QPU_A_FMIN: 972bf215546Sopenharmony_ci case V3D_QPU_A_FMAX: 973bf215546Sopenharmony_ci case V3D_QPU_A_FCMP: 974bf215546Sopenharmony_ci case V3D_QPU_A_FROUND: 975bf215546Sopenharmony_ci case V3D_QPU_A_FTRUNC: 976bf215546Sopenharmony_ci case V3D_QPU_A_FFLOOR: 977bf215546Sopenharmony_ci case V3D_QPU_A_FCEIL: 978bf215546Sopenharmony_ci case V3D_QPU_A_FDX: 979bf215546Sopenharmony_ci case V3D_QPU_A_FDY: 980bf215546Sopenharmony_ci case V3D_QPU_A_FTOIN: 981bf215546Sopenharmony_ci case V3D_QPU_A_FTOIZ: 982bf215546Sopenharmony_ci case V3D_QPU_A_FTOUZ: 983bf215546Sopenharmony_ci case V3D_QPU_A_FTOC: 984bf215546Sopenharmony_ci case V3D_QPU_A_VFPACK: 985bf215546Sopenharmony_ci return true; 986bf215546Sopenharmony_ci break; 987bf215546Sopenharmony_ci default: 988bf215546Sopenharmony_ci break; 989bf215546Sopenharmony_ci } 990bf215546Sopenharmony_ci 991bf215546Sopenharmony_ci switch (inst->alu.mul.op) { 992bf215546Sopenharmony_ci case V3D_QPU_M_FMOV: 993bf215546Sopenharmony_ci case V3D_QPU_M_FMUL: 994bf215546Sopenharmony_ci return true; 995bf215546Sopenharmony_ci break; 996bf215546Sopenharmony_ci default: 997bf215546Sopenharmony_ci break; 998bf215546Sopenharmony_ci } 999bf215546Sopenharmony_ci 1000bf215546Sopenharmony_ci return false; 1001bf215546Sopenharmony_ci} 1002bf215546Sopenharmony_cibool 1003bf215546Sopenharmony_civ3d_qpu_unpacks_f16(const struct v3d_qpu_instr *inst) 1004bf215546Sopenharmony_ci{ 1005bf215546Sopenharmony_ci if (inst->type != V3D_QPU_INSTR_TYPE_ALU) 1006bf215546Sopenharmony_ci return false; 1007bf215546Sopenharmony_ci 1008bf215546Sopenharmony_ci switch (inst->alu.add.op) { 1009bf215546Sopenharmony_ci case V3D_QPU_A_VFMIN: 1010bf215546Sopenharmony_ci case V3D_QPU_A_VFMAX: 1011bf215546Sopenharmony_ci return true; 1012bf215546Sopenharmony_ci break; 1013bf215546Sopenharmony_ci default: 1014bf215546Sopenharmony_ci break; 1015bf215546Sopenharmony_ci } 1016bf215546Sopenharmony_ci 1017bf215546Sopenharmony_ci switch (inst->alu.mul.op) { 1018bf215546Sopenharmony_ci case V3D_QPU_M_VFMUL: 1019bf215546Sopenharmony_ci return true; 1020bf215546Sopenharmony_ci break; 1021bf215546Sopenharmony_ci default: 1022bf215546Sopenharmony_ci break; 1023bf215546Sopenharmony_ci } 1024bf215546Sopenharmony_ci 1025bf215546Sopenharmony_ci return false; 1026bf215546Sopenharmony_ci} 1027bf215546Sopenharmony_ci 1028bf215546Sopenharmony_cibool 1029bf215546Sopenharmony_civ3d_qpu_is_nop(struct v3d_qpu_instr *inst) 1030bf215546Sopenharmony_ci{ 1031bf215546Sopenharmony_ci static const struct v3d_qpu_sig nosig = { 0 }; 1032bf215546Sopenharmony_ci 1033bf215546Sopenharmony_ci if (inst->type != V3D_QPU_INSTR_TYPE_ALU) 1034bf215546Sopenharmony_ci return false; 1035bf215546Sopenharmony_ci if (inst->alu.add.op != V3D_QPU_A_NOP) 1036bf215546Sopenharmony_ci return false; 1037bf215546Sopenharmony_ci if (inst->alu.mul.op != V3D_QPU_M_NOP) 1038bf215546Sopenharmony_ci return false; 1039bf215546Sopenharmony_ci if (memcmp(&inst->sig, &nosig, sizeof(nosig))) 1040bf215546Sopenharmony_ci return false; 1041bf215546Sopenharmony_ci return true; 1042bf215546Sopenharmony_ci} 1043