From 7b5b78b16b55c498cb1b0279ea8d139a0266b497 Mon Sep 17 00:00:00 2001 From: Charles Baylis Date: Wed, 18 Jun 2014 13:42:44 +0000 Subject: [PATCH] arm.c (neon_vector_mem_operand): Allow register POST_MODIFY for neon loads and stores. 2014-06-18 Charles Baylis * config/arm/arm.c (neon_vector_mem_operand): Allow register POST_MODIFY for neon loads and stores. (arm_print_operand): Output post-index register for neon loads and stores. From-SVN: r211783 --- gcc/ChangeLog | 7 +++++++ gcc/config/arm/arm.c | 14 +++++++++++++- 2 files changed, 20 insertions(+), 1 deletion(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index d3e6d53bca2..114240b306d 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,10 @@ +2014-06-18 Charles Baylis + + * config/arm/arm.c (neon_vector_mem_operand): Allow register + POST_MODIFY for neon loads and stores. + (arm_print_operand): Output post-index register for neon loads and + stores. + 2014-06-18 Richard Biener * tree-ssa-dce.c (perform_tree_ssa_dce): Fixup bogus commit. diff --git a/gcc/config/arm/arm.c b/gcc/config/arm/arm.c index 463707ea206..ffe8e2105ab 100644 --- a/gcc/config/arm/arm.c +++ b/gcc/config/arm/arm.c @@ -12792,7 +12792,11 @@ neon_vector_mem_operand (rtx op, int type, bool strict) || (type == 0 && GET_CODE (ind) == PRE_DEC)) return arm_address_register_rtx_p (XEXP (ind, 0), 0); - /* FIXME: vld1 allows register post-modify. */ + /* Allow post-increment by register for VLDn */ + if (type == 2 && GET_CODE (ind) == POST_MODIFY + && GET_CODE (XEXP (ind, 1)) == PLUS + && REG_P (XEXP (XEXP (ind, 1), 1))) + return true; /* Match: (plus (reg) @@ -21824,6 +21828,7 @@ arm_print_operand (FILE *stream, rtx x, int code) { rtx addr; bool postinc = FALSE; + rtx postinc_reg = NULL; unsigned align, memsize, align_bits; gcc_assert (MEM_P (x)); @@ -21833,6 +21838,11 @@ arm_print_operand (FILE *stream, rtx x, int code) postinc = 1; addr = XEXP (addr, 0); } + if (GET_CODE (addr) == POST_MODIFY) + { + postinc_reg = XEXP( XEXP (addr, 1), 1); + addr = XEXP (addr, 0); + } asm_fprintf (stream, "[%r", REGNO (addr)); /* We know the alignment of this access, so we can emit a hint in the @@ -21858,6 +21868,8 @@ arm_print_operand (FILE *stream, rtx x, int code) if (postinc) fputs("!", stream); + if (postinc_reg) + asm_fprintf (stream, ", %r", REGNO (postinc_reg)); } return; -- 2.11.4.GIT