ia32_nodes_attr.h 1.02 KB
Newer Older
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#ifndef _IA32_NODES_ATTR_H_
#define _IA32_NODES_ATTR_H_

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

typedef enum { flavour_Div, flavour_Mod, flavour_DivMod } divmod_flavour_t;
typedef enum { pn_EAX, pn_EDX } pn_ia32_Register;

typedef struct {
  enum { asmop_Const, asmop_SymConst } tp;

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

  divmod_flavour_t dm_flav;   /**<< flavour of a DivMod (flavour_Div/Mod/DivMod) */

  unsigned n_res;      /**<< number of results */

  arch_irn_flags_t    flags;     /**<< indicating if spillable and/or rematerializeable */

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

26
  const arch_register_t **slots;          /**<< register slots for assigned registers */
27
28
29
} asmop_attr;

#endif /* _IA32_NODES_ATTR_H_ */