diff mbox series

Allow targets to pick a vector prefix other than "V"

Message ID 87mv3kwp9i.fsf@linaro.org
State New
Headers show
Series Allow targets to pick a vector prefix other than "V" | expand

Commit Message

Richard Sandiford Nov. 17, 2017, 9:48 p.m. UTC
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.

Tested on aarch64-linux-gnu (with and without SVE), x86_64-linux-gnu an
powerpc64le-linux-gnu.  I'll apply this under the gen* maintainership
when the SVE port itself has been approved.

Thanks,
Richard


2017-11-17  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.
diff mbox series

Patch

Index: gcc/machmode.def
===================================================================
--- gcc/machmode.def	2017-11-17 21:46:15.177979825 +0000
+++ gcc/machmode.def	2017-11-17 21:46:25.555622937 +0000
@@ -142,6 +142,10 @@  along with GCC; see the file COPYING3.
 	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
Index: gcc/genmodes.c
===================================================================
--- gcc/genmodes.c	2017-11-17 21:46:15.177050178 +0000
+++ gcc/genmodes.c	2017-11-17 21:46:25.554693290 +0000
@@ -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, u
       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);