1/* Copyright (C) 2001-2015 Free Software Foundation, Inc.
2
3This file is part of GCC.
4
5GCC is free software; you can redistribute it and/or modify it under
6the terms of the GNU General Public License as published by the Free
7Software Foundation; either version 3, or (at your option) any later
8version.
9
10GCC is distributed in the hope that it will be useful, but WITHOUT ANY
11WARRANTY; without even the implied warranty of MERCHANTABILITY or
12FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
13for more details.
14
15You should have received a copy of the GNU General Public License
16along with GCC; see the file COPYING3.  If not see
17<http://www.gnu.org/licenses/>.  */
18
19/* This header contains a subset of ../builtin-types.def needed for
20   Fortran frontend builtins.
21
22   Before including this header, you must define the following macros:
23
24   DEF_PRIMITIVE_TYPE (ENUM, TYPE)
25
26     The ENUM is an identifier indicating which type is being defined.
27     TYPE is an expression for a `tree' that represents the type.
28
29   DEF_FUNCTION_TYPE_0 (ENUM, RETURN)
30   DEF_FUNCTION_TYPE_1 (ENUM, RETURN, ARG1)
31   DEF_FUNCTION_TYPE_2 (ENUM, RETURN, ARG1, ARG2)
32   [...]
33
34     These macros describe function types.  ENUM is as above.  The
35     RETURN type is one of the enumerals already defined.  ARG1, ARG2,
36     and ARG3 give the types of the arguments, similarly.
37
38   DEF_FUNCTION_TYPE_VAR_0 (ENUM, RETURN)
39
40     Similar, but for function types that take variable arguments.
41
42  DEF_POINTER_TYPE (ENUM, TYPE)
43
44    This macro describes a pointer type.  ENUM is as above; TYPE is
45    the type pointed to.  */
46
47DEF_PRIMITIVE_TYPE (BT_VOID, void_type_node)
48DEF_PRIMITIVE_TYPE (BT_BOOL,
49		    (*lang_hooks.types.type_for_size) (BOOL_TYPE_SIZE, 1))
50DEF_PRIMITIVE_TYPE (BT_INT, integer_type_node)
51DEF_PRIMITIVE_TYPE (BT_UINT, unsigned_type_node)
52DEF_PRIMITIVE_TYPE (BT_LONG, long_integer_type_node)
53DEF_PRIMITIVE_TYPE (BT_ULONGLONG, long_long_unsigned_type_node)
54DEF_PRIMITIVE_TYPE (BT_WORD, (*lang_hooks.types.type_for_mode) (word_mode, 1))
55DEF_PRIMITIVE_TYPE (BT_SIZE, size_type_node)
56
57DEF_PRIMITIVE_TYPE (BT_I1, builtin_type_for_size (BITS_PER_UNIT*1, 1))
58DEF_PRIMITIVE_TYPE (BT_I2, builtin_type_for_size (BITS_PER_UNIT*2, 1))
59DEF_PRIMITIVE_TYPE (BT_I4, builtin_type_for_size (BITS_PER_UNIT*4, 1))
60DEF_PRIMITIVE_TYPE (BT_I8, builtin_type_for_size (BITS_PER_UNIT*8, 1))
61DEF_PRIMITIVE_TYPE (BT_I16, builtin_type_for_size (BITS_PER_UNIT*16, 1))
62
63DEF_PRIMITIVE_TYPE (BT_PTR, ptr_type_node)
64DEF_PRIMITIVE_TYPE (BT_CONST_PTR, const_ptr_type_node)
65DEF_PRIMITIVE_TYPE (BT_VOLATILE_PTR,
66                    build_pointer_type
67                     (build_qualified_type (void_type_node,
68                                            TYPE_QUAL_VOLATILE)))
69DEF_PRIMITIVE_TYPE (BT_CONST_VOLATILE_PTR,
70		    build_pointer_type
71		     (build_qualified_type (void_type_node,
72					  TYPE_QUAL_VOLATILE|TYPE_QUAL_CONST)))
73DEF_POINTER_TYPE (BT_PTR_LONG, BT_LONG)
74DEF_POINTER_TYPE (BT_PTR_ULONGLONG, BT_ULONGLONG)
75DEF_POINTER_TYPE (BT_PTR_PTR, BT_PTR)
76DEF_FUNCTION_TYPE_0 (BT_FN_BOOL, BT_BOOL)
77DEF_FUNCTION_TYPE_0 (BT_FN_PTR, BT_PTR)
78DEF_FUNCTION_TYPE_0 (BT_FN_INT, BT_INT)
79DEF_FUNCTION_TYPE_0 (BT_FN_UINT, BT_UINT)
80DEF_FUNCTION_TYPE_0 (BT_FN_VOID, BT_VOID)
81
82DEF_FUNCTION_TYPE_1 (BT_FN_VOID_PTR, BT_VOID, BT_PTR)
83DEF_FUNCTION_TYPE_1 (BT_FN_VOID_PTRPTR, BT_VOID, BT_PTR_PTR)
84DEF_FUNCTION_TYPE_1 (BT_FN_VOID_VPTR, BT_VOID, BT_VOLATILE_PTR)
85DEF_FUNCTION_TYPE_1 (BT_FN_INT_INT, BT_INT, BT_INT)
86DEF_FUNCTION_TYPE_1 (BT_FN_UINT_UINT, BT_UINT, BT_UINT)
87DEF_FUNCTION_TYPE_1 (BT_FN_PTR_PTR, BT_PTR, BT_PTR)
88DEF_FUNCTION_TYPE_1 (BT_FN_VOID_INT, BT_VOID, BT_INT)
89DEF_FUNCTION_TYPE_1 (BT_FN_BOOL_INT, BT_BOOL, BT_INT)
90
91DEF_POINTER_TYPE (BT_PTR_FN_VOID_PTR, BT_FN_VOID_PTR)
92
93DEF_FUNCTION_TYPE_2 (BT_FN_BOOL_LONGPTR_LONGPTR,
94                     BT_BOOL, BT_PTR_LONG, BT_PTR_LONG)
95DEF_FUNCTION_TYPE_2 (BT_FN_BOOL_ULONGLONGPTR_ULONGLONGPTR,
96		     BT_BOOL, BT_PTR_ULONGLONG, BT_PTR_ULONGLONG)
97DEF_FUNCTION_TYPE_2 (BT_FN_I1_VPTR_I1, BT_I1, BT_VOLATILE_PTR, BT_I1)
98DEF_FUNCTION_TYPE_2 (BT_FN_I2_VPTR_I2, BT_I2, BT_VOLATILE_PTR, BT_I2)
99DEF_FUNCTION_TYPE_2 (BT_FN_I4_VPTR_I4, BT_I4, BT_VOLATILE_PTR, BT_I4)
100DEF_FUNCTION_TYPE_2 (BT_FN_I8_VPTR_I8, BT_I8, BT_VOLATILE_PTR, BT_I8)
101DEF_FUNCTION_TYPE_2 (BT_FN_I16_VPTR_I16, BT_I16, BT_VOLATILE_PTR, BT_I16)
102DEF_FUNCTION_TYPE_2 (BT_FN_VOID_PTR_PTR, BT_VOID, BT_PTR, BT_PTR)
103DEF_FUNCTION_TYPE_2 (BT_FN_I1_CONST_VPTR_INT, BT_I1, BT_CONST_VOLATILE_PTR,
104		     BT_INT)
105DEF_FUNCTION_TYPE_2 (BT_FN_I2_CONST_VPTR_INT, BT_I2, BT_CONST_VOLATILE_PTR,
106		     BT_INT)
107DEF_FUNCTION_TYPE_2 (BT_FN_I4_CONST_VPTR_INT, BT_I4, BT_CONST_VOLATILE_PTR,
108		     BT_INT)
109DEF_FUNCTION_TYPE_2 (BT_FN_I8_CONST_VPTR_INT, BT_I8, BT_CONST_VOLATILE_PTR,
110		     BT_INT)
111DEF_FUNCTION_TYPE_2 (BT_FN_I16_CONST_VPTR_INT, BT_I16, BT_CONST_VOLATILE_PTR,
112		     BT_INT)
113DEF_FUNCTION_TYPE_2 (BT_FN_VOID_VPTR_INT, BT_VOID, BT_VOLATILE_PTR, BT_INT)
114DEF_FUNCTION_TYPE_2 (BT_FN_BOOL_VPTR_INT, BT_BOOL, BT_VOLATILE_PTR, BT_INT)
115DEF_FUNCTION_TYPE_2 (BT_FN_BOOL_SIZE_CONST_VPTR, BT_BOOL, BT_SIZE,
116		     BT_CONST_VOLATILE_PTR)
117DEF_FUNCTION_TYPE_2 (BT_FN_BOOL_INT_BOOL, BT_BOOL, BT_INT, BT_BOOL)
118DEF_FUNCTION_TYPE_2 (BT_FN_VOID_UINT_UINT, BT_VOID, BT_UINT, BT_UINT)
119
120DEF_POINTER_TYPE (BT_PTR_FN_VOID_PTR_PTR, BT_FN_VOID_PTR_PTR)
121
122DEF_FUNCTION_TYPE_3 (BT_FN_BOOL_VPTR_I1_I1, BT_BOOL, BT_VOLATILE_PTR,
123                     BT_I1, BT_I1)
124DEF_FUNCTION_TYPE_3 (BT_FN_BOOL_VPTR_I2_I2, BT_BOOL, BT_VOLATILE_PTR,
125                     BT_I2, BT_I2)
126DEF_FUNCTION_TYPE_3 (BT_FN_BOOL_VPTR_I4_I4, BT_BOOL, BT_VOLATILE_PTR,
127                     BT_I4, BT_I4)
128DEF_FUNCTION_TYPE_3 (BT_FN_BOOL_VPTR_I8_I8, BT_BOOL, BT_VOLATILE_PTR,
129                     BT_I8, BT_I8)
130DEF_FUNCTION_TYPE_3 (BT_FN_BOOL_VPTR_I16_I16, BT_BOOL, BT_VOLATILE_PTR,
131                     BT_I16, BT_I16)
132DEF_FUNCTION_TYPE_3 (BT_FN_I1_VPTR_I1_I1, BT_I1, BT_VOLATILE_PTR, BT_I1, BT_I1)
133DEF_FUNCTION_TYPE_3 (BT_FN_I2_VPTR_I2_I2, BT_I2, BT_VOLATILE_PTR, BT_I2, BT_I2)
134DEF_FUNCTION_TYPE_3 (BT_FN_I4_VPTR_I4_I4, BT_I4, BT_VOLATILE_PTR, BT_I4, BT_I4)
135DEF_FUNCTION_TYPE_3 (BT_FN_I8_VPTR_I8_I8, BT_I8, BT_VOLATILE_PTR, BT_I8, BT_I8)
136DEF_FUNCTION_TYPE_3 (BT_FN_I16_VPTR_I16_I16, BT_I16, BT_VOLATILE_PTR,
137		     BT_I16, BT_I16)
138DEF_FUNCTION_TYPE_3 (BT_FN_I1_VPTR_I1_INT, BT_I1, BT_VOLATILE_PTR, BT_I1, BT_INT)
139DEF_FUNCTION_TYPE_3 (BT_FN_I2_VPTR_I2_INT, BT_I2, BT_VOLATILE_PTR, BT_I2, BT_INT)
140DEF_FUNCTION_TYPE_3 (BT_FN_I4_VPTR_I4_INT, BT_I4, BT_VOLATILE_PTR, BT_I4, BT_INT)
141DEF_FUNCTION_TYPE_3 (BT_FN_I8_VPTR_I8_INT, BT_I8, BT_VOLATILE_PTR, BT_I8, BT_INT)
142DEF_FUNCTION_TYPE_3 (BT_FN_I16_VPTR_I16_INT, BT_I16, BT_VOLATILE_PTR, BT_I16, BT_INT)
143DEF_FUNCTION_TYPE_3 (BT_FN_VOID_VPTR_I1_INT, BT_VOID, BT_VOLATILE_PTR, BT_I1, BT_INT)
144DEF_FUNCTION_TYPE_3 (BT_FN_VOID_VPTR_I2_INT, BT_VOID, BT_VOLATILE_PTR, BT_I2, BT_INT)
145DEF_FUNCTION_TYPE_3 (BT_FN_VOID_VPTR_I4_INT, BT_VOID, BT_VOLATILE_PTR, BT_I4, BT_INT)
146DEF_FUNCTION_TYPE_3 (BT_FN_VOID_VPTR_I8_INT, BT_VOID, BT_VOLATILE_PTR, BT_I8, BT_INT)
147DEF_FUNCTION_TYPE_3 (BT_FN_VOID_VPTR_I16_INT, BT_VOID, BT_VOLATILE_PTR, BT_I16, BT_INT)
148
149DEF_FUNCTION_TYPE_4 (BT_FN_VOID_OMPFN_PTR_UINT_UINT,
150                     BT_VOID, BT_PTR_FN_VOID_PTR, BT_PTR, BT_UINT, BT_UINT)
151DEF_FUNCTION_TYPE_4 (BT_FN_VOID_PTR_WORD_WORD_PTR,
152		     BT_VOID, BT_PTR, BT_WORD, BT_WORD, BT_PTR)
153DEF_FUNCTION_TYPE_4 (BT_FN_VOID_SIZE_VPTR_PTR_INT, BT_VOID, BT_SIZE,
154		     BT_VOLATILE_PTR, BT_PTR, BT_INT)
155DEF_FUNCTION_TYPE_4 (BT_FN_VOID_SIZE_CONST_VPTR_PTR_INT, BT_VOID, BT_SIZE,
156		     BT_CONST_VOLATILE_PTR, BT_PTR, BT_INT)
157
158DEF_FUNCTION_TYPE_5 (BT_FN_VOID_OMPFN_PTR_UINT_UINT_UINT,
159		     BT_VOID, BT_PTR_FN_VOID_PTR, BT_PTR, BT_UINT, BT_UINT,
160		     BT_UINT)
161DEF_FUNCTION_TYPE_5 (BT_FN_BOOL_LONG_LONG_LONG_LONGPTR_LONGPTR,
162                     BT_BOOL, BT_LONG, BT_LONG, BT_LONG,
163		     BT_PTR_LONG, BT_PTR_LONG)
164DEF_FUNCTION_TYPE_5 (BT_FN_VOID_SIZE_VPTR_PTR_PTR_INT, BT_VOID, BT_SIZE,
165		     BT_VOLATILE_PTR, BT_PTR, BT_PTR, BT_INT)
166DEF_FUNCTION_TYPE_5 (BT_FN_VOID_INT_SIZE_PTR_PTR_PTR,
167		     BT_VOID, BT_INT, BT_SIZE, BT_PTR, BT_PTR, BT_PTR)
168
169DEF_FUNCTION_TYPE_6 (BT_FN_BOOL_LONG_LONG_LONG_LONG_LONGPTR_LONGPTR,
170                     BT_BOOL, BT_LONG, BT_LONG, BT_LONG, BT_LONG,
171		     BT_PTR_LONG, BT_PTR_LONG)
172DEF_FUNCTION_TYPE_6 (BT_FN_BOOL_BOOL_ULL_ULL_ULL_ULLPTR_ULLPTR,
173		     BT_BOOL, BT_BOOL, BT_ULONGLONG, BT_ULONGLONG,
174		     BT_ULONGLONG, BT_PTR_ULONGLONG, BT_PTR_ULONGLONG)
175DEF_FUNCTION_TYPE_6 (BT_FN_BOOL_VPTR_PTR_I1_BOOL_INT_INT, 
176		     BT_BOOL, BT_VOLATILE_PTR, BT_PTR, BT_I1, BT_BOOL, BT_INT,
177		     BT_INT)
178DEF_FUNCTION_TYPE_6 (BT_FN_BOOL_VPTR_PTR_I2_BOOL_INT_INT, 
179		     BT_BOOL, BT_VOLATILE_PTR, BT_PTR, BT_I2, BT_BOOL, BT_INT,
180		     BT_INT)
181DEF_FUNCTION_TYPE_6 (BT_FN_BOOL_VPTR_PTR_I4_BOOL_INT_INT, 
182		     BT_BOOL, BT_VOLATILE_PTR, BT_PTR, BT_I4, BT_BOOL, BT_INT,
183		     BT_INT)
184DEF_FUNCTION_TYPE_6 (BT_FN_BOOL_VPTR_PTR_I8_BOOL_INT_INT, 
185		     BT_BOOL, BT_VOLATILE_PTR, BT_PTR, BT_I8, BT_BOOL, BT_INT,
186		     BT_INT)
187DEF_FUNCTION_TYPE_6 (BT_FN_BOOL_VPTR_PTR_I16_BOOL_INT_INT, 
188		     BT_BOOL, BT_VOLATILE_PTR, BT_PTR, BT_I16, BT_BOOL, BT_INT,
189		     BT_INT)
190DEF_FUNCTION_TYPE_6 (BT_FN_BOOL_SIZE_VPTR_PTR_PTR_INT_INT, BT_BOOL, BT_SIZE,
191		     BT_VOLATILE_PTR, BT_PTR, BT_PTR, BT_INT, BT_INT)
192DEF_FUNCTION_TYPE_6 (BT_FN_VOID_INT_PTR_SIZE_PTR_PTR_PTR,
193		     BT_VOID, BT_INT, BT_PTR, BT_SIZE, BT_PTR, BT_PTR, BT_PTR)
194
195DEF_FUNCTION_TYPE_7 (BT_FN_VOID_OMPFN_PTR_UINT_LONG_LONG_LONG_UINT,
196                     BT_VOID, BT_PTR_FN_VOID_PTR, BT_PTR, BT_UINT,
197		     BT_LONG, BT_LONG, BT_LONG, BT_UINT)
198DEF_FUNCTION_TYPE_7 (BT_FN_BOOL_BOOL_ULL_ULL_ULL_ULL_ULLPTR_ULLPTR,
199		     BT_BOOL, BT_BOOL, BT_ULONGLONG, BT_ULONGLONG,
200		     BT_ULONGLONG, BT_ULONGLONG,
201		     BT_PTR_ULONGLONG, BT_PTR_ULONGLONG)
202DEF_FUNCTION_TYPE_7 (BT_FN_VOID_INT_OMPFN_PTR_SIZE_PTR_PTR_PTR,
203		     BT_VOID, BT_INT, BT_PTR_FN_VOID_PTR, BT_PTR, BT_SIZE,
204		     BT_PTR, BT_PTR, BT_PTR)
205
206DEF_FUNCTION_TYPE_8 (BT_FN_VOID_OMPFN_PTR_UINT_LONG_LONG_LONG_LONG_UINT,
207		     BT_VOID, BT_PTR_FN_VOID_PTR, BT_PTR, BT_UINT,
208		     BT_LONG, BT_LONG, BT_LONG, BT_LONG, BT_UINT)
209DEF_FUNCTION_TYPE_8 (BT_FN_VOID_OMPFN_PTR_OMPCPYFN_LONG_LONG_BOOL_UINT_PTR,
210		     BT_VOID, BT_PTR_FN_VOID_PTR, BT_PTR,
211		     BT_PTR_FN_VOID_PTR_PTR, BT_LONG, BT_LONG,
212		     BT_BOOL, BT_UINT, BT_PTR)
213
214DEF_FUNCTION_TYPE_VAR_0 (BT_FN_VOID_VAR, BT_VOID)
215
216DEF_FUNCTION_TYPE_VAR_2 (BT_FN_VOID_INT_INT_VAR, BT_VOID, BT_INT, BT_INT)
217
218DEF_FUNCTION_TYPE_VAR_7 (BT_FN_VOID_INT_SIZE_PTR_PTR_PTR_INT_INT_VAR,
219			 BT_VOID, BT_INT, BT_SIZE, BT_PTR, BT_PTR,
220			 BT_PTR, BT_INT, BT_INT)
221
222DEF_FUNCTION_TYPE_VAR_11 (BT_FN_VOID_INT_OMPFN_SIZE_PTR_PTR_PTR_INT_INT_INT_INT_INT_VAR,
223			  BT_VOID, BT_INT, BT_PTR_FN_VOID_PTR, BT_SIZE,
224			  BT_PTR, BT_PTR, BT_PTR, BT_INT, BT_INT, BT_INT,
225			  BT_INT, BT_INT)
226