2003-04-02 Aldy Hernandez <aldyh@redhat.com>
[official-gcc.git] / gcc / builtin-types.def
blobc095d07b609f8a14355378ad93addaf6ca987aa6
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
8 version.
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.
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. */
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.
46 For example:
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_LONG_DOUBLE, 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_LONG_DOUBLE, 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 DEF_FUNCTION_TYPE_0 (BT_FN_LONG_DOUBLE, BT_LONG_DOUBLE)
92 DEF_FUNCTION_TYPE_1 (BT_FN_LONG_LONG, BT_LONG, BT_LONG)
93 DEF_FUNCTION_TYPE_1 (BT_FN_LONGLONG_LONGLONG, BT_LONGLONG, BT_LONGLONG)
94 DEF_FUNCTION_TYPE_1 (BT_FN_INTMAX_INTMAX, BT_INTMAX, BT_INTMAX)
95 DEF_FUNCTION_TYPE_1 (BT_FN_FLOAT_FLOAT, BT_FLOAT, BT_FLOAT)
96 DEF_FUNCTION_TYPE_1 (BT_FN_DOUBLE_DOUBLE, BT_DOUBLE, BT_DOUBLE)
97 DEF_FUNCTION_TYPE_1 (BT_FN_LONG_DOUBLE_LONG_DOUBLE,
98 BT_LONG_DOUBLE, BT_LONG_DOUBLE)
99 DEF_FUNCTION_TYPE_1 (BT_FN_COMPLEX_FLOAT_COMPLEX_FLOAT,
100 BT_COMPLEX_FLOAT, BT_COMPLEX_FLOAT)
101 DEF_FUNCTION_TYPE_1 (BT_FN_COMPLEX_DOUBLE_COMPLEX_DOUBLE,
102 BT_COMPLEX_DOUBLE, BT_COMPLEX_DOUBLE)
103 DEF_FUNCTION_TYPE_1 (BT_FN_COMPLEX_LONG_DOUBLE_COMPLEX_LONG_DOUBLE,
104 BT_COMPLEX_LONG_DOUBLE, BT_COMPLEX_LONG_DOUBLE)
105 DEF_FUNCTION_TYPE_1 (BT_FN_FLOAT_COMPLEX_FLOAT,
106 BT_FLOAT, BT_COMPLEX_FLOAT)
107 DEF_FUNCTION_TYPE_1 (BT_FN_DOUBLE_COMPLEX_DOUBLE,
108 BT_DOUBLE, BT_COMPLEX_DOUBLE)
109 DEF_FUNCTION_TYPE_1 (BT_FN_LONG_DOUBLE_COMPLEX_LONG_DOUBLE,
110 BT_LONG_DOUBLE, BT_COMPLEX_LONG_DOUBLE)
111 DEF_FUNCTION_TYPE_1 (BT_FN_PTR_UNSIGNED, BT_PTR, BT_UNSIGNED)
112 DEF_FUNCTION_TYPE_1 (BT_FN_PTR_SIZE, BT_PTR, BT_SIZE)
113 DEF_FUNCTION_TYPE_1 (BT_FN_INT_INT, BT_INT, BT_INT)
114 DEF_FUNCTION_TYPE_1 (BT_FN_INT_LONG, BT_INT, BT_LONG)
115 DEF_FUNCTION_TYPE_1 (BT_FN_INT_LONGLONG, BT_INT, BT_LONGLONG)
116 DEF_FUNCTION_TYPE_1 (BT_FN_INT_PTR, BT_INT, BT_PTR)
117 DEF_FUNCTION_TYPE_1 (BT_FN_VOID_PTR, BT_VOID, BT_PTR)
118 DEF_FUNCTION_TYPE_1 (BT_FN_SIZE_CONST_STRING, BT_SIZE, BT_CONST_STRING)
119 DEF_FUNCTION_TYPE_1 (BT_FN_INT_CONST_STRING, BT_INT, BT_CONST_STRING)
120 DEF_FUNCTION_TYPE_1 (BT_FN_PTR_PTR, BT_PTR, BT_PTR)
121 DEF_FUNCTION_TYPE_1 (BT_FN_VOID_VALIST_REF, BT_VOID, BT_VALIST_REF)
122 DEF_FUNCTION_TYPE_1 (BT_FN_VOID_INT, BT_VOID, BT_INT)
123 DEF_FUNCTION_TYPE_1 (BT_FN_FLOAT_CONST_STRING, BT_FLOAT, BT_CONST_STRING)
124 DEF_FUNCTION_TYPE_1 (BT_FN_DOUBLE_CONST_STRING, BT_DOUBLE, BT_CONST_STRING)
125 DEF_FUNCTION_TYPE_1 (BT_FN_LONG_DOUBLE_CONST_STRING,
126 BT_LONG_DOUBLE, BT_CONST_STRING)
128 DEF_FUNCTION_TYPE_2 (BT_FN_VOID_PTR_INT, BT_VOID, BT_PTR, BT_INT)
129 DEF_FUNCTION_TYPE_2 (BT_FN_STRING_STRING_CONST_STRING,
130 BT_STRING, BT_STRING, BT_CONST_STRING)
131 DEF_FUNCTION_TYPE_2 (BT_FN_INT_CONST_STRING_CONST_STRING,
132 BT_INT, BT_CONST_STRING, BT_CONST_STRING)
133 DEF_FUNCTION_TYPE_2 (BT_FN_STRING_CONST_STRING_CONST_STRING,
134 BT_STRING, BT_CONST_STRING, BT_CONST_STRING)
135 DEF_FUNCTION_TYPE_2 (BT_FN_SIZE_CONST_STRING_CONST_STRING,
136 BT_SIZE, BT_CONST_STRING, BT_CONST_STRING)
137 DEF_FUNCTION_TYPE_2 (BT_FN_STRING_CONST_STRING_INT,
138 BT_STRING, BT_CONST_STRING, BT_INT)
139 DEF_FUNCTION_TYPE_2 (BT_FN_INT_CONST_STRING_PTR,
140 BT_INT, BT_CONST_STRING, BT_PTR)
141 DEF_FUNCTION_TYPE_2 (BT_FN_INT_INT_PTR,
142 BT_INT, BT_INT, BT_PTR)
143 DEF_FUNCTION_TYPE_2 (BT_FN_VOID_PTRMODE_PTR,
144 BT_VOID, BT_PTRMODE, BT_PTR)
145 DEF_FUNCTION_TYPE_2 (BT_FN_VOID_VALIST_REF_VALIST_ARG,
146 BT_VOID, BT_VALIST_REF, BT_VALIST_ARG)
147 DEF_FUNCTION_TYPE_2 (BT_FN_LONG_LONG_LONG,
148 BT_LONG, BT_LONG, BT_LONG)
149 DEF_FUNCTION_TYPE_2 (BT_FN_INT_PTR_CONST_STRING,
150 BT_INT, BT_PTR, BT_CONST_STRING)
151 DEF_FUNCTION_TYPE_2 (BT_FN_VOID_PTR_SIZE,
152 BT_VOID, BT_PTR, BT_SIZE)
153 DEF_FUNCTION_TYPE_2 (BT_FN_FLOAT_FLOAT_FLOAT,
154 BT_FLOAT, BT_FLOAT, BT_FLOAT)
155 DEF_FUNCTION_TYPE_2 (BT_FN_DOUBLE_DOUBLE_DOUBLE,
156 BT_DOUBLE, BT_DOUBLE, BT_DOUBLE)
157 DEF_FUNCTION_TYPE_2 (BT_FN_LONG_DOUBLE_LONG_DOUBLE_LONG_DOUBLE,
158 BT_LONG_DOUBLE, BT_LONG_DOUBLE, BT_LONG_DOUBLE)
159 DEF_FUNCTION_TYPE_2 (BT_FN_INT_CONST_STRING_VALIST_ARG,
160 BT_INT, BT_CONST_STRING, BT_VALIST_ARG)
162 DEF_FUNCTION_TYPE_3 (BT_FN_STRING_STRING_CONST_STRING_SIZE,
163 BT_STRING, BT_STRING, BT_CONST_STRING, BT_SIZE)
164 DEF_FUNCTION_TYPE_3 (BT_FN_INT_CONST_STRING_CONST_STRING_SIZE,
165 BT_INT, BT_CONST_STRING, BT_CONST_STRING, BT_SIZE)
166 DEF_FUNCTION_TYPE_3 (BT_FN_PTR_PTR_CONST_PTR_SIZE,
167 BT_PTR, BT_PTR, BT_CONST_PTR, BT_SIZE)
168 DEF_FUNCTION_TYPE_3 (BT_FN_INT_CONST_PTR_CONST_PTR_SIZE,
169 BT_INT, BT_CONST_PTR, BT_CONST_PTR, BT_SIZE)
170 DEF_FUNCTION_TYPE_3 (BT_FN_PTR_PTR_INT_SIZE,
171 BT_PTR, BT_PTR, BT_INT, BT_SIZE)
172 DEF_FUNCTION_TYPE_3 (BT_FN_VOID_PTR_INT_INT,
173 BT_VOID, BT_PTR, BT_INT, BT_INT)
174 DEF_FUNCTION_TYPE_3 (BT_FN_INT_STRING_CONST_STRING_VALIST_ARG,
175 BT_INT, BT_STRING, BT_CONST_STRING, BT_VALIST_ARG)
176 DEF_FUNCTION_TYPE_3 (BT_FN_INT_CONST_STRING_CONST_STRING_VALIST_ARG,
177 BT_INT, BT_CONST_STRING, BT_CONST_STRING, BT_VALIST_ARG)
179 DEF_FUNCTION_TYPE_4 (BT_FN_SIZE_CONST_PTR_SIZE_SIZE_PTR,
180 BT_SIZE, BT_CONST_PTR, BT_SIZE, BT_SIZE, BT_PTR)
181 DEF_FUNCTION_TYPE_4 (BT_FN_INT_STRING_SIZE_CONST_STRING_VALIST_ARG,
182 BT_INT, BT_STRING, BT_SIZE, BT_CONST_STRING, BT_VALIST_ARG)
184 DEF_FUNCTION_TYPE_VAR_0 (BT_FN_VOID_VAR, BT_VOID)
185 DEF_FUNCTION_TYPE_VAR_0 (BT_FN_INT_VAR, BT_INT)
186 DEF_FUNCTION_TYPE_VAR_0 (BT_FN_PTR_VAR, BT_PTR)
188 DEF_FUNCTION_TYPE_VAR_1 (BT_FN_VOID_VALIST_REF_VAR,
189 BT_VOID, BT_VALIST_REF)
190 DEF_FUNCTION_TYPE_VAR_1 (BT_FN_VOID_CONST_PTR_VAR,
191 BT_VOID, BT_CONST_PTR)
192 DEF_FUNCTION_TYPE_VAR_1 (BT_FN_INT_CONST_STRING_VAR,
193 BT_INT, BT_CONST_STRING)
195 DEF_FUNCTION_TYPE_VAR_2 (BT_FN_INT_PTR_CONST_STRING_VAR,
196 BT_INT, BT_PTR, BT_CONST_STRING)
197 DEF_FUNCTION_TYPE_VAR_2 (BT_FN_INT_STRING_CONST_STRING_VAR,
198 BT_INT, BT_STRING, BT_CONST_STRING)
199 DEF_FUNCTION_TYPE_VAR_2 (BT_FN_INT_CONST_STRING_CONST_STRING_VAR,
200 BT_INT, BT_CONST_STRING, BT_CONST_STRING)
202 DEF_FUNCTION_TYPE_VAR_3 (BT_FN_INT_STRING_SIZE_CONST_STRING_VAR,
203 BT_INT, BT_STRING, BT_SIZE, BT_CONST_STRING)
205 DEF_POINTER_TYPE (BT_PTR_FN_VOID_VAR, BT_FN_VOID_VAR)
206 DEF_FUNCTION_TYPE_3 (BT_FN_PTR_PTR_FN_VOID_VAR_PTR_SIZE,
207 BT_PTR, BT_PTR_FN_VOID_VAR, BT_PTR, BT_SIZE)