diff options
author | Terry Guo <xuepeng.guo@intel.com> | 2018-11-05 13:28:48 +0800 |
---|---|---|
committer | Cui,Lili <lili.cui@intel.com> | 2020-09-23 10:47:44 +0800 |
commit | c4694f172b51a2168b8cc15109ab1b97fc0bcb9c (patch) | |
tree | 1c50e8425fdad64ae7dd733b0f377e392fa3ee52 /opcodes/i386-dis.c | |
parent | 9fcff415820e37db422500d80c78df32fa2f34f6 (diff) | |
download | binutils-c4694f172b51a2168b8cc15109ab1b97fc0bcb9c.zip binutils-c4694f172b51a2168b8cc15109ab1b97fc0bcb9c.tar.gz binutils-c4694f172b51a2168b8cc15109ab1b97fc0bcb9c.tar.bz2 |
Enable support to Intel Keylocker instructions
gas/
* NEWS: Add Key Locker.
* config/tc-i386.c (cpu_arch): Add .kl and .wide_kl.
(cpu_noarch): Likewise.
* doc/c-i386.texi: Document kl and wide_kl.
* testsuite/gas/i386/i386.exp: Run keylocker tests.
* testsuite/gas/i386/keylocker-intel.d: New test.
* testsuite/gas/i386/keylocker.d: Likewise.
* testsuite/gas/i386/keylocker.s: Likewise.
* testsuite/gas/i386/x86-64-keylocker-intel.d: Likewise.
* testsuite/gas/i386/x86-64-keylocker.d: Likewise.
* testsuite/gas/i386/x86-64-keylocker.s: Likewise.
* testsuite/gas/i386/x86-64-property-10.d: Likewise.
* testsuite/gas/i386/property-10.d: Likewise.
* testsuite/gas/i386/property-10.s: Likewise.
opcodes/
* i386-dis.c (enum): Add REG_0F38D8_PREFIX_1,
MOD_0F38FA_PREFIX_1, MOD_0F38FB_PREFIX_1,
MOD_0F38DC_PREFIX_1, MOD_0F38DD_PREFIX_1,
MOD_0F38DE_PREFIX_1, MOD_0F38DF_PREFIX_1,
PREFIX_0F38D8, PREFIX_0F38FA, PREFIX_0F38FB.
(reg_table): New instructions (see prefixes above).
(prefix_table): Likewise.
(three_byte_table): Likewise.
(mod_table): Likewise
* i386-gen.c (cpu_flag_init): Add CPU_KL_FLAGS, CPU_WIDE_KL_FLAGS,
CPU_ANY_KL_FLAGS and CPU_ANY_WIDE_KL_FLAGS.
(cpu_flags): Likewise.
(operand_type_init): Likewise.
* i386-opc.h (enum): Add CpuKL and CpuWide_KL.
(i386_cpu_flags): Add cpukl and cpuwide_kl.
* i386-opc.tbl: Add KL and WIDE_KL insns.
* i386-init.h: Regenerate.
* i386-tbl.h: Likewise.
Diffstat (limited to 'opcodes/i386-dis.c')
-rw-r--r-- | opcodes/i386-dis.c | 107 |
1 files changed, 100 insertions, 7 deletions
diff --git a/opcodes/i386-dis.c b/opcodes/i386-dis.c index 6d80325..7c898eb 100644 --- a/opcodes/i386-dis.c +++ b/opcodes/i386-dis.c @@ -691,6 +691,7 @@ enum REG_0F18, REG_0F1C_P_0_MOD_0, REG_0F1E_P_1_MOD_3, + REG_0F38D8_PREFIX_1, REG_0F71, REG_0F72, REG_0F73, @@ -797,12 +798,18 @@ enum MOD_VEX_0F385E_X86_64_P_1_W_0, MOD_VEX_0F385E_X86_64_P_2_W_0, MOD_VEX_0F385E_X86_64_P_3_W_0, + MOD_0F38DC_PREFIX_1, + MOD_0F38DD_PREFIX_1, + MOD_0F38DE_PREFIX_1, + MOD_0F38DF_PREFIX_1, MOD_0F38F5, MOD_0F38F6_PREFIX_0, MOD_0F38F8_PREFIX_1, MOD_0F38F8_PREFIX_2, MOD_0F38F8_PREFIX_3, MOD_0F38F9, + MOD_0F38FA_PREFIX_1, + MOD_0F38FB_PREFIX_1, MOD_62_32BIT, MOD_C4_32BIT, MOD_C5_32BIT, @@ -1011,10 +1018,17 @@ enum PREFIX_0FE7, PREFIX_0FF0, PREFIX_0FF7, + PREFIX_0F38D8, + PREFIX_0F38DC, + PREFIX_0F38DD, + PREFIX_0F38DE, + PREFIX_0F38DF, PREFIX_0F38F0, PREFIX_0F38F1, PREFIX_0F38F6, PREFIX_0F38F8, + PREFIX_0F38FA, + PREFIX_0F38FB, PREFIX_VEX_0F10, PREFIX_VEX_0F11, PREFIX_VEX_0F12, @@ -2890,6 +2904,13 @@ static const struct dis386 reg_table[][8] = { { "nopQ", { Ev }, 0 }, { RM_TABLE (RM_0F1E_P_1_MOD_3_REG_7) }, }, + /* REG_0F38D8_PREFIX_1 */ + { + { "aesencwide128kl", { M }, 0 }, + { "aesdecwide128kl", { M }, 0 }, + { "aesencwide256kl", { M }, 0 }, + { "aesdecwide256kl", { M }, 0 }, + }, /* REG_0F71 */ { { Bad_Opcode }, @@ -3543,6 +3564,40 @@ static const struct dis386 prefix_table[][4] = { { "maskmovdqu", { XM, XS }, PREFIX_OPCODE }, }, + /* PREFIX_0F38D8 */ + { + { Bad_Opcode }, + { REG_TABLE (REG_0F38D8_PREFIX_1) }, + }, + + /* PREFIX_0F38DC */ + { + { Bad_Opcode }, + { MOD_TABLE (MOD_0F38DC_PREFIX_1) }, + { "aesenc", { XM, EXx }, 0 }, + }, + + /* PREFIX_0F38DD */ + { + { Bad_Opcode }, + { MOD_TABLE (MOD_0F38DD_PREFIX_1) }, + { "aesenclast", { XM, EXx }, 0 }, + }, + + /* PREFIX_0F38DE */ + { + { Bad_Opcode }, + { MOD_TABLE (MOD_0F38DE_PREFIX_1) }, + { "aesdec", { XM, EXx }, 0 }, + }, + + /* PREFIX_0F38DF */ + { + { Bad_Opcode }, + { MOD_TABLE (MOD_0F38DF_PREFIX_1) }, + { "aesdeclast", { XM, EXx }, 0 }, + }, + /* PREFIX_0F38F0 */ { { "movbeS", { Gv, Mv }, PREFIX_OPCODE }, @@ -3574,6 +3629,17 @@ static const struct dis386 prefix_table[][4] = { { MOD_TABLE (MOD_0F38F8_PREFIX_2) }, { MOD_TABLE (MOD_0F38F8_PREFIX_3) }, }, + /* PREFIX_0F38FA */ + { + { Bad_Opcode }, + { MOD_TABLE (MOD_0F38FA_PREFIX_1) }, + }, + + /* PREFIX_0F38FB */ + { + { Bad_Opcode }, + { MOD_TABLE (MOD_0F38FB_PREFIX_1) }, + }, /* PREFIX_VEX_0F10 */ { @@ -4434,14 +4500,14 @@ static const struct dis386 three_byte_table[][256] = { { Bad_Opcode }, { Bad_Opcode }, /* d8 */ - { Bad_Opcode }, + { PREFIX_TABLE (PREFIX_0F38D8) }, { Bad_Opcode }, { Bad_Opcode }, { "aesimc", { XM, EXx }, PREFIX_DATA }, - { "aesenc", { XM, EXx }, PREFIX_DATA }, - { "aesenclast", { XM, EXx }, PREFIX_DATA }, - { "aesdec", { XM, EXx }, PREFIX_DATA }, - { "aesdeclast", { XM, EXx }, PREFIX_DATA }, + { PREFIX_TABLE (PREFIX_0F38DC) }, + { PREFIX_TABLE (PREFIX_0F38DD) }, + { PREFIX_TABLE (PREFIX_0F38DE) }, + { PREFIX_TABLE (PREFIX_0F38DF) }, /* e0 */ { Bad_Opcode }, { Bad_Opcode }, @@ -4472,8 +4538,8 @@ static const struct dis386 three_byte_table[][256] = { /* f8 */ { PREFIX_TABLE (PREFIX_0F38F8) }, { MOD_TABLE (MOD_0F38F9) }, - { Bad_Opcode }, - { Bad_Opcode }, + { PREFIX_TABLE (PREFIX_0F38FA) }, + { PREFIX_TABLE (PREFIX_0F38FB) }, { Bad_Opcode }, { Bad_Opcode }, { Bad_Opcode }, @@ -8213,6 +8279,23 @@ static const struct dis386 mod_table[][2] = { { VEX_LEN_TABLE (VEX_LEN_0F385E_X86_64_P_3_W_0_M_0) }, }, { + /* MOD_0F38DC_PREFIX_1 */ + { "aesenc128kl", { XM, M }, 0 }, + { "loadiwkey", { XM, EXx }, 0 }, + }, + { + /* MOD_0F38DD_PREFIX_1 */ + { "aesdec128kl", { XM, M }, 0 }, + }, + { + /* MOD_0F38DE_PREFIX_1 */ + { "aesenc256kl", { XM, M }, 0 }, + }, + { + /* MOD_0F38DF_PREFIX_1 */ + { "aesdec256kl", { XM, M }, 0 }, + }, + { /* MOD_0F38F5 */ { "wrussK", { M, Gdq }, PREFIX_DATA }, }, @@ -8237,6 +8320,16 @@ static const struct dis386 mod_table[][2] = { { "movdiri", { Edq, Gdq }, PREFIX_OPCODE }, }, { + /* MOD_0F38FA_PREFIX_1 */ + { Bad_Opcode }, + { "encodekey128", { Gd, Ed }, 0 }, + }, + { + /* MOD_0F38FB_PREFIX_1 */ + { Bad_Opcode }, + { "encodekey256", { Gd, Ed }, 0 }, + }, + { /* MOD_62_32BIT */ { "bound{S|}", { Gv, Ma }, 0 }, { EVEX_TABLE (EVEX_0F) }, |