aboutsummaryrefslogtreecommitdiff
path: root/gas
diff options
context:
space:
mode:
authorIgor Tsimbalist <igor.v.tsimbalist@intel.com>2018-04-09 12:58:50 +0200
committerIgor Tsimbalist <igor.v.tsimbalist@intel.com>2018-04-11 21:37:12 +0200
commitde89d0a34d52a2d2d28a4ce569e926dd9c7a7d13 (patch)
tree5212398a0073a3382baa45e65cf6b091762e3111 /gas
parent6295b6da16f73d5113d24424d1897edbce42bc6a (diff)
downloadfsf-binutils-gdb-de89d0a34d52a2d2d28a4ce569e926dd9c7a7d13.zip
fsf-binutils-gdb-de89d0a34d52a2d2d28a4ce569e926dd9c7a7d13.tar.gz
fsf-binutils-gdb-de89d0a34d52a2d2d28a4ce569e926dd9c7a7d13.tar.bz2
Enable Intel WAITPKG instructions.
Intel has disclosed a set of new instructions for Tremont processor. The spec is https://software.intel.com/en-us/intel-architecture-instruction-set-extensions-programming-reference This patch enables Intel WAITPKG instructions. gas/ * config/tc-i386.c (cpu_arch): Add WAITPKG. (cpu_noarch): Likewise. * doc/c-i386.texi: Document WAITPKG. * i386/i386.exp: Run WAITPKG tests. * testsuite/gas/i386/waitpkg-intel.d: New test. * testsuite/gas/i386/waitpkg.d: Likewise. * testsuite/gas/i386/waitpkg.s: Likewise. * testsuite/gas/i386/x86-64-waitpkg-intel.d: Likewise. * testsuite/gas/i386/x86-64-waitpkg.d: Likewise. * testsuite/gas/i386/x86-64-waitpkg.s: Likewise. opcodes/ * i386-dis.c (enum): Add PREFIX_MOD_0_0FAE_REG_6, PREFIX_MOD_1_0FAE_REG_6. (va_mode): New. (OP_E_register): Use va_mode. * i386-dis-evex.h (prefix_table): New instructions (see prefixes above). * i386-gen.c (cpu_flag_init): Add WAITPKG. (cpu_flags): Likewise. * i386-opc.h (enum): Likewise. (i386_cpu_flags): Likewise. * i386-opc.tbl: Add umonitor, umwait, tpause. * i386-init.h: Regenerate. * i386-tbl.h: Likewise.
Diffstat (limited to 'gas')
-rw-r--r--gas/ChangeLog13
-rw-r--r--gas/config/tc-i386.c2
-rw-r--r--gas/doc/c-i386.texi3
-rw-r--r--gas/testsuite/gas/i386/i386.exp4
-rw-r--r--gas/testsuite/gas/i386/waitpkg-intel.d16
-rw-r--r--gas/testsuite/gas/i386/waitpkg.d16
-rw-r--r--gas/testsuite/gas/i386/waitpkg.s8
-rw-r--r--gas/testsuite/gas/i386/x86-64-waitpkg-intel.d19
-rw-r--r--gas/testsuite/gas/i386/x86-64-waitpkg.d19
-rw-r--r--gas/testsuite/gas/i386/x86-64-waitpkg.s11
10 files changed, 110 insertions, 1 deletions
diff --git a/gas/ChangeLog b/gas/ChangeLog
index 894ad7d..d308c04 100644
--- a/gas/ChangeLog
+++ b/gas/ChangeLog
@@ -1,3 +1,16 @@
+2018-04-11 Igor Tsimbalist <igor.v.tsimbalist@intel.com>
+
+ * config/tc-i386.c (cpu_arch): Add WAITPKG.
+ (cpu_noarch): Likewise.
+ * doc/c-i386.texi: Document WAITPKG.
+ * i386/i386.exp: Run WAITPKG tests.
+ * testsuite/gas/i386/waitpkg-intel.d: New test.
+ * testsuite/gas/i386/waitpkg.d: Likewise.
+ * testsuite/gas/i386/waitpkg.s: Likewise.
+ * testsuite/gas/i386/x86-64-waitpkg-intel.d: Likewise.
+ * testsuite/gas/i386/x86-64-waitpkg.d: Likewise.
+ * testsuite/gas/i386/x86-64-waitpkg.s: Likewise.
+
2018-04-11 Alan Modra <amodra@gmail.com>
* config/aout_gnu.h: Delete.
diff --git a/gas/config/tc-i386.c b/gas/config/tc-i386.c
index dd7660d..028e062 100644
--- a/gas/config/tc-i386.c
+++ b/gas/config/tc-i386.c
@@ -1026,6 +1026,8 @@ static const arch_entry cpu_arch[] =
CPU_WBNOINVD_FLAGS, 0 },
{ STRING_COMMA_LEN (".pconfig"), PROCESSOR_UNKNOWN,
CPU_PCONFIG_FLAGS, 0 },
+ { STRING_COMMA_LEN (".waitpkg"), PROCESSOR_UNKNOWN,
+ CPU_WAITPKG_FLAGS, 0 },
};
static const noarch_entry cpu_noarch[] =
diff --git a/gas/doc/c-i386.texi b/gas/doc/c-i386.texi
index 965e0ff..a6e9d04 100644
--- a/gas/doc/c-i386.texi
+++ b/gas/doc/c-i386.texi
@@ -231,6 +231,7 @@ accept various extension mnemonics. For example,
@code{clzero},
@code{wbnoinvd},
@code{pconfig},
+@code{waitpkg},
@code{lwp},
@code{fma4},
@code{xop},
@@ -1272,7 +1273,7 @@ supported on the CPU specified. The choices for @var{cpu_type} are:
@item @samp{.avx512_vpopcntdq} @tab @samp{.avx512_vbmi2} @tab @samp{.avx512_vnni}
@item @samp{.avx512_bitalg}
@item @samp{.clwb} @tab @samp{.rdpid} @tab @samp{.ptwrite} @tab @item @samp{.ibt}
-@item @samp{.wbnoinvd} @tab @samp{.pconfig}
+@item @samp{.wbnoinvd} @tab @samp{.pconfig} @tab @samp{.waitpkg}
@item @samp{.shstk} @tab @samp{.gfni} @tab @samp{.vaes} @tab @samp{.vpclmulqdq}
@item @samp{.3dnow} @tab @samp{.3dnowa} @tab @samp{.sse4a} @tab @samp{.sse5}
@item @samp{.syscall} @tab @samp{.rdtscp} @tab @samp{.svme} @tab @samp{.abm}
diff --git a/gas/testsuite/gas/i386/i386.exp b/gas/testsuite/gas/i386/i386.exp
index 035d510..93e3082 100644
--- a/gas/testsuite/gas/i386/i386.exp
+++ b/gas/testsuite/gas/i386/i386.exp
@@ -422,6 +422,8 @@ if [expr ([istarget "i*86-*-*"] || [istarget "x86_64-*-*"]) && [gas_32_check]]
run_dump_test "wbnoinvd-intel"
run_dump_test "pconfig"
run_dump_test "pconfig-intel"
+ run_dump_test "waitpkg"
+ run_dump_test "waitpkg-intel"
run_list_test "avx512vl-1" "-al"
run_list_test "avx512vl-2" "-al"
run_list_test "avx512vl-plain" "-al"
@@ -910,6 +912,8 @@ if [expr ([istarget "i*86-*-*"] || [istarget "x86_64-*-*"]) && [gas_64_check]] t
run_dump_test "x86-64-wbnoinvd-intel"
run_dump_test "x86-64-pconfig"
run_dump_test "x86-64-pconfig-intel"
+ run_dump_test "x86-64-waitpkg"
+ run_dump_test "x86-64-waitpkg-intel"
run_dump_test "x86-64-fence-as-lock-add-yes"
run_dump_test "x86-64-fence-as-lock-add-no"
run_dump_test "x86-64-pr20141"
diff --git a/gas/testsuite/gas/i386/waitpkg-intel.d b/gas/testsuite/gas/i386/waitpkg-intel.d
new file mode 100644
index 0000000..7930f50
--- /dev/null
+++ b/gas/testsuite/gas/i386/waitpkg-intel.d
@@ -0,0 +1,16 @@
+#as:
+#objdump: -dw -Mintel
+#name: i386 WAITPKG insns (Intel disassembly)
+#source: waitpkg.s
+
+.*: +file format .*
+
+
+Disassembly of section \.text:
+
+00000000 <_start>:
+[ ]*[a-f0-9]+:[ ]*f3 0f ae f0[ ]*umonitor eax
+[ ]*[a-f0-9]+:[ ]*67 f3 0f ae f1[ ]*umonitor cx
+[ ]*[a-f0-9]+:[ ]*f2 0f ae f1[ ]*umwait ecx
+[ ]*[a-f0-9]+:[ ]*66 0f ae f1[ ]*tpause ecx
+#pass
diff --git a/gas/testsuite/gas/i386/waitpkg.d b/gas/testsuite/gas/i386/waitpkg.d
new file mode 100644
index 0000000..ec3b9ea
--- /dev/null
+++ b/gas/testsuite/gas/i386/waitpkg.d
@@ -0,0 +1,16 @@
+#as:
+#objdump: -dw
+#name: i386 WAITPKG insns
+#source: waitpkg.s
+
+.*: +file format .*
+
+
+Disassembly of section \.text:
+
+00000000 <_start>:
+[ ]*[a-f0-9]+:[ ]*f3 0f ae f0[ ]*umonitor %eax
+[ ]*[a-f0-9]+:[ ]*67 f3 0f ae f1[ ]*umonitor %cx
+[ ]*[a-f0-9]+:[ ]*f2 0f ae f1[ ]*umwait %ecx
+[ ]*[a-f0-9]+:[ ]*66 0f ae f1[ ]*tpause %ecx
+#pass
diff --git a/gas/testsuite/gas/i386/waitpkg.s b/gas/testsuite/gas/i386/waitpkg.s
new file mode 100644
index 0000000..f18229e
--- /dev/null
+++ b/gas/testsuite/gas/i386/waitpkg.s
@@ -0,0 +1,8 @@
+# Check 32bit WAITPKG instructions.
+
+ .text
+_start:
+ umonitor %eax
+ umonitor %cx
+ umwait %ecx
+ tpause %ecx
diff --git a/gas/testsuite/gas/i386/x86-64-waitpkg-intel.d b/gas/testsuite/gas/i386/x86-64-waitpkg-intel.d
new file mode 100644
index 0000000..e70be23
--- /dev/null
+++ b/gas/testsuite/gas/i386/x86-64-waitpkg-intel.d
@@ -0,0 +1,19 @@
+#as:
+#objdump: -dw -Mintel
+#name: x86_64 WAITPKG insns (Intel disassembly)
+#source: x86-64-waitpkg.s
+
+.*: +file format .*
+
+
+Disassembly of section \.text:
+
+0+ <_start>:
+[ ]*[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
+#pass
diff --git a/gas/testsuite/gas/i386/x86-64-waitpkg.d b/gas/testsuite/gas/i386/x86-64-waitpkg.d
new file mode 100644
index 0000000..0930aa2
--- /dev/null
+++ b/gas/testsuite/gas/i386/x86-64-waitpkg.d
@@ -0,0 +1,19 @@
+#as:
+#objdump: -dw
+#name: x86_64 WAITPKG insns
+#source: x86-64-waitpkg.s
+
+.*: +file format .*
+
+
+Disassembly of section \.text:
+
+0+ <_start>:
+[ ]*[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
+#pass
diff --git a/gas/testsuite/gas/i386/x86-64-waitpkg.s b/gas/testsuite/gas/i386/x86-64-waitpkg.s
new file mode 100644
index 0000000..7899c39
--- /dev/null
+++ b/gas/testsuite/gas/i386/x86-64-waitpkg.s
@@ -0,0 +1,11 @@
+# Check 64bit WAITPKG instructions.
+
+ .text
+_start:
+ umonitor %rax
+ umonitor %r10
+ umonitor %r10d
+ umwait %rcx
+ umwait %r10
+ tpause %rcx
+ tpause %r10