diff options
author | Jan Beulich <jbeulich@suse.com> | 2022-04-19 09:26:17 +0200 |
---|---|---|
committer | Jan Beulich <jbeulich@suse.com> | 2022-04-19 09:26:17 +0200 |
commit | 2aaee75f81a130011c96a0ab38475dba894114c3 (patch) | |
tree | aced5b0455f404a30127ca6f2db2a9e48e59543e | |
parent | bb80cf5b42aea267fe575f006a2a5f720825b77b (diff) | |
download | gdb-2aaee75f81a130011c96a0ab38475dba894114c3.zip gdb-2aaee75f81a130011c96a0ab38475dba894114c3.tar.gz gdb-2aaee75f81a130011c96a0ab38475dba894114c3.tar.bz2 |
x86: don't mistake ordinary immediates for SAE / rounding control
The way SAE templates are constructed was always puzzling me (including
the need for separate templates in the first place), and expressing the
extzra attribute via Imm8 actually has a bad effect: Ordinary immediates
would also be accepted, leading to an extra byte being added after the
instruction (i.e. generating bad code). Before re-working this (in
particular to accept proper Intel syntax there), fix the immediate issue
by adding the so far missing check.
-rw-r--r-- | gas/config/tc-i386.c | 5 | ||||
-rw-r--r-- | gas/testsuite/gas/i386/inval-avx512f.l | 9 | ||||
-rw-r--r-- | gas/testsuite/gas/i386/inval-avx512f.s | 4 |
3 files changed, 15 insertions, 3 deletions
diff --git a/gas/config/tc-i386.c b/gas/config/tc-i386.c index c26b654..b8e3c24 100644 --- a/gas/config/tc-i386.c +++ b/gas/config/tc-i386.c @@ -6287,6 +6287,11 @@ check_VecOperands (const insn_template *t) return 1; } } + else if (t->opcode_modifier.sae) + { + i.error = unsupported_syntax; + return 1; + } /* Check the special Imm4 cases; must be the first operand. */ if (t->cpu_flags.bitfield.cpuxop && t->operands == 5) diff --git a/gas/testsuite/gas/i386/inval-avx512f.l b/gas/testsuite/gas/i386/inval-avx512f.l index c47ac7d..d45ae25 100644 --- a/gas/testsuite/gas/i386/inval-avx512f.l +++ b/gas/testsuite/gas/i386/inval-avx512f.l @@ -218,6 +218,8 @@ .*:313: Error: .*unsupported broadcast for `vcvtneps2bf16' .*:316: Error: .*unsupported broadcast for `vcvtneps2bf16' .*:319: Error: .*unsupported broadcast for `vcvtneps2bf16' +.*:321: Error: .*vaddps.* +.*:322: Error: .*vcmpss.* GAS LISTING .* @@ -569,6 +571,7 @@ GAS LISTING .* [ ]*318 \?\?\?\? 62F27E38[ ]+vcvtneps2bf16 \(%eax\)\{1to8\}, %xmm1 [ ]*318[ ]+7208 [ ]*319[ ]+vcvtneps2bf16 \(%eax\)\{1to16\}, %xmm1 -[ ]*320[ ]+\?\?\?\? 8DB42600 \.p2align 4 -[ ]*320[ ]+0000008D -[ ]*320[ ]+7600 +[ ]*320[ ]* +[ ]*321[ ]+vaddps \$0xcc, %zmm0, %zmm0, %zmm0 +[ ]*322[ ]+vcmpss \$0, \$0xcc, %xmm0, %xmm0, %k0 +#pass diff --git a/gas/testsuite/gas/i386/inval-avx512f.s b/gas/testsuite/gas/i386/inval-avx512f.s index 7cca7ef..841992b 100644 --- a/gas/testsuite/gas/i386/inval-avx512f.s +++ b/gas/testsuite/gas/i386/inval-avx512f.s @@ -317,4 +317,8 @@ _start: vcvtneps2bf16 (%eax){1to4}, %xmm1 vcvtneps2bf16 (%eax){1to8}, %xmm1 vcvtneps2bf16 (%eax){1to16}, %xmm1 + + vaddps $0xcc, %zmm0, %zmm0, %zmm0 + vcmpss $0, $0xcc, %xmm0, %xmm0, %k0 + .p2align 4 |