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;
72 const arch_register_req_t **out_reqs;
74 const arch_register_req_t *req;
75 unsigned immediate_possible;
80 * Generate a known floating point constant
82 ir_entity *ia32_gen_fp_known_const(ia32_known_const_t kct);
84 void ia32_add_missing_keeps(ia32_code_gen_t *cg);
87 * Skip all Down-Conv's on a given node and return the resulting node.
89 ir_node *ia32_skip_downconv(ir_node *node);
92 * Get a primitive type for a mode.
94 ir_type *ia32_get_prim_type(pmap *types, ir_mode *mode);
97 * Return true if a mode can be stored in the GP register set
99 int ia32_mode_needs_gp_reg(ir_mode *mode);
101 void parse_asm_constraint(int pos, constraint_t *constraint, const char *c);
102 void parse_clobber(ir_node *node, int pos, constraint_t *constraint,
103 const char *clobber);
106 * returns register by name (used for determining clobber specifications in
109 const arch_register_t *ia32_get_clobber_register(const char *clobber);
111 #endif /* FIRM_BE_IA32_IA32_TRANSFORM_H */