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