mirror of
https://github.com/espressif/binutils-gdb.git
synced 2025-09-10 08:02:20 +08:00
i386: Check vector length for vshufXXX/vinsertXXX/vextractXXX
Since not all vector lengths are supported by vshufXXX, vinsertXXX and vextractXXX, decode them only with supported vector lengths. gas/ PR binutils/24691 * testsuite/gas/i386/disassem.s: Add test for vshuff32x4 with invalid vector length. * testsuite/gas/i386/x86-64-disassem.s: Likewise. * testsuite/gas/i386/disassem.d: Updated. * testsuite/gas/i386/x86-64-disassem.d: Likewise. opcodes/ PR binutils/24691 * i386-dis-evex.h (evex_table): Update EVEX_W_0F3A23_P_2, EVEX_W_0F3A38_P_2, EVEX_W_0F3A39_P_2, EVEX_W_0F3A3A_P_2, EVEX_W_0F3A3B_P_2 and EVEX_W_0F3A43_P_2. (evex_len_table): Add EVEX_LEN_0F3A23_P_2_W_0, EVEX_LEN_0F3A23_P_2_W_1, EVEX_LEN_0F3A38_P_2_W_0, EVEX_LEN_0F3A38_P_2_W_1, EVEX_LEN_0F3A39_P_2_W_0, EVEX_LEN_0F3A39_P_2_W_1, EVEX_LEN_0F3A3A_P_2_W_0, EVEX_LEN_0F3A3A_P_2_W_1, EVEX_LEN_0F3A3B_P_2_W_0, EVEX_LEN_0F3A3B_P_2_W_1, EVEX_LEN_0F3A43_P_2_W_0 and EVEX_LEN_0F3A43_P_2_W_1. * i386-dis.c (EVEX_LEN_0F3A23_P_2_W_0): New enum. (EVEX_LEN_0F3A23_P_2_W_1): Likewise. (EVEX_LEN_0F3A38_P_2_W_0): Likewise. (EVEX_LEN_0F3A38_P_2_W_1): Likewise. (EVEX_LEN_0F3A39_P_2_W_0): Likewise. (EVEX_LEN_0F3A39_P_2_W_1): Likewise. (EVEX_LEN_0F3A3A_P_2_W_0): Likewise. (EVEX_LEN_0F3A3A_P_2_W_1): Likewise. (EVEX_LEN_0F3A3B_P_2_W_0): Likewise. (EVEX_LEN_0F3A3B_P_2_W_1): Likewise. (EVEX_LEN_0F3A43_P_2_W_0): Likewise. (EVEX_LEN_0F3A43_P_2_W_1): Likewise.
This commit is contained in:
@ -1,3 +1,29 @@
|
||||
2019-06-17 H.J. Lu <hongjiu.lu@intel.com>
|
||||
|
||||
PR binutils/24691
|
||||
* i386-dis-evex.h (evex_table): Update EVEX_W_0F3A23_P_2,
|
||||
EVEX_W_0F3A38_P_2, EVEX_W_0F3A39_P_2, EVEX_W_0F3A3A_P_2,
|
||||
EVEX_W_0F3A3B_P_2 and EVEX_W_0F3A43_P_2.
|
||||
(evex_len_table): Add EVEX_LEN_0F3A23_P_2_W_0,
|
||||
EVEX_LEN_0F3A23_P_2_W_1, EVEX_LEN_0F3A38_P_2_W_0,
|
||||
EVEX_LEN_0F3A38_P_2_W_1, EVEX_LEN_0F3A39_P_2_W_0,
|
||||
EVEX_LEN_0F3A39_P_2_W_1, EVEX_LEN_0F3A3A_P_2_W_0,
|
||||
EVEX_LEN_0F3A3A_P_2_W_1, EVEX_LEN_0F3A3B_P_2_W_0,
|
||||
EVEX_LEN_0F3A3B_P_2_W_1, EVEX_LEN_0F3A43_P_2_W_0 and
|
||||
EVEX_LEN_0F3A43_P_2_W_1.
|
||||
* i386-dis.c (EVEX_LEN_0F3A23_P_2_W_0): New enum.
|
||||
(EVEX_LEN_0F3A23_P_2_W_1): Likewise.
|
||||
(EVEX_LEN_0F3A38_P_2_W_0): Likewise.
|
||||
(EVEX_LEN_0F3A38_P_2_W_1): Likewise.
|
||||
(EVEX_LEN_0F3A39_P_2_W_0): Likewise.
|
||||
(EVEX_LEN_0F3A39_P_2_W_1): Likewise.
|
||||
(EVEX_LEN_0F3A3A_P_2_W_0): Likewise.
|
||||
(EVEX_LEN_0F3A3A_P_2_W_1): Likewise.
|
||||
(EVEX_LEN_0F3A3B_P_2_W_0): Likewise.
|
||||
(EVEX_LEN_0F3A3B_P_2_W_1): Likewise.
|
||||
(EVEX_LEN_0F3A43_P_2_W_0): Likewise.
|
||||
(EVEX_LEN_0F3A43_P_2_W_1): Likewise.
|
||||
|
||||
2019-06-14 Nick Clifton <nickc@redhat.com>
|
||||
|
||||
* po/fr.po; Updated French translation.
|
||||
|
@ -3940,28 +3940,28 @@ static const struct dis386 evex_table[][256] = {
|
||||
},
|
||||
/* EVEX_W_0F3A23_P_2 */
|
||||
{
|
||||
{ "vshuff32x4", { XM, Vex, EXx, Ib }, 0 },
|
||||
{ "vshuff64x2", { XM, Vex, EXx, Ib }, 0 },
|
||||
{ EVEX_LEN_TABLE (EVEX_LEN_0F3A23_P_2_W_0) },
|
||||
{ EVEX_LEN_TABLE (EVEX_LEN_0F3A23_P_2_W_1) },
|
||||
},
|
||||
/* EVEX_W_0F3A38_P_2 */
|
||||
{
|
||||
{ "vinserti32x4", { XM, Vex, EXxmm, Ib }, 0 },
|
||||
{ "vinserti64x2", { XM, Vex, EXxmm, Ib }, 0 },
|
||||
{ EVEX_LEN_TABLE (EVEX_LEN_0F3A38_P_2_W_0) },
|
||||
{ EVEX_LEN_TABLE (EVEX_LEN_0F3A38_P_2_W_1) },
|
||||
},
|
||||
/* EVEX_W_0F3A39_P_2 */
|
||||
{
|
||||
{ "vextracti32x4", { EXxmm, XM, Ib }, 0 },
|
||||
{ "vextracti64x2", { EXxmm, XM, Ib }, 0 },
|
||||
{ EVEX_LEN_TABLE (EVEX_LEN_0F3A39_P_2_W_0) },
|
||||
{ EVEX_LEN_TABLE (EVEX_LEN_0F3A39_P_2_W_1) },
|
||||
},
|
||||
/* EVEX_W_0F3A3A_P_2 */
|
||||
{
|
||||
{ "vinserti32x8", { XM, Vex, EXxmmq, Ib }, 0 },
|
||||
{ "vinserti64x4", { XM, Vex, EXxmmq, Ib }, 0 },
|
||||
{ EVEX_LEN_TABLE (EVEX_LEN_0F3A3A_P_2_W_0) },
|
||||
{ EVEX_LEN_TABLE (EVEX_LEN_0F3A3A_P_2_W_1) },
|
||||
},
|
||||
/* EVEX_W_0F3A3B_P_2 */
|
||||
{
|
||||
{ "vextracti32x8", { EXxmmq, XM, Ib }, 0 },
|
||||
{ "vextracti64x4", { EXxmmq, XM, Ib }, 0 },
|
||||
{ EVEX_LEN_TABLE (EVEX_LEN_0F3A3B_P_2_W_0) },
|
||||
{ EVEX_LEN_TABLE (EVEX_LEN_0F3A3B_P_2_W_1) },
|
||||
},
|
||||
/* EVEX_W_0F3A3E_P_2 */
|
||||
{
|
||||
@ -3979,8 +3979,8 @@ static const struct dis386 evex_table[][256] = {
|
||||
},
|
||||
/* EVEX_W_0F3A43_P_2 */
|
||||
{
|
||||
{ "vshufi32x4", { XM, Vex, EXx, Ib }, 0 },
|
||||
{ "vshufi64x2", { XM, Vex, EXx, Ib }, 0 },
|
||||
{ EVEX_LEN_TABLE (EVEX_LEN_0F3A43_P_2_W_0) },
|
||||
{ EVEX_LEN_TABLE (EVEX_LEN_0F3A43_P_2_W_1) },
|
||||
},
|
||||
/* EVEX_W_0F3A50_P_2 */
|
||||
{
|
||||
@ -4185,4 +4185,88 @@ static const struct dis386 evex_table[][256] = {
|
||||
{ "vextractf64x4", { EXxmmq, XM, Ib }, 0 },
|
||||
},
|
||||
|
||||
/* EVEX_LEN_0F3A23_P_2_W_0 */
|
||||
{
|
||||
{ Bad_Opcode },
|
||||
{ "vshuff32x4", { XM, Vex, EXx, Ib }, 0 },
|
||||
{ "vshuff32x4", { XM, Vex, EXx, Ib }, 0 },
|
||||
},
|
||||
|
||||
/* EVEX_LEN_0F3A23_P_2_W_1 */
|
||||
{
|
||||
{ Bad_Opcode },
|
||||
{ "vshuff64x2", { XM, Vex, EXx, Ib }, 0 },
|
||||
{ "vshuff64x2", { XM, Vex, EXx, Ib }, 0 },
|
||||
},
|
||||
|
||||
/* EVEX_LEN_0F3A38_P_2_W_0 */
|
||||
{
|
||||
{ Bad_Opcode },
|
||||
{ "vinserti32x4", { XM, Vex, EXxmm, Ib }, 0 },
|
||||
{ "vinserti32x4", { XM, Vex, EXxmm, Ib }, 0 },
|
||||
},
|
||||
|
||||
/* EVEX_LEN_0F3A38_P_2_W_1 */
|
||||
{
|
||||
{ Bad_Opcode },
|
||||
{ "vinserti64x2", { XM, Vex, EXxmm, Ib }, 0 },
|
||||
{ "vinserti64x2", { XM, Vex, EXxmm, Ib }, 0 },
|
||||
},
|
||||
|
||||
/* EVEX_LEN_0F3A39_P_2_W_0 */
|
||||
{
|
||||
{ Bad_Opcode },
|
||||
{ "vextracti32x4", { EXxmm, XM, Ib }, 0 },
|
||||
{ "vextracti32x4", { EXxmm, XM, Ib }, 0 },
|
||||
},
|
||||
|
||||
/* EVEX_LEN_0F3A39_P_2_W_1 */
|
||||
{
|
||||
{ Bad_Opcode },
|
||||
{ "vextracti64x2", { EXxmm, XM, Ib }, 0 },
|
||||
{ "vextracti64x2", { EXxmm, XM, Ib }, 0 },
|
||||
},
|
||||
|
||||
/* EVEX_LEN_0F3A3A_P_2_W_0 */
|
||||
{
|
||||
{ Bad_Opcode },
|
||||
{ "vinserti32x8", { XM, Vex, EXxmmq, Ib }, 0 },
|
||||
{ "vinserti32x8", { XM, Vex, EXxmmq, Ib }, 0 },
|
||||
},
|
||||
|
||||
/* EVEX_LEN_0F3A3A_P_2_W_1 */
|
||||
{
|
||||
{ Bad_Opcode },
|
||||
{ "vinserti64x4", { XM, Vex, EXxmmq, Ib }, 0 },
|
||||
{ "vinserti64x4", { XM, Vex, EXxmmq, Ib }, 0 },
|
||||
},
|
||||
|
||||
/* EVEX_LEN_0F3A3B_P_2_W_0 */
|
||||
{
|
||||
{ Bad_Opcode },
|
||||
{ "vextracti32x8", { EXxmmq, XM, Ib }, 0 },
|
||||
{ "vextracti32x8", { EXxmmq, XM, Ib }, 0 },
|
||||
},
|
||||
|
||||
/* EVEX_LEN_0F3A3B_P_2_W_1 */
|
||||
{
|
||||
{ Bad_Opcode },
|
||||
{ "vextracti64x4", { EXxmmq, XM, Ib }, 0 },
|
||||
{ "vextracti64x4", { EXxmmq, XM, Ib }, 0 },
|
||||
},
|
||||
|
||||
/* EVEX_LEN_0F3A43_P_2_W_0 */
|
||||
{
|
||||
{ Bad_Opcode },
|
||||
{ "vshufi32x4", { XM, Vex, EXx, Ib }, 0 },
|
||||
{ "vshufi32x4", { XM, Vex, EXx, Ib }, 0 },
|
||||
},
|
||||
|
||||
/* EVEX_LEN_0F3A43_P_2_W_1 */
|
||||
{
|
||||
{ Bad_Opcode },
|
||||
{ "vshufi64x2", { XM, Vex, EXx, Ib }, 0 },
|
||||
{ "vshufi64x2", { XM, Vex, EXx, Ib }, 0 },
|
||||
},
|
||||
|
||||
#endif /* NEED_EVEX_LEN_TABLE */
|
||||
|
@ -1945,7 +1945,19 @@ enum
|
||||
EVEX_LEN_0F3A1A_P_2_W_0,
|
||||
EVEX_LEN_0F3A1A_P_2_W_1,
|
||||
EVEX_LEN_0F3A1B_P_2_W_0,
|
||||
EVEX_LEN_0F3A1B_P_2_W_1
|
||||
EVEX_LEN_0F3A1B_P_2_W_1,
|
||||
EVEX_LEN_0F3A23_P_2_W_0,
|
||||
EVEX_LEN_0F3A23_P_2_W_1,
|
||||
EVEX_LEN_0F3A38_P_2_W_0,
|
||||
EVEX_LEN_0F3A38_P_2_W_1,
|
||||
EVEX_LEN_0F3A39_P_2_W_0,
|
||||
EVEX_LEN_0F3A39_P_2_W_1,
|
||||
EVEX_LEN_0F3A3A_P_2_W_0,
|
||||
EVEX_LEN_0F3A3A_P_2_W_1,
|
||||
EVEX_LEN_0F3A3B_P_2_W_0,
|
||||
EVEX_LEN_0F3A3B_P_2_W_1,
|
||||
EVEX_LEN_0F3A43_P_2_W_0,
|
||||
EVEX_LEN_0F3A43_P_2_W_1
|
||||
};
|
||||
|
||||
enum
|
||||
|
Reference in New Issue
Block a user