00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022 #ifndef HAVE_MACHINE_MODES
00023 #define HAVE_MACHINE_MODES
00024
00025
00026 #include "insn-modes.h"
00027
00028
00029
00030 extern const char * const mode_name[NUM_MACHINE_MODES];
00031 #define GET_MODE_NAME(MODE) mode_name[MODE]
00032
00033
00034
00035 #include "mode-classes.def"
00036 #define DEF_MODE_CLASS(M) M
00037 enum mode_class { MODE_CLASSES, MAX_MODE_CLASS };
00038 #undef DEF_MODE_CLASS
00039 #undef MODE_CLASSES
00040
00041
00042
00043
00044 extern const unsigned char mode_class[NUM_MACHINE_MODES];
00045 #define GET_MODE_CLASS(MODE) mode_class[MODE]
00046
00047
00048 #define INTEGRAL_MODE_P(MODE) \
00049 (GET_MODE_CLASS (MODE) == MODE_INT \
00050 || GET_MODE_CLASS (MODE) == MODE_PARTIAL_INT \
00051 || GET_MODE_CLASS (MODE) == MODE_COMPLEX_INT \
00052 || GET_MODE_CLASS (MODE) == MODE_VECTOR_INT)
00053
00054
00055 #define FLOAT_MODE_P(MODE) \
00056 (GET_MODE_CLASS (MODE) == MODE_FLOAT \
00057 || GET_MODE_CLASS (MODE) == MODE_COMPLEX_FLOAT \
00058 || GET_MODE_CLASS (MODE) == MODE_VECTOR_FLOAT)
00059
00060
00061 #define COMPLEX_MODE_P(MODE) \
00062 (GET_MODE_CLASS (MODE) == MODE_COMPLEX_INT \
00063 || GET_MODE_CLASS (MODE) == MODE_COMPLEX_FLOAT)
00064
00065
00066 #define VECTOR_MODE_P(MODE) \
00067 (GET_MODE_CLASS (MODE) == MODE_VECTOR_INT \
00068 || GET_MODE_CLASS (MODE) == MODE_VECTOR_FLOAT)
00069
00070
00071 #define SCALAR_INT_MODE_P(MODE) \
00072 (GET_MODE_CLASS (MODE) == MODE_INT \
00073 || GET_MODE_CLASS (MODE) == MODE_PARTIAL_INT)
00074
00075
00076 #define SCALAR_FLOAT_MODE_P(MODE) \
00077 (GET_MODE_CLASS (MODE) == MODE_FLOAT)
00078
00079
00080
00081 extern CONST_MODE_SIZE unsigned char mode_size[NUM_MACHINE_MODES];
00082 #define GET_MODE_SIZE(MODE) ((unsigned short) mode_size[MODE])
00083 #define GET_MODE_BITSIZE(MODE) ((unsigned short) (GET_MODE_SIZE (MODE) * BITS_PER_UNIT))
00084
00085
00086 extern const unsigned short mode_precision[NUM_MACHINE_MODES];
00087 #define GET_MODE_PRECISION(MODE) mode_precision[MODE]
00088
00089
00090
00091
00092 extern const unsigned HOST_WIDE_INT mode_mask_array[NUM_MACHINE_MODES];
00093
00094 #define GET_MODE_MASK(MODE) mode_mask_array[MODE]
00095
00096
00097
00098 extern const unsigned char mode_inner[NUM_MACHINE_MODES];
00099 #define GET_MODE_INNER(MODE) mode_inner[MODE]
00100
00101
00102
00103 #define GET_MODE_UNIT_SIZE(MODE) \
00104 (GET_MODE_INNER (MODE) == VOIDmode \
00105 ? GET_MODE_SIZE (MODE) \
00106 : GET_MODE_SIZE (GET_MODE_INNER (MODE)))
00107
00108
00109
00110 extern const unsigned char mode_nunits[NUM_MACHINE_MODES];
00111 #define GET_MODE_NUNITS(MODE) mode_nunits[MODE]
00112
00113
00114
00115 extern const unsigned char mode_wider[NUM_MACHINE_MODES];
00116 #define GET_MODE_WIDER_MODE(MODE) mode_wider[MODE]
00117
00118
00119
00120
00121
00122 extern enum machine_mode mode_for_size (unsigned int, enum mode_class, int);
00123
00124
00125
00126 extern enum machine_mode smallest_mode_for_size (unsigned int,
00127 enum mode_class);
00128
00129
00130
00131
00132
00133 extern enum machine_mode int_mode_for_mode (enum machine_mode);
00134
00135
00136
00137 extern enum machine_mode get_best_mode (int, int, unsigned int,
00138 enum machine_mode, int);
00139
00140
00141
00142 extern CONST_MODE_BASE_ALIGN unsigned char mode_base_align[NUM_MACHINE_MODES];
00143
00144 extern unsigned get_mode_alignment (enum machine_mode);
00145
00146 #define GET_MODE_ALIGNMENT(MODE) get_mode_alignment (MODE)
00147
00148
00149
00150 extern const unsigned char class_narrowest_mode[MAX_MODE_CLASS];
00151 #define GET_CLASS_NARROWEST_MODE(CLASS) class_narrowest_mode[CLASS]
00152
00153
00154
00155
00156 extern enum machine_mode byte_mode;
00157 extern enum machine_mode word_mode;
00158 extern enum machine_mode ptr_mode;
00159
00160
00161 extern void init_adjust_machine_modes (void);
00162
00163 #endif