Message ID | 20240621015459.13525-3-wangfeng@eswincomputing.com |
---|---|
State | New |
Headers | show |
Series | [1/3] RISC-V: Add vector type of BFloat16 format | expand |
LGTM On Fri, Jun 21, 2024 at 9:56 AM Feng Wang <wangfeng@eswincomputing.com> wrote: > Accroding to the BFloat16 spec, some vector iterators and new pattern > are added in md files. > > All these changes passed the rvv test and rvv-intrinsic test for bfloat16. > > gcc/ChangeLog: > > * config/riscv/riscv.md: Add new insn name for vector BFloat16. > * config/riscv/vector-iterators.md: Add some iterators for vector > BFloat16. > * config/riscv/vector.md: Add some attribute for vector BFloat16. > * config/riscv/vector-bfloat16.md: New file. Add insn pattern > vector BFloat16. > > --- > gcc/config/riscv/riscv.md | 13 ++- > gcc/config/riscv/vector-bfloat16.md | 135 +++++++++++++++++++++ > gcc/config/riscv/vector-iterators.md | 169 ++++++++++++++++++++++++++- > gcc/config/riscv/vector.md | 103 ++++++++++++++-- > 4 files changed, 405 insertions(+), 15 deletions(-) > create mode 100644 gcc/config/riscv/vector-bfloat16.md > > diff --git a/gcc/config/riscv/riscv.md b/gcc/config/riscv/riscv.md > index 7a9454de430..31dcd5f2507 100644 > --- a/gcc/config/riscv/riscv.md > +++ b/gcc/config/riscv/riscv.md > @@ -200,6 +200,7 @@ > RVVMF64BI,RVVMF32BI,RVVMF16BI,RVVMF8BI,RVVMF4BI,RVVMF2BI,RVVM1BI, > RVVM8QI,RVVM4QI,RVVM2QI,RVVM1QI,RVVMF2QI,RVVMF4QI,RVVMF8QI, > RVVM8HI,RVVM4HI,RVVM2HI,RVVM1HI,RVVMF2HI,RVVMF4HI, > + RVVM8BF,RVVM4BF,RVVM2BF,RVVM1BF,RVVMF2BF,RVVMF4BF, > RVVM8HF,RVVM4HF,RVVM2HF,RVVM1HF,RVVMF2HF,RVVMF4HF, > RVVM8SI,RVVM4SI,RVVM2SI,RVVM1SI,RVVMF2SI, > RVVM8SF,RVVM4SF,RVVM2SF,RVVM1SF,RVVMF2SF, > @@ -219,6 +220,11 @@ > RVVM2x4HI,RVVM1x4HI,RVVMF2x4HI,RVVMF4x4HI, > RVVM2x3HI,RVVM1x3HI,RVVMF2x3HI,RVVMF4x3HI, > RVVM4x2HI,RVVM2x2HI,RVVM1x2HI,RVVMF2x2HI,RVVMF4x2HI, > + RVVM1x8BF,RVVMF2x8BF,RVVMF4x8BF,RVVM1x7BF,RVVMF2x7BF, > + RVVMF4x7BF,RVVM1x6BF,RVVMF2x6BF,RVVMF4x6BF,RVVM1x5BF, > + RVVMF2x5BF,RVVMF4x5BF,RVVM2x4BF,RVVM1x4BF,RVVMF2x4BF, > + RVVMF4x4BF,RVVM2x3BF,RVVM1x3BF,RVVMF2x3BF,RVVMF4x3BF, > + RVVM4x2BF,RVVM2x2BF,RVVM1x2BF,RVVMF2x2BF,RVVMF4x2BF, > RVVM1x8HF,RVVMF2x8HF,RVVMF4x8HF,RVVM1x7HF,RVVMF2x7HF, > RVVMF4x7HF,RVVM1x6HF,RVVMF2x6HF,RVVMF4x6HF,RVVM1x5HF, > RVVMF2x5HF,RVVMF4x5HF,RVVM2x4HF,RVVM1x4HF,RVVMF2x4HF, > @@ -462,6 +468,10 @@ > ;; vsm4r crypto vector SM4 Rounds instructions > ;; vsm3me crypto vector SM3 Message Expansion instructions > ;; vsm3c crypto vector SM3 Compression instructions > +;; 18.Vector BF16 instrctions > +;; vfncvtbf16 vector narrowing single floating-point to brain > floating-point instruction > +;; vfwcvtbf16 vector widening brain floating-point to single > floating-point instruction > +;; vfwmaccbf16 vector BF16 widening multiply-accumulate > (define_attr "type" > "unknown,branch,jump,jalr,ret,call,load,fpload,store,fpstore, > mtc,mfc,const,arith,logical,shift,slt,imul,idiv,move,fmove,fadd,fmul, > @@ -483,7 +493,7 @@ > vslideup,vslidedown,vislide1up,vislide1down,vfslide1up,vfslide1down, > > vgather,vcompress,vmov,vector,vandn,vbrev,vbrev8,vrev8,vclz,vctz,vcpop,vrol,vror,vwsll, > > vclmul,vclmulh,vghsh,vgmul,vaesef,vaesem,vaesdf,vaesdm,vaeskf1,vaeskf2,vaesz, > - vsha2ms,vsha2ch,vsha2cl,vsm4k,vsm4r,vsm3me,vsm3c" > + > vsha2ms,vsha2ch,vsha2cl,vsm4k,vsm4r,vsm3me,vsm3c,vfncvtbf16,vfwcvtbf16,vfwmaccbf16" > (cond [(eq_attr "got" "load") (const_string "load") > > ;; If a doubleword move uses these expensive instructions, > @@ -4311,6 +4321,7 @@ > (include "generic-ooo.md") > (include "vector.md") > (include "vector-crypto.md") > +(include "vector-bfloat16.md") > (include "zicond.md") > (include "sfb.md") > (include "zc.md") > diff --git a/gcc/config/riscv/vector-bfloat16.md > b/gcc/config/riscv/vector-bfloat16.md > new file mode 100644 > index 00000000000..562aa8ee5ed > --- /dev/null > +++ b/gcc/config/riscv/vector-bfloat16.md > @@ -0,0 +1,135 @@ > +;; Machine description for RISC-V bfloat16 extensions. > +;; Copyright (C) 2024 Free Software Foundation, Inc. > + > +;; This file is part of GCC. > + > +;; GCC is free software; you can redistribute it and/or modify > +;; it under the terms of the GNU General Public License as published by > +;; the Free Software Foundation; either version 3, or (at your option) > +;; any later version. > + > +;; GCC is distributed in the hope that it will be useful, > +;; but WITHOUT ANY WARRANTY; without even the implied warranty of > +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the > +;; GNU General Public License for more details. > + > +;; You should have received a copy of the GNU General Public License > +;; along with GCC; see the file COPYING3. If not see > +;; <http://www.gnu.org/licenses/>. > + > +(define_mode_iterator VWEXTF_ZVFBF [ > + (RVVM8SF "TARGET_VECTOR_ELEN_BF_16 && TARGET_VECTOR_ELEN_FP_32") > + (RVVM4SF "TARGET_VECTOR_ELEN_BF_16 && TARGET_VECTOR_ELEN_FP_32") > + (RVVM2SF "TARGET_VECTOR_ELEN_BF_16 && TARGET_VECTOR_ELEN_FP_32") > + (RVVM1SF "TARGET_VECTOR_ELEN_BF_16 && TARGET_VECTOR_ELEN_FP_32") > + (RVVMF2SF "TARGET_VECTOR_ELEN_BF_16 && TARGET_VECTOR_ELEN_FP_32 && > TARGET_MIN_VLEN > 32") > +]) > + > +(define_mode_attr V_FP32TOBF16_TRUNC [ > + (RVVM8SF "RVVM4BF") (RVVM4SF "RVVM2BF") (RVVM2SF "RVVM1BF") (RVVM1SF > "RVVMF2BF") (RVVMF2SF "RVVMF4BF") > +]) > + > +(define_mode_attr VF32_SUBEL [ > + (RVVM8SF "BF") (RVVM4SF "BF") (RVVM2SF "BF") (RVVM1SF "BF") (RVVMF2SF > "BF")]) > + > +;; Zvfbfmin extension > + > +(define_insn "@pred_trunc<mode>_to_bf16" > + [(set (match_operand:<V_FP32TOBF16_TRUNC> 0 "register_operand" "=vd, > vd, vr, vr, &vr, &vr") > + (if_then_else:<V_FP32TOBF16_TRUNC> > + (unspec:<VM> > + [(match_operand:<VM> 1 "vector_mask_operand" " vm, > vm,Wc1,Wc1,vmWc1,vmWc1") > + (match_operand 4 "vector_length_operand" " rK, > rK, rK, rK, rK, rK") > + (match_operand 5 "const_int_operand" " i, > i, i, i, i, i") > + (match_operand 6 "const_int_operand" " i, > i, i, i, i, i") > + (match_operand 7 "const_int_operand" " i, > i, i, i, i, i") > + (match_operand 8 "const_int_operand" " i, > i, i, i, i, i") > + (reg:SI VL_REGNUM) > + (reg:SI VTYPE_REGNUM) > + (reg:SI FRM_REGNUM)] UNSPEC_VPREDICATE) > + (float_truncate:<V_FP32TOBF16_TRUNC> > + (match_operand:VWEXTF_ZVFBF 3 "register_operand" " > 0, 0, 0, 0, vr, vr")) > + (match_operand:<V_FP32TOBF16_TRUNC> 2 "vector_merge_operand" " > vu, 0, vu, 0, vu, 0")))] > + "TARGET_ZVFBFMIN" > + "vfncvtbf16.f.f.w\t%0,%3%p1" > + [(set_attr "type" "vfncvtbf16") > + (set_attr "mode" "<V_FP32TOBF16_TRUNC>") > + (set (attr "frm_mode") > + (symbol_ref "riscv_vector::get_frm_mode (operands[8])"))]) > + > +(define_insn "@pred_extend_bf16_to_<mode>" > + [(set (match_operand:VWEXTF_ZVFBF 0 "register_operand" "=&vr, > &vr") > + (if_then_else:VWEXTF_ZVFBF > + (unspec:<VM> > + [(match_operand:<VM> 1 "vector_mask_operand" > "vmWc1,vmWc1") > + (match_operand 4 "vector_length_operand" " > rK, rK") > + (match_operand 5 "const_int_operand" " > i, i") > + (match_operand 6 "const_int_operand" " > i, i") > + (match_operand 7 "const_int_operand" " > i, i") > + (reg:SI VL_REGNUM) > + (reg:SI VTYPE_REGNUM)] UNSPEC_VPREDICATE) > + (float_extend:VWEXTF_ZVFBF > + (match_operand:<V_FP32TOBF16_TRUNC> 3 "register_operand" " > vr, vr")) > + (match_operand:VWEXTF_ZVFBF 2 "vector_merge_operand" " > vu, 0")))] > + "TARGET_ZVFBFMIN" > + "vfwcvtbf16.f.f.v\t%0,%3%p1" > + [(set_attr "type" "vfwcvtbf16") > + (set_attr "mode" "<V_FP32TOBF16_TRUNC>")]) > + > + > +(define_insn "@pred_widen_bf16_mul_<mode>" > + [(set (match_operand:VWEXTF_ZVFBF 0 "register_operand" > "=&vr") > + (if_then_else:VWEXTF_ZVFBF > + (unspec:<VM> > + [(match_operand:<VM> 1 "vector_mask_operand" > "vmWc1") > + (match_operand 5 "vector_length_operand" " > rK") > + (match_operand 6 "const_int_operand" " > i") > + (match_operand 7 "const_int_operand" " > i") > + (match_operand 8 "const_int_operand" " > i") > + (match_operand 9 "const_int_operand" " > i") > + (reg:SI VL_REGNUM) > + (reg:SI VTYPE_REGNUM) > + (reg:SI FRM_REGNUM)] UNSPEC_VPREDICATE) > + (plus:VWEXTF_ZVFBF > + (mult:VWEXTF_ZVFBF > + (float_extend:VWEXTF_ZVFBF > + (match_operand:<V_FP32TOBF16_TRUNC> 3 "register_operand" " > vr")) > + (float_extend:VWEXTF_ZVFBF > + (match_operand:<V_FP32TOBF16_TRUNC> 4 "register_operand" " > vr"))) > + (match_operand:VWEXTF_ZVFBF 2 "register_operand" " > 0")) > + (match_dup 2)))] > + "TARGET_ZVFBFWMA" > + "vfwmaccbf16.vv\t%0,%3,%4%p1" > + [(set_attr "type" "vfwmaccbf16") > + (set_attr "mode" "<V_FP32TOBF16_TRUNC>") > + (set (attr "frm_mode") > + (symbol_ref "riscv_vector::get_frm_mode (operands[9])"))]) > + > +(define_insn "@pred_widen_bf16_mul_<mode>_scalar" > + [(set (match_operand:VWEXTF_ZVFBF 0 "register_operand" > "=&vr") > + (if_then_else:VWEXTF_ZVFBF > + (unspec:<VM> > + [(match_operand:<VM> 1 "vector_mask_operand" > "vmWc1") > + (match_operand 5 "vector_length_operand" " > rK") > + (match_operand 6 "const_int_operand" " > i") > + (match_operand 7 "const_int_operand" " > i") > + (match_operand 8 "const_int_operand" " > i") > + (match_operand 9 "const_int_operand" " > i") > + (reg:SI VL_REGNUM) > + (reg:SI VTYPE_REGNUM) > + (reg:SI FRM_REGNUM)] UNSPEC_VPREDICATE) > + (plus:VWEXTF_ZVFBF > + (mult:VWEXTF_ZVFBF > + (float_extend:VWEXTF_ZVFBF > + (vec_duplicate:<V_FP32TOBF16_TRUNC> > + (match_operand:<VF32_SUBEL> 3 "register_operand" " > f"))) > + (float_extend:VWEXTF_ZVFBF > + (match_operand:<V_FP32TOBF16_TRUNC> 4 "register_operand" " > vr"))) > + (match_operand:VWEXTF_ZVFBF 2 "register_operand" " > 0")) > + (match_dup 2)))] > + "TARGET_ZVFBFWMA" > + "vfwmaccbf16.vf\t%0,%3,%4%p1" > + [(set_attr "type" "vfwmaccbf16") > + (set_attr "mode" "<V_FP32TOBF16_TRUNC>") > + (set (attr "frm_mode") > + (symbol_ref "riscv_vector::get_frm_mode (operands[9])"))]) > diff --git a/gcc/config/riscv/vector-iterators.md > b/gcc/config/riscv/vector-iterators.md > index 76c27035a73..098a1c23b90 100644 > --- a/gcc/config/riscv/vector-iterators.md > +++ b/gcc/config/riscv/vector-iterators.md > @@ -146,6 +146,15 @@ > (RVVM2DF "TARGET_VECTOR_ELEN_FP_64") (RVVM1DF > "TARGET_VECTOR_ELEN_FP_64") > ]) > > +(define_mode_iterator VF_ZVFBF16 [ > + (RVVM8BF "TARGET_VECTOR_ELEN_BF_16") > + (RVVM4BF "TARGET_VECTOR_ELEN_BF_16") > + (RVVM2BF "TARGET_VECTOR_ELEN_BF_16") > + (RVVM1BF "TARGET_VECTOR_ELEN_BF_16") > + (RVVMF2BF "TARGET_VECTOR_ELEN_BF_16") > + (RVVMF4BF "TARGET_VECTOR_ELEN_BF_16 && TARGET_MIN_VLEN > 32") > +]) > + > (define_mode_iterator VF_ZVFHMIN [ > (RVVM8HF "TARGET_VECTOR_ELEN_FP_16") (RVVM4HF > "TARGET_VECTOR_ELEN_FP_16") (RVVM2HF "TARGET_VECTOR_ELEN_FP_16") > (RVVM1HF "TARGET_VECTOR_ELEN_FP_16") (RVVMF2HF > "TARGET_VECTOR_ELEN_FP_16") > @@ -281,6 +290,10 @@ > (define_mode_iterator VEEWEXT2 [ > RVVM8HI RVVM4HI RVVM2HI RVVM1HI RVVMF2HI (RVVMF4HI "TARGET_MIN_VLEN > > 32") > > + (RVVM8BF "TARGET_VECTOR_ELEN_BF_16") (RVVM4BF > "TARGET_VECTOR_ELEN_BF_16") (RVVM2BF "TARGET_VECTOR_ELEN_BF_16") > + (RVVM1BF "TARGET_VECTOR_ELEN_BF_16") (RVVMF2BF > "TARGET_VECTOR_ELEN_BF_16") > + (RVVMF4BF "TARGET_VECTOR_ELEN_BF_16 && TARGET_MIN_VLEN > 32") > + > (RVVM8HF "TARGET_VECTOR_ELEN_FP_16") (RVVM4HF > "TARGET_VECTOR_ELEN_FP_16") (RVVM2HF "TARGET_VECTOR_ELEN_FP_16") > (RVVM1HF "TARGET_VECTOR_ELEN_FP_16") (RVVMF2HF > "TARGET_VECTOR_ELEN_FP_16") > (RVVMF4HF "TARGET_VECTOR_ELEN_FP_16 && TARGET_MIN_VLEN > 32") > @@ -323,6 +336,10 @@ > > RVVM4HI RVVM2HI RVVM1HI RVVMF2HI (RVVMF4HI "TARGET_MIN_VLEN > 32") > > + (RVVM4BF "TARGET_VECTOR_ELEN_BF_16") (RVVM2BF > "TARGET_VECTOR_ELEN_BF_16") > + (RVVM1BF "TARGET_VECTOR_ELEN_BF_16") (RVVMF2BF > "TARGET_VECTOR_ELEN_BF_16") > + (RVVMF4BF "TARGET_VECTOR_ELEN_BF_16 && TARGET_MIN_VLEN > 32") > + > (RVVM4HF "TARGET_VECTOR_ELEN_FP_16") (RVVM2HF > "TARGET_VECTOR_ELEN_FP_16") > (RVVM1HF "TARGET_VECTOR_ELEN_FP_16") (RVVMF2HF > "TARGET_VECTOR_ELEN_FP_16") > (RVVMF4HF "TARGET_VECTOR_ELEN_FP_16 && TARGET_MIN_VLEN > 32") > @@ -346,6 +363,11 @@ > (RVVMF2HI "TARGET_64BIT") > (RVVMF4HI "TARGET_MIN_VLEN > 32 && TARGET_64BIT") > > + (RVVM2BF "TARGET_VECTOR_ELEN_BF_16") > + (RVVM1BF "TARGET_VECTOR_ELEN_BF_16") > + (RVVMF2BF "TARGET_VECTOR_ELEN_FP_16") > + (RVVMF4BF "TARGET_VECTOR_ELEN_BF_16 && TARGET_MIN_VLEN > 32 && > TARGET_64BIT") > + > (RVVM2HF "TARGET_VECTOR_ELEN_FP_16 && TARGET_64BIT") > (RVVM1HF "TARGET_VECTOR_ELEN_FP_16 && TARGET_64BIT") > (RVVMF2HF "TARGET_VECTOR_ELEN_FP_16 && TARGET_64BIT") > @@ -768,6 +790,7 @@ > (RVVMF4HI "TARGET_MIN_VLEN > 32") > (RVVMF2SI "TARGET_MIN_VLEN > 32") > (RVVM1DI "TARGET_VECTOR_ELEN_64") > + (RVVMF4BF "TARGET_VECTOR_ELEN_BF_16 && TARGET_MIN_VLEN > 32") > (RVVMF4HF "TARGET_VECTOR_ELEN_FP_16 && TARGET_MIN_VLEN > 32") > (RVVMF2SF "TARGET_VECTOR_ELEN_FP_32 && TARGET_MIN_VLEN > 32") > (RVVM1DF "TARGET_VECTOR_ELEN_FP_64") > @@ -778,6 +801,7 @@ > RVVMF2HI > RVVM1SI > (RVVM2DI "TARGET_VECTOR_ELEN_64") > + (RVVMF2BF "TARGET_VECTOR_ELEN_BF_16") > (RVVMF2HF "TARGET_VECTOR_ELEN_FP_16") > (RVVM1SF "TARGET_VECTOR_ELEN_FP_32") > (RVVM2DF "TARGET_VECTOR_ELEN_FP_64") > @@ -788,6 +812,7 @@ > RVVM1HI > RVVM2SI > (RVVM4DI "TARGET_VECTOR_ELEN_64") > + (RVVM1BF "TARGET_VECTOR_ELEN_BF_16") > (RVVM1HF "TARGET_VECTOR_ELEN_FP_16") > (RVVM2SF "TARGET_VECTOR_ELEN_FP_32") > (RVVM4DF "TARGET_VECTOR_ELEN_FP_64") > @@ -798,6 +823,7 @@ > RVVM2HI > RVVM4SI > (RVVM8DI "TARGET_VECTOR_ELEN_64") > + (RVVM2BF "TARGET_VECTOR_ELEN_BF_16") > (RVVM2HF "TARGET_VECTOR_ELEN_FP_16") > (RVVM4SF "TARGET_VECTOR_ELEN_FP_32") > (RVVM8DF "TARGET_VECTOR_ELEN_FP_64") > @@ -807,6 +833,7 @@ > RVVM2QI > RVVM4HI > RVVM8SI > + (RVVM4BF "TARGET_VECTOR_ELEN_BF_16") > (RVVM4HF "TARGET_VECTOR_ELEN_FP_16") > (RVVM8SF "TARGET_VECTOR_ELEN_FP_32") > ]) > @@ -814,6 +841,7 @@ > (define_mode_iterator RATIO2 [ > RVVM4QI > RVVM8HI > + (RVVM8BF "TARGET_VECTOR_ELEN_BF_16") > (RVVM8HF "TARGET_VECTOR_ELEN_FP_16") > ]) > > @@ -865,6 +893,9 @@ > > RVVM8HI RVVM4HI RVVM2HI RVVM1HI > > + (RVVM8BF "TARGET_VECTOR_ELEN_BF_16") (RVVM4BF > "TARGET_VECTOR_ELEN_BF_16") > + (RVVM2BF "TARGET_VECTOR_ELEN_BF_16") (RVVM1BF > "TARGET_VECTOR_ELEN_BF_16") > + > (RVVM8HF "TARGET_VECTOR_ELEN_FP_16") (RVVM4HF > "TARGET_VECTOR_ELEN_FP_16") > (RVVM2HF "TARGET_VECTOR_ELEN_FP_16") (RVVM1HF > "TARGET_VECTOR_ELEN_FP_16") > > @@ -885,6 +916,8 @@ > > RVVMF2HI (RVVMF4HI "TARGET_MIN_VLEN > 32") > > + (RVVMF2BF "TARGET_VECTOR_ELEN_BF_16") (RVVMF4BF > "TARGET_VECTOR_ELEN_BF_16 && TARGET_MIN_VLEN > 32") > + > (RVVMF2HF "TARGET_VECTOR_ELEN_FP_16") (RVVMF4HF > "TARGET_VECTOR_ELEN_FP_16 && TARGET_MIN_VLEN > 32") > > (RVVMF2SI "TARGET_MIN_VLEN > 32") > @@ -1142,6 +1175,13 @@ > (RVVM1x6DI "TARGET_VECTOR_ELEN_64") > (RVVM1x7DI "TARGET_VECTOR_ELEN_64") > (RVVM1x8DI "TARGET_VECTOR_ELEN_64") > + (RVVMF4x2BF "TARGET_MIN_VLEN > 32 && TARGET_VECTOR_ELEN_BF_16") > + (RVVMF4x3BF "TARGET_MIN_VLEN > 32 && TARGET_VECTOR_ELEN_BF_16") > + (RVVMF4x4BF "TARGET_MIN_VLEN > 32 && TARGET_VECTOR_ELEN_BF_16") > + (RVVMF4x5BF "TARGET_MIN_VLEN > 32 && TARGET_VECTOR_ELEN_BF_16") > + (RVVMF4x6BF "TARGET_MIN_VLEN > 32 && TARGET_VECTOR_ELEN_BF_16") > + (RVVMF4x7BF "TARGET_MIN_VLEN > 32 && TARGET_VECTOR_ELEN_BF_16") > + (RVVMF4x8BF "TARGET_MIN_VLEN > 32 && TARGET_VECTOR_ELEN_BF_16") > (RVVMF4x2HF "TARGET_MIN_VLEN > 32 && TARGET_VECTOR_ELEN_FP_16") > (RVVMF4x3HF "TARGET_MIN_VLEN > 32 && TARGET_VECTOR_ELEN_FP_16") > (RVVMF4x4HF "TARGET_MIN_VLEN > 32 && TARGET_VECTOR_ELEN_FP_16") > @@ -1190,6 +1230,13 @@ > (RVVM2x2DI "TARGET_VECTOR_ELEN_64") > (RVVM2x3DI "TARGET_VECTOR_ELEN_64") > (RVVM2x4DI "TARGET_VECTOR_ELEN_64") > + (RVVMF2x2BF "TARGET_VECTOR_ELEN_BF_16") > + (RVVMF2x3BF "TARGET_VECTOR_ELEN_BF_16") > + (RVVMF2x4BF "TARGET_VECTOR_ELEN_BF_16") > + (RVVMF2x5BF "TARGET_VECTOR_ELEN_BF_16") > + (RVVMF2x6BF "TARGET_VECTOR_ELEN_BF_16") > + (RVVMF2x7BF "TARGET_VECTOR_ELEN_BF_16") > + (RVVMF2x8BF "TARGET_VECTOR_ELEN_BF_16") > (RVVMF2x2HF "TARGET_VECTOR_ELEN_FP_16") > (RVVMF2x3HF "TARGET_VECTOR_ELEN_FP_16") > (RVVMF2x4HF "TARGET_VECTOR_ELEN_FP_16") > @@ -1228,6 +1275,13 @@ > RVVM2x3SI > RVVM2x4SI > (RVVM4x2DI "TARGET_VECTOR_ELEN_64") > + (RVVM1x2BF "TARGET_VECTOR_ELEN_BF_16") > + (RVVM1x3BF "TARGET_VECTOR_ELEN_BF_16") > + (RVVM1x4BF "TARGET_VECTOR_ELEN_BF_16") > + (RVVM1x5BF "TARGET_VECTOR_ELEN_BF_16") > + (RVVM1x6BF "TARGET_VECTOR_ELEN_BF_16") > + (RVVM1x7BF "TARGET_VECTOR_ELEN_BF_16") > + (RVVM1x8BF "TARGET_VECTOR_ELEN_BF_16") > (RVVM1x2HF "TARGET_VECTOR_ELEN_FP_16") > (RVVM1x3HF "TARGET_VECTOR_ELEN_FP_16") > (RVVM1x4HF "TARGET_VECTOR_ELEN_FP_16") > @@ -1253,6 +1307,9 @@ > RVVM2x3HI > RVVM2x4HI > RVVM4x2SI > + (RVVM2x2BF "TARGET_VECTOR_ELEN_BF_16") > + (RVVM2x3BF "TARGET_VECTOR_ELEN_BF_16") > + (RVVM2x4BF "TARGET_VECTOR_ELEN_BF_16") > (RVVM2x2HF "TARGET_VECTOR_ELEN_FP_16") > (RVVM2x3HF "TARGET_VECTOR_ELEN_FP_16") > (RVVM2x4HF "TARGET_VECTOR_ELEN_FP_16") > @@ -1264,6 +1321,7 @@ > RVVM2x3QI > RVVM2x4QI > RVVM4x2HI > + (RVVM4x2BF "TARGET_VECTOR_ELEN_BF_16") > (RVVM4x2HF "TARGET_VECTOR_ELEN_FP_16") > ]) > > @@ -1475,6 +1533,13 @@ > (RVVM2DI "TARGET_VECTOR_ELEN_64 && TARGET_64BIT") > (RVVM1DI "TARGET_VECTOR_ELEN_64 && TARGET_64BIT") > > + (RVVM8BF "TARGET_VECTOR_ELEN_BF_16") > + (RVVM4BF "TARGET_VECTOR_ELEN_BF_16") > + (RVVM2BF "TARGET_VECTOR_ELEN_BF_16") > + (RVVM1BF "TARGET_VECTOR_ELEN_BF_16") > + (RVVMF2BF "TARGET_VECTOR_ELEN_BF_16") > + (RVVMF4BF "TARGET_VECTOR_ELEN_BF_16 && TARGET_MIN_VLEN > 32") > + > (RVVM8HF "TARGET_ZVFH") (RVVM4HF "TARGET_ZVFH") (RVVM2HF "TARGET_ZVFH") > (RVVM1HF "TARGET_ZVFH") (RVVMF2HF "TARGET_ZVFH") > (RVVMF4HF "TARGET_ZVFH && TARGET_MIN_VLEN > 32") > @@ -1574,7 +1639,7 @@ > > (define_mode_iterator VLS [VLSI VLSF_ZVFHMIN]) > > -(define_mode_iterator V [VI VF_ZVFHMIN]) > +(define_mode_iterator V [VI VF_ZVFBF16 VF_ZVFHMIN]) > > (define_mode_iterator V_VLS [V VLS]) > > @@ -1582,7 +1647,7 @@ > > (define_mode_iterator V_VLSF [VF VLSF]) > > -(define_mode_iterator V_VLSF_ZVFHMIN [VF_ZVFHMIN VLSF_ZVFHMIN]) > +(define_mode_iterator V_VLSF_ZVFHMIN [VF_ZVFBF16 VF_ZVFHMIN VLSF_ZVFHMIN]) > > (define_mode_iterator VT [V1T V2T V4T V8T V16T V32T]) > > @@ -1624,6 +1689,8 @@ > > (RVVM8HI "RVVM8HI") (RVVM4HI "RVVM4HI") (RVVM2HI "RVVM2HI") (RVVM1HI > "RVVM1HI") (RVVMF2HI "RVVMF2HI") (RVVMF4HI "RVVMF4HI") > > + (RVVM8BF "RVVM8HI") (RVVM4BF "RVVM4HI") (RVVM2BF "RVVM2HI") (RVVM1BF > "RVVM1HI") (RVVMF2BF "RVVMF2HI") (RVVMF4BF "RVVMF4HI") > + > (RVVM8HF "RVVM8HI") (RVVM4HF "RVVM4HI") (RVVM2HF "RVVM2HI") (RVVM1HF > "RVVM1HI") (RVVMF2HF "RVVMF2HI") (RVVMF4HF "RVVMF4HI") > > (RVVM8SI "RVVM8SI") (RVVM4SI "RVVM4SI") (RVVM2SI "RVVM2SI") (RVVM1SI > "RVVM1SI") (RVVMF2SI "RVVMF2SI") > @@ -1815,6 +1882,8 @@ > > (RVVM8HI "RVVMF2BI") (RVVM4HI "RVVMF4BI") (RVVM2HI "RVVMF8BI") (RVVM1HI > "RVVMF16BI") (RVVMF2HI "RVVMF32BI") (RVVMF4HI "RVVMF64BI") > > + (RVVM8BF "RVVMF2BI") (RVVM4BF "RVVMF4BI") (RVVM2BF "RVVMF8BI") (RVVM1BF > "RVVMF16BI") (RVVMF2BF "RVVMF32BI") (RVVMF4BF "RVVMF64BI") > + > (RVVM8HF "RVVMF2BI") (RVVM4HF "RVVMF4BI") (RVVM2HF "RVVMF8BI") (RVVM1HF > "RVVMF16BI") (RVVMF2HF "RVVMF32BI") (RVVMF4HF "RVVMF64BI") > > (RVVM8SI "RVVMF4BI") (RVVM4SI "RVVMF8BI") (RVVM2SI "RVVMF16BI") > (RVVM1SI "RVVMF32BI") (RVVMF2SI "RVVMF64BI") > @@ -1841,6 +1910,14 @@ > (RVVM2x3HI "RVVMF8BI") (RVVM1x3HI "RVVMF16BI") (RVVMF2x3HI "RVVMF32BI") > (RVVMF4x3HI "RVVMF64BI") > (RVVM4x2HI "RVVMF4BI") (RVVM2x2HI "RVVMF8BI") (RVVM1x2HI "RVVMF16BI") > (RVVMF2x2HI "RVVMF32BI") (RVVMF4x2HI "RVVMF64BI") > > + (RVVM1x8BF "RVVMF16BI") (RVVMF2x8BF "RVVMF32BI") (RVVMF4x8BF > "RVVMF64BI") > + (RVVM1x7BF "RVVMF16BI") (RVVMF2x7BF "RVVMF32BI") (RVVMF4x7BF > "RVVMF64BI") > + (RVVM1x6BF "RVVMF16BI") (RVVMF2x6BF "RVVMF32BI") (RVVMF4x6BF > "RVVMF64BI") > + (RVVM1x5BF "RVVMF16BI") (RVVMF2x5BF "RVVMF32BI") (RVVMF4x5BF > "RVVMF64BI") > + (RVVM2x4BF "RVVMF8BI") (RVVM1x4BF "RVVMF16BI") (RVVMF2x4BF "RVVMF32BI") > (RVVMF4x4BF "RVVMF64BI") > + (RVVM2x3BF "RVVMF8BI") (RVVM1x3BF "RVVMF16BI") (RVVMF2x3BF "RVVMF32BI") > (RVVMF4x3BF "RVVMF64BI") > + (RVVM4x2BF "RVVMF4BI") (RVVM2x2BF "RVVMF8BI") (RVVM1x2BF "RVVMF16BI") > (RVVMF2x2BF "RVVMF32BI") (RVVMF4x2BF "RVVMF64BI") > + > (RVVM1x8HF "RVVMF16BI") (RVVMF2x8HF "RVVMF32BI") (RVVMF4x8HF > "RVVMF64BI") > (RVVM1x7HF "RVVMF16BI") (RVVMF2x7HF "RVVMF32BI") (RVVMF4x7HF > "RVVMF64BI") > (RVVM1x6HF "RVVMF16BI") (RVVMF2x6HF "RVVMF32BI") (RVVMF4x6HF > "RVVMF64BI") > @@ -1916,6 +1993,8 @@ > > (RVVM8HI "rvvmf2bi") (RVVM4HI "rvvmf4bi") (RVVM2HI "rvvmf8bi") (RVVM1HI > "rvvmf16bi") (RVVMF2HI "rvvmf32bi") (RVVMF4HI "rvvmf64bi") > > + (RVVM8BF "rvvmf2bi") (RVVM4BF "rvvmf4bi") (RVVM2BF "rvvmf8bi") (RVVM1BF > "rvvmf16bi") (RVVMF2BF "rvvmf32bi") (RVVMF4BF "rvvmf64bi") > + > (RVVM8HF "rvvmf2bi") (RVVM4HF "rvvmf4bi") (RVVM2HF "rvvmf8bi") (RVVM1HF > "rvvmf16bi") (RVVMF2HF "rvvmf32bi") (RVVMF4HF "rvvmf64bi") > > (RVVM8SI "rvvmf4bi") (RVVM4SI "rvvmf8bi") (RVVM2SI "rvvmf16bi") > (RVVM1SI "rvvmf32bi") (RVVMF2SI "rvvmf64bi") > @@ -1942,6 +2021,14 @@ > (RVVM2x3HI "rvvmf8bi") (RVVM1x3HI "rvvmf16bi") (RVVMF2x3HI "rvvmf32bi") > (RVVMF4x3HI "rvvmf64bi") > (RVVM4x2HI "rvvmf4bi") (RVVM2x2HI "rvvmf8bi") (RVVM1x2HI "rvvmf16bi") > (RVVMF2x2HI "rvvmf32bi") (RVVMF4x2HI "rvvmf64bi") > > + (RVVM1x8BF "rvvmf16bi") (RVVMF2x8BF "rvvmf32bi") (RVVMF4x8BF > "rvvmf64bi") > + (RVVM1x7BF "rvvmf16bi") (RVVMF2x7BF "rvvmf32bi") (RVVMF4x7BF > "rvvmf64bi") > + (RVVM1x6BF "rvvmf16bi") (RVVMF2x6BF "rvvmf32bi") (RVVMF4x6BF > "rvvmf64bi") > + (RVVM1x5BF "rvvmf16bi") (RVVMF2x5BF "rvvmf32bi") (RVVMF4x5BF > "rvvmf64bi") > + (RVVM2x4BF "rvvmf8bi") (RVVM1x4BF "rvvmf16bi") (RVVMF2x4BF "rvvmf32bi") > (RVVMF4x4BF "rvvmf64bi") > + (RVVM2x3BF "rvvmf8bi") (RVVM1x3BF "rvvmf16bi") (RVVMF2x3BF "rvvmf32bi") > (RVVMF4x3BF "rvvmf64bi") > + (RVVM4x2BF "rvvmf4bi") (RVVM2x2BF "rvvmf8bi") (RVVM1x2BF "rvvmf16bi") > (RVVMF2x2BF "rvvmf32bi") (RVVMF4x2BF "rvvmf64bi") > + > (RVVM1x8HF "rvvmf16bi") (RVVMF2x8HF "rvvmf32bi") (RVVMF4x8HF > "rvvmf64bi") > (RVVM1x7HF "rvvmf16bi") (RVVMF2x7HF "rvvmf32bi") (RVVMF4x7HF > "rvvmf64bi") > (RVVM1x6HF "rvvmf16bi") (RVVMF2x6HF "rvvmf32bi") (RVVMF4x6HF > "rvvmf64bi") > @@ -2017,6 +2104,8 @@ > > (RVVM8HI "HI") (RVVM4HI "HI") (RVVM2HI "HI") (RVVM1HI "HI") (RVVMF2HI > "HI") (RVVMF4HI "HI") > > + (RVVM8BF "BF") (RVVM4BF "BF") (RVVM2BF "BF") (RVVM1BF "BF") (RVVMF2BF > "BF") (RVVMF4BF "BF") > + > (RVVM8HF "HF") (RVVM4HF "HF") (RVVM2HF "HF") (RVVM1HF "HF") (RVVMF2HF > "HF") (RVVMF4HF "HF") > > (RVVM8SI "SI") (RVVM4SI "SI") (RVVM2SI "SI") (RVVM1SI "SI") (RVVMF2SI > "SI") > @@ -2114,6 +2203,8 @@ > > (RVVM8HI "hi") (RVVM4HI "hi") (RVVM2HI "hi") (RVVM1HI "hi") (RVVMF2HI > "hi") (RVVMF4HI "hi") > > + (RVVM8BF "bf") (RVVM4BF "bf") (RVVM2BF "bf") (RVVM1BF "bf") (RVVMF2BF > "bf") (RVVMF4BF "bf") > + > (RVVM8HF "hf") (RVVM4HF "hf") (RVVM2HF "hf") (RVVM1HF "hf") (RVVMF2HF > "hf") (RVVMF4HF "hf") > > (RVVM8SI "si") (RVVM4SI "si") (RVVM2SI "si") (RVVM1SI "si") (RVVMF2SI > "si") > @@ -2156,6 +2247,32 @@ > (RVVM2x3HI "rvvm2hi") (RVVM1x3HI "rvvm1hi") (RVVMF2x3HI "rvvmf2hi") > (RVVMF4x3HI "rvvmf4hi") > (RVVM4x2HI "rvvm4hi") (RVVM2x2HI "rvvm2hi") (RVVM1x2HI "rvvm1hi") > (RVVMF2x2HI "rvvmf2hi") (RVVMF4x2HI "rvvmf4hi") > > + (RVVM1x8BF "rvvm1bf") > + (RVVMF2x8BF "rvvmf2bf") > + (RVVMF4x8BF "rvvmf4bf") > + (RVVM1x7BF "rvvm1bf") > + (RVVMF2x7BF "rvvmf2bf") > + (RVVMF4x7BF "rvvmf4bf") > + (RVVM1x6BF "rvvm1bf") > + (RVVMF2x6BF "rvvmf2bf") > + (RVVMF4x6BF "rvvmf4bf") > + (RVVM1x5BF "rvvm1bf") > + (RVVMF2x5BF "rvvmf2bf") > + (RVVMF4x5BF "rvvmf4bf") > + (RVVM2x4BF "rvvm2bf") > + (RVVM1x4BF "rvvm1bf") > + (RVVMF2x4BF "rvvmf2bf") > + (RVVMF4x4BF "rvvmf4bf") > + (RVVM2x3BF "rvvm2bf") > + (RVVM1x3BF "rvvm1bf") > + (RVVMF2x3BF "rvvmf2bf") > + (RVVMF4x3BF "rvvmf4bf") > + (RVVM4x2BF "rvvm4bf") > + (RVVM2x2BF "rvvm2bf") > + (RVVM1x2BF "rvvm1bf") > + (RVVMF2x2BF "rvvmf2bf") > + (RVVMF4x2BF "rvvmf4bf") > + > (RVVM1x8HF "rvvm1hf") > (RVVMF2x8HF "rvvmf2hf") > (RVVMF4x8HF "rvvmf4hf") > @@ -2292,6 +2409,14 @@ > (RVVM2x3HI "3") (RVVM1x3HI "3") (RVVMF2x3HI "3") (RVVMF4x3HI "3") > (RVVM4x2HI "2") (RVVM2x2HI "2") (RVVM1x2HI "2") (RVVMF2x2HI "2") > (RVVMF4x2HI "2") > > + (RVVM1x8BF "8") (RVVMF2x8BF "8") (RVVMF4x8BF "8") > + (RVVM1x7BF "7") (RVVMF2x7BF "7") (RVVMF4x7BF "7") > + (RVVM1x6BF "6") (RVVMF2x6BF "6") (RVVMF4x6BF "6") > + (RVVM1x5BF "5") (RVVMF2x5BF "5") (RVVMF4x5BF "5") > + (RVVM2x4BF "4") (RVVM1x4BF "4") (RVVMF2x4BF "4") (RVVMF4x4BF "4") > + (RVVM2x3BF "3") (RVVM1x3BF "3") (RVVMF2x3BF "3") (RVVMF4x3BF "3") > + (RVVM4x2BF "2") (RVVM2x2BF "2") (RVVM1x2BF "2") (RVVMF2x2BF "2") > (RVVMF4x2BF "2") > + > (RVVM1x8HF "8") (RVVMF2x8HF "8") (RVVMF4x8HF "8") > (RVVM1x7HF "7") (RVVMF2x7HF "7") (RVVMF4x7HF "7") > (RVVM1x6HF "6") (RVVMF2x6HF "6") (RVVMF4x6HF "6") > @@ -2346,6 +2471,8 @@ > > (RVVM8HI "16") (RVVM4HI "16") (RVVM2HI "16") (RVVM1HI "16") (RVVMF2HI > "16") (RVVMF4HI "16") > > + (RVVM8BF "16") (RVVM4BF "16") (RVVM2BF "16") (RVVM1BF "16") (RVVMF2BF > "16") (RVVMF4BF "16") > + > (RVVM8HF "16") (RVVM4HF "16") (RVVM2HF "16") (RVVM1HF "16") (RVVMF2HF > "16") (RVVMF4HF "16") > > (RVVM8SI "32") (RVVM4SI "32") (RVVM2SI "32") (RVVM1SI "32") (RVVMF2SI > "32") > @@ -2372,6 +2499,14 @@ > (RVVM2x3HI "16") (RVVM1x3HI "16") (RVVMF2x3HI "16") (RVVMF4x3HI "16") > (RVVM4x2HI "16") (RVVM2x2HI "16") (RVVM1x2HI "16") (RVVMF2x2HI "16") > (RVVMF4x2HI "16") > > + (RVVM1x8BF "16") (RVVMF2x8BF "16") (RVVMF4x8BF "16") > + (RVVM1x7BF "16") (RVVMF2x7BF "16") (RVVMF4x7BF "16") > + (RVVM1x6BF "16") (RVVMF2x6BF "16") (RVVMF4x6BF "16") > + (RVVM1x5BF "16") (RVVMF2x5BF "16") (RVVMF4x5BF "16") > + (RVVM2x4BF "16") (RVVM1x4BF "16") (RVVMF2x4BF "16") (RVVMF4x4BF "16") > + (RVVM2x3BF "16") (RVVM1x3BF "16") (RVVMF2x3BF "16") (RVVMF4x3BF "16") > + (RVVM4x2BF "16") (RVVM2x2BF "16") (RVVM1x2BF "16") (RVVMF2x2BF "16") > (RVVMF4x2BF "16") > + > (RVVM1x8HF "16") (RVVMF2x8HF "16") (RVVMF4x8HF "16") > (RVVM1x7HF "16") (RVVMF2x7HF "16") (RVVMF4x7HF "16") > (RVVM1x6HF "16") (RVVMF2x6HF "16") (RVVMF4x6HF "16") > @@ -2438,6 +2573,8 @@ > (define_mode_attr double_trunc_sew [ > (RVVM8HI "8") (RVVM4HI "8") (RVVM2HI "8") (RVVM1HI "8") (RVVMF2HI "8") > (RVVMF4HI "8") > > + (RVVM8BF "8") (RVVM4BF "8") (RVVM2BF "8") (RVVM1BF "8") (RVVMF2BF "8") > (RVVMF4BF "8") > + > (RVVM8HF "8") (RVVM4HF "8") (RVVM2HF "8") (RVVM1HF "8") (RVVMF2HF "8") > (RVVMF4HF "8") > > (RVVM8SI "16") (RVVM4SI "16") (RVVM2SI "16") (RVVM1SI "16") (RVVMF2SI > "16") > @@ -2470,6 +2607,8 @@ > > (RVVM4HI "32") (RVVM2HI "32") (RVVM1HI "32") (RVVMF2HI "32") (RVVMF4HI > "32") > > + (RVVM4BF "32") (RVVM2BF "32") (RVVM1BF "32") (RVVMF2BF "32") (RVVMF4BF > "32") > + > (RVVM4HF "32") (RVVM2HF "32") (RVVM1HF "32") (RVVMF2HF "32") (RVVMF4HF > "32") > > (RVVM4SI "64") (RVVM2SI "64") (RVVM1SI "64") (RVVMF2SI "64") > @@ -2804,6 +2943,8 @@ > (define_mode_attr VINDEX_DOUBLE_TRUNC [ > (RVVM8HI "RVVM4QI") (RVVM4HI "RVVM2QI") (RVVM2HI "RVVM1QI") (RVVM1HI > "RVVMF2QI") (RVVMF2HI "RVVMF4QI") (RVVMF4HI "RVVMF8QI") > > + (RVVM8BF "RVVM4QI") (RVVM4BF "RVVM2QI") (RVVM2BF "RVVM1QI") (RVVM1BF > "RVVMF2QI") (RVVMF2BF "RVVMF4QI") (RVVMF4BF "RVVMF8QI") > + > (RVVM8HF "RVVM4QI") (RVVM4HF "RVVM2QI") (RVVM2HF "RVVM1QI") (RVVM1HF > "RVVMF2QI") (RVVMF2HF "RVVMF4QI") (RVVMF4HF "RVVMF8QI") > > (RVVM8SI "RVVM4HI") (RVVM4SI "RVVM2HI") (RVVM2SI "RVVM1HI") (RVVM1SI > "RVVMF2HI") (RVVMF2SI "RVVMF4HI") > @@ -2836,6 +2977,8 @@ > > (RVVM4HI "RVVM8SI") (RVVM2HI "RVVM4SI") (RVVM1HI "RVVM2SI") (RVVMF2HI > "RVVM1SI") (RVVMF4HI "RVVMF2SI") > > + (RVVM4BF "RVVM8SI") (RVVM2BF "RVVM4SI") (RVVM1BF "RVVM2SI") (RVVMF2BF > "RVVM1SI") (RVVMF4BF "RVVMF2SI") > + > (RVVM4HF "RVVM8SI") (RVVM2HF "RVVM4SI") (RVVM1HF "RVVM2SI") (RVVMF2HF > "RVVM1SI") (RVVMF4HF "RVVMF2SI") > > (RVVM4SI "RVVM8DI") (RVVM2SI "RVVM4DI") (RVVM1SI "RVVM2DI") (RVVMF2SI > "RVVM1DI") > @@ -2848,6 +2991,8 @@ > > (RVVM2HI "RVVM8DI") (RVVM1HI "RVVM4DI") (RVVMF2HI "RVVM2DI") (RVVMF4HI > "RVVM1DI") > > + (RVVM2BF "RVVM8DI") (RVVM1BF "RVVM4DI") (RVVMF2BF "RVVM2DI") (RVVMF4BF > "RVVM1DI") > + > (RVVM2HF "RVVM8DI") (RVVM1HF "RVVM4DI") (RVVMF2HF "RVVM2DI") (RVVMF4HF > "RVVM1DI") > ]) > > @@ -3352,6 +3497,10 @@ > (RVVM2HI "vector_eew16_stride_operand") (RVVM1HI > "vector_eew16_stride_operand") > (RVVMF2HI "vector_eew16_stride_operand") (RVVMF4HI > "vector_eew16_stride_operand") > > + (RVVM8BF "vector_eew16_stride_operand") (RVVM4BF > "vector_eew16_stride_operand") > + (RVVM2BF "vector_eew16_stride_operand") (RVVM1BF > "vector_eew16_stride_operand") > + (RVVMF2BF "vector_eew16_stride_operand") (RVVMF4BF > "vector_eew16_stride_operand") > + > (RVVM8HF "vector_eew16_stride_operand") (RVVM4HF > "vector_eew16_stride_operand") > (RVVM2HF "vector_eew16_stride_operand") (RVVM1HF > "vector_eew16_stride_operand") > (RVVMF2HF "vector_eew16_stride_operand") (RVVMF4HF > "vector_eew16_stride_operand") > @@ -3381,6 +3530,10 @@ > (RVVM2HI "rJ,rJ,rJ,c02,c02,c02") (RVVM1HI "rJ,rJ,rJ,c02,c02,c02") > (RVVMF2HI "rJ,rJ,rJ,c02,c02,c02") (RVVMF4HI "rJ,rJ,rJ,c02,c02,c02") > > + (RVVM8BF "rJ,rJ,rJ,c02,c02,c02") (RVVM4BF "rJ,rJ,rJ,c02,c02,c02") > + (RVVM2BF "rJ,rJ,rJ,c02,c02,c02") (RVVM1BF "rJ,rJ,rJ,c02,c02,c02") > + (RVVMF2BF "rJ,rJ,rJ,c02,c02,c02") (RVVMF4BF "rJ,rJ,rJ,c02,c02,c02") > + > (RVVM8HF "rJ,rJ,rJ,c02,c02,c02") (RVVM4HF "rJ,rJ,rJ,c02,c02,c02") > (RVVM2HF "rJ,rJ,rJ,c02,c02,c02") (RVVM1HF "rJ,rJ,rJ,c02,c02,c02") > (RVVMF2HF "rJ,rJ,rJ,c02,c02,c02") (RVVMF4HF "rJ,rJ,rJ,c02,c02,c02") > @@ -3410,6 +3563,10 @@ > (RVVM2HI "rJ,c02") (RVVM1HI "rJ,c02") > (RVVMF2HI "rJ,c02") (RVVMF4HI "rJ,c02") > > + (RVVM8BF "rJ,c02") (RVVM4BF "rJ,c02") > + (RVVM2BF "rJ,c02") (RVVM1BF "rJ,c02") > + (RVVMF2BF "rJ,c02") (RVVMF4BF "rJ,c02") > + > (RVVM8HF "rJ,c02") (RVVM4HF "rJ,c02") > (RVVM2HF "rJ,c02") (RVVM1HF "rJ,c02") > (RVVMF2HF "rJ,c02") (RVVMF4HF "rJ,c02") > @@ -3438,6 +3595,10 @@ > (RVVM2HI "immediate_operand") (RVVM1HI "immediate_operand") > (RVVMF2HI "immediate_operand") (RVVMF4HI "immediate_operand") > > + (RVVM8BF "const_1_operand") (RVVM4BF "vector_gs_extension_operand") > + (RVVM2BF "immediate_operand") (RVVM1BF "immediate_operand") > + (RVVMF2BF "immediate_operand") (RVVMF4BF "immediate_operand") > + > (RVVM8HF "const_1_operand") (RVVM4HF "vector_gs_extension_operand") > (RVVM2HF "immediate_operand") (RVVM1HF "immediate_operand") > (RVVMF2HF "immediate_operand") (RVVMF4HF "immediate_operand") > @@ -3464,6 +3625,10 @@ > (RVVM2HI "const_1_or_2_operand") (RVVM1HI "const_1_or_2_operand") > (RVVMF2HI "const_1_or_2_operand") (RVVMF4HI "const_1_or_2_operand") > > + (RVVM8BF "const_1_operand") (RVVM4BF "vector_gs_scale_operand_16_rv32") > + (RVVM2BF "const_1_or_2_operand") (RVVM1BF "const_1_or_2_operand") > + (RVVMF2BF "const_1_or_2_operand") (RVVMF4BF "const_1_or_2_operand") > + > (RVVM8HF "const_1_operand") (RVVM4HF "vector_gs_scale_operand_16_rv32") > (RVVM2HF "const_1_or_2_operand") (RVVM1HF "const_1_or_2_operand") > (RVVMF2HF "const_1_or_2_operand") (RVVMF4HF "const_1_or_2_operand") > diff --git a/gcc/config/riscv/vector.md b/gcc/config/riscv/vector.md > index fbcdf96f038..9a139faf745 100644 > --- a/gcc/config/riscv/vector.md > +++ b/gcc/config/riscv/vector.md > @@ -54,7 +54,8 @@ > > vgather,vcompress,vlsegde,vssegte,vlsegds,vssegts,vlsegdux,vlsegdox,\ > > vssegtux,vssegtox,vlsegdff,vandn,vbrev,vbrev8,vrev8,vcpop,vclz,vctz,vrol,\ > > vror,vwsll,vclmul,vclmulh,vghsh,vgmul,vaesef,vaesem,vaesdf,vaesdm,\ > - > vaeskf1,vaeskf2,vaesz,vsha2ms,vsha2ch,vsha2cl,vsm4k,vsm4r,vsm3me,vsm3c") > + > vaeskf1,vaeskf2,vaesz,vsha2ms,vsha2ch,vsha2cl,vsm4k,vsm4r,vsm3me,vsm3c,\ > + vfncvtbf16,vfwcvtbf16,vfwmaccbf16") > (const_string "true")] > (const_string "false"))) > > @@ -78,7 +79,8 @@ > > vgather,vcompress,vlsegde,vssegte,vlsegds,vssegts,vlsegdux,vlsegdox,\ > > vssegtux,vssegtox,vlsegdff,vandn,vbrev,vbrev8,vrev8,vcpop,vclz,vctz,vrol,\ > > vror,vwsll,vclmul,vclmulh,vghsh,vgmul,vaesef,vaesem,vaesdf,vaesdm,\ > - > vaeskf1,vaeskf2,vaesz,vsha2ms,vsha2ch,vsha2cl,vsm4k,vsm4r,vsm3me,vsm3c") > + > vaeskf1,vaeskf2,vaesz,vsha2ms,vsha2ch,vsha2cl,vsm4k,vsm4r,vsm3me,vsm3c,\ > + vfncvtbf16,vfwcvtbf16,vfwmaccbf16") > (const_string "true")] > (const_string "false"))) > > @@ -119,6 +121,14 @@ > RVVM2x4HI,RVVM1x4HI,RVVMF2x4HI,RVVMF4x4HI,\ > RVVM2x3HI,RVVM1x3HI,RVVMF2x3HI,RVVMF4x3HI,\ > > RVVM4x2HI,RVVM2x2HI,RVVM1x2HI,RVVMF2x2HI,RVVMF4x2HI,\ > + > RVVM8BF,RVVM4BF,RVVM2BF,RVVM1BF,RVVMF2BF,RVVMF4BF,\ > + RVVM1x8BF,RVVMF2x8BF,RVVMF4x8BF,\ > + RVVM1x7BF,RVVMF2x7BF,RVVMF4x7BF,\ > + RVVM1x6BF,RVVMF2x6BF,RVVMF4x6BF,\ > + RVVM1x5BF,RVVMF2x5BF,RVVMF4x5BF,\ > + RVVM2x4BF,RVVM1x4BF,RVVMF2x4BF,RVVMF4x4BF,\ > + RVVM2x3BF,RVVM1x3BF,RVVMF2x3BF,RVVMF4x3BF,\ > + > RVVM4x2BF,RVVM2x2BF,RVVM1x2BF,RVVMF2x2BF,RVVMF4x2BF,\ > > RVVM8HF,RVVM4HF,RVVM2HF,RVVM1HF,RVVMF2HF,RVVMF4HF,\ > RVVM1x8HF,RVVMF2x8HF,RVVMF4x8HF,\ > RVVM1x7HF,RVVMF2x7HF,RVVMF4x7HF,\ > @@ -180,6 +190,12 @@ > (eq_attr "mode" "RVVM1HI") (symbol_ref "riscv_vector::LMUL_1") > (eq_attr "mode" "RVVMF2HI") (symbol_ref "riscv_vector::LMUL_F2") > (eq_attr "mode" "RVVMF4HI") (symbol_ref "riscv_vector::LMUL_F4") > + (eq_attr "mode" "RVVM8BF") (symbol_ref "riscv_vector::LMUL_8") > + (eq_attr "mode" "RVVM4BF") (symbol_ref "riscv_vector::LMUL_4") > + (eq_attr "mode" "RVVM2BF") (symbol_ref "riscv_vector::LMUL_2") > + (eq_attr "mode" "RVVM1BF") (symbol_ref "riscv_vector::LMUL_1") > + (eq_attr "mode" "RVVMF2BF") (symbol_ref "riscv_vector::LMUL_F2") > + (eq_attr "mode" "RVVMF4BF") (symbol_ref "riscv_vector::LMUL_F4") > (eq_attr "mode" "RVVM8HF") (symbol_ref "riscv_vector::LMUL_8") > (eq_attr "mode" "RVVM4HF") (symbol_ref "riscv_vector::LMUL_4") > (eq_attr "mode" "RVVM2HF") (symbol_ref "riscv_vector::LMUL_2") > @@ -261,6 +277,31 @@ > (eq_attr "mode" "RVVM1x2HI") (symbol_ref "riscv_vector::LMUL_1") > (eq_attr "mode" "RVVMF2x2HI") (symbol_ref "riscv_vector::LMUL_F2") > (eq_attr "mode" "RVVMF4x2HI") (symbol_ref "riscv_vector::LMUL_F4") > + (eq_attr "mode" "RVVM1x8BF") (symbol_ref "riscv_vector::LMUL_1") > + (eq_attr "mode" "RVVMF2x8BF") (symbol_ref "riscv_vector::LMUL_F2") > + (eq_attr "mode" "RVVMF4x8BF") (symbol_ref "riscv_vector::LMUL_F4") > + (eq_attr "mode" "RVVM1x7BF") (symbol_ref "riscv_vector::LMUL_1") > + (eq_attr "mode" "RVVMF2x7BF") (symbol_ref "riscv_vector::LMUL_F2") > + (eq_attr "mode" "RVVMF4x7BF") (symbol_ref "riscv_vector::LMUL_F4") > + (eq_attr "mode" "RVVM1x6BF") (symbol_ref "riscv_vector::LMUL_1") > + (eq_attr "mode" "RVVMF2x6BF") (symbol_ref "riscv_vector::LMUL_F2") > + (eq_attr "mode" "RVVMF4x6BF") (symbol_ref "riscv_vector::LMUL_F4") > + (eq_attr "mode" "RVVM1x5BF") (symbol_ref "riscv_vector::LMUL_1") > + (eq_attr "mode" "RVVMF2x5BF") (symbol_ref "riscv_vector::LMUL_F2") > + (eq_attr "mode" "RVVMF4x5BF") (symbol_ref "riscv_vector::LMUL_F4") > + (eq_attr "mode" "RVVM2x4BF") (symbol_ref "riscv_vector::LMUL_2") > + (eq_attr "mode" "RVVM1x4BF") (symbol_ref "riscv_vector::LMUL_1") > + (eq_attr "mode" "RVVMF2x4BF") (symbol_ref "riscv_vector::LMUL_F2") > + (eq_attr "mode" "RVVMF4x4BF") (symbol_ref "riscv_vector::LMUL_F4") > + (eq_attr "mode" "RVVM2x3BF") (symbol_ref "riscv_vector::LMUL_2") > + (eq_attr "mode" "RVVM1x3BF") (symbol_ref "riscv_vector::LMUL_1") > + (eq_attr "mode" "RVVMF2x3BF") (symbol_ref "riscv_vector::LMUL_F2") > + (eq_attr "mode" "RVVMF4x3BF") (symbol_ref "riscv_vector::LMUL_F4") > + (eq_attr "mode" "RVVM4x2BF") (symbol_ref "riscv_vector::LMUL_4") > + (eq_attr "mode" "RVVM2x2BF") (symbol_ref "riscv_vector::LMUL_2") > + (eq_attr "mode" "RVVM1x2BF") (symbol_ref "riscv_vector::LMUL_1") > + (eq_attr "mode" "RVVMF2x2BF") (symbol_ref "riscv_vector::LMUL_F2") > + (eq_attr "mode" "RVVMF4x2BF") (symbol_ref "riscv_vector::LMUL_F4") > (eq_attr "mode" "RVVM1x8HF") (symbol_ref "riscv_vector::LMUL_1") > (eq_attr "mode" "RVVMF2x8HF") (symbol_ref "riscv_vector::LMUL_F2") > (eq_attr "mode" "RVVMF4x8HF") (symbol_ref "riscv_vector::LMUL_F4") > @@ -446,7 +487,7 @@ > > vandn,vbrev,vbrev8,vrev8,vcpop,vclz,vctz,vrol,vror,vwsll,\ > > vclmul,vclmulh,vghsh,vgmul,vaesef,vaesem,vaesdf,vaesdm,\ > > vaeskf1,vaeskf2,vaesz,vsha2ms,vsha2ch,vsha2cl,vsm4k,vsm4r,\ > - vsm3me,vsm3c") > + vsm3me,vsm3c,vfncvtbf16,vfwcvtbf16,vfwmaccbf16") > (const_int INVALID_ATTRIBUTE) > (and (eq_attr "type" "vlde,vste,vlsegde,vssegte,vlsegds,vssegts,\ > vlsegdff,vssegtux,vlsegdox,vlsegdux") > @@ -465,6 +506,12 @@ > (eq_attr "mode" "RVVM1HI") (const_int 16) > (eq_attr "mode" "RVVMF2HI") (const_int 32) > (eq_attr "mode" "RVVMF4HI") (const_int 64) > + (eq_attr "mode" "RVVM8BF") (const_int 2) > + (eq_attr "mode" "RVVM4BF") (const_int 4) > + (eq_attr "mode" "RVVM2BF") (const_int 8) > + (eq_attr "mode" "RVVM1BF") (const_int 16) > + (eq_attr "mode" "RVVMF2BF") (const_int 32) > + (eq_attr "mode" "RVVMF4BF") (const_int 64) > (eq_attr "mode" "RVVM8HF") (const_int 2) > (eq_attr "mode" "RVVM4HF") (const_int 4) > (eq_attr "mode" "RVVM2HF") (const_int 8) > @@ -546,6 +593,31 @@ > (eq_attr "mode" "RVVM1x2HI") (const_int 16) > (eq_attr "mode" "RVVMF2x2HI") (const_int 32) > (eq_attr "mode" "RVVMF4x2HI") (const_int 64) > + (eq_attr "mode" "RVVM1x8BF") (const_int 16) > + (eq_attr "mode" "RVVMF2x8BF") (const_int 32) > + (eq_attr "mode" "RVVMF4x8BF") (const_int 64) > + (eq_attr "mode" "RVVM1x7BF") (const_int 16) > + (eq_attr "mode" "RVVMF2x7BF") (const_int 32) > + (eq_attr "mode" "RVVMF4x7BF") (const_int 64) > + (eq_attr "mode" "RVVM1x6BF") (const_int 16) > + (eq_attr "mode" "RVVMF2x6BF") (const_int 32) > + (eq_attr "mode" "RVVMF4x6BF") (const_int 64) > + (eq_attr "mode" "RVVM1x5BF") (const_int 16) > + (eq_attr "mode" "RVVMF2x5BF") (const_int 32) > + (eq_attr "mode" "RVVMF4x5BF") (const_int 64) > + (eq_attr "mode" "RVVM2x4BF") (const_int 8) > + (eq_attr "mode" "RVVM1x4BF") (const_int 16) > + (eq_attr "mode" "RVVMF2x4BF") (const_int 32) > + (eq_attr "mode" "RVVMF4x4BF") (const_int 64) > + (eq_attr "mode" "RVVM2x3BF") (const_int 8) > + (eq_attr "mode" "RVVM1x3BF") (const_int 16) > + (eq_attr "mode" "RVVMF2x3BF") (const_int 32) > + (eq_attr "mode" "RVVMF4x3BF") (const_int 64) > + (eq_attr "mode" "RVVM4x2BF") (const_int 4) > + (eq_attr "mode" "RVVM2x2BF") (const_int 8) > + (eq_attr "mode" "RVVM1x2BF") (const_int 16) > + (eq_attr "mode" "RVVMF2x2BF") (const_int 32) > + (eq_attr "mode" "RVVMF4x2BF") (const_int 64) > (eq_attr "mode" "RVVM1x8HF") (const_int 16) > (eq_attr "mode" "RVVMF2x8HF") (const_int 32) > (eq_attr "mode" "RVVMF4x8HF") (const_int 64) > @@ -723,7 +795,8 @@ > > vired,viwred,vfredu,vfredo,vfwredu,vfwredo,vimovxv,vfmovfv,\ > > vslideup,vslidedown,vislide1up,vislide1down,vfslide1up,vfslide1down,\ > > vgather,vldff,viwmuladd,vfwmuladd,vlsegde,vlsegds,vlsegdux,vlsegdox,vlsegdff,\ > - > vandn,vbrev,vbrev8,vrev8,vrol,vror,vwsll,vclmul,vclmulh") > + > vandn,vbrev,vbrev8,vrev8,vrol,vror,vwsll,vclmul,vclmulh,\ > + vfncvtbf16,vfwcvtbf16,vfwmaccbf16") > (const_int 2) > > (eq_attr "type" > "vimerge,vfmerge,vcompress,vghsh,vgmul,vaesef,vaesem,vaesdf,vaesdm,\ > @@ -767,7 +840,8 @@ > > vfcvtftoi,vfwcvtitof,vfwcvtftoi,vfwcvtftof,vfncvtitof,\ > > vfncvtftoi,vfncvtftof,vfclass,vimovxv,vfmovfv,vcompress,\ > > vlsegde,vssegts,vssegtux,vssegtox,vlsegdff,vbrev,vbrev8,vrev8,\ > - > vghsh,vaeskf1,vaeskf2,vsha2ms,vsha2ch,vsha2cl,vsm4k,vsm3me,vsm3c") > + > vghsh,vaeskf1,vaeskf2,vsha2ms,vsha2ch,vsha2cl,vsm4k,vsm3me,vsm3c,\ > + vfncvtbf16,vfwcvtbf16") > (const_int 4) > > ;; If operands[3] of "vlds" is not vector mode, it is > pred_broadcast. > @@ -783,7 +857,7 @@ > > vfsgnj,vfmerge,vired,viwred,vfredu,vfredo,vfwredu,vfwredo,\ > > vslideup,vslidedown,vislide1up,vislide1down,vfslide1up,vfslide1down,\ > > vgather,viwmuladd,vfwmuladd,vlsegds,vlsegdux,vlsegdox,vandn,vrol,\ > - vror,vwsll,vclmul,vclmulh") > + vror,vwsll,vclmul,vclmulh,vfwmaccbf16") > (const_int 5) > > (eq_attr "type" "vicmp,vimuladd,vfcmp,vfmuladd") > @@ -800,7 +874,8 @@ > > vfcvtitof,vfcvtftoi,vfwcvtitof,vfwcvtftoi,vfwcvtftof,\ > > vfncvtitof,vfncvtftoi,vfncvtftof,vfclass,vimovxv,vfmovfv,\ > > vcompress,vldff,vlsegde,vlsegdff,vbrev,vbrev8,vrev8,vghsh,\ > - > vaeskf1,vaeskf2,vsha2ms,vsha2ch,vsha2cl,vsm4k,vsm3me,vsm3c") > + > vaeskf1,vaeskf2,vsha2ms,vsha2ch,vsha2cl,vsm4k,vsm3me,vsm3c,\ > + vfncvtbf16,vfwcvtbf16") > (symbol_ref "riscv_vector::get_ta(operands[5])") > > ;; If operands[3] of "vlds" is not vector mode, it is > pred_broadcast. > @@ -816,7 +891,8 @@ > > vfwalu,vfwmul,vfsgnj,vfmerge,vired,viwred,vfredu,\ > > vfredo,vfwredu,vfwredo,vslideup,vslidedown,vislide1up,\ > > vislide1down,vfslide1up,vfslide1down,vgather,viwmuladd,vfwmuladd,\ > - > vlsegds,vlsegdux,vlsegdox,vandn,vrol,vror,vwsll,vclmul,vclmulh") > + > vlsegds,vlsegdux,vlsegdox,vandn,vrol,vror,vwsll,vclmul,vclmulh,\ > + vfwmaccbf16") > (symbol_ref "riscv_vector::get_ta(operands[6])") > > (eq_attr "type" "vimuladd,vfmuladd") > @@ -830,7 +906,8 @@ > (define_attr "ma" "" > (cond [(eq_attr "type" > "vlde,vext,vmiota,vfsqrt,vfrecp,vfcvtitof,vfcvtftoi,\ > > vfwcvtitof,vfwcvtftoi,vfwcvtftof,vfncvtitof,vfncvtftoi,\ > - > vfncvtftof,vfclass,vldff,vlsegde,vlsegdff,vbrev,vbrev8,vrev8") > + > vfncvtftof,vfclass,vldff,vlsegde,vlsegdff,vbrev,vbrev8,vrev8,\ > + vfncvtbf16,vfwcvtbf16") > (symbol_ref "riscv_vector::get_ma(operands[6])") > > ;; If operands[3] of "vlds" is not vector mode, it is > pred_broadcast. > @@ -846,7 +923,7 @@ > vfwalu,vfwmul,vfsgnj,vfcmp,vslideup,vslidedown,\ > > vislide1up,vislide1down,vfslide1up,vfslide1down,vgather,\ > > viwmuladd,vfwmuladd,vlsegds,vlsegdux,vlsegdox,vandn,vrol,\ > - vror,vwsll,vclmul,vclmulh") > + vror,vwsll,vclmul,vclmulh,vfwmaccbf16") > (symbol_ref "riscv_vector::get_ma(operands[7])") > > (eq_attr "type" "vimuladd,vfmuladd") > @@ -862,7 +939,8 @@ > > vfsqrt,vfrecp,vfmerge,vfcvtitof,vfcvtftoi,vfwcvtitof,\ > > vfwcvtftoi,vfwcvtftof,vfncvtitof,vfncvtftoi,vfncvtftof,\ > > vfclass,vired,viwred,vfredu,vfredo,vfwredu,vfwredo,\ > - > vimovxv,vfmovfv,vlsegde,vlsegdff,vmiota,vbrev,vbrev8,vrev8") > + > vimovxv,vfmovfv,vlsegde,vlsegdff,vmiota,vbrev,vbrev8,vrev8,\ > + vfncvtbf16,vfwcvtbf16") > (const_int 7) > (eq_attr "type" > "vldm,vstm,vmalu,vmalu,vgmul,vaesef,vaesem,vaesdf,vaesdm,vaesz,\ > vsm4r") > @@ -880,7 +958,8 @@ > > vnclip,vicmp,vfalu,vfmul,vfminmax,vfdiv,vfwalu,vfwmul,\ > vfsgnj,vfcmp,vslideup,vslidedown,vislide1up,\ > > vislide1down,vfslide1up,vfslide1down,vgather,viwmuladd,vfwmuladd,\ > - > vlsegds,vlsegdux,vlsegdox,vandn,vrol,vror,vclmul,vclmulh,vwsll") > + > vlsegds,vlsegdux,vlsegdox,vandn,vrol,vror,vclmul,vclmulh,vwsll,\ > + vfwmaccbf16") > (const_int 8) > (eq_attr "type" "vstux,vstox,vssegts,vssegtux,vssegtox") > (const_int 5) > -- > 2.17.1 > >
diff --git a/gcc/config/riscv/riscv.md b/gcc/config/riscv/riscv.md index 7a9454de430..31dcd5f2507 100644 --- a/gcc/config/riscv/riscv.md +++ b/gcc/config/riscv/riscv.md @@ -200,6 +200,7 @@ RVVMF64BI,RVVMF32BI,RVVMF16BI,RVVMF8BI,RVVMF4BI,RVVMF2BI,RVVM1BI, RVVM8QI,RVVM4QI,RVVM2QI,RVVM1QI,RVVMF2QI,RVVMF4QI,RVVMF8QI, RVVM8HI,RVVM4HI,RVVM2HI,RVVM1HI,RVVMF2HI,RVVMF4HI, + RVVM8BF,RVVM4BF,RVVM2BF,RVVM1BF,RVVMF2BF,RVVMF4BF, RVVM8HF,RVVM4HF,RVVM2HF,RVVM1HF,RVVMF2HF,RVVMF4HF, RVVM8SI,RVVM4SI,RVVM2SI,RVVM1SI,RVVMF2SI, RVVM8SF,RVVM4SF,RVVM2SF,RVVM1SF,RVVMF2SF, @@ -219,6 +220,11 @@ RVVM2x4HI,RVVM1x4HI,RVVMF2x4HI,RVVMF4x4HI, RVVM2x3HI,RVVM1x3HI,RVVMF2x3HI,RVVMF4x3HI, RVVM4x2HI,RVVM2x2HI,RVVM1x2HI,RVVMF2x2HI,RVVMF4x2HI, + RVVM1x8BF,RVVMF2x8BF,RVVMF4x8BF,RVVM1x7BF,RVVMF2x7BF, + RVVMF4x7BF,RVVM1x6BF,RVVMF2x6BF,RVVMF4x6BF,RVVM1x5BF, + RVVMF2x5BF,RVVMF4x5BF,RVVM2x4BF,RVVM1x4BF,RVVMF2x4BF, + RVVMF4x4BF,RVVM2x3BF,RVVM1x3BF,RVVMF2x3BF,RVVMF4x3BF, + RVVM4x2BF,RVVM2x2BF,RVVM1x2BF,RVVMF2x2BF,RVVMF4x2BF, RVVM1x8HF,RVVMF2x8HF,RVVMF4x8HF,RVVM1x7HF,RVVMF2x7HF, RVVMF4x7HF,RVVM1x6HF,RVVMF2x6HF,RVVMF4x6HF,RVVM1x5HF, RVVMF2x5HF,RVVMF4x5HF,RVVM2x4HF,RVVM1x4HF,RVVMF2x4HF, @@ -462,6 +468,10 @@ ;; vsm4r crypto vector SM4 Rounds instructions ;; vsm3me crypto vector SM3 Message Expansion instructions ;; vsm3c crypto vector SM3 Compression instructions +;; 18.Vector BF16 instrctions +;; vfncvtbf16 vector narrowing single floating-point to brain floating-point instruction +;; vfwcvtbf16 vector widening brain floating-point to single floating-point instruction +;; vfwmaccbf16 vector BF16 widening multiply-accumulate (define_attr "type" "unknown,branch,jump,jalr,ret,call,load,fpload,store,fpstore, mtc,mfc,const,arith,logical,shift,slt,imul,idiv,move,fmove,fadd,fmul, @@ -483,7 +493,7 @@ vslideup,vslidedown,vislide1up,vislide1down,vfslide1up,vfslide1down, vgather,vcompress,vmov,vector,vandn,vbrev,vbrev8,vrev8,vclz,vctz,vcpop,vrol,vror,vwsll, vclmul,vclmulh,vghsh,vgmul,vaesef,vaesem,vaesdf,vaesdm,vaeskf1,vaeskf2,vaesz, - vsha2ms,vsha2ch,vsha2cl,vsm4k,vsm4r,vsm3me,vsm3c" + vsha2ms,vsha2ch,vsha2cl,vsm4k,vsm4r,vsm3me,vsm3c,vfncvtbf16,vfwcvtbf16,vfwmaccbf16" (cond [(eq_attr "got" "load") (const_string "load") ;; If a doubleword move uses these expensive instructions, @@ -4311,6 +4321,7 @@ (include "generic-ooo.md") (include "vector.md") (include "vector-crypto.md") +(include "vector-bfloat16.md") (include "zicond.md") (include "sfb.md") (include "zc.md") diff --git a/gcc/config/riscv/vector-bfloat16.md b/gcc/config/riscv/vector-bfloat16.md new file mode 100644 index 00000000000..562aa8ee5ed --- /dev/null +++ b/gcc/config/riscv/vector-bfloat16.md @@ -0,0 +1,135 @@ +;; Machine description for RISC-V bfloat16 extensions. +;; Copyright (C) 2024 Free Software Foundation, Inc. + +;; This file is part of GCC. + +;; GCC is free software; you can redistribute it and/or modify +;; it under the terms of the GNU General Public License as published by +;; the Free Software Foundation; either version 3, or (at your option) +;; any later version. + +;; GCC is distributed in the hope that it will be useful, +;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;; GNU General Public License for more details. + +;; You should have received a copy of the GNU General Public License +;; along with GCC; see the file COPYING3. If not see +;; <http://www.gnu.org/licenses/>. + +(define_mode_iterator VWEXTF_ZVFBF [ + (RVVM8SF "TARGET_VECTOR_ELEN_BF_16 && TARGET_VECTOR_ELEN_FP_32") + (RVVM4SF "TARGET_VECTOR_ELEN_BF_16 && TARGET_VECTOR_ELEN_FP_32") + (RVVM2SF "TARGET_VECTOR_ELEN_BF_16 && TARGET_VECTOR_ELEN_FP_32") + (RVVM1SF "TARGET_VECTOR_ELEN_BF_16 && TARGET_VECTOR_ELEN_FP_32") + (RVVMF2SF "TARGET_VECTOR_ELEN_BF_16 && TARGET_VECTOR_ELEN_FP_32 && TARGET_MIN_VLEN > 32") +]) + +(define_mode_attr V_FP32TOBF16_TRUNC [ + (RVVM8SF "RVVM4BF") (RVVM4SF "RVVM2BF") (RVVM2SF "RVVM1BF") (RVVM1SF "RVVMF2BF") (RVVMF2SF "RVVMF4BF") +]) + +(define_mode_attr VF32_SUBEL [ + (RVVM8SF "BF") (RVVM4SF "BF") (RVVM2SF "BF") (RVVM1SF "BF") (RVVMF2SF "BF")]) + +;; Zvfbfmin extension + +(define_insn "@pred_trunc<mode>_to_bf16" + [(set (match_operand:<V_FP32TOBF16_TRUNC> 0 "register_operand" "=vd, vd, vr, vr, &vr, &vr") + (if_then_else:<V_FP32TOBF16_TRUNC> + (unspec:<VM> + [(match_operand:<VM> 1 "vector_mask_operand" " vm, vm,Wc1,Wc1,vmWc1,vmWc1") + (match_operand 4 "vector_length_operand" " rK, rK, rK, rK, rK, rK") + (match_operand 5 "const_int_operand" " i, i, i, i, i, i") + (match_operand 6 "const_int_operand" " i, i, i, i, i, i") + (match_operand 7 "const_int_operand" " i, i, i, i, i, i") + (match_operand 8 "const_int_operand" " i, i, i, i, i, i") + (reg:SI VL_REGNUM) + (reg:SI VTYPE_REGNUM) + (reg:SI FRM_REGNUM)] UNSPEC_VPREDICATE) + (float_truncate:<V_FP32TOBF16_TRUNC> + (match_operand:VWEXTF_ZVFBF 3 "register_operand" " 0, 0, 0, 0, vr, vr")) + (match_operand:<V_FP32TOBF16_TRUNC> 2 "vector_merge_operand" " vu, 0, vu, 0, vu, 0")))] + "TARGET_ZVFBFMIN" + "vfncvtbf16.f.f.w\t%0,%3%p1" + [(set_attr "type" "vfncvtbf16") + (set_attr "mode" "<V_FP32TOBF16_TRUNC>") + (set (attr "frm_mode") + (symbol_ref "riscv_vector::get_frm_mode (operands[8])"))]) + +(define_insn "@pred_extend_bf16_to_<mode>" + [(set (match_operand:VWEXTF_ZVFBF 0 "register_operand" "=&vr, &vr") + (if_then_else:VWEXTF_ZVFBF + (unspec:<VM> + [(match_operand:<VM> 1 "vector_mask_operand" "vmWc1,vmWc1") + (match_operand 4 "vector_length_operand" " rK, rK") + (match_operand 5 "const_int_operand" " i, i") + (match_operand 6 "const_int_operand" " i, i") + (match_operand 7 "const_int_operand" " i, i") + (reg:SI VL_REGNUM) + (reg:SI VTYPE_REGNUM)] UNSPEC_VPREDICATE) + (float_extend:VWEXTF_ZVFBF + (match_operand:<V_FP32TOBF16_TRUNC> 3 "register_operand" " vr, vr")) + (match_operand:VWEXTF_ZVFBF 2 "vector_merge_operand" " vu, 0")))] + "TARGET_ZVFBFMIN" + "vfwcvtbf16.f.f.v\t%0,%3%p1" + [(set_attr "type" "vfwcvtbf16") + (set_attr "mode" "<V_FP32TOBF16_TRUNC>")]) + + +(define_insn "@pred_widen_bf16_mul_<mode>" + [(set (match_operand:VWEXTF_ZVFBF 0 "register_operand" "=&vr") + (if_then_else:VWEXTF_ZVFBF + (unspec:<VM> + [(match_operand:<VM> 1 "vector_mask_operand" "vmWc1") + (match_operand 5 "vector_length_operand" " rK") + (match_operand 6 "const_int_operand" " i") + (match_operand 7 "const_int_operand" " i") + (match_operand 8 "const_int_operand" " i") + (match_operand 9 "const_int_operand" " i") + (reg:SI VL_REGNUM) + (reg:SI VTYPE_REGNUM) + (reg:SI FRM_REGNUM)] UNSPEC_VPREDICATE) + (plus:VWEXTF_ZVFBF + (mult:VWEXTF_ZVFBF + (float_extend:VWEXTF_ZVFBF + (match_operand:<V_FP32TOBF16_TRUNC> 3 "register_operand" " vr")) + (float_extend:VWEXTF_ZVFBF + (match_operand:<V_FP32TOBF16_TRUNC> 4 "register_operand" " vr"))) + (match_operand:VWEXTF_ZVFBF 2 "register_operand" " 0")) + (match_dup 2)))] + "TARGET_ZVFBFWMA" + "vfwmaccbf16.vv\t%0,%3,%4%p1" + [(set_attr "type" "vfwmaccbf16") + (set_attr "mode" "<V_FP32TOBF16_TRUNC>") + (set (attr "frm_mode") + (symbol_ref "riscv_vector::get_frm_mode (operands[9])"))]) + +(define_insn "@pred_widen_bf16_mul_<mode>_scalar" + [(set (match_operand:VWEXTF_ZVFBF 0 "register_operand" "=&vr") + (if_then_else:VWEXTF_ZVFBF + (unspec:<VM> + [(match_operand:<VM> 1 "vector_mask_operand" "vmWc1") + (match_operand 5 "vector_length_operand" " rK") + (match_operand 6 "const_int_operand" " i") + (match_operand 7 "const_int_operand" " i") + (match_operand 8 "const_int_operand" " i") + (match_operand 9 "const_int_operand" " i") + (reg:SI VL_REGNUM) + (reg:SI VTYPE_REGNUM) + (reg:SI FRM_REGNUM)] UNSPEC_VPREDICATE) + (plus:VWEXTF_ZVFBF + (mult:VWEXTF_ZVFBF + (float_extend:VWEXTF_ZVFBF + (vec_duplicate:<V_FP32TOBF16_TRUNC> + (match_operand:<VF32_SUBEL> 3 "register_operand" " f"))) + (float_extend:VWEXTF_ZVFBF + (match_operand:<V_FP32TOBF16_TRUNC> 4 "register_operand" " vr"))) + (match_operand:VWEXTF_ZVFBF 2 "register_operand" " 0")) + (match_dup 2)))] + "TARGET_ZVFBFWMA" + "vfwmaccbf16.vf\t%0,%3,%4%p1" + [(set_attr "type" "vfwmaccbf16") + (set_attr "mode" "<V_FP32TOBF16_TRUNC>") + (set (attr "frm_mode") + (symbol_ref "riscv_vector::get_frm_mode (operands[9])"))]) diff --git a/gcc/config/riscv/vector-iterators.md b/gcc/config/riscv/vector-iterators.md index 76c27035a73..098a1c23b90 100644 --- a/gcc/config/riscv/vector-iterators.md +++ b/gcc/config/riscv/vector-iterators.md @@ -146,6 +146,15 @@ (RVVM2DF "TARGET_VECTOR_ELEN_FP_64") (RVVM1DF "TARGET_VECTOR_ELEN_FP_64") ]) +(define_mode_iterator VF_ZVFBF16 [ + (RVVM8BF "TARGET_VECTOR_ELEN_BF_16") + (RVVM4BF "TARGET_VECTOR_ELEN_BF_16") + (RVVM2BF "TARGET_VECTOR_ELEN_BF_16") + (RVVM1BF "TARGET_VECTOR_ELEN_BF_16") + (RVVMF2BF "TARGET_VECTOR_ELEN_BF_16") + (RVVMF4BF "TARGET_VECTOR_ELEN_BF_16 && TARGET_MIN_VLEN > 32") +]) + (define_mode_iterator VF_ZVFHMIN [ (RVVM8HF "TARGET_VECTOR_ELEN_FP_16") (RVVM4HF "TARGET_VECTOR_ELEN_FP_16") (RVVM2HF "TARGET_VECTOR_ELEN_FP_16") (RVVM1HF "TARGET_VECTOR_ELEN_FP_16") (RVVMF2HF "TARGET_VECTOR_ELEN_FP_16") @@ -281,6 +290,10 @@ (define_mode_iterator VEEWEXT2 [ RVVM8HI RVVM4HI RVVM2HI RVVM1HI RVVMF2HI (RVVMF4HI "TARGET_MIN_VLEN > 32") + (RVVM8BF "TARGET_VECTOR_ELEN_BF_16") (RVVM4BF "TARGET_VECTOR_ELEN_BF_16") (RVVM2BF "TARGET_VECTOR_ELEN_BF_16") + (RVVM1BF "TARGET_VECTOR_ELEN_BF_16") (RVVMF2BF "TARGET_VECTOR_ELEN_BF_16") + (RVVMF4BF "TARGET_VECTOR_ELEN_BF_16 && TARGET_MIN_VLEN > 32") + (RVVM8HF "TARGET_VECTOR_ELEN_FP_16") (RVVM4HF "TARGET_VECTOR_ELEN_FP_16") (RVVM2HF "TARGET_VECTOR_ELEN_FP_16") (RVVM1HF "TARGET_VECTOR_ELEN_FP_16") (RVVMF2HF "TARGET_VECTOR_ELEN_FP_16") (RVVMF4HF "TARGET_VECTOR_ELEN_FP_16 && TARGET_MIN_VLEN > 32") @@ -323,6 +336,10 @@ RVVM4HI RVVM2HI RVVM1HI RVVMF2HI (RVVMF4HI "TARGET_MIN_VLEN > 32") + (RVVM4BF "TARGET_VECTOR_ELEN_BF_16") (RVVM2BF "TARGET_VECTOR_ELEN_BF_16") + (RVVM1BF "TARGET_VECTOR_ELEN_BF_16") (RVVMF2BF "TARGET_VECTOR_ELEN_BF_16") + (RVVMF4BF "TARGET_VECTOR_ELEN_BF_16 && TARGET_MIN_VLEN > 32") + (RVVM4HF "TARGET_VECTOR_ELEN_FP_16") (RVVM2HF "TARGET_VECTOR_ELEN_FP_16") (RVVM1HF "TARGET_VECTOR_ELEN_FP_16") (RVVMF2HF "TARGET_VECTOR_ELEN_FP_16") (RVVMF4HF "TARGET_VECTOR_ELEN_FP_16 && TARGET_MIN_VLEN > 32") @@ -346,6 +363,11 @@ (RVVMF2HI "TARGET_64BIT") (RVVMF4HI "TARGET_MIN_VLEN > 32 && TARGET_64BIT") + (RVVM2BF "TARGET_VECTOR_ELEN_BF_16") + (RVVM1BF "TARGET_VECTOR_ELEN_BF_16") + (RVVMF2BF "TARGET_VECTOR_ELEN_FP_16") + (RVVMF4BF "TARGET_VECTOR_ELEN_BF_16 && TARGET_MIN_VLEN > 32 && TARGET_64BIT") + (RVVM2HF "TARGET_VECTOR_ELEN_FP_16 && TARGET_64BIT") (RVVM1HF "TARGET_VECTOR_ELEN_FP_16 && TARGET_64BIT") (RVVMF2HF "TARGET_VECTOR_ELEN_FP_16 && TARGET_64BIT") @@ -768,6 +790,7 @@ (RVVMF4HI "TARGET_MIN_VLEN > 32") (RVVMF2SI "TARGET_MIN_VLEN > 32") (RVVM1DI "TARGET_VECTOR_ELEN_64") + (RVVMF4BF "TARGET_VECTOR_ELEN_BF_16 && TARGET_MIN_VLEN > 32") (RVVMF4HF "TARGET_VECTOR_ELEN_FP_16 && TARGET_MIN_VLEN > 32") (RVVMF2SF "TARGET_VECTOR_ELEN_FP_32 && TARGET_MIN_VLEN > 32") (RVVM1DF "TARGET_VECTOR_ELEN_FP_64") @@ -778,6 +801,7 @@ RVVMF2HI RVVM1SI (RVVM2DI "TARGET_VECTOR_ELEN_64") + (RVVMF2BF "TARGET_VECTOR_ELEN_BF_16") (RVVMF2HF "TARGET_VECTOR_ELEN_FP_16") (RVVM1SF "TARGET_VECTOR_ELEN_FP_32") (RVVM2DF "TARGET_VECTOR_ELEN_FP_64") @@ -788,6 +812,7 @@ RVVM1HI RVVM2SI (RVVM4DI "TARGET_VECTOR_ELEN_64") + (RVVM1BF "TARGET_VECTOR_ELEN_BF_16") (RVVM1HF "TARGET_VECTOR_ELEN_FP_16") (RVVM2SF "TARGET_VECTOR_ELEN_FP_32") (RVVM4DF "TARGET_VECTOR_ELEN_FP_64") @@ -798,6 +823,7 @@ RVVM2HI RVVM4SI (RVVM8DI "TARGET_VECTOR_ELEN_64") + (RVVM2BF "TARGET_VECTOR_ELEN_BF_16") (RVVM2HF "TARGET_VECTOR_ELEN_FP_16") (RVVM4SF "TARGET_VECTOR_ELEN_FP_32") (RVVM8DF "TARGET_VECTOR_ELEN_FP_64") @@ -807,6 +833,7 @@ RVVM2QI RVVM4HI RVVM8SI + (RVVM4BF "TARGET_VECTOR_ELEN_BF_16") (RVVM4HF "TARGET_VECTOR_ELEN_FP_16") (RVVM8SF "TARGET_VECTOR_ELEN_FP_32") ]) @@ -814,6 +841,7 @@ (define_mode_iterator RATIO2 [ RVVM4QI RVVM8HI + (RVVM8BF "TARGET_VECTOR_ELEN_BF_16") (RVVM8HF "TARGET_VECTOR_ELEN_FP_16") ]) @@ -865,6 +893,9 @@ RVVM8HI RVVM4HI RVVM2HI RVVM1HI + (RVVM8BF "TARGET_VECTOR_ELEN_BF_16") (RVVM4BF "TARGET_VECTOR_ELEN_BF_16") + (RVVM2BF "TARGET_VECTOR_ELEN_BF_16") (RVVM1BF "TARGET_VECTOR_ELEN_BF_16") + (RVVM8HF "TARGET_VECTOR_ELEN_FP_16") (RVVM4HF "TARGET_VECTOR_ELEN_FP_16") (RVVM2HF "TARGET_VECTOR_ELEN_FP_16") (RVVM1HF "TARGET_VECTOR_ELEN_FP_16") @@ -885,6 +916,8 @@ RVVMF2HI (RVVMF4HI "TARGET_MIN_VLEN > 32") + (RVVMF2BF "TARGET_VECTOR_ELEN_BF_16") (RVVMF4BF "TARGET_VECTOR_ELEN_BF_16 && TARGET_MIN_VLEN > 32") + (RVVMF2HF "TARGET_VECTOR_ELEN_FP_16") (RVVMF4HF "TARGET_VECTOR_ELEN_FP_16 && TARGET_MIN_VLEN > 32") (RVVMF2SI "TARGET_MIN_VLEN > 32") @@ -1142,6 +1175,13 @@ (RVVM1x6DI "TARGET_VECTOR_ELEN_64") (RVVM1x7DI "TARGET_VECTOR_ELEN_64") (RVVM1x8DI "TARGET_VECTOR_ELEN_64") + (RVVMF4x2BF "TARGET_MIN_VLEN > 32 && TARGET_VECTOR_ELEN_BF_16") + (RVVMF4x3BF "TARGET_MIN_VLEN > 32 && TARGET_VECTOR_ELEN_BF_16") + (RVVMF4x4BF "TARGET_MIN_VLEN > 32 && TARGET_VECTOR_ELEN_BF_16") + (RVVMF4x5BF "TARGET_MIN_VLEN > 32 && TARGET_VECTOR_ELEN_BF_16") + (RVVMF4x6BF "TARGET_MIN_VLEN > 32 && TARGET_VECTOR_ELEN_BF_16") + (RVVMF4x7BF "TARGET_MIN_VLEN > 32 && TARGET_VECTOR_ELEN_BF_16") + (RVVMF4x8BF "TARGET_MIN_VLEN > 32 && TARGET_VECTOR_ELEN_BF_16") (RVVMF4x2HF "TARGET_MIN_VLEN > 32 && TARGET_VECTOR_ELEN_FP_16") (RVVMF4x3HF "TARGET_MIN_VLEN > 32 && TARGET_VECTOR_ELEN_FP_16") (RVVMF4x4HF "TARGET_MIN_VLEN > 32 && TARGET_VECTOR_ELEN_FP_16") @@ -1190,6 +1230,13 @@ (RVVM2x2DI "TARGET_VECTOR_ELEN_64") (RVVM2x3DI "TARGET_VECTOR_ELEN_64") (RVVM2x4DI "TARGET_VECTOR_ELEN_64") + (RVVMF2x2BF "TARGET_VECTOR_ELEN_BF_16") + (RVVMF2x3BF "TARGET_VECTOR_ELEN_BF_16") + (RVVMF2x4BF "TARGET_VECTOR_ELEN_BF_16") + (RVVMF2x5BF "TARGET_VECTOR_ELEN_BF_16") + (RVVMF2x6BF "TARGET_VECTOR_ELEN_BF_16") + (RVVMF2x7BF "TARGET_VECTOR_ELEN_BF_16") + (RVVMF2x8BF "TARGET_VECTOR_ELEN_BF_16") (RVVMF2x2HF "TARGET_VECTOR_ELEN_FP_16") (RVVMF2x3HF "TARGET_VECTOR_ELEN_FP_16") (RVVMF2x4HF "TARGET_VECTOR_ELEN_FP_16") @@ -1228,6 +1275,13 @@ RVVM2x3SI RVVM2x4SI (RVVM4x2DI "TARGET_VECTOR_ELEN_64") + (RVVM1x2BF "TARGET_VECTOR_ELEN_BF_16") + (RVVM1x3BF "TARGET_VECTOR_ELEN_BF_16") + (RVVM1x4BF "TARGET_VECTOR_ELEN_BF_16") + (RVVM1x5BF "TARGET_VECTOR_ELEN_BF_16") + (RVVM1x6BF "TARGET_VECTOR_ELEN_BF_16") + (RVVM1x7BF "TARGET_VECTOR_ELEN_BF_16") + (RVVM1x8BF "TARGET_VECTOR_ELEN_BF_16") (RVVM1x2HF "TARGET_VECTOR_ELEN_FP_16") (RVVM1x3HF "TARGET_VECTOR_ELEN_FP_16") (RVVM1x4HF "TARGET_VECTOR_ELEN_FP_16") @@ -1253,6 +1307,9 @@ RVVM2x3HI RVVM2x4HI RVVM4x2SI + (RVVM2x2BF "TARGET_VECTOR_ELEN_BF_16") + (RVVM2x3BF "TARGET_VECTOR_ELEN_BF_16") + (RVVM2x4BF "TARGET_VECTOR_ELEN_BF_16") (RVVM2x2HF "TARGET_VECTOR_ELEN_FP_16") (RVVM2x3HF "TARGET_VECTOR_ELEN_FP_16") (RVVM2x4HF "TARGET_VECTOR_ELEN_FP_16") @@ -1264,6 +1321,7 @@ RVVM2x3QI RVVM2x4QI RVVM4x2HI + (RVVM4x2BF "TARGET_VECTOR_ELEN_BF_16") (RVVM4x2HF "TARGET_VECTOR_ELEN_FP_16") ]) @@ -1475,6 +1533,13 @@ (RVVM2DI "TARGET_VECTOR_ELEN_64 && TARGET_64BIT") (RVVM1DI "TARGET_VECTOR_ELEN_64 && TARGET_64BIT") + (RVVM8BF "TARGET_VECTOR_ELEN_BF_16") + (RVVM4BF "TARGET_VECTOR_ELEN_BF_16") + (RVVM2BF "TARGET_VECTOR_ELEN_BF_16") + (RVVM1BF "TARGET_VECTOR_ELEN_BF_16") + (RVVMF2BF "TARGET_VECTOR_ELEN_BF_16") + (RVVMF4BF "TARGET_VECTOR_ELEN_BF_16 && TARGET_MIN_VLEN > 32") + (RVVM8HF "TARGET_ZVFH") (RVVM4HF "TARGET_ZVFH") (RVVM2HF "TARGET_ZVFH") (RVVM1HF "TARGET_ZVFH") (RVVMF2HF "TARGET_ZVFH") (RVVMF4HF "TARGET_ZVFH && TARGET_MIN_VLEN > 32") @@ -1574,7 +1639,7 @@ (define_mode_iterator VLS [VLSI VLSF_ZVFHMIN]) -(define_mode_iterator V [VI VF_ZVFHMIN]) +(define_mode_iterator V [VI VF_ZVFBF16 VF_ZVFHMIN]) (define_mode_iterator V_VLS [V VLS]) @@ -1582,7 +1647,7 @@ (define_mode_iterator V_VLSF [VF VLSF]) -(define_mode_iterator V_VLSF_ZVFHMIN [VF_ZVFHMIN VLSF_ZVFHMIN]) +(define_mode_iterator V_VLSF_ZVFHMIN [VF_ZVFBF16 VF_ZVFHMIN VLSF_ZVFHMIN]) (define_mode_iterator VT [V1T V2T V4T V8T V16T V32T]) @@ -1624,6 +1689,8 @@ (RVVM8HI "RVVM8HI") (RVVM4HI "RVVM4HI") (RVVM2HI "RVVM2HI") (RVVM1HI "RVVM1HI") (RVVMF2HI "RVVMF2HI") (RVVMF4HI "RVVMF4HI") + (RVVM8BF "RVVM8HI") (RVVM4BF "RVVM4HI") (RVVM2BF "RVVM2HI") (RVVM1BF "RVVM1HI") (RVVMF2BF "RVVMF2HI") (RVVMF4BF "RVVMF4HI") + (RVVM8HF "RVVM8HI") (RVVM4HF "RVVM4HI") (RVVM2HF "RVVM2HI") (RVVM1HF "RVVM1HI") (RVVMF2HF "RVVMF2HI") (RVVMF4HF "RVVMF4HI") (RVVM8SI "RVVM8SI") (RVVM4SI "RVVM4SI") (RVVM2SI "RVVM2SI") (RVVM1SI "RVVM1SI") (RVVMF2SI "RVVMF2SI") @@ -1815,6 +1882,8 @@ (RVVM8HI "RVVMF2BI") (RVVM4HI "RVVMF4BI") (RVVM2HI "RVVMF8BI") (RVVM1HI "RVVMF16BI") (RVVMF2HI "RVVMF32BI") (RVVMF4HI "RVVMF64BI") + (RVVM8BF "RVVMF2BI") (RVVM4BF "RVVMF4BI") (RVVM2BF "RVVMF8BI") (RVVM1BF "RVVMF16BI") (RVVMF2BF "RVVMF32BI") (RVVMF4BF "RVVMF64BI") + (RVVM8HF "RVVMF2BI") (RVVM4HF "RVVMF4BI") (RVVM2HF "RVVMF8BI") (RVVM1HF "RVVMF16BI") (RVVMF2HF "RVVMF32BI") (RVVMF4HF "RVVMF64BI") (RVVM8SI "RVVMF4BI") (RVVM4SI "RVVMF8BI") (RVVM2SI "RVVMF16BI") (RVVM1SI "RVVMF32BI") (RVVMF2SI "RVVMF64BI") @@ -1841,6 +1910,14 @@ (RVVM2x3HI "RVVMF8BI") (RVVM1x3HI "RVVMF16BI") (RVVMF2x3HI "RVVMF32BI") (RVVMF4x3HI "RVVMF64BI") (RVVM4x2HI "RVVMF4BI") (RVVM2x2HI "RVVMF8BI") (RVVM1x2HI "RVVMF16BI") (RVVMF2x2HI "RVVMF32BI") (RVVMF4x2HI "RVVMF64BI") + (RVVM1x8BF "RVVMF16BI") (RVVMF2x8BF "RVVMF32BI") (RVVMF4x8BF "RVVMF64BI") + (RVVM1x7BF "RVVMF16BI") (RVVMF2x7BF "RVVMF32BI") (RVVMF4x7BF "RVVMF64BI") + (RVVM1x6BF "RVVMF16BI") (RVVMF2x6BF "RVVMF32BI") (RVVMF4x6BF "RVVMF64BI") + (RVVM1x5BF "RVVMF16BI") (RVVMF2x5BF "RVVMF32BI") (RVVMF4x5BF "RVVMF64BI") + (RVVM2x4BF "RVVMF8BI") (RVVM1x4BF "RVVMF16BI") (RVVMF2x4BF "RVVMF32BI") (RVVMF4x4BF "RVVMF64BI") + (RVVM2x3BF "RVVMF8BI") (RVVM1x3BF "RVVMF16BI") (RVVMF2x3BF "RVVMF32BI") (RVVMF4x3BF "RVVMF64BI") + (RVVM4x2BF "RVVMF4BI") (RVVM2x2BF "RVVMF8BI") (RVVM1x2BF "RVVMF16BI") (RVVMF2x2BF "RVVMF32BI") (RVVMF4x2BF "RVVMF64BI") + (RVVM1x8HF "RVVMF16BI") (RVVMF2x8HF "RVVMF32BI") (RVVMF4x8HF "RVVMF64BI") (RVVM1x7HF "RVVMF16BI") (RVVMF2x7HF "RVVMF32BI") (RVVMF4x7HF "RVVMF64BI") (RVVM1x6HF "RVVMF16BI") (RVVMF2x6HF "RVVMF32BI") (RVVMF4x6HF "RVVMF64BI") @@ -1916,6 +1993,8 @@ (RVVM8HI "rvvmf2bi") (RVVM4HI "rvvmf4bi") (RVVM2HI "rvvmf8bi") (RVVM1HI "rvvmf16bi") (RVVMF2HI "rvvmf32bi") (RVVMF4HI "rvvmf64bi") + (RVVM8BF "rvvmf2bi") (RVVM4BF "rvvmf4bi") (RVVM2BF "rvvmf8bi") (RVVM1BF "rvvmf16bi") (RVVMF2BF "rvvmf32bi") (RVVMF4BF "rvvmf64bi") + (RVVM8HF "rvvmf2bi") (RVVM4HF "rvvmf4bi") (RVVM2HF "rvvmf8bi") (RVVM1HF "rvvmf16bi") (RVVMF2HF "rvvmf32bi") (RVVMF4HF "rvvmf64bi") (RVVM8SI "rvvmf4bi") (RVVM4SI "rvvmf8bi") (RVVM2SI "rvvmf16bi") (RVVM1SI "rvvmf32bi") (RVVMF2SI "rvvmf64bi") @@ -1942,6 +2021,14 @@ (RVVM2x3HI "rvvmf8bi") (RVVM1x3HI "rvvmf16bi") (RVVMF2x3HI "rvvmf32bi") (RVVMF4x3HI "rvvmf64bi") (RVVM4x2HI "rvvmf4bi") (RVVM2x2HI "rvvmf8bi") (RVVM1x2HI "rvvmf16bi") (RVVMF2x2HI "rvvmf32bi") (RVVMF4x2HI "rvvmf64bi") + (RVVM1x8BF "rvvmf16bi") (RVVMF2x8BF "rvvmf32bi") (RVVMF4x8BF "rvvmf64bi") + (RVVM1x7BF "rvvmf16bi") (RVVMF2x7BF "rvvmf32bi") (RVVMF4x7BF "rvvmf64bi") + (RVVM1x6BF "rvvmf16bi") (RVVMF2x6BF "rvvmf32bi") (RVVMF4x6BF "rvvmf64bi") + (RVVM1x5BF "rvvmf16bi") (RVVMF2x5BF "rvvmf32bi") (RVVMF4x5BF "rvvmf64bi") + (RVVM2x4BF "rvvmf8bi") (RVVM1x4BF "rvvmf16bi") (RVVMF2x4BF "rvvmf32bi") (RVVMF4x4BF "rvvmf64bi") + (RVVM2x3BF "rvvmf8bi") (RVVM1x3BF "rvvmf16bi") (RVVMF2x3BF "rvvmf32bi") (RVVMF4x3BF "rvvmf64bi") + (RVVM4x2BF "rvvmf4bi") (RVVM2x2BF "rvvmf8bi") (RVVM1x2BF "rvvmf16bi") (RVVMF2x2BF "rvvmf32bi") (RVVMF4x2BF "rvvmf64bi") + (RVVM1x8HF "rvvmf16bi") (RVVMF2x8HF "rvvmf32bi") (RVVMF4x8HF "rvvmf64bi") (RVVM1x7HF "rvvmf16bi") (RVVMF2x7HF "rvvmf32bi") (RVVMF4x7HF "rvvmf64bi") (RVVM1x6HF "rvvmf16bi") (RVVMF2x6HF "rvvmf32bi") (RVVMF4x6HF "rvvmf64bi") @@ -2017,6 +2104,8 @@ (RVVM8HI "HI") (RVVM4HI "HI") (RVVM2HI "HI") (RVVM1HI "HI") (RVVMF2HI "HI") (RVVMF4HI "HI") + (RVVM8BF "BF") (RVVM4BF "BF") (RVVM2BF "BF") (RVVM1BF "BF") (RVVMF2BF "BF") (RVVMF4BF "BF") + (RVVM8HF "HF") (RVVM4HF "HF") (RVVM2HF "HF") (RVVM1HF "HF") (RVVMF2HF "HF") (RVVMF4HF "HF") (RVVM8SI "SI") (RVVM4SI "SI") (RVVM2SI "SI") (RVVM1SI "SI") (RVVMF2SI "SI") @@ -2114,6 +2203,8 @@ (RVVM8HI "hi") (RVVM4HI "hi") (RVVM2HI "hi") (RVVM1HI "hi") (RVVMF2HI "hi") (RVVMF4HI "hi") + (RVVM8BF "bf") (RVVM4BF "bf") (RVVM2BF "bf") (RVVM1BF "bf") (RVVMF2BF "bf") (RVVMF4BF "bf") + (RVVM8HF "hf") (RVVM4HF "hf") (RVVM2HF "hf") (RVVM1HF "hf") (RVVMF2HF "hf") (RVVMF4HF "hf") (RVVM8SI "si") (RVVM4SI "si") (RVVM2SI "si") (RVVM1SI "si") (RVVMF2SI "si") @@ -2156,6 +2247,32 @@ (RVVM2x3HI "rvvm2hi") (RVVM1x3HI "rvvm1hi") (RVVMF2x3HI "rvvmf2hi") (RVVMF4x3HI "rvvmf4hi") (RVVM4x2HI "rvvm4hi") (RVVM2x2HI "rvvm2hi") (RVVM1x2HI "rvvm1hi") (RVVMF2x2HI "rvvmf2hi") (RVVMF4x2HI "rvvmf4hi") + (RVVM1x8BF "rvvm1bf") + (RVVMF2x8BF "rvvmf2bf") + (RVVMF4x8BF "rvvmf4bf") + (RVVM1x7BF "rvvm1bf") + (RVVMF2x7BF "rvvmf2bf") + (RVVMF4x7BF "rvvmf4bf") + (RVVM1x6BF "rvvm1bf") + (RVVMF2x6BF "rvvmf2bf") + (RVVMF4x6BF "rvvmf4bf") + (RVVM1x5BF "rvvm1bf") + (RVVMF2x5BF "rvvmf2bf") + (RVVMF4x5BF "rvvmf4bf") + (RVVM2x4BF "rvvm2bf") + (RVVM1x4BF "rvvm1bf") + (RVVMF2x4BF "rvvmf2bf") + (RVVMF4x4BF "rvvmf4bf") + (RVVM2x3BF "rvvm2bf") + (RVVM1x3BF "rvvm1bf") + (RVVMF2x3BF "rvvmf2bf") + (RVVMF4x3BF "rvvmf4bf") + (RVVM4x2BF "rvvm4bf") + (RVVM2x2BF "rvvm2bf") + (RVVM1x2BF "rvvm1bf") + (RVVMF2x2BF "rvvmf2bf") + (RVVMF4x2BF "rvvmf4bf") + (RVVM1x8HF "rvvm1hf") (RVVMF2x8HF "rvvmf2hf") (RVVMF4x8HF "rvvmf4hf") @@ -2292,6 +2409,14 @@ (RVVM2x3HI "3") (RVVM1x3HI "3") (RVVMF2x3HI "3") (RVVMF4x3HI "3") (RVVM4x2HI "2") (RVVM2x2HI "2") (RVVM1x2HI "2") (RVVMF2x2HI "2") (RVVMF4x2HI "2") + (RVVM1x8BF "8") (RVVMF2x8BF "8") (RVVMF4x8BF "8") + (RVVM1x7BF "7") (RVVMF2x7BF "7") (RVVMF4x7BF "7") + (RVVM1x6BF "6") (RVVMF2x6BF "6") (RVVMF4x6BF "6") + (RVVM1x5BF "5") (RVVMF2x5BF "5") (RVVMF4x5BF "5") + (RVVM2x4BF "4") (RVVM1x4BF "4") (RVVMF2x4BF "4") (RVVMF4x4BF "4") + (RVVM2x3BF "3") (RVVM1x3BF "3") (RVVMF2x3BF "3") (RVVMF4x3BF "3") + (RVVM4x2BF "2") (RVVM2x2BF "2") (RVVM1x2BF "2") (RVVMF2x2BF "2") (RVVMF4x2BF "2") + (RVVM1x8HF "8") (RVVMF2x8HF "8") (RVVMF4x8HF "8") (RVVM1x7HF "7") (RVVMF2x7HF "7") (RVVMF4x7HF "7") (RVVM1x6HF "6") (RVVMF2x6HF "6") (RVVMF4x6HF "6") @@ -2346,6 +2471,8 @@ (RVVM8HI "16") (RVVM4HI "16") (RVVM2HI "16") (RVVM1HI "16") (RVVMF2HI "16") (RVVMF4HI "16") + (RVVM8BF "16") (RVVM4BF "16") (RVVM2BF "16") (RVVM1BF "16") (RVVMF2BF "16") (RVVMF4BF "16") + (RVVM8HF "16") (RVVM4HF "16") (RVVM2HF "16") (RVVM1HF "16") (RVVMF2HF "16") (RVVMF4HF "16") (RVVM8SI "32") (RVVM4SI "32") (RVVM2SI "32") (RVVM1SI "32") (RVVMF2SI "32") @@ -2372,6 +2499,14 @@ (RVVM2x3HI "16") (RVVM1x3HI "16") (RVVMF2x3HI "16") (RVVMF4x3HI "16") (RVVM4x2HI "16") (RVVM2x2HI "16") (RVVM1x2HI "16") (RVVMF2x2HI "16") (RVVMF4x2HI "16") + (RVVM1x8BF "16") (RVVMF2x8BF "16") (RVVMF4x8BF "16") + (RVVM1x7BF "16") (RVVMF2x7BF "16") (RVVMF4x7BF "16") + (RVVM1x6BF "16") (RVVMF2x6BF "16") (RVVMF4x6BF "16") + (RVVM1x5BF "16") (RVVMF2x5BF "16") (RVVMF4x5BF "16") + (RVVM2x4BF "16") (RVVM1x4BF "16") (RVVMF2x4BF "16") (RVVMF4x4BF "16") + (RVVM2x3BF "16") (RVVM1x3BF "16") (RVVMF2x3BF "16") (RVVMF4x3BF "16") + (RVVM4x2BF "16") (RVVM2x2BF "16") (RVVM1x2BF "16") (RVVMF2x2BF "16") (RVVMF4x2BF "16") + (RVVM1x8HF "16") (RVVMF2x8HF "16") (RVVMF4x8HF "16") (RVVM1x7HF "16") (RVVMF2x7HF "16") (RVVMF4x7HF "16") (RVVM1x6HF "16") (RVVMF2x6HF "16") (RVVMF4x6HF "16") @@ -2438,6 +2573,8 @@ (define_mode_attr double_trunc_sew [ (RVVM8HI "8") (RVVM4HI "8") (RVVM2HI "8") (RVVM1HI "8") (RVVMF2HI "8") (RVVMF4HI "8") + (RVVM8BF "8") (RVVM4BF "8") (RVVM2BF "8") (RVVM1BF "8") (RVVMF2BF "8") (RVVMF4BF "8") + (RVVM8HF "8") (RVVM4HF "8") (RVVM2HF "8") (RVVM1HF "8") (RVVMF2HF "8") (RVVMF4HF "8") (RVVM8SI "16") (RVVM4SI "16") (RVVM2SI "16") (RVVM1SI "16") (RVVMF2SI "16") @@ -2470,6 +2607,8 @@ (RVVM4HI "32") (RVVM2HI "32") (RVVM1HI "32") (RVVMF2HI "32") (RVVMF4HI "32") + (RVVM4BF "32") (RVVM2BF "32") (RVVM1BF "32") (RVVMF2BF "32") (RVVMF4BF "32") + (RVVM4HF "32") (RVVM2HF "32") (RVVM1HF "32") (RVVMF2HF "32") (RVVMF4HF "32") (RVVM4SI "64") (RVVM2SI "64") (RVVM1SI "64") (RVVMF2SI "64") @@ -2804,6 +2943,8 @@ (define_mode_attr VINDEX_DOUBLE_TRUNC [ (RVVM8HI "RVVM4QI") (RVVM4HI "RVVM2QI") (RVVM2HI "RVVM1QI") (RVVM1HI "RVVMF2QI") (RVVMF2HI "RVVMF4QI") (RVVMF4HI "RVVMF8QI") + (RVVM8BF "RVVM4QI") (RVVM4BF "RVVM2QI") (RVVM2BF "RVVM1QI") (RVVM1BF "RVVMF2QI") (RVVMF2BF "RVVMF4QI") (RVVMF4BF "RVVMF8QI") + (RVVM8HF "RVVM4QI") (RVVM4HF "RVVM2QI") (RVVM2HF "RVVM1QI") (RVVM1HF "RVVMF2QI") (RVVMF2HF "RVVMF4QI") (RVVMF4HF "RVVMF8QI") (RVVM8SI "RVVM4HI") (RVVM4SI "RVVM2HI") (RVVM2SI "RVVM1HI") (RVVM1SI "RVVMF2HI") (RVVMF2SI "RVVMF4HI") @@ -2836,6 +2977,8 @@ (RVVM4HI "RVVM8SI") (RVVM2HI "RVVM4SI") (RVVM1HI "RVVM2SI") (RVVMF2HI "RVVM1SI") (RVVMF4HI "RVVMF2SI") + (RVVM4BF "RVVM8SI") (RVVM2BF "RVVM4SI") (RVVM1BF "RVVM2SI") (RVVMF2BF "RVVM1SI") (RVVMF4BF "RVVMF2SI") + (RVVM4HF "RVVM8SI") (RVVM2HF "RVVM4SI") (RVVM1HF "RVVM2SI") (RVVMF2HF "RVVM1SI") (RVVMF4HF "RVVMF2SI") (RVVM4SI "RVVM8DI") (RVVM2SI "RVVM4DI") (RVVM1SI "RVVM2DI") (RVVMF2SI "RVVM1DI") @@ -2848,6 +2991,8 @@ (RVVM2HI "RVVM8DI") (RVVM1HI "RVVM4DI") (RVVMF2HI "RVVM2DI") (RVVMF4HI "RVVM1DI") + (RVVM2BF "RVVM8DI") (RVVM1BF "RVVM4DI") (RVVMF2BF "RVVM2DI") (RVVMF4BF "RVVM1DI") + (RVVM2HF "RVVM8DI") (RVVM1HF "RVVM4DI") (RVVMF2HF "RVVM2DI") (RVVMF4HF "RVVM1DI") ]) @@ -3352,6 +3497,10 @@ (RVVM2HI "vector_eew16_stride_operand") (RVVM1HI "vector_eew16_stride_operand") (RVVMF2HI "vector_eew16_stride_operand") (RVVMF4HI "vector_eew16_stride_operand") + (RVVM8BF "vector_eew16_stride_operand") (RVVM4BF "vector_eew16_stride_operand") + (RVVM2BF "vector_eew16_stride_operand") (RVVM1BF "vector_eew16_stride_operand") + (RVVMF2BF "vector_eew16_stride_operand") (RVVMF4BF "vector_eew16_stride_operand") + (RVVM8HF "vector_eew16_stride_operand") (RVVM4HF "vector_eew16_stride_operand") (RVVM2HF "vector_eew16_stride_operand") (RVVM1HF "vector_eew16_stride_operand") (RVVMF2HF "vector_eew16_stride_operand") (RVVMF4HF "vector_eew16_stride_operand") @@ -3381,6 +3530,10 @@ (RVVM2HI "rJ,rJ,rJ,c02,c02,c02") (RVVM1HI "rJ,rJ,rJ,c02,c02,c02") (RVVMF2HI "rJ,rJ,rJ,c02,c02,c02") (RVVMF4HI "rJ,rJ,rJ,c02,c02,c02") + (RVVM8BF "rJ,rJ,rJ,c02,c02,c02") (RVVM4BF "rJ,rJ,rJ,c02,c02,c02") + (RVVM2BF "rJ,rJ,rJ,c02,c02,c02") (RVVM1BF "rJ,rJ,rJ,c02,c02,c02") + (RVVMF2BF "rJ,rJ,rJ,c02,c02,c02") (RVVMF4BF "rJ,rJ,rJ,c02,c02,c02") + (RVVM8HF "rJ,rJ,rJ,c02,c02,c02") (RVVM4HF "rJ,rJ,rJ,c02,c02,c02") (RVVM2HF "rJ,rJ,rJ,c02,c02,c02") (RVVM1HF "rJ,rJ,rJ,c02,c02,c02") (RVVMF2HF "rJ,rJ,rJ,c02,c02,c02") (RVVMF4HF "rJ,rJ,rJ,c02,c02,c02") @@ -3410,6 +3563,10 @@ (RVVM2HI "rJ,c02") (RVVM1HI "rJ,c02") (RVVMF2HI "rJ,c02") (RVVMF4HI "rJ,c02") + (RVVM8BF "rJ,c02") (RVVM4BF "rJ,c02") + (RVVM2BF "rJ,c02") (RVVM1BF "rJ,c02") + (RVVMF2BF "rJ,c02") (RVVMF4BF "rJ,c02") + (RVVM8HF "rJ,c02") (RVVM4HF "rJ,c02") (RVVM2HF "rJ,c02") (RVVM1HF "rJ,c02") (RVVMF2HF "rJ,c02") (RVVMF4HF "rJ,c02") @@ -3438,6 +3595,10 @@ (RVVM2HI "immediate_operand") (RVVM1HI "immediate_operand") (RVVMF2HI "immediate_operand") (RVVMF4HI "immediate_operand") + (RVVM8BF "const_1_operand") (RVVM4BF "vector_gs_extension_operand") + (RVVM2BF "immediate_operand") (RVVM1BF "immediate_operand") + (RVVMF2BF "immediate_operand") (RVVMF4BF "immediate_operand") + (RVVM8HF "const_1_operand") (RVVM4HF "vector_gs_extension_operand") (RVVM2HF "immediate_operand") (RVVM1HF "immediate_operand") (RVVMF2HF "immediate_operand") (RVVMF4HF "immediate_operand") @@ -3464,6 +3625,10 @@ (RVVM2HI "const_1_or_2_operand") (RVVM1HI "const_1_or_2_operand") (RVVMF2HI "const_1_or_2_operand") (RVVMF4HI "const_1_or_2_operand") + (RVVM8BF "const_1_operand") (RVVM4BF "vector_gs_scale_operand_16_rv32") + (RVVM2BF "const_1_or_2_operand") (RVVM1BF "const_1_or_2_operand") + (RVVMF2BF "const_1_or_2_operand") (RVVMF4BF "const_1_or_2_operand") + (RVVM8HF "const_1_operand") (RVVM4HF "vector_gs_scale_operand_16_rv32") (RVVM2HF "const_1_or_2_operand") (RVVM1HF "const_1_or_2_operand") (RVVMF2HF "const_1_or_2_operand") (RVVMF4HF "const_1_or_2_operand") diff --git a/gcc/config/riscv/vector.md b/gcc/config/riscv/vector.md index fbcdf96f038..9a139faf745 100644 --- a/gcc/config/riscv/vector.md +++ b/gcc/config/riscv/vector.md @@ -54,7 +54,8 @@ vgather,vcompress,vlsegde,vssegte,vlsegds,vssegts,vlsegdux,vlsegdox,\ vssegtux,vssegtox,vlsegdff,vandn,vbrev,vbrev8,vrev8,vcpop,vclz,vctz,vrol,\ vror,vwsll,vclmul,vclmulh,vghsh,vgmul,vaesef,vaesem,vaesdf,vaesdm,\ - vaeskf1,vaeskf2,vaesz,vsha2ms,vsha2ch,vsha2cl,vsm4k,vsm4r,vsm3me,vsm3c") + vaeskf1,vaeskf2,vaesz,vsha2ms,vsha2ch,vsha2cl,vsm4k,vsm4r,vsm3me,vsm3c,\ + vfncvtbf16,vfwcvtbf16,vfwmaccbf16") (const_string "true")] (const_string "false"))) @@ -78,7 +79,8 @@ vgather,vcompress,vlsegde,vssegte,vlsegds,vssegts,vlsegdux,vlsegdox,\ vssegtux,vssegtox,vlsegdff,vandn,vbrev,vbrev8,vrev8,vcpop,vclz,vctz,vrol,\ vror,vwsll,vclmul,vclmulh,vghsh,vgmul,vaesef,vaesem,vaesdf,vaesdm,\ - vaeskf1,vaeskf2,vaesz,vsha2ms,vsha2ch,vsha2cl,vsm4k,vsm4r,vsm3me,vsm3c") + vaeskf1,vaeskf2,vaesz,vsha2ms,vsha2ch,vsha2cl,vsm4k,vsm4r,vsm3me,vsm3c,\ + vfncvtbf16,vfwcvtbf16,vfwmaccbf16") (const_string "true")] (const_string "false"))) @@ -119,6 +121,14 @@ RVVM2x4HI,RVVM1x4HI,RVVMF2x4HI,RVVMF4x4HI,\ RVVM2x3HI,RVVM1x3HI,RVVMF2x3HI,RVVMF4x3HI,\ RVVM4x2HI,RVVM2x2HI,RVVM1x2HI,RVVMF2x2HI,RVVMF4x2HI,\ + RVVM8BF,RVVM4BF,RVVM2BF,RVVM1BF,RVVMF2BF,RVVMF4BF,\ + RVVM1x8BF,RVVMF2x8BF,RVVMF4x8BF,\ + RVVM1x7BF,RVVMF2x7BF,RVVMF4x7BF,\ + RVVM1x6BF,RVVMF2x6BF,RVVMF4x6BF,\ + RVVM1x5BF,RVVMF2x5BF,RVVMF4x5BF,\ + RVVM2x4BF,RVVM1x4BF,RVVMF2x4BF,RVVMF4x4BF,\ + RVVM2x3BF,RVVM1x3BF,RVVMF2x3BF,RVVMF4x3BF,\ + RVVM4x2BF,RVVM2x2BF,RVVM1x2BF,RVVMF2x2BF,RVVMF4x2BF,\ RVVM8HF,RVVM4HF,RVVM2HF,RVVM1HF,RVVMF2HF,RVVMF4HF,\ RVVM1x8HF,RVVMF2x8HF,RVVMF4x8HF,\ RVVM1x7HF,RVVMF2x7HF,RVVMF4x7HF,\ @@ -180,6 +190,12 @@ (eq_attr "mode" "RVVM1HI") (symbol_ref "riscv_vector::LMUL_1") (eq_attr "mode" "RVVMF2HI") (symbol_ref "riscv_vector::LMUL_F2") (eq_attr "mode" "RVVMF4HI") (symbol_ref "riscv_vector::LMUL_F4") + (eq_attr "mode" "RVVM8BF") (symbol_ref "riscv_vector::LMUL_8") + (eq_attr "mode" "RVVM4BF") (symbol_ref "riscv_vector::LMUL_4") + (eq_attr "mode" "RVVM2BF") (symbol_ref "riscv_vector::LMUL_2") + (eq_attr "mode" "RVVM1BF") (symbol_ref "riscv_vector::LMUL_1") + (eq_attr "mode" "RVVMF2BF") (symbol_ref "riscv_vector::LMUL_F2") + (eq_attr "mode" "RVVMF4BF") (symbol_ref "riscv_vector::LMUL_F4") (eq_attr "mode" "RVVM8HF") (symbol_ref "riscv_vector::LMUL_8") (eq_attr "mode" "RVVM4HF") (symbol_ref "riscv_vector::LMUL_4") (eq_attr "mode" "RVVM2HF") (symbol_ref "riscv_vector::LMUL_2") @@ -261,6 +277,31 @@ (eq_attr "mode" "RVVM1x2HI") (symbol_ref "riscv_vector::LMUL_1") (eq_attr "mode" "RVVMF2x2HI") (symbol_ref "riscv_vector::LMUL_F2") (eq_attr "mode" "RVVMF4x2HI") (symbol_ref "riscv_vector::LMUL_F4") + (eq_attr "mode" "RVVM1x8BF") (symbol_ref "riscv_vector::LMUL_1") + (eq_attr "mode" "RVVMF2x8BF") (symbol_ref "riscv_vector::LMUL_F2") + (eq_attr "mode" "RVVMF4x8BF") (symbol_ref "riscv_vector::LMUL_F4") + (eq_attr "mode" "RVVM1x7BF") (symbol_ref "riscv_vector::LMUL_1") + (eq_attr "mode" "RVVMF2x7BF") (symbol_ref "riscv_vector::LMUL_F2") + (eq_attr "mode" "RVVMF4x7BF") (symbol_ref "riscv_vector::LMUL_F4") + (eq_attr "mode" "RVVM1x6BF") (symbol_ref "riscv_vector::LMUL_1") + (eq_attr "mode" "RVVMF2x6BF") (symbol_ref "riscv_vector::LMUL_F2") + (eq_attr "mode" "RVVMF4x6BF") (symbol_ref "riscv_vector::LMUL_F4") + (eq_attr "mode" "RVVM1x5BF") (symbol_ref "riscv_vector::LMUL_1") + (eq_attr "mode" "RVVMF2x5BF") (symbol_ref "riscv_vector::LMUL_F2") + (eq_attr "mode" "RVVMF4x5BF") (symbol_ref "riscv_vector::LMUL_F4") + (eq_attr "mode" "RVVM2x4BF") (symbol_ref "riscv_vector::LMUL_2") + (eq_attr "mode" "RVVM1x4BF") (symbol_ref "riscv_vector::LMUL_1") + (eq_attr "mode" "RVVMF2x4BF") (symbol_ref "riscv_vector::LMUL_F2") + (eq_attr "mode" "RVVMF4x4BF") (symbol_ref "riscv_vector::LMUL_F4") + (eq_attr "mode" "RVVM2x3BF") (symbol_ref "riscv_vector::LMUL_2") + (eq_attr "mode" "RVVM1x3BF") (symbol_ref "riscv_vector::LMUL_1") + (eq_attr "mode" "RVVMF2x3BF") (symbol_ref "riscv_vector::LMUL_F2") + (eq_attr "mode" "RVVMF4x3BF") (symbol_ref "riscv_vector::LMUL_F4") + (eq_attr "mode" "RVVM4x2BF") (symbol_ref "riscv_vector::LMUL_4") + (eq_attr "mode" "RVVM2x2BF") (symbol_ref "riscv_vector::LMUL_2") + (eq_attr "mode" "RVVM1x2BF") (symbol_ref "riscv_vector::LMUL_1") + (eq_attr "mode" "RVVMF2x2BF") (symbol_ref "riscv_vector::LMUL_F2") + (eq_attr "mode" "RVVMF4x2BF") (symbol_ref "riscv_vector::LMUL_F4") (eq_attr "mode" "RVVM1x8HF") (symbol_ref "riscv_vector::LMUL_1") (eq_attr "mode" "RVVMF2x8HF") (symbol_ref "riscv_vector::LMUL_F2") (eq_attr "mode" "RVVMF4x8HF") (symbol_ref "riscv_vector::LMUL_F4") @@ -446,7 +487,7 @@ vandn,vbrev,vbrev8,vrev8,vcpop,vclz,vctz,vrol,vror,vwsll,\ vclmul,vclmulh,vghsh,vgmul,vaesef,vaesem,vaesdf,vaesdm,\ vaeskf1,vaeskf2,vaesz,vsha2ms,vsha2ch,vsha2cl,vsm4k,vsm4r,\ - vsm3me,vsm3c") + vsm3me,vsm3c,vfncvtbf16,vfwcvtbf16,vfwmaccbf16") (const_int INVALID_ATTRIBUTE) (and (eq_attr "type" "vlde,vste,vlsegde,vssegte,vlsegds,vssegts,\ vlsegdff,vssegtux,vlsegdox,vlsegdux") @@ -465,6 +506,12 @@ (eq_attr "mode" "RVVM1HI") (const_int 16) (eq_attr "mode" "RVVMF2HI") (const_int 32) (eq_attr "mode" "RVVMF4HI") (const_int 64) + (eq_attr "mode" "RVVM8BF") (const_int 2) + (eq_attr "mode" "RVVM4BF") (const_int 4) + (eq_attr "mode" "RVVM2BF") (const_int 8) + (eq_attr "mode" "RVVM1BF") (const_int 16) + (eq_attr "mode" "RVVMF2BF") (const_int 32) + (eq_attr "mode" "RVVMF4BF") (const_int 64) (eq_attr "mode" "RVVM8HF") (const_int 2) (eq_attr "mode" "RVVM4HF") (const_int 4) (eq_attr "mode" "RVVM2HF") (const_int 8) @@ -546,6 +593,31 @@ (eq_attr "mode" "RVVM1x2HI") (const_int 16) (eq_attr "mode" "RVVMF2x2HI") (const_int 32) (eq_attr "mode" "RVVMF4x2HI") (const_int 64) + (eq_attr "mode" "RVVM1x8BF") (const_int 16) + (eq_attr "mode" "RVVMF2x8BF") (const_int 32) + (eq_attr "mode" "RVVMF4x8BF") (const_int 64) + (eq_attr "mode" "RVVM1x7BF") (const_int 16) + (eq_attr "mode" "RVVMF2x7BF") (const_int 32) + (eq_attr "mode" "RVVMF4x7BF") (const_int 64) + (eq_attr "mode" "RVVM1x6BF") (const_int 16) + (eq_attr "mode" "RVVMF2x6BF") (const_int 32) + (eq_attr "mode" "RVVMF4x6BF") (const_int 64) + (eq_attr "mode" "RVVM1x5BF") (const_int 16) + (eq_attr "mode" "RVVMF2x5BF") (const_int 32) + (eq_attr "mode" "RVVMF4x5BF") (const_int 64) + (eq_attr "mode" "RVVM2x4BF") (const_int 8) + (eq_attr "mode" "RVVM1x4BF") (const_int 16) + (eq_attr "mode" "RVVMF2x4BF") (const_int 32) + (eq_attr "mode" "RVVMF4x4BF") (const_int 64) + (eq_attr "mode" "RVVM2x3BF") (const_int 8) + (eq_attr "mode" "RVVM1x3BF") (const_int 16) + (eq_attr "mode" "RVVMF2x3BF") (const_int 32) + (eq_attr "mode" "RVVMF4x3BF") (const_int 64) + (eq_attr "mode" "RVVM4x2BF") (const_int 4) + (eq_attr "mode" "RVVM2x2BF") (const_int 8) + (eq_attr "mode" "RVVM1x2BF") (const_int 16) + (eq_attr "mode" "RVVMF2x2BF") (const_int 32) + (eq_attr "mode" "RVVMF4x2BF") (const_int 64) (eq_attr "mode" "RVVM1x8HF") (const_int 16) (eq_attr "mode" "RVVMF2x8HF") (const_int 32) (eq_attr "mode" "RVVMF4x8HF") (const_int 64) @@ -723,7 +795,8 @@ vired,viwred,vfredu,vfredo,vfwredu,vfwredo,vimovxv,vfmovfv,\ vslideup,vslidedown,vislide1up,vislide1down,vfslide1up,vfslide1down,\ vgather,vldff,viwmuladd,vfwmuladd,vlsegde,vlsegds,vlsegdux,vlsegdox,vlsegdff,\ - vandn,vbrev,vbrev8,vrev8,vrol,vror,vwsll,vclmul,vclmulh") + vandn,vbrev,vbrev8,vrev8,vrol,vror,vwsll,vclmul,vclmulh,\ + vfncvtbf16,vfwcvtbf16,vfwmaccbf16") (const_int 2) (eq_attr "type" "vimerge,vfmerge,vcompress,vghsh,vgmul,vaesef,vaesem,vaesdf,vaesdm,\ @@ -767,7 +840,8 @@ vfcvtftoi,vfwcvtitof,vfwcvtftoi,vfwcvtftof,vfncvtitof,\ vfncvtftoi,vfncvtftof,vfclass,vimovxv,vfmovfv,vcompress,\ vlsegde,vssegts,vssegtux,vssegtox,vlsegdff,vbrev,vbrev8,vrev8,\ - vghsh,vaeskf1,vaeskf2,vsha2ms,vsha2ch,vsha2cl,vsm4k,vsm3me,vsm3c") + vghsh,vaeskf1,vaeskf2,vsha2ms,vsha2ch,vsha2cl,vsm4k,vsm3me,vsm3c,\ + vfncvtbf16,vfwcvtbf16") (const_int 4) ;; If operands[3] of "vlds" is not vector mode, it is pred_broadcast. @@ -783,7 +857,7 @@ vfsgnj,vfmerge,vired,viwred,vfredu,vfredo,vfwredu,vfwredo,\ vslideup,vslidedown,vislide1up,vislide1down,vfslide1up,vfslide1down,\ vgather,viwmuladd,vfwmuladd,vlsegds,vlsegdux,vlsegdox,vandn,vrol,\ - vror,vwsll,vclmul,vclmulh") + vror,vwsll,vclmul,vclmulh,vfwmaccbf16") (const_int 5) (eq_attr "type" "vicmp,vimuladd,vfcmp,vfmuladd") @@ -800,7 +874,8 @@ vfcvtitof,vfcvtftoi,vfwcvtitof,vfwcvtftoi,vfwcvtftof,\ vfncvtitof,vfncvtftoi,vfncvtftof,vfclass,vimovxv,vfmovfv,\ vcompress,vldff,vlsegde,vlsegdff,vbrev,vbrev8,vrev8,vghsh,\ - vaeskf1,vaeskf2,vsha2ms,vsha2ch,vsha2cl,vsm4k,vsm3me,vsm3c") + vaeskf1,vaeskf2,vsha2ms,vsha2ch,vsha2cl,vsm4k,vsm3me,vsm3c,\ + vfncvtbf16,vfwcvtbf16") (symbol_ref "riscv_vector::get_ta(operands[5])") ;; If operands[3] of "vlds" is not vector mode, it is pred_broadcast. @@ -816,7 +891,8 @@ vfwalu,vfwmul,vfsgnj,vfmerge,vired,viwred,vfredu,\ vfredo,vfwredu,vfwredo,vslideup,vslidedown,vislide1up,\ vislide1down,vfslide1up,vfslide1down,vgather,viwmuladd,vfwmuladd,\ - vlsegds,vlsegdux,vlsegdox,vandn,vrol,vror,vwsll,vclmul,vclmulh") + vlsegds,vlsegdux,vlsegdox,vandn,vrol,vror,vwsll,vclmul,vclmulh,\ + vfwmaccbf16") (symbol_ref "riscv_vector::get_ta(operands[6])") (eq_attr "type" "vimuladd,vfmuladd") @@ -830,7 +906,8 @@ (define_attr "ma" "" (cond [(eq_attr "type" "vlde,vext,vmiota,vfsqrt,vfrecp,vfcvtitof,vfcvtftoi,\ vfwcvtitof,vfwcvtftoi,vfwcvtftof,vfncvtitof,vfncvtftoi,\ - vfncvtftof,vfclass,vldff,vlsegde,vlsegdff,vbrev,vbrev8,vrev8") + vfncvtftof,vfclass,vldff,vlsegde,vlsegdff,vbrev,vbrev8,vrev8,\ + vfncvtbf16,vfwcvtbf16") (symbol_ref "riscv_vector::get_ma(operands[6])") ;; If operands[3] of "vlds" is not vector mode, it is pred_broadcast. @@ -846,7 +923,7 @@ vfwalu,vfwmul,vfsgnj,vfcmp,vslideup,vslidedown,\ vislide1up,vislide1down,vfslide1up,vfslide1down,vgather,\ viwmuladd,vfwmuladd,vlsegds,vlsegdux,vlsegdox,vandn,vrol,\ - vror,vwsll,vclmul,vclmulh") + vror,vwsll,vclmul,vclmulh,vfwmaccbf16") (symbol_ref "riscv_vector::get_ma(operands[7])") (eq_attr "type" "vimuladd,vfmuladd") @@ -862,7 +939,8 @@ vfsqrt,vfrecp,vfmerge,vfcvtitof,vfcvtftoi,vfwcvtitof,\ vfwcvtftoi,vfwcvtftof,vfncvtitof,vfncvtftoi,vfncvtftof,\ vfclass,vired,viwred,vfredu,vfredo,vfwredu,vfwredo,\ - vimovxv,vfmovfv,vlsegde,vlsegdff,vmiota,vbrev,vbrev8,vrev8") + vimovxv,vfmovfv,vlsegde,vlsegdff,vmiota,vbrev,vbrev8,vrev8,\ + vfncvtbf16,vfwcvtbf16") (const_int 7) (eq_attr "type" "vldm,vstm,vmalu,vmalu,vgmul,vaesef,vaesem,vaesdf,vaesdm,vaesz,\ vsm4r") @@ -880,7 +958,8 @@ vnclip,vicmp,vfalu,vfmul,vfminmax,vfdiv,vfwalu,vfwmul,\ vfsgnj,vfcmp,vslideup,vslidedown,vislide1up,\ vislide1down,vfslide1up,vfslide1down,vgather,viwmuladd,vfwmuladd,\ - vlsegds,vlsegdux,vlsegdox,vandn,vrol,vror,vclmul,vclmulh,vwsll") + vlsegds,vlsegdux,vlsegdox,vandn,vrol,vror,vclmul,vclmulh,vwsll,\ + vfwmaccbf16") (const_int 8) (eq_attr "type" "vstux,vstox,vssegts,vssegtux,vssegtox") (const_int 5)