added new licence header
[libfirm] / ir / be / ppc32 / ppc32_nodes_attr.h
1 /*
2  * Copyright (C) 1995-2007 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 #ifndef _PPC32_NODES_ATTR_H_
21 #define _PPC32_NODES_ATTR_H_
22
23 #include "../bearch_t.h"
24
25 typedef struct
26 {
27         unsigned shift:5;
28         unsigned maskA:5;
29         unsigned maskB:5;
30 } rlwimi_const_t;
31
32
33 typedef enum {
34         ppc32_ac_None,
35         ppc32_ac_Const,
36         ppc32_ac_SymConst,
37         ppc32_ac_FrameEntity,
38         ppc32_ac_RlwimiConst,
39         ppc32_ac_BranchProj,
40         ppc32_ac_Offset
41 } ppc32_attr_content_type;
42
43 typedef enum {
44         ppc32_ao_None, ppc32_ao_Lo16, ppc32_ao_Hi16, ppc32_ao_Ha16, ppc32_ao_Illegal
45 } ppc32_attr_offset_mode;
46
47 typedef struct _ppc32_attr_t {
48         arch_irn_flags_t flags;     /**< indicating if spillable, rematerializeable ... etc. */
49         int              n_res;     /**< number of results for this node */
50
51         const arch_register_req_t **in_req;  /**< register requirements for arguments */
52         const arch_register_req_t **out_req; /**< register requirements for results */
53
54         ppc32_attr_content_type content_type;
55         ppc32_attr_offset_mode offset_mode;
56         union {
57                 tarval *constant_tarval;
58                 ident *symconst_ident;
59                 ir_entity *frame_entity;
60                 rlwimi_const_t rlwimi_const;
61                 int proj_nr;
62                 int offset;
63                 void* empty;
64         } data;
65
66         /* must be last, dynamically allocated */
67         const arch_register_t *slots[1];       /**< register slots for assigned registers */
68 } ppc32_attr_t;
69
70 #endif /* _PPC32_NODES_ATTR_H_ */