2 * Copyright (C) 1995-2007 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 Register param constraints and some other register handling tools.
23 * @author Christian Wuerdig
26 #ifndef FIRM_BE_IA32_IA32_MAP_REGS_H
27 #define FIRM_BE_IA32_IA32_MAP_REGS_H
33 #include "../bearch_t.h"
34 #include "bearch_ia32_t.h"
37 * Convenience macro to check if register <code>out</code>
38 * and register <code>in</code> are equal.
40 #define REGS_ARE_EQUAL(out, in) \
41 ((arch_register_get_class(out) == arch_register_get_class(in)) && \
42 (arch_register_get_index(out) == arch_register_get_index(in)))
45 * Set compare function
47 int ia32_cmp_irn_reg_assoc(const void *a, const void *b, size_t len);
50 * Assigns a register to a firm node.
52 void ia32_set_firm_reg(ir_node *irn, const arch_register_t *reg, set *reg_set);
55 * Gets the register assigned to a firm node.
57 const arch_register_t *ia32_get_firm_reg(const ir_node *irn, set *reg_set);
60 * Enters for each general purpose register the corresponding 16bit
63 void ia32_build_16bit_reg_map(pmap *reg_map);
66 * Enters for each general purpose register the corresponding 8bit
69 void ia32_build_8bit_reg_map(pmap *reg_map);
70 void ia32_build_8bit_reg_map_high(pmap *reg_map);
73 * Returns the corresponding mapped name for a register.
75 const char *ia32_get_mapped_reg_name(pmap *reg_map, const arch_register_t *reg);
78 * Check all parameters and determine the maximum number of parameters
79 * to pass in gp regs resp. in fp regs.
81 * @param n The number of parameters
82 * @param modes The list of the parameter modes
83 * @param n_int Holds the number of int parameters to be passed in regs after the call
84 * @param n_float Holds the number of float parameters to be passed in regs after the call
85 * @return The number of the last parameter to be passed in register
87 int ia32_get_n_regparam_class(ia32_code_gen_t *cg, int n, ir_mode **modes);
90 * Returns the register for parameter nr.
92 const arch_register_t *ia32_get_RegParam_reg(ia32_code_gen_t *cg, unsigned cc,
93 unsigned nr, ir_mode *mode);
95 #endif /* FIRM_BE_IA32_IA32_MAP_REGS_H */