Adds command line support for Armv8.4-A, via the new command line option -march=armv8...
authorJiong Wang <jiong.wang@arm.com>
Wed, 8 Nov 2017 13:15:12 +0000 (13:15 +0000)
committerNick Clifton <nickc@redhat.com>
Wed, 8 Nov 2017 13:15:12 +0000 (13:15 +0000)
gas * config/tc-arm.c (arm_extensions):
(arm_archs): New entry for "armv8.4-a".
Add FPU_ARCH_DOTPROD_NEON_VFP_ARMV8.
(arm_ext_v8_2): New variable.
(enum arm_reg_type): New enumeration REG_TYPE_NSD.
(reg_expected_msgs): New entry for REG_TYPE_NSD.
(parse_typed_reg_or_scalar): Handle REG_TYPE_NSD.
(parse_scalar): Support REG_TYPE_VFS.
(enum operand_parse_code): New enumerations OP_RNSD and OP_RNSD_RNSC.
(parse_operands): Handle OP_RNSD and OP_RNSD_RNSC.
(NEON_SHAPE_DEF): New entries for DHH and DHS.
(neon_scalar_for_fmac_fp16_long): New function to generate Rm encoding
for new FP16 instructions in ARMv8.2-A.
(do_neon_fmac_maybe_scalar_long): New function to encode new FP16
instructions in ARMv8.2-A.
(do_neon_vfmal): Wrapper function for vfmal.
(do_neon_vfmsl): Wrapper function for vfmsl.
(insns): New entries for vfmal and vfmsl.
* doc/c-arm.texi (-march): Document "armv8.4-a".
* testsuite/gas/arm/dotprod-mandatory.d: New test.
* testsuite/gas/arm/armv8_2-a-fp16.s: New test source.
* testsuite/gas/arm/armv8_2-a-fp16-illegal.s: New test source.
* testsuite/gas/arm/armv8_2-a-fp16.d: New test.
* testsuite/gas/arm/armv8_3-a-fp16.d: New test.
* testsuite/gas/arm/armv8_4-a-fp16.d: New test.
* testsuite/gas/arm/armv8_2-a-fp16-thumb2.d: New test.
* testsuite/gas/arm/armv8_2-a-fp16-illegal.d: New test.
* testsuite/gas/arm/armv8_2-a-fp16-illegal.l: New error file.

opcodes * arm-dis.c (coprocessor_opcodes): New entries for ARMv8.2-A new
FP16 instructions, including vfmal.f16 and vfmsl.f16.

include * opcode/arm.h (ARM_AEXT2_V8_4A): Include Dot Product feature.
(ARM_EXT2_V8_4A): New macro.
(ARM_AEXT2_V8_4A): Likewise.
(ARM_ARCH_V8_4A): Likewise.

16 files changed:
gas/ChangeLog
gas/config/tc-arm.c
gas/doc/c-arm.texi
gas/testsuite/gas/arm/armv8_2-a-fp16-illegal.d [new file with mode: 0644]
gas/testsuite/gas/arm/armv8_2-a-fp16-illegal.l [new file with mode: 0644]
gas/testsuite/gas/arm/armv8_2-a-fp16-illegal.s [new file with mode: 0644]
gas/testsuite/gas/arm/armv8_2-a-fp16-thumb2.d [new file with mode: 0644]
gas/testsuite/gas/arm/armv8_2-a-fp16.d [new file with mode: 0644]
gas/testsuite/gas/arm/armv8_2-a-fp16.s [new file with mode: 0644]
gas/testsuite/gas/arm/armv8_3-a-fp16.d [new file with mode: 0644]
gas/testsuite/gas/arm/armv8_4-a-fp16.d [new file with mode: 0644]
gas/testsuite/gas/arm/dotprod-mandatory.d [new file with mode: 0644]
include/ChangeLog
include/opcode/arm.h
opcodes/ChangeLog
opcodes/arm-dis.c

index c13f9b164b85cd6d54a717d473b038520ca93157..81fa31203127a4ed1c568bac2c0888b6fcc861f6 100644 (file)
@@ -1,3 +1,35 @@
+2017-11-08  Jiong Wang  <jiong.wang@arm.com>
+           Tamar Christina <tamar.christina@arm.com>
+
+       * config/tc-arm.c (arm_extensions):
+       (arm_archs): New entry for "armv8.4-a".
+       Add FPU_ARCH_DOTPROD_NEON_VFP_ARMV8.
+       (arm_ext_v8_2): New variable.
+       (enum arm_reg_type): New enumeration REG_TYPE_NSD.
+       (reg_expected_msgs): New entry for REG_TYPE_NSD.
+       (parse_typed_reg_or_scalar): Handle REG_TYPE_NSD.
+       (parse_scalar): Support REG_TYPE_VFS.
+       (enum operand_parse_code): New enumerations OP_RNSD and OP_RNSD_RNSC.
+       (parse_operands): Handle OP_RNSD and OP_RNSD_RNSC.
+       (NEON_SHAPE_DEF): New entries for DHH and DHS.
+       (neon_scalar_for_fmac_fp16_long): New function to generate Rm encoding
+       for new FP16 instructions in ARMv8.2-A.
+       (do_neon_fmac_maybe_scalar_long): New function to encode new FP16
+       instructions in ARMv8.2-A.
+       (do_neon_vfmal): Wrapper function for vfmal.
+       (do_neon_vfmsl): Wrapper function for vfmsl.
+       (insns): New entries for vfmal and vfmsl.
+       * doc/c-arm.texi (-march): Document "armv8.4-a".
+       * testsuite/gas/arm/dotprod-mandatory.d: New test.
+       * testsuite/gas/arm/armv8_2-a-fp16.s: New test source.
+       * testsuite/gas/arm/armv8_2-a-fp16-illegal.s: New test source.
+       * testsuite/gas/arm/armv8_2-a-fp16.d: New test.
+       * testsuite/gas/arm/armv8_3-a-fp16.d: New test.
+       * testsuite/gas/arm/armv8_4-a-fp16.d: New test.
+       * testsuite/gas/arm/armv8_2-a-fp16-thumb2.d: New test.
+       * testsuite/gas/arm/armv8_2-a-fp16-illegal.d: New test.
+       * testsuite/gas/arm/armv8_2-a-fp16-illegal.l: New error file.
+
 2017-11-08  Alan Modra  <amodra@gmail.com>
 
        * config/tc-xtensa.c (finish_vinsn): Properly pluralize error message.
index 5d3dd4e09797063637b8a6f1a1377a82fbff9f31..128ab38db69b81ac75a3a43d103c3bfce8ae82c1 100644 (file)
@@ -235,6 +235,8 @@ static const arm_feature_set arm_ext_ras =
 /* FP16 instructions.  */
 static const arm_feature_set arm_ext_fp16 =
   ARM_FEATURE_CORE_HIGH (ARM_EXT2_FP16_INST);
+static const arm_feature_set arm_ext_v8_2 =
+  ARM_FEATURE_CORE_HIGH (ARM_EXT2_V8_2A);
 static const arm_feature_set arm_ext_v8_3 =
   ARM_FEATURE_CORE_HIGH (ARM_EXT2_V8_3A);
 
@@ -579,6 +581,7 @@ enum arm_reg_type
   REG_TYPE_NQ,
   REG_TYPE_VFSD,
   REG_TYPE_NDQ,
+  REG_TYPE_NSD,
   REG_TYPE_NSDQ,
   REG_TYPE_VFC,
   REG_TYPE_MVF,
@@ -619,6 +622,7 @@ const char * const reg_expected_msgs[] =
   N_("Neon quad precision register expected"),
   N_("VFP single or double precision register expected"),
   N_("Neon double or quad precision register expected"),
+  N_("Neon single or double precision register expected"),
   N_("VFP single, double or Neon quad precision register expected"),
   N_("VFP system register expected"),
   N_("Maverick MVF register expected"),
@@ -1506,6 +1510,8 @@ parse_typed_reg_or_scalar (char **ccp, enum arm_reg_type type,
       || (type == REG_TYPE_NSDQ
          && (reg->type == REG_TYPE_VFS || reg->type == REG_TYPE_VFD
              || reg->type == REG_TYPE_NQ))
+      || (type == REG_TYPE_NSD
+         && (reg->type == REG_TYPE_VFS || reg->type == REG_TYPE_VFD))
       || (type == REG_TYPE_MMXWC
          && (reg->type == REG_TYPE_MMXWCG)))
     type = (enum arm_reg_type) reg->type;
@@ -1529,7 +1535,9 @@ parse_typed_reg_or_scalar (char **ccp, enum arm_reg_type type,
 
   if (skip_past_char (&str, '[') == SUCCESS)
     {
-      if (type != REG_TYPE_VFD)
+      if (type != REG_TYPE_VFD
+         && !(type == REG_TYPE_VFS
+              && ARM_CPU_HAS_FEATURE (cpu_variant, arm_ext_v8_2)))
        {
          first_error (_("only D registers may be indexed"));
          return FAIL;
@@ -1625,8 +1633,12 @@ parse_scalar (char **ccp, int elsize, struct neon_type_el *type)
   int reg;
   char *str = *ccp;
   struct neon_typed_alias atype;
+  enum arm_reg_type reg_type = REG_TYPE_VFD;
+
+  if (elsize == 4)
+    reg_type = REG_TYPE_VFS;
 
-  reg = parse_typed_reg_or_scalar (&str, REG_TYPE_VFD, NULL, &atype);
+  reg = parse_typed_reg_or_scalar (&str, reg_type, NULL, &atype);
 
   if (reg == FAIL || (atype.defined & NTA_HASINDEX) == 0)
     return FAIL;
@@ -6486,6 +6498,7 @@ enum operand_parse_code
   OP_RND,       /* Neon double precision register (0..31) */
   OP_RNQ,      /* Neon quad precision register */
   OP_RVSD,     /* VFP single or double precision register */
+  OP_RNSD,      /* Neon single or double precision register */
   OP_RNDQ,      /* Neon double or quad precision register */
   OP_RNSDQ,    /* Neon single, double or quad precision register */
   OP_RNSC,      /* Neon scalar D[X] */
@@ -6512,6 +6525,7 @@ enum operand_parse_code
   OP_RVSD_I0,  /* VFP S or D reg, or immediate zero.  */
   OP_RSVD_FI0, /* VFP S or D reg, or floating point immediate zero.  */
   OP_RR_RNSC,   /* ARM reg or Neon scalar.  */
+  OP_RNSD_RNSC, /* Neon S or D reg, or Neon scalar.  */
   OP_RNSDQ_RNSC, /* Vector S, D or Q reg, or Neon scalar.  */
   OP_RNDQ_RNSC, /* Neon D or Q reg, or Neon scalar.  */
   OP_RND_RNSC,  /* Neon D reg, or Neon scalar.  */
@@ -6773,6 +6787,7 @@ parse_operands (char *str, const unsigned int *pattern, bfd_boolean thumb)
        case OP_RXA:   po_reg_or_fail (REG_TYPE_XSCALE);  break;
        case OP_oRNQ:
        case OP_RNQ:   po_reg_or_fail (REG_TYPE_NQ);      break;
+       case OP_RNSD:  po_reg_or_fail (REG_TYPE_NSD);     break;
        case OP_oRNDQ:
        case OP_RNDQ:  po_reg_or_fail (REG_TYPE_NDQ);     break;
        case OP_RVSD:  po_reg_or_fail (REG_TYPE_VFSD);    break;
@@ -6830,6 +6845,18 @@ parse_operands (char *str, const unsigned int *pattern, bfd_boolean thumb)
          }
          break;
 
+       case OP_RNSD_RNSC:
+         {
+           po_scalar_or_goto (8, try_s_scalar);
+           break;
+           try_s_scalar:
+           po_scalar_or_goto (4, try_nsd);
+           break;
+           try_nsd:
+           po_reg_or_fail (REG_TYPE_NSD);
+         }
+         break;
+
        case OP_RNDQ_RNSC:
          {
            po_scalar_or_goto (8, try_ndq);
@@ -13423,7 +13450,9 @@ NEON_ENC_TAB
   X (2, (H, I), HALF),                 \
   X (3, (H, H, H), HALF),              \
   X (3, (H, F, I), MIXED),             \
-  X (3, (F, H, I), MIXED)
+  X (3, (F, H, I), MIXED),             \
+  X (3, (D, H, H), MIXED),             \
+  X (3, (D, H, S), MIXED)
 
 #define S2(A,B)                NS_##A##B
 #define S3(A,B,C)      NS_##A##B##C
@@ -16133,6 +16162,133 @@ do_neon_mac_maybe_scalar_long (void)
   neon_mac_reg_scalar_long (N_S16 | N_S32 | N_U16 | N_U32, N_SU_32);
 }
 
+/* Like neon_scalar_for_mul, this function generate Rm encoding from GAS's
+   internal SCALAR.  QUAD_P is 1 if it's for Q format, otherwise it's 0.  */
+
+static unsigned
+neon_scalar_for_fmac_fp16_long (unsigned scalar, unsigned quad_p)
+{
+  unsigned regno = NEON_SCALAR_REG (scalar);
+  unsigned elno = NEON_SCALAR_INDEX (scalar);
+
+  if (quad_p)
+    {
+      if (regno > 7 || elno > 3)
+       goto bad_scalar;
+
+      return ((regno & 0x7)
+             | ((elno & 0x1) << 3)
+             | (((elno >> 1) & 0x1) << 5));
+    }
+  else
+    {
+      if (regno > 15 || elno > 1)
+       goto bad_scalar;
+
+      return (((regno & 0x1) << 5)
+             | ((regno >> 1) & 0x7)
+             | ((elno & 0x1) << 3));
+    }
+
+bad_scalar:
+  first_error (_("scalar out of range for multiply instruction"));
+  return 0;
+}
+
+static void
+do_neon_fmac_maybe_scalar_long (int subtype)
+{
+  enum neon_shape rs;
+  int high8;
+  /* NOTE: vfmal/vfmsl use slightly different NEON three-same encoding.  'size"
+     field (bits[21:20]) has different meaning.  For scalar index variant, it's
+     used to differentiate add and subtract, otherwise it's with fixed value
+     0x2.  */
+  int size = -1;
+
+  if (inst.cond != COND_ALWAYS)
+    as_warn (_("vfmal/vfmsl with FP16 type cannot be conditional, the "
+              "behaviour is UNPREDICTABLE"));
+
+  constraint (!ARM_CPU_HAS_FEATURE (cpu_variant, arm_ext_fp16),
+             _(BAD_FP16));
+
+  constraint (!ARM_CPU_HAS_FEATURE (cpu_variant, fpu_neon_ext_armv8),
+             _(BAD_FPU));
+
+  /* vfmal/vfmsl are in three-same D/Q register format or the third operand can
+     be a scalar index register.  */
+  if (inst.operands[2].isscalar)
+    {
+      high8 = 0xfe000000;
+      if (subtype)
+       size = 16;
+      rs = neon_select_shape (NS_DHS, NS_QDS, NS_NULL);
+    }
+  else
+    {
+      high8 = 0xfc000000;
+      size = 32;
+      if (subtype)
+       inst.instruction |= (0x1 << 23);
+      rs = neon_select_shape (NS_DHH, NS_QDD, NS_NULL);
+    }
+
+  neon_check_type (3, rs, N_EQK, N_EQK, N_KEY | N_F16);
+
+  /* "opcode" from template has included "ubit", so simply pass 0 here.  Also,
+     the "S" bit in size field has been reused to differentiate vfmal and vfmsl,
+     so we simply pass -1 as size.  */
+  unsigned quad_p = (rs == NS_QDD || rs == NS_QDS);
+  neon_three_same (quad_p, 0, size);
+
+  /* Undo neon_dp_fixup.  Redo the high eight bits.  */
+  inst.instruction &= 0x00ffffff;
+  inst.instruction |= high8;
+
+#define LOW1(R) ((R) & 0x1)
+#define HI4(R) (((R) >> 1) & 0xf)
+  /* Unlike usually NEON three-same, encoding for Vn and Vm will depend on
+     whether the instruction is in Q form and whether Vm is a scalar indexed
+     operand.  */
+  if (inst.operands[2].isscalar)
+    {
+      unsigned rm
+       = neon_scalar_for_fmac_fp16_long (inst.operands[2].reg, quad_p);
+      inst.instruction &= 0xffffffd0;
+      inst.instruction |= rm;
+
+      if (!quad_p)
+       {
+         /* Redo Rn as well.  */
+         inst.instruction &= 0xfff0ff7f;
+         inst.instruction |= HI4 (inst.operands[1].reg) << 16;
+         inst.instruction |= LOW1 (inst.operands[1].reg) << 7;
+       }
+    }
+  else if (!quad_p)
+    {
+      /* Redo Rn and Rm.  */
+      inst.instruction &= 0xfff0ff50;
+      inst.instruction |= HI4 (inst.operands[1].reg) << 16;
+      inst.instruction |= LOW1 (inst.operands[1].reg) << 7;
+      inst.instruction |= HI4 (inst.operands[2].reg);
+      inst.instruction |= LOW1 (inst.operands[2].reg) << 5;
+    }
+}
+
+static void
+do_neon_vfmal (void)
+{
+  return do_neon_fmac_maybe_scalar_long (0);
+}
+
+static void
+do_neon_vfmsl (void)
+{
+  return do_neon_fmac_maybe_scalar_long (1);
+}
+
 static void
 do_neon_dyadic_wide (void)
 {
@@ -20644,6 +20800,10 @@ static const struct asm_opcode insns[] =
  NCE (vmovx,     eb00a40,       2, (RVS, RVS), neon_movhf),
  NCE (vins,      eb00ac0,       2, (RVS, RVS), neon_movhf),
 
+ /* New backported fma/fms instructions optional in v8.2.  */
+ NCE (vfmal, 810, 3, (RNDQ, RNSD, RNSD_RNSC), neon_vfmal),
+ NCE (vfmsl, 810, 3, (RNDQ, RNSD, RNSD_RNSC), neon_vfmsl),
+
 #undef  THUMB_VARIANT
 #define THUMB_VARIANT  & fpu_neon_ext_v1
 #undef  ARM_VARIANT
@@ -26038,6 +26198,7 @@ static const struct arm_arch_option_table arm_archs[] =
   ARM_ARCH_OPT ("armv8.2-a",   ARM_ARCH_V8_2A,  FPU_ARCH_VFP),
   ARM_ARCH_OPT ("armv8.3-a",   ARM_ARCH_V8_3A,  FPU_ARCH_VFP),
   ARM_ARCH_OPT ("armv8-r",     ARM_ARCH_V8R,    FPU_ARCH_VFP),
+  ARM_ARCH_OPT ("armv8.4-a",   ARM_ARCH_V8_4A,  FPU_ARCH_VFP),
   ARM_ARCH_OPT ("xscale",      ARM_ARCH_XSCALE, FPU_ARCH_VFP),
   ARM_ARCH_OPT ("iwmmxt",      ARM_ARCH_IWMMXT, FPU_ARCH_VFP),
   ARM_ARCH_OPT ("iwmmxt2",     ARM_ARCH_IWMMXT2,FPU_ARCH_VFP),
@@ -26736,6 +26897,7 @@ static const cpu_arch_ver_table cpu_arch_ver[] =
     {16, ARM_ARCH_V8M_BASE},
     {17, ARM_ARCH_V8M_MAIN},
     {15, ARM_ARCH_V8R},
+    {16, ARM_ARCH_V8_4A},
     {-1, ARM_ARCH_NONE}
 };
 
index 9606de4b2ede8729e4fccdd4a16fc8106a59cad7..5e518c69fed6d9750ad13462e89ef2ca34614fc7 100644 (file)
@@ -237,6 +237,7 @@ names are recognized:
 @code{armv8.2-a},
 @code{armv8.3-a},
 @code{armv8-r},
+@code{armv8.4-a},
 @code{iwmmxt}
 @code{iwmmxt2}
 and
diff --git a/gas/testsuite/gas/arm/armv8_2-a-fp16-illegal.d b/gas/testsuite/gas/arm/armv8_2-a-fp16-illegal.d
new file mode 100644 (file)
index 0000000..745ae05
--- /dev/null
@@ -0,0 +1,2 @@
+#as: -march=armv8.2-a+fp16 -mfpu=neon-fp-armv8
+#error-output: armv8_2-a-fp16-illegal.l
diff --git a/gas/testsuite/gas/arm/armv8_2-a-fp16-illegal.l b/gas/testsuite/gas/arm/armv8_2-a-fp16-illegal.l
new file mode 100644 (file)
index 0000000..b407d6c
--- /dev/null
@@ -0,0 +1,5 @@
+[^:]*.s: Assembler messages:
+[^:]*:4: Error: scalar out of range for multiply instruction -- `vfmal.f16 d2,s0,s16\[1\]'
+[^:]*:5: Error: scalar out of range for multiply instruction -- `vfmsl.f16 q13,d1,d8\[3\]'
+[^:]*:7: Error: scalar out of range for multiply instruction -- `vfmal.f16 d16,s2,s15\[2\]'
+[^:]*:8: Error: scalar out of range for multiply instruction -- `vfmsl.f16 q13,d1,d7\[4\]'
diff --git a/gas/testsuite/gas/arm/armv8_2-a-fp16-illegal.s b/gas/testsuite/gas/arm/armv8_2-a-fp16-illegal.s
new file mode 100644 (file)
index 0000000..740dd5c
--- /dev/null
@@ -0,0 +1,8 @@
+       .text
+func:
+       # Scalar base register out of bound
+       vfmal.f16       d2, s0, s16[1]
+       vfmsl.f16       q13, d1, d8[3]
+       # Scalar index out of bound
+       vfmal.f16       d16, s2, s15[2]
+       vfmsl.f16       q13, d1, d7[4]
diff --git a/gas/testsuite/gas/arm/armv8_2-a-fp16-thumb2.d b/gas/testsuite/gas/arm/armv8_2-a-fp16-thumb2.d
new file mode 100644 (file)
index 0000000..b03a8ae
--- /dev/null
@@ -0,0 +1,249 @@
+#as: -march=armv8.2-a+fp16 -mfpu=neon-fp-armv8 -mthumb
+#source: armv8_2-a-fp16.s
+#objdump: -d
+
+.*: +file format .*arm.*
+
+Disassembly of section .text:
+
+.* <.*>:
+.*:    fc21 0810       vfmal.f16       d0, s2, s0
+.*:    fe00 2810       vfmal.f16       d2, s0, s0\[0\]
+.*:    fca1 0810       vfmsl.f16       d0, s2, s0
+.*:    fe10 2818       vfmsl.f16       d2, s0, s0\[1\]
+.*:    fc21 0814       vfmal.f16       d0, s2, s8
+.*:    fe00 2814       vfmal.f16       d2, s0, s8\[0\]
+.*:    fca1 0814       vfmsl.f16       d0, s2, s8
+.*:    fe10 281c       vfmsl.f16       d2, s0, s8\[1\]
+.*:    fc21 0837       vfmal.f16       d0, s2, s15
+.*:    fe00 2837       vfmal.f16       d2, s0, s15\[0\]
+.*:    fca1 0837       vfmsl.f16       d0, s2, s15
+.*:    fe10 283f       vfmsl.f16       d2, s0, s15\[1\]
+.*:    fc27 0890       vfmal.f16       d0, s15, s0
+.*:    fe00 f810       vfmal.f16       d15, s0, s0\[0\]
+.*:    fca7 0890       vfmsl.f16       d0, s15, s0
+.*:    fe10 f818       vfmsl.f16       d15, s0, s0\[1\]
+.*:    fc27 0894       vfmal.f16       d0, s15, s8
+.*:    fe00 f814       vfmal.f16       d15, s0, s8\[0\]
+.*:    fca7 0894       vfmsl.f16       d0, s15, s8
+.*:    fe10 f81c       vfmsl.f16       d15, s0, s8\[1\]
+.*:    fc27 08b7       vfmal.f16       d0, s15, s15
+.*:    fe00 f837       vfmal.f16       d15, s0, s15\[0\]
+.*:    fca7 08b7       vfmsl.f16       d0, s15, s15
+.*:    fe10 f83f       vfmsl.f16       d15, s0, s15\[1\]
+.*:    fc2f 0810       vfmal.f16       d0, s30, s0
+.*:    fe40 e810       vfmal.f16       d30, s0, s0\[0\]
+.*:    fcaf 0810       vfmsl.f16       d0, s30, s0
+.*:    fe50 e818       vfmsl.f16       d30, s0, s0\[1\]
+.*:    fc2f 0814       vfmal.f16       d0, s30, s8
+.*:    fe40 e814       vfmal.f16       d30, s0, s8\[0\]
+.*:    fcaf 0814       vfmsl.f16       d0, s30, s8
+.*:    fe50 e81c       vfmsl.f16       d30, s0, s8\[1\]
+.*:    fc2f 0837       vfmal.f16       d0, s30, s15
+.*:    fe40 e837       vfmal.f16       d30, s0, s15\[0\]
+.*:    fcaf 0837       vfmsl.f16       d0, s30, s15
+.*:    fe50 e83f       vfmsl.f16       d30, s0, s15\[1\]
+.*:    fc21 7810       vfmal.f16       d7, s2, s0
+.*:    fe03 2890       vfmal.f16       d2, s7, s0\[0\]
+.*:    fca1 7810       vfmsl.f16       d7, s2, s0
+.*:    fe13 2898       vfmsl.f16       d2, s7, s0\[1\]
+.*:    fc21 7814       vfmal.f16       d7, s2, s8
+.*:    fe03 2894       vfmal.f16       d2, s7, s8\[0\]
+.*:    fca1 7814       vfmsl.f16       d7, s2, s8
+.*:    fe13 289c       vfmsl.f16       d2, s7, s8\[1\]
+.*:    fc21 7837       vfmal.f16       d7, s2, s15
+.*:    fe03 28b7       vfmal.f16       d2, s7, s15\[0\]
+.*:    fca1 7837       vfmsl.f16       d7, s2, s15
+.*:    fe13 28bf       vfmsl.f16       d2, s7, s15\[1\]
+.*:    fc27 7890       vfmal.f16       d7, s15, s0
+.*:    fe03 f890       vfmal.f16       d15, s7, s0\[0\]
+.*:    fca7 7890       vfmsl.f16       d7, s15, s0
+.*:    fe13 f898       vfmsl.f16       d15, s7, s0\[1\]
+.*:    fc27 7894       vfmal.f16       d7, s15, s8
+.*:    fe03 f894       vfmal.f16       d15, s7, s8\[0\]
+.*:    fca7 7894       vfmsl.f16       d7, s15, s8
+.*:    fe13 f89c       vfmsl.f16       d15, s7, s8\[1\]
+.*:    fc27 78b7       vfmal.f16       d7, s15, s15
+.*:    fe03 f8b7       vfmal.f16       d15, s7, s15\[0\]
+.*:    fca7 78b7       vfmsl.f16       d7, s15, s15
+.*:    fe13 f8bf       vfmsl.f16       d15, s7, s15\[1\]
+.*:    fc2f 7810       vfmal.f16       d7, s30, s0
+.*:    fe43 e890       vfmal.f16       d30, s7, s0\[0\]
+.*:    fcaf 7810       vfmsl.f16       d7, s30, s0
+.*:    fe53 e898       vfmsl.f16       d30, s7, s0\[1\]
+.*:    fc2f 7814       vfmal.f16       d7, s30, s8
+.*:    fe43 e894       vfmal.f16       d30, s7, s8\[0\]
+.*:    fcaf 7814       vfmsl.f16       d7, s30, s8
+.*:    fe53 e89c       vfmsl.f16       d30, s7, s8\[1\]
+.*:    fc2f 7837       vfmal.f16       d7, s30, s15
+.*:    fe43 e8b7       vfmal.f16       d30, s7, s15\[0\]
+.*:    fcaf 7837       vfmsl.f16       d7, s30, s15
+.*:    fe53 e8bf       vfmsl.f16       d30, s7, s15\[1\]
+.*:    fc61 0810       vfmal.f16       d16, s2, s0
+.*:    fe08 2810       vfmal.f16       d2, s16, s0\[0\]
+.*:    fce1 0810       vfmsl.f16       d16, s2, s0
+.*:    fe18 2818       vfmsl.f16       d2, s16, s0\[1\]
+.*:    fc61 0814       vfmal.f16       d16, s2, s8
+.*:    fe08 2814       vfmal.f16       d2, s16, s8\[0\]
+.*:    fce1 0814       vfmsl.f16       d16, s2, s8
+.*:    fe18 281c       vfmsl.f16       d2, s16, s8\[1\]
+.*:    fc61 0837       vfmal.f16       d16, s2, s15
+.*:    fe08 2837       vfmal.f16       d2, s16, s15\[0\]
+.*:    fce1 0837       vfmsl.f16       d16, s2, s15
+.*:    fe18 283f       vfmsl.f16       d2, s16, s15\[1\]
+.*:    fc67 0890       vfmal.f16       d16, s15, s0
+.*:    fe08 f810       vfmal.f16       d15, s16, s0\[0\]
+.*:    fce7 0890       vfmsl.f16       d16, s15, s0
+.*:    fe18 f818       vfmsl.f16       d15, s16, s0\[1\]
+.*:    fc67 0894       vfmal.f16       d16, s15, s8
+.*:    fe08 f814       vfmal.f16       d15, s16, s8\[0\]
+.*:    fce7 0894       vfmsl.f16       d16, s15, s8
+.*:    fe18 f81c       vfmsl.f16       d15, s16, s8\[1\]
+.*:    fc67 08b7       vfmal.f16       d16, s15, s15
+.*:    fe08 f837       vfmal.f16       d15, s16, s15\[0\]
+.*:    fce7 08b7       vfmsl.f16       d16, s15, s15
+.*:    fe18 f83f       vfmsl.f16       d15, s16, s15\[1\]
+.*:    fc6f 0810       vfmal.f16       d16, s30, s0
+.*:    fe48 e810       vfmal.f16       d30, s16, s0\[0\]
+.*:    fcef 0810       vfmsl.f16       d16, s30, s0
+.*:    fe58 e818       vfmsl.f16       d30, s16, s0\[1\]
+.*:    fc6f 0814       vfmal.f16       d16, s30, s8
+.*:    fe48 e814       vfmal.f16       d30, s16, s8\[0\]
+.*:    fcef 0814       vfmsl.f16       d16, s30, s8
+.*:    fe58 e81c       vfmsl.f16       d30, s16, s8\[1\]
+.*:    fc6f 0837       vfmal.f16       d16, s30, s15
+.*:    fe48 e837       vfmal.f16       d30, s16, s15\[0\]
+.*:    fcef 0837       vfmsl.f16       d16, s30, s15
+.*:    fe58 e83f       vfmsl.f16       d30, s16, s15\[1\]
+.*:    fc61 f810       vfmal.f16       d31, s2, s0
+.*:    fe0f 2890       vfmal.f16       d2, s31, s0\[0\]
+.*:    fce1 f810       vfmsl.f16       d31, s2, s0
+.*:    fe1f 2898       vfmsl.f16       d2, s31, s0\[1\]
+.*:    fc61 f814       vfmal.f16       d31, s2, s8
+.*:    fe0f 2894       vfmal.f16       d2, s31, s8\[0\]
+.*:    fce1 f814       vfmsl.f16       d31, s2, s8
+.*:    fe1f 289c       vfmsl.f16       d2, s31, s8\[1\]
+.*:    fc61 f837       vfmal.f16       d31, s2, s15
+.*:    fe0f 28b7       vfmal.f16       d2, s31, s15\[0\]
+.*:    fce1 f837       vfmsl.f16       d31, s2, s15
+.*:    fe1f 28bf       vfmsl.f16       d2, s31, s15\[1\]
+.*:    fc67 f890       vfmal.f16       d31, s15, s0
+.*:    fe0f f890       vfmal.f16       d15, s31, s0\[0\]
+.*:    fce7 f890       vfmsl.f16       d31, s15, s0
+.*:    fe1f f898       vfmsl.f16       d15, s31, s0\[1\]
+.*:    fc67 f894       vfmal.f16       d31, s15, s8
+.*:    fe0f f894       vfmal.f16       d15, s31, s8\[0\]
+.*:    fce7 f894       vfmsl.f16       d31, s15, s8
+.*:    fe1f f89c       vfmsl.f16       d15, s31, s8\[1\]
+.*:    fc67 f8b7       vfmal.f16       d31, s15, s15
+.*:    fe0f f8b7       vfmal.f16       d15, s31, s15\[0\]
+.*:    fce7 f8b7       vfmsl.f16       d31, s15, s15
+.*:    fe1f f8bf       vfmsl.f16       d15, s31, s15\[1\]
+.*:    fc6f f810       vfmal.f16       d31, s30, s0
+.*:    fe4f e890       vfmal.f16       d30, s31, s0\[0\]
+.*:    fcef f810       vfmsl.f16       d31, s30, s0
+.*:    fe5f e898       vfmsl.f16       d30, s31, s0\[1\]
+.*:    fc6f f814       vfmal.f16       d31, s30, s8
+.*:    fe4f e894       vfmal.f16       d30, s31, s8\[0\]
+.*:    fcef f814       vfmsl.f16       d31, s30, s8
+.*:    fe5f e89c       vfmsl.f16       d30, s31, s8\[1\]
+.*:    fc6f f837       vfmal.f16       d31, s30, s15
+.*:    fe4f e8b7       vfmal.f16       d30, s31, s15\[0\]
+.*:    fcef f837       vfmsl.f16       d31, s30, s15
+.*:    fe5f e8bf       vfmsl.f16       d30, s31, s15\[1\]
+.*:    fc20 4850       vfmal.f16       q2, d0, d0
+.*:    fe02 0850       vfmal.f16       q0, d2, d0\[0\]
+.*:    fca0 4850       vfmsl.f16       q2, d0, d0
+.*:    fe12 0878       vfmsl.f16       q0, d2, d0\[3\]
+.*:    fc20 4857       vfmal.f16       q2, d0, d7
+.*:    fe02 0857       vfmal.f16       q0, d2, d7\[0\]
+.*:    fca0 4857       vfmsl.f16       q2, d0, d7
+.*:    fe12 087f       vfmsl.f16       q0, d2, d7\[3\]
+.*:    fc20 6850       vfmal.f16       q3, d0, d0
+.*:    fe03 0850       vfmal.f16       q0, d3, d0\[0\]
+.*:    fca0 6850       vfmsl.f16       q3, d0, d0
+.*:    fe13 0878       vfmsl.f16       q0, d3, d0\[3\]
+.*:    fc20 6857       vfmal.f16       q3, d0, d7
+.*:    fe03 0857       vfmal.f16       q0, d3, d7\[0\]
+.*:    fca0 6857       vfmsl.f16       q3, d0, d7
+.*:    fe13 087f       vfmsl.f16       q0, d3, d7\[3\]
+.*:    fc60 a850       vfmal.f16       q13, d0, d0
+.*:    fe0d 0850       vfmal.f16       q0, d13, d0\[0\]
+.*:    fce0 a850       vfmsl.f16       q13, d0, d0
+.*:    fe1d 0878       vfmsl.f16       q0, d13, d0\[3\]
+.*:    fc60 a857       vfmal.f16       q13, d0, d7
+.*:    fe0d 0857       vfmal.f16       q0, d13, d7\[0\]
+.*:    fce0 a857       vfmsl.f16       q13, d0, d7
+.*:    fe1d 087f       vfmsl.f16       q0, d13, d7\[3\]
+.*:    fc21 4850       vfmal.f16       q2, d1, d0
+.*:    fe02 2850       vfmal.f16       q1, d2, d0\[0\]
+.*:    fca1 4850       vfmsl.f16       q2, d1, d0
+.*:    fe12 2878       vfmsl.f16       q1, d2, d0\[3\]
+.*:    fc21 4857       vfmal.f16       q2, d1, d7
+.*:    fe02 2857       vfmal.f16       q1, d2, d7\[0\]
+.*:    fca1 4857       vfmsl.f16       q2, d1, d7
+.*:    fe12 287f       vfmsl.f16       q1, d2, d7\[3\]
+.*:    fc21 6850       vfmal.f16       q3, d1, d0
+.*:    fe03 2850       vfmal.f16       q1, d3, d0\[0\]
+.*:    fca1 6850       vfmsl.f16       q3, d1, d0
+.*:    fe13 2878       vfmsl.f16       q1, d3, d0\[3\]
+.*:    fc21 6857       vfmal.f16       q3, d1, d7
+.*:    fe03 2857       vfmal.f16       q1, d3, d7\[0\]
+.*:    fca1 6857       vfmsl.f16       q3, d1, d7
+.*:    fe13 287f       vfmsl.f16       q1, d3, d7\[3\]
+.*:    fc61 a850       vfmal.f16       q13, d1, d0
+.*:    fe0d 2850       vfmal.f16       q1, d13, d0\[0\]
+.*:    fce1 a850       vfmsl.f16       q13, d1, d0
+.*:    fe1d 2878       vfmsl.f16       q1, d13, d0\[3\]
+.*:    fc61 a857       vfmal.f16       q13, d1, d7
+.*:    fe0d 2857       vfmal.f16       q1, d13, d7\[0\]
+.*:    fce1 a857       vfmsl.f16       q13, d1, d7
+.*:    fe1d 287f       vfmsl.f16       q1, d13, d7\[3\]
+.*:    fc26 4850       vfmal.f16       q2, d6, d0
+.*:    fe02 c850       vfmal.f16       q6, d2, d0\[0\]
+.*:    fca6 4850       vfmsl.f16       q2, d6, d0
+.*:    fe12 c878       vfmsl.f16       q6, d2, d0\[3\]
+.*:    fc26 4857       vfmal.f16       q2, d6, d7
+.*:    fe02 c857       vfmal.f16       q6, d2, d7\[0\]
+.*:    fca6 4857       vfmsl.f16       q2, d6, d7
+.*:    fe12 c87f       vfmsl.f16       q6, d2, d7\[3\]
+.*:    fc26 6850       vfmal.f16       q3, d6, d0
+.*:    fe03 c850       vfmal.f16       q6, d3, d0\[0\]
+.*:    fca6 6850       vfmsl.f16       q3, d6, d0
+.*:    fe13 c878       vfmsl.f16       q6, d3, d0\[3\]
+.*:    fc26 6857       vfmal.f16       q3, d6, d7
+.*:    fe03 c857       vfmal.f16       q6, d3, d7\[0\]
+.*:    fca6 6857       vfmsl.f16       q3, d6, d7
+.*:    fe13 c87f       vfmsl.f16       q6, d3, d7\[3\]
+.*:    fc66 a850       vfmal.f16       q13, d6, d0
+.*:    fe0d c850       vfmal.f16       q6, d13, d0\[0\]
+.*:    fce6 a850       vfmsl.f16       q13, d6, d0
+.*:    fe1d c878       vfmsl.f16       q6, d13, d0\[3\]
+.*:    fc66 a857       vfmal.f16       q13, d6, d7
+.*:    fe0d c857       vfmal.f16       q6, d13, d7\[0\]
+.*:    fce6 a857       vfmsl.f16       q13, d6, d7
+.*:    fe1d c87f       vfmsl.f16       q6, d13, d7\[3\]
+.*:    fc2f 4850       vfmal.f16       q2, d15, d0
+.*:    fe42 e850       vfmal.f16       q15, d2, d0\[0\]
+.*:    fcaf 4850       vfmsl.f16       q2, d15, d0
+.*:    fe52 e878       vfmsl.f16       q15, d2, d0\[3\]
+.*:    fc2f 4857       vfmal.f16       q2, d15, d7
+.*:    fe42 e857       vfmal.f16       q15, d2, d7\[0\]
+.*:    fcaf 4857       vfmsl.f16       q2, d15, d7
+.*:    fe52 e87f       vfmsl.f16       q15, d2, d7\[3\]
+.*:    fc2f 6850       vfmal.f16       q3, d15, d0
+.*:    fe43 e850       vfmal.f16       q15, d3, d0\[0\]
+.*:    fcaf 6850       vfmsl.f16       q3, d15, d0
+.*:    fe53 e878       vfmsl.f16       q15, d3, d0\[3\]
+.*:    fc2f 6857       vfmal.f16       q3, d15, d7
+.*:    fe43 e857       vfmal.f16       q15, d3, d7\[0\]
+.*:    fcaf 6857       vfmsl.f16       q3, d15, d7
+.*:    fe53 e87f       vfmsl.f16       q15, d3, d7\[3\]
+.*:    fc6f a850       vfmal.f16       q13, d15, d0
+.*:    fe4d e850       vfmal.f16       q15, d13, d0\[0\]
+.*:    fcef a850       vfmsl.f16       q13, d15, d0
+.*:    fe5d e878       vfmsl.f16       q15, d13, d0\[3\]
+.*:    fc6f a857       vfmal.f16       q13, d15, d7
+.*:    fe4d e857       vfmal.f16       q15, d13, d7\[0\]
+.*:    fcef a857       vfmsl.f16       q13, d15, d7
+.*:    fe5d e87f       vfmsl.f16       q15, d13, d7\[3\]
diff --git a/gas/testsuite/gas/arm/armv8_2-a-fp16.d b/gas/testsuite/gas/arm/armv8_2-a-fp16.d
new file mode 100644 (file)
index 0000000..9f99828
--- /dev/null
@@ -0,0 +1,249 @@
+#as: -march=armv8.2-a+fp16 -mfpu=neon-fp-armv8
+#source: armv8_2-a-fp16.s
+#objdump: -d
+
+.*: +file format .*arm.*
+
+Disassembly of section .text:
+
+.* <.*>:
+.*:    fc210810        vfmal.f16       d0, s2, s0
+.*:    fe002810        vfmal.f16       d2, s0, s0\[0\]
+.*:    fca10810        vfmsl.f16       d0, s2, s0
+.*:    fe102818        vfmsl.f16       d2, s0, s0\[1\]
+.*:    fc210814        vfmal.f16       d0, s2, s8
+.*:    fe002814        vfmal.f16       d2, s0, s8\[0\]
+.*:    fca10814        vfmsl.f16       d0, s2, s8
+.*:    fe10281c        vfmsl.f16       d2, s0, s8\[1\]
+.*:    fc210837        vfmal.f16       d0, s2, s15
+.*:    fe002837        vfmal.f16       d2, s0, s15\[0\]
+.*:    fca10837        vfmsl.f16       d0, s2, s15
+.*:    fe10283f        vfmsl.f16       d2, s0, s15\[1\]
+.*:    fc270890        vfmal.f16       d0, s15, s0
+.*:    fe00f810        vfmal.f16       d15, s0, s0\[0\]
+.*:    fca70890        vfmsl.f16       d0, s15, s0
+.*:    fe10f818        vfmsl.f16       d15, s0, s0\[1\]
+.*:    fc270894        vfmal.f16       d0, s15, s8
+.*:    fe00f814        vfmal.f16       d15, s0, s8\[0\]
+.*:    fca70894        vfmsl.f16       d0, s15, s8
+.*:    fe10f81c        vfmsl.f16       d15, s0, s8\[1\]
+.*:    fc2708b7        vfmal.f16       d0, s15, s15
+.*:    fe00f837        vfmal.f16       d15, s0, s15\[0\]
+.*:    fca708b7        vfmsl.f16       d0, s15, s15
+.*:    fe10f83f        vfmsl.f16       d15, s0, s15\[1\]
+.*:    fc2f0810        vfmal.f16       d0, s30, s0
+.*:    fe40e810        vfmal.f16       d30, s0, s0\[0\]
+.*:    fcaf0810        vfmsl.f16       d0, s30, s0
+.*:    fe50e818        vfmsl.f16       d30, s0, s0\[1\]
+.*:    fc2f0814        vfmal.f16       d0, s30, s8
+.*:    fe40e814        vfmal.f16       d30, s0, s8\[0\]
+.*:    fcaf0814        vfmsl.f16       d0, s30, s8
+.*:    fe50e81c        vfmsl.f16       d30, s0, s8\[1\]
+.*:    fc2f0837        vfmal.f16       d0, s30, s15
+.*:    fe40e837        vfmal.f16       d30, s0, s15\[0\]
+.*:    fcaf0837        vfmsl.f16       d0, s30, s15
+.*:    fe50e83f        vfmsl.f16       d30, s0, s15\[1\]
+.*:    fc217810        vfmal.f16       d7, s2, s0
+.*:    fe032890        vfmal.f16       d2, s7, s0\[0\]
+.*:    fca17810        vfmsl.f16       d7, s2, s0
+.*:    fe132898        vfmsl.f16       d2, s7, s0\[1\]
+.*:    fc217814        vfmal.f16       d7, s2, s8
+.*:    fe032894        vfmal.f16       d2, s7, s8\[0\]
+.*:    fca17814        vfmsl.f16       d7, s2, s8
+.*:    fe13289c        vfmsl.f16       d2, s7, s8\[1\]
+.*:    fc217837        vfmal.f16       d7, s2, s15
+.*:    fe0328b7        vfmal.f16       d2, s7, s15\[0\]
+.*:    fca17837        vfmsl.f16       d7, s2, s15
+.*:    fe1328bf        vfmsl.f16       d2, s7, s15\[1\]
+.*:    fc277890        vfmal.f16       d7, s15, s0
+.*:    fe03f890        vfmal.f16       d15, s7, s0\[0\]
+.*:    fca77890        vfmsl.f16       d7, s15, s0
+.*:    fe13f898        vfmsl.f16       d15, s7, s0\[1\]
+.*:    fc277894        vfmal.f16       d7, s15, s8
+.*:    fe03f894        vfmal.f16       d15, s7, s8\[0\]
+.*:    fca77894        vfmsl.f16       d7, s15, s8
+.*:    fe13f89c        vfmsl.f16       d15, s7, s8\[1\]
+.*:    fc2778b7        vfmal.f16       d7, s15, s15
+.*:    fe03f8b7        vfmal.f16       d15, s7, s15\[0\]
+.*:    fca778b7        vfmsl.f16       d7, s15, s15
+.*:    fe13f8bf        vfmsl.f16       d15, s7, s15\[1\]
+.*:    fc2f7810        vfmal.f16       d7, s30, s0
+.*:    fe43e890        vfmal.f16       d30, s7, s0\[0\]
+.*:    fcaf7810        vfmsl.f16       d7, s30, s0
+.*:    fe53e898        vfmsl.f16       d30, s7, s0\[1\]
+.*:    fc2f7814        vfmal.f16       d7, s30, s8
+.*:    fe43e894        vfmal.f16       d30, s7, s8\[0\]
+.*:    fcaf7814        vfmsl.f16       d7, s30, s8
+.*:    fe53e89c        vfmsl.f16       d30, s7, s8\[1\]
+.*:    fc2f7837        vfmal.f16       d7, s30, s15
+.*:    fe43e8b7        vfmal.f16       d30, s7, s15\[0\]
+.*:    fcaf7837        vfmsl.f16       d7, s30, s15
+.*:    fe53e8bf        vfmsl.f16       d30, s7, s15\[1\]
+.*:    fc610810        vfmal.f16       d16, s2, s0
+.*:    fe082810        vfmal.f16       d2, s16, s0\[0\]
+.*:    fce10810        vfmsl.f16       d16, s2, s0
+.*:    fe182818        vfmsl.f16       d2, s16, s0\[1\]
+.*:    fc610814        vfmal.f16       d16, s2, s8
+.*:    fe082814        vfmal.f16       d2, s16, s8\[0\]
+.*:    fce10814        vfmsl.f16       d16, s2, s8
+.*:    fe18281c        vfmsl.f16       d2, s16, s8\[1\]
+.*:    fc610837        vfmal.f16       d16, s2, s15
+.*:    fe082837        vfmal.f16       d2, s16, s15\[0\]
+.*:    fce10837        vfmsl.f16       d16, s2, s15
+.*:    fe18283f        vfmsl.f16       d2, s16, s15\[1\]
+.*:    fc670890        vfmal.f16       d16, s15, s0
+.*:    fe08f810        vfmal.f16       d15, s16, s0\[0\]
+.*:    fce70890        vfmsl.f16       d16, s15, s0
+.*:    fe18f818        vfmsl.f16       d15, s16, s0\[1\]
+.*:    fc670894        vfmal.f16       d16, s15, s8
+.*:    fe08f814        vfmal.f16       d15, s16, s8\[0\]
+.*:    fce70894        vfmsl.f16       d16, s15, s8
+.*:    fe18f81c        vfmsl.f16       d15, s16, s8\[1\]
+.*:    fc6708b7        vfmal.f16       d16, s15, s15
+.*:    fe08f837        vfmal.f16       d15, s16, s15\[0\]
+.*:    fce708b7        vfmsl.f16       d16, s15, s15
+.*:    fe18f83f        vfmsl.f16       d15, s16, s15\[1\]
+.*:    fc6f0810        vfmal.f16       d16, s30, s0
+.*:    fe48e810        vfmal.f16       d30, s16, s0\[0\]
+.*:    fcef0810        vfmsl.f16       d16, s30, s0
+.*:    fe58e818        vfmsl.f16       d30, s16, s0\[1\]
+.*:    fc6f0814        vfmal.f16       d16, s30, s8
+.*:    fe48e814        vfmal.f16       d30, s16, s8\[0\]
+.*:    fcef0814        vfmsl.f16       d16, s30, s8
+.*:    fe58e81c        vfmsl.f16       d30, s16, s8\[1\]
+.*:    fc6f0837        vfmal.f16       d16, s30, s15
+.*:    fe48e837        vfmal.f16       d30, s16, s15\[0\]
+.*:    fcef0837        vfmsl.f16       d16, s30, s15
+.*:    fe58e83f        vfmsl.f16       d30, s16, s15\[1\]
+.*:    fc61f810        vfmal.f16       d31, s2, s0
+.*:    fe0f2890        vfmal.f16       d2, s31, s0\[0\]
+.*:    fce1f810        vfmsl.f16       d31, s2, s0
+.*:    fe1f2898        vfmsl.f16       d2, s31, s0\[1\]
+.*:    fc61f814        vfmal.f16       d31, s2, s8
+.*:    fe0f2894        vfmal.f16       d2, s31, s8\[0\]
+.*:    fce1f814        vfmsl.f16       d31, s2, s8
+.*:    fe1f289c        vfmsl.f16       d2, s31, s8\[1\]
+.*:    fc61f837        vfmal.f16       d31, s2, s15
+.*:    fe0f28b7        vfmal.f16       d2, s31, s15\[0\]
+.*:    fce1f837        vfmsl.f16       d31, s2, s15
+.*:    fe1f28bf        vfmsl.f16       d2, s31, s15\[1\]
+.*:    fc67f890        vfmal.f16       d31, s15, s0
+.*:    fe0ff890        vfmal.f16       d15, s31, s0\[0\]
+.*:    fce7f890        vfmsl.f16       d31, s15, s0
+.*:    fe1ff898        vfmsl.f16       d15, s31, s0\[1\]
+.*:    fc67f894        vfmal.f16       d31, s15, s8
+.*:    fe0ff894        vfmal.f16       d15, s31, s8\[0\]
+.*:    fce7f894        vfmsl.f16       d31, s15, s8
+.*:    fe1ff89c        vfmsl.f16       d15, s31, s8\[1\]
+.*:    fc67f8b7        vfmal.f16       d31, s15, s15
+.*:    fe0ff8b7        vfmal.f16       d15, s31, s15\[0\]
+.*:    fce7f8b7        vfmsl.f16       d31, s15, s15
+.*:    fe1ff8bf        vfmsl.f16       d15, s31, s15\[1\]
+.*:    fc6ff810        vfmal.f16       d31, s30, s0
+.*:    fe4fe890        vfmal.f16       d30, s31, s0\[0\]
+.*:    fceff810        vfmsl.f16       d31, s30, s0
+.*:    fe5fe898        vfmsl.f16       d30, s31, s0\[1\]
+.*:    fc6ff814        vfmal.f16       d31, s30, s8
+.*:    fe4fe894        vfmal.f16       d30, s31, s8\[0\]
+.*:    fceff814        vfmsl.f16       d31, s30, s8
+.*:    fe5fe89c        vfmsl.f16       d30, s31, s8\[1\]
+.*:    fc6ff837        vfmal.f16       d31, s30, s15
+.*:    fe4fe8b7        vfmal.f16       d30, s31, s15\[0\]
+.*:    fceff837        vfmsl.f16       d31, s30, s15
+.*:    fe5fe8bf        vfmsl.f16       d30, s31, s15\[1\]
+.*:    fc204850        vfmal.f16       q2, d0, d0
+.*:    fe020850        vfmal.f16       q0, d2, d0\[0\]
+.*:    fca04850        vfmsl.f16       q2, d0, d0
+.*:    fe120878        vfmsl.f16       q0, d2, d0\[3\]
+.*:    fc204857        vfmal.f16       q2, d0, d7
+.*:    fe020857        vfmal.f16       q0, d2, d7\[0\]
+.*:    fca04857        vfmsl.f16       q2, d0, d7
+.*:    fe12087f        vfmsl.f16       q0, d2, d7\[3\]
+.*:    fc206850        vfmal.f16       q3, d0, d0
+.*:    fe030850        vfmal.f16       q0, d3, d0\[0\]
+.*:    fca06850        vfmsl.f16       q3, d0, d0
+.*:    fe130878        vfmsl.f16       q0, d3, d0\[3\]
+.*:    fc206857        vfmal.f16       q3, d0, d7
+.*:    fe030857        vfmal.f16       q0, d3, d7\[0\]
+.*:    fca06857        vfmsl.f16       q3, d0, d7
+.*:    fe13087f        vfmsl.f16       q0, d3, d7\[3\]
+.*:    fc60a850        vfmal.f16       q13, d0, d0
+.*:    fe0d0850        vfmal.f16       q0, d13, d0\[0\]
+.*:    fce0a850        vfmsl.f16       q13, d0, d0
+.*:    fe1d0878        vfmsl.f16       q0, d13, d0\[3\]
+.*:    fc60a857        vfmal.f16       q13, d0, d7
+.*:    fe0d0857        vfmal.f16       q0, d13, d7\[0\]
+.*:    fce0a857        vfmsl.f16       q13, d0, d7
+.*:    fe1d087f        vfmsl.f16       q0, d13, d7\[3\]
+.*:    fc214850        vfmal.f16       q2, d1, d0
+.*:    fe022850        vfmal.f16       q1, d2, d0\[0\]
+.*:    fca14850        vfmsl.f16       q2, d1, d0
+.*:    fe122878        vfmsl.f16       q1, d2, d0\[3\]
+.*:    fc214857        vfmal.f16       q2, d1, d7
+.*:    fe022857        vfmal.f16       q1, d2, d7\[0\]
+.*:    fca14857        vfmsl.f16       q2, d1, d7
+.*:    fe12287f        vfmsl.f16       q1, d2, d7\[3\]
+.*:    fc216850        vfmal.f16       q3, d1, d0
+.*:    fe032850        vfmal.f16       q1, d3, d0\[0\]
+.*:    fca16850        vfmsl.f16       q3, d1, d0
+.*:    fe132878        vfmsl.f16       q1, d3, d0\[3\]
+.*:    fc216857        vfmal.f16       q3, d1, d7
+.*:    fe032857        vfmal.f16       q1, d3, d7\[0\]
+.*:    fca16857        vfmsl.f16       q3, d1, d7
+.*:    fe13287f        vfmsl.f16       q1, d3, d7\[3\]
+.*:    fc61a850        vfmal.f16       q13, d1, d0
+.*:    fe0d2850        vfmal.f16       q1, d13, d0\[0\]
+.*:    fce1a850        vfmsl.f16       q13, d1, d0
+.*:    fe1d2878        vfmsl.f16       q1, d13, d0\[3\]
+.*:    fc61a857        vfmal.f16       q13, d1, d7
+.*:    fe0d2857        vfmal.f16       q1, d13, d7\[0\]
+.*:    fce1a857        vfmsl.f16       q13, d1, d7
+.*:    fe1d287f        vfmsl.f16       q1, d13, d7\[3\]
+.*:    fc264850        vfmal.f16       q2, d6, d0
+.*:    fe02c850        vfmal.f16       q6, d2, d0\[0\]
+.*:    fca64850        vfmsl.f16       q2, d6, d0
+.*:    fe12c878        vfmsl.f16       q6, d2, d0\[3\]
+.*:    fc264857        vfmal.f16       q2, d6, d7
+.*:    fe02c857        vfmal.f16       q6, d2, d7\[0\]
+.*:    fca64857        vfmsl.f16       q2, d6, d7
+.*:    fe12c87f        vfmsl.f16       q6, d2, d7\[3\]
+.*:    fc266850        vfmal.f16       q3, d6, d0
+.*:    fe03c850        vfmal.f16       q6, d3, d0\[0\]
+.*:    fca66850        vfmsl.f16       q3, d6, d0
+.*:    fe13c878        vfmsl.f16       q6, d3, d0\[3\]
+.*:    fc266857        vfmal.f16       q3, d6, d7
+.*:    fe03c857        vfmal.f16       q6, d3, d7\[0\]
+.*:    fca66857        vfmsl.f16       q3, d6, d7
+.*:    fe13c87f        vfmsl.f16       q6, d3, d7\[3\]
+.*:    fc66a850        vfmal.f16       q13, d6, d0
+.*:    fe0dc850        vfmal.f16       q6, d13, d0\[0\]
+.*:    fce6a850        vfmsl.f16       q13, d6, d0
+.*:    fe1dc878        vfmsl.f16       q6, d13, d0\[3\]
+.*:    fc66a857        vfmal.f16       q13, d6, d7
+.*:    fe0dc857        vfmal.f16       q6, d13, d7\[0\]
+.*:    fce6a857        vfmsl.f16       q13, d6, d7
+.*:    fe1dc87f        vfmsl.f16       q6, d13, d7\[3\]
+.*:    fc2f4850        vfmal.f16       q2, d15, d0
+.*:    fe42e850        vfmal.f16       q15, d2, d0\[0\]
+.*:    fcaf4850        vfmsl.f16       q2, d15, d0
+.*:    fe52e878        vfmsl.f16       q15, d2, d0\[3\]
+.*:    fc2f4857        vfmal.f16       q2, d15, d7
+.*:    fe42e857        vfmal.f16       q15, d2, d7\[0\]
+.*:    fcaf4857        vfmsl.f16       q2, d15, d7
+.*:    fe52e87f        vfmsl.f16       q15, d2, d7\[3\]
+.*:    fc2f6850        vfmal.f16       q3, d15, d0
+.*:    fe43e850        vfmal.f16       q15, d3, d0\[0\]
+.*:    fcaf6850        vfmsl.f16       q3, d15, d0
+.*:    fe53e878        vfmsl.f16       q15, d3, d0\[3\]
+.*:    fc2f6857        vfmal.f16       q3, d15, d7
+.*:    fe43e857        vfmal.f16       q15, d3, d7\[0\]
+.*:    fcaf6857        vfmsl.f16       q3, d15, d7
+.*:    fe53e87f        vfmsl.f16       q15, d3, d7\[3\]
+.*:    fc6fa850        vfmal.f16       q13, d15, d0
+.*:    fe4de850        vfmal.f16       q15, d13, d0\[0\]
+.*:    fcefa850        vfmsl.f16       q13, d15, d0
+.*:    fe5de878        vfmsl.f16       q15, d13, d0\[3\]
+.*:    fc6fa857        vfmal.f16       q13, d15, d7
+.*:    fe4de857        vfmal.f16       q15, d13, d7\[0\]
+.*:    fcefa857        vfmsl.f16       q13, d15, d7
+.*:    fe5de87f        vfmsl.f16       q15, d13, d7\[3\]
diff --git a/gas/testsuite/gas/arm/armv8_2-a-fp16.s b/gas/testsuite/gas/arm/armv8_2-a-fp16.s
new file mode 100644 (file)
index 0000000..0adbd42
--- /dev/null
@@ -0,0 +1,46 @@
+       .macro fmac_iter_d_n op, d, n
+       .irp m, 0, 8, 15
+               vfmal.f16 d\d, s\n, s\m
+               vfmal.f16 d\n, s\d, s\m[0]
+               vfmsl.f16 d\d, s\n, s\m
+               vfmsl.f16 d\n, s\d, s\m[1]
+       .endr
+       .endm
+
+       .macro fmac_iter_d op, d
+       .irp n, 2, 15, 30
+               fmac_iter_d_n \op, \d, \n
+       .endr
+       .endm
+
+       .macro iter
+       .irp d, 0, 7, 16, 31
+               fmac_iter_d \op, \d
+       .endr
+       .endm
+
+       .macro fmac_q_iter_d_n op, d, n
+       .irp m, 0, 7
+               vfmal.f16 q\n, d\d, d\m
+               vfmal.f16 q\d, d\n, d\m[0]
+               vfmsl.f16 q\n, d\d, d\m
+               vfmsl.f16 q\d, d\n, d\m[3]
+       .endr
+       .endm
+
+       .macro fmac_q_iter_d op, d
+       .irp n, 2, 3, 13
+               fmac_q_iter_d_n \op, \d, \n
+       .endr
+       .endm
+
+       .macro q_iter
+       .irp d, 0, 1, 6, 15
+               fmac_q_iter_d \op, \d
+       .endr
+       .endm
+
+       .text
+func:
+       iter
+       q_iter
diff --git a/gas/testsuite/gas/arm/armv8_3-a-fp16.d b/gas/testsuite/gas/arm/armv8_3-a-fp16.d
new file mode 100644 (file)
index 0000000..545275a
--- /dev/null
@@ -0,0 +1,249 @@
+#as: -march=armv8.3-a+fp16 -mfpu=neon-fp-armv8
+#source: armv8_2-a-fp16.s
+#objdump: -d
+
+.*: +file format .*arm.*
+
+Disassembly of section .text:
+
+.* <.*>:
+.*:    fc210810        vfmal.f16       d0, s2, s0
+.*:    fe002810        vfmal.f16       d2, s0, s0\[0\]
+.*:    fca10810        vfmsl.f16       d0, s2, s0
+.*:    fe102818        vfmsl.f16       d2, s0, s0\[1\]
+.*:    fc210814        vfmal.f16       d0, s2, s8
+.*:    fe002814        vfmal.f16       d2, s0, s8\[0\]
+.*:    fca10814        vfmsl.f16       d0, s2, s8
+.*:    fe10281c        vfmsl.f16       d2, s0, s8\[1\]
+.*:    fc210837        vfmal.f16       d0, s2, s15
+.*:    fe002837        vfmal.f16       d2, s0, s15\[0\]
+.*:    fca10837        vfmsl.f16       d0, s2, s15
+.*:    fe10283f        vfmsl.f16       d2, s0, s15\[1\]
+.*:    fc270890        vfmal.f16       d0, s15, s0
+.*:    fe00f810        vfmal.f16       d15, s0, s0\[0\]
+.*:    fca70890        vfmsl.f16       d0, s15, s0
+.*:    fe10f818        vfmsl.f16       d15, s0, s0\[1\]
+.*:    fc270894        vfmal.f16       d0, s15, s8
+.*:    fe00f814        vfmal.f16       d15, s0, s8\[0\]
+.*:    fca70894        vfmsl.f16       d0, s15, s8
+.*:    fe10f81c        vfmsl.f16       d15, s0, s8\[1\]
+.*:    fc2708b7        vfmal.f16       d0, s15, s15
+.*:    fe00f837        vfmal.f16       d15, s0, s15\[0\]
+.*:    fca708b7        vfmsl.f16       d0, s15, s15
+.*:    fe10f83f        vfmsl.f16       d15, s0, s15\[1\]
+.*:    fc2f0810        vfmal.f16       d0, s30, s0
+.*:    fe40e810        vfmal.f16       d30, s0, s0\[0\]
+.*:    fcaf0810        vfmsl.f16       d0, s30, s0
+.*:    fe50e818        vfmsl.f16       d30, s0, s0\[1\]
+.*:    fc2f0814        vfmal.f16       d0, s30, s8
+.*:    fe40e814        vfmal.f16       d30, s0, s8\[0\]
+.*:    fcaf0814        vfmsl.f16       d0, s30, s8
+.*:    fe50e81c        vfmsl.f16       d30, s0, s8\[1\]
+.*:    fc2f0837        vfmal.f16       d0, s30, s15
+.*:    fe40e837        vfmal.f16       d30, s0, s15\[0\]
+.*:    fcaf0837        vfmsl.f16       d0, s30, s15
+.*:    fe50e83f        vfmsl.f16       d30, s0, s15\[1\]
+.*:    fc217810        vfmal.f16       d7, s2, s0
+.*:    fe032890        vfmal.f16       d2, s7, s0\[0\]
+.*:    fca17810        vfmsl.f16       d7, s2, s0
+.*:    fe132898        vfmsl.f16       d2, s7, s0\[1\]
+.*:    fc217814        vfmal.f16       d7, s2, s8
+.*:    fe032894        vfmal.f16       d2, s7, s8\[0\]
+.*:    fca17814        vfmsl.f16       d7, s2, s8
+.*:    fe13289c        vfmsl.f16       d2, s7, s8\[1\]
+.*:    fc217837        vfmal.f16       d7, s2, s15
+.*:    fe0328b7        vfmal.f16       d2, s7, s15\[0\]
+.*:    fca17837        vfmsl.f16       d7, s2, s15
+.*:    fe1328bf        vfmsl.f16       d2, s7, s15\[1\]
+.*:    fc277890        vfmal.f16       d7, s15, s0
+.*:    fe03f890        vfmal.f16       d15, s7, s0\[0\]
+.*:    fca77890        vfmsl.f16       d7, s15, s0
+.*:    fe13f898        vfmsl.f16       d15, s7, s0\[1\]
+.*:    fc277894        vfmal.f16       d7, s15, s8
+.*:    fe03f894        vfmal.f16       d15, s7, s8\[0\]
+.*:    fca77894        vfmsl.f16       d7, s15, s8
+.*:    fe13f89c        vfmsl.f16       d15, s7, s8\[1\]
+.*:    fc2778b7        vfmal.f16       d7, s15, s15
+.*:    fe03f8b7        vfmal.f16       d15, s7, s15\[0\]
+.*:    fca778b7        vfmsl.f16       d7, s15, s15
+.*:    fe13f8bf        vfmsl.f16       d15, s7, s15\[1\]
+.*:    fc2f7810        vfmal.f16       d7, s30, s0
+.*:    fe43e890        vfmal.f16       d30, s7, s0\[0\]
+.*:    fcaf7810        vfmsl.f16       d7, s30, s0
+.*:    fe53e898        vfmsl.f16       d30, s7, s0\[1\]
+.*:    fc2f7814        vfmal.f16       d7, s30, s8
+.*:    fe43e894        vfmal.f16       d30, s7, s8\[0\]
+.*:    fcaf7814        vfmsl.f16       d7, s30, s8
+.*:    fe53e89c        vfmsl.f16       d30, s7, s8\[1\]
+.*:    fc2f7837        vfmal.f16       d7, s30, s15
+.*:    fe43e8b7        vfmal.f16       d30, s7, s15\[0\]
+.*:    fcaf7837        vfmsl.f16       d7, s30, s15
+.*:    fe53e8bf        vfmsl.f16       d30, s7, s15\[1\]
+.*:    fc610810        vfmal.f16       d16, s2, s0
+.*:    fe082810        vfmal.f16       d2, s16, s0\[0\]
+.*:    fce10810        vfmsl.f16       d16, s2, s0
+.*:    fe182818        vfmsl.f16       d2, s16, s0\[1\]
+.*:    fc610814        vfmal.f16       d16, s2, s8
+.*:    fe082814        vfmal.f16       d2, s16, s8\[0\]
+.*:    fce10814        vfmsl.f16       d16, s2, s8
+.*:    fe18281c        vfmsl.f16       d2, s16, s8\[1\]
+.*:    fc610837        vfmal.f16       d16, s2, s15
+.*:    fe082837        vfmal.f16       d2, s16, s15\[0\]
+.*:    fce10837        vfmsl.f16       d16, s2, s15
+.*:    fe18283f        vfmsl.f16       d2, s16, s15\[1\]
+.*:    fc670890        vfmal.f16       d16, s15, s0
+.*:    fe08f810        vfmal.f16       d15, s16, s0\[0\]
+.*:    fce70890        vfmsl.f16       d16, s15, s0
+.*:    fe18f818        vfmsl.f16       d15, s16, s0\[1\]
+.*:    fc670894        vfmal.f16       d16, s15, s8
+.*:    fe08f814        vfmal.f16       d15, s16, s8\[0\]
+.*:    fce70894        vfmsl.f16       d16, s15, s8
+.*:    fe18f81c        vfmsl.f16       d15, s16, s8\[1\]
+.*:    fc6708b7        vfmal.f16       d16, s15, s15
+.*:    fe08f837        vfmal.f16       d15, s16, s15\[0\]
+.*:    fce708b7        vfmsl.f16       d16, s15, s15
+.*:    fe18f83f        vfmsl.f16       d15, s16, s15\[1\]
+.*:    fc6f0810        vfmal.f16       d16, s30, s0
+.*:    fe48e810        vfmal.f16       d30, s16, s0\[0\]
+.*:    fcef0810        vfmsl.f16       d16, s30, s0
+.*:    fe58e818        vfmsl.f16       d30, s16, s0\[1\]
+.*:    fc6f0814        vfmal.f16       d16, s30, s8
+.*:    fe48e814        vfmal.f16       d30, s16, s8\[0\]
+.*:    fcef0814        vfmsl.f16       d16, s30, s8
+.*:    fe58e81c        vfmsl.f16       d30, s16, s8\[1\]
+.*:    fc6f0837        vfmal.f16       d16, s30, s15
+.*:    fe48e837        vfmal.f16       d30, s16, s15\[0\]
+.*:    fcef0837        vfmsl.f16       d16, s30, s15
+.*:    fe58e83f        vfmsl.f16       d30, s16, s15\[1\]
+.*:    fc61f810        vfmal.f16       d31, s2, s0
+.*:    fe0f2890        vfmal.f16       d2, s31, s0\[0\]
+.*:    fce1f810        vfmsl.f16       d31, s2, s0
+.*:    fe1f2898        vfmsl.f16       d2, s31, s0\[1\]
+.*:    fc61f814        vfmal.f16       d31, s2, s8
+.*:    fe0f2894        vfmal.f16       d2, s31, s8\[0\]
+.*:    fce1f814        vfmsl.f16       d31, s2, s8
+.*:    fe1f289c        vfmsl.f16       d2, s31, s8\[1\]
+.*:    fc61f837        vfmal.f16       d31, s2, s15
+.*:    fe0f28b7        vfmal.f16       d2, s31, s15\[0\]
+.*:    fce1f837        vfmsl.f16       d31, s2, s15
+.*:    fe1f28bf        vfmsl.f16       d2, s31, s15\[1\]
+.*:    fc67f890        vfmal.f16       d31, s15, s0
+.*:    fe0ff890        vfmal.f16       d15, s31, s0\[0\]
+.*:    fce7f890        vfmsl.f16       d31, s15, s0
+.*:    fe1ff898        vfmsl.f16       d15, s31, s0\[1\]
+.*:    fc67f894        vfmal.f16       d31, s15, s8
+.*:    fe0ff894        vfmal.f16       d15, s31, s8\[0\]
+.*:    fce7f894        vfmsl.f16       d31, s15, s8
+.*:    fe1ff89c        vfmsl.f16       d15, s31, s8\[1\]
+.*:    fc67f8b7        vfmal.f16       d31, s15, s15
+.*:    fe0ff8b7        vfmal.f16       d15, s31, s15\[0\]
+.*:    fce7f8b7        vfmsl.f16       d31, s15, s15
+.*:    fe1ff8bf        vfmsl.f16       d15, s31, s15\[1\]
+.*:    fc6ff810        vfmal.f16       d31, s30, s0
+.*:    fe4fe890        vfmal.f16       d30, s31, s0\[0\]
+.*:    fceff810        vfmsl.f16       d31, s30, s0
+.*:    fe5fe898        vfmsl.f16       d30, s31, s0\[1\]
+.*:    fc6ff814        vfmal.f16       d31, s30, s8
+.*:    fe4fe894        vfmal.f16       d30, s31, s8\[0\]
+.*:    fceff814        vfmsl.f16       d31, s30, s8
+.*:    fe5fe89c        vfmsl.f16       d30, s31, s8\[1\]
+.*:    fc6ff837        vfmal.f16       d31, s30, s15
+.*:    fe4fe8b7        vfmal.f16       d30, s31, s15\[0\]
+.*:    fceff837        vfmsl.f16       d31, s30, s15
+.*:    fe5fe8bf        vfmsl.f16       d30, s31, s15\[1\]
+.*:    fc204850        vfmal.f16       q2, d0, d0
+.*:    fe020850        vfmal.f16       q0, d2, d0\[0\]
+.*:    fca04850        vfmsl.f16       q2, d0, d0
+.*:    fe120878        vfmsl.f16       q0, d2, d0\[3\]
+.*:    fc204857        vfmal.f16       q2, d0, d7
+.*:    fe020857        vfmal.f16       q0, d2, d7\[0\]
+.*:    fca04857        vfmsl.f16       q2, d0, d7
+.*:    fe12087f        vfmsl.f16       q0, d2, d7\[3\]
+.*:    fc206850        vfmal.f16       q3, d0, d0
+.*:    fe030850        vfmal.f16       q0, d3, d0\[0\]
+.*:    fca06850        vfmsl.f16       q3, d0, d0
+.*:    fe130878        vfmsl.f16       q0, d3, d0\[3\]
+.*:    fc206857        vfmal.f16       q3, d0, d7
+.*:    fe030857        vfmal.f16       q0, d3, d7\[0\]
+.*:    fca06857        vfmsl.f16       q3, d0, d7
+.*:    fe13087f        vfmsl.f16       q0, d3, d7\[3\]
+.*:    fc60a850        vfmal.f16       q13, d0, d0
+.*:    fe0d0850        vfmal.f16       q0, d13, d0\[0\]
+.*:    fce0a850        vfmsl.f16       q13, d0, d0
+.*:    fe1d0878        vfmsl.f16       q0, d13, d0\[3\]
+.*:    fc60a857        vfmal.f16       q13, d0, d7
+.*:    fe0d0857        vfmal.f16       q0, d13, d7\[0\]
+.*:    fce0a857        vfmsl.f16       q13, d0, d7
+.*:    fe1d087f        vfmsl.f16       q0, d13, d7\[3\]
+.*:    fc214850        vfmal.f16       q2, d1, d0
+.*:    fe022850        vfmal.f16       q1, d2, d0\[0\]
+.*:    fca14850        vfmsl.f16       q2, d1, d0
+.*:    fe122878        vfmsl.f16       q1, d2, d0\[3\]
+.*:    fc214857        vfmal.f16       q2, d1, d7
+.*:    fe022857        vfmal.f16       q1, d2, d7\[0\]
+.*:    fca14857        vfmsl.f16       q2, d1, d7
+.*:    fe12287f        vfmsl.f16       q1, d2, d7\[3\]
+.*:    fc216850        vfmal.f16       q3, d1, d0
+.*:    fe032850        vfmal.f16       q1, d3, d0\[0\]
+.*:    fca16850        vfmsl.f16       q3, d1, d0
+.*:    fe132878        vfmsl.f16       q1, d3, d0\[3\]
+.*:    fc216857        vfmal.f16       q3, d1, d7
+.*:    fe032857        vfmal.f16       q1, d3, d7\[0\]
+.*:    fca16857        vfmsl.f16       q3, d1, d7
+.*:    fe13287f        vfmsl.f16       q1, d3, d7\[3\]
+.*:    fc61a850        vfmal.f16       q13, d1, d0
+.*:    fe0d2850        vfmal.f16       q1, d13, d0\[0\]
+.*:    fce1a850        vfmsl.f16       q13, d1, d0
+.*:    fe1d2878        vfmsl.f16       q1, d13, d0\[3\]
+.*:    fc61a857        vfmal.f16       q13, d1, d7
+.*:    fe0d2857        vfmal.f16       q1, d13, d7\[0\]
+.*:    fce1a857        vfmsl.f16       q13, d1, d7
+.*:    fe1d287f        vfmsl.f16       q1, d13, d7\[3\]
+.*:    fc264850        vfmal.f16       q2, d6, d0
+.*:    fe02c850        vfmal.f16       q6, d2, d0\[0\]
+.*:    fca64850        vfmsl.f16       q2, d6, d0
+.*:    fe12c878        vfmsl.f16       q6, d2, d0\[3\]
+.*:    fc264857        vfmal.f16       q2, d6, d7
+.*:    fe02c857        vfmal.f16       q6, d2, d7\[0\]
+.*:    fca64857        vfmsl.f16       q2, d6, d7
+.*:    fe12c87f        vfmsl.f16       q6, d2, d7\[3\]
+.*:    fc266850        vfmal.f16       q3, d6, d0
+.*:    fe03c850        vfmal.f16       q6, d3, d0\[0\]
+.*:    fca66850        vfmsl.f16       q3, d6, d0
+.*:    fe13c878        vfmsl.f16       q6, d3, d0\[3\]
+.*:    fc266857        vfmal.f16       q3, d6, d7
+.*:    fe03c857        vfmal.f16       q6, d3, d7\[0\]
+.*:    fca66857        vfmsl.f16       q3, d6, d7
+.*:    fe13c87f        vfmsl.f16       q6, d3, d7\[3\]
+.*:    fc66a850        vfmal.f16       q13, d6, d0
+.*:    fe0dc850        vfmal.f16       q6, d13, d0\[0\]
+.*:    fce6a850        vfmsl.f16       q13, d6, d0
+.*:    fe1dc878        vfmsl.f16       q6, d13, d0\[3\]
+.*:    fc66a857        vfmal.f16       q13, d6, d7
+.*:    fe0dc857        vfmal.f16       q6, d13, d7\[0\]
+.*:    fce6a857        vfmsl.f16       q13, d6, d7
+.*:    fe1dc87f        vfmsl.f16       q6, d13, d7\[3\]
+.*:    fc2f4850        vfmal.f16       q2, d15, d0
+.*:    fe42e850        vfmal.f16       q15, d2, d0\[0\]
+.*:    fcaf4850        vfmsl.f16       q2, d15, d0
+.*:    fe52e878        vfmsl.f16       q15, d2, d0\[3\]
+.*:    fc2f4857        vfmal.f16       q2, d15, d7
+.*:    fe42e857        vfmal.f16       q15, d2, d7\[0\]
+.*:    fcaf4857        vfmsl.f16       q2, d15, d7
+.*:    fe52e87f        vfmsl.f16       q15, d2, d7\[3\]
+.*:    fc2f6850        vfmal.f16       q3, d15, d0
+.*:    fe43e850        vfmal.f16       q15, d3, d0\[0\]
+.*:    fcaf6850        vfmsl.f16       q3, d15, d0
+.*:    fe53e878        vfmsl.f16       q15, d3, d0\[3\]
+.*:    fc2f6857        vfmal.f16       q3, d15, d7
+.*:    fe43e857        vfmal.f16       q15, d3, d7\[0\]
+.*:    fcaf6857        vfmsl.f16       q3, d15, d7
+.*:    fe53e87f        vfmsl.f16       q15, d3, d7\[3\]
+.*:    fc6fa850        vfmal.f16       q13, d15, d0
+.*:    fe4de850        vfmal.f16       q15, d13, d0\[0\]
+.*:    fcefa850        vfmsl.f16       q13, d15, d0
+.*:    fe5de878        vfmsl.f16       q15, d13, d0\[3\]
+.*:    fc6fa857        vfmal.f16       q13, d15, d7
+.*:    fe4de857        vfmal.f16       q15, d13, d7\[0\]
+.*:    fcefa857        vfmsl.f16       q13, d15, d7
+.*:    fe5de87f        vfmsl.f16       q15, d13, d7\[3\]
diff --git a/gas/testsuite/gas/arm/armv8_4-a-fp16.d b/gas/testsuite/gas/arm/armv8_4-a-fp16.d
new file mode 100644 (file)
index 0000000..efc8dcf
--- /dev/null
@@ -0,0 +1,249 @@
+#as: -march=armv8.4-a+fp16 -mfpu=neon-fp-armv8
+#source: armv8_2-a-fp16.s
+#objdump: -d
+
+.*: +file format .*arm.*
+
+Disassembly of section .text:
+
+.* <.*>:
+.*:    fc210810        vfmal.f16       d0, s2, s0
+.*:    fe002810        vfmal.f16       d2, s0, s0\[0\]
+.*:    fca10810        vfmsl.f16       d0, s2, s0
+.*:    fe102818        vfmsl.f16       d2, s0, s0\[1\]
+.*:    fc210814        vfmal.f16       d0, s2, s8
+.*:    fe002814        vfmal.f16       d2, s0, s8\[0\]
+.*:    fca10814        vfmsl.f16       d0, s2, s8
+.*:    fe10281c        vfmsl.f16       d2, s0, s8\[1\]
+.*:    fc210837        vfmal.f16       d0, s2, s15
+.*:    fe002837        vfmal.f16       d2, s0, s15\[0\]
+.*:    fca10837        vfmsl.f16       d0, s2, s15
+.*:    fe10283f        vfmsl.f16       d2, s0, s15\[1\]
+.*:    fc270890        vfmal.f16       d0, s15, s0
+.*:    fe00f810        vfmal.f16       d15, s0, s0\[0\]
+.*:    fca70890        vfmsl.f16       d0, s15, s0
+.*:    fe10f818        vfmsl.f16       d15, s0, s0\[1\]
+.*:    fc270894        vfmal.f16       d0, s15, s8
+.*:    fe00f814        vfmal.f16       d15, s0, s8\[0\]
+.*:    fca70894        vfmsl.f16       d0, s15, s8
+.*:    fe10f81c        vfmsl.f16       d15, s0, s8\[1\]
+.*:    fc2708b7        vfmal.f16       d0, s15, s15
+.*:    fe00f837        vfmal.f16       d15, s0, s15\[0\]
+.*:    fca708b7        vfmsl.f16       d0, s15, s15
+.*:    fe10f83f        vfmsl.f16       d15, s0, s15\[1\]
+.*:    fc2f0810        vfmal.f16       d0, s30, s0
+.*:    fe40e810        vfmal.f16       d30, s0, s0\[0\]
+.*:    fcaf0810        vfmsl.f16       d0, s30, s0
+.*:    fe50e818        vfmsl.f16       d30, s0, s0\[1\]
+.*:    fc2f0814        vfmal.f16       d0, s30, s8
+.*:    fe40e814        vfmal.f16       d30, s0, s8\[0\]
+.*:    fcaf0814        vfmsl.f16       d0, s30, s8
+.*:    fe50e81c        vfmsl.f16       d30, s0, s8\[1\]
+.*:    fc2f0837        vfmal.f16       d0, s30, s15
+.*:    fe40e837        vfmal.f16       d30, s0, s15\[0\]
+.*:    fcaf0837        vfmsl.f16       d0, s30, s15
+.*:    fe50e83f        vfmsl.f16       d30, s0, s15\[1\]
+.*:    fc217810        vfmal.f16       d7, s2, s0
+.*:    fe032890        vfmal.f16       d2, s7, s0\[0\]
+.*:    fca17810        vfmsl.f16       d7, s2, s0
+.*:    fe132898        vfmsl.f16       d2, s7, s0\[1\]
+.*:    fc217814        vfmal.f16       d7, s2, s8
+.*:    fe032894        vfmal.f16       d2, s7, s8\[0\]
+.*:    fca17814        vfmsl.f16       d7, s2, s8
+.*:    fe13289c        vfmsl.f16       d2, s7, s8\[1\]
+.*:    fc217837        vfmal.f16       d7, s2, s15
+.*:    fe0328b7        vfmal.f16       d2, s7, s15\[0\]
+.*:    fca17837        vfmsl.f16       d7, s2, s15
+.*:    fe1328bf        vfmsl.f16       d2, s7, s15\[1\]
+.*:    fc277890        vfmal.f16       d7, s15, s0
+.*:    fe03f890        vfmal.f16       d15, s7, s0\[0\]
+.*:    fca77890        vfmsl.f16       d7, s15, s0
+.*:    fe13f898        vfmsl.f16       d15, s7, s0\[1\]
+.*:    fc277894        vfmal.f16       d7, s15, s8
+.*:    fe03f894        vfmal.f16       d15, s7, s8\[0\]
+.*:    fca77894        vfmsl.f16       d7, s15, s8
+.*:    fe13f89c        vfmsl.f16       d15, s7, s8\[1\]
+.*:    fc2778b7        vfmal.f16       d7, s15, s15
+.*:    fe03f8b7        vfmal.f16       d15, s7, s15\[0\]
+.*:    fca778b7        vfmsl.f16       d7, s15, s15
+.*:    fe13f8bf        vfmsl.f16       d15, s7, s15\[1\]
+.*:    fc2f7810        vfmal.f16       d7, s30, s0
+.*:    fe43e890        vfmal.f16       d30, s7, s0\[0\]
+.*:    fcaf7810        vfmsl.f16       d7, s30, s0
+.*:    fe53e898        vfmsl.f16       d30, s7, s0\[1\]
+.*:    fc2f7814        vfmal.f16       d7, s30, s8
+.*:    fe43e894        vfmal.f16       d30, s7, s8\[0\]
+.*:    fcaf7814        vfmsl.f16       d7, s30, s8
+.*:    fe53e89c        vfmsl.f16       d30, s7, s8\[1\]
+.*:    fc2f7837        vfmal.f16       d7, s30, s15
+.*:    fe43e8b7        vfmal.f16       d30, s7, s15\[0\]
+.*:    fcaf7837        vfmsl.f16       d7, s30, s15
+.*:    fe53e8bf        vfmsl.f16       d30, s7, s15\[1\]
+.*:    fc610810        vfmal.f16       d16, s2, s0
+.*:    fe082810        vfmal.f16       d2, s16, s0\[0\]
+.*:    fce10810        vfmsl.f16       d16, s2, s0
+.*:    fe182818        vfmsl.f16       d2, s16, s0\[1\]
+.*:    fc610814        vfmal.f16       d16, s2, s8
+.*:    fe082814        vfmal.f16       d2, s16, s8\[0\]
+.*:    fce10814        vfmsl.f16       d16, s2, s8
+.*:    fe18281c        vfmsl.f16       d2, s16, s8\[1\]
+.*:    fc610837        vfmal.f16       d16, s2, s15
+.*:    fe082837        vfmal.f16       d2, s16, s15\[0\]
+.*:    fce10837        vfmsl.f16       d16, s2, s15
+.*:    fe18283f        vfmsl.f16       d2, s16, s15\[1\]
+.*:    fc670890        vfmal.f16       d16, s15, s0
+.*:    fe08f810        vfmal.f16       d15, s16, s0\[0\]
+.*:    fce70890        vfmsl.f16       d16, s15, s0
+.*:    fe18f818        vfmsl.f16       d15, s16, s0\[1\]
+.*:    fc670894        vfmal.f16       d16, s15, s8
+.*:    fe08f814        vfmal.f16       d15, s16, s8\[0\]
+.*:    fce70894        vfmsl.f16       d16, s15, s8
+.*:    fe18f81c        vfmsl.f16       d15, s16, s8\[1\]
+.*:    fc6708b7        vfmal.f16       d16, s15, s15
+.*:    fe08f837        vfmal.f16       d15, s16, s15\[0\]
+.*:    fce708b7        vfmsl.f16       d16, s15, s15
+.*:    fe18f83f        vfmsl.f16       d15, s16, s15\[1\]
+.*:    fc6f0810        vfmal.f16       d16, s30, s0
+.*:    fe48e810        vfmal.f16       d30, s16, s0\[0\]
+.*:    fcef0810        vfmsl.f16       d16, s30, s0
+.*:    fe58e818        vfmsl.f16       d30, s16, s0\[1\]
+.*:    fc6f0814        vfmal.f16       d16, s30, s8
+.*:    fe48e814        vfmal.f16       d30, s16, s8\[0\]
+.*:    fcef0814        vfmsl.f16       d16, s30, s8
+.*:    fe58e81c        vfmsl.f16       d30, s16, s8\[1\]
+.*:    fc6f0837        vfmal.f16       d16, s30, s15
+.*:    fe48e837        vfmal.f16       d30, s16, s15\[0\]
+.*:    fcef0837        vfmsl.f16       d16, s30, s15
+.*:    fe58e83f        vfmsl.f16       d30, s16, s15\[1\]
+.*:    fc61f810        vfmal.f16       d31, s2, s0
+.*:    fe0f2890        vfmal.f16       d2, s31, s0\[0\]
+.*:    fce1f810        vfmsl.f16       d31, s2, s0
+.*:    fe1f2898        vfmsl.f16       d2, s31, s0\[1\]
+.*:    fc61f814        vfmal.f16       d31, s2, s8
+.*:    fe0f2894        vfmal.f16       d2, s31, s8\[0\]
+.*:    fce1f814        vfmsl.f16       d31, s2, s8
+.*:    fe1f289c        vfmsl.f16       d2, s31, s8\[1\]
+.*:    fc61f837        vfmal.f16       d31, s2, s15
+.*:    fe0f28b7        vfmal.f16       d2, s31, s15\[0\]
+.*:    fce1f837        vfmsl.f16       d31, s2, s15
+.*:    fe1f28bf        vfmsl.f16       d2, s31, s15\[1\]
+.*:    fc67f890        vfmal.f16       d31, s15, s0
+.*:    fe0ff890        vfmal.f16       d15, s31, s0\[0\]
+.*:    fce7f890        vfmsl.f16       d31, s15, s0
+.*:    fe1ff898        vfmsl.f16       d15, s31, s0\[1\]
+.*:    fc67f894        vfmal.f16       d31, s15, s8
+.*:    fe0ff894        vfmal.f16       d15, s31, s8\[0\]
+.*:    fce7f894        vfmsl.f16       d31, s15, s8
+.*:    fe1ff89c        vfmsl.f16       d15, s31, s8\[1\]
+.*:    fc67f8b7        vfmal.f16       d31, s15, s15
+.*:    fe0ff8b7        vfmal.f16       d15, s31, s15\[0\]
+.*:    fce7f8b7        vfmsl.f16       d31, s15, s15
+.*:    fe1ff8bf        vfmsl.f16       d15, s31, s15\[1\]
+.*:    fc6ff810        vfmal.f16       d31, s30, s0
+.*:    fe4fe890        vfmal.f16       d30, s31, s0\[0\]
+.*:    fceff810        vfmsl.f16       d31, s30, s0
+.*:    fe5fe898        vfmsl.f16       d30, s31, s0\[1\]
+.*:    fc6ff814        vfmal.f16       d31, s30, s8
+.*:    fe4fe894        vfmal.f16       d30, s31, s8\[0\]
+.*:    fceff814        vfmsl.f16       d31, s30, s8
+.*:    fe5fe89c        vfmsl.f16       d30, s31, s8\[1\]
+.*:    fc6ff837        vfmal.f16       d31, s30, s15
+.*:    fe4fe8b7        vfmal.f16       d30, s31, s15\[0\]
+.*:    fceff837        vfmsl.f16       d31, s30, s15
+.*:    fe5fe8bf        vfmsl.f16       d30, s31, s15\[1\]
+.*:    fc204850        vfmal.f16       q2, d0, d0
+.*:    fe020850        vfmal.f16       q0, d2, d0\[0\]
+.*:    fca04850        vfmsl.f16       q2, d0, d0
+.*:    fe120878        vfmsl.f16       q0, d2, d0\[3\]
+.*:    fc204857        vfmal.f16       q2, d0, d7
+.*:    fe020857        vfmal.f16       q0, d2, d7\[0\]
+.*:    fca04857        vfmsl.f16       q2, d0, d7
+.*:    fe12087f        vfmsl.f16       q0, d2, d7\[3\]
+.*:    fc206850        vfmal.f16       q3, d0, d0
+.*:    fe030850        vfmal.f16       q0, d3, d0\[0\]
+.*:    fca06850        vfmsl.f16       q3, d0, d0
+.*:    fe130878        vfmsl.f16       q0, d3, d0\[3\]
+.*:    fc206857        vfmal.f16       q3, d0, d7
+.*:    fe030857        vfmal.f16       q0, d3, d7\[0\]
+.*:    fca06857        vfmsl.f16       q3, d0, d7
+.*:    fe13087f        vfmsl.f16       q0, d3, d7\[3\]
+.*:    fc60a850        vfmal.f16       q13, d0, d0
+.*:    fe0d0850        vfmal.f16       q0, d13, d0\[0\]
+.*:    fce0a850        vfmsl.f16       q13, d0, d0
+.*:    fe1d0878        vfmsl.f16       q0, d13, d0\[3\]
+.*:    fc60a857        vfmal.f16       q13, d0, d7
+.*:    fe0d0857        vfmal.f16       q0, d13, d7\[0\]
+.*:    fce0a857        vfmsl.f16       q13, d0, d7
+.*:    fe1d087f        vfmsl.f16       q0, d13, d7\[3\]
+.*:    fc214850        vfmal.f16       q2, d1, d0
+.*:    fe022850        vfmal.f16       q1, d2, d0\[0\]
+.*:    fca14850        vfmsl.f16       q2, d1, d0
+.*:    fe122878        vfmsl.f16       q1, d2, d0\[3\]
+.*:    fc214857        vfmal.f16       q2, d1, d7
+.*:    fe022857        vfmal.f16       q1, d2, d7\[0\]
+.*:    fca14857        vfmsl.f16       q2, d1, d7
+.*:    fe12287f        vfmsl.f16       q1, d2, d7\[3\]
+.*:    fc216850        vfmal.f16       q3, d1, d0
+.*:    fe032850        vfmal.f16       q1, d3, d0\[0\]
+.*:    fca16850        vfmsl.f16       q3, d1, d0
+.*:    fe132878        vfmsl.f16       q1, d3, d0\[3\]
+.*:    fc216857        vfmal.f16       q3, d1, d7
+.*:    fe032857        vfmal.f16       q1, d3, d7\[0\]
+.*:    fca16857        vfmsl.f16       q3, d1, d7
+.*:    fe13287f        vfmsl.f16       q1, d3, d7\[3\]
+.*:    fc61a850        vfmal.f16       q13, d1, d0
+.*:    fe0d2850        vfmal.f16       q1, d13, d0\[0\]
+.*:    fce1a850        vfmsl.f16       q13, d1, d0
+.*:    fe1d2878        vfmsl.f16       q1, d13, d0\[3\]
+.*:    fc61a857        vfmal.f16       q13, d1, d7
+.*:    fe0d2857        vfmal.f16       q1, d13, d7\[0\]
+.*:    fce1a857        vfmsl.f16       q13, d1, d7
+.*:    fe1d287f        vfmsl.f16       q1, d13, d7\[3\]
+.*:    fc264850        vfmal.f16       q2, d6, d0
+.*:    fe02c850        vfmal.f16       q6, d2, d0\[0\]
+.*:    fca64850        vfmsl.f16       q2, d6, d0
+.*:    fe12c878        vfmsl.f16       q6, d2, d0\[3\]
+.*:    fc264857        vfmal.f16       q2, d6, d7
+.*:    fe02c857        vfmal.f16       q6, d2, d7\[0\]
+.*:    fca64857        vfmsl.f16       q2, d6, d7
+.*:    fe12c87f        vfmsl.f16       q6, d2, d7\[3\]
+.*:    fc266850        vfmal.f16       q3, d6, d0
+.*:    fe03c850        vfmal.f16       q6, d3, d0\[0\]
+.*:    fca66850        vfmsl.f16       q3, d6, d0
+.*:    fe13c878        vfmsl.f16       q6, d3, d0\[3\]
+.*:    fc266857        vfmal.f16       q3, d6, d7
+.*:    fe03c857        vfmal.f16       q6, d3, d7\[0\]
+.*:    fca66857        vfmsl.f16       q3, d6, d7
+.*:    fe13c87f        vfmsl.f16       q6, d3, d7\[3\]
+.*:    fc66a850        vfmal.f16       q13, d6, d0
+.*:    fe0dc850        vfmal.f16       q6, d13, d0\[0\]
+.*:    fce6a850        vfmsl.f16       q13, d6, d0
+.*:    fe1dc878        vfmsl.f16       q6, d13, d0\[3\]
+.*:    fc66a857        vfmal.f16       q13, d6, d7
+.*:    fe0dc857        vfmal.f16       q6, d13, d7\[0\]
+.*:    fce6a857        vfmsl.f16       q13, d6, d7
+.*:    fe1dc87f        vfmsl.f16       q6, d13, d7\[3\]
+.*:    fc2f4850        vfmal.f16       q2, d15, d0
+.*:    fe42e850        vfmal.f16       q15, d2, d0\[0\]
+.*:    fcaf4850        vfmsl.f16       q2, d15, d0
+.*:    fe52e878        vfmsl.f16       q15, d2, d0\[3\]
+.*:    fc2f4857        vfmal.f16       q2, d15, d7
+.*:    fe42e857        vfmal.f16       q15, d2, d7\[0\]
+.*:    fcaf4857        vfmsl.f16       q2, d15, d7
+.*:    fe52e87f        vfmsl.f16       q15, d2, d7\[3\]
+.*:    fc2f6850        vfmal.f16       q3, d15, d0
+.*:    fe43e850        vfmal.f16       q15, d3, d0\[0\]
+.*:    fcaf6850        vfmsl.f16       q3, d15, d0
+.*:    fe53e878        vfmsl.f16       q15, d3, d0\[3\]
+.*:    fc2f6857        vfmal.f16       q3, d15, d7
+.*:    fe43e857        vfmal.f16       q15, d3, d7\[0\]
+.*:    fcaf6857        vfmsl.f16       q3, d15, d7
+.*:    fe53e87f        vfmsl.f16       q15, d3, d7\[3\]
+.*:    fc6fa850        vfmal.f16       q13, d15, d0
+.*:    fe4de850        vfmal.f16       q15, d13, d0\[0\]
+.*:    fcefa850        vfmsl.f16       q13, d15, d0
+.*:    fe5de878        vfmsl.f16       q15, d13, d0\[3\]
+.*:    fc6fa857        vfmal.f16       q13, d15, d7
+.*:    fe4de857        vfmal.f16       q15, d13, d7\[0\]
+.*:    fcefa857        vfmsl.f16       q13, d15, d7
+.*:    fe5de87f        vfmsl.f16       q15, d13, d7\[3\]
diff --git a/gas/testsuite/gas/arm/dotprod-mandatory.d b/gas/testsuite/gas/arm/dotprod-mandatory.d
new file mode 100644 (file)
index 0000000..9f85e0e
--- /dev/null
@@ -0,0 +1,297 @@
+#as: -march=armv8.4-a -mfpu=neon-fp-armv8
+#source: dotprod.s
+#objdump: -d
+
+.*: +file format .*arm.*
+
+Disassembly of section .text:
+
+.* <.*>:
+.*:    fc220d10        vudot.u8        d0, d2, d0
+.*:    fe220d10        vudot.u8        d0, d2, d0\[0\]
+.*:    fc220d18        vudot.u8        d0, d2, d8
+.*:    fe220d18        vudot.u8        d0, d2, d8\[0\]
+.*:    fc220d1f        vudot.u8        d0, d2, d15
+.*:    fe220d1f        vudot.u8        d0, d2, d15\[0\]
+.*:    fc2f0d10        vudot.u8        d0, d15, d0
+.*:    fe2f0d10        vudot.u8        d0, d15, d0\[0\]
+.*:    fc2f0d18        vudot.u8        d0, d15, d8
+.*:    fe2f0d18        vudot.u8        d0, d15, d8\[0\]
+.*:    fc2f0d1f        vudot.u8        d0, d15, d15
+.*:    fe2f0d1f        vudot.u8        d0, d15, d15\[0\]
+.*:    fc2e0d90        vudot.u8        d0, d30, d0
+.*:    fe2e0d90        vudot.u8        d0, d30, d0\[0\]
+.*:    fc2e0d98        vudot.u8        d0, d30, d8
+.*:    fe2e0d98        vudot.u8        d0, d30, d8\[0\]
+.*:    fc2e0d9f        vudot.u8        d0, d30, d15
+.*:    fe2e0d9f        vudot.u8        d0, d30, d15\[0\]
+.*:    fc227d10        vudot.u8        d7, d2, d0
+.*:    fe227d10        vudot.u8        d7, d2, d0\[0\]
+.*:    fc227d18        vudot.u8        d7, d2, d8
+.*:    fe227d18        vudot.u8        d7, d2, d8\[0\]
+.*:    fc227d1f        vudot.u8        d7, d2, d15
+.*:    fe227d1f        vudot.u8        d7, d2, d15\[0\]
+.*:    fc2f7d10        vudot.u8        d7, d15, d0
+.*:    fe2f7d10        vudot.u8        d7, d15, d0\[0\]
+.*:    fc2f7d18        vudot.u8        d7, d15, d8
+.*:    fe2f7d18        vudot.u8        d7, d15, d8\[0\]
+.*:    fc2f7d1f        vudot.u8        d7, d15, d15
+.*:    fe2f7d1f        vudot.u8        d7, d15, d15\[0\]
+.*:    fc2e7d90        vudot.u8        d7, d30, d0
+.*:    fe2e7d90        vudot.u8        d7, d30, d0\[0\]
+.*:    fc2e7d98        vudot.u8        d7, d30, d8
+.*:    fe2e7d98        vudot.u8        d7, d30, d8\[0\]
+.*:    fc2e7d9f        vudot.u8        d7, d30, d15
+.*:    fe2e7d9f        vudot.u8        d7, d30, d15\[0\]
+.*:    fc620d10        vudot.u8        d16, d2, d0
+.*:    fe620d10        vudot.u8        d16, d2, d0\[0\]
+.*:    fc620d18        vudot.u8        d16, d2, d8
+.*:    fe620d18        vudot.u8        d16, d2, d8\[0\]
+.*:    fc620d1f        vudot.u8        d16, d2, d15
+.*:    fe620d1f        vudot.u8        d16, d2, d15\[0\]
+.*:    fc6f0d10        vudot.u8        d16, d15, d0
+.*:    fe6f0d10        vudot.u8        d16, d15, d0\[0\]
+.*:    fc6f0d18        vudot.u8        d16, d15, d8
+.*:    fe6f0d18        vudot.u8        d16, d15, d8\[0\]
+.*:    fc6f0d1f        vudot.u8        d16, d15, d15
+.*:    fe6f0d1f        vudot.u8        d16, d15, d15\[0\]
+.*:    fc6e0d90        vudot.u8        d16, d30, d0
+.*:    fe6e0d90        vudot.u8        d16, d30, d0\[0\]
+.*:    fc6e0d98        vudot.u8        d16, d30, d8
+.*:    fe6e0d98        vudot.u8        d16, d30, d8\[0\]
+.*:    fc6e0d9f        vudot.u8        d16, d30, d15
+.*:    fe6e0d9f        vudot.u8        d16, d30, d15\[0\]
+.*:    fc62fd10        vudot.u8        d31, d2, d0
+.*:    fe62fd10        vudot.u8        d31, d2, d0\[0\]
+.*:    fc62fd18        vudot.u8        d31, d2, d8
+.*:    fe62fd18        vudot.u8        d31, d2, d8\[0\]
+.*:    fc62fd1f        vudot.u8        d31, d2, d15
+.*:    fe62fd1f        vudot.u8        d31, d2, d15\[0\]
+.*:    fc6ffd10        vudot.u8        d31, d15, d0
+.*:    fe6ffd10        vudot.u8        d31, d15, d0\[0\]
+.*:    fc6ffd18        vudot.u8        d31, d15, d8
+.*:    fe6ffd18        vudot.u8        d31, d15, d8\[0\]
+.*:    fc6ffd1f        vudot.u8        d31, d15, d15
+.*:    fe6ffd1f        vudot.u8        d31, d15, d15\[0\]
+.*:    fc6efd90        vudot.u8        d31, d30, d0
+.*:    fe6efd90        vudot.u8        d31, d30, d0\[0\]
+.*:    fc6efd98        vudot.u8        d31, d30, d8
+.*:    fe6efd98        vudot.u8        d31, d30, d8\[0\]
+.*:    fc6efd9f        vudot.u8        d31, d30, d15
+.*:    fe6efd9f        vudot.u8        d31, d30, d15\[0\]
+.*:    fc220d00        vsdot.s8        d0, d2, d0
+.*:    fe220d00        vsdot.s8        d0, d2, d0\[0\]
+.*:    fc220d08        vsdot.s8        d0, d2, d8
+.*:    fe220d08        vsdot.s8        d0, d2, d8\[0\]
+.*:    fc220d0f        vsdot.s8        d0, d2, d15
+.*:    fe220d0f        vsdot.s8        d0, d2, d15\[0\]
+.*:    fc2f0d00        vsdot.s8        d0, d15, d0
+.*:    fe2f0d00        vsdot.s8        d0, d15, d0\[0\]
+.*:    fc2f0d08        vsdot.s8        d0, d15, d8
+.*:    fe2f0d08        vsdot.s8        d0, d15, d8\[0\]
+.*:    fc2f0d0f        vsdot.s8        d0, d15, d15
+.*:    fe2f0d0f        vsdot.s8        d0, d15, d15\[0\]
+.*:    fc2e0d80        vsdot.s8        d0, d30, d0
+.*:    fe2e0d80        vsdot.s8        d0, d30, d0\[0\]
+.*:    fc2e0d88        vsdot.s8        d0, d30, d8
+.*:    fe2e0d88        vsdot.s8        d0, d30, d8\[0\]
+.*:    fc2e0d8f        vsdot.s8        d0, d30, d15
+.*:    fe2e0d8f        vsdot.s8        d0, d30, d15\[0\]
+.*:    fc227d00        vsdot.s8        d7, d2, d0
+.*:    fe227d00        vsdot.s8        d7, d2, d0\[0\]
+.*:    fc227d08        vsdot.s8        d7, d2, d8
+.*:    fe227d08        vsdot.s8        d7, d2, d8\[0\]
+.*:    fc227d0f        vsdot.s8        d7, d2, d15
+.*:    fe227d0f        vsdot.s8        d7, d2, d15\[0\]
+.*:    fc2f7d00        vsdot.s8        d7, d15, d0
+.*:    fe2f7d00        vsdot.s8        d7, d15, d0\[0\]
+.*:    fc2f7d08        vsdot.s8        d7, d15, d8
+.*:    fe2f7d08        vsdot.s8        d7, d15, d8\[0\]
+.*:    fc2f7d0f        vsdot.s8        d7, d15, d15
+.*:    fe2f7d0f        vsdot.s8        d7, d15, d15\[0\]
+.*:    fc2e7d80        vsdot.s8        d7, d30, d0
+.*:    fe2e7d80        vsdot.s8        d7, d30, d0\[0\]
+.*:    fc2e7d88        vsdot.s8        d7, d30, d8
+.*:    fe2e7d88        vsdot.s8        d7, d30, d8\[0\]
+.*:    fc2e7d8f        vsdot.s8        d7, d30, d15
+.*:    fe2e7d8f        vsdot.s8        d7, d30, d15\[0\]
+.*:    fc620d00        vsdot.s8        d16, d2, d0
+.*:    fe620d00        vsdot.s8        d16, d2, d0\[0\]
+.*:    fc620d08        vsdot.s8        d16, d2, d8
+.*:    fe620d08        vsdot.s8        d16, d2, d8\[0\]
+.*:    fc620d0f        vsdot.s8        d16, d2, d15
+.*:    fe620d0f        vsdot.s8        d16, d2, d15\[0\]
+.*:    fc6f0d00        vsdot.s8        d16, d15, d0
+.*:    fe6f0d00        vsdot.s8        d16, d15, d0\[0\]
+.*:    fc6f0d08        vsdot.s8        d16, d15, d8
+.*:    fe6f0d08        vsdot.s8        d16, d15, d8\[0\]
+.*:    fc6f0d0f        vsdot.s8        d16, d15, d15
+.*:    fe6f0d0f        vsdot.s8        d16, d15, d15\[0\]
+.*:    fc6e0d80        vsdot.s8        d16, d30, d0
+.*:    fe6e0d80        vsdot.s8        d16, d30, d0\[0\]
+.*:    fc6e0d88        vsdot.s8        d16, d30, d8
+.*:    fe6e0d88        vsdot.s8        d16, d30, d8\[0\]
+.*:    fc6e0d8f        vsdot.s8        d16, d30, d15
+.*:    fe6e0d8f        vsdot.s8        d16, d30, d15\[0\]
+.*:    fc62fd00        vsdot.s8        d31, d2, d0
+.*:    fe62fd00        vsdot.s8        d31, d2, d0\[0\]
+.*:    fc62fd08        vsdot.s8        d31, d2, d8
+.*:    fe62fd08        vsdot.s8        d31, d2, d8\[0\]
+.*:    fc62fd0f        vsdot.s8        d31, d2, d15
+.*:    fe62fd0f        vsdot.s8        d31, d2, d15\[0\]
+.*:    fc6ffd00        vsdot.s8        d31, d15, d0
+.*:    fe6ffd00        vsdot.s8        d31, d15, d0\[0\]
+.*:    fc6ffd08        vsdot.s8        d31, d15, d8
+.*:    fe6ffd08        vsdot.s8        d31, d15, d8\[0\]
+.*:    fc6ffd0f        vsdot.s8        d31, d15, d15
+.*:    fe6ffd0f        vsdot.s8        d31, d15, d15\[0\]
+.*:    fc6efd80        vsdot.s8        d31, d30, d0
+.*:    fe6efd80        vsdot.s8        d31, d30, d0\[0\]
+.*:    fc6efd88        vsdot.s8        d31, d30, d8
+.*:    fe6efd88        vsdot.s8        d31, d30, d8\[0\]
+.*:    fc6efd8f        vsdot.s8        d31, d30, d15
+.*:    fe6efd8f        vsdot.s8        d31, d30, d15\[0\]
+.*:    fc240d50        vudot.u8        q0, q2, q0
+.*:    fe240d70        vudot.u8        q0, q2, d0\[1\]
+.*:    fc240d5e        vudot.u8        q0, q2, q7
+.*:    fe240d77        vudot.u8        q0, q2, d7\[1\]
+.*:    fc240d7e        vudot.u8        q0, q2, q15
+.*:    fe240d7f        vudot.u8        q0, q2, d15\[1\]
+.*:    fc260d50        vudot.u8        q0, q3, q0
+.*:    fe260d70        vudot.u8        q0, q3, d0\[1\]
+.*:    fc260d5e        vudot.u8        q0, q3, q7
+.*:    fe260d77        vudot.u8        q0, q3, d7\[1\]
+.*:    fc260d7e        vudot.u8        q0, q3, q15
+.*:    fe260d7f        vudot.u8        q0, q3, d15\[1\]
+.*:    fc2c0dd0        vudot.u8        q0, q14, q0
+.*:    fe2c0df0        vudot.u8        q0, q14, d0\[1\]
+.*:    fc2c0dde        vudot.u8        q0, q14, q7
+.*:    fe2c0df7        vudot.u8        q0, q14, d7\[1\]
+.*:    fc2c0dfe        vudot.u8        q0, q14, q15
+.*:    fe2c0dff        vudot.u8        q0, q14, d15\[1\]
+.*:    fc242d50        vudot.u8        q1, q2, q0
+.*:    fe242d70        vudot.u8        q1, q2, d0\[1\]
+.*:    fc242d5e        vudot.u8        q1, q2, q7
+.*:    fe242d77        vudot.u8        q1, q2, d7\[1\]
+.*:    fc242d7e        vudot.u8        q1, q2, q15
+.*:    fe242d7f        vudot.u8        q1, q2, d15\[1\]
+.*:    fc262d50        vudot.u8        q1, q3, q0
+.*:    fe262d70        vudot.u8        q1, q3, d0\[1\]
+.*:    fc262d5e        vudot.u8        q1, q3, q7
+.*:    fe262d77        vudot.u8        q1, q3, d7\[1\]
+.*:    fc262d7e        vudot.u8        q1, q3, q15
+.*:    fe262d7f        vudot.u8        q1, q3, d15\[1\]
+.*:    fc2c2dd0        vudot.u8        q1, q14, q0
+.*:    fe2c2df0        vudot.u8        q1, q14, d0\[1\]
+.*:    fc2c2dde        vudot.u8        q1, q14, q7
+.*:    fe2c2df7        vudot.u8        q1, q14, d7\[1\]
+.*:    fc2c2dfe        vudot.u8        q1, q14, q15
+.*:    fe2c2dff        vudot.u8        q1, q14, d15\[1\]
+.*:    fc24cd50        vudot.u8        q6, q2, q0
+.*:    fe24cd70        vudot.u8        q6, q2, d0\[1\]
+.*:    fc24cd5e        vudot.u8        q6, q2, q7
+.*:    fe24cd77        vudot.u8        q6, q2, d7\[1\]
+.*:    fc24cd7e        vudot.u8        q6, q2, q15
+.*:    fe24cd7f        vudot.u8        q6, q2, d15\[1\]
+.*:    fc26cd50        vudot.u8        q6, q3, q0
+.*:    fe26cd70        vudot.u8        q6, q3, d0\[1\]
+.*:    fc26cd5e        vudot.u8        q6, q3, q7
+.*:    fe26cd77        vudot.u8        q6, q3, d7\[1\]
+.*:    fc26cd7e        vudot.u8        q6, q3, q15
+.*:    fe26cd7f        vudot.u8        q6, q3, d15\[1\]
+.*:    fc2ccdd0        vudot.u8        q6, q14, q0
+.*:    fe2ccdf0        vudot.u8        q6, q14, d0\[1\]
+.*:    fc2ccdde        vudot.u8        q6, q14, q7
+.*:    fe2ccdf7        vudot.u8        q6, q14, d7\[1\]
+.*:    fc2ccdfe        vudot.u8        q6, q14, q15
+.*:    fe2ccdff        vudot.u8        q6, q14, d15\[1\]
+.*:    fc64ad50        vudot.u8        q13, q2, q0
+.*:    fe64ad70        vudot.u8        q13, q2, d0\[1\]
+.*:    fc64ad5e        vudot.u8        q13, q2, q7
+.*:    fe64ad77        vudot.u8        q13, q2, d7\[1\]
+.*:    fc64ad7e        vudot.u8        q13, q2, q15
+.*:    fe64ad7f        vudot.u8        q13, q2, d15\[1\]
+.*:    fc66ad50        vudot.u8        q13, q3, q0
+.*:    fe66ad70        vudot.u8        q13, q3, d0\[1\]
+.*:    fc66ad5e        vudot.u8        q13, q3, q7
+.*:    fe66ad77        vudot.u8        q13, q3, d7\[1\]
+.*:    fc66ad7e        vudot.u8        q13, q3, q15
+.*:    fe66ad7f        vudot.u8        q13, q3, d15\[1\]
+.*:    fc6cadd0        vudot.u8        q13, q14, q0
+.*:    fe6cadf0        vudot.u8        q13, q14, d0\[1\]
+.*:    fc6cadde        vudot.u8        q13, q14, q7
+.*:    fe6cadf7        vudot.u8        q13, q14, d7\[1\]
+.*:    fc6cadfe        vudot.u8        q13, q14, q15
+.*:    fe6cadff        vudot.u8        q13, q14, d15\[1\]
+.*:    fc240d40        vsdot.s8        q0, q2, q0
+.*:    fe240d60        vsdot.s8        q0, q2, d0\[1\]
+.*:    fc240d4e        vsdot.s8        q0, q2, q7
+.*:    fe240d67        vsdot.s8        q0, q2, d7\[1\]
+.*:    fc240d6e        vsdot.s8        q0, q2, q15
+.*:    fe240d6f        vsdot.s8        q0, q2, d15\[1\]
+.*:    fc260d40        vsdot.s8        q0, q3, q0
+.*:    fe260d60        vsdot.s8        q0, q3, d0\[1\]
+.*:    fc260d4e        vsdot.s8        q0, q3, q7
+.*:    fe260d67        vsdot.s8        q0, q3, d7\[1\]
+.*:    fc260d6e        vsdot.s8        q0, q3, q15
+.*:    fe260d6f        vsdot.s8        q0, q3, d15\[1\]
+.*:    fc2c0dc0        vsdot.s8        q0, q14, q0
+.*:    fe2c0de0        vsdot.s8        q0, q14, d0\[1\]
+.*:    fc2c0dce        vsdot.s8        q0, q14, q7
+.*:    fe2c0de7        vsdot.s8        q0, q14, d7\[1\]
+.*:    fc2c0dee        vsdot.s8        q0, q14, q15
+.*:    fe2c0def        vsdot.s8        q0, q14, d15\[1\]
+.*:    fc242d40        vsdot.s8        q1, q2, q0
+.*:    fe242d60        vsdot.s8        q1, q2, d0\[1\]
+.*:    fc242d4e        vsdot.s8        q1, q2, q7
+.*:    fe242d67        vsdot.s8        q1, q2, d7\[1\]
+.*:    fc242d6e        vsdot.s8        q1, q2, q15
+.*:    fe242d6f        vsdot.s8        q1, q2, d15\[1\]
+.*:    fc262d40        vsdot.s8        q1, q3, q0
+.*:    fe262d60        vsdot.s8        q1, q3, d0\[1\]
+.*:    fc262d4e        vsdot.s8        q1, q3, q7
+.*:    fe262d67        vsdot.s8        q1, q3, d7\[1\]
+.*:    fc262d6e        vsdot.s8        q1, q3, q15
+.*:    fe262d6f        vsdot.s8        q1, q3, d15\[1\]
+.*:    fc2c2dc0        vsdot.s8        q1, q14, q0
+.*:    fe2c2de0        vsdot.s8        q1, q14, d0\[1\]
+.*:    fc2c2dce        vsdot.s8        q1, q14, q7
+.*:    fe2c2de7        vsdot.s8        q1, q14, d7\[1\]
+.*:    fc2c2dee        vsdot.s8        q1, q14, q15
+.*:    fe2c2def        vsdot.s8        q1, q14, d15\[1\]
+.*:    fc24cd40        vsdot.s8        q6, q2, q0
+.*:    fe24cd60        vsdot.s8        q6, q2, d0\[1\]
+.*:    fc24cd4e        vsdot.s8        q6, q2, q7
+.*:    fe24cd67        vsdot.s8        q6, q2, d7\[1\]
+.*:    fc24cd6e        vsdot.s8        q6, q2, q15
+.*:    fe24cd6f        vsdot.s8        q6, q2, d15\[1\]
+.*:    fc26cd40        vsdot.s8        q6, q3, q0
+.*:    fe26cd60        vsdot.s8        q6, q3, d0\[1\]
+.*:    fc26cd4e        vsdot.s8        q6, q3, q7
+.*:    fe26cd67        vsdot.s8        q6, q3, d7\[1\]
+.*:    fc26cd6e        vsdot.s8        q6, q3, q15
+.*:    fe26cd6f        vsdot.s8        q6, q3, d15\[1\]
+.*:    fc2ccdc0        vsdot.s8        q6, q14, q0
+.*:    fe2ccde0        vsdot.s8        q6, q14, d0\[1\]
+.*:    fc2ccdce        vsdot.s8        q6, q14, q7
+.*:    fe2ccde7        vsdot.s8        q6, q14, d7\[1\]
+.*:    fc2ccdee        vsdot.s8        q6, q14, q15
+.*:    fe2ccdef        vsdot.s8        q6, q14, d15\[1\]
+.*:    fc64ad40        vsdot.s8        q13, q2, q0
+.*:    fe64ad60        vsdot.s8        q13, q2, d0\[1\]
+.*:    fc64ad4e        vsdot.s8        q13, q2, q7
+.*:    fe64ad67        vsdot.s8        q13, q2, d7\[1\]
+.*:    fc64ad6e        vsdot.s8        q13, q2, q15
+.*:    fe64ad6f        vsdot.s8        q13, q2, d15\[1\]
+.*:    fc66ad40        vsdot.s8        q13, q3, q0
+.*:    fe66ad60        vsdot.s8        q13, q3, d0\[1\]
+.*:    fc66ad4e        vsdot.s8        q13, q3, q7
+.*:    fe66ad67        vsdot.s8        q13, q3, d7\[1\]
+.*:    fc66ad6e        vsdot.s8        q13, q3, q15
+.*:    fe66ad6f        vsdot.s8        q13, q3, d15\[1\]
+.*:    fc6cadc0        vsdot.s8        q13, q14, q0
+.*:    fe6cade0        vsdot.s8        q13, q14, d0\[1\]
+.*:    fc6cadce        vsdot.s8        q13, q14, q7
+.*:    fe6cade7        vsdot.s8        q13, q14, d7\[1\]
+.*:    fc6cadee        vsdot.s8        q13, q14, q15
+.*:    fe6cadef        vsdot.s8        q13, q14, d15\[1\]
index beb08bb660d82c3f2a9ab1d73df7478e0be4f4ff..36b1732e2134a2f39cd0ac392e3b7ba6d701a2c4 100644 (file)
@@ -1,3 +1,10 @@
+2017-11-08  Jiong Wang  <jiong.wang@arm.com>
+
+       * opcode/arm.h (ARM_AEXT2_V8_4A): Include Dot Product feature.
+       (ARM_EXT2_V8_4A): New macro.
+       (ARM_AEXT2_V8_4A): Likewise.
+       (ARM_ARCH_V8_4A): Likewise.
+
 2017-11-07  Palmer Dabbelt  <palmer@dabbelt.com>
 
        * opcode/riscv-opc.h (sptbr): Rename to satp.
index 3b51aba28802b62778bea58867595b090fdd8865..932bf630f07741ed02912a912472ccd01b51e7c6 100644 (file)
@@ -66,6 +66,7 @@
 #define ARM_EXT2_RAS    0x00000080     /* RAS extension.  */
 #define ARM_EXT2_V8_3A  0x00000100     /* ARM V8.3A.  */
 #define ARM_EXT2_V8A    0x00000200     /* ARMv8-A.  */
+#define ARM_EXT2_V8_4A  0x00000400     /* ARM V8.4A.  */
 
 /* Co-processor space extensions.  */
 #define ARM_CEXT_XSCALE   0x00000001   /* Allow MIA etc.          */
 #define ARM_AEXT2_V8_1A        (ARM_AEXT2_V8A | ARM_EXT2_PAN)
 #define ARM_AEXT2_V8_2A        (ARM_AEXT2_V8_1A | ARM_EXT2_V8_2A | ARM_EXT2_RAS)
 #define ARM_AEXT2_V8_3A        (ARM_AEXT2_V8_2A | ARM_EXT2_V8_3A)
+#define ARM_AEXT2_V8_4A        (ARM_AEXT2_V8_3A | ARM_EXT2_V8_4A)
 #define ARM_AEXT_V8M_BASE (ARM_AEXT_V6SM | ARM_EXT_DIV)
 #define ARM_AEXT_V8M_MAIN ARM_AEXT_V7M
 #define ARM_AEXT_V8M_MAIN_DSP ARM_AEXT_V7EM
 #define FPU_ARCH_CRYPTO_NEON_VFP_ARMV8 \
   ARM_FEATURE_COPROC (FPU_CRYPTO_ARMV8 | FPU_NEON_ARMV8 | FPU_VFP_ARMV8)
 #define FPU_ARCH_CRYPTO_NEON_VFP_ARMV8_DOTPROD \
-  ARM_FEATURE_COPROC (FPU_CRYPTO_ARMV8 | FPU_NEON_ARMV8 | FPU_VFP_ARMV8 \
-                     FPU_NEON_EXT_DOTPROD)
+  ARM_FEATURE_COPROC (FPU_CRYPTO_ARMV8 | FPU_NEON_ARMV8 | FPU_VFP_ARMV8 \
+                     FPU_NEON_EXT_DOTPROD)
 #define ARCH_CRC_ARMV8 ARM_FEATURE_COPROC (CRC_EXT_ARMV8)
 #define FPU_ARCH_NEON_VFP_ARMV8_1 \
   ARM_FEATURE_COPROC (FPU_NEON_ARMV8                            \
                                     CRC_EXT_ARMV8 | FPU_NEON_EXT_RDMA)
 #define ARM_ARCH_V8_3A ARM_FEATURE (ARM_AEXT_V8A, ARM_AEXT2_V8_3A,     \
                                     CRC_EXT_ARMV8 | FPU_NEON_EXT_RDMA)
+#define ARM_ARCH_V8_4A ARM_FEATURE (ARM_AEXT_V8A, ARM_AEXT2_V8_4A,     \
+                                    CRC_EXT_ARMV8 | FPU_NEON_EXT_RDMA \
+                                    | FPU_NEON_EXT_DOTPROD)
 #define ARM_ARCH_V8M_BASE ARM_FEATURE_CORE (ARM_AEXT_V8M_BASE, ARM_AEXT2_V8M)
 #define ARM_ARCH_V8M_MAIN ARM_FEATURE_CORE (ARM_AEXT_V8M_MAIN, \
                                            ARM_AEXT2_V8M_MAIN)
index 70f146f418ee966943bcca2d0b4117f851cd7148..7dcc29e0edfa5ebcb47bee38c6f948f48b011c90 100644 (file)
@@ -1,3 +1,9 @@
+2017-11-08  Jiong Wang  <jiong.wang@arm.com>
+           Tamar Christina <tamar.christina@arm.com>
+
+       * arm-dis.c (coprocessor_opcodes): New entries for ARMv8.2-A new
+       FP16 instructions, including vfmal.f16 and vfmsl.f16.
+
 2017-11-07  Andrew Burgess  <andrew.burgess@embecosm.com>
 
        * arc-nps400-tbl.h: Change incorrect use of NONE to MISC.
index 59a5978984cc1c1f4aba79993917befa5d141a28..d5a20cb888ca2beed575ee168fc554c8f4a36d68 100644 (file)
@@ -912,6 +912,24 @@ static const struct opcode32 coprocessor_opcodes[] =
   {ARM_FEATURE_COPROC (FPU_NEON_EXT_DOTPROD),
     0xfe000d00, 0xff000f00, "v%4?usdot.%4?us8\t%12-15,22V, %16-19,7V, %0-3D[%5?10]"},
 
+  /* ARMv8.2 FMAC Long instructions in the space of coprocessor 8.  */
+  {ARM_FEATURE_CORE_HIGH (ARM_EXT2_FP16_INST | ARM_EXT2_V8_2A),
+    0xfc200810, 0xffb00f50, "vfmal.f16\t%12-15,22D, s%7,16-19d, s%5,0-3d"},
+  {ARM_FEATURE_CORE_HIGH (ARM_EXT2_FP16_INST | ARM_EXT2_V8_2A),
+    0xfca00810, 0xffb00f50, "vfmsl.f16\t%12-15,22D, s%7,16-19d, s%5,0-3d"},
+  {ARM_FEATURE_CORE_HIGH (ARM_EXT2_FP16_INST | ARM_EXT2_V8_2A),
+    0xfc200850, 0xffb00f50, "vfmal.f16\t%12-15,22Q, d%16-19,7d, d%0-3,5d"},
+  {ARM_FEATURE_CORE_HIGH (ARM_EXT2_FP16_INST | ARM_EXT2_V8_2A),
+    0xfca00850, 0xffb00f50, "vfmsl.f16\t%12-15,22Q, d%16-19,7d, d%0-3,5d"},
+  {ARM_FEATURE_CORE_HIGH (ARM_EXT2_FP16_INST | ARM_EXT2_V8_2A),
+    0xfe000810, 0xffb00f50, "vfmal.f16\t%12-15,22D, s%7,16-19d, s%5,0-2d[%3d]"},
+  {ARM_FEATURE_CORE_HIGH (ARM_EXT2_FP16_INST | ARM_EXT2_V8_2A),
+    0xfe100810, 0xffb00f50, "vfmsl.f16\t%12-15,22D, s%7,16-19d, s%5,0-2d[%3d]"},
+  {ARM_FEATURE_CORE_HIGH (ARM_EXT2_FP16_INST | ARM_EXT2_V8_2A),
+    0xfe000850, 0xffb00f50, "vfmal.f16\t%12-15,22Q, d%16-19,7d, d%0-2d[%3,5d]"},
+  {ARM_FEATURE_CORE_HIGH (ARM_EXT2_FP16_INST | ARM_EXT2_V8_2A),
+    0xfe100850, 0xffb00f50, "vfmsl.f16\t%12-15,22Q, d%16-19,7d, d%0-2d[%3,5d]"},
+
   /* V5 coprocessor instructions.  */
   {ARM_FEATURE_CORE_LOW (ARM_EXT_V5),
     0xfc100000, 0xfe100000, "ldc2%22'l%c\t%8-11d, cr%12-15d, %A"},