111
|
1 /* Common data structures used for builtin handling on S/390.
|
|
2 Copyright (C) 2015-2017 Free Software Foundation, Inc.
|
|
3
|
|
4 Contributed by Andreas Krebbel (Andreas.Krebbel@de.ibm.com).
|
|
5
|
|
6 This file is part of GCC.
|
|
7
|
|
8 GCC is free software; you can redistribute it and/or modify it
|
|
9 under the terms of the GNU General Public License as published by
|
|
10 the Free Software Foundation; either version 3, or (at your option)
|
|
11 any later version.
|
|
12
|
|
13 GCC is distributed in the hope that it will be useful, but WITHOUT
|
|
14 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
|
|
15 or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
|
|
16 License for more details.
|
|
17
|
|
18 You should have received a copy of the GNU General Public License
|
|
19 along with GCC; see the file COPYING3. If not see
|
|
20 <http://www.gnu.org/licenses/>. */
|
|
21
|
|
22 /* This files contains data structure definitions which can be used by
|
|
23 s390-builtins.c as well as s390-c.c. Since the latter is
|
|
24 considered to be part of the front-end we have to be careful not
|
|
25 to use any of tree and rtx like data structures. */
|
|
26
|
|
27 /* Builtin types, data and prototypes. */
|
|
28
|
|
29 enum s390_builtin_type_index
|
|
30 {
|
|
31 #undef DEF_TYPE
|
|
32 #undef DEF_POINTER_TYPE
|
|
33 #undef DEF_DISTINCT_TYPE
|
|
34 #undef DEF_VECTOR_TYPE
|
|
35 #undef DEF_OPAQUE_VECTOR_TYPE
|
|
36 #undef DEF_FN_TYPE
|
|
37 #undef DEF_OV_TYPE
|
|
38 #define DEF_TYPE(INDEX, ...) INDEX,
|
|
39 #define DEF_POINTER_TYPE(INDEX, ...) INDEX,
|
|
40 #define DEF_DISTINCT_TYPE(INDEX, ...) INDEX,
|
|
41 #define DEF_VECTOR_TYPE(INDEX, ...) INDEX,
|
|
42 #define DEF_OPAQUE_VECTOR_TYPE(INDEX, ...) INDEX,
|
|
43 #define DEF_FN_TYPE(...)
|
|
44 #define DEF_OV_TYPE(...)
|
|
45 #include "s390-builtin-types.def"
|
|
46 BT_MAX
|
|
47 };
|
|
48
|
|
49 enum s390_builtin_fn_type_index
|
|
50 {
|
|
51 #undef DEF_TYPE
|
|
52 #undef DEF_POINTER_TYPE
|
|
53 #undef DEF_DISTINCT_TYPE
|
|
54 #undef DEF_VECTOR_TYPE
|
|
55 #undef DEF_OPAQUE_VECTOR_TYPE
|
|
56 #undef DEF_FN_TYPE
|
|
57 #undef DEF_OV_TYPE
|
|
58 #define DEF_TYPE(...)
|
|
59 #define DEF_POINTER_TYPE(...)
|
|
60 #define DEF_DISTINCT_TYPE(...)
|
|
61 #define DEF_VECTOR_TYPE(...)
|
|
62 #define DEF_OPAQUE_VECTOR_TYPE(...)
|
|
63 #define DEF_FN_TYPE(INDEX, ...) INDEX,
|
|
64 #define DEF_OV_TYPE(...)
|
|
65 #include "s390-builtin-types.def"
|
|
66 BT_FN_MAX
|
|
67 };
|
|
68
|
|
69 enum s390_builtin_ov_type_index
|
|
70 {
|
|
71 #undef DEF_TYPE
|
|
72 #undef DEF_POINTER_TYPE
|
|
73 #undef DEF_DISTINCT_TYPE
|
|
74 #undef DEF_VECTOR_TYPE
|
|
75 #undef DEF_OPAQUE_VECTOR_TYPE
|
|
76 #undef DEF_FN_TYPE
|
|
77 #undef DEF_OV_TYPE
|
|
78 #define DEF_TYPE(...)
|
|
79 #define DEF_POINTER_TYPE(...)
|
|
80 #define DEF_DISTINCT_TYPE(...)
|
|
81 #define DEF_VECTOR_TYPE(...)
|
|
82 #define DEF_OPAQUE_VECTOR_TYPE(...)
|
|
83 #define DEF_FN_TYPE(...)
|
|
84 #define DEF_OV_TYPE(INDEX, ...) INDEX,
|
|
85 #include "s390-builtin-types.def"
|
|
86 BT_OV_MAX
|
|
87 };
|
|
88
|
|
89 #define MAX_OV_OPERANDS 6
|
|
90
|
|
91 extern tree s390_builtin_types[BT_MAX];
|
|
92 extern tree s390_builtin_fn_types[BT_FN_MAX];
|
|
93
|
|
94 /* Builtins. */
|
|
95
|
|
96 enum s390_builtins {
|
|
97 #undef B_DEF
|
|
98 #undef OB_DEF
|
|
99 #undef OB_DEF_VAR
|
|
100 #define B_DEF(NAME, ...) S390_BUILTIN_##NAME,
|
|
101 #define OB_DEF(...)
|
|
102 #define OB_DEF_VAR(...)
|
|
103
|
|
104 #include "s390-builtins.def"
|
|
105 S390_BUILTIN_MAX
|
|
106 };
|
|
107
|
|
108
|
|
109 /* Generate an enumeration of all overloaded builtins defined with
|
|
110 OB_DEF in s390-builtins.def. */
|
|
111 enum s390_overloaded_builtins {
|
|
112 #undef B_DEF
|
|
113 #undef OB_DEF
|
|
114 #undef OB_DEF_VAR
|
|
115 #define B_DEF(...)
|
|
116 #define OB_DEF(NAME, ...) S390_OVERLOADED_BUILTIN_##NAME,
|
|
117 #define OB_DEF_VAR(...)
|
|
118 #include "s390-builtins.def"
|
|
119 S390_OVERLOADED_BUILTIN_MAX
|
|
120 };
|
|
121
|
|
122 /* Generate an enumeration of all variants of overloaded builtins
|
|
123 defined with OB_DEF_VAR in s390-builtins.def. */
|
|
124 enum s390_overloaded_builtin_vars {
|
|
125 #undef B_DEF
|
|
126 #undef OB_DEF
|
|
127 #undef OB_DEF_VAR
|
|
128 #define B_DEF(...)
|
|
129 #define OB_DEF(...)
|
|
130 #define OB_DEF_VAR(NAME, ...) S390_OVERLOADED_BUILTIN_VAR_##NAME,
|
|
131 #include "s390-builtins.def"
|
|
132 S390_OVERLOADED_BUILTIN_VAR_MAX
|
|
133 };
|
|
134
|
|
135 #define S390_OVERLOADED_BUILTIN_OFFSET S390_BUILTIN_MAX
|
|
136 #define S390_OVERLOADED_BUILTIN_VAR_OFFSET \
|
|
137 (S390_BUILTIN_MAX + S390_OVERLOADED_BUILTIN_MAX)
|
|
138 #define S390_ALL_BUILTIN_MAX \
|
|
139 (S390_BUILTIN_MAX + S390_OVERLOADED_BUILTIN_MAX + \
|
|
140 S390_OVERLOADED_BUILTIN_VAR_MAX)
|
|
141
|
|
142 extern const unsigned int bflags_builtin[S390_BUILTIN_MAX + 1];
|
|
143 extern const unsigned int opflags_builtin[S390_BUILTIN_MAX + 1];
|
|
144
|
|
145 extern const unsigned int
|
|
146 bflags_overloaded_builtin[S390_OVERLOADED_BUILTIN_MAX + 1];
|
|
147 extern const unsigned int
|
|
148 bflags_overloaded_builtin_var[S390_OVERLOADED_BUILTIN_VAR_MAX + 1];
|
|
149 extern const unsigned int
|
|
150 opflags_overloaded_builtin_var[S390_OVERLOADED_BUILTIN_VAR_MAX + 1];
|
|
151
|
|
152 static inline unsigned int
|
|
153 bflags_for_builtin (int fcode)
|
|
154 {
|
|
155 if (fcode >= S390_OVERLOADED_BUILTIN_VAR_OFFSET)
|
|
156 gcc_unreachable ();
|
|
157 else if (fcode >= S390_OVERLOADED_BUILTIN_OFFSET)
|
|
158 return bflags_overloaded_builtin[fcode - S390_BUILTIN_MAX];
|
|
159 else
|
|
160 return bflags_builtin[fcode];
|
|
161 }
|
|
162
|
|
163 static inline unsigned int
|
|
164 opflags_for_builtin (int fcode)
|
|
165 {
|
|
166 if (fcode >= S390_OVERLOADED_BUILTIN_VAR_OFFSET)
|
|
167 return opflags_overloaded_builtin_var[fcode -
|
|
168 S390_OVERLOADED_BUILTIN_VAR_OFFSET];
|
|
169 else if (fcode >= S390_OVERLOADED_BUILTIN_OFFSET)
|
|
170 gcc_unreachable ();
|
|
171 else
|
|
172 return opflags_builtin[fcode];
|
|
173 }
|
|
174
|
|
175 extern tree s390_builtin_decls[S390_BUILTIN_MAX +
|
|
176 S390_OVERLOADED_BUILTIN_MAX +
|
|
177 S390_OVERLOADED_BUILTIN_VAR_MAX];
|