Home | History | Annotate | Line # | Download | only in gcc
machmode.h revision 1.6
      1  1.1  mrg /* Machine mode definitions for GCC; included by rtl.h and tree.h.
      2  1.6  mrg    Copyright (C) 1991-2016 Free Software Foundation, Inc.
      3  1.1  mrg 
      4  1.1  mrg This file is part of GCC.
      5  1.1  mrg 
      6  1.1  mrg GCC is free software; you can redistribute it and/or modify it under
      7  1.1  mrg the terms of the GNU General Public License as published by the Free
      8  1.1  mrg Software Foundation; either version 3, or (at your option) any later
      9  1.1  mrg version.
     10  1.1  mrg 
     11  1.1  mrg GCC is distributed in the hope that it will be useful, but WITHOUT ANY
     12  1.1  mrg WARRANTY; without even the implied warranty of MERCHANTABILITY or
     13  1.1  mrg FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
     14  1.1  mrg for more details.
     15  1.1  mrg 
     16  1.1  mrg You should have received a copy of the GNU General Public License
     17  1.1  mrg along with GCC; see the file COPYING3.  If not see
     18  1.1  mrg <http://www.gnu.org/licenses/>.  */
     19  1.1  mrg 
     20  1.1  mrg #ifndef HAVE_MACHINE_MODES
     21  1.1  mrg #define HAVE_MACHINE_MODES
     22  1.1  mrg 
     23  1.1  mrg /* Make an enum class that gives all the machine modes.  */
     24  1.1  mrg #include "insn-modes.h"
     25  1.1  mrg 
     26  1.1  mrg /* Get the name of mode MODE as a string.  */
     27  1.1  mrg 
     28  1.1  mrg extern const char * const mode_name[NUM_MACHINE_MODES];
     29  1.1  mrg #define GET_MODE_NAME(MODE)  mode_name[MODE]
     30  1.1  mrg 
     31  1.1  mrg /* Mode classes.  */
     32  1.1  mrg 
     33  1.1  mrg #include "mode-classes.def"
     34  1.1  mrg #define DEF_MODE_CLASS(M) M
     35  1.1  mrg enum mode_class { MODE_CLASSES, MAX_MODE_CLASS };
     36  1.1  mrg #undef DEF_MODE_CLASS
     37  1.1  mrg #undef MODE_CLASSES
     38  1.1  mrg 
     39  1.1  mrg /* Get the general kind of object that mode MODE represents
     40  1.1  mrg    (integer, floating, complex, etc.)  */
     41  1.1  mrg 
     42  1.1  mrg extern const unsigned char mode_class[NUM_MACHINE_MODES];
     43  1.1  mrg #define GET_MODE_CLASS(MODE)  ((enum mode_class) mode_class[MODE])
     44  1.1  mrg 
     45  1.1  mrg /* Nonzero if MODE is an integral mode.  */
     46  1.1  mrg #define INTEGRAL_MODE_P(MODE)			\
     47  1.1  mrg   (GET_MODE_CLASS (MODE) == MODE_INT		\
     48  1.1  mrg    || GET_MODE_CLASS (MODE) == MODE_PARTIAL_INT \
     49  1.1  mrg    || GET_MODE_CLASS (MODE) == MODE_COMPLEX_INT \
     50  1.1  mrg    || GET_MODE_CLASS (MODE) == MODE_VECTOR_INT)
     51  1.1  mrg 
     52  1.1  mrg /* Nonzero if MODE is a floating-point mode.  */
     53  1.1  mrg #define FLOAT_MODE_P(MODE)		\
     54  1.1  mrg   (GET_MODE_CLASS (MODE) == MODE_FLOAT	\
     55  1.1  mrg    || GET_MODE_CLASS (MODE) == MODE_DECIMAL_FLOAT \
     56  1.1  mrg    || GET_MODE_CLASS (MODE) == MODE_COMPLEX_FLOAT \
     57  1.1  mrg    || GET_MODE_CLASS (MODE) == MODE_VECTOR_FLOAT)
     58  1.1  mrg 
     59  1.1  mrg /* Nonzero if MODE is a complex mode.  */
     60  1.1  mrg #define COMPLEX_MODE_P(MODE)			\
     61  1.1  mrg   (GET_MODE_CLASS (MODE) == MODE_COMPLEX_INT	\
     62  1.1  mrg    || GET_MODE_CLASS (MODE) == MODE_COMPLEX_FLOAT)
     63  1.1  mrg 
     64  1.1  mrg /* Nonzero if MODE is a vector mode.  */
     65  1.1  mrg #define VECTOR_MODE_P(MODE)			\
     66  1.1  mrg   (GET_MODE_CLASS (MODE) == MODE_VECTOR_INT	\
     67  1.1  mrg    || GET_MODE_CLASS (MODE) == MODE_VECTOR_FLOAT	\
     68  1.1  mrg    || GET_MODE_CLASS (MODE) == MODE_VECTOR_FRACT	\
     69  1.1  mrg    || GET_MODE_CLASS (MODE) == MODE_VECTOR_UFRACT	\
     70  1.1  mrg    || GET_MODE_CLASS (MODE) == MODE_VECTOR_ACCUM	\
     71  1.1  mrg    || GET_MODE_CLASS (MODE) == MODE_VECTOR_UACCUM)
     72  1.1  mrg 
     73  1.1  mrg /* Nonzero if MODE is a scalar integral mode.  */
     74  1.1  mrg #define SCALAR_INT_MODE_P(MODE)			\
     75  1.1  mrg   (GET_MODE_CLASS (MODE) == MODE_INT		\
     76  1.1  mrg    || GET_MODE_CLASS (MODE) == MODE_PARTIAL_INT)
     77  1.1  mrg 
     78  1.1  mrg /* Nonzero if MODE is a scalar floating point mode.  */
     79  1.1  mrg #define SCALAR_FLOAT_MODE_P(MODE)		\
     80  1.1  mrg   (GET_MODE_CLASS (MODE) == MODE_FLOAT		\
     81  1.1  mrg    || GET_MODE_CLASS (MODE) == MODE_DECIMAL_FLOAT)
     82  1.1  mrg 
     83  1.1  mrg /* Nonzero if MODE is a decimal floating point mode.  */
     84  1.1  mrg #define DECIMAL_FLOAT_MODE_P(MODE)		\
     85  1.1  mrg   (GET_MODE_CLASS (MODE) == MODE_DECIMAL_FLOAT)
     86  1.1  mrg 
     87  1.1  mrg /* Nonzero if MODE is a scalar fract mode.  */
     88  1.1  mrg #define SCALAR_FRACT_MODE_P(MODE)	\
     89  1.1  mrg   (GET_MODE_CLASS (MODE) == MODE_FRACT)
     90  1.1  mrg 
     91  1.1  mrg /* Nonzero if MODE is a scalar ufract mode.  */
     92  1.1  mrg #define SCALAR_UFRACT_MODE_P(MODE)	\
     93  1.1  mrg   (GET_MODE_CLASS (MODE) == MODE_UFRACT)
     94  1.1  mrg 
     95  1.1  mrg /* Nonzero if MODE is a scalar fract or ufract mode.  */
     96  1.1  mrg #define ALL_SCALAR_FRACT_MODE_P(MODE)	\
     97  1.1  mrg   (SCALAR_FRACT_MODE_P (MODE) || SCALAR_UFRACT_MODE_P (MODE))
     98  1.1  mrg 
     99  1.1  mrg /* Nonzero if MODE is a scalar accum mode.  */
    100  1.1  mrg #define SCALAR_ACCUM_MODE_P(MODE)	\
    101  1.1  mrg   (GET_MODE_CLASS (MODE) == MODE_ACCUM)
    102  1.1  mrg 
    103  1.1  mrg /* Nonzero if MODE is a scalar uaccum mode.  */
    104  1.1  mrg #define SCALAR_UACCUM_MODE_P(MODE)	\
    105  1.1  mrg   (GET_MODE_CLASS (MODE) == MODE_UACCUM)
    106  1.1  mrg 
    107  1.1  mrg /* Nonzero if MODE is a scalar accum or uaccum mode.  */
    108  1.1  mrg #define ALL_SCALAR_ACCUM_MODE_P(MODE)	\
    109  1.1  mrg   (SCALAR_ACCUM_MODE_P (MODE) || SCALAR_UACCUM_MODE_P (MODE))
    110  1.1  mrg 
    111  1.1  mrg /* Nonzero if MODE is a scalar fract or accum mode.  */
    112  1.1  mrg #define SIGNED_SCALAR_FIXED_POINT_MODE_P(MODE)	\
    113  1.1  mrg   (SCALAR_FRACT_MODE_P (MODE) || SCALAR_ACCUM_MODE_P (MODE))
    114  1.1  mrg 
    115  1.1  mrg /* Nonzero if MODE is a scalar ufract or uaccum mode.  */
    116  1.1  mrg #define UNSIGNED_SCALAR_FIXED_POINT_MODE_P(MODE)	\
    117  1.1  mrg   (SCALAR_UFRACT_MODE_P (MODE) || SCALAR_UACCUM_MODE_P (MODE))
    118  1.1  mrg 
    119  1.1  mrg /* Nonzero if MODE is a scalar fract, ufract, accum or uaccum mode.  */
    120  1.1  mrg #define ALL_SCALAR_FIXED_POINT_MODE_P(MODE)	\
    121  1.1  mrg   (SIGNED_SCALAR_FIXED_POINT_MODE_P (MODE)	\
    122  1.1  mrg    || UNSIGNED_SCALAR_FIXED_POINT_MODE_P (MODE))
    123  1.1  mrg 
    124  1.1  mrg /* Nonzero if MODE is a scalar/vector fract mode.  */
    125  1.1  mrg #define FRACT_MODE_P(MODE)		\
    126  1.1  mrg   (GET_MODE_CLASS (MODE) == MODE_FRACT	\
    127  1.1  mrg    || GET_MODE_CLASS (MODE) == MODE_VECTOR_FRACT)
    128  1.1  mrg 
    129  1.1  mrg /* Nonzero if MODE is a scalar/vector ufract mode.  */
    130  1.1  mrg #define UFRACT_MODE_P(MODE)		\
    131  1.1  mrg   (GET_MODE_CLASS (MODE) == MODE_UFRACT	\
    132  1.1  mrg    || GET_MODE_CLASS (MODE) == MODE_VECTOR_UFRACT)
    133  1.1  mrg 
    134  1.1  mrg /* Nonzero if MODE is a scalar/vector fract or ufract mode.  */
    135  1.1  mrg #define ALL_FRACT_MODE_P(MODE)		\
    136  1.1  mrg   (FRACT_MODE_P (MODE) || UFRACT_MODE_P (MODE))
    137  1.1  mrg 
    138  1.1  mrg /* Nonzero if MODE is a scalar/vector accum mode.  */
    139  1.1  mrg #define ACCUM_MODE_P(MODE)		\
    140  1.1  mrg   (GET_MODE_CLASS (MODE) == MODE_ACCUM	\
    141  1.1  mrg    || GET_MODE_CLASS (MODE) == MODE_VECTOR_ACCUM)
    142  1.1  mrg 
    143  1.1  mrg /* Nonzero if MODE is a scalar/vector uaccum mode.  */
    144  1.1  mrg #define UACCUM_MODE_P(MODE)		\
    145  1.1  mrg   (GET_MODE_CLASS (MODE) == MODE_UACCUM	\
    146  1.1  mrg    || GET_MODE_CLASS (MODE) == MODE_VECTOR_UACCUM)
    147  1.1  mrg 
    148  1.1  mrg /* Nonzero if MODE is a scalar/vector accum or uaccum mode.  */
    149  1.1  mrg #define ALL_ACCUM_MODE_P(MODE)		\
    150  1.1  mrg   (ACCUM_MODE_P (MODE) || UACCUM_MODE_P (MODE))
    151  1.1  mrg 
    152  1.1  mrg /* Nonzero if MODE is a scalar/vector fract or accum mode.  */
    153  1.1  mrg #define SIGNED_FIXED_POINT_MODE_P(MODE)		\
    154  1.1  mrg   (FRACT_MODE_P (MODE) || ACCUM_MODE_P (MODE))
    155  1.1  mrg 
    156  1.1  mrg /* Nonzero if MODE is a scalar/vector ufract or uaccum mode.  */
    157  1.1  mrg #define UNSIGNED_FIXED_POINT_MODE_P(MODE)	\
    158  1.1  mrg   (UFRACT_MODE_P (MODE) || UACCUM_MODE_P (MODE))
    159  1.1  mrg 
    160  1.1  mrg /* Nonzero if MODE is a scalar/vector fract, ufract, accum or uaccum mode.  */
    161  1.1  mrg #define ALL_FIXED_POINT_MODE_P(MODE)		\
    162  1.1  mrg   (SIGNED_FIXED_POINT_MODE_P (MODE)		\
    163  1.1  mrg    || UNSIGNED_FIXED_POINT_MODE_P (MODE))
    164  1.1  mrg 
    165  1.1  mrg /* Nonzero if CLASS modes can be widened.  */
    166  1.1  mrg #define CLASS_HAS_WIDER_MODES_P(CLASS)         \
    167  1.1  mrg   (CLASS == MODE_INT                           \
    168  1.3  mrg    || CLASS == MODE_PARTIAL_INT                \
    169  1.1  mrg    || CLASS == MODE_FLOAT                      \
    170  1.1  mrg    || CLASS == MODE_DECIMAL_FLOAT              \
    171  1.1  mrg    || CLASS == MODE_COMPLEX_FLOAT              \
    172  1.1  mrg    || CLASS == MODE_FRACT                      \
    173  1.1  mrg    || CLASS == MODE_UFRACT                     \
    174  1.1  mrg    || CLASS == MODE_ACCUM                      \
    175  1.1  mrg    || CLASS == MODE_UACCUM)
    176  1.1  mrg 
    177  1.5  mrg #define POINTER_BOUNDS_MODE_P(MODE)      \
    178  1.5  mrg   (GET_MODE_CLASS (MODE) == MODE_POINTER_BOUNDS)
    179  1.5  mrg 
    180  1.1  mrg /* Get the size in bytes and bits of an object of mode MODE.  */
    181  1.1  mrg 
    182  1.1  mrg extern CONST_MODE_SIZE unsigned char mode_size[NUM_MACHINE_MODES];
    183  1.5  mrg #if GCC_VERSION >= 4001
    184  1.5  mrg #define GET_MODE_SIZE(MODE) \
    185  1.5  mrg   ((unsigned short) (__builtin_constant_p (MODE) \
    186  1.5  mrg 		     ? mode_size_inline (MODE) : mode_size[MODE]))
    187  1.5  mrg #else
    188  1.1  mrg #define GET_MODE_SIZE(MODE)    ((unsigned short) mode_size[MODE])
    189  1.5  mrg #endif
    190  1.3  mrg #define GET_MODE_BITSIZE(MODE) \
    191  1.3  mrg   ((unsigned short) (GET_MODE_SIZE (MODE) * BITS_PER_UNIT))
    192  1.1  mrg 
    193  1.1  mrg /* Get the number of value bits of an object of mode MODE.  */
    194  1.1  mrg extern const unsigned short mode_precision[NUM_MACHINE_MODES];
    195  1.1  mrg #define GET_MODE_PRECISION(MODE)  mode_precision[MODE]
    196  1.1  mrg 
    197  1.1  mrg /* Get the number of integral bits of an object of mode MODE.  */
    198  1.1  mrg extern CONST_MODE_IBIT unsigned char mode_ibit[NUM_MACHINE_MODES];
    199  1.1  mrg #define GET_MODE_IBIT(MODE) mode_ibit[MODE]
    200  1.1  mrg 
    201  1.1  mrg /* Get the number of fractional bits of an object of mode MODE.  */
    202  1.1  mrg extern CONST_MODE_FBIT unsigned char mode_fbit[NUM_MACHINE_MODES];
    203  1.1  mrg #define GET_MODE_FBIT(MODE) mode_fbit[MODE]
    204  1.1  mrg 
    205  1.1  mrg /* Get a bitmask containing 1 for all bits in a word
    206  1.1  mrg    that fit within mode MODE.  */
    207  1.1  mrg 
    208  1.1  mrg extern const unsigned HOST_WIDE_INT mode_mask_array[NUM_MACHINE_MODES];
    209  1.1  mrg 
    210  1.1  mrg #define GET_MODE_MASK(MODE) mode_mask_array[MODE]
    211  1.1  mrg 
    212  1.6  mrg /* Return the mode of the basic parts of MODE.  For vector modes this is the
    213  1.6  mrg    mode of the vector elements.  For complex modes it is the mode of the real
    214  1.6  mrg    and imaginary parts.  For other modes it is MODE itself.  */
    215  1.1  mrg 
    216  1.1  mrg extern const unsigned char mode_inner[NUM_MACHINE_MODES];
    217  1.5  mrg #if GCC_VERSION >= 4001
    218  1.5  mrg #define GET_MODE_INNER(MODE) \
    219  1.5  mrg   ((machine_mode) (__builtin_constant_p (MODE) \
    220  1.5  mrg 			? mode_inner_inline (MODE) : mode_inner[MODE]))
    221  1.5  mrg #else
    222  1.5  mrg #define GET_MODE_INNER(MODE) ((machine_mode) mode_inner[MODE])
    223  1.5  mrg #endif
    224  1.1  mrg 
    225  1.6  mrg /* Get the size in bytes or bits of the basic parts of an
    226  1.3  mrg    object of mode MODE.  */
    227  1.1  mrg 
    228  1.6  mrg extern CONST_MODE_UNIT_SIZE unsigned char mode_unit_size[NUM_MACHINE_MODES];
    229  1.6  mrg #if GCC_VERSION >= 4001
    230  1.6  mrg #define GET_MODE_UNIT_SIZE(MODE) \
    231  1.6  mrg   ((unsigned char) (__builtin_constant_p (MODE) \
    232  1.6  mrg 		   ? mode_unit_size_inline (MODE) : mode_unit_size[MODE]))
    233  1.6  mrg #else
    234  1.6  mrg #define GET_MODE_UNIT_SIZE(MODE) mode_unit_size[MODE]
    235  1.6  mrg #endif
    236  1.1  mrg 
    237  1.3  mrg #define GET_MODE_UNIT_BITSIZE(MODE) \
    238  1.3  mrg   ((unsigned short) (GET_MODE_UNIT_SIZE (MODE) * BITS_PER_UNIT))
    239  1.3  mrg 
    240  1.6  mrg extern const unsigned short mode_unit_precision[NUM_MACHINE_MODES];
    241  1.6  mrg #if GCC_VERSION >= 4001
    242  1.6  mrg #define GET_MODE_UNIT_PRECISION(MODE) \
    243  1.6  mrg   ((unsigned short) (__builtin_constant_p (MODE) \
    244  1.6  mrg 		    ? mode_unit_precision_inline (MODE)\
    245  1.6  mrg 		    : mode_unit_precision[MODE]))
    246  1.6  mrg #else
    247  1.6  mrg #define GET_MODE_UNIT_PRECISION(MODE) mode_unit_precision[MODE]
    248  1.6  mrg #endif
    249  1.6  mrg 
    250  1.3  mrg 
    251  1.1  mrg /* Get the number of units in the object.  */
    252  1.1  mrg 
    253  1.1  mrg extern const unsigned char mode_nunits[NUM_MACHINE_MODES];
    254  1.5  mrg #if GCC_VERSION >= 4001
    255  1.5  mrg #define GET_MODE_NUNITS(MODE) \
    256  1.5  mrg   ((unsigned char) (__builtin_constant_p (MODE) \
    257  1.5  mrg 		    ? mode_nunits_inline (MODE) : mode_nunits[MODE]))
    258  1.5  mrg #else
    259  1.1  mrg #define GET_MODE_NUNITS(MODE)  mode_nunits[MODE]
    260  1.5  mrg #endif
    261  1.1  mrg 
    262  1.1  mrg /* Get the next wider natural mode (eg, QI -> HI -> SI -> DI -> TI).  */
    263  1.1  mrg 
    264  1.1  mrg extern const unsigned char mode_wider[NUM_MACHINE_MODES];
    265  1.5  mrg #define GET_MODE_WIDER_MODE(MODE) ((machine_mode) mode_wider[MODE])
    266  1.1  mrg 
    267  1.3  mrg /* For scalars, this is a mode with twice the precision.  For vectors,
    268  1.3  mrg    this is a mode with the same inner mode but with twice the elements.  */
    269  1.1  mrg extern const unsigned char mode_2xwider[NUM_MACHINE_MODES];
    270  1.5  mrg #define GET_MODE_2XWIDER_MODE(MODE) ((machine_mode) mode_2xwider[MODE])
    271  1.1  mrg 
    272  1.6  mrg /* Get the complex mode from the component mode.  */
    273  1.6  mrg extern const unsigned char mode_complex[NUM_MACHINE_MODES];
    274  1.6  mrg #define GET_MODE_COMPLEX_MODE(MODE) ((machine_mode) mode_complex[MODE])
    275  1.6  mrg 
    276  1.1  mrg /* Return the mode for data of a given size SIZE and mode class CLASS.
    277  1.1  mrg    If LIMIT is nonzero, then don't use modes bigger than MAX_FIXED_MODE_SIZE.
    278  1.1  mrg    The value is BLKmode if no other mode is found.  */
    279  1.1  mrg 
    280  1.5  mrg extern machine_mode mode_for_size (unsigned int, enum mode_class, int);
    281  1.1  mrg 
    282  1.1  mrg /* Similar, but find the smallest mode for a given width.  */
    283  1.1  mrg 
    284  1.5  mrg extern machine_mode smallest_mode_for_size (unsigned int,
    285  1.1  mrg 						 enum mode_class);
    286  1.1  mrg 
    287  1.1  mrg 
    288  1.1  mrg /* Return an integer mode of the exact same size as the input mode,
    289  1.1  mrg    or BLKmode on failure.  */
    290  1.1  mrg 
    291  1.5  mrg extern machine_mode int_mode_for_mode (machine_mode);
    292  1.5  mrg 
    293  1.5  mrg extern machine_mode bitwise_mode_for_mode (machine_mode);
    294  1.1  mrg 
    295  1.3  mrg /* Return a mode that is suitable for representing a vector,
    296  1.3  mrg    or BLKmode on failure.  */
    297  1.3  mrg 
    298  1.5  mrg extern machine_mode mode_for_vector (machine_mode, unsigned);
    299  1.3  mrg 
    300  1.3  mrg /* A class for iterating through possible bitfield modes.  */
    301  1.3  mrg class bit_field_mode_iterator
    302  1.3  mrg {
    303  1.3  mrg public:
    304  1.3  mrg   bit_field_mode_iterator (HOST_WIDE_INT, HOST_WIDE_INT,
    305  1.3  mrg 			   HOST_WIDE_INT, HOST_WIDE_INT,
    306  1.3  mrg 			   unsigned int, bool);
    307  1.5  mrg   bool next_mode (machine_mode *);
    308  1.3  mrg   bool prefer_smaller_modes ();
    309  1.3  mrg 
    310  1.3  mrg private:
    311  1.5  mrg   machine_mode m_mode;
    312  1.3  mrg   /* We use signed values here because the bit position can be negative
    313  1.3  mrg      for invalid input such as gcc.dg/pr48335-8.c.  */
    314  1.5  mrg   HOST_WIDE_INT m_bitsize;
    315  1.5  mrg   HOST_WIDE_INT m_bitpos;
    316  1.5  mrg   HOST_WIDE_INT m_bitregion_start;
    317  1.5  mrg   HOST_WIDE_INT m_bitregion_end;
    318  1.5  mrg   unsigned int m_align;
    319  1.5  mrg   bool m_volatilep;
    320  1.5  mrg   int m_count;
    321  1.3  mrg };
    322  1.3  mrg 
    323  1.1  mrg /* Find the best mode to use to access a bit field.  */
    324  1.1  mrg 
    325  1.5  mrg extern machine_mode get_best_mode (int, int,
    326  1.3  mrg 					unsigned HOST_WIDE_INT,
    327  1.3  mrg 					unsigned HOST_WIDE_INT,
    328  1.3  mrg 					unsigned int,
    329  1.5  mrg 					machine_mode, bool);
    330  1.1  mrg 
    331  1.1  mrg /* Determine alignment, 1<=result<=BIGGEST_ALIGNMENT.  */
    332  1.1  mrg 
    333  1.1  mrg extern CONST_MODE_BASE_ALIGN unsigned char mode_base_align[NUM_MACHINE_MODES];
    334  1.1  mrg 
    335  1.5  mrg extern unsigned get_mode_alignment (machine_mode);
    336  1.1  mrg 
    337  1.1  mrg #define GET_MODE_ALIGNMENT(MODE) get_mode_alignment (MODE)
    338  1.1  mrg 
    339  1.1  mrg /* For each class, get the narrowest mode in that class.  */
    340  1.1  mrg 
    341  1.1  mrg extern const unsigned char class_narrowest_mode[MAX_MODE_CLASS];
    342  1.1  mrg #define GET_CLASS_NARROWEST_MODE(CLASS) \
    343  1.5  mrg   ((machine_mode) class_narrowest_mode[CLASS])
    344  1.1  mrg 
    345  1.1  mrg /* Define the integer modes whose sizes are BITS_PER_UNIT and BITS_PER_WORD
    346  1.1  mrg    and the mode whose class is Pmode and whose size is POINTER_SIZE.  */
    347  1.1  mrg 
    348  1.5  mrg extern machine_mode byte_mode;
    349  1.5  mrg extern machine_mode word_mode;
    350  1.5  mrg extern machine_mode ptr_mode;
    351  1.1  mrg 
    352  1.1  mrg /* Target-dependent machine mode initialization - in insn-modes.c.  */
    353  1.1  mrg extern void init_adjust_machine_modes (void);
    354  1.1  mrg 
    355  1.3  mrg #define TRULY_NOOP_TRUNCATION_MODES_P(MODE1, MODE2) \
    356  1.3  mrg   TRULY_NOOP_TRUNCATION (GET_MODE_PRECISION (MODE1), \
    357  1.3  mrg 			 GET_MODE_PRECISION (MODE2))
    358  1.3  mrg 
    359  1.3  mrg #define HWI_COMPUTABLE_MODE_P(MODE) \
    360  1.3  mrg   (SCALAR_INT_MODE_P (MODE) \
    361  1.3  mrg    && GET_MODE_PRECISION (MODE) <= HOST_BITS_PER_WIDE_INT)
    362  1.3  mrg 
    363  1.6  mrg struct int_n_data_t {
    364  1.5  mrg   /* These parts are initailized by genmodes output */
    365  1.5  mrg   unsigned int bitsize;
    366  1.5  mrg   machine_mode m;
    367  1.5  mrg   /* RID_* is RID_INTN_BASE + index into this array */
    368  1.6  mrg };
    369  1.5  mrg 
    370  1.5  mrg /* This is also in tree.h.  genmodes.c guarantees the're sorted from
    371  1.5  mrg    smallest bitsize to largest bitsize. */
    372  1.5  mrg extern bool int_n_enabled_p[NUM_INT_N_ENTS];
    373  1.5  mrg extern const int_n_data_t int_n_data[NUM_INT_N_ENTS];
    374  1.5  mrg 
    375  1.1  mrg #endif /* not HAVE_MACHINE_MODES */
    376