aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorKyrylo Tkachov <kyrylo.tkachov@arm.com>2015-10-27 18:30:55 +0000
committerKyrylo Tkachov <ktkachov@gcc.gnu.org>2015-10-27 18:30:55 +0000
commit0d8e1702cfe8da6c3af6485aaba8c3d006cd3791 (patch)
treef9da31709df6731bb4287085027287d1e4804521 /gcc
parentb7ddd3f14f3a5f3b9023b2b360c05c6426f37500 (diff)
downloadgcc-0d8e1702cfe8da6c3af6485aaba8c3d006cd3791.zip
gcc-0d8e1702cfe8da6c3af6485aaba8c3d006cd3791.tar.gz
gcc-0d8e1702cfe8da6c3af6485aaba8c3d006cd3791.tar.bz2
[AArch64] Handle vector float modes properly in aarch64_output_simd_mov_immediate
* config/aarch64/aarch64.c (aarch64_output_simd_mov_immediate): Handle floating point inner modes properly. From-SVN: r229454
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog5
-rw-r--r--gcc/config/aarch64/aarch64.c5
2 files changed, 9 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index f26446c..ac7bba4 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,8 @@
+2015-10-27 Kyrylo Tkachov <kyrylo.tkachov@arm.com>
+
+ * config/aarch64/aarch64.c (aarch64_output_simd_mov_immediate):
+ Handle floating point inner modes properly.
+
2015-10-27 Alan Hayward <alan.hayward@arm.com>
* tree-vect-looop.c
diff --git a/gcc/config/aarch64/aarch64.c b/gcc/config/aarch64/aarch64.c
index 4965041..5c8604f 100644
--- a/gcc/config/aarch64/aarch64.c
+++ b/gcc/config/aarch64/aarch64.c
@@ -11450,9 +11450,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
@@ -11476,6 +11478,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));