diff options
author | Jan Beulich <jbeulich@suse.com> | 2020-07-06 13:41:27 +0200 |
---|---|---|
committer | Jan Beulich <jbeulich@suse.com> | 2020-07-06 13:41:27 +0200 |
commit | e74d9fa9cf7cbbcd290b74564d58456611a019bf (patch) | |
tree | 6a390c76c163f5cfe506794d3dd657950f85d0ab /opcodes | |
parent | 6431c8015b1d8a75facbd2d0ec6a4f1e98167f72 (diff) | |
download | fsf-binutils-gdb-e74d9fa9cf7cbbcd290b74564d58456611a019bf.zip fsf-binutils-gdb-e74d9fa9cf7cbbcd290b74564d58456611a019bf.tar.gz fsf-binutils-gdb-e74d9fa9cf7cbbcd290b74564d58456611a019bf.tar.bz2 |
x86: AVX512 extract/insert insns need to honor EVEX.L'L
Just like their AVX counterparts do for VEX.L.
At this occasion also make EVEX.W have the same effect as VEX.W on the
printing of VPINSR{B,W}'s operands, bringing them also in sync with
VPEXTR{B,W}.
Diffstat (limited to 'opcodes')
-rw-r--r-- | opcodes/ChangeLog | 13 | ||||
-rw-r--r-- | opcodes/i386-dis-evex-len.h | 45 | ||||
-rw-r--r-- | opcodes/i386-dis-evex-prefix.h | 16 | ||||
-rw-r--r-- | opcodes/i386-dis-evex-w.h | 2 | ||||
-rw-r--r-- | opcodes/i386-dis.c | 9 |
5 files changed, 76 insertions, 9 deletions
diff --git a/opcodes/ChangeLog b/opcodes/ChangeLog index 296ef26..62f8a08 100644 --- a/opcodes/ChangeLog +++ b/opcodes/ChangeLog @@ -1,5 +1,18 @@ 2020-07-06 Jan Beulich <jbeulich@suse.com> + * i386-dis.c (EVEX_LEN_0FC4_P_2, EVEX_LEN_0FC5_P_2, + EVEX_LEN_0F3A14_P_2, EVEX_LEN_0F3A15_P_2, EVEX_LEN_0F3A16_P_2, + EVEX_LEN_0F3A17_P_2, EVEX_LEN_0F3A20_P_2, + EVEX_LEN_0F3A21_P_2_W_0, EVEX_LEN_0F3A22_P_2): New enumerators. + * i386-dis-evex-len.h (evex_len_table): New EVEX_LEN_0FC4_P_2, + EVEX_LEN_0FC5_P_2, EVEX_LEN_0F3A14_P_2, EVEX_LEN_0F3A15_P_2, + EVEX_LEN_0F3A16_P_2, EVEX_LEN_0F3A17_P_2, EVEX_LEN_0F3A20_P_2, + EVEX_LEN_0F3A21_P_2_W_0, and EVEX_LEN_0F3A22_P_2 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 (PREFIX_EVEX_0F3A1D, EVEX_W_0F3A1D_P_2): Delete. (VEX_W_0F3813_P_2, VEX_W_0F3A1D_P_2): New enumerators. (prefix_table): Reference VEX_W_0F3813_P_2 and VEX_W_0F3A1D_P_2 diff --git a/opcodes/i386-dis-evex-len.h b/opcodes/i386-dis-evex-len.h index ce58199..51ce98f 100644 --- a/opcodes/i386-dis-evex-len.h +++ b/opcodes/i386-dis-evex-len.h @@ -14,6 +14,16 @@ static const struct dis386 evex_len_table[][3] = { { "vmovK", { Edq, XMScalar }, 0 }, }, + /* EVEX_LEN_0FC4_P_2 */ + { + { "vpinsrw", { XM, Vex128, Edqw, Ib }, 0 }, + }, + + /* EVEX_LEN_0FC5_P_2 */ + { + { "vpextrw", { Gdq, XS, Ib }, 0 }, + }, + /* EVEX_LEN_0FD6_P_2 */ { { VEX_W_TABLE (EVEX_W_0FD6_P_2) }, @@ -173,6 +183,26 @@ static const struct dis386 evex_len_table[][3] = { { "vscatterpf1qpd", { MVexVSIBQWpX }, 0 }, }, + /* EVEX_LEN_0F3A14_P_2 */ + { + { "vpextrb", { Edqb, XM, Ib }, 0 }, + }, + + /* EVEX_LEN_0F3A15_P_2 */ + { + { "vpextrw", { Edqw, XM, Ib }, 0 }, + }, + + /* EVEX_LEN_0F3A16_P_2 */ + { + { "vpextrK", { Edq, XM, Ib }, 0 }, + }, + + /* EVEX_LEN_0F3A17_P_2 */ + { + { "vextractps", { Edqd, XMM, Ib }, 0 }, + }, + /* EVEX_LEN_0F3A18_P_2_W_0 */ { { Bad_Opcode }, @@ -229,6 +259,21 @@ static const struct dis386 evex_len_table[][3] = { { "vextractf64x4", { EXxmmq, XM, Ib }, 0 }, }, + /* EVEX_LEN_0F3A20_P_2 */ + { + { "vpinsrb", { XM, Vex128, Edqb, Ib }, 0 }, + }, + + /* EVEX_LEN_0F3A21_P_2_W_0 */ + { + { "vinsertps", { XMM, Vex, EXxmm_md, Ib }, 0 }, + }, + + /* EVEX_LEN_0F3A22_P_2 */ + { + { "vpinsrK", { XM, Vex128, Edq, Ib }, 0 }, + }, + /* EVEX_LEN_0F3A23_P_2_W_0 */ { { Bad_Opcode }, diff --git a/opcodes/i386-dis-evex-prefix.h b/opcodes/i386-dis-evex-prefix.h index 01998c5..f5cce6f 100644 --- a/opcodes/i386-dis-evex-prefix.h +++ b/opcodes/i386-dis-evex-prefix.h @@ -330,13 +330,13 @@ { { Bad_Opcode }, { Bad_Opcode }, - { "vpinsrw", { XM, Vex128, Edw, Ib }, 0 }, + { EVEX_LEN_TABLE (EVEX_LEN_0FC4_P_2) }, }, /* PREFIX_EVEX_0FC5 */ { { Bad_Opcode }, { Bad_Opcode }, - { "vpextrw", { Gdq, XS, Ib }, 0 }, + { EVEX_LEN_TABLE (EVEX_LEN_0FC5_P_2) }, }, /* PREFIX_EVEX_0FD2 */ { @@ -1191,25 +1191,25 @@ { { Bad_Opcode }, { Bad_Opcode }, - { "vpextrb", { Edqb, XM, Ib }, 0 }, + { EVEX_LEN_TABLE (EVEX_LEN_0F3A14_P_2) }, }, /* PREFIX_EVEX_0F3A15 */ { { Bad_Opcode }, { Bad_Opcode }, - { "vpextrw", { Edqw, XM, Ib }, 0 }, + { EVEX_LEN_TABLE (EVEX_LEN_0F3A15_P_2) }, }, /* PREFIX_EVEX_0F3A16 */ { { Bad_Opcode }, { Bad_Opcode }, - { "vpextrK", { Edq, XM, Ib }, 0 }, + { EVEX_LEN_TABLE (EVEX_LEN_0F3A16_P_2) }, }, /* PREFIX_EVEX_0F3A17 */ { { Bad_Opcode }, { Bad_Opcode }, - { "vextractps", { Edqd, XMM, Ib }, 0 }, + { EVEX_LEN_TABLE (EVEX_LEN_0F3A17_P_2) }, }, /* PREFIX_EVEX_0F3A18 */ { @@ -1251,7 +1251,7 @@ { { Bad_Opcode }, { Bad_Opcode }, - { "vpinsrb", { XM, Vex128, Edb, Ib }, 0 }, + { EVEX_LEN_TABLE (EVEX_LEN_0F3A20_P_2) }, }, /* PREFIX_EVEX_0F3A21 */ { @@ -1263,7 +1263,7 @@ { { Bad_Opcode }, { Bad_Opcode }, - { "vpinsrK", { XM, Vex128, Edq, Ib }, 0 }, + { EVEX_LEN_TABLE (EVEX_LEN_0F3A22_P_2) }, }, /* PREFIX_EVEX_0F3A23 */ { diff --git a/opcodes/i386-dis-evex-w.h b/opcodes/i386-dis-evex-w.h index ed7968a..72cd648 100644 --- a/opcodes/i386-dis-evex-w.h +++ b/opcodes/i386-dis-evex-w.h @@ -740,7 +740,7 @@ }, /* EVEX_W_0F3A21_P_2 */ { - { "vinsertps", { XMM, Vex, EXxmm_md, Ib }, 0 }, + { EVEX_LEN_TABLE (EVEX_LEN_0F3A21_P_2_W_0) }, }, /* EVEX_W_0F3A23_P_2 */ { diff --git a/opcodes/i386-dis.c b/opcodes/i386-dis.c index 7f521b2..25a2f13 100644 --- a/opcodes/i386-dis.c +++ b/opcodes/i386-dis.c @@ -1830,6 +1830,8 @@ enum EVEX_LEN_0F6E_P_2 = 0, EVEX_LEN_0F7E_P_1, EVEX_LEN_0F7E_P_2, + EVEX_LEN_0FC4_P_2, + EVEX_LEN_0FC5_P_2, EVEX_LEN_0FD6_P_2, EVEX_LEN_0F3819_P_2_W_0, EVEX_LEN_0F3819_P_2_W_1, @@ -1853,6 +1855,10 @@ 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_0F3A14_P_2, + EVEX_LEN_0F3A15_P_2, + EVEX_LEN_0F3A16_P_2, + EVEX_LEN_0F3A17_P_2, EVEX_LEN_0F3A18_P_2_W_0, EVEX_LEN_0F3A18_P_2_W_1, EVEX_LEN_0F3A19_P_2_W_0, @@ -1861,6 +1867,9 @@ enum EVEX_LEN_0F3A1A_P_2_W_1, EVEX_LEN_0F3A1B_P_2_W_0, EVEX_LEN_0F3A1B_P_2_W_1, + EVEX_LEN_0F3A20_P_2, + EVEX_LEN_0F3A21_P_2_W_0, + EVEX_LEN_0F3A22_P_2, EVEX_LEN_0F3A23_P_2_W_0, EVEX_LEN_0F3A23_P_2_W_1, EVEX_LEN_0F3A38_P_2_W_0, |