fixed call generation
[libfirm] / ir / be / ia32 / ia32_new_nodes.h
1 #ifndef _IA32_NEW_NODES_H_
2 #define _IA32_NEW_NODES_H_
3
4 /**
5  * Function prototypes for the assembler ir node constructors.
6  * @author Christian Wuerdig
7  * $Id$
8  */
9
10 #include "ia32_nodes_attr.h"
11
12 /**
13  * Returns the name of a firm symconst.
14  */
15 const char *get_sc_name(ir_node *symc);
16
17
18
19 /***************************************************************************************************
20  *        _   _                   _       __        _                    _   _               _
21  *       | | | |                 | |     / /       | |                  | | | |             | |
22  *   __ _| |_| |_ _ __   ___  ___| |_   / /_ _  ___| |_   _ __ ___   ___| |_| |__   ___   __| |___
23  *  / _` | __| __| '__| / __|/ _ \ __| / / _` |/ _ \ __| | '_ ` _ \ / _ \ __| '_ \ / _ \ / _` / __|
24  * | (_| | |_| |_| |    \__ \  __/ |_ / / (_| |  __/ |_  | | | | | |  __/ |_| | | | (_) | (_| \__ \
25  *  \__,_|\__|\__|_|    |___/\___|\__/_/ \__, |\___|\__| |_| |_| |_|\___|\__|_| |_|\___/ \__,_|___/
26  *                                        __/ |
27  *                                       |___/
28  ***************************************************************************************************/
29
30 /**
31  * Returns the attributes of an ia32 node.
32  */
33 asmop_attr *get_ia32_attr(const ir_node *node);
34
35 /**
36  * Gets the type of an ia32 node.
37  */
38 asmop_type_t get_ia32_op_type(const ir_node *node);
39
40 /**
41  * Sets the type of an ia32 node.
42  */
43 void set_ia32_op_type(const ir_node *node, asmop_type_t tp);
44
45 /**
46  * Gets the addr mode type of an ia32 node
47  */
48 addrmode_type_t get_ia32_am_type(const ir_node *node);
49
50 /**
51  * Sets the addr mode type of an ia32 node
52  */
53 void set_ia32_am_type(const ir_node *node, addrmode_type_t am_tp);
54
55 /**
56  * Gets the addr mode offset.
57  */
58 tarval *get_ia32_am_offs(const ir_node *node);
59
60 /**
61  * Sets the offset for addr mode.
62  */
63 void set_ia32_am_offs(ir_node *node, tarval *am_offs);
64
65 /**
66  * Gets the addr mode const.
67  */
68 tarval *get_ia32_am_const(const ir_node *node);
69
70 /**
71  * Sets the const for addr mode.
72  */
73 void set_ia32_am_const(ir_node *node, tarval *am_const);
74
75 /**
76  * Return the tarval of an immediate operation or NULL in case of SymConst
77  */
78 tarval *get_ia32_Immop_tarval(const ir_node *node);
79
80 /**
81  * Sets the attributes of an immediate operation to the specified tarval
82  */
83 void set_ia32_Immop_tarval(ir_node *node, tarval *tv);
84
85 /**
86  * Return the old_ir attribute.
87  */
88 ir_node *get_ia32_old_ir(const ir_node *node);
89
90 /**
91  * Sets the old_ir attribute.
92  */
93 void set_ia32_old_ir(ir_node *node, ir_node *old_ir);
94
95 /**
96  * Returns the argument register requirements of an ia32 node.
97  */
98 const ia32_register_req_t **get_ia32_in_req_all(const ir_node *node);
99
100 /**
101  * Returns the result register requirements of an ia32 node.
102  */
103 const ia32_register_req_t **get_ia32_out_req_all(const ir_node *node);
104
105 /**
106  * Returns the argument register requirements of an ia32 node.
107  */
108 const ia32_register_req_t *get_ia32_in_req(const ir_node *node, int pos);
109
110 /**
111  * Returns the result register requirements of an ia32 node.
112  */
113 const ia32_register_req_t *get_ia32_out_req(const ir_node *node, int pos);
114
115 /**
116  * Sets the OUT register requirements at position pos.
117  */
118 void set_ia32_req_out(ir_node *node, const ia32_register_req_t *req, int pos);
119
120 /**
121  * Sets the IN register requirements at position pos.
122  */
123 void set_ia32_req_in(ir_node *node, const ia32_register_req_t *req, int pos);
124
125 /**
126  * Returns the register flag of an ia32 node.
127  */
128 arch_irn_flags_t get_ia32_flags(const ir_node *node);
129
130 /**
131  * Sets the register flag of an ia32 node.
132  */
133 void set_ia32_flags(const ir_node *node, arch_irn_flags_t flags);
134
135 /**
136  * Returns the result register slots of an ia32 node.
137  */
138 const arch_register_t **get_ia32_slots(const ir_node *node);
139
140 /**
141  * Returns the name of the OUT register at position pos.
142  */
143 const char *get_ia32_out_reg_name(const ir_node *node, int pos);
144
145 /**
146  * Returns the index of the OUT register at position pos within its register class.
147  */
148 int get_ia32_out_regnr(const ir_node *node, int pos);
149
150 /**
151  * Returns the OUT register at position pos.
152  */
153 const arch_register_t *get_ia32_out_reg(const ir_node *node, int pos);
154
155 /**
156  * Sets the number of results.
157  */
158 void set_ia32_n_res(ir_node *node, int n_res);
159
160 /**
161  * Returns the number of results.
162  */
163 int get_ia32_n_res(const ir_node *node);
164
165 /**
166  * Returns the flavour of an ia32 node,
167  */
168 op_flavour_t get_ia32_flavour(const ir_node *node);
169
170 /**
171  * Sets the flavour of an ia32 node to flavour_Div/Mod/DivMod/Mul/Mulh.
172  */
173 void set_ia32_flavour(ir_node *node, op_flavour_t op_flav);
174
175 /**
176  * Returns the projnum code.
177  */
178 long get_ia32_pncode(const ir_node *node);
179
180 /**
181  * Sets the projnum code
182  */
183 void set_ia32_pncode(ir_node *node, long code);
184
185
186
187 /******************************************************************************************************
188  *                      _       _         _   _           __                  _   _
189  *                     (_)     | |       | | | |         / _|                | | (_)
190  *  ___ _ __   ___  ___ _  __ _| |   __ _| |_| |_ _ __  | |_ _   _ _ __   ___| |_ _  ___  _ __    ___
191  * / __| '_ \ / _ \/ __| |/ _` | |  / _` | __| __| '__| |  _| | | | '_ \ / __| __| |/ _ \| '_ \  / __|
192  * \__ \ |_) |  __/ (__| | (_| | | | (_| | |_| |_| |    | | | |_| | | | | (__| |_| | (_) | | | | \__ \
193  * |___/ .__/ \___|\___|_|\__,_|_|  \__,_|\__|\__|_|    |_|  \__,_|_| |_|\___|\__|_|\___/|_| |_| |___/
194  *     | |
195  *     |_|
196  ******************************************************************************************************/
197
198 /**
199  * Gets the type of an ia32_Const.
200  */
201 unsigned get_ia32_Const_type(ir_node *node);
202
203 /**
204  * Sets the type of an ia32_Const.
205  */
206 void set_ia32_Const_type(ir_node *node, int type);
207
208 /**
209  * Copy the attributes from an ia32_Const to an Immop (Add_i, Sub_i, ...) node
210  */
211 void set_ia32_Immop_attr(ir_node *node, ir_node *cnst);
212
213 /**
214  * Copy the attributes from a Const to an ia32_Const
215  */
216 void set_ia32_Const_attr(ir_node *ia32_cnst, ir_node *cnst);
217
218 /**
219  * Sets the AddrMode attribute
220  */
221 void set_ia32_AddrMode(ir_node *node);
222
223 /**
224  * Returns whether or not the node is an AddrMode node.
225  */
226 int is_ia32_AddrMode(ir_node *node);
227
228 /**
229  * Checks whether or not an ir_node is an ia32 node
230  */
231 int is_ia32_irn(const ir_node *node);
232
233 /* Include the generated headers */
234 #include "gen_ia32_new_nodes.h"
235
236 #endif /* _IA32_NEW_NODES_H_ */