1 /* Copyright (C) 1998 - 2000 by Universitaet Karlsruhe
2 ** All rights reserved.
4 ** Authors: Martin Trapp, Christian Schaefer
38 /* allocate all modes */
39 mode_T = (ir_mode *) malloc (sizeof (ir_mode));
40 mode_f = (ir_mode *) malloc (sizeof (ir_mode));
41 mode_d = (ir_mode *) malloc (sizeof (ir_mode));
42 mode_c = (ir_mode *) malloc (sizeof (ir_mode));
43 mode_C = (ir_mode *) malloc (sizeof (ir_mode));
44 mode_h = (ir_mode *) malloc (sizeof (ir_mode));
45 mode_H = (ir_mode *) malloc (sizeof (ir_mode));
46 mode_i = (ir_mode *) malloc (sizeof (ir_mode));
47 mode_I = (ir_mode *) malloc (sizeof (ir_mode));
48 mode_l = (ir_mode *) malloc (sizeof (ir_mode));
49 mode_L = (ir_mode *) malloc (sizeof (ir_mode));
50 mode_B = (ir_mode *) malloc (sizeof (ir_mode));
51 mode_b = (ir_mode *) malloc (sizeof (ir_mode));
52 mode_p = (ir_mode *) malloc (sizeof (ir_mode));
53 mode_s = (ir_mode *) malloc (sizeof (ir_mode));
54 mode_S = (ir_mode *) malloc (sizeof (ir_mode));
55 mode_X = (ir_mode *) malloc (sizeof (ir_mode));
56 mode_M = (ir_mode *) malloc (sizeof (ir_mode));
57 mode_R = (ir_mode *) malloc (sizeof (ir_mode));
58 mode_Z = (ir_mode *) malloc (sizeof (ir_mode));
81 /* initialize all modes */
83 mode_T->name = id_from_str ("T", 1);
88 mode_f->name = id_from_str ("f", 1);
93 mode_d->name = id_from_str ("d", 1);
98 mode_c->name = id_from_str ("c", 1);
101 mode_c->ld_align = 0;
103 mode_c->min = tarval_from_long (mode_l, 0xffffff80);
104 mode_c->max = tarval_from_long (mode_l, 0x0000007f);
105 mode_c->null = tarval_from_long (mode_c, 0);
108 mode_C->name = id_from_str ("C", 1);
111 mode_C->ld_align = 0;
113 mode_C->min = tarval_from_long (mode_L, 0x00000000);
114 mode_C->max = tarval_from_long (mode_L, 0x000000ff);
115 mode_C->null = tarval_from_long (mode_C, 0);
117 /* signed short integer */
118 mode_h->name = id_from_str ("h", 1);
121 mode_h->ld_align = 1;
123 mode_h->min = tarval_from_long (mode_l, 0xffff8000);
124 mode_h->max = tarval_from_long (mode_l, 0x00007fff);
125 mode_h->null = tarval_from_long (mode_h, 0);
127 /* unsigened short integer */
128 mode_H->name = id_from_str ("H", 1);
131 mode_H->ld_align = 1;
133 mode_H->min = tarval_from_long (mode_L, 0x00000000);
134 mode_H->max = tarval_from_long (mode_L, 0x0000ffff);
135 mode_H->null = tarval_from_long (mode_H, 0);
138 mode_i->name = id_from_str ("i", 1);
141 mode_i->ld_align = 2;
143 mode_i->min = tarval_from_long (mode_l, 0x80000000);
144 mode_i->max = tarval_from_long (mode_l, 0x7fffffff);
145 mode_i->null = tarval_from_long (mode_i, 0);
147 /* unsigned integer */
148 mode_I->name = id_from_str ("I", 1);
151 mode_I->ld_align = 2;
153 mode_I->min = tarval_from_long (mode_L, 0x00000000);
154 mode_I->max = tarval_from_long (mode_L, 0xffffffff);
155 mode_I->null = tarval_from_long (mode_I, 0);
157 /* signed long integer */
158 mode_l->name = id_from_str ("l", 1);
161 mode_l->ld_align = 2;
163 mode_l->min = tarval_from_long (mode_l, 0x80000000);
164 mode_l->max = tarval_from_long (mode_l, 0x7fffffff);
165 mode_I->null = tarval_from_long (mode_l, 0);
167 /* unsigned long integer */
168 mode_L->name = id_from_str ("L", 1);
171 mode_L->ld_align = 2;
173 mode_L->min = tarval_from_long (mode_L, 0x00000000);
174 mode_L->max = tarval_from_long (mode_L, 0xffffffff);
175 mode_L->null = tarval_from_long (mode_L, 0);
178 mode_B->name = id_from_str ("B", 1);
183 mode_b->name = id_from_str ("b", 1);
188 mode_p->name = id_from_str ("p", 1);
191 mode_p->ld_align = 2;
193 mode_p->min = tarval_from_long (mode_L, 0x00000000);
194 mode_p->max = tarval_from_long (mode_L, 0xffffffff);
195 mode_p->null = tarval_from_long (mode_p, 0);
197 mode_s->name = id_from_str ("s", 1);
201 mode_S->name = id_from_str ("S", 1);
205 mode_X->name = id_from_str ("X", 1);
209 mode_M->name = id_from_str ("M", 1);
213 mode_R->name = id_from_str ("R", 1);
217 mode_Z->name = id_from_str ("Z", 1);
223 /* Functions for the direct access to all attributes od a ir_mode */
226 get_modecode_of_mode (ir_mode *mode)
233 set_modecode_of_mode (ir_mode *mode, modecode code)
240 get_mode_ident (ir_mode *mode)
247 set_ident_of_mode (ir_mode *mode, ident *name)
254 get_size_of_mode (ir_mode *mode)
260 set_size_of_mode (ir_mode *mode, int size)
267 get_ld_align_of_mode (ir_mode *mode)
269 return mode->ld_align;
274 set_ld_align_of_mode (ir_mode *mode, int ld_align)
276 mode->ld_align = ld_align;
281 get_min_of_mode (ir_mode *mode)
288 set_min_of_mode (ir_mode *mode, struct tarval *min)
295 get_max_of_mode (ir_mode *mode)
302 set_max_of_mode (ir_mode *mode, struct tarval *max)
309 get_null_of_mode (ir_mode *mode)
316 set_null_of_mode (ir_mode *mode, struct tarval *null)
323 get_fsigned_of_mode (ir_mode *mode)
325 return mode->fsigned;
330 set_fsigned_of_mode (ir_mode *mode, unsigned fsigned)
332 mode->fsigned = fsigned;
337 get_ffloat_of_mode (ir_mode *mode)
344 set_ffloat_of_mode (ir_mode *mode, unsigned ffloat)
346 mode->ffloat = ffloat;
350 /* Functions to check, whether a modecode is signed, float, int, num, data,
351 datab or dataM. For more exact definitions read the corresponding pages
352 in the firm documentation or the followingenumeration
354 The set of "float" is defined as:
355 ---------------------------------
356 float = {irm_f, irm_d}
358 The set of "int" is defined as:
359 -------------------------------
360 int = {irm_c, irm_C, irm_h, irm_H, irm_i, irm_I, irm_l, irm_L}
362 The set of "num" is defined as:
363 -------------------------------
364 num = {irm_f, irm_d, irm_c, irm_C, irm_h, irm_H,
365 irm_i, irm_I, irm_l, irm_L}
368 The set of "data" is defined as:
369 -------------------------------
370 data = {irm_f, irm_d, irm_c, irm_C, irm_h, irm_H,
371 irm_i, irm_I, irm_l, irm_L, irm_p}
374 The set of "datab" is defined as:
375 ---------------------------------
376 datab = {irm_f, irm_d, irm_c, irm_C, irm_h, irm_H,
377 irm_i, irm_I, irm_l, irm_L, irm_p, irm_b, irm_B}
378 = {data || irm_b || irm_B}
380 The set of "dataM" is defined as:
381 ---------------------------------
382 dataM = {irm_f, irm_d, irm_c, irm_C, irm_h, irm_H, irm_i,
383 irm_I, irm_l, irm_L, irm_p, irm_M}
388 mode_is_signed (ir_mode *mode)
392 fsigned = get_fsigned_of_mode (mode);
403 mode_is_float (ir_mode *mode)
407 ffloat = get_ffloat_of_mode (mode);
419 mode_is_int (ir_mode *mode)
423 code = get_modecode_of_mode (mode);
424 if ((code >= irm_c) && (code <= irm_L)) {
435 mode_is_num (ir_mode *mode)
438 if (mode_is_int (mode) || mode_is_float (mode)) {
448 mode_is_data (ir_mode *mode)
452 code = get_modecode_of_mode (mode);
453 if (mode_is_num (mode) || code == irm_p) {
463 mode_is_datab (ir_mode *mode)
467 code = get_modecode_of_mode (mode);
468 if (mode_is_data (mode) || code == irm_b || code == irm_B) {
478 mode_is_dataM (ir_mode *mode)
482 code = get_modecode_of_mode (mode);
483 if (mode_is_data (mode) || code == irm_M) {