From 4bb437245c40db0a3c3e5bf330892bbe76d015a8 Mon Sep 17 00:00:00 2001 From: Richard Henderson Date: Mon, 15 Sep 1997 15:36:34 -0700 Subject: [PATCH] Patch from Richard Henderson for alpha-linux ld.so bug. * alpha.md (movdi): Handle CONST_DOUBLE for TARGET_BUILD_CONSTANTS. From-SVN: r15459 --- gcc/ChangeLog | 2 ++ gcc/config/alpha/alpha.md | 49 ++++++++++++++++++++++++--------------- 2 files changed, 32 insertions(+), 19 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 0fd4105b350..a6daaa8fe26 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,5 +1,7 @@ Mon Sep 15 15:24:00 1997 Richard Henderson + * alpha.md (movdi): Handle CONST_DOUBLE for TARGET_BUILD_CONSTANTS. + * alpha/alpha.c (output_prolog): New variable sa_reg. Use it for out-or-range reg_offset. (output_epilog): Likewise. diff --git a/gcc/config/alpha/alpha.md b/gcc/config/alpha/alpha.md index ce451839ad4..d718481642c 100644 --- a/gcc/config/alpha/alpha.md +++ b/gcc/config/alpha/alpha.md @@ -3830,30 +3830,41 @@ else operands[1] = tem; } - else if (TARGET_BUILD_CONSTANTS - && GET_CODE (operands[1]) == CONST_INT) - { -#if HOST_BITS_PER_WIDE_INT == 64 - tem = alpha_emit_set_long_const (operands[0], INTVAL (operands[1])); - if (rtx_equal_p (tem, operands[0])) - DONE; - else - operands[1] = tem; -#else - abort(); -#endif - } else if (CONSTANT_P (operands[1])) { - operands[1] = force_const_mem (DImode, operands[1]); - if (reload_in_progress) + if (TARGET_BUILD_CONSTANTS) { - emit_move_insn (operands[0], XEXP (operands[1], 0)); - operands[1] = copy_rtx (operands[1]); - XEXP (operands[1], 0) = operands[0]; +#if HOST_BITS_PER_WIDE_INT == 64 + HOST_WIDE_INT i; + + if (GET_CODE (operands[1]) == CONST_INT) + i = INTVAL (operands[1]); + else if (GET_CODE (operands[1]) == CONST_DOUBLE) + i = CONST_DOUBLE_LOW (operands[1]); + else + abort(); + + tem = alpha_emit_set_long_const (operands[0], i); + if (rtx_equal_p (tem, operands[0])) + DONE; + else + operands[1] = tem; +#else + abort(); +#endif } else - operands[1] = validize_mem (operands[1]); + { + operands[1] = force_const_mem (DImode, operands[1]); + if (reload_in_progress) + { + emit_move_insn (operands[0], XEXP (operands[1], 0)); + operands[1] = copy_rtx (operands[1]); + XEXP (operands[1], 0) = operands[0]; + } + else + operands[1] = validize_mem (operands[1]); + } } else abort ();