New style x87 cmp instructions.
authorEvan Cheng <evan.cheng@apple.com>
Tue, 25 Sep 2007 19:08:02 +0000 (19:08 +0000)
committerEvan Cheng <evan.cheng@apple.com>
Tue, 25 Sep 2007 19:08:02 +0000 (19:08 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@42312 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Target/X86/X86FloatingPoint.cpp
lib/Target/X86/X86InstrFPStack.td

index ea9a8f7c488245534c69c574aec4de7babce1f71..37a9f6016cea90d10e655c84a9cbd02a228a1bd7 100644 (file)
@@ -463,6 +463,12 @@ static const TableEntry OpcodeTable[] = {
   { X86::NEW_CMOVP_Fp32   , X86::CMOVP_F   },
   { X86::NEW_CMOVP_Fp64   , X86::CMOVP_F   },
   { X86::NEW_CMOVP_Fp80   , X86::CMOVP_F   },
+  { X86::NEW_UCOM_FpIr32  , X86::UCOM_FIr  },
+  { X86::NEW_UCOM_FpIr64  , X86::UCOM_FIr  },
+  { X86::NEW_UCOM_FpIr80  , X86::UCOM_FIr  },
+  { X86::NEW_UCOM_Fpr32   , X86::UCOM_Fr   },
+  { X86::NEW_UCOM_Fpr64   , X86::UCOM_Fr   },
+  { X86::NEW_UCOM_Fpr80   , X86::UCOM_Fr   },
 
   { X86::SIN_Fp32     , X86::SIN_F     },
   { X86::SIN_Fp64     , X86::SIN_F     },
index 737c74539c51c8cb93d6440c3b24f00fa997c111..ec6373262e4a0926c1349fa6e8701103ade605d2 100644 (file)
@@ -503,6 +503,7 @@ def LD_F1 : FPI<0xE8, RawFrm, (outs), (ins), "fld1">, D9;
 
 
 // Floating point compares.
+let Defs = [EFLAGS] in {
 def UCOM_Fpr32 : FpIf32<(outs), (ins RFP32:$lhs, RFP32:$rhs), CompareFP,
                   []>;  // FPSW = cmp ST(0) with ST(i)
 def UCOM_FpIr32: FpIf32<(outs), (ins RFP32:$lhs, RFP32:$rhs), CompareFP,
@@ -516,6 +517,23 @@ def UCOM_Fpr80 : FpI_<(outs), (ins RFP80:$lhs, RFP80:$rhs), CompareFP,
 def UCOM_FpIr80: FpI_<(outs), (ins RFP80:$lhs, RFP80:$rhs), CompareFP,
                   [(X86cmp RFP80:$lhs, RFP80:$rhs)]>; // CC = ST(0) cmp ST(i)
 
+def NEW_UCOM_Fpr32 : FpIf32<(outs), (ins RFP32:$lhs, RFP32:$rhs), CompareFP,
+                  []>;  // FPSW = cmp ST(0) with ST(i)
+def NEW_UCOM_FpIr32: FpIf32<(outs), (ins RFP32:$lhs, RFP32:$rhs), CompareFP,
+                  [(X86cmp_new RFP32:$lhs, RFP32:$rhs),
+                   (implicit EFLAGS)]>; // CC = ST(0) cmp ST(i)
+def NEW_UCOM_Fpr64 : FpIf64<(outs), (ins RFP64:$lhs, RFP64:$rhs), CompareFP,
+                  []>;  // FPSW = cmp ST(0) with ST(i)
+def NEW_UCOM_FpIr64: FpIf64<(outs), (ins RFP64:$lhs, RFP64:$rhs), CompareFP,
+                  [(X86cmp_new RFP64:$lhs, RFP64:$rhs),
+                   (implicit EFLAGS)]>; // CC = ST(0) cmp ST(i)
+def NEW_UCOM_Fpr80 : FpI_<(outs), (ins RFP80:$lhs, RFP80:$rhs), CompareFP,
+                  []>;  // FPSW = cmp ST(0) with ST(i)
+def NEW_UCOM_FpIr80: FpI_<(outs), (ins RFP80:$lhs, RFP80:$rhs), CompareFP,
+                  [(X86cmp_new RFP80:$lhs, RFP80:$rhs),
+                   (implicit EFLAGS)]>; // CC = ST(0) cmp ST(i)
+}
+
 let Defs = [EFLAGS], Uses = [ST0] in {
 def UCOM_Fr    : FPI<0xE0, AddRegFrm,    // FPSW = cmp ST(0) with ST(i)
                     (outs), (ins RST:$reg),