cc92ca2021992b7ab77f0bd154003739ec0ca865
[libfirm] / ir / be / ia32 / ia32_nodes_attr.h
1 #ifndef _IA32_NODES_ATTR_H_
2 #define _IA32_NODES_ATTR_H_
3
4 #include "firm_types.h"
5 #include "../bearch.h"
6
7 typedef enum { flavour_Div = 1, flavour_Mod, flavour_DivMod } divmod_flavour_t;
8 typedef enum { pn_EAX, pn_EDX } pn_ia32_Register;
9 typedef enum { asmop_Normal, asmop_Const, asmop_SymConst, asmop_AddrMode } asmop_type_t;
10 typedef enum {
11         am_Reg = 1,          /**<<  (%reg)              */
12         am_OffsReg,          /**<< o(%reg)              */
13         am_RegReg,           /**<<  (%reg, %reg)        */
14         am_RegConst,         /**<<  (    , %reg, const) */
15         am_OffsRegConst,     /**<< o(    , %reg, const) */
16         am_OffsRegReg,       /**<< o(%reg, %reg)        */
17         am_RegRegConst,      /**<<  (%reg, %reg, const) */
18         am_OffsRegRegConst   /**<< o(%reg, %reg, const) */
19 } addrmode_type_t;
20
21
22 typedef struct {
23         asmop_type_t    tp;      /**<< ia32 node type */
24         addrmode_type_t am_tp;   /**<< addr mode type */
25
26         tarval  *am_offs;  /**<< offset for AddrMode */
27         tarval  *am_const; /**<< shift const for AddrMode */
28
29         tarval  *tv;       /**<< tarval for immediate operations */
30         ir_node *old_ir;   /**<< old ir node to avoid duplicating information (symconst in case of asmop_SymConst) */
31
32         divmod_flavour_t dm_flav;   /**<< flavour of a DivMod (flavour_Div/Mod/DivMod) */
33         long             pn_code;   /**<< projnum "types" (e.g. indicate compare operators and argument numbers) */
34         long             n_res;     /**<< number of results */
35         arch_irn_flags_t flags;     /**<< indicating if spillable and/or rematerializeable */
36
37         const arch_register_req_t **in_req;  /**<< register requirements for arguments */
38         const arch_register_req_t **out_req; /**<< register requirements for results */
39
40         const arch_register_t **slots;          /**<< register slots for assigned registers */
41 } asmop_attr;
42
43 #endif /* _IA32_NODES_ATTR_H_ */