#ifndef HAVE_MACHINE_MODES
#define HAVE_MACHINE_MODES
#ifndef HOST_PTR_PRINTF
# ifdef HAVE_PRINTF_PTR
# define HOST_PTR_PRINTF "%p"
# else
# define HOST_PTR_PRINTF \
(sizeof (int) == sizeof (char *) ? "%x" \
: sizeof (long) == sizeof (char *) ? "%lx" : "%llx")
# endif
#endif
#define DEF_MACHMODE(SYM, NAME, TYPE, SIZE, UNIT, WIDER) SYM,
enum machine_mode {
#include "machmode.def"
#ifdef EXTRA_CC_MODES
EXTRA_CC_MODES,
#endif
MAX_MACHINE_MODE };
#undef DEF_MACHMODE
#ifndef NUM_MACHINE_MODES
#define NUM_MACHINE_MODES (int) MAX_MACHINE_MODE
#endif
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_VECTOR, MAX_MODE_CLASS};
extern enum mode_class mode_class[];
#define GET_MODE_CLASS(MODE) (mode_class[(int) (MODE)])
#define INTEGRAL_MODE_P(MODE) \
(GET_MODE_CLASS (MODE) == MODE_INT \
|| GET_MODE_CLASS (MODE) == MODE_PARTIAL_INT \
|| GET_MODE_CLASS (MODE) == MODE_COMPLEX_INT)
#define FLOAT_MODE_P(MODE) \
(GET_MODE_CLASS (MODE) == MODE_FLOAT \
|| GET_MODE_CLASS (MODE) == MODE_COMPLEX_FLOAT)
#define COMPLEX_MODE_P(MODE) \
(GET_MODE_CLASS (MODE) == MODE_COMPLEX_INT \
|| GET_MODE_CLASS (MODE) == MODE_COMPLEX_FLOAT)
extern int mode_size[];
#define GET_MODE_SIZE(MODE) (mode_size[(int) (MODE)])
extern int mode_unit_size[];
#define GET_MODE_UNIT_SIZE(MODE) (mode_unit_size[(int) (MODE)])
#define GET_MODE_NUNITS(MODE) \
((GET_MODE_UNIT_SIZE ((MODE)) == 0) ? 0 \
: (GET_MODE_SIZE ((MODE)) / GET_MODE_UNIT_SIZE ((MODE))))
#define GET_MODE_BITSIZE(MODE) (BITS_PER_UNIT * mode_size[(int) (MODE)])
#ifdef HOST_WIDE_INT
extern unsigned HOST_WIDE_INT mode_mask_array[];
#define GET_MODE_MASK(MODE) mode_mask_array[(int) (MODE)]
#endif
extern unsigned char mode_wider_mode[];
#define GET_MODE_WIDER_MODE(MODE) ((enum machine_mode)mode_wider_mode[(int) (MODE)])
extern enum machine_mode mode_for_size PROTO((unsigned int, enum mode_class, int));
extern enum machine_mode smallest_mode_for_size PROTO((unsigned int,
enum mode_class));
extern enum machine_mode int_mode_for_mode PROTO((enum machine_mode));
extern enum machine_mode get_best_mode PROTO((int, int, int, enum machine_mode, int));
#define GET_MODE_ALIGNMENT(MODE) \
MIN (BIGGEST_ALIGNMENT, \
MAX (1, (GET_MODE_UNIT_SIZE (MODE) * BITS_PER_UNIT)))
extern enum machine_mode class_narrowest_mode[];
#define GET_CLASS_NARROWEST_MODE(CLASS) class_narrowest_mode[(int) (CLASS)]
extern enum machine_mode byte_mode;
extern enum machine_mode word_mode;
extern enum machine_mode ptr_mode;
#endif