1/* Compilation switch flag definitions for GCC.
2   Copyright (C) 1987-2015 Free Software Foundation, Inc.
3
4This file is part of GCC.
5
6GCC is free software; you can redistribute it and/or modify it under
7the terms of the GNU General Public License as published by the Free
8Software Foundation; either version 3, or (at your option) any later
9version.
10
11GCC is distributed in the hope that it will be useful, but WITHOUT ANY
12WARRANTY; without even the implied warranty of MERCHANTABILITY or
13FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
14for more details.
15
16You should have received a copy of the GNU General Public License
17along with GCC; see the file COPYING3.  If not see
18<http://www.gnu.org/licenses/>.  */
19
20#ifndef GCC_FLAGS_H
21#define GCC_FLAGS_H
22
23#include "flag-types.h"
24#include "options.h"
25
26#if !defined(IN_LIBGCC2) && !defined(IN_TARGET_LIBS) && !defined(IN_RTS)
27
28/* Names of debug_info_type, for error messages.  */
29extern const char *const debug_type_names[];
30
31extern void strip_off_ending (char *, int);
32extern int base_of_path (const char *path, const char **base_out);
33
34/* Return true iff flags are set as if -ffast-math.  */
35extern bool fast_math_flags_set_p (const struct gcc_options *);
36extern bool fast_math_flags_struct_set_p (struct cl_optimization *);
37
38
39/* Now the symbols that are set with `-f' switches.  */
40
41/* True if printing into -fdump-final-insns= dump.  */
42
43extern bool final_insns_dump_p;
44
45
46/* Other basic status info about current function.  */
47
48/* Target-dependent global state.  */
49struct target_flag_state {
50  /* Values of the -falign-* flags: how much to align labels in code.
51     0 means `use default', 1 means `don't align'.
52     For each variable, there is an _log variant which is the power
53     of two not less than the variable, for .align output.  */
54  int x_align_loops_log;
55  int x_align_loops_max_skip;
56  int x_align_jumps_log;
57  int x_align_jumps_max_skip;
58  int x_align_labels_log;
59  int x_align_labels_max_skip;
60  int x_align_functions_log;
61
62  /* The excess precision currently in effect.  */
63  enum excess_precision x_flag_excess_precision;
64};
65
66extern struct target_flag_state default_target_flag_state;
67#if SWITCHABLE_TARGET
68extern struct target_flag_state *this_target_flag_state;
69#else
70#define this_target_flag_state (&default_target_flag_state)
71#endif
72
73#define align_loops_log \
74  (this_target_flag_state->x_align_loops_log)
75#define align_loops_max_skip \
76  (this_target_flag_state->x_align_loops_max_skip)
77#define align_jumps_log \
78  (this_target_flag_state->x_align_jumps_log)
79#define align_jumps_max_skip \
80  (this_target_flag_state->x_align_jumps_max_skip)
81#define align_labels_log \
82  (this_target_flag_state->x_align_labels_log)
83#define align_labels_max_skip \
84  (this_target_flag_state->x_align_labels_max_skip)
85#define align_functions_log \
86  (this_target_flag_state->x_align_functions_log)
87#define flag_excess_precision \
88  (this_target_flag_state->x_flag_excess_precision)
89
90/* Returns TRUE if generated code should match ABI version N or
91   greater is in use.  */
92
93#define abi_version_at_least(N) \
94  (flag_abi_version == 0 || flag_abi_version >= (N))
95
96/* Whether to emit an overflow warning whose code is C.  */
97#define issue_strict_overflow_warning(c) (warn_strict_overflow >= (int) (c))
98
99#endif
100
101#endif /* ! GCC_FLAGS_H */
102