Initial revision
[libfirm] / ir / ir / irmode.h
1 /* Copyright (C) 1998 - 2000 by Universitaet Karlsruhe
2 ** All rights reserved.
3 **
4 ** Authors: Christian Schaefer
5 **
6 */
7
8 # ifndef _IRMODE_H_
9 # define _IRMODE_H_
10
11 #include "ident.h"
12
13 # define target_bits 8
14
15 #define NUM_MODES 20
16
17 typedef enum { /* irm is short for `ir mode' */
18   irm_T,                        // former irm_N
19   irm_f, irm_d, /* irm_e, */
20   irm_c, irm_C, irm_h, irm_H, irm_i, irm_I, irm_l, irm_L,
21   irm_B, irm_b,
22   irm_p,
23   irm_s, irm_S,
24   irm_X, irm_M, irm_R, irm_Z,
25   irm_max
26   /*  according to tech report 1999-44:
27   irm_BB, irm_X,                 // basic block, execution
28   irm_F, irm_D, irm_E,           // float, double, extended
29   irm_B, irm_Bu, irm_H, irm_Hu, irm_I, irm_Iu, irm_L, irm_Lu,
30                                  // byte, short, int, long
31   irm_C,                         // character
32   irm_P,                         // pointer
33   irm_b,                         // internal boolean
34   irm_M,                         // memory
35   irm_T,                         // tuple
36   irm_max */
37 } modecode;
38
39 typedef struct {
40   modecode code;
41   ident *name;
42   int    size;
43   int    ld_align; /* ld means log2 */
44   struct tarval *min;
45   struct tarval *max;
46   struct tarval *null;
47   unsigned fsigned:1;
48   unsigned ffloat:1;
49 } ir_mode;
50
51 extern ir_mode *mode_T; /* tuple (none) */
52 extern ir_mode *mode_f; /* signed float */
53 extern ir_mode *mode_d; /* signed double */
54 /* extern ir_mode *mode_e; * signed extended */
55 extern ir_mode *mode_c; /* signed byte (former char) */
56 extern ir_mode *mode_C; /* unsigned byte (former char) */
57 extern ir_mode *mode_h; /* signed short integer */
58 extern ir_mode *mode_H; /* unsigened short integer */
59 extern ir_mode *mode_i; /* signed integer */
60 extern ir_mode *mode_I; /* unsigned integer */
61 extern ir_mode *mode_l; /* signed long integer */
62 extern ir_mode *mode_L; /* unsigned long integer */
63 extern ir_mode *mode_B; /* bits */             // oblivious
64 /* extern ir_mode *mode_c;  * char */
65 extern ir_mode *mode_p; /* pointer */
66 extern ir_mode *mode_b; /* internal boolean */
67 extern ir_mode *mode_s;                        // oblivious
68 extern ir_mode *mode_S;                        // oblivious
69 extern ir_mode *mode_X; /* execution */
70 extern ir_mode *mode_M; /* memory */
71 extern ir_mode *mode_R; /* block */
72 extern ir_mode *mode_Z; /* infinit integers */ // oblivious
73 extern ir_mode *mode_T; /* tuple (none) */
74
75 void init_mode (void);
76
77 modecode get_modecode_of_mode (ir_mode *mode);
78 // void set_modecode_of_mode (ir_mode *mode, modecode code);
79 ident *get_ident_of_mode (ir_mode *mode);
80 ident *get_mode_ident (ir_mode *mode);
81
82 // void set_ident_of_mode (ir_mode *mode, ident *name);
83 int get_size_of_mode (ir_mode *mode);
84 // void set_size_of_mode (ir_mode *mode, int size);
85 int get_ld_align_of_mode (ir_mode *mode);
86 // void set_ld_align_of_mode (ir_mode *mode, int ld_align);
87 struct tarval *get_min_of_mode (ir_mode *mode);
88 // void set_min_of_mode (ir_mode *mode, struct tarval *min);
89 struct tarval *get_max_of_mode (ir_mode *mode);
90 // void set_max_of_mode (ir_mode *mode, struct tarval *max);
91 struct tarval *get_null_of_mode (ir_mode *mode);
92 // void set_null_of_mode (ir_mode *mode, struct tarval *null);
93 unsigned get_fsigned_of_mode (ir_mode *mode);
94 // void set_fsigned_of_mode (ir_mode *mode, unsigned fsigned);
95 unsigned get_ffloat_of_mode (ir_mode *mode);
96 // void set_ffloat_of_mode (ir_mode *mode, unsigned ffloat);
97
98 int mode_is_signed (ir_mode *mode);
99 int mode_is_float (ir_mode *mode);
100 int mode_is_int (ir_mode *mode);
101 # define is_chilCHIL(m) ((m) <= irm_L && (m) >= irm_c) // old
102 int mode_is_num (ir_mode *mode);
103 int mode_is_data (ir_mode *mode);
104 int mode_is_datab (ir_mode *mode);
105 int mode_is_dataM (ir_mode *mode);
106
107 # endif /* _IRMODE_H_ */