diff --git a/gas/ChangeLog b/gas/ChangeLog index c84e9e8813..a50bfef04a 100644 --- a/gas/ChangeLog +++ b/gas/ChangeLog @@ -1,3 +1,8 @@ +2013-06-18 Richard Sandiford + + * config/tc-mips.c (md_shortopts, options, md_longopts) + (md_longopts_size): Move earlier in file. + 2013-06-18 Richard Sandiford * config/tc-mips.c (mips_set_options): Replace separate "ase_*" fields diff --git a/gas/config/tc-mips.c b/gas/config/tc-mips.c index 405b3bf544..4a4f827180 100644 --- a/gas/config/tc-mips.c +++ b/gas/config/tc-mips.c @@ -1387,6 +1387,222 @@ static const struct mips_cpu_info *mips_parse_cpu (const char *, const char *); static const struct mips_cpu_info *mips_cpu_info_from_isa (int); static const struct mips_cpu_info *mips_cpu_info_from_arch (int); +/* Command-line options. */ +const char *md_shortopts = "O::g::G:"; + +enum options + { + OPTION_MARCH = OPTION_MD_BASE, + OPTION_MTUNE, + OPTION_MIPS1, + OPTION_MIPS2, + OPTION_MIPS3, + OPTION_MIPS4, + OPTION_MIPS5, + OPTION_MIPS32, + OPTION_MIPS64, + OPTION_MIPS32R2, + OPTION_MIPS64R2, + OPTION_MIPS16, + OPTION_NO_MIPS16, + OPTION_MIPS3D, + OPTION_NO_MIPS3D, + OPTION_MDMX, + OPTION_NO_MDMX, + OPTION_DSP, + OPTION_NO_DSP, + OPTION_MT, + OPTION_NO_MT, + OPTION_VIRT, + OPTION_NO_VIRT, + OPTION_SMARTMIPS, + OPTION_NO_SMARTMIPS, + OPTION_DSPR2, + OPTION_NO_DSPR2, + OPTION_EVA, + OPTION_NO_EVA, + OPTION_MICROMIPS, + OPTION_NO_MICROMIPS, + OPTION_MCU, + OPTION_NO_MCU, + OPTION_COMPAT_ARCH_BASE, + OPTION_M4650, + OPTION_NO_M4650, + OPTION_M4010, + OPTION_NO_M4010, + OPTION_M4100, + OPTION_NO_M4100, + OPTION_M3900, + OPTION_NO_M3900, + OPTION_M7000_HILO_FIX, + OPTION_MNO_7000_HILO_FIX, + OPTION_FIX_24K, + OPTION_NO_FIX_24K, + OPTION_FIX_LOONGSON2F_JUMP, + OPTION_NO_FIX_LOONGSON2F_JUMP, + OPTION_FIX_LOONGSON2F_NOP, + OPTION_NO_FIX_LOONGSON2F_NOP, + OPTION_FIX_VR4120, + OPTION_NO_FIX_VR4120, + OPTION_FIX_VR4130, + OPTION_NO_FIX_VR4130, + OPTION_FIX_CN63XXP1, + OPTION_NO_FIX_CN63XXP1, + OPTION_TRAP, + OPTION_BREAK, + OPTION_EB, + OPTION_EL, + OPTION_FP32, + OPTION_GP32, + OPTION_CONSTRUCT_FLOATS, + OPTION_NO_CONSTRUCT_FLOATS, + OPTION_FP64, + OPTION_GP64, + OPTION_RELAX_BRANCH, + OPTION_NO_RELAX_BRANCH, + OPTION_MSHARED, + OPTION_MNO_SHARED, + OPTION_MSYM32, + OPTION_MNO_SYM32, + OPTION_SOFT_FLOAT, + OPTION_HARD_FLOAT, + OPTION_SINGLE_FLOAT, + OPTION_DOUBLE_FLOAT, + OPTION_32, +#ifdef OBJ_ELF + OPTION_CALL_SHARED, + OPTION_CALL_NONPIC, + OPTION_NON_SHARED, + OPTION_XGOT, + OPTION_MABI, + OPTION_N32, + OPTION_64, + OPTION_MDEBUG, + OPTION_NO_MDEBUG, + OPTION_PDR, + OPTION_NO_PDR, + OPTION_MVXWORKS_PIC, +#endif /* OBJ_ELF */ + OPTION_END_OF_ENUM + }; + +struct option md_longopts[] = +{ + /* Options which specify architecture. */ + {"march", required_argument, NULL, OPTION_MARCH}, + {"mtune", required_argument, NULL, OPTION_MTUNE}, + {"mips0", no_argument, NULL, OPTION_MIPS1}, + {"mips1", no_argument, NULL, OPTION_MIPS1}, + {"mips2", no_argument, NULL, OPTION_MIPS2}, + {"mips3", no_argument, NULL, OPTION_MIPS3}, + {"mips4", no_argument, NULL, OPTION_MIPS4}, + {"mips5", no_argument, NULL, OPTION_MIPS5}, + {"mips32", no_argument, NULL, OPTION_MIPS32}, + {"mips64", no_argument, NULL, OPTION_MIPS64}, + {"mips32r2", no_argument, NULL, OPTION_MIPS32R2}, + {"mips64r2", no_argument, NULL, OPTION_MIPS64R2}, + + /* Options which specify Application Specific Extensions (ASEs). */ + {"mips16", no_argument, NULL, OPTION_MIPS16}, + {"no-mips16", no_argument, NULL, OPTION_NO_MIPS16}, + {"mips3d", no_argument, NULL, OPTION_MIPS3D}, + {"no-mips3d", no_argument, NULL, OPTION_NO_MIPS3D}, + {"mdmx", no_argument, NULL, OPTION_MDMX}, + {"no-mdmx", no_argument, NULL, OPTION_NO_MDMX}, + {"mdsp", no_argument, NULL, OPTION_DSP}, + {"mno-dsp", no_argument, NULL, OPTION_NO_DSP}, + {"mmt", no_argument, NULL, OPTION_MT}, + {"mno-mt", no_argument, NULL, OPTION_NO_MT}, + {"msmartmips", no_argument, NULL, OPTION_SMARTMIPS}, + {"mno-smartmips", no_argument, NULL, OPTION_NO_SMARTMIPS}, + {"mdspr2", no_argument, NULL, OPTION_DSPR2}, + {"mno-dspr2", no_argument, NULL, OPTION_NO_DSPR2}, + {"meva", no_argument, NULL, OPTION_EVA}, + {"mno-eva", no_argument, NULL, OPTION_NO_EVA}, + {"mmicromips", no_argument, NULL, OPTION_MICROMIPS}, + {"mno-micromips", no_argument, NULL, OPTION_NO_MICROMIPS}, + {"mmcu", no_argument, NULL, OPTION_MCU}, + {"mno-mcu", no_argument, NULL, OPTION_NO_MCU}, + {"mvirt", no_argument, NULL, OPTION_VIRT}, + {"mno-virt", no_argument, NULL, OPTION_NO_VIRT}, + + /* Old-style architecture options. Don't add more of these. */ + {"m4650", no_argument, NULL, OPTION_M4650}, + {"no-m4650", no_argument, NULL, OPTION_NO_M4650}, + {"m4010", no_argument, NULL, OPTION_M4010}, + {"no-m4010", no_argument, NULL, OPTION_NO_M4010}, + {"m4100", no_argument, NULL, OPTION_M4100}, + {"no-m4100", no_argument, NULL, OPTION_NO_M4100}, + {"m3900", no_argument, NULL, OPTION_M3900}, + {"no-m3900", no_argument, NULL, OPTION_NO_M3900}, + + /* Options which enable bug fixes. */ + {"mfix7000", no_argument, NULL, OPTION_M7000_HILO_FIX}, + {"no-fix-7000", no_argument, NULL, OPTION_MNO_7000_HILO_FIX}, + {"mno-fix7000", no_argument, NULL, OPTION_MNO_7000_HILO_FIX}, + {"mfix-loongson2f-jump", no_argument, NULL, OPTION_FIX_LOONGSON2F_JUMP}, + {"mno-fix-loongson2f-jump", no_argument, NULL, OPTION_NO_FIX_LOONGSON2F_JUMP}, + {"mfix-loongson2f-nop", no_argument, NULL, OPTION_FIX_LOONGSON2F_NOP}, + {"mno-fix-loongson2f-nop", no_argument, NULL, OPTION_NO_FIX_LOONGSON2F_NOP}, + {"mfix-vr4120", no_argument, NULL, OPTION_FIX_VR4120}, + {"mno-fix-vr4120", no_argument, NULL, OPTION_NO_FIX_VR4120}, + {"mfix-vr4130", no_argument, NULL, OPTION_FIX_VR4130}, + {"mno-fix-vr4130", no_argument, NULL, OPTION_NO_FIX_VR4130}, + {"mfix-24k", no_argument, NULL, OPTION_FIX_24K}, + {"mno-fix-24k", no_argument, NULL, OPTION_NO_FIX_24K}, + {"mfix-cn63xxp1", no_argument, NULL, OPTION_FIX_CN63XXP1}, + {"mno-fix-cn63xxp1", no_argument, NULL, OPTION_NO_FIX_CN63XXP1}, + + /* Miscellaneous options. */ + {"trap", no_argument, NULL, OPTION_TRAP}, + {"no-break", no_argument, NULL, OPTION_TRAP}, + {"break", no_argument, NULL, OPTION_BREAK}, + {"no-trap", no_argument, NULL, OPTION_BREAK}, + {"EB", no_argument, NULL, OPTION_EB}, + {"EL", no_argument, NULL, OPTION_EL}, + {"mfp32", no_argument, NULL, OPTION_FP32}, + {"mgp32", no_argument, NULL, OPTION_GP32}, + {"construct-floats", no_argument, NULL, OPTION_CONSTRUCT_FLOATS}, + {"no-construct-floats", no_argument, NULL, OPTION_NO_CONSTRUCT_FLOATS}, + {"mfp64", no_argument, NULL, OPTION_FP64}, + {"mgp64", no_argument, NULL, OPTION_GP64}, + {"relax-branch", no_argument, NULL, OPTION_RELAX_BRANCH}, + {"no-relax-branch", no_argument, NULL, OPTION_NO_RELAX_BRANCH}, + {"mshared", no_argument, NULL, OPTION_MSHARED}, + {"mno-shared", no_argument, NULL, OPTION_MNO_SHARED}, + {"msym32", no_argument, NULL, OPTION_MSYM32}, + {"mno-sym32", no_argument, NULL, OPTION_MNO_SYM32}, + {"msoft-float", no_argument, NULL, OPTION_SOFT_FLOAT}, + {"mhard-float", no_argument, NULL, OPTION_HARD_FLOAT}, + {"msingle-float", no_argument, NULL, OPTION_SINGLE_FLOAT}, + {"mdouble-float", no_argument, NULL, OPTION_DOUBLE_FLOAT}, + + /* Strictly speaking this next option is ELF specific, + but we allow it for other ports as well in order to + make testing easier. */ + {"32", no_argument, NULL, OPTION_32}, + + /* ELF-specific options. */ +#ifdef OBJ_ELF + {"KPIC", no_argument, NULL, OPTION_CALL_SHARED}, + {"call_shared", no_argument, NULL, OPTION_CALL_SHARED}, + {"call_nonpic", no_argument, NULL, OPTION_CALL_NONPIC}, + {"non_shared", no_argument, NULL, OPTION_NON_SHARED}, + {"xgot", no_argument, NULL, OPTION_XGOT}, + {"mabi", required_argument, NULL, OPTION_MABI}, + {"n32", no_argument, NULL, OPTION_N32}, + {"64", no_argument, NULL, OPTION_64}, + {"mdebug", no_argument, NULL, OPTION_MDEBUG}, + {"no-mdebug", no_argument, NULL, OPTION_NO_MDEBUG}, + {"mpdr", no_argument, NULL, OPTION_PDR}, + {"mno-pdr", no_argument, NULL, OPTION_NO_PDR}, + {"mvxworks-pic", no_argument, NULL, OPTION_MVXWORKS_PIC}, +#endif /* OBJ_ELF */ + + {NULL, no_argument, NULL, 0} +}; +size_t md_longopts_size = sizeof (md_longopts); + /* Pseudo-op table. The following pseudo-ops from the Kane and Heinrich MIPS book @@ -14636,221 +14852,6 @@ static int support_64bit_objects(void) } #endif /* OBJ_ELF */ -const char *md_shortopts = "O::g::G:"; - -enum options - { - OPTION_MARCH = OPTION_MD_BASE, - OPTION_MTUNE, - OPTION_MIPS1, - OPTION_MIPS2, - OPTION_MIPS3, - OPTION_MIPS4, - OPTION_MIPS5, - OPTION_MIPS32, - OPTION_MIPS64, - OPTION_MIPS32R2, - OPTION_MIPS64R2, - OPTION_MIPS16, - OPTION_NO_MIPS16, - OPTION_MIPS3D, - OPTION_NO_MIPS3D, - OPTION_MDMX, - OPTION_NO_MDMX, - OPTION_DSP, - OPTION_NO_DSP, - OPTION_MT, - OPTION_NO_MT, - OPTION_VIRT, - OPTION_NO_VIRT, - OPTION_SMARTMIPS, - OPTION_NO_SMARTMIPS, - OPTION_DSPR2, - OPTION_NO_DSPR2, - OPTION_EVA, - OPTION_NO_EVA, - OPTION_MICROMIPS, - OPTION_NO_MICROMIPS, - OPTION_MCU, - OPTION_NO_MCU, - OPTION_COMPAT_ARCH_BASE, - OPTION_M4650, - OPTION_NO_M4650, - OPTION_M4010, - OPTION_NO_M4010, - OPTION_M4100, - OPTION_NO_M4100, - OPTION_M3900, - OPTION_NO_M3900, - OPTION_M7000_HILO_FIX, - OPTION_MNO_7000_HILO_FIX, - OPTION_FIX_24K, - OPTION_NO_FIX_24K, - OPTION_FIX_LOONGSON2F_JUMP, - OPTION_NO_FIX_LOONGSON2F_JUMP, - OPTION_FIX_LOONGSON2F_NOP, - OPTION_NO_FIX_LOONGSON2F_NOP, - OPTION_FIX_VR4120, - OPTION_NO_FIX_VR4120, - OPTION_FIX_VR4130, - OPTION_NO_FIX_VR4130, - OPTION_FIX_CN63XXP1, - OPTION_NO_FIX_CN63XXP1, - OPTION_TRAP, - OPTION_BREAK, - OPTION_EB, - OPTION_EL, - OPTION_FP32, - OPTION_GP32, - OPTION_CONSTRUCT_FLOATS, - OPTION_NO_CONSTRUCT_FLOATS, - OPTION_FP64, - OPTION_GP64, - OPTION_RELAX_BRANCH, - OPTION_NO_RELAX_BRANCH, - OPTION_MSHARED, - OPTION_MNO_SHARED, - OPTION_MSYM32, - OPTION_MNO_SYM32, - OPTION_SOFT_FLOAT, - OPTION_HARD_FLOAT, - OPTION_SINGLE_FLOAT, - OPTION_DOUBLE_FLOAT, - OPTION_32, -#ifdef OBJ_ELF - OPTION_CALL_SHARED, - OPTION_CALL_NONPIC, - OPTION_NON_SHARED, - OPTION_XGOT, - OPTION_MABI, - OPTION_N32, - OPTION_64, - OPTION_MDEBUG, - OPTION_NO_MDEBUG, - OPTION_PDR, - OPTION_NO_PDR, - OPTION_MVXWORKS_PIC, -#endif /* OBJ_ELF */ - OPTION_END_OF_ENUM - }; - -struct option md_longopts[] = -{ - /* Options which specify architecture. */ - {"march", required_argument, NULL, OPTION_MARCH}, - {"mtune", required_argument, NULL, OPTION_MTUNE}, - {"mips0", no_argument, NULL, OPTION_MIPS1}, - {"mips1", no_argument, NULL, OPTION_MIPS1}, - {"mips2", no_argument, NULL, OPTION_MIPS2}, - {"mips3", no_argument, NULL, OPTION_MIPS3}, - {"mips4", no_argument, NULL, OPTION_MIPS4}, - {"mips5", no_argument, NULL, OPTION_MIPS5}, - {"mips32", no_argument, NULL, OPTION_MIPS32}, - {"mips64", no_argument, NULL, OPTION_MIPS64}, - {"mips32r2", no_argument, NULL, OPTION_MIPS32R2}, - {"mips64r2", no_argument, NULL, OPTION_MIPS64R2}, - - /* Options which specify Application Specific Extensions (ASEs). */ - {"mips16", no_argument, NULL, OPTION_MIPS16}, - {"no-mips16", no_argument, NULL, OPTION_NO_MIPS16}, - {"mips3d", no_argument, NULL, OPTION_MIPS3D}, - {"no-mips3d", no_argument, NULL, OPTION_NO_MIPS3D}, - {"mdmx", no_argument, NULL, OPTION_MDMX}, - {"no-mdmx", no_argument, NULL, OPTION_NO_MDMX}, - {"mdsp", no_argument, NULL, OPTION_DSP}, - {"mno-dsp", no_argument, NULL, OPTION_NO_DSP}, - {"mmt", no_argument, NULL, OPTION_MT}, - {"mno-mt", no_argument, NULL, OPTION_NO_MT}, - {"msmartmips", no_argument, NULL, OPTION_SMARTMIPS}, - {"mno-smartmips", no_argument, NULL, OPTION_NO_SMARTMIPS}, - {"mdspr2", no_argument, NULL, OPTION_DSPR2}, - {"mno-dspr2", no_argument, NULL, OPTION_NO_DSPR2}, - {"meva", no_argument, NULL, OPTION_EVA}, - {"mno-eva", no_argument, NULL, OPTION_NO_EVA}, - {"mmicromips", no_argument, NULL, OPTION_MICROMIPS}, - {"mno-micromips", no_argument, NULL, OPTION_NO_MICROMIPS}, - {"mmcu", no_argument, NULL, OPTION_MCU}, - {"mno-mcu", no_argument, NULL, OPTION_NO_MCU}, - {"mvirt", no_argument, NULL, OPTION_VIRT}, - {"mno-virt", no_argument, NULL, OPTION_NO_VIRT}, - - /* Old-style architecture options. Don't add more of these. */ - {"m4650", no_argument, NULL, OPTION_M4650}, - {"no-m4650", no_argument, NULL, OPTION_NO_M4650}, - {"m4010", no_argument, NULL, OPTION_M4010}, - {"no-m4010", no_argument, NULL, OPTION_NO_M4010}, - {"m4100", no_argument, NULL, OPTION_M4100}, - {"no-m4100", no_argument, NULL, OPTION_NO_M4100}, - {"m3900", no_argument, NULL, OPTION_M3900}, - {"no-m3900", no_argument, NULL, OPTION_NO_M3900}, - - /* Options which enable bug fixes. */ - {"mfix7000", no_argument, NULL, OPTION_M7000_HILO_FIX}, - {"no-fix-7000", no_argument, NULL, OPTION_MNO_7000_HILO_FIX}, - {"mno-fix7000", no_argument, NULL, OPTION_MNO_7000_HILO_FIX}, - {"mfix-loongson2f-jump", no_argument, NULL, OPTION_FIX_LOONGSON2F_JUMP}, - {"mno-fix-loongson2f-jump", no_argument, NULL, OPTION_NO_FIX_LOONGSON2F_JUMP}, - {"mfix-loongson2f-nop", no_argument, NULL, OPTION_FIX_LOONGSON2F_NOP}, - {"mno-fix-loongson2f-nop", no_argument, NULL, OPTION_NO_FIX_LOONGSON2F_NOP}, - {"mfix-vr4120", no_argument, NULL, OPTION_FIX_VR4120}, - {"mno-fix-vr4120", no_argument, NULL, OPTION_NO_FIX_VR4120}, - {"mfix-vr4130", no_argument, NULL, OPTION_FIX_VR4130}, - {"mno-fix-vr4130", no_argument, NULL, OPTION_NO_FIX_VR4130}, - {"mfix-24k", no_argument, NULL, OPTION_FIX_24K}, - {"mno-fix-24k", no_argument, NULL, OPTION_NO_FIX_24K}, - {"mfix-cn63xxp1", no_argument, NULL, OPTION_FIX_CN63XXP1}, - {"mno-fix-cn63xxp1", no_argument, NULL, OPTION_NO_FIX_CN63XXP1}, - - /* Miscellaneous options. */ - {"trap", no_argument, NULL, OPTION_TRAP}, - {"no-break", no_argument, NULL, OPTION_TRAP}, - {"break", no_argument, NULL, OPTION_BREAK}, - {"no-trap", no_argument, NULL, OPTION_BREAK}, - {"EB", no_argument, NULL, OPTION_EB}, - {"EL", no_argument, NULL, OPTION_EL}, - {"mfp32", no_argument, NULL, OPTION_FP32}, - {"mgp32", no_argument, NULL, OPTION_GP32}, - {"construct-floats", no_argument, NULL, OPTION_CONSTRUCT_FLOATS}, - {"no-construct-floats", no_argument, NULL, OPTION_NO_CONSTRUCT_FLOATS}, - {"mfp64", no_argument, NULL, OPTION_FP64}, - {"mgp64", no_argument, NULL, OPTION_GP64}, - {"relax-branch", no_argument, NULL, OPTION_RELAX_BRANCH}, - {"no-relax-branch", no_argument, NULL, OPTION_NO_RELAX_BRANCH}, - {"mshared", no_argument, NULL, OPTION_MSHARED}, - {"mno-shared", no_argument, NULL, OPTION_MNO_SHARED}, - {"msym32", no_argument, NULL, OPTION_MSYM32}, - {"mno-sym32", no_argument, NULL, OPTION_MNO_SYM32}, - {"msoft-float", no_argument, NULL, OPTION_SOFT_FLOAT}, - {"mhard-float", no_argument, NULL, OPTION_HARD_FLOAT}, - {"msingle-float", no_argument, NULL, OPTION_SINGLE_FLOAT}, - {"mdouble-float", no_argument, NULL, OPTION_DOUBLE_FLOAT}, - - /* Strictly speaking this next option is ELF specific, - but we allow it for other ports as well in order to - make testing easier. */ - {"32", no_argument, NULL, OPTION_32}, - - /* ELF-specific options. */ -#ifdef OBJ_ELF - {"KPIC", no_argument, NULL, OPTION_CALL_SHARED}, - {"call_shared", no_argument, NULL, OPTION_CALL_SHARED}, - {"call_nonpic", no_argument, NULL, OPTION_CALL_NONPIC}, - {"non_shared", no_argument, NULL, OPTION_NON_SHARED}, - {"xgot", no_argument, NULL, OPTION_XGOT}, - {"mabi", required_argument, NULL, OPTION_MABI}, - {"n32", no_argument, NULL, OPTION_N32}, - {"64", no_argument, NULL, OPTION_64}, - {"mdebug", no_argument, NULL, OPTION_MDEBUG}, - {"no-mdebug", no_argument, NULL, OPTION_NO_MDEBUG}, - {"mpdr", no_argument, NULL, OPTION_PDR}, - {"mno-pdr", no_argument, NULL, OPTION_NO_PDR}, - {"mvxworks-pic", no_argument, NULL, OPTION_MVXWORKS_PIC}, -#endif /* OBJ_ELF */ - - {NULL, no_argument, NULL, 0} -}; -size_t md_longopts_size = sizeof (md_longopts); - /* Set STRING_PTR (either &mips_arch_string or &mips_tune_string) to NEW_VALUE. Warn if another value was already specified. Note: we have to defer parsing the -march and -mtune arguments in order