diff options
author | H.J. Lu <hjl.tools@gmail.com> | 2018-09-17 09:33:20 -0700 |
---|---|---|
committer | H.J. Lu <hjl.tools@gmail.com> | 2018-09-17 09:33:35 -0700 |
commit | 04e2a1829ea137ac23ac96e98fd60f9d720dcdcb (patch) | |
tree | 6d9faae8d1067468634733e7b98c690cf8eae58d /opcodes/i386-dis-evex.h | |
parent | d5f787c2bc90793c1d781b7291758e77067daad5 (diff) | |
download | fsf-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.h | 30 |
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 */ |