OSDN Git Service

* toplev.c (target_options): Add value field.
authordj <dj@138bc75d-0d04-0410-961f-82ee72b054a4>
Thu, 17 Apr 2003 23:18:58 +0000 (23:18 +0000)
committerdj <dj@138bc75d-0d04-0410-961f-82ee72b054a4>
Thu, 17 Apr 2003 23:18:58 +0000 (23:18 +0000)
(set_target_switch): Handle target options with values.
* doc/tm.texi: Document how fixed vs variable target
options work.
* config/alpha/alpha.h, config/arc/arc.h, config/avr/avr.h,
config/c4x/c4x.h, config/cris/aout.h, config/cris/cris.h,
config/d30v/d30v.h, config/dsp16xx/dsp16xx.h,
config/frv/frv.h, config/i386/i386.h, config/ia64/ia64.h,
config/m32r/m32r.h, config/m68hc11/m68hc11.h,
config/m68k/m68k.h, config/m88k/m88k.h, config/mcore/mcore.h,
config/mips/mips.h, config/mmix/mmix.h, config/pa/pa.h,
config/rs6000/rs6000.h, config/rs6000/sysv4.h,
config/s390/s390.h, config/sparc/sparc.h, config/v850/v850.h:
Add value initializer to target options.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@65756 138bc75d-0d04-0410-961f-82ee72b054a4

27 files changed:
gcc/ChangeLog
gcc/config/alpha/alpha.h
gcc/config/arc/arc.h
gcc/config/avr/avr.h
gcc/config/c4x/c4x.h
gcc/config/cris/aout.h
gcc/config/cris/cris.h
gcc/config/d30v/d30v.h
gcc/config/dsp16xx/dsp16xx.h
gcc/config/frv/frv.h
gcc/config/i386/i386.h
gcc/config/ia64/ia64.h
gcc/config/m32r/m32r.h
gcc/config/m68hc11/m68hc11.h
gcc/config/m68k/m68k.h
gcc/config/m88k/m88k.h
gcc/config/mcore/mcore.h
gcc/config/mips/mips.h
gcc/config/mmix/mmix.h
gcc/config/pa/pa.h
gcc/config/rs6000/rs6000.h
gcc/config/rs6000/sysv4.h
gcc/config/s390/s390.h
gcc/config/sparc/sparc.h
gcc/config/v850/v850.h
gcc/doc/tm.texi
gcc/toplev.c

index ff7bf20..71135ae 100644 (file)
@@ -1,3 +1,20 @@
+2003-04-17  DJ Delorie  <dj@redhat.com>
+
+       * toplev.c (target_options): Add value field.
+       (set_target_switch): Handle target options with values.
+       * doc/tm.texi: Document how fixed vs variable target
+       options work.
+       * config/alpha/alpha.h, config/arc/arc.h, config/avr/avr.h,
+       config/c4x/c4x.h, config/cris/aout.h, config/cris/cris.h,
+       config/d30v/d30v.h, config/dsp16xx/dsp16xx.h,
+       config/frv/frv.h, config/i386/i386.h, config/ia64/ia64.h,
+       config/m32r/m32r.h, config/m68hc11/m68hc11.h,
+       config/m68k/m68k.h, config/m88k/m88k.h, config/mcore/mcore.h,
+       config/mips/mips.h, config/mmix/mmix.h, config/pa/pa.h,
+       config/rs6000/rs6000.h, config/rs6000/sysv4.h,
+       config/s390/s390.h, config/sparc/sparc.h, config/v850/v850.h:
+       Add value initializer to target options.
+
 2003-04-07  Loren James Rittle  <ljrittle@acm.org>
 
        * cpppch.c (cpp_valid_state): Unconditionally initialize nl.
index e20d3c8..32453cf 100644 (file)
@@ -350,19 +350,19 @@ extern const char *alpha_tls_size_string; /* For -mtls-size= */
 #define TARGET_OPTIONS                                 \
 {                                                      \
   {"cpu=",             &alpha_cpu_string,              \
-   N_("Use features of and schedule given CPU")},      \
+   N_("Use features of and schedule given CPU"), 0},   \
   {"tune=",            &alpha_tune_string,             \
-   N_("Schedule given CPU")},                          \
+   N_("Schedule given CPU"), 0},                       \
   {"fp-rounding-mode=",        &alpha_fprm_string,             \
-   N_("Control the generated fp rounding mode")},      \
+   N_("Control the generated fp rounding mode"), 0},   \
   {"fp-trap-mode=",    &alpha_fptm_string,             \
-   N_("Control the IEEE trap mode")},                  \
+   N_("Control the IEEE trap mode"), 0},               \
   {"trap-precision=",  &alpha_tp_string,               \
-   N_("Control the precision given to fp exceptions")},        \
+   N_("Control the precision given to fp exceptions"), 0},     \
   {"memory-latency=",  &alpha_mlat_string,             \
-   N_("Tune expected memory latency")},                        \
+   N_("Tune expected memory latency"), 0},             \
   {"tls-size=",                &alpha_tls_size_string,         \
-   N_("Specify bit size of immediate TLS offsets")},   \
+   N_("Specify bit size of immediate TLS offsets"), 0},        \
 }
 
 /* This macro defines names of additional specifications to put in the
index 4282f55..62c221d 100644 (file)
@@ -138,11 +138,11 @@ extern const char *arc_cpu_string;
 extern const char *arc_text_string,*arc_data_string,*arc_rodata_string;
 
 #define TARGET_OPTIONS \
-{                                              \
-  { "cpu=",    &arc_cpu_string         },      \
-  { "text=",   &arc_text_string        },      \
-  { "data=",   &arc_data_string        },      \
-  { "rodata=", &arc_rodata_string      },      \
+{                                      \
+  { "cpu=",    &arc_cpu_string, 0},    \
+  { "text=",   &arc_text_string, 0},   \
+  { "data=",   &arc_data_string, 0},   \
+  { "rodata=", &arc_rodata_string, 0}, \
 }
 
 /* Which cpu we're compiling for.  */
index 77bcd38..5ee4cd1 100644 (file)
@@ -105,8 +105,8 @@ extern int avr_asm_only_p;
 #define AVR_ENHANCED (avr_enhanced_p)
 
 #define TARGET_OPTIONS {                                                     \
- { "init-stack=", &avr_init_stack, N_("Specify the initial stack address") }, \
- { "mcu=", &avr_mcu_name, N_("Specify the MCU name") } }
+ { "init-stack=", &avr_init_stack, N_("Specify the initial stack address"), 0}, \
+ { "mcu=", &avr_mcu_name, N_("Specify the MCU name"), 0} }
 
 #define TARGET_VERSION fprintf (stderr, " (GNU assembler syntax)");
 /* This macro is a C statement to print on `stderr' a string
index 4da3847..e414a24 100644 (file)
@@ -328,9 +328,9 @@ extern const char *c4x_rpts_cycles_string, *c4x_cpu_version_string;
 
 #define TARGET_OPTIONS                                         \
 { {"rpts=", &c4x_rpts_cycles_string,                           \
-   N_("Specify maximum number of iterations for RPTS") },      \
+   N_("Specify maximum number of iterations for RPTS"), 0},    \
   {"cpu=", &c4x_cpu_version_string,                            \
-   N_("Select CPU to generate code for") } }
+   N_("Select CPU to generate code for"), 0} }
 
 /* Sometimes certain combinations of command options do not make sense
    on a particular target machine.  You can define a macro
index 1c925f9..9939dba 100644 (file)
@@ -112,7 +112,7 @@ Boston, MA 02111-1307, USA.  */
 #undef CRIS_SUBTARGET_LONG_OPTIONS
 #define CRIS_SUBTARGET_LONG_OPTIONS \
   {"elinux-stacksize=", &cris_elinux_stacksize_str,                    \
-   N_("For elinux, request a specified stack-size for this program")}, \
+   N_("For elinux, request a specified stack-size for this program"), 0},      \
 
 #undef CRIS_SUBTARGET_VERSION
 #define CRIS_SUBTARGET_VERSION " - a.out"
index 98a27a6..fceee0f 100644 (file)
@@ -427,15 +427,15 @@ extern int target_flags;
 #define TARGET_HAS_MUL_INSNS (cris_cpu_version >= CRIS_CPU_NG)
 
 #define TARGET_OPTIONS                                                 \
- {{"cpu=", &cris_cpu_str, ""},                                         \
+ {{"cpu=", &cris_cpu_str, "", 0},                                      \
   {"arch=", &cris_cpu_str,                                             \
-   N_("Generate code for the specified chip or CPU version")},         \
+   N_("Generate code for the specified chip or CPU version"), 0},      \
   {"tune=", &cris_tune_str,                                            \
-   N_("Tune alignment for the specified chip or CPU version")},                \
+   N_("Tune alignment for the specified chip or CPU version"), 0},     \
   {"max-stackframe=", &cris_max_stackframe_str,                                \
-   N_("Warn when a stackframe is larger than the specified size")},    \
+   N_("Warn when a stackframe is larger than the specified size"), 0}, \
   CRIS_SUBTARGET_LONG_OPTIONS                                          \
-  {"ax-stackframe=", &cris_max_stackframe_str, ""}}
+  {"ax-stackframe=", &cris_max_stackframe_str, "", 0} }
 
 #define CRIS_SUBTARGET_LONG_OPTIONS
 
index d6a0b42..aa113d7 100644 (file)
@@ -146,10 +146,10 @@ extern int target_flags;
 #define TARGET_OPTIONS                                                 \
 {                                                                      \
   {"branch-cost=",  &d30v_branch_cost_string,                          \
-     N_("Change the branch costs within the compiler") },              \
+     N_("Change the branch costs within the compiler"), 0},            \
                                                                        \
   {"cond-exec=",    &d30v_cond_exec_string,                            \
-     N_("Change the threshold for conversion to conditional execution") }, \
+     N_("Change the threshold for conversion to conditional execution"), 0}, \
 }
 
 #define TARGET_VERSION fprintf (stderr, " d30v")
index 3a60aea..9e22afb 100644 (file)
@@ -269,15 +269,15 @@ extern int target_flags;
 #define TARGET_OPTIONS                                         \
 {                                                              \
   { "text=",   &text_seg_name,                                 \
-    N_("Specify alternate name for text section") },            \
+    N_("Specify alternate name for text section"), 0},          \
   { "data=",   &data_seg_name,                                 \
-    N_("Specify alternate name for data section") },            \
+    N_("Specify alternate name for data section"), 0},          \
   { "bss=",    &bss_seg_name,                                  \
-    N_("Specify alternate name for bss section") },             \
+    N_("Specify alternate name for bss section"), 0},           \
   { "const=",   &const_seg_name,                                \
-    N_("Specify alternate name for constant section") },        \
+    N_("Specify alternate name for constant section"), 0},      \
   { "chip=",    &chip_name,                                     \
-    N_("Specify alternate name for dsp16xx chip") },            \
+    N_("Specify alternate name for dsp16xx chip"), 0},          \
 }
 
 /* Sometimes certain combinations of command options do not make sense
index ed40dfb..56d3ec4 100644 (file)
@@ -486,13 +486,13 @@ extern int target_flags;
         "Specify the size of the short data section"  } }
 
    This declaration is optional.  */
-#define TARGET_OPTIONS                                                     \
-{                                                                          \
-  { "cpu=",            &frv_cpu_string,         "Set cpu type" },          \
-  { "branch-cost=",    &frv_branch_cost_string, "Internal debug switch" }, \
-  { "cond-exec-insns=", &frv_condexec_insns_str, "Internal debug switch" }, \
-  { "cond-exec-temps=", &frv_condexec_temps_str, "Internal debug switch" }, \
-  { "sched-lookahead=", &frv_sched_lookahead_str,"Internal debug switch" }, \
+#define TARGET_OPTIONS                                                       \
+{                                                                            \
+  { "cpu=",            &frv_cpu_string,         "Set cpu type", 0},          \
+  { "branch-cost=",    &frv_branch_cost_string, "Internal debug switch", 0}, \
+  { "cond-exec-insns=", &frv_condexec_insns_str, "Internal debug switch", 0}, \
+  { "cond-exec-temps=", &frv_condexec_temps_str, "Internal debug switch", 0}, \
+  { "sched-lookahead=", &frv_sched_lookahead_str,"Internal debug switch", 0}, \
 }
 
 /* This macro is a C statement to print on `stderr' a string describing the
index fed0008..7c43c6b 100644 (file)
@@ -433,34 +433,34 @@ extern int x86_prefetch_sse;
    by appending `-m' to the specified name.  */
 #define TARGET_OPTIONS                                         \
 { { "tune=",           &ix86_tune_string,                      \
-    N_("Schedule code for given CPU")},                                \
+    N_("Schedule code for given CPU"), 0},                     \
   { "fpmath=",         &ix86_fpmath_string,                    \
-    N_("Generate floating point mathematics using given instruction set")},\
+    N_("Generate floating point mathematics using given instruction set"), 0},\
   { "arch=",           &ix86_arch_string,                      \
-    N_("Generate code for given CPU")},                                \
+    N_("Generate code for given CPU"), 0},                     \
   { "regparm=",                &ix86_regparm_string,                   \
-    N_("Number of registers used to pass integer arguments") },        \
+    N_("Number of registers used to pass integer arguments"), 0},\
   { "align-loops=",    &ix86_align_loops_string,               \
-    N_("Loop code aligned to this power of 2") },              \
+    N_("Loop code aligned to this power of 2"), 0},            \
   { "align-jumps=",    &ix86_align_jumps_string,               \
-    N_("Jump targets are aligned to this power of 2") },       \
+    N_("Jump targets are aligned to this power of 2"), 0},     \
   { "align-functions=",        &ix86_align_funcs_string,               \
-    N_("Function starts are aligned to this power of 2") },    \
+    N_("Function starts are aligned to this power of 2"), 0},  \
   { "preferred-stack-boundary=",                               \
     &ix86_preferred_stack_boundary_string,                     \
-    N_("Attempt to keep stack aligned to this power of 2") },  \
+    N_("Attempt to keep stack aligned to this power of 2"), 0},        \
   { "branch-cost=",    &ix86_branch_cost_string,               \
-    N_("Branches are this expensive (1-5, arbitrary units)") },        \
+    N_("Branches are this expensive (1-5, arbitrary units)"), 0},\
   { "cmodel=", &ix86_cmodel_string,                            \
-    N_("Use given x86-64 code model") },                       \
+    N_("Use given x86-64 code model"), 0},                     \
   { "debug-arg", &ix86_debug_arg_string,                       \
-    "" /* Undocumented. */ },                                  \
+    "" /* Undocumented. */, 0},                                        \
   { "debug-addr", &ix86_debug_addr_string,                     \
-    "" /* Undocumented. */ },                                  \
+    "" /* Undocumented. */, 0},                                        \
   { "asm=", &ix86_asm_string,                                  \
-    N_("Use given assembler dialect") },                       \
+    N_("Use given assembler dialect"), 0},                     \
   { "tls-dialect=", &ix86_tls_dialect_string,                  \
-    N_("Use given thread-local storage dialect") },            \
+    N_("Use given thread-local storage dialect"), 0},          \
   SUBTARGET_OPTIONS                                            \
 }
 
index b6f86d1..1869e67 100644 (file)
@@ -238,11 +238,11 @@ extern const char *ia64_tune_string;
 #define TARGET_OPTIONS \
 {                                                                      \
   { "fixed-range=",    &ia64_fixed_range_string,                       \
-      N_("Specify range of registers to make fixed")},                 \
+      N_("Specify range of registers to make fixed"), 0},              \
   { "tls-size=",       &ia64_tls_size_string,                          \
-      N_("Specify bit size of immediate TLS offsets")},                        \
+      N_("Specify bit size of immediate TLS offsets"), 0},             \
   { "tune=",           &ia64_tune_string,                              \
-      N_("Schedule code for given CPU")},                              \
+      N_("Schedule code for given CPU"), 0},                           \
 }
 
 /* Sometimes certain combinations of command options do not make sense on a
index 0ce5737..744eb94 100644 (file)
@@ -269,9 +269,9 @@ extern const char * m32r_sdata_string;
 #define TARGET_OPTIONS                                                 \
 {                                                                      \
   { "model=", & m32r_model_string,                                     \
-    N_("Code size: small, medium or large") },                         \
+    N_("Code size: small, medium or large"), 0},                       \
   { "sdata=", & m32r_sdata_string,                                     \
-    N_("Small data area: none, sdata, use") }                          \
+    N_("Small data area: none, sdata, use"), 0}                                \
   SUBTARGET_OPTIONS                                                    \
 }
 
index a29f56d..0801972 100644 (file)
@@ -218,9 +218,9 @@ extern short *reg_renumber; /* def in local_alloc.c */
    by appending `-m' to the specified name.  */
 #define TARGET_OPTIONS                                                 \
 { { "reg-alloc=",      &m68hc11_reg_alloc_order,                       \
-    N_("Specify the register allocation order")},                      \
+    N_("Specify the register allocation order"), 0},                   \
   { "soft-reg-count=", &m68hc11_soft_reg_count,                        \
-    N_("Indicate the number of soft registers available") },           \
+    N_("Indicate the number of soft registers available"), 0},         \
   SUBTARGET_OPTIONS                                                    \
 }
 
index 3ba717b..42cabaf 100644 (file)
@@ -260,11 +260,11 @@ extern int target_flags;
    by appending `-m' to the specified name.  */
 #define TARGET_OPTIONS                                                 \
 { { "align-loops=",    &m68k_align_loops_string,                       \
-    N_("Loop code aligned to this power of 2") },                      \
+    N_("Loop code aligned to this power of 2"), 0},                    \
   { "align-jumps=",    &m68k_align_jumps_string,                       \
-    N_("Jump targets are aligned to this power of 2") },               \
+    N_("Jump targets are aligned to this power of 2"), 0},             \
   { "align-functions=",        &m68k_align_funcs_string,                       \
-    N_("Function starts are aligned to this power of 2") },            \
+    N_("Function starts are aligned to this power of 2"), 0},          \
   SUBTARGET_OPTIONS                                                    \
 }
 
index 7cf036b..5ab1e8e 100644 (file)
@@ -249,8 +249,8 @@ extern int flag_pic;                                /* -fpic */
 
 /* Macro to define table for command options with values.  */
 
-#define TARGET_OPTIONS { { "short-data-", &m88k_short_data }, \
-                        { "version-", &m88k_version } }
+#define TARGET_OPTIONS { { "short-data-", &m88k_short_data, 0}, \
+                        { "version-", &m88k_version, 0} }
 
 /* Do any checking or such that is needed after processing the -m switches.  */
 
index 84ef59f..b8dce6a 100644 (file)
@@ -176,7 +176,7 @@ extern const char * mcore_stack_increment_string;
 #define        TARGET_OPTIONS                                                  \
 {                                                                      \
   {"stack-increment=", & mcore_stack_increment_string,                 \
-     N_("Maximum amount for a single stack increment operation")}      \
+     N_("Maximum amount for a single stack increment operation"), 0}   \
 }
 
 #ifndef CC1_SPEC
index a52e7b6..c56340e 100644 (file)
@@ -756,21 +756,21 @@ extern void               sbss_section PARAMS ((void));
 {                                                                      \
   SUBTARGET_TARGET_OPTIONS                                             \
   { "tune=",    &mips_tune_string,                                     \
-      N_("Specify CPU for scheduling purposes")},                       \
+      N_("Specify CPU for scheduling purposes"), 0},                    \
   { "arch=",    &mips_arch_string,                                      \
-      N_("Specify CPU for code generation purposes")},                  \
+      N_("Specify CPU for code generation purposes"), 0},               \
   { "abi=", &mips_abi_string,                                          \
-      N_("Specify an ABI")},                                           \
+      N_("Specify an ABI"), 0},                                                \
   { "ips",     &mips_isa_string,                                       \
-      N_("Specify a Standard MIPS ISA")},                              \
+      N_("Specify a Standard MIPS ISA"), 0},                           \
   { "entry",   &mips_entry_string,                                     \
-      N_("Use mips16 entry/exit psuedo ops")},                         \
+      N_("Use mips16 entry/exit psuedo ops"), 0},                      \
   { "no-mips16", &mips_no_mips16_string,                               \
-      N_("Don't use MIPS16 instructions")},                            \
+      N_("Don't use MIPS16 instructions"), 0},                         \
   { "no-flush-func", &mips_cache_flush_func,                           \
-      N_("Don't call any cache flush functions")},                     \
+      N_("Don't call any cache flush functions"), 0},                  \
   { "flush-func=", &mips_cache_flush_func,                             \
-      N_("Specify cache flush function")},                             \
+      N_("Specify cache flush function"), 0},                          \
 }
 
 /* This is meant to be redefined in the host dependent files.  */
index 976ceb0..3986b86 100644 (file)
@@ -129,9 +129,9 @@ extern const char *mmix_cc1_ignored_option;
 
 #define TARGET_OPTIONS                                 \
    {{"set-program-start=", &mmix_cc1_ignored_option,   \
-  N_("Set start-address of the program") },            \
+  N_("Set start-address of the program"), 0},          \
     {"set-data-start=", &mmix_cc1_ignored_option,      \
-  N_("Set start-address of data")}}
+  N_("Set start-address of data"), 0} }
 
 /* FIXME: There's no provision for profiling here.  */
 #define STARTFILE_SPEC  \
index ff1e918..5dbfe57 100644 (file)
@@ -307,9 +307,9 @@ extern int target_flags;
 #define TARGET_OPTIONS                                                 \
 {                                                                      \
   { "schedule=",               &pa_cpu_string,                         \
-    N_("Specify CPU for scheduling purposes") },                       \
+    N_("Specify CPU for scheduling purposes"), 0},                     \
   { "arch=",                   &pa_arch_string,                        \
-    N_("Specify architecture for code generation.  Values are 1.0, 1.1, and 2.0.  2.0 requires gas snapshot 19990413 or later.") }\
+    N_("Specify architecture for code generation.  Values are 1.0, 1.1, and 2.0.  2.0 requires gas snapshot 19990413 or later."), 0}\
 }
 
 /* Specify the dialect of assembler to use.  New mnemonics is dialect one
index 3e343f6..b566619 100644 (file)
@@ -376,26 +376,26 @@ extern enum processor_type rs6000_cpu;
 #define TARGET_OPTIONS                                                 \
 {                                                                      \
    {"cpu=",  &rs6000_select[1].string,                                 \
-    N_("Use features of and schedule code for given CPU") },           \
+    N_("Use features of and schedule code for given CPU"), 0},         \
    {"tune=", &rs6000_select[2].string,                                 \
-    N_("Schedule code for given CPU") },                               \
-   {"debug=", &rs6000_debug_name, N_("Enable debug output") },         \
+    N_("Schedule code for given CPU"), 0},                             \
+   {"debug=", &rs6000_debug_name, N_("Enable debug output"), 0},       \
    {"traceback=", &rs6000_traceback_name,                              \
-    N_("Select full, part, or no traceback table") },                  \
-   {"abi=", &rs6000_abi_string, N_("Specify ABI to use") },            \
+    N_("Select full, part, or no traceback table"), 0},                        \
+   {"abi=", &rs6000_abi_string, N_("Specify ABI to use"), 0},          \
    {"long-double-", &rs6000_long_double_size_string,                   \
-    N_("Specify size of long double (64 or 128 bits)") },              \
+    N_("Specify size of long double (64 or 128 bits)"), 0},            \
    {"isel=", &rs6000_isel_string,                                       \
-    N_("Specify yes/no if isel instructions should be generated") },    \
+    N_("Specify yes/no if isel instructions should be generated"), 0},  \
    {"spe=", &rs6000_spe_string,                                         \
-    N_("Specify yes/no if SPE SIMD instructions should be generated") },\
+    N_("Specify yes/no if SPE SIMD instructions should be generated"), 0},\
    {"float-gprs=", &rs6000_float_gprs_string,                           \
-    N_("Specify yes/no if using floating point in the GPRs") },         \
-   {"vrsave=", &rs6000_altivec_vrsave_string,                         \
-    N_("Specify yes/no if VRSAVE instructions should be generated for AltiVec") }, \
+    N_("Specify yes/no if using floating point in the GPRs"), 0},       \
+   {"vrsave=", &rs6000_altivec_vrsave_string,                           \
+    N_("Specify yes/no if VRSAVE instructions should be generated for AltiVec"), 0}, \
    {"longcall", &rs6000_longcall_switch,                               \
-    N_("Avoid all range limits on call instructions") },               \
-   {"no-longcall", &rs6000_longcall_switch, "" },                      \
+    N_("Avoid all range limits on call instructions"), 0},             \
+   {"no-longcall", &rs6000_longcall_switch, "", 0},                    \
    SUBTARGET_OPTIONS                                                   \
 }
 
index 25fb0db..3e7d711 100644 (file)
@@ -82,9 +82,9 @@ extern const char *rs6000_sdata_name;
 
 /* Override rs6000.h definition.  */
 #undef SUBTARGET_OPTIONS
-#define        SUBTARGET_OPTIONS                                               \
-  { "call-",  &rs6000_abi_name, N_("Select ABI calling convention") }, \
-  { "sdata=", &rs6000_sdata_name, N_("Select method for sdata handling") }
+#define        SUBTARGET_OPTIONS                                                       \
+  { "call-",  &rs6000_abi_name, N_("Select ABI calling convention"), 0},       \
+  { "sdata=", &rs6000_sdata_name, N_("Select method for sdata handling"), 0}
 
 /* Max # of bytes for variables to automatically be put into the .sdata
    or .sdata2 sections.  */
index 11926f9..b5f4055 100644 (file)
@@ -114,9 +114,9 @@ extern int target_flags;
 
 #define TARGET_OPTIONS                                          \
 { { "tune=",            &s390_tune_string,                      \
-    N_("Schedule code for given CPU")},                         \
+    N_("Schedule code for given CPU"), 0},                      \
   { "arch=",            &s390_arch_string,                      \
-    N_("Generate code for given CPU")},                         \
+    N_("Generate code for given CPU"), 0},                      \
 }
 
 /* Target version string.  Overridden by the OS header.  */
index 830467d..61e6f94 100644 (file)
@@ -632,11 +632,11 @@ extern enum processor_type sparc_cpu;
 #define TARGET_OPTIONS \
 {                                                              \
   { "cpu=",  &sparc_select[1].string,                          \
-    N_("Use features of and schedule code for given CPU") },   \
+    N_("Use features of and schedule code for given CPU"), 0}, \
   { "tune=", &sparc_select[2].string,                          \
-    N_("Schedule code for given CPU") },                       \
+    N_("Schedule code for given CPU"), 0},                     \
   { "cmodel=", &sparc_cmodel_string,                           \
-    N_("Use given SPARC code model") },                                \
+    N_("Use given SPARC code model"), 0},                      \
   SUBTARGET_OPTIONS                                            \
 }
 
index cbd0d1d..b18d85a 100644 (file)
@@ -220,14 +220,14 @@ extern struct small_memory_info small_memory[(int)SMALL_MEMORY_max];
 #define TARGET_OPTIONS                                                 \
 {                                                                      \
   { "tda=",    &small_memory[ (int)SMALL_MEMORY_TDA ].value,           \
-      N_("Set the max size of data eligible for the TDA area")  },     \
-  { "tda-",    &small_memory[ (int)SMALL_MEMORY_TDA ].value, "" },     \
+      N_("Set the max size of data eligible for the TDA area"), 0},    \
+  { "tda-",    &small_memory[ (int)SMALL_MEMORY_TDA ].value, "", 0},   \
   { "sda=",    &small_memory[ (int)SMALL_MEMORY_SDA ].value,           \
-      N_("Set the max size of data eligible for the SDA area")  },     \
-  { "sda-",    &small_memory[ (int)SMALL_MEMORY_SDA ].value, "" },     \
+      N_("Set the max size of data eligible for the SDA area"), 0},    \
+  { "sda-",    &small_memory[ (int)SMALL_MEMORY_SDA ].value, "", 0},   \
   { "zda=",    &small_memory[ (int)SMALL_MEMORY_ZDA ].value,           \
-      N_("Set the max size of data eligible for the ZDA area")  },     \
-  { "zda-",    &small_memory[ (int)SMALL_MEMORY_ZDA ].value, "" },     \
+      N_("Set the max size of data eligible for the ZDA area"), 0},    \
+  { "zda-",    &small_memory[ (int)SMALL_MEMORY_ZDA ].value, "", 0},   \
 }
 
 /* Sometimes certain combinations of command options do not make
index e17d5a1..b824b1e 100644 (file)
@@ -761,17 +761,26 @@ This macro is similar to @code{TARGET_SWITCHES} but defines names of command
 options that have values.  Its definition is an initializer with a
 subgrouping for each command option.
 
-Each subgrouping contains a string constant, that defines the fixed part
-of the option name, the address of a variable, and a description string.
-Non-empty description strings should be marked with @code{N_(@dots{})} for
-@command{xgettext}.  Please do not mark empty strings because the empty
-string is reserved by GNU gettext. @code{gettext("")} returns the header entry
-of the message catalog with meta information, not the empty string.
+Each subgrouping contains a string constant, that defines the option
+name, the address of a variable, a description string, and a value.
+Non-empty description strings should be marked with @code{N_(@dots{})}
+for @command{xgettext}.  Please do not mark empty strings because the
+empty string is reserved by GNU gettext. @code{gettext("")} returns the
+header entry of the message catalog with meta information, not the empty
+string.
+
+If the value listed in the table is @code{NULL}, then the variable, type
+@code{char *}, is set to the variable part of the given option if the
+fixed part matches.  In other words, if the first part of the option
+matches what's in the table, the variable will be set to point to the
+rest of the option.  This allows the user to specify a value for that
+option.  The actual option name is made by appending @samp{-m} to the
+specified name.  Again, each option should also be documented in
+@file{invoke.texi}.
 
-The variable, type @code{char *}, is set to the variable part of the
-given option if the fixed part matches.  The actual option name is made
-by appending @samp{-m} to the specified name.  Again, each option should
-also be documented in @file{invoke.texi}.
+If the value listed in the table is non-@code{NULL}, then the option
+must match the option in the table exactly (with @samp{-m}), and the
+variable is set to point to the value listed in the table.
 
 Here is an example which defines @option{-mshort-data-@var{number}}.  If the
 given option is @option{-mshort-data-512}, the variable @code{m88k_short_data}
@@ -781,7 +790,38 @@ will be set to the string @code{"512"}.
 extern char *m88k_short_data;
 #define TARGET_OPTIONS \
  @{ @{ "short-data-", &m88k_short_data, \
-     N_("Specify the size of the short data section") @} @}
+     N_("Specify the size of the short data section"), 0 @} @}
+@end smallexample
+
+Here is an variant of the above that allows the user to also specify
+just @option{-mshort-data} where a default of @code{"64"} is used.
+
+@smallexample
+extern char *m88k_short_data;
+#define TARGET_OPTIONS \
+ @{ @{ "short-data-", &m88k_short_data, \
+     N_("Specify the size of the short data section"), 0 @} \
+    @{ "short-data", &m88k_short_data, "", "64" @},
+    @}
+@end smallexample
+
+Here is an example which defines @option{-mno-alu}, @option{-malu1}, and
+@option{-malu2} as a three-state switch, along with suitable macros for
+checking the state of the option (documentation is elided for brevity).
+
+@smallexample
+[chip.c]
+char *chip_alu = ""; /* Specify default here.  */
+
+[chip.h]
+extern char *chip_alu;
+#define TARGET_OPTIONS \
+  @{ @{ "no-alu", &chip_alu, "", "" @}, \
+     @{ "alu1", &chip_alu, "", "1" @}, \
+     @{ "alu2", &chip_alu, "", "2" @}, @}
+#define TARGET_ALU (chip_alu[0] != '\0')
+#define TARGET_ALU1 (chip_alu[0] == '1')
+#define TARGET_ALU2 (chip_alu[0] == '2')
 @end smallexample
 
 @findex TARGET_VERSION
index 3af0bd8..49301fb 100644 (file)
@@ -1437,6 +1437,7 @@ static const struct
   const char *const prefix;
   const char **const variable;
   const char *const description;
+  const char *const value;
 }
 target_options[] = TARGET_OPTIONS;
 #endif
@@ -4685,10 +4686,21 @@ set_target_switch (name)
     for (j = 0; j < ARRAY_SIZE (target_options); j++)
       {
        int len = strlen (target_options[j].prefix);
-       if (!strncmp (target_options[j].prefix, name, len))
+       if (target_options[j].value)
          {
-           *target_options[j].variable = name + len;
-           valid_target_option = 1;
+           if (!strcmp (target_options[j].prefix, name))
+             {
+               *target_options[j].variable = target_options[j].value;
+               valid_target_option = 1;
+             }
+         }
+       else
+         {
+           if (!strncmp (target_options[j].prefix, name, len))
+             {
+               *target_options[j].variable = name + len;
+               valid_target_option = 1;
+             }
          }
       }
 #endif