diff options
author | H.J. Lu <hjl.tools@gmail.com> | 2018-03-08 06:31:32 -0800 |
---|---|---|
committer | H.J. Lu <hjl.tools@gmail.com> | 2018-03-08 06:31:52 -0800 |
commit | bd5dea8822e515faf305690ca5c5281132d95587 (patch) | |
tree | c4b59a27cd8a3344dd7d95a5a88c18a60a0dc76b /gas/config | |
parent | 4ef0bef68cfc777e59156fce1563583c0ffb76d9 (diff) | |
download | gdb-bd5dea8822e515faf305690ca5c5281132d95587.zip gdb-bd5dea8822e515faf305690ca5c5281132d95587.tar.gz gdb-bd5dea8822e515faf305690ca5c5281132d95587.tar.bz2 |
x86: Remove support for old (<= 2.8.1) versions of gcc
Old (<= 2.8.1) versions of gcc generate broken fsubp, fsubrp, fdivp and
fdivrp instructions. Assembler translates them to correct ones with a
warning:
[hjl@gnu-cfl-1 gas]$ cat x.s
fsubp %st(3),%st
[hjl@gnu-cfl-1 gas]$ gcc -c x.s
x.s: Assembler messages:
x.s:1: Warning: translating to `fsubp %st,%st(3)'
[hjl@gnu-cfl-1 gas]$
This patch removes support for old (<= 2.8.1) versions of gcc:
[hjl@gnu-cfl-1 gas]$ ./as-new -o x.o x.s
x.s: Assembler messages:
x.s:1: Error: operand type mismatch for `fsubp'
[hjl@gnu-cfl-1 gas]$
gas/
* NEWS: Mention -mold-gcc removal.
* config/tc-i386.c (i386_error): Remove old_gcc_only.
(old_gcc): Removed.
(match_template): Remove old gcc support.
(OPTION_MOLD_GCC): Removed.
(OPTION_MRELAX_RELOCATIONS): Updated.
(md_longopts): Remove OPTION_MOLD_GCC.
(md_parse_option): Likewise.
(md_show_usage): Remove -mold-gcc.
* testsuite/gas/i386/general.s: Convert fsub/fdiv tests for old
(<= 2.8.1) versions of gcc.
* testsuite/gas/i386/intel.s: Likewise.
* testsuite/gas/i386/general.l: Updated.
* testsuite/gas/i386/intel-intel.d: Likewise.
* testsuite/gas/i386/intel.d: Likewise.
* testsuite/gas/i386/intel.e: Likewise.
* testsuite/gas/i386/i386.exp: Don't pass -mold-gcc to general.
include/
* opcode/i386 (OLDGCC_COMPAT): Removed.
opcodes/
* i386-gen.c (opcode_modifiers): Remove OldGcc.
* i386-opc.h (OldGcc): Removed.
(i386_opcode_modifier): Remove oldgcc.
* i386-opc.tbl: Remove fsubp, fsubrp, fdivp and fdivrp
instructions for old (<= 2.8.1) versions of gcc.
* i386-tbl.h: Regenerated.
Diffstat (limited to 'gas/config')
-rw-r--r-- | gas/config/tc-i386.c | 22 |
1 files changed, 1 insertions, 21 deletions
diff --git a/gas/config/tc-i386.c b/gas/config/tc-i386.c index 0fe6c93..53ac4b4 100644 --- a/gas/config/tc-i386.c +++ b/gas/config/tc-i386.c @@ -262,7 +262,6 @@ enum i386_error number_of_operands_mismatch, invalid_instruction_suffix, bad_imm4, - old_gcc_only, unsupported_with_intel_mnemonic, unsupported_syntax, unsupported, @@ -562,9 +561,6 @@ static int intel64; 0 if att mnemonic. */ static int intel_mnemonic = !SYSV386_COMPAT; -/* 1 if support old (<= 2.8.1) versions of gcc. */ -static int old_gcc = OLDGCC_COMPAT; - /* 1 if pseudo registers are permitted. */ static int allow_pseudo_reg = 0; @@ -5280,11 +5276,6 @@ match_template (char mnem_suffix) if (!found_cpu_match) continue; - /* Check old gcc support. */ - i.error = old_gcc_only; - if (!old_gcc && t->opcode_modifier.oldgcc) - continue; - /* Check AT&T mnemonic. */ i.error = unsupported_with_intel_mnemonic; if (intel_mnemonic && t->opcode_modifier.attmnemonic) @@ -5583,9 +5574,6 @@ check_reverse: case bad_imm4: err_msg = _("constant doesn't fit in 4 bits"); break; - case old_gcc_only: - err_msg = _("only supported with old gcc"); - break; case unsupported_with_intel_mnemonic: err_msg = _("unsupported with Intel mnemonic"); break; @@ -10312,7 +10300,7 @@ const char *md_shortopts = "qnO::"; #define OPTION_MSYNTAX (OPTION_MD_BASE + 6) #define OPTION_MINDEX_REG (OPTION_MD_BASE + 7) #define OPTION_MNAKED_REG (OPTION_MD_BASE + 8) -#define OPTION_MOLD_GCC (OPTION_MD_BASE + 9) +#define OPTION_MRELAX_RELOCATIONS (OPTION_MD_BASE + 9) #define OPTION_MSSE2AVX (OPTION_MD_BASE + 10) #define OPTION_MSSE_CHECK (OPTION_MD_BASE + 11) #define OPTION_MOPERAND_CHECK (OPTION_MD_BASE + 12) @@ -10328,7 +10316,6 @@ const char *md_shortopts = "qnO::"; #define OPTION_MAMD64 (OPTION_MD_BASE + 22) #define OPTION_MINTEL64 (OPTION_MD_BASE + 23) #define OPTION_MFENCE_AS_LOCK_ADD (OPTION_MD_BASE + 24) -#define OPTION_MRELAX_RELOCATIONS (OPTION_MD_BASE + 25) struct option md_longopts[] = { @@ -10348,7 +10335,6 @@ struct option md_longopts[] = {"msyntax", required_argument, NULL, OPTION_MSYNTAX}, {"mindex-reg", no_argument, NULL, OPTION_MINDEX_REG}, {"mnaked-reg", no_argument, NULL, OPTION_MNAKED_REG}, - {"mold-gcc", no_argument, NULL, OPTION_MOLD_GCC}, {"msse2avx", no_argument, NULL, OPTION_MSSE2AVX}, {"msse-check", required_argument, NULL, OPTION_MSSE_CHECK}, {"moperand-check", required_argument, NULL, OPTION_MOPERAND_CHECK}, @@ -10620,10 +10606,6 @@ md_parse_option (int c, const char *arg) allow_naked_reg = 1; break; - case OPTION_MOLD_GCC: - old_gcc = 1; - break; - case OPTION_MSSE2AVX: sse2avx = 1; break; @@ -10934,8 +10916,6 @@ md_show_usage (FILE *stream) fprintf (stream, _("\ -mnaked-reg don't require `%%' prefix for registers\n")); fprintf (stream, _("\ - -mold-gcc support old (<= 2.8.1) versions of gcc\n")); - fprintf (stream, _("\ -madd-bnd-prefix add BND prefix for all valid branches\n")); fprintf (stream, _("\ -mshared disable branch optimization for shared code\n")); |