1*61046927SAndroid Build Coastguard Worker# 2*61046927SAndroid Build Coastguard Worker# Copyright (c) 2018 Valve Corporation 3*61046927SAndroid Build Coastguard Worker# 4*61046927SAndroid Build Coastguard Worker# SPDX-License-Identifier: MIT 5*61046927SAndroid Build Coastguard Worker 6*61046927SAndroid Build Coastguard Worker# Class that represents all the information we have about the opcode 7*61046927SAndroid Build Coastguard Worker# NOTE: this must be kept in sync with aco_op_info 8*61046927SAndroid Build Coastguard Worker 9*61046927SAndroid Build Coastguard Workerimport sys 10*61046927SAndroid Build Coastguard Workerimport itertools 11*61046927SAndroid Build Coastguard Workerimport collections 12*61046927SAndroid Build Coastguard Workerfrom enum import Enum, IntEnum, auto 13*61046927SAndroid Build Coastguard Workerfrom collections import namedtuple 14*61046927SAndroid Build Coastguard Worker 15*61046927SAndroid Build Coastguard Workerclass InstrClass(Enum): 16*61046927SAndroid Build Coastguard Worker Valu32 = "valu32" 17*61046927SAndroid Build Coastguard Worker ValuConvert32 = "valu_convert32" 18*61046927SAndroid Build Coastguard Worker Valu64 = "valu64" 19*61046927SAndroid Build Coastguard Worker ValuQuarterRate32 = "valu_quarter_rate32" 20*61046927SAndroid Build Coastguard Worker ValuFma = "valu_fma" 21*61046927SAndroid Build Coastguard Worker ValuTranscendental32 = "valu_transcendental32" 22*61046927SAndroid Build Coastguard Worker ValuDouble = "valu_double" 23*61046927SAndroid Build Coastguard Worker ValuDoubleAdd = "valu_double_add" 24*61046927SAndroid Build Coastguard Worker ValuDoubleConvert = "valu_double_convert" 25*61046927SAndroid Build Coastguard Worker ValuDoubleTranscendental = "valu_double_transcendental" 26*61046927SAndroid Build Coastguard Worker ValuPseudoScalarTrans = "valu_pseudo_scalar_trans" 27*61046927SAndroid Build Coastguard Worker WMMA = "wmma" 28*61046927SAndroid Build Coastguard Worker Salu = "salu" 29*61046927SAndroid Build Coastguard Worker SFPU = "sfpu" 30*61046927SAndroid Build Coastguard Worker SMem = "smem" 31*61046927SAndroid Build Coastguard Worker Barrier = "barrier" 32*61046927SAndroid Build Coastguard Worker Branch = "branch" 33*61046927SAndroid Build Coastguard Worker Sendmsg = "sendmsg" 34*61046927SAndroid Build Coastguard Worker DS = "ds" 35*61046927SAndroid Build Coastguard Worker Export = "exp" 36*61046927SAndroid Build Coastguard Worker VMem = "vmem" 37*61046927SAndroid Build Coastguard Worker Waitcnt = "waitcnt" 38*61046927SAndroid Build Coastguard Worker Other = "other" 39*61046927SAndroid Build Coastguard Worker 40*61046927SAndroid Build Coastguard Worker# Representation of the instruction's microcode encoding format 41*61046927SAndroid Build Coastguard Worker# Note: Some Vector ALU Formats can be combined, such that: 42*61046927SAndroid Build Coastguard Worker# - VOP2* | VOP3 represents a VOP2 instruction in VOP3 encoding 43*61046927SAndroid Build Coastguard Worker# - VOP2* | DPP represents a VOP2 instruction with data parallel primitive. 44*61046927SAndroid Build Coastguard Worker# - VOP2* | SDWA represents a VOP2 instruction with sub-dword addressing. 45*61046927SAndroid Build Coastguard Worker# 46*61046927SAndroid Build Coastguard Worker# (*) The same is applicable for VOP1 and VOPC instructions. 47*61046927SAndroid Build Coastguard Workerclass Format(IntEnum): 48*61046927SAndroid Build Coastguard Worker # Pseudo Instruction Formats 49*61046927SAndroid Build Coastguard Worker PSEUDO = 0 50*61046927SAndroid Build Coastguard Worker PSEUDO_BRANCH = auto() 51*61046927SAndroid Build Coastguard Worker PSEUDO_BARRIER = auto() 52*61046927SAndroid Build Coastguard Worker PSEUDO_REDUCTION = auto() 53*61046927SAndroid Build Coastguard Worker # Scalar ALU & Control Formats 54*61046927SAndroid Build Coastguard Worker SOP1 = auto() 55*61046927SAndroid Build Coastguard Worker SOP2 = auto() 56*61046927SAndroid Build Coastguard Worker SOPK = auto() 57*61046927SAndroid Build Coastguard Worker SOPP = auto() 58*61046927SAndroid Build Coastguard Worker SOPC = auto() 59*61046927SAndroid Build Coastguard Worker # Scalar Memory Format 60*61046927SAndroid Build Coastguard Worker SMEM = auto() 61*61046927SAndroid Build Coastguard Worker # LDS/GDS Format 62*61046927SAndroid Build Coastguard Worker DS = auto() 63*61046927SAndroid Build Coastguard Worker LDSDIR = auto() 64*61046927SAndroid Build Coastguard Worker # Vector Memory Buffer Formats 65*61046927SAndroid Build Coastguard Worker MTBUF = auto() 66*61046927SAndroid Build Coastguard Worker MUBUF = auto() 67*61046927SAndroid Build Coastguard Worker # Vector Memory Image Format 68*61046927SAndroid Build Coastguard Worker MIMG = auto() 69*61046927SAndroid Build Coastguard Worker # Export Format 70*61046927SAndroid Build Coastguard Worker EXP = auto() 71*61046927SAndroid Build Coastguard Worker # Flat Formats 72*61046927SAndroid Build Coastguard Worker FLAT = auto() 73*61046927SAndroid Build Coastguard Worker GLOBAL = auto() 74*61046927SAndroid Build Coastguard Worker SCRATCH = auto() 75*61046927SAndroid Build Coastguard Worker # Vector Parameter Interpolation Formats 76*61046927SAndroid Build Coastguard Worker VINTRP = auto() 77*61046927SAndroid Build Coastguard Worker # Vector ALU Formats 78*61046927SAndroid Build Coastguard Worker VINTERP_INREG = auto() 79*61046927SAndroid Build Coastguard Worker VOPD = auto() 80*61046927SAndroid Build Coastguard Worker VOP1 = 1 << 7 81*61046927SAndroid Build Coastguard Worker VOP2 = 1 << 8 82*61046927SAndroid Build Coastguard Worker VOPC = 1 << 9 83*61046927SAndroid Build Coastguard Worker VOP3 = 1 << 10 84*61046927SAndroid Build Coastguard Worker VOP3P = 1 << 11 85*61046927SAndroid Build Coastguard Worker SDWA = 1 << 12 86*61046927SAndroid Build Coastguard Worker DPP16 = 1 << 13 87*61046927SAndroid Build Coastguard Worker DPP8 = 1 << 14 88*61046927SAndroid Build Coastguard Worker 89*61046927SAndroid Build Coastguard Worker def get_accessor(self): 90*61046927SAndroid Build Coastguard Worker if self in [Format.VOP3, Format.VOP3P]: 91*61046927SAndroid Build Coastguard Worker return "valu" 92*61046927SAndroid Build Coastguard Worker elif self in [Format.SOPP, Format.SOPK]: 93*61046927SAndroid Build Coastguard Worker return "salu" 94*61046927SAndroid Build Coastguard Worker elif self in [Format.FLAT, Format.GLOBAL, Format.SCRATCH]: 95*61046927SAndroid Build Coastguard Worker return "flatlike" 96*61046927SAndroid Build Coastguard Worker elif self in [Format.PSEUDO_BRANCH, Format.PSEUDO_REDUCTION, Format.PSEUDO_BARRIER]: 97*61046927SAndroid Build Coastguard Worker return self.name.split("_")[-1].lower() 98*61046927SAndroid Build Coastguard Worker else: 99*61046927SAndroid Build Coastguard Worker return self.name.lower() 100*61046927SAndroid Build Coastguard Worker 101*61046927SAndroid Build Coastguard Worker def get_builder_fields(self): 102*61046927SAndroid Build Coastguard Worker if self == Format.SOPK: 103*61046927SAndroid Build Coastguard Worker return [('uint32_t', 'imm', '0')] 104*61046927SAndroid Build Coastguard Worker elif self == Format.SOPP: 105*61046927SAndroid Build Coastguard Worker return [('uint32_t', 'imm', '0')] 106*61046927SAndroid Build Coastguard Worker elif self == Format.SMEM: 107*61046927SAndroid Build Coastguard Worker return [('memory_sync_info', 'sync', 'memory_sync_info()'), 108*61046927SAndroid Build Coastguard Worker ('ac_hw_cache_flags', 'cache', '{{0, 0, 0, 0, 0}}')] 109*61046927SAndroid Build Coastguard Worker elif self == Format.DS: 110*61046927SAndroid Build Coastguard Worker return [('uint16_t', 'offset0', '0'), 111*61046927SAndroid Build Coastguard Worker ('uint8_t', 'offset1', '0'), 112*61046927SAndroid Build Coastguard Worker ('bool', 'gds', 'false')] 113*61046927SAndroid Build Coastguard Worker elif self == Format.LDSDIR: 114*61046927SAndroid Build Coastguard Worker return [('uint8_t', 'attr', 0), 115*61046927SAndroid Build Coastguard Worker ('uint8_t', 'attr_chan', 0), 116*61046927SAndroid Build Coastguard Worker ('memory_sync_info', 'sync', 'memory_sync_info()'), 117*61046927SAndroid Build Coastguard Worker ('uint8_t', 'wait_vdst', 15), 118*61046927SAndroid Build Coastguard Worker ('uint8_t', 'wait_vsrc', 1)] 119*61046927SAndroid Build Coastguard Worker elif self == Format.MTBUF: 120*61046927SAndroid Build Coastguard Worker return [('unsigned', 'dfmt', None), 121*61046927SAndroid Build Coastguard Worker ('unsigned', 'nfmt', None), 122*61046927SAndroid Build Coastguard Worker ('unsigned', 'offset', None), 123*61046927SAndroid Build Coastguard Worker ('bool', 'offen', None), 124*61046927SAndroid Build Coastguard Worker ('bool', 'idxen', 'false'), 125*61046927SAndroid Build Coastguard Worker ('bool', 'disable_wqm', 'false'), 126*61046927SAndroid Build Coastguard Worker ('ac_hw_cache_flags', 'cache', '{{0, 0, 0, 0, 0}}'), 127*61046927SAndroid Build Coastguard Worker ('bool', 'tfe', 'false')] 128*61046927SAndroid Build Coastguard Worker elif self == Format.MUBUF: 129*61046927SAndroid Build Coastguard Worker return [('unsigned', 'offset', None), 130*61046927SAndroid Build Coastguard Worker ('bool', 'offen', None), 131*61046927SAndroid Build Coastguard Worker ('bool', 'idxen', 'false'), 132*61046927SAndroid Build Coastguard Worker ('bool', 'addr64', 'false'), 133*61046927SAndroid Build Coastguard Worker ('bool', 'disable_wqm', 'false'), 134*61046927SAndroid Build Coastguard Worker ('ac_hw_cache_flags', 'cache', '{{0, 0, 0, 0, 0}}'), 135*61046927SAndroid Build Coastguard Worker ('bool', 'tfe', 'false'), 136*61046927SAndroid Build Coastguard Worker ('bool', 'lds', 'false')] 137*61046927SAndroid Build Coastguard Worker elif self == Format.MIMG: 138*61046927SAndroid Build Coastguard Worker return [('unsigned', 'dmask', '0xF'), 139*61046927SAndroid Build Coastguard Worker ('bool', 'da', 'false'), 140*61046927SAndroid Build Coastguard Worker ('bool', 'unrm', 'false'), 141*61046927SAndroid Build Coastguard Worker ('bool', 'disable_wqm', 'false'), 142*61046927SAndroid Build Coastguard Worker ('ac_hw_cache_flags', 'cache', '{{0, 0, 0, 0, 0}}'), 143*61046927SAndroid Build Coastguard Worker ('bool', 'tfe', 'false'), 144*61046927SAndroid Build Coastguard Worker ('bool', 'lwe', 'false'), 145*61046927SAndroid Build Coastguard Worker ('bool', 'r128', 'false'), 146*61046927SAndroid Build Coastguard Worker ('bool', 'a16', 'false'), 147*61046927SAndroid Build Coastguard Worker ('bool', 'd16', 'false')] 148*61046927SAndroid Build Coastguard Worker return [('unsigned', 'attribute', None), 149*61046927SAndroid Build Coastguard Worker ('unsigned', 'component', None)] 150*61046927SAndroid Build Coastguard Worker elif self == Format.EXP: 151*61046927SAndroid Build Coastguard Worker return [('unsigned', 'enabled_mask', None), 152*61046927SAndroid Build Coastguard Worker ('unsigned', 'dest', None), 153*61046927SAndroid Build Coastguard Worker ('bool', 'compr', 'false', 'compressed'), 154*61046927SAndroid Build Coastguard Worker ('bool', 'done', 'false'), 155*61046927SAndroid Build Coastguard Worker ('bool', 'vm', 'false', 'valid_mask')] 156*61046927SAndroid Build Coastguard Worker elif self == Format.PSEUDO_BRANCH: 157*61046927SAndroid Build Coastguard Worker return [('uint32_t', 'target0', '0', 'target[0]'), 158*61046927SAndroid Build Coastguard Worker ('uint32_t', 'target1', '0', 'target[1]')] 159*61046927SAndroid Build Coastguard Worker elif self == Format.PSEUDO_REDUCTION: 160*61046927SAndroid Build Coastguard Worker return [('ReduceOp', 'op', None, 'reduce_op'), 161*61046927SAndroid Build Coastguard Worker ('unsigned', 'cluster_size', '0')] 162*61046927SAndroid Build Coastguard Worker elif self == Format.PSEUDO_BARRIER: 163*61046927SAndroid Build Coastguard Worker return [('memory_sync_info', 'sync', None), 164*61046927SAndroid Build Coastguard Worker ('sync_scope', 'exec_scope', 'scope_invocation')] 165*61046927SAndroid Build Coastguard Worker elif self == Format.VINTRP: 166*61046927SAndroid Build Coastguard Worker return [('unsigned', 'attribute', None), 167*61046927SAndroid Build Coastguard Worker ('unsigned', 'component', None), 168*61046927SAndroid Build Coastguard Worker ('bool', 'high_16bits', 'false')] 169*61046927SAndroid Build Coastguard Worker elif self == Format.DPP16: 170*61046927SAndroid Build Coastguard Worker return [('uint16_t', 'dpp_ctrl', None), 171*61046927SAndroid Build Coastguard Worker ('uint8_t', 'row_mask', '0xF'), 172*61046927SAndroid Build Coastguard Worker ('uint8_t', 'bank_mask', '0xF'), 173*61046927SAndroid Build Coastguard Worker ('bool', 'bound_ctrl', 'true'), 174*61046927SAndroid Build Coastguard Worker ('bool', 'fetch_inactive', 'true')] 175*61046927SAndroid Build Coastguard Worker elif self == Format.DPP8: 176*61046927SAndroid Build Coastguard Worker return [('uint32_t', 'lane_sel', 0), 177*61046927SAndroid Build Coastguard Worker ('bool', 'fetch_inactive', 'true')] 178*61046927SAndroid Build Coastguard Worker elif self == Format.VOP3P: 179*61046927SAndroid Build Coastguard Worker return [('uint8_t', 'opsel_lo', None), 180*61046927SAndroid Build Coastguard Worker ('uint8_t', 'opsel_hi', None)] 181*61046927SAndroid Build Coastguard Worker elif self == Format.VOPD: 182*61046927SAndroid Build Coastguard Worker return [('aco_opcode', 'opy', None)] 183*61046927SAndroid Build Coastguard Worker elif self == Format.VINTERP_INREG: 184*61046927SAndroid Build Coastguard Worker return [('uint8_t', 'opsel', 0), 185*61046927SAndroid Build Coastguard Worker ('unsigned', 'wait_exp', 7)] 186*61046927SAndroid Build Coastguard Worker elif self in [Format.FLAT, Format.GLOBAL, Format.SCRATCH]: 187*61046927SAndroid Build Coastguard Worker return [('int16_t', 'offset', 0), 188*61046927SAndroid Build Coastguard Worker ('memory_sync_info', 'sync', 'memory_sync_info()'), 189*61046927SAndroid Build Coastguard Worker ('ac_hw_cache_flags', 'cache', '{{0, 0, 0, 0, 0}}'), 190*61046927SAndroid Build Coastguard Worker ('bool', 'lds', 'false'), 191*61046927SAndroid Build Coastguard Worker ('bool', 'nv', 'false')] 192*61046927SAndroid Build Coastguard Worker else: 193*61046927SAndroid Build Coastguard Worker return [] 194*61046927SAndroid Build Coastguard Worker 195*61046927SAndroid Build Coastguard Worker def get_builder_field_names(self): 196*61046927SAndroid Build Coastguard Worker return [f[1] for f in self.get_builder_fields()] 197*61046927SAndroid Build Coastguard Worker 198*61046927SAndroid Build Coastguard Worker def get_builder_field_dests(self): 199*61046927SAndroid Build Coastguard Worker return [(f[3] if len(f) >= 4 else f[1]) for f in self.get_builder_fields()] 200*61046927SAndroid Build Coastguard Worker 201*61046927SAndroid Build Coastguard Worker def get_builder_field_decls(self): 202*61046927SAndroid Build Coastguard Worker return [('%s %s=%s' % (f[0], f[1], f[2]) if f[2] != None else '%s %s' % (f[0], f[1])) for f in self.get_builder_fields()] 203*61046927SAndroid Build Coastguard Worker 204*61046927SAndroid Build Coastguard Worker def get_builder_initialization(self, num_operands): 205*61046927SAndroid Build Coastguard Worker res = '' 206*61046927SAndroid Build Coastguard Worker if self == Format.SDWA: 207*61046927SAndroid Build Coastguard Worker for i in range(min(num_operands, 2)): 208*61046927SAndroid Build Coastguard Worker res += 'instr->sdwa().sel[{0}] = SubdwordSel(op{0}.op.bytes(), 0, false);'.format(i) 209*61046927SAndroid Build Coastguard Worker res += 'instr->sdwa().dst_sel = SubdwordSel(def0.bytes(), 0, false);\n' 210*61046927SAndroid Build Coastguard Worker elif self == Format.DPP16: 211*61046927SAndroid Build Coastguard Worker res += 'instr->dpp16().fetch_inactive &= program->gfx_level >= GFX10;\n' 212*61046927SAndroid Build Coastguard Worker elif self == Format.DPP8: 213*61046927SAndroid Build Coastguard Worker res += 'instr->dpp8().fetch_inactive &= program->gfx_level >= GFX10;\n' 214*61046927SAndroid Build Coastguard Worker return res 215*61046927SAndroid Build Coastguard Worker 216*61046927SAndroid Build Coastguard Worker 217*61046927SAndroid Build Coastguard WorkerOpcode = namedtuple('Opcode', ['gfx6', 'gfx7', 'gfx8', 'gfx9', 'gfx10', 'gfx11', 'gfx12']) 218*61046927SAndroid Build Coastguard Worker# namedtuple 'defaults' keyword requires python 3.7+. Use an equivalent construct 219*61046927SAndroid Build Coastguard Worker# to support older versions. 220*61046927SAndroid Build Coastguard WorkerOpcode.__new__.__defaults__=(-1, -1, -1, -1, -1, -1, -1) 221*61046927SAndroid Build Coastguard Worker 222*61046927SAndroid Build Coastguard Workerclass Instruction(object): 223*61046927SAndroid Build Coastguard Worker """Class that represents all the information we have about the opcode 224*61046927SAndroid Build Coastguard Worker NOTE: this must be kept in sync with aco_op_info 225*61046927SAndroid Build Coastguard Worker """ 226*61046927SAndroid Build Coastguard Worker def __init__(self, name, opcode, format, input_mod, output_mod, is_atomic, cls, definitions, operands): 227*61046927SAndroid Build Coastguard Worker assert isinstance(name, str) 228*61046927SAndroid Build Coastguard Worker assert isinstance(opcode, Opcode) 229*61046927SAndroid Build Coastguard Worker assert isinstance(format, Format) 230*61046927SAndroid Build Coastguard Worker assert isinstance(input_mod, bool) 231*61046927SAndroid Build Coastguard Worker assert isinstance(output_mod, bool) 232*61046927SAndroid Build Coastguard Worker assert isinstance(definitions, int) 233*61046927SAndroid Build Coastguard Worker assert isinstance(operands, int) 234*61046927SAndroid Build Coastguard Worker assert opcode.gfx6 == -1 or opcode.gfx7 == -1 or opcode.gfx6 == opcode.gfx7 235*61046927SAndroid Build Coastguard Worker assert opcode.gfx8 == -1 or opcode.gfx9 == -1 or opcode.gfx8 == opcode.gfx9 236*61046927SAndroid Build Coastguard Worker 237*61046927SAndroid Build Coastguard Worker self.name = name 238*61046927SAndroid Build Coastguard Worker self.op = opcode 239*61046927SAndroid Build Coastguard Worker self.input_mod = "1" if input_mod else "0" 240*61046927SAndroid Build Coastguard Worker self.output_mod = "1" if output_mod else "0" 241*61046927SAndroid Build Coastguard Worker self.is_atomic = "1" if is_atomic else "0" 242*61046927SAndroid Build Coastguard Worker self.format = format 243*61046927SAndroid Build Coastguard Worker self.cls = cls 244*61046927SAndroid Build Coastguard Worker self.definitions = definitions 245*61046927SAndroid Build Coastguard Worker self.operands = operands 246*61046927SAndroid Build Coastguard Worker 247*61046927SAndroid Build Coastguard Worker parts = name.replace('_e64', '').rsplit('_', 2) 248*61046927SAndroid Build Coastguard Worker op_dtype = parts[-1] 249*61046927SAndroid Build Coastguard Worker 250*61046927SAndroid Build Coastguard Worker op_dtype_sizes = {'{}{}'.format(prefix, size) : size for prefix in 'biuf' for size in [64, 32, 24, 16]} 251*61046927SAndroid Build Coastguard Worker # inline constants are 32-bit for 16-bit integer/typeless instructions: https://reviews.llvm.org/D81841 252*61046927SAndroid Build Coastguard Worker op_dtype_sizes['b16'] = 32 253*61046927SAndroid Build Coastguard Worker op_dtype_sizes['i16'] = 32 254*61046927SAndroid Build Coastguard Worker op_dtype_sizes['u16'] = 32 255*61046927SAndroid Build Coastguard Worker 256*61046927SAndroid Build Coastguard Worker # If we can't tell the operand size, default to 32. 257*61046927SAndroid Build Coastguard Worker self.operand_size = op_dtype_sizes.get(op_dtype, 32) 258*61046927SAndroid Build Coastguard Worker 259*61046927SAndroid Build Coastguard Worker # exceptions for operands: 260*61046927SAndroid Build Coastguard Worker if 'qsad_' in name: 261*61046927SAndroid Build Coastguard Worker self.operand_size = 0 262*61046927SAndroid Build Coastguard Worker elif 'sad_' in name: 263*61046927SAndroid Build Coastguard Worker self.operand_size = 32 264*61046927SAndroid Build Coastguard Worker elif name in ['v_mad_u64_u32', 'v_mad_i64_i32', 265*61046927SAndroid Build Coastguard Worker 'v_interp_p10_f16_f32_inreg', 'v_interp_p10_rtz_f16_f32_inreg', 266*61046927SAndroid Build Coastguard Worker 'v_interp_p2_f16_f32_inreg', 'v_interp_p2_rtz_f16_f32_inreg']: 267*61046927SAndroid Build Coastguard Worker self.operand_size = 0 268*61046927SAndroid Build Coastguard Worker elif self.operand_size == 24: 269*61046927SAndroid Build Coastguard Worker self.operand_size = 32 270*61046927SAndroid Build Coastguard Worker elif op_dtype == 'u8' or op_dtype == 'i8': 271*61046927SAndroid Build Coastguard Worker self.operand_size = 32 272*61046927SAndroid Build Coastguard Worker elif name in ['v_cvt_f32_ubyte0', 'v_cvt_f32_ubyte1', 273*61046927SAndroid Build Coastguard Worker 'v_cvt_f32_ubyte2', 'v_cvt_f32_ubyte3']: 274*61046927SAndroid Build Coastguard Worker self.operand_size = 32 275*61046927SAndroid Build Coastguard Worker 276*61046927SAndroid Build Coastguard Worker 277*61046927SAndroid Build Coastguard Worker# Matches PhysReg 278*61046927SAndroid Build Coastguard WorkerVCC = 106 279*61046927SAndroid Build Coastguard WorkerM0 = 124 280*61046927SAndroid Build Coastguard WorkerEXEC_LO = 126 281*61046927SAndroid Build Coastguard WorkerEXEC = 127 # Some instructins only write lo, so use exec_hi encoding here 282*61046927SAndroid Build Coastguard WorkerSCC = 253 283*61046927SAndroid Build Coastguard Worker 284*61046927SAndroid Build Coastguard Workerdef src(op1 = 0, op2 = 0, op3 = 0, op4 = 0): 285*61046927SAndroid Build Coastguard Worker return op1 | (op2 << 8) | (op3 << 16) | (op4 << 24) 286*61046927SAndroid Build Coastguard Worker 287*61046927SAndroid Build Coastguard Workerdef dst(def1 = 0, def2 = 0, def3 = 0, def4 = 0): 288*61046927SAndroid Build Coastguard Worker return def1 | (def2 << 8) | (def3 << 16) | (def4 << 24) 289*61046927SAndroid Build Coastguard Worker 290*61046927SAndroid Build Coastguard Workerdef op(*args, **kwargs): 291*61046927SAndroid Build Coastguard Worker enc = [None] * len(Opcode._fields) 292*61046927SAndroid Build Coastguard Worker 293*61046927SAndroid Build Coastguard Worker if len(args) > 0: 294*61046927SAndroid Build Coastguard Worker assert(len(args) == 1) 295*61046927SAndroid Build Coastguard Worker enc[0] = args[0] 296*61046927SAndroid Build Coastguard Worker 297*61046927SAndroid Build Coastguard Worker for gen, val in kwargs.items(): 298*61046927SAndroid Build Coastguard Worker idx = Opcode._fields.index(gen) 299*61046927SAndroid Build Coastguard Worker enc[idx] = val 300*61046927SAndroid Build Coastguard Worker 301*61046927SAndroid Build Coastguard Worker for i in range(len(enc)): 302*61046927SAndroid Build Coastguard Worker if enc[i] == None: 303*61046927SAndroid Build Coastguard Worker enc[i] = enc[i - 1] if i > 0 else -1 304*61046927SAndroid Build Coastguard Worker 305*61046927SAndroid Build Coastguard Worker return Opcode(*enc) 306*61046927SAndroid Build Coastguard Worker 307*61046927SAndroid Build Coastguard Worker# global dictionary of instructions 308*61046927SAndroid Build Coastguard Workerinstructions = {} 309*61046927SAndroid Build Coastguard Worker 310*61046927SAndroid Build Coastguard Workerdef insn(name, opcode = Opcode(), format = Format.PSEUDO, cls = InstrClass.Other, input_mod = False, output_mod = False, is_atomic = False, definitions = 0, operands = 0): 311*61046927SAndroid Build Coastguard Worker assert name not in instructions 312*61046927SAndroid Build Coastguard Worker instructions[name] = Instruction(name, opcode, format, input_mod, output_mod, is_atomic, cls, definitions, operands) 313*61046927SAndroid Build Coastguard Worker 314*61046927SAndroid Build Coastguard Workerdef default_class(instructions, cls): 315*61046927SAndroid Build Coastguard Worker for i in instructions: 316*61046927SAndroid Build Coastguard Worker if isinstance(i[-1], InstrClass): 317*61046927SAndroid Build Coastguard Worker yield i 318*61046927SAndroid Build Coastguard Worker else: 319*61046927SAndroid Build Coastguard Worker yield i + (cls,) 320*61046927SAndroid Build Coastguard Worker 321*61046927SAndroid Build Coastguard Workerinsn("exp", op(0), format = Format.EXP, cls = InstrClass.Export) 322*61046927SAndroid Build Coastguard Workerinsn("p_parallelcopy") 323*61046927SAndroid Build Coastguard Workerinsn("p_startpgm") 324*61046927SAndroid Build Coastguard Workerinsn("p_return") 325*61046927SAndroid Build Coastguard Workerinsn("p_phi") 326*61046927SAndroid Build Coastguard Workerinsn("p_linear_phi") 327*61046927SAndroid Build Coastguard Workerinsn("p_boolean_phi") 328*61046927SAndroid Build Coastguard Workerinsn("p_as_uniform") 329*61046927SAndroid Build Coastguard Workerinsn("p_unit_test") 330*61046927SAndroid Build Coastguard Worker 331*61046927SAndroid Build Coastguard Workerinsn("p_create_vector") 332*61046927SAndroid Build Coastguard Workerinsn("p_extract_vector") 333*61046927SAndroid Build Coastguard Workerinsn("p_split_vector") 334*61046927SAndroid Build Coastguard Worker 335*61046927SAndroid Build Coastguard Worker# start/end the parts where we can use exec based instructions 336*61046927SAndroid Build Coastguard Worker# implicitly 337*61046927SAndroid Build Coastguard Workerinsn("p_logical_start") 338*61046927SAndroid Build Coastguard Workerinsn("p_logical_end") 339*61046927SAndroid Build Coastguard Worker 340*61046927SAndroid Build Coastguard Worker# e.g. subgroupMin() in SPIR-V 341*61046927SAndroid Build Coastguard Workerinsn("p_reduce", format=Format.PSEUDO_REDUCTION) 342*61046927SAndroid Build Coastguard Worker# e.g. subgroupInclusiveMin() 343*61046927SAndroid Build Coastguard Workerinsn("p_inclusive_scan", format=Format.PSEUDO_REDUCTION) 344*61046927SAndroid Build Coastguard Worker# e.g. subgroupExclusiveMin() 345*61046927SAndroid Build Coastguard Workerinsn("p_exclusive_scan", format=Format.PSEUDO_REDUCTION) 346*61046927SAndroid Build Coastguard Worker 347*61046927SAndroid Build Coastguard Workerinsn("p_branch", format=Format.PSEUDO_BRANCH) 348*61046927SAndroid Build Coastguard Workerinsn("p_cbranch", format=Format.PSEUDO_BRANCH) 349*61046927SAndroid Build Coastguard Workerinsn("p_cbranch_z", format=Format.PSEUDO_BRANCH) 350*61046927SAndroid Build Coastguard Workerinsn("p_cbranch_nz", format=Format.PSEUDO_BRANCH) 351*61046927SAndroid Build Coastguard Worker 352*61046927SAndroid Build Coastguard Workerinsn("p_barrier", format=Format.PSEUDO_BARRIER) 353*61046927SAndroid Build Coastguard Worker 354*61046927SAndroid Build Coastguard Worker# Primitive Ordered Pixel Shading pseudo-instructions. 355*61046927SAndroid Build Coastguard Worker 356*61046927SAndroid Build Coastguard Worker# For querying whether the current wave can enter the ordered section on GFX9-10.3, doing 357*61046927SAndroid Build Coastguard Worker# s_add_i32(pops_exiting_wave_id, op0), but in a way that it's different from a usual SALU 358*61046927SAndroid Build Coastguard Worker# instruction so that it's easier to maintain the volatility of pops_exiting_wave_id and to handle 359*61046927SAndroid Build Coastguard Worker# the polling specially in scheduling. 360*61046927SAndroid Build Coastguard Worker# Definitions: 361*61046927SAndroid Build Coastguard Worker# - Result SGPR; 362*61046927SAndroid Build Coastguard Worker# - Clobbered SCC. 363*61046927SAndroid Build Coastguard Worker# Operands: 364*61046927SAndroid Build Coastguard Worker# - s1 value to add, usually -(current_wave_ID + 1) (or ~current_wave_ID) to remap the exiting wave 365*61046927SAndroid Build Coastguard Worker# ID from wrapping [0, 0x3FF] to monotonic [0, 0xFFFFFFFF]. 366*61046927SAndroid Build Coastguard Workerinsn("p_pops_gfx9_add_exiting_wave_id") 367*61046927SAndroid Build Coastguard Worker 368*61046927SAndroid Build Coastguard Worker# Indicates that the wait for the completion of the ordered section in overlapped waves has been 369*61046927SAndroid Build Coastguard Worker# finished on GFX9-10.3. Not lowered to any hardware instructions. 370*61046927SAndroid Build Coastguard Workerinsn("p_pops_gfx9_overlapped_wave_wait_done") 371*61046927SAndroid Build Coastguard Worker 372*61046927SAndroid Build Coastguard Worker# Indicates that a POPS ordered section has ended, hints that overlapping waves can possibly 373*61046927SAndroid Build Coastguard Worker# continue execution. The overlapping waves may actually be resumed by this instruction or anywhere 374*61046927SAndroid Build Coastguard Worker# later, however, especially taking into account the fact that there can be multiple ordered 375*61046927SAndroid Build Coastguard Worker# sections in a wave (for instance, if one is chosen in divergent control flow in the source 376*61046927SAndroid Build Coastguard Worker# shader), thus multiple p_pops_gfx9_ordered_section_done instructions. At least one must be present 377*61046927SAndroid Build Coastguard Worker# in the program if POPS is used, however, otherwise the location of the end of the ordered section 378*61046927SAndroid Build Coastguard Worker# will be undefined. Only needed on GFX9-10.3 (GFX11+ ordered section is until the last export, 379*61046927SAndroid Build Coastguard Worker# can't be exited early). Not lowered to any hardware instructions. 380*61046927SAndroid Build Coastguard Workerinsn("p_pops_gfx9_ordered_section_done") 381*61046927SAndroid Build Coastguard Worker 382*61046927SAndroid Build Coastguard Workerinsn("p_spill") 383*61046927SAndroid Build Coastguard Workerinsn("p_reload") 384*61046927SAndroid Build Coastguard Worker 385*61046927SAndroid Build Coastguard Worker# Start/end linear vgprs. p_start_linear_vgpr can take an operand to copy from, into the linear vgpr 386*61046927SAndroid Build Coastguard Workerinsn("p_start_linear_vgpr") 387*61046927SAndroid Build Coastguard Workerinsn("p_end_linear_vgpr") 388*61046927SAndroid Build Coastguard Worker 389*61046927SAndroid Build Coastguard Workerinsn("p_end_wqm") 390*61046927SAndroid Build Coastguard Workerinsn("p_discard_if") 391*61046927SAndroid Build Coastguard Workerinsn("p_demote_to_helper") 392*61046927SAndroid Build Coastguard Workerinsn("p_is_helper") 393*61046927SAndroid Build Coastguard Workerinsn("p_exit_early_if") 394*61046927SAndroid Build Coastguard Worker 395*61046927SAndroid Build Coastguard Worker# simulates proper bpermute behavior using v_readlane_b32 396*61046927SAndroid Build Coastguard Worker# definitions: result VGPR, temp EXEC, clobbered VCC 397*61046927SAndroid Build Coastguard Worker# operands: index, input data 398*61046927SAndroid Build Coastguard Workerinsn("p_bpermute_readlane") 399*61046927SAndroid Build Coastguard Worker 400*61046927SAndroid Build Coastguard Worker# simulates proper wave64 bpermute behavior using shared vgprs (for GFX10/10.3) 401*61046927SAndroid Build Coastguard Worker# definitions: result VGPR, temp EXEC, clobbered SCC 402*61046927SAndroid Build Coastguard Worker# operands: index * 4, input data, same half (bool) 403*61046927SAndroid Build Coastguard Workerinsn("p_bpermute_shared_vgpr") 404*61046927SAndroid Build Coastguard Worker 405*61046927SAndroid Build Coastguard Worker# simulates proper wave64 bpermute behavior using v_permlane64_b32 (for GFX11+) 406*61046927SAndroid Build Coastguard Worker# definitions: result VGPR, temp EXEC, clobbered SCC 407*61046927SAndroid Build Coastguard Worker# operands: linear VGPR, index * 4, input data, same half (bool) 408*61046927SAndroid Build Coastguard Workerinsn("p_bpermute_permlane") 409*61046927SAndroid Build Coastguard Worker 410*61046927SAndroid Build Coastguard Worker# creates a lane mask where only the first active lane is selected 411*61046927SAndroid Build Coastguard Workerinsn("p_elect") 412*61046927SAndroid Build Coastguard Worker 413*61046927SAndroid Build Coastguard Workerinsn("p_constaddr") 414*61046927SAndroid Build Coastguard Workerinsn("p_resume_shader_address") 415*61046927SAndroid Build Coastguard Worker 416*61046927SAndroid Build Coastguard Worker# These don't have to be pseudo-ops, but it makes optimization easier to only 417*61046927SAndroid Build Coastguard Worker# have to consider two instructions. 418*61046927SAndroid Build Coastguard Worker# (src0 >> (index * bits)) & ((1 << bits) - 1) with optional sign extension 419*61046927SAndroid Build Coastguard Workerinsn("p_extract") # src1=index, src2=bits, src3=signext 420*61046927SAndroid Build Coastguard Worker# (src0 & ((1 << bits) - 1)) << (index * bits) 421*61046927SAndroid Build Coastguard Workerinsn("p_insert") # src1=index, src2=bits 422*61046927SAndroid Build Coastguard Worker 423*61046927SAndroid Build Coastguard Workerinsn("p_init_scratch") 424*61046927SAndroid Build Coastguard Worker 425*61046927SAndroid Build Coastguard Worker# jumps to a shader epilog 426*61046927SAndroid Build Coastguard Workerinsn("p_jump_to_epilog") 427*61046927SAndroid Build Coastguard Worker 428*61046927SAndroid Build Coastguard Worker# loads and interpolates a fragment shader input with a correct exec mask 429*61046927SAndroid Build Coastguard Worker#dst0=result, src0=linear_vgpr, src1=attribute, src2=component, src3=high_16bits, src4=coord1, src5=coord2, src6=m0 430*61046927SAndroid Build Coastguard Worker#dst0=result, src0=linear_vgpr, src1=attribute, src2=component, src3=dpp_ctrl, src4=m0 431*61046927SAndroid Build Coastguard Workerinsn("p_interp_gfx11") 432*61046927SAndroid Build Coastguard Worker 433*61046927SAndroid Build Coastguard Worker# performs dual source MRTs swizzling and emits exports on GFX11 434*61046927SAndroid Build Coastguard Workerinsn("p_dual_src_export_gfx11") 435*61046927SAndroid Build Coastguard Worker 436*61046927SAndroid Build Coastguard Worker# Let shader end with specific registers set to wanted value, used by multi part 437*61046927SAndroid Build Coastguard Worker# shader to pass arguments to next part. 438*61046927SAndroid Build Coastguard Workerinsn("p_end_with_regs") 439*61046927SAndroid Build Coastguard Worker 440*61046927SAndroid Build Coastguard Workerinsn("p_shader_cycles_hi_lo_hi") 441*61046927SAndroid Build Coastguard Worker 442*61046927SAndroid Build Coastguard Worker# SOP2 instructions: 2 scalar inputs, 1 scalar output (+optional scc) 443*61046927SAndroid Build Coastguard WorkerSOP2 = { 444*61046927SAndroid Build Coastguard Worker ("s_add_u32", dst(1, SCC), src(1, 1), op(0x00)), 445*61046927SAndroid Build Coastguard Worker ("s_sub_u32", dst(1, SCC), src(1, 1), op(0x01)), 446*61046927SAndroid Build Coastguard Worker ("s_add_i32", dst(1, SCC), src(1, 1), op(0x02)), 447*61046927SAndroid Build Coastguard Worker ("s_sub_i32", dst(1, SCC), src(1, 1), op(0x03)), 448*61046927SAndroid Build Coastguard Worker ("s_addc_u32", dst(1, SCC), src(1, 1, SCC), op(0x04)), 449*61046927SAndroid Build Coastguard Worker ("s_subb_u32", dst(1, SCC), src(1, 1, SCC), op(0x05)), 450*61046927SAndroid Build Coastguard Worker ("s_min_i32", dst(1, SCC), src(1, 1), op(0x06, gfx11=0x12)), 451*61046927SAndroid Build Coastguard Worker ("s_min_u32", dst(1, SCC), src(1, 1), op(0x07, gfx11=0x13)), 452*61046927SAndroid Build Coastguard Worker ("s_max_i32", dst(1, SCC), src(1, 1), op(0x08, gfx11=0x14)), 453*61046927SAndroid Build Coastguard Worker ("s_max_u32", dst(1, SCC), src(1, 1), op(0x09, gfx11=0x15)), 454*61046927SAndroid Build Coastguard Worker ("s_cselect_b32", dst(1), src(1, 1, SCC), op(0x0a, gfx11=0x30)), 455*61046927SAndroid Build Coastguard Worker ("s_cselect_b64", dst(2), src(2, 2, SCC), op(0x0b, gfx11=0x31)), 456*61046927SAndroid Build Coastguard Worker ("s_and_b32", dst(1, SCC), src(1, 1), op(0x0e, gfx8=0x0c, gfx10=0x0e, gfx11=0x16)), 457*61046927SAndroid Build Coastguard Worker ("s_and_b64", dst(2, SCC), src(2, 2), op(0x0f, gfx8=0x0d, gfx10=0x0f, gfx11=0x17)), 458*61046927SAndroid Build Coastguard Worker ("s_or_b32", dst(1, SCC), src(1, 1), op(0x10, gfx8=0x0e, gfx10=0x10, gfx11=0x18)), 459*61046927SAndroid Build Coastguard Worker ("s_or_b64", dst(2, SCC), src(2, 2), op(0x11, gfx8=0x0f, gfx10=0x11, gfx11=0x19)), 460*61046927SAndroid Build Coastguard Worker ("s_xor_b32", dst(1, SCC), src(1, 1), op(0x12, gfx8=0x10, gfx10=0x12, gfx11=0x1a)), 461*61046927SAndroid Build Coastguard Worker ("s_xor_b64", dst(2, SCC), src(2, 2), op(0x13, gfx8=0x11, gfx10=0x13, gfx11=0x1b)), 462*61046927SAndroid Build Coastguard Worker ("s_andn2_b32", dst(1, SCC), src(1, 1), op(0x14, gfx8=0x12, gfx10=0x14, gfx11=0x22)), #s_and_not1_b32 in GFX11 463*61046927SAndroid Build Coastguard Worker ("s_andn2_b64", dst(2, SCC), src(2, 2), op(0x15, gfx8=0x13, gfx10=0x15, gfx11=0x23)), #s_and_not1_b64 in GFX11 464*61046927SAndroid Build Coastguard Worker ("s_orn2_b32", dst(1, SCC), src(1, 1), op(0x16, gfx8=0x14, gfx10=0x16, gfx11=0x24)), #s_or_not1_b32 in GFX11 465*61046927SAndroid Build Coastguard Worker ("s_orn2_b64", dst(2, SCC), src(2, 2), op(0x17, gfx8=0x15, gfx10=0x17, gfx11=0x25)), #s_or_not1_b64 in GFX11 466*61046927SAndroid Build Coastguard Worker ("s_nand_b32", dst(1, SCC), src(1, 1), op(0x18, gfx8=0x16, gfx10=0x18, gfx11=0x1c)), 467*61046927SAndroid Build Coastguard Worker ("s_nand_b64", dst(2, SCC), src(2, 2), op(0x19, gfx8=0x17, gfx10=0x19, gfx11=0x1d)), 468*61046927SAndroid Build Coastguard Worker ("s_nor_b32", dst(1, SCC), src(1, 1), op(0x1a, gfx8=0x18, gfx10=0x1a, gfx11=0x1e)), 469*61046927SAndroid Build Coastguard Worker ("s_nor_b64", dst(2, SCC), src(2, 2), op(0x1b, gfx8=0x19, gfx10=0x1b, gfx11=0x1f)), 470*61046927SAndroid Build Coastguard Worker ("s_xnor_b32", dst(1, SCC), src(1, 1), op(0x1c, gfx8=0x1a, gfx10=0x1c, gfx11=0x20)), 471*61046927SAndroid Build Coastguard Worker ("s_xnor_b64", dst(2, SCC), src(2, 2), op(0x1d, gfx8=0x1b, gfx10=0x1d, gfx11=0x21)), 472*61046927SAndroid Build Coastguard Worker ("s_lshl_b32", dst(1, SCC), src(1, 1), op(0x1e, gfx8=0x1c, gfx10=0x1e, gfx11=0x08)), 473*61046927SAndroid Build Coastguard Worker ("s_lshl_b64", dst(2, SCC), src(2, 1), op(0x1f, gfx8=0x1d, gfx10=0x1f, gfx11=0x09)), 474*61046927SAndroid Build Coastguard Worker ("s_lshr_b32", dst(1, SCC), src(1, 1), op(0x20, gfx8=0x1e, gfx10=0x20, gfx11=0x0a)), 475*61046927SAndroid Build Coastguard Worker ("s_lshr_b64", dst(2, SCC), src(2, 1), op(0x21, gfx8=0x1f, gfx10=0x21, gfx11=0x0b)), 476*61046927SAndroid Build Coastguard Worker ("s_ashr_i32", dst(1, SCC), src(1, 1), op(0x22, gfx8=0x20, gfx10=0x22, gfx11=0x0c)), 477*61046927SAndroid Build Coastguard Worker ("s_ashr_i64", dst(2, SCC), src(2, 1), op(0x23, gfx8=0x21, gfx10=0x23, gfx11=0x0d)), 478*61046927SAndroid Build Coastguard Worker ("s_bfm_b32", dst(1), src(1, 1), op(0x24, gfx8=0x22, gfx10=0x24, gfx11=0x2a)), 479*61046927SAndroid Build Coastguard Worker ("s_bfm_b64", dst(2), src(1, 1), op(0x25, gfx8=0x23, gfx10=0x25, gfx11=0x2b)), 480*61046927SAndroid Build Coastguard Worker ("s_mul_i32", dst(1), src(1, 1), op(0x26, gfx8=0x24, gfx10=0x26, gfx11=0x2c)), 481*61046927SAndroid Build Coastguard Worker ("s_bfe_u32", dst(1, SCC), src(1, 1), op(0x27, gfx8=0x25, gfx10=0x27, gfx11=0x26)), 482*61046927SAndroid Build Coastguard Worker ("s_bfe_i32", dst(1, SCC), src(1, 1), op(0x28, gfx8=0x26, gfx10=0x28, gfx11=0x27)), 483*61046927SAndroid Build Coastguard Worker ("s_bfe_u64", dst(2, SCC), src(2, 1), op(0x29, gfx8=0x27, gfx10=0x29, gfx11=0x28)), 484*61046927SAndroid Build Coastguard Worker ("s_bfe_i64", dst(2, SCC), src(2, 1), op(0x2a, gfx8=0x28, gfx10=0x2a, gfx11=0x29)), 485*61046927SAndroid Build Coastguard Worker ("s_cbranch_g_fork", dst(), src(), op(0x2b, gfx8=0x29, gfx10=-1), InstrClass.Branch), 486*61046927SAndroid Build Coastguard Worker ("s_absdiff_i32", dst(1, SCC), src(1, 1), op(0x2c, gfx8=0x2a, gfx10=0x2c, gfx11=0x06)), 487*61046927SAndroid Build Coastguard Worker ("s_rfe_restore_b64", dst(), src(), op(gfx8=0x2b, gfx10=-1), InstrClass.Branch), 488*61046927SAndroid Build Coastguard Worker ("s_lshl1_add_u32", dst(1, SCC), src(1, 1), op(gfx9=0x2e, gfx11=0x0e)), 489*61046927SAndroid Build Coastguard Worker ("s_lshl2_add_u32", dst(1, SCC), src(1, 1), op(gfx9=0x2f, gfx11=0x0f)), 490*61046927SAndroid Build Coastguard Worker ("s_lshl3_add_u32", dst(1, SCC), src(1, 1), op(gfx9=0x30, gfx11=0x10)), 491*61046927SAndroid Build Coastguard Worker ("s_lshl4_add_u32", dst(1, SCC), src(1, 1), op(gfx9=0x31, gfx11=0x11)), 492*61046927SAndroid Build Coastguard Worker ("s_pack_ll_b32_b16", dst(1), src(1, 1), op(gfx9=0x32)), 493*61046927SAndroid Build Coastguard Worker ("s_pack_lh_b32_b16", dst(1), src(1, 1), op(gfx9=0x33)), 494*61046927SAndroid Build Coastguard Worker ("s_pack_hh_b32_b16", dst(1), src(1, 1), op(gfx9=0x34)), 495*61046927SAndroid Build Coastguard Worker ("s_pack_hl_b32_b16", dst(1), src(1, 1), op(gfx11=0x35)), 496*61046927SAndroid Build Coastguard Worker ("s_mul_hi_u32", dst(1), src(1, 1), op(gfx9=0x2c, gfx10=0x35, gfx11=0x2d)), 497*61046927SAndroid Build Coastguard Worker ("s_mul_hi_i32", dst(1), src(1, 1), op(gfx9=0x2d, gfx10=0x36, gfx11=0x2e)), 498*61046927SAndroid Build Coastguard Worker ("s_add_f32", dst(1), src(1, 1), op(gfx11=0x40), InstrClass.SFPU), 499*61046927SAndroid Build Coastguard Worker ("s_sub_f32", dst(1), src(1, 1), op(gfx11=0x41), InstrClass.SFPU), 500*61046927SAndroid Build Coastguard Worker ("s_min_f32", dst(1), src(1, 1), op(gfx11=0x42), InstrClass.SFPU), 501*61046927SAndroid Build Coastguard Worker ("s_max_f32", dst(1), src(1, 1), op(gfx11=0x43), InstrClass.SFPU), 502*61046927SAndroid Build Coastguard Worker ("s_mul_f32", dst(1), src(1, 1), op(gfx11=0x44), InstrClass.SFPU), 503*61046927SAndroid Build Coastguard Worker ("s_fmaak_f32", dst(1), src(1, 1, 1), op(gfx11=0x45), InstrClass.SFPU), 504*61046927SAndroid Build Coastguard Worker ("s_fmamk_f32", dst(1), src(1, 1, 1), op(gfx11=0x46), InstrClass.SFPU), 505*61046927SAndroid Build Coastguard Worker ("s_fmac_f32", dst(1), src(1, 1, 1), op(gfx11=0x47), InstrClass.SFPU), 506*61046927SAndroid Build Coastguard Worker ("s_cvt_pk_rtz_f16_f32", dst(1), src(1, 1), op(gfx11=0x48), InstrClass.SFPU), 507*61046927SAndroid Build Coastguard Worker ("s_add_f16", dst(1), src(1, 1), op(gfx11=0x49), InstrClass.SFPU), 508*61046927SAndroid Build Coastguard Worker ("s_sub_f16", dst(1), src(1, 1), op(gfx11=0x4a), InstrClass.SFPU), 509*61046927SAndroid Build Coastguard Worker ("s_min_f16", dst(1), src(1, 1), op(gfx11=0x4b), InstrClass.SFPU), 510*61046927SAndroid Build Coastguard Worker ("s_max_f16", dst(1), src(1, 1), op(gfx11=0x4c), InstrClass.SFPU), 511*61046927SAndroid Build Coastguard Worker ("s_mul_f16", dst(1), src(1, 1), op(gfx11=0x4d), InstrClass.SFPU), 512*61046927SAndroid Build Coastguard Worker ("s_fmac_f16", dst(1), src(1, 1, 1), op(gfx11=0x4e), InstrClass.SFPU), 513*61046927SAndroid Build Coastguard Worker ("s_minimum_f32", dst(1), src(1, 1), op(gfx12=0x4f), InstrClass.SFPU), 514*61046927SAndroid Build Coastguard Worker ("s_maximum_f32", dst(1), src(1, 1), op(gfx12=0x50), InstrClass.SFPU), 515*61046927SAndroid Build Coastguard Worker ("s_minimum_f16", dst(1), src(1, 1), op(gfx12=0x51), InstrClass.SFPU), 516*61046927SAndroid Build Coastguard Worker ("s_maximum_f16", dst(1), src(1, 1), op(gfx12=0x52), InstrClass.SFPU), 517*61046927SAndroid Build Coastguard Worker ("s_add_u64", dst(2), src(2, 2), op(gfx12=0x53)), 518*61046927SAndroid Build Coastguard Worker ("s_sub_u64", dst(2), src(2, 2), op(gfx12=0x54)), 519*61046927SAndroid Build Coastguard Worker ("s_mul_u64", dst(2), src(2, 2), op(gfx12=0x55)), 520*61046927SAndroid Build Coastguard Worker # actually a pseudo-instruction. it's lowered to SALU during assembly though, so it's useful to identify it as a SOP2. 521*61046927SAndroid Build Coastguard Worker ("p_constaddr_addlo", dst(1, SCC), src(1, 1, 1), op(-1)), 522*61046927SAndroid Build Coastguard Worker ("p_resumeaddr_addlo", dst(1, SCC), src(1, 1, 1), op(-1)), 523*61046927SAndroid Build Coastguard Worker} 524*61046927SAndroid Build Coastguard Workerfor (name, defs, ops, num, cls) in default_class(SOP2, InstrClass.Salu): 525*61046927SAndroid Build Coastguard Worker insn(name, num, Format.SOP2, cls, definitions = defs, operands = ops) 526*61046927SAndroid Build Coastguard Worker 527*61046927SAndroid Build Coastguard Worker 528*61046927SAndroid Build Coastguard Worker# SOPK instructions: 0 input (+ imm), 1 output + optional scc 529*61046927SAndroid Build Coastguard WorkerSOPK = { 530*61046927SAndroid Build Coastguard Worker ("s_movk_i32", dst(1), src(), op(0x00)), 531*61046927SAndroid Build Coastguard Worker ("s_version", dst(), src(), op(gfx10=0x01)), 532*61046927SAndroid Build Coastguard Worker ("s_cmovk_i32", dst(1), src(1, SCC), op(0x02, gfx8=0x01, gfx10=0x02)), 533*61046927SAndroid Build Coastguard Worker ("s_cmpk_eq_i32", dst(SCC), src(1), op(0x03, gfx8=0x02, gfx10=0x03, gfx12=-1)), 534*61046927SAndroid Build Coastguard Worker ("s_cmpk_lg_i32", dst(SCC), src(1), op(0x04, gfx8=0x03, gfx10=0x04, gfx12=-1)), 535*61046927SAndroid Build Coastguard Worker ("s_cmpk_gt_i32", dst(SCC), src(1), op(0x05, gfx8=0x04, gfx10=0x05, gfx12=-1)), 536*61046927SAndroid Build Coastguard Worker ("s_cmpk_ge_i32", dst(SCC), src(1), op(0x06, gfx8=0x05, gfx10=0x06, gfx12=-1)), 537*61046927SAndroid Build Coastguard Worker ("s_cmpk_lt_i32", dst(SCC), src(1), op(0x07, gfx8=0x06, gfx10=0x07, gfx12=-1)), 538*61046927SAndroid Build Coastguard Worker ("s_cmpk_le_i32", dst(SCC), src(1), op(0x08, gfx8=0x07, gfx10=0x08, gfx12=-1)), 539*61046927SAndroid Build Coastguard Worker ("s_cmpk_eq_u32", dst(SCC), src(1), op(0x09, gfx8=0x08, gfx10=0x09, gfx12=-1)), 540*61046927SAndroid Build Coastguard Worker ("s_cmpk_lg_u32", dst(SCC), src(1), op(0x0a, gfx8=0x09, gfx10=0x0a, gfx12=-1)), 541*61046927SAndroid Build Coastguard Worker ("s_cmpk_gt_u32", dst(SCC), src(1), op(0x0b, gfx8=0x0a, gfx10=0x0b, gfx12=-1)), 542*61046927SAndroid Build Coastguard Worker ("s_cmpk_ge_u32", dst(SCC), src(1), op(0x0c, gfx8=0x0b, gfx10=0x0c, gfx12=-1)), 543*61046927SAndroid Build Coastguard Worker ("s_cmpk_lt_u32", dst(SCC), src(1), op(0x0d, gfx8=0x0c, gfx10=0x0d, gfx12=-1)), 544*61046927SAndroid Build Coastguard Worker ("s_cmpk_le_u32", dst(SCC), src(1), op(0x0e, gfx8=0x0d, gfx10=0x0e, gfx12=-1)), 545*61046927SAndroid Build Coastguard Worker ("s_addk_i32", dst(1, SCC), src(1), op(0x0f, gfx8=0x0e, gfx10=0x0f)), 546*61046927SAndroid Build Coastguard Worker ("s_mulk_i32", dst(1), src(1), op(0x10, gfx8=0x0f, gfx10=0x10)), 547*61046927SAndroid Build Coastguard Worker ("s_cbranch_i_fork", dst(), src(), op(0x11, gfx8=0x10, gfx10=-1), InstrClass.Branch), 548*61046927SAndroid Build Coastguard Worker ("s_getreg_b32", dst(1), src(), op(0x12, gfx8=0x11, gfx10=0x12, gfx11=0x11)), 549*61046927SAndroid Build Coastguard Worker ("s_setreg_b32", dst(), src(1), op(0x13, gfx8=0x12, gfx10=0x13, gfx11=0x12)), 550*61046927SAndroid Build Coastguard Worker ("s_setreg_imm32_b32", dst(), src(1), op(0x15, gfx8=0x14, gfx10=0x15, gfx11=0x13)), # requires 32bit literal 551*61046927SAndroid Build Coastguard Worker ("s_call_b64", dst(2), src(), op(gfx8=0x15, gfx10=0x16, gfx11=0x14), InstrClass.Branch), 552*61046927SAndroid Build Coastguard Worker ("s_waitcnt_vscnt", dst(), src(1), op(gfx10=0x17, gfx11=0x18, gfx12=-1), InstrClass.Waitcnt), 553*61046927SAndroid Build Coastguard Worker ("s_waitcnt_vmcnt", dst(), src(1), op(gfx10=0x18, gfx11=0x19, gfx12=-1), InstrClass.Waitcnt), 554*61046927SAndroid Build Coastguard Worker ("s_waitcnt_expcnt", dst(), src(1), op(gfx10=0x19, gfx11=0x1a, gfx12=-1), InstrClass.Waitcnt), 555*61046927SAndroid Build Coastguard Worker ("s_waitcnt_lgkmcnt", dst(), src(1), op(gfx10=0x1a, gfx11=0x1b, gfx12=-1), InstrClass.Waitcnt), 556*61046927SAndroid Build Coastguard Worker ("s_subvector_loop_begin", dst(), src(), op(gfx10=0x1b, gfx11=0x16, gfx12=-1), InstrClass.Branch), 557*61046927SAndroid Build Coastguard Worker ("s_subvector_loop_end", dst(), src(), op(gfx10=0x1c, gfx11=0x17, gfx12=-1), InstrClass.Branch), 558*61046927SAndroid Build Coastguard Worker} 559*61046927SAndroid Build Coastguard Workerfor (name, defs, ops, num, cls) in default_class(SOPK, InstrClass.Salu): 560*61046927SAndroid Build Coastguard Worker insn(name, num, Format.SOPK, cls, definitions = defs, operands = ops) 561*61046927SAndroid Build Coastguard Worker 562*61046927SAndroid Build Coastguard Worker 563*61046927SAndroid Build Coastguard Worker# SOP1 instructions: 1 input, 1 output (+optional SCC) 564*61046927SAndroid Build Coastguard WorkerSOP1 = { 565*61046927SAndroid Build Coastguard Worker ("s_mov_b32", dst(1), src(1), op(0x03, gfx8=0x00, gfx10=0x03, gfx11=0x00)), 566*61046927SAndroid Build Coastguard Worker ("s_mov_b64", dst(2), src(2), op(0x04, gfx8=0x01, gfx10=0x04, gfx11=0x01)), 567*61046927SAndroid Build Coastguard Worker ("s_cmov_b32", dst(1), src(1, 1, SCC), op(0x05, gfx8=0x02, gfx10=0x05, gfx11=0x02)), 568*61046927SAndroid Build Coastguard Worker ("s_cmov_b64", dst(2), src(2, 2, SCC), op(0x06, gfx8=0x03, gfx10=0x06, gfx11=0x03)), 569*61046927SAndroid Build Coastguard Worker ("s_not_b32", dst(1, SCC), src(1), op(0x07, gfx8=0x04, gfx10=0x07, gfx11=0x1e)), 570*61046927SAndroid Build Coastguard Worker ("s_not_b64", dst(2, SCC), src(2), op(0x08, gfx8=0x05, gfx10=0x08, gfx11=0x1f)), 571*61046927SAndroid Build Coastguard Worker ("s_wqm_b32", dst(1, SCC), src(1), op(0x09, gfx8=0x06, gfx10=0x09, gfx11=0x1c)), 572*61046927SAndroid Build Coastguard Worker ("s_wqm_b64", dst(2, SCC), src(2), op(0x0a, gfx8=0x07, gfx10=0x0a, gfx11=0x1d)), 573*61046927SAndroid Build Coastguard Worker ("s_brev_b32", dst(1), src(1), op(0x0b, gfx8=0x08, gfx10=0x0b, gfx11=0x04)), 574*61046927SAndroid Build Coastguard Worker ("s_brev_b64", dst(2), src(2), op(0x0c, gfx8=0x09, gfx10=0x0c, gfx11=0x05)), 575*61046927SAndroid Build Coastguard Worker ("s_bcnt0_i32_b32", dst(1, SCC), src(1), op(0x0d, gfx8=0x0a, gfx10=0x0d, gfx11=0x16)), 576*61046927SAndroid Build Coastguard Worker ("s_bcnt0_i32_b64", dst(1, SCC), src(2), op(0x0e, gfx8=0x0b, gfx10=0x0e, gfx11=0x17)), 577*61046927SAndroid Build Coastguard Worker ("s_bcnt1_i32_b32", dst(1, SCC), src(1), op(0x0f, gfx8=0x0c, gfx10=0x0f, gfx11=0x18)), 578*61046927SAndroid Build Coastguard Worker ("s_bcnt1_i32_b64", dst(1, SCC), src(2), op(0x10, gfx8=0x0d, gfx10=0x10, gfx11=0x19)), 579*61046927SAndroid Build Coastguard Worker ("s_ff0_i32_b32", dst(1), src(1), op(0x11, gfx8=0x0e, gfx10=0x11, gfx11=-1)), 580*61046927SAndroid Build Coastguard Worker ("s_ff0_i32_b64", dst(1), src(2), op(0x12, gfx8=0x0f, gfx10=0x12, gfx11=-1)), 581*61046927SAndroid Build Coastguard Worker ("s_ff1_i32_b32", dst(1), src(1), op(0x13, gfx8=0x10, gfx10=0x13, gfx11=0x08)), #s_ctz_i32_b32 in GFX11 582*61046927SAndroid Build Coastguard Worker ("s_ff1_i32_b64", dst(1), src(2), op(0x14, gfx8=0x11, gfx10=0x14, gfx11=0x09)), #s_ctz_i32_b64 in GFX11 583*61046927SAndroid Build Coastguard Worker ("s_flbit_i32_b32", dst(1), src(1), op(0x15, gfx8=0x12, gfx10=0x15, gfx11=0x0a)), #s_clz_i32_u32 in GFX11 584*61046927SAndroid Build Coastguard Worker ("s_flbit_i32_b64", dst(1), src(2), op(0x16, gfx8=0x13, gfx10=0x16, gfx11=0x0b)), #s_clz_i32_u64 in GFX11 585*61046927SAndroid Build Coastguard Worker ("s_flbit_i32", dst(1), src(1), op(0x17, gfx8=0x14, gfx10=0x17, gfx11=0x0c)), #s_cls_i32 in GFX11 586*61046927SAndroid Build Coastguard Worker ("s_flbit_i32_i64", dst(1), src(2), op(0x18, gfx8=0x15, gfx10=0x18, gfx11=0x0d)), #s_cls_i32_i64 in GFX11 587*61046927SAndroid Build Coastguard Worker ("s_sext_i32_i8", dst(1), src(1), op(0x19, gfx8=0x16, gfx10=0x19, gfx11=0x0e)), 588*61046927SAndroid Build Coastguard Worker ("s_sext_i32_i16", dst(1), src(1), op(0x1a, gfx8=0x17, gfx10=0x1a, gfx11=0x0f)), 589*61046927SAndroid Build Coastguard Worker ("s_bitset0_b32", dst(1), src(1, 1), op(0x1b, gfx8=0x18, gfx10=0x1b, gfx11=0x10)), 590*61046927SAndroid Build Coastguard Worker ("s_bitset0_b64", dst(2), src(1, 2), op(0x1c, gfx8=0x19, gfx10=0x1c, gfx11=0x11)), 591*61046927SAndroid Build Coastguard Worker ("s_bitset1_b32", dst(1), src(1, 1), op(0x1d, gfx8=0x1a, gfx10=0x1d, gfx11=0x12)), 592*61046927SAndroid Build Coastguard Worker ("s_bitset1_b64", dst(2), src(1, 2), op(0x1e, gfx8=0x1b, gfx10=0x1e, gfx11=0x13)), 593*61046927SAndroid Build Coastguard Worker ("s_getpc_b64", dst(2), src(), op(0x1f, gfx8=0x1c, gfx10=0x1f, gfx11=0x47)), 594*61046927SAndroid Build Coastguard Worker ("s_setpc_b64", dst(), src(2), op(0x20, gfx8=0x1d, gfx10=0x20, gfx11=0x48), InstrClass.Branch), 595*61046927SAndroid Build Coastguard Worker ("s_swappc_b64", dst(2), src(2), op(0x21, gfx8=0x1e, gfx10=0x21, gfx11=0x49), InstrClass.Branch), 596*61046927SAndroid Build Coastguard Worker ("s_rfe_b64", dst(), src(2), op(0x22, gfx8=0x1f, gfx10=0x22, gfx11=0x4a), InstrClass.Branch), 597*61046927SAndroid Build Coastguard Worker ("s_and_saveexec_b64", dst(2, SCC, EXEC), src(2, EXEC), op(0x24, gfx8=0x20, gfx10=0x24, gfx11=0x21)), 598*61046927SAndroid Build Coastguard Worker ("s_or_saveexec_b64", dst(2, SCC, EXEC), src(2, EXEC), op(0x25, gfx8=0x21, gfx10=0x25, gfx11=0x23)), 599*61046927SAndroid Build Coastguard Worker ("s_xor_saveexec_b64", dst(2, SCC, EXEC), src(2, EXEC), op(0x26, gfx8=0x22, gfx10=0x26, gfx11=0x25)), 600*61046927SAndroid Build Coastguard Worker ("s_andn2_saveexec_b64", dst(2, SCC, EXEC), src(2, EXEC), op(0x27, gfx8=0x23, gfx10=0x27, gfx11=0x31)), #s_and_not1_saveexec_b64 in GFX11 601*61046927SAndroid Build Coastguard Worker ("s_orn2_saveexec_b64", dst(2, SCC, EXEC), src(2, EXEC), op(0x28, gfx8=0x24, gfx10=0x28, gfx11=0x33)), #s_or_not1_saveexec_b64 in GFX11 602*61046927SAndroid Build Coastguard Worker ("s_nand_saveexec_b64", dst(2, SCC, EXEC), src(2, EXEC), op(0x29, gfx8=0x25, gfx10=0x29, gfx11=0x27)), 603*61046927SAndroid Build Coastguard Worker ("s_nor_saveexec_b64", dst(2, SCC, EXEC), src(2, EXEC), op(0x2a, gfx8=0x26, gfx10=0x2a, gfx11=0x29)), 604*61046927SAndroid Build Coastguard Worker ("s_xnor_saveexec_b64", dst(2, SCC, EXEC), src(2, EXEC), op(0x2b, gfx8=0x27, gfx10=0x2b)), 605*61046927SAndroid Build Coastguard Worker ("s_quadmask_b32", dst(1, SCC), src(1), op(0x2c, gfx8=0x28, gfx10=0x2c, gfx11=0x1a)), 606*61046927SAndroid Build Coastguard Worker ("s_quadmask_b64", dst(2, SCC), src(2), op(0x2d, gfx8=0x29, gfx10=0x2d, gfx11=0x1b)), # Always writes 0 to the second SGPR 607*61046927SAndroid Build Coastguard Worker ("s_movrels_b32", dst(1), src(1, M0), op(0x2e, gfx8=0x2a, gfx10=0x2e, gfx11=0x40)), 608*61046927SAndroid Build Coastguard Worker ("s_movrels_b64", dst(2), src(2, M0), op(0x2f, gfx8=0x2b, gfx10=0x2f, gfx11=0x41)), 609*61046927SAndroid Build Coastguard Worker ("s_movreld_b32", dst(1), src(1, M0), op(0x30, gfx8=0x2c, gfx10=0x30, gfx11=0x42)), 610*61046927SAndroid Build Coastguard Worker ("s_movreld_b64", dst(2), src(2, M0), op(0x31, gfx8=0x2d, gfx10=0x31, gfx11=0x43)), 611*61046927SAndroid Build Coastguard Worker ("s_cbranch_join", dst(), src(), op(0x32, gfx8=0x2e, gfx10=-1), InstrClass.Branch), 612*61046927SAndroid Build Coastguard Worker ("s_abs_i32", dst(1, SCC), src(1), op(0x34, gfx8=0x30, gfx10=0x34, gfx11=0x15)), 613*61046927SAndroid Build Coastguard Worker ("s_mov_fed_b32", dst(), src(), op(0x35, gfx8=-1, gfx10=0x35, gfx11=-1)), 614*61046927SAndroid Build Coastguard Worker ("s_set_gpr_idx_idx", dst(M0), src(1, M0), op(gfx8=0x32, gfx10=-1)), 615*61046927SAndroid Build Coastguard Worker ("s_andn1_saveexec_b64", dst(2, SCC, EXEC), src(2, EXEC), op(gfx9=0x33, gfx10=0x37, gfx11=0x2d)), #s_and_not0_savexec_b64 in GFX11 616*61046927SAndroid Build Coastguard Worker ("s_orn1_saveexec_b64", dst(2, SCC, EXEC), src(2, EXEC), op(gfx9=0x34, gfx10=0x38, gfx11=0x2f)), #s_or_not0_savexec_b64 in GFX11 617*61046927SAndroid Build Coastguard Worker ("s_andn1_wrexec_b64", dst(2, SCC, EXEC), src(2, EXEC), op(gfx9=0x35, gfx10=0x39, gfx11=0x35)), #s_and_not0_wrexec_b64 in GFX11 618*61046927SAndroid Build Coastguard Worker ("s_andn2_wrexec_b64", dst(2, SCC, EXEC), src(2, EXEC), op(gfx9=0x36, gfx10=0x3a, gfx11=0x37)), #s_and_not1_wrexec_b64 in GFX11 619*61046927SAndroid Build Coastguard Worker ("s_bitreplicate_b64_b32", dst(2), src(1), op(gfx9=0x37, gfx10=0x3b, gfx11=0x14)), 620*61046927SAndroid Build Coastguard Worker ("s_and_saveexec_b32", dst(1, SCC, EXEC_LO), src(1, EXEC_LO), op(gfx10=0x3c, gfx11=0x20)), 621*61046927SAndroid Build Coastguard Worker ("s_or_saveexec_b32", dst(1, SCC, EXEC_LO), src(1, EXEC_LO), op(gfx10=0x3d, gfx11=0x22)), 622*61046927SAndroid Build Coastguard Worker ("s_xor_saveexec_b32", dst(1, SCC, EXEC_LO), src(1, EXEC_LO), op(gfx10=0x3e, gfx11=0x24)), 623*61046927SAndroid Build Coastguard Worker ("s_andn2_saveexec_b32", dst(1, SCC, EXEC_LO), src(1, EXEC_LO), op(gfx10=0x3f, gfx11=0x30)), #s_and_not1_saveexec_b32 in GFX11 624*61046927SAndroid Build Coastguard Worker ("s_orn2_saveexec_b32", dst(1, SCC, EXEC_LO), src(1, EXEC_LO), op(gfx10=0x40, gfx11=0x32)), #s_or_not1_saveexec_b32 in GFX11 625*61046927SAndroid Build Coastguard Worker ("s_nand_saveexec_b32", dst(1, SCC, EXEC_LO), src(1, EXEC_LO), op(gfx10=0x41, gfx11=0x26)), 626*61046927SAndroid Build Coastguard Worker ("s_nor_saveexec_b32", dst(1, SCC, EXEC_LO), src(1, EXEC_LO), op(gfx10=0x42, gfx11=0x28)), 627*61046927SAndroid Build Coastguard Worker ("s_xnor_saveexec_b32", dst(1, SCC, EXEC_LO), src(1, EXEC_LO), op(gfx10=0x43, gfx11=0x2a)), 628*61046927SAndroid Build Coastguard Worker ("s_andn1_saveexec_b32", dst(1, SCC, EXEC_LO), src(1, EXEC_LO), op(gfx10=0x44, gfx11=0x2c)), #s_and_not0_savexec_b32 in GFX11 629*61046927SAndroid Build Coastguard Worker ("s_orn1_saveexec_b32", dst(1, SCC, EXEC_LO), src(1, EXEC_LO), op(gfx10=0x45, gfx11=0x2e)), #s_or_not0_savexec_b32 in GFX11 630*61046927SAndroid Build Coastguard Worker ("s_andn1_wrexec_b32", dst(1, SCC, EXEC_LO), src(1, EXEC_LO), op(gfx10=0x46, gfx11=0x34)), #s_and_not0_wrexec_b32 in GFX11 631*61046927SAndroid Build Coastguard Worker ("s_andn2_wrexec_b32", dst(1, SCC, EXEC_LO), src(1, EXEC_LO), op(gfx10=0x47, gfx11=0x36)), #s_and_not1_wrexec_b32 in GFX11 632*61046927SAndroid Build Coastguard Worker ("s_movrelsd_2_b32", dst(1), src(1, M0), op(gfx10=0x49, gfx11=0x44)), 633*61046927SAndroid Build Coastguard Worker ("s_sendmsg_rtn_b32", dst(1), src(1), op(gfx11=0x4c)), 634*61046927SAndroid Build Coastguard Worker ("s_sendmsg_rtn_b64", dst(2), src(1), op(gfx11=0x4d)), 635*61046927SAndroid Build Coastguard Worker ("s_ceil_f32", dst(1), src(1), op(gfx11=0x60), InstrClass.SFPU), 636*61046927SAndroid Build Coastguard Worker ("s_floor_f32", dst(1), src(1), op(gfx11=0x61), InstrClass.SFPU), 637*61046927SAndroid Build Coastguard Worker ("s_trunc_f32", dst(1), src(1), op(gfx11=0x62), InstrClass.SFPU), 638*61046927SAndroid Build Coastguard Worker ("s_rndne_f32", dst(1), src(1), op(gfx11=0x63), InstrClass.SFPU), 639*61046927SAndroid Build Coastguard Worker ("s_cvt_f32_i32", dst(1), src(1), op(gfx11=0x64), InstrClass.SFPU), 640*61046927SAndroid Build Coastguard Worker ("s_cvt_f32_u32", dst(1), src(1), op(gfx11=0x65), InstrClass.SFPU), 641*61046927SAndroid Build Coastguard Worker ("s_cvt_i32_f32", dst(1), src(1), op(gfx11=0x66), InstrClass.SFPU), 642*61046927SAndroid Build Coastguard Worker ("s_cvt_u32_f32", dst(1), src(1), op(gfx11=0x67), InstrClass.SFPU), 643*61046927SAndroid Build Coastguard Worker ("s_cvt_f16_f32", dst(1), src(1), op(gfx11=0x68), InstrClass.SFPU), 644*61046927SAndroid Build Coastguard Worker ("p_s_cvt_f16_f32_rtne", dst(1), src(1), op(-1), InstrClass.SFPU), 645*61046927SAndroid Build Coastguard Worker ("s_cvt_f32_f16", dst(1), src(1), op(gfx11=0x69), InstrClass.SFPU), 646*61046927SAndroid Build Coastguard Worker ("s_cvt_hi_f32_f16", dst(1), src(1), op(gfx11=0x6a), InstrClass.SFPU), 647*61046927SAndroid Build Coastguard Worker ("s_ceil_f16", dst(1), src(1), op(gfx11=0x6b), InstrClass.SFPU), 648*61046927SAndroid Build Coastguard Worker ("s_floor_f16", dst(1), src(1), op(gfx11=0x6c), InstrClass.SFPU), 649*61046927SAndroid Build Coastguard Worker ("s_trunc_f16", dst(1), src(1), op(gfx11=0x6d), InstrClass.SFPU), 650*61046927SAndroid Build Coastguard Worker ("s_rndne_f16", dst(1), src(1), op(gfx11=0x6e), InstrClass.SFPU), 651*61046927SAndroid Build Coastguard Worker ("s_barrier_signal", dst(), src(1), op(gfx12=0x4e), InstrClass.Barrier), 652*61046927SAndroid Build Coastguard Worker ("s_barrier_signal_isfirst", dst(SCC), src(1), op(gfx12=0x4f), InstrClass.Barrier), 653*61046927SAndroid Build Coastguard Worker ("s_get_barrier_state", dst(1), src(1), op(gfx12=0x50), InstrClass.Barrier), 654*61046927SAndroid Build Coastguard Worker ("s_barrier_init", dst(), src(1), op(gfx12=0x51), InstrClass.Barrier), 655*61046927SAndroid Build Coastguard Worker ("s_barrier_join", dst(), src(1), op(gfx12=0x52), InstrClass.Barrier), 656*61046927SAndroid Build Coastguard Worker ("s_wakeup_barrier", dst(), src(1), op(gfx12=0x57), InstrClass.Barrier), 657*61046927SAndroid Build Coastguard Worker ("s_sleep_var", dst(), src(1), op(gfx12=0x58)), 658*61046927SAndroid Build Coastguard Worker # actually a pseudo-instruction. it's lowered to SALU during assembly though, so it's useful to identify it as a SOP1. 659*61046927SAndroid Build Coastguard Worker ("p_constaddr_getpc", dst(2), src(1), op(-1)), 660*61046927SAndroid Build Coastguard Worker ("p_resumeaddr_getpc", dst(2), src(1), op(-1)), 661*61046927SAndroid Build Coastguard Worker ("p_load_symbol", dst(1), src(1), op(-1)), 662*61046927SAndroid Build Coastguard Worker} 663*61046927SAndroid Build Coastguard Workerfor (name, defs, ops, num, cls) in default_class(SOP1, InstrClass.Salu): 664*61046927SAndroid Build Coastguard Worker insn(name, num, Format.SOP1, cls, definitions = defs, operands = ops) 665*61046927SAndroid Build Coastguard Worker 666*61046927SAndroid Build Coastguard Worker 667*61046927SAndroid Build Coastguard Worker# SOPC instructions: 2 inputs and 0 outputs (+SCC) 668*61046927SAndroid Build Coastguard WorkerSOPC = { 669*61046927SAndroid Build Coastguard Worker ("s_cmp_eq_i32", dst(SCC), src(1, 1), op(0x00)), 670*61046927SAndroid Build Coastguard Worker ("s_cmp_lg_i32", dst(SCC), src(1, 1), op(0x01)), 671*61046927SAndroid Build Coastguard Worker ("s_cmp_gt_i32", dst(SCC), src(1, 1), op(0x02)), 672*61046927SAndroid Build Coastguard Worker ("s_cmp_ge_i32", dst(SCC), src(1, 1), op(0x03)), 673*61046927SAndroid Build Coastguard Worker ("s_cmp_lt_i32", dst(SCC), src(1, 1), op(0x04)), 674*61046927SAndroid Build Coastguard Worker ("s_cmp_le_i32", dst(SCC), src(1, 1), op(0x05)), 675*61046927SAndroid Build Coastguard Worker ("s_cmp_eq_u32", dst(SCC), src(1, 1), op(0x06)), 676*61046927SAndroid Build Coastguard Worker ("s_cmp_lg_u32", dst(SCC), src(1, 1), op(0x07)), 677*61046927SAndroid Build Coastguard Worker ("s_cmp_gt_u32", dst(SCC), src(1, 1), op(0x08)), 678*61046927SAndroid Build Coastguard Worker ("s_cmp_ge_u32", dst(SCC), src(1, 1), op(0x09)), 679*61046927SAndroid Build Coastguard Worker ("s_cmp_lt_u32", dst(SCC), src(1, 1), op(0x0a)), 680*61046927SAndroid Build Coastguard Worker ("s_cmp_le_u32", dst(SCC), src(1, 1), op(0x0b)), 681*61046927SAndroid Build Coastguard Worker ("s_bitcmp0_b32", dst(SCC), src(1, 1), op(0x0c)), 682*61046927SAndroid Build Coastguard Worker ("s_bitcmp1_b32", dst(SCC), src(1, 1), op(0x0d)), 683*61046927SAndroid Build Coastguard Worker ("s_bitcmp0_b64", dst(SCC), src(2, 1), op(0x0e)), 684*61046927SAndroid Build Coastguard Worker ("s_bitcmp1_b64", dst(SCC), src(2, 1), op(0x0f)), 685*61046927SAndroid Build Coastguard Worker ("s_setvskip", dst(), src(1, 1), op(0x10, gfx10=-1)), 686*61046927SAndroid Build Coastguard Worker ("s_set_gpr_idx_on", dst(M0), src(1, 1, M0), op(gfx8=0x11, gfx10=-1)), 687*61046927SAndroid Build Coastguard Worker ("s_cmp_eq_u64", dst(SCC), src(2, 2), op(gfx8=0x12, gfx11=0x10)), 688*61046927SAndroid Build Coastguard Worker ("s_cmp_lg_u64", dst(SCC), src(2, 2), op(gfx8=0x13, gfx11=0x11)), 689*61046927SAndroid Build Coastguard Worker ("s_cmp_lt_f32", dst(SCC), src(1, 1), op(gfx11=0x41), InstrClass.SFPU), 690*61046927SAndroid Build Coastguard Worker ("s_cmp_eq_f32", dst(SCC), src(1, 1), op(gfx11=0x42), InstrClass.SFPU), 691*61046927SAndroid Build Coastguard Worker ("s_cmp_le_f32", dst(SCC), src(1, 1), op(gfx11=0x43), InstrClass.SFPU), 692*61046927SAndroid Build Coastguard Worker ("s_cmp_gt_f32", dst(SCC), src(1, 1), op(gfx11=0x44), InstrClass.SFPU), 693*61046927SAndroid Build Coastguard Worker ("s_cmp_lg_f32", dst(SCC), src(1, 1), op(gfx11=0x45), InstrClass.SFPU), 694*61046927SAndroid Build Coastguard Worker ("s_cmp_ge_f32", dst(SCC), src(1, 1), op(gfx11=0x46), InstrClass.SFPU), 695*61046927SAndroid Build Coastguard Worker ("s_cmp_o_f32", dst(SCC), src(1, 1), op(gfx11=0x47), InstrClass.SFPU), 696*61046927SAndroid Build Coastguard Worker ("s_cmp_u_f32", dst(SCC), src(1, 1), op(gfx11=0x48), InstrClass.SFPU), 697*61046927SAndroid Build Coastguard Worker ("s_cmp_nge_f32", dst(SCC), src(1, 1), op(gfx11=0x49), InstrClass.SFPU), 698*61046927SAndroid Build Coastguard Worker ("s_cmp_nlg_f32", dst(SCC), src(1, 1), op(gfx11=0x4a), InstrClass.SFPU), 699*61046927SAndroid Build Coastguard Worker ("s_cmp_ngt_f32", dst(SCC), src(1, 1), op(gfx11=0x4b), InstrClass.SFPU), 700*61046927SAndroid Build Coastguard Worker ("s_cmp_nle_f32", dst(SCC), src(1, 1), op(gfx11=0x4c), InstrClass.SFPU), 701*61046927SAndroid Build Coastguard Worker ("s_cmp_neq_f32", dst(SCC), src(1, 1), op(gfx11=0x4d), InstrClass.SFPU), 702*61046927SAndroid Build Coastguard Worker ("s_cmp_nlt_f32", dst(SCC), src(1, 1), op(gfx11=0x4e), InstrClass.SFPU), 703*61046927SAndroid Build Coastguard Worker ("s_cmp_lt_f16", dst(SCC), src(1, 1), op(gfx11=0x51), InstrClass.SFPU), 704*61046927SAndroid Build Coastguard Worker ("s_cmp_eq_f16", dst(SCC), src(1, 1), op(gfx11=0x52), InstrClass.SFPU), 705*61046927SAndroid Build Coastguard Worker ("s_cmp_le_f16", dst(SCC), src(1, 1), op(gfx11=0x53), InstrClass.SFPU), 706*61046927SAndroid Build Coastguard Worker ("s_cmp_gt_f16", dst(SCC), src(1, 1), op(gfx11=0x54), InstrClass.SFPU), 707*61046927SAndroid Build Coastguard Worker ("s_cmp_lg_f16", dst(SCC), src(1, 1), op(gfx11=0x55), InstrClass.SFPU), 708*61046927SAndroid Build Coastguard Worker ("s_cmp_ge_f16", dst(SCC), src(1, 1), op(gfx11=0x56), InstrClass.SFPU), 709*61046927SAndroid Build Coastguard Worker ("s_cmp_o_f16", dst(SCC), src(1, 1), op(gfx11=0x57), InstrClass.SFPU), 710*61046927SAndroid Build Coastguard Worker ("s_cmp_u_f16", dst(SCC), src(1, 1), op(gfx11=0x58), InstrClass.SFPU), 711*61046927SAndroid Build Coastguard Worker ("s_cmp_nge_f16", dst(SCC), src(1, 1), op(gfx11=0x59), InstrClass.SFPU), 712*61046927SAndroid Build Coastguard Worker ("s_cmp_nlg_f16", dst(SCC), src(1, 1), op(gfx11=0x5a), InstrClass.SFPU), 713*61046927SAndroid Build Coastguard Worker ("s_cmp_ngt_f16", dst(SCC), src(1, 1), op(gfx11=0x5b), InstrClass.SFPU), 714*61046927SAndroid Build Coastguard Worker ("s_cmp_nle_f16", dst(SCC), src(1, 1), op(gfx11=0x5c), InstrClass.SFPU), 715*61046927SAndroid Build Coastguard Worker ("s_cmp_neq_f16", dst(SCC), src(1, 1), op(gfx11=0x5d), InstrClass.SFPU), 716*61046927SAndroid Build Coastguard Worker ("s_cmp_nlt_f16", dst(SCC), src(1, 1), op(gfx11=0x5e), InstrClass.SFPU), 717*61046927SAndroid Build Coastguard Worker} 718*61046927SAndroid Build Coastguard Workerfor (name, defs, ops, num, cls) in default_class(SOPC, InstrClass.Salu): 719*61046927SAndroid Build Coastguard Worker insn(name, num, Format.SOPC, cls, definitions = defs, operands = ops) 720*61046927SAndroid Build Coastguard Worker 721*61046927SAndroid Build Coastguard Worker 722*61046927SAndroid Build Coastguard Worker# SOPP instructions: 0 inputs (+optional scc/vcc), 0 outputs 723*61046927SAndroid Build Coastguard WorkerSOPP = { 724*61046927SAndroid Build Coastguard Worker ("s_nop", dst(), src(), op(0x00)), 725*61046927SAndroid Build Coastguard Worker ("s_endpgm", dst(), src(), op(0x01, gfx11=0x30)), 726*61046927SAndroid Build Coastguard Worker ("s_branch", dst(), src(), op(0x02, gfx11=0x20), InstrClass.Branch), 727*61046927SAndroid Build Coastguard Worker ("s_wakeup", dst(), src(), op(gfx8=0x03, gfx11=0x34)), 728*61046927SAndroid Build Coastguard Worker ("s_cbranch_scc0", dst(), src(), op(0x04, gfx11=0x21), InstrClass.Branch), 729*61046927SAndroid Build Coastguard Worker ("s_cbranch_scc1", dst(), src(), op(0x05, gfx11=0x22), InstrClass.Branch), 730*61046927SAndroid Build Coastguard Worker ("s_cbranch_vccz", dst(), src(), op(0x06, gfx11=0x23), InstrClass.Branch), 731*61046927SAndroid Build Coastguard Worker ("s_cbranch_vccnz", dst(), src(), op(0x07, gfx11=0x24), InstrClass.Branch), 732*61046927SAndroid Build Coastguard Worker ("s_cbranch_execz", dst(), src(), op(0x08, gfx11=0x25), InstrClass.Branch), 733*61046927SAndroid Build Coastguard Worker ("s_cbranch_execnz", dst(), src(), op(0x09, gfx11=0x26), InstrClass.Branch), 734*61046927SAndroid Build Coastguard Worker ("s_barrier", dst(), src(), op(0x0a, gfx11=0x3d), InstrClass.Barrier), 735*61046927SAndroid Build Coastguard Worker ("s_setkill", dst(), src(), op(gfx7=0x0b, gfx11=0x01)), 736*61046927SAndroid Build Coastguard Worker ("s_waitcnt", dst(), src(), op(0x0c, gfx11=0x09), InstrClass.Waitcnt), 737*61046927SAndroid Build Coastguard Worker ("s_sethalt", dst(), src(), op(0x0d, gfx11=0x02)), 738*61046927SAndroid Build Coastguard Worker ("s_sleep", dst(), src(), op(0x0e, gfx11=0x03)), 739*61046927SAndroid Build Coastguard Worker ("s_setprio", dst(), src(), op(0x0f, gfx11=0x35)), 740*61046927SAndroid Build Coastguard Worker ("s_sendmsg", dst(), src(), op(0x10, gfx11=0x36), InstrClass.Sendmsg), 741*61046927SAndroid Build Coastguard Worker ("s_sendmsghalt", dst(), src(), op(0x11, gfx11=0x37), InstrClass.Sendmsg), 742*61046927SAndroid Build Coastguard Worker ("s_trap", dst(), src(), op(0x12, gfx11=0x10), InstrClass.Other), 743*61046927SAndroid Build Coastguard Worker ("s_icache_inv", dst(), src(), op(0x13, gfx11=0x3c)), 744*61046927SAndroid Build Coastguard Worker ("s_incperflevel", dst(), src(), op(0x14, gfx11=0x38)), 745*61046927SAndroid Build Coastguard Worker ("s_decperflevel", dst(), src(), op(0x15, gfx11=0x39)), 746*61046927SAndroid Build Coastguard Worker ("s_ttracedata", dst(), src(M0), op(0x16, gfx11=0x3a)), 747*61046927SAndroid Build Coastguard Worker ("s_cbranch_cdbgsys", dst(), src(), op(gfx7=0x17, gfx11=0x27), InstrClass.Branch), 748*61046927SAndroid Build Coastguard Worker ("s_cbranch_cdbguser", dst(), src(), op(gfx7=0x18, gfx11=0x28), InstrClass.Branch), 749*61046927SAndroid Build Coastguard Worker ("s_cbranch_cdbgsys_or_user", dst(), src(), op(gfx7=0x19, gfx11=0x29), InstrClass.Branch), 750*61046927SAndroid Build Coastguard Worker ("s_cbranch_cdbgsys_and_user", dst(), src(), op(gfx7=0x1a, gfx11=0x2a), InstrClass.Branch), 751*61046927SAndroid Build Coastguard Worker ("s_endpgm_saved", dst(), src(), op(gfx8=0x1b, gfx11=0x31)), 752*61046927SAndroid Build Coastguard Worker ("s_set_gpr_idx_off", dst(), src(), op(gfx8=0x1c, gfx10=-1)), 753*61046927SAndroid Build Coastguard Worker ("s_set_gpr_idx_mode", dst(M0), src(M0), op(gfx8=0x1d, gfx10=-1)), 754*61046927SAndroid Build Coastguard Worker ("s_endpgm_ordered_ps_done", dst(), src(), op(gfx9=0x1e, gfx11=-1)), 755*61046927SAndroid Build Coastguard Worker ("s_code_end", dst(), src(), op(gfx10=0x1f)), 756*61046927SAndroid Build Coastguard Worker ("s_inst_prefetch", dst(), src(), op(gfx10=0x20, gfx11=0x04)), #s_set_inst_prefetch_distance in GFX11 757*61046927SAndroid Build Coastguard Worker ("s_clause", dst(), src(), op(gfx10=0x21, gfx11=0x05)), 758*61046927SAndroid Build Coastguard Worker ("s_wait_idle", dst(), src(), op(gfx10=0x22, gfx11=0x0a), InstrClass.Waitcnt), 759*61046927SAndroid Build Coastguard Worker ("s_waitcnt_depctr", dst(), src(), op(gfx10=0x23, gfx11=0x08), InstrClass.Waitcnt), 760*61046927SAndroid Build Coastguard Worker ("s_round_mode", dst(), src(), op(gfx10=0x24, gfx11=0x11)), 761*61046927SAndroid Build Coastguard Worker ("s_denorm_mode", dst(), src(), op(gfx10=0x25, gfx11=0x12)), 762*61046927SAndroid Build Coastguard Worker ("s_ttracedata_imm", dst(), src(), op(gfx10=0x26, gfx11=0x3b)), 763*61046927SAndroid Build Coastguard Worker ("s_delay_alu", dst(), src(), op(gfx11=0x07), InstrClass.Waitcnt), 764*61046927SAndroid Build Coastguard Worker ("s_wait_event", dst(), src(), op(gfx11=0x0b)), 765*61046927SAndroid Build Coastguard Worker ("s_singleuse_vdst", dst(), src(), op(gfx11=0x13), InstrClass.Waitcnt), 766*61046927SAndroid Build Coastguard Worker ("s_barrier_wait", dst(), src(), op(gfx12=0x14), InstrClass.Barrier), 767*61046927SAndroid Build Coastguard Worker ("s_barrier_leave", dst(), src(), op(gfx12=0x15), InstrClass.Barrier), 768*61046927SAndroid Build Coastguard Worker ("s_wait_loadcnt", dst(), src(), op(gfx12=0x40), InstrClass.Waitcnt), 769*61046927SAndroid Build Coastguard Worker ("s_wait_storecnt", dst(), src(), op(gfx12=0x41), InstrClass.Waitcnt), 770*61046927SAndroid Build Coastguard Worker ("s_wait_samplecnt", dst(), src(), op(gfx12=0x42), InstrClass.Waitcnt), 771*61046927SAndroid Build Coastguard Worker ("s_wait_bvhcnt", dst(), src(), op(gfx12=0x43), InstrClass.Waitcnt), 772*61046927SAndroid Build Coastguard Worker ("s_wait_expcnt", dst(), src(), op(gfx12=0x44), InstrClass.Waitcnt), 773*61046927SAndroid Build Coastguard Worker ("s_wait_dscnt", dst(), src(), op(gfx12=0x46), InstrClass.Waitcnt), 774*61046927SAndroid Build Coastguard Worker ("s_wait_kmcnt", dst(), src(), op(gfx12=0x47), InstrClass.Waitcnt), 775*61046927SAndroid Build Coastguard Worker ("s_wait_loadcnt_dscnt", dst(), src(), op(gfx12=0x48), InstrClass.Waitcnt), 776*61046927SAndroid Build Coastguard Worker ("s_wait_storecnt_dscnt", dst(), src(), op(gfx12=0x49), InstrClass.Waitcnt), 777*61046927SAndroid Build Coastguard Worker} 778*61046927SAndroid Build Coastguard Workerfor (name, defs, ops, num, cls) in default_class(SOPP, InstrClass.Salu): 779*61046927SAndroid Build Coastguard Worker insn(name, num, Format.SOPP, cls, definitions = defs, operands = ops) 780*61046927SAndroid Build Coastguard Worker 781*61046927SAndroid Build Coastguard Worker 782*61046927SAndroid Build Coastguard Worker# SMEM instructions: sbase input (2 sgpr), potentially 2 offset inputs, 1 sdata input/output 783*61046927SAndroid Build Coastguard Worker# Unlike GFX10, GFX10.3 does not have SMEM store, atomic or scratch instructions 784*61046927SAndroid Build Coastguard WorkerSMEM = { 785*61046927SAndroid Build Coastguard Worker ("s_load_dword", op(0x00)), #s_load_b32 in GFX11 786*61046927SAndroid Build Coastguard Worker ("s_load_dwordx2", op(0x01)), #s_load_b64 in GFX11 787*61046927SAndroid Build Coastguard Worker ("s_load_dwordx3", op(gfx12=0x05)), #s_load_b96 in GFX12 788*61046927SAndroid Build Coastguard Worker ("s_load_dwordx4", op(0x02)), #s_load_b128 in GFX11 789*61046927SAndroid Build Coastguard Worker ("s_load_dwordx8", op(0x03)), #s_load_b256 in GFX11 790*61046927SAndroid Build Coastguard Worker ("s_load_dwordx16", op(0x04)), #s_load_b512 in GFX11 791*61046927SAndroid Build Coastguard Worker ("s_load_sbyte", op(gfx12=0x08)), #s_load_i8 in GFX12 792*61046927SAndroid Build Coastguard Worker ("s_load_ubyte", op(gfx12=0x09)), #s_load_u8 in GFX12 793*61046927SAndroid Build Coastguard Worker ("s_load_sshort", op(gfx12=0x0a)), #s_load_i16 in GFX12 794*61046927SAndroid Build Coastguard Worker ("s_load_ushort", op(gfx12=0x0b)), #s_load_u16 in GFX12 795*61046927SAndroid Build Coastguard Worker ("s_scratch_load_dword", op(gfx9=0x05, gfx11=-1)), 796*61046927SAndroid Build Coastguard Worker ("s_scratch_load_dwordx2", op(gfx9=0x06, gfx11=-1)), 797*61046927SAndroid Build Coastguard Worker ("s_scratch_load_dwordx4", op(gfx9=0x07, gfx11=-1)), 798*61046927SAndroid Build Coastguard Worker ("s_buffer_load_dword", op(0x08, gfx12=0x10)), #s_buffer_load_b32 in GFX11 799*61046927SAndroid Build Coastguard Worker ("s_buffer_load_dwordx2", op(0x09, gfx12=0x11)), #s_buffer_load_b64 in GFX11 800*61046927SAndroid Build Coastguard Worker ("s_buffer_load_dwordx3", op(gfx12=0x15)), #s_buffer_load_b96 in GFX12 801*61046927SAndroid Build Coastguard Worker ("s_buffer_load_dwordx4", op(0x0a, gfx12=0x12)), #s_buffer_load_b128 in GFX11 802*61046927SAndroid Build Coastguard Worker ("s_buffer_load_dwordx8", op(0x0b, gfx12=0x13)), #s_buffer_load_b256 in GFX11 803*61046927SAndroid Build Coastguard Worker ("s_buffer_load_dwordx16", op(0x0c, gfx12=0x14)), #s_buffer_load_b512 in GFX11 804*61046927SAndroid Build Coastguard Worker ("s_buffer_load_sbyte", op(gfx12=0x18)), #s_buffer_load_i8 in GFX12 805*61046927SAndroid Build Coastguard Worker ("s_buffer_load_ubyte", op(gfx12=0x19)), #s_buffer_load_u8 in GFX12 806*61046927SAndroid Build Coastguard Worker ("s_buffer_load_sshort", op(gfx12=0x1a)), #s_buffer_load_i16 in GFX12 807*61046927SAndroid Build Coastguard Worker ("s_buffer_load_ushort", op(gfx12=0x1b)), #s_buffer_load_u16 in GFX12 808*61046927SAndroid Build Coastguard Worker ("s_store_dword", op(gfx8=0x10, gfx11=-1)), 809*61046927SAndroid Build Coastguard Worker ("s_store_dwordx2", op(gfx8=0x11, gfx11=-1)), 810*61046927SAndroid Build Coastguard Worker ("s_store_dwordx4", op(gfx8=0x12, gfx11=-1)), 811*61046927SAndroid Build Coastguard Worker ("s_scratch_store_dword", op(gfx9=0x15, gfx11=-1)), 812*61046927SAndroid Build Coastguard Worker ("s_scratch_store_dwordx2", op(gfx9=0x16, gfx11=-1)), 813*61046927SAndroid Build Coastguard Worker ("s_scratch_store_dwordx4", op(gfx9=0x17, gfx11=-1)), 814*61046927SAndroid Build Coastguard Worker ("s_buffer_store_dword", op(gfx8=0x18, gfx11=-1)), 815*61046927SAndroid Build Coastguard Worker ("s_buffer_store_dwordx2", op(gfx8=0x19, gfx11=-1)), 816*61046927SAndroid Build Coastguard Worker ("s_buffer_store_dwordx4", op(gfx8=0x1a, gfx11=-1)), 817*61046927SAndroid Build Coastguard Worker ("s_gl1_inv", op(gfx8=0x1f, gfx11=0x20, gfx12=-1)), 818*61046927SAndroid Build Coastguard Worker ("s_dcache_inv", op(0x1f, gfx8=0x20, gfx11=0x21)), 819*61046927SAndroid Build Coastguard Worker ("s_dcache_wb", op(gfx8=0x21, gfx11=-1)), 820*61046927SAndroid Build Coastguard Worker ("s_dcache_inv_vol", op(gfx7=0x1d, gfx8=0x22, gfx10=-1)), 821*61046927SAndroid Build Coastguard Worker ("s_dcache_wb_vol", op(gfx8=0x23, gfx10=-1)), 822*61046927SAndroid Build Coastguard Worker ("s_memtime", op(0x1e, gfx8=0x24, gfx11=-1)), #GFX6-GFX10 823*61046927SAndroid Build Coastguard Worker ("s_memrealtime", op(gfx8=0x25, gfx11=-1)), 824*61046927SAndroid Build Coastguard Worker ("s_atc_probe", op(gfx8=0x26, gfx11=0x22)), 825*61046927SAndroid Build Coastguard Worker ("s_atc_probe_buffer", op(gfx8=0x27, gfx11=0x23)), 826*61046927SAndroid Build Coastguard Worker ("s_dcache_discard", op(gfx9=0x28, gfx11=-1)), 827*61046927SAndroid Build Coastguard Worker ("s_dcache_discard_x2", op(gfx9=0x29, gfx11=-1)), 828*61046927SAndroid Build Coastguard Worker ("s_get_waveid_in_workgroup", op(gfx10=0x2a, gfx11=-1)), 829*61046927SAndroid Build Coastguard Worker ("s_buffer_atomic_swap", op(gfx9=0x40, gfx11=-1)), 830*61046927SAndroid Build Coastguard Worker ("s_buffer_atomic_cmpswap", op(gfx9=0x41, gfx11=-1)), 831*61046927SAndroid Build Coastguard Worker ("s_buffer_atomic_add", op(gfx9=0x42, gfx11=-1)), 832*61046927SAndroid Build Coastguard Worker ("s_buffer_atomic_sub", op(gfx9=0x43, gfx11=-1)), 833*61046927SAndroid Build Coastguard Worker ("s_buffer_atomic_smin", op(gfx9=0x44, gfx11=-1)), 834*61046927SAndroid Build Coastguard Worker ("s_buffer_atomic_umin", op(gfx9=0x45, gfx11=-1)), 835*61046927SAndroid Build Coastguard Worker ("s_buffer_atomic_smax", op(gfx9=0x46, gfx11=-1)), 836*61046927SAndroid Build Coastguard Worker ("s_buffer_atomic_umax", op(gfx9=0x47, gfx11=-1)), 837*61046927SAndroid Build Coastguard Worker ("s_buffer_atomic_and", op(gfx9=0x48, gfx11=-1)), 838*61046927SAndroid Build Coastguard Worker ("s_buffer_atomic_or", op(gfx9=0x49, gfx11=-1)), 839*61046927SAndroid Build Coastguard Worker ("s_buffer_atomic_xor", op(gfx9=0x4a, gfx11=-1)), 840*61046927SAndroid Build Coastguard Worker ("s_buffer_atomic_inc", op(gfx9=0x4b, gfx11=-1)), 841*61046927SAndroid Build Coastguard Worker ("s_buffer_atomic_dec", op(gfx9=0x4c, gfx11=-1)), 842*61046927SAndroid Build Coastguard Worker ("s_buffer_atomic_swap_x2", op(gfx9=0x60, gfx11=-1)), 843*61046927SAndroid Build Coastguard Worker ("s_buffer_atomic_cmpswap_x2", op(gfx9=0x61, gfx11=-1)), 844*61046927SAndroid Build Coastguard Worker ("s_buffer_atomic_add_x2", op(gfx9=0x62, gfx11=-1)), 845*61046927SAndroid Build Coastguard Worker ("s_buffer_atomic_sub_x2", op(gfx9=0x63, gfx11=-1)), 846*61046927SAndroid Build Coastguard Worker ("s_buffer_atomic_smin_x2", op(gfx9=0x64, gfx11=-1)), 847*61046927SAndroid Build Coastguard Worker ("s_buffer_atomic_umin_x2", op(gfx9=0x65, gfx11=-1)), 848*61046927SAndroid Build Coastguard Worker ("s_buffer_atomic_smax_x2", op(gfx9=0x66, gfx11=-1)), 849*61046927SAndroid Build Coastguard Worker ("s_buffer_atomic_umax_x2", op(gfx9=0x67, gfx11=-1)), 850*61046927SAndroid Build Coastguard Worker ("s_buffer_atomic_and_x2", op(gfx9=0x68, gfx11=-1)), 851*61046927SAndroid Build Coastguard Worker ("s_buffer_atomic_or_x2", op(gfx9=0x69, gfx11=-1)), 852*61046927SAndroid Build Coastguard Worker ("s_buffer_atomic_xor_x2", op(gfx9=0x6a, gfx11=-1)), 853*61046927SAndroid Build Coastguard Worker ("s_buffer_atomic_inc_x2", op(gfx9=0x6b, gfx11=-1)), 854*61046927SAndroid Build Coastguard Worker ("s_buffer_atomic_dec_x2", op(gfx9=0x6c, gfx11=-1)), 855*61046927SAndroid Build Coastguard Worker ("s_atomic_swap", op(gfx9=0x80, gfx11=-1)), 856*61046927SAndroid Build Coastguard Worker ("s_atomic_cmpswap", op(gfx9=0x81, gfx11=-1)), 857*61046927SAndroid Build Coastguard Worker ("s_atomic_add", op(gfx9=0x82, gfx11=-1)), 858*61046927SAndroid Build Coastguard Worker ("s_atomic_sub", op(gfx9=0x83, gfx11=-1)), 859*61046927SAndroid Build Coastguard Worker ("s_atomic_smin", op(gfx9=0x84, gfx11=-1)), 860*61046927SAndroid Build Coastguard Worker ("s_atomic_umin", op(gfx9=0x85, gfx11=-1)), 861*61046927SAndroid Build Coastguard Worker ("s_atomic_smax", op(gfx9=0x86, gfx11=-1)), 862*61046927SAndroid Build Coastguard Worker ("s_atomic_umax", op(gfx9=0x87, gfx11=-1)), 863*61046927SAndroid Build Coastguard Worker ("s_atomic_and", op(gfx9=0x88, gfx11=-1)), 864*61046927SAndroid Build Coastguard Worker ("s_atomic_or", op(gfx9=0x89, gfx11=-1)), 865*61046927SAndroid Build Coastguard Worker ("s_atomic_xor", op(gfx9=0x8a, gfx11=-1)), 866*61046927SAndroid Build Coastguard Worker ("s_atomic_inc", op(gfx9=0x8b, gfx11=-1)), 867*61046927SAndroid Build Coastguard Worker ("s_atomic_dec", op(gfx9=0x8c, gfx11=-1)), 868*61046927SAndroid Build Coastguard Worker ("s_atomic_swap_x2", op(gfx9=0xa0, gfx11=-1)), 869*61046927SAndroid Build Coastguard Worker ("s_atomic_cmpswap_x2", op(gfx9=0xa1, gfx11=-1)), 870*61046927SAndroid Build Coastguard Worker ("s_atomic_add_x2", op(gfx9=0xa2, gfx11=-1)), 871*61046927SAndroid Build Coastguard Worker ("s_atomic_sub_x2", op(gfx9=0xa3, gfx11=-1)), 872*61046927SAndroid Build Coastguard Worker ("s_atomic_smin_x2", op(gfx9=0xa4, gfx11=-1)), 873*61046927SAndroid Build Coastguard Worker ("s_atomic_umin_x2", op(gfx9=0xa5, gfx11=-1)), 874*61046927SAndroid Build Coastguard Worker ("s_atomic_smax_x2", op(gfx9=0xa6, gfx11=-1)), 875*61046927SAndroid Build Coastguard Worker ("s_atomic_umax_x2", op(gfx9=0xa7, gfx11=-1)), 876*61046927SAndroid Build Coastguard Worker ("s_atomic_and_x2", op(gfx9=0xa8, gfx11=-1)), 877*61046927SAndroid Build Coastguard Worker ("s_atomic_or_x2", op(gfx9=0xa9, gfx11=-1)), 878*61046927SAndroid Build Coastguard Worker ("s_atomic_xor_x2", op(gfx9=0xaa, gfx11=-1)), 879*61046927SAndroid Build Coastguard Worker ("s_atomic_inc_x2", op(gfx9=0xab, gfx11=-1)), 880*61046927SAndroid Build Coastguard Worker ("s_atomic_dec_x2", op(gfx9=0xac, gfx11=-1)), 881*61046927SAndroid Build Coastguard Worker ("s_prefetch_inst", op(gfx12=0x24)), 882*61046927SAndroid Build Coastguard Worker ("s_prefetch_inst_pc_rel", op(gfx12=0x25)), 883*61046927SAndroid Build Coastguard Worker ("s_prefetch_data", op(gfx12=0x26)), 884*61046927SAndroid Build Coastguard Worker ("s_buffer_prefetch_data", op(gfx12=0x27)), 885*61046927SAndroid Build Coastguard Worker ("s_prefetch_data_pc_rel", op(gfx12=0x28)), 886*61046927SAndroid Build Coastguard Worker} 887*61046927SAndroid Build Coastguard Workerfor (name, num) in SMEM: 888*61046927SAndroid Build Coastguard Worker insn(name, num, Format.SMEM, InstrClass.SMem, is_atomic = "atomic" in name) 889*61046927SAndroid Build Coastguard Worker 890*61046927SAndroid Build Coastguard Worker 891*61046927SAndroid Build Coastguard Worker# VOP2 instructions: 2 inputs, 1 output (+ optional vcc) 892*61046927SAndroid Build Coastguard Worker# TODO: misses some GFX6_7 opcodes which were shifted to VOP3 in GFX8 893*61046927SAndroid Build Coastguard WorkerVOP2 = { 894*61046927SAndroid Build Coastguard Worker ("v_cndmask_b32", True, False, dst(1), src(1, 1, VCC), op(0x00, gfx10=0x01)), 895*61046927SAndroid Build Coastguard Worker ("v_readlane_b32", False, False, dst(1), src(1, 1), op(0x01, gfx8=-1)), 896*61046927SAndroid Build Coastguard Worker ("v_writelane_b32", False, False, dst(1), src(1, 1, 1), op(0x02, gfx8=-1)), 897*61046927SAndroid Build Coastguard Worker ("v_add_f32", True, True, dst(1), src(1, 1), op(0x03, gfx8=0x01, gfx10=0x03)), 898*61046927SAndroid Build Coastguard Worker ("v_sub_f32", True, True, dst(1), src(1, 1), op(0x04, gfx8=0x02, gfx10=0x04)), 899*61046927SAndroid Build Coastguard Worker ("v_subrev_f32", True, True, dst(1), src(1, 1), op(0x05, gfx8=0x03, gfx10=0x05)), 900*61046927SAndroid Build Coastguard Worker ("v_mac_legacy_f32", True, True, dst(1), src(1, 1, 1), op(0x06, gfx8=-1, gfx10=0x06, gfx11=-1)), #GFX6,7,10 901*61046927SAndroid Build Coastguard Worker ("v_fmac_legacy_f32", True, True, dst(1), src(1, 1, 1), op(gfx10=0x06, gfx12=-1)), #GFX10.3+, v_fmac_dx9_zero_f32 in GFX11 902*61046927SAndroid Build Coastguard Worker ("v_mul_legacy_f32", True, True, dst(1), src(1, 1), op(0x07, gfx8=0x04, gfx10=0x07)), #v_mul_dx9_zero_f32 in GFX11 903*61046927SAndroid Build Coastguard Worker ("v_mul_f32", True, True, dst(1), src(1, 1), op(0x08, gfx8=0x05, gfx10=0x08)), 904*61046927SAndroid Build Coastguard Worker ("v_mul_i32_i24", False, False, dst(1), src(1, 1), op(0x09, gfx8=0x06, gfx10=0x09)), 905*61046927SAndroid Build Coastguard Worker ("v_mul_hi_i32_i24", False, False, dst(1), src(1, 1), op(0x0a, gfx8=0x07, gfx10=0x0a)), 906*61046927SAndroid Build Coastguard Worker ("v_mul_u32_u24", False, False, dst(1), src(1, 1), op(0x0b, gfx8=0x08, gfx10=0x0b)), 907*61046927SAndroid Build Coastguard Worker ("v_mul_hi_u32_u24", False, False, dst(1), src(1, 1), op(0x0c, gfx8=0x09, gfx10=0x0c)), 908*61046927SAndroid Build Coastguard Worker ("v_dot4c_i32_i8", False, False, dst(1), src(1, 1, 1), op(gfx9=0x39, gfx10=0x0d, gfx11=-1)), 909*61046927SAndroid Build Coastguard Worker ("v_min_legacy_f32", True, True, dst(1), src(1, 1), op(0x0d, gfx8=-1)), 910*61046927SAndroid Build Coastguard Worker ("v_max_legacy_f32", True, True, dst(1), src(1, 1), op(0x0e, gfx8=-1)), 911*61046927SAndroid Build Coastguard Worker ("v_min_f32", True, True, dst(1), src(1, 1), op(0x0f, gfx8=0x0a, gfx10=0x0f, gfx12=0x15)), #called v_min_num_f32 in GFX12 912*61046927SAndroid Build Coastguard Worker ("v_max_f32", True, True, dst(1), src(1, 1), op(0x10, gfx8=0x0b, gfx10=0x10, gfx12=0x16)), #called v_max_num_f32 in GFX12 913*61046927SAndroid Build Coastguard Worker ("v_min_i32", False, False, dst(1), src(1, 1), op(0x11, gfx8=0x0c, gfx10=0x11)), 914*61046927SAndroid Build Coastguard Worker ("v_max_i32", False, False, dst(1), src(1, 1), op(0x12, gfx8=0x0d, gfx10=0x12)), 915*61046927SAndroid Build Coastguard Worker ("v_min_u32", False, False, dst(1), src(1, 1), op(0x13, gfx8=0x0e, gfx10=0x13)), 916*61046927SAndroid Build Coastguard Worker ("v_max_u32", False, False, dst(1), src(1, 1), op(0x14, gfx8=0x0f, gfx10=0x14)), 917*61046927SAndroid Build Coastguard Worker ("v_lshr_b32", False, False, dst(1), src(1, 1), op(0x15, gfx8=-1)), 918*61046927SAndroid Build Coastguard Worker ("v_lshrrev_b32", False, False, dst(1), src(1, 1), op(0x16, gfx8=0x10, gfx10=0x16, gfx11=0x19)), 919*61046927SAndroid Build Coastguard Worker ("v_ashr_i32", False, False, dst(1), src(1, 1), op(0x17, gfx8=-1)), 920*61046927SAndroid Build Coastguard Worker ("v_ashrrev_i32", False, False, dst(1), src(1, 1), op(0x18, gfx8=0x11, gfx10=0x18, gfx11=0x1a)), 921*61046927SAndroid Build Coastguard Worker ("v_lshl_b32", False, False, dst(1), src(1, 1), op(0x19, gfx8=-1)), 922*61046927SAndroid Build Coastguard Worker ("v_lshlrev_b32", False, False, dst(1), src(1, 1), op(0x1a, gfx8=0x12, gfx10=0x1a, gfx11=0x18)), 923*61046927SAndroid Build Coastguard Worker ("v_and_b32", False, False, dst(1), src(1, 1), op(0x1b, gfx8=0x13, gfx10=0x1b)), 924*61046927SAndroid Build Coastguard Worker ("v_or_b32", False, False, dst(1), src(1, 1), op(0x1c, gfx8=0x14, gfx10=0x1c)), 925*61046927SAndroid Build Coastguard Worker ("v_xor_b32", False, False, dst(1), src(1, 1), op(0x1d, gfx8=0x15, gfx10=0x1d)), 926*61046927SAndroid Build Coastguard Worker ("v_xnor_b32", False, False, dst(1), src(1, 1), op(gfx10=0x1e)), 927*61046927SAndroid Build Coastguard Worker ("v_mac_f32", True, True, dst(1), src(1, 1, 1), op(0x1f, gfx8=0x16, gfx10=0x1f, gfx11=-1)), 928*61046927SAndroid Build Coastguard Worker ("v_madmk_f32", False, False, dst(1), src(1, 1, 1), op(0x20, gfx8=0x17, gfx10=0x20, gfx11=-1)), 929*61046927SAndroid Build Coastguard Worker ("v_madak_f32", False, False, dst(1), src(1, 1, 1), op(0x21, gfx8=0x18, gfx10=0x21, gfx11=-1)), 930*61046927SAndroid Build Coastguard Worker ("v_mbcnt_hi_u32_b32", False, False, dst(1), src(1, 1), op(0x24, gfx8=-1)), 931*61046927SAndroid Build Coastguard Worker ("v_add_co_u32", False, False, dst(1, VCC), src(1, 1), op(0x25, gfx8=0x19, gfx10=-1)), # VOP3B only in RDNA 932*61046927SAndroid Build Coastguard Worker ("v_sub_co_u32", False, False, dst(1, VCC), src(1, 1), op(0x26, gfx8=0x1a, gfx10=-1)), # VOP3B only in RDNA 933*61046927SAndroid Build Coastguard Worker ("v_subrev_co_u32", False, False, dst(1, VCC), src(1, 1), op(0x27, gfx8=0x1b, gfx10=-1)), # VOP3B only in RDNA 934*61046927SAndroid Build Coastguard Worker ("v_addc_co_u32", False, False, dst(1, VCC), src(1, 1, VCC), op(0x28, gfx8=0x1c, gfx10=0x28, gfx11=0x20)), # v_add_co_ci_u32 in RDNA 935*61046927SAndroid Build Coastguard Worker ("v_subb_co_u32", False, False, dst(1, VCC), src(1, 1, VCC), op(0x29, gfx8=0x1d, gfx10=0x29, gfx11=0x21)), # v_sub_co_ci_u32 in RDNA 936*61046927SAndroid Build Coastguard Worker ("v_subbrev_co_u32", False, False, dst(1, VCC), src(1, 1, VCC), op(0x2a, gfx8=0x1e, gfx10=0x2a, gfx11=0x22)), # v_subrev_co_ci_u32 in RDNA 937*61046927SAndroid Build Coastguard Worker ("v_fmac_f32", True, True, dst(1), src(1, 1, 1), op(gfx10=0x2b)), 938*61046927SAndroid Build Coastguard Worker ("v_fmamk_f32", False, False, dst(1), src(1, 1, 1), op(gfx10=0x2c)), 939*61046927SAndroid Build Coastguard Worker ("v_fmaak_f32", False, False, dst(1), src(1, 1, 1), op(gfx10=0x2d)), 940*61046927SAndroid Build Coastguard Worker ("v_cvt_pkrtz_f16_f32", True, False, dst(1), src(1, 1), op(0x2f, gfx8=-1, gfx10=0x2f)), #v_cvt_pk_rtz_f16_f32 in GFX11 941*61046927SAndroid Build Coastguard Worker ("v_add_f16", True, True, dst(1), src(1, 1), op(gfx8=0x1f, gfx10=0x32)), 942*61046927SAndroid Build Coastguard Worker ("v_sub_f16", True, True, dst(1), src(1, 1), op(gfx8=0x20, gfx10=0x33)), 943*61046927SAndroid Build Coastguard Worker ("v_subrev_f16", True, True, dst(1), src(1, 1), op(gfx8=0x21, gfx10=0x34)), 944*61046927SAndroid Build Coastguard Worker ("v_mul_f16", True, True, dst(1), src(1, 1), op(gfx8=0x22, gfx10=0x35)), 945*61046927SAndroid Build Coastguard Worker ("v_mac_f16", True, True, dst(1), src(1, 1, 1), op(gfx8=0x23, gfx10=-1)), 946*61046927SAndroid Build Coastguard Worker ("v_madmk_f16", False, False, dst(1), src(1, 1, 1), op(gfx8=0x24, gfx10=-1)), 947*61046927SAndroid Build Coastguard Worker ("v_madak_f16", False, False, dst(1), src(1, 1, 1), op(gfx8=0x25, gfx10=-1)), 948*61046927SAndroid Build Coastguard Worker ("v_add_u16", False, False, dst(1), src(1, 1), op(gfx8=0x26, gfx10=-1)), 949*61046927SAndroid Build Coastguard Worker ("v_sub_u16", False, False, dst(1), src(1, 1), op(gfx8=0x27, gfx10=-1)), 950*61046927SAndroid Build Coastguard Worker ("v_subrev_u16", False, False, dst(1), src(1, 1), op(gfx8=0x28, gfx10=-1)), 951*61046927SAndroid Build Coastguard Worker ("v_mul_lo_u16", False, False, dst(1), src(1, 1), op(gfx8=0x29, gfx10=-1)), 952*61046927SAndroid Build Coastguard Worker ("v_lshlrev_b16", False, False, dst(1), src(1, 1), op(gfx8=0x2a, gfx10=-1)), 953*61046927SAndroid Build Coastguard Worker ("v_lshrrev_b16", False, False, dst(1), src(1, 1), op(gfx8=0x2b, gfx10=-1)), 954*61046927SAndroid Build Coastguard Worker ("v_ashrrev_i16", False, False, dst(1), src(1, 1), op(gfx8=0x2c, gfx10=-1)), 955*61046927SAndroid Build Coastguard Worker ("v_max_f16", True, True, dst(1), src(1, 1), op(gfx8=0x2d, gfx10=0x39, gfx12=0x31)), #called v_max_num_f16 in GFX12 956*61046927SAndroid Build Coastguard Worker ("v_min_f16", True, True, dst(1), src(1, 1), op(gfx8=0x2e, gfx10=0x3a, gfx12=0x30)), #called v_min_num_f16 in GFX12 957*61046927SAndroid Build Coastguard Worker ("v_max_u16", False, False, dst(1), src(1, 1), op(gfx8=0x2f, gfx10=-1)), 958*61046927SAndroid Build Coastguard Worker ("v_max_i16", False, False, dst(1), src(1, 1), op(gfx8=0x30, gfx10=-1)), 959*61046927SAndroid Build Coastguard Worker ("v_min_u16", False, False, dst(1), src(1, 1), op(gfx8=0x31, gfx10=-1)), 960*61046927SAndroid Build Coastguard Worker ("v_min_i16", False, False, dst(1), src(1, 1), op(gfx8=0x32, gfx10=-1)), 961*61046927SAndroid Build Coastguard Worker ("v_ldexp_f16", False, True, dst(1), src(1, 1), op(gfx8=0x33, gfx10=0x3b)), 962*61046927SAndroid Build Coastguard Worker ("v_add_u32", False, False, dst(1), src(1, 1), op(gfx9=0x34, gfx10=0x25)), # called v_add_nc_u32 in RDNA 963*61046927SAndroid Build Coastguard Worker ("v_sub_u32", False, False, dst(1), src(1, 1), op(gfx9=0x35, gfx10=0x26)), # called v_sub_nc_u32 in RDNA 964*61046927SAndroid Build Coastguard Worker ("v_subrev_u32", False, False, dst(1), src(1, 1), op(gfx9=0x36, gfx10=0x27)), # called v_subrev_nc_u32 in RDNA 965*61046927SAndroid Build Coastguard Worker ("v_fmac_f16", True, True, dst(1), src(1, 1, 1), op(gfx10=0x36)), 966*61046927SAndroid Build Coastguard Worker ("v_fmamk_f16", False, False, dst(1), src(1, 1, 1), op(gfx10=0x37)), 967*61046927SAndroid Build Coastguard Worker ("v_fmaak_f16", False, False, dst(1), src(1, 1, 1), op(gfx10=0x38)), 968*61046927SAndroid Build Coastguard Worker ("v_pk_fmac_f16", False, False, dst(1), src(1, 1, 1), op(gfx10=0x3c)), 969*61046927SAndroid Build Coastguard Worker ("v_dot2c_f32_f16", False, False, dst(1), src(1, 1, 1), op(gfx9=0x37, gfx10=0x02, gfx12=-1)), #v_dot2acc_f32_f16 in GFX11 970*61046927SAndroid Build Coastguard Worker ("v_add_f64", True, True, dst(2), src(2, 2), op(gfx12=0x02), InstrClass.ValuDoubleAdd), 971*61046927SAndroid Build Coastguard Worker ("v_mul_f64", True, True, dst(2), src(2, 2), op(gfx12=0x06), InstrClass.ValuDoubleAdd), 972*61046927SAndroid Build Coastguard Worker ("v_lshlrev_b64", False, False, dst(2), src(1, 2), op(gfx12=0x1f), InstrClass.Valu64), 973*61046927SAndroid Build Coastguard Worker ("v_min_f64", True, True, dst(2), src(2, 2), op(gfx12=0x0d), InstrClass.ValuDoubleAdd), 974*61046927SAndroid Build Coastguard Worker ("v_max_f64", True, True, dst(2), src(2, 2), op(gfx12=0x0e), InstrClass.ValuDoubleAdd), 975*61046927SAndroid Build Coastguard Worker} 976*61046927SAndroid Build Coastguard Workerfor (name, in_mod, out_mod, defs, ops, num, cls) in default_class(VOP2, InstrClass.Valu32): 977*61046927SAndroid Build Coastguard Worker insn(name, num, Format.VOP2, cls, in_mod, out_mod, definitions = defs, operands = ops) 978*61046927SAndroid Build Coastguard Worker 979*61046927SAndroid Build Coastguard Worker 980*61046927SAndroid Build Coastguard Worker# VOP1 instructions: instructions with 1 input and 1 output 981*61046927SAndroid Build Coastguard WorkerVOP1 = { 982*61046927SAndroid Build Coastguard Worker ("v_nop", False, False, dst(), src(), op(0x00)), 983*61046927SAndroid Build Coastguard Worker ("v_mov_b32", False, False, dst(1), src(1), op(0x01)), 984*61046927SAndroid Build Coastguard Worker ("v_readfirstlane_b32", False, False, dst(1), src(1), op(0x02)), 985*61046927SAndroid Build Coastguard Worker ("v_cvt_i32_f64", True, False, dst(1), src(2), op(0x03), InstrClass.ValuDoubleConvert), 986*61046927SAndroid Build Coastguard Worker ("v_cvt_f64_i32", False, True, dst(2), src(1), op(0x04), InstrClass.ValuDoubleConvert), 987*61046927SAndroid Build Coastguard Worker ("v_cvt_f32_i32", False, True, dst(1), src(1), op(0x05)), 988*61046927SAndroid Build Coastguard Worker ("v_cvt_f32_u32", False, True, dst(1), src(1), op(0x06)), 989*61046927SAndroid Build Coastguard Worker ("v_cvt_u32_f32", True, False, dst(1), src(1), op(0x07)), 990*61046927SAndroid Build Coastguard Worker ("v_cvt_i32_f32", True, False, dst(1), src(1), op(0x08)), 991*61046927SAndroid Build Coastguard Worker ("v_cvt_f16_f32", True, True, dst(1), src(1), op(0x0a)), 992*61046927SAndroid Build Coastguard Worker ("p_v_cvt_f16_f32_rtne", True, True, dst(1), src(1), op(-1)), 993*61046927SAndroid Build Coastguard Worker ("v_cvt_f32_f16", True, True, dst(1), src(1), op(0x0b)), 994*61046927SAndroid Build Coastguard Worker ("v_cvt_rpi_i32_f32", True, False, dst(1), src(1), op(0x0c)), #v_cvt_nearest_i32_f32 in GFX11 995*61046927SAndroid Build Coastguard Worker ("v_cvt_flr_i32_f32", True, False, dst(1), src(1), op(0x0d)),#v_cvt_floor_i32_f32 in GFX11 996*61046927SAndroid Build Coastguard Worker ("v_cvt_off_f32_i4", False, True, dst(1), src(1), op(0x0e)), 997*61046927SAndroid Build Coastguard Worker ("v_cvt_f32_f64", True, True, dst(1), src(2), op(0x0f), InstrClass.ValuDoubleConvert), 998*61046927SAndroid Build Coastguard Worker ("v_cvt_f64_f32", True, True, dst(2), src(1), op(0x10), InstrClass.ValuDoubleConvert), 999*61046927SAndroid Build Coastguard Worker ("v_cvt_f32_ubyte0", False, True, dst(1), src(1), op(0x11)), 1000*61046927SAndroid Build Coastguard Worker ("v_cvt_f32_ubyte1", False, True, dst(1), src(1), op(0x12)), 1001*61046927SAndroid Build Coastguard Worker ("v_cvt_f32_ubyte2", False, True, dst(1), src(1), op(0x13)), 1002*61046927SAndroid Build Coastguard Worker ("v_cvt_f32_ubyte3", False, True, dst(1), src(1), op(0x14)), 1003*61046927SAndroid Build Coastguard Worker ("v_cvt_u32_f64", True, False, dst(1), src(2), op(0x15), InstrClass.ValuDoubleConvert), 1004*61046927SAndroid Build Coastguard Worker ("v_cvt_f64_u32", False, True, dst(2), src(1), op(0x16), InstrClass.ValuDoubleConvert), 1005*61046927SAndroid Build Coastguard Worker ("v_trunc_f64", True, True, dst(2), src(2), op(gfx7=0x17), InstrClass.ValuDouble), 1006*61046927SAndroid Build Coastguard Worker ("v_ceil_f64", True, True, dst(2), src(2), op(gfx7=0x18), InstrClass.ValuDouble), 1007*61046927SAndroid Build Coastguard Worker ("v_rndne_f64", True, True, dst(2), src(2), op(gfx7=0x19), InstrClass.ValuDouble), 1008*61046927SAndroid Build Coastguard Worker ("v_floor_f64", True, True, dst(2), src(2), op(gfx7=0x1a), InstrClass.ValuDouble), 1009*61046927SAndroid Build Coastguard Worker ("v_pipeflush", False, False, dst(), src(), op(gfx10=0x1b)), 1010*61046927SAndroid Build Coastguard Worker ("v_fract_f32", True, True, dst(1), src(1), op(0x20, gfx8=0x1b, gfx10=0x20)), 1011*61046927SAndroid Build Coastguard Worker ("v_trunc_f32", True, True, dst(1), src(1), op(0x21, gfx8=0x1c, gfx10=0x21)), 1012*61046927SAndroid Build Coastguard Worker ("v_ceil_f32", True, True, dst(1), src(1), op(0x22, gfx8=0x1d, gfx10=0x22)), 1013*61046927SAndroid Build Coastguard Worker ("v_rndne_f32", True, True, dst(1), src(1), op(0x23, gfx8=0x1e, gfx10=0x23)), 1014*61046927SAndroid Build Coastguard Worker ("v_floor_f32", True, True, dst(1), src(1), op(0x24, gfx8=0x1f, gfx10=0x24)), 1015*61046927SAndroid Build Coastguard Worker ("v_exp_f32", True, True, dst(1), src(1), op(0x25, gfx8=0x20, gfx10=0x25), InstrClass.ValuTranscendental32), 1016*61046927SAndroid Build Coastguard Worker ("v_log_clamp_f32", True, True, dst(1), src(1), op(0x26, gfx8=-1), InstrClass.ValuTranscendental32), 1017*61046927SAndroid Build Coastguard Worker ("v_log_f32", True, True, dst(1), src(1), op(0x27, gfx8=0x21, gfx10=0x27), InstrClass.ValuTranscendental32), 1018*61046927SAndroid Build Coastguard Worker ("v_rcp_clamp_f32", True, True, dst(1), src(1), op(0x28, gfx8=-1), InstrClass.ValuTranscendental32), 1019*61046927SAndroid Build Coastguard Worker ("v_rcp_legacy_f32", True, True, dst(1), src(1), op(0x29, gfx8=-1), InstrClass.ValuTranscendental32), 1020*61046927SAndroid Build Coastguard Worker ("v_rcp_f32", True, True, dst(1), src(1), op(0x2a, gfx8=0x22, gfx10=0x2a), InstrClass.ValuTranscendental32), 1021*61046927SAndroid Build Coastguard Worker ("v_rcp_iflag_f32", True, True, dst(1), src(1), op(0x2b, gfx8=0x23, gfx10=0x2b), InstrClass.ValuTranscendental32), 1022*61046927SAndroid Build Coastguard Worker ("v_rsq_clamp_f32", True, True, dst(1), src(1), op(0x2c, gfx8=-1), InstrClass.ValuTranscendental32), 1023*61046927SAndroid Build Coastguard Worker ("v_rsq_legacy_f32", True, True, dst(1), src(1), op(0x2d, gfx8=-1), InstrClass.ValuTranscendental32), 1024*61046927SAndroid Build Coastguard Worker ("v_rsq_f32", True, True, dst(1), src(1), op(0x2e, gfx8=0x24, gfx10=0x2e), InstrClass.ValuTranscendental32), 1025*61046927SAndroid Build Coastguard Worker ("v_rcp_f64", True, True, dst(2), src(2), op(0x2f, gfx8=0x25, gfx10=0x2f), InstrClass.ValuDoubleTranscendental), 1026*61046927SAndroid Build Coastguard Worker ("v_rcp_clamp_f64", True, True, dst(2), src(2), op(0x30, gfx8=-1), InstrClass.ValuDoubleTranscendental), 1027*61046927SAndroid Build Coastguard Worker ("v_rsq_f64", True, True, dst(2), src(2), op(0x31, gfx8=0x26, gfx10=0x31), InstrClass.ValuDoubleTranscendental), 1028*61046927SAndroid Build Coastguard Worker ("v_rsq_clamp_f64", True, True, dst(2), src(2), op(0x32, gfx8=-1), InstrClass.ValuDoubleTranscendental), 1029*61046927SAndroid Build Coastguard Worker ("v_sqrt_f32", True, True, dst(1), src(1), op(0x33, gfx8=0x27, gfx10=0x33), InstrClass.ValuTranscendental32), 1030*61046927SAndroid Build Coastguard Worker ("v_sqrt_f64", True, True, dst(2), src(2), op(0x34, gfx8=0x28, gfx10=0x34), InstrClass.ValuDoubleTranscendental), 1031*61046927SAndroid Build Coastguard Worker ("v_sin_f32", True, True, dst(1), src(1), op(0x35, gfx8=0x29, gfx10=0x35), InstrClass.ValuTranscendental32), 1032*61046927SAndroid Build Coastguard Worker ("v_cos_f32", True, True, dst(1), src(1), op(0x36, gfx8=0x2a, gfx10=0x36), InstrClass.ValuTranscendental32), 1033*61046927SAndroid Build Coastguard Worker ("v_not_b32", False, False, dst(1), src(1), op(0x37, gfx8=0x2b, gfx10=0x37)), 1034*61046927SAndroid Build Coastguard Worker ("v_bfrev_b32", False, False, dst(1), src(1), op(0x38, gfx8=0x2c, gfx10=0x38)), 1035*61046927SAndroid Build Coastguard Worker ("v_ffbh_u32", False, False, dst(1), src(1), op(0x39, gfx8=0x2d, gfx10=0x39)), #v_clz_i32_u32 in GFX11 1036*61046927SAndroid Build Coastguard Worker ("v_ffbl_b32", False, False, dst(1), src(1), op(0x3a, gfx8=0x2e, gfx10=0x3a)), #v_ctz_i32_b32 in GFX11 1037*61046927SAndroid Build Coastguard Worker ("v_ffbh_i32", False, False, dst(1), src(1), op(0x3b, gfx8=0x2f, gfx10=0x3b)), #v_cls_i32 in GFX11 1038*61046927SAndroid Build Coastguard Worker ("v_frexp_exp_i32_f64", True, False, dst(1), src(2), op(0x3c, gfx8=0x30, gfx10=0x3c), InstrClass.ValuDouble), 1039*61046927SAndroid Build Coastguard Worker ("v_frexp_mant_f64", True, False, dst(2), src(2), op(0x3d, gfx8=0x31, gfx10=0x3d), InstrClass.ValuDouble), 1040*61046927SAndroid Build Coastguard Worker ("v_fract_f64", True, True, dst(2), src(2), op(0x3e, gfx8=0x32, gfx10=0x3e), InstrClass.ValuDouble), 1041*61046927SAndroid Build Coastguard Worker ("v_frexp_exp_i32_f32", True, False, dst(1), src(1), op(0x3f, gfx8=0x33, gfx10=0x3f)), 1042*61046927SAndroid Build Coastguard Worker ("v_frexp_mant_f32", True, False, dst(1), src(1), op(0x40, gfx8=0x34, gfx10=0x40)), 1043*61046927SAndroid Build Coastguard Worker ("v_clrexcp", False, False, dst(), src(), op(0x41, gfx8=0x35, gfx10=0x41, gfx11=-1)), 1044*61046927SAndroid Build Coastguard Worker ("v_movreld_b32", False, False, dst(1), src(1, M0), op(0x42, gfx8=0x36, gfx9=-1, gfx10=0x42)), 1045*61046927SAndroid Build Coastguard Worker ("v_movrels_b32", False, False, dst(1), src(1, M0), op(0x43, gfx8=0x37, gfx9=-1, gfx10=0x43)), 1046*61046927SAndroid Build Coastguard Worker ("v_movrelsd_b32", False, False, dst(1), src(1, M0), op(0x44, gfx8=0x38, gfx9=-1, gfx10=0x44)), 1047*61046927SAndroid Build Coastguard Worker ("v_movrelsd_2_b32", False, False, dst(1), src(1, M0), op(gfx10=0x48)), 1048*61046927SAndroid Build Coastguard Worker ("v_screen_partition_4se_b32", False, False, dst(1), src(1), op(gfx9=0x37, gfx10=-1)), 1049*61046927SAndroid Build Coastguard Worker ("v_cvt_f16_u16", False, True, dst(1), src(1), op(gfx8=0x39, gfx10=0x50)), 1050*61046927SAndroid Build Coastguard Worker ("v_cvt_f16_i16", False, True, dst(1), src(1), op(gfx8=0x3a, gfx10=0x51)), 1051*61046927SAndroid Build Coastguard Worker ("v_cvt_u16_f16", True, False, dst(1), src(1), op(gfx8=0x3b, gfx10=0x52)), 1052*61046927SAndroid Build Coastguard Worker ("v_cvt_i16_f16", True, False, dst(1), src(1), op(gfx8=0x3c, gfx10=0x53)), 1053*61046927SAndroid Build Coastguard Worker ("v_rcp_f16", True, True, dst(1), src(1), op(gfx8=0x3d, gfx10=0x54), InstrClass.ValuTranscendental32), 1054*61046927SAndroid Build Coastguard Worker ("v_sqrt_f16", True, True, dst(1), src(1), op(gfx8=0x3e, gfx10=0x55), InstrClass.ValuTranscendental32), 1055*61046927SAndroid Build Coastguard Worker ("v_rsq_f16", True, True, dst(1), src(1), op(gfx8=0x3f, gfx10=0x56), InstrClass.ValuTranscendental32), 1056*61046927SAndroid Build Coastguard Worker ("v_log_f16", True, True, dst(1), src(1), op(gfx8=0x40, gfx10=0x57), InstrClass.ValuTranscendental32), 1057*61046927SAndroid Build Coastguard Worker ("v_exp_f16", True, True, dst(1), src(1), op(gfx8=0x41, gfx10=0x58), InstrClass.ValuTranscendental32), 1058*61046927SAndroid Build Coastguard Worker ("v_frexp_mant_f16", True, False, dst(1), src(1), op(gfx8=0x42, gfx10=0x59)), 1059*61046927SAndroid Build Coastguard Worker ("v_frexp_exp_i16_f16", True, False, dst(1), src(1), op(gfx8=0x43, gfx10=0x5a)), 1060*61046927SAndroid Build Coastguard Worker ("v_floor_f16", True, True, dst(1), src(1), op(gfx8=0x44, gfx10=0x5b)), 1061*61046927SAndroid Build Coastguard Worker ("v_ceil_f16", True, True, dst(1), src(1), op(gfx8=0x45, gfx10=0x5c)), 1062*61046927SAndroid Build Coastguard Worker ("v_trunc_f16", True, True, dst(1), src(1), op(gfx8=0x46, gfx10=0x5d)), 1063*61046927SAndroid Build Coastguard Worker ("v_rndne_f16", True, True, dst(1), src(1), op(gfx8=0x47, gfx10=0x5e)), 1064*61046927SAndroid Build Coastguard Worker ("v_fract_f16", True, True, dst(1), src(1), op(gfx8=0x48, gfx10=0x5f)), 1065*61046927SAndroid Build Coastguard Worker ("v_sin_f16", True, True, dst(1), src(1), op(gfx8=0x49, gfx10=0x60), InstrClass.ValuTranscendental32), 1066*61046927SAndroid Build Coastguard Worker ("v_cos_f16", True, True, dst(1), src(1), op(gfx8=0x4a, gfx10=0x61), InstrClass.ValuTranscendental32), 1067*61046927SAndroid Build Coastguard Worker ("v_exp_legacy_f32", True, True, dst(1), src(1), op(gfx7=0x46, gfx8=0x4b, gfx10=-1), InstrClass.ValuTranscendental32), 1068*61046927SAndroid Build Coastguard Worker ("v_log_legacy_f32", True, True, dst(1), src(1), op(gfx7=0x45, gfx8=0x4c, gfx10=-1), InstrClass.ValuTranscendental32), 1069*61046927SAndroid Build Coastguard Worker ("v_sat_pk_u8_i16", False, False, dst(1), src(1), op(gfx9=0x4f, gfx10=0x62)), 1070*61046927SAndroid Build Coastguard Worker ("v_cvt_norm_i16_f16", True, False, dst(1), src(1), op(gfx9=0x4d, gfx10=0x63)), 1071*61046927SAndroid Build Coastguard Worker ("v_cvt_norm_u16_f16", True, False, dst(1), src(1), op(gfx9=0x4e, gfx10=0x64)), 1072*61046927SAndroid Build Coastguard Worker ("v_swap_b32", False, False, dst(1, 1), src(1, 1), op(gfx9=0x51, gfx10=0x65)), 1073*61046927SAndroid Build Coastguard Worker ("v_swaprel_b32", False, False, dst(1, 1), src(1, 1, M0), op(gfx10=0x68)), 1074*61046927SAndroid Build Coastguard Worker ("v_permlane64_b32", False, False, dst(1), src(1), op(gfx11=0x67)), #cannot use VOP3 1075*61046927SAndroid Build Coastguard Worker ("v_not_b16", False, False, dst(1), src(1), op(gfx11=0x69)), 1076*61046927SAndroid Build Coastguard Worker ("v_cvt_i32_i16", False, False, dst(1), src(1), op(gfx11=0x6a)), 1077*61046927SAndroid Build Coastguard Worker ("v_cvt_u32_u16", False, False, dst(1), src(1), op(gfx11=0x6b)), 1078*61046927SAndroid Build Coastguard Worker ("v_mov_b16", True, False, dst(1), src(1), op(gfx11=0x1c)), 1079*61046927SAndroid Build Coastguard Worker ("v_swap_b16", False, False, dst(1, 1), src(1, 1), op(gfx11=0x66)), 1080*61046927SAndroid Build Coastguard Worker ("v_cvt_f32_fp8", False, False, dst(1), src(1), op(gfx12=0x6c)), 1081*61046927SAndroid Build Coastguard Worker ("v_cvt_f32_bf8", False, False, dst(1), src(1), op(gfx12=0x6d)), 1082*61046927SAndroid Build Coastguard Worker ("v_cvt_pk_f32_fp8", False, False, dst(2), src(1), op(gfx12=0x6e)), 1083*61046927SAndroid Build Coastguard Worker ("v_cvt_pk_f32_bf8", False, False, dst(2), src(1), op(gfx12=0x6f)), 1084*61046927SAndroid Build Coastguard Worker} 1085*61046927SAndroid Build Coastguard Workerfor (name, in_mod, out_mod, defs, ops, num, cls) in default_class(VOP1, InstrClass.Valu32): 1086*61046927SAndroid Build Coastguard Worker insn(name, num, Format.VOP1, cls, in_mod, out_mod, definitions = defs, operands = ops) 1087*61046927SAndroid Build Coastguard Worker 1088*61046927SAndroid Build Coastguard Worker 1089*61046927SAndroid Build Coastguard Worker# VOPC instructions: 1090*61046927SAndroid Build Coastguard Worker 1091*61046927SAndroid Build Coastguard WorkerVOPC_CLASS = { 1092*61046927SAndroid Build Coastguard Worker ("v_cmp_class_f32", dst(VCC), src(1, 1), op(0x88, gfx8=0x10, gfx10=0x88, gfx11=0x7e)), 1093*61046927SAndroid Build Coastguard Worker ("v_cmp_class_f16", dst(VCC), src(1, 1), op(gfx8=0x14, gfx10=0x8f, gfx11=0x7d)), 1094*61046927SAndroid Build Coastguard Worker ("v_cmpx_class_f32", dst(EXEC), src(1, 1), op(0x98, gfx8=0x11, gfx10=0x98, gfx11=0xfe)), 1095*61046927SAndroid Build Coastguard Worker ("v_cmpx_class_f16", dst(EXEC), src(1, 1), op(gfx8=0x15, gfx10=0x9f, gfx11=0xfd)), 1096*61046927SAndroid Build Coastguard Worker ("v_cmp_class_f64", dst(VCC), src(2, 1), op(0xa8, gfx8=0x12, gfx10=0xa8, gfx11=0x7f), InstrClass.ValuDouble), 1097*61046927SAndroid Build Coastguard Worker ("v_cmpx_class_f64", dst(EXEC), src(2, 1), op(0xb8, gfx8=0x13, gfx10=0xb8, gfx11=0xff), InstrClass.ValuDouble), 1098*61046927SAndroid Build Coastguard Worker} 1099*61046927SAndroid Build Coastguard Workerfor (name, defs, ops, num, cls) in default_class(VOPC_CLASS, InstrClass.Valu32): 1100*61046927SAndroid Build Coastguard Worker insn(name, num, Format.VOPC, cls, True, False, definitions = defs, operands = ops) 1101*61046927SAndroid Build Coastguard Worker 1102*61046927SAndroid Build Coastguard WorkerVopcDataType = collections.namedtuple('VopcDataTypeInfo', 1103*61046927SAndroid Build Coastguard Worker ['kind', 'size', 'gfx6', 'gfx8', 'gfx10', 'gfx11']) 1104*61046927SAndroid Build Coastguard Worker 1105*61046927SAndroid Build Coastguard Worker# kind, size, gfx6, gfx8, gfx10,gfx11 1106*61046927SAndroid Build Coastguard WorkerF16 = VopcDataType('f', 16, 0, 0x20, 0xc8, 0x00) 1107*61046927SAndroid Build Coastguard WorkerF32 = VopcDataType('f', 32, 0x00, 0x40, 0x00, 0x10) 1108*61046927SAndroid Build Coastguard WorkerF64 = VopcDataType('f', 64, 0x20, 0x60, 0x20, 0x20) 1109*61046927SAndroid Build Coastguard WorkerI16 = VopcDataType('i', 16, 0, 0xa0, 0x88, 0x30) 1110*61046927SAndroid Build Coastguard WorkerI32 = VopcDataType('i', 32, 0x80, 0xc0, 0x80, 0x40) 1111*61046927SAndroid Build Coastguard WorkerI64 = VopcDataType('i', 64, 0xa0, 0xe0, 0xa0, 0x50) 1112*61046927SAndroid Build Coastguard WorkerU16 = VopcDataType('u', 16, 0, 0xa8, 0xa8, 0x38) 1113*61046927SAndroid Build Coastguard WorkerU32 = VopcDataType('u', 32, 0xc0, 0xc8, 0xc0, 0x48) 1114*61046927SAndroid Build Coastguard WorkerU64 = VopcDataType('u', 64, 0xe0, 0xe8, 0xe0, 0x58) 1115*61046927SAndroid Build Coastguard Workerdtypes = [F16, F32, F64, I16, I32, I64, U16, U32, U64] 1116*61046927SAndroid Build Coastguard Worker 1117*61046927SAndroid Build Coastguard WorkerCOMPF = ["f", "lt", "eq", "le", "gt", "lg", "ge", "o", "u", "nge", "nlg", "ngt", "nle", "neq", "nlt", "tru"] 1118*61046927SAndroid Build Coastguard WorkerCOMPI = ["f", "lt", "eq", "le", "gt", "lg", "ge", "tru"] 1119*61046927SAndroid Build Coastguard Workerfor comp, dtype, cmps, cmpx in itertools.product(range(16), dtypes, range(1), range(2)): 1120*61046927SAndroid Build Coastguard Worker if (comp >= 8 or cmps) and dtype.kind != 'f': 1121*61046927SAndroid Build Coastguard Worker continue 1122*61046927SAndroid Build Coastguard Worker 1123*61046927SAndroid Build Coastguard Worker name = COMPF[comp] if dtype.kind == 'f' else COMPI[comp] 1124*61046927SAndroid Build Coastguard Worker name = 'v_cmp{}{}_{}_{}{}'.format('s' if cmps else '', 'x' if cmpx else '', name, dtype.kind, dtype.size) 1125*61046927SAndroid Build Coastguard Worker 1126*61046927SAndroid Build Coastguard Worker gfx6 = comp | (cmpx<<4) | (cmps<<6) | dtype.gfx6 1127*61046927SAndroid Build Coastguard Worker gfx8 = comp | (cmpx<<4) | dtype.gfx8 1128*61046927SAndroid Build Coastguard Worker if dtype == F16: 1129*61046927SAndroid Build Coastguard Worker gfx10 = (comp & 0x7) | ((comp & 0x8) << 2) | (cmpx<<4) | dtype.gfx10 1130*61046927SAndroid Build Coastguard Worker else: 1131*61046927SAndroid Build Coastguard Worker gfx10 = comp | (cmpx<<4) | dtype.gfx10 1132*61046927SAndroid Build Coastguard Worker gfx11 = comp | (cmpx<<7) | dtype.gfx11 1133*61046927SAndroid Build Coastguard Worker 1134*61046927SAndroid Build Coastguard Worker if cmps: 1135*61046927SAndroid Build Coastguard Worker gfx8 = -1 1136*61046927SAndroid Build Coastguard Worker gfx10 = -1 1137*61046927SAndroid Build Coastguard Worker gfx11 = -1 1138*61046927SAndroid Build Coastguard Worker 1139*61046927SAndroid Build Coastguard Worker if dtype.size == 16: 1140*61046927SAndroid Build Coastguard Worker gfx6 = -1 1141*61046927SAndroid Build Coastguard Worker 1142*61046927SAndroid Build Coastguard Worker if dtype in [I16, U16] and comp in [0, 7]: 1143*61046927SAndroid Build Coastguard Worker gfx10 = -1 1144*61046927SAndroid Build Coastguard Worker gfx11 = -1 1145*61046927SAndroid Build Coastguard Worker 1146*61046927SAndroid Build Coastguard Worker if dtype.kind == 'i': 1147*61046927SAndroid Build Coastguard Worker gfx12 = -1 if comp in [0, 7] else gfx11 1148*61046927SAndroid Build Coastguard Worker else: 1149*61046927SAndroid Build Coastguard Worker gfx12 = -1 if comp in [0, 15] else gfx11 1150*61046927SAndroid Build Coastguard Worker 1151*61046927SAndroid Build Coastguard Worker cls = InstrClass.Valu32 1152*61046927SAndroid Build Coastguard Worker if dtype == F64: 1153*61046927SAndroid Build Coastguard Worker cls = InstrClass.ValuDouble 1154*61046927SAndroid Build Coastguard Worker elif dtype in [I64, U64]: 1155*61046927SAndroid Build Coastguard Worker cls = InstrClass.Valu64 1156*61046927SAndroid Build Coastguard Worker 1157*61046927SAndroid Build Coastguard Worker enc = Opcode(gfx6, gfx6, gfx8, gfx8, gfx10, gfx11, gfx12) 1158*61046927SAndroid Build Coastguard Worker insn(name, enc, Format.VOPC, cls, dtype.kind == 'f', False, 1159*61046927SAndroid Build Coastguard Worker definitions = dst(EXEC if cmpx else VCC), 1160*61046927SAndroid Build Coastguard Worker operands = src(2, 2) if dtype.size == 64 else src(1, 1)) 1161*61046927SAndroid Build Coastguard Worker 1162*61046927SAndroid Build Coastguard Worker 1163*61046927SAndroid Build Coastguard Worker# VOPP instructions: packed 16bit instructions - 2 or 3 inputs and 1 output 1164*61046927SAndroid Build Coastguard WorkerVOPP = { 1165*61046927SAndroid Build Coastguard Worker ("v_pk_mad_i16", False, dst(1), src(1, 1, 1), op(gfx9=0x00)), 1166*61046927SAndroid Build Coastguard Worker ("v_pk_mul_lo_u16", False, dst(1), src(1, 1), op(gfx9=0x01)), 1167*61046927SAndroid Build Coastguard Worker ("v_pk_add_i16", False, dst(1), src(1, 1), op(gfx9=0x02)), 1168*61046927SAndroid Build Coastguard Worker ("v_pk_sub_i16", False, dst(1), src(1, 1), op(gfx9=0x03)), 1169*61046927SAndroid Build Coastguard Worker ("v_pk_lshlrev_b16", False, dst(1), src(1, 1), op(gfx9=0x04)), 1170*61046927SAndroid Build Coastguard Worker ("v_pk_lshrrev_b16", False, dst(1), src(1, 1), op(gfx9=0x05)), 1171*61046927SAndroid Build Coastguard Worker ("v_pk_ashrrev_i16", False, dst(1), src(1, 1), op(gfx9=0x06)), 1172*61046927SAndroid Build Coastguard Worker ("v_pk_max_i16", False, dst(1), src(1, 1), op(gfx9=0x07)), 1173*61046927SAndroid Build Coastguard Worker ("v_pk_min_i16", False, dst(1), src(1, 1), op(gfx9=0x08)), 1174*61046927SAndroid Build Coastguard Worker ("v_pk_mad_u16", False, dst(1), src(1, 1, 1), op(gfx9=0x09)), 1175*61046927SAndroid Build Coastguard Worker ("v_pk_add_u16", False, dst(1), src(1, 1), op(gfx9=0x0a)), 1176*61046927SAndroid Build Coastguard Worker ("v_pk_sub_u16", False, dst(1), src(1, 1), op(gfx9=0x0b)), 1177*61046927SAndroid Build Coastguard Worker ("v_pk_max_u16", False, dst(1), src(1, 1), op(gfx9=0x0c)), 1178*61046927SAndroid Build Coastguard Worker ("v_pk_min_u16", False, dst(1), src(1, 1), op(gfx9=0x0d)), 1179*61046927SAndroid Build Coastguard Worker ("v_pk_fma_f16", True, dst(1), src(1, 1, 1), op(gfx9=0x0e)), 1180*61046927SAndroid Build Coastguard Worker ("v_pk_add_f16", True, dst(1), src(1, 1), op(gfx9=0x0f)), 1181*61046927SAndroid Build Coastguard Worker ("v_pk_mul_f16", True, dst(1), src(1, 1), op(gfx9=0x10)), 1182*61046927SAndroid Build Coastguard Worker ("v_pk_min_f16", True, dst(1), src(1, 1), op(gfx9=0x11, gfx12=0x1b)), # called v_pk_min_num_f16 in GFX12 1183*61046927SAndroid Build Coastguard Worker ("v_pk_max_f16", True, dst(1), src(1, 1), op(gfx9=0x12, gfx12=0x1c)), # called v_pk_min_num_f16 in GFX12 1184*61046927SAndroid Build Coastguard Worker ("v_pk_minimum_f16", True, dst(1), src(1, 1), op(gfx12=0x1d)), 1185*61046927SAndroid Build Coastguard Worker ("v_pk_maximum_f16", True, dst(1), src(1, 1), op(gfx12=0x1e)), 1186*61046927SAndroid Build Coastguard Worker ("v_fma_mix_f32", True, dst(1), src(1, 1, 1), op(gfx9=0x20)), # v_mad_mix_f32 in VEGA ISA, v_fma_mix_f32 in RDNA ISA 1187*61046927SAndroid Build Coastguard Worker ("v_fma_mixlo_f16", True, dst(1), src(1, 1, 1), op(gfx9=0x21)), # v_mad_mixlo_f16 in VEGA ISA, v_fma_mixlo_f16 in RDNA ISA 1188*61046927SAndroid Build Coastguard Worker ("v_fma_mixhi_f16", True, dst(1), src(1, 1, 1), op(gfx9=0x22)), # v_mad_mixhi_f16 in VEGA ISA, v_fma_mixhi_f16 in RDNA ISA 1189*61046927SAndroid Build Coastguard Worker ("v_dot2_i32_i16", False, dst(1), src(1, 1, 1), op(gfx9=0x26, gfx10=0x14, gfx11=-1)), 1190*61046927SAndroid Build Coastguard Worker ("v_dot2_u32_u16", False, dst(1), src(1, 1, 1), op(gfx9=0x27, gfx10=0x15, gfx11=-1)), 1191*61046927SAndroid Build Coastguard Worker ("v_dot4_i32_iu8", False, dst(1), src(1, 1, 1), op(gfx11=0x16)), 1192*61046927SAndroid Build Coastguard Worker ("v_dot4_i32_i8", False, dst(1), src(1, 1, 1), op(gfx9=0x28, gfx10=0x16, gfx11=-1)), 1193*61046927SAndroid Build Coastguard Worker ("v_dot4_u32_u8", False, dst(1), src(1, 1, 1), op(gfx9=0x29, gfx10=0x17)), 1194*61046927SAndroid Build Coastguard Worker ("v_dot8_i32_iu4", False, dst(1), src(1, 1, 1), op(gfx11=0x18)), 1195*61046927SAndroid Build Coastguard Worker ("v_dot8_u32_u4", False, dst(1), src(1, 1, 1), op(gfx9=0x2b, gfx10=0x19)), 1196*61046927SAndroid Build Coastguard Worker ("v_dot2_f32_f16", False, dst(1), src(1, 1, 1), op(gfx9=0x23, gfx10=0x13)), 1197*61046927SAndroid Build Coastguard Worker ("v_dot2_f32_bf16", False, dst(1), src(1, 1, 1), op(gfx11=0x1a)), 1198*61046927SAndroid Build Coastguard Worker ("v_dot4_f32_fp8_bf8", False, dst(1), src(1, 1, 1), op(gfx12=0x24)), 1199*61046927SAndroid Build Coastguard Worker ("v_dot4_f32_bf8_fp8", False, dst(1), src(1, 1, 1), op(gfx12=0x25)), 1200*61046927SAndroid Build Coastguard Worker ("v_dot4_f32_fp8_fp8", False, dst(1), src(1, 1, 1), op(gfx12=0x26)), 1201*61046927SAndroid Build Coastguard Worker ("v_dot4_f32_bf8_bf8", False, dst(1), src(1, 1, 1), op(gfx12=0x27)), 1202*61046927SAndroid Build Coastguard Worker ("v_wmma_f32_16x16x16_f16", False, dst(), src(), op(gfx11=0x40), InstrClass.WMMA), 1203*61046927SAndroid Build Coastguard Worker ("v_wmma_f32_16x16x16_bf16", False, dst(), src(), op(gfx11=0x41), InstrClass.WMMA), 1204*61046927SAndroid Build Coastguard Worker ("v_wmma_f16_16x16x16_f16", False, dst(), src(), op(gfx11=0x42), InstrClass.WMMA), 1205*61046927SAndroid Build Coastguard Worker ("v_wmma_bf16_16x16x16_bf16", False, dst(), src(), op(gfx11=0x43), InstrClass.WMMA), 1206*61046927SAndroid Build Coastguard Worker ("v_wmma_i32_16x16x16_iu8", False, dst(), src(), op(gfx11=0x44), InstrClass.WMMA), 1207*61046927SAndroid Build Coastguard Worker ("v_wmma_i32_16x16x16_iu4", False, dst(), src(), op(gfx11=0x45), InstrClass.WMMA), 1208*61046927SAndroid Build Coastguard Worker ("v_wmma_f32_16x16x16_fp8_fp8", False, dst(), src(), op(gfx12=0x46), InstrClass.WMMA), 1209*61046927SAndroid Build Coastguard Worker ("v_wmma_f32_16x16x16_fp8_bf8", False, dst(), src(), op(gfx12=0x47), InstrClass.WMMA), 1210*61046927SAndroid Build Coastguard Worker ("v_wmma_f32_16x16x16_bf8_fp8", False, dst(), src(), op(gfx12=0x48), InstrClass.WMMA), 1211*61046927SAndroid Build Coastguard Worker ("v_wmma_f32_16x16x16_bf8_bf8", False, dst(), src(), op(gfx12=0x49), InstrClass.WMMA), 1212*61046927SAndroid Build Coastguard Worker ("v_wmma_i32_16x16x32_iu4", False, dst(), src(), op(gfx12=0x4a), InstrClass.WMMA), 1213*61046927SAndroid Build Coastguard Worker ("v_swmmac_f32_16x16x32_f16", False, dst(), src(), op(gfx12=0x50), InstrClass.WMMA), 1214*61046927SAndroid Build Coastguard Worker ("v_swmmac_f32_16x16x32_bf16", False, dst(), src(), op(gfx12=0x51), InstrClass.WMMA), 1215*61046927SAndroid Build Coastguard Worker ("v_swmmac_f16_16x16x32_f16", False, dst(), src(), op(gfx12=0x52), InstrClass.WMMA), 1216*61046927SAndroid Build Coastguard Worker ("v_swmmac_bf16_16x16x32_bf16", False, dst(), src(), op(gfx12=0x53), InstrClass.WMMA), 1217*61046927SAndroid Build Coastguard Worker ("v_swmmac_i32_16x16x32_iu8", False, dst(), src(), op(gfx12=0x54), InstrClass.WMMA), 1218*61046927SAndroid Build Coastguard Worker ("v_swmmac_i32_16x16x32_iu4", False, dst(), src(), op(gfx12=0x55), InstrClass.WMMA), 1219*61046927SAndroid Build Coastguard Worker ("v_swmmac_i32_16x16x64_iu4", False, dst(), src(), op(gfx12=0x56), InstrClass.WMMA), 1220*61046927SAndroid Build Coastguard Worker ("v_swmmac_f32_16x16x32_fp8_fp8", False, dst(), src(), op(gfx12=0x57), InstrClass.WMMA), 1221*61046927SAndroid Build Coastguard Worker ("v_swmmac_f32_16x16x32_fp8_bf8", False, dst(), src(), op(gfx12=0x58), InstrClass.WMMA), 1222*61046927SAndroid Build Coastguard Worker ("v_swmmac_f32_16x16x32_bf8_fp8", False, dst(), src(), op(gfx12=0x59), InstrClass.WMMA), 1223*61046927SAndroid Build Coastguard Worker ("v_swmmac_f32_16x16x32_bf8_bf8", False, dst(), src(), op(gfx12=0x5a), InstrClass.WMMA), 1224*61046927SAndroid Build Coastguard Worker} 1225*61046927SAndroid Build Coastguard Workerfor (name, modifiers, defs, ops, num, cls) in default_class(VOPP, InstrClass.Valu32): 1226*61046927SAndroid Build Coastguard Worker insn(name, num, Format.VOP3P, cls, modifiers, modifiers, definitions = defs, operands = ops) 1227*61046927SAndroid Build Coastguard Worker 1228*61046927SAndroid Build Coastguard Worker 1229*61046927SAndroid Build Coastguard Worker# VINTRP (GFX6 - GFX10.3) instructions: 1230*61046927SAndroid Build Coastguard WorkerVINTRP = { 1231*61046927SAndroid Build Coastguard Worker ("v_interp_p1_f32", dst(1), src(1, M0), op(0x00, gfx11=-1)), 1232*61046927SAndroid Build Coastguard Worker ("v_interp_p2_f32", dst(1), src(1, M0, 1), op(0x01, gfx11=-1)), 1233*61046927SAndroid Build Coastguard Worker ("v_interp_mov_f32", dst(1), src(1, M0), op(0x02, gfx11=-1)), 1234*61046927SAndroid Build Coastguard Worker} 1235*61046927SAndroid Build Coastguard Workerfor (name, defs, ops, num) in VINTRP: 1236*61046927SAndroid Build Coastguard Worker insn(name, num, Format.VINTRP, InstrClass.Valu32, definitions = defs, operands = ops) 1237*61046927SAndroid Build Coastguard Worker 1238*61046927SAndroid Build Coastguard Worker 1239*61046927SAndroid Build Coastguard Worker# VINTERP (GFX11+) instructions: 1240*61046927SAndroid Build Coastguard WorkerVINTERP = { 1241*61046927SAndroid Build Coastguard Worker ("v_interp_p10_f32_inreg", op(gfx11=0x00)), 1242*61046927SAndroid Build Coastguard Worker ("v_interp_p2_f32_inreg", op(gfx11=0x01)), 1243*61046927SAndroid Build Coastguard Worker ("v_interp_p10_f16_f32_inreg", op(gfx11=0x02)), 1244*61046927SAndroid Build Coastguard Worker ("v_interp_p2_f16_f32_inreg", op(gfx11=0x03)), 1245*61046927SAndroid Build Coastguard Worker ("v_interp_p10_rtz_f16_f32_inreg", op(gfx11=0x04)), 1246*61046927SAndroid Build Coastguard Worker ("v_interp_p2_rtz_f16_f32_inreg", op(gfx11=0x05)), 1247*61046927SAndroid Build Coastguard Worker} 1248*61046927SAndroid Build Coastguard Workerfor (name, num) in VINTERP: 1249*61046927SAndroid Build Coastguard Worker insn(name, num, Format.VINTERP_INREG, InstrClass.Valu32, True, True, definitions = dst(1), operands = src(1, 1, 1)) 1250*61046927SAndroid Build Coastguard Worker 1251*61046927SAndroid Build Coastguard Worker 1252*61046927SAndroid Build Coastguard Worker# VOP3 instructions: 3 inputs, 1 output 1253*61046927SAndroid Build Coastguard Worker# VOP3b instructions: have a unique scalar output, e.g. VOP2 with vcc out 1254*61046927SAndroid Build Coastguard WorkerVOP3 = { 1255*61046927SAndroid Build Coastguard Worker ("v_mad_legacy_f32", True, True, dst(1), src(1, 1, 1), op(0x140, gfx8=0x1c0, gfx10=0x140, gfx11=-1)), # GFX6-GFX10 1256*61046927SAndroid Build Coastguard Worker ("v_mad_f32", True, True, dst(1), src(1, 1, 1), op(0x141, gfx8=0x1c1, gfx10=0x141, gfx11=-1)), 1257*61046927SAndroid Build Coastguard Worker ("v_mad_i32_i24", False, False, dst(1), src(1, 1, 1), op(0x142, gfx8=0x1c2, gfx10=0x142, gfx11=0x20a)), 1258*61046927SAndroid Build Coastguard Worker ("v_mad_u32_u24", False, False, dst(1), src(1, 1, 1), op(0x143, gfx8=0x1c3, gfx10=0x143, gfx11=0x20b)), 1259*61046927SAndroid Build Coastguard Worker ("v_cubeid_f32", True, True, dst(1), src(1, 1, 1), op(0x144, gfx8=0x1c4, gfx10=0x144, gfx11=0x20c)), 1260*61046927SAndroid Build Coastguard Worker ("v_cubesc_f32", True, True, dst(1), src(1, 1, 1), op(0x145, gfx8=0x1c5, gfx10=0x145, gfx11=0x20d)), 1261*61046927SAndroid Build Coastguard Worker ("v_cubetc_f32", True, True, dst(1), src(1, 1, 1), op(0x146, gfx8=0x1c6, gfx10=0x146, gfx11=0x20e)), 1262*61046927SAndroid Build Coastguard Worker ("v_cubema_f32", True, True, dst(1), src(1, 1, 1), op(0x147, gfx8=0x1c7, gfx10=0x147, gfx11=0x20f)), 1263*61046927SAndroid Build Coastguard Worker ("v_bfe_u32", False, False, dst(1), src(1, 1, 1), op(0x148, gfx8=0x1c8, gfx10=0x148, gfx11=0x210)), 1264*61046927SAndroid Build Coastguard Worker ("v_bfe_i32", False, False, dst(1), src(1, 1, 1), op(0x149, gfx8=0x1c9, gfx10=0x149, gfx11=0x211)), 1265*61046927SAndroid Build Coastguard Worker ("v_bfi_b32", False, False, dst(1), src(1, 1, 1), op(0x14a, gfx8=0x1ca, gfx10=0x14a, gfx11=0x212)), 1266*61046927SAndroid Build Coastguard Worker ("v_fma_f32", True, True, dst(1), src(1, 1, 1), op(0x14b, gfx8=0x1cb, gfx10=0x14b, gfx11=0x213), InstrClass.ValuFma), 1267*61046927SAndroid Build Coastguard Worker ("v_fma_f64", True, True, dst(2), src(2, 2, 2), op(0x14c, gfx8=0x1cc, gfx10=0x14c, gfx11=0x214), InstrClass.ValuDouble), 1268*61046927SAndroid Build Coastguard Worker ("v_lerp_u8", False, False, dst(1), src(1, 1, 1), op(0x14d, gfx8=0x1cd, gfx10=0x14d, gfx11=0x215)), 1269*61046927SAndroid Build Coastguard Worker ("v_alignbit_b32", False, False, dst(1), src(1, 1, 1), op(0x14e, gfx8=0x1ce, gfx10=0x14e, gfx11=0x216)), 1270*61046927SAndroid Build Coastguard Worker ("v_alignbyte_b32", False, False, dst(1), src(1, 1, 1), op(0x14f, gfx8=0x1cf, gfx10=0x14f, gfx11=0x217)), 1271*61046927SAndroid Build Coastguard Worker ("v_mullit_f32", True, True, dst(1), src(1, 1, 1), op(0x150, gfx8=-1, gfx10=0x150, gfx11=0x218)), 1272*61046927SAndroid Build Coastguard Worker ("v_min3_f32", True, True, dst(1), src(1, 1, 1), op(0x151, gfx8=0x1d0, gfx10=0x151, gfx11=0x219, gfx12=0x229)), # called v_min3_num_f32 in GFX12 1273*61046927SAndroid Build Coastguard Worker ("v_min3_i32", False, False, dst(1), src(1, 1, 1), op(0x152, gfx8=0x1d1, gfx10=0x152, gfx11=0x21a)), 1274*61046927SAndroid Build Coastguard Worker ("v_min3_u32", False, False, dst(1), src(1, 1, 1), op(0x153, gfx8=0x1d2, gfx10=0x153, gfx11=0x21b)), 1275*61046927SAndroid Build Coastguard Worker ("v_max3_f32", True, True, dst(1), src(1, 1, 1), op(0x154, gfx8=0x1d3, gfx10=0x154, gfx11=0x21c, gfx12=0x22a)), # called v_max3_num_f32 in GFX12 1276*61046927SAndroid Build Coastguard Worker ("v_max3_i32", False, False, dst(1), src(1, 1, 1), op(0x155, gfx8=0x1d4, gfx10=0x155, gfx11=0x21d)), 1277*61046927SAndroid Build Coastguard Worker ("v_max3_u32", False, False, dst(1), src(1, 1, 1), op(0x156, gfx8=0x1d5, gfx10=0x156, gfx11=0x21e)), 1278*61046927SAndroid Build Coastguard Worker ("v_med3_f32", True, True, dst(1), src(1, 1, 1), op(0x157, gfx8=0x1d6, gfx10=0x157, gfx11=0x21f, gfx12=0x231)), # called v_med3_num_f32 in GFX12 1279*61046927SAndroid Build Coastguard Worker ("v_med3_i32", False, False, dst(1), src(1, 1, 1), op(0x158, gfx8=0x1d7, gfx10=0x158, gfx11=0x220)), 1280*61046927SAndroid Build Coastguard Worker ("v_med3_u32", False, False, dst(1), src(1, 1, 1), op(0x159, gfx8=0x1d8, gfx10=0x159, gfx11=0x221)), 1281*61046927SAndroid Build Coastguard Worker ("v_sad_u8", False, False, dst(1), src(1, 1, 1), op(0x15a, gfx8=0x1d9, gfx10=0x15a, gfx11=0x222)), 1282*61046927SAndroid Build Coastguard Worker ("v_sad_hi_u8", False, False, dst(1), src(1, 1, 1), op(0x15b, gfx8=0x1da, gfx10=0x15b, gfx11=0x223)), 1283*61046927SAndroid Build Coastguard Worker ("v_sad_u16", False, False, dst(1), src(1, 1, 1), op(0x15c, gfx8=0x1db, gfx10=0x15c, gfx11=0x224)), 1284*61046927SAndroid Build Coastguard Worker ("v_sad_u32", False, False, dst(1), src(1, 1, 1), op(0x15d, gfx8=0x1dc, gfx10=0x15d, gfx11=0x225)), 1285*61046927SAndroid Build Coastguard Worker ("v_cvt_pk_u8_f32", True, False, dst(1), src(1, 1, 1), op(0x15e, gfx8=0x1dd, gfx10=0x15e, gfx11=0x226)), 1286*61046927SAndroid Build Coastguard Worker ("p_v_cvt_pk_u8_f32", True, False, dst(1), src(1), op(-1)), 1287*61046927SAndroid Build Coastguard Worker ("v_div_fixup_f32", True, True, dst(1), src(1, 1, 1), op(0x15f, gfx8=0x1de, gfx10=0x15f, gfx11=0x227)), 1288*61046927SAndroid Build Coastguard Worker ("v_div_fixup_f64", True, True, dst(2), src(2, 2, 2), op(0x160, gfx8=0x1df, gfx10=0x160, gfx11=0x228)), 1289*61046927SAndroid Build Coastguard Worker ("v_lshl_b64", False, False, dst(2), src(2, 1), op(0x161, gfx8=-1), InstrClass.Valu64), 1290*61046927SAndroid Build Coastguard Worker ("v_lshr_b64", False, False, dst(2), src(2, 1), op(0x162, gfx8=-1), InstrClass.Valu64), 1291*61046927SAndroid Build Coastguard Worker ("v_ashr_i64", False, False, dst(2), src(2, 1), op(0x163, gfx8=-1), InstrClass.Valu64), 1292*61046927SAndroid Build Coastguard Worker ("v_add_f64_e64", True, True, dst(2), src(2, 2), op(0x164, gfx8=0x280, gfx10=0x164, gfx11=0x327, gfx12=0x102), InstrClass.ValuDoubleAdd), # GFX12 is VOP2 opcode + 0x100 1293*61046927SAndroid Build Coastguard Worker ("v_mul_f64_e64", True, True, dst(2), src(2, 2), op(0x165, gfx8=0x281, gfx10=0x165, gfx11=0x328, gfx12=0x106), InstrClass.ValuDouble), # GFX12 is VOP2 opcode + 0x100 1294*61046927SAndroid Build Coastguard Worker ("v_min_f64_e64", True, True, dst(2), src(2, 2), op(0x166, gfx8=0x282, gfx10=0x166, gfx11=0x329, gfx12=0x10d), InstrClass.ValuDouble), # GFX12 is VOP2 opcode + 0x100 1295*61046927SAndroid Build Coastguard Worker ("v_max_f64_e64", True, True, dst(2), src(2, 2), op(0x167, gfx8=0x283, gfx10=0x167, gfx11=0x32a, gfx12=0x10e), InstrClass.ValuDouble), # GFX12 is VOP2 opcode + 0x100 1296*61046927SAndroid Build Coastguard Worker ("v_ldexp_f64", False, True, dst(2), src(2, 1), op(0x168, gfx8=0x284, gfx10=0x168, gfx11=0x32b), InstrClass.ValuDouble), # src1 can take input modifiers 1297*61046927SAndroid Build Coastguard Worker ("v_mul_lo_u32", False, False, dst(1), src(1, 1), op(0x169, gfx8=0x285, gfx10=0x169, gfx11=0x32c), InstrClass.ValuQuarterRate32), 1298*61046927SAndroid Build Coastguard Worker ("v_mul_hi_u32", False, False, dst(1), src(1, 1), op(0x16a, gfx8=0x286, gfx10=0x16a, gfx11=0x32d), InstrClass.ValuQuarterRate32), 1299*61046927SAndroid Build Coastguard Worker ("v_mul_lo_i32", False, False, dst(1), src(1, 1), op(0x16b, gfx8=0x285, gfx10=0x16b, gfx11=0x32c), InstrClass.ValuQuarterRate32), # identical to v_mul_lo_u32 1300*61046927SAndroid Build Coastguard Worker ("v_mul_hi_i32", False, False, dst(1), src(1, 1), op(0x16c, gfx8=0x287, gfx10=0x16c, gfx11=0x32e), InstrClass.ValuQuarterRate32), 1301*61046927SAndroid Build Coastguard Worker ("v_div_scale_f32", True, True, dst(1, VCC), src(1, 1, 1), op(0x16d, gfx8=0x1e0, gfx10=0x16d, gfx11=0x2fc)), 1302*61046927SAndroid Build Coastguard Worker ("v_div_scale_f64", True, True, dst(2, VCC), src(2, 2, 2), op(0x16e, gfx8=0x1e1, gfx10=0x16e, gfx11=0x2fd), InstrClass.ValuDouble), 1303*61046927SAndroid Build Coastguard Worker ("v_div_fmas_f32", True, True, dst(1), src(1, 1, 1, VCC), op(0x16f, gfx8=0x1e2, gfx10=0x16f, gfx11=0x237)), 1304*61046927SAndroid Build Coastguard Worker ("v_div_fmas_f64", True, True, dst(2), src(2, 2, 2, VCC), op(0x170, gfx8=0x1e3, gfx10=0x170, gfx11=0x238), InstrClass.ValuDouble), 1305*61046927SAndroid Build Coastguard Worker ("v_msad_u8", False, False, dst(1), src(1, 1, 1), op(0x171, gfx8=0x1e4, gfx10=0x171, gfx11=0x239)), 1306*61046927SAndroid Build Coastguard Worker ("v_qsad_pk_u16_u8", False, False, dst(2), src(2, 1, 2), op(0x172, gfx8=0x1e5, gfx10=0x172, gfx11=0x23a)), 1307*61046927SAndroid Build Coastguard Worker ("v_mqsad_pk_u16_u8", False, False, dst(2), src(2, 1, 2), op(0x173, gfx8=0x1e6, gfx10=0x173, gfx11=0x23b)), 1308*61046927SAndroid Build Coastguard Worker ("v_trig_preop_f64", False, False, dst(2), src(2, 2), op(0x174, gfx8=0x292, gfx10=0x174, gfx11=0x32f), InstrClass.ValuDouble), 1309*61046927SAndroid Build Coastguard Worker ("v_mqsad_u32_u8", False, False, dst(4), src(2, 1, 4), op(gfx7=0x175, gfx8=0x1e7, gfx10=0x175, gfx11=0x23d), InstrClass.ValuQuarterRate32), 1310*61046927SAndroid Build Coastguard Worker ("v_mad_u64_u32", False, False, dst(2, VCC), src(1, 1, 2), op(gfx7=0x176, gfx8=0x1e8, gfx10=0x176, gfx11=0x2fe), InstrClass.Valu64), # called v_mad_co_u64_u32 in GFX12 1311*61046927SAndroid Build Coastguard Worker ("v_mad_i64_i32", False, False, dst(2, VCC), src(1, 1, 2), op(gfx7=0x177, gfx8=0x1e9, gfx10=0x177, gfx11=0x2ff), InstrClass.Valu64), # called v_mad_co_i64_i32 in GFX12 1312*61046927SAndroid Build Coastguard Worker ("v_mad_legacy_f16", True, True, dst(1), src(1, 1, 1), op(gfx8=0x1ea, gfx10=-1)), 1313*61046927SAndroid Build Coastguard Worker ("v_mad_legacy_u16", False, False, dst(1), src(1, 1, 1), op(gfx8=0x1eb, gfx10=-1)), 1314*61046927SAndroid Build Coastguard Worker ("v_mad_legacy_i16", False, False, dst(1), src(1, 1, 1), op(gfx8=0x1ec, gfx10=-1)), 1315*61046927SAndroid Build Coastguard Worker ("v_perm_b32", False, False, dst(1), src(1, 1, 1), op(gfx8=0x1ed, gfx10=0x344, gfx11=0x244)), 1316*61046927SAndroid Build Coastguard Worker ("v_fma_legacy_f16", True, True, dst(1), src(1, 1, 1), op(gfx8=0x1ee, gfx10=-1), InstrClass.ValuFma), 1317*61046927SAndroid Build Coastguard Worker ("v_div_fixup_legacy_f16", True, True, dst(1), src(1, 1, 1), op(gfx8=0x1ef, gfx10=-1)), 1318*61046927SAndroid Build Coastguard Worker ("v_cvt_pkaccum_u8_f32", True, False, dst(1), src(1, 1, 1), op(0x12c, gfx8=0x1f0, gfx10=-1)), 1319*61046927SAndroid Build Coastguard Worker ("v_mad_u32_u16", False, False, dst(1), src(1, 1, 1), op(gfx9=0x1f1, gfx10=0x373, gfx11=0x259)), 1320*61046927SAndroid Build Coastguard Worker ("v_mad_i32_i16", False, False, dst(1), src(1, 1, 1), op(gfx9=0x1f2, gfx10=0x375, gfx11=0x25a)), 1321*61046927SAndroid Build Coastguard Worker ("v_xad_u32", False, False, dst(1), src(1, 1, 1), op(gfx9=0x1f3, gfx10=0x345, gfx11=0x245)), 1322*61046927SAndroid Build Coastguard Worker ("v_min3_f16", True, True, dst(1), src(1, 1, 1), op(gfx9=0x1f4, gfx10=0x351, gfx11=0x249, gfx12=0x22b)), # called v_min3_num_f16 in GFX12 1323*61046927SAndroid Build Coastguard Worker ("v_min3_i16", False, False, dst(1), src(1, 1, 1), op(gfx9=0x1f5, gfx10=0x352, gfx11=0x24a)), 1324*61046927SAndroid Build Coastguard Worker ("v_min3_u16", False, False, dst(1), src(1, 1, 1), op(gfx9=0x1f6, gfx10=0x353, gfx11=0x24b)), 1325*61046927SAndroid Build Coastguard Worker ("v_max3_f16", True, True, dst(1), src(1, 1, 1), op(gfx9=0x1f7, gfx10=0x354, gfx11=0x24c, gfx12=0x22c)), # called v_max3_num_f16 in GFX12 1326*61046927SAndroid Build Coastguard Worker ("v_max3_i16", False, False, dst(1), src(1, 1, 1), op(gfx9=0x1f8, gfx10=0x355, gfx11=0x24d)), 1327*61046927SAndroid Build Coastguard Worker ("v_max3_u16", False, False, dst(1), src(1, 1, 1), op(gfx9=0x1f9, gfx10=0x356, gfx11=0x24e)), 1328*61046927SAndroid Build Coastguard Worker ("v_med3_f16", True, True, dst(1), src(1, 1, 1), op(gfx9=0x1fa, gfx10=0x357, gfx11=0x24f, gfx12=0x232)), # called v_med3_num_f16 in GFX12 1329*61046927SAndroid Build Coastguard Worker ("v_med3_i16", False, False, dst(1), src(1, 1, 1), op(gfx9=0x1fb, gfx10=0x358, gfx11=0x250)), 1330*61046927SAndroid Build Coastguard Worker ("v_med3_u16", False, False, dst(1), src(1, 1, 1), op(gfx9=0x1fc, gfx10=0x359, gfx11=0x251)), 1331*61046927SAndroid Build Coastguard Worker ("v_lshl_add_u32", False, False, dst(1), src(1, 1, 1), op(gfx9=0x1fd, gfx10=0x346, gfx11=0x246)), 1332*61046927SAndroid Build Coastguard Worker ("v_add_lshl_u32", False, False, dst(1), src(1, 1, 1), op(gfx9=0x1fe, gfx10=0x347, gfx11=0x247)), 1333*61046927SAndroid Build Coastguard Worker ("v_add3_u32", False, False, dst(1), src(1, 1, 1), op(gfx9=0x1ff, gfx10=0x36d, gfx11=0x255)), 1334*61046927SAndroid Build Coastguard Worker ("v_lshl_or_b32", False, False, dst(1), src(1, 1, 1), op(gfx9=0x200, gfx10=0x36f, gfx11=0x256)), 1335*61046927SAndroid Build Coastguard Worker ("v_and_or_b32", False, False, dst(1), src(1, 1, 1), op(gfx9=0x201, gfx10=0x371, gfx11=0x257)), 1336*61046927SAndroid Build Coastguard Worker ("v_or3_b32", False, False, dst(1), src(1, 1, 1), op(gfx9=0x202, gfx10=0x372, gfx11=0x258)), 1337*61046927SAndroid Build Coastguard Worker ("v_mad_f16", True, True, dst(1), src(1, 1, 1), op(gfx9=0x203, gfx10=-1)), 1338*61046927SAndroid Build Coastguard Worker ("v_mad_u16", False, False, dst(1), src(1, 1, 1), op(gfx9=0x204, gfx10=0x340, gfx11=0x241)), 1339*61046927SAndroid Build Coastguard Worker ("v_mad_i16", False, False, dst(1), src(1, 1, 1), op(gfx9=0x205, gfx10=0x35e, gfx11=0x253)), 1340*61046927SAndroid Build Coastguard Worker ("v_fma_f16", True, True, dst(1), src(1, 1, 1), op(gfx9=0x206, gfx10=0x34b, gfx11=0x248)), 1341*61046927SAndroid Build Coastguard Worker ("v_div_fixup_f16", True, True, dst(1), src(1, 1, 1), op(gfx9=0x207, gfx10=0x35f, gfx11=0x254)), 1342*61046927SAndroid Build Coastguard Worker ("v_interp_p1ll_f16", True, True, dst(1), src(1, M0), op(gfx8=0x274, gfx10=0x342, gfx11=-1)), 1343*61046927SAndroid Build Coastguard Worker ("v_interp_p1lv_f16", True, True, dst(1), src(1, M0, 1), op(gfx8=0x275, gfx10=0x343, gfx11=-1)), 1344*61046927SAndroid Build Coastguard Worker ("v_interp_p2_legacy_f16", True, True, dst(1), src(1, M0, 1), op(gfx8=0x276, gfx10=-1)), 1345*61046927SAndroid Build Coastguard Worker ("v_interp_p2_f16", True, True, dst(1), src(1, M0, 1), op(gfx9=0x277, gfx10=0x35a, gfx11=-1)), 1346*61046927SAndroid Build Coastguard Worker ("v_interp_p2_hi_f16", True, True, dst(1), src(1, M0, 1), op(gfx9=0x277, gfx10=0x35a, gfx11=-1)), 1347*61046927SAndroid Build Coastguard Worker ("v_ldexp_f32", False, True, dst(1), src(1, 1), op(0x12b, gfx8=0x288, gfx10=0x362, gfx11=0x31c)), 1348*61046927SAndroid Build Coastguard Worker ("v_readlane_b32_e64", False, False, dst(1), src(1, 1), op(gfx8=0x289, gfx10=0x360)), 1349*61046927SAndroid Build Coastguard Worker ("v_writelane_b32_e64", False, False, dst(1), src(1, 1, 1), op(gfx8=0x28a, gfx10=0x361)), 1350*61046927SAndroid Build Coastguard Worker ("v_bcnt_u32_b32", False, False, dst(1), src(1, 1), op(0x122, gfx8=0x28b, gfx10=0x364, gfx11=0x31e)), 1351*61046927SAndroid Build Coastguard Worker ("v_mbcnt_lo_u32_b32", False, False, dst(1), src(1, 1), op(0x123, gfx8=0x28c, gfx10=0x365, gfx11=0x31f)), 1352*61046927SAndroid Build Coastguard Worker ("v_mbcnt_hi_u32_b32_e64", False, False, dst(1), src(1, 1), op(gfx8=0x28d, gfx10=0x366, gfx11=0x320)), 1353*61046927SAndroid Build Coastguard Worker ("v_lshlrev_b64_e64", False, False, dst(2), src(1, 2), op(gfx8=0x28f, gfx10=0x2ff, gfx11=0x33c, gfx12=0x11f), InstrClass.Valu64), # GFX12 is VOP2 opcode + 0x100 1354*61046927SAndroid Build Coastguard Worker ("v_lshrrev_b64", False, False, dst(2), src(1, 2), op(gfx8=0x290, gfx10=0x300, gfx11=0x33d), InstrClass.Valu64), 1355*61046927SAndroid Build Coastguard Worker ("v_ashrrev_i64", False, False, dst(2), src(1, 2), op(gfx8=0x291, gfx10=0x301, gfx11=0x33e), InstrClass.Valu64), 1356*61046927SAndroid Build Coastguard Worker ("v_bfm_b32", False, False, dst(1), src(1, 1), op(0x11e, gfx8=0x293, gfx10=0x363, gfx11=0x31d)), 1357*61046927SAndroid Build Coastguard Worker ("v_cvt_pknorm_i16_f32", True, False, dst(1), src(1, 1), op(0x12d, gfx8=0x294, gfx10=0x368, gfx11=0x321)), 1358*61046927SAndroid Build Coastguard Worker ("v_cvt_pknorm_u16_f32", True, False, dst(1), src(1, 1), op(0x12e, gfx8=0x295, gfx10=0x369, gfx11=0x322)), 1359*61046927SAndroid Build Coastguard Worker ("v_cvt_pkrtz_f16_f32_e64", True, False, dst(1), src(1, 1), op(gfx8=0x296, gfx10=-1)), 1360*61046927SAndroid Build Coastguard Worker ("v_cvt_pk_u16_u32", False, False, dst(1), src(1, 1), op(0x130, gfx8=0x297, gfx10=0x36a, gfx11=0x323)), 1361*61046927SAndroid Build Coastguard Worker ("v_cvt_pk_i16_i32", False, False, dst(1), src(1, 1), op(0x131, gfx8=0x298, gfx10=0x36b, gfx11=0x324)), 1362*61046927SAndroid Build Coastguard Worker ("v_cvt_pknorm_i16_f16", True, False, dst(1), src(1, 1), op(gfx9=0x299, gfx10=0x312)), #v_cvt_pk_norm_i16_f32 in GFX11 1363*61046927SAndroid Build Coastguard Worker ("v_cvt_pknorm_u16_f16", True, False, dst(1), src(1, 1), op(gfx9=0x29a, gfx10=0x313)), #v_cvt_pk_norm_u16_f32 in GFX11 1364*61046927SAndroid Build Coastguard Worker ("v_add_i32", False, False, dst(1), src(1, 1), op(gfx9=0x29c, gfx10=0x37f, gfx11=0x326)), 1365*61046927SAndroid Build Coastguard Worker ("v_sub_i32", False, False, dst(1), src(1, 1), op(gfx9=0x29d, gfx10=0x376, gfx11=0x325)), 1366*61046927SAndroid Build Coastguard Worker ("v_add_i16", False, False, dst(1), src(1, 1), op(gfx9=0x29e, gfx10=0x30d)), 1367*61046927SAndroid Build Coastguard Worker ("v_sub_i16", False, False, dst(1), src(1, 1), op(gfx9=0x29f, gfx10=0x30e)), 1368*61046927SAndroid Build Coastguard Worker ("v_pack_b32_f16", True, False, dst(1), src(1, 1), op(gfx9=0x2a0, gfx10=0x311)), 1369*61046927SAndroid Build Coastguard Worker ("v_xor3_b32", False, False, dst(1), src(1, 1, 1), op(gfx10=0x178, gfx11=0x240)), 1370*61046927SAndroid Build Coastguard Worker ("v_permlane16_b32", False, False, dst(1), src(1, 1, 1), op(gfx10=0x377, gfx11=0x25b)), 1371*61046927SAndroid Build Coastguard Worker ("v_permlanex16_b32", False, False, dst(1), src(1, 1, 1), op(gfx10=0x378, gfx11=0x25c)), 1372*61046927SAndroid Build Coastguard Worker ("v_add_co_u32_e64", False, False, dst(1, VCC), src(1, 1), op(gfx10=0x30f, gfx11=0x300)), 1373*61046927SAndroid Build Coastguard Worker ("v_sub_co_u32_e64", False, False, dst(1, VCC), src(1, 1), op(gfx10=0x310, gfx11=0x301)), 1374*61046927SAndroid Build Coastguard Worker ("v_subrev_co_u32_e64", False, False, dst(1, VCC), src(1, 1), op(gfx10=0x319, gfx11=0x302)), 1375*61046927SAndroid Build Coastguard Worker ("v_add_u16_e64", False, False, dst(1), src(1, 1), op(gfx10=0x303)), 1376*61046927SAndroid Build Coastguard Worker ("v_sub_u16_e64", False, False, dst(1), src(1, 1), op(gfx10=0x304)), 1377*61046927SAndroid Build Coastguard Worker ("v_mul_lo_u16_e64", False, False, dst(1), src(1, 1), op(gfx10=0x305)), 1378*61046927SAndroid Build Coastguard Worker ("v_max_u16_e64", False, False, dst(1), src(1, 1), op(gfx10=0x309)), 1379*61046927SAndroid Build Coastguard Worker ("v_max_i16_e64", False, False, dst(1), src(1, 1), op(gfx10=0x30a)), 1380*61046927SAndroid Build Coastguard Worker ("v_min_u16_e64", False, False, dst(1), src(1, 1), op(gfx10=0x30b)), 1381*61046927SAndroid Build Coastguard Worker ("v_min_i16_e64", False, False, dst(1), src(1, 1), op(gfx10=0x30c)), 1382*61046927SAndroid Build Coastguard Worker ("v_lshrrev_b16_e64", False, False, dst(1), src(1, 1), op(gfx10=0x307, gfx11=0x339)), 1383*61046927SAndroid Build Coastguard Worker ("v_ashrrev_i16_e64", False, False, dst(1), src(1, 1), op(gfx10=0x308, gfx11=0x33a)), 1384*61046927SAndroid Build Coastguard Worker ("v_lshlrev_b16_e64", False, False, dst(1), src(1, 1), op(gfx10=0x314, gfx11=0x338)), 1385*61046927SAndroid Build Coastguard Worker ("v_fma_legacy_f32", True, True, dst(1), src(1, 1, 1), op(gfx10=0x140, gfx11=0x209), InstrClass.ValuFma), #GFX10.3+, v_fma_dx9_zero_f32 in GFX11 1386*61046927SAndroid Build Coastguard Worker ("v_maxmin_f32", True, True, dst(1), src(1, 1, 1), op(gfx11=0x25e, gfx12=0x269)), # called v_maxmin_num_f32 in GFX12 1387*61046927SAndroid Build Coastguard Worker ("v_minmax_f32", True, True, dst(1), src(1, 1, 1), op(gfx11=0x25f, gfx12=0x268)), # called v_minmax_num_f32 in GFX12 1388*61046927SAndroid Build Coastguard Worker ("v_maxmin_f16", True, True, dst(1), src(1, 1, 1), op(gfx11=0x260, gfx12=0x26b)), # called v_maxmin_num_f16 in GFX12 1389*61046927SAndroid Build Coastguard Worker ("v_minmax_f16", True, True, dst(1), src(1, 1, 1), op(gfx11=0x261, gfx12=0x26a)), # called v_minmax_num_f16 in GFX12 1390*61046927SAndroid Build Coastguard Worker ("v_maxmin_u32", False, False, dst(1), src(1, 1, 1), op(gfx11=0x262)), 1391*61046927SAndroid Build Coastguard Worker ("v_minmax_u32", False, False, dst(1), src(1, 1, 1), op(gfx11=0x263)), 1392*61046927SAndroid Build Coastguard Worker ("v_maxmin_i32", False, False, dst(1), src(1, 1, 1), op(gfx11=0x264)), 1393*61046927SAndroid Build Coastguard Worker ("v_minmax_i32", False, False, dst(1), src(1, 1, 1), op(gfx11=0x265)), 1394*61046927SAndroid Build Coastguard Worker ("v_dot2_f16_f16", False, False, dst(1), src(1, 1, 1), op(gfx11=0x266)), 1395*61046927SAndroid Build Coastguard Worker ("v_dot2_bf16_bf16", False, False, dst(1), src(1, 1, 1), op(gfx11=0x267)), 1396*61046927SAndroid Build Coastguard Worker ("v_cvt_pk_i16_f32", True, False, dst(1), src(1, 1), op(gfx11=0x306)), 1397*61046927SAndroid Build Coastguard Worker ("v_cvt_pk_u16_f32", True, False, dst(1), src(1, 1), op(gfx11=0x307)), 1398*61046927SAndroid Build Coastguard Worker ("v_and_b16", False, False, dst(1), src(1, 1), op(gfx11=0x362)), 1399*61046927SAndroid Build Coastguard Worker ("v_or_b16", False, False, dst(1), src(1, 1), op(gfx11=0x363)), 1400*61046927SAndroid Build Coastguard Worker ("v_xor_b16", False, False, dst(1), src(1, 1), op(gfx11=0x364)), 1401*61046927SAndroid Build Coastguard Worker ("v_cndmask_b16", True, False, dst(1), src(1, 1, VCC), op(gfx11=0x25d)), 1402*61046927SAndroid Build Coastguard Worker ("v_minimum3_f32", True, True, dst(1), src(1, 1, 1), op(gfx12=0x22d)), 1403*61046927SAndroid Build Coastguard Worker ("v_maximum3_f32", True, True, dst(1), src(1, 1, 1), op(gfx12=0x22e)), 1404*61046927SAndroid Build Coastguard Worker ("v_minimum3_f16", True, True, dst(1), src(1, 1, 1), op(gfx12=0x22f)), 1405*61046927SAndroid Build Coastguard Worker ("v_maximum3_f16", True, True, dst(1), src(1, 1, 1), op(gfx12=0x230)), 1406*61046927SAndroid Build Coastguard Worker ("v_minimummaximum_f32", True, True, dst(1), src(1, 1, 1), op(gfx12=0x26c)), 1407*61046927SAndroid Build Coastguard Worker ("v_maximumminimum_f32", True, True, dst(1), src(1, 1, 1), op(gfx12=0x26d)), 1408*61046927SAndroid Build Coastguard Worker ("v_minimummaximum_f16", True, True, dst(1), src(1, 1, 1), op(gfx12=0x26e)), 1409*61046927SAndroid Build Coastguard Worker ("v_maximumminimum_f16", True, True, dst(1), src(1, 1, 1), op(gfx12=0x26f)), 1410*61046927SAndroid Build Coastguard Worker ("v_s_exp_f32", True, True, dst(1), src(1), op(gfx12=0x280), InstrClass.ValuPseudoScalarTrans), 1411*61046927SAndroid Build Coastguard Worker ("v_s_exp_f16", True, True, dst(1), src(1), op(gfx12=0x281), InstrClass.ValuPseudoScalarTrans), 1412*61046927SAndroid Build Coastguard Worker ("v_s_log_f32", True, True, dst(1), src(1), op(gfx12=0x282), InstrClass.ValuPseudoScalarTrans), 1413*61046927SAndroid Build Coastguard Worker ("v_s_log_f16", True, True, dst(1), src(1), op(gfx12=0x283), InstrClass.ValuPseudoScalarTrans), 1414*61046927SAndroid Build Coastguard Worker ("v_s_rcp_f32", True, True, dst(1), src(1), op(gfx12=0x284), InstrClass.ValuPseudoScalarTrans), 1415*61046927SAndroid Build Coastguard Worker ("v_s_rcp_f16", True, True, dst(1), src(1), op(gfx12=0x285), InstrClass.ValuPseudoScalarTrans), 1416*61046927SAndroid Build Coastguard Worker ("v_s_rsq_f32", True, True, dst(1), src(1), op(gfx12=0x286), InstrClass.ValuPseudoScalarTrans), 1417*61046927SAndroid Build Coastguard Worker ("v_s_rsq_f16", True, True, dst(1), src(1), op(gfx12=0x287), InstrClass.ValuPseudoScalarTrans), 1418*61046927SAndroid Build Coastguard Worker ("v_s_sqrt_f32", True, True, dst(1), src(1), op(gfx12=0x288), InstrClass.ValuPseudoScalarTrans), 1419*61046927SAndroid Build Coastguard Worker ("v_s_sqrt_f16", True, True, dst(1), src(1), op(gfx12=0x289), InstrClass.ValuPseudoScalarTrans), 1420*61046927SAndroid Build Coastguard Worker ("v_minimum_f64", True, True, dst(1), src(1, 1), op(gfx12=0x341)), 1421*61046927SAndroid Build Coastguard Worker ("v_maximum_f64", True, True, dst(1), src(1, 1), op(gfx12=0x342)), 1422*61046927SAndroid Build Coastguard Worker ("v_minimum_f32", True, True, dst(1), src(1, 1), op(gfx12=0x365)), 1423*61046927SAndroid Build Coastguard Worker ("v_maximum_f32", True, True, dst(1), src(1, 1), op(gfx12=0x366)), 1424*61046927SAndroid Build Coastguard Worker ("v_minimum_f16", True, True, dst(1), src(1, 1), op(gfx12=0x367)), 1425*61046927SAndroid Build Coastguard Worker ("v_maximum_f16", True, True, dst(1), src(1, 1), op(gfx12=0x368)), 1426*61046927SAndroid Build Coastguard Worker ("v_permlane16_var_b32", False, False, dst(1), src(1, 1), op(gfx12=0x30f)), 1427*61046927SAndroid Build Coastguard Worker ("v_permlanex16_var_b32", False, False, dst(1), src(1, 1), op(gfx12=0x310)), 1428*61046927SAndroid Build Coastguard Worker ("v_cvt_pk_fp8_f32", True, False, dst(1), src(1, 1), op(gfx12=0x369)), 1429*61046927SAndroid Build Coastguard Worker ("v_cvt_pk_bf8_f32", True, False, dst(1), src(1, 1), op(gfx12=0x36a)), 1430*61046927SAndroid Build Coastguard Worker ("v_cvt_sr_fp8_f32", True, False, dst(1), src(1, 1), op(gfx12=0x36b)), 1431*61046927SAndroid Build Coastguard Worker ("v_cvt_sr_bf8_f32", True, False, dst(1), src(1, 1), op(gfx12=0x36c)), 1432*61046927SAndroid Build Coastguard Worker} 1433*61046927SAndroid Build Coastguard Workerfor (name, in_mod, out_mod, defs, ops, num, cls) in default_class(VOP3, InstrClass.Valu32): 1434*61046927SAndroid Build Coastguard Worker insn(name, num, Format.VOP3, cls, in_mod, out_mod, definitions = defs, operands = ops) 1435*61046927SAndroid Build Coastguard Worker 1436*61046927SAndroid Build Coastguard Worker 1437*61046927SAndroid Build Coastguard WorkerVOPD = { 1438*61046927SAndroid Build Coastguard Worker ("v_dual_fmac_f32", op(gfx11=0x00)), 1439*61046927SAndroid Build Coastguard Worker ("v_dual_fmaak_f32", op(gfx11=0x01)), 1440*61046927SAndroid Build Coastguard Worker ("v_dual_fmamk_f32", op(gfx11=0x02)), 1441*61046927SAndroid Build Coastguard Worker ("v_dual_mul_f32", op(gfx11=0x03)), 1442*61046927SAndroid Build Coastguard Worker ("v_dual_add_f32", op(gfx11=0x04)), 1443*61046927SAndroid Build Coastguard Worker ("v_dual_sub_f32", op(gfx11=0x05)), 1444*61046927SAndroid Build Coastguard Worker ("v_dual_subrev_f32", op(gfx11=0x06)), 1445*61046927SAndroid Build Coastguard Worker ("v_dual_mul_dx9_zero_f32", op(gfx11=0x07)), 1446*61046927SAndroid Build Coastguard Worker ("v_dual_mov_b32", op(gfx11=0x08)), 1447*61046927SAndroid Build Coastguard Worker ("v_dual_cndmask_b32", op(gfx11=0x09)), 1448*61046927SAndroid Build Coastguard Worker ("v_dual_max_f32", op(gfx11=0x0a)), 1449*61046927SAndroid Build Coastguard Worker ("v_dual_min_f32", op(gfx11=0x0b)), 1450*61046927SAndroid Build Coastguard Worker ("v_dual_dot2acc_f32_f16", op(gfx11=0x0c)), 1451*61046927SAndroid Build Coastguard Worker ("v_dual_dot2acc_f32_bf16", op(gfx11=0x0d)), 1452*61046927SAndroid Build Coastguard Worker ("v_dual_add_nc_u32", op(gfx11=0x10)), 1453*61046927SAndroid Build Coastguard Worker ("v_dual_lshlrev_b32", op(gfx11=0x11)), 1454*61046927SAndroid Build Coastguard Worker ("v_dual_and_b32", op(gfx11=0x12)), 1455*61046927SAndroid Build Coastguard Worker} 1456*61046927SAndroid Build Coastguard Workerfor (name, num) in VOPD: 1457*61046927SAndroid Build Coastguard Worker insn(name, num, format = Format.VOPD, cls = InstrClass.Valu32) 1458*61046927SAndroid Build Coastguard Worker 1459*61046927SAndroid Build Coastguard Worker 1460*61046927SAndroid Build Coastguard Worker# DS instructions: 3 inputs (1 addr, 2 data), 1 output 1461*61046927SAndroid Build Coastguard WorkerDS = { 1462*61046927SAndroid Build Coastguard Worker ("ds_add_u32", op(0x00)), 1463*61046927SAndroid Build Coastguard Worker ("ds_sub_u32", op(0x01)), 1464*61046927SAndroid Build Coastguard Worker ("ds_rsub_u32", op(0x02)), 1465*61046927SAndroid Build Coastguard Worker ("ds_inc_u32", op(0x03)), 1466*61046927SAndroid Build Coastguard Worker ("ds_dec_u32", op(0x04)), 1467*61046927SAndroid Build Coastguard Worker ("ds_min_i32", op(0x05)), 1468*61046927SAndroid Build Coastguard Worker ("ds_max_i32", op(0x06)), 1469*61046927SAndroid Build Coastguard Worker ("ds_min_u32", op(0x07)), 1470*61046927SAndroid Build Coastguard Worker ("ds_max_u32", op(0x08)), 1471*61046927SAndroid Build Coastguard Worker ("ds_and_b32", op(0x09)), 1472*61046927SAndroid Build Coastguard Worker ("ds_or_b32", op(0x0a)), 1473*61046927SAndroid Build Coastguard Worker ("ds_xor_b32", op(0x0b)), 1474*61046927SAndroid Build Coastguard Worker ("ds_mskor_b32", op(0x0c)), 1475*61046927SAndroid Build Coastguard Worker ("ds_write_b32", op(0x0d)), #ds_store_b32 in GFX11 1476*61046927SAndroid Build Coastguard Worker ("ds_write2_b32", op(0x0e)), #ds_store_2addr_b32 in GFX11 1477*61046927SAndroid Build Coastguard Worker ("ds_write2st64_b32", op(0x0f)), #ds_store_2addr_stride64_b32 in GFX11 1478*61046927SAndroid Build Coastguard Worker ("ds_cmpst_b32", op(0x10)), #ds_cmpstore_b32 in GFX11 1479*61046927SAndroid Build Coastguard Worker ("ds_cmpst_f32", op(0x11, gfx12=-1)), #ds_cmpstore_f32 in GFX11 1480*61046927SAndroid Build Coastguard Worker ("ds_min_f32", op(0x12)), #ds_min_num_f32 in GFX12 1481*61046927SAndroid Build Coastguard Worker ("ds_max_f32", op(0x13)), #ds_max_num_f32 in GFX12 1482*61046927SAndroid Build Coastguard Worker ("ds_nop", op(gfx7=0x14)), 1483*61046927SAndroid Build Coastguard Worker ("ds_add_f32", op(gfx8=0x15)), 1484*61046927SAndroid Build Coastguard Worker ("ds_write_addtid_b32", op(gfx8=0x1d, gfx10=0xb0)), #ds_store_addtid_b32 in GFX11 1485*61046927SAndroid Build Coastguard Worker ("ds_write_b8", op(0x1e)), #ds_store_b8 in GFX11 1486*61046927SAndroid Build Coastguard Worker ("ds_write_b16", op(0x1f)), #ds_store_b16 in GFX11 1487*61046927SAndroid Build Coastguard Worker ("ds_add_rtn_u32", op(0x20)), 1488*61046927SAndroid Build Coastguard Worker ("ds_sub_rtn_u32", op(0x21)), 1489*61046927SAndroid Build Coastguard Worker ("ds_rsub_rtn_u32", op(0x22)), 1490*61046927SAndroid Build Coastguard Worker ("ds_inc_rtn_u32", op(0x23)), 1491*61046927SAndroid Build Coastguard Worker ("ds_dec_rtn_u32", op(0x24)), 1492*61046927SAndroid Build Coastguard Worker ("ds_min_rtn_i32", op(0x25)), 1493*61046927SAndroid Build Coastguard Worker ("ds_max_rtn_i32", op(0x26)), 1494*61046927SAndroid Build Coastguard Worker ("ds_min_rtn_u32", op(0x27)), 1495*61046927SAndroid Build Coastguard Worker ("ds_max_rtn_u32", op(0x28)), 1496*61046927SAndroid Build Coastguard Worker ("ds_and_rtn_b32", op(0x29)), 1497*61046927SAndroid Build Coastguard Worker ("ds_or_rtn_b32", op(0x2a)), 1498*61046927SAndroid Build Coastguard Worker ("ds_xor_rtn_b32", op(0x2b)), 1499*61046927SAndroid Build Coastguard Worker ("ds_mskor_rtn_b32", op(0x2c)), 1500*61046927SAndroid Build Coastguard Worker ("ds_wrxchg_rtn_b32", op(0x2d)), #ds_storexchg_rtn_b32 in GFX11 1501*61046927SAndroid Build Coastguard Worker ("ds_wrxchg2_rtn_b32", op(0x2e)), #ds_storexchg_2addr_rtn_b32 in GFX11 1502*61046927SAndroid Build Coastguard Worker ("ds_wrxchg2st64_rtn_b32", op(0x2f)), #ds_storexchg_2addr_stride64_rtn_b32 in GFX11 1503*61046927SAndroid Build Coastguard Worker ("ds_cmpst_rtn_b32", op(0x30)), #ds_cmpstore_rtn_b32 in GFX11 1504*61046927SAndroid Build Coastguard Worker ("ds_cmpst_rtn_f32", op(0x31, gfx12=-1)), #ds_cmpstore_rtn_f32 in GFX11 1505*61046927SAndroid Build Coastguard Worker ("ds_min_rtn_f32", op(0x32)), #ds_min_num_rtn_f32 in GFX12 1506*61046927SAndroid Build Coastguard Worker ("ds_max_rtn_f32", op(0x33)), #ds_max_num_rtn_f32 in GFX12 1507*61046927SAndroid Build Coastguard Worker ("ds_wrap_rtn_b32", op(gfx7=0x34, gfx12=-1)), 1508*61046927SAndroid Build Coastguard Worker ("ds_add_rtn_f32", op(gfx8=0x35, gfx10=0x55, gfx11=0x79)), 1509*61046927SAndroid Build Coastguard Worker ("ds_read_b32", op(0x36)), #ds_load_b32 in GFX11 1510*61046927SAndroid Build Coastguard Worker ("ds_read2_b32", op(0x37)), #ds_load_2addr_b32 in GFX11 1511*61046927SAndroid Build Coastguard Worker ("ds_read2st64_b32", op(0x38)), #ds_load_2addr_stride64_b32 in GFX11 1512*61046927SAndroid Build Coastguard Worker ("ds_read_i8", op(0x39)), #ds_load_i8 in GFX11 1513*61046927SAndroid Build Coastguard Worker ("ds_read_u8", op(0x3a)), #ds_load_u8 in GFX11 1514*61046927SAndroid Build Coastguard Worker ("ds_read_i16", op(0x3b)), #ds_load_i16 in GFX11 1515*61046927SAndroid Build Coastguard Worker ("ds_read_u16", op(0x3c)), #ds_load_u16 in GFX11 1516*61046927SAndroid Build Coastguard Worker ("ds_swizzle_b32", op(0x35, gfx8=0x3d, gfx10=0x35)), #data1 & offset, no addr/data2 1517*61046927SAndroid Build Coastguard Worker ("ds_permute_b32", op(gfx8=0x3e, gfx10=0xb2)), 1518*61046927SAndroid Build Coastguard Worker ("ds_bpermute_b32", op(gfx8=0x3f, gfx10=0xb3)), 1519*61046927SAndroid Build Coastguard Worker ("ds_add_u64", op(0x40)), 1520*61046927SAndroid Build Coastguard Worker ("ds_sub_u64", op(0x41)), 1521*61046927SAndroid Build Coastguard Worker ("ds_rsub_u64", op(0x42)), 1522*61046927SAndroid Build Coastguard Worker ("ds_inc_u64", op(0x43)), 1523*61046927SAndroid Build Coastguard Worker ("ds_dec_u64", op(0x44)), 1524*61046927SAndroid Build Coastguard Worker ("ds_min_i64", op(0x45)), 1525*61046927SAndroid Build Coastguard Worker ("ds_max_i64", op(0x46)), 1526*61046927SAndroid Build Coastguard Worker ("ds_min_u64", op(0x47)), 1527*61046927SAndroid Build Coastguard Worker ("ds_max_u64", op(0x48)), 1528*61046927SAndroid Build Coastguard Worker ("ds_and_b64", op(0x49)), 1529*61046927SAndroid Build Coastguard Worker ("ds_or_b64", op(0x4a)), 1530*61046927SAndroid Build Coastguard Worker ("ds_xor_b64", op(0x4b)), 1531*61046927SAndroid Build Coastguard Worker ("ds_mskor_b64", op(0x4c)), 1532*61046927SAndroid Build Coastguard Worker ("ds_write_b64", op(0x4d)), #ds_store_b64 in GFX11 1533*61046927SAndroid Build Coastguard Worker ("ds_write2_b64", op(0x4e)), #ds_store_2addr_b64 in GFX11 1534*61046927SAndroid Build Coastguard Worker ("ds_write2st64_b64", op(0x4f)), #ds_store_2addr_stride64_b64 in GFX11 1535*61046927SAndroid Build Coastguard Worker ("ds_cmpst_b64", op(0x50)), #ds_cmpstore_b64 in GFX11 1536*61046927SAndroid Build Coastguard Worker ("ds_cmpst_f64", op(0x51, gfx12=-1)), #ds_cmpstore_f64 in GFX11 1537*61046927SAndroid Build Coastguard Worker ("ds_min_f64", op(0x52)), #ds_min_num_f64 in GFX12 1538*61046927SAndroid Build Coastguard Worker ("ds_max_f64", op(0x53)), #ds_max_num_f64 in GFX12 1539*61046927SAndroid Build Coastguard Worker ("ds_write_b8_d16_hi", op(gfx9=0x54, gfx10=0xa0)), #ds_store_b8_d16_hi in GFX11 1540*61046927SAndroid Build Coastguard Worker ("ds_write_b16_d16_hi", op(gfx9=0x55, gfx10=0xa1)), #ds_store_b16_d16_hi in GFX11 1541*61046927SAndroid Build Coastguard Worker ("ds_read_u8_d16", op(gfx9=0x56, gfx10=0xa2)), #ds_load_u8_d16 in GFX11 1542*61046927SAndroid Build Coastguard Worker ("ds_read_u8_d16_hi", op(gfx9=0x57, gfx10=0xa3)), #ds_load_u8_d16_hi in GFX11 1543*61046927SAndroid Build Coastguard Worker ("ds_read_i8_d16", op(gfx9=0x58, gfx10=0xa4)), #ds_load_i8_d16 in GFX11 1544*61046927SAndroid Build Coastguard Worker ("ds_read_i8_d16_hi", op(gfx9=0x59, gfx10=0xa5)), #ds_load_i8_d16_hi in GFX11 1545*61046927SAndroid Build Coastguard Worker ("ds_read_u16_d16", op(gfx9=0x5a, gfx10=0xa6)), #ds_load_u16_d16 in GFX11 1546*61046927SAndroid Build Coastguard Worker ("ds_read_u16_d16_hi", op(gfx9=0x5b, gfx10=0xa7)), #ds_load_u16_d16_hi in GFX11 1547*61046927SAndroid Build Coastguard Worker ("ds_add_rtn_u64", op(0x60)), 1548*61046927SAndroid Build Coastguard Worker ("ds_sub_rtn_u64", op(0x61)), 1549*61046927SAndroid Build Coastguard Worker ("ds_rsub_rtn_u64", op(0x62)), 1550*61046927SAndroid Build Coastguard Worker ("ds_inc_rtn_u64", op(0x63)), 1551*61046927SAndroid Build Coastguard Worker ("ds_dec_rtn_u64", op(0x64)), 1552*61046927SAndroid Build Coastguard Worker ("ds_min_rtn_i64", op(0x65)), 1553*61046927SAndroid Build Coastguard Worker ("ds_max_rtn_i64", op(0x66)), 1554*61046927SAndroid Build Coastguard Worker ("ds_min_rtn_u64", op(0x67)), 1555*61046927SAndroid Build Coastguard Worker ("ds_max_rtn_u64", op(0x68)), 1556*61046927SAndroid Build Coastguard Worker ("ds_and_rtn_b64", op(0x69)), 1557*61046927SAndroid Build Coastguard Worker ("ds_or_rtn_b64", op(0x6a)), 1558*61046927SAndroid Build Coastguard Worker ("ds_xor_rtn_b64", op(0x6b)), 1559*61046927SAndroid Build Coastguard Worker ("ds_mskor_rtn_b64", op(0x6c)), 1560*61046927SAndroid Build Coastguard Worker ("ds_wrxchg_rtn_b64", op(0x6d)), #ds_storexchg_rtn_b64 in GFX11 1561*61046927SAndroid Build Coastguard Worker ("ds_wrxchg2_rtn_b64", op(0x6e)), #ds_storexchg_2addr_rtn_b64 in GFX11 1562*61046927SAndroid Build Coastguard Worker ("ds_wrxchg2st64_rtn_b64", op(0x6f)), #ds_storexchg_2addr_stride64_rtn_b64 in GFX11 1563*61046927SAndroid Build Coastguard Worker ("ds_cmpst_rtn_b64", op(0x70)), #ds_cmpstore_rtn_b64 in GFX11 1564*61046927SAndroid Build Coastguard Worker ("ds_cmpst_rtn_f64", op(0x71, gfx12=-1)), #ds_cmpstore_rtn_f64 in GFX11 1565*61046927SAndroid Build Coastguard Worker ("ds_min_rtn_f64", op(0x72)), #ds_min_num_f64 in GFX12 1566*61046927SAndroid Build Coastguard Worker ("ds_max_rtn_f64", op(0x73)), #ds_max_num_f64 in GFX12 1567*61046927SAndroid Build Coastguard Worker ("ds_read_b64", op(0x76)), #ds_load_b64 in GFX11 1568*61046927SAndroid Build Coastguard Worker ("ds_read2_b64", op(0x77)), #ds_load_2addr_b64 in GFX11 1569*61046927SAndroid Build Coastguard Worker ("ds_read2st64_b64", op(0x78)), #ds_load_2addr_stride64_b64 in GFX11 1570*61046927SAndroid Build Coastguard Worker ("ds_condxchg32_rtn_b64", op(gfx7=0x7e)), 1571*61046927SAndroid Build Coastguard Worker ("ds_add_src2_u32", op(0x80, gfx11=-1)), 1572*61046927SAndroid Build Coastguard Worker ("ds_sub_src2_u32", op(0x81, gfx11=-1)), 1573*61046927SAndroid Build Coastguard Worker ("ds_rsub_src2_u32", op(0x82, gfx11=-1)), 1574*61046927SAndroid Build Coastguard Worker ("ds_inc_src2_u32", op(0x83, gfx11=-1)), 1575*61046927SAndroid Build Coastguard Worker ("ds_dec_src2_u32", op(0x84, gfx11=-1)), 1576*61046927SAndroid Build Coastguard Worker ("ds_min_src2_i32", op(0x85, gfx11=-1)), 1577*61046927SAndroid Build Coastguard Worker ("ds_max_src2_i32", op(0x86, gfx11=-1)), 1578*61046927SAndroid Build Coastguard Worker ("ds_min_src2_u32", op(0x87, gfx11=-1)), 1579*61046927SAndroid Build Coastguard Worker ("ds_max_src2_u32", op(0x88, gfx11=-1)), 1580*61046927SAndroid Build Coastguard Worker ("ds_and_src2_b32", op(0x89, gfx11=-1)), 1581*61046927SAndroid Build Coastguard Worker ("ds_or_src2_b32", op(0x8a, gfx11=-1)), 1582*61046927SAndroid Build Coastguard Worker ("ds_xor_src2_b32", op(0x8b, gfx11=-1)), 1583*61046927SAndroid Build Coastguard Worker ("ds_write_src2_b32", op(0x8d, gfx11=-1)), 1584*61046927SAndroid Build Coastguard Worker ("ds_min_src2_f32", op(0x92, gfx11=-1)), 1585*61046927SAndroid Build Coastguard Worker ("ds_max_src2_f32", op(0x93, gfx11=-1)), 1586*61046927SAndroid Build Coastguard Worker ("ds_add_src2_f32", op(gfx8=0x95, gfx11=-1)), 1587*61046927SAndroid Build Coastguard Worker ("ds_gws_sema_release_all", op(gfx7=0x18, gfx8=0x98, gfx10=0x18, gfx12=-1)), 1588*61046927SAndroid Build Coastguard Worker ("ds_gws_init", op(0x19, gfx8=0x99, gfx10=0x19, gfx12=-1)), 1589*61046927SAndroid Build Coastguard Worker ("ds_gws_sema_v", op(0x1a, gfx8=0x9a, gfx10=0x1a, gfx12=-1)), 1590*61046927SAndroid Build Coastguard Worker ("ds_gws_sema_br", op(0x1b, gfx8=0x9b, gfx10=0x1b, gfx12=-1)), 1591*61046927SAndroid Build Coastguard Worker ("ds_gws_sema_p", op(0x1c, gfx8=0x9c, gfx10=0x1c, gfx12=-1)), 1592*61046927SAndroid Build Coastguard Worker ("ds_gws_barrier", op(0x1d, gfx8=0x9d, gfx10=0x1d, gfx12=-1)), 1593*61046927SAndroid Build Coastguard Worker ("ds_read_addtid_b32", op(gfx8=0xb6, gfx10=0xb1)), #ds_load_addtid_b32 in GFX11 1594*61046927SAndroid Build Coastguard Worker ("ds_consume", op(0x3d, gfx8=0xbd, gfx10=0x3d)), 1595*61046927SAndroid Build Coastguard Worker ("ds_append", op(0x3e, gfx8=0xbe, gfx10=0x3e)), 1596*61046927SAndroid Build Coastguard Worker ("ds_ordered_count", op(0x3f, gfx8=0xbf, gfx10=0x3f, gfx12=-1)), 1597*61046927SAndroid Build Coastguard Worker ("ds_add_src2_u64", op(0xc0, gfx11=-1)), 1598*61046927SAndroid Build Coastguard Worker ("ds_sub_src2_u64", op(0xc1, gfx11=-1)), 1599*61046927SAndroid Build Coastguard Worker ("ds_rsub_src2_u64", op(0xc2, gfx11=-1)), 1600*61046927SAndroid Build Coastguard Worker ("ds_inc_src2_u64", op(0xc3, gfx11=-1)), 1601*61046927SAndroid Build Coastguard Worker ("ds_dec_src2_u64", op(0xc4, gfx11=-1)), 1602*61046927SAndroid Build Coastguard Worker ("ds_min_src2_i64", op(0xc5, gfx11=-1)), 1603*61046927SAndroid Build Coastguard Worker ("ds_max_src2_i64", op(0xc6, gfx11=-1)), 1604*61046927SAndroid Build Coastguard Worker ("ds_min_src2_u64", op(0xc7, gfx11=-1)), 1605*61046927SAndroid Build Coastguard Worker ("ds_max_src2_u64", op(0xc8, gfx11=-1)), 1606*61046927SAndroid Build Coastguard Worker ("ds_and_src2_b64", op(0xc9, gfx11=-1)), 1607*61046927SAndroid Build Coastguard Worker ("ds_or_src2_b64", op(0xca, gfx11=-1)), 1608*61046927SAndroid Build Coastguard Worker ("ds_xor_src2_b64", op(0xcb, gfx11=-1)), 1609*61046927SAndroid Build Coastguard Worker ("ds_write_src2_b64", op(0xcd, gfx11=-1)), 1610*61046927SAndroid Build Coastguard Worker ("ds_min_src2_f64", op(0xd2, gfx11=-1)), 1611*61046927SAndroid Build Coastguard Worker ("ds_max_src2_f64", op(0xd3, gfx11=-1)), 1612*61046927SAndroid Build Coastguard Worker ("ds_write_b96", op(gfx7=0xde)), #ds_store_b96 in GFX11 1613*61046927SAndroid Build Coastguard Worker ("ds_write_b128", op(gfx7=0xdf)), #ds_store_b128 in GFX11 1614*61046927SAndroid Build Coastguard Worker ("ds_condxchg32_rtn_b128", op(gfx7=0xfd, gfx9=-1)), 1615*61046927SAndroid Build Coastguard Worker ("ds_read_b96", op(gfx7=0xfe)), #ds_load_b96 in GFX11 1616*61046927SAndroid Build Coastguard Worker ("ds_read_b128", op(gfx7=0xff)), #ds_load_b128 in GFX11 1617*61046927SAndroid Build Coastguard Worker ("ds_add_gs_reg_rtn", op(gfx11=0x7a, gfx12=-1)), 1618*61046927SAndroid Build Coastguard Worker ("ds_sub_gs_reg_rtn", op(gfx11=0x7b, gfx12=-1)), 1619*61046927SAndroid Build Coastguard Worker ("ds_cond_sub_u32", op(gfx12=0x98)), 1620*61046927SAndroid Build Coastguard Worker ("ds_sub_clamp_u32", op(gfx12=0x99)), 1621*61046927SAndroid Build Coastguard Worker ("ds_cond_sub_rtn", op(gfx12=0xa8)), 1622*61046927SAndroid Build Coastguard Worker ("ds_sub_clamp_rtn_u32", op(gfx12=0xa9)), 1623*61046927SAndroid Build Coastguard Worker ("ds_pk_add_f16", op(gfx12=0x9a)), 1624*61046927SAndroid Build Coastguard Worker ("ds_pk_add_rtn_f16", op(gfx12=0xaa)), 1625*61046927SAndroid Build Coastguard Worker ("ds_pk_add_bf16", op(gfx12=0x9b)), 1626*61046927SAndroid Build Coastguard Worker ("ds_pk_add_rtn_bf16", op(gfx12=0xab)), 1627*61046927SAndroid Build Coastguard Worker} 1628*61046927SAndroid Build Coastguard Workerfor (name, num) in DS: 1629*61046927SAndroid Build Coastguard Worker insn(name, num, Format.DS, InstrClass.DS) 1630*61046927SAndroid Build Coastguard Worker 1631*61046927SAndroid Build Coastguard Worker 1632*61046927SAndroid Build Coastguard Worker# LDSDIR instructions: 1633*61046927SAndroid Build Coastguard WorkerLDSDIR = { 1634*61046927SAndroid Build Coastguard Worker ("lds_param_load", op(gfx11=0x00)), #called ds_param_load in GFX12? 1635*61046927SAndroid Build Coastguard Worker ("lds_direct_load", op(gfx11=0x01)), #called ds_param_load in GFX12? 1636*61046927SAndroid Build Coastguard Worker} 1637*61046927SAndroid Build Coastguard Workerfor (name, num) in LDSDIR: 1638*61046927SAndroid Build Coastguard Worker insn(name, num, Format.LDSDIR, InstrClass.DS) 1639*61046927SAndroid Build Coastguard Worker 1640*61046927SAndroid Build Coastguard Worker# MUBUF instructions: 1641*61046927SAndroid Build Coastguard WorkerMUBUF = { 1642*61046927SAndroid Build Coastguard Worker ("buffer_load_format_x", op(0x00)), 1643*61046927SAndroid Build Coastguard Worker ("buffer_load_format_xy", op(0x01)), 1644*61046927SAndroid Build Coastguard Worker ("buffer_load_format_xyz", op(0x02)), 1645*61046927SAndroid Build Coastguard Worker ("buffer_load_format_xyzw", op(0x03)), 1646*61046927SAndroid Build Coastguard Worker ("buffer_store_format_x", op(0x04)), 1647*61046927SAndroid Build Coastguard Worker ("buffer_store_format_xy", op(0x05)), 1648*61046927SAndroid Build Coastguard Worker ("buffer_store_format_xyz", op(0x06)), 1649*61046927SAndroid Build Coastguard Worker ("buffer_store_format_xyzw", op(0x07)), 1650*61046927SAndroid Build Coastguard Worker ("buffer_load_format_d16_x", op(gfx8=0x08, gfx10=0x80, gfx11=0x08)), 1651*61046927SAndroid Build Coastguard Worker ("buffer_load_format_d16_xy", op(gfx8=0x09, gfx10=0x81, gfx11=0x09)), 1652*61046927SAndroid Build Coastguard Worker ("buffer_load_format_d16_xyz", op(gfx8=0x0a, gfx10=0x82, gfx11=0x0a)), 1653*61046927SAndroid Build Coastguard Worker ("buffer_load_format_d16_xyzw", op(gfx8=0x0b, gfx10=0x83, gfx11=0x0b)), 1654*61046927SAndroid Build Coastguard Worker ("buffer_store_format_d16_x", op(gfx8=0x0c, gfx10=0x84, gfx11=0x0c)), 1655*61046927SAndroid Build Coastguard Worker ("buffer_store_format_d16_xy", op(gfx8=0x0d, gfx10=0x85, gfx11=0x0d)), 1656*61046927SAndroid Build Coastguard Worker ("buffer_store_format_d16_xyz", op(gfx8=0x0e, gfx10=0x86, gfx11=0x0e)), 1657*61046927SAndroid Build Coastguard Worker ("buffer_store_format_d16_xyzw", op(gfx8=0x0f, gfx10=0x87, gfx11=0x0f)), 1658*61046927SAndroid Build Coastguard Worker ("buffer_load_ubyte", op(0x08, gfx8=0x10, gfx10=0x08, gfx11=0x10)), 1659*61046927SAndroid Build Coastguard Worker ("buffer_load_sbyte", op(0x09, gfx8=0x11, gfx10=0x09, gfx11=0x11)), 1660*61046927SAndroid Build Coastguard Worker ("buffer_load_ushort", op(0x0a, gfx8=0x12, gfx10=0x0a, gfx11=0x12)), 1661*61046927SAndroid Build Coastguard Worker ("buffer_load_sshort", op(0x0b, gfx8=0x13, gfx10=0x0b, gfx11=0x13)), 1662*61046927SAndroid Build Coastguard Worker ("buffer_load_dword", op(0x0c, gfx8=0x14, gfx10=0x0c, gfx11=0x14)), 1663*61046927SAndroid Build Coastguard Worker ("buffer_load_dwordx2", op(0x0d, gfx8=0x15, gfx10=0x0d, gfx11=0x15)), 1664*61046927SAndroid Build Coastguard Worker ("buffer_load_dwordx3", op(gfx7=0x0f, gfx8=0x16, gfx10=0x0f, gfx11=0x16)), 1665*61046927SAndroid Build Coastguard Worker ("buffer_load_dwordx4", op(0x0e, gfx8=0x17, gfx10=0x0e, gfx11=0x17)), 1666*61046927SAndroid Build Coastguard Worker ("buffer_store_byte", op(0x18)), 1667*61046927SAndroid Build Coastguard Worker ("buffer_store_byte_d16_hi", op(gfx9=0x19, gfx11=0x24)), 1668*61046927SAndroid Build Coastguard Worker ("buffer_store_short", op(0x1a, gfx11=0x19)), 1669*61046927SAndroid Build Coastguard Worker ("buffer_store_short_d16_hi", op(gfx9=0x1b, gfx11=0x25)), 1670*61046927SAndroid Build Coastguard Worker ("buffer_store_dword", op(0x1c, gfx11=0x1a)), 1671*61046927SAndroid Build Coastguard Worker ("buffer_store_dwordx2", op(0x1d, gfx11=0x1b)), 1672*61046927SAndroid Build Coastguard Worker ("buffer_store_dwordx3", op(gfx7=0x1f, gfx8=0x1e, gfx10=0x1f, gfx11=0x1c)), 1673*61046927SAndroid Build Coastguard Worker ("buffer_store_dwordx4", op(0x1e, gfx8=0x1f, gfx10=0x1e, gfx11=0x1d)), 1674*61046927SAndroid Build Coastguard Worker ("buffer_load_ubyte_d16", op(gfx9=0x20, gfx11=0x1e)), 1675*61046927SAndroid Build Coastguard Worker ("buffer_load_ubyte_d16_hi", op(gfx9=0x21)), 1676*61046927SAndroid Build Coastguard Worker ("buffer_load_sbyte_d16", op(gfx9=0x22, gfx11=0x1f)), 1677*61046927SAndroid Build Coastguard Worker ("buffer_load_sbyte_d16_hi", op(gfx9=0x23, gfx11=0x22)), 1678*61046927SAndroid Build Coastguard Worker ("buffer_load_short_d16", op(gfx9=0x24, gfx11=0x20)), 1679*61046927SAndroid Build Coastguard Worker ("buffer_load_short_d16_hi", op(gfx9=0x25, gfx11=0x23)), 1680*61046927SAndroid Build Coastguard Worker ("buffer_load_format_d16_hi_x", op(gfx9=0x26)), 1681*61046927SAndroid Build Coastguard Worker ("buffer_store_format_d16_hi_x", op(gfx9=0x27)), 1682*61046927SAndroid Build Coastguard Worker ("buffer_store_lds_dword", op(gfx8=0x3d, gfx10=-1)), 1683*61046927SAndroid Build Coastguard Worker ("buffer_wbinvl1", op(0x71, gfx8=0x3e, gfx10=-1)), 1684*61046927SAndroid Build Coastguard Worker ("buffer_wbinvl1_vol", op(0x70, gfx8=0x3f, gfx10=-1)), 1685*61046927SAndroid Build Coastguard Worker ("buffer_atomic_swap", op(0x30, gfx8=0x40, gfx10=0x30, gfx11=0x33)), 1686*61046927SAndroid Build Coastguard Worker ("buffer_atomic_cmpswap", op(0x31, gfx8=0x41, gfx10=0x31, gfx11=0x34)), 1687*61046927SAndroid Build Coastguard Worker ("buffer_atomic_add", op(0x32, gfx8=0x42, gfx10=0x32, gfx11=0x35)), 1688*61046927SAndroid Build Coastguard Worker ("buffer_atomic_sub", op(0x33, gfx8=0x43, gfx10=0x33, gfx11=0x36)), 1689*61046927SAndroid Build Coastguard Worker ("buffer_atomic_rsub", op(0x34, gfx7=-1)), 1690*61046927SAndroid Build Coastguard Worker ("buffer_atomic_smin", op(0x35, gfx8=0x44, gfx10=0x35, gfx11=0x38)), 1691*61046927SAndroid Build Coastguard Worker ("buffer_atomic_umin", op(0x36, gfx8=0x45, gfx10=0x36, gfx11=0x39)), 1692*61046927SAndroid Build Coastguard Worker ("buffer_atomic_smax", op(0x37, gfx8=0x46, gfx10=0x37, gfx11=0x3a)), 1693*61046927SAndroid Build Coastguard Worker ("buffer_atomic_umax", op(0x38, gfx8=0x47, gfx10=0x38, gfx11=0x3b)), 1694*61046927SAndroid Build Coastguard Worker ("buffer_atomic_and", op(0x39, gfx8=0x48, gfx10=0x39, gfx11=0x3c)), 1695*61046927SAndroid Build Coastguard Worker ("buffer_atomic_or", op(0x3a, gfx8=0x49, gfx10=0x3a, gfx11=0x3d)), 1696*61046927SAndroid Build Coastguard Worker ("buffer_atomic_xor", op(0x3b, gfx8=0x4a, gfx10=0x3b, gfx11=0x3e)), 1697*61046927SAndroid Build Coastguard Worker ("buffer_atomic_inc", op(0x3c, gfx8=0x4b, gfx10=0x3c, gfx11=0x3f)), 1698*61046927SAndroid Build Coastguard Worker ("buffer_atomic_dec", op(0x3d, gfx8=0x4c, gfx10=0x3d, gfx11=0x40)), 1699*61046927SAndroid Build Coastguard Worker ("buffer_atomic_fcmpswap", op(0x3e, gfx8=-1, gfx10=0x3e, gfx11=0x50, gfx12=-1)), 1700*61046927SAndroid Build Coastguard Worker ("buffer_atomic_fmin", op(0x3f, gfx8=-1, gfx10=0x3f, gfx11=0x51)), 1701*61046927SAndroid Build Coastguard Worker ("buffer_atomic_fmax", op(0x40, gfx8=-1, gfx10=0x40, gfx11=0x52)), 1702*61046927SAndroid Build Coastguard Worker ("buffer_atomic_swap_x2", op(0x50, gfx8=0x60, gfx10=0x50, gfx11=0x41)), 1703*61046927SAndroid Build Coastguard Worker ("buffer_atomic_cmpswap_x2", op(0x51, gfx8=0x61, gfx10=0x51, gfx11=0x42)), 1704*61046927SAndroid Build Coastguard Worker ("buffer_atomic_add_x2", op(0x52, gfx8=0x62, gfx10=0x52, gfx11=0x43)), 1705*61046927SAndroid Build Coastguard Worker ("buffer_atomic_sub_x2", op(0x53, gfx8=0x63, gfx10=0x53, gfx11=0x44)), 1706*61046927SAndroid Build Coastguard Worker ("buffer_atomic_rsub_x2", op(0x54, gfx7=-1)), 1707*61046927SAndroid Build Coastguard Worker ("buffer_atomic_smin_x2", op(0x55, gfx8=0x64, gfx10=0x55, gfx11=0x45)), 1708*61046927SAndroid Build Coastguard Worker ("buffer_atomic_umin_x2", op(0x56, gfx8=0x65, gfx10=0x56, gfx11=0x46)), 1709*61046927SAndroid Build Coastguard Worker ("buffer_atomic_smax_x2", op(0x57, gfx8=0x66, gfx10=0x57, gfx11=0x47)), 1710*61046927SAndroid Build Coastguard Worker ("buffer_atomic_umax_x2", op(0x58, gfx8=0x67, gfx10=0x58, gfx11=0x48)), 1711*61046927SAndroid Build Coastguard Worker ("buffer_atomic_and_x2", op(0x59, gfx8=0x68, gfx10=0x59, gfx11=0x49)), 1712*61046927SAndroid Build Coastguard Worker ("buffer_atomic_or_x2", op(0x5a, gfx8=0x69, gfx10=0x5a, gfx11=0x4a)), 1713*61046927SAndroid Build Coastguard Worker ("buffer_atomic_xor_x2", op(0x5b, gfx8=0x6a, gfx10=0x5b, gfx11=0x4b)), 1714*61046927SAndroid Build Coastguard Worker ("buffer_atomic_inc_x2", op(0x5c, gfx8=0x6b, gfx10=0x5c, gfx11=0x4c)), 1715*61046927SAndroid Build Coastguard Worker ("buffer_atomic_dec_x2", op(0x5d, gfx8=0x6c, gfx10=0x5d, gfx11=0x4d)), 1716*61046927SAndroid Build Coastguard Worker ("buffer_atomic_fcmpswap_x2", op(0x5e, gfx8=-1, gfx10=0x5e, gfx11=-1)), 1717*61046927SAndroid Build Coastguard Worker ("buffer_atomic_fmin_x2", op(0x5f, gfx8=-1, gfx10=0x5f, gfx11=-1)), 1718*61046927SAndroid Build Coastguard Worker ("buffer_atomic_fmax_x2", op(0x60, gfx8=-1, gfx10=0x60, gfx11=-1)), 1719*61046927SAndroid Build Coastguard Worker ("buffer_gl0_inv", op(gfx10=0x71, gfx11=0x2b, gfx12=-1)), 1720*61046927SAndroid Build Coastguard Worker ("buffer_gl1_inv", op(gfx10=0x72, gfx11=0x2c, gfx12=-1)), 1721*61046927SAndroid Build Coastguard Worker ("buffer_atomic_csub", op(gfx10=0x34, gfx11=0x37)), #GFX10.3+. seems glc must be set. buffer_atomic_csub_u32 in GFX11 1722*61046927SAndroid Build Coastguard Worker ("buffer_load_lds_b32", op(gfx11=0x31, gfx12=-1)), 1723*61046927SAndroid Build Coastguard Worker ("buffer_load_lds_format_x", op(gfx11=0x32, gfx12=-1)), 1724*61046927SAndroid Build Coastguard Worker ("buffer_load_lds_i8", op(gfx11=0x2e, gfx12=-1)), 1725*61046927SAndroid Build Coastguard Worker ("buffer_load_lds_i16", op(gfx11=0x30, gfx12=-1)), 1726*61046927SAndroid Build Coastguard Worker ("buffer_load_lds_u8", op(gfx11=0x2d, gfx12=-1)), 1727*61046927SAndroid Build Coastguard Worker ("buffer_load_lds_u16", op(gfx11=0x2f, gfx12=-1)), 1728*61046927SAndroid Build Coastguard Worker ("buffer_atomic_add_f32", op(gfx11=0x56)), 1729*61046927SAndroid Build Coastguard Worker ("buffer_atomic_pk_add_f16", op(gfx12=0x59)), 1730*61046927SAndroid Build Coastguard Worker ("buffer_atomic_pk_add_bf16", op(gfx12=0x5a)), 1731*61046927SAndroid Build Coastguard Worker} 1732*61046927SAndroid Build Coastguard Workerfor (name, num) in MUBUF: 1733*61046927SAndroid Build Coastguard Worker insn(name, num, Format.MUBUF, InstrClass.VMem, is_atomic = "atomic" in name) 1734*61046927SAndroid Build Coastguard Worker 1735*61046927SAndroid Build Coastguard WorkerMTBUF = { 1736*61046927SAndroid Build Coastguard Worker ("tbuffer_load_format_x", op(0x00)), 1737*61046927SAndroid Build Coastguard Worker ("tbuffer_load_format_xy", op(0x01)), 1738*61046927SAndroid Build Coastguard Worker ("tbuffer_load_format_xyz", op(0x02)), 1739*61046927SAndroid Build Coastguard Worker ("tbuffer_load_format_xyzw", op(0x03)), 1740*61046927SAndroid Build Coastguard Worker ("tbuffer_store_format_x", op(0x04)), 1741*61046927SAndroid Build Coastguard Worker ("tbuffer_store_format_xy", op(0x05)), 1742*61046927SAndroid Build Coastguard Worker ("tbuffer_store_format_xyz", op(0x06)), 1743*61046927SAndroid Build Coastguard Worker ("tbuffer_store_format_xyzw", op(0x07)), 1744*61046927SAndroid Build Coastguard Worker ("tbuffer_load_format_d16_x", op(gfx8=0x08)), 1745*61046927SAndroid Build Coastguard Worker ("tbuffer_load_format_d16_xy", op(gfx8=0x09)), 1746*61046927SAndroid Build Coastguard Worker ("tbuffer_load_format_d16_xyz", op(gfx8=0x0a)), 1747*61046927SAndroid Build Coastguard Worker ("tbuffer_load_format_d16_xyzw", op(gfx8=0x0b)), 1748*61046927SAndroid Build Coastguard Worker ("tbuffer_store_format_d16_x", op(gfx8=0x0c)), 1749*61046927SAndroid Build Coastguard Worker ("tbuffer_store_format_d16_xy", op(gfx8=0x0d)), 1750*61046927SAndroid Build Coastguard Worker ("tbuffer_store_format_d16_xyz", op(gfx8=0x0e)), 1751*61046927SAndroid Build Coastguard Worker ("tbuffer_store_format_d16_xyzw", op(gfx8=0x0f)), 1752*61046927SAndroid Build Coastguard Worker} 1753*61046927SAndroid Build Coastguard Workerfor (name, num) in MTBUF: 1754*61046927SAndroid Build Coastguard Worker insn(name, num, Format.MTBUF, InstrClass.VMem) 1755*61046927SAndroid Build Coastguard Worker 1756*61046927SAndroid Build Coastguard Worker 1757*61046927SAndroid Build Coastguard WorkerMIMG = { 1758*61046927SAndroid Build Coastguard Worker ("image_load", op(0x00)), 1759*61046927SAndroid Build Coastguard Worker ("image_load_mip", op(0x01)), 1760*61046927SAndroid Build Coastguard Worker ("image_load_pck", op(0x02)), 1761*61046927SAndroid Build Coastguard Worker ("image_load_pck_sgn", op(0x03)), 1762*61046927SAndroid Build Coastguard Worker ("image_load_mip_pck", op(0x04)), 1763*61046927SAndroid Build Coastguard Worker ("image_load_mip_pck_sgn", op(0x05)), 1764*61046927SAndroid Build Coastguard Worker ("image_store", op(0x08, gfx11=0x06)), 1765*61046927SAndroid Build Coastguard Worker ("image_store_mip", op(0x09, gfx11=0x07)), 1766*61046927SAndroid Build Coastguard Worker ("image_store_pck", op(0x0a, gfx11=0x08)), 1767*61046927SAndroid Build Coastguard Worker ("image_store_mip_pck", op(0x0b, gfx11=0x09)), 1768*61046927SAndroid Build Coastguard Worker ("image_get_resinfo", op(0x0e, gfx11=0x17)), 1769*61046927SAndroid Build Coastguard Worker ("image_get_lod", op(0x60, gfx11=0x38)), 1770*61046927SAndroid Build Coastguard Worker ("image_msaa_load", op(gfx10=0x80, gfx11=0x18)), #GFX10.3+ 1771*61046927SAndroid Build Coastguard Worker ("image_atomic_swap", op(0x0f, gfx8=0x10, gfx10=0x0f, gfx11=0x0a)), 1772*61046927SAndroid Build Coastguard Worker ("image_atomic_cmpswap", op(0x10, gfx8=0x11, gfx10=0x10, gfx11=0x0b)), 1773*61046927SAndroid Build Coastguard Worker ("image_atomic_add", op(0x11, gfx8=0x12, gfx10=0x11, gfx11=0x0c)), 1774*61046927SAndroid Build Coastguard Worker ("image_atomic_sub", op(0x12, gfx8=0x13, gfx10=0x12, gfx11=0x0d)), 1775*61046927SAndroid Build Coastguard Worker ("image_atomic_rsub", op(0x13, gfx7=-1)), 1776*61046927SAndroid Build Coastguard Worker ("image_atomic_smin", op(0x14, gfx11=0x0e)), 1777*61046927SAndroid Build Coastguard Worker ("image_atomic_umin", op(0x15, gfx11=0x0f)), 1778*61046927SAndroid Build Coastguard Worker ("image_atomic_smax", op(0x16, gfx11=0x10)), 1779*61046927SAndroid Build Coastguard Worker ("image_atomic_umax", op(0x17, gfx11=0x11)), 1780*61046927SAndroid Build Coastguard Worker ("image_atomic_and", op(0x18, gfx11=0x12)), 1781*61046927SAndroid Build Coastguard Worker ("image_atomic_or", op(0x19, gfx11=0x13)), 1782*61046927SAndroid Build Coastguard Worker ("image_atomic_xor", op(0x1a, gfx11=0x14)), 1783*61046927SAndroid Build Coastguard Worker ("image_atomic_inc", op(0x1b, gfx11=0x15)), 1784*61046927SAndroid Build Coastguard Worker ("image_atomic_dec", op(0x1c, gfx11=0x16)), 1785*61046927SAndroid Build Coastguard Worker ("image_atomic_fcmpswap", op(0x1d, gfx8=-1, gfx10=0x1d, gfx11=-1)), 1786*61046927SAndroid Build Coastguard Worker ("image_atomic_fmin", op(0x1e, gfx8=-1, gfx10=0x1e, gfx11=-1, gfx12=0x84)), #image_atomic_min_num_flt in GFX12 1787*61046927SAndroid Build Coastguard Worker ("image_atomic_fmax", op(0x1f, gfx8=-1, gfx10=0x1f, gfx11=-1, gfx12=0x85)), #image_atomic_max_num_flt in GFX12 1788*61046927SAndroid Build Coastguard Worker ("image_atomic_pk_add_f16", op(gfx12=0x86)), 1789*61046927SAndroid Build Coastguard Worker ("image_atomic_pk_add_bf16", op(gfx12=0x87)), 1790*61046927SAndroid Build Coastguard Worker ("image_atomic_add_flt", op(gfx12=0x83)), 1791*61046927SAndroid Build Coastguard Worker ("image_sample", op(0x20, gfx11=0x1b)), 1792*61046927SAndroid Build Coastguard Worker ("image_sample_cl", op(0x21, gfx11=0x40)), 1793*61046927SAndroid Build Coastguard Worker ("image_sample_d", op(0x22, gfx11=0x1c)), 1794*61046927SAndroid Build Coastguard Worker ("image_sample_d_cl", op(0x23, gfx11=0x41)), 1795*61046927SAndroid Build Coastguard Worker ("image_sample_l", op(0x24, gfx11=0x1d)), 1796*61046927SAndroid Build Coastguard Worker ("image_sample_b", op(0x25, gfx11=0x1e)), 1797*61046927SAndroid Build Coastguard Worker ("image_sample_b_cl", op(0x26, gfx11=0x42)), 1798*61046927SAndroid Build Coastguard Worker ("image_sample_lz", op(0x27, gfx11=0x1f)), 1799*61046927SAndroid Build Coastguard Worker ("image_sample_c", op(0x28, gfx11=0x20)), 1800*61046927SAndroid Build Coastguard Worker ("image_sample_c_cl", op(0x29, gfx11=0x43)), 1801*61046927SAndroid Build Coastguard Worker ("image_sample_c_d", op(0x2a, gfx11=0x21)), 1802*61046927SAndroid Build Coastguard Worker ("image_sample_c_d_cl", op(0x2b, gfx11=0x44)), 1803*61046927SAndroid Build Coastguard Worker ("image_sample_c_l", op(0x2c, gfx11=0x22)), 1804*61046927SAndroid Build Coastguard Worker ("image_sample_c_b", op(0x2d, gfx11=0x23)), 1805*61046927SAndroid Build Coastguard Worker ("image_sample_c_b_cl", op(0x2e, gfx11=0x45)), 1806*61046927SAndroid Build Coastguard Worker ("image_sample_c_lz", op(0x2f, gfx11=0x24)), 1807*61046927SAndroid Build Coastguard Worker ("image_sample_o", op(0x30, gfx11=0x25)), 1808*61046927SAndroid Build Coastguard Worker ("image_sample_cl_o", op(0x31, gfx11=0x46)), 1809*61046927SAndroid Build Coastguard Worker ("image_sample_d_o", op(0x32, gfx11=0x26)), 1810*61046927SAndroid Build Coastguard Worker ("image_sample_d_cl_o", op(0x33, gfx11=0x47)), 1811*61046927SAndroid Build Coastguard Worker ("image_sample_l_o", op(0x34, gfx11=0x27)), 1812*61046927SAndroid Build Coastguard Worker ("image_sample_b_o", op(0x35, gfx11=0x28)), 1813*61046927SAndroid Build Coastguard Worker ("image_sample_b_cl_o", op(0x36, gfx11=0x48)), 1814*61046927SAndroid Build Coastguard Worker ("image_sample_lz_o", op(0x37, gfx11=0x29)), 1815*61046927SAndroid Build Coastguard Worker ("image_sample_c_o", op(0x38, gfx11=0x2a)), 1816*61046927SAndroid Build Coastguard Worker ("image_sample_c_cl_o", op(0x39, gfx11=0x49)), 1817*61046927SAndroid Build Coastguard Worker ("image_sample_c_d_o", op(0x3a, gfx11=0x2b)), 1818*61046927SAndroid Build Coastguard Worker ("image_sample_c_d_cl_o", op(0x3b, gfx11=0x4a)), 1819*61046927SAndroid Build Coastguard Worker ("image_sample_c_l_o", op(0x3c, gfx11=0x2c)), 1820*61046927SAndroid Build Coastguard Worker ("image_sample_c_b_o", op(0x3d, gfx11=0x2d)), 1821*61046927SAndroid Build Coastguard Worker ("image_sample_c_b_cl_o", op(0x3e, gfx11=0x4b)), 1822*61046927SAndroid Build Coastguard Worker ("image_sample_c_lz_o", op(0x3f, gfx11=0x2e)), 1823*61046927SAndroid Build Coastguard Worker ("image_sample_cd", op(0x68, gfx11=-1)), 1824*61046927SAndroid Build Coastguard Worker ("image_sample_cd_cl", op(0x69, gfx11=-1)), 1825*61046927SAndroid Build Coastguard Worker ("image_sample_c_cd", op(0x6a, gfx11=-1)), 1826*61046927SAndroid Build Coastguard Worker ("image_sample_c_cd_cl", op(0x6b, gfx11=-1)), 1827*61046927SAndroid Build Coastguard Worker ("image_sample_cd_o", op(0x6c, gfx11=-1)), 1828*61046927SAndroid Build Coastguard Worker ("image_sample_cd_cl_o", op(0x6d, gfx11=-1)), 1829*61046927SAndroid Build Coastguard Worker ("image_sample_c_cd_o", op(0x6e, gfx11=-1)), 1830*61046927SAndroid Build Coastguard Worker ("image_sample_c_cd_cl_o", op(0x6f, gfx11=-1)), 1831*61046927SAndroid Build Coastguard Worker ("image_sample_d_g16", op(gfx10=0xa2, gfx11=0x39)), 1832*61046927SAndroid Build Coastguard Worker ("image_sample_d_cl_g16", op(gfx10=0xa3, gfx11=0x5f)), 1833*61046927SAndroid Build Coastguard Worker ("image_sample_c_d_g16", op(gfx10=0xaa, gfx11=0x3a)), 1834*61046927SAndroid Build Coastguard Worker ("image_sample_c_d_cl_g16", op(gfx10=0xab, gfx11=0x54)), 1835*61046927SAndroid Build Coastguard Worker ("image_sample_d_o_g16", op(gfx10=0xb2, gfx11=0x3b)), 1836*61046927SAndroid Build Coastguard Worker ("image_sample_d_cl_o_g16", op(gfx10=0xb3, gfx11=0x55)), 1837*61046927SAndroid Build Coastguard Worker ("image_sample_c_d_o_g16", op(gfx10=0xba, gfx11=0x3c)), 1838*61046927SAndroid Build Coastguard Worker ("image_sample_c_d_cl_o_g16", op(gfx10=0xbb, gfx11=0x56)), 1839*61046927SAndroid Build Coastguard Worker #("image_gather4h", op(gfx9=0x42, gfx10=0x61, gfx11=0x90)), VEGA only? 1840*61046927SAndroid Build Coastguard Worker #("image_gather4h_pck", op(gfx9=0x4a, gfx10=-1)), VEGA only? 1841*61046927SAndroid Build Coastguard Worker #("image_gather8h_pck", op(gfx9=0x4b, gfx10=-1)), VEGA only? 1842*61046927SAndroid Build Coastguard Worker ("image_gather4", op(0x40, gfx11=0x2f)), 1843*61046927SAndroid Build Coastguard Worker ("image_gather4_cl", op(0x41, gfx11=0x60)), 1844*61046927SAndroid Build Coastguard Worker ("image_gather4_l", op(0x44, gfx11=0x30)), # following instructions have different opcodes according to ISA sheet. 1845*61046927SAndroid Build Coastguard Worker ("image_gather4_b", op(0x45, gfx11=0x31)), 1846*61046927SAndroid Build Coastguard Worker ("image_gather4_b_cl", op(0x46, gfx11=0x61)), 1847*61046927SAndroid Build Coastguard Worker ("image_gather4_lz", op(0x47, gfx11=0x32)), 1848*61046927SAndroid Build Coastguard Worker ("image_gather4_c", op(0x48, gfx11=0x33)), 1849*61046927SAndroid Build Coastguard Worker ("image_gather4_c_cl", op(0x49, gfx11=0x62)), # previous instructions have different opcodes according to ISA sheet. 1850*61046927SAndroid Build Coastguard Worker ("image_gather4_c_l", op(0x4c, gfx11=0x63)), 1851*61046927SAndroid Build Coastguard Worker ("image_gather4_c_b", op(0x4d, gfx11=0x64)), 1852*61046927SAndroid Build Coastguard Worker ("image_gather4_c_b_cl", op(0x4e, gfx11=0x65)), 1853*61046927SAndroid Build Coastguard Worker ("image_gather4_c_lz", op(0x4f, gfx11=0x34)), 1854*61046927SAndroid Build Coastguard Worker ("image_gather4_o", op(0x50, gfx11=0x35)), 1855*61046927SAndroid Build Coastguard Worker ("image_gather4_cl_o", op(0x51, gfx11=-1)), 1856*61046927SAndroid Build Coastguard Worker ("image_gather4_l_o", op(0x54, gfx11=-1)), 1857*61046927SAndroid Build Coastguard Worker ("image_gather4_b_o", op(0x55, gfx11=-1)), 1858*61046927SAndroid Build Coastguard Worker ("image_gather4_b_cl_o", op(0x56, gfx11=-1)), 1859*61046927SAndroid Build Coastguard Worker ("image_gather4_lz_o", op(0x57, gfx11=0x36)), 1860*61046927SAndroid Build Coastguard Worker ("image_gather4_c_o", op(0x58, gfx11=-1)), 1861*61046927SAndroid Build Coastguard Worker ("image_gather4_c_cl_o", op(0x59, gfx11=-1)), 1862*61046927SAndroid Build Coastguard Worker ("image_gather4_c_l_o", op(0x5c, gfx11=-1)), 1863*61046927SAndroid Build Coastguard Worker ("image_gather4_c_b_o", op(0x5d, gfx11=-1)), 1864*61046927SAndroid Build Coastguard Worker ("image_gather4_c_b_cl_o", op(0x5e, gfx11=-1)), 1865*61046927SAndroid Build Coastguard Worker ("image_gather4_c_lz_o", op(0x5f, gfx11=0x37)), 1866*61046927SAndroid Build Coastguard Worker ("image_bvh_intersect_ray", op(gfx10=0xe6, gfx11=0x19)), 1867*61046927SAndroid Build Coastguard Worker ("image_bvh64_intersect_ray", op(gfx10=0xe7, gfx11=0x1a)), 1868*61046927SAndroid Build Coastguard Worker} 1869*61046927SAndroid Build Coastguard Workerfor (name, num) in MIMG: 1870*61046927SAndroid Build Coastguard Worker insn(name, num, Format.MIMG, InstrClass.VMem, is_atomic = "atomic" in name) 1871*61046927SAndroid Build Coastguard Worker 1872*61046927SAndroid Build Coastguard WorkerFLAT = { 1873*61046927SAndroid Build Coastguard Worker ("flat_load_ubyte", op(0x08, gfx8=0x10, gfx10=0x08, gfx11=0x10)), 1874*61046927SAndroid Build Coastguard Worker ("flat_load_sbyte", op(0x09, gfx8=0x11, gfx10=0x09, gfx11=0x11)), 1875*61046927SAndroid Build Coastguard Worker ("flat_load_ushort", op(0x0a, gfx8=0x12, gfx10=0x0a, gfx11=0x12)), 1876*61046927SAndroid Build Coastguard Worker ("flat_load_sshort", op(0x0b, gfx8=0x13, gfx10=0x0b, gfx11=0x13)), 1877*61046927SAndroid Build Coastguard Worker ("flat_load_dword", op(0x0c, gfx8=0x14, gfx10=0x0c, gfx11=0x14)), 1878*61046927SAndroid Build Coastguard Worker ("flat_load_dwordx2", op(0x0d, gfx8=0x15, gfx10=0x0d, gfx11=0x15)), 1879*61046927SAndroid Build Coastguard Worker ("flat_load_dwordx3", op(0x0f, gfx8=0x16, gfx10=0x0f, gfx11=0x16)), 1880*61046927SAndroid Build Coastguard Worker ("flat_load_dwordx4", op(0x0e, gfx8=0x17, gfx10=0x0e, gfx11=0x17)), 1881*61046927SAndroid Build Coastguard Worker ("flat_store_byte", op(0x18)), 1882*61046927SAndroid Build Coastguard Worker ("flat_store_byte_d16_hi", op(gfx8=0x19, gfx11=0x24)), 1883*61046927SAndroid Build Coastguard Worker ("flat_store_short", op(0x1a, gfx11=0x19)), 1884*61046927SAndroid Build Coastguard Worker ("flat_store_short_d16_hi", op(gfx8=0x1b, gfx11=0x25)), 1885*61046927SAndroid Build Coastguard Worker ("flat_store_dword", op(0x1c, gfx11=0x1a)), 1886*61046927SAndroid Build Coastguard Worker ("flat_store_dwordx2", op(0x1d, gfx11=0x1b)), 1887*61046927SAndroid Build Coastguard Worker ("flat_store_dwordx3", op(0x1f, gfx8=0x1e, gfx10=0x1f, gfx11=0x1c)), 1888*61046927SAndroid Build Coastguard Worker ("flat_store_dwordx4", op(0x1e, gfx8=0x1f, gfx10=0x1e, gfx11=0x1d)), 1889*61046927SAndroid Build Coastguard Worker ("flat_load_ubyte_d16", op(gfx8=0x20, gfx11=0x1e)), 1890*61046927SAndroid Build Coastguard Worker ("flat_load_ubyte_d16_hi", op(gfx8=0x21)), 1891*61046927SAndroid Build Coastguard Worker ("flat_load_sbyte_d16", op(gfx8=0x22, gfx11=0x1f)), 1892*61046927SAndroid Build Coastguard Worker ("flat_load_sbyte_d16_hi", op(gfx8=0x23, gfx11=0x22)), 1893*61046927SAndroid Build Coastguard Worker ("flat_load_short_d16", op(gfx8=0x24, gfx11=0x20)), 1894*61046927SAndroid Build Coastguard Worker ("flat_load_short_d16_hi", op(gfx8=0x25, gfx11=0x23)), 1895*61046927SAndroid Build Coastguard Worker ("flat_atomic_swap", op(0x30, gfx8=0x40, gfx10=0x30, gfx11=0x33)), 1896*61046927SAndroid Build Coastguard Worker ("flat_atomic_cmpswap", op(0x31, gfx8=0x41, gfx10=0x31, gfx11=0x34)), 1897*61046927SAndroid Build Coastguard Worker ("flat_atomic_add", op(0x32, gfx8=0x42, gfx10=0x32, gfx11=0x35)), 1898*61046927SAndroid Build Coastguard Worker ("flat_atomic_sub", op(0x33, gfx8=0x43, gfx10=0x33, gfx11=0x36)), 1899*61046927SAndroid Build Coastguard Worker ("flat_atomic_smin", op(0x35, gfx8=0x44, gfx10=0x35, gfx11=0x38)), 1900*61046927SAndroid Build Coastguard Worker ("flat_atomic_umin", op(0x36, gfx8=0x45, gfx10=0x36, gfx11=0x39)), 1901*61046927SAndroid Build Coastguard Worker ("flat_atomic_smax", op(0x37, gfx8=0x46, gfx10=0x37, gfx11=0x3a)), 1902*61046927SAndroid Build Coastguard Worker ("flat_atomic_umax", op(0x38, gfx8=0x47, gfx10=0x38, gfx11=0x3b)), 1903*61046927SAndroid Build Coastguard Worker ("flat_atomic_and", op(0x39, gfx8=0x48, gfx10=0x39, gfx11=0x3c)), 1904*61046927SAndroid Build Coastguard Worker ("flat_atomic_or", op(0x3a, gfx8=0x49, gfx10=0x3a, gfx11=0x3d)), 1905*61046927SAndroid Build Coastguard Worker ("flat_atomic_xor", op(0x3b, gfx8=0x4a, gfx10=0x3b, gfx11=0x3e)), 1906*61046927SAndroid Build Coastguard Worker ("flat_atomic_inc", op(0x3c, gfx8=0x4b, gfx10=0x3c, gfx11=0x3f)), 1907*61046927SAndroid Build Coastguard Worker ("flat_atomic_dec", op(0x3d, gfx8=0x4c, gfx10=0x3d, gfx11=0x40)), 1908*61046927SAndroid Build Coastguard Worker ("flat_atomic_fcmpswap", op(0x3e, gfx8=-1, gfx10=0x3e, gfx11=0x50, gfx12=-1)), 1909*61046927SAndroid Build Coastguard Worker ("flat_atomic_fmin", op(0x3f, gfx8=-1, gfx10=0x3f, gfx11=0x51)), 1910*61046927SAndroid Build Coastguard Worker ("flat_atomic_fmax", op(0x40, gfx8=-1, gfx10=0x40, gfx11=0x52)), 1911*61046927SAndroid Build Coastguard Worker ("flat_atomic_swap_x2", op(0x50, gfx8=0x60, gfx10=0x50, gfx11=0x41)), 1912*61046927SAndroid Build Coastguard Worker ("flat_atomic_cmpswap_x2", op(0x51, gfx8=0x61, gfx10=0x51, gfx11=0x42)), 1913*61046927SAndroid Build Coastguard Worker ("flat_atomic_add_x2", op(0x52, gfx8=0x62, gfx10=0x52, gfx11=0x43)), 1914*61046927SAndroid Build Coastguard Worker ("flat_atomic_sub_x2", op(0x53, gfx8=0x63, gfx10=0x53, gfx11=0x44)), 1915*61046927SAndroid Build Coastguard Worker ("flat_atomic_smin_x2", op(0x55, gfx8=0x64, gfx10=0x55, gfx11=0x45)), 1916*61046927SAndroid Build Coastguard Worker ("flat_atomic_umin_x2", op(0x56, gfx8=0x65, gfx10=0x56, gfx11=0x46)), 1917*61046927SAndroid Build Coastguard Worker ("flat_atomic_smax_x2", op(0x57, gfx8=0x66, gfx10=0x57, gfx11=0x47)), 1918*61046927SAndroid Build Coastguard Worker ("flat_atomic_umax_x2", op(0x58, gfx8=0x67, gfx10=0x58, gfx11=0x48)), 1919*61046927SAndroid Build Coastguard Worker ("flat_atomic_and_x2", op(0x59, gfx8=0x68, gfx10=0x59, gfx11=0x49)), 1920*61046927SAndroid Build Coastguard Worker ("flat_atomic_or_x2", op(0x5a, gfx8=0x69, gfx10=0x5a, gfx11=0x4a)), 1921*61046927SAndroid Build Coastguard Worker ("flat_atomic_xor_x2", op(0x5b, gfx8=0x6a, gfx10=0x5b, gfx11=0x4b)), 1922*61046927SAndroid Build Coastguard Worker ("flat_atomic_inc_x2", op(0x5c, gfx8=0x6b, gfx10=0x5c, gfx11=0x4c)), 1923*61046927SAndroid Build Coastguard Worker ("flat_atomic_dec_x2", op(0x5d, gfx8=0x6c, gfx10=0x5d, gfx11=0x4d)), 1924*61046927SAndroid Build Coastguard Worker ("flat_atomic_fcmpswap_x2", op(0x5e, gfx8=-1, gfx10=0x5e, gfx11=-1)), 1925*61046927SAndroid Build Coastguard Worker ("flat_atomic_fmin_x2", op(0x5f, gfx8=-1, gfx10=0x5f, gfx11=-1)), 1926*61046927SAndroid Build Coastguard Worker ("flat_atomic_fmax_x2", op(0x60, gfx8=-1, gfx10=0x60, gfx11=-1)), 1927*61046927SAndroid Build Coastguard Worker ("flat_atomic_add_f32", op(gfx11=0x56)), 1928*61046927SAndroid Build Coastguard Worker ("flat_atomic_csub_u32", op(gfx12=0x37)), 1929*61046927SAndroid Build Coastguard Worker ("flat_atomic_cond_sub_u32", op(gfx12=0x50)), 1930*61046927SAndroid Build Coastguard Worker ("flat_atomic_pk_add_f16", op(gfx12=0x59)), 1931*61046927SAndroid Build Coastguard Worker ("flat_atomic_pk_add_bf16", op(gfx12=0x5a)), 1932*61046927SAndroid Build Coastguard Worker} 1933*61046927SAndroid Build Coastguard Workerfor (name, num) in FLAT: 1934*61046927SAndroid Build Coastguard Worker insn(name, num, Format.FLAT, InstrClass.VMem, is_atomic = "atomic" in name) #TODO: also LDS? 1935*61046927SAndroid Build Coastguard Worker 1936*61046927SAndroid Build Coastguard WorkerGLOBAL = { 1937*61046927SAndroid Build Coastguard Worker ("global_load_ubyte", op(gfx8=0x10, gfx10=0x08, gfx11=0x10)), 1938*61046927SAndroid Build Coastguard Worker ("global_load_sbyte", op(gfx8=0x11, gfx10=0x09, gfx11=0x11)), 1939*61046927SAndroid Build Coastguard Worker ("global_load_ushort", op(gfx8=0x12, gfx10=0x0a, gfx11=0x12)), 1940*61046927SAndroid Build Coastguard Worker ("global_load_sshort", op(gfx8=0x13, gfx10=0x0b, gfx11=0x13)), 1941*61046927SAndroid Build Coastguard Worker ("global_load_dword", op(gfx8=0x14, gfx10=0x0c, gfx11=0x14)), 1942*61046927SAndroid Build Coastguard Worker ("global_load_dwordx2", op(gfx8=0x15, gfx10=0x0d, gfx11=0x15)), 1943*61046927SAndroid Build Coastguard Worker ("global_load_dwordx3", op(gfx8=0x16, gfx10=0x0f, gfx11=0x16)), 1944*61046927SAndroid Build Coastguard Worker ("global_load_dwordx4", op(gfx8=0x17, gfx10=0x0e, gfx11=0x17)), 1945*61046927SAndroid Build Coastguard Worker ("global_store_byte", op(gfx8=0x18)), 1946*61046927SAndroid Build Coastguard Worker ("global_store_byte_d16_hi", op(gfx8=0x19, gfx11=0x24)), 1947*61046927SAndroid Build Coastguard Worker ("global_store_short", op(gfx8=0x1a, gfx11=0x19)), 1948*61046927SAndroid Build Coastguard Worker ("global_store_short_d16_hi", op(gfx8=0x1b, gfx11=0x25)), 1949*61046927SAndroid Build Coastguard Worker ("global_store_dword", op(gfx8=0x1c, gfx11=0x1a)), 1950*61046927SAndroid Build Coastguard Worker ("global_store_dwordx2", op(gfx8=0x1d, gfx11=0x1b)), 1951*61046927SAndroid Build Coastguard Worker ("global_store_dwordx3", op(gfx8=0x1e, gfx10=0x1f, gfx11=0x1c)), 1952*61046927SAndroid Build Coastguard Worker ("global_store_dwordx4", op(gfx8=0x1f, gfx10=0x1e, gfx11=0x1d)), 1953*61046927SAndroid Build Coastguard Worker ("global_load_ubyte_d16", op(gfx8=0x20, gfx11=0x1e)), 1954*61046927SAndroid Build Coastguard Worker ("global_load_ubyte_d16_hi", op(gfx8=0x21)), 1955*61046927SAndroid Build Coastguard Worker ("global_load_sbyte_d16", op(gfx8=0x22, gfx11=0x1f)), 1956*61046927SAndroid Build Coastguard Worker ("global_load_sbyte_d16_hi", op(gfx8=0x23, gfx11=0x22)), 1957*61046927SAndroid Build Coastguard Worker ("global_load_short_d16", op(gfx8=0x24, gfx11=0x20)), 1958*61046927SAndroid Build Coastguard Worker ("global_load_short_d16_hi", op(gfx8=0x25, gfx11=0x23)), 1959*61046927SAndroid Build Coastguard Worker ("global_atomic_swap", op(gfx8=0x40, gfx10=0x30, gfx11=0x33)), 1960*61046927SAndroid Build Coastguard Worker ("global_atomic_cmpswap", op(gfx8=0x41, gfx10=0x31, gfx11=0x34)), 1961*61046927SAndroid Build Coastguard Worker ("global_atomic_add", op(gfx8=0x42, gfx10=0x32, gfx11=0x35)), 1962*61046927SAndroid Build Coastguard Worker ("global_atomic_sub", op(gfx8=0x43, gfx10=0x33, gfx11=0x36)), 1963*61046927SAndroid Build Coastguard Worker ("global_atomic_smin", op(gfx8=0x44, gfx10=0x35, gfx11=0x38)), 1964*61046927SAndroid Build Coastguard Worker ("global_atomic_umin", op(gfx8=0x45, gfx10=0x36, gfx11=0x39)), 1965*61046927SAndroid Build Coastguard Worker ("global_atomic_smax", op(gfx8=0x46, gfx10=0x37, gfx11=0x3a)), 1966*61046927SAndroid Build Coastguard Worker ("global_atomic_umax", op(gfx8=0x47, gfx10=0x38, gfx11=0x3b)), 1967*61046927SAndroid Build Coastguard Worker ("global_atomic_and", op(gfx8=0x48, gfx10=0x39, gfx11=0x3c)), 1968*61046927SAndroid Build Coastguard Worker ("global_atomic_or", op(gfx8=0x49, gfx10=0x3a, gfx11=0x3d)), 1969*61046927SAndroid Build Coastguard Worker ("global_atomic_xor", op(gfx8=0x4a, gfx10=0x3b, gfx11=0x3e)), 1970*61046927SAndroid Build Coastguard Worker ("global_atomic_inc", op(gfx8=0x4b, gfx10=0x3c, gfx11=0x3f)), 1971*61046927SAndroid Build Coastguard Worker ("global_atomic_dec", op(gfx8=0x4c, gfx10=0x3d, gfx11=0x40)), 1972*61046927SAndroid Build Coastguard Worker ("global_atomic_fcmpswap", op(gfx10=0x3e, gfx11=0x50, gfx12=-1)), 1973*61046927SAndroid Build Coastguard Worker ("global_atomic_fmin", op(gfx10=0x3f, gfx11=0x51)), 1974*61046927SAndroid Build Coastguard Worker ("global_atomic_fmax", op(gfx10=0x40, gfx11=0x52)), 1975*61046927SAndroid Build Coastguard Worker ("global_atomic_swap_x2", op(gfx8=0x60, gfx10=0x50, gfx11=0x41)), 1976*61046927SAndroid Build Coastguard Worker ("global_atomic_cmpswap_x2", op(gfx8=0x61, gfx10=0x51, gfx11=0x42)), 1977*61046927SAndroid Build Coastguard Worker ("global_atomic_add_x2", op(gfx8=0x62, gfx10=0x52, gfx11=0x43)), 1978*61046927SAndroid Build Coastguard Worker ("global_atomic_sub_x2", op(gfx8=0x63, gfx10=0x53, gfx11=0x44)), 1979*61046927SAndroid Build Coastguard Worker ("global_atomic_smin_x2", op(gfx8=0x64, gfx10=0x55, gfx11=0x45)), 1980*61046927SAndroid Build Coastguard Worker ("global_atomic_umin_x2", op(gfx8=0x65, gfx10=0x56, gfx11=0x46)), 1981*61046927SAndroid Build Coastguard Worker ("global_atomic_smax_x2", op(gfx8=0x66, gfx10=0x57, gfx11=0x47)), 1982*61046927SAndroid Build Coastguard Worker ("global_atomic_umax_x2", op(gfx8=0x67, gfx10=0x58, gfx11=0x48)), 1983*61046927SAndroid Build Coastguard Worker ("global_atomic_and_x2", op(gfx8=0x68, gfx10=0x59, gfx11=0x49)), 1984*61046927SAndroid Build Coastguard Worker ("global_atomic_or_x2", op(gfx8=0x69, gfx10=0x5a, gfx11=0x4a)), 1985*61046927SAndroid Build Coastguard Worker ("global_atomic_xor_x2", op(gfx8=0x6a, gfx10=0x5b, gfx11=0x4b)), 1986*61046927SAndroid Build Coastguard Worker ("global_atomic_inc_x2", op(gfx8=0x6b, gfx10=0x5c, gfx11=0x4c)), 1987*61046927SAndroid Build Coastguard Worker ("global_atomic_dec_x2", op(gfx8=0x6c, gfx10=0x5d, gfx11=0x4d)), 1988*61046927SAndroid Build Coastguard Worker ("global_atomic_fcmpswap_x2", op(gfx10=0x5e, gfx11=-1)), 1989*61046927SAndroid Build Coastguard Worker ("global_atomic_fmin_x2", op(gfx10=0x5f, gfx11=-1)), 1990*61046927SAndroid Build Coastguard Worker ("global_atomic_fmax_x2", op(gfx10=0x60, gfx11=-1)), 1991*61046927SAndroid Build Coastguard Worker ("global_load_dword_addtid", op(gfx10=0x16, gfx11=0x28)), #GFX10.3+ 1992*61046927SAndroid Build Coastguard Worker ("global_store_dword_addtid", op(gfx10=0x17, gfx11=0x29)), #GFX10.3+ 1993*61046927SAndroid Build Coastguard Worker ("global_atomic_csub", op(gfx10=0x34, gfx11=0x37)), #GFX10.3+. seems glc must be set 1994*61046927SAndroid Build Coastguard Worker ("global_atomic_add_f32", op(gfx11=0x56)), 1995*61046927SAndroid Build Coastguard Worker ("global_atomic_cond_sub_u32", op(gfx12=0x50)), 1996*61046927SAndroid Build Coastguard Worker ("global_load_tr_b128", op(gfx12=0x57)), 1997*61046927SAndroid Build Coastguard Worker ("global_load_tr_b64", op(gfx12=0x58)), 1998*61046927SAndroid Build Coastguard Worker ("global_atomic_pk_add_f16", op(gfx12=0x59)), 1999*61046927SAndroid Build Coastguard Worker ("global_atomic_pk_add_bf16", op(gfx12=0x5a)), 2000*61046927SAndroid Build Coastguard Worker ("global_atomic_ordered_add_b64", op(gfx12=0x73)), 2001*61046927SAndroid Build Coastguard Worker ("global_inv", op(gfx12=0x2b)), 2002*61046927SAndroid Build Coastguard Worker ("global_wb", op(gfx12=0x2c)), 2003*61046927SAndroid Build Coastguard Worker ("global_wbinv", op(gfx12=0x4f)), 2004*61046927SAndroid Build Coastguard Worker} 2005*61046927SAndroid Build Coastguard Workerfor (name, num) in GLOBAL: 2006*61046927SAndroid Build Coastguard Worker insn(name, num, Format.GLOBAL, InstrClass.VMem, is_atomic = "atomic" in name) 2007*61046927SAndroid Build Coastguard Worker 2008*61046927SAndroid Build Coastguard WorkerSCRATCH = { 2009*61046927SAndroid Build Coastguard Worker #GFX89,GFX10,GFX11 2010*61046927SAndroid Build Coastguard Worker ("scratch_load_ubyte", op(gfx8=0x10, gfx10=0x08, gfx11=0x10)), 2011*61046927SAndroid Build Coastguard Worker ("scratch_load_sbyte", op(gfx8=0x11, gfx10=0x09, gfx11=0x11)), 2012*61046927SAndroid Build Coastguard Worker ("scratch_load_ushort", op(gfx8=0x12, gfx10=0x0a, gfx11=0x12)), 2013*61046927SAndroid Build Coastguard Worker ("scratch_load_sshort", op(gfx8=0x13, gfx10=0x0b, gfx11=0x13)), 2014*61046927SAndroid Build Coastguard Worker ("scratch_load_dword", op(gfx8=0x14, gfx10=0x0c, gfx11=0x14)), 2015*61046927SAndroid Build Coastguard Worker ("scratch_load_dwordx2", op(gfx8=0x15, gfx10=0x0d, gfx11=0x15)), 2016*61046927SAndroid Build Coastguard Worker ("scratch_load_dwordx3", op(gfx8=0x16, gfx10=0x0f, gfx11=0x16)), 2017*61046927SAndroid Build Coastguard Worker ("scratch_load_dwordx4", op(gfx8=0x17, gfx10=0x0e, gfx11=0x17)), 2018*61046927SAndroid Build Coastguard Worker ("scratch_store_byte", op(gfx8=0x18)), 2019*61046927SAndroid Build Coastguard Worker ("scratch_store_byte_d16_hi", op(gfx8=0x19, gfx11=0x24)), 2020*61046927SAndroid Build Coastguard Worker ("scratch_store_short", op(gfx8=0x1a, gfx11=0x19)), 2021*61046927SAndroid Build Coastguard Worker ("scratch_store_short_d16_hi", op(gfx8=0x1b, gfx11=0x25)), 2022*61046927SAndroid Build Coastguard Worker ("scratch_store_dword", op(gfx8=0x1c, gfx11=0x1a)), 2023*61046927SAndroid Build Coastguard Worker ("scratch_store_dwordx2", op(gfx8=0x1d, gfx11=0x1b)), 2024*61046927SAndroid Build Coastguard Worker ("scratch_store_dwordx3", op(gfx8=0x1e, gfx10=0x1f, gfx11=0x1c)), 2025*61046927SAndroid Build Coastguard Worker ("scratch_store_dwordx4", op(gfx8=0x1f, gfx10=0x1e, gfx11=0x1d)), 2026*61046927SAndroid Build Coastguard Worker ("scratch_load_ubyte_d16", op(gfx8=0x20, gfx11=0x1e)), 2027*61046927SAndroid Build Coastguard Worker ("scratch_load_ubyte_d16_hi", op(gfx8=0x21)), 2028*61046927SAndroid Build Coastguard Worker ("scratch_load_sbyte_d16", op(gfx8=0x22, gfx11=0x1f)), 2029*61046927SAndroid Build Coastguard Worker ("scratch_load_sbyte_d16_hi", op(gfx8=0x23, gfx11=0x22)), 2030*61046927SAndroid Build Coastguard Worker ("scratch_load_short_d16", op(gfx8=0x24, gfx11=0x20)), 2031*61046927SAndroid Build Coastguard Worker ("scratch_load_short_d16_hi", op(gfx8=0x25, gfx11=0x23)), 2032*61046927SAndroid Build Coastguard Worker} 2033*61046927SAndroid Build Coastguard Workerfor (name, num) in SCRATCH: 2034*61046927SAndroid Build Coastguard Worker insn(name, num, Format.SCRATCH, InstrClass.VMem) 2035*61046927SAndroid Build Coastguard Worker 2036*61046927SAndroid Build Coastguard Worker# check for duplicate opcode numbers 2037*61046927SAndroid Build Coastguard Workerfor ver in Opcode._fields: 2038*61046927SAndroid Build Coastguard Worker op_to_name = {} 2039*61046927SAndroid Build Coastguard Worker for inst in instructions.values(): 2040*61046927SAndroid Build Coastguard Worker if inst.format in [Format.PSEUDO, Format.PSEUDO_BRANCH, Format.PSEUDO_BARRIER, Format.PSEUDO_REDUCTION]: 2041*61046927SAndroid Build Coastguard Worker continue 2042*61046927SAndroid Build Coastguard Worker 2043*61046927SAndroid Build Coastguard Worker opcode = getattr(inst.op, ver) 2044*61046927SAndroid Build Coastguard Worker if opcode == -1: 2045*61046927SAndroid Build Coastguard Worker continue 2046*61046927SAndroid Build Coastguard Worker 2047*61046927SAndroid Build Coastguard Worker key = (inst.format, opcode) 2048*61046927SAndroid Build Coastguard Worker 2049*61046927SAndroid Build Coastguard Worker if key in op_to_name: 2050*61046927SAndroid Build Coastguard Worker # exceptions 2051*61046927SAndroid Build Coastguard Worker names = set([op_to_name[key], inst.name]) 2052*61046927SAndroid Build Coastguard Worker if ver in ['gfx8', 'gfx9', 'gfx11', 'gfx12'] and names == set(['v_mul_lo_i32', 'v_mul_lo_u32']): 2053*61046927SAndroid Build Coastguard Worker continue 2054*61046927SAndroid Build Coastguard Worker # v_mad_legacy_f32 is replaced with v_fma_legacy_f32 on GFX10.3 2055*61046927SAndroid Build Coastguard Worker if ver == 'gfx10' and names == set(['v_mad_legacy_f32', 'v_fma_legacy_f32']): 2056*61046927SAndroid Build Coastguard Worker continue 2057*61046927SAndroid Build Coastguard Worker # v_mac_legacy_f32 is replaced with v_fmac_legacy_f32 on GFX10.3 2058*61046927SAndroid Build Coastguard Worker if ver == 'gfx10' and names == set(['v_mac_legacy_f32', 'v_fmac_legacy_f32']): 2059*61046927SAndroid Build Coastguard Worker continue 2060*61046927SAndroid Build Coastguard Worker # These are the same opcodes, but hi uses opsel 2061*61046927SAndroid Build Coastguard Worker if names == set(['v_interp_p2_f16', 'v_interp_p2_hi_f16']): 2062*61046927SAndroid Build Coastguard Worker continue 2063*61046927SAndroid Build Coastguard Worker 2064*61046927SAndroid Build Coastguard Worker print('%s and %s share the same opcode number (%s)' % (op_to_name[key], inst.name, ver)) 2065*61046927SAndroid Build Coastguard Worker sys.exit(1) 2066*61046927SAndroid Build Coastguard Worker else: 2067*61046927SAndroid Build Coastguard Worker op_to_name[key] = inst.name 2068