ia32_nodes_attr.h 1.19 KB
Newer Older
1
2
3
4
5
6
7
8
9
10
#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 {
Christian Würdig's avatar
Christian Würdig committed
11
  enum { asmop_Const, asmop_SymConst, asmop_AddrMode } tp;
12
13

  tarval  *tv;       /**<< tarval for immediate operations */
Christian Würdig's avatar
Christian Würdig committed
14
  tarval  *offset;   /**<< offset for AddrMode */
15
16
17
18
  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) */

Christian Würdig's avatar
Christian Würdig committed
19
20
21
  long pn_code;			/**<< projnum "types" (e.g. indicates the compare operator of a conditional jump
                          or an argument number) */

22
23
24
25
26
27
28
  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 */

29
  const arch_register_t **slots;          /**<< register slots for assigned registers */
30
31
32
} asmop_attr;

#endif /* _IA32_NODES_ATTR_H_ */