aboutsummaryrefslogtreecommitdiff
path: root/opcodes/i386-dis-evex.h
diff options
context:
space:
mode:
authorH.J. Lu <hjl.tools@gmail.com>2018-09-17 09:33:20 -0700
committerH.J. Lu <hjl.tools@gmail.com>2018-09-17 09:33:35 -0700
commit04e2a1829ea137ac23ac96e98fd60f9d720dcdcb (patch)
tree6d9faae8d1067468634733e7b98c690cf8eae58d /opcodes/i386-dis-evex.h
parentd5f787c2bc90793c1d781b7291758e77067daad5 (diff)
downloadfsf-binutils-gdb-04e2a1829ea137ac23ac96e98fd60f9d720dcdcb.zip
fsf-binutils-gdb-04e2a1829ea137ac23ac96e98fd60f9d720dcdcb.tar.gz
fsf-binutils-gdb-04e2a1829ea137ac23ac96e98fd60f9d720dcdcb.tar.bz2
x86: Set EVex=2 on EVEX.128 only vmovd and vmovq
EVEX "VMOVD xmm1, r32/m32", "VMOVD r32/m32, xmm2", "VMOVQ xmm1, r64/m64", "VMOVD r64/m64, xmm2", "VMOVQ xmm1, xmm2/m64" and "VMOVQ xmm1/m64, xmm2" can only be encoded with EVEX.128. Set EVex=2 on EVEX.128 only vmovd and vmovq. gas/ PR gas/23670 * testsuite/gas/i386/evex-lig-2.d: New file. * testsuite/gas/i386/evex-lig-2.s: Likewise. * testsuite/gas/i386/x86-64-evex-lig-2.d: Likewise. * testsuite/gas/i386/x86-64-evex-lig-2.s: Likewise. * testsuite/gas/i386/i386.exp: Run evex-lig-2 and x86-64-evex-lig-2. opcodes/ PR gas/23670 * i386-dis-evex.h (evex_table): Use EVEX_LEN_0F6E_P_2, EVEX_LEN_0F7E_P_1, EVEX_LEN_0F7E_P_2 and EVEX_LEN_0FD6_P_2. (EVEX_LEN_0F6E_P_2): New EVEX_LEN_TABLE entry. (EVEX_LEN_0F7E_P_1): Likewise. (EVEX_LEN_0F7E_P_2): Likewise. (EVEX_LEN_0FD6_P_2): Likewise. * i386-dis.c (USE_EVEX_LEN_TABLE): New. (EVEX_LEN_TABLE): Likewise. (EVEX_LEN_0F6E_P_2): New enum. (EVEX_LEN_0F7E_P_1): Likewise. (EVEX_LEN_0F7E_P_2): Likewise. (EVEX_LEN_0FD6_P_2): Likewise. (evex_len_table): New. (get_valid_dis386): Handle USE_EVEX_LEN_TABLE. * i386-opc.tbl: Set EVex=2 on EVEX.128 only vmovd and vmovq. * i386-tbl.h: Regenerated.
Diffstat (limited to 'opcodes/i386-dis-evex.h')
-rw-r--r--opcodes/i386-dis-evex.h30
1 files changed, 26 insertions, 4 deletions
diff --git a/opcodes/i386-dis-evex.h b/opcodes/i386-dis-evex.h
index 932f10a..73b6568 100644
--- a/opcodes/i386-dis-evex.h
+++ b/opcodes/i386-dis-evex.h
@@ -1208,7 +1208,7 @@ static const struct dis386 evex_table[][256] = {
{
{ Bad_Opcode },
{ Bad_Opcode },
- { VEX_W_TABLE (EVEX_W_0F6E_P_2) },
+ { EVEX_LEN_TABLE (EVEX_LEN_0F6E_P_2) },
},
/* PREFIX_EVEX_0F6F */
{
@@ -1345,8 +1345,8 @@ static const struct dis386 evex_table[][256] = {
/* PREFIX_EVEX_0F7E */
{
{ Bad_Opcode },
- { VEX_W_TABLE (EVEX_W_0F7E_P_1) },
- { VEX_W_TABLE (EVEX_W_0F7E_P_2) },
+ { EVEX_LEN_TABLE (EVEX_LEN_0F7E_P_1) },
+ { EVEX_LEN_TABLE (EVEX_LEN_0F7E_P_2) },
},
/* PREFIX_EVEX_0F7F */
{
@@ -1414,7 +1414,7 @@ static const struct dis386 evex_table[][256] = {
{
{ Bad_Opcode },
{ Bad_Opcode },
- { VEX_W_TABLE (EVEX_W_0FD6_P_2) },
+ { EVEX_LEN_TABLE (EVEX_LEN_0FD6_P_2) },
},
/* PREFIX_EVEX_0FD8 */
{
@@ -4100,3 +4100,25 @@ static const struct dis386 evex_table[][256] = {
},
#endif /* NEED_MOD_TABLE */
+#ifdef NEED_EVEX_LEN_TABLE
+ /* EVEX_LEN_0F6E_P_2 */
+ {
+ { VEX_W_TABLE (EVEX_W_0F6E_P_2) },
+ },
+
+ /* EVEX_LEN_0F7E_P_1 */
+ {
+ { VEX_W_TABLE (EVEX_W_0F7E_P_1) },
+ },
+
+ /* EVEX_LEN_0F7E_P_2 */
+ {
+ { VEX_W_TABLE (EVEX_W_0F7E_P_2) },
+ },
+
+ /* EVEX_LEN_0FD6_P_2 */
+ {
+ { VEX_W_TABLE (EVEX_W_0FD6_P_2) },
+ },
+
+#endif /* NEED_EVEX_LEN_TABLE */