86 lines
2.9 KiB
Diff
86 lines
2.9 KiB
Diff
From a72427b1ae01304da0b5170e1e53f68c6d46c1de Mon Sep 17 00:00:00 2001
|
|
From: Andre Simoes Dias Vieira <andre.simoesdiasvieira@arm.com>
|
|
Date: Mon, 4 May 2020 13:05:42 +0100
|
|
Subject: [PATCH] gas: PR 25863: Fix scalar vmul inside it block when
|
|
assembling for MVE
|
|
|
|
This fixes PR 25863 by fixing the condition in the parsing of vmul in
|
|
do_mve_vmull. It also simplifies the code in there fixing latent issues that
|
|
would lead to NEON code being accepted when it shouldn't.
|
|
|
|
2020-05-07 Andre Vieira <andre.simoesdiasvieira@arm.com>
|
|
|
|
Backport from mainline.
|
|
2020-05-04 Andre Vieira <andre.simoesdiasvieira@arm.com>
|
|
|
|
PR gas/25863
|
|
* config/tc-arm.c (do_mve_vmull): Fix scalar and NEON parsing of vmul.
|
|
* testsuite/gas/arm/mve-scalar-vmult-it.d: New test.
|
|
* testsuite/gas/arm/mve-scalar-vmult-it.s: New test.
|
|
---
|
|
gas/config/tc-arm.c | 12 +++---------
|
|
gas/testsuite/gas/arm/mve-scalar-vmul-it.d | 11 +++++++++++
|
|
gas/testsuite/gas/arm/mve-scalar-vmul-it.s | 5 +++++
|
|
3 files changed, 19 insertions(+), 9 deletions(-)
|
|
create mode 100644 gas/testsuite/gas/arm/mve-scalar-vmul-it.d
|
|
create mode 100644 gas/testsuite/gas/arm/mve-scalar-vmul-it.s
|
|
|
|
diff --git a/gas/config/tc-arm.c b/gas/config/tc-arm.c
|
|
index 8ad2d6d..7550f90 100644
|
|
--- a/gas/config/tc-arm.c
|
|
+++ b/gas/config/tc-arm.c
|
|
@@ -18221,19 +18221,13 @@ do_mve_vmull (void)
|
|
|
|
enum neon_shape rs = neon_select_shape (NS_HHH, NS_FFF, NS_DDD, NS_DDS,
|
|
NS_QQS, NS_QQQ, NS_QQR, NS_NULL);
|
|
- if (!ARM_CPU_HAS_FEATURE (cpu_variant, mve_ext)
|
|
- && inst.cond == COND_ALWAYS
|
|
+ if (inst.cond == COND_ALWAYS
|
|
&& ((unsigned)inst.instruction) == M_MNEM_vmullt)
|
|
{
|
|
+
|
|
if (rs == NS_QQQ)
|
|
{
|
|
-
|
|
- struct neon_type_el et = neon_check_type (3, rs, N_EQK , N_EQK,
|
|
- N_SUF_32 | N_F64 | N_P8
|
|
- | N_P16 | N_I_MVE | N_KEY);
|
|
- if (((et.type == NT_poly) && et.size == 8
|
|
- && ARM_CPU_IS_ANY (cpu_variant))
|
|
- || (et.type == NT_integer) || (et.type == NT_float))
|
|
+ if (!ARM_CPU_HAS_FEATURE (cpu_variant, mve_ext))
|
|
goto neon_vmul;
|
|
}
|
|
else
|
|
diff --git a/gas/testsuite/gas/arm/mve-scalar-vmul-it.d b/gas/testsuite/gas/arm/mve-scalar-vmul-it.d
|
|
new file mode 100644
|
|
index 0000000..f4564a5
|
|
--- /dev/null
|
|
+++ b/gas/testsuite/gas/arm/mve-scalar-vmul-it.d
|
|
@@ -0,0 +1,11 @@
|
|
+# name: Armv8.1-M Mainline scalar vmul instructions in it blocks (with MVE)
|
|
+# as: -march=armv8.1-m.main+mve.fp+fp.dp
|
|
+# objdump: -dr --prefix-addresses --show-raw-insn -marmv8.1-m.main
|
|
+
|
|
+.*: +file format .*arm.*
|
|
+
|
|
+Disassembly of section .text:
|
|
+[^>]*> bfbc itt lt
|
|
+[^>]*> ee20 0a81 vmullt.f32 s0, s1, s2
|
|
+[^>]*> ee21 0b02 vmullt.f64 d0, d1, d2
|
|
+#...
|
|
diff --git a/gas/testsuite/gas/arm/mve-scalar-vmul-it.s b/gas/testsuite/gas/arm/mve-scalar-vmul-it.s
|
|
new file mode 100644
|
|
index 0000000..e6c24ac
|
|
--- /dev/null
|
|
+++ b/gas/testsuite/gas/arm/mve-scalar-vmul-it.s
|
|
@@ -0,0 +1,5 @@
|
|
+.syntax unified
|
|
+.text
|
|
+itt lt
|
|
+vmullt.f32 s0, s1, s2
|
|
+vmullt.f64 d0, d1, d2
|
|
--
|
|
1.8.3.1
|
|
|