public inbox for binutils@sourceware.org
 help / color / mirror / Atom feed
* [rfc] nopl should not be output on -mtune=i686
@ 2011-02-08 17:11 Jan Kratochvil
  2011-02-08 17:23 ` H.J. Lu
  2011-02-08 18:20 ` H.J. Lu
  0 siblings, 2 replies; 10+ messages in thread
From: Jan Kratochvil @ 2011-02-08 17:11 UTC (permalink / raw)
  To: binutils; +Cc: Quentin Neill

Hi,

I do not fully understand the intention when to use / not use nopl.

https://bugzilla.redhat.com/show_bug.cgi?id=579838#c32
Nick Lowe wrote:
# The NOPL instruction is not supported by all i686 processors, the coded
# assumption was that they all did. This has been changed by the recent AMD
# patches linked to by Quentin Neill so that it is not assumed and it's
# specified as an extension where it is supported.

Current binutils HEAD:
-march | -mtune  | nopl used?  | after the attached patch: nopl used?
  -    |   -     |    no       | no
 i686  | -/i686  |    no       | no
  -    |   i686  |   yes = BUG | no
 core2 | -/core2 |   yes       | yes
  -    |   core2 |   yes = BUG | no

=> Currently suppressing -march now produces more advanced code output, this
   does not seem correct to me.

After the patch code built with only `-mtune=i686' then remains compatible
with AMD Geode LX.

The flag `+nop' (such as `-march=i686+nop') does not work for me as expected
with HEAD and neither works with the patched code.


Thanks,
Jan


gas/
2011-02-08  Jan Kratochvil  <jan.kratochvil@redhat.com>

	* config/tc-i386.c
	(i386_align_code) <fragP->tc_frag_data.isa == PROCESSOR_UNKNOWN>:
	For PROCESSOR_PENTIUMPRO, PROCESSOR_PENTIUM4, PROCESSOR_NOCONA,
	PROCESSOR_CORE, PROCESSOR_CORE2, PROCESSOR_COREI7, PROCESSOR_L1OM,
	PROCESSOR_GENERIC64, PROCESSOR_K6, PROCESSOR_ATHLON, PROCESSOR_K8,
	PROCESSOR_AMDFAM10 and PROCESSOR_BDVER1 use f32_patt if
	tc_frag_data.isa_flags.bitfield.cpunop is not set.

gas/testsuite/
2011-02-08  Jan Kratochvil  <jan.kratochvil@redhat.com>

	* gas/i386/i386.exp: Add nops-1-i686-i686.  Rename nops-3-i686 to
	nops-3-core2.  Rename nops-4-i686 to nops-4-core2.
	* gas/i386/nops-1-bdver1.d: Use also -march=bdver1.
	* gas/i386/nops-1-core2.d: Use also -march=core2.
	* gas/i386/nops-1-i686-i686.d: New file.
	* gas/i386/nops-1-i686.d: Replace nopl content with non-nopl content.
	* gas/i386/nops-1-k8.d: Use also -march=k8.
	* gas/i386/nops-3-i686.d: Rename to ...
	* gas/i386/nops-3-core2.d: ... here, use -mcore2, drop mtune=i686.
	* gas/i386/nops-4-i686.d: Rename to ...
	* gas/i386/nops-4-core2.d: ... here, use -mcore2, drop mtune=i686.

--- a/gas/testsuite/gas/i386/i386.exp
+++ b/gas/testsuite/gas/i386/i386.exp
@@ -78,6 +78,7 @@ if [expr ([istarget "i*86-*-*"] ||  [istarget "x86_64-*-*"]) && [gas_32_check]]
     run_dump_test "nops-1"
     run_dump_test "nops-1-i386"
     run_dump_test "nops-1-i386-i686"
+    run_dump_test "nops-1-i686-i686"
     run_dump_test "nops-1-i686"
     run_dump_test "nops-1-k8"
     run_dump_test "nops-1-core2"
@@ -87,10 +88,10 @@ if [expr ([istarget "i*86-*-*"] ||  [istarget "x86_64-*-*"]) && [gas_32_check]]
     run_dump_test "nops-2-core2"
     run_dump_test "nops-3"
     run_dump_test "nops-3-i386"
-    run_dump_test "nops-3-i686"
+    run_dump_test "nops-3-core2"
     run_dump_test "nops-4"
     run_dump_test "nops-4-i386"
-    run_dump_test "nops-4-i686"
+    run_dump_test "nops-4-core2"

--- a/gas/config/tc-i386.c
+++ b/gas/config/tc-i386.c
@@ -1053,13 +1053,6 @@ i386_align_code (fragS *fragP, int count)
 	  switch (cpu_arch_tune)
 	    {
 	    case PROCESSOR_UNKNOWN:
-	      /* We use cpu_arch_isa_flags to check if we SHOULD
-		 optimize with nops.  */
-	      if (fragP->tc_frag_data.isa_flags.bitfield.cpunop)
-		patt = alt_long_patt;
-	      else
-		patt = f32_patt;
-	      break;
 	    case PROCESSOR_PENTIUMPRO:
 	    case PROCESSOR_PENTIUM4:
 	    case PROCESSOR_NOCONA:
@@ -1068,14 +1061,24 @@ i386_align_code (fragS *fragP, int count)
 	    case PROCESSOR_COREI7:
 	    case PROCESSOR_L1OM:
 	    case PROCESSOR_GENERIC64:
-	      patt = alt_long_patt;
+	      /* We use cpu_arch_isa_flags to check if we SHOULD
+		 optimize with nops.  */
+	      if (fragP->tc_frag_data.isa_flags.bitfield.cpunop)
+		patt = alt_long_patt;
+	      else
+		patt = f32_patt;
 	      break;
 	    case PROCESSOR_K6:
 	    case PROCESSOR_ATHLON:
 	    case PROCESSOR_K8:
 	    case PROCESSOR_AMDFAM10:
 	    case PROCESSOR_BDVER1:
-	      patt = alt_short_patt;
+	      /* We use cpu_arch_isa_flags to check if we SHOULD
+		 optimize with nops.  */
+	      if (fragP->tc_frag_data.isa_flags.bitfield.cpunop)
+		patt = alt_short_patt;
+	      else
+		patt = f32_patt;
 	      break;
 	    case PROCESSOR_I386:
 	    case PROCESSOR_I486:
--- a/gas/testsuite/gas/i386/i386.exp
+++ b/gas/testsuite/gas/i386/i386.exp
@@ -78,6 +78,7 @@ if [expr ([istarget "i*86-*-*"] ||  [istarget "x86_64-*-*"]) && [gas_32_check]]
     run_dump_test "nops-1"
     run_dump_test "nops-1-i386"
     run_dump_test "nops-1-i386-i686"
+    run_dump_test "nops-1-i686-i686"
     run_dump_test "nops-1-i686"
     run_dump_test "nops-1-k8"
     run_dump_test "nops-1-core2"
@@ -87,10 +88,10 @@ if [expr ([istarget "i*86-*-*"] ||  [istarget "x86_64-*-*"]) && [gas_32_check]]
     run_dump_test "nops-2-core2"
     run_dump_test "nops-3"
     run_dump_test "nops-3-i386"
-    run_dump_test "nops-3-i686"
+    run_dump_test "nops-3-core2"
     run_dump_test "nops-4"
     run_dump_test "nops-4-i386"
-    run_dump_test "nops-4-i686"
+    run_dump_test "nops-4-core2"
     run_dump_test "nops-5"
     run_dump_test "nops-5-i686"
     run_dump_test "addr16"
--- a/gas/testsuite/gas/i386/nops-1-bdver1.d
+++ b/gas/testsuite/gas/i386/nops-1-bdver1.d
@@ -1,7 +1,7 @@
-#as: -mtune=bdver1
+#as: -march=bdver1 -mtune=bdver1
 #source: nops-1.s
 #objdump: -drw
-#name: i386 -mtune=bdver1 nops 1
+#name: i386 -march=bdver1 -mtune=bdver1 nops 1
 
 .*: +file format .*
 
--- a/gas/testsuite/gas/i386/nops-1-core2.d
+++ b/gas/testsuite/gas/i386/nops-1-core2.d
@@ -1,7 +1,7 @@
-#as: -mtune=core2
+#as: -march=core2 -mtune=core2
 #source: nops-1.s
 #objdump: -drw
-#name: i386 -mtune=core2 nops 1
+#name: i386 -march=core2 -mtune=core2 nops 1
 
 .*: +file format .*
 
--- /dev/null
+++ b/gas/testsuite/gas/i386/nops-1-i686-i686.d
@@ -0,0 +1,177 @@
+#as: -march=i686
+#source: nops-1.s
+#objdump: -drw
+#name: i386 nops -march=i686 nops 1
+
+.*: +file format .*
+
+Disassembly of section .text:
+
+0+ <nop15>:
+[	 ]*0:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*1:[	 ]+eb 0d[	 ]+jmp[ 	]+10[ 	]+<nop14>
+[	 ]*3:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*4:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*5:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*6:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*7:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*8:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*9:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*a:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*b:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*c:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*d:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*e:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*f:[	 ]+90[	 ]+nop[ 	]*
+
+0+10 <nop14>:
+[	 ]*10:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*11:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*12:[	 ]+8d b4 26 00 00 00 00[	 ]+lea[ 	]+0x0\(%esi,%eiz,1\),%esi
+[	 ]*19:[	 ]+8d bc 27 00 00 00 00[	 ]+lea[ 	]+0x0\(%edi,%eiz,1\),%edi
+
+0+20 <nop13>:
+[	 ]*20:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*21:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*22:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*23:[	 ]+8d b6 00 00 00 00[	 ]+lea[ 	]+0x0\(%esi\),%esi
+[	 ]*29:[	 ]+8d bc 27 00 00 00 00[	 ]+lea[ 	]+0x0\(%edi,%eiz,1\),%edi
+
+0+30 <nop12>:
+[	 ]*30:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*31:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*32:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*33:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*34:[	 ]+8d b6 00 00 00 00[	 ]+lea[ 	]+0x0\(%esi\),%esi
+[	 ]*3a:[	 ]+8d bf 00 00 00 00[	 ]+lea[ 	]+0x0\(%edi\),%edi
+
+0+40 <nop11>:
+[	 ]*40:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*41:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*42:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*43:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*44:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*45:[	 ]+8d 74 26 00[	 ]+lea[ 	]+0x0\(%esi,%eiz,1\),%esi
+[	 ]*49:[	 ]+8d bc 27 00 00 00 00[	 ]+lea[ 	]+0x0\(%edi,%eiz,1\),%edi
+
+0+50 <nop10>:
+[	 ]*50:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*51:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*52:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*53:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*54:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*55:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*56:[	 ]+8d 76 00[	 ]+lea[ 	]+0x0\(%esi\),%esi
+[	 ]*59:[	 ]+8d bc 27 00 00 00 00[	 ]+lea[ 	]+0x0\(%edi,%eiz,1\),%edi
+
+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:[	 ]+89 f6[	 ]+mov[ 	]+%esi,%esi
+[	 ]*69:[	 ]+8d bc 27 00 00 00 00[	 ]+lea[ 	]+0x0\(%edi,%eiz,1\),%edi
+
+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:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*79:[	 ]+8d b4 26 00 00 00 00[	 ]+lea[ 	]+0x0\(%esi,%eiz,1\),%esi
+
+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:[	 ]+8d b4 26 00 00 00 00[	 ]+lea[ 	]+0x0\(%esi,%eiz,1\),%esi
+
+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:[	 ]+8d b6 00 00 00 00[	 ]+lea[ 	]+0x0\(%esi\),%esi
+
+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:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*ac:[	 ]+8d 74 26 00[	 ]+lea[ 	]+0x0\(%esi,%eiz,1\),%esi
+
+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:[	 ]+8d 74 26 00[	 ]+lea[ 	]+0x0\(%esi,%eiz,1\),%esi
+
+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:[	 ]+8d 76 00[	 ]+lea[ 	]+0x0\(%esi\),%esi
+
+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
--- a/gas/testsuite/gas/i386/nops-1-i686.d
+++ b/gas/testsuite/gas/i386/nops-1-i686.d
@@ -5,153 +5,173 @@
 
 .*: +file format .*
 
-
 Disassembly of section .text:
 
 0+ <nop15>:
-[ 	]*[a-f0-9]+:	90                   	nop
-[ 	]*[a-f0-9]+:	66 66 66 66 66 66 2e 0f 1f 84 00 00 00 00 00 	data32 data32 data32 data32 data32 nopw %cs:0x0\(%eax,%eax,1\)
+[	 ]*0:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*1:[	 ]+eb 0d[	 ]+jmp[ 	]+10[ 	]+<nop14>
+[	 ]*3:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*4:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*5:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*6:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*7:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*8:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*9:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*a:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*b:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*c:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*d:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*e:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*f:[	 ]+90[	 ]+nop[ 	]*
 
 0+10 <nop14>:
-[ 	]*[a-f0-9]+:	90                   	nop
-[ 	]*[a-f0-9]+:	90                   	nop
-[ 	]*[a-f0-9]+:	66 66 66 66 66 2e 0f 1f 84 00 00 00 00 00 	data32 data32 data32 data32 nopw %cs:0x0\(%eax,%eax,1\)
+[	 ]*10:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*11:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*12:[	 ]+8d b4 26 00 00 00 00[	 ]+lea[ 	]+0x0\(%esi,%eiz,1\),%esi
+[	 ]*19:[	 ]+8d bc 27 00 00 00 00[	 ]+lea[ 	]+0x0\(%edi,%eiz,1\),%edi
 
 0+20 <nop13>:
-[ 	]*[a-f0-9]+:	90                   	nop
-[ 	]*[a-f0-9]+:	90                   	nop
-[ 	]*[a-f0-9]+:	90                   	nop
-[ 	]*[a-f0-9]+:	66 66 66 66 2e 0f 1f 84 00 00 00 00 00 	data32 data32 data32 nopw %cs:0x0\(%eax,%eax,1\)
+[	 ]*20:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*21:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*22:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*23:[	 ]+8d b6 00 00 00 00[	 ]+lea[ 	]+0x0\(%esi\),%esi
+[	 ]*29:[	 ]+8d bc 27 00 00 00 00[	 ]+lea[ 	]+0x0\(%edi,%eiz,1\),%edi
 
 0+30 <nop12>:
-[ 	]*[a-f0-9]+:	90                   	nop
-[ 	]*[a-f0-9]+:	90                   	nop
-[ 	]*[a-f0-9]+:	90                   	nop
-[ 	]*[a-f0-9]+:	90                   	nop
-[ 	]*[a-f0-9]+:	66 66 66 2e 0f 1f 84 00 00 00 00 00 	data32 data32 nopw %cs:0x0\(%eax,%eax,1\)
+[	 ]*30:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*31:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*32:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*33:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*34:[	 ]+8d b6 00 00 00 00[	 ]+lea[ 	]+0x0\(%esi\),%esi
+[	 ]*3a:[	 ]+8d bf 00 00 00 00[	 ]+lea[ 	]+0x0\(%edi\),%edi
 
 0+40 <nop11>:
-[ 	]*[a-f0-9]+:	90                   	nop
-[ 	]*[a-f0-9]+:	90                   	nop
-[ 	]*[a-f0-9]+:	90                   	nop
-[ 	]*[a-f0-9]+:	90                   	nop
-[ 	]*[a-f0-9]+:	90                   	nop
-[ 	]*[a-f0-9]+:	66 66 2e 0f 1f 84 00 00 00 00 00 	data32 nopw %cs:0x0\(%eax,%eax,1\)
+[	 ]*40:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*41:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*42:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*43:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*44:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*45:[	 ]+8d 74 26 00[	 ]+lea[ 	]+0x0\(%esi,%eiz,1\),%esi
+[	 ]*49:[	 ]+8d bc 27 00 00 00 00[	 ]+lea[ 	]+0x0\(%edi,%eiz,1\),%edi
 
 0+50 <nop10>:
-[ 	]*[a-f0-9]+:	90                   	nop
-[ 	]*[a-f0-9]+:	90                   	nop
-[ 	]*[a-f0-9]+:	90                   	nop
-[ 	]*[a-f0-9]+:	90                   	nop
-[ 	]*[a-f0-9]+:	90                   	nop
-[ 	]*[a-f0-9]+:	90                   	nop
-[ 	]*[a-f0-9]+:	66 2e 0f 1f 84 00 00 00 00 00 	nopw   %cs:0x0\(%eax,%eax,1\)
+[	 ]*50:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*51:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*52:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*53:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*54:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*55:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*56:[	 ]+8d 76 00[	 ]+lea[ 	]+0x0\(%esi\),%esi
+[	 ]*59:[	 ]+8d bc 27 00 00 00 00[	 ]+lea[ 	]+0x0\(%edi,%eiz,1\),%edi
 
 0+60 <nop9>:
-[ 	]*[a-f0-9]+:	90                   	nop
-[ 	]*[a-f0-9]+:	90                   	nop
-[ 	]*[a-f0-9]+:	90                   	nop
-[ 	]*[a-f0-9]+:	90                   	nop
-[ 	]*[a-f0-9]+:	90                   	nop
-[ 	]*[a-f0-9]+:	90                   	nop
-[ 	]*[a-f0-9]+:	90                   	nop
-[ 	]*[a-f0-9]+:	66 0f 1f 84 00 00 00 00 00 	nopw   0x0\(%eax,%eax,1\)
+[	 ]*60:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*61:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*62:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*63:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*64:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*65:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*66:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*67:[	 ]+89 f6[	 ]+mov[ 	]+%esi,%esi
+[	 ]*69:[	 ]+8d bc 27 00 00 00 00[	 ]+lea[ 	]+0x0\(%edi,%eiz,1\),%edi
 
 0+70 <nop8>:
-[ 	]*[a-f0-9]+:	90                   	nop
-[ 	]*[a-f0-9]+:	90                   	nop
-[ 	]*[a-f0-9]+:	90                   	nop
-[ 	]*[a-f0-9]+:	90                   	nop
-[ 	]*[a-f0-9]+:	90                   	nop
-[ 	]*[a-f0-9]+:	90                   	nop
-[ 	]*[a-f0-9]+:	90                   	nop
-[ 	]*[a-f0-9]+:	90                   	nop
-[ 	]*[a-f0-9]+:	0f 1f 84 00 00 00 00 00 	nopl   0x0\(%eax,%eax,1\)
+[	 ]*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:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*79:[	 ]+8d b4 26 00 00 00 00[	 ]+lea[ 	]+0x0\(%esi,%eiz,1\),%esi
 
 0+80 <nop7>:
-[ 	]*[a-f0-9]+:	90                   	nop
-[ 	]*[a-f0-9]+:	90                   	nop
-[ 	]*[a-f0-9]+:	90                   	nop
-[ 	]*[a-f0-9]+:	90                   	nop
-[ 	]*[a-f0-9]+:	90                   	nop
-[ 	]*[a-f0-9]+:	90                   	nop
-[ 	]*[a-f0-9]+:	90                   	nop
-[ 	]*[a-f0-9]+:	90                   	nop
-[ 	]*[a-f0-9]+:	90                   	nop
-[ 	]*[a-f0-9]+:	0f 1f 80 00 00 00 00 	nopl   0x0\(%eax\)
+[	 ]*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:[	 ]+8d b4 26 00 00 00 00[	 ]+lea[ 	]+0x0\(%esi,%eiz,1\),%esi
 
 0+90 <nop6>:
-[ 	]*[a-f0-9]+:	90                   	nop
-[ 	]*[a-f0-9]+:	90                   	nop
-[ 	]*[a-f0-9]+:	90                   	nop
-[ 	]*[a-f0-9]+:	90                   	nop
-[ 	]*[a-f0-9]+:	90                   	nop
-[ 	]*[a-f0-9]+:	90                   	nop
-[ 	]*[a-f0-9]+:	90                   	nop
-[ 	]*[a-f0-9]+:	90                   	nop
-[ 	]*[a-f0-9]+:	90                   	nop
-[ 	]*[a-f0-9]+:	90                   	nop
-[ 	]*[a-f0-9]+:	66 0f 1f 44 00 00    	nopw   0x0\(%eax,%eax,1\)
+[	 ]*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:[	 ]+8d b6 00 00 00 00[	 ]+lea[ 	]+0x0\(%esi\),%esi
 
 0+a0 <nop5>:
-[ 	]*[a-f0-9]+:	90                   	nop
-[ 	]*[a-f0-9]+:	90                   	nop
-[ 	]*[a-f0-9]+:	90                   	nop
-[ 	]*[a-f0-9]+:	90                   	nop
-[ 	]*[a-f0-9]+:	90                   	nop
-[ 	]*[a-f0-9]+:	90                   	nop
-[ 	]*[a-f0-9]+:	90                   	nop
-[ 	]*[a-f0-9]+:	90                   	nop
-[ 	]*[a-f0-9]+:	90                   	nop
-[ 	]*[a-f0-9]+:	90                   	nop
-[ 	]*[a-f0-9]+:	90                   	nop
-[ 	]*[a-f0-9]+:	0f 1f 44 00 00       	nopl   0x0\(%eax,%eax,1\)
+[	 ]*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:[	 ]+90[	 ]+nop[ 	]*
+[	 ]*ac:[	 ]+8d 74 26 00[	 ]+lea[ 	]+0x0\(%esi,%eiz,1\),%esi
 
 0+b0 <nop4>:
-[ 	]*[a-f0-9]+:	90                   	nop
-[ 	]*[a-f0-9]+:	90                   	nop
-[ 	]*[a-f0-9]+:	90                   	nop
-[ 	]*[a-f0-9]+:	90                   	nop
-[ 	]*[a-f0-9]+:	90                   	nop
-[ 	]*[a-f0-9]+:	90                   	nop
-[ 	]*[a-f0-9]+:	90                   	nop
-[ 	]*[a-f0-9]+:	90                   	nop
-[ 	]*[a-f0-9]+:	90                   	nop
-[ 	]*[a-f0-9]+:	90                   	nop
-[ 	]*[a-f0-9]+:	90                   	nop
-[ 	]*[a-f0-9]+:	90                   	nop
-[ 	]*[a-f0-9]+:	0f 1f 40 00          	nopl   0x0\(%eax\)
+[	 ]*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:[	 ]+8d 74 26 00[	 ]+lea[ 	]+0x0\(%esi,%eiz,1\),%esi
 
 0+c0 <nop3>:
-[ 	]*[a-f0-9]+:	90                   	nop
-[ 	]*[a-f0-9]+:	90                   	nop
-[ 	]*[a-f0-9]+:	90                   	nop
-[ 	]*[a-f0-9]+:	90                   	nop
-[ 	]*[a-f0-9]+:	90                   	nop
-[ 	]*[a-f0-9]+:	90                   	nop
-[ 	]*[a-f0-9]+:	90                   	nop
-[ 	]*[a-f0-9]+:	90                   	nop
-[ 	]*[a-f0-9]+:	90                   	nop
-[ 	]*[a-f0-9]+:	90                   	nop
-[ 	]*[a-f0-9]+:	90                   	nop
-[ 	]*[a-f0-9]+:	90                   	nop
-[ 	]*[a-f0-9]+:	90                   	nop
-[ 	]*[a-f0-9]+:	0f 1f 00             	nopl   \(%eax\)
+[	 ]*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:[	 ]+8d 76 00[	 ]+lea[ 	]+0x0\(%esi\),%esi
 
 0+d0 <nop2>:
-[ 	]*[a-f0-9]+:	90                   	nop
-[ 	]*[a-f0-9]+:	90                   	nop
-[ 	]*[a-f0-9]+:	90                   	nop
-[ 	]*[a-f0-9]+:	90                   	nop
-[ 	]*[a-f0-9]+:	90                   	nop
-[ 	]*[a-f0-9]+:	90                   	nop
-[ 	]*[a-f0-9]+:	90                   	nop
-[ 	]*[a-f0-9]+:	90                   	nop
-[ 	]*[a-f0-9]+:	90                   	nop
-[ 	]*[a-f0-9]+:	90                   	nop
-[ 	]*[a-f0-9]+:	90                   	nop
-[ 	]*[a-f0-9]+:	90                   	nop
-[ 	]*[a-f0-9]+:	90                   	nop
-[ 	]*[a-f0-9]+:	90                   	nop
-[ 	]*[a-f0-9]+:	66 90                	xchg   %ax,%ax
+[	 ]*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
--- a/gas/testsuite/gas/i386/nops-1-k8.d
+++ b/gas/testsuite/gas/i386/nops-1-k8.d
@@ -1,7 +1,7 @@
-#as: -mtune=k8
+#as: -march=k8 -mtune=k8
 #source: nops-1.s
 #objdump: -drw
-#name: i386 -mtune=k8 nops 1
+#name: i386 -march=k8 -mtune=k8 nops 1
 
 .*: +file format .*
 
--- /dev/null
+++ b/gas/testsuite/gas/i386/nops-3-core2.d
@@ -0,0 +1,17 @@
+#as: -march=core2
+#source: nops-3.s
+#objdump: -drw
+#name: i386 -march=core2 nops 3
+
+.*: +file format .*
+
+Disassembly of section .text:
+
+0+ <nop>:
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	66 66 66 66 66 66 2e 0f 1f 84 00 00 00 00 00 	data32 data32 data32 data32 data32 nopw %cs:0x0\(%eax,%eax,1\)
+[ 	]*[a-f0-9]+:	66 66 66 66 66 66 2e 0f 1f 84 00 00 00 00 00 	data32 data32 data32 data32 data32 nopw %cs:0x0\(%eax,%eax,1\)
+[ 	]*[a-f0-9]+:	89 c3                	mov    %eax,%ebx
+[ 	]*[a-f0-9]+:	66 66 66 66 66 2e 0f 1f 84 00 00 00 00 00 	data32 data32 data32 data32 nopw %cs:0x0\(%eax,%eax,1\)
+#pass
--- a/gas/testsuite/gas/i386/nops-3-i686.d
+++ /dev/null
@@ -1,17 +0,0 @@
-#as: -mtune=i686
-#source: nops-3.s
-#objdump: -drw
-#name: i386 -mtune=i686 nops 3
-
-.*: +file format .*
-
-Disassembly of section .text:
-
-0+ <nop>:
-[ 	]*[a-f0-9]+:	90                   	nop
-[ 	]*[a-f0-9]+:	90                   	nop
-[ 	]*[a-f0-9]+:	66 66 66 66 66 66 2e 0f 1f 84 00 00 00 00 00 	data32 data32 data32 data32 data32 nopw %cs:0x0\(%eax,%eax,1\)
-[ 	]*[a-f0-9]+:	66 66 66 66 66 66 2e 0f 1f 84 00 00 00 00 00 	data32 data32 data32 data32 data32 nopw %cs:0x0\(%eax,%eax,1\)
-[ 	]*[a-f0-9]+:	89 c3                	mov    %eax,%ebx
-[ 	]*[a-f0-9]+:	66 66 66 66 66 2e 0f 1f 84 00 00 00 00 00 	data32 data32 data32 data32 nopw %cs:0x0\(%eax,%eax,1\)
-#pass
--- /dev/null
+++ b/gas/testsuite/gas/i386/nops-4-core2.d
@@ -0,0 +1,210 @@
+#as: -march=core2
+#source: nops-4.s
+#objdump: -drw
+#name: i386 -march=core2 nops 4
+
+.*: +file format .*
+
+Disassembly of section .text:
+
+0+ <nop31>:
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	66 66 66 66 66 66 2e 0f 1f 84 00 00 00 00 00 	data32 data32 data32 data32 data32 nopw %cs:0x0\(%eax,%eax,1\)
+[ 	]*[a-f0-9]+:	66 66 66 66 66 66 2e 0f 1f 84 00 00 00 00 00 	data32 data32 data32 data32 data32 nopw %cs:0x0\(%eax,%eax,1\)
+
+0+20 <nop30>:
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	66 66 66 66 66 66 2e 0f 1f 84 00 00 00 00 00 	data32 data32 data32 data32 data32 nopw %cs:0x0\(%eax,%eax,1\)
+[ 	]*[a-f0-9]+:	66 66 66 66 66 66 2e 0f 1f 84 00 00 00 00 00 	data32 data32 data32 data32 data32 nopw %cs:0x0\(%eax,%eax,1\)
+
+0+40 <nop29>:
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	66 66 66 66 66 2e 0f 1f 84 00 00 00 00 00 	data32 data32 data32 data32 nopw %cs:0x0\(%eax,%eax,1\)
+[ 	]*[a-f0-9]+:	66 66 66 66 66 66 2e 0f 1f 84 00 00 00 00 00 	data32 data32 data32 data32 data32 nopw %cs:0x0\(%eax,%eax,1\)
+
+0+60 <nop28>:
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	66 66 66 66 2e 0f 1f 84 00 00 00 00 00 	data32 data32 data32 nopw %cs:0x0\(%eax,%eax,1\)
+[ 	]*[a-f0-9]+:	66 66 66 66 66 66 2e 0f 1f 84 00 00 00 00 00 	data32 data32 data32 data32 data32 nopw %cs:0x0\(%eax,%eax,1\)
+
+0+80 <nop27>:
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	66 66 66 2e 0f 1f 84 00 00 00 00 00 	data32 data32 nopw %cs:0x0\(%eax,%eax,1\)
+[ 	]*[a-f0-9]+:	66 66 66 66 66 66 2e 0f 1f 84 00 00 00 00 00 	data32 data32 data32 data32 data32 nopw %cs:0x0\(%eax,%eax,1\)
+
+0+a0 <nop26>:
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	66 66 2e 0f 1f 84 00 00 00 00 00 	data32 nopw %cs:0x0\(%eax,%eax,1\)
+[ 	]*[a-f0-9]+:	66 66 66 66 66 66 2e 0f 1f 84 00 00 00 00 00 	data32 data32 data32 data32 data32 nopw %cs:0x0\(%eax,%eax,1\)
+
+0+c0 <nop25>:
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	66 2e 0f 1f 84 00 00 00 00 00 	nopw   %cs:0x0\(%eax,%eax,1\)
+[ 	]*[a-f0-9]+:	66 66 66 66 66 66 2e 0f 1f 84 00 00 00 00 00 	data32 data32 data32 data32 data32 nopw %cs:0x0\(%eax,%eax,1\)
+
+0+e0 <nop24>:
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	66 0f 1f 84 00 00 00 00 00 	nopw   0x0\(%eax,%eax,1\)
+[ 	]*[a-f0-9]+:	66 66 66 66 66 66 2e 0f 1f 84 00 00 00 00 00 	data32 data32 data32 data32 data32 nopw %cs:0x0\(%eax,%eax,1\)
+
+0+100 <nop23>:
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	0f 1f 84 00 00 00 00 00 	nopl   0x0\(%eax,%eax,1\)
+[ 	]*[a-f0-9]+:	66 66 66 66 66 66 2e 0f 1f 84 00 00 00 00 00 	data32 data32 data32 data32 data32 nopw %cs:0x0\(%eax,%eax,1\)
+
+0+120 <nop22>:
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	0f 1f 80 00 00 00 00 	nopl   0x0\(%eax\)
+[ 	]*[a-f0-9]+:	66 66 66 66 66 66 2e 0f 1f 84 00 00 00 00 00 	data32 data32 data32 data32 data32 nopw %cs:0x0\(%eax,%eax,1\)
+
+0+140 <nop21>:
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	66 0f 1f 44 00 00    	nopw   0x0\(%eax,%eax,1\)
+[ 	]*[a-f0-9]+:	66 66 66 66 66 66 2e 0f 1f 84 00 00 00 00 00 	data32 data32 data32 data32 data32 nopw %cs:0x0\(%eax,%eax,1\)
+
+0+160 <nop20>:
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	0f 1f 44 00 00       	nopl   0x0\(%eax,%eax,1\)
+[ 	]*[a-f0-9]+:	66 66 66 66 66 66 2e 0f 1f 84 00 00 00 00 00 	data32 data32 data32 data32 data32 nopw %cs:0x0\(%eax,%eax,1\)
+
+0+180 <nop19>:
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	0f 1f 40 00          	nopl   0x0\(%eax\)
+[ 	]*[a-f0-9]+:	66 66 66 66 66 66 2e 0f 1f 84 00 00 00 00 00 	data32 data32 data32 data32 data32 nopw %cs:0x0\(%eax,%eax,1\)
+
+0+1a0 <nop18>:
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	0f 1f 00             	nopl   \(%eax\)
+[ 	]*[a-f0-9]+:	66 66 66 66 66 66 2e 0f 1f 84 00 00 00 00 00 	data32 data32 data32 data32 data32 nopw %cs:0x0\(%eax,%eax,1\)
+
+0+1c0 <nop17>:
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	66 90                	xchg   %ax,%ax
+[ 	]*[a-f0-9]+:	66 66 66 66 66 66 2e 0f 1f 84 00 00 00 00 00 	data32 data32 data32 data32 data32 nopw %cs:0x0\(%eax,%eax,1\)
+
+0+1e0 <nop16>:
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	66 66 66 66 66 66 2e 0f 1f 84 00 00 00 00 00 	data32 data32 data32 data32 data32 nopw %cs:0x0\(%eax,%eax,1\)
+#pass
--- a/gas/testsuite/gas/i386/nops-4-i686.d
+++ /dev/null
@@ -1,210 +0,0 @@
-#as: -mtune=i686
-#source: nops-4.s
-#objdump: -drw
-#name: i386 -mtune=i686 nops 4
-
-.*: +file format .*
-
-Disassembly of section .text:
-
-0+ <nop31>:
-[ 	]*[a-f0-9]+:	90                   	nop
-[ 	]*[a-f0-9]+:	90                   	nop
-[ 	]*[a-f0-9]+:	66 66 66 66 66 66 2e 0f 1f 84 00 00 00 00 00 	data32 data32 data32 data32 data32 nopw %cs:0x0\(%eax,%eax,1\)
-[ 	]*[a-f0-9]+:	66 66 66 66 66 66 2e 0f 1f 84 00 00 00 00 00 	data32 data32 data32 data32 data32 nopw %cs:0x0\(%eax,%eax,1\)
-
-0+20 <nop30>:
-[ 	]*[a-f0-9]+:	90                   	nop
-[ 	]*[a-f0-9]+:	90                   	nop
-[ 	]*[a-f0-9]+:	66 66 66 66 66 66 2e 0f 1f 84 00 00 00 00 00 	data32 data32 data32 data32 data32 nopw %cs:0x0\(%eax,%eax,1\)
-[ 	]*[a-f0-9]+:	66 66 66 66 66 66 2e 0f 1f 84 00 00 00 00 00 	data32 data32 data32 data32 data32 nopw %cs:0x0\(%eax,%eax,1\)
-
-0+40 <nop29>:
-[ 	]*[a-f0-9]+:	90                   	nop
-[ 	]*[a-f0-9]+:	90                   	nop
-[ 	]*[a-f0-9]+:	90                   	nop
-[ 	]*[a-f0-9]+:	66 66 66 66 66 2e 0f 1f 84 00 00 00 00 00 	data32 data32 data32 data32 nopw %cs:0x0\(%eax,%eax,1\)
-[ 	]*[a-f0-9]+:	66 66 66 66 66 66 2e 0f 1f 84 00 00 00 00 00 	data32 data32 data32 data32 data32 nopw %cs:0x0\(%eax,%eax,1\)
-
-0+60 <nop28>:
-[ 	]*[a-f0-9]+:	90                   	nop
-[ 	]*[a-f0-9]+:	90                   	nop
-[ 	]*[a-f0-9]+:	90                   	nop
-[ 	]*[a-f0-9]+:	90                   	nop
-[ 	]*[a-f0-9]+:	66 66 66 66 2e 0f 1f 84 00 00 00 00 00 	data32 data32 data32 nopw %cs:0x0\(%eax,%eax,1\)
-[ 	]*[a-f0-9]+:	66 66 66 66 66 66 2e 0f 1f 84 00 00 00 00 00 	data32 data32 data32 data32 data32 nopw %cs:0x0\(%eax,%eax,1\)
-
-0+80 <nop27>:
-[ 	]*[a-f0-9]+:	90                   	nop
-[ 	]*[a-f0-9]+:	90                   	nop
-[ 	]*[a-f0-9]+:	90                   	nop
-[ 	]*[a-f0-9]+:	90                   	nop
-[ 	]*[a-f0-9]+:	90                   	nop
-[ 	]*[a-f0-9]+:	66 66 66 2e 0f 1f 84 00 00 00 00 00 	data32 data32 nopw %cs:0x0\(%eax,%eax,1\)
-[ 	]*[a-f0-9]+:	66 66 66 66 66 66 2e 0f 1f 84 00 00 00 00 00 	data32 data32 data32 data32 data32 nopw %cs:0x0\(%eax,%eax,1\)
-
-0+a0 <nop26>:
-[ 	]*[a-f0-9]+:	90                   	nop
-[ 	]*[a-f0-9]+:	90                   	nop
-[ 	]*[a-f0-9]+:	90                   	nop
-[ 	]*[a-f0-9]+:	90                   	nop
-[ 	]*[a-f0-9]+:	90                   	nop
-[ 	]*[a-f0-9]+:	90                   	nop
-[ 	]*[a-f0-9]+:	66 66 2e 0f 1f 84 00 00 00 00 00 	data32 nopw %cs:0x0\(%eax,%eax,1\)
-[ 	]*[a-f0-9]+:	66 66 66 66 66 66 2e 0f 1f 84 00 00 00 00 00 	data32 data32 data32 data32 data32 nopw %cs:0x0\(%eax,%eax,1\)
-
-0+c0 <nop25>:
-[ 	]*[a-f0-9]+:	90                   	nop
-[ 	]*[a-f0-9]+:	90                   	nop
-[ 	]*[a-f0-9]+:	90                   	nop
-[ 	]*[a-f0-9]+:	90                   	nop
-[ 	]*[a-f0-9]+:	90                   	nop
-[ 	]*[a-f0-9]+:	90                   	nop
-[ 	]*[a-f0-9]+:	90                   	nop
-[ 	]*[a-f0-9]+:	66 2e 0f 1f 84 00 00 00 00 00 	nopw   %cs:0x0\(%eax,%eax,1\)
-[ 	]*[a-f0-9]+:	66 66 66 66 66 66 2e 0f 1f 84 00 00 00 00 00 	data32 data32 data32 data32 data32 nopw %cs:0x0\(%eax,%eax,1\)
-
-0+e0 <nop24>:
-[ 	]*[a-f0-9]+:	90                   	nop
-[ 	]*[a-f0-9]+:	90                   	nop
-[ 	]*[a-f0-9]+:	90                   	nop
-[ 	]*[a-f0-9]+:	90                   	nop
-[ 	]*[a-f0-9]+:	90                   	nop
-[ 	]*[a-f0-9]+:	90                   	nop
-[ 	]*[a-f0-9]+:	90                   	nop
-[ 	]*[a-f0-9]+:	90                   	nop
-[ 	]*[a-f0-9]+:	66 0f 1f 84 00 00 00 00 00 	nopw   0x0\(%eax,%eax,1\)
-[ 	]*[a-f0-9]+:	66 66 66 66 66 66 2e 0f 1f 84 00 00 00 00 00 	data32 data32 data32 data32 data32 nopw %cs:0x0\(%eax,%eax,1\)
-
-0+100 <nop23>:
-[ 	]*[a-f0-9]+:	90                   	nop
-[ 	]*[a-f0-9]+:	90                   	nop
-[ 	]*[a-f0-9]+:	90                   	nop
-[ 	]*[a-f0-9]+:	90                   	nop
-[ 	]*[a-f0-9]+:	90                   	nop
-[ 	]*[a-f0-9]+:	90                   	nop
-[ 	]*[a-f0-9]+:	90                   	nop
-[ 	]*[a-f0-9]+:	90                   	nop
-[ 	]*[a-f0-9]+:	90                   	nop
-[ 	]*[a-f0-9]+:	0f 1f 84 00 00 00 00 00 	nopl   0x0\(%eax,%eax,1\)
-[ 	]*[a-f0-9]+:	66 66 66 66 66 66 2e 0f 1f 84 00 00 00 00 00 	data32 data32 data32 data32 data32 nopw %cs:0x0\(%eax,%eax,1\)
-
-0+120 <nop22>:
-[ 	]*[a-f0-9]+:	90                   	nop
-[ 	]*[a-f0-9]+:	90                   	nop
-[ 	]*[a-f0-9]+:	90                   	nop
-[ 	]*[a-f0-9]+:	90                   	nop
-[ 	]*[a-f0-9]+:	90                   	nop
-[ 	]*[a-f0-9]+:	90                   	nop
-[ 	]*[a-f0-9]+:	90                   	nop
-[ 	]*[a-f0-9]+:	90                   	nop
-[ 	]*[a-f0-9]+:	90                   	nop
-[ 	]*[a-f0-9]+:	90                   	nop
-[ 	]*[a-f0-9]+:	0f 1f 80 00 00 00 00 	nopl   0x0\(%eax\)
-[ 	]*[a-f0-9]+:	66 66 66 66 66 66 2e 0f 1f 84 00 00 00 00 00 	data32 data32 data32 data32 data32 nopw %cs:0x0\(%eax,%eax,1\)
-
-0+140 <nop21>:
-[ 	]*[a-f0-9]+:	90                   	nop
-[ 	]*[a-f0-9]+:	90                   	nop
-[ 	]*[a-f0-9]+:	90                   	nop
-[ 	]*[a-f0-9]+:	90                   	nop
-[ 	]*[a-f0-9]+:	90                   	nop
-[ 	]*[a-f0-9]+:	90                   	nop
-[ 	]*[a-f0-9]+:	90                   	nop
-[ 	]*[a-f0-9]+:	90                   	nop
-[ 	]*[a-f0-9]+:	90                   	nop
-[ 	]*[a-f0-9]+:	90                   	nop
-[ 	]*[a-f0-9]+:	90                   	nop
-[ 	]*[a-f0-9]+:	66 0f 1f 44 00 00    	nopw   0x0\(%eax,%eax,1\)
-[ 	]*[a-f0-9]+:	66 66 66 66 66 66 2e 0f 1f 84 00 00 00 00 00 	data32 data32 data32 data32 data32 nopw %cs:0x0\(%eax,%eax,1\)
-
-0+160 <nop20>:
-[ 	]*[a-f0-9]+:	90                   	nop
-[ 	]*[a-f0-9]+:	90                   	nop
-[ 	]*[a-f0-9]+:	90                   	nop
-[ 	]*[a-f0-9]+:	90                   	nop
-[ 	]*[a-f0-9]+:	90                   	nop
-[ 	]*[a-f0-9]+:	90                   	nop
-[ 	]*[a-f0-9]+:	90                   	nop
-[ 	]*[a-f0-9]+:	90                   	nop
-[ 	]*[a-f0-9]+:	90                   	nop
-[ 	]*[a-f0-9]+:	90                   	nop
-[ 	]*[a-f0-9]+:	90                   	nop
-[ 	]*[a-f0-9]+:	90                   	nop
-[ 	]*[a-f0-9]+:	0f 1f 44 00 00       	nopl   0x0\(%eax,%eax,1\)
-[ 	]*[a-f0-9]+:	66 66 66 66 66 66 2e 0f 1f 84 00 00 00 00 00 	data32 data32 data32 data32 data32 nopw %cs:0x0\(%eax,%eax,1\)
-
-0+180 <nop19>:
-[ 	]*[a-f0-9]+:	90                   	nop
-[ 	]*[a-f0-9]+:	90                   	nop
-[ 	]*[a-f0-9]+:	90                   	nop
-[ 	]*[a-f0-9]+:	90                   	nop
-[ 	]*[a-f0-9]+:	90                   	nop
-[ 	]*[a-f0-9]+:	90                   	nop
-[ 	]*[a-f0-9]+:	90                   	nop
-[ 	]*[a-f0-9]+:	90                   	nop
-[ 	]*[a-f0-9]+:	90                   	nop
-[ 	]*[a-f0-9]+:	90                   	nop
-[ 	]*[a-f0-9]+:	90                   	nop
-[ 	]*[a-f0-9]+:	90                   	nop
-[ 	]*[a-f0-9]+:	90                   	nop
-[ 	]*[a-f0-9]+:	0f 1f 40 00          	nopl   0x0\(%eax\)
-[ 	]*[a-f0-9]+:	66 66 66 66 66 66 2e 0f 1f 84 00 00 00 00 00 	data32 data32 data32 data32 data32 nopw %cs:0x0\(%eax,%eax,1\)
-
-0+1a0 <nop18>:
-[ 	]*[a-f0-9]+:	90                   	nop
-[ 	]*[a-f0-9]+:	90                   	nop
-[ 	]*[a-f0-9]+:	90                   	nop
-[ 	]*[a-f0-9]+:	90                   	nop
-[ 	]*[a-f0-9]+:	90                   	nop
-[ 	]*[a-f0-9]+:	90                   	nop
-[ 	]*[a-f0-9]+:	90                   	nop
-[ 	]*[a-f0-9]+:	90                   	nop
-[ 	]*[a-f0-9]+:	90                   	nop
-[ 	]*[a-f0-9]+:	90                   	nop
-[ 	]*[a-f0-9]+:	90                   	nop
-[ 	]*[a-f0-9]+:	90                   	nop
-[ 	]*[a-f0-9]+:	90                   	nop
-[ 	]*[a-f0-9]+:	90                   	nop
-[ 	]*[a-f0-9]+:	0f 1f 00             	nopl   \(%eax\)
-[ 	]*[a-f0-9]+:	66 66 66 66 66 66 2e 0f 1f 84 00 00 00 00 00 	data32 data32 data32 data32 data32 nopw %cs:0x0\(%eax,%eax,1\)
-
-0+1c0 <nop17>:
-[ 	]*[a-f0-9]+:	90                   	nop
-[ 	]*[a-f0-9]+:	90                   	nop
-[ 	]*[a-f0-9]+:	90                   	nop
-[ 	]*[a-f0-9]+:	90                   	nop
-[ 	]*[a-f0-9]+:	90                   	nop
-[ 	]*[a-f0-9]+:	90                   	nop
-[ 	]*[a-f0-9]+:	90                   	nop
-[ 	]*[a-f0-9]+:	90                   	nop
-[ 	]*[a-f0-9]+:	90                   	nop
-[ 	]*[a-f0-9]+:	90                   	nop
-[ 	]*[a-f0-9]+:	90                   	nop
-[ 	]*[a-f0-9]+:	90                   	nop
-[ 	]*[a-f0-9]+:	90                   	nop
-[ 	]*[a-f0-9]+:	90                   	nop
-[ 	]*[a-f0-9]+:	90                   	nop
-[ 	]*[a-f0-9]+:	66 90                	xchg   %ax,%ax
-[ 	]*[a-f0-9]+:	66 66 66 66 66 66 2e 0f 1f 84 00 00 00 00 00 	data32 data32 data32 data32 data32 nopw %cs:0x0\(%eax,%eax,1\)
-
-0+1e0 <nop16>:
-[ 	]*[a-f0-9]+:	90                   	nop
-[ 	]*[a-f0-9]+:	90                   	nop
-[ 	]*[a-f0-9]+:	90                   	nop
-[ 	]*[a-f0-9]+:	90                   	nop
-[ 	]*[a-f0-9]+:	90                   	nop
-[ 	]*[a-f0-9]+:	90                   	nop
-[ 	]*[a-f0-9]+:	90                   	nop
-[ 	]*[a-f0-9]+:	90                   	nop
-[ 	]*[a-f0-9]+:	90                   	nop
-[ 	]*[a-f0-9]+:	90                   	nop
-[ 	]*[a-f0-9]+:	90                   	nop
-[ 	]*[a-f0-9]+:	90                   	nop
-[ 	]*[a-f0-9]+:	90                   	nop
-[ 	]*[a-f0-9]+:	90                   	nop
-[ 	]*[a-f0-9]+:	90                   	nop
-[ 	]*[a-f0-9]+:	90                   	nop
-[ 	]*[a-f0-9]+:	90                   	nop
-[ 	]*[a-f0-9]+:	66 66 66 66 66 66 2e 0f 1f 84 00 00 00 00 00 	data32 data32 data32 data32 data32 nopw %cs:0x0\(%eax,%eax,1\)
-#pass

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [rfc] nopl should not be output on -mtune=i686
  2011-02-08 17:11 [rfc] nopl should not be output on -mtune=i686 Jan Kratochvil
@ 2011-02-08 17:23 ` H.J. Lu
  2011-02-08 19:01   ` Jan Kratochvil
  2011-02-08 18:20 ` H.J. Lu
  1 sibling, 1 reply; 10+ messages in thread
From: H.J. Lu @ 2011-02-08 17:23 UTC (permalink / raw)
  To: Jan Kratochvil; +Cc: binutils, Quentin Neill

On Tue, Feb 8, 2011 at 9:10 AM, Jan Kratochvil
<jan.kratochvil@redhat.com> wrote:
> Hi,
>
> I do not fully understand the intention when to use / not use nopl.
>
> https://bugzilla.redhat.com/show_bug.cgi?id=579838#c32
> Nick Lowe wrote:
> # The NOPL instruction is not supported by all i686 processors, the coded
> # assumption was that they all did. This has been changed by the recent AMD
> # patches linked to by Quentin Neill so that it is not assumed and it's
> # specified as an extension where it is supported.
>
> Current binutils HEAD:
> -march | -mtune  | nopl used?  | after the attached patch: nopl used?
>  -    |   -     |    no       | no
>  i686  | -/i686  |    no       | no
>  -    |   i686  |   yes = BUG | no
>  core2 | -/core2 |   yes       | yes
>  -    |   core2 |   yes = BUG | no
>
> => Currently suppressing -march now produces more advanced code output, this
>   does not seem correct to me.

By default, x86 assembler assumes that the target processor accepts
any instructions.  You can restrict ISA sets by -march and .arch directive.
-mtune= doesn't change ISA. It seems that we want a way to restrict ISA
sets for NOP paddings without restricting ISA sets elsewhere?

> After the patch code built with only `-mtune=i686' then remains compatible
> with AMD Geode LX.
>
> The flag `+nop' (such as `-march=i686+nop') does not work for me as expected
> with HEAD and neither works with the patched code.

Please file a bug report.

Thanks.


H.J.
---

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [rfc] nopl should not be output on -mtune=i686
  2011-02-08 17:11 [rfc] nopl should not be output on -mtune=i686 Jan Kratochvil
  2011-02-08 17:23 ` H.J. Lu
@ 2011-02-08 18:20 ` H.J. Lu
  1 sibling, 0 replies; 10+ messages in thread
From: H.J. Lu @ 2011-02-08 18:20 UTC (permalink / raw)
  To: Jan Kratochvil; +Cc: binutils, Quentin Neill

[-- Attachment #1: Type: text/plain, Size: 642 bytes --]

On Tue, Feb 8, 2011 at 9:10 AM, Jan Kratochvil
<jan.kratochvil@redhat.com> wrote:
>
> The flag `+nop' (such as `-march=i686+nop') does not work for me as expected
> with HEAD and neither works with the patched code.
>
>

That is what I checked in.

-- 
H.J.
---
gas/

2011-02-08  H.J. Lu  <hongjiu.lu@intel.com>

	* config/tc-i386.c (set_cpu_arch): Also update cpu_arch_isa_flags
	for ISA extensions.
	(md_parse_option): Likewise.

gas/testsuite/

2011-02-08  H.J. Lu  <hongjiu.lu@intel.com>

	* gas/i386/i386.exp: Run nops-4a-i686 and nops-6.

	* gas/i386/nops-4a-i686.d: New.
	* gas/i386/nops-6.d: Likewise.
	* gas/i386/nops-6.s: Likewise.

[-- Attachment #2: gas-nop-1.patch --]
[-- Type: text/plain, Size: 12764 bytes --]

diff --git a/gas/ChangeLog b/gas/ChangeLog
index bf75bbf..636e9e8 100644
--- a/gas/ChangeLog
+++ b/gas/ChangeLog
@@ -1,3 +1,9 @@
+2011-02-08  H.J. Lu  <hongjiu.lu@intel.com>
+
+	* config/tc-i386.c (set_cpu_arch): Also update cpu_arch_isa_flags
+	for ISA extensions.
+	(md_parse_option): Likewise.
+
 2011-02-04  Bernd Schmidt  <bernds@codesourcery.com>
 
 	* doc/as.texinfo (Target TIC6X options): Don't mention "-matomic".
diff --git a/gas/config/tc-i386.c b/gas/config/tc-i386.c
index 0028f17..777d7cf 100644
--- a/gas/config/tc-i386.c
+++ b/gas/config/tc-i386.c
@@ -2176,6 +2176,7 @@ set_cpu_arch (int dummy ATTRIBUTE_UNUSED)
 		  else
 		    cpu_sub_arch_name = xstrdup (cpu_arch[j].name);
 		  cpu_arch_flags = flags;
+		  cpu_arch_isa_flags = flags;
 		}
 	      *input_line_pointer = e;
 	      demand_empty_rest_of_line ();
@@ -8343,6 +8344,7 @@ md_parse_option (int c, char *arg)
 		      else
 			cpu_sub_arch_name = xstrdup (cpu_arch[j].name);
 		      cpu_arch_flags = flags;
+		      cpu_arch_isa_flags = flags;
 		    }
 		  break;
 		}
diff --git a/gas/testsuite/ChangeLog b/gas/testsuite/ChangeLog
index 166d8db..16efa6d 100644
--- a/gas/testsuite/ChangeLog
+++ b/gas/testsuite/ChangeLog
@@ -1,3 +1,11 @@
+2011-02-08  H.J. Lu  <hongjiu.lu@intel.com>
+
+	* gas/i386/i386.exp: Run nops-4a-i686 and nops-6.
+
+	* gas/i386/nops-4a-i686.d: New.
+	* gas/i386/nops-6.d: Likewise.
+	* gas/i386/nops-6.s: Likewise.
+
 2011-02-07  Vincent Riviere  <vincent.riviere@freesbee.fr>
 
 	PR gas/3041
diff --git a/gas/testsuite/gas/i386/i386.exp b/gas/testsuite/gas/i386/i386.exp
index a0abf28..306da65 100644
--- a/gas/testsuite/gas/i386/i386.exp
+++ b/gas/testsuite/gas/i386/i386.exp
@@ -91,8 +91,10 @@ if [expr ([istarget "i*86-*-*"] ||  [istarget "x86_64-*-*"]) && [gas_32_check]]
     run_dump_test "nops-4"
     run_dump_test "nops-4-i386"
     run_dump_test "nops-4-i686"
+    run_dump_test "nops-4a-i686"
     run_dump_test "nops-5"
     run_dump_test "nops-5-i686"
+    run_dump_test "nops-6"
     run_dump_test "addr16"
     run_dump_test "addr32"
     run_dump_test "sse4_1"
--- /dev/null	2011-02-07 14:55:09.229000001 -0800
+++ binutils/gas/testsuite/gas/i386/nops-4a-i686.d	2011-02-08 09:45:20.897474145 -0800
@@ -0,0 +1,210 @@
+#as: -march=i686+nop
+#source: nops-4.s
+#objdump: -drw
+#name: i386 -march=i686+nop nops 4a
+
+.*: +file format .*
+
+Disassembly of section .text:
+
+0+ <nop31>:
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	66 66 66 66 66 66 2e 0f 1f 84 00 00 00 00 00 	data32 data32 data32 data32 data32 nopw %cs:0x0\(%eax,%eax,1\)
+[ 	]*[a-f0-9]+:	66 66 66 66 66 66 2e 0f 1f 84 00 00 00 00 00 	data32 data32 data32 data32 data32 nopw %cs:0x0\(%eax,%eax,1\)
+
+0+20 <nop30>:
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	66 66 66 66 66 66 2e 0f 1f 84 00 00 00 00 00 	data32 data32 data32 data32 data32 nopw %cs:0x0\(%eax,%eax,1\)
+[ 	]*[a-f0-9]+:	66 66 66 66 66 66 2e 0f 1f 84 00 00 00 00 00 	data32 data32 data32 data32 data32 nopw %cs:0x0\(%eax,%eax,1\)
+
+0+40 <nop29>:
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	66 66 66 66 66 2e 0f 1f 84 00 00 00 00 00 	data32 data32 data32 data32 nopw %cs:0x0\(%eax,%eax,1\)
+[ 	]*[a-f0-9]+:	66 66 66 66 66 66 2e 0f 1f 84 00 00 00 00 00 	data32 data32 data32 data32 data32 nopw %cs:0x0\(%eax,%eax,1\)
+
+0+60 <nop28>:
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	66 66 66 66 2e 0f 1f 84 00 00 00 00 00 	data32 data32 data32 nopw %cs:0x0\(%eax,%eax,1\)
+[ 	]*[a-f0-9]+:	66 66 66 66 66 66 2e 0f 1f 84 00 00 00 00 00 	data32 data32 data32 data32 data32 nopw %cs:0x0\(%eax,%eax,1\)
+
+0+80 <nop27>:
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	66 66 66 2e 0f 1f 84 00 00 00 00 00 	data32 data32 nopw %cs:0x0\(%eax,%eax,1\)
+[ 	]*[a-f0-9]+:	66 66 66 66 66 66 2e 0f 1f 84 00 00 00 00 00 	data32 data32 data32 data32 data32 nopw %cs:0x0\(%eax,%eax,1\)
+
+0+a0 <nop26>:
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	66 66 2e 0f 1f 84 00 00 00 00 00 	data32 nopw %cs:0x0\(%eax,%eax,1\)
+[ 	]*[a-f0-9]+:	66 66 66 66 66 66 2e 0f 1f 84 00 00 00 00 00 	data32 data32 data32 data32 data32 nopw %cs:0x0\(%eax,%eax,1\)
+
+0+c0 <nop25>:
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	66 2e 0f 1f 84 00 00 00 00 00 	nopw   %cs:0x0\(%eax,%eax,1\)
+[ 	]*[a-f0-9]+:	66 66 66 66 66 66 2e 0f 1f 84 00 00 00 00 00 	data32 data32 data32 data32 data32 nopw %cs:0x0\(%eax,%eax,1\)
+
+0+e0 <nop24>:
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	66 0f 1f 84 00 00 00 00 00 	nopw   0x0\(%eax,%eax,1\)
+[ 	]*[a-f0-9]+:	66 66 66 66 66 66 2e 0f 1f 84 00 00 00 00 00 	data32 data32 data32 data32 data32 nopw %cs:0x0\(%eax,%eax,1\)
+
+0+100 <nop23>:
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	0f 1f 84 00 00 00 00 00 	nopl   0x0\(%eax,%eax,1\)
+[ 	]*[a-f0-9]+:	66 66 66 66 66 66 2e 0f 1f 84 00 00 00 00 00 	data32 data32 data32 data32 data32 nopw %cs:0x0\(%eax,%eax,1\)
+
+0+120 <nop22>:
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	0f 1f 80 00 00 00 00 	nopl   0x0\(%eax\)
+[ 	]*[a-f0-9]+:	66 66 66 66 66 66 2e 0f 1f 84 00 00 00 00 00 	data32 data32 data32 data32 data32 nopw %cs:0x0\(%eax,%eax,1\)
+
+0+140 <nop21>:
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	66 0f 1f 44 00 00    	nopw   0x0\(%eax,%eax,1\)
+[ 	]*[a-f0-9]+:	66 66 66 66 66 66 2e 0f 1f 84 00 00 00 00 00 	data32 data32 data32 data32 data32 nopw %cs:0x0\(%eax,%eax,1\)
+
+0+160 <nop20>:
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	0f 1f 44 00 00       	nopl   0x0\(%eax,%eax,1\)
+[ 	]*[a-f0-9]+:	66 66 66 66 66 66 2e 0f 1f 84 00 00 00 00 00 	data32 data32 data32 data32 data32 nopw %cs:0x0\(%eax,%eax,1\)
+
+0+180 <nop19>:
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	0f 1f 40 00          	nopl   0x0\(%eax\)
+[ 	]*[a-f0-9]+:	66 66 66 66 66 66 2e 0f 1f 84 00 00 00 00 00 	data32 data32 data32 data32 data32 nopw %cs:0x0\(%eax,%eax,1\)
+
+0+1a0 <nop18>:
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	0f 1f 00             	nopl   \(%eax\)
+[ 	]*[a-f0-9]+:	66 66 66 66 66 66 2e 0f 1f 84 00 00 00 00 00 	data32 data32 data32 data32 data32 nopw %cs:0x0\(%eax,%eax,1\)
+
+0+1c0 <nop17>:
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	66 90                	xchg   %ax,%ax
+[ 	]*[a-f0-9]+:	66 66 66 66 66 66 2e 0f 1f 84 00 00 00 00 00 	data32 data32 data32 data32 data32 nopw %cs:0x0\(%eax,%eax,1\)
+
+0+1e0 <nop16>:
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	66 66 66 66 66 66 2e 0f 1f 84 00 00 00 00 00 	data32 data32 data32 data32 data32 nopw %cs:0x0\(%eax,%eax,1\)
+#pass
--- /dev/null	2011-02-07 14:55:09.229000001 -0800
+++ binutils/gas/testsuite/gas/i386/nops-6.d	2011-02-08 09:57:40.598154540 -0800
@@ -0,0 +1,17 @@
+#objdump: -drw
+#name: i386 nops 6
+
+.*: +file format .*
+
+Disassembly of section .text:
+
+0+ <i386>:
+[ 	]*[a-f0-9]+:	0f be f0             	movsbl %al,%esi
+[ 	]*[a-f0-9]+:	8d b6 00 00 00 00    	lea    0x0\(%esi\),%esi
+[ 	]*[a-f0-9]+:	8d bc 27 00 00 00 00 	lea    0x0\(%edi,%eiz,1\),%edi
+
+0+10 <i386_nop>:
+[ 	]*[a-f0-9]+:	0f be f0             	movsbl %al,%esi
+[ 	]*[a-f0-9]+:	66 0f 1f 44 00 00    	nopw   0x0\(%eax,%eax,1\)
+[ 	]*[a-f0-9]+:	0f 1f 80 00 00 00 00 	nopl   0x0\(%eax\)
+#pass
--- /dev/null	2011-02-07 14:55:09.229000001 -0800
+++ binutils/gas/testsuite/gas/i386/nops-6.s	2011-02-08 09:53:51.199267429 -0800
@@ -0,0 +1,10 @@
+	.text
+	.arch i386
+i386:
+	movsbl %al,%esi
+	.p2align 4
+
+	.arch .nop
+i386_nop:
+	movsbl %al,%esi
+	.p2align 4

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [rfc] nopl should not be output on -mtune=i686
  2011-02-08 17:23 ` H.J. Lu
@ 2011-02-08 19:01   ` Jan Kratochvil
  2011-02-08 19:10     ` H.J. Lu
  2011-02-08 20:00     ` Jakub Jelinek
  0 siblings, 2 replies; 10+ messages in thread
From: Jan Kratochvil @ 2011-02-08 19:01 UTC (permalink / raw)
  To: H.J. Lu; +Cc: binutils, Quentin Neill, Andreas Schwab

On Tue, 08 Feb 2011 18:23:35 +0100, H.J. Lu wrote:
> On Tue, Feb 8, 2011 at 9:10 AM, Jan Kratochvil
> <jan.kratochvil@redhat.com> wrote:
> > Current binutils HEAD:
> > -march | -mtune  | nopl used?  | after the attached patch: nopl used?
> >  -    |   -     |    no       | no
> >  i686  | -/i686  |    no       | no
> >  -    |   i686  |   yes = BUG | no
> >  core2 | -/core2 |   yes       | yes
> >  -    |   core2 |   yes = BUG | no
> >
> > => Currently suppressing -march now produces more advanced code output, this
> >   does not seem correct to me.
> 
> By default, x86 assembler assumes that the target processor accepts
> any instructions.  You can restrict ISA sets by -march and .arch directive.

Aha, in such case the system build should use some specific -march anyway and
not just to disable `nopl'.

Andreas Schwab has reopened now this one, it should be NOTABUG:
http://sourceware.org/bugzilla/show_bug.cgi?id=6957


> > The flag `+nop' (such as `-march=i686+nop') does not work for me as expected
> > with HEAD and neither works with the patched code.
> 
> Please file a bug report.

I see your fix, thanks.


Thanks,
Jan

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [rfc] nopl should not be output on -mtune=i686
  2011-02-08 19:01   ` Jan Kratochvil
@ 2011-02-08 19:10     ` H.J. Lu
  2011-02-08 20:00     ` Jakub Jelinek
  1 sibling, 0 replies; 10+ messages in thread
From: H.J. Lu @ 2011-02-08 19:10 UTC (permalink / raw)
  To: Jan Kratochvil; +Cc: binutils, Quentin Neill, Andreas Schwab

On Tue, Feb 8, 2011 at 11:01 AM, Jan Kratochvil
<jan.kratochvil@redhat.com> wrote:
> On Tue, 08 Feb 2011 18:23:35 +0100, H.J. Lu wrote:
>> On Tue, Feb 8, 2011 at 9:10 AM, Jan Kratochvil
>> <jan.kratochvil@redhat.com> wrote:
>> > Current binutils HEAD:
>> > -march | -mtune  | nopl used?  | after the attached patch: nopl used?
>> >  -    |   -     |    no       | no
>> >  i686  | -/i686  |    no       | no
>> >  -    |   i686  |   yes = BUG | no
>> >  core2 | -/core2 |   yes       | yes
>> >  -    |   core2 |   yes = BUG | no
>> >
>> > => Currently suppressing -march now produces more advanced code output, this
>> >   does not seem correct to me.
>>
>> By default, x86 assembler assumes that the target processor accepts
>> any instructions.  You can restrict ISA sets by -march and .arch directive.
>
> Aha, in such case the system build should use some specific -march anyway and
> not just to disable `nopl'.
>
> Andreas Schwab has reopened now this one, it should be NOTABUG:
> http://sourceware.org/bugzilla/show_bug.cgi?id=6957
>

I will see what I can do.


-- 
H.J.

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [rfc] nopl should not be output on -mtune=i686
  2011-02-08 19:01   ` Jan Kratochvil
  2011-02-08 19:10     ` H.J. Lu
@ 2011-02-08 20:00     ` Jakub Jelinek
  2011-02-08 20:23       ` H.J. Lu
  2011-02-09  6:43       ` Eirik Byrkjeflot Anonsen
  1 sibling, 2 replies; 10+ messages in thread
From: Jakub Jelinek @ 2011-02-08 20:00 UTC (permalink / raw)
  To: Jan Kratochvil; +Cc: H.J. Lu, binutils, Quentin Neill, Andreas Schwab

On Tue, Feb 08, 2011 at 08:01:17PM +0100, Jan Kratochvil wrote:
> On Tue, 08 Feb 2011 18:23:35 +0100, H.J. Lu wrote:
> > On Tue, Feb 8, 2011 at 9:10 AM, Jan Kratochvil
> > <jan.kratochvil@redhat.com> wrote:
> > > Current binutils HEAD:
> > > -march | -mtune  | nopl used?  | after the attached patch: nopl used?
> > >  -    |   -     |    no       | no
> > >  i686  | -/i686  |    no       | no
> > >  -    |   i686  |   yes = BUG | no
> > >  core2 | -/core2 |   yes       | yes
> > >  -    |   core2 |   yes = BUG | no
> > >
> > > => Currently suppressing -march now produces more advanced code output, this
> > >   does not seem correct to me.
> > 
> > By default, x86 assembler assumes that the target processor accepts
> > any instructions.  You can restrict ISA sets by -march and .arch directive.
> 
> Aha, in such case the system build should use some specific -march anyway and
> not just to disable `nopl'.

Not very easily, because lots of packages will contain SSE/SSE2/.../AVX etc.
insns in inline asm etc. and use it conditionally based on used CPU (or with target
attribute switching among functions).  So IMHO requiring that -march= is passed to
gas whenever -mtune= is used doesn't look like a good idea.

	Jakub

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [rfc] nopl should not be output on -mtune=i686
  2011-02-08 20:00     ` Jakub Jelinek
@ 2011-02-08 20:23       ` H.J. Lu
  2011-02-09  6:43       ` Eirik Byrkjeflot Anonsen
  1 sibling, 0 replies; 10+ messages in thread
From: H.J. Lu @ 2011-02-08 20:23 UTC (permalink / raw)
  To: Jakub Jelinek; +Cc: Jan Kratochvil, binutils, Quentin Neill, Andreas Schwab

[-- Attachment #1: Type: text/plain, Size: 1768 bytes --]

On Tue, Feb 8, 2011 at 12:00 PM, Jakub Jelinek <jakub@redhat.com> wrote:
> On Tue, Feb 08, 2011 at 08:01:17PM +0100, Jan Kratochvil wrote:
>> On Tue, 08 Feb 2011 18:23:35 +0100, H.J. Lu wrote:
>> > On Tue, Feb 8, 2011 at 9:10 AM, Jan Kratochvil
>> > <jan.kratochvil@redhat.com> wrote:
>> > > Current binutils HEAD:
>> > > -march | -mtune  | nopl used?  | after the attached patch: nopl used?
>> > >  -    |   -     |    no       | no
>> > >  i686  | -/i686  |    no       | no
>> > >  -    |   i686  |   yes = BUG | no
>> > >  core2 | -/core2 |   yes       | yes
>> > >  -    |   core2 |   yes = BUG | no
>> > >
>> > > => Currently suppressing -march now produces more advanced code output, this
>> > >   does not seem correct to me.
>> >
>> > By default, x86 assembler assumes that the target processor accepts
>> > any instructions.  You can restrict ISA sets by -march and .arch directive.
>>
>> Aha, in such case the system build should use some specific -march anyway and
>> not just to disable `nopl'.
>
> Not very easily, because lots of packages will contain SSE/SSE2/.../AVX etc.
> insns in inline asm etc. and use it conditionally based on used CPU (or with target
> attribute switching among functions).  So IMHO requiring that -march= is passed to
> gas whenever -mtune= is used doesn't look like a good idea.
>

I checked in this patch.  Please verify it.

Thanks.


-- 
H.J.
--
gas/

2011-02-08  H.J. Lu  <hongjiu.lu@intel.com>

	PR gas/6957
	* config/tc-i386.c (i386_align_code): Use f32_patt when tuning
	for i686.

gas/testsuite/

2011-02-08  H.J. Lu  <hongjiu.lu@intel.com>

	PR gas/6957
	* gas/i386/nops-1-i686.d: Updated.
	* gas/i386/nops-3-i686.d: Likewise.
	* gas/i386/nops-4-i686.d: Likewise.

[-- Attachment #2: gas-nop-2.patch --]
[-- Type: text/plain, Size: 32226 bytes --]

diff --git a/gas/ChangeLog b/gas/ChangeLog
index 636e9e8..6723cd9 100644
--- a/gas/ChangeLog
+++ b/gas/ChangeLog
@@ -1,5 +1,11 @@
 2011-02-08  H.J. Lu  <hongjiu.lu@intel.com>
 
+	PR gas/6957
+	* config/tc-i386.c (i386_align_code): Use f32_patt when tuning
+	for i686.
+
+2011-02-08  H.J. Lu  <hongjiu.lu@intel.com>
+
 	* config/tc-i386.c (set_cpu_arch): Also update cpu_arch_isa_flags
 	for ISA extensions.
 	(md_parse_option): Likewise.
diff --git a/gas/config/tc-i386.c b/gas/config/tc-i386.c
index 777d7cf..c4c34a1 100644
--- a/gas/config/tc-i386.c
+++ b/gas/config/tc-i386.c
@@ -1060,7 +1060,6 @@ i386_align_code (fragS *fragP, int count)
 	      else
 		patt = f32_patt;
 	      break;
-	    case PROCESSOR_PENTIUMPRO:
 	    case PROCESSOR_PENTIUM4:
 	    case PROCESSOR_NOCONA:
 	    case PROCESSOR_CORE:
@@ -1080,6 +1079,7 @@ i386_align_code (fragS *fragP, int count)
 	    case PROCESSOR_I386:
 	    case PROCESSOR_I486:
 	    case PROCESSOR_PENTIUM:
+	    case PROCESSOR_PENTIUMPRO:
 	    case PROCESSOR_GENERIC32:
 	      patt = f32_patt;
 	      break;
diff --git a/gas/testsuite/ChangeLog b/gas/testsuite/ChangeLog
index 16efa6d..ee1c9ef 100644
--- a/gas/testsuite/ChangeLog
+++ b/gas/testsuite/ChangeLog
@@ -1,5 +1,12 @@
 2011-02-08  H.J. Lu  <hongjiu.lu@intel.com>
 
+	PR gas/6957
+	* gas/i386/nops-1-i686.d: Updated.
+	* gas/i386/nops-3-i686.d: Likewise.
+	* gas/i386/nops-4-i686.d: Likewise.
+
+2011-02-08  H.J. Lu  <hongjiu.lu@intel.com>
+
 	* gas/i386/i386.exp: Run nops-4a-i686 and nops-6.
 
 	* gas/i386/nops-4a-i686.d: New.
diff --git a/gas/testsuite/gas/i386/nops-1-i686.d b/gas/testsuite/gas/i386/nops-1-i686.d
index 7752ee2..137d5c2 100644
--- a/gas/testsuite/gas/i386/nops-1-i686.d
+++ b/gas/testsuite/gas/i386/nops-1-i686.d
@@ -10,25 +10,41 @@ Disassembly of section .text:
 
 0+ <nop15>:
 [ 	]*[a-f0-9]+:	90                   	nop
-[ 	]*[a-f0-9]+:	66 66 66 66 66 66 2e 0f 1f 84 00 00 00 00 00 	data32 data32 data32 data32 data32 nopw %cs:0x0\(%eax,%eax,1\)
+[ 	]*[a-f0-9]+:	eb 0d                	jmp    10 <nop14>
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
 
 0+10 <nop14>:
 [ 	]*[a-f0-9]+:	90                   	nop
 [ 	]*[a-f0-9]+:	90                   	nop
-[ 	]*[a-f0-9]+:	66 66 66 66 66 2e 0f 1f 84 00 00 00 00 00 	data32 data32 data32 data32 nopw %cs:0x0\(%eax,%eax,1\)
+[ 	]*[a-f0-9]+:	8d b4 26 00 00 00 00 	lea    0x0\(%esi,%eiz,1\),%esi
+[ 	]*[a-f0-9]+:	8d bc 27 00 00 00 00 	lea    0x0\(%edi,%eiz,1\),%edi
 
 0+20 <nop13>:
 [ 	]*[a-f0-9]+:	90                   	nop
 [ 	]*[a-f0-9]+:	90                   	nop
 [ 	]*[a-f0-9]+:	90                   	nop
-[ 	]*[a-f0-9]+:	66 66 66 66 2e 0f 1f 84 00 00 00 00 00 	data32 data32 data32 nopw %cs:0x0\(%eax,%eax,1\)
+[ 	]*[a-f0-9]+:	8d b6 00 00 00 00    	lea    0x0\(%esi\),%esi
+[ 	]*[a-f0-9]+:	8d bc 27 00 00 00 00 	lea    0x0\(%edi,%eiz,1\),%edi
 
 0+30 <nop12>:
 [ 	]*[a-f0-9]+:	90                   	nop
 [ 	]*[a-f0-9]+:	90                   	nop
 [ 	]*[a-f0-9]+:	90                   	nop
 [ 	]*[a-f0-9]+:	90                   	nop
-[ 	]*[a-f0-9]+:	66 66 66 2e 0f 1f 84 00 00 00 00 00 	data32 data32 nopw %cs:0x0\(%eax,%eax,1\)
+[ 	]*[a-f0-9]+:	8d b6 00 00 00 00    	lea    0x0\(%esi\),%esi
+[ 	]*[a-f0-9]+:	8d bf 00 00 00 00    	lea    0x0\(%edi\),%edi
 
 0+40 <nop11>:
 [ 	]*[a-f0-9]+:	90                   	nop
@@ -36,7 +52,8 @@ Disassembly of section .text:
 [ 	]*[a-f0-9]+:	90                   	nop
 [ 	]*[a-f0-9]+:	90                   	nop
 [ 	]*[a-f0-9]+:	90                   	nop
-[ 	]*[a-f0-9]+:	66 66 2e 0f 1f 84 00 00 00 00 00 	data32 nopw %cs:0x0\(%eax,%eax,1\)
+[ 	]*[a-f0-9]+:	8d 74 26 00          	lea    0x0\(%esi,%eiz,1\),%esi
+[ 	]*[a-f0-9]+:	8d bc 27 00 00 00 00 	lea    0x0\(%edi,%eiz,1\),%edi
 
 0+50 <nop10>:
 [ 	]*[a-f0-9]+:	90                   	nop
@@ -45,7 +62,8 @@ Disassembly of section .text:
 [ 	]*[a-f0-9]+:	90                   	nop
 [ 	]*[a-f0-9]+:	90                   	nop
 [ 	]*[a-f0-9]+:	90                   	nop
-[ 	]*[a-f0-9]+:	66 2e 0f 1f 84 00 00 00 00 00 	nopw   %cs:0x0\(%eax,%eax,1\)
+[ 	]*[a-f0-9]+:	8d 76 00             	lea    0x0\(%esi\),%esi
+[ 	]*[a-f0-9]+:	8d bc 27 00 00 00 00 	lea    0x0\(%edi,%eiz,1\),%edi
 
 0+60 <nop9>:
 [ 	]*[a-f0-9]+:	90                   	nop
@@ -55,7 +73,8 @@ Disassembly of section .text:
 [ 	]*[a-f0-9]+:	90                   	nop
 [ 	]*[a-f0-9]+:	90                   	nop
 [ 	]*[a-f0-9]+:	90                   	nop
-[ 	]*[a-f0-9]+:	66 0f 1f 84 00 00 00 00 00 	nopw   0x0\(%eax,%eax,1\)
+[ 	]*[a-f0-9]+:	89 f6                	mov    %esi,%esi
+[ 	]*[a-f0-9]+:	8d bc 27 00 00 00 00 	lea    0x0\(%edi,%eiz,1\),%edi
 
 0+70 <nop8>:
 [ 	]*[a-f0-9]+:	90                   	nop
@@ -66,7 +85,8 @@ Disassembly of section .text:
 [ 	]*[a-f0-9]+:	90                   	nop
 [ 	]*[a-f0-9]+:	90                   	nop
 [ 	]*[a-f0-9]+:	90                   	nop
-[ 	]*[a-f0-9]+:	0f 1f 84 00 00 00 00 00 	nopl   0x0\(%eax,%eax,1\)
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	8d b4 26 00 00 00 00 	lea    0x0\(%esi,%eiz,1\),%esi
 
 0+80 <nop7>:
 [ 	]*[a-f0-9]+:	90                   	nop
@@ -78,7 +98,7 @@ Disassembly of section .text:
 [ 	]*[a-f0-9]+:	90                   	nop
 [ 	]*[a-f0-9]+:	90                   	nop
 [ 	]*[a-f0-9]+:	90                   	nop
-[ 	]*[a-f0-9]+:	0f 1f 80 00 00 00 00 	nopl   0x0\(%eax\)
+[ 	]*[a-f0-9]+:	8d b4 26 00 00 00 00 	lea    0x0\(%esi,%eiz,1\),%esi
 
 0+90 <nop6>:
 [ 	]*[a-f0-9]+:	90                   	nop
@@ -91,7 +111,7 @@ Disassembly of section .text:
 [ 	]*[a-f0-9]+:	90                   	nop
 [ 	]*[a-f0-9]+:	90                   	nop
 [ 	]*[a-f0-9]+:	90                   	nop
-[ 	]*[a-f0-9]+:	66 0f 1f 44 00 00    	nopw   0x0\(%eax,%eax,1\)
+[ 	]*[a-f0-9]+:	8d b6 00 00 00 00    	lea    0x0\(%esi\),%esi
 
 0+a0 <nop5>:
 [ 	]*[a-f0-9]+:	90                   	nop
@@ -105,7 +125,8 @@ Disassembly of section .text:
 [ 	]*[a-f0-9]+:	90                   	nop
 [ 	]*[a-f0-9]+:	90                   	nop
 [ 	]*[a-f0-9]+:	90                   	nop
-[ 	]*[a-f0-9]+:	0f 1f 44 00 00       	nopl   0x0\(%eax,%eax,1\)
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	8d 74 26 00          	lea    0x0\(%esi,%eiz,1\),%esi
 
 0+b0 <nop4>:
 [ 	]*[a-f0-9]+:	90                   	nop
@@ -120,7 +141,7 @@ Disassembly of section .text:
 [ 	]*[a-f0-9]+:	90                   	nop
 [ 	]*[a-f0-9]+:	90                   	nop
 [ 	]*[a-f0-9]+:	90                   	nop
-[ 	]*[a-f0-9]+:	0f 1f 40 00          	nopl   0x0\(%eax\)
+[ 	]*[a-f0-9]+:	8d 74 26 00          	lea    0x0\(%esi,%eiz,1\),%esi
 
 0+c0 <nop3>:
 [ 	]*[a-f0-9]+:	90                   	nop
@@ -136,7 +157,7 @@ Disassembly of section .text:
 [ 	]*[a-f0-9]+:	90                   	nop
 [ 	]*[a-f0-9]+:	90                   	nop
 [ 	]*[a-f0-9]+:	90                   	nop
-[ 	]*[a-f0-9]+:	0f 1f 00             	nopl   \(%eax\)
+[ 	]*[a-f0-9]+:	8d 76 00             	lea    0x0\(%esi\),%esi
 
 0+d0 <nop2>:
 [ 	]*[a-f0-9]+:	90                   	nop
diff --git a/gas/testsuite/gas/i386/nops-3-i686.d b/gas/testsuite/gas/i386/nops-3-i686.d
index 30d2627..5c114f4 100644
--- a/gas/testsuite/gas/i386/nops-3-i686.d
+++ b/gas/testsuite/gas/i386/nops-3-i686.d
@@ -9,9 +9,37 @@ Disassembly of section .text:
 
 0+ <nop>:
 [ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	eb 1d                	jmp    20 <nop\+0x20>
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
 [ 	]*[a-f0-9]+:	90                   	nop
-[ 	]*[a-f0-9]+:	66 66 66 66 66 66 2e 0f 1f 84 00 00 00 00 00 	data32 data32 data32 data32 data32 nopw %cs:0x0\(%eax,%eax,1\)
-[ 	]*[a-f0-9]+:	66 66 66 66 66 66 2e 0f 1f 84 00 00 00 00 00 	data32 data32 data32 data32 data32 nopw %cs:0x0\(%eax,%eax,1\)
 [ 	]*[a-f0-9]+:	89 c3                	mov    %eax,%ebx
-[ 	]*[a-f0-9]+:	66 66 66 66 66 2e 0f 1f 84 00 00 00 00 00 	data32 data32 data32 data32 nopw %cs:0x0\(%eax,%eax,1\)
+[ 	]*[a-f0-9]+:	8d b4 26 00 00 00 00 	lea    0x0\(%esi,%eiz,1\),%esi
+[ 	]*[a-f0-9]+:	8d bc 27 00 00 00 00 	lea    0x0\(%edi,%eiz,1\),%edi
 #pass
diff --git a/gas/testsuite/gas/i386/nops-4-i686.d b/gas/testsuite/gas/i386/nops-4-i686.d
index 3d8420b..c61f08d 100644
--- a/gas/testsuite/gas/i386/nops-4-i686.d
+++ b/gas/testsuite/gas/i386/nops-4-i686.d
@@ -9,30 +9,135 @@ Disassembly of section .text:
 
 0+ <nop31>:
 [ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	eb 1d                	jmp    20 <nop30>
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
 [ 	]*[a-f0-9]+:	90                   	nop
-[ 	]*[a-f0-9]+:	66 66 66 66 66 66 2e 0f 1f 84 00 00 00 00 00 	data32 data32 data32 data32 data32 nopw %cs:0x0\(%eax,%eax,1\)
-[ 	]*[a-f0-9]+:	66 66 66 66 66 66 2e 0f 1f 84 00 00 00 00 00 	data32 data32 data32 data32 data32 nopw %cs:0x0\(%eax,%eax,1\)
 
 0+20 <nop30>:
 [ 	]*[a-f0-9]+:	90                   	nop
 [ 	]*[a-f0-9]+:	90                   	nop
-[ 	]*[a-f0-9]+:	66 66 66 66 66 66 2e 0f 1f 84 00 00 00 00 00 	data32 data32 data32 data32 data32 nopw %cs:0x0\(%eax,%eax,1\)
-[ 	]*[a-f0-9]+:	66 66 66 66 66 66 2e 0f 1f 84 00 00 00 00 00 	data32 data32 data32 data32 data32 nopw %cs:0x0\(%eax,%eax,1\)
+[ 	]*[a-f0-9]+:	eb 1c                	jmp    40 <nop29>
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
 
 0+40 <nop29>:
 [ 	]*[a-f0-9]+:	90                   	nop
 [ 	]*[a-f0-9]+:	90                   	nop
 [ 	]*[a-f0-9]+:	90                   	nop
-[ 	]*[a-f0-9]+:	66 66 66 66 66 2e 0f 1f 84 00 00 00 00 00 	data32 data32 data32 data32 nopw %cs:0x0\(%eax,%eax,1\)
-[ 	]*[a-f0-9]+:	66 66 66 66 66 66 2e 0f 1f 84 00 00 00 00 00 	data32 data32 data32 data32 data32 nopw %cs:0x0\(%eax,%eax,1\)
+[ 	]*[a-f0-9]+:	eb 1b                	jmp    60 <nop28>
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
 
 0+60 <nop28>:
 [ 	]*[a-f0-9]+:	90                   	nop
 [ 	]*[a-f0-9]+:	90                   	nop
 [ 	]*[a-f0-9]+:	90                   	nop
 [ 	]*[a-f0-9]+:	90                   	nop
-[ 	]*[a-f0-9]+:	66 66 66 66 2e 0f 1f 84 00 00 00 00 00 	data32 data32 data32 nopw %cs:0x0\(%eax,%eax,1\)
-[ 	]*[a-f0-9]+:	66 66 66 66 66 66 2e 0f 1f 84 00 00 00 00 00 	data32 data32 data32 data32 data32 nopw %cs:0x0\(%eax,%eax,1\)
+[ 	]*[a-f0-9]+:	eb 1a                	jmp    80 <nop27>
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
 
 0+80 <nop27>:
 [ 	]*[a-f0-9]+:	90                   	nop
@@ -40,8 +145,32 @@ Disassembly of section .text:
 [ 	]*[a-f0-9]+:	90                   	nop
 [ 	]*[a-f0-9]+:	90                   	nop
 [ 	]*[a-f0-9]+:	90                   	nop
-[ 	]*[a-f0-9]+:	66 66 66 2e 0f 1f 84 00 00 00 00 00 	data32 data32 nopw %cs:0x0\(%eax,%eax,1\)
-[ 	]*[a-f0-9]+:	66 66 66 66 66 66 2e 0f 1f 84 00 00 00 00 00 	data32 data32 data32 data32 data32 nopw %cs:0x0\(%eax,%eax,1\)
+[ 	]*[a-f0-9]+:	eb 19                	jmp    a0 <nop26>
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
 
 0+a0 <nop26>:
 [ 	]*[a-f0-9]+:	90                   	nop
@@ -50,8 +179,31 @@ Disassembly of section .text:
 [ 	]*[a-f0-9]+:	90                   	nop
 [ 	]*[a-f0-9]+:	90                   	nop
 [ 	]*[a-f0-9]+:	90                   	nop
-[ 	]*[a-f0-9]+:	66 66 2e 0f 1f 84 00 00 00 00 00 	data32 nopw %cs:0x0\(%eax,%eax,1\)
-[ 	]*[a-f0-9]+:	66 66 66 66 66 66 2e 0f 1f 84 00 00 00 00 00 	data32 data32 data32 data32 data32 nopw %cs:0x0\(%eax,%eax,1\)
+[ 	]*[a-f0-9]+:	eb 18                	jmp    c0 <nop25>
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
 
 0+c0 <nop25>:
 [ 	]*[a-f0-9]+:	90                   	nop
@@ -61,8 +213,30 @@ Disassembly of section .text:
 [ 	]*[a-f0-9]+:	90                   	nop
 [ 	]*[a-f0-9]+:	90                   	nop
 [ 	]*[a-f0-9]+:	90                   	nop
-[ 	]*[a-f0-9]+:	66 2e 0f 1f 84 00 00 00 00 00 	nopw   %cs:0x0\(%eax,%eax,1\)
-[ 	]*[a-f0-9]+:	66 66 66 66 66 66 2e 0f 1f 84 00 00 00 00 00 	data32 data32 data32 data32 data32 nopw %cs:0x0\(%eax,%eax,1\)
+[ 	]*[a-f0-9]+:	eb 17                	jmp    e0 <nop24>
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
 
 0+e0 <nop24>:
 [ 	]*[a-f0-9]+:	90                   	nop
@@ -73,8 +247,29 @@ Disassembly of section .text:
 [ 	]*[a-f0-9]+:	90                   	nop
 [ 	]*[a-f0-9]+:	90                   	nop
 [ 	]*[a-f0-9]+:	90                   	nop
-[ 	]*[a-f0-9]+:	66 0f 1f 84 00 00 00 00 00 	nopw   0x0\(%eax,%eax,1\)
-[ 	]*[a-f0-9]+:	66 66 66 66 66 66 2e 0f 1f 84 00 00 00 00 00 	data32 data32 data32 data32 data32 nopw %cs:0x0\(%eax,%eax,1\)
+[ 	]*[a-f0-9]+:	eb 16                	jmp    100 <nop23>
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
 
 0+100 <nop23>:
 [ 	]*[a-f0-9]+:	90                   	nop
@@ -86,8 +281,28 @@ Disassembly of section .text:
 [ 	]*[a-f0-9]+:	90                   	nop
 [ 	]*[a-f0-9]+:	90                   	nop
 [ 	]*[a-f0-9]+:	90                   	nop
-[ 	]*[a-f0-9]+:	0f 1f 84 00 00 00 00 00 	nopl   0x0\(%eax,%eax,1\)
-[ 	]*[a-f0-9]+:	66 66 66 66 66 66 2e 0f 1f 84 00 00 00 00 00 	data32 data32 data32 data32 data32 nopw %cs:0x0\(%eax,%eax,1\)
+[ 	]*[a-f0-9]+:	eb 15                	jmp    120 <nop22>
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
 
 0+120 <nop22>:
 [ 	]*[a-f0-9]+:	90                   	nop
@@ -100,8 +315,27 @@ Disassembly of section .text:
 [ 	]*[a-f0-9]+:	90                   	nop
 [ 	]*[a-f0-9]+:	90                   	nop
 [ 	]*[a-f0-9]+:	90                   	nop
-[ 	]*[a-f0-9]+:	0f 1f 80 00 00 00 00 	nopl   0x0\(%eax\)
-[ 	]*[a-f0-9]+:	66 66 66 66 66 66 2e 0f 1f 84 00 00 00 00 00 	data32 data32 data32 data32 data32 nopw %cs:0x0\(%eax,%eax,1\)
+[ 	]*[a-f0-9]+:	eb 14                	jmp    140 <nop21>
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
 
 0+140 <nop21>:
 [ 	]*[a-f0-9]+:	90                   	nop
@@ -115,8 +349,26 @@ Disassembly of section .text:
 [ 	]*[a-f0-9]+:	90                   	nop
 [ 	]*[a-f0-9]+:	90                   	nop
 [ 	]*[a-f0-9]+:	90                   	nop
-[ 	]*[a-f0-9]+:	66 0f 1f 44 00 00    	nopw   0x0\(%eax,%eax,1\)
-[ 	]*[a-f0-9]+:	66 66 66 66 66 66 2e 0f 1f 84 00 00 00 00 00 	data32 data32 data32 data32 data32 nopw %cs:0x0\(%eax,%eax,1\)
+[ 	]*[a-f0-9]+:	eb 13                	jmp    160 <nop20>
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
 
 0+160 <nop20>:
 [ 	]*[a-f0-9]+:	90                   	nop
@@ -131,8 +383,25 @@ Disassembly of section .text:
 [ 	]*[a-f0-9]+:	90                   	nop
 [ 	]*[a-f0-9]+:	90                   	nop
 [ 	]*[a-f0-9]+:	90                   	nop
-[ 	]*[a-f0-9]+:	0f 1f 44 00 00       	nopl   0x0\(%eax,%eax,1\)
-[ 	]*[a-f0-9]+:	66 66 66 66 66 66 2e 0f 1f 84 00 00 00 00 00 	data32 data32 data32 data32 data32 nopw %cs:0x0\(%eax,%eax,1\)
+[ 	]*[a-f0-9]+:	eb 12                	jmp    180 <nop19>
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
 
 0+180 <nop19>:
 [ 	]*[a-f0-9]+:	90                   	nop
@@ -148,8 +417,24 @@ Disassembly of section .text:
 [ 	]*[a-f0-9]+:	90                   	nop
 [ 	]*[a-f0-9]+:	90                   	nop
 [ 	]*[a-f0-9]+:	90                   	nop
-[ 	]*[a-f0-9]+:	0f 1f 40 00          	nopl   0x0\(%eax\)
-[ 	]*[a-f0-9]+:	66 66 66 66 66 66 2e 0f 1f 84 00 00 00 00 00 	data32 data32 data32 data32 data32 nopw %cs:0x0\(%eax,%eax,1\)
+[ 	]*[a-f0-9]+:	eb 11                	jmp    1a0 <nop18>
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
 
 0+1a0 <nop18>:
 [ 	]*[a-f0-9]+:	90                   	nop
@@ -166,8 +451,23 @@ Disassembly of section .text:
 [ 	]*[a-f0-9]+:	90                   	nop
 [ 	]*[a-f0-9]+:	90                   	nop
 [ 	]*[a-f0-9]+:	90                   	nop
-[ 	]*[a-f0-9]+:	0f 1f 00             	nopl   \(%eax\)
-[ 	]*[a-f0-9]+:	66 66 66 66 66 66 2e 0f 1f 84 00 00 00 00 00 	data32 data32 data32 data32 data32 nopw %cs:0x0\(%eax,%eax,1\)
+[ 	]*[a-f0-9]+:	eb 10                	jmp    1c0 <nop17>
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
 
 0+1c0 <nop17>:
 [ 	]*[a-f0-9]+:	90                   	nop
@@ -185,8 +485,22 @@ Disassembly of section .text:
 [ 	]*[a-f0-9]+:	90                   	nop
 [ 	]*[a-f0-9]+:	90                   	nop
 [ 	]*[a-f0-9]+:	90                   	nop
-[ 	]*[a-f0-9]+:	66 90                	xchg   %ax,%ax
-[ 	]*[a-f0-9]+:	66 66 66 66 66 66 2e 0f 1f 84 00 00 00 00 00 	data32 data32 data32 data32 data32 nopw %cs:0x0\(%eax,%eax,1\)
+[ 	]*[a-f0-9]+:	eb 0f                	jmp    1e0 <nop16>
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
 
 0+1e0 <nop16>:
 [ 	]*[a-f0-9]+:	90                   	nop
@@ -205,6 +519,19 @@ Disassembly of section .text:
 [ 	]*[a-f0-9]+:	90                   	nop
 [ 	]*[a-f0-9]+:	90                   	nop
 [ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	eb 0e                	jmp    200 <align>
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
+[ 	]*[a-f0-9]+:	90                   	nop
 [ 	]*[a-f0-9]+:	90                   	nop
-[ 	]*[a-f0-9]+:	66 66 66 66 66 66 2e 0f 1f 84 00 00 00 00 00 	data32 data32 data32 data32 data32 nopw %cs:0x0\(%eax,%eax,1\)
 #pass

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [rfc] nopl should not be output on -mtune=i686
  2011-02-08 20:00     ` Jakub Jelinek
  2011-02-08 20:23       ` H.J. Lu
@ 2011-02-09  6:43       ` Eirik Byrkjeflot Anonsen
  2011-02-09 23:45         ` Quentin Neill
  1 sibling, 1 reply; 10+ messages in thread
From: Eirik Byrkjeflot Anonsen @ 2011-02-09  6:43 UTC (permalink / raw)
  To: binutils

Jakub Jelinek <jakub@redhat.com> writes:

> On Tue, Feb 08, 2011 at 08:01:17PM +0100, Jan Kratochvil wrote:
>> On Tue, 08 Feb 2011 18:23:35 +0100, H.J. Lu wrote:
>> > On Tue, Feb 8, 2011 at 9:10 AM, Jan Kratochvil
>> > <jan.kratochvil@redhat.com> wrote:
>> > > Current binutils HEAD:
>> > > -march | -mtune  | nopl used?  | after the attached patch: nopl used?
>> > >  -    |   -     |    no       | no
>> > >  i686  | -/i686  |    no       | no
>> > >  -    |   i686  |   yes = BUG | no
>> > >  core2 | -/core2 |   yes       | yes
>> > >  -    |   core2 |   yes = BUG | no
>> > >
>> > > => Currently suppressing -march now produces more advanced code output, this
>> > >   does not seem correct to me.
>> > 
>> > By default, x86 assembler assumes that the target processor accepts
>> > any instructions.  You can restrict ISA sets by -march and .arch directive.
>> 
>> Aha, in such case the system build should use some specific -march anyway and
>> not just to disable `nopl'.
>
> Not very easily, because lots of packages will contain SSE/SSE2/.../AVX etc.
> insns in inline asm etc. and use it conditionally based on used CPU (or with target
> attribute switching among functions).  So IMHO requiring that -march= is passed to
> gas whenever -mtune= is used doesn't look like a good idea.
>
> 	Jakub

As I read both the names and the documentation of those two:

-march: what processor to generate code for.
-mtune: what processor to optimize for.

So -mtune does not change which instructions are considered valid, only
what is considered "fast".

In the case you describe above it sounds like you want the assembler to
never automatically insert instructions outside of a certain instruction
set, but still allow the use of explicit instructions outside that set.

I can see the potential usefulness of something like:

-march = allow instructions for all cpus.
-mtune = optimize code for running fast on the most common cpu.
-mcompat-arch = do not implicitly generate code that can't run on
         the most low-end supported cpu.

Thus all three could have different values.  (Yes I made up
"-mcompat-arch" to mean "make sure implicitly generated instructions
will successfully run on this architecture").

None the less, I can certainly see an argument that implicitly
generating an instruction outside of the -mtune architecture is unlikely
to be "optimized" for that architecture.  :)

eirik

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [rfc] nopl should not be output on -mtune=i686
  2011-02-09  6:43       ` Eirik Byrkjeflot Anonsen
@ 2011-02-09 23:45         ` Quentin Neill
  2011-02-10  6:51           ` Eirik Byrkjeflot Anonsen
  0 siblings, 1 reply; 10+ messages in thread
From: Quentin Neill @ 2011-02-09 23:45 UTC (permalink / raw)
  To: Eirik Byrkjeflot Anonsen; +Cc: binutils

On Wed, Feb 9, 2011 at 12:42 AM, Eirik Byrkjeflot Anonsen
<eirik@opera.com> wrote:
> Jakub Jelinek <jakub@redhat.com> writes:
>
>> On Tue, Feb 08, 2011 at 08:01:17PM +0100, Jan Kratochvil wrote:
>>> On Tue, 08 Feb 2011 18:23:35 +0100, H.J. Lu wrote:
>>> > On Tue, Feb 8, 2011 at 9:10 AM, Jan Kratochvil
>>> > <jan.kratochvil@redhat.com> wrote:
>>> > > Current binutils HEAD:
>>> > > -march | -mtune  | nopl used?  | after the attached patch: nopl used?
>>> > >  -    |   -     |    no       | no
>>> > >  i686  | -/i686  |    no       | no
>>> > >  -    |   i686  |   yes = BUG | no
>>> > >  core2 | -/core2 |   yes       | yes
>>> > >  -    |   core2 |   yes = BUG | no
>>> > >
>>> > > => Currently suppressing -march now produces more advanced code output, this
>>> > >   does not seem correct to me.
>>> >
>>> > By default, x86 assembler assumes that the target processor accepts
>>> > any instructions.  You can restrict ISA sets by -march and .arch directive.
>>>
>>> Aha, in such case the system build should use some specific -march anyway and
>>> not just to disable `nopl'.
>>
>> Not very easily, because lots of packages will contain SSE/SSE2/.../AVX etc.
>> insns in inline asm etc. and use it conditionally based on used CPU (or with target
>> attribute switching among functions).  So IMHO requiring that -march= is passed to
>> gas whenever -mtune= is used doesn't look like a good idea.
>>
>>       Jakub
>
> As I read both the names and the documentation of those two:
>
> -march: what processor to generate code for.
> -mtune: what processor to optimize for.
>
> So -mtune does not change which instructions are considered valid, only
> what is considered "fast".
>
> In the case you describe above it sounds like you want the assembler to
> never automatically insert instructions outside of a certain instruction
> set, but still allow the use of explicit instructions outside that set.
>
> I can see the potential usefulness of something like:
>
> -march = allow instructions for all cpus.
> -mtune = optimize code for running fast on the most common cpu.
> -mcompat-arch = do not implicitly generate code that can't run on
>         the most low-end supported cpu.
>
> Thus all three could have different values.  (Yes I made up
> "-mcompat-arch" to mean "make sure implicitly generated instructions
> will successfully run on this architecture").
>
> None the less, I can certainly see an argument that implicitly
> generating an instruction outside of the -mtune architecture is unlikely
> to be "optimized" for that architecture.  :)
>
> eirik

Eirik,

I think that the current implementation was meant to have -mtune imply
your -mcompat-arch, except it was broken, and H.J.'s patches fixed
that.

He also fixed the fact that PENTIUM_PRO was still generating the alt_
patterns which contained nopl.  The patches we added last year moved
the "nopl" into its own ISA CpuNOP, unbundled it from the i686
processor, added it to others, but didn't actually fix the -march=i686
code generation not to use it.


Here is my (limited) understanding of the history, hope it helps.

The -march and -mtune flag names and meanings were adopted from GCC,
where tuning and generation are major functions.  But the x86
assembler is not an optimizing assembler (see
http://sourceware.org/ml/binutils/2010-06/threads.html#00166), it just
generates what the assembly tells it to.

So -march still means "target arch X" but it does this by restricting
ISAs to that arch (and the default is no restricted ISAs).

The -mtune flag is needed because the assembler generates NOPs for
alignment, and NOPs became ISA specific, so a way to control those was
needed.
-- 
Quentin

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [rfc] nopl should not be output on -mtune=i686
  2011-02-09 23:45         ` Quentin Neill
@ 2011-02-10  6:51           ` Eirik Byrkjeflot Anonsen
  0 siblings, 0 replies; 10+ messages in thread
From: Eirik Byrkjeflot Anonsen @ 2011-02-10  6:51 UTC (permalink / raw)
  To: binutils

Quentin Neill <quentin.neill.gnu@gmail.com> writes:

> On Wed, Feb 9, 2011 at 12:42 AM, Eirik Byrkjeflot Anonsen
> <eirik@opera.com> wrote:
[...]
>> As I read both the names and the documentation of those two:
>>
>> -march: what processor to generate code for.
>> -mtune: what processor to optimize for.
>>
>> So -mtune does not change which instructions are considered valid, only
>> what is considered "fast".
>>
[...]
>>
>> I can see the potential usefulness of something like:
>>
>> -march = allow instructions for all cpus.
>> -mtune = optimize code for running fast on the most common cpu.
>> -mcompat-arch = do not implicitly generate code that can't run on
>>         the most low-end supported cpu.
>>
>> Thus all three could have different values.  (Yes I made up
>> "-mcompat-arch" to mean "make sure implicitly generated instructions
>> will successfully run on this architecture").
>>
>> None the less, I can certainly see an argument that implicitly
>> generating an instruction outside of the -mtune architecture is unlikely
>> to be "optimized" for that architecture.  :)
>>
>> eirik
>
> Eirik,
>
> I think that the current implementation was meant to have -mtune imply
> your -mcompat-arch, except it was broken, and H.J.'s patches fixed
> that.

Then it is probably good idea to fix the documentation:

`-mtune=CPU'
     Schedule and tune for a particular MIPS cpu.

`-mtune=CPU'
     This option specifies a processor to optimize for. When used in
     conjunction with the `-march' option, only instructions of the
     processor specified by the `-march' option will be generated.

`-mtune=itanium1'
`-mtune=itanium2'
     Tune for a particular IA-64 CPU, ITANIUM1 or ITANIUM2. The default
     is ITANIUM2.

`-mtune=CPU'
     Schedule and tune for a particular MIPS cpu.  Valid CPU values are
     identical to `-march=CPU'.

As I read them, all of them (except itanium, which doesn't really say
much at all) claims that -mtune is about choosing optimal output for a
specific CPU.  The i386 version even seems to say that -mtune does not
restrict the instruction set at all, and you should use -march for that.

As I said above, I think it is reasonable to claim that automatically
generating an instruction that doesn't work on a particular cpu is quite
suboptimal for that cpu.  So it makes sense that -mtune would disallow
it.  But I don't feel the documentation implies that this can be relied
on.

Maybe harmonize all of them to say something like:

"This option specifies a processor to optimize for.  It will also ensure
that the assembler will not implicitly generate instructions that are
invalid for this cpu.  Explicit instructions in the assembly source are
not restricted by this option.  Use -march for that."

Maybe split into two paragraphs.  Maybe add a sentence about "gas does
not currently perform any significant cpu-specific optimizations."
Maybe add a third (architecture-specific) paragraph describing the valid
values.

[...]
> Here is my (limited) understanding of the history, hope it helps.
>
> The -march and -mtune flag names and meanings were adopted from GCC,
> where tuning and generation are major functions.  But the x86
> assembler is not an optimizing assembler (see
> http://sourceware.org/ml/binutils/2010-06/threads.html#00166), it just
> generates what the assembly tells it to.

Quite sensible as long as the assembler is supposed to only be used by a
(optimizing) compiler.  Optimizing twice is probably usually a bad idea.

But opinions on division of labour could change with time.  It may be a
bad idea to lock -mtune to something different than what gcc uses it for
just because we currently think the assembler will not need that option.

(On the other hand, it seems to me that it is unproblematic to have
-mtune IMPLY -mcompat-arch, since that could be considered a strict
subset relation.)

eirik

^ permalink raw reply	[flat|nested] 10+ messages in thread

end of thread, other threads:[~2011-02-10  6:51 UTC | newest]

Thread overview: 10+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2011-02-08 17:11 [rfc] nopl should not be output on -mtune=i686 Jan Kratochvil
2011-02-08 17:23 ` H.J. Lu
2011-02-08 19:01   ` Jan Kratochvil
2011-02-08 19:10     ` H.J. Lu
2011-02-08 20:00     ` Jakub Jelinek
2011-02-08 20:23       ` H.J. Lu
2011-02-09  6:43       ` Eirik Byrkjeflot Anonsen
2011-02-09 23:45         ` Quentin Neill
2011-02-10  6:51           ` Eirik Byrkjeflot Anonsen
2011-02-08 18:20 ` H.J. Lu

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).