1 /* Copyright (C
) 2001, 2002 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)
44 Similar, but for function types that take variable arguments.
47 DEF_FUNCTION_TYPE_1 (BT_INT_DOUBLE, BT_INT, BT_DOUBLE)
49 describes the type `int ()(double)', using the enumeral
50 BT_INT_DOUBLE
, whereas
:
52 DEF_FUNCTION_TYPE_VAR_1 (BT_INT_DOUBLE_VAR
, BT_INT
, BT_DOUBLE
)
54 describes the type `
int ()(double
, ...
)'.
56 DEF_POINTER_TYPE (ENUM, TYPE)
58 This macro describes a pointer type. ENUM is as above; TYPE is
59 the type pointed to. */
61 DEF_PRIMITIVE_TYPE (BT_VOID, void_type_node)
62 DEF_PRIMITIVE_TYPE (BT_INT, integer_type_node)
63 DEF_PRIMITIVE_TYPE (BT_UNSIGNED, unsigned_type_node)
64 DEF_PRIMITIVE_TYPE (BT_LONG, long_integer_type_node)
65 DEF_PRIMITIVE_TYPE (BT_LONGLONG, long_long_integer_type_node)
66 DEF_PRIMITIVE_TYPE (BT_FLOAT, float_type_node)
67 DEF_PRIMITIVE_TYPE (BT_INTMAX, intmax_type_node)
68 DEF_PRIMITIVE_TYPE (BT_DOUBLE, double_type_node)
69 DEF_PRIMITIVE_TYPE (BT_LONG_DOUBLE, long_double_type_node)
70 DEF_PRIMITIVE_TYPE (BT_COMPLEX_FLOAT, complex_float_type_node)
71 DEF_PRIMITIVE_TYPE (BT_COMPLEX_DOUBLE, complex_double_type_node)
72 DEF_PRIMITIVE_TYPE (BT_COMPLEX_LONG_DOUBLE, complex_long_double_type_node)
74 DEF_PRIMITIVE_TYPE (BT_PTR, ptr_type_node)
75 DEF_PRIMITIVE_TYPE (BT_CONST_PTR, const_ptr_type_node)
76 DEF_PRIMITIVE_TYPE (BT_PTRMODE, (*lang_hooks.types.type_for_mode)(ptr_mode, 0))
77 DEF_PRIMITIVE_TYPE (BT_SIZE, size_type_node)
78 DEF_PRIMITIVE_TYPE (BT_STRING, string_type_node)
79 DEF_PRIMITIVE_TYPE (BT_CONST_STRING, const_string_type_node)
81 DEF_PRIMITIVE_TYPE (BT_VALIST_REF, va_list_ref_type_node)
82 DEF_PRIMITIVE_TYPE (BT_VALIST_ARG, va_list_arg_type_node)
84 DEF_FUNCTION_TYPE_0 (BT_FN_VOID, BT_VOID)
85 DEF_FUNCTION_TYPE_0 (BT_FN_PTR, BT_PTR)
86 DEF_FUNCTION_TYPE_0 (BT_FN_UNSIGNED, BT_UNSIGNED)
87 DEF_FUNCTION_TYPE_0 (BT_FN_FLOAT, BT_FLOAT)
88 DEF_FUNCTION_TYPE_0 (BT_FN_DOUBLE, BT_DOUBLE)
89 DEF_FUNCTION_TYPE_0 (BT_FN_LONG_DOUBLE, BT_LONG_DOUBLE)
91 DEF_FUNCTION_TYPE_1 (BT_FN_LONG_LONG, BT_LONG, BT_LONG)
92 DEF_FUNCTION_TYPE_1 (BT_FN_LONGLONG_LONGLONG, BT_LONGLONG, BT_LONGLONG)
93 DEF_FUNCTION_TYPE_1 (BT_FN_INTMAX_INTMAX, BT_INTMAX, BT_INTMAX)
94 DEF_FUNCTION_TYPE_1 (BT_FN_FLOAT_FLOAT, BT_FLOAT, BT_FLOAT)
95 DEF_FUNCTION_TYPE_1 (BT_FN_DOUBLE_DOUBLE, BT_DOUBLE, BT_DOUBLE)
96 DEF_FUNCTION_TYPE_1 (BT_FN_LONG_DOUBLE_LONG_DOUBLE,
97 BT_LONG_DOUBLE, BT_LONG_DOUBLE)
98 DEF_FUNCTION_TYPE_1 (BT_FN_COMPLEX_FLOAT_COMPLEX_FLOAT,
99 BT_COMPLEX_FLOAT, BT_COMPLEX_FLOAT)
100 DEF_FUNCTION_TYPE_1 (BT_FN_COMPLEX_DOUBLE_COMPLEX_DOUBLE,
101 BT_COMPLEX_DOUBLE, BT_COMPLEX_DOUBLE)
102 DEF_FUNCTION_TYPE_1 (BT_FN_COMPLEX_LONG_DOUBLE_COMPLEX_LONG_DOUBLE,
103 BT_COMPLEX_LONG_DOUBLE, BT_COMPLEX_LONG_DOUBLE)
104 DEF_FUNCTION_TYPE_1 (BT_FN_FLOAT_COMPLEX_FLOAT,
105 BT_FLOAT, BT_COMPLEX_FLOAT)
106 DEF_FUNCTION_TYPE_1 (BT_FN_DOUBLE_COMPLEX_DOUBLE,
107 BT_DOUBLE, BT_COMPLEX_DOUBLE)
108 DEF_FUNCTION_TYPE_1 (BT_FN_LONG_DOUBLE_COMPLEX_LONG_DOUBLE,
109 BT_LONG_DOUBLE, BT_COMPLEX_LONG_DOUBLE)
110 DEF_FUNCTION_TYPE_1 (BT_FN_PTR_UNSIGNED, BT_PTR, BT_UNSIGNED)
111 DEF_FUNCTION_TYPE_1 (BT_FN_PTR_SIZE, BT_PTR, BT_SIZE)
112 DEF_FUNCTION_TYPE_1 (BT_FN_INT_INT, BT_INT, BT_INT)
113 DEF_FUNCTION_TYPE_1 (BT_FN_INT_PTR, BT_INT, BT_PTR)
114 DEF_FUNCTION_TYPE_1 (BT_FN_VOID_PTR, BT_VOID, BT_PTR)
115 DEF_FUNCTION_TYPE_1 (BT_FN_SIZE_CONST_STRING, BT_SIZE, BT_CONST_STRING)
116 DEF_FUNCTION_TYPE_1 (BT_FN_INT_CONST_STRING, BT_INT, BT_CONST_STRING)
117 DEF_FUNCTION_TYPE_1 (BT_FN_PTR_PTR, BT_PTR, BT_PTR)
118 DEF_FUNCTION_TYPE_1 (BT_FN_VOID_VALIST_REF, BT_VOID, BT_VALIST_REF)
119 DEF_FUNCTION_TYPE_1 (BT_FN_VOID_INT, BT_VOID, BT_INT)
120 DEF_FUNCTION_TYPE_1 (BT_FN_FLOAT_CONST_STRING, BT_FLOAT, BT_CONST_STRING)
121 DEF_FUNCTION_TYPE_1 (BT_FN_DOUBLE_CONST_STRING, BT_DOUBLE, BT_CONST_STRING)
122 DEF_FUNCTION_TYPE_1 (BT_FN_LONG_DOUBLE_CONST_STRING,
123 BT_LONG_DOUBLE, BT_CONST_STRING)
125 DEF_FUNCTION_TYPE_2 (BT_FN_VOID_PTR_INT, BT_VOID, BT_PTR, BT_INT)
126 DEF_FUNCTION_TYPE_2 (BT_FN_STRING_STRING_CONST_STRING,
127 BT_STRING, BT_STRING, BT_CONST_STRING)
128 DEF_FUNCTION_TYPE_2 (BT_FN_INT_CONST_STRING_CONST_STRING,
129 BT_INT, BT_CONST_STRING, BT_CONST_STRING)
130 DEF_FUNCTION_TYPE_2 (BT_FN_STRING_CONST_STRING_CONST_STRING,
131 BT_STRING, BT_CONST_STRING, BT_CONST_STRING)
132 DEF_FUNCTION_TYPE_2 (BT_FN_SIZE_CONST_STRING_CONST_STRING,
133 BT_SIZE, BT_CONST_STRING, BT_CONST_STRING)
134 DEF_FUNCTION_TYPE_2 (BT_FN_STRING_CONST_STRING_INT,
135 BT_STRING, BT_CONST_STRING, BT_INT)
136 DEF_FUNCTION_TYPE_2 (BT_FN_INT_CONST_STRING_PTR,
137 BT_INT, BT_CONST_STRING, BT_PTR)
138 DEF_FUNCTION_TYPE_2 (BT_FN_INT_INT_PTR,
139 BT_INT, BT_INT, BT_PTR)
140 DEF_FUNCTION_TYPE_2 (BT_FN_VOID_PTRMODE_PTR,
141 BT_VOID, BT_PTRMODE, BT_PTR)
142 DEF_FUNCTION_TYPE_2 (BT_FN_VOID_VALIST_REF_VALIST_ARG,
143 BT_VOID, BT_VALIST_REF, BT_VALIST_ARG)
144 DEF_FUNCTION_TYPE_2 (BT_FN_LONG_LONG_LONG,
145 BT_LONG, BT_LONG, BT_LONG)
146 DEF_FUNCTION_TYPE_2 (BT_FN_INT_PTR_CONST_STRING,
147 BT_INT, BT_PTR, BT_CONST_STRING)
148 DEF_FUNCTION_TYPE_2 (BT_FN_VOID_PTR_SIZE,
149 BT_VOID, BT_PTR, BT_SIZE)
151 DEF_FUNCTION_TYPE_3 (BT_FN_STRING_STRING_CONST_STRING_SIZE,
152 BT_STRING, BT_STRING, BT_CONST_STRING, BT_SIZE)
153 DEF_FUNCTION_TYPE_3 (BT_FN_INT_CONST_STRING_CONST_STRING_SIZE,
154 BT_INT, BT_CONST_STRING, BT_CONST_STRING, BT_SIZE)
155 DEF_FUNCTION_TYPE_3 (BT_FN_PTR_PTR_CONST_PTR_SIZE,
156 BT_PTR, BT_PTR, BT_CONST_PTR, BT_SIZE)
157 DEF_FUNCTION_TYPE_3 (BT_FN_INT_CONST_PTR_CONST_PTR_SIZE,
158 BT_INT, BT_CONST_PTR, BT_CONST_PTR, BT_SIZE)
159 DEF_FUNCTION_TYPE_3 (BT_FN_PTR_PTR_INT_SIZE,
160 BT_PTR, BT_PTR, BT_INT, BT_SIZE)
161 DEF_FUNCTION_TYPE_3 (BT_FN_VOID_PTR_INT_INT, BT_VOID, BT_PTR, BT_INT, BT_INT)
163 DEF_FUNCTION_TYPE_4 (BT_FN_SIZE_CONST_PTR_SIZE_SIZE_PTR,
164 BT_SIZE, BT_CONST_PTR, BT_SIZE, BT_SIZE, BT_PTR)
166 DEF_FUNCTION_TYPE_VAR_0 (BT_FN_VOID_VAR, BT_VOID)
167 DEF_FUNCTION_TYPE_VAR_0 (BT_FN_INT_VAR, BT_INT)
168 DEF_FUNCTION_TYPE_VAR_0 (BT_FN_PTR_VAR, BT_PTR)
170 DEF_FUNCTION_TYPE_VAR_1 (BT_FN_VOID_VALIST_REF_VAR,
171 BT_VOID, BT_VALIST_REF)
172 DEF_FUNCTION_TYPE_VAR_1 (BT_FN_VOID_CONST_PTR_VAR,
173 BT_VOID, BT_CONST_PTR)
174 DEF_FUNCTION_TYPE_VAR_1 (BT_FN_INT_CONST_STRING_VAR,
175 BT_INT, BT_CONST_STRING)
177 DEF_FUNCTION_TYPE_VAR_2 (BT_FN_INT_PTR_CONST_STRING_VAR,
178 BT_INT, BT_PTR, BT_CONST_STRING)
180 DEF_POINTER_TYPE (BT_PTR_FN_VOID_VAR, BT_FN_VOID_VAR)
181 DEF_FUNCTION_TYPE_3 (BT_FN_PTR_PTR_FN_VOID_VAR_PTR_SIZE,
182 BT_PTR, BT_PTR_FN_VOID_VAR, BT_PTR, BT_SIZE)