diff options
author | Jan Beulich <jbeulich@suse.com> | 2021-02-16 11:32:18 +0100 |
---|---|---|
committer | Jan Beulich <jbeulich@suse.com> | 2021-02-16 11:32:18 +0100 |
commit | 014d61ea14540cc524a6f75d2b925e7bb1a6d289 (patch) | |
tree | 82d2c225bcd0707d63e1cf64f52919c5f7a0cd7a /gas | |
parent | cbe686965606262a9e4a3ca0e148d7812b368e7b (diff) | |
download | gdb-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/ChangeLog | 12 | ||||
-rw-r--r-- | gas/config/tc-i386.c | 12 | ||||
-rw-r--r-- | gas/testsuite/gas/i386/i386.exp | 3 | ||||
-rw-r--r-- | gas/testsuite/gas/i386/property-ldmxcsr.d | 9 | ||||
-rw-r--r-- | gas/testsuite/gas/i386/property-ldmxcsr.s | 2 | ||||
-rw-r--r-- | gas/testsuite/gas/i386/property-vldmxcsr.d | 9 | ||||
-rw-r--r-- | gas/testsuite/gas/i386/property-vldmxcsr.s | 2 | ||||
-rw-r--r-- | gas/testsuite/gas/i386/property-vzeroall.d | 9 | ||||
-rw-r--r-- | gas/testsuite/gas/i386/property-vzeroall.s | 2 |
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 |