1 /* Copyright (C) 1998 - 2000 by Universitaet Karlsruhe
2 ** All rights reserved.
4 ** Authors: Martin Trapp, Christian Schaefer
14 # include "irmode_t.h"
43 /* allocate all modes. We need to memset them as tarval_vrfy
44 reads fields before they are initialized: It compares to
45 min/max when tarvals for min/max are allocated! */
46 mode_T = (ir_mode *) malloc (sizeof (ir_mode)); memset(mode_T, 0, sizeof(ir_mode));
47 mode_f = (ir_mode *) malloc (sizeof (ir_mode)); memset(mode_f, 0, sizeof(ir_mode));
48 mode_d = (ir_mode *) malloc (sizeof (ir_mode)); memset(mode_d, 0, sizeof(ir_mode));
49 mode_c = (ir_mode *) malloc (sizeof (ir_mode)); memset(mode_c, 0, sizeof(ir_mode));
50 mode_C = (ir_mode *) malloc (sizeof (ir_mode)); memset(mode_C, 0, sizeof(ir_mode));
51 mode_h = (ir_mode *) malloc (sizeof (ir_mode)); memset(mode_h, 0, sizeof(ir_mode));
52 mode_H = (ir_mode *) malloc (sizeof (ir_mode)); memset(mode_H, 0, sizeof(ir_mode));
53 mode_i = (ir_mode *) malloc (sizeof (ir_mode)); memset(mode_i, 0, sizeof(ir_mode));
54 mode_I = (ir_mode *) malloc (sizeof (ir_mode)); memset(mode_I, 0, sizeof(ir_mode));
55 mode_l = (ir_mode *) malloc (sizeof (ir_mode)); memset(mode_l, 0, sizeof(ir_mode));
56 mode_L = (ir_mode *) malloc (sizeof (ir_mode)); memset(mode_L, 0, sizeof(ir_mode));
57 mode_B = (ir_mode *) malloc (sizeof (ir_mode)); memset(mode_B, 0, sizeof(ir_mode));
58 mode_b = (ir_mode *) malloc (sizeof (ir_mode)); memset(mode_b, 0, sizeof(ir_mode));
59 mode_p = (ir_mode *) malloc (sizeof (ir_mode)); memset(mode_p, 0, sizeof(ir_mode));
60 mode_s = (ir_mode *) malloc (sizeof (ir_mode)); memset(mode_s, 0, sizeof(ir_mode));
61 mode_S = (ir_mode *) malloc (sizeof (ir_mode)); memset(mode_S, 0, sizeof(ir_mode));
62 mode_X = (ir_mode *) malloc (sizeof (ir_mode)); memset(mode_X, 0, sizeof(ir_mode));
63 mode_M = (ir_mode *) malloc (sizeof (ir_mode)); memset(mode_M, 0, sizeof(ir_mode));
64 mode_R = (ir_mode *) malloc (sizeof (ir_mode)); memset(mode_R, 0, sizeof(ir_mode));
65 mode_Z = (ir_mode *) malloc (sizeof (ir_mode)); memset(mode_Z, 0, sizeof(ir_mode));
88 /* initialize all modes */
90 mode_T->name = id_from_str ("T", 1);
95 mode_f->name = id_from_str ("f", 1);
102 mode_d->name = id_from_str ("d", 1);
105 mode_d->ld_align = 4;
109 mode_c->name = id_from_str ("c", 1);
112 mode_c->ld_align = 1;
114 mode_c->min = tarval_from_long (mode_l, 0xffffff80);
115 mode_c->max = tarval_from_long (mode_l, 0x0000007f);
116 mode_c->null = tarval_from_long (mode_c, 0);
119 mode_C->name = id_from_str ("C", 1);
122 mode_C->ld_align = 1;
124 mode_C->min = tarval_from_long (mode_L, 0x00000000);
125 mode_C->max = tarval_from_long (mode_L, 0x000000ff);
126 mode_C->null = tarval_from_long (mode_C, 0);
128 /* signed short integer */
129 mode_h->name = id_from_str ("h", 1);
132 mode_h->ld_align = 2;
134 mode_h->min = tarval_from_long (mode_l, 0xffff8000);
135 mode_h->max = tarval_from_long (mode_l, 0x00007fff);
136 mode_h->null = tarval_from_long (mode_h, 0);
138 /* unsigened short integer */
139 mode_H->name = id_from_str ("H", 1);
142 mode_H->ld_align = 2;
144 mode_H->min = tarval_from_long (mode_L, 0x00000000);
145 mode_H->max = tarval_from_long (mode_L, 0x0000ffff);
146 mode_H->null = tarval_from_long (mode_H, 0);
149 mode_i->name = id_from_str ("i", 1);
152 mode_i->ld_align = 4;
154 mode_i->min = tarval_from_long (mode_l, 0x80000000);
155 mode_i->max = tarval_from_long (mode_l, 0x7fffffff);
156 mode_i->null = tarval_from_long (mode_i, 0);
158 /* unsigned integer */
159 mode_I->name = id_from_str ("I", 1);
162 mode_I->ld_align = 4;
164 mode_I->min = tarval_from_long (mode_L, 0x00000000);
165 mode_I->max = tarval_from_long (mode_L, 0xffffffff);
166 mode_I->null = tarval_from_long (mode_I, 0);
168 /* signed long integer */
169 mode_l->name = id_from_str ("l", 1);
172 mode_l->ld_align = 4;
174 mode_l->min = tarval_from_long (mode_l, 0x80000000);
175 mode_l->max = tarval_from_long (mode_l, 0x7fffffff);
176 mode_I->null = tarval_from_long (mode_l, 0);
178 /* unsigned long integer */
179 mode_L->name = id_from_str ("L", 1);
182 mode_L->ld_align = 4;
184 mode_L->min = tarval_from_long (mode_L, 0x00000000);
185 mode_L->max = tarval_from_long (mode_L, 0xffffffff);
186 mode_L->null = tarval_from_long (mode_L, 0);
189 mode_B->name = id_from_str ("B", 1);
194 mode_b->name = id_from_str ("b", 1);
199 mode_p->name = id_from_str ("p", 1);
202 mode_p->ld_align = 4;
204 mode_p->min = tarval_from_long (mode_L, 0x00000000);
205 mode_p->max = tarval_from_long (mode_L, 0xffffffff);
206 mode_p->null = tarval_from_long (mode_p, 0);
208 mode_s->name = id_from_str ("s", 1);
212 mode_S->name = id_from_str ("S", 1);
217 mode_X->name = id_from_str ("X", 1);
222 mode_M->name = id_from_str ("M", 1);
226 mode_R->name = id_from_str ("R", 1);
230 mode_Z->name = id_from_str ("Z", 1);
235 /* Functions for the direct access to all attributes od a ir_mode */
238 get_mode_modecode (ir_mode *mode)
245 set_mode_modecode (ir_mode *mode, modecode code)
252 get_mode_ident (ir_mode *mode)
259 set_mode_ident (ir_mode *mode, ident *name)
266 get_mode_name (ir_mode *mode) {
268 return id_to_str(mode->name);
270 /* void set_mode_name (ir_mode *mode, char *name); */
273 get_mode_size (ir_mode *mode)
279 set_mode_size (ir_mode *mode, int size)
286 get_mode_ld_align (ir_mode *mode)
288 return mode->ld_align;
293 set_mode_ld_align (ir_mode *mode, int ld_align)
295 mode->ld_align = ld_align;
300 get_mode_min (ir_mode *mode)
307 set_mode_min (ir_mode *mode, tarval *min)
314 get_mode_max (ir_mode *mode)
321 set_mode_max (ir_mode *mode, tarval *max)
328 get_mode_null (ir_mode *mode)
335 set_mode_null (ir_mode *mode, tarval *null)
342 get_mode_fsigned (ir_mode *mode)
344 return mode->fsigned;
349 set_mode_fsigned (ir_mode *mode, unsigned fsigned)
351 mode->fsigned = fsigned;
356 get_mode_ffloat (ir_mode *mode)
363 set_mode_ffloat (ir_mode *mode, unsigned ffloat)
365 mode->ffloat = ffloat;
369 /* Functions to check, whether a modecode is signed, float, int, num, data,
370 datab or dataM. For more exact definitions read the corresponding pages
371 in the firm documentation or the followingenumeration
373 The set of "float" is defined as:
374 ---------------------------------
375 float = {irm_f, irm_d}
377 The set of "int" is defined as:
378 -------------------------------
379 int = {irm_c, irm_C, irm_h, irm_H, irm_i, irm_I, irm_l, irm_L}
381 The set of "num" is defined as:
382 -------------------------------
383 num = {irm_f, irm_d, irm_c, irm_C, irm_h, irm_H,
384 irm_i, irm_I, irm_l, irm_L}
387 The set of "data" is defined as:
388 -------------------------------
389 data = {irm_f, irm_d, irm_c, irm_C, irm_h, irm_H,
390 irm_i, irm_I, irm_l, irm_L, irm_p}
393 The set of "datab" is defined as:
394 ---------------------------------
395 datab = {irm_f, irm_d, irm_c, irm_C, irm_h, irm_H,
396 irm_i, irm_I, irm_l, irm_L, irm_p, irm_b, irm_B}
397 = {data || irm_b || irm_B}
399 The set of "dataM" is defined as:
400 ---------------------------------
401 dataM = {irm_f, irm_d, irm_c, irm_C, irm_h, irm_H, irm_i,
402 irm_I, irm_l, irm_L, irm_p, irm_M}
407 mode_is_signed (ir_mode *mode)
411 fsigned = get_mode_fsigned (mode);
422 mode_is_float (ir_mode *mode)
426 ffloat = get_mode_ffloat (mode);
438 mode_is_int (ir_mode *mode)
442 code = get_mode_modecode (mode);
443 if ((code >= irm_c) && (code <= irm_L)) {
454 mode_is_num (ir_mode *mode)
457 if (mode_is_int (mode) || mode_is_float (mode)) {
467 mode_is_data (ir_mode *mode)
471 code = get_mode_modecode (mode);
472 if (mode_is_num (mode) || code == irm_p) {
482 mode_is_datab (ir_mode *mode)
486 code = get_mode_modecode (mode);
487 if (mode_is_data (mode) || code == irm_b || code == irm_B) {
497 mode_is_dataM (ir_mode *mode)
501 code = get_mode_modecode (mode);
502 if (mode_is_data (mode) || code == irm_M) {