Commit 8697be17 by Kenneth Zadeck Committed by Kenneth Zadeck

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
parent b4c73eed
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>
......
......@@ -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
......
......@@ -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 */");
......
......@@ -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);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment