+2008-03-21 Andrew Pinski <andrew_pinski@playstation.sony.com>
+
+ PR target/27947
+ * config/rs6000/rs6000.md (floatdidf2): Discouraging fprs and
+ encouraging but not allowing gprs for input;
+ change the input constraint to !f#r.
+ (fix_truncdfdi2): Discouraging fprs and encouraging but not allowing
+ gprs for output;
+ change the output constraint to !f#r.
+
2008-03-21 Uros Bizjak <ubizjak@gmail.com>
PR target/13958
(define_insn "floatdidf2"
[(set (match_operand:DF 0 "gpc_reg_operand" "=f")
- (float:DF (match_operand:DI 1 "gpc_reg_operand" "*f")))]
+ (float:DF (match_operand:DI 1 "gpc_reg_operand" "!f#r")))]
"TARGET_POWERPC64 && TARGET_HARD_FLOAT && TARGET_FPRS"
"fcfid %0,%1"
[(set_attr "type" "fp")])
"")
(define_insn "fix_truncdfdi2"
- [(set (match_operand:DI 0 "gpc_reg_operand" "=*f")
+ [(set (match_operand:DI 0 "gpc_reg_operand" "=!f#r")
(fix:DI (match_operand:DF 1 "gpc_reg_operand" "f")))]
"TARGET_POWERPC64 && TARGET_HARD_FLOAT && TARGET_FPRS"
"fctidz %0,%1"
;; from double rounding.
(define_insn_and_split "floatdisf2_internal1"
[(set (match_operand:SF 0 "gpc_reg_operand" "=f")
- (float:SF (match_operand:DI 1 "gpc_reg_operand" "*f")))
+ (float:SF (match_operand:DI 1 "gpc_reg_operand" "!f#r")))
(clobber (match_scratch:DF 2 "=f"))]
"TARGET_POWERPC64 && TARGET_HARD_FLOAT && TARGET_FPRS"
"#"
+2008-03-21 Andrew Pinski <andrew_pinski@playstation.sony.com>
+
+ PR target/27947
+ * gcc.target/powerpc/ppc64-double-1.c: New testcase.
+
2008-03-21 Thomas Koenig <tkoenig@gcc.gnu.org>
PR libfortran/32972
--- /dev/null
+// { dg-do compile }
+// { dg-options "-O2 -mpowerpc64" }
+// { dg-final { scan-assembler-not "stfd" } }
+
+// The register allocator should have allocated the temporary long long value in a floating point register.
+
+double
+d2ll2d (double d)
+{
+ return (double)(long long)d;
+}