OSDN Git Service

PR target/39482
[pf3gnuchains/gcc-fork.git] / gcc / config / i386 / i386.md
index 023f2e1..39e62fb 100644 (file)
    (set_attr "mode" "SF")])
 
 (define_insn "*truncdfsf_mixed"
-  [(set (match_operand:SF 0 "nonimmediate_operand"   "=m,?fx*r,Y2")
+  [(set (match_operand:SF 0 "nonimmediate_operand"   "=m,Y2 ,?f,?x,?*r")
        (float_truncate:SF
-         (match_operand:DF 1 "nonimmediate_operand" "f ,f    ,Y2m")))
-   (clobber (match_operand:SF 2 "memory_operand"     "=X,m    ,X"))]
+         (match_operand:DF 1 "nonimmediate_operand" "f ,Y2m,f ,f ,f")))
+   (clobber (match_operand:SF 2 "memory_operand"     "=X,X  ,m ,m ,m"))]
   "TARGET_MIX_SSE_I387"
 {
   switch (which_alternative)
     {
     case 0:
       return output_387_reg_move (insn, operands);
-
     case 1:
-      return "#";
-    case 2:
       return "%vcvtsd2ss\t{%1, %d0|%d0, %1}";
+
     default:
-      gcc_unreachable ();
+      return "#";
     }
 }
-  [(set_attr "type" "fmov,multi,ssecvt")
-   (set_attr "unit" "*,i387,*")
-   (set_attr "prefix" "orig,orig,maybe_vex")
+  [(set_attr "type" "fmov,ssecvt,multi,multi,multi")
+   (set_attr "unit" "*,*,i387,i387,i387")
+   (set_attr "prefix" "orig,maybe_vex,orig,orig,orig")
    (set_attr "mode" "SF")])
 
 (define_insn "*truncdfsf_i387"
-  [(set (match_operand:SF 0 "nonimmediate_operand" "=m,?fx*r")
+  [(set (match_operand:SF 0 "nonimmediate_operand"   "=m,?f,?x,?*r")
        (float_truncate:SF
-         (match_operand:DF 1 "nonimmediate_operand" "f,f")))
-   (clobber (match_operand:SF 2 "memory_operand" "=X,m"))]
+         (match_operand:DF 1 "nonimmediate_operand" "f ,f ,f ,f")))
+   (clobber (match_operand:SF 2 "memory_operand"     "=X,m ,m ,m"))]
   "TARGET_80387"
 {
   switch (which_alternative)
     case 0:
       return output_387_reg_move (insn, operands);
 
-    case 1:
-      return "#";
     default:
-      gcc_unreachable ();
+      return "#";
     }
 }
-  [(set_attr "type" "fmov,multi")
-   (set_attr "unit" "*,i387")
+  [(set_attr "type" "fmov,multi,multi,multi")
+   (set_attr "unit" "*,i387,i387,i387")
    (set_attr "mode" "SF")])
 
 (define_insn "*truncdfsf2_i387_1"
 })
 
 (define_insn "*truncxfsf2_mixed"
-  [(set (match_operand:SF 0 "nonimmediate_operand" "=m,?fx*r")
+  [(set (match_operand:SF 0 "nonimmediate_operand" "=m,?f,?x,?*r")
        (float_truncate:SF
-         (match_operand:XF 1 "register_operand" "f,f")))
-   (clobber (match_operand:SF 2 "memory_operand" "=X,m"))]
+         (match_operand:XF 1 "register_operand"   "f ,f ,f ,f")))
+   (clobber (match_operand:SF 2 "memory_operand"   "=X,m ,m ,m"))]
   "TARGET_80387"
 {
   gcc_assert (!which_alternative);
   return output_387_reg_move (insn, operands);
 }
-  [(set_attr "type" "fmov,multi")
-   (set_attr "unit" "*,i387")
+  [(set_attr "type" "fmov,multi,multi,multi")
+   (set_attr "unit" "*,i387,i387,i387")
    (set_attr "mode" "SF")])
 
 (define_insn "*truncxfdf2_mixed"
-  [(set (match_operand:DF 0 "nonimmediate_operand" "=m,?fY2*r")
+  [(set (match_operand:DF 0 "nonimmediate_operand" "=m,?f,?Y2,?*r")
        (float_truncate:DF
-         (match_operand:XF 1 "register_operand" "f,f")))
-   (clobber (match_operand:DF 2 "memory_operand" "=X,m"))]
+         (match_operand:XF 1 "register_operand"   "f ,f ,f  ,f")))
+   (clobber (match_operand:DF 2 "memory_operand"   "=X,m ,m  ,m"))]
   "TARGET_80387"
 {
   gcc_assert (!which_alternative);
   return output_387_reg_move (insn, operands);
 }
-  [(set_attr "type" "fmov,multi")
-   (set_attr "unit" "*,i387")
+  [(set_attr "type" "fmov,multi,multi,multi")
+   (set_attr "unit" "*,i387,i387,i387")
    (set_attr "mode" "DF")])
 
 (define_insn "truncxf<mode>2_i387_noop"