mirror of
https://sourceware.org/git/binutils-gdb.git
synced 2024-11-24 02:24:46 +08:00
x86: remove ModRM.mod decoding layer from AVX512F VMOVS{S,D}
Just like their AVX counterparts they can utilize XMVexScalar / EXdVexScalarS / EXqVexScalarS taking care of dropping the middle operand for their memory forms.
This commit is contained in:
parent
219920a7c4
commit
36cc073ef4
@ -1,3 +1,22 @@
|
||||
2019-07-01 Jan Beulich <jbeulich@suse.com>
|
||||
|
||||
* i386-dis.c (EXdScalarS, MOD_EVEX_0F10_PREFIX_1,
|
||||
MOD_EVEX_0F10_PREFIX_3, MOD_EVEX_0F11_PREFIX_1,
|
||||
MOD_EVEX_0F11_PREFIX_3, EVEX_W_0F10_P_1_M_0,
|
||||
EVEX_W_0F10_P_1_M_1, EVEX_W_0F10_P_3_M_0, EVEX_W_0F10_P_3_M_1,
|
||||
EVEX_W_0F11_P_1_M_0, EVEX_W_0F11_P_1_M_1, EVEX_W_0F11_P_3_M_0,
|
||||
EVEX_W_0F11_P_3_M_1): Delete.
|
||||
(EVEX_W_0F10_P_1, EVEX_W_0F10_P_3, EVEX_W_0F11_P_1,
|
||||
EVEX_W_0F11_P_3): New.
|
||||
* i386-dis-evex-mod.h: Remove MOD_EVEX_0F10_PREFIX_1,
|
||||
MOD_EVEX_0F10_PREFIX_3, MOD_EVEX_0F11_PREFIX_1, and
|
||||
MOD_EVEX_0F11_PREFIX_3 table entries.
|
||||
* i386-dis-evex-prefix.h: Adjust PREFIX_EVEX_0F10 and
|
||||
PREFIX_EVEX_0F11 table entries.
|
||||
* i386-dis-evex-w.h: Replace EVEX_W_0F10_P_1_M_{0,1},
|
||||
EVEX_W_0F10_P_3_M_{0,1}, EVEX_W_0F11_P_1_M_{0,1}, and
|
||||
EVEX_W_0F11_P_3_M_{0,1} table entries.
|
||||
|
||||
2019-07-01 Jan Beulich <jbeulich@suse.com>
|
||||
|
||||
* i386-dis.c (EXdVex, EXdVexS, EXqVex, EXqVexS, XMVex):
|
||||
|
@ -1,23 +1,3 @@
|
||||
{
|
||||
/* MOD_EVEX_0F10_PREFIX_1 */
|
||||
{ VEX_W_TABLE (EVEX_W_0F10_P_1_M_0) },
|
||||
{ VEX_W_TABLE (EVEX_W_0F10_P_1_M_1) },
|
||||
},
|
||||
{
|
||||
/* MOD_EVEX_0F10_PREFIX_3 */
|
||||
{ VEX_W_TABLE (EVEX_W_0F10_P_3_M_0) },
|
||||
{ VEX_W_TABLE (EVEX_W_0F10_P_3_M_1) },
|
||||
},
|
||||
{
|
||||
/* MOD_EVEX_0F11_PREFIX_1 */
|
||||
{ VEX_W_TABLE (EVEX_W_0F11_P_1_M_0) },
|
||||
{ VEX_W_TABLE (EVEX_W_0F11_P_1_M_1) },
|
||||
},
|
||||
{
|
||||
/* MOD_EVEX_0F11_PREFIX_3 */
|
||||
{ VEX_W_TABLE (EVEX_W_0F11_P_3_M_0) },
|
||||
{ VEX_W_TABLE (EVEX_W_0F11_P_3_M_1) },
|
||||
},
|
||||
{
|
||||
/* MOD_EVEX_0F12_PREFIX_0 */
|
||||
{ VEX_W_TABLE (EVEX_W_0F12_P_0_M_0) },
|
||||
|
@ -1,16 +1,16 @@
|
||||
/* PREFIX_EVEX_0F10 */
|
||||
{
|
||||
{ VEX_W_TABLE (EVEX_W_0F10_P_0) },
|
||||
{ MOD_TABLE (MOD_EVEX_0F10_PREFIX_1) },
|
||||
{ VEX_W_TABLE (EVEX_W_0F10_P_1) },
|
||||
{ VEX_W_TABLE (EVEX_W_0F10_P_2) },
|
||||
{ MOD_TABLE (MOD_EVEX_0F10_PREFIX_3) },
|
||||
{ VEX_W_TABLE (EVEX_W_0F10_P_3) },
|
||||
},
|
||||
/* PREFIX_EVEX_0F11 */
|
||||
{
|
||||
{ VEX_W_TABLE (EVEX_W_0F11_P_0) },
|
||||
{ MOD_TABLE (MOD_EVEX_0F11_PREFIX_1) },
|
||||
{ VEX_W_TABLE (EVEX_W_0F11_P_1) },
|
||||
{ VEX_W_TABLE (EVEX_W_0F11_P_2) },
|
||||
{ MOD_TABLE (MOD_EVEX_0F11_PREFIX_3) },
|
||||
{ VEX_W_TABLE (EVEX_W_0F11_P_3) },
|
||||
},
|
||||
/* PREFIX_EVEX_0F12 */
|
||||
{
|
||||
|
@ -2,55 +2,37 @@
|
||||
{
|
||||
{ "vmovups", { XM, EXEvexXNoBcst }, 0 },
|
||||
},
|
||||
/* EVEX_W_0F10_P_1_M_0 */
|
||||
/* EVEX_W_0F10_P_1 */
|
||||
{
|
||||
{ "vmovss", { XMScalar, EXdScalar }, 0 },
|
||||
},
|
||||
/* EVEX_W_0F10_P_1_M_1 */
|
||||
{
|
||||
{ "vmovss", { XMScalar, VexScalar, EXxmm_md }, 0 },
|
||||
{ "vmovss", { XMVexScalar, VexScalar, EXdScalar }, 0 },
|
||||
},
|
||||
/* EVEX_W_0F10_P_2 */
|
||||
{
|
||||
{ Bad_Opcode },
|
||||
{ "vmovupd", { XM, EXEvexXNoBcst }, 0 },
|
||||
},
|
||||
/* EVEX_W_0F10_P_3_M_0 */
|
||||
/* EVEX_W_0F10_P_3 */
|
||||
{
|
||||
{ Bad_Opcode },
|
||||
{ "vmovsd", { XMScalar, EXqScalar }, 0 },
|
||||
},
|
||||
/* EVEX_W_0F10_P_3_M_1 */
|
||||
{
|
||||
{ Bad_Opcode },
|
||||
{ "vmovsd", { XMScalar, VexScalar, EXxmm_mq }, 0 },
|
||||
{ "vmovsd", { XMVexScalar, VexScalar, EXqScalar }, 0 },
|
||||
},
|
||||
/* EVEX_W_0F11_P_0 */
|
||||
{
|
||||
{ "vmovups", { EXxS, XM }, 0 },
|
||||
},
|
||||
/* EVEX_W_0F11_P_1_M_0 */
|
||||
/* EVEX_W_0F11_P_1 */
|
||||
{
|
||||
{ "vmovss", { EXdScalarS, XMScalar }, 0 },
|
||||
},
|
||||
/* EVEX_W_0F11_P_1_M_1 */
|
||||
{
|
||||
{ "vmovss", { EXxS, Vex, XMScalar }, 0 },
|
||||
{ "vmovss", { EXdVexScalarS, VexScalar, XMScalar }, 0 },
|
||||
},
|
||||
/* EVEX_W_0F11_P_2 */
|
||||
{
|
||||
{ Bad_Opcode },
|
||||
{ "vmovupd", { EXxS, XM }, 0 },
|
||||
},
|
||||
/* EVEX_W_0F11_P_3_M_0 */
|
||||
/* EVEX_W_0F11_P_3 */
|
||||
{
|
||||
{ Bad_Opcode },
|
||||
{ "vmovsd", { EXqScalarS, XMScalar }, 0 },
|
||||
},
|
||||
/* EVEX_W_0F11_P_3_M_1 */
|
||||
{
|
||||
{ Bad_Opcode },
|
||||
{ "vmovsd", { EXxS, Vex, XMScalar }, 0 },
|
||||
{ "vmovsd", { EXqVexScalarS, VexScalar, XMScalar }, 0 },
|
||||
},
|
||||
/* EVEX_W_0F12_P_0_M_0 */
|
||||
{
|
||||
|
@ -385,7 +385,6 @@ fetch_data (struct disassemble_info *info, bfd_byte *addr)
|
||||
#define EXd { OP_EX, d_mode }
|
||||
#define EXdScalar { OP_EX, d_scalar_mode }
|
||||
#define EXdS { OP_EX, d_swap_mode }
|
||||
#define EXdScalarS { OP_EX, d_scalar_swap_mode }
|
||||
#define EXq { OP_EX, q_mode }
|
||||
#define EXqScalar { OP_EX, q_scalar_mode }
|
||||
#define EXqScalarS { OP_EX, q_scalar_swap_mode }
|
||||
@ -932,10 +931,6 @@ enum
|
||||
MOD_VEX_W_0_0F3A33_P_2_LEN_0,
|
||||
MOD_VEX_W_1_0F3A33_P_2_LEN_0,
|
||||
|
||||
MOD_EVEX_0F10_PREFIX_1,
|
||||
MOD_EVEX_0F10_PREFIX_3,
|
||||
MOD_EVEX_0F11_PREFIX_1,
|
||||
MOD_EVEX_0F11_PREFIX_3,
|
||||
MOD_EVEX_0F12_PREFIX_0,
|
||||
MOD_EVEX_0F16_PREFIX_0,
|
||||
MOD_EVEX_0F38C6_REG_1,
|
||||
@ -2042,17 +2037,13 @@ enum
|
||||
VEX_W_0F3ACF_P_2,
|
||||
|
||||
EVEX_W_0F10_P_0,
|
||||
EVEX_W_0F10_P_1_M_0,
|
||||
EVEX_W_0F10_P_1_M_1,
|
||||
EVEX_W_0F10_P_1,
|
||||
EVEX_W_0F10_P_2,
|
||||
EVEX_W_0F10_P_3_M_0,
|
||||
EVEX_W_0F10_P_3_M_1,
|
||||
EVEX_W_0F10_P_3,
|
||||
EVEX_W_0F11_P_0,
|
||||
EVEX_W_0F11_P_1_M_0,
|
||||
EVEX_W_0F11_P_1_M_1,
|
||||
EVEX_W_0F11_P_1,
|
||||
EVEX_W_0F11_P_2,
|
||||
EVEX_W_0F11_P_3_M_0,
|
||||
EVEX_W_0F11_P_3_M_1,
|
||||
EVEX_W_0F11_P_3,
|
||||
EVEX_W_0F12_P_0_M_0,
|
||||
EVEX_W_0F12_P_0_M_1,
|
||||
EVEX_W_0F12_P_1,
|
||||
|
Loading…
Reference in New Issue
Block a user