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
00027 #define DEF_MACHMODE(SYM, NAME, TYPE, BITSIZE, SIZE, UNIT, WIDER, INNER) SYM,
00028
00029 enum machine_mode {
00030 #include "machmode.def"
00031 MAX_MACHINE_MODE };
00032
00033 #undef DEF_MACHMODE
00034
00035 #ifndef NUM_MACHINE_MODES
00036 #define NUM_MACHINE_MODES (int) MAX_MACHINE_MODE
00037 #endif
00038
00039
00040
00041 extern const char * const mode_name[NUM_MACHINE_MODES];
00042 #define GET_MODE_NAME(MODE) (mode_name[(int) (MODE)])
00043
00044 enum mode_class { MODE_RANDOM, MODE_INT, MODE_FLOAT, MODE_PARTIAL_INT, MODE_CC,
00045 MODE_COMPLEX_INT, MODE_COMPLEX_FLOAT,
00046 MODE_VECTOR_INT, MODE_VECTOR_FLOAT,
00047 MAX_MODE_CLASS};
00048
00049
00050
00051
00052 extern const enum mode_class mode_class[NUM_MACHINE_MODES];
00053 #define GET_MODE_CLASS(MODE) (mode_class[(int) (MODE)])
00054
00055
00056 #define INTEGRAL_MODE_P(MODE) \
00057 (GET_MODE_CLASS (MODE) == MODE_INT \
00058 || GET_MODE_CLASS (MODE) == MODE_PARTIAL_INT \
00059 || GET_MODE_CLASS (MODE) == MODE_COMPLEX_INT \
00060 || GET_MODE_CLASS (MODE) == MODE_VECTOR_INT)
00061
00062
00063 #define FLOAT_MODE_P(MODE) \
00064 (GET_MODE_CLASS (MODE) == MODE_FLOAT \
00065 || GET_MODE_CLASS (MODE) == MODE_COMPLEX_FLOAT \
00066 || GET_MODE_CLASS (MODE) == MODE_VECTOR_FLOAT)
00067
00068
00069 #define COMPLEX_MODE_P(MODE) \
00070 (GET_MODE_CLASS (MODE) == MODE_COMPLEX_INT \
00071 || GET_MODE_CLASS (MODE) == MODE_COMPLEX_FLOAT)
00072
00073
00074 #define VECTOR_MODE_P(MODE) \
00075 (GET_MODE_CLASS (MODE) == MODE_VECTOR_INT \
00076 || GET_MODE_CLASS (MODE) == MODE_VECTOR_FLOAT)
00077
00078
00079 #define SCALAR_INT_MODE_P(MODE) \
00080 (GET_MODE_CLASS (MODE) == MODE_INT \
00081 || GET_MODE_CLASS (MODE) == MODE_PARTIAL_INT)
00082
00083
00084 #define SCALAR_FLOAT_MODE_P(MODE) \
00085 (GET_MODE_CLASS (MODE) == MODE_FLOAT)
00086
00087
00088
00089 extern const unsigned char mode_size[NUM_MACHINE_MODES];
00090 #define GET_MODE_SIZE(MODE) (mode_size[(int) (MODE)])
00091
00092
00093
00094 extern const unsigned char mode_unit_size[NUM_MACHINE_MODES];
00095 #define GET_MODE_UNIT_SIZE(MODE) (mode_unit_size[(int) (MODE)])
00096
00097
00098
00099 #define GET_MODE_NUNITS(MODE) \
00100 ((GET_MODE_UNIT_SIZE ((MODE)) == 0) ? 0 \
00101 : (GET_MODE_SIZE ((MODE)) / GET_MODE_UNIT_SIZE ((MODE))))
00102
00103
00104
00105 extern const unsigned short mode_bitsize[NUM_MACHINE_MODES];
00106 #define GET_MODE_BITSIZE(MODE) (mode_bitsize[(int) (MODE)])
00107
00108 #endif
00109
00110 #if defined HOST_WIDE_INT && ! defined GET_MODE_MASK
00111
00112
00113
00114
00115 extern const unsigned HOST_WIDE_INT mode_mask_array[NUM_MACHINE_MODES];
00116
00117 #define GET_MODE_MASK(MODE) mode_mask_array[(int) (MODE)]
00118
00119 extern const enum machine_mode inner_mode_array[NUM_MACHINE_MODES];
00120
00121
00122
00123 #define GET_MODE_INNER(MODE) inner_mode_array[(int) (MODE)]
00124
00125 #endif
00126
00127 #if ! defined GET_MODE_WIDER_MODE || ! defined GET_MODE_ALIGNMENT \
00128 || ! defined GET_CLASS_NARROWEST_MODE
00129
00130
00131
00132 extern const unsigned char mode_wider_mode[NUM_MACHINE_MODES];
00133 #define GET_MODE_WIDER_MODE(MODE) ((enum machine_mode)mode_wider_mode[(int) (MODE)])
00134
00135
00136
00137
00138
00139 extern enum machine_mode mode_for_size PARAMS ((unsigned int,
00140 enum mode_class, int));
00141
00142
00143
00144 extern enum machine_mode smallest_mode_for_size
00145 PARAMS ((unsigned int, enum mode_class));
00146
00147
00148
00149
00150
00151 extern enum machine_mode int_mode_for_mode PARAMS ((enum machine_mode));
00152
00153
00154
00155 extern enum machine_mode get_best_mode PARAMS ((int, int, unsigned int,
00156 enum machine_mode, int));
00157
00158
00159
00160 extern unsigned get_mode_alignment PARAMS ((enum machine_mode));
00161
00162 #define GET_MODE_ALIGNMENT(MODE) get_mode_alignment (MODE)
00163
00164
00165
00166 extern const enum machine_mode class_narrowest_mode[(int) MAX_MODE_CLASS];
00167 #define GET_CLASS_NARROWEST_MODE(CLASS) class_narrowest_mode[(int) (CLASS)]
00168
00169
00170
00171
00172 extern enum machine_mode byte_mode;
00173 extern enum machine_mode word_mode;
00174 extern enum machine_mode ptr_mode;
00175
00176 #endif
00177