mirror of
https://sourceware.org/git/binutils-gdb.git
synced 2024-11-30 13:33:53 +08:00
x86: AVX512 VPERM{D,Q,PS,PD} insns need to honor EVEX.L'L
Just like (where they exist) their AVX counterparts do for VEX.L. For all of them the 128-bit forms are invalid.
This commit is contained in:
parent
e74d9fa9cf
commit
3a57774c7b
@ -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,
|
||||
|
@ -29,6 +29,13 @@ static const struct dis386 evex_len_table[][3] = {
|
||||
{ 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 },
|
||||
@ -71,6 +78,13 @@ static const struct dis386 evex_len_table[][3] = {
|
||||
{ "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 },
|
||||
@ -183,6 +197,20 @@ static const struct dis386 evex_len_table[][3] = {
|
||||
{ "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 },
|
||||
|
@ -487,7 +487,7 @@
|
||||
{
|
||||
{ Bad_Opcode },
|
||||
{ Bad_Opcode },
|
||||
{ "vpermp%XW", { XM, Vex, EXx }, 0 },
|
||||
{ EVEX_LEN_TABLE (EVEX_LEN_0F3816_P_2) },
|
||||
},
|
||||
/* PREFIX_EVEX_0F3819 */
|
||||
{
|
||||
@ -643,7 +643,7 @@
|
||||
{
|
||||
{ Bad_Opcode },
|
||||
{ Bad_Opcode },
|
||||
{ "vperm%LW", { XM, Vex, EXx }, 0 },
|
||||
{ EVEX_LEN_TABLE (EVEX_LEN_0F3836_P_2) },
|
||||
},
|
||||
/* PREFIX_EVEX_0F3837 */
|
||||
{
|
||||
|
@ -688,12 +688,12 @@
|
||||
/* 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 },
|
||||
{ "vpermpd", { XM, EXx, Ib }, 0 },
|
||||
{ EVEX_LEN_TABLE (EVEX_LEN_0F3A01_P_2_W_1) },
|
||||
},
|
||||
/* EVEX_W_0F3A05_P_2 */
|
||||
{
|
||||
|
@ -1833,12 +1833,14 @@ enum
|
||||
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_0F3836_P_2,
|
||||
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_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,
|
||||
|
Loading…
Reference in New Issue
Block a user