On Thu, Aug 3, 2023 at 4:11 PM Jan Beulich via Gcc-patches <gcc-patches@gcc.gnu.org> wrote: > > They're all VEX3- (also covering XOP) or EVEX-encoded. Express that in > the default calculation of "prefix". FMA4 insns also all have a 1-byte > immediate operand. > > Where the default calculation is not sufficient / applicable, add > explicit "prefix" attributes. While there also add a "mode" attribute to > fma_<complexpairopname>_<mode>_pair. Ok. > > gcc/ > > * config/i386/i386.md (isa): Move up. > (length_immediate): Handle "fma4". > (prefix): Handle "ssemuladd". > * config/i386/sse.md (*fma_fmadd_<mode>): Add "prefix" attribute. > (<sd_mask_codefor>fma_fmadd_<mode><sd_maskz_name><round_name>): > Likewise. > (<avx512>_fmadd_<mode>_mask<round_name>): Likewise. > (<avx512>_fmadd_<mode>_mask3<round_name>): Likewise. > (<sd_mask_codefor>fma_fmsub_<mode><sd_maskz_name><round_name>): > Likewise. > (<avx512>_fmsub_<mode>_mask<round_name>): Likewise. > (<avx512>_fmsub_<mode>_mask3<round_name>): Likewise. > (*fma_fnmadd_<mode>): Likewise. > (<sd_mask_codefor>fma_fnmadd_<mode><sd_maskz_name><round_name>): > Likewise. > (<avx512>_fnmadd_<mode>_mask<round_name>): Likewise. > (<avx512>_fnmadd_<mode>_mask3<round_name>): Likewise. > (<sd_mask_codefor>fma_fnmsub_<mode><sd_maskz_name><round_name>): > Likewise. > (<avx512>_fnmsub_<mode>_mask<round_name>): Likewise. > (<avx512>_fnmsub_<mode>_mask3<round_name>): Likewise. > (<sd_mask_codefor>fma_fmaddsub_<mode><sd_maskz_name><round_name>): > Likewise. > (<avx512>_fmaddsub_<mode>_mask<round_name>): Likewise. > (<avx512>_fmaddsub_<mode>_mask3<round_name>): Likewise. > (<sd_mask_codefor>fma_fmsubadd_<mode><sd_maskz_name><round_name>): > Likewise. > (<avx512>_fmsubadd_<mode>_mask<round_name>): Likewise. > (<avx512>_fmsubadd_<mode>_mask3<round_name>): Likewise. > (*fmai_fmadd_<mode>): Likewise. > (*fmai_fmsub_<mode>): Likewise. > (*fmai_fnmadd_<mode><round_name>): Likewise. > (*fmai_fnmsub_<mode><round_name>): Likewise. > (avx512f_vmfmadd_<mode>_mask<round_name>): Likewise. > (avx512f_vmfmadd_<mode>_mask3<round_name>): Likewise. > (avx512f_vmfmadd_<mode>_maskz_1<round_name>): Likewise. > (*avx512f_vmfmsub_<mode>_mask<round_name>): Likewise. > (avx512f_vmfmsub_<mode>_mask3<round_name>): Likewise. > (*avx512f_vmfmsub_<mode>_maskz_1<round_name>): Likewise. > (avx512f_vmfnmadd_<mode>_mask<round_name>): Likewise. > (avx512f_vmfnmadd_<mode>_mask3<round_name>): Likewise. > (avx512f_vmfnmadd_<mode>_maskz_1<round_name>): Likewise. > (*avx512f_vmfnmsub_<mode>_mask<round_name>): Likewise. > (*avx512f_vmfnmsub_<mode>_mask3<round_name>): Likewise. > (*avx512f_vmfnmsub_<mode>_maskz_1<round_name>): Likewise. > (*fma4i_vmfmadd_<mode>): Likewise. > (*fma4i_vmfmsub_<mode>): Likewise. > (*fma4i_vmfnmadd_<mode>): Likewise. > (*fma4i_vmfnmsub_<mode>): Likewise. > (fma_<complexopname>_<mode><sdc_maskz_name><round_name>): Likewise. > (<avx512>_<complexopname>_<mode>_mask<round_name>): Likewise. > > (avx512fp16_fma_<complexopname>sh_v8hf<mask_scalarcz_name><round_scalarcz_name>): > Likewise. > (avx512fp16_<complexopname>sh_v8hf_mask<round_name>): Likewise. > (xop_p<macs><ssemodesuffix><ssemodesuffix>): Likewise. > (xop_p<macs>dql): Likewise. > (xop_p<macs>dqh): Likewise. > (xop_p<macs>wd): Likewise. > (xop_p<madcs>wd): Likewise. > (fma_<complexpairopname>_<mode>_pair): Likewise. Add "mode" attribute. > > --- a/gcc/config/i386/i386.md > +++ b/gcc/config/i386/i386.md > @@ -531,12 +531,23 @@ > (const_string "unknown")] > (const_string "integer"))) > > +;; Used to control the "enabled" attribute on a per-instruction basis. > +(define_attr "isa" "base,x64,nox64,x64_sse2,x64_sse4,x64_sse4_noavx, > + x64_avx,x64_avx512bw,x64_avx512dq,aes, > + sse_noavx,sse2,sse2_noavx,sse3,sse3_noavx,sse4,sse4_noavx, > + avx,noavx,avx2,noavx2,bmi,bmi2,fma4,fma,avx512f,noavx512f, > + avx512bw,noavx512bw,avx512dq,noavx512dq,fma_or_avx512vl, > + > avx512vl,noavx512vl,avxvnni,avx512vnnivl,avx512fp16,avxifma, > + avx512ifmavl,avxneconvert,avx512bf16vl,vpclmulqdqvl" > + (const_string "base")) > + > ;; The (bounding maximum) length of an instruction immediate. > (define_attr "length_immediate" "" > (cond [(eq_attr "type" "incdec,setcc,icmov,str,lea,other,multi,idiv,leave, > bitmanip,imulx,msklog,mskmov") > (const_int 0) > - (eq_attr "type" "sse4arg") > + (ior (eq_attr "type" "sse4arg") > + (eq_attr "isa" "fma4")) > (const_int 1) > (eq_attr "unit" "i387,sse,mmx") > (const_int 0) > @@ -637,6 +648,10 @@ > (const_string "vex") > (eq_attr "mode" "XI,V16SF,V8DF") > (const_string "evex") > + (eq_attr "type" "ssemuladd") > + (if_then_else (eq_attr "isa" "fma4") > + (const_string "vex") > + (const_string "maybe_evex")) > (eq_attr "type" "sse4arg") > (const_string "vex") > ] > @@ -842,16 +857,6 @@ > ;; Define attribute to indicate unaligned ssemov insns > (define_attr "movu" "0,1" (const_string "0")) > > -;; Used to control the "enabled" attribute on a per-instruction basis. > -(define_attr "isa" "base,x64,nox64,x64_sse2,x64_sse4,x64_sse4_noavx, > - x64_avx,x64_avx512bw,x64_avx512dq,aes, > - sse_noavx,sse2,sse2_noavx,sse3,sse3_noavx,sse4,sse4_noavx, > - avx,noavx,avx2,noavx2,bmi,bmi2,fma4,fma,avx512f,noavx512f, > - avx512bw,noavx512bw,avx512dq,noavx512dq,fma_or_avx512vl, > - > avx512vl,noavx512vl,avxvnni,avx512vnnivl,avx512fp16,avxifma, > - avx512ifmavl,avxneconvert,avx512bf16vl,vpclmulqdqvl" > - (const_string "base")) > - > ;; Define instruction set of MMX instructions > (define_attr "mmx_isa" "base,native,sse,sse_noavx,avx" > (const_string "base")) > --- a/gcc/config/i386/sse.md > +++ b/gcc/config/i386/sse.md > @@ -5422,6 +5422,7 @@ > vfmadd213<ssemodesuffix>\t{<round_sd_mask_op4>%3, %2, > %0<sd_mask_op4>|%0<sd_mask_op4>, %2, %3<round_sd_mask_op4>} > vfmadd231<ssemodesuffix>\t{<round_sd_mask_op4>%2, %1, > %0<sd_mask_op4>|%0<sd_mask_op4>, %1, %2<round_sd_mask_op4>}" > [(set_attr "type" "ssemuladd") > + (set_attr "prefix" "evex") > (set_attr "mode" "<MODE>")]) > > (define_expand "cond_fma<mode>" > @@ -5461,6 +5462,7 @@ > vfmadd132<ssemodesuffix>\t{<round_op5>%2, %3, %0%{%4%}|%0%{%4%}, %3, > %2<round_op5>} > vfmadd213<ssemodesuffix>\t{<round_op5>%3, %2, %0%{%4%}|%0%{%4%}, %2, > %3<round_op5>}" > [(set_attr "type" "ssemuladd") > + (set_attr "prefix" "evex") > (set_attr "mode" "<MODE>")]) > > (define_insn "<avx512>_fmadd_<mode>_mask3<round_name>" > @@ -5475,6 +5477,7 @@ > "TARGET_AVX512F" > "vfmadd231<ssemodesuffix>\t{<round_op5>%2, %1, %0%{%4%}|%0%{%4%}, %1, > %2<round_op5>}" > [(set_attr "type" "ssemuladd") > + (set_attr "prefix" "evex") > (set_attr "mode" "<MODE>")]) > > (define_insn "*fma_fmsub_<mode>" > @@ -5522,6 +5525,7 @@ > vfmsub213<ssemodesuffix>\t{<round_sd_mask_op4>%3, %2, > %0<sd_mask_op4>|%0<sd_mask_op4>, %2, %3<round_sd_mask_op4>} > vfmsub231<ssemodesuffix>\t{<round_sd_mask_op4>%2, %1, > %0<sd_mask_op4>|%0<sd_mask_op4>, %1, %2<round_sd_mask_op4>}" > [(set_attr "type" "ssemuladd") > + (set_attr "prefix" "evex") > (set_attr "mode" "<MODE>")]) > > (define_expand "cond_fms<mode>" > @@ -5563,6 +5567,7 @@ > vfmsub132<ssemodesuffix>\t{<round_op5>%2, %3, %0%{%4%}|%0%{%4%}, %3, > %2<round_op5>} > vfmsub213<ssemodesuffix>\t{<round_op5>%3, %2, %0%{%4%}|%0%{%4%}, %2, > %3<round_op5>}" > [(set_attr "type" "ssemuladd") > + (set_attr "prefix" "evex") > (set_attr "mode" "<MODE>")]) > > (define_insn "<avx512>_fmsub_<mode>_mask3<round_name>" > @@ -5578,6 +5583,7 @@ > "TARGET_AVX512F && <round_mode512bit_condition>" > "vfmsub231<ssemodesuffix>\t{<round_op5>%2, %1, %0%{%4%}|%0%{%4%}, %1, > %2<round_op5>}" > [(set_attr "type" "ssemuladd") > + (set_attr "prefix" "evex") > (set_attr "mode" "<MODE>")]) > > (define_insn "*fma_fnmadd_<mode>" > @@ -5625,6 +5631,7 @@ > vfnmadd213<ssemodesuffix>\t{<round_sd_mask_op4>%3, %2, > %0<sd_mask_op4>|%0<sd_mask_op4>, %2, %3<round_sd_mask_op4>} > vfnmadd231<ssemodesuffix>\t{<round_sd_mask_op4>%2, %1, > %0<sd_mask_op4>|%0<sd_mask_op4>, %1, %2<round_sd_mask_op4>}" > [(set_attr "type" "ssemuladd") > + (set_attr "prefix" "evex") > (set_attr "mode" "<MODE>")]) > > (define_expand "cond_fnma<mode>" > @@ -5666,6 +5673,7 @@ > vfnmadd132<ssemodesuffix>\t{<round_op5>%2, %3, %0%{%4%}|%0%{%4%}, %3, > %2<round_op5>} > vfnmadd213<ssemodesuffix>\t{<round_op5>%3, %2, %0%{%4%}|%0%{%4%}, %2, > %3<round_op5>}" > [(set_attr "type" "ssemuladd") > + (set_attr "prefix" "evex") > (set_attr "mode" "<MODE>")]) > > (define_insn "<avx512>_fnmadd_<mode>_mask3<round_name>" > @@ -5681,6 +5689,7 @@ > "TARGET_AVX512F && <round_mode512bit_condition>" > "vfnmadd231<ssemodesuffix>\t{<round_op5>%2, %1, %0%{%4%}|%0%{%4%}, %1, > %2<round_op5>}" > [(set_attr "type" "ssemuladd") > + (set_attr "prefix" "evex") > (set_attr "mode" "<MODE>")]) > > (define_insn "*fma_fnmsub_<mode>" > @@ -5730,6 +5739,7 @@ > vfnmsub213<ssemodesuffix>\t{<round_sd_mask_op4>%3, %2, > %0<sd_mask_op4>|%0<sd_mask_op4>, %2, %3<round_sd_mask_op4>} > vfnmsub231<ssemodesuffix>\t{<round_sd_mask_op4>%2, %1, > %0<sd_mask_op4>|%0<sd_mask_op4>, %1, %2<round_sd_mask_op4>}" > [(set_attr "type" "ssemuladd") > + (set_attr "prefix" "evex") > (set_attr "mode" "<MODE>")]) > > (define_expand "cond_fnms<mode>" > @@ -5773,6 +5783,7 @@ > vfnmsub132<ssemodesuffix>\t{<round_op5>%2, %3, %0%{%4%}|%0%{%4%}, %3, > %2<round_op5>} > vfnmsub213<ssemodesuffix>\t{<round_op5>%3, %2, %0%{%4%}|%0%{%4%}, %2, > %3<round_op5>}" > [(set_attr "type" "ssemuladd") > + (set_attr "prefix" "evex") > (set_attr "mode" "<MODE>")]) > > (define_insn "<avx512>_fnmsub_<mode>_mask3<round_name>" > @@ -5789,6 +5800,7 @@ > "TARGET_AVX512F" > "vfnmsub231<ssemodesuffix>\t{<round_op5>%2, %1, %0%{%4%}|%0%{%4%}, %1, > %2<round_op5>}" > [(set_attr "type" "ssemuladd") > + (set_attr "prefix" "evex") > (set_attr "mode" "<MODE>")]) > > ;; FMA parallel floating point multiply addsub and subadd operations. > @@ -5889,6 +5901,7 @@ > vfmaddsub213<ssemodesuffix>\t{<round_sd_mask_op4>%3, %2, > %0<sd_mask_op4>|%0<sd_mask_op4>, %2, %3<round_sd_mask_op4>} > vfmaddsub231<ssemodesuffix>\t{<round_sd_mask_op4>%2, %1, > %0<sd_mask_op4>|%0<sd_mask_op4>, %1, %2<round_sd_mask_op4>}" > [(set_attr "type" "ssemuladd") > + (set_attr "prefix" "evex") > (set_attr "mode" "<MODE>")]) > > (define_insn "<avx512>_fmaddsub_<mode>_mask<round_name>" > @@ -5906,6 +5919,7 @@ > vfmaddsub132<ssemodesuffix>\t{<round_op5>%2, %3, %0%{%4%}|%0%{%4%}, %3, > %2<round_op5>} > vfmaddsub213<ssemodesuffix>\t{<round_op5>%3, %2, %0%{%4%}|%0%{%4%}, %2, > %3<round_op5>}" > [(set_attr "type" "ssemuladd") > + (set_attr "prefix" "evex") > (set_attr "mode" "<MODE>")]) > > (define_insn "<avx512>_fmaddsub_<mode>_mask3<round_name>" > @@ -5921,6 +5935,7 @@ > "TARGET_AVX512F" > "vfmaddsub231<ssemodesuffix>\t{<round_op5>%2, %1, %0%{%4%}|%0%{%4%}, %1, > %2<round_op5>}" > [(set_attr "type" "ssemuladd") > + (set_attr "prefix" "evex") > (set_attr "mode" "<MODE>")]) > > (define_insn "*fma_fmsubadd_<mode>" > @@ -5956,6 +5971,7 @@ > vfmsubadd213<ssemodesuffix>\t{<round_sd_mask_op4>%3, %2, > %0<sd_mask_op4>|%0<sd_mask_op4>, %2, %3<round_sd_mask_op4>} > vfmsubadd231<ssemodesuffix>\t{<round_sd_mask_op4>%2, %1, > %0<sd_mask_op4>|%0<sd_mask_op4>, %1, %2<round_sd_mask_op4>}" > [(set_attr "type" "ssemuladd") > + (set_attr "prefix" "evex") > (set_attr "mode" "<MODE>")]) > > (define_insn "<avx512>_fmsubadd_<mode>_mask<round_name>" > @@ -5974,6 +5990,7 @@ > vfmsubadd132<ssemodesuffix>\t{<round_op5>%2, %3, %0%{%4%}|%0%{%4%}, %3, > %2<round_op5>} > vfmsubadd213<ssemodesuffix>\t{<round_op5>%3, %2, %0%{%4%}|%0%{%4%}, %2, > %3<round_op5>}" > [(set_attr "type" "ssemuladd") > + (set_attr "prefix" "evex") > (set_attr "mode" "<MODE>")]) > > (define_insn "<avx512>_fmsubadd_<mode>_mask3<round_name>" > @@ -5990,6 +6007,7 @@ > "TARGET_AVX512F" > "vfmsubadd231<ssemodesuffix>\t{<round_op5>%2, %1, %0%{%4%}|%0%{%4%}, %1, > %2<round_op5>}" > [(set_attr "type" "ssemuladd") > + (set_attr "prefix" "evex") > (set_attr "mode" "<MODE>")]) > > ;; FMA3 floating point scalar intrinsics. These merge result with > @@ -6057,6 +6075,7 @@ > vfmadd132<ssescalarmodesuffix>\t{<round_op4>%2, %3, %0|%0, %<iptr>3, > %<iptr>2<round_op4>} > vfmadd213<ssescalarmodesuffix>\t{<round_op4>%3, %2, %0|%0, %<iptr>2, > %<iptr>3<round_op4>}" > [(set_attr "type" "ssemuladd") > + (set_attr "prefix" "maybe_evex") > (set_attr "mode" "<MODE>")]) > > (define_insn "*fmai_fmsub_<mode>" > @@ -6074,6 +6093,7 @@ > vfmsub132<ssescalarmodesuffix>\t{<round_op4>%2, %3, %0|%0, %<iptr>3, > %<iptr>2<round_op4>} > vfmsub213<ssescalarmodesuffix>\t{<round_op4>%3, %2, %0|%0, %<iptr>2, > %<iptr>3<round_op4>}" > [(set_attr "type" "ssemuladd") > + (set_attr "prefix" "maybe_evex") > (set_attr "mode" "<MODE>")]) > > (define_insn "*fmai_fnmadd_<mode><round_name>" > @@ -6091,6 +6111,7 @@ > vfnmadd132<ssescalarmodesuffix>\t{<round_op4>%2, %3, %0|%0, %<iptr>3, > %<iptr>2<round_op4>} > vfnmadd213<ssescalarmodesuffix>\t{<round_op4>%3, %2, %0|%0, %<iptr>2, > %<iptr>3<round_op4>}" > [(set_attr "type" "ssemuladd") > + (set_attr "prefix" "maybe_evex") > (set_attr "mode" "<MODE>")]) > > (define_insn "*fmai_fnmsub_<mode><round_name>" > @@ -6109,6 +6130,7 @@ > vfnmsub132<ssescalarmodesuffix>\t{<round_op4>%2, %3, %0|%0, %<iptr>3, > %<iptr>2<round_op4>} > vfnmsub213<ssescalarmodesuffix>\t{<round_op4>%3, %2, %0|%0, %<iptr>2, > %<iptr>3<round_op4>}" > [(set_attr "type" "ssemuladd") > + (set_attr "prefix" "maybe_evex") > (set_attr "mode" "<MODE>")]) > > (define_insn "avx512f_vmfmadd_<mode>_mask<round_name>" > @@ -6128,6 +6150,7 @@ > vfmadd132<ssescalarmodesuffix>\t{<round_op5>%2, %3, %0%{%4%}|%0%{%4%}, > %<iptr>3, %<iptr>2<round_op5>} > vfmadd213<ssescalarmodesuffix>\t{<round_op5>%3, %2, %0%{%4%}|%0%{%4%}, > %<iptr>2, %<iptr>3<round_op5>}" > [(set_attr "type" "ssemuladd") > + (set_attr "prefix" "evex") > (set_attr "mode" "<MODE>")]) > > (define_insn "avx512f_vmfmadd_<mode>_mask3<round_name>" > @@ -6145,6 +6168,7 @@ > "TARGET_AVX512F" > "vfmadd231<ssescalarmodesuffix>\t{<round_op5>%2, %1, %0%{%4%}|%0%{%4%}, > %<iptr>3, %<iptr>2<round_op5>}" > [(set_attr "type" "ssemuladd") > + (set_attr "prefix" "evex") > (set_attr "mode" "<MODE>")]) > > (define_expand "avx512f_vmfmadd_<mode>_maskz<round_expand_name>" > @@ -6178,6 +6202,7 @@ > vfmadd132<ssescalarmodesuffix>\t{<round_op6>%2, %3, > %0%{%5%}%{z%}|%0%{%5%}%{z%}, %<iptr>3, %<iptr>2<round_op6>} > vfmadd213<ssescalarmodesuffix>\t{<round_op6>%3, %2, > %0%{%5%}%{z%}|%0%{%5%}%{z%}, %<iptr>2, %<iptr>3<round_op6>}" > [(set_attr "type" "ssemuladd") > + (set_attr "prefix" "evex") > (set_attr "mode" "<MODE>")]) > > (define_insn "*avx512f_vmfmsub_<mode>_mask<round_name>" > @@ -6198,6 +6223,7 @@ > vfmsub132<ssescalarmodesuffix>\t{<round_op5>%2, %3, %0%{%4%}|%0%{%4%}, > %<iptr>3, %<iptr>2<round_op5>} > vfmsub213<ssescalarmodesuffix>\t{<round_op5>%3, %2, %0%{%4%}|%0%{%4%}, > %<iptr>2, %<iptr>3<round_op5>}" > [(set_attr "type" "ssemuladd") > + (set_attr "prefix" "evex") > (set_attr "mode" "<MODE>")]) > > (define_insn "avx512f_vmfmsub_<mode>_mask3<round_name>" > @@ -6216,6 +6242,7 @@ > "TARGET_AVX512F" > "vfmsub231<ssescalarmodesuffix>\t{<round_op5>%2, %1, %0%{%4%}|%0%{%4%}, > %<iptr>3, %<iptr>2<round_op5>}" > [(set_attr "type" "ssemuladd") > + (set_attr "prefix" "evex") > (set_attr "mode" "<MODE>")]) > > (define_insn "*avx512f_vmfmsub_<mode>_maskz_1<round_name>" > @@ -6236,6 +6263,7 @@ > vfmsub132<ssescalarmodesuffix>\t{<round_op6>%2, %3, > %0%{%5%}%{z%}|%0%{%5%}%{z%}, %<iptr>3, %<iptr>2<round_op6>} > vfmsub213<ssescalarmodesuffix>\t{<round_op6>%3, %2, > %0%{%5%}%{z%}|%0%{%5%}%{z%}, %<iptr>2, %<iptr>3<round_op6>}" > [(set_attr "type" "ssemuladd") > + (set_attr "prefix" "evex") > (set_attr "mode" "<MODE>")]) > > (define_insn "avx512f_vmfnmadd_<mode>_mask<round_name>" > @@ -6256,6 +6284,7 @@ > vfnmadd132<ssescalarmodesuffix>\t{<round_op5>%2, %3, %0%{%4%}|%0%{%4%}, > %<iptr>3, %<iptr>2<round_op5>} > vfnmadd213<ssescalarmodesuffix>\t{<round_op5>%3, %2, %0%{%4%}|%0%{%4%}, > %<iptr>2, %<iptr>3<round_op5>}" > [(set_attr "type" "ssemuladd") > + (set_attr "prefix" "evex") > (set_attr "mode" "<MODE>")]) > > (define_insn "avx512f_vmfnmadd_<mode>_mask3<round_name>" > @@ -6274,6 +6303,7 @@ > "TARGET_AVX512F" > "vfnmadd231<ssescalarmodesuffix>\t{<round_op5>%2, %1, %0%{%4%}|%0%{%4%}, > %<iptr>3, %<iptr>2<round_op5>}" > [(set_attr "type" "ssemuladd") > + (set_attr "prefix" "evex") > (set_attr "mode" "<MODE>")]) > > (define_expand "avx512f_vmfnmadd_<mode>_maskz<round_expand_name>" > @@ -6308,6 +6338,7 @@ > vfnmadd132<ssescalarmodesuffix>\t{<round_op6>%2, %3, > %0%{%5%}%{z%}|%0%{%5%}%{z%}, %<iptr>3, %<iptr>2<round_op6>} > vfnmadd213<ssescalarmodesuffix>\t{<round_op6>%3, %2, > %0%{%5%}%{z%}|%0%{%5%}%{z%}, %<iptr>2, %<iptr>3<round_op6>}" > [(set_attr "type" "ssemuladd") > + (set_attr "prefix" "evex") > (set_attr "mode" "<MODE>")]) > > (define_insn "*avx512f_vmfnmsub_<mode>_mask<round_name>" > @@ -6329,6 +6360,7 @@ > vfnmsub132<ssescalarmodesuffix>\t{<round_op5>%2, %3, %0%{%4%}|%0%{%4%}, > %<iptr>3, %<iptr>2<round_op5>} > vfnmsub213<ssescalarmodesuffix>\t{<round_op5>%3, %2, %0%{%4%}|%0%{%4%}, > %<iptr>2, %<iptr>3<round_op5>}" > [(set_attr "type" "ssemuladd") > + (set_attr "prefix" "evex") > (set_attr "mode" "<MODE>")]) > > (define_insn "*avx512f_vmfnmsub_<mode>_mask3<round_name>" > @@ -6348,6 +6380,7 @@ > "TARGET_AVX512F" > "vfnmsub231<ssescalarmodesuffix>\t{<round_op5>%2, %1, %0%{%4%}|%0%{%4%}, > %<iptr>3, %<iptr>2<round_op5>}" > [(set_attr "type" "ssemuladd") > + (set_attr "prefix" "evex") > (set_attr "mode" "<MODE>")]) > > (define_insn "*avx512f_vmfnmsub_<mode>_maskz_1<round_name>" > @@ -6369,6 +6402,7 @@ > vfnmsub132<ssescalarmodesuffix>\t{<round_op6>%2, %3, > %0%{%5%}%{z%}|%0%{%5%}%{z%}, %<iptr>3, %<iptr>2<round_op6>} > vfnmsub213<ssescalarmodesuffix>\t{<round_op6>%3, %2, > %0%{%5%}%{z%}|%0%{%5%}%{z%}, %<iptr>2, %<iptr>3<round_op6>}" > [(set_attr "type" "ssemuladd") > + (set_attr "prefix" "evex") > (set_attr "mode" "<MODE>")]) > > ;; FMA4 floating point scalar intrinsics. These write the > @@ -6398,6 +6432,7 @@ > "TARGET_FMA4" > "vfmadd<ssescalarmodesuffix>\t{%3, %2, %1, %0|%0, %1, %<iptr>2, %<iptr>3}" > [(set_attr "type" "ssemuladd") > + (set_attr "prefix" "vex") > (set_attr "mode" "<MODE>")]) > > (define_insn "*fma4i_vmfmsub_<mode>" > @@ -6413,6 +6448,7 @@ > "TARGET_FMA4" > "vfmsub<ssescalarmodesuffix>\t{%3, %2, %1, %0|%0, %1, %<iptr>2, %<iptr>3}" > [(set_attr "type" "ssemuladd") > + (set_attr "prefix" "vex") > (set_attr "mode" "<MODE>")]) > > (define_insn "*fma4i_vmfnmadd_<mode>" > @@ -6428,6 +6464,7 @@ > "TARGET_FMA4" > "vfnmadd<ssescalarmodesuffix>\t{%3, %2, %1, %0|%0, %1, %<iptr>2, %<iptr>3}" > [(set_attr "type" "ssemuladd") > + (set_attr "prefix" "vex") > (set_attr "mode" "<MODE>")]) > > (define_insn "*fma4i_vmfnmsub_<mode>" > @@ -6444,6 +6481,7 @@ > "TARGET_FMA4" > "vfnmsub<ssescalarmodesuffix>\t{%3, %2, %1, %0|%0, %1, %<iptr>2, %<iptr>3}" > [(set_attr "type" "ssemuladd") > + (set_attr "prefix" "vex") > (set_attr "mode" "<MODE>")]) > > ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; > @@ -6591,6 +6629,7 @@ > "TARGET_AVX512FP16 && <sdc_mask_mode512bit_condition> && > <round_mode512bit_condition>" > "v<complexopname><ssemodesuffix>\t{<round_sdc_mask_op4>%2, %1, > %0<sdc_mask_op4>|%0<sdc_mask_op4>, %1, %2<round_sdc_mask_op4>}" > [(set_attr "type" "ssemuladd") > + (set_attr "prefix" "evex") > (set_attr "mode" "<MODE>")]) > > (define_insn_and_split "fma_<mode>_fadd_fmul" > @@ -6654,7 +6693,9 @@ > UNSPEC_COMPLEX_F_C_MA_PAIR))] > "TARGET_AVX512FP16" > "v<complexpairopname>ph\t{%2, %1, %0|%0, %1, %2}" > - [(set_attr "type" "ssemuladd")]) > + [(set_attr "type" "ssemuladd") > + (set_attr "prefix" "evex") > + (set_attr "mode" "<MODE>")]) > > (define_insn_and_split "fma_<mode>_fmaddc_bcst" > [(set (match_operand:VF_AVX512FP16VL 0 "register_operand") > @@ -6726,6 +6767,7 @@ > "TARGET_AVX512FP16 && <round_mode512bit_condition>" > "v<complexopname><ssemodesuffix>\t{<round_op5>%2, %1, %0%{%4%}|%0%{%4%}, > %1, %2<round_op5>}" > [(set_attr "type" "ssemuladd") > + (set_attr "prefix" "evex") > (set_attr "mode" "<MODE>")]) > > (define_expand "cmul<conj_op><mode>3" > @@ -6913,6 +6955,7 @@ > "TARGET_AVX512FP16" > "v<complexopname>sh\t{<round_scalarcz_mask_op4>%2, %1, > %0<mask_scalarcz_operand4>|%0<mask_scalarcz_operand4>, %1, > %2<round_scalarcz_mask_op4>}" > [(set_attr "type" "ssemuladd") > + (set_attr "prefix" "evex") > (set_attr "mode" "V8HF")]) > > (define_insn "avx512fp16_<complexopname>sh_v8hf_mask<round_name>" > @@ -6932,6 +6975,7 @@ > "TARGET_AVX512FP16" > "v<complexopname>sh\t{<round_op5>%2, %1, %0%{%4%}|%0%{%4%}, %1, > %2<round_op5>}" > [(set_attr "type" "ssemuladd") > + (set_attr "prefix" "evex") > (set_attr "mode" "V8HF")]) > > (define_insn > "avx512fp16_<complexopname>sh_v8hf<mask_scalarc_name><round_scalarcz_name>" > @@ -24721,6 +24765,7 @@ > "TARGET_XOP" > "vp<macs><ssemodesuffix><ssemodesuffix>\t{%3, %2, %1, %0|%0, %1, %2, %3}" > [(set_attr "type" "ssemuladd") > + (set_attr "prefix" "vex") > (set_attr "mode" "TI")]) > > (define_insn "xop_p<macs>dql" > @@ -24739,6 +24784,7 @@ > "TARGET_XOP" > "vp<macs>dql\t{%3, %2, %1, %0|%0, %1, %2, %3}" > [(set_attr "type" "ssemuladd") > + (set_attr "prefix" "vex") > (set_attr "mode" "TI")]) > > (define_insn "xop_p<macs>dqh" > @@ -24757,6 +24803,7 @@ > "TARGET_XOP" > "vp<macs>dqh\t{%3, %2, %1, %0|%0, %1, %2, %3}" > [(set_attr "type" "ssemuladd") > + (set_attr "prefix" "vex") > (set_attr "mode" "TI")]) > > ;; XOP parallel integer multiply/add instructions for the intrinisics > @@ -24778,6 +24825,7 @@ > "TARGET_XOP" > "vp<macs>wd\t{%3, %2, %1, %0|%0, %1, %2, %3}" > [(set_attr "type" "ssemuladd") > + (set_attr "prefix" "vex") > (set_attr "mode" "TI")]) > > (define_insn "xop_p<madcs>wd" > @@ -24810,6 +24858,7 @@ > "TARGET_XOP" > "vp<madcs>wd\t{%3, %2, %1, %0|%0, %1, %2, %3}" > [(set_attr "type" "ssemuladd") > + (set_attr "prefix" "vex") > (set_attr "mode" "TI")]) > > ;; XOP parallel XMM conditional moves >
-- BR, Hongtao