]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
[AArch64] Move one_match > zero_match case to just before simple_sequence.
authorKyrylo Tkachov <kyrylo.tkachov@arm.com>
Fri, 15 Aug 2014 09:02:27 +0000 (09:02 +0000)
committerKyrylo Tkachov <ktkachov@gcc.gnu.org>
Fri, 15 Aug 2014 09:02:27 +0000 (09:02 +0000)
* config/aarch64/aarch64.c (aarch64_expand_mov_immediate): Move
one_match > zero_match case to just before simple_sequence.

From-SVN: r214008

gcc/ChangeLog
gcc/config/aarch64/aarch64.c

index 3134daa6f0a83d01981de0e5c9fd8d0ed36ac570..6ec54a5d8494e61eeb165d8beb0a899bb2cdcbd8 100644 (file)
@@ -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):
index e7946fc0b70ced70a4e98caa0a33121f29242aad..c3c871eca97154b9ce4fc7b6c9a972555c94d967 100644 (file)
@@ -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;