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);
100 mode_d->name = id_from_str ("d", 1);
103 mode_d->ld_align = 4;
107 mode_c->name = id_from_str ("c", 1);
110 mode_c->ld_align = 0;
112 mode_c->min = tarval_from_long (mode_l, 0xffffff80);
113 mode_c->max = tarval_from_long (mode_l, 0x0000007f);
114 mode_c->null = tarval_from_long (mode_c, 0);
117 mode_C->name = id_from_str ("C", 1);
120 mode_C->ld_align = 0;
122 mode_C->min = tarval_from_long (mode_L, 0x00000000);
123 mode_C->max = tarval_from_long (mode_L, 0x000000ff);
124 mode_C->null = tarval_from_long (mode_C, 0);
126 /* signed short integer */
127 mode_h->name = id_from_str ("h", 1);
130 mode_h->ld_align = 1;
132 mode_h->min = tarval_from_long (mode_l, 0xffff8000);
133 mode_h->max = tarval_from_long (mode_l, 0x00007fff);
134 mode_h->null = tarval_from_long (mode_h, 0);
136 /* unsigened short integer */
137 mode_H->name = id_from_str ("H", 1);
140 mode_H->ld_align = 1;
142 mode_H->min = tarval_from_long (mode_L, 0x00000000);
143 mode_H->max = tarval_from_long (mode_L, 0x0000ffff);
144 mode_H->null = tarval_from_long (mode_H, 0);
147 mode_i->name = id_from_str ("i", 1);
150 mode_i->ld_align = 2;
152 mode_i->min = tarval_from_long (mode_l, 0x80000000);
153 mode_i->max = tarval_from_long (mode_l, 0x7fffffff);
154 mode_i->null = tarval_from_long (mode_i, 0);
156 /* unsigned integer */
157 mode_I->name = id_from_str ("I", 1);
160 mode_I->ld_align = 2;
162 mode_I->min = tarval_from_long (mode_L, 0x00000000);
163 mode_I->max = tarval_from_long (mode_L, 0xffffffff);
164 mode_I->null = tarval_from_long (mode_I, 0);
166 /* signed long integer */
167 mode_l->name = id_from_str ("l", 1);
170 mode_l->ld_align = 2;
172 mode_l->min = tarval_from_long (mode_l, 0x80000000);
173 mode_l->max = tarval_from_long (mode_l, 0x7fffffff);
174 mode_I->null = tarval_from_long (mode_l, 0);
176 /* unsigned long integer */
177 mode_L->name = id_from_str ("L", 1);
180 mode_L->ld_align = 2;
182 mode_L->min = tarval_from_long (mode_L, 0x00000000);
183 mode_L->max = tarval_from_long (mode_L, 0xffffffff);
184 mode_L->null = tarval_from_long (mode_L, 0);
187 mode_B->name = id_from_str ("B", 1);
192 mode_b->name = id_from_str ("b", 1);
197 mode_p->name = id_from_str ("p", 1);
200 mode_p->ld_align = 2;
202 mode_p->min = tarval_from_long (mode_L, 0x00000000);
203 mode_p->max = tarval_from_long (mode_L, 0xffffffff);
204 mode_p->null = tarval_from_long (mode_p, 0);
206 mode_s->name = id_from_str ("s", 1);
210 mode_S->name = id_from_str ("S", 1);
215 mode_X->name = id_from_str ("X", 1);
220 mode_M->name = id_from_str ("M", 1);
224 mode_R->name = id_from_str ("R", 1);
228 mode_Z->name = id_from_str ("Z", 1);
233 /* Functions for the direct access to all attributes od a ir_mode */
236 get_mode_modecode (ir_mode *mode)
243 set_mode_modecode (ir_mode *mode, modecode code)
250 get_mode_ident (ir_mode *mode)
257 set_mode_ident (ir_mode *mode, ident *name)
264 get_mode_name (ir_mode *mode) {
266 return id_to_str(mode->name);
268 /* void set_mode_name (ir_mode *mode, char *name); */
271 get_mode_size (ir_mode *mode)
277 set_mode_size (ir_mode *mode, int size)
284 get_mode_ld_align (ir_mode *mode)
286 return mode->ld_align;
291 set_mode_ld_align (ir_mode *mode, int ld_align)
293 mode->ld_align = ld_align;
298 get_mode_min (ir_mode *mode)
305 set_mode_min (ir_mode *mode, tarval *min)
312 get_mode_max (ir_mode *mode)
319 set_mode_max (ir_mode *mode, tarval *max)
326 get_mode_null (ir_mode *mode)
333 set_mode_null (ir_mode *mode, tarval *null)
340 get_mode_fsigned (ir_mode *mode)
342 return mode->fsigned;
347 set_mode_fsigned (ir_mode *mode, unsigned fsigned)
349 mode->fsigned = fsigned;
354 get_mode_ffloat (ir_mode *mode)
361 set_mode_ffloat (ir_mode *mode, unsigned ffloat)
363 mode->ffloat = ffloat;
367 /* Functions to check, whether a modecode is signed, float, int, num, data,
368 datab or dataM. For more exact definitions read the corresponding pages
369 in the firm documentation or the followingenumeration
371 The set of "float" is defined as:
372 ---------------------------------
373 float = {irm_f, irm_d}
375 The set of "int" is defined as:
376 -------------------------------
377 int = {irm_c, irm_C, irm_h, irm_H, irm_i, irm_I, irm_l, irm_L}
379 The set of "num" is defined as:
380 -------------------------------
381 num = {irm_f, irm_d, irm_c, irm_C, irm_h, irm_H,
382 irm_i, irm_I, irm_l, irm_L}
385 The set of "data" is defined as:
386 -------------------------------
387 data = {irm_f, irm_d, irm_c, irm_C, irm_h, irm_H,
388 irm_i, irm_I, irm_l, irm_L, irm_p}
391 The set of "datab" is defined as:
392 ---------------------------------
393 datab = {irm_f, irm_d, irm_c, irm_C, irm_h, irm_H,
394 irm_i, irm_I, irm_l, irm_L, irm_p, irm_b, irm_B}
395 = {data || irm_b || irm_B}
397 The set of "dataM" is defined as:
398 ---------------------------------
399 dataM = {irm_f, irm_d, irm_c, irm_C, irm_h, irm_H, irm_i,
400 irm_I, irm_l, irm_L, irm_p, irm_M}
405 mode_is_signed (ir_mode *mode)
409 fsigned = get_mode_fsigned (mode);
420 mode_is_float (ir_mode *mode)
424 ffloat = get_mode_ffloat (mode);
436 mode_is_int (ir_mode *mode)
440 code = get_mode_modecode (mode);
441 if ((code >= irm_c) && (code <= irm_L)) {
452 mode_is_num (ir_mode *mode)
455 if (mode_is_int (mode) || mode_is_float (mode)) {
465 mode_is_data (ir_mode *mode)
469 code = get_mode_modecode (mode);
470 if (mode_is_num (mode) || code == irm_p) {
480 mode_is_datab (ir_mode *mode)
484 code = get_mode_modecode (mode);
485 if (mode_is_data (mode) || code == irm_b || code == irm_B) {
495 mode_is_dataM (ir_mode *mode)
499 code = get_mode_modecode (mode);
500 if (mode_is_data (mode) || code == irm_M) {