arm.c (neon_vector_mem_operand): Allow register POST_MODIFY for neon loads and stores.

2014-06-18  Charles Baylis  <charles.baylis@linaro.org>

	* 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
This commit is contained in:
Charles Baylis 2014-06-18 13:42:44 +00:00 committed by Charles Baylis
parent 54ed41ea0c
commit 7b5b78b16b
2 changed files with 20 additions and 1 deletions

View File

@ -1,3 +1,10 @@
2014-06-18 Charles Baylis <charles.baylis@linaro.org>
* 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 <rguenther@suse.de>
* tree-ssa-dce.c (perform_tree_ssa_dce): Fixup bogus commit.

View File

@ -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;