From 8eab413676a0222a863f45ff606f3db69bb7afc4 Mon Sep 17 00:00:00 2001 From: "H.J. Lu" Date: Wed, 9 Dec 2015 08:01:57 -0800 Subject: Implement Intel OSPKE instructions MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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. --- opcodes/i386-dis.c | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) (limited to 'opcodes/i386-dis.c') 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 }, -- cgit v1.1