Index: lib/Target/AMDGPU/SIInstrInfo.td =================================================================== --- lib/Target/AMDGPU/SIInstrInfo.td +++ lib/Target/AMDGPU/SIInstrInfo.td @@ -876,6 +876,11 @@ opName#" $dst, $src0, $src1", pattern >; +multiclass SOP2_64_32_32 pattern> : SOP2_m < + op, opName, (outs SReg_64:$dst), (ins SSrc_32:$src0, SSrc_32:$src1), + opName#" $dst, $src0, $src1", pattern +>; + class SOPC_Helper op, RegisterOperand rc, ValueType vt, string opName, PatLeaf cond> : SOPC < op, (outs), (ins rc:$src0, rc:$src1), Index: lib/Target/AMDGPU/SIInstructions.td =================================================================== --- lib/Target/AMDGPU/SIInstructions.td +++ lib/Target/AMDGPU/SIInstructions.td @@ -307,7 +307,7 @@ defm S_BFM_B32 : SOP2_32 , "s_bfm_b32", [(set i32:$dst, (AMDGPUbfm i32:$src0, i32:$src1))]>; -defm S_BFM_B64 : SOP2_64 , "s_bfm_b64", []>; +defm S_BFM_B64 : SOP2_64_32_32 , "s_bfm_b64", []>; defm S_MUL_I32 : SOP2_32 , "s_mul_i32", [(set i32:$dst, (mul i32:$src0, i32:$src1))] >; @@ -317,7 +317,7 @@ let Defs = [SCC] in { defm S_BFE_U32 : SOP2_32 , "s_bfe_u32", []>; defm S_BFE_I32 : SOP2_32 , "s_bfe_i32", []>; -defm S_BFE_U64 : SOP2_64 , "s_bfe_u64", []>; +defm S_BFE_U64 : SOP2_64_32 , "s_bfe_u64", []>; defm S_BFE_I64 : SOP2_64_32 , "s_bfe_i64", []>; } // End Defs = [SCC] Index: test/MC/AMDGPU/sop2.s =================================================================== --- test/MC/AMDGPU/sop2.s +++ test/MC/AMDGPU/sop2.s @@ -106,8 +106,8 @@ // CHECK: s_bfm_b32 s2, s4, s6 ; encoding: [0x04,0x06,0x02,0x92] s_bfm_b32 s2, s4, s6 -// CHECK: s_bfm_b64 s[2:3], s[4:5], s[6:7] ; encoding: [0x04,0x06,0x82,0x92] -s_bfm_b64 s[2:3], s[4:5], s[6:7] +// CHECK: s_bfm_b64 s[2:3], s4, s6 ; encoding: [0x04,0x06,0x82,0x92] +s_bfm_b64 s[2:3], s4, s6 // CHECK: s_mul_i32 s2, s4, s6 ; encoding: [0x04,0x06,0x02,0x93] s_mul_i32 s2, s4, s6 @@ -118,8 +118,8 @@ // CHECK: s_bfe_i32 s2, s4, s6 ; encoding: [0x04,0x06,0x02,0x94] s_bfe_i32 s2, s4, s6 -// CHECK: s_bfe_u64 s[2:3], s[4:5], s[6:7] ; encoding: [0x04,0x06,0x82,0x94] -s_bfe_u64 s[2:3], s[4:5], s[6:7] +// CHECK: s_bfe_u64 s[2:3], s[4:5], s6 ; encoding: [0x04,0x06,0x82,0x94] +s_bfe_u64 s[2:3], s[4:5], s6 // CHECK: s_bfe_i64 s[2:3], s[4:5], s6 ; encoding: [0x04,0x06,0x02,0x95] s_bfe_i64 s[2:3], s[4:5], s6