diff options
author | Richard Sandiford <richard.sandiford@linaro.org> | 2018-01-03 21:44:14 +0000 |
---|---|---|
committer | Richard Sandiford <rsandifo@gcc.gnu.org> | 2018-01-03 21:44:14 +0000 |
commit | 98ac791361227ed388237207baf629981cef03f7 (patch) | |
tree | 521bcd60f3e27acee052bf20b4b04fd68e39abf2 /gcc/genmodes.c | |
parent | b187677b4f275f33f181b9ca188bf0b009981cb1 (diff) | |
download | gcc-98ac791361227ed388237207baf629981cef03f7.zip gcc-98ac791361227ed388237207baf629981cef03f7.tar.gz gcc-98ac791361227ed388237207baf629981cef03f7.tar.bz2 |
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.c | 25 |
1 files changed, 19 insertions, 6 deletions
diff --git a/gcc/genmodes.c b/gcc/genmodes.c index c096434..a70f096 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. */ |