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"
36 * Convenience macro to check if register <code>out<\code>
37 * and register <code>in<\code> are equal.
39 #define REGS_ARE_EQUAL(out, in) \
40 ((arch_register_get_class(out) == arch_register_get_class(in)) && \
41 (arch_register_get_index(out) == arch_register_get_index(in)))
44 * Set compare function
46 int ia32_cmp_irn_reg_assoc(const void *a, const void *b, size_t len);
49 * Assigns a register to a firm node.
51 void ia32_set_firm_reg(ir_node *irn, const arch_register_t *reg, set *reg_set);
54 * Gets the register assigned to a firm node.
56 const arch_register_t *ia32_get_firm_reg(const ir_node *irn, set *reg_set);
59 * Enters for each general purpose register the corresponding 16bit
62 void ia32_build_16bit_reg_map(pmap *reg_map);
65 * Enters for each general purpose register the corresponding 8bit
68 void ia32_build_8bit_reg_map(pmap *reg_map);
71 * Returns the corresponding mapped name for a register.
73 const char *ia32_get_mapped_reg_name(pmap *reg_map, const arch_register_t *reg);
76 * Check all parameters and determine the maximum number of parameters
77 * to pass in gp regs resp. in fp regs.
79 * @param n The number of parameters
80 * @param modes The list of the parameter modes
81 * @param n_int Holds the number of int parameters to be passed in regs after the call
82 * @param n_float Holds the number of float parameters to be passed in regs after the call
83 * @return The number of the last parameter to be passed in register
85 int ia32_get_n_regparam_class(int n, ir_mode **modes, int *n_int, int *n_float);
88 * Returns the register for parameter nr.
90 * @param n The number of parameters
91 * @param modes The list of the parameter modes
92 * @param nr The number of the parameter to return the requirements for
93 * @param cc The calling convention
94 * @return The register
96 const arch_register_t *ia32_get_RegParam_reg(int n, ir_mode **modes, long nr, unsigned cc);
98 #endif /* FIRM_BE_IA32_IA32_MAP_REGS_H */