diff options
| author | Chris Lattner <sabre@nondot.org> | 2007-10-29 03:09:07 +0000 |
|---|---|---|
| committer | Chris Lattner <sabre@nondot.org> | 2007-10-29 03:09:07 +0000 |
| commit | 5e99fd8c0de45feda7a3dc78884020c2ee44673c (patch) | |
| tree | ae0dbbd22ef1421a1d35ba9905304e39afe3c481 /llvm/lib/Target/X86/X86ATTAsmPrinter.cpp | |
| parent | ceced4ca730cd3378174bb9bab30454cfcfe027f (diff) | |
| download | bcm5719-llvm-5e99fd8c0de45feda7a3dc78884020c2ee44673c.tar.gz bcm5719-llvm-5e99fd8c0de45feda7a3dc78884020c2ee44673c.zip | |
Add support for the x86-64 'q' regigster modifier, and add support for the
b/h/w/k/q inline asm memory modifiers, which are just ignored. This fixes
PR1748 and CodeGen/X86/2007-10-28-inlineasm-q-modifier.ll
llvm-svn: 43430
Diffstat (limited to 'llvm/lib/Target/X86/X86ATTAsmPrinter.cpp')
| -rw-r--r-- | llvm/lib/Target/X86/X86ATTAsmPrinter.cpp | 20 |
1 files changed, 18 insertions, 2 deletions
diff --git a/llvm/lib/Target/X86/X86ATTAsmPrinter.cpp b/llvm/lib/Target/X86/X86ATTAsmPrinter.cpp index 06558771240..cc4252fc47c 100644 --- a/llvm/lib/Target/X86/X86ATTAsmPrinter.cpp +++ b/llvm/lib/Target/X86/X86ATTAsmPrinter.cpp @@ -521,6 +521,9 @@ bool X86ATTAsmPrinter::printAsmMRegister(const MachineOperand &MO, case 'k': // Print SImode register Reg = getX86SubSuperRegister(Reg, MVT::i32); break; + case 'q': // Print DImode register + Reg = getX86SubSuperRegister(Reg, MVT::i64); + break; } O << '%'; @@ -547,6 +550,7 @@ bool X86ATTAsmPrinter::PrintAsmOperand(const MachineInstr *MI, unsigned OpNo, case 'h': // Print QImode high register case 'w': // Print HImode register case 'k': // Print SImode register + case 'q': // Print DImode register if (MI->getOperand(OpNo).isRegister()) return printAsmMRegister(MI->getOperand(OpNo), ExtraCode[0]); printOperand(MI, OpNo); @@ -566,8 +570,20 @@ bool X86ATTAsmPrinter::PrintAsmMemoryOperand(const MachineInstr *MI, unsigned OpNo, unsigned AsmVariant, const char *ExtraCode) { - if (ExtraCode && ExtraCode[0]) - return true; // Unknown modifier. + if (ExtraCode && ExtraCode[0]) { + if (ExtraCode[1] != 0) return true; // Unknown modifier. + + switch (ExtraCode[0]) { + default: return true; // Unknown modifier. + case 'b': // Print QImode register + case 'h': // Print QImode high register + case 'w': // Print HImode register + case 'k': // Print SImode register + case 'q': // Print SImode register + // These only apply to registers, ignore on mem. + break; + } + } printMemReference(MI, OpNo); return false; } |

