2 * Copyright (C) 1995-2008 University of Karlsruhe. All right reserved.
4 * This file is part of libFirm.
6 * This file may be distributed and/or modified under the terms of the
7 * GNU General Public License version 2 as published by the Free Software
8 * Foundation and appearing in the file LICENSE.GPL included in the
9 * packaging of this file.
11 * Licensees holding valid libFirm Professional Edition licenses may use
12 * this file in accordance with the libFirm Commercial License.
13 * Agreement provided with the Software.
15 * This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
16 * WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR
22 * @brief This file implements the common parts of IR transformation from
23 * firm into ia32-Firm.
24 * @author Matthias Braun, Sebastian Buchwald
26 #ifndef FIRM_BE_IA32_IA32_COMMON_TRANSFORM_H
27 #define FIRM_BE_IA32_IA32_COMMON_TRANSFORM_H
29 #include "firm_types.h"
30 #include "bearch_ia32_t.h"
33 * An assembler constraint.
35 typedef struct constraint_t constraint_t;
37 const arch_register_class_t *cls;
38 unsigned allowed_registers;
39 char all_registers_allowed;
45 extern ir_heights_t *ia32_heights;
46 extern int ia32_no_pic_adjust;
48 ir_type *ia32_get_prim_type(const ir_mode *mode);
51 * Get an atomic entity that is initialized with a tarval forming
54 ir_entity *ia32_create_float_const_entity(ia32_isa_t *isa, ir_tarval *tv,
58 * Creates an immediate.
60 * @param irg The IR graph the node belongs to.
61 * @param symconst if set, create a SymConst immediate
62 * @param symconst_sign sign for the symconst
63 * @param val integer value for the immediate
65 ir_node *ia32_create_Immediate(ir_graph *irg, ir_entity *symconst, int symconst_sign, long val);
68 * returns register by name (used for determining clobber specifications in
71 const arch_register_t *ia32_get_clobber_register(const char *clobber);
74 * Return true if a mode can be stored in the GP register set.
76 int ia32_mode_needs_gp_reg(ir_mode *mode);
79 * generates code for a ASM node
81 ir_node *ia32_gen_ASM(ir_node *node);
84 * Transforms a CopyB node.
86 * @return The transformed node.
88 ir_node *ia32_gen_CopyB(ir_node *node);
91 * Transform the Thread Local Storage Proj.
93 ir_node *ia32_gen_Proj_tls(ir_node *node);
96 * This function just sets the register for the Unknown node
97 * as this is not done during register allocation because Unknown
98 * is an "ignore" node.
100 ir_node *ia32_gen_Unknown(ir_node *node);
102 const arch_register_req_t *ia32_parse_clobber(const char *clobber);
105 * Checks whether other node inputs depend on the am_candidate (via mem-proj).
107 int ia32_prevents_AM(ir_node *const block, ir_node *const am_candidate,
108 ir_node *const other);
110 ir_node *ia32_try_create_Immediate(ir_node *node, char immediate_constraint_type);