From 1596541188b1a4080ab7bce6578c09626193dfd0 Mon Sep 17 00:00:00 2001 From: "H.J. Lu" Date: Mon, 12 Jun 2006 18:59:37 +0000 Subject: [PATCH] gas/testsuite/ 2006-06-12 H.J. Lu * 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. include/opcode/ 2006-06-12 H.J. Lu * i386.h (i386_optab): Add "nop" with memory reference. opcodes/ 2006-06-12 H.J. Lu * i386-dis.c (dis386_twobyte): Use "nopQ" for 0x1f. (twobyte_has_modrm): Set 1 for 0x1f. --- gas/testsuite/ChangeLog | 9 +++++++++ gas/testsuite/gas/i386/i386.exp | 2 ++ gas/testsuite/gas/i386/nops.d | 17 +++++++++++++++++ gas/testsuite/gas/i386/nops.s | 12 ++++++++++++ gas/testsuite/gas/i386/x86-64-nops.d | 17 +++++++++++++++++ gas/testsuite/gas/i386/x86-64-nops.s | 12 ++++++++++++ include/opcode/ChangeLog | 4 ++++ include/opcode/i386.h | 6 +++++- opcodes/ChangeLog | 5 +++++ opcodes/i386-dis.c | 4 ++-- 10 files changed, 85 insertions(+), 3 deletions(-) create mode 100644 gas/testsuite/gas/i386/nops.d create mode 100644 gas/testsuite/gas/i386/nops.s create mode 100644 gas/testsuite/gas/i386/x86-64-nops.d create mode 100644 gas/testsuite/gas/i386/x86-64-nops.s diff --git a/gas/testsuite/ChangeLog b/gas/testsuite/ChangeLog index 2b16921e0b..8ff202d254 100644 --- a/gas/testsuite/ChangeLog +++ b/gas/testsuite/ChangeLog @@ -1,3 +1,12 @@ +2006-06-12 H.J. Lu + + * 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 * gas/i386/opcode.s: Add "xchg %ax,%ax". diff --git a/gas/testsuite/gas/i386/i386.exp b/gas/testsuite/gas/i386/i386.exp index fd5ea377b2..3f353bc8b9 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 0000000000..74eaf86e2d --- /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 0000000000..e4eec093eb --- /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 0000000000..e51c0c1f95 --- /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 0000000000..e4eec093eb --- /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 edc00fa6de..13c3b4056a 100644 --- a/include/opcode/ChangeLog +++ b/include/opcode/ChangeLog @@ -1,3 +1,7 @@ +2006-06-12 H.J. Lu + + * i386.h (i386_optab): Add "nop" with memory reference. + 2006-06-12 H.J. Lu * i386.h (i386_optab): Update comment for 64bit NOP. diff --git a/include/opcode/i386.h b/include/opcode/i386.h index c46c86d4c1..76b5172efd 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 826c54ec91..b8eea112a8 100644 --- a/opcodes/ChangeLog +++ b/opcodes/ChangeLog @@ -1,3 +1,8 @@ +2006-06-12 H.J. Lu + + * i386-dis.c (dis386_twobyte): Use "nopQ" for 0x1f. + (twobyte_has_modrm): Set 1 for 0x1f. + 2006-06-12 H.J. Lu * i386-dis.c (NOP_Fixup): Removed. diff --git a/opcodes/i386-dis.c b/opcodes/i386-dis.c index 49a3e9ff72..40be2261da 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 */