From: Jan Beulich Date: Tue, 19 Apr 2022 07:26:17 +0000 (+0200) Subject: x86: don't mistake ordinary immediates for SAE / rounding control X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=2aaee75f81a130011c96a0ab38475dba894114c3;p=binutils-gdb.git 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. --- diff --git a/gas/config/tc-i386.c b/gas/config/tc-i386.c index c26b654eb72..b8e3c24c25d 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 c47ac7db90c..d45ae250ba0 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 7cca7ef854c..841992bbd79 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