X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=ir%2Fbe%2Famd64%2Famd64_new_nodes.c;h=d7068676b7645d55d73917dd3ed5ea366593aeae;hb=3f1d2fb001738ccea94f601a71a21d6dbf8ad8a9;hp=b6dc1520937ce433cec5c0a14ba7dba33c2647d7;hpb=5f9013339e1d6492a0960bd6a4c470eb29351c7e;p=libfirm diff --git a/ir/be/amd64/amd64_new_nodes.c b/ir/be/amd64/amd64_new_nodes.c index b6dc15209..d7068676b 100644 --- a/ir/be/amd64/amd64_new_nodes.c +++ b/ir/be/amd64/amd64_new_nodes.c @@ -1,5 +1,5 @@ /* - * Copyright (C) 1995-2008 University of Karlsruhe. All right reserved. + * Copyright (C) 1995-2011 University of Karlsruhe. All right reserved. * * This file is part of libFirm. * @@ -22,7 +22,6 @@ * @brief This file implements the creation of the achitecture specific firm * opcodes and the coresponding node constructors for the amd64 * assembler irg. - * @version $Id: amd64_new_nodes.c 26673 2009-10-01 16:43:13Z matze $ */ #include "config.h" @@ -38,7 +37,7 @@ #include "irprintf.h" #include "xmalloc.h" -#include "../bearch.h" +#include "bearch.h" #include "amd64_nodes_attr.h" #include "amd64_new_nodes.h" @@ -58,7 +57,7 @@ void set_amd64_ls_mode(ir_node *node, ir_mode *mode) */ static void amd64_dump_node(FILE *F, ir_node *n, dump_reason_t reason) { - ir_mode *mode = NULL; + ir_mode *mode = NULL; switch (reason) { case dump_node_opcode_txt: @@ -102,37 +101,16 @@ amd64_attr_t *get_amd64_attr(ir_node *node) const amd64_SymConst_attr_t *get_amd64_SymConst_attr_const(const ir_node *node) { - const amd64_attr_t *attr = get_amd64_attr_const(node); - const amd64_SymConst_attr_t *sym_attr = CONST_CAST_AMD64_ATTR(amd64_SymConst_attr_t, attr); - - return sym_attr; + const amd64_SymConst_attr_t *attr + = (const amd64_SymConst_attr_t*)get_irn_generic_attr_const(node); + return attr; } -/** - * Returns the argument register requirements of a amd64 node. - */ -const arch_register_req_t **get_amd64_in_req_all(const ir_node *node) -{ - const amd64_attr_t *attr = get_amd64_attr_const(node); - return attr->in_req; -} - -/** - * Returns the argument register requirement at position pos of an amd64 node. - */ -const arch_register_req_t *get_amd64_in_req(const ir_node *node, int pos) -{ - const amd64_attr_t *attr = get_amd64_attr_const(node); - return attr->in_req[pos]; -} - -/** - * Sets the IN register requirements at position pos. - */ -void set_amd64_req_in(ir_node *node, const arch_register_req_t *req, int pos) +amd64_SymConst_attr_t *get_amd64_SymConst_attr(ir_node *node) { - amd64_attr_t *attr = get_amd64_attr(node); - attr->in_req[pos] = req; + amd64_SymConst_attr_t *attr + = (amd64_SymConst_attr_t*)get_irn_generic_attr(node); + return attr; } /** @@ -140,7 +118,6 @@ void set_amd64_req_in(ir_node *node, const arch_register_req_t *req, int pos) */ static void init_amd64_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); @@ -148,10 +125,9 @@ static void init_amd64_attributes(ir_node *node, arch_irn_flags_t flags, amd64_attr_t *attr = get_amd64_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); @@ -159,7 +135,7 @@ static void init_amd64_attributes(ir_node *node, arch_irn_flags_t flags, attr->data.ins_permuted = 0; attr->data.cmp_unsigned = 0; - attr->ext.pnc = 0; + attr->ext.relation = ir_relation_false; attr->ext.imm_value = 0; } @@ -168,13 +144,13 @@ static void init_amd64_attributes(ir_node *node, arch_irn_flags_t flags, */ static void init_amd64_SymConst_attributes(ir_node *node, ir_entity *entity) { - amd64_SymConst_attr_t *attr = get_irn_generic_attr (node); + amd64_SymConst_attr_t *attr = get_amd64_SymConst_attr(node); attr->entity = entity; attr->fp_offset = 0; } /** Compare node attributes for SymConst. */ -static int cmp_amd64_attr_SymConst(ir_node *a, ir_node *b) +static int cmp_amd64_attr_SymConst(const ir_node *a, const ir_node *b) { const amd64_SymConst_attr_t *attr_a = get_amd64_SymConst_attr_const(a); const amd64_SymConst_attr_t *attr_b = get_amd64_SymConst_attr_const(b); @@ -187,7 +163,7 @@ static int cmp_amd64_attr_SymConst(ir_node *a, ir_node *b) } /** Compare common amd64 node attributes. */ -static int cmp_amd64_attr(ir_node *a, ir_node *b) +static int cmp_amd64_attr(const ir_node *a, const ir_node *b) { const amd64_attr_t *attr_a = get_amd64_attr_const(a); const amd64_attr_t *attr_b = get_amd64_attr_const(b); @@ -209,8 +185,10 @@ static void amd64_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; } /* Include the generated constructor functions */