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 | fcdce6d26fc4fe1ed92f735bc426787afc3835ba (patch) | |
tree | 9f1778d9bfcbab2277e62936c4f2dbefc78e3f1b | |
parent | c981b8e35a7b6109e2e7a828767c1439a6f1b50d (diff) | |
download | bcm5719-llvm-fcdce6d26fc4fe1ed92f735bc426787afc3835ba.tar.gz bcm5719-llvm-fcdce6d26fc4fe1ed92f735bc426787afc3835ba.zip |
Work around some x86 Darwin assembler bugs
llvm-svn: 25638
-rwxr-xr-x | llvm/lib/Target/X86/X86ATTAsmPrinter.cpp | 26 |
1 files changed, 26 insertions, 0 deletions
diff --git a/llvm/lib/Target/X86/X86ATTAsmPrinter.cpp b/llvm/lib/Target/X86/X86ATTAsmPrinter.cpp index c4639b31510..d9b263ae62a 100755 --- a/llvm/lib/Target/X86/X86ATTAsmPrinter.cpp +++ b/llvm/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); } |