This is the mail archive of the binutils@sourceware.org mailing list for the binutils project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

PATCH: Add --alt-nops=short|long to x86/x86-64 assemblers


Since Pentium Pro, there are new nops instructions. This patch adds
--alt-nops=short|long to x86/x86-64 assemblers. --alt-nops=short
will generate a single nop instruction up to 10 bytes for code
alignment. --alt-nops=long will generate a single nop instruction up
to 15 bytes. Any comments?


H.J.
---
gas/

2006-06-13  H.J. Lu  <hongjiu.lu@intel.com>

	* config/tc-i386.c (alt_nops): New.
	(i386_align_code): Use short or long alternative nops if
	alt_nops is set to alt_nops_short or alt_nops_long,
	respectively.
	(OPTION_ALT_NOPS): New.
	(md_longopts): Add --alt-nops=.
	(md_parse_option): Support OPTION_ALT_NOPS.
	(md_show_usage): Add --alt-nops=short|long.

	* doc/c-i386.texi: Document --alt-nops=short|long.

gas/testsuite/

2006-06-13  H.J. Lu  <hongjiu.lu@intel.com>

	* gas/i386/alt-nops-long.d: New file.
	* gas/i386/alt-nops-short.d: Likewise.
	* gas/i386/alt-nops.s: Likewise.
	* gas/i386/x86-64-alt-nops-long.d: Likewise.
	* gas/i386/x86-64-alt-nops-short.d: Likewise.
	* gas/i386/x86-64-alt-nops.s: Likewise.
	
	* gas/i386/i386.exp: Run alt-nops-long, alt-nops-short,
	x86-64-alt-nops-long and x86-64-alt-nops-short.

--- binutils/gas/config/tc-i386.c.alt	2006-06-12 12:50:18.000000000 -0700
+++ binutils/gas/config/tc-i386.c	2006-06-13 09:23:24.000000000 -0700
@@ -316,6 +316,14 @@ int optimize_align_code = 1;
 /* Non-zero to quieten some warnings.  */
 static int quiet_warnings = 0;
 
+/* Non-zero to generate alternative nops.  */
+static enum
+{
+  alt_nops_none = 0,
+  alt_nops_long,
+  alt_nops_short
+} alt_nops = alt_nops_none;
+
 /* CPU name.  */
 static const char *cpu_arch_name = NULL;
 static const char *cpu_sub_arch_name = NULL;
@@ -563,13 +571,131 @@ i386_align_code (fragP, count)
     f32_1, f32_2, f16_3, f16_4, f16_5, f16_6, f16_7, f16_8,
     f32_15, f32_15, f32_15, f32_15, f32_15, f32_15, f32_15
   };
+  /* xchg %ax,%ax */
+  static const char alt_2[] =
+    {0x66,0x90};
+  /* nopl (%[re]ax) */
+  static const char alt_3[] =
+    {0x0f,0x1f,0x00};
+  /* nopl 0(%[re]ax) */
+  static const char alt_4[] =
+    {0x0f,0x1f,0x40,0x00};
+  /* nopl 0(%[re]ax,%[re]ax,1) */
+  static const char alt_5[] =
+    {0x0f,0x1f,0x44,0x00,0x00};
+  /* nopw 0(%[re]ax,%[re]ax,1) */
+  static const char alt_6[] =
+    {0x66,0x0f,0x1f,0x44,0x00,0x00};
+  /* nopl 0L(%[re]ax) */
+  static const char alt_7[] =
+    {0x0f,0x1f,0x80,0x00,0x00,0x00,0x00};
+  /* nopl 0L(%[re]ax,%[re]ax,1) */
+  static const char alt_8[] =
+    {0x0f,0x1f,0x84,0x00,0x00,0x00,0x00,0x00};
+  /* nopw 0L(%[re]ax,%[re]ax,1) */
+  static const char alt_9[] =
+    {0x66,0x0f,0x1f,0x84,0x00,0x00,0x00,0x00,0x00};
+  /* nopw %cs:0L(%[re]ax,%[re]ax,1) */
+  static const char alt_10[] =
+    {0x66,0x2e,0x0f,0x1f,0x84,0x00,0x00,0x00,0x00,0x00};
+  /* data16
+     nopw %cs:0L(%[re]ax,%[re]ax,1) */
+  static const char alt_long_11[] =
+    {0x66,
+     0x66,0x2e,0x0f,0x1f,0x84,0x00,0x00,0x00,0x00,0x00};
+  /* data16
+     data16
+     nopw %cs:0L(%[re]ax,%[re]ax,1) */
+  static const char alt_long_12[] =
+    {0x66,
+     0x66,
+     0x66,0x2e,0x0f,0x1f,0x84,0x00,0x00,0x00,0x00,0x00};
+  /* data16
+     data16
+     data16
+     nopw %cs:0L(%[re]ax,%[re]ax,1) */
+  static const char alt_long_13[] =
+    {0x66,
+     0x66,
+     0x66,
+     0x66,0x2e,0x0f,0x1f,0x84,0x00,0x00,0x00,0x00,0x00};
+  /* data16
+     data16
+     data16
+     data16
+     nopw %cs:0L(%[re]ax,%[re]ax,1) */
+  static const char alt_long_14[] =
+    {0x66,
+     0x66,
+     0x66,
+     0x66,
+     0x66,0x2e,0x0f,0x1f,0x84,0x00,0x00,0x00,0x00,0x00};
+  /* data16
+     data16
+     data16
+     data16
+     data16
+     nopw %cs:0L(%[re]ax,%[re]ax,1) */
+  static const char alt_long_15[] =
+    {0x66,
+     0x66,
+     0x66,
+     0x66,
+     0x66,
+     0x66,0x2e,0x0f,0x1f,0x84,0x00,0x00,0x00,0x00,0x00};
+  /* nopl 0(%[re]ax,%[re]ax,1)
+     nopw 0(%[re]ax,%[re]ax,1) */
+  static const char alt_short_11[] =
+    {0x0f,0x1f,0x44,0x00,0x00,
+     0x66,0x0f,0x1f,0x44,0x00,0x00};
+  /* nopw 0(%[re]ax,%[re]ax,1)
+     nopw 0(%[re]ax,%[re]ax,1) */
+  static const char alt_short_12[] =
+    {0x66,0x0f,0x1f,0x44,0x00,0x00,
+     0x66,0x0f,0x1f,0x44,0x00,0x00};
+  /* nopw 0(%[re]ax,%[re]ax,1)
+     nopl 0L(%[re]ax) */
+  static const char alt_short_13[] =
+    {0x66,0x0f,0x1f,0x44,0x00,0x00,
+     0x0f,0x1f,0x80,0x00,0x00,0x00,0x00};
+  /* nopl 0L(%[re]ax)
+     nopl 0L(%[re]ax) */
+  static const char alt_short_14[] =
+    {0x0f,0x1f,0x80,0x00,0x00,0x00,0x00,
+     0x0f,0x1f,0x80,0x00,0x00,0x00,0x00};
+  /* nopl 0L(%[re]ax)
+     nopl 0L(%[re]ax,%[re]ax,1) */
+  static const char alt_short_15[] =
+    {0x0f,0x1f,0x80,0x00,0x00,0x00,0x00,
+     0x0f,0x1f,0x84,0x00,0x00,0x00,0x00,0x00};
+  static const char *const alt_short_patt[] = {
+    f32_1, alt_2, alt_3, alt_4, alt_5, alt_6, alt_7, alt_8,
+    alt_9, alt_10, alt_short_11, alt_short_12, alt_short_13,
+    alt_short_14, alt_short_15
+  };
+  static const char *const alt_long_patt[] = {
+    f32_1, alt_2, alt_3, alt_4, alt_5, alt_6, alt_7, alt_8,
+    alt_9, alt_10, alt_long_11, alt_long_12, alt_long_13,
+    alt_long_14, alt_long_15
+  };
 
   if (count <= 0 || count > 15)
     return;
 
-  /* The recommended way to pad 64bit code is to use NOPs preceded by
-     maximally four 0x66 prefixes.  Balance the size of nops.  */
-  if (flag_code == CODE_64BIT)
+  if (alt_nops != alt_nops_none
+      && flag_code != CODE_16BIT
+      && (cpu_arch_flags & Cpu686) != 0)
+    {
+      const char *const *patt;
+
+      if (alt_nops == alt_nops_long)
+	patt = alt_long_patt;
+      else
+	patt = alt_short_patt;
+      memcpy (fragP->fr_literal + fragP->fr_fix,
+	      patt[count - 1], count);
+    }
+  else if (flag_code == CODE_64BIT)
     {
       int i;
       int nnops = (count + 3) / 4;
@@ -577,6 +703,8 @@ i386_align_code (fragP, count)
       int remains = count - nnops * len;
       int pos = 0;
 
+      /* The recommended way to pad 64bit code is to use NOPs preceded
+         by maximally four 0x66 prefixes.  Balance the size of nops.  */
       for (i = 0; i < remains; i++)
 	{
 	  memset (fragP->fr_literal + fragP->fr_fix + pos, 0x66, len);
@@ -590,18 +718,17 @@ i386_align_code (fragP, count)
 	  pos += len;
 	}
     }
-  else
-    if (flag_code == CODE_16BIT)
-      {
-	memcpy (fragP->fr_literal + fragP->fr_fix,
-		f16_patt[count - 1], count);
-	if (count > 8)
-	  /* Adjust jump offset.  */
-	  fragP->fr_literal[fragP->fr_fix + 1] = count - 2;
-      }
-    else
+  else if (flag_code == CODE_16BIT)
+    {
       memcpy (fragP->fr_literal + fragP->fr_fix,
-	      f32_patt[count - 1], count);
+	      f16_patt[count - 1], count);
+      if (count > 8)
+	/* Adjust jump offset.  */
+	fragP->fr_literal[fragP->fr_fix + 1] = count - 2;
+    }
+  else
+    memcpy (fragP->fr_literal + fragP->fr_fix,
+	    f32_patt[count - 1], count);
   fragP->fr_var = count;
 }
 
@@ -5428,6 +5555,7 @@ const char *md_shortopts = "qn";
 #define OPTION_32 (OPTION_MD_BASE + 0)
 #define OPTION_64 (OPTION_MD_BASE + 1)
 #define OPTION_DIVIDE (OPTION_MD_BASE + 2)
+#define OPTION_ALT_NOPS (OPTION_MD_BASE + 3)
 
 struct option md_longopts[] = {
   {"32", no_argument, NULL, OPTION_32},
@@ -5435,6 +5563,7 @@ struct option md_longopts[] = {
   {"64", no_argument, NULL, OPTION_64},
 #endif
   {"divide", no_argument, NULL, OPTION_DIVIDE},
+  {"alt-nops", required_argument, NULL, OPTION_ALT_NOPS},
   {NULL, no_argument, NULL, 0}
 };
 size_t md_longopts_size = sizeof (md_longopts);
@@ -5496,6 +5625,15 @@ md_parse_option (c, arg)
       default_arch = "i386";
       break;
 
+    case OPTION_ALT_NOPS:
+      if (strcmp (optarg, "short") == 0)
+	alt_nops = alt_nops_short;
+      else if (strcmp (optarg, "long") == 0)
+	alt_nops = alt_nops_long;
+      else
+	as_fatal (_("Unknown --alt-nops= option"));
+      break;
+
     case OPTION_DIVIDE:
 #ifdef SVR4_COMMENT_CHARS
       {
@@ -5543,6 +5681,8 @@ md_show_usage (stream)
   fprintf (stream, _("\
   --divide                ignored\n"));
 #endif
+  fprintf (stream, _("\
+  --alt-nops=short|long   generate short/long alternative nops for alignment\n"));
 }
 
 #if ((defined (OBJ_MAYBE_COFF) && defined (OBJ_MAYBE_AOUT)) \
--- binutils/gas/doc/c-i386.texi.alt	2005-11-11 10:48:53.000000000 -0800
+++ binutils/gas/doc/c-i386.texi	2006-06-13 09:15:44.000000000 -0700
@@ -76,6 +76,16 @@ character, which means that it cannot be
 not disable @samp{/} at the beginning of a line starting a comment, or
 affect using @samp{#} for starting a comment.
 
+@cindex @samp{--alt-nops=} option, i386
+@cindex @samp{--alt-nops=} option, x86-64
+@item --alt-nops=@var{alternative-nop}
+This option specifies the alternative nop instructions for alignment
+within code sections if the CPU architecture supports @samp{i686}
+instructions. The following alternative nop options are recognized:
+@code{long} and @code{short}. @code{long} will generate a single
+nop instruction up to 15 bytes. @code{short} will generate a single
+nop instruction up to 10 bytes.
+
 @end table
 
 @node i386-Syntax
--- binutils/gas/testsuite/gas/i386/alt-nops-long.d.alt	2006-06-13 09:19:37.000000000 -0700
+++ binutils/gas/testsuite/gas/i386/alt-nops-long.d	2006-06-13 09:20:02.000000000 -0700
@@ -0,0 +1,156 @@
+#as: --alt-nops=long
+#source: alt-nops.s
+#objdump: -drw
+#name: i386 long alternative nops
+
+.*: +file format .*
+
+Disassembly of section .text:
+
+0+ <nop15>:
+[	 ]*0:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*1:[	 ]+66 66 66 66 66 66 2e 0f 1f 84 00 00 00 00 00[	 ]+nopw[ 	]+%cs:0x0\(%eax,%eax,1\)
+
+0+10 <nop14>:
+[	 ]*10:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*11:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*12:[	 ]+66 66 66 66 66 2e 0f 1f 84 00 00 00 00 00[	 ]+nopw[ 	]+%cs:0x0\(%eax,%eax,1\)
+
+0+20 <nop13>:
+[	 ]*20:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*21:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*22:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*23:[	 ]+66 66 66 66 2e 0f 1f 84 00 00 00 00 00[	 ]+nopw[ 	]+%cs:0x0\(%eax,%eax,1\)
+
+0+30 <nop12>:
+[	 ]*30:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*31:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*32:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*33:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*34:[	 ]+66 66 66 2e 0f 1f 84 00 00 00 00 00[	 ]+nopw[ 	]+%cs:0x0\(%eax,%eax,1\)
+
+0+40 <nop11>:
+[	 ]*40:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*41:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*42:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*43:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*44:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*45:[	 ]+66 66 2e 0f 1f 84 00 00 00 00 00[	 ]+nopw[ 	]+%cs:0x0\(%eax,%eax,1\)
+
+0+50 <nop10>:
+[	 ]*50:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*51:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*52:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*53:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*54:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*55:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*56:[	 ]+66 2e 0f 1f 84 00 00 00 00 00[	 ]+nopw[ 	]+%cs:0x0\(%eax,%eax,1\)
+
+0+60 <nop9>:
+[	 ]*60:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*61:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*62:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*63:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*64:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*65:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*66:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*67:[	 ]+66 0f 1f 84 00 00 00 00 00[	 ]+nopw[ 	]+0x0\(%eax,%eax,1\)
+
+0+70 <nop8>:
+[	 ]*70:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*71:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*72:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*73:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*74:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*75:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*76:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*77:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*78:[	 ]+0f 1f 84 00 00 00 00 00[	 ]+nopl[ 	]+0x0\(%eax,%eax,1\)
+
+0+80 <nop7>:
+[	 ]*80:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*81:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*82:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*83:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*84:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*85:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*86:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*87:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*88:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*89:[	 ]+0f 1f 80 00 00 00 00[	 ]+nopl[ 	]+0x0\(%eax\)
+
+0+90 <nop6>:
+[	 ]*90:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*91:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*92:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*93:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*94:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*95:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*96:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*97:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*98:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*99:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*9a:[	 ]+66 0f 1f 44 00 00[	 ]+nopw[ 	]+0x0\(%eax,%eax,1\)
+
+0+a0 <nop5>:
+[	 ]*a0:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*a1:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*a2:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*a3:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*a4:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*a5:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*a6:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*a7:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*a8:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*a9:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*aa:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*ab:[	 ]+0f 1f 44 00 00[	 ]+nopl[ 	]+0x0\(%eax,%eax,1\)
+
+0+b0 <nop4>:
+[	 ]*b0:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*b1:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*b2:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*b3:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*b4:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*b5:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*b6:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*b7:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*b8:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*b9:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*ba:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*bb:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*bc:[	 ]+0f 1f 40 00[	 ]+nopl[ 	]+0x0\(%eax\)
+
+0+c0 <nop3>:
+[	 ]*c0:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*c1:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*c2:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*c3:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*c4:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*c5:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*c6:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*c7:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*c8:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*c9:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*ca:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*cb:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*cc:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*cd:[	 ]+0f 1f 00[	 ]+nopl[ 	]+\(%eax\)
+
+0+d0 <nop2>:
+[	 ]*d0:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*d1:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*d2:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*d3:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*d4:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*d5:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*d6:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*d7:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*d8:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*d9:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*da:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*db:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*dc:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*dd:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*de:[	 ]+66 90[	 ]+xchg[ 	]+%ax,%ax
+#pass
--- binutils/gas/testsuite/gas/i386/alt-nops-short.d.alt	2006-06-12 12:52:53.000000000 -0700
+++ binutils/gas/testsuite/gas/i386/alt-nops-short.d	2006-06-13 09:18:38.000000000 -0700
@@ -0,0 +1,161 @@
+#as: --alt-nops=short
+#source: alt-nops.s
+#objdump: -drw
+#name: i386 short alternative nops
+
+.*: +file format .*
+
+Disassembly of section .text:
+
+0+ <nop15>:
+[	 ]*0:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*1:[	 ]+0f 1f 80 00 00 00 00[	 ]+nopl[ 	]+0x0\(%eax\)
+[	 ]*8:[	 ]+0f 1f 84 00 00 00 00 00[	 ]+nopl[ 	]+0x0\(%eax,%eax,1\)
+
+0+10 <nop14>:
+[	 ]*10:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*11:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*12:[	 ]+0f 1f 80 00 00 00 00[	 ]+nopl[ 	]+0x0\(%eax\)
+[	 ]*19:[	 ]+0f 1f 80 00 00 00 00[	 ]+nopl[ 	]+0x0\(%eax\)
+
+0+20 <nop13>:
+[	 ]*20:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*21:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*22:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*23:[	 ]+66 0f 1f 44 00 00[	 ]+nopw[ 	]+0x0\(%eax,%eax,1\)
+[	 ]*29:[	 ]+0f 1f 80 00 00 00 00[	 ]+nopl[ 	]+0x0\(%eax\)
+
+0+30 <nop12>:
+[	 ]*30:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*31:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*32:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*33:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*34:[	 ]+66 0f 1f 44 00 00[	 ]+nopw[ 	]+0x0\(%eax,%eax,1\)
+[	 ]*3a:[	 ]+66 0f 1f 44 00 00[	 ]+nopw[ 	]+0x0\(%eax,%eax,1\)
+
+0+40 <nop11>:
+[	 ]*40:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*41:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*42:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*43:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*44:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*45:[	 ]+0f 1f 44 00 00[	 ]+nopl[ 	]+0x0\(%eax,%eax,1\)
+[	 ]*4a:[	 ]+66 0f 1f 44 00 00[	 ]+nopw[ 	]+0x0\(%eax,%eax,1\)
+
+0+50 <nop10>:
+[	 ]*50:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*51:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*52:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*53:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*54:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*55:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*56:[	 ]+66 2e 0f 1f 84 00 00 00 00 00[	 ]+nopw[ 	]+%cs:0x0\(%eax,%eax,1\)
+
+0+60 <nop9>:
+[	 ]*60:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*61:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*62:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*63:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*64:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*65:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*66:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*67:[	 ]+66 0f 1f 84 00 00 00 00 00[	 ]+nopw[ 	]+0x0\(%eax,%eax,1\)
+
+0+70 <nop8>:
+[	 ]*70:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*71:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*72:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*73:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*74:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*75:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*76:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*77:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*78:[	 ]+0f 1f 84 00 00 00 00 00[	 ]+nopl[ 	]+0x0\(%eax,%eax,1\)
+
+0+80 <nop7>:
+[	 ]*80:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*81:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*82:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*83:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*84:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*85:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*86:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*87:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*88:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*89:[	 ]+0f 1f 80 00 00 00 00[	 ]+nopl[ 	]+0x0\(%eax\)
+
+0+90 <nop6>:
+[	 ]*90:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*91:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*92:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*93:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*94:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*95:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*96:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*97:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*98:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*99:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*9a:[	 ]+66 0f 1f 44 00 00[	 ]+nopw[ 	]+0x0\(%eax,%eax,1\)
+
+0+a0 <nop5>:
+[	 ]*a0:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*a1:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*a2:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*a3:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*a4:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*a5:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*a6:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*a7:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*a8:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*a9:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*aa:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*ab:[	 ]+0f 1f 44 00 00[	 ]+nopl[ 	]+0x0\(%eax,%eax,1\)
+
+0+b0 <nop4>:
+[	 ]*b0:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*b1:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*b2:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*b3:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*b4:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*b5:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*b6:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*b7:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*b8:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*b9:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*ba:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*bb:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*bc:[	 ]+0f 1f 40 00[	 ]+nopl[ 	]+0x0\(%eax\)
+
+0+c0 <nop3>:
+[	 ]*c0:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*c1:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*c2:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*c3:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*c4:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*c5:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*c6:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*c7:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*c8:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*c9:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*ca:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*cb:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*cc:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*cd:[	 ]+0f 1f 00[	 ]+nopl[ 	]+\(%eax\)
+
+0+d0 <nop2>:
+[	 ]*d0:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*d1:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*d2:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*d3:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*d4:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*d5:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*d6:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*d7:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*d8:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*d9:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*da:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*db:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*dc:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*dd:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*de:[	 ]+66 90[	 ]+xchg[ 	]+%ax,%ax
+#pass
--- binutils/gas/testsuite/gas/i386/alt-nops.s.alt	2006-06-12 12:52:53.000000000 -0700
+++ binutils/gas/testsuite/gas/i386/alt-nops.s	2006-06-12 12:52:53.000000000 -0700
@@ -0,0 +1,147 @@
+	.text
+nop15:
+	nop
+	.p2align 4
+
+nop14:
+	nop
+	nop
+	.p2align 4
+
+nop13:
+	nop
+	nop
+	nop
+	.p2align 4
+
+nop12:
+	nop
+	nop
+	nop
+	nop
+	.p2align 4
+
+nop11:
+	nop
+	nop
+	nop
+	nop
+	nop
+	.p2align 4
+
+nop10:
+	nop
+	nop
+	nop
+	nop
+	nop
+	nop
+	.p2align 4
+
+nop9:
+	nop
+	nop
+	nop
+	nop
+	nop
+	nop
+	nop
+	.p2align 4
+
+nop8:
+	nop
+	nop
+	nop
+	nop
+	nop
+	nop
+	nop
+	nop
+	.p2align 4
+
+nop7:
+	nop
+	nop
+	nop
+	nop
+	nop
+	nop
+	nop
+	nop
+	nop
+	.p2align 4
+
+nop6:
+	nop
+	nop
+	nop
+	nop
+	nop
+	nop
+	nop
+	nop
+	nop
+	nop
+	.p2align 4
+
+nop5:
+	nop
+	nop
+	nop
+	nop
+	nop
+	nop
+	nop
+	nop
+	nop
+	nop
+	nop
+	.p2align 4
+
+nop4:
+	nop
+	nop
+	nop
+	nop
+	nop
+	nop
+	nop
+	nop
+	nop
+	nop
+	nop
+	nop
+	.p2align 4
+
+nop3:
+	nop
+	nop
+	nop
+	nop
+	nop
+	nop
+	nop
+	nop
+	nop
+	nop
+	nop
+	nop
+	nop
+	.p2align 4
+
+nop2:
+	nop
+	nop
+	nop
+	nop
+	nop
+	nop
+	nop
+	nop
+	nop
+	nop
+	nop
+	nop
+	nop
+	nop
+	.p2align 4
--- binutils/gas/testsuite/gas/i386/i386.exp.alt	2006-06-12 12:50:18.000000000 -0700
+++ binutils/gas/testsuite/gas/i386/i386.exp	2006-06-13 09:22:01.000000000 -0700
@@ -73,6 +73,8 @@ if [expr ([istarget "i*86-*-*"] ||  [ist
     run_dump_test "rep-suffix"
     run_dump_test "fp"
     run_dump_test "nops"
+    run_dump_test "alt-nops-long"
+    run_dump_test "alt-nops-short"
 
     # These tests require support for 8 and 16 bit relocs,
     # so we only run them for ELF and COFF targets.
@@ -146,6 +148,8 @@ if [expr ([istarget "i*86-*-*"] || [ista
     run_dump_test "x86-64-rep-suffix"
     run_dump_test "x86-64-gidt"
     run_dump_test "x86-64-nops"
+    run_dump_test "x86-64-alt-nops-long"
+    run_dump_test "x86-64-alt-nops-short"
 
     if { ![istarget "*-*-aix*"]
       && ![istarget "*-*-beos*"]
--- binutils/gas/testsuite/gas/i386/x86-64-alt-nops-long.d.alt	2006-06-13 09:19:25.000000000 -0700
+++ binutils/gas/testsuite/gas/i386/x86-64-alt-nops-long.d	2006-06-13 09:18:54.000000000 -0700
@@ -0,0 +1,156 @@
+#as: --alt-nops=long
+#source: x86-64-alt-nops.s
+#objdump: -drw
+#name: x86-64 long alternative nops
+
+.*: +file format .*
+
+Disassembly of section .text:
+
+0+ <nop15>:
+[	 ]*0:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*1:[	 ]+66 66 66 66 66 66 2e 0f 1f 84 00 00 00 00 00[	 ]+nopw[ 	]+%cs:0x0\(%rax,%rax,1\)
+
+0+10 <nop14>:
+[	 ]*10:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*11:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*12:[	 ]+66 66 66 66 66 2e 0f 1f 84 00 00 00 00 00[	 ]+nopw[ 	]+%cs:0x0\(%rax,%rax,1\)
+
+0+20 <nop13>:
+[	 ]*20:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*21:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*22:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*23:[	 ]+66 66 66 66 2e 0f 1f 84 00 00 00 00 00[	 ]+nopw[ 	]+%cs:0x0\(%rax,%rax,1\)
+
+0+30 <nop12>:
+[	 ]*30:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*31:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*32:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*33:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*34:[	 ]+66 66 66 2e 0f 1f 84 00 00 00 00 00[	 ]+nopw[ 	]+%cs:0x0\(%rax,%rax,1\)
+
+0+40 <nop11>:
+[	 ]*40:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*41:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*42:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*43:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*44:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*45:[	 ]+66 66 2e 0f 1f 84 00 00 00 00 00[	 ]+nopw[ 	]+%cs:0x0\(%rax,%rax,1\)
+
+0+50 <nop10>:
+[	 ]*50:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*51:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*52:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*53:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*54:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*55:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*56:[	 ]+66 2e 0f 1f 84 00 00 00 00 00[	 ]+nopw[ 	]+%cs:0x0\(%rax,%rax,1\)
+
+0+60 <nop9>:
+[	 ]*60:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*61:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*62:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*63:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*64:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*65:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*66:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*67:[	 ]+66 0f 1f 84 00 00 00 00 00[	 ]+nopw[ 	]+0x0\(%rax,%rax,1\)
+
+0+70 <nop8>:
+[	 ]*70:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*71:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*72:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*73:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*74:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*75:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*76:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*77:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*78:[	 ]+0f 1f 84 00 00 00 00 00[	 ]+nopl[ 	]+0x0\(%rax,%rax,1\)
+
+0+80 <nop7>:
+[	 ]*80:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*81:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*82:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*83:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*84:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*85:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*86:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*87:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*88:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*89:[	 ]+0f 1f 80 00 00 00 00[	 ]+nopl[ 	]+0x0\(%rax\)
+
+0+90 <nop6>:
+[	 ]*90:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*91:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*92:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*93:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*94:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*95:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*96:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*97:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*98:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*99:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*9a:[	 ]+66 0f 1f 44 00 00[	 ]+nopw[ 	]+0x0\(%rax,%rax,1\)
+
+0+a0 <nop5>:
+[	 ]*a0:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*a1:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*a2:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*a3:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*a4:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*a5:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*a6:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*a7:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*a8:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*a9:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*aa:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*ab:[	 ]+0f 1f 44 00 00[	 ]+nopl[ 	]+0x0\(%rax,%rax,1\)
+
+0+b0 <nop4>:
+[	 ]*b0:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*b1:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*b2:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*b3:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*b4:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*b5:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*b6:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*b7:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*b8:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*b9:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*ba:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*bb:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*bc:[	 ]+0f 1f 40 00[	 ]+nopl[ 	]+0x0\(%rax\)
+
+0+c0 <nop3>:
+[	 ]*c0:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*c1:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*c2:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*c3:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*c4:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*c5:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*c6:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*c7:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*c8:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*c9:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*ca:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*cb:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*cc:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*cd:[	 ]+0f 1f 00[	 ]+nopl[ 	]+\(%rax\)
+
+0+d0 <nop2>:
+[	 ]*d0:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*d1:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*d2:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*d3:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*d4:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*d5:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*d6:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*d7:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*d8:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*d9:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*da:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*db:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*dc:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*dd:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*de:[	 ]+66 90[	 ]+xchg[ 	]+%ax,%ax
+#pass
--- binutils/gas/testsuite/gas/i386/x86-64-alt-nops-short.d.alt	2006-06-12 12:52:53.000000000 -0700
+++ binutils/gas/testsuite/gas/i386/x86-64-alt-nops-short.d	2006-06-13 09:20:32.000000000 -0700
@@ -0,0 +1,161 @@
+#as: --alt-nops=short
+#source: x86-64-alt-nops.s
+#objdump: -drw
+#name: x86-64 short alternative nops
+
+.*: +file format .*
+
+Disassembly of section .text:
+
+0+ <nop15>:
+[	 ]*0:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*1:[	 ]+0f 1f 80 00 00 00 00[	 ]+nopl[ 	]+0x0\(%rax\)
+[	 ]*8:[	 ]+0f 1f 84 00 00 00 00 00[	 ]+nopl[ 	]+0x0\(%rax,%rax,1\)
+
+0+10 <nop14>:
+[	 ]*10:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*11:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*12:[	 ]+0f 1f 80 00 00 00 00[	 ]+nopl[ 	]+0x0\(%rax\)
+[	 ]*19:[	 ]+0f 1f 80 00 00 00 00[	 ]+nopl[ 	]+0x0\(%rax\)
+
+0+20 <nop13>:
+[	 ]*20:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*21:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*22:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*23:[	 ]+66 0f 1f 44 00 00[	 ]+nopw[ 	]+0x0\(%rax,%rax,1\)
+[	 ]*29:[	 ]+0f 1f 80 00 00 00 00[	 ]+nopl[ 	]+0x0\(%rax\)
+
+0+30 <nop12>:
+[	 ]*30:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*31:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*32:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*33:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*34:[	 ]+66 0f 1f 44 00 00[	 ]+nopw[ 	]+0x0\(%rax,%rax,1\)
+[	 ]*3a:[	 ]+66 0f 1f 44 00 00[	 ]+nopw[ 	]+0x0\(%rax,%rax,1\)
+
+0+40 <nop11>:
+[	 ]*40:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*41:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*42:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*43:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*44:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*45:[	 ]+0f 1f 44 00 00[	 ]+nopl[ 	]+0x0\(%rax,%rax,1\)
+[	 ]*4a:[	 ]+66 0f 1f 44 00 00[	 ]+nopw[ 	]+0x0\(%rax,%rax,1\)
+
+0+50 <nop10>:
+[	 ]*50:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*51:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*52:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*53:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*54:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*55:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*56:[	 ]+66 2e 0f 1f 84 00 00 00 00 00[	 ]+nopw[ 	]+%cs:0x0\(%rax,%rax,1\)
+
+0+60 <nop9>:
+[	 ]*60:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*61:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*62:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*63:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*64:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*65:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*66:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*67:[	 ]+66 0f 1f 84 00 00 00 00 00[	 ]+nopw[ 	]+0x0\(%rax,%rax,1\)
+
+0+70 <nop8>:
+[	 ]*70:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*71:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*72:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*73:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*74:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*75:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*76:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*77:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*78:[	 ]+0f 1f 84 00 00 00 00 00[	 ]+nopl[ 	]+0x0\(%rax,%rax,1\)
+
+0+80 <nop7>:
+[	 ]*80:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*81:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*82:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*83:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*84:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*85:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*86:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*87:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*88:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*89:[	 ]+0f 1f 80 00 00 00 00[	 ]+nopl[ 	]+0x0\(%rax\)
+
+0+90 <nop6>:
+[	 ]*90:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*91:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*92:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*93:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*94:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*95:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*96:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*97:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*98:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*99:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*9a:[	 ]+66 0f 1f 44 00 00[	 ]+nopw[ 	]+0x0\(%rax,%rax,1\)
+
+0+a0 <nop5>:
+[	 ]*a0:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*a1:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*a2:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*a3:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*a4:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*a5:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*a6:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*a7:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*a8:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*a9:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*aa:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*ab:[	 ]+0f 1f 44 00 00[	 ]+nopl[ 	]+0x0\(%rax,%rax,1\)
+
+0+b0 <nop4>:
+[	 ]*b0:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*b1:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*b2:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*b3:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*b4:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*b5:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*b6:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*b7:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*b8:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*b9:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*ba:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*bb:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*bc:[	 ]+0f 1f 40 00[	 ]+nopl[ 	]+0x0\(%rax\)
+
+0+c0 <nop3>:
+[	 ]*c0:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*c1:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*c2:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*c3:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*c4:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*c5:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*c6:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*c7:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*c8:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*c9:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*ca:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*cb:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*cc:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*cd:[	 ]+0f 1f 00[	 ]+nopl[ 	]+\(%rax\)
+
+0+d0 <nop2>:
+[	 ]*d0:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*d1:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*d2:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*d3:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*d4:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*d5:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*d6:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*d7:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*d8:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*d9:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*da:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*db:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*dc:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*dd:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*de:[	 ]+66 90[	 ]+xchg[ 	]+%ax,%ax
+#pass
--- binutils/gas/testsuite/gas/i386/x86-64-alt-nops.s.alt	2006-06-12 12:52:53.000000000 -0700
+++ binutils/gas/testsuite/gas/i386/x86-64-alt-nops.s	2006-06-12 12:52:53.000000000 -0700
@@ -0,0 +1,147 @@
+	.text
+nop15:
+	nop
+	.p2align 4
+
+nop14:
+	nop
+	nop
+	.p2align 4
+
+nop13:
+	nop
+	nop
+	nop
+	.p2align 4
+
+nop12:
+	nop
+	nop
+	nop
+	nop
+	.p2align 4
+
+nop11:
+	nop
+	nop
+	nop
+	nop
+	nop
+	.p2align 4
+
+nop10:
+	nop
+	nop
+	nop
+	nop
+	nop
+	nop
+	.p2align 4
+
+nop9:
+	nop
+	nop
+	nop
+	nop
+	nop
+	nop
+	nop
+	.p2align 4
+
+nop8:
+	nop
+	nop
+	nop
+	nop
+	nop
+	nop
+	nop
+	nop
+	.p2align 4
+
+nop7:
+	nop
+	nop
+	nop
+	nop
+	nop
+	nop
+	nop
+	nop
+	nop
+	.p2align 4
+
+nop6:
+	nop
+	nop
+	nop
+	nop
+	nop
+	nop
+	nop
+	nop
+	nop
+	nop
+	.p2align 4
+
+nop5:
+	nop
+	nop
+	nop
+	nop
+	nop
+	nop
+	nop
+	nop
+	nop
+	nop
+	nop
+	.p2align 4
+
+nop4:
+	nop
+	nop
+	nop
+	nop
+	nop
+	nop
+	nop
+	nop
+	nop
+	nop
+	nop
+	nop
+	.p2align 4
+
+nop3:
+	nop
+	nop
+	nop
+	nop
+	nop
+	nop
+	nop
+	nop
+	nop
+	nop
+	nop
+	nop
+	nop
+	.p2align 4
+
+nop2:
+	nop
+	nop
+	nop
+	nop
+	nop
+	nop
+	nop
+	nop
+	nop
+	nop
+	nop
+	nop
+	nop
+	nop
+	.p2align 4


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]