diff options
-rw-r--r-- | gas/testsuite/ChangeLog | 9 | ||||
-rw-r--r-- | gas/testsuite/gas/i386/i386.exp | 2 | ||||
-rw-r--r-- | gas/testsuite/gas/i386/nops.d | 17 | ||||
-rw-r--r-- | gas/testsuite/gas/i386/nops.s | 12 | ||||
-rw-r--r-- | gas/testsuite/gas/i386/x86-64-nops.d | 17 | ||||
-rw-r--r-- | gas/testsuite/gas/i386/x86-64-nops.s | 12 | ||||
-rw-r--r-- | include/opcode/ChangeLog | 4 | ||||
-rw-r--r-- | include/opcode/i386.h | 6 | ||||
-rw-r--r-- | opcodes/ChangeLog | 5 | ||||
-rw-r--r-- | opcodes/i386-dis.c | 4 |
10 files changed, 85 insertions, 3 deletions
diff --git a/gas/testsuite/ChangeLog b/gas/testsuite/ChangeLog index 2b16921..8ff202d 100644 --- a/gas/testsuite/ChangeLog +++ b/gas/testsuite/ChangeLog @@ -1,5 +1,14 @@ 2006-06-12 H.J. Lu <hongjiu.lu@intel.com> + * gas/i386/i386.exp: Run nops and x86-64-nops. + + * gas/i386/nops.d: New file. + * gas/i386/nops.s: Likewise. + * gas/i386/x86-64-nops.d: Likewise. + * gas/i386/x86-64-nops.s: Likewise. + +2006-06-12 H.J. Lu <hongjiu.lu@intel.com> + * gas/i386/opcode.s: Add "xchg %ax,%ax". * gas/i386/opcode.d: Updated. diff --git a/gas/testsuite/gas/i386/i386.exp b/gas/testsuite/gas/i386/i386.exp index fd5ea37..3f353bc 100644 --- a/gas/testsuite/gas/i386/i386.exp +++ b/gas/testsuite/gas/i386/i386.exp @@ -72,6 +72,7 @@ if [expr ([istarget "i*86-*-*"] || [istarget "x86_64-*-*"]) && [gas_32_check]] run_dump_test "rep" run_dump_test "rep-suffix" run_dump_test "fp" + run_dump_test "nops" # These tests require support for 8 and 16 bit relocs, # so we only run them for ELF and COFF targets. @@ -144,6 +145,7 @@ if [expr ([istarget "i*86-*-*"] || [istarget "x86_64-*-*"]) && [gas_64_check]] t run_dump_test "x86-64-rep" run_dump_test "x86-64-rep-suffix" run_dump_test "x86-64-gidt" + run_dump_test "x86-64-nops" if { ![istarget "*-*-aix*"] && ![istarget "*-*-beos*"] diff --git a/gas/testsuite/gas/i386/nops.d b/gas/testsuite/gas/i386/nops.d new file mode 100644 index 0000000..74eaf86 --- /dev/null +++ b/gas/testsuite/gas/i386/nops.d @@ -0,0 +1,17 @@ +#objdump: -drw +#name: i386 nops + +.*: +file format .* + +Disassembly of section .text: + +0+000 <.text>: +[ ]*0:[ ]+0f 1f 00[ ]+nopl[ ]+\(%eax\) +[ ]*3:[ ]+0f 1f 40 00[ ]+nopl[ ]+0x0\(%eax\) +[ ]*7:[ ]+0f 1f 44 00 00[ ]+nopl[ ]+0x0\(%eax,%eax,1\) +[ ]*c:[ ]+66 0f 1f 44 00 00[ ]+nopw[ ]+0x0\(%eax,%eax,1\) +[ ]*12:[ ]+0f 1f 80 00 00 00 00[ ]+nopl[ ]+0x0\(%eax\) +[ ]*19:[ ]+0f 1f 84 00 00 00 00 00[ ]+nopl[ ]+0x0\(%eax,%eax,1\) +[ ]*21:[ ]+66 0f 1f 84 00 00 00 00 00[ ]+nopw[ ]+0x0\(%eax,%eax,1\) +[ ]*2a:[ ]+66 2e 0f 1f 84 00 00 00 00 00[ ]+nopw[ ]+%cs:0x0\(%eax,%eax,1\) +#pass diff --git a/gas/testsuite/gas/i386/nops.s b/gas/testsuite/gas/i386/nops.s new file mode 100644 index 0000000..e4eec09 --- /dev/null +++ b/gas/testsuite/gas/i386/nops.s @@ -0,0 +1,12 @@ + .text + + .byte 0x0f, 0x1f, 0x0 + .byte 0x0f, 0x1f, 0x40, 0x0 + .byte 0x0f, 0x1f, 0x44, 0x0, 0x0 + .byte 0x66, 0x0f, 0x1f, 0x44, 0x0, 0x0 + .byte 0x0f, 0x1f, 0x80, 0x0, 0x0, 0x0, 0x0 + .byte 0x0f, 0x1f, 0x84, 0x0, 0x0, 0x0, 0x0, 0x0 + .byte 0x66, 0x0f, 0x1f, 0x84, 0x0, 0x0, 0x0, 0x0, 0x0 + .byte 0x66, 0x2e, 0x0f, 0x1f, 0x84, 0x0, 0x0, 0x0, 0x0, 0x0 + + .p2align 4 diff --git a/gas/testsuite/gas/i386/x86-64-nops.d b/gas/testsuite/gas/i386/x86-64-nops.d new file mode 100644 index 0000000..e51c0c1 --- /dev/null +++ b/gas/testsuite/gas/i386/x86-64-nops.d @@ -0,0 +1,17 @@ +#objdump: -drw +#name: x86-64 nops + +.*: +file format .* + +Disassembly of section .text: + +0+000 <.text>: +[ ]*0:[ ]+0f 1f 00[ ]+nopl[ ]+\(%rax\) +[ ]*3:[ ]+0f 1f 40 00[ ]+nopl[ ]+0x0\(%rax\) +[ ]*7:[ ]+0f 1f 44 00 00[ ]+nopl[ ]+0x0\(%rax,%rax,1\) +[ ]*c:[ ]+66 0f 1f 44 00 00[ ]+nopw[ ]+0x0\(%rax,%rax,1\) +[ ]*12:[ ]+0f 1f 80 00 00 00 00[ ]+nopl[ ]+0x0\(%rax\) +[ ]*19:[ ]+0f 1f 84 00 00 00 00 00[ ]+nopl[ ]+0x0\(%rax,%rax,1\) +[ ]*21:[ ]+66 0f 1f 84 00 00 00 00 00[ ]+nopw[ ]+0x0\(%rax,%rax,1\) +[ ]*2a:[ ]+66 2e 0f 1f 84 00 00 00 00 00[ ]+nopw[ ]+%cs:0x0\(%rax,%rax,1\) +#pass diff --git a/gas/testsuite/gas/i386/x86-64-nops.s b/gas/testsuite/gas/i386/x86-64-nops.s new file mode 100644 index 0000000..e4eec09 --- /dev/null +++ b/gas/testsuite/gas/i386/x86-64-nops.s @@ -0,0 +1,12 @@ + .text + + .byte 0x0f, 0x1f, 0x0 + .byte 0x0f, 0x1f, 0x40, 0x0 + .byte 0x0f, 0x1f, 0x44, 0x0, 0x0 + .byte 0x66, 0x0f, 0x1f, 0x44, 0x0, 0x0 + .byte 0x0f, 0x1f, 0x80, 0x0, 0x0, 0x0, 0x0 + .byte 0x0f, 0x1f, 0x84, 0x0, 0x0, 0x0, 0x0, 0x0 + .byte 0x66, 0x0f, 0x1f, 0x84, 0x0, 0x0, 0x0, 0x0, 0x0 + .byte 0x66, 0x2e, 0x0f, 0x1f, 0x84, 0x0, 0x0, 0x0, 0x0, 0x0 + + .p2align 4 diff --git a/include/opcode/ChangeLog b/include/opcode/ChangeLog index edc00fa..13c3b40 100644 --- a/include/opcode/ChangeLog +++ b/include/opcode/ChangeLog @@ -1,5 +1,9 @@ 2006-06-12 H.J. Lu <hongjiu.lu@intel.com> + * i386.h (i386_optab): Add "nop" with memory reference. + +2006-06-12 H.J. Lu <hongjiu.lu@intel.com> + * i386.h (i386_optab): Update comment for 64bit NOP. 2006-06-06 Ben Elliston <bje@au.ibm.com> diff --git a/include/opcode/i386.h b/include/opcode/i386.h index c46c86d..76b5172 100644 --- a/include/opcode/i386.h +++ b/include/opcode/i386.h @@ -555,7 +555,11 @@ static const template i386_optab[] = {"bound", 2, 0x62, X, Cpu186|CpuNo64, wl_Suf|Modrm, { WordReg, WordMem, 0} }, {"hlt", 0, 0xf4, X, 0, NoSuf, { 0, 0, 0} }, -/* nop is actually 'xchgl %eax, %eax'. */ + +{"nop", 1, 0x0f1f, X, Cpu686, wl_Suf|Modrm, { WordMem, 0, 0} }, + +/* nop is actually "xchg %ax,%ax" in 16bit mode, "xchg %eax,%eax" in + 32bit mode and "xchg %rax,%rax" in 64bit mode. */ {"nop", 0, 0x90, X, 0, NoSuf, { 0, 0, 0} }, /* Protection control. */ diff --git a/opcodes/ChangeLog b/opcodes/ChangeLog index 826c54e..b8eea11 100644 --- a/opcodes/ChangeLog +++ b/opcodes/ChangeLog @@ -1,5 +1,10 @@ 2006-06-12 H.J. Lu <hongjiu.lu@intel.com> + * i386-dis.c (dis386_twobyte): Use "nopQ" for 0x1f. + (twobyte_has_modrm): Set 1 for 0x1f. + +2006-06-12 H.J. Lu <hongjiu.lu@intel.com> + * i386-dis.c (NOP_Fixup): Removed. (NOP_Fixup1): New. (NOP_Fixup2): Likewise. diff --git a/opcodes/i386-dis.c b/opcodes/i386-dis.c index 49a3e9f..40be226 100644 --- a/opcodes/i386-dis.c +++ b/opcodes/i386-dis.c @@ -843,7 +843,7 @@ static const struct dis386 dis386_twobyte[] = { { "(bad)", XX, XX, XX }, { "(bad)", XX, XX, XX }, { "(bad)", XX, XX, XX }, - { "(bad)", XX, XX, XX }, + { "nopQ", Ev, XX, XX }, /* 20 */ { "movZ", Rm, Cm, XX }, { "movZ", Rm, Dm, XX }, @@ -1125,7 +1125,7 @@ static const unsigned char twobyte_has_modrm[256] = { /* 0 1 2 3 4 5 6 7 8 9 a b c d e f */ /* ------------------------------- */ /* 00 */ 1,1,1,1,0,0,0,0,0,0,0,0,0,1,0,1, /* 0f */ - /* 10 */ 1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0, /* 1f */ + /* 10 */ 1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,1, /* 1f */ /* 20 */ 1,1,1,1,1,0,1,0,1,1,1,1,1,1,1,1, /* 2f */ /* 30 */ 0,0,0,0,0,0,0,0,1,0,1,0,0,0,0,0, /* 3f */ /* 40 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 4f */ |