diff options
author | Jeff Law <law@gcc.gnu.org> | 1997-02-19 18:14:34 -0700 |
---|---|---|
committer | Jeff Law <law@gcc.gnu.org> | 1997-02-19 18:14:34 -0700 |
commit | d66dec28ec8f045774cc765f1c3bcf8a469db1b2 (patch) | |
tree | ed1dd591e35d700502476317ccdb2c28e6557610 /gcc | |
parent | dd56b31fe93cd6e0ad09621b6eef91c7d8925671 (diff) | |
download | gcc-d66dec28ec8f045774cc765f1c3bcf8a469db1b2.zip gcc-d66dec28ec8f045774cc765f1c3bcf8a469db1b2.tar.gz gcc-d66dec28ec8f045774cc765f1c3bcf8a469db1b2.tar.bz2 |
pa.c (emit_move_sequence): Don't copy 0.0 (double precision) directly to memory...
* pa/pa.c (emit_move_sequence): Don't copy 0.0 (double precision)
directly to memory, go through a reg if reload hasn't started.
* pa/pa.md (main movdf pattern): Don't allow 0.0 (double precision)
to be copied directly to memory.
From-SVN: r13669
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/config/pa/pa.c | 9 | ||||
-rw-r--r-- | gcc/config/pa/pa.md | 2 |
2 files changed, 11 insertions, 0 deletions
diff --git a/gcc/config/pa/pa.c b/gcc/config/pa/pa.c index 3ed113b..221166f 100644 --- a/gcc/config/pa/pa.c +++ b/gcc/config/pa/pa.c @@ -1192,6 +1192,15 @@ emit_move_sequence (operands, mode, scratch_reg) } else if (GET_CODE (operand0) == MEM) { + if (mode == DFmode && operand1 == CONST0_RTX (mode) + && !(reload_in_progress || reload_completed)) + { + rtx temp = gen_reg_rtx (DFmode); + + emit_insn (gen_rtx (SET, VOIDmode, temp, operand1)); + emit_insn (gen_rtx (SET, VOIDmode, operand0, temp)); + return 1; + } if (register_operand (operand1, mode) || operand1 == CONST0_RTX (mode)) { /* Run this case quickly. */ diff --git a/gcc/config/pa/pa.md b/gcc/config/pa/pa.md index 774e33e..6748d53 100644 --- a/gcc/config/pa/pa.md +++ b/gcc/config/pa/pa.md @@ -2237,6 +2237,8 @@ "fG,*rG,f,*r,*r,RQ,o,Q"))] "(register_operand (operands[0], DFmode) || reg_or_0_operand (operands[1], DFmode)) + && ! (GET_CODE (operands[1]) == CONST_DOUBLE + && GET_CODE (operands[0]) == MEM) && ! TARGET_SOFT_FLOAT" "* { |