1 /* Common data structures used for builtin handling on S/390.
2 Copyright (C) 2015-2017 Free Software Foundation, Inc.
4 Contributed by Andreas Krebbel (Andreas.Krebbel@de.ibm.com).
6 This file is part of GCC.
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)
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.
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/>. */
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. */
27 /* Builtin types, data and prototypes. */
29 enum s390_builtin_type_index
32 #undef DEF_POINTER_TYPE
33 #undef DEF_DISTINCT_TYPE
34 #undef DEF_VECTOR_TYPE
35 #undef DEF_OPAQUE_VECTOR_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"
49 enum s390_builtin_fn_type_index
52 #undef DEF_POINTER_TYPE
53 #undef DEF_DISTINCT_TYPE
54 #undef DEF_VECTOR_TYPE
55 #undef DEF_OPAQUE_VECTOR_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"
69 enum s390_builtin_ov_type_index
72 #undef DEF_POINTER_TYPE
73 #undef DEF_DISTINCT_TYPE
74 #undef DEF_VECTOR_TYPE
75 #undef DEF_OPAQUE_VECTOR_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"
89 #define MAX_OV_OPERANDS 6
91 extern tree s390_builtin_types
[BT_MAX
];
92 extern tree s390_builtin_fn_types
[BT_FN_MAX
];
100 #define B_DEF(NAME, ...) S390_BUILTIN_##NAME,
102 #define OB_DEF_VAR(...)
104 #include "s390-builtins.def"
109 /* Generate an enumeration of all overloaded builtins defined with
110 OB_DEF in s390-builtins.def. */
111 enum s390_overloaded_builtins
{
116 #define OB_DEF(NAME, ...) S390_OVERLOADED_BUILTIN_##NAME,
117 #define OB_DEF_VAR(...)
118 #include "s390-builtins.def"
119 S390_OVERLOADED_BUILTIN_MAX
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
{
130 #define OB_DEF_VAR(NAME, ...) S390_OVERLOADED_BUILTIN_VAR_##NAME,
131 #include "s390-builtins.def"
132 S390_OVERLOADED_BUILTIN_VAR_MAX
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)
142 extern const unsigned int bflags_builtin
[S390_BUILTIN_MAX
+ 1];
143 extern const unsigned int opflags_builtin
[S390_BUILTIN_MAX
+ 1];
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];
152 static inline unsigned int
153 bflags_for_builtin (int fcode
)
155 if (fcode
>= S390_OVERLOADED_BUILTIN_VAR_OFFSET
)
157 else if (fcode
>= S390_OVERLOADED_BUILTIN_OFFSET
)
158 return bflags_overloaded_builtin
[fcode
- S390_BUILTIN_MAX
];
160 return bflags_builtin
[fcode
];
163 static inline unsigned int
164 opflags_for_builtin (int fcode
)
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
)
172 return opflags_builtin
[fcode
];
175 extern tree s390_builtin_decls
[S390_BUILTIN_MAX
+
176 S390_OVERLOADED_BUILTIN_MAX
+
177 S390_OVERLOADED_BUILTIN_VAR_MAX
];