From: H.J. Lu Date: Sat, 3 Oct 2020 11:23:55 +0000 (-0700) Subject: x86: Update register operand check for AddrPrefixOpReg X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=b3a3496f83a1;p=binutils-gdb.git x86: Update register operand check for AddrPrefixOpReg 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. --- diff --git a/gas/ChangeLog b/gas/ChangeLog index c1dc6e44177..866a8b46baf 100644 --- a/gas/ChangeLog +++ b/gas/ChangeLog @@ -1,3 +1,32 @@ +2020-10-03 H.J. Lu + + 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 * testsuite/gas/arm/mve-vcvtne-it.d: Allow for padding inserted by diff --git a/gas/config/tc-i386.c b/gas/config/tc-i386.c index 094f555ea01..8f798479baa 100644 --- a/gas/config/tc-i386.c +++ b/gas/config/tc-i386.c @@ -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 index 00000000000..04e8706d291 --- /dev/null +++ b/gas/testsuite/gas/i386/enqcmd-16bit.d @@ -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 index 00000000000..1f21cec3634 --- /dev/null +++ b/gas/testsuite/gas/i386/enqcmd-16bit.s @@ -0,0 +1,4 @@ +# Check ENQCMD[S] 16-bit instructions + + .code16 +.include "movdir.s" diff --git a/gas/testsuite/gas/i386/enqcmd-intel.d b/gas/testsuite/gas/i386/enqcmd-intel.d index b38c3ed6ee1..e1d30dacd70 100644 --- a/gas/testsuite/gas/i386/enqcmd-intel.d +++ b/gas/testsuite/gas/i386/enqcmd-intel.d @@ -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 diff --git a/gas/testsuite/gas/i386/enqcmd.d b/gas/testsuite/gas/i386/enqcmd.d index c601185ba32..99b9c0a7299 100644 --- a/gas/testsuite/gas/i386/enqcmd.d +++ b/gas/testsuite/gas/i386/enqcmd.d @@ -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 diff --git a/gas/testsuite/gas/i386/enqcmd.s b/gas/testsuite/gas/i386/enqcmd.s index 0a23b25a6ff..f7195fa7236 100644 --- a/gas/testsuite/gas/i386/enqcmd.s +++ b/gas/testsuite/gas/i386/enqcmd.s @@ -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 diff --git a/gas/testsuite/gas/i386/i386.exp b/gas/testsuite/gas/i386/i386.exp index 8d77c9fc184..3a1ebda494a 100644 --- a/gas/testsuite/gas/i386/i386.exp +++ b/gas/testsuite/gas/i386/i386.exp @@ -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 index 00000000000..ac5d82507f1 --- /dev/null +++ b/gas/testsuite/gas/i386/movdir-16bit.d @@ -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 index 00000000000..27f5fda5a58 --- /dev/null +++ b/gas/testsuite/gas/i386/movdir-16bit.s @@ -0,0 +1,4 @@ +# Check MOVDIR[I,64B] 16-bit instructions + + .code16 +.include "movdir.s" diff --git a/gas/testsuite/gas/i386/movdir-intel.d b/gas/testsuite/gas/i386/movdir-intel.d index 04f58a7892e..56f4fa929a7 100644 --- a/gas/testsuite/gas/i386/movdir-intel.d +++ b/gas/testsuite/gas/i386/movdir-intel.d @@ -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 diff --git a/gas/testsuite/gas/i386/movdir.d b/gas/testsuite/gas/i386/movdir.d index 192dad9920e..a8f324bddec 100644 --- a/gas/testsuite/gas/i386/movdir.d +++ b/gas/testsuite/gas/i386/movdir.d @@ -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 diff --git a/gas/testsuite/gas/i386/movdir.s b/gas/testsuite/gas/i386/movdir.s index 29c381ca23c..00c57db141a 100644 --- a/gas/testsuite/gas/i386/movdir.s +++ b/gas/testsuite/gas/i386/movdir.s @@ -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 diff --git a/gas/testsuite/gas/i386/x86-64-enqcmd-intel.d b/gas/testsuite/gas/i386/x86-64-enqcmd-intel.d index 64d325171b5..d8dc7facba3 100644 --- a/gas/testsuite/gas/i386/x86-64-enqcmd-intel.d +++ b/gas/testsuite/gas/i386/x86-64-enqcmd-intel.d @@ -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 diff --git a/gas/testsuite/gas/i386/x86-64-enqcmd.d b/gas/testsuite/gas/i386/x86-64-enqcmd.d index 5f6676636eb..e6f627ff09a 100644 --- a/gas/testsuite/gas/i386/x86-64-enqcmd.d +++ b/gas/testsuite/gas/i386/x86-64-enqcmd.d @@ -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 diff --git a/gas/testsuite/gas/i386/x86-64-enqcmd.s b/gas/testsuite/gas/i386/x86-64-enqcmd.s index d1f3aca5ce5..a03a5ffc5f3 100644 --- a/gas/testsuite/gas/i386/x86-64-enqcmd.s +++ b/gas/testsuite/gas/i386/x86-64-enqcmd.s @@ -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 diff --git a/gas/testsuite/gas/i386/x86-64-movdir-intel.d b/gas/testsuite/gas/i386/x86-64-movdir-intel.d index fe92e80d715..a35bc6ca5d8 100644 --- a/gas/testsuite/gas/i386/x86-64-movdir-intel.d +++ b/gas/testsuite/gas/i386/x86-64-movdir-intel.d @@ -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 diff --git a/gas/testsuite/gas/i386/x86-64-movdir.d b/gas/testsuite/gas/i386/x86-64-movdir.d index 297c63fd002..d65787177dc 100644 --- a/gas/testsuite/gas/i386/x86-64-movdir.d +++ b/gas/testsuite/gas/i386/x86-64-movdir.d @@ -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 diff --git a/gas/testsuite/gas/i386/x86-64-movdir.s b/gas/testsuite/gas/i386/x86-64-movdir.s index 33b60318813..ad69bb13223 100644 --- a/gas/testsuite/gas/i386/x86-64-movdir.s +++ b/gas/testsuite/gas/i386/x86-64-movdir.s @@ -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