diff --git a/lib/Target/X86/X86InstrSSE.td b/lib/Target/X86/X86InstrSSE.td index 1c84cc7198c..88c477196db 100644 --- a/lib/Target/X86/X86InstrSSE.td +++ b/lib/Target/X86/X86InstrSSE.td @@ -788,6 +788,24 @@ multiclass sse12_fp_binop_rm opc, string OpcodeStr, defm V#NAME#SD : sse12_fp_scalar, XD, VEX_4V; + + defm V#NAME#PS : sse12_fp_packed, + VEX_4V; + + defm V#NAME#PD : sse12_fp_packed, + OpSize, VEX_4V; + + defm V#NAME#SS : sse12_fp_scalar_int, XS, VEX_4V; + + defm V#NAME#SD : sse12_fp_scalar_int, XD, VEX_4V; } let Constraints = "$src1 = $dst" in { @@ -798,72 +816,23 @@ multiclass sse12_fp_binop_rm opc, string OpcodeStr, defm SD : sse12_fp_scalar, XD; - } + defm PS : sse12_fp_packed, TB; - // Vector operation, reg+reg. - def PSrr : PSI { - let isCommutable = Commutable; - } + defm PD : sse12_fp_packed, TB, OpSize; - def PDrr : PDI { - let isCommutable = Commutable; - } - - // Vector operation, reg+mem. - def PSrm : PSI; - - def PDrm : PDI; - - // Intrinsic operation, reg+reg. - def SSrr_Int : SSI("int_x86_sse_", - !strconcat(OpcodeStr, "_ss")) VR128:$src1, - VR128:$src2))]> { - // int_x86_sse_xxx_ss - let isCommutable = Commutable; - } + "", "_ss", ssmem, sse_load_f32>, XS; - def SDrr_Int : SDI("int_x86_sse2_", - !strconcat(OpcodeStr, "_sd")) VR128:$src1, - VR128:$src2))]> { - // int_x86_sse2_xxx_sd - let isCommutable = Commutable; + "2", "_sd", sdmem, sse_load_f64>, XD; } - // Intrinsic operation, reg+mem. - def SSrm_Int : SSI("int_x86_sse_", - !strconcat(OpcodeStr, "_ss")) VR128:$src1, - sse_load_f32:$src2))]>; - // int_x86_sse_xxx_ss - - def SDrm_Int : SDI("int_x86_sse2_", - !strconcat(OpcodeStr, "_sd")) VR128:$src1, - sse_load_f64:$src2))]>; - // int_x86_sse2_xxx_sd - // Vector intrinsic operation, reg+reg. def PSrr_Int : PSI