OSDN Git Service

* config/m68k/m68k.c (m68k_rtx_costs): Adjust mul/div costs for
[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_VOID_PTR, BT_VOID, BT_PTR)
122 DEF_FUNCTION_TYPE_1 (BT_FN_SIZE_CONST_STRING, BT_SIZE, BT_CONST_STRING)
123 DEF_FUNCTION_TYPE_1 (BT_FN_INT_CONST_STRING, BT_INT, BT_CONST_STRING)
124 DEF_FUNCTION_TYPE_1 (BT_FN_PTR_PTR, BT_PTR, BT_PTR)
125 DEF_FUNCTION_TYPE_1 (BT_FN_VOID_VALIST_REF, BT_VOID, BT_VALIST_REF)
126 DEF_FUNCTION_TYPE_1 (BT_FN_VOID_INT, BT_VOID, BT_INT)
127 DEF_FUNCTION_TYPE_1 (BT_FN_FLOAT_CONST_STRING, BT_FLOAT, BT_CONST_STRING)
128 DEF_FUNCTION_TYPE_1 (BT_FN_DOUBLE_CONST_STRING, BT_DOUBLE, BT_CONST_STRING)
129 DEF_FUNCTION_TYPE_1 (BT_FN_LONGDOUBLE_CONST_STRING,
130                      BT_LONGDOUBLE, BT_CONST_STRING)
131 DEF_FUNCTION_TYPE_1 (BT_FN_STRING_CONST_STRING, BT_STRING, BT_CONST_STRING)
132
133 DEF_FUNCTION_TYPE_2 (BT_FN_VOID_PTR_INT, BT_VOID, BT_PTR, BT_INT)
134 DEF_FUNCTION_TYPE_2 (BT_FN_STRING_STRING_CONST_STRING, 
135                      BT_STRING, BT_STRING, BT_CONST_STRING)
136 DEF_FUNCTION_TYPE_2 (BT_FN_INT_CONST_STRING_CONST_STRING,
137                      BT_INT, BT_CONST_STRING, BT_CONST_STRING)
138 DEF_FUNCTION_TYPE_2 (BT_FN_STRING_CONST_STRING_CONST_STRING,
139                      BT_STRING, BT_CONST_STRING, BT_CONST_STRING)
140 DEF_FUNCTION_TYPE_2 (BT_FN_SIZE_CONST_STRING_CONST_STRING,
141                      BT_SIZE, BT_CONST_STRING, BT_CONST_STRING)
142 DEF_FUNCTION_TYPE_2 (BT_FN_STRING_CONST_STRING_INT,
143                      BT_STRING, BT_CONST_STRING, BT_INT)
144 DEF_FUNCTION_TYPE_2 (BT_FN_INT_CONST_STRING_PTR,
145                      BT_INT, BT_CONST_STRING, BT_PTR)
146 DEF_FUNCTION_TYPE_2 (BT_FN_INT_INT_PTR,
147                      BT_INT, BT_INT, BT_PTR)
148 DEF_FUNCTION_TYPE_2 (BT_FN_VOID_PTRMODE_PTR,
149                      BT_VOID, BT_PTRMODE, BT_PTR)
150 DEF_FUNCTION_TYPE_2 (BT_FN_VOID_VALIST_REF_VALIST_ARG, 
151                      BT_VOID, BT_VALIST_REF, BT_VALIST_ARG)
152 DEF_FUNCTION_TYPE_2 (BT_FN_LONG_LONG_LONG,
153                      BT_LONG, BT_LONG, BT_LONG)
154 DEF_FUNCTION_TYPE_2 (BT_FN_INT_PTR_CONST_STRING,
155                      BT_INT, BT_PTR, BT_CONST_STRING)
156 DEF_FUNCTION_TYPE_2 (BT_FN_VOID_PTR_SIZE,
157                      BT_VOID, BT_PTR, BT_SIZE)
158 DEF_FUNCTION_TYPE_2 (BT_FN_FLOAT_FLOAT_FLOAT,
159                      BT_FLOAT, BT_FLOAT, BT_FLOAT)
160 DEF_FUNCTION_TYPE_2 (BT_FN_DOUBLE_DOUBLE_DOUBLE,
161                      BT_DOUBLE, BT_DOUBLE, BT_DOUBLE)
162 DEF_FUNCTION_TYPE_2 (BT_FN_LONGDOUBLE_LONGDOUBLE_LONGDOUBLE,
163                      BT_LONGDOUBLE, BT_LONGDOUBLE, BT_LONGDOUBLE)
164 DEF_FUNCTION_TYPE_2 (BT_FN_INT_CONST_STRING_VALIST_ARG,
165                      BT_INT, BT_CONST_STRING, BT_VALIST_ARG)
166 DEF_FUNCTION_TYPE_2 (BT_FN_PTR_SIZE_SIZE,
167                      BT_PTR, BT_SIZE, BT_SIZE)
168
169 DEF_FUNCTION_TYPE_3 (BT_FN_STRING_STRING_CONST_STRING_SIZE,
170                      BT_STRING, BT_STRING, BT_CONST_STRING, BT_SIZE)
171 DEF_FUNCTION_TYPE_3 (BT_FN_INT_CONST_STRING_CONST_STRING_SIZE,
172                      BT_INT, BT_CONST_STRING, BT_CONST_STRING, BT_SIZE)
173 DEF_FUNCTION_TYPE_3 (BT_FN_PTR_PTR_CONST_PTR_SIZE,
174                      BT_PTR, BT_PTR, BT_CONST_PTR, BT_SIZE)
175 DEF_FUNCTION_TYPE_3 (BT_FN_INT_CONST_PTR_CONST_PTR_SIZE,
176                      BT_INT, BT_CONST_PTR, BT_CONST_PTR, BT_SIZE)
177 DEF_FUNCTION_TYPE_3 (BT_FN_PTR_PTR_INT_SIZE,
178                      BT_PTR, BT_PTR, BT_INT, BT_SIZE)
179 DEF_FUNCTION_TYPE_3 (BT_FN_VOID_PTR_INT_INT,
180                      BT_VOID, BT_PTR, BT_INT, BT_INT)
181 DEF_FUNCTION_TYPE_3 (BT_FN_VOID_CONST_PTR_PTR_SIZE,
182                      BT_VOID, BT_CONST_PTR, BT_PTR, BT_SIZE)
183 DEF_FUNCTION_TYPE_3 (BT_FN_INT_STRING_CONST_STRING_VALIST_ARG,
184                      BT_INT, BT_STRING, BT_CONST_STRING, BT_VALIST_ARG)
185 DEF_FUNCTION_TYPE_3 (BT_FN_INT_CONST_STRING_CONST_STRING_VALIST_ARG,
186                      BT_INT, BT_CONST_STRING, BT_CONST_STRING, BT_VALIST_ARG)
187 DEF_FUNCTION_TYPE_3 (BT_FN_INT_PTR_CONST_STRING_VALIST_ARG,
188                      BT_INT, BT_PTR, BT_CONST_STRING, BT_VALIST_ARG)
189 DEF_FUNCTION_TYPE_3 (BT_FN_STRING_CONST_STRING_CONST_STRING_INT,
190                      BT_STRING, BT_CONST_STRING, BT_CONST_STRING, BT_INT)
191
192 DEF_FUNCTION_TYPE_4 (BT_FN_SIZE_CONST_PTR_SIZE_SIZE_PTR,
193                      BT_SIZE, BT_CONST_PTR, BT_SIZE, BT_SIZE, BT_PTR)
194 DEF_FUNCTION_TYPE_4 (BT_FN_INT_STRING_SIZE_CONST_STRING_VALIST_ARG,
195                 BT_INT, BT_STRING, BT_SIZE, BT_CONST_STRING, BT_VALIST_ARG)
196 DEF_FUNCTION_TYPE_4 (BT_FN_SIZE_STRING_SIZE_CONST_STRING_CONST_PTR,
197                 BT_SIZE, BT_STRING, BT_SIZE, BT_CONST_STRING, BT_CONST_PTR)
198
199 DEF_FUNCTION_TYPE_VAR_0 (BT_FN_VOID_VAR, BT_VOID)
200 DEF_FUNCTION_TYPE_VAR_0 (BT_FN_INT_VAR, BT_INT)
201 DEF_FUNCTION_TYPE_VAR_0 (BT_FN_PTR_VAR, BT_PTR)
202
203 DEF_FUNCTION_TYPE_VAR_1 (BT_FN_VOID_VALIST_REF_VAR, 
204                          BT_VOID, BT_VALIST_REF)
205 DEF_FUNCTION_TYPE_VAR_1 (BT_FN_VOID_CONST_PTR_VAR,
206                          BT_VOID, BT_CONST_PTR)
207 DEF_FUNCTION_TYPE_VAR_1 (BT_FN_INT_CONST_STRING_VAR,
208                          BT_INT, BT_CONST_STRING)
209
210 DEF_FUNCTION_TYPE_VAR_2 (BT_FN_INT_PTR_CONST_STRING_VAR,
211                          BT_INT, BT_PTR, BT_CONST_STRING)
212 DEF_FUNCTION_TYPE_VAR_2 (BT_FN_INT_STRING_CONST_STRING_VAR,
213                          BT_INT, BT_STRING, BT_CONST_STRING)
214 DEF_FUNCTION_TYPE_VAR_2 (BT_FN_INT_CONST_STRING_CONST_STRING_VAR,
215                          BT_INT, BT_CONST_STRING, BT_CONST_STRING)
216
217 DEF_FUNCTION_TYPE_VAR_3 (BT_FN_INT_STRING_SIZE_CONST_STRING_VAR,
218                          BT_INT, BT_STRING, BT_SIZE, BT_CONST_STRING)
219 DEF_FUNCTION_TYPE_VAR_3 (BT_FN_SSIZE_STRING_SIZE_CONST_STRING_VAR,
220                          BT_SSIZE, BT_STRING, BT_SIZE, BT_CONST_STRING)
221
222 DEF_POINTER_TYPE (BT_PTR_FN_VOID_VAR, BT_FN_VOID_VAR)
223 DEF_FUNCTION_TYPE_3 (BT_FN_PTR_PTR_FN_VOID_VAR_PTR_SIZE,
224                      BT_PTR, BT_PTR_FN_VOID_VAR, BT_PTR, BT_SIZE)