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",