]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
Fix problems with -mno-fp-regs
authorMichael Meissner <meissner@redhat.com>
Tue, 21 Mar 2000 18:54:16 +0000 (18:54 +0000)
committerMichael Meissner <meissner@gcc.gnu.org>
Tue, 21 Mar 2000 18:54:16 +0000 (18:54 +0000)
From-SVN: r32672

gcc/ChangeLog
gcc/config/alpha/alpha.md

index e11a573be355d66c6182d1a9913f1735e52a387a..1d35900a05de304ebf215dae0016c81e63e35d05 100644 (file)
@@ -1,3 +1,11 @@
+2000-03-21  Michael Meissner  <meissner@redhat.com>
+
+       * config/alpha/alpha.md (floating point insns): Add TARGET_FP to
+       all floating point insns that just tested the macro
+       TARGET_HAS_XFLOATING_LIBS.
+       (movsf/movdf recognizers): Add separate insns if -mno-fp-regs is
+       used to only use the gprs.
+
 2000-03-21  Nathan Sidwell  <nathan@codesourcery.com>
 
        * tree.h (COMPLETE_TYPE_P): New macro.
index edba8cfbd93abd61b8534f1eeb6842bf583262ba..84a7ac3b5a0c08aae7deadb48c7f7541eea6f095 100644 (file)
 (define_expand "fix_trunctfdi2"
   [(use (match_operand:DI 0 "register_operand" ""))
    (use (match_operand:TF 1 "general_operand" ""))]
-  "TARGET_HAS_XFLOATING_LIBS"
+  "TARGET_FP && TARGET_HAS_XFLOATING_LIBS"
   "alpha_emit_xfloating_cvt (FIX, operands); DONE;")
 
 (define_insn ""
 (define_expand "floatditf2"
   [(use (match_operand:TF 0 "register_operand" ""))
    (use (match_operand:DI 1 "general_operand" ""))]
-  "TARGET_HAS_XFLOATING_LIBS"
+  "TARGET_FP && TARGET_HAS_XFLOATING_LIBS"
   "alpha_emit_xfloating_cvt (FLOAT, operands); DONE;")
 
 (define_expand "floatunsdisf2"
   [(use (match_operand:SF 0 "register_operand" ""))
    (use (match_operand:DI 1 "register_operand" ""))]
-  ""
+  "TARGET_FP"
   "alpha_emit_floatuns (operands); DONE;")
 
 (define_expand "floatunsdidf2"
   [(use (match_operand:DF 0 "register_operand" ""))
    (use (match_operand:DI 1 "register_operand" ""))]
-  ""
+  "TARGET_FP"
   "alpha_emit_floatuns (operands); DONE;")
 
 (define_expand "floatunsditf2"
   [(use (match_operand:TF 0 "register_operand" ""))
    (use (match_operand:DI 1 "general_operand" ""))]
-  "TARGET_HAS_XFLOATING_LIBS"
+  "TARGET_FP && TARGET_HAS_XFLOATING_LIBS"
   "alpha_emit_xfloating_cvt (UNSIGNED_FLOAT, operands); DONE;")
 
 (define_expand "extendsfdf2"
 (define_expand "extendsftf2"
   [(use (match_operand:TF 0 "register_operand" ""))
    (use (match_operand:SF 1 "general_operand" ""))]
-  "TARGET_HAS_XFLOATING_LIBS"
+  "TARGET_FP && TARGET_HAS_XFLOATING_LIBS"
   "
 {
   rtx tmp = gen_reg_rtx (DFmode);
 (define_expand "extenddftf2"
   [(use (match_operand:TF 0 "register_operand" ""))
    (use (match_operand:DF 1 "general_operand" ""))]
-  "TARGET_HAS_XFLOATING_LIBS"
+  "TARGET_FP && TARGET_HAS_XFLOATING_LIBS"
   "alpha_emit_xfloating_cvt (FLOAT_EXTEND, operands); DONE;")
 
 (define_insn ""
 (define_expand "trunctfdf2"
   [(use (match_operand:DF 0 "register_operand" ""))
    (use (match_operand:TF 1 "general_operand" ""))]
-  "TARGET_HAS_XFLOATING_LIBS"
+  "TARGET_FP && TARGET_HAS_XFLOATING_LIBS"
   "alpha_emit_xfloating_cvt (FLOAT_TRUNCATE, operands); DONE;")
 
 (define_expand "trunctfsf2"
   [(use (match_operand:SF 0 "register_operand" ""))
    (use (match_operand:TF 1 "general_operand" ""))]
-  "TARGET_HAS_XFLOATING_LIBS"
+  "TARGET_FP && TARGET_HAS_XFLOATING_LIBS"
   "
 {
   rtx tmpf, sticky, arg, lo, hi;
   [(use (match_operand 0 "register_operand" ""))
    (use (match_operand 1 "general_operand" ""))
    (use (match_operand 2 "general_operand" ""))]
-  "TARGET_HAS_XFLOATING_LIBS"
+  "TARGET_FP && TARGET_HAS_XFLOATING_LIBS"
   "alpha_emit_xfloating_arith (DIV, operands); DONE;")
 
 (define_insn ""
   [(use (match_operand 0 "register_operand" ""))
    (use (match_operand 1 "general_operand" ""))
    (use (match_operand 2 "general_operand" ""))]
-  "TARGET_HAS_XFLOATING_LIBS"
+  "TARGET_FP && TARGET_HAS_XFLOATING_LIBS"
   "alpha_emit_xfloating_arith (MULT, operands); DONE;")
 
 (define_insn ""
   [(use (match_operand 0 "register_operand" ""))
    (use (match_operand 1 "general_operand" ""))
    (use (match_operand 2 "general_operand" ""))]
-  "TARGET_HAS_XFLOATING_LIBS"
+  "TARGET_FP && TARGET_HAS_XFLOATING_LIBS"
   "alpha_emit_xfloating_arith (MINUS, operands); DONE;")
 
 (define_insn ""
 (define_expand "cmptf"
   [(set (cc0) (compare (match_operand:TF 0 "general_operand" "")
                       (match_operand:TF 1 "general_operand" "")))]
-  "TARGET_HAS_XFLOATING_LIBS"
+  "TARGET_FP && TARGET_HAS_XFLOATING_LIBS"
   "
 {
   alpha_compare.op0 = operands[0];
 (define_insn ""
   [(set (match_operand:SF 0 "nonimmediate_operand" "=f,f,*r,*r,m,m")
        (match_operand:SF 1 "input_operand" "fG,m,*rG,m,fG,*r"))]
-  "! TARGET_FIX
+  "TARGET_FPREGS && ! TARGET_FIX
    && (register_operand (operands[0], SFmode)
        || reg_or_fp0_operand (operands[1], SFmode))"
   "@
 (define_insn ""
   [(set (match_operand:SF 0 "nonimmediate_operand" "=f,f,*r,*r,m,m,f,*r")
        (match_operand:SF 1 "input_operand" "fG,m,*rG,m,fG,*r,*r,f"))]
-  "TARGET_FIX
+  "TARGET_FPREGS && TARGET_FIX
    && (register_operand (operands[0], SFmode)
        || reg_or_fp0_operand (operands[1], SFmode))"
   "@
    ftois %1,%0"
   [(set_attr "type" "fcpys,fld,ilog,ild,fst,ist,itof,ftoi")])
 
+(define_insn ""
+  [(set (match_operand:SF 0 "nonimmediate_operand" "=r,r,m")
+       (match_operand:SF 1 "input_operand" "rG,m,r"))]
+  "! TARGET_FPREGS
+   && (register_operand (operands[0], SFmode)
+       || reg_or_fp0_operand (operands[1], SFmode))"
+  "@
+   mov %r1,%0
+   ldl %0,%1
+   stl %r1,%0"
+  [(set_attr "type" "ilog,ild,ist")])
+
 (define_insn ""
   [(set (match_operand:DF 0 "nonimmediate_operand" "=f,f,*r,*r,m,m")
        (match_operand:DF 1 "input_operand" "fG,m,*rG,m,fG,*r"))]
-  "! TARGET_FIX
+  "TARGET_FPREGS && ! TARGET_FIX
    && (register_operand (operands[0], DFmode)
        || reg_or_fp0_operand (operands[1], DFmode))"
   "@
 (define_insn ""
   [(set (match_operand:DF 0 "nonimmediate_operand" "=f,f,*r,*r,m,m,f,*r")
        (match_operand:DF 1 "input_operand" "fG,m,*rG,m,fG,*r,*r,f"))]
-  "TARGET_FIX
+  "TARGET_FPREGS && TARGET_FIX
    && (register_operand (operands[0], DFmode)
        || reg_or_fp0_operand (operands[1], DFmode))"
   "@
    ftoit %1,%0"
   [(set_attr "type" "fcpys,fld,ilog,ild,fst,ist,itof,ftoi")])
 
+(define_insn ""
+  [(set (match_operand:DF 0 "nonimmediate_operand" "=r,r,m")
+       (match_operand:DF 1 "input_operand" "rG,m,r"))]
+  "! TARGET_FPREGS
+   && (register_operand (operands[0], DFmode)
+       || reg_or_fp0_operand (operands[1], DFmode))"
+  "@
+   mov %r1,%0
+   ldq %0,%1
+   stq %r1,%0"
+  [(set_attr "type" "ilog,ild,ist")])
+
 ;; Subregs suck for register allocation.  Pretend we can move TFmode
 ;; data between general registers until after reload.
 (define_insn ""