]> git.ipfire.org Git - thirdparty/binutils-gdb.git/commitdiff
gas: PR 25863: Fix scalar vmul inside it block when assembling for MVE
authorAndre Simoes Dias Vieira <andre.simoesdiasvieira@arm.com>
Mon, 4 May 2020 12:05:42 +0000 (13:05 +0100)
committerAndre Vieira <andre.simoesdiasvieira@arm.com>
Thu, 7 May 2020 08:21:10 +0000 (09:21 +0100)
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/ChangeLog
gas/config/tc-arm.c
gas/testsuite/gas/arm/mve-scalar-vmul-it.d [new file with mode: 0644]
gas/testsuite/gas/arm/mve-scalar-vmul-it.s [new file with mode: 0644]

index 3ebb0aa53efb1c4b4cab8a888b37ff26debc79ab..901af53f5405037aa4b78829b38d95368fcd8b7d 100644 (file)
@@ -1,3 +1,13 @@
+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.
+
 2020-04-21  Tamar Christina  <tamar.christina@arm.com>
 
        Backport from mainline.
index 8ad2d6d3bd7c677cad12d3e11a27b171307c348c..7550f9096ca2c23f64760c905db0f4e6e8b33d45 100644 (file)
@@ -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 (file)
index 0000000..f4564a5
--- /dev/null
@@ -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 (file)
index 0000000..e6c24ac
--- /dev/null
@@ -0,0 +1,5 @@
+.syntax unified
+.text
+itt lt
+vmullt.f32 s0, s1, s2
+vmullt.f64 d0, d1, d2