1 /* Copyright (C) 1998 - 2000 by Universitaet Karlsruhe
2 ** All rights reserved.
4 ** Authors: Martin Trapp, Christian Schaefer
12 # include "irmode_t.h"
41 /* allocate all modes. We need to memset them as tarval_vrfy
42 reads fields before they are initialized: It compares to
43 min/max when tarvals for min/max are allocated! */
44 mode_T = (ir_mode *) malloc (sizeof (ir_mode)); memset(mode_T, 0, sizeof(ir_mode));
45 mode_f = (ir_mode *) malloc (sizeof (ir_mode)); memset(mode_f, 0, sizeof(ir_mode));
46 mode_d = (ir_mode *) malloc (sizeof (ir_mode)); memset(mode_d, 0, sizeof(ir_mode));
47 mode_c = (ir_mode *) malloc (sizeof (ir_mode)); memset(mode_c, 0, sizeof(ir_mode));
48 mode_C = (ir_mode *) malloc (sizeof (ir_mode)); memset(mode_C, 0, sizeof(ir_mode));
49 mode_h = (ir_mode *) malloc (sizeof (ir_mode)); memset(mode_h, 0, sizeof(ir_mode));
50 mode_H = (ir_mode *) malloc (sizeof (ir_mode)); memset(mode_H, 0, sizeof(ir_mode));
51 mode_i = (ir_mode *) malloc (sizeof (ir_mode)); memset(mode_i, 0, sizeof(ir_mode));
52 mode_I = (ir_mode *) malloc (sizeof (ir_mode)); memset(mode_I, 0, sizeof(ir_mode));
53 mode_l = (ir_mode *) malloc (sizeof (ir_mode)); memset(mode_l, 0, sizeof(ir_mode));
54 mode_L = (ir_mode *) malloc (sizeof (ir_mode)); memset(mode_L, 0, sizeof(ir_mode));
55 mode_B = (ir_mode *) malloc (sizeof (ir_mode)); memset(mode_B, 0, sizeof(ir_mode));
56 mode_b = (ir_mode *) malloc (sizeof (ir_mode)); memset(mode_b, 0, sizeof(ir_mode));
57 mode_p = (ir_mode *) malloc (sizeof (ir_mode)); memset(mode_p, 0, sizeof(ir_mode));
58 mode_s = (ir_mode *) malloc (sizeof (ir_mode)); memset(mode_s, 0, sizeof(ir_mode));
59 mode_S = (ir_mode *) malloc (sizeof (ir_mode)); memset(mode_S, 0, sizeof(ir_mode));
60 mode_X = (ir_mode *) malloc (sizeof (ir_mode)); memset(mode_X, 0, sizeof(ir_mode));
61 mode_M = (ir_mode *) malloc (sizeof (ir_mode)); memset(mode_M, 0, sizeof(ir_mode));
62 mode_R = (ir_mode *) malloc (sizeof (ir_mode)); memset(mode_R, 0, sizeof(ir_mode));
63 mode_Z = (ir_mode *) malloc (sizeof (ir_mode)); memset(mode_Z, 0, sizeof(ir_mode));
86 /* initialize all modes */
88 mode_T->name = id_from_str ("T", 1);
93 mode_f->name = id_from_str ("f", 1);
98 mode_d->name = id_from_str ("d", 1);
103 mode_c->name = id_from_str ("c", 1);
106 mode_c->ld_align = 0;
108 mode_c->min = tarval_from_long (mode_l, 0xffffff80);
109 mode_c->max = tarval_from_long (mode_l, 0x0000007f);
110 mode_c->null = tarval_from_long (mode_c, 0);
113 mode_C->name = id_from_str ("C", 1);
116 mode_C->ld_align = 0;
118 mode_C->min = tarval_from_long (mode_L, 0x00000000);
119 mode_C->max = tarval_from_long (mode_L, 0x000000ff);
120 mode_C->null = tarval_from_long (mode_C, 0);
122 /* signed short integer */
123 mode_h->name = id_from_str ("h", 1);
126 mode_h->ld_align = 1;
128 mode_h->min = tarval_from_long (mode_l, 0xffff8000);
129 mode_h->max = tarval_from_long (mode_l, 0x00007fff);
130 mode_h->null = tarval_from_long (mode_h, 0);
132 /* unsigened short integer */
133 mode_H->name = id_from_str ("H", 1);
136 mode_H->ld_align = 1;
138 mode_H->min = tarval_from_long (mode_L, 0x00000000);
139 mode_H->max = tarval_from_long (mode_L, 0x0000ffff);
140 mode_H->null = tarval_from_long (mode_H, 0);
143 mode_i->name = id_from_str ("i", 1);
146 mode_i->ld_align = 2;
148 mode_i->min = tarval_from_long (mode_l, 0x80000000);
149 mode_i->max = tarval_from_long (mode_l, 0x7fffffff);
150 mode_i->null = tarval_from_long (mode_i, 0);
152 /* unsigned integer */
153 mode_I->name = id_from_str ("I", 1);
156 mode_I->ld_align = 2;
158 mode_I->min = tarval_from_long (mode_L, 0x00000000);
159 mode_I->max = tarval_from_long (mode_L, 0xffffffff);
160 mode_I->null = tarval_from_long (mode_I, 0);
162 /* signed long integer */
163 mode_l->name = id_from_str ("l", 1);
166 mode_l->ld_align = 2;
168 mode_l->min = tarval_from_long (mode_l, 0x80000000);
169 mode_l->max = tarval_from_long (mode_l, 0x7fffffff);
170 mode_I->null = tarval_from_long (mode_l, 0);
172 /* unsigned long integer */
173 mode_L->name = id_from_str ("L", 1);
176 mode_L->ld_align = 2;
178 mode_L->min = tarval_from_long (mode_L, 0x00000000);
179 mode_L->max = tarval_from_long (mode_L, 0xffffffff);
180 mode_L->null = tarval_from_long (mode_L, 0);
183 mode_B->name = id_from_str ("B", 1);
188 mode_b->name = id_from_str ("b", 1);
193 mode_p->name = id_from_str ("p", 1);
196 mode_p->ld_align = 2;
198 mode_p->min = tarval_from_long (mode_L, 0x00000000);
199 mode_p->max = tarval_from_long (mode_L, 0xffffffff);
200 mode_p->null = tarval_from_long (mode_p, 0);
202 mode_s->name = id_from_str ("s", 1);
206 mode_S->name = id_from_str ("S", 1);
211 mode_X->name = id_from_str ("X", 1);
216 mode_M->name = id_from_str ("M", 1);
220 mode_R->name = id_from_str ("R", 1);
224 mode_Z->name = id_from_str ("Z", 1);
229 /* Functions for the direct access to all attributes od a ir_mode */
232 get_mode_modecode (ir_mode *mode)
239 set_mode_modecode (ir_mode *mode, modecode code)
246 get_mode_ident (ir_mode *mode)
253 set_mode_ident (ir_mode *mode, ident *name)
260 get_mode_name (ir_mode *mode) {
262 return id_to_str(mode->name);
264 /* void set_mode_name (ir_mode *mode, char *name); */
267 get_mode_size (ir_mode *mode)
273 set_mode_size (ir_mode *mode, int size)
280 get_mode_ld_align (ir_mode *mode)
282 return mode->ld_align;
287 set_mode_ld_align (ir_mode *mode, int ld_align)
289 mode->ld_align = ld_align;
294 get_mode_min (ir_mode *mode)
301 set_mode_min (ir_mode *mode, tarval *min)
308 get_mode_max (ir_mode *mode)
315 set_mode_max (ir_mode *mode, tarval *max)
322 get_mode_null (ir_mode *mode)
329 set_mode_null (ir_mode *mode, tarval *null)
336 get_mode_fsigned (ir_mode *mode)
338 return mode->fsigned;
343 set_mode_fsigned (ir_mode *mode, unsigned fsigned)
345 mode->fsigned = fsigned;
350 get_mode_ffloat (ir_mode *mode)
357 set_mode_ffloat (ir_mode *mode, unsigned ffloat)
359 mode->ffloat = ffloat;
363 /* Functions to check, whether a modecode is signed, float, int, num, data,
364 datab or dataM. For more exact definitions read the corresponding pages
365 in the firm documentation or the followingenumeration
367 The set of "float" is defined as:
368 ---------------------------------
369 float = {irm_f, irm_d}
371 The set of "int" is defined as:
372 -------------------------------
373 int = {irm_c, irm_C, irm_h, irm_H, irm_i, irm_I, irm_l, irm_L}
375 The set of "num" is defined as:
376 -------------------------------
377 num = {irm_f, irm_d, irm_c, irm_C, irm_h, irm_H,
378 irm_i, irm_I, irm_l, irm_L}
381 The set of "data" is defined as:
382 -------------------------------
383 data = {irm_f, irm_d, irm_c, irm_C, irm_h, irm_H,
384 irm_i, irm_I, irm_l, irm_L, irm_p}
387 The set of "datab" is defined as:
388 ---------------------------------
389 datab = {irm_f, irm_d, irm_c, irm_C, irm_h, irm_H,
390 irm_i, irm_I, irm_l, irm_L, irm_p, irm_b, irm_B}
391 = {data || irm_b || irm_B}
393 The set of "dataM" is defined as:
394 ---------------------------------
395 dataM = {irm_f, irm_d, irm_c, irm_C, irm_h, irm_H, irm_i,
396 irm_I, irm_l, irm_L, irm_p, irm_M}
401 mode_is_signed (ir_mode *mode)
405 fsigned = get_mode_fsigned (mode);
416 mode_is_float (ir_mode *mode)
420 ffloat = get_mode_ffloat (mode);
432 mode_is_int (ir_mode *mode)
436 code = get_mode_modecode (mode);
437 if ((code >= irm_c) && (code <= irm_L)) {
448 mode_is_num (ir_mode *mode)
451 if (mode_is_int (mode) || mode_is_float (mode)) {
461 mode_is_data (ir_mode *mode)
465 code = get_mode_modecode (mode);
466 if (mode_is_num (mode) || code == irm_p) {
476 mode_is_datab (ir_mode *mode)
480 code = get_mode_modecode (mode);
481 if (mode_is_data (mode) || code == irm_b || code == irm_B) {
491 mode_is_dataM (ir_mode *mode)
495 code = get_mode_modecode (mode);
496 if (mode_is_data (mode) || code == irm_M) {