[GAS, ARM, 2/16] Add CLI extension support for Armv8.1-M Mainline
authorAndre Vieira <andre.simoesdiasvieira@arm.com>
Mon, 15 Apr 2019 10:00:21 +0000 (11:00 +0100)
committerAndre Vieira <andre.simoesdiasvieira@arm.com>
Mon, 15 Apr 2019 10:00:21 +0000 (11:00 +0100)
This patch implements the dsp, fp and fp.dp extensions for Armv8.1-M Mainline.

This patch also removes the fp-armv8 check from the half-precision move
instructions 'do_neon_movhf', as checking that the FP16 instructions extension
feature bit is enabled 'ARM_EXT2_FP16_INST' is enough.

gas/ChangeLog:
2019-04-15  Andre Vieira  <andre.simoesdiasvieira@arm.com>

* config/tc-arm.c (do_neon_movhf): Remove fp-armv8 check.
(armv8_1m_main_ext_table): New extension table.
(arm_archs): Use the new extension table.
* doc/c-arm.texi: Add missing arch and document new extensions.
* testsuite/gas/arm/armv8.1-m.main-fp.d: New.
* testsuite/gas/arm/armv8.1-m.main-fp-dp.d: New.
* testsuite/gas/arm/armv8.1-m.main-hp.d: New.

gas/ChangeLog
gas/config/tc-arm.c
gas/doc/c-arm.texi
gas/testsuite/gas/arm/armv8.1-m.main-fp-dp.d [new file with mode: 0644]
gas/testsuite/gas/arm/armv8.1-m.main-fp.d [new file with mode: 0644]
gas/testsuite/gas/arm/armv8.1-m.main-hp.d [new file with mode: 0644]

index bb30f84..483823c 100644 (file)
@@ -1,3 +1,13 @@
+2019-04-15  Andre Vieira  <andre.simoesdiasvieira@arm.com>
+
+       * config/tc-arm.c (do_neon_movhf): Remove fp-armv8 check.
+       (armv8_1m_main_ext_table): New extension table.
+       (arm_archs): Use the new extension table.
+       * doc/c-arm.texi: Add missing arch and document new extensions.
+       * testsuite/gas/arm/armv8.1-m.main-fp.d: New.
+       * testsuite/gas/arm/armv8.1-m.main-fp-dp.d: New.
+       * testsuite/gas/arm/armv8.1-m.main-hp.d: New.
+
 2019-04-15  Thomas Preud'homme  <thomas.preudhomme@arm.com>
 
        * config/tc-arm.c (cpu_arch_ver): Add entry for Armv8.1-M Mainline
index 4f96066..11d593c 100644 (file)
@@ -16809,9 +16809,6 @@ do_neon_movhf (void)
   enum neon_shape rs = neon_select_shape (NS_HH, NS_NULL);
   constraint (rs != NS_HH, _("invalid suffix"));
 
-  constraint (!ARM_CPU_HAS_FEATURE (cpu_variant, fpu_vfp_ext_armv8),
-             _(BAD_FPU));
-
   if (inst.cond != COND_ALWAYS)
     {
       if (thumb_mode)
@@ -26503,6 +26500,20 @@ static const struct arm_ext_table armv8m_main_ext_table[] =
   { NULL, 0, ARM_ARCH_NONE, ARM_ARCH_NONE }
 };
 
+static const struct arm_ext_table armv8_1m_main_ext_table[] =
+{
+  ARM_EXT ("dsp", ARM_FEATURE_CORE_LOW (ARM_EXT_V5ExP | ARM_EXT_V6_DSP),
+                 ARM_FEATURE_CORE_LOW (ARM_EXT_V5ExP | ARM_EXT_V6_DSP)),
+  ARM_EXT ("fp",
+          ARM_FEATURE (0, ARM_EXT2_FP16_INST,
+                       FPU_VFP_V5_SP_D16 | FPU_VFP_EXT_FP16 | FPU_VFP_EXT_FMA),
+          ALL_FP),
+  ARM_ADD ("fp.dp",
+          ARM_FEATURE (0, ARM_EXT2_FP16_INST,
+                       FPU_VFP_V5D16 | FPU_VFP_EXT_FP16 | FPU_VFP_EXT_FMA)),
+  { NULL, 0, ARM_ARCH_NONE, ARM_ARCH_NONE }
+};
+
 static const struct arm_ext_table armv8r_ext_table[] =
 {
   ARM_ADD ("crc", ARCH_CRC_ARMV8),
@@ -26570,7 +26581,8 @@ static const struct arm_arch_option_table arm_archs[] =
   ARM_ARCH_OPT ("armv8-m.base",          ARM_ARCH_V8M_BASE,    FPU_ARCH_VFP),
   ARM_ARCH_OPT2 ("armv8-m.main",  ARM_ARCH_V8M_MAIN,   FPU_ARCH_VFP,
                 armv8m_main),
-  ARM_ARCH_OPT ("armv8.1-m.main", ARM_ARCH_V8_1M_MAIN, FPU_ARCH_VFP),
+  ARM_ARCH_OPT2 ("armv8.1-m.main", ARM_ARCH_V8_1M_MAIN,        FPU_ARCH_VFP,
+                armv8_1m_main),
   ARM_ARCH_OPT2 ("armv8-a",      ARM_ARCH_V8A,         FPU_ARCH_VFP, armv8a),
   ARM_ARCH_OPT2 ("armv8.1-a",    ARM_ARCH_V8_1A,       FPU_ARCH_VFP, armv81a),
   ARM_ARCH_OPT2 ("armv8.2-a",    ARM_ARCH_V8_2A,       FPU_ARCH_VFP, armv82a),
index 184d716..4c595d8 100644 (file)
@@ -250,6 +250,7 @@ names are recognized:
 @code{armv8.5-a},
 @code{armv8-m.base},
 @code{armv8-m.main},
+@code{armv8.1-m.main},
 @code{iwmmxt},
 @code{iwmmxt2}
 and
@@ -355,6 +356,16 @@ double-word registers.
 @code{+nofp}: Disables all FPU instructions.
 @code{+nodsp}: Disables DSP Extension.
 
+For @code{armv8.1-m.main}:
+
+@code{+dsp}: Enables DSP Extension.
+@code{+fp}: Enables single and half precision scalar Floating Point Extensions
+for Armv8.1-M Mainline with 16 double-word registers.
+@code{+fp.dp}: Enables double precision scalar Floating Point Extensions for
+Armv8.1-M Mainline, implies @code{+fp}.
+@code{+nofp}: Disables all FPU instructions.
+@code{+nodsp}: Disables DSP Extension.
+
 For @code{armv8-a}:
 
 @code{+crc}: Enables CRC32 Extension.
diff --git a/gas/testsuite/gas/arm/armv8.1-m.main-fp-dp.d b/gas/testsuite/gas/arm/armv8.1-m.main-fp-dp.d
new file mode 100644 (file)
index 0000000..79c17da
--- /dev/null
@@ -0,0 +1,203 @@
+# name: Double precision instructions for 'armv8.1-m.main'
+# source: vfp1_t2.s
+# as: -march=armv8.1-m.main+fp.dp
+# objdump: -dr --prefix-addresses --show-raw-insn
+
+.*: +file format .*arm.*
+
+Disassembly of section .text:
+0+000 <[^>]*> eeb4 0bc0        (vcmpe\.f64|fcmped)     d0, d0
+0+004 <[^>]*> eeb5 0bc0        (vcmpe\.f64     d0, #0.0|fcmpezd        d0)
+0+008 <[^>]*> eeb4 0b40        (vcmp\.f64|fcmpd)       d0, d0
+0+00c <[^>]*> eeb5 0b40        (vcmp\.f64      d0, #0.0|fcmpzd d0)
+0+010 <[^>]*> eeb0 0bc0        (vabs\.f64|fabsd)       d0, d0
+0+014 <[^>]*> eeb0 0b40        (vmov\.f64|fcpyd)       d0, d0
+0+018 <[^>]*> eeb1 0b40        (vneg\.f64|fnegd)       d0, d0
+0+01c <[^>]*> eeb1 0bc0        (vsqrt\.f64|fsqrtd)     d0, d0
+0+020 <[^>]*> ee30 0b00        (vadd\.f64|faddd)       d0, d0, d0
+0+024 <[^>]*> ee80 0b00        (vdiv\.f64|fdivd)       d0, d0, d0
+0+028 <[^>]*> ee00 0b00        (vmla\.f64|fmacd)       d0, d0, d0
+0+02c <[^>]*> ee10 0b00        (vnmls\.f64|fmscd)      d0, d0, d0
+0+030 <[^>]*> ee20 0b00        (vmul\.f64|fmuld)       d0, d0, d0
+0+034 <[^>]*> ee00 0b40        (vmls\.f64|fnmacd)      d0, d0, d0
+0+038 <[^>]*> ee10 0b40        (vnmla\.f64|fnmscd)     d0, d0, d0
+0+03c <[^>]*> ee20 0b40        (vnmul\.f64|fnmuld)     d0, d0, d0
+0+040 <[^>]*> ee30 0b40        (vsub\.f64|fsubd)       d0, d0, d0
+0+044 <[^>]*> ed90 0b00        vldr    d0, \[r0\]
+0+048 <[^>]*> ed80 0b00        vstr    d0, \[r0\]
+0+04c <[^>]*> ec90 0b02        vldmia  r0, {d0}
+0+050 <[^>]*> ec90 0b02        vldmia  r0, {d0}
+0+054 <[^>]*> ecb0 0b02        vldmia  r0!, {d0}
+0+058 <[^>]*> ecb0 0b02        vldmia  r0!, {d0}
+0+05c <[^>]*> ed30 0b02        vldmdb  r0!, {d0}
+0+060 <[^>]*> ed30 0b02        vldmdb  r0!, {d0}
+0+064 <[^>]*> ec80 0b02        vstmia  r0, {d0}
+0+068 <[^>]*> ec80 0b02        vstmia  r0, {d0}
+0+06c <[^>]*> eca0 0b02        vstmia  r0!, {d0}
+0+070 <[^>]*> eca0 0b02        vstmia  r0!, {d0}
+0+074 <[^>]*> ed20 0b02        vstmdb  r0!, {d0}
+0+078 <[^>]*> ed20 0b02        vstmdb  r0!, {d0}
+0+07c <[^>]*> eeb8 0bc0        (vcvt\.f64\.s32|fsitod) d0, s0
+0+080 <[^>]*> eeb8 0b40        (vcvt\.f64\.u32|fuitod) d0, s0
+0+084 <[^>]*> eebd 0b40        (vcvtr\.s32\.f64|ftosid)        s0, d0
+0+088 <[^>]*> eebd 0bc0        (vcvt\.s32\.f64|ftosizd)        s0, d0
+0+08c <[^>]*> eebc 0b40        (vcvtr\.u32\.f64|ftouid)        s0, d0
+0+090 <[^>]*> eebc 0bc0        (vcvt\.u32\.f64|ftouizd)        s0, d0
+0+094 <[^>]*> eeb7 0ac0        (vcvt\.f64\.f32|fcvtds) d0, s0
+0+098 <[^>]*> eeb7 0bc0        (vcvt\.f32\.f64|fcvtsd) s0, d0
+0+09c <[^>]*> ee30 0b10        vmov\.32        r0, d0\[1\]
+0+0a0 <[^>]*> ee10 0b10        vmov\.32        r0, d0\[0\]
+0+0a4 <[^>]*> ee20 0b10        vmov\.32        d0\[1\], r0
+0+0a8 <[^>]*> ee00 0b10        vmov\.32        d0\[0\], r0
+0+0ac <[^>]*> eeb5 1b40        (vcmp\.f64      d1, #0.0|fcmpzd d1)
+0+0b0 <[^>]*> eeb5 2b40        (vcmp\.f64      d2, #0.0|fcmpzd d2)
+0+0b4 <[^>]*> eeb5 fb40        (vcmp\.f64      d15, #0.0|fcmpzd        d15)
+0+0b8 <[^>]*> eeb4 0b41        (vcmp\.f64|fcmpd)       d0, d1
+0+0bc <[^>]*> eeb4 0b42        (vcmp\.f64|fcmpd)       d0, d2
+0+0c0 <[^>]*> eeb4 0b4f        (vcmp\.f64|fcmpd)       d0, d15
+0+0c4 <[^>]*> eeb4 1b40        (vcmp\.f64|fcmpd)       d1, d0
+0+0c8 <[^>]*> eeb4 2b40        (vcmp\.f64|fcmpd)       d2, d0
+0+0cc <[^>]*> eeb4 fb40        (vcmp\.f64|fcmpd)       d15, d0
+0+0d0 <[^>]*> eeb4 5b4c        (vcmp\.f64|fcmpd)       d5, d12
+0+0d4 <[^>]*> eeb1 0b41        (vneg\.f64|fnegd)       d0, d1
+0+0d8 <[^>]*> eeb1 0b42        (vneg\.f64|fnegd)       d0, d2
+0+0dc <[^>]*> eeb1 0b4f        (vneg\.f64|fnegd)       d0, d15
+0+0e0 <[^>]*> eeb1 1b40        (vneg\.f64|fnegd)       d1, d0
+0+0e4 <[^>]*> eeb1 2b40        (vneg\.f64|fnegd)       d2, d0
+0+0e8 <[^>]*> eeb1 fb40        (vneg\.f64|fnegd)       d15, d0
+0+0ec <[^>]*> eeb1 cb45        (vneg\.f64|fnegd)       d12, d5
+0+0f0 <[^>]*> ee30 0b01        (vadd\.f64|faddd)       d0, d0, d1
+0+0f4 <[^>]*> ee30 0b02        (vadd\.f64|faddd)       d0, d0, d2
+0+0f8 <[^>]*> ee30 0b0f        (vadd\.f64|faddd)       d0, d0, d15
+0+0fc <[^>]*> ee31 0b00        (vadd\.f64|faddd)       d0, d1, d0
+0+100 <[^>]*> ee32 0b00        (vadd\.f64|faddd)       d0, d2, d0
+0+104 <[^>]*> ee3f 0b00        (vadd\.f64|faddd)       d0, d15, d0
+0+108 <[^>]*> ee30 1b00        (vadd\.f64|faddd)       d1, d0, d0
+0+10c <[^>]*> ee30 2b00        (vadd\.f64|faddd)       d2, d0, d0
+0+110 <[^>]*> ee30 fb00        (vadd\.f64|faddd)       d15, d0, d0
+0+114 <[^>]*> ee39 cb05        (vadd\.f64|faddd)       d12, d9, d5
+0+118 <[^>]*> eeb7 0ae0        (vcvt\.f64\.f32|fcvtds) d0, s1
+0+11c <[^>]*> eeb7 0ac1        (vcvt\.f64\.f32|fcvtds) d0, s2
+0+120 <[^>]*> eeb7 0aef        (vcvt\.f64\.f32|fcvtds) d0, s31
+0+124 <[^>]*> eeb7 1ac0        (vcvt\.f64\.f32|fcvtds) d1, s0
+0+128 <[^>]*> eeb7 2ac0        (vcvt\.f64\.f32|fcvtds) d2, s0
+0+12c <[^>]*> eeb7 fac0        (vcvt\.f64\.f32|fcvtds) d15, s0
+0+130 <[^>]*> eef7 0bc0        (vcvt\.f32\.f64|fcvtsd) s1, d0
+0+134 <[^>]*> eeb7 1bc0        (vcvt\.f32\.f64|fcvtsd) s2, d0
+0+138 <[^>]*> eef7 fbc0        (vcvt\.f32\.f64|fcvtsd) s31, d0
+0+13c <[^>]*> eeb7 0bc1        (vcvt\.f32\.f64|fcvtsd) s0, d1
+0+140 <[^>]*> eeb7 0bc2        (vcvt\.f32\.f64|fcvtsd) s0, d2
+0+144 <[^>]*> eeb7 0bcf        (vcvt\.f32\.f64|fcvtsd) s0, d15
+0+148 <[^>]*> ee30 1b10        vmov\.32        r1, d0\[1\]
+0+14c <[^>]*> ee30 eb10        vmov\.32        lr, d0\[1\]
+0+150 <[^>]*> ee31 0b10        vmov\.32        r0, d1\[1\]
+0+154 <[^>]*> ee32 0b10        vmov\.32        r0, d2\[1\]
+0+158 <[^>]*> ee3f 0b10        vmov\.32        r0, d15\[1\]
+0+15c <[^>]*> ee10 1b10        vmov\.32        r1, d0\[0\]
+0+160 <[^>]*> ee10 eb10        vmov\.32        lr, d0\[0\]
+0+164 <[^>]*> ee11 0b10        vmov\.32        r0, d1\[0\]
+0+168 <[^>]*> ee12 0b10        vmov\.32        r0, d2\[0\]
+0+16c <[^>]*> ee1f 0b10        vmov\.32        r0, d15\[0\]
+0+170 <[^>]*> ee20 1b10        vmov\.32        d0\[1\], r1
+0+174 <[^>]*> ee20 eb10        vmov\.32        d0\[1\], lr
+0+178 <[^>]*> ee21 0b10        vmov\.32        d1\[1\], r0
+0+17c <[^>]*> ee22 0b10        vmov\.32        d2\[1\], r0
+0+180 <[^>]*> ee2f 0b10        vmov\.32        d15\[1\], r0
+0+184 <[^>]*> ee00 1b10        vmov\.32        d0\[0\], r1
+0+188 <[^>]*> ee00 eb10        vmov\.32        d0\[0\], lr
+0+18c <[^>]*> ee01 0b10        vmov\.32        d1\[0\], r0
+0+190 <[^>]*> ee02 0b10        vmov\.32        d2\[0\], r0
+0+194 <[^>]*> ee0f 0b10        vmov\.32        d15\[0\], r0
+0+198 <[^>]*> ed91 0b00        vldr    d0, \[r1\]
+0+19c <[^>]*> ed9e 0b00        vldr    d0, \[lr\]
+0+1a0 <[^>]*> ed90 0b00        vldr    d0, \[r0\]
+0+1a4 <[^>]*> ed90 0bff        vldr    d0, \[r0, #1020\].*
+0+1a8 <[^>]*> ed10 0bff        vldr    d0, \[r0, #-1020\].*
+0+1ac <[^>]*> ed90 1b00        vldr    d1, \[r0\]
+0+1b0 <[^>]*> ed90 2b00        vldr    d2, \[r0\]
+0+1b4 <[^>]*> ed90 fb00        vldr    d15, \[r0\]
+0+1b8 <[^>]*> ed8c cbc9        vstr    d12, \[ip, #804\].*
+0+1bc <[^>]*> ec90 1b02        vldmia  r0, {d1}
+0+1c0 <[^>]*> ec90 2b02        vldmia  r0, {d2}
+0+1c4 <[^>]*> ec90 fb02        vldmia  r0, {d15}
+0+1c8 <[^>]*> ec90 0b04        vldmia  r0, {d0-d1}
+0+1cc <[^>]*> ec90 0b06        vldmia  r0, {d0-d2}
+0+1d0 <[^>]*> ec90 0b20        vldmia  r0, {d0-d15}
+0+1d4 <[^>]*> ec90 1b1e        vldmia  r0, {d1-d15}
+0+1d8 <[^>]*> ec90 2b1c        vldmia  r0, {d2-d15}
+0+1dc <[^>]*> ec90 eb04        vldmia  r0, {d14-d15}
+0+1e0 <[^>]*> ec91 0b02        vldmia  r1, {d0}
+0+1e4 <[^>]*> ec9e 0b02        vldmia  lr, {d0}
+0+1e8 <[^>]*> eeb5 0b40        (vcmp\.f64      d0, #0.0|fcmpzd d0)
+0+1ec <[^>]*> eeb5 1b40        (vcmp\.f64      d1, #0.0|fcmpzd d1)
+0+1f0 <[^>]*> eeb5 2b40        (vcmp\.f64      d2, #0.0|fcmpzd d2)
+0+1f4 <[^>]*> eeb5 3b40        (vcmp\.f64      d3, #0.0|fcmpzd d3)
+0+1f8 <[^>]*> eeb5 4b40        (vcmp\.f64      d4, #0.0|fcmpzd d4)
+0+1fc <[^>]*> eeb5 5b40        (vcmp\.f64      d5, #0.0|fcmpzd d5)
+0+200 <[^>]*> eeb5 6b40        (vcmp\.f64      d6, #0.0|fcmpzd d6)
+0+204 <[^>]*> eeb5 7b40        (vcmp\.f64      d7, #0.0|fcmpzd d7)
+0+208 <[^>]*> eeb5 8b40        (vcmp\.f64      d8, #0.0|fcmpzd d8)
+0+20c <[^>]*> eeb5 9b40        (vcmp\.f64      d9, #0.0|fcmpzd d9)
+0+210 <[^>]*> eeb5 ab40        (vcmp\.f64      d10, #0.0|fcmpzd        d10)
+0+214 <[^>]*> eeb5 bb40        (vcmp\.f64      d11, #0.0|fcmpzd        d11)
+0+218 <[^>]*> eeb5 cb40        (vcmp\.f64      d12, #0.0|fcmpzd        d12)
+0+21c <[^>]*> eeb5 db40        (vcmp\.f64      d13, #0.0|fcmpzd        d13)
+0+220 <[^>]*> eeb5 eb40        (vcmp\.f64      d14, #0.0|fcmpzd        d14)
+0+224 <[^>]*> eeb5 fb40        (vcmp\.f64      d15, #0.0|fcmpzd        d15)
+0+228 <[^>]*> bf01             itttt   eq
+0+22a <[^>]*> eeb4 1bcf        (vcmpeeq\.f64|fcmpedeq) d1, d15
+0+22e <[^>]*> eeb5 2bc0        (vcmpeeq\.f64   d2, #0.0|fcmpezdeq      d2)
+0+232 <[^>]*> eeb4 3b4e        (vcmpeq\.f64|fcmpdeq)   d3, d14
+0+236 <[^>]*> eeb5 4b40        (vcmpeq\.f64    d4, #0.0|fcmpzdeq       d4)
+0+23a <[^>]*> bf01             itttt   eq
+0+23c <[^>]*> eeb0 5bcd        (vabseq\.f64|fabsdeq)   d5, d13
+0+240 <[^>]*> eeb0 6b4c        (vmoveq\.f64|fcpydeq)   d6, d12
+0+244 <[^>]*> eeb1 7b4b        (vnegeq\.f64|fnegdeq)   d7, d11
+0+248 <[^>]*> eeb1 8bca        (vsqrteq\.f64|fsqrtdeq) d8, d10
+0+24c <[^>]*> bf01             itttt   eq
+0+24e <[^>]*> ee31 9b0f        (vaddeq\.f64|fadddeq)   d9, d1, d15
+0+252 <[^>]*> ee83 2b0e        (vdiveq\.f64|fdivdeq)   d2, d3, d14
+0+256 <[^>]*> ee0d 4b0c        (vmlaeq\.f64|fmacdeq)   d4, d13, d12
+0+25a <[^>]*> ee16 5b0b        (vnmlseq\.f64|fmscdeq)  d5, d6, d11
+0+25e <[^>]*> bf01             itttt   eq
+0+260 <[^>]*> ee2a 7b09        (vmuleq\.f64|fmuldeq)   d7, d10, d9
+0+264 <[^>]*> ee09 8b4a        (vmlseq\.f64|fnmacdeq)  d8, d9, d10
+0+268 <[^>]*> ee16 7b4b        (vnmlaeq\.f64|fnmscdeq) d7, d6, d11
+0+26c <[^>]*> ee24 5b4c        (vnmuleq\.f64|fnmuldeq) d5, d4, d12
+0+270 <[^>]*> bf02             ittt    eq
+0+272 <[^>]*> ee3d 3b4e        (vsubeq\.f64|fsubdeq)   d3, d13, d14
+0+276 <[^>]*> ed95 2b00        vldreq  d2, \[r5\]
+0+27a <[^>]*> ed8c 1b00        vstreq  d1, \[ip\]
+0+27e <[^>]*> bf01             itttt   eq
+0+280 <[^>]*> ec91 1b02        vldmiaeq        r1, {d1}
+0+284 <[^>]*> ec92 2b02        vldmiaeq        r2, {d2}
+0+288 <[^>]*> ecb3 3b02        vldmiaeq        r3!, {d3}
+0+28c <[^>]*> ecb4 4b02        vldmiaeq        r4!, {d4}
+0+290 <[^>]*> bf01             itttt   eq
+0+292 <[^>]*> ed35 5b02        vldmdbeq        r5!, {d5}
+0+296 <[^>]*> ed36 6b02        vldmdbeq        r6!, {d6}
+0+29a <[^>]*> ec87 fb02        vstmiaeq        r7, {d15}
+0+29e <[^>]*> ec88 eb02        vstmiaeq        r8, {d14}
+0+2a2 <[^>]*> bf01             itttt   eq
+0+2a4 <[^>]*> eca9 db02        vstmiaeq        r9!, {d13}
+0+2a8 <[^>]*> ecaa cb02        vstmiaeq        sl!, {d12}
+0+2ac <[^>]*> ed2b bb02        vstmdbeq        fp!, {d11}
+0+2b0 <[^>]*> ed2c ab02        vstmdbeq        ip!, {d10}
+0+2b4 <[^>]*> bf01             itttt   eq
+0+2b6 <[^>]*> eeb8 fbe0        (vcvteq\.f64\.s32|fsitodeq)     d15, s1
+0+2ba <[^>]*> eeb8 1b6f        (vcvteq\.f64\.u32|fuitodeq)     d1, s31
+0+2be <[^>]*> eefd 0b4f        (vcvtreq\.s32\.f64|ftosideq)    s1, d15
+0+2c2 <[^>]*> eefd fbc2        (vcvteq\.s32\.f64|ftosizdeq)    s31, d2
+0+2c6 <[^>]*> bf01             itttt   eq
+0+2c8 <[^>]*> eefc 7b42        (vcvtreq\.u32\.f64|ftouideq)    s15, d2
+0+2cc <[^>]*> eefc 5bc3        (vcvteq\.u32\.f64|ftouizdeq)    s11, d3
+0+2d0 <[^>]*> eeb7 1ac5        (vcvteq\.f64\.f32|fcvtdseq)     d1, s10
+0+2d4 <[^>]*> eef7 5bc1        (vcvteq\.f32\.f64|fcvtsdeq)     s11, d1
+0+2d8 <[^>]*> bf01             itttt   eq
+0+2da <[^>]*> ee31 8b10        vmoveq\.32      r8, d1\[1\]
+0+2de <[^>]*> ee1f 7b10        vmoveq\.32      r7, d15\[0\]
+0+2e2 <[^>]*> ee21 fb10        vmoveq\.32      d1\[1\], pc
+0+2e6 <[^>]*> ee0f 1b10        vmoveq\.32      d15\[0\], r1
+0+2ea <[^>]*> bf00             nop
+0+2ec <[^>]*> bf00             nop
+0+2ee <[^>]*> bf00             nop
diff --git a/gas/testsuite/gas/arm/armv8.1-m.main-fp.d b/gas/testsuite/gas/arm/armv8.1-m.main-fp.d
new file mode 100644 (file)
index 0000000..dd69e0d
--- /dev/null
@@ -0,0 +1,270 @@
+# name: Single precision instructions for 'armv8.1-m.main'
+# source: vfp1xD_t2.s
+# as: -march=armv8.1-m.main+fp
+# objdump: -dr --prefix-addresses --show-raw-insn
+
+.*: +file format .*arm.*
+
+Disassembly of section .text:
+0+000 <[^>]*> eef1 fa10        (vmrs   APSR_nzcv, fpscr|fmstat)
+0+004 <[^>]*> eeb4 0ac0        (vcmpe\.f32|fcmpes)     s0, s0
+0+008 <[^>]*> eeb5 0ac0        (vcmpe\.f32     s0, #0.0|fcmpezs        s0)
+0+00c <[^>]*> eeb4 0a40        (vcmp\.f32|fcmps)       s0, s0
+0+010 <[^>]*> eeb5 0a40        (vcmp\.f32      s0, #0.0|fcmpzs s0)
+0+014 <[^>]*> eeb0 0ac0        (vabs\.f32|fabss)       s0, s0
+0+018 <[^>]*> eeb0 0a40        (vmov\.f32|fcpys)       s0, s0
+0+01c <[^>]*> eeb1 0a40        (vneg\.f32|fnegs)       s0, s0
+0+020 <[^>]*> eeb1 0ac0        (vsqrt\.f32|fsqrts)     s0, s0
+0+024 <[^>]*> ee30 0a00        (vadd\.f32|fadds)       s0, s0, s0
+0+028 <[^>]*> ee80 0a00        (vdiv\.f32|fdivs)       s0, s0, s0
+0+02c <[^>]*> ee00 0a00        (vmla\.f32|fmacs)       s0, s0, s0
+0+030 <[^>]*> ee10 0a00        (vnmls\.f32|fmscs)      s0, s0, s0
+0+034 <[^>]*> ee20 0a00        (vmul\.f32|fmuls)       s0, s0, s0
+0+038 <[^>]*> ee00 0a40        (vmls\.f32|fnmacs)      s0, s0, s0
+0+03c <[^>]*> ee10 0a40        (vnmla\.f32|fnmscs)     s0, s0, s0
+0+040 <[^>]*> ee20 0a40        (vnmul\.f32|fnmuls)     s0, s0, s0
+0+044 <[^>]*> ee30 0a40        (vsub\.f32|fsubs)       s0, s0, s0
+0+048 <[^>]*> ed90 0a00        (vldr|flds)     s0, \[r0\]
+0+04c <[^>]*> ed80 0a00        (vstr|fsts)     s0, \[r0\]
+0+050 <[^>]*> ec90 0a01        (vldmia|fldmias)        r0, {s0}
+0+054 <[^>]*> ec90 0a01        (vldmia|fldmias)        r0, {s0}
+0+058 <[^>]*> ecb0 0a01        (vldmia|fldmias)        r0!, {s0}
+0+05c <[^>]*> ecb0 0a01        (vldmia|fldmias)        r0!, {s0}
+0+060 <[^>]*> ed30 0a01        (vldmdb|fldmdbs)        r0!, {s0}
+0+064 <[^>]*> ed30 0a01        (vldmdb|fldmdbs)        r0!, {s0}
+0+068 <[^>]*> ec90 0b03        fldmiax r0, {d0}(       ;@ Deprecated|)
+0+06c <[^>]*> ec90 0b03        fldmiax r0, {d0}(       ;@ Deprecated|)
+0+070 <[^>]*> ecb0 0b03        fldmiax r0!, {d0}(      ;@ Deprecated|)
+0+074 <[^>]*> ecb0 0b03        fldmiax r0!, {d0}(      ;@ Deprecated|)
+0+078 <[^>]*> ed30 0b03        fldmdbx r0!, {d0}(      ;@ Deprecated|)
+0+07c <[^>]*> ed30 0b03        fldmdbx r0!, {d0}(      ;@ Deprecated|)
+0+080 <[^>]*> ec80 0a01        (vstmia|fstmias)        r0, {s0}
+0+084 <[^>]*> ec80 0a01        (vstmia|fstmias)        r0, {s0}
+0+088 <[^>]*> eca0 0a01        (vstmia|fstmias)        r0!, {s0}
+0+08c <[^>]*> eca0 0a01        (vstmia|fstmias)        r0!, {s0}
+0+090 <[^>]*> ed20 0a01        (vstmdb|fstmdbs)        r0!, {s0}
+0+094 <[^>]*> ed20 0a01        (vstmdb|fstmdbs)        r0!, {s0}
+0+098 <[^>]*> ec80 0b03        fstmiax r0, {d0}(       ;@ Deprecated|)
+0+09c <[^>]*> ec80 0b03        fstmiax r0, {d0}(       ;@ Deprecated|)
+0+0a0 <[^>]*> eca0 0b03        fstmiax r0!, {d0}(      ;@ Deprecated|)
+0+0a4 <[^>]*> eca0 0b03        fstmiax r0!, {d0}(      ;@ Deprecated|)
+0+0a8 <[^>]*> ed20 0b03        fstmdbx r0!, {d0}(      ;@ Deprecated|)
+0+0ac <[^>]*> ed20 0b03        fstmdbx r0!, {d0}(      ;@ Deprecated|)
+0+0b0 <[^>]*> eeb8 0ac0        (vcvt\.f32\.s32|fsitos) s0, s0
+0+0b4 <[^>]*> eeb8 0a40        (vcvt\.f32\.u32|fuitos) s0, s0
+0+0b8 <[^>]*> eebd 0a40        (vcvtr\.s32\.f32|ftosis)        s0, s0
+0+0bc <[^>]*> eebd 0ac0        (vcvt\.s32\.f32|ftosizs)        s0, s0
+0+0c0 <[^>]*> eebc 0a40        (vcvtr\.u32\.f32|ftouis)        s0, s0
+0+0c4 <[^>]*> eebc 0ac0        (vcvt\.u32\.f32|ftouizs)        s0, s0
+0+0c8 <[^>]*> ee10 0a10        (vmov|fmrs)     r0, s0
+0+0cc <[^>]*> eef0 0a10        (vmrs|fmrx)     r0, fpsid
+0+0d0 <[^>]*> eef1 0a10        (vmrs|fmrx)     r0, fpscr
+0+0d4 <[^>]*> eef8 0a10        (vmrs|fmrx)     r0, fpexc
+0+0d8 <[^>]*> ee00 0a10        (vmov|fmsr)     s0, r0
+0+0dc <[^>]*> eee0 0a10        (vmsr|fmxr)     fpsid, r0
+0+0e0 <[^>]*> eee1 0a10        (vmsr|fmxr)     fpscr, r0
+0+0e4 <[^>]*> eee8 0a10        (vmsr|fmxr)     fpexc, r0
+0+0e8 <[^>]*> eef5 0a40        (vcmp\.f32      s1, #0.0|fcmpzs s1)
+0+0ec <[^>]*> eeb5 1a40        (vcmp\.f32      s2, #0.0|fcmpzs s2)
+0+0f0 <[^>]*> eef5 fa40        (vcmp\.f32      s31, #0.0|fcmpzs        s31)
+0+0f4 <[^>]*> eeb4 0a60        (vcmp\.f32|fcmps)       s0, s1
+0+0f8 <[^>]*> eeb4 0a41        (vcmp\.f32|fcmps)       s0, s2
+0+0fc <[^>]*> eeb4 0a6f        (vcmp\.f32|fcmps)       s0, s31
+0+100 <[^>]*> eef4 0a40        (vcmp\.f32|fcmps)       s1, s0
+0+104 <[^>]*> eeb4 1a40        (vcmp\.f32|fcmps)       s2, s0
+0+108 <[^>]*> eef4 fa40        (vcmp\.f32|fcmps)       s31, s0
+0+10c <[^>]*> eef4 aa46        (vcmp\.f32|fcmps)       s21, s12
+0+110 <[^>]*> eeb1 0a60        (vneg\.f32|fnegs)       s0, s1
+0+114 <[^>]*> eeb1 0a41        (vneg\.f32|fnegs)       s0, s2
+0+118 <[^>]*> eeb1 0a6f        (vneg\.f32|fnegs)       s0, s31
+0+11c <[^>]*> eef1 0a40        (vneg\.f32|fnegs)       s1, s0
+0+120 <[^>]*> eeb1 1a40        (vneg\.f32|fnegs)       s2, s0
+0+124 <[^>]*> eef1 fa40        (vneg\.f32|fnegs)       s31, s0
+0+128 <[^>]*> eeb1 6a6a        (vneg\.f32|fnegs)       s12, s21
+0+12c <[^>]*> ee30 0a20        (vadd\.f32|fadds)       s0, s0, s1
+0+130 <[^>]*> ee30 0a01        (vadd\.f32|fadds)       s0, s0, s2
+0+134 <[^>]*> ee30 0a2f        (vadd\.f32|fadds)       s0, s0, s31
+0+138 <[^>]*> ee30 0a80        (vadd\.f32|fadds)       s0, s1, s0
+0+13c <[^>]*> ee31 0a00        (vadd\.f32|fadds)       s0, s2, s0
+0+140 <[^>]*> ee3f 0a80        (vadd\.f32|fadds)       s0, s31, s0
+0+144 <[^>]*> ee70 0a00        (vadd\.f32|fadds)       s1, s0, s0
+0+148 <[^>]*> ee30 1a00        (vadd\.f32|fadds)       s2, s0, s0
+0+14c <[^>]*> ee70 fa00        (vadd\.f32|fadds)       s31, s0, s0
+0+150 <[^>]*> ee3a 6aa2        (vadd\.f32|fadds)       s12, s21, s5
+0+154 <[^>]*> eeb8 0ae0        (vcvt\.f32\.s32|fsitos) s0, s1
+0+158 <[^>]*> eeb8 0ac1        (vcvt\.f32\.s32|fsitos) s0, s2
+0+15c <[^>]*> eeb8 0aef        (vcvt\.f32\.s32|fsitos) s0, s31
+0+160 <[^>]*> eef8 0ac0        (vcvt\.f32\.s32|fsitos) s1, s0
+0+164 <[^>]*> eeb8 1ac0        (vcvt\.f32\.s32|fsitos) s2, s0
+0+168 <[^>]*> eef8 fac0        (vcvt\.f32\.s32|fsitos) s31, s0
+0+16c <[^>]*> eebd 0a60        (vcvtr\.s32\.f32|ftosis)        s0, s1
+0+170 <[^>]*> eebd 0a41        (vcvtr\.s32\.f32|ftosis)        s0, s2
+0+174 <[^>]*> eebd 0a6f        (vcvtr\.s32\.f32|ftosis)        s0, s31
+0+178 <[^>]*> eefd 0a40        (vcvtr\.s32\.f32|ftosis)        s1, s0
+0+17c <[^>]*> eebd 1a40        (vcvtr\.s32\.f32|ftosis)        s2, s0
+0+180 <[^>]*> eefd fa40        (vcvtr\.s32\.f32|ftosis)        s31, s0
+0+184 <[^>]*> ee00 1a10        (vmov|fmsr)     s0, r1
+0+188 <[^>]*> ee00 7a10        (vmov|fmsr)     s0, r7
+0+18c <[^>]*> ee00 ea10        (vmov|fmsr)     s0, lr
+0+190 <[^>]*> ee00 0a90        (vmov|fmsr)     s1, r0
+0+194 <[^>]*> ee01 0a10        (vmov|fmsr)     s2, r0
+0+198 <[^>]*> ee0f 0a90        (vmov|fmsr)     s31, r0
+0+19c <[^>]*> ee0a 7a90        (vmov|fmsr)     s21, r7
+0+1a0 <[^>]*> eee0 1a10        (vmsr|fmxr)     fpsid, r1
+0+1a4 <[^>]*> eee0 ea10        (vmsr|fmxr)     fpsid, lr
+0+1a8 <[^>]*> ee10 0a90        (vmov|fmrs)     r0, s1
+0+1ac <[^>]*> ee11 0a10        (vmov|fmrs)     r0, s2
+0+1b0 <[^>]*> ee1f 0a90        (vmov|fmrs)     r0, s31
+0+1b4 <[^>]*> ee10 1a10        (vmov|fmrs)     r1, s0
+0+1b8 <[^>]*> ee10 7a10        (vmov|fmrs)     r7, s0
+0+1bc <[^>]*> ee10 ea10        (vmov|fmrs)     lr, s0
+0+1c0 <[^>]*> ee15 9a90        (vmov|fmrs)     r9, s11
+0+1c4 <[^>]*> eef0 1a10        (vmrs|fmrx)     r1, fpsid
+0+1c8 <[^>]*> eef0 ea10        (vmrs|fmrx)     lr, fpsid
+0+1cc <[^>]*> ed91 0a00        (vldr|flds)     s0, \[r1\]
+0+1d0 <[^>]*> ed9e 0a00        (vldr|flds)     s0, \[lr\]
+0+1d4 <[^>]*> ed90 0a00        (vldr|flds)     s0, \[r0\]
+0+1d8 <[^>]*> ed90 0aff        (vldr|flds)     s0, \[r0, #1020\].*
+0+1dc <[^>]*> ed10 0aff        (vldr|flds)     s0, \[r0, #-1020\].*
+0+1e0 <[^>]*> edd0 0a00        (vldr|flds)     s1, \[r0\]
+0+1e4 <[^>]*> ed90 1a00        (vldr|flds)     s2, \[r0\]
+0+1e8 <[^>]*> edd0 fa00        (vldr|flds)     s31, \[r0\]
+0+1ec <[^>]*> edcc aac9        (vstr|fsts)     s21, \[ip, #804\].*
+0+1f0 <[^>]*> ecd0 0a01        (vldmia|fldmias)        r0, {s1}
+0+1f4 <[^>]*> ec90 1a01        (vldmia|fldmias)        r0, {s2}
+0+1f8 <[^>]*> ecd0 fa01        (vldmia|fldmias)        r0, {s31}
+0+1fc <[^>]*> ec90 0a02        (vldmia|fldmias)        r0, {s0-s1}
+0+200 <[^>]*> ec90 0a03        (vldmia|fldmias)        r0, {s0-s2}
+0+204 <[^>]*> ec90 0a20        (vldmia|fldmias)        r0, {s0-s31}
+0+208 <[^>]*> ecd0 0a1f        (vldmia|fldmias)        r0, {s1-s31}
+0+20c <[^>]*> ec90 1a1e        (vldmia|fldmias)        r0, {s2-s31}
+0+210 <[^>]*> ec90 fa02        (vldmia|fldmias)        r0, {s30-s31}
+0+214 <[^>]*> ec91 0a01        (vldmia|fldmias)        r1, {s0}
+0+218 <[^>]*> ec9e 0a01        (vldmia|fldmias)        lr, {s0}
+0+21c <[^>]*> ec80 1b03        fstmiax r0, {d1}(       ;@ Deprecated|)
+0+220 <[^>]*> ec80 2b03        fstmiax r0, {d2}(       ;@ Deprecated|)
+0+224 <[^>]*> ec80 fb03        fstmiax r0, {d15}(      ;@ Deprecated|)
+0+228 <[^>]*> ec80 0b05        fstmiax r0, {d0-d1}(    ;@ Deprecated|)
+0+22c <[^>]*> ec80 0b07        fstmiax r0, {d0-d2}(    ;@ Deprecated|)
+0+230 <[^>]*> ec80 0b21        fstmiax r0, {d0-d15}(   ;@ Deprecated|)
+0+234 <[^>]*> ec80 1b1f        fstmiax r0, {d1-d15}(   ;@ Deprecated|)
+0+238 <[^>]*> ec80 2b1d        fstmiax r0, {d2-d15}(   ;@ Deprecated|)
+0+23c <[^>]*> ec80 eb05        fstmiax r0, {d14-d15}(  ;@ Deprecated|)
+0+240 <[^>]*> ec81 0b03        fstmiax r1, {d0}(       ;@ Deprecated|)
+0+244 <[^>]*> ec8e 0b03        fstmiax lr, {d0}(       ;@ Deprecated|)
+0+248 <[^>]*> eeb5 0a40        (vcmp\.f32      s0, #0.0|fcmpzs s0)
+0+24c <[^>]*> eef5 0a40        (vcmp\.f32      s1, #0.0|fcmpzs s1)
+0+250 <[^>]*> eeb5 1a40        (vcmp\.f32      s2, #0.0|fcmpzs s2)
+0+254 <[^>]*> eef5 1a40        (vcmp\.f32      s3, #0.0|fcmpzs s3)
+0+258 <[^>]*> eeb5 2a40        (vcmp\.f32      s4, #0.0|fcmpzs s4)
+0+25c <[^>]*> eef5 2a40        (vcmp\.f32      s5, #0.0|fcmpzs s5)
+0+260 <[^>]*> eeb5 3a40        (vcmp\.f32      s6, #0.0|fcmpzs s6)
+0+264 <[^>]*> eef5 3a40        (vcmp\.f32      s7, #0.0|fcmpzs s7)
+0+268 <[^>]*> eeb5 4a40        (vcmp\.f32      s8, #0.0|fcmpzs s8)
+0+26c <[^>]*> eef5 4a40        (vcmp\.f32      s9, #0.0|fcmpzs s9)
+0+270 <[^>]*> eeb5 5a40        (vcmp\.f32      s10, #0.0|fcmpzs        s10)
+0+274 <[^>]*> eef5 5a40        (vcmp\.f32      s11, #0.0|fcmpzs        s11)
+0+278 <[^>]*> eeb5 6a40        (vcmp\.f32      s12, #0.0|fcmpzs        s12)
+0+27c <[^>]*> eef5 6a40        (vcmp\.f32      s13, #0.0|fcmpzs        s13)
+0+280 <[^>]*> eeb5 7a40        (vcmp\.f32      s14, #0.0|fcmpzs        s14)
+0+284 <[^>]*> eef5 7a40        (vcmp\.f32      s15, #0.0|fcmpzs        s15)
+0+288 <[^>]*> eeb5 8a40        (vcmp\.f32      s16, #0.0|fcmpzs        s16)
+0+28c <[^>]*> eef5 8a40        (vcmp\.f32      s17, #0.0|fcmpzs        s17)
+0+290 <[^>]*> eeb5 9a40        (vcmp\.f32      s18, #0.0|fcmpzs        s18)
+0+294 <[^>]*> eef5 9a40        (vcmp\.f32      s19, #0.0|fcmpzs        s19)
+0+298 <[^>]*> eeb5 aa40        (vcmp\.f32      s20, #0.0|fcmpzs        s20)
+0+29c <[^>]*> eef5 aa40        (vcmp\.f32      s21, #0.0|fcmpzs        s21)
+0+2a0 <[^>]*> eeb5 ba40        (vcmp\.f32      s22, #0.0|fcmpzs        s22)
+0+2a4 <[^>]*> eef5 ba40        (vcmp\.f32      s23, #0.0|fcmpzs        s23)
+0+2a8 <[^>]*> eeb5 ca40        (vcmp\.f32      s24, #0.0|fcmpzs        s24)
+0+2ac <[^>]*> eef5 ca40        (vcmp\.f32      s25, #0.0|fcmpzs        s25)
+0+2b0 <[^>]*> eeb5 da40        (vcmp\.f32      s26, #0.0|fcmpzs        s26)
+0+2b4 <[^>]*> eef5 da40        (vcmp\.f32      s27, #0.0|fcmpzs        s27)
+0+2b8 <[^>]*> eeb5 ea40        (vcmp\.f32      s28, #0.0|fcmpzs        s28)
+0+2bc <[^>]*> eef5 ea40        (vcmp\.f32      s29, #0.0|fcmpzs        s29)
+0+2c0 <[^>]*> eeb5 fa40        (vcmp\.f32      s30, #0.0|fcmpzs        s30)
+0+2c4 <[^>]*> eef5 fa40        (vcmp\.f32      s31, #0.0|fcmpzs        s31)
+0+2c8 <[^>]*> bf01             itttt   eq
+0+2ca <[^>]*> eef1 fa10        (vmrseq APSR_nzcv, fpscr|fmstateq)
+0+2ce <[^>]*> eef4 1ae3        (vcmpeeq\.f32|fcmpeseq) s3, s7
+0+2d2 <[^>]*> eef5 2ac0        (vcmpeeq\.f32   s5, #0.0|fcmpezseq      s5)
+0+2d6 <[^>]*> eef4 0a41        (vcmpeq\.f32|fcmpseq)   s1, s2
+0+2da <[^>]*> bf01             itttt   eq
+0+2dc <[^>]*> eef5 0a40        (vcmpeq\.f32    s1, #0.0|fcmpzseq       s1)
+0+2e0 <[^>]*> eef0 0ae1        (vabseq\.f32|fabsseq)   s1, s3
+0+2e4 <[^>]*> eef0 fa69        (vmoveq\.f32|fcpyseq)   s31, s19
+0+2e8 <[^>]*> eeb1 aa44        (vnegeq\.f32|fnegseq)   s20, s8
+0+2ec <[^>]*> bf01             itttt   eq
+0+2ee <[^>]*> eef1 2ae3        (vsqrteq\.f32|fsqrtseq) s5, s7
+0+2f2 <[^>]*> ee32 3a82        (vaddeq\.f32|faddseq)   s6, s5, s4
+0+2f6 <[^>]*> eec1 1a20        (vdiveq\.f32|fdivseq)   s3, s2, s1
+0+2fa <[^>]*> ee4f fa2e        (vmlaeq\.f32|fmacseq)   s31, s30, s29
+0+2fe <[^>]*> bf01             itttt   eq
+0+300 <[^>]*> ee1d ea8d        (vnmlseq\.f32|fmscseq)  s28, s27, s26
+0+304 <[^>]*> ee6c ca2b        (vmuleq\.f32|fmulseq)   s25, s24, s23
+0+308 <[^>]*> ee0a baca        (vmlseq\.f32|fnmacseq)  s22, s21, s20
+0+30c <[^>]*> ee59 9a68        (vnmlaeq\.f32|fnmscseq) s19, s18, s17
+0+310 <[^>]*> bf01             itttt   eq
+0+312 <[^>]*> ee27 8ac7        (vnmuleq\.f32|fnmulseq) s16, s15, s14
+0+316 <[^>]*> ee76 6a65        (vsubeq\.f32|fsubseq)   s13, s12, s11
+0+31a <[^>]*> ed98 5a00        (vldreq|fldseq) s10, \[r8\]
+0+31e <[^>]*> edc7 4a00        (vstreq|fstseq) s9, \[r7\]
+0+322 <[^>]*> bf01             itttt   eq
+0+324 <[^>]*> ec91 4a01        (vldmiaeq|fldmiaseq)    r1, {s8}
+0+328 <[^>]*> ecd2 3a01        (vldmiaeq|fldmiaseq)    r2, {s7}
+0+32c <[^>]*> ecb3 3a01        (vldmiaeq|fldmiaseq)    r3!, {s6}
+0+330 <[^>]*> ecf4 2a01        (vldmiaeq|fldmiaseq)    r4!, {s5}
+0+334 <[^>]*> bf01             itttt   eq
+0+336 <[^>]*> ed35 2a01        (vldmdbeq|fldmdbseq)    r5!, {s4}
+0+33a <[^>]*> ed76 1a01        (vldmdbeq|fldmdbseq)    r6!, {s3}
+0+33e <[^>]*> ec97 1b03        fldmiaxeq       r7, {d1}(       ;@ Deprecated|)
+0+342 <[^>]*> ec98 2b03        fldmiaxeq       r8, {d2}(       ;@ Deprecated|)
+0+346 <[^>]*> bf01             itttt   eq
+0+348 <[^>]*> ecb9 3b03        fldmiaxeq       r9!, {d3}(      ;@ Deprecated|)
+0+34c <[^>]*> ecba 4b03        fldmiaxeq       sl!, {d4}(      ;@ Deprecated|)
+0+350 <[^>]*> ed3b 5b03        fldmdbxeq       fp!, {d5}(      ;@ Deprecated|)
+0+354 <[^>]*> ed3c 6b03        fldmdbxeq       ip!, {d6}(      ;@ Deprecated|)
+0+358 <[^>]*> bf01             itttt   eq
+0+35a <[^>]*> ec8d 1a01        (vstmiaeq|fstmiaseq)    sp, {s2}
+0+35e <[^>]*> ecce 0a01        (vstmiaeq|fstmiaseq)    lr, {s1}
+0+362 <[^>]*> ece1 fa01        (vstmiaeq|fstmiaseq)    r1!, {s31}
+0+366 <[^>]*> eca2 fa01        (vstmiaeq|fstmiaseq)    r2!, {s30}
+0+36a <[^>]*> bf01             itttt   eq
+0+36c <[^>]*> ed63 ea01        (vstmdbeq|fstmdbseq)    r3!, {s29}
+0+370 <[^>]*> ed24 ea01        (vstmdbeq|fstmdbseq)    r4!, {s28}
+0+374 <[^>]*> ec85 7b03        fstmiaxeq       r5, {d7}(       ;@ Deprecated|)
+0+378 <[^>]*> ec86 8b03        fstmiaxeq       r6, {d8}(       ;@ Deprecated|)
+0+37c <[^>]*> bf01             itttt   eq
+0+37e <[^>]*> eca7 9b03        fstmiaxeq       r7!, {d9}(      ;@ Deprecated|)
+0+382 <[^>]*> eca8 ab03        fstmiaxeq       r8!, {d10}(     ;@ Deprecated|)
+0+386 <[^>]*> ed29 bb03        fstmdbxeq       r9!, {d11}(     ;@ Deprecated|)
+0+38a <[^>]*> ed2a cb03        fstmdbxeq       sl!, {d12}(     ;@ Deprecated|)
+0+38e <[^>]*> bf01             itttt   eq
+0+390 <[^>]*> eef8 dac3        (vcvteq\.f32\.s32|fsitoseq)     s27, s6
+0+394 <[^>]*> eefd ca62        (vcvtreq\.s32\.f32|ftosiseq)    s25, s5
+0+398 <[^>]*> eefd bac2        (vcvteq\.s32\.f32|ftosizseq)    s23, s4
+0+39c <[^>]*> eefc aa61        (vcvtreq\.u32\.f32|ftouiseq)    s21, s3
+0+3a0 <[^>]*> bf01             itttt   eq
+0+3a2 <[^>]*> eefc 9ac1        (vcvteq\.u32\.f32|ftouizseq)    s19, s2
+0+3a6 <[^>]*> eef8 8a60        (vcvteq\.f32\.u32|fuitoseq)     s17, s1
+0+3aa <[^>]*> ee11 ba90        (vmoveq|fmrseq) fp, s3
+0+3ae <[^>]*> eef0 9a10        (vmrseq|fmrxeq) r9, fpsid
+0+3b2 <[^>]*> bf04             itt     eq
+0+3b4 <[^>]*> ee01 9a90        (vmoveq|fmsreq) s3, r9
+0+3b8 <[^>]*> eee0 8a10        (vmsreq|fmxreq) fpsid, r8
+0+3bc <[^>]*> eef9 0a10        (vmrs|fmrx)     r0, fpinst      @ Impl def
+0+3c0 <[^>]*> eefa 0a10        (vmrs|fmrx)     r0, fpinst2     @ Impl def
+0+3c4 <[^>]*> eef7 0a10        (vmrs|fmrx)     r0, mvfr0
+0+3c8 <[^>]*> eef6 0a10        (vmrs|fmrx)     r0, mvfr1
+0+3cc <[^>]*> eefc 0a10        (vmrs|fmrx)     r0, (<impl def 0xc>|vpr)
+0+3d0 <[^>]*> eee9 0a10        (vmsr|fmxr)     fpinst, r0      @ Impl def
+0+3d4 <[^>]*> eeea 0a10        (vmsr|fmxr)     fpinst2, r0     @ Impl def
+0+3d8 <[^>]*> eee7 0a10        (vmsr|fmxr)     mvfr0, r0
+0+3dc <[^>]*> eee6 0a10        (vmsr|fmxr)     mvfr1, r0
+0+3e0 <[^>]*> eeec 0a10        (vmsr|fmxr)     (<impl def 0xc>|vpr), r0
+0+3e4 <[^>]*> bf00             nop
+0+3e6 <[^>]*> bf00             nop
+0+3e8 <[^>]*> bf00             nop
+0+3ea <[^>]*> bf00             nop
+0+3ec <[^>]*> bf00             nop
+0+3ee <[^>]*> bf00             nop
diff --git a/gas/testsuite/gas/arm/armv8.1-m.main-hp.d b/gas/testsuite/gas/arm/armv8.1-m.main-hp.d
new file mode 100644 (file)
index 0000000..1743d1e
--- /dev/null
@@ -0,0 +1,75 @@
+# name: Half precision instructions for 'armv8.1-m.main'
+# source: armv8-2-fp16-scalar.s
+# as: -march=armv8.1-m.main+fp
+# objdump: -d
+# skip: *-*-*coff *-*-pe *-*-wince *-*-*aout* *-*-netbsd
+
+.*: +file format .*arm.*
+Disassembly of section .text:
+
+00000000 <label-0xc>:
+   0:  ee00 1910       vmov.f16        s0, r1
+   4:  ee10 0990       vmov.f16        r0, s1
+   8:  eeb0 0900       vmov.f16        s0, #0  ; 0x40000000  2.0
+
+0000000c <label>:
+   c:  00000ffe        .word   0x00000ffe
+  10:  ed5f 1904       vldr.16 s3, \[pc, #-8\] ; c <label>
+  14:  ed1f 3902       vldr.16 s6, \[pc, #-4\] ; 14 <label\+0x8>
+  18:  eddf 1902       vldr.16 s3, \[pc, #4\]  ; 20 <label\+0x14>
+  1c:  edd0 0902       vldr.16 s1, \[r0, #4\]
+  20:  ed10 1902       vldr.16 s2, \[r0, #-4\]
+  24:  ed80 3902       vstr.16 s6, \[r0, #4\]
+  28:  ed40 5902       vstr.16 s11, \[r0, #-4\]
+  2c:  eec6 298c       vdiv.f16        s5, s13, s24
+  30:  eee6 298c       vfma.f16        s5, s13, s24
+  34:  eee6 29cc       vfms.f16        s5, s13, s24
+  38:  eed6 29cc       vfnma.f16       s5, s13, s24
+  3c:  eed6 298c       vfnms.f16       s5, s13, s24
+  40:  fec6 298c       vmaxnm.f16      s5, s13, s24
+  44:  fec6 29cc       vminnm.f16      s5, s13, s24
+  48:  ee46 298c       vmla.f16        s5, s13, s24
+  4c:  ee46 29cc       vmls.f16        s5, s13, s24
+  50:  ee66 298c       vmul.f16        s5, s13, s24
+  54:  ee56 29cc       vnmla.f16       s5, s13, s24
+  58:  ee56 298c       vnmls.f16       s5, s13, s24
+  5c:  ee66 29cc       vnmul.f16       s5, s13, s24
+  60:  ee76 29cc       vsub.f16        s5, s13, s24
+  64:  eef0 29c6       vabs.f16        s5, s12
+  68:  ee72 2986       vadd.f16        s5, s5, s12
+  6c:  eef1 29c6       vsqrt.f16       s5, s12
+  70:  eef1 2946       vneg.f16        s5, s12
+  74:  eeb5 1940       vcmp.f16        s2, #0.0
+  78:  eeb5 19c0       vcmpe.f16       s2, #0.0
+  7c:  eef4 2966       vcmp.f16        s5, s13
+  80:  eef4 29e6       vcmpe.f16       s5, s13
+  84:  fe46 29ab       vseleq.f16      s5, s13, s23
+  88:  fe66 29ab       vselge.f16      s5, s13, s23
+  8c:  fe56 29ab       vselvs.f16      s5, s13, s23
+  90:  eefd 19c4       vcvt.s32.f16    s3, s8
+  94:  eefc 19c4       vcvt.u32.f16    s3, s8
+  98:  eef8 19c4       vcvt.f16.s32    s3, s8
+  9c:  eef8 1944       vcvt.f16.u32    s3, s8
+  a0:  eefa 39e1       vcvt.f16.s32    s7, s7, #29
+  a4:  eefb 39e1       vcvt.f16.u32    s7, s7, #29
+  a8:  eefe 39e1       vcvt.s32.f16    s7, s7, #29
+  ac:  eeff 39e1       vcvt.u32.f16    s7, s7, #29
+  b0:  fefc 29c5       vcvta.s32.f16   s5, s10
+  b4:  fefc 2945       vcvta.u32.f16   s5, s10
+  b8:  feff 29c5       vcvtm.s32.f16   s5, s10
+  bc:  feff 2945       vcvtm.u32.f16   s5, s10
+  c0:  fefd 29c5       vcvtn.s32.f16   s5, s10
+  c4:  fefd 2945       vcvtn.u32.f16   s5, s10
+  c8:  fefe 29c5       vcvtp.s32.f16   s5, s10
+  cc:  fefe 2945       vcvtp.u32.f16   s5, s10
+  d0:  eefc 2945       vcvtr.u32.f16   s5, s10
+  d4:  eefd 2945       vcvtr.s32.f16   s5, s10
+  d8:  fef8 1965       vrinta.f16      s3, s11
+  dc:  fefb 1965       vrintm.f16      s3, s11
+  e0:  fef9 1965       vrintn.f16      s3, s11
+  e4:  fefa 1965       vrintp.f16      s3, s11
+  e8:  eef6 1965       vrintr.f16      s3, s11
+  ec:  eef7 1965       vrintx.f16      s3, s11
+  f0:  eef6 19e5       vrintz.f16      s3, s11
+  f4:  fef0 2ae4       vins.f16        s5, s9
+  f8:  fef0 2a64       vmovx.f16       s5, s9