From: Richard Sandiford Date: Wed, 3 Jan 2018 21:43:17 +0000 (+0000) Subject: Allow targets to pick a vector prefix other than "V" X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=6ce12f6a1647ec2831f3c5908ecf9c23ae191d02;p=gcc.git 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, 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 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 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 28b1d4ef280..29154ccb5ff 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,10 @@ +2018-01-03 Richard Sandiford + + * 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 Alan Hayward David Sherwood diff --git a/gcc/genmodes.c b/gcc/genmodes.c index 9e37d65997e..7d58865ca96 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 9a92b580b2f..c9d17f1300e 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