we don't need no stinking selfs
[libfirm] / ir / be / ppc32 / ppc32_nodes_attr.h
1 /*
2  * Copyright (C) 1995-2008 University of Karlsruhe.  All right reserved.
3  *
4  * This file is part of libFirm.
5  *
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.
10  *
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.
14  *
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
17  * PURPOSE.
18  */
19
20 /**
21  * @file
22  * @brief   declarations for ppc32 node attributes
23  * @author  Moritz Kroll, Jens Mueller
24  * @version $Id$
25  */
26 #ifndef FIRM_BE_PPC32_PPC32_NODES_ATTR_H
27 #define FIRM_BE_PPC32_PPC32_NODES_ATTR_H
28
29 #include "../bearch_t.h"
30
31 typedef struct
32 {
33         unsigned shift:5;
34         unsigned maskA:5;
35         unsigned maskB:5;
36 } rlwimi_const_t;
37
38
39 typedef enum {
40         ppc32_ac_None,
41         ppc32_ac_Const,
42         ppc32_ac_SymConst,
43         ppc32_ac_FrameEntity,
44         ppc32_ac_RlwimiConst,
45         ppc32_ac_BranchProj,
46         ppc32_ac_Offset
47 } ppc32_attr_content_type;
48
49 typedef enum {
50         ppc32_ao_None, ppc32_ao_Lo16, ppc32_ao_Hi16, ppc32_ao_Ha16, ppc32_ao_Illegal
51 } ppc32_attr_offset_mode;
52
53 typedef struct _ppc32_attr_t {
54         arch_irn_flags_t flags;     /**< indicating if spillable, rematerializeable ... etc. */
55
56         const arch_register_req_t **in_req;  /**< register requirements for arguments */
57         const arch_register_req_t **out_req; /**< register requirements for results */
58
59         ppc32_attr_content_type content_type;
60         ppc32_attr_offset_mode offset_mode;
61         union {
62                 tarval *constant_tarval;
63                 ident *symconst_ident;
64                 ir_entity *frame_entity;
65                 rlwimi_const_t rlwimi_const;
66                 int proj_nr;
67                 int offset;
68                 void* empty;
69         } data;
70
71         const arch_register_t **slots;       /**< register slots for assigned registers */
72 } ppc32_attr_t;
73
74 #endif