aboutsummaryrefslogtreecommitdiff
path: root/gas/testsuite
diff options
context:
space:
mode:
authorJiong Wang <jiong.wang@arm.com>2017-06-28 11:00:55 +0100
committerJiong Wang <jiong.wang@arm.com>2017-06-28 11:00:55 +0100
commitc604a79ad4d47070bbcc0bc082188fb16892ceef (patch)
treee05bd320fafe416bbb5c0724572c63f73c2ee344 /gas/testsuite
parent41664b45ab6387184bd0e7512fcf7a72c58744e7 (diff)
downloadgdb-c604a79ad4d47070bbcc0bc082188fb16892ceef.zip
gdb-c604a79ad4d47070bbcc0bc082188fb16892ceef.tar.gz
gdb-c604a79ad4d47070bbcc0bc082188fb16892ceef.tar.bz2
[ARM] Assembler and disassembler support Dot Product Extension
This patch add assembler and disassembler support for new Dot Product Extension. The support can be enabled through the new "+dotprod" extension. include/ * opcode/arm.h (FPU_NEON_EXT_DOTPROD): New macro. (FPU_ARCH_DOTPROD_NEON_VFP_ARMV8): New macro. gas/ * config/tc-arm.c (fpu_neon_ext_dotprod): New variable. (neon_scalar_for_mul): Improve comments. (do_neon_dotproduct): New function to encode Dot Product instructions. (do_neon_dotproduct_s): Wrapper function for signed Dot Product instructions. (do_neon_dotproduct_u): Wrapper function for unsigned Dot Product instructions. (insns): New entries for vsdot and vudot. (arm_extensions): New entry for "dotprod". * doc/c-arm.texi: Document new "dotprod" extension. * testsuite/gas/arm/dotprod.s: New test source. * testsuite/gas/arm/dotprod-illegal.s: New test source. * testsuite/gas/arm/dotprod.d: New test. * testsuite/gas/arm/dotprod-thumb2.d: New test. * testsuite/gas/arm/dotprod-illegal.d: New test. * testsuite/gas/arm/dotprod-legacy-arch.d: New test. * testsuite/gas/arm/dotprod-illegal.l: New error file. * testsuite/gas/arm/dotprod-legacy-arch.l: New error file. opcodes/ * arm-dis.c (coprocessor_opcodes): New entries for vsdot and vudot.
Diffstat (limited to 'gas/testsuite')
-rw-r--r--gas/testsuite/gas/arm/dotprod-illegal.d2
-rw-r--r--gas/testsuite/gas/arm/dotprod-illegal.l10
-rw-r--r--gas/testsuite/gas/arm/dotprod-illegal.s16
-rw-r--r--gas/testsuite/gas/arm/dotprod-legacy-arch.d3
-rw-r--r--gas/testsuite/gas/arm/dotprod-legacy-arch.l3
-rw-r--r--gas/testsuite/gas/arm/dotprod-thumb2.d297
-rw-r--r--gas/testsuite/gas/arm/dotprod.d297
-rw-r--r--gas/testsuite/gas/arm/dotprod.s44
8 files changed, 672 insertions, 0 deletions
diff --git a/gas/testsuite/gas/arm/dotprod-illegal.d b/gas/testsuite/gas/arm/dotprod-illegal.d
new file mode 100644
index 0000000..f75450c
--- /dev/null
+++ b/gas/testsuite/gas/arm/dotprod-illegal.d
@@ -0,0 +1,2 @@
+#as: -march=armv8.2-a+dotprod -mfpu=neon-fp-armv8
+#error-output: dotprod-illegal.l
diff --git a/gas/testsuite/gas/arm/dotprod-illegal.l b/gas/testsuite/gas/arm/dotprod-illegal.l
new file mode 100644
index 0000000..5b88bc3
--- /dev/null
+++ b/gas/testsuite/gas/arm/dotprod-illegal.l
@@ -0,0 +1,10 @@
+[^:]*: Assembler messages:
+[^:]*:4: Error: bad type in Neon instruction -- `vudot.s8 d0,d2,d5'
+[^:]*:6: Error: bad type in Neon instruction -- `vudot.u16 d0,d2,d5'
+[^:]*:7: Error: bad type in Neon instruction -- `vsdot.s16 d1,d12,d18'
+[^:]*:9: Error: bad type in Neon instruction -- `vudot.u32 d2,d22,d1'
+[^:]*:10: Error: bad type in Neon instruction -- `vsdot.s32 d3,d30,d9'
+[^:]*:12: Error: scalar out of range for multiply instruction -- `vudot.u8 d31,d2,d16\[0\]'
+[^:]*:13: Error: scalar out of range for multiply instruction -- `vsdot.s8 q13,q14,d22\[1\]'
+[^:]*:15: Error: scalar out of range for multiply instruction -- `vudot.u8 d1,d8,d15\[2\]'
+[^:]*:16: Error: scalar out of range for multiply instruction -- `vsdot.s8 q14,q7,d15\[3\]'
diff --git a/gas/testsuite/gas/arm/dotprod-illegal.s b/gas/testsuite/gas/arm/dotprod-illegal.s
new file mode 100644
index 0000000..8b78591
--- /dev/null
+++ b/gas/testsuite/gas/arm/dotprod-illegal.s
@@ -0,0 +1,16 @@
+ .text
+func:
+ # name and suffix mismatch.
+ vudot.s8 d0, d2, d5
+ # No .*16 suffix support.
+ vudot.u16 d0, d2, d5
+ vsdot.s16 d1, d12, d18
+ # No .*32 suffix support.
+ vudot.u32 d2, d22, d1
+ vsdot.s32 d3, d30, d9
+ # Scalar base register out of bound
+ vudot.u8 d31, d2, d16[0]
+ vsdot.s8 q13, q14, d22[1]
+ # Scalar index out of bound
+ vudot.u8 d1, d8, d15[2]
+ vsdot.s8 q14, q7, d15[3]
diff --git a/gas/testsuite/gas/arm/dotprod-legacy-arch.d b/gas/testsuite/gas/arm/dotprod-legacy-arch.d
new file mode 100644
index 0000000..9f87503
--- /dev/null
+++ b/gas/testsuite/gas/arm/dotprod-legacy-arch.d
@@ -0,0 +1,3 @@
+#as: -march=armv8.1-a+dotprod -mfpu=neon-fp-armv8
+#source: dotprod.s
+#error-output: dotprod-legacy-arch.l
diff --git a/gas/testsuite/gas/arm/dotprod-legacy-arch.l b/gas/testsuite/gas/arm/dotprod-legacy-arch.l
new file mode 100644
index 0000000..a627a36
--- /dev/null
+++ b/gas/testsuite/gas/arm/dotprod-legacy-arch.l
@@ -0,0 +1,3 @@
+Assembler messages:
+[^:]*: extension does not apply to the base architecture
+[^:]*: unrecognized option -march=armv8.1-a\+dotprod
diff --git a/gas/testsuite/gas/arm/dotprod-thumb2.d b/gas/testsuite/gas/arm/dotprod-thumb2.d
new file mode 100644
index 0000000..9b558a6
--- /dev/null
+++ b/gas/testsuite/gas/arm/dotprod-thumb2.d
@@ -0,0 +1,297 @@
+#as: -march=armv8.2-a+dotprod -mfpu=neon-fp-armv8 -mthumb
+#source: dotprod.s
+#objdump: -d
+
+.*: +file format .*arm.*
+
+Disassembly of section .text:
+
+.* <.*>:
+.*: fc22 0d10 vudot.u8 d0, d2, d0
+.*: fe22 0d10 vudot.u8 d0, d2, d0\[0\]
+.*: fc22 0d18 vudot.u8 d0, d2, d8
+.*: fe22 0d18 vudot.u8 d0, d2, d8\[0\]
+.*: fc22 0d1f vudot.u8 d0, d2, d15
+.*: fe22 0d1f vudot.u8 d0, d2, d15\[0\]
+.*: fc2f 0d10 vudot.u8 d0, d15, d0
+.*: fe2f 0d10 vudot.u8 d0, d15, d0\[0\]
+.*: fc2f 0d18 vudot.u8 d0, d15, d8
+.*: fe2f 0d18 vudot.u8 d0, d15, d8\[0\]
+.*: fc2f 0d1f vudot.u8 d0, d15, d15
+.*: fe2f 0d1f vudot.u8 d0, d15, d15\[0\]
+.*: fc2e 0d90 vudot.u8 d0, d30, d0
+.*: fe2e 0d90 vudot.u8 d0, d30, d0\[0\]
+.*: fc2e 0d98 vudot.u8 d0, d30, d8
+.*: fe2e 0d98 vudot.u8 d0, d30, d8\[0\]
+.*: fc2e 0d9f vudot.u8 d0, d30, d15
+.*: fe2e 0d9f vudot.u8 d0, d30, d15\[0\]
+.*: fc22 7d10 vudot.u8 d7, d2, d0
+.*: fe22 7d10 vudot.u8 d7, d2, d0\[0\]
+.*: fc22 7d18 vudot.u8 d7, d2, d8
+.*: fe22 7d18 vudot.u8 d7, d2, d8\[0\]
+.*: fc22 7d1f vudot.u8 d7, d2, d15
+.*: fe22 7d1f vudot.u8 d7, d2, d15\[0\]
+.*: fc2f 7d10 vudot.u8 d7, d15, d0
+.*: fe2f 7d10 vudot.u8 d7, d15, d0\[0\]
+.*: fc2f 7d18 vudot.u8 d7, d15, d8
+.*: fe2f 7d18 vudot.u8 d7, d15, d8\[0\]
+.*: fc2f 7d1f vudot.u8 d7, d15, d15
+.*: fe2f 7d1f vudot.u8 d7, d15, d15\[0\]
+.*: fc2e 7d90 vudot.u8 d7, d30, d0
+.*: fe2e 7d90 vudot.u8 d7, d30, d0\[0\]
+.*: fc2e 7d98 vudot.u8 d7, d30, d8
+.*: fe2e 7d98 vudot.u8 d7, d30, d8\[0\]
+.*: fc2e 7d9f vudot.u8 d7, d30, d15
+.*: fe2e 7d9f vudot.u8 d7, d30, d15\[0\]
+.*: fc62 0d10 vudot.u8 d16, d2, d0
+.*: fe62 0d10 vudot.u8 d16, d2, d0\[0\]
+.*: fc62 0d18 vudot.u8 d16, d2, d8
+.*: fe62 0d18 vudot.u8 d16, d2, d8\[0\]
+.*: fc62 0d1f vudot.u8 d16, d2, d15
+.*: fe62 0d1f vudot.u8 d16, d2, d15\[0\]
+.*: fc6f 0d10 vudot.u8 d16, d15, d0
+.*: fe6f 0d10 vudot.u8 d16, d15, d0\[0\]
+.*: fc6f 0d18 vudot.u8 d16, d15, d8
+.*: fe6f 0d18 vudot.u8 d16, d15, d8\[0\]
+.*: fc6f 0d1f vudot.u8 d16, d15, d15
+.*: fe6f 0d1f vudot.u8 d16, d15, d15\[0\]
+.*: fc6e 0d90 vudot.u8 d16, d30, d0
+.*: fe6e 0d90 vudot.u8 d16, d30, d0\[0\]
+.*: fc6e 0d98 vudot.u8 d16, d30, d8
+.*: fe6e 0d98 vudot.u8 d16, d30, d8\[0\]
+.*: fc6e 0d9f vudot.u8 d16, d30, d15
+.*: fe6e 0d9f vudot.u8 d16, d30, d15\[0\]
+.*: fc62 fd10 vudot.u8 d31, d2, d0
+.*: fe62 fd10 vudot.u8 d31, d2, d0\[0\]
+.*: fc62 fd18 vudot.u8 d31, d2, d8
+.*: fe62 fd18 vudot.u8 d31, d2, d8\[0\]
+.*: fc62 fd1f vudot.u8 d31, d2, d15
+.*: fe62 fd1f vudot.u8 d31, d2, d15\[0\]
+.*: fc6f fd10 vudot.u8 d31, d15, d0
+.*: fe6f fd10 vudot.u8 d31, d15, d0\[0\]
+.*: fc6f fd18 vudot.u8 d31, d15, d8
+.*: fe6f fd18 vudot.u8 d31, d15, d8\[0\]
+.*: fc6f fd1f vudot.u8 d31, d15, d15
+.*: fe6f fd1f vudot.u8 d31, d15, d15\[0\]
+.*: fc6e fd90 vudot.u8 d31, d30, d0
+.*: fe6e fd90 vudot.u8 d31, d30, d0\[0\]
+.*: fc6e fd98 vudot.u8 d31, d30, d8
+.*: fe6e fd98 vudot.u8 d31, d30, d8\[0\]
+.*: fc6e fd9f vudot.u8 d31, d30, d15
+.*: fe6e fd9f vudot.u8 d31, d30, d15\[0\]
+.*: fc22 0d00 vsdot.s8 d0, d2, d0
+.*: fe22 0d00 vsdot.s8 d0, d2, d0\[0\]
+.*: fc22 0d08 vsdot.s8 d0, d2, d8
+.*: fe22 0d08 vsdot.s8 d0, d2, d8\[0\]
+.*: fc22 0d0f vsdot.s8 d0, d2, d15
+.*: fe22 0d0f vsdot.s8 d0, d2, d15\[0\]
+.*: fc2f 0d00 vsdot.s8 d0, d15, d0
+.*: fe2f 0d00 vsdot.s8 d0, d15, d0\[0\]
+.*: fc2f 0d08 vsdot.s8 d0, d15, d8
+.*: fe2f 0d08 vsdot.s8 d0, d15, d8\[0\]
+.*: fc2f 0d0f vsdot.s8 d0, d15, d15
+.*: fe2f 0d0f vsdot.s8 d0, d15, d15\[0\]
+.*: fc2e 0d80 vsdot.s8 d0, d30, d0
+.*: fe2e 0d80 vsdot.s8 d0, d30, d0\[0\]
+.*: fc2e 0d88 vsdot.s8 d0, d30, d8
+.*: fe2e 0d88 vsdot.s8 d0, d30, d8\[0\]
+.*: fc2e 0d8f vsdot.s8 d0, d30, d15
+.*: fe2e 0d8f vsdot.s8 d0, d30, d15\[0\]
+.*: fc22 7d00 vsdot.s8 d7, d2, d0
+.*: fe22 7d00 vsdot.s8 d7, d2, d0\[0\]
+.*: fc22 7d08 vsdot.s8 d7, d2, d8
+.*: fe22 7d08 vsdot.s8 d7, d2, d8\[0\]
+.*: fc22 7d0f vsdot.s8 d7, d2, d15
+.*: fe22 7d0f vsdot.s8 d7, d2, d15\[0\]
+.*: fc2f 7d00 vsdot.s8 d7, d15, d0
+.*: fe2f 7d00 vsdot.s8 d7, d15, d0\[0\]
+.*: fc2f 7d08 vsdot.s8 d7, d15, d8
+.*: fe2f 7d08 vsdot.s8 d7, d15, d8\[0\]
+.*: fc2f 7d0f vsdot.s8 d7, d15, d15
+.*: fe2f 7d0f vsdot.s8 d7, d15, d15\[0\]
+.*: fc2e 7d80 vsdot.s8 d7, d30, d0
+.*: fe2e 7d80 vsdot.s8 d7, d30, d0\[0\]
+.*: fc2e 7d88 vsdot.s8 d7, d30, d8
+.*: fe2e 7d88 vsdot.s8 d7, d30, d8\[0\]
+.*: fc2e 7d8f vsdot.s8 d7, d30, d15
+.*: fe2e 7d8f vsdot.s8 d7, d30, d15\[0\]
+.*: fc62 0d00 vsdot.s8 d16, d2, d0
+.*: fe62 0d00 vsdot.s8 d16, d2, d0\[0\]
+.*: fc62 0d08 vsdot.s8 d16, d2, d8
+.*: fe62 0d08 vsdot.s8 d16, d2, d8\[0\]
+.*: fc62 0d0f vsdot.s8 d16, d2, d15
+.*: fe62 0d0f vsdot.s8 d16, d2, d15\[0\]
+.*: fc6f 0d00 vsdot.s8 d16, d15, d0
+.*: fe6f 0d00 vsdot.s8 d16, d15, d0\[0\]
+.*: fc6f 0d08 vsdot.s8 d16, d15, d8
+.*: fe6f 0d08 vsdot.s8 d16, d15, d8\[0\]
+.*: fc6f 0d0f vsdot.s8 d16, d15, d15
+.*: fe6f 0d0f vsdot.s8 d16, d15, d15\[0\]
+.*: fc6e 0d80 vsdot.s8 d16, d30, d0
+.*: fe6e 0d80 vsdot.s8 d16, d30, d0\[0\]
+.*: fc6e 0d88 vsdot.s8 d16, d30, d8
+.*: fe6e 0d88 vsdot.s8 d16, d30, d8\[0\]
+.*: fc6e 0d8f vsdot.s8 d16, d30, d15
+.*: fe6e 0d8f vsdot.s8 d16, d30, d15\[0\]
+.*: fc62 fd00 vsdot.s8 d31, d2, d0
+.*: fe62 fd00 vsdot.s8 d31, d2, d0\[0\]
+.*: fc62 fd08 vsdot.s8 d31, d2, d8
+.*: fe62 fd08 vsdot.s8 d31, d2, d8\[0\]
+.*: fc62 fd0f vsdot.s8 d31, d2, d15
+.*: fe62 fd0f vsdot.s8 d31, d2, d15\[0\]
+.*: fc6f fd00 vsdot.s8 d31, d15, d0
+.*: fe6f fd00 vsdot.s8 d31, d15, d0\[0\]
+.*: fc6f fd08 vsdot.s8 d31, d15, d8
+.*: fe6f fd08 vsdot.s8 d31, d15, d8\[0\]
+.*: fc6f fd0f vsdot.s8 d31, d15, d15
+.*: fe6f fd0f vsdot.s8 d31, d15, d15\[0\]
+.*: fc6e fd80 vsdot.s8 d31, d30, d0
+.*: fe6e fd80 vsdot.s8 d31, d30, d0\[0\]
+.*: fc6e fd88 vsdot.s8 d31, d30, d8
+.*: fe6e fd88 vsdot.s8 d31, d30, d8\[0\]
+.*: fc6e fd8f vsdot.s8 d31, d30, d15
+.*: fe6e fd8f vsdot.s8 d31, d30, d15\[0\]
+.*: fc24 0d50 vudot.u8 q0, q2, q0
+.*: fe24 0d70 vudot.u8 q0, q2, d0\[1\]
+.*: fc24 0d5e vudot.u8 q0, q2, q7
+.*: fe24 0d77 vudot.u8 q0, q2, d7\[1\]
+.*: fc24 0d7e vudot.u8 q0, q2, q15
+.*: fe24 0d7f vudot.u8 q0, q2, d15\[1\]
+.*: fc26 0d50 vudot.u8 q0, q3, q0
+.*: fe26 0d70 vudot.u8 q0, q3, d0\[1\]
+.*: fc26 0d5e vudot.u8 q0, q3, q7
+.*: fe26 0d77 vudot.u8 q0, q3, d7\[1\]
+.*: fc26 0d7e vudot.u8 q0, q3, q15
+.*: fe26 0d7f vudot.u8 q0, q3, d15\[1\]
+.*: fc2c 0dd0 vudot.u8 q0, q14, q0
+.*: fe2c 0df0 vudot.u8 q0, q14, d0\[1\]
+.*: fc2c 0dde vudot.u8 q0, q14, q7
+.*: fe2c 0df7 vudot.u8 q0, q14, d7\[1\]
+.*: fc2c 0dfe vudot.u8 q0, q14, q15
+.*: fe2c 0dff vudot.u8 q0, q14, d15\[1\]
+.*: fc24 2d50 vudot.u8 q1, q2, q0
+.*: fe24 2d70 vudot.u8 q1, q2, d0\[1\]
+.*: fc24 2d5e vudot.u8 q1, q2, q7
+.*: fe24 2d77 vudot.u8 q1, q2, d7\[1\]
+.*: fc24 2d7e vudot.u8 q1, q2, q15
+.*: fe24 2d7f vudot.u8 q1, q2, d15\[1\]
+.*: fc26 2d50 vudot.u8 q1, q3, q0
+.*: fe26 2d70 vudot.u8 q1, q3, d0\[1\]
+.*: fc26 2d5e vudot.u8 q1, q3, q7
+.*: fe26 2d77 vudot.u8 q1, q3, d7\[1\]
+.*: fc26 2d7e vudot.u8 q1, q3, q15
+.*: fe26 2d7f vudot.u8 q1, q3, d15\[1\]
+.*: fc2c 2dd0 vudot.u8 q1, q14, q0
+.*: fe2c 2df0 vudot.u8 q1, q14, d0\[1\]
+.*: fc2c 2dde vudot.u8 q1, q14, q7
+.*: fe2c 2df7 vudot.u8 q1, q14, d7\[1\]
+.*: fc2c 2dfe vudot.u8 q1, q14, q15
+.*: fe2c 2dff vudot.u8 q1, q14, d15\[1\]
+.*: fc24 cd50 vudot.u8 q6, q2, q0
+.*: fe24 cd70 vudot.u8 q6, q2, d0\[1\]
+.*: fc24 cd5e vudot.u8 q6, q2, q7
+.*: fe24 cd77 vudot.u8 q6, q2, d7\[1\]
+.*: fc24 cd7e vudot.u8 q6, q2, q15
+.*: fe24 cd7f vudot.u8 q6, q2, d15\[1\]
+.*: fc26 cd50 vudot.u8 q6, q3, q0
+.*: fe26 cd70 vudot.u8 q6, q3, d0\[1\]
+.*: fc26 cd5e vudot.u8 q6, q3, q7
+.*: fe26 cd77 vudot.u8 q6, q3, d7\[1\]
+.*: fc26 cd7e vudot.u8 q6, q3, q15
+.*: fe26 cd7f vudot.u8 q6, q3, d15\[1\]
+.*: fc2c cdd0 vudot.u8 q6, q14, q0
+.*: fe2c cdf0 vudot.u8 q6, q14, d0\[1\]
+.*: fc2c cdde vudot.u8 q6, q14, q7
+.*: fe2c cdf7 vudot.u8 q6, q14, d7\[1\]
+.*: fc2c cdfe vudot.u8 q6, q14, q15
+.*: fe2c cdff vudot.u8 q6, q14, d15\[1\]
+.*: fc64 ad50 vudot.u8 q13, q2, q0
+.*: fe64 ad70 vudot.u8 q13, q2, d0\[1\]
+.*: fc64 ad5e vudot.u8 q13, q2, q7
+.*: fe64 ad77 vudot.u8 q13, q2, d7\[1\]
+.*: fc64 ad7e vudot.u8 q13, q2, q15
+.*: fe64 ad7f vudot.u8 q13, q2, d15\[1\]
+.*: fc66 ad50 vudot.u8 q13, q3, q0
+.*: fe66 ad70 vudot.u8 q13, q3, d0\[1\]
+.*: fc66 ad5e vudot.u8 q13, q3, q7
+.*: fe66 ad77 vudot.u8 q13, q3, d7\[1\]
+.*: fc66 ad7e vudot.u8 q13, q3, q15
+.*: fe66 ad7f vudot.u8 q13, q3, d15\[1\]
+.*: fc6c add0 vudot.u8 q13, q14, q0
+.*: fe6c adf0 vudot.u8 q13, q14, d0\[1\]
+.*: fc6c adde vudot.u8 q13, q14, q7
+.*: fe6c adf7 vudot.u8 q13, q14, d7\[1\]
+.*: fc6c adfe vudot.u8 q13, q14, q15
+.*: fe6c adff vudot.u8 q13, q14, d15\[1\]
+.*: fc24 0d40 vsdot.s8 q0, q2, q0
+.*: fe24 0d60 vsdot.s8 q0, q2, d0\[1\]
+.*: fc24 0d4e vsdot.s8 q0, q2, q7
+.*: fe24 0d67 vsdot.s8 q0, q2, d7\[1\]
+.*: fc24 0d6e vsdot.s8 q0, q2, q15
+.*: fe24 0d6f vsdot.s8 q0, q2, d15\[1\]
+.*: fc26 0d40 vsdot.s8 q0, q3, q0
+.*: fe26 0d60 vsdot.s8 q0, q3, d0\[1\]
+.*: fc26 0d4e vsdot.s8 q0, q3, q7
+.*: fe26 0d67 vsdot.s8 q0, q3, d7\[1\]
+.*: fc26 0d6e vsdot.s8 q0, q3, q15
+.*: fe26 0d6f vsdot.s8 q0, q3, d15\[1\]
+.*: fc2c 0dc0 vsdot.s8 q0, q14, q0
+.*: fe2c 0de0 vsdot.s8 q0, q14, d0\[1\]
+.*: fc2c 0dce vsdot.s8 q0, q14, q7
+.*: fe2c 0de7 vsdot.s8 q0, q14, d7\[1\]
+.*: fc2c 0dee vsdot.s8 q0, q14, q15
+.*: fe2c 0def vsdot.s8 q0, q14, d15\[1\]
+.*: fc24 2d40 vsdot.s8 q1, q2, q0
+.*: fe24 2d60 vsdot.s8 q1, q2, d0\[1\]
+.*: fc24 2d4e vsdot.s8 q1, q2, q7
+.*: fe24 2d67 vsdot.s8 q1, q2, d7\[1\]
+.*: fc24 2d6e vsdot.s8 q1, q2, q15
+.*: fe24 2d6f vsdot.s8 q1, q2, d15\[1\]
+.*: fc26 2d40 vsdot.s8 q1, q3, q0
+.*: fe26 2d60 vsdot.s8 q1, q3, d0\[1\]
+.*: fc26 2d4e vsdot.s8 q1, q3, q7
+.*: fe26 2d67 vsdot.s8 q1, q3, d7\[1\]
+.*: fc26 2d6e vsdot.s8 q1, q3, q15
+.*: fe26 2d6f vsdot.s8 q1, q3, d15\[1\]
+.*: fc2c 2dc0 vsdot.s8 q1, q14, q0
+.*: fe2c 2de0 vsdot.s8 q1, q14, d0\[1\]
+.*: fc2c 2dce vsdot.s8 q1, q14, q7
+.*: fe2c 2de7 vsdot.s8 q1, q14, d7\[1\]
+.*: fc2c 2dee vsdot.s8 q1, q14, q15
+.*: fe2c 2def vsdot.s8 q1, q14, d15\[1\]
+.*: fc24 cd40 vsdot.s8 q6, q2, q0
+.*: fe24 cd60 vsdot.s8 q6, q2, d0\[1\]
+.*: fc24 cd4e vsdot.s8 q6, q2, q7
+.*: fe24 cd67 vsdot.s8 q6, q2, d7\[1\]
+.*: fc24 cd6e vsdot.s8 q6, q2, q15
+.*: fe24 cd6f vsdot.s8 q6, q2, d15\[1\]
+.*: fc26 cd40 vsdot.s8 q6, q3, q0
+.*: fe26 cd60 vsdot.s8 q6, q3, d0\[1\]
+.*: fc26 cd4e vsdot.s8 q6, q3, q7
+.*: fe26 cd67 vsdot.s8 q6, q3, d7\[1\]
+.*: fc26 cd6e vsdot.s8 q6, q3, q15
+.*: fe26 cd6f vsdot.s8 q6, q3, d15\[1\]
+.*: fc2c cdc0 vsdot.s8 q6, q14, q0
+.*: fe2c cde0 vsdot.s8 q6, q14, d0\[1\]
+.*: fc2c cdce vsdot.s8 q6, q14, q7
+.*: fe2c cde7 vsdot.s8 q6, q14, d7\[1\]
+.*: fc2c cdee vsdot.s8 q6, q14, q15
+.*: fe2c cdef vsdot.s8 q6, q14, d15\[1\]
+.*: fc64 ad40 vsdot.s8 q13, q2, q0
+.*: fe64 ad60 vsdot.s8 q13, q2, d0\[1\]
+.*: fc64 ad4e vsdot.s8 q13, q2, q7
+.*: fe64 ad67 vsdot.s8 q13, q2, d7\[1\]
+.*: fc64 ad6e vsdot.s8 q13, q2, q15
+.*: fe64 ad6f vsdot.s8 q13, q2, d15\[1\]
+.*: fc66 ad40 vsdot.s8 q13, q3, q0
+.*: fe66 ad60 vsdot.s8 q13, q3, d0\[1\]
+.*: fc66 ad4e vsdot.s8 q13, q3, q7
+.*: fe66 ad67 vsdot.s8 q13, q3, d7\[1\]
+.*: fc66 ad6e vsdot.s8 q13, q3, q15
+.*: fe66 ad6f vsdot.s8 q13, q3, d15\[1\]
+.*: fc6c adc0 vsdot.s8 q13, q14, q0
+.*: fe6c ade0 vsdot.s8 q13, q14, d0\[1\]
+.*: fc6c adce vsdot.s8 q13, q14, q7
+.*: fe6c ade7 vsdot.s8 q13, q14, d7\[1\]
+.*: fc6c adee vsdot.s8 q13, q14, q15
+.*: fe6c adef vsdot.s8 q13, q14, d15\[1\]
diff --git a/gas/testsuite/gas/arm/dotprod.d b/gas/testsuite/gas/arm/dotprod.d
new file mode 100644
index 0000000..c927f0b
--- /dev/null
+++ b/gas/testsuite/gas/arm/dotprod.d
@@ -0,0 +1,297 @@
+#no fpu options passed, we expect dotprod to imply simd+fp
+#as: -march=armv8.2-a+dotprod
+#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\]
diff --git a/gas/testsuite/gas/arm/dotprod.s b/gas/testsuite/gas/arm/dotprod.s
new file mode 100644
index 0000000..575a515
--- /dev/null
+++ b/gas/testsuite/gas/arm/dotprod.s
@@ -0,0 +1,44 @@
+ .macro dotprod_iter_d_n op, d, n
+ .irp m, 0, 8, 15
+ \op d\d, d\n, d\m
+ \op d\d, d\n, d\m[0]
+ .endr
+ .endm
+
+ .macro dotprod_iter_d op, d
+ .irp n, 2, 15, 30
+ dotprod_iter_d_n \op, \d, \n
+ .endr
+ .endm
+
+ .macro dotprod_iter op
+ .irp d, 0, 7, 16, 31
+ dotprod_iter_d \op, \d
+ .endr
+ .endm
+
+ .macro dotprod_q_iter_d_n op, d, n
+ .irp m, 0, 7, 15
+ \op q\d, q\n, q\m
+ \op q\d, q\n, d\m[1]
+ .endr
+ .endm
+
+ .macro dotprod_q_iter_d op, d
+ .irp n, 2, 3, 14
+ dotprod_q_iter_d_n \op, \d, \n
+ .endr
+ .endm
+
+ .macro dotprod_q_iter op
+ .irp d, 0, 1, 6, 13
+ dotprod_q_iter_d \op, \d
+ .endr
+ .endm
+
+ .text
+func:
+ dotprod_iter vudot.u8
+ dotprod_iter vsdot.s8
+ dotprod_q_iter vudot.u8
+ dotprod_q_iter vsdot.s8