1 /* Copyright (C) 1998 - 2000 by Universitaet Karlsruhe
2 ** All rights reserved.
4 ** Authors: Martin Trapp, Christian Schaefer
14 # include "irmode_t.h"
44 /* allocate all modes. We need to memset them as tarval_vrfy
45 reads fields before they are initialized: It compares to
46 min/max when tarvals for min/max are allocated! */
47 mode_T = (ir_mode *) malloc (sizeof (ir_mode)); memset(mode_T, 0, sizeof(ir_mode));
48 mode_f = (ir_mode *) malloc (sizeof (ir_mode)); memset(mode_f, 0, sizeof(ir_mode));
49 mode_d = (ir_mode *) malloc (sizeof (ir_mode)); memset(mode_d, 0, sizeof(ir_mode));
50 mode_c = (ir_mode *) malloc (sizeof (ir_mode)); memset(mode_c, 0, sizeof(ir_mode));
51 mode_C = (ir_mode *) malloc (sizeof (ir_mode)); memset(mode_C, 0, sizeof(ir_mode));
52 mode_h = (ir_mode *) malloc (sizeof (ir_mode)); memset(mode_h, 0, sizeof(ir_mode));
53 mode_H = (ir_mode *) malloc (sizeof (ir_mode)); memset(mode_H, 0, sizeof(ir_mode));
54 mode_i = (ir_mode *) malloc (sizeof (ir_mode)); memset(mode_i, 0, sizeof(ir_mode));
55 mode_I = (ir_mode *) malloc (sizeof (ir_mode)); memset(mode_I, 0, sizeof(ir_mode));
56 mode_l = (ir_mode *) malloc (sizeof (ir_mode)); memset(mode_l, 0, sizeof(ir_mode));
57 mode_L = (ir_mode *) malloc (sizeof (ir_mode)); memset(mode_L, 0, sizeof(ir_mode));
58 mode_B = (ir_mode *) malloc (sizeof (ir_mode)); memset(mode_B, 0, sizeof(ir_mode));
59 mode_b = (ir_mode *) malloc (sizeof (ir_mode)); memset(mode_b, 0, sizeof(ir_mode));
60 mode_p = (ir_mode *) malloc (sizeof (ir_mode)); memset(mode_p, 0, sizeof(ir_mode));
61 mode_s = (ir_mode *) malloc (sizeof (ir_mode)); memset(mode_s, 0, sizeof(ir_mode));
62 mode_S = (ir_mode *) malloc (sizeof (ir_mode)); memset(mode_S, 0, sizeof(ir_mode));
63 mode_X = (ir_mode *) malloc (sizeof (ir_mode)); memset(mode_X, 0, sizeof(ir_mode));
64 mode_M = (ir_mode *) malloc (sizeof (ir_mode)); memset(mode_M, 0, sizeof(ir_mode));
65 mode_R = (ir_mode *) malloc (sizeof (ir_mode)); memset(mode_R, 0, sizeof(ir_mode));
66 mode_Z = (ir_mode *) malloc (sizeof (ir_mode)); memset(mode_Z, 0, sizeof(ir_mode));
89 /* initialize all modes */
91 mode_T->name = id_from_str ("T", 1);
96 mode_f->name = id_from_str ("f", 1);
103 mode_d->name = id_from_str ("d", 1);
106 mode_d->ld_align = 4;
110 mode_c->name = id_from_str ("c", 1);
113 mode_c->ld_align = 1;
115 mode_c->min = tarval_from_long (mode_l, 0xffffff80);
116 mode_c->max = tarval_from_long (mode_l, 0x0000007f);
117 mode_c->null = tarval_from_long (mode_c, 0);
120 mode_C->name = id_from_str ("C", 1);
123 mode_C->ld_align = 1;
125 mode_C->min = tarval_from_long (mode_L, 0x00000000);
126 mode_C->max = tarval_from_long (mode_L, 0x000000ff);
127 mode_C->null = tarval_from_long (mode_C, 0);
129 /* signed short integer */
130 mode_h->name = id_from_str ("h", 1);
133 mode_h->ld_align = 2;
135 mode_h->min = tarval_from_long (mode_l, 0xffff8000);
136 mode_h->max = tarval_from_long (mode_l, 0x00007fff);
137 mode_h->null = tarval_from_long (mode_h, 0);
139 /* unsigened short integer */
140 mode_H->name = id_from_str ("H", 1);
143 mode_H->ld_align = 2;
145 mode_H->min = tarval_from_long (mode_L, 0x00000000);
146 mode_H->max = tarval_from_long (mode_L, 0x0000ffff);
147 mode_H->null = tarval_from_long (mode_H, 0);
150 mode_i->name = id_from_str ("i", 1);
153 mode_i->ld_align = 4;
155 mode_i->min = tarval_from_long (mode_l, 0x80000000);
156 mode_i->max = tarval_from_long (mode_l, 0x7fffffff);
157 mode_i->null = tarval_from_long (mode_i, 0);
159 /* unsigned integer */
160 mode_I->name = id_from_str ("I", 1);
163 mode_I->ld_align = 4;
165 mode_I->min = tarval_from_long (mode_L, 0x00000000);
166 mode_I->max = tarval_from_long (mode_L, 0xffffffff);
167 mode_I->null = tarval_from_long (mode_I, 0);
169 /* signed long integer */
170 mode_l->name = id_from_str ("l", 1);
173 mode_l->ld_align = 4;
175 mode_l->min = tarval_from_long (mode_l, 0x80000000);
176 mode_l->max = tarval_from_long (mode_l, 0x7fffffff);
177 mode_I->null = tarval_from_long (mode_l, 0);
179 /* unsigned long integer */
180 mode_L->name = id_from_str ("L", 1);
183 mode_L->ld_align = 4;
185 mode_L->min = tarval_from_long (mode_L, 0x00000000);
186 mode_L->max = tarval_from_long (mode_L, 0xffffffff);
187 mode_L->null = tarval_from_long (mode_L, 0);
190 mode_B->name = id_from_str ("B", 1);
195 mode_b->name = id_from_str ("b", 1);
200 mode_p->name = id_from_str ("p", 1);
203 mode_p->ld_align = 4;
205 mode_p->min = tarval_from_long (mode_L, 0x00000000);
206 mode_p->max = tarval_from_long (mode_L, 0xffffffff);
207 mode_p->null = tarval_from_long (mode_p, 0);
209 mode_s->name = id_from_str ("s", 1);
213 mode_S->name = id_from_str ("S", 1);
218 mode_X->name = id_from_str ("X", 1);
223 mode_M->name = id_from_str ("M", 1);
227 mode_R->name = id_from_str ("R", 1);
231 mode_Z->name = id_from_str ("Z", 1);
236 /* Functions for the direct access to all attributes od a ir_mode */
239 get_mode_modecode (ir_mode *mode)
246 set_mode_modecode (ir_mode *mode, modecode code)
253 get_mode_ident (ir_mode *mode)
260 set_mode_ident (ir_mode *mode, ident *name)
267 get_mode_name (ir_mode *mode) {
269 return id_to_str(mode->name);
271 /* void set_mode_name (ir_mode *mode, char *name); */
274 get_mode_size (ir_mode *mode)
280 set_mode_size (ir_mode *mode, int size)
287 get_mode_ld_align (ir_mode *mode)
289 return mode->ld_align;
294 set_mode_ld_align (ir_mode *mode, int ld_align)
296 mode->ld_align = ld_align;
301 get_mode_min (ir_mode *mode)
308 set_mode_min (ir_mode *mode, tarval *min)
315 get_mode_max (ir_mode *mode)
322 set_mode_max (ir_mode *mode, tarval *max)
329 get_mode_null (ir_mode *mode)
336 set_mode_null (ir_mode *mode, tarval *null)
343 get_mode_fsigned (ir_mode *mode)
345 return mode->fsigned;
350 set_mode_fsigned (ir_mode *mode, unsigned fsigned)
352 mode->fsigned = fsigned;
357 get_mode_ffloat (ir_mode *mode)
364 set_mode_ffloat (ir_mode *mode, unsigned ffloat)
366 mode->ffloat = ffloat;
370 /* Functions to check, whether a modecode is signed, float, int, num, data,
371 datab or dataM. For more exact definitions read the corresponding pages
372 in the firm documentation or the followingenumeration
374 The set of "float" is defined as:
375 ---------------------------------
376 float = {irm_f, irm_d}
378 The set of "int" is defined as:
379 -------------------------------
380 int = {irm_c, irm_C, irm_h, irm_H, irm_i, irm_I, irm_l, irm_L}
382 The set of "num" is defined as:
383 -------------------------------
384 num = {irm_f, irm_d, irm_c, irm_C, irm_h, irm_H,
385 irm_i, irm_I, irm_l, irm_L}
388 The set of "data" is defined as:
389 -------------------------------
390 data = {irm_f, irm_d, irm_c, irm_C, irm_h, irm_H,
391 irm_i, irm_I, irm_l, irm_L, irm_p}
394 The set of "datab" is defined as:
395 ---------------------------------
396 datab = {irm_f, irm_d, irm_c, irm_C, irm_h, irm_H,
397 irm_i, irm_I, irm_l, irm_L, irm_p, irm_b, irm_B}
398 = {data || irm_b || irm_B}
400 The set of "dataM" is defined as:
401 ---------------------------------
402 dataM = {irm_f, irm_d, irm_c, irm_C, irm_h, irm_H, irm_i,
403 irm_I, irm_l, irm_L, irm_p, irm_M}
408 mode_is_signed (ir_mode *mode)
412 fsigned = get_mode_fsigned (mode);
423 mode_is_float (ir_mode *mode)
427 ffloat = get_mode_ffloat (mode);
439 mode_is_int (ir_mode *mode)
443 code = get_mode_modecode (mode);
444 if ((code >= irm_c) && (code <= irm_L)) {
455 mode_is_num (ir_mode *mode)
458 if (mode_is_int (mode) || mode_is_float (mode)) {
468 mode_is_data (ir_mode *mode)
472 code = get_mode_modecode (mode);
473 if (mode_is_num (mode) || code == irm_p) {
483 mode_is_datab (ir_mode *mode)
487 code = get_mode_modecode (mode);
488 if (mode_is_data (mode) || code == irm_b || code == irm_B) {
498 mode_is_dataM (ir_mode *mode)
502 code = get_mode_modecode (mode);
503 if (mode_is_data (mode) || code == irm_M) {