summaryrefslogtreecommitdiff
path: root/gcc/genmodes.c
diff options
context:
space:
mode:
authorRichard Sandiford <richard.sandiford@linaro.org>2018-01-03 21:44:14 +0000
committerRichard Sandiford <rsandifo@gcc.gnu.org>2018-01-03 21:44:14 +0000
commit98ac791361227ed388237207baf629981cef03f7 (patch)
tree521bcd60f3e27acee052bf20b4b04fd68e39abf2 /gcc/genmodes.c
parentb187677b4f275f33f181b9ca188bf0b009981cb1 (diff)
Allow the target to set MAX_BITSIZE_MODE_ANY_MODE
The default value of MAX_BITSIZE_MODE_ANY_MODE is calculated from the initial mode sizes specified in the modes.def file. The target needs to be able to override it if ADJUST_BYTESIZE & co. can choose a bigger size. 2018-01-03 Richard Sandiford <richard.sandiford@linaro.org> gcc/ * doc/rtl.texi (MAX_BITSIZE_MODE_ANY_MODE): Describe how the default is calculated and how it can be overridden. * genmodes.c (max_bitsize_mode_any_mode): New variable. (create_modes): Initialize it from MAX_BITSIZE_MODE_ANY_MODE, if defined. (emit_max_int): Use it to set the output MAX_BITSIZE_MODE_ANY_MODE, if nonzero. From-SVN: r256206
Diffstat (limited to 'gcc/genmodes.c')
-rw-r--r--gcc/genmodes.c25
1 files changed, 19 insertions, 6 deletions
diff --git a/gcc/genmodes.c b/gcc/genmodes.c
index c0964345a93..a70f0967859 100644
--- a/gcc/genmodes.c
+++ b/gcc/genmodes.c
@@ -792,6 +792,7 @@ make_vector_mode (enum mode_class bclass,
static int bits_per_unit;
static int max_bitsize_mode_any_int;
+static int max_bitsize_mode_any_mode;
static void
create_modes (void)
@@ -811,6 +812,12 @@ create_modes (void)
#else
max_bitsize_mode_any_int = 0;
#endif
+
+#ifdef MAX_BITSIZE_MODE_ANY_MODE
+ max_bitsize_mode_any_mode = MAX_BITSIZE_MODE_ANY_MODE;
+#else
+ max_bitsize_mode_any_mode = 0;
+#endif
}
#ifndef NUM_POLY_INT_COEFFS
@@ -989,12 +996,18 @@ emit_max_int (void)
else
printf ("#define MAX_BITSIZE_MODE_ANY_INT %d\n", max_bitsize_mode_any_int);
- mmax = 0;
- for (j = 0; j < MAX_MODE_CLASS; j++)
- for (i = modes[j]; i; i = i->next)
- if (mmax < i->bytesize)
- mmax = i->bytesize;
- printf ("#define MAX_BITSIZE_MODE_ANY_MODE (%d*BITS_PER_UNIT)\n", mmax);
+ if (max_bitsize_mode_any_mode == 0)
+ {
+ mmax = 0;
+ for (j = 0; j < MAX_MODE_CLASS; j++)
+ for (i = modes[j]; i; i = i->next)
+ if (mmax < i->bytesize)
+ mmax = i->bytesize;
+ printf ("#define MAX_BITSIZE_MODE_ANY_MODE (%d*BITS_PER_UNIT)\n", mmax);
+ }
+ else
+ printf ("#define MAX_BITSIZE_MODE_ANY_MODE %d\n",
+ max_bitsize_mode_any_mode);
}
/* Emit mode_size_inline routine into insn-modes.h header. */