Work around some x86 Darwin assembler bugs

llvm-svn: 25638
diff --git a/llvm/lib/Target/X86/X86ATTAsmPrinter.cpp b/llvm/lib/Target/X86/X86ATTAsmPrinter.cpp
index c4639b3..d9b263ae 100755
--- a/llvm/lib/Target/X86/X86ATTAsmPrinter.cpp
+++ b/llvm/lib/Target/X86/X86ATTAsmPrinter.cpp
@@ -220,6 +220,32 @@
 ///
 void X86ATTAsmPrinter::printMachineInstruction(const MachineInstr *MI) {
   ++EmittedInsts;
+  // This works around some Darwin assembler bugs.
+  if (forDarwin) {
+    switch (MI->getOpcode()) {
+    case X86::REP_MOVSB:
+      O << "rep/movsb (%esi),(%edi)\n";
+      return;
+    case X86::REP_MOVSD:
+      O << "rep/movsl (%esi),(%edi)\n";
+      return;
+    case X86::REP_MOVSW:
+      O << "rep/movsw (%esi),(%edi)\n";
+      return;
+    case X86::REP_STOSB:
+      O << "rep/stosb\n";
+      return;
+    case X86::REP_STOSD:
+      O << "rep/stosl\n";
+      return;
+    case X86::REP_STOSW:
+      O << "rep/stosw\n";
+      return;
+    default:
+      break;
+    }
+  }
+
   // Call the autogenerated instruction printer routines.
   printInstruction(MI);
 }