aboutsummaryrefslogtreecommitdiff
path: root/opcodes/i386-dis.c
diff options
context:
space:
mode:
authorH.J. Lu <hjl.tools@gmail.com>2015-12-09 08:01:57 -0800
committerH.J. Lu <hjl.tools@gmail.com>2015-12-09 08:01:57 -0800
commit8eab413676a0222a863f45ff606f3db69bb7afc4 (patch)
tree8fffeb4186f33ac88d0538ac9ab3cdc07d62d136 /opcodes/i386-dis.c
parentfa7cc15f24f9cd8e3cc07c7552c3fad1b756eed8 (diff)
downloadfsf-binutils-gdb-8eab413676a0222a863f45ff606f3db69bb7afc4.zip
fsf-binutils-gdb-8eab413676a0222a863f45ff606f3db69bb7afc4.tar.gz
fsf-binutils-gdb-8eab413676a0222a863f45ff606f3db69bb7afc4.tar.bz2
Implement Intel OSPKE instructions
This patch implements Intel OSPKE instructions documented in Intel64 and IA-32 Architectures Software Developer’s Manual Volume 2, September 2015. gas/testsuite/ * gas/i386/i386.exp: Run ospke and x86-64-ospke. * gas/i386/ospke.d: New file. * gas/i386/ospke.s: Likewise. * gas/i386/x86-64-ospke.d: Likewise. opcodes/ * i386-dis.c (MOD_0F01_REG_5): New. (RM_0F01_REG_5): Likewise. (reg_table): Use MOD_0F01_REG_5. (mod_table): Add MOD_0F01_REG_5. (rm_table): Add RM_0F01_REG_5. * i386-gen.c (cpu_flag_init): Add CPU_OSPKE_FLAGS. (cpu_flags): Add CpuOSPKE. * i386-opc.h (CpuOSPKE): New. (i386_cpu_flags): Add cpuospke. * i386-opc.tbl: Add rdpkru and wrpkru instructions. * i386-init.h: Regenerated. * i386-tbl.h: Likewise.
Diffstat (limited to 'opcodes/i386-dis.c')
-rw-r--r--opcodes/i386-dis.c20
1 files changed, 19 insertions, 1 deletions
diff --git a/opcodes/i386-dis.c b/opcodes/i386-dis.c
index ae18cf2..1b4c51a 100644
--- a/opcodes/i386-dis.c
+++ b/opcodes/i386-dis.c
@@ -758,6 +758,7 @@ enum
MOD_0F01_REG_1,
MOD_0F01_REG_2,
MOD_0F01_REG_3,
+ MOD_0F01_REG_5,
MOD_0F01_REG_7,
MOD_0F12_PREFIX_0,
MOD_0F13,
@@ -929,6 +930,7 @@ enum
RM_0F01_REG_1,
RM_0F01_REG_2,
RM_0F01_REG_3,
+ RM_0F01_REG_5,
RM_0F01_REG_7,
RM_0FAE_REG_5,
RM_0FAE_REG_6,
@@ -3554,7 +3556,7 @@ static const struct dis386 reg_table[][8] = {
{ MOD_TABLE (MOD_0F01_REG_2) },
{ MOD_TABLE (MOD_0F01_REG_3) },
{ "smswD", { Sv }, 0 },
- { Bad_Opcode },
+ { MOD_TABLE (MOD_0F01_REG_5) },
{ "lmsw", { Ew }, 0 },
{ MOD_TABLE (MOD_0F01_REG_7) },
},
@@ -11685,6 +11687,11 @@ static const struct dis386 mod_table[][2] = {
{ RM_TABLE (RM_0F01_REG_3) },
},
{
+ /* MOD_0F01_REG_5 */
+ { Bad_Opcode },
+ { RM_TABLE (RM_0F01_REG_5) },
+ },
+ {
/* MOD_0F01_REG_7 */
{ "invlpg", { Mb }, 0 },
{ RM_TABLE (RM_0F01_REG_7) },
@@ -12429,6 +12436,17 @@ static const struct dis386 rm_table[][8] = {
{ "invlpga", { Skip_MODRM }, 0 },
},
{
+ /* RM_0F01_REG_5 */
+ { Bad_Opcode },
+ { Bad_Opcode },
+ { Bad_Opcode },
+ { Bad_Opcode },
+ { Bad_Opcode },
+ { Bad_Opcode },
+ { "rdpkru", { Skip_MODRM }, 0 },
+ { "wrpkru", { Skip_MODRM }, 0 },
+ },
+ {
/* RM_0F01_REG_7 */
{ "swapgs", { Skip_MODRM }, 0 },
{ "rdtscp", { Skip_MODRM }, 0 },