diff options
author | Richard Henderson <rth@cygnus.com> | 1997-09-15 15:36:34 -0700 |
---|---|---|
committer | Jim Wilson <wilson@gcc.gnu.org> | 1997-09-15 15:36:34 -0700 |
commit | 4bb437245c40db0a3c3e5bf330892bbe76d015a8 (patch) | |
tree | ae5ba0bc3fb1155697a5cebbb5cdadc4a541e02d /gcc | |
parent | 0d24ff5d2450f8de4c1b6aa1e7b727cf49bc2e1b (diff) | |
download | gcc-4bb437245c40db0a3c3e5bf330892bbe76d015a8.zip gcc-4bb437245c40db0a3c3e5bf330892bbe76d015a8.tar.gz gcc-4bb437245c40db0a3c3e5bf330892bbe76d015a8.tar.bz2 |
Patch from Richard Henderson for alpha-linux ld.so bug.
* alpha.md (movdi): Handle CONST_DOUBLE for TARGET_BUILD_CONSTANTS.
From-SVN: r15459
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 2 | ||||
-rw-r--r-- | gcc/config/alpha/alpha.md | 47 |
2 files changed, 31 insertions, 18 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 0fd4105..a6daaa8 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,5 +1,7 @@ Mon Sep 15 15:24:00 1997 Richard Henderson <rth@cygnus.com> + * 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 ce45183..d718481 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) + else if (CONSTANT_P (operands[1])) { + if (TARGET_BUILD_CONSTANTS) + { #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; + 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(); + abort(); #endif - } - else if (CONSTANT_P (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]); + { + 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 (); |