X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=ir%2Fbe%2Fia32%2Fia32_nodes_attr.h;h=04a6a4c223d5b5f70cdf03804382f4ac850b7bdd;hb=4d808298b72e72bd06c7466e837dd9dda4eb1070;hp=dbac162cbe6122f116039516da32ac846621511c;hpb=1ce363f80e6a204d4011f85813362d9bd1d0e7e4;p=libfirm diff --git a/ir/be/ia32/ia32_nodes_attr.h b/ir/be/ia32/ia32_nodes_attr.h index dbac162cb..04a6a4c22 100644 --- a/ir/be/ia32/ia32_nodes_attr.h +++ b/ir/be/ia32/ia32_nodes_attr.h @@ -33,6 +33,11 @@ #include "../bemachine.h" #include "irnode_t.h" +enum { + ia32_pn_Cmp_unsigned = 0x1000, + ia32_pn_Cmp_float = 0x2000, +}; + typedef enum { ia32_Normal, ia32_AddrModeD, @@ -40,10 +45,8 @@ typedef enum { } ia32_op_type_t; typedef enum { - ia32_am_None = 0, /**< no addrmode support */ - ia32_am_Dest = 1, - ia32_am_Source = 2, /**< addrmode for source only */ - ia32_am_Full = 3 + ia32_am_None = 0, /**< no addrmode support */ + ia32_am_Source = 2 /**< addrmode for source only */ } ia32_am_type_t; typedef enum { @@ -68,6 +71,7 @@ typedef enum { match_dest_am = 1 << 9, match_try_am = 1 << 10, /**< only try to produce AM node, don't do anything if AM isn't possible */ + match_two_users = 1 << 11 /**< the instruction uses a load two times ... */ } match_flags_t; typedef struct ia32_op_attr_t ia32_op_attr_t; @@ -103,7 +107,7 @@ struct ia32_attr_t { unsigned am_sc_sign:1; /**< The sign bit of the address mode symconst. */ unsigned use_frame:1; /**< Indicates whether the operation uses the frame pointer or not. */ - unsigned except_label:1; /**< Set if this node needs a label because of possible exception. */ + unsigned has_except_label:1; /**< Set if this node needs a label because of possible exception. */ unsigned is_commutative:1; /**< Indicates whether op is commutative or not. */ @@ -113,6 +117,7 @@ struct ia32_attr_t { unsigned ins_permuted : 1; /**< inputs of node have been permuted (for commutative nodes) */ unsigned cmp_unsigned : 1; /**< compare should be unsigned */ + unsigned is_reload : 1; /**< node performs a reload */ } data; int *out_flags; /**< flags for each produced value */ @@ -132,6 +137,8 @@ struct ia32_attr_t { const arch_register_t **slots; /**< register slots for assigned registers */ + ir_label_t exc_label; /**< the exception label iff this instruction can throw an exception */ + #ifndef NDEBUG const char *orig_node; /**< holds the name of the original ir node */ unsigned attr_type; /**< bitfield indicating the attribute type */