irmode: remove support for vector mode
[libfirm] / ir / ir / irmode_t.h
1 /*
2  * Copyright (C) 1995-2008 University of Karlsruhe.  All right reserved.
3  *
4  * This file is part of libFirm.
5  *
6  * This file may be distributed and/or modified under the terms of the
7  * GNU General Public License version 2 as published by the Free Software
8  * Foundation and appearing in the file LICENSE.GPL included in the
9  * packaging of this file.
10  *
11  * Licensees holding valid libFirm Professional Edition licenses may use
12  * this file in accordance with the libFirm Commercial License.
13  * Agreement provided with the Software.
14  *
15  * This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
16  * WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR
17  * PURPOSE.
18  */
19
20 /**
21  * @file
22  * @brief   Data modes of operations -- private header.
23  * @author  Martin Trapp, Christian Schaefer, Goetz Lindenmaier, Mathias Heil,
24  *          Michael Beck
25  * @version $Id$
26  */
27 #ifndef FIRM_IR_IRMODE_T_H
28 #define FIRM_IR_IRMODE_T_H
29
30 #include <assert.h>
31 #include "irtypes.h"
32 #include "irmode.h"
33
34 /* ------------------------------- *
35  * inline functions                *
36  * ------------------------------- */
37 static inline ir_mode *_get_modeP_code(void) { return mode_P_code; }
38
39 static inline ir_mode *_get_modeP_data(void) { return mode_P_data; }
40
41 static inline ident *_get_mode_ident(const ir_mode *mode) { return mode->name; }
42
43 static inline ir_mode_sort _get_mode_sort(const ir_mode *mode) { return mode->sort; }
44
45 static inline unsigned _get_mode_size_bits(const ir_mode *mode) { return mode->size; }
46
47 static inline unsigned _get_mode_size_bytes(const ir_mode *mode)
48 {
49         unsigned size = _get_mode_size_bits(mode);
50         if ((size & 7) != 0) return (unsigned) -1;
51         return size >> 3;
52 }
53
54 static inline int _get_mode_sign(const ir_mode *mode) { return mode->sign; }
55
56 static inline ir_mode_arithmetic _get_mode_arithmetic(const ir_mode *mode) { return mode->arithmetic; }
57
58 static inline unsigned int _get_mode_modulo_shift(const ir_mode *mode) { return mode->modulo_shift; }
59
60 static inline void * _get_mode_link(const ir_mode *mode) { return mode->link; }
61
62 static inline void _set_mode_link(ir_mode *mode, void *l) { mode->link = l; }
63
64 /* Functions to check, whether a mode is signed, float, int, num, data,
65    datab or dataM. For more exact definitions read the corresponding pages
66    in the firm documentation or the following enumeration
67
68    The set of "float" is defined as:
69    ---------------------------------
70    float = {irm_F, irm_D, irm_E}
71
72    The set of "int" is defined as:
73    -------------------------------
74    int   = {irm_Bs, irm_Bu, irm_Hs, irm_Hu, irm_Is, irm_Iu, irm_Ls, irm_Lu}
75
76    The set of "num" is defined as:
77    -------------------------------
78    num   = {irm_F, irm_D, irm_E, irm_Bs, irm_Bu, irm_Hs, irm_Hu,
79             irm_Is, irm_Iu, irm_Ls, irm_Lu}
80             = {float || int}
81
82    The set of "data" is defined as:
83    -------------------------------
84    data  = {irm_F, irm_D, irm_E irm_Bs, irm_Bu, irm_Hs, irm_Hu,
85             irm_Is, irm_Iu, irm_Ls, irm_Lu, irm_C, irm_U, irm_P}
86             = {num || irm_C || irm_U || irm_P}
87
88    The set of "datab" is defined as:
89    ---------------------------------
90    datab = {irm_F, irm_D, irm_E, irm_Bs, irm_Bu, irm_Hs, irm_Hu,
91             irm_Is, irm_Iu, irm_Ls, irm_Lu, irm_C, irm_U, irm_P, irm_b}
92             = {data || irm_b }
93
94    The set of "dataM" is defined as:
95    ---------------------------------
96    dataM = {irm_F, irm_D, irm_E, irm_Bs, irm_Bu, irm_Hs, irm_Hu,
97             irm_Is, irm_Iu, irm_Ls, irm_Lu, irm_C, irm_U, irm_P, irm_M}
98             = {data || irm_M}
99 */
100
101 static inline int _mode_is_signed(const ir_mode *mode)
102 {
103         return mode->sign;
104 }
105
106 static inline int _mode_is_float(const ir_mode *mode)
107 {
108         return (_get_mode_sort(mode) == irms_float_number);
109 }
110
111 static inline int _mode_is_int(const ir_mode *mode)
112 {
113         return (_get_mode_sort(mode) == irms_int_number);
114 }
115
116 static inline int _mode_is_reference(const ir_mode *mode)
117 {
118         return (_get_mode_sort(mode) == irms_reference);
119 }
120
121 static inline int _mode_is_num(const ir_mode *mode)
122 {
123         return (_get_mode_sort(mode) & irmsh_is_num);
124 }
125
126 static inline int _mode_is_data(const ir_mode *mode)
127 {
128         return (_get_mode_sort(mode) & irmsh_is_data);
129 }
130
131 static inline int _mode_is_datab(const ir_mode *mode)
132 {
133         return (_get_mode_sort(mode) & irmsh_is_datab);
134 }
135
136 static inline int _mode_is_dataM(const ir_mode *mode)
137 {
138         return (_get_mode_sort(mode) & irmsh_is_dataM);
139 }
140
141 static inline ir_type *get_type_for_mode_(const ir_mode *mode)
142 {
143         return mode->type;
144 }
145
146 /** mode module initialization, call once before use of any other function **/
147 void init_mode(void);
148
149 /** mode module finalization. frees all memory.  */
150 void finish_mode(void);
151
152 #define get_modeP_code()               _get_modeP_code()
153 #define get_modeP_data()               _get_modeP_data()
154 #define get_mode_ident(mode)           _get_mode_ident(mode)
155 #define get_mode_sort(mode)            _get_mode_sort(mode)
156 #define get_mode_size_bits(mode)       _get_mode_size_bits(mode)
157 #define get_mode_size_bytes(mode)      _get_mode_size_bytes(mode)
158 #define get_mode_sign(mode)            _get_mode_sign(mode)
159 #define get_mode_arithmetic(mode)      _get_mode_arithmetic(mode)
160 #define get_mode_modulo_shift(mode)    _get_mode_modulo_shift(mode)
161 #define get_mode_link(mode)            _get_mode_link(mode)
162 #define set_mode_link(mode, l)         _set_mode_link(mode, l)
163 #define mode_is_signed(mode)           _mode_is_signed(mode)
164 #define mode_is_float(mode)            _mode_is_float(mode)
165 #define mode_is_int(mode)              _mode_is_int(mode)
166 #define mode_is_reference(mode)        _mode_is_reference(mode)
167 #define mode_is_num(mode)              _mode_is_num(mode)
168 #define mode_is_data(mode)             _mode_is_data(mode)
169 #define mode_is_datab(mode)            _mode_is_datab(mode)
170 #define mode_is_dataM(mode)            _mode_is_dataM(mode)
171 #define get_type_for_mode(mode)        get_type_for_mode_(mode)
172
173 #endif