The big committ:
[libfirm] / ir / be / mips / mips_new_nodes.h
1 #ifndef _mips_NEW_NODES_H_
2 #define _mips_NEW_NODES_H_
3
4 /**
5  * Function prototypes for the assembler ir node constructors.
6  * $Id$
7  */
8
9 #include "mips_nodes_attr.h"
10
11 /***************************************************************************************************
12  *        _   _                   _       __        _                    _   _               _
13  *       | | | |                 | |     / /       | |                  | | | |             | |
14  *   __ _| |_| |_ _ __   ___  ___| |_   / /_ _  ___| |_   _ __ ___   ___| |_| |__   ___   __| |___
15  *  / _` | __| __| '__| / __|/ _ \ __| / / _` |/ _ \ __| | '_ ` _ \ / _ \ __| '_ \ / _ \ / _` / __|
16  * | (_| | |_| |_| |    \__ \  __/ |_ / / (_| |  __/ |_  | | | | | |  __/ |_| | | | (_) | (_| \__ \
17  *  \__,_|\__|\__|_|    |___/\___|\__/_/ \__, |\___|\__| |_| |_| |_|\___|\__|_| |_|\___/ \__,_|___/
18  *                                        __/ |
19  *                                       |___/
20  ***************************************************************************************************/
21
22 /**
23  * Returns the attributes of an mips node.
24  */
25 mips_attr_t *get_mips_attr(const ir_node *node);
26
27 /**
28  * Returns the argument register requirements of an mips node.
29  */
30 const arch_register_req_t **get_mips_in_req_all(const ir_node *node);
31
32 /**
33  * Returns the result register requirements of an mips node.
34  */
35 const arch_register_req_t **get_mips_out_req_all(const ir_node *node);
36
37 /**
38  * Returns the argument register requirements of an mips node.
39  */
40 const arch_register_req_t *get_mips_in_req(const ir_node *node, int pos);
41
42 /**
43  * Returns the result register requirements of an mips node.
44  */
45 const arch_register_req_t *get_mips_out_req(const ir_node *node, int pos);
46
47 /**
48  * Sets the OUT register requirements at position pos.
49  */
50 void set_mips_req_out(ir_node *node, const arch_register_req_t *req, int pos);
51
52 /**
53  * Sets the IN register requirements at position pos.
54  */
55 void set_mips_req_in(ir_node *node, const arch_register_req_t *req, int pos);
56
57 /**
58  * Returns the register flag of an mips node.
59  */
60 arch_irn_flags_t get_mips_flags(const ir_node *node);
61
62 /**
63  * Sets the register flag of an mips node.
64  */
65 void set_mips_flags(const ir_node *node, arch_irn_flags_t flags);
66
67 /**
68  * Returns the result register slots of an mips node.
69  */
70 const arch_register_t **get_mips_slots(const ir_node *node);
71
72 /**
73  * Returns the name of the OUT register at position pos.
74  */
75 const char *get_mips_out_reg_name(const ir_node *node, int pos);
76
77 /**
78  * Returns the index of the OUT register at position pos within its register class.
79  */
80 int get_mips_out_regnr(const ir_node *node, int pos);
81
82 /**
83  * Returns the OUT register at position pos.
84  */
85 const arch_register_t *get_mips_out_reg(const ir_node *node, int pos);
86
87 /**
88  * Sets the number of results.
89  */
90 void set_mips_n_res(ir_node *node, int n_res);
91
92 /**
93  * Returns the number of results.
94  */
95 int get_mips_n_res(const ir_node *node);
96
97
98 /**
99  * Initializes the nodes attributes.
100  */
101 void init_mips_attributes(ir_node *node, arch_irn_flags_t flags, const arch_register_req_t **in_reqs,
102         const arch_register_req_t **out_reqs, const be_execution_unit_t ***execution_units, int n_res, unsigned latency);
103
104 /**
105  * Initialize transform ops for the mips opcodes
106  */
107 void mips_init_opcode_transforms(void);
108
109
110 /* Include the generated headers */
111 #include "gen_mips_new_nodes.h"
112
113 #endif /* _mips_NEW_NODES_H_ */