* config/alpha/alpha.c (alpha_trampoline_init): Split large constants.
authorRichard Henderson <rth@redhat.com>
Mon, 11 Jun 2012 23:03:14 +0000 (16:03 -0700)
committerRichard Henderson <rth@gcc.gnu.org>
Mon, 11 Jun 2012 23:03:14 +0000 (16:03 -0700)
From-SVN: r188405

gcc/ChangeLog
gcc/config/alpha/alpha.c

index 176e62141b52799f4bbe3959e0d870ceb5dc1b03..5f32514124b7416f31efd100cc7734e5fa1ebe37 100644 (file)
@@ -1,3 +1,7 @@
+2012-06-11  Richard Henderson  <rth@redhat.com>
+
+       * config/alpha/alpha.c (alpha_trampoline_init): Split large constants.
+
 2012-06-12  Hans-Peter Nilsson  <hp@axis.com>
 
        * doc/tm.texi.in (Addressing Modes) <TARGET_LEGITIMIZE_ADDRESS>:
index 6d15bf70cffe143f4b75ea6fc34a1ebe052db46b..3dda9fb0b16dc68699f4f971c0f00c439a826666 100644 (file)
@@ -5451,6 +5451,8 @@ alpha_trampoline_init (rtx m_tramp, tree fndecl, rtx chain_value)
   chain_value = convert_memory_address (Pmode, chain_value);
 #endif
 
+#define HWI_HEX2(X,Y)  (((HOST_WIDE_INT)0x ## X ## u) | 0x ## Y ## u)
+
   if (TARGET_ABI_OPEN_VMS)
     {
       const char *fnname;
@@ -5468,7 +5470,8 @@ alpha_trampoline_init (rtx m_tramp, tree fndecl, rtx chain_value)
         the function's procedure descriptor with certain fields zeroed IAW
         the VMS calling standard. This is stored in the first quadword.  */
       word1 = force_reg (DImode, gen_const_mem (DImode, fnaddr));
-      word1 = expand_and (DImode, word1, GEN_INT (0xffff0fff0000fff0), NULL);
+      word1 = expand_and (DImode, word1,
+                         GEN_INT (HWI_HEX2(ffff0fff,0000fff0)), NULL);
     }
   else
     {
@@ -5479,10 +5482,12 @@ alpha_trampoline_init (rtx m_tramp, tree fndecl, rtx chain_value)
            nop
         We don't bother setting the HINT field of the jump; the nop
         is merely there for padding.  */
-      word1 = GEN_INT (0xa77b0010a43b0018);
-      word2 = GEN_INT (0x47ff041f6bfb0000);
+      word1 = GEN_INT (HWI_HEX2 (a77b0010,a43b0018));
+      word2 = GEN_INT (HWI_HEX2 (47ff041f,6bfb0000));
     }
 
+#undef HWI_HEX2
+
   /* Store the first two words, as computed above.  */
   mem = adjust_address (m_tramp, DImode, 0);
   emit_move_insn (mem, word1);