aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJan Beulich <jbeulich@suse.com>2021-03-10 08:18:24 +0100
committerJan Beulich <jbeulich@suse.com>2021-03-10 08:18:24 +0100
commit066f82b96a4902b9f4f76dfc8d24f8d73ceeef0f (patch)
tree8d917b84badb62b27971af72db81d8a05ece397f
parentfc681dd6a1264a1560a711a6b69cb5a229d2316a (diff)
downloadbinutils-066f82b96a4902b9f4f76dfc8d24f8d73ceeef0f.zip
binutils-066f82b96a4902b9f4f76dfc8d24f8d73ceeef0f.tar.gz
binutils-066f82b96a4902b9f4f76dfc8d24f8d73ceeef0f.tar.bz2
x86: reuse VEX entries for EVEX vperm{q,pd}
By matching VEX decode order (L before W), some EVEX entries can refer back to VEX ones instead of carrying duplicates.
-rw-r--r--opcodes/ChangeLog10
-rw-r--r--opcodes/i386-dis-evex-len.h12
-rw-r--r--opcodes/i386-dis-evex-w.h10
-rw-r--r--opcodes/i386-dis-evex.h4
-rw-r--r--opcodes/i386-dis.c6
5 files changed, 20 insertions, 22 deletions
diff --git a/opcodes/ChangeLog b/opcodes/ChangeLog
index 1fbd377..c40ca0f 100644
--- a/opcodes/ChangeLog
+++ b/opcodes/ChangeLog
@@ -1,5 +1,15 @@
2021-03-10 Jan Beulich <jbeulich@suse.com>
+ * opcodes/i386-dis.c (EVEX_LEN_0F3A00_W_1, EVEX_LEN_0F3A01_W_1):
+ Rename to EVEX_LEN_0F3A00 and EVEX_LEN_0F3A01 respectively.
+ EVEX_W_0F3A00, EVEX_W_0F3A01): Delete.
+ * i386-dis-evex.h (evex_table): Adjust opcode 0F3A00 and 0F3A01
+ entries.
+ * i386-dis-evex-len.h (evex_len_table): Likewise.
+ * i386-dis-evex-w.h: Remove opcode 0F3A00 and 0F3A01 entries.
+
+2021-03-10 Jan Beulich <jbeulich@suse.com>
+
* opcodes/i386-dis.c (REG_EVEX_0F38C6, REG_EVEX_0F38C7,
MOD_EVEX_0F381A_W_0, MOD_EVEX_0F381A_W_1, MOD_EVEX_0F381B_W_0,
MOD_EVEX_0F381B_W_1, MOD_EVEX_0F385A_W_0, MOD_EVEX_0F385A_W_1,
diff --git a/opcodes/i386-dis-evex-len.h b/opcodes/i386-dis-evex-len.h
index cef8ad9..01a8ee5 100644
--- a/opcodes/i386-dis-evex-len.h
+++ b/opcodes/i386-dis-evex-len.h
@@ -92,18 +92,18 @@ static const struct dis386 evex_len_table[][3] = {
{ VEX_W_TABLE (EVEX_W_0F38C7_M_0_L_2) },
},
- /* EVEX_LEN_0F3A00_W_1 */
+ /* EVEX_LEN_0F3A00 */
{
{ Bad_Opcode },
- { "vpermq", { XM, EXx, Ib }, PREFIX_DATA },
- { "vpermq", { XM, EXx, Ib }, PREFIX_DATA },
+ { VEX_W_TABLE (VEX_W_0F3A00_L_1) },
+ { VEX_W_TABLE (VEX_W_0F3A00_L_1) },
},
- /* EVEX_LEN_0F3A01_W_1 */
+ /* EVEX_LEN_0F3A01 */
{
{ Bad_Opcode },
- { "vpermpd", { XM, EXx, Ib }, PREFIX_DATA },
- { "vpermpd", { XM, EXx, Ib }, PREFIX_DATA },
+ { VEX_W_TABLE (VEX_W_0F3A01_L_1) },
+ { VEX_W_TABLE (VEX_W_0F3A01_L_1) },
},
/* EVEX_LEN_0F3A14 */
diff --git a/opcodes/i386-dis-evex-w.h b/opcodes/i386-dis-evex-w.h
index e28c845..0b9c259 100644
--- a/opcodes/i386-dis-evex-w.h
+++ b/opcodes/i386-dis-evex-w.h
@@ -580,16 +580,6 @@
{ REG_TABLE (REG_EVEX_0F38C7_M_0_L_2_W_0) },
{ REG_TABLE (REG_EVEX_0F38C7_M_0_L_2_W_1) },
},
- /* EVEX_W_0F3A00 */
- {
- { Bad_Opcode },
- { EVEX_LEN_TABLE (EVEX_LEN_0F3A00_W_1) },
- },
- /* EVEX_W_0F3A01 */
- {
- { Bad_Opcode },
- { EVEX_LEN_TABLE (EVEX_LEN_0F3A01_W_1) },
- },
/* EVEX_W_0F3A05 */
{
{ Bad_Opcode },
diff --git a/opcodes/i386-dis-evex.h b/opcodes/i386-dis-evex.h
index 013a338..27446c4 100644
--- a/opcodes/i386-dis-evex.h
+++ b/opcodes/i386-dis-evex.h
@@ -584,8 +584,8 @@ static const struct dis386 evex_table[][256] = {
/* EVEX_0F3A */
{
/* 00 */
- { VEX_W_TABLE (EVEX_W_0F3A00) },
- { VEX_W_TABLE (EVEX_W_0F3A01) },
+ { EVEX_LEN_TABLE (EVEX_LEN_0F3A00) },
+ { EVEX_LEN_TABLE (EVEX_LEN_0F3A01) },
{ Bad_Opcode },
{ "valign%DQ", { XM, Vex, EXx, Ib }, PREFIX_DATA },
{ VEX_W_TABLE (VEX_W_0F3A04) },
diff --git a/opcodes/i386-dis.c b/opcodes/i386-dis.c
index 25b9c44..1a5ea0e 100644
--- a/opcodes/i386-dis.c
+++ b/opcodes/i386-dis.c
@@ -1349,8 +1349,8 @@ enum
EVEX_LEN_0F385B_M_0,
EVEX_LEN_0F38C6_M_0,
EVEX_LEN_0F38C7_M_0,
- EVEX_LEN_0F3A00_W_1,
- EVEX_LEN_0F3A01_W_1,
+ EVEX_LEN_0F3A00,
+ EVEX_LEN_0F3A01,
EVEX_LEN_0F3A14,
EVEX_LEN_0F3A15,
EVEX_LEN_0F3A16,
@@ -1614,8 +1614,6 @@ enum
EVEX_W_0F38A3,
EVEX_W_0F38C7_M_0_L_2,
- EVEX_W_0F3A00,
- EVEX_W_0F3A01,
EVEX_W_0F3A05,
EVEX_W_0F3A08,
EVEX_W_0F3A09,