diff options
Diffstat (limited to 'llvm/lib/Target/AMDGPU/VIInstrFormats.td')
-rw-r--r-- | llvm/lib/Target/AMDGPU/VIInstrFormats.td | 45 |
1 files changed, 45 insertions, 0 deletions
diff --git a/llvm/lib/Target/AMDGPU/VIInstrFormats.td b/llvm/lib/Target/AMDGPU/VIInstrFormats.td index d8738f99263..7a476bc87ff 100644 --- a/llvm/lib/Target/AMDGPU/VIInstrFormats.td +++ b/llvm/lib/Target/AMDGPU/VIInstrFormats.td @@ -157,6 +157,51 @@ class VOP3be_vi <bits<10> op> : Enc64 { let Inst{63} = src2_modifiers{0}; } +class VOP_DPP <dag outs, dag ins, string asm, list<dag> pattern> : + VOPAnyCommon <outs, ins, asm, pattern> { + let Size = 8; +} + +class VOP_DPPe : Enc64 { + bits<2> src0_modifiers; + bits<8> src0; + bits<2> src1_modifiers; + bits<9> dpp_ctrl; + bits<1> bound_ctrl; + bits<4> bank_mask; + bits<4> row_mask; + + let Inst{39-32} = src0; + let Inst{48-40} = dpp_ctrl; + let Inst{51} = bound_ctrl; + let Inst{52} = src0_modifiers{0}; // src0_neg + let Inst{53} = src0_modifiers{1}; // src0_abs + let Inst{54} = src1_modifiers{0}; // src1_neg + let Inst{55} = src1_modifiers{1}; // src1_abs + let Inst{59-56} = bank_mask; + let Inst{63-60} = row_mask; +} + +class VOP1_DPPe <bits<8> op> : VOP_DPPe { + bits<8> dst; + + let Inst{8-0} = 0xfa; // dpp + let Inst{16-9} = op; + let Inst{24-17} = dst; + let Inst{31-25} = 0x3f; //encoding +} + +class VOP2_DPPe <bits<6> op> : Enc32 { + bits<8> dst; + bits<8> src1; + + let Inst{8-0} = 0xfa; //dpp + let Inst{16-9} = src1; + let Inst{24-17} = dst; + let Inst{30-25} = op; + let Inst{31} = 0x0; //encoding +} + class EXPe_vi : EXPe { let Inst{31-26} = 0x31; //encoding } |