RISC-V: Support 128 bit vector chunk
Checks
Commit Message
From: Juzhe-Zhong <juzhe.zhong@rivai.ai>
RISC-V has provide different VLEN configuration by different ISA
extension like `zve32x`, `zve64x` and `v`
zve32x just guarantee the minimal VLEN is 32 bits,
zve64x guarantee the minimal VLEN is 64 bits,
and v guarantee the minimal VLEN is 128 bits,
Current status (without this patch):
Zve32x: Mode for one vector register mode is VNx1SImode and VNx1DImode
is invalid mode
- one vector register could hold 1 + 1x SImode where x is 0~n, so it
might hold just one SI
Zve64x: Mode for one vector register mode is VNx1DImode or VNx2SImode
- one vector register could hold 1 + 1x DImode where x is 0~n, so it
might hold just one DI.
- one vector register could hold 2 + 2x SImode where x is 0~n, so it
might hold just two SI.
However `v` extension guarantees the minimal VLEN is 128 bits.
We introduce another type/mode mapping for this configure:
v: Mode for one vector register mode is VNx2DImode or VNx4SImode
- one vector register could hold 2 + 2x DImode where x is 0~n, so it
will hold at least two DI
- one vector register could hold 4 + 4x SImode where x is 0~n, so it
will hold at least four DI
This patch model the mode more precisely for the RVV, and help some
middle-end optimization that assume number of element must be a
multiple of two.
gcc/ChangeLog:
* config/riscv/riscv-modes.def (FLOAT_MODE): Add chunk 128 support.
(VECTOR_BOOL_MODE): Ditto.
(ADJUST_NUNITS): Ditto.
(ADJUST_ALIGNMENT): Ditto.
(ADJUST_BYTESIZE): Ditto.
(ADJUST_PRECISION): Ditto.
(RVV_MODES): Ditto.
(VECTOR_MODE_WITH_PREFIX): Ditto.
* config/riscv/riscv-v.cc (ENTRY): Ditto.
(get_vlmul): Ditto.
(get_ratio): Ditto.
* config/riscv/riscv-vector-builtins.cc (DEF_RVV_TYPE): Ditto.
* config/riscv/riscv-vector-builtins.def (DEF_RVV_TYPE): Ditto.
(vbool64_t): Ditto.
(vbool32_t): Ditto.
(vbool16_t): Ditto.
(vbool8_t): Ditto.
(vbool4_t): Ditto.
(vbool2_t): Ditto.
(vbool1_t): Ditto.
(vint8mf8_t): Ditto.
(vuint8mf8_t): Ditto.
(vint8mf4_t): Ditto.
(vuint8mf4_t): Ditto.
(vint8mf2_t): Ditto.
(vuint8mf2_t): Ditto.
(vint8m1_t): Ditto.
(vuint8m1_t): Ditto.
(vint8m2_t): Ditto.
(vuint8m2_t): Ditto.
(vint8m4_t): Ditto.
(vuint8m4_t): Ditto.
(vint8m8_t): Ditto.
(vuint8m8_t): Ditto.
(vint16mf4_t): Ditto.
(vuint16mf4_t): Ditto.
(vint16mf2_t): Ditto.
(vuint16mf2_t): Ditto.
(vint16m1_t): Ditto.
(vuint16m1_t): Ditto.
(vint16m2_t): Ditto.
(vuint16m2_t): Ditto.
(vint16m4_t): Ditto.
(vuint16m4_t): Ditto.
(vint16m8_t): Ditto.
(vuint16m8_t): Ditto.
(vint32mf2_t): Ditto.
(vuint32mf2_t): Ditto.
(vint32m1_t): Ditto.
(vuint32m1_t): Ditto.
(vint32m2_t): Ditto.
(vuint32m2_t): Ditto.
(vint32m4_t): Ditto.
(vuint32m4_t): Ditto.
(vint32m8_t): Ditto.
(vuint32m8_t): Ditto.
(vint64m1_t): Ditto.
(vuint64m1_t): Ditto.
(vint64m2_t): Ditto.
(vuint64m2_t): Ditto.
(vint64m4_t): Ditto.
(vuint64m4_t): Ditto.
(vint64m8_t): Ditto.
(vuint64m8_t): Ditto.
(vfloat32mf2_t): Ditto.
(vfloat32m1_t): Ditto.
(vfloat32m2_t): Ditto.
(vfloat32m4_t): Ditto.
(vfloat32m8_t): Ditto.
(vfloat64m1_t): Ditto.
(vfloat64m2_t): Ditto.
(vfloat64m4_t): Ditto.
(vfloat64m8_t): Ditto.
* config/riscv/riscv-vector-switch.def (ENTRY): Ditto.
* config/riscv/riscv.cc (riscv_legitimize_poly_move): Ditto.
(riscv_convert_vector_bits): Ditto.
* config/riscv/riscv.md:
* config/riscv/vector-iterators.md:
* config/riscv/vector.md (@pred_indexed_<order>store<VNX32_QH:mode><VNX32_QHI:mode>): Ditto.
(@pred_indexed_<order>store<VNX32_QHS:mode><VNX32_QHSI:mode>): Ditto.
(@pred_indexed_<order>store<VNX64_Q:mode><VNX64_Q:mode>): Ditto.
(@pred_indexed_<order>store<VNX64_QH:mode><VNX64_QHI:mode>): Ditto.
(@pred_indexed_<order>store<VNX128_Q:mode><VNX128_Q:mode>): Ditto.
(@pred_reduc_<reduc><mode><vlmul1_zve64>): Ditto.
(@pred_widen_reduc_plus<v_su><mode><vwlmul1_zve64>): Ditto.
(@pred_reduc_plus<order><mode><vlmul1_zve64>): Ditto.
(@pred_widen_reduc_plus<order><mode><vwlmul1_zve64>): Ditto.
gcc/testsuite/ChangeLog:
* gcc.target/riscv/rvv/base/pr108185-4.c: Adapt testcase.
* gcc.target/riscv/rvv/base/spill-1.c: Ditto.
* gcc.target/riscv/rvv/base/spill-11.c: Ditto.
* gcc.target/riscv/rvv/base/spill-2.c: Ditto.
* gcc.target/riscv/rvv/base/spill-3.c: Ditto.
* gcc.target/riscv/rvv/base/spill-5.c: Ditto.
* gcc.target/riscv/rvv/base/spill-9.c: Ditto.
---
gcc/config/riscv/riscv-modes.def | 89 +--
gcc/config/riscv/riscv-v.cc | 17 +-
gcc/config/riscv/riscv-vector-builtins.cc | 11 +-
gcc/config/riscv/riscv-vector-builtins.def | 172 +++---
gcc/config/riscv/riscv-vector-switch.def | 105 ++--
gcc/config/riscv/riscv.cc | 12 +-
gcc/config/riscv/riscv.md | 14 +-
gcc/config/riscv/vector-iterators.md | 571 +++++++++++-------
gcc/config/riscv/vector.md | 233 +++++--
.../gcc.target/riscv/rvv/base/pr108185-4.c | 2 +-
.../gcc.target/riscv/rvv/base/spill-1.c | 2 +-
.../gcc.target/riscv/rvv/base/spill-11.c | 2 +-
.../gcc.target/riscv/rvv/base/spill-2.c | 2 +-
.../gcc.target/riscv/rvv/base/spill-3.c | 2 +-
.../gcc.target/riscv/rvv/base/spill-5.c | 2 +-
.../gcc.target/riscv/rvv/base/spill-9.c | 2 +-
16 files changed, 783 insertions(+), 455 deletions(-)
Comments
Committed to trunk, thanks!
On Wed, Apr 19, 2023 at 8:34 PM <juzhe.zhong@rivai.ai> wrote:
>
> From: Juzhe-Zhong <juzhe.zhong@rivai.ai>
>
> RISC-V has provide different VLEN configuration by different ISA
> extension like `zve32x`, `zve64x` and `v`
> zve32x just guarantee the minimal VLEN is 32 bits,
> zve64x guarantee the minimal VLEN is 64 bits,
> and v guarantee the minimal VLEN is 128 bits,
>
> Current status (without this patch):
>
> Zve32x: Mode for one vector register mode is VNx1SImode and VNx1DImode
> is invalid mode
> - one vector register could hold 1 + 1x SImode where x is 0~n, so it
> might hold just one SI
>
> Zve64x: Mode for one vector register mode is VNx1DImode or VNx2SImode
> - one vector register could hold 1 + 1x DImode where x is 0~n, so it
> might hold just one DI.
> - one vector register could hold 2 + 2x SImode where x is 0~n, so it
> might hold just two SI.
>
> However `v` extension guarantees the minimal VLEN is 128 bits.
>
> We introduce another type/mode mapping for this configure:
>
> v: Mode for one vector register mode is VNx2DImode or VNx4SImode
> - one vector register could hold 2 + 2x DImode where x is 0~n, so it
> will hold at least two DI
> - one vector register could hold 4 + 4x SImode where x is 0~n, so it
> will hold at least four DI
>
> This patch model the mode more precisely for the RVV, and help some
> middle-end optimization that assume number of element must be a
> multiple of two.
>
> gcc/ChangeLog:
>
> * config/riscv/riscv-modes.def (FLOAT_MODE): Add chunk 128 support.
> (VECTOR_BOOL_MODE): Ditto.
> (ADJUST_NUNITS): Ditto.
> (ADJUST_ALIGNMENT): Ditto.
> (ADJUST_BYTESIZE): Ditto.
> (ADJUST_PRECISION): Ditto.
> (RVV_MODES): Ditto.
> (VECTOR_MODE_WITH_PREFIX): Ditto.
> * config/riscv/riscv-v.cc (ENTRY): Ditto.
> (get_vlmul): Ditto.
> (get_ratio): Ditto.
> * config/riscv/riscv-vector-builtins.cc (DEF_RVV_TYPE): Ditto.
> * config/riscv/riscv-vector-builtins.def (DEF_RVV_TYPE): Ditto.
> (vbool64_t): Ditto.
> (vbool32_t): Ditto.
> (vbool16_t): Ditto.
> (vbool8_t): Ditto.
> (vbool4_t): Ditto.
> (vbool2_t): Ditto.
> (vbool1_t): Ditto.
> (vint8mf8_t): Ditto.
> (vuint8mf8_t): Ditto.
> (vint8mf4_t): Ditto.
> (vuint8mf4_t): Ditto.
> (vint8mf2_t): Ditto.
> (vuint8mf2_t): Ditto.
> (vint8m1_t): Ditto.
> (vuint8m1_t): Ditto.
> (vint8m2_t): Ditto.
> (vuint8m2_t): Ditto.
> (vint8m4_t): Ditto.
> (vuint8m4_t): Ditto.
> (vint8m8_t): Ditto.
> (vuint8m8_t): Ditto.
> (vint16mf4_t): Ditto.
> (vuint16mf4_t): Ditto.
> (vint16mf2_t): Ditto.
> (vuint16mf2_t): Ditto.
> (vint16m1_t): Ditto.
> (vuint16m1_t): Ditto.
> (vint16m2_t): Ditto.
> (vuint16m2_t): Ditto.
> (vint16m4_t): Ditto.
> (vuint16m4_t): Ditto.
> (vint16m8_t): Ditto.
> (vuint16m8_t): Ditto.
> (vint32mf2_t): Ditto.
> (vuint32mf2_t): Ditto.
> (vint32m1_t): Ditto.
> (vuint32m1_t): Ditto.
> (vint32m2_t): Ditto.
> (vuint32m2_t): Ditto.
> (vint32m4_t): Ditto.
> (vuint32m4_t): Ditto.
> (vint32m8_t): Ditto.
> (vuint32m8_t): Ditto.
> (vint64m1_t): Ditto.
> (vuint64m1_t): Ditto.
> (vint64m2_t): Ditto.
> (vuint64m2_t): Ditto.
> (vint64m4_t): Ditto.
> (vuint64m4_t): Ditto.
> (vint64m8_t): Ditto.
> (vuint64m8_t): Ditto.
> (vfloat32mf2_t): Ditto.
> (vfloat32m1_t): Ditto.
> (vfloat32m2_t): Ditto.
> (vfloat32m4_t): Ditto.
> (vfloat32m8_t): Ditto.
> (vfloat64m1_t): Ditto.
> (vfloat64m2_t): Ditto.
> (vfloat64m4_t): Ditto.
> (vfloat64m8_t): Ditto.
> * config/riscv/riscv-vector-switch.def (ENTRY): Ditto.
> * config/riscv/riscv.cc (riscv_legitimize_poly_move): Ditto.
> (riscv_convert_vector_bits): Ditto.
> * config/riscv/riscv.md:
> * config/riscv/vector-iterators.md:
> * config/riscv/vector.md (@pred_indexed_<order>store<VNX32_QH:mode><VNX32_QHI:mode>): Ditto.
> (@pred_indexed_<order>store<VNX32_QHS:mode><VNX32_QHSI:mode>): Ditto.
> (@pred_indexed_<order>store<VNX64_Q:mode><VNX64_Q:mode>): Ditto.
> (@pred_indexed_<order>store<VNX64_QH:mode><VNX64_QHI:mode>): Ditto.
> (@pred_indexed_<order>store<VNX128_Q:mode><VNX128_Q:mode>): Ditto.
> (@pred_reduc_<reduc><mode><vlmul1_zve64>): Ditto.
> (@pred_widen_reduc_plus<v_su><mode><vwlmul1_zve64>): Ditto.
> (@pred_reduc_plus<order><mode><vlmul1_zve64>): Ditto.
> (@pred_widen_reduc_plus<order><mode><vwlmul1_zve64>): Ditto.
>
> gcc/testsuite/ChangeLog:
>
> * gcc.target/riscv/rvv/base/pr108185-4.c: Adapt testcase.
> * gcc.target/riscv/rvv/base/spill-1.c: Ditto.
> * gcc.target/riscv/rvv/base/spill-11.c: Ditto.
> * gcc.target/riscv/rvv/base/spill-2.c: Ditto.
> * gcc.target/riscv/rvv/base/spill-3.c: Ditto.
> * gcc.target/riscv/rvv/base/spill-5.c: Ditto.
> * gcc.target/riscv/rvv/base/spill-9.c: Ditto.
> ---
> gcc/config/riscv/riscv-modes.def | 89 +--
> gcc/config/riscv/riscv-v.cc | 17 +-
> gcc/config/riscv/riscv-vector-builtins.cc | 11 +-
> gcc/config/riscv/riscv-vector-builtins.def | 172 +++---
> gcc/config/riscv/riscv-vector-switch.def | 105 ++--
> gcc/config/riscv/riscv.cc | 12 +-
> gcc/config/riscv/riscv.md | 14 +-
> gcc/config/riscv/vector-iterators.md | 571 +++++++++++-------
> gcc/config/riscv/vector.md | 233 +++++--
> .../gcc.target/riscv/rvv/base/pr108185-4.c | 2 +-
> .../gcc.target/riscv/rvv/base/spill-1.c | 2 +-
> .../gcc.target/riscv/rvv/base/spill-11.c | 2 +-
> .../gcc.target/riscv/rvv/base/spill-2.c | 2 +-
> .../gcc.target/riscv/rvv/base/spill-3.c | 2 +-
> .../gcc.target/riscv/rvv/base/spill-5.c | 2 +-
> .../gcc.target/riscv/rvv/base/spill-9.c | 2 +-
> 16 files changed, 783 insertions(+), 455 deletions(-)
>
> diff --git a/gcc/config/riscv/riscv-modes.def b/gcc/config/riscv/riscv-modes.def
> index 4cf7cf8b1c6..b1669609eec 100644
> --- a/gcc/config/riscv/riscv-modes.def
> +++ b/gcc/config/riscv/riscv-modes.def
> @@ -27,15 +27,16 @@ FLOAT_MODE (TF, 16, ieee_quad_format);
> /* Encode the ratio of SEW/LMUL into the mask types. There are the following
> * mask types. */
>
> -/* | Mode | MIN_VLEN = 32 | MIN_VLEN = 64 |
> - | | SEW/LMUL | SEW/LMUL |
> - | VNx1BI | 32 | 64 |
> - | VNx2BI | 16 | 32 |
> - | VNx4BI | 8 | 16 |
> - | VNx8BI | 4 | 8 |
> - | VNx16BI | 2 | 4 |
> - | VNx32BI | 1 | 2 |
> - | VNx64BI | N/A | 1 | */
> +/* | Mode | MIN_VLEN = 32 | MIN_VLEN = 64 | MIN_VLEN = 128 |
> + | | SEW/LMUL | SEW/LMUL | SEW/LMUL |
> + | VNx1BI | 32 | 64 | 128 |
> + | VNx2BI | 16 | 32 | 64 |
> + | VNx4BI | 8 | 16 | 32 |
> + | VNx8BI | 4 | 8 | 16 |
> + | VNx16BI | 2 | 4 | 8 |
> + | VNx32BI | 1 | 2 | 4 |
> + | VNx64BI | N/A | 1 | 2 |
> + | VNx128BI | N/A | N/A | 1 | */
>
> /* For RVV modes, each boolean value occupies 1-bit.
> 4th argument is specify the minmial possible size of the vector mode,
> @@ -47,6 +48,7 @@ VECTOR_BOOL_MODE (VNx8BI, 8, BI, 1);
> VECTOR_BOOL_MODE (VNx16BI, 16, BI, 2);
> VECTOR_BOOL_MODE (VNx32BI, 32, BI, 4);
> VECTOR_BOOL_MODE (VNx64BI, 64, BI, 8);
> +VECTOR_BOOL_MODE (VNx128BI, 128, BI, 16);
>
> ADJUST_NUNITS (VNx1BI, riscv_v_adjust_nunits (VNx1BImode, 1));
> ADJUST_NUNITS (VNx2BI, riscv_v_adjust_nunits (VNx2BImode, 2));
> @@ -55,6 +57,7 @@ ADJUST_NUNITS (VNx8BI, riscv_v_adjust_nunits (VNx8BImode, 8));
> ADJUST_NUNITS (VNx16BI, riscv_v_adjust_nunits (VNx16BImode, 16));
> ADJUST_NUNITS (VNx32BI, riscv_v_adjust_nunits (VNx32BImode, 32));
> ADJUST_NUNITS (VNx64BI, riscv_v_adjust_nunits (VNx64BImode, 64));
> +ADJUST_NUNITS (VNx128BI, riscv_v_adjust_nunits (VNx128BImode, 128));
>
> ADJUST_ALIGNMENT (VNx1BI, 1);
> ADJUST_ALIGNMENT (VNx2BI, 1);
> @@ -63,6 +66,7 @@ ADJUST_ALIGNMENT (VNx8BI, 1);
> ADJUST_ALIGNMENT (VNx16BI, 1);
> ADJUST_ALIGNMENT (VNx32BI, 1);
> ADJUST_ALIGNMENT (VNx64BI, 1);
> +ADJUST_ALIGNMENT (VNx128BI, 1);
>
> ADJUST_BYTESIZE (VNx1BI, riscv_v_adjust_bytesize (VNx1BImode, 1));
> ADJUST_BYTESIZE (VNx2BI, riscv_v_adjust_bytesize (VNx2BImode, 1));
> @@ -71,6 +75,7 @@ ADJUST_BYTESIZE (VNx8BI, riscv_v_adjust_bytesize (VNx8BImode, 1));
> ADJUST_BYTESIZE (VNx16BI, riscv_v_adjust_bytesize (VNx16BImode, 2));
> ADJUST_BYTESIZE (VNx32BI, riscv_v_adjust_bytesize (VNx32BImode, 4));
> ADJUST_BYTESIZE (VNx64BI, riscv_v_adjust_bytesize (VNx64BImode, 8));
> +ADJUST_BYTESIZE (VNx128BI, riscv_v_adjust_bytesize (VNx128BImode, 16));
>
> ADJUST_PRECISION (VNx1BI, riscv_v_adjust_precision (VNx1BImode, 1));
> ADJUST_PRECISION (VNx2BI, riscv_v_adjust_precision (VNx2BImode, 2));
> @@ -79,38 +84,47 @@ ADJUST_PRECISION (VNx8BI, riscv_v_adjust_precision (VNx8BImode, 8));
> ADJUST_PRECISION (VNx16BI, riscv_v_adjust_precision (VNx16BImode, 16));
> ADJUST_PRECISION (VNx32BI, riscv_v_adjust_precision (VNx32BImode, 32));
> ADJUST_PRECISION (VNx64BI, riscv_v_adjust_precision (VNx64BImode, 64));
> +ADJUST_PRECISION (VNx128BI, riscv_v_adjust_precision (VNx128BImode, 128));
>
> /*
> - | Mode | MIN_VLEN=32 | MIN_VLEN=32 | MIN_VLEN=64 | MIN_VLEN=64 |
> - | | LMUL | SEW/LMUL | LMUL | SEW/LMUL |
> - | VNx1QI | MF4 | 32 | MF8 | 64 |
> - | VNx2QI | MF2 | 16 | MF4 | 32 |
> - | VNx4QI | M1 | 8 | MF2 | 16 |
> - | VNx8QI | M2 | 4 | M1 | 8 |
> - | VNx16QI | M4 | 2 | M2 | 4 |
> - | VNx32QI | M8 | 1 | M4 | 2 |
> - | VNx64QI | N/A | N/A | M8 | 1 |
> - | VNx1(HI|HF) | MF2 | 32 | MF4 | 64 |
> - | VNx2(HI|HF) | M1 | 16 | MF2 | 32 |
> - | VNx4(HI|HF) | M2 | 8 | M1 | 16 |
> - | VNx8(HI|HF) | M4 | 4 | M2 | 8 |
> - | VNx16(HI|HF)| M8 | 2 | M4 | 4 |
> - | VNx32(HI|HF)| N/A | N/A | M8 | 2 |
> - | VNx1(SI|SF) | M1 | 32 | MF2 | 64 |
> - | VNx2(SI|SF) | M2 | 16 | M1 | 32 |
> - | VNx4(SI|SF) | M4 | 8 | M2 | 16 |
> - | VNx8(SI|SF) | M8 | 4 | M4 | 8 |
> - | VNx16(SI|SF)| N/A | N/A | M8 | 4 |
> - | VNx1(DI|DF) | N/A | N/A | M1 | 64 |
> - | VNx2(DI|DF) | N/A | N/A | M2 | 32 |
> - | VNx4(DI|DF) | N/A | N/A | M4 | 16 |
> - | VNx8(DI|DF) | N/A | N/A | M8 | 8 |
> + | Mode | MIN_VLEN=32 | MIN_VLEN=32 | MIN_VLEN=64 | MIN_VLEN=64 | MIN_VLEN=128 | MIN_VLEN=128 |
> + | | LMUL | SEW/LMUL | LMUL | SEW/LMUL | LMUL | SEW/LMUL |
> + | VNx1QI | MF4 | 32 | MF8 | 64 | N/A | N/A |
> + | VNx2QI | MF2 | 16 | MF4 | 32 | MF8 | 64 |
> + | VNx4QI | M1 | 8 | MF2 | 16 | MF4 | 32 |
> + | VNx8QI | M2 | 4 | M1 | 8 | MF2 | 16 |
> + | VNx16QI | M4 | 2 | M2 | 4 | M1 | 8 |
> + | VNx32QI | M8 | 1 | M4 | 2 | M2 | 4 |
> + | VNx64QI | N/A | N/A | M8 | 1 | M4 | 2 |
> + | VNx128QI | N/A | N/A | N/A | N/A | M8 | 1 |
> + | VNx1(HI|HF) | MF2 | 32 | MF4 | 64 | N/A | N/A |
> + | VNx2(HI|HF) | M1 | 16 | MF2 | 32 | MF4 | 64 |
> + | VNx4(HI|HF) | M2 | 8 | M1 | 16 | MF2 | 32 |
> + | VNx8(HI|HF) | M4 | 4 | M2 | 8 | M1 | 16 |
> + | VNx16(HI|HF)| M8 | 2 | M4 | 4 | M2 | 8 |
> + | VNx32(HI|HF)| N/A | N/A | M8 | 2 | M4 | 4 |
> + | VNx64(HI|HF)| N/A | N/A | N/A | N/A | M8 | 2 |
> + | VNx1(SI|SF) | M1 | 32 | MF2 | 64 | MF2 | 64 |
> + | VNx2(SI|SF) | M2 | 16 | M1 | 32 | M1 | 32 |
> + | VNx4(SI|SF) | M4 | 8 | M2 | 16 | M2 | 16 |
> + | VNx8(SI|SF) | M8 | 4 | M4 | 8 | M4 | 8 |
> + | VNx16(SI|SF)| N/A | N/A | M8 | 4 | M8 | 4 |
> + | VNx1(DI|DF) | N/A | N/A | M1 | 64 | N/A | N/A |
> + | VNx2(DI|DF) | N/A | N/A | M2 | 32 | M1 | 64 |
> + | VNx4(DI|DF) | N/A | N/A | M4 | 16 | M2 | 32 |
> + | VNx8(DI|DF) | N/A | N/A | M8 | 8 | M4 | 16 |
> + | VNx16(DI|DF)| N/A | N/A | N/A | N/A | M8 | 8 |
> */
>
> /* Define RVV modes whose sizes are multiples of 64-bit chunks. */
> #define RVV_MODES(NVECS, VB, VH, VS, VD) \
> - VECTOR_MODES_WITH_PREFIX (VNx, INT, 8 * NVECS, 0); \
> - VECTOR_MODES_WITH_PREFIX (VNx, FLOAT, 8 * NVECS, 0); \
> + VECTOR_MODE_WITH_PREFIX (VNx, INT, QI, 8 * NVECS, 0); \
> + VECTOR_MODE_WITH_PREFIX (VNx, INT, HI, 4 * NVECS, 0); \
> + VECTOR_MODE_WITH_PREFIX (VNx, FLOAT, HF, 4 * NVECS, 0); \
> + VECTOR_MODE_WITH_PREFIX (VNx, INT, SI, 2 * NVECS, 0); \
> + VECTOR_MODE_WITH_PREFIX (VNx, FLOAT, SF, 2 * NVECS, 0); \
> + VECTOR_MODE_WITH_PREFIX (VNx, INT, DI, NVECS, 0); \
> + VECTOR_MODE_WITH_PREFIX (VNx, FLOAT, DF, NVECS, 0); \
> \
> ADJUST_NUNITS (VB##QI, riscv_v_adjust_nunits (VB##QI##mode, NVECS * 8)); \
> ADJUST_NUNITS (VH##HI, riscv_v_adjust_nunits (VH##HI##mode, NVECS * 4)); \
> @@ -128,14 +142,11 @@ ADJUST_PRECISION (VNx64BI, riscv_v_adjust_precision (VNx64BImode, 64));
> ADJUST_ALIGNMENT (VS##SF, 4); \
> ADJUST_ALIGNMENT (VD##DF, 8);
>
> -/* 'VECTOR_MODES_WITH_PREFIX' does not allow ncomponents < 2.
> - So we use 'VECTOR_MODE_WITH_PREFIX' to define VNx1DImode and VNx1DFmode. */
> -VECTOR_MODE_WITH_PREFIX (VNx, INT, DI, 1, 0);
> -VECTOR_MODE_WITH_PREFIX (VNx, FLOAT, DF, 1, 0);
> RVV_MODES (1, VNx8, VNx4, VNx2, VNx1)
> RVV_MODES (2, VNx16, VNx8, VNx4, VNx2)
> RVV_MODES (4, VNx32, VNx16, VNx8, VNx4)
> RVV_MODES (8, VNx64, VNx32, VNx16, VNx8)
> +RVV_MODES (16, VNx128, VNx64, VNx32, VNx16)
>
> VECTOR_MODES_WITH_PREFIX (VNx, INT, 4, 0);
> VECTOR_MODES_WITH_PREFIX (VNx, FLOAT, 4, 0);
> diff --git a/gcc/config/riscv/riscv-v.cc b/gcc/config/riscv/riscv-v.cc
> index 392f5d02e17..99c414cc910 100644
> --- a/gcc/config/riscv/riscv-v.cc
> +++ b/gcc/config/riscv/riscv-v.cc
> @@ -340,14 +340,19 @@ struct mode_vtype_group
> uint8_t ratio_for_min_vlen32[NUM_MACHINE_MODES];
> enum vlmul_type vlmul_for_min_vlen64[NUM_MACHINE_MODES];
> uint8_t ratio_for_min_vlen64[NUM_MACHINE_MODES];
> + enum vlmul_type vlmul_for_for_vlen128[NUM_MACHINE_MODES];
> + uint8_t ratio_for_for_vlen128[NUM_MACHINE_MODES];
> mode_vtype_group ()
> {
> #define ENTRY(MODE, REQUIREMENT, VLMUL_FOR_MIN_VLEN32, RATIO_FOR_MIN_VLEN32, \
> - VLMUL_FOR_MIN_VLEN64, RATIO_FOR_MIN_VLEN64) \
> + VLMUL_FOR_MIN_VLEN64, RATIO_FOR_MIN_VLEN64, \
> + VLMUL_FOR_FOR_VLEN128, RATIO_FOR_FOR_VLEN128) \
> vlmul_for_min_vlen32[MODE##mode] = VLMUL_FOR_MIN_VLEN32; \
> ratio_for_min_vlen32[MODE##mode] = RATIO_FOR_MIN_VLEN32; \
> vlmul_for_min_vlen64[MODE##mode] = VLMUL_FOR_MIN_VLEN64; \
> - ratio_for_min_vlen64[MODE##mode] = RATIO_FOR_MIN_VLEN64;
> + ratio_for_min_vlen64[MODE##mode] = RATIO_FOR_MIN_VLEN64; \
> + vlmul_for_for_vlen128[MODE##mode] = VLMUL_FOR_FOR_VLEN128; \
> + ratio_for_for_vlen128[MODE##mode] = RATIO_FOR_FOR_VLEN128;
> #include "riscv-vector-switch.def"
> }
> };
> @@ -358,7 +363,9 @@ static mode_vtype_group mode_vtype_infos;
> enum vlmul_type
> get_vlmul (machine_mode mode)
> {
> - if (TARGET_MIN_VLEN == 32)
> + if (TARGET_MIN_VLEN >= 128)
> + return mode_vtype_infos.vlmul_for_for_vlen128[mode];
> + else if (TARGET_MIN_VLEN == 32)
> return mode_vtype_infos.vlmul_for_min_vlen32[mode];
> else
> return mode_vtype_infos.vlmul_for_min_vlen64[mode];
> @@ -368,7 +375,9 @@ get_vlmul (machine_mode mode)
> unsigned int
> get_ratio (machine_mode mode)
> {
> - if (TARGET_MIN_VLEN == 32)
> + if (TARGET_MIN_VLEN >= 128)
> + return mode_vtype_infos.ratio_for_for_vlen128[mode];
> + else if (TARGET_MIN_VLEN == 32)
> return mode_vtype_infos.ratio_for_min_vlen32[mode];
> else
> return mode_vtype_infos.ratio_for_min_vlen64[mode];
> diff --git a/gcc/config/riscv/riscv-vector-builtins.cc b/gcc/config/riscv/riscv-vector-builtins.cc
> index 01cea23d3e6..434bd8e157b 100644
> --- a/gcc/config/riscv/riscv-vector-builtins.cc
> +++ b/gcc/config/riscv/riscv-vector-builtins.cc
> @@ -107,7 +107,8 @@ const char *const operand_suffixes[NUM_OP_TYPES] = {
>
> /* Static information about type suffix for each RVV type. */
> const rvv_builtin_suffixes type_suffixes[NUM_VECTOR_TYPES + 1] = {
> -#define DEF_RVV_TYPE(NAME, NCHARS, ABI_NAME, SCALAR_TYPE, VECTOR_MODE, \
> +#define DEF_RVV_TYPE(NAME, NCHARS, ABI_NAME, SCALAR_TYPE, \
> + VECTOR_MODE_MIN_VLEN_128, VECTOR_MODE_MIN_VLEN_64, \
> VECTOR_MODE_MIN_VLEN_32, VECTOR_SUFFIX, SCALAR_SUFFIX, \
> VSETVL_SUFFIX) \
> {#VECTOR_SUFFIX, #SCALAR_SUFFIX, #VSETVL_SUFFIX},
> @@ -2350,10 +2351,12 @@ register_builtin_types ()
> tree int64_type_node = get_typenode_from_name (INT64_TYPE);
>
> machine_mode mode;
> -#define DEF_RVV_TYPE(NAME, NCHARS, ABI_NAME, SCALAR_TYPE, VECTOR_MODE, \
> +#define DEF_RVV_TYPE(NAME, NCHARS, ABI_NAME, SCALAR_TYPE, \
> + VECTOR_MODE_MIN_VLEN_128, VECTOR_MODE_MIN_VLEN_64, \
> VECTOR_MODE_MIN_VLEN_32, ARGS...) \
> - mode = TARGET_MIN_VLEN > 32 ? VECTOR_MODE##mode \
> - : VECTOR_MODE_MIN_VLEN_32##mode; \
> + mode = TARGET_MIN_VLEN >= 128 ? VECTOR_MODE_MIN_VLEN_128##mode \
> + : TARGET_MIN_VLEN >= 64 ? VECTOR_MODE_MIN_VLEN_64##mode \
> + : VECTOR_MODE_MIN_VLEN_32##mode; \
> register_builtin_type (VECTOR_TYPE_##NAME, SCALAR_TYPE##_type_node, mode);
> #include "riscv-vector-builtins.def"
> }
> diff --git a/gcc/config/riscv/riscv-vector-builtins.def b/gcc/config/riscv/riscv-vector-builtins.def
> index 563ad355342..64c09b5d8cb 100644
> --- a/gcc/config/riscv/riscv-vector-builtins.def
> +++ b/gcc/config/riscv/riscv-vector-builtins.def
> @@ -42,7 +42,8 @@ along with GCC; see the file COPYING3. If not see
> */
>
> #ifndef DEF_RVV_TYPE
> -#define DEF_RVV_TYPE(NAME, NCHARS, ABI_NAME, SCALAR_TYPE, VECTOR_MODE, \
> +#define DEF_RVV_TYPE(NAME, NCHARS, ABI_NAME, SCALAR_TYPE, \
> + VECTOR_MODE_MIN_VLEN_128, VECTOR_MODE_MIN_VLEN_64, \
> VECTOR_MODE_MIN_VLEN_32, VECTOR_SUFFIX, SCALAR_SUFFIX, \
> VSETVL_SUFFIX)
> #endif
> @@ -79,212 +80,247 @@ along with GCC; see the file COPYING3. If not see
> #endif
>
> /* SEW/LMUL = 64:
> - Only enable when TARGET_MIN_VLEN > 32 and machine mode = VNx1BImode. */
> -DEF_RVV_TYPE (vbool64_t, 14, __rvv_bool64_t, boolean, VNx1BI, VOID, _b64, , )
> + Only enable when TARGET_MIN_VLEN > 32.
> + Machine mode = VNx1BImode when TARGET_MIN_VLEN < 128.
> + Machine mode = VNx2BImode when TARGET_MIN_VLEN >= 128. */
> +DEF_RVV_TYPE (vbool64_t, 14, __rvv_bool64_t, boolean, VNx2BI, VNx1BI, VOID, _b64, , )
> /* SEW/LMUL = 32:
> Machine mode = VNx2BImode when TARGET_MIN_VLEN > 32.
> Machine mode = VNx1BImode when TARGET_MIN_VLEN = 32. */
> -DEF_RVV_TYPE (vbool32_t, 14, __rvv_bool32_t, boolean, VNx2BI, VNx1BI, _b32, , )
> +DEF_RVV_TYPE (vbool32_t, 14, __rvv_bool32_t, boolean, VNx4BI, VNx2BI, VNx1BI, _b32, , )
> /* SEW/LMUL = 16:
> + Machine mode = VNx8BImode when TARGET_MIN_VLEN >= 128.
> Machine mode = VNx2BImode when TARGET_MIN_VLEN = 32.
> Machine mode = VNx4BImode when TARGET_MIN_VLEN > 32. */
> -DEF_RVV_TYPE (vbool16_t, 14, __rvv_bool16_t, boolean, VNx4BI, VNx2BI, _b16, , )
> +DEF_RVV_TYPE (vbool16_t, 14, __rvv_bool16_t, boolean, VNx8BI, VNx4BI, VNx2BI, _b16, , )
> /* SEW/LMUL = 8:
> + Machine mode = VNx16BImode when TARGET_MIN_VLEN >= 128.
> Machine mode = VNx8BImode when TARGET_MIN_VLEN > 32.
> Machine mode = VNx4BImode when TARGET_MIN_VLEN = 32. */
> -DEF_RVV_TYPE (vbool8_t, 13, __rvv_bool8_t, boolean, VNx8BI, VNx4BI, _b8, , )
> +DEF_RVV_TYPE (vbool8_t, 13, __rvv_bool8_t, boolean, VNx16BI, VNx8BI, VNx4BI, _b8, , )
> /* SEW/LMUL = 4:
> + Machine mode = VNx32BImode when TARGET_MIN_VLEN >= 128.
> Machine mode = VNx16BImode when TARGET_MIN_VLEN > 32.
> Machine mode = VNx8BImode when TARGET_MIN_VLEN = 32. */
> -DEF_RVV_TYPE (vbool4_t, 13, __rvv_bool4_t, boolean, VNx16BI, VNx8BI, _b4, , )
> +DEF_RVV_TYPE (vbool4_t, 13, __rvv_bool4_t, boolean, VNx32BI, VNx16BI, VNx8BI, _b4, , )
> /* SEW/LMUL = 2:
> + Machine mode = VNx64BImode when TARGET_MIN_VLEN >= 128.
> Machine mode = VNx32BImode when TARGET_MIN_VLEN > 32.
> Machine mode = VNx16BImode when TARGET_MIN_VLEN = 32. */
> -DEF_RVV_TYPE (vbool2_t, 13, __rvv_bool2_t, boolean, VNx32BI, VNx16BI, _b2, , )
> +DEF_RVV_TYPE (vbool2_t, 13, __rvv_bool2_t, boolean, VNx64BI, VNx32BI, VNx16BI, _b2, , )
> /* SEW/LMUL = 1:
> + Machine mode = VNx128BImode when TARGET_MIN_VLEN >= 128.
> Machine mode = VNx64BImode when TARGET_MIN_VLEN > 32.
> Machine mode = VNx32BImode when TARGET_MIN_VLEN = 32. */
> -DEF_RVV_TYPE (vbool1_t, 13, __rvv_bool1_t, boolean, VNx64BI, VNx32BI, _b1, , )
> +DEF_RVV_TYPE (vbool1_t, 13, __rvv_bool1_t, boolean, VNx128BI, VNx64BI, VNx32BI, _b1, , )
>
> /* LMUL = 1/8:
> - Only enble when TARGET_MIN_VLEN > 32 and machine mode = VNx1QImode. */
> -DEF_RVV_TYPE (vint8mf8_t, 15, __rvv_int8mf8_t, int8, VNx1QI, VOID, _i8mf8, _i8,
> + Only enble when TARGET_MIN_VLEN > 32.
> + Machine mode = VNx1QImode when TARGET_MIN_VLEN < 128.
> + Machine mode = VNx2QImode when TARGET_MIN_VLEN >= 128. */
> +DEF_RVV_TYPE (vint8mf8_t, 15, __rvv_int8mf8_t, int8, VNx2QI, VNx1QI, VOID, _i8mf8, _i8,
> _e8mf8)
> -DEF_RVV_TYPE (vuint8mf8_t, 16, __rvv_uint8mf8_t, uint8, VNx1QI, VOID, _u8mf8,
> +DEF_RVV_TYPE (vuint8mf8_t, 16, __rvv_uint8mf8_t, uint8, VNx2QI, VNx1QI, VOID, _u8mf8,
> _u8, _e8mf8)
> /* LMUL = 1/4:
> + Machine mode = VNx4QImode when TARGET_MIN_VLEN >= 128.
> Machine mode = VNx2QImode when TARGET_MIN_VLEN > 32.
> Machine mode = VNx1QImode when TARGET_MIN_VLEN = 32. */
> -DEF_RVV_TYPE (vint8mf4_t, 15, __rvv_int8mf4_t, int8, VNx2QI, VNx1QI, _i8mf4,
> +DEF_RVV_TYPE (vint8mf4_t, 15, __rvv_int8mf4_t, int8, VNx4QI, VNx2QI, VNx1QI, _i8mf4,
> _i8, _e8mf4)
> -DEF_RVV_TYPE (vuint8mf4_t, 16, __rvv_uint8mf4_t, uint8, VNx2QI, VNx1QI, _u8mf4,
> +DEF_RVV_TYPE (vuint8mf4_t, 16, __rvv_uint8mf4_t, uint8, VNx4QI, VNx2QI, VNx1QI, _u8mf4,
> _u8, _e8mf4)
> /* LMUL = 1/2:
> + Machine mode = VNx8QImode when TARGET_MIN_VLEN >= 128.
> Machine mode = VNx4QImode when TARGET_MIN_VLEN > 32.
> Machine mode = VNx2QImode when TARGET_MIN_VLEN = 32. */
> -DEF_RVV_TYPE (vint8mf2_t, 15, __rvv_int8mf2_t, int8, VNx4QI, VNx2QI, _i8mf2,
> +DEF_RVV_TYPE (vint8mf2_t, 15, __rvv_int8mf2_t, int8, VNx8QI, VNx4QI, VNx2QI, _i8mf2,
> _i8, _e8mf2)
> -DEF_RVV_TYPE (vuint8mf2_t, 16, __rvv_uint8mf2_t, uint8, VNx4QI, VNx2QI, _u8mf2,
> +DEF_RVV_TYPE (vuint8mf2_t, 16, __rvv_uint8mf2_t, uint8, VNx8QI, VNx4QI, VNx2QI, _u8mf2,
> _u8, _e8mf2)
> /* LMUL = 1:
> + Machine mode = VNx16QImode when TARGET_MIN_VLEN >= 128.
> Machine mode = VNx8QImode when TARGET_MIN_VLEN > 32.
> Machine mode = VNx4QImode when TARGET_MIN_VLEN = 32. */
> -DEF_RVV_TYPE (vint8m1_t, 14, __rvv_int8m1_t, int8, VNx8QI, VNx4QI, _i8m1, _i8,
> +DEF_RVV_TYPE (vint8m1_t, 14, __rvv_int8m1_t, int8, VNx16QI, VNx8QI, VNx4QI, _i8m1, _i8,
> _e8m1)
> -DEF_RVV_TYPE (vuint8m1_t, 15, __rvv_uint8m1_t, uint8, VNx8QI, VNx4QI, _u8m1,
> +DEF_RVV_TYPE (vuint8m1_t, 15, __rvv_uint8m1_t, uint8, VNx16QI, VNx8QI, VNx4QI, _u8m1,
> _u8, _e8m1)
> /* LMUL = 2:
> + Machine mode = VNx32QImode when TARGET_MIN_VLEN >= 128.
> Machine mode = VNx16QImode when TARGET_MIN_VLEN > 32.
> Machine mode = VNx8QImode when TARGET_MIN_VLEN = 32. */
> -DEF_RVV_TYPE (vint8m2_t, 14, __rvv_int8m2_t, int8, VNx16QI, VNx8QI, _i8m2, _i8,
> +DEF_RVV_TYPE (vint8m2_t, 14, __rvv_int8m2_t, int8, VNx32QI, VNx16QI, VNx8QI, _i8m2, _i8,
> _e8m2)
> -DEF_RVV_TYPE (vuint8m2_t, 15, __rvv_uint8m2_t, uint8, VNx16QI, VNx8QI, _u8m2,
> +DEF_RVV_TYPE (vuint8m2_t, 15, __rvv_uint8m2_t, uint8, VNx32QI, VNx16QI, VNx8QI, _u8m2,
> _u8, _e8m2)
> /* LMUL = 4:
> + Machine mode = VNx64QImode when TARGET_MIN_VLEN >= 128.
> Machine mode = VNx32QImode when TARGET_MIN_VLEN > 32.
> Machine mode = VNx16QImode when TARGET_MIN_VLEN = 32. */
> -DEF_RVV_TYPE (vint8m4_t, 14, __rvv_int8m4_t, int8, VNx32QI, VNx16QI, _i8m4, _i8,
> +DEF_RVV_TYPE (vint8m4_t, 14, __rvv_int8m4_t, int8, VNx64QI, VNx32QI, VNx16QI, _i8m4, _i8,
> _e8m4)
> -DEF_RVV_TYPE (vuint8m4_t, 15, __rvv_uint8m4_t, uint8, VNx32QI, VNx16QI, _u8m4,
> +DEF_RVV_TYPE (vuint8m4_t, 15, __rvv_uint8m4_t, uint8, VNx64QI, VNx32QI, VNx16QI, _u8m4,
> _u8, _e8m4)
> /* LMUL = 8:
> + Machine mode = VNx128QImode when TARGET_MIN_VLEN >= 128.
> Machine mode = VNx64QImode when TARGET_MIN_VLEN > 32.
> Machine mode = VNx32QImode when TARGET_MIN_VLEN = 32. */
> -DEF_RVV_TYPE (vint8m8_t, 14, __rvv_int8m8_t, int8, VNx64QI, VNx32QI, _i8m8, _i8,
> +DEF_RVV_TYPE (vint8m8_t, 14, __rvv_int8m8_t, int8, VNx128QI, VNx64QI, VNx32QI, _i8m8, _i8,
> _e8m8)
> -DEF_RVV_TYPE (vuint8m8_t, 15, __rvv_uint8m8_t, uint8, VNx64QI, VNx32QI, _u8m8,
> +DEF_RVV_TYPE (vuint8m8_t, 15, __rvv_uint8m8_t, uint8, VNx128QI, VNx64QI, VNx32QI, _u8m8,
> _u8, _e8m8)
>
> /* LMUL = 1/4:
> - Only enble when TARGET_MIN_VLEN > 32 and machine mode = VNx1HImode. */
> -DEF_RVV_TYPE (vint16mf4_t, 16, __rvv_int16mf4_t, int16, VNx1HI, VOID, _i16mf4,
> + Only enble when TARGET_MIN_VLEN > 32.
> + Machine mode = VNx1HImode when TARGET_MIN_VLEN < 128.
> + Machine mode = VNx2HImode when TARGET_MIN_VLEN >= 128. */
> +DEF_RVV_TYPE (vint16mf4_t, 16, __rvv_int16mf4_t, int16, VNx2HI, VNx1HI, VOID, _i16mf4,
> _i16, _e16mf4)
> -DEF_RVV_TYPE (vuint16mf4_t, 17, __rvv_uint16mf4_t, uint16, VNx1HI, VOID,
> +DEF_RVV_TYPE (vuint16mf4_t, 17, __rvv_uint16mf4_t, uint16, VNx2HI, VNx1HI, VOID,
> _u16mf4, _u16, _e16mf4)
> /* LMUL = 1/2:
> + Machine mode = VNx4HImode when TARGET_MIN_VLEN >= 128.
> Machine mode = VNx2HImode when TARGET_MIN_VLEN > 32.
> Machine mode = VNx1HImode when TARGET_MIN_VLEN = 32. */
> -DEF_RVV_TYPE (vint16mf2_t, 16, __rvv_int16mf2_t, int16, VNx2HI, VNx1HI, _i16mf2,
> +DEF_RVV_TYPE (vint16mf2_t, 16, __rvv_int16mf2_t, int16, VNx4HI, VNx2HI, VNx1HI, _i16mf2,
> _i16, _e16mf2)
> -DEF_RVV_TYPE (vuint16mf2_t, 17, __rvv_uint16mf2_t, uint16, VNx2HI, VNx1HI,
> +DEF_RVV_TYPE (vuint16mf2_t, 17, __rvv_uint16mf2_t, uint16, VNx4HI, VNx2HI, VNx1HI,
> _u16mf2, _u16, _e16mf2)
> /* LMUL = 1:
> + Machine mode = VNx8HImode when TARGET_MIN_VLEN >= 128.
> Machine mode = VNx4HImode when TARGET_MIN_VLEN > 32.
> Machine mode = VNx2HImode when TARGET_MIN_VLEN = 32. */
> -DEF_RVV_TYPE (vint16m1_t, 15, __rvv_int16m1_t, int16, VNx4HI, VNx2HI, _i16m1,
> +DEF_RVV_TYPE (vint16m1_t, 15, __rvv_int16m1_t, int16, VNx8HI, VNx4HI, VNx2HI, _i16m1,
> _i16, _e16m1)
> -DEF_RVV_TYPE (vuint16m1_t, 16, __rvv_uint16m1_t, uint16, VNx4HI, VNx2HI, _u16m1,
> +DEF_RVV_TYPE (vuint16m1_t, 16, __rvv_uint16m1_t, uint16, VNx8HI, VNx4HI, VNx2HI, _u16m1,
> _u16, _e16m1)
> /* LMUL = 2:
> + Machine mode = VNx16HImode when TARGET_MIN_VLEN >= 128.
> Machine mode = VNx8HImode when TARGET_MIN_VLEN > 32.
> Machine mode = VNx4HImode when TARGET_MIN_VLEN = 32. */
> -DEF_RVV_TYPE (vint16m2_t, 15, __rvv_int16m2_t, int16, VNx8HI, VNx4HI, _i16m2,
> +DEF_RVV_TYPE (vint16m2_t, 15, __rvv_int16m2_t, int16, VNx16HI, VNx8HI, VNx4HI, _i16m2,
> _i16, _e16m2)
> -DEF_RVV_TYPE (vuint16m2_t, 16, __rvv_uint16m2_t, uint16, VNx8HI, VNx4HI, _u16m2,
> +DEF_RVV_TYPE (vuint16m2_t, 16, __rvv_uint16m2_t, uint16, VNx16HI, VNx8HI, VNx4HI, _u16m2,
> _u16, _e16m2)
> /* LMUL = 4:
> + Machine mode = VNx32HImode when TARGET_MIN_VLEN >= 128.
> Machine mode = VNx16HImode when TARGET_MIN_VLEN > 32.
> Machine mode = VNx8HImode when TARGET_MIN_VLEN = 32. */
> -DEF_RVV_TYPE (vint16m4_t, 15, __rvv_int16m4_t, int16, VNx16HI, VNx8HI, _i16m4,
> +DEF_RVV_TYPE (vint16m4_t, 15, __rvv_int16m4_t, int16, VNx32HI, VNx16HI, VNx8HI, _i16m4,
> _i16, _e16m4)
> -DEF_RVV_TYPE (vuint16m4_t, 16, __rvv_uint16m4_t, uint16, VNx16HI, VNx8HI,
> +DEF_RVV_TYPE (vuint16m4_t, 16, __rvv_uint16m4_t, uint16, VNx32HI, VNx16HI, VNx8HI,
> _u16m4, _u16, _e16m4)
> /* LMUL = 8:
> + Machine mode = VNx64HImode when TARGET_MIN_VLEN >= 128.
> Machine mode = VNx32HImode when TARGET_MIN_VLEN > 32.
> Machine mode = VNx16HImode when TARGET_MIN_VLEN = 32. */
> -DEF_RVV_TYPE (vint16m8_t, 15, __rvv_int16m8_t, int16, VNx32HI, VNx16HI, _i16m8,
> +DEF_RVV_TYPE (vint16m8_t, 15, __rvv_int16m8_t, int16, VNx64HI, VNx32HI, VNx16HI, _i16m8,
> _i16, _e16m8)
> -DEF_RVV_TYPE (vuint16m8_t, 16, __rvv_uint16m8_t, uint16, VNx32HI, VNx16HI,
> +DEF_RVV_TYPE (vuint16m8_t, 16, __rvv_uint16m8_t, uint16, VNx64HI, VNx32HI, VNx16HI,
> _u16m8, _u16, _e16m8)
>
> /* LMUL = 1/2:
> - Only enble when TARGET_MIN_VLEN > 32 and machine mode = VNx1SImode. */
> -DEF_RVV_TYPE (vint32mf2_t, 16, __rvv_int32mf2_t, int32, VNx1SI, VOID, _i32mf2,
> + Only enble when TARGET_MIN_VLEN > 32.
> + Machine mode = VNx1SImode when TARGET_MIN_VLEN < 128.
> + Machine mode = VNx2SImode when TARGET_MIN_VLEN >= 128. */
> +DEF_RVV_TYPE (vint32mf2_t, 16, __rvv_int32mf2_t, int32, VNx2SI, VNx1SI, VOID, _i32mf2,
> _i32, _e32mf2)
> -DEF_RVV_TYPE (vuint32mf2_t, 17, __rvv_uint32mf2_t, uint32, VNx1SI, VOID,
> +DEF_RVV_TYPE (vuint32mf2_t, 17, __rvv_uint32mf2_t, uint32, VNx2SI, VNx1SI, VOID,
> _u32mf2, _u32, _e32mf2)
> /* LMUL = 1:
> + Machine mode = VNx4SImode when TARGET_MIN_VLEN >= 128.
> Machine mode = VNx2SImode when TARGET_MIN_VLEN > 32.
> Machine mode = VNx1SImode when TARGET_MIN_VLEN = 32. */
> -DEF_RVV_TYPE (vint32m1_t, 15, __rvv_int32m1_t, int32, VNx2SI, VNx1SI, _i32m1,
> +DEF_RVV_TYPE (vint32m1_t, 15, __rvv_int32m1_t, int32, VNx4SI, VNx2SI, VNx1SI, _i32m1,
> _i32, _e32m1)
> -DEF_RVV_TYPE (vuint32m1_t, 16, __rvv_uint32m1_t, uint32, VNx2SI, VNx1SI, _u32m1,
> +DEF_RVV_TYPE (vuint32m1_t, 16, __rvv_uint32m1_t, uint32, VNx4SI, VNx2SI, VNx1SI, _u32m1,
> _u32, _e32m1)
> /* LMUL = 2:
> + Machine mode = VNx8SImode when TARGET_MIN_VLEN >= 128.
> Machine mode = VNx4SImode when TARGET_MIN_VLEN > 32.
> Machine mode = VNx2SImode when TARGET_MIN_VLEN = 32. */
> -DEF_RVV_TYPE (vint32m2_t, 15, __rvv_int32m2_t, int32, VNx4SI, VNx2SI, _i32m2,
> +DEF_RVV_TYPE (vint32m2_t, 15, __rvv_int32m2_t, int32, VNx8SI, VNx4SI, VNx2SI, _i32m2,
> _i32, _e32m2)
> -DEF_RVV_TYPE (vuint32m2_t, 16, __rvv_uint32m2_t, uint32, VNx4SI, VNx2SI, _u32m2,
> +DEF_RVV_TYPE (vuint32m2_t, 16, __rvv_uint32m2_t, uint32, VNx8SI, VNx4SI, VNx2SI, _u32m2,
> _u32, _e32m2)
> /* LMUL = 4:
> + Machine mode = VNx16SImode when TARGET_MIN_VLEN >= 128.
> Machine mode = VNx8SImode when TARGET_MIN_VLEN > 32.
> Machine mode = VNx4SImode when TARGET_MIN_VLEN = 32. */
> -DEF_RVV_TYPE (vint32m4_t, 15, __rvv_int32m4_t, int32, VNx8SI, VNx4SI, _i32m4,
> +DEF_RVV_TYPE (vint32m4_t, 15, __rvv_int32m4_t, int32, VNx16SI, VNx8SI, VNx4SI, _i32m4,
> _i32, _e32m4)
> -DEF_RVV_TYPE (vuint32m4_t, 16, __rvv_uint32m4_t, uint32, VNx8SI, VNx4SI, _u32m4,
> +DEF_RVV_TYPE (vuint32m4_t, 16, __rvv_uint32m4_t, uint32, VNx16SI, VNx8SI, VNx4SI, _u32m4,
> _u32, _e32m4)
> /* LMUL = 8:
> + Machine mode = VNx32SImode when TARGET_MIN_VLEN >= 128.
> Machine mode = VNx16SImode when TARGET_MIN_VLEN > 32.
> Machine mode = VNx8SImode when TARGET_MIN_VLEN = 32. */
> -DEF_RVV_TYPE (vint32m8_t, 15, __rvv_int32m8_t, int32, VNx16SI, VNx8SI, _i32m8,
> +DEF_RVV_TYPE (vint32m8_t, 15, __rvv_int32m8_t, int32, VNx32SI, VNx16SI, VNx8SI, _i32m8,
> _i32, _e32m8)
> -DEF_RVV_TYPE (vuint32m8_t, 16, __rvv_uint32m8_t, uint32, VNx16SI, VNx8SI,
> +DEF_RVV_TYPE (vuint32m8_t, 16, __rvv_uint32m8_t, uint32, VNx32SI, VNx16SI, VNx8SI,
> _u32m8, _u32, _e32m8)
>
> /* SEW = 64:
> - Enable when TARGET_MIN_VLEN > 32. */
> -DEF_RVV_TYPE (vint64m1_t, 15, __rvv_int64m1_t, int64, VNx1DI, VOID, _i64m1,
> + Disable when !TARGET_VECTOR_ELEN_64. */
> +DEF_RVV_TYPE (vint64m1_t, 15, __rvv_int64m1_t, int64, VNx2DI, VNx1DI, VOID, _i64m1,
> _i64, _e64m1)
> -DEF_RVV_TYPE (vuint64m1_t, 16, __rvv_uint64m1_t, uint64, VNx1DI, VOID, _u64m1,
> +DEF_RVV_TYPE (vuint64m1_t, 16, __rvv_uint64m1_t, uint64, VNx2DI, VNx1DI, VOID, _u64m1,
> _u64, _e64m1)
> -DEF_RVV_TYPE (vint64m2_t, 15, __rvv_int64m2_t, int64, VNx2DI, VOID, _i64m2,
> +DEF_RVV_TYPE (vint64m2_t, 15, __rvv_int64m2_t, int64, VNx4DI, VNx2DI, VOID, _i64m2,
> _i64, _e64m2)
> -DEF_RVV_TYPE (vuint64m2_t, 16, __rvv_uint64m2_t, uint64, VNx2DI, VOID, _u64m2,
> +DEF_RVV_TYPE (vuint64m2_t, 16, __rvv_uint64m2_t, uint64, VNx4DI, VNx2DI, VOID, _u64m2,
> _u64, _e64m2)
> -DEF_RVV_TYPE (vint64m4_t, 15, __rvv_int64m4_t, int64, VNx4DI, VOID, _i64m4,
> +DEF_RVV_TYPE (vint64m4_t, 15, __rvv_int64m4_t, int64, VNx8DI, VNx4DI, VOID, _i64m4,
> _i64, _e64m4)
> -DEF_RVV_TYPE (vuint64m4_t, 16, __rvv_uint64m4_t, uint64, VNx4DI, VOID, _u64m4,
> +DEF_RVV_TYPE (vuint64m4_t, 16, __rvv_uint64m4_t, uint64, VNx8DI, VNx4DI, VOID, _u64m4,
> _u64, _e64m4)
> -DEF_RVV_TYPE (vint64m8_t, 15, __rvv_int64m8_t, int64, VNx8DI, VOID, _i64m8,
> +DEF_RVV_TYPE (vint64m8_t, 15, __rvv_int64m8_t, int64, VNx16DI, VNx8DI, VOID, _i64m8,
> _i64, _e64m8)
> -DEF_RVV_TYPE (vuint64m8_t, 16, __rvv_uint64m8_t, uint64, VNx8DI, VOID, _u64m8,
> +DEF_RVV_TYPE (vuint64m8_t, 16, __rvv_uint64m8_t, uint64, VNx16DI, VNx8DI, VOID, _u64m8,
> _u64, _e64m8)
>
> +/* Disable all when !TARGET_VECTOR_ELEN_FP_32. */
> /* LMUL = 1/2:
> - Only enble when TARGET_MIN_VLEN > 32 and machine mode = VNx1SFmode. */
> -DEF_RVV_TYPE (vfloat32mf2_t, 18, __rvv_float32mf2_t, float, VNx1SF, VOID,
> + Only enble when TARGET_MIN_VLEN > 32.
> + Machine mode = VNx1SFmode when TARGET_MIN_VLEN < 128.
> + Machine mode = VNx2SFmode when TARGET_MIN_VLEN >= 128. */
> +DEF_RVV_TYPE (vfloat32mf2_t, 18, __rvv_float32mf2_t, float, VNx2SF, VNx1SF, VOID,
> _f32mf2, _f32, _e32mf2)
> /* LMUL = 1:
> + Machine mode = VNx4SFmode when TARGET_MIN_VLEN >= 128.
> Machine mode = VNx2SFmode when TARGET_MIN_VLEN > 32.
> Machine mode = VNx1SFmode when TARGET_MIN_VLEN = 32. */
> -DEF_RVV_TYPE (vfloat32m1_t, 17, __rvv_float32m1_t, float, VNx2SF, VNx1SF,
> +DEF_RVV_TYPE (vfloat32m1_t, 17, __rvv_float32m1_t, float, VNx4SF, VNx2SF, VNx1SF,
> _f32m1, _f32, _e32m1)
> /* LMUL = 2:
> + Machine mode = VNx8SFmode when TARGET_MIN_VLEN >= 128.
> Machine mode = VNx4SFmode when TARGET_MIN_VLEN > 32.
> Machine mode = VNx2SFmode when TARGET_MIN_VLEN = 32. */
> -DEF_RVV_TYPE (vfloat32m2_t, 17, __rvv_float32m2_t, float, VNx4SF, VNx2SF,
> +DEF_RVV_TYPE (vfloat32m2_t, 17, __rvv_float32m2_t, float, VNx8SF, VNx4SF, VNx2SF,
> _f32m2, _f32, _e32m2)
> /* LMUL = 4:
> + Machine mode = VNx16SFmode when TARGET_MIN_VLEN >= 128.
> Machine mode = VNx8SFmode when TARGET_MIN_VLEN > 32.
> Machine mode = VNx4SFmode when TARGET_MIN_VLEN = 32. */
> -DEF_RVV_TYPE (vfloat32m4_t, 17, __rvv_float32m4_t, float, VNx8SF, VNx4SF,
> +DEF_RVV_TYPE (vfloat32m4_t, 17, __rvv_float32m4_t, float, VNx16SF, VNx8SF, VNx4SF,
> _f32m4, _f32, _e32m4)
> /* LMUL = 8:
> + Machine mode = VNx32SFmode when TARGET_MIN_VLEN >= 128.
> Machine mode = VNx16SFmode when TARGET_MIN_VLEN > 32.
> Machine mode = VNx8SFmode when TARGET_MIN_VLEN = 32. */
> -DEF_RVV_TYPE (vfloat32m8_t, 17, __rvv_float32m8_t, float, VNx16SF, VNx8SF,
> +DEF_RVV_TYPE (vfloat32m8_t, 17, __rvv_float32m8_t, float, VNx32SF, VNx16SF, VNx8SF,
> _f32m8, _f32, _e32m8)
>
> /* SEW = 64:
> - Enable when TARGET_VECTOR_FP64. */
> -DEF_RVV_TYPE (vfloat64m1_t, 17, __rvv_float64m1_t, double, VNx1DF, VOID, _f64m1,
> + Disable when !TARGET_VECTOR_ELEN_FP_64. */
> +DEF_RVV_TYPE (vfloat64m1_t, 17, __rvv_float64m1_t, double, VNx2DF, VNx1DF, VOID, _f64m1,
> _f64, _e64m1)
> -DEF_RVV_TYPE (vfloat64m2_t, 17, __rvv_float64m2_t, double, VNx2DF, VOID, _f64m2,
> +DEF_RVV_TYPE (vfloat64m2_t, 17, __rvv_float64m2_t, double, VNx4DF, VNx2DF, VOID, _f64m2,
> _f64, _e64m2)
> -DEF_RVV_TYPE (vfloat64m4_t, 17, __rvv_float64m4_t, double, VNx4DF, VOID, _f64m4,
> +DEF_RVV_TYPE (vfloat64m4_t, 17, __rvv_float64m4_t, double, VNx8DF, VNx4DF, VOID, _f64m4,
> _f64, _e64m4)
> -DEF_RVV_TYPE (vfloat64m8_t, 17, __rvv_float64m8_t, double, VNx8DF, VOID, _f64m8,
> +DEF_RVV_TYPE (vfloat64m8_t, 17, __rvv_float64m8_t, double, VNx16DF, VNx8DF, VOID, _f64m8,
> _f64, _e64m8)
>
> DEF_RVV_OP_TYPE (vv)
> diff --git a/gcc/config/riscv/riscv-vector-switch.def b/gcc/config/riscv/riscv-vector-switch.def
> index 3b944547b49..8aae22d3259 100644
> --- a/gcc/config/riscv/riscv-vector-switch.def
> +++ b/gcc/config/riscv/riscv-vector-switch.def
> @@ -81,69 +81,80 @@ TODO: FP16 vector needs support of 'zvfh', we don't support it yet. */
> For example: 'MODE' = VNx64BImode needs TARGET_MIN_VLEN > 32. */
> #ifndef ENTRY
> #define ENTRY(MODE, REQUIREMENT, VLMUL_FOR_MIN_VLEN32, RATIO_FOR_MIN_VLEN32, \
> - VLMUL_FOR_MIN_VLEN64, RATIO_FOR_MIN_VLEN64)
> + VLMUL_FOR_MIN_VLEN64, RATIO_FOR_MIN_VLEN64, \
> + VLMUL_FOR_MIN_VLEN128, RATIO_FOR_MIN_VLEN128)
> #endif
>
> /* Mask modes. Disable VNx64BImode when TARGET_MIN_VLEN == 32. */
> -ENTRY (VNx64BI, TARGET_MIN_VLEN > 32, LMUL_RESERVED, 0, LMUL_8, 1)
> -ENTRY (VNx32BI, true, LMUL_8, 1, LMUL_4, 2)
> -ENTRY (VNx16BI, true, LMUL_4, 2, LMUL_2, 4)
> -ENTRY (VNx8BI, true, LMUL_2, 4, LMUL_1, 8)
> -ENTRY (VNx4BI, true, LMUL_1, 8, LMUL_F2, 16)
> -ENTRY (VNx2BI, true, LMUL_F2, 16, LMUL_F4, 32)
> -ENTRY (VNx1BI, true, LMUL_F4, 32, LMUL_F8, 64)
> +ENTRY (VNx128BI, TARGET_MIN_VLEN >= 128, LMUL_RESERVED, 0, LMUL_RESERVED, 0, LMUL_8, 1)
> +ENTRY (VNx64BI, TARGET_MIN_VLEN > 32, LMUL_RESERVED, 0, LMUL_8, 1, LMUL_4, 2)
> +ENTRY (VNx32BI, true, LMUL_8, 1, LMUL_4, 2, LMUL_2, 4)
> +ENTRY (VNx16BI, true, LMUL_4, 2, LMUL_2, 4, LMUL_1, 8)
> +ENTRY (VNx8BI, true, LMUL_2, 4, LMUL_1, 8, LMUL_F2, 16)
> +ENTRY (VNx4BI, true, LMUL_1, 8, LMUL_F2, 16, LMUL_F4, 32)
> +ENTRY (VNx2BI, true, LMUL_F2, 16, LMUL_F4, 32, LMUL_F8, 64)
> +ENTRY (VNx1BI, TARGET_MIN_VLEN < 128, LMUL_F4, 32, LMUL_F8, 64, LMUL_RESERVED, 0)
>
> /* SEW = 8. Disable VNx64QImode when TARGET_MIN_VLEN == 32. */
> -ENTRY (VNx64QI, TARGET_MIN_VLEN > 32, LMUL_RESERVED, 0, LMUL_8, 1)
> -ENTRY (VNx32QI, true, LMUL_8, 1, LMUL_4, 2)
> -ENTRY (VNx16QI, true, LMUL_4, 2, LMUL_2, 4)
> -ENTRY (VNx8QI, true, LMUL_2, 4, LMUL_1, 8)
> -ENTRY (VNx4QI, true, LMUL_1, 8, LMUL_F2, 16)
> -ENTRY (VNx2QI, true, LMUL_F2, 16, LMUL_F4, 32)
> -ENTRY (VNx1QI, true, LMUL_F4, 32, LMUL_F8, 64)
> +ENTRY (VNx128QI, TARGET_MIN_VLEN >= 128, LMUL_RESERVED, 0, LMUL_RESERVED, 0, LMUL_8, 1)
> +ENTRY (VNx64QI, TARGET_MIN_VLEN > 32, LMUL_RESERVED, 0, LMUL_8, 1, LMUL_4, 2)
> +ENTRY (VNx32QI, true, LMUL_8, 1, LMUL_4, 2, LMUL_2, 4)
> +ENTRY (VNx16QI, true, LMUL_4, 2, LMUL_2, 4, LMUL_1, 8)
> +ENTRY (VNx8QI, true, LMUL_2, 4, LMUL_1, 8, LMUL_F2, 16)
> +ENTRY (VNx4QI, true, LMUL_1, 8, LMUL_F2, 16, LMUL_F4, 32)
> +ENTRY (VNx2QI, true, LMUL_F2, 16, LMUL_F4, 32, LMUL_F8, 64)
> +ENTRY (VNx1QI, TARGET_MIN_VLEN < 128, LMUL_F4, 32, LMUL_F8, 64, LMUL_RESERVED, 0)
>
> /* SEW = 16. Disable VNx32HImode when TARGET_MIN_VLEN == 32. */
> -ENTRY (VNx32HI, TARGET_MIN_VLEN > 32, LMUL_RESERVED, 0, LMUL_8, 2)
> -ENTRY (VNx16HI, true, LMUL_8, 2, LMUL_4, 4)
> -ENTRY (VNx8HI, true, LMUL_4, 4, LMUL_2, 8)
> -ENTRY (VNx4HI, true, LMUL_2, 8, LMUL_1, 16)
> -ENTRY (VNx2HI, true, LMUL_1, 16, LMUL_F2, 32)
> -ENTRY (VNx1HI, true, LMUL_F2, 32, LMUL_F4, 64)
> +ENTRY (VNx64HI, TARGET_MIN_VLEN >= 128, LMUL_RESERVED, 0, LMUL_RESERVED, 0, LMUL_8, 2)
> +ENTRY (VNx32HI, TARGET_MIN_VLEN > 32, LMUL_RESERVED, 0, LMUL_8, 2, LMUL_4, 4)
> +ENTRY (VNx16HI, true, LMUL_8, 2, LMUL_4, 4, LMUL_2, 8)
> +ENTRY (VNx8HI, true, LMUL_4, 4, LMUL_2, 8, LMUL_1, 16)
> +ENTRY (VNx4HI, true, LMUL_2, 8, LMUL_1, 16, LMUL_F2, 32)
> +ENTRY (VNx2HI, true, LMUL_1, 16, LMUL_F2, 32, LMUL_F4, 64)
> +ENTRY (VNx1HI, TARGET_MIN_VLEN < 128, LMUL_F2, 32, LMUL_F4, 64, LMUL_RESERVED, 0)
>
> /* TODO:Disable all FP16 vector, enable them when 'zvfh' is supported. */
> -ENTRY (VNx32HF, false, LMUL_RESERVED, 0, LMUL_8, 2)
> -ENTRY (VNx16HF, false, LMUL_8, 2, LMUL_4, 4)
> -ENTRY (VNx8HF, false, LMUL_4, 4, LMUL_2, 8)
> -ENTRY (VNx4HF, false, LMUL_2, 8, LMUL_1, 16)
> -ENTRY (VNx2HF, false, LMUL_1, 16, LMUL_F2, 32)
> -ENTRY (VNx1HF, false, LMUL_F2, 32, LMUL_F4, 64)
> +ENTRY (VNx64HF, false, LMUL_RESERVED, 0, LMUL_RESERVED, 0, LMUL_8, 2)
> +ENTRY (VNx32HF, false, LMUL_RESERVED, 0, LMUL_8, 2, LMUL_4, 4)
> +ENTRY (VNx16HF, false, LMUL_8, 2, LMUL_4, 4, LMUL_2, 8)
> +ENTRY (VNx8HF, false, LMUL_4, 4, LMUL_2, 8, LMUL_1, 16)
> +ENTRY (VNx4HF, false, LMUL_2, 8, LMUL_1, 16, LMUL_F2, 32)
> +ENTRY (VNx2HF, false, LMUL_1, 16, LMUL_F2, 32, LMUL_F4, 64)
> +ENTRY (VNx1HF, false, LMUL_F2, 32, LMUL_F4, 64, LMUL_RESERVED, 0)
>
> /* SEW = 32. Disable VNx16SImode when TARGET_MIN_VLEN == 32.
> For single-precision floating-point, we need TARGET_VECTOR_ELEN_FP_32 to be
> true. */
> -ENTRY (VNx16SI, TARGET_MIN_VLEN > 32, LMUL_RESERVED, 0, LMUL_8, 4)
> -ENTRY (VNx8SI, true, LMUL_8, 4, LMUL_4, 8)
> -ENTRY (VNx4SI, true, LMUL_4, 8, LMUL_2, 16)
> -ENTRY (VNx2SI, true, LMUL_2, 16, LMUL_1, 32)
> -ENTRY (VNx1SI, true, LMUL_1, 32, LMUL_F2, 64)
> -
> -ENTRY (VNx16SF, TARGET_VECTOR_ELEN_FP_32, LMUL_RESERVED, 0, LMUL_8, 4)
> -ENTRY (VNx8SF, TARGET_VECTOR_ELEN_FP_32, LMUL_8, 4, LMUL_4, 8)
> -ENTRY (VNx4SF, TARGET_VECTOR_ELEN_FP_32, LMUL_4, 8, LMUL_2, 16)
> -ENTRY (VNx2SF, TARGET_VECTOR_ELEN_FP_32, LMUL_2, 16, LMUL_1, 32)
> -ENTRY (VNx1SF, TARGET_VECTOR_ELEN_FP_32, LMUL_1, 32, LMUL_F2, 64)
> +ENTRY (VNx32SI, TARGET_MIN_VLEN >= 128, LMUL_RESERVED, 0, LMUL_RESERVED, 0, LMUL_8, 4)
> +ENTRY (VNx16SI, TARGET_MIN_VLEN > 32, LMUL_RESERVED, 0, LMUL_8, 4, LMUL_4, 8)
> +ENTRY (VNx8SI, true, LMUL_8, 4, LMUL_4, 8, LMUL_2, 16)
> +ENTRY (VNx4SI, true, LMUL_4, 8, LMUL_2, 16, LMUL_1, 32)
> +ENTRY (VNx2SI, true, LMUL_2, 16, LMUL_1, 32, LMUL_F2, 64)
> +ENTRY (VNx1SI, TARGET_MIN_VLEN < 128, LMUL_1, 32, LMUL_F2, 64, LMUL_RESERVED, 0)
> +
> +ENTRY (VNx32SF, TARGET_VECTOR_ELEN_FP_32 && TARGET_MIN_VLEN >= 128, LMUL_RESERVED, 0, LMUL_RESERVED, 0, LMUL_8, 4)
> +ENTRY (VNx16SF, TARGET_VECTOR_ELEN_FP_32 && TARGET_MIN_VLEN > 32, LMUL_RESERVED, 0,
> + LMUL_8, 4, LMUL_4, 8)
> +ENTRY (VNx8SF, TARGET_VECTOR_ELEN_FP_32, LMUL_8, 4, LMUL_4, 8, LMUL_2, 16)
> +ENTRY (VNx4SF, TARGET_VECTOR_ELEN_FP_32, LMUL_4, 8, LMUL_2, 16, LMUL_1, 32)
> +ENTRY (VNx2SF, TARGET_VECTOR_ELEN_FP_32, LMUL_2, 16, LMUL_1, 32, LMUL_F2, 64)
> +ENTRY (VNx1SF, TARGET_VECTOR_ELEN_FP_32 && TARGET_MIN_VLEN < 128, LMUL_1, 32, LMUL_F2, 64, LMUL_RESERVED, 0)
>
> /* SEW = 64. Enable when TARGET_VECTOR_ELEN_64 is true.
> For double-precision floating-point, we need TARGET_VECTOR_ELEN_FP_64 to be
> true. */
> -ENTRY (VNx8DI, TARGET_VECTOR_ELEN_64, LMUL_RESERVED, 0, LMUL_8, 8)
> -ENTRY (VNx4DI, TARGET_VECTOR_ELEN_64, LMUL_RESERVED, 0, LMUL_4, 16)
> -ENTRY (VNx2DI, TARGET_VECTOR_ELEN_64, LMUL_RESERVED, 0, LMUL_2, 32)
> -ENTRY (VNx1DI, TARGET_VECTOR_ELEN_64, LMUL_RESERVED, 0, LMUL_1, 64)
> -
> -ENTRY (VNx8DF, TARGET_VECTOR_ELEN_FP_64, LMUL_RESERVED, 0, LMUL_8, 8)
> -ENTRY (VNx4DF, TARGET_VECTOR_ELEN_FP_64, LMUL_RESERVED, 0, LMUL_4, 16)
> -ENTRY (VNx2DF, TARGET_VECTOR_ELEN_FP_64, LMUL_RESERVED, 0, LMUL_2, 32)
> -ENTRY (VNx1DF, TARGET_VECTOR_ELEN_FP_64, LMUL_RESERVED, 0, LMUL_1, 64)
> +ENTRY (VNx16DI, TARGET_VECTOR_ELEN_64 && TARGET_MIN_VLEN >= 128, LMUL_RESERVED, 0, LMUL_RESERVED, 0, LMUL_8, 8)
> +ENTRY (VNx8DI, TARGET_VECTOR_ELEN_64, LMUL_RESERVED, 0, LMUL_8, 8, LMUL_4, 16)
> +ENTRY (VNx4DI, TARGET_VECTOR_ELEN_64, LMUL_RESERVED, 0, LMUL_4, 16, LMUL_2, 32)
> +ENTRY (VNx2DI, TARGET_VECTOR_ELEN_64, LMUL_RESERVED, 0, LMUL_2, 32, LMUL_1, 64)
> +ENTRY (VNx1DI, TARGET_VECTOR_ELEN_64 && TARGET_MIN_VLEN < 128, LMUL_RESERVED, 0, LMUL_1, 64, LMUL_RESERVED, 0)
> +
> +ENTRY (VNx16DF, TARGET_VECTOR_ELEN_FP_64 && TARGET_MIN_VLEN >= 128, LMUL_RESERVED, 0, LMUL_RESERVED, 0, LMUL_8, 8)
> +ENTRY (VNx8DF, TARGET_VECTOR_ELEN_FP_64 && TARGET_MIN_VLEN > 32, LMUL_RESERVED, 0,
> + LMUL_8, 8, LMUL_4, 16)
> +ENTRY (VNx4DF, TARGET_VECTOR_ELEN_FP_64, LMUL_RESERVED, 0, LMUL_4, 16, LMUL_2, 32)
> +ENTRY (VNx2DF, TARGET_VECTOR_ELEN_FP_64, LMUL_RESERVED, 0, LMUL_2, 32, LMUL_1, 64)
> +ENTRY (VNx1DF, TARGET_VECTOR_ELEN_FP_64 && TARGET_MIN_VLEN < 128, LMUL_RESERVED, 0, LMUL_1, 64, LMUL_RESERVED, 0)
>
> #undef ENTRY
> diff --git a/gcc/config/riscv/riscv.cc b/gcc/config/riscv/riscv.cc
> index cdb47e81e7c..5d2550871c7 100644
> --- a/gcc/config/riscv/riscv.cc
> +++ b/gcc/config/riscv/riscv.cc
> @@ -1974,6 +1974,8 @@ riscv_legitimize_poly_move (machine_mode mode, rtx dest, rtx tmp, rtx src)
> div_factor = 4;
> else if ((factor % (vlenb / 8)) == 0)
> div_factor = 8;
> + else if ((factor % (vlenb / 16)) == 0)
> + div_factor = 16;
> else
> gcc_unreachable ();
>
> @@ -6192,7 +6194,15 @@ riscv_init_machine_status (void)
> static poly_uint16
> riscv_convert_vector_bits (void)
> {
> - if (TARGET_MIN_VLEN > 32)
> + if (TARGET_MIN_VLEN >= 128)
> + {
> + /* We have Full 'V' extension for application processors. It's specified
> + by -march=rv64gcv/rv32gcv, The 'V' extension depends upon the Zvl128b
> + and Zve64d extensions. Thus the number of bytes in a vector is 16 + 16
> + * x1 which is riscv_vector_chunks * 16 = poly_int (16, 16). */
> + riscv_bytes_per_vector_chunk = 16;
> + }
> + else if (TARGET_MIN_VLEN > 32)
> {
> /* When targetting minimum VLEN > 32, we should use 64-bit chunk size.
> Otherwise we can not include SEW = 64bits.
> diff --git a/gcc/config/riscv/riscv.md b/gcc/config/riscv/riscv.md
> index bc384d9aedf..1fb29da8a0b 100644
> --- a/gcc/config/riscv/riscv.md
> +++ b/gcc/config/riscv/riscv.md
> @@ -163,13 +163,13 @@ (define_attr "move_type"
>
> ;; Main data type used by the insn
> (define_attr "mode" "unknown,none,QI,HI,SI,DI,TI,HF,SF,DF,TF,
> - VNx1BI,VNx2BI,VNx4BI,VNx8BI,VNx16BI,VNx32BI,VNx64BI,
> - VNx1QI,VNx2QI,VNx4QI,VNx8QI,VNx16QI,VNx32QI,VNx64QI,
> - VNx1HI,VNx2HI,VNx4HI,VNx8HI,VNx16HI,VNx32HI,
> - VNx1SI,VNx2SI,VNx4SI,VNx8SI,VNx16SI,
> - VNx1DI,VNx2DI,VNx4DI,VNx8DI,
> - VNx1SF,VNx2SF,VNx4SF,VNx8SF,VNx16SF,
> - VNx1DF,VNx2DF,VNx4DF,VNx8DF"
> + VNx1BI,VNx2BI,VNx4BI,VNx8BI,VNx16BI,VNx32BI,VNx64BI,VNx128BI,
> + VNx1QI,VNx2QI,VNx4QI,VNx8QI,VNx16QI,VNx32QI,VNx64QI,VNx128QI,
> + VNx1HI,VNx2HI,VNx4HI,VNx8HI,VNx16HI,VNx32HI,VNx64HI,
> + VNx1SI,VNx2SI,VNx4SI,VNx8SI,VNx16SI,VNx32SI,
> + VNx1DI,VNx2DI,VNx4DI,VNx8DI,VNx16DI,
> + VNx1SF,VNx2SF,VNx4SF,VNx8SF,VNx16SF,VNx32SF,
> + VNx1DF,VNx2DF,VNx4DF,VNx8DF,VNx16DF"
> (const_string "unknown"))
>
> ;; True if the main data type is twice the size of a word.
> diff --git a/gcc/config/riscv/vector-iterators.md b/gcc/config/riscv/vector-iterators.md
> index 70ad85b661b..3c6575208be 100644
> --- a/gcc/config/riscv/vector-iterators.md
> +++ b/gcc/config/riscv/vector-iterators.md
> @@ -83,157 +83,181 @@ (define_c_enum "unspec" [
> ])
>
> (define_mode_iterator V [
> - VNx1QI VNx2QI VNx4QI VNx8QI VNx16QI VNx32QI (VNx64QI "TARGET_MIN_VLEN > 32")
> - VNx1HI VNx2HI VNx4HI VNx8HI VNx16HI (VNx32HI "TARGET_MIN_VLEN > 32")
> - VNx1SI VNx2SI VNx4SI VNx8SI (VNx16SI "TARGET_MIN_VLEN > 32")
> - (VNx1DI "TARGET_VECTOR_ELEN_64") (VNx2DI "TARGET_VECTOR_ELEN_64")
> - (VNx4DI "TARGET_VECTOR_ELEN_64") (VNx8DI "TARGET_VECTOR_ELEN_64")
> - (VNx1SF "TARGET_VECTOR_ELEN_FP_32")
> + (VNx1QI "TARGET_MIN_VLEN < 128") VNx2QI VNx4QI VNx8QI VNx16QI VNx32QI (VNx64QI "TARGET_MIN_VLEN > 32") (VNx128QI "TARGET_MIN_VLEN >= 128")
> + (VNx1HI "TARGET_MIN_VLEN < 128") VNx2HI VNx4HI VNx8HI VNx16HI (VNx32HI "TARGET_MIN_VLEN > 32") (VNx64HI "TARGET_MIN_VLEN >= 128")
> + (VNx1SI "TARGET_MIN_VLEN < 128") VNx2SI VNx4SI VNx8SI (VNx16SI "TARGET_MIN_VLEN > 32") (VNx32SI "TARGET_MIN_VLEN >= 128")
> + (VNx1DI "TARGET_VECTOR_ELEN_64 && TARGET_MIN_VLEN < 128") (VNx2DI "TARGET_VECTOR_ELEN_64")
> + (VNx4DI "TARGET_VECTOR_ELEN_64") (VNx8DI "TARGET_VECTOR_ELEN_64") (VNx16DI "TARGET_VECTOR_ELEN_64 && TARGET_MIN_VLEN >= 128")
> + (VNx1SF "TARGET_VECTOR_ELEN_FP_32 && TARGET_MIN_VLEN < 128")
> (VNx2SF "TARGET_VECTOR_ELEN_FP_32")
> (VNx4SF "TARGET_VECTOR_ELEN_FP_32")
> (VNx8SF "TARGET_VECTOR_ELEN_FP_32")
> (VNx16SF "TARGET_VECTOR_ELEN_FP_32 && TARGET_MIN_VLEN > 32")
> - (VNx1DF "TARGET_VECTOR_ELEN_FP_64")
> + (VNx32SF "TARGET_VECTOR_ELEN_FP_32 && TARGET_MIN_VLEN >= 128")
> + (VNx1DF "TARGET_VECTOR_ELEN_FP_64 && TARGET_MIN_VLEN < 128")
> (VNx2DF "TARGET_VECTOR_ELEN_FP_64")
> (VNx4DF "TARGET_VECTOR_ELEN_FP_64")
> (VNx8DF "TARGET_VECTOR_ELEN_FP_64")
> + (VNx16DF "TARGET_VECTOR_ELEN_FP_64 && TARGET_MIN_VLEN >= 128")
> ])
>
> (define_mode_iterator VEEWEXT2 [
> - VNx1HI VNx2HI VNx4HI VNx8HI VNx16HI (VNx32HI "TARGET_MIN_VLEN > 32")
> - VNx1SI VNx2SI VNx4SI VNx8SI (VNx16SI "TARGET_MIN_VLEN > 32")
> - (VNx1DI "TARGET_VECTOR_ELEN_64") (VNx2DI "TARGET_VECTOR_ELEN_64")
> - (VNx4DI "TARGET_VECTOR_ELEN_64") (VNx8DI "TARGET_VECTOR_ELEN_64")
> - (VNx1SF "TARGET_VECTOR_ELEN_FP_32")
> + (VNx1HI "TARGET_MIN_VLEN < 128") VNx2HI VNx4HI VNx8HI VNx16HI (VNx32HI "TARGET_MIN_VLEN > 32") (VNx64HI "TARGET_MIN_VLEN >= 128")
> + (VNx1SI "TARGET_MIN_VLEN < 128") VNx2SI VNx4SI VNx8SI (VNx16SI "TARGET_MIN_VLEN > 32") (VNx32SI "TARGET_MIN_VLEN >= 128")
> + (VNx1DI "TARGET_VECTOR_ELEN_64 && TARGET_MIN_VLEN < 128") (VNx2DI "TARGET_VECTOR_ELEN_64")
> + (VNx4DI "TARGET_VECTOR_ELEN_64") (VNx8DI "TARGET_VECTOR_ELEN_64") (VNx16DI "TARGET_VECTOR_ELEN_64 && TARGET_MIN_VLEN >= 128")
> + (VNx1SF "TARGET_VECTOR_ELEN_FP_32 && TARGET_MIN_VLEN < 128")
> (VNx2SF "TARGET_VECTOR_ELEN_FP_32")
> (VNx4SF "TARGET_VECTOR_ELEN_FP_32")
> (VNx8SF "TARGET_VECTOR_ELEN_FP_32")
> (VNx16SF "TARGET_VECTOR_ELEN_FP_32 && TARGET_MIN_VLEN > 32")
> - (VNx1DF "TARGET_VECTOR_ELEN_FP_64")
> + (VNx32SF "TARGET_VECTOR_ELEN_FP_32 && TARGET_MIN_VLEN >= 128")
> + (VNx1DF "TARGET_VECTOR_ELEN_FP_64 && TARGET_MIN_VLEN < 128")
> (VNx2DF "TARGET_VECTOR_ELEN_FP_64")
> (VNx4DF "TARGET_VECTOR_ELEN_FP_64")
> (VNx8DF "TARGET_VECTOR_ELEN_FP_64")
> + (VNx16DF "TARGET_VECTOR_ELEN_FP_64 && TARGET_MIN_VLEN >= 128")
> ])
>
> (define_mode_iterator VEEWEXT4 [
> - VNx1SI VNx2SI VNx4SI VNx8SI (VNx16SI "TARGET_MIN_VLEN > 32")
> - (VNx1DI "TARGET_VECTOR_ELEN_64") (VNx2DI "TARGET_VECTOR_ELEN_64")
> - (VNx4DI "TARGET_VECTOR_ELEN_64") (VNx8DI "TARGET_VECTOR_ELEN_64")
> - (VNx1SF "TARGET_VECTOR_ELEN_FP_32")
> + (VNx1SI "TARGET_MIN_VLEN < 128") VNx2SI VNx4SI VNx8SI (VNx16SI "TARGET_MIN_VLEN > 32") (VNx32SI "TARGET_MIN_VLEN >= 128")
> + (VNx1DI "TARGET_VECTOR_ELEN_64 && TARGET_MIN_VLEN < 128") (VNx2DI "TARGET_VECTOR_ELEN_64")
> + (VNx4DI "TARGET_VECTOR_ELEN_64") (VNx8DI "TARGET_VECTOR_ELEN_64") (VNx16DI "TARGET_VECTOR_ELEN_64 && TARGET_MIN_VLEN >= 128")
> + (VNx1SF "TARGET_VECTOR_ELEN_FP_32 && TARGET_MIN_VLEN < 128")
> (VNx2SF "TARGET_VECTOR_ELEN_FP_32")
> (VNx4SF "TARGET_VECTOR_ELEN_FP_32")
> (VNx8SF "TARGET_VECTOR_ELEN_FP_32")
> (VNx16SF "TARGET_VECTOR_ELEN_FP_32 && TARGET_MIN_VLEN > 32")
> - (VNx1DF "TARGET_VECTOR_ELEN_FP_64")
> + (VNx32SF "TARGET_VECTOR_ELEN_FP_32 && TARGET_MIN_VLEN >= 128")
> + (VNx1DF "TARGET_VECTOR_ELEN_FP_64 && TARGET_MIN_VLEN < 128")
> (VNx2DF "TARGET_VECTOR_ELEN_FP_64")
> (VNx4DF "TARGET_VECTOR_ELEN_FP_64")
> (VNx8DF "TARGET_VECTOR_ELEN_FP_64")
> + (VNx16DF "TARGET_VECTOR_ELEN_FP_64 && TARGET_MIN_VLEN >= 128")
> ])
>
> (define_mode_iterator VEEWEXT8 [
> (VNx1DI "TARGET_VECTOR_ELEN_64") (VNx2DI "TARGET_VECTOR_ELEN_64")
> - (VNx4DI "TARGET_VECTOR_ELEN_64") (VNx8DI "TARGET_VECTOR_ELEN_64")
> - (VNx1DF "TARGET_VECTOR_ELEN_FP_64")
> + (VNx4DI "TARGET_VECTOR_ELEN_64") (VNx8DI "TARGET_VECTOR_ELEN_64") (VNx16DI "TARGET_VECTOR_ELEN_64 && TARGET_MIN_VLEN >= 128")
> + (VNx1DF "TARGET_VECTOR_ELEN_FP_64 && TARGET_MIN_VLEN < 128")
> (VNx2DF "TARGET_VECTOR_ELEN_FP_64")
> (VNx4DF "TARGET_VECTOR_ELEN_FP_64")
> (VNx8DF "TARGET_VECTOR_ELEN_FP_64")
> + (VNx16DF "TARGET_VECTOR_ELEN_FP_64 && TARGET_MIN_VLEN >= 128")
> ])
>
> (define_mode_iterator VEEWTRUNC2 [
> - VNx1QI VNx2QI VNx4QI VNx8QI VNx16QI VNx32QI
> - VNx1HI VNx2HI VNx4HI VNx8HI VNx16HI
> - VNx1SI VNx2SI VNx4SI VNx8SI
> - (VNx1SF "TARGET_VECTOR_ELEN_FP_32")
> + (VNx1QI "TARGET_MIN_VLEN < 128") VNx2QI VNx4QI VNx8QI VNx16QI VNx32QI (VNx64QI "TARGET_MIN_VLEN >= 128")
> + (VNx1HI "TARGET_MIN_VLEN < 128") VNx2HI VNx4HI VNx8HI VNx16HI (VNx32HI "TARGET_MIN_VLEN >= 128")
> + (VNx1SI "TARGET_MIN_VLEN < 128") VNx2SI VNx4SI VNx8SI (VNx16SI "TARGET_MIN_VLEN >= 128")
> + (VNx1SF "TARGET_VECTOR_ELEN_FP_32 && TARGET_MIN_VLEN < 128")
> (VNx2SF "TARGET_VECTOR_ELEN_FP_32")
> (VNx4SF "TARGET_VECTOR_ELEN_FP_32")
> (VNx8SF "TARGET_VECTOR_ELEN_FP_32")
> + (VNx16SF "TARGET_VECTOR_ELEN_FP_32 && TARGET_MIN_VLEN >= 128")
> ])
>
> (define_mode_iterator VEEWTRUNC4 [
> - VNx1QI VNx2QI VNx4QI VNx8QI VNx16QI
> - VNx1HI VNx2HI VNx4HI VNx8HI
> + (VNx1QI "TARGET_MIN_VLEN < 128") VNx2QI VNx4QI VNx8QI VNx16QI (VNx32QI "TARGET_MIN_VLEN >= 128")
> + (VNx1HI "TARGET_MIN_VLEN < 128") VNx2HI VNx4HI VNx8HI (VNx16HI "TARGET_MIN_VLEN >= 128")
> ])
>
> (define_mode_iterator VEEWTRUNC8 [
> - VNx1QI VNx2QI VNx4QI VNx8QI
> + (VNx1QI "TARGET_MIN_VLEN < 128") VNx2QI VNx4QI VNx8QI (VNx16QI "TARGET_MIN_VLEN >= 128")
> ])
>
> (define_mode_iterator VLMULEXT2 [
> - VNx1QI VNx2QI VNx4QI VNx8QI VNx16QI VNx32QI
> - VNx1HI VNx2HI VNx4HI VNx8HI VNx16HI
> - VNx1SI VNx2SI VNx4SI VNx8SI
> - (VNx1DI "TARGET_VECTOR_ELEN_64") (VNx2DI "TARGET_VECTOR_ELEN_64")
> - (VNx4DI "TARGET_VECTOR_ELEN_64")
> - (VNx1SF "TARGET_VECTOR_ELEN_FP_32")
> + (VNx1QI "TARGET_MIN_VLEN < 128") VNx2QI VNx4QI VNx8QI VNx16QI VNx32QI (VNx64QI "TARGET_MIN_VLEN >= 128")
> + (VNx1HI "TARGET_MIN_VLEN < 128") VNx2HI VNx4HI VNx8HI VNx16HI (VNx32HI "TARGET_MIN_VLEN >= 128")
> + (VNx1SI "TARGET_MIN_VLEN < 128") VNx2SI VNx4SI VNx8SI (VNx16SI "TARGET_MIN_VLEN >= 128")
> + (VNx1DI "TARGET_VECTOR_ELEN_64 && TARGET_MIN_VLEN < 128") (VNx2DI "TARGET_VECTOR_ELEN_64")
> + (VNx4DI "TARGET_VECTOR_ELEN_64") (VNx8DI "TARGET_VECTOR_ELEN_64 && TARGET_MIN_VLEN >= 128")
> + (VNx1SF "TARGET_VECTOR_ELEN_FP_32 && TARGET_MIN_VLEN < 128")
> (VNx2SF "TARGET_VECTOR_ELEN_FP_32")
> (VNx4SF "TARGET_VECTOR_ELEN_FP_32")
> (VNx8SF "TARGET_VECTOR_ELEN_FP_32")
> + (VNx16SF "TARGET_VECTOR_ELEN_FP_32 && TARGET_MIN_VLEN >= 128")
> (VNx1DF "TARGET_VECTOR_ELEN_FP_64")
> (VNx2DF "TARGET_VECTOR_ELEN_FP_64")
> (VNx4DF "TARGET_VECTOR_ELEN_FP_64")
> + (VNx8DF "TARGET_VECTOR_ELEN_FP_32 && TARGET_MIN_VLEN >= 128")
> ])
>
> (define_mode_iterator VLMULEXT4 [
> - VNx1QI VNx2QI VNx4QI VNx8QI VNx16QI
> - VNx1HI VNx2HI VNx4HI VNx8HI
> - VNx1SI VNx2SI VNx4SI
> - (VNx1DI "TARGET_VECTOR_ELEN_64") (VNx2DI "TARGET_VECTOR_ELEN_64")
> - (VNx1SF "TARGET_VECTOR_ELEN_FP_32")
> + (VNx1QI "TARGET_MIN_VLEN < 128") VNx2QI VNx4QI VNx8QI VNx16QI (VNx32QI "TARGET_MIN_VLEN >= 128")
> + (VNx1HI "TARGET_MIN_VLEN < 128") VNx2HI VNx4HI VNx8HI (VNx16HI "TARGET_MIN_VLEN >= 128")
> + (VNx1SI "TARGET_MIN_VLEN < 128") VNx2SI VNx4SI (VNx8SI "TARGET_MIN_VLEN >= 128")
> + (VNx1DI "TARGET_VECTOR_ELEN_64 && TARGET_MIN_VLEN < 128") (VNx2DI "TARGET_VECTOR_ELEN_64")
> + (VNx1SF "TARGET_VECTOR_ELEN_FP_32 && TARGET_MIN_VLEN < 128")
> (VNx2SF "TARGET_VECTOR_ELEN_FP_32")
> (VNx4SF "TARGET_VECTOR_ELEN_FP_32")
> - (VNx1DF "TARGET_VECTOR_ELEN_FP_64")
> + (VNx8SF "TARGET_VECTOR_ELEN_FP_32 && TARGET_MIN_VLEN >= 128")
> + (VNx1DF "TARGET_VECTOR_ELEN_FP_64 && TARGET_MIN_VLEN < 128")
> (VNx2DF "TARGET_VECTOR_ELEN_FP_64")
> + (VNx4DF "TARGET_VECTOR_ELEN_FP_64 && TARGET_MIN_VLEN >= 128")
> ])
>
> (define_mode_iterator VLMULEXT8 [
> - VNx1QI VNx2QI VNx4QI VNx8QI
> - VNx1HI VNx2HI VNx4HI
> - VNx1SI VNx2SI
> - (VNx1DI "TARGET_VECTOR_ELEN_64")
> - (VNx1SF "TARGET_VECTOR_ELEN_FP_32")
> + (VNx1QI "TARGET_MIN_VLEN < 128") VNx2QI VNx4QI VNx8QI (VNx16QI "TARGET_MIN_VLEN >= 128")
> + (VNx1HI "TARGET_MIN_VLEN < 128") VNx2HI VNx4HI (VNx8HI "TARGET_MIN_VLEN >= 128")
> + (VNx1SI "TARGET_MIN_VLEN < 128") VNx2SI (VNx4SI "TARGET_MIN_VLEN >= 128")
> + (VNx1DI "TARGET_VECTOR_ELEN_64") (VNx2DI "TARGET_VECTOR_ELEN_64 && TARGET_MIN_VLEN >= 128")
> + (VNx1SF "TARGET_VECTOR_ELEN_FP_32 && TARGET_MIN_VLEN < 128")
> (VNx2SF "TARGET_VECTOR_ELEN_FP_32")
> + (VNx4SF "TARGET_VECTOR_ELEN_FP_32 && TARGET_MIN_VLEN >= 128")
> (VNx1DF "TARGET_VECTOR_ELEN_FP_64")
> + (VNx2DF "TARGET_VECTOR_ELEN_FP_32 && TARGET_MIN_VLEN >= 128")
> ])
>
> (define_mode_iterator VLMULEXT16 [
> - VNx1QI VNx2QI VNx4QI
> - VNx1HI VNx2HI
> - VNx1SI
> - (VNx1SF "TARGET_VECTOR_ELEN_FP_32")
> + (VNx1QI "TARGET_MIN_VLEN < 128") VNx2QI VNx4QI (VNx8QI "TARGET_MIN_VLEN >= 128")
> + (VNx1HI "TARGET_MIN_VLEN < 128") VNx2HI (VNx4HI "TARGET_MIN_VLEN >= 128")
> + (VNx1SI "TARGET_MIN_VLEN < 128") (VNx2SI "TARGET_MIN_VLEN >= 128")
> + (VNx1SF "TARGET_VECTOR_ELEN_FP_32 && TARGET_MIN_VLEN < 128")
> + (VNx2SF "TARGET_VECTOR_ELEN_FP_32 && TARGET_MIN_VLEN >= 128")
> ])
>
> (define_mode_iterator VLMULEXT32 [
> - VNx1QI VNx2QI
> - VNx1HI
> + (VNx1QI "TARGET_MIN_VLEN < 128") VNx2QI (VNx4QI "TARGET_MIN_VLEN >= 128")
> + (VNx1HI "TARGET_MIN_VLEN < 128")
> ])
>
> (define_mode_iterator VLMULEXT64 [
> - VNx1QI
> + (VNx1QI "TARGET_MIN_VLEN < 128") (VNx2QI "TARGET_MIN_VLEN >= 128")
> ])
>
> (define_mode_iterator VEI16 [
> - VNx1QI VNx2QI VNx4QI VNx8QI VNx16QI VNx32QI
> - VNx1HI VNx2HI VNx4HI VNx8HI VNx16HI (VNx32HI "TARGET_MIN_VLEN > 32")
> - VNx1SI VNx2SI VNx4SI VNx8SI (VNx16SI "TARGET_MIN_VLEN > 32")
> - (VNx1DI "TARGET_VECTOR_ELEN_64") (VNx2DI "TARGET_VECTOR_ELEN_64")
> - (VNx4DI "TARGET_VECTOR_ELEN_64") (VNx8DI "TARGET_VECTOR_ELEN_64")
> - (VNx1SF "TARGET_VECTOR_ELEN_FP_32")
> + (VNx1QI "TARGET_MIN_VLEN < 128") VNx2QI VNx4QI VNx8QI VNx16QI VNx32QI (VNx64QI "TARGET_MIN_VLEN >= 128")
> + (VNx1HI "TARGET_MIN_VLEN < 128") VNx2HI VNx4HI VNx8HI VNx16HI (VNx32HI "TARGET_MIN_VLEN > 32") (VNx64HI "TARGET_MIN_VLEN >= 128")
> + (VNx1SI "TARGET_MIN_VLEN < 128") VNx2SI VNx4SI VNx8SI (VNx16SI "TARGET_MIN_VLEN > 32") (VNx32SI "TARGET_MIN_VLEN >= 128")
> + (VNx1DI "TARGET_VECTOR_ELEN_64 && TARGET_MIN_VLEN < 128") (VNx2DI "TARGET_VECTOR_ELEN_64")
> + (VNx4DI "TARGET_VECTOR_ELEN_64") (VNx8DI "TARGET_VECTOR_ELEN_64") (VNx16DI "TARGET_VECTOR_ELEN_64 && TARGET_MIN_VLEN >= 128")
> + (VNx1SF "TARGET_VECTOR_ELEN_FP_32 && TARGET_MIN_VLEN < 128")
> (VNx2SF "TARGET_VECTOR_ELEN_FP_32")
> (VNx4SF "TARGET_VECTOR_ELEN_FP_32")
> (VNx8SF "TARGET_VECTOR_ELEN_FP_32")
> (VNx16SF "TARGET_VECTOR_ELEN_FP_32 && TARGET_MIN_VLEN > 32")
> - (VNx1DF "TARGET_VECTOR_ELEN_FP_64")
> + (VNx32SF "TARGET_VECTOR_ELEN_FP_32 && TARGET_MIN_VLEN >= 128")
> + (VNx1DF "TARGET_VECTOR_ELEN_FP_64 && TARGET_MIN_VLEN < 128")
> (VNx2DF "TARGET_VECTOR_ELEN_FP_64")
> (VNx4DF "TARGET_VECTOR_ELEN_FP_64")
> (VNx8DF "TARGET_VECTOR_ELEN_FP_64")
> + (VNx16DF "TARGET_VECTOR_ELEN_FP_64 && TARGET_MIN_VLEN >= 128")
> ])
>
> (define_mode_iterator VI [
> - VNx1QI VNx2QI VNx4QI VNx8QI VNx16QI VNx32QI (VNx64QI "TARGET_MIN_VLEN > 32")
> - VNx1HI VNx2HI VNx4HI VNx8HI VNx16HI (VNx32HI "TARGET_MIN_VLEN > 32")
> - VNx1SI VNx2SI VNx4SI VNx8SI (VNx16SI "TARGET_MIN_VLEN > 32")
> - (VNx1DI "TARGET_VECTOR_ELEN_64") (VNx2DI "TARGET_VECTOR_ELEN_64")
> - (VNx4DI "TARGET_VECTOR_ELEN_64") (VNx8DI "TARGET_VECTOR_ELEN_64")
> + (VNx1QI "TARGET_MIN_VLEN < 128") VNx2QI VNx4QI VNx8QI VNx16QI VNx32QI (VNx64QI "TARGET_MIN_VLEN > 32") (VNx128QI "TARGET_MIN_VLEN >= 128")
> + (VNx1HI "TARGET_MIN_VLEN < 128") VNx2HI VNx4HI VNx8HI VNx16HI (VNx32HI "TARGET_MIN_VLEN > 32") (VNx64HI "TARGET_MIN_VLEN >= 128")
> + (VNx1SI "TARGET_MIN_VLEN < 128") VNx2SI VNx4SI VNx8SI (VNx16SI "TARGET_MIN_VLEN > 32") (VNx32SI "TARGET_MIN_VLEN >= 128")
> + (VNx1DI "TARGET_VECTOR_ELEN_64 && TARGET_MIN_VLEN < 128") (VNx2DI "TARGET_VECTOR_ELEN_64")
> + (VNx4DI "TARGET_VECTOR_ELEN_64") (VNx8DI "TARGET_VECTOR_ELEN_64") (VNx16DI "TARGET_VECTOR_ELEN_64 && TARGET_MIN_VLEN >= 128")
> +])
> +
> +(define_mode_iterator VI_ZVE64 [
> + VNx1QI VNx2QI VNx4QI VNx8QI VNx16QI VNx32QI VNx64QI
> + VNx1HI VNx2HI VNx4HI VNx8HI VNx16HI VNx32HI
> + VNx1SI VNx2SI VNx4SI VNx8SI VNx16SI
> + VNx1DI VNx2DI VNx4DI VNx8DI
> ])
>
> (define_mode_iterator VI_ZVE32 [
> @@ -243,9 +267,15 @@ (define_mode_iterator VI_ZVE32 [
> ])
>
> (define_mode_iterator VWI [
> - VNx1QI VNx2QI VNx4QI VNx8QI VNx16QI VNx32QI (VNx64QI "TARGET_MIN_VLEN > 32")
> - VNx1HI VNx2HI VNx4HI VNx8HI VNx16HI (VNx32HI "TARGET_MIN_VLEN > 32")
> - VNx1SI VNx2SI VNx4SI VNx8SI (VNx16SI "TARGET_MIN_VLEN > 32")
> + (VNx1QI "TARGET_MIN_VLEN < 128") VNx2QI VNx4QI VNx8QI VNx16QI VNx32QI (VNx64QI "TARGET_MIN_VLEN > 32") (VNx128QI "TARGET_MIN_VLEN >= 128")
> + (VNx1HI "TARGET_MIN_VLEN < 128") VNx2HI VNx4HI VNx8HI VNx16HI (VNx32HI "TARGET_MIN_VLEN > 32") (VNx64HI "TARGET_MIN_VLEN >= 128")
> + (VNx1SI "TARGET_MIN_VLEN < 128") VNx2SI VNx4SI VNx8SI (VNx16SI "TARGET_MIN_VLEN > 32") (VNx32SI "TARGET_MIN_VLEN >= 128")
> +])
> +
> +(define_mode_iterator VWI_ZVE64 [
> + VNx1QI VNx2QI VNx4QI VNx8QI VNx16QI VNx32QI VNx64QI
> + VNx1HI VNx2HI VNx4HI VNx8HI VNx16HI VNx32HI
> + VNx1SI VNx2SI VNx4SI VNx8SI VNx16SI
> ])
>
> (define_mode_iterator VWI_ZVE32 [
> @@ -254,15 +284,22 @@ (define_mode_iterator VWI_ZVE32 [
> ])
>
> (define_mode_iterator VF [
> - (VNx1SF "TARGET_VECTOR_ELEN_FP_32")
> + (VNx1SF "TARGET_VECTOR_ELEN_FP_32 && TARGET_MIN_VLEN < 128")
> (VNx2SF "TARGET_VECTOR_ELEN_FP_32")
> (VNx4SF "TARGET_VECTOR_ELEN_FP_32")
> (VNx8SF "TARGET_VECTOR_ELEN_FP_32")
> (VNx16SF "TARGET_VECTOR_ELEN_FP_32 && TARGET_MIN_VLEN > 32")
> - (VNx1DF "TARGET_VECTOR_ELEN_FP_64")
> + (VNx32SF "TARGET_VECTOR_ELEN_FP_32 && TARGET_MIN_VLEN >= 128")
> + (VNx1DF "TARGET_VECTOR_ELEN_FP_64 && TARGET_MIN_VLEN < 128")
> (VNx2DF "TARGET_VECTOR_ELEN_FP_64")
> (VNx4DF "TARGET_VECTOR_ELEN_FP_64")
> (VNx8DF "TARGET_VECTOR_ELEN_FP_64")
> + (VNx16DF "TARGET_VECTOR_ELEN_FP_64 && TARGET_MIN_VLEN >= 128")
> +])
> +
> +(define_mode_iterator VF_ZVE64 [
> + VNx1SF VNx2SF VNx4SF VNx8SF VNx16SF
> + VNx1DF VNx2DF VNx4DF VNx8DF
> ])
>
> (define_mode_iterator VF_ZVE32 [
> @@ -273,38 +310,40 @@ (define_mode_iterator VF_ZVE32 [
> ])
>
> (define_mode_iterator VWF [
> - VNx1SF VNx2SF VNx4SF VNx8SF (VNx16SF "TARGET_MIN_VLEN > 32")
> + (VNx1SF "TARGET_MIN_VLEN < 128") VNx2SF VNx4SF VNx8SF (VNx16SF "TARGET_MIN_VLEN > 32") (VNx32SF "TARGET_MIN_VLEN >= 128")
> +])
> +
> +(define_mode_iterator VWF_ZVE64 [
> + VNx1SF VNx2SF VNx4SF VNx8SF VNx16SF
> ])
>
> (define_mode_iterator VFULLI [
> - VNx1QI VNx2QI VNx4QI VNx8QI VNx16QI VNx32QI (VNx64QI "TARGET_MIN_VLEN > 32")
> - VNx1HI VNx2HI VNx4HI VNx8HI VNx16HI (VNx32HI "TARGET_MIN_VLEN > 32")
> - VNx1SI VNx2SI VNx4SI VNx8SI (VNx16SI "TARGET_MIN_VLEN > 32")
> - (VNx1DI "TARGET_FULL_V") (VNx2DI "TARGET_FULL_V")
> - (VNx4DI "TARGET_FULL_V") (VNx8DI "TARGET_FULL_V")
> + (VNx1QI "!TARGET_FULL_V") VNx2QI VNx4QI VNx8QI VNx16QI VNx32QI (VNx64QI "TARGET_MIN_VLEN > 32") (VNx128QI "TARGET_FULL_V")
> + (VNx1HI "!TARGET_FULL_V") VNx2HI VNx4HI VNx8HI VNx16HI (VNx32HI "TARGET_MIN_VLEN > 32") (VNx64HI "TARGET_FULL_V")
> + (VNx1SI "!TARGET_FULL_V") VNx2SI VNx4SI VNx8SI (VNx16SI "TARGET_MIN_VLEN > 32") (VNx32SI "TARGET_FULL_V")
> + (VNx2DI "TARGET_FULL_V") (VNx4DI "TARGET_FULL_V") (VNx8DI "TARGET_FULL_V") (VNx16DI "TARGET_FULL_V")
> ])
>
> (define_mode_iterator VI_QHS [
> - VNx1QI VNx2QI VNx4QI VNx8QI VNx16QI VNx32QI (VNx64QI "TARGET_MIN_VLEN > 32")
> - VNx1HI VNx2HI VNx4HI VNx8HI VNx16HI (VNx32HI "TARGET_MIN_VLEN > 32")
> - VNx1SI VNx2SI VNx4SI VNx8SI (VNx16SI "TARGET_MIN_VLEN > 32")
> + (VNx1QI "TARGET_MIN_VLEN < 128") VNx2QI VNx4QI VNx8QI VNx16QI VNx32QI (VNx64QI "TARGET_MIN_VLEN > 32") (VNx128QI "TARGET_MIN_VLEN >= 128")
> + (VNx1HI "TARGET_MIN_VLEN < 128") VNx2HI VNx4HI VNx8HI VNx16HI (VNx32HI "TARGET_MIN_VLEN > 32") (VNx64HI "TARGET_MIN_VLEN >= 128")
> + (VNx1SI "TARGET_MIN_VLEN < 128") VNx2SI VNx4SI VNx8SI (VNx16SI "TARGET_MIN_VLEN > 32") (VNx32SI "TARGET_MIN_VLEN >= 128")
> ])
>
> (define_mode_iterator VI_D [
> - (VNx1DI "TARGET_VECTOR_ELEN_64") (VNx2DI "TARGET_VECTOR_ELEN_64")
> - (VNx4DI "TARGET_VECTOR_ELEN_64") (VNx8DI "TARGET_VECTOR_ELEN_64")
> + (VNx1DI "TARGET_VECTOR_ELEN_64 && TARGET_MIN_VLEN < 128") (VNx2DI "TARGET_VECTOR_ELEN_64")
> + (VNx4DI "TARGET_VECTOR_ELEN_64") (VNx8DI "TARGET_VECTOR_ELEN_64") (VNx16DI "TARGET_VECTOR_ELEN_64 && TARGET_MIN_VLEN >= 128")
> ])
>
> (define_mode_iterator VFULLI_D [
> - (VNx1DI "TARGET_FULL_V") (VNx2DI "TARGET_FULL_V")
> - (VNx4DI "TARGET_FULL_V") (VNx8DI "TARGET_FULL_V")
> + (VNx2DI "TARGET_FULL_V") (VNx4DI "TARGET_FULL_V") (VNx8DI "TARGET_FULL_V") (VNx16DI "TARGET_FULL_V")
> ])
>
> (define_mode_iterator VNX1_QHSD [
> - VNx1QI VNx1HI VNx1SI
> - (VNx1DI "TARGET_VECTOR_ELEN_64")
> - (VNx1SF "TARGET_VECTOR_ELEN_FP_32")
> - (VNx1DF "TARGET_VECTOR_ELEN_FP_64")
> + (VNx1QI "TARGET_MIN_VLEN < 128") (VNx1HI "TARGET_MIN_VLEN < 128") (VNx1SI "TARGET_MIN_VLEN < 128")
> + (VNx1DI "TARGET_VECTOR_ELEN_64 && TARGET_MIN_VLEN < 128")
> + (VNx1SF "TARGET_VECTOR_ELEN_FP_32 && TARGET_MIN_VLEN < 128")
> + (VNx1DF "TARGET_VECTOR_ELEN_FP_64 && TARGET_MIN_VLEN < 128")
> ])
>
> (define_mode_iterator VNX2_QHSD [
> @@ -331,18 +370,24 @@ (define_mode_iterator VNX8_QHSD [
> (define_mode_iterator VNX16_QHS [
> VNx16QI VNx16HI (VNx16SI "TARGET_MIN_VLEN > 32")
> (VNx16SF "TARGET_VECTOR_ELEN_FP_32 && TARGET_MIN_VLEN > 32")
> + (VNx16DI "TARGET_VECTOR_ELEN_64 && TARGET_MIN_VLEN >= 128") (VNx16DF "TARGET_VECTOR_ELEN_FP_64 && TARGET_MIN_VLEN >= 128")
> ])
>
> -(define_mode_iterator VNX32_QH [
> - VNx32QI (VNx32HI "TARGET_MIN_VLEN > 32")
> +(define_mode_iterator VNX32_QHS [
> + VNx32QI (VNx32HI "TARGET_MIN_VLEN > 32") (VNx32SI "TARGET_MIN_VLEN >= 128") (VNx32SF "TARGET_VECTOR_ELEN_FP_32 && TARGET_MIN_VLEN >= 128")
> ])
>
> -(define_mode_iterator VNX64_Q [
> +(define_mode_iterator VNX64_QH [
> (VNx64QI "TARGET_MIN_VLEN > 32")
> + (VNx64HI "TARGET_MIN_VLEN >= 128")
> +])
> +
> +(define_mode_iterator VNX128_Q [
> + (VNx128QI "TARGET_MIN_VLEN >= 128")
> ])
>
> (define_mode_iterator VNX1_QHSDI [
> - VNx1QI VNx1HI VNx1SI
> + (VNx1QI "TARGET_MIN_VLEN < 128") (VNx1HI "TARGET_MIN_VLEN < 128") (VNx1SI "TARGET_MIN_VLEN < 128")
> (VNx1DI "TARGET_64BIT && TARGET_MIN_VLEN > 32")
> ])
>
> @@ -362,298 +407,325 @@ (define_mode_iterator VNX8_QHSDI [
> ])
>
> (define_mode_iterator VNX16_QHSI [
> - VNx16QI VNx16HI (VNx16SI "TARGET_MIN_VLEN > 32")
> + VNx16QI VNx16HI (VNx16SI "TARGET_MIN_VLEN > 32") (VNx16DI "TARGET_MIN_VLEN >= 128")
> ])
>
> -(define_mode_iterator VNX32_QHI [
> - VNx32QI (VNx32HI "TARGET_MIN_VLEN > 32")
> +(define_mode_iterator VNX32_QHSI [
> + VNx32QI (VNx32HI "TARGET_MIN_VLEN > 32") (VNx32SI "TARGET_MIN_VLEN >= 128")
> +])
> +
> +(define_mode_iterator VNX64_QHI [
> + VNx64QI (VNx64HI "TARGET_MIN_VLEN >= 128")
> ])
>
> (define_mode_iterator V_WHOLE [
> - (VNx4QI "TARGET_MIN_VLEN == 32") VNx8QI VNx16QI VNx32QI (VNx64QI "TARGET_MIN_VLEN > 32")
> - (VNx2HI "TARGET_MIN_VLEN == 32") VNx4HI VNx8HI VNx16HI (VNx32HI "TARGET_MIN_VLEN > 32")
> - (VNx1SI "TARGET_MIN_VLEN == 32") VNx2SI VNx4SI VNx8SI (VNx16SI "TARGET_MIN_VLEN > 32")
> - (VNx1DI "TARGET_VECTOR_ELEN_64") (VNx2DI "TARGET_VECTOR_ELEN_64")
> - (VNx4DI "TARGET_VECTOR_ELEN_64") (VNx8DI "TARGET_VECTOR_ELEN_64")
> + (VNx4QI "TARGET_MIN_VLEN == 32") VNx8QI VNx16QI VNx32QI (VNx64QI "TARGET_MIN_VLEN > 32") (VNx128QI "TARGET_MIN_VLEN >= 128")
> + (VNx2HI "TARGET_MIN_VLEN == 32") VNx4HI VNx8HI VNx16HI (VNx32HI "TARGET_MIN_VLEN > 32") (VNx64HI "TARGET_MIN_VLEN >= 128")
> + (VNx1SI "TARGET_MIN_VLEN == 32") VNx2SI VNx4SI VNx8SI (VNx16SI "TARGET_MIN_VLEN > 32") (VNx32SI "TARGET_MIN_VLEN >= 128")
> + (VNx1DI "TARGET_VECTOR_ELEN_64 && TARGET_MIN_VLEN < 128") (VNx2DI "TARGET_VECTOR_ELEN_64")
> + (VNx4DI "TARGET_VECTOR_ELEN_64") (VNx8DI "TARGET_VECTOR_ELEN_64") (VNx16DI "TARGET_MIN_VLEN >= 128")
> (VNx1SF "TARGET_VECTOR_ELEN_FP_32 && TARGET_MIN_VLEN == 32")
> (VNx2SF "TARGET_VECTOR_ELEN_FP_32")
> (VNx4SF "TARGET_VECTOR_ELEN_FP_32")
> (VNx8SF "TARGET_VECTOR_ELEN_FP_32")
> (VNx16SF "TARGET_VECTOR_ELEN_FP_32 && TARGET_MIN_VLEN > 32")
> - (VNx1DF "TARGET_VECTOR_ELEN_FP_64")
> + (VNx32SF "TARGET_VECTOR_ELEN_FP_32 && TARGET_MIN_VLEN >= 128")
> + (VNx1DF "TARGET_VECTOR_ELEN_FP_64 && TARGET_MIN_VLEN < 128")
> (VNx2DF "TARGET_VECTOR_ELEN_FP_64")
> (VNx4DF "TARGET_VECTOR_ELEN_FP_64")
> (VNx8DF "TARGET_VECTOR_ELEN_FP_64")
> + (VNx16DF "TARGET_VECTOR_ELEN_FP_64 && TARGET_MIN_VLEN >= 128")
> ])
>
> (define_mode_iterator V_FRACT [
> - VNx1QI VNx2QI (VNx4QI "TARGET_MIN_VLEN > 32")
> - VNx1HI (VNx2HI "TARGET_MIN_VLEN > 32")
> - (VNx1SI "TARGET_MIN_VLEN > 32")
> + (VNx1QI "TARGET_MIN_VLEN < 128") VNx2QI (VNx4QI "TARGET_MIN_VLEN > 32") (VNx8QI "TARGET_MIN_VLEN >= 128")
> + (VNx1HI "TARGET_MIN_VLEN < 128") (VNx2HI "TARGET_MIN_VLEN > 32") (VNx4HI "TARGET_MIN_VLEN >= 128")
> + (VNx1SI "TARGET_MIN_VLEN > 32 && TARGET_MIN_VLEN < 128") (VNx2SI "TARGET_MIN_VLEN >= 128")
> (VNx1SF "TARGET_VECTOR_ELEN_FP_32 && TARGET_MIN_VLEN > 32")
> + (VNx2SF "TARGET_VECTOR_ELEN_FP_32 && TARGET_MIN_VLEN >= 128")
> ])
>
> (define_mode_iterator VB [
> - VNx1BI VNx2BI VNx4BI VNx8BI VNx16BI VNx32BI
> - (VNx64BI "TARGET_MIN_VLEN > 32")
> + (VNx1BI "TARGET_MIN_VLEN < 128") VNx2BI VNx4BI VNx8BI VNx16BI VNx32BI
> + (VNx64BI "TARGET_MIN_VLEN > 32") (VNx128BI "TARGET_MIN_VLEN >= 128")
> ])
>
> (define_mode_iterator VWEXTI [
> - VNx1HI VNx2HI VNx4HI VNx8HI VNx16HI (VNx32HI "TARGET_MIN_VLEN > 32")
> - VNx1SI VNx2SI VNx4SI VNx8SI (VNx16SI "TARGET_MIN_VLEN > 32")
> - (VNx1DI "TARGET_VECTOR_ELEN_64") (VNx2DI "TARGET_VECTOR_ELEN_64")
> + (VNx1HI "TARGET_MIN_VLEN < 128") VNx2HI VNx4HI VNx8HI VNx16HI (VNx32HI "TARGET_MIN_VLEN > 32") (VNx64HI "TARGET_MIN_VLEN >= 128")
> + (VNx1SI "TARGET_MIN_VLEN < 128") VNx2SI VNx4SI VNx8SI (VNx16SI "TARGET_MIN_VLEN > 32") (VNx32SI "TARGET_MIN_VLEN >= 128")
> + (VNx1DI "TARGET_VECTOR_ELEN_64 && TARGET_MIN_VLEN < 128") (VNx2DI "TARGET_VECTOR_ELEN_64")
> (VNx4DI "TARGET_VECTOR_ELEN_64") (VNx8DI "TARGET_VECTOR_ELEN_64")
> + (VNx16DI "TARGET_VECTOR_ELEN_64 && TARGET_MIN_VLEN >= 128")
> ])
>
> (define_mode_iterator VWEXTF [
> - (VNx1DF "TARGET_VECTOR_ELEN_FP_64")
> + (VNx1DF "TARGET_VECTOR_ELEN_FP_64 && TARGET_MIN_VLEN < 128")
> (VNx2DF "TARGET_VECTOR_ELEN_FP_64")
> (VNx4DF "TARGET_VECTOR_ELEN_FP_64")
> (VNx8DF "TARGET_VECTOR_ELEN_FP_64")
> + (VNx16DF "TARGET_VECTOR_ELEN_FP_64 && TARGET_MIN_VLEN >= 128")
> ])
>
> (define_mode_iterator VWCONVERTI [
> - (VNx1DI "TARGET_VECTOR_ELEN_64 && TARGET_VECTOR_ELEN_FP_32")
> + (VNx1DI "TARGET_VECTOR_ELEN_64 && TARGET_VECTOR_ELEN_FP_32 && TARGET_MIN_VLEN < 128")
> (VNx2DI "TARGET_VECTOR_ELEN_64 && TARGET_VECTOR_ELEN_FP_32")
> (VNx4DI "TARGET_VECTOR_ELEN_64 && TARGET_VECTOR_ELEN_FP_32")
> (VNx8DI "TARGET_VECTOR_ELEN_64 && TARGET_VECTOR_ELEN_FP_32")
> + (VNx16DI "TARGET_VECTOR_ELEN_64 && TARGET_VECTOR_ELEN_FP_32 && TARGET_MIN_VLEN >= 128")
> ])
>
> (define_mode_iterator VQEXTI [
> - VNx1SI VNx2SI VNx4SI VNx8SI (VNx16SI "TARGET_MIN_VLEN > 32")
> - (VNx1DI "TARGET_VECTOR_ELEN_64") (VNx2DI "TARGET_VECTOR_ELEN_64")
> + (VNx1SI "TARGET_MIN_VLEN < 128") VNx2SI VNx4SI VNx8SI (VNx16SI "TARGET_MIN_VLEN > 32") (VNx32SI "TARGET_MIN_VLEN >= 128")
> + (VNx1DI "TARGET_VECTOR_ELEN_64 && TARGET_MIN_VLEN < 128") (VNx2DI "TARGET_VECTOR_ELEN_64")
> (VNx4DI "TARGET_VECTOR_ELEN_64") (VNx8DI "TARGET_VECTOR_ELEN_64")
> + (VNx16DI "TARGET_VECTOR_ELEN_64 && TARGET_MIN_VLEN >= 128")
> ])
>
> (define_mode_iterator VOEXTI [
> - (VNx1DI "TARGET_VECTOR_ELEN_64") (VNx2DI "TARGET_VECTOR_ELEN_64")
> + (VNx1DI "TARGET_VECTOR_ELEN_64 && TARGET_MIN_VLEN < 128") (VNx2DI "TARGET_VECTOR_ELEN_64")
> (VNx4DI "TARGET_VECTOR_ELEN_64") (VNx8DI "TARGET_VECTOR_ELEN_64")
> + (VNx16DI "TARGET_VECTOR_ELEN_64 && TARGET_MIN_VLEN >= 128")
> ])
>
> (define_mode_attr VLMULX2 [
> - (VNx1QI "VNx2QI") (VNx2QI "VNx4QI") (VNx4QI "VNx8QI") (VNx8QI "VNx16QI") (VNx16QI "VNx32QI") (VNx32QI "VNx64QI")
> - (VNx1HI "VNx2HI") (VNx2HI "VNx4HI") (VNx4HI "VNx8HI") (VNx8HI "VNx16HI") (VNx16HI "VNx32HI")
> - (VNx1SI "VNx2SI") (VNx2SI "VNx4SI") (VNx4SI "VNx8SI") (VNx8SI "VNx16SI")
> - (VNx1DI "VNx2DI") (VNx2DI "VNx4DI") (VNx4DI "VNx8DI")
> - (VNx1SF "VNx2SF") (VNx2SF "VNx4SF") (VNx4SF "VNx8SF") (VNx8SF "VNx16SF")
> - (VNx1DF "VNx2DF") (VNx2DF "VNx4DF") (VNx4DF "VNx8DF")
> + (VNx1QI "VNx2QI") (VNx2QI "VNx4QI") (VNx4QI "VNx8QI") (VNx8QI "VNx16QI") (VNx16QI "VNx32QI") (VNx32QI "VNx64QI") (VNx64QI "VNx128QI")
> + (VNx1HI "VNx2HI") (VNx2HI "VNx4HI") (VNx4HI "VNx8HI") (VNx8HI "VNx16HI") (VNx16HI "VNx32HI") (VNx32HI "VNx64HI")
> + (VNx1SI "VNx2SI") (VNx2SI "VNx4SI") (VNx4SI "VNx8SI") (VNx8SI "VNx16SI") (VNx16SI "VNx32SI")
> + (VNx1DI "VNx2DI") (VNx2DI "VNx4DI") (VNx4DI "VNx8DI") (VNx8DI "VNx16DI")
> + (VNx1SF "VNx2SF") (VNx2SF "VNx4SF") (VNx4SF "VNx8SF") (VNx8SF "VNx16SF") (VNx16SF "VNx32SF")
> + (VNx1DF "VNx2DF") (VNx2DF "VNx4DF") (VNx4DF "VNx8DF") (VNx8DF "VNx16DF")
> ])
>
> (define_mode_attr VLMULX4 [
> - (VNx1QI "VNx4QI") (VNx2QI "VNx8QI") (VNx4QI "VNx16QI") (VNx8QI "VNx32QI") (VNx16QI "VNx64QI")
> - (VNx1HI "VNx4HI") (VNx2HI "VNx8HI") (VNx4HI "VNx16HI") (VNx8HI "VNx32HI")
> - (VNx1SI "VNx4SI") (VNx2SI "VNx8SI") (VNx4SI "VNx16SI")
> - (VNx1DI "VNx4DI") (VNx2DI "VNx8DI")
> - (VNx1SF "VNx4SF") (VNx2SF "VNx8SF") (VNx4SF "VNx16SF")
> - (VNx1DF "VNx4DF") (VNx2DF "VNx8DF")
> + (VNx1QI "VNx4QI") (VNx2QI "VNx8QI") (VNx4QI "VNx16QI") (VNx8QI "VNx32QI") (VNx16QI "VNx64QI") (VNx32QI "VNx128QI")
> + (VNx1HI "VNx4HI") (VNx2HI "VNx8HI") (VNx4HI "VNx16HI") (VNx8HI "VNx32HI") (VNx16HI "VNx64HI")
> + (VNx1SI "VNx4SI") (VNx2SI "VNx8SI") (VNx4SI "VNx16SI") (VNx8SI "VNx32SI")
> + (VNx1DI "VNx4DI") (VNx2DI "VNx8DI") (VNx4DI "VNx16DI")
> + (VNx1SF "VNx4SF") (VNx2SF "VNx8SF") (VNx4SF "VNx16SF") (VNx8SF "VNx32SF")
> + (VNx1DF "VNx4DF") (VNx2DF "VNx8DF") (VNx4DF "VNx16DF")
> ])
>
> (define_mode_attr VLMULX8 [
> - (VNx1QI "VNx8QI") (VNx2QI "VNx16QI") (VNx4QI "VNx32QI") (VNx8QI "VNx64QI")
> - (VNx1HI "VNx8HI") (VNx2HI "VNx16HI") (VNx4HI "VNx32HI")
> - (VNx1SI "VNx8SI") (VNx2SI "VNx16SI")
> - (VNx1DI "VNx8DI")
> - (VNx1SF "VNx8SF") (VNx2SF "VNx16SF")
> - (VNx1DF "VNx8DF")
> + (VNx1QI "VNx8QI") (VNx2QI "VNx16QI") (VNx4QI "VNx32QI") (VNx8QI "VNx64QI") (VNx16QI "VNx128QI")
> + (VNx1HI "VNx8HI") (VNx2HI "VNx16HI") (VNx4HI "VNx32HI") (VNx8HI "VNx64HI")
> + (VNx1SI "VNx8SI") (VNx2SI "VNx16SI") (VNx4SI "VNx32SI")
> + (VNx1DI "VNx8DI") (VNx2DI "VNx16DI")
> + (VNx1SF "VNx8SF") (VNx2SF "VNx16SF") (VNx4SF "VNx32SF")
> + (VNx1DF "VNx8DF") (VNx2DF "VNx16DF")
> ])
>
> (define_mode_attr VLMULX16 [
> - (VNx1QI "VNx16QI") (VNx2QI "VNx32QI") (VNx4QI "VNx64QI")
> - (VNx1HI "VNx16HI") (VNx2HI "VNx32HI")
> - (VNx1SI "VNx16SI")
> - (VNx1SF "VNx16SF")
> + (VNx1QI "VNx16QI") (VNx2QI "VNx32QI") (VNx4QI "VNx64QI") (VNx8QI "VNx128QI")
> + (VNx1HI "VNx16HI") (VNx2HI "VNx32HI") (VNx4HI "VNx64HI")
> + (VNx1SI "VNx16SI") (VNx2SI "VNx32SI")
> + (VNx1SF "VNx16SF") (VNx2SF "VNx32SF")
> ])
>
> (define_mode_attr VLMULX32 [
> - (VNx1QI "VNx32QI") (VNx2QI "VNx64QI")
> - (VNx1HI "VNx32HI")
> + (VNx1QI "VNx32QI") (VNx2QI "VNx64QI") (VNx4QI "VNx128QI")
> + (VNx1HI "VNx32HI") (VNx2HI "VNx64HI")
> ])
>
> (define_mode_attr VLMULX64 [
> - (VNx1QI "VNx64QI")
> + (VNx1QI "VNx64QI") (VNx2QI "VNx128QI")
> ])
>
> (define_mode_attr VINDEX [
> (VNx1QI "VNx1QI") (VNx2QI "VNx2QI") (VNx4QI "VNx4QI") (VNx8QI "VNx8QI")
> - (VNx16QI "VNx16QI") (VNx32QI "VNx32QI") (VNx64QI "VNx64QI")
> + (VNx16QI "VNx16QI") (VNx32QI "VNx32QI") (VNx64QI "VNx64QI") (VNx128QI "VNx128QI")
> (VNx1HI "VNx1HI") (VNx2HI "VNx2HI") (VNx4HI "VNx4HI") (VNx8HI "VNx8HI")
> - (VNx16HI "VNx16HI") (VNx32HI "VNx32HI")
> + (VNx16HI "VNx16HI") (VNx32HI "VNx32HI") (VNx64HI "VNx64HI")
> (VNx1SI "VNx1SI") (VNx2SI "VNx2SI") (VNx4SI "VNx4SI") (VNx8SI "VNx8SI")
> - (VNx16SI "VNx16SI")
> - (VNx1DI "VNx1DI") (VNx2DI "VNx2DI") (VNx4DI "VNx4DI") (VNx8DI "VNx8DI")
> + (VNx16SI "VNx16SI") (VNx32SI "VNx32SI")
> + (VNx1DI "VNx1DI") (VNx2DI "VNx2DI") (VNx4DI "VNx4DI") (VNx8DI "VNx8DI") (VNx16DI "VNx16DI")
> (VNx1SF "VNx1SI") (VNx2SF "VNx2SI") (VNx4SF "VNx4SI") (VNx8SF "VNx8SI")
> - (VNx16SF "VNx16SI")
> - (VNx1DF "VNx1DI") (VNx2DF "VNx2DI") (VNx4DF "VNx4DI") (VNx8DF "VNx8DI")
> + (VNx16SF "VNx16SI") (VNx32SF "VNx32SI")
> + (VNx1DF "VNx1DI") (VNx2DF "VNx2DI") (VNx4DF "VNx4DI") (VNx8DF "VNx8DI") (VNx16DF "VNx16DI")
> ])
>
> (define_mode_attr VINDEXEI16 [
> (VNx1QI "VNx1HI") (VNx2QI "VNx2HI") (VNx4QI "VNx4HI") (VNx8QI "VNx8HI")
> - (VNx16QI "VNx16HI") (VNx32QI "VNx32HI")
> + (VNx16QI "VNx16HI") (VNx32QI "VNx32HI") (VNx64QI "VNx64HI")
> (VNx1HI "VNx1HI") (VNx2HI "VNx2HI") (VNx4HI "VNx4HI") (VNx8HI "VNx8HI")
> - (VNx16HI "VNx16HI") (VNx32HI "VNx32HI")
> + (VNx16HI "VNx16HI") (VNx32HI "VNx32HI") (VNx64HI "VNx64HI")
> (VNx1SI "VNx1HI") (VNx2SI "VNx2HI") (VNx4SI "VNx4HI") (VNx8SI "VNx8HI")
> - (VNx16SI "VNx16HI")
> - (VNx1DI "VNx1HI") (VNx2DI "VNx2HI") (VNx4DI "VNx4HI") (VNx8DI "VNx8HI")
> + (VNx16SI "VNx16HI") (VNx32SI "VNx32HI")
> + (VNx1DI "VNx1HI") (VNx2DI "VNx2HI") (VNx4DI "VNx4HI") (VNx8DI "VNx8HI") (VNx16DI "VNx16HI")
> (VNx1SF "VNx1HI") (VNx2SF "VNx2HI") (VNx4SF "VNx4HI") (VNx8SF "VNx8HI")
> - (VNx16SF "VNx16HI")
> - (VNx1DF "VNx1HI") (VNx2DF "VNx2HI") (VNx4DF "VNx4HI") (VNx8DF "VNx8HI")
> + (VNx16SF "VNx16HI") (VNx32SF "VNx32HI")
> + (VNx1DF "VNx1HI") (VNx2DF "VNx2HI") (VNx4DF "VNx4HI") (VNx8DF "VNx8HI") (VNx16DF "VNx16HI")
> ])
>
> (define_mode_attr VM [
> - (VNx1QI "VNx1BI") (VNx2QI "VNx2BI") (VNx4QI "VNx4BI") (VNx8QI "VNx8BI") (VNx16QI "VNx16BI") (VNx32QI "VNx32BI") (VNx64QI "VNx64BI")
> - (VNx1HI "VNx1BI") (VNx2HI "VNx2BI") (VNx4HI "VNx4BI") (VNx8HI "VNx8BI") (VNx16HI "VNx16BI") (VNx32HI "VNx32BI")
> - (VNx1SI "VNx1BI") (VNx2SI "VNx2BI") (VNx4SI "VNx4BI") (VNx8SI "VNx8BI") (VNx16SI "VNx16BI")
> - (VNx1DI "VNx1BI") (VNx2DI "VNx2BI") (VNx4DI "VNx4BI") (VNx8DI "VNx8BI")
> - (VNx1SF "VNx1BI") (VNx2SF "VNx2BI") (VNx4SF "VNx4BI") (VNx8SF "VNx8BI") (VNx16SF "VNx16BI")
> - (VNx1DF "VNx1BI") (VNx2DF "VNx2BI") (VNx4DF "VNx4BI") (VNx8DF "VNx8BI")
> + (VNx1QI "VNx1BI") (VNx2QI "VNx2BI") (VNx4QI "VNx4BI") (VNx8QI "VNx8BI") (VNx16QI "VNx16BI") (VNx32QI "VNx32BI") (VNx64QI "VNx64BI") (VNx128QI "VNx128BI")
> + (VNx1HI "VNx1BI") (VNx2HI "VNx2BI") (VNx4HI "VNx4BI") (VNx8HI "VNx8BI") (VNx16HI "VNx16BI") (VNx32HI "VNx32BI") (VNx64HI "VNx64BI")
> + (VNx1SI "VNx1BI") (VNx2SI "VNx2BI") (VNx4SI "VNx4BI") (VNx8SI "VNx8BI") (VNx16SI "VNx16BI") (VNx32SI "VNx32BI")
> + (VNx1DI "VNx1BI") (VNx2DI "VNx2BI") (VNx4DI "VNx4BI") (VNx8DI "VNx8BI") (VNx16DI "VNx16BI")
> + (VNx1SF "VNx1BI") (VNx2SF "VNx2BI") (VNx4SF "VNx4BI") (VNx8SF "VNx8BI") (VNx16SF "VNx16BI") (VNx32SF "VNx32BI")
> + (VNx1DF "VNx1BI") (VNx2DF "VNx2BI") (VNx4DF "VNx4BI") (VNx8DF "VNx8BI") (VNx16DF "VNx16BI")
> ])
>
> (define_mode_attr vm [
> - (VNx1QI "vnx1bi") (VNx2QI "vnx2bi") (VNx4QI "vnx4bi") (VNx8QI "vnx8bi") (VNx16QI "vnx16bi") (VNx32QI "vnx32bi") (VNx64QI "vnx64bi")
> - (VNx1HI "vnx1bi") (VNx2HI "vnx2bi") (VNx4HI "vnx4bi") (VNx8HI "vnx8bi") (VNx16HI "vnx16bi") (VNx32HI "vnx32bi")
> - (VNx1SI "vnx1bi") (VNx2SI "vnx2bi") (VNx4SI "vnx4bi") (VNx8SI "vnx8bi") (VNx16SI "vnx16bi")
> - (VNx1DI "vnx1bi") (VNx2DI "vnx2bi") (VNx4DI "vnx4bi") (VNx8DI "vnx8bi")
> - (VNx1SF "vnx1bi") (VNx2SF "vnx2bi") (VNx4SF "vnx4bi") (VNx8SF "vnx8bi") (VNx16SF "vnx16bi")
> - (VNx1DF "vnx1bi") (VNx2DF "vnx2bi") (VNx4DF "vnx4bi") (VNx8DF "vnx8bi")
> + (VNx1QI "vnx1bi") (VNx2QI "vnx2bi") (VNx4QI "vnx4bi") (VNx8QI "vnx8bi") (VNx16QI "vnx16bi") (VNx32QI "vnx32bi") (VNx64QI "vnx64bi") (VNx128QI "vnx128bi")
> + (VNx1HI "vnx1bi") (VNx2HI "vnx2bi") (VNx4HI "vnx4bi") (VNx8HI "vnx8bi") (VNx16HI "vnx16bi") (VNx32HI "vnx32bi") (VNx64HI "vnx64bi")
> + (VNx1SI "vnx1bi") (VNx2SI "vnx2bi") (VNx4SI "vnx4bi") (VNx8SI "vnx8bi") (VNx16SI "vnx16bi") (VNx32SI "vnx32bi")
> + (VNx1DI "vnx1bi") (VNx2DI "vnx2bi") (VNx4DI "vnx4bi") (VNx8DI "vnx8bi") (VNx16DI "vnx16bi")
> + (VNx1SF "vnx1bi") (VNx2SF "vnx2bi") (VNx4SF "vnx4bi") (VNx8SF "vnx8bi") (VNx16SF "vnx16bi") (VNx32SF "vnx32bi")
> + (VNx1DF "vnx1bi") (VNx2DF "vnx2bi") (VNx4DF "vnx4bi") (VNx8DF "vnx8bi") (VNx16DF "vnx16bi")
> ])
>
> (define_mode_attr VEL [
> - (VNx1QI "QI") (VNx2QI "QI") (VNx4QI "QI") (VNx8QI "QI") (VNx16QI "QI") (VNx32QI "QI") (VNx64QI "QI")
> - (VNx1HI "HI") (VNx2HI "HI") (VNx4HI "HI") (VNx8HI "HI") (VNx16HI "HI") (VNx32HI "HI")
> - (VNx1SI "SI") (VNx2SI "SI") (VNx4SI "SI") (VNx8SI "SI") (VNx16SI "SI")
> - (VNx1DI "DI") (VNx2DI "DI") (VNx4DI "DI") (VNx8DI "DI")
> - (VNx1SF "SF") (VNx2SF "SF") (VNx4SF "SF") (VNx8SF "SF") (VNx16SF "SF")
> - (VNx1DF "DF") (VNx2DF "DF") (VNx4DF "DF") (VNx8DF "DF")
> + (VNx1QI "QI") (VNx2QI "QI") (VNx4QI "QI") (VNx8QI "QI") (VNx16QI "QI") (VNx32QI "QI") (VNx64QI "QI") (VNx128QI "QI")
> + (VNx1HI "HI") (VNx2HI "HI") (VNx4HI "HI") (VNx8HI "HI") (VNx16HI "HI") (VNx32HI "HI") (VNx64HI "HI")
> + (VNx1SI "SI") (VNx2SI "SI") (VNx4SI "SI") (VNx8SI "SI") (VNx16SI "SI") (VNx32SI "SI")
> + (VNx1DI "DI") (VNx2DI "DI") (VNx4DI "DI") (VNx8DI "DI") (VNx16DI "DI")
> + (VNx1SF "SF") (VNx2SF "SF") (VNx4SF "SF") (VNx8SF "SF") (VNx16SF "SF") (VNx32SF "SF")
> + (VNx1DF "DF") (VNx2DF "DF") (VNx4DF "DF") (VNx8DF "DF") (VNx16DF "DF")
> ])
>
> (define_mode_attr VSUBEL [
> - (VNx1HI "QI") (VNx2HI "QI") (VNx4HI "QI") (VNx8HI "QI") (VNx16HI "QI") (VNx32HI "QI")
> - (VNx1SI "HI") (VNx2SI "HI") (VNx4SI "HI") (VNx8SI "HI") (VNx16SI "HI")
> - (VNx1DI "SI") (VNx2DI "SI") (VNx4DI "SI") (VNx8DI "SI")
> - (VNx1SF "HF") (VNx2SF "HF") (VNx4SF "HF") (VNx8SF "HF") (VNx16SF "HF")
> - (VNx1DF "SF") (VNx2DF "SF") (VNx4DF "SF") (VNx8DF "SF")
> + (VNx1HI "QI") (VNx2HI "QI") (VNx4HI "QI") (VNx8HI "QI") (VNx16HI "QI") (VNx32HI "QI") (VNx64HI "QI")
> + (VNx1SI "HI") (VNx2SI "HI") (VNx4SI "HI") (VNx8SI "HI") (VNx16SI "HI") (VNx32SI "HI")
> + (VNx1DI "SI") (VNx2DI "SI") (VNx4DI "SI") (VNx8DI "SI") (VNx16DI "SI")
> + (VNx1SF "HF") (VNx2SF "HF") (VNx4SF "HF") (VNx8SF "HF") (VNx16SF "HF") (VNx32SF "HF")
> + (VNx1DF "SF") (VNx2DF "SF") (VNx4DF "SF") (VNx8DF "SF") (VNx16DF "SF")
> ])
>
> (define_mode_attr sew [
> - (VNx1QI "8") (VNx2QI "8") (VNx4QI "8") (VNx8QI "8") (VNx16QI "8") (VNx32QI "8") (VNx64QI "8")
> - (VNx1HI "16") (VNx2HI "16") (VNx4HI "16") (VNx8HI "16") (VNx16HI "16") (VNx32HI "16")
> - (VNx1SI "32") (VNx2SI "32") (VNx4SI "32") (VNx8SI "32") (VNx16SI "32")
> - (VNx1DI "64") (VNx2DI "64") (VNx4DI "64") (VNx8DI "64")
> - (VNx1SF "32") (VNx2SF "32") (VNx4SF "32") (VNx8SF "32") (VNx16SF "32")
> - (VNx1DF "64") (VNx2DF "64") (VNx4DF "64") (VNx8DF "64")
> + (VNx1QI "8") (VNx2QI "8") (VNx4QI "8") (VNx8QI "8") (VNx16QI "8") (VNx32QI "8") (VNx64QI "8") (VNx128QI "8")
> + (VNx1HI "16") (VNx2HI "16") (VNx4HI "16") (VNx8HI "16") (VNx16HI "16") (VNx32HI "16") (VNx64HI "16")
> + (VNx1SI "32") (VNx2SI "32") (VNx4SI "32") (VNx8SI "32") (VNx16SI "32") (VNx32SI "32")
> + (VNx1DI "64") (VNx2DI "64") (VNx4DI "64") (VNx8DI "64") (VNx16DI "64")
> + (VNx1SF "32") (VNx2SF "32") (VNx4SF "32") (VNx8SF "32") (VNx16SF "32") (VNx32SF "32")
> + (VNx1DF "64") (VNx2DF "64") (VNx4DF "64") (VNx8DF "64") (VNx16DF "64")
> ])
>
> (define_mode_attr double_trunc_sew [
> - (VNx1HI "8") (VNx2HI "8") (VNx4HI "8") (VNx8HI "8") (VNx16HI "8") (VNx32HI "8")
> - (VNx1SI "16") (VNx2SI "16") (VNx4SI "16") (VNx8SI "16") (VNx16SI "16")
> - (VNx1DI "32") (VNx2DI "32") (VNx4DI "32") (VNx8DI "32")
> - (VNx1SF "16") (VNx2SF "16") (VNx4SF "16") (VNx8SF "16") (VNx16SF "16")
> - (VNx1DF "32") (VNx2DF "32") (VNx4DF "32") (VNx8DF "32")
> + (VNx1HI "8") (VNx2HI "8") (VNx4HI "8") (VNx8HI "8") (VNx16HI "8") (VNx32HI "8") (VNx64HI "8")
> + (VNx1SI "16") (VNx2SI "16") (VNx4SI "16") (VNx8SI "16") (VNx16SI "16") (VNx32SI "16")
> + (VNx1DI "32") (VNx2DI "32") (VNx4DI "32") (VNx8DI "32") (VNx16DI "32")
> + (VNx1SF "16") (VNx2SF "16") (VNx4SF "16") (VNx8SF "16") (VNx16SF "16") (VNx32SF "16")
> + (VNx1DF "32") (VNx2DF "32") (VNx4DF "32") (VNx8DF "32") (VNx16DF "32")
> ])
>
> (define_mode_attr quad_trunc_sew [
> - (VNx1SI "8") (VNx2SI "8") (VNx4SI "8") (VNx8SI "8") (VNx16SI "8")
> - (VNx1DI "16") (VNx2DI "16") (VNx4DI "16") (VNx8DI "16")
> - (VNx1SF "8") (VNx2SF "8") (VNx4SF "8") (VNx8SF "8") (VNx16SF "8")
> - (VNx1DF "16") (VNx2DF "16") (VNx4DF "16") (VNx8DF "16")
> + (VNx1SI "8") (VNx2SI "8") (VNx4SI "8") (VNx8SI "8") (VNx16SI "8") (VNx32SI "8")
> + (VNx1DI "16") (VNx2DI "16") (VNx4DI "16") (VNx8DI "16") (VNx16DI "16")
> + (VNx1SF "8") (VNx2SF "8") (VNx4SF "8") (VNx8SF "8") (VNx16SF "8") (VNx32SF "8")
> + (VNx1DF "16") (VNx2DF "16") (VNx4DF "16") (VNx8DF "16") (VNx16DF "16")
> ])
>
> (define_mode_attr oct_trunc_sew [
> - (VNx1DI "8") (VNx2DI "8") (VNx4DI "8") (VNx8DI "8")
> - (VNx1DF "8") (VNx2DF "8") (VNx4DF "8") (VNx8DF "8")
> + (VNx1DI "8") (VNx2DI "8") (VNx4DI "8") (VNx8DI "8") (VNx16DI "8")
> + (VNx1DF "8") (VNx2DF "8") (VNx4DF "8") (VNx8DF "8") (VNx16DF "8")
> ])
>
> (define_mode_attr double_ext_sew [
> - (VNx1QI "16") (VNx2QI "16") (VNx4QI "16") (VNx8QI "16") (VNx16QI "16") (VNx32QI "16")
> - (VNx1HI "32") (VNx2HI "32") (VNx4HI "32") (VNx8HI "32") (VNx16HI "32")
> - (VNx1SI "64") (VNx2SI "64") (VNx4SI "64") (VNx8SI "64")
> - (VNx1SF "64") (VNx2SF "64") (VNx4SF "64") (VNx8SF "64")
> + (VNx1QI "16") (VNx2QI "16") (VNx4QI "16") (VNx8QI "16") (VNx16QI "16") (VNx32QI "16") (VNx64QI "16")
> + (VNx1HI "32") (VNx2HI "32") (VNx4HI "32") (VNx8HI "32") (VNx16HI "32") (VNx32HI "32")
> + (VNx1SI "64") (VNx2SI "64") (VNx4SI "64") (VNx8SI "64") (VNx16SI "64")
> + (VNx1SF "64") (VNx2SF "64") (VNx4SF "64") (VNx8SF "64") (VNx16SF "64")
> ])
>
> (define_mode_attr quad_ext_sew [
> - (VNx1QI "32") (VNx2QI "32") (VNx4QI "32") (VNx8QI "32") (VNx16QI "32")
> - (VNx1HI "64") (VNx2HI "64") (VNx4HI "64") (VNx8HI "64")
> + (VNx1QI "32") (VNx2QI "32") (VNx4QI "32") (VNx8QI "32") (VNx16QI "32") (VNx32QI "32")
> + (VNx1HI "64") (VNx2HI "64") (VNx4HI "64") (VNx8HI "64") (VNx16HI "64")
> ])
>
> (define_mode_attr oct_ext_sew [
> - (VNx1QI "64") (VNx2QI "64") (VNx4QI "64") (VNx8QI "64")
> + (VNx1QI "64") (VNx2QI "64") (VNx4QI "64") (VNx8QI "64") (VNx16QI "64")
> ])
>
> (define_mode_attr V_DOUBLE_TRUNC [
> (VNx1HI "VNx1QI") (VNx2HI "VNx2QI") (VNx4HI "VNx4QI") (VNx8HI "VNx8QI")
> - (VNx16HI "VNx16QI") (VNx32HI "VNx32QI")
> + (VNx16HI "VNx16QI") (VNx32HI "VNx32QI") (VNx64HI "VNx64QI")
> (VNx1SI "VNx1HI") (VNx2SI "VNx2HI") (VNx4SI "VNx4HI") (VNx8SI "VNx8HI")
> - (VNx16SI "VNx16HI")
> - (VNx1DI "VNx1SI") (VNx2DI "VNx2SI") (VNx4DI "VNx4SI") (VNx8DI "VNx8SI")
> - (VNx1DF "VNx1SF") (VNx2DF "VNx2SF") (VNx4DF "VNx4SF") (VNx8DF "VNx8SF")
> + (VNx16SI "VNx16HI") (VNx32SI "VNx32HI")
> + (VNx1DI "VNx1SI") (VNx2DI "VNx2SI") (VNx4DI "VNx4SI") (VNx8DI "VNx8SI") (VNx16DI "VNx16SI")
> + (VNx1DF "VNx1SF") (VNx2DF "VNx2SF") (VNx4DF "VNx4SF") (VNx8DF "VNx8SF") (VNx16DF "VNx16SF")
> ])
>
> (define_mode_attr V_QUAD_TRUNC [
> (VNx1SI "VNx1QI") (VNx2SI "VNx2QI") (VNx4SI "VNx4QI") (VNx8SI "VNx8QI")
> - (VNx16SI "VNx16QI")
> + (VNx16SI "VNx16QI") (VNx32SI "VNx32QI")
> (VNx1DI "VNx1HI") (VNx2DI "VNx2HI")
> - (VNx4DI "VNx4HI") (VNx8DI "VNx8HI")
> + (VNx4DI "VNx4HI") (VNx8DI "VNx8HI") (VNx16DI "VNx16HI")
> ])
>
> (define_mode_attr V_OCT_TRUNC [
> - (VNx1DI "VNx1QI") (VNx2DI "VNx2QI") (VNx4DI "VNx4QI") (VNx8DI "VNx8QI")
> + (VNx1DI "VNx1QI") (VNx2DI "VNx2QI") (VNx4DI "VNx4QI") (VNx8DI "VNx8QI") (VNx16DI "VNx16QI")
> ])
>
> (define_mode_attr VINDEX_DOUBLE_TRUNC [
> (VNx1HI "VNx1QI") (VNx2HI "VNx2QI") (VNx4HI "VNx4QI") (VNx8HI "VNx8QI")
> - (VNx16HI "VNx16QI") (VNx32HI "VNx32QI")
> + (VNx16HI "VNx16QI") (VNx32HI "VNx32QI") (VNx64HI "VNx64QI")
> (VNx1SI "VNx1HI") (VNx2SI "VNx2HI") (VNx4SI "VNx4HI") (VNx8SI "VNx8HI")
> - (VNx16SI "VNx16HI")
> + (VNx16SI "VNx16HI") (VNx32SI "VNx32HI")
> (VNx1SF "VNx1HI") (VNx2SF "VNx2HI") (VNx4SF "VNx4HI") (VNx8SF "VNx8HI")
> - (VNx16SF "VNx16HI")
> - (VNx1DI "VNx1SI") (VNx2DI "VNx2SI") (VNx4DI "VNx4SI") (VNx8DI "VNx8SI")
> - (VNx1DF "VNx1SI") (VNx2DF "VNx2SI") (VNx4DF "VNx4SI") (VNx8DF "VNx8SI")
> + (VNx16SF "VNx16HI") (VNx32SF "VNx32HI")
> + (VNx1DI "VNx1SI") (VNx2DI "VNx2SI") (VNx4DI "VNx4SI") (VNx8DI "VNx8SI") (VNx16DI "VNx16SI")
> + (VNx1DF "VNx1SI") (VNx2DF "VNx2SI") (VNx4DF "VNx4SI") (VNx8DF "VNx8SI") (VNx16DF "VNx16SI")
> ])
>
> (define_mode_attr VINDEX_QUAD_TRUNC [
> (VNx1SI "VNx1QI") (VNx2SI "VNx2QI") (VNx4SI "VNx4QI") (VNx8SI "VNx8QI")
> - (VNx16SI "VNx16QI")
> + (VNx16SI "VNx16QI") (VNx32SI "VNx32QI")
> (VNx1DI "VNx1HI") (VNx2DI "VNx2HI")
> - (VNx4DI "VNx4HI") (VNx8DI "VNx8HI")
> + (VNx4DI "VNx4HI") (VNx8DI "VNx8HI") (VNx16DI "VNx16HI")
> (VNx1SF "VNx1QI") (VNx2SF "VNx2QI") (VNx4SF "VNx4QI") (VNx8SF "VNx8QI")
> - (VNx16SF "VNx16QI")
> + (VNx16SF "VNx16QI") (VNx32SF "VNx32QI")
> (VNx1DF "VNx1HI") (VNx2DF "VNx2HI")
> - (VNx4DF "VNx4HI") (VNx8DF "VNx8HI")
> + (VNx4DF "VNx4HI") (VNx8DF "VNx8HI") (VNx16DF "VNx16HI")
> ])
>
> (define_mode_attr VINDEX_OCT_TRUNC [
> - (VNx1DI "VNx1QI") (VNx2DI "VNx2QI") (VNx4DI "VNx4QI") (VNx8DI "VNx8QI")
> - (VNx1DF "VNx1QI") (VNx2DF "VNx2QI") (VNx4DF "VNx4QI") (VNx8DF "VNx8QI")
> + (VNx1DI "VNx1QI") (VNx2DI "VNx2QI") (VNx4DI "VNx4QI") (VNx8DI "VNx8QI") (VNx16DI "VNx16QI")
> + (VNx1DF "VNx1QI") (VNx2DF "VNx2QI") (VNx4DF "VNx4QI") (VNx8DF "VNx8QI") (VNx16DF "VNx16QI")
> ])
>
> (define_mode_attr VINDEX_DOUBLE_EXT [
> - (VNx1QI "VNx1HI") (VNx2QI "VNx2HI") (VNx4QI "VNx4HI") (VNx8QI "VNx8HI") (VNx16QI "VNx16HI") (VNx32QI "VNx32HI")
> - (VNx1HI "VNx1SI") (VNx2HI "VNx2SI") (VNx4HI "VNx4SI") (VNx8HI "VNx8SI") (VNx16HI "VNx16SI")
> - (VNx1SI "VNx1DI") (VNx2SI "VNx2DI") (VNx4SI "VNx4DI") (VNx8SI "VNx8DI")
> - (VNx1SF "VNx1DI") (VNx2SF "VNx2DI") (VNx4SF "VNx4DI") (VNx8SF "VNx8DI")
> + (VNx1QI "VNx1HI") (VNx2QI "VNx2HI") (VNx4QI "VNx4HI") (VNx8QI "VNx8HI") (VNx16QI "VNx16HI") (VNx32QI "VNx32HI") (VNx64QI "VNx64HI")
> + (VNx1HI "VNx1SI") (VNx2HI "VNx2SI") (VNx4HI "VNx4SI") (VNx8HI "VNx8SI") (VNx16HI "VNx16SI") (VNx32HI "VNx32SI")
> + (VNx1SI "VNx1DI") (VNx2SI "VNx2DI") (VNx4SI "VNx4DI") (VNx8SI "VNx8DI") (VNx16SI "VNx16DI")
> + (VNx1SF "VNx1DI") (VNx2SF "VNx2DI") (VNx4SF "VNx4DI") (VNx8SF "VNx8DI") (VNx16SF "VNx16DI")
> ])
>
> (define_mode_attr VINDEX_QUAD_EXT [
> - (VNx1QI "VNx1SI") (VNx2QI "VNx2SI") (VNx4QI "VNx4SI") (VNx8QI "VNx8SI") (VNx16QI "VNx16SI")
> - (VNx1HI "VNx1DI") (VNx2HI "VNx2DI") (VNx4HI "VNx4DI") (VNx8HI "VNx8DI")
> + (VNx1QI "VNx1SI") (VNx2QI "VNx2SI") (VNx4QI "VNx4SI") (VNx8QI "VNx8SI") (VNx16QI "VNx16SI") (VNx32QI "VNx32SI")
> + (VNx1HI "VNx1DI") (VNx2HI "VNx2DI") (VNx4HI "VNx4DI") (VNx8HI "VNx8DI") (VNx16HI "VNx16DI")
> ])
>
> (define_mode_attr VINDEX_OCT_EXT [
> - (VNx1QI "VNx1DI") (VNx2QI "VNx2DI") (VNx4QI "VNx4DI") (VNx8QI "VNx8DI")
> + (VNx1QI "VNx1DI") (VNx2QI "VNx2DI") (VNx4QI "VNx4DI") (VNx8QI "VNx8DI") (VNx16QI "VNx16DI")
> ])
>
> (define_mode_attr VCONVERT [
> - (VNx1SF "VNx1SI") (VNx2SF "VNx2SI") (VNx4SF "VNx4SI") (VNx8SF "VNx8SI") (VNx16SF "VNx16SI")
> - (VNx1DF "VNx1DI") (VNx2DF "VNx2DI") (VNx4DF "VNx4DI") (VNx8DF "VNx8DI")
> + (VNx1SF "VNx1SI") (VNx2SF "VNx2SI") (VNx4SF "VNx4SI") (VNx8SF "VNx8SI") (VNx16SF "VNx16SI") (VNx32SF "VNx32SI")
> + (VNx1DF "VNx1DI") (VNx2DF "VNx2DI") (VNx4DF "VNx4DI") (VNx8DF "VNx8DI") (VNx16DF "VNx16DI")
> ])
>
> (define_mode_attr VNCONVERT [
> - (VNx1SF "VNx1HI") (VNx2SF "VNx2HI") (VNx4SF "VNx4HI") (VNx8SF "VNx8HI") (VNx16SF "VNx16HI")
> - (VNx1DI "VNx1SF") (VNx2DI "VNx2SF") (VNx4DI "VNx4SF") (VNx8DI "VNx8SF")
> - (VNx1DF "VNx1SI") (VNx2DF "VNx2SI") (VNx4DF "VNx4SI") (VNx8DF "VNx8SI")
> + (VNx1SF "VNx1HI") (VNx2SF "VNx2HI") (VNx4SF "VNx4HI") (VNx8SF "VNx8HI") (VNx16SF "VNx16HI") (VNx32SF "VNx32HI")
> + (VNx1DI "VNx1SF") (VNx2DI "VNx2SF") (VNx4DI "VNx4SF") (VNx8DI "VNx8SF") (VNx16DI "VNx16SF")
> + (VNx1DF "VNx1SI") (VNx2DF "VNx2SI") (VNx4DF "VNx4SI") (VNx8DF "VNx8SI") (VNx16DF "VNx16SI")
> ])
>
> (define_mode_attr VLMUL1 [
> + (VNx1QI "VNx16QI") (VNx2QI "VNx16QI") (VNx4QI "VNx16QI")
> + (VNx8QI "VNx16QI") (VNx16QI "VNx16QI") (VNx32QI "VNx16QI") (VNx64QI "VNx16QI") (VNx128QI "VNx16QI")
> + (VNx1HI "VNx8HI") (VNx2HI "VNx8HI") (VNx4HI "VNx8HI")
> + (VNx8HI "VNx8HI") (VNx16HI "VNx8HI") (VNx32HI "VNx8HI") (VNx64HI "VNx8HI")
> + (VNx1SI "VNx4SI") (VNx2SI "VNx4SI") (VNx4SI "VNx4SI")
> + (VNx8SI "VNx4SI") (VNx16SI "VNx4SI") (VNx32SI "VNx4SI")
> + (VNx1DI "VNx2DI") (VNx2DI "VNx2DI")
> + (VNx4DI "VNx2DI") (VNx8DI "VNx2DI") (VNx16DI "VNx2DI")
> + (VNx1SF "VNx4SF") (VNx2SF "VNx4SF")
> + (VNx4SF "VNx4SF") (VNx8SF "VNx4SF") (VNx16SF "VNx4SF") (VNx32SF "VNx4SF")
> + (VNx1DF "VNx2DF") (VNx2DF "VNx2DF")
> + (VNx4DF "VNx2DF") (VNx8DF "VNx2DF") (VNx16DF "VNx2DF")
> +])
> +
> +(define_mode_attr VLMUL1_ZVE64 [
> (VNx1QI "VNx8QI") (VNx2QI "VNx8QI") (VNx4QI "VNx8QI")
> (VNx8QI "VNx8QI") (VNx16QI "VNx8QI") (VNx32QI "VNx8QI") (VNx64QI "VNx8QI")
> (VNx1HI "VNx4HI") (VNx2HI "VNx4HI") (VNx4HI "VNx4HI")
> @@ -680,6 +752,17 @@ (define_mode_attr VLMUL1_ZVE32 [
> ])
>
> (define_mode_attr VWLMUL1 [
> + (VNx1QI "VNx8HI") (VNx2QI "VNx8HI") (VNx4QI "VNx8HI")
> + (VNx8QI "VNx8HI") (VNx16QI "VNx8HI") (VNx32QI "VNx8HI") (VNx64QI "VNx8HI") (VNx128QI "VNx8HI")
> + (VNx1HI "VNx4SI") (VNx2HI "VNx4SI") (VNx4HI "VNx4SI")
> + (VNx8HI "VNx4SI") (VNx16HI "VNx4SI") (VNx32HI "VNx4SI") (VNx64HI "VNx4SI")
> + (VNx1SI "VNx2DI") (VNx2SI "VNx2DI") (VNx4SI "VNx2DI")
> + (VNx8SI "VNx2DI") (VNx16SI "VNx2DI") (VNx32SI "VNx2DI")
> + (VNx1SF "VNx2DF") (VNx2SF "VNx2DF")
> + (VNx4SF "VNx2DF") (VNx8SF "VNx2DF") (VNx16SF "VNx2DF") (VNx32SF "VNx2DF")
> +])
> +
> +(define_mode_attr VWLMUL1_ZVE64 [
> (VNx1QI "VNx4HI") (VNx2QI "VNx4HI") (VNx4QI "VNx4HI")
> (VNx8QI "VNx4HI") (VNx16QI "VNx4HI") (VNx32QI "VNx4HI") (VNx64QI "VNx4HI")
> (VNx1HI "VNx2SI") (VNx2HI "VNx2SI") (VNx4HI "VNx2SI")
> @@ -698,6 +781,21 @@ (define_mode_attr VWLMUL1_ZVE32 [
> ])
>
> (define_mode_attr vlmul1 [
> + (VNx1QI "vnx16qi") (VNx2QI "vnx16qi") (VNx4QI "vnx16qi")
> + (VNx8QI "vnx16qi") (VNx16QI "vnx16qi") (VNx32QI "vnx16qi") (VNx64QI "vnx16qi") (VNx128QI "vnx16qi")
> + (VNx1HI "vnx8hi") (VNx2HI "vnx8hi") (VNx4HI "vnx8hi")
> + (VNx8HI "vnx8hi") (VNx16HI "vnx8hi") (VNx32HI "vnx8hi") (VNx64HI "vnx8hi")
> + (VNx1SI "vnx4si") (VNx2SI "vnx4si") (VNx4SI "vnx4si")
> + (VNx8SI "vnx4si") (VNx16SI "vnx4si") (VNx32SI "vnx4si")
> + (VNx1DI "vnx2di") (VNx2DI "vnx2di")
> + (VNx4DI "vnx2di") (VNx8DI "vnx2di") (VNx16DI "vnx2di")
> + (VNx1SF "vnx4sf") (VNx2SF "vnx4sf")
> + (VNx4SF "vnx4sf") (VNx8SF "vnx4sf") (VNx16SF "vnx4sf") (VNx32SF "vnx4sf")
> + (VNx1DF "vnx2df") (VNx2DF "vnx2df")
> + (VNx4DF "vnx2df") (VNx8DF "vnx2df") (VNx16DF "vnx2df")
> +])
> +
> +(define_mode_attr vlmul1_zve64 [
> (VNx1QI "vnx8qi") (VNx2QI "vnx8qi") (VNx4QI "vnx8qi")
> (VNx8QI "vnx8qi") (VNx16QI "vnx8qi") (VNx32QI "vnx8qi") (VNx64QI "vnx8qi")
> (VNx1HI "vnx4hi") (VNx2HI "vnx4hi") (VNx4HI "vnx4hi")
> @@ -724,12 +822,23 @@ (define_mode_attr vlmul1_zve32 [
> ])
>
> (define_mode_attr vwlmul1 [
> + (VNx1QI "vnx8hi") (VNx2QI "vnx8hi") (VNx4QI "vnx8hi")
> + (VNx8QI "vnx8hi") (VNx16QI "vnx8hi") (VNx32QI "vnx8hi") (VNx64QI "vnx8hi") (VNx128QI "vnx8hi")
> + (VNx1HI "vnx4si") (VNx2HI "vnx4si") (VNx4HI "vnx4si")
> + (VNx8HI "vnx4si") (VNx16HI "vnx4si") (VNx32HI "vnx4si") (VNx64HI "vnx4si")
> + (VNx1SI "vnx2di") (VNx2SI "vnx2di") (VNx4SI "vnx2di")
> + (VNx8SI "vnx2di") (VNx16SI "vnx2di") (VNx32SI "vnx2di")
> + (VNx1SF "vnx2df") (VNx2SF "vnx2df")
> + (VNx4SF "vnx2df") (VNx8SF "vnx2df") (VNx16SF "vnx2df") (VNx32SF "vnx2df")
> +])
> +
> +(define_mode_attr vwlmul1_zve64 [
> (VNx1QI "vnx4hi") (VNx2QI "vnx4hi") (VNx4QI "vnx4hi")
> (VNx8QI "vnx4hi") (VNx16QI "vnx4hi") (VNx32QI "vnx4hi") (VNx64QI "vnx4hi")
> (VNx1HI "vnx2si") (VNx2HI "vnx2si") (VNx4HI "vnx2si")
> - (VNx8HI "vnx2si") (VNx16HI "vnx2si") (VNx32HI "vnx2si")
> - (VNx1SI "vnx2di") (VNx2SI "vnx2di") (VNx4SI "vnx2di")
> - (VNx8SI "vnx2di") (VNx16SI "vnx2di")
> + (VNx8HI "vnx2si") (VNx16HI "vnx2si") (VNx32HI "vnx2SI")
> + (VNx1SI "vnx1di") (VNx2SI "vnx1di") (VNx4SI "vnx1di")
> + (VNx8SI "vnx1di") (VNx16SI "vnx1di")
> (VNx1SF "vnx1df") (VNx2SF "vnx1df")
> (VNx4SF "vnx1df") (VNx8SF "vnx1df") (VNx16SF "vnx1df")
> ])
> @@ -738,17 +847,17 @@ (define_mode_attr vwlmul1_zve32 [
> (VNx1QI "vnx2hi") (VNx2QI "vnx2hi") (VNx4QI "vnx2hi")
> (VNx8QI "vnx2hi") (VNx16QI "vnx2hi") (VNx32QI "vnx2hi")
> (VNx1HI "vnx1si") (VNx2HI "vnx1si") (VNx4HI "vnx1si")
> - (VNx8HI "vnx1si") (VNx16HI "vnx1si")
> + (VNx8HI "vnx1si") (VNx16HI "vnx1SI")
> ])
>
> (define_mode_attr VDEMOTE [
> (VNx1DI "VNx2SI") (VNx2DI "VNx4SI")
> - (VNx4DI "VNx8SI") (VNx8DI "VNx16SI")
> + (VNx4DI "VNx8SI") (VNx8DI "VNx16SI") (VNx16DI "VNx32SI")
> ])
>
> (define_mode_attr VMDEMOTE [
> (VNx1DI "VNx2BI") (VNx2DI "VNx4BI")
> - (VNx4DI "VNx8BI") (VNx8DI "VNx16BI")
> + (VNx4DI "VNx8BI") (VNx8DI "VNx16BI") (VNx16DI "VNx32BI")
> ])
>
> (define_int_iterator WREDUC [UNSPEC_WREDUC_SUM UNSPEC_WREDUC_USUM])
> diff --git a/gcc/config/riscv/vector.md b/gcc/config/riscv/vector.md
> index 0ecca98f20c..0fda11ed67d 100644
> --- a/gcc/config/riscv/vector.md
> +++ b/gcc/config/riscv/vector.md
> @@ -82,15 +82,16 @@ (define_attr "has_vl_op" "false,true"
> ;; is no field for ratio in the vsetvl instruction encoding.
> (define_attr "sew" ""
> (cond [(eq_attr "mode" "VNx1QI,VNx2QI,VNx4QI,VNx8QI,VNx16QI,VNx32QI,VNx64QI,\
> - VNx1BI,VNx2BI,VNx4BI,VNx8BI,VNx16BI,VNx32BI,VNx64BI")
> + VNx1BI,VNx2BI,VNx4BI,VNx8BI,VNx16BI,VNx32BI,VNx64BI,\
> + VNx128QI,VNx128BI")
> (const_int 8)
> - (eq_attr "mode" "VNx1HI,VNx2HI,VNx4HI,VNx8HI,VNx16HI,VNx32HI")
> + (eq_attr "mode" "VNx1HI,VNx2HI,VNx4HI,VNx8HI,VNx16HI,VNx32HI,VNx64HI")
> (const_int 16)
> - (eq_attr "mode" "VNx1SI,VNx2SI,VNx4SI,VNx8SI,VNx16SI,\
> - VNx1SF,VNx2SF,VNx4SF,VNx8SF,VNx16SF")
> + (eq_attr "mode" "VNx1SI,VNx2SI,VNx4SI,VNx8SI,VNx16SI,VNx32SI,\
> + VNx1SF,VNx2SF,VNx4SF,VNx8SF,VNx16SF,VNx32SF")
> (const_int 32)
> - (eq_attr "mode" "VNx1DI,VNx2DI,VNx4DI,VNx8DI,\
> - VNx1DF,VNx2DF,VNx4DF,VNx8DF")
> + (eq_attr "mode" "VNx1DI,VNx2DI,VNx4DI,VNx8DI,VNx16DI,\
> + VNx1DF,VNx2DF,VNx4DF,VNx8DF,VNx16DF")
> (const_int 64)]
> (const_int INVALID_ATTRIBUTE)))
>
> @@ -110,6 +111,8 @@ (define_attr "vlmul" ""
> (symbol_ref "riscv_vector::get_vlmul(E_VNx32QImode)")
> (eq_attr "mode" "VNx64QI,VNx64BI")
> (symbol_ref "riscv_vector::get_vlmul(E_VNx64QImode)")
> + (eq_attr "mode" "VNx128QI,VNx128BI")
> + (symbol_ref "riscv_vector::get_vlmul(E_VNx128QImode)")
> (eq_attr "mode" "VNx1HI")
> (symbol_ref "riscv_vector::get_vlmul(E_VNx1HImode)")
> (eq_attr "mode" "VNx2HI")
> @@ -122,6 +125,8 @@ (define_attr "vlmul" ""
> (symbol_ref "riscv_vector::get_vlmul(E_VNx16HImode)")
> (eq_attr "mode" "VNx32HI")
> (symbol_ref "riscv_vector::get_vlmul(E_VNx32HImode)")
> + (eq_attr "mode" "VNx64HI")
> + (symbol_ref "riscv_vector::get_vlmul(E_VNx64HImode)")
> (eq_attr "mode" "VNx1SI,VNx1SF")
> (symbol_ref "riscv_vector::get_vlmul(E_VNx1SImode)")
> (eq_attr "mode" "VNx2SI,VNx2SF")
> @@ -132,6 +137,8 @@ (define_attr "vlmul" ""
> (symbol_ref "riscv_vector::get_vlmul(E_VNx8SImode)")
> (eq_attr "mode" "VNx16SI,VNx16SF")
> (symbol_ref "riscv_vector::get_vlmul(E_VNx16SImode)")
> + (eq_attr "mode" "VNx32SI,VNx32SF")
> + (symbol_ref "riscv_vector::get_vlmul(E_VNx32SImode)")
> (eq_attr "mode" "VNx1DI,VNx1DF")
> (symbol_ref "riscv_vector::get_vlmul(E_VNx1DImode)")
> (eq_attr "mode" "VNx2DI,VNx2DF")
> @@ -139,7 +146,9 @@ (define_attr "vlmul" ""
> (eq_attr "mode" "VNx4DI,VNx4DF")
> (symbol_ref "riscv_vector::get_vlmul(E_VNx4DImode)")
> (eq_attr "mode" "VNx8DI,VNx8DF")
> - (symbol_ref "riscv_vector::get_vlmul(E_VNx8DImode)")]
> + (symbol_ref "riscv_vector::get_vlmul(E_VNx8DImode)")
> + (eq_attr "mode" "VNx16DI,VNx16DF")
> + (symbol_ref "riscv_vector::get_vlmul(E_VNx16DImode)")]
> (const_int INVALID_ATTRIBUTE)))
>
> ;; It is valid for instruction that require sew/lmul ratio.
> @@ -173,6 +182,8 @@ (define_attr "ratio" ""
> (symbol_ref "riscv_vector::get_ratio(E_VNx32QImode)")
> (eq_attr "mode" "VNx64QI,VNx64BI")
> (symbol_ref "riscv_vector::get_ratio(E_VNx64QImode)")
> + (eq_attr "mode" "VNx128QI,VNx128BI")
> + (symbol_ref "riscv_vector::get_ratio(E_VNx128QImode)")
> (eq_attr "mode" "VNx1HI")
> (symbol_ref "riscv_vector::get_ratio(E_VNx1HImode)")
> (eq_attr "mode" "VNx2HI")
> @@ -185,6 +196,8 @@ (define_attr "ratio" ""
> (symbol_ref "riscv_vector::get_ratio(E_VNx16HImode)")
> (eq_attr "mode" "VNx32HI")
> (symbol_ref "riscv_vector::get_ratio(E_VNx32HImode)")
> + (eq_attr "mode" "VNx64HI")
> + (symbol_ref "riscv_vector::get_ratio(E_VNx64HImode)")
> (eq_attr "mode" "VNx1SI,VNx1SF")
> (symbol_ref "riscv_vector::get_ratio(E_VNx1SImode)")
> (eq_attr "mode" "VNx2SI,VNx2SF")
> @@ -195,6 +208,8 @@ (define_attr "ratio" ""
> (symbol_ref "riscv_vector::get_ratio(E_VNx8SImode)")
> (eq_attr "mode" "VNx16SI,VNx16SF")
> (symbol_ref "riscv_vector::get_ratio(E_VNx16SImode)")
> + (eq_attr "mode" "VNx32SI,VNx32SF")
> + (symbol_ref "riscv_vector::get_ratio(E_VNx32SImode)")
> (eq_attr "mode" "VNx1DI,VNx1DF")
> (symbol_ref "riscv_vector::get_ratio(E_VNx1DImode)")
> (eq_attr "mode" "VNx2DI,VNx2DF")
> @@ -202,7 +217,9 @@ (define_attr "ratio" ""
> (eq_attr "mode" "VNx4DI,VNx4DF")
> (symbol_ref "riscv_vector::get_ratio(E_VNx4DImode)")
> (eq_attr "mode" "VNx8DI,VNx8DF")
> - (symbol_ref "riscv_vector::get_ratio(E_VNx8DImode)")]
> + (symbol_ref "riscv_vector::get_ratio(E_VNx8DImode)")
> + (eq_attr "mode" "VNx16DI,VNx16DF")
> + (symbol_ref "riscv_vector::get_ratio(E_VNx16DImode)")]
> (const_int INVALID_ATTRIBUTE)))
>
> ;; The index of operand[] to get the merge op.
> @@ -1633,7 +1650,7 @@ (define_insn "@pred_indexed_<order>store<VNX16_QHS:mode><VNX16_QHSI:mode>"
> [(set_attr "type" "vst<order>x")
> (set_attr "mode" "<VNX16_QHS:MODE>")])
>
> -(define_insn "@pred_indexed_<order>store<VNX32_QH:mode><VNX32_QHI:mode>"
> +(define_insn "@pred_indexed_<order>store<VNX32_QHS:mode><VNX32_QHSI:mode>"
> [(set (mem:BLK (scratch))
> (unspec:BLK
> [(unspec:<VM>
> @@ -1643,14 +1660,14 @@ (define_insn "@pred_indexed_<order>store<VNX32_QH:mode><VNX32_QHI:mode>"
> (reg:SI VL_REGNUM)
> (reg:SI VTYPE_REGNUM)] UNSPEC_VPREDICATE)
> (match_operand 1 "pmode_register_operand" " r")
> - (match_operand:VNX32_QHI 2 "register_operand" " vr")
> - (match_operand:VNX32_QH 3 "register_operand" " vr")] ORDER))]
> + (match_operand:VNX32_QHSI 2 "register_operand" " vr")
> + (match_operand:VNX32_QHS 3 "register_operand" " vr")] ORDER))]
> "TARGET_VECTOR"
> - "vs<order>xei<VNX32_QHI:sew>.v\t%3,(%1),%2%p0"
> + "vs<order>xei<VNX32_QHSI:sew>.v\t%3,(%1),%2%p0"
> [(set_attr "type" "vst<order>x")
> - (set_attr "mode" "<VNX32_QH:MODE>")])
> + (set_attr "mode" "<VNX32_QHS:MODE>")])
>
> -(define_insn "@pred_indexed_<order>store<VNX64_Q:mode><VNX64_Q:mode>"
> +(define_insn "@pred_indexed_<order>store<VNX64_QH:mode><VNX64_QHI:mode>"
> [(set (mem:BLK (scratch))
> (unspec:BLK
> [(unspec:<VM>
> @@ -1660,12 +1677,29 @@ (define_insn "@pred_indexed_<order>store<VNX64_Q:mode><VNX64_Q:mode>"
> (reg:SI VL_REGNUM)
> (reg:SI VTYPE_REGNUM)] UNSPEC_VPREDICATE)
> (match_operand 1 "pmode_register_operand" " r")
> - (match_operand:VNX64_Q 2 "register_operand" " vr")
> - (match_operand:VNX64_Q 3 "register_operand" " vr")] ORDER))]
> + (match_operand:VNX64_QHI 2 "register_operand" " vr")
> + (match_operand:VNX64_QH 3 "register_operand" " vr")] ORDER))]
> "TARGET_VECTOR"
> - "vs<order>xei<VNX64_Q:sew>.v\t%3,(%1),%2%p0"
> + "vs<order>xei<VNX64_QHI:sew>.v\t%3,(%1),%2%p0"
> [(set_attr "type" "vst<order>x")
> - (set_attr "mode" "<VNX64_Q:MODE>")])
> + (set_attr "mode" "<VNX64_QH:MODE>")])
> +
> +(define_insn "@pred_indexed_<order>store<VNX128_Q:mode><VNX128_Q:mode>"
> + [(set (mem:BLK (scratch))
> + (unspec:BLK
> + [(unspec:<VM>
> + [(match_operand:<VM> 0 "vector_mask_operand" "vmWc1")
> + (match_operand 4 "vector_length_operand" " rK")
> + (match_operand 5 "const_int_operand" " i")
> + (reg:SI VL_REGNUM)
> + (reg:SI VTYPE_REGNUM)] UNSPEC_VPREDICATE)
> + (match_operand 1 "pmode_register_operand" " r")
> + (match_operand:VNX128_Q 2 "register_operand" " vr")
> + (match_operand:VNX128_Q 3 "register_operand" " vr")] ORDER))]
> + "TARGET_VECTOR"
> + "vs<order>xei<VNX128_Q:sew>.v\t%3,(%1),%2%p0"
> + [(set_attr "type" "vst<order>x")
> + (set_attr "mode" "<VNX128_Q:MODE>")])
>
> ;; -------------------------------------------------------------------------------
> ;; ---- Predicated integer binary operations
> @@ -6746,23 +6780,45 @@ (define_insn "@pred_rod_trunc<mode>"
> ;; For example, The LMUL = 1 corresponding mode of VNx16QImode is VNx4QImode
> ;; for -march=rv*zve32* wheras VNx8QImode for -march=rv*zve64*
> (define_insn "@pred_reduc_<reduc><mode><vlmul1>"
> - [(set (match_operand:<VLMUL1> 0 "register_operand" "=vd, vd, vr, vr")
> + [(set (match_operand:<VLMUL1> 0 "register_operand" "=vr, vr")
> (unspec:<VLMUL1>
> [(unspec:<VM>
> - [(match_operand:<VM> 1 "vector_mask_operand" " vm, vm,Wc1,Wc1")
> - (match_operand 5 "vector_length_operand" " rK, rK, rK, rK")
> - (match_operand 6 "const_int_operand" " i, i, i, i")
> - (match_operand 7 "const_int_operand" " i, i, i, i")
> + [(match_operand:<VM> 1 "vector_mask_operand" "vmWc1,vmWc1")
> + (match_operand 5 "vector_length_operand" " rK, rK")
> + (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)
> (any_reduc:VI
> (vec_duplicate:VI
> (vec_select:<VEL>
> - (match_operand:<VLMUL1> 4 "register_operand" " vr, vr, vr, vr")
> + (match_operand:<VLMUL1> 4 "register_operand" " vr, vr")
> (parallel [(const_int 0)])))
> - (match_operand:VI 3 "register_operand" " vr, vr, vr, vr"))
> - (match_operand:<VLMUL1> 2 "vector_merge_operand" " vu, 0, vu, 0")] UNSPEC_REDUC))]
> - "TARGET_VECTOR && TARGET_MIN_VLEN > 32"
> + (match_operand:VI 3 "register_operand" " vr, vr"))
> + (match_operand:<VLMUL1> 2 "vector_merge_operand" " vu, 0")] UNSPEC_REDUC))]
> + "TARGET_VECTOR && TARGET_MIN_VLEN >= 128"
> + "vred<reduc>.vs\t%0,%3,%4%p1"
> + [(set_attr "type" "vired")
> + (set_attr "mode" "<MODE>")])
> +
> +(define_insn "@pred_reduc_<reduc><mode><vlmul1_zve64>"
> + [(set (match_operand:<VLMUL1_ZVE64> 0 "register_operand" "=vr, vr")
> + (unspec:<VLMUL1_ZVE64>
> + [(unspec:<VM>
> + [(match_operand:<VM> 1 "vector_mask_operand" "vmWc1,vmWc1")
> + (match_operand 5 "vector_length_operand" " rK, rK")
> + (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)
> + (any_reduc:VI_ZVE64
> + (vec_duplicate:VI_ZVE64
> + (vec_select:<VEL>
> + (match_operand:<VLMUL1_ZVE64> 4 "register_operand" " vr, vr")
> + (parallel [(const_int 0)])))
> + (match_operand:VI_ZVE64 3 "register_operand" " vr, vr"))
> + (match_operand:<VLMUL1_ZVE64> 2 "vector_merge_operand" " vu, 0")] UNSPEC_REDUC))]
> + "TARGET_VECTOR && TARGET_MIN_VLEN == 64"
> "vred<reduc>.vs\t%0,%3,%4%p1"
> [(set_attr "type" "vired")
> (set_attr "mode" "<MODE>")])
> @@ -6802,11 +6858,30 @@ (define_insn "@pred_widen_reduc_plus<v_su><mode><vwlmul1>"
> (match_operand:VWI 3 "register_operand" " vr, vr")
> (match_operand:<VWLMUL1> 4 "register_operand" " vr, vr")
> (match_operand:<VWLMUL1> 2 "vector_merge_operand" " vu, 0")] WREDUC))]
> - "TARGET_VECTOR && TARGET_MIN_VLEN > 32"
> + "TARGET_VECTOR && TARGET_MIN_VLEN >= 128"
> "vwredsum<v_su>.vs\t%0,%3,%4%p1"
> [(set_attr "type" "viwred")
> (set_attr "mode" "<MODE>")])
>
> +(define_insn "@pred_widen_reduc_plus<v_su><mode><vwlmul1_zve64>"
> + [(set (match_operand:<VWLMUL1_ZVE64> 0 "register_operand" "=&vr, &vr")
> + (unspec:<VWLMUL1_ZVE64>
> + [(unspec:<VM>
> + [(match_operand:<VM> 1 "vector_mask_operand" "vmWc1,vmWc1")
> + (match_operand 5 "vector_length_operand" " rK, rK")
> + (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)
> + (match_operand:VWI_ZVE64 3 "register_operand" " vr, vr")
> + (match_operand:<VWLMUL1_ZVE64> 4 "register_operand" " vr, vr")
> + (match_operand:<VWLMUL1_ZVE64> 2 "vector_merge_operand" " vu, 0")] WREDUC))]
> + "TARGET_VECTOR && TARGET_MIN_VLEN == 64"
> + "vwredsum<v_su>.vs\t%0,%3,%4%p1"
> + [(set_attr "type" "viwred")
> + (set_attr "mode" "<MODE>")])
> +
> +
> (define_insn "@pred_widen_reduc_plus<v_su><mode><vwlmul1_zve32>"
> [(set (match_operand:<VWLMUL1_ZVE32> 0 "register_operand" "=&vr, &vr")
> (unspec:<VWLMUL1_ZVE32>
> @@ -6826,23 +6901,45 @@ (define_insn "@pred_widen_reduc_plus<v_su><mode><vwlmul1_zve32>"
> (set_attr "mode" "<MODE>")])
>
> (define_insn "@pred_reduc_<reduc><mode><vlmul1>"
> - [(set (match_operand:<VLMUL1> 0 "register_operand" "=vd, vd, vr, vr")
> + [(set (match_operand:<VLMUL1> 0 "register_operand" "=vr, vr")
> (unspec:<VLMUL1>
> [(unspec:<VM>
> - [(match_operand:<VM> 1 "vector_mask_operand" " vm, vm,Wc1,Wc1")
> - (match_operand 5 "vector_length_operand" " rK, rK, rK, rK")
> - (match_operand 6 "const_int_operand" " i, i, i, i")
> - (match_operand 7 "const_int_operand" " i, i, i, i")
> + [(match_operand:<VM> 1 "vector_mask_operand" "vmWc1,vmWc1")
> + (match_operand 5 "vector_length_operand" " rK, rK")
> + (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)
> (any_freduc:VF
> (vec_duplicate:VF
> (vec_select:<VEL>
> - (match_operand:<VLMUL1> 4 "register_operand" " vr, vr, vr, vr")
> + (match_operand:<VLMUL1> 4 "register_operand" " vr, vr")
> + (parallel [(const_int 0)])))
> + (match_operand:VF 3 "register_operand" " vr, vr"))
> + (match_operand:<VLMUL1> 2 "vector_merge_operand" " vu, 0")] UNSPEC_REDUC))]
> + "TARGET_VECTOR && TARGET_MIN_VLEN >= 128"
> + "vfred<reduc>.vs\t%0,%3,%4%p1"
> + [(set_attr "type" "vfredu")
> + (set_attr "mode" "<MODE>")])
> +
> +(define_insn "@pred_reduc_<reduc><mode><vlmul1_zve64>"
> + [(set (match_operand:<VLMUL1_ZVE64> 0 "register_operand" "=vr, vr")
> + (unspec:<VLMUL1_ZVE64>
> + [(unspec:<VM>
> + [(match_operand:<VM> 1 "vector_mask_operand" "vmWc1,vmWc1")
> + (match_operand 5 "vector_length_operand" " rK, rK")
> + (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)
> + (any_freduc:VF_ZVE64
> + (vec_duplicate:VF_ZVE64
> + (vec_select:<VEL>
> + (match_operand:<VLMUL1_ZVE64> 4 "register_operand" " vr, vr")
> (parallel [(const_int 0)])))
> - (match_operand:VF 3 "register_operand" " vr, vr, vr, vr"))
> - (match_operand:<VLMUL1> 2 "vector_merge_operand" " vu, 0, vu, 0")] UNSPEC_REDUC))]
> - "TARGET_VECTOR && TARGET_MIN_VLEN > 32"
> + (match_operand:VF_ZVE64 3 "register_operand" " vr, vr"))
> + (match_operand:<VLMUL1_ZVE64> 2 "vector_merge_operand" " vu, 0")] UNSPEC_REDUC))]
> + "TARGET_VECTOR && TARGET_MIN_VLEN == 64"
> "vfred<reduc>.vs\t%0,%3,%4%p1"
> [(set_attr "type" "vfredu")
> (set_attr "mode" "<MODE>")])
> @@ -6870,24 +6967,47 @@ (define_insn "@pred_reduc_<reduc><mode><vlmul1_zve32>"
> (set_attr "mode" "<MODE>")])
>
> (define_insn "@pred_reduc_plus<order><mode><vlmul1>"
> - [(set (match_operand:<VLMUL1> 0 "register_operand" "=vd, vd, vr, vr")
> + [(set (match_operand:<VLMUL1> 0 "register_operand" "=vr, vr")
> (unspec:<VLMUL1>
> [(unspec:<VLMUL1>
> [(unspec:<VM>
> - [(match_operand:<VM> 1 "vector_mask_operand" " vm, vm,Wc1,Wc1")
> - (match_operand 5 "vector_length_operand" " rK, rK, rK, rK")
> - (match_operand 6 "const_int_operand" " i, i, i, i")
> - (match_operand 7 "const_int_operand" " i, i, i, i")
> + [(match_operand:<VM> 1 "vector_mask_operand" "vmWc1,vmWc1")
> + (match_operand 5 "vector_length_operand" " rK, rK")
> + (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)
> (plus:VF
> (vec_duplicate:VF
> (vec_select:<VEL>
> - (match_operand:<VLMUL1> 4 "register_operand" " vr, vr, vr, vr")
> + (match_operand:<VLMUL1> 4 "register_operand" " vr, vr")
> (parallel [(const_int 0)])))
> - (match_operand:VF 3 "register_operand" " vr, vr, vr, vr"))
> - (match_operand:<VLMUL1> 2 "vector_merge_operand" " vu, 0, vu, 0")] UNSPEC_REDUC)] ORDER))]
> - "TARGET_VECTOR && TARGET_MIN_VLEN > 32"
> + (match_operand:VF 3 "register_operand" " vr, vr"))
> + (match_operand:<VLMUL1> 2 "vector_merge_operand" " vu, 0")] UNSPEC_REDUC)] ORDER))]
> + "TARGET_VECTOR && TARGET_MIN_VLEN >= 128"
> + "vfred<order>sum.vs\t%0,%3,%4%p1"
> + [(set_attr "type" "vfred<order>")
> + (set_attr "mode" "<MODE>")])
> +
> +(define_insn "@pred_reduc_plus<order><mode><vlmul1_zve64>"
> + [(set (match_operand:<VLMUL1_ZVE64> 0 "register_operand" "=vr, vr")
> + (unspec:<VLMUL1_ZVE64>
> + [(unspec:<VLMUL1_ZVE64>
> + [(unspec:<VM>
> + [(match_operand:<VM> 1 "vector_mask_operand" "vmWc1,vmWc1")
> + (match_operand 5 "vector_length_operand" " rK, rK")
> + (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)
> + (plus:VF_ZVE64
> + (vec_duplicate:VF_ZVE64
> + (vec_select:<VEL>
> + (match_operand:<VLMUL1_ZVE64> 4 "register_operand" " vr, vr")
> + (parallel [(const_int 0)])))
> + (match_operand:VF_ZVE64 3 "register_operand" " vr, vr"))
> + (match_operand:<VLMUL1_ZVE64> 2 "vector_merge_operand" " vu, 0")] UNSPEC_REDUC)] ORDER))]
> + "TARGET_VECTOR && TARGET_MIN_VLEN == 64"
> "vfred<order>sum.vs\t%0,%3,%4%p1"
> [(set_attr "type" "vfred<order>")
> (set_attr "mode" "<MODE>")])
> @@ -6929,7 +7049,26 @@ (define_insn "@pred_widen_reduc_plus<order><mode><vwlmul1>"
> (match_operand:VWF 3 "register_operand" " vr, vr")
> (match_operand:<VWLMUL1> 4 "register_operand" " vr, vr")
> (match_operand:<VWLMUL1> 2 "vector_merge_operand" " vu, 0")] UNSPEC_WREDUC_SUM)] ORDER))]
> - "TARGET_VECTOR && TARGET_MIN_VLEN > 32"
> + "TARGET_VECTOR && TARGET_MIN_VLEN >= 128"
> + "vfwred<order>sum.vs\t%0,%3,%4%p1"
> + [(set_attr "type" "vfwred<order>")
> + (set_attr "mode" "<MODE>")])
> +
> +(define_insn "@pred_widen_reduc_plus<order><mode><vwlmul1_zve64>"
> + [(set (match_operand:<VWLMUL1_ZVE64> 0 "register_operand" "=&vr, &vr")
> + (unspec:<VWLMUL1_ZVE64>
> + [(unspec:<VWLMUL1_ZVE64>
> + [(unspec:<VM>
> + [(match_operand:<VM> 1 "vector_mask_operand" "vmWc1,vmWc1")
> + (match_operand 5 "vector_length_operand" " rK, rK")
> + (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)
> + (match_operand:VWF_ZVE64 3 "register_operand" " vr, vr")
> + (match_operand:<VWLMUL1_ZVE64> 4 "register_operand" " vr, vr")
> + (match_operand:<VWLMUL1_ZVE64> 2 "vector_merge_operand" " vu, 0")] UNSPEC_WREDUC_SUM)] ORDER))]
> + "TARGET_VECTOR && TARGET_MIN_VLEN == 64"
> "vfwred<order>sum.vs\t%0,%3,%4%p1"
> [(set_attr "type" "vfwred<order>")
> (set_attr "mode" "<MODE>")])
> diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/pr108185-4.c b/gcc/testsuite/gcc.target/riscv/rvv/base/pr108185-4.c
> index ea3c360d756..6e4d1cb1e44 100644
> --- a/gcc/testsuite/gcc.target/riscv/rvv/base/pr108185-4.c
> +++ b/gcc/testsuite/gcc.target/riscv/rvv/base/pr108185-4.c
> @@ -1,5 +1,5 @@
> /* { dg-do compile } */
> -/* { dg-options "-march=rv64gcv -mabi=lp64 -O3" } */
> +/* { dg-options "-march=rv64gc_zve64d -mabi=lp64 -O3" } */
>
> #include "riscv_vector.h"
>
> diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/spill-1.c b/gcc/testsuite/gcc.target/riscv/rvv/base/spill-1.c
> index 2f2d85807ec..3b11e5562d4 100644
> --- a/gcc/testsuite/gcc.target/riscv/rvv/base/spill-1.c
> +++ b/gcc/testsuite/gcc.target/riscv/rvv/base/spill-1.c
> @@ -1,5 +1,5 @@
> /* { dg-do compile } */
> -/* { dg-options "-march=rv32gcv -mabi=ilp32 -mpreferred-stack-boundary=3 -O3 -fno-schedule-insns -fno-schedule-insns2" } */
> +/* { dg-options "-march=rv32gc_zve64d -mabi=ilp32 -mpreferred-stack-boundary=3 -O3 -fno-schedule-insns -fno-schedule-insns2" } */
> /* { dg-final { check-function-bodies "**" "" } } */
>
> #include "riscv_vector.h"
> diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/spill-11.c b/gcc/testsuite/gcc.target/riscv/rvv/base/spill-11.c
> index f5223491665..aa2e5e75330 100644
> --- a/gcc/testsuite/gcc.target/riscv/rvv/base/spill-11.c
> +++ b/gcc/testsuite/gcc.target/riscv/rvv/base/spill-11.c
> @@ -1,5 +1,5 @@
> /* { dg-do compile } */
> -/* { dg-options "-msave-restore -march=rv32gcv -mabi=ilp32 -msave-restore -fno-schedule-insns -fno-schedule-insns2 -O3" } */
> +/* { dg-options "-msave-restore -march=rv32gc_zve64d -mabi=ilp32 -msave-restore -fno-schedule-insns -fno-schedule-insns2 -O3" } */
> /* { dg-final { check-function-bodies "**" "" } } */
> #include "riscv_vector.h"
>
> diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/spill-2.c b/gcc/testsuite/gcc.target/riscv/rvv/base/spill-2.c
> index 4bcaf4dce79..567aa56d982 100644
> --- a/gcc/testsuite/gcc.target/riscv/rvv/base/spill-2.c
> +++ b/gcc/testsuite/gcc.target/riscv/rvv/base/spill-2.c
> @@ -1,5 +1,5 @@
> /* { dg-do compile } */
> -/* { dg-options "-march=rv32gcv -mabi=ilp32 -mpreferred-stack-boundary=3 -O3 -fno-schedule-insns -fno-schedule-insns2" } */
> +/* { dg-options "-march=rv32gc_zve64d -mabi=ilp32 -mpreferred-stack-boundary=3 -O3 -fno-schedule-insns -fno-schedule-insns2" } */
> /* { dg-final { check-function-bodies "**" "" } } */
>
> #include "riscv_vector.h"
> diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/spill-3.c b/gcc/testsuite/gcc.target/riscv/rvv/base/spill-3.c
> index 82d685e029d..2c1213b0f78 100644
> --- a/gcc/testsuite/gcc.target/riscv/rvv/base/spill-3.c
> +++ b/gcc/testsuite/gcc.target/riscv/rvv/base/spill-3.c
> @@ -1,5 +1,5 @@
> /* { dg-do compile } */
> -/* { dg-options "-march=rv32gcv -mabi=ilp32 -mpreferred-stack-boundary=3 -O3 -fno-schedule-insns -fno-schedule-insns2" } */
> +/* { dg-options "-march=rv32gc_zve64d -mabi=ilp32 -mpreferred-stack-boundary=3 -O3 -fno-schedule-insns -fno-schedule-insns2" } */
> /* { dg-final { check-function-bodies "**" "" } } */
>
> #include "riscv_vector.h"
> diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/spill-5.c b/gcc/testsuite/gcc.target/riscv/rvv/base/spill-5.c
> index 5b3f75f3552..a6874067e76 100644
> --- a/gcc/testsuite/gcc.target/riscv/rvv/base/spill-5.c
> +++ b/gcc/testsuite/gcc.target/riscv/rvv/base/spill-5.c
> @@ -1,5 +1,5 @@
> /* { dg-do compile } */
> -/* { dg-options "-march=rv32gcv -mabi=ilp32 -mpreferred-stack-boundary=3 -O3 -fno-schedule-insns -fno-schedule-insns2" } */
> +/* { dg-options "-march=rv32gc_zve64d -mabi=ilp32 -mpreferred-stack-boundary=3 -O3 -fno-schedule-insns -fno-schedule-insns2" } */
> /* { dg-final { check-function-bodies "**" "" } } */
>
> #include "riscv_vector.h"
> diff --git a/gcc/testsuite/gcc.target/riscv/rvv/base/spill-9.c b/gcc/testsuite/gcc.target/riscv/rvv/base/spill-9.c
> index 7111113d393..ec673575b4b 100644
> --- a/gcc/testsuite/gcc.target/riscv/rvv/base/spill-9.c
> +++ b/gcc/testsuite/gcc.target/riscv/rvv/base/spill-9.c
> @@ -1,5 +1,5 @@
> /* { dg-do compile } */
> -/* { dg-options "-march=rv32gcv -mabi=ilp32 -fno-schedule-insns -fno-schedule-insns2 -O3" } */
> +/* { dg-options "-march=rv32gc_zve64d -mabi=ilp32 -fno-schedule-insns -fno-schedule-insns2 -O3" } */
> /* { dg-final { check-function-bodies "**" "" } } */
>
> #include "riscv_vector.h"
> --
> 2.39.2
>
@@ -27,15 +27,16 @@ FLOAT_MODE (TF, 16, ieee_quad_format);
/* Encode the ratio of SEW/LMUL into the mask types. There are the following
* mask types. */
-/* | Mode | MIN_VLEN = 32 | MIN_VLEN = 64 |
- | | SEW/LMUL | SEW/LMUL |
- | VNx1BI | 32 | 64 |
- | VNx2BI | 16 | 32 |
- | VNx4BI | 8 | 16 |
- | VNx8BI | 4 | 8 |
- | VNx16BI | 2 | 4 |
- | VNx32BI | 1 | 2 |
- | VNx64BI | N/A | 1 | */
+/* | Mode | MIN_VLEN = 32 | MIN_VLEN = 64 | MIN_VLEN = 128 |
+ | | SEW/LMUL | SEW/LMUL | SEW/LMUL |
+ | VNx1BI | 32 | 64 | 128 |
+ | VNx2BI | 16 | 32 | 64 |
+ | VNx4BI | 8 | 16 | 32 |
+ | VNx8BI | 4 | 8 | 16 |
+ | VNx16BI | 2 | 4 | 8 |
+ | VNx32BI | 1 | 2 | 4 |
+ | VNx64BI | N/A | 1 | 2 |
+ | VNx128BI | N/A | N/A | 1 | */
/* For RVV modes, each boolean value occupies 1-bit.
4th argument is specify the minmial possible size of the vector mode,
@@ -47,6 +48,7 @@ VECTOR_BOOL_MODE (VNx8BI, 8, BI, 1);
VECTOR_BOOL_MODE (VNx16BI, 16, BI, 2);
VECTOR_BOOL_MODE (VNx32BI, 32, BI, 4);
VECTOR_BOOL_MODE (VNx64BI, 64, BI, 8);
+VECTOR_BOOL_MODE (VNx128BI, 128, BI, 16);
ADJUST_NUNITS (VNx1BI, riscv_v_adjust_nunits (VNx1BImode, 1));
ADJUST_NUNITS (VNx2BI, riscv_v_adjust_nunits (VNx2BImode, 2));
@@ -55,6 +57,7 @@ ADJUST_NUNITS (VNx8BI, riscv_v_adjust_nunits (VNx8BImode, 8));
ADJUST_NUNITS (VNx16BI, riscv_v_adjust_nunits (VNx16BImode, 16));
ADJUST_NUNITS (VNx32BI, riscv_v_adjust_nunits (VNx32BImode, 32));
ADJUST_NUNITS (VNx64BI, riscv_v_adjust_nunits (VNx64BImode, 64));
+ADJUST_NUNITS (VNx128BI, riscv_v_adjust_nunits (VNx128BImode, 128));
ADJUST_ALIGNMENT (VNx1BI, 1);
ADJUST_ALIGNMENT (VNx2BI, 1);
@@ -63,6 +66,7 @@ ADJUST_ALIGNMENT (VNx8BI, 1);
ADJUST_ALIGNMENT (VNx16BI, 1);
ADJUST_ALIGNMENT (VNx32BI, 1);
ADJUST_ALIGNMENT (VNx64BI, 1);
+ADJUST_ALIGNMENT (VNx128BI, 1);
ADJUST_BYTESIZE (VNx1BI, riscv_v_adjust_bytesize (VNx1BImode, 1));
ADJUST_BYTESIZE (VNx2BI, riscv_v_adjust_bytesize (VNx2BImode, 1));
@@ -71,6 +75,7 @@ ADJUST_BYTESIZE (VNx8BI, riscv_v_adjust_bytesize (VNx8BImode, 1));
ADJUST_BYTESIZE (VNx16BI, riscv_v_adjust_bytesize (VNx16BImode, 2));
ADJUST_BYTESIZE (VNx32BI, riscv_v_adjust_bytesize (VNx32BImode, 4));
ADJUST_BYTESIZE (VNx64BI, riscv_v_adjust_bytesize (VNx64BImode, 8));
+ADJUST_BYTESIZE (VNx128BI, riscv_v_adjust_bytesize (VNx128BImode, 16));
ADJUST_PRECISION (VNx1BI, riscv_v_adjust_precision (VNx1BImode, 1));
ADJUST_PRECISION (VNx2BI, riscv_v_adjust_precision (VNx2BImode, 2));
@@ -79,38 +84,47 @@ ADJUST_PRECISION (VNx8BI, riscv_v_adjust_precision (VNx8BImode, 8));
ADJUST_PRECISION (VNx16BI, riscv_v_adjust_precision (VNx16BImode, 16));
ADJUST_PRECISION (VNx32BI, riscv_v_adjust_precision (VNx32BImode, 32));
ADJUST_PRECISION (VNx64BI, riscv_v_adjust_precision (VNx64BImode, 64));
+ADJUST_PRECISION (VNx128BI, riscv_v_adjust_precision (VNx128BImode, 128));
/*
- | Mode | MIN_VLEN=32 | MIN_VLEN=32 | MIN_VLEN=64 | MIN_VLEN=64 |
- | | LMUL | SEW/LMUL | LMUL | SEW/LMUL |
- | VNx1QI | MF4 | 32 | MF8 | 64 |
- | VNx2QI | MF2 | 16 | MF4 | 32 |
- | VNx4QI | M1 | 8 | MF2 | 16 |
- | VNx8QI | M2 | 4 | M1 | 8 |
- | VNx16QI | M4 | 2 | M2 | 4 |
- | VNx32QI | M8 | 1 | M4 | 2 |
- | VNx64QI | N/A | N/A | M8 | 1 |
- | VNx1(HI|HF) | MF2 | 32 | MF4 | 64 |
- | VNx2(HI|HF) | M1 | 16 | MF2 | 32 |
- | VNx4(HI|HF) | M2 | 8 | M1 | 16 |
- | VNx8(HI|HF) | M4 | 4 | M2 | 8 |
- | VNx16(HI|HF)| M8 | 2 | M4 | 4 |
- | VNx32(HI|HF)| N/A | N/A | M8 | 2 |
- | VNx1(SI|SF) | M1 | 32 | MF2 | 64 |
- | VNx2(SI|SF) | M2 | 16 | M1 | 32 |
- | VNx4(SI|SF) | M4 | 8 | M2 | 16 |
- | VNx8(SI|SF) | M8 | 4 | M4 | 8 |
- | VNx16(SI|SF)| N/A | N/A | M8 | 4 |
- | VNx1(DI|DF) | N/A | N/A | M1 | 64 |
- | VNx2(DI|DF) | N/A | N/A | M2 | 32 |
- | VNx4(DI|DF) | N/A | N/A | M4 | 16 |
- | VNx8(DI|DF) | N/A | N/A | M8 | 8 |
+ | Mode | MIN_VLEN=32 | MIN_VLEN=32 | MIN_VLEN=64 | MIN_VLEN=64 | MIN_VLEN=128 | MIN_VLEN=128 |
+ | | LMUL | SEW/LMUL | LMUL | SEW/LMUL | LMUL | SEW/LMUL |
+ | VNx1QI | MF4 | 32 | MF8 | 64 | N/A | N/A |
+ | VNx2QI | MF2 | 16 | MF4 | 32 | MF8 | 64 |
+ | VNx4QI | M1 | 8 | MF2 | 16 | MF4 | 32 |
+ | VNx8QI | M2 | 4 | M1 | 8 | MF2 | 16 |
+ | VNx16QI | M4 | 2 | M2 | 4 | M1 | 8 |
+ | VNx32QI | M8 | 1 | M4 | 2 | M2 | 4 |
+ | VNx64QI | N/A | N/A | M8 | 1 | M4 | 2 |
+ | VNx128QI | N/A | N/A | N/A | N/A | M8 | 1 |
+ | VNx1(HI|HF) | MF2 | 32 | MF4 | 64 | N/A | N/A |
+ | VNx2(HI|HF) | M1 | 16 | MF2 | 32 | MF4 | 64 |
+ | VNx4(HI|HF) | M2 | 8 | M1 | 16 | MF2 | 32 |
+ | VNx8(HI|HF) | M4 | 4 | M2 | 8 | M1 | 16 |
+ | VNx16(HI|HF)| M8 | 2 | M4 | 4 | M2 | 8 |
+ | VNx32(HI|HF)| N/A | N/A | M8 | 2 | M4 | 4 |
+ | VNx64(HI|HF)| N/A | N/A | N/A | N/A | M8 | 2 |
+ | VNx1(SI|SF) | M1 | 32 | MF2 | 64 | MF2 | 64 |
+ | VNx2(SI|SF) | M2 | 16 | M1 | 32 | M1 | 32 |
+ | VNx4(SI|SF) | M4 | 8 | M2 | 16 | M2 | 16 |
+ | VNx8(SI|SF) | M8 | 4 | M4 | 8 | M4 | 8 |
+ | VNx16(SI|SF)| N/A | N/A | M8 | 4 | M8 | 4 |
+ | VNx1(DI|DF) | N/A | N/A | M1 | 64 | N/A | N/A |
+ | VNx2(DI|DF) | N/A | N/A | M2 | 32 | M1 | 64 |
+ | VNx4(DI|DF) | N/A | N/A | M4 | 16 | M2 | 32 |
+ | VNx8(DI|DF) | N/A | N/A | M8 | 8 | M4 | 16 |
+ | VNx16(DI|DF)| N/A | N/A | N/A | N/A | M8 | 8 |
*/
/* Define RVV modes whose sizes are multiples of 64-bit chunks. */
#define RVV_MODES(NVECS, VB, VH, VS, VD) \
- VECTOR_MODES_WITH_PREFIX (VNx, INT, 8 * NVECS, 0); \
- VECTOR_MODES_WITH_PREFIX (VNx, FLOAT, 8 * NVECS, 0); \
+ VECTOR_MODE_WITH_PREFIX (VNx, INT, QI, 8 * NVECS, 0); \
+ VECTOR_MODE_WITH_PREFIX (VNx, INT, HI, 4 * NVECS, 0); \
+ VECTOR_MODE_WITH_PREFIX (VNx, FLOAT, HF, 4 * NVECS, 0); \
+ VECTOR_MODE_WITH_PREFIX (VNx, INT, SI, 2 * NVECS, 0); \
+ VECTOR_MODE_WITH_PREFIX (VNx, FLOAT, SF, 2 * NVECS, 0); \
+ VECTOR_MODE_WITH_PREFIX (VNx, INT, DI, NVECS, 0); \
+ VECTOR_MODE_WITH_PREFIX (VNx, FLOAT, DF, NVECS, 0); \
\
ADJUST_NUNITS (VB##QI, riscv_v_adjust_nunits (VB##QI##mode, NVECS * 8)); \
ADJUST_NUNITS (VH##HI, riscv_v_adjust_nunits (VH##HI##mode, NVECS * 4)); \
@@ -128,14 +142,11 @@ ADJUST_PRECISION (VNx64BI, riscv_v_adjust_precision (VNx64BImode, 64));
ADJUST_ALIGNMENT (VS##SF, 4); \
ADJUST_ALIGNMENT (VD##DF, 8);
-/* 'VECTOR_MODES_WITH_PREFIX' does not allow ncomponents < 2.
- So we use 'VECTOR_MODE_WITH_PREFIX' to define VNx1DImode and VNx1DFmode. */
-VECTOR_MODE_WITH_PREFIX (VNx, INT, DI, 1, 0);
-VECTOR_MODE_WITH_PREFIX (VNx, FLOAT, DF, 1, 0);
RVV_MODES (1, VNx8, VNx4, VNx2, VNx1)
RVV_MODES (2, VNx16, VNx8, VNx4, VNx2)
RVV_MODES (4, VNx32, VNx16, VNx8, VNx4)
RVV_MODES (8, VNx64, VNx32, VNx16, VNx8)
+RVV_MODES (16, VNx128, VNx64, VNx32, VNx16)
VECTOR_MODES_WITH_PREFIX (VNx, INT, 4, 0);
VECTOR_MODES_WITH_PREFIX (VNx, FLOAT, 4, 0);
@@ -340,14 +340,19 @@ struct mode_vtype_group
uint8_t ratio_for_min_vlen32[NUM_MACHINE_MODES];
enum vlmul_type vlmul_for_min_vlen64[NUM_MACHINE_MODES];
uint8_t ratio_for_min_vlen64[NUM_MACHINE_MODES];
+ enum vlmul_type vlmul_for_for_vlen128[NUM_MACHINE_MODES];
+ uint8_t ratio_for_for_vlen128[NUM_MACHINE_MODES];
mode_vtype_group ()
{
#define ENTRY(MODE, REQUIREMENT, VLMUL_FOR_MIN_VLEN32, RATIO_FOR_MIN_VLEN32, \
- VLMUL_FOR_MIN_VLEN64, RATIO_FOR_MIN_VLEN64) \
+ VLMUL_FOR_MIN_VLEN64, RATIO_FOR_MIN_VLEN64, \
+ VLMUL_FOR_FOR_VLEN128, RATIO_FOR_FOR_VLEN128) \
vlmul_for_min_vlen32[MODE##mode] = VLMUL_FOR_MIN_VLEN32; \
ratio_for_min_vlen32[MODE##mode] = RATIO_FOR_MIN_VLEN32; \
vlmul_for_min_vlen64[MODE##mode] = VLMUL_FOR_MIN_VLEN64; \
- ratio_for_min_vlen64[MODE##mode] = RATIO_FOR_MIN_VLEN64;
+ ratio_for_min_vlen64[MODE##mode] = RATIO_FOR_MIN_VLEN64; \
+ vlmul_for_for_vlen128[MODE##mode] = VLMUL_FOR_FOR_VLEN128; \
+ ratio_for_for_vlen128[MODE##mode] = RATIO_FOR_FOR_VLEN128;
#include "riscv-vector-switch.def"
}
};
@@ -358,7 +363,9 @@ static mode_vtype_group mode_vtype_infos;
enum vlmul_type
get_vlmul (machine_mode mode)
{
- if (TARGET_MIN_VLEN == 32)
+ if (TARGET_MIN_VLEN >= 128)
+ return mode_vtype_infos.vlmul_for_for_vlen128[mode];
+ else if (TARGET_MIN_VLEN == 32)
return mode_vtype_infos.vlmul_for_min_vlen32[mode];
else
return mode_vtype_infos.vlmul_for_min_vlen64[mode];
@@ -368,7 +375,9 @@ get_vlmul (machine_mode mode)
unsigned int
get_ratio (machine_mode mode)
{
- if (TARGET_MIN_VLEN == 32)
+ if (TARGET_MIN_VLEN >= 128)
+ return mode_vtype_infos.ratio_for_for_vlen128[mode];
+ else if (TARGET_MIN_VLEN == 32)
return mode_vtype_infos.ratio_for_min_vlen32[mode];
else
return mode_vtype_infos.ratio_for_min_vlen64[mode];
@@ -107,7 +107,8 @@ const char *const operand_suffixes[NUM_OP_TYPES] = {
/* Static information about type suffix for each RVV type. */
const rvv_builtin_suffixes type_suffixes[NUM_VECTOR_TYPES + 1] = {
-#define DEF_RVV_TYPE(NAME, NCHARS, ABI_NAME, SCALAR_TYPE, VECTOR_MODE, \
+#define DEF_RVV_TYPE(NAME, NCHARS, ABI_NAME, SCALAR_TYPE, \
+ VECTOR_MODE_MIN_VLEN_128, VECTOR_MODE_MIN_VLEN_64, \
VECTOR_MODE_MIN_VLEN_32, VECTOR_SUFFIX, SCALAR_SUFFIX, \
VSETVL_SUFFIX) \
{#VECTOR_SUFFIX, #SCALAR_SUFFIX, #VSETVL_SUFFIX},
@@ -2350,10 +2351,12 @@ register_builtin_types ()
tree int64_type_node = get_typenode_from_name (INT64_TYPE);
machine_mode mode;
-#define DEF_RVV_TYPE(NAME, NCHARS, ABI_NAME, SCALAR_TYPE, VECTOR_MODE, \
+#define DEF_RVV_TYPE(NAME, NCHARS, ABI_NAME, SCALAR_TYPE, \
+ VECTOR_MODE_MIN_VLEN_128, VECTOR_MODE_MIN_VLEN_64, \
VECTOR_MODE_MIN_VLEN_32, ARGS...) \
- mode = TARGET_MIN_VLEN > 32 ? VECTOR_MODE##mode \
- : VECTOR_MODE_MIN_VLEN_32##mode; \
+ mode = TARGET_MIN_VLEN >= 128 ? VECTOR_MODE_MIN_VLEN_128##mode \
+ : TARGET_MIN_VLEN >= 64 ? VECTOR_MODE_MIN_VLEN_64##mode \
+ : VECTOR_MODE_MIN_VLEN_32##mode; \
register_builtin_type (VECTOR_TYPE_##NAME, SCALAR_TYPE##_type_node, mode);
#include "riscv-vector-builtins.def"
}
@@ -42,7 +42,8 @@ along with GCC; see the file COPYING3. If not see
*/
#ifndef DEF_RVV_TYPE
-#define DEF_RVV_TYPE(NAME, NCHARS, ABI_NAME, SCALAR_TYPE, VECTOR_MODE, \
+#define DEF_RVV_TYPE(NAME, NCHARS, ABI_NAME, SCALAR_TYPE, \
+ VECTOR_MODE_MIN_VLEN_128, VECTOR_MODE_MIN_VLEN_64, \
VECTOR_MODE_MIN_VLEN_32, VECTOR_SUFFIX, SCALAR_SUFFIX, \
VSETVL_SUFFIX)
#endif
@@ -79,212 +80,247 @@ along with GCC; see the file COPYING3. If not see
#endif
/* SEW/LMUL = 64:
- Only enable when TARGET_MIN_VLEN > 32 and machine mode = VNx1BImode. */
-DEF_RVV_TYPE (vbool64_t, 14, __rvv_bool64_t, boolean, VNx1BI, VOID, _b64, , )
+ Only enable when TARGET_MIN_VLEN > 32.
+ Machine mode = VNx1BImode when TARGET_MIN_VLEN < 128.
+ Machine mode = VNx2BImode when TARGET_MIN_VLEN >= 128. */
+DEF_RVV_TYPE (vbool64_t, 14, __rvv_bool64_t, boolean, VNx2BI, VNx1BI, VOID, _b64, , )
/* SEW/LMUL = 32:
Machine mode = VNx2BImode when TARGET_MIN_VLEN > 32.
Machine mode = VNx1BImode when TARGET_MIN_VLEN = 32. */
-DEF_RVV_TYPE (vbool32_t, 14, __rvv_bool32_t, boolean, VNx2BI, VNx1BI, _b32, , )
+DEF_RVV_TYPE (vbool32_t, 14, __rvv_bool32_t, boolean, VNx4BI, VNx2BI, VNx1BI, _b32, , )
/* SEW/LMUL = 16:
+ Machine mode = VNx8BImode when TARGET_MIN_VLEN >= 128.
Machine mode = VNx2BImode when TARGET_MIN_VLEN = 32.
Machine mode = VNx4BImode when TARGET_MIN_VLEN > 32. */
-DEF_RVV_TYPE (vbool16_t, 14, __rvv_bool16_t, boolean, VNx4BI, VNx2BI, _b16, , )
+DEF_RVV_TYPE (vbool16_t, 14, __rvv_bool16_t, boolean, VNx8BI, VNx4BI, VNx2BI, _b16, , )
/* SEW/LMUL = 8:
+ Machine mode = VNx16BImode when TARGET_MIN_VLEN >= 128.
Machine mode = VNx8BImode when TARGET_MIN_VLEN > 32.
Machine mode = VNx4BImode when TARGET_MIN_VLEN = 32. */
-DEF_RVV_TYPE (vbool8_t, 13, __rvv_bool8_t, boolean, VNx8BI, VNx4BI, _b8, , )
+DEF_RVV_TYPE (vbool8_t, 13, __rvv_bool8_t, boolean, VNx16BI, VNx8BI, VNx4BI, _b8, , )
/* SEW/LMUL = 4:
+ Machine mode = VNx32BImode when TARGET_MIN_VLEN >= 128.
Machine mode = VNx16BImode when TARGET_MIN_VLEN > 32.
Machine mode = VNx8BImode when TARGET_MIN_VLEN = 32. */
-DEF_RVV_TYPE (vbool4_t, 13, __rvv_bool4_t, boolean, VNx16BI, VNx8BI, _b4, , )
+DEF_RVV_TYPE (vbool4_t, 13, __rvv_bool4_t, boolean, VNx32BI, VNx16BI, VNx8BI, _b4, , )
/* SEW/LMUL = 2:
+ Machine mode = VNx64BImode when TARGET_MIN_VLEN >= 128.
Machine mode = VNx32BImode when TARGET_MIN_VLEN > 32.
Machine mode = VNx16BImode when TARGET_MIN_VLEN = 32. */
-DEF_RVV_TYPE (vbool2_t, 13, __rvv_bool2_t, boolean, VNx32BI, VNx16BI, _b2, , )
+DEF_RVV_TYPE (vbool2_t, 13, __rvv_bool2_t, boolean, VNx64BI, VNx32BI, VNx16BI, _b2, , )
/* SEW/LMUL = 1:
+ Machine mode = VNx128BImode when TARGET_MIN_VLEN >= 128.
Machine mode = VNx64BImode when TARGET_MIN_VLEN > 32.
Machine mode = VNx32BImode when TARGET_MIN_VLEN = 32. */
-DEF_RVV_TYPE (vbool1_t, 13, __rvv_bool1_t, boolean, VNx64BI, VNx32BI, _b1, , )
+DEF_RVV_TYPE (vbool1_t, 13, __rvv_bool1_t, boolean, VNx128BI, VNx64BI, VNx32BI, _b1, , )
/* LMUL = 1/8:
- Only enble when TARGET_MIN_VLEN > 32 and machine mode = VNx1QImode. */
-DEF_RVV_TYPE (vint8mf8_t, 15, __rvv_int8mf8_t, int8, VNx1QI, VOID, _i8mf8, _i8,
+ Only enble when TARGET_MIN_VLEN > 32.
+ Machine mode = VNx1QImode when TARGET_MIN_VLEN < 128.
+ Machine mode = VNx2QImode when TARGET_MIN_VLEN >= 128. */
+DEF_RVV_TYPE (vint8mf8_t, 15, __rvv_int8mf8_t, int8, VNx2QI, VNx1QI, VOID, _i8mf8, _i8,
_e8mf8)
-DEF_RVV_TYPE (vuint8mf8_t, 16, __rvv_uint8mf8_t, uint8, VNx1QI, VOID, _u8mf8,
+DEF_RVV_TYPE (vuint8mf8_t, 16, __rvv_uint8mf8_t, uint8, VNx2QI, VNx1QI, VOID, _u8mf8,
_u8, _e8mf8)
/* LMUL = 1/4:
+ Machine mode = VNx4QImode when TARGET_MIN_VLEN >= 128.
Machine mode = VNx2QImode when TARGET_MIN_VLEN > 32.
Machine mode = VNx1QImode when TARGET_MIN_VLEN = 32. */
-DEF_RVV_TYPE (vint8mf4_t, 15, __rvv_int8mf4_t, int8, VNx2QI, VNx1QI, _i8mf4,
+DEF_RVV_TYPE (vint8mf4_t, 15, __rvv_int8mf4_t, int8, VNx4QI, VNx2QI, VNx1QI, _i8mf4,
_i8, _e8mf4)
-DEF_RVV_TYPE (vuint8mf4_t, 16, __rvv_uint8mf4_t, uint8, VNx2QI, VNx1QI, _u8mf4,
+DEF_RVV_TYPE (vuint8mf4_t, 16, __rvv_uint8mf4_t, uint8, VNx4QI, VNx2QI, VNx1QI, _u8mf4,
_u8, _e8mf4)
/* LMUL = 1/2:
+ Machine mode = VNx8QImode when TARGET_MIN_VLEN >= 128.
Machine mode = VNx4QImode when TARGET_MIN_VLEN > 32.
Machine mode = VNx2QImode when TARGET_MIN_VLEN = 32. */
-DEF_RVV_TYPE (vint8mf2_t, 15, __rvv_int8mf2_t, int8, VNx4QI, VNx2QI, _i8mf2,
+DEF_RVV_TYPE (vint8mf2_t, 15, __rvv_int8mf2_t, int8, VNx8QI, VNx4QI, VNx2QI, _i8mf2,
_i8, _e8mf2)
-DEF_RVV_TYPE (vuint8mf2_t, 16, __rvv_uint8mf2_t, uint8, VNx4QI, VNx2QI, _u8mf2,
+DEF_RVV_TYPE (vuint8mf2_t, 16, __rvv_uint8mf2_t, uint8, VNx8QI, VNx4QI, VNx2QI, _u8mf2,
_u8, _e8mf2)
/* LMUL = 1:
+ Machine mode = VNx16QImode when TARGET_MIN_VLEN >= 128.
Machine mode = VNx8QImode when TARGET_MIN_VLEN > 32.
Machine mode = VNx4QImode when TARGET_MIN_VLEN = 32. */
-DEF_RVV_TYPE (vint8m1_t, 14, __rvv_int8m1_t, int8, VNx8QI, VNx4QI, _i8m1, _i8,
+DEF_RVV_TYPE (vint8m1_t, 14, __rvv_int8m1_t, int8, VNx16QI, VNx8QI, VNx4QI, _i8m1, _i8,
_e8m1)
-DEF_RVV_TYPE (vuint8m1_t, 15, __rvv_uint8m1_t, uint8, VNx8QI, VNx4QI, _u8m1,
+DEF_RVV_TYPE (vuint8m1_t, 15, __rvv_uint8m1_t, uint8, VNx16QI, VNx8QI, VNx4QI, _u8m1,
_u8, _e8m1)
/* LMUL = 2:
+ Machine mode = VNx32QImode when TARGET_MIN_VLEN >= 128.
Machine mode = VNx16QImode when TARGET_MIN_VLEN > 32.
Machine mode = VNx8QImode when TARGET_MIN_VLEN = 32. */
-DEF_RVV_TYPE (vint8m2_t, 14, __rvv_int8m2_t, int8, VNx16QI, VNx8QI, _i8m2, _i8,
+DEF_RVV_TYPE (vint8m2_t, 14, __rvv_int8m2_t, int8, VNx32QI, VNx16QI, VNx8QI, _i8m2, _i8,
_e8m2)
-DEF_RVV_TYPE (vuint8m2_t, 15, __rvv_uint8m2_t, uint8, VNx16QI, VNx8QI, _u8m2,
+DEF_RVV_TYPE (vuint8m2_t, 15, __rvv_uint8m2_t, uint8, VNx32QI, VNx16QI, VNx8QI, _u8m2,
_u8, _e8m2)
/* LMUL = 4:
+ Machine mode = VNx64QImode when TARGET_MIN_VLEN >= 128.
Machine mode = VNx32QImode when TARGET_MIN_VLEN > 32.
Machine mode = VNx16QImode when TARGET_MIN_VLEN = 32. */
-DEF_RVV_TYPE (vint8m4_t, 14, __rvv_int8m4_t, int8, VNx32QI, VNx16QI, _i8m4, _i8,
+DEF_RVV_TYPE (vint8m4_t, 14, __rvv_int8m4_t, int8, VNx64QI, VNx32QI, VNx16QI, _i8m4, _i8,
_e8m4)
-DEF_RVV_TYPE (vuint8m4_t, 15, __rvv_uint8m4_t, uint8, VNx32QI, VNx16QI, _u8m4,
+DEF_RVV_TYPE (vuint8m4_t, 15, __rvv_uint8m4_t, uint8, VNx64QI, VNx32QI, VNx16QI, _u8m4,
_u8, _e8m4)
/* LMUL = 8:
+ Machine mode = VNx128QImode when TARGET_MIN_VLEN >= 128.
Machine mode = VNx64QImode when TARGET_MIN_VLEN > 32.
Machine mode = VNx32QImode when TARGET_MIN_VLEN = 32. */
-DEF_RVV_TYPE (vint8m8_t, 14, __rvv_int8m8_t, int8, VNx64QI, VNx32QI, _i8m8, _i8,
+DEF_RVV_TYPE (vint8m8_t, 14, __rvv_int8m8_t, int8, VNx128QI, VNx64QI, VNx32QI, _i8m8, _i8,
_e8m8)
-DEF_RVV_TYPE (vuint8m8_t, 15, __rvv_uint8m8_t, uint8, VNx64QI, VNx32QI, _u8m8,
+DEF_RVV_TYPE (vuint8m8_t, 15, __rvv_uint8m8_t, uint8, VNx128QI, VNx64QI, VNx32QI, _u8m8,
_u8, _e8m8)
/* LMUL = 1/4:
- Only enble when TARGET_MIN_VLEN > 32 and machine mode = VNx1HImode. */
-DEF_RVV_TYPE (vint16mf4_t, 16, __rvv_int16mf4_t, int16, VNx1HI, VOID, _i16mf4,
+ Only enble when TARGET_MIN_VLEN > 32.
+ Machine mode = VNx1HImode when TARGET_MIN_VLEN < 128.
+ Machine mode = VNx2HImode when TARGET_MIN_VLEN >= 128. */
+DEF_RVV_TYPE (vint16mf4_t, 16, __rvv_int16mf4_t, int16, VNx2HI, VNx1HI, VOID, _i16mf4,
_i16, _e16mf4)
-DEF_RVV_TYPE (vuint16mf4_t, 17, __rvv_uint16mf4_t, uint16, VNx1HI, VOID,
+DEF_RVV_TYPE (vuint16mf4_t, 17, __rvv_uint16mf4_t, uint16, VNx2HI, VNx1HI, VOID,
_u16mf4, _u16, _e16mf4)
/* LMUL = 1/2:
+ Machine mode = VNx4HImode when TARGET_MIN_VLEN >= 128.
Machine mode = VNx2HImode when TARGET_MIN_VLEN > 32.
Machine mode = VNx1HImode when TARGET_MIN_VLEN = 32. */
-DEF_RVV_TYPE (vint16mf2_t, 16, __rvv_int16mf2_t, int16, VNx2HI, VNx1HI, _i16mf2,
+DEF_RVV_TYPE (vint16mf2_t, 16, __rvv_int16mf2_t, int16, VNx4HI, VNx2HI, VNx1HI, _i16mf2,
_i16, _e16mf2)
-DEF_RVV_TYPE (vuint16mf2_t, 17, __rvv_uint16mf2_t, uint16, VNx2HI, VNx1HI,
+DEF_RVV_TYPE (vuint16mf2_t, 17, __rvv_uint16mf2_t, uint16, VNx4HI, VNx2HI, VNx1HI,
_u16mf2, _u16, _e16mf2)
/* LMUL = 1:
+ Machine mode = VNx8HImode when TARGET_MIN_VLEN >= 128.
Machine mode = VNx4HImode when TARGET_MIN_VLEN > 32.
Machine mode = VNx2HImode when TARGET_MIN_VLEN = 32. */
-DEF_RVV_TYPE (vint16m1_t, 15, __rvv_int16m1_t, int16, VNx4HI, VNx2HI, _i16m1,
+DEF_RVV_TYPE (vint16m1_t, 15, __rvv_int16m1_t, int16, VNx8HI, VNx4HI, VNx2HI, _i16m1,
_i16, _e16m1)
-DEF_RVV_TYPE (vuint16m1_t, 16, __rvv_uint16m1_t, uint16, VNx4HI, VNx2HI, _u16m1,
+DEF_RVV_TYPE (vuint16m1_t, 16, __rvv_uint16m1_t, uint16, VNx8HI, VNx4HI, VNx2HI, _u16m1,
_u16, _e16m1)
/* LMUL = 2:
+ Machine mode = VNx16HImode when TARGET_MIN_VLEN >= 128.
Machine mode = VNx8HImode when TARGET_MIN_VLEN > 32.
Machine mode = VNx4HImode when TARGET_MIN_VLEN = 32. */
-DEF_RVV_TYPE (vint16m2_t, 15, __rvv_int16m2_t, int16, VNx8HI, VNx4HI, _i16m2,
+DEF_RVV_TYPE (vint16m2_t, 15, __rvv_int16m2_t, int16, VNx16HI, VNx8HI, VNx4HI, _i16m2,
_i16, _e16m2)
-DEF_RVV_TYPE (vuint16m2_t, 16, __rvv_uint16m2_t, uint16, VNx8HI, VNx4HI, _u16m2,
+DEF_RVV_TYPE (vuint16m2_t, 16, __rvv_uint16m2_t, uint16, VNx16HI, VNx8HI, VNx4HI, _u16m2,
_u16, _e16m2)
/* LMUL = 4:
+ Machine mode = VNx32HImode when TARGET_MIN_VLEN >= 128.
Machine mode = VNx16HImode when TARGET_MIN_VLEN > 32.
Machine mode = VNx8HImode when TARGET_MIN_VLEN = 32. */
-DEF_RVV_TYPE (vint16m4_t, 15, __rvv_int16m4_t, int16, VNx16HI, VNx8HI, _i16m4,
+DEF_RVV_TYPE (vint16m4_t, 15, __rvv_int16m4_t, int16, VNx32HI, VNx16HI, VNx8HI, _i16m4,
_i16, _e16m4)
-DEF_RVV_TYPE (vuint16m4_t, 16, __rvv_uint16m4_t, uint16, VNx16HI, VNx8HI,
+DEF_RVV_TYPE (vuint16m4_t, 16, __rvv_uint16m4_t, uint16, VNx32HI, VNx16HI, VNx8HI,
_u16m4, _u16, _e16m4)
/* LMUL = 8:
+ Machine mode = VNx64HImode when TARGET_MIN_VLEN >= 128.
Machine mode = VNx32HImode when TARGET_MIN_VLEN > 32.
Machine mode = VNx16HImode when TARGET_MIN_VLEN = 32. */
-DEF_RVV_TYPE (vint16m8_t, 15, __rvv_int16m8_t, int16, VNx32HI, VNx16HI, _i16m8,
+DEF_RVV_TYPE (vint16m8_t, 15, __rvv_int16m8_t, int16, VNx64HI, VNx32HI, VNx16HI, _i16m8,
_i16, _e16m8)
-DEF_RVV_TYPE (vuint16m8_t, 16, __rvv_uint16m8_t, uint16, VNx32HI, VNx16HI,
+DEF_RVV_TYPE (vuint16m8_t, 16, __rvv_uint16m8_t, uint16, VNx64HI, VNx32HI, VNx16HI,
_u16m8, _u16, _e16m8)
/* LMUL = 1/2:
- Only enble when TARGET_MIN_VLEN > 32 and machine mode = VNx1SImode. */
-DEF_RVV_TYPE (vint32mf2_t, 16, __rvv_int32mf2_t, int32, VNx1SI, VOID, _i32mf2,
+ Only enble when TARGET_MIN_VLEN > 32.
+ Machine mode = VNx1SImode when TARGET_MIN_VLEN < 128.
+ Machine mode = VNx2SImode when TARGET_MIN_VLEN >= 128. */
+DEF_RVV_TYPE (vint32mf2_t, 16, __rvv_int32mf2_t, int32, VNx2SI, VNx1SI, VOID, _i32mf2,
_i32, _e32mf2)
-DEF_RVV_TYPE (vuint32mf2_t, 17, __rvv_uint32mf2_t, uint32, VNx1SI, VOID,
+DEF_RVV_TYPE (vuint32mf2_t, 17, __rvv_uint32mf2_t, uint32, VNx2SI, VNx1SI, VOID,
_u32mf2, _u32, _e32mf2)
/* LMUL = 1:
+ Machine mode = VNx4SImode when TARGET_MIN_VLEN >= 128.
Machine mode = VNx2SImode when TARGET_MIN_VLEN > 32.
Machine mode = VNx1SImode when TARGET_MIN_VLEN = 32. */
-DEF_RVV_TYPE (vint32m1_t, 15, __rvv_int32m1_t, int32, VNx2SI, VNx1SI, _i32m1,
+DEF_RVV_TYPE (vint32m1_t, 15, __rvv_int32m1_t, int32, VNx4SI, VNx2SI, VNx1SI, _i32m1,
_i32, _e32m1)
-DEF_RVV_TYPE (vuint32m1_t, 16, __rvv_uint32m1_t, uint32, VNx2SI, VNx1SI, _u32m1,
+DEF_RVV_TYPE (vuint32m1_t, 16, __rvv_uint32m1_t, uint32, VNx4SI, VNx2SI, VNx1SI, _u32m1,
_u32, _e32m1)
/* LMUL = 2:
+ Machine mode = VNx8SImode when TARGET_MIN_VLEN >= 128.
Machine mode = VNx4SImode when TARGET_MIN_VLEN > 32.
Machine mode = VNx2SImode when TARGET_MIN_VLEN = 32. */
-DEF_RVV_TYPE (vint32m2_t, 15, __rvv_int32m2_t, int32, VNx4SI, VNx2SI, _i32m2,
+DEF_RVV_TYPE (vint32m2_t, 15, __rvv_int32m2_t, int32, VNx8SI, VNx4SI, VNx2SI, _i32m2,
_i32, _e32m2)
-DEF_RVV_TYPE (vuint32m2_t, 16, __rvv_uint32m2_t, uint32, VNx4SI, VNx2SI, _u32m2,
+DEF_RVV_TYPE (vuint32m2_t, 16, __rvv_uint32m2_t, uint32, VNx8SI, VNx4SI, VNx2SI, _u32m2,
_u32, _e32m2)
/* LMUL = 4:
+ Machine mode = VNx16SImode when TARGET_MIN_VLEN >= 128.
Machine mode = VNx8SImode when TARGET_MIN_VLEN > 32.
Machine mode = VNx4SImode when TARGET_MIN_VLEN = 32. */
-DEF_RVV_TYPE (vint32m4_t, 15, __rvv_int32m4_t, int32, VNx8SI, VNx4SI, _i32m4,
+DEF_RVV_TYPE (vint32m4_t, 15, __rvv_int32m4_t, int32, VNx16SI, VNx8SI, VNx4SI, _i32m4,
_i32, _e32m4)
-DEF_RVV_TYPE (vuint32m4_t, 16, __rvv_uint32m4_t, uint32, VNx8SI, VNx4SI, _u32m4,
+DEF_RVV_TYPE (vuint32m4_t, 16, __rvv_uint32m4_t, uint32, VNx16SI, VNx8SI, VNx4SI, _u32m4,
_u32, _e32m4)
/* LMUL = 8:
+ Machine mode = VNx32SImode when TARGET_MIN_VLEN >= 128.
Machine mode = VNx16SImode when TARGET_MIN_VLEN > 32.
Machine mode = VNx8SImode when TARGET_MIN_VLEN = 32. */
-DEF_RVV_TYPE (vint32m8_t, 15, __rvv_int32m8_t, int32, VNx16SI, VNx8SI, _i32m8,
+DEF_RVV_TYPE (vint32m8_t, 15, __rvv_int32m8_t, int32, VNx32SI, VNx16SI, VNx8SI, _i32m8,
_i32, _e32m8)
-DEF_RVV_TYPE (vuint32m8_t, 16, __rvv_uint32m8_t, uint32, VNx16SI, VNx8SI,
+DEF_RVV_TYPE (vuint32m8_t, 16, __rvv_uint32m8_t, uint32, VNx32SI, VNx16SI, VNx8SI,
_u32m8, _u32, _e32m8)
/* SEW = 64:
- Enable when TARGET_MIN_VLEN > 32. */
-DEF_RVV_TYPE (vint64m1_t, 15, __rvv_int64m1_t, int64, VNx1DI, VOID, _i64m1,
+ Disable when !TARGET_VECTOR_ELEN_64. */
+DEF_RVV_TYPE (vint64m1_t, 15, __rvv_int64m1_t, int64, VNx2DI, VNx1DI, VOID, _i64m1,
_i64, _e64m1)
-DEF_RVV_TYPE (vuint64m1_t, 16, __rvv_uint64m1_t, uint64, VNx1DI, VOID, _u64m1,
+DEF_RVV_TYPE (vuint64m1_t, 16, __rvv_uint64m1_t, uint64, VNx2DI, VNx1DI, VOID, _u64m1,
_u64, _e64m1)
-DEF_RVV_TYPE (vint64m2_t, 15, __rvv_int64m2_t, int64, VNx2DI, VOID, _i64m2,
+DEF_RVV_TYPE (vint64m2_t, 15, __rvv_int64m2_t, int64, VNx4DI, VNx2DI, VOID, _i64m2,
_i64, _e64m2)
-DEF_RVV_TYPE (vuint64m2_t, 16, __rvv_uint64m2_t, uint64, VNx2DI, VOID, _u64m2,
+DEF_RVV_TYPE (vuint64m2_t, 16, __rvv_uint64m2_t, uint64, VNx4DI, VNx2DI, VOID, _u64m2,
_u64, _e64m2)
-DEF_RVV_TYPE (vint64m4_t, 15, __rvv_int64m4_t, int64, VNx4DI, VOID, _i64m4,
+DEF_RVV_TYPE (vint64m4_t, 15, __rvv_int64m4_t, int64, VNx8DI, VNx4DI, VOID, _i64m4,
_i64, _e64m4)
-DEF_RVV_TYPE (vuint64m4_t, 16, __rvv_uint64m4_t, uint64, VNx4DI, VOID, _u64m4,
+DEF_RVV_TYPE (vuint64m4_t, 16, __rvv_uint64m4_t, uint64, VNx8DI, VNx4DI, VOID, _u64m4,
_u64, _e64m4)
-DEF_RVV_TYPE (vint64m8_t, 15, __rvv_int64m8_t, int64, VNx8DI, VOID, _i64m8,
+DEF_RVV_TYPE (vint64m8_t, 15, __rvv_int64m8_t, int64, VNx16DI, VNx8DI, VOID, _i64m8,
_i64, _e64m8)
-DEF_RVV_TYPE (vuint64m8_t, 16, __rvv_uint64m8_t, uint64, VNx8DI, VOID, _u64m8,
+DEF_RVV_TYPE (vuint64m8_t, 16, __rvv_uint64m8_t, uint64, VNx16DI, VNx8DI, VOID, _u64m8,
_u64, _e64m8)
+/* Disable all when !TARGET_VECTOR_ELEN_FP_32. */
/* LMUL = 1/2:
- Only enble when TARGET_MIN_VLEN > 32 and machine mode = VNx1SFmode. */
-DEF_RVV_TYPE (vfloat32mf2_t, 18, __rvv_float32mf2_t, float, VNx1SF, VOID,
+ Only enble when TARGET_MIN_VLEN > 32.
+ Machine mode = VNx1SFmode when TARGET_MIN_VLEN < 128.
+ Machine mode = VNx2SFmode when TARGET_MIN_VLEN >= 128. */
+DEF_RVV_TYPE (vfloat32mf2_t, 18, __rvv_float32mf2_t, float, VNx2SF, VNx1SF, VOID,
_f32mf2, _f32, _e32mf2)
/* LMUL = 1:
+ Machine mode = VNx4SFmode when TARGET_MIN_VLEN >= 128.
Machine mode = VNx2SFmode when TARGET_MIN_VLEN > 32.
Machine mode = VNx1SFmode when TARGET_MIN_VLEN = 32. */
-DEF_RVV_TYPE (vfloat32m1_t, 17, __rvv_float32m1_t, float, VNx2SF, VNx1SF,
+DEF_RVV_TYPE (vfloat32m1_t, 17, __rvv_float32m1_t, float, VNx4SF, VNx2SF, VNx1SF,
_f32m1, _f32, _e32m1)
/* LMUL = 2:
+ Machine mode = VNx8SFmode when TARGET_MIN_VLEN >= 128.
Machine mode = VNx4SFmode when TARGET_MIN_VLEN > 32.
Machine mode = VNx2SFmode when TARGET_MIN_VLEN = 32. */
-DEF_RVV_TYPE (vfloat32m2_t, 17, __rvv_float32m2_t, float, VNx4SF, VNx2SF,
+DEF_RVV_TYPE (vfloat32m2_t, 17, __rvv_float32m2_t, float, VNx8SF, VNx4SF, VNx2SF,
_f32m2, _f32, _e32m2)
/* LMUL = 4:
+ Machine mode = VNx16SFmode when TARGET_MIN_VLEN >= 128.
Machine mode = VNx8SFmode when TARGET_MIN_VLEN > 32.
Machine mode = VNx4SFmode when TARGET_MIN_VLEN = 32. */
-DEF_RVV_TYPE (vfloat32m4_t, 17, __rvv_float32m4_t, float, VNx8SF, VNx4SF,
+DEF_RVV_TYPE (vfloat32m4_t, 17, __rvv_float32m4_t, float, VNx16SF, VNx8SF, VNx4SF,
_f32m4, _f32, _e32m4)
/* LMUL = 8:
+ Machine mode = VNx32SFmode when TARGET_MIN_VLEN >= 128.
Machine mode = VNx16SFmode when TARGET_MIN_VLEN > 32.
Machine mode = VNx8SFmode when TARGET_MIN_VLEN = 32. */
-DEF_RVV_TYPE (vfloat32m8_t, 17, __rvv_float32m8_t, float, VNx16SF, VNx8SF,
+DEF_RVV_TYPE (vfloat32m8_t, 17, __rvv_float32m8_t, float, VNx32SF, VNx16SF, VNx8SF,
_f32m8, _f32, _e32m8)
/* SEW = 64:
- Enable when TARGET_VECTOR_FP64. */
-DEF_RVV_TYPE (vfloat64m1_t, 17, __rvv_float64m1_t, double, VNx1DF, VOID, _f64m1,
+ Disable when !TARGET_VECTOR_ELEN_FP_64. */
+DEF_RVV_TYPE (vfloat64m1_t, 17, __rvv_float64m1_t, double, VNx2DF, VNx1DF, VOID, _f64m1,
_f64, _e64m1)
-DEF_RVV_TYPE (vfloat64m2_t, 17, __rvv_float64m2_t, double, VNx2DF, VOID, _f64m2,
+DEF_RVV_TYPE (vfloat64m2_t, 17, __rvv_float64m2_t, double, VNx4DF, VNx2DF, VOID, _f64m2,
_f64, _e64m2)
-DEF_RVV_TYPE (vfloat64m4_t, 17, __rvv_float64m4_t, double, VNx4DF, VOID, _f64m4,
+DEF_RVV_TYPE (vfloat64m4_t, 17, __rvv_float64m4_t, double, VNx8DF, VNx4DF, VOID, _f64m4,
_f64, _e64m4)
-DEF_RVV_TYPE (vfloat64m8_t, 17, __rvv_float64m8_t, double, VNx8DF, VOID, _f64m8,
+DEF_RVV_TYPE (vfloat64m8_t, 17, __rvv_float64m8_t, double, VNx16DF, VNx8DF, VOID, _f64m8,
_f64, _e64m8)
DEF_RVV_OP_TYPE (vv)
@@ -81,69 +81,80 @@ TODO: FP16 vector needs support of 'zvfh', we don't support it yet. */
For example: 'MODE' = VNx64BImode needs TARGET_MIN_VLEN > 32. */
#ifndef ENTRY
#define ENTRY(MODE, REQUIREMENT, VLMUL_FOR_MIN_VLEN32, RATIO_FOR_MIN_VLEN32, \
- VLMUL_FOR_MIN_VLEN64, RATIO_FOR_MIN_VLEN64)
+ VLMUL_FOR_MIN_VLEN64, RATIO_FOR_MIN_VLEN64, \
+ VLMUL_FOR_MIN_VLEN128, RATIO_FOR_MIN_VLEN128)
#endif
/* Mask modes. Disable VNx64BImode when TARGET_MIN_VLEN == 32. */
-ENTRY (VNx64BI, TARGET_MIN_VLEN > 32, LMUL_RESERVED, 0, LMUL_8, 1)
-ENTRY (VNx32BI, true, LMUL_8, 1, LMUL_4, 2)
-ENTRY (VNx16BI, true, LMUL_4, 2, LMUL_2, 4)
-ENTRY (VNx8BI, true, LMUL_2, 4, LMUL_1, 8)
-ENTRY (VNx4BI, true, LMUL_1, 8, LMUL_F2, 16)
-ENTRY (VNx2BI, true, LMUL_F2, 16, LMUL_F4, 32)
-ENTRY (VNx1BI, true, LMUL_F4, 32, LMUL_F8, 64)
+ENTRY (VNx128BI, TARGET_MIN_VLEN >= 128, LMUL_RESERVED, 0, LMUL_RESERVED, 0, LMUL_8, 1)
+ENTRY (VNx64BI, TARGET_MIN_VLEN > 32, LMUL_RESERVED, 0, LMUL_8, 1, LMUL_4, 2)
+ENTRY (VNx32BI, true, LMUL_8, 1, LMUL_4, 2, LMUL_2, 4)
+ENTRY (VNx16BI, true, LMUL_4, 2, LMUL_2, 4, LMUL_1, 8)
+ENTRY (VNx8BI, true, LMUL_2, 4, LMUL_1, 8, LMUL_F2, 16)
+ENTRY (VNx4BI, true, LMUL_1, 8, LMUL_F2, 16, LMUL_F4, 32)
+ENTRY (VNx2BI, true, LMUL_F2, 16, LMUL_F4, 32, LMUL_F8, 64)
+ENTRY (VNx1BI, TARGET_MIN_VLEN < 128, LMUL_F4, 32, LMUL_F8, 64, LMUL_RESERVED, 0)
/* SEW = 8. Disable VNx64QImode when TARGET_MIN_VLEN == 32. */
-ENTRY (VNx64QI, TARGET_MIN_VLEN > 32, LMUL_RESERVED, 0, LMUL_8, 1)
-ENTRY (VNx32QI, true, LMUL_8, 1, LMUL_4, 2)
-ENTRY (VNx16QI, true, LMUL_4, 2, LMUL_2, 4)
-ENTRY (VNx8QI, true, LMUL_2, 4, LMUL_1, 8)
-ENTRY (VNx4QI, true, LMUL_1, 8, LMUL_F2, 16)
-ENTRY (VNx2QI, true, LMUL_F2, 16, LMUL_F4, 32)
-ENTRY (VNx1QI, true, LMUL_F4, 32, LMUL_F8, 64)
+ENTRY (VNx128QI, TARGET_MIN_VLEN >= 128, LMUL_RESERVED, 0, LMUL_RESERVED, 0, LMUL_8, 1)
+ENTRY (VNx64QI, TARGET_MIN_VLEN > 32, LMUL_RESERVED, 0, LMUL_8, 1, LMUL_4, 2)
+ENTRY (VNx32QI, true, LMUL_8, 1, LMUL_4, 2, LMUL_2, 4)
+ENTRY (VNx16QI, true, LMUL_4, 2, LMUL_2, 4, LMUL_1, 8)
+ENTRY (VNx8QI, true, LMUL_2, 4, LMUL_1, 8, LMUL_F2, 16)
+ENTRY (VNx4QI, true, LMUL_1, 8, LMUL_F2, 16, LMUL_F4, 32)
+ENTRY (VNx2QI, true, LMUL_F2, 16, LMUL_F4, 32, LMUL_F8, 64)
+ENTRY (VNx1QI, TARGET_MIN_VLEN < 128, LMUL_F4, 32, LMUL_F8, 64, LMUL_RESERVED, 0)
/* SEW = 16. Disable VNx32HImode when TARGET_MIN_VLEN == 32. */
-ENTRY (VNx32HI, TARGET_MIN_VLEN > 32, LMUL_RESERVED, 0, LMUL_8, 2)
-ENTRY (VNx16HI, true, LMUL_8, 2, LMUL_4, 4)
-ENTRY (VNx8HI, true, LMUL_4, 4, LMUL_2, 8)
-ENTRY (VNx4HI, true, LMUL_2, 8, LMUL_1, 16)
-ENTRY (VNx2HI, true, LMUL_1, 16, LMUL_F2, 32)
-ENTRY (VNx1HI, true, LMUL_F2, 32, LMUL_F4, 64)
+ENTRY (VNx64HI, TARGET_MIN_VLEN >= 128, LMUL_RESERVED, 0, LMUL_RESERVED, 0, LMUL_8, 2)
+ENTRY (VNx32HI, TARGET_MIN_VLEN > 32, LMUL_RESERVED, 0, LMUL_8, 2, LMUL_4, 4)
+ENTRY (VNx16HI, true, LMUL_8, 2, LMUL_4, 4, LMUL_2, 8)
+ENTRY (VNx8HI, true, LMUL_4, 4, LMUL_2, 8, LMUL_1, 16)
+ENTRY (VNx4HI, true, LMUL_2, 8, LMUL_1, 16, LMUL_F2, 32)
+ENTRY (VNx2HI, true, LMUL_1, 16, LMUL_F2, 32, LMUL_F4, 64)
+ENTRY (VNx1HI, TARGET_MIN_VLEN < 128, LMUL_F2, 32, LMUL_F4, 64, LMUL_RESERVED, 0)
/* TODO:Disable all FP16 vector, enable them when 'zvfh' is supported. */
-ENTRY (VNx32HF, false, LMUL_RESERVED, 0, LMUL_8, 2)
-ENTRY (VNx16HF, false, LMUL_8, 2, LMUL_4, 4)
-ENTRY (VNx8HF, false, LMUL_4, 4, LMUL_2, 8)
-ENTRY (VNx4HF, false, LMUL_2, 8, LMUL_1, 16)
-ENTRY (VNx2HF, false, LMUL_1, 16, LMUL_F2, 32)
-ENTRY (VNx1HF, false, LMUL_F2, 32, LMUL_F4, 64)
+ENTRY (VNx64HF, false, LMUL_RESERVED, 0, LMUL_RESERVED, 0, LMUL_8, 2)
+ENTRY (VNx32HF, false, LMUL_RESERVED, 0, LMUL_8, 2, LMUL_4, 4)
+ENTRY (VNx16HF, false, LMUL_8, 2, LMUL_4, 4, LMUL_2, 8)
+ENTRY (VNx8HF, false, LMUL_4, 4, LMUL_2, 8, LMUL_1, 16)
+ENTRY (VNx4HF, false, LMUL_2, 8, LMUL_1, 16, LMUL_F2, 32)
+ENTRY (VNx2HF, false, LMUL_1, 16, LMUL_F2, 32, LMUL_F4, 64)
+ENTRY (VNx1HF, false, LMUL_F2, 32, LMUL_F4, 64, LMUL_RESERVED, 0)
/* SEW = 32. Disable VNx16SImode when TARGET_MIN_VLEN == 32.
For single-precision floating-point, we need TARGET_VECTOR_ELEN_FP_32 to be
true. */
-ENTRY (VNx16SI, TARGET_MIN_VLEN > 32, LMUL_RESERVED, 0, LMUL_8, 4)
-ENTRY (VNx8SI, true, LMUL_8, 4, LMUL_4, 8)
-ENTRY (VNx4SI, true, LMUL_4, 8, LMUL_2, 16)
-ENTRY (VNx2SI, true, LMUL_2, 16, LMUL_1, 32)
-ENTRY (VNx1SI, true, LMUL_1, 32, LMUL_F2, 64)
-
-ENTRY (VNx16SF, TARGET_VECTOR_ELEN_FP_32, LMUL_RESERVED, 0, LMUL_8, 4)
-ENTRY (VNx8SF, TARGET_VECTOR_ELEN_FP_32, LMUL_8, 4, LMUL_4, 8)
-ENTRY (VNx4SF, TARGET_VECTOR_ELEN_FP_32, LMUL_4, 8, LMUL_2, 16)
-ENTRY (VNx2SF, TARGET_VECTOR_ELEN_FP_32, LMUL_2, 16, LMUL_1, 32)
-ENTRY (VNx1SF, TARGET_VECTOR_ELEN_FP_32, LMUL_1, 32, LMUL_F2, 64)
+ENTRY (VNx32SI, TARGET_MIN_VLEN >= 128, LMUL_RESERVED, 0, LMUL_RESERVED, 0, LMUL_8, 4)
+ENTRY (VNx16SI, TARGET_MIN_VLEN > 32, LMUL_RESERVED, 0, LMUL_8, 4, LMUL_4, 8)
+ENTRY (VNx8SI, true, LMUL_8, 4, LMUL_4, 8, LMUL_2, 16)
+ENTRY (VNx4SI, true, LMUL_4, 8, LMUL_2, 16, LMUL_1, 32)
+ENTRY (VNx2SI, true, LMUL_2, 16, LMUL_1, 32, LMUL_F2, 64)
+ENTRY (VNx1SI, TARGET_MIN_VLEN < 128, LMUL_1, 32, LMUL_F2, 64, LMUL_RESERVED, 0)
+
+ENTRY (VNx32SF, TARGET_VECTOR_ELEN_FP_32 && TARGET_MIN_VLEN >= 128, LMUL_RESERVED, 0, LMUL_RESERVED, 0, LMUL_8, 4)
+ENTRY (VNx16SF, TARGET_VECTOR_ELEN_FP_32 && TARGET_MIN_VLEN > 32, LMUL_RESERVED, 0,
+ LMUL_8, 4, LMUL_4, 8)
+ENTRY (VNx8SF, TARGET_VECTOR_ELEN_FP_32, LMUL_8, 4, LMUL_4, 8, LMUL_2, 16)
+ENTRY (VNx4SF, TARGET_VECTOR_ELEN_FP_32, LMUL_4, 8, LMUL_2, 16, LMUL_1, 32)
+ENTRY (VNx2SF, TARGET_VECTOR_ELEN_FP_32, LMUL_2, 16, LMUL_1, 32, LMUL_F2, 64)
+ENTRY (VNx1SF, TARGET_VECTOR_ELEN_FP_32 && TARGET_MIN_VLEN < 128, LMUL_1, 32, LMUL_F2, 64, LMUL_RESERVED, 0)
/* SEW = 64. Enable when TARGET_VECTOR_ELEN_64 is true.
For double-precision floating-point, we need TARGET_VECTOR_ELEN_FP_64 to be
true. */
-ENTRY (VNx8DI, TARGET_VECTOR_ELEN_64, LMUL_RESERVED, 0, LMUL_8, 8)
-ENTRY (VNx4DI, TARGET_VECTOR_ELEN_64, LMUL_RESERVED, 0, LMUL_4, 16)
-ENTRY (VNx2DI, TARGET_VECTOR_ELEN_64, LMUL_RESERVED, 0, LMUL_2, 32)
-ENTRY (VNx1DI, TARGET_VECTOR_ELEN_64, LMUL_RESERVED, 0, LMUL_1, 64)
-
-ENTRY (VNx8DF, TARGET_VECTOR_ELEN_FP_64, LMUL_RESERVED, 0, LMUL_8, 8)
-ENTRY (VNx4DF, TARGET_VECTOR_ELEN_FP_64, LMUL_RESERVED, 0, LMUL_4, 16)
-ENTRY (VNx2DF, TARGET_VECTOR_ELEN_FP_64, LMUL_RESERVED, 0, LMUL_2, 32)
-ENTRY (VNx1DF, TARGET_VECTOR_ELEN_FP_64, LMUL_RESERVED, 0, LMUL_1, 64)
+ENTRY (VNx16DI, TARGET_VECTOR_ELEN_64 && TARGET_MIN_VLEN >= 128, LMUL_RESERVED, 0, LMUL_RESERVED, 0, LMUL_8, 8)
+ENTRY (VNx8DI, TARGET_VECTOR_ELEN_64, LMUL_RESERVED, 0, LMUL_8, 8, LMUL_4, 16)
+ENTRY (VNx4DI, TARGET_VECTOR_ELEN_64, LMUL_RESERVED, 0, LMUL_4, 16, LMUL_2, 32)
+ENTRY (VNx2DI, TARGET_VECTOR_ELEN_64, LMUL_RESERVED, 0, LMUL_2, 32, LMUL_1, 64)
+ENTRY (VNx1DI, TARGET_VECTOR_ELEN_64 && TARGET_MIN_VLEN < 128, LMUL_RESERVED, 0, LMUL_1, 64, LMUL_RESERVED, 0)
+
+ENTRY (VNx16DF, TARGET_VECTOR_ELEN_FP_64 && TARGET_MIN_VLEN >= 128, LMUL_RESERVED, 0, LMUL_RESERVED, 0, LMUL_8, 8)
+ENTRY (VNx8DF, TARGET_VECTOR_ELEN_FP_64 && TARGET_MIN_VLEN > 32, LMUL_RESERVED, 0,
+ LMUL_8, 8, LMUL_4, 16)
+ENTRY (VNx4DF, TARGET_VECTOR_ELEN_FP_64, LMUL_RESERVED, 0, LMUL_4, 16, LMUL_2, 32)
+ENTRY (VNx2DF, TARGET_VECTOR_ELEN_FP_64, LMUL_RESERVED, 0, LMUL_2, 32, LMUL_1, 64)
+ENTRY (VNx1DF, TARGET_VECTOR_ELEN_FP_64 && TARGET_MIN_VLEN < 128, LMUL_RESERVED, 0, LMUL_1, 64, LMUL_RESERVED, 0)
#undef ENTRY
@@ -1974,6 +1974,8 @@ riscv_legitimize_poly_move (machine_mode mode, rtx dest, rtx tmp, rtx src)
div_factor = 4;
else if ((factor % (vlenb / 8)) == 0)
div_factor = 8;
+ else if ((factor % (vlenb / 16)) == 0)
+ div_factor = 16;
else
gcc_unreachable ();
@@ -6192,7 +6194,15 @@ riscv_init_machine_status (void)
static poly_uint16
riscv_convert_vector_bits (void)
{
- if (TARGET_MIN_VLEN > 32)
+ if (TARGET_MIN_VLEN >= 128)
+ {
+ /* We have Full 'V' extension for application processors. It's specified
+ by -march=rv64gcv/rv32gcv, The 'V' extension depends upon the Zvl128b
+ and Zve64d extensions. Thus the number of bytes in a vector is 16 + 16
+ * x1 which is riscv_vector_chunks * 16 = poly_int (16, 16). */
+ riscv_bytes_per_vector_chunk = 16;
+ }
+ else if (TARGET_MIN_VLEN > 32)
{
/* When targetting minimum VLEN > 32, we should use 64-bit chunk size.
Otherwise we can not include SEW = 64bits.
@@ -163,13 +163,13 @@ (define_attr "move_type"
;; Main data type used by the insn
(define_attr "mode" "unknown,none,QI,HI,SI,DI,TI,HF,SF,DF,TF,
- VNx1BI,VNx2BI,VNx4BI,VNx8BI,VNx16BI,VNx32BI,VNx64BI,
- VNx1QI,VNx2QI,VNx4QI,VNx8QI,VNx16QI,VNx32QI,VNx64QI,
- VNx1HI,VNx2HI,VNx4HI,VNx8HI,VNx16HI,VNx32HI,
- VNx1SI,VNx2SI,VNx4SI,VNx8SI,VNx16SI,
- VNx1DI,VNx2DI,VNx4DI,VNx8DI,
- VNx1SF,VNx2SF,VNx4SF,VNx8SF,VNx16SF,
- VNx1DF,VNx2DF,VNx4DF,VNx8DF"
+ VNx1BI,VNx2BI,VNx4BI,VNx8BI,VNx16BI,VNx32BI,VNx64BI,VNx128BI,
+ VNx1QI,VNx2QI,VNx4QI,VNx8QI,VNx16QI,VNx32QI,VNx64QI,VNx128QI,
+ VNx1HI,VNx2HI,VNx4HI,VNx8HI,VNx16HI,VNx32HI,VNx64HI,
+ VNx1SI,VNx2SI,VNx4SI,VNx8SI,VNx16SI,VNx32SI,
+ VNx1DI,VNx2DI,VNx4DI,VNx8DI,VNx16DI,
+ VNx1SF,VNx2SF,VNx4SF,VNx8SF,VNx16SF,VNx32SF,
+ VNx1DF,VNx2DF,VNx4DF,VNx8DF,VNx16DF"
(const_string "unknown"))
;; True if the main data type is twice the size of a word.
@@ -83,157 +83,181 @@ (define_c_enum "unspec" [
])
(define_mode_iterator V [
- VNx1QI VNx2QI VNx4QI VNx8QI VNx16QI VNx32QI (VNx64QI "TARGET_MIN_VLEN > 32")
- VNx1HI VNx2HI VNx4HI VNx8HI VNx16HI (VNx32HI "TARGET_MIN_VLEN > 32")
- VNx1SI VNx2SI VNx4SI VNx8SI (VNx16SI "TARGET_MIN_VLEN > 32")
- (VNx1DI "TARGET_VECTOR_ELEN_64") (VNx2DI "TARGET_VECTOR_ELEN_64")
- (VNx4DI "TARGET_VECTOR_ELEN_64") (VNx8DI "TARGET_VECTOR_ELEN_64")
- (VNx1SF "TARGET_VECTOR_ELEN_FP_32")
+ (VNx1QI "TARGET_MIN_VLEN < 128") VNx2QI VNx4QI VNx8QI VNx16QI VNx32QI (VNx64QI "TARGET_MIN_VLEN > 32") (VNx128QI "TARGET_MIN_VLEN >= 128")
+ (VNx1HI "TARGET_MIN_VLEN < 128") VNx2HI VNx4HI VNx8HI VNx16HI (VNx32HI "TARGET_MIN_VLEN > 32") (VNx64HI "TARGET_MIN_VLEN >= 128")
+ (VNx1SI "TARGET_MIN_VLEN < 128") VNx2SI VNx4SI VNx8SI (VNx16SI "TARGET_MIN_VLEN > 32") (VNx32SI "TARGET_MIN_VLEN >= 128")
+ (VNx1DI "TARGET_VECTOR_ELEN_64 && TARGET_MIN_VLEN < 128") (VNx2DI "TARGET_VECTOR_ELEN_64")
+ (VNx4DI "TARGET_VECTOR_ELEN_64") (VNx8DI "TARGET_VECTOR_ELEN_64") (VNx16DI "TARGET_VECTOR_ELEN_64 && TARGET_MIN_VLEN >= 128")
+ (VNx1SF "TARGET_VECTOR_ELEN_FP_32 && TARGET_MIN_VLEN < 128")
(VNx2SF "TARGET_VECTOR_ELEN_FP_32")
(VNx4SF "TARGET_VECTOR_ELEN_FP_32")
(VNx8SF "TARGET_VECTOR_ELEN_FP_32")
(VNx16SF "TARGET_VECTOR_ELEN_FP_32 && TARGET_MIN_VLEN > 32")
- (VNx1DF "TARGET_VECTOR_ELEN_FP_64")
+ (VNx32SF "TARGET_VECTOR_ELEN_FP_32 && TARGET_MIN_VLEN >= 128")
+ (VNx1DF "TARGET_VECTOR_ELEN_FP_64 && TARGET_MIN_VLEN < 128")
(VNx2DF "TARGET_VECTOR_ELEN_FP_64")
(VNx4DF "TARGET_VECTOR_ELEN_FP_64")
(VNx8DF "TARGET_VECTOR_ELEN_FP_64")
+ (VNx16DF "TARGET_VECTOR_ELEN_FP_64 && TARGET_MIN_VLEN >= 128")
])
(define_mode_iterator VEEWEXT2 [
- VNx1HI VNx2HI VNx4HI VNx8HI VNx16HI (VNx32HI "TARGET_MIN_VLEN > 32")
- VNx1SI VNx2SI VNx4SI VNx8SI (VNx16SI "TARGET_MIN_VLEN > 32")
- (VNx1DI "TARGET_VECTOR_ELEN_64") (VNx2DI "TARGET_VECTOR_ELEN_64")
- (VNx4DI "TARGET_VECTOR_ELEN_64") (VNx8DI "TARGET_VECTOR_ELEN_64")
- (VNx1SF "TARGET_VECTOR_ELEN_FP_32")
+ (VNx1HI "TARGET_MIN_VLEN < 128") VNx2HI VNx4HI VNx8HI VNx16HI (VNx32HI "TARGET_MIN_VLEN > 32") (VNx64HI "TARGET_MIN_VLEN >= 128")
+ (VNx1SI "TARGET_MIN_VLEN < 128") VNx2SI VNx4SI VNx8SI (VNx16SI "TARGET_MIN_VLEN > 32") (VNx32SI "TARGET_MIN_VLEN >= 128")
+ (VNx1DI "TARGET_VECTOR_ELEN_64 && TARGET_MIN_VLEN < 128") (VNx2DI "TARGET_VECTOR_ELEN_64")
+ (VNx4DI "TARGET_VECTOR_ELEN_64") (VNx8DI "TARGET_VECTOR_ELEN_64") (VNx16DI "TARGET_VECTOR_ELEN_64 && TARGET_MIN_VLEN >= 128")
+ (VNx1SF "TARGET_VECTOR_ELEN_FP_32 && TARGET_MIN_VLEN < 128")
(VNx2SF "TARGET_VECTOR_ELEN_FP_32")
(VNx4SF "TARGET_VECTOR_ELEN_FP_32")
(VNx8SF "TARGET_VECTOR_ELEN_FP_32")
(VNx16SF "TARGET_VECTOR_ELEN_FP_32 && TARGET_MIN_VLEN > 32")
- (VNx1DF "TARGET_VECTOR_ELEN_FP_64")
+ (VNx32SF "TARGET_VECTOR_ELEN_FP_32 && TARGET_MIN_VLEN >= 128")
+ (VNx1DF "TARGET_VECTOR_ELEN_FP_64 && TARGET_MIN_VLEN < 128")
(VNx2DF "TARGET_VECTOR_ELEN_FP_64")
(VNx4DF "TARGET_VECTOR_ELEN_FP_64")
(VNx8DF "TARGET_VECTOR_ELEN_FP_64")
+ (VNx16DF "TARGET_VECTOR_ELEN_FP_64 && TARGET_MIN_VLEN >= 128")
])
(define_mode_iterator VEEWEXT4 [
- VNx1SI VNx2SI VNx4SI VNx8SI (VNx16SI "TARGET_MIN_VLEN > 32")
- (VNx1DI "TARGET_VECTOR_ELEN_64") (VNx2DI "TARGET_VECTOR_ELEN_64")
- (VNx4DI "TARGET_VECTOR_ELEN_64") (VNx8DI "TARGET_VECTOR_ELEN_64")
- (VNx1SF "TARGET_VECTOR_ELEN_FP_32")
+ (VNx1SI "TARGET_MIN_VLEN < 128") VNx2SI VNx4SI VNx8SI (VNx16SI "TARGET_MIN_VLEN > 32") (VNx32SI "TARGET_MIN_VLEN >= 128")
+ (VNx1DI "TARGET_VECTOR_ELEN_64 && TARGET_MIN_VLEN < 128") (VNx2DI "TARGET_VECTOR_ELEN_64")
+ (VNx4DI "TARGET_VECTOR_ELEN_64") (VNx8DI "TARGET_VECTOR_ELEN_64") (VNx16DI "TARGET_VECTOR_ELEN_64 && TARGET_MIN_VLEN >= 128")
+ (VNx1SF "TARGET_VECTOR_ELEN_FP_32 && TARGET_MIN_VLEN < 128")
(VNx2SF "TARGET_VECTOR_ELEN_FP_32")
(VNx4SF "TARGET_VECTOR_ELEN_FP_32")
(VNx8SF "TARGET_VECTOR_ELEN_FP_32")
(VNx16SF "TARGET_VECTOR_ELEN_FP_32 && TARGET_MIN_VLEN > 32")
- (VNx1DF "TARGET_VECTOR_ELEN_FP_64")
+ (VNx32SF "TARGET_VECTOR_ELEN_FP_32 && TARGET_MIN_VLEN >= 128")
+ (VNx1DF "TARGET_VECTOR_ELEN_FP_64 && TARGET_MIN_VLEN < 128")
(VNx2DF "TARGET_VECTOR_ELEN_FP_64")
(VNx4DF "TARGET_VECTOR_ELEN_FP_64")
(VNx8DF "TARGET_VECTOR_ELEN_FP_64")
+ (VNx16DF "TARGET_VECTOR_ELEN_FP_64 && TARGET_MIN_VLEN >= 128")
])
(define_mode_iterator VEEWEXT8 [
(VNx1DI "TARGET_VECTOR_ELEN_64") (VNx2DI "TARGET_VECTOR_ELEN_64")
- (VNx4DI "TARGET_VECTOR_ELEN_64") (VNx8DI "TARGET_VECTOR_ELEN_64")
- (VNx1DF "TARGET_VECTOR_ELEN_FP_64")
+ (VNx4DI "TARGET_VECTOR_ELEN_64") (VNx8DI "TARGET_VECTOR_ELEN_64") (VNx16DI "TARGET_VECTOR_ELEN_64 && TARGET_MIN_VLEN >= 128")
+ (VNx1DF "TARGET_VECTOR_ELEN_FP_64 && TARGET_MIN_VLEN < 128")
(VNx2DF "TARGET_VECTOR_ELEN_FP_64")
(VNx4DF "TARGET_VECTOR_ELEN_FP_64")
(VNx8DF "TARGET_VECTOR_ELEN_FP_64")
+ (VNx16DF "TARGET_VECTOR_ELEN_FP_64 && TARGET_MIN_VLEN >= 128")
])
(define_mode_iterator VEEWTRUNC2 [
- VNx1QI VNx2QI VNx4QI VNx8QI VNx16QI VNx32QI
- VNx1HI VNx2HI VNx4HI VNx8HI VNx16HI
- VNx1SI VNx2SI VNx4SI VNx8SI
- (VNx1SF "TARGET_VECTOR_ELEN_FP_32")
+ (VNx1QI "TARGET_MIN_VLEN < 128") VNx2QI VNx4QI VNx8QI VNx16QI VNx32QI (VNx64QI "TARGET_MIN_VLEN >= 128")
+ (VNx1HI "TARGET_MIN_VLEN < 128") VNx2HI VNx4HI VNx8HI VNx16HI (VNx32HI "TARGET_MIN_VLEN >= 128")
+ (VNx1SI "TARGET_MIN_VLEN < 128") VNx2SI VNx4SI VNx8SI (VNx16SI "TARGET_MIN_VLEN >= 128")
+ (VNx1SF "TARGET_VECTOR_ELEN_FP_32 && TARGET_MIN_VLEN < 128")
(VNx2SF "TARGET_VECTOR_ELEN_FP_32")
(VNx4SF "TARGET_VECTOR_ELEN_FP_32")
(VNx8SF "TARGET_VECTOR_ELEN_FP_32")
+ (VNx16SF "TARGET_VECTOR_ELEN_FP_32 && TARGET_MIN_VLEN >= 128")
])
(define_mode_iterator VEEWTRUNC4 [
- VNx1QI VNx2QI VNx4QI VNx8QI VNx16QI
- VNx1HI VNx2HI VNx4HI VNx8HI
+ (VNx1QI "TARGET_MIN_VLEN < 128") VNx2QI VNx4QI VNx8QI VNx16QI (VNx32QI "TARGET_MIN_VLEN >= 128")
+ (VNx1HI "TARGET_MIN_VLEN < 128") VNx2HI VNx4HI VNx8HI (VNx16HI "TARGET_MIN_VLEN >= 128")
])
(define_mode_iterator VEEWTRUNC8 [
- VNx1QI VNx2QI VNx4QI VNx8QI
+ (VNx1QI "TARGET_MIN_VLEN < 128") VNx2QI VNx4QI VNx8QI (VNx16QI "TARGET_MIN_VLEN >= 128")
])
(define_mode_iterator VLMULEXT2 [
- VNx1QI VNx2QI VNx4QI VNx8QI VNx16QI VNx32QI
- VNx1HI VNx2HI VNx4HI VNx8HI VNx16HI
- VNx1SI VNx2SI VNx4SI VNx8SI
- (VNx1DI "TARGET_VECTOR_ELEN_64") (VNx2DI "TARGET_VECTOR_ELEN_64")
- (VNx4DI "TARGET_VECTOR_ELEN_64")
- (VNx1SF "TARGET_VECTOR_ELEN_FP_32")
+ (VNx1QI "TARGET_MIN_VLEN < 128") VNx2QI VNx4QI VNx8QI VNx16QI VNx32QI (VNx64QI "TARGET_MIN_VLEN >= 128")
+ (VNx1HI "TARGET_MIN_VLEN < 128") VNx2HI VNx4HI VNx8HI VNx16HI (VNx32HI "TARGET_MIN_VLEN >= 128")
+ (VNx1SI "TARGET_MIN_VLEN < 128") VNx2SI VNx4SI VNx8SI (VNx16SI "TARGET_MIN_VLEN >= 128")
+ (VNx1DI "TARGET_VECTOR_ELEN_64 && TARGET_MIN_VLEN < 128") (VNx2DI "TARGET_VECTOR_ELEN_64")
+ (VNx4DI "TARGET_VECTOR_ELEN_64") (VNx8DI "TARGET_VECTOR_ELEN_64 && TARGET_MIN_VLEN >= 128")
+ (VNx1SF "TARGET_VECTOR_ELEN_FP_32 && TARGET_MIN_VLEN < 128")
(VNx2SF "TARGET_VECTOR_ELEN_FP_32")
(VNx4SF "TARGET_VECTOR_ELEN_FP_32")
(VNx8SF "TARGET_VECTOR_ELEN_FP_32")
+ (VNx16SF "TARGET_VECTOR_ELEN_FP_32 && TARGET_MIN_VLEN >= 128")
(VNx1DF "TARGET_VECTOR_ELEN_FP_64")
(VNx2DF "TARGET_VECTOR_ELEN_FP_64")
(VNx4DF "TARGET_VECTOR_ELEN_FP_64")
+ (VNx8DF "TARGET_VECTOR_ELEN_FP_32 && TARGET_MIN_VLEN >= 128")
])
(define_mode_iterator VLMULEXT4 [
- VNx1QI VNx2QI VNx4QI VNx8QI VNx16QI
- VNx1HI VNx2HI VNx4HI VNx8HI
- VNx1SI VNx2SI VNx4SI
- (VNx1DI "TARGET_VECTOR_ELEN_64") (VNx2DI "TARGET_VECTOR_ELEN_64")
- (VNx1SF "TARGET_VECTOR_ELEN_FP_32")
+ (VNx1QI "TARGET_MIN_VLEN < 128") VNx2QI VNx4QI VNx8QI VNx16QI (VNx32QI "TARGET_MIN_VLEN >= 128")
+ (VNx1HI "TARGET_MIN_VLEN < 128") VNx2HI VNx4HI VNx8HI (VNx16HI "TARGET_MIN_VLEN >= 128")
+ (VNx1SI "TARGET_MIN_VLEN < 128") VNx2SI VNx4SI (VNx8SI "TARGET_MIN_VLEN >= 128")
+ (VNx1DI "TARGET_VECTOR_ELEN_64 && TARGET_MIN_VLEN < 128") (VNx2DI "TARGET_VECTOR_ELEN_64")
+ (VNx1SF "TARGET_VECTOR_ELEN_FP_32 && TARGET_MIN_VLEN < 128")
(VNx2SF "TARGET_VECTOR_ELEN_FP_32")
(VNx4SF "TARGET_VECTOR_ELEN_FP_32")
- (VNx1DF "TARGET_VECTOR_ELEN_FP_64")
+ (VNx8SF "TARGET_VECTOR_ELEN_FP_32 && TARGET_MIN_VLEN >= 128")
+ (VNx1DF "TARGET_VECTOR_ELEN_FP_64 && TARGET_MIN_VLEN < 128")
(VNx2DF "TARGET_VECTOR_ELEN_FP_64")
+ (VNx4DF "TARGET_VECTOR_ELEN_FP_64 && TARGET_MIN_VLEN >= 128")
])
(define_mode_iterator VLMULEXT8 [
- VNx1QI VNx2QI VNx4QI VNx8QI
- VNx1HI VNx2HI VNx4HI
- VNx1SI VNx2SI
- (VNx1DI "TARGET_VECTOR_ELEN_64")
- (VNx1SF "TARGET_VECTOR_ELEN_FP_32")
+ (VNx1QI "TARGET_MIN_VLEN < 128") VNx2QI VNx4QI VNx8QI (VNx16QI "TARGET_MIN_VLEN >= 128")
+ (VNx1HI "TARGET_MIN_VLEN < 128") VNx2HI VNx4HI (VNx8HI "TARGET_MIN_VLEN >= 128")
+ (VNx1SI "TARGET_MIN_VLEN < 128") VNx2SI (VNx4SI "TARGET_MIN_VLEN >= 128")
+ (VNx1DI "TARGET_VECTOR_ELEN_64") (VNx2DI "TARGET_VECTOR_ELEN_64 && TARGET_MIN_VLEN >= 128")
+ (VNx1SF "TARGET_VECTOR_ELEN_FP_32 && TARGET_MIN_VLEN < 128")
(VNx2SF "TARGET_VECTOR_ELEN_FP_32")
+ (VNx4SF "TARGET_VECTOR_ELEN_FP_32 && TARGET_MIN_VLEN >= 128")
(VNx1DF "TARGET_VECTOR_ELEN_FP_64")
+ (VNx2DF "TARGET_VECTOR_ELEN_FP_32 && TARGET_MIN_VLEN >= 128")
])
(define_mode_iterator VLMULEXT16 [
- VNx1QI VNx2QI VNx4QI
- VNx1HI VNx2HI
- VNx1SI
- (VNx1SF "TARGET_VECTOR_ELEN_FP_32")
+ (VNx1QI "TARGET_MIN_VLEN < 128") VNx2QI VNx4QI (VNx8QI "TARGET_MIN_VLEN >= 128")
+ (VNx1HI "TARGET_MIN_VLEN < 128") VNx2HI (VNx4HI "TARGET_MIN_VLEN >= 128")
+ (VNx1SI "TARGET_MIN_VLEN < 128") (VNx2SI "TARGET_MIN_VLEN >= 128")
+ (VNx1SF "TARGET_VECTOR_ELEN_FP_32 && TARGET_MIN_VLEN < 128")
+ (VNx2SF "TARGET_VECTOR_ELEN_FP_32 && TARGET_MIN_VLEN >= 128")
])
(define_mode_iterator VLMULEXT32 [
- VNx1QI VNx2QI
- VNx1HI
+ (VNx1QI "TARGET_MIN_VLEN < 128") VNx2QI (VNx4QI "TARGET_MIN_VLEN >= 128")
+ (VNx1HI "TARGET_MIN_VLEN < 128")
])
(define_mode_iterator VLMULEXT64 [
- VNx1QI
+ (VNx1QI "TARGET_MIN_VLEN < 128") (VNx2QI "TARGET_MIN_VLEN >= 128")
])
(define_mode_iterator VEI16 [
- VNx1QI VNx2QI VNx4QI VNx8QI VNx16QI VNx32QI
- VNx1HI VNx2HI VNx4HI VNx8HI VNx16HI (VNx32HI "TARGET_MIN_VLEN > 32")
- VNx1SI VNx2SI VNx4SI VNx8SI (VNx16SI "TARGET_MIN_VLEN > 32")
- (VNx1DI "TARGET_VECTOR_ELEN_64") (VNx2DI "TARGET_VECTOR_ELEN_64")
- (VNx4DI "TARGET_VECTOR_ELEN_64") (VNx8DI "TARGET_VECTOR_ELEN_64")
- (VNx1SF "TARGET_VECTOR_ELEN_FP_32")
+ (VNx1QI "TARGET_MIN_VLEN < 128") VNx2QI VNx4QI VNx8QI VNx16QI VNx32QI (VNx64QI "TARGET_MIN_VLEN >= 128")
+ (VNx1HI "TARGET_MIN_VLEN < 128") VNx2HI VNx4HI VNx8HI VNx16HI (VNx32HI "TARGET_MIN_VLEN > 32") (VNx64HI "TARGET_MIN_VLEN >= 128")
+ (VNx1SI "TARGET_MIN_VLEN < 128") VNx2SI VNx4SI VNx8SI (VNx16SI "TARGET_MIN_VLEN > 32") (VNx32SI "TARGET_MIN_VLEN >= 128")
+ (VNx1DI "TARGET_VECTOR_ELEN_64 && TARGET_MIN_VLEN < 128") (VNx2DI "TARGET_VECTOR_ELEN_64")
+ (VNx4DI "TARGET_VECTOR_ELEN_64") (VNx8DI "TARGET_VECTOR_ELEN_64") (VNx16DI "TARGET_VECTOR_ELEN_64 && TARGET_MIN_VLEN >= 128")
+ (VNx1SF "TARGET_VECTOR_ELEN_FP_32 && TARGET_MIN_VLEN < 128")
(VNx2SF "TARGET_VECTOR_ELEN_FP_32")
(VNx4SF "TARGET_VECTOR_ELEN_FP_32")
(VNx8SF "TARGET_VECTOR_ELEN_FP_32")
(VNx16SF "TARGET_VECTOR_ELEN_FP_32 && TARGET_MIN_VLEN > 32")
- (VNx1DF "TARGET_VECTOR_ELEN_FP_64")
+ (VNx32SF "TARGET_VECTOR_ELEN_FP_32 && TARGET_MIN_VLEN >= 128")
+ (VNx1DF "TARGET_VECTOR_ELEN_FP_64 && TARGET_MIN_VLEN < 128")
(VNx2DF "TARGET_VECTOR_ELEN_FP_64")
(VNx4DF "TARGET_VECTOR_ELEN_FP_64")
(VNx8DF "TARGET_VECTOR_ELEN_FP_64")
+ (VNx16DF "TARGET_VECTOR_ELEN_FP_64 && TARGET_MIN_VLEN >= 128")
])
(define_mode_iterator VI [
- VNx1QI VNx2QI VNx4QI VNx8QI VNx16QI VNx32QI (VNx64QI "TARGET_MIN_VLEN > 32")
- VNx1HI VNx2HI VNx4HI VNx8HI VNx16HI (VNx32HI "TARGET_MIN_VLEN > 32")
- VNx1SI VNx2SI VNx4SI VNx8SI (VNx16SI "TARGET_MIN_VLEN > 32")
- (VNx1DI "TARGET_VECTOR_ELEN_64") (VNx2DI "TARGET_VECTOR_ELEN_64")
- (VNx4DI "TARGET_VECTOR_ELEN_64") (VNx8DI "TARGET_VECTOR_ELEN_64")
+ (VNx1QI "TARGET_MIN_VLEN < 128") VNx2QI VNx4QI VNx8QI VNx16QI VNx32QI (VNx64QI "TARGET_MIN_VLEN > 32") (VNx128QI "TARGET_MIN_VLEN >= 128")
+ (VNx1HI "TARGET_MIN_VLEN < 128") VNx2HI VNx4HI VNx8HI VNx16HI (VNx32HI "TARGET_MIN_VLEN > 32") (VNx64HI "TARGET_MIN_VLEN >= 128")
+ (VNx1SI "TARGET_MIN_VLEN < 128") VNx2SI VNx4SI VNx8SI (VNx16SI "TARGET_MIN_VLEN > 32") (VNx32SI "TARGET_MIN_VLEN >= 128")
+ (VNx1DI "TARGET_VECTOR_ELEN_64 && TARGET_MIN_VLEN < 128") (VNx2DI "TARGET_VECTOR_ELEN_64")
+ (VNx4DI "TARGET_VECTOR_ELEN_64") (VNx8DI "TARGET_VECTOR_ELEN_64") (VNx16DI "TARGET_VECTOR_ELEN_64 && TARGET_MIN_VLEN >= 128")
+])
+
+(define_mode_iterator VI_ZVE64 [
+ VNx1QI VNx2QI VNx4QI VNx8QI VNx16QI VNx32QI VNx64QI
+ VNx1HI VNx2HI VNx4HI VNx8HI VNx16HI VNx32HI
+ VNx1SI VNx2SI VNx4SI VNx8SI VNx16SI
+ VNx1DI VNx2DI VNx4DI VNx8DI
])
(define_mode_iterator VI_ZVE32 [
@@ -243,9 +267,15 @@ (define_mode_iterator VI_ZVE32 [
])
(define_mode_iterator VWI [
- VNx1QI VNx2QI VNx4QI VNx8QI VNx16QI VNx32QI (VNx64QI "TARGET_MIN_VLEN > 32")
- VNx1HI VNx2HI VNx4HI VNx8HI VNx16HI (VNx32HI "TARGET_MIN_VLEN > 32")
- VNx1SI VNx2SI VNx4SI VNx8SI (VNx16SI "TARGET_MIN_VLEN > 32")
+ (VNx1QI "TARGET_MIN_VLEN < 128") VNx2QI VNx4QI VNx8QI VNx16QI VNx32QI (VNx64QI "TARGET_MIN_VLEN > 32") (VNx128QI "TARGET_MIN_VLEN >= 128")
+ (VNx1HI "TARGET_MIN_VLEN < 128") VNx2HI VNx4HI VNx8HI VNx16HI (VNx32HI "TARGET_MIN_VLEN > 32") (VNx64HI "TARGET_MIN_VLEN >= 128")
+ (VNx1SI "TARGET_MIN_VLEN < 128") VNx2SI VNx4SI VNx8SI (VNx16SI "TARGET_MIN_VLEN > 32") (VNx32SI "TARGET_MIN_VLEN >= 128")
+])
+
+(define_mode_iterator VWI_ZVE64 [
+ VNx1QI VNx2QI VNx4QI VNx8QI VNx16QI VNx32QI VNx64QI
+ VNx1HI VNx2HI VNx4HI VNx8HI VNx16HI VNx32HI
+ VNx1SI VNx2SI VNx4SI VNx8SI VNx16SI
])
(define_mode_iterator VWI_ZVE32 [
@@ -254,15 +284,22 @@ (define_mode_iterator VWI_ZVE32 [
])
(define_mode_iterator VF [
- (VNx1SF "TARGET_VECTOR_ELEN_FP_32")
+ (VNx1SF "TARGET_VECTOR_ELEN_FP_32 && TARGET_MIN_VLEN < 128")
(VNx2SF "TARGET_VECTOR_ELEN_FP_32")
(VNx4SF "TARGET_VECTOR_ELEN_FP_32")
(VNx8SF "TARGET_VECTOR_ELEN_FP_32")
(VNx16SF "TARGET_VECTOR_ELEN_FP_32 && TARGET_MIN_VLEN > 32")
- (VNx1DF "TARGET_VECTOR_ELEN_FP_64")
+ (VNx32SF "TARGET_VECTOR_ELEN_FP_32 && TARGET_MIN_VLEN >= 128")
+ (VNx1DF "TARGET_VECTOR_ELEN_FP_64 && TARGET_MIN_VLEN < 128")
(VNx2DF "TARGET_VECTOR_ELEN_FP_64")
(VNx4DF "TARGET_VECTOR_ELEN_FP_64")
(VNx8DF "TARGET_VECTOR_ELEN_FP_64")
+ (VNx16DF "TARGET_VECTOR_ELEN_FP_64 && TARGET_MIN_VLEN >= 128")
+])
+
+(define_mode_iterator VF_ZVE64 [
+ VNx1SF VNx2SF VNx4SF VNx8SF VNx16SF
+ VNx1DF VNx2DF VNx4DF VNx8DF
])
(define_mode_iterator VF_ZVE32 [
@@ -273,38 +310,40 @@ (define_mode_iterator VF_ZVE32 [
])
(define_mode_iterator VWF [
- VNx1SF VNx2SF VNx4SF VNx8SF (VNx16SF "TARGET_MIN_VLEN > 32")
+ (VNx1SF "TARGET_MIN_VLEN < 128") VNx2SF VNx4SF VNx8SF (VNx16SF "TARGET_MIN_VLEN > 32") (VNx32SF "TARGET_MIN_VLEN >= 128")
+])
+
+(define_mode_iterator VWF_ZVE64 [
+ VNx1SF VNx2SF VNx4SF VNx8SF VNx16SF
])
(define_mode_iterator VFULLI [
- VNx1QI VNx2QI VNx4QI VNx8QI VNx16QI VNx32QI (VNx64QI "TARGET_MIN_VLEN > 32")
- VNx1HI VNx2HI VNx4HI VNx8HI VNx16HI (VNx32HI "TARGET_MIN_VLEN > 32")
- VNx1SI VNx2SI VNx4SI VNx8SI (VNx16SI "TARGET_MIN_VLEN > 32")
- (VNx1DI "TARGET_FULL_V") (VNx2DI "TARGET_FULL_V")
- (VNx4DI "TARGET_FULL_V") (VNx8DI "TARGET_FULL_V")
+ (VNx1QI "!TARGET_FULL_V") VNx2QI VNx4QI VNx8QI VNx16QI VNx32QI (VNx64QI "TARGET_MIN_VLEN > 32") (VNx128QI "TARGET_FULL_V")
+ (VNx1HI "!TARGET_FULL_V") VNx2HI VNx4HI VNx8HI VNx16HI (VNx32HI "TARGET_MIN_VLEN > 32") (VNx64HI "TARGET_FULL_V")
+ (VNx1SI "!TARGET_FULL_V") VNx2SI VNx4SI VNx8SI (VNx16SI "TARGET_MIN_VLEN > 32") (VNx32SI "TARGET_FULL_V")
+ (VNx2DI "TARGET_FULL_V") (VNx4DI "TARGET_FULL_V") (VNx8DI "TARGET_FULL_V") (VNx16DI "TARGET_FULL_V")
])
(define_mode_iterator VI_QHS [
- VNx1QI VNx2QI VNx4QI VNx8QI VNx16QI VNx32QI (VNx64QI "TARGET_MIN_VLEN > 32")
- VNx1HI VNx2HI VNx4HI VNx8HI VNx16HI (VNx32HI "TARGET_MIN_VLEN > 32")
- VNx1SI VNx2SI VNx4SI VNx8SI (VNx16SI "TARGET_MIN_VLEN > 32")
+ (VNx1QI "TARGET_MIN_VLEN < 128") VNx2QI VNx4QI VNx8QI VNx16QI VNx32QI (VNx64QI "TARGET_MIN_VLEN > 32") (VNx128QI "TARGET_MIN_VLEN >= 128")
+ (VNx1HI "TARGET_MIN_VLEN < 128") VNx2HI VNx4HI VNx8HI VNx16HI (VNx32HI "TARGET_MIN_VLEN > 32") (VNx64HI "TARGET_MIN_VLEN >= 128")
+ (VNx1SI "TARGET_MIN_VLEN < 128") VNx2SI VNx4SI VNx8SI (VNx16SI "TARGET_MIN_VLEN > 32") (VNx32SI "TARGET_MIN_VLEN >= 128")
])
(define_mode_iterator VI_D [
- (VNx1DI "TARGET_VECTOR_ELEN_64") (VNx2DI "TARGET_VECTOR_ELEN_64")
- (VNx4DI "TARGET_VECTOR_ELEN_64") (VNx8DI "TARGET_VECTOR_ELEN_64")
+ (VNx1DI "TARGET_VECTOR_ELEN_64 && TARGET_MIN_VLEN < 128") (VNx2DI "TARGET_VECTOR_ELEN_64")
+ (VNx4DI "TARGET_VECTOR_ELEN_64") (VNx8DI "TARGET_VECTOR_ELEN_64") (VNx16DI "TARGET_VECTOR_ELEN_64 && TARGET_MIN_VLEN >= 128")
])
(define_mode_iterator VFULLI_D [
- (VNx1DI "TARGET_FULL_V") (VNx2DI "TARGET_FULL_V")
- (VNx4DI "TARGET_FULL_V") (VNx8DI "TARGET_FULL_V")
+ (VNx2DI "TARGET_FULL_V") (VNx4DI "TARGET_FULL_V") (VNx8DI "TARGET_FULL_V") (VNx16DI "TARGET_FULL_V")
])
(define_mode_iterator VNX1_QHSD [
- VNx1QI VNx1HI VNx1SI
- (VNx1DI "TARGET_VECTOR_ELEN_64")
- (VNx1SF "TARGET_VECTOR_ELEN_FP_32")
- (VNx1DF "TARGET_VECTOR_ELEN_FP_64")
+ (VNx1QI "TARGET_MIN_VLEN < 128") (VNx1HI "TARGET_MIN_VLEN < 128") (VNx1SI "TARGET_MIN_VLEN < 128")
+ (VNx1DI "TARGET_VECTOR_ELEN_64 && TARGET_MIN_VLEN < 128")
+ (VNx1SF "TARGET_VECTOR_ELEN_FP_32 && TARGET_MIN_VLEN < 128")
+ (VNx1DF "TARGET_VECTOR_ELEN_FP_64 && TARGET_MIN_VLEN < 128")
])
(define_mode_iterator VNX2_QHSD [
@@ -331,18 +370,24 @@ (define_mode_iterator VNX8_QHSD [
(define_mode_iterator VNX16_QHS [
VNx16QI VNx16HI (VNx16SI "TARGET_MIN_VLEN > 32")
(VNx16SF "TARGET_VECTOR_ELEN_FP_32 && TARGET_MIN_VLEN > 32")
+ (VNx16DI "TARGET_VECTOR_ELEN_64 && TARGET_MIN_VLEN >= 128") (VNx16DF "TARGET_VECTOR_ELEN_FP_64 && TARGET_MIN_VLEN >= 128")
])
-(define_mode_iterator VNX32_QH [
- VNx32QI (VNx32HI "TARGET_MIN_VLEN > 32")
+(define_mode_iterator VNX32_QHS [
+ VNx32QI (VNx32HI "TARGET_MIN_VLEN > 32") (VNx32SI "TARGET_MIN_VLEN >= 128") (VNx32SF "TARGET_VECTOR_ELEN_FP_32 && TARGET_MIN_VLEN >= 128")
])
-(define_mode_iterator VNX64_Q [
+(define_mode_iterator VNX64_QH [
(VNx64QI "TARGET_MIN_VLEN > 32")
+ (VNx64HI "TARGET_MIN_VLEN >= 128")
+])
+
+(define_mode_iterator VNX128_Q [
+ (VNx128QI "TARGET_MIN_VLEN >= 128")
])
(define_mode_iterator VNX1_QHSDI [
- VNx1QI VNx1HI VNx1SI
+ (VNx1QI "TARGET_MIN_VLEN < 128") (VNx1HI "TARGET_MIN_VLEN < 128") (VNx1SI "TARGET_MIN_VLEN < 128")
(VNx1DI "TARGET_64BIT && TARGET_MIN_VLEN > 32")
])
@@ -362,298 +407,325 @@ (define_mode_iterator VNX8_QHSDI [
])
(define_mode_iterator VNX16_QHSI [
- VNx16QI VNx16HI (VNx16SI "TARGET_MIN_VLEN > 32")
+ VNx16QI VNx16HI (VNx16SI "TARGET_MIN_VLEN > 32") (VNx16DI "TARGET_MIN_VLEN >= 128")
])
-(define_mode_iterator VNX32_QHI [
- VNx32QI (VNx32HI "TARGET_MIN_VLEN > 32")
+(define_mode_iterator VNX32_QHSI [
+ VNx32QI (VNx32HI "TARGET_MIN_VLEN > 32") (VNx32SI "TARGET_MIN_VLEN >= 128")
+])
+
+(define_mode_iterator VNX64_QHI [
+ VNx64QI (VNx64HI "TARGET_MIN_VLEN >= 128")
])
(define_mode_iterator V_WHOLE [
- (VNx4QI "TARGET_MIN_VLEN == 32") VNx8QI VNx16QI VNx32QI (VNx64QI "TARGET_MIN_VLEN > 32")
- (VNx2HI "TARGET_MIN_VLEN == 32") VNx4HI VNx8HI VNx16HI (VNx32HI "TARGET_MIN_VLEN > 32")
- (VNx1SI "TARGET_MIN_VLEN == 32") VNx2SI VNx4SI VNx8SI (VNx16SI "TARGET_MIN_VLEN > 32")
- (VNx1DI "TARGET_VECTOR_ELEN_64") (VNx2DI "TARGET_VECTOR_ELEN_64")
- (VNx4DI "TARGET_VECTOR_ELEN_64") (VNx8DI "TARGET_VECTOR_ELEN_64")
+ (VNx4QI "TARGET_MIN_VLEN == 32") VNx8QI VNx16QI VNx32QI (VNx64QI "TARGET_MIN_VLEN > 32") (VNx128QI "TARGET_MIN_VLEN >= 128")
+ (VNx2HI "TARGET_MIN_VLEN == 32") VNx4HI VNx8HI VNx16HI (VNx32HI "TARGET_MIN_VLEN > 32") (VNx64HI "TARGET_MIN_VLEN >= 128")
+ (VNx1SI "TARGET_MIN_VLEN == 32") VNx2SI VNx4SI VNx8SI (VNx16SI "TARGET_MIN_VLEN > 32") (VNx32SI "TARGET_MIN_VLEN >= 128")
+ (VNx1DI "TARGET_VECTOR_ELEN_64 && TARGET_MIN_VLEN < 128") (VNx2DI "TARGET_VECTOR_ELEN_64")
+ (VNx4DI "TARGET_VECTOR_ELEN_64") (VNx8DI "TARGET_VECTOR_ELEN_64") (VNx16DI "TARGET_MIN_VLEN >= 128")
(VNx1SF "TARGET_VECTOR_ELEN_FP_32 && TARGET_MIN_VLEN == 32")
(VNx2SF "TARGET_VECTOR_ELEN_FP_32")
(VNx4SF "TARGET_VECTOR_ELEN_FP_32")
(VNx8SF "TARGET_VECTOR_ELEN_FP_32")
(VNx16SF "TARGET_VECTOR_ELEN_FP_32 && TARGET_MIN_VLEN > 32")
- (VNx1DF "TARGET_VECTOR_ELEN_FP_64")
+ (VNx32SF "TARGET_VECTOR_ELEN_FP_32 && TARGET_MIN_VLEN >= 128")
+ (VNx1DF "TARGET_VECTOR_ELEN_FP_64 && TARGET_MIN_VLEN < 128")
(VNx2DF "TARGET_VECTOR_ELEN_FP_64")
(VNx4DF "TARGET_VECTOR_ELEN_FP_64")
(VNx8DF "TARGET_VECTOR_ELEN_FP_64")
+ (VNx16DF "TARGET_VECTOR_ELEN_FP_64 && TARGET_MIN_VLEN >= 128")
])
(define_mode_iterator V_FRACT [
- VNx1QI VNx2QI (VNx4QI "TARGET_MIN_VLEN > 32")
- VNx1HI (VNx2HI "TARGET_MIN_VLEN > 32")
- (VNx1SI "TARGET_MIN_VLEN > 32")
+ (VNx1QI "TARGET_MIN_VLEN < 128") VNx2QI (VNx4QI "TARGET_MIN_VLEN > 32") (VNx8QI "TARGET_MIN_VLEN >= 128")
+ (VNx1HI "TARGET_MIN_VLEN < 128") (VNx2HI "TARGET_MIN_VLEN > 32") (VNx4HI "TARGET_MIN_VLEN >= 128")
+ (VNx1SI "TARGET_MIN_VLEN > 32 && TARGET_MIN_VLEN < 128") (VNx2SI "TARGET_MIN_VLEN >= 128")
(VNx1SF "TARGET_VECTOR_ELEN_FP_32 && TARGET_MIN_VLEN > 32")
+ (VNx2SF "TARGET_VECTOR_ELEN_FP_32 && TARGET_MIN_VLEN >= 128")
])
(define_mode_iterator VB [
- VNx1BI VNx2BI VNx4BI VNx8BI VNx16BI VNx32BI
- (VNx64BI "TARGET_MIN_VLEN > 32")
+ (VNx1BI "TARGET_MIN_VLEN < 128") VNx2BI VNx4BI VNx8BI VNx16BI VNx32BI
+ (VNx64BI "TARGET_MIN_VLEN > 32") (VNx128BI "TARGET_MIN_VLEN >= 128")
])
(define_mode_iterator VWEXTI [
- VNx1HI VNx2HI VNx4HI VNx8HI VNx16HI (VNx32HI "TARGET_MIN_VLEN > 32")
- VNx1SI VNx2SI VNx4SI VNx8SI (VNx16SI "TARGET_MIN_VLEN > 32")
- (VNx1DI "TARGET_VECTOR_ELEN_64") (VNx2DI "TARGET_VECTOR_ELEN_64")
+ (VNx1HI "TARGET_MIN_VLEN < 128") VNx2HI VNx4HI VNx8HI VNx16HI (VNx32HI "TARGET_MIN_VLEN > 32") (VNx64HI "TARGET_MIN_VLEN >= 128")
+ (VNx1SI "TARGET_MIN_VLEN < 128") VNx2SI VNx4SI VNx8SI (VNx16SI "TARGET_MIN_VLEN > 32") (VNx32SI "TARGET_MIN_VLEN >= 128")
+ (VNx1DI "TARGET_VECTOR_ELEN_64 && TARGET_MIN_VLEN < 128") (VNx2DI "TARGET_VECTOR_ELEN_64")
(VNx4DI "TARGET_VECTOR_ELEN_64") (VNx8DI "TARGET_VECTOR_ELEN_64")
+ (VNx16DI "TARGET_VECTOR_ELEN_64 && TARGET_MIN_VLEN >= 128")
])
(define_mode_iterator VWEXTF [
- (VNx1DF "TARGET_VECTOR_ELEN_FP_64")
+ (VNx1DF "TARGET_VECTOR_ELEN_FP_64 && TARGET_MIN_VLEN < 128")
(VNx2DF "TARGET_VECTOR_ELEN_FP_64")
(VNx4DF "TARGET_VECTOR_ELEN_FP_64")
(VNx8DF "TARGET_VECTOR_ELEN_FP_64")
+ (VNx16DF "TARGET_VECTOR_ELEN_FP_64 && TARGET_MIN_VLEN >= 128")
])
(define_mode_iterator VWCONVERTI [
- (VNx1DI "TARGET_VECTOR_ELEN_64 && TARGET_VECTOR_ELEN_FP_32")
+ (VNx1DI "TARGET_VECTOR_ELEN_64 && TARGET_VECTOR_ELEN_FP_32 && TARGET_MIN_VLEN < 128")
(VNx2DI "TARGET_VECTOR_ELEN_64 && TARGET_VECTOR_ELEN_FP_32")
(VNx4DI "TARGET_VECTOR_ELEN_64 && TARGET_VECTOR_ELEN_FP_32")
(VNx8DI "TARGET_VECTOR_ELEN_64 && TARGET_VECTOR_ELEN_FP_32")
+ (VNx16DI "TARGET_VECTOR_ELEN_64 && TARGET_VECTOR_ELEN_FP_32 && TARGET_MIN_VLEN >= 128")
])
(define_mode_iterator VQEXTI [
- VNx1SI VNx2SI VNx4SI VNx8SI (VNx16SI "TARGET_MIN_VLEN > 32")
- (VNx1DI "TARGET_VECTOR_ELEN_64") (VNx2DI "TARGET_VECTOR_ELEN_64")
+ (VNx1SI "TARGET_MIN_VLEN < 128") VNx2SI VNx4SI VNx8SI (VNx16SI "TARGET_MIN_VLEN > 32") (VNx32SI "TARGET_MIN_VLEN >= 128")
+ (VNx1DI "TARGET_VECTOR_ELEN_64 && TARGET_MIN_VLEN < 128") (VNx2DI "TARGET_VECTOR_ELEN_64")
(VNx4DI "TARGET_VECTOR_ELEN_64") (VNx8DI "TARGET_VECTOR_ELEN_64")
+ (VNx16DI "TARGET_VECTOR_ELEN_64 && TARGET_MIN_VLEN >= 128")
])
(define_mode_iterator VOEXTI [
- (VNx1DI "TARGET_VECTOR_ELEN_64") (VNx2DI "TARGET_VECTOR_ELEN_64")
+ (VNx1DI "TARGET_VECTOR_ELEN_64 && TARGET_MIN_VLEN < 128") (VNx2DI "TARGET_VECTOR_ELEN_64")
(VNx4DI "TARGET_VECTOR_ELEN_64") (VNx8DI "TARGET_VECTOR_ELEN_64")
+ (VNx16DI "TARGET_VECTOR_ELEN_64 && TARGET_MIN_VLEN >= 128")
])
(define_mode_attr VLMULX2 [
- (VNx1QI "VNx2QI") (VNx2QI "VNx4QI") (VNx4QI "VNx8QI") (VNx8QI "VNx16QI") (VNx16QI "VNx32QI") (VNx32QI "VNx64QI")
- (VNx1HI "VNx2HI") (VNx2HI "VNx4HI") (VNx4HI "VNx8HI") (VNx8HI "VNx16HI") (VNx16HI "VNx32HI")
- (VNx1SI "VNx2SI") (VNx2SI "VNx4SI") (VNx4SI "VNx8SI") (VNx8SI "VNx16SI")
- (VNx1DI "VNx2DI") (VNx2DI "VNx4DI") (VNx4DI "VNx8DI")
- (VNx1SF "VNx2SF") (VNx2SF "VNx4SF") (VNx4SF "VNx8SF") (VNx8SF "VNx16SF")
- (VNx1DF "VNx2DF") (VNx2DF "VNx4DF") (VNx4DF "VNx8DF")
+ (VNx1QI "VNx2QI") (VNx2QI "VNx4QI") (VNx4QI "VNx8QI") (VNx8QI "VNx16QI") (VNx16QI "VNx32QI") (VNx32QI "VNx64QI") (VNx64QI "VNx128QI")
+ (VNx1HI "VNx2HI") (VNx2HI "VNx4HI") (VNx4HI "VNx8HI") (VNx8HI "VNx16HI") (VNx16HI "VNx32HI") (VNx32HI "VNx64HI")
+ (VNx1SI "VNx2SI") (VNx2SI "VNx4SI") (VNx4SI "VNx8SI") (VNx8SI "VNx16SI") (VNx16SI "VNx32SI")
+ (VNx1DI "VNx2DI") (VNx2DI "VNx4DI") (VNx4DI "VNx8DI") (VNx8DI "VNx16DI")
+ (VNx1SF "VNx2SF") (VNx2SF "VNx4SF") (VNx4SF "VNx8SF") (VNx8SF "VNx16SF") (VNx16SF "VNx32SF")
+ (VNx1DF "VNx2DF") (VNx2DF "VNx4DF") (VNx4DF "VNx8DF") (VNx8DF "VNx16DF")
])
(define_mode_attr VLMULX4 [
- (VNx1QI "VNx4QI") (VNx2QI "VNx8QI") (VNx4QI "VNx16QI") (VNx8QI "VNx32QI") (VNx16QI "VNx64QI")
- (VNx1HI "VNx4HI") (VNx2HI "VNx8HI") (VNx4HI "VNx16HI") (VNx8HI "VNx32HI")
- (VNx1SI "VNx4SI") (VNx2SI "VNx8SI") (VNx4SI "VNx16SI")
- (VNx1DI "VNx4DI") (VNx2DI "VNx8DI")
- (VNx1SF "VNx4SF") (VNx2SF "VNx8SF") (VNx4SF "VNx16SF")
- (VNx1DF "VNx4DF") (VNx2DF "VNx8DF")
+ (VNx1QI "VNx4QI") (VNx2QI "VNx8QI") (VNx4QI "VNx16QI") (VNx8QI "VNx32QI") (VNx16QI "VNx64QI") (VNx32QI "VNx128QI")
+ (VNx1HI "VNx4HI") (VNx2HI "VNx8HI") (VNx4HI "VNx16HI") (VNx8HI "VNx32HI") (VNx16HI "VNx64HI")
+ (VNx1SI "VNx4SI") (VNx2SI "VNx8SI") (VNx4SI "VNx16SI") (VNx8SI "VNx32SI")
+ (VNx1DI "VNx4DI") (VNx2DI "VNx8DI") (VNx4DI "VNx16DI")
+ (VNx1SF "VNx4SF") (VNx2SF "VNx8SF") (VNx4SF "VNx16SF") (VNx8SF "VNx32SF")
+ (VNx1DF "VNx4DF") (VNx2DF "VNx8DF") (VNx4DF "VNx16DF")
])
(define_mode_attr VLMULX8 [
- (VNx1QI "VNx8QI") (VNx2QI "VNx16QI") (VNx4QI "VNx32QI") (VNx8QI "VNx64QI")
- (VNx1HI "VNx8HI") (VNx2HI "VNx16HI") (VNx4HI "VNx32HI")
- (VNx1SI "VNx8SI") (VNx2SI "VNx16SI")
- (VNx1DI "VNx8DI")
- (VNx1SF "VNx8SF") (VNx2SF "VNx16SF")
- (VNx1DF "VNx8DF")
+ (VNx1QI "VNx8QI") (VNx2QI "VNx16QI") (VNx4QI "VNx32QI") (VNx8QI "VNx64QI") (VNx16QI "VNx128QI")
+ (VNx1HI "VNx8HI") (VNx2HI "VNx16HI") (VNx4HI "VNx32HI") (VNx8HI "VNx64HI")
+ (VNx1SI "VNx8SI") (VNx2SI "VNx16SI") (VNx4SI "VNx32SI")
+ (VNx1DI "VNx8DI") (VNx2DI "VNx16DI")
+ (VNx1SF "VNx8SF") (VNx2SF "VNx16SF") (VNx4SF "VNx32SF")
+ (VNx1DF "VNx8DF") (VNx2DF "VNx16DF")
])
(define_mode_attr VLMULX16 [
- (VNx1QI "VNx16QI") (VNx2QI "VNx32QI") (VNx4QI "VNx64QI")
- (VNx1HI "VNx16HI") (VNx2HI "VNx32HI")
- (VNx1SI "VNx16SI")
- (VNx1SF "VNx16SF")
+ (VNx1QI "VNx16QI") (VNx2QI "VNx32QI") (VNx4QI "VNx64QI") (VNx8QI "VNx128QI")
+ (VNx1HI "VNx16HI") (VNx2HI "VNx32HI") (VNx4HI "VNx64HI")
+ (VNx1SI "VNx16SI") (VNx2SI "VNx32SI")
+ (VNx1SF "VNx16SF") (VNx2SF "VNx32SF")
])
(define_mode_attr VLMULX32 [
- (VNx1QI "VNx32QI") (VNx2QI "VNx64QI")
- (VNx1HI "VNx32HI")
+ (VNx1QI "VNx32QI") (VNx2QI "VNx64QI") (VNx4QI "VNx128QI")
+ (VNx1HI "VNx32HI") (VNx2HI "VNx64HI")
])
(define_mode_attr VLMULX64 [
- (VNx1QI "VNx64QI")
+ (VNx1QI "VNx64QI") (VNx2QI "VNx128QI")
])
(define_mode_attr VINDEX [
(VNx1QI "VNx1QI") (VNx2QI "VNx2QI") (VNx4QI "VNx4QI") (VNx8QI "VNx8QI")
- (VNx16QI "VNx16QI") (VNx32QI "VNx32QI") (VNx64QI "VNx64QI")
+ (VNx16QI "VNx16QI") (VNx32QI "VNx32QI") (VNx64QI "VNx64QI") (VNx128QI "VNx128QI")
(VNx1HI "VNx1HI") (VNx2HI "VNx2HI") (VNx4HI "VNx4HI") (VNx8HI "VNx8HI")
- (VNx16HI "VNx16HI") (VNx32HI "VNx32HI")
+ (VNx16HI "VNx16HI") (VNx32HI "VNx32HI") (VNx64HI "VNx64HI")
(VNx1SI "VNx1SI") (VNx2SI "VNx2SI") (VNx4SI "VNx4SI") (VNx8SI "VNx8SI")
- (VNx16SI "VNx16SI")
- (VNx1DI "VNx1DI") (VNx2DI "VNx2DI") (VNx4DI "VNx4DI") (VNx8DI "VNx8DI")
+ (VNx16SI "VNx16SI") (VNx32SI "VNx32SI")
+ (VNx1DI "VNx1DI") (VNx2DI "VNx2DI") (VNx4DI "VNx4DI") (VNx8DI "VNx8DI") (VNx16DI "VNx16DI")
(VNx1SF "VNx1SI") (VNx2SF "VNx2SI") (VNx4SF "VNx4SI") (VNx8SF "VNx8SI")
- (VNx16SF "VNx16SI")
- (VNx1DF "VNx1DI") (VNx2DF "VNx2DI") (VNx4DF "VNx4DI") (VNx8DF "VNx8DI")
+ (VNx16SF "VNx16SI") (VNx32SF "VNx32SI")
+ (VNx1DF "VNx1DI") (VNx2DF "VNx2DI") (VNx4DF "VNx4DI") (VNx8DF "VNx8DI") (VNx16DF "VNx16DI")
])
(define_mode_attr VINDEXEI16 [
(VNx1QI "VNx1HI") (VNx2QI "VNx2HI") (VNx4QI "VNx4HI") (VNx8QI "VNx8HI")
- (VNx16QI "VNx16HI") (VNx32QI "VNx32HI")
+ (VNx16QI "VNx16HI") (VNx32QI "VNx32HI") (VNx64QI "VNx64HI")
(VNx1HI "VNx1HI") (VNx2HI "VNx2HI") (VNx4HI "VNx4HI") (VNx8HI "VNx8HI")
- (VNx16HI "VNx16HI") (VNx32HI "VNx32HI")
+ (VNx16HI "VNx16HI") (VNx32HI "VNx32HI") (VNx64HI "VNx64HI")
(VNx1SI "VNx1HI") (VNx2SI "VNx2HI") (VNx4SI "VNx4HI") (VNx8SI "VNx8HI")
- (VNx16SI "VNx16HI")
- (VNx1DI "VNx1HI") (VNx2DI "VNx2HI") (VNx4DI "VNx4HI") (VNx8DI "VNx8HI")
+ (VNx16SI "VNx16HI") (VNx32SI "VNx32HI")
+ (VNx1DI "VNx1HI") (VNx2DI "VNx2HI") (VNx4DI "VNx4HI") (VNx8DI "VNx8HI") (VNx16DI "VNx16HI")
(VNx1SF "VNx1HI") (VNx2SF "VNx2HI") (VNx4SF "VNx4HI") (VNx8SF "VNx8HI")
- (VNx16SF "VNx16HI")
- (VNx1DF "VNx1HI") (VNx2DF "VNx2HI") (VNx4DF "VNx4HI") (VNx8DF "VNx8HI")
+ (VNx16SF "VNx16HI") (VNx32SF "VNx32HI")
+ (VNx1DF "VNx1HI") (VNx2DF "VNx2HI") (VNx4DF "VNx4HI") (VNx8DF "VNx8HI") (VNx16DF "VNx16HI")
])
(define_mode_attr VM [
- (VNx1QI "VNx1BI") (VNx2QI "VNx2BI") (VNx4QI "VNx4BI") (VNx8QI "VNx8BI") (VNx16QI "VNx16BI") (VNx32QI "VNx32BI") (VNx64QI "VNx64BI")
- (VNx1HI "VNx1BI") (VNx2HI "VNx2BI") (VNx4HI "VNx4BI") (VNx8HI "VNx8BI") (VNx16HI "VNx16BI") (VNx32HI "VNx32BI")
- (VNx1SI "VNx1BI") (VNx2SI "VNx2BI") (VNx4SI "VNx4BI") (VNx8SI "VNx8BI") (VNx16SI "VNx16BI")
- (VNx1DI "VNx1BI") (VNx2DI "VNx2BI") (VNx4DI "VNx4BI") (VNx8DI "VNx8BI")
- (VNx1SF "VNx1BI") (VNx2SF "VNx2BI") (VNx4SF "VNx4BI") (VNx8SF "VNx8BI") (VNx16SF "VNx16BI")
- (VNx1DF "VNx1BI") (VNx2DF "VNx2BI") (VNx4DF "VNx4BI") (VNx8DF "VNx8BI")
+ (VNx1QI "VNx1BI") (VNx2QI "VNx2BI") (VNx4QI "VNx4BI") (VNx8QI "VNx8BI") (VNx16QI "VNx16BI") (VNx32QI "VNx32BI") (VNx64QI "VNx64BI") (VNx128QI "VNx128BI")
+ (VNx1HI "VNx1BI") (VNx2HI "VNx2BI") (VNx4HI "VNx4BI") (VNx8HI "VNx8BI") (VNx16HI "VNx16BI") (VNx32HI "VNx32BI") (VNx64HI "VNx64BI")
+ (VNx1SI "VNx1BI") (VNx2SI "VNx2BI") (VNx4SI "VNx4BI") (VNx8SI "VNx8BI") (VNx16SI "VNx16BI") (VNx32SI "VNx32BI")
+ (VNx1DI "VNx1BI") (VNx2DI "VNx2BI") (VNx4DI "VNx4BI") (VNx8DI "VNx8BI") (VNx16DI "VNx16BI")
+ (VNx1SF "VNx1BI") (VNx2SF "VNx2BI") (VNx4SF "VNx4BI") (VNx8SF "VNx8BI") (VNx16SF "VNx16BI") (VNx32SF "VNx32BI")
+ (VNx1DF "VNx1BI") (VNx2DF "VNx2BI") (VNx4DF "VNx4BI") (VNx8DF "VNx8BI") (VNx16DF "VNx16BI")
])
(define_mode_attr vm [
- (VNx1QI "vnx1bi") (VNx2QI "vnx2bi") (VNx4QI "vnx4bi") (VNx8QI "vnx8bi") (VNx16QI "vnx16bi") (VNx32QI "vnx32bi") (VNx64QI "vnx64bi")
- (VNx1HI "vnx1bi") (VNx2HI "vnx2bi") (VNx4HI "vnx4bi") (VNx8HI "vnx8bi") (VNx16HI "vnx16bi") (VNx32HI "vnx32bi")
- (VNx1SI "vnx1bi") (VNx2SI "vnx2bi") (VNx4SI "vnx4bi") (VNx8SI "vnx8bi") (VNx16SI "vnx16bi")
- (VNx1DI "vnx1bi") (VNx2DI "vnx2bi") (VNx4DI "vnx4bi") (VNx8DI "vnx8bi")
- (VNx1SF "vnx1bi") (VNx2SF "vnx2bi") (VNx4SF "vnx4bi") (VNx8SF "vnx8bi") (VNx16SF "vnx16bi")
- (VNx1DF "vnx1bi") (VNx2DF "vnx2bi") (VNx4DF "vnx4bi") (VNx8DF "vnx8bi")
+ (VNx1QI "vnx1bi") (VNx2QI "vnx2bi") (VNx4QI "vnx4bi") (VNx8QI "vnx8bi") (VNx16QI "vnx16bi") (VNx32QI "vnx32bi") (VNx64QI "vnx64bi") (VNx128QI "vnx128bi")
+ (VNx1HI "vnx1bi") (VNx2HI "vnx2bi") (VNx4HI "vnx4bi") (VNx8HI "vnx8bi") (VNx16HI "vnx16bi") (VNx32HI "vnx32bi") (VNx64HI "vnx64bi")
+ (VNx1SI "vnx1bi") (VNx2SI "vnx2bi") (VNx4SI "vnx4bi") (VNx8SI "vnx8bi") (VNx16SI "vnx16bi") (VNx32SI "vnx32bi")
+ (VNx1DI "vnx1bi") (VNx2DI "vnx2bi") (VNx4DI "vnx4bi") (VNx8DI "vnx8bi") (VNx16DI "vnx16bi")
+ (VNx1SF "vnx1bi") (VNx2SF "vnx2bi") (VNx4SF "vnx4bi") (VNx8SF "vnx8bi") (VNx16SF "vnx16bi") (VNx32SF "vnx32bi")
+ (VNx1DF "vnx1bi") (VNx2DF "vnx2bi") (VNx4DF "vnx4bi") (VNx8DF "vnx8bi") (VNx16DF "vnx16bi")
])
(define_mode_attr VEL [
- (VNx1QI "QI") (VNx2QI "QI") (VNx4QI "QI") (VNx8QI "QI") (VNx16QI "QI") (VNx32QI "QI") (VNx64QI "QI")
- (VNx1HI "HI") (VNx2HI "HI") (VNx4HI "HI") (VNx8HI "HI") (VNx16HI "HI") (VNx32HI "HI")
- (VNx1SI "SI") (VNx2SI "SI") (VNx4SI "SI") (VNx8SI "SI") (VNx16SI "SI")
- (VNx1DI "DI") (VNx2DI "DI") (VNx4DI "DI") (VNx8DI "DI")
- (VNx1SF "SF") (VNx2SF "SF") (VNx4SF "SF") (VNx8SF "SF") (VNx16SF "SF")
- (VNx1DF "DF") (VNx2DF "DF") (VNx4DF "DF") (VNx8DF "DF")
+ (VNx1QI "QI") (VNx2QI "QI") (VNx4QI "QI") (VNx8QI "QI") (VNx16QI "QI") (VNx32QI "QI") (VNx64QI "QI") (VNx128QI "QI")
+ (VNx1HI "HI") (VNx2HI "HI") (VNx4HI "HI") (VNx8HI "HI") (VNx16HI "HI") (VNx32HI "HI") (VNx64HI "HI")
+ (VNx1SI "SI") (VNx2SI "SI") (VNx4SI "SI") (VNx8SI "SI") (VNx16SI "SI") (VNx32SI "SI")
+ (VNx1DI "DI") (VNx2DI "DI") (VNx4DI "DI") (VNx8DI "DI") (VNx16DI "DI")
+ (VNx1SF "SF") (VNx2SF "SF") (VNx4SF "SF") (VNx8SF "SF") (VNx16SF "SF") (VNx32SF "SF")
+ (VNx1DF "DF") (VNx2DF "DF") (VNx4DF "DF") (VNx8DF "DF") (VNx16DF "DF")
])
(define_mode_attr VSUBEL [
- (VNx1HI "QI") (VNx2HI "QI") (VNx4HI "QI") (VNx8HI "QI") (VNx16HI "QI") (VNx32HI "QI")
- (VNx1SI "HI") (VNx2SI "HI") (VNx4SI "HI") (VNx8SI "HI") (VNx16SI "HI")
- (VNx1DI "SI") (VNx2DI "SI") (VNx4DI "SI") (VNx8DI "SI")
- (VNx1SF "HF") (VNx2SF "HF") (VNx4SF "HF") (VNx8SF "HF") (VNx16SF "HF")
- (VNx1DF "SF") (VNx2DF "SF") (VNx4DF "SF") (VNx8DF "SF")
+ (VNx1HI "QI") (VNx2HI "QI") (VNx4HI "QI") (VNx8HI "QI") (VNx16HI "QI") (VNx32HI "QI") (VNx64HI "QI")
+ (VNx1SI "HI") (VNx2SI "HI") (VNx4SI "HI") (VNx8SI "HI") (VNx16SI "HI") (VNx32SI "HI")
+ (VNx1DI "SI") (VNx2DI "SI") (VNx4DI "SI") (VNx8DI "SI") (VNx16DI "SI")
+ (VNx1SF "HF") (VNx2SF "HF") (VNx4SF "HF") (VNx8SF "HF") (VNx16SF "HF") (VNx32SF "HF")
+ (VNx1DF "SF") (VNx2DF "SF") (VNx4DF "SF") (VNx8DF "SF") (VNx16DF "SF")
])
(define_mode_attr sew [
- (VNx1QI "8") (VNx2QI "8") (VNx4QI "8") (VNx8QI "8") (VNx16QI "8") (VNx32QI "8") (VNx64QI "8")
- (VNx1HI "16") (VNx2HI "16") (VNx4HI "16") (VNx8HI "16") (VNx16HI "16") (VNx32HI "16")
- (VNx1SI "32") (VNx2SI "32") (VNx4SI "32") (VNx8SI "32") (VNx16SI "32")
- (VNx1DI "64") (VNx2DI "64") (VNx4DI "64") (VNx8DI "64")
- (VNx1SF "32") (VNx2SF "32") (VNx4SF "32") (VNx8SF "32") (VNx16SF "32")
- (VNx1DF "64") (VNx2DF "64") (VNx4DF "64") (VNx8DF "64")
+ (VNx1QI "8") (VNx2QI "8") (VNx4QI "8") (VNx8QI "8") (VNx16QI "8") (VNx32QI "8") (VNx64QI "8") (VNx128QI "8")
+ (VNx1HI "16") (VNx2HI "16") (VNx4HI "16") (VNx8HI "16") (VNx16HI "16") (VNx32HI "16") (VNx64HI "16")
+ (VNx1SI "32") (VNx2SI "32") (VNx4SI "32") (VNx8SI "32") (VNx16SI "32") (VNx32SI "32")
+ (VNx1DI "64") (VNx2DI "64") (VNx4DI "64") (VNx8DI "64") (VNx16DI "64")
+ (VNx1SF "32") (VNx2SF "32") (VNx4SF "32") (VNx8SF "32") (VNx16SF "32") (VNx32SF "32")
+ (VNx1DF "64") (VNx2DF "64") (VNx4DF "64") (VNx8DF "64") (VNx16DF "64")
])
(define_mode_attr double_trunc_sew [
- (VNx1HI "8") (VNx2HI "8") (VNx4HI "8") (VNx8HI "8") (VNx16HI "8") (VNx32HI "8")
- (VNx1SI "16") (VNx2SI "16") (VNx4SI "16") (VNx8SI "16") (VNx16SI "16")
- (VNx1DI "32") (VNx2DI "32") (VNx4DI "32") (VNx8DI "32")
- (VNx1SF "16") (VNx2SF "16") (VNx4SF "16") (VNx8SF "16") (VNx16SF "16")
- (VNx1DF "32") (VNx2DF "32") (VNx4DF "32") (VNx8DF "32")
+ (VNx1HI "8") (VNx2HI "8") (VNx4HI "8") (VNx8HI "8") (VNx16HI "8") (VNx32HI "8") (VNx64HI "8")
+ (VNx1SI "16") (VNx2SI "16") (VNx4SI "16") (VNx8SI "16") (VNx16SI "16") (VNx32SI "16")
+ (VNx1DI "32") (VNx2DI "32") (VNx4DI "32") (VNx8DI "32") (VNx16DI "32")
+ (VNx1SF "16") (VNx2SF "16") (VNx4SF "16") (VNx8SF "16") (VNx16SF "16") (VNx32SF "16")
+ (VNx1DF "32") (VNx2DF "32") (VNx4DF "32") (VNx8DF "32") (VNx16DF "32")
])
(define_mode_attr quad_trunc_sew [
- (VNx1SI "8") (VNx2SI "8") (VNx4SI "8") (VNx8SI "8") (VNx16SI "8")
- (VNx1DI "16") (VNx2DI "16") (VNx4DI "16") (VNx8DI "16")
- (VNx1SF "8") (VNx2SF "8") (VNx4SF "8") (VNx8SF "8") (VNx16SF "8")
- (VNx1DF "16") (VNx2DF "16") (VNx4DF "16") (VNx8DF "16")
+ (VNx1SI "8") (VNx2SI "8") (VNx4SI "8") (VNx8SI "8") (VNx16SI "8") (VNx32SI "8")
+ (VNx1DI "16") (VNx2DI "16") (VNx4DI "16") (VNx8DI "16") (VNx16DI "16")
+ (VNx1SF "8") (VNx2SF "8") (VNx4SF "8") (VNx8SF "8") (VNx16SF "8") (VNx32SF "8")
+ (VNx1DF "16") (VNx2DF "16") (VNx4DF "16") (VNx8DF "16") (VNx16DF "16")
])
(define_mode_attr oct_trunc_sew [
- (VNx1DI "8") (VNx2DI "8") (VNx4DI "8") (VNx8DI "8")
- (VNx1DF "8") (VNx2DF "8") (VNx4DF "8") (VNx8DF "8")
+ (VNx1DI "8") (VNx2DI "8") (VNx4DI "8") (VNx8DI "8") (VNx16DI "8")
+ (VNx1DF "8") (VNx2DF "8") (VNx4DF "8") (VNx8DF "8") (VNx16DF "8")
])
(define_mode_attr double_ext_sew [
- (VNx1QI "16") (VNx2QI "16") (VNx4QI "16") (VNx8QI "16") (VNx16QI "16") (VNx32QI "16")
- (VNx1HI "32") (VNx2HI "32") (VNx4HI "32") (VNx8HI "32") (VNx16HI "32")
- (VNx1SI "64") (VNx2SI "64") (VNx4SI "64") (VNx8SI "64")
- (VNx1SF "64") (VNx2SF "64") (VNx4SF "64") (VNx8SF "64")
+ (VNx1QI "16") (VNx2QI "16") (VNx4QI "16") (VNx8QI "16") (VNx16QI "16") (VNx32QI "16") (VNx64QI "16")
+ (VNx1HI "32") (VNx2HI "32") (VNx4HI "32") (VNx8HI "32") (VNx16HI "32") (VNx32HI "32")
+ (VNx1SI "64") (VNx2SI "64") (VNx4SI "64") (VNx8SI "64") (VNx16SI "64")
+ (VNx1SF "64") (VNx2SF "64") (VNx4SF "64") (VNx8SF "64") (VNx16SF "64")
])
(define_mode_attr quad_ext_sew [
- (VNx1QI "32") (VNx2QI "32") (VNx4QI "32") (VNx8QI "32") (VNx16QI "32")
- (VNx1HI "64") (VNx2HI "64") (VNx4HI "64") (VNx8HI "64")
+ (VNx1QI "32") (VNx2QI "32") (VNx4QI "32") (VNx8QI "32") (VNx16QI "32") (VNx32QI "32")
+ (VNx1HI "64") (VNx2HI "64") (VNx4HI "64") (VNx8HI "64") (VNx16HI "64")
])
(define_mode_attr oct_ext_sew [
- (VNx1QI "64") (VNx2QI "64") (VNx4QI "64") (VNx8QI "64")
+ (VNx1QI "64") (VNx2QI "64") (VNx4QI "64") (VNx8QI "64") (VNx16QI "64")
])
(define_mode_attr V_DOUBLE_TRUNC [
(VNx1HI "VNx1QI") (VNx2HI "VNx2QI") (VNx4HI "VNx4QI") (VNx8HI "VNx8QI")
- (VNx16HI "VNx16QI") (VNx32HI "VNx32QI")
+ (VNx16HI "VNx16QI") (VNx32HI "VNx32QI") (VNx64HI "VNx64QI")
(VNx1SI "VNx1HI") (VNx2SI "VNx2HI") (VNx4SI "VNx4HI") (VNx8SI "VNx8HI")
- (VNx16SI "VNx16HI")
- (VNx1DI "VNx1SI") (VNx2DI "VNx2SI") (VNx4DI "VNx4SI") (VNx8DI "VNx8SI")
- (VNx1DF "VNx1SF") (VNx2DF "VNx2SF") (VNx4DF "VNx4SF") (VNx8DF "VNx8SF")
+ (VNx16SI "VNx16HI") (VNx32SI "VNx32HI")
+ (VNx1DI "VNx1SI") (VNx2DI "VNx2SI") (VNx4DI "VNx4SI") (VNx8DI "VNx8SI") (VNx16DI "VNx16SI")
+ (VNx1DF "VNx1SF") (VNx2DF "VNx2SF") (VNx4DF "VNx4SF") (VNx8DF "VNx8SF") (VNx16DF "VNx16SF")
])
(define_mode_attr V_QUAD_TRUNC [
(VNx1SI "VNx1QI") (VNx2SI "VNx2QI") (VNx4SI "VNx4QI") (VNx8SI "VNx8QI")
- (VNx16SI "VNx16QI")
+ (VNx16SI "VNx16QI") (VNx32SI "VNx32QI")
(VNx1DI "VNx1HI") (VNx2DI "VNx2HI")
- (VNx4DI "VNx4HI") (VNx8DI "VNx8HI")
+ (VNx4DI "VNx4HI") (VNx8DI "VNx8HI") (VNx16DI "VNx16HI")
])
(define_mode_attr V_OCT_TRUNC [
- (VNx1DI "VNx1QI") (VNx2DI "VNx2QI") (VNx4DI "VNx4QI") (VNx8DI "VNx8QI")
+ (VNx1DI "VNx1QI") (VNx2DI "VNx2QI") (VNx4DI "VNx4QI") (VNx8DI "VNx8QI") (VNx16DI "VNx16QI")
])
(define_mode_attr VINDEX_DOUBLE_TRUNC [
(VNx1HI "VNx1QI") (VNx2HI "VNx2QI") (VNx4HI "VNx4QI") (VNx8HI "VNx8QI")
- (VNx16HI "VNx16QI") (VNx32HI "VNx32QI")
+ (VNx16HI "VNx16QI") (VNx32HI "VNx32QI") (VNx64HI "VNx64QI")
(VNx1SI "VNx1HI") (VNx2SI "VNx2HI") (VNx4SI "VNx4HI") (VNx8SI "VNx8HI")
- (VNx16SI "VNx16HI")
+ (VNx16SI "VNx16HI") (VNx32SI "VNx32HI")
(VNx1SF "VNx1HI") (VNx2SF "VNx2HI") (VNx4SF "VNx4HI") (VNx8SF "VNx8HI")
- (VNx16SF "VNx16HI")
- (VNx1DI "VNx1SI") (VNx2DI "VNx2SI") (VNx4DI "VNx4SI") (VNx8DI "VNx8SI")
- (VNx1DF "VNx1SI") (VNx2DF "VNx2SI") (VNx4DF "VNx4SI") (VNx8DF "VNx8SI")
+ (VNx16SF "VNx16HI") (VNx32SF "VNx32HI")
+ (VNx1DI "VNx1SI") (VNx2DI "VNx2SI") (VNx4DI "VNx4SI") (VNx8DI "VNx8SI") (VNx16DI "VNx16SI")
+ (VNx1DF "VNx1SI") (VNx2DF "VNx2SI") (VNx4DF "VNx4SI") (VNx8DF "VNx8SI") (VNx16DF "VNx16SI")
])
(define_mode_attr VINDEX_QUAD_TRUNC [
(VNx1SI "VNx1QI") (VNx2SI "VNx2QI") (VNx4SI "VNx4QI") (VNx8SI "VNx8QI")
- (VNx16SI "VNx16QI")
+ (VNx16SI "VNx16QI") (VNx32SI "VNx32QI")
(VNx1DI "VNx1HI") (VNx2DI "VNx2HI")
- (VNx4DI "VNx4HI") (VNx8DI "VNx8HI")
+ (VNx4DI "VNx4HI") (VNx8DI "VNx8HI") (VNx16DI "VNx16HI")
(VNx1SF "VNx1QI") (VNx2SF "VNx2QI") (VNx4SF "VNx4QI") (VNx8SF "VNx8QI")
- (VNx16SF "VNx16QI")
+ (VNx16SF "VNx16QI") (VNx32SF "VNx32QI")
(VNx1DF "VNx1HI") (VNx2DF "VNx2HI")
- (VNx4DF "VNx4HI") (VNx8DF "VNx8HI")
+ (VNx4DF "VNx4HI") (VNx8DF "VNx8HI") (VNx16DF "VNx16HI")
])
(define_mode_attr VINDEX_OCT_TRUNC [
- (VNx1DI "VNx1QI") (VNx2DI "VNx2QI") (VNx4DI "VNx4QI") (VNx8DI "VNx8QI")
- (VNx1DF "VNx1QI") (VNx2DF "VNx2QI") (VNx4DF "VNx4QI") (VNx8DF "VNx8QI")
+ (VNx1DI "VNx1QI") (VNx2DI "VNx2QI") (VNx4DI "VNx4QI") (VNx8DI "VNx8QI") (VNx16DI "VNx16QI")
+ (VNx1DF "VNx1QI") (VNx2DF "VNx2QI") (VNx4DF "VNx4QI") (VNx8DF "VNx8QI") (VNx16DF "VNx16QI")
])
(define_mode_attr VINDEX_DOUBLE_EXT [
- (VNx1QI "VNx1HI") (VNx2QI "VNx2HI") (VNx4QI "VNx4HI") (VNx8QI "VNx8HI") (VNx16QI "VNx16HI") (VNx32QI "VNx32HI")
- (VNx1HI "VNx1SI") (VNx2HI "VNx2SI") (VNx4HI "VNx4SI") (VNx8HI "VNx8SI") (VNx16HI "VNx16SI")
- (VNx1SI "VNx1DI") (VNx2SI "VNx2DI") (VNx4SI "VNx4DI") (VNx8SI "VNx8DI")
- (VNx1SF "VNx1DI") (VNx2SF "VNx2DI") (VNx4SF "VNx4DI") (VNx8SF "VNx8DI")
+ (VNx1QI "VNx1HI") (VNx2QI "VNx2HI") (VNx4QI "VNx4HI") (VNx8QI "VNx8HI") (VNx16QI "VNx16HI") (VNx32QI "VNx32HI") (VNx64QI "VNx64HI")
+ (VNx1HI "VNx1SI") (VNx2HI "VNx2SI") (VNx4HI "VNx4SI") (VNx8HI "VNx8SI") (VNx16HI "VNx16SI") (VNx32HI "VNx32SI")
+ (VNx1SI "VNx1DI") (VNx2SI "VNx2DI") (VNx4SI "VNx4DI") (VNx8SI "VNx8DI") (VNx16SI "VNx16DI")
+ (VNx1SF "VNx1DI") (VNx2SF "VNx2DI") (VNx4SF "VNx4DI") (VNx8SF "VNx8DI") (VNx16SF "VNx16DI")
])
(define_mode_attr VINDEX_QUAD_EXT [
- (VNx1QI "VNx1SI") (VNx2QI "VNx2SI") (VNx4QI "VNx4SI") (VNx8QI "VNx8SI") (VNx16QI "VNx16SI")
- (VNx1HI "VNx1DI") (VNx2HI "VNx2DI") (VNx4HI "VNx4DI") (VNx8HI "VNx8DI")
+ (VNx1QI "VNx1SI") (VNx2QI "VNx2SI") (VNx4QI "VNx4SI") (VNx8QI "VNx8SI") (VNx16QI "VNx16SI") (VNx32QI "VNx32SI")
+ (VNx1HI "VNx1DI") (VNx2HI "VNx2DI") (VNx4HI "VNx4DI") (VNx8HI "VNx8DI") (VNx16HI "VNx16DI")
])
(define_mode_attr VINDEX_OCT_EXT [
- (VNx1QI "VNx1DI") (VNx2QI "VNx2DI") (VNx4QI "VNx4DI") (VNx8QI "VNx8DI")
+ (VNx1QI "VNx1DI") (VNx2QI "VNx2DI") (VNx4QI "VNx4DI") (VNx8QI "VNx8DI") (VNx16QI "VNx16DI")
])
(define_mode_attr VCONVERT [
- (VNx1SF "VNx1SI") (VNx2SF "VNx2SI") (VNx4SF "VNx4SI") (VNx8SF "VNx8SI") (VNx16SF "VNx16SI")
- (VNx1DF "VNx1DI") (VNx2DF "VNx2DI") (VNx4DF "VNx4DI") (VNx8DF "VNx8DI")
+ (VNx1SF "VNx1SI") (VNx2SF "VNx2SI") (VNx4SF "VNx4SI") (VNx8SF "VNx8SI") (VNx16SF "VNx16SI") (VNx32SF "VNx32SI")
+ (VNx1DF "VNx1DI") (VNx2DF "VNx2DI") (VNx4DF "VNx4DI") (VNx8DF "VNx8DI") (VNx16DF "VNx16DI")
])
(define_mode_attr VNCONVERT [
- (VNx1SF "VNx1HI") (VNx2SF "VNx2HI") (VNx4SF "VNx4HI") (VNx8SF "VNx8HI") (VNx16SF "VNx16HI")
- (VNx1DI "VNx1SF") (VNx2DI "VNx2SF") (VNx4DI "VNx4SF") (VNx8DI "VNx8SF")
- (VNx1DF "VNx1SI") (VNx2DF "VNx2SI") (VNx4DF "VNx4SI") (VNx8DF "VNx8SI")
+ (VNx1SF "VNx1HI") (VNx2SF "VNx2HI") (VNx4SF "VNx4HI") (VNx8SF "VNx8HI") (VNx16SF "VNx16HI") (VNx32SF "VNx32HI")
+ (VNx1DI "VNx1SF") (VNx2DI "VNx2SF") (VNx4DI "VNx4SF") (VNx8DI "VNx8SF") (VNx16DI "VNx16SF")
+ (VNx1DF "VNx1SI") (VNx2DF "VNx2SI") (VNx4DF "VNx4SI") (VNx8DF "VNx8SI") (VNx16DF "VNx16SI")
])
(define_mode_attr VLMUL1 [
+ (VNx1QI "VNx16QI") (VNx2QI "VNx16QI") (VNx4QI "VNx16QI")
+ (VNx8QI "VNx16QI") (VNx16QI "VNx16QI") (VNx32QI "VNx16QI") (VNx64QI "VNx16QI") (VNx128QI "VNx16QI")
+ (VNx1HI "VNx8HI") (VNx2HI "VNx8HI") (VNx4HI "VNx8HI")
+ (VNx8HI "VNx8HI") (VNx16HI "VNx8HI") (VNx32HI "VNx8HI") (VNx64HI "VNx8HI")
+ (VNx1SI "VNx4SI") (VNx2SI "VNx4SI") (VNx4SI "VNx4SI")
+ (VNx8SI "VNx4SI") (VNx16SI "VNx4SI") (VNx32SI "VNx4SI")
+ (VNx1DI "VNx2DI") (VNx2DI "VNx2DI")
+ (VNx4DI "VNx2DI") (VNx8DI "VNx2DI") (VNx16DI "VNx2DI")
+ (VNx1SF "VNx4SF") (VNx2SF "VNx4SF")
+ (VNx4SF "VNx4SF") (VNx8SF "VNx4SF") (VNx16SF "VNx4SF") (VNx32SF "VNx4SF")
+ (VNx1DF "VNx2DF") (VNx2DF "VNx2DF")
+ (VNx4DF "VNx2DF") (VNx8DF "VNx2DF") (VNx16DF "VNx2DF")
+])
+
+(define_mode_attr VLMUL1_ZVE64 [
(VNx1QI "VNx8QI") (VNx2QI "VNx8QI") (VNx4QI "VNx8QI")
(VNx8QI "VNx8QI") (VNx16QI "VNx8QI") (VNx32QI "VNx8QI") (VNx64QI "VNx8QI")
(VNx1HI "VNx4HI") (VNx2HI "VNx4HI") (VNx4HI "VNx4HI")
@@ -680,6 +752,17 @@ (define_mode_attr VLMUL1_ZVE32 [
])
(define_mode_attr VWLMUL1 [
+ (VNx1QI "VNx8HI") (VNx2QI "VNx8HI") (VNx4QI "VNx8HI")
+ (VNx8QI "VNx8HI") (VNx16QI "VNx8HI") (VNx32QI "VNx8HI") (VNx64QI "VNx8HI") (VNx128QI "VNx8HI")
+ (VNx1HI "VNx4SI") (VNx2HI "VNx4SI") (VNx4HI "VNx4SI")
+ (VNx8HI "VNx4SI") (VNx16HI "VNx4SI") (VNx32HI "VNx4SI") (VNx64HI "VNx4SI")
+ (VNx1SI "VNx2DI") (VNx2SI "VNx2DI") (VNx4SI "VNx2DI")
+ (VNx8SI "VNx2DI") (VNx16SI "VNx2DI") (VNx32SI "VNx2DI")
+ (VNx1SF "VNx2DF") (VNx2SF "VNx2DF")
+ (VNx4SF "VNx2DF") (VNx8SF "VNx2DF") (VNx16SF "VNx2DF") (VNx32SF "VNx2DF")
+])
+
+(define_mode_attr VWLMUL1_ZVE64 [
(VNx1QI "VNx4HI") (VNx2QI "VNx4HI") (VNx4QI "VNx4HI")
(VNx8QI "VNx4HI") (VNx16QI "VNx4HI") (VNx32QI "VNx4HI") (VNx64QI "VNx4HI")
(VNx1HI "VNx2SI") (VNx2HI "VNx2SI") (VNx4HI "VNx2SI")
@@ -698,6 +781,21 @@ (define_mode_attr VWLMUL1_ZVE32 [
])
(define_mode_attr vlmul1 [
+ (VNx1QI "vnx16qi") (VNx2QI "vnx16qi") (VNx4QI "vnx16qi")
+ (VNx8QI "vnx16qi") (VNx16QI "vnx16qi") (VNx32QI "vnx16qi") (VNx64QI "vnx16qi") (VNx128QI "vnx16qi")
+ (VNx1HI "vnx8hi") (VNx2HI "vnx8hi") (VNx4HI "vnx8hi")
+ (VNx8HI "vnx8hi") (VNx16HI "vnx8hi") (VNx32HI "vnx8hi") (VNx64HI "vnx8hi")
+ (VNx1SI "vnx4si") (VNx2SI "vnx4si") (VNx4SI "vnx4si")
+ (VNx8SI "vnx4si") (VNx16SI "vnx4si") (VNx32SI "vnx4si")
+ (VNx1DI "vnx2di") (VNx2DI "vnx2di")
+ (VNx4DI "vnx2di") (VNx8DI "vnx2di") (VNx16DI "vnx2di")
+ (VNx1SF "vnx4sf") (VNx2SF "vnx4sf")
+ (VNx4SF "vnx4sf") (VNx8SF "vnx4sf") (VNx16SF "vnx4sf") (VNx32SF "vnx4sf")
+ (VNx1DF "vnx2df") (VNx2DF "vnx2df")
+ (VNx4DF "vnx2df") (VNx8DF "vnx2df") (VNx16DF "vnx2df")
+])
+
+(define_mode_attr vlmul1_zve64 [
(VNx1QI "vnx8qi") (VNx2QI "vnx8qi") (VNx4QI "vnx8qi")
(VNx8QI "vnx8qi") (VNx16QI "vnx8qi") (VNx32QI "vnx8qi") (VNx64QI "vnx8qi")
(VNx1HI "vnx4hi") (VNx2HI "vnx4hi") (VNx4HI "vnx4hi")
@@ -724,12 +822,23 @@ (define_mode_attr vlmul1_zve32 [
])
(define_mode_attr vwlmul1 [
+ (VNx1QI "vnx8hi") (VNx2QI "vnx8hi") (VNx4QI "vnx8hi")
+ (VNx8QI "vnx8hi") (VNx16QI "vnx8hi") (VNx32QI "vnx8hi") (VNx64QI "vnx8hi") (VNx128QI "vnx8hi")
+ (VNx1HI "vnx4si") (VNx2HI "vnx4si") (VNx4HI "vnx4si")
+ (VNx8HI "vnx4si") (VNx16HI "vnx4si") (VNx32HI "vnx4si") (VNx64HI "vnx4si")
+ (VNx1SI "vnx2di") (VNx2SI "vnx2di") (VNx4SI "vnx2di")
+ (VNx8SI "vnx2di") (VNx16SI "vnx2di") (VNx32SI "vnx2di")
+ (VNx1SF "vnx2df") (VNx2SF "vnx2df")
+ (VNx4SF "vnx2df") (VNx8SF "vnx2df") (VNx16SF "vnx2df") (VNx32SF "vnx2df")
+])
+
+(define_mode_attr vwlmul1_zve64 [
(VNx1QI "vnx4hi") (VNx2QI "vnx4hi") (VNx4QI "vnx4hi")
(VNx8QI "vnx4hi") (VNx16QI "vnx4hi") (VNx32QI "vnx4hi") (VNx64QI "vnx4hi")
(VNx1HI "vnx2si") (VNx2HI "vnx2si") (VNx4HI "vnx2si")
- (VNx8HI "vnx2si") (VNx16HI "vnx2si") (VNx32HI "vnx2si")
- (VNx1SI "vnx2di") (VNx2SI "vnx2di") (VNx4SI "vnx2di")
- (VNx8SI "vnx2di") (VNx16SI "vnx2di")
+ (VNx8HI "vnx2si") (VNx16HI "vnx2si") (VNx32HI "vnx2SI")
+ (VNx1SI "vnx1di") (VNx2SI "vnx1di") (VNx4SI "vnx1di")
+ (VNx8SI "vnx1di") (VNx16SI "vnx1di")
(VNx1SF "vnx1df") (VNx2SF "vnx1df")
(VNx4SF "vnx1df") (VNx8SF "vnx1df") (VNx16SF "vnx1df")
])
@@ -738,17 +847,17 @@ (define_mode_attr vwlmul1_zve32 [
(VNx1QI "vnx2hi") (VNx2QI "vnx2hi") (VNx4QI "vnx2hi")
(VNx8QI "vnx2hi") (VNx16QI "vnx2hi") (VNx32QI "vnx2hi")
(VNx1HI "vnx1si") (VNx2HI "vnx1si") (VNx4HI "vnx1si")
- (VNx8HI "vnx1si") (VNx16HI "vnx1si")
+ (VNx8HI "vnx1si") (VNx16HI "vnx1SI")
])
(define_mode_attr VDEMOTE [
(VNx1DI "VNx2SI") (VNx2DI "VNx4SI")
- (VNx4DI "VNx8SI") (VNx8DI "VNx16SI")
+ (VNx4DI "VNx8SI") (VNx8DI "VNx16SI") (VNx16DI "VNx32SI")
])
(define_mode_attr VMDEMOTE [
(VNx1DI "VNx2BI") (VNx2DI "VNx4BI")
- (VNx4DI "VNx8BI") (VNx8DI "VNx16BI")
+ (VNx4DI "VNx8BI") (VNx8DI "VNx16BI") (VNx16DI "VNx32BI")
])
(define_int_iterator WREDUC [UNSPEC_WREDUC_SUM UNSPEC_WREDUC_USUM])
@@ -82,15 +82,16 @@ (define_attr "has_vl_op" "false,true"
;; is no field for ratio in the vsetvl instruction encoding.
(define_attr "sew" ""
(cond [(eq_attr "mode" "VNx1QI,VNx2QI,VNx4QI,VNx8QI,VNx16QI,VNx32QI,VNx64QI,\
- VNx1BI,VNx2BI,VNx4BI,VNx8BI,VNx16BI,VNx32BI,VNx64BI")
+ VNx1BI,VNx2BI,VNx4BI,VNx8BI,VNx16BI,VNx32BI,VNx64BI,\
+ VNx128QI,VNx128BI")
(const_int 8)
- (eq_attr "mode" "VNx1HI,VNx2HI,VNx4HI,VNx8HI,VNx16HI,VNx32HI")
+ (eq_attr "mode" "VNx1HI,VNx2HI,VNx4HI,VNx8HI,VNx16HI,VNx32HI,VNx64HI")
(const_int 16)
- (eq_attr "mode" "VNx1SI,VNx2SI,VNx4SI,VNx8SI,VNx16SI,\
- VNx1SF,VNx2SF,VNx4SF,VNx8SF,VNx16SF")
+ (eq_attr "mode" "VNx1SI,VNx2SI,VNx4SI,VNx8SI,VNx16SI,VNx32SI,\
+ VNx1SF,VNx2SF,VNx4SF,VNx8SF,VNx16SF,VNx32SF")
(const_int 32)
- (eq_attr "mode" "VNx1DI,VNx2DI,VNx4DI,VNx8DI,\
- VNx1DF,VNx2DF,VNx4DF,VNx8DF")
+ (eq_attr "mode" "VNx1DI,VNx2DI,VNx4DI,VNx8DI,VNx16DI,\
+ VNx1DF,VNx2DF,VNx4DF,VNx8DF,VNx16DF")
(const_int 64)]
(const_int INVALID_ATTRIBUTE)))
@@ -110,6 +111,8 @@ (define_attr "vlmul" ""
(symbol_ref "riscv_vector::get_vlmul(E_VNx32QImode)")
(eq_attr "mode" "VNx64QI,VNx64BI")
(symbol_ref "riscv_vector::get_vlmul(E_VNx64QImode)")
+ (eq_attr "mode" "VNx128QI,VNx128BI")
+ (symbol_ref "riscv_vector::get_vlmul(E_VNx128QImode)")
(eq_attr "mode" "VNx1HI")
(symbol_ref "riscv_vector::get_vlmul(E_VNx1HImode)")
(eq_attr "mode" "VNx2HI")
@@ -122,6 +125,8 @@ (define_attr "vlmul" ""
(symbol_ref "riscv_vector::get_vlmul(E_VNx16HImode)")
(eq_attr "mode" "VNx32HI")
(symbol_ref "riscv_vector::get_vlmul(E_VNx32HImode)")
+ (eq_attr "mode" "VNx64HI")
+ (symbol_ref "riscv_vector::get_vlmul(E_VNx64HImode)")
(eq_attr "mode" "VNx1SI,VNx1SF")
(symbol_ref "riscv_vector::get_vlmul(E_VNx1SImode)")
(eq_attr "mode" "VNx2SI,VNx2SF")
@@ -132,6 +137,8 @@ (define_attr "vlmul" ""
(symbol_ref "riscv_vector::get_vlmul(E_VNx8SImode)")
(eq_attr "mode" "VNx16SI,VNx16SF")
(symbol_ref "riscv_vector::get_vlmul(E_VNx16SImode)")
+ (eq_attr "mode" "VNx32SI,VNx32SF")
+ (symbol_ref "riscv_vector::get_vlmul(E_VNx32SImode)")
(eq_attr "mode" "VNx1DI,VNx1DF")
(symbol_ref "riscv_vector::get_vlmul(E_VNx1DImode)")
(eq_attr "mode" "VNx2DI,VNx2DF")
@@ -139,7 +146,9 @@ (define_attr "vlmul" ""
(eq_attr "mode" "VNx4DI,VNx4DF")
(symbol_ref "riscv_vector::get_vlmul(E_VNx4DImode)")
(eq_attr "mode" "VNx8DI,VNx8DF")
- (symbol_ref "riscv_vector::get_vlmul(E_VNx8DImode)")]
+ (symbol_ref "riscv_vector::get_vlmul(E_VNx8DImode)")
+ (eq_attr "mode" "VNx16DI,VNx16DF")
+ (symbol_ref "riscv_vector::get_vlmul(E_VNx16DImode)")]
(const_int INVALID_ATTRIBUTE)))
;; It is valid for instruction that require sew/lmul ratio.
@@ -173,6 +182,8 @@ (define_attr "ratio" ""
(symbol_ref "riscv_vector::get_ratio(E_VNx32QImode)")
(eq_attr "mode" "VNx64QI,VNx64BI")
(symbol_ref "riscv_vector::get_ratio(E_VNx64QImode)")
+ (eq_attr "mode" "VNx128QI,VNx128BI")
+ (symbol_ref "riscv_vector::get_ratio(E_VNx128QImode)")
(eq_attr "mode" "VNx1HI")
(symbol_ref "riscv_vector::get_ratio(E_VNx1HImode)")
(eq_attr "mode" "VNx2HI")
@@ -185,6 +196,8 @@ (define_attr "ratio" ""
(symbol_ref "riscv_vector::get_ratio(E_VNx16HImode)")
(eq_attr "mode" "VNx32HI")
(symbol_ref "riscv_vector::get_ratio(E_VNx32HImode)")
+ (eq_attr "mode" "VNx64HI")
+ (symbol_ref "riscv_vector::get_ratio(E_VNx64HImode)")
(eq_attr "mode" "VNx1SI,VNx1SF")
(symbol_ref "riscv_vector::get_ratio(E_VNx1SImode)")
(eq_attr "mode" "VNx2SI,VNx2SF")
@@ -195,6 +208,8 @@ (define_attr "ratio" ""
(symbol_ref "riscv_vector::get_ratio(E_VNx8SImode)")
(eq_attr "mode" "VNx16SI,VNx16SF")
(symbol_ref "riscv_vector::get_ratio(E_VNx16SImode)")
+ (eq_attr "mode" "VNx32SI,VNx32SF")
+ (symbol_ref "riscv_vector::get_ratio(E_VNx32SImode)")
(eq_attr "mode" "VNx1DI,VNx1DF")
(symbol_ref "riscv_vector::get_ratio(E_VNx1DImode)")
(eq_attr "mode" "VNx2DI,VNx2DF")
@@ -202,7 +217,9 @@ (define_attr "ratio" ""
(eq_attr "mode" "VNx4DI,VNx4DF")
(symbol_ref "riscv_vector::get_ratio(E_VNx4DImode)")
(eq_attr "mode" "VNx8DI,VNx8DF")
- (symbol_ref "riscv_vector::get_ratio(E_VNx8DImode)")]
+ (symbol_ref "riscv_vector::get_ratio(E_VNx8DImode)")
+ (eq_attr "mode" "VNx16DI,VNx16DF")
+ (symbol_ref "riscv_vector::get_ratio(E_VNx16DImode)")]
(const_int INVALID_ATTRIBUTE)))
;; The index of operand[] to get the merge op.
@@ -1633,7 +1650,7 @@ (define_insn "@pred_indexed_<order>store<VNX16_QHS:mode><VNX16_QHSI:mode>"
[(set_attr "type" "vst<order>x")
(set_attr "mode" "<VNX16_QHS:MODE>")])
-(define_insn "@pred_indexed_<order>store<VNX32_QH:mode><VNX32_QHI:mode>"
+(define_insn "@pred_indexed_<order>store<VNX32_QHS:mode><VNX32_QHSI:mode>"
[(set (mem:BLK (scratch))
(unspec:BLK
[(unspec:<VM>
@@ -1643,14 +1660,14 @@ (define_insn "@pred_indexed_<order>store<VNX32_QH:mode><VNX32_QHI:mode>"
(reg:SI VL_REGNUM)
(reg:SI VTYPE_REGNUM)] UNSPEC_VPREDICATE)
(match_operand 1 "pmode_register_operand" " r")
- (match_operand:VNX32_QHI 2 "register_operand" " vr")
- (match_operand:VNX32_QH 3 "register_operand" " vr")] ORDER))]
+ (match_operand:VNX32_QHSI 2 "register_operand" " vr")
+ (match_operand:VNX32_QHS 3 "register_operand" " vr")] ORDER))]
"TARGET_VECTOR"
- "vs<order>xei<VNX32_QHI:sew>.v\t%3,(%1),%2%p0"
+ "vs<order>xei<VNX32_QHSI:sew>.v\t%3,(%1),%2%p0"
[(set_attr "type" "vst<order>x")
- (set_attr "mode" "<VNX32_QH:MODE>")])
+ (set_attr "mode" "<VNX32_QHS:MODE>")])
-(define_insn "@pred_indexed_<order>store<VNX64_Q:mode><VNX64_Q:mode>"
+(define_insn "@pred_indexed_<order>store<VNX64_QH:mode><VNX64_QHI:mode>"
[(set (mem:BLK (scratch))
(unspec:BLK
[(unspec:<VM>
@@ -1660,12 +1677,29 @@ (define_insn "@pred_indexed_<order>store<VNX64_Q:mode><VNX64_Q:mode>"
(reg:SI VL_REGNUM)
(reg:SI VTYPE_REGNUM)] UNSPEC_VPREDICATE)
(match_operand 1 "pmode_register_operand" " r")
- (match_operand:VNX64_Q 2 "register_operand" " vr")
- (match_operand:VNX64_Q 3 "register_operand" " vr")] ORDER))]
+ (match_operand:VNX64_QHI 2 "register_operand" " vr")
+ (match_operand:VNX64_QH 3 "register_operand" " vr")] ORDER))]
"TARGET_VECTOR"
- "vs<order>xei<VNX64_Q:sew>.v\t%3,(%1),%2%p0"
+ "vs<order>xei<VNX64_QHI:sew>.v\t%3,(%1),%2%p0"
[(set_attr "type" "vst<order>x")
- (set_attr "mode" "<VNX64_Q:MODE>")])
+ (set_attr "mode" "<VNX64_QH:MODE>")])
+
+(define_insn "@pred_indexed_<order>store<VNX128_Q:mode><VNX128_Q:mode>"
+ [(set (mem:BLK (scratch))
+ (unspec:BLK
+ [(unspec:<VM>
+ [(match_operand:<VM> 0 "vector_mask_operand" "vmWc1")
+ (match_operand 4 "vector_length_operand" " rK")
+ (match_operand 5 "const_int_operand" " i")
+ (reg:SI VL_REGNUM)
+ (reg:SI VTYPE_REGNUM)] UNSPEC_VPREDICATE)
+ (match_operand 1 "pmode_register_operand" " r")
+ (match_operand:VNX128_Q 2 "register_operand" " vr")
+ (match_operand:VNX128_Q 3 "register_operand" " vr")] ORDER))]
+ "TARGET_VECTOR"
+ "vs<order>xei<VNX128_Q:sew>.v\t%3,(%1),%2%p0"
+ [(set_attr "type" "vst<order>x")
+ (set_attr "mode" "<VNX128_Q:MODE>")])
;; -------------------------------------------------------------------------------
;; ---- Predicated integer binary operations
@@ -6746,23 +6780,45 @@ (define_insn "@pred_rod_trunc<mode>"
;; For example, The LMUL = 1 corresponding mode of VNx16QImode is VNx4QImode
;; for -march=rv*zve32* wheras VNx8QImode for -march=rv*zve64*
(define_insn "@pred_reduc_<reduc><mode><vlmul1>"
- [(set (match_operand:<VLMUL1> 0 "register_operand" "=vd, vd, vr, vr")
+ [(set (match_operand:<VLMUL1> 0 "register_operand" "=vr, vr")
(unspec:<VLMUL1>
[(unspec:<VM>
- [(match_operand:<VM> 1 "vector_mask_operand" " vm, vm,Wc1,Wc1")
- (match_operand 5 "vector_length_operand" " rK, rK, rK, rK")
- (match_operand 6 "const_int_operand" " i, i, i, i")
- (match_operand 7 "const_int_operand" " i, i, i, i")
+ [(match_operand:<VM> 1 "vector_mask_operand" "vmWc1,vmWc1")
+ (match_operand 5 "vector_length_operand" " rK, rK")
+ (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)
(any_reduc:VI
(vec_duplicate:VI
(vec_select:<VEL>
- (match_operand:<VLMUL1> 4 "register_operand" " vr, vr, vr, vr")
+ (match_operand:<VLMUL1> 4 "register_operand" " vr, vr")
(parallel [(const_int 0)])))
- (match_operand:VI 3 "register_operand" " vr, vr, vr, vr"))
- (match_operand:<VLMUL1> 2 "vector_merge_operand" " vu, 0, vu, 0")] UNSPEC_REDUC))]
- "TARGET_VECTOR && TARGET_MIN_VLEN > 32"
+ (match_operand:VI 3 "register_operand" " vr, vr"))
+ (match_operand:<VLMUL1> 2 "vector_merge_operand" " vu, 0")] UNSPEC_REDUC))]
+ "TARGET_VECTOR && TARGET_MIN_VLEN >= 128"
+ "vred<reduc>.vs\t%0,%3,%4%p1"
+ [(set_attr "type" "vired")
+ (set_attr "mode" "<MODE>")])
+
+(define_insn "@pred_reduc_<reduc><mode><vlmul1_zve64>"
+ [(set (match_operand:<VLMUL1_ZVE64> 0 "register_operand" "=vr, vr")
+ (unspec:<VLMUL1_ZVE64>
+ [(unspec:<VM>
+ [(match_operand:<VM> 1 "vector_mask_operand" "vmWc1,vmWc1")
+ (match_operand 5 "vector_length_operand" " rK, rK")
+ (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)
+ (any_reduc:VI_ZVE64
+ (vec_duplicate:VI_ZVE64
+ (vec_select:<VEL>
+ (match_operand:<VLMUL1_ZVE64> 4 "register_operand" " vr, vr")
+ (parallel [(const_int 0)])))
+ (match_operand:VI_ZVE64 3 "register_operand" " vr, vr"))
+ (match_operand:<VLMUL1_ZVE64> 2 "vector_merge_operand" " vu, 0")] UNSPEC_REDUC))]
+ "TARGET_VECTOR && TARGET_MIN_VLEN == 64"
"vred<reduc>.vs\t%0,%3,%4%p1"
[(set_attr "type" "vired")
(set_attr "mode" "<MODE>")])
@@ -6802,11 +6858,30 @@ (define_insn "@pred_widen_reduc_plus<v_su><mode><vwlmul1>"
(match_operand:VWI 3 "register_operand" " vr, vr")
(match_operand:<VWLMUL1> 4 "register_operand" " vr, vr")
(match_operand:<VWLMUL1> 2 "vector_merge_operand" " vu, 0")] WREDUC))]
- "TARGET_VECTOR && TARGET_MIN_VLEN > 32"
+ "TARGET_VECTOR && TARGET_MIN_VLEN >= 128"
"vwredsum<v_su>.vs\t%0,%3,%4%p1"
[(set_attr "type" "viwred")
(set_attr "mode" "<MODE>")])
+(define_insn "@pred_widen_reduc_plus<v_su><mode><vwlmul1_zve64>"
+ [(set (match_operand:<VWLMUL1_ZVE64> 0 "register_operand" "=&vr, &vr")
+ (unspec:<VWLMUL1_ZVE64>
+ [(unspec:<VM>
+ [(match_operand:<VM> 1 "vector_mask_operand" "vmWc1,vmWc1")
+ (match_operand 5 "vector_length_operand" " rK, rK")
+ (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)
+ (match_operand:VWI_ZVE64 3 "register_operand" " vr, vr")
+ (match_operand:<VWLMUL1_ZVE64> 4 "register_operand" " vr, vr")
+ (match_operand:<VWLMUL1_ZVE64> 2 "vector_merge_operand" " vu, 0")] WREDUC))]
+ "TARGET_VECTOR && TARGET_MIN_VLEN == 64"
+ "vwredsum<v_su>.vs\t%0,%3,%4%p1"
+ [(set_attr "type" "viwred")
+ (set_attr "mode" "<MODE>")])
+
+
(define_insn "@pred_widen_reduc_plus<v_su><mode><vwlmul1_zve32>"
[(set (match_operand:<VWLMUL1_ZVE32> 0 "register_operand" "=&vr, &vr")
(unspec:<VWLMUL1_ZVE32>
@@ -6826,23 +6901,45 @@ (define_insn "@pred_widen_reduc_plus<v_su><mode><vwlmul1_zve32>"
(set_attr "mode" "<MODE>")])
(define_insn "@pred_reduc_<reduc><mode><vlmul1>"
- [(set (match_operand:<VLMUL1> 0 "register_operand" "=vd, vd, vr, vr")
+ [(set (match_operand:<VLMUL1> 0 "register_operand" "=vr, vr")
(unspec:<VLMUL1>
[(unspec:<VM>
- [(match_operand:<VM> 1 "vector_mask_operand" " vm, vm,Wc1,Wc1")
- (match_operand 5 "vector_length_operand" " rK, rK, rK, rK")
- (match_operand 6 "const_int_operand" " i, i, i, i")
- (match_operand 7 "const_int_operand" " i, i, i, i")
+ [(match_operand:<VM> 1 "vector_mask_operand" "vmWc1,vmWc1")
+ (match_operand 5 "vector_length_operand" " rK, rK")
+ (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)
(any_freduc:VF
(vec_duplicate:VF
(vec_select:<VEL>
- (match_operand:<VLMUL1> 4 "register_operand" " vr, vr, vr, vr")
+ (match_operand:<VLMUL1> 4 "register_operand" " vr, vr")
+ (parallel [(const_int 0)])))
+ (match_operand:VF 3 "register_operand" " vr, vr"))
+ (match_operand:<VLMUL1> 2 "vector_merge_operand" " vu, 0")] UNSPEC_REDUC))]
+ "TARGET_VECTOR && TARGET_MIN_VLEN >= 128"
+ "vfred<reduc>.vs\t%0,%3,%4%p1"
+ [(set_attr "type" "vfredu")
+ (set_attr "mode" "<MODE>")])
+
+(define_insn "@pred_reduc_<reduc><mode><vlmul1_zve64>"
+ [(set (match_operand:<VLMUL1_ZVE64> 0 "register_operand" "=vr, vr")
+ (unspec:<VLMUL1_ZVE64>
+ [(unspec:<VM>
+ [(match_operand:<VM> 1 "vector_mask_operand" "vmWc1,vmWc1")
+ (match_operand 5 "vector_length_operand" " rK, rK")
+ (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)
+ (any_freduc:VF_ZVE64
+ (vec_duplicate:VF_ZVE64
+ (vec_select:<VEL>
+ (match_operand:<VLMUL1_ZVE64> 4 "register_operand" " vr, vr")
(parallel [(const_int 0)])))
- (match_operand:VF 3 "register_operand" " vr, vr, vr, vr"))
- (match_operand:<VLMUL1> 2 "vector_merge_operand" " vu, 0, vu, 0")] UNSPEC_REDUC))]
- "TARGET_VECTOR && TARGET_MIN_VLEN > 32"
+ (match_operand:VF_ZVE64 3 "register_operand" " vr, vr"))
+ (match_operand:<VLMUL1_ZVE64> 2 "vector_merge_operand" " vu, 0")] UNSPEC_REDUC))]
+ "TARGET_VECTOR && TARGET_MIN_VLEN == 64"
"vfred<reduc>.vs\t%0,%3,%4%p1"
[(set_attr "type" "vfredu")
(set_attr "mode" "<MODE>")])
@@ -6870,24 +6967,47 @@ (define_insn "@pred_reduc_<reduc><mode><vlmul1_zve32>"
(set_attr "mode" "<MODE>")])
(define_insn "@pred_reduc_plus<order><mode><vlmul1>"
- [(set (match_operand:<VLMUL1> 0 "register_operand" "=vd, vd, vr, vr")
+ [(set (match_operand:<VLMUL1> 0 "register_operand" "=vr, vr")
(unspec:<VLMUL1>
[(unspec:<VLMUL1>
[(unspec:<VM>
- [(match_operand:<VM> 1 "vector_mask_operand" " vm, vm,Wc1,Wc1")
- (match_operand 5 "vector_length_operand" " rK, rK, rK, rK")
- (match_operand 6 "const_int_operand" " i, i, i, i")
- (match_operand 7 "const_int_operand" " i, i, i, i")
+ [(match_operand:<VM> 1 "vector_mask_operand" "vmWc1,vmWc1")
+ (match_operand 5 "vector_length_operand" " rK, rK")
+ (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)
(plus:VF
(vec_duplicate:VF
(vec_select:<VEL>
- (match_operand:<VLMUL1> 4 "register_operand" " vr, vr, vr, vr")
+ (match_operand:<VLMUL1> 4 "register_operand" " vr, vr")
(parallel [(const_int 0)])))
- (match_operand:VF 3 "register_operand" " vr, vr, vr, vr"))
- (match_operand:<VLMUL1> 2 "vector_merge_operand" " vu, 0, vu, 0")] UNSPEC_REDUC)] ORDER))]
- "TARGET_VECTOR && TARGET_MIN_VLEN > 32"
+ (match_operand:VF 3 "register_operand" " vr, vr"))
+ (match_operand:<VLMUL1> 2 "vector_merge_operand" " vu, 0")] UNSPEC_REDUC)] ORDER))]
+ "TARGET_VECTOR && TARGET_MIN_VLEN >= 128"
+ "vfred<order>sum.vs\t%0,%3,%4%p1"
+ [(set_attr "type" "vfred<order>")
+ (set_attr "mode" "<MODE>")])
+
+(define_insn "@pred_reduc_plus<order><mode><vlmul1_zve64>"
+ [(set (match_operand:<VLMUL1_ZVE64> 0 "register_operand" "=vr, vr")
+ (unspec:<VLMUL1_ZVE64>
+ [(unspec:<VLMUL1_ZVE64>
+ [(unspec:<VM>
+ [(match_operand:<VM> 1 "vector_mask_operand" "vmWc1,vmWc1")
+ (match_operand 5 "vector_length_operand" " rK, rK")
+ (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)
+ (plus:VF_ZVE64
+ (vec_duplicate:VF_ZVE64
+ (vec_select:<VEL>
+ (match_operand:<VLMUL1_ZVE64> 4 "register_operand" " vr, vr")
+ (parallel [(const_int 0)])))
+ (match_operand:VF_ZVE64 3 "register_operand" " vr, vr"))
+ (match_operand:<VLMUL1_ZVE64> 2 "vector_merge_operand" " vu, 0")] UNSPEC_REDUC)] ORDER))]
+ "TARGET_VECTOR && TARGET_MIN_VLEN == 64"
"vfred<order>sum.vs\t%0,%3,%4%p1"
[(set_attr "type" "vfred<order>")
(set_attr "mode" "<MODE>")])
@@ -6929,7 +7049,26 @@ (define_insn "@pred_widen_reduc_plus<order><mode><vwlmul1>"
(match_operand:VWF 3 "register_operand" " vr, vr")
(match_operand:<VWLMUL1> 4 "register_operand" " vr, vr")
(match_operand:<VWLMUL1> 2 "vector_merge_operand" " vu, 0")] UNSPEC_WREDUC_SUM)] ORDER))]
- "TARGET_VECTOR && TARGET_MIN_VLEN > 32"
+ "TARGET_VECTOR && TARGET_MIN_VLEN >= 128"
+ "vfwred<order>sum.vs\t%0,%3,%4%p1"
+ [(set_attr "type" "vfwred<order>")
+ (set_attr "mode" "<MODE>")])
+
+(define_insn "@pred_widen_reduc_plus<order><mode><vwlmul1_zve64>"
+ [(set (match_operand:<VWLMUL1_ZVE64> 0 "register_operand" "=&vr, &vr")
+ (unspec:<VWLMUL1_ZVE64>
+ [(unspec:<VWLMUL1_ZVE64>
+ [(unspec:<VM>
+ [(match_operand:<VM> 1 "vector_mask_operand" "vmWc1,vmWc1")
+ (match_operand 5 "vector_length_operand" " rK, rK")
+ (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)
+ (match_operand:VWF_ZVE64 3 "register_operand" " vr, vr")
+ (match_operand:<VWLMUL1_ZVE64> 4 "register_operand" " vr, vr")
+ (match_operand:<VWLMUL1_ZVE64> 2 "vector_merge_operand" " vu, 0")] UNSPEC_WREDUC_SUM)] ORDER))]
+ "TARGET_VECTOR && TARGET_MIN_VLEN == 64"
"vfwred<order>sum.vs\t%0,%3,%4%p1"
[(set_attr "type" "vfwred<order>")
(set_attr "mode" "<MODE>")])
@@ -1,5 +1,5 @@
/* { dg-do compile } */
-/* { dg-options "-march=rv64gcv -mabi=lp64 -O3" } */
+/* { dg-options "-march=rv64gc_zve64d -mabi=lp64 -O3" } */
#include "riscv_vector.h"
@@ -1,5 +1,5 @@
/* { dg-do compile } */
-/* { dg-options "-march=rv32gcv -mabi=ilp32 -mpreferred-stack-boundary=3 -O3 -fno-schedule-insns -fno-schedule-insns2" } */
+/* { dg-options "-march=rv32gc_zve64d -mabi=ilp32 -mpreferred-stack-boundary=3 -O3 -fno-schedule-insns -fno-schedule-insns2" } */
/* { dg-final { check-function-bodies "**" "" } } */
#include "riscv_vector.h"
@@ -1,5 +1,5 @@
/* { dg-do compile } */
-/* { dg-options "-msave-restore -march=rv32gcv -mabi=ilp32 -msave-restore -fno-schedule-insns -fno-schedule-insns2 -O3" } */
+/* { dg-options "-msave-restore -march=rv32gc_zve64d -mabi=ilp32 -msave-restore -fno-schedule-insns -fno-schedule-insns2 -O3" } */
/* { dg-final { check-function-bodies "**" "" } } */
#include "riscv_vector.h"
@@ -1,5 +1,5 @@
/* { dg-do compile } */
-/* { dg-options "-march=rv32gcv -mabi=ilp32 -mpreferred-stack-boundary=3 -O3 -fno-schedule-insns -fno-schedule-insns2" } */
+/* { dg-options "-march=rv32gc_zve64d -mabi=ilp32 -mpreferred-stack-boundary=3 -O3 -fno-schedule-insns -fno-schedule-insns2" } */
/* { dg-final { check-function-bodies "**" "" } } */
#include "riscv_vector.h"
@@ -1,5 +1,5 @@
/* { dg-do compile } */
-/* { dg-options "-march=rv32gcv -mabi=ilp32 -mpreferred-stack-boundary=3 -O3 -fno-schedule-insns -fno-schedule-insns2" } */
+/* { dg-options "-march=rv32gc_zve64d -mabi=ilp32 -mpreferred-stack-boundary=3 -O3 -fno-schedule-insns -fno-schedule-insns2" } */
/* { dg-final { check-function-bodies "**" "" } } */
#include "riscv_vector.h"
@@ -1,5 +1,5 @@
/* { dg-do compile } */
-/* { dg-options "-march=rv32gcv -mabi=ilp32 -mpreferred-stack-boundary=3 -O3 -fno-schedule-insns -fno-schedule-insns2" } */
+/* { dg-options "-march=rv32gc_zve64d -mabi=ilp32 -mpreferred-stack-boundary=3 -O3 -fno-schedule-insns -fno-schedule-insns2" } */
/* { dg-final { check-function-bodies "**" "" } } */
#include "riscv_vector.h"
@@ -1,5 +1,5 @@
/* { dg-do compile } */
-/* { dg-options "-march=rv32gcv -mabi=ilp32 -fno-schedule-insns -fno-schedule-insns2 -O3" } */
+/* { dg-options "-march=rv32gc_zve64d -mabi=ilp32 -fno-schedule-insns -fno-schedule-insns2 -O3" } */
/* { dg-final { check-function-bodies "**" "" } } */
#include "riscv_vector.h"