1bf215546Sopenharmony_ci/* 2bf215546Sopenharmony_ci * Copyright 2012 Vadim Girlin <vadimgirlin@gmail.com> 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 * on the rights to use, copy, modify, merge, publish, distribute, sub 8bf215546Sopenharmony_ci * license, and/or sell copies of the Software, and to permit persons to whom 9bf215546Sopenharmony_ci * the 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 NON-INFRINGEMENT. IN NO EVENT SHALL 18bf215546Sopenharmony_ci * THE AUTHOR(S) AND/OR THEIR SUPPLIERS BE LIABLE FOR ANY CLAIM, 19bf215546Sopenharmony_ci * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR 20bf215546Sopenharmony_ci * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE 21bf215546Sopenharmony_ci * USE OR OTHER DEALINGS IN THE SOFTWARE. 22bf215546Sopenharmony_ci * 23bf215546Sopenharmony_ci * Authors: 24bf215546Sopenharmony_ci * Vadim Girlin 25bf215546Sopenharmony_ci */ 26bf215546Sopenharmony_ci 27bf215546Sopenharmony_ci#ifndef R600_ISA_H_ 28bf215546Sopenharmony_ci#define R600_ISA_H_ 29bf215546Sopenharmony_ci 30bf215546Sopenharmony_ci#include "util/u_debug.h" 31bf215546Sopenharmony_ci 32bf215546Sopenharmony_ci#ifdef __cplusplus 33bf215546Sopenharmony_ciextern "C" { 34bf215546Sopenharmony_ci#endif 35bf215546Sopenharmony_ci 36bf215546Sopenharmony_ci/* ALU flags */ 37bf215546Sopenharmony_cienum alu_op_flags 38bf215546Sopenharmony_ci{ 39bf215546Sopenharmony_ci AF_NONE = 0, 40bf215546Sopenharmony_ci AF_V = (1<<0), /* allowed in vector slots */ 41bf215546Sopenharmony_ci 42bf215546Sopenharmony_ci /* allowed in scalar(trans) slot (slots xyz on cayman, may be replicated 43bf215546Sopenharmony_ci * to w) */ 44bf215546Sopenharmony_ci AF_S = (1<<1), 45bf215546Sopenharmony_ci 46bf215546Sopenharmony_ci AF_4SLOT = (1<<2), /* uses four vector slots (e.g. DOT4) */ 47bf215546Sopenharmony_ci AF_4V = (AF_V | AF_4SLOT), 48bf215546Sopenharmony_ci AF_VS = (AF_V | AF_S), /* allowed in any slot */ 49bf215546Sopenharmony_ci 50bf215546Sopenharmony_ci AF_2SLOT = (1 << 3), 51bf215546Sopenharmony_ci AF_2V = AF_V | AF_2SLOT, /* XY or ZW */ 52bf215546Sopenharmony_ci 53bf215546Sopenharmony_ci AF_KILL = (1<<4), 54bf215546Sopenharmony_ci AF_PRED = (1<<5), 55bf215546Sopenharmony_ci AF_SET = (1<<6), 56bf215546Sopenharmony_ci 57bf215546Sopenharmony_ci /* e.g. MUL_PREV instructions, allowed in x/y, depends on z/w */ 58bf215546Sopenharmony_ci AF_PREV_INTERLEAVE = (1<<7), 59bf215546Sopenharmony_ci 60bf215546Sopenharmony_ci AF_MOVA = (1<<8), /* all MOVA instructions */ 61bf215546Sopenharmony_ci 62bf215546Sopenharmony_ci AF_IEEE = (1<<10), 63bf215546Sopenharmony_ci 64bf215546Sopenharmony_ci AF_DST_TYPE_MASK = (3<<11), 65bf215546Sopenharmony_ci AF_FLOAT_DST = 0, 66bf215546Sopenharmony_ci AF_INT_DST = (1<<11), 67bf215546Sopenharmony_ci AF_UINT_DST = (3<<11), 68bf215546Sopenharmony_ci 69bf215546Sopenharmony_ci /* DP instructions, 2-slot pairs */ 70bf215546Sopenharmony_ci AF_64 = (1<<13), 71bf215546Sopenharmony_ci /* 24 bit instructions */ 72bf215546Sopenharmony_ci AF_24 = (1<<14), 73bf215546Sopenharmony_ci /* DX10 variants */ 74bf215546Sopenharmony_ci AF_DX10 = (1<<15), 75bf215546Sopenharmony_ci 76bf215546Sopenharmony_ci /* result is replicated to all channels (only if AF_4V is also set - 77bf215546Sopenharmony_ci * for special handling of MULLO_INT on CM) */ 78bf215546Sopenharmony_ci AF_REPL = (1<<16), 79bf215546Sopenharmony_ci 80bf215546Sopenharmony_ci /* interpolation instructions */ 81bf215546Sopenharmony_ci AF_INTERP = (1<<17), 82bf215546Sopenharmony_ci 83bf215546Sopenharmony_ci /* LDS instructions */ 84bf215546Sopenharmony_ci AF_LDS = (1<<20), 85bf215546Sopenharmony_ci 86bf215546Sopenharmony_ci /* e.g. DOT - depends on the next slot in the same group (x<=y/y<=z/z<=w) */ 87bf215546Sopenharmony_ci AF_PREV_NEXT = (1<<21), 88bf215546Sopenharmony_ci 89bf215546Sopenharmony_ci /* int<->flt conversions */ 90bf215546Sopenharmony_ci AF_CVT = (1<<22), 91bf215546Sopenharmony_ci 92bf215546Sopenharmony_ci /* commutative operation on src0 and src1 ( a op b = b op a), 93bf215546Sopenharmony_ci * includes MULADDs (considering the MUL part on src0 and src1 only) */ 94bf215546Sopenharmony_ci AF_M_COMM = (1 << 23), 95bf215546Sopenharmony_ci 96bf215546Sopenharmony_ci /* associative operation ((a op b) op c) == (a op (b op c)), 97bf215546Sopenharmony_ci * includes MULADDs (considering the MUL part on src0 and src1 only) */ 98bf215546Sopenharmony_ci AF_M_ASSOC = (1 << 24), 99bf215546Sopenharmony_ci 100bf215546Sopenharmony_ci AF_PRED_PUSH = (1 << 25), 101bf215546Sopenharmony_ci 102bf215546Sopenharmony_ci AF_ANY_PRED = (AF_PRED | AF_PRED_PUSH), 103bf215546Sopenharmony_ci 104bf215546Sopenharmony_ci AF_CMOV = (1 << 26), 105bf215546Sopenharmony_ci 106bf215546Sopenharmony_ci // for SETcc, PREDSETcc, ... - type of comparison 107bf215546Sopenharmony_ci AF_CMP_TYPE_MASK = (3 << 27), 108bf215546Sopenharmony_ci AF_FLOAT_CMP = 0, 109bf215546Sopenharmony_ci AF_INT_CMP = (1 << 27), 110bf215546Sopenharmony_ci AF_UINT_CMP = (3 << 27), 111bf215546Sopenharmony_ci 112bf215546Sopenharmony_ci /* condition codes - 3 bits */ 113bf215546Sopenharmony_ci AF_CC_SHIFT = 29, 114bf215546Sopenharmony_ci 115bf215546Sopenharmony_ci AF_CC_MASK = (7U << AF_CC_SHIFT), 116bf215546Sopenharmony_ci AF_CC_E = (0U << AF_CC_SHIFT), 117bf215546Sopenharmony_ci AF_CC_GT = (1U << AF_CC_SHIFT), 118bf215546Sopenharmony_ci AF_CC_GE = (2U << AF_CC_SHIFT), 119bf215546Sopenharmony_ci AF_CC_NE = (3U << AF_CC_SHIFT), 120bf215546Sopenharmony_ci AF_CC_LT = (4U << AF_CC_SHIFT), 121bf215546Sopenharmony_ci AF_CC_LE = (5U << AF_CC_SHIFT), 122bf215546Sopenharmony_ci}; 123bf215546Sopenharmony_ci 124bf215546Sopenharmony_ci/* flags for FETCH instructions (TEX/VTX/GDS) */ 125bf215546Sopenharmony_cienum fetch_op_flags 126bf215546Sopenharmony_ci{ 127bf215546Sopenharmony_ci FF_GDS = (1<<0), 128bf215546Sopenharmony_ci FF_TEX = (1<<1), 129bf215546Sopenharmony_ci 130bf215546Sopenharmony_ci FF_SETGRAD = (1<<2), 131bf215546Sopenharmony_ci FF_GETGRAD = (1<<3), 132bf215546Sopenharmony_ci FF_USEGRAD = (1<<4), 133bf215546Sopenharmony_ci 134bf215546Sopenharmony_ci FF_VTX = (1<<5), 135bf215546Sopenharmony_ci FF_MEM = (1<<6), 136bf215546Sopenharmony_ci 137bf215546Sopenharmony_ci FF_SET_TEXTURE_OFFSETS = (1<<7), 138bf215546Sopenharmony_ci FF_USE_TEXTURE_OFFSETS = (1<<8), 139bf215546Sopenharmony_ci}; 140bf215546Sopenharmony_ci 141bf215546Sopenharmony_ci/* flags for CF instructions */ 142bf215546Sopenharmony_cienum cf_op_flags 143bf215546Sopenharmony_ci{ 144bf215546Sopenharmony_ci CF_CLAUSE = (1<<0), /* execute clause (alu/fetch ...) */ 145bf215546Sopenharmony_ci CF_ACK = (1<<1), /* acked versions of some instructions */ 146bf215546Sopenharmony_ci CF_ALU = (1<<2), /* alu clause execution */ 147bf215546Sopenharmony_ci CF_ALU_EXT = (1<<3), /* ALU_EXTENDED */ 148bf215546Sopenharmony_ci CF_EXP = (1<<4), /* export (CF_ALLOC_EXPORT_WORD1_SWIZ) */ 149bf215546Sopenharmony_ci CF_BRANCH = (1<<5), /* branch instructions */ 150bf215546Sopenharmony_ci CF_LOOP = (1<<6), /* loop instructions */ 151bf215546Sopenharmony_ci CF_CALL = (1<<7), /* call instructions */ 152bf215546Sopenharmony_ci CF_MEM = (1<<8), /* export_mem (CF_ALLOC_EXPORT_WORD1_BUF) */ 153bf215546Sopenharmony_ci CF_FETCH = (1<<9), /* fetch clause */ 154bf215546Sopenharmony_ci 155bf215546Sopenharmony_ci CF_UNCOND = (1<<10), /* COND = ACTIVE required */ 156bf215546Sopenharmony_ci CF_EMIT = (1<<11), 157bf215546Sopenharmony_ci CF_STRM = (1<<12), /* MEM_STREAM* */ 158bf215546Sopenharmony_ci 159bf215546Sopenharmony_ci CF_RAT = (1<<13), /* MEM_RAT* */ 160bf215546Sopenharmony_ci 161bf215546Sopenharmony_ci CF_LOOP_START = (1<<14) 162bf215546Sopenharmony_ci}; 163bf215546Sopenharmony_ci 164bf215546Sopenharmony_ci/* ALU instruction info */ 165bf215546Sopenharmony_cistruct alu_op_info 166bf215546Sopenharmony_ci{ 167bf215546Sopenharmony_ci /* instruction name */ 168bf215546Sopenharmony_ci const char *name; 169bf215546Sopenharmony_ci /* number of source operands */ 170bf215546Sopenharmony_ci int src_count; 171bf215546Sopenharmony_ci /* opcodes, [0] - for r6xx/r7xx, [1] - for evergreen/cayman 172bf215546Sopenharmony_ci * (-1) if instruction doesn't exist (more precise info in "slots") */ 173bf215546Sopenharmony_ci int opcode[2]; 174bf215546Sopenharmony_ci /* slots for r6xx, r7xx, evergreen, cayman 175bf215546Sopenharmony_ci * (0 if instruction doesn't exist for gfx level) */ 176bf215546Sopenharmony_ci int slots[4]; 177bf215546Sopenharmony_ci /* flags (mostly autogenerated from instruction name) */ 178bf215546Sopenharmony_ci unsigned int flags; 179bf215546Sopenharmony_ci}; 180bf215546Sopenharmony_ci 181bf215546Sopenharmony_ci/* FETCH instruction info */ 182bf215546Sopenharmony_cistruct fetch_op_info 183bf215546Sopenharmony_ci{ 184bf215546Sopenharmony_ci const char * name; 185bf215546Sopenharmony_ci /* for every gfx level */ 186bf215546Sopenharmony_ci int opcode[4]; 187bf215546Sopenharmony_ci int flags; 188bf215546Sopenharmony_ci}; 189bf215546Sopenharmony_ci 190bf215546Sopenharmony_ci/* CF instruction info */ 191bf215546Sopenharmony_cistruct cf_op_info 192bf215546Sopenharmony_ci{ 193bf215546Sopenharmony_ci const char * name; 194bf215546Sopenharmony_ci /* for every gfx level */ 195bf215546Sopenharmony_ci int opcode[4]; 196bf215546Sopenharmony_ci int flags; 197bf215546Sopenharmony_ci}; 198bf215546Sopenharmony_ci 199bf215546Sopenharmony_ci 200bf215546Sopenharmony_ci#define ALU_OP2_ADD 0 201bf215546Sopenharmony_ci#define ALU_OP2_MUL 1 202bf215546Sopenharmony_ci#define ALU_OP2_MUL_IEEE 2 203bf215546Sopenharmony_ci#define ALU_OP2_MAX 3 204bf215546Sopenharmony_ci#define ALU_OP2_MIN 4 205bf215546Sopenharmony_ci#define ALU_OP2_MAX_DX10 5 206bf215546Sopenharmony_ci#define ALU_OP2_MIN_DX10 6 207bf215546Sopenharmony_ci#define ALU_OP2_SETE 7 208bf215546Sopenharmony_ci#define ALU_OP2_SETGT 8 209bf215546Sopenharmony_ci#define ALU_OP2_SETGE 9 210bf215546Sopenharmony_ci#define ALU_OP2_SETNE 10 211bf215546Sopenharmony_ci#define ALU_OP2_SETE_DX10 11 212bf215546Sopenharmony_ci#define ALU_OP2_SETGT_DX10 12 213bf215546Sopenharmony_ci#define ALU_OP2_SETGE_DX10 13 214bf215546Sopenharmony_ci#define ALU_OP2_SETNE_DX10 14 215bf215546Sopenharmony_ci#define ALU_OP1_FRACT 15 216bf215546Sopenharmony_ci#define ALU_OP1_TRUNC 16 217bf215546Sopenharmony_ci#define ALU_OP1_CEIL 17 218bf215546Sopenharmony_ci#define ALU_OP1_RNDNE 18 219bf215546Sopenharmony_ci#define ALU_OP1_FLOOR 19 220bf215546Sopenharmony_ci#define ALU_OP2_ASHR_INT 20 221bf215546Sopenharmony_ci#define ALU_OP2_LSHR_INT 21 222bf215546Sopenharmony_ci#define ALU_OP2_LSHL_INT 22 223bf215546Sopenharmony_ci#define ALU_OP1_MOV 23 224bf215546Sopenharmony_ci#define ALU_OP0_NOP 24 225bf215546Sopenharmony_ci#define ALU_OP2_PRED_SETGT_UINT 25 226bf215546Sopenharmony_ci#define ALU_OP2_PRED_SETGE_UINT 26 227bf215546Sopenharmony_ci#define ALU_OP2_PRED_SETE 27 228bf215546Sopenharmony_ci#define ALU_OP2_PRED_SETGT 28 229bf215546Sopenharmony_ci#define ALU_OP2_PRED_SETGE 29 230bf215546Sopenharmony_ci#define ALU_OP2_PRED_SETNE 30 231bf215546Sopenharmony_ci#define ALU_OP1_PRED_SET_INV 31 232bf215546Sopenharmony_ci#define ALU_OP2_PRED_SET_POP 32 233bf215546Sopenharmony_ci#define ALU_OP0_PRED_SET_CLR 33 234bf215546Sopenharmony_ci#define ALU_OP1_PRED_SET_RESTORE 34 235bf215546Sopenharmony_ci#define ALU_OP2_PRED_SETE_PUSH 35 236bf215546Sopenharmony_ci#define ALU_OP2_PRED_SETGT_PUSH 36 237bf215546Sopenharmony_ci#define ALU_OP2_PRED_SETGE_PUSH 37 238bf215546Sopenharmony_ci#define ALU_OP2_PRED_SETNE_PUSH 38 239bf215546Sopenharmony_ci#define ALU_OP2_KILLE 39 240bf215546Sopenharmony_ci#define ALU_OP2_KILLGT 40 241bf215546Sopenharmony_ci#define ALU_OP2_KILLGE 41 242bf215546Sopenharmony_ci#define ALU_OP2_KILLNE 42 243bf215546Sopenharmony_ci#define ALU_OP2_AND_INT 43 244bf215546Sopenharmony_ci#define ALU_OP2_OR_INT 44 245bf215546Sopenharmony_ci#define ALU_OP2_XOR_INT 45 246bf215546Sopenharmony_ci#define ALU_OP1_NOT_INT 46 247bf215546Sopenharmony_ci#define ALU_OP2_ADD_INT 47 248bf215546Sopenharmony_ci#define ALU_OP2_SUB_INT 48 249bf215546Sopenharmony_ci#define ALU_OP2_MAX_INT 49 250bf215546Sopenharmony_ci#define ALU_OP2_MIN_INT 50 251bf215546Sopenharmony_ci#define ALU_OP2_MAX_UINT 51 252bf215546Sopenharmony_ci#define ALU_OP2_MIN_UINT 52 253bf215546Sopenharmony_ci#define ALU_OP2_SETE_INT 53 254bf215546Sopenharmony_ci#define ALU_OP2_SETGT_INT 54 255bf215546Sopenharmony_ci#define ALU_OP2_SETGE_INT 55 256bf215546Sopenharmony_ci#define ALU_OP2_SETNE_INT 56 257bf215546Sopenharmony_ci#define ALU_OP2_SETGT_UINT 57 258bf215546Sopenharmony_ci#define ALU_OP2_SETGE_UINT 58 259bf215546Sopenharmony_ci#define ALU_OP2_KILLGT_UINT 59 260bf215546Sopenharmony_ci#define ALU_OP2_KILLGE_UINT 60 261bf215546Sopenharmony_ci#define ALU_OP2_PRED_SETE_INT 61 262bf215546Sopenharmony_ci#define ALU_OP2_PRED_SETGT_INT 62 263bf215546Sopenharmony_ci#define ALU_OP2_PRED_SETGE_INT 63 264bf215546Sopenharmony_ci#define ALU_OP2_PRED_SETNE_INT 64 265bf215546Sopenharmony_ci#define ALU_OP2_KILLE_INT 65 266bf215546Sopenharmony_ci#define ALU_OP2_KILLGT_INT 66 267bf215546Sopenharmony_ci#define ALU_OP2_KILLGE_INT 67 268bf215546Sopenharmony_ci#define ALU_OP2_KILLNE_INT 68 269bf215546Sopenharmony_ci#define ALU_OP2_PRED_SETE_PUSH_INT 69 270bf215546Sopenharmony_ci#define ALU_OP2_PRED_SETGT_PUSH_INT 70 271bf215546Sopenharmony_ci#define ALU_OP2_PRED_SETGE_PUSH_INT 71 272bf215546Sopenharmony_ci#define ALU_OP2_PRED_SETNE_PUSH_INT 72 273bf215546Sopenharmony_ci#define ALU_OP2_PRED_SETLT_PUSH_INT 73 274bf215546Sopenharmony_ci#define ALU_OP2_PRED_SETLE_PUSH_INT 74 275bf215546Sopenharmony_ci#define ALU_OP1_FLT_TO_INT 75 276bf215546Sopenharmony_ci#define ALU_OP1_BFREV_INT 76 277bf215546Sopenharmony_ci#define ALU_OP2_ADDC_UINT 77 278bf215546Sopenharmony_ci#define ALU_OP2_SUBB_UINT 78 279bf215546Sopenharmony_ci#define ALU_OP0_GROUP_BARRIER 79 280bf215546Sopenharmony_ci#define ALU_OP0_GROUP_SEQ_BEGIN 80 281bf215546Sopenharmony_ci#define ALU_OP0_GROUP_SEQ_END 81 282bf215546Sopenharmony_ci#define ALU_OP2_SET_MODE 82 283bf215546Sopenharmony_ci#define ALU_OP0_SET_CF_IDX0 83 284bf215546Sopenharmony_ci#define ALU_OP0_SET_CF_IDX1 84 285bf215546Sopenharmony_ci#define ALU_OP2_SET_LDS_SIZE 85 286bf215546Sopenharmony_ci#define ALU_OP2_MUL_INT24 86 287bf215546Sopenharmony_ci#define ALU_OP2_MULHI_INT24 87 288bf215546Sopenharmony_ci#define ALU_OP1_FLT_TO_INT_TRUNC 88 289bf215546Sopenharmony_ci#define ALU_OP1_EXP_IEEE 89 290bf215546Sopenharmony_ci#define ALU_OP1_LOG_CLAMPED 90 291bf215546Sopenharmony_ci#define ALU_OP1_LOG_IEEE 91 292bf215546Sopenharmony_ci#define ALU_OP1_RECIP_CLAMPED 92 293bf215546Sopenharmony_ci#define ALU_OP1_RECIP_FF 93 294bf215546Sopenharmony_ci#define ALU_OP1_RECIP_IEEE 94 295bf215546Sopenharmony_ci#define ALU_OP1_RECIPSQRT_CLAMPED 95 296bf215546Sopenharmony_ci#define ALU_OP1_RECIPSQRT_FF 96 297bf215546Sopenharmony_ci#define ALU_OP1_RECIPSQRT_IEEE 97 298bf215546Sopenharmony_ci#define ALU_OP1_SQRT_IEEE 98 299bf215546Sopenharmony_ci#define ALU_OP1_SIN 99 300bf215546Sopenharmony_ci#define ALU_OP1_COS 100 301bf215546Sopenharmony_ci#define ALU_OP2_MULLO_INT 101 302bf215546Sopenharmony_ci#define ALU_OP2_MULHI_INT 102 303bf215546Sopenharmony_ci#define ALU_OP2_MULLO_UINT 103 304bf215546Sopenharmony_ci#define ALU_OP2_MULHI_UINT 104 305bf215546Sopenharmony_ci#define ALU_OP1_RECIP_INT 105 306bf215546Sopenharmony_ci#define ALU_OP1_RECIP_UINT 106 307bf215546Sopenharmony_ci#define ALU_OP2_RECIP_64 107 308bf215546Sopenharmony_ci#define ALU_OP2_RECIP_CLAMPED_64 108 309bf215546Sopenharmony_ci#define ALU_OP2_RECIPSQRT_64 109 310bf215546Sopenharmony_ci#define ALU_OP2_RECIPSQRT_CLAMPED_64 110 311bf215546Sopenharmony_ci#define ALU_OP2_SQRT_64 111 312bf215546Sopenharmony_ci#define ALU_OP1_FLT_TO_UINT 112 313bf215546Sopenharmony_ci#define ALU_OP1_INT_TO_FLT 113 314bf215546Sopenharmony_ci#define ALU_OP1_UINT_TO_FLT 114 315bf215546Sopenharmony_ci#define ALU_OP2_BFM_INT 115 316bf215546Sopenharmony_ci#define ALU_OP1_FLT32_TO_FLT16 116 317bf215546Sopenharmony_ci#define ALU_OP1_FLT16_TO_FLT32 117 318bf215546Sopenharmony_ci#define ALU_OP1_UBYTE0_FLT 118 319bf215546Sopenharmony_ci#define ALU_OP1_UBYTE1_FLT 119 320bf215546Sopenharmony_ci#define ALU_OP1_UBYTE2_FLT 120 321bf215546Sopenharmony_ci#define ALU_OP1_UBYTE3_FLT 121 322bf215546Sopenharmony_ci#define ALU_OP1_BCNT_INT 122 323bf215546Sopenharmony_ci#define ALU_OP1_FFBH_UINT 123 324bf215546Sopenharmony_ci#define ALU_OP1_FFBL_INT 124 325bf215546Sopenharmony_ci#define ALU_OP1_FFBH_INT 125 326bf215546Sopenharmony_ci#define ALU_OP1_FLT_TO_UINT4 126 327bf215546Sopenharmony_ci#define ALU_OP2_DOT_IEEE 127 328bf215546Sopenharmony_ci#define ALU_OP1_FLT_TO_INT_RPI 128 329bf215546Sopenharmony_ci#define ALU_OP1_FLT_TO_INT_FLOOR 129 330bf215546Sopenharmony_ci#define ALU_OP2_MULHI_UINT24 130 331bf215546Sopenharmony_ci#define ALU_OP1_MBCNT_32HI_INT 131 332bf215546Sopenharmony_ci#define ALU_OP1_OFFSET_TO_FLT 132 333bf215546Sopenharmony_ci#define ALU_OP2_MUL_UINT24 133 334bf215546Sopenharmony_ci#define ALU_OP1_BCNT_ACCUM_PREV_INT 134 335bf215546Sopenharmony_ci#define ALU_OP1_MBCNT_32LO_ACCUM_PREV_INT 135 336bf215546Sopenharmony_ci#define ALU_OP2_SETE_64 136 337bf215546Sopenharmony_ci#define ALU_OP2_SETNE_64 137 338bf215546Sopenharmony_ci#define ALU_OP2_SETGT_64 138 339bf215546Sopenharmony_ci#define ALU_OP2_SETGE_64 139 340bf215546Sopenharmony_ci#define ALU_OP2_MIN_64 140 341bf215546Sopenharmony_ci#define ALU_OP2_MAX_64 141 342bf215546Sopenharmony_ci#define ALU_OP2_DOT4 142 343bf215546Sopenharmony_ci#define ALU_OP2_DOT4_IEEE 143 344bf215546Sopenharmony_ci#define ALU_OP2_CUBE 144 345bf215546Sopenharmony_ci#define ALU_OP1_MAX4 145 346bf215546Sopenharmony_ci#define ALU_OP1_FREXP_64 146 347bf215546Sopenharmony_ci#define ALU_OP2_LDEXP_64 147 348bf215546Sopenharmony_ci#define ALU_OP1_FRACT_64 148 349bf215546Sopenharmony_ci#define ALU_OP2_PRED_SETGT_64 149 350bf215546Sopenharmony_ci#define ALU_OP2_PRED_SETE_64 150 351bf215546Sopenharmony_ci#define ALU_OP2_PRED_SETGE_64 151 352bf215546Sopenharmony_ci#define ALU_OP2_MUL_64 152 353bf215546Sopenharmony_ci#define ALU_OP2_ADD_64 153 354bf215546Sopenharmony_ci#define ALU_OP1_MOVA_INT 154 355bf215546Sopenharmony_ci#define ALU_OP1_FLT64_TO_FLT32 155 356bf215546Sopenharmony_ci#define ALU_OP1_FLT32_TO_FLT64 156 357bf215546Sopenharmony_ci#define ALU_OP2_SAD_ACCUM_PREV_UINT 157 358bf215546Sopenharmony_ci#define ALU_OP2_DOT 158 359bf215546Sopenharmony_ci#define ALU_OP1_MUL_PREV 159 360bf215546Sopenharmony_ci#define ALU_OP1_MUL_IEEE_PREV 160 361bf215546Sopenharmony_ci#define ALU_OP1_ADD_PREV 161 362bf215546Sopenharmony_ci#define ALU_OP2_MULADD_PREV 162 363bf215546Sopenharmony_ci#define ALU_OP2_MULADD_IEEE_PREV 163 364bf215546Sopenharmony_ci#define ALU_OP2_INTERP_XY 164 365bf215546Sopenharmony_ci#define ALU_OP2_INTERP_ZW 165 366bf215546Sopenharmony_ci#define ALU_OP2_INTERP_X 166 367bf215546Sopenharmony_ci#define ALU_OP2_INTERP_Z 167 368bf215546Sopenharmony_ci#define ALU_OP1_STORE_FLAGS 168 369bf215546Sopenharmony_ci#define ALU_OP1_LOAD_STORE_FLAGS 169 370bf215546Sopenharmony_ci#define ALU_OP2_LDS_1A 170 371bf215546Sopenharmony_ci#define ALU_OP2_LDS_1A1D 171 372bf215546Sopenharmony_ci#define ALU_OP2_LDS_2A 172 373bf215546Sopenharmony_ci#define ALU_OP1_INTERP_LOAD_P0 173 374bf215546Sopenharmony_ci#define ALU_OP1_INTERP_LOAD_P10 174 375bf215546Sopenharmony_ci#define ALU_OP1_INTERP_LOAD_P20 175 376bf215546Sopenharmony_ci#define ALU_OP3_BFE_UINT 176 377bf215546Sopenharmony_ci#define ALU_OP3_BFE_INT 177 378bf215546Sopenharmony_ci#define ALU_OP3_BFI_INT 178 379bf215546Sopenharmony_ci#define ALU_OP3_FMA 179 380bf215546Sopenharmony_ci#define ALU_OP3_MULADD_INT24 180 381bf215546Sopenharmony_ci#define ALU_OP3_CNDNE_64 181 382bf215546Sopenharmony_ci#define ALU_OP3_FMA_64 182 383bf215546Sopenharmony_ci#define ALU_OP3_LERP_UINT 183 384bf215546Sopenharmony_ci#define ALU_OP3_BIT_ALIGN_INT 184 385bf215546Sopenharmony_ci#define ALU_OP3_BYTE_ALIGN_INT 185 386bf215546Sopenharmony_ci#define ALU_OP3_SAD_ACCUM_UINT 186 387bf215546Sopenharmony_ci#define ALU_OP3_SAD_ACCUM_HI_UINT 187 388bf215546Sopenharmony_ci#define ALU_OP3_MULADD_UINT24 188 389bf215546Sopenharmony_ci#define ALU_OP3_LDS_IDX_OP 189 390bf215546Sopenharmony_ci#define ALU_OP3_MULADD 190 391bf215546Sopenharmony_ci#define ALU_OP3_MULADD_M2 191 392bf215546Sopenharmony_ci#define ALU_OP3_MULADD_M4 192 393bf215546Sopenharmony_ci#define ALU_OP3_MULADD_D2 193 394bf215546Sopenharmony_ci#define ALU_OP3_MULADD_IEEE 194 395bf215546Sopenharmony_ci#define ALU_OP3_CNDE 195 396bf215546Sopenharmony_ci#define ALU_OP3_CNDGT 196 397bf215546Sopenharmony_ci#define ALU_OP3_CNDGE 197 398bf215546Sopenharmony_ci#define ALU_OP3_CNDE_INT 198 399bf215546Sopenharmony_ci#define ALU_OP3_CNDGT_INT 199 400bf215546Sopenharmony_ci#define ALU_OP3_CNDGE_INT 200 401bf215546Sopenharmony_ci#define ALU_OP3_MUL_LIT 201 402bf215546Sopenharmony_ci#define ALU_OP1_MOVA 202 403bf215546Sopenharmony_ci#define ALU_OP1_MOVA_FLOOR 203 404bf215546Sopenharmony_ci#define ALU_OP1_MOVA_GPR_INT 204 405bf215546Sopenharmony_ci#define ALU_OP3_MULADD_64 205 406bf215546Sopenharmony_ci#define ALU_OP3_MULADD_64_M2 206 407bf215546Sopenharmony_ci#define ALU_OP3_MULADD_64_M4 207 408bf215546Sopenharmony_ci#define ALU_OP3_MULADD_64_D2 208 409bf215546Sopenharmony_ci#define ALU_OP3_MUL_LIT_M2 209 410bf215546Sopenharmony_ci#define ALU_OP3_MUL_LIT_M4 210 411bf215546Sopenharmony_ci#define ALU_OP3_MUL_LIT_D2 211 412bf215546Sopenharmony_ci#define ALU_OP3_MULADD_IEEE_M2 212 413bf215546Sopenharmony_ci#define ALU_OP3_MULADD_IEEE_M4 213 414bf215546Sopenharmony_ci#define ALU_OP3_MULADD_IEEE_D2 214 415bf215546Sopenharmony_ci 416bf215546Sopenharmony_ci#define LDS_OP2_LDS_ADD 215 417bf215546Sopenharmony_ci#define LDS_OP2_LDS_SUB 216 418bf215546Sopenharmony_ci#define LDS_OP2_LDS_RSUB 217 419bf215546Sopenharmony_ci#define LDS_OP2_LDS_INC 218 420bf215546Sopenharmony_ci#define LDS_OP2_LDS_DEC 219 421bf215546Sopenharmony_ci#define LDS_OP2_LDS_MIN_INT 220 422bf215546Sopenharmony_ci#define LDS_OP2_LDS_MAX_INT 221 423bf215546Sopenharmony_ci#define LDS_OP2_LDS_MIN_UINT 222 424bf215546Sopenharmony_ci#define LDS_OP2_LDS_MAX_UINT 223 425bf215546Sopenharmony_ci#define LDS_OP2_LDS_AND 224 426bf215546Sopenharmony_ci#define LDS_OP2_LDS_OR 225 427bf215546Sopenharmony_ci#define LDS_OP2_LDS_XOR 226 428bf215546Sopenharmony_ci#define LDS_OP3_LDS_MSKOR 227 429bf215546Sopenharmony_ci#define LDS_OP2_LDS_WRITE 228 430bf215546Sopenharmony_ci#define LDS_OP3_LDS_WRITE_REL 229 431bf215546Sopenharmony_ci#define LDS_OP3_LDS_WRITE2 230 432bf215546Sopenharmony_ci#define LDS_OP3_LDS_CMP_STORE 231 433bf215546Sopenharmony_ci#define LDS_OP3_LDS_CMP_STORE_SPF 232 434bf215546Sopenharmony_ci#define LDS_OP2_LDS_BYTE_WRITE 233 435bf215546Sopenharmony_ci#define LDS_OP2_LDS_SHORT_WRITE 234 436bf215546Sopenharmony_ci#define LDS_OP2_LDS_ADD_RET 235 437bf215546Sopenharmony_ci#define LDS_OP2_LDS_SUB_RET 236 438bf215546Sopenharmony_ci#define LDS_OP2_LDS_RSUB_RET 237 439bf215546Sopenharmony_ci#define LDS_OP2_LDS_INC_RET 238 440bf215546Sopenharmony_ci#define LDS_OP2_LDS_DEC_RET 239 441bf215546Sopenharmony_ci#define LDS_OP2_LDS_MIN_INT_RET 240 442bf215546Sopenharmony_ci#define LDS_OP2_LDS_MAX_INT_RET 241 443bf215546Sopenharmony_ci#define LDS_OP2_LDS_MIN_UINT_RET 242 444bf215546Sopenharmony_ci#define LDS_OP2_LDS_MAX_UINT_RET 243 445bf215546Sopenharmony_ci#define LDS_OP2_LDS_AND_RET 244 446bf215546Sopenharmony_ci#define LDS_OP2_LDS_OR_RET 245 447bf215546Sopenharmony_ci#define LDS_OP2_LDS_XOR_RET 246 448bf215546Sopenharmony_ci#define LDS_OP3_LDS_MSKOR_RET 247 449bf215546Sopenharmony_ci#define LDS_OP2_LDS_XCHG_RET 248 450bf215546Sopenharmony_ci#define LDS_OP3_LDS_XCHG_REL_RET 249 451bf215546Sopenharmony_ci#define LDS_OP3_LDS_XCHG2_RET 250 452bf215546Sopenharmony_ci#define LDS_OP3_LDS_CMP_XCHG_RET 251 453bf215546Sopenharmony_ci#define LDS_OP3_LDS_CMP_XCHG_SPF_RET 252 454bf215546Sopenharmony_ci#define LDS_OP1_LDS_READ_RET 253 455bf215546Sopenharmony_ci#define LDS_OP1_LDS_READ_REL_RET 254 456bf215546Sopenharmony_ci#define LDS_OP2_LDS_READ2_RET 255 457bf215546Sopenharmony_ci#define LDS_OP3_LDS_READWRITE_RET 256 458bf215546Sopenharmony_ci#define LDS_OP1_LDS_BYTE_READ_RET 257 459bf215546Sopenharmony_ci#define LDS_OP1_LDS_UBYTE_READ_RET 258 460bf215546Sopenharmony_ci#define LDS_OP1_LDS_SHORT_READ_RET 259 461bf215546Sopenharmony_ci#define LDS_OP1_LDS_USHORT_READ_RET 260 462bf215546Sopenharmony_ci 463bf215546Sopenharmony_ci#define FETCH_OP_VFETCH 0 464bf215546Sopenharmony_ci#define FETCH_OP_SEMFETCH 1 465bf215546Sopenharmony_ci#define FETCH_OP_READ_SCRATCH 2 466bf215546Sopenharmony_ci#define FETCH_OP_READ_REDUCT 3 467bf215546Sopenharmony_ci#define FETCH_OP_READ_MEM 4 468bf215546Sopenharmony_ci#define FETCH_OP_DS_LOCAL_WRITE 5 469bf215546Sopenharmony_ci#define FETCH_OP_DS_LOCAL_READ 6 470bf215546Sopenharmony_ci#define FETCH_OP_GDS_ADD 7 471bf215546Sopenharmony_ci#define FETCH_OP_GDS_SUB 8 472bf215546Sopenharmony_ci#define FETCH_OP_GDS_RSUB 9 473bf215546Sopenharmony_ci#define FETCH_OP_GDS_INC 10 474bf215546Sopenharmony_ci#define FETCH_OP_GDS_DEC 11 475bf215546Sopenharmony_ci#define FETCH_OP_GDS_MIN_INT 12 476bf215546Sopenharmony_ci#define FETCH_OP_GDS_MAX_INT 13 477bf215546Sopenharmony_ci#define FETCH_OP_GDS_MIN_UINT 14 478bf215546Sopenharmony_ci#define FETCH_OP_GDS_MAX_UINT 15 479bf215546Sopenharmony_ci#define FETCH_OP_GDS_AND 16 480bf215546Sopenharmony_ci#define FETCH_OP_GDS_OR 17 481bf215546Sopenharmony_ci#define FETCH_OP_GDS_XOR 18 482bf215546Sopenharmony_ci#define FETCH_OP_GDS_MSKOR 19 483bf215546Sopenharmony_ci#define FETCH_OP_GDS_WRITE 20 484bf215546Sopenharmony_ci#define FETCH_OP_GDS_WRITE_REL 21 485bf215546Sopenharmony_ci#define FETCH_OP_GDS_WRITE2 22 486bf215546Sopenharmony_ci#define FETCH_OP_GDS_CMP_STORE 23 487bf215546Sopenharmony_ci#define FETCH_OP_GDS_CMP_STORE_SPF 24 488bf215546Sopenharmony_ci#define FETCH_OP_GDS_BYTE_WRITE 25 489bf215546Sopenharmony_ci#define FETCH_OP_GDS_SHORT_WRITE 26 490bf215546Sopenharmony_ci#define FETCH_OP_GDS_ADD_RET 27 491bf215546Sopenharmony_ci#define FETCH_OP_GDS_SUB_RET 28 492bf215546Sopenharmony_ci#define FETCH_OP_GDS_RSUB_RET 29 493bf215546Sopenharmony_ci#define FETCH_OP_GDS_INC_RET 30 494bf215546Sopenharmony_ci#define FETCH_OP_GDS_DEC_RET 31 495bf215546Sopenharmony_ci#define FETCH_OP_GDS_MIN_INT_RET 32 496bf215546Sopenharmony_ci#define FETCH_OP_GDS_MAX_INT_RET 33 497bf215546Sopenharmony_ci#define FETCH_OP_GDS_MIN_UINT_RET 34 498bf215546Sopenharmony_ci#define FETCH_OP_GDS_MAX_UINT_RET 35 499bf215546Sopenharmony_ci#define FETCH_OP_GDS_AND_RET 36 500bf215546Sopenharmony_ci#define FETCH_OP_GDS_OR_RET 37 501bf215546Sopenharmony_ci#define FETCH_OP_GDS_XOR_RET 38 502bf215546Sopenharmony_ci#define FETCH_OP_GDS_MSKOR_RET 39 503bf215546Sopenharmony_ci#define FETCH_OP_GDS_XCHG_RET 40 504bf215546Sopenharmony_ci#define FETCH_OP_GDS_XCHG_REL_RET 41 505bf215546Sopenharmony_ci#define FETCH_OP_GDS_XCHG2_RET 42 506bf215546Sopenharmony_ci#define FETCH_OP_GDS_CMP_XCHG_RET 43 507bf215546Sopenharmony_ci#define FETCH_OP_GDS_CMP_XCHG_SPF_RET 44 508bf215546Sopenharmony_ci#define FETCH_OP_GDS_READ_RET 45 509bf215546Sopenharmony_ci#define FETCH_OP_GDS_READ_REL_RET 46 510bf215546Sopenharmony_ci#define FETCH_OP_GDS_READ2_RET 47 511bf215546Sopenharmony_ci#define FETCH_OP_GDS_READWRITE_RET 48 512bf215546Sopenharmony_ci#define FETCH_OP_GDS_BYTE_READ_RET 49 513bf215546Sopenharmony_ci#define FETCH_OP_GDS_UBYTE_READ_RET 50 514bf215546Sopenharmony_ci#define FETCH_OP_GDS_SHORT_READ_RET 51 515bf215546Sopenharmony_ci#define FETCH_OP_GDS_USHORT_READ_RET 52 516bf215546Sopenharmony_ci#define FETCH_OP_GDS_ATOMIC_ORDERED_ALLOC 53 517bf215546Sopenharmony_ci#define FETCH_OP_TF_WRITE 54 518bf215546Sopenharmony_ci#define FETCH_OP_DS_GLOBAL_WRITE 55 519bf215546Sopenharmony_ci#define FETCH_OP_DS_GLOBAL_READ 56 520bf215546Sopenharmony_ci#define FETCH_OP_LD 57 521bf215546Sopenharmony_ci#define FETCH_OP_LDFPTR 58 522bf215546Sopenharmony_ci#define FETCH_OP_GET_TEXTURE_RESINFO 59 523bf215546Sopenharmony_ci#define FETCH_OP_GET_NUMBER_OF_SAMPLES 60 524bf215546Sopenharmony_ci#define FETCH_OP_GET_LOD 61 525bf215546Sopenharmony_ci#define FETCH_OP_GET_GRADIENTS_H 62 526bf215546Sopenharmony_ci#define FETCH_OP_GET_GRADIENTS_V 63 527bf215546Sopenharmony_ci#define FETCH_OP_GET_GRADIENTS_H_FINE 64 528bf215546Sopenharmony_ci#define FETCH_OP_GET_GRADIENTS_V_FINE 65 529bf215546Sopenharmony_ci#define FETCH_OP_GET_LERP 66 530bf215546Sopenharmony_ci#define FETCH_OP_SET_TEXTURE_OFFSETS 67 531bf215546Sopenharmony_ci#define FETCH_OP_KEEP_GRADIENTS 68 532bf215546Sopenharmony_ci#define FETCH_OP_SET_GRADIENTS_H 69 533bf215546Sopenharmony_ci#define FETCH_OP_SET_GRADIENTS_V 70 534bf215546Sopenharmony_ci#define FETCH_OP_SET_GRADIENTS_H_COARSE 71 535bf215546Sopenharmony_ci#define FETCH_OP_SET_GRADIENTS_V_COARSE 72 536bf215546Sopenharmony_ci#define FETCH_OP_SET_GRADIENTS_H_PACKED_FINE 73 537bf215546Sopenharmony_ci#define FETCH_OP_SET_GRADIENTS_V_PACKED_FINE 74 538bf215546Sopenharmony_ci#define FETCH_OP_SET_GRADIENTS_H_PACKED_COARSE 75 539bf215546Sopenharmony_ci#define FETCH_OP_SET_GRADIENTS_V_PACKED_COARSE 76 540bf215546Sopenharmony_ci#define FETCH_OP_PASS 77 541bf215546Sopenharmony_ci#define FETCH_OP_PASS1 78 542bf215546Sopenharmony_ci#define FETCH_OP_PASS2 79 543bf215546Sopenharmony_ci#define FETCH_OP_PASS3 80 544bf215546Sopenharmony_ci#define FETCH_OP_SET_CUBEMAP_INDEX 81 545bf215546Sopenharmony_ci#define FETCH_OP_GET_BUFFER_RESINFO 82 546bf215546Sopenharmony_ci#define FETCH_OP_FETCH4 83 547bf215546Sopenharmony_ci#define FETCH_OP_SAMPLE 84 548bf215546Sopenharmony_ci#define FETCH_OP_SAMPLE_L 85 549bf215546Sopenharmony_ci#define FETCH_OP_SAMPLE_LB 86 550bf215546Sopenharmony_ci#define FETCH_OP_SAMPLE_LZ 87 551bf215546Sopenharmony_ci#define FETCH_OP_SAMPLE_G 88 552bf215546Sopenharmony_ci#define FETCH_OP_SAMPLE_G_L 89 553bf215546Sopenharmony_ci#define FETCH_OP_GATHER4 90 554bf215546Sopenharmony_ci#define FETCH_OP_SAMPLE_G_LB 91 555bf215546Sopenharmony_ci#define FETCH_OP_SAMPLE_G_LZ 92 556bf215546Sopenharmony_ci#define FETCH_OP_GATHER4_O 93 557bf215546Sopenharmony_ci#define FETCH_OP_SAMPLE_C 94 558bf215546Sopenharmony_ci#define FETCH_OP_SAMPLE_C_L 95 559bf215546Sopenharmony_ci#define FETCH_OP_SAMPLE_C_LB 96 560bf215546Sopenharmony_ci#define FETCH_OP_SAMPLE_C_LZ 97 561bf215546Sopenharmony_ci#define FETCH_OP_SAMPLE_C_G 98 562bf215546Sopenharmony_ci#define FETCH_OP_SAMPLE_C_G_L 99 563bf215546Sopenharmony_ci#define FETCH_OP_GATHER4_C 100 564bf215546Sopenharmony_ci#define FETCH_OP_SAMPLE_C_G_LB 101 565bf215546Sopenharmony_ci#define FETCH_OP_SAMPLE_C_G_LZ 102 566bf215546Sopenharmony_ci#define FETCH_OP_GATHER4_C_O 103 567bf215546Sopenharmony_ci 568bf215546Sopenharmony_ci#define CF_OP_NOP 0 569bf215546Sopenharmony_ci#define CF_OP_TEX 1 570bf215546Sopenharmony_ci#define CF_OP_VTX 2 571bf215546Sopenharmony_ci#define CF_OP_VTX_TC 3 572bf215546Sopenharmony_ci#define CF_OP_GDS 4 573bf215546Sopenharmony_ci#define CF_OP_LOOP_START 5 574bf215546Sopenharmony_ci#define CF_OP_LOOP_END 6 575bf215546Sopenharmony_ci#define CF_OP_LOOP_START_DX10 7 576bf215546Sopenharmony_ci#define CF_OP_LOOP_START_NO_AL 8 577bf215546Sopenharmony_ci#define CF_OP_LOOP_CONTINUE 9 578bf215546Sopenharmony_ci#define CF_OP_LOOP_BREAK 10 579bf215546Sopenharmony_ci#define CF_OP_JUMP 11 580bf215546Sopenharmony_ci#define CF_OP_PUSH 12 581bf215546Sopenharmony_ci#define CF_OP_PUSH_ELSE 13 582bf215546Sopenharmony_ci#define CF_OP_ELSE 14 583bf215546Sopenharmony_ci#define CF_OP_POP 15 584bf215546Sopenharmony_ci#define CF_OP_POP_JUMP 16 585bf215546Sopenharmony_ci#define CF_OP_POP_PUSH 17 586bf215546Sopenharmony_ci#define CF_OP_POP_PUSH_ELSE 18 587bf215546Sopenharmony_ci#define CF_OP_CALL 19 588bf215546Sopenharmony_ci#define CF_OP_CALL_FS 20 589bf215546Sopenharmony_ci#define CF_OP_RET 21 590bf215546Sopenharmony_ci#define CF_OP_EMIT_VERTEX 22 591bf215546Sopenharmony_ci#define CF_OP_EMIT_CUT_VERTEX 23 592bf215546Sopenharmony_ci#define CF_OP_CUT_VERTEX 24 593bf215546Sopenharmony_ci#define CF_OP_KILL 25 594bf215546Sopenharmony_ci#define CF_OP_END_PROGRAM 26 595bf215546Sopenharmony_ci#define CF_OP_WAIT_ACK 27 596bf215546Sopenharmony_ci#define CF_OP_TEX_ACK 28 597bf215546Sopenharmony_ci#define CF_OP_VTX_ACK 29 598bf215546Sopenharmony_ci#define CF_OP_VTX_TC_ACK 30 599bf215546Sopenharmony_ci#define CF_OP_JUMPTABLE 31 600bf215546Sopenharmony_ci#define CF_OP_WAVE_SYNC 32 601bf215546Sopenharmony_ci#define CF_OP_HALT 33 602bf215546Sopenharmony_ci#define CF_OP_CF_END 34 603bf215546Sopenharmony_ci#define CF_OP_LDS_DEALLOC 35 604bf215546Sopenharmony_ci#define CF_OP_PUSH_WQM 36 605bf215546Sopenharmony_ci#define CF_OP_POP_WQM 37 606bf215546Sopenharmony_ci#define CF_OP_ELSE_WQM 38 607bf215546Sopenharmony_ci#define CF_OP_JUMP_ANY 39 608bf215546Sopenharmony_ci#define CF_OP_REACTIVATE 40 609bf215546Sopenharmony_ci#define CF_OP_REACTIVATE_WQM 41 610bf215546Sopenharmony_ci#define CF_OP_INTERRUPT 42 611bf215546Sopenharmony_ci#define CF_OP_INTERRUPT_AND_SLEEP 43 612bf215546Sopenharmony_ci#define CF_OP_SET_PRIORITY 44 613bf215546Sopenharmony_ci#define CF_OP_MEM_STREAM0_BUF0 45 614bf215546Sopenharmony_ci#define CF_OP_MEM_STREAM0_BUF1 46 615bf215546Sopenharmony_ci#define CF_OP_MEM_STREAM0_BUF2 47 616bf215546Sopenharmony_ci#define CF_OP_MEM_STREAM0_BUF3 48 617bf215546Sopenharmony_ci#define CF_OP_MEM_STREAM1_BUF0 49 618bf215546Sopenharmony_ci#define CF_OP_MEM_STREAM1_BUF1 50 619bf215546Sopenharmony_ci#define CF_OP_MEM_STREAM1_BUF2 51 620bf215546Sopenharmony_ci#define CF_OP_MEM_STREAM1_BUF3 52 621bf215546Sopenharmony_ci#define CF_OP_MEM_STREAM2_BUF0 53 622bf215546Sopenharmony_ci#define CF_OP_MEM_STREAM2_BUF1 54 623bf215546Sopenharmony_ci#define CF_OP_MEM_STREAM2_BUF2 55 624bf215546Sopenharmony_ci#define CF_OP_MEM_STREAM2_BUF3 56 625bf215546Sopenharmony_ci#define CF_OP_MEM_STREAM3_BUF0 57 626bf215546Sopenharmony_ci#define CF_OP_MEM_STREAM3_BUF1 58 627bf215546Sopenharmony_ci#define CF_OP_MEM_STREAM3_BUF2 59 628bf215546Sopenharmony_ci#define CF_OP_MEM_STREAM3_BUF3 60 629bf215546Sopenharmony_ci#define CF_OP_MEM_STREAM0 61 630bf215546Sopenharmony_ci#define CF_OP_MEM_STREAM1 62 631bf215546Sopenharmony_ci#define CF_OP_MEM_STREAM2 63 632bf215546Sopenharmony_ci#define CF_OP_MEM_STREAM3 64 633bf215546Sopenharmony_ci#define CF_OP_MEM_SCRATCH 65 634bf215546Sopenharmony_ci#define CF_OP_MEM_REDUCT 66 635bf215546Sopenharmony_ci#define CF_OP_MEM_RING 67 636bf215546Sopenharmony_ci#define CF_OP_EXPORT 68 637bf215546Sopenharmony_ci#define CF_OP_EXPORT_DONE 69 638bf215546Sopenharmony_ci#define CF_OP_MEM_EXPORT 70 639bf215546Sopenharmony_ci#define CF_OP_MEM_RAT 71 640bf215546Sopenharmony_ci#define CF_OP_MEM_RAT_NOCACHE 72 641bf215546Sopenharmony_ci#define CF_OP_MEM_RING1 73 642bf215546Sopenharmony_ci#define CF_OP_MEM_RING2 74 643bf215546Sopenharmony_ci#define CF_OP_MEM_RING3 75 644bf215546Sopenharmony_ci#define CF_OP_MEM_MEM_COMBINED 76 645bf215546Sopenharmony_ci#define CF_OP_MEM_RAT_COMBINED_NOCACHE 77 646bf215546Sopenharmony_ci#define CF_OP_MEM_RAT_COMBINED 78 647bf215546Sopenharmony_ci#define CF_OP_EXPORT_DONE_END 79 648bf215546Sopenharmony_ci#define CF_OP_ALU 80 649bf215546Sopenharmony_ci#define CF_OP_ALU_PUSH_BEFORE 81 650bf215546Sopenharmony_ci#define CF_OP_ALU_POP_AFTER 82 651bf215546Sopenharmony_ci#define CF_OP_ALU_POP2_AFTER 83 652bf215546Sopenharmony_ci#define CF_OP_ALU_EXT 84 653bf215546Sopenharmony_ci#define CF_OP_ALU_CONTINUE 85 654bf215546Sopenharmony_ci#define CF_OP_ALU_BREAK 86 655bf215546Sopenharmony_ci#define CF_OP_ALU_VALID_PIXEL_MODE 87 656bf215546Sopenharmony_ci#define CF_OP_ALU_ELSE_AFTER 88 657bf215546Sopenharmony_ci 658bf215546Sopenharmony_ci/* CF_NATIVE means that r600_bytecode_cf contains pre-encoded native data */ 659bf215546Sopenharmony_ci#define CF_NATIVE 89 660bf215546Sopenharmony_ci 661bf215546Sopenharmony_cienum r600_chip_class { 662bf215546Sopenharmony_ci ISA_CC_R600, 663bf215546Sopenharmony_ci ISA_CC_R700, 664bf215546Sopenharmony_ci ISA_CC_EVERGREEN, 665bf215546Sopenharmony_ci ISA_CC_CAYMAN 666bf215546Sopenharmony_ci}; 667bf215546Sopenharmony_ci 668bf215546Sopenharmony_cistruct r600_isa { 669bf215546Sopenharmony_ci enum r600_chip_class hw_class; 670bf215546Sopenharmony_ci 671bf215546Sopenharmony_ci /* these arrays provide reverse mapping - opcode => table_index, 672bf215546Sopenharmony_ci * typically we don't need such lookup, unless we are decoding the native 673bf215546Sopenharmony_ci * bytecode (e.g. when reading the bytestream from llvm backend) */ 674bf215546Sopenharmony_ci unsigned *alu_op2_map; 675bf215546Sopenharmony_ci unsigned *alu_op3_map; 676bf215546Sopenharmony_ci unsigned *fetch_map; 677bf215546Sopenharmony_ci unsigned *cf_map; 678bf215546Sopenharmony_ci}; 679bf215546Sopenharmony_ci 680bf215546Sopenharmony_cistruct r600_context; 681bf215546Sopenharmony_ci 682bf215546Sopenharmony_ciint r600_isa_init(struct r600_context *ctx, struct r600_isa *isa); 683bf215546Sopenharmony_ciint r600_isa_destroy(struct r600_isa *isa); 684bf215546Sopenharmony_ci 685bf215546Sopenharmony_ciextern const struct alu_op_info r600_alu_op_table[]; 686bf215546Sopenharmony_ci 687bf215546Sopenharmony_ciunsigned 688bf215546Sopenharmony_cir600_alu_op_table_size(void); 689bf215546Sopenharmony_ci 690bf215546Sopenharmony_ciconst struct alu_op_info * 691bf215546Sopenharmony_cir600_isa_alu(unsigned op); 692bf215546Sopenharmony_ci 693bf215546Sopenharmony_ciconst struct fetch_op_info * 694bf215546Sopenharmony_cir600_isa_fetch(unsigned op); 695bf215546Sopenharmony_ci 696bf215546Sopenharmony_ciconst struct cf_op_info * 697bf215546Sopenharmony_cir600_isa_cf(unsigned op); 698bf215546Sopenharmony_ci 699bf215546Sopenharmony_cistatic inline unsigned 700bf215546Sopenharmony_cir600_isa_alu_opcode(enum r600_chip_class gfx_level, unsigned op) { 701bf215546Sopenharmony_ci int opc = r600_isa_alu(op)->opcode[gfx_level >> 1]; 702bf215546Sopenharmony_ci assert(opc != -1); 703bf215546Sopenharmony_ci return opc; 704bf215546Sopenharmony_ci} 705bf215546Sopenharmony_ci 706bf215546Sopenharmony_cistatic inline unsigned 707bf215546Sopenharmony_cir600_isa_alu_slots(enum r600_chip_class gfx_level, unsigned op) { 708bf215546Sopenharmony_ci unsigned slots = r600_isa_alu(op)->slots[gfx_level]; 709bf215546Sopenharmony_ci assert(slots != 0); 710bf215546Sopenharmony_ci return slots; 711bf215546Sopenharmony_ci} 712bf215546Sopenharmony_ci 713bf215546Sopenharmony_cistatic inline unsigned 714bf215546Sopenharmony_cir600_isa_fetch_opcode(enum r600_chip_class gfx_level, unsigned op) { 715bf215546Sopenharmony_ci int opc = r600_isa_fetch(op)->opcode[gfx_level]; 716bf215546Sopenharmony_ci assert(opc != -1); 717bf215546Sopenharmony_ci return opc; 718bf215546Sopenharmony_ci} 719bf215546Sopenharmony_ci 720bf215546Sopenharmony_cistatic inline unsigned 721bf215546Sopenharmony_cir600_isa_cf_opcode(enum r600_chip_class gfx_level, unsigned op) { 722bf215546Sopenharmony_ci int opc = r600_isa_cf(op)->opcode[gfx_level]; 723bf215546Sopenharmony_ci assert(opc != -1); 724bf215546Sopenharmony_ci return opc; 725bf215546Sopenharmony_ci} 726bf215546Sopenharmony_ci 727bf215546Sopenharmony_cistatic inline unsigned 728bf215546Sopenharmony_cir600_isa_alu_by_opcode(struct r600_isa* isa, unsigned opcode, unsigned is_op3) { 729bf215546Sopenharmony_ci unsigned op; 730bf215546Sopenharmony_ci if (is_op3) { 731bf215546Sopenharmony_ci assert(isa->alu_op3_map); 732bf215546Sopenharmony_ci op = isa->alu_op3_map[opcode]; 733bf215546Sopenharmony_ci } else { 734bf215546Sopenharmony_ci assert(isa->alu_op2_map); 735bf215546Sopenharmony_ci op = isa->alu_op2_map[opcode]; 736bf215546Sopenharmony_ci } 737bf215546Sopenharmony_ci assert(op); 738bf215546Sopenharmony_ci return op - 1; 739bf215546Sopenharmony_ci} 740bf215546Sopenharmony_ci 741bf215546Sopenharmony_cistatic inline unsigned 742bf215546Sopenharmony_cir600_isa_fetch_by_opcode(struct r600_isa* isa, unsigned opcode) { 743bf215546Sopenharmony_ci unsigned op; 744bf215546Sopenharmony_ci assert(isa->fetch_map); 745bf215546Sopenharmony_ci op = isa->fetch_map[opcode]; 746bf215546Sopenharmony_ci assert(op); 747bf215546Sopenharmony_ci return op - 1; 748bf215546Sopenharmony_ci} 749bf215546Sopenharmony_ci 750bf215546Sopenharmony_cistatic inline unsigned 751bf215546Sopenharmony_cir600_isa_cf_by_opcode(struct r600_isa* isa, unsigned opcode, unsigned is_alu) { 752bf215546Sopenharmony_ci unsigned op; 753bf215546Sopenharmony_ci assert(isa->cf_map); 754bf215546Sopenharmony_ci /* using offset for CF_ALU_xxx opcodes because they overlap with other 755bf215546Sopenharmony_ci * CF opcodes (they use different encoding in hw) */ 756bf215546Sopenharmony_ci op = isa->cf_map[is_alu ? opcode + 0x80 : opcode]; 757bf215546Sopenharmony_ci assert(op); 758bf215546Sopenharmony_ci return op - 1; 759bf215546Sopenharmony_ci} 760bf215546Sopenharmony_ci 761bf215546Sopenharmony_ci#ifdef __cplusplus 762bf215546Sopenharmony_ci} /* extern "C" */ 763bf215546Sopenharmony_ci#endif 764bf215546Sopenharmony_ci 765bf215546Sopenharmony_ci#endif /* R600_ISA_H_ */ 766