aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorH.J. Lu <hjl.tools@gmail.com>2018-04-15 08:38:23 -0700
committerH.J. Lu <hjl.tools@gmail.com>2018-04-15 08:38:36 -0700
commitae1d38437284b31d5a1c604bcf391d4543be00a5 (patch)
tree1a7ec14d5cbdfdd8967109fb45dcca742ee81740
parent7c31c22f1a18d91e104f1ffd5df8895d2459fe48 (diff)
downloadgdb-ae1d38437284b31d5a1c604bcf391d4543be00a5.zip
gdb-ae1d38437284b31d5a1c604bcf391d4543be00a5.tar.gz
gdb-ae1d38437284b31d5a1c604bcf391d4543be00a5.tar.bz2
x86: Allow 32-bit registers for tpause and umwait
Since only the first 32 bits of input operand are used for tpause and umwait, the REX.W bit is skipped. Both 32-bit registers and 64-bit registers are allowed. gas/ * testsuite/gas/i386/x86-64-waitpkg.s: Add 32-bit registers tests for tpause and umwait. * testsuite/gas/i386/x86-64-waitpkg-intel.d: Updated. * testsuite/gas/i386/x86-64-waitpkg.d: Likewise. opcodes/ * i386-dis.c (prefix_table): Replace Em with Edq on tpause and umwait. * i386-opc.tbl: Allow 32-bit registers for tpause and umwait in 64-bit mode. * i386-tbl.h: Regenerated.
-rw-r--r--gas/ChangeLog7
-rw-r--r--gas/testsuite/gas/i386/x86-64-waitpkg-intel.d12
-rw-r--r--gas/testsuite/gas/i386/x86-64-waitpkg.d12
-rw-r--r--gas/testsuite/gas/i386/x86-64-waitpkg.s4
-rw-r--r--opcodes/ChangeLog8
-rw-r--r--opcodes/i386-dis.c4
-rw-r--r--opcodes/i386-opc.tbl6
-rw-r--r--opcodes/i386-tbl.h36
8 files changed, 43 insertions, 46 deletions
diff --git a/gas/ChangeLog b/gas/ChangeLog
index d87d3e7..ad99365 100644
--- a/gas/ChangeLog
+++ b/gas/ChangeLog
@@ -1,3 +1,10 @@
+2018-04-15 H.J. Lu <hongjiu.lu@intel.com>
+
+ * testsuite/gas/i386/x86-64-waitpkg.s: Add 32-bit registers
+ tests for tpause and umwait.
+ * testsuite/gas/i386/x86-64-waitpkg-intel.d: Updated.
+ * testsuite/gas/i386/x86-64-waitpkg.d: Likewise.
+
2018-04-12 John Darrington <john@darrington.wattle.id.au>
* as.c (main): Fail if the output is the same as one of the input
diff --git a/gas/testsuite/gas/i386/x86-64-waitpkg-intel.d b/gas/testsuite/gas/i386/x86-64-waitpkg-intel.d
index e70be23..e0387dd 100644
--- a/gas/testsuite/gas/i386/x86-64-waitpkg-intel.d
+++ b/gas/testsuite/gas/i386/x86-64-waitpkg-intel.d
@@ -12,8 +12,12 @@ Disassembly of section \.text:
[ ]*[a-f0-9]+:[ ]*f3 0f ae f0[ ]*umonitor rax
[ ]*[a-f0-9]+:[ ]*f3 41 0f ae f2[ ]*umonitor r10
[ ]*[a-f0-9]+:[ ]*67 f3 41 0f ae f2[ ]*umonitor r10d
-[ ]*[a-f0-9]+:[ ]*f2 0f ae f1[ ]*umwait rcx
-[ ]*[a-f0-9]+:[ ]*f2 41 0f ae f2[ ]*umwait r10
-[ ]*[a-f0-9]+:[ ]*66 0f ae f1[ ]*tpause rcx
-[ ]*[a-f0-9]+:[ ]*66 41 0f ae f2[ ]*tpause r10
+[ ]*[a-f0-9]+:[ ]*f2 0f ae f1[ ]*umwait ecx
+[ ]*[a-f0-9]+:[ ]*f2 0f ae f1[ ]*umwait ecx
+[ ]*[a-f0-9]+:[ ]*f2 41 0f ae f2[ ]*umwait r10d
+[ ]*[a-f0-9]+:[ ]*f2 41 0f ae f2[ ]*umwait r10d
+[ ]*[a-f0-9]+:[ ]*66 0f ae f1[ ]*tpause ecx
+[ ]*[a-f0-9]+:[ ]*66 0f ae f1[ ]*tpause ecx
+[ ]*[a-f0-9]+:[ ]*66 41 0f ae f2[ ]*tpause r10d
+[ ]*[a-f0-9]+:[ ]*66 41 0f ae f2[ ]*tpause r10d
#pass
diff --git a/gas/testsuite/gas/i386/x86-64-waitpkg.d b/gas/testsuite/gas/i386/x86-64-waitpkg.d
index 0930aa2..a10a8cd 100644
--- a/gas/testsuite/gas/i386/x86-64-waitpkg.d
+++ b/gas/testsuite/gas/i386/x86-64-waitpkg.d
@@ -12,8 +12,12 @@ Disassembly of section \.text:
[ ]*[a-f0-9]+:[ ]*f3 0f ae f0[ ]*umonitor %rax
[ ]*[a-f0-9]+:[ ]*f3 41 0f ae f2[ ]*umonitor %r10
[ ]*[a-f0-9]+:[ ]*67 f3 41 0f ae f2[ ]*umonitor %r10d
-[ ]*[a-f0-9]+:[ ]*f2 0f ae f1[ ]*umwait %rcx
-[ ]*[a-f0-9]+:[ ]*f2 41 0f ae f2[ ]*umwait %r10
-[ ]*[a-f0-9]+:[ ]*66 0f ae f1[ ]*tpause %rcx
-[ ]*[a-f0-9]+:[ ]*66 41 0f ae f2[ ]*tpause %r10
+[ ]*[a-f0-9]+:[ ]*f2 0f ae f1[ ]*umwait %ecx
+[ ]*[a-f0-9]+:[ ]*f2 0f ae f1[ ]*umwait %ecx
+[ ]*[a-f0-9]+:[ ]*f2 41 0f ae f2[ ]*umwait %r10d
+[ ]*[a-f0-9]+:[ ]*f2 41 0f ae f2[ ]*umwait %r10d
+[ ]*[a-f0-9]+:[ ]*66 0f ae f1[ ]*tpause %ecx
+[ ]*[a-f0-9]+:[ ]*66 0f ae f1[ ]*tpause %ecx
+[ ]*[a-f0-9]+:[ ]*66 41 0f ae f2[ ]*tpause %r10d
+[ ]*[a-f0-9]+:[ ]*66 41 0f ae f2[ ]*tpause %r10d
#pass
diff --git a/gas/testsuite/gas/i386/x86-64-waitpkg.s b/gas/testsuite/gas/i386/x86-64-waitpkg.s
index 7899c39..9c64848 100644
--- a/gas/testsuite/gas/i386/x86-64-waitpkg.s
+++ b/gas/testsuite/gas/i386/x86-64-waitpkg.s
@@ -5,7 +5,11 @@ _start:
umonitor %rax
umonitor %r10
umonitor %r10d
+ umwait %ecx
umwait %rcx
umwait %r10
+ umwait %r10d
+ tpause %ecx
tpause %rcx
tpause %r10
+ tpause %r10d
diff --git a/opcodes/ChangeLog b/opcodes/ChangeLog
index dca9192..0934467 100644
--- a/opcodes/ChangeLog
+++ b/opcodes/ChangeLog
@@ -1,3 +1,11 @@
+2018-04-15 H.J. Lu <hongjiu.lu@intel.com>
+
+ * i386-dis.c (prefix_table): Replace Em with Edq on tpause and
+ umwait.
+ * i386-opc.tbl: Allow 32-bit registers for tpause and umwait in
+ 64-bit mode.
+ * i386-tbl.h: Regenerated.
+
2018-04-11 Igor Tsimbalist <igor.v.tsimbalist@intel.com>
* i386-dis.c (enum): Add PREFIX_MOD_0_0FAE_REG_6,
diff --git a/opcodes/i386-dis.c b/opcodes/i386-dis.c
index d6fb42a..7416569 100644
--- a/opcodes/i386-dis.c
+++ b/opcodes/i386-dis.c
@@ -4206,8 +4206,8 @@ static const struct dis386 prefix_table[][4] = {
{
{ RM_TABLE (RM_0FAE_REG_6) },
{ "umonitor", { Eva }, PREFIX_OPCODE },
- { "tpause", { Em }, PREFIX_OPCODE },
- { "umwait", { Em }, PREFIX_OPCODE },
+ { "tpause", { Edq }, PREFIX_OPCODE },
+ { "umwait", { Edq }, PREFIX_OPCODE },
},
/* PREFIX_0FAE_REG_7 */
diff --git a/opcodes/i386-opc.tbl b/opcodes/i386-opc.tbl
index 279a697..0f7c64d 100644
--- a/opcodes/i386-opc.tbl
+++ b/opcodes/i386-opc.tbl
@@ -5904,10 +5904,8 @@ pconfig, 0, 0x0f01c5, None, 3, CpuPCONFIG, No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qS
umonitor, 1, 0xf30fae, 0x6, 2, CpuWAITPKG|CpuNo64, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|AddrPrefixOp0, { Reg16|Reg32 }
umonitor, 1, 0xf30fae, 0x6, 2, CpuWAITPKG|Cpu64, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|AddrPrefixOp0|NoRex64, { Reg32|Reg64 }
-tpause, 1, 0x660fae, 0x6, 2, CpuWAITPKG|CpuNo64, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Reg32 }
-tpause, 1, 0x660fae, 0x6, 2, CpuWAITPKG|Cpu64, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|NoRex64, { Reg64 }
+tpause, 1, 0x660fae, 0x6, 2, CpuWAITPKG, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|NoRex64, { Reg32|Reg64 }
-umwait, 1, 0xf20fae, 0x6, 2, CpuWAITPKG|CpuNo64, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf, { Reg32 }
-umwait, 1, 0xf20fae, 0x6, 2, CpuWAITPKG|Cpu64, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|NoRex64, { Reg64 }
+umwait, 1, 0xf20fae, 0x6, 2, CpuWAITPKG, Modrm|No_bSuf|No_wSuf|No_lSuf|No_sSuf|No_qSuf|No_ldSuf|NoRex64, { Reg32|Reg64 }
// WAITPKG instructions end.
diff --git a/opcodes/i386-tbl.h b/opcodes/i386-tbl.h
index f4bd25e..0eb123a 100644
--- a/opcodes/i386-tbl.h
+++ b/opcodes/i386-tbl.h
@@ -93810,41 +93810,13 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 0, 1, 0 } },
- { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1,
- 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0 },
- { { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0 } } } },
- { "tpause", 1, 0x660fae, 0x6, 2,
- { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 1, 0, 0 } },
+ 0, 0, 0, 0, 0, 0, 0 } },
{ 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1,
1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0 },
{ { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0,
- 0, 0, 0 } } } },
- { "umwait", 1, 0xf20fae, 0x6, 2,
- { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 0, 1, 0 } },
- { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1,
- 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0 },
- { { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0,
0, 0, 0 } } } },
{ "umwait", 1, 0xf20fae, 0x6, 2,
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -93852,13 +93824,13 @@ const insn_template i386_optab[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0,
- 0, 0, 0, 0, 1, 0, 0 } },
+ 0, 0, 0, 0, 0, 0, 0 } },
{ 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1,
1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0 },
{ { { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0,
0, 0, 0 } } } },
{ NULL, 0, 0, 0, 0,
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,