added new attributes for abstract machine
[libfirm] / ir / be / ia32 / ia32_nodes_attr.h
index 0dbcfa4..cdc75d3 100644 (file)
@@ -13,6 +13,7 @@
 
 #include "firm_types.h"
 #include "../bearch.h"
+#include "../bemachine.h"
 
 typedef enum { flavour_Div = 1, flavour_Mod, flavour_DivMod } ia32_op_flavour_t;
 typedef enum { pn_EAX, pn_EDX } pn_ia32_Register;
@@ -88,7 +89,7 @@ typedef struct _ia32_attr_t {
 
                unsigned op_flav:2;         /**< flavour of an op (flavour_Div/Mod/DivMod) */
 
-               unsigned flags:4;           /**< indicating if spillable and/or rematerializeable */
+               unsigned flags:4;           /**< indicating if spillable, rematerializeable, stack modifying and/or ignore */
 
                unsigned is_commutative:1;  /**< indicates whether op is commutative or not */
 
@@ -101,9 +102,10 @@ typedef struct _ia32_attr_t {
                unsigned n_res:6;           /**< number of results produced by this node */
        } data;
 
-       struct obstack *am_offs;     /**< offsets for AddrMode */
-       struct obstack *plain_offs;  /**< obstack for plain am_offs */
-       ident          *am_sc;       /**< SymConst for AddrMode */
+       int *out_flags;     /**< flags for each produced value */
+
+       int am_offs;        /**< offsets for AddrMode */
+       ident *am_sc;       /**< SymConst for AddrMode */
 
        union {
                tarval *tv;     /**< tarval for immediate operations */
@@ -127,6 +129,8 @@ typedef struct _ia32_attr_t {
        const char *orig_node;      /**< holds the name of the original ir node for debugging purposes */
 #endif /* NDEBUG */
 
+       const be_execution_unit_t ***exec_units; /**< list of units this operation can be executed on */
+
        const ia32_register_req_t **in_req;  /**< register requirements for arguments */
        const ia32_register_req_t **out_req; /**< register requirements for results */