diff --git a/llvm/lib/Target/AMDGPU/Disassembler/AMDGPUDisassembler.cpp b/llvm/lib/Target/AMDGPU/Disassembler/AMDGPUDisassembler.cpp index fdef9865b82c06..7c293c1a5e512a 100644 --- a/llvm/lib/Target/AMDGPU/Disassembler/AMDGPUDisassembler.cpp +++ b/llvm/lib/Target/AMDGPU/Disassembler/AMDGPUDisassembler.cpp @@ -363,6 +363,19 @@ static DecodeStatus decodeOperand_VSrcT16(MCInst &Inst, unsigned Imm, (AMDGPU::OperandSemantics)OperandSemantics)); } +static DecodeStatus decodeOperand_VGPR_16(MCInst &Inst, unsigned Imm, + uint64_t /*Addr*/, + const MCDisassembler *Decoder) { + assert(isUInt<10>(Imm) && "10-bit encoding expected"); + assert(Imm & AMDGPU::EncValues::IS_VGPR && "VGPR expected"); + + const auto *DAsm = static_cast(Decoder); + + bool IsHi = Imm & (1 << 9); + unsigned RegIdx = Imm & 0xff; + return addOperand(Inst, DAsm->createVGPR16Operand(RegIdx, IsHi)); +} + static DecodeStatus decodeOperand_KImmFP(MCInst &Inst, unsigned Imm, uint64_t Addr, const MCDisassembler *Decoder) { @@ -763,14 +776,23 @@ void AMDGPUDisassembler::convertEXPInst(MCInst &MI) const { } void AMDGPUDisassembler::convertVINTERPInst(MCInst &MI) const { - if (MI.getOpcode() == AMDGPU::V_INTERP_P10_F16_F32_inreg_gfx11 || - MI.getOpcode() == AMDGPU::V_INTERP_P10_F16_F32_inreg_gfx12 || - MI.getOpcode() == AMDGPU::V_INTERP_P10_RTZ_F16_F32_inreg_gfx11 || - MI.getOpcode() == AMDGPU::V_INTERP_P10_RTZ_F16_F32_inreg_gfx12 || - MI.getOpcode() == AMDGPU::V_INTERP_P2_F16_F32_inreg_gfx11 || - MI.getOpcode() == AMDGPU::V_INTERP_P2_F16_F32_inreg_gfx12 || - MI.getOpcode() == AMDGPU::V_INTERP_P2_RTZ_F16_F32_inreg_gfx11 || - MI.getOpcode() == AMDGPU::V_INTERP_P2_RTZ_F16_F32_inreg_gfx12) { + convertTrue16OpSel(MI); + if (MI.getOpcode() == AMDGPU::V_INTERP_P10_F16_F32_inreg_t16_gfx11 || + MI.getOpcode() == AMDGPU::V_INTERP_P10_F16_F32_inreg_fake16_gfx11 || + MI.getOpcode() == AMDGPU::V_INTERP_P10_F16_F32_inreg_t16_gfx12 || + MI.getOpcode() == AMDGPU::V_INTERP_P10_F16_F32_inreg_fake16_gfx12 || + MI.getOpcode() == AMDGPU::V_INTERP_P10_RTZ_F16_F32_inreg_t16_gfx11 || + MI.getOpcode() == AMDGPU::V_INTERP_P10_RTZ_F16_F32_inreg_fake16_gfx11 || + MI.getOpcode() == AMDGPU::V_INTERP_P10_RTZ_F16_F32_inreg_t16_gfx12 || + MI.getOpcode() == AMDGPU::V_INTERP_P10_RTZ_F16_F32_inreg_fake16_gfx12 || + MI.getOpcode() == AMDGPU::V_INTERP_P2_F16_F32_inreg_t16_gfx11 || + MI.getOpcode() == AMDGPU::V_INTERP_P2_F16_F32_inreg_fake16_gfx11 || + MI.getOpcode() == AMDGPU::V_INTERP_P2_F16_F32_inreg_t16_gfx12 || + MI.getOpcode() == AMDGPU::V_INTERP_P2_F16_F32_inreg_fake16_gfx12 || + MI.getOpcode() == AMDGPU::V_INTERP_P2_RTZ_F16_F32_inreg_t16_gfx11 || + MI.getOpcode() == AMDGPU::V_INTERP_P2_RTZ_F16_F32_inreg_fake16_gfx11 || + MI.getOpcode() == AMDGPU::V_INTERP_P2_RTZ_F16_F32_inreg_t16_gfx12 || + MI.getOpcode() == AMDGPU::V_INTERP_P2_RTZ_F16_F32_inreg_fake16_gfx12) { // The MCInst has this field that is not directly encoded in the // instruction. insertNamedMCOperand(MI, MCOperand::createImm(0), AMDGPU::OpName::op_sel); diff --git a/llvm/lib/Target/AMDGPU/SIRegisterInfo.td b/llvm/lib/Target/AMDGPU/SIRegisterInfo.td index 852430129251c6..d47ff9fe96c94e 100644 --- a/llvm/lib/Target/AMDGPU/SIRegisterInfo.td +++ b/llvm/lib/Target/AMDGPU/SIRegisterInfo.td @@ -1244,6 +1244,14 @@ def VRegSrc_128: SrcReg9; def VRegSrc_256: SrcReg9; def VRegOrLdsSrc_32 : SrcReg9; +// True 16 Operands +def VRegSrc_16 : RegisterOperand { + let DecoderMethod = "decodeOperand_VGPR_16"; + let EncoderMethod = "getMachineOpValueT16"; +} +def VRegSrc_fake16: SrcReg9 { + let EncoderMethod = "getMachineOpValueT16"; +} //===----------------------------------------------------------------------===// // VGPRSrc_* //===----------------------------------------------------------------------===// diff --git a/llvm/lib/Target/AMDGPU/VINTERPInstructions.td b/llvm/lib/Target/AMDGPU/VINTERPInstructions.td index 81768c1ef963e8..860a3d775d600d 100644 --- a/llvm/lib/Target/AMDGPU/VINTERPInstructions.td +++ b/llvm/lib/Target/AMDGPU/VINTERPInstructions.td @@ -11,29 +11,30 @@ //===----------------------------------------------------------------------===// class VINTERPe : Enc64 { - bits<8> vdst; + bits<11> vdst; bits<4> src0_modifiers; - bits<9> src0; + bits<11> src0; bits<3> src1_modifiers; - bits<9> src1; + bits<11> src1; bits<3> src2_modifiers; - bits<9> src2; + bits<11> src2; bits<1> clamp; bits<3> waitexp; let Inst{31-26} = 0x33; // VOP3P encoding let Inst{25-24} = 0x1; // VINTERP sub-encoding - let Inst{7-0} = vdst; + let Inst{7-0} = vdst{7-0}; let Inst{10-8} = waitexp; - let Inst{11} = !if(P.HasOpSel, src0_modifiers{2}, 0); // op_sel(0) - let Inst{12} = !if(P.HasOpSel, src1_modifiers{2}, 0); // op_sel(1) - let Inst{13} = !if(P.HasOpSel, src2_modifiers{2}, 0); // op_sel(2) - let Inst{14} = !if(P.HasOpSel, src0_modifiers{3}, 0); // op_sel(3) + // Fields for hi/lo 16-bits of register selection + let Inst{11} = !if(P.HasSrc0, src0_modifiers{2}, 0); + let Inst{12} = !if(P.HasSrc1, src1_modifiers{2}, 0); + let Inst{13} = !if(P.HasSrc2, src2_modifiers{2}, 0); + let Inst{14} = !if(P.HasDst, src0_modifiers{3}, 0); let Inst{15} = clamp; - let Inst{40-32} = src0; - let Inst{49-41} = src1; - let Inst{58-50} = src2; + let Inst{40-32} = src0{8-0}; + let Inst{49-41} = src1{8-0}; + let Inst{58-50} = src2{8-0}; let Inst{61} = src0_modifiers{0}; // neg(0) let Inst{62} = src1_modifiers{0}; // neg(1) let Inst{63} = src2_modifiers{0}; // neg(2) @@ -60,9 +61,10 @@ class VINTERP_Pseudo pattern = []> : let VINTERP = 1; } -class VINTERP_Real : - VOP3_Real { +class VINTERP_Real : + VOP3_Real { let VINTERP = 1; + let IsSingle = 1; } def VOP3_VINTERP_F32 : VOPProfile<[f32, f32, f32, f32]> { @@ -83,22 +85,35 @@ def VOP3_VINTERP_F32 : VOPProfile<[f32, f32, f32, f32]> { let Asm64 = " $vdst, $src0_modifiers, $src1_modifiers, $src2_modifiers$clamp$waitexp"; } -class VOP3_VINTERP_F16 ArgVT> : VOPProfile { - let HasOpSel = 1; - let HasModifiers = 1; +class VOP3_VINTERP_F16_t16 ArgVT> : VOPProfile_True16> { + let Src0Mod = FPT16VRegInputMods; + let Src1Mod = FPVRegInputMods; + let Src2Mod = !if(!eq(ArgVT[3].Size, 16), FPT16VRegInputMods, + FPVRegInputMods); + let Ins64 = (ins Src0Mod:$src0_modifiers, VRegSrc_16:$src0, + Src1Mod:$src1_modifiers, VRegSrc_32:$src1, + Src2Mod:$src2_modifiers, + !if(!eq(ArgVT[3].Size, 16), VRegSrc_16, VRegSrc_32):$src2, + Clamp:$clamp, op_sel0:$op_sel, + WaitEXP:$waitexp); - let Src0Mod = FPVRegInputMods; + let Asm64 = "$vdst, $src0_modifiers, $src1_modifiers, $src2_modifiers$clamp$op_sel$waitexp"; +} + +class VOP3_VINTERP_F16_fake16 ArgVT> : VOPProfile_Fake16> { + let Src0Mod = FPT16VRegInputMods; let Src1Mod = FPVRegInputMods; - let Src2Mod = FPVRegInputMods; + let Src2Mod = !if(!eq(ArgVT[3].Size, 16), FPT16VRegInputMods, + FPVRegInputMods); - let Outs64 = (outs VGPR_32:$vdst); - let Ins64 = (ins Src0Mod:$src0_modifiers, VRegSrc_32:$src0, + let Ins64 = (ins Src0Mod:$src0_modifiers, VRegSrc_fake16:$src0, Src1Mod:$src1_modifiers, VRegSrc_32:$src1, - Src2Mod:$src2_modifiers, VRegSrc_32:$src2, + Src2Mod:$src2_modifiers, + !if(!eq(ArgVT[3].Size, 16), VRegSrc_fake16, VRegSrc_32):$src2, Clamp:$clamp, op_sel0:$op_sel, WaitEXP:$waitexp); - let Asm64 = " $vdst, $src0_modifiers, $src1_modifiers, $src2_modifiers$clamp$op_sel$waitexp"; + let Asm64 = "$vdst, $src0_modifiers, $src1_modifiers, $src2_modifiers$clamp$op_sel$waitexp"; } //===----------------------------------------------------------------------===// @@ -107,20 +122,26 @@ class VOP3_VINTERP_F16 ArgVT> : VOPProfile { let SubtargetPredicate = HasVINTERPEncoding in { +multiclass VINTERP_t16 ArgVT> { + let True16Predicate = UseRealTrue16Insts in { + def _t16 : VINTERP_Pseudo> ; + } + let True16Predicate = UseFakeTrue16Insts in { + def _fake16 : VINTERP_Pseudo> ; + } +} + let Uses = [M0, EXEC, MODE] in { def V_INTERP_P10_F32_inreg : VINTERP_Pseudo <"v_interp_p10_f32", VOP3_VINTERP_F32>; def V_INTERP_P2_F32_inreg : VINTERP_Pseudo <"v_interp_p2_f32", VOP3_VINTERP_F32>; -def V_INTERP_P10_F16_F32_inreg : - VINTERP_Pseudo <"v_interp_p10_f16_f32", VOP3_VINTERP_F16<[f32, f32, f32, f32]>>; -def V_INTERP_P2_F16_F32_inreg : - VINTERP_Pseudo <"v_interp_p2_f16_f32", VOP3_VINTERP_F16<[f16, f32, f32, f32]>>; + +defm V_INTERP_P10_F16_F32_inreg : VINTERP_t16<"v_interp_p10_f16_f32", [f32, f16, f32, f16]>; +defm V_INTERP_P2_F16_F32_inreg : VINTERP_t16<"v_interp_p2_f16_f32", [f16, f16, f32, f32]>; } // Uses = [M0, EXEC, MODE] let Uses = [M0, EXEC] in { -def V_INTERP_P10_RTZ_F16_F32_inreg : - VINTERP_Pseudo <"v_interp_p10_rtz_f16_f32", VOP3_VINTERP_F16<[f32, f32, f32, f32]>>; -def V_INTERP_P2_RTZ_F16_F32_inreg : - VINTERP_Pseudo <"v_interp_p2_rtz_f16_f32", VOP3_VINTERP_F16<[f16, f32, f32, f32]>>; +defm V_INTERP_P10_RTZ_F16_F32_inreg : VINTERP_t16<"v_interp_p10_rtz_f16_f32", [f32, f16, f32, f16]>; +defm V_INTERP_P2_RTZ_F16_F32_inreg : VINTERP_t16 <"v_interp_p2_rtz_f16_f32", [f16, f16, f32, f32]>; } // Uses = [M0, EXEC] } // SubtargetPredicate = HasVINTERPEncoding. @@ -137,11 +158,6 @@ class VInterpF32Pat : GCNPat < 7) /* wait_exp */ >; -def VINTERP_OPSEL { - int LOW = 0; - int HIGH = 0xa; -} - class VInterpF16Pat pat> : GCNPat < @@ -167,45 +183,58 @@ multiclass VInterpF16Pat ; def : VInterpF32Pat; + +let True16Predicate = UseFakeTrue16Insts in { defm : VInterpF16Pat; defm : VInterpF16Pat; defm : VInterpF16Pat; defm : VInterpF16Pat; +} //===----------------------------------------------------------------------===// // VINTERP Real Instructions //===----------------------------------------------------------------------===// -multiclass VINTERP_Real_gfx11 op> { - let AssemblerPredicate = isGFX11Only, DecoderNamespace = "GFX11" in { +multiclass VINTERP_Real_gfx11 op, string asmName> { + defvar ps = !cast(NAME); + let AssemblerPredicate = isGFX11Only, DecoderNamespace = "GFX11" # + !if(ps.Pfl.IsRealTrue16, "", "_FAKE16") in { def _gfx11 : - VINTERP_Real(NAME), SIEncodingFamily.GFX11>, - VINTERPe_gfx11(NAME).Pfl>; + VINTERP_Real, + VINTERPe_gfx11; } } -multiclass VINTERP_Real_gfx12 op> { - let AssemblerPredicate = isGFX12Only, DecoderNamespace = "GFX12" in { +multiclass VINTERP_Real_gfx12 op, string asmName> { + defvar ps = !cast(NAME); + let AssemblerPredicate = isGFX12Only, DecoderNamespace = "GFX12" # + !if(ps.Pfl.IsRealTrue16, "", "_FAKE16") in { def _gfx12 : - VINTERP_Real(NAME), SIEncodingFamily.GFX12>, - VINTERPe_gfx12(NAME).Pfl>; + VINTERP_Real, + VINTERPe_gfx12; } } -multiclass VINTERP_Real_gfx11_gfx12 op> : - VINTERP_Real_gfx11, VINTERP_Real_gfx12; +multiclass VINTERP_Real_gfx11_gfx12 op, string asmName = !cast(NAME).Mnemonic, string opName = NAME> : + VINTERP_Real_gfx11, VINTERP_Real_gfx12; + +multiclass VINTERP_Real_t16_and_fake16_gfx11_gfx12 op, string asmName = !cast(NAME).Mnemonic, string opName = NAME> { + defm _t16: VINTERP_Real_gfx11_gfx12; + defm _fake16: VINTERP_Real_gfx11_gfx12; +} + defm V_INTERP_P10_F32_inreg : VINTERP_Real_gfx11_gfx12<0x000>; defm V_INTERP_P2_F32_inreg : VINTERP_Real_gfx11_gfx12<0x001>; -defm V_INTERP_P10_F16_F32_inreg : VINTERP_Real_gfx11_gfx12<0x002>; -defm V_INTERP_P2_F16_F32_inreg : VINTERP_Real_gfx11_gfx12<0x003>; -defm V_INTERP_P10_RTZ_F16_F32_inreg : VINTERP_Real_gfx11_gfx12<0x004>; -defm V_INTERP_P2_RTZ_F16_F32_inreg : VINTERP_Real_gfx11_gfx12<0x005>; +defm V_INTERP_P10_F16_F32_inreg : VINTERP_Real_t16_and_fake16_gfx11_gfx12<0x002, "v_interp_p10_f16_f32">; +defm V_INTERP_P2_F16_F32_inreg : VINTERP_Real_t16_and_fake16_gfx11_gfx12<0x003, "v_interp_p2_f16_f32">; +defm V_INTERP_P10_RTZ_F16_F32_inreg : VINTERP_Real_t16_and_fake16_gfx11_gfx12<0x004, "v_interp_p10_rtz_f16_f32">; +defm V_INTERP_P2_RTZ_F16_F32_inreg : VINTERP_Real_t16_and_fake16_gfx11_gfx12<0x005, "v_interp_p2_rtz_f16_f32">; diff --git a/llvm/test/CodeGen/AMDGPU/waitcnt-vinterp.mir b/llvm/test/CodeGen/AMDGPU/waitcnt-vinterp.mir index f382800bfd3918..c4e31de14002de 100644 --- a/llvm/test/CodeGen/AMDGPU/waitcnt-vinterp.mir +++ b/llvm/test/CodeGen/AMDGPU/waitcnt-vinterp.mir @@ -15,16 +15,16 @@ body: | ; GFX11-NEXT: $vgpr2 = LDS_PARAM_LOAD 0, 1, 0, implicit $m0, implicit $exec ; GFX11-NEXT: $vgpr3 = LDS_PARAM_LOAD 0, 2, 0, implicit $m0, implicit $exec ; GFX11-NEXT: $vgpr4 = LDS_PARAM_LOAD 0, 3, 0, implicit $m0, implicit $exec - ; GFX11-NEXT: $vgpr5 = V_INTERP_P10_F16_F32_inreg 0, $vgpr1, 0, $vgpr0, 0, $vgpr1, 0, 0, 2, implicit $m0, implicit $exec, implicit $mode - ; GFX11-NEXT: $vgpr6 = V_INTERP_P10_F16_F32_inreg 0, $vgpr2, 0, $vgpr0, 0, $vgpr2, 0, 0, 2, implicit $m0, implicit $exec, implicit $mode - ; GFX11-NEXT: $vgpr7 = V_INTERP_P10_F16_F32_inreg 0, $vgpr3, 0, $vgpr0, 0, $vgpr3, 0, 0, 1, implicit $m0, implicit $exec, implicit $mode - ; GFX11-NEXT: $vgpr8 = V_INTERP_P10_F16_F32_inreg 0, $vgpr4, 0, $vgpr0, 0, $vgpr4, 0, 0, 0, implicit $m0, implicit $exec, implicit $mode + ; GFX11-NEXT: $vgpr5 = V_INTERP_P10_F16_F32_inreg_fake16 0, $vgpr1, 0, $vgpr0, 0, $vgpr1, 0, 0, 2, implicit $m0, implicit $exec, implicit $mode + ; GFX11-NEXT: $vgpr6 = V_INTERP_P10_F16_F32_inreg_fake16 0, $vgpr2, 0, $vgpr0, 0, $vgpr2, 0, 0, 2, implicit $m0, implicit $exec, implicit $mode + ; GFX11-NEXT: $vgpr7 = V_INTERP_P10_F16_F32_inreg_fake16 0, $vgpr3, 0, $vgpr0, 0, $vgpr3, 0, 0, 1, implicit $m0, implicit $exec, implicit $mode + ; GFX11-NEXT: $vgpr8 = V_INTERP_P10_F16_F32_inreg_fake16 0, $vgpr4, 0, $vgpr0, 0, $vgpr4, 0, 0, 0, implicit $m0, implicit $exec, implicit $mode $vgpr1 = LDS_PARAM_LOAD 0, 0, 0, implicit $m0, implicit $exec $vgpr2 = LDS_PARAM_LOAD 0, 1, 0, implicit $m0, implicit $exec $vgpr3 = LDS_PARAM_LOAD 0, 2, 0, implicit $m0, implicit $exec $vgpr4 = LDS_PARAM_LOAD 0, 3, 0, implicit $m0, implicit $exec - $vgpr5 = V_INTERP_P10_F16_F32_inreg 0, $vgpr1, 0, $vgpr0, 0, $vgpr1, 0, 0, 2, implicit $m0, implicit $exec, implicit $mode - $vgpr6 = V_INTERP_P10_F16_F32_inreg 0, $vgpr2, 0, $vgpr0, 0, $vgpr2, 0, 0, 2, implicit $m0, implicit $exec, implicit $mode - $vgpr7 = V_INTERP_P10_F16_F32_inreg 0, $vgpr3, 0, $vgpr0, 0, $vgpr3, 0, 0, 2, implicit $m0, implicit $exec, implicit $mode - $vgpr8 = V_INTERP_P10_F16_F32_inreg 0, $vgpr4, 0, $vgpr0, 0, $vgpr4, 0, 0, 2, implicit $m0, implicit $exec, implicit $mode + $vgpr5 = V_INTERP_P10_F16_F32_inreg_fake16 0, $vgpr1, 0, $vgpr0, 0, $vgpr1, 0, 0, 2, implicit $m0, implicit $exec, implicit $mode + $vgpr6 = V_INTERP_P10_F16_F32_inreg_fake16 0, $vgpr2, 0, $vgpr0, 0, $vgpr2, 0, 0, 2, implicit $m0, implicit $exec, implicit $mode + $vgpr7 = V_INTERP_P10_F16_F32_inreg_fake16 0, $vgpr3, 0, $vgpr0, 0, $vgpr3, 0, 0, 2, implicit $m0, implicit $exec, implicit $mode + $vgpr8 = V_INTERP_P10_F16_F32_inreg_fake16 0, $vgpr4, 0, $vgpr0, 0, $vgpr4, 0, 0, 2, implicit $m0, implicit $exec, implicit $mode ... diff --git a/llvm/test/MC/AMDGPU/vinterp.s b/llvm/test/MC/AMDGPU/vinterp.s new file mode 100644 index 00000000000000..8ad947edf78969 --- /dev/null +++ b/llvm/test/MC/AMDGPU/vinterp.s @@ -0,0 +1,237 @@ +// NOTE: Assertions have been autogenerated by utils/update_mc_test_checks.py UTC_ARGS: --version 5 +// RUN: llvm-mc -triple=amdgcn -mcpu=gfx1100 -mattr=+real-true16 -show-encoding %s | FileCheck -check-prefix=GCN %s +// RUN: llvm-mc -triple=amdgcn -mcpu=gfx1200 -mattr=+real-true16 -show-encoding %s | FileCheck -check-prefix=GCN %s + +v_interp_p10_f32 v0, v1, v2, v3 +// GCN: v_interp_p10_f32 v0, v1, v2, v3 wait_exp:0 ; encoding: [0x00,0x00,0x00,0xcd,0x01,0x05,0x0e,0x04] + +v_interp_p10_f32 v1, v10, v20, v30 +// GCN: v_interp_p10_f32 v1, v10, v20, v30 wait_exp:0 ; encoding: [0x01,0x00,0x00,0xcd,0x0a,0x29,0x7a,0x04] + +v_interp_p10_f32 v2, v11, v21, v31 +// GCN: v_interp_p10_f32 v2, v11, v21, v31 wait_exp:0 ; encoding: [0x02,0x00,0x00,0xcd,0x0b,0x2b,0x7e,0x04] + +v_interp_p10_f32 v3, v12, v22, v32 +// GCN: v_interp_p10_f32 v3, v12, v22, v32 wait_exp:0 ; encoding: [0x03,0x00,0x00,0xcd,0x0c,0x2d,0x82,0x04] + +v_interp_p10_f32 v0, v1, v2, v3 clamp +// GCN: v_interp_p10_f32 v0, v1, v2, v3 clamp wait_exp:0 ; encoding: [0x00,0x80,0x00,0xcd,0x01,0x05,0x0e,0x04] + +v_interp_p10_f32 v0, -v1, v2, v3 +// GCN: v_interp_p10_f32 v0, -v1, v2, v3 wait_exp:0 ; encoding: [0x00,0x00,0x00,0xcd,0x01,0x05,0x0e,0x24] + +v_interp_p10_f32 v0, v1, -v2, v3 +// GCN: v_interp_p10_f32 v0, v1, -v2, v3 wait_exp:0 ; encoding: [0x00,0x00,0x00,0xcd,0x01,0x05,0x0e,0x44] + +v_interp_p10_f32 v0, v1, v2, -v3 +// GCN: v_interp_p10_f32 v0, v1, v2, -v3 wait_exp:0 ; encoding: [0x00,0x00,0x00,0xcd,0x01,0x05,0x0e,0x84] + +v_interp_p10_f32 v0, v1, v2, v3 wait_exp:0 +// GCN: v_interp_p10_f32 v0, v1, v2, v3 wait_exp:0 ; encoding: [0x00,0x00,0x00,0xcd,0x01,0x05,0x0e,0x04] + +v_interp_p10_f32 v0, v1, v2, v3 wait_exp:1 +// GCN: v_interp_p10_f32 v0, v1, v2, v3 wait_exp:1 ; encoding: [0x00,0x01,0x00,0xcd,0x01,0x05,0x0e,0x04] + +v_interp_p10_f32 v0, v1, v2, v3 wait_exp:7 +// GCN: v_interp_p10_f32 v0, v1, v2, v3 wait_exp:7 ; encoding: [0x00,0x07,0x00,0xcd,0x01,0x05,0x0e,0x04] + +v_interp_p10_f32 v0, v1, v2, v3 clamp wait_exp:7 +// GCN: v_interp_p10_f32 v0, v1, v2, v3 clamp wait_exp:7 ; encoding: [0x00,0x87,0x00,0xcd,0x01,0x05,0x0e,0x04] + +v_interp_p2_f32 v0, v1, v2, v3 +// GCN: v_interp_p2_f32 v0, v1, v2, v3 wait_exp:0 ; encoding: [0x00,0x00,0x01,0xcd,0x01,0x05,0x0e,0x04] + +v_interp_p2_f32 v1, v10, v20, v30 +// GCN: v_interp_p2_f32 v1, v10, v20, v30 wait_exp:0 ; encoding: [0x01,0x00,0x01,0xcd,0x0a,0x29,0x7a,0x04] + +v_interp_p2_f32 v2, v11, v21, v31 +// GCN: v_interp_p2_f32 v2, v11, v21, v31 wait_exp:0 ; encoding: [0x02,0x00,0x01,0xcd,0x0b,0x2b,0x7e,0x04] + +v_interp_p2_f32 v3, v12, v22, v32 +// GCN: v_interp_p2_f32 v3, v12, v22, v32 wait_exp:0 ; encoding: [0x03,0x00,0x01,0xcd,0x0c,0x2d,0x82,0x04] + +v_interp_p2_f32 v0, v1, v2, v3 clamp +// GCN: v_interp_p2_f32 v0, v1, v2, v3 clamp wait_exp:0 ; encoding: [0x00,0x80,0x01,0xcd,0x01,0x05,0x0e,0x04] + +v_interp_p2_f32 v0, -v1, v2, v3 +// GCN: v_interp_p2_f32 v0, -v1, v2, v3 wait_exp:0 ; encoding: [0x00,0x00,0x01,0xcd,0x01,0x05,0x0e,0x24] + +v_interp_p2_f32 v0, v1, -v2, v3 +// GCN: v_interp_p2_f32 v0, v1, -v2, v3 wait_exp:0 ; encoding: [0x00,0x00,0x01,0xcd,0x01,0x05,0x0e,0x44] + +v_interp_p2_f32 v0, v1, v2, -v3 +// GCN: v_interp_p2_f32 v0, v1, v2, -v3 wait_exp:0 ; encoding: [0x00,0x00,0x01,0xcd,0x01,0x05,0x0e,0x84] + +v_interp_p2_f32 v0, v1, v2, v3 wait_exp:0 +// GCN: v_interp_p2_f32 v0, v1, v2, v3 wait_exp:0 ; encoding: [0x00,0x00,0x01,0xcd,0x01,0x05,0x0e,0x04] + +v_interp_p2_f32 v0, v1, v2, v3 wait_exp:1 +// GCN: v_interp_p2_f32 v0, v1, v2, v3 wait_exp:1 ; encoding: [0x00,0x01,0x01,0xcd,0x01,0x05,0x0e,0x04] + +v_interp_p2_f32 v0, v1, v2, v3 wait_exp:7 +// GCN: v_interp_p2_f32 v0, v1, v2, v3 wait_exp:7 ; encoding: [0x00,0x07,0x01,0xcd,0x01,0x05,0x0e,0x04] + +v_interp_p2_f32 v0, v1, v2, v3 clamp wait_exp:7 +// GCN: v_interp_p2_f32 v0, v1, v2, v3 clamp wait_exp:7 ; encoding: [0x00,0x87,0x01,0xcd,0x01,0x05,0x0e,0x04] + +v_interp_p10_f16_f32 v0, v1.l, v2, v3.l +// GCN: v_interp_p10_f16_f32 v0, v1.l, v2, v3.l wait_exp:0 ; encoding: [0x00,0x00,0x02,0xcd,0x01,0x05,0x0e,0x04] + +v_interp_p10_f16_f32 v0, -v1.l, v2, v3.l +// GCN: v_interp_p10_f16_f32 v0, -v1.l, v2, v3.l wait_exp:0 ; encoding: [0x00,0x00,0x02,0xcd,0x01,0x05,0x0e,0x24] + +v_interp_p10_f16_f32 v0, v1.l, -v2, v3.l +// GCN: v_interp_p10_f16_f32 v0, v1.l, -v2, v3.l wait_exp:0 ; encoding: [0x00,0x00,0x02,0xcd,0x01,0x05,0x0e,0x44] + +v_interp_p10_f16_f32 v0, v1.l, v2, -v3.l +// GCN: v_interp_p10_f16_f32 v0, v1.l, v2, -v3.l wait_exp:0 ; encoding: [0x00,0x00,0x02,0xcd,0x01,0x05,0x0e,0x84] + +v_interp_p10_f16_f32 v0, v1.l, v2, v3.l clamp +// GCN: v_interp_p10_f16_f32 v0, v1.l, v2, v3.l clamp wait_exp:0 ; encoding: [0x00,0x80,0x02,0xcd,0x01,0x05,0x0e,0x04] + +v_interp_p10_f16_f32 v0, v1.l, v2, v3.l wait_exp:0 +// GCN: v_interp_p10_f16_f32 v0, v1.l, v2, v3.l wait_exp:0 ; encoding: [0x00,0x00,0x02,0xcd,0x01,0x05,0x0e,0x04] + +v_interp_p10_f16_f32 v0, v1.l, v2, v3.l wait_exp:1 +// GCN: v_interp_p10_f16_f32 v0, v1.l, v2, v3.l wait_exp:1 ; encoding: [0x00,0x01,0x02,0xcd,0x01,0x05,0x0e,0x04] + +v_interp_p10_f16_f32 v0, v1.l, v2, v3.l wait_exp:7 +// GCN: v_interp_p10_f16_f32 v0, v1.l, v2, v3.l wait_exp:7 ; encoding: [0x00,0x07,0x02,0xcd,0x01,0x05,0x0e,0x04] + +v_interp_p10_f16_f32 v0, v1.l, v2, v3.l +// GCN: v_interp_p10_f16_f32 v0, v1.l, v2, v3.l wait_exp:0 ; encoding: [0x00,0x00,0x02,0xcd,0x01,0x05,0x0e,0x04] + +v_interp_p10_f16_f32 v0, v1.h, v2, v3.l +// GCN: v_interp_p10_f16_f32 v0, v1.h, v2, v3.l wait_exp:0 ; encoding: [0x00,0x08,0x02,0xcd,0x01,0x05,0x0e,0x04] + +v_interp_p10_f16_f32 v0, v1.l, v2, v3.h +// GCN: v_interp_p10_f16_f32 v0, v1.l, v2, v3.h wait_exp:0 ; encoding: [0x00,0x20,0x02,0xcd,0x01,0x05,0x0e,0x04] + +v_interp_p10_f16_f32 v0, v1.h, v2, v3.h clamp wait_exp:5 +// GCN: v_interp_p10_f16_f32 v0, v1.h, v2, v3.h clamp wait_exp:5 ; encoding: [0x00,0xad,0x02,0xcd,0x01,0x05,0x0e,0x04] + +v_interp_p10_f16_f32 v0, -v1.h, -v2, -v3.h clamp wait_exp:5 +// GCN: v_interp_p10_f16_f32 v0, -v1.h, -v2, -v3.h clamp wait_exp:5 ; encoding: [0x00,0xad,0x02,0xcd,0x01,0x05,0x0e,0xe4] + +v_interp_p2_f16_f32 v0.l, v1.l, v2, v3 +// GCN: v_interp_p2_f16_f32 v0.l, v1.l, v2, v3 wait_exp:0 ; encoding: [0x00,0x00,0x03,0xcd,0x01,0x05,0x0e,0x04] + +v_interp_p2_f16_f32 v0.l, -v1.l, v2, v3 +// GCN: v_interp_p2_f16_f32 v0.l, -v1.l, v2, v3 wait_exp:0 ; encoding: [0x00,0x00,0x03,0xcd,0x01,0x05,0x0e,0x24] + +v_interp_p2_f16_f32 v0.l, v1.l, -v2, v3 +// GCN: v_interp_p2_f16_f32 v0.l, v1.l, -v2, v3 wait_exp:0 ; encoding: [0x00,0x00,0x03,0xcd,0x01,0x05,0x0e,0x44] + +v_interp_p2_f16_f32 v0.l, v1.l, v2, -v3 +// GCN: v_interp_p2_f16_f32 v0.l, v1.l, v2, -v3 wait_exp:0 ; encoding: [0x00,0x00,0x03,0xcd,0x01,0x05,0x0e,0x84] + +v_interp_p2_f16_f32 v0.l, v1.l, v2, v3 clamp +// GCN: v_interp_p2_f16_f32 v0.l, v1.l, v2, v3 clamp wait_exp:0 ; encoding: [0x00,0x80,0x03,0xcd,0x01,0x05,0x0e,0x04] + +v_interp_p2_f16_f32 v0.l, v1.l, v2, v3 wait_exp:0 +// GCN: v_interp_p2_f16_f32 v0.l, v1.l, v2, v3 wait_exp:0 ; encoding: [0x00,0x00,0x03,0xcd,0x01,0x05,0x0e,0x04] + +v_interp_p2_f16_f32 v0.l, v1.l, v2, v3 wait_exp:1 +// GCN: v_interp_p2_f16_f32 v0.l, v1.l, v2, v3 wait_exp:1 ; encoding: [0x00,0x01,0x03,0xcd,0x01,0x05,0x0e,0x04] + +v_interp_p2_f16_f32 v0.l, v1.l, v2, v3 wait_exp:7 +// GCN: v_interp_p2_f16_f32 v0.l, v1.l, v2, v3 wait_exp:7 ; encoding: [0x00,0x07,0x03,0xcd,0x01,0x05,0x0e,0x04] + +v_interp_p2_f16_f32 v0.l, v1.l, v2, v3 +// GCN: v_interp_p2_f16_f32 v0.l, v1.l, v2, v3 wait_exp:0 ; encoding: [0x00,0x00,0x03,0xcd,0x01,0x05,0x0e,0x04] + +v_interp_p2_f16_f32 v0.l, v1.h, v2, v3 +// GCN: v_interp_p2_f16_f32 v0.l, v1.h, v2, v3 wait_exp:0 ; encoding: [0x00,0x08,0x03,0xcd,0x01,0x05,0x0e,0x04] + +v_interp_p2_f16_f32 v0.h, v1.l, v2, v3 +// GCN: v_interp_p2_f16_f32 v0.h, v1.l, v2, v3 wait_exp:0 ; encoding: [0x00,0x40,0x03,0xcd,0x01,0x05,0x0e,0x04] + +v_interp_p2_f16_f32 v0.h, v1.h, v2, v3 wait_exp:5 +// GCN: v_interp_p2_f16_f32 v0.h, v1.h, v2, v3 wait_exp:5 ; encoding: [0x00,0x4d,0x03,0xcd,0x01,0x05,0x0e,0x04] + +v_interp_p2_f16_f32 v0.h, v1.h, v2, v3 clamp wait_exp:5 +// GCN: v_interp_p2_f16_f32 v0.h, v1.h, v2, v3 clamp wait_exp:5 ; encoding: [0x00,0xcd,0x03,0xcd,0x01,0x05,0x0e,0x04] + +v_interp_p2_f16_f32 v0.h, -v1.h, -v2, -v3 clamp wait_exp:5 +// GCN: v_interp_p2_f16_f32 v0.h, -v1.h, -v2, -v3 clamp wait_exp:5 ; encoding: [0x00,0xcd,0x03,0xcd,0x01,0x05,0x0e,0xe4] + +v_interp_p10_rtz_f16_f32 v0, v1.l, v2, v3.l +// GCN: v_interp_p10_rtz_f16_f32 v0, v1.l, v2, v3.l wait_exp:0 ; encoding: [0x00,0x00,0x04,0xcd,0x01,0x05,0x0e,0x04] + +v_interp_p10_rtz_f16_f32 v0, -v1.l, v2, v3.l +// GCN: v_interp_p10_rtz_f16_f32 v0, -v1.l, v2, v3.l wait_exp:0 ; encoding: [0x00,0x00,0x04,0xcd,0x01,0x05,0x0e,0x24] + +v_interp_p10_rtz_f16_f32 v0, v1.l, -v2, v3.l +// GCN: v_interp_p10_rtz_f16_f32 v0, v1.l, -v2, v3.l wait_exp:0 ; encoding: [0x00,0x00,0x04,0xcd,0x01,0x05,0x0e,0x44] + +v_interp_p10_rtz_f16_f32 v0, v1.l, v2, -v3.l +// GCN: v_interp_p10_rtz_f16_f32 v0, v1.l, v2, -v3.l wait_exp:0 ; encoding: [0x00,0x00,0x04,0xcd,0x01,0x05,0x0e,0x84] + +v_interp_p10_rtz_f16_f32 v0, v1.l, v2, v3.l clamp +// GCN: v_interp_p10_rtz_f16_f32 v0, v1.l, v2, v3.l clamp wait_exp:0 ; encoding: [0x00,0x80,0x04,0xcd,0x01,0x05,0x0e,0x04] + +v_interp_p10_rtz_f16_f32 v0, v1.l, v2, v3.l wait_exp:0 +// GCN: v_interp_p10_rtz_f16_f32 v0, v1.l, v2, v3.l wait_exp:0 ; encoding: [0x00,0x00,0x04,0xcd,0x01,0x05,0x0e,0x04] + +v_interp_p10_rtz_f16_f32 v0, v1.l, v2, v3.l wait_exp:1 +// GCN: v_interp_p10_rtz_f16_f32 v0, v1.l, v2, v3.l wait_exp:1 ; encoding: [0x00,0x01,0x04,0xcd,0x01,0x05,0x0e,0x04] + +v_interp_p10_rtz_f16_f32 v0, v1.l, v2, v3.l wait_exp:7 +// GCN: v_interp_p10_rtz_f16_f32 v0, v1.l, v2, v3.l wait_exp:7 ; encoding: [0x00,0x07,0x04,0xcd,0x01,0x05,0x0e,0x04] + +v_interp_p10_rtz_f16_f32 v0, v1.l, v2, v3.l +// GCN: v_interp_p10_rtz_f16_f32 v0, v1.l, v2, v3.l wait_exp:0 ; encoding: [0x00,0x00,0x04,0xcd,0x01,0x05,0x0e,0x04] + +v_interp_p10_rtz_f16_f32 v0, v1.h, v2, v3.l +// GCN: v_interp_p10_rtz_f16_f32 v0, v1.h, v2, v3.l wait_exp:0 ; encoding: [0x00,0x08,0x04,0xcd,0x01,0x05,0x0e,0x04] + +v_interp_p10_rtz_f16_f32 v0, v1.l, v2, v3.h +// GCN: v_interp_p10_rtz_f16_f32 v0, v1.l, v2, v3.h wait_exp:0 ; encoding: [0x00,0x20,0x04,0xcd,0x01,0x05,0x0e,0x04] + +v_interp_p10_rtz_f16_f32 v0, v1.h, v2, v3.h clamp wait_exp:5 +// GCN: v_interp_p10_rtz_f16_f32 v0, v1.h, v2, v3.h clamp wait_exp:5 ; encoding: [0x00,0xad,0x04,0xcd,0x01,0x05,0x0e,0x04] + +v_interp_p10_rtz_f16_f32 v0, -v1.h, -v2, -v3.h clamp wait_exp:5 +// GCN: v_interp_p10_rtz_f16_f32 v0, -v1.h, -v2, -v3.h clamp wait_exp:5 ; encoding: [0x00,0xad,0x04,0xcd,0x01,0x05,0x0e,0xe4] + +v_interp_p2_rtz_f16_f32 v0.l, v1.l, v2, v3 +// GCN: v_interp_p2_rtz_f16_f32 v0.l, v1.l, v2, v3 wait_exp:0 ; encoding: [0x00,0x00,0x05,0xcd,0x01,0x05,0x0e,0x04] + +v_interp_p2_rtz_f16_f32 v0.l, -v1.l, v2, v3 +// GCN: v_interp_p2_rtz_f16_f32 v0.l, -v1.l, v2, v3 wait_exp:0 ; encoding: [0x00,0x00,0x05,0xcd,0x01,0x05,0x0e,0x24] + +v_interp_p2_rtz_f16_f32 v0.l, v1.l, -v2, v3 +// GCN: v_interp_p2_rtz_f16_f32 v0.l, v1.l, -v2, v3 wait_exp:0 ; encoding: [0x00,0x00,0x05,0xcd,0x01,0x05,0x0e,0x44] + +v_interp_p2_rtz_f16_f32 v0.l, v1.l, v2, -v3 +// GCN: v_interp_p2_rtz_f16_f32 v0.l, v1.l, v2, -v3 wait_exp:0 ; encoding: [0x00,0x00,0x05,0xcd,0x01,0x05,0x0e,0x84] + +v_interp_p2_rtz_f16_f32 v0.l, v1.l, v2, v3 clamp +// GCN: v_interp_p2_rtz_f16_f32 v0.l, v1.l, v2, v3 clamp wait_exp:0 ; encoding: [0x00,0x80,0x05,0xcd,0x01,0x05,0x0e,0x04] + +v_interp_p2_rtz_f16_f32 v0.l, v1.l, v2, v3 wait_exp:0 +// GCN: v_interp_p2_rtz_f16_f32 v0.l, v1.l, v2, v3 wait_exp:0 ; encoding: [0x00,0x00,0x05,0xcd,0x01,0x05,0x0e,0x04] + +v_interp_p2_rtz_f16_f32 v0.l, v1.l, v2, v3 wait_exp:1 +// GCN: v_interp_p2_rtz_f16_f32 v0.l, v1.l, v2, v3 wait_exp:1 ; encoding: [0x00,0x01,0x05,0xcd,0x01,0x05,0x0e,0x04] + +v_interp_p2_rtz_f16_f32 v0.l, v1.l, v2, v3 wait_exp:7 +// GCN: v_interp_p2_rtz_f16_f32 v0.l, v1.l, v2, v3 wait_exp:7 ; encoding: [0x00,0x07,0x05,0xcd,0x01,0x05,0x0e,0x04] + +v_interp_p2_rtz_f16_f32 v0.l, v1.l, v2, v3 +// GCN: v_interp_p2_rtz_f16_f32 v0.l, v1.l, v2, v3 wait_exp:0 ; encoding: [0x00,0x00,0x05,0xcd,0x01,0x05,0x0e,0x04] + +v_interp_p2_rtz_f16_f32 v0.l, v1.h, v2, v3 +// GCN: v_interp_p2_rtz_f16_f32 v0.l, v1.h, v2, v3 wait_exp:0 ; encoding: [0x00,0x08,0x05,0xcd,0x01,0x05,0x0e,0x04] + +v_interp_p2_rtz_f16_f32 v0.h, v1.l, v2, v3 +// GCN: v_interp_p2_rtz_f16_f32 v0.h, v1.l, v2, v3 wait_exp:0 ; encoding: [0x00,0x40,0x05,0xcd,0x01,0x05,0x0e,0x04] + +v_interp_p2_rtz_f16_f32 v0.h, v1.h, v2, v3 wait_exp:5 +// GCN: v_interp_p2_rtz_f16_f32 v0.h, v1.h, v2, v3 wait_exp:5 ; encoding: [0x00,0x4d,0x05,0xcd,0x01,0x05,0x0e,0x04] + +v_interp_p2_rtz_f16_f32 v0.h, v1.h, v2, v3 clamp wait_exp:5 +// GCN: v_interp_p2_rtz_f16_f32 v0.h, v1.h, v2, v3 clamp wait_exp:5 ; encoding: [0x00,0xcd,0x05,0xcd,0x01,0x05,0x0e,0x04] + +v_interp_p2_rtz_f16_f32 v0.h, -v1.h, -v2, -v3 clamp wait_exp:5 +// GCN: v_interp_p2_rtz_f16_f32 v0.h, -v1.h, -v2, -v3 clamp wait_exp:5 ; encoding: [0x00,0xcd,0x05,0xcd,0x01,0x05,0x0e,0xe4] diff --git a/llvm/test/MC/Disassembler/AMDGPU/vinterp.txt b/llvm/test/MC/Disassembler/AMDGPU/vinterp.txt index 0e19f39764e7f8..e9396739b6afc2 100644 --- a/llvm/test/MC/Disassembler/AMDGPU/vinterp.txt +++ b/llvm/test/MC/Disassembler/AMDGPU/vinterp.txt @@ -1,8 +1,8 @@ -# NOTE: Assertions have been autogenerated by utils/update_mc_test_checks.py UTC_ARGS: --version 5 -# RUN: llvm-mc -triple=amdgcn -mcpu=gfx1100 -mattr=+real-true16 -disassemble %s | FileCheck -strict-whitespace -check-prefixes=CHECK %s -# RUN: llvm-mc -triple=amdgcn -mcpu=gfx1200 -mattr=+real-true16 -disassemble %s | FileCheck -strict-whitespace -check-prefixes=CHECK %s -# RUN: llvm-mc -triple=amdgcn -mcpu=gfx1100 -mattr=-real-true16 -disassemble %s | FileCheck -strict-whitespace -check-prefixes=CHECK %s -# RUN: llvm-mc -triple=amdgcn -mcpu=gfx1200 -mattr=-real-true16 -disassemble %s | FileCheck -strict-whitespace -check-prefixes=CHECK %s +# NOTE: Assertions have been autogenerated by utils/update_mc_test_checks.py UTC_ARGS: --unique --version 5 +# RUN: llvm-mc -triple=amdgcn -mcpu=gfx1100 -mattr=+real-true16 -disassemble %s | FileCheck -strict-whitespace -check-prefixes=CHECK,CHECK-TRUE16 %s +# RUN: llvm-mc -triple=amdgcn -mcpu=gfx1200 -mattr=+real-true16 -disassemble %s | FileCheck -strict-whitespace -check-prefixes=CHECK,CHECK-TRUE16 %s +# RUN: llvm-mc -triple=amdgcn -mcpu=gfx1100 -mattr=-real-true16 -disassemble %s | FileCheck -strict-whitespace -check-prefixes=CHECK,CHECK-FAKE16 %s +# RUN: llvm-mc -triple=amdgcn -mcpu=gfx1200 -mattr=-real-true16 -disassemble %s | FileCheck -strict-whitespace -check-prefixes=CHECK,CHECK-FAKE16 %s 0x00,0x00,0x00,0xcd,0x01,0x05,0x0e,0x04 # CHECK: v_interp_p10_f32 v0, v1, v2, v3 wait_exp:0 @@ -75,181 +75,265 @@ # CHECK: v_interp_p2_f32 v0, v1, v2, v3 clamp wait_exp:7 0x00,0x00,0x02,0xcd,0x01,0x05,0x0e,0x04 -# CHECK: v_interp_p10_f16_f32 v0, v1, v2, v3 wait_exp:0 +# CHECK-TRUE16: v_interp_p10_f16_f32 v0, v1.l, v2, v3.l wait_exp:0 +# CHECK-FAKE16: v_interp_p10_f16_f32 v0, v1, v2, v3 wait_exp:0 0x00,0x00,0x02,0xcd,0x01,0x05,0x0e,0x24 -# CHECK: v_interp_p10_f16_f32 v0, -v1, v2, v3 wait_exp:0 +# CHECK-TRUE16: v_interp_p10_f16_f32 v0, -v1.l, v2, v3.l wait_exp:0 +# CHECK-FAKE16: v_interp_p10_f16_f32 v0, -v1, v2, v3 wait_exp:0 0x00,0x00,0x02,0xcd,0x01,0x05,0x0e,0x44 -# CHECK: v_interp_p10_f16_f32 v0, v1, -v2, v3 wait_exp:0 +# CHECK-TRUE16: v_interp_p10_f16_f32 v0, v1.l, -v2, v3.l wait_exp:0 +# CHECK-FAKE16: v_interp_p10_f16_f32 v0, v1, -v2, v3 wait_exp:0 0x00,0x00,0x02,0xcd,0x01,0x05,0x0e,0x84 -# CHECK: v_interp_p10_f16_f32 v0, v1, v2, -v3 wait_exp:0 +# CHECK-TRUE16: v_interp_p10_f16_f32 v0, v1.l, v2, -v3.l wait_exp:0 +# CHECK-FAKE16: v_interp_p10_f16_f32 v0, v1, v2, -v3 wait_exp:0 0x00,0x80,0x02,0xcd,0x01,0x05,0x0e,0x04 -# CHECK: v_interp_p10_f16_f32 v0, v1, v2, v3 clamp wait_exp:0 +# CHECK-TRUE16: v_interp_p10_f16_f32 v0, v1.l, v2, v3.l clamp wait_exp:0 +# CHECK-FAKE16: v_interp_p10_f16_f32 v0, v1, v2, v3 clamp wait_exp:0 0x00,0x01,0x02,0xcd,0x01,0x05,0x0e,0x04 -# CHECK: v_interp_p10_f16_f32 v0, v1, v2, v3 wait_exp:1 +# CHECK-TRUE16: v_interp_p10_f16_f32 v0, v1.l, v2, v3.l wait_exp:1 +# CHECK-FAKE16: v_interp_p10_f16_f32 v0, v1, v2, v3 wait_exp:1 0x00,0x07,0x02,0xcd,0x01,0x05,0x0e,0x04 -# CHECK: v_interp_p10_f16_f32 v0, v1, v2, v3 wait_exp:7 +# CHECK-TRUE16: v_interp_p10_f16_f32 v0, v1.l, v2, v3.l wait_exp:7 +# CHECK-FAKE16: v_interp_p10_f16_f32 v0, v1, v2, v3 wait_exp:7 0x00,0x08,0x02,0xcd,0x01,0x05,0x0e,0x04 -# CHECK: v_interp_p10_f16_f32 v0, v1, v2, v3 op_sel:[1,0,0,0] wait_exp:0 - -0x00,0x10,0x02,0xcd,0x01,0x05,0x0e,0x04 -# CHECK: v_interp_p10_f16_f32 v0, v1, v2, v3 op_sel:[0,1,0,0] wait_exp:0 +# CHECK-TRUE16: v_interp_p10_f16_f32 v0, v1.h, v2, v3.l op_sel:[1,0,0,0] wait_exp:0 +# CHECK-FAKE16: v_interp_p10_f16_f32 v0, v1, v2, v3 op_sel:[1,0,0,0] wait_exp:0 0x00,0x20,0x02,0xcd,0x01,0x05,0x0e,0x04 -# CHECK: v_interp_p10_f16_f32 v0, v1, v2, v3 op_sel:[0,0,1,0] wait_exp:0 +# CHECK-TRUE16: v_interp_p10_f16_f32 v0, v1.l, v2, v3.h op_sel:[0,0,1,0] wait_exp:0 +# CHECK-FAKE16: v_interp_p10_f16_f32 v0, v1, v2, v3 op_sel:[0,0,1,0] wait_exp:0 + +0x00,0x28,0x02,0xcd,0x01,0x05,0x0e,0x04 +# CHECK-TRUE16: v_interp_p10_f16_f32 v0, v1.h, v2, v3.h op_sel:[1,0,1,0] wait_exp:0 +# CHECK-FAKE16: v_interp_p10_f16_f32 v0, v1, v2, v3 op_sel:[1,0,1,0] wait_exp:0 + +0x00,0x0d,0x02,0xcd,0x01,0x05,0x0e,0x04 +# CHECK-TRUE16: v_interp_p10_f16_f32 v0, v1.h, v2, v3.l op_sel:[1,0,0,0] wait_exp:5 +# CHECK-FAKE16: v_interp_p10_f16_f32 v0, v1, v2, v3 op_sel:[1,0,0,0] wait_exp:5 + +0x00,0xad,0x02,0xcd,0x01,0x05,0x0e,0x04 +# CHECK-TRUE16: v_interp_p10_f16_f32 v0, v1.h, v2, v3.h clamp op_sel:[1,0,1,0] wait_exp:5 +# CHECK-FAKE16: v_interp_p10_f16_f32 v0, v1, v2, v3 clamp op_sel:[1,0,1,0] wait_exp:5 + +0x00,0xad,0x02,0xcd,0x01,0x05,0x0e,0xe4 +# CHECK-TRUE16: v_interp_p10_f16_f32 v0, -v1.h, -v2, -v3.h clamp op_sel:[1,0,1,0] wait_exp:5 +# CHECK-FAKE16: v_interp_p10_f16_f32 v0, -v1, -v2, -v3 clamp op_sel:[1,0,1,0] wait_exp:5 + +0x00,0x10,0x02,0xcd,0x01,0x05,0x0e,0x04 +# CHECK-TRUE16: v_interp_p10_f16_f32 v0, v1.l, v2, v3.l op_sel:[0,1,0,0] wait_exp:0 +# CHECK-FAKE16: v_interp_p10_f16_f32 v0, v1, v2, v3 op_sel:[0,1,0,0] wait_exp:0 0x00,0x40,0x02,0xcd,0x01,0x05,0x0e,0x04 -# CHECK: v_interp_p10_f16_f32 v0, v1, v2, v3 op_sel:[0,0,0,1] wait_exp:0 +# CHECK-TRUE16: v_interp_p10_f16_f32 v0, v1.l, v2, v3.l op_sel:[0,0,0,1] wait_exp:0 +# CHECK-FAKE16: v_interp_p10_f16_f32 v0, v1, v2, v3 op_sel:[0,0,0,1] wait_exp:0 0x00,0x78,0x02,0xcd,0x01,0x05,0x0e,0x04 -# CHECK: v_interp_p10_f16_f32 v0, v1, v2, v3 op_sel:[1,1,1,1] wait_exp:0 +# CHECK-TRUE16: v_interp_p10_f16_f32 v0, v1.h, v2, v3.h op_sel:[1,1,1,1] wait_exp:0 +# CHECK-FAKE16: v_interp_p10_f16_f32 v0, v1, v2, v3 op_sel:[1,1,1,1] wait_exp:0 0x00,0x4d,0x02,0xcd,0x01,0x05,0x0e,0x04 -# CHECK: v_interp_p10_f16_f32 v0, v1, v2, v3 op_sel:[1,0,0,1] wait_exp:5 +# CHECK-TRUE16: v_interp_p10_f16_f32 v0, v1.h, v2, v3.l op_sel:[1,0,0,1] wait_exp:5 +# CHECK-FAKE16: v_interp_p10_f16_f32 v0, v1, v2, v3 op_sel:[1,0,0,1] wait_exp:5 0x00,0xcd,0x02,0xcd,0x01,0x05,0x0e,0x04 -# CHECK: v_interp_p10_f16_f32 v0, v1, v2, v3 clamp op_sel:[1,0,0,1] wait_exp:5 +# CHECK-TRUE16: v_interp_p10_f16_f32 v0, v1.h, v2, v3.l clamp op_sel:[1,0,0,1] wait_exp:5 +# CHECK-FAKE16: v_interp_p10_f16_f32 v0, v1, v2, v3 clamp op_sel:[1,0,0,1] wait_exp:5 0x00,0xcd,0x02,0xcd,0x01,0x05,0x0e,0xe4 -# CHECK: v_interp_p10_f16_f32 v0, -v1, -v2, -v3 clamp op_sel:[1,0,0,1] wait_exp:5 +# CHECK-TRUE16: v_interp_p10_f16_f32 v0, -v1.h, -v2, -v3.l clamp op_sel:[1,0,0,1] wait_exp:5 +# CHECK-FAKE16: v_interp_p10_f16_f32 v0, -v1, -v2, -v3 clamp op_sel:[1,0,0,1] wait_exp:5 0x00,0x00,0x03,0xcd,0x01,0x05,0x0e,0x04 -# CHECK: v_interp_p2_f16_f32 v0, v1, v2, v3 wait_exp:0 +# CHECK-TRUE16: v_interp_p2_f16_f32 v0.l, v1.l, v2, v3 wait_exp:0 +# CHECK-FAKE16: v_interp_p2_f16_f32 v0, v1, v2, v3 wait_exp:0 0x00,0x00,0x03,0xcd,0x01,0x05,0x0e,0x24 -# CHECK: v_interp_p2_f16_f32 v0, -v1, v2, v3 wait_exp:0 +# CHECK-TRUE16: v_interp_p2_f16_f32 v0.l, -v1.l, v2, v3 wait_exp:0 +# CHECK-FAKE16: v_interp_p2_f16_f32 v0, -v1, v2, v3 wait_exp:0 0x00,0x00,0x03,0xcd,0x01,0x05,0x0e,0x44 -# CHECK: v_interp_p2_f16_f32 v0, v1, -v2, v3 wait_exp:0 +# CHECK-TRUE16: v_interp_p2_f16_f32 v0.l, v1.l, -v2, v3 wait_exp:0 +# CHECK-FAKE16: v_interp_p2_f16_f32 v0, v1, -v2, v3 wait_exp:0 0x00,0x00,0x03,0xcd,0x01,0x05,0x0e,0x84 -# CHECK: v_interp_p2_f16_f32 v0, v1, v2, -v3 wait_exp:0 +# CHECK-TRUE16: v_interp_p2_f16_f32 v0.l, v1.l, v2, -v3 wait_exp:0 +# CHECK-FAKE16: v_interp_p2_f16_f32 v0, v1, v2, -v3 wait_exp:0 0x00,0x80,0x03,0xcd,0x01,0x05,0x0e,0x04 -# CHECK: v_interp_p2_f16_f32 v0, v1, v2, v3 clamp wait_exp:0 +# CHECK-TRUE16: v_interp_p2_f16_f32 v0.l, v1.l, v2, v3 clamp wait_exp:0 +# CHECK-FAKE16: v_interp_p2_f16_f32 v0, v1, v2, v3 clamp wait_exp:0 0x00,0x01,0x03,0xcd,0x01,0x05,0x0e,0x04 -# CHECK: v_interp_p2_f16_f32 v0, v1, v2, v3 wait_exp:1 +# CHECK-TRUE16: v_interp_p2_f16_f32 v0.l, v1.l, v2, v3 wait_exp:1 +# CHECK-FAKE16: v_interp_p2_f16_f32 v0, v1, v2, v3 wait_exp:1 0x00,0x07,0x03,0xcd,0x01,0x05,0x0e,0x04 -# CHECK: v_interp_p2_f16_f32 v0, v1, v2, v3 wait_exp:7 +# CHECK-TRUE16: v_interp_p2_f16_f32 v0.l, v1.l, v2, v3 wait_exp:7 +# CHECK-FAKE16: v_interp_p2_f16_f32 v0, v1, v2, v3 wait_exp:7 0x00,0x08,0x03,0xcd,0x01,0x05,0x0e,0x04 -# CHECK: v_interp_p2_f16_f32 v0, v1, v2, v3 op_sel:[1,0,0,0] wait_exp:0 - -0x00,0x10,0x03,0xcd,0x01,0x05,0x0e,0x04 -# CHECK: v_interp_p2_f16_f32 v0, v1, v2, v3 op_sel:[0,1,0,0] wait_exp:0 - -0x00,0x20,0x03,0xcd,0x01,0x05,0x0e,0x04 -# CHECK: v_interp_p2_f16_f32 v0, v1, v2, v3 op_sel:[0,0,1,0] wait_exp:0 +# CHECK-TRUE16: v_interp_p2_f16_f32 v0.l, v1.h, v2, v3 op_sel:[1,0,0,0] wait_exp:0 +# CHECK-FAKE16: v_interp_p2_f16_f32 v0, v1, v2, v3 op_sel:[1,0,0,0] wait_exp:0 0x00,0x40,0x03,0xcd,0x01,0x05,0x0e,0x04 -# CHECK: v_interp_p2_f16_f32 v0, v1, v2, v3 op_sel:[0,0,0,1] wait_exp:0 - -0x00,0x78,0x03,0xcd,0x01,0x05,0x0e,0x04 -# CHECK: v_interp_p2_f16_f32 v0, v1, v2, v3 op_sel:[1,1,1,1] wait_exp:0 +# CHECK-TRUE16: v_interp_p2_f16_f32 v0.h, v1.l, v2, v3 op_sel:[0,0,0,1] wait_exp:0 +# CHECK-FAKE16: v_interp_p2_f16_f32 v0, v1, v2, v3 op_sel:[0,0,0,1] wait_exp:0 0x00,0x4d,0x03,0xcd,0x01,0x05,0x0e,0x04 -# CHECK: v_interp_p2_f16_f32 v0, v1, v2, v3 op_sel:[1,0,0,1] wait_exp:5 +# CHECK-TRUE16: v_interp_p2_f16_f32 v0.h, v1.h, v2, v3 op_sel:[1,0,0,1] wait_exp:5 +# CHECK-FAKE16: v_interp_p2_f16_f32 v0, v1, v2, v3 op_sel:[1,0,0,1] wait_exp:5 0x00,0xcd,0x03,0xcd,0x01,0x05,0x0e,0x04 -# CHECK: v_interp_p2_f16_f32 v0, v1, v2, v3 clamp op_sel:[1,0,0,1] wait_exp:5 +# CHECK-TRUE16: v_interp_p2_f16_f32 v0.h, v1.h, v2, v3 clamp op_sel:[1,0,0,1] wait_exp:5 +# CHECK-FAKE16: v_interp_p2_f16_f32 v0, v1, v2, v3 clamp op_sel:[1,0,0,1] wait_exp:5 0x00,0xcd,0x03,0xcd,0x01,0x05,0x0e,0xe4 -# CHECK: v_interp_p2_f16_f32 v0, -v1, -v2, -v3 clamp op_sel:[1,0,0,1] wait_exp:5 +# CHECK-TRUE16: v_interp_p2_f16_f32 v0.h, -v1.h, -v2, -v3 clamp op_sel:[1,0,0,1] wait_exp:5 +# CHECK-FAKE16: v_interp_p2_f16_f32 v0, -v1, -v2, -v3 clamp op_sel:[1,0,0,1] wait_exp:5 + +0x00,0x10,0x03,0xcd,0x01,0x05,0x0e,0x04 +# CHECK-TRUE16: v_interp_p2_f16_f32 v0.l, v1.l, v2, v3 op_sel:[0,1,0,0] wait_exp:0 +# CHECK-FAKE16: v_interp_p2_f16_f32 v0, v1, v2, v3 op_sel:[0,1,0,0] wait_exp:0 + +0x00,0x20,0x03,0xcd,0x01,0x05,0x0e,0x04 +# CHECK-TRUE16: v_interp_p2_f16_f32 v0.l, v1.l, v2, v3 op_sel:[0,0,1,0] wait_exp:0 +# CHECK-FAKE16: v_interp_p2_f16_f32 v0, v1, v2, v3 op_sel:[0,0,1,0] wait_exp:0 + +0x00,0x78,0x03,0xcd,0x01,0x05,0x0e,0x04 +# CHECK-TRUE16: v_interp_p2_f16_f32 v0.h, v1.h, v2, v3 op_sel:[1,1,1,1] wait_exp:0 +# CHECK-FAKE16: v_interp_p2_f16_f32 v0, v1, v2, v3 op_sel:[1,1,1,1] wait_exp:0 0x00,0x00,0x04,0xcd,0x01,0x05,0x0e,0x04 -# CHECK: v_interp_p10_rtz_f16_f32 v0, v1, v2, v3 wait_exp:0 +# CHECK-TRUE16: v_interp_p10_rtz_f16_f32 v0, v1.l, v2, v3.l wait_exp:0 +# CHECK-FAKE16: v_interp_p10_rtz_f16_f32 v0, v1, v2, v3 wait_exp:0 0x00,0x00,0x04,0xcd,0x01,0x05,0x0e,0x24 -# CHECK: v_interp_p10_rtz_f16_f32 v0, -v1, v2, v3 wait_exp:0 +# CHECK-TRUE16: v_interp_p10_rtz_f16_f32 v0, -v1.l, v2, v3.l wait_exp:0 +# CHECK-FAKE16: v_interp_p10_rtz_f16_f32 v0, -v1, v2, v3 wait_exp:0 0x00,0x00,0x04,0xcd,0x01,0x05,0x0e,0x44 -# CHECK: v_interp_p10_rtz_f16_f32 v0, v1, -v2, v3 wait_exp:0 +# CHECK-TRUE16: v_interp_p10_rtz_f16_f32 v0, v1.l, -v2, v3.l wait_exp:0 +# CHECK-FAKE16: v_interp_p10_rtz_f16_f32 v0, v1, -v2, v3 wait_exp:0 0x00,0x00,0x04,0xcd,0x01,0x05,0x0e,0x84 -# CHECK: v_interp_p10_rtz_f16_f32 v0, v1, v2, -v3 wait_exp:0 +# CHECK-TRUE16: v_interp_p10_rtz_f16_f32 v0, v1.l, v2, -v3.l wait_exp:0 +# CHECK-FAKE16: v_interp_p10_rtz_f16_f32 v0, v1, v2, -v3 wait_exp:0 0x00,0x80,0x04,0xcd,0x01,0x05,0x0e,0x04 -# CHECK: v_interp_p10_rtz_f16_f32 v0, v1, v2, v3 clamp wait_exp:0 +# CHECK-TRUE16: v_interp_p10_rtz_f16_f32 v0, v1.l, v2, v3.l clamp wait_exp:0 +# CHECK-FAKE16: v_interp_p10_rtz_f16_f32 v0, v1, v2, v3 clamp wait_exp:0 0x00,0x01,0x04,0xcd,0x01,0x05,0x0e,0x04 -# CHECK: v_interp_p10_rtz_f16_f32 v0, v1, v2, v3 wait_exp:1 +# CHECK-TRUE16: v_interp_p10_rtz_f16_f32 v0, v1.l, v2, v3.l wait_exp:1 +# CHECK-FAKE16: v_interp_p10_rtz_f16_f32 v0, v1, v2, v3 wait_exp:1 0x00,0x07,0x04,0xcd,0x01,0x05,0x0e,0x04 -# CHECK: v_interp_p10_rtz_f16_f32 v0, v1, v2, v3 wait_exp:7 +# CHECK-TRUE16: v_interp_p10_rtz_f16_f32 v0, v1.l, v2, v3.l wait_exp:7 +# CHECK-FAKE16: v_interp_p10_rtz_f16_f32 v0, v1, v2, v3 wait_exp:7 0x00,0x08,0x04,0xcd,0x01,0x05,0x0e,0x04 -# CHECK: v_interp_p10_rtz_f16_f32 v0, v1, v2, v3 op_sel:[1,0,0,0] wait_exp:0 - -0x00,0x10,0x04,0xcd,0x01,0x05,0x0e,0x04 -# CHECK: v_interp_p10_rtz_f16_f32 v0, v1, v2, v3 op_sel:[0,1,0,0] wait_exp:0 +# CHECK-TRUE16: v_interp_p10_rtz_f16_f32 v0, v1.h, v2, v3.l op_sel:[1,0,0,0] wait_exp:0 +# CHECK-FAKE16: v_interp_p10_rtz_f16_f32 v0, v1, v2, v3 op_sel:[1,0,0,0] wait_exp:0 0x00,0x20,0x04,0xcd,0x01,0x05,0x0e,0x04 -# CHECK: v_interp_p10_rtz_f16_f32 v0, v1, v2, v3 op_sel:[0,0,1,0] wait_exp:0 +# CHECK-TRUE16: v_interp_p10_rtz_f16_f32 v0, v1.l, v2, v3.h op_sel:[0,0,1,0] wait_exp:0 +# CHECK-FAKE16: v_interp_p10_rtz_f16_f32 v0, v1, v2, v3 op_sel:[0,0,1,0] wait_exp:0 + +0x00,0xad,0x04,0xcd,0x01,0x05,0x0e,0x04 +# CHECK-TRUE16: v_interp_p10_rtz_f16_f32 v0, v1.h, v2, v3.h clamp op_sel:[1,0,1,0] wait_exp:5 +# CHECK-FAKE16: v_interp_p10_rtz_f16_f32 v0, v1, v2, v3 clamp op_sel:[1,0,1,0] wait_exp:5 + +0x00,0xad,0x04,0xcd,0x01,0x05,0x0e,0xe4 +# CHECK-TRUE16: v_interp_p10_rtz_f16_f32 v0, -v1.h, -v2, -v3.h clamp op_sel:[1,0,1,0] wait_exp:5 +# CHECK-FAKE16: v_interp_p10_rtz_f16_f32 v0, -v1, -v2, -v3 clamp op_sel:[1,0,1,0] wait_exp:5 + +0x00,0x10,0x04,0xcd,0x01,0x05,0x0e,0x04 +# CHECK-TRUE16: v_interp_p10_rtz_f16_f32 v0, v1.l, v2, v3.l op_sel:[0,1,0,0] wait_exp:0 +# CHECK-FAKE16: v_interp_p10_rtz_f16_f32 v0, v1, v2, v3 op_sel:[0,1,0,0] wait_exp:0 0x00,0x40,0x04,0xcd,0x01,0x05,0x0e,0x04 -# CHECK: v_interp_p10_rtz_f16_f32 v0, v1, v2, v3 op_sel:[0,0,0,1] wait_exp:0 +# CHECK-TRUE16: v_interp_p10_rtz_f16_f32 v0, v1.l, v2, v3.l op_sel:[0,0,0,1] wait_exp:0 +# CHECK-FAKE16: v_interp_p10_rtz_f16_f32 v0, v1, v2, v3 op_sel:[0,0,0,1] wait_exp:0 0x00,0x78,0x04,0xcd,0x01,0x05,0x0e,0x04 -# CHECK: v_interp_p10_rtz_f16_f32 v0, v1, v2, v3 op_sel:[1,1,1,1] wait_exp:0 +# CHECK-TRUE16: v_interp_p10_rtz_f16_f32 v0, v1.h, v2, v3.h op_sel:[1,1,1,1] wait_exp:0 +# CHECK-FAKE16: v_interp_p10_rtz_f16_f32 v0, v1, v2, v3 op_sel:[1,1,1,1] wait_exp:0 0x00,0x4d,0x04,0xcd,0x01,0x05,0x0e,0x04 -# CHECK: v_interp_p10_rtz_f16_f32 v0, v1, v2, v3 op_sel:[1,0,0,1] wait_exp:5 +# CHECK-TRUE16: v_interp_p10_rtz_f16_f32 v0, v1.h, v2, v3.l op_sel:[1,0,0,1] wait_exp:5 +# CHECK-FAKE16: v_interp_p10_rtz_f16_f32 v0, v1, v2, v3 op_sel:[1,0,0,1] wait_exp:5 0x00,0xcd,0x04,0xcd,0x01,0x05,0x0e,0x04 -# CHECK: v_interp_p10_rtz_f16_f32 v0, v1, v2, v3 clamp op_sel:[1,0,0,1] wait_exp:5 +# CHECK-TRUE16: v_interp_p10_rtz_f16_f32 v0, v1.h, v2, v3.l clamp op_sel:[1,0,0,1] wait_exp:5 +# CHECK-FAKE16: v_interp_p10_rtz_f16_f32 v0, v1, v2, v3 clamp op_sel:[1,0,0,1] wait_exp:5 0x00,0xcd,0x04,0xcd,0x01,0x05,0x0e,0xe4 -# CHECK: v_interp_p10_rtz_f16_f32 v0, -v1, -v2, -v3 clamp op_sel:[1,0,0,1] wait_exp:5 +# CHECK-TRUE16: v_interp_p10_rtz_f16_f32 v0, -v1.h, -v2, -v3.l clamp op_sel:[1,0,0,1] wait_exp:5 +# CHECK-FAKE16: v_interp_p10_rtz_f16_f32 v0, -v1, -v2, -v3 clamp op_sel:[1,0,0,1] wait_exp:5 0x00,0x00,0x05,0xcd,0x01,0x05,0x0e,0x04 -# CHECK: v_interp_p2_rtz_f16_f32 v0, v1, v2, v3 wait_exp:0 +# CHECK-TRUE16: v_interp_p2_rtz_f16_f32 v0.l, v1.l, v2, v3 wait_exp:0 +# CHECK-FAKE16: v_interp_p2_rtz_f16_f32 v0, v1, v2, v3 wait_exp:0 0x00,0x00,0x05,0xcd,0x01,0x05,0x0e,0x24 -# CHECK: v_interp_p2_rtz_f16_f32 v0, -v1, v2, v3 wait_exp:0 +# CHECK-TRUE16: v_interp_p2_rtz_f16_f32 v0.l, -v1.l, v2, v3 wait_exp:0 +# CHECK-FAKE16: v_interp_p2_rtz_f16_f32 v0, -v1, v2, v3 wait_exp:0 0x00,0x00,0x05,0xcd,0x01,0x05,0x0e,0x44 -# CHECK: v_interp_p2_rtz_f16_f32 v0, v1, -v2, v3 wait_exp:0 +# CHECK-TRUE16: v_interp_p2_rtz_f16_f32 v0.l, v1.l, -v2, v3 wait_exp:0 +# CHECK-FAKE16: v_interp_p2_rtz_f16_f32 v0, v1, -v2, v3 wait_exp:0 0x00,0x00,0x05,0xcd,0x01,0x05,0x0e,0x84 -# CHECK: v_interp_p2_rtz_f16_f32 v0, v1, v2, -v3 wait_exp:0 +# CHECK-TRUE16: v_interp_p2_rtz_f16_f32 v0.l, v1.l, v2, -v3 wait_exp:0 +# CHECK-FAKE16: v_interp_p2_rtz_f16_f32 v0, v1, v2, -v3 wait_exp:0 0x00,0x80,0x05,0xcd,0x01,0x05,0x0e,0x04 -# CHECK: v_interp_p2_rtz_f16_f32 v0, v1, v2, v3 clamp wait_exp:0 +# CHECK-TRUE16: v_interp_p2_rtz_f16_f32 v0.l, v1.l, v2, v3 clamp wait_exp:0 +# CHECK-FAKE16: v_interp_p2_rtz_f16_f32 v0, v1, v2, v3 clamp wait_exp:0 0x00,0x01,0x05,0xcd,0x01,0x05,0x0e,0x04 -# CHECK: v_interp_p2_rtz_f16_f32 v0, v1, v2, v3 wait_exp:1 +# CHECK-TRUE16: v_interp_p2_rtz_f16_f32 v0.l, v1.l, v2, v3 wait_exp:1 +# CHECK-FAKE16: v_interp_p2_rtz_f16_f32 v0, v1, v2, v3 wait_exp:1 0x00,0x07,0x05,0xcd,0x01,0x05,0x0e,0x04 -# CHECK: v_interp_p2_rtz_f16_f32 v0, v1, v2, v3 wait_exp:7 +# CHECK-TRUE16: v_interp_p2_rtz_f16_f32 v0.l, v1.l, v2, v3 wait_exp:7 +# CHECK-FAKE16: v_interp_p2_rtz_f16_f32 v0, v1, v2, v3 wait_exp:7 0x00,0x08,0x05,0xcd,0x01,0x05,0x0e,0x04 -# CHECK: v_interp_p2_rtz_f16_f32 v0, v1, v2, v3 op_sel:[1,0,0,0] wait_exp:0 - -0x00,0x10,0x05,0xcd,0x01,0x05,0x0e,0x04 -# CHECK: v_interp_p2_rtz_f16_f32 v0, v1, v2, v3 op_sel:[0,1,0,0] wait_exp:0 - -0x00,0x20,0x05,0xcd,0x01,0x05,0x0e,0x04 -# CHECK: v_interp_p2_rtz_f16_f32 v0, v1, v2, v3 op_sel:[0,0,1,0] wait_exp:0 +# CHECK-TRUE16: v_interp_p2_rtz_f16_f32 v0.l, v1.h, v2, v3 op_sel:[1,0,0,0] wait_exp:0 +# CHECK-FAKE16: v_interp_p2_rtz_f16_f32 v0, v1, v2, v3 op_sel:[1,0,0,0] wait_exp:0 0x00,0x40,0x05,0xcd,0x01,0x05,0x0e,0x04 -# CHECK: v_interp_p2_rtz_f16_f32 v0, v1, v2, v3 op_sel:[0,0,0,1] wait_exp:0 - -0x00,0x78,0x05,0xcd,0x01,0x05,0x0e,0x04 -# CHECK: v_interp_p2_rtz_f16_f32 v0, v1, v2, v3 op_sel:[1,1,1,1] wait_exp:0 +# CHECK-TRUE16: v_interp_p2_rtz_f16_f32 v0.h, v1.l, v2, v3 op_sel:[0,0,0,1] wait_exp:0 +# CHECK-FAKE16: v_interp_p2_rtz_f16_f32 v0, v1, v2, v3 op_sel:[0,0,0,1] wait_exp:0 0x00,0x4d,0x05,0xcd,0x01,0x05,0x0e,0x04 -# CHECK: v_interp_p2_rtz_f16_f32 v0, v1, v2, v3 op_sel:[1,0,0,1] wait_exp:5 +# CHECK-TRUE16: v_interp_p2_rtz_f16_f32 v0.h, v1.h, v2, v3 op_sel:[1,0,0,1] wait_exp:5 +# CHECK-FAKE16: v_interp_p2_rtz_f16_f32 v0, v1, v2, v3 op_sel:[1,0,0,1] wait_exp:5 0x00,0xcd,0x05,0xcd,0x01,0x05,0x0e,0x04 -# CHECK: v_interp_p2_rtz_f16_f32 v0, v1, v2, v3 clamp op_sel:[1,0,0,1] wait_exp:5 +# CHECK-TRUE16: v_interp_p2_rtz_f16_f32 v0.h, v1.h, v2, v3 clamp op_sel:[1,0,0,1] wait_exp:5 +# CHECK-FAKE16: v_interp_p2_rtz_f16_f32 v0, v1, v2, v3 clamp op_sel:[1,0,0,1] wait_exp:5 0x00,0xcd,0x05,0xcd,0x01,0x05,0x0e,0xe4 -# CHECK: v_interp_p2_rtz_f16_f32 v0, -v1, -v2, -v3 clamp op_sel:[1,0,0,1] wait_exp:5 +# CHECK-TRUE16: v_interp_p2_rtz_f16_f32 v0.h, -v1.h, -v2, -v3 clamp op_sel:[1,0,0,1] wait_exp:5 +# CHECK-FAKE16: v_interp_p2_rtz_f16_f32 v0, -v1, -v2, -v3 clamp op_sel:[1,0,0,1] wait_exp:5 + +0x00,0x10,0x05,0xcd,0x01,0x05,0x0e,0x04 +# CHECK-TRUE16: v_interp_p2_rtz_f16_f32 v0.l, v1.l, v2, v3 op_sel:[0,1,0,0] wait_exp:0 +# CHECK-FAKE16: v_interp_p2_rtz_f16_f32 v0, v1, v2, v3 op_sel:[0,1,0,0] wait_exp:0 + +0x00,0x20,0x05,0xcd,0x01,0x05,0x0e,0x04 +# CHECK-TRUE16: v_interp_p2_rtz_f16_f32 v0.l, v1.l, v2, v3 op_sel:[0,0,1,0] wait_exp:0 +# CHECK-FAKE16: v_interp_p2_rtz_f16_f32 v0, v1, v2, v3 op_sel:[0,0,1,0] wait_exp:0 + +0x00,0x78,0x05,0xcd,0x01,0x05,0x0e,0x04 +# CHECK-TRUE16: v_interp_p2_rtz_f16_f32 v0.h, v1.h, v2, v3 op_sel:[1,1,1,1] wait_exp:0 +# CHECK-FAKE16: v_interp_p2_rtz_f16_f32 v0, v1, v2, v3 op_sel:[1,1,1,1] wait_exp:0