diff options
author | H.J. Lu <hjl.tools@gmail.com> | 2008-08-20 18:38:40 +0000 |
---|---|---|
committer | H.J. Lu <hjl.tools@gmail.com> | 2008-08-20 18:38:40 +0000 |
commit | a5ff0eb22b3945e3e4a63b337cbc01bc4aa51d89 (patch) | |
tree | 20f4479c03f5ef0657ea22636f5c2e2bc6aed29b /opcodes/i386-dis.c | |
parent | 76d1293995586b060a2dc642a72c877db7092580 (diff) | |
download | ppe42-binutils-a5ff0eb22b3945e3e4a63b337cbc01bc4aa51d89.tar.gz ppe42-binutils-a5ff0eb22b3945e3e4a63b337cbc01bc4aa51d89.zip |
gas/
2008-08-20 H.J. Lu <hongjiu.lu@intel.com>
AVX Programming Reference (August, 2008)
* config/tc-i386.c (CPU_FLAGS_AES_MATCH): New.
(CPU_FLAGS_AVX_MATCH): Likewise.
(CPU_FLAGS_32BIT_MATCH): Updated.
(cpu_flags_match): Likewise.
gas/testsuite/
2008-08-20 H.J. Lu <hongjiu.lu@intel.com>
AVX Programming Reference (August, 2008)
* gas/i386/avx.s: Add AES + AVX tests.
* gas/i386/arch-10.s: Likewise.
* gas/i386/sse2avx.s: Likewise.
* gas/i386/x86-64-arch-2.s: Likewise.
* gas/i386/x86-64-avx.s: Likewise.
* gas/i386/x86-64-sse2avx.s: Likewise.
* gas/i386/arch-10.d: Updated.
* gas/i386/arch-10-1.l: Likewise.
* gas/i386/arch-10-2.l: Likewise.
* gas/i386/arch-10-3.l: Likewise.
* gas/i386/arch-10-4.l: Likewise.
* gas/i386/avx.d: Likewise.
* gas/i386/avx-intel.d: Likewise.
* gas/i386/sse2avx.d: Likewise.
* gas/i386/x86-64-arch-2.d: Likewise.
* gas/i386/x86-64-avx.d: Likewise.
* gas/i386/x86-64-avx-intel.d: Likewise.
* gas/i386/x86-64-sse2avx.d: Likewise.
* gas/i386/i386.exp: Run arch-avx-1, arch-avx-1-1 and
arch-avx-1-2.
* gas/i386/arch-avx-1.d: New.
* gas/i386/arch-avx-1.s: Likewise.
* gas/i386/arch-avx-1-1.l: Likewise.
* gas/i386/arch-avx-1-1.s: Likewise.
* gas/i386/arch-avx-1-2.l: Likewise.
* gas/i386/arch-avx-1-2.s: Likewise.
opcodes/
2008-08-20 H.J. Lu <hongjiu.lu@intel.com>
AVX Programming Reference (August, 2008)
* i386-dis.c (PREFIX_VEX_38DB): New.
(PREFIX_VEX_38DC): Likewise.
(PREFIX_VEX_38DD): Likewise.
(PREFIX_VEX_38DE): Likewise.
(PREFIX_VEX_38DF): Likewise.
(PREFIX_VEX_3ADF): Likewise.
(VEX_LEN_38DB_P_2): Likewise.
(VEX_LEN_38DC_P_2): Likewise.
(VEX_LEN_38DD_P_2): Likewise.
(VEX_LEN_38DE_P_2): Likewise.
(VEX_LEN_38DF_P_2): Likewise.
(VEX_LEN_3ADF_P_2): Likewise.
(PREFIX_VEX_3A04): Updated.
(VEX_LEN_3A06_P_2): Likewise.
(prefix_table): Add PREFIX_VEX_38DB, PREFIX_VEX_38DC,
PREFIX_VEX_38DD, PREFIX_VEX_38DE and PREFIX_VEX_3ADF.
(x86_64_table): Likewise.
(vex_len_table): Add VEX_LEN_38DB_P_2, VEX_LEN_38DC_P_2,
VEX_LEN_38DD_P_2, VEX_LEN_38DE_P_2, VEX_LEN_38DF_P_2 and
VEX_LEN_3ADF_P_2.
* i386-opc.tbl: Add AES + AVX instructions.
* i386-init.h: Regenerated.
* i386-tbl.h: Likewise.
Diffstat (limited to 'opcodes/i386-dis.c')
-rw-r--r-- | opcodes/i386-dis.c | 112 |
1 files changed, 104 insertions, 8 deletions
diff --git a/opcodes/i386-dis.c b/opcodes/i386-dis.c index c0688cf8f1..6c2b5133ec 100644 --- a/opcodes/i386-dis.c +++ b/opcodes/i386-dis.c @@ -939,7 +939,12 @@ fetch_data (struct disassemble_info *info, bfd_byte *addr) #define PREFIX_VEX_383F (PREFIX_VEX_383E + 1) #define PREFIX_VEX_3840 (PREFIX_VEX_383F + 1) #define PREFIX_VEX_3841 (PREFIX_VEX_3840 + 1) -#define PREFIX_VEX_3A04 (PREFIX_VEX_3841 + 1) +#define PREFIX_VEX_38DB (PREFIX_VEX_3841 + 1) +#define PREFIX_VEX_38DC (PREFIX_VEX_38DB + 1) +#define PREFIX_VEX_38DD (PREFIX_VEX_38DC + 1) +#define PREFIX_VEX_38DE (PREFIX_VEX_38DD + 1) +#define PREFIX_VEX_38DF (PREFIX_VEX_38DE + 1) +#define PREFIX_VEX_3A04 (PREFIX_VEX_38DF + 1) #define PREFIX_VEX_3A05 (PREFIX_VEX_3A04 + 1) #define PREFIX_VEX_3A06 (PREFIX_VEX_3A05 + 1) #define PREFIX_VEX_3A08 (PREFIX_VEX_3A06 + 1) @@ -991,6 +996,7 @@ fetch_data (struct disassemble_info *info, bfd_byte *addr) #define PREFIX_VEX_3A7D (PREFIX_VEX_3A7C + 1) #define PREFIX_VEX_3A7E (PREFIX_VEX_3A7D + 1) #define PREFIX_VEX_3A7F (PREFIX_VEX_3A7E + 1) +#define PREFIX_VEX_3ADF (PREFIX_VEX_3A7F + 1) #define X86_64_06 0 #define X86_64_07 (X86_64_06 + 1) @@ -1200,7 +1206,12 @@ fetch_data (struct disassemble_info *info, bfd_byte *addr) #define VEX_LEN_383F_P_2 (VEX_LEN_383E_P_2 + 1) #define VEX_LEN_3840_P_2 (VEX_LEN_383F_P_2 + 1) #define VEX_LEN_3841_P_2 (VEX_LEN_3840_P_2 + 1) -#define VEX_LEN_3A06_P_2 (VEX_LEN_3841_P_2 + 1) +#define VEX_LEN_38DB_P_2 (VEX_LEN_3841_P_2 + 1) +#define VEX_LEN_38DC_P_2 (VEX_LEN_38DB_P_2 + 1) +#define VEX_LEN_38DD_P_2 (VEX_LEN_38DC_P_2 + 1) +#define VEX_LEN_38DE_P_2 (VEX_LEN_38DD_P_2 + 1) +#define VEX_LEN_38DF_P_2 (VEX_LEN_38DE_P_2 + 1) +#define VEX_LEN_3A06_P_2 (VEX_LEN_38DF_P_2 + 1) #define VEX_LEN_3A0A_P_2 (VEX_LEN_3A06_P_2 + 1) #define VEX_LEN_3A0B_P_2 (VEX_LEN_3A0A_P_2 + 1) #define VEX_LEN_3A0E_P_2 (VEX_LEN_3A0B_P_2 + 1) @@ -1229,6 +1240,7 @@ fetch_data (struct disassemble_info *info, bfd_byte *addr) #define VEX_LEN_3A7B_P_2 (VEX_LEN_3A7A_P_2 + 1) #define VEX_LEN_3A7E_P_2 (VEX_LEN_3A7B_P_2 + 1) #define VEX_LEN_3A7F_P_2 (VEX_LEN_3A7E_P_2 + 1) +#define VEX_LEN_3ADF_P_2 (VEX_LEN_3A7F_P_2 + 1) typedef void (*op_rtn) (int bytemode, int sizeflag); @@ -4536,6 +4548,46 @@ static const struct dis386 prefix_table[][4] = { { "(bad)", { XX } }, }, + /* PREFIX_VEX_38DB */ + { + { "(bad)", { XX } }, + { "(bad)", { XX } }, + { VEX_LEN_TABLE (VEX_LEN_38DB_P_2) }, + { "(bad)", { XX } }, + }, + + /* PREFIX_VEX_38DC */ + { + { "(bad)", { XX } }, + { "(bad)", { XX } }, + { VEX_LEN_TABLE (VEX_LEN_38DC_P_2) }, + { "(bad)", { XX } }, + }, + + /* PREFIX_VEX_38DD */ + { + { "(bad)", { XX } }, + { "(bad)", { XX } }, + { VEX_LEN_TABLE (VEX_LEN_38DD_P_2) }, + { "(bad)", { XX } }, + }, + + /* PREFIX_VEX_38DE */ + { + { "(bad)", { XX } }, + { "(bad)", { XX } }, + { VEX_LEN_TABLE (VEX_LEN_38DE_P_2) }, + { "(bad)", { XX } }, + }, + + /* PREFIX_VEX_38DF */ + { + { "(bad)", { XX } }, + { "(bad)", { XX } }, + { VEX_LEN_TABLE (VEX_LEN_38DF_P_2) }, + { "(bad)", { XX } }, + }, + /* PREFIX_VEX_3A04 */ { { "(bad)", { XX } }, @@ -4951,6 +5003,14 @@ static const struct dis386 prefix_table[][4] = { { VEX_LEN_TABLE (VEX_LEN_3A7F_P_2) }, { "(bad)", { XX } }, }, + + /* PREFIX_VEX_3ADF */ + { + { "(bad)", { XX } }, + { "(bad)", { XX } }, + { VEX_LEN_TABLE (VEX_LEN_3ADF_P_2) }, + { "(bad)", { XX } }, + }, }; static const struct dis386 x86_64_table[][2] = { @@ -7413,11 +7473,11 @@ static const struct dis386 vex_table[][256] = { { "(bad)", { XX } }, { "(bad)", { XX } }, { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, - { "(bad)", { XX } }, + { PREFIX_TABLE (PREFIX_VEX_38DB) }, + { PREFIX_TABLE (PREFIX_VEX_38DC) }, + { PREFIX_TABLE (PREFIX_VEX_38DD) }, + { PREFIX_TABLE (PREFIX_VEX_38DE) }, + { PREFIX_TABLE (PREFIX_VEX_38DF) }, /* e0 */ { "(bad)", { XX } }, { "(bad)", { XX } }, @@ -7708,7 +7768,7 @@ static const struct dis386 vex_table[][256] = { { "(bad)", { XX } }, { "(bad)", { XX } }, { "(bad)", { XX } }, - { "(bad)", { XX } }, + { PREFIX_TABLE (PREFIX_VEX_3ADF) }, /* e0 */ { "(bad)", { XX } }, { "(bad)", { XX } }, @@ -8757,6 +8817,36 @@ static const struct dis386 vex_len_table[][2] = { { "(bad)", { XX } }, }, + /* VEX_LEN_38DB_P_2 */ + { + { "vaesimc", { XM, EXx } }, + { "(bad)", { XX } }, + }, + + /* VEX_LEN_38DC_P_2 */ + { + { "vaesenc", { XM, Vex128, EXx } }, + { "(bad)", { XX } }, + }, + + /* VEX_LEN_38DD_P_2 */ + { + { "vaesenclast", { XM, Vex128, EXx } }, + { "(bad)", { XX } }, + }, + + /* VEX_LEN_38DE_P_2 */ + { + { "vaesdec", { XM, Vex128, EXx } }, + { "(bad)", { XX } }, + }, + + /* VEX_LEN_38DF_P_2 */ + { + { "vaesdeclast", { XM, Vex128, EXx } }, + { "(bad)", { XX } }, + }, + /* VEX_LEN_3A06_P_2 */ { { "(bad)", { XX } }, @@ -8930,6 +9020,12 @@ static const struct dis386 vex_len_table[][2] = { { "vfnmsubsd", { XMVexW, Vex128FMA, EXqVexW, EXqVexW, VexI4 } }, { "(bad)", { XX } }, }, + + /* VEX_LEN_3ADF_P_2 */ + { + { "vaeskeygenassist", { XM, EXx, Ib } }, + { "(bad)", { XX } }, + }, }; static const struct dis386 mod_table[][2] = { |