summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEvan Cheng <evan.cheng@apple.com>2006-01-26 02:27:43 +0000
committerEvan Cheng <evan.cheng@apple.com>2006-01-26 02:27:43 +0000
commitfcdce6d26fc4fe1ed92f735bc426787afc3835ba (patch)
tree9f1778d9bfcbab2277e62936c4f2dbefc78e3f1b
parentc981b8e35a7b6109e2e7a828767c1439a6f1b50d (diff)
downloadbcm5719-llvm-fcdce6d26fc4fe1ed92f735bc426787afc3835ba.tar.gz
bcm5719-llvm-fcdce6d26fc4fe1ed92f735bc426787afc3835ba.zip
Work around some x86 Darwin assembler bugs
llvm-svn: 25638
-rwxr-xr-xllvm/lib/Target/X86/X86ATTAsmPrinter.cpp26
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);
}
OpenPOWER on IntegriCloud