projects
/
deliverable
/
binutils-gdb.git
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
|
inline
| side by side (parent:
e74d9fa
)
x86: AVX512 VPERM{D,Q,PS,PD} insns need to honor EVEX.L'L
author
Jan Beulich
<jbeulich@suse.com>
Mon, 6 Jul 2020 11:41:58 +0000
(13:41 +0200)
committer
Jan Beulich
<jbeulich@suse.com>
Mon, 6 Jul 2020 11:41:58 +0000
(13:41 +0200)
Just like (where they exist) their AVX counterparts do for VEX.L. For
all of them the 128-bit forms are invalid.
opcodes/ChangeLog
patch
|
blob
|
blame
|
history
opcodes/i386-dis-evex-len.h
patch
|
blob
|
blame
|
history
opcodes/i386-dis-evex-prefix.h
patch
|
blob
|
blame
|
history
opcodes/i386-dis-evex-w.h
patch
|
blob
|
blame
|
history
opcodes/i386-dis.c
patch
|
blob
|
blame
|
history
diff --git
a/opcodes/ChangeLog
b/opcodes/ChangeLog
index 62f8a0874c81bf3899c892f26837547561a91284..c72e1d144aed5c15990eac5d0d9d0cd588fd7706 100644
(file)
--- a/
opcodes/ChangeLog
+++ b/
opcodes/ChangeLog
@@
-1,3
+1,14
@@
+2020-07-06 Jan Beulich <jbeulich@suse.com>
+
+ * i386-dis.c (EVEX_LEN_0F3816_P_2, EVEX_LEN_0F3836_P_2,
+ EVEX_LEN_0F3A00_P_2_W_1, EVEX_LEN_0F3A01_P_2_W_1): New
+ enumerators.
+ * i386-dis-evex-len.h (evex_len_table): New EVEX_LEN_0F3816_P_2,
+ EVEX_LEN_0F3836_P_2, EVEX_LEN_0F3A00_P_2_W_1, and
+ EVEX_LEN_0F3A01_P_2_W_1 table entries.
+ * i386-dis-evex-prefix.h, i386-dis-evex-w.h: Reference the above
+ entries.
+
2020-07-06 Jan Beulich <jbeulich@suse.com>
* i386-dis.c (EVEX_LEN_0FC4_P_2, EVEX_LEN_0FC5_P_2,
2020-07-06 Jan Beulich <jbeulich@suse.com>
* i386-dis.c (EVEX_LEN_0FC4_P_2, EVEX_LEN_0FC5_P_2,
diff --git
a/opcodes/i386-dis-evex-len.h
b/opcodes/i386-dis-evex-len.h
index 51ce98f4a90fed41f81d9129d47f1a5c98455560..2941ab1dcbb7b6c1ea7fa18d59cb1694469bd980 100644
(file)
--- a/
opcodes/i386-dis-evex-len.h
+++ b/
opcodes/i386-dis-evex-len.h
@@
-29,6
+29,13
@@
static const struct dis386 evex_len_table[][3] = {
{ VEX_W_TABLE (EVEX_W_0FD6_P_2) },
},
{ VEX_W_TABLE (EVEX_W_0FD6_P_2) },
},
+ /* EVEX_LEN_0F3816_P_2 */
+ {
+ { Bad_Opcode },
+ { "vpermp%XW", { XM, Vex, EXx }, 0 },
+ { "vpermp%XW", { XM, Vex, EXx }, 0 },
+ },
+
/* EVEX_LEN_0F3819_P_2_W_0 */
{
{ Bad_Opcode },
/* EVEX_LEN_0F3819_P_2_W_0 */
{
{ Bad_Opcode },
@@
-71,6
+78,13
@@
static const struct dis386 evex_len_table[][3] = {
{ "vbroadcastf64x4", { XM, EXymm }, 0 },
},
{ "vbroadcastf64x4", { XM, EXymm }, 0 },
},
+ /* EVEX_LEN_0F3836_P_2 */
+ {
+ { Bad_Opcode },
+ { "vperm%LW", { XM, Vex, EXx }, 0 },
+ { "vperm%LW", { XM, Vex, EXx }, 0 },
+ },
+
/* EVEX_LEN_0F385A_P_2_W_0 */
{
{ Bad_Opcode },
/* EVEX_LEN_0F385A_P_2_W_0 */
{
{ Bad_Opcode },
@@
-183,6
+197,20
@@
static const struct dis386 evex_len_table[][3] = {
{ "vscatterpf1qpd", { MVexVSIBQWpX }, 0 },
},
{ "vscatterpf1qpd", { MVexVSIBQWpX }, 0 },
},
+ /* EVEX_LEN_0F3A00_P_2_W_1 */
+ {
+ { Bad_Opcode },
+ { "vpermq", { XM, EXx, Ib }, 0 },
+ { "vpermq", { XM, EXx, Ib }, 0 },
+ },
+
+ /* EVEX_LEN_0F3A01_P_2_W_1 */
+ {
+ { Bad_Opcode },
+ { "vpermpd", { XM, EXx, Ib }, 0 },
+ { "vpermpd", { XM, EXx, Ib }, 0 },
+ },
+
/* EVEX_LEN_0F3A14_P_2 */
{
{ "vpextrb", { Edqb, XM, Ib }, 0 },
/* EVEX_LEN_0F3A14_P_2 */
{
{ "vpextrb", { Edqb, XM, Ib }, 0 },
diff --git
a/opcodes/i386-dis-evex-prefix.h
b/opcodes/i386-dis-evex-prefix.h
index f5cce6f370bc8b4b1a798391699cbc1a03b0ad10..25514dbfc7ea071851c8004eb41c1e14527c47a9 100644
(file)
--- a/
opcodes/i386-dis-evex-prefix.h
+++ b/
opcodes/i386-dis-evex-prefix.h
@@
-487,7
+487,7
@@
{
{ Bad_Opcode },
{ Bad_Opcode },
{
{ Bad_Opcode },
{ Bad_Opcode },
- {
"vpermp%XW", { XM, Vex, EXx }, 0
},
+ {
EVEX_LEN_TABLE (EVEX_LEN_0F3816_P_2)
},
},
/* PREFIX_EVEX_0F3819 */
{
},
/* PREFIX_EVEX_0F3819 */
{
@@
-643,7
+643,7
@@
{
{ Bad_Opcode },
{ Bad_Opcode },
{
{ Bad_Opcode },
{ Bad_Opcode },
- {
"vperm%LW", { XM, Vex, EXx }, 0
},
+ {
EVEX_LEN_TABLE (EVEX_LEN_0F3836_P_2)
},
},
/* PREFIX_EVEX_0F3837 */
{
},
/* PREFIX_EVEX_0F3837 */
{
diff --git
a/opcodes/i386-dis-evex-w.h
b/opcodes/i386-dis-evex-w.h
index 72cd648e68feff96391fd0e4adf9fd7ea304a3c2..b388defdd87436ca771fe23d917b9ce977829f14 100644
(file)
--- a/
opcodes/i386-dis-evex-w.h
+++ b/
opcodes/i386-dis-evex-w.h
@@
-688,12
+688,12
@@
/* EVEX_W_0F3A00_P_2 */
{
{ Bad_Opcode },
/* EVEX_W_0F3A00_P_2 */
{
{ Bad_Opcode },
- {
"vpermq", { XM, EXx, Ib }, 0
},
+ {
EVEX_LEN_TABLE (EVEX_LEN_0F3A00_P_2_W_1)
},
},
/* EVEX_W_0F3A01_P_2 */
{
{ Bad_Opcode },
},
/* EVEX_W_0F3A01_P_2 */
{
{ Bad_Opcode },
- {
"vpermpd", { XM, EXx, Ib }, 0
},
+ {
EVEX_LEN_TABLE (EVEX_LEN_0F3A01_P_2_W_1)
},
},
/* EVEX_W_0F3A05_P_2 */
{
},
/* EVEX_W_0F3A05_P_2 */
{
diff --git
a/opcodes/i386-dis.c
b/opcodes/i386-dis.c
index 25a2f13d09ab4235cc0c653c7bfe5d3051506d96..58fa21c9362f91553e867dada1730af85c7c9399 100644
(file)
--- a/
opcodes/i386-dis.c
+++ b/
opcodes/i386-dis.c
@@
-1833,12
+1833,14
@@
enum
EVEX_LEN_0FC4_P_2,
EVEX_LEN_0FC5_P_2,
EVEX_LEN_0FD6_P_2,
EVEX_LEN_0FC4_P_2,
EVEX_LEN_0FC5_P_2,
EVEX_LEN_0FD6_P_2,
+ EVEX_LEN_0F3816_P_2,
EVEX_LEN_0F3819_P_2_W_0,
EVEX_LEN_0F3819_P_2_W_1,
EVEX_LEN_0F381A_P_2_W_0,
EVEX_LEN_0F381A_P_2_W_1,
EVEX_LEN_0F381B_P_2_W_0,
EVEX_LEN_0F381B_P_2_W_1,
EVEX_LEN_0F3819_P_2_W_0,
EVEX_LEN_0F3819_P_2_W_1,
EVEX_LEN_0F381A_P_2_W_0,
EVEX_LEN_0F381A_P_2_W_1,
EVEX_LEN_0F381B_P_2_W_0,
EVEX_LEN_0F381B_P_2_W_1,
+ EVEX_LEN_0F3836_P_2,
EVEX_LEN_0F385A_P_2_W_0,
EVEX_LEN_0F385A_P_2_W_1,
EVEX_LEN_0F385B_P_2_W_0,
EVEX_LEN_0F385A_P_2_W_0,
EVEX_LEN_0F385A_P_2_W_1,
EVEX_LEN_0F385B_P_2_W_0,
@@
-1855,6
+1857,8
@@
enum
EVEX_LEN_0F38C7_R_5_P_2_W_1,
EVEX_LEN_0F38C7_R_6_P_2_W_0,
EVEX_LEN_0F38C7_R_6_P_2_W_1,
EVEX_LEN_0F38C7_R_5_P_2_W_1,
EVEX_LEN_0F38C7_R_6_P_2_W_0,
EVEX_LEN_0F38C7_R_6_P_2_W_1,
+ EVEX_LEN_0F3A00_P_2_W_1,
+ EVEX_LEN_0F3A01_P_2_W_1,
EVEX_LEN_0F3A14_P_2,
EVEX_LEN_0F3A15_P_2,
EVEX_LEN_0F3A16_P_2,
EVEX_LEN_0F3A14_P_2,
EVEX_LEN_0F3A15_P_2,
EVEX_LEN_0F3A16_P_2,
This page took
0.031979 seconds
and
4
git commands to generate.