X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=ir%2Fbe%2Fmips%2Fmips_nodes_attr.h;h=e08ab998259c0f2e785e415f9e7524951d1acd46;hb=29bb6875dc277a493d3764d1ef69d05100de03c0;hp=fc44e3da36b5593a20d15b0f47a1b80941486860;hpb=18dfdacb6faf2f93d4f6f9a6362584f8c7eb30a1;p=libfirm diff --git a/ir/be/mips/mips_nodes_attr.h b/ir/be/mips/mips_nodes_attr.h index fc44e3da3..e08ab9982 100644 --- a/ir/be/mips/mips_nodes_attr.h +++ b/ir/be/mips/mips_nodes_attr.h @@ -1,35 +1,64 @@ -#ifndef _MIPS_NODES_ATTR_H_ -#define _MIPS_NODES_ATTR_H_ +/* + * Copyright (C) 1995-2008 University of Karlsruhe. All right reserved. + * + * This file is part of libFirm. + * + * This file may be distributed and/or modified under the terms of the + * GNU General Public License version 2 as published by the Free Software + * Foundation and appearing in the file LICENSE.GPL included in the + * packaging of this file. + * + * Licensees holding valid libFirm Professional Edition licenses may use + * this file in accordance with the libFirm Commercial License. + * Agreement provided with the Software. + * + * This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE + * WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE. + */ -#include "../bearch.h" +/** + * @file + * @brief declaration of attributes for mips nodes + * @author Matthias Braun + * @version $Id$ + */ +#ifndef FIRM_BE_MIPS_MIPS_NODES_ATTR_H +#define FIRM_BE_MIPS_MIPS_NODES_ATTR_H + +#include "../bearch_t.h" #include "irmode_t.h" +#include "irnode_t.h" -typedef struct _mips_register_req_t { - const arch_register_req_t req; - int same_pos; /**<< in case of "should be same" we need to remember the pos to get the irn */ - int different_pos; /**<< in case of "should be different" we need to remember the pos to get the irn */ -} mips_register_req_t; +typedef struct mips_attr_t { + except_attr exc; /**< the exception attribute. MUST be the first one. */ + arch_irn_flags_t flags; /**< indicating if spillable, rematerializeable ... etc. */ + int switch_default_pn; /**< proj number of default case in switch */ -typedef struct _mips_attr_t { - arch_irn_flags_t flags; /**<< indicating if spillable, rematerializeable ... etc. */ - int n_res; /**<< number of results for this node */ + const arch_register_req_t **in_req; /**< register requirements for arguments */ + const arch_register_req_t **out_req; /**< register requirements for results */ - tarval *tv; /**<< contains the immediate value (if the node has any) */ - ident *symconst_id; /**<< contains the ident (for la operations) */ + const arch_register_t **slots; /**< register slots for assigned registers */ +} mips_attr_t; - union { - ir_mode *load_store_mode; /**<< contains the mode of a load/store */ - ir_mode *original_mode; /**<< contains the original mode of the node */ - } modes; - entity *stack_entity; /**<< contains the entity on the stack for a load/store mode */ - int stack_entity_offset; /**<< contains the real stack offset for the entity */ - int switch_default_pn; /**< proj number of default case in switch */ +typedef enum mips_immediate_type_t { + MIPS_IMM_CONST, + MIPS_IMM_SYMCONST_LO, + MIPS_IMM_SYMCONST_HI +} mips_immediate_type_t; - const mips_register_req_t **in_req; /**<< register requirements for arguments */ - const mips_register_req_t **out_req; /**<< register requirements for results */ +typedef struct mips_immediate_attr_t { + mips_attr_t attr; + mips_immediate_type_t imm_type; + ir_entity *entity; + long val; +} mips_immediate_attr_t; - const arch_register_t **slots; /**<< register slots for assigned registers */ -} mips_attr_t; +typedef struct mips_load_store_attr_t { + mips_attr_t attr; + ir_entity *stack_entity; + long offset; +} mips_load_store_attr_t; -#endif /* _mips_NODES_ATTR_H_ */ +#endif