From 3d70986f2181a3aa4b9660729a8e1313e5ece4e0 Mon Sep 17 00:00:00 2001 From: Jan Beulich Date: Tue, 16 Feb 2021 11:33:04 +0100 Subject: [PATCH] x86: honor template rather than actual operands when updating i.xstate This undoes a change to md_assemble() that 32930e4edbc0 ("x86: Support GNU_PROPERTY_X86_ISA_1_V[234] marker") did without any explanation. This broke a CVTPI2PS property test that a subsequent test will add, and the updates to existing tests also demonstrate what was wrong: For example, AVX insns update the full YMM, even if a Vex128 variant is in use. --- gas/ChangeLog | 8 ++++++++ gas/config/tc-i386.c | 10 +++++----- gas/testsuite/gas/i386/property-12.d | 2 +- gas/testsuite/gas/i386/property-4.d | 2 +- gas/testsuite/gas/i386/property-5.d | 2 +- 5 files changed, 16 insertions(+), 8 deletions(-) diff --git a/gas/ChangeLog b/gas/ChangeLog index a269303e080..443511f91c3 100644 --- a/gas/ChangeLog +++ b/gas/ChangeLog @@ -1,3 +1,11 @@ +2021-02-16 Jan Beulich + + * config/tc-i386.c (md_assemble): Use template rather than + actuals when updating i.xstate. + * testsuite/gas/i386/property-4.d, + testsuite/gas/i386/property-5.d, + testsuite/gas/i386/property-12.d: Adjust expectations. + 2021-02-16 Jan Beulich * config/tc-i386.c (output_insn): Handle ldmxcsr, stmxcsr, diff --git a/gas/config/tc-i386.c b/gas/config/tc-i386.c index 94783f51550..2aaffff2187 100644 --- a/gas/config/tc-i386.c +++ b/gas/config/tc-i386.c @@ -4874,7 +4874,7 @@ md_assemble (char *line) for (j = 0; j < i.operands; j++) { i.types[j] = operand_type_and (i.types[j], i.tm.operand_types[j]); - switch (i.types[j].bitfield.class) + switch (i.tm.operand_types[j].bitfield.class) { default: break; @@ -4885,13 +4885,13 @@ md_assemble (char *line) i.xstate |= xstate_mask; break; case RegSIMD: - if (i.types[j].bitfield.tmmword) + if (i.tm.operand_types[j].bitfield.tmmword) i.xstate |= xstate_tmm; - else if (i.types[j].bitfield.zmmword) + else if (i.tm.operand_types[j].bitfield.zmmword) i.xstate |= xstate_zmm; - else if (i.types[j].bitfield.ymmword) + else if (i.tm.operand_types[j].bitfield.ymmword) i.xstate |= xstate_ymm; - else if (i.types[j].bitfield.xmmword) + else if (i.tm.operand_types[j].bitfield.xmmword) i.xstate |= xstate_xmm; break; } diff --git a/gas/testsuite/gas/i386/property-12.d b/gas/testsuite/gas/i386/property-12.d index 1a5c2978075..1cb010aab67 100644 --- a/gas/testsuite/gas/i386/property-12.d +++ b/gas/testsuite/gas/i386/property-12.d @@ -6,4 +6,4 @@ 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-v4 - x86 feature used: x86, XMM, MASK + x86 feature used: x86, XMM, YMM, ZMM, MASK diff --git a/gas/testsuite/gas/i386/property-4.d b/gas/testsuite/gas/i386/property-4.d index 46450c87af4..3345c17eb1d 100644 --- a/gas/testsuite/gas/i386/property-4.d +++ b/gas/testsuite/gas/i386/property-4.d @@ -6,4 +6,4 @@ 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 + x86 feature used: x86, XMM, YMM diff --git a/gas/testsuite/gas/i386/property-5.d b/gas/testsuite/gas/i386/property-5.d index c04a6b84f5d..cad4a4d3ff0 100644 --- a/gas/testsuite/gas/i386/property-5.d +++ b/gas/testsuite/gas/i386/property-5.d @@ -6,4 +6,4 @@ 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-v4 - x86 feature used: x86, XMM + x86 feature used: x86, XMM, YMM, ZMM -- 2.30.2