Allow the first line to be a comment.
[libfirm] / ir / be / arm / arm_new_nodes.c
index 400df4a..0c8f546 100644 (file)
@@ -23,7 +23,6 @@
  *         opcodes and the corresponding node constructors for the arm
  *         assembler irg.
  * @author Oliver Richter, Tobias Gneist
- * @version $Id$
  */
 #include "config.h"
 
 #include "irprintf.h"
 #include "xmalloc.h"
 
-#include "../bearch.h"
+#include "bearch.h"
 
 #include "arm_nodes_attr.h"
 #include "arm_new_nodes.h"
 #include "arm_optimize.h"
 
-#include "../beabi.h"
+#include "beabi.h"
 #include "bearch_arm_t.h"
 
-const char *arm_get_fpa_imm_name(long imm_value)
-{
-       static const char *fpa_imm[] = {
-               "0",
-               "1",
-               "2",
-               "3",
-               "4",
-               "5",
-               "10",
-               "0.5"
-       };
-       return fpa_imm[imm_value];
-}
-
 static bool arm_has_symconst_attr(const ir_node *node)
 {
        return is_arm_SymConst(node) || is_arm_FrameAddr(node) || is_arm_Bl(node);
@@ -100,7 +84,7 @@ static bool has_farith_attr(const ir_node *node)
  * @param n        the node to dump
  * @param reason   indicates which kind of information should be dumped
  */
-static void arm_dump_node(FILE *F, ir_node *n, dump_reason_t reason)
+static void arm_dump_node(FILE *F, const ir_node *n, dump_reason_t reason)
 {
        switch (reason) {
        case dump_node_opcode_txt:
@@ -324,44 +308,18 @@ void set_arm_CondJmp_relation(ir_node *node, ir_relation relation)
        attr->relation = relation;
 }
 
-int get_arm_SwitchJmp_n_projs(const ir_node *node)
-{
-       const arm_SwitchJmp_attr_t *attr = get_arm_SwitchJmp_attr_const(node);
-       return attr->n_projs;
-}
-
-void set_arm_SwitchJmp_n_projs(ir_node *node, int n_projs)
-{
-       arm_SwitchJmp_attr_t *attr = get_arm_SwitchJmp_attr(node);
-       attr->n_projs = n_projs;
-}
-
-long get_arm_SwitchJmp_default_proj_num(const ir_node *node)
-{
-       const arm_SwitchJmp_attr_t *attr = get_arm_SwitchJmp_attr_const(node);
-       return attr->default_proj_num;
-}
-
-void set_arm_SwitchJmp_default_proj_num(ir_node *node, long default_proj_num)
-{
-       arm_SwitchJmp_attr_t *attr = get_arm_SwitchJmp_attr(node);
-       attr->default_proj_num = default_proj_num;
-}
-
 /* Set the ARM machine node attributes to default values. */
 static void init_arm_attributes(ir_node *node, arch_irn_flags_t flags,
                          const arch_register_req_t ** in_reqs,
-                         const be_execution_unit_t ***execution_units,
                                                 int n_res)
 {
        ir_graph       *irg  = get_irn_irg(node);
        struct obstack *obst = get_irg_obstack(irg);
        arm_attr_t     *attr = get_arm_attr(node);
        backend_info_t *info;
-       (void) execution_units;
 
-       arch_irn_set_flags(node, flags);
-       arch_set_in_register_reqs(node, in_reqs);
+       arch_set_irn_flags(node, flags);
+       arch_set_irn_register_reqs_in(node, in_reqs);
        attr->is_load_store    = false;
 
        info            = be_get_info(node);
@@ -420,6 +378,20 @@ static void init_arm_CopyB_attributes(ir_node *res, unsigned size)
        attr->size = size;
 }
 
+static void init_arm_SwitchJmp_attributes(ir_node *res,
+                                          const ir_switch_table *table)
+{
+       unsigned n_outs = arch_get_irn_n_outs(res);
+       unsigned o;
+
+       arm_SwitchJmp_attr_t *attr = get_arm_SwitchJmp_attr(res);
+       attr->table = table;
+
+       for (o = 0; o < n_outs; ++o) {
+               arch_set_irn_register_req_out(res, o, arch_no_register_req);
+       }
+}
+
 static int cmp_attr_arm(const ir_node *a, const ir_node *b)
 {
        (void) a;
@@ -516,7 +488,7 @@ const arm_cmp_attr_t *get_arm_cmp_attr_const(const ir_node *node)
        return (const arm_cmp_attr_t*) get_irn_generic_attr_const(node);
 }
 
-static int cmp_attr_arm_load_store(ir_node *a, ir_node *b)
+static int cmp_attr_arm_load_store(const ir_node *a, const ir_node *b)
 {
        const arm_load_store_attr_t *attr_a;
        const arm_load_store_attr_t *attr_b;
@@ -524,8 +496,8 @@ static int cmp_attr_arm_load_store(ir_node *a, ir_node *b)
        if (cmp_attr_arm(a, b))
                return 1;
 
-       attr_a = get_arm_load_store_attr(a);
-       attr_b = get_arm_load_store_attr(b);
+       attr_a = get_arm_load_store_attr_const(a);
+       attr_b = get_arm_load_store_attr_const(b);
        if (attr_a->entity != attr_b->entity
                        || attr_a->entity_sign != attr_b->entity_sign
                        || attr_a->offset != attr_b->offset)
@@ -534,7 +506,7 @@ static int cmp_attr_arm_load_store(ir_node *a, ir_node *b)
        return 0;
 }
 
-static int cmp_attr_arm_shifter_operand(ir_node *a, ir_node *b)
+static int cmp_attr_arm_shifter_operand(const ir_node *a, const ir_node *b)
 {
        const arm_shifter_operand_t *attr_a;
        const arm_shifter_operand_t *attr_b;
@@ -542,8 +514,8 @@ static int cmp_attr_arm_shifter_operand(ir_node *a, ir_node *b)
        if (cmp_attr_arm(a, b))
                return 1;
 
-       attr_a = get_arm_shifter_operand_attr(a);
-       attr_b = get_arm_shifter_operand_attr(b);
+       attr_a = get_arm_shifter_operand_attr_const(a);
+       attr_b = get_arm_shifter_operand_attr_const(b);
        if (attr_a->shift_modifier != attr_b->shift_modifier
                        || attr_a->immediate_value != attr_b->immediate_value
                        || attr_a->shift_immediate != attr_b->shift_immediate)
@@ -552,7 +524,7 @@ static int cmp_attr_arm_shifter_operand(ir_node *a, ir_node *b)
        return 0;
 }
 
-static int cmp_attr_arm_cmp(ir_node *a, ir_node *b)
+static int cmp_attr_arm_cmp(const ir_node *a, const ir_node *b)
 {
        const arm_cmp_attr_t *attr_a;
        const arm_cmp_attr_t *attr_b;
@@ -560,15 +532,15 @@ static int cmp_attr_arm_cmp(ir_node *a, ir_node *b)
        if (cmp_attr_arm(a, b))
                return 1;
 
-       attr_a = get_arm_cmp_attr(a);
-       attr_b = get_arm_cmp_attr(b);
+       attr_a = get_arm_cmp_attr_const(a);
+       attr_b = get_arm_cmp_attr_const(b);
        if (attr_a->ins_permuted != attr_b->ins_permuted
                        || attr_a->is_unsigned != attr_b->is_unsigned)
                return 1;
        return 0;
 }
 
-static int cmp_attr_arm_farith(ir_node *a, ir_node *b)
+static int cmp_attr_arm_farith(const ir_node *a, const ir_node *b)
 {
        const arm_farith_attr_t *attr_a;
        const arm_farith_attr_t *attr_b;
@@ -595,6 +567,7 @@ static void arm_copy_attr(ir_graph *irg, const ir_node *old_node,
        memcpy(attr_new, attr_old, get_op_attr_size(get_irn_op(old_node)));
 
        /* copy out flags */
+       new_info->flags = old_info->flags;
        new_info->out_infos =
                DUP_ARR_D(reg_out_info_t, obst, old_info->out_infos);
        new_info->in_reqs = old_info->in_reqs;