1 /* Copyright (C) 1998 - 2000 by Universitaet Karlsruhe
2 ** All rights reserved.
4 ** Authors: Martin Trapp, Christian Schaefer
38 /* allocate all modes. We need to memset them as tarval_vrfy
39 reads fields before they are initialized: It compares to
40 min/max when tarvals for min/max are allocated! */
41 mode_T = (ir_mode *) malloc (sizeof (ir_mode)); memset(mode_T, 0, sizeof(ir_mode));
42 mode_f = (ir_mode *) malloc (sizeof (ir_mode)); memset(mode_f, 0, sizeof(ir_mode));
43 mode_d = (ir_mode *) malloc (sizeof (ir_mode)); memset(mode_d, 0, sizeof(ir_mode));
44 mode_c = (ir_mode *) malloc (sizeof (ir_mode)); memset(mode_c, 0, sizeof(ir_mode));
45 mode_C = (ir_mode *) malloc (sizeof (ir_mode)); memset(mode_C, 0, sizeof(ir_mode));
46 mode_h = (ir_mode *) malloc (sizeof (ir_mode)); memset(mode_h, 0, sizeof(ir_mode));
47 mode_H = (ir_mode *) malloc (sizeof (ir_mode)); memset(mode_H, 0, sizeof(ir_mode));
48 mode_i = (ir_mode *) malloc (sizeof (ir_mode)); memset(mode_i, 0, sizeof(ir_mode));
49 mode_I = (ir_mode *) malloc (sizeof (ir_mode)); memset(mode_I, 0, sizeof(ir_mode));
50 mode_l = (ir_mode *) malloc (sizeof (ir_mode)); memset(mode_l, 0, sizeof(ir_mode));
51 mode_L = (ir_mode *) malloc (sizeof (ir_mode)); memset(mode_L, 0, sizeof(ir_mode));
52 mode_B = (ir_mode *) malloc (sizeof (ir_mode)); memset(mode_B, 0, sizeof(ir_mode));
53 mode_b = (ir_mode *) malloc (sizeof (ir_mode)); memset(mode_b, 0, sizeof(ir_mode));
54 mode_p = (ir_mode *) malloc (sizeof (ir_mode)); memset(mode_p, 0, sizeof(ir_mode));
55 mode_s = (ir_mode *) malloc (sizeof (ir_mode)); memset(mode_s, 0, sizeof(ir_mode));
56 mode_S = (ir_mode *) malloc (sizeof (ir_mode)); memset(mode_S, 0, sizeof(ir_mode));
57 mode_X = (ir_mode *) malloc (sizeof (ir_mode)); memset(mode_X, 0, sizeof(ir_mode));
58 mode_M = (ir_mode *) malloc (sizeof (ir_mode)); memset(mode_M, 0, sizeof(ir_mode));
59 mode_R = (ir_mode *) malloc (sizeof (ir_mode)); memset(mode_R, 0, sizeof(ir_mode));
60 mode_Z = (ir_mode *) malloc (sizeof (ir_mode)); memset(mode_Z, 0, sizeof(ir_mode));
83 /* initialize all modes */
85 mode_T->name = id_from_str ("T", 1);
90 mode_f->name = id_from_str ("f", 1);
95 mode_d->name = id_from_str ("d", 1);
100 mode_c->name = id_from_str ("c", 1);
103 mode_c->ld_align = 0;
105 mode_c->min = tarval_from_long (mode_l, 0xffffff80);
106 mode_c->max = tarval_from_long (mode_l, 0x0000007f);
107 mode_c->null = tarval_from_long (mode_c, 0);
110 mode_C->name = id_from_str ("C", 1);
113 mode_C->ld_align = 0;
115 mode_C->min = tarval_from_long (mode_L, 0x00000000);
116 mode_C->max = tarval_from_long (mode_L, 0x000000ff);
117 mode_C->null = tarval_from_long (mode_C, 0);
119 /* signed short integer */
120 mode_h->name = id_from_str ("h", 1);
123 mode_h->ld_align = 1;
125 mode_h->min = tarval_from_long (mode_l, 0xffff8000);
126 mode_h->max = tarval_from_long (mode_l, 0x00007fff);
127 mode_h->null = tarval_from_long (mode_h, 0);
129 /* unsigened short integer */
130 mode_H->name = id_from_str ("H", 1);
133 mode_H->ld_align = 1;
135 mode_H->min = tarval_from_long (mode_L, 0x00000000);
136 mode_H->max = tarval_from_long (mode_L, 0x0000ffff);
137 mode_H->null = tarval_from_long (mode_H, 0);
140 mode_i->name = id_from_str ("i", 1);
143 mode_i->ld_align = 2;
145 mode_i->min = tarval_from_long (mode_l, 0x80000000);
146 mode_i->max = tarval_from_long (mode_l, 0x7fffffff);
147 mode_i->null = tarval_from_long (mode_i, 0);
149 /* unsigned integer */
150 mode_I->name = id_from_str ("I", 1);
153 mode_I->ld_align = 2;
155 mode_I->min = tarval_from_long (mode_L, 0x00000000);
156 mode_I->max = tarval_from_long (mode_L, 0xffffffff);
157 mode_I->null = tarval_from_long (mode_I, 0);
159 /* signed long integer */
160 mode_l->name = id_from_str ("l", 1);
163 mode_l->ld_align = 2;
165 mode_l->min = tarval_from_long (mode_l, 0x80000000);
166 mode_l->max = tarval_from_long (mode_l, 0x7fffffff);
167 mode_I->null = tarval_from_long (mode_l, 0);
169 /* unsigned long integer */
170 mode_L->name = id_from_str ("L", 1);
173 mode_L->ld_align = 2;
175 mode_L->min = tarval_from_long (mode_L, 0x00000000);
176 mode_L->max = tarval_from_long (mode_L, 0xffffffff);
177 mode_L->null = tarval_from_long (mode_L, 0);
180 mode_B->name = id_from_str ("B", 1);
185 mode_b->name = id_from_str ("b", 1);
190 mode_p->name = id_from_str ("p", 1);
193 mode_p->ld_align = 2;
195 mode_p->min = tarval_from_long (mode_L, 0x00000000);
196 mode_p->max = tarval_from_long (mode_L, 0xffffffff);
197 mode_p->null = tarval_from_long (mode_p, 0);
199 mode_s->name = id_from_str ("s", 1);
203 mode_S->name = id_from_str ("S", 1);
207 mode_X->name = id_from_str ("X", 1);
211 mode_M->name = id_from_str ("M", 1);
215 mode_R->name = id_from_str ("R", 1);
219 mode_Z->name = id_from_str ("Z", 1);
225 /* Functions for the direct access to all attributes od a ir_mode */
228 get_modecode_of_mode (ir_mode *mode)
235 set_modecode_of_mode (ir_mode *mode, modecode code)
242 get_mode_ident (ir_mode *mode)
249 set_ident_of_mode (ir_mode *mode, ident *name)
256 get_size_of_mode (ir_mode *mode)
262 set_size_of_mode (ir_mode *mode, int size)
269 get_ld_align_of_mode (ir_mode *mode)
271 return mode->ld_align;
276 set_ld_align_of_mode (ir_mode *mode, int ld_align)
278 mode->ld_align = ld_align;
283 get_min_of_mode (ir_mode *mode)
290 set_min_of_mode (ir_mode *mode, struct tarval *min)
297 get_max_of_mode (ir_mode *mode)
304 set_max_of_mode (ir_mode *mode, struct tarval *max)
311 get_null_of_mode (ir_mode *mode)
318 set_null_of_mode (ir_mode *mode, struct tarval *null)
325 get_fsigned_of_mode (ir_mode *mode)
327 return mode->fsigned;
332 set_fsigned_of_mode (ir_mode *mode, unsigned fsigned)
334 mode->fsigned = fsigned;
339 get_ffloat_of_mode (ir_mode *mode)
346 set_ffloat_of_mode (ir_mode *mode, unsigned ffloat)
348 mode->ffloat = ffloat;
352 /* Functions to check, whether a modecode is signed, float, int, num, data,
353 datab or dataM. For more exact definitions read the corresponding pages
354 in the firm documentation or the followingenumeration
356 The set of "float" is defined as:
357 ---------------------------------
358 float = {irm_f, irm_d}
360 The set of "int" is defined as:
361 -------------------------------
362 int = {irm_c, irm_C, irm_h, irm_H, irm_i, irm_I, irm_l, irm_L}
364 The set of "num" is defined as:
365 -------------------------------
366 num = {irm_f, irm_d, irm_c, irm_C, irm_h, irm_H,
367 irm_i, irm_I, irm_l, irm_L}
370 The set of "data" is defined as:
371 -------------------------------
372 data = {irm_f, irm_d, irm_c, irm_C, irm_h, irm_H,
373 irm_i, irm_I, irm_l, irm_L, irm_p}
376 The set of "datab" is defined as:
377 ---------------------------------
378 datab = {irm_f, irm_d, irm_c, irm_C, irm_h, irm_H,
379 irm_i, irm_I, irm_l, irm_L, irm_p, irm_b, irm_B}
380 = {data || irm_b || irm_B}
382 The set of "dataM" is defined as:
383 ---------------------------------
384 dataM = {irm_f, irm_d, irm_c, irm_C, irm_h, irm_H, irm_i,
385 irm_I, irm_l, irm_L, irm_p, irm_M}
390 mode_is_signed (ir_mode *mode)
394 fsigned = get_fsigned_of_mode (mode);
405 mode_is_float (ir_mode *mode)
409 ffloat = get_ffloat_of_mode (mode);
421 mode_is_int (ir_mode *mode)
425 code = get_modecode_of_mode (mode);
426 if ((code >= irm_c) && (code <= irm_L)) {
437 mode_is_num (ir_mode *mode)
440 if (mode_is_int (mode) || mode_is_float (mode)) {
450 mode_is_data (ir_mode *mode)
454 code = get_modecode_of_mode (mode);
455 if (mode_is_num (mode) || code == irm_p) {
465 mode_is_datab (ir_mode *mode)
469 code = get_modecode_of_mode (mode);
470 if (mode_is_data (mode) || code == irm_b || code == irm_B) {
480 mode_is_dataM (ir_mode *mode)
484 code = get_modecode_of_mode (mode);
485 if (mode_is_data (mode) || code == irm_M) {