preemptively add the rest of the non-n fpstack instructions.
authorChris Lattner <sabre@nondot.org>
Thu, 30 Sep 2010 17:11:29 +0000 (17:11 +0000)
committerChris Lattner <sabre@nondot.org>
Thu, 30 Sep 2010 17:11:29 +0000 (17:11 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@115168 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Target/X86/AsmParser/X86AsmParser.cpp
test/MC/AsmParser/X86/x86_instructions.s

index dc86484bd4aaed17fe9411ae69946df198c82158..f057cd6226763c03473a5ce1256c36b8b82a0ae0 100644 (file)
@@ -1120,7 +1120,8 @@ MatchAndEmitInstruction(SMLoc IDLoc,
   // First, handle aliases that expand to multiple instructions.
   // FIXME: This should be replaced with a real .td file alias mechanism.
   if (Op->getToken() == "fstsw" || Op->getToken() == "fstcw" ||
-      Op->getToken() == "finit") {
+      Op->getToken() == "finit" || Op->getToken() == "fsave" ||
+      Op->getToken() == "fstenv") {
     MCInst Inst;
     Inst.setOpcode(X86::WAIT);
     Out.EmitInstruction(Inst);
@@ -1128,9 +1129,11 @@ MatchAndEmitInstruction(SMLoc IDLoc,
     delete Operands[0];
     const char *Repl =
       StringSwitch<const char*>(Op->getToken())
-        .Case("fstsw", "fnstsw")
-        .Case("fstcw", "fnstcw")
         .Case("finit", "fninit")
+        .Case("fsave", "fnsave")
+        .Case("fstcw", "fnstcw")
+        .Case("fstenv", "fnstenv")
+        .Case("fstsw", "fnstsw")
         .Default(0);
     assert(Repl && "Unknown wait-prefixed instruction");
     Operands[0] = X86Operand::CreateToken(Repl, IDLoc);
index 4731a0857de1301c81638a6dd5c90ef16e7cb11a..a0bc0c9236bbb5c95e6ac4c64331a7e7f7b94448 100644 (file)
@@ -431,6 +431,10 @@ finit
 // CHECK: wait
 // CHECK: fninit
 
+fsave  32493
+// CHECK: wait
+// CHECK: fnsave 32493
+
 
 // rdar://8456382 - cvtsd2si support.
 cvtsd2si       %xmm1, %rax