aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorKyrylo Tkachov <kyrylo.tkachov@arm.com>2014-08-15 09:02:27 +0000
committerKyrylo Tkachov <ktkachov@gcc.gnu.org>2014-08-15 09:02:27 +0000
commit2c274197e9fb0fdc9c1aa4c6bfa089c72cca3658 (patch)
tree3d9ff5f80048286839c95f51be99c07883d9012d /gcc
parent4b5337e60efa264137d1a65e12c612cb50e98b42 (diff)
downloadgcc-2c274197e9fb0fdc9c1aa4c6bfa089c72cca3658.zip
gcc-2c274197e9fb0fdc9c1aa4c6bfa089c72cca3658.tar.gz
gcc-2c274197e9fb0fdc9c1aa4c6bfa089c72cca3658.tar.bz2
[AArch64] Move one_match > zero_match case to just before simple_sequence.
* config/aarch64/aarch64.c (aarch64_expand_mov_immediate): Move one_match > zero_match case to just before simple_sequence. From-SVN: r214008
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog5
-rw-r--r--gcc/config/aarch64/aarch64.c36
2 files changed, 23 insertions, 18 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 3134daa..6ec54a5 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,8 @@
+2014-08-15 Kyrylo Tkachov <kyrylo.tkachov@arm.com>
+
+ * config/aarch64/aarch64.c (aarch64_expand_mov_immediate): Move
+ one_match > zero_match case to just before simple_sequence.
+
2014-08-15 Richard Biener <rguenther@suse.de>
* data-streamer.h (streamer_string_index, string_for_index):
diff --git a/gcc/config/aarch64/aarch64.c b/gcc/config/aarch64/aarch64.c
index e7946fc..c3c871e 100644
--- a/gcc/config/aarch64/aarch64.c
+++ b/gcc/config/aarch64/aarch64.c
@@ -1132,24 +1132,6 @@ aarch64_expand_mov_immediate (rtx dest, rtx imm)
return;
}
- if (one_match > zero_match)
- {
- /* Set either first three quarters or all but the third. */
- mask = 0xffffll << (16 - first_not_ffff_match);
- emit_insn (gen_rtx_SET (VOIDmode, dest,
- GEN_INT (val | mask | 0xffffffff00000000ull)));
-
- /* Now insert other two quarters. */
- for (i = first_not_ffff_match + 16, mask <<= (first_not_ffff_match << 1);
- i < 64; i += 16, mask <<= 16)
- {
- if ((val & mask) != mask)
- emit_insn (gen_insv_immdi (dest, GEN_INT (i),
- GEN_INT ((val >> i) & 0xffff)));
- }
- return;
- }
-
if (zero_match == 2)
goto simple_sequence;
@@ -1266,6 +1248,24 @@ aarch64_expand_mov_immediate (rtx dest, rtx imm)
}
}
+ if (one_match > zero_match)
+ {
+ /* Set either first three quarters or all but the third. */
+ mask = 0xffffll << (16 - first_not_ffff_match);
+ emit_insn (gen_rtx_SET (VOIDmode, dest,
+ GEN_INT (val | mask | 0xffffffff00000000ull)));
+
+ /* Now insert other two quarters. */
+ for (i = first_not_ffff_match + 16, mask <<= (first_not_ffff_match << 1);
+ i < 64; i += 16, mask <<= 16)
+ {
+ if ((val & mask) != mask)
+ emit_insn (gen_insv_immdi (dest, GEN_INT (i),
+ GEN_INT ((val >> i) & 0xffff)));
+ }
+ return;
+ }
+
simple_sequence:
first = true;
mask = 0xffff;