X-Git-Url: http://git.sourceforge.jp/view?a=blobdiff_plain;f=gcc%2Fparams.c;h=793ddef924173e3057b2ade463dc14957953b6bf;hb=fab4327cca4fcb559918f537dd185c2891efc612;hp=666913a7b2572768ff5acccec3ef8df25b203336;hpb=686e27690af4295ea88041c1d2d7fd31ee8f1cb7;p=pf3gnuchains%2Fgcc-fork.git diff --git a/gcc/params.c b/gcc/params.c index 666913a7b25..793ddef9241 100644 --- a/gcc/params.c +++ b/gcc/params.c @@ -1,5 +1,5 @@ /* params.c - Run-time parameters. - Copyright (C) 2001, 2003, 2004, 2005, 2007, 2008, 2009, 2010 + Copyright (C) 2001, 2003, 2004, 2005, 2007, 2008, 2009, 2010, 2011 Free Software Foundation, Inc. Written by Mark Mitchell . @@ -22,10 +22,9 @@ along with GCC; see the file COPYING3. If not see #include "config.h" #include "system.h" #include "coretypes.h" -#include "tm.h" +#include "common/common-target.h" #include "params.h" #include "diagnostic-core.h" -#include "toplev.h" /* An array containing the compiler parameters and their current values. */ @@ -35,11 +34,25 @@ param_info *compiler_params; /* The number of entries in the table. */ static size_t num_compiler_params; +/* Whether the parameters have all been initialized and had their + default values determined. */ +static bool params_finished; + +static const param_info lang_independent_params[] = { +#define DEFPARAM(ENUM, OPTION, HELP, DEFAULT, MIN, MAX) \ + { OPTION, DEFAULT, MIN, MAX, HELP }, +#include "params.def" +#undef DEFPARAM + { NULL, 0, 0, 0, NULL } +}; + /* Add the N PARAMS to the current list of compiler parameters. */ void add_params (const param_info params[], size_t n) { + gcc_assert (!params_finished); + /* Allocate enough space for the new parameters. */ compiler_params = XRESIZEVEC (param_info, compiler_params, num_compiler_params + n); @@ -51,25 +64,49 @@ add_params (const param_info params[], size_t n) num_compiler_params += n; } -/* Set the value of the parameter given by NUM to VALUE. If - EXPLICIT_P, this is being set by the user; otherwise it is being - set implicitly by the compiler. */ +/* Add all parameters and default values that can be set in both the + driver and the compiler proper. */ + +void +global_init_params (void) +{ + add_params (lang_independent_params, LAST_PARAM); + targetm_common.option_default_params (); +} + +/* Note that all parameters have been added and all default values + set. */ + +void +finish_params (void) +{ + params_finished = true; +} + +/* Set the value of the parameter given by NUM to VALUE in PARAMS and + PARAMS_SET. If EXPLICIT_P, this is being set by the user; + otherwise it is being set implicitly by the compiler. */ static void set_param_value_internal (compiler_param num, int value, + int *params, int *params_set, bool explicit_p) { size_t i = (size_t) num; - compiler_params[i].value = value; + gcc_assert (params_finished); + + params[i] = value; if (explicit_p) - compiler_params[i].set = true; + params_set[i] = true; } -/* Set the VALUE associated with the parameter given by NAME. */ +/* Set the VALUE associated with the parameter given by NAME in PARAMS + and PARAMS_SET. */ void -set_param_value (const char *name, int value) +set_param_value (const char *name, int value, + int *params, int *params_set) { size_t i; @@ -90,7 +127,8 @@ set_param_value (const char *name, int value) compiler_params[i].option, compiler_params[i].max_value); else - set_param_value_internal ((compiler_param) i, value, true); + set_param_value_internal ((compiler_param) i, value, + params, params_set, true); return; } @@ -98,14 +136,16 @@ set_param_value (const char *name, int value) error ("invalid parameter %qs", name); } -/* Set the value of the parameter given by NUM to VALUE, implicitly, - if it has not been set explicitly by the user. */ +/* Set the value of the parameter given by NUM to VALUE in PARAMS and + PARAMS_SET, implicitly, if it has not been set explicitly by the + user. */ void -maybe_set_param_value (compiler_param num, int value) +maybe_set_param_value (compiler_param num, int value, + int *params, int *params_set) { - if (!PARAM_SET_P (num)) - set_param_value_internal (num, value, false); + if (!params_set[(int) num]) + set_param_value_internal (num, value, params, params_set, false); } /* Set the default value of a parameter given by NUM to VALUE, before @@ -114,8 +154,31 @@ maybe_set_param_value (compiler_param num, int value) void set_default_param_value (compiler_param num, int value) { - gcc_assert (!PARAM_SET_P (num)); - set_param_value_internal (num, value, false); + gcc_assert (!params_finished); + + compiler_params[(int) num].default_value = value; +} + +/* Return the default value of parameter NUM. */ + +int +default_param_value (compiler_param num) +{ + return compiler_params[(int) num].default_value; +} + +/* Initialize an array PARAMS with default values of the + parameters. */ + +void +init_param_values (int *params) +{ + size_t i; + + gcc_assert (params_finished); + + for (i = 0; i < num_compiler_params; i++) + params[i] = compiler_params[i].default_value; } /* Return the current value of num_compiler_params, for the benefit of