This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
Re: [committed] Fix bug target/30634
- From: "John David Anglin" <dave at hiauly1 dot hia dot nrc dot ca>
- To: dave at hiauly1 dot hia dot nrc dot ca (John David Anglin)
- Cc: gcc-patches at gcc dot gnu dot org
- Date: Tue, 27 Feb 2007 19:38:29 -0500 (EST)
- Subject: Re: [committed] Fix bug target/30634
> Tested on hppa64-hp-hpux11.11 with no regressions.
Unfortunately, I somehow missed in testing that the 64-bit DFmode
move pattern contained bugs and didn't actually support a zero
CONST_DOUBLE as a source operand as intended. The enclosed change
corrects this deficiency.
Tested on hppa64-hp-hpux11.11 and hppa-unknown-linux-gnu with no
observed regressions. Committed to 4.1, 4.2 and trunk.
Dave
--
J. David Anglin dave.anglin@nrc-cnrc.gc.ca
National Research Council of Canada (613) 990-0752 (FAX: 952-6602)
2007-02-27 John David Anglin <dave.anglin@nrc-cnrc.gc.ca>
* pa/predicates.md (move_src_operand): Allow zero for mode.
* pa/pa.md: Fix constraints for zero CONST_DOUBLE in 64-bit DFmode
move pattern.
Index: config/pa/predicates.md
===================================================================
--- config/pa/predicates.md (revision 122374)
+++ config/pa/predicates.md (working copy)
@@ -207,11 +207,14 @@
;; instruction.
(define_predicate "move_src_operand"
- (match_code "subreg,reg,const_int,mem")
+ (match_code "subreg,reg,const_int,const_double,mem")
{
if (register_operand (op, mode))
return 1;
+ if (op == CONST0_RTX (mode))
+ return 1;
+
if (GET_CODE (op) == CONST_INT)
return cint_ok_for_move (INTVAL (op));
Index: config/pa/pa.md
===================================================================
--- config/pa/pa.md (revision 122374)
+++ config/pa/pa.md (working copy)
@@ -4343,7 +4343,7 @@
[(set (match_operand:DF 0 "move_dest_operand"
"=!*r,*r,*r,*r,*r,Q,f,f,T")
(match_operand:DF 1 "move_src_operand"
- "!*r,J,N,K,RQ,*rM,fM,RT,f"))]
+ "!*r,J,N,K,RQ,*rG,fG,RT,f"))]
"(register_operand (operands[0], DFmode)
|| reg_or_0_operand (operands[1], DFmode))
&& !TARGET_SOFT_FLOAT && TARGET_64BIT"