x86: correctly handle VPBROADCASTD with EVEX.W set outside of 64-bit mode
authorJan Beulich <jbeulich@novell.com>
Tue, 6 Nov 2018 10:45:49 +0000 (11:45 +0100)
committerJan Beulich <jbeulich@suse.com>
Tue, 6 Nov 2018 10:45:49 +0000 (11:45 +0100)
For the flavor having a GPR operand EVEX.W is ignored outside of 64-bit
mode. The mnemonic should therefore not be VPBROADCASTQ.

gas/ChangeLog
gas/testsuite/gas/i386/evex-wig.s
gas/testsuite/gas/i386/evex-wig1-intel.d
gas/testsuite/gas/i386/evex-wig1.d
opcodes/ChangeLog
opcodes/i386-dis-evex.h

index d3300acb9da00193f330112d60253fa06be6f996..ffff8210d78535872e5f90256c52c0fbd3c9629f 100644 (file)
@@ -1,3 +1,9 @@
+2018-11-06  Jan Beulich  <jbeulich@suse.com>
+
+       * testsuite/gas/i386/evex-wig.s: Add vpbroadcastd cases.
+       * testsuite/gas/i386/evex-wig.d,
+       testsuite/gas/i386/evex-wig1-intel.d: Adjust expectations.
+
 2018-11-06  Jan Beulich  <jbeulich@suse.com>
 
        * testsuite/gas/i386/evex-wig.s: Add vmovd cases.
index 593b6fdb2d5465d2c16ab1f923da05fe51f46b5d..df73c78eb4f9b4d38d11532f0d074c02d2ee085d 100644 (file)
@@ -41,6 +41,8 @@ _start:
        {evex} vmovd %xmm0, %eax
        {evex} vmovd %xmm0, 4(%eax)
 
+       vpbroadcastd %eax, %xmm0
+
        {evex} vpextrb $0, %xmm0, %eax
        {evex} vpextrb $0, %xmm0, 1(%eax)
 
index 7d020f60044d73e3756ebc2560aea5046cded9ab..0bf2be8fc9b06f67cfcd75b61a853f66895ae401 100644 (file)
@@ -31,6 +31,7 @@ Disassembly of section .text:
 [      ]*[a-f0-9]+:    62 f1 fd 08 6e 40 01    vmovd  xmm0,DWORD PTR \[eax\+0x4\]
 [      ]*[a-f0-9]+:    62 f1 fd 08 7e c0       vmovd  eax,xmm0
 [      ]*[a-f0-9]+:    62 f1 fd 08 7e 40 01    vmovd  DWORD PTR \[eax\+0x4\],xmm0
+[      ]*[a-f0-9]+:    62 f2 fd 08 7c c0       vpbroadcastd xmm0,eax
 [      ]*[a-f0-9]+:    62 f3 fd 08 14 c0 00    vpextrb eax,xmm0,0x0
 [      ]*[a-f0-9]+:    62 f3 fd 08 14 40 01 00         vpextrb BYTE PTR \[eax\+0x1\],xmm0,0x0
 [      ]*[a-f0-9]+:    62 f3 fd 08 16 c0 00    vpextrd eax,xmm0,0x0
index bb2408377d25aa65aa93f7dcc275bba980f523df..45366c180daef05e8498032f7ebd7de0c66bd80d 100644 (file)
@@ -31,6 +31,7 @@ Disassembly of section .text:
 [      ]*[a-f0-9]+:    62 f1 fd 08 6e 40 01    vmovd  0x4\(%eax\),%xmm0
 [      ]*[a-f0-9]+:    62 f1 fd 08 7e c0       vmovd  %xmm0,%eax
 [      ]*[a-f0-9]+:    62 f1 fd 08 7e 40 01    vmovd  %xmm0,0x4\(%eax\)
+[      ]*[a-f0-9]+:    62 f2 fd 08 7c c0       vpbroadcastd %eax,%xmm0
 [      ]*[a-f0-9]+:    62 f3 fd 08 14 c0 00    vpextrb \$0x0,%xmm0,%eax
 [      ]*[a-f0-9]+:    62 f3 fd 08 14 40 01 00         vpextrb \$0x0,%xmm0,0x1\(%eax\)
 [      ]*[a-f0-9]+:    62 f3 fd 08 16 c0 00    vpextrd \$0x0,%xmm0,%eax
index 70b95f3caca61f08cbe0b4404437748b06f89fe8..ce55624b1cfee7209ce26a4d8568a8b54f905bdb 100644 (file)
@@ -1,3 +1,8 @@
+2018-11-06  Jan Beulich  <jbeulich@suse.com>
+
+       * i386-dis-evex.h (evex_table): Use K suffix instead of %LW for
+       vpbroadcast{d,q} with GPR operand.
+
 2018-11-06  Jan Beulich  <jbeulich@suse.com>
 
        * i386-dis.c (EVEX_W_0F6E_P_2, EVEX_W_0F7E_P_2): Delete.
index 84eaf83c09d7fb9c4207dc8b7b420241690faf11..dec7fc4420b504b8ff75da4d94f37e87771c5b7c 100644 (file)
@@ -2167,7 +2167,7 @@ static const struct dis386 evex_table[][256] = {
   {
     { Bad_Opcode },
     { Bad_Opcode },
-    { "vpbroadcast%LW",        { XM, Rdq }, 0 },
+    { "vpbroadcastK",  { XM, Rdq }, 0 },
   },
   /* PREFIX_EVEX_0F387D */
   {