[llvm-commits] CVS: llvm/lib/Target/X86/FloatingPoint.cpp X86InstrInfo.h X86InstrInfo.td

Chris Lattner lattner at cs.uiuc.edu
Thu Jun 10 23:47:01 PDT 2004


Changes in directory llvm/lib/Target/X86:

FloatingPoint.cpp updated: 1.34 -> 1.35
X86InstrInfo.h updated: 1.39 -> 1.40
X86InstrInfo.td updated: 1.77 -> 1.78

---
Log message:

Introduce a new FP instruction type to separate the compare cases from the
twoarg cases.


---
Diffs of the changes:  (+13 -12)

Index: llvm/lib/Target/X86/FloatingPoint.cpp
diff -u llvm/lib/Target/X86/FloatingPoint.cpp:1.34 llvm/lib/Target/X86/FloatingPoint.cpp:1.35
--- llvm/lib/Target/X86/FloatingPoint.cpp:1.34	Thu Jun 10 23:25:06 2004
+++ llvm/lib/Target/X86/FloatingPoint.cpp	Thu Jun 10 23:41:24 2004
@@ -215,12 +215,8 @@
     case X86II::ZeroArgFP:  handleZeroArgFP(I); break;
     case X86II::OneArgFP:   handleOneArgFP(I);  break;  // fstp ST(0)
     case X86II::OneArgFPRW: handleOneArgFPRW(I); break; // ST(0) = fsqrt(ST(0))
-    case X86II::TwoArgFP:
-      if (I->getOpcode() != X86::FpUCOM && I->getOpcode() != X86::FpUCOMI)
-        handleTwoArgFP(I);
-      else
-        handleCompareFP(I);
-      break;
+    case X86II::TwoArgFP:   handleTwoArgFP(I); break;
+    case X86II::CompareFP:  handleCompareFP(I); break;
     case X86II::CondMovFP:  handleCondMovFP(I); break;
     case X86II::SpecialFP:  handleSpecialFP(I); break;
     default: assert(0 && "Unknown FP Type!");


Index: llvm/lib/Target/X86/X86InstrInfo.h
diff -u llvm/lib/Target/X86/X86InstrInfo.h:1.39 llvm/lib/Target/X86/X86InstrInfo.h:1.40
--- llvm/lib/Target/X86/X86InstrInfo.h:1.39	Tue Apr 13 12:18:39 2004
+++ llvm/lib/Target/X86/X86InstrInfo.h	Thu Jun 10 23:41:24 2004
@@ -155,11 +155,15 @@
     // argument.  For example: fadd, fsub, fmul, etc...
     TwoArgFP   = 4 << FPTypeShift,
 
+    // CompareFP - 2 arg FP instructions which implicitly read ST(0) and an
+    // explicit argument, but have no destination.  Example: fucom, fucomi, ...
+    CompareFP  = 5 << FPTypeShift,
+
     // CondMovFP - "2 operand" floating point conditional move instructions.
-    CondMovFP  = 5 << FPTypeShift,
+    CondMovFP  = 6 << FPTypeShift,
 
     // SpecialFP - Special instruction forms.  Dispatch by opcode explicitly.
-    SpecialFP  = 6 << FPTypeShift,
+    SpecialFP  = 7 << FPTypeShift,
 
     // PrintImplUsesAfter - Print out implicit uses in the assembly output after
     // the normal operands.


Index: llvm/lib/Target/X86/X86InstrInfo.td
diff -u llvm/lib/Target/X86/X86InstrInfo.td:1.77 llvm/lib/Target/X86/X86InstrInfo.td:1.78
--- llvm/lib/Target/X86/X86InstrInfo.td:1.77	Thu Jun 10 23:30:06 2004
+++ llvm/lib/Target/X86/X86InstrInfo.td	Thu Jun 10 23:41:24 2004
@@ -66,8 +66,9 @@
 def OneArgFP   : FPFormat<2>;
 def OneArgFPRW : FPFormat<3>;
 def TwoArgFP   : FPFormat<4>;
-def CondMovFP  : FPFormat<5>;
-def SpecialFP  : FPFormat<6>;
+def CompareFP  : FPFormat<5>;
+def CondMovFP  : FPFormat<6>;
+def SpecialFP  : FPFormat<7>;
 
 
 class X86Inst<string nam, bits<8> opcod, Format f, MemType m, ImmType i> : Instruction {
@@ -736,8 +737,8 @@
 def FpMUL : FPI<"FMUL", 0, Pseudo, TwoArgFP>;    // f1 = fmul f2, f3
 def FpDIV : FPI<"FDIV", 0, Pseudo, TwoArgFP>;    // f1 = fdiv f2, f3
 
-def FpUCOM  : FPI<"FUCOM", 0, Pseudo, TwoArgFP>;  // FPSW = fucom f1, f2
-def FpUCOMI : FPI<"FUCOMI", 0, Pseudo, TwoArgFP>;  // CC = fucomi f1, f2
+def FpUCOM  : FPI<"FUCOM", 0, Pseudo, CompareFP>;   // FPSW = fucom f1, f2
+def FpUCOMI : FPI<"FUCOMI", 0, Pseudo, CompareFP>;  // CC = fucomi f1, f2
 def FpGETRESULT : FPI<"FGETRESULT",0, Pseudo, SpecialFP>;  // FPR = ST(0)
 def FpSETRESULT : FPI<"FSETRESULT",0, Pseudo, SpecialFP>;  // ST(0) = FPR
 





More information about the llvm-commits mailing list