genmodes.c (emit_max_int): New function.

2013-03-28  Kenneth Zadeck <zadeck@naturalbridge.com>

   	* genmodes.c (emit_max_int): New function.
	(emit_insn_modes_h): Added call to emit_max_function.
	* doc/rtl.texi (MAX_BITSIZE_MODE_ANY_INT, MAX_BITSIZE_MODE_ANY_MODE): Added doc.	
	* machmode.def: Fixed comment.

From-SVN: r197200
This commit is contained in:
Kenneth Zadeck 2013-03-28 14:46:31 +00:00 committed by Kenneth Zadeck
parent b4c73eedf3
commit 8697be17fe
4 changed files with 57 additions and 3 deletions

View File

@ -1,6 +1,12 @@
2013-03-28 Kenneth Zadeck <zadeck@naturalbridge.com>
* combine.c (try_combine): Removed useless assert.
* genmodes.c (emit_max_int): New function.
(emit_insn_modes_h): Added call to emit_max_function.
* doc/rtl.texi (MAX_BITSIZE_MODE_ANY_INT, MAX_BITSIZE_MODE_ANY_MODE): Added doc.
* machmode.def: Fixed comment.
2013-03-28 Kenneth Zadeck <zadeck@naturalbridge.com>
* combine.c (try_combine): Removed useless assert.
* cselib.c (rtx_equal_for_cselib_1): Removed unnecessary parens.
2013-03-28 Marek Polacek <polacek@redhat.com>

View File

@ -1456,6 +1456,20 @@ Returns the number of units contained in a mode, i.e.,
Returns the narrowest mode in mode class @var{c}.
@end table
The following 4 variables are defined on every target. They can be
used to allocate buffers that are guaranteed to be large enough to
hold any value that can be represented on the target.
@table @code
@findex MAX_BITSIZE_MODE_ANY_INT
@item MAX_BITSIZE_MODE_ANY_INT
The maximum of MAX_BITSIZE_MODE_INT and MAX_BITSIZE_MODE_PARTIAL_INT.
@findex MAX_BITSIZE_MODE_ANY_MODE
@item MAX_BITSIZE_MODE_ANY_MODE
The bitsize of the largest mode on the target.
@end table
@findex byte_mode
@findex word_mode
The global variables @code{byte_mode} and @code{word_mode} contain modes

View File

@ -848,6 +848,36 @@ calc_wider_mode (void)
#define print_closer() puts ("};")
/* Compute the max bitsize of some of the classes of integers. It may
be that there are needs for the other integer classes, and this
code is easy to extend. */
static void
emit_max_int (void)
{
unsigned int max, mmax;
struct mode_data *i;
int j;
puts ("");
for (max = 1, i = modes[MODE_INT]; i; i = i->next)
if (max < i->bytesize)
max = i->bytesize;
mmax = max;
for (max = 1, i = modes[MODE_PARTIAL_INT]; i; i = i->next)
if (max < i->bytesize)
max = i->bytesize;
if (max > mmax)
mmax = max;
printf ("#define MAX_BITSIZE_MODE_ANY_INT %d*BITS_PER_UNIT\n", mmax);
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);
}
static void
emit_insn_modes_h (void)
{
@ -912,6 +942,7 @@ enum machine_mode\n{");
#endif
printf ("#define CONST_MODE_IBIT%s\n", adj_ibit ? "" : " const");
printf ("#define CONST_MODE_FBIT%s\n", adj_fbit ? "" : " const");
emit_max_int ();
puts ("\
\n\
#endif /* insn-modes.h */");

View File

@ -179,8 +179,11 @@ RANDOM_MODE (BLK);
FRACTIONAL_INT_MODE (BI, 1, 1);
/* Basic integer modes. We go up to TI in generic code (128 bits).
The name OI is reserved for a 256-bit type (needed by some back ends).
FIXME TI shouldn't be generically available either. */
TImode is needed here because the some front ends now genericly
support __int128. If the front ends decide to generically support
larger types, then corresponding modes must be added here. The
name OI is reserved for a 256-bit type (needed by some back ends).
*/
INT_MODE (QI, 1);
INT_MODE (HI, 2);
INT_MODE (SI, 4);