1 /* toplev.h - Various declarations for functions found in toplev.c
2 Copyright (C) 1998, 1999, 2000, 2001, 2003, 2004, 2005, 2006, 2007,
4 Free Software Foundation, Inc.
6 This file is part of GCC.
8 GCC is free software; you can redistribute it and/or modify it under
9 the terms of the GNU General Public License as published by the Free
10 Software Foundation; either version 3, or (at your option) any later
13 GCC is distributed in the hope that it will be useful, but WITHOUT ANY
14 WARRANTY; without even the implied warranty of MERCHANTABILITY or
15 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
18 You should have received a copy of the GNU General Public License
19 along with GCC; see the file COPYING3. If not see
20 <http://www.gnu.org/licenses/>. */
27 /* If non-NULL, return one past-the-end of the matching SUBPART of
29 #define skip_leading_substring(whole, part) \
30 (strncmp (whole, part, strlen (part)) ? NULL : whole + strlen (part))
32 /* Decoded options, and number of such options. */
33 extern struct cl_decoded_option
*save_decoded_options
;
34 extern unsigned int save_decoded_options_count
;
36 extern int toplev_main (int, char **);
37 extern void rest_of_decl_compilation (tree
, int, int);
38 extern void rest_of_type_compilation (tree
, int);
39 extern void tree_rest_of_compilation (tree
);
40 extern void init_optimization_passes (void);
41 extern void finish_optimization_passes (void);
42 extern bool enable_rtl_dump_file (void);
44 /* In except.c. Initialize exception handling. This is used by the Ada
45 and LTO front ends to initialize EH "on demand". See lto-streamer-in.c
46 and ada/gcc-interface/misc.c. */
47 extern void init_eh (void);
49 extern void announce_function (tree
);
51 extern void warn_deprecated_use (tree
, tree
);
52 extern bool parse_optimize_options (tree
, bool);
55 extern void output_quoted_string (FILE *, const char *);
58 extern void wrapup_global_declaration_1 (tree
);
59 extern bool wrapup_global_declaration_2 (tree
);
60 extern bool wrapup_global_declarations (tree
*, int);
61 extern void check_global_declaration_1 (tree
);
62 extern void check_global_declarations (tree
*, int);
63 extern void emit_debug_global_declarations (tree
*, int);
64 extern void write_global_declarations (void);
66 extern void dump_memory_report (bool);
68 extern void target_reinit (void);
70 /* A unique local time stamp, might be zero if none is available. */
71 extern unsigned local_tick
;
73 /* Top-level source file. */
74 extern const char *main_input_filename
;
75 extern const char *main_input_basename
;
76 extern int main_input_baselength
;
78 /* True if the user has tagged the function with the 'section'
81 extern bool user_defined_section_attribute
;
84 extern int flag_rerun_cse_after_global_opts
;
86 /* Things to do with target switches. */
87 extern void print_version (FILE *, const char *);
88 extern void * default_get_pch_validity (size_t *);
89 extern const char * default_pch_valid_p (const void *, size_t);
91 /* The hashtable, so that the C front ends can pass it to cpplib. */
92 extern struct ht
*ident_hash
;
94 /* Inline versions of the above for speed. */
95 #if GCC_VERSION < 3004
97 extern int clz_hwi (unsigned HOST_WIDE_INT x
);
98 extern int ctz_hwi (unsigned HOST_WIDE_INT x
);
99 extern int ffs_hwi (unsigned HOST_WIDE_INT x
);
101 /* Return log2, or -1 if not exact. */
102 extern int exact_log2 (unsigned HOST_WIDE_INT
);
104 /* Return floor of log2, with -1 for zero. */
105 extern int floor_log2 (unsigned HOST_WIDE_INT
);
107 #else /* GCC_VERSION >= 3004 */
109 /* For convenience, define 0 -> word_size. */
111 clz_hwi (unsigned HOST_WIDE_INT x
)
114 return HOST_BITS_PER_WIDE_INT
;
115 # if HOST_BITS_PER_WIDE_INT == HOST_BITS_PER_LONG
116 return __builtin_clzl (x
);
117 # elif HOST_BITS_PER_WIDE_INT == HOST_BITS_PER_LONGLONG
118 return __builtin_clzll (x
);
120 return __builtin_clz (x
);
125 ctz_hwi (unsigned HOST_WIDE_INT x
)
128 return HOST_BITS_PER_WIDE_INT
;
129 # if HOST_BITS_PER_WIDE_INT == HOST_BITS_PER_LONG
130 return __builtin_ctzl (x
);
131 # elif HOST_BITS_PER_WIDE_INT == HOST_BITS_PER_LONGLONG
132 return __builtin_ctzll (x
);
134 return __builtin_ctz (x
);
139 ffs_hwi (unsigned HOST_WIDE_INT x
)
141 # if HOST_BITS_PER_WIDE_INT == HOST_BITS_PER_LONG
142 return __builtin_ffsl (x
);
143 # elif HOST_BITS_PER_WIDE_INT == HOST_BITS_PER_LONGLONG
144 return __builtin_ffsll (x
);
146 return __builtin_ffs (x
);
151 floor_log2 (unsigned HOST_WIDE_INT x
)
153 return HOST_BITS_PER_WIDE_INT
- 1 - clz_hwi (x
);
157 exact_log2 (unsigned HOST_WIDE_INT x
)
159 return x
== (x
& -x
) && x
? ctz_hwi (x
) : -1;
162 #endif /* GCC_VERSION >= 3004 */
164 /* Functions used to get and set GCC's notion of in what directory
165 compilation was started. */
167 extern const char *get_src_pwd (void);
168 extern bool set_src_pwd (const char *);
170 /* Functions used to manipulate the random seed. */
172 extern const char *get_random_seed (bool);
173 extern const char *set_random_seed (const char *);
175 #endif /* ! GCC_TOPLEV_H */