Home | History | Annotate | Line # | Download | only in gcc
machmode.h revision 1.5
      1  1.1  mrg /* Machine mode definitions for GCC; included by rtl.h and tree.h.
      2  1.5  mrg    Copyright (C) 1991-2015 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.1  mrg /* Return the mode of the inner elements in a vector.  */
    213  1.1  mrg 
    214  1.1  mrg extern const unsigned char mode_inner[NUM_MACHINE_MODES];
    215  1.5  mrg #if GCC_VERSION >= 4001
    216  1.5  mrg #define GET_MODE_INNER(MODE) \
    217  1.5  mrg   ((machine_mode) (__builtin_constant_p (MODE) \
    218  1.5  mrg 			? mode_inner_inline (MODE) : mode_inner[MODE]))
    219  1.5  mrg #else
    220  1.5  mrg #define GET_MODE_INNER(MODE) ((machine_mode) mode_inner[MODE])
    221  1.5  mrg #endif
    222  1.1  mrg 
    223  1.3  mrg /* Get the size in bytes or bites of the basic parts of an
    224  1.3  mrg    object of mode MODE.  */
    225  1.1  mrg 
    226  1.1  mrg #define GET_MODE_UNIT_SIZE(MODE)		\
    227  1.1  mrg   (GET_MODE_INNER (MODE) == VOIDmode		\
    228  1.1  mrg    ? GET_MODE_SIZE (MODE)			\
    229  1.1  mrg    : GET_MODE_SIZE (GET_MODE_INNER (MODE)))
    230  1.1  mrg 
    231  1.3  mrg #define GET_MODE_UNIT_BITSIZE(MODE) \
    232  1.3  mrg   ((unsigned short) (GET_MODE_UNIT_SIZE (MODE) * BITS_PER_UNIT))
    233  1.3  mrg 
    234  1.3  mrg #define GET_MODE_UNIT_PRECISION(MODE)		\
    235  1.3  mrg   (GET_MODE_INNER (MODE) == VOIDmode		\
    236  1.3  mrg    ? GET_MODE_PRECISION (MODE)			\
    237  1.3  mrg    : GET_MODE_PRECISION (GET_MODE_INNER (MODE)))
    238  1.3  mrg 
    239  1.1  mrg /* Get the number of units in the object.  */
    240  1.1  mrg 
    241  1.1  mrg extern const unsigned char mode_nunits[NUM_MACHINE_MODES];
    242  1.5  mrg #if GCC_VERSION >= 4001
    243  1.5  mrg #define GET_MODE_NUNITS(MODE) \
    244  1.5  mrg   ((unsigned char) (__builtin_constant_p (MODE) \
    245  1.5  mrg 		    ? mode_nunits_inline (MODE) : mode_nunits[MODE]))
    246  1.5  mrg #else
    247  1.1  mrg #define GET_MODE_NUNITS(MODE)  mode_nunits[MODE]
    248  1.5  mrg #endif
    249  1.1  mrg 
    250  1.1  mrg /* Get the next wider natural mode (eg, QI -> HI -> SI -> DI -> TI).  */
    251  1.1  mrg 
    252  1.1  mrg extern const unsigned char mode_wider[NUM_MACHINE_MODES];
    253  1.5  mrg #define GET_MODE_WIDER_MODE(MODE) ((machine_mode) mode_wider[MODE])
    254  1.1  mrg 
    255  1.3  mrg /* For scalars, this is a mode with twice the precision.  For vectors,
    256  1.3  mrg    this is a mode with the same inner mode but with twice the elements.  */
    257  1.1  mrg extern const unsigned char mode_2xwider[NUM_MACHINE_MODES];
    258  1.5  mrg #define GET_MODE_2XWIDER_MODE(MODE) ((machine_mode) mode_2xwider[MODE])
    259  1.1  mrg 
    260  1.1  mrg /* Return the mode for data of a given size SIZE and mode class CLASS.
    261  1.1  mrg    If LIMIT is nonzero, then don't use modes bigger than MAX_FIXED_MODE_SIZE.
    262  1.1  mrg    The value is BLKmode if no other mode is found.  */
    263  1.1  mrg 
    264  1.5  mrg extern machine_mode mode_for_size (unsigned int, enum mode_class, int);
    265  1.1  mrg 
    266  1.1  mrg /* Similar, but find the smallest mode for a given width.  */
    267  1.1  mrg 
    268  1.5  mrg extern machine_mode smallest_mode_for_size (unsigned int,
    269  1.1  mrg 						 enum mode_class);
    270  1.1  mrg 
    271  1.1  mrg 
    272  1.1  mrg /* Return an integer mode of the exact same size as the input mode,
    273  1.1  mrg    or BLKmode on failure.  */
    274  1.1  mrg 
    275  1.5  mrg extern machine_mode int_mode_for_mode (machine_mode);
    276  1.5  mrg 
    277  1.5  mrg extern machine_mode bitwise_mode_for_mode (machine_mode);
    278  1.1  mrg 
    279  1.3  mrg /* Return a mode that is suitable for representing a vector,
    280  1.3  mrg    or BLKmode on failure.  */
    281  1.3  mrg 
    282  1.5  mrg extern machine_mode mode_for_vector (machine_mode, unsigned);
    283  1.3  mrg 
    284  1.3  mrg /* A class for iterating through possible bitfield modes.  */
    285  1.3  mrg class bit_field_mode_iterator
    286  1.3  mrg {
    287  1.3  mrg public:
    288  1.3  mrg   bit_field_mode_iterator (HOST_WIDE_INT, HOST_WIDE_INT,
    289  1.3  mrg 			   HOST_WIDE_INT, HOST_WIDE_INT,
    290  1.3  mrg 			   unsigned int, bool);
    291  1.5  mrg   bool next_mode (machine_mode *);
    292  1.3  mrg   bool prefer_smaller_modes ();
    293  1.3  mrg 
    294  1.3  mrg private:
    295  1.5  mrg   machine_mode m_mode;
    296  1.3  mrg   /* We use signed values here because the bit position can be negative
    297  1.3  mrg      for invalid input such as gcc.dg/pr48335-8.c.  */
    298  1.5  mrg   HOST_WIDE_INT m_bitsize;
    299  1.5  mrg   HOST_WIDE_INT m_bitpos;
    300  1.5  mrg   HOST_WIDE_INT m_bitregion_start;
    301  1.5  mrg   HOST_WIDE_INT m_bitregion_end;
    302  1.5  mrg   unsigned int m_align;
    303  1.5  mrg   bool m_volatilep;
    304  1.5  mrg   int m_count;
    305  1.3  mrg };
    306  1.3  mrg 
    307  1.1  mrg /* Find the best mode to use to access a bit field.  */
    308  1.1  mrg 
    309  1.5  mrg extern machine_mode get_best_mode (int, int,
    310  1.3  mrg 					unsigned HOST_WIDE_INT,
    311  1.3  mrg 					unsigned HOST_WIDE_INT,
    312  1.3  mrg 					unsigned int,
    313  1.5  mrg 					machine_mode, bool);
    314  1.1  mrg 
    315  1.1  mrg /* Determine alignment, 1<=result<=BIGGEST_ALIGNMENT.  */
    316  1.1  mrg 
    317  1.1  mrg extern CONST_MODE_BASE_ALIGN unsigned char mode_base_align[NUM_MACHINE_MODES];
    318  1.1  mrg 
    319  1.5  mrg extern unsigned get_mode_alignment (machine_mode);
    320  1.1  mrg 
    321  1.1  mrg #define GET_MODE_ALIGNMENT(MODE) get_mode_alignment (MODE)
    322  1.1  mrg 
    323  1.5  mrg /* Get the precision of the mode or its inner mode if it has one.  */
    324  1.5  mrg 
    325  1.5  mrg extern unsigned int element_precision (machine_mode);
    326  1.5  mrg 
    327  1.1  mrg /* For each class, get the narrowest mode in that class.  */
    328  1.1  mrg 
    329  1.1  mrg extern const unsigned char class_narrowest_mode[MAX_MODE_CLASS];
    330  1.1  mrg #define GET_CLASS_NARROWEST_MODE(CLASS) \
    331  1.5  mrg   ((machine_mode) class_narrowest_mode[CLASS])
    332  1.1  mrg 
    333  1.1  mrg /* Define the integer modes whose sizes are BITS_PER_UNIT and BITS_PER_WORD
    334  1.1  mrg    and the mode whose class is Pmode and whose size is POINTER_SIZE.  */
    335  1.1  mrg 
    336  1.5  mrg extern machine_mode byte_mode;
    337  1.5  mrg extern machine_mode word_mode;
    338  1.5  mrg extern machine_mode ptr_mode;
    339  1.1  mrg 
    340  1.1  mrg /* Target-dependent machine mode initialization - in insn-modes.c.  */
    341  1.1  mrg extern void init_adjust_machine_modes (void);
    342  1.1  mrg 
    343  1.3  mrg #define TRULY_NOOP_TRUNCATION_MODES_P(MODE1, MODE2) \
    344  1.3  mrg   TRULY_NOOP_TRUNCATION (GET_MODE_PRECISION (MODE1), \
    345  1.3  mrg 			 GET_MODE_PRECISION (MODE2))
    346  1.3  mrg 
    347  1.3  mrg #define HWI_COMPUTABLE_MODE_P(MODE) \
    348  1.3  mrg   (SCALAR_INT_MODE_P (MODE) \
    349  1.3  mrg    && GET_MODE_PRECISION (MODE) <= HOST_BITS_PER_WIDE_INT)
    350  1.3  mrg 
    351  1.5  mrg typedef struct {
    352  1.5  mrg   /* These parts are initailized by genmodes output */
    353  1.5  mrg   unsigned int bitsize;
    354  1.5  mrg   machine_mode m;
    355  1.5  mrg   /* RID_* is RID_INTN_BASE + index into this array */
    356  1.5  mrg } int_n_data_t;
    357  1.5  mrg 
    358  1.5  mrg /* This is also in tree.h.  genmodes.c guarantees the're sorted from
    359  1.5  mrg    smallest bitsize to largest bitsize. */
    360  1.5  mrg extern bool int_n_enabled_p[NUM_INT_N_ENTS];
    361  1.5  mrg extern const int_n_data_t int_n_data[NUM_INT_N_ENTS];
    362  1.5  mrg 
    363  1.1  mrg #endif /* not HAVE_MACHINE_MODES */
    364