1 /* Copyright (C) 2001, 2002, 2003 Free Software Foundation, Inc.
3 This file is part of GCC.
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
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
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
20 /* This header provides a declaritive way of describing the types that
21 are used when declaring builtin functions.
23 Before including this header, you must define the following macros:
25 DEF_PRIMITIVE_TYPE (ENUM, TYPE)
27 The ENUM is an identifier indicating which type is being defined.
28 TYPE is an expression for a `tree' that represents the type.
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)
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.
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)
45 Similar, but for function types that take variable arguments.
48 DEF_FUNCTION_TYPE_1 (BT_INT_DOUBLE, BT_INT, BT_DOUBLE)
50 describes the type `int ()(double)', using the enumeral
51 BT_INT_DOUBLE, whereas:
53 DEF_FUNCTION_TYPE_VAR_1 (BT_INT_DOUBLE_VAR, BT_INT, BT_DOUBLE)
55 describes the type `int ()(double, ...)'.
57 DEF_POINTER_TYPE (ENUM, TYPE)
59 This macro describes a pointer type. ENUM is as above; TYPE is
60 the type pointed to. */
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)
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_STRING, string_type_node)
80 DEF_PRIMITIVE_TYPE (BT_CONST_STRING, const_string_type_node)
82 DEF_PRIMITIVE_TYPE (BT_VALIST_REF, va_list_ref_type_node)
83 DEF_PRIMITIVE_TYPE (BT_VALIST_ARG, va_list_arg_type_node)
85 DEF_FUNCTION_TYPE_0 (BT_FN_VOID, BT_VOID)
86 DEF_FUNCTION_TYPE_0 (BT_FN_PTR, BT_PTR)
87 DEF_FUNCTION_TYPE_0 (BT_FN_UNSIGNED, BT_UNSIGNED)
88 DEF_FUNCTION_TYPE_0 (BT_FN_FLOAT, BT_FLOAT)
89 DEF_FUNCTION_TYPE_0 (BT_FN_DOUBLE, BT_DOUBLE)
90 /* For "long double" we use LONGDOUBLE (not LONG_DOUBLE) to
91 distinguish it from two types in sequence, "long" followed by
93 DEF_FUNCTION_TYPE_0 (BT_FN_LONGDOUBLE, BT_LONGDOUBLE)
95 DEF_FUNCTION_TYPE_1 (BT_FN_LONG_LONG, BT_LONG, BT_LONG)
96 DEF_FUNCTION_TYPE_1 (BT_FN_LONGLONG_LONGLONG, BT_LONGLONG, BT_LONGLONG)
97 DEF_FUNCTION_TYPE_1 (BT_FN_INTMAX_INTMAX, BT_INTMAX, BT_INTMAX)
98 DEF_FUNCTION_TYPE_1 (BT_FN_FLOAT_FLOAT, BT_FLOAT, BT_FLOAT)
99 DEF_FUNCTION_TYPE_1 (BT_FN_DOUBLE_DOUBLE, BT_DOUBLE, BT_DOUBLE)
100 DEF_FUNCTION_TYPE_1 (BT_FN_LONGDOUBLE_LONGDOUBLE,
101 BT_LONGDOUBLE, BT_LONGDOUBLE)
102 DEF_FUNCTION_TYPE_1 (BT_FN_COMPLEX_FLOAT_COMPLEX_FLOAT,
103 BT_COMPLEX_FLOAT, BT_COMPLEX_FLOAT)
104 DEF_FUNCTION_TYPE_1 (BT_FN_COMPLEX_DOUBLE_COMPLEX_DOUBLE,
105 BT_COMPLEX_DOUBLE, BT_COMPLEX_DOUBLE)
106 DEF_FUNCTION_TYPE_1 (BT_FN_COMPLEX_LONGDOUBLE_COMPLEX_LONGDOUBLE,
107 BT_COMPLEX_LONGDOUBLE, BT_COMPLEX_LONGDOUBLE)
108 DEF_FUNCTION_TYPE_1 (BT_FN_FLOAT_COMPLEX_FLOAT,
109 BT_FLOAT, BT_COMPLEX_FLOAT)
110 DEF_FUNCTION_TYPE_1 (BT_FN_DOUBLE_COMPLEX_DOUBLE,
111 BT_DOUBLE, BT_COMPLEX_DOUBLE)
112 DEF_FUNCTION_TYPE_1 (BT_FN_LONGDOUBLE_COMPLEX_LONGDOUBLE,
113 BT_LONGDOUBLE, BT_COMPLEX_LONGDOUBLE)
114 DEF_FUNCTION_TYPE_1 (BT_FN_PTR_UNSIGNED, BT_PTR, BT_UNSIGNED)
115 DEF_FUNCTION_TYPE_1 (BT_FN_PTR_SIZE, BT_PTR, BT_SIZE)
116 DEF_FUNCTION_TYPE_1 (BT_FN_INT_INT, BT_INT, BT_INT)
117 DEF_FUNCTION_TYPE_1 (BT_FN_INT_LONG, BT_INT, BT_LONG)
118 DEF_FUNCTION_TYPE_1 (BT_FN_INT_LONGLONG, BT_INT, BT_LONGLONG)
119 DEF_FUNCTION_TYPE_1 (BT_FN_INT_PTR, BT_INT, BT_PTR)
120 DEF_FUNCTION_TYPE_1 (BT_FN_VOID_PTR, BT_VOID, BT_PTR)
121 DEF_FUNCTION_TYPE_1 (BT_FN_SIZE_CONST_STRING, BT_SIZE, BT_CONST_STRING)
122 DEF_FUNCTION_TYPE_1 (BT_FN_INT_CONST_STRING, BT_INT, BT_CONST_STRING)
123 DEF_FUNCTION_TYPE_1 (BT_FN_PTR_PTR, BT_PTR, BT_PTR)
124 DEF_FUNCTION_TYPE_1 (BT_FN_VOID_VALIST_REF, BT_VOID, BT_VALIST_REF)
125 DEF_FUNCTION_TYPE_1 (BT_FN_VOID_INT, BT_VOID, BT_INT)
126 DEF_FUNCTION_TYPE_1 (BT_FN_FLOAT_CONST_STRING, BT_FLOAT, BT_CONST_STRING)
127 DEF_FUNCTION_TYPE_1 (BT_FN_DOUBLE_CONST_STRING, BT_DOUBLE, BT_CONST_STRING)
128 DEF_FUNCTION_TYPE_1 (BT_FN_LONGDOUBLE_CONST_STRING,
129 BT_LONGDOUBLE, BT_CONST_STRING)
130 DEF_FUNCTION_TYPE_1 (BT_FN_STRING_CONST_STRING, BT_STRING, BT_CONST_STRING)
132 DEF_FUNCTION_TYPE_2 (BT_FN_VOID_PTR_INT, BT_VOID, BT_PTR, BT_INT)
133 DEF_FUNCTION_TYPE_2 (BT_FN_STRING_STRING_CONST_STRING,
134 BT_STRING, BT_STRING, BT_CONST_STRING)
135 DEF_FUNCTION_TYPE_2 (BT_FN_INT_CONST_STRING_CONST_STRING,
136 BT_INT, BT_CONST_STRING, BT_CONST_STRING)
137 DEF_FUNCTION_TYPE_2 (BT_FN_STRING_CONST_STRING_CONST_STRING,
138 BT_STRING, BT_CONST_STRING, BT_CONST_STRING)
139 DEF_FUNCTION_TYPE_2 (BT_FN_SIZE_CONST_STRING_CONST_STRING,
140 BT_SIZE, BT_CONST_STRING, BT_CONST_STRING)
141 DEF_FUNCTION_TYPE_2 (BT_FN_STRING_CONST_STRING_INT,
142 BT_STRING, BT_CONST_STRING, BT_INT)
143 DEF_FUNCTION_TYPE_2 (BT_FN_INT_CONST_STRING_PTR,
144 BT_INT, BT_CONST_STRING, BT_PTR)
145 DEF_FUNCTION_TYPE_2 (BT_FN_INT_INT_PTR,
146 BT_INT, BT_INT, BT_PTR)
147 DEF_FUNCTION_TYPE_2 (BT_FN_VOID_PTRMODE_PTR,
148 BT_VOID, BT_PTRMODE, BT_PTR)
149 DEF_FUNCTION_TYPE_2 (BT_FN_VOID_VALIST_REF_VALIST_ARG,
150 BT_VOID, BT_VALIST_REF, BT_VALIST_ARG)
151 DEF_FUNCTION_TYPE_2 (BT_FN_LONG_LONG_LONG,
152 BT_LONG, BT_LONG, BT_LONG)
153 DEF_FUNCTION_TYPE_2 (BT_FN_INT_PTR_CONST_STRING,
154 BT_INT, BT_PTR, BT_CONST_STRING)
155 DEF_FUNCTION_TYPE_2 (BT_FN_VOID_PTR_SIZE,
156 BT_VOID, BT_PTR, BT_SIZE)
157 DEF_FUNCTION_TYPE_2 (BT_FN_FLOAT_FLOAT_FLOAT,
158 BT_FLOAT, BT_FLOAT, BT_FLOAT)
159 DEF_FUNCTION_TYPE_2 (BT_FN_DOUBLE_DOUBLE_DOUBLE,
160 BT_DOUBLE, BT_DOUBLE, BT_DOUBLE)
161 DEF_FUNCTION_TYPE_2 (BT_FN_LONGDOUBLE_LONGDOUBLE_LONGDOUBLE,
162 BT_LONGDOUBLE, BT_LONGDOUBLE, BT_LONGDOUBLE)
163 DEF_FUNCTION_TYPE_2 (BT_FN_INT_CONST_STRING_VALIST_ARG,
164 BT_INT, BT_CONST_STRING, BT_VALIST_ARG)
165 DEF_FUNCTION_TYPE_2 (BT_FN_PTR_SIZE_SIZE,
166 BT_PTR, BT_SIZE, BT_SIZE)
168 DEF_FUNCTION_TYPE_3 (BT_FN_STRING_STRING_CONST_STRING_SIZE,
169 BT_STRING, BT_STRING, BT_CONST_STRING, BT_SIZE)
170 DEF_FUNCTION_TYPE_3 (BT_FN_INT_CONST_STRING_CONST_STRING_SIZE,
171 BT_INT, BT_CONST_STRING, BT_CONST_STRING, BT_SIZE)
172 DEF_FUNCTION_TYPE_3 (BT_FN_PTR_PTR_CONST_PTR_SIZE,
173 BT_PTR, BT_PTR, BT_CONST_PTR, BT_SIZE)
174 DEF_FUNCTION_TYPE_3 (BT_FN_INT_CONST_PTR_CONST_PTR_SIZE,
175 BT_INT, BT_CONST_PTR, BT_CONST_PTR, BT_SIZE)
176 DEF_FUNCTION_TYPE_3 (BT_FN_PTR_PTR_INT_SIZE,
177 BT_PTR, BT_PTR, BT_INT, BT_SIZE)
178 DEF_FUNCTION_TYPE_3 (BT_FN_VOID_PTR_INT_INT,
179 BT_VOID, BT_PTR, BT_INT, BT_INT)
180 DEF_FUNCTION_TYPE_3 (BT_FN_VOID_CONST_PTR_PTR_SIZE,
181 BT_VOID, BT_CONST_PTR, BT_PTR, BT_SIZE)
182 DEF_FUNCTION_TYPE_3 (BT_FN_INT_STRING_CONST_STRING_VALIST_ARG,
183 BT_INT, BT_STRING, BT_CONST_STRING, BT_VALIST_ARG)
184 DEF_FUNCTION_TYPE_3 (BT_FN_INT_CONST_STRING_CONST_STRING_VALIST_ARG,
185 BT_INT, BT_CONST_STRING, BT_CONST_STRING, BT_VALIST_ARG)
187 DEF_FUNCTION_TYPE_4 (BT_FN_SIZE_CONST_PTR_SIZE_SIZE_PTR,
188 BT_SIZE, BT_CONST_PTR, BT_SIZE, BT_SIZE, BT_PTR)
189 DEF_FUNCTION_TYPE_4 (BT_FN_INT_STRING_SIZE_CONST_STRING_VALIST_ARG,
190 BT_INT, BT_STRING, BT_SIZE, BT_CONST_STRING, BT_VALIST_ARG)
192 DEF_FUNCTION_TYPE_VAR_0 (BT_FN_VOID_VAR, BT_VOID)
193 DEF_FUNCTION_TYPE_VAR_0 (BT_FN_INT_VAR, BT_INT)
194 DEF_FUNCTION_TYPE_VAR_0 (BT_FN_PTR_VAR, BT_PTR)
196 DEF_FUNCTION_TYPE_VAR_1 (BT_FN_VOID_VALIST_REF_VAR,
197 BT_VOID, BT_VALIST_REF)
198 DEF_FUNCTION_TYPE_VAR_1 (BT_FN_VOID_CONST_PTR_VAR,
199 BT_VOID, BT_CONST_PTR)
200 DEF_FUNCTION_TYPE_VAR_1 (BT_FN_INT_CONST_STRING_VAR,
201 BT_INT, BT_CONST_STRING)
203 DEF_FUNCTION_TYPE_VAR_2 (BT_FN_INT_PTR_CONST_STRING_VAR,
204 BT_INT, BT_PTR, BT_CONST_STRING)
205 DEF_FUNCTION_TYPE_VAR_2 (BT_FN_INT_STRING_CONST_STRING_VAR,
206 BT_INT, BT_STRING, BT_CONST_STRING)
207 DEF_FUNCTION_TYPE_VAR_2 (BT_FN_INT_CONST_STRING_CONST_STRING_VAR,
208 BT_INT, BT_CONST_STRING, BT_CONST_STRING)
210 DEF_FUNCTION_TYPE_VAR_3 (BT_FN_INT_STRING_SIZE_CONST_STRING_VAR,
211 BT_INT, BT_STRING, BT_SIZE, BT_CONST_STRING)
213 DEF_POINTER_TYPE (BT_PTR_FN_VOID_VAR, BT_FN_VOID_VAR)
214 DEF_FUNCTION_TYPE_3 (BT_FN_PTR_PTR_FN_VOID_VAR_PTR_SIZE,
215 BT_PTR, BT_PTR_FN_VOID_VAR, BT_PTR, BT_SIZE)