Subversion Repositories Kolibri OS

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
6515 serge 1
/* GCC core type declarations.
2
   Copyright (C) 2002-2015 Free Software Foundation, Inc.
3
 
4
This file is part of GCC.
5
 
6
GCC is free software; you can redistribute it and/or modify it under
7
the terms of the GNU General Public License as published by the Free
8
Software Foundation; either version 3, or (at your option) any later
9
version.
10
 
11
GCC is distributed in the hope that it will be useful, but WITHOUT ANY
12
WARRANTY; without even the implied warranty of MERCHANTABILITY or
13
FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
14
for more details.
15
 
16
Under Section 7 of GPL version 3, you are granted additional
17
permissions described in the GCC Runtime Library Exception, version
18
3.1, as published by the Free Software Foundation.
19
 
20
You should have received a copy of the GNU General Public License and
21
a copy of the GCC Runtime Library Exception along with this program;
22
see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
23
.  */
24
 
25
/* Provide forward declarations of core types which are referred to by
26
   most of the compiler.  This allows header files to use these types
27
   (e.g. in function prototypes) without concern for whether the full
28
   definitions are visible.  Some other declarations that need to be
29
   universally visible are here, too.
30
 
31
   In the context of tconfig.h, most of these have special definitions
32
   which prevent them from being used except in further type
33
   declarations.  This is a kludge; the right thing is to avoid
34
   including the "tm.h" header set in the context of tconfig.h, but
35
   we're not there yet.  */
36
 
37
#ifndef GCC_CORETYPES_H
38
#define GCC_CORETYPES_H
39
 
40
#ifndef GTY
41
#define GTY(x)  /* nothing - marker for gengtype */
42
#endif
43
 
44
#ifndef USED_FOR_TARGET
45
 
46
typedef int64_t gcov_type;
47
typedef uint64_t gcov_type_unsigned;
48
 
49
struct bitmap_head;
50
typedef struct bitmap_head *bitmap;
51
typedef const struct bitmap_head *const_bitmap;
52
struct simple_bitmap_def;
53
typedef struct simple_bitmap_def *sbitmap;
54
typedef const struct simple_bitmap_def *const_sbitmap;
55
struct rtx_def;
56
typedef struct rtx_def *rtx;
57
typedef const struct rtx_def *const_rtx;
58
 
59
/* Subclasses of rtx_def, using indentation to show the class
60
   hierarchy, along with the relevant invariant.
61
   Where possible, keep this list in the same order as in rtl.def.  */
62
class rtx_def;
63
  class rtx_expr_list;           /* GET_CODE (X) == EXPR_LIST */
64
  class rtx_insn_list;           /* GET_CODE (X) == INSN_LIST */
65
  class rtx_sequence;            /* GET_CODE (X) == SEQUENCE */
66
  class rtx_insn;
67
    class rtx_debug_insn;      /* DEBUG_INSN_P (X) */
68
    class rtx_nonjump_insn;    /* NONJUMP_INSN_P (X) */
69
    class rtx_jump_insn;       /* JUMP_P (X) */
70
    class rtx_call_insn;       /* CALL_P (X) */
71
    class rtx_jump_table_data; /* JUMP_TABLE_DATA_P (X) */
72
    class rtx_barrier;         /* BARRIER_P (X) */
73
    class rtx_code_label;      /* LABEL_P (X) */
74
    class rtx_note;            /* NOTE_P (X) */
75
 
76
struct rtvec_def;
77
typedef struct rtvec_def *rtvec;
78
typedef const struct rtvec_def *const_rtvec;
79
struct hwivec_def;
80
typedef struct hwivec_def *hwivec;
81
typedef const struct hwivec_def *const_hwivec;
82
union tree_node;
83
typedef union tree_node *tree;
84
typedef const union tree_node *const_tree;
85
typedef struct gimple_statement_base *gimple;
86
typedef const struct gimple_statement_base *const_gimple;
87
typedef gimple gimple_seq;
88
struct gimple_stmt_iterator;
89
 
90
/* Forward decls for leaf gimple subclasses (for individual gimple codes).
91
   Keep this in the same order as the corresponding codes in gimple.def.  */
92
 
93
struct gcond;
94
struct gdebug;
95
struct ggoto;
96
struct glabel;
97
struct gswitch;
98
struct gassign;
99
struct gasm;
100
struct gcall;
101
struct gtransaction;
102
struct greturn;
103
struct gbind;
104
struct gcatch;
105
struct geh_filter;
106
struct geh_mnt;
107
struct geh_else;
108
struct gresx;
109
struct geh_dispatch;
110
struct gphi;
111
struct gtry;
112
struct gomp_atomic_load;
113
struct gomp_atomic_store;
114
struct gomp_continue;
115
struct gomp_critical;
116
struct gomp_for;
117
struct gomp_parallel;
118
struct gomp_task;
119
struct gomp_sections;
120
struct gomp_single;
121
struct gomp_target;
122
struct gomp_teams;
123
 
124
union section;
125
typedef union section section;
126
struct gcc_options;
127
struct cl_target_option;
128
struct cl_optimization;
129
struct cl_option;
130
struct cl_decoded_option;
131
struct cl_option_handlers;
132
struct diagnostic_context;
133
struct pretty_printer;
134
 
135
/* Address space number for named address space support.  */
136
typedef unsigned char addr_space_t;
137
 
138
/* The value of addr_space_t that represents the generic address space.  */
139
#define ADDR_SPACE_GENERIC 0
140
#define ADDR_SPACE_GENERIC_P(AS) ((AS) == ADDR_SPACE_GENERIC)
141
 
142
/* The major intermediate representations of GCC.  */
143
enum ir_type {
144
  IR_GIMPLE,
145
  IR_RTL_CFGRTL,
146
  IR_RTL_CFGLAYOUT
147
};
148
 
149
/* Provide forward struct declaration so that we don't have to include
150
   all of cpplib.h whenever a random prototype includes a pointer.
151
   Note that the cpp_reader and cpp_token typedefs remain part of
152
   cpplib.h.  */
153
 
154
struct cpp_reader;
155
struct cpp_token;
156
 
157
/* The thread-local storage model associated with a given VAR_DECL
158
   or SYMBOL_REF.  This isn't used much, but both trees and RTL refer
159
   to it, so it's here.  */
160
enum tls_model {
161
  TLS_MODEL_NONE,
162
  TLS_MODEL_EMULATED,
163
  TLS_MODEL_REAL,
164
  TLS_MODEL_GLOBAL_DYNAMIC = TLS_MODEL_REAL,
165
  TLS_MODEL_LOCAL_DYNAMIC,
166
  TLS_MODEL_INITIAL_EXEC,
167
  TLS_MODEL_LOCAL_EXEC
168
};
169
 
170
/* Types of ABI for an offload compiler.  */
171
enum offload_abi {
172
  OFFLOAD_ABI_UNSET,
173
  OFFLOAD_ABI_LP64,
174
  OFFLOAD_ABI_ILP32
175
};
176
 
177
/* Types of unwind/exception handling info that can be generated.  */
178
 
179
enum unwind_info_type
180
{
181
  UI_NONE,
182
  UI_SJLJ,
183
  UI_DWARF2,
184
  UI_TARGET,
185
  UI_SEH
186
};
187
 
188
/* Callgraph node profile representation.  */
189
enum node_frequency {
190
  /* This function most likely won't be executed at all.
191
     (set only when profile feedback is available or via function attribute). */
192
  NODE_FREQUENCY_UNLIKELY_EXECUTED,
193
  /* For functions that are known to be executed once (i.e. constructors, destructors
194
     and main function.  */
195
  NODE_FREQUENCY_EXECUTED_ONCE,
196
  /* The default value.  */
197
  NODE_FREQUENCY_NORMAL,
198
  /* Optimize this function hard
199
     (set only when profile feedback is available or via function attribute). */
200
  NODE_FREQUENCY_HOT
201
};
202
 
203
/* Possible initialization status of a variable.   When requested
204
   by the user, this information is tracked and recorded in the DWARF
205
   debug information, along with the variable's location.  */
206
enum var_init_status
207
{
208
  VAR_INIT_STATUS_UNKNOWN,
209
  VAR_INIT_STATUS_UNINITIALIZED,
210
  VAR_INIT_STATUS_INITIALIZED
211
};
212
 
213
 
214
struct edge_def;
215
typedef struct edge_def *edge;
216
typedef const struct edge_def *const_edge;
217
struct basic_block_def;
218
typedef struct basic_block_def *basic_block;
219
typedef const struct basic_block_def *const_basic_block;
220
 
221
#define obstack_chunk_alloc	xmalloc
222
#define obstack_chunk_free	free
223
#define OBSTACK_CHUNK_SIZE	0
224
#define gcc_obstack_init(OBSTACK)				\
225
  obstack_specify_allocation ((OBSTACK), OBSTACK_CHUNK_SIZE, 0,	\
226
			      obstack_chunk_alloc,		\
227
			      obstack_chunk_free)
228
 
229
/* enum reg_class is target specific, so it should not appear in
230
   target-independent code or interfaces, like the target hook declarations
231
   in target.h.  */
232
typedef int reg_class_t;
233
 
234
class rtl_opt_pass;
235
 
236
namespace gcc {
237
  class context;
238
}
239
 
240
#else
241
 
242
struct _dont_use_rtx_here_;
243
struct _dont_use_rtvec_here_;
244
struct _dont_use_rtx_insn_here_;
245
union _dont_use_tree_here_;
246
#define rtx struct _dont_use_rtx_here_ *
247
#define const_rtx struct _dont_use_rtx_here_ *
248
#define rtvec struct _dont_use_rtvec_here *
249
#define const_rtvec struct _dont_use_rtvec_here *
250
#define rtx_insn struct _dont_use_rtx_insn_here_
251
#define tree union _dont_use_tree_here_ *
252
#define const_tree union _dont_use_tree_here_ *
253
 
254
#endif
255
 
256
/* Classes of functions that compiler needs to check
257
   whether they are present at the runtime or not.  */
258
enum function_class {
259
  function_c94,
260
  function_c99_misc,
261
  function_c99_math_complex,
262
  function_sincos,
263
  function_c11_misc
264
};
265
 
266
/* Suppose that higher bits are target dependent. */
267
#define MEMMODEL_MASK ((1<<16)-1)
268
 
269
/* Legacy sync operations set this upper flag in the memory model.  This allows
270
   targets that need to do something stronger for sync operations to
271
   differentiate with their target patterns and issue a more appropriate insn
272
   sequence.  See bugzilla 65697 for background.  */
273
#define MEMMODEL_SYNC (1<<15)
274
 
275
/* Memory model without SYNC bit for targets/operations that do not care.  */
276
#define MEMMODEL_BASE_MASK (MEMMODEL_SYNC-1)
277
 
278
/* Memory model types for the __atomic* builtins.
279
   This must match the order in libstdc++-v3/include/bits/atomic_base.h.  */
280
enum memmodel
281
{
282
  MEMMODEL_RELAXED = 0,
283
  MEMMODEL_CONSUME = 1,
284
  MEMMODEL_ACQUIRE = 2,
285
  MEMMODEL_RELEASE = 3,
286
  MEMMODEL_ACQ_REL = 4,
287
  MEMMODEL_SEQ_CST = 5,
288
  MEMMODEL_LAST = 6,
289
  MEMMODEL_SYNC_ACQUIRE = MEMMODEL_ACQUIRE | MEMMODEL_SYNC,
290
  MEMMODEL_SYNC_RELEASE = MEMMODEL_RELEASE | MEMMODEL_SYNC,
291
  MEMMODEL_SYNC_SEQ_CST = MEMMODEL_SEQ_CST | MEMMODEL_SYNC
292
};
293
 
294
/* Support for user-provided GGC and PCH markers.  The first parameter
295
   is a pointer to a pointer, the second a cookie.  */
296
typedef void (*gt_pointer_operator) (void *, void *);
297
 
298
#if !defined (HAVE_UCHAR)
299
typedef unsigned char uchar;
300
#endif
301
 
302
#endif /* coretypes.h */