From 4dd4e6394509d58685daea52cc6947c45fd7ee9d Mon Sep 17 00:00:00 2001 From: Jan Beulich Date: Tue, 6 Nov 2018 11:45:49 +0100 Subject: [PATCH] x86: correctly handle VPBROADCASTD with EVEX.W set outside of 64-bit mode 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 | 6 ++++++ gas/testsuite/gas/i386/evex-wig.s | 2 ++ gas/testsuite/gas/i386/evex-wig1-intel.d | 1 + gas/testsuite/gas/i386/evex-wig1.d | 1 + opcodes/ChangeLog | 5 +++++ opcodes/i386-dis-evex.h | 2 +- 6 files changed, 16 insertions(+), 1 deletion(-) diff --git a/gas/ChangeLog b/gas/ChangeLog index d3300acb9d..ffff8210d7 100644 --- a/gas/ChangeLog +++ b/gas/ChangeLog @@ -1,3 +1,9 @@ +2018-11-06 Jan Beulich + + * 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 * testsuite/gas/i386/evex-wig.s: Add vmovd cases. diff --git a/gas/testsuite/gas/i386/evex-wig.s b/gas/testsuite/gas/i386/evex-wig.s index 593b6fdb2d..df73c78eb4 100644 --- a/gas/testsuite/gas/i386/evex-wig.s +++ b/gas/testsuite/gas/i386/evex-wig.s @@ -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) diff --git a/gas/testsuite/gas/i386/evex-wig1-intel.d b/gas/testsuite/gas/i386/evex-wig1-intel.d index 7d020f6004..0bf2be8fc9 100644 --- a/gas/testsuite/gas/i386/evex-wig1-intel.d +++ b/gas/testsuite/gas/i386/evex-wig1-intel.d @@ -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 diff --git a/gas/testsuite/gas/i386/evex-wig1.d b/gas/testsuite/gas/i386/evex-wig1.d index bb2408377d..45366c180d 100644 --- a/gas/testsuite/gas/i386/evex-wig1.d +++ b/gas/testsuite/gas/i386/evex-wig1.d @@ -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 diff --git a/opcodes/ChangeLog b/opcodes/ChangeLog index 70b95f3cac..ce55624b1c 100644 --- a/opcodes/ChangeLog +++ b/opcodes/ChangeLog @@ -1,3 +1,8 @@ +2018-11-06 Jan Beulich + + * i386-dis-evex.h (evex_table): Use K suffix instead of %LW for + vpbroadcast{d,q} with GPR operand. + 2018-11-06 Jan Beulich * i386-dis.c (EVEX_W_0F6E_P_2, EVEX_W_0F7E_P_2): Delete. diff --git a/opcodes/i386-dis-evex.h b/opcodes/i386-dis-evex.h index 84eaf83c09..dec7fc4420 100644 --- a/opcodes/i386-dis-evex.h +++ b/opcodes/i386-dis-evex.h @@ -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 */ { -- 2.34.1