+2011-02-28 Kazu Hirata <kazu@codesourcery.com>
+
+ * gcc.target/arm/vfp-ldmdbd.c, gcc.target/arm/vfp-ldmdbs.c,
+ gcc.target/arm/vfp-ldmiad.c, gcc.target/arm/vfp-ldmias.c,
+ gcc.target/arm/vfp-stmdbd.c, gcc.target/arm/vfp-stmdbs.c,
+ gcc.target/arm/vfp-stmiad.c, gcc.target/arm/vfp-stmias.c: New.
+
2011-02-28 Jason Merrill <jason@redhat.com>
PR c++/47906
--- /dev/null
+/* { dg-do compile } */
+/* { dg-require-effective-target arm_vfp_ok } */
+/* { dg-options "-O2 -mfpu=vfp -mfloat-abi=softfp" } */
+
+extern void bar (double);
+
+void
+foo (double *p, double a, int n)
+{
+ do
+ bar (*--p + a);
+ while (n--);
+}
+
+/* { dg-final { scan-assembler "fldmdbd" } } */
--- /dev/null
+/* { dg-do compile } */
+/* { dg-require-effective-target arm_vfp_ok } */
+/* { dg-options "-O2 -mfpu=vfp -mfloat-abi=softfp" } */
+
+extern void baz (float);
+
+void
+foo (float *p, float a, int n)
+{
+ do
+ bar (*--p + a);
+ while (n--);
+}
+
+/* { dg-final { scan-assembler "fldmdbs" } } */
--- /dev/null
+/* { dg-do compile } */
+/* { dg-require-effective-target arm_vfp_ok } */
+/* { dg-options "-O2 -mfpu=vfp -mfloat-abi=softfp" } */
+
+extern void bar (double);
+
+void
+foo (double *p, double a, int n)
+{
+ do
+ bar (*p++ + a);
+ while (n--);
+}
+
+/* { dg-final { scan-assembler "fldmiad" } } */
--- /dev/null
+/* { dg-do compile } */
+/* { dg-require-effective-target arm_vfp_ok } */
+/* { dg-options "-O2 -mfpu=vfp -mfloat-abi=softfp" } */
+
+extern void baz (float);
+
+void
+foo (float *p, float a, int n)
+{
+ do
+ bar (*p++ + a);
+ while (n--);
+}
+
+/* { dg-final { scan-assembler "fldmias" } } */
--- /dev/null
+/* { dg-do compile } */
+/* { dg-require-effective-target arm_vfp_ok } */
+/* { dg-options "-O2 -mfpu=vfp -mfloat-abi=softfp" } */
+
+void
+foo (double *p, double a, double b, int n)
+{
+ double c = a + b;
+ do
+ *--p = c;
+ while (n--);
+}
+
+/* { dg-final { scan-assembler "fstmdbd" } } */
--- /dev/null
+/* { dg-do compile } */
+/* { dg-require-effective-target arm_vfp_ok } */
+/* { dg-options "-O2 -mfpu=vfp -mfloat-abi=softfp" } */
+
+void
+foo (float *p, float a, float b, int n)
+{
+ float c = a + b;
+ do
+ *--p = c;
+ while (n--);
+}
+
+/* { dg-final { scan-assembler "fstmdbs" } } */
--- /dev/null
+/* { dg-do compile } */
+/* { dg-require-effective-target arm_vfp_ok } */
+/* { dg-options "-O2 -mfpu=vfp -mfloat-abi=softfp" } */
+
+void
+foo (double *p, double a, double b, int n)
+{
+ double c = a + b;
+ do
+ *p++ = c;
+ while (n--);
+}
+
+/* { dg-final { scan-assembler "fstmiad" } } */
--- /dev/null
+/* { dg-do compile } */
+/* { dg-require-effective-target arm_vfp_ok } */
+/* { dg-options "-O2 -mfpu=vfp -mfloat-abi=softfp" } */
+
+void
+foo (float *p, float a, float b, int n)
+{
+ float c = a + b;
+ do
+ *p++ = c;
+ while (n--);
+}
+
+/* { dg-final { scan-assembler "fstmias" } } */