aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorYvan Roux <yvan.roux@linaro.org>2015-11-19 08:54:57 +0100
committerLinaro Code Review <review@review.linaro.org>2015-11-20 12:24:33 +0000
commit46d65a9e66c261a7e560d9a8cd4be0f47af28eda (patch)
treeb892c6d28dbfb6ff41286a554322c7fb82791bac
parent45b4048b9a75609c51f4ff3421d4535f13b54271 (diff)
gcc/
Backport from trunk r229454. 2015-10-27 Kyrylo Tkachov <kyrylo.tkachov@arm.com> * config/aarch64/aarch64.c (aarch64_output_simd_mov_immediate): Handle floating point inner modes properly. Change-Id: I30d755f35f83e9ec5c2b28cb7043cd5503bb3331
-rw-r--r--gcc/config/aarch64/aarch64.c5
1 files changed, 4 insertions, 1 deletions
diff --git a/gcc/config/aarch64/aarch64.c b/gcc/config/aarch64/aarch64.c
index 7ace288da4b..d2a2a331ad4 100644
--- a/gcc/config/aarch64/aarch64.c
+++ b/gcc/config/aarch64/aarch64.c
@@ -11095,9 +11095,11 @@ aarch64_output_simd_mov_immediate (rtx const_vector,
lane_count = width / info.element_width;
mode = GET_MODE_INNER (mode);
- if (mode == SFmode || mode == DFmode)
+ if (GET_MODE_CLASS (mode) == MODE_FLOAT)
{
gcc_assert (info.shift == 0 && ! info.mvn);
+ /* For FP zero change it to a CONST_INT 0 and use the integer SIMD
+ move immediate path. */
if (aarch64_float_const_zero_rtx_p (info.value))
info.value = GEN_INT (0);
else
@@ -11121,6 +11123,7 @@ aarch64_output_simd_mov_immediate (rtx const_vector,
mnemonic = info.mvn ? "mvni" : "movi";
shift_op = info.msl ? "msl" : "lsl";
+ gcc_assert (CONST_INT_P (info.value));
if (lane_count == 1)
snprintf (templ, sizeof (templ), "%s\t%%d0, " HOST_WIDE_INT_PRINT_HEX,
mnemonic, UINTVAL (info.value));