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>
Sat, 3 Oct 2020 11:24:05 +0000 (04:24 -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.

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.

19 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

index c1dc6e441777066265d8ed07a381e6b853b75a3f..866a8b46baffe9f83a0eeb5b590685a81fb0b2f6 100644 (file)
@@ -1,3 +1,32 @@
+2020-10-03  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-02  Nick Clifton  <nickc@redhat.com>
 
        * testsuite/gas/arm/mve-vcvtne-it.d: Allow for padding inserted by
index 094f555ea01e7d551c39aa438ce89205cc232d46..8f798479baa1cd138482d1ee3c96926b7468ceaf 100644 (file)
@@ -7179,15 +7179,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 8d77c9fc184998bfc4a867dfae794ea56f1c1dc1..3a1ebda494aaab9bdf842ae34a72408e05984aeb 100644 (file)
@@ -484,9 +484,11 @@ if [gas_32_check] then {
     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 "tdx"
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