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 IR transformation from firm into ia32-Firm.
23 * @author Christian Wuerdig, Matthias Braun
26 #ifndef FIRM_BE_IA32_IA32_TRANSFORM_H
27 #define FIRM_BE_IA32_IA32_TRANSFORM_H
29 #include "firm_config.h"
30 #include "bearch_ia32_t.h"
33 * Transform firm nodes to x86 assembler nodes
35 void ia32_transform_graph(ia32_code_gen_t *cg);
39 * Prints the old node name on cg obst and returns a pointer to it.
41 const char *ia32_get_old_node_name(ia32_code_gen_t *cg, ir_node *irn);
45 * Some constants needed for code generation.
46 * Generated on demand.
49 ia32_SSIGN, /**< SSE2 single precision sign */
50 ia32_DSIGN, /**< SSE2 double precision sign */
51 ia32_SABS, /**< SSE2 single precision ABS mask */
52 ia32_DABS, /**< SSE2 double precision ABS mask */
53 ia32_INTMAX, /**< x87 single precision INTMAX */
54 ia32_known_const_max /**< last constant */
57 static const arch_register_req_t no_register_req = {
58 arch_register_req_type_none,
60 NULL, /* limit bitset */
66 * An assembler constraint.
68 typedef struct constraint_t constraint_t;
70 const arch_register_class_t *cls;
71 unsigned allowed_registers;
72 char all_registers_allowed;
79 * Generate a known floating point constant
81 ir_entity *ia32_gen_fp_known_const(ia32_known_const_t kct);
83 void ia32_add_missing_keeps(ia32_code_gen_t *cg);
86 * Skip all Down-Conv's on a given node and return the resulting node.
88 ir_node *ia32_skip_downconv(ir_node *node);
91 * Get a primitive type for a mode.
93 ir_type *ia32_get_prim_type(pmap *types, ir_mode *mode);
96 * Return true if a mode can be stored in the GP register set
98 int ia32_mode_needs_gp_reg(ir_mode *mode);
100 void ia32_parse_asm_constraints(constraint_t *constraint, const char *c);
101 void ia32_parse_clobber(ir_node *node, int pos, constraint_t *constraint,
102 const char *clobber);
105 * returns register by name (used for determining clobber specifications in
108 const arch_register_t *ia32_get_clobber_register(const char *clobber);
110 #endif /* FIRM_BE_IA32_IA32_TRANSFORM_H */