Commit 4522854a by Richard Henderson Committed by Richard Henderson

* config/alpha/alpha.c (alpha_trampoline_init): Split large constants.

From-SVN: r188405
parent f938987f
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> 2012-06-12 Hans-Peter Nilsson <hp@axis.com>
* doc/tm.texi.in (Addressing Modes) <TARGET_LEGITIMIZE_ADDRESS>: * doc/tm.texi.in (Addressing Modes) <TARGET_LEGITIMIZE_ADDRESS>:
......
...@@ -5451,6 +5451,8 @@ alpha_trampoline_init (rtx m_tramp, tree fndecl, rtx chain_value) ...@@ -5451,6 +5451,8 @@ alpha_trampoline_init (rtx m_tramp, tree fndecl, rtx chain_value)
chain_value = convert_memory_address (Pmode, chain_value); chain_value = convert_memory_address (Pmode, chain_value);
#endif #endif
#define HWI_HEX2(X,Y) (((HOST_WIDE_INT)0x ## X ## u) | 0x ## Y ## u)
if (TARGET_ABI_OPEN_VMS) if (TARGET_ABI_OPEN_VMS)
{ {
const char *fnname; const char *fnname;
...@@ -5468,7 +5470,8 @@ alpha_trampoline_init (rtx m_tramp, tree fndecl, rtx chain_value) ...@@ -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 function's procedure descriptor with certain fields zeroed IAW
the VMS calling standard. This is stored in the first quadword. */ the VMS calling standard. This is stored in the first quadword. */
word1 = force_reg (DImode, gen_const_mem (DImode, fnaddr)); 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 else
{ {
...@@ -5479,10 +5482,12 @@ alpha_trampoline_init (rtx m_tramp, tree fndecl, rtx chain_value) ...@@ -5479,10 +5482,12 @@ alpha_trampoline_init (rtx m_tramp, tree fndecl, rtx chain_value)
nop nop
We don't bother setting the HINT field of the jump; the nop We don't bother setting the HINT field of the jump; the nop
is merely there for padding. */ is merely there for padding. */
word1 = GEN_INT (0xa77b0010a43b0018); word1 = GEN_INT (HWI_HEX2 (a77b0010,a43b0018));
word2 = GEN_INT (0x47ff041f6bfb0000); word2 = GEN_INT (HWI_HEX2 (47ff041f,6bfb0000));
} }
#undef HWI_HEX2
/* Store the first two words, as computed above. */ /* Store the first two words, as computed above. */
mem = adjust_address (m_tramp, DImode, 0); mem = adjust_address (m_tramp, DImode, 0);
emit_move_insn (mem, word1); emit_move_insn (mem, word1);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment