1 /* Copyright (C) 1998 - 2000 by Universitaet Karlsruhe
2 ** All rights reserved.
4 ** Authors: Christian Schaefer
6 irmode.h Modes for ir operators.
8 This module specifies the modes that type the firm nodes. See
9 UKA tech report 1999-14 for more information about modes.
12 @@@ This file is at the level of the original fiasco. It needs to be ported
13 to the version of the tech report!!! This will be done with the
14 reimplementation of the tarval module.
24 # define target_bits 8
28 #ifndef _TARVAL_TYPEDEF_
29 #define _TARVAL_TYPEDEF_
30 typedef struct tarval tarval;
33 typedef enum { /* irm is short for `ir mode' */
34 irm_T, /* former irm_N */
35 irm_f, irm_d, /* 1, 2 */
36 irm_c, irm_C, irm_h, irm_H, irm_i, irm_I, irm_l, irm_L, /* 3 .. 10 */
37 irm_B, irm_b, /* 11, 12 */
39 irm_s, irm_S, /* 14, 15 */
40 irm_X, irm_M, irm_R, irm_Z,
42 /* according to tech report 1999-14:
43 irm_BB, irm_X, // basic block, execution
44 irm_F, irm_D, irm_E, // float, double, extended
45 irm_B, irm_Bu, irm_H, irm_Hu, irm_I, irm_Iu, irm_L, irm_Lu,
46 // byte(8), short(16), int(32), long(64)
49 irm_b, // internal boolean
55 typedef struct ir_mode ir_mode;
57 extern ir_mode *mode_T; /* tuple (none) */
58 extern ir_mode *mode_f; /* signed float */
59 extern ir_mode *mode_d; /* signed double */
60 /* extern ir_mode *mode_e; * signed extended */
61 extern ir_mode *mode_c; /* signed byte (former char) */
62 extern ir_mode *mode_C; /* unsigned byte (former char) */
63 extern ir_mode *mode_h; /* signed short integer */
64 extern ir_mode *mode_H; /* unsigened short integer */
65 extern ir_mode *mode_i; /* signed integer */
66 extern ir_mode *mode_I; /* unsigned integer */
67 extern ir_mode *mode_l; /* signed long integer */
68 extern ir_mode *mode_L; /* unsigned long integer */
69 extern ir_mode *mode_B; /* bits */ /* oblivious */
70 /* extern ir_mode *mode_c; * char */
71 extern ir_mode *mode_p; /* pointer */
72 extern ir_mode *mode_b; /* internal boolean */
73 extern ir_mode *mode_s; /* oblivious */
74 extern ir_mode *mode_S; /* oblivious */
75 extern ir_mode *mode_X; /* execution */
76 extern ir_mode *mode_M; /* memory */
77 extern ir_mode *mode_R; /* block */
78 extern ir_mode *mode_Z; /* infinit integers */ /* oblivious */
80 /* An enum for this mode */
81 modecode get_mode_modecode (ir_mode *mode);
82 /* void set_mode_modecode (ir_mode *mode, modecode code); */
84 /* The ident of this mode */
85 ident *get_mode_ident (ir_mode *mode);
86 /* void set_mode_ident (ir_mode *mode, ident *id); */
88 /* The name of this mode */
89 const char *get_mode_name (ir_mode *mode);
90 /* void set_mode_name (ir_mode *mode, char *name); */
92 /* The size of values of the mode in bytes. */
93 int get_mode_size (ir_mode *mode);
94 /* void set_mode_size (ir_mode *mode, int size); */
96 /* The alignment of values of the mode. */
97 int get_mode_ld_align (ir_mode *mode);
98 /* void set_mode_ld_align (ir_mode *mode, int ld_align); */
100 /* The smallest representable value */
101 tarval *get_mode_min (ir_mode *mode);
102 /* void set_mode_min (ir_mode *mode, tarval *min); */
104 /* The biggest representable value */
105 tarval *get_mode_max (ir_mode *mode);
106 /* void set_mode_max (ir_mode *mode, tarval *max); */
108 /* The value Zero represented in this mode */
109 tarval *get_mode_null (ir_mode *mode);
110 /* void set_mode_null (ir_mode *mode, tarval *null); */
112 /* Returns 1 if mode is signed, else 0. */
113 unsigned get_mode_fsigned (ir_mode *mode);
114 /* void set_mode_fsigned (ir_mode *mode, unsigned fsigned); */
116 /* Returns 1 if mode is float, else 0. */
117 unsigned get_mode_ffloat (ir_mode *mode);
118 /* void set_mode_ffloat (ir_mode *mode, unsigned ffloat); */
121 /* Test for a certain class of modes. */
122 int mode_is_signed (ir_mode *mode);
123 int mode_is_float (ir_mode *mode);
124 int mode_is_int (ir_mode *mode);
125 # define is_chilCHIL(m) ((m) <= irm_L && (m) >= irm_c) /* old */
126 int mode_is_num (ir_mode *mode);
127 int mode_is_data (ir_mode *mode);
128 int mode_is_datab (ir_mode *mode);
129 int mode_is_dataM (ir_mode *mode);
131 # endif /* _IRMODE_H_ */