diff options
Diffstat (limited to 'gcc/flags.h')
-rw-r--r-- | gcc/flags.h | 71 |
1 files changed, 45 insertions, 26 deletions
diff --git a/gcc/flags.h b/gcc/flags.h index d5d4d78..bfd645b 100644 --- a/gcc/flags.h +++ b/gcc/flags.h @@ -42,19 +42,32 @@ extern bool final_insns_dump_p; /* Other basic status info about current function. */ -/* Target-dependent global state. */ -struct target_flag_state { +/* Align flags tuple with alignment in log form and with a maximum skip. */ + +struct align_flags_tuple +{ /* Values of the -falign-* flags: how much to align labels in code. - 0 means `use default', 1 means `don't align'. - For each variable, there is an _log variant which is the power - of two not less than the variable, for .align output. */ - int x_align_loops_log; - int x_align_loops_max_skip; - int x_align_jumps_log; - int x_align_jumps_max_skip; - int x_align_labels_log; - int x_align_labels_max_skip; - int x_align_functions_log; + log is "align to 2^log" (so 0 means no alignment). + maxskip is the maximum allowed amount of padding to insert. */ + int log; + int maxskip; +}; + +/* Target-dependent global state. */ + +struct align_flags +{ + align_flags_tuple levels[2]; +}; + +struct target_flag_state +{ + /* Each falign-foo can generate up to two levels of alignment: + -falign-foo=N:M[:N2:M2] */ + align_flags x_align_loops; + align_flags x_align_jumps; + align_flags x_align_labels; + align_flags x_align_functions; /* The excess precision currently in effect. */ enum excess_precision x_flag_excess_precision; @@ -67,20 +80,26 @@ extern struct target_flag_state *this_target_flag_state; #define this_target_flag_state (&default_target_flag_state) #endif -#define align_loops_log \ - (this_target_flag_state->x_align_loops_log) -#define align_loops_max_skip \ - (this_target_flag_state->x_align_loops_max_skip) -#define align_jumps_log \ - (this_target_flag_state->x_align_jumps_log) -#define align_jumps_max_skip \ - (this_target_flag_state->x_align_jumps_max_skip) -#define align_labels_log \ - (this_target_flag_state->x_align_labels_log) -#define align_labels_max_skip \ - (this_target_flag_state->x_align_labels_max_skip) -#define align_functions_log \ - (this_target_flag_state->x_align_functions_log) +#define state_align_loops (this_target_flag_state->x_align_loops) +#define state_align_jumps (this_target_flag_state->x_align_jumps) +#define state_align_labels (this_target_flag_state->x_align_labels) +#define state_align_functions (this_target_flag_state->x_align_functions) +#define align_loops_log (state_align_loops.levels[0].log) +#define align_jumps_log (state_align_jumps.levels[0].log) +#define align_labels_log (state_align_labels.levels[0].log) +#define align_functions_log (state_align_functions.levels[0].log) +#define align_loops_max_skip (state_align_loops.levels[0].maxskip) +#define align_jumps_max_skip (state_align_jumps.levels[0].maxskip) +#define align_labels_max_skip (state_align_labels.levels[0].maxskip) +#define align_functions_max_skip (state_align_functions.levels[0].maxskip) +#define align_loops_value (align_loops_max_skip + 1) +#define align_jumps_value (align_jumps_max_skip + 1) +#define align_labels_value (align_labels_max_skip + 1) +#define align_functions_value (align_functions_max_skip + 1) + +/* String representaions of the above options are available in + const char *str_align_foo. NULL if not set. */ + #define flag_excess_precision \ (this_target_flag_state->x_flag_excess_precision) |