Index: lib/Target/AMDGPU/VOP2Instructions.td =================================================================== --- lib/Target/AMDGPU/VOP2Instructions.td +++ lib/Target/AMDGPU/VOP2Instructions.td @@ -658,6 +658,11 @@ defm V_DOT2C_F32_F16 : VOP2Inst_e32<"v_dot2c_f32_f16", VOP_DOT_ACC_F32_V2F16>; let SubtargetPredicate = HasDot6Insts in defm V_DOT4C_I32_I8 : VOP2Inst_e32<"v_dot4c_i32_i8", VOP_DOT_ACC_I32_I32>; + + let SubtargetPredicate = HasDot4Insts in + defm V_DOT2C_I32_I16 : VOP2Inst_e32<"v_dot2c_i32_i16", VOP_DOT_ACC_I32_I32>; + let SubtargetPredicate = HasDot3Insts in + defm V_DOT8C_I32_I4 : VOP2Inst_e32<"v_dot8c_i32_i4", VOP_DOT_ACC_I32_I32>; } let AddedComplexity = 30 in { @@ -673,6 +678,18 @@ > { let SubtargetPredicate = HasDot6Insts; } + def : GCNPat< + (i32 (int_amdgcn_sdot2 v2i16:$src0, v2i16:$src1, i32:$src2, (i1 DSTCLAMP.NONE))), + (i32 (V_DOT2C_I32_I16_e32 $src0, $src1, $src2)) + > { + let SubtargetPredicate = HasDot4Insts; + } + def : GCNPat< + (i32 (int_amdgcn_sdot8 i32:$src0, i32:$src1, i32:$src2, (i1 DSTCLAMP.NONE))), + (i32 (V_DOT8C_I32_I4_e32 $src0, $src1, $src2)) + > { + let SubtargetPredicate = HasDot3Insts; + } } // End AddedComplexity = 30 let SubtargetPredicate = isGFX10Plus in { @@ -1536,21 +1553,34 @@ } // End SubtargetPredicate = HasDLInsts +multiclass VOP2_Real_DOT_ACC_gfx9 op> : VOP2_Real_e32_vi { + def _dpp : VOP2_DPP(NAME#"_e32")>; +} + multiclass VOP2_Real_DOT_ACC_gfx10 op> : VOP2_Real_e32_gfx10, VOP2_Real_dpp_gfx10, VOP2_Real_dpp8_gfx10; let SubtargetPredicate = HasDot5Insts in { + defm V_DOT2C_F32_F16 : VOP2_Real_DOT_ACC_gfx9<0x37>; // NB: Opcode conflicts with V_DOT8C_I32_I4 // This opcode exists in gfx 10.1* only defm V_DOT2C_F32_F16 : VOP2_Real_DOT_ACC_gfx10<0x02>; } let SubtargetPredicate = HasDot6Insts in { + defm V_DOT4C_I32_I8 : VOP2_Real_DOT_ACC_gfx9<0x39>; defm V_DOT4C_I32_I8 : VOP2_Real_DOT_ACC_gfx10<0x0d>; } +let SubtargetPredicate = HasDot4Insts in { + defm V_DOT2C_I32_I16 : VOP2_Real_DOT_ACC_gfx9<0x38>; +} +let SubtargetPredicate = HasDot3Insts in { + defm V_DOT8C_I32_I4 : VOP2_Real_DOT_ACC_gfx9<0x3a>; +} + let SubtargetPredicate = HasPkFmacF16Inst in { defm V_PK_FMAC_F16 : VOP2_Real_e32_vi<0x3c>; } // End SubtargetPredicate = HasPkFmacF16Inst Index: test/CodeGen/AMDGPU/llvm.amdgcn.sdot2.ll =================================================================== --- test/CodeGen/AMDGPU/llvm.amdgcn.sdot2.ll +++ test/CodeGen/AMDGPU/llvm.amdgcn.sdot2.ll @@ -1,4 +1,5 @@ ; RUN: llc -march=amdgcn -mcpu=gfx906 -verify-machineinstrs < %s | FileCheck %s --check-prefixes=GCN,GFX906 +; RUN: llc -march=amdgcn -mcpu=gfx908 -verify-machineinstrs < %s | FileCheck %s --check-prefixes=GCN,GFX908 ; RUN: llc -march=amdgcn -mcpu=gfx1011 -verify-machineinstrs < %s | FileCheck %s --check-prefixes=GCN,GFX10 ; RUN: llc -march=amdgcn -mcpu=gfx1012 -verify-machineinstrs < %s | FileCheck %s --check-prefixes=GCN,GFX10 @@ -6,6 +7,7 @@ ; GCN-LABEL: {{^}}test_llvm_amdgcn_sdot2_clamp ; GFX906: v_dot2_i32_i16 v{{[0-9]+}}, s{{[0-9]+}}, v{{[0-9]+}}, v{{[0-9]+}} clamp{{$}} +; GFX908: v_dot2_i32_i16 v{{[0-9]+}}, s{{[0-9]+}}, v{{[0-9]+}}, v{{[0-9]+}} clamp{{$}} ; GFX10: v_dot2_i32_i16 v{{[0-9]+}}, s{{[0-9]+}}, s{{[0-9]+}}, v{{[0-9]+}} clamp{{$}} define amdgpu_kernel void @test_llvm_amdgcn_sdot2_clamp( i32 addrspace(1)* %r, @@ -23,6 +25,7 @@ ; GCN-LABEL: {{^}}test_llvm_amdgcn_sdot2_no_clamp ; GFX906: v_dot2_i32_i16 v{{[0-9]+}}, s{{[0-9]+}}, v{{[0-9]+}}, v{{[0-9]+}}{{$}} +; GFX908: v_dot2c_i32_i16_e32 v{{[0-9]+}}, s{{[0-9]+}}, v{{[0-9]+}}{{$}} ; GFX10: v_dot2_i32_i16 v{{[0-9]+}}, s{{[0-9]+}}, s{{[0-9]+}}, v{{[0-9]+}}{{$}} define amdgpu_kernel void @test_llvm_amdgcn_sdot2_no_clamp( i32 addrspace(1)* %r, Index: test/CodeGen/AMDGPU/llvm.amdgcn.sdot8.ll =================================================================== --- test/CodeGen/AMDGPU/llvm.amdgcn.sdot8.ll +++ test/CodeGen/AMDGPU/llvm.amdgcn.sdot8.ll @@ -1,4 +1,5 @@ ; RUN: llc -march=amdgcn -mcpu=gfx906 -verify-machineinstrs < %s | FileCheck %s --check-prefixes=GCN,GFX906 +; RUN: llc -march=amdgcn -mcpu=gfx908 -verify-machineinstrs < %s | FileCheck %s --check-prefixes=GCN,GFX908 ; RUN: llc -march=amdgcn -mcpu=gfx1011 -verify-machineinstrs < %s | FileCheck %s --check-prefixes=GCN,GFX10,GFX1011 ; RUN: llc -march=amdgcn -mcpu=gfx1012 -verify-machineinstrs < %s | FileCheck %s --check-prefixes=GCN,GFX10,GFX1011 @@ -6,6 +7,7 @@ ; GCN-LABEL: {{^}}test_llvm_amdgcn_sdot8_clamp ; GFX906: v_dot8_i32_i4 v{{[0-9]+}}, s{{[0-9]+}}, v{{[0-9]+}}, v{{[0-9]+}} clamp{{$}} +; GFX908: v_dot8_i32_i4 v{{[0-9]+}}, s{{[0-9]+}}, v{{[0-9]+}}, v{{[0-9]+}} clamp{{$}} ; GFX10: v_dot8_i32_i4 v{{[0-9]+}}, s{{[0-9]+}}, s{{[0-9]+}}, v{{[0-9]+}} clamp{{$}} define amdgpu_kernel void @test_llvm_amdgcn_sdot8_clamp( i32 addrspace(1)* %r, @@ -25,6 +27,7 @@ ; GCN-LABEL: {{^}}test_llvm_amdgcn_sdot8_no_clamp ; GFX906: v_dot8_i32_i4 v{{[0-9]+}}, s{{[0-9]+}}, v{{[0-9]+}}, v{{[0-9]+}}{{$}} +; GFX908: v_dot8c_i32_i4_e32 v{{[0-9]+}}, s{{[0-9]+}}, v{{[0-9]+}}{{$}} ; GFX1011: v_dot8_i32_i4 v{{[0-9]+}}, s{{[0-9]+}}, s{{[0-9]+}}, v{{[0-9]+}}{{$}} define amdgpu_kernel void @test_llvm_amdgcn_sdot8_no_clamp( i32 addrspace(1)* %r, Index: test/MC/AMDGPU/dl-insts-err.s =================================================================== --- test/MC/AMDGPU/dl-insts-err.s +++ test/MC/AMDGPU/dl-insts-err.s @@ -1,6 +1,7 @@ // RUN: not llvm-mc -arch=amdgcn -mcpu=gfx800 -show-encoding %s 2>&1 | FileCheck %s // RUN: not llvm-mc -arch=amdgcn -mcpu=gfx900 -show-encoding %s 2>&1 | FileCheck %s -// RUN: not llvm-mc -arch=amdgcn -mcpu=gfx906 -show-encoding %s 2>&1 | FileCheck %s --check-prefix=GFX906 +// RUN: not llvm-mc -arch=amdgcn -mcpu=gfx906 -show-encoding %s 2>&1 | FileCheck %s --check-prefix=GFX906-GFX908 +// RUN: not llvm-mc -arch=amdgcn -mcpu=gfx908 -show-encoding %s 2>&1 | FileCheck %s --check-prefix=GFX906-GFX908 // // Test unsupported GPUs. @@ -29,233 +30,233 @@ // Test invalid operands. // -// GFX906: error: invalid operand for instruction +// GFX906-GFX908: error: invalid operand for instruction v_dot2_f32_f16 v0, v1, v2, v3 op_sel -// GFX906: error: expected a left square bracket +// GFX906-GFX908: error: expected a left square bracket v_dot2_f32_f16 v0, v1, v2, v3 op_sel: -// GFX906: error: unknown token in expression +// GFX906-GFX908: error: unknown token in expression v_dot2_f32_f16 v0, v1, v2, v3 op_sel:[ -// GFX906: error: expected a left square bracket +// GFX906-GFX908: error: expected a left square bracket v_dot2_f32_f16 v0, v1, v2, v3 op_sel:] -// GFX906: error: unknown token in expression +// GFX906-GFX908: error: unknown token in expression v_dot2_f32_f16 v0, v1, v2, v3 op_sel:[] -// GFX906: error: unknown token in expression +// GFX906-GFX908: error: unknown token in expression v_dot2_f32_f16 v0, v1, v2, v3 op_sel:[,] -// GFX906: error: unknown token in expression +// GFX906-GFX908: error: unknown token in expression v_dot2_f32_f16 v0, v1, v2, v3 op_sel:[,0] -// GFX906: error: failed parsing operand +// GFX906-GFX908: error: failed parsing operand v_dot2_f32_f16 v0, v1, v2, v3 op_sel:[0,2] -// GFX906: error: failed parsing operand +// GFX906-GFX908: error: failed parsing operand v_dot2_f32_f16 v0, v1, v2, v3 op_sel:[2,0] -// GFX906: error: failed parsing operand +// GFX906-GFX908: error: failed parsing operand v_dot2_f32_f16 v0, v1, v2, v3 op_sel:[2,2] -// GFX906: error: failed parsing operand +// GFX906-GFX908: error: failed parsing operand v_dot2_f32_f16 v0, v1, v2, v3 op_sel:[0,-1] -// GFX906: error: failed parsing operand +// GFX906-GFX908: error: failed parsing operand v_dot2_f32_f16 v0, v1, v2, v3 op_sel:[-1,0] -// GFX906: error: failed parsing operand +// GFX906-GFX908: error: failed parsing operand v_dot2_f32_f16 v0, v1, v2, v3 op_sel:[-1,-1] -// GFX906: error: expected a closing square bracket +// GFX906-GFX908: error: expected a closing square bracket v_dot2_f32_f16 v0, v1, v2, v3 op_sel:[0,0,0,0,0] -// GFX906: error: invalid operand for instruction +// GFX906-GFX908: error: invalid operand for instruction v_dot2_f32_f16 v0, v1, v2, v3 op_sel_hi -// GFX906: error: expected a left square bracket +// GFX906-GFX908: error: expected a left square bracket v_dot2_f32_f16 v0, v1, v2, v3 op_sel_hi: -// GFX906: error: unknown token in expression +// GFX906-GFX908: error: unknown token in expression v_dot2_f32_f16 v0, v1, v2, v3 op_sel_hi:[ -// GFX906: error: expected a left square bracket +// GFX906-GFX908: error: expected a left square bracket v_dot2_f32_f16 v0, v1, v2, v3 op_sel_hi:] -// GFX906: error: unknown token in expression +// GFX906-GFX908: error: unknown token in expression v_dot2_f32_f16 v0, v1, v2, v3 op_sel_hi:[] -// GFX906: error: unknown token in expression +// GFX906-GFX908: error: unknown token in expression v_dot2_f32_f16 v0, v1, v2, v3 op_sel_hi:[,] -// GFX906: error: unknown token in expression +// GFX906-GFX908: error: unknown token in expression v_dot2_f32_f16 v0, v1, v2, v3 op_sel_hi:[,0] -// GFX906: error: failed parsing operand +// GFX906-GFX908: error: failed parsing operand v_dot2_f32_f16 v0, v1, v2, v3 op_sel_hi:[0,2] -// GFX906: error: failed parsing operand +// GFX906-GFX908: error: failed parsing operand v_dot2_f32_f16 v0, v1, v2, v3 op_sel_hi:[2,0] -// GFX906: error: failed parsing operand +// GFX906-GFX908: error: failed parsing operand v_dot2_f32_f16 v0, v1, v2, v3 op_sel_hi:[2,2] -// GFX906: error: failed parsing operand +// GFX906-GFX908: error: failed parsing operand v_dot2_f32_f16 v0, v1, v2, v3 op_sel_hi:[0,-1] -// GFX906: error: failed parsing operand +// GFX906-GFX908: error: failed parsing operand v_dot2_f32_f16 v0, v1, v2, v3 op_sel_hi:[-1,0] -// GFX906: error: failed parsing operand +// GFX906-GFX908: error: failed parsing operand v_dot2_f32_f16 v0, v1, v2, v3 op_sel_hi:[-1,-1] -// GFX906: error: expected a closing square bracket +// GFX906-GFX908: error: expected a closing square bracket v_dot2_f32_f16 v0, v1, v2, v3 op_sel_hi:[0,0,0,0,0] -// GFX906: error: invalid operand for instruction +// GFX906-GFX908: error: invalid operand for instruction v_dot2_f32_f16 v0, v1, v2, v3 neg_lo -// GFX906: error: expected a left square bracket +// GFX906-GFX908: error: expected a left square bracket v_dot2_f32_f16 v0, v1, v2, v3 neg_lo: -// GFX906: error: unknown token in expression +// GFX906-GFX908: error: unknown token in expression v_dot2_f32_f16 v0, v1, v2, v3 neg_lo:[ -// GFX906: error: expected a left square bracket +// GFX906-GFX908: error: expected a left square bracket v_dot2_f32_f16 v0, v1, v2, v3 neg_lo:] -// GFX906: error: unknown token in expression +// GFX906-GFX908: error: unknown token in expression v_dot2_f32_f16 v0, v1, v2, v3 neg_lo:[] -// GFX906: error: unknown token in expression +// GFX906-GFX908: error: unknown token in expression v_dot2_f32_f16 v0, v1, v2, v3 neg_lo:[,] -// GFX906: error: unknown token in expression +// GFX906-GFX908: error: unknown token in expression v_dot2_f32_f16 v0, v1, v2, v3 neg_lo:[,0] -// GFX906: error: failed parsing operand +// GFX906-GFX908: error: failed parsing operand v_dot2_f32_f16 v0, v1, v2, v3 neg_lo:[0,2] -// GFX906: error: failed parsing operand +// GFX906-GFX908: error: failed parsing operand v_dot2_f32_f16 v0, v1, v2, v3 neg_lo:[2,0] -// GFX906: error: failed parsing operand +// GFX906-GFX908: error: failed parsing operand v_dot2_f32_f16 v0, v1, v2, v3 neg_lo:[2,2] -// GFX906: error: failed parsing operand +// GFX906-GFX908: error: failed parsing operand v_dot2_f32_f16 v0, v1, v2, v3 neg_lo:[0,-1] -// GFX906: error: failed parsing operand +// GFX906-GFX908: error: failed parsing operand v_dot2_f32_f16 v0, v1, v2, v3 neg_lo:[-1,0] -// GFX906: error: failed parsing operand +// GFX906-GFX908: error: failed parsing operand v_dot2_f32_f16 v0, v1, v2, v3 neg_lo:[-1,-1] -// GFX906: error: expected a closing square bracket +// GFX906-GFX908: error: expected a closing square bracket v_dot2_f32_f16 v0, v1, v2, v3 neg_lo:[0,0,0,0,0] -// GFX906: error: invalid operand for instruction +// GFX906-GFX908: error: invalid operand for instruction v_dot2_f32_f16 v0, v1, v2, v3 neg_hi -// GFX906: error: expected a left square bracket +// GFX906-GFX908: error: expected a left square bracket v_dot2_f32_f16 v0, v1, v2, v3 neg_hi: -// GFX906: error: unknown token in expression +// GFX906-GFX908: error: unknown token in expression v_dot2_f32_f16 v0, v1, v2, v3 neg_hi:[ -// GFX906: error: expected a left square bracket +// GFX906-GFX908: error: expected a left square bracket v_dot2_f32_f16 v0, v1, v2, v3 neg_hi:] -// GFX906: error: unknown token in expression +// GFX906-GFX908: error: unknown token in expression v_dot2_f32_f16 v0, v1, v2, v3 neg_hi:[] -// GFX906: error: unknown token in expression +// GFX906-GFX908: error: unknown token in expression v_dot2_f32_f16 v0, v1, v2, v3 neg_hi:[,] -// GFX906: error: unknown token in expression +// GFX906-GFX908: error: unknown token in expression v_dot2_f32_f16 v0, v1, v2, v3 neg_hi:[,0] -// GFX906: error: failed parsing operand +// GFX906-GFX908: error: failed parsing operand v_dot2_f32_f16 v0, v1, v2, v3 neg_hi:[0,2] -// GFX906: error: failed parsing operand +// GFX906-GFX908: error: failed parsing operand v_dot2_f32_f16 v0, v1, v2, v3 neg_hi:[2,0] -// GFX906: error: failed parsing operand +// GFX906-GFX908: error: failed parsing operand v_dot2_f32_f16 v0, v1, v2, v3 neg_hi:[2,2] -// GFX906: error: failed parsing operand +// GFX906-GFX908: error: failed parsing operand v_dot2_f32_f16 v0, v1, v2, v3 neg_hi:[0,-1] -// GFX906: error: failed parsing operand +// GFX906-GFX908: error: failed parsing operand v_dot2_f32_f16 v0, v1, v2, v3 neg_hi:[-1,0] -// GFX906: error: failed parsing operand +// GFX906-GFX908: error: failed parsing operand v_dot2_f32_f16 v0, v1, v2, v3 neg_hi:[-1,-1] -// GFX906: error: expected a closing square bracket +// GFX906-GFX908: error: expected a closing square bracket v_dot2_f32_f16 v0, v1, v2, v3 neg_hi:[0,0,0,0,0] -// GFX906: error: invalid operand for instruction +// GFX906-GFX908: error: invalid operand for instruction v_dot2_i32_i16 v0, v1, v2, v3 op_sel -// GFX906: error: expected a left square bracket +// GFX906-GFX908: error: expected a left square bracket v_dot2_i32_i16 v0, v1, v2, v3 op_sel: -// GFX906: error: unknown token in expression +// GFX906-GFX908: error: unknown token in expression v_dot2_i32_i16 v0, v1, v2, v3 op_sel:[ -// GFX906: error: expected a left square bracket +// GFX906-GFX908: error: expected a left square bracket v_dot2_i32_i16 v0, v1, v2, v3 op_sel:] -// GFX906: error: unknown token in expression +// GFX906-GFX908: error: unknown token in expression v_dot2_i32_i16 v0, v1, v2, v3 op_sel:[] -// GFX906: error: unknown token in expression +// GFX906-GFX908: error: unknown token in expression v_dot2_i32_i16 v0, v1, v2, v3 op_sel:[,] -// GFX906: error: unknown token in expression +// GFX906-GFX908: error: unknown token in expression v_dot2_i32_i16 v0, v1, v2, v3 op_sel:[,0] -// GFX906: error: failed parsing operand +// GFX906-GFX908: error: failed parsing operand v_dot2_i32_i16 v0, v1, v2, v3 op_sel:[0,2] -// GFX906: error: failed parsing operand +// GFX906-GFX908: error: failed parsing operand v_dot2_i32_i16 v0, v1, v2, v3 op_sel:[2,0] -// GFX906: error: failed parsing operand +// GFX906-GFX908: error: failed parsing operand v_dot2_i32_i16 v0, v1, v2, v3 op_sel:[2,2] -// GFX906: error: failed parsing operand +// GFX906-GFX908: error: failed parsing operand v_dot2_i32_i16 v0, v1, v2, v3 op_sel:[0,-1] -// GFX906: error: failed parsing operand +// GFX906-GFX908: error: failed parsing operand v_dot2_i32_i16 v0, v1, v2, v3 op_sel:[-1,0] -// GFX906: error: failed parsing operand +// GFX906-GFX908: error: failed parsing operand v_dot2_i32_i16 v0, v1, v2, v3 op_sel:[-1,-1] -// GFX906: error: expected a closing square bracket +// GFX906-GFX908: error: expected a closing square bracket v_dot2_i32_i16 v0, v1, v2, v3 op_sel:[0,0,0,0,0] -// GFX906: error: invalid operand for instruction +// GFX906-GFX908: error: invalid operand for instruction v_dot2_i32_i16 v0, v1, v2, v3 op_sel_hi -// GFX906: error: expected a left square bracket +// GFX906-GFX908: error: expected a left square bracket v_dot2_i32_i16 v0, v1, v2, v3 op_sel_hi: -// GFX906: error: unknown token in expression +// GFX906-GFX908: error: unknown token in expression v_dot2_i32_i16 v0, v1, v2, v3 op_sel_hi:[ -// GFX906: error: expected a left square bracket +// GFX906-GFX908: error: expected a left square bracket v_dot2_i32_i16 v0, v1, v2, v3 op_sel_hi:] -// GFX906: error: unknown token in expression +// GFX906-GFX908: error: unknown token in expression v_dot2_i32_i16 v0, v1, v2, v3 op_sel_hi:[] -// GFX906: error: unknown token in expression +// GFX906-GFX908: error: unknown token in expression v_dot2_i32_i16 v0, v1, v2, v3 op_sel_hi:[,] -// GFX906: error: unknown token in expression +// GFX906-GFX908: error: unknown token in expression v_dot2_i32_i16 v0, v1, v2, v3 op_sel_hi:[,0] -// GFX906: error: failed parsing operand +// GFX906-GFX908: error: failed parsing operand v_dot2_i32_i16 v0, v1, v2, v3 op_sel_hi:[0,2] -// GFX906: error: failed parsing operand +// GFX906-GFX908: error: failed parsing operand v_dot2_i32_i16 v0, v1, v2, v3 op_sel_hi:[2,0] -// GFX906: error: failed parsing operand +// GFX906-GFX908: error: failed parsing operand v_dot2_i32_i16 v0, v1, v2, v3 op_sel_hi:[2,2] -// GFX906: error: failed parsing operand +// GFX906-GFX908: error: failed parsing operand v_dot2_i32_i16 v0, v1, v2, v3 op_sel_hi:[0,-1] -// GFX906: error: failed parsing operand +// GFX906-GFX908: error: failed parsing operand v_dot2_i32_i16 v0, v1, v2, v3 op_sel_hi:[-1,0] -// GFX906: error: failed parsing operand +// GFX906-GFX908: error: failed parsing operand v_dot2_i32_i16 v0, v1, v2, v3 op_sel_hi:[-1,-1] -// GFX906: error: expected a closing square bracket +// GFX906-GFX908: error: expected a closing square bracket v_dot2_i32_i16 v0, v1, v2, v3 op_sel_hi:[0,0,0,0,0] // FIXME-GFX906: error: invalid operand for instruction v_dot2_i32_i16 v0, v1, v2, v3 neg_lo:[0,0] // FIXME-GFX906: error: invalid operand for instruction v_dot2_i32_i16 v0, v1, v2, v3 neg_hi:[0,0] -// GFX906: error: invalid operand for instruction +// GFX906-GFX908: error: invalid operand for instruction v_dot2_u32_u16 v0, v1, v2, v3 op_sel -// GFX906: error: expected a left square bracket +// GFX906-GFX908: error: expected a left square bracket v_dot2_u32_u16 v0, v1, v2, v3 op_sel: -// GFX906: error: unknown token in expression +// GFX906-GFX908: error: unknown token in expression v_dot2_u32_u16 v0, v1, v2, v3 op_sel:[ -// GFX906: error: expected a left square bracket +// GFX906-GFX908: error: expected a left square bracket v_dot2_u32_u16 v0, v1, v2, v3 op_sel:] -// GFX906: error: unknown token in expression +// GFX906-GFX908: error: unknown token in expression v_dot2_u32_u16 v0, v1, v2, v3 op_sel:[] -// GFX906: error: unknown token in expression +// GFX906-GFX908: error: unknown token in expression v_dot2_u32_u16 v0, v1, v2, v3 op_sel:[,] -// GFX906: error: unknown token in expression +// GFX906-GFX908: error: unknown token in expression v_dot2_u32_u16 v0, v1, v2, v3 op_sel:[,0] -// GFX906: error: failed parsing operand +// GFX906-GFX908: error: failed parsing operand v_dot2_u32_u16 v0, v1, v2, v3 op_sel:[0,2] -// GFX906: error: failed parsing operand +// GFX906-GFX908: error: failed parsing operand v_dot2_u32_u16 v0, v1, v2, v3 op_sel:[2,0] -// GFX906: error: failed parsing operand +// GFX906-GFX908: error: failed parsing operand v_dot2_u32_u16 v0, v1, v2, v3 op_sel:[2,2] -// GFX906: error: failed parsing operand +// GFX906-GFX908: error: failed parsing operand v_dot2_u32_u16 v0, v1, v2, v3 op_sel:[0,-1] -// GFX906: error: failed parsing operand +// GFX906-GFX908: error: failed parsing operand v_dot2_u32_u16 v0, v1, v2, v3 op_sel:[-1,0] -// GFX906: error: failed parsing operand +// GFX906-GFX908: error: failed parsing operand v_dot2_u32_u16 v0, v1, v2, v3 op_sel:[-1,-1] -// GFX906: error: expected a closing square bracket +// GFX906-GFX908: error: expected a closing square bracket v_dot2_u32_u16 v0, v1, v2, v3 op_sel:[0,0,0,0,0] -// GFX906: error: invalid operand for instruction +// GFX906-GFX908: error: invalid operand for instruction v_dot2_u32_u16 v0, v1, v2, v3 op_sel_hi -// GFX906: error: expected a left square bracket +// GFX906-GFX908: error: expected a left square bracket v_dot2_u32_u16 v0, v1, v2, v3 op_sel_hi: -// GFX906: error: unknown token in expression +// GFX906-GFX908: error: unknown token in expression v_dot2_u32_u16 v0, v1, v2, v3 op_sel_hi:[ -// GFX906: error: expected a left square bracket +// GFX906-GFX908: error: expected a left square bracket v_dot2_u32_u16 v0, v1, v2, v3 op_sel_hi:] -// GFX906: error: unknown token in expression +// GFX906-GFX908: error: unknown token in expression v_dot2_u32_u16 v0, v1, v2, v3 op_sel_hi:[] -// GFX906: error: unknown token in expression +// GFX906-GFX908: error: unknown token in expression v_dot2_u32_u16 v0, v1, v2, v3 op_sel_hi:[,] -// GFX906: error: unknown token in expression +// GFX906-GFX908: error: unknown token in expression v_dot2_u32_u16 v0, v1, v2, v3 op_sel_hi:[,0] -// GFX906: error: invalid op_sel_hi value +// GFX906-GFX908: error: invalid op_sel_hi value v_dot2_u32_u16 v0, v1, v2, v3 op_sel_hi:[0,2] -// GFX906: error: failed parsing operand +// GFX906-GFX908: error: failed parsing operand v_dot2_u32_u16 v0, v1, v2, v3 op_sel_hi:[2,0] -// GFX906: error: failed parsing operand +// GFX906-GFX908: error: failed parsing operand v_dot2_u32_u16 v0, v1, v2, v3 op_sel_hi:[2,2] -// GFX906: error: failed parsing operand +// GFX906-GFX908: error: failed parsing operand v_dot2_u32_u16 v0, v1, v2, v3 op_sel_hi:[0,-1] -// GFX906: error: failed parsing operand +// GFX906-GFX908: error: failed parsing operand v_dot2_u32_u16 v0, v1, v2, v3 op_sel_hi:[-1,0] -// GFX906: error: failed parsing operand +// GFX906-GFX908: error: failed parsing operand v_dot2_u32_u16 v0, v1, v2, v3 op_sel_hi:[-1,-1] -// GFX906: error: expected a closing square bracket +// GFX906-GFX908: error: expected a closing square bracket v_dot2_u32_u16 v0, v1, v2, v3 op_sel_hi:[0,0,0,0,0] // FIXME-GFX906: error: invalid operand for instruction v_dot2_u32_u16 v0, v1, v2, v3 neg_lo:[0,0] @@ -266,122 +267,122 @@ // Test regular modifiers. // -// GFX906: error: not a valid operand +// GFX906-GFX908: error: not a valid operand v_dot2_f32_f16 v0, |v1|, v2, v3 -// GFX906: error: not a valid operand +// GFX906-GFX908: error: not a valid operand v_dot2_f32_f16 v0, v1, |v2|, v3 -// GFX906: error: not a valid operand +// GFX906-GFX908: error: not a valid operand v_dot2_f32_f16 v0, v1, v2, |v3| -// GFX906: error: not a valid operand +// GFX906-GFX908: error: not a valid operand v_dot2_f32_f16 v0, |v1|, |v2|, v3 -// GFX906: error: not a valid operand +// GFX906-GFX908: error: not a valid operand v_dot2_f32_f16 v0, |v1|, v2, |v3| -// GFX906: error: not a valid operand +// GFX906-GFX908: error: not a valid operand v_dot2_f32_f16 v0, |v1|, |v2|, |v3| -// GFX906: error: not a valid operand +// GFX906-GFX908: error: not a valid operand v_dot2_f32_f16 v0, abs(v1), v2, v3 -// GFX906: error: not a valid operand +// GFX906-GFX908: error: not a valid operand v_dot2_f32_f16 v0, v1, abs(v2), v3 -// GFX906: error: not a valid operand +// GFX906-GFX908: error: not a valid operand v_dot2_f32_f16 v0, v1, v2, abs(v3) -// GFX906: error: not a valid operand +// GFX906-GFX908: error: not a valid operand v_dot2_f32_f16 v0, abs(v1), abs(v2), v3 -// GFX906: error: not a valid operand +// GFX906-GFX908: error: not a valid operand v_dot2_f32_f16 v0, abs(v1), v2, abs(v3) -// GFX906: error: not a valid operand +// GFX906-GFX908: error: not a valid operand v_dot2_f32_f16 v0, abs(v1), abs(v2), abs(v3) -// GFX906: error: not a valid operand +// GFX906-GFX908: error: not a valid operand v_dot2_f32_f16 v0, -v1, v2, v3 -// GFX906: error: not a valid operand +// GFX906-GFX908: error: not a valid operand v_dot2_f32_f16 v0, v1, -v2, v3 -// GFX906: error: not a valid operand +// GFX906-GFX908: error: not a valid operand v_dot2_f32_f16 v0, v1, v2, -v3 -// GFX906: error: not a valid operand +// GFX906-GFX908: error: not a valid operand v_dot2_f32_f16 v0, -v1, -v2, v3 -// GFX906: error: not a valid operand +// GFX906-GFX908: error: not a valid operand v_dot2_f32_f16 v0, -v1, v2, -v3 -// GFX906: error: not a valid operand +// GFX906-GFX908: error: not a valid operand v_dot2_f32_f16 v0, -v1, -v2, -v3 -// GFX906: error: not a valid operand +// GFX906-GFX908: error: not a valid operand v_dot2_i32_i16 v0, |v1|, v2, v3 -// GFX906: error: not a valid operand +// GFX906-GFX908: error: not a valid operand v_dot2_i32_i16 v0, v1, |v2|, v3 -// GFX906: error: not a valid operand +// GFX906-GFX908: error: not a valid operand v_dot2_i32_i16 v0, v1, v2, |v3| -// GFX906: error: not a valid operand +// GFX906-GFX908: error: not a valid operand v_dot2_i32_i16 v0, |v1|, |v2|, v3 -// GFX906: error: not a valid operand +// GFX906-GFX908: error: not a valid operand v_dot2_i32_i16 v0, |v1|, v2, |v3| -// GFX906: error: not a valid operand +// GFX906-GFX908: error: not a valid operand v_dot2_i32_i16 v0, |v1|, |v2|, |v3| -// GFX906: error: not a valid operand +// GFX906-GFX908: error: not a valid operand v_dot2_i32_i16 v0, abs(v1), v2, v3 -// GFX906: error: not a valid operand +// GFX906-GFX908: error: not a valid operand v_dot2_i32_i16 v0, v1, abs(v2), v3 -// GFX906: error: not a valid operand +// GFX906-GFX908: error: not a valid operand v_dot2_i32_i16 v0, v1, v2, abs(v3) -// GFX906: error: not a valid operand +// GFX906-GFX908: error: not a valid operand v_dot2_i32_i16 v0, abs(v1), abs(v2), v3 -// GFX906: error: not a valid operand +// GFX906-GFX908: error: not a valid operand v_dot2_i32_i16 v0, abs(v1), v2, abs(v3) -// GFX906: error: not a valid operand +// GFX906-GFX908: error: not a valid operand v_dot2_i32_i16 v0, abs(v1), abs(v2), abs(v3) -// GFX906: error: not a valid operand +// GFX906-GFX908: error: not a valid operand v_dot2_i32_i16 v0, -v1, v2, v3 -// GFX906: error: not a valid operand +// GFX906-GFX908: error: not a valid operand v_dot2_i32_i16 v0, v1, -v2, v3 -// GFX906: error: not a valid operand +// GFX906-GFX908: error: not a valid operand v_dot2_i32_i16 v0, v1, v2, -v3 -// GFX906: error: not a valid operand +// GFX906-GFX908: error: not a valid operand v_dot2_i32_i16 v0, -v1, -v2, v3 -// GFX906: error: not a valid operand +// GFX906-GFX908: error: not a valid operand v_dot2_i32_i16 v0, -v1, v2, -v3 -// GFX906: error: not a valid operand +// GFX906-GFX908: error: not a valid operand v_dot2_i32_i16 v0, -v1, -v2, -v3 -// GFX906: error: not a valid operand +// GFX906-GFX908: error: not a valid operand v_dot2_u32_u16 v0, |v1|, v2, v3 -// GFX906: error: not a valid operand +// GFX906-GFX908: error: not a valid operand v_dot2_u32_u16 v0, v1, |v2|, v3 -// GFX906: error: not a valid operand +// GFX906-GFX908: error: not a valid operand v_dot2_u32_u16 v0, v1, v2, |v3| -// GFX906: error: not a valid operand +// GFX906-GFX908: error: not a valid operand v_dot2_u32_u16 v0, |v1|, |v2|, v3 -// GFX906: error: not a valid operand +// GFX906-GFX908: error: not a valid operand v_dot2_u32_u16 v0, |v1|, v2, |v3| -// GFX906: error: not a valid operand +// GFX906-GFX908: error: not a valid operand v_dot2_u32_u16 v0, |v1|, |v2|, |v3| -// GFX906: error: not a valid operand +// GFX906-GFX908: error: not a valid operand v_dot2_u32_u16 v0, abs(v1), v2, v3 -// GFX906: error: not a valid operand +// GFX906-GFX908: error: not a valid operand v_dot2_u32_u16 v0, v1, abs(v2), v3 -// GFX906: error: not a valid operand +// GFX906-GFX908: error: not a valid operand v_dot2_u32_u16 v0, v1, v2, abs(v3) -// GFX906: error: not a valid operand +// GFX906-GFX908: error: not a valid operand v_dot2_u32_u16 v0, abs(v1), abs(v2), v3 -// GFX906: error: not a valid operand +// GFX906-GFX908: error: not a valid operand v_dot2_u32_u16 v0, abs(v1), v2, abs(v3) -// GFX906: error: not a valid operand +// GFX906-GFX908: error: not a valid operand v_dot2_u32_u16 v0, abs(v1), abs(v2), abs(v3) -// GFX906: error: not a valid operand +// GFX906-GFX908: error: not a valid operand v_dot2_u32_u16 v0, -v1, v2, v3 -// GFX906: error: not a valid operand +// GFX906-GFX908: error: not a valid operand v_dot2_u32_u16 v0, v1, -v2, v3 -// GFX906: error: not a valid operand +// GFX906-GFX908: error: not a valid operand v_dot2_u32_u16 v0, v1, v2, -v3 -// GFX906: error: not a valid operand +// GFX906-GFX908: error: not a valid operand v_dot2_u32_u16 v0, -v1, -v2, v3 -// GFX906: error: not a valid operand +// GFX906-GFX908: error: not a valid operand v_dot2_u32_u16 v0, -v1, v2, -v3 -// GFX906: error: not a valid operand +// GFX906-GFX908: error: not a valid operand v_dot2_u32_u16 v0, -v1, -v2, -v3 // // Test constant bus restrictions. // -// GFX906: error: invalid operand (violates constant bus restrictions) +// GFX906-GFX908: error: invalid operand (violates constant bus restrictions) v_dot2_f32_f16 v255, s1, s2, s3 -// GFX906: error: invalid operand (violates constant bus restrictions) +// GFX906-GFX908: error: invalid operand (violates constant bus restrictions) v_dot2_i32_i16 v255, s1, s2, s3 -// GFX906: error: invalid operand (violates constant bus restrictions) +// GFX906-GFX908: error: invalid operand (violates constant bus restrictions) v_dot2_u32_u16 v255, s1, s2, s3 Index: test/MC/AMDGPU/xdl-insts-err.s =================================================================== --- /dev/null +++ test/MC/AMDGPU/xdl-insts-err.s @@ -0,0 +1,41 @@ +// RUN: not llvm-mc -arch=amdgcn -mcpu=gfx906 -show-encoding %s 2>&1 | FileCheck --check-prefixes=GCN-ERR,GFX906-ERR %s +// RUN: not llvm-mc -arch=amdgcn -mcpu=gfx908 -show-encoding %s 2>&1 | FileCheck --check-prefixes=GCN-ERR,GFX908-ERR %s + +// GFX906-ERR: error: instruction not supported on this GPU +v_dot2c_f32_f16 v0, v1, v2 + +// GCN-ERR: error: invalid instruction +v_dot2c_f32_f16_e64 v0, v1, v2 + +// GCN-ERR: error: invalid instruction +v_dot2c_f32_f16_sdwa v0, v1, v2 + +// GFX906-ERR: error: instruction not supported on this GPU +v_dot2c_i32_i16 v0, v1, v2 + +// GCN-ERR: error: invalid instruction +v_dot2c_i32_i16_e64 v0, v1, v2 + +// GCN-ERR: error: invalid instruction +v_dot2c_i32_i16_sdwa v0, v1, v2 + +// GFX906-ERR: error: instruction not supported on this GPU +v_dot4c_i32_i8 v0, v1, v2 + +// GCN-ERR: error: invalid instruction +v_dot4c_i32_i8_e64 v0, v1, v2 + +// GCN-ERR: error: invalid instruction +v_dot4c_i32_i8_sdwa v0, v1, v2 + +// GFX906-ERR: error: instruction not supported on this GPU +v_dot8c_i32_i4 v0, v1, v2 + +// GCN-ERR: error: invalid instruction +v_dot8c_i32_i4_e64 v0, v1, v2 + +// GCN-ERR: error: invalid instruction +v_dot8c_i32_i4_sdwa v0, v1, v2 + +// GFX906-ERR: error: instruction not supported on this GPU +v_pk_fmac_f16 v0, v1, v2 Index: test/MC/AMDGPU/xdl-insts-gfx908.s =================================================================== --- test/MC/AMDGPU/xdl-insts-gfx908.s +++ test/MC/AMDGPU/xdl-insts-gfx908.s @@ -1,5 +1,377 @@ // RUN: llvm-mc -arch=amdgcn -mcpu=gfx908 -show-encoding %s | FileCheck %s +// CHECK: encoding: [0x01,0x05,0x0a,0x6e] +v_dot2c_f32_f16 v5, v1, v2 + +// CHECK: encoding: [0x01,0x05,0xfe,0x6f] +v_dot2c_f32_f16 v255, v1, v2 + +// CHECK: encoding: [0xfa,0x04,0x0a,0x6e,0x01,0xe4,0x00,0x00] +v_dot2c_f32_f16_dpp v5, v1, v2 quad_perm:[0,1,2,3] row_mask:0x0 bank_mask:0x0 + +// CHECK: encoding: [0xfa,0x04,0xfe,0x6f,0x01,0xe4,0x00,0x00] +v_dot2c_f32_f16_dpp v255, v1, v2 quad_perm:[0,1,2,3] row_mask:0x0 bank_mask:0x0 + +// CHECK: encoding: [0xfa,0x04,0x0a,0x6e,0xff,0xe4,0x00,0x00] +v_dot2c_f32_f16_dpp v5, v255, v2 quad_perm:[0,1,2,3] row_mask:0x0 bank_mask:0x0 + +// CHECK: encoding: [0xfa,0xfe,0x0b,0x6e,0x01,0xe4,0x00,0x00] +v_dot2c_f32_f16_dpp v5, v1, v255 quad_perm:[0,1,2,3] row_mask:0x0 bank_mask:0x0 + +// CHECK: encoding: [0xfa,0x04,0x0a,0x6e,0x01,0x1b,0x00,0x00] +v_dot2c_f32_f16_dpp v5, v1, v2 quad_perm:[3,2,1,0] row_mask:0x0 bank_mask:0x0 + +// CHECK: encoding: [0xfa,0x04,0x0a,0x6e,0x01,0x40,0x01,0x00] +v_dot2c_f32_f16_dpp v5, v1, v2 row_mirror row_mask:0x0 bank_mask:0x0 + +// CHECK: encoding: [0xfa,0x04,0x0a,0x6e,0x01,0x41,0x01,0x00] +v_dot2c_f32_f16_dpp v5, v1, v2 row_half_mirror row_mask:0x0 bank_mask:0x0 + +// CHECK: encoding: [0xfa,0x04,0x0a,0x6e,0x01,0x42,0x01,0x00] +v_dot2c_f32_f16_dpp v5, v1, v2 row_bcast:15 row_mask:0x0 bank_mask:0x0 + +// CHECK: encoding: [0xfa,0x04,0x0a,0x6e,0x01,0x43,0x01,0x00] +v_dot2c_f32_f16_dpp v5, v1, v2 row_bcast:31 row_mask:0x0 bank_mask:0x0 + +// CHECK: encoding: [0xfa,0x04,0x0a,0x6e,0x01,0x30,0x01,0x00] +v_dot2c_f32_f16_dpp v5, v1, v2 wave_shl:1 row_mask:0x0 bank_mask:0x0 + +// CHECK: encoding: [0xfa,0x04,0x0a,0x6e,0x01,0x34,0x01,0x00] +v_dot2c_f32_f16_dpp v5, v1, v2 wave_rol:1 row_mask:0x0 bank_mask:0x0 + +// CHECK: encoding: [0xfa,0x04,0x0a,0x6e,0x01,0x38,0x01,0x00] +v_dot2c_f32_f16_dpp v5, v1, v2 wave_shr:1 row_mask:0x0 bank_mask:0x0 + +// CHECK: encoding: [0xfa,0x04,0x0a,0x6e,0x01,0x3c,0x01,0x00] +v_dot2c_f32_f16_dpp v5, v1, v2 wave_ror:1 row_mask:0x0 bank_mask:0x0 + +// CHECK: encoding: [0xfa,0x04,0x0a,0x6e,0x01,0x01,0x01,0x00] +v_dot2c_f32_f16_dpp v5, v1, v2 row_shl:1 row_mask:0x0 bank_mask:0x0 + +// CHECK: encoding: [0xfa,0x04,0x0a,0x6e,0x01,0x0f,0x01,0x00] +v_dot2c_f32_f16_dpp v5, v1, v2 row_shl:15 row_mask:0x0 bank_mask:0x0 + +// CHECK: encoding: [0xfa,0x04,0x0a,0x6e,0x01,0x11,0x01,0x00] +v_dot2c_f32_f16_dpp v5, v1, v2 row_shr:1 row_mask:0x0 bank_mask:0x0 + +// CHECK: encoding: [0xfa,0x04,0x0a,0x6e,0x01,0x1f,0x01,0x00] +v_dot2c_f32_f16_dpp v5, v1, v2 row_shr:15 row_mask:0x0 bank_mask:0x0 + +// CHECK: encoding: [0xfa,0x04,0x0a,0x6e,0x01,0x21,0x01,0x00] +v_dot2c_f32_f16_dpp v5, v1, v2 row_ror:1 row_mask:0x0 bank_mask:0x0 + +// CHECK: encoding: [0xfa,0x04,0x0a,0x6e,0x01,0x2f,0x01,0x00] +v_dot2c_f32_f16_dpp v5, v1, v2 row_ror:15 row_mask:0x0 bank_mask:0x0 + +// CHECK: encoding: [0xfa,0x04,0x0a,0x6e,0x01,0xe4,0x00,0x10] +v_dot2c_f32_f16_dpp v5, v1, v2 quad_perm:[0,1,2,3] row_mask:0x1 bank_mask:0x0 + +// CHECK: encoding: [0xfa,0x04,0x0a,0x6e,0x01,0xe4,0x00,0x30] +v_dot2c_f32_f16_dpp v5, v1, v2 quad_perm:[0,1,2,3] row_mask:0x3 bank_mask:0x0 + +// CHECK: encoding: [0xfa,0x04,0x0a,0x6e,0x01,0xe4,0x00,0xf0] +v_dot2c_f32_f16_dpp v5, v1, v2 quad_perm:[0,1,2,3] row_mask:0xf bank_mask:0x0 + +// CHECK: encoding: [0xfa,0x04,0x0a,0x6e,0x01,0xe4,0x00,0xf0] +v_dot2c_f32_f16_dpp v5, v1, v2 quad_perm:[0,1,2,3] bank_mask:0x0 + +// CHECK: encoding: [0xfa,0x04,0x0a,0x6e,0x01,0xe4,0x00,0x01] +v_dot2c_f32_f16_dpp v5, v1, v2 quad_perm:[0,1,2,3] row_mask:0x0 bank_mask:0x1 + +// CHECK: encoding: [0xfa,0x04,0x0a,0x6e,0x01,0xe4,0x00,0x03] +v_dot2c_f32_f16_dpp v5, v1, v2 quad_perm:[0,1,2,3] row_mask:0x0 bank_mask:0x3 + +// CHECK: encoding: [0xfa,0x04,0x0a,0x6e,0x01,0xe4,0x00,0x0f] +v_dot2c_f32_f16_dpp v5, v1, v2 quad_perm:[0,1,2,3] row_mask:0x0 bank_mask:0xf + +// CHECK: encoding: [0xfa,0x04,0x0a,0x6e,0x01,0xe4,0x00,0x0f] +v_dot2c_f32_f16_dpp v5, v1, v2 quad_perm:[0,1,2,3] row_mask:0x0 + +// CHECK: encoding: [0xfa,0x04,0x0a,0x6e,0x01,0xe4,0x08,0x00] +v_dot2c_f32_f16_dpp v5, v1, v2 quad_perm:[0,1,2,3] row_mask:0x0 bank_mask:0x0 bound_ctrl:0 + +// CHECK: encoding: [0xfa,0x04,0x0a,0x6e,0x01,0xe4,0x10,0x00] +v_dot2c_f32_f16_dpp v5, -v1, v2 quad_perm:[0,1,2,3] row_mask:0x0 bank_mask:0x0 + +// CHECK: encoding: [0xfa,0x04,0x0a,0x6e,0x01,0xe4,0x20,0x00] +v_dot2c_f32_f16_dpp v5, |v1|, v2 quad_perm:[0,1,2,3] row_mask:0x0 bank_mask:0x0 + +// CHECK: encoding: [0xfa,0x04,0x0a,0x6e,0x01,0xe4,0x40,0x00] +v_dot2c_f32_f16_dpp v5, v1, -v2 quad_perm:[0,1,2,3] row_mask:0x0 bank_mask:0x0 + +// CHECK: encoding: [0xfa,0x04,0x0a,0x6e,0x01,0xe4,0x80,0x00] +v_dot2c_f32_f16_dpp v5, v1, |v2| quad_perm:[0,1,2,3] row_mask:0x0 bank_mask:0x0 + +// CHECK: encoding: [0x01,0x05,0x0a,0x70] +v_dot2c_i32_i16 v5, v1, v2 + +// CHECK: encoding: [0x01,0x05,0xfe,0x71] +v_dot2c_i32_i16 v255, v1, v2 + +// CHECK: encoding: [0xfa,0x04,0x0a,0x70,0x01,0xe4,0x00,0x00] +v_dot2c_i32_i16_dpp v5, v1, v2 quad_perm:[0,1,2,3] row_mask:0x0 bank_mask:0x0 + +// CHECK: encoding: [0xfa,0x04,0xfe,0x71,0x01,0xe4,0x00,0x00] +v_dot2c_i32_i16_dpp v255, v1, v2 quad_perm:[0,1,2,3] row_mask:0x0 bank_mask:0x0 + +// CHECK: encoding: [0xfa,0x04,0x0a,0x70,0xff,0xe4,0x00,0x00] +v_dot2c_i32_i16_dpp v5, v255, v2 quad_perm:[0,1,2,3] row_mask:0x0 bank_mask:0x0 + +// CHECK: encoding: [0xfa,0xfe,0x0b,0x70,0x01,0xe4,0x00,0x00] +v_dot2c_i32_i16_dpp v5, v1, v255 quad_perm:[0,1,2,3] row_mask:0x0 bank_mask:0x0 + +// CHECK: encoding: [0xfa,0x04,0x0a,0x70,0x01,0x1b,0x00,0x00] +v_dot2c_i32_i16_dpp v5, v1, v2 quad_perm:[3,2,1,0] row_mask:0x0 bank_mask:0x0 + +// CHECK: encoding: [0xfa,0x04,0x0a,0x70,0x01,0x40,0x01,0x00] +v_dot2c_i32_i16_dpp v5, v1, v2 row_mirror row_mask:0x0 bank_mask:0x0 + +// CHECK: encoding: [0xfa,0x04,0x0a,0x70,0x01,0x41,0x01,0x00] +v_dot2c_i32_i16_dpp v5, v1, v2 row_half_mirror row_mask:0x0 bank_mask:0x0 + +// CHECK: encoding: [0xfa,0x04,0x0a,0x70,0x01,0x42,0x01,0x00] +v_dot2c_i32_i16_dpp v5, v1, v2 row_bcast:15 row_mask:0x0 bank_mask:0x0 + +// CHECK: encoding: [0xfa,0x04,0x0a,0x70,0x01,0x43,0x01,0x00] +v_dot2c_i32_i16_dpp v5, v1, v2 row_bcast:31 row_mask:0x0 bank_mask:0x0 + +// CHECK: encoding: [0xfa,0x04,0x0a,0x70,0x01,0x30,0x01,0x00] +v_dot2c_i32_i16_dpp v5, v1, v2 wave_shl:1 row_mask:0x0 bank_mask:0x0 + +// CHECK: encoding: [0xfa,0x04,0x0a,0x70,0x01,0x34,0x01,0x00] +v_dot2c_i32_i16_dpp v5, v1, v2 wave_rol:1 row_mask:0x0 bank_mask:0x0 + +// CHECK: encoding: [0xfa,0x04,0x0a,0x70,0x01,0x38,0x01,0x00] +v_dot2c_i32_i16_dpp v5, v1, v2 wave_shr:1 row_mask:0x0 bank_mask:0x0 + +// CHECK: encoding: [0xfa,0x04,0x0a,0x70,0x01,0x3c,0x01,0x00] +v_dot2c_i32_i16_dpp v5, v1, v2 wave_ror:1 row_mask:0x0 bank_mask:0x0 + +// CHECK: encoding: [0xfa,0x04,0x0a,0x70,0x01,0x01,0x01,0x00] +v_dot2c_i32_i16_dpp v5, v1, v2 row_shl:1 row_mask:0x0 bank_mask:0x0 + +// CHECK: encoding: [0xfa,0x04,0x0a,0x70,0x01,0x0f,0x01,0x00] +v_dot2c_i32_i16_dpp v5, v1, v2 row_shl:15 row_mask:0x0 bank_mask:0x0 + +// CHECK: encoding: [0xfa,0x04,0x0a,0x70,0x01,0x11,0x01,0x00] +v_dot2c_i32_i16_dpp v5, v1, v2 row_shr:1 row_mask:0x0 bank_mask:0x0 + +// CHECK: encoding: [0xfa,0x04,0x0a,0x70,0x01,0x1f,0x01,0x00] +v_dot2c_i32_i16_dpp v5, v1, v2 row_shr:15 row_mask:0x0 bank_mask:0x0 + +// CHECK: encoding: [0xfa,0x04,0x0a,0x70,0x01,0x21,0x01,0x00] +v_dot2c_i32_i16_dpp v5, v1, v2 row_ror:1 row_mask:0x0 bank_mask:0x0 + +// CHECK: encoding: [0xfa,0x04,0x0a,0x70,0x01,0x2f,0x01,0x00] +v_dot2c_i32_i16_dpp v5, v1, v2 row_ror:15 row_mask:0x0 bank_mask:0x0 + +// CHECK: encoding: [0xfa,0x04,0x0a,0x70,0x01,0xe4,0x00,0x10] +v_dot2c_i32_i16_dpp v5, v1, v2 quad_perm:[0,1,2,3] row_mask:0x1 bank_mask:0x0 + +// CHECK: encoding: [0xfa,0x04,0x0a,0x70,0x01,0xe4,0x00,0x30] +v_dot2c_i32_i16_dpp v5, v1, v2 quad_perm:[0,1,2,3] row_mask:0x3 bank_mask:0x0 + +// CHECK: encoding: [0xfa,0x04,0x0a,0x70,0x01,0xe4,0x00,0xf0] +v_dot2c_i32_i16_dpp v5, v1, v2 quad_perm:[0,1,2,3] row_mask:0xf bank_mask:0x0 + +// CHECK: encoding: [0xfa,0x04,0x0a,0x70,0x01,0xe4,0x00,0xf0] +v_dot2c_i32_i16_dpp v5, v1, v2 quad_perm:[0,1,2,3] bank_mask:0x0 + +// CHECK: encoding: [0xfa,0x04,0x0a,0x70,0x01,0xe4,0x00,0x01] +v_dot2c_i32_i16_dpp v5, v1, v2 quad_perm:[0,1,2,3] row_mask:0x0 bank_mask:0x1 + +// CHECK: encoding: [0xfa,0x04,0x0a,0x70,0x01,0xe4,0x00,0x03] +v_dot2c_i32_i16_dpp v5, v1, v2 quad_perm:[0,1,2,3] row_mask:0x0 bank_mask:0x3 + +// CHECK: encoding: [0xfa,0x04,0x0a,0x70,0x01,0xe4,0x00,0x0f] +v_dot2c_i32_i16_dpp v5, v1, v2 quad_perm:[0,1,2,3] row_mask:0x0 bank_mask:0xf + +// CHECK: encoding: [0xfa,0x04,0x0a,0x70,0x01,0xe4,0x00,0x0f] +v_dot2c_i32_i16_dpp v5, v1, v2 quad_perm:[0,1,2,3] row_mask:0x0 + +// CHECK: encoding: [0xfa,0x04,0x0a,0x70,0x01,0xe4,0x08,0x00] +v_dot2c_i32_i16_dpp v5, v1, v2 quad_perm:[0,1,2,3] row_mask:0x0 bank_mask:0x0 bound_ctrl:0 + +// CHECK: encoding: [0x01,0x05,0x0a,0x72] +v_dot4c_i32_i8 v5, v1, v2 + +// CHECK: encoding: [0x01,0x05,0xfe,0x73] +v_dot4c_i32_i8 v255, v1, v2 + +// CHECK: encoding: [0xfa,0x04,0x0a,0x72,0x01,0xe4,0x00,0x00] +v_dot4c_i32_i8_dpp v5, v1, v2 quad_perm:[0,1,2,3] row_mask:0x0 bank_mask:0x0 + +// CHECK: encoding: [0xfa,0x04,0xfe,0x73,0x01,0xe4,0x00,0x00] +v_dot4c_i32_i8_dpp v255, v1, v2 quad_perm:[0,1,2,3] row_mask:0x0 bank_mask:0x0 + +// CHECK: encoding: [0xfa,0x04,0x0a,0x72,0xff,0xe4,0x00,0x00] +v_dot4c_i32_i8_dpp v5, v255, v2 quad_perm:[0,1,2,3] row_mask:0x0 bank_mask:0x0 + +// CHECK: encoding: [0xfa,0xfe,0x0b,0x72,0x01,0xe4,0x00,0x00] +v_dot4c_i32_i8_dpp v5, v1, v255 quad_perm:[0,1,2,3] row_mask:0x0 bank_mask:0x0 + +// CHECK: encoding: [0xfa,0x04,0x0a,0x72,0x01,0x1b,0x00,0x00] +v_dot4c_i32_i8_dpp v5, v1, v2 quad_perm:[3,2,1,0] row_mask:0x0 bank_mask:0x0 + +// CHECK: encoding: [0xfa,0x04,0x0a,0x72,0x01,0x40,0x01,0x00] +v_dot4c_i32_i8_dpp v5, v1, v2 row_mirror row_mask:0x0 bank_mask:0x0 + +// CHECK: encoding: [0xfa,0x04,0x0a,0x72,0x01,0x41,0x01,0x00] +v_dot4c_i32_i8_dpp v5, v1, v2 row_half_mirror row_mask:0x0 bank_mask:0x0 + +// CHECK: encoding: [0xfa,0x04,0x0a,0x72,0x01,0x42,0x01,0x00] +v_dot4c_i32_i8_dpp v5, v1, v2 row_bcast:15 row_mask:0x0 bank_mask:0x0 + +// CHECK: encoding: [0xfa,0x04,0x0a,0x72,0x01,0x43,0x01,0x00] +v_dot4c_i32_i8_dpp v5, v1, v2 row_bcast:31 row_mask:0x0 bank_mask:0x0 + +// CHECK: encoding: [0xfa,0x04,0x0a,0x72,0x01,0x30,0x01,0x00] +v_dot4c_i32_i8_dpp v5, v1, v2 wave_shl:1 row_mask:0x0 bank_mask:0x0 + +// CHECK: encoding: [0xfa,0x04,0x0a,0x72,0x01,0x34,0x01,0x00] +v_dot4c_i32_i8_dpp v5, v1, v2 wave_rol:1 row_mask:0x0 bank_mask:0x0 + +// CHECK: encoding: [0xfa,0x04,0x0a,0x72,0x01,0x38,0x01,0x00] +v_dot4c_i32_i8_dpp v5, v1, v2 wave_shr:1 row_mask:0x0 bank_mask:0x0 + +// CHECK: encoding: [0xfa,0x04,0x0a,0x72,0x01,0x3c,0x01,0x00] +v_dot4c_i32_i8_dpp v5, v1, v2 wave_ror:1 row_mask:0x0 bank_mask:0x0 + +// CHECK: encoding: [0xfa,0x04,0x0a,0x72,0x01,0x01,0x01,0x00] +v_dot4c_i32_i8_dpp v5, v1, v2 row_shl:1 row_mask:0x0 bank_mask:0x0 + +// CHECK: encoding: [0xfa,0x04,0x0a,0x72,0x01,0x0f,0x01,0x00] +v_dot4c_i32_i8_dpp v5, v1, v2 row_shl:15 row_mask:0x0 bank_mask:0x0 + +// CHECK: encoding: [0xfa,0x04,0x0a,0x72,0x01,0x11,0x01,0x00] +v_dot4c_i32_i8_dpp v5, v1, v2 row_shr:1 row_mask:0x0 bank_mask:0x0 + +// CHECK: encoding: [0xfa,0x04,0x0a,0x72,0x01,0x1f,0x01,0x00] +v_dot4c_i32_i8_dpp v5, v1, v2 row_shr:15 row_mask:0x0 bank_mask:0x0 + +// CHECK: encoding: [0xfa,0x04,0x0a,0x72,0x01,0x21,0x01,0x00] +v_dot4c_i32_i8_dpp v5, v1, v2 row_ror:1 row_mask:0x0 bank_mask:0x0 + +// CHECK: encoding: [0xfa,0x04,0x0a,0x72,0x01,0x2f,0x01,0x00] +v_dot4c_i32_i8_dpp v5, v1, v2 row_ror:15 row_mask:0x0 bank_mask:0x0 + +// CHECK: encoding: [0xfa,0x04,0x0a,0x72,0x01,0xe4,0x00,0x10] +v_dot4c_i32_i8_dpp v5, v1, v2 quad_perm:[0,1,2,3] row_mask:0x1 bank_mask:0x0 + +// CHECK: encoding: [0xfa,0x04,0x0a,0x72,0x01,0xe4,0x00,0x30] +v_dot4c_i32_i8_dpp v5, v1, v2 quad_perm:[0,1,2,3] row_mask:0x3 bank_mask:0x0 + +// CHECK: encoding: [0xfa,0x04,0x0a,0x72,0x01,0xe4,0x00,0xf0] +v_dot4c_i32_i8_dpp v5, v1, v2 quad_perm:[0,1,2,3] row_mask:0xf bank_mask:0x0 + +// CHECK: encoding: [0xfa,0x04,0x0a,0x72,0x01,0xe4,0x00,0xf0] +v_dot4c_i32_i8_dpp v5, v1, v2 quad_perm:[0,1,2,3] bank_mask:0x0 + +// CHECK: encoding: [0xfa,0x04,0x0a,0x72,0x01,0xe4,0x00,0x01] +v_dot4c_i32_i8_dpp v5, v1, v2 quad_perm:[0,1,2,3] row_mask:0x0 bank_mask:0x1 + +// CHECK: encoding: [0xfa,0x04,0x0a,0x72,0x01,0xe4,0x00,0x03] +v_dot4c_i32_i8_dpp v5, v1, v2 quad_perm:[0,1,2,3] row_mask:0x0 bank_mask:0x3 + +// CHECK: encoding: [0xfa,0x04,0x0a,0x72,0x01,0xe4,0x00,0x0f] +v_dot4c_i32_i8_dpp v5, v1, v2 quad_perm:[0,1,2,3] row_mask:0x0 bank_mask:0xf + +// CHECK: encoding: [0xfa,0x04,0x0a,0x72,0x01,0xe4,0x00,0x0f] +v_dot4c_i32_i8_dpp v5, v1, v2 quad_perm:[0,1,2,3] row_mask:0x0 + +// CHECK: encoding: [0xfa,0x04,0x0a,0x72,0x01,0xe4,0x08,0x00] +v_dot4c_i32_i8_dpp v5, v1, v2 quad_perm:[0,1,2,3] row_mask:0x0 bank_mask:0x0 bound_ctrl:0 + +// CHECK: encoding: [0x01,0x05,0x0a,0x74] +v_dot8c_i32_i4 v5, v1, v2 + +// CHECK: encoding: [0x01,0x05,0xfe,0x75] +v_dot8c_i32_i4 v255, v1, v2 + +// CHECK: encoding: [0xfa,0x04,0x0a,0x74,0x01,0xe4,0x00,0x00] +v_dot8c_i32_i4_dpp v5, v1, v2 quad_perm:[0,1,2,3] row_mask:0x0 bank_mask:0x0 + +// CHECK: encoding: [0xfa,0x04,0xfe,0x75,0x01,0xe4,0x00,0x00] +v_dot8c_i32_i4_dpp v255, v1, v2 quad_perm:[0,1,2,3] row_mask:0x0 bank_mask:0x0 + +// CHECK: encoding: [0xfa,0x04,0x0a,0x74,0xff,0xe4,0x00,0x00] +v_dot8c_i32_i4_dpp v5, v255, v2 quad_perm:[0,1,2,3] row_mask:0x0 bank_mask:0x0 + +// CHECK: encoding: [0xfa,0xfe,0x0b,0x74,0x01,0xe4,0x00,0x00] +v_dot8c_i32_i4_dpp v5, v1, v255 quad_perm:[0,1,2,3] row_mask:0x0 bank_mask:0x0 + +// CHECK: encoding: [0xfa,0x04,0x0a,0x74,0x01,0x1b,0x00,0x00] +v_dot8c_i32_i4_dpp v5, v1, v2 quad_perm:[3,2,1,0] row_mask:0x0 bank_mask:0x0 + +// CHECK: encoding: [0xfa,0x04,0x0a,0x74,0x01,0x40,0x01,0x00] +v_dot8c_i32_i4_dpp v5, v1, v2 row_mirror row_mask:0x0 bank_mask:0x0 + +// CHECK: encoding: [0xfa,0x04,0x0a,0x74,0x01,0x41,0x01,0x00] +v_dot8c_i32_i4_dpp v5, v1, v2 row_half_mirror row_mask:0x0 bank_mask:0x0 + +// CHECK: encoding: [0xfa,0x04,0x0a,0x74,0x01,0x42,0x01,0x00] +v_dot8c_i32_i4_dpp v5, v1, v2 row_bcast:15 row_mask:0x0 bank_mask:0x0 + +// CHECK: encoding: [0xfa,0x04,0x0a,0x74,0x01,0x43,0x01,0x00] +v_dot8c_i32_i4_dpp v5, v1, v2 row_bcast:31 row_mask:0x0 bank_mask:0x0 + +// CHECK: encoding: [0xfa,0x04,0x0a,0x74,0x01,0x30,0x01,0x00] +v_dot8c_i32_i4_dpp v5, v1, v2 wave_shl:1 row_mask:0x0 bank_mask:0x0 + +// CHECK: encoding: [0xfa,0x04,0x0a,0x74,0x01,0x34,0x01,0x00] +v_dot8c_i32_i4_dpp v5, v1, v2 wave_rol:1 row_mask:0x0 bank_mask:0x0 + +// CHECK: encoding: [0xfa,0x04,0x0a,0x74,0x01,0x38,0x01,0x00] +v_dot8c_i32_i4_dpp v5, v1, v2 wave_shr:1 row_mask:0x0 bank_mask:0x0 + +// CHECK: encoding: [0xfa,0x04,0x0a,0x74,0x01,0x3c,0x01,0x00] +v_dot8c_i32_i4_dpp v5, v1, v2 wave_ror:1 row_mask:0x0 bank_mask:0x0 + +// CHECK: encoding: [0xfa,0x04,0x0a,0x74,0x01,0x01,0x01,0x00] +v_dot8c_i32_i4_dpp v5, v1, v2 row_shl:1 row_mask:0x0 bank_mask:0x0 + +// CHECK: encoding: [0xfa,0x04,0x0a,0x74,0x01,0x0f,0x01,0x00] +v_dot8c_i32_i4_dpp v5, v1, v2 row_shl:15 row_mask:0x0 bank_mask:0x0 + +// CHECK: encoding: [0xfa,0x04,0x0a,0x74,0x01,0x11,0x01,0x00] +v_dot8c_i32_i4_dpp v5, v1, v2 row_shr:1 row_mask:0x0 bank_mask:0x0 + +// CHECK: encoding: [0xfa,0x04,0x0a,0x74,0x01,0x1f,0x01,0x00] +v_dot8c_i32_i4_dpp v5, v1, v2 row_shr:15 row_mask:0x0 bank_mask:0x0 + +// CHECK: encoding: [0xfa,0x04,0x0a,0x74,0x01,0x21,0x01,0x00] +v_dot8c_i32_i4_dpp v5, v1, v2 row_ror:1 row_mask:0x0 bank_mask:0x0 + +// CHECK: encoding: [0xfa,0x04,0x0a,0x74,0x01,0x2f,0x01,0x00] +v_dot8c_i32_i4_dpp v5, v1, v2 row_ror:15 row_mask:0x0 bank_mask:0x0 + +// CHECK: encoding: [0xfa,0x04,0x0a,0x74,0x01,0xe4,0x00,0x10] +v_dot8c_i32_i4_dpp v5, v1, v2 quad_perm:[0,1,2,3] row_mask:0x1 bank_mask:0x0 + +// CHECK: encoding: [0xfa,0x04,0x0a,0x74,0x01,0xe4,0x00,0x30] +v_dot8c_i32_i4_dpp v5, v1, v2 quad_perm:[0,1,2,3] row_mask:0x3 bank_mask:0x0 + +// CHECK: encoding: [0xfa,0x04,0x0a,0x74,0x01,0xe4,0x00,0xf0] +v_dot8c_i32_i4_dpp v5, v1, v2 quad_perm:[0,1,2,3] row_mask:0xf bank_mask:0x0 + +// CHECK: encoding: [0xfa,0x04,0x0a,0x74,0x01,0xe4,0x00,0xf0] +v_dot8c_i32_i4_dpp v5, v1, v2 quad_perm:[0,1,2,3] bank_mask:0x0 + +// CHECK: encoding: [0xfa,0x04,0x0a,0x74,0x01,0xe4,0x00,0x01] +v_dot8c_i32_i4_dpp v5, v1, v2 quad_perm:[0,1,2,3] row_mask:0x0 bank_mask:0x1 + +// CHECK: encoding: [0xfa,0x04,0x0a,0x74,0x01,0xe4,0x00,0x03] +v_dot8c_i32_i4_dpp v5, v1, v2 quad_perm:[0,1,2,3] row_mask:0x0 bank_mask:0x3 + +// CHECK: encoding: [0xfa,0x04,0x0a,0x74,0x01,0xe4,0x00,0x0f] +v_dot8c_i32_i4_dpp v5, v1, v2 quad_perm:[0,1,2,3] row_mask:0x0 bank_mask:0xf + +// CHECK: encoding: [0xfa,0x04,0x0a,0x74,0x01,0xe4,0x00,0x0f] +v_dot8c_i32_i4_dpp v5, v1, v2 quad_perm:[0,1,2,3] row_mask:0x0 + +// CHECK: encoding: [0xfa,0x04,0x0a,0x74,0x01,0xe4,0x08,0x00] +v_dot8c_i32_i4_dpp v5, v1, v2 quad_perm:[0,1,2,3] row_mask:0x0 bank_mask:0x0 bound_ctrl:0 + // CHECK: encoding: [0x01,0x05,0x0a,0x78] v_pk_fmac_f16 v5, v1, v2 Index: test/MC/Disassembler/AMDGPU/xdl-insts-gfx908.txt =================================================================== --- test/MC/Disassembler/AMDGPU/xdl-insts-gfx908.txt +++ test/MC/Disassembler/AMDGPU/xdl-insts-gfx908.txt @@ -1,5 +1,353 @@ # RUN: llvm-mc -arch=amdgcn -mcpu=gfx908 -disassemble -show-encoding < %s | FileCheck %s +# CHECK: v_dot2c_f32_f16_e32 v5, v1, v2 ; encoding: [0x01,0x05,0x0a,0x6e] +0x01,0x05,0x0a,0x6e + +# CHECK: v_dot2c_f32_f16_e32 v255, v1, v2 ; encoding: [0x01,0x05,0xfe,0x6f] +0x01,0x05,0xfe,0x6f + +# CHECK: v_dot2c_f32_f16_dpp v5, v1, v2 quad_perm:[0,1,2,3] row_mask:0x0 bank_mask:0x0 ; encoding: [0xfa,0x04,0x0a,0x6e,0x01,0xe4,0x00,0x00] +0xfa,0x04,0x0a,0x6e,0x01,0xe4,0x00,0x00 + +# CHECK: v_dot2c_f32_f16_dpp v255, v1, v2 quad_perm:[0,1,2,3] row_mask:0x0 bank_mask:0x0 ; encoding: [0xfa,0x04,0xfe,0x6f,0x01,0xe4,0x00,0x00] +0xfa,0x04,0xfe,0x6f,0x01,0xe4,0x00,0x00 + +# CHECK: v_dot2c_f32_f16_dpp v5, v255, v2 quad_perm:[0,1,2,3] row_mask:0x0 bank_mask:0x0 ; encoding: [0xfa,0x04,0x0a,0x6e,0xff,0xe4,0x00,0x00] +0xfa,0x04,0x0a,0x6e,0xff,0xe4,0x00,0x00 + +# CHECK: v_dot2c_f32_f16_dpp v5, v1, v255 quad_perm:[0,1,2,3] row_mask:0x0 bank_mask:0x0 ; encoding: [0xfa,0xfe,0x0b,0x6e,0x01,0xe4,0x00,0x00] +0xfa,0xfe,0x0b,0x6e,0x01,0xe4,0x00,0x00 + +# CHECK: v_dot2c_f32_f16_dpp v5, v1, v2 quad_perm:[3,2,1,0] row_mask:0x0 bank_mask:0x0 ; encoding: [0xfa,0x04,0x0a,0x6e,0x01,0x1b,0x00,0x00] +0xfa,0x04,0x0a,0x6e,0x01,0x1b,0x00,0x00 + +# CHECK: v_dot2c_f32_f16_dpp v5, v1, v2 row_mirror row_mask:0x0 bank_mask:0x0 ; encoding: [0xfa,0x04,0x0a,0x6e,0x01,0x40,0x01,0x00] +0xfa,0x04,0x0a,0x6e,0x01,0x40,0x01,0x00 + +# CHECK: v_dot2c_f32_f16_dpp v5, v1, v2 row_half_mirror row_mask:0x0 bank_mask:0x0 ; encoding: [0xfa,0x04,0x0a,0x6e,0x01,0x41,0x01,0x00] +0xfa,0x04,0x0a,0x6e,0x01,0x41,0x01,0x00 + +# CHECK: v_dot2c_f32_f16_dpp v5, v1, v2 row_bcast:15 row_mask:0x0 bank_mask:0x0 ; encoding: [0xfa,0x04,0x0a,0x6e,0x01,0x42,0x01,0x00] +0xfa,0x04,0x0a,0x6e,0x01,0x42,0x01,0x00 + +# CHECK: v_dot2c_f32_f16_dpp v5, v1, v2 row_bcast:31 row_mask:0x0 bank_mask:0x0 ; encoding: [0xfa,0x04,0x0a,0x6e,0x01,0x43,0x01,0x00] +0xfa,0x04,0x0a,0x6e,0x01,0x43,0x01,0x00 + +# CHECK: v_dot2c_f32_f16_dpp v5, v1, v2 wave_shl:1 row_mask:0x0 bank_mask:0x0 ; encoding: [0xfa,0x04,0x0a,0x6e,0x01,0x30,0x01,0x00] +0xfa,0x04,0x0a,0x6e,0x01,0x30,0x01,0x00 + +# CHECK: v_dot2c_f32_f16_dpp v5, v1, v2 wave_rol:1 row_mask:0x0 bank_mask:0x0 ; encoding: [0xfa,0x04,0x0a,0x6e,0x01,0x34,0x01,0x00] +0xfa,0x04,0x0a,0x6e,0x01,0x34,0x01,0x00 + +# CHECK: v_dot2c_f32_f16_dpp v5, v1, v2 wave_shr:1 row_mask:0x0 bank_mask:0x0 ; encoding: [0xfa,0x04,0x0a,0x6e,0x01,0x38,0x01,0x00] +0xfa,0x04,0x0a,0x6e,0x01,0x38,0x01,0x00 + +# CHECK: v_dot2c_f32_f16_dpp v5, v1, v2 wave_ror:1 row_mask:0x0 bank_mask:0x0 ; encoding: [0xfa,0x04,0x0a,0x6e,0x01,0x3c,0x01,0x00] +0xfa,0x04,0x0a,0x6e,0x01,0x3c,0x01,0x00 + +# CHECK: v_dot2c_f32_f16_dpp v5, v1, v2 row_shl:1 row_mask:0x0 bank_mask:0x0 ; encoding: [0xfa,0x04,0x0a,0x6e,0x01,0x01,0x01,0x00] +0xfa,0x04,0x0a,0x6e,0x01,0x01,0x01,0x00 + +# CHECK: v_dot2c_f32_f16_dpp v5, v1, v2 row_shl:15 row_mask:0x0 bank_mask:0x0 ; encoding: [0xfa,0x04,0x0a,0x6e,0x01,0x0f,0x01,0x00] +0xfa,0x04,0x0a,0x6e,0x01,0x0f,0x01,0x00 + +# CHECK: v_dot2c_f32_f16_dpp v5, v1, v2 row_shr:1 row_mask:0x0 bank_mask:0x0 ; encoding: [0xfa,0x04,0x0a,0x6e,0x01,0x11,0x01,0x00] +0xfa,0x04,0x0a,0x6e,0x01,0x11,0x01,0x00 + +# CHECK: v_dot2c_f32_f16_dpp v5, v1, v2 row_shr:15 row_mask:0x0 bank_mask:0x0 ; encoding: [0xfa,0x04,0x0a,0x6e,0x01,0x1f,0x01,0x00] +0xfa,0x04,0x0a,0x6e,0x01,0x1f,0x01,0x00 + +# CHECK: v_dot2c_f32_f16_dpp v5, v1, v2 row_ror:1 row_mask:0x0 bank_mask:0x0 ; encoding: [0xfa,0x04,0x0a,0x6e,0x01,0x21,0x01,0x00] +0xfa,0x04,0x0a,0x6e,0x01,0x21,0x01,0x00 + +# CHECK: v_dot2c_f32_f16_dpp v5, v1, v2 row_ror:15 row_mask:0x0 bank_mask:0x0 ; encoding: [0xfa,0x04,0x0a,0x6e,0x01,0x2f,0x01,0x00] +0xfa,0x04,0x0a,0x6e,0x01,0x2f,0x01,0x00 + +# CHECK: v_dot2c_f32_f16_dpp v5, v1, v2 quad_perm:[0,1,2,3] row_mask:0x1 bank_mask:0x0 ; encoding: [0xfa,0x04,0x0a,0x6e,0x01,0xe4,0x00,0x10] +0xfa,0x04,0x0a,0x6e,0x01,0xe4,0x00,0x10 + +# CHECK: v_dot2c_f32_f16_dpp v5, v1, v2 quad_perm:[0,1,2,3] row_mask:0x3 bank_mask:0x0 ; encoding: [0xfa,0x04,0x0a,0x6e,0x01,0xe4,0x00,0x30] +0xfa,0x04,0x0a,0x6e,0x01,0xe4,0x00,0x30 + +# CHECK: v_dot2c_f32_f16_dpp v5, v1, v2 quad_perm:[0,1,2,3] row_mask:0xf bank_mask:0x0 ; encoding: [0xfa,0x04,0x0a,0x6e,0x01,0xe4,0x00,0xf0] +0xfa,0x04,0x0a,0x6e,0x01,0xe4,0x00,0xf0 + +# CHECK: v_dot2c_f32_f16_dpp v5, v1, v2 quad_perm:[0,1,2,3] row_mask:0x0 bank_mask:0x1 ; encoding: [0xfa,0x04,0x0a,0x6e,0x01,0xe4,0x00,0x01] +0xfa,0x04,0x0a,0x6e,0x01,0xe4,0x00,0x01 + +# CHECK: v_dot2c_f32_f16_dpp v5, v1, v2 quad_perm:[0,1,2,3] row_mask:0x0 bank_mask:0x3 ; encoding: [0xfa,0x04,0x0a,0x6e,0x01,0xe4,0x00,0x03] +0xfa,0x04,0x0a,0x6e,0x01,0xe4,0x00,0x03 + +# CHECK: v_dot2c_f32_f16_dpp v5, v1, v2 quad_perm:[0,1,2,3] row_mask:0x0 bank_mask:0xf ; encoding: [0xfa,0x04,0x0a,0x6e,0x01,0xe4,0x00,0x0f] +0xfa,0x04,0x0a,0x6e,0x01,0xe4,0x00,0x0f + +# CHECK: v_dot2c_f32_f16_dpp v5, v1, v2 quad_perm:[0,1,2,3] row_mask:0x0 bank_mask:0x0 bound_ctrl:0 ; encoding: [0xfa,0x04,0x0a,0x6e,0x01,0xe4,0x08,0x00] +0xfa,0x04,0x0a,0x6e,0x01,0xe4,0x08,0x00 + +# CHECK: v_dot2c_f32_f16_dpp v5, -v1, v2 quad_perm:[0,1,2,3] row_mask:0x0 bank_mask:0x0 ; encoding: [0xfa,0x04,0x0a,0x6e,0x01,0xe4,0x10,0x00] +0xfa,0x04,0x0a,0x6e,0x01,0xe4,0x10,0x00 + +# CHECK: v_dot2c_f32_f16_dpp v5, |v1|, v2 quad_perm:[0,1,2,3] row_mask:0x0 bank_mask:0x0 ; encoding: [0xfa,0x04,0x0a,0x6e,0x01,0xe4,0x20,0x00] +0xfa,0x04,0x0a,0x6e,0x01,0xe4,0x20,0x00 + +# CHECK: v_dot2c_f32_f16_dpp v5, v1, -v2 quad_perm:[0,1,2,3] row_mask:0x0 bank_mask:0x0 ; encoding: [0xfa,0x04,0x0a,0x6e,0x01,0xe4,0x40,0x00] +0xfa,0x04,0x0a,0x6e,0x01,0xe4,0x40,0x00 + +# CHECK: v_dot2c_f32_f16_dpp v5, v1, |v2| quad_perm:[0,1,2,3] row_mask:0x0 bank_mask:0x0 ; encoding: [0xfa,0x04,0x0a,0x6e,0x01,0xe4,0x80,0x00] +0xfa,0x04,0x0a,0x6e,0x01,0xe4,0x80,0x00 + +# CHECK: v_dot2c_i32_i16_e32 v5, v1, v2 ; encoding: [0x01,0x05,0x0a,0x70] +0x01,0x05,0x0a,0x70 + +# CHECK: v_dot2c_i32_i16_e32 v255, v1, v2 ; encoding: [0x01,0x05,0xfe,0x71] +0x01,0x05,0xfe,0x71 + +# CHECK: v_dot2c_i32_i16_dpp v5, v1, v2 quad_perm:[0,1,2,3] row_mask:0x0 bank_mask:0x0 ; encoding: [0xfa,0x04,0x0a,0x70,0x01,0xe4,0x00,0x00] +0xfa,0x04,0x0a,0x70,0x01,0xe4,0x00,0x00 + +# CHECK: v_dot2c_i32_i16_dpp v255, v1, v2 quad_perm:[0,1,2,3] row_mask:0x0 bank_mask:0x0 ; encoding: [0xfa,0x04,0xfe,0x71,0x01,0xe4,0x00,0x00] +0xfa,0x04,0xfe,0x71,0x01,0xe4,0x00,0x00 + +# CHECK: v_dot2c_i32_i16_dpp v5, v255, v2 quad_perm:[0,1,2,3] row_mask:0x0 bank_mask:0x0 ; encoding: [0xfa,0x04,0x0a,0x70,0xff,0xe4,0x00,0x00] +0xfa,0x04,0x0a,0x70,0xff,0xe4,0x00,0x00 + +# CHECK: v_dot2c_i32_i16_dpp v5, v1, v255 quad_perm:[0,1,2,3] row_mask:0x0 bank_mask:0x0 ; encoding: [0xfa,0xfe,0x0b,0x70,0x01,0xe4,0x00,0x00] +0xfa,0xfe,0x0b,0x70,0x01,0xe4,0x00,0x00 + +# CHECK: v_dot2c_i32_i16_dpp v5, v1, v2 quad_perm:[3,2,1,0] row_mask:0x0 bank_mask:0x0 ; encoding: [0xfa,0x04,0x0a,0x70,0x01,0x1b,0x00,0x00] +0xfa,0x04,0x0a,0x70,0x01,0x1b,0x00,0x00 + +# CHECK: v_dot2c_i32_i16_dpp v5, v1, v2 row_mirror row_mask:0x0 bank_mask:0x0 ; encoding: [0xfa,0x04,0x0a,0x70,0x01,0x40,0x01,0x00] +0xfa,0x04,0x0a,0x70,0x01,0x40,0x01,0x00 + +# CHECK: v_dot2c_i32_i16_dpp v5, v1, v2 row_half_mirror row_mask:0x0 bank_mask:0x0 ; encoding: [0xfa,0x04,0x0a,0x70,0x01,0x41,0x01,0x00] +0xfa,0x04,0x0a,0x70,0x01,0x41,0x01,0x00 + +# CHECK: v_dot2c_i32_i16_dpp v5, v1, v2 row_bcast:15 row_mask:0x0 bank_mask:0x0 ; encoding: [0xfa,0x04,0x0a,0x70,0x01,0x42,0x01,0x00] +0xfa,0x04,0x0a,0x70,0x01,0x42,0x01,0x00 + +# CHECK: v_dot2c_i32_i16_dpp v5, v1, v2 row_bcast:31 row_mask:0x0 bank_mask:0x0 ; encoding: [0xfa,0x04,0x0a,0x70,0x01,0x43,0x01,0x00] +0xfa,0x04,0x0a,0x70,0x01,0x43,0x01,0x00 + +# CHECK: v_dot2c_i32_i16_dpp v5, v1, v2 wave_shl:1 row_mask:0x0 bank_mask:0x0 ; encoding: [0xfa,0x04,0x0a,0x70,0x01,0x30,0x01,0x00] +0xfa,0x04,0x0a,0x70,0x01,0x30,0x01,0x00 + +# CHECK: v_dot2c_i32_i16_dpp v5, v1, v2 wave_rol:1 row_mask:0x0 bank_mask:0x0 ; encoding: [0xfa,0x04,0x0a,0x70,0x01,0x34,0x01,0x00] +0xfa,0x04,0x0a,0x70,0x01,0x34,0x01,0x00 + +# CHECK: v_dot2c_i32_i16_dpp v5, v1, v2 wave_shr:1 row_mask:0x0 bank_mask:0x0 ; encoding: [0xfa,0x04,0x0a,0x70,0x01,0x38,0x01,0x00] +0xfa,0x04,0x0a,0x70,0x01,0x38,0x01,0x00 + +# CHECK: v_dot2c_i32_i16_dpp v5, v1, v2 wave_ror:1 row_mask:0x0 bank_mask:0x0 ; encoding: [0xfa,0x04,0x0a,0x70,0x01,0x3c,0x01,0x00] +0xfa,0x04,0x0a,0x70,0x01,0x3c,0x01,0x00 + +# CHECK: v_dot2c_i32_i16_dpp v5, v1, v2 row_shl:1 row_mask:0x0 bank_mask:0x0 ; encoding: [0xfa,0x04,0x0a,0x70,0x01,0x01,0x01,0x00] +0xfa,0x04,0x0a,0x70,0x01,0x01,0x01,0x00 + +# CHECK: v_dot2c_i32_i16_dpp v5, v1, v2 row_shl:15 row_mask:0x0 bank_mask:0x0 ; encoding: [0xfa,0x04,0x0a,0x70,0x01,0x0f,0x01,0x00] +0xfa,0x04,0x0a,0x70,0x01,0x0f,0x01,0x00 + +# CHECK: v_dot2c_i32_i16_dpp v5, v1, v2 row_shr:1 row_mask:0x0 bank_mask:0x0 ; encoding: [0xfa,0x04,0x0a,0x70,0x01,0x11,0x01,0x00] +0xfa,0x04,0x0a,0x70,0x01,0x11,0x01,0x00 + +# CHECK: v_dot2c_i32_i16_dpp v5, v1, v2 row_shr:15 row_mask:0x0 bank_mask:0x0 ; encoding: [0xfa,0x04,0x0a,0x70,0x01,0x1f,0x01,0x00] +0xfa,0x04,0x0a,0x70,0x01,0x1f,0x01,0x00 + +# CHECK: v_dot2c_i32_i16_dpp v5, v1, v2 row_ror:1 row_mask:0x0 bank_mask:0x0 ; encoding: [0xfa,0x04,0x0a,0x70,0x01,0x21,0x01,0x00] +0xfa,0x04,0x0a,0x70,0x01,0x21,0x01,0x00 + +# CHECK: v_dot2c_i32_i16_dpp v5, v1, v2 row_ror:15 row_mask:0x0 bank_mask:0x0 ; encoding: [0xfa,0x04,0x0a,0x70,0x01,0x2f,0x01,0x00] +0xfa,0x04,0x0a,0x70,0x01,0x2f,0x01,0x00 + +# CHECK: v_dot2c_i32_i16_dpp v5, v1, v2 quad_perm:[0,1,2,3] row_mask:0x1 bank_mask:0x0 ; encoding: [0xfa,0x04,0x0a,0x70,0x01,0xe4,0x00,0x10] +0xfa,0x04,0x0a,0x70,0x01,0xe4,0x00,0x10 + +# CHECK: v_dot2c_i32_i16_dpp v5, v1, v2 quad_perm:[0,1,2,3] row_mask:0x3 bank_mask:0x0 ; encoding: [0xfa,0x04,0x0a,0x70,0x01,0xe4,0x00,0x30] +0xfa,0x04,0x0a,0x70,0x01,0xe4,0x00,0x30 + +# CHECK: v_dot2c_i32_i16_dpp v5, v1, v2 quad_perm:[0,1,2,3] row_mask:0xf bank_mask:0x0 ; encoding: [0xfa,0x04,0x0a,0x70,0x01,0xe4,0x00,0xf0] +0xfa,0x04,0x0a,0x70,0x01,0xe4,0x00,0xf0 + +# CHECK: v_dot2c_i32_i16_dpp v5, v1, v2 quad_perm:[0,1,2,3] row_mask:0x0 bank_mask:0x1 ; encoding: [0xfa,0x04,0x0a,0x70,0x01,0xe4,0x00,0x01] +0xfa,0x04,0x0a,0x70,0x01,0xe4,0x00,0x01 + +# CHECK: v_dot2c_i32_i16_dpp v5, v1, v2 quad_perm:[0,1,2,3] row_mask:0x0 bank_mask:0x3 ; encoding: [0xfa,0x04,0x0a,0x70,0x01,0xe4,0x00,0x03] +0xfa,0x04,0x0a,0x70,0x01,0xe4,0x00,0x03 + +# CHECK: v_dot2c_i32_i16_dpp v5, v1, v2 quad_perm:[0,1,2,3] row_mask:0x0 bank_mask:0xf ; encoding: [0xfa,0x04,0x0a,0x70,0x01,0xe4,0x00,0x0f] +0xfa,0x04,0x0a,0x70,0x01,0xe4,0x00,0x0f + +# CHECK: v_dot2c_i32_i16_dpp v5, v1, v2 quad_perm:[0,1,2,3] row_mask:0x0 bank_mask:0x0 bound_ctrl:0 ; encoding: [0xfa,0x04,0x0a,0x70,0x01,0xe4,0x08,0x00] +0xfa,0x04,0x0a,0x70,0x01,0xe4,0x08,0x00 + +# CHECK: v_dot4c_i32_i8_e32 v5, v1, v2 ; encoding: [0x01,0x05,0x0a,0x72] +0x01,0x05,0x0a,0x72 + +# CHECK: v_dot4c_i32_i8_e32 v255, v1, v2 ; encoding: [0x01,0x05,0xfe,0x73] +0x01,0x05,0xfe,0x73 + +# CHECK: v_dot4c_i32_i8_dpp v5, v1, v2 quad_perm:[0,1,2,3] row_mask:0x0 bank_mask:0x0 ; encoding: [0xfa,0x04,0x0a,0x72,0x01,0xe4,0x00,0x00] +0xfa,0x04,0x0a,0x72,0x01,0xe4,0x00,0x00 + +# CHECK: v_dot4c_i32_i8_dpp v255, v1, v2 quad_perm:[0,1,2,3] row_mask:0x0 bank_mask:0x0 ; encoding: [0xfa,0x04,0xfe,0x73,0x01,0xe4,0x00,0x00] +0xfa,0x04,0xfe,0x73,0x01,0xe4,0x00,0x00 + +# CHECK: v_dot4c_i32_i8_dpp v5, v255, v2 quad_perm:[0,1,2,3] row_mask:0x0 bank_mask:0x0 ; encoding: [0xfa,0x04,0x0a,0x72,0xff,0xe4,0x00,0x00] +0xfa,0x04,0x0a,0x72,0xff,0xe4,0x00,0x00 + +# CHECK: v_dot4c_i32_i8_dpp v5, v1, v255 quad_perm:[0,1,2,3] row_mask:0x0 bank_mask:0x0 ; encoding: [0xfa,0xfe,0x0b,0x72,0x01,0xe4,0x00,0x00] +0xfa,0xfe,0x0b,0x72,0x01,0xe4,0x00,0x00 + +# CHECK: v_dot4c_i32_i8_dpp v5, v1, v2 quad_perm:[3,2,1,0] row_mask:0x0 bank_mask:0x0 ; encoding: [0xfa,0x04,0x0a,0x72,0x01,0x1b,0x00,0x00] +0xfa,0x04,0x0a,0x72,0x01,0x1b,0x00,0x00 + +# CHECK: v_dot4c_i32_i8_dpp v5, v1, v2 row_mirror row_mask:0x0 bank_mask:0x0 ; encoding: [0xfa,0x04,0x0a,0x72,0x01,0x40,0x01,0x00] +0xfa,0x04,0x0a,0x72,0x01,0x40,0x01,0x00 + +# CHECK: v_dot4c_i32_i8_dpp v5, v1, v2 row_half_mirror row_mask:0x0 bank_mask:0x0 ; encoding: [0xfa,0x04,0x0a,0x72,0x01,0x41,0x01,0x00] +0xfa,0x04,0x0a,0x72,0x01,0x41,0x01,0x00 + +# CHECK: v_dot4c_i32_i8_dpp v5, v1, v2 row_bcast:15 row_mask:0x0 bank_mask:0x0 ; encoding: [0xfa,0x04,0x0a,0x72,0x01,0x42,0x01,0x00] +0xfa,0x04,0x0a,0x72,0x01,0x42,0x01,0x00 + +# CHECK: v_dot4c_i32_i8_dpp v5, v1, v2 row_bcast:31 row_mask:0x0 bank_mask:0x0 ; encoding: [0xfa,0x04,0x0a,0x72,0x01,0x43,0x01,0x00] +0xfa,0x04,0x0a,0x72,0x01,0x43,0x01,0x00 + +# CHECK: v_dot4c_i32_i8_dpp v5, v1, v2 wave_shl:1 row_mask:0x0 bank_mask:0x0 ; encoding: [0xfa,0x04,0x0a,0x72,0x01,0x30,0x01,0x00] +0xfa,0x04,0x0a,0x72,0x01,0x30,0x01,0x00 + +# CHECK: v_dot4c_i32_i8_dpp v5, v1, v2 wave_rol:1 row_mask:0x0 bank_mask:0x0 ; encoding: [0xfa,0x04,0x0a,0x72,0x01,0x34,0x01,0x00] +0xfa,0x04,0x0a,0x72,0x01,0x34,0x01,0x00 + +# CHECK: v_dot4c_i32_i8_dpp v5, v1, v2 wave_shr:1 row_mask:0x0 bank_mask:0x0 ; encoding: [0xfa,0x04,0x0a,0x72,0x01,0x38,0x01,0x00] +0xfa,0x04,0x0a,0x72,0x01,0x38,0x01,0x00 + +# CHECK: v_dot4c_i32_i8_dpp v5, v1, v2 wave_ror:1 row_mask:0x0 bank_mask:0x0 ; encoding: [0xfa,0x04,0x0a,0x72,0x01,0x3c,0x01,0x00] +0xfa,0x04,0x0a,0x72,0x01,0x3c,0x01,0x00 + +# CHECK: v_dot4c_i32_i8_dpp v5, v1, v2 row_shl:1 row_mask:0x0 bank_mask:0x0 ; encoding: [0xfa,0x04,0x0a,0x72,0x01,0x01,0x01,0x00] +0xfa,0x04,0x0a,0x72,0x01,0x01,0x01,0x00 + +# CHECK: v_dot4c_i32_i8_dpp v5, v1, v2 row_shl:15 row_mask:0x0 bank_mask:0x0 ; encoding: [0xfa,0x04,0x0a,0x72,0x01,0x0f,0x01,0x00] +0xfa,0x04,0x0a,0x72,0x01,0x0f,0x01,0x00 + +# CHECK: v_dot4c_i32_i8_dpp v5, v1, v2 row_shr:1 row_mask:0x0 bank_mask:0x0 ; encoding: [0xfa,0x04,0x0a,0x72,0x01,0x11,0x01,0x00] +0xfa,0x04,0x0a,0x72,0x01,0x11,0x01,0x00 + +# CHECK: v_dot4c_i32_i8_dpp v5, v1, v2 row_shr:15 row_mask:0x0 bank_mask:0x0 ; encoding: [0xfa,0x04,0x0a,0x72,0x01,0x1f,0x01,0x00] +0xfa,0x04,0x0a,0x72,0x01,0x1f,0x01,0x00 + +# CHECK: v_dot4c_i32_i8_dpp v5, v1, v2 row_ror:1 row_mask:0x0 bank_mask:0x0 ; encoding: [0xfa,0x04,0x0a,0x72,0x01,0x21,0x01,0x00] +0xfa,0x04,0x0a,0x72,0x01,0x21,0x01,0x00 + +# CHECK: v_dot4c_i32_i8_dpp v5, v1, v2 row_ror:15 row_mask:0x0 bank_mask:0x0 ; encoding: [0xfa,0x04,0x0a,0x72,0x01,0x2f,0x01,0x00] +0xfa,0x04,0x0a,0x72,0x01,0x2f,0x01,0x00 + +# CHECK: v_dot4c_i32_i8_dpp v5, v1, v2 quad_perm:[0,1,2,3] row_mask:0x1 bank_mask:0x0 ; encoding: [0xfa,0x04,0x0a,0x72,0x01,0xe4,0x00,0x10] +0xfa,0x04,0x0a,0x72,0x01,0xe4,0x00,0x10 + +# CHECK: v_dot4c_i32_i8_dpp v5, v1, v2 quad_perm:[0,1,2,3] row_mask:0x3 bank_mask:0x0 ; encoding: [0xfa,0x04,0x0a,0x72,0x01,0xe4,0x00,0x30] +0xfa,0x04,0x0a,0x72,0x01,0xe4,0x00,0x30 + +# CHECK: v_dot4c_i32_i8_dpp v5, v1, v2 quad_perm:[0,1,2,3] row_mask:0xf bank_mask:0x0 ; encoding: [0xfa,0x04,0x0a,0x72,0x01,0xe4,0x00,0xf0] +0xfa,0x04,0x0a,0x72,0x01,0xe4,0x00,0xf0 + +# CHECK: v_dot4c_i32_i8_dpp v5, v1, v2 quad_perm:[0,1,2,3] row_mask:0x0 bank_mask:0x1 ; encoding: [0xfa,0x04,0x0a,0x72,0x01,0xe4,0x00,0x01] +0xfa,0x04,0x0a,0x72,0x01,0xe4,0x00,0x01 + +# CHECK: v_dot4c_i32_i8_dpp v5, v1, v2 quad_perm:[0,1,2,3] row_mask:0x0 bank_mask:0x3 ; encoding: [0xfa,0x04,0x0a,0x72,0x01,0xe4,0x00,0x03] +0xfa,0x04,0x0a,0x72,0x01,0xe4,0x00,0x03 + +# CHECK: v_dot4c_i32_i8_dpp v5, v1, v2 quad_perm:[0,1,2,3] row_mask:0x0 bank_mask:0xf ; encoding: [0xfa,0x04,0x0a,0x72,0x01,0xe4,0x00,0x0f] +0xfa,0x04,0x0a,0x72,0x01,0xe4,0x00,0x0f + +# CHECK: v_dot4c_i32_i8_dpp v5, v1, v2 quad_perm:[0,1,2,3] row_mask:0x0 bank_mask:0x0 bound_ctrl:0 ; encoding: [0xfa,0x04,0x0a,0x72,0x01,0xe4,0x08,0x00] +0xfa,0x04,0x0a,0x72,0x01,0xe4,0x08,0x00 + +# CHECK: v_dot8c_i32_i4_e32 v5, v1, v2 ; encoding: [0x01,0x05,0x0a,0x74] +0x01,0x05,0x0a,0x74 + +# CHECK: v_dot8c_i32_i4_e32 v255, v1, v2 ; encoding: [0x01,0x05,0xfe,0x75] +0x01,0x05,0xfe,0x75 + +# CHECK: v_dot8c_i32_i4_dpp v5, v1, v2 quad_perm:[0,1,2,3] row_mask:0x0 bank_mask:0x0 ; encoding: [0xfa,0x04,0x0a,0x74,0x01,0xe4,0x00,0x00] +0xfa,0x04,0x0a,0x74,0x01,0xe4,0x00,0x00 + +# CHECK: v_dot8c_i32_i4_dpp v255, v1, v2 quad_perm:[0,1,2,3] row_mask:0x0 bank_mask:0x0 ; encoding: [0xfa,0x04,0xfe,0x75,0x01,0xe4,0x00,0x00] +0xfa,0x04,0xfe,0x75,0x01,0xe4,0x00,0x00 + +# CHECK: v_dot8c_i32_i4_dpp v5, v255, v2 quad_perm:[0,1,2,3] row_mask:0x0 bank_mask:0x0 ; encoding: [0xfa,0x04,0x0a,0x74,0xff,0xe4,0x00,0x00] +0xfa,0x04,0x0a,0x74,0xff,0xe4,0x00,0x00 + +# CHECK: v_dot8c_i32_i4_dpp v5, v1, v255 quad_perm:[0,1,2,3] row_mask:0x0 bank_mask:0x0 ; encoding: [0xfa,0xfe,0x0b,0x74,0x01,0xe4,0x00,0x00] +0xfa,0xfe,0x0b,0x74,0x01,0xe4,0x00,0x00 + +# CHECK: v_dot8c_i32_i4_dpp v5, v1, v2 quad_perm:[3,2,1,0] row_mask:0x0 bank_mask:0x0 ; encoding: [0xfa,0x04,0x0a,0x74,0x01,0x1b,0x00,0x00] +0xfa,0x04,0x0a,0x74,0x01,0x1b,0x00,0x00 + +# CHECK: v_dot8c_i32_i4_dpp v5, v1, v2 row_mirror row_mask:0x0 bank_mask:0x0 ; encoding: [0xfa,0x04,0x0a,0x74,0x01,0x40,0x01,0x00] +0xfa,0x04,0x0a,0x74,0x01,0x40,0x01,0x00 + +# CHECK: v_dot8c_i32_i4_dpp v5, v1, v2 row_half_mirror row_mask:0x0 bank_mask:0x0 ; encoding: [0xfa,0x04,0x0a,0x74,0x01,0x41,0x01,0x00] +0xfa,0x04,0x0a,0x74,0x01,0x41,0x01,0x00 + +# CHECK: v_dot8c_i32_i4_dpp v5, v1, v2 row_bcast:15 row_mask:0x0 bank_mask:0x0 ; encoding: [0xfa,0x04,0x0a,0x74,0x01,0x42,0x01,0x00] +0xfa,0x04,0x0a,0x74,0x01,0x42,0x01,0x00 + +# CHECK: v_dot8c_i32_i4_dpp v5, v1, v2 row_bcast:31 row_mask:0x0 bank_mask:0x0 ; encoding: [0xfa,0x04,0x0a,0x74,0x01,0x43,0x01,0x00] +0xfa,0x04,0x0a,0x74,0x01,0x43,0x01,0x00 + +# CHECK: v_dot8c_i32_i4_dpp v5, v1, v2 wave_shl:1 row_mask:0x0 bank_mask:0x0 ; encoding: [0xfa,0x04,0x0a,0x74,0x01,0x30,0x01,0x00] +0xfa,0x04,0x0a,0x74,0x01,0x30,0x01,0x00 + +# CHECK: v_dot8c_i32_i4_dpp v5, v1, v2 wave_rol:1 row_mask:0x0 bank_mask:0x0 ; encoding: [0xfa,0x04,0x0a,0x74,0x01,0x34,0x01,0x00] +0xfa,0x04,0x0a,0x74,0x01,0x34,0x01,0x00 + +# CHECK: v_dot8c_i32_i4_dpp v5, v1, v2 wave_shr:1 row_mask:0x0 bank_mask:0x0 ; encoding: [0xfa,0x04,0x0a,0x74,0x01,0x38,0x01,0x00] +0xfa,0x04,0x0a,0x74,0x01,0x38,0x01,0x00 + +# CHECK: v_dot8c_i32_i4_dpp v5, v1, v2 wave_ror:1 row_mask:0x0 bank_mask:0x0 ; encoding: [0xfa,0x04,0x0a,0x74,0x01,0x3c,0x01,0x00] +0xfa,0x04,0x0a,0x74,0x01,0x3c,0x01,0x00 + +# CHECK: v_dot8c_i32_i4_dpp v5, v1, v2 row_shl:1 row_mask:0x0 bank_mask:0x0 ; encoding: [0xfa,0x04,0x0a,0x74,0x01,0x01,0x01,0x00] +0xfa,0x04,0x0a,0x74,0x01,0x01,0x01,0x00 + +# CHECK: v_dot8c_i32_i4_dpp v5, v1, v2 row_shl:15 row_mask:0x0 bank_mask:0x0 ; encoding: [0xfa,0x04,0x0a,0x74,0x01,0x0f,0x01,0x00] +0xfa,0x04,0x0a,0x74,0x01,0x0f,0x01,0x00 + +# CHECK: v_dot8c_i32_i4_dpp v5, v1, v2 row_shr:1 row_mask:0x0 bank_mask:0x0 ; encoding: [0xfa,0x04,0x0a,0x74,0x01,0x11,0x01,0x00] +0xfa,0x04,0x0a,0x74,0x01,0x11,0x01,0x00 + +# CHECK: v_dot8c_i32_i4_dpp v5, v1, v2 row_shr:15 row_mask:0x0 bank_mask:0x0 ; encoding: [0xfa,0x04,0x0a,0x74,0x01,0x1f,0x01,0x00] +0xfa,0x04,0x0a,0x74,0x01,0x1f,0x01,0x00 + +# CHECK: v_dot8c_i32_i4_dpp v5, v1, v2 row_ror:1 row_mask:0x0 bank_mask:0x0 ; encoding: [0xfa,0x04,0x0a,0x74,0x01,0x21,0x01,0x00] +0xfa,0x04,0x0a,0x74,0x01,0x21,0x01,0x00 + +# CHECK: v_dot8c_i32_i4_dpp v5, v1, v2 row_ror:15 row_mask:0x0 bank_mask:0x0 ; encoding: [0xfa,0x04,0x0a,0x74,0x01,0x2f,0x01,0x00] +0xfa,0x04,0x0a,0x74,0x01,0x2f,0x01,0x00 + +# CHECK: v_dot8c_i32_i4_dpp v5, v1, v2 quad_perm:[0,1,2,3] row_mask:0x1 bank_mask:0x0 ; encoding: [0xfa,0x04,0x0a,0x74,0x01,0xe4,0x00,0x10] +0xfa,0x04,0x0a,0x74,0x01,0xe4,0x00,0x10 + +# CHECK: v_dot8c_i32_i4_dpp v5, v1, v2 quad_perm:[0,1,2,3] row_mask:0x3 bank_mask:0x0 ; encoding: [0xfa,0x04,0x0a,0x74,0x01,0xe4,0x00,0x30] +0xfa,0x04,0x0a,0x74,0x01,0xe4,0x00,0x30 + +# CHECK: v_dot8c_i32_i4_dpp v5, v1, v2 quad_perm:[0,1,2,3] row_mask:0xf bank_mask:0x0 ; encoding: [0xfa,0x04,0x0a,0x74,0x01,0xe4,0x00,0xf0] +0xfa,0x04,0x0a,0x74,0x01,0xe4,0x00,0xf0 + +# CHECK: v_dot8c_i32_i4_dpp v5, v1, v2 quad_perm:[0,1,2,3] row_mask:0x0 bank_mask:0x1 ; encoding: [0xfa,0x04,0x0a,0x74,0x01,0xe4,0x00,0x01] +0xfa,0x04,0x0a,0x74,0x01,0xe4,0x00,0x01 + +# CHECK: v_dot8c_i32_i4_dpp v5, v1, v2 quad_perm:[0,1,2,3] row_mask:0x0 bank_mask:0x3 ; encoding: [0xfa,0x04,0x0a,0x74,0x01,0xe4,0x00,0x03] +0xfa,0x04,0x0a,0x74,0x01,0xe4,0x00,0x03 + +# CHECK: v_dot8c_i32_i4_dpp v5, v1, v2 quad_perm:[0,1,2,3] row_mask:0x0 bank_mask:0xf ; encoding: [0xfa,0x04,0x0a,0x74,0x01,0xe4,0x00,0x0f] +0xfa,0x04,0x0a,0x74,0x01,0xe4,0x00,0x0f + +# CHECK: v_dot8c_i32_i4_dpp v5, v1, v2 quad_perm:[0,1,2,3] row_mask:0x0 bank_mask:0x0 bound_ctrl:0 ; encoding: [0xfa,0x04,0x0a,0x74,0x01,0xe4,0x08,0x00] +0xfa,0x04,0x0a,0x74,0x01,0xe4,0x08,0x00 + # CHECK: v_pk_fmac_f16_e32 v5, v1, v2 ; encoding: [0x01,0x05,0x0a,0x78] 0x01,0x05,0x0a,0x78