fixed Jump Tables
[libfirm] / ir / be / ia32 / ia32_new_nodes.c
index e158fa8..8bc1471 100644 (file)
@@ -445,8 +445,8 @@ ia32_am_type_t get_ia32_am_support(const ir_node *node) {
  * Sets the supported addrmode of an ia32 node
  */
 void set_ia32_am_support(ir_node *node, ia32_am_type_t am_tp) {
-       ia32_attr_t *attr = get_ia32_attr(node);
-       attr->data.am_support  = am_tp;
+       ia32_attr_t *attr     = get_ia32_attr(node);
+       attr->data.am_support = am_tp;
 }
 
 /**
@@ -461,8 +461,8 @@ ia32_am_flavour_t get_ia32_am_flavour(const ir_node *node) {
  * Sets the addrmode flavour of an ia32 node
  */
 void set_ia32_am_flavour(ir_node *node, ia32_am_flavour_t am_flavour) {
-       ia32_attr_t *attr = get_ia32_attr(node);
-       attr->data.am_flavour  = am_flavour;
+       ia32_attr_t *attr     = get_ia32_attr(node);
+       attr->data.am_flavour = am_flavour;
 }
 
 /**
@@ -765,6 +765,38 @@ void set_ia32_res_mode(ir_node *node, ir_mode *mode) {
        attr->res_mode    = mode;
 }
 
+/**
+ * Gets the source mode of conversion.
+ */
+ir_mode *get_ia32_src_mode(const ir_node *node) {
+       ia32_attr_t *attr = get_ia32_attr(node);
+       return attr->src_mode;
+}
+
+/**
+ * Sets the source mode of conversion.
+ */
+void set_ia32_src_mode(ir_node *node, ir_mode *mode) {
+       ia32_attr_t *attr = get_ia32_attr(node);
+       attr->src_mode    = mode;
+}
+
+/**
+ * Gets the target mode of conversion.
+ */
+ir_mode *get_ia32_tgt_mode(const ir_node *node) {
+       ia32_attr_t *attr = get_ia32_attr(node);
+       return attr->tgt_mode;
+}
+
+/**
+ * Sets the target mode of conversion.
+ */
+void set_ia32_tgt_mode(ir_node *node, ir_mode *mode) {
+       ia32_attr_t *attr = get_ia32_attr(node);
+       attr->tgt_mode    = mode;
+}
+
 /**
  * Gets the frame entity assigned to this node;
  */
@@ -1195,11 +1227,17 @@ void init_ia32_attributes(ir_node *node, arch_irn_flags_t flags, const ia32_regi
 
 /* default compare operation to compare immediate ops */
 int ia32_compare_immop_attr(ia32_attr_t *a, ia32_attr_t *b) {
+       int equ = 0;
+
        if (a->data.tp == b->data.tp) {
-               return a->cnst == b->cnst;
+               equ = (a->cnst == b->cnst);
+               equ = equ ? (a->data.use_frame == b->data.use_frame) : 0;
+
+               if (equ && a->data.use_frame && b->data.use_frame)
+                       equ = (a->frame_ent == b->frame_ent);
        }
 
-       return 1;
+       return !equ;
 }
 
 /* copies the ia32 attributes */