* @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"
/**
int same_as;
};
-extern ia32_code_gen_t *env_cg;
+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 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
*/
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.
*/
/**
* 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