aboutsummaryrefslogtreecommitdiff
path: root/gas
diff options
context:
space:
mode:
authorJan Beulich <jbeulich@suse.com>2021-02-16 11:32:18 +0100
committerJan Beulich <jbeulich@suse.com>2021-02-16 11:32:18 +0100
commit014d61ea14540cc524a6f75d2b925e7bb1a6d289 (patch)
tree82d2c225bcd0707d63e1cf64f52919c5f7a0cd7a /gas
parentcbe686965606262a9e4a3ca0e148d7812b368e7b (diff)
downloadgdb-014d61ea14540cc524a6f75d2b925e7bb1a6d289.zip
gdb-014d61ea14540cc524a6f75d2b925e7bb1a6d289.tar.gz
gdb-014d61ea14540cc524a6f75d2b925e7bb1a6d289.tar.bz2
x86: record register use for SIMD insns without respective explicit operands
VZERO{ALL,UPPER} modify YMM registers despite having no operands. While {,V}{LD,ST}MXCSR don't modify XMM registers, MXCSR and XMMn collectively form underlying machine state.
Diffstat (limited to 'gas')
-rw-r--r--gas/ChangeLog12
-rw-r--r--gas/config/tc-i386.c12
-rw-r--r--gas/testsuite/gas/i386/i386.exp3
-rw-r--r--gas/testsuite/gas/i386/property-ldmxcsr.d9
-rw-r--r--gas/testsuite/gas/i386/property-ldmxcsr.s2
-rw-r--r--gas/testsuite/gas/i386/property-vldmxcsr.d9
-rw-r--r--gas/testsuite/gas/i386/property-vldmxcsr.s2
-rw-r--r--gas/testsuite/gas/i386/property-vzeroall.d9
-rw-r--r--gas/testsuite/gas/i386/property-vzeroall.s2
9 files changed, 60 insertions, 0 deletions
diff --git a/gas/ChangeLog b/gas/ChangeLog
index 12ce28b..a269303 100644
--- a/gas/ChangeLog
+++ b/gas/ChangeLog
@@ -1,5 +1,17 @@
2021-02-16 Jan Beulich <jbeulich@suse.com>
+ * config/tc-i386.c (output_insn): Handle ldmxcsr, stmxcsr,
+ vldmxcsr, vstmxcsr, vzeroall, and vzeroupper.
+ * testsuite/gas/i386/property-ldmxcsr.s,
+ testsuite/gas/i386/property-ldmxcsr.d,
+ testsuite/gas/i386/property-vldmxcsr.s,
+ testsuite/gas/i386/property-vldmxcsr.d,
+ testsuite/gas/i386/property-vzeroall.s,
+ testsuite/gas/i386/property-vzeroall.d: New.
+ * testsuite/gas/i386/i386.exp: Run new tests.
+
+2021-02-16 Jan Beulich <jbeulich@suse.com>
+
* testsuite/gas/i386/i386.exp: Move bitness-independent property
tests to bitness independent section.
* testsuite/gas/i386/x86-64-property-2.d,
diff --git a/gas/config/tc-i386.c b/gas/config/tc-i386.c
index b0140e1..94783f5 100644
--- a/gas/config/tc-i386.c
+++ b/gas/config/tc-i386.c
@@ -9208,10 +9208,12 @@ output_insn (void)
|| i.tm.cpu_flags.bitfield.cpu687
|| i.tm.cpu_flags.bitfield.cpufisttp)
x86_feature_2_used |= GNU_PROPERTY_X86_FEATURE_2_X87;
+
if ((i.xstate & xstate_mmx)
|| i.tm.base_opcode == 0xf77 /* emms */
|| i.tm.base_opcode == 0xf0e /* femms */)
x86_feature_2_used |= GNU_PROPERTY_X86_FEATURE_2_MMX;
+
if (i.index_reg)
{
if (i.index_reg->reg_type.bitfield.zmmword)
@@ -9221,10 +9223,20 @@ output_insn (void)
else if (i.index_reg->reg_type.bitfield.xmmword)
i.xstate |= xstate_xmm;
}
+
+ /* vzeroall / vzeroupper */
+ if (i.tm.base_opcode == 0x77 && i.tm.cpu_flags.bitfield.cpuavx)
+ i.xstate |= xstate_ymm;
+
if ((i.xstate & xstate_xmm)
+ /* ldmxcsr / stmxcsr */
+ || (i.tm.base_opcode == 0xfae && i.tm.cpu_flags.bitfield.cpusse)
+ /* vldmxcsr / vstmxcsr */
+ || (i.tm.base_opcode == 0xae && i.tm.cpu_flags.bitfield.cpuavx)
|| i.tm.cpu_flags.bitfield.cpuwidekl
|| i.tm.cpu_flags.bitfield.cpukl)
x86_feature_2_used |= GNU_PROPERTY_X86_FEATURE_2_XMM;
+
if ((i.xstate & xstate_ymm) == xstate_ymm)
x86_feature_2_used |= GNU_PROPERTY_X86_FEATURE_2_YMM;
if ((i.xstate & xstate_zmm) == xstate_zmm)
diff --git a/gas/testsuite/gas/i386/i386.exp b/gas/testsuite/gas/i386/i386.exp
index 5a481a4..89f62b3 100644
--- a/gas/testsuite/gas/i386/i386.exp
+++ b/gas/testsuite/gas/i386/i386.exp
@@ -725,6 +725,9 @@ if {[is_elf_format] || [istarget "*-*-vxworks*"]} then {
run_dump_test "property-11"
run_dump_test "property-12"
run_dump_test "property-13"
+ run_dump_test "property-ldmxcsr"
+ run_dump_test "property-vldmxcsr"
+ run_dump_test "property-vzeroall"
if {![istarget "*-*-dragonfly*"]
&& ![istarget "*-*-gnu*"]
diff --git a/gas/testsuite/gas/i386/property-ldmxcsr.d b/gas/testsuite/gas/i386/property-ldmxcsr.d
new file mode 100644
index 0000000..7fb546e
--- /dev/null
+++ b/gas/testsuite/gas/i386/property-ldmxcsr.d
@@ -0,0 +1,9 @@
+#name: i386 property ldmxcsr
+#as: -mx86-used-note=yes --generate-missing-build-notes=no
+#readelf: -n
+
+Displaying notes found in: .note.gnu.property
+[ ]+Owner[ ]+Data size[ ]+Description
+ GNU 0x[0-9a-f]+ NT_GNU_PROPERTY_TYPE_0
+ Properties: x86 ISA used: x86-64-baseline
+ x86 feature used: x86, XMM
diff --git a/gas/testsuite/gas/i386/property-ldmxcsr.s b/gas/testsuite/gas/i386/property-ldmxcsr.s
new file mode 100644
index 0000000..8a8a399
--- /dev/null
+++ b/gas/testsuite/gas/i386/property-ldmxcsr.s
@@ -0,0 +1,2 @@
+ .text
+ ldmxcsr (%eax)
diff --git a/gas/testsuite/gas/i386/property-vldmxcsr.d b/gas/testsuite/gas/i386/property-vldmxcsr.d
new file mode 100644
index 0000000..b913b11
--- /dev/null
+++ b/gas/testsuite/gas/i386/property-vldmxcsr.d
@@ -0,0 +1,9 @@
+#name: i386 property vldmxcsr
+#as: -mx86-used-note=yes --generate-missing-build-notes=no
+#readelf: -n
+
+Displaying notes found in: .note.gnu.property
+[ ]+Owner[ ]+Data size[ ]+Description
+ GNU 0x[0-9a-f]+ NT_GNU_PROPERTY_TYPE_0
+ Properties: x86 ISA used: x86-64-baseline, x86-64-v3
+ x86 feature used: x86, XMM
diff --git a/gas/testsuite/gas/i386/property-vldmxcsr.s b/gas/testsuite/gas/i386/property-vldmxcsr.s
new file mode 100644
index 0000000..69071fe
--- /dev/null
+++ b/gas/testsuite/gas/i386/property-vldmxcsr.s
@@ -0,0 +1,2 @@
+ .text
+ vldmxcsr (%eax)
diff --git a/gas/testsuite/gas/i386/property-vzeroall.d b/gas/testsuite/gas/i386/property-vzeroall.d
new file mode 100644
index 0000000..e1faee4
--- /dev/null
+++ b/gas/testsuite/gas/i386/property-vzeroall.d
@@ -0,0 +1,9 @@
+#name: i386 property vzeroall
+#as: -mx86-used-note=yes --generate-missing-build-notes=no
+#readelf: -n
+
+Displaying notes found in: .note.gnu.property
+[ ]+Owner[ ]+Data size[ ]+Description
+ GNU 0x[0-9a-f]+ NT_GNU_PROPERTY_TYPE_0
+ Properties: x86 ISA used: x86-64-baseline, x86-64-v3
+ x86 feature used: x86, XMM, YMM
diff --git a/gas/testsuite/gas/i386/property-vzeroall.s b/gas/testsuite/gas/i386/property-vzeroall.s
new file mode 100644
index 0000000..ec83d6b
--- /dev/null
+++ b/gas/testsuite/gas/i386/property-vzeroall.s
@@ -0,0 +1,2 @@
+ .text
+ vzeroall