OSDN Git Service

3043b8dc00020152f42a9d1a49e1721b2e7dab83
[pf3gnuchains/gcc-fork.git] / gcc / builtin-types.def
1 /* Copyright (C) 2001, 2002, 2003 Free Software Foundation, Inc.
2
3 This file is part of GCC.
4
5 GCC is free software; you can redistribute it and/or modify it under
6 the terms of the GNU General Public License as published by the Free
7 Software Foundation; either version 2, or (at your option) any later
8 version.
9
10 GCC is distributed in the hope that it will be useful, but WITHOUT ANY
11 WARRANTY; without even the implied warranty of MERCHANTABILITY or
12 FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
13 for more details.
14
15 You should have received a copy of the GNU General Public License
16 along with GCC; see the file COPYING.  If not, write to the Free
17 Software Foundation, 59 Temple Place - Suite 330, Boston, MA
18 02111-1307, USA.  */
19
20 /* This header provides a declaritive way of describing the types that
21    are used when declaring builtin functions.
22
23    Before including this header, you must define the following macros:
24
25    DEF_PRIMITIVE_TYPE (ENUM, TYPE)
26
27      The ENUM is an identifier indicating which type is being defined.
28      TYPE is an expression for a `tree' that represents the type.
29
30    DEF_FUNCTION_TYPE_0 (ENUM, RETURN)
31    DEF_FUNCTION_TYPE_1 (ENUM, RETURN, ARG1)
32    DEF_FUNCTION_TYPE_2 (ENUM, RETURN, ARG1, ARG2)
33    DEF_FUNCTION_TYPE_3 (ENUM, RETURN, ARG1, ARG2, ARG3)
34    DEF_FUNCTION_TYPE_4 (ENUM, RETURN, ARG1, ARG2, ARG3, ARG4)
35
36      These macros describe function types.  ENUM is as above.  The
37      RETURN type is one of the enumerals already defined.  ARG1, ARG2,
38      and ARG3 give the types of the arguments, similarly.
39
40    DEF_FUNCTION_TYPE_VAR_0 (ENUM, RETURN)
41    DEF_FUNCTION_TYPE_VAR_1 (ENUM, RETURN, ARG1)
42    DEF_FUNCTION_TYPE_VAR_2 (ENUM, RETURN, ARG1, ARG2)
43    DEF_FUNCTION_TYPE_VAR_3 (ENUM, RETURN, ARG1, ARG2, ARG3)
44
45      Similar, but for function types that take variable arguments.
46      For example:
47
48        DEF_FUNCTION_TYPE_1 (BT_INT_DOUBLE, BT_INT, BT_DOUBLE)
49
50      describes the type `int ()(double)', using the enumeral
51      BT_INT_DOUBLE, whereas:
52
53        DEF_FUNCTION_TYPE_VAR_1 (BT_INT_DOUBLE_VAR, BT_INT, BT_DOUBLE)
54
55      describes the type `int ()(double, ...)'.
56  
57   DEF_POINTER_TYPE (ENUM, TYPE)
58
59     This macro describes a pointer type.  ENUM is as above; TYPE is
60     the type pointed to.  */
61
62 DEF_PRIMITIVE_TYPE (BT_VOID, void_type_node)
63 DEF_PRIMITIVE_TYPE (BT_INT, integer_type_node)
64 DEF_PRIMITIVE_TYPE (BT_UNSIGNED, unsigned_type_node)
65 DEF_PRIMITIVE_TYPE (BT_LONG, long_integer_type_node)
66 DEF_PRIMITIVE_TYPE (BT_LONGLONG, long_long_integer_type_node)
67 DEF_PRIMITIVE_TYPE (BT_FLOAT, float_type_node)
68 DEF_PRIMITIVE_TYPE (BT_INTMAX, intmax_type_node)
69 DEF_PRIMITIVE_TYPE (BT_DOUBLE, double_type_node)
70 DEF_PRIMITIVE_TYPE (BT_LONGDOUBLE, long_double_type_node)
71 DEF_PRIMITIVE_TYPE (BT_COMPLEX_FLOAT, complex_float_type_node)
72 DEF_PRIMITIVE_TYPE (BT_COMPLEX_DOUBLE, complex_double_type_node)
73 DEF_PRIMITIVE_TYPE (BT_COMPLEX_LONGDOUBLE, complex_long_double_type_node)
74
75 DEF_PRIMITIVE_TYPE (BT_PTR, ptr_type_node)
76 DEF_PRIMITIVE_TYPE (BT_CONST_PTR, const_ptr_type_node)
77 DEF_PRIMITIVE_TYPE (BT_PTRMODE, (*lang_hooks.types.type_for_mode)(ptr_mode, 0))
78 DEF_PRIMITIVE_TYPE (BT_SIZE, size_type_node)
79 DEF_PRIMITIVE_TYPE (BT_SSIZE, signed_size_type_node)
80 DEF_PRIMITIVE_TYPE (BT_STRING, string_type_node)
81 DEF_PRIMITIVE_TYPE (BT_CONST_STRING, const_string_type_node)
82
83 DEF_PRIMITIVE_TYPE (BT_VALIST_REF, va_list_ref_type_node)
84 DEF_PRIMITIVE_TYPE (BT_VALIST_ARG, va_list_arg_type_node)
85
86 DEF_FUNCTION_TYPE_0 (BT_FN_VOID, BT_VOID)
87 DEF_FUNCTION_TYPE_0 (BT_FN_PTR, BT_PTR)
88 DEF_FUNCTION_TYPE_0 (BT_FN_UNSIGNED, BT_UNSIGNED)
89 DEF_FUNCTION_TYPE_0 (BT_FN_FLOAT, BT_FLOAT)
90 DEF_FUNCTION_TYPE_0 (BT_FN_DOUBLE, BT_DOUBLE)
91 /* For "long double" we use LONGDOUBLE (not LONG_DOUBLE) to
92    distinguish it from two types in sequence, "long" followed by
93    "double".  */
94 DEF_FUNCTION_TYPE_0 (BT_FN_LONGDOUBLE, BT_LONGDOUBLE)
95
96 DEF_FUNCTION_TYPE_1 (BT_FN_LONG_LONG, BT_LONG, BT_LONG)
97 DEF_FUNCTION_TYPE_1 (BT_FN_LONGLONG_LONGLONG, BT_LONGLONG, BT_LONGLONG)
98 DEF_FUNCTION_TYPE_1 (BT_FN_INTMAX_INTMAX, BT_INTMAX, BT_INTMAX)
99 DEF_FUNCTION_TYPE_1 (BT_FN_FLOAT_FLOAT, BT_FLOAT, BT_FLOAT)
100 DEF_FUNCTION_TYPE_1 (BT_FN_DOUBLE_DOUBLE, BT_DOUBLE, BT_DOUBLE)
101 DEF_FUNCTION_TYPE_1 (BT_FN_LONGDOUBLE_LONGDOUBLE, 
102                      BT_LONGDOUBLE, BT_LONGDOUBLE)
103 DEF_FUNCTION_TYPE_1 (BT_FN_COMPLEX_FLOAT_COMPLEX_FLOAT, 
104                      BT_COMPLEX_FLOAT, BT_COMPLEX_FLOAT)
105 DEF_FUNCTION_TYPE_1 (BT_FN_COMPLEX_DOUBLE_COMPLEX_DOUBLE, 
106                      BT_COMPLEX_DOUBLE, BT_COMPLEX_DOUBLE)
107 DEF_FUNCTION_TYPE_1 (BT_FN_COMPLEX_LONGDOUBLE_COMPLEX_LONGDOUBLE, 
108                      BT_COMPLEX_LONGDOUBLE, BT_COMPLEX_LONGDOUBLE)
109 DEF_FUNCTION_TYPE_1 (BT_FN_FLOAT_COMPLEX_FLOAT, 
110                      BT_FLOAT, BT_COMPLEX_FLOAT)
111 DEF_FUNCTION_TYPE_1 (BT_FN_DOUBLE_COMPLEX_DOUBLE,
112                      BT_DOUBLE, BT_COMPLEX_DOUBLE)
113 DEF_FUNCTION_TYPE_1 (BT_FN_LONGDOUBLE_COMPLEX_LONGDOUBLE,
114                      BT_LONGDOUBLE, BT_COMPLEX_LONGDOUBLE)
115 DEF_FUNCTION_TYPE_1 (BT_FN_PTR_UNSIGNED, BT_PTR, BT_UNSIGNED)
116 DEF_FUNCTION_TYPE_1 (BT_FN_PTR_SIZE, BT_PTR, BT_SIZE)
117 DEF_FUNCTION_TYPE_1 (BT_FN_INT_INT, BT_INT, BT_INT)
118 DEF_FUNCTION_TYPE_1 (BT_FN_INT_LONG, BT_INT, BT_LONG)
119 DEF_FUNCTION_TYPE_1 (BT_FN_INT_LONGLONG, BT_INT, BT_LONGLONG)
120 DEF_FUNCTION_TYPE_1 (BT_FN_INT_PTR, BT_INT, BT_PTR)
121 DEF_FUNCTION_TYPE_1 (BT_FN_INT_FLOAT, BT_INT, BT_FLOAT)
122 DEF_FUNCTION_TYPE_1 (BT_FN_INT_DOUBLE, BT_INT, BT_DOUBLE)
123 DEF_FUNCTION_TYPE_1 (BT_FN_INT_LONGDOUBLE, BT_INT, BT_LONGDOUBLE)
124 DEF_FUNCTION_TYPE_1 (BT_FN_LONG_FLOAT, BT_LONG, BT_FLOAT)
125 DEF_FUNCTION_TYPE_1 (BT_FN_LONG_DOUBLE, BT_LONG, BT_DOUBLE)
126 DEF_FUNCTION_TYPE_1 (BT_FN_LONG_LONGDOUBLE, BT_LONG, BT_LONGDOUBLE)
127 DEF_FUNCTION_TYPE_1 (BT_FN_LONGLONG_FLOAT, BT_LONGLONG, BT_FLOAT)
128 DEF_FUNCTION_TYPE_1 (BT_FN_LONGLONG_DOUBLE, BT_LONGLONG, BT_DOUBLE)
129 DEF_FUNCTION_TYPE_1 (BT_FN_LONGLONG_LONGDOUBLE, BT_LONGLONG, BT_LONGDOUBLE)
130 DEF_FUNCTION_TYPE_1 (BT_FN_VOID_PTR, BT_VOID, BT_PTR)
131 DEF_FUNCTION_TYPE_1 (BT_FN_SIZE_CONST_STRING, BT_SIZE, BT_CONST_STRING)
132 DEF_FUNCTION_TYPE_1 (BT_FN_INT_CONST_STRING, BT_INT, BT_CONST_STRING)
133 DEF_FUNCTION_TYPE_1 (BT_FN_PTR_PTR, BT_PTR, BT_PTR)
134 DEF_FUNCTION_TYPE_1 (BT_FN_VOID_VALIST_REF, BT_VOID, BT_VALIST_REF)
135 DEF_FUNCTION_TYPE_1 (BT_FN_VOID_INT, BT_VOID, BT_INT)
136 DEF_FUNCTION_TYPE_1 (BT_FN_FLOAT_CONST_STRING, BT_FLOAT, BT_CONST_STRING)
137 DEF_FUNCTION_TYPE_1 (BT_FN_DOUBLE_CONST_STRING, BT_DOUBLE, BT_CONST_STRING)
138 DEF_FUNCTION_TYPE_1 (BT_FN_LONGDOUBLE_CONST_STRING,
139                      BT_LONGDOUBLE, BT_CONST_STRING)
140 DEF_FUNCTION_TYPE_1 (BT_FN_STRING_CONST_STRING, BT_STRING, BT_CONST_STRING)
141
142 DEF_FUNCTION_TYPE_2 (BT_FN_VOID_PTR_INT, BT_VOID, BT_PTR, BT_INT)
143 DEF_FUNCTION_TYPE_2 (BT_FN_STRING_STRING_CONST_STRING, 
144                      BT_STRING, BT_STRING, BT_CONST_STRING)
145 DEF_FUNCTION_TYPE_2 (BT_FN_INT_CONST_STRING_CONST_STRING,
146                      BT_INT, BT_CONST_STRING, BT_CONST_STRING)
147 DEF_FUNCTION_TYPE_2 (BT_FN_STRING_CONST_STRING_CONST_STRING,
148                      BT_STRING, BT_CONST_STRING, BT_CONST_STRING)
149 DEF_FUNCTION_TYPE_2 (BT_FN_SIZE_CONST_STRING_CONST_STRING,
150                      BT_SIZE, BT_CONST_STRING, BT_CONST_STRING)
151 DEF_FUNCTION_TYPE_2 (BT_FN_STRING_CONST_STRING_INT,
152                      BT_STRING, BT_CONST_STRING, BT_INT)
153 DEF_FUNCTION_TYPE_2 (BT_FN_INT_CONST_STRING_PTR,
154                      BT_INT, BT_CONST_STRING, BT_PTR)
155 DEF_FUNCTION_TYPE_2 (BT_FN_INT_INT_PTR,
156                      BT_INT, BT_INT, BT_PTR)
157 DEF_FUNCTION_TYPE_2 (BT_FN_VOID_PTRMODE_PTR,
158                      BT_VOID, BT_PTRMODE, BT_PTR)
159 DEF_FUNCTION_TYPE_2 (BT_FN_VOID_VALIST_REF_VALIST_ARG, 
160                      BT_VOID, BT_VALIST_REF, BT_VALIST_ARG)
161 DEF_FUNCTION_TYPE_2 (BT_FN_LONG_LONG_LONG,
162                      BT_LONG, BT_LONG, BT_LONG)
163 DEF_FUNCTION_TYPE_2 (BT_FN_INT_PTR_CONST_STRING,
164                      BT_INT, BT_PTR, BT_CONST_STRING)
165 DEF_FUNCTION_TYPE_2 (BT_FN_VOID_PTR_SIZE,
166                      BT_VOID, BT_PTR, BT_SIZE)
167 DEF_FUNCTION_TYPE_2 (BT_FN_FLOAT_FLOAT_FLOAT,
168                      BT_FLOAT, BT_FLOAT, BT_FLOAT)
169 DEF_FUNCTION_TYPE_2 (BT_FN_DOUBLE_DOUBLE_DOUBLE,
170                      BT_DOUBLE, BT_DOUBLE, BT_DOUBLE)
171 DEF_FUNCTION_TYPE_2 (BT_FN_LONGDOUBLE_LONGDOUBLE_LONGDOUBLE,
172                      BT_LONGDOUBLE, BT_LONGDOUBLE, BT_LONGDOUBLE)
173 DEF_FUNCTION_TYPE_2 (BT_FN_FLOAT_FLOAT_LONGDOUBLE,
174                      BT_FLOAT, BT_FLOAT, BT_LONGDOUBLE)
175 DEF_FUNCTION_TYPE_2 (BT_FN_DOUBLE_DOUBLE_LONGDOUBLE,
176                      BT_DOUBLE, BT_DOUBLE, BT_LONGDOUBLE)
177 DEF_FUNCTION_TYPE_2 (BT_FN_FLOAT_FLOAT_INT,
178                      BT_FLOAT, BT_FLOAT, BT_INT)
179 DEF_FUNCTION_TYPE_2 (BT_FN_DOUBLE_DOUBLE_INT,
180                      BT_DOUBLE, BT_DOUBLE, BT_INT)
181 DEF_FUNCTION_TYPE_2 (BT_FN_LONGDOUBLE_LONGDOUBLE_INT,
182                      BT_LONGDOUBLE, BT_LONGDOUBLE, BT_INT)
183 DEF_FUNCTION_TYPE_2 (BT_FN_FLOAT_INT_FLOAT,
184                      BT_FLOAT, BT_INT, BT_FLOAT)
185 DEF_FUNCTION_TYPE_2 (BT_FN_DOUBLE_INT_DOUBLE,
186                      BT_DOUBLE, BT_INT, BT_DOUBLE)
187 DEF_FUNCTION_TYPE_2 (BT_FN_LONGDOUBLE_INT_LONGDOUBLE,
188                      BT_LONGDOUBLE, BT_INT, BT_LONGDOUBLE)
189 DEF_FUNCTION_TYPE_2 (BT_FN_FLOAT_FLOAT_LONG,
190                      BT_FLOAT, BT_FLOAT, BT_LONG)
191 DEF_FUNCTION_TYPE_2 (BT_FN_DOUBLE_DOUBLE_LONG,
192                      BT_DOUBLE, BT_DOUBLE, BT_LONG)
193 DEF_FUNCTION_TYPE_2 (BT_FN_LONGDOUBLE_LONGDOUBLE_LONG,
194                      BT_LONGDOUBLE, BT_LONGDOUBLE, BT_LONG)
195 DEF_FUNCTION_TYPE_2 (BT_FN_INT_CONST_STRING_VALIST_ARG,
196                      BT_INT, BT_CONST_STRING, BT_VALIST_ARG)
197 DEF_FUNCTION_TYPE_2 (BT_FN_PTR_SIZE_SIZE,
198                      BT_PTR, BT_SIZE, BT_SIZE)
199
200 DEF_FUNCTION_TYPE_3 (BT_FN_STRING_STRING_CONST_STRING_SIZE,
201                      BT_STRING, BT_STRING, BT_CONST_STRING, BT_SIZE)
202 DEF_FUNCTION_TYPE_3 (BT_FN_INT_CONST_STRING_CONST_STRING_SIZE,
203                      BT_INT, BT_CONST_STRING, BT_CONST_STRING, BT_SIZE)
204 DEF_FUNCTION_TYPE_3 (BT_FN_PTR_PTR_CONST_PTR_SIZE,
205                      BT_PTR, BT_PTR, BT_CONST_PTR, BT_SIZE)
206 DEF_FUNCTION_TYPE_3 (BT_FN_INT_CONST_PTR_CONST_PTR_SIZE,
207                      BT_INT, BT_CONST_PTR, BT_CONST_PTR, BT_SIZE)
208 DEF_FUNCTION_TYPE_3 (BT_FN_PTR_PTR_INT_SIZE,
209                      BT_PTR, BT_PTR, BT_INT, BT_SIZE)
210 DEF_FUNCTION_TYPE_3 (BT_FN_VOID_PTR_INT_INT,
211                      BT_VOID, BT_PTR, BT_INT, BT_INT)
212 DEF_FUNCTION_TYPE_3 (BT_FN_VOID_CONST_PTR_PTR_SIZE,
213                      BT_VOID, BT_CONST_PTR, BT_PTR, BT_SIZE)
214 DEF_FUNCTION_TYPE_3 (BT_FN_INT_STRING_CONST_STRING_VALIST_ARG,
215                      BT_INT, BT_STRING, BT_CONST_STRING, BT_VALIST_ARG)
216 DEF_FUNCTION_TYPE_3 (BT_FN_INT_CONST_STRING_CONST_STRING_VALIST_ARG,
217                      BT_INT, BT_CONST_STRING, BT_CONST_STRING, BT_VALIST_ARG)
218 DEF_FUNCTION_TYPE_3 (BT_FN_INT_PTR_CONST_STRING_VALIST_ARG,
219                      BT_INT, BT_PTR, BT_CONST_STRING, BT_VALIST_ARG)
220 DEF_FUNCTION_TYPE_3 (BT_FN_STRING_CONST_STRING_CONST_STRING_INT,
221                      BT_STRING, BT_CONST_STRING, BT_CONST_STRING, BT_INT)
222 DEF_FUNCTION_TYPE_3 (BT_FN_FLOAT_FLOAT_FLOAT_FLOAT,
223                      BT_FLOAT, BT_FLOAT, BT_FLOAT, BT_FLOAT)
224 DEF_FUNCTION_TYPE_3 (BT_FN_DOUBLE_DOUBLE_DOUBLE_DOUBLE,
225                      BT_DOUBLE, BT_DOUBLE, BT_DOUBLE, BT_DOUBLE)
226 DEF_FUNCTION_TYPE_3 (BT_FN_LONGDOUBLE_LONGDOUBLE_LONGDOUBLE_LONGDOUBLE,
227                      BT_LONGDOUBLE, BT_LONGDOUBLE, BT_LONGDOUBLE, BT_LONGDOUBLE)
228
229 DEF_FUNCTION_TYPE_4 (BT_FN_SIZE_CONST_PTR_SIZE_SIZE_PTR,
230                      BT_SIZE, BT_CONST_PTR, BT_SIZE, BT_SIZE, BT_PTR)
231 DEF_FUNCTION_TYPE_4 (BT_FN_INT_STRING_SIZE_CONST_STRING_VALIST_ARG,
232                 BT_INT, BT_STRING, BT_SIZE, BT_CONST_STRING, BT_VALIST_ARG)
233 DEF_FUNCTION_TYPE_4 (BT_FN_SIZE_STRING_SIZE_CONST_STRING_CONST_PTR,
234                 BT_SIZE, BT_STRING, BT_SIZE, BT_CONST_STRING, BT_CONST_PTR)
235
236 DEF_FUNCTION_TYPE_VAR_0 (BT_FN_VOID_VAR, BT_VOID)
237 DEF_FUNCTION_TYPE_VAR_0 (BT_FN_INT_VAR, BT_INT)
238 DEF_FUNCTION_TYPE_VAR_0 (BT_FN_PTR_VAR, BT_PTR)
239
240 DEF_FUNCTION_TYPE_VAR_1 (BT_FN_VOID_VALIST_REF_VAR, 
241                          BT_VOID, BT_VALIST_REF)
242 DEF_FUNCTION_TYPE_VAR_1 (BT_FN_VOID_CONST_PTR_VAR,
243                          BT_VOID, BT_CONST_PTR)
244 DEF_FUNCTION_TYPE_VAR_1 (BT_FN_INT_CONST_STRING_VAR,
245                          BT_INT, BT_CONST_STRING)
246
247 DEF_FUNCTION_TYPE_VAR_2 (BT_FN_INT_PTR_CONST_STRING_VAR,
248                          BT_INT, BT_PTR, BT_CONST_STRING)
249 DEF_FUNCTION_TYPE_VAR_2 (BT_FN_INT_STRING_CONST_STRING_VAR,
250                          BT_INT, BT_STRING, BT_CONST_STRING)
251 DEF_FUNCTION_TYPE_VAR_2 (BT_FN_INT_CONST_STRING_CONST_STRING_VAR,
252                          BT_INT, BT_CONST_STRING, BT_CONST_STRING)
253
254 DEF_FUNCTION_TYPE_VAR_3 (BT_FN_INT_STRING_SIZE_CONST_STRING_VAR,
255                          BT_INT, BT_STRING, BT_SIZE, BT_CONST_STRING)
256 DEF_FUNCTION_TYPE_VAR_3 (BT_FN_SSIZE_STRING_SIZE_CONST_STRING_VAR,
257                          BT_SSIZE, BT_STRING, BT_SIZE, BT_CONST_STRING)
258
259 DEF_POINTER_TYPE (BT_PTR_FN_VOID_VAR, BT_FN_VOID_VAR)
260 DEF_FUNCTION_TYPE_3 (BT_FN_PTR_PTR_FN_VOID_VAR_PTR_SIZE,
261                      BT_PTR, BT_PTR_FN_VOID_VAR, BT_PTR, BT_SIZE)