1 /* Copyright (C) 1998 - 2000 by Universitaet Karlsruhe
2 ** All rights reserved.
4 ** Authors: Martin Trapp, Christian Schaefer
37 /* allocate all modes. We need to memset them as tarval_vrfy
38 reads fields before they are initialized: It compares to
39 min/max when tarvals for min/max are allocated! */
40 mode_T = (ir_mode *) malloc (sizeof (ir_mode)); memset(mode_T, 0, sizeof(ir_mode));
41 mode_f = (ir_mode *) malloc (sizeof (ir_mode)); memset(mode_f, 0, sizeof(ir_mode));
42 mode_d = (ir_mode *) malloc (sizeof (ir_mode)); memset(mode_d, 0, sizeof(ir_mode));
43 mode_c = (ir_mode *) malloc (sizeof (ir_mode)); memset(mode_c, 0, sizeof(ir_mode));
44 mode_C = (ir_mode *) malloc (sizeof (ir_mode)); memset(mode_C, 0, sizeof(ir_mode));
45 mode_h = (ir_mode *) malloc (sizeof (ir_mode)); memset(mode_h, 0, sizeof(ir_mode));
46 mode_H = (ir_mode *) malloc (sizeof (ir_mode)); memset(mode_H, 0, sizeof(ir_mode));
47 mode_i = (ir_mode *) malloc (sizeof (ir_mode)); memset(mode_i, 0, sizeof(ir_mode));
48 mode_I = (ir_mode *) malloc (sizeof (ir_mode)); memset(mode_I, 0, sizeof(ir_mode));
49 mode_l = (ir_mode *) malloc (sizeof (ir_mode)); memset(mode_l, 0, sizeof(ir_mode));
50 mode_L = (ir_mode *) malloc (sizeof (ir_mode)); memset(mode_L, 0, sizeof(ir_mode));
51 mode_B = (ir_mode *) malloc (sizeof (ir_mode)); memset(mode_B, 0, sizeof(ir_mode));
52 mode_b = (ir_mode *) malloc (sizeof (ir_mode)); memset(mode_b, 0, sizeof(ir_mode));
53 mode_p = (ir_mode *) malloc (sizeof (ir_mode)); memset(mode_p, 0, sizeof(ir_mode));
54 mode_s = (ir_mode *) malloc (sizeof (ir_mode)); memset(mode_s, 0, sizeof(ir_mode));
55 mode_S = (ir_mode *) malloc (sizeof (ir_mode)); memset(mode_S, 0, sizeof(ir_mode));
56 mode_X = (ir_mode *) malloc (sizeof (ir_mode)); memset(mode_X, 0, sizeof(ir_mode));
57 mode_M = (ir_mode *) malloc (sizeof (ir_mode)); memset(mode_M, 0, sizeof(ir_mode));
58 mode_R = (ir_mode *) malloc (sizeof (ir_mode)); memset(mode_R, 0, sizeof(ir_mode));
59 mode_Z = (ir_mode *) malloc (sizeof (ir_mode)); memset(mode_Z, 0, sizeof(ir_mode));
82 /* initialize all modes */
84 mode_T->name = id_from_str ("T", 1);
89 mode_f->name = id_from_str ("f", 1);
94 mode_d->name = id_from_str ("d", 1);
99 mode_c->name = id_from_str ("c", 1);
102 mode_c->ld_align = 0;
104 mode_c->min = tarval_from_long (mode_l, 0xffffff80);
105 mode_c->max = tarval_from_long (mode_l, 0x0000007f);
106 mode_c->null = tarval_from_long (mode_c, 0);
109 mode_C->name = id_from_str ("C", 1);
112 mode_C->ld_align = 0;
114 mode_C->min = tarval_from_long (mode_L, 0x00000000);
115 mode_C->max = tarval_from_long (mode_L, 0x000000ff);
116 mode_C->null = tarval_from_long (mode_C, 0);
118 /* signed short integer */
119 mode_h->name = id_from_str ("h", 1);
122 mode_h->ld_align = 1;
124 mode_h->min = tarval_from_long (mode_l, 0xffff8000);
125 mode_h->max = tarval_from_long (mode_l, 0x00007fff);
126 mode_h->null = tarval_from_long (mode_h, 0);
128 /* unsigened short integer */
129 mode_H->name = id_from_str ("H", 1);
132 mode_H->ld_align = 1;
134 mode_H->min = tarval_from_long (mode_L, 0x00000000);
135 mode_H->max = tarval_from_long (mode_L, 0x0000ffff);
136 mode_H->null = tarval_from_long (mode_H, 0);
139 mode_i->name = id_from_str ("i", 1);
142 mode_i->ld_align = 2;
144 mode_i->min = tarval_from_long (mode_l, 0x80000000);
145 mode_i->max = tarval_from_long (mode_l, 0x7fffffff);
146 mode_i->null = tarval_from_long (mode_i, 0);
148 /* unsigned integer */
149 mode_I->name = id_from_str ("I", 1);
152 mode_I->ld_align = 2;
154 mode_I->min = tarval_from_long (mode_L, 0x00000000);
155 mode_I->max = tarval_from_long (mode_L, 0xffffffff);
156 mode_I->null = tarval_from_long (mode_I, 0);
158 /* signed long integer */
159 mode_l->name = id_from_str ("l", 1);
162 mode_l->ld_align = 2;
164 mode_l->min = tarval_from_long (mode_l, 0x80000000);
165 mode_l->max = tarval_from_long (mode_l, 0x7fffffff);
166 mode_I->null = tarval_from_long (mode_l, 0);
168 /* unsigned long integer */
169 mode_L->name = id_from_str ("L", 1);
172 mode_L->ld_align = 2;
174 mode_L->min = tarval_from_long (mode_L, 0x00000000);
175 mode_L->max = tarval_from_long (mode_L, 0xffffffff);
176 mode_L->null = tarval_from_long (mode_L, 0);
179 mode_B->name = id_from_str ("B", 1);
184 mode_b->name = id_from_str ("b", 1);
189 mode_p->name = id_from_str ("p", 1);
192 mode_p->ld_align = 2;
194 mode_p->min = tarval_from_long (mode_L, 0x00000000);
195 mode_p->max = tarval_from_long (mode_L, 0xffffffff);
196 mode_p->null = tarval_from_long (mode_p, 0);
198 mode_s->name = id_from_str ("s", 1);
202 mode_S->name = id_from_str ("S", 1);
207 mode_X->name = id_from_str ("X", 1);
212 mode_M->name = id_from_str ("M", 1);
216 mode_R->name = id_from_str ("R", 1);
220 mode_Z->name = id_from_str ("Z", 1);
225 /* Functions for the direct access to all attributes od a ir_mode */
228 get_mode_modecode (ir_mode *mode)
235 set_mode_modecode (ir_mode *mode, modecode code)
242 get_mode_ident (ir_mode *mode)
249 set_mode_ident (ir_mode *mode, ident *name)
256 get_mode_name (ir_mode *mode) {
258 return id_to_str(mode->name);
260 /* void set_mode_name (ir_mode *mode, char *name); */
263 get_mode_size (ir_mode *mode)
269 set_mode_size (ir_mode *mode, int size)
276 get_mode_ld_align (ir_mode *mode)
278 return mode->ld_align;
283 set_mode_ld_align (ir_mode *mode, int ld_align)
285 mode->ld_align = ld_align;
290 get_mode_min (ir_mode *mode)
297 set_mode_min (ir_mode *mode, tarval *min)
304 get_mode_max (ir_mode *mode)
311 set_mode_max (ir_mode *mode, tarval *max)
318 get_mode_null (ir_mode *mode)
325 set_mode_null (ir_mode *mode, tarval *null)
332 get_mode_fsigned (ir_mode *mode)
334 return mode->fsigned;
339 set_mode_fsigned (ir_mode *mode, unsigned fsigned)
341 mode->fsigned = fsigned;
346 get_mode_ffloat (ir_mode *mode)
353 set_mode_ffloat (ir_mode *mode, unsigned ffloat)
355 mode->ffloat = ffloat;
359 /* Functions to check, whether a modecode is signed, float, int, num, data,
360 datab or dataM. For more exact definitions read the corresponding pages
361 in the firm documentation or the followingenumeration
363 The set of "float" is defined as:
364 ---------------------------------
365 float = {irm_f, irm_d}
367 The set of "int" is defined as:
368 -------------------------------
369 int = {irm_c, irm_C, irm_h, irm_H, irm_i, irm_I, irm_l, irm_L}
371 The set of "num" is defined as:
372 -------------------------------
373 num = {irm_f, irm_d, irm_c, irm_C, irm_h, irm_H,
374 irm_i, irm_I, irm_l, irm_L}
377 The set of "data" is defined as:
378 -------------------------------
379 data = {irm_f, irm_d, irm_c, irm_C, irm_h, irm_H,
380 irm_i, irm_I, irm_l, irm_L, irm_p}
383 The set of "datab" is defined as:
384 ---------------------------------
385 datab = {irm_f, irm_d, irm_c, irm_C, irm_h, irm_H,
386 irm_i, irm_I, irm_l, irm_L, irm_p, irm_b, irm_B}
387 = {data || irm_b || irm_B}
389 The set of "dataM" is defined as:
390 ---------------------------------
391 dataM = {irm_f, irm_d, irm_c, irm_C, irm_h, irm_H, irm_i,
392 irm_I, irm_l, irm_L, irm_p, irm_M}
397 mode_is_signed (ir_mode *mode)
401 fsigned = get_mode_fsigned (mode);
412 mode_is_float (ir_mode *mode)
416 ffloat = get_mode_ffloat (mode);
428 mode_is_int (ir_mode *mode)
432 code = get_mode_modecode (mode);
433 if ((code >= irm_c) && (code <= irm_L)) {
444 mode_is_num (ir_mode *mode)
447 if (mode_is_int (mode) || mode_is_float (mode)) {
457 mode_is_data (ir_mode *mode)
461 code = get_mode_modecode (mode);
462 if (mode_is_num (mode) || code == irm_p) {
472 mode_is_datab (ir_mode *mode)
476 code = get_mode_modecode (mode);
477 if (mode_is_data (mode) || code == irm_b || code == irm_B) {
487 mode_is_dataM (ir_mode *mode)
491 code = get_mode_modecode (mode);
492 if (mode_is_data (mode) || code == irm_M) {