]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
mips.md (fix_truncdfsi2, [...]): Change *.
authorJim Wilson <wilson@cygnus.com>
Mon, 1 Dec 1997 22:24:11 +0000 (22:24 +0000)
committerJeff Law <law@gcc.gnu.org>
Mon, 1 Dec 1997 22:24:11 +0000 (15:24 -0700)
        * mips.md (fix_truncdfsi2, fix_truncsfsi2, fix_truncdfdi2,
        fix_truncsfdi2): Change *.

From-SVN: r16875

gcc/ChangeLog
gcc/config/mips/mips.md

index f43343cd14921c52d8705b8599e2e9bab777dc5c..1ccb9f80efd50fc16b5af10df88781bbfcaff0f6 100644 (file)
@@ -1,3 +1,8 @@
+Tue Nov 25 14:08:12 1997  Jim Wilson  <wilson@cygnus.com>
+
+       * mips.md (fix_truncdfsi2, fix_truncsfsi2, fix_truncdfdi2,
+       fix_truncsfdi2): Change *.
+
 Sun Nov 30 19:59:20 1997  Jason Merrill  <jason@yorick.cygnus.com>
 
        * stmt.c (expand_decl_cleanup): Update thisblock after eh_region_start.
index 8bc70b770d8ee0af81e7507c8072c02e35ee4a48..3d2b255c74b390e9c6407a134dd219a7150fdc78 100644 (file)
@@ -2731,11 +2731,17 @@ move\\t%0,%z4\\n\\
 ;; operand zero, because then the address in the move instruction will be
 ;; clobbered.  We mark the scratch register as early clobbered to prevent this.
 
+;; We need the ?X in alternative 1 so that it will be choosen only if the
+;; destination is a floating point register.  Otherwise, alternative 1 can
+;; have lower cost than alternative 0 (because there is one less loser), and
+;; can be choosen when it won't work (because integral reloads into FP
+;; registers are not supported).
+
 (define_insn "fix_truncdfsi2"
   [(set (match_operand:SI 0 "general_operand" "=d,*f,R,o")
        (fix:SI (match_operand:DF 1 "register_operand" "f,*f,f,f")))
    (clobber (match_scratch:SI 2 "=d,*d,&d,&d"))
-   (clobber (match_scratch:DF 3 "=f,*X,f,f"))]
+   (clobber (match_scratch:DF 3 "=f,?*X,f,f"))]
   "TARGET_HARD_FLOAT && TARGET_DOUBLE_FLOAT"
   "*
 {
@@ -2760,7 +2766,7 @@ move\\t%0,%z4\\n\\
   [(set (match_operand:SI 0 "general_operand" "=d,*f,R,o")
        (fix:SI (match_operand:SF 1 "register_operand" "f,*f,f,f")))
    (clobber (match_scratch:SI 2 "=d,*d,&d,&d"))
-   (clobber (match_scratch:SF 3 "=f,*X,f,f"))]
+   (clobber (match_scratch:SF 3 "=f,?*X,f,f"))]
   "TARGET_HARD_FLOAT"
   "*
 {
@@ -2793,7 +2799,7 @@ move\\t%0,%z4\\n\\
 (define_insn "fix_truncdfdi2"
   [(set (match_operand:DI 0 "general_operand" "=d,*f,R,o")
        (fix:DI (match_operand:DF 1 "register_operand" "f,*f,f,f")))
-   (clobber (match_scratch:DF 2 "=f,*X,f,f"))]
+   (clobber (match_scratch:DF 2 "=f,?*X,f,f"))]
   "TARGET_HARD_FLOAT && TARGET_64BIT && TARGET_DOUBLE_FLOAT"
   "*
 {
@@ -2820,7 +2826,7 @@ move\\t%0,%z4\\n\\
 (define_insn "fix_truncsfdi2"
   [(set (match_operand:DI 0 "general_operand" "=d,*f,R,o")
        (fix:DI (match_operand:SF 1 "register_operand" "f,*f,f,f")))
-   (clobber (match_scratch:DF 2 "=f,*X,f,f"))]
+   (clobber (match_scratch:DF 2 "=f,?*X,f,f"))]
   "TARGET_HARD_FLOAT && TARGET_64BIT && TARGET_DOUBLE_FLOAT"
   "*
 {