diff options
author | bstarynk <bstarynk@138bc75d-0d04-0410-961f-82ee72b054a4> | 2012-06-01 06:14:40 +0000 |
---|---|---|
committer | bstarynk <bstarynk@138bc75d-0d04-0410-961f-82ee72b054a4> | 2012-06-01 06:14:40 +0000 |
commit | fed1769821d234adee6add59bbb97dd1c83ef232 (patch) | |
tree | f2cf22c041a236c0b6a8c34b163e91103660c904 /gcc/config/arm/arm.c | |
parent | 8e21b71a4f55ebda4156b75b62a9380c082ee5d4 (diff) | |
download | gcc-fed1769821d234adee6add59bbb97dd1c83ef232.tar.gz |
2012-06-01 Basile Starynkevitch <basile@starynkevitch.net>
MELT branch merged with trunk rev 188095 using svnmerge
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/melt-branch@188099 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/config/arm/arm.c')
-rw-r--r-- | gcc/config/arm/arm.c | 23 |
1 files changed, 15 insertions, 8 deletions
diff --git a/gcc/config/arm/arm.c b/gcc/config/arm/arm.c index 7a9819705e5..8a862275b5b 100644 --- a/gcc/config/arm/arm.c +++ b/gcc/config/arm/arm.c @@ -46,7 +46,6 @@ #include "ggc.h" #include "except.h" #include "c-family/c-pragma.h" /* ??? */ -#include "integrate.h" #include "tm_p.h" #include "target.h" #include "target-def.h" @@ -2588,7 +2587,7 @@ optimal_immediate_sequence (enum rtx_code code, unsigned HOST_WIDE_INT val, int insns1, insns2; struct four_ints tmp_sequence; - /* If we aren't targetting ARM, the best place to start is always at + /* If we aren't targeting ARM, the best place to start is always at the bottom, otherwise look more closely. */ if (TARGET_ARM) { @@ -8473,7 +8472,7 @@ cortex_a9_sched_adjust_cost (rtx insn, rtx link, rtx dep, int * cost) && reg_overlap_mentioned_p (SET_DEST (PATTERN (insn)), SET_DEST (PATTERN (dep)))) { - /* FMACS is a special case where the dependant + /* FMACS is a special case where the dependent instruction can be issued 3 cycles before the normal latency in case of an output dependency. */ @@ -9459,7 +9458,7 @@ neon_expand_vector_init (rtx target, rtx vals) /* Construct the vector in memory one field at a time and load the whole vector. */ - mem = assign_stack_temp (mode, GET_MODE_SIZE (mode), 0); + mem = assign_stack_temp (mode, GET_MODE_SIZE (mode)); for (i = 0; i < n_elts; i++) emit_move_insn (adjust_address_nv (mem, inner_mode, i * GET_MODE_SIZE (inner_mode)), @@ -16187,7 +16186,7 @@ arm_output_epilogue (rtx sibling) now we have to use add/sub in those cases. However, the value of that would be marginal, as both mov and add/sub are 32-bit in ARM mode, and it would require extra conditionals - in arm_expand_prologue to distingish ARM-apcs-frame case + in arm_expand_prologue to distinguish ARM-apcs-frame case (where frame pointer is required to point at first register) and ARM-non-apcs-frame. Therefore, such change is postponed until real need arise. */ @@ -25638,10 +25637,18 @@ arm_evpc_neon_vrev (struct expand_vec_perm_d *d) return false; } - for (i = 0; i < nelt; i += diff) + for (i = 0; i < nelt ; i += diff + 1) for (j = 0; j <= diff; j += 1) - if (d->perm[i + j] != i + diff - j) - return false; + { + /* This is guaranteed to be true as the value of diff + is 7, 3, 1 and we should have enough elements in the + queue to generate this. Getting a vector mask with a + value of diff other than these values implies that + something is wrong by the time we get here. */ + gcc_assert (i + j < nelt); + if (d->perm[i + j] != i + diff - j) + return false; + } /* Success! */ if (d->testing_p) |