X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=ir%2Fbe%2Fia32%2Fbearch_ia32_t.h;h=ee2194656752dc484f65b3fc5feef1e922b11a5c;hb=79fc960be9a8feaf05fc529fd594723146bb0234;hp=79f5a8c438d15f1b30c5237b92819ef5fc852676;hpb=25787e66c8e7c13c5022e8e9b053eebfd5166923;p=libfirm diff --git a/ir/be/ia32/bearch_ia32_t.h b/ir/be/ia32/bearch_ia32_t.h index 79f5a8c43..ee2194656 100644 --- a/ir/be/ia32/bearch_ia32_t.h +++ b/ir/be/ia32/bearch_ia32_t.h @@ -1,9 +1,22 @@ #ifndef _BEARCH_IA32_T_H_ #define _BEARCH_IA32_T_H_ +#include "firm_config.h" + #include "debug.h" #include "bearch_ia32.h" #include "ia32_nodes_attr.h" +#include "set.h" +#include "../be.h" + +/* some typedefs */ + +typedef struct _ia32_optimize_t { + unsigned incdec : 1; /**< optimize add/sub 1/-1 to inc/dec */ + unsigned doam : 1; /**< do address mode optimizations */ + unsigned placecnst : 1; /**< place constants in the blocks where they are used */ + unsigned immops : 1; /**< create operations with immediates */ +} ia32_optimize_t; typedef struct _ia32_code_gen_t { const arch_code_generator_if_t *impl; /**< implementation */ @@ -13,16 +26,24 @@ typedef struct _ia32_code_gen_t { set *reg_set; /**< set to memorize registers for non-ia32 nodes (e.g. phi nodes) */ firm_dbg_module_t *mod; /**< debugging module */ int emit_decls; /**< flag indicating if decls were already emitted */ - int has_alloca; /**< indicates whether the irg contains an alloca or not */ - const ia32_register_req_t **reg_param_req; /**< hold the requirements for the reg param nodes */ pmap *types; /**< A map of modes to primitive types */ pmap *tv_ent; /**< A map of entities that store tarvals */ + const be_irg_t *birg; /**< The be-irg (contains additional information about the irg) */ + ia32_optimize_t opt; /**< contains optimization information */ } ia32_code_gen_t; typedef struct _ia32_isa_t { - const arch_isa_if_t *impl; - int num_codegens; - set *reg_projnum_map; + const arch_isa_if_t *impl; + const arch_register_t *sp; /**< The stack pointer register. */ + const arch_register_t *bp; /**< The base pointer register. */ + const int stack_dir; /**< -1 for decreasing, 1 for increasing. */ + int num_codegens; /**< The number of code generator objects created so far */ + pmap *regs_16bit; /**< Contains the 16bits names of the gp registers */ + pmap *regs_8bit; /**< Contains the 8bits names of the gp registers */ +#ifndef NDEBUG + struct obstack *name_obst; /**< holds the original node names (for debugging) */ + unsigned long name_obst_size; +#endif /* NDEBUG */ } ia32_isa_t; typedef struct _ia32_irn_ops_t { @@ -33,7 +54,6 @@ typedef struct _ia32_irn_ops_t { /* this is a struct to minimize the number of parameters for transformation walker */ typedef struct _ia32_transform_env_t { - const arch_env_t *arch_env; /**< The arch_env */ firm_dbg_module_t *mod; /**< The firm debugger */ dbg_info *dbg; /**< The node debug info */ ir_graph *irg; /**< The irg, the node should be created in */ @@ -43,4 +63,14 @@ typedef struct _ia32_transform_env_t { ia32_code_gen_t *cg; /**< The code generator */ } ia32_transform_env_t; +/** + * Creates the unique per irg GP NoReg node. + */ +ir_node *ia32_new_NoReg_gp(ia32_code_gen_t *cg); + +/** + * Creates the unique per irg FP NoReg node. + */ +ir_node *ia32_new_NoReg_fp(ia32_code_gen_t *cg); + #endif /* _BEARCH_IA32_T_H_ */