aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJan Beulich <jbeulich@suse.com>2022-04-19 09:26:17 +0200
committerJan Beulich <jbeulich@suse.com>2022-04-19 09:26:17 +0200
commit2aaee75f81a130011c96a0ab38475dba894114c3 (patch)
treeaced5b0455f404a30127ca6f2db2a9e48e59543e
parentbb80cf5b42aea267fe575f006a2a5f720825b77b (diff)
downloadgdb-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.c5
-rw-r--r--gas/testsuite/gas/i386/inval-avx512f.l9
-rw-r--r--gas/testsuite/gas/i386/inval-avx512f.s4
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