* @brief This file implements the creation of the achitecture specific firm
* opcodes and the coresponding node constructors for the TEMPLATE
* assembler irg.
- * @version $Id$
*/
#include "config.h"
#include "ircons_t.h"
#include "iropt_t.h"
#include "irop.h"
-#include "irvrfy_t.h"
#include "irprintf.h"
#include "xmalloc.h"
-#include "../bearch.h"
+#include "bearch.h"
#include "TEMPLATE_nodes_attr.h"
#include "TEMPLATE_new_nodes.h"
/**
* Dumper interface for dumping TEMPLATE nodes in vcg.
- * @param n the node to dump
* @param F the output file
+ * @param n the node to dump
* @param reason indicates which kind of information should be dumped
- * @return 0 on success or != 0 on failure
*/
-static int TEMPLATE_dump_node(ir_node *n, FILE *F, dump_reason_t reason)
+static void TEMPLATE_dump_node(FILE *F, const ir_node *n, dump_reason_t reason)
{
- ir_mode *mode = NULL;
+ ir_mode *mode = NULL;
switch (reason) {
case dump_node_opcode_txt:
arch_dump_reqs_and_registers(F, n);
break;
}
-
- return 0;
}
const TEMPLATE_attr_t *get_TEMPLATE_attr_const(const ir_node *node)
return (TEMPLATE_attr_t *)get_irn_generic_attr(node);
}
-/**
- * Returns the argument register requirements of a TEMPLATE node.
- */
-const arch_register_req_t **get_TEMPLATE_in_req_all(const ir_node *node)
-{
- const TEMPLATE_attr_t *attr = get_TEMPLATE_attr_const(node);
- return attr->in_req;
-}
-
-/**
- * Returns the argument register requirement at position pos of an TEMPLATE node.
- */
-const arch_register_req_t *get_TEMPLATE_in_req(const ir_node *node, int pos)
-{
- const TEMPLATE_attr_t *attr = get_TEMPLATE_attr_const(node);
- return attr->in_req[pos];
-}
-
-/**
- * Sets the IN register requirements at position pos.
- */
-void set_TEMPLATE_req_in(ir_node *node, const arch_register_req_t *req, int pos)
-{
- TEMPLATE_attr_t *attr = get_TEMPLATE_attr(node);
- attr->in_req[pos] = req;
-}
-
/**
* Initializes the nodes attributes.
*/
-void init_TEMPLATE_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)
+static void init_TEMPLATE_attributes(ir_node *node, arch_irn_flags_t flags,
+ const arch_register_req_t **in_reqs,
+ int n_res)
{
ir_graph *irg = get_irn_irg(node);
struct obstack *obst = get_irg_obstack(irg);
- TEMPLATE_attr_t *attr = get_TEMPLATE_attr(node);
backend_info_t *info;
- (void) execution_units;
- arch_irn_set_flags(node, flags);
- attr->in_req = in_reqs;
+ arch_set_irn_flags(node, flags);
+ arch_set_irn_register_reqs_in(node, in_reqs);
info = be_get_info(node);
- info->out_infos = NEW_ARR_D(reg_out_info_t, obst, n_res);
- memset(info->out_infos, 0, n_res * sizeof(info->out_infos[0]));
+ info->out_infos = NEW_ARR_DZ(reg_out_info_t, obst, n_res);
}
-static int TEMPLATE_compare_attr(ir_node *a, ir_node *b)
+static void set_TEMPLATE_value(ir_node *node, ir_tarval *value)
+{
+ TEMPLATE_attr_t *attr = get_TEMPLATE_attr(node);
+ attr->value = value;
+}
+
+static int TEMPLATE_compare_attr(const ir_node *a, const ir_node *b)
{
const TEMPLATE_attr_t *attr_a = get_TEMPLATE_attr_const(a);
const TEMPLATE_attr_t *attr_b = get_TEMPLATE_attr_const(b);
return 0;
}
+static void TEMPLATE_copy_attr(ir_graph *irg, const ir_node *old_node,
+ ir_node *new_node)
+{
+ struct obstack *obst = get_irg_obstack(irg);
+ const void *attr_old = get_irn_generic_attr_const(old_node);
+ void *attr_new = get_irn_generic_attr(new_node);
+ backend_info_t *old_info = be_get_info(old_node);
+ backend_info_t *new_info = be_get_info(new_node);
+
+ /* copy the attributes */
+ 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;
+}
+
/* Include the generated constructor functions */
#include "gen_TEMPLATE_new_nodes.c.inl"