X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=ir%2Fbe%2Fia32%2Fia32_common_transform.h;h=1bf823200be4b586949bd6bf1a4dcaecc5a5244e;hb=82eea1b6b7887bdc834affa49038734e42012395;hp=2e22b5e90f8a712d9ed2ee1ef47f72acdb13e04f;hpb=c4d387cb4389654e978ea808027ea2be724c513c;p=libfirm diff --git a/ir/be/ia32/ia32_common_transform.h b/ir/be/ia32/ia32_common_transform.h index 2e22b5e90..1bf823200 100644 --- a/ir/be/ia32/ia32_common_transform.h +++ b/ir/be/ia32/ia32_common_transform.h @@ -21,14 +21,13 @@ * @file * @brief This file implements the common parts of IR transformation from * firm into ia32-Firm. - * @author Sebastian Buchwald - * @version $Id: ia32_common_transform.h 20999 2008-08-05 16:48:29Z beck $ + * @author Matthias Braun, Sebastian Buchwald */ #ifndef FIRM_BE_IA32_IA32_COMMON_TRANSFORM_H #define FIRM_BE_IA32_IA32_COMMON_TRANSFORM_H +#include "firm_types.h" #include "bearch_ia32_t.h" -#include "height.h" /** * An assembler constraint. @@ -43,25 +42,27 @@ struct constraint_t { int same_as; }; -extern ia32_code_gen_t *env_cg; -extern heights_t *heights; +extern ir_heights_t *ia32_heights; +extern int ia32_no_pic_adjust; + +ir_type *ia32_get_prim_type(const ir_mode *mode); /** * Get an atomic entity that is initialized with a tarval forming * a given constant. - * - * @param cnst the node representing the constant */ -ir_entity *create_float_const_entity(ir_node *cnst); +ir_entity *ia32_create_float_const_entity(ia32_isa_t *isa, ir_tarval *tv, + ident *name); /** * Creates an immediate. * + * @param irg The IR graph the node belongs to. * @param symconst if set, create a SymConst immediate * @param symconst_sign sign for the symconst * @param val integer value for the immediate */ -ir_node *create_Immediate(ir_entity *symconst, int symconst_sign, long val); +ir_node *ia32_create_Immediate(ir_graph *irg, ir_entity *symconst, int symconst_sign, long val); /** * returns register by name (used for determining clobber specifications in @@ -69,13 +70,6 @@ ir_node *create_Immediate(ir_entity *symconst, int symconst_sign, long val); */ const arch_register_t *ia32_get_clobber_register(const char *clobber); -#ifndef NDEBUG -/** - * Prints the old node name on cg obst and returns a pointer to it. - */ -const char *ia32_get_old_node_name(ia32_code_gen_t *cg, ir_node *irn); -#endif /* NDEBUG */ - /** * Return true if a mode can be stored in the GP register set. */ @@ -84,20 +78,35 @@ int ia32_mode_needs_gp_reg(ir_mode *mode); /** * generates code for a ASM node */ -ir_node *gen_ASM(ir_node *node); +ir_node *ia32_gen_ASM(ir_node *node); + +/** + * Transforms a CopyB node. + * + * @return The transformed node. + */ +ir_node *ia32_gen_CopyB(ir_node *node); + +/** + * Transform the Thread Local Storage Proj. + */ +ir_node *ia32_gen_Proj_tls(ir_node *node); /** * This function just sets the register for the Unknown node * as this is not done during register allocation because Unknown * is an "ignore" node. */ -ir_node *gen_Unknown(ir_node *node); +ir_node *ia32_gen_Unknown(ir_node *node); -const arch_register_req_t *make_register_req(const constraint_t *constraint, - int n_outs, const arch_register_req_t **out_reqs, int pos); +const arch_register_req_t *ia32_parse_clobber(const char *clobber); -const arch_register_req_t *parse_clobber(const char *clobber); +/** + * Checks whether other node inputs depend on the am_candidate (via mem-proj). + */ +int ia32_prevents_AM(ir_node *const block, ir_node *const am_candidate, + ir_node *const other); -ir_node *try_create_Immediate(ir_node *node, char immediate_constraint_type); +ir_node *ia32_try_create_Immediate(ir_node *node, char immediate_constraint_type); -#endif /* FIRM_BE_IA32_IA32_COMMON_TRANSFORM_H */ +#endif