+2020-03-13 Andre Vieira <andre.simoesdiasvieira@arm.com>
+
+ PR 25660
+ * config/tc-arm.c (operand_parse_code): Add OP_RNSDMQR and OP_oRNSDMQ.
+ (parse_operands): Handle new operand codes.
+ (do_neon_dyadic_long): Make shape check accept the scalar variants.
+ (asm_opcode_insns): Fix operand codes for vaddl and vsubl.
+ * testsuite/gas/arm/mve-vaddsub-it.s: New test.
+ * testsuite/gas/arm/mve-vaddsub-it.d: New test.
+ * testsuite/gas/arm/mve-vaddsub-it-bad.s: New test.
+ * testsuite/gas/arm/mve-vaddsub-it-bad.l: New test.
+ * testsuite/gas/arm/mve-vaddsub-it-bad.d: New test.
+ * testsuite/gas/arm/nomve-vaddsub-it.d: New test.
+
2020-03-11 H.J. Lu <hongjiu.lu@intel.com>
* NEWS: Mention x86 assembler options for CVE-2020-0551.
OP_RNDMQ, /* Neon double precision (0..31) or MVE vector register. */
OP_RNDMQR, /* Neon double precision (0..31), MVE vector or ARM register.
*/
+ OP_RNSDMQR, /* Neon single or double precision, MVE vector or ARM register.
+ */
OP_RNQ, /* Neon quad precision register */
OP_RNQMQ, /* Neon quad or MVE vector register. */
OP_RVSD, /* VFP single or double precision register */
OP_oRNSDQ, /* Optional single, double or quad precision vector register */
OP_oRNSDQMQ, /* Optional single, double or quad register or MVE vector
register. */
+ OP_oRNSDMQ, /* Optional single, double register or MVE vector
+ register. */
OP_oSHll, /* LSL immediate */
OP_oSHar, /* ASR immediate */
OP_oSHllar, /* LSL or ASR immediate */
case OP_RVS: po_reg_or_fail (REG_TYPE_VFS); break;
case OP_RVD: po_reg_or_fail (REG_TYPE_VFD); break;
case OP_oRND:
+ case OP_RNSDMQR:
+ po_reg_or_goto (REG_TYPE_VFS, try_rndmqr);
+ break;
+ try_rndmqr:
case OP_RNDMQR:
po_reg_or_goto (REG_TYPE_RN, try_rndmq);
break;
case OP_RVSD_COND:
po_reg_or_goto (REG_TYPE_VFSD, try_cond);
break;
+ case OP_oRNSDMQ:
case OP_RNSDMQ:
po_reg_or_goto (REG_TYPE_NSD, try_mq2);
break;
static void
do_neon_dyadic_long (void)
{
- enum neon_shape rs = neon_select_shape (NS_QDD, NS_QQQ, NS_QQR, NS_NULL);
+ enum neon_shape rs = neon_select_shape (NS_QDD, NS_HHH, NS_FFF, NS_DDD, NS_NULL);
if (rs == NS_QDD)
{
if (vfp_or_neon_is_neon (NEON_CHECK_ARCH | NEON_CHECK_CC) == FAIL)
#define ARM_VARIANT & fpu_neon_ext_v1
mnUF(vabd, _vabd, 3, (RNDQMQ, oRNDQMQ, RNDQMQ), neon_dyadic_if_su),
mnUF(vabdl, _vabdl, 3, (RNQMQ, RNDMQ, RNDMQ), neon_dyadic_long),
- mnUF(vaddl, _vaddl, 3, (RNQMQ, RNDMQ, RNDMQR), neon_dyadic_long),
- mnUF(vsubl, _vsubl, 3, (RNQMQ, RNDMQ, RNDMQR), neon_dyadic_long),
+ mnUF(vaddl, _vaddl, 3, (RNSDQMQ, oRNSDMQ, RNSDMQR), neon_dyadic_long),
+ mnUF(vsubl, _vsubl, 3, (RNSDQMQ, oRNSDMQ, RNSDMQR), neon_dyadic_long),
mnUF(vand, _vand, 3, (RNDQMQ, oRNDQMQ, RNDQMQ_Ibig), neon_logic),
mnUF(vbic, _vbic, 3, (RNDQMQ, oRNDQMQ, RNDQMQ_Ibig), neon_logic),
mnUF(vorr, _vorr, 3, (RNDQMQ, oRNDQMQ, RNDQMQ_Ibig), neon_logic),
--- /dev/null
+# name: Armv8.1-M Mainline vadd/vsub instructions in it blocks (with MVE)
+# as: -march=armv8.1-m.main+mve.fp+fp.dp
+# objdump: -dr --prefix-addresses --show-raw-insn -marmv8.1-m.main
+
+.*: +file format .*arm.*
+
+Disassembly of section .text:
+[^>]*> bfdc itt le
+[^>]*> ee72 1aa3 vaddle.f32 s3, s5, s7
+[^>]*> ee34 7b06 vaddle.f64 d7, d4, d6
+[^>]*> bfbc itt lt
+[^>]*> ee72 1aa3 vaddlt.f32 s3, s5, s7
+[^>]*> ee34 7b06 vaddlt.f64 d7, d4, d6
+[^>]*> bfdc itt le
+[^>]*> ee72 1ae3 vsuble.f32 s3, s5, s7
+[^>]*> ee34 7b46 vsuble.f64 d7, d4, d6
+[^>]*> bfbc itt lt
+[^>]*> ee72 1ae3 vsublt.f32 s3, s5, s7
+[^>]*> ee34 7b46 vsublt.f64 d7, d4, d6
+[^>]*> bfdc itt le
+[^>]*> ee30 0a06 vaddle.f32 s0, s0, s12
+[^>]*> ee30 0b41 vsuble.f64 d0, d0, d1
+#...
--- /dev/null
+# name: Armv8.1-M Mainline vadd/vsub instructions in it blocks (without MVE)
+# as: -march=armv8.1-m.main+fp.dp
+# source: mve-vaddsub-it.s
+# objdump: -dr --prefix-addresses --show-raw-insn -marmv8.1-m.main
+
+.*: +file format .*arm.*
+
+Disassembly of section .text:
+[^>]*> bfdc itt le
+[^>]*> ee72 1aa3 vaddle.f32 s3, s5, s7
+[^>]*> ee34 7b06 vaddle.f64 d7, d4, d6
+[^>]*> bfbc itt lt
+[^>]*> ee72 1aa3 vaddlt.f32 s3, s5, s7
+[^>]*> ee34 7b06 vaddlt.f64 d7, d4, d6
+[^>]*> bfdc itt le
+[^>]*> ee72 1ae3 vsuble.f32 s3, s5, s7
+[^>]*> ee34 7b46 vsuble.f64 d7, d4, d6
+[^>]*> bfbc itt lt
+[^>]*> ee72 1ae3 vsublt.f32 s3, s5, s7
+[^>]*> ee34 7b46 vsublt.f64 d7, d4, d6
+[^>]*> bfdc itt le
+[^>]*> ee30 0a06 vaddle.f32 s0, s0, s12
+[^>]*> ee30 0b41 vsuble.f64 d0, d0, d1
+#...