ia32_nodes_attr.h 1.77 KB
Newer Older
1
2
3
4
5
6
#ifndef _IA32_NODES_ATTR_H_
#define _IA32_NODES_ATTR_H_

#include "firm_types.h"
#include "../bearch.h"

7
typedef enum { flavour_Div = 1, flavour_Mod, flavour_DivMod } divmod_flavour_t;
8
typedef enum { pn_EAX, pn_EDX } pn_ia32_Register;
9
10
11
12
13
14
15
16
17
18
19
typedef enum { asmop_Normal, asmop_Const, asmop_SymConst, asmop_AddrMode } asmop_type_t;
typedef	enum {
	am_Reg = 1,          /**<<  (%reg)              */
	am_OffsReg,          /**<< o(%reg)              */
	am_RegReg,           /**<<  (%reg, %reg)        */
	am_RegConst,         /**<<  (    , %reg, const) */
	am_OffsRegConst,     /**<< o(    , %reg, const) */
	am_OffsRegReg,       /**<< o(%reg, %reg)        */
	am_RegRegConst,      /**<<  (%reg, %reg, const) */
	am_OffsRegRegConst   /**<< o(%reg, %reg, const) */
} addrmode_type_t;
20
21


22
23
24
typedef struct {
	asmop_type_t    tp;      /**<< ia32 node type */
	addrmode_type_t am_tp;   /**<< addr mode type */
25

26
27
	tarval  *am_offs;  /**<< offset for AddrMode */
	tarval  *am_const; /**<< shift const for AddrMode */
Christian Würdig's avatar
Christian Würdig committed
28

29
30
	tarval  *tv;       /**<< tarval for immediate operations */
	ir_node *old_ir;   /**<< old ir node to avoid duplicating information (symconst in case of asmop_SymConst) */
31

32
33
34
35
	divmod_flavour_t dm_flav;   /**<< flavour of a DivMod (flavour_Div/Mod/DivMod) */
	long             pn_code;   /**<< projnum "types" (e.g. indicate compare operators and argument numbers) */
	long             n_res;     /**<< number of results */
	arch_irn_flags_t flags;     /**<< indicating if spillable and/or rematerializeable */
36

37
38
	const arch_register_req_t **in_req;  /**<< register requirements for arguments */
	const arch_register_req_t **out_req; /**<< register requirements for results */
39

40
	const arch_register_t **slots;          /**<< register slots for assigned registers */
41
42
43
} asmop_attr;

#endif /* _IA32_NODES_ATTR_H_ */