initial support for fp compares. Unordered compares not implemented yet

llvm-svn: 30854
diff --git a/llvm/lib/Target/ARM/ARMInstrInfo.td b/llvm/lib/Target/ARM/ARMInstrInfo.td
index 9d4649a..3371871 100644
--- a/llvm/lib/Target/ARM/ARMInstrInfo.td
+++ b/llvm/lib/Target/ARM/ARMInstrInfo.td
@@ -65,9 +65,11 @@
 	                   [SDNPHasChain, SDNPOptInFlag]>;
 
 def SDTarmselect   : SDTypeProfile<1, 3, [SDTCisSameAs<0, 1>, SDTCisSameAs<0, 2>, SDTCisInt<0>, SDTCisVT<2, i32>]>;
-
 def armselect      : SDNode<"ARMISD::SELECT", SDTarmselect, [SDNPInFlag, SDNPOutFlag]>;
 
+def SDTarmfmstat   : SDTypeProfile<0, 0, []>;
+def armfmstat      : SDNode<"ARMISD::FMSTAT", SDTarmfmstat, [SDNPInFlag, SDNPOutFlag]>;
+
 def SDTarmbr       : SDTypeProfile<0, 2, [SDTCisVT<0, OtherVT>, SDTCisVT<1, i32>]>;
 def armbr          : SDNode<"ARMISD::BR", SDTarmbr, [SDNPHasChain, SDNPInFlag]>;
 
@@ -171,6 +173,10 @@
 	               "cmp $a, $b",
 		       [(armcmp IntRegs:$a, addr_mode1:$b)]>;
 
+// Floating Point Compare
+def fcmpes  : InstARM<(ops FPRegs:$a, FPRegs:$b),
+	               "fcmpes $a, $b",
+		       [(armcmp FPRegs:$a, FPRegs:$b)]>;
 
 // Floating Point Conversion
 // We use bitconvert for moving the data between the register classes.
@@ -206,6 +212,8 @@
 def FCVTSD  : InstARM<(ops FPRegs:$dst, DFPRegs:$src),
                        "fcvtsd $dst, $src", [(set FPRegs:$dst, (fround DFPRegs:$src))]>;
 
+def FMSTAT  : InstARM<(ops ), "fmstat", [(armfmstat)]>;
+
 // Floating Point Arithmetic
 def FADDS   : InstARM<(ops FPRegs:$dst, FPRegs:$a, FPRegs:$b),
                        "fadds $dst, $a, $b",