diff options
author | Richard Sandiford <richard.sandiford@linaro.org> | 2018-01-03 21:43:17 +0000 |
---|---|---|
committer | Richard Sandiford <rsandifo@gcc.gnu.org> | 2018-01-03 21:43:17 +0000 |
commit | 6ce12f6a1647ec2831f3c5908ecf9c23ae191d02 (patch) | |
tree | 8c22889b700a21e7d4fe8da29c0d38b16c371d2c /gcc | |
parent | 5c0caeb37ff72cfd9153e164e9fd9eec7d56e969 (diff) | |
download | gcc-6ce12f6a1647ec2831f3c5908ecf9c23ae191d02.zip gcc-6ce12f6a1647ec2831f3c5908ecf9c23ae191d02.tar.gz gcc-6ce12f6a1647ec2831f3c5908ecf9c23ae191d02.tar.bz2 |
Allow targets to pick a vector prefix other than "V"
Originally the SVE port used the names for 256-bit vectors, as the
next available increment after Advanced SIMD. However, that was
always a bit of a hack and is bound to confuse people new to the code.
Nothing actually requires vector modes to have names of the form
V<nunits><mode>, and after talking it over with the AArch64 maintainers,
we agreed to switch to things like:
VNx16QI
instead. This patch lets targets pick this kind of prefix.
2018-01-03 Richard Sandiford <richard.sandiford@linaro.org>
gcc/
* machmode.def (VECTOR_MODES_WITH_PREFIX): Document.
* genmodes.c (VECTOR_MODES_WITH_PREFIX): New macro.
(VECTOR_MODES): Use it.
(make_vector_modes): Take the prefix as an argument.
From-SVN: r256203
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 7 | ||||
-rw-r--r-- | gcc/genmodes.c | 10 | ||||
-rw-r--r-- | gcc/machmode.def | 4 |
3 files changed, 17 insertions, 4 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 28b1d4e..29154cc 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,4 +1,11 @@ 2018-01-03 Richard Sandiford <richard.sandiford@linaro.org> + + * machmode.def (VECTOR_MODES_WITH_PREFIX): Document. + * genmodes.c (VECTOR_MODES_WITH_PREFIX): New macro. + (VECTOR_MODES): Use it. + (make_vector_modes): Take the prefix as an argument. + +2018-01-03 Richard Sandiford <richard.sandiford@linaro.org> Alan Hayward <alan.hayward@arm.com> David Sherwood <david.sherwood@arm.com> diff --git a/gcc/genmodes.c b/gcc/genmodes.c index 9e37d65..7d58865 100644 --- a/gcc/genmodes.c +++ b/gcc/genmodes.c @@ -483,9 +483,11 @@ make_complex_modes (enum mode_class cl, /* For all modes in class CL, construct vector modes of width WIDTH, having as many components as necessary. */ -#define VECTOR_MODES(C, W) make_vector_modes (MODE_##C, W, __FILE__, __LINE__) +#define VECTOR_MODES_WITH_PREFIX(PREFIX, C, W) \ + make_vector_modes (MODE_##C, #PREFIX, W, __FILE__, __LINE__) +#define VECTOR_MODES(C, W) VECTOR_MODES_WITH_PREFIX (V, C, W) static void ATTRIBUTE_UNUSED -make_vector_modes (enum mode_class cl, unsigned int width, +make_vector_modes (enum mode_class cl, const char *prefix, unsigned int width, const char *file, unsigned int line) { struct mode_data *m; @@ -516,8 +518,8 @@ make_vector_modes (enum mode_class cl, unsigned int width, if (cl == MODE_INT && m->precision == 1) continue; - if ((size_t)snprintf (buf, sizeof buf, "V%u%s", ncomponents, m->name) - >= sizeof buf) + if ((size_t) snprintf (buf, sizeof buf, "%s%u%s", prefix, + ncomponents, m->name) >= sizeof buf) { error ("%s:%d: mode name \"%s\" is too long", m->file, m->line, m->name); diff --git a/gcc/machmode.def b/gcc/machmode.def index 9a92b58..c9d17f1 100644 --- a/gcc/machmode.def +++ b/gcc/machmode.def @@ -142,6 +142,10 @@ along with GCC; see the file COPYING3. If not see than two bytes (if CLASS is FLOAT). CLASS must be INT or FLOAT. The names follow the same rule as VECTOR_MODE uses. + VECTOR_MODES_WITH_PREFIX (PREFIX, CLASS, WIDTH); + Like VECTOR_MODES, but start the mode names with PREFIX instead + of the usual "V". + VECTOR_BOOL_MODE (NAME, COUNT, BYTESIZE) Create a vector mode called NAME that contains COUNT boolean elements and occupies BYTESIZE bytes in total. Each boolean |