1//===-- VOPCInstructions.td - Vector Instruction Defintions ---------------===// 2// 3// The LLVM Compiler Infrastructure 4// 5// This file is distributed under the University of Illinois Open Source 6// License. See LICENSE.TXT for details. 7// 8//===----------------------------------------------------------------------===// 9 10//===----------------------------------------------------------------------===// 11// Encodings 12//===----------------------------------------------------------------------===// 13 14class VOPCe <bits<8> op> : Enc32 { 15 bits<9> src0; 16 bits<8> src1; 17 18 let Inst{8-0} = src0; 19 let Inst{16-9} = src1; 20 let Inst{24-17} = op; 21 let Inst{31-25} = 0x3e; 22} 23 24//===----------------------------------------------------------------------===// 25// VOPC classes 26//===----------------------------------------------------------------------===// 27 28// VOPC instructions are a special case because for the 32-bit 29// encoding, we want to display the implicit vcc write as if it were 30// an explicit $dst. 31class VOPC_Profile<list<SchedReadWrite> sched, ValueType vt0, ValueType vt1 = vt0> : 32 VOPProfile <[i1, vt0, vt1, untyped]> { 33 let Asm32 = "vcc, $src0, $src1"; 34 // The destination for 32-bit encoding is implicit. 35 let HasDst32 = 0; 36 let Outs64 = (outs VOPDstS64:$sdst); 37 list<SchedReadWrite> Schedule = sched; 38} 39 40class VOPC_Pseudo <string opName, VOPC_Profile P, list<dag> pattern=[]> : 41 InstSI<(outs), P.Ins32, "", pattern>, 42 VOP <opName>, 43 SIMCInstr<opName#"_e32", SIEncodingFamily.NONE> { 44 45 let isPseudo = 1; 46 let isCodeGenOnly = 1; 47 let UseNamedOperandTable = 1; 48 49 string Mnemonic = opName; 50 string AsmOperands = P.Asm32; 51 52 let Size = 4; 53 let mayLoad = 0; 54 let mayStore = 0; 55 let hasSideEffects = 0; 56 57 let VALU = 1; 58 let VOPC = 1; 59 let Uses = [EXEC]; 60 let Defs = [VCC]; 61 62 let SubtargetPredicate = isGCN; 63 64 VOPProfile Pfl = P; 65} 66 67class VOPC_Real <VOPC_Pseudo ps, int EncodingFamily> : 68 InstSI <ps.OutOperandList, ps.InOperandList, ps.PseudoInstr # " " # ps.AsmOperands, []>, 69 SIMCInstr <ps.PseudoInstr, EncodingFamily> { 70 71 let isPseudo = 0; 72 let isCodeGenOnly = 0; 73 74 // copy relevant pseudo op flags 75 let SubtargetPredicate = ps.SubtargetPredicate; 76 let AsmMatchConverter = ps.AsmMatchConverter; 77 let Constraints = ps.Constraints; 78 let DisableEncoding = ps.DisableEncoding; 79 let TSFlags = ps.TSFlags; 80} 81 82// This class is used only with VOPC instructions. Use $sdst for out operand 83class VOPCInstAlias <VOP3_Pseudo ps, Instruction inst, VOPProfile p = ps.Pfl> : 84 InstAlias <ps.OpName#" "#p.Asm32, (inst)>, PredicateControl { 85 86 field bit isCompare; 87 field bit isCommutable; 88 89 let ResultInst = 90 !if (p.HasDst32, 91 !if (!eq(p.NumSrcArgs, 0), 92 // 1 dst, 0 src 93 (inst p.DstRC:$sdst), 94 !if (!eq(p.NumSrcArgs, 1), 95 // 1 dst, 1 src 96 (inst p.DstRC:$sdst, p.Src0RC32:$src0), 97 !if (!eq(p.NumSrcArgs, 2), 98 // 1 dst, 2 src 99 (inst p.DstRC:$sdst, p.Src0RC32:$src0, p.Src1RC32:$src1), 100 // else - unreachable 101 (inst)))), 102 // else 103 !if (!eq(p.NumSrcArgs, 2), 104 // 0 dst, 2 src 105 (inst p.Src0RC32:$src0, p.Src1RC32:$src1), 106 !if (!eq(p.NumSrcArgs, 1), 107 // 0 dst, 1 src 108 (inst p.Src0RC32:$src1), 109 // else 110 // 0 dst, 0 src 111 (inst)))); 112 113 let AsmVariantName = AMDGPUAsmVariants.Default; 114 let SubtargetPredicate = AssemblerPredicate; 115} 116 117multiclass VOPC_Pseudos <string opName, 118 VOPC_Profile P, 119 PatLeaf cond = COND_NULL, 120 string revOp = opName, 121 bit DefExec = 0> { 122 123 def _e32 : VOPC_Pseudo <opName, P>, 124 Commutable_REV<revOp#"_e32", !eq(revOp, opName)> { 125 let Defs = !if(DefExec, [VCC, EXEC], [VCC]); 126 let SchedRW = P.Schedule; 127 let isConvergent = DefExec; 128 let isCompare = 1; 129 let isCommutable = 1; 130 } 131 def _e64 : VOP3_Pseudo<opName, P, 132 !if(P.HasModifiers, 133 [(set i1:$sdst, 134 (setcc (P.Src0VT (VOP3Mods0 P.Src0VT:$src0, i32:$src0_modifiers, 135 i1:$clamp, i32:$omod)), 136 (P.Src1VT (VOP3Mods P.Src1VT:$src1, i32:$src1_modifiers)), 137 cond))], 138 [(set i1:$sdst, (setcc P.Src0VT:$src0, P.Src1VT:$src1, cond))])>, 139 Commutable_REV<revOp#"_e64", !eq(revOp, opName)> { 140 let Defs = !if(DefExec, [EXEC], []); 141 let SchedRW = P.Schedule; 142 let isCompare = 1; 143 let isCommutable = 1; 144 } 145} 146 147def VOPC_I1_F16_F16 : VOPC_Profile<[Write32Bit], f16>; 148def VOPC_I1_F32_F32 : VOPC_Profile<[Write32Bit], f32>; 149def VOPC_I1_F64_F64 : VOPC_Profile<[WriteDoubleAdd], f64>; 150def VOPC_I1_I32_I32 : VOPC_Profile<[Write32Bit], i32>; 151def VOPC_I1_I64_I64 : VOPC_Profile<[Write64Bit], i64>; 152 153multiclass VOPC_F16 <string opName, PatLeaf cond = COND_NULL, string revOp = opName> : 154 VOPC_Pseudos <opName, VOPC_I1_F16_F16, cond, revOp, 0>; 155 156multiclass VOPC_F32 <string opName, PatLeaf cond = COND_NULL, string revOp = opName> : 157 VOPC_Pseudos <opName, VOPC_I1_F32_F32, cond, revOp, 0>; 158 159multiclass VOPC_F64 <string opName, PatLeaf cond = COND_NULL, string revOp = opName> : 160 VOPC_Pseudos <opName, VOPC_I1_F64_F64, cond, revOp, 0>; 161 162multiclass VOPC_I32 <string opName, PatLeaf cond = COND_NULL, string revOp = opName> : 163 VOPC_Pseudos <opName, VOPC_I1_I32_I32, cond, revOp, 0>; 164 165multiclass VOPC_I64 <string opName, PatLeaf cond = COND_NULL, string revOp = opName> : 166 VOPC_Pseudos <opName, VOPC_I1_I64_I64, cond, revOp, 0>; 167 168multiclass VOPCX_F16 <string opName, string revOp = opName> : 169 VOPC_Pseudos <opName, VOPC_I1_F16_F16, COND_NULL, revOp, 1>; 170 171multiclass VOPCX_F32 <string opName, string revOp = opName> : 172 VOPC_Pseudos <opName, VOPC_I1_F32_F32, COND_NULL, revOp, 1>; 173 174multiclass VOPCX_F64 <string opName, string revOp = opName> : 175 VOPC_Pseudos <opName, VOPC_I1_F64_F64, COND_NULL, revOp, 1>; 176 177multiclass VOPCX_I32 <string opName, string revOp = opName> : 178 VOPC_Pseudos <opName, VOPC_I1_I32_I32, COND_NULL, revOp, 1>; 179 180multiclass VOPCX_I64 <string opName, string revOp = opName> : 181 VOPC_Pseudos <opName, VOPC_I1_I64_I64, COND_NULL, revOp, 1>; 182 183 184//===----------------------------------------------------------------------===// 185// Compare instructions 186//===----------------------------------------------------------------------===// 187 188defm V_CMP_F_F32 : VOPC_F32 <"v_cmp_f_f32">; 189defm V_CMP_LT_F32 : VOPC_F32 <"v_cmp_lt_f32", COND_OLT, "v_cmp_gt_f32">; 190defm V_CMP_EQ_F32 : VOPC_F32 <"v_cmp_eq_f32", COND_OEQ>; 191defm V_CMP_LE_F32 : VOPC_F32 <"v_cmp_le_f32", COND_OLE, "v_cmp_ge_f32">; 192defm V_CMP_GT_F32 : VOPC_F32 <"v_cmp_gt_f32", COND_OGT>; 193defm V_CMP_LG_F32 : VOPC_F32 <"v_cmp_lg_f32", COND_ONE>; 194defm V_CMP_GE_F32 : VOPC_F32 <"v_cmp_ge_f32", COND_OGE>; 195defm V_CMP_O_F32 : VOPC_F32 <"v_cmp_o_f32", COND_O>; 196defm V_CMP_U_F32 : VOPC_F32 <"v_cmp_u_f32", COND_UO>; 197defm V_CMP_NGE_F32 : VOPC_F32 <"v_cmp_nge_f32", COND_ULT, "v_cmp_nle_f32">; 198defm V_CMP_NLG_F32 : VOPC_F32 <"v_cmp_nlg_f32", COND_UEQ>; 199defm V_CMP_NGT_F32 : VOPC_F32 <"v_cmp_ngt_f32", COND_ULE, "v_cmp_nlt_f32">; 200defm V_CMP_NLE_F32 : VOPC_F32 <"v_cmp_nle_f32", COND_UGT>; 201defm V_CMP_NEQ_F32 : VOPC_F32 <"v_cmp_neq_f32", COND_UNE>; 202defm V_CMP_NLT_F32 : VOPC_F32 <"v_cmp_nlt_f32", COND_UGE>; 203defm V_CMP_TRU_F32 : VOPC_F32 <"v_cmp_tru_f32">; 204 205defm V_CMPX_F_F32 : VOPCX_F32 <"v_cmpx_f_f32">; 206defm V_CMPX_LT_F32 : VOPCX_F32 <"v_cmpx_lt_f32", "v_cmpx_gt_f32">; 207defm V_CMPX_EQ_F32 : VOPCX_F32 <"v_cmpx_eq_f32">; 208defm V_CMPX_LE_F32 : VOPCX_F32 <"v_cmpx_le_f32", "v_cmpx_ge_f32">; 209defm V_CMPX_GT_F32 : VOPCX_F32 <"v_cmpx_gt_f32">; 210defm V_CMPX_LG_F32 : VOPCX_F32 <"v_cmpx_lg_f32">; 211defm V_CMPX_GE_F32 : VOPCX_F32 <"v_cmpx_ge_f32">; 212defm V_CMPX_O_F32 : VOPCX_F32 <"v_cmpx_o_f32">; 213defm V_CMPX_U_F32 : VOPCX_F32 <"v_cmpx_u_f32">; 214defm V_CMPX_NGE_F32 : VOPCX_F32 <"v_cmpx_nge_f32">; 215defm V_CMPX_NLG_F32 : VOPCX_F32 <"v_cmpx_nlg_f32">; 216defm V_CMPX_NGT_F32 : VOPCX_F32 <"v_cmpx_ngt_f32">; 217defm V_CMPX_NLE_F32 : VOPCX_F32 <"v_cmpx_nle_f32">; 218defm V_CMPX_NEQ_F32 : VOPCX_F32 <"v_cmpx_neq_f32">; 219defm V_CMPX_NLT_F32 : VOPCX_F32 <"v_cmpx_nlt_f32">; 220defm V_CMPX_TRU_F32 : VOPCX_F32 <"v_cmpx_tru_f32">; 221 222defm V_CMP_F_F64 : VOPC_F64 <"v_cmp_f_f64">; 223defm V_CMP_LT_F64 : VOPC_F64 <"v_cmp_lt_f64", COND_OLT, "v_cmp_gt_f64">; 224defm V_CMP_EQ_F64 : VOPC_F64 <"v_cmp_eq_f64", COND_OEQ>; 225defm V_CMP_LE_F64 : VOPC_F64 <"v_cmp_le_f64", COND_OLE, "v_cmp_ge_f64">; 226defm V_CMP_GT_F64 : VOPC_F64 <"v_cmp_gt_f64", COND_OGT>; 227defm V_CMP_LG_F64 : VOPC_F64 <"v_cmp_lg_f64", COND_ONE>; 228defm V_CMP_GE_F64 : VOPC_F64 <"v_cmp_ge_f64", COND_OGE>; 229defm V_CMP_O_F64 : VOPC_F64 <"v_cmp_o_f64", COND_O>; 230defm V_CMP_U_F64 : VOPC_F64 <"v_cmp_u_f64", COND_UO>; 231defm V_CMP_NGE_F64 : VOPC_F64 <"v_cmp_nge_f64", COND_ULT, "v_cmp_nle_f64">; 232defm V_CMP_NLG_F64 : VOPC_F64 <"v_cmp_nlg_f64", COND_UEQ>; 233defm V_CMP_NGT_F64 : VOPC_F64 <"v_cmp_ngt_f64", COND_ULE, "v_cmp_nlt_f64">; 234defm V_CMP_NLE_F64 : VOPC_F64 <"v_cmp_nle_f64", COND_UGT>; 235defm V_CMP_NEQ_F64 : VOPC_F64 <"v_cmp_neq_f64", COND_UNE>; 236defm V_CMP_NLT_F64 : VOPC_F64 <"v_cmp_nlt_f64", COND_UGE>; 237defm V_CMP_TRU_F64 : VOPC_F64 <"v_cmp_tru_f64">; 238 239defm V_CMPX_F_F64 : VOPCX_F64 <"v_cmpx_f_f64">; 240defm V_CMPX_LT_F64 : VOPCX_F64 <"v_cmpx_lt_f64", "v_cmpx_gt_f64">; 241defm V_CMPX_EQ_F64 : VOPCX_F64 <"v_cmpx_eq_f64">; 242defm V_CMPX_LE_F64 : VOPCX_F64 <"v_cmpx_le_f64", "v_cmpx_ge_f64">; 243defm V_CMPX_GT_F64 : VOPCX_F64 <"v_cmpx_gt_f64">; 244defm V_CMPX_LG_F64 : VOPCX_F64 <"v_cmpx_lg_f64">; 245defm V_CMPX_GE_F64 : VOPCX_F64 <"v_cmpx_ge_f64">; 246defm V_CMPX_O_F64 : VOPCX_F64 <"v_cmpx_o_f64">; 247defm V_CMPX_U_F64 : VOPCX_F64 <"v_cmpx_u_f64">; 248defm V_CMPX_NGE_F64 : VOPCX_F64 <"v_cmpx_nge_f64", "v_cmpx_nle_f64">; 249defm V_CMPX_NLG_F64 : VOPCX_F64 <"v_cmpx_nlg_f64">; 250defm V_CMPX_NGT_F64 : VOPCX_F64 <"v_cmpx_ngt_f64", "v_cmpx_nlt_f64">; 251defm V_CMPX_NLE_F64 : VOPCX_F64 <"v_cmpx_nle_f64">; 252defm V_CMPX_NEQ_F64 : VOPCX_F64 <"v_cmpx_neq_f64">; 253defm V_CMPX_NLT_F64 : VOPCX_F64 <"v_cmpx_nlt_f64">; 254defm V_CMPX_TRU_F64 : VOPCX_F64 <"v_cmpx_tru_f64">; 255 256let SubtargetPredicate = isSICI in { 257 258defm V_CMPS_F_F32 : VOPC_F32 <"v_cmps_f_f32">; 259defm V_CMPS_LT_F32 : VOPC_F32 <"v_cmps_lt_f32", COND_NULL, "v_cmps_gt_f32">; 260defm V_CMPS_EQ_F32 : VOPC_F32 <"v_cmps_eq_f32">; 261defm V_CMPS_LE_F32 : VOPC_F32 <"v_cmps_le_f32", COND_NULL, "v_cmps_ge_f32">; 262defm V_CMPS_GT_F32 : VOPC_F32 <"v_cmps_gt_f32">; 263defm V_CMPS_LG_F32 : VOPC_F32 <"v_cmps_lg_f32">; 264defm V_CMPS_GE_F32 : VOPC_F32 <"v_cmps_ge_f32">; 265defm V_CMPS_O_F32 : VOPC_F32 <"v_cmps_o_f32">; 266defm V_CMPS_U_F32 : VOPC_F32 <"v_cmps_u_f32">; 267defm V_CMPS_NGE_F32 : VOPC_F32 <"v_cmps_nge_f32", COND_NULL, "v_cmps_nle_f32">; 268defm V_CMPS_NLG_F32 : VOPC_F32 <"v_cmps_nlg_f32">; 269defm V_CMPS_NGT_F32 : VOPC_F32 <"v_cmps_ngt_f32", COND_NULL, "v_cmps_nlt_f32">; 270defm V_CMPS_NLE_F32 : VOPC_F32 <"v_cmps_nle_f32">; 271defm V_CMPS_NEQ_F32 : VOPC_F32 <"v_cmps_neq_f32">; 272defm V_CMPS_NLT_F32 : VOPC_F32 <"v_cmps_nlt_f32">; 273defm V_CMPS_TRU_F32 : VOPC_F32 <"v_cmps_tru_f32">; 274 275defm V_CMPSX_F_F32 : VOPCX_F32 <"v_cmpsx_f_f32">; 276defm V_CMPSX_LT_F32 : VOPCX_F32 <"v_cmpsx_lt_f32", "v_cmpsx_gt_f32">; 277defm V_CMPSX_EQ_F32 : VOPCX_F32 <"v_cmpsx_eq_f32">; 278defm V_CMPSX_LE_F32 : VOPCX_F32 <"v_cmpsx_le_f32", "v_cmpsx_ge_f32">; 279defm V_CMPSX_GT_F32 : VOPCX_F32 <"v_cmpsx_gt_f32">; 280defm V_CMPSX_LG_F32 : VOPCX_F32 <"v_cmpsx_lg_f32">; 281defm V_CMPSX_GE_F32 : VOPCX_F32 <"v_cmpsx_ge_f32">; 282defm V_CMPSX_O_F32 : VOPCX_F32 <"v_cmpsx_o_f32">; 283defm V_CMPSX_U_F32 : VOPCX_F32 <"v_cmpsx_u_f32">; 284defm V_CMPSX_NGE_F32 : VOPCX_F32 <"v_cmpsx_nge_f32", "v_cmpsx_nle_f32">; 285defm V_CMPSX_NLG_F32 : VOPCX_F32 <"v_cmpsx_nlg_f32">; 286defm V_CMPSX_NGT_F32 : VOPCX_F32 <"v_cmpsx_ngt_f32", "v_cmpsx_nlt_f32">; 287defm V_CMPSX_NLE_F32 : VOPCX_F32 <"v_cmpsx_nle_f32">; 288defm V_CMPSX_NEQ_F32 : VOPCX_F32 <"v_cmpsx_neq_f32">; 289defm V_CMPSX_NLT_F32 : VOPCX_F32 <"v_cmpsx_nlt_f32">; 290defm V_CMPSX_TRU_F32 : VOPCX_F32 <"v_cmpsx_tru_f32">; 291 292defm V_CMPS_F_F64 : VOPC_F64 <"v_cmps_f_f64">; 293defm V_CMPS_LT_F64 : VOPC_F64 <"v_cmps_lt_f64", COND_NULL, "v_cmps_gt_f64">; 294defm V_CMPS_EQ_F64 : VOPC_F64 <"v_cmps_eq_f64">; 295defm V_CMPS_LE_F64 : VOPC_F64 <"v_cmps_le_f64", COND_NULL, "v_cmps_ge_f64">; 296defm V_CMPS_GT_F64 : VOPC_F64 <"v_cmps_gt_f64">; 297defm V_CMPS_LG_F64 : VOPC_F64 <"v_cmps_lg_f64">; 298defm V_CMPS_GE_F64 : VOPC_F64 <"v_cmps_ge_f64">; 299defm V_CMPS_O_F64 : VOPC_F64 <"v_cmps_o_f64">; 300defm V_CMPS_U_F64 : VOPC_F64 <"v_cmps_u_f64">; 301defm V_CMPS_NGE_F64 : VOPC_F64 <"v_cmps_nge_f64", COND_NULL, "v_cmps_nle_f64">; 302defm V_CMPS_NLG_F64 : VOPC_F64 <"v_cmps_nlg_f64">; 303defm V_CMPS_NGT_F64 : VOPC_F64 <"v_cmps_ngt_f64", COND_NULL, "v_cmps_nlt_f64">; 304defm V_CMPS_NLE_F64 : VOPC_F64 <"v_cmps_nle_f64">; 305defm V_CMPS_NEQ_F64 : VOPC_F64 <"v_cmps_neq_f64">; 306defm V_CMPS_NLT_F64 : VOPC_F64 <"v_cmps_nlt_f64">; 307defm V_CMPS_TRU_F64 : VOPC_F64 <"v_cmps_tru_f64">; 308 309defm V_CMPSX_F_F64 : VOPCX_F64 <"v_cmpsx_f_f64">; 310defm V_CMPSX_LT_F64 : VOPCX_F64 <"v_cmpsx_lt_f64", "v_cmpsx_gt_f64">; 311defm V_CMPSX_EQ_F64 : VOPCX_F64 <"v_cmpsx_eq_f64">; 312defm V_CMPSX_LE_F64 : VOPCX_F64 <"v_cmpsx_le_f64", "v_cmpsx_ge_f64">; 313defm V_CMPSX_GT_F64 : VOPCX_F64 <"v_cmpsx_gt_f64">; 314defm V_CMPSX_LG_F64 : VOPCX_F64 <"v_cmpsx_lg_f64">; 315defm V_CMPSX_GE_F64 : VOPCX_F64 <"v_cmpsx_ge_f64">; 316defm V_CMPSX_O_F64 : VOPCX_F64 <"v_cmpsx_o_f64">; 317defm V_CMPSX_U_F64 : VOPCX_F64 <"v_cmpsx_u_f64">; 318defm V_CMPSX_NGE_F64 : VOPCX_F64 <"v_cmpsx_nge_f64", "v_cmpsx_nle_f64">; 319defm V_CMPSX_NLG_F64 : VOPCX_F64 <"v_cmpsx_nlg_f64">; 320defm V_CMPSX_NGT_F64 : VOPCX_F64 <"v_cmpsx_ngt_f64", "v_cmpsx_nlt_f64">; 321defm V_CMPSX_NLE_F64 : VOPCX_F64 <"v_cmpsx_nle_f64">; 322defm V_CMPSX_NEQ_F64 : VOPCX_F64 <"v_cmpsx_neq_f64">; 323defm V_CMPSX_NLT_F64 : VOPCX_F64 <"v_cmpsx_nlt_f64">; 324defm V_CMPSX_TRU_F64 : VOPCX_F64 <"v_cmpsx_tru_f64">; 325 326} // End SubtargetPredicate = isSICI 327 328let SubtargetPredicate = isVI in { 329 330defm V_CMP_F_F16 : VOPC_F16 <"v_cmp_f_f16">; 331defm V_CMP_LT_F16 : VOPC_F16 <"v_cmp_lt_f16", COND_OLT, "v_cmp_gt_f16">; 332defm V_CMP_EQ_F16 : VOPC_F16 <"v_cmp_eq_f16", COND_OEQ>; 333defm V_CMP_LE_F16 : VOPC_F16 <"v_cmp_le_f16", COND_OLE, "v_cmp_ge_f16">; 334defm V_CMP_GT_F16 : VOPC_F16 <"v_cmp_gt_f16", COND_OGT>; 335defm V_CMP_LG_F16 : VOPC_F16 <"v_cmp_lg_f16", COND_ONE>; 336defm V_CMP_GE_F16 : VOPC_F16 <"v_cmp_ge_f16", COND_OGE>; 337defm V_CMP_O_F16 : VOPC_F16 <"v_cmp_o_f16", COND_O>; 338defm V_CMP_U_F16 : VOPC_F16 <"v_cmp_u_f16", COND_UO>; 339defm V_CMP_NGE_F16 : VOPC_F16 <"v_cmp_nge_f16", COND_ULT, "v_cmp_nle_f16">; 340defm V_CMP_NLG_F16 : VOPC_F16 <"v_cmp_nlg_f16", COND_UEQ>; 341defm V_CMP_NGT_F16 : VOPC_F16 <"v_cmp_ngt_f16", COND_ULE, "v_cmp_nlt_f16">; 342defm V_CMP_NLE_F16 : VOPC_F16 <"v_cmp_nle_f16", COND_UGT>; 343defm V_CMP_NEQ_F16 : VOPC_F16 <"v_cmp_neq_f16", COND_UNE>; 344defm V_CMP_NLT_F16 : VOPC_F16 <"v_cmp_nlt_f16", COND_UGE>; 345defm V_CMP_TRU_F16 : VOPC_F16 <"v_cmp_tru_f16">; 346 347defm V_CMPX_F_F16 : VOPCX_F16 <"v_cmpx_f_f16">; 348defm V_CMPX_LT_F16 : VOPCX_F16 <"v_cmpx_lt_f16", "v_cmpx_gt_f16">; 349defm V_CMPX_EQ_F16 : VOPCX_F16 <"v_cmpx_eq_f16">; 350defm V_CMPX_LE_F16 : VOPCX_F16 <"v_cmpx_le_f16", "v_cmpx_ge_f16">; 351defm V_CMPX_GT_F16 : VOPCX_F16 <"v_cmpx_gt_f16">; 352defm V_CMPX_LG_F16 : VOPCX_F16 <"v_cmpx_lg_f16">; 353defm V_CMPX_GE_F16 : VOPCX_F16 <"v_cmpx_ge_f16">; 354defm V_CMPX_O_F16 : VOPCX_F16 <"v_cmpx_o_f16">; 355defm V_CMPX_U_F16 : VOPCX_F16 <"v_cmpx_u_f16">; 356defm V_CMPX_NGE_F16 : VOPCX_F16 <"v_cmpx_nge_f16">; 357defm V_CMPX_NLG_F16 : VOPCX_F16 <"v_cmpx_nlg_f16">; 358defm V_CMPX_NGT_F16 : VOPCX_F16 <"v_cmpx_ngt_f16">; 359defm V_CMPX_NLE_F16 : VOPCX_F16 <"v_cmpx_nle_f16">; 360defm V_CMPX_NEQ_F16 : VOPCX_F16 <"v_cmpx_neq_f16">; 361defm V_CMPX_NLT_F16 : VOPCX_F16 <"v_cmpx_nlt_f16">; 362defm V_CMPX_TRU_F16 : VOPCX_F16 <"v_cmpx_tru_f16">; 363 364} // End SubtargetPredicate = isVI 365 366defm V_CMP_F_I32 : VOPC_I32 <"v_cmp_f_i32">; 367defm V_CMP_LT_I32 : VOPC_I32 <"v_cmp_lt_i32", COND_SLT, "v_cmp_gt_i32">; 368defm V_CMP_EQ_I32 : VOPC_I32 <"v_cmp_eq_i32">; 369defm V_CMP_LE_I32 : VOPC_I32 <"v_cmp_le_i32", COND_SLE, "v_cmp_ge_i32">; 370defm V_CMP_GT_I32 : VOPC_I32 <"v_cmp_gt_i32", COND_SGT>; 371defm V_CMP_NE_I32 : VOPC_I32 <"v_cmp_ne_i32">; 372defm V_CMP_GE_I32 : VOPC_I32 <"v_cmp_ge_i32", COND_SGE>; 373defm V_CMP_T_I32 : VOPC_I32 <"v_cmp_t_i32">; 374 375defm V_CMPX_F_I32 : VOPCX_I32 <"v_cmpx_f_i32">; 376defm V_CMPX_LT_I32 : VOPCX_I32 <"v_cmpx_lt_i32", "v_cmpx_gt_i32">; 377defm V_CMPX_EQ_I32 : VOPCX_I32 <"v_cmpx_eq_i32">; 378defm V_CMPX_LE_I32 : VOPCX_I32 <"v_cmpx_le_i32", "v_cmpx_ge_i32">; 379defm V_CMPX_GT_I32 : VOPCX_I32 <"v_cmpx_gt_i32">; 380defm V_CMPX_NE_I32 : VOPCX_I32 <"v_cmpx_ne_i32">; 381defm V_CMPX_GE_I32 : VOPCX_I32 <"v_cmpx_ge_i32">; 382defm V_CMPX_T_I32 : VOPCX_I32 <"v_cmpx_t_i32">; 383 384defm V_CMP_F_I64 : VOPC_I64 <"v_cmp_f_i64">; 385defm V_CMP_LT_I64 : VOPC_I64 <"v_cmp_lt_i64", COND_SLT, "v_cmp_gt_i64">; 386defm V_CMP_EQ_I64 : VOPC_I64 <"v_cmp_eq_i64">; 387defm V_CMP_LE_I64 : VOPC_I64 <"v_cmp_le_i64", COND_SLE, "v_cmp_ge_i64">; 388defm V_CMP_GT_I64 : VOPC_I64 <"v_cmp_gt_i64", COND_SGT>; 389defm V_CMP_NE_I64 : VOPC_I64 <"v_cmp_ne_i64">; 390defm V_CMP_GE_I64 : VOPC_I64 <"v_cmp_ge_i64", COND_SGE>; 391defm V_CMP_T_I64 : VOPC_I64 <"v_cmp_t_i64">; 392 393defm V_CMPX_F_I64 : VOPCX_I64 <"v_cmpx_f_i64">; 394defm V_CMPX_LT_I64 : VOPCX_I64 <"v_cmpx_lt_i64", "v_cmpx_gt_i64">; 395defm V_CMPX_EQ_I64 : VOPCX_I64 <"v_cmpx_eq_i64">; 396defm V_CMPX_LE_I64 : VOPCX_I64 <"v_cmpx_le_i64", "v_cmpx_ge_i64">; 397defm V_CMPX_GT_I64 : VOPCX_I64 <"v_cmpx_gt_i64">; 398defm V_CMPX_NE_I64 : VOPCX_I64 <"v_cmpx_ne_i64">; 399defm V_CMPX_GE_I64 : VOPCX_I64 <"v_cmpx_ge_i64">; 400defm V_CMPX_T_I64 : VOPCX_I64 <"v_cmpx_t_i64">; 401 402defm V_CMP_F_U32 : VOPC_I32 <"v_cmp_f_u32">; 403defm V_CMP_LT_U32 : VOPC_I32 <"v_cmp_lt_u32", COND_ULT, "v_cmp_gt_u32">; 404defm V_CMP_EQ_U32 : VOPC_I32 <"v_cmp_eq_u32", COND_EQ>; 405defm V_CMP_LE_U32 : VOPC_I32 <"v_cmp_le_u32", COND_ULE, "v_cmp_ge_u32">; 406defm V_CMP_GT_U32 : VOPC_I32 <"v_cmp_gt_u32", COND_UGT>; 407defm V_CMP_NE_U32 : VOPC_I32 <"v_cmp_ne_u32", COND_NE>; 408defm V_CMP_GE_U32 : VOPC_I32 <"v_cmp_ge_u32", COND_UGE>; 409defm V_CMP_T_U32 : VOPC_I32 <"v_cmp_t_u32">; 410 411defm V_CMPX_F_U32 : VOPCX_I32 <"v_cmpx_f_u32">; 412defm V_CMPX_LT_U32 : VOPCX_I32 <"v_cmpx_lt_u32", "v_cmpx_gt_u32">; 413defm V_CMPX_EQ_U32 : VOPCX_I32 <"v_cmpx_eq_u32">; 414defm V_CMPX_LE_U32 : VOPCX_I32 <"v_cmpx_le_u32", "v_cmpx_le_u32">; 415defm V_CMPX_GT_U32 : VOPCX_I32 <"v_cmpx_gt_u32">; 416defm V_CMPX_NE_U32 : VOPCX_I32 <"v_cmpx_ne_u32">; 417defm V_CMPX_GE_U32 : VOPCX_I32 <"v_cmpx_ge_u32">; 418defm V_CMPX_T_U32 : VOPCX_I32 <"v_cmpx_t_u32">; 419 420defm V_CMP_F_U64 : VOPC_I64 <"v_cmp_f_u64">; 421defm V_CMP_LT_U64 : VOPC_I64 <"v_cmp_lt_u64", COND_ULT, "v_cmp_gt_u64">; 422defm V_CMP_EQ_U64 : VOPC_I64 <"v_cmp_eq_u64", COND_EQ>; 423defm V_CMP_LE_U64 : VOPC_I64 <"v_cmp_le_u64", COND_ULE, "v_cmp_ge_u64">; 424defm V_CMP_GT_U64 : VOPC_I64 <"v_cmp_gt_u64", COND_UGT>; 425defm V_CMP_NE_U64 : VOPC_I64 <"v_cmp_ne_u64", COND_NE>; 426defm V_CMP_GE_U64 : VOPC_I64 <"v_cmp_ge_u64", COND_UGE>; 427defm V_CMP_T_U64 : VOPC_I64 <"v_cmp_t_u64">; 428 429defm V_CMPX_F_U64 : VOPCX_I64 <"v_cmpx_f_u64">; 430defm V_CMPX_LT_U64 : VOPCX_I64 <"v_cmpx_lt_u64", "v_cmpx_gt_u64">; 431defm V_CMPX_EQ_U64 : VOPCX_I64 <"v_cmpx_eq_u64">; 432defm V_CMPX_LE_U64 : VOPCX_I64 <"v_cmpx_le_u64", "v_cmpx_ge_u64">; 433defm V_CMPX_GT_U64 : VOPCX_I64 <"v_cmpx_gt_u64">; 434defm V_CMPX_NE_U64 : VOPCX_I64 <"v_cmpx_ne_u64">; 435defm V_CMPX_GE_U64 : VOPCX_I64 <"v_cmpx_ge_u64">; 436defm V_CMPX_T_U64 : VOPCX_I64 <"v_cmpx_t_u64">; 437 438//===----------------------------------------------------------------------===// 439// Class instructions 440//===----------------------------------------------------------------------===// 441 442class VOPC_Class_Profile<list<SchedReadWrite> sched, ValueType vt> : 443 VOPC_Profile<sched, vt, i32> { 444 let Ins64 = (ins Src0Mod:$src0_modifiers, Src0RC64:$src0, Src1RC64:$src1); 445 let Asm64 = "$sdst, $src0_modifiers, $src1"; 446 let InsSDWA = (ins Src0Mod:$src0_modifiers, Src0RC64:$src0, 447 Int32InputMods:$src1_modifiers, Src1RC64:$src1, 448 clampmod:$clamp, src0_sel:$src0_sel, src1_sel:$src1_sel); 449 let AsmSDWA = " vcc, $src0_modifiers, $src1_modifiers$clamp $src0_sel $src1_sel"; 450 let HasSrc1Mods = 0; 451 let HasClamp = 0; 452 let HasOMod = 0; 453} 454 455class getVOPCClassPat64 <VOPProfile P> { 456 list<dag> ret = 457 [(set i1:$sdst, 458 (AMDGPUfp_class 459 (P.Src0VT (VOP3Mods0Clamp0OMod P.Src0VT:$src0, i32:$src0_modifiers)), 460 P.Src1VT:$src1))]; 461} 462 463// Special case for class instructions which only have modifiers on 464// the 1st source operand. 465multiclass VOPC_Class_Pseudos <string opName, VOPC_Profile p, bit DefExec> { 466 def _e32 : VOPC_Pseudo <opName, p> { 467 let Defs = !if(DefExec, [VCC, EXEC], [VCC]); 468 let SchedRW = p.Schedule; 469 let isConvergent = DefExec; 470 } 471 def _e64 : VOP3_Pseudo<opName, p, getVOPCClassPat64<p>.ret> { 472 let Defs = !if(DefExec, [EXEC], []); 473 let SchedRW = p.Schedule; 474 } 475} 476 477def VOPC_I1_F16_I32 : VOPC_Class_Profile<[Write32Bit], f16>; 478def VOPC_I1_F32_I32 : VOPC_Class_Profile<[Write32Bit], f32>; 479def VOPC_I1_F64_I32 : VOPC_Class_Profile<[WriteDoubleAdd], f64>; 480 481multiclass VOPC_CLASS_F16 <string opName> : 482 VOPC_Class_Pseudos <opName, VOPC_I1_F16_I32, 0>; 483 484multiclass VOPCX_CLASS_F16 <string opName> : 485 VOPC_Class_Pseudos <opName, VOPC_I1_F32_I32, 1>; 486 487multiclass VOPC_CLASS_F32 <string opName> : 488 VOPC_Class_Pseudos <opName, VOPC_I1_F32_I32, 0>; 489 490multiclass VOPCX_CLASS_F32 <string opName> : 491 VOPC_Class_Pseudos <opName, VOPC_I1_F32_I32, 1>; 492 493multiclass VOPC_CLASS_F64 <string opName> : 494 VOPC_Class_Pseudos <opName, VOPC_I1_F64_I32, 0>; 495 496multiclass VOPCX_CLASS_F64 <string opName> : 497 VOPC_Class_Pseudos <opName, VOPC_I1_F64_I32, 1>; 498 499defm V_CMP_CLASS_F32 : VOPC_CLASS_F32 <"v_cmp_class_f32">; 500defm V_CMPX_CLASS_F32 : VOPCX_CLASS_F32 <"v_cmpx_class_f32">; 501defm V_CMP_CLASS_F64 : VOPC_CLASS_F64 <"v_cmp_class_f64">; 502defm V_CMPX_CLASS_F64 : VOPCX_CLASS_F64 <"v_cmpx_class_f64">; 503defm V_CMP_CLASS_F16 : VOPC_CLASS_F16 <"v_cmp_class_f16">; 504defm V_CMPX_CLASS_F16 : VOPCX_CLASS_F16 <"v_cmpx_class_f16">; 505 506//===----------------------------------------------------------------------===// 507// V_ICMPIntrinsic Pattern. 508//===----------------------------------------------------------------------===// 509 510let Predicates = [isGCN] in { 511 512class ICMP_Pattern <PatLeaf cond, Instruction inst, ValueType vt> : Pat < 513 (AMDGPUsetcc vt:$src0, vt:$src1, cond), 514 (inst $src0, $src1) 515>; 516 517def : ICMP_Pattern <COND_EQ, V_CMP_EQ_U32_e64, i32>; 518def : ICMP_Pattern <COND_NE, V_CMP_NE_U32_e64, i32>; 519def : ICMP_Pattern <COND_UGT, V_CMP_GT_U32_e64, i32>; 520def : ICMP_Pattern <COND_UGE, V_CMP_GE_U32_e64, i32>; 521def : ICMP_Pattern <COND_ULT, V_CMP_LT_U32_e64, i32>; 522def : ICMP_Pattern <COND_ULE, V_CMP_LE_U32_e64, i32>; 523def : ICMP_Pattern <COND_SGT, V_CMP_GT_I32_e64, i32>; 524def : ICMP_Pattern <COND_SGE, V_CMP_GE_I32_e64, i32>; 525def : ICMP_Pattern <COND_SLT, V_CMP_LT_I32_e64, i32>; 526def : ICMP_Pattern <COND_SLE, V_CMP_LE_I32_e64, i32>; 527 528def : ICMP_Pattern <COND_EQ, V_CMP_EQ_U64_e64, i64>; 529def : ICMP_Pattern <COND_NE, V_CMP_NE_U64_e64, i64>; 530def : ICMP_Pattern <COND_UGT, V_CMP_GT_U64_e64, i64>; 531def : ICMP_Pattern <COND_UGE, V_CMP_GE_U64_e64, i64>; 532def : ICMP_Pattern <COND_ULT, V_CMP_LT_U64_e64, i64>; 533def : ICMP_Pattern <COND_ULE, V_CMP_LE_U64_e64, i64>; 534def : ICMP_Pattern <COND_SGT, V_CMP_GT_I64_e64, i64>; 535def : ICMP_Pattern <COND_SGE, V_CMP_GE_I64_e64, i64>; 536def : ICMP_Pattern <COND_SLT, V_CMP_LT_I64_e64, i64>; 537def : ICMP_Pattern <COND_SLE, V_CMP_LE_I64_e64, i64>; 538 539class FCMP_Pattern <PatLeaf cond, Instruction inst, ValueType vt> : Pat < 540 (i64 (AMDGPUsetcc (vt (VOP3Mods vt:$src0, i32:$src0_modifiers)), 541 (vt (VOP3Mods vt:$src1, i32:$src1_modifiers)), cond)), 542 (inst $src0_modifiers, $src0, $src1_modifiers, $src1, 543 DSTCLAMP.NONE, DSTOMOD.NONE) 544>; 545 546def : FCMP_Pattern <COND_OEQ, V_CMP_EQ_F32_e64, f32>; 547def : FCMP_Pattern <COND_ONE, V_CMP_NEQ_F32_e64, f32>; 548def : FCMP_Pattern <COND_OGT, V_CMP_GT_F32_e64, f32>; 549def : FCMP_Pattern <COND_OGE, V_CMP_GE_F32_e64, f32>; 550def : FCMP_Pattern <COND_OLT, V_CMP_LT_F32_e64, f32>; 551def : FCMP_Pattern <COND_OLE, V_CMP_LE_F32_e64, f32>; 552 553def : FCMP_Pattern <COND_OEQ, V_CMP_EQ_F64_e64, f64>; 554def : FCMP_Pattern <COND_ONE, V_CMP_NEQ_F64_e64, f64>; 555def : FCMP_Pattern <COND_OGT, V_CMP_GT_F64_e64, f64>; 556def : FCMP_Pattern <COND_OGE, V_CMP_GE_F64_e64, f64>; 557def : FCMP_Pattern <COND_OLT, V_CMP_LT_F64_e64, f64>; 558def : FCMP_Pattern <COND_OLE, V_CMP_LE_F64_e64, f64>; 559 560def : FCMP_Pattern <COND_UEQ, V_CMP_NLG_F32_e64, f32>; 561def : FCMP_Pattern <COND_UNE, V_CMP_NEQ_F32_e64, f32>; 562def : FCMP_Pattern <COND_UGT, V_CMP_NLE_F32_e64, f32>; 563def : FCMP_Pattern <COND_UGE, V_CMP_NLT_F32_e64, f32>; 564def : FCMP_Pattern <COND_ULT, V_CMP_NGE_F32_e64, f32>; 565def : FCMP_Pattern <COND_ULE, V_CMP_NGT_F32_e64, f32>; 566 567def : FCMP_Pattern <COND_UEQ, V_CMP_NLG_F64_e64, f64>; 568def : FCMP_Pattern <COND_UNE, V_CMP_NEQ_F64_e64, f64>; 569def : FCMP_Pattern <COND_UGT, V_CMP_NLE_F64_e64, f64>; 570def : FCMP_Pattern <COND_UGE, V_CMP_NLT_F64_e64, f64>; 571def : FCMP_Pattern <COND_ULT, V_CMP_NGE_F64_e64, f64>; 572def : FCMP_Pattern <COND_ULE, V_CMP_NGT_F64_e64, f64>; 573 574} // End Predicates = [isGCN] 575 576//===----------------------------------------------------------------------===// 577// Target 578//===----------------------------------------------------------------------===// 579 580//===----------------------------------------------------------------------===// 581// SI 582//===----------------------------------------------------------------------===// 583 584multiclass VOPC_Real_si <bits<9> op> { 585 let AssemblerPredicates = [isSICI], DecoderNamespace = "SICI" in { 586 def _e32_si : 587 VOPC_Real<!cast<VOPC_Pseudo>(NAME#"_e32"), SIEncodingFamily.SI>, 588 VOPCe<op{7-0}>; 589 590 def _e64_si : 591 VOP3_Real<!cast<VOP3_Pseudo>(NAME#"_e64"), SIEncodingFamily.SI>, 592 VOP3a_si <op, !cast<VOP3_Pseudo>(NAME#"_e64").Pfl> { 593 // Encoding used for VOPC instructions encoded as VOP3 594 // Differs from VOP3e by destination name (sdst) as VOPC doesn't have vector dst 595 bits<8> sdst; 596 let Inst{7-0} = sdst; 597 } 598 } 599 def : VOPCInstAlias <!cast<VOP3_Pseudo>(NAME#"_e64"), 600 !cast<Instruction>(NAME#"_e32_si")> { 601 let AssemblerPredicate = isSICI; 602 } 603} 604 605defm V_CMP_F_F32 : VOPC_Real_si <0x0>; 606defm V_CMP_LT_F32 : VOPC_Real_si <0x1>; 607defm V_CMP_EQ_F32 : VOPC_Real_si <0x2>; 608defm V_CMP_LE_F32 : VOPC_Real_si <0x3>; 609defm V_CMP_GT_F32 : VOPC_Real_si <0x4>; 610defm V_CMP_LG_F32 : VOPC_Real_si <0x5>; 611defm V_CMP_GE_F32 : VOPC_Real_si <0x6>; 612defm V_CMP_O_F32 : VOPC_Real_si <0x7>; 613defm V_CMP_U_F32 : VOPC_Real_si <0x8>; 614defm V_CMP_NGE_F32 : VOPC_Real_si <0x9>; 615defm V_CMP_NLG_F32 : VOPC_Real_si <0xa>; 616defm V_CMP_NGT_F32 : VOPC_Real_si <0xb>; 617defm V_CMP_NLE_F32 : VOPC_Real_si <0xc>; 618defm V_CMP_NEQ_F32 : VOPC_Real_si <0xd>; 619defm V_CMP_NLT_F32 : VOPC_Real_si <0xe>; 620defm V_CMP_TRU_F32 : VOPC_Real_si <0xf>; 621 622defm V_CMPX_F_F32 : VOPC_Real_si <0x10>; 623defm V_CMPX_LT_F32 : VOPC_Real_si <0x11>; 624defm V_CMPX_EQ_F32 : VOPC_Real_si <0x12>; 625defm V_CMPX_LE_F32 : VOPC_Real_si <0x13>; 626defm V_CMPX_GT_F32 : VOPC_Real_si <0x14>; 627defm V_CMPX_LG_F32 : VOPC_Real_si <0x15>; 628defm V_CMPX_GE_F32 : VOPC_Real_si <0x16>; 629defm V_CMPX_O_F32 : VOPC_Real_si <0x17>; 630defm V_CMPX_U_F32 : VOPC_Real_si <0x18>; 631defm V_CMPX_NGE_F32 : VOPC_Real_si <0x19>; 632defm V_CMPX_NLG_F32 : VOPC_Real_si <0x1a>; 633defm V_CMPX_NGT_F32 : VOPC_Real_si <0x1b>; 634defm V_CMPX_NLE_F32 : VOPC_Real_si <0x1c>; 635defm V_CMPX_NEQ_F32 : VOPC_Real_si <0x1d>; 636defm V_CMPX_NLT_F32 : VOPC_Real_si <0x1e>; 637defm V_CMPX_TRU_F32 : VOPC_Real_si <0x1f>; 638 639defm V_CMP_F_F64 : VOPC_Real_si <0x20>; 640defm V_CMP_LT_F64 : VOPC_Real_si <0x21>; 641defm V_CMP_EQ_F64 : VOPC_Real_si <0x22>; 642defm V_CMP_LE_F64 : VOPC_Real_si <0x23>; 643defm V_CMP_GT_F64 : VOPC_Real_si <0x24>; 644defm V_CMP_LG_F64 : VOPC_Real_si <0x25>; 645defm V_CMP_GE_F64 : VOPC_Real_si <0x26>; 646defm V_CMP_O_F64 : VOPC_Real_si <0x27>; 647defm V_CMP_U_F64 : VOPC_Real_si <0x28>; 648defm V_CMP_NGE_F64 : VOPC_Real_si <0x29>; 649defm V_CMP_NLG_F64 : VOPC_Real_si <0x2a>; 650defm V_CMP_NGT_F64 : VOPC_Real_si <0x2b>; 651defm V_CMP_NLE_F64 : VOPC_Real_si <0x2c>; 652defm V_CMP_NEQ_F64 : VOPC_Real_si <0x2d>; 653defm V_CMP_NLT_F64 : VOPC_Real_si <0x2e>; 654defm V_CMP_TRU_F64 : VOPC_Real_si <0x2f>; 655 656defm V_CMPX_F_F64 : VOPC_Real_si <0x30>; 657defm V_CMPX_LT_F64 : VOPC_Real_si <0x31>; 658defm V_CMPX_EQ_F64 : VOPC_Real_si <0x32>; 659defm V_CMPX_LE_F64 : VOPC_Real_si <0x33>; 660defm V_CMPX_GT_F64 : VOPC_Real_si <0x34>; 661defm V_CMPX_LG_F64 : VOPC_Real_si <0x35>; 662defm V_CMPX_GE_F64 : VOPC_Real_si <0x36>; 663defm V_CMPX_O_F64 : VOPC_Real_si <0x37>; 664defm V_CMPX_U_F64 : VOPC_Real_si <0x38>; 665defm V_CMPX_NGE_F64 : VOPC_Real_si <0x39>; 666defm V_CMPX_NLG_F64 : VOPC_Real_si <0x3a>; 667defm V_CMPX_NGT_F64 : VOPC_Real_si <0x3b>; 668defm V_CMPX_NLE_F64 : VOPC_Real_si <0x3c>; 669defm V_CMPX_NEQ_F64 : VOPC_Real_si <0x3d>; 670defm V_CMPX_NLT_F64 : VOPC_Real_si <0x3e>; 671defm V_CMPX_TRU_F64 : VOPC_Real_si <0x3f>; 672 673defm V_CMPS_F_F32 : VOPC_Real_si <0x40>; 674defm V_CMPS_LT_F32 : VOPC_Real_si <0x41>; 675defm V_CMPS_EQ_F32 : VOPC_Real_si <0x42>; 676defm V_CMPS_LE_F32 : VOPC_Real_si <0x43>; 677defm V_CMPS_GT_F32 : VOPC_Real_si <0x44>; 678defm V_CMPS_LG_F32 : VOPC_Real_si <0x45>; 679defm V_CMPS_GE_F32 : VOPC_Real_si <0x46>; 680defm V_CMPS_O_F32 : VOPC_Real_si <0x47>; 681defm V_CMPS_U_F32 : VOPC_Real_si <0x48>; 682defm V_CMPS_NGE_F32 : VOPC_Real_si <0x49>; 683defm V_CMPS_NLG_F32 : VOPC_Real_si <0x4a>; 684defm V_CMPS_NGT_F32 : VOPC_Real_si <0x4b>; 685defm V_CMPS_NLE_F32 : VOPC_Real_si <0x4c>; 686defm V_CMPS_NEQ_F32 : VOPC_Real_si <0x4d>; 687defm V_CMPS_NLT_F32 : VOPC_Real_si <0x4e>; 688defm V_CMPS_TRU_F32 : VOPC_Real_si <0x4f>; 689 690defm V_CMPSX_F_F32 : VOPC_Real_si <0x50>; 691defm V_CMPSX_LT_F32 : VOPC_Real_si <0x51>; 692defm V_CMPSX_EQ_F32 : VOPC_Real_si <0x52>; 693defm V_CMPSX_LE_F32 : VOPC_Real_si <0x53>; 694defm V_CMPSX_GT_F32 : VOPC_Real_si <0x54>; 695defm V_CMPSX_LG_F32 : VOPC_Real_si <0x55>; 696defm V_CMPSX_GE_F32 : VOPC_Real_si <0x56>; 697defm V_CMPSX_O_F32 : VOPC_Real_si <0x57>; 698defm V_CMPSX_U_F32 : VOPC_Real_si <0x58>; 699defm V_CMPSX_NGE_F32 : VOPC_Real_si <0x59>; 700defm V_CMPSX_NLG_F32 : VOPC_Real_si <0x5a>; 701defm V_CMPSX_NGT_F32 : VOPC_Real_si <0x5b>; 702defm V_CMPSX_NLE_F32 : VOPC_Real_si <0x5c>; 703defm V_CMPSX_NEQ_F32 : VOPC_Real_si <0x5d>; 704defm V_CMPSX_NLT_F32 : VOPC_Real_si <0x5e>; 705defm V_CMPSX_TRU_F32 : VOPC_Real_si <0x5f>; 706 707defm V_CMPS_F_F64 : VOPC_Real_si <0x60>; 708defm V_CMPS_LT_F64 : VOPC_Real_si <0x61>; 709defm V_CMPS_EQ_F64 : VOPC_Real_si <0x62>; 710defm V_CMPS_LE_F64 : VOPC_Real_si <0x63>; 711defm V_CMPS_GT_F64 : VOPC_Real_si <0x64>; 712defm V_CMPS_LG_F64 : VOPC_Real_si <0x65>; 713defm V_CMPS_GE_F64 : VOPC_Real_si <0x66>; 714defm V_CMPS_O_F64 : VOPC_Real_si <0x67>; 715defm V_CMPS_U_F64 : VOPC_Real_si <0x68>; 716defm V_CMPS_NGE_F64 : VOPC_Real_si <0x69>; 717defm V_CMPS_NLG_F64 : VOPC_Real_si <0x6a>; 718defm V_CMPS_NGT_F64 : VOPC_Real_si <0x6b>; 719defm V_CMPS_NLE_F64 : VOPC_Real_si <0x6c>; 720defm V_CMPS_NEQ_F64 : VOPC_Real_si <0x6d>; 721defm V_CMPS_NLT_F64 : VOPC_Real_si <0x6e>; 722defm V_CMPS_TRU_F64 : VOPC_Real_si <0x6f>; 723 724defm V_CMPSX_F_F64 : VOPC_Real_si <0x70>; 725defm V_CMPSX_LT_F64 : VOPC_Real_si <0x71>; 726defm V_CMPSX_EQ_F64 : VOPC_Real_si <0x72>; 727defm V_CMPSX_LE_F64 : VOPC_Real_si <0x73>; 728defm V_CMPSX_GT_F64 : VOPC_Real_si <0x74>; 729defm V_CMPSX_LG_F64 : VOPC_Real_si <0x75>; 730defm V_CMPSX_GE_F64 : VOPC_Real_si <0x76>; 731defm V_CMPSX_O_F64 : VOPC_Real_si <0x77>; 732defm V_CMPSX_U_F64 : VOPC_Real_si <0x78>; 733defm V_CMPSX_NGE_F64 : VOPC_Real_si <0x79>; 734defm V_CMPSX_NLG_F64 : VOPC_Real_si <0x7a>; 735defm V_CMPSX_NGT_F64 : VOPC_Real_si <0x7b>; 736defm V_CMPSX_NLE_F64 : VOPC_Real_si <0x7c>; 737defm V_CMPSX_NEQ_F64 : VOPC_Real_si <0x7d>; 738defm V_CMPSX_NLT_F64 : VOPC_Real_si <0x7e>; 739defm V_CMPSX_TRU_F64 : VOPC_Real_si <0x7f>; 740 741defm V_CMP_F_I32 : VOPC_Real_si <0x80>; 742defm V_CMP_LT_I32 : VOPC_Real_si <0x81>; 743defm V_CMP_EQ_I32 : VOPC_Real_si <0x82>; 744defm V_CMP_LE_I32 : VOPC_Real_si <0x83>; 745defm V_CMP_GT_I32 : VOPC_Real_si <0x84>; 746defm V_CMP_NE_I32 : VOPC_Real_si <0x85>; 747defm V_CMP_GE_I32 : VOPC_Real_si <0x86>; 748defm V_CMP_T_I32 : VOPC_Real_si <0x87>; 749 750defm V_CMPX_F_I32 : VOPC_Real_si <0x90>; 751defm V_CMPX_LT_I32 : VOPC_Real_si <0x91>; 752defm V_CMPX_EQ_I32 : VOPC_Real_si <0x92>; 753defm V_CMPX_LE_I32 : VOPC_Real_si <0x93>; 754defm V_CMPX_GT_I32 : VOPC_Real_si <0x94>; 755defm V_CMPX_NE_I32 : VOPC_Real_si <0x95>; 756defm V_CMPX_GE_I32 : VOPC_Real_si <0x96>; 757defm V_CMPX_T_I32 : VOPC_Real_si <0x97>; 758 759defm V_CMP_F_I64 : VOPC_Real_si <0xa0>; 760defm V_CMP_LT_I64 : VOPC_Real_si <0xa1>; 761defm V_CMP_EQ_I64 : VOPC_Real_si <0xa2>; 762defm V_CMP_LE_I64 : VOPC_Real_si <0xa3>; 763defm V_CMP_GT_I64 : VOPC_Real_si <0xa4>; 764defm V_CMP_NE_I64 : VOPC_Real_si <0xa5>; 765defm V_CMP_GE_I64 : VOPC_Real_si <0xa6>; 766defm V_CMP_T_I64 : VOPC_Real_si <0xa7>; 767 768defm V_CMPX_F_I64 : VOPC_Real_si <0xb0>; 769defm V_CMPX_LT_I64 : VOPC_Real_si <0xb1>; 770defm V_CMPX_EQ_I64 : VOPC_Real_si <0xb2>; 771defm V_CMPX_LE_I64 : VOPC_Real_si <0xb3>; 772defm V_CMPX_GT_I64 : VOPC_Real_si <0xb4>; 773defm V_CMPX_NE_I64 : VOPC_Real_si <0xb5>; 774defm V_CMPX_GE_I64 : VOPC_Real_si <0xb6>; 775defm V_CMPX_T_I64 : VOPC_Real_si <0xb7>; 776 777defm V_CMP_F_U32 : VOPC_Real_si <0xc0>; 778defm V_CMP_LT_U32 : VOPC_Real_si <0xc1>; 779defm V_CMP_EQ_U32 : VOPC_Real_si <0xc2>; 780defm V_CMP_LE_U32 : VOPC_Real_si <0xc3>; 781defm V_CMP_GT_U32 : VOPC_Real_si <0xc4>; 782defm V_CMP_NE_U32 : VOPC_Real_si <0xc5>; 783defm V_CMP_GE_U32 : VOPC_Real_si <0xc6>; 784defm V_CMP_T_U32 : VOPC_Real_si <0xc7>; 785 786defm V_CMPX_F_U32 : VOPC_Real_si <0xd0>; 787defm V_CMPX_LT_U32 : VOPC_Real_si <0xd1>; 788defm V_CMPX_EQ_U32 : VOPC_Real_si <0xd2>; 789defm V_CMPX_LE_U32 : VOPC_Real_si <0xd3>; 790defm V_CMPX_GT_U32 : VOPC_Real_si <0xd4>; 791defm V_CMPX_NE_U32 : VOPC_Real_si <0xd5>; 792defm V_CMPX_GE_U32 : VOPC_Real_si <0xd6>; 793defm V_CMPX_T_U32 : VOPC_Real_si <0xd7>; 794 795defm V_CMP_F_U64 : VOPC_Real_si <0xe0>; 796defm V_CMP_LT_U64 : VOPC_Real_si <0xe1>; 797defm V_CMP_EQ_U64 : VOPC_Real_si <0xe2>; 798defm V_CMP_LE_U64 : VOPC_Real_si <0xe3>; 799defm V_CMP_GT_U64 : VOPC_Real_si <0xe4>; 800defm V_CMP_NE_U64 : VOPC_Real_si <0xe5>; 801defm V_CMP_GE_U64 : VOPC_Real_si <0xe6>; 802defm V_CMP_T_U64 : VOPC_Real_si <0xe7>; 803 804defm V_CMPX_F_U64 : VOPC_Real_si <0xf0>; 805defm V_CMPX_LT_U64 : VOPC_Real_si <0xf1>; 806defm V_CMPX_EQ_U64 : VOPC_Real_si <0xf2>; 807defm V_CMPX_LE_U64 : VOPC_Real_si <0xf3>; 808defm V_CMPX_GT_U64 : VOPC_Real_si <0xf4>; 809defm V_CMPX_NE_U64 : VOPC_Real_si <0xf5>; 810defm V_CMPX_GE_U64 : VOPC_Real_si <0xf6>; 811defm V_CMPX_T_U64 : VOPC_Real_si <0xf7>; 812 813defm V_CMP_CLASS_F32 : VOPC_Real_si <0x88>; 814defm V_CMPX_CLASS_F32 : VOPC_Real_si <0x98>; 815defm V_CMP_CLASS_F64 : VOPC_Real_si <0xa8>; 816defm V_CMPX_CLASS_F64 : VOPC_Real_si <0xb8>; 817 818//===----------------------------------------------------------------------===// 819// VI 820//===----------------------------------------------------------------------===// 821 822class VOPC_SDWA<bits<8> op, VOPC_Pseudo ps, VOPProfile P = ps.Pfl> : 823 VOP_SDWA <ps.OpName, P> { 824 let Defs = ps.Defs; 825 let hasSideEffects = ps.hasSideEffects; 826 let AsmMatchConverter = "cvtSdwaVOPC"; 827 let isCompare = ps.isCompare; 828 let isCommutable = ps.isCommutable; 829 830 bits<8> src1; 831 let Inst{8-0} = 0xf9; // sdwa 832 let Inst{16-9} = !if(P.HasSrc1, src1{7-0}, 0); 833 let Inst{24-17} = op; 834 let Inst{31-25} = 0x3e; // encoding 835 836 // VOPC disallows dst_sel and dst_unused as they have no effect on destination 837 let Inst{42-40} = SDWA_DWORD; 838 let Inst{44-43} = SDWA_UNUSED_PRESERVE; 839} 840 841multiclass VOPC_Real_vi <bits<10> op> { 842 let AssemblerPredicates = [isVI], DecoderNamespace = "VI" in { 843 def _e32_vi : 844 VOPC_Real<!cast<VOPC_Pseudo>(NAME#"_e32"), SIEncodingFamily.VI>, 845 VOPCe<op{7-0}>; 846 847 def _e64_vi : 848 VOP3_Real<!cast<VOP3_Pseudo>(NAME#"_e64"), SIEncodingFamily.VI>, 849 VOP3a_vi <op, !cast<VOP3_Pseudo>(NAME#"_e64").Pfl> { 850 // Encoding used for VOPC instructions encoded as VOP3 851 // Differs from VOP3e by destination name (sdst) as VOPC doesn't have vector dst 852 bits<8> sdst; 853 let Inst{7-0} = sdst; 854 } 855 } 856 857 // for now left sdwa only for asm/dasm 858 // TODO: add corresponding pseudo 859 def _sdwa : VOPC_SDWA<op{7-0}, !cast<VOPC_Pseudo>(NAME#"_e32")>; 860 861 def : VOPCInstAlias <!cast<VOP3_Pseudo>(NAME#"_e64"), 862 !cast<Instruction>(NAME#"_e32_vi")> { 863 let AssemblerPredicate = isVI; 864 } 865} 866 867defm V_CMP_CLASS_F32 : VOPC_Real_vi <0x10>; 868defm V_CMPX_CLASS_F32 : VOPC_Real_vi <0x11>; 869defm V_CMP_CLASS_F64 : VOPC_Real_vi <0x12>; 870defm V_CMPX_CLASS_F64 : VOPC_Real_vi <0x13>; 871defm V_CMP_CLASS_F16 : VOPC_Real_vi <0x14>; 872defm V_CMPX_CLASS_F16 : VOPC_Real_vi <0x15>; 873 874defm V_CMP_F_F16 : VOPC_Real_vi <0x20>; 875defm V_CMP_LT_F16 : VOPC_Real_vi <0x21>; 876defm V_CMP_EQ_F16 : VOPC_Real_vi <0x22>; 877defm V_CMP_LE_F16 : VOPC_Real_vi <0x23>; 878defm V_CMP_GT_F16 : VOPC_Real_vi <0x24>; 879defm V_CMP_LG_F16 : VOPC_Real_vi <0x25>; 880defm V_CMP_GE_F16 : VOPC_Real_vi <0x26>; 881defm V_CMP_O_F16 : VOPC_Real_vi <0x27>; 882defm V_CMP_U_F16 : VOPC_Real_vi <0x28>; 883defm V_CMP_NGE_F16 : VOPC_Real_vi <0x29>; 884defm V_CMP_NLG_F16 : VOPC_Real_vi <0x2a>; 885defm V_CMP_NGT_F16 : VOPC_Real_vi <0x2b>; 886defm V_CMP_NLE_F16 : VOPC_Real_vi <0x2c>; 887defm V_CMP_NEQ_F16 : VOPC_Real_vi <0x2d>; 888defm V_CMP_NLT_F16 : VOPC_Real_vi <0x2e>; 889defm V_CMP_TRU_F16 : VOPC_Real_vi <0x2f>; 890 891defm V_CMPX_F_F16 : VOPC_Real_vi <0x30>; 892defm V_CMPX_LT_F16 : VOPC_Real_vi <0x31>; 893defm V_CMPX_EQ_F16 : VOPC_Real_vi <0x32>; 894defm V_CMPX_LE_F16 : VOPC_Real_vi <0x33>; 895defm V_CMPX_GT_F16 : VOPC_Real_vi <0x34>; 896defm V_CMPX_LG_F16 : VOPC_Real_vi <0x35>; 897defm V_CMPX_GE_F16 : VOPC_Real_vi <0x36>; 898defm V_CMPX_O_F16 : VOPC_Real_vi <0x37>; 899defm V_CMPX_U_F16 : VOPC_Real_vi <0x38>; 900defm V_CMPX_NGE_F16 : VOPC_Real_vi <0x39>; 901defm V_CMPX_NLG_F16 : VOPC_Real_vi <0x3a>; 902defm V_CMPX_NGT_F16 : VOPC_Real_vi <0x3b>; 903defm V_CMPX_NLE_F16 : VOPC_Real_vi <0x3c>; 904defm V_CMPX_NEQ_F16 : VOPC_Real_vi <0x3d>; 905defm V_CMPX_NLT_F16 : VOPC_Real_vi <0x3e>; 906defm V_CMPX_TRU_F16 : VOPC_Real_vi <0x3f>; 907 908defm V_CMP_F_F32 : VOPC_Real_vi <0x40>; 909defm V_CMP_LT_F32 : VOPC_Real_vi <0x41>; 910defm V_CMP_EQ_F32 : VOPC_Real_vi <0x42>; 911defm V_CMP_LE_F32 : VOPC_Real_vi <0x43>; 912defm V_CMP_GT_F32 : VOPC_Real_vi <0x44>; 913defm V_CMP_LG_F32 : VOPC_Real_vi <0x45>; 914defm V_CMP_GE_F32 : VOPC_Real_vi <0x46>; 915defm V_CMP_O_F32 : VOPC_Real_vi <0x47>; 916defm V_CMP_U_F32 : VOPC_Real_vi <0x48>; 917defm V_CMP_NGE_F32 : VOPC_Real_vi <0x49>; 918defm V_CMP_NLG_F32 : VOPC_Real_vi <0x4a>; 919defm V_CMP_NGT_F32 : VOPC_Real_vi <0x4b>; 920defm V_CMP_NLE_F32 : VOPC_Real_vi <0x4c>; 921defm V_CMP_NEQ_F32 : VOPC_Real_vi <0x4d>; 922defm V_CMP_NLT_F32 : VOPC_Real_vi <0x4e>; 923defm V_CMP_TRU_F32 : VOPC_Real_vi <0x4f>; 924 925defm V_CMPX_F_F32 : VOPC_Real_vi <0x50>; 926defm V_CMPX_LT_F32 : VOPC_Real_vi <0x51>; 927defm V_CMPX_EQ_F32 : VOPC_Real_vi <0x52>; 928defm V_CMPX_LE_F32 : VOPC_Real_vi <0x53>; 929defm V_CMPX_GT_F32 : VOPC_Real_vi <0x54>; 930defm V_CMPX_LG_F32 : VOPC_Real_vi <0x55>; 931defm V_CMPX_GE_F32 : VOPC_Real_vi <0x56>; 932defm V_CMPX_O_F32 : VOPC_Real_vi <0x57>; 933defm V_CMPX_U_F32 : VOPC_Real_vi <0x58>; 934defm V_CMPX_NGE_F32 : VOPC_Real_vi <0x59>; 935defm V_CMPX_NLG_F32 : VOPC_Real_vi <0x5a>; 936defm V_CMPX_NGT_F32 : VOPC_Real_vi <0x5b>; 937defm V_CMPX_NLE_F32 : VOPC_Real_vi <0x5c>; 938defm V_CMPX_NEQ_F32 : VOPC_Real_vi <0x5d>; 939defm V_CMPX_NLT_F32 : VOPC_Real_vi <0x5e>; 940defm V_CMPX_TRU_F32 : VOPC_Real_vi <0x5f>; 941 942defm V_CMP_F_F64 : VOPC_Real_vi <0x60>; 943defm V_CMP_LT_F64 : VOPC_Real_vi <0x61>; 944defm V_CMP_EQ_F64 : VOPC_Real_vi <0x62>; 945defm V_CMP_LE_F64 : VOPC_Real_vi <0x63>; 946defm V_CMP_GT_F64 : VOPC_Real_vi <0x64>; 947defm V_CMP_LG_F64 : VOPC_Real_vi <0x65>; 948defm V_CMP_GE_F64 : VOPC_Real_vi <0x66>; 949defm V_CMP_O_F64 : VOPC_Real_vi <0x67>; 950defm V_CMP_U_F64 : VOPC_Real_vi <0x68>; 951defm V_CMP_NGE_F64 : VOPC_Real_vi <0x69>; 952defm V_CMP_NLG_F64 : VOPC_Real_vi <0x6a>; 953defm V_CMP_NGT_F64 : VOPC_Real_vi <0x6b>; 954defm V_CMP_NLE_F64 : VOPC_Real_vi <0x6c>; 955defm V_CMP_NEQ_F64 : VOPC_Real_vi <0x6d>; 956defm V_CMP_NLT_F64 : VOPC_Real_vi <0x6e>; 957defm V_CMP_TRU_F64 : VOPC_Real_vi <0x6f>; 958 959defm V_CMPX_F_F64 : VOPC_Real_vi <0x70>; 960defm V_CMPX_LT_F64 : VOPC_Real_vi <0x71>; 961defm V_CMPX_EQ_F64 : VOPC_Real_vi <0x72>; 962defm V_CMPX_LE_F64 : VOPC_Real_vi <0x73>; 963defm V_CMPX_GT_F64 : VOPC_Real_vi <0x74>; 964defm V_CMPX_LG_F64 : VOPC_Real_vi <0x75>; 965defm V_CMPX_GE_F64 : VOPC_Real_vi <0x76>; 966defm V_CMPX_O_F64 : VOPC_Real_vi <0x77>; 967defm V_CMPX_U_F64 : VOPC_Real_vi <0x78>; 968defm V_CMPX_NGE_F64 : VOPC_Real_vi <0x79>; 969defm V_CMPX_NLG_F64 : VOPC_Real_vi <0x7a>; 970defm V_CMPX_NGT_F64 : VOPC_Real_vi <0x7b>; 971defm V_CMPX_NLE_F64 : VOPC_Real_vi <0x7c>; 972defm V_CMPX_NEQ_F64 : VOPC_Real_vi <0x7d>; 973defm V_CMPX_NLT_F64 : VOPC_Real_vi <0x7e>; 974defm V_CMPX_TRU_F64 : VOPC_Real_vi <0x7f>; 975 976defm V_CMP_F_I32 : VOPC_Real_vi <0xc0>; 977defm V_CMP_LT_I32 : VOPC_Real_vi <0xc1>; 978defm V_CMP_EQ_I32 : VOPC_Real_vi <0xc2>; 979defm V_CMP_LE_I32 : VOPC_Real_vi <0xc3>; 980defm V_CMP_GT_I32 : VOPC_Real_vi <0xc4>; 981defm V_CMP_NE_I32 : VOPC_Real_vi <0xc5>; 982defm V_CMP_GE_I32 : VOPC_Real_vi <0xc6>; 983defm V_CMP_T_I32 : VOPC_Real_vi <0xc7>; 984 985defm V_CMPX_F_I32 : VOPC_Real_vi <0xd0>; 986defm V_CMPX_LT_I32 : VOPC_Real_vi <0xd1>; 987defm V_CMPX_EQ_I32 : VOPC_Real_vi <0xd2>; 988defm V_CMPX_LE_I32 : VOPC_Real_vi <0xd3>; 989defm V_CMPX_GT_I32 : VOPC_Real_vi <0xd4>; 990defm V_CMPX_NE_I32 : VOPC_Real_vi <0xd5>; 991defm V_CMPX_GE_I32 : VOPC_Real_vi <0xd6>; 992defm V_CMPX_T_I32 : VOPC_Real_vi <0xd7>; 993 994defm V_CMP_F_I64 : VOPC_Real_vi <0xe0>; 995defm V_CMP_LT_I64 : VOPC_Real_vi <0xe1>; 996defm V_CMP_EQ_I64 : VOPC_Real_vi <0xe2>; 997defm V_CMP_LE_I64 : VOPC_Real_vi <0xe3>; 998defm V_CMP_GT_I64 : VOPC_Real_vi <0xe4>; 999defm V_CMP_NE_I64 : VOPC_Real_vi <0xe5>; 1000defm V_CMP_GE_I64 : VOPC_Real_vi <0xe6>; 1001defm V_CMP_T_I64 : VOPC_Real_vi <0xe7>; 1002 1003defm V_CMPX_F_I64 : VOPC_Real_vi <0xf0>; 1004defm V_CMPX_LT_I64 : VOPC_Real_vi <0xf1>; 1005defm V_CMPX_EQ_I64 : VOPC_Real_vi <0xf2>; 1006defm V_CMPX_LE_I64 : VOPC_Real_vi <0xf3>; 1007defm V_CMPX_GT_I64 : VOPC_Real_vi <0xf4>; 1008defm V_CMPX_NE_I64 : VOPC_Real_vi <0xf5>; 1009defm V_CMPX_GE_I64 : VOPC_Real_vi <0xf6>; 1010defm V_CMPX_T_I64 : VOPC_Real_vi <0xf7>; 1011 1012defm V_CMP_F_U32 : VOPC_Real_vi <0xc8>; 1013defm V_CMP_LT_U32 : VOPC_Real_vi <0xc9>; 1014defm V_CMP_EQ_U32 : VOPC_Real_vi <0xca>; 1015defm V_CMP_LE_U32 : VOPC_Real_vi <0xcb>; 1016defm V_CMP_GT_U32 : VOPC_Real_vi <0xcc>; 1017defm V_CMP_NE_U32 : VOPC_Real_vi <0xcd>; 1018defm V_CMP_GE_U32 : VOPC_Real_vi <0xce>; 1019defm V_CMP_T_U32 : VOPC_Real_vi <0xcf>; 1020 1021defm V_CMPX_F_U32 : VOPC_Real_vi <0xd8>; 1022defm V_CMPX_LT_U32 : VOPC_Real_vi <0xd9>; 1023defm V_CMPX_EQ_U32 : VOPC_Real_vi <0xda>; 1024defm V_CMPX_LE_U32 : VOPC_Real_vi <0xdb>; 1025defm V_CMPX_GT_U32 : VOPC_Real_vi <0xdc>; 1026defm V_CMPX_NE_U32 : VOPC_Real_vi <0xdd>; 1027defm V_CMPX_GE_U32 : VOPC_Real_vi <0xde>; 1028defm V_CMPX_T_U32 : VOPC_Real_vi <0xdf>; 1029 1030defm V_CMP_F_U64 : VOPC_Real_vi <0xe8>; 1031defm V_CMP_LT_U64 : VOPC_Real_vi <0xe9>; 1032defm V_CMP_EQ_U64 : VOPC_Real_vi <0xea>; 1033defm V_CMP_LE_U64 : VOPC_Real_vi <0xeb>; 1034defm V_CMP_GT_U64 : VOPC_Real_vi <0xec>; 1035defm V_CMP_NE_U64 : VOPC_Real_vi <0xed>; 1036defm V_CMP_GE_U64 : VOPC_Real_vi <0xee>; 1037defm V_CMP_T_U64 : VOPC_Real_vi <0xef>; 1038 1039defm V_CMPX_F_U64 : VOPC_Real_vi <0xf8>; 1040defm V_CMPX_LT_U64 : VOPC_Real_vi <0xf9>; 1041defm V_CMPX_EQ_U64 : VOPC_Real_vi <0xfa>; 1042defm V_CMPX_LE_U64 : VOPC_Real_vi <0xfb>; 1043defm V_CMPX_GT_U64 : VOPC_Real_vi <0xfc>; 1044defm V_CMPX_NE_U64 : VOPC_Real_vi <0xfd>; 1045defm V_CMPX_GE_U64 : VOPC_Real_vi <0xfe>; 1046defm V_CMPX_T_U64 : VOPC_Real_vi <0xff>; 1047