X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=ir%2Fbe%2Fia32%2Fia32_common_transform.h;h=3faf53f3b132bbc8a936e6e0cd867ecd4aa69048;hb=438580abed840c55e82a03b47daeacfe2da8040f;hp=1f7a524b13b06715222f640367b5dc12666c3b6f;hpb=b38b52e7426cd2bf243282db922e135422d435b7;p=libfirm diff --git a/ir/be/ia32/ia32_common_transform.h b/ir/be/ia32/ia32_common_transform.h index 1f7a524b1..3faf53f3b 100644 --- a/ir/be/ia32/ia32_common_transform.h +++ b/ir/be/ia32/ia32_common_transform.h @@ -21,12 +21,13 @@ * @file * @brief This file implements the common parts of IR transformation from * firm into ia32-Firm. - * @author Sebastian Buchwald + * @author Matthias Braun, Sebastian Buchwald * @version $Id: ia32_common_transform.h 20999 2008-08-05 16:48:29Z beck $ */ #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" /** @@ -42,7 +43,8 @@ struct constraint_t { int same_as; }; -extern ia32_code_gen_t *env_cg; +extern ir_heights_t *ia32_heights; +extern int ia32_no_pic_adjust; /** * Get an atomic entity that is initialized with a tarval forming @@ -50,7 +52,7 @@ extern ia32_code_gen_t *env_cg; * * @param cnst the node representing the constant */ -ir_entity *create_float_const_entity(ir_node *cnst); +ir_entity *ia32_create_float_const_entity(ir_node *cnst); /** * Creates an immediate. @@ -59,7 +61,7 @@ ir_entity *create_float_const_entity(ir_node *cnst); * @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_entity *symconst, int symconst_sign, long val); /** * returns register by name (used for determining clobber specifications in @@ -67,13 +69,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. */ @@ -82,20 +77,38 @@ 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, +const arch_register_req_t *ia32_make_register_req(const constraint_t *constraint, int n_outs, const arch_register_req_t **out_reqs, int pos); -const arch_register_req_t *parse_clobber(const char *clobber); +const arch_register_req_t *ia32_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