*** empty log message ***
[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 typedef enum { /* irm is short for `ir mode' */
27   irm_T,                        /* former irm_N */
28   irm_f, irm_d,
29   irm_c, irm_C, irm_h, irm_H, irm_i, irm_I, irm_l, irm_L,
30   irm_B, irm_b,
31   irm_p,
32   irm_s, irm_S,
33   irm_X, irm_M, irm_R, irm_Z,
34   irm_max
35   /*  according to tech report 1999-44:
36   irm_BB, irm_X,                 // basic block, execution
37   irm_F, irm_D, irm_E,           // float, double, extended
38   irm_B, irm_Bu, irm_H, irm_Hu, irm_I, irm_Iu, irm_L, irm_Lu,
39                                  // byte, short, int, long
40   irm_C,                         // character
41   irm_P,                         // pointer
42   irm_b,                         // internal boolean
43   irm_M,                         // memory
44   irm_T,                         // tuple
45   irm_max */
46 } modecode;
47
48 typedef struct {
49   modecode code;
50   ident *name;            /* Name of this mode */
51   int    size;            /* size of the mode in Bytes. */
52   int    ld_align;        /* ld means log2 */
53   struct tarval *min;     /* largest value to be represented by this mode */
54   struct tarval *max;     /* smallest value to be represented by this mode */
55   struct tarval *null;    /* Representation of zero in this mode */
56   unsigned fsigned:1;     /* signedness of this mode */
57   unsigned ffloat:1;      /* true if this is a float */
58 } ir_mode;
59
60 extern ir_mode *mode_T; /* tuple (none) */
61 extern ir_mode *mode_f; /* signed float */
62 extern ir_mode *mode_d; /* signed double */
63 /* extern ir_mode *mode_e; * signed extended */
64 extern ir_mode *mode_c; /* signed byte (former char) */
65 extern ir_mode *mode_C; /* unsigned byte (former char) */
66 extern ir_mode *mode_h; /* signed short integer */
67 extern ir_mode *mode_H; /* unsigened short integer */
68 extern ir_mode *mode_i; /* signed integer */
69 extern ir_mode *mode_I; /* unsigned integer */
70 extern ir_mode *mode_l; /* signed long integer */
71 extern ir_mode *mode_L; /* unsigned long integer */
72 extern ir_mode *mode_B; /* bits */             /* oblivious */
73 /* extern ir_mode *mode_c;  * char */
74 extern ir_mode *mode_p; /* pointer */
75 extern ir_mode *mode_b; /* internal boolean */
76 extern ir_mode *mode_s;                        /* oblivious  */
77 extern ir_mode *mode_S;                        /* oblivious */
78 extern ir_mode *mode_X; /* execution */
79 extern ir_mode *mode_M; /* memory */
80 extern ir_mode *mode_R; /* block */
81 extern ir_mode *mode_Z; /* infinit integers */ /* oblivious */
82 extern ir_mode *mode_T; /* tuple (none) */
83
84 void init_mode (void);
85
86 modecode get_modecode_of_mode (ir_mode *mode);
87 /* void set_modecode_of_mode (ir_mode *mode, modecode code); */
88 ident *get_ident_of_mode (ir_mode *mode);
89 ident *get_mode_ident (ir_mode *mode);
90
91 /* void set_ident_of_mode (ir_mode *mode, ident *name); */
92 int get_size_of_mode (ir_mode *mode);
93 /* void set_size_of_mode (ir_mode *mode, int size); */
94 int get_ld_align_of_mode (ir_mode *mode);
95 /* void set_ld_align_of_mode (ir_mode *mode, int ld_align); */
96 struct tarval *get_min_of_mode (ir_mode *mode);
97 /* void set_min_of_mode (ir_mode *mode, struct tarval *min); */
98 struct tarval *get_max_of_mode (ir_mode *mode);
99 /* void set_max_of_mode (ir_mode *mode, struct tarval *max); */
100 struct tarval *get_null_of_mode (ir_mode *mode);
101 /* void set_null_of_mode (ir_mode *mode, struct tarval *null); */
102 unsigned get_fsigned_of_mode (ir_mode *mode);
103 /* void set_fsigned_of_mode (ir_mode *mode, unsigned fsigned); */
104 unsigned get_ffloat_of_mode (ir_mode *mode);
105 /* void set_ffloat_of_mode (ir_mode *mode, unsigned ffloat); */
106
107 int mode_is_signed (ir_mode *mode);
108 int mode_is_float (ir_mode *mode);
109 int mode_is_int (ir_mode *mode);
110 # define is_chilCHIL(m) ((m) <= irm_L && (m) >= irm_c) /* old */
111 int mode_is_num (ir_mode *mode);
112 int mode_is_data (ir_mode *mode);
113 int mode_is_datab (ir_mode *mode);
114 int mode_is_dataM (ir_mode *mode);
115
116 # endif /* _IRMODE_H_ */