From 12b55ccc43340fd281f4eb8f4e6287f069799eab Mon Sep 17 00:00:00 2001 From: "H.J. Lu" Date: Tue, 10 Jun 2003 06:46:34 +0000 Subject: [PATCH] 2003-06-09 H.J. Lu * NEWS: Updated for the new -n option for the i386 assembler. * config/tc-i386.c (optimize_align_code): New. (md_shortopts): Add 'n'. (md_parse_option): Handle 'n'. (md_show_usage): Add '-n'. * config/tc-i386.h (optimize_align_code): Declared. (md_do_align): Optimize code alignment only if optimize_align_code is not 0. * doc/as.texinfo: Add the new -n option. * doc/c-i386.texi: Document the new -n option. --- gas/ChangeLog | 17 +++++++++++++++++ gas/NEWS | 5 +++++ gas/config/tc-i386.c | 13 +++++++++++-- gas/config/tc-i386.h | 9 +++++++-- gas/doc/as.texinfo | 2 +- gas/doc/c-i386.texi | 5 +++++ 6 files changed, 46 insertions(+), 5 deletions(-) diff --git a/gas/ChangeLog b/gas/ChangeLog index 886933d..f98a487 100644 --- a/gas/ChangeLog +++ b/gas/ChangeLog @@ -1,3 +1,20 @@ +2003-06-09 H.J. Lu + + * NEWS: Updated for the new -n option for the i386 assembler. + + * config/tc-i386.c (optimize_align_code): New. + (md_shortopts): Add 'n'. + (md_parse_option): Handle 'n'. + (md_show_usage): Add '-n'. + + * config/tc-i386.h (optimize_align_code): Declared. + (md_do_align): Optimize code alignment only if optimize_align_code + is not 0. + + * doc/as.texinfo: Add the new -n option. + + * doc/c-i386.texi: Document the new -n option. + 2003-06-07 Richard Henderson * doc/as.texinfo: Document .cfi_rel_offset. diff --git a/gas/NEWS b/gas/NEWS index 46dfc13..3393d9c 100644 --- a/gas/NEWS +++ b/gas/NEWS @@ -1,5 +1,10 @@ -*- text -*- +* Added -n switch for x86 assembler. By default, x86 GAS replaces + multiple nop instructions used for alignment within code sections + with multi-byte nop instructions such as leal 0(%esi,1),%esi. This + switch disables the optimization. + * Added support for MIPS32 Release 2. * Added support for Xtensa architecture. diff --git a/gas/config/tc-i386.c b/gas/config/tc-i386.c index 4823ee7..a10d9e6 100644 --- a/gas/config/tc-i386.c +++ b/gas/config/tc-i386.c @@ -303,6 +303,9 @@ static int allow_naked_reg = 0; frame as in 32 bit mode. */ static char stackop_size = '\0'; +/* Non-zero to optimize code alignment. */ +int optimize_align_code = 1; + /* Non-zero to quieten some warnings. */ static int quiet_warnings = 0; @@ -4889,9 +4892,9 @@ parse_register (reg_string, end_op) } #if defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF) -const char *md_shortopts = "kVQ:sq"; +const char *md_shortopts = "kVQ:sqn"; #else -const char *md_shortopts = "q"; +const char *md_shortopts = "qn"; #endif struct option md_longopts[] = { @@ -4912,6 +4915,10 @@ md_parse_option (c, arg) { switch (c) { + case 'n': + optimize_align_code = 0; + break; + case 'q': quiet_warnings = 1; break; @@ -4973,10 +4980,12 @@ md_show_usage (stream) -Q ignored\n\ -V print assembler version number\n\ -k ignored\n\ + -n Do not optimize code alignment\n\ -q quieten some warnings\n\ -s ignored\n")); #else fprintf (stream, _("\ + -n Do not optimize code alignment\n\ -q quieten some warnings\n")); #endif } diff --git a/gas/config/tc-i386.h b/gas/config/tc-i386.h index f45d713..295ccb9 100644 --- a/gas/config/tc-i386.h +++ b/gas/config/tc-i386.h @@ -516,9 +516,14 @@ extern int tc_i386_fix_adjustable PARAMS ((struct fix *)); extern const struct relax_type md_relax_table[]; #define TC_GENERIC_RELAX_TABLE md_relax_table +extern int optimize_align_code; + #define md_do_align(n, fill, len, max, around) \ -if ((n) && !need_pass_2 \ - && (!(fill) || ((char)*(fill) == (char)0x90 && (len) == 1)) \ +if ((n) \ + && !need_pass_2 \ + && optimize_align_code \ + && (!(fill) \ + || ((char)*(fill) == (char)0x90 && (len) == 1)) \ && subseg_text_p (now_seg)) \ { \ frag_align_code ((n), (max)); \ diff --git a/gas/doc/as.texinfo b/gas/doc/as.texinfo index 9270da8..d37198a 100644 --- a/gas/doc/as.texinfo +++ b/gas/doc/as.texinfo @@ -332,7 +332,7 @@ gcc(1), ld(1), and the Info entries for @file{binutils} and @file{ld}. @ifset I80386 @emph{Target i386 options:} - [@b{--32}|@b{--64}] + [@b{--32}|@b{--64}] [@b{-n}] @end ifset @ifset I960 diff --git a/gas/doc/c-i386.texi b/gas/doc/c-i386.texi index 1527c8d..f0047f9 100644 --- a/gas/doc/c-i386.texi +++ b/gas/doc/c-i386.texi @@ -61,6 +61,11 @@ These options are only available with the ELF object file format, and require that the necessary BFD support has been included (on a 32-bit platform you have to add --enable-64-bit-bfd to configure enable 64-bit usage and use x86-64 as target platform). + +@item -n +By default, x86 GAS replaces multiple nop instructions used for +alignment within code sections with multi-byte nop instructions such +as leal 0(%esi,1),%esi. This switch disables the optimization. @end table @node i386-Syntax -- 2.7.4