]> git.ipfire.org Git - thirdparty/binutils-gdb.git/commitdiff
x86: Update register operand check for AddrPrefixOpReg
authorH.J. Lu <hjl.tools@gmail.com>
Sat, 3 Oct 2020 11:23:55 +0000 (04:23 -0700)
committerH.J. Lu <hjl.tools@gmail.com>
Wed, 7 Oct 2020 18:25:28 +0000 (11:25 -0700)
When the address size prefix applies to both the memory and the register
operand, we need to extract the address size prefix from the register
operand if the memory operand has no real registers, like symbol, DISP
or symbol(%rip).

NB: GCC always generates symbol(%rip) for RIP-relative addressing for
both x32 and x86-64.

Move the .code16 tests in movdir.s to movdir-16bit to show the correct
output from objdump.

gas/

PR gas/26685
* config/tc-i386.c (process_suffix): Also check the register
operand for the address size prefix if the memory operand has
no real registers.
* testsuite/gas/i386/enqcmd-16bit.d: New file.
* testsuite/gas/i386/enqcmd-16bit.s: Likewise.
* testsuite/gas/i386/movdir-16bit.d: Likewise.
* testsuite/gas/i386/movdir-16bit.s: Likewise.
* testsuite/gas/i386/enqcmd.s: Add tests with symbol and DISP.
* testsuite/gas/i386/x86-64-enqcmd.s: Likewise.
* testsuite/gas/i386/x86-64-movdir.s: Likewise.
* testsuite/gas/i386/movdir.s: Add tests with symbol and DISP.
Remove the .code16 test.
* testsuite/gas/i386/i386.exp: Run movdir-16bit and enqcmd-16bit.
* testsuite/gas/i386/x86-64-enqcmd-intel.d: Updated.
* testsuite/gas/i386/x86-64-enqcmd.d: Likewise.
* testsuite/gas/i386/x86-64-movdir-intel.d: Likewise.
* testsuite/gas/i386/x86-64-movdir.d: Likewise.
* testsuite/gas/i386/enqcmd-intel.d: Likewise.
* testsuite/gas/i386/enqcmd.d: Likewise.
* testsuite/gas/i386/movdir-intel.d: Likewise.
* testsuite/gas/i386/movdir.d: Likewise.
* testsuite/gas/i386/x86-64-enqcmd-intel.d: Likewise.
* testsuite/gas/i386/x86-64-enqcmd.d: Likewise.
* testsuite/gas/i386/x86-64-movdir-intel.d: Likewise.
* testsuite/gas/i386/x86-64-movdir.d: Likewise.

opcodes/

PR gas/26685
* i386-dis.c (mod_table): Replace Gv with Gdq on movdiri.

(cherry picked from commit b3a3496f83a14ad226790725c8e3ed9777fe2899)

21 files changed:
gas/ChangeLog
gas/config/tc-i386.c
gas/testsuite/gas/i386/enqcmd-16bit.d [new file with mode: 0644]
gas/testsuite/gas/i386/enqcmd-16bit.s [new file with mode: 0644]
gas/testsuite/gas/i386/enqcmd-intel.d
gas/testsuite/gas/i386/enqcmd.d
gas/testsuite/gas/i386/enqcmd.s
gas/testsuite/gas/i386/i386.exp
gas/testsuite/gas/i386/movdir-16bit.d [new file with mode: 0644]
gas/testsuite/gas/i386/movdir-16bit.s [new file with mode: 0644]
gas/testsuite/gas/i386/movdir-intel.d
gas/testsuite/gas/i386/movdir.d
gas/testsuite/gas/i386/movdir.s
gas/testsuite/gas/i386/x86-64-enqcmd-intel.d
gas/testsuite/gas/i386/x86-64-enqcmd.d
gas/testsuite/gas/i386/x86-64-enqcmd.s
gas/testsuite/gas/i386/x86-64-movdir-intel.d
gas/testsuite/gas/i386/x86-64-movdir.d
gas/testsuite/gas/i386/x86-64-movdir.s
opcodes/ChangeLog
opcodes/i386-dis.c

index 20cd40c0624c6b02ad91d7fddfa69313ffd84b35..114539bde9aa7dc074cce47ba306c733b3e0740d 100644 (file)
@@ -1,3 +1,32 @@
+2020-10-07  H.J. Lu  <hongjiu.lu@intel.com>
+
+       PR gas/26685
+       * config/tc-i386.c (process_suffix): Also check the register
+       operand for the address size prefix if the memory operand has
+       no real registers.
+       * testsuite/gas/i386/enqcmd-16bit.d: New file.
+       * testsuite/gas/i386/enqcmd-16bit.s: Likewise.
+       * testsuite/gas/i386/movdir-16bit.d: Likewise.
+       * testsuite/gas/i386/movdir-16bit.s: Likewise.
+       * testsuite/gas/i386/enqcmd.s: Add tests with symbol and DISP.
+       * testsuite/gas/i386/x86-64-enqcmd.s: Likewise.
+       * testsuite/gas/i386/x86-64-movdir.s: Likewise.
+       * testsuite/gas/i386/movdir.s: Add tests with symbol and DISP.
+       Remove the .code16 test.
+       * testsuite/gas/i386/i386.exp: Run movdir-16bit and enqcmd-16bit.
+       * testsuite/gas/i386/x86-64-enqcmd-intel.d: Updated.
+       * testsuite/gas/i386/x86-64-enqcmd.d: Likewise.
+       * testsuite/gas/i386/x86-64-movdir-intel.d: Likewise.
+       * testsuite/gas/i386/x86-64-movdir.d: Likewise.
+       * testsuite/gas/i386/enqcmd-intel.d: Likewise.
+       * testsuite/gas/i386/enqcmd.d: Likewise.
+       * testsuite/gas/i386/movdir-intel.d: Likewise.
+       * testsuite/gas/i386/movdir.d: Likewise.
+       * testsuite/gas/i386/x86-64-enqcmd-intel.d: Likewise.
+       * testsuite/gas/i386/x86-64-enqcmd.d: Likewise.
+       * testsuite/gas/i386/x86-64-movdir-intel.d: Likewise.
+       * testsuite/gas/i386/x86-64-movdir.d: Likewise.
+
 2020-10-07  H.J. Lu  <hongjiu.lu@intel.com>
 
        PR gas/26685
index 80a0425cb1bd17dc3c9bf9da68addcaf9a55ff97..623ac77307e7a89b4a42fc509c791913adbb8e51 100644 (file)
@@ -7116,15 +7116,19 @@ process_suffix (void)
          enum { need_word, need_dword, need_qword } need;
 
          /* Check the register operand for the address size prefix if
-            the memory operand is symbol(%rip).  */
+            the memory operand has no real registers, like symbol, DISP
+            or symbol(%rip).  */
          if (i.mem_operands == 1
              && i.reg_operands == 1
              && i.operands == 2
-             && i.base_reg
-             && i.base_reg->reg_num == RegIP
-             && i.base_reg->reg_type.bitfield.qword
              && i.types[1].bitfield.class == Reg
-             && i.op[1].regs->reg_type.bitfield.dword
+             && (flag_code == CODE_32BIT
+                 ? i.op[1].regs->reg_type.bitfield.word
+                 : i.op[1].regs->reg_type.bitfield.dword)
+             && ((i.base_reg == NULL && i.index_reg == NULL)
+                 || (i.base_reg
+                     && i.base_reg->reg_num == RegIP
+                     && i.base_reg->reg_type.bitfield.qword))
              && !add_prefix (ADDR_PREFIX_OPCODE))
            return 0;
 
diff --git a/gas/testsuite/gas/i386/enqcmd-16bit.d b/gas/testsuite/gas/i386/enqcmd-16bit.d
new file mode 100644 (file)
index 0000000..04e8706
--- /dev/null
@@ -0,0 +1,21 @@
+#as: -I${srcdir}/$subdir
+#objdump: -dw -Mi8086
+#name: i386 16-bit ENQCMD[S] insns
+
+.*: +file format .*
+
+Disassembly of section .text:
+
+0+ <_start>:
+ +[a-f0-9]+:   67 0f 38 f9 01          movdiri %eax,\(%ecx\)
+ +[a-f0-9]+:   67 66 0f 38 f8 01       movdir64b \(%ecx\),%eax
+ +[a-f0-9]+:   66 0f 38 f8 04          movdir64b \(%si\),%ax
+ +[a-f0-9]+:   66 0f 38 f8 0e 00 00    movdir64b 0x0,%cx
+ +[a-f0-9]+:   66 0f 38 f8 0e 34 12    movdir64b 0x1234,%cx
+ +[a-f0-9]+:   67 0f 38 f9 01          movdiri %eax,\(%ecx\)
+ +[a-f0-9]+:   67 0f 38 f9 01          movdiri %eax,\(%ecx\)
+ +[a-f0-9]+:   67 66 0f 38 f8 01       movdir64b \(%ecx\),%eax
+ +[a-f0-9]+:   66 0f 38 f8 04          movdir64b \(%si\),%ax
+ +[a-f0-9]+:   66 0f 38 f8 0e 00 00    movdir64b 0x0,%cx
+ +[a-f0-9]+:   66 0f 38 f8 0e 34 12    movdir64b 0x1234,%cx
+#pass
diff --git a/gas/testsuite/gas/i386/enqcmd-16bit.s b/gas/testsuite/gas/i386/enqcmd-16bit.s
new file mode 100644 (file)
index 0000000..1f21cec
--- /dev/null
@@ -0,0 +1,4 @@
+# Check ENQCMD[S] 16-bit instructions
+
+       .code16
+.include "movdir.s"
index b38c3ed6ee14fb70da5e1fa01090bc7e1b2313ae..e1d30dacd70bf610454577976b17abc4836dd49a 100644 (file)
@@ -8,13 +8,21 @@
 
 Disassembly of section \.text:
 
-00000000 <_start>:
-[      ]*[a-f0-9]+:[   ]*f2 0f 38 f8 01[       ]*enqcmd eax,\[ecx\]
-[      ]*[a-f0-9]+:[   ]*67 f2 0f 38 f8 04[    ]*enqcmd ax,\[si\]
-[      ]*[a-f0-9]+:[   ]*f3 0f 38 f8 01[       ]*enqcmds eax,\[ecx\]
-[      ]*[a-f0-9]+:[   ]*67 f3 0f 38 f8 04[    ]*enqcmds ax,\[si\]
-[      ]*[a-f0-9]+:[   ]*f2 0f 38 f8 01[       ]*enqcmd eax,\[ecx\]
-[      ]*[a-f0-9]+:[   ]*67 f2 0f 38 f8 04[    ]*enqcmd ax,\[si\]
-[      ]*[a-f0-9]+:[   ]*f3 0f 38 f8 01[       ]*enqcmds eax,\[ecx\]
-[      ]*[a-f0-9]+:[   ]*67 f3 0f 38 f8 04[    ]*enqcmds ax,\[si\]
+0+ <_start>:
+ +[a-f0-9]+:   f2 0f 38 f8 01          enqcmd eax,\[ecx\]
+ +[a-f0-9]+:   67 f2 0f 38 f8 04       enqcmd ax,\[si\]
+ +[a-f0-9]+:   f3 0f 38 f8 01          enqcmds eax,\[ecx\]
+ +[a-f0-9]+:   67 f3 0f 38 f8 04       enqcmds ax,\[si\]
+ +[a-f0-9]+:   67 f2 0f 38 f8 0e 00 00         enqcmd cx,ds:0x0
+ +[a-f0-9]+:   67 f2 0f 38 f8 0e 34 12         enqcmd cx,ds:0x1234
+ +[a-f0-9]+:   67 f3 0f 38 f8 0e 00 00         enqcmds cx,ds:0x0
+ +[a-f0-9]+:   67 f3 0f 38 f8 0e 34 12         enqcmds cx,ds:0x1234
+ +[a-f0-9]+:   f2 0f 38 f8 01          enqcmd eax,\[ecx\]
+ +[a-f0-9]+:   67 f2 0f 38 f8 04       enqcmd ax,\[si\]
+ +[a-f0-9]+:   f3 0f 38 f8 01          enqcmds eax,\[ecx\]
+ +[a-f0-9]+:   67 f3 0f 38 f8 04       enqcmds ax,\[si\]
+ +[a-f0-9]+:   67 f2 0f 38 f8 0e 00 00         enqcmd cx,ds:0x0
+ +[a-f0-9]+:   67 f2 0f 38 f8 0e 34 12         enqcmd cx,ds:0x1234
+ +[a-f0-9]+:   67 f3 0f 38 f8 0e 00 00         enqcmds cx,ds:0x0
+ +[a-f0-9]+:   67 f3 0f 38 f8 0e 34 12         enqcmds cx,ds:0x1234
 #pass
index c601185ba322cdfeca3ed637bf5cfa0eb66e9965..99b9c0a729920f801a5900939fbc4fa3a3f5f70d 100644 (file)
@@ -8,13 +8,21 @@
 
 Disassembly of section \.text:
 
-00000000 <_start>:
-[      ]*[a-f0-9]+:[   ]*f2 0f 38 f8 01[       ]*enqcmd \(%ecx\),%eax
-[      ]*[a-f0-9]+:[   ]*67 f2 0f 38 f8 04[    ]*enqcmd \(%si\),%ax
-[      ]*[a-f0-9]+:[   ]*f3 0f 38 f8 01[       ]*enqcmds \(%ecx\),%eax
-[      ]*[a-f0-9]+:[   ]*67 f3 0f 38 f8 04[    ]*enqcmds \(%si\),%ax
-[      ]*[a-f0-9]+:[   ]*f2 0f 38 f8 01[       ]*enqcmd \(%ecx\),%eax
-[      ]*[a-f0-9]+:[   ]*67 f2 0f 38 f8 04[    ]*enqcmd \(%si\),%ax
-[      ]*[a-f0-9]+:[   ]*f3 0f 38 f8 01[       ]*enqcmds \(%ecx\),%eax
-[      ]*[a-f0-9]+:[   ]*67 f3 0f 38 f8 04[    ]*enqcmds \(%si\),%ax
+0+ <_start>:
+ +[a-f0-9]+:   f2 0f 38 f8 01          enqcmd \(%ecx\),%eax
+ +[a-f0-9]+:   67 f2 0f 38 f8 04       enqcmd \(%si\),%ax
+ +[a-f0-9]+:   f3 0f 38 f8 01          enqcmds \(%ecx\),%eax
+ +[a-f0-9]+:   67 f3 0f 38 f8 04       enqcmds \(%si\),%ax
+ +[a-f0-9]+:   67 f2 0f 38 f8 0e 00 00         enqcmd 0x0,%cx
+ +[a-f0-9]+:   67 f2 0f 38 f8 0e 34 12         enqcmd 0x1234,%cx
+ +[a-f0-9]+:   67 f3 0f 38 f8 0e 00 00         enqcmds 0x0,%cx
+ +[a-f0-9]+:   67 f3 0f 38 f8 0e 34 12         enqcmds 0x1234,%cx
+ +[a-f0-9]+:   f2 0f 38 f8 01          enqcmd \(%ecx\),%eax
+ +[a-f0-9]+:   67 f2 0f 38 f8 04       enqcmd \(%si\),%ax
+ +[a-f0-9]+:   f3 0f 38 f8 01          enqcmds \(%ecx\),%eax
+ +[a-f0-9]+:   67 f3 0f 38 f8 04       enqcmds \(%si\),%ax
+ +[a-f0-9]+:   67 f2 0f 38 f8 0e 00 00         enqcmd 0x0,%cx
+ +[a-f0-9]+:   67 f2 0f 38 f8 0e 34 12         enqcmd 0x1234,%cx
+ +[a-f0-9]+:   67 f3 0f 38 f8 0e 00 00         enqcmds 0x0,%cx
+ +[a-f0-9]+:   67 f3 0f 38 f8 0e 34 12         enqcmds 0x1234,%cx
 #pass
index 0a23b25a6ff208f3516daacf8ea955fed5ba748a..f7195fa7236ad9efdc99cc976790c34ace750dfb 100644 (file)
@@ -7,9 +7,17 @@ _start:
        enqcmd (%si),%ax
        enqcmds (%ecx),%eax
        enqcmds (%si),%ax
+       enqcmd foo, %cx
+       enqcmd 0x1234, %cx
+       enqcmds foo, %cx
+       enqcmds 0x1234, %cx
 
        .intel_syntax noprefix
        enqcmd eax,[ecx]
        enqcmd ax,[si]
        enqcmds eax,[ecx]
        enqcmds ax,[si]
+       enqcmd cx,ds:foo
+       enqcmd cx,ds:0x1234
+       enqcmds cx,ds:foo
+       enqcmds cx,ds:0x1234
index 6563aae246ceec0d6dad6c561d7890398612f304..3580d5d7913d48de0846695fb7f3b8d1b38331da 100644 (file)
@@ -475,9 +475,11 @@ if [expr ([istarget "i*86-*-*"] ||  [istarget "x86_64-*-*"]) && [gas_32_check]]
     run_dump_test "cldemote-intel"
     run_dump_test "movdir"
     run_dump_test "movdir-intel"
+    run_dump_test "movdir-16bit"
     run_list_test "movdir64b-reg"
     run_dump_test "enqcmd"
     run_dump_test "enqcmd-intel"
+    run_dump_test "enqcmd-16bit"
     run_list_test "enqcmd-inval"
     run_dump_test "serialize"
     run_dump_test "tsxldtrk"
diff --git a/gas/testsuite/gas/i386/movdir-16bit.d b/gas/testsuite/gas/i386/movdir-16bit.d
new file mode 100644 (file)
index 0000000..ac5d825
--- /dev/null
@@ -0,0 +1,21 @@
+#as: -I${srcdir}/$subdir
+#objdump: -dw -Mi8086
+#name: i386 16-bit MOVDIR[I,64B] insns
+
+.*: +file format .*
+
+Disassembly of section .text:
+
+0+ <_start>:
+ +[a-f0-9]+:   67 0f 38 f9 01          movdiri %eax,\(%ecx\)
+ +[a-f0-9]+:   67 66 0f 38 f8 01       movdir64b \(%ecx\),%eax
+ +[a-f0-9]+:   66 0f 38 f8 04          movdir64b \(%si\),%ax
+ +[a-f0-9]+:   66 0f 38 f8 0e 00 00    movdir64b 0x0,%cx
+ +[a-f0-9]+:   66 0f 38 f8 0e 34 12    movdir64b 0x1234,%cx
+ +[a-f0-9]+:   67 0f 38 f9 01          movdiri %eax,\(%ecx\)
+ +[a-f0-9]+:   67 0f 38 f9 01          movdiri %eax,\(%ecx\)
+ +[a-f0-9]+:   67 66 0f 38 f8 01       movdir64b \(%ecx\),%eax
+ +[a-f0-9]+:   66 0f 38 f8 04          movdir64b \(%si\),%ax
+ +[a-f0-9]+:   66 0f 38 f8 0e 00 00    movdir64b 0x0,%cx
+ +[a-f0-9]+:   66 0f 38 f8 0e 34 12    movdir64b 0x1234,%cx
+#pass
diff --git a/gas/testsuite/gas/i386/movdir-16bit.s b/gas/testsuite/gas/i386/movdir-16bit.s
new file mode 100644 (file)
index 0000000..27f5fda
--- /dev/null
@@ -0,0 +1,4 @@
+# Check MOVDIR[I,64B] 16-bit instructions
+
+       .code16
+.include "movdir.s"
index 04f58a7892e1f5dea9d61d283fa5a21bb331a138..56f4fa929a7c01523a1edd669218ccbf049004a5 100644 (file)
@@ -8,19 +8,16 @@
 
 Disassembly of section \.text:
 
-00000000 <_start>:
-[      ]*[a-f0-9]+:[   ]*0f 38 f9 01[  ]*movdiri DWORD PTR \[ecx\],eax
-[      ]*[a-f0-9]+:[   ]*66 0f 38 f8 01[       ]*movdir64b eax,\[ecx\]
-[      ]*[a-f0-9]+:[   ]*67 66 0f 38 f8 04[    ]*movdir64b ax,\[si\]
-[      ]*[a-f0-9]+:[   ]*0f 38 f9 01[  ]*movdiri DWORD PTR \[ecx\],eax
-[      ]*[a-f0-9]+:[   ]*0f 38 f9 01[  ]*movdiri DWORD PTR \[ecx\],eax
-[      ]*[a-f0-9]+:[   ]*66 0f 38 f8 01[       ]*movdir64b eax,\[ecx\]
-[      ]*[a-f0-9]+:[   ]*67 66 0f 38 f8 04[    ]*movdir64b ax,\[si\]
-[      ]*[a-f0-9]+:[   ]*67 0f 38 f9 01[       ]*movdiri DWORD PTR \[bx\+di\],eax
-[      ]*[a-f0-9]+:[   ]*67 66 0f 38 f8 01[    ]*movdir64b ax,\[bx\+di\]
-[      ]*[a-f0-9]+:[   ]*66 0f 38 f8 04 67[    ]*movdir64b eax,\[edi\+eiz\*2\]
-[      ]*[a-f0-9]+:[   ]*0f 38 f9 01[  ]*movdiri DWORD PTR \[ecx\],eax
-[      ]*[a-f0-9]+:[   ]*67 0f 38 f9 01[       ]*movdiri DWORD PTR \[bx\+di\],eax
-[      ]*[a-f0-9]+:[   ]*67 66 0f 38 f8 01[    ]*movdir64b ax,\[bx\+di\]
-[      ]*[a-f0-9]+:[   ]*66 0f 38 f8 04 90[    ]*movdir64b eax,\[eax\+edx\*4\]
+0+ <_start>:
+ +[a-f0-9]+:   0f 38 f9 01             movdiri DWORD PTR \[ecx\],eax
+ +[a-f0-9]+:   66 0f 38 f8 01          movdir64b eax,\[ecx\]
+ +[a-f0-9]+:   67 66 0f 38 f8 04       movdir64b ax,\[si\]
+ +[a-f0-9]+:   67 66 0f 38 f8 0e 00 00         movdir64b cx,ds:0x0
+ +[a-f0-9]+:   67 66 0f 38 f8 0e 34 12         movdir64b cx,ds:0x1234
+ +[a-f0-9]+:   0f 38 f9 01             movdiri DWORD PTR \[ecx\],eax
+ +[a-f0-9]+:   0f 38 f9 01             movdiri DWORD PTR \[ecx\],eax
+ +[a-f0-9]+:   66 0f 38 f8 01          movdir64b eax,\[ecx\]
+ +[a-f0-9]+:   67 66 0f 38 f8 04       movdir64b ax,\[si\]
+ +[a-f0-9]+:   67 66 0f 38 f8 0e 00 00         movdir64b cx,ds:0x0
+ +[a-f0-9]+:   67 66 0f 38 f8 0e 34 12         movdir64b cx,ds:0x1234
 #pass
index 192dad9920e4d1377d34fb2543fcaf38c5834c0f..a8f324bddec78acefbc73583094c1f970bf204fb 100644 (file)
@@ -8,19 +8,16 @@
 
 Disassembly of section \.text:
 
-00000000 <_start>:
-[      ]*[a-f0-9]+:[   ]*0f 38 f9 01[  ]*movdiri %eax,\(%ecx\)
-[      ]*[a-f0-9]+:[   ]*66 0f 38 f8 01[       ]*movdir64b \(%ecx\),%eax
-[      ]*[a-f0-9]+:[   ]*67 66 0f 38 f8 04[    ]*movdir64b \(%si\),%ax
-[      ]*[a-f0-9]+:[   ]*0f 38 f9 01[  ]*movdiri %eax,\(%ecx\)
-[      ]*[a-f0-9]+:[   ]*0f 38 f9 01[  ]*movdiri %eax,\(%ecx\)
-[      ]*[a-f0-9]+:[   ]*66 0f 38 f8 01[       ]*movdir64b \(%ecx\),%eax
-[      ]*[a-f0-9]+:[   ]*67 66 0f 38 f8 04[    ]*movdir64b \(%si\),%ax
-[      ]*[a-f0-9]+:[   ]*67 0f 38 f9 01[       ]*movdiri %eax,\(%bx,%di\)
-[      ]*[a-f0-9]+:[   ]*67 66 0f 38 f8 01[    ]*movdir64b \(%bx,%di\),%ax
-[      ]*[a-f0-9]+:[   ]*66 0f 38 f8 04 67[    ]*movdir64b \(%edi,%eiz,2\),%eax
-[      ]*[a-f0-9]+:[   ]*0f 38 f9 01[  ]*movdiri %eax,\(%ecx\)
-[      ]*[a-f0-9]+:[   ]*67 0f 38 f9 01[       ]*movdiri %eax,\(%bx,%di\)
-[      ]*[a-f0-9]+:[   ]*67 66 0f 38 f8 01[    ]*movdir64b \(%bx,%di\),%ax
-[      ]*[a-f0-9]+:[   ]*66 0f 38 f8 04 90[    ]*movdir64b \(%eax,%edx,4\),%eax
+0+ <_start>:
+ +[a-f0-9]+:   0f 38 f9 01             movdiri %eax,\(%ecx\)
+ +[a-f0-9]+:   66 0f 38 f8 01          movdir64b \(%ecx\),%eax
+ +[a-f0-9]+:   67 66 0f 38 f8 04       movdir64b \(%si\),%ax
+ +[a-f0-9]+:   67 66 0f 38 f8 0e 00 00         movdir64b 0x0,%cx
+ +[a-f0-9]+:   67 66 0f 38 f8 0e 34 12         movdir64b 0x1234,%cx
+ +[a-f0-9]+:   0f 38 f9 01             movdiri %eax,\(%ecx\)
+ +[a-f0-9]+:   0f 38 f9 01             movdiri %eax,\(%ecx\)
+ +[a-f0-9]+:   66 0f 38 f8 01          movdir64b \(%ecx\),%eax
+ +[a-f0-9]+:   67 66 0f 38 f8 04       movdir64b \(%si\),%ax
+ +[a-f0-9]+:   67 66 0f 38 f8 0e 00 00         movdir64b 0x0,%cx
+ +[a-f0-9]+:   67 66 0f 38 f8 0e 34 12         movdir64b 0x1234,%cx
 #pass
index 29c381ca23c5cd1824f0233e7793c543eb609f6f..00c57db141a6e677d0481d161ec185ab8fac0cd0 100644 (file)
@@ -3,19 +3,16 @@
        .allow_index_reg
        .text
 _start:
-       .rept 2
        movdiri %eax, (%ecx)
        movdir64b (%ecx),%eax
        movdir64b (%si),%ax
+       movdir64b foo, %cx
+       movdir64b 0x1234, %cx
 
        .intel_syntax noprefix
        movdiri [ecx], eax
        movdiri dword ptr [ecx], eax
        movdir64b eax,[ecx]
        movdir64b ax,[si]
-
-       .att_syntax prefix
-       .code16
-       .endr
-
-       nop
+       movdir64b cx,ds:foo
+       movdir64b cx,ds:0x1234
index 64d325171b5d3fa973ae5a6107c55dd320dd0e6c..d8dc7facba37a107ad8f833967fc15b79d3948fc 100644 (file)
@@ -19,6 +19,10 @@ Disassembly of section \.text:
  +[a-f0-9]+:   f3 0f 38 f8 0d 00 00 00 00      enqcmds rcx,\[rip\+0x0\]        #.*
  +[a-f0-9]+:   67 f3 0f 38 f8 0d 00 00 00 00   enqcmds ecx,\[eip\+0x0\]        #.*
  +[a-f0-9]+:   67 f3 0f 38 f8 0d 00 00 00 00   enqcmds ecx,\[eip\+0x0\]        #.*
+ +[a-f0-9]+:   67 f2 0f 38 f8 0c 25 00 00 00 00        enqcmd ecx,\[eiz\*1\+0x0\]
+ +[a-f0-9]+:   67 f2 0f 38 f8 0c 25 78 56 34 12        enqcmd ecx,\[eiz\*1\+0x12345678\]
+ +[a-f0-9]+:   67 f3 0f 38 f8 0c 25 00 00 00 00        enqcmds ecx,\[eiz\*1\+0x0\]
+ +[a-f0-9]+:   67 f3 0f 38 f8 0c 25 78 56 34 12        enqcmds ecx,\[eiz\*1\+0x12345678\]
  +[a-f0-9]+:   f2 0f 38 f8 01          enqcmd rax,\[rcx\]
  +[a-f0-9]+:   67 f2 0f 38 f8 01       enqcmd eax,\[ecx\]
  +[a-f0-9]+:   f3 0f 38 f8 01          enqcmds rax,\[rcx\]
@@ -29,4 +33,8 @@ Disassembly of section \.text:
  +[a-f0-9]+:   f3 0f 38 f8 0d 00 00 00 00      enqcmds rcx,\[rip\+0x0\]        #.*
  +[a-f0-9]+:   67 f3 0f 38 f8 0d 00 00 00 00   enqcmds ecx,\[eip\+0x0\]        #.*
  +[a-f0-9]+:   67 f3 0f 38 f8 0d 00 00 00 00   enqcmds ecx,\[eip\+0x0\]        #.*
+ +[a-f0-9]+:   67 f2 0f 38 f8 0c 25 00 00 00 00        enqcmd ecx,\[eiz\*1\+0x0\]
+ +[a-f0-9]+:   67 f2 0f 38 f8 0c 25 78 56 34 12        enqcmd ecx,\[eiz\*1\+0x12345678\]
+ +[a-f0-9]+:   67 f3 0f 38 f8 0c 25 00 00 00 00        enqcmds ecx,\[eiz\*1\+0x0\]
+ +[a-f0-9]+:   67 f3 0f 38 f8 0c 25 78 56 34 12        enqcmds ecx,\[eiz\*1\+0x12345678\]
 #pass
index 5f6676636eb5e4a7bab27dc075606de104134692..e6f627ff09a2e753515299c5426d600f009ba406 100644 (file)
@@ -19,6 +19,10 @@ Disassembly of section \.text:
  +[a-f0-9]+:   f3 0f 38 f8 0d 00 00 00 00      enqcmds 0x0\(%rip\),%rcx        #.*
  +[a-f0-9]+:   67 f3 0f 38 f8 0d 00 00 00 00   enqcmds 0x0\(%eip\),%ecx        #.*
  +[a-f0-9]+:   67 f3 0f 38 f8 0d 00 00 00 00   enqcmds 0x0\(%eip\),%ecx        #.*
+ +[a-f0-9]+:   67 f2 0f 38 f8 0c 25 00 00 00 00        enqcmd 0x0\(,%eiz,1\),%ecx
+ +[a-f0-9]+:   67 f2 0f 38 f8 0c 25 78 56 34 12        enqcmd 0x12345678\(,%eiz,1\),%ecx
+ +[a-f0-9]+:   67 f3 0f 38 f8 0c 25 00 00 00 00        enqcmds 0x0\(,%eiz,1\),%ecx
+ +[a-f0-9]+:   67 f3 0f 38 f8 0c 25 78 56 34 12        enqcmds 0x12345678\(,%eiz,1\),%ecx
  +[a-f0-9]+:   f2 0f 38 f8 01          enqcmd \(%rcx\),%rax
  +[a-f0-9]+:   67 f2 0f 38 f8 01       enqcmd \(%ecx\),%eax
  +[a-f0-9]+:   f3 0f 38 f8 01          enqcmds \(%rcx\),%rax
@@ -29,4 +33,8 @@ Disassembly of section \.text:
  +[a-f0-9]+:   f3 0f 38 f8 0d 00 00 00 00      enqcmds 0x0\(%rip\),%rcx        #.*
  +[a-f0-9]+:   67 f3 0f 38 f8 0d 00 00 00 00   enqcmds 0x0\(%eip\),%ecx        #.*
  +[a-f0-9]+:   67 f3 0f 38 f8 0d 00 00 00 00   enqcmds 0x0\(%eip\),%ecx        #.*
+ +[a-f0-9]+:   67 f2 0f 38 f8 0c 25 00 00 00 00        enqcmd 0x0\(,%eiz,1\),%ecx
+ +[a-f0-9]+:   67 f2 0f 38 f8 0c 25 78 56 34 12        enqcmd 0x12345678\(,%eiz,1\),%ecx
+ +[a-f0-9]+:   67 f3 0f 38 f8 0c 25 00 00 00 00        enqcmds 0x0\(,%eiz,1\),%ecx
+ +[a-f0-9]+:   67 f3 0f 38 f8 0c 25 78 56 34 12        enqcmds 0x12345678\(,%eiz,1\),%ecx
 #pass
index d1f3aca5ce5b6334a8366e4008ec898625b02952..a03a5ffc5f33fe4dba0bfb04781c8b5d4bf26ceb 100644 (file)
@@ -13,6 +13,10 @@ _start:
        enqcmds foo(%rip),%rcx
        enqcmds foo(%rip),%ecx
        enqcmds foo(%eip),%ecx
+       enqcmd foo, %ecx
+       enqcmd 0x12345678, %ecx
+       enqcmds foo, %ecx
+       enqcmds 0x12345678, %ecx
 
        .intel_syntax noprefix
        enqcmd rax,[rcx]
@@ -25,3 +29,7 @@ _start:
        enqcmds rcx,[rip+foo]
        enqcmds ecx,[rip+foo]
        enqcmds ecx,[eip+foo]
+       enqcmd ecx,ds:foo
+       enqcmd ecx,ds:0x12345678
+       enqcmds ecx,ds:foo
+       enqcmds ecx,ds:0x12345678
index fe92e80d7159ef3049b916b1903a771368443478..a35bc6ca5d81ea2f029f96444f34d144bead3f04 100644 (file)
@@ -15,6 +15,8 @@ Disassembly of section \.text:
  +[a-f0-9]+:   66 0f 38 f8 0d 00 00 00 00      movdir64b rcx,\[rip\+0x0\]        #.*
  +[a-f0-9]+:   67 66 0f 38 f8 0d 00 00 00 00   movdir64b ecx,\[eip\+0x0\]        #.*
  +[a-f0-9]+:   67 66 0f 38 f8 0d 00 00 00 00   movdir64b ecx,\[eip\+0x0\]        #.*
+ +[a-f0-9]+:   67 66 0f 38 f8 0c 25 00 00 00 00        movdir64b ecx,\[eiz\*1\+0x0\]
+ +[a-f0-9]+:   67 66 0f 38 f8 0c 25 78 56 34 12        movdir64b ecx,\[eiz\*1\+0x12345678\]
  +[a-f0-9]+:   0f 38 f9 01             movdiri DWORD PTR \[rcx\],eax
  +[a-f0-9]+:   48 0f 38 f9 01          movdiri QWORD PTR \[rcx\],rax
  +[a-f0-9]+:   0f 38 f9 01             movdiri DWORD PTR \[rcx\],eax
@@ -24,4 +26,6 @@ Disassembly of section \.text:
  +[a-f0-9]+:   66 0f 38 f8 0d 00 00 00 00      movdir64b rcx,\[rip\+0x0\]        #.*
  +[a-f0-9]+:   67 66 0f 38 f8 0d 00 00 00 00   movdir64b ecx,\[eip\+0x0\]        #.*
  +[a-f0-9]+:   67 66 0f 38 f8 0d 00 00 00 00   movdir64b ecx,\[eip\+0x0\]        #.*
+ +[a-f0-9]+:   67 66 0f 38 f8 0c 25 00 00 00 00        movdir64b ecx,\[eiz\*1\+0x0\]
+ +[a-f0-9]+:   67 66 0f 38 f8 0c 25 78 56 34 12        movdir64b ecx,\[eiz\*1\+0x12345678\]
 #pass
index 297c63fd002b891bba22a4d43d9595e83f12f30e..d65787177dc4eac92d420f60efd0e2fe4d63b097 100644 (file)
@@ -15,6 +15,8 @@ Disassembly of section \.text:
  +[a-f0-9]+:   66 0f 38 f8 0d 00 00 00 00      movdir64b 0x0\(%rip\),%rcx        #.*
  +[a-f0-9]+:   67 66 0f 38 f8 0d 00 00 00 00   movdir64b 0x0\(%eip\),%ecx        #.*
  +[a-f0-9]+:   67 66 0f 38 f8 0d 00 00 00 00   movdir64b 0x0\(%eip\),%ecx        #.*
+ +[a-f0-9]+:   67 66 0f 38 f8 0c 25 00 00 00 00        movdir64b 0x0\(,%eiz,1\),%ecx
+ +[a-f0-9]+:   67 66 0f 38 f8 0c 25 78 56 34 12        movdir64b 0x12345678\(,%eiz,1\),%ecx
  +[a-f0-9]+:   0f 38 f9 01             movdiri %eax,\(%rcx\)
  +[a-f0-9]+:   48 0f 38 f9 01          movdiri %rax,\(%rcx\)
  +[a-f0-9]+:   0f 38 f9 01             movdiri %eax,\(%rcx\)
@@ -24,4 +26,6 @@ Disassembly of section \.text:
  +[a-f0-9]+:   66 0f 38 f8 0d 00 00 00 00      movdir64b 0x0\(%rip\),%rcx        #.*
  +[a-f0-9]+:   67 66 0f 38 f8 0d 00 00 00 00   movdir64b 0x0\(%eip\),%ecx        #.*
  +[a-f0-9]+:   67 66 0f 38 f8 0d 00 00 00 00   movdir64b 0x0\(%eip\),%ecx        #.*
+ +[a-f0-9]+:   67 66 0f 38 f8 0c 25 00 00 00 00        movdir64b 0x0\(,%eiz,1\),%ecx
+ +[a-f0-9]+:   67 66 0f 38 f8 0c 25 78 56 34 12        movdir64b 0x12345678\(,%eiz,1\),%ecx
 #pass
index 33b60318813f928079fdb1e9a0137d254c809418..ad69bb13223271263c768253965d2c0879affa56 100644 (file)
@@ -9,6 +9,8 @@ _start:
        movdir64b foo(%rip),%rcx
        movdir64b foo(%rip),%ecx
        movdir64b foo(%eip),%ecx
+       movdir64b foo, %ecx
+       movdir64b 0x12345678, %ecx
 
        .intel_syntax noprefix
        movdiri [rcx],eax
@@ -20,3 +22,5 @@ _start:
        movdir64b rcx,[rip+foo]
        movdir64b ecx,[rip+foo]
        movdir64b ecx,[eip+foo]
+       movdir64b ecx,ds:foo
+       movdir64b ecx,ds:0x12345678
index 93de78464e05747dc6b281bcf323dbc872fccf51..fada4f8c94b516f2e8ab830f94ee905f4a98c540 100644 (file)
@@ -1,3 +1,8 @@
+2020-10-07  H.J. Lu  <hongjiu.lu@intel.com>
+
+       PR gas/26685
+       * i386-dis.c (mod_table): Replace Gv with Gdq on movdiri.
+
 2020-10-07  Jan Beulich  <jbeulich@suse.com>
 
        * i386-dis.c (OP_E_memory): Revert previous change.
index e0cee46956b2b39477932918917be53fce5784a8..ea2ca1bb88eedb41e03a41876fca9e3617d766ce 100644 (file)
@@ -10496,7 +10496,7 @@ static const struct dis386 mod_table[][2] = {
   },
   {
     /* MOD_0F38F9_PREFIX_0 */
-    { "movdiri",       { Ev, Gv }, PREFIX_OPCODE },
+    { "movdiri",       { Ev, Gdq }, PREFIX_OPCODE },
   },
   {
     /* MOD_62_32BIT */