Added some aliases to the fcomip and fucompi Intel instructions. So that llvm-mc
authorKevin Enderby <enderby@apple.com>
Wed, 27 Oct 2010 00:59:28 +0000 (00:59 +0000)
committerKevin Enderby <enderby@apple.com>
Wed, 27 Oct 2010 00:59:28 +0000 (00:59 +0000)
will accept versions that the darwin assembler allows.  Forms ending in "pi" and
forms without all the operands.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@117427 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Target/X86/AsmParser/X86AsmParser.cpp
test/MC/X86/x86-32.s

index 4aad817f13d690877eb5668e09f51c48d6c043bb..9bf0f6415eb2b147ce42bf4f368aa1670b7b66a9 100644 (file)
@@ -703,6 +703,8 @@ ParseInstruction(StringRef Name, SMLoc NameLoc,
     .Case("fwait", "wait")
     .Case("movzx", "movzb")  // FIXME: Not correct.
     .Case("fildq", "fildll")
+    .Case("fcompi", "fcomip")
+    .Case("fucompi", "fucomip")
     .Default(Name);
 
   // FIXME: Hack to recognize cmp<comparison code>{ss,sd,ps,pd}.
@@ -991,9 +993,20 @@ ParseInstruction(StringRef Name, SMLoc NameLoc,
                                              NameLoc, NameLoc));
   }
 
+  // The assembler accepts this instruction with no operand as a synonym for an
+  // instruction taking %st(1),%st(0). e.g. "fcompi" -> "fcompi %st(1),st(0)".
+  if (Name == "fcompi" && Operands.size() == 1) {
+    Operands.push_back(X86Operand::CreateReg(MatchRegisterName("st(1)"),
+                                             NameLoc, NameLoc));
+    Operands.push_back(X86Operand::CreateReg(MatchRegisterName("st(0)"),
+                                             NameLoc, NameLoc));
+  }
+
   // The assembler accepts these instructions with two few operands as a synonym
   // for taking %st(1),%st(0) or X, %st(0).
-  if ((Name == "fcomi" || Name == "fucomi") && Operands.size() < 3) {
+  if ((Name == "fcomi" || Name == "fucomi" || Name == "fucompi" ||
+       Name == "fcompi" ) &&
+      Operands.size() < 3) {
     if (Operands.size() == 1)
       Operands.push_back(X86Operand::CreateReg(MatchRegisterName("st(1)"),
                                                NameLoc, NameLoc));
index c474b1c589c5dc77ac1b6673d1f55a75b9fdcda5..9bce1a8da29fab00ef13abc238e062aa6ee9c4c8 100644 (file)
@@ -702,3 +702,27 @@ pshufw $90, %mm4, %mm0
 // CHECK: sidt 4(%eax)
 // CHECK:  encoding: [0x0f,0x01,0x48,0x04]
                sidtl   4(%eax)
+
+// CHECK: fcomip       %st(2), %st(0)
+// CHECK:  encoding: [0xdf,0xf2]
+               fcompi  %st(2),%st
+
+// CHECK: fcomip       %st(2), %st(0)
+// CHECK:  encoding: [0xdf,0xf2]
+               fcompi  %st(2)
+
+// CHECK: fcomip       %st(1), %st(0)
+// CHECK:  encoding: [0xdf,0xf1]
+               fcompi
+
+// CHECK: fucomip      %st(2), %st(0)
+// CHECK:  encoding: [0xdf,0xea]
+               fucompi %st(2),%st
+
+// CHECK: fucomip      %st(2), %st(0)
+// CHECK:  encoding: [0xdf,0xea]
+               fucompi %st(2)
+
+// CHECK: fucomip      %st(1), %st(0)
+// CHECK:  encoding: [0xdf,0xe9]
+               fucompi