X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=ir%2Fbe%2FTEMPLATE%2FTEMPLATE_new_nodes.c;h=3f98e33f0f0cf5095aa3aedc9987cb9855006702;hb=61af57b12ac03fde8c8f03d7c9500bfbff5dfdbf;hp=ba1af80540e76f12e88ca414b912c4b01a680749;hpb=2adf84106c02caf097c2d6cf1764706bdc437bcc;p=libfirm diff --git a/ir/be/TEMPLATE/TEMPLATE_new_nodes.c b/ir/be/TEMPLATE/TEMPLATE_new_nodes.c index ba1af8054..3f98e33f0 100644 --- a/ir/be/TEMPLATE/TEMPLATE_new_nodes.c +++ b/ir/be/TEMPLATE/TEMPLATE_new_nodes.c @@ -1,18 +1,33 @@ +/* + * Copyright (C) 1995-2007 University of Karlsruhe. All right reserved. + * + * This file is part of libFirm. + * + * This file may be distributed and/or modified under the terms of the + * GNU General Public License version 2 as published by the Free Software + * Foundation and appearing in the file LICENSE.GPL included in the + * packaging of this file. + * + * Licensees holding valid libFirm Professional Edition licenses may use + * this file in accordance with the libFirm Commercial License. + * Agreement provided with the Software. + * + * This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE + * WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE. + */ + /** - * This file implements the creation of the achitecture specific firm opcodes - * and the coresponding node constructors for the TEMPLATE assembler irg. - * $Id$ + * @file + * @brief This file implements the creation of the achitecture specific firm + * opcodes and the coresponding node constructors for the TEMPLATE + * assembler irg. + * @version $Id$ */ #ifdef HAVE_CONFIG_H #include "config.h" #endif -#ifdef _WIN32 -#include -#else -#include -#endif - #include #include "irprog_t.h" @@ -25,8 +40,9 @@ #include "firm_common_t.h" #include "irvrfy_t.h" #include "irprintf.h" +#include "xmalloc.h" -#include "../bearch.h" +#include "../bearch_t.h" #include "TEMPLATE_nodes_attr.h" #include "TEMPLATE_new_nodes.h" @@ -103,7 +119,7 @@ static int TEMPLATE_dump_node(ir_node *n, FILE *F, dump_reason_t reason) { ir_mode *mode = NULL; int bad = 0; int i; - TEMPLATE_attr_t *attr; + const TEMPLATE_attr_t *attr; const arch_register_req_t **reqs; const arch_register_t **slots; @@ -131,7 +147,7 @@ static int TEMPLATE_dump_node(ir_node *n, FILE *F, dump_reason_t reason) { break; case dump_node_info_txt: - attr = get_TEMPLATE_attr(n); + attr = get_TEMPLATE_attr_const(n); fprintf(F, "=== TEMPLATE attr begin ===\n"); /* dump IN requirements */ @@ -205,20 +221,21 @@ static int TEMPLATE_dump_node(ir_node *n, FILE *F, dump_reason_t reason) { * |___/ ***************************************************************************************************/ -/** - * Wraps get_irn_generic_attr() as it takes no const ir_node, so we need to do a cast. - * Firm was made by people hating const :-( - */ -TEMPLATE_attr_t *get_TEMPLATE_attr(const ir_node *node) { +const TEMPLATE_attr_t *get_TEMPLATE_attr_const(const ir_node *node) { assert(is_TEMPLATE_irn(node) && "need TEMPLATE node to get attributes"); - return (TEMPLATE_attr_t *)get_irn_generic_attr((ir_node *)node); + return (const TEMPLATE_attr_t *)get_irn_generic_attr_const(node); +} + +TEMPLATE_attr_t *get_TEMPLATE_attr(ir_node *node) { + assert(is_TEMPLATE_irn(node) && "need TEMPLATE node to get attributes"); + 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) { - TEMPLATE_attr_t *attr = get_TEMPLATE_attr(node); + const TEMPLATE_attr_t *attr = get_TEMPLATE_attr_const(node); return attr->in_req; } @@ -226,7 +243,7 @@ const arch_register_req_t **get_TEMPLATE_in_req_all(const ir_node *node) { * Returns the result register requirements of an TEMPLATE node. */ const arch_register_req_t **get_TEMPLATE_out_req_all(const ir_node *node) { - TEMPLATE_attr_t *attr = get_TEMPLATE_attr(node); + const TEMPLATE_attr_t *attr = get_TEMPLATE_attr_const(node); return attr->out_req; } @@ -234,7 +251,7 @@ const arch_register_req_t **get_TEMPLATE_out_req_all(const ir_node *node) { * 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) { - TEMPLATE_attr_t *attr = get_TEMPLATE_attr(node); + const TEMPLATE_attr_t *attr = get_TEMPLATE_attr_const(node); return attr->in_req[pos]; } @@ -242,7 +259,7 @@ const arch_register_req_t *get_TEMPLATE_in_req(const ir_node *node, int pos) { * Returns the result register requirement at position pos of an TEMPLATE node. */ const arch_register_req_t *get_TEMPLATE_out_req(const ir_node *node, int pos) { - TEMPLATE_attr_t *attr = get_TEMPLATE_attr(node); + const TEMPLATE_attr_t *attr = get_TEMPLATE_attr_const(node); return attr->out_req[pos]; } @@ -266,14 +283,14 @@ void set_TEMPLATE_req_in(ir_node *node, const arch_register_req_t *req, int pos) * Returns the register flag of an TEMPLATE node. */ arch_irn_flags_t get_TEMPLATE_flags(const ir_node *node) { - TEMPLATE_attr_t *attr = get_TEMPLATE_attr(node); + const TEMPLATE_attr_t *attr = get_TEMPLATE_attr_const(node); return attr->flags; } /** * Sets the register flag of an TEMPLATE node. */ -void set_TEMPLATE_flags(const ir_node *node, arch_irn_flags_t flags) { +void set_TEMPLATE_flags(ir_node *node, arch_irn_flags_t flags) { TEMPLATE_attr_t *attr = get_TEMPLATE_attr(node); attr->flags = flags; } @@ -281,8 +298,16 @@ void set_TEMPLATE_flags(const ir_node *node, arch_irn_flags_t flags) { /** * Returns the result register slots of an TEMPLATE node. */ -const arch_register_t **get_TEMPLATE_slots(const ir_node *node) { - TEMPLATE_attr_t *attr = get_TEMPLATE_attr(node); +const arch_register_t **get_TEMPLATE_slots(ir_node *node) { + TEMPLATE_attr_t *attr = get_TEMPLATE_attr_const(node); + return attr->slots; +} + +/** + * Returns the result register slots of an TEMPLATE node. + */ +const arch_register_t * const *get_TEMPLATE_slots_const(const ir_node *node) { + TEMPLATE_attr_t *attr = get_TEMPLATE_attr_const(node); return attr->slots; } @@ -290,7 +315,7 @@ const arch_register_t **get_TEMPLATE_slots(const ir_node *node) { * Returns the name of the OUT register at position pos. */ const char *get_TEMPLATE_out_reg_name(const ir_node *node, int pos) { - TEMPLATE_attr_t *attr = get_TEMPLATE_attr(node); + const TEMPLATE_attr_t *attr = get_TEMPLATE_attr_const(node); assert(is_TEMPLATE_irn(node) && "Not an TEMPLATE node."); assert(pos < attr->n_res && "Invalid OUT position."); @@ -303,7 +328,7 @@ const char *get_TEMPLATE_out_reg_name(const ir_node *node, int pos) { * Returns the index of the OUT register at position pos within its register class. */ int get_TEMPLATE_out_regnr(const ir_node *node, int pos) { - TEMPLATE_attr_t *attr = get_TEMPLATE_attr(node); + const TEMPLATE_attr_t *attr = get_TEMPLATE_attr_const(node); assert(is_TEMPLATE_irn(node) && "Not an TEMPLATE node."); assert(pos < attr->n_res && "Invalid OUT position."); @@ -316,7 +341,7 @@ int get_TEMPLATE_out_regnr(const ir_node *node, int pos) { * Returns the OUT register at position pos. */ const arch_register_t *get_TEMPLATE_out_reg(const ir_node *node, int pos) { - TEMPLATE_attr_t *attr = get_TEMPLATE_attr(node); + const TEMPLATE_attr_t *attr = get_TEMPLATE_attr_const(node); assert(is_TEMPLATE_irn(node) && "Not an TEMPLATE node."); assert(pos < attr->n_res && "Invalid OUT position."); @@ -337,7 +362,7 @@ void set_TEMPLATE_n_res(ir_node *node, int n_res) { * Returns the number of results. */ int get_TEMPLATE_n_res(const ir_node *node) { - TEMPLATE_attr_t *attr = get_TEMPLATE_attr(node); + const TEMPLATE_attr_t *attr = get_TEMPLATE_attr_const(node); return attr->n_res; }