diff options
author | Evan Cheng <evan.cheng@apple.com> | 2006-01-26 02:27:43 +0000 |
---|---|---|
committer | Evan Cheng <evan.cheng@apple.com> | 2006-01-26 02:27:43 +0000 |
commit | 67caa39e4c0ee978edc235c52af6261684c29c3a (patch) | |
tree | 78c03875c25d6dfd7399ac75cd2be2b45fc48844 | |
parent | f0b415f178615714de38fb8196f49d131e54274b (diff) |
Work around some x86 Darwin assembler bugs
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@25638 91177308-0d34-0410-b5e6-96231b3b80d8
-rwxr-xr-x | lib/Target/X86/X86ATTAsmPrinter.cpp | 26 |
1 files changed, 26 insertions, 0 deletions
diff --git a/lib/Target/X86/X86ATTAsmPrinter.cpp b/lib/Target/X86/X86ATTAsmPrinter.cpp index c4639b3151..d9b263ae62 100755 --- a/lib/Target/X86/X86ATTAsmPrinter.cpp +++ b/lib/Target/X86/X86ATTAsmPrinter.cpp @@ -220,6 +220,32 @@ void X86ATTAsmPrinter::printMemReference(const MachineInstr *MI, unsigned Op){ /// 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); } |