diff options
author | Kyrylo Tkachov <kyrylo.tkachov@arm.com> | 2014-08-15 09:02:27 +0000 |
---|---|---|
committer | Kyrylo Tkachov <ktkachov@gcc.gnu.org> | 2014-08-15 09:02:27 +0000 |
commit | 2c274197e9fb0fdc9c1aa4c6bfa089c72cca3658 (patch) | |
tree | 3d9ff5f80048286839c95f51be99c07883d9012d /gcc | |
parent | 4b5337e60efa264137d1a65e12c612cb50e98b42 (diff) | |
download | gcc-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/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/config/aarch64/aarch64.c | 36 |
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; |