+2015-09-15 Alan Lawrence <alan.lawrence@arm.com>
+
+ * config/aarch64/aarch64.h (AARCH64_VALID_SIMD_DREG_MODE): New.
+
+ * config/aarch64/aarch64.c (aarch64_array_mode_supported_p): Add
+ AARCH64_VALID_SIMD_DREG_MODE.
+
2015-09-15 Alan Lawrence <alan.lawrence@arm.com>
* config/aarch64/aarch64-simd.md (aarch64_ld2r<mode>,
unsigned HOST_WIDE_INT nelems)
{
if (TARGET_SIMD
- && AARCH64_VALID_SIMD_QREG_MODE (mode)
+ && (AARCH64_VALID_SIMD_QREG_MODE (mode)
+ || AARCH64_VALID_SIMD_DREG_MODE (mode))
&& (nelems >= 2 && nelems <= 4))
return true;
(aarch64_cmodel == AARCH64_CMODEL_TINY \
|| aarch64_cmodel == AARCH64_CMODEL_TINY_PIC)
+/* Modes valid for AdvSIMD D registers, i.e. that fit in half a Q register. */
+#define AARCH64_VALID_SIMD_DREG_MODE(MODE) \
+ ((MODE) == V2SImode || (MODE) == V4HImode || (MODE) == V8QImode \
+ || (MODE) == V2SFmode || (MODE) == V4HFmode || (MODE) == DImode \
+ || (MODE) == DFmode)
+
/* Modes valid for AdvSIMD Q registers. */
#define AARCH64_VALID_SIMD_QREG_MODE(MODE) \
((MODE) == V4SImode || (MODE) == V8HImode || (MODE) == V16QImode \
+2015-09-15 Alan Lawrence <alan.lawrence@arm.com>
+
+ * gcc.target/aarch64/vect_int32x2x4_1.c: New.
+
2015-09-15 Richard Biener <rguenther@suse.de>
PR middle-end/67563
--- /dev/null
+/* { dg-do compile } */
+/* { dg-options "-O3 -fdump-rtl-expand" } */
+
+#include <arm_neon.h>
+
+uint32x2x4_t
+test_1 (uint32x2x4_t a, uint32x2x4_t b)
+{
+ uint32x2x4_t result;
+
+ for (unsigned index = 0; index < 4; ++index)
+ result.val[index] = a.val[index] + b.val[index];
+
+ return result;
+}
+
+/* Should not use the stack in expand. */
+/* { dg-final { scan-rtl-dump-not "virtual-stack-vars" "expand" } } */
+/* Should not have to modify the stack pointer. */
+/* { dg-final { scan-assembler-not "\t(add|sub).*sp" } } */
+/* Should not have to store or load anything. */
+/* { dg-final { scan-assembler-not "\t(ld|st)\[rp\]" } } */