mirror of
https://github.com/bminor/binutils-gdb.git
synced 2025-11-16 12:34:43 +00:00
Compare commits
13 Commits
gdb-16-bra
...
users/risc
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
19b58b2658 | ||
|
|
77dd5c805f | ||
|
|
3c0675ea93 | ||
|
|
d035495d99 | ||
|
|
626c2b0d36 | ||
|
|
6099b2e4ab | ||
|
|
65ca6d1e09 | ||
|
|
867d7a79f4 | ||
|
|
ffbe01609f | ||
|
|
41675fa0df | ||
|
|
b0643c17a2 | ||
|
|
144cceb058 | ||
|
|
5a2f56d1ae |
@@ -257,6 +257,9 @@
|
|||||||
/* Define to the version of this package. */
|
/* Define to the version of this package. */
|
||||||
#undef PACKAGE_VERSION
|
#undef PACKAGE_VERSION
|
||||||
|
|
||||||
|
/* RISCV target vendor. */
|
||||||
|
#undef RISCV_TARGET_VENDOR
|
||||||
|
|
||||||
/* The size of `int', as computed by sizeof. */
|
/* The size of `int', as computed by sizeof. */
|
||||||
#undef SIZEOF_INT
|
#undef SIZEOF_INT
|
||||||
|
|
||||||
|
|||||||
10
bfd/configure
vendored
10
bfd/configure
vendored
@@ -13658,6 +13658,16 @@ test -n "${selarchs}" && tdefaults="${tdefaults} -DSELECT_ARCHITECTURES='${selar
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
case "${target_cpu}" in
|
||||||
|
riscv*)
|
||||||
|
|
||||||
|
cat >>confdefs.h <<_ACEOF
|
||||||
|
#define RISCV_TARGET_VENDOR "${target_vendor}"
|
||||||
|
_ACEOF
|
||||||
|
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
# If we are configured native, pick a core file support file.
|
# If we are configured native, pick a core file support file.
|
||||||
COREFILE=
|
COREFILE=
|
||||||
COREFLAG=
|
COREFLAG=
|
||||||
|
|||||||
@@ -822,6 +822,12 @@ AC_SUBST(bfd_default_target_size)
|
|||||||
AC_SUBST(tdefaults)
|
AC_SUBST(tdefaults)
|
||||||
AC_SUBST(havevecs)
|
AC_SUBST(havevecs)
|
||||||
|
|
||||||
|
case "${target_cpu}" in
|
||||||
|
riscv*)
|
||||||
|
AC_DEFINE_UNQUOTED(RISCV_TARGET_VENDOR, "${target_vendor}", [RISCV target vendor.])
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
# If we are configured native, pick a core file support file.
|
# If we are configured native, pick a core file support file.
|
||||||
COREFILE=
|
COREFILE=
|
||||||
COREFLAG=
|
COREFLAG=
|
||||||
|
|||||||
@@ -25,6 +25,8 @@
|
|||||||
#include "libbfd.h"
|
#include "libbfd.h"
|
||||||
#include "cpu-riscv.h"
|
#include "cpu-riscv.h"
|
||||||
|
|
||||||
|
const char *riscv_vendor_name = RISCV_TARGET_VENDOR;
|
||||||
|
|
||||||
static const bfd_arch_info_type *
|
static const bfd_arch_info_type *
|
||||||
riscv_compatible (const bfd_arch_info_type *a, const bfd_arch_info_type *b)
|
riscv_compatible (const bfd_arch_info_type *a, const bfd_arch_info_type *b)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -18,6 +18,8 @@
|
|||||||
Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
|
Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
|
||||||
MA 02110-1301, USA. */
|
MA 02110-1301, USA. */
|
||||||
|
|
||||||
|
extern const char *riscv_vendor_name;
|
||||||
|
|
||||||
enum riscv_spec_class
|
enum riscv_spec_class
|
||||||
{
|
{
|
||||||
/* ISA spec. */
|
/* ISA spec. */
|
||||||
@@ -33,6 +35,12 @@ enum riscv_spec_class
|
|||||||
PRIV_SPEC_CLASS_1P10,
|
PRIV_SPEC_CLASS_1P10,
|
||||||
PRIV_SPEC_CLASS_1P11,
|
PRIV_SPEC_CLASS_1P11,
|
||||||
PRIV_SPEC_CLASS_DRAFT,
|
PRIV_SPEC_CLASS_DRAFT,
|
||||||
|
|
||||||
|
/* Vendor spec for T_HEAD XuanTie. */
|
||||||
|
VENDOR_SPEC_CLASS_THEAD,
|
||||||
|
|
||||||
|
/* Vendor spec for SiFive. */
|
||||||
|
VENDOR_SPEC_CLASS_SIFIVE,
|
||||||
};
|
};
|
||||||
|
|
||||||
struct riscv_spec
|
struct riscv_spec
|
||||||
|
|||||||
@@ -1073,15 +1073,44 @@ static struct riscv_implicit_subset riscv_implicit_subsets[] =
|
|||||||
{"g", "zicsr", check_implicit_always},
|
{"g", "zicsr", check_implicit_always},
|
||||||
{"g", "zifencei", check_implicit_always},
|
{"g", "zifencei", check_implicit_always},
|
||||||
{"q", "d", check_implicit_always},
|
{"q", "d", check_implicit_always},
|
||||||
|
{"v", "d", check_implicit_always},
|
||||||
|
{"v", "zve64d", check_implicit_always},
|
||||||
|
{"v", "zvl128b", check_implicit_always},
|
||||||
|
{"zvamo", "a", check_implicit_always},
|
||||||
|
{"zve64d", "d", check_implicit_always},
|
||||||
|
{"zve64d", "zve64f", check_implicit_always},
|
||||||
|
{"zve64f", "zve32f", check_implicit_always},
|
||||||
|
{"zve64f", "zve64x", check_implicit_always},
|
||||||
|
{"zve64f", "zvl64b", check_implicit_always},
|
||||||
|
{"zve32f", "f", check_implicit_always},
|
||||||
|
{"zve32f", "zvl32b", check_implicit_always},
|
||||||
|
{"zve32f", "zve32x", check_implicit_always},
|
||||||
|
{"zve64x", "zve32x", check_implicit_always},
|
||||||
|
{"zve64x", "zvl64b", check_implicit_always},
|
||||||
|
{"zve32x", "zvl32b", check_implicit_always},
|
||||||
|
{"zvl65536b", "zvl32768b", check_implicit_always},
|
||||||
|
{"zvl32768b", "zvl16384b", check_implicit_always},
|
||||||
|
{"zvl16384b", "zvl8192b", check_implicit_always},
|
||||||
|
{"zvl8192b", "zvl4096b", check_implicit_always},
|
||||||
|
{"zvl4096b", "zvl2048b", check_implicit_always},
|
||||||
|
{"zvl2048b", "zvl1024b", check_implicit_always},
|
||||||
|
{"zvl1024b", "zvl512b", check_implicit_always},
|
||||||
|
{"zvl512b", "zvl256b", check_implicit_always},
|
||||||
|
{"zvl256b", "zvl128b", check_implicit_always},
|
||||||
|
{"zvl128b", "zvl64b", check_implicit_always},
|
||||||
|
{"zvl64b", "zvl32b", check_implicit_always},
|
||||||
{"d", "f", check_implicit_always},
|
{"d", "f", check_implicit_always},
|
||||||
{"f", "zicsr", check_implicit_always},
|
{"f", "zicsr", check_implicit_always},
|
||||||
|
{"zfh", "f", check_implicit_always},
|
||||||
|
{"zfh", "zicsr", check_implicit_always},
|
||||||
{NULL, NULL, NULL}
|
{NULL, NULL, NULL}
|
||||||
};
|
};
|
||||||
|
|
||||||
/* For default_enable field, decide if the extension should
|
/* For default_enable field, decide if the extension should
|
||||||
be enbaled by default. */
|
be enbaled by default. */
|
||||||
|
|
||||||
#define EXT_DEFAULT 0x1
|
#define EXT_DEFAULT 0x1
|
||||||
|
#define EXT_SIFIVE (0x1 << 2)
|
||||||
|
|
||||||
/* List all extensions that binutils should know about. */
|
/* List all extensions that binutils should know about. */
|
||||||
|
|
||||||
@@ -1106,7 +1135,7 @@ static struct riscv_supported_ext riscv_supported_std_ext[] =
|
|||||||
{"i", ISA_SPEC_CLASS_2P2, 2, 0, 0 },
|
{"i", ISA_SPEC_CLASS_2P2, 2, 0, 0 },
|
||||||
/* The g is a special case which we don't want to output it,
|
/* The g is a special case which we don't want to output it,
|
||||||
but still need it when adding implicit extensions. */
|
but still need it when adding implicit extensions. */
|
||||||
{"g", ISA_SPEC_CLASS_NONE, RISCV_UNKNOWN_VERSION, RISCV_UNKNOWN_VERSION, EXT_DEFAULT },
|
{"g", ISA_SPEC_CLASS_NONE, RISCV_UNKNOWN_VERSION, RISCV_UNKNOWN_VERSION, EXT_DEFAULT|EXT_SIFIVE },
|
||||||
{"m", ISA_SPEC_CLASS_20191213, 2, 0, 0 },
|
{"m", ISA_SPEC_CLASS_20191213, 2, 0, 0 },
|
||||||
{"m", ISA_SPEC_CLASS_20190608, 2, 0, 0 },
|
{"m", ISA_SPEC_CLASS_20190608, 2, 0, 0 },
|
||||||
{"m", ISA_SPEC_CLASS_2P2, 2, 0, 0 },
|
{"m", ISA_SPEC_CLASS_2P2, 2, 0, 0 },
|
||||||
@@ -1130,7 +1159,7 @@ static struct riscv_supported_ext riscv_supported_std_ext[] =
|
|||||||
{"j", ISA_SPEC_CLASS_NONE, RISCV_UNKNOWN_VERSION, RISCV_UNKNOWN_VERSION, 0 },
|
{"j", ISA_SPEC_CLASS_NONE, RISCV_UNKNOWN_VERSION, RISCV_UNKNOWN_VERSION, 0 },
|
||||||
{"t", ISA_SPEC_CLASS_NONE, RISCV_UNKNOWN_VERSION, RISCV_UNKNOWN_VERSION, 0 },
|
{"t", ISA_SPEC_CLASS_NONE, RISCV_UNKNOWN_VERSION, RISCV_UNKNOWN_VERSION, 0 },
|
||||||
{"p", ISA_SPEC_CLASS_NONE, RISCV_UNKNOWN_VERSION, RISCV_UNKNOWN_VERSION, 0 },
|
{"p", ISA_SPEC_CLASS_NONE, RISCV_UNKNOWN_VERSION, RISCV_UNKNOWN_VERSION, 0 },
|
||||||
{"v", ISA_SPEC_CLASS_NONE, RISCV_UNKNOWN_VERSION, RISCV_UNKNOWN_VERSION, 0 },
|
{"v", ISA_SPEC_CLASS_DRAFT, 1, 0, 0 },
|
||||||
{"n", ISA_SPEC_CLASS_NONE, RISCV_UNKNOWN_VERSION, RISCV_UNKNOWN_VERSION, 0 },
|
{"n", ISA_SPEC_CLASS_NONE, RISCV_UNKNOWN_VERSION, RISCV_UNKNOWN_VERSION, 0 },
|
||||||
{NULL, 0, 0, 0, 0}
|
{NULL, 0, 0, 0, 0}
|
||||||
};
|
};
|
||||||
@@ -1146,11 +1175,32 @@ static struct riscv_supported_ext riscv_supported_std_z_ext[] =
|
|||||||
{"zba", ISA_SPEC_CLASS_DRAFT, 1, 0, 0 },
|
{"zba", ISA_SPEC_CLASS_DRAFT, 1, 0, 0 },
|
||||||
{"zbc", ISA_SPEC_CLASS_DRAFT, 1, 0, 0 },
|
{"zbc", ISA_SPEC_CLASS_DRAFT, 1, 0, 0 },
|
||||||
{"zbs", ISA_SPEC_CLASS_DRAFT, 1, 0, 0 },
|
{"zbs", ISA_SPEC_CLASS_DRAFT, 1, 0, 0 },
|
||||||
|
{"zve32x", ISA_SPEC_CLASS_DRAFT, 1, 0, 0 },
|
||||||
|
{"zve32f", ISA_SPEC_CLASS_DRAFT, 1, 0, 0 },
|
||||||
|
{"zve32d", ISA_SPEC_CLASS_DRAFT, 1, 0, 0 },
|
||||||
|
{"zve64x", ISA_SPEC_CLASS_DRAFT, 1, 0, 0 },
|
||||||
|
{"zve64f", ISA_SPEC_CLASS_DRAFT, 1, 0, 0 },
|
||||||
|
{"zve64d", ISA_SPEC_CLASS_DRAFT, 1, 0, 0 },
|
||||||
|
{"zvl32b", ISA_SPEC_CLASS_DRAFT, 1, 0, 0 },
|
||||||
|
{"zvl64b", ISA_SPEC_CLASS_DRAFT, 1, 0, 0 },
|
||||||
|
{"zvl128b", ISA_SPEC_CLASS_DRAFT, 1, 0, 0 },
|
||||||
|
{"zvl256b", ISA_SPEC_CLASS_DRAFT, 1, 0, 0 },
|
||||||
|
{"zvl512b", ISA_SPEC_CLASS_DRAFT, 1, 0, 0 },
|
||||||
|
{"zvl1024b", ISA_SPEC_CLASS_DRAFT, 1, 0, 0 },
|
||||||
|
{"zvl2048b", ISA_SPEC_CLASS_DRAFT, 1, 0, 0 },
|
||||||
|
{"zvl4096b", ISA_SPEC_CLASS_DRAFT, 1, 0, 0 },
|
||||||
|
{"zvl8192b", ISA_SPEC_CLASS_DRAFT, 1, 0, 0 },
|
||||||
|
{"zvl16384b", ISA_SPEC_CLASS_DRAFT, 1, 0, 0 },
|
||||||
|
{"zvl32768b", ISA_SPEC_CLASS_DRAFT, 1, 0, 0 },
|
||||||
|
{"zvl65536b", ISA_SPEC_CLASS_DRAFT, 1, 0, 0 },
|
||||||
|
{"zvamo", ISA_SPEC_CLASS_DRAFT, 0, 10, 0 }, /* draft. */
|
||||||
|
{"zfh", ISA_SPEC_CLASS_DRAFT, 0, 1, 0 }, /* draft. */
|
||||||
{NULL, 0, 0, 0, 0}
|
{NULL, 0, 0, 0, 0}
|
||||||
};
|
};
|
||||||
|
|
||||||
static struct riscv_supported_ext riscv_supported_std_s_ext[] =
|
static struct riscv_supported_ext riscv_supported_std_s_ext[] =
|
||||||
{
|
{
|
||||||
|
{"svinval", ISA_SPEC_CLASS_DRAFT, 0, 1, 0 }, /* draft. */
|
||||||
{NULL, 0, 0, 0, 0}
|
{NULL, 0, 0, 0, 0}
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -1164,6 +1214,24 @@ static struct riscv_supported_ext riscv_supported_std_zxm_ext[] =
|
|||||||
{NULL, 0, 0, 0, 0}
|
{NULL, 0, 0, 0, 0}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/* T-HEAD extentions for Xuantie C9xx. The version 2.0 just keeps
|
||||||
|
compatible. */
|
||||||
|
static struct riscv_supported_ext riscv_supported_vendor_thead_ext[] =
|
||||||
|
{
|
||||||
|
{"xtheadc", VENDOR_SPEC_CLASS_THEAD, 2, 0, 0 },
|
||||||
|
{"xtheade", VENDOR_SPEC_CLASS_THEAD, 2, 0, 0 },
|
||||||
|
{"xtheadse", VENDOR_SPEC_CLASS_THEAD, 2, 0, 0 },
|
||||||
|
{NULL, 0, 0, 0, 0}
|
||||||
|
};
|
||||||
|
|
||||||
|
static struct riscv_supported_ext riscv_supported_vendor_sifive_ext[] =
|
||||||
|
{
|
||||||
|
{"xsfcdiscarddlone", VENDOR_SPEC_CLASS_SIFIVE, 0, 1, EXT_SIFIVE},
|
||||||
|
{"xsfcflushdlone", VENDOR_SPEC_CLASS_SIFIVE, 0, 1, EXT_SIFIVE},
|
||||||
|
{"xsfcflushilone", VENDOR_SPEC_CLASS_SIFIVE, 0, 1, EXT_SIFIVE},
|
||||||
|
{NULL, 0, 0, 0, 0}
|
||||||
|
};
|
||||||
|
|
||||||
const struct riscv_supported_ext *riscv_all_supported_ext[] =
|
const struct riscv_supported_ext *riscv_all_supported_ext[] =
|
||||||
{
|
{
|
||||||
riscv_supported_std_ext,
|
riscv_supported_std_ext,
|
||||||
@@ -1171,6 +1239,8 @@ const struct riscv_supported_ext *riscv_all_supported_ext[] =
|
|||||||
riscv_supported_std_s_ext,
|
riscv_supported_std_s_ext,
|
||||||
riscv_supported_std_h_ext,
|
riscv_supported_std_h_ext,
|
||||||
riscv_supported_std_zxm_ext,
|
riscv_supported_std_zxm_ext,
|
||||||
|
riscv_supported_vendor_thead_ext,
|
||||||
|
riscv_supported_vendor_sifive_ext,
|
||||||
NULL
|
NULL
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -1435,6 +1505,10 @@ riscv_get_default_ext_version (enum riscv_spec_class default_isa_spec,
|
|||||||
case RV_ISA_CLASS_S: table = riscv_supported_std_s_ext; break;
|
case RV_ISA_CLASS_S: table = riscv_supported_std_s_ext; break;
|
||||||
case RV_ISA_CLASS_H: table = riscv_supported_std_h_ext; break;
|
case RV_ISA_CLASS_H: table = riscv_supported_std_h_ext; break;
|
||||||
case RV_ISA_CLASS_X:
|
case RV_ISA_CLASS_X:
|
||||||
|
if (strncmp (name, "xsf", 3) == 0)
|
||||||
|
table = riscv_supported_vendor_sifive_ext;
|
||||||
|
else
|
||||||
|
table = riscv_supported_vendor_thead_ext;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
table = riscv_supported_std_ext;
|
table = riscv_supported_std_ext;
|
||||||
@@ -1445,6 +1519,8 @@ riscv_get_default_ext_version (enum riscv_spec_class default_isa_spec,
|
|||||||
{
|
{
|
||||||
if (strcmp (table[i].name, name) == 0
|
if (strcmp (table[i].name, name) == 0
|
||||||
&& (table[i].isa_spec_class == ISA_SPEC_CLASS_DRAFT
|
&& (table[i].isa_spec_class == ISA_SPEC_CLASS_DRAFT
|
||||||
|
|| table[i].isa_spec_class == VENDOR_SPEC_CLASS_THEAD
|
||||||
|
|| table[i].isa_spec_class == VENDOR_SPEC_CLASS_SIFIVE
|
||||||
|| table[i].isa_spec_class == default_isa_spec))
|
|| table[i].isa_spec_class == default_isa_spec))
|
||||||
{
|
{
|
||||||
*major_version = table[i].major_version;
|
*major_version = table[i].major_version;
|
||||||
@@ -1824,6 +1900,28 @@ riscv_parse_check_conflicts (riscv_parse_subset_t *rps)
|
|||||||
(_("rv32e does not support the `f' extension"));
|
(_("rv32e does not support the `f' extension"));
|
||||||
no_conflict = false;
|
no_conflict = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool support_zve = false;
|
||||||
|
bool support_zvl = false;
|
||||||
|
riscv_subset_t *s = rps->subset_list->head;
|
||||||
|
for (; s != NULL; s = s->next)
|
||||||
|
{
|
||||||
|
if (!support_zve
|
||||||
|
&& strncmp (s->name, "zve", 3) == 0)
|
||||||
|
support_zve = true;
|
||||||
|
if (!support_zvl
|
||||||
|
&& strncmp (s->name, "zvl", 3) == 0)
|
||||||
|
support_zvl = true;
|
||||||
|
if (support_zve && support_zvl)
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
if (support_zvl && !support_zve)
|
||||||
|
{
|
||||||
|
rps->error_handler
|
||||||
|
(_("zvl*b extensions need to enable either `v' or `zve' extension"));
|
||||||
|
no_conflict = false;
|
||||||
|
}
|
||||||
|
|
||||||
return no_conflict;
|
return no_conflict;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1833,8 +1931,14 @@ riscv_parse_check_conflicts (riscv_parse_subset_t *rps)
|
|||||||
static void
|
static void
|
||||||
riscv_set_default_arch (riscv_parse_subset_t *rps)
|
riscv_set_default_arch (riscv_parse_subset_t *rps)
|
||||||
{
|
{
|
||||||
unsigned long enable = EXT_DEFAULT;
|
unsigned long enable;
|
||||||
int i, j;
|
int i, j;
|
||||||
|
|
||||||
|
if (strcmp (riscv_vendor_name, "sifive") == 0)
|
||||||
|
enable = EXT_SIFIVE;
|
||||||
|
else
|
||||||
|
enable = EXT_DEFAULT;
|
||||||
|
|
||||||
for (i = 0; riscv_all_supported_ext[i] != NULL; i++)
|
for (i = 0; riscv_all_supported_ext[i] != NULL; i++)
|
||||||
{
|
{
|
||||||
const struct riscv_supported_ext *table = riscv_all_supported_ext[i];
|
const struct riscv_supported_ext *table = riscv_all_supported_ext[i];
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
16
gas/testsuite/gas/riscv/extended/extended-csr.d
Normal file
16
gas/testsuite/gas/riscv/extended/extended-csr.d
Normal file
@@ -0,0 +1,16 @@
|
|||||||
|
#as: -march=rv32iv
|
||||||
|
#objdump: -d
|
||||||
|
|
||||||
|
.*:[ ]+file format .*
|
||||||
|
|
||||||
|
|
||||||
|
Disassembly of section .text:
|
||||||
|
|
||||||
|
0+000 <.text>:
|
||||||
|
[ ]+[0-9a-f]+:[ ]+00802573[ ]+csrr[ ]+a0,vstart
|
||||||
|
[ ]+[0-9a-f]+:[ ]+00902573[ ]+csrr[ ]+a0,vxsat
|
||||||
|
[ ]+[0-9a-f]+:[ ]+00a02573[ ]+csrr[ ]+a0,vxrm
|
||||||
|
[ ]+[0-9a-f]+:[ ]+00f02573[ ]+csrr[ ]+a0,vcsr
|
||||||
|
[ ]+[0-9a-f]+:[ ]+c2002573[ ]+csrr[ ]+a0,vl
|
||||||
|
[ ]+[0-9a-f]+:[ ]+c2102573[ ]+csrr[ ]+a0,vtype
|
||||||
|
[ ]+[0-9a-f]+:[ ]+c2202573[ ]+csrr[ ]+a0,vlenb
|
||||||
12
gas/testsuite/gas/riscv/extended/extended-csr.s
Normal file
12
gas/testsuite/gas/riscv/extended/extended-csr.s
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
.macro csr val
|
||||||
|
csrr a0,\val
|
||||||
|
.endm
|
||||||
|
|
||||||
|
# Vector
|
||||||
|
csr vstart
|
||||||
|
csr vxsat
|
||||||
|
csr vxrm
|
||||||
|
csr vcsr
|
||||||
|
csr vl
|
||||||
|
csr vtype
|
||||||
|
csr vlenb
|
||||||
23
gas/testsuite/gas/riscv/extended/extended.exp
Normal file
23
gas/testsuite/gas/riscv/extended/extended.exp
Normal file
@@ -0,0 +1,23 @@
|
|||||||
|
# Expect script for RISC-V assembler tests.
|
||||||
|
# Copyright (C) 2021 Free Software Foundation, Inc.
|
||||||
|
#
|
||||||
|
# This file is part of the GNU Binutils.
|
||||||
|
#
|
||||||
|
# This program is free software; you can redistribute it and/or modify
|
||||||
|
# it under the terms of the GNU General Public License as published by
|
||||||
|
# the Free Software Foundation; either version 3 of the License, or
|
||||||
|
# (at your option) any later version.
|
||||||
|
#
|
||||||
|
# This program is distributed in the hope that it will be useful,
|
||||||
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
# GNU General Public License for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU General Public License
|
||||||
|
# along with this program; if not, write to the Free Software
|
||||||
|
# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
|
||||||
|
# MA 02110-1301, USA.
|
||||||
|
|
||||||
|
if [istarget riscv*-*-*] {
|
||||||
|
run_dump_tests [lsort [glob -nocomplain $srcdir/$subdir/*.d]]
|
||||||
|
}
|
||||||
10
gas/testsuite/gas/riscv/extended/float16-be.d
Normal file
10
gas/testsuite/gas/riscv/extended/float16-be.d
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
# source: float16.s
|
||||||
|
# objdump: -sj .data
|
||||||
|
# as: -mbig-endian
|
||||||
|
|
||||||
|
.*:[ ]+file format .*bigriscv
|
||||||
|
|
||||||
|
Contents of section \.data:
|
||||||
|
0000 4a002fdf 1c197bff 000103ff 04003c00.*
|
||||||
|
0010 3c017fff 7c00fc00 00008000 bc00bbe7.*
|
||||||
|
0020 fbff4200 4a00603e 7e007c01.*
|
||||||
10
gas/testsuite/gas/riscv/extended/float16-le.d
Normal file
10
gas/testsuite/gas/riscv/extended/float16-le.d
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
# source: float16.s
|
||||||
|
# objdump: -sj .data
|
||||||
|
# as: -mlittle-endian
|
||||||
|
|
||||||
|
.*:[ ]+file format .*littleriscv
|
||||||
|
|
||||||
|
Contents of section \.data:
|
||||||
|
0000 004adf2f 191cff7b 0100ff03 0004003c.*
|
||||||
|
0010 013cff7f 007c00fc 00000080 00bce7bb.*
|
||||||
|
0020 fffb0042 004a3e60 007e017c.*
|
||||||
21
gas/testsuite/gas/riscv/extended/float16.s
Normal file
21
gas/testsuite/gas/riscv/extended/float16.s
Normal file
@@ -0,0 +1,21 @@
|
|||||||
|
.data
|
||||||
|
.float16 12.0
|
||||||
|
.float16 0.123
|
||||||
|
.float16 0.004
|
||||||
|
.float16 65504
|
||||||
|
.float16 5.9605e-8
|
||||||
|
.float16 6.0976e-5
|
||||||
|
.float16 6.1035e-5
|
||||||
|
.float16 1
|
||||||
|
.float16 1.001
|
||||||
|
.float16 NaN
|
||||||
|
.float16 +Inf
|
||||||
|
.float16 -Inf
|
||||||
|
.float16 +0
|
||||||
|
.float16 -0
|
||||||
|
.float16 -1
|
||||||
|
.float16 -0.98765
|
||||||
|
.float16 -65504
|
||||||
|
.float16 3.0, 12.0, 543.123
|
||||||
|
.float16 0h:7e00 # qNaNh
|
||||||
|
.float16 0h:7c01 # sNaNh
|
||||||
71
gas/testsuite/gas/riscv/extended/fp-zfh-insns.d
Normal file
71
gas/testsuite/gas/riscv/extended/fp-zfh-insns.d
Normal file
@@ -0,0 +1,71 @@
|
|||||||
|
#as: -march=rv64ifdq_zfh
|
||||||
|
#source: fp-zfh-insns.s
|
||||||
|
#objdump: -dr
|
||||||
|
|
||||||
|
.*:[ ]+file format .*
|
||||||
|
|
||||||
|
|
||||||
|
Disassembly of section .text:
|
||||||
|
|
||||||
|
0+000 <.text>:
|
||||||
|
[ ]+[0-9a-f]+:[ ]+00059507[ ]+flh[ ]+fa0,0\(a1\)
|
||||||
|
[ ]+[0-9a-f]+:[ ]+00a59027[ ]+fsh[ ]+fa0,0\(a1\)
|
||||||
|
[ ]+[0-9a-f]+:[ ]+24b58553[ ]+fmv.h[ ]+fa0,fa1
|
||||||
|
[ ]+[0-9a-f]+:[ ]+24b59553[ ]+fneg.h[ ]+fa0,fa1
|
||||||
|
[ ]+[0-9a-f]+:[ ]+24b5a553[ ]+fabs.h[ ]+fa0,fa1
|
||||||
|
[ ]+[0-9a-f]+:[ ]+24c58553[ ]+fsgnj.h[ ]+fa0,fa1,fa2
|
||||||
|
[ ]+[0-9a-f]+:[ ]+24c59553[ ]+fsgnjn.h[ ]+fa0,fa1,fa2
|
||||||
|
[ ]+[0-9a-f]+:[ ]+24c5a553[ ]+fsgnjx.h[ ]+fa0,fa1,fa2
|
||||||
|
[ ]+[0-9a-f]+:[ ]+04c5f553[ ]+fadd.h[ ]+fa0,fa1,fa2
|
||||||
|
[ ]+[0-9a-f]+:[ ]+04c58553[ ]+fadd.h[ ]+fa0,fa1,fa2,rne
|
||||||
|
[ ]+[0-9a-f]+:[ ]+0cc5f553[ ]+fsub.h[ ]+fa0,fa1,fa2
|
||||||
|
[ ]+[0-9a-f]+:[ ]+0cc58553[ ]+fsub.h[ ]+fa0,fa1,fa2,rne
|
||||||
|
[ ]+[0-9a-f]+:[ ]+14c5f553[ ]+fmul.h[ ]+fa0,fa1,fa2
|
||||||
|
[ ]+[0-9a-f]+:[ ]+14c58553[ ]+fmul.h[ ]+fa0,fa1,fa2,rne
|
||||||
|
[ ]+[0-9a-f]+:[ ]+1cc5f553[ ]+fdiv.h[ ]+fa0,fa1,fa2
|
||||||
|
[ ]+[0-9a-f]+:[ ]+1cc58553[ ]+fdiv.h[ ]+fa0,fa1,fa2,rne
|
||||||
|
[ ]+[0-9a-f]+:[ ]+5c05f553[ ]+fsqrt.h[ ]+fa0,fa1
|
||||||
|
[ ]+[0-9a-f]+:[ ]+5c058553[ ]+fsqrt.h[ ]+fa0,fa1,rne
|
||||||
|
[ ]+[0-9a-f]+:[ ]+2cc58553[ ]+fmin.h[ ]+fa0,fa1,fa2
|
||||||
|
[ ]+[0-9a-f]+:[ ]+2cc59553[ ]+fmax.h[ ]+fa0,fa1,fa2
|
||||||
|
[ ]+[0-9a-f]+:[ ]+6cc5f543[ ]+fmadd.h[ ]+fa0,fa1,fa2,fa3
|
||||||
|
[ ]+[0-9a-f]+:[ ]+6cc58543[ ]+fmadd.h[ ]+fa0,fa1,fa2,fa3,rne
|
||||||
|
[ ]+[0-9a-f]+:[ ]+6cc5f54f[ ]+fnmadd.h[ ]+fa0,fa1,fa2,fa3
|
||||||
|
[ ]+[0-9a-f]+:[ ]+6cc5854f[ ]+fnmadd.h[ ]+fa0,fa1,fa2,fa3,rne
|
||||||
|
[ ]+[0-9a-f]+:[ ]+6cc5f547[ ]+fmsub.h[ ]+fa0,fa1,fa2,fa3
|
||||||
|
[ ]+[0-9a-f]+:[ ]+6cc58547[ ]+fmsub.h[ ]+fa0,fa1,fa2,fa3,rne
|
||||||
|
[ ]+[0-9a-f]+:[ ]+6cc5f54b[ ]+fnmsub.h[ ]+fa0,fa1,fa2,fa3
|
||||||
|
[ ]+[0-9a-f]+:[ ]+6cc5854b[ ]+fnmsub.h[ ]+fa0,fa1,fa2,fa3,rne
|
||||||
|
[ ]+[0-9a-f]+:[ ]+c405f553[ ]+fcvt.w.h[ ]+a0,fa1
|
||||||
|
[ ]+[0-9a-f]+:[ ]+c4058553[ ]+fcvt.w.h[ ]+a0,fa1,rne
|
||||||
|
[ ]+[0-9a-f]+:[ ]+c415f553[ ]+fcvt.wu.h[ ]+a0,fa1
|
||||||
|
[ ]+[0-9a-f]+:[ ]+c4158553[ ]+fcvt.wu.h[ ]+a0,fa1,rne
|
||||||
|
[ ]+[0-9a-f]+:[ ]+d405f553[ ]+fcvt.h.w[ ]+fa0,a1
|
||||||
|
[ ]+[0-9a-f]+:[ ]+d4058553[ ]+fcvt.h.w[ ]+fa0,a1,rne
|
||||||
|
[ ]+[0-9a-f]+:[ ]+d415f553[ ]+fcvt.h.wu[ ]+fa0,a1
|
||||||
|
[ ]+[0-9a-f]+:[ ]+d4158553[ ]+fcvt.h.wu[ ]+fa0,a1,rne
|
||||||
|
[ ]+[0-9a-f]+:[ ]+c425f553[ ]+fcvt.l.h[ ]+a0,fa1
|
||||||
|
[ ]+[0-9a-f]+:[ ]+c4258553[ ]+fcvt.l.h[ ]+a0,fa1,rne
|
||||||
|
[ ]+[0-9a-f]+:[ ]+c435f553[ ]+fcvt.lu.h[ ]+a0,fa1
|
||||||
|
[ ]+[0-9a-f]+:[ ]+c4358553[ ]+fcvt.lu.h[ ]+a0,fa1,rne
|
||||||
|
[ ]+[0-9a-f]+:[ ]+d425f553[ ]+fcvt.h.l[ ]+fa0,a1
|
||||||
|
[ ]+[0-9a-f]+:[ ]+d4258553[ ]+fcvt.h.l[ ]+fa0,a1,rne
|
||||||
|
[ ]+[0-9a-f]+:[ ]+d435f553[ ]+fcvt.h.lu[ ]+fa0,a1
|
||||||
|
[ ]+[0-9a-f]+:[ ]+d4358553[ ]+fcvt.h.lu[ ]+fa0,a1,rne
|
||||||
|
[ ]+[0-9a-f]+:[ ]+e4058553[ ]+fmv.x.h[ ]+a0,fa1
|
||||||
|
[ ]+[0-9a-f]+:[ ]+f4058553[ ]+fmv.h.x[ ]+fa0,a1
|
||||||
|
[ ]+[0-9a-f]+:[ ]+40258553[ ]+fcvt.s.h[ ]+fa0,fa1
|
||||||
|
[ ]+[0-9a-f]+:[ ]+42258553[ ]+fcvt.d.h[ ]+fa0,fa1
|
||||||
|
[ ]+[0-9a-f]+:[ ]+46258553[ ]+fcvt.q.h[ ]+fa0,fa1
|
||||||
|
[ ]+[0-9a-f]+:[ ]+4405f553[ ]+fcvt.h.s[ ]+fa0,fa1
|
||||||
|
[ ]+[0-9a-f]+:[ ]+44058553[ ]+fcvt.h.s[ ]+fa0,fa1,rne
|
||||||
|
[ ]+[0-9a-f]+:[ ]+4415f553[ ]+fcvt.h.d[ ]+fa0,fa1
|
||||||
|
[ ]+[0-9a-f]+:[ ]+44158553[ ]+fcvt.h.d[ ]+fa0,fa1,rne
|
||||||
|
[ ]+[0-9a-f]+:[ ]+4435f553[ ]+fcvt.h.q[ ]+fa0,fa1
|
||||||
|
[ ]+[0-9a-f]+:[ ]+44358553[ ]+fcvt.h.q[ ]+fa0,fa1,rne
|
||||||
|
[ ]+[0-9a-f]+:[ ]+e4059553[ ]+fclass.h[ ]+a0,fa1
|
||||||
|
[ ]+[0-9a-f]+:[ ]+a4c5a553[ ]+feq.h[ ]+a0,fa1,fa2
|
||||||
|
[ ]+[0-9a-f]+:[ ]+a4c59553[ ]+flt.h[ ]+a0,fa1,fa2
|
||||||
|
[ ]+[0-9a-f]+:[ ]+a4c58553[ ]+fle.h[ ]+a0,fa1,fa2
|
||||||
|
[ ]+[0-9a-f]+:[ ]+a4c59553[ ]+flt.h[ ]+a0,fa1,fa2
|
||||||
|
[ ]+[0-9a-f]+:[ ]+a4c58553[ ]+fle.h[ ]+a0,fa1,fa2
|
||||||
68
gas/testsuite/gas/riscv/extended/fp-zfh-insns.s
Normal file
68
gas/testsuite/gas/riscv/extended/fp-zfh-insns.s
Normal file
@@ -0,0 +1,68 @@
|
|||||||
|
flh fa0, 0(a1)
|
||||||
|
fsh fa0, 0(a1)
|
||||||
|
|
||||||
|
fmv.h fa0, fa1
|
||||||
|
fneg.h fa0, fa1
|
||||||
|
fabs.h fa0, fa1
|
||||||
|
fsgnj.h fa0, fa1, fa2
|
||||||
|
fsgnjn.h fa0, fa1, fa2
|
||||||
|
fsgnjx.h fa0, fa1, fa2
|
||||||
|
|
||||||
|
fadd.h fa0, fa1, fa2
|
||||||
|
fadd.h fa0, fa1, fa2, rne
|
||||||
|
fsub.h fa0, fa1, fa2
|
||||||
|
fsub.h fa0, fa1, fa2, rne
|
||||||
|
fmul.h fa0, fa1, fa2
|
||||||
|
fmul.h fa0, fa1, fa2, rne
|
||||||
|
fdiv.h fa0, fa1, fa2
|
||||||
|
fdiv.h fa0, fa1, fa2, rne
|
||||||
|
fsqrt.h fa0, fa1
|
||||||
|
fsqrt.h fa0, fa1, rne
|
||||||
|
fmin.h fa0, fa1, fa2
|
||||||
|
fmax.h fa0, fa1, fa2
|
||||||
|
|
||||||
|
fmadd.h fa0, fa1, fa2, fa3
|
||||||
|
fmadd.h fa0, fa1, fa2, fa3, rne
|
||||||
|
fnmadd.h fa0, fa1, fa2, fa3
|
||||||
|
fnmadd.h fa0, fa1, fa2, fa3, rne
|
||||||
|
fmsub.h fa0, fa1, fa2, fa3
|
||||||
|
fmsub.h fa0, fa1, fa2, fa3, rne
|
||||||
|
fnmsub.h fa0, fa1, fa2, fa3
|
||||||
|
fnmsub.h fa0, fa1, fa2, fa3, rne
|
||||||
|
|
||||||
|
fcvt.w.h a0, fa1
|
||||||
|
fcvt.w.h a0, fa1, rne
|
||||||
|
fcvt.wu.h a0, fa1
|
||||||
|
fcvt.wu.h a0, fa1, rne
|
||||||
|
fcvt.h.w fa0, a1
|
||||||
|
fcvt.h.w fa0, a1, rne
|
||||||
|
fcvt.h.wu fa0, a1
|
||||||
|
fcvt.h.wu fa0, a1, rne
|
||||||
|
fcvt.l.h a0, fa1
|
||||||
|
fcvt.l.h a0, fa1, rne
|
||||||
|
fcvt.lu.h a0, fa1
|
||||||
|
fcvt.lu.h a0, fa1, rne
|
||||||
|
fcvt.h.l fa0, a1
|
||||||
|
fcvt.h.l fa0, a1, rne
|
||||||
|
fcvt.h.lu fa0, a1
|
||||||
|
fcvt.h.lu fa0, a1, rne
|
||||||
|
|
||||||
|
fmv.x.h a0, fa1
|
||||||
|
fmv.h.x fa0, a1
|
||||||
|
|
||||||
|
fcvt.s.h fa0, fa1
|
||||||
|
fcvt.d.h fa0, fa1
|
||||||
|
fcvt.q.h fa0, fa1
|
||||||
|
fcvt.h.s fa0, fa1
|
||||||
|
fcvt.h.s fa0, fa1, rne
|
||||||
|
fcvt.h.d fa0, fa1
|
||||||
|
fcvt.h.d fa0, fa1, rne
|
||||||
|
fcvt.h.q fa0, fa1
|
||||||
|
fcvt.h.q fa0, fa1, rne
|
||||||
|
fclass.h a0, fa1
|
||||||
|
|
||||||
|
feq.h a0, fa1, fa2
|
||||||
|
flt.h a0, fa1, fa2
|
||||||
|
fle.h a0, fa1, fa2
|
||||||
|
fgt.h a0, fa2, fa1
|
||||||
|
fge.h a0, fa2, fa1
|
||||||
6
gas/testsuite/gas/riscv/extended/march-imply-v.d
Normal file
6
gas/testsuite/gas/riscv/extended/march-imply-v.d
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
#as: -march=rv32iv -march-attr -misa-spec=20191213
|
||||||
|
#readelf: -A
|
||||||
|
#source: ../empty.s
|
||||||
|
Attribute Section: riscv
|
||||||
|
File Attributes
|
||||||
|
Tag_RISCV_arch: "rv32i2p1_f2p2_d2p2_v1p0_zicsr2p0_zve32f1p0_zve32x1p0_zve64d1p0_zve64f1p0_zve64x1p0_zvl128b1p0_zvl32b1p0_zvl64b1p0"
|
||||||
6
gas/testsuite/gas/riscv/extended/march-imply-zve32f.d
Normal file
6
gas/testsuite/gas/riscv/extended/march-imply-zve32f.d
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
#as: -march=rv32i_zve32f -march-attr -misa-spec=20191213
|
||||||
|
#readelf: -A
|
||||||
|
#source: ../empty.s
|
||||||
|
Attribute Section: riscv
|
||||||
|
File Attributes
|
||||||
|
Tag_RISCV_arch: "rv32i2p1_f2p2_zicsr2p0_zve32f1p0_zve32x1p0_zvl32b1p0"
|
||||||
6
gas/testsuite/gas/riscv/extended/march-imply-zve32x.d
Normal file
6
gas/testsuite/gas/riscv/extended/march-imply-zve32x.d
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
#as: -march=rv32i_zve32x -march-attr -misa-spec=20191213
|
||||||
|
#readelf: -A
|
||||||
|
#source: ../empty.s
|
||||||
|
Attribute Section: riscv
|
||||||
|
File Attributes
|
||||||
|
Tag_RISCV_arch: "rv32i2p1_zve32x1p0_zvl32b1p0"
|
||||||
6
gas/testsuite/gas/riscv/extended/march-imply-zve64d.d
Normal file
6
gas/testsuite/gas/riscv/extended/march-imply-zve64d.d
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
#as: -march=rv32i_zve64d -march-attr -misa-spec=20191213
|
||||||
|
#readelf: -A
|
||||||
|
#source: ../empty.s
|
||||||
|
Attribute Section: riscv
|
||||||
|
File Attributes
|
||||||
|
Tag_RISCV_arch: "rv32i2p1_f2p2_d2p2_zicsr2p0_zve32f1p0_zve32x1p0_zve64d1p0_zve64f1p0_zve64x1p0_zvl32b1p0_zvl64b1p0"
|
||||||
6
gas/testsuite/gas/riscv/extended/march-imply-zve64f.d
Normal file
6
gas/testsuite/gas/riscv/extended/march-imply-zve64f.d
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
#as: -march=rv32i_zve64f -march-attr -misa-spec=20191213
|
||||||
|
#readelf: -A
|
||||||
|
#source: ../empty.s
|
||||||
|
Attribute Section: riscv
|
||||||
|
File Attributes
|
||||||
|
Tag_RISCV_arch: "rv32i2p1_f2p2_zicsr2p0_zve32f1p0_zve32x1p0_zve64f1p0_zve64x1p0_zvl32b1p0_zvl64b1p0"
|
||||||
6
gas/testsuite/gas/riscv/extended/march-imply-zve64x.d
Normal file
6
gas/testsuite/gas/riscv/extended/march-imply-zve64x.d
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
#as: -march=rv32i_zve64x -march-attr -misa-spec=20191213
|
||||||
|
#readelf: -A
|
||||||
|
#source: ../empty.s
|
||||||
|
Attribute Section: riscv
|
||||||
|
File Attributes
|
||||||
|
Tag_RISCV_arch: "rv32i2p1_zve32x1p0_zve64x1p0_zvl32b1p0_zvl64b1p0"
|
||||||
6
gas/testsuite/gas/riscv/extended/march-imply-zvl1024b.d
Normal file
6
gas/testsuite/gas/riscv/extended/march-imply-zvl1024b.d
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
#as: -march=rv32i_zve32x_zvl1024b -march-attr -misa-spec=20191213
|
||||||
|
#readelf: -A
|
||||||
|
#source: ../empty.s
|
||||||
|
Attribute Section: riscv
|
||||||
|
File Attributes
|
||||||
|
Tag_RISCV_arch: "rv32i2p1_zve32x1p0_zvl1024b1p0_zvl128b1p0_zvl256b1p0_zvl32b1p0_zvl512b1p0_zvl64b1p0"
|
||||||
6
gas/testsuite/gas/riscv/extended/march-imply-zvl128b.d
Normal file
6
gas/testsuite/gas/riscv/extended/march-imply-zvl128b.d
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
#as: -march=rv32i_zve32x_zvl128b -march-attr -misa-spec=20191213
|
||||||
|
#readelf: -A
|
||||||
|
#source: ../empty.s
|
||||||
|
Attribute Section: riscv
|
||||||
|
File Attributes
|
||||||
|
Tag_RISCV_arch: "rv32i2p1_zve32x1p0_zvl128b1p0_zvl32b1p0_zvl64b1p0"
|
||||||
6
gas/testsuite/gas/riscv/extended/march-imply-zvl16384b.d
Normal file
6
gas/testsuite/gas/riscv/extended/march-imply-zvl16384b.d
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
#as: -march=rv32i_zve32x_zvl16384b -march-attr -misa-spec=20191213
|
||||||
|
#readelf: -A
|
||||||
|
#source: ../empty.s
|
||||||
|
Attribute Section: riscv
|
||||||
|
File Attributes
|
||||||
|
Tag_RISCV_arch: "rv32i2p1_zve32x1p0_zvl1024b1p0_zvl128b1p0_zvl16384b1p0_zvl2048b1p0_zvl256b1p0_zvl32b1p0_zvl4096b1p0_zvl512b1p0_zvl64b1p0_zvl8192b1p0"
|
||||||
6
gas/testsuite/gas/riscv/extended/march-imply-zvl2048b.d
Normal file
6
gas/testsuite/gas/riscv/extended/march-imply-zvl2048b.d
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
#as: -march=rv32i_zve32x_zvl2048b -march-attr -misa-spec=20191213
|
||||||
|
#readelf: -A
|
||||||
|
#source: ../empty.s
|
||||||
|
Attribute Section: riscv
|
||||||
|
File Attributes
|
||||||
|
Tag_RISCV_arch: "rv32i2p1_zve32x1p0_zvl1024b1p0_zvl128b1p0_zvl2048b1p0_zvl256b1p0_zvl32b1p0_zvl512b1p0_zvl64b1p0"
|
||||||
6
gas/testsuite/gas/riscv/extended/march-imply-zvl256b.d
Normal file
6
gas/testsuite/gas/riscv/extended/march-imply-zvl256b.d
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
#as: -march=rv32i_zve32x_zvl256b -march-attr -misa-spec=20191213
|
||||||
|
#readelf: -A
|
||||||
|
#source: ../empty.s
|
||||||
|
Attribute Section: riscv
|
||||||
|
File Attributes
|
||||||
|
Tag_RISCV_arch: "rv32i2p1_zve32x1p0_zvl128b1p0_zvl256b1p0_zvl32b1p0_zvl64b1p0"
|
||||||
6
gas/testsuite/gas/riscv/extended/march-imply-zvl32768b.d
Normal file
6
gas/testsuite/gas/riscv/extended/march-imply-zvl32768b.d
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
#as: -march=rv32i_zve32x_zvl32768b -march-attr -misa-spec=20191213
|
||||||
|
#readelf: -A
|
||||||
|
#source: ../empty.s
|
||||||
|
Attribute Section: riscv
|
||||||
|
File Attributes
|
||||||
|
Tag_RISCV_arch: "rv32i2p1_zve32x1p0_zvl1024b1p0_zvl128b1p0_zvl16384b1p0_zvl2048b1p0_zvl256b1p0_zvl32768b1p0_zvl32b1p0_zvl4096b1p0_zvl512b1p0_zvl64b1p0_zvl8192b1p0"
|
||||||
6
gas/testsuite/gas/riscv/extended/march-imply-zvl4096b.d
Normal file
6
gas/testsuite/gas/riscv/extended/march-imply-zvl4096b.d
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
#as: -march=rv32i_zve32x_zvl4096b -march-attr -misa-spec=20191213
|
||||||
|
#readelf: -A
|
||||||
|
#source: ../empty.s
|
||||||
|
Attribute Section: riscv
|
||||||
|
File Attributes
|
||||||
|
Tag_RISCV_arch: "rv32i2p1_zve32x1p0_zvl1024b1p0_zvl128b1p0_zvl2048b1p0_zvl256b1p0_zvl32b1p0_zvl4096b1p0_zvl512b1p0_zvl64b1p0"
|
||||||
6
gas/testsuite/gas/riscv/extended/march-imply-zvl512b.d
Normal file
6
gas/testsuite/gas/riscv/extended/march-imply-zvl512b.d
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
#as: -march=rv32i_zve32x_zvl512b -march-attr -misa-spec=20191213
|
||||||
|
#readelf: -A
|
||||||
|
#source: ../empty.s
|
||||||
|
Attribute Section: riscv
|
||||||
|
File Attributes
|
||||||
|
Tag_RISCV_arch: "rv32i2p1_zve32x1p0_zvl128b1p0_zvl256b1p0_zvl32b1p0_zvl512b1p0_zvl64b1p0"
|
||||||
6
gas/testsuite/gas/riscv/extended/march-imply-zvl64b.d
Normal file
6
gas/testsuite/gas/riscv/extended/march-imply-zvl64b.d
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
#as: -march=rv32i_zve32x_zvl64b -march-attr -misa-spec=20191213
|
||||||
|
#readelf: -A
|
||||||
|
#source: ../empty.s
|
||||||
|
Attribute Section: riscv
|
||||||
|
File Attributes
|
||||||
|
Tag_RISCV_arch: "rv32i2p1_zve32x1p0_zvl32b1p0_zvl64b1p0"
|
||||||
6
gas/testsuite/gas/riscv/extended/march-imply-zvl65536b.d
Normal file
6
gas/testsuite/gas/riscv/extended/march-imply-zvl65536b.d
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
#as: -march=rv32i_zve32x_zvl65536b -march-attr -misa-spec=20191213
|
||||||
|
#readelf: -A
|
||||||
|
#source: ../empty.s
|
||||||
|
Attribute Section: riscv
|
||||||
|
File Attributes
|
||||||
|
Tag_RISCV_arch: "rv32i2p1_zve32x1p0_zvl1024b1p0_zvl128b1p0_zvl16384b1p0_zvl2048b1p0_zvl256b1p0_zvl32768b1p0_zvl32b1p0_zvl4096b1p0_zvl512b1p0_zvl64b1p0_zvl65536b1p0_zvl8192b1p0"
|
||||||
6
gas/testsuite/gas/riscv/extended/march-imply-zvl8192b.d
Normal file
6
gas/testsuite/gas/riscv/extended/march-imply-zvl8192b.d
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
#as: -march=rv32i_zve32x_zvl8192b -march-attr -misa-spec=20191213
|
||||||
|
#readelf: -A
|
||||||
|
#source: ../empty.s
|
||||||
|
Attribute Section: riscv
|
||||||
|
File Attributes
|
||||||
|
Tag_RISCV_arch: "rv32i2p1_zve32x1p0_zvl1024b1p0_zvl128b1p0_zvl2048b1p0_zvl256b1p0_zvl32b1p0_zvl4096b1p0_zvl512b1p0_zvl64b1p0_zvl8192b1p0"
|
||||||
12
gas/testsuite/gas/riscv/extended/sifive-insns.d
Normal file
12
gas/testsuite/gas/riscv/extended/sifive-insns.d
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
#as: -march=rv32i_xsfcdiscarddlone_xsfcflushdlone_xsfcflushilone
|
||||||
|
#objdump: -dr
|
||||||
|
|
||||||
|
.*:[ ]+file format .*
|
||||||
|
|
||||||
|
|
||||||
|
Disassembly of section .text:
|
||||||
|
|
||||||
|
0+000 <target>:
|
||||||
|
[ ]+0:[ ]+fc050073[ ]+cflush.d.l1[ ]+a0
|
||||||
|
[ ]+4:[ ]+fc250073[ ]+cdiscard.d.l1[ ]+a0
|
||||||
|
[ ]+8:[ ]+fc100073[ ]+cflush.i.l1
|
||||||
4
gas/testsuite/gas/riscv/extended/sifive-insns.s
Normal file
4
gas/testsuite/gas/riscv/extended/sifive-insns.s
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
target:
|
||||||
|
cflush.d.l1 x10
|
||||||
|
cdiscard.d.l1 x10
|
||||||
|
cflush.i.l1
|
||||||
15
gas/testsuite/gas/riscv/extended/svinval.d
Normal file
15
gas/testsuite/gas/riscv/extended/svinval.d
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
#as: -march=rv32i_svinval
|
||||||
|
#source: svinval.s
|
||||||
|
#objdump: -d
|
||||||
|
|
||||||
|
.*:[ ]+file format .*
|
||||||
|
|
||||||
|
|
||||||
|
Disassembly of section .text:
|
||||||
|
|
||||||
|
0+000 <.text>:
|
||||||
|
[ ]+0:[ ]+16b50073[ ]+sinval.vma[ ]+a0,a1
|
||||||
|
[ ]+4:[ ]+18000073[ ]+sfence.w.inval
|
||||||
|
[ ]+8:[ ]+18100073[ ]+sfence.inval.ir
|
||||||
|
[ ]+c:[ ]+36b50073[ ]+hinval.vvma[ ]+a0,a1
|
||||||
|
[ ]+10:[ ]+76b50073[ ]+hinval.gvma[ ]+a0,a1
|
||||||
5
gas/testsuite/gas/riscv/extended/svinval.s
Normal file
5
gas/testsuite/gas/riscv/extended/svinval.s
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
sinval.vma a0, a1
|
||||||
|
sfence.w.inval
|
||||||
|
sfence.inval.ir
|
||||||
|
hinval.vvma a0, a1
|
||||||
|
hinval.gvma a0, a1
|
||||||
107
gas/testsuite/gas/riscv/extended/thead-csr-list.d
Normal file
107
gas/testsuite/gas/riscv/extended/thead-csr-list.d
Normal file
@@ -0,0 +1,107 @@
|
|||||||
|
#as: -march=rv64gcxtheadc
|
||||||
|
#objdump: -dr
|
||||||
|
|
||||||
|
.*:[ ]+file format .*
|
||||||
|
|
||||||
|
|
||||||
|
Disassembly of section .text:
|
||||||
|
|
||||||
|
0000000000000000 <.text>:
|
||||||
|
0: 7c002573 csrr a0,mxstatus
|
||||||
|
4: 7c102573 csrr a0,mhcr
|
||||||
|
8: 7c202573 csrr a0,mcor
|
||||||
|
c: 7c302573 csrr a0,mccr2
|
||||||
|
10: 7c402573 csrr a0,mcer2
|
||||||
|
14: 7c502573 csrr a0,mhint
|
||||||
|
18: 7c602573 csrr a0,mrmr
|
||||||
|
1c: 7c702573 csrr a0,mrvbr
|
||||||
|
20: 7c802573 csrr a0,mcer
|
||||||
|
24: 7c902573 csrr a0,mcounterwen
|
||||||
|
28: 7ca02573 csrr a0,mcounterinten
|
||||||
|
2c: 7cb02573 csrr a0,mcounterof
|
||||||
|
30: 7cc02573 csrr a0,mhint2
|
||||||
|
34: 7cd02573 csrr a0,mhint3
|
||||||
|
38: 7e002573 csrr a0,mraddr
|
||||||
|
3c: 7e102573 csrr a0,mexstatus
|
||||||
|
40: 7e202573 csrr a0,mnmicause
|
||||||
|
44: 7e302573 csrr a0,mnmipc
|
||||||
|
48: 7f002573 csrr a0,mhpmcr
|
||||||
|
4c: 7f102573 csrr a0,mhpmsr
|
||||||
|
50: 7f202573 csrr a0,mhpmer
|
||||||
|
54: 7f302573 csrr a0,msmpr
|
||||||
|
58: 7f402573 csrr a0,mteecfg
|
||||||
|
5c: 7d102573 csrr a0,usp
|
||||||
|
60: 7d202573 csrr a0,mcins
|
||||||
|
64: 7d302573 csrr a0,mcindex
|
||||||
|
68: 7d402573 csrr a0,mcdata0
|
||||||
|
6c: 7d502573 csrr a0,mcdata1
|
||||||
|
70: 7d602573 csrr a0,meicr
|
||||||
|
74: 7d702573 csrr a0,meicr2
|
||||||
|
78: be002573 csrr a0,mebr
|
||||||
|
7c: be102573 csrr a0,nt_mstatus
|
||||||
|
80: be302573 csrr a0,nt_mtvec
|
||||||
|
84: be202573 csrr a0,nt_mie
|
||||||
|
88: be402573 csrr a0,nt_mtvt
|
||||||
|
8c: be502573 csrr a0,nt_mepc
|
||||||
|
90: be602573 csrr a0,nt_mcause
|
||||||
|
94: be702573 csrr a0,nt_mip
|
||||||
|
98: be802573 csrr a0,nt_mintstate
|
||||||
|
9c: be902573 csrr a0,nt_mxstatus
|
||||||
|
a0: bea02573 csrr a0,nt_mebr
|
||||||
|
a4: beb02573 csrr a0,nt_msp
|
||||||
|
a8: bec02573 csrr a0,t_usp
|
||||||
|
ac: bed02573 csrr a0,t_mdcr
|
||||||
|
b0: bee02573 csrr a0,t_mpcr
|
||||||
|
b4: bef02573 csrr a0,pmpteecfg
|
||||||
|
b8: fc002573 csrr a0,mcpuid
|
||||||
|
bc: fc102573 csrr a0,mapbaddr
|
||||||
|
c0: fc202573 csrr a0,mwmsr
|
||||||
|
c4: 80002573 csrr a0,fxcr
|
||||||
|
c8: 9c002573 csrr a0,smir
|
||||||
|
cc: 9c102573 csrr a0,smel
|
||||||
|
d0: 9c202573 csrr a0,smeh
|
||||||
|
d4: 9c302573 csrr a0,smcir
|
||||||
|
d8: 5c002573 csrr a0,sxstatus
|
||||||
|
dc: 5c102573 csrr a0,shcr
|
||||||
|
e0: 5c202573 csrr a0,scer2
|
||||||
|
e4: 5c302573 csrr a0,scer
|
||||||
|
e8: 5c402573 csrr a0,scounterinten
|
||||||
|
ec: 5c502573 csrr a0,scounterof
|
||||||
|
f0: 5c602573 csrr a0,shint
|
||||||
|
f4: 5c702573 csrr a0,shint2
|
||||||
|
f8: 5c802573 csrr a0,shpminhibit
|
||||||
|
fc: 5c902573 csrr a0,shpmcr
|
||||||
|
100: 5ca02573 csrr a0,shpmsr
|
||||||
|
104: 5cb02573 csrr a0,shpmer
|
||||||
|
108: 5e002573 csrr a0,scycle
|
||||||
|
10c: 5e102573 csrr a0,shpmcounter1
|
||||||
|
110: 5e202573 csrr a0,shpmcounter2
|
||||||
|
114: 5e302573 csrr a0,shpmcounter3
|
||||||
|
118: 5e402573 csrr a0,shpmcounter4
|
||||||
|
11c: 5e502573 csrr a0,shpmcounter5
|
||||||
|
120: 5e602573 csrr a0,shpmcounter6
|
||||||
|
124: 5e702573 csrr a0,shpmcounter7
|
||||||
|
128: 5e802573 csrr a0,shpmcounter8
|
||||||
|
12c: 5e902573 csrr a0,shpmcounter9
|
||||||
|
130: 5ea02573 csrr a0,shpmcounter10
|
||||||
|
134: 5eb02573 csrr a0,shpmcounter11
|
||||||
|
138: 5ec02573 csrr a0,shpmcounter12
|
||||||
|
13c: 5ed02573 csrr a0,shpmcounter13
|
||||||
|
140: 5ee02573 csrr a0,shpmcounter14
|
||||||
|
144: 5ef02573 csrr a0,shpmcounter15
|
||||||
|
148: 5f002573 csrr a0,shpmcounter16
|
||||||
|
14c: 5f102573 csrr a0,shpmcounter17
|
||||||
|
150: 5f202573 csrr a0,shpmcounter18
|
||||||
|
154: 5f302573 csrr a0,shpmcounter19
|
||||||
|
158: 5f402573 csrr a0,shpmcounter20
|
||||||
|
15c: 5f502573 csrr a0,shpmcounter21
|
||||||
|
160: 5f602573 csrr a0,shpmcounter22
|
||||||
|
164: 5f702573 csrr a0,shpmcounter23
|
||||||
|
168: 5f802573 csrr a0,shpmcounter24
|
||||||
|
16c: 5f902573 csrr a0,shpmcounter25
|
||||||
|
170: 5fa02573 csrr a0,shpmcounter26
|
||||||
|
174: 5fb02573 csrr a0,shpmcounter27
|
||||||
|
178: 5fc02573 csrr a0,shpmcounter28
|
||||||
|
17c: 5fd02573 csrr a0,shpmcounter29
|
||||||
|
180: 5fe02573 csrr a0,shpmcounter30
|
||||||
|
184: 5ff02573 csrr a0,shpmcounter31
|
||||||
98
gas/testsuite/gas/riscv/extended/thead-csr-list.s
Normal file
98
gas/testsuite/gas/riscv/extended/thead-csr-list.s
Normal file
@@ -0,0 +1,98 @@
|
|||||||
|
csrr a0, mxstatus
|
||||||
|
csrr a0, mhcr
|
||||||
|
csrr a0, mcor
|
||||||
|
csrr a0, mccr2
|
||||||
|
csrr a0, mcer2
|
||||||
|
csrr a0, mhint
|
||||||
|
csrr a0, mrmr
|
||||||
|
csrr a0, mrvbr
|
||||||
|
csrr a0, mcer
|
||||||
|
csrr a0, mcounterwen
|
||||||
|
csrr a0, mcounterinten
|
||||||
|
csrr a0, mcounterof
|
||||||
|
csrr a0, mhint2
|
||||||
|
csrr a0, mhint3
|
||||||
|
csrr a0, mraddr
|
||||||
|
csrr a0, mexstatus
|
||||||
|
csrr a0, mnmicause
|
||||||
|
csrr a0, mnmipc
|
||||||
|
csrr a0, mhpmcr
|
||||||
|
csrr a0, mhpmsr
|
||||||
|
csrr a0, mhpmer
|
||||||
|
csrr a0, msmpr
|
||||||
|
csrr a0, mteecfg
|
||||||
|
csrr a0, usp
|
||||||
|
csrr a0, mcins
|
||||||
|
csrr a0, mcindex
|
||||||
|
csrr a0, mcdata0
|
||||||
|
csrr a0, mcdata1
|
||||||
|
csrr a0, meicr
|
||||||
|
csrr a0, meicr2
|
||||||
|
csrr a0, mebr
|
||||||
|
csrr a0, nt_mstatus
|
||||||
|
csrr a0, nt_mtvec
|
||||||
|
csrr a0, nt_mie
|
||||||
|
csrr a0, nt_mtvt
|
||||||
|
csrr a0, nt_mepc
|
||||||
|
csrr a0, nt_mcause
|
||||||
|
csrr a0, nt_mip
|
||||||
|
csrr a0, nt_mintstate
|
||||||
|
csrr a0, nt_mxstatus
|
||||||
|
csrr a0, nt_mebr
|
||||||
|
csrr a0, nt_msp
|
||||||
|
csrr a0, t_usp
|
||||||
|
csrr a0, t_mdcr
|
||||||
|
csrr a0, t_mpcr
|
||||||
|
csrr a0, pmpteecfg
|
||||||
|
csrr a0, mcpuid
|
||||||
|
csrr a0, mapbaddr
|
||||||
|
csrr a0, mwmsr
|
||||||
|
csrr a0, fxcr
|
||||||
|
csrr a0, smir
|
||||||
|
csrr a0, smel
|
||||||
|
csrr a0, smeh
|
||||||
|
csrr a0, smcir
|
||||||
|
csrr a0, sxstatus
|
||||||
|
csrr a0, shcr
|
||||||
|
csrr a0, scer2
|
||||||
|
csrr a0, scer
|
||||||
|
csrr a0, scounterinten
|
||||||
|
csrr a0, scounterof
|
||||||
|
csrr a0, shint
|
||||||
|
csrr a0, shint2
|
||||||
|
csrr a0, shpminhibit
|
||||||
|
csrr a0, shpmcr
|
||||||
|
csrr a0, shpmsr
|
||||||
|
csrr a0, shpmer
|
||||||
|
csrr a0, scycle
|
||||||
|
csrr a0, shpmcounter1
|
||||||
|
csrr a0, shpmcounter2
|
||||||
|
csrr a0, shpmcounter3
|
||||||
|
csrr a0, shpmcounter4
|
||||||
|
csrr a0, shpmcounter5
|
||||||
|
csrr a0, shpmcounter6
|
||||||
|
csrr a0, shpmcounter7
|
||||||
|
csrr a0, shpmcounter8
|
||||||
|
csrr a0, shpmcounter9
|
||||||
|
csrr a0, shpmcounter10
|
||||||
|
csrr a0, shpmcounter11
|
||||||
|
csrr a0, shpmcounter12
|
||||||
|
csrr a0, shpmcounter13
|
||||||
|
csrr a0, shpmcounter14
|
||||||
|
csrr a0, shpmcounter15
|
||||||
|
csrr a0, shpmcounter16
|
||||||
|
csrr a0, shpmcounter17
|
||||||
|
csrr a0, shpmcounter18
|
||||||
|
csrr a0, shpmcounter19
|
||||||
|
csrr a0, shpmcounter20
|
||||||
|
csrr a0, shpmcounter21
|
||||||
|
csrr a0, shpmcounter22
|
||||||
|
csrr a0, shpmcounter23
|
||||||
|
csrr a0, shpmcounter24
|
||||||
|
csrr a0, shpmcounter25
|
||||||
|
csrr a0, shpmcounter26
|
||||||
|
csrr a0, shpmcounter27
|
||||||
|
csrr a0, shpmcounter28
|
||||||
|
csrr a0, shpmcounter29
|
||||||
|
csrr a0, shpmcounter30
|
||||||
|
csrr a0, shpmcounter31
|
||||||
112
gas/testsuite/gas/riscv/extended/theadc-ext.d
Normal file
112
gas/testsuite/gas/riscv/extended/theadc-ext.d
Normal file
@@ -0,0 +1,112 @@
|
|||||||
|
#as: -march=rv64gcxtheadc
|
||||||
|
#objdump: -dr
|
||||||
|
|
||||||
|
.*:[ ]+file format .*
|
||||||
|
|
||||||
|
|
||||||
|
Disassembly of section .text:
|
||||||
|
|
||||||
|
0000000000000000 <.text>:
|
||||||
|
0: cff01073 csrw 0xcff,zero
|
||||||
|
4: 0010000b dcache.call
|
||||||
|
8: 0030000b dcache.ciall
|
||||||
|
c: 02b5000b dcache.cipa a0
|
||||||
|
10: 0235000b dcache.cisw a0
|
||||||
|
14: 0275000b dcache.civa a0
|
||||||
|
18: 0295000b dcache.cpa a0
|
||||||
|
1c: 0285000b dcache.cpal1 a0
|
||||||
|
20: 0255000b dcache.cva a0
|
||||||
|
24: 0245000b dcache.cval1 a0
|
||||||
|
28: 02a5000b dcache.ipa a0
|
||||||
|
2c: 0225000b dcache.isw a0
|
||||||
|
30: 0265000b dcache.iva a0
|
||||||
|
34: 0020000b dcache.iall
|
||||||
|
38: 0215000b dcache.csw a0
|
||||||
|
3c: 0100000b icache.iall
|
||||||
|
40: 0110000b icache.ialls
|
||||||
|
44: 0305000b icache.iva a0
|
||||||
|
48: 0385000b icache.ipa a0
|
||||||
|
4c: 0160000b l2cache.iall
|
||||||
|
50: 0150000b l2cache.call
|
||||||
|
54: 0170000b l2cache.ciall
|
||||||
|
58: 04b5000b sfence.vmas a0,a1
|
||||||
|
5c: 0180000b sync
|
||||||
|
60: 01a0000b sync.i
|
||||||
|
64: 0190000b sync.s
|
||||||
|
68: 01b0000b sync.is
|
||||||
|
6c: 02c5950b addsl a0,a1,a2,1
|
||||||
|
70: 20c5950b mula a0,a1,a2
|
||||||
|
74: 22c5950b muls a0,a1,a2
|
||||||
|
78: 24c5950b mulaw a0,a1,a2
|
||||||
|
7c: 26c5950b mulsw a0,a1,a2
|
||||||
|
80: 28c5950b mulah a0,a1,a2
|
||||||
|
84: 2ac5950b mulsh a0,a1,a2
|
||||||
|
88: 1105950b srri a0,a1,16
|
||||||
|
8c: 1505950b srriw a0,a1,16
|
||||||
|
90: 40c5950b mveqz a0,a1,a2
|
||||||
|
94: 42c5950b mvnez a0,a1,a2
|
||||||
|
98: 8905950b tst a0,a1,16
|
||||||
|
9c: 8005950b tstnbz a0,a1
|
||||||
|
a0: 4105a50b ext a0,a1,16,16
|
||||||
|
a4: 4105b50b extu a0,a1,16,16
|
||||||
|
a8: 8605950b ff1 a0,a1
|
||||||
|
ac: 8405950b ff0 a0,a1
|
||||||
|
b0: 8205950b rev a0,a1
|
||||||
|
b4: 9005950b revw a0,a1
|
||||||
|
b8: 62b5600b flrd ft0,a0,a1,1
|
||||||
|
bc: 42b5600b flrw ft0,a0,a1,1
|
||||||
|
c0: 72b5600b flurd ft0,a0,a1,1
|
||||||
|
c4: 52b5600b flurw ft0,a0,a1,1
|
||||||
|
c8: 02c5c50b lrb a0,a1,a2,1
|
||||||
|
cc: 22c5c50b lrh a0,a1,a2,1
|
||||||
|
d0: 42c5c50b lrw a0,a1,a2,1
|
||||||
|
d4: 62c5c50b lrd a0,a1,a2,1
|
||||||
|
d8: 82c5c50b lrbu a0,a1,a2,1
|
||||||
|
dc: a2c5c50b lrhu a0,a1,a2,1
|
||||||
|
e0: c2c5c50b lrwu a0,a1,a2,1
|
||||||
|
e4: 12c5c50b lurb a0,a1,a2,1
|
||||||
|
e8: 32c5c50b lurh a0,a1,a2,1
|
||||||
|
ec: 52c5c50b lurw a0,a1,a2,1
|
||||||
|
f0: 72c5c50b lurd a0,a1,a2,1
|
||||||
|
f4: 92c5c50b lurbu a0,a1,a2,1
|
||||||
|
f8: b2c5c50b lurhu a0,a1,a2,1
|
||||||
|
fc: d2c5c50b lurwu a0,a1,a2,1
|
||||||
|
100: 1af5c50b lbia a0,\(a1\),15,1
|
||||||
|
104: 0af5c50b lbib a0,\(a1\),15,1
|
||||||
|
108: 3af5c50b lhia a0,\(a1\),15,1
|
||||||
|
10c: 2af5c50b lhib a0,\(a1\),15,1
|
||||||
|
110: 5af5c50b lwia a0,\(a1\),15,1
|
||||||
|
114: 4af5c50b lwib a0,\(a1\),15,1
|
||||||
|
118: 7af5c50b ldia a0,\(a1\),15,1
|
||||||
|
11c: 6af5c50b ldib a0,\(a1\),15,1
|
||||||
|
120: 9af5c50b lbuia a0,\(a1\),15,1
|
||||||
|
124: 8af5c50b lbuib a0,\(a1\),15,1
|
||||||
|
128: baf5c50b lhuia a0,\(a1\),15,1
|
||||||
|
12c: aaf5c50b lhuib a0,\(a1\),15,1
|
||||||
|
130: daf5c50b lwuia a0,\(a1\),15,1
|
||||||
|
134: caf5c50b lwuib a0,\(a1\),15,1
|
||||||
|
138: fab6450b ldd a0,a1,\(a2\),1
|
||||||
|
13c: e2b6450b lwd a0,a1,\(a2\),1
|
||||||
|
140: f2b6450b lwud a0,a1,\(a2\),1
|
||||||
|
144: 62b5700b fsrd ft0,a0,a1,1
|
||||||
|
148: 42b5700b fsrw ft0,a0,a1,1
|
||||||
|
14c: 72b5700b fsurd ft0,a0,a1,1
|
||||||
|
150: 52b5700b fsurw ft0,a0,a1,1
|
||||||
|
154: 02c5d50b srb a0,a1,a2,1
|
||||||
|
158: 22c5d50b srh a0,a1,a2,1
|
||||||
|
15c: 42c5d50b srw a0,a1,a2,1
|
||||||
|
160: 62c5d50b srd a0,a1,a2,1
|
||||||
|
164: 12c5d50b surb a0,a1,a2,1
|
||||||
|
168: 32c5d50b surh a0,a1,a2,1
|
||||||
|
16c: 52c5d50b surw a0,a1,a2,1
|
||||||
|
170: 72c5d50b surd a0,a1,a2,1
|
||||||
|
174: 1af5d50b sbia a0,\(a1\),15,1
|
||||||
|
178: 0af5d50b sbib a0,\(a1\),15,1
|
||||||
|
17c: 3af5d50b shia a0,\(a1\),15,1
|
||||||
|
180: 2af5d50b shib a0,\(a1\),15,1
|
||||||
|
184: 5ac5d50b swia a0,\(a1\),12,1
|
||||||
|
188: 4af5d50b swib a0,\(a1\),15,1
|
||||||
|
18c: 7af5d50b sdia a0,\(a1\),15,1
|
||||||
|
190: 6af5d50b sdib a0,\(a1\),15,1
|
||||||
|
194: fab6550b sdd a0,a1,\(a2\),1
|
||||||
|
198: e2b6550b swd a0,a1,\(a2\),1
|
||||||
115
gas/testsuite/gas/riscv/extended/theadc-ext.s
Normal file
115
gas/testsuite/gas/riscv/extended/theadc-ext.s
Normal file
@@ -0,0 +1,115 @@
|
|||||||
|
.text
|
||||||
|
|
||||||
|
wsc
|
||||||
|
|
||||||
|
# cache ext
|
||||||
|
dcache.call
|
||||||
|
dcache.ciall
|
||||||
|
dcache.cipa a0
|
||||||
|
dcache.cisw a0
|
||||||
|
dcache.civa a0
|
||||||
|
dcache.cpa a0
|
||||||
|
dcache.cpal1 a0
|
||||||
|
dcache.cva a0
|
||||||
|
dcache.cval1 a0
|
||||||
|
dcache.ipa a0
|
||||||
|
dcache.isw a0
|
||||||
|
dcache.iva a0
|
||||||
|
dcache.iall
|
||||||
|
dcache.csw a0
|
||||||
|
icache.iall
|
||||||
|
icache.ialls
|
||||||
|
icache.iva a0
|
||||||
|
icache.ipa a0
|
||||||
|
l2cache.iall
|
||||||
|
l2cache.call
|
||||||
|
l2cache.ciall
|
||||||
|
|
||||||
|
# sync ext
|
||||||
|
sfence.vmas a0, a1
|
||||||
|
sync
|
||||||
|
sync.i
|
||||||
|
sync.s
|
||||||
|
sync.is
|
||||||
|
|
||||||
|
# calc ext
|
||||||
|
addsl a0, a1, a2, 1
|
||||||
|
mula a0, a1, a2
|
||||||
|
muls a0, a1, a2
|
||||||
|
mulaw a0, a1, a2
|
||||||
|
mulsw a0, a1, a2
|
||||||
|
mulah a0, a1, a2
|
||||||
|
mulsh a0, a1, a2
|
||||||
|
srri a0, a1, 16
|
||||||
|
srriw a0, a1, 16
|
||||||
|
mveqz a0, a1, a2
|
||||||
|
mvnez a0, a1, a2
|
||||||
|
|
||||||
|
# bit ext
|
||||||
|
tst a0, a1, 16
|
||||||
|
tstnbz a0, a1
|
||||||
|
ext a0, a1, 16, 16
|
||||||
|
extu a0, a1, 16, 16
|
||||||
|
ff1 a0, a1
|
||||||
|
ff0 a0, a1
|
||||||
|
rev a0, a1
|
||||||
|
revw a0, a1
|
||||||
|
|
||||||
|
# load/store ext
|
||||||
|
flrd f0, a0, a1, 1
|
||||||
|
flrw f0, a0, a1, 1
|
||||||
|
flurd f0, a0, a1, 1
|
||||||
|
flurw f0, a0, a1, 1
|
||||||
|
lrb a0, a1, a2, 1
|
||||||
|
lrh a0, a1, a2, 1
|
||||||
|
lrw a0, a1, a2, 1
|
||||||
|
lrd a0, a1, a2, 1
|
||||||
|
lrbu a0, a1, a2, 1
|
||||||
|
lrhu a0, a1, a2, 1
|
||||||
|
lrwu a0, a1, a2, 1
|
||||||
|
lurb a0, a1, a2, 1
|
||||||
|
lurh a0, a1, a2, 1
|
||||||
|
lurw a0, a1, a2, 1
|
||||||
|
lurd a0, a1, a2, 1
|
||||||
|
lurbu a0, a1, a2, 1
|
||||||
|
lurhu a0, a1, a2, 1
|
||||||
|
lurwu a0, a1, a2, 1
|
||||||
|
lbia a0, (a1), 15, 1
|
||||||
|
lbib a0, (a1), 15, 1
|
||||||
|
lhia a0, (a1), 15, 1
|
||||||
|
lhib a0, (a1), 15, 1
|
||||||
|
lwia a0, (a1), 15, 1
|
||||||
|
lwib a0, (a1), 15, 1
|
||||||
|
ldia a0, (a1), 15, 1
|
||||||
|
ldib a0, (a1), 15, 1
|
||||||
|
lbuia a0, (a1), 15, 1
|
||||||
|
lbuib a0, (a1), 15, 1
|
||||||
|
lhuia a0, (a1), 15, 1
|
||||||
|
lhuib a0, (a1), 15, 1
|
||||||
|
lwuia a0, (a1), 15, 1
|
||||||
|
lwuib a0, (a1), 15, 1
|
||||||
|
ldd a0, a1, (a2), 1
|
||||||
|
lwd a0, a1, (a2), 1
|
||||||
|
lwud a0, a1, (a2), 1
|
||||||
|
fsrd f0, a0, a1, 1
|
||||||
|
fsrw f0, a0, a1, 1
|
||||||
|
fsurd f0, a0, a1, 1
|
||||||
|
fsurw f0, a0, a1, 1
|
||||||
|
srb a0, a1, a2, 1
|
||||||
|
srh a0, a1, a2, 1
|
||||||
|
srw a0, a1, a2, 1
|
||||||
|
srd a0, a1, a2, 1
|
||||||
|
surb a0, a1, a2, 1
|
||||||
|
surh a0, a1, a2, 1
|
||||||
|
surw a0, a1, a2, 1
|
||||||
|
surd a0, a1, a2, 1
|
||||||
|
sbia a0, (a1), 15, 1
|
||||||
|
sbib a0, (a1), 15, 1
|
||||||
|
shia a0, (a1), 15, 1
|
||||||
|
shib a0, (a1), 15, 1
|
||||||
|
swia a0, (a1), 12, 1
|
||||||
|
swib a0, (a1), 15, 1
|
||||||
|
sdia a0, (a1), 15, 1
|
||||||
|
sdib a0, (a1), 15, 1
|
||||||
|
sdd a0, a1, (a2), 1
|
||||||
|
swd a0, a1, (a2), 1
|
||||||
62
gas/testsuite/gas/riscv/extended/theade-ext.d
Normal file
62
gas/testsuite/gas/riscv/extended/theade-ext.d
Normal file
@@ -0,0 +1,62 @@
|
|||||||
|
#as: -march=rv32gcxtheade
|
||||||
|
#objdump: -dr
|
||||||
|
|
||||||
|
.*:[ ]+file format .*
|
||||||
|
|
||||||
|
|
||||||
|
Disassembly of section .text:
|
||||||
|
|
||||||
|
00000000 <.text>:
|
||||||
|
[ ]+[0-9a-f]+:\s+cff01073 csrw 0xcff,zero
|
||||||
|
[ ]+[0-9a-f]+:\s+02a5000b dcache.ipa a0
|
||||||
|
[ ]+[0-9a-f]+:\s+0295000b dcache.cpa a0
|
||||||
|
[ ]+[0-9a-f]+:\s+02b5000b dcache.cipa a0
|
||||||
|
[ ]+[0-9a-f]+:\s+0225000b dcache.isw a0
|
||||||
|
[ ]+[0-9a-f]+:\s+0215000b dcache.csw a0
|
||||||
|
[ ]+[0-9a-f]+:\s+0235000b dcache.cisw a0
|
||||||
|
[ ]+[0-9a-f]+:\s+0020000b dcache.iall
|
||||||
|
[ ]+[0-9a-f]+:\s+0010000b dcache.call
|
||||||
|
[ ]+[0-9a-f]+:\s+0030000b dcache.ciall
|
||||||
|
[ ]+[0-9a-f]+:\s+0100000b icache.iall
|
||||||
|
[ ]+[0-9a-f]+:\s+0385000b icache.ipa a0
|
||||||
|
[ ]+[0-9a-f]+:\s+0180000b sync
|
||||||
|
[ ]+[0-9a-f]+:\s+01a0000b sync.i
|
||||||
|
[ ]+[0-9a-f]+:\s+02c5950b addsl a0,a1,a2,1
|
||||||
|
[ ]+[0-9a-f]+:\s+1105950b srri a0,a1,16
|
||||||
|
[ ]+[0-9a-f]+:\s+20c5950b mula a0,a1,a2
|
||||||
|
[ ]+[0-9a-f]+:\s+28c5950b mulah a0,a1,a2
|
||||||
|
[ ]+[0-9a-f]+:\s+22c5950b muls a0,a1,a2
|
||||||
|
[ ]+[0-9a-f]+:\s+2ac5950b mulsh a0,a1,a2
|
||||||
|
[ ]+[0-9a-f]+:\s+40c5950b mveqz a0,a1,a2
|
||||||
|
[ ]+[0-9a-f]+:\s+42c5950b mvnez a0,a1,a2
|
||||||
|
[ ]+[0-9a-f]+:\s+4105a50b ext a0,a1,16,16
|
||||||
|
[ ]+[0-9a-f]+:\s+4105b50b extu a0,a1,16,16
|
||||||
|
[ ]+[0-9a-f]+:\s+8605950b ff1 a0,a1
|
||||||
|
[ ]+[0-9a-f]+:\s+8405950b ff0 a0,a1
|
||||||
|
[ ]+[0-9a-f]+:\s+8205950b rev a0,a1
|
||||||
|
[ ]+[0-9a-f]+:\s+8905950b tst a0,a1,16
|
||||||
|
[ ]+[0-9a-f]+:\s+8005950b tstnbz a0,a1
|
||||||
|
[ ]+[0-9a-f]+:\s+02c5c50b lrb a0,a1,a2,1
|
||||||
|
[ ]+[0-9a-f]+:\s+22c5c50b lrh a0,a1,a2,1
|
||||||
|
[ ]+[0-9a-f]+:\s+42c5c50b lrw a0,a1,a2,1
|
||||||
|
[ ]+[0-9a-f]+:\s+82c5c50b lrbu a0,a1,a2,1
|
||||||
|
[ ]+[0-9a-f]+:\s+a2c5c50b lrhu a0,a1,a2,1
|
||||||
|
[ ]+[0-9a-f]+:\s+1af5c50b lbia a0,\(a1\),15,1
|
||||||
|
[ ]+[0-9a-f]+:\s+0af5c50b lbib a0,\(a1\),15,1
|
||||||
|
[ ]+[0-9a-f]+:\s+3af5c50b lhia a0,\(a1\),15,1
|
||||||
|
[ ]+[0-9a-f]+:\s+2af5c50b lhib a0,\(a1\),15,1
|
||||||
|
[ ]+[0-9a-f]+:\s+5af5c50b lwia a0,\(a1\),15,1
|
||||||
|
[ ]+[0-9a-f]+:\s+4af5c50b lwib a0,\(a1\),15,1
|
||||||
|
[ ]+[0-9a-f]+:\s+02c5d50b srb a0,a1,a2,1
|
||||||
|
[ ]+[0-9a-f]+:\s+22c5d50b srh a0,a1,a2,1
|
||||||
|
[ ]+[0-9a-f]+:\s+42c5d50b srw a0,a1,a2,1
|
||||||
|
[ ]+[0-9a-f]+:\s+1af5d50b sbia a0,\(a1\),15,1
|
||||||
|
[ ]+[0-9a-f]+:\s+0af5d50b sbib a0,\(a1\),15,1
|
||||||
|
[ ]+[0-9a-f]+:\s+3af5d50b shia a0,\(a1\),15,1
|
||||||
|
[ ]+[0-9a-f]+:\s+2af5d50b shib a0,\(a1\),15,1
|
||||||
|
[ ]+[0-9a-f]+:\s+5ac5d50b swia a0,\(a1\),12,1
|
||||||
|
[ ]+[0-9a-f]+:\s+4af5d50b swib a0,\(a1\),15,1
|
||||||
|
[ ]+[0-9a-f]+:\s+c000150b fmv.x.hw a0,ft0
|
||||||
|
[ ]+[0-9a-f]+:\s+a005100b fmv.hw.x ft0,a0
|
||||||
|
[ ]+[0-9a-f]+:\s+0040000b ipush
|
||||||
|
[ ]+[0-9a-f]+:\s+0050000b ipop
|
||||||
66
gas/testsuite/gas/riscv/extended/theade-ext.s
Normal file
66
gas/testsuite/gas/riscv/extended/theade-ext.s
Normal file
@@ -0,0 +1,66 @@
|
|||||||
|
.text
|
||||||
|
|
||||||
|
wsc
|
||||||
|
|
||||||
|
# cache ext
|
||||||
|
dcache.ipa a0
|
||||||
|
dcache.cpa a0
|
||||||
|
dcache.cipa a0
|
||||||
|
dcache.isw a0
|
||||||
|
dcache.csw a0
|
||||||
|
dcache.cisw a0
|
||||||
|
dcache.iall
|
||||||
|
dcache.call
|
||||||
|
dcache.ciall
|
||||||
|
icache.iall
|
||||||
|
icache.ipa a0
|
||||||
|
|
||||||
|
# sync ext
|
||||||
|
sync
|
||||||
|
sync.i
|
||||||
|
|
||||||
|
# calc ext
|
||||||
|
addsl a0, a1, a2, 1
|
||||||
|
srri a0, a1, 16
|
||||||
|
mula a0, a1, a2
|
||||||
|
mulah a0, a1, a2
|
||||||
|
muls a0, a1, a2
|
||||||
|
mulsh a0, a1, a2
|
||||||
|
mveqz a0, a1, a2
|
||||||
|
mvnez a0, a1, a2
|
||||||
|
|
||||||
|
# bit ext
|
||||||
|
ext a0, a1, 16, 16
|
||||||
|
extu a0, a1, 16, 16
|
||||||
|
ff1 a0, a1
|
||||||
|
ff0 a0, a1
|
||||||
|
rev a0, a1
|
||||||
|
tst a0, a1, 16
|
||||||
|
tstnbz a0, a1
|
||||||
|
|
||||||
|
# load/store ext
|
||||||
|
lrb a0, a1, a2, 1
|
||||||
|
lrh a0, a1, a2, 1
|
||||||
|
lrw a0, a1, a2, 1
|
||||||
|
lrbu a0, a1, a2, 1
|
||||||
|
lrhu a0, a1, a2, 1
|
||||||
|
lbia a0, (a1), 15, 1
|
||||||
|
lbib a0, (a1), 15, 1
|
||||||
|
lhia a0, (a1), 15, 1
|
||||||
|
lhib a0, (a1), 15, 1
|
||||||
|
lwia a0, (a1), 15, 1
|
||||||
|
lwib a0, (a1), 15, 1
|
||||||
|
srb a0, a1, a2, 1
|
||||||
|
srh a0, a1, a2, 1
|
||||||
|
srw a0, a1, a2, 1
|
||||||
|
sbia a0, (a1), 15, 1
|
||||||
|
sbib a0, (a1), 15, 1
|
||||||
|
shia a0, (a1), 15, 1
|
||||||
|
shib a0, (a1), 15, 1
|
||||||
|
swia a0, (a1), 12, 1
|
||||||
|
swib a0, (a1), 15, 1
|
||||||
|
|
||||||
|
fmv.x.hw a0, f0
|
||||||
|
fmv.hw.x f0, a0
|
||||||
|
ipush
|
||||||
|
ipop
|
||||||
@@ -0,0 +1,3 @@
|
|||||||
|
#as: -march=rv32iv -mcheck-constraints
|
||||||
|
#source: vector-insns-fail-arith-fixp.s
|
||||||
|
#error_output: vector-insns-fail-arith-fixp.l
|
||||||
@@ -0,0 +1,27 @@
|
|||||||
|
.*: Assembler messages:
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vsaddu.vv v0,v4,v8,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vsaddu.vx v0,v4,a1,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vsaddu.vi v0,v4,15,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vsadd.vv v0,v4,v8,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vsadd.vx v0,v4,a1,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vsadd.vi v0,v4,15,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vssubu.vv v0,v4,v8,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vssubu.vx v0,v4,a1,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vssub.vv v0,v4,v8,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vssub.vx v0,v4,a1,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vaaddu.vv v0,v4,v8,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vaaddu.vx v0,v4,a1,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vaadd.vv v0,v4,v8,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vaadd.vx v0,v4,a1,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vasubu.vv v0,v4,v8,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vasubu.vx v0,v4,a1,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vasub.vv v0,v4,v8,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vasub.vx v0,v4,a1,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vsmul.vv v0,v4,v8,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vsmul.vx v0,v4,a1,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vssrl.vv v0,v4,v8,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vssrl.vx v0,v4,a1,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vssrl.vi v0,v4,31,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vssra.vv v0,v4,v8,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vssra.vx v0,v4,a1,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vssra.vi v0,v4,31,v0.t'
|
||||||
@@ -0,0 +1,81 @@
|
|||||||
|
# Vector Single-Width Saturating Add and Subtract
|
||||||
|
|
||||||
|
vsaddu.vv v4, v4, v8 # OK
|
||||||
|
vsaddu.vv v8, v4, v8 # OK
|
||||||
|
vsaddu.vv v0, v4, v8, v0.t # vd overlap vm
|
||||||
|
vsaddu.vx v4, v4, a1 # OK
|
||||||
|
vsaddu.vx v0, v4, a1, v0.t # vd overlap vm
|
||||||
|
vsaddu.vi v4, v4, 15 # OK
|
||||||
|
vsaddu.vi v0, v4, 15, v0.t # vd overlap vm
|
||||||
|
|
||||||
|
vsadd.vv v4, v4, v8
|
||||||
|
vsadd.vv v8, v4, v8
|
||||||
|
vsadd.vv v0, v4, v8, v0.t
|
||||||
|
vsadd.vx v4, v4, a1
|
||||||
|
vsadd.vx v0, v4, a1, v0.t
|
||||||
|
vsadd.vi v4, v4, 15
|
||||||
|
vsadd.vi v0, v4, 15, v0.t
|
||||||
|
|
||||||
|
vssubu.vv v4, v4, v8 # OK
|
||||||
|
vssubu.vv v8, v4, v8 # OK
|
||||||
|
vssubu.vv v0, v4, v8, v0.t # vd overlap vm
|
||||||
|
vssubu.vx v4, v4, a1 # OK
|
||||||
|
vssubu.vx v0, v4, a1, v0.t # vd overlap vm
|
||||||
|
|
||||||
|
vssub.vv v4, v4, v8
|
||||||
|
vssub.vv v8, v4, v8
|
||||||
|
vssub.vv v0, v4, v8, v0.t
|
||||||
|
vssub.vx v4, v4, a1
|
||||||
|
vssub.vx v0, v4, a1, v0.t
|
||||||
|
|
||||||
|
# Vector Single-Width Averaging Add and Subtract
|
||||||
|
|
||||||
|
vaaddu.vv v4, v4, v8 # OK
|
||||||
|
vaaddu.vv v8, v4, v8 # OK
|
||||||
|
vaaddu.vv v0, v4, v8, v0.t # vd overlap vm
|
||||||
|
vaaddu.vx v4, v4, a1 # OK
|
||||||
|
vaaddu.vx v0, v4, a1, v0.t # vd overlap vm
|
||||||
|
|
||||||
|
vaadd.vv v4, v4, v8
|
||||||
|
vaadd.vv v8, v4, v8
|
||||||
|
vaadd.vv v0, v4, v8, v0.t
|
||||||
|
vaadd.vx v4, v4, a1
|
||||||
|
vaadd.vx v0, v4, a1, v0.t
|
||||||
|
|
||||||
|
vasubu.vv v4, v4, v8
|
||||||
|
vasubu.vv v8, v4, v8
|
||||||
|
vasubu.vv v0, v4, v8, v0.t
|
||||||
|
vasubu.vx v4, v4, a1
|
||||||
|
vasubu.vx v0, v4, a1, v0.t
|
||||||
|
|
||||||
|
vasub.vv v4, v4, v8
|
||||||
|
vasub.vv v8, v4, v8
|
||||||
|
vasub.vv v0, v4, v8, v0.t
|
||||||
|
vasub.vx v4, v4, a1
|
||||||
|
vasub.vx v0, v4, a1, v0.t
|
||||||
|
|
||||||
|
# Vector Single-Width Fractional Multiply with Rounding and Saturation
|
||||||
|
|
||||||
|
vsmul.vv v4, v4, v8 # OK
|
||||||
|
vsmul.vv v8, v4, v8 # OK
|
||||||
|
vsmul.vv v0, v4, v8, v0.t # vd overlap vm
|
||||||
|
vsmul.vx v4, v4, a1 # OK
|
||||||
|
vsmul.vx v0, v4, a1, v0.t # vd overlap vm
|
||||||
|
|
||||||
|
# Vector Single-Width Scaling Shift Instructions
|
||||||
|
|
||||||
|
vssrl.vv v4, v4, v8 # OK
|
||||||
|
vssrl.vv v8, v4, v8 # OK
|
||||||
|
vssrl.vv v0, v4, v8, v0.t # vd overlap vm
|
||||||
|
vssrl.vx v4, v4, a1 # OK
|
||||||
|
vssrl.vx v0, v4, a1, v0.t # vd overlap vm
|
||||||
|
vssrl.vi v4, v4, 31 # OK
|
||||||
|
vssrl.vi v0, v4, 31, v0.t # vd overlap vm
|
||||||
|
|
||||||
|
vssra.vv v4, v4, v8
|
||||||
|
vssra.vv v8, v4, v8
|
||||||
|
vssra.vv v0, v4, v8, v0.t
|
||||||
|
vssra.vx v4, v4, a1
|
||||||
|
vssra.vx v0, v4, a1, v0.t
|
||||||
|
vssra.vi v4, v4, 31
|
||||||
|
vssra.vi v0, v4, 31, v0.t
|
||||||
@@ -0,0 +1,3 @@
|
|||||||
|
#as: -march=rv32ifv -mcheck-constraints
|
||||||
|
#source: vector-insns-fail-arith-floatp.s
|
||||||
|
#error_output: vector-insns-fail-arith-floatp.l
|
||||||
@@ -0,0 +1,49 @@
|
|||||||
|
.*: Assembler messages:
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vfadd.vv v0,v4,v8,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vfadd.vf v0,v4,fa1,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vfsub.vv v0,v4,v8,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vfsub.vf v0,v4,fa1,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vfrsub.vf v0,v4,fa1,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vfmul.vv v0,v4,v8,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vfmul.vf v0,v4,fa1,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vfdiv.vv v0,v4,v8,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vfdiv.vf v0,v4,fa1,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vfrdiv.vf v0,v4,fa1,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vfmacc.vv v0,v4,v8,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vfmacc.vf v0,fa1,v4,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vfnmacc.vv v0,v4,v8,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vfnmacc.vf v0,fa1,v4,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vfmsac.vv v0,v4,v8,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vfmsac.vf v0,fa1,v4,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vfnmsac.vv v0,v4,v8,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vfnmsac.vf v0,fa1,v4,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vfmadd.vv v0,v4,v8,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vfmadd.vf v0,fa1,v4,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vfnmadd.vv v0,v4,v8,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vfnmadd.vf v0,fa1,v4,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vfmsub.vv v0,v4,v8,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vfmsub.vf v0,fa1,v4,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vfnmsub.vv v0,v4,v8,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vfnmsub.vf v0,fa1,v4,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vfsqrt.v v0,v4,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vfrece7.v v0,v4,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vfrsqrte7.v v0,v4,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vfclass.v v0,v4,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vfmin.vv v0,v4,v8,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vfmin.vf v0,v4,fa1,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vfmax.vv v0,v4,v8,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vfmax.vf v0,v4,fa1,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vfneg.v v0,v4,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vfabs.v v0,v4,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vfsgnj.vv v0,v4,v8,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vfsgnj.vf v0,v4,fa1,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vfsgnjn.vv v0,v4,v8,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vfsgnjn.vf v0,v4,fa1,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vfsgnjx.vv v0,v4,v8,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vfsgnjx.vf v0,v4,fa1,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vfcvt.xu.f.v v0,v4,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vfcvt.x.f.v v0,v4,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vfcvt.rtz.xu.f.v v0,v4,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vfcvt.rtz.x.f.v v0,v4,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vfcvt.f.xu.v v0,v4,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vfcvt.f.x.v v0,v4,v0.t'
|
||||||
@@ -0,0 +1,157 @@
|
|||||||
|
# Vector Single-Width Floating-Point Add/Subtract Instructions
|
||||||
|
|
||||||
|
vfadd.vv v4, v4, v8 # OK
|
||||||
|
vfadd.vv v8, v4, v8 # OK
|
||||||
|
vfadd.vv v0, v4, v8, v0.t # vd overlap vm
|
||||||
|
vfadd.vf v4, v4, fa1 # OK
|
||||||
|
vfadd.vf v0, v4, fa1, v0.t # vd overlap vm
|
||||||
|
|
||||||
|
vfsub.vv v4, v4, v8
|
||||||
|
vfsub.vv v8, v4, v8
|
||||||
|
vfsub.vv v0, v4, v8, v0.t
|
||||||
|
vfsub.vf v4, v4, fa1
|
||||||
|
vfsub.vf v0, v4, fa1, v0.t
|
||||||
|
|
||||||
|
vfrsub.vf v4, v4, fa1 # OK
|
||||||
|
vfrsub.vf v0, v4, fa1, v0.t # vd overlap vm
|
||||||
|
|
||||||
|
# Vector Single-Width Floating-Point Multiply/Divide Instructions
|
||||||
|
|
||||||
|
vfmul.vv v4, v4, v8 # OK
|
||||||
|
vfmul.vv v8, v4, v8 # OK
|
||||||
|
vfmul.vv v0, v4, v8, v0.t # vd overlap vm
|
||||||
|
vfmul.vf v4, v4, fa1 # OK
|
||||||
|
vfmul.vf v0, v4, fa1, v0.t # vd overlap vm
|
||||||
|
|
||||||
|
vfdiv.vv v4, v4, v8
|
||||||
|
vfdiv.vv v8, v4, v8
|
||||||
|
vfdiv.vv v0, v4, v8, v0.t
|
||||||
|
vfdiv.vf v4, v4, fa1
|
||||||
|
vfdiv.vf v0, v4, fa1, v0.t
|
||||||
|
|
||||||
|
vfrdiv.vf v4, v4, fa1 # OK
|
||||||
|
vfrdiv.vf v0, v4, fa1, v0.t # vd overlap vm
|
||||||
|
|
||||||
|
# Vector Single-Width Floating-Point Fused Multiply-Add Instructions
|
||||||
|
|
||||||
|
vfmacc.vv v4, v4, v8 # OK
|
||||||
|
vfmacc.vv v8, v4, v8 # OK
|
||||||
|
vfmacc.vv v0, v4, v8, v0.t # vd overlap vm
|
||||||
|
vfmacc.vf v4, fa1, v4 # OK
|
||||||
|
vfmacc.vf v0, fa1, v4, v0.t # vd overlap vm
|
||||||
|
|
||||||
|
vfnmacc.vv v4, v4, v8
|
||||||
|
vfnmacc.vv v8, v4, v8
|
||||||
|
vfnmacc.vv v0, v4, v8, v0.t
|
||||||
|
vfnmacc.vf v4, fa1, v4
|
||||||
|
vfnmacc.vf v0, fa1, v4, v0.t
|
||||||
|
|
||||||
|
vfmsac.vv v4, v4, v8
|
||||||
|
vfmsac.vv v8, v4, v8
|
||||||
|
vfmsac.vv v0, v4, v8, v0.t
|
||||||
|
vfmsac.vf v4, fa1, v4
|
||||||
|
vfmsac.vf v0, fa1, v4, v0.t
|
||||||
|
|
||||||
|
vfnmsac.vv v4, v4, v8
|
||||||
|
vfnmsac.vv v8, v4, v8
|
||||||
|
vfnmsac.vv v0, v4, v8, v0.t
|
||||||
|
vfnmsac.vf v4, fa1, v4
|
||||||
|
vfnmsac.vf v0, fa1, v4, v0.t
|
||||||
|
|
||||||
|
vfmadd.vv v4, v4, v8
|
||||||
|
vfmadd.vv v8, v4, v8
|
||||||
|
vfmadd.vv v0, v4, v8, v0.t
|
||||||
|
vfmadd.vf v4, fa1, v4
|
||||||
|
vfmadd.vf v0, fa1, v4, v0.t
|
||||||
|
|
||||||
|
vfnmadd.vv v4, v4, v8
|
||||||
|
vfnmadd.vv v8, v4, v8
|
||||||
|
vfnmadd.vv v0, v4, v8, v0.t
|
||||||
|
vfnmadd.vf v4, fa1, v4
|
||||||
|
vfnmadd.vf v0, fa1, v4, v0.t
|
||||||
|
|
||||||
|
vfmsub.vv v4, v4, v8
|
||||||
|
vfmsub.vv v8, v4, v8
|
||||||
|
vfmsub.vv v0, v4, v8, v0.t
|
||||||
|
vfmsub.vf v4, fa1, v4
|
||||||
|
vfmsub.vf v0, fa1, v4, v0.t
|
||||||
|
|
||||||
|
vfnmsub.vv v4, v4, v8
|
||||||
|
vfnmsub.vv v8, v4, v8
|
||||||
|
vfnmsub.vv v0, v4, v8, v0.t
|
||||||
|
vfnmsub.vf v4, fa1, v4
|
||||||
|
vfnmsub.vf v0, fa1, v4, v0.t
|
||||||
|
|
||||||
|
# Vector Floating-Point Square-Root Instruction
|
||||||
|
|
||||||
|
vfsqrt.v v4, v4 # OK
|
||||||
|
vfsqrt.v v0, v4, v0.t # vd overlap vm
|
||||||
|
|
||||||
|
# Vector Floating-Point Reciprocal Estimate Instruction
|
||||||
|
|
||||||
|
vfrece7.v v4, v4 # OK
|
||||||
|
vfrece7.v v0, v4, v0.t # vd overlap vm
|
||||||
|
|
||||||
|
# Vector Floating-Point Reciprocal Square-Root Estimate Instruction
|
||||||
|
|
||||||
|
vfrsqrte7.v v4, v4 # OK
|
||||||
|
vfrsqrte7.v v0, v4, v0.t # vd overlap vm
|
||||||
|
|
||||||
|
# Vector Floating-Point Classify Instruction
|
||||||
|
|
||||||
|
vfclass.v v4, v4 # OK
|
||||||
|
vfclass.v v0, v4, v0.t # vd overlap vm
|
||||||
|
|
||||||
|
# Vector Floating-Point MIN/MAX Instructions
|
||||||
|
|
||||||
|
vfmin.vv v4, v4, v8 # OK
|
||||||
|
vfmin.vv v8, v4, v8 # OK
|
||||||
|
vfmin.vv v0, v4, v8, v0.t # vd overlap vm
|
||||||
|
vfmin.vf v4, v4, fa1 # OK
|
||||||
|
vfmin.vf v0, v4, fa1, v0.t # vd overlap vm
|
||||||
|
|
||||||
|
vfmax.vv v4, v4, v8
|
||||||
|
vfmax.vv v8, v4, v8
|
||||||
|
vfmax.vv v0, v4, v8, v0.t
|
||||||
|
vfmax.vf v4, v4, fa1
|
||||||
|
vfmax.vf v0, v4, fa1, v0.t
|
||||||
|
|
||||||
|
# Vector Floating-Point Sign-Injection Instructions
|
||||||
|
|
||||||
|
vfneg.v v4, v4 # OK
|
||||||
|
vfneg.v v0, v4, v0.t # vd overlap vm
|
||||||
|
vfabs.v v4, v4 # OK
|
||||||
|
vfabs.v v0, v4, v0.t # vd overlap vm
|
||||||
|
|
||||||
|
vfsgnj.vv v4, v4, v8 # OK
|
||||||
|
vfsgnj.vv v8, v4, v8 # OK
|
||||||
|
vfsgnj.vv v0, v4, v8, v0.t # vd overlap vm
|
||||||
|
vfsgnj.vf v4, v4, fa1 # OK
|
||||||
|
vfsgnj.vf v0, v4, fa1, v0.t # vd overlap vm
|
||||||
|
|
||||||
|
vfsgnjn.vv v4, v4, v8
|
||||||
|
vfsgnjn.vv v8, v4, v8
|
||||||
|
vfsgnjn.vv v0, v4, v8, v0.t
|
||||||
|
vfsgnjn.vf v4, v4, fa1
|
||||||
|
vfsgnjn.vf v0, v4, fa1, v0.t
|
||||||
|
|
||||||
|
vfsgnjx.vv v4, v4, v8
|
||||||
|
vfsgnjx.vv v8, v4, v8
|
||||||
|
vfsgnjx.vv v0, v4, v8, v0.t
|
||||||
|
vfsgnjx.vf v4, v4, fa1
|
||||||
|
vfsgnjx.vf v0, v4, fa1, v0.t
|
||||||
|
|
||||||
|
# Single-Width Floating-Point/Integer Type-Convert Instructions
|
||||||
|
|
||||||
|
vfcvt.xu.f.v v4, v4 # OK
|
||||||
|
vfcvt.xu.f.v v0, v4, v0.t # vd overlap vm
|
||||||
|
vfcvt.x.f.v v4, v4
|
||||||
|
vfcvt.x.f.v v0, v4, v0.t
|
||||||
|
vfcvt.rtz.xu.f.v v4, v4
|
||||||
|
vfcvt.rtz.xu.f.v v0, v4, v0.t
|
||||||
|
vfcvt.rtz.x.f.v v4, v4
|
||||||
|
vfcvt.rtz.x.f.v v0, v4, v0.t
|
||||||
|
vfcvt.f.xu.v v4, v4
|
||||||
|
vfcvt.f.xu.v v0, v4, v0.t
|
||||||
|
vfcvt.f.x.v v4, v4
|
||||||
|
vfcvt.f.x.v v0, v4, v0.t
|
||||||
@@ -0,0 +1,3 @@
|
|||||||
|
#as: -march=rv32iv -mcheck-constraints
|
||||||
|
#source: vector-insns-fail-arith-int.s
|
||||||
|
#error_output: vector-insns-fail-arith-int.l
|
||||||
@@ -0,0 +1,71 @@
|
|||||||
|
.*: Assembler messages:
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vneg.v v0,v4,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vadd.vv v0,v4,v8,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vadd.vx v0,v4,a1,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vadd.vi v0,v4,15,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vsub.vv v0,v4,v8,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vsub.vx v0,v4,a1,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vrsub.vx v0,v4,a1,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vrsub.vi v0,v4,15,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vzext.vf2 v0,v4,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vsext.vf2 v0,v4,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vzext.vf4 v0,v4,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vsext.vf4 v0,v4,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vzext.vf8 v0,v4,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vsext.vf8 v0,v4,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vadc.vvm v0,v4,v8,v0'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vadc.vxm v0,v4,a1,v0'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vadc.vim v0,v4,15,v0'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vsbc.vvm v0,v4,v8,v0'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vsbc.vxm v0,v4,a1,v0'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vnot.v v0,v4,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vand.vv v0,v4,v8,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vand.vx v0,v4,a1,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vand.vi v0,v4,15,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vor.vv v0,v4,v8,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vor.vx v0,v4,a1,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vor.vi v0,v4,15,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vxor.vv v0,v4,v8,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vxor.vx v0,v4,a1,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vxor.vi v0,v4,15,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vsll.vv v0,v4,v8,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vsll.vx v0,v4,a1,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vsll.vi v0,v4,31,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vsrl.vv v0,v4,v8,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vsrl.vx v0,v4,a1,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vsrl.vi v0,v4,31,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vsra.vv v0,v4,v8,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vsra.vx v0,v4,a1,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vsra.vi v0,v4,31,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vminu.vv v0,v4,v8,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vminu.vx v0,v4,a1,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vmin.vv v0,v4,v8,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vmin.vx v0,v4,a1,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vmaxu.vv v0,v4,v8,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vmaxu.vx v0,v4,a1,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vmax.vv v0,v4,v8,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vmax.vx v0,v4,a1,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vmul.vv v0,v4,v8,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vmul.vx v0,v4,a1,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vmulh.vv v0,v4,v8,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vmulh.vx v0,v4,a1,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vmulhu.vv v0,v4,v8,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vmulhu.vx v0,v4,a1,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vmulhsu.vv v0,v4,v8,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vmulhsu.vx v0,v4,a1,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vdivu.vv v0,v4,v8,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vdivu.vx v0,v4,a1,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vdiv.vv v0,v4,v8,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vdiv.vx v0,v4,a1,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vremu.vv v0,v4,v8,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vremu.vx v0,v4,a1,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vrem.vv v0,v4,v8,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vrem.vx v0,v4,a1,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vmacc.vv v0,v4,v8,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vmacc.vx v0,a1,v4,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vnmsac.vv v0,v4,v8,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vnmsac.vx v0,a1,v4,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vmadd.vv v0,v4,v8,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vmadd.vx v0,a1,v4,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vnmsub.vv v0,v4,v8,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vnmsub.vx v0,a1,v4,v0.t'
|
||||||
213
gas/testsuite/gas/riscv/extended/vector-insns-fail-arith-int.s
Normal file
213
gas/testsuite/gas/riscv/extended/vector-insns-fail-arith-int.s
Normal file
@@ -0,0 +1,213 @@
|
|||||||
|
# Vector Single-Width Integer Add and Subtract
|
||||||
|
|
||||||
|
vneg.v v4, v4 # OK
|
||||||
|
vneg.v v0, v4, v0.t # vd overlap vm
|
||||||
|
|
||||||
|
vadd.vv v4, v4, v8 # OK
|
||||||
|
vadd.vv v8, v4, v8 # OK
|
||||||
|
vadd.vv v0, v4, v8, v0.t # vd overlap vm
|
||||||
|
vadd.vx v4, v4, a1 # OK
|
||||||
|
vadd.vx v0, v4, a1, v0.t # vd overlap vm
|
||||||
|
vadd.vi v4, v4, 15 # OK
|
||||||
|
vadd.vi v0, v4, 15, v0.t # vd overlap vm
|
||||||
|
|
||||||
|
vsub.vv v4, v4, v8 # OK
|
||||||
|
vsub.vv v8, v4, v8 # OK
|
||||||
|
vsub.vv v0, v4, v8, v0.t # vd overlap vm
|
||||||
|
vsub.vx v4, v4, a1 # OK
|
||||||
|
vsub.vx v0, v4, a1, v0.t # vd overlap vm
|
||||||
|
|
||||||
|
vrsub.vx v4, v4, a1 # OK
|
||||||
|
vrsub.vx v0, v4, a1, v0.t # vd overlap vm
|
||||||
|
vrsub.vi v4, v4, 15 # OK
|
||||||
|
vrsub.vi v0, v4, 15, v0.t # vd overlap vm
|
||||||
|
|
||||||
|
# Vector Integer Extension
|
||||||
|
|
||||||
|
vzext.vf2 v4, v4 # OK
|
||||||
|
vzext.vf2 v0, v4, v0.t # vd overlap vm
|
||||||
|
vsext.vf2 v4, v4
|
||||||
|
vsext.vf2 v0, v4, v0.t
|
||||||
|
vzext.vf4 v4, v4
|
||||||
|
vzext.vf4 v0, v4, v0.t
|
||||||
|
vsext.vf4 v4, v4
|
||||||
|
vsext.vf4 v0, v4, v0.t
|
||||||
|
vzext.vf8 v4, v4
|
||||||
|
vzext.vf8 v0, v4, v0.t
|
||||||
|
vsext.vf8 v4, v4
|
||||||
|
vsext.vf8 v0, v4, v0.t
|
||||||
|
|
||||||
|
# Vector Integer Add-with-Carry / Subtract-with-Borrow Instructions
|
||||||
|
|
||||||
|
vadc.vvm v4, v4, v8, v0 # OK
|
||||||
|
vadc.vvm v8, v4, v8, v0 # OK
|
||||||
|
vadc.vvm v0, v4, v8, v0 # vd overlap vm
|
||||||
|
vadc.vxm v4, v4, a1, v0 # OK
|
||||||
|
vadc.vxm v0, v4, a1, v0 # vd overlap vm
|
||||||
|
vadc.vim v4, v4, 15, v0 # OK
|
||||||
|
vadc.vim v0, v4, 15, v0 # vd overlap vm
|
||||||
|
|
||||||
|
vsbc.vvm v4, v4, v8, v0 # OK
|
||||||
|
vsbc.vvm v8, v4, v8, v0 # OK
|
||||||
|
vsbc.vvm v0, v4, v8, v0 # vd overlap vm
|
||||||
|
vsbc.vxm v4, v4, a1, v0 # OK
|
||||||
|
vsbc.vxm v0, v4, a1, v0 # vd overlap vm
|
||||||
|
|
||||||
|
# Vector Bitwise Logical Instructions
|
||||||
|
|
||||||
|
vnot.v v4, v4 # OK
|
||||||
|
vnot.v v0, v4, v0.t # vd overlap vm
|
||||||
|
|
||||||
|
vand.vv v4, v4, v8 # OK
|
||||||
|
vand.vv v8, v4, v8 # OK
|
||||||
|
vand.vv v0, v4, v8, v0.t # vd overlap vm
|
||||||
|
vand.vx v4, v4, a1 # OK
|
||||||
|
vand.vx v0, v4, a1, v0.t # vd overlap vm
|
||||||
|
vand.vi v4, v4, 15 # OK
|
||||||
|
vand.vi v0, v4, 15, v0.t # vd overlap vm
|
||||||
|
|
||||||
|
vor.vv v4, v4, v8
|
||||||
|
vor.vv v8, v4, v8
|
||||||
|
vor.vv v0, v4, v8, v0.t
|
||||||
|
vor.vx v4, v4, a1
|
||||||
|
vor.vx v0, v4, a1, v0.t
|
||||||
|
vor.vi v4, v4, 15
|
||||||
|
vor.vi v0, v4, 15, v0.t
|
||||||
|
|
||||||
|
vxor.vv v4, v4, v8
|
||||||
|
vxor.vv v8, v4, v8
|
||||||
|
vxor.vv v0, v4, v8, v0.t
|
||||||
|
vxor.vx v4, v4, a1
|
||||||
|
vxor.vx v0, v4, a1, v0.t
|
||||||
|
vxor.vi v4, v4, 15
|
||||||
|
vxor.vi v0, v4, 15, v0.t
|
||||||
|
|
||||||
|
# Vector Single-Width Bit Shift Instructions
|
||||||
|
|
||||||
|
vsll.vv v4, v4, v8 # OK
|
||||||
|
vsll.vv v8, v4, v8 # OK
|
||||||
|
vsll.vv v0, v4, v8, v0.t # vd overlap vm
|
||||||
|
vsll.vx v4, v4, a1 # OK
|
||||||
|
vsll.vx v0, v4, a1, v0.t # vd overlap vm
|
||||||
|
vsll.vi v4, v4, 31 # OK
|
||||||
|
vsll.vi v0, v4, 31, v0.t # vd overlap vm
|
||||||
|
|
||||||
|
vsrl.vv v4, v4, v8
|
||||||
|
vsrl.vv v8, v4, v8
|
||||||
|
vsrl.vv v0, v4, v8, v0.t
|
||||||
|
vsrl.vx v4, v4, a1
|
||||||
|
vsrl.vx v0, v4, a1, v0.t
|
||||||
|
vsrl.vi v4, v4, 31
|
||||||
|
vsrl.vi v0, v4, 31, v0.t
|
||||||
|
|
||||||
|
vsra.vv v4, v4, v8
|
||||||
|
vsra.vv v8, v4, v8
|
||||||
|
vsra.vv v0, v4, v8, v0.t
|
||||||
|
vsra.vx v4, v4, a1
|
||||||
|
vsra.vx v0, v4, a1, v0.t
|
||||||
|
vsra.vi v4, v4, 31
|
||||||
|
vsra.vi v0, v4, 31, v0.t
|
||||||
|
|
||||||
|
# Vector Integer Min/Max Instructions
|
||||||
|
|
||||||
|
vminu.vv v4, v4, v8 # OK
|
||||||
|
vminu.vv v8, v4, v8 # OK
|
||||||
|
vminu.vv v0, v4, v8, v0.t # vd overlap vm
|
||||||
|
vminu.vx v4, v4, a1 # OK
|
||||||
|
vminu.vx v0, v4, a1, v0.t # vd overlap vm
|
||||||
|
|
||||||
|
vmin.vv v4, v4, v8
|
||||||
|
vmin.vv v8, v4, v8
|
||||||
|
vmin.vv v0, v4, v8, v0.t
|
||||||
|
vmin.vx v4, v4, a1
|
||||||
|
vmin.vx v0, v4, a1, v0.t
|
||||||
|
|
||||||
|
vmaxu.vv v4, v4, v8
|
||||||
|
vmaxu.vv v8, v4, v8
|
||||||
|
vmaxu.vv v0, v4, v8, v0.t
|
||||||
|
vmaxu.vx v4, v4, a1
|
||||||
|
vmaxu.vx v0, v4, a1, v0.t
|
||||||
|
|
||||||
|
vmax.vv v4, v4, v8
|
||||||
|
vmax.vv v8, v4, v8
|
||||||
|
vmax.vv v0, v4, v8, v0.t
|
||||||
|
vmax.vx v4, v4, a1
|
||||||
|
vmax.vx v0, v4, a1, v0.t
|
||||||
|
|
||||||
|
# Vector Single-Width Integer Multiply Instructions
|
||||||
|
|
||||||
|
vmul.vv v4, v4, v8 # OK
|
||||||
|
vmul.vv v8, v4, v8 # OK
|
||||||
|
vmul.vv v0, v4, v8, v0.t # vd overlap vm
|
||||||
|
vmul.vx v4, v4, a1 # OK
|
||||||
|
vmul.vx v0, v4, a1, v0.t # vd overlap vm
|
||||||
|
|
||||||
|
vmulh.vv v4, v4, v8
|
||||||
|
vmulh.vv v8, v4, v8
|
||||||
|
vmulh.vv v0, v4, v8, v0.t
|
||||||
|
vmulh.vx v4, v4, a1
|
||||||
|
vmulh.vx v0, v4, a1, v0.t
|
||||||
|
|
||||||
|
vmulhu.vv v4, v4, v8
|
||||||
|
vmulhu.vv v8, v4, v8
|
||||||
|
vmulhu.vv v0, v4, v8, v0.t
|
||||||
|
vmulhu.vx v4, v4, a1
|
||||||
|
vmulhu.vx v0, v4, a1, v0.t
|
||||||
|
|
||||||
|
vmulhsu.vv v4, v4, v8
|
||||||
|
vmulhsu.vv v8, v4, v8
|
||||||
|
vmulhsu.vv v0, v4, v8, v0.t
|
||||||
|
vmulhsu.vx v4, v4, a1
|
||||||
|
vmulhsu.vx v0, v4, a1, v0.t
|
||||||
|
|
||||||
|
# Vector Integer Divide Instructions
|
||||||
|
|
||||||
|
vdivu.vv v4, v4, v8 # OK
|
||||||
|
vdivu.vv v8, v4, v8 # OK
|
||||||
|
vdivu.vv v0, v4, v8, v0.t # vd overlap vm
|
||||||
|
vdivu.vx v4, v4, a1 # OK
|
||||||
|
vdivu.vx v0, v4, a1, v0.t # vd overlap vm
|
||||||
|
|
||||||
|
vdiv.vv v4, v4, v8
|
||||||
|
vdiv.vv v8, v4, v8
|
||||||
|
vdiv.vv v0, v4, v8, v0.t
|
||||||
|
vdiv.vx v4, v4, a1
|
||||||
|
vdiv.vx v0, v4, a1, v0.t
|
||||||
|
|
||||||
|
vremu.vv v4, v4, v8
|
||||||
|
vremu.vv v8, v4, v8
|
||||||
|
vremu.vv v0, v4, v8, v0.t
|
||||||
|
vremu.vx v4, v4, a1
|
||||||
|
vremu.vx v0, v4, a1, v0.t
|
||||||
|
|
||||||
|
vrem.vv v4, v4, v8
|
||||||
|
vrem.vv v8, v4, v8
|
||||||
|
vrem.vv v0, v4, v8, v0.t
|
||||||
|
vrem.vx v4, v4, a1
|
||||||
|
vrem.vx v0, v4, a1, v0.t
|
||||||
|
|
||||||
|
# Vector Single-Width Integer Multiply-Add Instructions
|
||||||
|
|
||||||
|
vmacc.vv v4, v4, v8 # OK
|
||||||
|
vmacc.vv v8, v4, v8 # OK
|
||||||
|
vmacc.vv v0, v4, v8, v0.t # vd overlap vm
|
||||||
|
vmacc.vx v4, a1, v4 # OK
|
||||||
|
vmacc.vx v0, a1, v4, v0.t # vd overlap vm
|
||||||
|
|
||||||
|
vnmsac.vv v4, v4, v8
|
||||||
|
vnmsac.vv v8, v4, v8
|
||||||
|
vnmsac.vv v0, v4, v8, v0.t
|
||||||
|
vnmsac.vx v4, a1, v4
|
||||||
|
vnmsac.vx v0, a1, v4, v0.t
|
||||||
|
|
||||||
|
vmadd.vv v4, v4, v8
|
||||||
|
vmadd.vv v8, v4, v8
|
||||||
|
vmadd.vv v0, v4, v8, v0.t
|
||||||
|
vmadd.vx v4, a1, v4
|
||||||
|
vmadd.vx v0, a1, v4, v0.t
|
||||||
|
|
||||||
|
vnmsub.vv v4, v4, v8
|
||||||
|
vnmsub.vv v8, v4, v8
|
||||||
|
vnmsub.vv v0, v4, v8, v0.t
|
||||||
|
vnmsub.vx v4, a1, v4
|
||||||
|
vnmsub.vx v0, a1, v4, v0.t
|
||||||
@@ -0,0 +1,3 @@
|
|||||||
|
#as: -march=rv32ifv -mcheck-constraints
|
||||||
|
#source: vector-insns-fail-arith-widen.s
|
||||||
|
#error_output: vector-insns-fail-arith-widen.l
|
||||||
122
gas/testsuite/gas/riscv/extended/vector-insns-fail-arith-widen.l
Normal file
122
gas/testsuite/gas/riscv/extended/vector-insns-fail-arith-widen.l
Normal file
@@ -0,0 +1,122 @@
|
|||||||
|
.*: Assembler messages:
|
||||||
|
.*Error: illegal operands vd cannot overlap vs2 `vwcvtu.x.x.v v2,v2'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vwcvtu.x.x.v v0,v2,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vs2 `vwcvt.x.x.v v2,v2'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vwcvt.x.x.v v0,v2,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vs2 `vwaddu.vv v2,v2,v4'
|
||||||
|
.*Error: illegal operands vd cannot overlap vs1 `vwaddu.vv v4,v2,v4'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vwaddu.vv v0,v2,v4,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vs2 `vwaddu.vx v2,v2,a1'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vwaddu.vx v0,v2,a1,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vs1 `vwaddu.wv v4,v2,v4'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vwaddu.wv v0,v2,v4,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vwaddu.wx v0,v2,a1,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vs2 `vwsubu.vv v2,v2,v4'
|
||||||
|
.*Error: illegal operands vd cannot overlap vs1 `vwsubu.vv v4,v2,v4'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vwsubu.vv v0,v2,v4,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vs2 `vwsubu.vx v2,v2,a1'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vwsubu.vx v0,v2,a1,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vs1 `vwsubu.wv v4,v2,v4'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vwsubu.wv v0,v2,v4,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vwsubu.wx v0,v2,a1,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vs2 `vwadd.vv v2,v2,v4'
|
||||||
|
.*Error: illegal operands vd cannot overlap vs1 `vwadd.vv v4,v2,v4'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vwadd.vv v0,v2,v4,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vs2 `vwadd.vx v2,v2,a1'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vwadd.vx v0,v2,a1,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vs1 `vwadd.wv v4,v2,v4'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vwadd.wv v0,v2,v4,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vwadd.wx v0,v2,a1,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vs2 `vwsub.vv v2,v2,v4'
|
||||||
|
.*Error: illegal operands vd cannot overlap vs1 `vwsub.vv v4,v2,v4'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vwsub.vv v0,v2,v4,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vs2 `vwsub.vx v2,v2,a1'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vwsub.vx v0,v2,a1,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vs1 `vwsub.wv v4,v2,v4'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vwsub.wv v0,v2,v4,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vwsub.wx v0,v2,a1,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vs2 `vwmul.vv v2,v2,v4'
|
||||||
|
.*Error: illegal operands vd cannot overlap vs1 `vwmul.vv v4,v2,v4'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vwmul.vv v0,v2,v4,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vs2 `vwmul.vx v2,v2,a1'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vwmul.vx v0,v2,a1,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vs2 `vwmulu.vv v2,v2,v4'
|
||||||
|
.*Error: illegal operands vd cannot overlap vs1 `vwmulu.vv v4,v2,v4'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vwmulu.vv v0,v2,v4,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vs2 `vwmulu.vx v2,v2,a1'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vwmulu.vx v0,v2,a1,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vs2 `vwmulsu.vv v2,v2,v4'
|
||||||
|
.*Error: illegal operands vd cannot overlap vs1 `vwmulsu.vv v4,v2,v4'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vwmulsu.vv v0,v2,v4,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vs2 `vwmulsu.vx v2,v2,a1'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vwmulsu.vx v0,v2,a1,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vs1 `vwmaccu.vv v2,v2,v4'
|
||||||
|
.*Error: illegal operands vd cannot overlap vs2 `vwmaccu.vv v4,v2,v4'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vwmaccu.vv v0,v2,v4,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vs2 `vwmaccu.vx v2,a1,v2'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vwmaccu.vx v0,a1,v2,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vs1 `vwmacc.vv v2,v2,v4'
|
||||||
|
.*Error: illegal operands vd cannot overlap vs2 `vwmacc.vv v4,v2,v4'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vwmacc.vv v0,v2,v4,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vs2 `vwmacc.vx v2,a1,v2'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vwmacc.vx v0,a1,v2,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vs1 `vwmaccsu.vv v2,v2,v4'
|
||||||
|
.*Error: illegal operands vd cannot overlap vs2 `vwmaccsu.vv v4,v2,v4'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vwmaccsu.vv v0,v2,v4,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vs2 `vwmaccsu.vx v2,a1,v2'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vwmaccsu.vx v0,a1,v2,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vs2 `vwmaccus.vx v2,a1,v2'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vwmaccus.vx v0,a1,v2,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vs2 `vfwadd.vv v2,v2,v4'
|
||||||
|
.*Error: illegal operands vd cannot overlap vs1 `vfwadd.vv v4,v2,v4'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vfwadd.vv v0,v2,v4,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vs2 `vfwadd.vf v2,v2,fa1'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vfwadd.vf v0,v2,fa1,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vs1 `vfwadd.wv v4,v2,v4'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vfwadd.wv v0,v2,v4,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vs2 `vfwsub.vv v2,v2,v4'
|
||||||
|
.*Error: illegal operands vd cannot overlap vs1 `vfwsub.vv v4,v2,v4'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vfwsub.vv v0,v2,v4,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vs2 `vfwsub.vf v2,v2,fa1'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vfwsub.vf v0,v2,fa1,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vs1 `vfwsub.wv v4,v2,v4'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vfwsub.wv v0,v2,v4,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vs2 `vfwmul.vv v2,v2,v4'
|
||||||
|
.*Error: illegal operands vd cannot overlap vs1 `vfwmul.vv v4,v2,v4'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vfwmul.vv v0,v2,v4,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vs2 `vfwsub.vf v2,v2,fa1'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vfwsub.vf v0,v2,fa1,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vs1 `vfwmacc.vv v2,v2,v4'
|
||||||
|
.*Error: illegal operands vd cannot overlap vs2 `vfwmacc.vv v4,v2,v4'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vfwmacc.vv v0,v2,v4,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vs2 `vfwmacc.vf v2,fa1,v2'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vfwmacc.vf v0,fa1,v2,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vs1 `vfwnmacc.vv v2,v2,v4'
|
||||||
|
.*Error: illegal operands vd cannot overlap vs2 `vfwnmacc.vv v4,v2,v4'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vfwnmacc.vv v0,v2,v4,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vs2 `vfwnmacc.vf v2,fa1,v2'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vfwnmacc.vf v0,fa1,v2,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vs1 `vfwmsac.vv v2,v2,v4'
|
||||||
|
.*Error: illegal operands vd cannot overlap vs2 `vfwmsac.vv v4,v2,v4'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vfwmsac.vv v0,v2,v4,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vs2 `vfwmsac.vf v2,fa1,v2'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vfwmsac.vf v0,fa1,v2,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vs1 `vfwnmsac.vv v2,v2,v4'
|
||||||
|
.*Error: illegal operands vd cannot overlap vs2 `vfwnmsac.vv v4,v2,v4'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vfwnmsac.vv v0,v2,v4,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vs2 `vfwnmsac.vf v2,fa1,v2'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vfwnmsac.vf v0,fa1,v2,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vs2 `vfwcvt.xu.f.v v2,v2'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vfwcvt.xu.f.v v0,v2,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vs2 `vfwcvt.x.f.v v2,v2'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vfwcvt.x.f.v v0,v2,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vs2 `vfwcvt.rtz.xu.f.v v2,v2'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vfwcvt.rtz.xu.f.v v0,v2,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vs2 `vfwcvt.rtz.x.f.v v2,v2'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vfwcvt.rtz.x.f.v v0,v2,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vs2 `vfwcvt.f.xu.v v2,v2'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vfwcvt.f.xu.v v0,v2,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vs2 `vfwcvt.f.x.v v2,v2'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vfwcvt.f.x.v v0,v2,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vs2 `vfwcvt.f.f.v v2,v2'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vfwcvt.f.f.v v0,v2,v0.t'
|
||||||
297
gas/testsuite/gas/riscv/extended/vector-insns-fail-arith-widen.s
Normal file
297
gas/testsuite/gas/riscv/extended/vector-insns-fail-arith-widen.s
Normal file
@@ -0,0 +1,297 @@
|
|||||||
|
# Vector Widening Integer Add/Subtract
|
||||||
|
|
||||||
|
# vwcvtu.x.x.v vd,vs,vm = vwaddu.vx vd,vs,x0,vm
|
||||||
|
vwcvtu.x.x.v v1, v2 # OK since fractional LMUL. vd should be multiple of 2
|
||||||
|
vwcvtu.x.x.v v2, v2 # vd overlap vs2
|
||||||
|
vwcvtu.x.x.v v2, v3 # OK since fractional LMUL. vd overlap vs2
|
||||||
|
vwcvtu.x.x.v v0, v2, v0.t # vd overlap vm
|
||||||
|
|
||||||
|
# vwcvt.x.x.v vd,vs,vm = vwadd.vx vd,vs,x0,vm
|
||||||
|
vwcvt.x.x.v v1, v2
|
||||||
|
vwcvt.x.x.v v2, v2
|
||||||
|
vwcvt.x.x.v v2, v3
|
||||||
|
vwcvt.x.x.v v0, v2, v0.t
|
||||||
|
|
||||||
|
vwaddu.vv v1, v2, v4 # OK since fractional LMUL. vd should be multiple of 2
|
||||||
|
vwaddu.vv v2, v2, v4 # vd overlap vs2
|
||||||
|
vwaddu.vv v2, v3, v4 # OK since fractional LMUL. vd overlap vs2
|
||||||
|
vwaddu.vv v4, v2, v4 # vd overlap vs1
|
||||||
|
vwaddu.vv v4, v2, v5 # OK since fractional LMUL. vd overlap vs1
|
||||||
|
vwaddu.vv v0, v2, v4, v0.t # vd overlap vm
|
||||||
|
vwaddu.vx v1, v2, a1 # OK since fractional LMUL. vd should be multiple of 2
|
||||||
|
vwaddu.vx v2, v2, a1 # vd overlap vs2
|
||||||
|
vwaddu.vx v2, v3, a1 # OK since fractional LMUL. vd overlap vs2
|
||||||
|
vwaddu.vx v0, v2, a1, v0.t # vd overlap vm
|
||||||
|
vwaddu.wv v1, v2, v4 # OK since fractional LMUL. vd should be multiple of 2
|
||||||
|
vwaddu.wv v2, v2, v4 # OK
|
||||||
|
vwaddu.wv v2, v3, v4 # OK since fractional LMUL. vs2 should be multiple of 2
|
||||||
|
vwaddu.wv v4, v2, v4 # vd overlap vs1
|
||||||
|
vwaddu.wv v4, v2, v5 # OK since fractional LMUL. vd overlap vs1
|
||||||
|
vwaddu.wv v0, v2, v4, v0.t # vd overlap vm
|
||||||
|
vwaddu.wx v1, v2, a1 # OK since fractional LMUL. vd should be multiple of 2
|
||||||
|
vwaddu.wx v2, v2, a1 # OK
|
||||||
|
vwaddu.wx v2, v3, a1 # OK since fractional LMUL. vs2 should be multiple of 2
|
||||||
|
vwaddu.wx v0, v2, a1, v0.t # vd overlap vm
|
||||||
|
|
||||||
|
vwsubu.vv v1, v2, v4
|
||||||
|
vwsubu.vv v2, v2, v4
|
||||||
|
vwsubu.vv v2, v3, v4
|
||||||
|
vwsubu.vv v4, v2, v4
|
||||||
|
vwsubu.vv v4, v2, v5
|
||||||
|
vwsubu.vv v0, v2, v4, v0.t
|
||||||
|
vwsubu.vx v1, v2, a1
|
||||||
|
vwsubu.vx v2, v2, a1
|
||||||
|
vwsubu.vx v2, v3, a1
|
||||||
|
vwsubu.vx v0, v2, a1, v0.t
|
||||||
|
vwsubu.wv v1, v2, v4
|
||||||
|
vwsubu.wv v2, v2, v4
|
||||||
|
vwsubu.wv v2, v3, v4
|
||||||
|
vwsubu.wv v4, v2, v4
|
||||||
|
vwsubu.wv v4, v2, v5
|
||||||
|
vwsubu.wv v0, v2, v4, v0.t
|
||||||
|
vwsubu.wx v1, v2, a1
|
||||||
|
vwsubu.wx v2, v2, a1
|
||||||
|
vwsubu.wx v2, v3, a1
|
||||||
|
vwsubu.wx v0, v2, a1, v0.t
|
||||||
|
|
||||||
|
vwadd.vv v1, v2, v4
|
||||||
|
vwadd.vv v2, v2, v4
|
||||||
|
vwadd.vv v2, v3, v4
|
||||||
|
vwadd.vv v4, v2, v4
|
||||||
|
vwadd.vv v4, v2, v5
|
||||||
|
vwadd.vv v0, v2, v4, v0.t
|
||||||
|
vwadd.vx v1, v2, a1
|
||||||
|
vwadd.vx v2, v2, a1
|
||||||
|
vwadd.vx v2, v3, a1
|
||||||
|
vwadd.vx v0, v2, a1, v0.t
|
||||||
|
vwadd.wv v1, v2, v4
|
||||||
|
vwadd.wv v2, v2, v4
|
||||||
|
vwadd.wv v2, v3, v4
|
||||||
|
vwadd.wv v4, v2, v4
|
||||||
|
vwadd.wv v4, v2, v5
|
||||||
|
vwadd.wv v0, v2, v4, v0.t
|
||||||
|
vwadd.wx v1, v2, a1
|
||||||
|
vwadd.wx v2, v2, a1
|
||||||
|
vwadd.wx v2, v3, a1
|
||||||
|
vwadd.wx v0, v2, a1, v0.t
|
||||||
|
|
||||||
|
vwsub.vv v1, v2, v4
|
||||||
|
vwsub.vv v2, v2, v4
|
||||||
|
vwsub.vv v2, v3, v4
|
||||||
|
vwsub.vv v4, v2, v4
|
||||||
|
vwsub.vv v4, v2, v5
|
||||||
|
vwsub.vv v0, v2, v4, v0.t
|
||||||
|
vwsub.vx v1, v2, a1
|
||||||
|
vwsub.vx v2, v2, a1
|
||||||
|
vwsub.vx v2, v3, a1
|
||||||
|
vwsub.vx v0, v2, a1, v0.t
|
||||||
|
vwsub.wv v1, v2, v4
|
||||||
|
vwsub.wv v2, v2, v4
|
||||||
|
vwsub.wv v2, v3, v4
|
||||||
|
vwsub.wv v4, v2, v4
|
||||||
|
vwsub.wv v4, v2, v5
|
||||||
|
vwsub.wv v0, v2, v4, v0.t
|
||||||
|
vwsub.wx v1, v2, a1
|
||||||
|
vwsub.wx v2, v2, a1
|
||||||
|
vwsub.wx v2, v3, a1
|
||||||
|
vwsub.wx v0, v2, a1, v0.t
|
||||||
|
|
||||||
|
# Vector Widening Integer Multiply Instructions
|
||||||
|
|
||||||
|
vwmul.vv v1, v2, v4 # OK since fractional LMUL. vd should be multiple of 2
|
||||||
|
vwmul.vv v2, v2, v4 # vd overlap vs2
|
||||||
|
vwmul.vv v2, v3, v4 # OK since fractional LMUL. vd overlap vs2
|
||||||
|
vwmul.vv v4, v2, v4 # vd overlap vs1
|
||||||
|
vwmul.vv v4, v2, v5 # OK since fractional LMUL. vd overlap vs1
|
||||||
|
vwmul.vv v0, v2, v4, v0.t # vd overlap vm
|
||||||
|
vwmul.vx v1, v2, a1 # OK since fractional LMUL. vd should be multiple of 2
|
||||||
|
vwmul.vx v2, v2, a1 # vd overlap vs2
|
||||||
|
vwmul.vx v2, v3, a1 # OK since fractional LMUL. vd overlap vs2
|
||||||
|
vwmul.vx v0, v2, a1, v0.t # vd overlap vm
|
||||||
|
|
||||||
|
vwmulu.vv v1, v2, v4
|
||||||
|
vwmulu.vv v2, v2, v4
|
||||||
|
vwmulu.vv v2, v3, v4
|
||||||
|
vwmulu.vv v4, v2, v4
|
||||||
|
vwmulu.vv v4, v2, v5
|
||||||
|
vwmulu.vv v0, v2, v4, v0.t
|
||||||
|
vwmulu.vx v1, v2, a1
|
||||||
|
vwmulu.vx v2, v2, a1
|
||||||
|
vwmulu.vx v2, v3, a1
|
||||||
|
vwmulu.vx v0, v2, a1, v0.t
|
||||||
|
|
||||||
|
vwmulsu.vv v1, v2, v4
|
||||||
|
vwmulsu.vv v2, v2, v4
|
||||||
|
vwmulsu.vv v2, v3, v4
|
||||||
|
vwmulsu.vv v4, v2, v4
|
||||||
|
vwmulsu.vv v4, v2, v5
|
||||||
|
vwmulsu.vv v0, v2, v4, v0.t
|
||||||
|
vwmulsu.vx v1, v2, a1
|
||||||
|
vwmulsu.vx v2, v2, a1
|
||||||
|
vwmulsu.vx v2, v3, a1
|
||||||
|
vwmulsu.vx v0, v2, a1, v0.t
|
||||||
|
|
||||||
|
# Vector Widening Integer Multiply-Add Instructions
|
||||||
|
|
||||||
|
vwmaccu.vv v1, v2, v4 # OK since fractional LMUL. vd should be multiple of 2
|
||||||
|
vwmaccu.vv v2, v2, v4 # vd overlap vs1
|
||||||
|
vwmaccu.vv v2, v3, v4 # OK since fractional LMUL. vd overlap vs1
|
||||||
|
vwmaccu.vv v4, v2, v4 # vd overlap vs2
|
||||||
|
vwmaccu.vv v4, v2, v5 # OK since fractional LMUL. vd overlap vs2
|
||||||
|
vwmaccu.vv v0, v2, v4, v0.t # vd overlap vm
|
||||||
|
vwmaccu.vx v1, a1, v2 # OK since fractional LMUL. vd should be multiple of 2
|
||||||
|
vwmaccu.vx v2, a1, v2 # vd overlap vs2
|
||||||
|
vwmaccu.vx v2, a1, v3 # OK since fractional LMUL. vd overlap vs2
|
||||||
|
vwmaccu.vx v0, a1, v2, v0.t # vd overlap vm
|
||||||
|
|
||||||
|
vwmacc.vv v1, v2, v4
|
||||||
|
vwmacc.vv v2, v2, v4
|
||||||
|
vwmacc.vv v2, v3, v4
|
||||||
|
vwmacc.vv v4, v2, v4
|
||||||
|
vwmacc.vv v4, v2, v5
|
||||||
|
vwmacc.vv v0, v2, v4, v0.t
|
||||||
|
vwmacc.vx v1, a1, v2
|
||||||
|
vwmacc.vx v2, a1, v2
|
||||||
|
vwmacc.vx v2, a1, v3
|
||||||
|
vwmacc.vx v0, a1, v2, v0.t
|
||||||
|
|
||||||
|
vwmaccsu.vv v1, v2, v4
|
||||||
|
vwmaccsu.vv v2, v2, v4
|
||||||
|
vwmaccsu.vv v2, v3, v4
|
||||||
|
vwmaccsu.vv v4, v2, v4
|
||||||
|
vwmaccsu.vv v4, v2, v5
|
||||||
|
vwmaccsu.vv v0, v2, v4, v0.t
|
||||||
|
vwmaccsu.vx v1, a1, v2
|
||||||
|
vwmaccsu.vx v2, a1, v2
|
||||||
|
vwmaccsu.vx v2, a1, v3
|
||||||
|
vwmaccsu.vx v0, a1, v2, v0.t
|
||||||
|
|
||||||
|
vwmaccus.vx v1, a1, v2 # OK since fractional LMUL. vd should be multiple of 2
|
||||||
|
vwmaccus.vx v2, a1, v2 # vd overlap vs2
|
||||||
|
vwmaccus.vx v2, a1, v3 # OK since fractional LMUL. vd overlap vs2
|
||||||
|
vwmaccus.vx v0, a1, v2, v0.t # vd overlap vm
|
||||||
|
|
||||||
|
# Vector Widening Floating-Point Add/Subtract Instructions
|
||||||
|
|
||||||
|
vfwadd.vv v1, v2, v4 # OK since fractional LMUL. vd should be multiple of 2
|
||||||
|
vfwadd.vv v2, v2, v4 # vd overlap vs2
|
||||||
|
vfwadd.vv v2, v3, v4 # OK since fractional LMUL. vd overlap vs2
|
||||||
|
vfwadd.vv v4, v2, v4 # vd overlap vs1
|
||||||
|
vfwadd.vv v4, v2, v5 # OK since fractional LMUL. vd overlap vs1
|
||||||
|
vfwadd.vv v0, v2, v4, v0.t # vd overlap vm
|
||||||
|
vfwadd.vf v1, v2, fa1 # OK since fractional LMUL. vd should be multiple of 2
|
||||||
|
vfwadd.vf v2, v2, fa1 # vd overlap vs2
|
||||||
|
vfwadd.vf v2, v3, fa1 # OK since fractional LMUL. vd overlap vs2
|
||||||
|
vfwadd.vf v0, v2, fa1, v0.t # vd overlap vm
|
||||||
|
vfwadd.wv v1, v2, v4 # OK since fractional LMUL. vd should be multiple of 2
|
||||||
|
vfwadd.wv v2, v2, v4 # OK
|
||||||
|
vfwadd.wv v2, v3, v4 # OK since fractional LMUL. vs2 should be multiple of 2
|
||||||
|
vfwadd.wv v4, v2, v4 # vd overlap vs1
|
||||||
|
vfwadd.wv v4, v2, v5 # OK since fractional LMUL. vd overlap vs1
|
||||||
|
vfwadd.wv v0, v2, v4, v0.t # vd overlap vm
|
||||||
|
|
||||||
|
vfwsub.vv v1, v2, v4
|
||||||
|
vfwsub.vv v2, v2, v4
|
||||||
|
vfwsub.vv v2, v3, v4
|
||||||
|
vfwsub.vv v4, v2, v4
|
||||||
|
vfwsub.vv v4, v2, v5
|
||||||
|
vfwsub.vv v0, v2, v4, v0.t
|
||||||
|
vfwsub.vf v1, v2, fa1
|
||||||
|
vfwsub.vf v2, v2, fa1
|
||||||
|
vfwsub.vf v2, v3, fa1
|
||||||
|
vfwsub.vf v0, v2, fa1, v0.t
|
||||||
|
vfwsub.wv v1, v2, v4
|
||||||
|
vfwsub.wv v2, v2, v4
|
||||||
|
vfwsub.wv v2, v3, v4
|
||||||
|
vfwsub.wv v4, v2, v4
|
||||||
|
vfwsub.wv v4, v2, v5
|
||||||
|
vfwsub.wv v0, v2, v4, v0.t
|
||||||
|
|
||||||
|
# Vector Widening Floating-Point Multiply
|
||||||
|
|
||||||
|
vfwmul.vv v1, v2, v4 # OK since fractional LMUL. vd should be multiple of 2
|
||||||
|
vfwmul.vv v2, v2, v4 # vd overlap vs2
|
||||||
|
vfwmul.vv v2, v3, v4 # OK since fractional LMUL. vd overlap vs2
|
||||||
|
vfwmul.vv v4, v2, v4 # vd overlap vs1
|
||||||
|
vfwmul.vv v4, v2, v5 # OK since fractional LMUL. vd overlap vs1
|
||||||
|
vfwmul.vv v0, v2, v4, v0.t # vd overlap vm
|
||||||
|
vfwsub.vf v1, v2, fa1 # OK since fractional LMUL. vd should be multiple of 2
|
||||||
|
vfwsub.vf v2, v2, fa1 # vd overlap vs2
|
||||||
|
vfwsub.vf v2, v3, fa1 # OK since fractional LMUL. vd overlap vs2
|
||||||
|
vfwsub.vf v0, v2, fa1, v0.t # vd overlap vm
|
||||||
|
|
||||||
|
# Vector Widening Floating-Point Fused Multiply-Add Instructions
|
||||||
|
vfwmacc.vv v1, v2, v4 # OK since fractional LMUL. vd should be multiple of 2
|
||||||
|
vfwmacc.vv v2, v2, v4 # vd overlap vs1
|
||||||
|
vfwmacc.vv v2, v3, v4 # OK since fractional LMUL. vd overlap vs1
|
||||||
|
vfwmacc.vv v4, v2, v4 # vd overlap vs2
|
||||||
|
vfwmacc.vv v4, v2, v5 # OK since fractional LMUL. vd overlap vs2
|
||||||
|
vfwmacc.vv v0, v2, v4, v0.t # vd overlap vm
|
||||||
|
vfwmacc.vf v1, fa1, v2 # OK since fractional LMUL. vd should be multiple of 2
|
||||||
|
vfwmacc.vf v2, fa1, v2 # vd overlap vs2
|
||||||
|
vfwmacc.vf v2, fa1, v3 # OK since fractional LMUL. vd overlap vs2
|
||||||
|
vfwmacc.vf v0, fa1, v2, v0.t # vd overlap vm
|
||||||
|
|
||||||
|
vfwnmacc.vv v1, v2, v4
|
||||||
|
vfwnmacc.vv v2, v2, v4
|
||||||
|
vfwnmacc.vv v2, v3, v4
|
||||||
|
vfwnmacc.vv v4, v2, v4
|
||||||
|
vfwnmacc.vv v4, v2, v5
|
||||||
|
vfwnmacc.vv v0, v2, v4, v0.t
|
||||||
|
vfwnmacc.vf v1, fa1, v2
|
||||||
|
vfwnmacc.vf v2, fa1, v2
|
||||||
|
vfwnmacc.vf v2, fa1, v3
|
||||||
|
vfwnmacc.vf v0, fa1, v2, v0.t
|
||||||
|
|
||||||
|
vfwmsac.vv v1, v2, v4
|
||||||
|
vfwmsac.vv v2, v2, v4
|
||||||
|
vfwmsac.vv v2, v3, v4
|
||||||
|
vfwmsac.vv v4, v2, v4
|
||||||
|
vfwmsac.vv v4, v2, v5
|
||||||
|
vfwmsac.vv v0, v2, v4, v0.t
|
||||||
|
vfwmsac.vf v1, fa1, v2
|
||||||
|
vfwmsac.vf v2, fa1, v2
|
||||||
|
vfwmsac.vf v2, fa1, v3
|
||||||
|
vfwmsac.vf v0, fa1, v2, v0.t
|
||||||
|
|
||||||
|
vfwnmsac.vv v1, v2, v4
|
||||||
|
vfwnmsac.vv v2, v2, v4
|
||||||
|
vfwnmsac.vv v2, v3, v4
|
||||||
|
vfwnmsac.vv v4, v2, v4
|
||||||
|
vfwnmsac.vv v4, v2, v5
|
||||||
|
vfwnmsac.vv v0, v2, v4, v0.t
|
||||||
|
vfwnmsac.vf v1, fa1, v2
|
||||||
|
vfwnmsac.vf v2, fa1, v2
|
||||||
|
vfwnmsac.vf v2, fa1, v3
|
||||||
|
vfwnmsac.vf v0, fa1, v2, v0.t
|
||||||
|
|
||||||
|
# Widening Floating-Point/Integer Type-Convert Instructions
|
||||||
|
|
||||||
|
vfwcvt.xu.f.v v1, v2 # OK since fractional LMUL. vd should be multiple of 2
|
||||||
|
vfwcvt.xu.f.v v2, v2 # vd overlap vs2
|
||||||
|
vfwcvt.xu.f.v v2, v3 # OK since fractional LMUL. vd overlap vs2
|
||||||
|
vfwcvt.xu.f.v v0, v2, v0.t # vd overlap vm
|
||||||
|
vfwcvt.x.f.v v1, v2
|
||||||
|
vfwcvt.x.f.v v2, v2
|
||||||
|
vfwcvt.x.f.v v2, v3
|
||||||
|
vfwcvt.x.f.v v0, v2, v0.t
|
||||||
|
vfwcvt.rtz.xu.f.v v1, v2
|
||||||
|
vfwcvt.rtz.xu.f.v v2, v2
|
||||||
|
vfwcvt.rtz.xu.f.v v2, v3
|
||||||
|
vfwcvt.rtz.xu.f.v v0, v2, v0.t
|
||||||
|
vfwcvt.rtz.x.f.v v1, v2
|
||||||
|
vfwcvt.rtz.x.f.v v2, v2
|
||||||
|
vfwcvt.rtz.x.f.v v2, v3
|
||||||
|
vfwcvt.rtz.x.f.v v0, v2, v0.t
|
||||||
|
vfwcvt.f.xu.v v1, v2
|
||||||
|
vfwcvt.f.xu.v v2, v2
|
||||||
|
vfwcvt.f.xu.v v2, v3
|
||||||
|
vfwcvt.f.xu.v v0, v2, v0.t
|
||||||
|
vfwcvt.f.x.v v1, v2
|
||||||
|
vfwcvt.f.x.v v2, v2
|
||||||
|
vfwcvt.f.x.v v2, v3
|
||||||
|
vfwcvt.f.x.v v0, v2, v0.t
|
||||||
|
vfwcvt.f.f.v v1, v2
|
||||||
|
vfwcvt.f.f.v v2, v2
|
||||||
|
vfwcvt.f.f.v v2, v3
|
||||||
|
vfwcvt.f.f.v v0, v2, v0.t
|
||||||
@@ -0,0 +1,3 @@
|
|||||||
|
#as: -march=rv32iv -mcheck-constraints
|
||||||
|
#source: vector-insns-fail-load-store.s
|
||||||
|
#error_output: vector-insns-fail-load-store.l
|
||||||
419
gas/testsuite/gas/riscv/extended/vector-insns-fail-load-store.l
Normal file
419
gas/testsuite/gas/riscv/extended/vector-insns-fail-load-store.l
Normal file
@@ -0,0 +1,419 @@
|
|||||||
|
.*: Assembler messages:
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vle8.v v0,\(a0\),v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vle8ff.v v0,\(a0\),v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vle16.v v0,\(a0\),v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vle16ff.v v0,\(a0\),v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vle32.v v0,\(a0\),v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vle32ff.v v0,\(a0\),v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vle64.v v0,\(a0\),v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vle64ff.v v0,\(a0\),v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vse8.v v0,\(a0\),v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vse16.v v0,\(a0\),v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vse32.v v0,\(a0\),v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vse64.v v0,\(a0\),v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vlse8.v v0,\(a0\),a1,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vlse16.v v0,\(a0\),a1,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vlse32.v v0,\(a0\),a1,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vlse64.v v0,\(a0\),a1,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vsse8.v v0,\(a0\),a1,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vsse16.v v0,\(a0\),a1,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vsse32.v v0,\(a0\),a1,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vsse64.v v0,\(a0\),a1,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vloxei8.v v0,\(a0\),v4,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vloxei16.v v0,\(a0\),v4,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vloxei32.v v0,\(a0\),v4,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vloxei64.v v0,\(a0\),v4,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vsoxei8.v v0,\(a0\),v4,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vsoxei16.v v0,\(a0\),v4,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vsoxei32.v v0,\(a0\),v4,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vsoxei64.v v0,\(a0\),v4,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vluxei8.v v0,\(a0\),v4,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vluxei16.v v0,\(a0\),v4,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vluxei32.v v0,\(a0\),v4,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vluxei64.v v0,\(a0\),v4,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vsuxei8.v v0,\(a0\),v4,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vsuxei16.v v0,\(a0\),v4,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vsuxei32.v v0,\(a0\),v4,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vsuxei64.v v0,\(a0\),v4,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vlseg2e8.v v0,\(a0\),v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vsseg2e8.v v0,\(a0\),v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vlseg2e8ff.v v0,\(a0\),v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vlseg3e8.v v0,\(a0\),v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vsseg3e8.v v0,\(a0\),v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vlseg3e8ff.v v0,\(a0\),v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vlseg4e8.v v0,\(a0\),v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vsseg4e8.v v0,\(a0\),v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vlseg4e8ff.v v0,\(a0\),v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vlseg5e8.v v0,\(a0\),v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vsseg5e8.v v0,\(a0\),v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vlseg5e8ff.v v0,\(a0\),v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vlseg6e8.v v0,\(a0\),v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vsseg6e8.v v0,\(a0\),v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vlseg6e8ff.v v0,\(a0\),v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vlseg7e8.v v0,\(a0\),v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vsseg7e8.v v0,\(a0\),v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vlseg7e8ff.v v0,\(a0\),v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vlseg8e8.v v0,\(a0\),v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vsseg8e8.v v0,\(a0\),v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vlseg8e8ff.v v0,\(a0\),v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vlseg2e16.v v0,\(a0\),v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vsseg2e16.v v0,\(a0\),v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vlseg2e16ff.v v0,\(a0\),v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vlseg3e16.v v0,\(a0\),v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vsseg3e16.v v0,\(a0\),v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vlseg3e16ff.v v0,\(a0\),v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vlseg4e16.v v0,\(a0\),v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vsseg4e16.v v0,\(a0\),v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vlseg4e16ff.v v0,\(a0\),v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vlseg5e16.v v0,\(a0\),v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vsseg5e16.v v0,\(a0\),v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vlseg5e16ff.v v0,\(a0\),v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vlseg6e16.v v0,\(a0\),v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vsseg6e16.v v0,\(a0\),v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vlseg6e16ff.v v0,\(a0\),v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vlseg7e16.v v0,\(a0\),v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vsseg7e16.v v0,\(a0\),v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vlseg7e16ff.v v0,\(a0\),v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vlseg8e16.v v0,\(a0\),v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vsseg8e16.v v0,\(a0\),v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vlseg8e16ff.v v0,\(a0\),v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vlseg2e32.v v0,\(a0\),v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vsseg2e32.v v0,\(a0\),v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vlseg2e32ff.v v0,\(a0\),v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vlseg3e32.v v0,\(a0\),v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vsseg3e32.v v0,\(a0\),v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vlseg3e32ff.v v0,\(a0\),v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vlseg4e32.v v0,\(a0\),v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vsseg4e32.v v0,\(a0\),v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vlseg4e32ff.v v0,\(a0\),v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vlseg5e32.v v0,\(a0\),v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vsseg5e32.v v0,\(a0\),v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vlseg5e32ff.v v0,\(a0\),v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vlseg6e32.v v0,\(a0\),v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vsseg6e32.v v0,\(a0\),v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vlseg6e32ff.v v0,\(a0\),v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vlseg7e32.v v0,\(a0\),v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vsseg7e32.v v0,\(a0\),v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vlseg7e32ff.v v0,\(a0\),v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vlseg8e32.v v0,\(a0\),v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vsseg8e32.v v0,\(a0\),v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vlseg8e32ff.v v0,\(a0\),v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vlseg2e64.v v0,\(a0\),v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vsseg2e64.v v0,\(a0\),v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vlseg2e64ff.v v0,\(a0\),v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vlseg3e64.v v0,\(a0\),v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vsseg3e64.v v0,\(a0\),v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vlseg3e64ff.v v0,\(a0\),v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vlseg4e64.v v0,\(a0\),v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vsseg4e64.v v0,\(a0\),v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vlseg4e64ff.v v0,\(a0\),v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vlseg5e64.v v0,\(a0\),v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vsseg5e64.v v0,\(a0\),v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vlseg5e64ff.v v0,\(a0\),v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vlseg6e64.v v0,\(a0\),v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vsseg6e64.v v0,\(a0\),v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vlseg6e64ff.v v0,\(a0\),v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vlseg7e64.v v0,\(a0\),v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vsseg7e64.v v0,\(a0\),v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vlseg7e64ff.v v0,\(a0\),v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vlseg8e64.v v0,\(a0\),v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vsseg8e64.v v0,\(a0\),v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vlseg8e64ff.v v0,\(a0\),v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vlsseg2e8.v v0,\(a0\),a1,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vssseg2e8.v v0,\(a0\),a1,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vlsseg3e8.v v0,\(a0\),a1,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vssseg3e8.v v0,\(a0\),a1,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vlsseg4e8.v v0,\(a0\),a1,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vssseg4e8.v v0,\(a0\),a1,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vlsseg5e8.v v0,\(a0\),a1,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vssseg5e8.v v0,\(a0\),a1,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vlsseg6e8.v v0,\(a0\),a1,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vssseg6e8.v v0,\(a0\),a1,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vlsseg7e8.v v0,\(a0\),a1,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vssseg7e8.v v0,\(a0\),a1,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vlsseg8e8.v v0,\(a0\),a1,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vssseg8e8.v v0,\(a0\),a1,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vlsseg2e16.v v0,\(a0\),a1,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vssseg2e16.v v0,\(a0\),a1,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vlsseg3e16.v v0,\(a0\),a1,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vssseg3e16.v v0,\(a0\),a1,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vlsseg4e16.v v0,\(a0\),a1,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vssseg4e16.v v0,\(a0\),a1,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vlsseg5e16.v v0,\(a0\),a1,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vssseg5e16.v v0,\(a0\),a1,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vlsseg6e16.v v0,\(a0\),a1,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vssseg6e16.v v0,\(a0\),a1,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vlsseg7e16.v v0,\(a0\),a1,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vssseg7e16.v v0,\(a0\),a1,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vlsseg8e16.v v0,\(a0\),a1,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vssseg8e16.v v0,\(a0\),a1,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vlsseg2e32.v v0,\(a0\),a1,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vssseg2e32.v v0,\(a0\),a1,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vlsseg3e32.v v0,\(a0\),a1,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vssseg3e32.v v0,\(a0\),a1,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vlsseg4e32.v v0,\(a0\),a1,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vssseg4e32.v v0,\(a0\),a1,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vlsseg5e32.v v0,\(a0\),a1,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vssseg5e32.v v0,\(a0\),a1,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vlsseg6e32.v v0,\(a0\),a1,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vssseg6e32.v v0,\(a0\),a1,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vlsseg7e32.v v0,\(a0\),a1,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vssseg7e32.v v0,\(a0\),a1,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vlsseg8e32.v v0,\(a0\),a1,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vssseg8e32.v v0,\(a0\),a1,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vlsseg2e64.v v0,\(a0\),a1,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vssseg2e64.v v0,\(a0\),a1,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vlsseg3e64.v v0,\(a0\),a1,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vssseg3e64.v v0,\(a0\),a1,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vlsseg4e64.v v0,\(a0\),a1,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vssseg4e64.v v0,\(a0\),a1,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vlsseg5e64.v v0,\(a0\),a1,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vssseg5e64.v v0,\(a0\),a1,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vlsseg6e64.v v0,\(a0\),a1,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vssseg6e64.v v0,\(a0\),a1,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vlsseg7e64.v v0,\(a0\),a1,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vssseg7e64.v v0,\(a0\),a1,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vlsseg8e64.v v0,\(a0\),a1,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vssseg8e64.v v0,\(a0\),a1,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vs2 `vloxseg2ei8.v v4,\(a0\),v4'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vloxseg2ei8.v v0,\(a0\),v4,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vs2 `vsoxseg2ei8.v v4,\(a0\),v4'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vsoxseg2ei8.v v0,\(a0\),v4,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vs2 `vloxseg3ei8.v v4,\(a0\),v4'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vloxseg3ei8.v v0,\(a0\),v4,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vs2 `vsoxseg3ei8.v v4,\(a0\),v4'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vsoxseg3ei8.v v0,\(a0\),v4,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vs2 `vloxseg4ei8.v v4,\(a0\),v4'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vloxseg4ei8.v v0,\(a0\),v4,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vs2 `vsoxseg4ei8.v v4,\(a0\),v4'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vsoxseg4ei8.v v0,\(a0\),v4,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vs2 `vloxseg5ei8.v v4,\(a0\),v4'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vloxseg5ei8.v v0,\(a0\),v4,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vs2 `vsoxseg5ei8.v v4,\(a0\),v4'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vsoxseg5ei8.v v0,\(a0\),v4,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vs2 `vloxseg6ei8.v v4,\(a0\),v4'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vloxseg6ei8.v v0,\(a0\),v4,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vs2 `vsoxseg6ei8.v v4,\(a0\),v4'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vsoxseg6ei8.v v0,\(a0\),v4,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vs2 `vloxseg7ei8.v v4,\(a0\),v4'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vloxseg7ei8.v v0,\(a0\),v4,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vs2 `vsoxseg7ei8.v v4,\(a0\),v4'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vsoxseg7ei8.v v0,\(a0\),v4,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vs2 `vloxseg8ei8.v v4,\(a0\),v4'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vloxseg8ei8.v v0,\(a0\),v4,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vs2 `vsoxseg8ei8.v v4,\(a0\),v4'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vsoxseg8ei8.v v0,\(a0\),v4,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vs2 `vloxseg2ei16.v v4,\(a0\),v4'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vloxseg2ei16.v v0,\(a0\),v4,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vs2 `vsoxseg2ei16.v v4,\(a0\),v4'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vsoxseg2ei16.v v0,\(a0\),v4,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vs2 `vloxseg3ei16.v v4,\(a0\),v4'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vloxseg3ei16.v v0,\(a0\),v4,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vs2 `vsoxseg3ei16.v v4,\(a0\),v4'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vsoxseg3ei16.v v0,\(a0\),v4,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vs2 `vloxseg4ei16.v v4,\(a0\),v4'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vloxseg4ei16.v v0,\(a0\),v4,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vs2 `vsoxseg4ei16.v v4,\(a0\),v4'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vsoxseg4ei16.v v0,\(a0\),v4,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vs2 `vloxseg5ei16.v v4,\(a0\),v4'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vloxseg5ei16.v v0,\(a0\),v4,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vs2 `vsoxseg5ei16.v v4,\(a0\),v4'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vsoxseg5ei16.v v0,\(a0\),v4,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vs2 `vloxseg6ei16.v v4,\(a0\),v4'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vloxseg6ei16.v v0,\(a0\),v4,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vs2 `vsoxseg6ei16.v v4,\(a0\),v4'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vsoxseg6ei16.v v0,\(a0\),v4,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vs2 `vloxseg7ei16.v v4,\(a0\),v4'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vloxseg7ei16.v v0,\(a0\),v4,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vs2 `vsoxseg7ei16.v v4,\(a0\),v4'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vsoxseg7ei16.v v0,\(a0\),v4,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vs2 `vloxseg8ei16.v v4,\(a0\),v4'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vloxseg8ei16.v v0,\(a0\),v4,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vs2 `vsoxseg8ei16.v v4,\(a0\),v4'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vsoxseg8ei16.v v0,\(a0\),v4,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vs2 `vloxseg2ei32.v v4,\(a0\),v4'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vloxseg2ei32.v v0,\(a0\),v4,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vs2 `vsoxseg2ei32.v v4,\(a0\),v4'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vsoxseg2ei32.v v0,\(a0\),v4,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vs2 `vloxseg3ei32.v v4,\(a0\),v4'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vloxseg3ei32.v v0,\(a0\),v4,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vs2 `vsoxseg3ei32.v v4,\(a0\),v4'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vsoxseg3ei32.v v0,\(a0\),v4,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vs2 `vloxseg4ei32.v v4,\(a0\),v4'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vloxseg4ei32.v v0,\(a0\),v4,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vs2 `vsoxseg4ei32.v v4,\(a0\),v4'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vsoxseg4ei32.v v0,\(a0\),v4,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vs2 `vloxseg5ei32.v v4,\(a0\),v4'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vloxseg5ei32.v v0,\(a0\),v4,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vs2 `vsoxseg5ei32.v v4,\(a0\),v4'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vsoxseg5ei32.v v0,\(a0\),v4,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vs2 `vloxseg6ei32.v v4,\(a0\),v4'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vloxseg6ei32.v v0,\(a0\),v4,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vs2 `vsoxseg6ei32.v v4,\(a0\),v4'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vsoxseg6ei32.v v0,\(a0\),v4,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vs2 `vloxseg7ei32.v v4,\(a0\),v4'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vloxseg7ei32.v v0,\(a0\),v4,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vs2 `vsoxseg7ei32.v v4,\(a0\),v4'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vsoxseg7ei32.v v0,\(a0\),v4,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vs2 `vloxseg8ei32.v v4,\(a0\),v4'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vloxseg8ei32.v v0,\(a0\),v4,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vs2 `vsoxseg8ei32.v v4,\(a0\),v4'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vsoxseg8ei32.v v0,\(a0\),v4,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vs2 `vloxseg2ei64.v v4,\(a0\),v4'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vloxseg2ei64.v v0,\(a0\),v4,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vs2 `vsoxseg2ei64.v v4,\(a0\),v4'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vsoxseg2ei64.v v0,\(a0\),v4,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vs2 `vloxseg3ei64.v v4,\(a0\),v4'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vloxseg3ei64.v v0,\(a0\),v4,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vs2 `vsoxseg3ei64.v v4,\(a0\),v4'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vsoxseg3ei64.v v0,\(a0\),v4,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vs2 `vloxseg4ei64.v v4,\(a0\),v4'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vloxseg4ei64.v v0,\(a0\),v4,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vs2 `vsoxseg4ei64.v v4,\(a0\),v4'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vsoxseg4ei64.v v0,\(a0\),v4,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vs2 `vloxseg5ei64.v v4,\(a0\),v4'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vloxseg5ei64.v v0,\(a0\),v4,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vs2 `vsoxseg5ei64.v v4,\(a0\),v4'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vsoxseg5ei64.v v0,\(a0\),v4,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vs2 `vloxseg6ei64.v v4,\(a0\),v4'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vloxseg6ei64.v v0,\(a0\),v4,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vs2 `vsoxseg6ei64.v v4,\(a0\),v4'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vsoxseg6ei64.v v0,\(a0\),v4,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vs2 `vloxseg7ei64.v v4,\(a0\),v4'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vloxseg7ei64.v v0,\(a0\),v4,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vs2 `vsoxseg7ei64.v v4,\(a0\),v4'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vsoxseg7ei64.v v0,\(a0\),v4,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vs2 `vloxseg8ei64.v v4,\(a0\),v4'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vloxseg8ei64.v v0,\(a0\),v4,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vs2 `vsoxseg8ei64.v v4,\(a0\),v4'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vsoxseg8ei64.v v0,\(a0\),v4,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vs2 `vluxseg2ei8.v v4,\(a0\),v4'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vluxseg2ei8.v v0,\(a0\),v4,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vs2 `vsuxseg2ei8.v v4,\(a0\),v4'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vsuxseg2ei8.v v0,\(a0\),v4,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vs2 `vluxseg3ei8.v v4,\(a0\),v4'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vluxseg3ei8.v v0,\(a0\),v4,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vs2 `vsuxseg3ei8.v v4,\(a0\),v4'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vsuxseg3ei8.v v0,\(a0\),v4,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vs2 `vluxseg4ei8.v v4,\(a0\),v4'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vluxseg4ei8.v v0,\(a0\),v4,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vs2 `vsuxseg4ei8.v v4,\(a0\),v4'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vsuxseg4ei8.v v0,\(a0\),v4,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vs2 `vluxseg5ei8.v v4,\(a0\),v4'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vluxseg5ei8.v v0,\(a0\),v4,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vs2 `vsuxseg5ei8.v v4,\(a0\),v4'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vsuxseg5ei8.v v0,\(a0\),v4,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vs2 `vluxseg6ei8.v v4,\(a0\),v4'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vluxseg6ei8.v v0,\(a0\),v4,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vs2 `vsuxseg6ei8.v v4,\(a0\),v4'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vsuxseg6ei8.v v0,\(a0\),v4,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vs2 `vluxseg7ei8.v v4,\(a0\),v4'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vluxseg7ei8.v v0,\(a0\),v4,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vs2 `vsuxseg7ei8.v v4,\(a0\),v4'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vsuxseg7ei8.v v0,\(a0\),v4,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vs2 `vluxseg8ei8.v v4,\(a0\),v4'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vluxseg8ei8.v v0,\(a0\),v4,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vs2 `vsuxseg8ei8.v v4,\(a0\),v4'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vsuxseg8ei8.v v0,\(a0\),v4,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vs2 `vluxseg2ei16.v v4,\(a0\),v4'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vluxseg2ei16.v v0,\(a0\),v4,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vs2 `vsuxseg2ei16.v v4,\(a0\),v4'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vsuxseg2ei16.v v0,\(a0\),v4,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vs2 `vluxseg3ei16.v v4,\(a0\),v4'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vluxseg3ei16.v v0,\(a0\),v4,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vs2 `vsuxseg3ei16.v v4,\(a0\),v4'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vsuxseg3ei16.v v0,\(a0\),v4,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vs2 `vluxseg4ei16.v v4,\(a0\),v4'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vluxseg4ei16.v v0,\(a0\),v4,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vs2 `vsuxseg4ei16.v v4,\(a0\),v4'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vsuxseg4ei16.v v0,\(a0\),v4,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vs2 `vluxseg5ei16.v v4,\(a0\),v4'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vluxseg5ei16.v v0,\(a0\),v4,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vs2 `vsuxseg5ei16.v v4,\(a0\),v4'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vsuxseg5ei16.v v0,\(a0\),v4,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vs2 `vluxseg6ei16.v v4,\(a0\),v4'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vluxseg6ei16.v v0,\(a0\),v4,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vs2 `vsuxseg6ei16.v v4,\(a0\),v4'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vsuxseg6ei16.v v0,\(a0\),v4,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vs2 `vluxseg7ei16.v v4,\(a0\),v4'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vluxseg7ei16.v v0,\(a0\),v4,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vs2 `vsuxseg7ei16.v v4,\(a0\),v4'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vsuxseg7ei16.v v0,\(a0\),v4,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vs2 `vluxseg8ei16.v v4,\(a0\),v4'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vluxseg8ei16.v v0,\(a0\),v4,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vs2 `vsuxseg8ei16.v v4,\(a0\),v4'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vsuxseg8ei16.v v0,\(a0\),v4,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vs2 `vluxseg2ei32.v v4,\(a0\),v4'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vluxseg2ei32.v v0,\(a0\),v4,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vs2 `vsuxseg2ei32.v v4,\(a0\),v4'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vsuxseg2ei32.v v0,\(a0\),v4,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vs2 `vluxseg3ei32.v v4,\(a0\),v4'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vluxseg3ei32.v v0,\(a0\),v4,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vs2 `vsuxseg3ei32.v v4,\(a0\),v4'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vsuxseg3ei32.v v0,\(a0\),v4,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vs2 `vluxseg4ei32.v v4,\(a0\),v4'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vluxseg4ei32.v v0,\(a0\),v4,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vs2 `vsuxseg4ei32.v v4,\(a0\),v4'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vsuxseg4ei32.v v0,\(a0\),v4,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vs2 `vluxseg5ei32.v v4,\(a0\),v4'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vluxseg5ei32.v v0,\(a0\),v4,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vs2 `vsuxseg5ei32.v v4,\(a0\),v4'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vsuxseg5ei32.v v0,\(a0\),v4,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vs2 `vluxseg6ei32.v v4,\(a0\),v4'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vluxseg6ei32.v v0,\(a0\),v4,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vs2 `vsuxseg6ei32.v v4,\(a0\),v4'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vsuxseg6ei32.v v0,\(a0\),v4,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vs2 `vluxseg7ei32.v v4,\(a0\),v4'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vluxseg7ei32.v v0,\(a0\),v4,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vs2 `vsuxseg7ei32.v v4,\(a0\),v4'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vsuxseg7ei32.v v0,\(a0\),v4,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vs2 `vluxseg8ei32.v v4,\(a0\),v4'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vluxseg8ei32.v v0,\(a0\),v4,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vs2 `vsuxseg8ei32.v v4,\(a0\),v4'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vsuxseg8ei32.v v0,\(a0\),v4,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vs2 `vluxseg2ei64.v v4,\(a0\),v4'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vluxseg2ei64.v v0,\(a0\),v4,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vs2 `vsuxseg2ei64.v v4,\(a0\),v4'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vsuxseg2ei64.v v0,\(a0\),v4,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vs2 `vluxseg3ei64.v v4,\(a0\),v4'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vluxseg3ei64.v v0,\(a0\),v4,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vs2 `vsuxseg3ei64.v v4,\(a0\),v4'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vsuxseg3ei64.v v0,\(a0\),v4,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vs2 `vluxseg4ei64.v v4,\(a0\),v4'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vluxseg4ei64.v v0,\(a0\),v4,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vs2 `vsuxseg4ei64.v v4,\(a0\),v4'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vsuxseg4ei64.v v0,\(a0\),v4,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vs2 `vluxseg5ei64.v v4,\(a0\),v4'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vluxseg5ei64.v v0,\(a0\),v4,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vs2 `vsuxseg5ei64.v v4,\(a0\),v4'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vsuxseg5ei64.v v0,\(a0\),v4,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vs2 `vluxseg6ei64.v v4,\(a0\),v4'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vluxseg6ei64.v v0,\(a0\),v4,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vs2 `vsuxseg6ei64.v v4,\(a0\),v4'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vsuxseg6ei64.v v0,\(a0\),v4,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vs2 `vluxseg7ei64.v v4,\(a0\),v4'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vluxseg7ei64.v v0,\(a0\),v4,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vs2 `vsuxseg7ei64.v v4,\(a0\),v4'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vsuxseg7ei64.v v0,\(a0\),v4,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vs2 `vluxseg8ei64.v v4,\(a0\),v4'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vluxseg8ei64.v v0,\(a0\),v4,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vs2 `vsuxseg8ei64.v v4,\(a0\),v4'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vsuxseg8ei64.v v0,\(a0\),v4,v0.t'
|
||||||
|
.*Error: illegal operands vd must be multiple of nf `vl2r.v v31,\(a0\)'
|
||||||
|
.*Error: illegal operands vd must be multiple of nf `vl2re8.v v31,\(a0\)'
|
||||||
|
.*Error: illegal operands vd must be multiple of nf `vl2re16.v v31,\(a0\)'
|
||||||
|
.*Error: illegal operands vd must be multiple of nf `vl2re32.v v31,\(a0\)'
|
||||||
|
.*Error: illegal operands vd must be multiple of nf `vl2re64.v v31,\(a0\)'
|
||||||
|
.*Error: illegal operands vd must be multiple of nf `vl4r.v v30,\(a0\)'
|
||||||
|
.*Error: illegal operands vd must be multiple of nf `vl4re8.v v30,\(a0\)'
|
||||||
|
.*Error: illegal operands vd must be multiple of nf `vl4re16.v v30,\(a0\)'
|
||||||
|
.*Error: illegal operands vd must be multiple of nf `vl4re32.v v30,\(a0\)'
|
||||||
|
.*Error: illegal operands vd must be multiple of nf `vl4re64.v v30,\(a0\)'
|
||||||
|
.*Error: illegal operands vd must be multiple of nf `vl8r.v v26,\(a0\)'
|
||||||
|
.*Error: illegal operands vd must be multiple of nf `vl8re8.v v26,\(a0\)'
|
||||||
|
.*Error: illegal operands vd must be multiple of nf `vl8re16.v v26,\(a0\)'
|
||||||
|
.*Error: illegal operands vd must be multiple of nf `vl8re32.v v26,\(a0\)'
|
||||||
|
.*Error: illegal operands vd must be multiple of nf `vl8re64.v v26,\(a0\)'
|
||||||
|
.*Error: illegal operands vd must be multiple of nf `vs2r.v v31,\(a0\)'
|
||||||
|
.*Error: illegal operands vd must be multiple of nf `vs4r.v v30,\(a0\)'
|
||||||
|
.*Error: illegal operands vd must be multiple of nf `vs8r.v v26,\(a0\)'
|
||||||
481
gas/testsuite/gas/riscv/extended/vector-insns-fail-load-store.s
Normal file
481
gas/testsuite/gas/riscv/extended/vector-insns-fail-load-store.s
Normal file
@@ -0,0 +1,481 @@
|
|||||||
|
# Vector Unit-Stride Loads and Stores
|
||||||
|
|
||||||
|
vle8.v v0, (a0), v0.t # vd overlap vm
|
||||||
|
vle8ff.v v0, (a0), v0.t # vd overlap vm
|
||||||
|
vle16.v v0, (a0), v0.t
|
||||||
|
vle16ff.v v0, (a0), v0.t
|
||||||
|
vle32.v v0, (a0), v0.t
|
||||||
|
vle32ff.v v0, (a0), v0.t
|
||||||
|
vle64.v v0, (a0), v0.t
|
||||||
|
vle64ff.v v0, (a0), v0.t
|
||||||
|
|
||||||
|
vse8.v v0, (a0), v0.t # vd overlap vm
|
||||||
|
vse16.v v0, (a0), v0.t
|
||||||
|
vse32.v v0, (a0), v0.t
|
||||||
|
vse64.v v0, (a0), v0.t
|
||||||
|
|
||||||
|
# Vector Strided Loads and Stores
|
||||||
|
|
||||||
|
vlse8.v v0, (a0), a1, v0.t # vd overlap vm
|
||||||
|
vlse16.v v0, (a0), a1, v0.t
|
||||||
|
vlse32.v v0, (a0), a1, v0.t
|
||||||
|
vlse64.v v0, (a0), a1, v0.t
|
||||||
|
|
||||||
|
vsse8.v v0, (a0), a1, v0.t
|
||||||
|
vsse16.v v0, (a0), a1, v0.t
|
||||||
|
vsse32.v v0, (a0), a1, v0.t
|
||||||
|
vsse64.v v0, (a0), a1, v0.t
|
||||||
|
|
||||||
|
# Vector Ordered Indexed Loads and Stores
|
||||||
|
|
||||||
|
vloxei8.v v4, (a0), v4 # OK
|
||||||
|
vloxei8.v v0, (a0), v4, v0.t # vd overlap vm
|
||||||
|
vloxei16.v v4, (a0), v4
|
||||||
|
vloxei16.v v0, (a0), v4, v0.t
|
||||||
|
vloxei32.v v4, (a0), v4
|
||||||
|
vloxei32.v v0, (a0), v4, v0.t
|
||||||
|
vloxei64.v v4, (a0), v4
|
||||||
|
vloxei64.v v0, (a0), v4, v0.t
|
||||||
|
|
||||||
|
vsoxei8.v v4, (a0), v4
|
||||||
|
vsoxei8.v v0, (a0), v4, v0.t
|
||||||
|
vsoxei16.v v4, (a0), v4
|
||||||
|
vsoxei16.v v0, (a0), v4, v0.t
|
||||||
|
vsoxei32.v v4, (a0), v4
|
||||||
|
vsoxei32.v v0, (a0), v4, v0.t
|
||||||
|
vsoxei64.v v4, (a0), v4
|
||||||
|
vsoxei64.v v0, (a0), v4, v0.t
|
||||||
|
|
||||||
|
# Vector Unordered Indexed Loads and Stores
|
||||||
|
|
||||||
|
vluxei8.v v4, (a0), v4 # OK
|
||||||
|
vluxei8.v v0, (a0), v4, v0.t # vd overlap vm
|
||||||
|
vluxei16.v v4, (a0), v4
|
||||||
|
vluxei16.v v0, (a0), v4, v0.t
|
||||||
|
vluxei32.v v4, (a0), v4
|
||||||
|
vluxei32.v v0, (a0), v4, v0.t
|
||||||
|
vluxei64.v v4, (a0), v4
|
||||||
|
vluxei64.v v0, (a0), v4, v0.t
|
||||||
|
|
||||||
|
vsuxei8.v v4, (a0), v4
|
||||||
|
vsuxei8.v v0, (a0), v4, v0.t
|
||||||
|
vsuxei16.v v4, (a0), v4
|
||||||
|
vsuxei16.v v0, (a0), v4, v0.t
|
||||||
|
vsuxei32.v v4, (a0), v4
|
||||||
|
vsuxei32.v v0, (a0), v4, v0.t
|
||||||
|
vsuxei64.v v4, (a0), v4
|
||||||
|
vsuxei64.v v0, (a0), v4, v0.t
|
||||||
|
|
||||||
|
# Vector Unit-Stride Segment Loads and Stores
|
||||||
|
|
||||||
|
vlseg2e8.v v0, (a0), v0.t # vd overlap vm
|
||||||
|
vsseg2e8.v v0, (a0), v0.t # vd overlap vm
|
||||||
|
vlseg2e8ff.v v0, (a0), v0.t # vd overlap vm
|
||||||
|
vlseg3e8.v v0, (a0), v0.t
|
||||||
|
vsseg3e8.v v0, (a0), v0.t
|
||||||
|
vlseg3e8ff.v v0, (a0), v0.t
|
||||||
|
vlseg4e8.v v0, (a0), v0.t
|
||||||
|
vsseg4e8.v v0, (a0), v0.t
|
||||||
|
vlseg4e8ff.v v0, (a0), v0.t
|
||||||
|
vlseg5e8.v v0, (a0), v0.t
|
||||||
|
vsseg5e8.v v0, (a0), v0.t
|
||||||
|
vlseg5e8ff.v v0, (a0), v0.t
|
||||||
|
vlseg6e8.v v0, (a0), v0.t
|
||||||
|
vsseg6e8.v v0, (a0), v0.t
|
||||||
|
vlseg6e8ff.v v0, (a0), v0.t
|
||||||
|
vlseg7e8.v v0, (a0), v0.t
|
||||||
|
vsseg7e8.v v0, (a0), v0.t
|
||||||
|
vlseg7e8ff.v v0, (a0), v0.t
|
||||||
|
vlseg8e8.v v0, (a0), v0.t
|
||||||
|
vsseg8e8.v v0, (a0), v0.t
|
||||||
|
vlseg8e8ff.v v0, (a0), v0.t
|
||||||
|
|
||||||
|
vlseg2e16.v v0, (a0), v0.t
|
||||||
|
vsseg2e16.v v0, (a0), v0.t
|
||||||
|
vlseg2e16ff.v v0, (a0), v0.t
|
||||||
|
vlseg3e16.v v0, (a0), v0.t
|
||||||
|
vsseg3e16.v v0, (a0), v0.t
|
||||||
|
vlseg3e16ff.v v0, (a0), v0.t
|
||||||
|
vlseg4e16.v v0, (a0), v0.t
|
||||||
|
vsseg4e16.v v0, (a0), v0.t
|
||||||
|
vlseg4e16ff.v v0, (a0), v0.t
|
||||||
|
vlseg5e16.v v0, (a0), v0.t
|
||||||
|
vsseg5e16.v v0, (a0), v0.t
|
||||||
|
vlseg5e16ff.v v0, (a0), v0.t
|
||||||
|
vlseg6e16.v v0, (a0), v0.t
|
||||||
|
vsseg6e16.v v0, (a0), v0.t
|
||||||
|
vlseg6e16ff.v v0, (a0), v0.t
|
||||||
|
vlseg7e16.v v0, (a0), v0.t
|
||||||
|
vsseg7e16.v v0, (a0), v0.t
|
||||||
|
vlseg7e16ff.v v0, (a0), v0.t
|
||||||
|
vlseg8e16.v v0, (a0), v0.t
|
||||||
|
vsseg8e16.v v0, (a0), v0.t
|
||||||
|
vlseg8e16ff.v v0, (a0), v0.t
|
||||||
|
|
||||||
|
vlseg2e32.v v0, (a0), v0.t
|
||||||
|
vsseg2e32.v v0, (a0), v0.t
|
||||||
|
vlseg2e32ff.v v0, (a0), v0.t
|
||||||
|
vlseg3e32.v v0, (a0), v0.t
|
||||||
|
vsseg3e32.v v0, (a0), v0.t
|
||||||
|
vlseg3e32ff.v v0, (a0), v0.t
|
||||||
|
vlseg4e32.v v0, (a0), v0.t
|
||||||
|
vsseg4e32.v v0, (a0), v0.t
|
||||||
|
vlseg4e32ff.v v0, (a0), v0.t
|
||||||
|
vlseg5e32.v v0, (a0), v0.t
|
||||||
|
vsseg5e32.v v0, (a0), v0.t
|
||||||
|
vlseg5e32ff.v v0, (a0), v0.t
|
||||||
|
vlseg6e32.v v0, (a0), v0.t
|
||||||
|
vsseg6e32.v v0, (a0), v0.t
|
||||||
|
vlseg6e32ff.v v0, (a0), v0.t
|
||||||
|
vlseg7e32.v v0, (a0), v0.t
|
||||||
|
vsseg7e32.v v0, (a0), v0.t
|
||||||
|
vlseg7e32ff.v v0, (a0), v0.t
|
||||||
|
vlseg8e32.v v0, (a0), v0.t
|
||||||
|
vsseg8e32.v v0, (a0), v0.t
|
||||||
|
vlseg8e32ff.v v0, (a0), v0.t
|
||||||
|
|
||||||
|
vlseg2e64.v v0, (a0), v0.t
|
||||||
|
vsseg2e64.v v0, (a0), v0.t
|
||||||
|
vlseg2e64ff.v v0, (a0), v0.t
|
||||||
|
vlseg3e64.v v0, (a0), v0.t
|
||||||
|
vsseg3e64.v v0, (a0), v0.t
|
||||||
|
vlseg3e64ff.v v0, (a0), v0.t
|
||||||
|
vlseg4e64.v v0, (a0), v0.t
|
||||||
|
vsseg4e64.v v0, (a0), v0.t
|
||||||
|
vlseg4e64ff.v v0, (a0), v0.t
|
||||||
|
vlseg5e64.v v0, (a0), v0.t
|
||||||
|
vsseg5e64.v v0, (a0), v0.t
|
||||||
|
vlseg5e64ff.v v0, (a0), v0.t
|
||||||
|
vlseg6e64.v v0, (a0), v0.t
|
||||||
|
vsseg6e64.v v0, (a0), v0.t
|
||||||
|
vlseg6e64ff.v v0, (a0), v0.t
|
||||||
|
vlseg7e64.v v0, (a0), v0.t
|
||||||
|
vsseg7e64.v v0, (a0), v0.t
|
||||||
|
vlseg7e64ff.v v0, (a0), v0.t
|
||||||
|
vlseg8e64.v v0, (a0), v0.t
|
||||||
|
vsseg8e64.v v0, (a0), v0.t
|
||||||
|
vlseg8e64ff.v v0, (a0), v0.t
|
||||||
|
|
||||||
|
# Vector Strided Segment Loads and Stores
|
||||||
|
|
||||||
|
vlsseg2e8.v v0, (a0), a1, v0.t # vd overlap vm
|
||||||
|
vssseg2e8.v v0, (a0), a1, v0.t # vd overlap vm
|
||||||
|
vlsseg3e8.v v0, (a0), a1, v0.t
|
||||||
|
vssseg3e8.v v0, (a0), a1, v0.t
|
||||||
|
vlsseg4e8.v v0, (a0), a1, v0.t
|
||||||
|
vssseg4e8.v v0, (a0), a1, v0.t
|
||||||
|
vlsseg5e8.v v0, (a0), a1, v0.t
|
||||||
|
vssseg5e8.v v0, (a0), a1, v0.t
|
||||||
|
vlsseg6e8.v v0, (a0), a1, v0.t
|
||||||
|
vssseg6e8.v v0, (a0), a1, v0.t
|
||||||
|
vlsseg7e8.v v0, (a0), a1, v0.t
|
||||||
|
vssseg7e8.v v0, (a0), a1, v0.t
|
||||||
|
vlsseg8e8.v v0, (a0), a1, v0.t
|
||||||
|
vssseg8e8.v v0, (a0), a1, v0.t
|
||||||
|
|
||||||
|
vlsseg2e16.v v0, (a0), a1, v0.t
|
||||||
|
vssseg2e16.v v0, (a0), a1, v0.t
|
||||||
|
vlsseg3e16.v v0, (a0), a1, v0.t
|
||||||
|
vssseg3e16.v v0, (a0), a1, v0.t
|
||||||
|
vlsseg4e16.v v0, (a0), a1, v0.t
|
||||||
|
vssseg4e16.v v0, (a0), a1, v0.t
|
||||||
|
vlsseg5e16.v v0, (a0), a1, v0.t
|
||||||
|
vssseg5e16.v v0, (a0), a1, v0.t
|
||||||
|
vlsseg6e16.v v0, (a0), a1, v0.t
|
||||||
|
vssseg6e16.v v0, (a0), a1, v0.t
|
||||||
|
vlsseg7e16.v v0, (a0), a1, v0.t
|
||||||
|
vssseg7e16.v v0, (a0), a1, v0.t
|
||||||
|
vlsseg8e16.v v0, (a0), a1, v0.t
|
||||||
|
vssseg8e16.v v0, (a0), a1, v0.t
|
||||||
|
|
||||||
|
vlsseg2e32.v v0, (a0), a1, v0.t
|
||||||
|
vssseg2e32.v v0, (a0), a1, v0.t
|
||||||
|
vlsseg3e32.v v0, (a0), a1, v0.t
|
||||||
|
vssseg3e32.v v0, (a0), a1, v0.t
|
||||||
|
vlsseg4e32.v v0, (a0), a1, v0.t
|
||||||
|
vssseg4e32.v v0, (a0), a1, v0.t
|
||||||
|
vlsseg5e32.v v0, (a0), a1, v0.t
|
||||||
|
vssseg5e32.v v0, (a0), a1, v0.t
|
||||||
|
vlsseg6e32.v v0, (a0), a1, v0.t
|
||||||
|
vssseg6e32.v v0, (a0), a1, v0.t
|
||||||
|
vlsseg7e32.v v0, (a0), a1, v0.t
|
||||||
|
vssseg7e32.v v0, (a0), a1, v0.t
|
||||||
|
vlsseg8e32.v v0, (a0), a1, v0.t
|
||||||
|
vssseg8e32.v v0, (a0), a1, v0.t
|
||||||
|
|
||||||
|
vlsseg2e64.v v0, (a0), a1, v0.t
|
||||||
|
vssseg2e64.v v0, (a0), a1, v0.t
|
||||||
|
vlsseg3e64.v v0, (a0), a1, v0.t
|
||||||
|
vssseg3e64.v v0, (a0), a1, v0.t
|
||||||
|
vlsseg4e64.v v0, (a0), a1, v0.t
|
||||||
|
vssseg4e64.v v0, (a0), a1, v0.t
|
||||||
|
vlsseg5e64.v v0, (a0), a1, v0.t
|
||||||
|
vssseg5e64.v v0, (a0), a1, v0.t
|
||||||
|
vlsseg6e64.v v0, (a0), a1, v0.t
|
||||||
|
vssseg6e64.v v0, (a0), a1, v0.t
|
||||||
|
vlsseg7e64.v v0, (a0), a1, v0.t
|
||||||
|
vssseg7e64.v v0, (a0), a1, v0.t
|
||||||
|
vlsseg8e64.v v0, (a0), a1, v0.t
|
||||||
|
vssseg8e64.v v0, (a0), a1, v0.t
|
||||||
|
|
||||||
|
# Vector Ordered Indexed Segment Loads and Stores
|
||||||
|
|
||||||
|
vloxseg2ei8.v v4, (a0), v4 # vd overlap vs2
|
||||||
|
vloxseg2ei8.v v0, (a0), v4, v0.t # vd overlap vm
|
||||||
|
vsoxseg2ei8.v v4, (a0), v4 # vd overlap vs2
|
||||||
|
vsoxseg2ei8.v v0, (a0), v4, v0.t # vd overlap vm
|
||||||
|
vloxseg3ei8.v v4, (a0), v4
|
||||||
|
vloxseg3ei8.v v0, (a0), v4, v0.t
|
||||||
|
vsoxseg3ei8.v v4, (a0), v4
|
||||||
|
vsoxseg3ei8.v v0, (a0), v4, v0.t
|
||||||
|
vloxseg4ei8.v v4, (a0), v4
|
||||||
|
vloxseg4ei8.v v0, (a0), v4, v0.t
|
||||||
|
vsoxseg4ei8.v v4, (a0), v4
|
||||||
|
vsoxseg4ei8.v v0, (a0), v4, v0.t
|
||||||
|
vloxseg5ei8.v v4, (a0), v4
|
||||||
|
vloxseg5ei8.v v0, (a0), v4, v0.t
|
||||||
|
vsoxseg5ei8.v v4, (a0), v4
|
||||||
|
vsoxseg5ei8.v v0, (a0), v4, v0.t
|
||||||
|
vloxseg6ei8.v v4, (a0), v4
|
||||||
|
vloxseg6ei8.v v0, (a0), v4, v0.t
|
||||||
|
vsoxseg6ei8.v v4, (a0), v4
|
||||||
|
vsoxseg6ei8.v v0, (a0), v4, v0.t
|
||||||
|
vloxseg7ei8.v v4, (a0), v4
|
||||||
|
vloxseg7ei8.v v0, (a0), v4, v0.t
|
||||||
|
vsoxseg7ei8.v v4, (a0), v4
|
||||||
|
vsoxseg7ei8.v v0, (a0), v4, v0.t
|
||||||
|
vloxseg8ei8.v v4, (a0), v4
|
||||||
|
vloxseg8ei8.v v0, (a0), v4, v0.t
|
||||||
|
vsoxseg8ei8.v v4, (a0), v4
|
||||||
|
vsoxseg8ei8.v v0, (a0), v4, v0.t
|
||||||
|
|
||||||
|
vloxseg2ei16.v v4, (a0), v4
|
||||||
|
vloxseg2ei16.v v0, (a0), v4, v0.t
|
||||||
|
vsoxseg2ei16.v v4, (a0), v4
|
||||||
|
vsoxseg2ei16.v v0, (a0), v4, v0.t
|
||||||
|
vloxseg3ei16.v v4, (a0), v4
|
||||||
|
vloxseg3ei16.v v0, (a0), v4, v0.t
|
||||||
|
vsoxseg3ei16.v v4, (a0), v4
|
||||||
|
vsoxseg3ei16.v v0, (a0), v4, v0.t
|
||||||
|
vloxseg4ei16.v v4, (a0), v4
|
||||||
|
vloxseg4ei16.v v0, (a0), v4, v0.t
|
||||||
|
vsoxseg4ei16.v v4, (a0), v4
|
||||||
|
vsoxseg4ei16.v v0, (a0), v4, v0.t
|
||||||
|
vloxseg5ei16.v v4, (a0), v4
|
||||||
|
vloxseg5ei16.v v0, (a0), v4, v0.t
|
||||||
|
vsoxseg5ei16.v v4, (a0), v4
|
||||||
|
vsoxseg5ei16.v v0, (a0), v4, v0.t
|
||||||
|
vloxseg6ei16.v v4, (a0), v4
|
||||||
|
vloxseg6ei16.v v0, (a0), v4, v0.t
|
||||||
|
vsoxseg6ei16.v v4, (a0), v4
|
||||||
|
vsoxseg6ei16.v v0, (a0), v4, v0.t
|
||||||
|
vloxseg7ei16.v v4, (a0), v4
|
||||||
|
vloxseg7ei16.v v0, (a0), v4, v0.t
|
||||||
|
vsoxseg7ei16.v v4, (a0), v4
|
||||||
|
vsoxseg7ei16.v v0, (a0), v4, v0.t
|
||||||
|
vloxseg8ei16.v v4, (a0), v4
|
||||||
|
vloxseg8ei16.v v0, (a0), v4, v0.t
|
||||||
|
vsoxseg8ei16.v v4, (a0), v4
|
||||||
|
vsoxseg8ei16.v v0, (a0), v4, v0.t
|
||||||
|
|
||||||
|
vloxseg2ei32.v v4, (a0), v4
|
||||||
|
vloxseg2ei32.v v0, (a0), v4, v0.t
|
||||||
|
vsoxseg2ei32.v v4, (a0), v4
|
||||||
|
vsoxseg2ei32.v v0, (a0), v4, v0.t
|
||||||
|
vloxseg3ei32.v v4, (a0), v4
|
||||||
|
vloxseg3ei32.v v0, (a0), v4, v0.t
|
||||||
|
vsoxseg3ei32.v v4, (a0), v4
|
||||||
|
vsoxseg3ei32.v v0, (a0), v4, v0.t
|
||||||
|
vloxseg4ei32.v v4, (a0), v4
|
||||||
|
vloxseg4ei32.v v0, (a0), v4, v0.t
|
||||||
|
vsoxseg4ei32.v v4, (a0), v4
|
||||||
|
vsoxseg4ei32.v v0, (a0), v4, v0.t
|
||||||
|
vloxseg5ei32.v v4, (a0), v4
|
||||||
|
vloxseg5ei32.v v0, (a0), v4, v0.t
|
||||||
|
vsoxseg5ei32.v v4, (a0), v4
|
||||||
|
vsoxseg5ei32.v v0, (a0), v4, v0.t
|
||||||
|
vloxseg6ei32.v v4, (a0), v4
|
||||||
|
vloxseg6ei32.v v0, (a0), v4, v0.t
|
||||||
|
vsoxseg6ei32.v v4, (a0), v4
|
||||||
|
vsoxseg6ei32.v v0, (a0), v4, v0.t
|
||||||
|
vloxseg7ei32.v v4, (a0), v4
|
||||||
|
vloxseg7ei32.v v0, (a0), v4, v0.t
|
||||||
|
vsoxseg7ei32.v v4, (a0), v4
|
||||||
|
vsoxseg7ei32.v v0, (a0), v4, v0.t
|
||||||
|
vloxseg8ei32.v v4, (a0), v4
|
||||||
|
vloxseg8ei32.v v0, (a0), v4, v0.t
|
||||||
|
vsoxseg8ei32.v v4, (a0), v4
|
||||||
|
vsoxseg8ei32.v v0, (a0), v4, v0.t
|
||||||
|
|
||||||
|
vloxseg2ei64.v v4, (a0), v4
|
||||||
|
vloxseg2ei64.v v0, (a0), v4, v0.t
|
||||||
|
vsoxseg2ei64.v v4, (a0), v4
|
||||||
|
vsoxseg2ei64.v v0, (a0), v4, v0.t
|
||||||
|
vloxseg3ei64.v v4, (a0), v4
|
||||||
|
vloxseg3ei64.v v0, (a0), v4, v0.t
|
||||||
|
vsoxseg3ei64.v v4, (a0), v4
|
||||||
|
vsoxseg3ei64.v v0, (a0), v4, v0.t
|
||||||
|
vloxseg4ei64.v v4, (a0), v4
|
||||||
|
vloxseg4ei64.v v0, (a0), v4, v0.t
|
||||||
|
vsoxseg4ei64.v v4, (a0), v4
|
||||||
|
vsoxseg4ei64.v v0, (a0), v4, v0.t
|
||||||
|
vloxseg5ei64.v v4, (a0), v4
|
||||||
|
vloxseg5ei64.v v0, (a0), v4, v0.t
|
||||||
|
vsoxseg5ei64.v v4, (a0), v4
|
||||||
|
vsoxseg5ei64.v v0, (a0), v4, v0.t
|
||||||
|
vloxseg6ei64.v v4, (a0), v4
|
||||||
|
vloxseg6ei64.v v0, (a0), v4, v0.t
|
||||||
|
vsoxseg6ei64.v v4, (a0), v4
|
||||||
|
vsoxseg6ei64.v v0, (a0), v4, v0.t
|
||||||
|
vloxseg7ei64.v v4, (a0), v4
|
||||||
|
vloxseg7ei64.v v0, (a0), v4, v0.t
|
||||||
|
vsoxseg7ei64.v v4, (a0), v4
|
||||||
|
vsoxseg7ei64.v v0, (a0), v4, v0.t
|
||||||
|
vloxseg8ei64.v v4, (a0), v4
|
||||||
|
vloxseg8ei64.v v0, (a0), v4, v0.t
|
||||||
|
vsoxseg8ei64.v v4, (a0), v4
|
||||||
|
vsoxseg8ei64.v v0, (a0), v4, v0.t
|
||||||
|
|
||||||
|
# Vector Unordered Indexed Segment Loads and Stores
|
||||||
|
|
||||||
|
vluxseg2ei8.v v4, (a0), v4 # vd overlap vs2
|
||||||
|
vluxseg2ei8.v v0, (a0), v4, v0.t # vd overlap vm
|
||||||
|
vsuxseg2ei8.v v4, (a0), v4 # vd overlap vs2
|
||||||
|
vsuxseg2ei8.v v0, (a0), v4, v0.t # vd overlap vm
|
||||||
|
vluxseg3ei8.v v4, (a0), v4
|
||||||
|
vluxseg3ei8.v v0, (a0), v4, v0.t
|
||||||
|
vsuxseg3ei8.v v4, (a0), v4
|
||||||
|
vsuxseg3ei8.v v0, (a0), v4, v0.t
|
||||||
|
vluxseg4ei8.v v4, (a0), v4
|
||||||
|
vluxseg4ei8.v v0, (a0), v4, v0.t
|
||||||
|
vsuxseg4ei8.v v4, (a0), v4
|
||||||
|
vsuxseg4ei8.v v0, (a0), v4, v0.t
|
||||||
|
vluxseg5ei8.v v4, (a0), v4
|
||||||
|
vluxseg5ei8.v v0, (a0), v4, v0.t
|
||||||
|
vsuxseg5ei8.v v4, (a0), v4
|
||||||
|
vsuxseg5ei8.v v0, (a0), v4, v0.t
|
||||||
|
vluxseg6ei8.v v4, (a0), v4
|
||||||
|
vluxseg6ei8.v v0, (a0), v4, v0.t
|
||||||
|
vsuxseg6ei8.v v4, (a0), v4
|
||||||
|
vsuxseg6ei8.v v0, (a0), v4, v0.t
|
||||||
|
vluxseg7ei8.v v4, (a0), v4
|
||||||
|
vluxseg7ei8.v v0, (a0), v4, v0.t
|
||||||
|
vsuxseg7ei8.v v4, (a0), v4
|
||||||
|
vsuxseg7ei8.v v0, (a0), v4, v0.t
|
||||||
|
vluxseg8ei8.v v4, (a0), v4
|
||||||
|
vluxseg8ei8.v v0, (a0), v4, v0.t
|
||||||
|
vsuxseg8ei8.v v4, (a0), v4
|
||||||
|
vsuxseg8ei8.v v0, (a0), v4, v0.t
|
||||||
|
|
||||||
|
vluxseg2ei16.v v4, (a0), v4
|
||||||
|
vluxseg2ei16.v v0, (a0), v4, v0.t
|
||||||
|
vsuxseg2ei16.v v4, (a0), v4
|
||||||
|
vsuxseg2ei16.v v0, (a0), v4, v0.t
|
||||||
|
vluxseg3ei16.v v4, (a0), v4
|
||||||
|
vluxseg3ei16.v v0, (a0), v4, v0.t
|
||||||
|
vsuxseg3ei16.v v4, (a0), v4
|
||||||
|
vsuxseg3ei16.v v0, (a0), v4, v0.t
|
||||||
|
vluxseg4ei16.v v4, (a0), v4
|
||||||
|
vluxseg4ei16.v v0, (a0), v4, v0.t
|
||||||
|
vsuxseg4ei16.v v4, (a0), v4
|
||||||
|
vsuxseg4ei16.v v0, (a0), v4, v0.t
|
||||||
|
vluxseg5ei16.v v4, (a0), v4
|
||||||
|
vluxseg5ei16.v v0, (a0), v4, v0.t
|
||||||
|
vsuxseg5ei16.v v4, (a0), v4
|
||||||
|
vsuxseg5ei16.v v0, (a0), v4, v0.t
|
||||||
|
vluxseg6ei16.v v4, (a0), v4
|
||||||
|
vluxseg6ei16.v v0, (a0), v4, v0.t
|
||||||
|
vsuxseg6ei16.v v4, (a0), v4
|
||||||
|
vsuxseg6ei16.v v0, (a0), v4, v0.t
|
||||||
|
vluxseg7ei16.v v4, (a0), v4
|
||||||
|
vluxseg7ei16.v v0, (a0), v4, v0.t
|
||||||
|
vsuxseg7ei16.v v4, (a0), v4
|
||||||
|
vsuxseg7ei16.v v0, (a0), v4, v0.t
|
||||||
|
vluxseg8ei16.v v4, (a0), v4
|
||||||
|
vluxseg8ei16.v v0, (a0), v4, v0.t
|
||||||
|
vsuxseg8ei16.v v4, (a0), v4
|
||||||
|
vsuxseg8ei16.v v0, (a0), v4, v0.t
|
||||||
|
|
||||||
|
vluxseg2ei32.v v4, (a0), v4
|
||||||
|
vluxseg2ei32.v v0, (a0), v4, v0.t
|
||||||
|
vsuxseg2ei32.v v4, (a0), v4
|
||||||
|
vsuxseg2ei32.v v0, (a0), v4, v0.t
|
||||||
|
vluxseg3ei32.v v4, (a0), v4
|
||||||
|
vluxseg3ei32.v v0, (a0), v4, v0.t
|
||||||
|
vsuxseg3ei32.v v4, (a0), v4
|
||||||
|
vsuxseg3ei32.v v0, (a0), v4, v0.t
|
||||||
|
vluxseg4ei32.v v4, (a0), v4
|
||||||
|
vluxseg4ei32.v v0, (a0), v4, v0.t
|
||||||
|
vsuxseg4ei32.v v4, (a0), v4
|
||||||
|
vsuxseg4ei32.v v0, (a0), v4, v0.t
|
||||||
|
vluxseg5ei32.v v4, (a0), v4
|
||||||
|
vluxseg5ei32.v v0, (a0), v4, v0.t
|
||||||
|
vsuxseg5ei32.v v4, (a0), v4
|
||||||
|
vsuxseg5ei32.v v0, (a0), v4, v0.t
|
||||||
|
vluxseg6ei32.v v4, (a0), v4
|
||||||
|
vluxseg6ei32.v v0, (a0), v4, v0.t
|
||||||
|
vsuxseg6ei32.v v4, (a0), v4
|
||||||
|
vsuxseg6ei32.v v0, (a0), v4, v0.t
|
||||||
|
vluxseg7ei32.v v4, (a0), v4
|
||||||
|
vluxseg7ei32.v v0, (a0), v4, v0.t
|
||||||
|
vsuxseg7ei32.v v4, (a0), v4
|
||||||
|
vsuxseg7ei32.v v0, (a0), v4, v0.t
|
||||||
|
vluxseg8ei32.v v4, (a0), v4
|
||||||
|
vluxseg8ei32.v v0, (a0), v4, v0.t
|
||||||
|
vsuxseg8ei32.v v4, (a0), v4
|
||||||
|
vsuxseg8ei32.v v0, (a0), v4, v0.t
|
||||||
|
|
||||||
|
vluxseg2ei64.v v4, (a0), v4
|
||||||
|
vluxseg2ei64.v v0, (a0), v4, v0.t
|
||||||
|
vsuxseg2ei64.v v4, (a0), v4
|
||||||
|
vsuxseg2ei64.v v0, (a0), v4, v0.t
|
||||||
|
vluxseg3ei64.v v4, (a0), v4
|
||||||
|
vluxseg3ei64.v v0, (a0), v4, v0.t
|
||||||
|
vsuxseg3ei64.v v4, (a0), v4
|
||||||
|
vsuxseg3ei64.v v0, (a0), v4, v0.t
|
||||||
|
vluxseg4ei64.v v4, (a0), v4
|
||||||
|
vluxseg4ei64.v v0, (a0), v4, v0.t
|
||||||
|
vsuxseg4ei64.v v4, (a0), v4
|
||||||
|
vsuxseg4ei64.v v0, (a0), v4, v0.t
|
||||||
|
vluxseg5ei64.v v4, (a0), v4
|
||||||
|
vluxseg5ei64.v v0, (a0), v4, v0.t
|
||||||
|
vsuxseg5ei64.v v4, (a0), v4
|
||||||
|
vsuxseg5ei64.v v0, (a0), v4, v0.t
|
||||||
|
vluxseg6ei64.v v4, (a0), v4
|
||||||
|
vluxseg6ei64.v v0, (a0), v4, v0.t
|
||||||
|
vsuxseg6ei64.v v4, (a0), v4
|
||||||
|
vsuxseg6ei64.v v0, (a0), v4, v0.t
|
||||||
|
vluxseg7ei64.v v4, (a0), v4
|
||||||
|
vluxseg7ei64.v v0, (a0), v4, v0.t
|
||||||
|
vsuxseg7ei64.v v4, (a0), v4
|
||||||
|
vsuxseg7ei64.v v0, (a0), v4, v0.t
|
||||||
|
vluxseg8ei64.v v4, (a0), v4
|
||||||
|
vluxseg8ei64.v v0, (a0), v4, v0.t
|
||||||
|
vsuxseg8ei64.v v4, (a0), v4
|
||||||
|
vsuxseg8ei64.v v0, (a0), v4, v0.t
|
||||||
|
|
||||||
|
# Vector Load/Store Whole Register Instructions
|
||||||
|
|
||||||
|
vl1r.v v31, (a0) # OK
|
||||||
|
|
||||||
|
vl2r.v v31, (a0) # vd must be aligned to 2
|
||||||
|
vl2re8.v v31, (a0)
|
||||||
|
vl2re16.v v31, (a0)
|
||||||
|
vl2re32.v v31, (a0)
|
||||||
|
vl2re64.v v31, (a0)
|
||||||
|
|
||||||
|
vl4r.v v30, (a0) # vd must be aligned to 4
|
||||||
|
vl4re8.v v30, (a0)
|
||||||
|
vl4re16.v v30, (a0)
|
||||||
|
vl4re32.v v30, (a0)
|
||||||
|
vl4re64.v v30, (a0)
|
||||||
|
|
||||||
|
vl8r.v v26, (a0) # vd must be aligned to 8
|
||||||
|
vl8re8.v v26, (a0)
|
||||||
|
vl8re16.v v26, (a0)
|
||||||
|
vl8re32.v v26, (a0)
|
||||||
|
vl8re64.v v26, (a0)
|
||||||
|
|
||||||
|
vs2r.v v31, (a0) # vs3 must be aligned to 2
|
||||||
|
vs4r.v v30, (a0) # vs3 must be aligned to 4
|
||||||
|
vs8r.v v26, (a0) # vs3 must be aligned to 8
|
||||||
@@ -0,0 +1,3 @@
|
|||||||
|
#as: -march=rv32iv -mcheck-constraints
|
||||||
|
#source: vector-insns-fail-mask.s
|
||||||
|
#error_output: vector-insns-fail-mask.l
|
||||||
10
gas/testsuite/gas/riscv/extended/vector-insns-fail-mask.l
Normal file
10
gas/testsuite/gas/riscv/extended/vector-insns-fail-mask.l
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
.*: Assembler messages:
|
||||||
|
.*Error: illegal operands vd cannot overlap vs2 `vmsbf.m v4,v4'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vmsbf.m v0,v4,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vs2 `vmsif.m v4,v4'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vmsif.m v0,v4,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vs2 `vmsof.m v4,v4'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vmsof.m v0,v4,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vs2 `viota.m v4,v4'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `viota.m v0,v4,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vid.v v0,v0.t'
|
||||||
23
gas/testsuite/gas/riscv/extended/vector-insns-fail-mask.s
Normal file
23
gas/testsuite/gas/riscv/extended/vector-insns-fail-mask.s
Normal file
@@ -0,0 +1,23 @@
|
|||||||
|
# Vector Set-before-first Mask Bit
|
||||||
|
|
||||||
|
vmsbf.m v4, v4 # vd overlap vs2
|
||||||
|
vmsbf.m v0, v4, v0.t # vd overlap vm
|
||||||
|
|
||||||
|
# Vector Set-including-first Mask Bit
|
||||||
|
|
||||||
|
vmsif.m v4, v4 # vd overlap vs2
|
||||||
|
vmsif.m v0, v4, v0.t # vd overlap vm
|
||||||
|
|
||||||
|
# Vector Set-only-first Mask Bit
|
||||||
|
|
||||||
|
vmsof.m v4, v4 # vd overlap vs2
|
||||||
|
vmsof.m v0, v4, v0.t # vd overlap vm
|
||||||
|
|
||||||
|
# Vector Iota Instruction
|
||||||
|
|
||||||
|
viota.m v4, v4 # vd overlap vs2
|
||||||
|
viota.m v0, v4, v0.t # vd overlap vm
|
||||||
|
|
||||||
|
# Vector Element Index Instruction
|
||||||
|
|
||||||
|
vid.v v0, v0.t # vd overlap vm
|
||||||
@@ -0,0 +1,3 @@
|
|||||||
|
#as: -march=rv32ifv -mcheck-constraints
|
||||||
|
#source: vector-insns-fail-permutation.s
|
||||||
|
#error_output: vector-insns-fail-permutation.l
|
||||||
@@ -0,0 +1,31 @@
|
|||||||
|
.*: Assembler messages:
|
||||||
|
.*Error: illegal operands vd cannot overlap vs2 `vslideup.vx v4,v4,a1'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vslideup.vx v0,v4,a1,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vs2 `vslideup.vi v4,v4,31'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vslideup.vi v0,v4,31,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vslidedown.vx v0,v4,a1,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vslidedown.vi v0,v4,31,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vs2 `vslide1up.vx v4,v4,a1'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vslide1up.vx v0,v4,a1,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vs2 `vfslide1up.vf v4,v4,fa1'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vfslide1up.vf v0,v4,fa1,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vslide1down.vx v0,v4,a1,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vfslide1down.vf v0,v4,fa1,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vs2 `vrgather.vv v4,v4,v8'
|
||||||
|
.*Error: illegal operands vd cannot overlap vs1 `vrgather.vv v8,v4,v8'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vrgather.vv v0,v4,v8,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vs2 `vrgather.vx v4,v4,a1'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vrgather.vx v0,v4,a1,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vs2 `vrgather.vi v4,v4,31'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vrgather.vi v0,v4,31,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vs2 `vrgatherei16.vv v4,v4,v8'
|
||||||
|
.*Error: illegal operands vd cannot overlap vs1 `vrgatherei16.vv v8,v4,v8'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vrgatherei16.vv v0,v4,v8,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vs2 `vcompress.vm v4,v4,v8'
|
||||||
|
.*Error: illegal operands vd cannot overlap vs1 `vcompress.vm v8,v4,v8'
|
||||||
|
.*Error: illegal operands vs2 must be multiple of nf `vmv2r.v v30,v31'
|
||||||
|
.*Error: illegal operands vd must be multiple of nf `vmv2r.v v31,v30'
|
||||||
|
.*Error: illegal operands vs2 must be multiple of nf `vmv4r.v v28,v30'
|
||||||
|
.*Error: illegal operands vd must be multiple of nf `vmv4r.v v30,v28'
|
||||||
|
.*Error: illegal operands vs2 must be multiple of nf `vmv8r.v v24,v26'
|
||||||
|
.*Error: illegal operands vd must be multiple of nf `vmv8r.v v26,v24'
|
||||||
@@ -0,0 +1,56 @@
|
|||||||
|
# Vector Slideup Instructions
|
||||||
|
|
||||||
|
vslideup.vx v4, v4, a1 # vd overlap vs2
|
||||||
|
vslideup.vx v0, v4, a1, v0.t # vd overlap vm
|
||||||
|
vslideup.vi v4, v4, 31 # vd overlap vs2
|
||||||
|
vslideup.vi v0, v4, 31, v0.t # vd overlap vm
|
||||||
|
|
||||||
|
vslidedown.vx v4, v4, a1 # OK
|
||||||
|
vslidedown.vx v0, v4, a1, v0.t # vd overlap vm
|
||||||
|
vslidedown.vi v4, v4, 31 # OK
|
||||||
|
vslidedown.vi v0, v4, 31, v0.t # vd overlap vm
|
||||||
|
|
||||||
|
vslide1up.vx v4, v4, a1 # vd overlap vs2
|
||||||
|
vslide1up.vx v0, v4, a1, v0.t # vd overlap vm
|
||||||
|
vfslide1up.vf v4, v4, fa1 # vd overlap vs2
|
||||||
|
vfslide1up.vf v0, v4, fa1, v0.t # vd overlap vm
|
||||||
|
|
||||||
|
vslide1down.vx v4, v4, a1 # OK
|
||||||
|
vslide1down.vx v0, v4, a1, v0.t # vd overlap vm
|
||||||
|
vfslide1down.vf v4, v4, fa1 # OK
|
||||||
|
vfslide1down.vf v0, v4, fa1, v0.t # vd overlap vm
|
||||||
|
|
||||||
|
# Vector Register Gather Instructions
|
||||||
|
|
||||||
|
vrgather.vv v4, v4, v8 # vd overlap vs2
|
||||||
|
vrgather.vv v8, v4, v8 # vd overlap vs1
|
||||||
|
vrgather.vv v0, v4, v8, v0.t # vd overlap vm
|
||||||
|
vrgather.vx v4, v4, a1 # vd overlap vs2
|
||||||
|
vrgather.vx v0, v4, a1, v0.t # vd overlap vm
|
||||||
|
vrgather.vi v4, v4, 31 # vd overlap vs2
|
||||||
|
vrgather.vi v0, v4, 31, v0.t # vd overlap vm
|
||||||
|
|
||||||
|
vrgatherei16.vv v4, v4, v8 # vd overlap vs2
|
||||||
|
vrgatherei16.vv v8, v4, v8 # vd overlap vs1
|
||||||
|
vrgatherei16.vv v0, v4, v8, v0.t # vd overlap vm
|
||||||
|
|
||||||
|
# Vector Compress Instruction
|
||||||
|
|
||||||
|
vcompress.vm v4, v4, v8 # vd overlap vs2
|
||||||
|
vcompress.vm v8, v4, v8 # vd overlap vs1
|
||||||
|
|
||||||
|
# Whole Vector Register Move
|
||||||
|
|
||||||
|
vmv1r.v v31, v31 # OK, HINT
|
||||||
|
|
||||||
|
vmv2r.v v30, v30 # OK, HINT
|
||||||
|
vmv2r.v v30, v31 # vs2 must be aligned to 2
|
||||||
|
vmv2r.v v31, v30 # vd must be aligned to 2
|
||||||
|
|
||||||
|
vmv4r.v v28, v28 # OK, HINT
|
||||||
|
vmv4r.v v28, v30 # vs2 must be aligned to 4
|
||||||
|
vmv4r.v v30, v28 # vd must be aligned to 4
|
||||||
|
|
||||||
|
vmv8r.v v24, v24 # OK, HINT
|
||||||
|
vmv8r.v v24, v26 # vs2 must be aligned to 8
|
||||||
|
vmv8r.v v26, v24 # vd must be aligned to 8
|
||||||
@@ -0,0 +1,3 @@
|
|||||||
|
#as: -march=rv32i_zvamo -mcheck-constraints
|
||||||
|
#source: vector-insns-fail-zvamo.s
|
||||||
|
#error_output: vector-insns-fail-zvamo.l
|
||||||
109
gas/testsuite/gas/riscv/extended/vector-insns-fail-zvamo.l
Normal file
109
gas/testsuite/gas/riscv/extended/vector-insns-fail-zvamo.l
Normal file
@@ -0,0 +1,109 @@
|
|||||||
|
.*: Assembler messages:
|
||||||
|
.*Error: illegal operands `vamoaddei8.v v4,\(a1\),v4,v0'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vamoaddei8.v v0,\(a1\),v4,v0,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vamoaddei8.v x0,\(a1\),v4,v0,v0.t'
|
||||||
|
.*Error: illegal operands `vamoswapei8.v v4,\(a1\),v4,v0'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vamoswapei8.v v0,\(a1\),v4,v0,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vamoswapei8.v x0,\(a1\),v4,v0,v0.t'
|
||||||
|
.*Error: illegal operands `vamoxorei8.v v4,\(a1\),v4,v0'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vamoxorei8.v v0,\(a1\),v4,v0,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vamoxorei8.v x0,\(a1\),v4,v0,v0.t'
|
||||||
|
.*Error: illegal operands `vamoandei8.v v4,\(a1\),v4,v0'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vamoandei8.v v0,\(a1\),v4,v0,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vamoandei8.v x0,\(a1\),v4,v0,v0.t'
|
||||||
|
.*Error: illegal operands `vamoorei8.v v4,\(a1\),v4,v0'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vamoorei8.v v0,\(a1\),v4,v0,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vamoorei8.v x0,\(a1\),v4,v0,v0.t'
|
||||||
|
.*Error: illegal operands `vamominei8.v v4,\(a1\),v4,v0'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vamominei8.v v0,\(a1\),v4,v0,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vamominei8.v x0,\(a1\),v4,v0,v0.t'
|
||||||
|
.*Error: illegal operands `vamomaxei8.v v4,\(a1\),v4,v0'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vamomaxei8.v v0,\(a1\),v4,v0,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vamomaxei8.v x0,\(a1\),v4,v0,v0.t'
|
||||||
|
.*Error: illegal operands `vamominuei8.v v4,\(a1\),v4,v0'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vamominuei8.v v0,\(a1\),v4,v0,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vamominuei8.v x0,\(a1\),v4,v0,v0.t'
|
||||||
|
.*Error: illegal operands `vamomaxuei8.v v4,\(a1\),v4,v0'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vamomaxuei8.v v0,\(a1\),v4,v0,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vamomaxuei8.v x0,\(a1\),v4,v0,v0.t'
|
||||||
|
.*Error: illegal operands `vamoaddei16.v v4,\(a1\),v4,v0'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vamoaddei16.v v0,\(a1\),v4,v0,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vamoaddei16.v x0,\(a1\),v4,v0,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vamoswapei16.v v0,\(a1\),v4,v0,v0.t'
|
||||||
|
.*Error: illegal operands `vamoswapei16.v v4,\(a1\),v4,v0'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vamoswapei16.v x0,\(a1\),v4,v0,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vamoxorei16.v v0,\(a1\),v4,v0,v0.t'
|
||||||
|
.*Error: illegal operands `vamoxorei16.v v4,\(a1\),v4,v0'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vamoxorei16.v x0,\(a1\),v4,v0,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vamoandei16.v v0,\(a1\),v4,v0,v0.t'
|
||||||
|
.*Error: illegal operands `vamoandei16.v v4,\(a1\),v4,v0'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vamoandei16.v x0,\(a1\),v4,v0,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vamoorei16.v v0,\(a1\),v4,v0,v0.t'
|
||||||
|
.*Error: illegal operands `vamoorei16.v v4,\(a1\),v4,v0'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vamoorei16.v x0,\(a1\),v4,v0,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vamominei16.v v0,\(a1\),v4,v0,v0.t'
|
||||||
|
.*Error: illegal operands `vamominei16.v v4,\(a1\),v4,v0'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vamominei16.v x0,\(a1\),v4,v0,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vamomaxei16.v v0,\(a1\),v4,v0,v0.t'
|
||||||
|
.*Error: illegal operands `vamomaxei16.v v4,\(a1\),v4,v0'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vamomaxei16.v x0,\(a1\),v4,v0,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vamominuei16.v v0,\(a1\),v4,v0,v0.t'
|
||||||
|
.*Error: illegal operands `vamominuei16.v v4,\(a1\),v4,v0'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vamominuei16.v x0,\(a1\),v4,v0,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vamomaxuei16.v v0,\(a1\),v4,v0,v0.t'
|
||||||
|
.*Error: illegal operands `vamomaxuei16.v v4,\(a1\),v4,v0'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vamomaxuei16.v x0,\(a1\),v4,v0,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vamoaddei32.v v0,\(a1\),v4,v0,v0.t'
|
||||||
|
.*Error: illegal operands `vamoaddei32.v v4,\(a1\),v4,v0'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vamoaddei32.v x0,\(a1\),v4,v0,v0.t'
|
||||||
|
.*Error: illegal operands `vamoswapei32.v v4,\(a1\),v4,v0'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vamoswapei32.v v0,\(a1\),v4,v0,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vamoswapei32.v x0,\(a1\),v4,v0,v0.t'
|
||||||
|
.*Error: illegal operands `vamoxorei32.v v4,\(a1\),v4,v0'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vamoxorei32.v v0,\(a1\),v4,v0,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vamoxorei32.v x0,\(a1\),v4,v0,v0.t'
|
||||||
|
.*Error: illegal operands `vamoandei32.v v4,\(a1\),v4,v0'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vamoandei32.v v0,\(a1\),v4,v0,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vamoandei32.v x0,\(a1\),v4,v0,v0.t'
|
||||||
|
.*Error: illegal operands `vamoorei32.v v4,\(a1\),v4,v0'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vamoorei32.v v0,\(a1\),v4,v0,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vamoorei32.v x0,\(a1\),v4,v0,v0.t'
|
||||||
|
.*Error: illegal operands `vamominei32.v v4,\(a1\),v4,v0'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vamominei32.v v0,\(a1\),v4,v0,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vamominei32.v x0,\(a1\),v4,v0,v0.t'
|
||||||
|
.*Error: illegal operands `vamomaxei32.v v4,\(a1\),v4,v0'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vamomaxei32.v v0,\(a1\),v4,v0,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vamomaxei32.v x0,\(a1\),v4,v0,v0.t'
|
||||||
|
.*Error: illegal operands `vamominuei32.v v4,\(a1\),v4,v0'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vamominuei32.v v0,\(a1\),v4,v0,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vamominuei32.v x0,\(a1\),v4,v0,v0.t'
|
||||||
|
.*Error: illegal operands `vamomaxuei32.v v4,\(a1\),v4,v0'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vamomaxuei32.v v0,\(a1\),v4,v0,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vamomaxuei32.v x0,\(a1\),v4,v0,v0.t'
|
||||||
|
.*Error: illegal operands `vamoaddei64.v v4,\(a1\),v4,v0'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vamoaddei64.v v0,\(a1\),v4,v0,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vamoaddei64.v x0,\(a1\),v4,v0,v0.t'
|
||||||
|
.*Error: illegal operands `vamoswapei64.v v4,\(a1\),v4,v0'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vamoswapei64.v v0,\(a1\),v4,v0,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vamoswapei64.v x0,\(a1\),v4,v0,v0.t'
|
||||||
|
.*Error: illegal operands `vamoxorei64.v v4,\(a1\),v4,v0'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vamoxorei64.v v0,\(a1\),v4,v0,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vamoxorei64.v x0,\(a1\),v4,v0,v0.t'
|
||||||
|
.*Error: illegal operands `vamoandei64.v v4,\(a1\),v4,v0'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vamoandei64.v v0,\(a1\),v4,v0,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vamoandei64.v x0,\(a1\),v4,v0,v0.t'
|
||||||
|
.*Error: illegal operands `vamoorei64.v v4,\(a1\),v4,v0'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vamoorei64.v v0,\(a1\),v4,v0,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vamoorei64.v x0,\(a1\),v4,v0,v0.t'
|
||||||
|
.*Error: illegal operands `vamominei64.v v4,\(a1\),v4,v0'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vamominei64.v v0,\(a1\),v4,v0,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vamominei64.v x0,\(a1\),v4,v0,v0.t'
|
||||||
|
.*Error: illegal operands `vamomaxei64.v v4,\(a1\),v4,v0'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vamomaxei64.v v0,\(a1\),v4,v0,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vamomaxei64.v x0,\(a1\),v4,v0,v0.t'
|
||||||
|
.*Error: illegal operands `vamominuei64.v v4,\(a1\),v4,v0'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vamominuei64.v v0,\(a1\),v4,v0,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vamominuei64.v x0,\(a1\),v4,v0,v0.t'
|
||||||
|
.*Error: illegal operands `vamomaxuei64.v v4,\(a1\),v4,v0'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vamomaxuei64.v v0,\(a1\),v4,v0,v0.t'
|
||||||
|
.*Error: illegal operands vd cannot overlap vm `vamomaxuei64.v x0,\(a1\),v4,v0,v0.t'
|
||||||
217
gas/testsuite/gas/riscv/extended/vector-insns-fail-zvamo.s
Normal file
217
gas/testsuite/gas/riscv/extended/vector-insns-fail-zvamo.s
Normal file
@@ -0,0 +1,217 @@
|
|||||||
|
# Vector AMO Operations
|
||||||
|
|
||||||
|
vamoaddei8.v v0, (a1), v4, v0 # OK
|
||||||
|
vamoaddei8.v v4, (a1), v4, v0 # vd must match vs3
|
||||||
|
vamoaddei8.v v0, (a1), v4, v0, v0.t # vd overlap vm
|
||||||
|
vamoaddei8.v x0, (a1), v4, v0 # OK
|
||||||
|
vamoaddei8.v x0, (a1), v4, v0, v0.t # vs3 overlap vm
|
||||||
|
|
||||||
|
vamoswapei8.v v0, (a1), v4, v0
|
||||||
|
vamoswapei8.v v4, (a1), v4, v0
|
||||||
|
vamoswapei8.v v0, (a1), v4, v0, v0.t
|
||||||
|
vamoswapei8.v x0, (a1), v4, v0
|
||||||
|
vamoswapei8.v x0, (a1), v4, v0, v0.t
|
||||||
|
|
||||||
|
vamoxorei8.v v0, (a1), v4, v0
|
||||||
|
vamoxorei8.v v4, (a1), v4, v0
|
||||||
|
vamoxorei8.v v0, (a1), v4, v0, v0.t
|
||||||
|
vamoxorei8.v x0, (a1), v4, v0
|
||||||
|
vamoxorei8.v x0, (a1), v4, v0, v0.t
|
||||||
|
|
||||||
|
vamoandei8.v v0, (a1), v4, v0
|
||||||
|
vamoandei8.v v4, (a1), v4, v0
|
||||||
|
vamoandei8.v v0, (a1), v4, v0, v0.t
|
||||||
|
vamoandei8.v x0, (a1), v4, v0
|
||||||
|
vamoandei8.v x0, (a1), v4, v0, v0.t
|
||||||
|
|
||||||
|
vamoorei8.v v0, (a1), v4, v0
|
||||||
|
vamoorei8.v v4, (a1), v4, v0
|
||||||
|
vamoorei8.v v0, (a1), v4, v0, v0.t
|
||||||
|
vamoorei8.v x0, (a1), v4, v0
|
||||||
|
vamoorei8.v x0, (a1), v4, v0, v0.t
|
||||||
|
|
||||||
|
vamominei8.v v0, (a1), v4, v0
|
||||||
|
vamominei8.v v4, (a1), v4, v0
|
||||||
|
vamominei8.v v0, (a1), v4, v0, v0.t
|
||||||
|
vamominei8.v x0, (a1), v4, v0
|
||||||
|
vamominei8.v x0, (a1), v4, v0, v0.t
|
||||||
|
|
||||||
|
vamomaxei8.v v0, (a1), v4, v0
|
||||||
|
vamomaxei8.v v4, (a1), v4, v0
|
||||||
|
vamomaxei8.v v0, (a1), v4, v0, v0.t
|
||||||
|
vamomaxei8.v x0, (a1), v4, v0
|
||||||
|
vamomaxei8.v x0, (a1), v4, v0, v0.t
|
||||||
|
|
||||||
|
vamominuei8.v v0, (a1), v4, v0
|
||||||
|
vamominuei8.v v4, (a1), v4, v0
|
||||||
|
vamominuei8.v v0, (a1), v4, v0, v0.t
|
||||||
|
vamominuei8.v x0, (a1), v4, v0
|
||||||
|
vamominuei8.v x0, (a1), v4, v0, v0.t
|
||||||
|
|
||||||
|
vamomaxuei8.v v0, (a1), v4, v0
|
||||||
|
vamomaxuei8.v v4, (a1), v4, v0
|
||||||
|
vamomaxuei8.v v0, (a1), v4, v0, v0.t
|
||||||
|
vamomaxuei8.v x0, (a1), v4, v0
|
||||||
|
vamomaxuei8.v x0, (a1), v4, v0, v0.t
|
||||||
|
|
||||||
|
vamoaddei16.v v0, (a1), v4, v0
|
||||||
|
vamoaddei16.v v4, (a1), v4, v0
|
||||||
|
vamoaddei16.v v0, (a1), v4, v0, v0.t
|
||||||
|
vamoaddei16.v x0, (a1), v4, v0
|
||||||
|
vamoaddei16.v x0, (a1), v4, v0, v0.t
|
||||||
|
|
||||||
|
vamoswapei16.v v0, (a1), v4, v0
|
||||||
|
vamoswapei16.v v0, (a1), v4, v0, v0.t
|
||||||
|
vamoswapei16.v v4, (a1), v4, v0
|
||||||
|
vamoswapei16.v x0, (a1), v4, v0
|
||||||
|
vamoswapei16.v x0, (a1), v4, v0, v0.t
|
||||||
|
|
||||||
|
vamoxorei16.v v0, (a1), v4, v0
|
||||||
|
vamoxorei16.v v0, (a1), v4, v0, v0.t
|
||||||
|
vamoxorei16.v v4, (a1), v4, v0
|
||||||
|
vamoxorei16.v x0, (a1), v4, v0
|
||||||
|
vamoxorei16.v x0, (a1), v4, v0, v0.t
|
||||||
|
|
||||||
|
vamoandei16.v v0, (a1), v4, v0
|
||||||
|
vamoandei16.v v0, (a1), v4, v0, v0.t
|
||||||
|
vamoandei16.v v4, (a1), v4, v0
|
||||||
|
vamoandei16.v x0, (a1), v4, v0
|
||||||
|
vamoandei16.v x0, (a1), v4, v0, v0.t
|
||||||
|
|
||||||
|
vamoorei16.v v0, (a1), v4, v0
|
||||||
|
vamoorei16.v v0, (a1), v4, v0, v0.t
|
||||||
|
vamoorei16.v v4, (a1), v4, v0
|
||||||
|
vamoorei16.v x0, (a1), v4, v0
|
||||||
|
vamoorei16.v x0, (a1), v4, v0, v0.t
|
||||||
|
|
||||||
|
vamominei16.v v0, (a1), v4, v0
|
||||||
|
vamominei16.v v0, (a1), v4, v0, v0.t
|
||||||
|
vamominei16.v v4, (a1), v4, v0
|
||||||
|
vamominei16.v x0, (a1), v4, v0
|
||||||
|
vamominei16.v x0, (a1), v4, v0, v0.t
|
||||||
|
|
||||||
|
vamomaxei16.v v0, (a1), v4, v0
|
||||||
|
vamomaxei16.v v0, (a1), v4, v0, v0.t
|
||||||
|
vamomaxei16.v v4, (a1), v4, v0
|
||||||
|
vamomaxei16.v x0, (a1), v4, v0
|
||||||
|
vamomaxei16.v x0, (a1), v4, v0, v0.t
|
||||||
|
|
||||||
|
vamominuei16.v v0, (a1), v4, v0
|
||||||
|
vamominuei16.v v0, (a1), v4, v0, v0.t
|
||||||
|
vamominuei16.v v4, (a1), v4, v0
|
||||||
|
vamominuei16.v x0, (a1), v4, v0
|
||||||
|
vamominuei16.v x0, (a1), v4, v0, v0.t
|
||||||
|
|
||||||
|
vamomaxuei16.v v0, (a1), v4, v0
|
||||||
|
vamomaxuei16.v v0, (a1), v4, v0, v0.t
|
||||||
|
vamomaxuei16.v v4, (a1), v4, v0
|
||||||
|
vamomaxuei16.v x0, (a1), v4, v0
|
||||||
|
vamomaxuei16.v x0, (a1), v4, v0, v0.t
|
||||||
|
|
||||||
|
vamoaddei32.v v0, (a1), v4, v0
|
||||||
|
vamoaddei32.v v0, (a1), v4, v0, v0.t
|
||||||
|
vamoaddei32.v v4, (a1), v4, v0
|
||||||
|
vamoaddei32.v x0, (a1), v4, v0
|
||||||
|
vamoaddei32.v x0, (a1), v4, v0, v0.t
|
||||||
|
|
||||||
|
vamoswapei32.v v0, (a1), v4, v0
|
||||||
|
vamoswapei32.v v4, (a1), v4, v0
|
||||||
|
vamoswapei32.v v0, (a1), v4, v0, v0.t
|
||||||
|
vamoswapei32.v x0, (a1), v4, v0
|
||||||
|
vamoswapei32.v x0, (a1), v4, v0, v0.t
|
||||||
|
|
||||||
|
vamoxorei32.v v0, (a1), v4, v0
|
||||||
|
vamoxorei32.v v4, (a1), v4, v0
|
||||||
|
vamoxorei32.v v0, (a1), v4, v0, v0.t
|
||||||
|
vamoxorei32.v x0, (a1), v4, v0
|
||||||
|
vamoxorei32.v x0, (a1), v4, v0, v0.t
|
||||||
|
|
||||||
|
vamoandei32.v v0, (a1), v4, v0
|
||||||
|
vamoandei32.v v4, (a1), v4, v0
|
||||||
|
vamoandei32.v v0, (a1), v4, v0, v0.t
|
||||||
|
vamoandei32.v x0, (a1), v4, v0
|
||||||
|
vamoandei32.v x0, (a1), v4, v0, v0.t
|
||||||
|
|
||||||
|
vamoorei32.v v0, (a1), v4, v0
|
||||||
|
vamoorei32.v v4, (a1), v4, v0
|
||||||
|
vamoorei32.v v0, (a1), v4, v0, v0.t
|
||||||
|
vamoorei32.v x0, (a1), v4, v0
|
||||||
|
vamoorei32.v x0, (a1), v4, v0, v0.t
|
||||||
|
|
||||||
|
vamominei32.v v0, (a1), v4, v0
|
||||||
|
vamominei32.v v4, (a1), v4, v0
|
||||||
|
vamominei32.v v0, (a1), v4, v0, v0.t
|
||||||
|
vamominei32.v x0, (a1), v4, v0
|
||||||
|
vamominei32.v x0, (a1), v4, v0, v0.t
|
||||||
|
|
||||||
|
vamomaxei32.v v0, (a1), v4, v0
|
||||||
|
vamomaxei32.v v4, (a1), v4, v0
|
||||||
|
vamomaxei32.v v0, (a1), v4, v0, v0.t
|
||||||
|
vamomaxei32.v x0, (a1), v4, v0
|
||||||
|
vamomaxei32.v x0, (a1), v4, v0, v0.t
|
||||||
|
|
||||||
|
vamominuei32.v v0, (a1), v4, v0
|
||||||
|
vamominuei32.v v4, (a1), v4, v0
|
||||||
|
vamominuei32.v v0, (a1), v4, v0, v0.t
|
||||||
|
vamominuei32.v x0, (a1), v4, v0
|
||||||
|
vamominuei32.v x0, (a1), v4, v0, v0.t
|
||||||
|
|
||||||
|
vamomaxuei32.v v0, (a1), v4, v0
|
||||||
|
vamomaxuei32.v v4, (a1), v4, v0
|
||||||
|
vamomaxuei32.v v0, (a1), v4, v0, v0.t
|
||||||
|
vamomaxuei32.v x0, (a1), v4, v0
|
||||||
|
vamomaxuei32.v x0, (a1), v4, v0, v0.t
|
||||||
|
|
||||||
|
vamoaddei64.v v0, (a1), v4, v0
|
||||||
|
vamoaddei64.v v4, (a1), v4, v0
|
||||||
|
vamoaddei64.v v0, (a1), v4, v0, v0.t
|
||||||
|
vamoaddei64.v x0, (a1), v4, v0
|
||||||
|
vamoaddei64.v x0, (a1), v4, v0, v0.t
|
||||||
|
|
||||||
|
vamoswapei64.v v0, (a1), v4, v0
|
||||||
|
vamoswapei64.v v4, (a1), v4, v0
|
||||||
|
vamoswapei64.v v0, (a1), v4, v0, v0.t
|
||||||
|
vamoswapei64.v x0, (a1), v4, v0
|
||||||
|
vamoswapei64.v x0, (a1), v4, v0, v0.t
|
||||||
|
|
||||||
|
vamoxorei64.v v0, (a1), v4, v0
|
||||||
|
vamoxorei64.v v4, (a1), v4, v0
|
||||||
|
vamoxorei64.v v0, (a1), v4, v0, v0.t
|
||||||
|
vamoxorei64.v x0, (a1), v4, v0
|
||||||
|
vamoxorei64.v x0, (a1), v4, v0, v0.t
|
||||||
|
|
||||||
|
vamoandei64.v v0, (a1), v4, v0
|
||||||
|
vamoandei64.v v4, (a1), v4, v0
|
||||||
|
vamoandei64.v v0, (a1), v4, v0, v0.t
|
||||||
|
vamoandei64.v x0, (a1), v4, v0
|
||||||
|
vamoandei64.v x0, (a1), v4, v0, v0.t
|
||||||
|
|
||||||
|
vamoorei64.v v0, (a1), v4, v0
|
||||||
|
vamoorei64.v v4, (a1), v4, v0
|
||||||
|
vamoorei64.v v0, (a1), v4, v0, v0.t
|
||||||
|
vamoorei64.v x0, (a1), v4, v0
|
||||||
|
vamoorei64.v x0, (a1), v4, v0, v0.t
|
||||||
|
|
||||||
|
vamominei64.v v0, (a1), v4, v0
|
||||||
|
vamominei64.v v4, (a1), v4, v0
|
||||||
|
vamominei64.v v0, (a1), v4, v0, v0.t
|
||||||
|
vamominei64.v x0, (a1), v4, v0
|
||||||
|
vamominei64.v x0, (a1), v4, v0, v0.t
|
||||||
|
|
||||||
|
vamomaxei64.v v0, (a1), v4, v0
|
||||||
|
vamomaxei64.v v4, (a1), v4, v0
|
||||||
|
vamomaxei64.v v0, (a1), v4, v0, v0.t
|
||||||
|
vamomaxei64.v x0, (a1), v4, v0
|
||||||
|
vamomaxei64.v x0, (a1), v4, v0, v0.t
|
||||||
|
|
||||||
|
vamominuei64.v v0, (a1), v4, v0
|
||||||
|
vamominuei64.v v4, (a1), v4, v0
|
||||||
|
vamominuei64.v v0, (a1), v4, v0, v0.t
|
||||||
|
vamominuei64.v x0, (a1), v4, v0
|
||||||
|
vamominuei64.v x0, (a1), v4, v0, v0.t
|
||||||
|
|
||||||
|
vamomaxuei64.v v0, (a1), v4, v0
|
||||||
|
vamomaxuei64.v v4, (a1), v4, v0
|
||||||
|
vamomaxuei64.v v0, (a1), v4, v0, v0.t
|
||||||
|
vamomaxuei64.v x0, (a1), v4, v0
|
||||||
|
vamomaxuei64.v x0, (a1), v4, v0, v0.t
|
||||||
@@ -0,0 +1,3 @@
|
|||||||
|
#as: -march=rv32i_zvamo_zve32x
|
||||||
|
#source: vector-insns-fail-zve32x.s
|
||||||
|
#error_output: vector-insns-fail-zve32x.l
|
||||||
82
gas/testsuite/gas/riscv/extended/vector-insns-fail-zve32x.l
Normal file
82
gas/testsuite/gas/riscv/extended/vector-insns-fail-zve32x.l
Normal file
@@ -0,0 +1,82 @@
|
|||||||
|
.*Assembler messages:
|
||||||
|
.*Error: illegal vsew e64 for zve32x and zve32f
|
||||||
|
.*Error: illegal vsew e128 for zve32x and zve32f
|
||||||
|
.*Error: illegal vsew e256 for zve32x and zve32f
|
||||||
|
.*Error: illegal vsew e512 for zve32x and zve32f
|
||||||
|
.*Error: illegal vsew e1024 for zve32x and zve32f
|
||||||
|
.*Error: illegal opcode for zve32x `vle64.v v4,\(a0\)'
|
||||||
|
.*Error: illegal opcode for zve32x `vse64.v v4,\(a0\)'
|
||||||
|
.*Error: illegal opcode for zve32x `vlse64.v v4,\(a0\),a1'
|
||||||
|
.*Error: illegal opcode for zve32x `vsse64.v v4,\(a0\),a1'
|
||||||
|
.*Error: illegal opcode for zve32x `vloxei64.v v4,\(a0\),v12'
|
||||||
|
.*Error: illegal opcode for zve32x `vsoxei64.v v4,\(a0\),v12'
|
||||||
|
.*Error: illegal opcode for zve32x `vluxei64.v v4,\(a0\),v12'
|
||||||
|
.*Error: illegal opcode for zve32x `vsuxei64.v v4,\(a0\),v12'
|
||||||
|
.*Error: illegal opcode for zve32x `vle64ff.v v4,\(a0\)'
|
||||||
|
.*Error: illegal opcode for zve32x `vlseg2e64.v v4,\(a0\)'
|
||||||
|
.*Error: illegal opcode for zve32x `vsseg2e64.v v4,\(a0\)'
|
||||||
|
.*Error: illegal opcode for zve32x `vlseg3e64.v v4,\(a0\)'
|
||||||
|
.*Error: illegal opcode for zve32x `vsseg3e64.v v4,\(a0\)'
|
||||||
|
.*Error: illegal opcode for zve32x `vlseg4e64.v v4,\(a0\)'
|
||||||
|
.*Error: illegal opcode for zve32x `vsseg4e64.v v4,\(a0\)'
|
||||||
|
.*Error: illegal opcode for zve32x `vlseg5e64.v v4,\(a0\)'
|
||||||
|
.*Error: illegal opcode for zve32x `vsseg5e64.v v4,\(a0\)'
|
||||||
|
.*Error: illegal opcode for zve32x `vlseg6e64.v v4,\(a0\)'
|
||||||
|
.*Error: illegal opcode for zve32x `vsseg6e64.v v4,\(a0\)'
|
||||||
|
.*Error: illegal opcode for zve32x `vlseg7e64.v v4,\(a0\)'
|
||||||
|
.*Error: illegal opcode for zve32x `vsseg7e64.v v4,\(a0\)'
|
||||||
|
.*Error: illegal opcode for zve32x `vlseg8e64.v v4,\(a0\)'
|
||||||
|
.*Error: illegal opcode for zve32x `vsseg8e64.v v4,\(a0\)'
|
||||||
|
.*Error: illegal opcode for zve32x `vlsseg2e64.v v4,\(a0\),a1'
|
||||||
|
.*Error: illegal opcode for zve32x `vssseg2e64.v v4,\(a0\),a1'
|
||||||
|
.*Error: illegal opcode for zve32x `vlsseg3e64.v v4,\(a0\),a1'
|
||||||
|
.*Error: illegal opcode for zve32x `vssseg3e64.v v4,\(a0\),a1'
|
||||||
|
.*Error: illegal opcode for zve32x `vlsseg4e64.v v4,\(a0\),a1'
|
||||||
|
.*Error: illegal opcode for zve32x `vssseg4e64.v v4,\(a0\),a1'
|
||||||
|
.*Error: illegal opcode for zve32x `vlsseg5e64.v v4,\(a0\),a1'
|
||||||
|
.*Error: illegal opcode for zve32x `vssseg5e64.v v4,\(a0\),a1'
|
||||||
|
.*Error: illegal opcode for zve32x `vlsseg6e64.v v4,\(a0\),a1'
|
||||||
|
.*Error: illegal opcode for zve32x `vssseg6e64.v v4,\(a0\),a1'
|
||||||
|
.*Error: illegal opcode for zve32x `vlsseg7e64.v v4,\(a0\),a1'
|
||||||
|
.*Error: illegal opcode for zve32x `vssseg7e64.v v4,\(a0\),a1'
|
||||||
|
.*Error: illegal opcode for zve32x `vlsseg8e64.v v4,\(a0\),a1'
|
||||||
|
.*Error: illegal opcode for zve32x `vssseg8e64.v v4,\(a0\),a1'
|
||||||
|
.*Error: illegal opcode for zve32x `vloxseg2ei64.v v4,\(a0\),v12'
|
||||||
|
.*Error: illegal opcode for zve32x `vsoxseg2ei64.v v4,\(a0\),v12'
|
||||||
|
.*Error: illegal opcode for zve32x `vloxseg3ei64.v v4,\(a0\),v12'
|
||||||
|
.*Error: illegal opcode for zve32x `vsoxseg3ei64.v v4,\(a0\),v12'
|
||||||
|
.*Error: illegal opcode for zve32x `vloxseg4ei64.v v4,\(a0\),v12'
|
||||||
|
.*Error: illegal opcode for zve32x `vsoxseg4ei64.v v4,\(a0\),v12'
|
||||||
|
.*Error: illegal opcode for zve32x `vloxseg5ei64.v v4,\(a0\),v12'
|
||||||
|
.*Error: illegal opcode for zve32x `vsoxseg5ei64.v v4,\(a0\),v12'
|
||||||
|
.*Error: illegal opcode for zve32x `vloxseg6ei64.v v4,\(a0\),v12'
|
||||||
|
.*Error: illegal opcode for zve32x `vsoxseg6ei64.v v4,\(a0\),v12'
|
||||||
|
.*Error: illegal opcode for zve32x `vloxseg7ei64.v v4,\(a0\),v12'
|
||||||
|
.*Error: illegal opcode for zve32x `vsoxseg7ei64.v v4,\(a0\),v12'
|
||||||
|
.*Error: illegal opcode for zve32x `vloxseg8ei64.v v4,\(a0\),v12'
|
||||||
|
.*Error: illegal opcode for zve32x `vsoxseg8ei64.v v4,\(a0\),v12'
|
||||||
|
.*Error: illegal opcode for zve32x `vluxseg2ei64.v v4,\(a0\),v12'
|
||||||
|
.*Error: illegal opcode for zve32x `vsuxseg2ei64.v v4,\(a0\),v12'
|
||||||
|
.*Error: illegal opcode for zve32x `vluxseg3ei64.v v4,\(a0\),v12'
|
||||||
|
.*Error: illegal opcode for zve32x `vsuxseg3ei64.v v4,\(a0\),v12'
|
||||||
|
.*Error: illegal opcode for zve32x `vluxseg4ei64.v v4,\(a0\),v12'
|
||||||
|
.*Error: illegal opcode for zve32x `vsuxseg4ei64.v v4,\(a0\),v12'
|
||||||
|
.*Error: illegal opcode for zve32x `vluxseg5ei64.v v4,\(a0\),v12'
|
||||||
|
.*Error: illegal opcode for zve32x `vsuxseg5ei64.v v4,\(a0\),v12'
|
||||||
|
.*Error: illegal opcode for zve32x `vluxseg6ei64.v v4,\(a0\),v12'
|
||||||
|
.*Error: illegal opcode for zve32x `vsuxseg6ei64.v v4,\(a0\),v12'
|
||||||
|
.*Error: illegal opcode for zve32x `vluxseg7ei64.v v4,\(a0\),v12'
|
||||||
|
.*Error: illegal opcode for zve32x `vsuxseg7ei64.v v4,\(a0\),v12'
|
||||||
|
.*Error: illegal opcode for zve32x `vluxseg8ei64.v v4,\(a0\),v12'
|
||||||
|
.*Error: illegal opcode for zve32x `vsuxseg8ei64.v v4,\(a0\),v12'
|
||||||
|
.*Error: illegal opcode for zve32x `vlseg2e64ff.v v4,\(a0\)'
|
||||||
|
.*Error: illegal opcode for zve32x `vlseg3e64ff.v v4,\(a0\)'
|
||||||
|
.*Error: illegal opcode for zve32x `vlseg4e64ff.v v4,\(a0\)'
|
||||||
|
.*Error: illegal opcode for zve32x `vlseg5e64ff.v v4,\(a0\)'
|
||||||
|
.*Error: illegal opcode for zve32x `vlseg6e64ff.v v4,\(a0\)'
|
||||||
|
.*Error: illegal opcode for zve32x `vlseg7e64ff.v v4,\(a0\)'
|
||||||
|
.*Error: illegal opcode for zve32x `vlseg8e64ff.v v4,\(a0\)'
|
||||||
|
.*Error: illegal opcode for zve32x `vl1re64.v v3,\(a0\)'
|
||||||
|
.*Error: illegal opcode for zve32x `vl2re64.v v2,\(a0\)'
|
||||||
|
.*Error: illegal opcode for zve32x `vl4re64.v v4,\(a0\)'
|
||||||
|
.*Error: illegal opcode for zve32x `vl8re64.v v8,\(a0\)'
|
||||||
413
gas/testsuite/gas/riscv/extended/vector-insns-fail-zve32x.s
Normal file
413
gas/testsuite/gas/riscv/extended/vector-insns-fail-zve32x.s
Normal file
@@ -0,0 +1,413 @@
|
|||||||
|
vsetvl a0, a1, a2
|
||||||
|
vsetvli a0, a1, e8
|
||||||
|
vsetvli a0, a1, e16, m2
|
||||||
|
vsetvli a0, a1, e32, m2, ta
|
||||||
|
vsetvli a0, a1, e64, m2, ta, ma
|
||||||
|
vsetvli a0, a1, e128
|
||||||
|
vsetvli a0, a1, e256, m2
|
||||||
|
vsetvli a0, a1, e512, m2, ta
|
||||||
|
vsetvli a0, a1, e1024, m2, ta, ma
|
||||||
|
|
||||||
|
vlm.v v4, (a0)
|
||||||
|
vle1.v v4, (a0) # Alias of vlm.v
|
||||||
|
vsm.v v4, (a0)
|
||||||
|
vse1.v v4, (a0) # Alias of vsm.v
|
||||||
|
|
||||||
|
vle8.v v4, (a0)
|
||||||
|
vse8.v v4, (a0)
|
||||||
|
vle16.v v4, (a0)
|
||||||
|
vse16.v v4, (a0)
|
||||||
|
vle32.v v4, (a0)
|
||||||
|
vse32.v v4, (a0)
|
||||||
|
vle64.v v4, (a0)
|
||||||
|
vse64.v v4, (a0)
|
||||||
|
|
||||||
|
vlse8.v v4, (a0), a1
|
||||||
|
vsse8.v v4, (a0), a1
|
||||||
|
vlse16.v v4, (a0), a1
|
||||||
|
vsse16.v v4, (a0), a1
|
||||||
|
vlse32.v v4, (a0), a1
|
||||||
|
vsse32.v v4, (a0), a1
|
||||||
|
vlse64.v v4, (a0), a1
|
||||||
|
vsse64.v v4, (a0), a1
|
||||||
|
|
||||||
|
vloxei8.v v4, (a0), v12
|
||||||
|
vsoxei8.v v4, (a0), v12
|
||||||
|
vluxei8.v v4, (a0), v12
|
||||||
|
vsuxei8.v v4, (a0), v12
|
||||||
|
vloxei16.v v4, (a0), v12
|
||||||
|
vsoxei16.v v4, (a0), v12
|
||||||
|
vluxei16.v v4, (a0), v12
|
||||||
|
vsuxei16.v v4, (a0), v12
|
||||||
|
vloxei32.v v4, (a0), v12
|
||||||
|
vsoxei32.v v4, (a0), v12
|
||||||
|
vluxei32.v v4, (a0), v12
|
||||||
|
vsuxei32.v v4, (a0), v12
|
||||||
|
vloxei64.v v4, (a0), v12
|
||||||
|
vsoxei64.v v4, (a0), v12
|
||||||
|
vluxei64.v v4, (a0), v12
|
||||||
|
vsuxei64.v v4, (a0), v12
|
||||||
|
|
||||||
|
vle8ff.v v4, (a0)
|
||||||
|
vle16ff.v v4, (a0)
|
||||||
|
vle32ff.v v4, (a0)
|
||||||
|
vle64ff.v v4, (a0)
|
||||||
|
|
||||||
|
vlseg2e8.v v4, (a0)
|
||||||
|
vsseg2e8.v v4, (a0)
|
||||||
|
vlseg3e8.v v4, (a0)
|
||||||
|
vsseg3e8.v v4, (a0)
|
||||||
|
vlseg4e8.v v4, (a0)
|
||||||
|
vsseg4e8.v v4, (a0)
|
||||||
|
vlseg5e8.v v4, (a0)
|
||||||
|
vsseg5e8.v v4, (a0)
|
||||||
|
vlseg6e8.v v4, (a0)
|
||||||
|
vsseg6e8.v v4, (a0)
|
||||||
|
vlseg7e8.v v4, (a0)
|
||||||
|
vsseg7e8.v v4, (a0)
|
||||||
|
vlseg8e8.v v4, (a0)
|
||||||
|
vsseg8e8.v v4, (a0)
|
||||||
|
vlseg2e16.v v4, (a0)
|
||||||
|
vsseg2e16.v v4, (a0)
|
||||||
|
vlseg3e16.v v4, (a0)
|
||||||
|
vsseg3e16.v v4, (a0)
|
||||||
|
vlseg4e16.v v4, (a0)
|
||||||
|
vsseg4e16.v v4, (a0)
|
||||||
|
vlseg5e16.v v4, (a0)
|
||||||
|
vsseg5e16.v v4, (a0)
|
||||||
|
vlseg6e16.v v4, (a0)
|
||||||
|
vsseg6e16.v v4, (a0)
|
||||||
|
vlseg7e16.v v4, (a0)
|
||||||
|
vsseg7e16.v v4, (a0)
|
||||||
|
vlseg8e16.v v4, (a0)
|
||||||
|
vsseg8e16.v v4, (a0)
|
||||||
|
vlseg2e32.v v4, (a0)
|
||||||
|
vsseg2e32.v v4, (a0)
|
||||||
|
vlseg3e32.v v4, (a0)
|
||||||
|
vsseg3e32.v v4, (a0)
|
||||||
|
vlseg4e32.v v4, (a0)
|
||||||
|
vsseg4e32.v v4, (a0)
|
||||||
|
vlseg5e32.v v4, (a0)
|
||||||
|
vsseg5e32.v v4, (a0)
|
||||||
|
vlseg6e32.v v4, (a0)
|
||||||
|
vsseg6e32.v v4, (a0)
|
||||||
|
vlseg7e32.v v4, (a0)
|
||||||
|
vsseg7e32.v v4, (a0)
|
||||||
|
vlseg8e32.v v4, (a0)
|
||||||
|
vsseg8e32.v v4, (a0)
|
||||||
|
vlseg2e64.v v4, (a0)
|
||||||
|
vsseg2e64.v v4, (a0)
|
||||||
|
vlseg3e64.v v4, (a0)
|
||||||
|
vsseg3e64.v v4, (a0)
|
||||||
|
vlseg4e64.v v4, (a0)
|
||||||
|
vsseg4e64.v v4, (a0)
|
||||||
|
vlseg5e64.v v4, (a0)
|
||||||
|
vsseg5e64.v v4, (a0)
|
||||||
|
vlseg6e64.v v4, (a0)
|
||||||
|
vsseg6e64.v v4, (a0)
|
||||||
|
vlseg7e64.v v4, (a0)
|
||||||
|
vsseg7e64.v v4, (a0)
|
||||||
|
vlseg8e64.v v4, (a0)
|
||||||
|
vsseg8e64.v v4, (a0)
|
||||||
|
|
||||||
|
vlsseg2e8.v v4, (a0), a1
|
||||||
|
vssseg2e8.v v4, (a0), a1
|
||||||
|
vlsseg3e8.v v4, (a0), a1
|
||||||
|
vssseg3e8.v v4, (a0), a1
|
||||||
|
vlsseg4e8.v v4, (a0), a1
|
||||||
|
vssseg4e8.v v4, (a0), a1
|
||||||
|
vlsseg5e8.v v4, (a0), a1
|
||||||
|
vssseg5e8.v v4, (a0), a1
|
||||||
|
vlsseg6e8.v v4, (a0), a1
|
||||||
|
vssseg6e8.v v4, (a0), a1
|
||||||
|
vlsseg7e8.v v4, (a0), a1
|
||||||
|
vssseg7e8.v v4, (a0), a1
|
||||||
|
vlsseg8e8.v v4, (a0), a1
|
||||||
|
vssseg8e8.v v4, (a0), a1
|
||||||
|
vlsseg2e16.v v4, (a0), a1
|
||||||
|
vssseg2e16.v v4, (a0), a1
|
||||||
|
vlsseg3e16.v v4, (a0), a1
|
||||||
|
vssseg3e16.v v4, (a0), a1
|
||||||
|
vlsseg4e16.v v4, (a0), a1
|
||||||
|
vssseg4e16.v v4, (a0), a1
|
||||||
|
vlsseg5e16.v v4, (a0), a1
|
||||||
|
vssseg5e16.v v4, (a0), a1
|
||||||
|
vlsseg6e16.v v4, (a0), a1
|
||||||
|
vssseg6e16.v v4, (a0), a1
|
||||||
|
vlsseg7e16.v v4, (a0), a1
|
||||||
|
vssseg7e16.v v4, (a0), a1
|
||||||
|
vlsseg8e16.v v4, (a0), a1
|
||||||
|
vssseg8e16.v v4, (a0), a1
|
||||||
|
vlsseg2e32.v v4, (a0), a1
|
||||||
|
vssseg2e32.v v4, (a0), a1
|
||||||
|
vlsseg3e32.v v4, (a0), a1
|
||||||
|
vssseg3e32.v v4, (a0), a1
|
||||||
|
vlsseg4e32.v v4, (a0), a1
|
||||||
|
vssseg4e32.v v4, (a0), a1
|
||||||
|
vlsseg5e32.v v4, (a0), a1
|
||||||
|
vssseg5e32.v v4, (a0), a1
|
||||||
|
vlsseg6e32.v v4, (a0), a1
|
||||||
|
vssseg6e32.v v4, (a0), a1
|
||||||
|
vlsseg7e32.v v4, (a0), a1
|
||||||
|
vssseg7e32.v v4, (a0), a1
|
||||||
|
vlsseg8e32.v v4, (a0), a1
|
||||||
|
vssseg8e32.v v4, (a0), a1
|
||||||
|
vlsseg2e64.v v4, (a0), a1
|
||||||
|
vssseg2e64.v v4, (a0), a1
|
||||||
|
vlsseg3e64.v v4, (a0), a1
|
||||||
|
vssseg3e64.v v4, (a0), a1
|
||||||
|
vlsseg4e64.v v4, (a0), a1
|
||||||
|
vssseg4e64.v v4, (a0), a1
|
||||||
|
vlsseg5e64.v v4, (a0), a1
|
||||||
|
vssseg5e64.v v4, (a0), a1
|
||||||
|
vlsseg6e64.v v4, (a0), a1
|
||||||
|
vssseg6e64.v v4, (a0), a1
|
||||||
|
vlsseg7e64.v v4, (a0), a1
|
||||||
|
vssseg7e64.v v4, (a0), a1
|
||||||
|
vlsseg8e64.v v4, (a0), a1
|
||||||
|
vssseg8e64.v v4, (a0), a1
|
||||||
|
|
||||||
|
vloxseg2ei8.v v4, (a0), v12
|
||||||
|
vsoxseg2ei8.v v4, (a0), v12
|
||||||
|
vloxseg3ei8.v v4, (a0), v12
|
||||||
|
vsoxseg3ei8.v v4, (a0), v12
|
||||||
|
vloxseg4ei8.v v4, (a0), v12
|
||||||
|
vsoxseg4ei8.v v4, (a0), v12
|
||||||
|
vloxseg5ei8.v v4, (a0), v12
|
||||||
|
vsoxseg5ei8.v v4, (a0), v12
|
||||||
|
vloxseg6ei8.v v4, (a0), v12
|
||||||
|
vsoxseg6ei8.v v4, (a0), v12
|
||||||
|
vloxseg7ei8.v v4, (a0), v12
|
||||||
|
vsoxseg7ei8.v v4, (a0), v12
|
||||||
|
vloxseg8ei8.v v4, (a0), v12
|
||||||
|
vsoxseg8ei8.v v4, (a0), v12
|
||||||
|
vloxseg2ei16.v v4, (a0), v12
|
||||||
|
vsoxseg2ei16.v v4, (a0), v12
|
||||||
|
vloxseg3ei16.v v4, (a0), v12
|
||||||
|
vsoxseg3ei16.v v4, (a0), v12
|
||||||
|
vloxseg4ei16.v v4, (a0), v12
|
||||||
|
vsoxseg4ei16.v v4, (a0), v12
|
||||||
|
vloxseg5ei16.v v4, (a0), v12
|
||||||
|
vsoxseg5ei16.v v4, (a0), v12
|
||||||
|
vloxseg6ei16.v v4, (a0), v12
|
||||||
|
vsoxseg6ei16.v v4, (a0), v12
|
||||||
|
vloxseg7ei16.v v4, (a0), v12
|
||||||
|
vsoxseg7ei16.v v4, (a0), v12
|
||||||
|
vloxseg8ei16.v v4, (a0), v12
|
||||||
|
vsoxseg8ei16.v v4, (a0), v12
|
||||||
|
vloxseg2ei32.v v4, (a0), v12
|
||||||
|
vsoxseg2ei32.v v4, (a0), v12
|
||||||
|
vloxseg3ei32.v v4, (a0), v12
|
||||||
|
vsoxseg3ei32.v v4, (a0), v12
|
||||||
|
vloxseg4ei32.v v4, (a0), v12
|
||||||
|
vsoxseg4ei32.v v4, (a0), v12
|
||||||
|
vloxseg5ei32.v v4, (a0), v12
|
||||||
|
vsoxseg5ei32.v v4, (a0), v12
|
||||||
|
vloxseg6ei32.v v4, (a0), v12
|
||||||
|
vsoxseg6ei32.v v4, (a0), v12
|
||||||
|
vloxseg7ei32.v v4, (a0), v12
|
||||||
|
vsoxseg7ei32.v v4, (a0), v12
|
||||||
|
vloxseg8ei32.v v4, (a0), v12
|
||||||
|
vsoxseg8ei32.v v4, (a0), v12
|
||||||
|
vloxseg2ei64.v v4, (a0), v12
|
||||||
|
vsoxseg2ei64.v v4, (a0), v12
|
||||||
|
vloxseg3ei64.v v4, (a0), v12
|
||||||
|
vsoxseg3ei64.v v4, (a0), v12
|
||||||
|
vloxseg4ei64.v v4, (a0), v12
|
||||||
|
vsoxseg4ei64.v v4, (a0), v12
|
||||||
|
vloxseg5ei64.v v4, (a0), v12
|
||||||
|
vsoxseg5ei64.v v4, (a0), v12
|
||||||
|
vloxseg6ei64.v v4, (a0), v12
|
||||||
|
vsoxseg6ei64.v v4, (a0), v12
|
||||||
|
vloxseg7ei64.v v4, (a0), v12
|
||||||
|
vsoxseg7ei64.v v4, (a0), v12
|
||||||
|
vloxseg8ei64.v v4, (a0), v12
|
||||||
|
vsoxseg8ei64.v v4, (a0), v12
|
||||||
|
|
||||||
|
vluxseg2ei8.v v4, (a0), v12
|
||||||
|
vsuxseg2ei8.v v4, (a0), v12
|
||||||
|
vluxseg3ei8.v v4, (a0), v12
|
||||||
|
vsuxseg3ei8.v v4, (a0), v12
|
||||||
|
vluxseg4ei8.v v4, (a0), v12
|
||||||
|
vsuxseg4ei8.v v4, (a0), v12
|
||||||
|
vluxseg5ei8.v v4, (a0), v12
|
||||||
|
vsuxseg5ei8.v v4, (a0), v12
|
||||||
|
vluxseg6ei8.v v4, (a0), v12
|
||||||
|
vsuxseg6ei8.v v4, (a0), v12
|
||||||
|
vluxseg7ei8.v v4, (a0), v12
|
||||||
|
vsuxseg7ei8.v v4, (a0), v12
|
||||||
|
vluxseg8ei8.v v4, (a0), v12
|
||||||
|
vsuxseg8ei8.v v4, (a0), v12
|
||||||
|
vluxseg2ei16.v v4, (a0), v12
|
||||||
|
vsuxseg2ei16.v v4, (a0), v12
|
||||||
|
vluxseg3ei16.v v4, (a0), v12
|
||||||
|
vsuxseg3ei16.v v4, (a0), v12
|
||||||
|
vluxseg4ei16.v v4, (a0), v12
|
||||||
|
vsuxseg4ei16.v v4, (a0), v12
|
||||||
|
vluxseg5ei16.v v4, (a0), v12
|
||||||
|
vsuxseg5ei16.v v4, (a0), v12
|
||||||
|
vluxseg6ei16.v v4, (a0), v12
|
||||||
|
vsuxseg6ei16.v v4, (a0), v12
|
||||||
|
vluxseg7ei16.v v4, (a0), v12
|
||||||
|
vsuxseg7ei16.v v4, (a0), v12
|
||||||
|
vluxseg8ei16.v v4, (a0), v12
|
||||||
|
vsuxseg8ei16.v v4, (a0), v12
|
||||||
|
vluxseg2ei32.v v4, (a0), v12
|
||||||
|
vsuxseg2ei32.v v4, (a0), v12
|
||||||
|
vluxseg3ei32.v v4, (a0), v12
|
||||||
|
vsuxseg3ei32.v v4, (a0), v12
|
||||||
|
vluxseg4ei32.v v4, (a0), v12
|
||||||
|
vsuxseg4ei32.v v4, (a0), v12
|
||||||
|
vluxseg5ei32.v v4, (a0), v12
|
||||||
|
vsuxseg5ei32.v v4, (a0), v12
|
||||||
|
vluxseg6ei32.v v4, (a0), v12
|
||||||
|
vsuxseg6ei32.v v4, (a0), v12
|
||||||
|
vluxseg7ei32.v v4, (a0), v12
|
||||||
|
vsuxseg7ei32.v v4, (a0), v12
|
||||||
|
vluxseg8ei32.v v4, (a0), v12
|
||||||
|
vsuxseg8ei32.v v4, (a0), v12
|
||||||
|
vluxseg2ei64.v v4, (a0), v12
|
||||||
|
vsuxseg2ei64.v v4, (a0), v12
|
||||||
|
vluxseg3ei64.v v4, (a0), v12
|
||||||
|
vsuxseg3ei64.v v4, (a0), v12
|
||||||
|
vluxseg4ei64.v v4, (a0), v12
|
||||||
|
vsuxseg4ei64.v v4, (a0), v12
|
||||||
|
vluxseg5ei64.v v4, (a0), v12
|
||||||
|
vsuxseg5ei64.v v4, (a0), v12
|
||||||
|
vluxseg6ei64.v v4, (a0), v12
|
||||||
|
vsuxseg6ei64.v v4, (a0), v12
|
||||||
|
vluxseg7ei64.v v4, (a0), v12
|
||||||
|
vsuxseg7ei64.v v4, (a0), v12
|
||||||
|
vluxseg8ei64.v v4, (a0), v12
|
||||||
|
vsuxseg8ei64.v v4, (a0), v12
|
||||||
|
|
||||||
|
vlseg2e8ff.v v4, (a0)
|
||||||
|
vlseg3e8ff.v v4, (a0)
|
||||||
|
vlseg4e8ff.v v4, (a0)
|
||||||
|
vlseg5e8ff.v v4, (a0)
|
||||||
|
vlseg6e8ff.v v4, (a0)
|
||||||
|
vlseg7e8ff.v v4, (a0)
|
||||||
|
vlseg8e8ff.v v4, (a0)
|
||||||
|
vlseg2e16ff.v v4, (a0)
|
||||||
|
vlseg3e16ff.v v4, (a0)
|
||||||
|
vlseg4e16ff.v v4, (a0)
|
||||||
|
vlseg5e16ff.v v4, (a0)
|
||||||
|
vlseg6e16ff.v v4, (a0)
|
||||||
|
vlseg7e16ff.v v4, (a0)
|
||||||
|
vlseg8e16ff.v v4, (a0)
|
||||||
|
vlseg2e32ff.v v4, (a0)
|
||||||
|
vlseg3e32ff.v v4, (a0)
|
||||||
|
vlseg4e32ff.v v4, (a0)
|
||||||
|
vlseg5e32ff.v v4, (a0)
|
||||||
|
vlseg6e32ff.v v4, (a0)
|
||||||
|
vlseg7e32ff.v v4, (a0)
|
||||||
|
vlseg8e32ff.v v4, (a0)
|
||||||
|
vlseg2e64ff.v v4, (a0)
|
||||||
|
vlseg3e64ff.v v4, (a0)
|
||||||
|
vlseg4e64ff.v v4, (a0)
|
||||||
|
vlseg5e64ff.v v4, (a0)
|
||||||
|
vlseg6e64ff.v v4, (a0)
|
||||||
|
vlseg7e64ff.v v4, (a0)
|
||||||
|
vlseg8e64ff.v v4, (a0)
|
||||||
|
|
||||||
|
vl1r.v v3, (a0)
|
||||||
|
vl1re8.v v3, (a0)
|
||||||
|
vl1re16.v v3, (a0)
|
||||||
|
vl1re32.v v3, (a0)
|
||||||
|
vl1re64.v v3, (a0)
|
||||||
|
vl2r.v v2, (a0)
|
||||||
|
vl2re8.v v2, (a0)
|
||||||
|
vl2re16.v v2, (a0)
|
||||||
|
vl2re32.v v2, (a0)
|
||||||
|
vl2re64.v v2, (a0)
|
||||||
|
vl4r.v v4, (a0)
|
||||||
|
vl4re8.v v4, (a0)
|
||||||
|
vl4re16.v v4, (a0)
|
||||||
|
vl4re32.v v4, (a0)
|
||||||
|
vl4re64.v v4, (a0)
|
||||||
|
vl8r.v v8, (a0)
|
||||||
|
vl8re8.v v8, (a0)
|
||||||
|
vl8re16.v v8, (a0)
|
||||||
|
vl8re32.v v8, (a0)
|
||||||
|
vl8re64.v v8, (a0)
|
||||||
|
|
||||||
|
vs1r.v v3, (a1)
|
||||||
|
vs2r.v v2, (a1)
|
||||||
|
vs4r.v v4, (a1)
|
||||||
|
vs8r.v v8, (a1)
|
||||||
|
|
||||||
|
vamoaddei8.v v4, (a1), v8, v4
|
||||||
|
vamoswapei8.v v4, (a1), v8, v4
|
||||||
|
vamoxorei8.v v4, (a1), v8, v4
|
||||||
|
vamoandei8.v v4, (a1), v8, v4
|
||||||
|
vamoorei8.v v4, (a1), v8, v4
|
||||||
|
vamominei8.v v4, (a1), v8, v4
|
||||||
|
vamomaxei8.v v4, (a1), v8, v4
|
||||||
|
vamominuei8.v v4, (a1), v8, v4
|
||||||
|
vamomaxuei8.v v4, (a1), v8, v4
|
||||||
|
vamoaddei8.v v4, 0(a1), v8, v4
|
||||||
|
vamoswapei8.v v4, 0(a1), v8, v4
|
||||||
|
vamoxorei8.v v4, 0(a1), v8, v4
|
||||||
|
vamoandei8.v v4, 0(a1), v8, v4
|
||||||
|
vamoorei8.v v4, 0(a1), v8, v4
|
||||||
|
vamominei8.v v4, 0(a1), v8, v4
|
||||||
|
vamomaxei8.v v4, 0(a1), v8, v4
|
||||||
|
vamominuei8.v v4, 0(a1), v8, v4
|
||||||
|
vamomaxuei8.v v4, 0(a1), v8, v4
|
||||||
|
|
||||||
|
vamoaddei16.v v4, (a1), v8, v4
|
||||||
|
vamoswapei16.v v4, (a1), v8, v4
|
||||||
|
vamoxorei16.v v4, (a1), v8, v4
|
||||||
|
vamoandei16.v v4, (a1), v8, v4
|
||||||
|
vamoorei16.v v4, (a1), v8, v4
|
||||||
|
vamominei16.v v4, (a1), v8, v4
|
||||||
|
vamomaxei16.v v4, (a1), v8, v4
|
||||||
|
vamominuei16.v v4, (a1), v8, v4
|
||||||
|
vamomaxuei16.v v4, (a1), v8, v4
|
||||||
|
vamoaddei16.v v4, 0(a1), v8, v4
|
||||||
|
vamoswapei16.v v4, 0(a1), v8, v4
|
||||||
|
vamoxorei16.v v4, 0(a1), v8, v4
|
||||||
|
vamoandei16.v v4, 0(a1), v8, v4
|
||||||
|
vamoorei16.v v4, 0(a1), v8, v4
|
||||||
|
vamominei16.v v4, 0(a1), v8, v4
|
||||||
|
vamomaxei16.v v4, 0(a1), v8, v4
|
||||||
|
vamominuei16.v v4, 0(a1), v8, v4
|
||||||
|
vamomaxuei16.v v4, 0(a1), v8, v4
|
||||||
|
|
||||||
|
vamoaddei32.v v4, (a1), v8, v4
|
||||||
|
vamoswapei32.v v4, (a1), v8, v4
|
||||||
|
vamoxorei32.v v4, (a1), v8, v4
|
||||||
|
vamoandei32.v v4, (a1), v8, v4
|
||||||
|
vamoorei32.v v4, (a1), v8, v4
|
||||||
|
vamominei32.v v4, (a1), v8, v4
|
||||||
|
vamomaxei32.v v4, (a1), v8, v4
|
||||||
|
vamominuei32.v v4, (a1), v8, v4
|
||||||
|
vamomaxuei32.v v4, (a1), v8, v4
|
||||||
|
vamoaddei32.v v4, 0(a1), v8, v4
|
||||||
|
vamoswapei32.v v4, 0(a1), v8, v4
|
||||||
|
vamoxorei32.v v4, 0(a1), v8, v4
|
||||||
|
vamoandei32.v v4, 0(a1), v8, v4
|
||||||
|
vamoorei32.v v4, 0(a1), v8, v4
|
||||||
|
vamominei32.v v4, 0(a1), v8, v4
|
||||||
|
vamomaxei32.v v4, 0(a1), v8, v4
|
||||||
|
vamominuei32.v v4, 0(a1), v8, v4
|
||||||
|
vamomaxuei32.v v4, 0(a1), v8, v4
|
||||||
|
|
||||||
|
vamoaddei64.v v4, (a1), v8, v4
|
||||||
|
vamoswapei64.v v4, (a1), v8, v4
|
||||||
|
vamoxorei64.v v4, (a1), v8, v4
|
||||||
|
vamoandei64.v v4, (a1), v8, v4
|
||||||
|
vamoorei64.v v4, (a1), v8, v4
|
||||||
|
vamominei64.v v4, (a1), v8, v4
|
||||||
|
vamomaxei64.v v4, (a1), v8, v4
|
||||||
|
vamominuei64.v v4, (a1), v8, v4
|
||||||
|
vamomaxuei64.v v4, (a1), v8, v4
|
||||||
|
vamoaddei64.v v4, 0(a1), v8, v4
|
||||||
|
vamoswapei64.v v4, 0(a1), v8, v4
|
||||||
|
vamoxorei64.v v4, 0(a1), v8, v4
|
||||||
|
vamoandei64.v v4, 0(a1), v8, v4
|
||||||
|
vamoorei64.v v4, 0(a1), v8, v4
|
||||||
|
vamominei64.v v4, 0(a1), v8, v4
|
||||||
|
vamomaxei64.v v4, 0(a1), v8, v4
|
||||||
|
vamominuei64.v v4, 0(a1), v8, v4
|
||||||
|
vamomaxuei64.v v4, 0(a1), v8, v4
|
||||||
3
gas/testsuite/gas/riscv/extended/vector-insns-fail-zvl.d
Normal file
3
gas/testsuite/gas/riscv/extended/vector-insns-fail-zvl.d
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
#as: -march=rv32i_zvl65536b
|
||||||
|
#source: ../empty.s
|
||||||
|
#error_output: vector-insns-fail-zvl.l
|
||||||
2
gas/testsuite/gas/riscv/extended/vector-insns-fail-zvl.l
Normal file
2
gas/testsuite/gas/riscv/extended/vector-insns-fail-zvl.l
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
.*Assembler messages:
|
||||||
|
.*Error: zvl\*b extensions need to enable either `v' or `zve' extension
|
||||||
29
gas/testsuite/gas/riscv/extended/vector-insns-vmsgtvx.d
Normal file
29
gas/testsuite/gas/riscv/extended/vector-insns-vmsgtvx.d
Normal file
@@ -0,0 +1,29 @@
|
|||||||
|
#as: -march=rv32iv
|
||||||
|
#objdump: -dr
|
||||||
|
|
||||||
|
.*:[ ]+file format .*
|
||||||
|
|
||||||
|
|
||||||
|
Disassembly of section .text:
|
||||||
|
|
||||||
|
0+000 <.text>:
|
||||||
|
[ ]+[0-9a-f]+:[ ]+6e85c257[ ]+vmslt.vx[ ]+v4,v8,a1
|
||||||
|
[ ]+[0-9a-f]+:[ ]+76422257[ ]+vmnot.m[ ]+v4,v4
|
||||||
|
[ ]+[0-9a-f]+:[ ]+6cc64457[ ]+vmslt.vx[ ]+v8,v12,a2,v0.t
|
||||||
|
[ ]+[0-9a-f]+:[ ]+6e802457[ ]+vmxor.mm[ ]+v8,v8,v0
|
||||||
|
[ ]+[0-9a-f]+:[ ]+6c85c657[ ]+vmslt.vx[ ]+v12,v8,a1,v0.t
|
||||||
|
[ ]+[0-9a-f]+:[ ]+62062057[ ]+vmandn.mm[ ]+v0,v0,v12
|
||||||
|
[ ]+[0-9a-f]+:[ ]+6c85c657[ ]+vmslt.vx[ ]+v12,v8,a1,v0.t
|
||||||
|
[ ]+[0-9a-f]+:[ ]+62062657[ ]+vmandn.mm[ ]+v12,v0,v12
|
||||||
|
[ ]+[0-9a-f]+:[ ]+62402257[ ]+vmandn.mm[ ]+v4,v4,v0
|
||||||
|
[ ]+[0-9a-f]+:[ ]+6ac22257[ ]+vmor.mm[ ]+v4,v12,v4
|
||||||
|
[ ]+[0-9a-f]+:[ ]+6a85c257[ ]+vmsltu.vx[ ]+v4,v8,a1
|
||||||
|
[ ]+[0-9a-f]+:[ ]+76422257[ ]+vmnot.m[ ]+v4,v4
|
||||||
|
[ ]+[0-9a-f]+:[ ]+68c64457[ ]+vmsltu.vx[ ]+v8,v12,a2,v0.t
|
||||||
|
[ ]+[0-9a-f]+:[ ]+6e802457[ ]+vmxor.mm[ ]+v8,v8,v0
|
||||||
|
[ ]+[0-9a-f]+:[ ]+6885c657[ ]+vmsltu.vx[ ]+v12,v8,a1,v0.t
|
||||||
|
[ ]+[0-9a-f]+:[ ]+62062057[ ]+vmandn.mm[ ]+v0,v0,v12
|
||||||
|
[ ]+[0-9a-f]+:[ ]+6885c657[ ]+vmsltu.vx[ ]+v12,v8,a1,v0.t
|
||||||
|
[ ]+[0-9a-f]+:[ ]+62062657[ ]+vmandn.mm[ ]+v12,v0,v12
|
||||||
|
[ ]+[0-9a-f]+:[ ]+62402257[ ]+vmandn.mm[ ]+v4,v4,v0
|
||||||
|
[ ]+[0-9a-f]+:[ ]+6ac22257[ ]+vmor.mm[ ]+v4,v12,v4
|
||||||
9
gas/testsuite/gas/riscv/extended/vector-insns-vmsgtvx.s
Normal file
9
gas/testsuite/gas/riscv/extended/vector-insns-vmsgtvx.s
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
vmsge.vx v4, v8, a1 # unmasked va >= x
|
||||||
|
vmsge.vx v8, v12, a2, v0.t # masked va >= x, vd != v0
|
||||||
|
vmsge.vx v0, v8, a1, v0.t, v12 # masked va >= x, vd == v0
|
||||||
|
vmsge.vx v4, v8, a1, v0.t, v12 # masked va >= x, any vd
|
||||||
|
|
||||||
|
vmsgeu.vx v4, v8, a1 # unmasked va >= x
|
||||||
|
vmsgeu.vx v8, v12, a2, v0.t # masked va >= x, vd != v0
|
||||||
|
vmsgeu.vx v0, v8, a1, v0.t, v12 # masked va >= x, vd == v0
|
||||||
|
vmsgeu.vx v4, v8, a1, v0.t, v12 # masked va >= x, any vd
|
||||||
17
gas/testsuite/gas/riscv/extended/vector-insns-zero-imm.d
Normal file
17
gas/testsuite/gas/riscv/extended/vector-insns-zero-imm.d
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
#as: -march=rv32ifv
|
||||||
|
#objdump: -dr
|
||||||
|
|
||||||
|
.*:[ ]+file format .*
|
||||||
|
|
||||||
|
|
||||||
|
Disassembly of section .text:
|
||||||
|
|
||||||
|
0+000 <.text>:
|
||||||
|
[ ]+[0-9a-f]+:[ ]+768fb257[ ]+vmsle.vi[ ]+v4,v8,-1
|
||||||
|
[ ]+[0-9a-f]+:[ ]+748fb257[ ]+vmsle.vi[ ]+v4,v8,-1,v0.t
|
||||||
|
[ ]+[0-9a-f]+:[ ]+66840257[ ]+vmsne.vv[ ]+v4,v8,v8
|
||||||
|
[ ]+[0-9a-f]+:[ ]+64840257[ ]+vmsne.vv[ ]+v4,v8,v8,v0.t
|
||||||
|
[ ]+[0-9a-f]+:[ ]+7e8fb257[ ]+vmsgt.vi[ ]+v4,v8,-1
|
||||||
|
[ ]+[0-9a-f]+:[ ]+7c8fb257[ ]+vmsgt.vi[ ]+v4,v8,-1,v0.t
|
||||||
|
[ ]+[0-9a-f]+:[ ]+62840257[ ]+vmseq.vv[ ]+v4,v8,v8
|
||||||
|
[ ]+[0-9a-f]+:[ ]+60840257[ ]+vmseq.vv[ ]+v4,v8,v8,v0.t
|
||||||
8
gas/testsuite/gas/riscv/extended/vector-insns-zero-imm.s
Normal file
8
gas/testsuite/gas/riscv/extended/vector-insns-zero-imm.s
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
vmslt.vi v4, v8, 0
|
||||||
|
vmslt.vi v4, v8, 0, v0.t
|
||||||
|
vmsltu.vi v4, v8, 0
|
||||||
|
vmsltu.vi v4, v8, 0, v0.t
|
||||||
|
vmsge.vi v4, v8, 0
|
||||||
|
vmsge.vi v4, v8, 0, v0.t
|
||||||
|
vmsgeu.vi v4, v8, 0
|
||||||
|
vmsgeu.vi v4, v8, 0, v0.t
|
||||||
1954
gas/testsuite/gas/riscv/extended/vector-insns.d
Normal file
1954
gas/testsuite/gas/riscv/extended/vector-insns.d
Normal file
File diff suppressed because it is too large
Load Diff
2195
gas/testsuite/gas/riscv/extended/vector-insns.s
Normal file
2195
gas/testsuite/gas/riscv/extended/vector-insns.s
Normal file
File diff suppressed because it is too large
Load Diff
2091
include/opcode/riscv-opc-extended.h
Normal file
2091
include/opcode/riscv-opc-extended.h
Normal file
File diff suppressed because it is too large
Load Diff
@@ -22,6 +22,7 @@
|
|||||||
#define _RISCV_H_
|
#define _RISCV_H_
|
||||||
|
|
||||||
#include "riscv-opc.h"
|
#include "riscv-opc.h"
|
||||||
|
#include "riscv-opc-extended.h"
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
|
|
||||||
@@ -303,7 +304,6 @@ static const char * const riscv_pred_succ[16] =
|
|||||||
enum riscv_insn_class
|
enum riscv_insn_class
|
||||||
{
|
{
|
||||||
INSN_CLASS_NONE,
|
INSN_CLASS_NONE,
|
||||||
|
|
||||||
INSN_CLASS_I,
|
INSN_CLASS_I,
|
||||||
INSN_CLASS_C,
|
INSN_CLASS_C,
|
||||||
INSN_CLASS_A,
|
INSN_CLASS_A,
|
||||||
@@ -320,6 +320,7 @@ enum riscv_insn_class
|
|||||||
INSN_CLASS_ZBB,
|
INSN_CLASS_ZBB,
|
||||||
INSN_CLASS_ZBC,
|
INSN_CLASS_ZBC,
|
||||||
INSN_CLASS_ZBS,
|
INSN_CLASS_ZBS,
|
||||||
|
INSN_CLASS_EXTENDED
|
||||||
};
|
};
|
||||||
|
|
||||||
/* This structure holds information for a particular instruction. */
|
/* This structure holds information for a particular instruction. */
|
||||||
@@ -333,7 +334,7 @@ struct riscv_opcode
|
|||||||
|
|
||||||
/* Class to which this instruction belongs. Used to decide whether or
|
/* Class to which this instruction belongs. Used to decide whether or
|
||||||
not this instruction is legal in the current -march context. */
|
not this instruction is legal in the current -march context. */
|
||||||
enum riscv_insn_class insn_class;
|
int insn_class;
|
||||||
|
|
||||||
/* A string describing the arguments for this instruction. */
|
/* A string describing the arguments for this instruction. */
|
||||||
const char *args;
|
const char *args;
|
||||||
@@ -352,7 +353,8 @@ struct riscv_opcode
|
|||||||
|
|
||||||
/* A function to determine if a word corresponds to this instruction.
|
/* A function to determine if a word corresponds to this instruction.
|
||||||
Usually, this computes ((word & mask) == match). */
|
Usually, this computes ((word & mask) == match). */
|
||||||
int (*match_func) (const struct riscv_opcode *op, insn_t word);
|
int (*match_func) (const struct riscv_opcode *op, insn_t word,
|
||||||
|
int constraints, const char **error);
|
||||||
|
|
||||||
/* For a macro, this is INSN_MACRO. Otherwise, it is a collection
|
/* For a macro, this is INSN_MACRO. Otherwise, it is a collection
|
||||||
of bits describing the instruction, notably any relevant hazard
|
of bits describing the instruction, notably any relevant hazard
|
||||||
@@ -423,7 +425,7 @@ enum
|
|||||||
M_ZEXTW,
|
M_ZEXTW,
|
||||||
M_SEXTB,
|
M_SEXTB,
|
||||||
M_SEXTH,
|
M_SEXTH,
|
||||||
M_NUM_MACROS
|
M_EXTENDED
|
||||||
};
|
};
|
||||||
|
|
||||||
/* The mapping symbol states. */
|
/* The mapping symbol states. */
|
||||||
@@ -442,4 +444,116 @@ extern const char * const riscv_fpr_names_abi[NFPR];
|
|||||||
extern const struct riscv_opcode riscv_opcodes[];
|
extern const struct riscv_opcode riscv_opcodes[];
|
||||||
extern const struct riscv_opcode riscv_insn_types[];
|
extern const struct riscv_opcode riscv_insn_types[];
|
||||||
|
|
||||||
|
/* Extended extensions. */
|
||||||
|
|
||||||
|
/* The insn_info fields. */
|
||||||
|
#define INSN_V_EEW64 0x10000000
|
||||||
|
/* RVV IMM encodings. */
|
||||||
|
#define EXTRACT_RVV_VI_IMM(x) \
|
||||||
|
(RV_X(x, 15, 5) | (-RV_X(x, 19, 1) << 5))
|
||||||
|
#define EXTRACT_RVV_VI_UIMM(x) \
|
||||||
|
(RV_X(x, 15, 5))
|
||||||
|
#define EXTRACT_RVV_OFFSET(x) \
|
||||||
|
(RV_X(x, 29, 3))
|
||||||
|
#define EXTRACT_RVV_VB_IMM(x) \
|
||||||
|
(RV_X(x, 20, 10))
|
||||||
|
#define EXTRACT_RVV_VC_IMM(x) \
|
||||||
|
(RV_X(x, 20, 11))
|
||||||
|
#define ENCODE_RVV_VB_IMM(x) \
|
||||||
|
(RV_X(x, 0, 10) << 20)
|
||||||
|
#define ENCODE_RVV_VC_IMM(x) \
|
||||||
|
(RV_X(x, 0, 11) << 20)
|
||||||
|
#define VALID_RVV_VB_IMM(x) (EXTRACT_RVV_VB_IMM(ENCODE_RVV_VB_IMM(x)) == (x))
|
||||||
|
#define VALID_RVV_VC_IMM(x) (EXTRACT_RVV_VC_IMM(ENCODE_RVV_VC_IMM(x)) == (x))
|
||||||
|
/* RVV fields. */
|
||||||
|
#define OP_MASK_VD 0x1f
|
||||||
|
#define OP_SH_VD 7
|
||||||
|
#define OP_MASK_VS1 0x1f
|
||||||
|
#define OP_SH_VS1 15
|
||||||
|
#define OP_MASK_VS2 0x1f
|
||||||
|
#define OP_SH_VS2 20
|
||||||
|
#define OP_MASK_VIMM 0x1f
|
||||||
|
#define OP_SH_VIMM 15
|
||||||
|
#define OP_MASK_VMASK 0x1
|
||||||
|
#define OP_SH_VMASK 25
|
||||||
|
#define OP_MASK_VFUNCT6 0x3f
|
||||||
|
#define OP_SH_VFUNCT6 26
|
||||||
|
#define OP_MASK_VLMUL 0x7
|
||||||
|
#define OP_SH_VLMUL 0
|
||||||
|
#define OP_MASK_VSEW 0x7
|
||||||
|
#define OP_SH_VSEW 3
|
||||||
|
#define OP_MASK_VTA 0x1
|
||||||
|
#define OP_SH_VTA 6
|
||||||
|
#define OP_MASK_VMA 0x1
|
||||||
|
#define OP_SH_VMA 7
|
||||||
|
#define OP_MASK_VTYPE_RES 0x1
|
||||||
|
#define OP_SH_VTYPE_RES 10
|
||||||
|
#define OP_MASK_VWD 0x1
|
||||||
|
#define OP_SH_VWD 26
|
||||||
|
/* RVV definitions. */
|
||||||
|
#define NVECR 32
|
||||||
|
#define NVECM 1
|
||||||
|
|
||||||
|
/* T-HEAD IMM Encoding. */
|
||||||
|
#define EXTRACT_VENDOR_THEAD_IMM(x,nbit,at) \
|
||||||
|
(RV_X(x, at, nbit))
|
||||||
|
#define EXTRACT_VENDOR_THEAD_SIGN_IMM(x,nbit,at) \
|
||||||
|
(RV_X(x, at, nbit) | ((-(RV_X(x, (at+nbit-1),1))) << (nbit)))
|
||||||
|
|
||||||
|
#define ENCODE_VENDOR_THEAD_IMM(x,nbit,at) \
|
||||||
|
(RV_X(x, 0, nbit) << at)
|
||||||
|
#define ENCODE_VENDOR_THEAD_SIGN_IMM(x,nbit,at) \
|
||||||
|
(RV_X(x, 0, nbit) << at)
|
||||||
|
|
||||||
|
#define VALID_VENDOR_THEAD_IMM(x,nbit,at) \
|
||||||
|
(EXTRACT_VENDOR_THEAD_IMM(ENCODE_VENDOR_THEAD_IMM(x,nbit,at),nbit,at) == (x))
|
||||||
|
#define VALID_VENDOR_THEAD_SIGN_IMM(x,nbit,at) \
|
||||||
|
(EXTRACT_VENDOR_THEAD_SIGN_IMM(ENCODE_VENDOR_THEAD_SIGN_IMM(x,nbit,at),nbit,at) == (x))
|
||||||
|
|
||||||
|
/* All RISC-V extended instructions belong to at least one of
|
||||||
|
these classes. */
|
||||||
|
enum riscv_extended_insn_class
|
||||||
|
{
|
||||||
|
/* Draft */
|
||||||
|
INSN_CLASS_V = INSN_CLASS_EXTENDED,
|
||||||
|
INSN_CLASS_V_AND_F,
|
||||||
|
INSN_CLASS_ZVAMO,
|
||||||
|
INSN_CLASS_ZFH,
|
||||||
|
INSN_CLASS_D_AND_ZFH,
|
||||||
|
INSN_CLASS_Q_AND_ZFH,
|
||||||
|
INSN_CLASS_SVINVAL,
|
||||||
|
|
||||||
|
/* INSN class for THEAD. */
|
||||||
|
INSN_CLASS_THEADC,
|
||||||
|
INSN_CLASS_THEADC_OR_THEADE,
|
||||||
|
INSN_CLASS_THEADC_OR_THEADE_OR_THEADSE,
|
||||||
|
INSN_CLASS_THEADE,
|
||||||
|
INSN_CLASS_THEADSE,
|
||||||
|
|
||||||
|
/* SiFive. */
|
||||||
|
INSN_CLASS_XSF_CDISCARDDLONE,
|
||||||
|
INSN_CLASS_XSF_CFLUSHDLONE,
|
||||||
|
INSN_CLASS_XSF_CFLUSHILONE,
|
||||||
|
};
|
||||||
|
|
||||||
|
/* This is a list of macro expanded instructions for extended
|
||||||
|
extensions. */
|
||||||
|
enum
|
||||||
|
{
|
||||||
|
M_VMSGE = M_EXTENDED,
|
||||||
|
M_VMSGEU,
|
||||||
|
M_FLH,
|
||||||
|
M_FSH,
|
||||||
|
};
|
||||||
|
|
||||||
|
/* RVV */
|
||||||
|
extern const char * const riscv_vecr_names_numeric[NVECR];
|
||||||
|
extern const char * const riscv_vecm_names_numeric[NVECM];
|
||||||
|
extern const char * const riscv_vsew[8];
|
||||||
|
extern const char * const riscv_vlmul[8];
|
||||||
|
extern const char * const riscv_vta[2];
|
||||||
|
extern const char * const riscv_vma[2];
|
||||||
|
|
||||||
|
extern const struct riscv_opcode *riscv_extended_opcodes[];
|
||||||
|
|
||||||
#endif /* _RISCV_H_ */
|
#endif /* _RISCV_H_ */
|
||||||
|
|||||||
@@ -174,25 +174,179 @@ maybe_print_address (struct riscv_private_data *pd, int base_reg, int offset,
|
|||||||
pd->print_addr = (bfd_vma)(int32_t) pd->print_addr;
|
pd->print_addr = (bfd_vma)(int32_t) pd->print_addr;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Print insn arguments for extended extensions. */
|
||||||
|
|
||||||
|
static bool
|
||||||
|
print_extended_insn_args (const char **opcode_args,
|
||||||
|
insn_t l,
|
||||||
|
disassemble_info *info)
|
||||||
|
{
|
||||||
|
fprintf_ftype print = info->fprintf_func;
|
||||||
|
const char *oparg = *opcode_args;
|
||||||
|
|
||||||
|
switch (*oparg)
|
||||||
|
{
|
||||||
|
case 'V': /* RVV */
|
||||||
|
switch (*++oparg)
|
||||||
|
{
|
||||||
|
case 'd':
|
||||||
|
case 'f':
|
||||||
|
print (info->stream, "%s",
|
||||||
|
riscv_vecr_names_numeric[EXTRACT_OPERAND (VD, l)]);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'e':
|
||||||
|
if (!EXTRACT_OPERAND (VWD, l))
|
||||||
|
print (info->stream, "%s", riscv_gpr_names[0]);
|
||||||
|
else
|
||||||
|
print (info->stream, "%s",
|
||||||
|
riscv_vecr_names_numeric[EXTRACT_OPERAND (VD, l)]);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 's':
|
||||||
|
print (info->stream, "%s",
|
||||||
|
riscv_vecr_names_numeric[EXTRACT_OPERAND (VS1, l)]);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 't':
|
||||||
|
case 'u': /* VS1 == VS2 already verified at this point. */
|
||||||
|
case 'v': /* VD == VS1 == VS2 already verified at this point. */
|
||||||
|
print (info->stream, "%s",
|
||||||
|
riscv_vecr_names_numeric[EXTRACT_OPERAND (VS2, l)]);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case '0':
|
||||||
|
print (info->stream, "%s", riscv_vecr_names_numeric[0]);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'b':
|
||||||
|
case 'c':
|
||||||
|
{
|
||||||
|
int imm = (*oparg == 'b') ? EXTRACT_RVV_VB_IMM (l)
|
||||||
|
: EXTRACT_RVV_VC_IMM (l);
|
||||||
|
unsigned int imm_vlmul = EXTRACT_OPERAND (VLMUL, imm);
|
||||||
|
unsigned int imm_vsew = EXTRACT_OPERAND (VSEW, imm);
|
||||||
|
unsigned int imm_vta = EXTRACT_OPERAND (VTA, imm);
|
||||||
|
unsigned int imm_vma = EXTRACT_OPERAND (VMA, imm);
|
||||||
|
unsigned int imm_vtype_res = EXTRACT_OPERAND (VTYPE_RES, imm);
|
||||||
|
|
||||||
|
if (imm_vsew < ARRAY_SIZE (riscv_vsew)
|
||||||
|
&& imm_vlmul < ARRAY_SIZE (riscv_vlmul)
|
||||||
|
&& imm_vta < ARRAY_SIZE (riscv_vta)
|
||||||
|
&& imm_vma < ARRAY_SIZE (riscv_vma)
|
||||||
|
&& ! imm_vtype_res)
|
||||||
|
print (info->stream, "%s,%s,%s,%s", riscv_vsew[imm_vsew],
|
||||||
|
riscv_vlmul[imm_vlmul], riscv_vta[imm_vta],
|
||||||
|
riscv_vma[imm_vma]);
|
||||||
|
else
|
||||||
|
print (info->stream, "%d", imm);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'i':
|
||||||
|
print (info->stream, "%d", (int)EXTRACT_RVV_VI_IMM (l));
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'j':
|
||||||
|
print (info->stream, "%d", (int)EXTRACT_RVV_VI_UIMM (l));
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'k':
|
||||||
|
print (info->stream, "%d", (int)EXTRACT_RVV_OFFSET (l));
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'm':
|
||||||
|
if (! EXTRACT_OPERAND (VMASK, l))
|
||||||
|
print (info->stream, ",%s", riscv_vecm_names_numeric[0]);
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'X':
|
||||||
|
{
|
||||||
|
int nbit = 0;
|
||||||
|
int at = -1;
|
||||||
|
char c = 0;
|
||||||
|
int shift = 0;
|
||||||
|
oparg++;
|
||||||
|
c = *oparg++;
|
||||||
|
switch (c)
|
||||||
|
{
|
||||||
|
case 'I':
|
||||||
|
nbit = strtol (oparg, (char **) &oparg, 10);
|
||||||
|
if ((*oparg) =='@')
|
||||||
|
at = strtol (++oparg, (char **) &oparg, 10);
|
||||||
|
|
||||||
|
oparg--;
|
||||||
|
|
||||||
|
print (info->stream, "%d",
|
||||||
|
(unsigned int) (EXTRACT_VENDOR_THEAD_IMM (l, nbit, at)
|
||||||
|
<< shift));
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'S':
|
||||||
|
nbit = strtol (oparg, (char **) &oparg, 10);
|
||||||
|
if ((*oparg) == '<' && (*(oparg + 1) == '<'))
|
||||||
|
{
|
||||||
|
oparg += 2;
|
||||||
|
shift = strtol (oparg, (char **) &oparg, 10);
|
||||||
|
}
|
||||||
|
if ((*oparg) =='@')
|
||||||
|
at = strtol (++oparg, (char **) &oparg, 10);
|
||||||
|
|
||||||
|
oparg--;
|
||||||
|
|
||||||
|
print (info->stream, "%d",
|
||||||
|
(unsigned) (EXTRACT_VENDOR_THEAD_SIGN_IMM (l, nbit, at)
|
||||||
|
<< shift));
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'g':
|
||||||
|
nbit = strtol (oparg, (char **) &oparg, 10);
|
||||||
|
if ((*oparg) =='@')
|
||||||
|
at = strtol (++oparg, (char **) &oparg, 10);
|
||||||
|
|
||||||
|
oparg--;
|
||||||
|
|
||||||
|
print (info->stream, "%s",
|
||||||
|
riscv_gpr_names[EXTRACT_VENDOR_THEAD_IMM (l, nbit, at)]);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
*opcode_args = oparg;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
/* Print insn arguments for 32/64-bit code. */
|
/* Print insn arguments for 32/64-bit code. */
|
||||||
|
|
||||||
static void
|
static void
|
||||||
print_insn_args (const char *d, insn_t l, bfd_vma pc, disassemble_info *info)
|
print_insn_args (const char *oparg, insn_t l, bfd_vma pc, disassemble_info *info)
|
||||||
{
|
{
|
||||||
struct riscv_private_data *pd = info->private_data;
|
struct riscv_private_data *pd = info->private_data;
|
||||||
int rs1 = (l >> OP_SH_RS1) & OP_MASK_RS1;
|
int rs1 = (l >> OP_SH_RS1) & OP_MASK_RS1;
|
||||||
int rd = (l >> OP_SH_RD) & OP_MASK_RD;
|
int rd = (l >> OP_SH_RD) & OP_MASK_RD;
|
||||||
fprintf_ftype print = info->fprintf_func;
|
fprintf_ftype print = info->fprintf_func;
|
||||||
|
const char *opargStart;
|
||||||
|
|
||||||
if (*d != '\0')
|
if (*oparg != '\0')
|
||||||
print (info->stream, "\t");
|
print (info->stream, "\t");
|
||||||
|
|
||||||
for (; *d != '\0'; d++)
|
for (; *oparg != '\0'; oparg++)
|
||||||
{
|
{
|
||||||
switch (*d)
|
opargStart = oparg;
|
||||||
|
switch (*oparg)
|
||||||
{
|
{
|
||||||
case 'C': /* RVC */
|
case 'C': /* RVC */
|
||||||
switch (*++d)
|
switch (*++oparg)
|
||||||
{
|
{
|
||||||
case 's': /* RS1 x8-x15. */
|
case 's': /* RS1 x8-x15. */
|
||||||
case 'w': /* RS1 x8-x15. */
|
case 'w': /* RS1 x8-x15. */
|
||||||
@@ -281,12 +435,12 @@ print_insn_args (const char *d, insn_t l, bfd_vma pc, disassemble_info *info)
|
|||||||
case ')':
|
case ')':
|
||||||
case '[':
|
case '[':
|
||||||
case ']':
|
case ']':
|
||||||
print (info->stream, "%c", *d);
|
print (info->stream, "%c", *oparg);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case '0':
|
case '0':
|
||||||
/* Only print constant 0 if it is the last argument. */
|
/* Only print constant 0 if it is the last argument. */
|
||||||
if (!d[1])
|
if (!oparg[1])
|
||||||
print (info->stream, "0");
|
print (info->stream, "0");
|
||||||
break;
|
break;
|
||||||
|
|
||||||
@@ -415,6 +569,7 @@ print_insn_args (const char *d, insn_t l, bfd_vma pc, disassemble_info *info)
|
|||||||
#define DECLARE_CSR_ALIAS(name, num, class, define_version, abort_version) \
|
#define DECLARE_CSR_ALIAS(name, num, class, define_version, abort_version) \
|
||||||
DECLARE_CSR (name, num, class, define_version, abort_version)
|
DECLARE_CSR (name, num, class, define_version, abort_version)
|
||||||
#include "opcode/riscv-opc.h"
|
#include "opcode/riscv-opc.h"
|
||||||
|
#include "opcode/riscv-opc-extended.h"
|
||||||
#undef DECLARE_CSR
|
#undef DECLARE_CSR
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -430,14 +585,86 @@ print_insn_args (const char *d, insn_t l, bfd_vma pc, disassemble_info *info)
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
/* xgettext:c-format */
|
oparg = opargStart;
|
||||||
print (info->stream, _("# internal error, undefined modifier (%c)"),
|
if (!print_extended_insn_args (&oparg, l, info))
|
||||||
*d);
|
{
|
||||||
return;
|
/* xgettext:c-format */
|
||||||
|
print (info->stream,
|
||||||
|
_("# internal error, undefined modifier (%s)"), opargStart);
|
||||||
|
return;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Find the right opcode name when disassembling. */
|
||||||
|
|
||||||
|
static const struct riscv_opcode *
|
||||||
|
riscv_disassemble_opcode (insn_t word,
|
||||||
|
disassemble_info *info)
|
||||||
|
{
|
||||||
|
static const struct riscv_opcode *riscv_hash[OP_MASK_OP + 1];
|
||||||
|
const struct riscv_opcode *op;
|
||||||
|
static bool init = 0;
|
||||||
|
unsigned xlen = 0;
|
||||||
|
unsigned int i;
|
||||||
|
|
||||||
|
#define OP_HASH_IDX(i) ((i) & (riscv_insn_length (i) == 2 ? 0x3 : OP_MASK_OP))
|
||||||
|
|
||||||
|
/* Build a hash table to shorten the search time. For now we just build
|
||||||
|
the hash for the standard instructions. */
|
||||||
|
if (! init)
|
||||||
|
{
|
||||||
|
for (op = riscv_opcodes; op->name; op++)
|
||||||
|
if (!riscv_hash[OP_HASH_IDX (op->match)])
|
||||||
|
riscv_hash[OP_HASH_IDX (op->match)] = op;
|
||||||
|
|
||||||
|
init = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Search the standard instructions first. */
|
||||||
|
op = riscv_hash[OP_HASH_IDX (word)];
|
||||||
|
i = 0;
|
||||||
|
do
|
||||||
|
{
|
||||||
|
/* The hash table entry might be NULL. */
|
||||||
|
if (op != NULL)
|
||||||
|
{
|
||||||
|
/* If XLEN is not known, get its value from the ELF class. */
|
||||||
|
if (info->mach == bfd_mach_riscv64)
|
||||||
|
xlen = 64;
|
||||||
|
else if (info->mach == bfd_mach_riscv32)
|
||||||
|
xlen = 32;
|
||||||
|
else if (info->section != NULL)
|
||||||
|
{
|
||||||
|
Elf_Internal_Ehdr *ehdr = elf_elfheader (info->section->owner);
|
||||||
|
xlen = ehdr->e_ident[EI_CLASS] == ELFCLASS64 ? 64 : 32;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (; op->name; op++)
|
||||||
|
{
|
||||||
|
/* Does the opcode match? */
|
||||||
|
if (! (op->match_func) (op, word, 0, NULL))
|
||||||
|
continue;
|
||||||
|
/* Is this a pseudo-instruction and may we print it as such? */
|
||||||
|
if (no_aliases && (op->pinfo & INSN_ALIAS))
|
||||||
|
continue;
|
||||||
|
/* Is this instruction restricted to a certain value of XLEN? */
|
||||||
|
if ((op->xlen_requirement != 0) && (op->xlen_requirement != xlen))
|
||||||
|
continue;
|
||||||
|
|
||||||
|
/* It's a match. */
|
||||||
|
return op;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
/* Keep searching extended opcode tables. */
|
||||||
|
op = riscv_extended_opcodes[i++];
|
||||||
|
}
|
||||||
|
while (op != NULL);
|
||||||
|
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
/* Print the RISC-V instruction at address MEMADDR in debugged memory,
|
/* Print the RISC-V instruction at address MEMADDR in debugged memory,
|
||||||
on using INFO. Returns length of the instruction, in bytes.
|
on using INFO. Returns length of the instruction, in bytes.
|
||||||
BIGENDIAN must be 1 if this is big-endian code, 0 if
|
BIGENDIAN must be 1 if this is big-endian code, 0 if
|
||||||
@@ -447,23 +674,9 @@ static int
|
|||||||
riscv_disassemble_insn (bfd_vma memaddr, insn_t word, disassemble_info *info)
|
riscv_disassemble_insn (bfd_vma memaddr, insn_t word, disassemble_info *info)
|
||||||
{
|
{
|
||||||
const struct riscv_opcode *op;
|
const struct riscv_opcode *op;
|
||||||
static bool init = 0;
|
|
||||||
static const struct riscv_opcode *riscv_hash[OP_MASK_OP + 1];
|
|
||||||
struct riscv_private_data *pd;
|
struct riscv_private_data *pd;
|
||||||
int insnlen;
|
int insnlen;
|
||||||
|
|
||||||
#define OP_HASH_IDX(i) ((i) & (riscv_insn_length (i) == 2 ? 0x3 : OP_MASK_OP))
|
|
||||||
|
|
||||||
/* Build a hash table to shorten the search time. */
|
|
||||||
if (! init)
|
|
||||||
{
|
|
||||||
for (op = riscv_opcodes; op->name; op++)
|
|
||||||
if (!riscv_hash[OP_HASH_IDX (op->match)])
|
|
||||||
riscv_hash[OP_HASH_IDX (op->match)] = op;
|
|
||||||
|
|
||||||
init = 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (info->private_data == NULL)
|
if (info->private_data == NULL)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
@@ -497,75 +710,48 @@ riscv_disassemble_insn (bfd_vma memaddr, insn_t word, disassemble_info *info)
|
|||||||
info->target = 0;
|
info->target = 0;
|
||||||
info->target2 = 0;
|
info->target2 = 0;
|
||||||
|
|
||||||
op = riscv_hash[OP_HASH_IDX (word)];
|
op = riscv_disassemble_opcode (word, info);
|
||||||
if (op != NULL)
|
if (op != NULL)
|
||||||
{
|
{
|
||||||
unsigned xlen = 0;
|
(*info->fprintf_func) (info->stream, "%s", op->name);
|
||||||
|
print_insn_args (op->args, word, memaddr, info);
|
||||||
|
|
||||||
/* If XLEN is not known, get its value from the ELF class. */
|
/* Try to disassemble multi-instruction addressing sequences. */
|
||||||
if (info->mach == bfd_mach_riscv64)
|
if (pd->print_addr != (bfd_vma)-1)
|
||||||
xlen = 64;
|
|
||||||
else if (info->mach == bfd_mach_riscv32)
|
|
||||||
xlen = 32;
|
|
||||||
else if (info->section != NULL)
|
|
||||||
{
|
{
|
||||||
Elf_Internal_Ehdr *ehdr = elf_elfheader (info->section->owner);
|
info->target = pd->print_addr;
|
||||||
xlen = ehdr->e_ident[EI_CLASS] == ELFCLASS64 ? 64 : 32;
|
(*info->fprintf_func) (info->stream, " # ");
|
||||||
|
(*info->print_address_func) (info->target, info);
|
||||||
|
pd->print_addr = -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
for (; op->name; op++)
|
/* Finish filling out insn_info fields. */
|
||||||
|
switch (op->pinfo & INSN_TYPE)
|
||||||
{
|
{
|
||||||
/* Does the opcode match? */
|
case INSN_BRANCH:
|
||||||
if (! (op->match_func) (op, word))
|
info->insn_type = dis_branch;
|
||||||
continue;
|
break;
|
||||||
/* Is this a pseudo-instruction and may we print it as such? */
|
case INSN_CONDBRANCH:
|
||||||
if (no_aliases && (op->pinfo & INSN_ALIAS))
|
info->insn_type = dis_condbranch;
|
||||||
continue;
|
break;
|
||||||
/* Is this instruction restricted to a certain value of XLEN? */
|
case INSN_JSR:
|
||||||
if ((op->xlen_requirement != 0) && (op->xlen_requirement != xlen))
|
info->insn_type = dis_jsr;
|
||||||
continue;
|
break;
|
||||||
|
case INSN_DREF:
|
||||||
/* It's a match. */
|
info->insn_type = dis_dref;
|
||||||
(*info->fprintf_func) (info->stream, "%s", op->name);
|
break;
|
||||||
print_insn_args (op->args, word, memaddr, info);
|
default:
|
||||||
|
break;
|
||||||
/* Try to disassemble multi-instruction addressing sequences. */
|
|
||||||
if (pd->print_addr != (bfd_vma)-1)
|
|
||||||
{
|
|
||||||
info->target = pd->print_addr;
|
|
||||||
(*info->fprintf_func) (info->stream, " # ");
|
|
||||||
(*info->print_address_func) (info->target, info);
|
|
||||||
pd->print_addr = -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Finish filling out insn_info fields. */
|
|
||||||
switch (op->pinfo & INSN_TYPE)
|
|
||||||
{
|
|
||||||
case INSN_BRANCH:
|
|
||||||
info->insn_type = dis_branch;
|
|
||||||
break;
|
|
||||||
case INSN_CONDBRANCH:
|
|
||||||
info->insn_type = dis_condbranch;
|
|
||||||
break;
|
|
||||||
case INSN_JSR:
|
|
||||||
info->insn_type = dis_jsr;
|
|
||||||
break;
|
|
||||||
case INSN_DREF:
|
|
||||||
info->insn_type = dis_dref;
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (op->pinfo & INSN_DATA_SIZE)
|
|
||||||
{
|
|
||||||
int size = ((op->pinfo & INSN_DATA_SIZE)
|
|
||||||
>> INSN_DATA_SIZE_SHIFT);
|
|
||||||
info->data_size = 1 << (size - 1);
|
|
||||||
}
|
|
||||||
|
|
||||||
return insnlen;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (op->pinfo & INSN_DATA_SIZE)
|
||||||
|
{
|
||||||
|
int size = ((op->pinfo & INSN_DATA_SIZE)
|
||||||
|
>> INSN_DATA_SIZE_SHIFT);
|
||||||
|
info->data_size = 1 << (size - 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
return insnlen;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* We did not find a match, so just print the instruction bits. */
|
/* We did not find a match, so just print the instruction bits. */
|
||||||
|
|||||||
1420
opcodes/riscv-opc.c
1420
opcodes/riscv-opc.c
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user