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 | 1fabfaad6d099786b8ca31acf94844d6fe4b2ea1 (patch) | |
tree | c436cf5d35f660861bd175dd6dee7c6c43b004b7 /lib | |
parent | 49d6b24d6e9c1c56022b0fbbc9ddca8f2fe27b59 (diff) | |
download | external_llvm-1fabfaad6d099786b8ca31acf94844d6fe4b2ea1.zip external_llvm-1fabfaad6d099786b8ca31acf94844d6fe4b2ea1.tar.gz external_llvm-1fabfaad6d099786b8ca31acf94844d6fe4b2ea1.tar.bz2 |
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
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@43430 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib')
-rw-r--r-- | lib/Target/X86/X86ATTAsmPrinter.cpp | 20 |
1 files changed, 18 insertions, 2 deletions
diff --git a/lib/Target/X86/X86ATTAsmPrinter.cpp b/lib/Target/X86/X86ATTAsmPrinter.cpp index 0655877..cc4252f 100644 --- a/lib/Target/X86/X86ATTAsmPrinter.cpp +++ b/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; } |