Backport from Linaro GCC 4.9.2. 50/47850/2
authorMaxim Ostapenko <m.ostapenko@partner.samsung.com>
Tue, 8 Sep 2015 14:23:18 +0000 (17:23 +0300)
committerMaxim Ostapenko <m.ostapenko@partner.samsung.com>
Thu, 10 Sep 2015 08:01:09 +0000 (11:01 +0300)
@TC-330
@TC-331

2014-12-04  Yvan Roux  <yvan.roux@linaro.org>

Backport from trunk r214008.
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.

Change-Id: I53bf200821c2ca5bba505e4ff8c8230a1413ecd3
git-svn-id: svn://gcc.gnu.org/svn/gcc/branches/linaro/gcc-4_9-branch@218354 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/config/aarch64/aarch64.c

index 864715b..a2971a9 100644 (file)
@@ -1089,24 +1089,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;
 
@@ -1223,6 +1205,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;