Commit 4a39a918 by Richard Kenner

*** empty log message ***

From-SVN: r163
parent 6434da25
......@@ -59,7 +59,7 @@ extern char *mode_name[];
#define GET_MODE_NAME(MODE) (mode_name[(int)(MODE)])
enum mode_class { MODE_RANDOM, MODE_INT, MODE_FLOAT, MODE_PARTIAL_INT, MODE_CC,
MODE_COMPLEX_INT, MODE_COMPLEX_FLOAT };
MODE_COMPLEX_INT, MODE_COMPLEX_FLOAT, MAX_MODE_CLASS};
/* Get the general kind of object that mode MODE represents
(integer, floating, complex, etc.) */
......@@ -108,4 +108,15 @@ extern enum machine_mode get_best_mode ();
MIN (BIGGEST_ALIGNMENT, \
MAX (1, (GET_MODE_UNIT_SIZE (MODE) * BITS_PER_UNIT)))
/* For each class, get the narrowest mode in that class. */
extern enum machine_mode class_narrowest_mode[];
#define GET_CLASS_NARROWEST_MODE(CLASS) class_narrowest_mode[(int)(CLASS)]
/* Define the integer modes whose sizes are BITS_PER_UNIT
and BITS_PER_WORD. */
extern enum machine_mode byte_mode;
extern enum machine_mode word_mode;
#endif /* not HAVE_MACHINE_MODES */
......@@ -117,6 +117,15 @@ enum machine_mode mode_wider_mode[(int) MAX_MACHINE_MODE] = {
#undef DEF_MACHMODE
/* Indexed by mode class, gives the narrowest mode for each class. */
enum machine_mode class_narrowest_mode[(int) MAX_MODE_CLASS];
/* Commonly used modes. */
enum machine_mode byte_mode; /* Mode whose width is BITS_PER_UNIT */
enum machine_mode word_mode; /* Mode whose width is BITS_PER_WORD */
/* Indexed by rtx code, gives a sequence of operand-types for
rtx's of that code. The sequence is a C string in which
each charcter describes one operand. */
......@@ -774,11 +783,14 @@ read_rtx (infile)
}
/* This is called once per compilation, before any rtx's are constructed.
It initializes the vector `rtx_length' and the extra CC modes, if any. */
It initializes the vector `rtx_length', the extra CC modes, if any,
and computes certain commonly-used modes. */
void
init_rtl ()
{
int min_class_size[(int) MAX_MODE_CLASS];
enum machine_mode mode;
int i;
for (i = 0; i < NUM_RTX_CODE; i++)
......@@ -816,4 +828,27 @@ init_rtl ()
mode_wider_mode[i] = VOIDmode;
}
#endif
/* Find the narrowest mode for each class and compute the word and byte
modes. */
for (i = 0; i < (int) MAX_MODE_CLASS; i++)
min_class_size[i] = 1000;
for (mode = VOIDmode; (int) mode < (int) MAX_MACHINE_MODE;
mode = (enum machine_mode) ((int) mode + 1))
{
if (GET_MODE_SIZE (mode) < min_class_size[(int) GET_MODE_CLASS (mode)])
{
class_narrowest_mode[(int) GET_MODE_CLASS (mode)] = mode;
min_class_size[(int) GET_MODE_CLASS (mode)] = GET_MODE_SIZE (mode);
}
if (GET_MODE_CLASS (mode) == MODE_INT
&& GET_MODE_BITSIZE (mode) == BITS_PER_UNIT)
byte_mode = mode;
if (GET_MODE_CLASS (mode) == MODE_INT
&& GET_MODE_BITSIZE (mode) == BITS_PER_WORD)
word_mode = mode;
}
}
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