1bf215546Sopenharmony_ci/* 2bf215546Sopenharmony_ci * Copyright (C) 2009 Nicolai Haehnle. 3bf215546Sopenharmony_ci * 4bf215546Sopenharmony_ci * All Rights Reserved. 5bf215546Sopenharmony_ci * 6bf215546Sopenharmony_ci * Permission is hereby granted, free of charge, to any person obtaining 7bf215546Sopenharmony_ci * a copy of this software and associated documentation files (the 8bf215546Sopenharmony_ci * "Software"), to deal in the Software without restriction, including 9bf215546Sopenharmony_ci * without limitation the rights to use, copy, modify, merge, publish, 10bf215546Sopenharmony_ci * distribute, sublicense, and/or sell copies of the Software, and to 11bf215546Sopenharmony_ci * permit persons to whom the Software is furnished to do so, subject to 12bf215546Sopenharmony_ci * the following conditions: 13bf215546Sopenharmony_ci * 14bf215546Sopenharmony_ci * The above copyright notice and this permission notice (including the 15bf215546Sopenharmony_ci * next paragraph) shall be included in all copies or substantial 16bf215546Sopenharmony_ci * portions of the Software. 17bf215546Sopenharmony_ci * 18bf215546Sopenharmony_ci * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 19bf215546Sopenharmony_ci * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 20bf215546Sopenharmony_ci * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. 21bf215546Sopenharmony_ci * IN NO EVENT SHALL THE COPYRIGHT OWNER(S) AND/OR ITS SUPPLIERS BE 22bf215546Sopenharmony_ci * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION 23bf215546Sopenharmony_ci * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION 24bf215546Sopenharmony_ci * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 25bf215546Sopenharmony_ci * 26bf215546Sopenharmony_ci */ 27bf215546Sopenharmony_ci 28bf215546Sopenharmony_ci#include "radeon_opcodes.h" 29bf215546Sopenharmony_ci#include "radeon_program.h" 30bf215546Sopenharmony_ci 31bf215546Sopenharmony_ci#include "radeon_program_constants.h" 32bf215546Sopenharmony_ci 33bf215546Sopenharmony_ci#include "util/compiler.h" 34bf215546Sopenharmony_ci 35bf215546Sopenharmony_ciconst struct rc_opcode_info rc_opcodes[MAX_RC_OPCODE] = { 36bf215546Sopenharmony_ci { 37bf215546Sopenharmony_ci .Opcode = RC_OPCODE_NOP, 38bf215546Sopenharmony_ci .Name = "NOP" 39bf215546Sopenharmony_ci }, 40bf215546Sopenharmony_ci { 41bf215546Sopenharmony_ci .Opcode = RC_OPCODE_ILLEGAL_OPCODE, 42bf215546Sopenharmony_ci .Name = "ILLEGAL OPCODE" 43bf215546Sopenharmony_ci }, 44bf215546Sopenharmony_ci { 45bf215546Sopenharmony_ci .Opcode = RC_OPCODE_ADD, 46bf215546Sopenharmony_ci .Name = "ADD", 47bf215546Sopenharmony_ci .NumSrcRegs = 2, 48bf215546Sopenharmony_ci .HasDstReg = 1, 49bf215546Sopenharmony_ci .IsComponentwise = 1 50bf215546Sopenharmony_ci }, 51bf215546Sopenharmony_ci { 52bf215546Sopenharmony_ci .Opcode = RC_OPCODE_ARL, 53bf215546Sopenharmony_ci .Name = "ARL", 54bf215546Sopenharmony_ci .NumSrcRegs = 1, 55bf215546Sopenharmony_ci .HasDstReg = 1 56bf215546Sopenharmony_ci }, 57bf215546Sopenharmony_ci { 58bf215546Sopenharmony_ci .Opcode = RC_OPCODE_ARR, 59bf215546Sopenharmony_ci .Name = "ARR", 60bf215546Sopenharmony_ci .NumSrcRegs = 1, 61bf215546Sopenharmony_ci .HasDstReg = 1 62bf215546Sopenharmony_ci }, 63bf215546Sopenharmony_ci { 64bf215546Sopenharmony_ci .Opcode = RC_OPCODE_CEIL, 65bf215546Sopenharmony_ci .Name = "CEIL", 66bf215546Sopenharmony_ci .NumSrcRegs = 1, 67bf215546Sopenharmony_ci .HasDstReg = 1, 68bf215546Sopenharmony_ci .IsComponentwise = 1 69bf215546Sopenharmony_ci }, 70bf215546Sopenharmony_ci { 71bf215546Sopenharmony_ci .Opcode = RC_OPCODE_CMP, 72bf215546Sopenharmony_ci .Name = "CMP", 73bf215546Sopenharmony_ci .NumSrcRegs = 3, 74bf215546Sopenharmony_ci .HasDstReg = 1, 75bf215546Sopenharmony_ci .IsComponentwise = 1 76bf215546Sopenharmony_ci }, 77bf215546Sopenharmony_ci { 78bf215546Sopenharmony_ci .Opcode = RC_OPCODE_CND, 79bf215546Sopenharmony_ci .Name = "CND", 80bf215546Sopenharmony_ci .NumSrcRegs = 3, 81bf215546Sopenharmony_ci .HasDstReg = 1, 82bf215546Sopenharmony_ci .IsComponentwise = 1 83bf215546Sopenharmony_ci }, 84bf215546Sopenharmony_ci { 85bf215546Sopenharmony_ci .Opcode = RC_OPCODE_COS, 86bf215546Sopenharmony_ci .Name = "COS", 87bf215546Sopenharmony_ci .NumSrcRegs = 1, 88bf215546Sopenharmony_ci .HasDstReg = 1, 89bf215546Sopenharmony_ci .IsStandardScalar = 1 90bf215546Sopenharmony_ci }, 91bf215546Sopenharmony_ci { 92bf215546Sopenharmony_ci .Opcode = RC_OPCODE_DDX, 93bf215546Sopenharmony_ci .Name = "DDX", 94bf215546Sopenharmony_ci .NumSrcRegs = 2, 95bf215546Sopenharmony_ci .HasDstReg = 1, 96bf215546Sopenharmony_ci .IsComponentwise = 1 97bf215546Sopenharmony_ci }, 98bf215546Sopenharmony_ci { 99bf215546Sopenharmony_ci .Opcode = RC_OPCODE_DDY, 100bf215546Sopenharmony_ci .Name = "DDY", 101bf215546Sopenharmony_ci .NumSrcRegs = 2, 102bf215546Sopenharmony_ci .HasDstReg = 1, 103bf215546Sopenharmony_ci .IsComponentwise = 1 104bf215546Sopenharmony_ci }, 105bf215546Sopenharmony_ci { 106bf215546Sopenharmony_ci .Opcode = RC_OPCODE_DP2, 107bf215546Sopenharmony_ci .Name = "DP2", 108bf215546Sopenharmony_ci .NumSrcRegs = 2, 109bf215546Sopenharmony_ci .HasDstReg = 1 110bf215546Sopenharmony_ci }, 111bf215546Sopenharmony_ci { 112bf215546Sopenharmony_ci .Opcode = RC_OPCODE_DP3, 113bf215546Sopenharmony_ci .Name = "DP3", 114bf215546Sopenharmony_ci .NumSrcRegs = 2, 115bf215546Sopenharmony_ci .HasDstReg = 1 116bf215546Sopenharmony_ci }, 117bf215546Sopenharmony_ci { 118bf215546Sopenharmony_ci .Opcode = RC_OPCODE_DP4, 119bf215546Sopenharmony_ci .Name = "DP4", 120bf215546Sopenharmony_ci .NumSrcRegs = 2, 121bf215546Sopenharmony_ci .HasDstReg = 1 122bf215546Sopenharmony_ci }, 123bf215546Sopenharmony_ci { 124bf215546Sopenharmony_ci .Opcode = RC_OPCODE_DST, 125bf215546Sopenharmony_ci .Name = "DST", 126bf215546Sopenharmony_ci .NumSrcRegs = 2, 127bf215546Sopenharmony_ci .HasDstReg = 1 128bf215546Sopenharmony_ci }, 129bf215546Sopenharmony_ci { 130bf215546Sopenharmony_ci .Opcode = RC_OPCODE_EX2, 131bf215546Sopenharmony_ci .Name = "EX2", 132bf215546Sopenharmony_ci .NumSrcRegs = 1, 133bf215546Sopenharmony_ci .HasDstReg = 1, 134bf215546Sopenharmony_ci .IsStandardScalar = 1 135bf215546Sopenharmony_ci }, 136bf215546Sopenharmony_ci { 137bf215546Sopenharmony_ci .Opcode = RC_OPCODE_EXP, 138bf215546Sopenharmony_ci .Name = "EXP", 139bf215546Sopenharmony_ci .NumSrcRegs = 1, 140bf215546Sopenharmony_ci .HasDstReg = 1 141bf215546Sopenharmony_ci }, 142bf215546Sopenharmony_ci { 143bf215546Sopenharmony_ci .Opcode = RC_OPCODE_FLR, 144bf215546Sopenharmony_ci .Name = "FLR", 145bf215546Sopenharmony_ci .NumSrcRegs = 1, 146bf215546Sopenharmony_ci .HasDstReg = 1, 147bf215546Sopenharmony_ci .IsComponentwise = 1 148bf215546Sopenharmony_ci }, 149bf215546Sopenharmony_ci { 150bf215546Sopenharmony_ci .Opcode = RC_OPCODE_FRC, 151bf215546Sopenharmony_ci .Name = "FRC", 152bf215546Sopenharmony_ci .NumSrcRegs = 1, 153bf215546Sopenharmony_ci .HasDstReg = 1, 154bf215546Sopenharmony_ci .IsComponentwise = 1 155bf215546Sopenharmony_ci }, 156bf215546Sopenharmony_ci { 157bf215546Sopenharmony_ci .Opcode = RC_OPCODE_KIL, 158bf215546Sopenharmony_ci .Name = "KIL", 159bf215546Sopenharmony_ci .NumSrcRegs = 1 160bf215546Sopenharmony_ci }, 161bf215546Sopenharmony_ci { 162bf215546Sopenharmony_ci .Opcode = RC_OPCODE_LG2, 163bf215546Sopenharmony_ci .Name = "LG2", 164bf215546Sopenharmony_ci .NumSrcRegs = 1, 165bf215546Sopenharmony_ci .HasDstReg = 1, 166bf215546Sopenharmony_ci .IsStandardScalar = 1 167bf215546Sopenharmony_ci }, 168bf215546Sopenharmony_ci { 169bf215546Sopenharmony_ci .Opcode = RC_OPCODE_LIT, 170bf215546Sopenharmony_ci .Name = "LIT", 171bf215546Sopenharmony_ci .NumSrcRegs = 1, 172bf215546Sopenharmony_ci .HasDstReg = 1 173bf215546Sopenharmony_ci }, 174bf215546Sopenharmony_ci { 175bf215546Sopenharmony_ci .Opcode = RC_OPCODE_LOG, 176bf215546Sopenharmony_ci .Name = "LOG", 177bf215546Sopenharmony_ci .NumSrcRegs = 1, 178bf215546Sopenharmony_ci .HasDstReg = 1 179bf215546Sopenharmony_ci }, 180bf215546Sopenharmony_ci { 181bf215546Sopenharmony_ci .Opcode = RC_OPCODE_LRP, 182bf215546Sopenharmony_ci .Name = "LRP", 183bf215546Sopenharmony_ci .NumSrcRegs = 3, 184bf215546Sopenharmony_ci .HasDstReg = 1, 185bf215546Sopenharmony_ci .IsComponentwise = 1 186bf215546Sopenharmony_ci }, 187bf215546Sopenharmony_ci { 188bf215546Sopenharmony_ci .Opcode = RC_OPCODE_MAD, 189bf215546Sopenharmony_ci .Name = "MAD", 190bf215546Sopenharmony_ci .NumSrcRegs = 3, 191bf215546Sopenharmony_ci .HasDstReg = 1, 192bf215546Sopenharmony_ci .IsComponentwise = 1 193bf215546Sopenharmony_ci }, 194bf215546Sopenharmony_ci { 195bf215546Sopenharmony_ci .Opcode = RC_OPCODE_MAX, 196bf215546Sopenharmony_ci .Name = "MAX", 197bf215546Sopenharmony_ci .NumSrcRegs = 2, 198bf215546Sopenharmony_ci .HasDstReg = 1, 199bf215546Sopenharmony_ci .IsComponentwise = 1 200bf215546Sopenharmony_ci }, 201bf215546Sopenharmony_ci { 202bf215546Sopenharmony_ci .Opcode = RC_OPCODE_MIN, 203bf215546Sopenharmony_ci .Name = "MIN", 204bf215546Sopenharmony_ci .NumSrcRegs = 2, 205bf215546Sopenharmony_ci .HasDstReg = 1, 206bf215546Sopenharmony_ci .IsComponentwise = 1 207bf215546Sopenharmony_ci }, 208bf215546Sopenharmony_ci { 209bf215546Sopenharmony_ci .Opcode = RC_OPCODE_MOV, 210bf215546Sopenharmony_ci .Name = "MOV", 211bf215546Sopenharmony_ci .NumSrcRegs = 1, 212bf215546Sopenharmony_ci .HasDstReg = 1, 213bf215546Sopenharmony_ci .IsComponentwise = 1 214bf215546Sopenharmony_ci }, 215bf215546Sopenharmony_ci { 216bf215546Sopenharmony_ci .Opcode = RC_OPCODE_MUL, 217bf215546Sopenharmony_ci .Name = "MUL", 218bf215546Sopenharmony_ci .NumSrcRegs = 2, 219bf215546Sopenharmony_ci .HasDstReg = 1, 220bf215546Sopenharmony_ci .IsComponentwise = 1 221bf215546Sopenharmony_ci }, 222bf215546Sopenharmony_ci { 223bf215546Sopenharmony_ci .Opcode = RC_OPCODE_POW, 224bf215546Sopenharmony_ci .Name = "POW", 225bf215546Sopenharmony_ci .NumSrcRegs = 2, 226bf215546Sopenharmony_ci .HasDstReg = 1, 227bf215546Sopenharmony_ci .IsStandardScalar = 1 228bf215546Sopenharmony_ci }, 229bf215546Sopenharmony_ci { 230bf215546Sopenharmony_ci .Opcode = RC_OPCODE_RCP, 231bf215546Sopenharmony_ci .Name = "RCP", 232bf215546Sopenharmony_ci .NumSrcRegs = 1, 233bf215546Sopenharmony_ci .HasDstReg = 1, 234bf215546Sopenharmony_ci .IsStandardScalar = 1 235bf215546Sopenharmony_ci }, 236bf215546Sopenharmony_ci { 237bf215546Sopenharmony_ci .Opcode = RC_OPCODE_ROUND, 238bf215546Sopenharmony_ci .Name = "ROUND", 239bf215546Sopenharmony_ci .NumSrcRegs = 1, 240bf215546Sopenharmony_ci .HasDstReg = 1, 241bf215546Sopenharmony_ci .IsComponentwise = 1 242bf215546Sopenharmony_ci }, 243bf215546Sopenharmony_ci { 244bf215546Sopenharmony_ci .Opcode = RC_OPCODE_RSQ, 245bf215546Sopenharmony_ci .Name = "RSQ", 246bf215546Sopenharmony_ci .NumSrcRegs = 1, 247bf215546Sopenharmony_ci .HasDstReg = 1, 248bf215546Sopenharmony_ci .IsStandardScalar = 1 249bf215546Sopenharmony_ci }, 250bf215546Sopenharmony_ci { 251bf215546Sopenharmony_ci .Opcode = RC_OPCODE_SEQ, 252bf215546Sopenharmony_ci .Name = "SEQ", 253bf215546Sopenharmony_ci .NumSrcRegs = 2, 254bf215546Sopenharmony_ci .HasDstReg = 1, 255bf215546Sopenharmony_ci .IsComponentwise = 1 256bf215546Sopenharmony_ci }, 257bf215546Sopenharmony_ci { 258bf215546Sopenharmony_ci .Opcode = RC_OPCODE_SGE, 259bf215546Sopenharmony_ci .Name = "SGE", 260bf215546Sopenharmony_ci .NumSrcRegs = 2, 261bf215546Sopenharmony_ci .HasDstReg = 1, 262bf215546Sopenharmony_ci .IsComponentwise = 1 263bf215546Sopenharmony_ci }, 264bf215546Sopenharmony_ci { 265bf215546Sopenharmony_ci .Opcode = RC_OPCODE_SGT, 266bf215546Sopenharmony_ci .Name = "SGT", 267bf215546Sopenharmony_ci .NumSrcRegs = 2, 268bf215546Sopenharmony_ci .HasDstReg = 1, 269bf215546Sopenharmony_ci .IsComponentwise = 1 270bf215546Sopenharmony_ci }, 271bf215546Sopenharmony_ci { 272bf215546Sopenharmony_ci .Opcode = RC_OPCODE_SIN, 273bf215546Sopenharmony_ci .Name = "SIN", 274bf215546Sopenharmony_ci .NumSrcRegs = 1, 275bf215546Sopenharmony_ci .HasDstReg = 1, 276bf215546Sopenharmony_ci .IsStandardScalar = 1 277bf215546Sopenharmony_ci }, 278bf215546Sopenharmony_ci { 279bf215546Sopenharmony_ci .Opcode = RC_OPCODE_SLE, 280bf215546Sopenharmony_ci .Name = "SLE", 281bf215546Sopenharmony_ci .NumSrcRegs = 2, 282bf215546Sopenharmony_ci .HasDstReg = 1, 283bf215546Sopenharmony_ci .IsComponentwise = 1 284bf215546Sopenharmony_ci }, 285bf215546Sopenharmony_ci { 286bf215546Sopenharmony_ci .Opcode = RC_OPCODE_SLT, 287bf215546Sopenharmony_ci .Name = "SLT", 288bf215546Sopenharmony_ci .NumSrcRegs = 2, 289bf215546Sopenharmony_ci .HasDstReg = 1, 290bf215546Sopenharmony_ci .IsComponentwise = 1 291bf215546Sopenharmony_ci }, 292bf215546Sopenharmony_ci { 293bf215546Sopenharmony_ci .Opcode = RC_OPCODE_SNE, 294bf215546Sopenharmony_ci .Name = "SNE", 295bf215546Sopenharmony_ci .NumSrcRegs = 2, 296bf215546Sopenharmony_ci .HasDstReg = 1, 297bf215546Sopenharmony_ci .IsComponentwise = 1 298bf215546Sopenharmony_ci }, 299bf215546Sopenharmony_ci { 300bf215546Sopenharmony_ci .Opcode = RC_OPCODE_SSG, 301bf215546Sopenharmony_ci .Name = "SSG", 302bf215546Sopenharmony_ci .NumSrcRegs = 1, 303bf215546Sopenharmony_ci .HasDstReg = 1, 304bf215546Sopenharmony_ci .IsComponentwise = 1 305bf215546Sopenharmony_ci }, 306bf215546Sopenharmony_ci { 307bf215546Sopenharmony_ci .Opcode = RC_OPCODE_SUB, 308bf215546Sopenharmony_ci .Name = "SUB", 309bf215546Sopenharmony_ci .NumSrcRegs = 2, 310bf215546Sopenharmony_ci .HasDstReg = 1, 311bf215546Sopenharmony_ci .IsComponentwise = 1 312bf215546Sopenharmony_ci }, 313bf215546Sopenharmony_ci { 314bf215546Sopenharmony_ci .Opcode = RC_OPCODE_TRUNC, 315bf215546Sopenharmony_ci .Name = "TRUNC", 316bf215546Sopenharmony_ci .NumSrcRegs = 1, 317bf215546Sopenharmony_ci .HasDstReg = 1, 318bf215546Sopenharmony_ci .IsComponentwise = 1 319bf215546Sopenharmony_ci }, 320bf215546Sopenharmony_ci { 321bf215546Sopenharmony_ci .Opcode = RC_OPCODE_TEX, 322bf215546Sopenharmony_ci .Name = "TEX", 323bf215546Sopenharmony_ci .HasTexture = 1, 324bf215546Sopenharmony_ci .NumSrcRegs = 1, 325bf215546Sopenharmony_ci .HasDstReg = 1 326bf215546Sopenharmony_ci }, 327bf215546Sopenharmony_ci { 328bf215546Sopenharmony_ci .Opcode = RC_OPCODE_TXB, 329bf215546Sopenharmony_ci .Name = "TXB", 330bf215546Sopenharmony_ci .HasTexture = 1, 331bf215546Sopenharmony_ci .NumSrcRegs = 1, 332bf215546Sopenharmony_ci .HasDstReg = 1 333bf215546Sopenharmony_ci }, 334bf215546Sopenharmony_ci { 335bf215546Sopenharmony_ci .Opcode = RC_OPCODE_TXD, 336bf215546Sopenharmony_ci .Name = "TXD", 337bf215546Sopenharmony_ci .HasTexture = 1, 338bf215546Sopenharmony_ci .NumSrcRegs = 3, 339bf215546Sopenharmony_ci .HasDstReg = 1 340bf215546Sopenharmony_ci }, 341bf215546Sopenharmony_ci { 342bf215546Sopenharmony_ci .Opcode = RC_OPCODE_TXL, 343bf215546Sopenharmony_ci .Name = "TXL", 344bf215546Sopenharmony_ci .HasTexture = 1, 345bf215546Sopenharmony_ci .NumSrcRegs = 1, 346bf215546Sopenharmony_ci .HasDstReg = 1 347bf215546Sopenharmony_ci }, 348bf215546Sopenharmony_ci { 349bf215546Sopenharmony_ci .Opcode = RC_OPCODE_TXP, 350bf215546Sopenharmony_ci .Name = "TXP", 351bf215546Sopenharmony_ci .HasTexture = 1, 352bf215546Sopenharmony_ci .NumSrcRegs = 1, 353bf215546Sopenharmony_ci .HasDstReg = 1 354bf215546Sopenharmony_ci }, 355bf215546Sopenharmony_ci { 356bf215546Sopenharmony_ci .Opcode = RC_OPCODE_IF, 357bf215546Sopenharmony_ci .Name = "IF", 358bf215546Sopenharmony_ci .IsFlowControl = 1, 359bf215546Sopenharmony_ci .NumSrcRegs = 1 360bf215546Sopenharmony_ci }, 361bf215546Sopenharmony_ci { 362bf215546Sopenharmony_ci .Opcode = RC_OPCODE_ELSE, 363bf215546Sopenharmony_ci .Name = "ELSE", 364bf215546Sopenharmony_ci .IsFlowControl = 1, 365bf215546Sopenharmony_ci .NumSrcRegs = 0 366bf215546Sopenharmony_ci }, 367bf215546Sopenharmony_ci { 368bf215546Sopenharmony_ci .Opcode = RC_OPCODE_ENDIF, 369bf215546Sopenharmony_ci .Name = "ENDIF", 370bf215546Sopenharmony_ci .IsFlowControl = 1, 371bf215546Sopenharmony_ci .NumSrcRegs = 0 372bf215546Sopenharmony_ci }, 373bf215546Sopenharmony_ci { 374bf215546Sopenharmony_ci .Opcode = RC_OPCODE_BGNLOOP, 375bf215546Sopenharmony_ci .Name = "BGNLOOP", 376bf215546Sopenharmony_ci .IsFlowControl = 1, 377bf215546Sopenharmony_ci .NumSrcRegs = 0 378bf215546Sopenharmony_ci }, 379bf215546Sopenharmony_ci { 380bf215546Sopenharmony_ci .Opcode = RC_OPCODE_BRK, 381bf215546Sopenharmony_ci .Name = "BRK", 382bf215546Sopenharmony_ci .IsFlowControl = 1, 383bf215546Sopenharmony_ci .NumSrcRegs = 0 384bf215546Sopenharmony_ci }, 385bf215546Sopenharmony_ci { 386bf215546Sopenharmony_ci .Opcode = RC_OPCODE_ENDLOOP, 387bf215546Sopenharmony_ci .Name = "ENDLOOP", 388bf215546Sopenharmony_ci .IsFlowControl = 1, 389bf215546Sopenharmony_ci .NumSrcRegs = 0, 390bf215546Sopenharmony_ci }, 391bf215546Sopenharmony_ci { 392bf215546Sopenharmony_ci .Opcode = RC_OPCODE_CONT, 393bf215546Sopenharmony_ci .Name = "CONT", 394bf215546Sopenharmony_ci .IsFlowControl = 1, 395bf215546Sopenharmony_ci .NumSrcRegs = 0 396bf215546Sopenharmony_ci }, 397bf215546Sopenharmony_ci { 398bf215546Sopenharmony_ci .Opcode = RC_OPCODE_REPL_ALPHA, 399bf215546Sopenharmony_ci .Name = "REPL_ALPHA", 400bf215546Sopenharmony_ci .HasDstReg = 1 401bf215546Sopenharmony_ci }, 402bf215546Sopenharmony_ci { 403bf215546Sopenharmony_ci .Opcode = RC_OPCODE_BEGIN_TEX, 404bf215546Sopenharmony_ci .Name = "BEGIN_TEX" 405bf215546Sopenharmony_ci }, 406bf215546Sopenharmony_ci { 407bf215546Sopenharmony_ci .Opcode = RC_OPCODE_KILP, 408bf215546Sopenharmony_ci .Name = "KILP", 409bf215546Sopenharmony_ci }, 410bf215546Sopenharmony_ci { 411bf215546Sopenharmony_ci .Opcode = RC_ME_PRED_SEQ, 412bf215546Sopenharmony_ci .Name = "ME_PRED_SEQ", 413bf215546Sopenharmony_ci .NumSrcRegs = 1, 414bf215546Sopenharmony_ci .HasDstReg = 1 415bf215546Sopenharmony_ci }, 416bf215546Sopenharmony_ci { 417bf215546Sopenharmony_ci .Opcode = RC_ME_PRED_SGT, 418bf215546Sopenharmony_ci .Name = "ME_PRED_SGT", 419bf215546Sopenharmony_ci .NumSrcRegs = 1, 420bf215546Sopenharmony_ci .HasDstReg = 1 421bf215546Sopenharmony_ci }, 422bf215546Sopenharmony_ci { 423bf215546Sopenharmony_ci .Opcode = RC_ME_PRED_SGE, 424bf215546Sopenharmony_ci .Name = "ME_PRED_SGE", 425bf215546Sopenharmony_ci .NumSrcRegs = 1, 426bf215546Sopenharmony_ci .HasDstReg = 1 427bf215546Sopenharmony_ci }, 428bf215546Sopenharmony_ci { 429bf215546Sopenharmony_ci .Opcode = RC_ME_PRED_SNEQ, 430bf215546Sopenharmony_ci .Name = "ME_PRED_SNEQ", 431bf215546Sopenharmony_ci .NumSrcRegs = 1, 432bf215546Sopenharmony_ci .HasDstReg = 1 433bf215546Sopenharmony_ci }, 434bf215546Sopenharmony_ci { 435bf215546Sopenharmony_ci .Opcode = RC_ME_PRED_SET_CLR, 436bf215546Sopenharmony_ci .Name = "ME_PRED_SET_CLEAR", 437bf215546Sopenharmony_ci .NumSrcRegs = 1, 438bf215546Sopenharmony_ci .HasDstReg = 1 439bf215546Sopenharmony_ci }, 440bf215546Sopenharmony_ci { 441bf215546Sopenharmony_ci .Opcode = RC_ME_PRED_SET_INV, 442bf215546Sopenharmony_ci .Name = "ME_PRED_SET_INV", 443bf215546Sopenharmony_ci .NumSrcRegs = 1, 444bf215546Sopenharmony_ci .HasDstReg = 1 445bf215546Sopenharmony_ci }, 446bf215546Sopenharmony_ci { 447bf215546Sopenharmony_ci .Opcode = RC_ME_PRED_SET_POP, 448bf215546Sopenharmony_ci .Name = "ME_PRED_SET_POP", 449bf215546Sopenharmony_ci .NumSrcRegs = 1, 450bf215546Sopenharmony_ci .HasDstReg = 1 451bf215546Sopenharmony_ci }, 452bf215546Sopenharmony_ci { 453bf215546Sopenharmony_ci .Opcode = RC_ME_PRED_SET_RESTORE, 454bf215546Sopenharmony_ci .Name = "ME_PRED_SET_RESTORE", 455bf215546Sopenharmony_ci .NumSrcRegs = 1, 456bf215546Sopenharmony_ci .HasDstReg = 1 457bf215546Sopenharmony_ci }, 458bf215546Sopenharmony_ci { 459bf215546Sopenharmony_ci .Opcode = RC_VE_PRED_SEQ_PUSH, 460bf215546Sopenharmony_ci .Name = "VE_PRED_SEQ_PUSH", 461bf215546Sopenharmony_ci .NumSrcRegs = 2, 462bf215546Sopenharmony_ci .HasDstReg = 1 463bf215546Sopenharmony_ci }, 464bf215546Sopenharmony_ci { 465bf215546Sopenharmony_ci .Opcode = RC_VE_PRED_SGT_PUSH, 466bf215546Sopenharmony_ci .Name = "VE_PRED_SGT_PUSH", 467bf215546Sopenharmony_ci .NumSrcRegs = 2, 468bf215546Sopenharmony_ci .HasDstReg = 1 469bf215546Sopenharmony_ci }, 470bf215546Sopenharmony_ci { 471bf215546Sopenharmony_ci .Opcode = RC_VE_PRED_SGE_PUSH, 472bf215546Sopenharmony_ci .Name = "VE_PRED_SGE_PUSH", 473bf215546Sopenharmony_ci .NumSrcRegs = 2, 474bf215546Sopenharmony_ci .HasDstReg = 1 475bf215546Sopenharmony_ci }, 476bf215546Sopenharmony_ci { 477bf215546Sopenharmony_ci .Opcode = RC_VE_PRED_SNEQ_PUSH, 478bf215546Sopenharmony_ci .Name = "VE_PRED_SNEQ_PUSH", 479bf215546Sopenharmony_ci .NumSrcRegs = 2, 480bf215546Sopenharmony_ci .HasDstReg = 1 481bf215546Sopenharmony_ci } 482bf215546Sopenharmony_ci}; 483bf215546Sopenharmony_ci 484bf215546Sopenharmony_civoid rc_compute_sources_for_writemask( 485bf215546Sopenharmony_ci const struct rc_instruction *inst, 486bf215546Sopenharmony_ci unsigned int writemask, 487bf215546Sopenharmony_ci unsigned int *srcmasks) 488bf215546Sopenharmony_ci{ 489bf215546Sopenharmony_ci const struct rc_opcode_info * opcode = rc_get_opcode_info(inst->U.I.Opcode); 490bf215546Sopenharmony_ci srcmasks[0] = 0; 491bf215546Sopenharmony_ci srcmasks[1] = 0; 492bf215546Sopenharmony_ci srcmasks[2] = 0; 493bf215546Sopenharmony_ci 494bf215546Sopenharmony_ci if (opcode->Opcode == RC_OPCODE_KIL) 495bf215546Sopenharmony_ci srcmasks[0] |= RC_MASK_XYZW; 496bf215546Sopenharmony_ci else if (opcode->Opcode == RC_OPCODE_IF) 497bf215546Sopenharmony_ci srcmasks[0] |= RC_MASK_X; 498bf215546Sopenharmony_ci 499bf215546Sopenharmony_ci if (!writemask) 500bf215546Sopenharmony_ci return; 501bf215546Sopenharmony_ci 502bf215546Sopenharmony_ci if (opcode->IsComponentwise) { 503bf215546Sopenharmony_ci for(unsigned int src = 0; src < opcode->NumSrcRegs; ++src) 504bf215546Sopenharmony_ci srcmasks[src] |= writemask; 505bf215546Sopenharmony_ci } else if (opcode->IsStandardScalar) { 506bf215546Sopenharmony_ci for(unsigned int src = 0; src < opcode->NumSrcRegs; ++src) 507bf215546Sopenharmony_ci srcmasks[src] |= writemask; 508bf215546Sopenharmony_ci } else { 509bf215546Sopenharmony_ci switch(opcode->Opcode) { 510bf215546Sopenharmony_ci case RC_OPCODE_ARL: 511bf215546Sopenharmony_ci case RC_OPCODE_ARR: 512bf215546Sopenharmony_ci srcmasks[0] |= RC_MASK_X; 513bf215546Sopenharmony_ci break; 514bf215546Sopenharmony_ci case RC_OPCODE_DP2: 515bf215546Sopenharmony_ci srcmasks[0] |= RC_MASK_XY; 516bf215546Sopenharmony_ci srcmasks[1] |= RC_MASK_XY; 517bf215546Sopenharmony_ci break; 518bf215546Sopenharmony_ci case RC_OPCODE_DP3: 519bf215546Sopenharmony_ci srcmasks[0] |= RC_MASK_XYZ; 520bf215546Sopenharmony_ci srcmasks[1] |= RC_MASK_XYZ; 521bf215546Sopenharmony_ci break; 522bf215546Sopenharmony_ci case RC_OPCODE_DP4: 523bf215546Sopenharmony_ci srcmasks[0] |= RC_MASK_XYZW; 524bf215546Sopenharmony_ci srcmasks[1] |= RC_MASK_XYZW; 525bf215546Sopenharmony_ci break; 526bf215546Sopenharmony_ci case RC_OPCODE_TXB: 527bf215546Sopenharmony_ci case RC_OPCODE_TXP: 528bf215546Sopenharmony_ci case RC_OPCODE_TXL: 529bf215546Sopenharmony_ci srcmasks[0] |= RC_MASK_W; 530bf215546Sopenharmony_ci FALLTHROUGH; 531bf215546Sopenharmony_ci case RC_OPCODE_TEX: 532bf215546Sopenharmony_ci switch (inst->U.I.TexSrcTarget) { 533bf215546Sopenharmony_ci case RC_TEXTURE_1D: 534bf215546Sopenharmony_ci srcmasks[0] |= RC_MASK_X; 535bf215546Sopenharmony_ci break; 536bf215546Sopenharmony_ci case RC_TEXTURE_2D: 537bf215546Sopenharmony_ci case RC_TEXTURE_RECT: 538bf215546Sopenharmony_ci case RC_TEXTURE_1D_ARRAY: 539bf215546Sopenharmony_ci srcmasks[0] |= RC_MASK_XY; 540bf215546Sopenharmony_ci break; 541bf215546Sopenharmony_ci case RC_TEXTURE_3D: 542bf215546Sopenharmony_ci case RC_TEXTURE_CUBE: 543bf215546Sopenharmony_ci case RC_TEXTURE_2D_ARRAY: 544bf215546Sopenharmony_ci srcmasks[0] |= RC_MASK_XYZ; 545bf215546Sopenharmony_ci break; 546bf215546Sopenharmony_ci } 547bf215546Sopenharmony_ci break; 548bf215546Sopenharmony_ci case RC_OPCODE_TXD: 549bf215546Sopenharmony_ci switch (inst->U.I.TexSrcTarget) { 550bf215546Sopenharmony_ci case RC_TEXTURE_1D_ARRAY: 551bf215546Sopenharmony_ci srcmasks[0] |= RC_MASK_Y; 552bf215546Sopenharmony_ci FALLTHROUGH; 553bf215546Sopenharmony_ci case RC_TEXTURE_1D: 554bf215546Sopenharmony_ci srcmasks[0] |= RC_MASK_X; 555bf215546Sopenharmony_ci srcmasks[1] |= RC_MASK_X; 556bf215546Sopenharmony_ci srcmasks[2] |= RC_MASK_X; 557bf215546Sopenharmony_ci break; 558bf215546Sopenharmony_ci case RC_TEXTURE_2D_ARRAY: 559bf215546Sopenharmony_ci srcmasks[0] |= RC_MASK_Z; 560bf215546Sopenharmony_ci FALLTHROUGH; 561bf215546Sopenharmony_ci case RC_TEXTURE_2D: 562bf215546Sopenharmony_ci case RC_TEXTURE_RECT: 563bf215546Sopenharmony_ci srcmasks[0] |= RC_MASK_XY; 564bf215546Sopenharmony_ci srcmasks[1] |= RC_MASK_XY; 565bf215546Sopenharmony_ci srcmasks[2] |= RC_MASK_XY; 566bf215546Sopenharmony_ci break; 567bf215546Sopenharmony_ci case RC_TEXTURE_3D: 568bf215546Sopenharmony_ci case RC_TEXTURE_CUBE: 569bf215546Sopenharmony_ci srcmasks[0] |= RC_MASK_XYZ; 570bf215546Sopenharmony_ci srcmasks[1] |= RC_MASK_XYZ; 571bf215546Sopenharmony_ci srcmasks[2] |= RC_MASK_XYZ; 572bf215546Sopenharmony_ci break; 573bf215546Sopenharmony_ci } 574bf215546Sopenharmony_ci break; 575bf215546Sopenharmony_ci case RC_OPCODE_DST: 576bf215546Sopenharmony_ci srcmasks[0] |= RC_MASK_Y | RC_MASK_Z; 577bf215546Sopenharmony_ci srcmasks[1] |= RC_MASK_Y | RC_MASK_W; 578bf215546Sopenharmony_ci break; 579bf215546Sopenharmony_ci case RC_OPCODE_EXP: 580bf215546Sopenharmony_ci case RC_OPCODE_LOG: 581bf215546Sopenharmony_ci srcmasks[0] |= RC_MASK_XY; 582bf215546Sopenharmony_ci break; 583bf215546Sopenharmony_ci case RC_OPCODE_LIT: 584bf215546Sopenharmony_ci srcmasks[0] |= RC_MASK_X | RC_MASK_Y | RC_MASK_W; 585bf215546Sopenharmony_ci break; 586bf215546Sopenharmony_ci default: 587bf215546Sopenharmony_ci break; 588bf215546Sopenharmony_ci } 589bf215546Sopenharmony_ci } 590bf215546Sopenharmony_ci} 591