+2018-10-16  Matthew Malcomson  <matthew.malcomson@arm.com>
+
+       * testsuite/gas/aarch64/illegal-dotproduct.d: New test.
+       * testsuite/gas/aarch64/illegal-dotproduct.l: New test.
+       * testsuite/gas/aarch64/illegal-dotproduct.s: New test.
+
+
 2018-10-15  Alan Modra  <amodra@gmail.com>
 
        PR 23534
 
--- /dev/null
+#as: -march=armv8.2-a+dotprod
+#name: Invalid dotproduct instructions.
+#source: illegal-dotproduct.s
+#error_output: illegal-dotproduct.l
 
--- /dev/null
+[^:]+: Assembler messages:
+[^:]+:[0-9]+: Error: register element index out of range 0 to 3 at operand 3 -- `udot V0.2S,V0.8B,V0.4B\[4\]'
+[^:]+:[0-9]+: Error: operand mismatch -- `udot V0.4S,V0.8B,V0.4B\[4\]'
+[^:]+:[0-9]+: Info:    did you mean this\?
+[^:]+:[0-9]+: Info:            udot v0.2s, v0.8b, v0.4b\[4\]
+[^:]+:[0-9]+: Info:    other valid variant\(s\):
+[^:]+:[0-9]+: Info:            udot v0.4s, v0.16b, v0.4b\[4\]
+[^:]+:[0-9]+: Error: register element index out of range 0 to 3 at operand 3 -- `sdot V0.2S,V0.8B,V0.4B\[4\]'
+[^:]+:[0-9]+: Error: operand mismatch -- `sdot V0.2S,V0.8B,V0.4H\[4\]'
+[^:]+:[0-9]+: Info:    did you mean this\?
+[^:]+:[0-9]+: Info:            sdot v0.2s, v0.8b, v0.4b\[4\]
+[^:]+:[0-9]+: Info:    other valid variant\(s\):
+[^:]+:[0-9]+: Info:            sdot v0.4s, v0.16b, v0.4b\[4\]
 
--- /dev/null
+UDOT   V0.2S, V0.8B, V0.4B[4]
+UDOT   V0.4S, V0.8B, V0.4B[4]
+SDOT   V0.2S, V0.8B, V0.4B[4]
+SDOT   V0.2S, V0.8B, V0.4H[4]
 
+2018-10-16  Matthew Malcomson  <matthew.malcomson@arm.com>
+
+       * aarch64-opc.c (struct operand_qualifier_data): Change qualifier data
+       corresponding to AARCH64_OPND_QLF_S_4B qualifier.
+
 2018-10-10  Jan Beulich  <jbeulich@suse.com>
 
        * i386-gen.c (opcode_modifiers): Drop Size16, Size32, and
 
   {4, 1, 0x2, "s", OQK_OPD_VARIANT},
   {8, 1, 0x3, "d", OQK_OPD_VARIANT},
   {16, 1, 0x4, "q", OQK_OPD_VARIANT},
-  {1, 4, 0x0, "4b", OQK_OPD_VARIANT},
+  {4, 1, 0x0, "4b", OQK_OPD_VARIANT},
 
   {1, 4, 0x0, "4b", OQK_OPD_VARIANT},
   {1, 8, 0x0, "8b", OQK_OPD_VARIANT},
       else
        num = 16;
       num = num / aarch64_get_qualifier_esize (qualifier) - 1;
+      assert (aarch64_get_qualifier_nelem (qualifier) == 1);
 
       /* Index out-of-range.  */
       if (!value_in_range_p (opnd->reglane.index, 0, num))