diff options
author | Eric Christopher <echristo@apple.com> | 2011-05-25 20:51:58 +0000 |
---|---|---|
committer | Eric Christopher <echristo@apple.com> | 2011-05-25 20:51:58 +0000 |
commit | 8c5e4192e6e3d322844630a50b718f4f282e6b21 (patch) | |
tree | 2288cb008da0a980156903bae95678e61b58babe /llvm/lib/Target/ARM/ARMAsmPrinter.cpp | |
parent | fcaeae492940662da16b2a75dbf3be494150b82f (diff) | |
download | bcm5719-llvm-8c5e4192e6e3d322844630a50b718f4f282e6b21.tar.gz bcm5719-llvm-8c5e4192e6e3d322844630a50b718f4f282e6b21.zip |
Implement the 'm' modifier. Note that it only works for memory operands.
Part of rdar://9119939
llvm-svn: 132081
Diffstat (limited to 'llvm/lib/Target/ARM/ARMAsmPrinter.cpp')
-rw-r--r-- | llvm/lib/Target/ARM/ARMAsmPrinter.cpp | 18 |
1 files changed, 14 insertions, 4 deletions
diff --git a/llvm/lib/Target/ARM/ARMAsmPrinter.cpp b/llvm/lib/Target/ARM/ARMAsmPrinter.cpp index 02263ee45e9..41cedab9692 100644 --- a/llvm/lib/Target/ARM/ARMAsmPrinter.cpp +++ b/llvm/lib/Target/ARM/ARMAsmPrinter.cpp @@ -426,7 +426,6 @@ bool ARMAsmPrinter::PrintAsmOperand(const MachineInstr *MI, unsigned OpNum, return true; O << (MI->getOperand(OpNum).getImm() & 0xffff); return false; - case 'm': // The base register of a memory operand. case 'M': // A register range suitable for LDM/STM. case 'p': // The high single-precision register of a VFP double-precision // register. @@ -450,9 +449,20 @@ bool ARMAsmPrinter::PrintAsmMemoryOperand(const MachineInstr *MI, unsigned OpNum, unsigned AsmVariant, const char *ExtraCode, raw_ostream &O) { - if (ExtraCode && ExtraCode[0]) - return true; // Unknown modifier. - + // Does this asm operand have a single letter operand modifier? + if (ExtraCode && ExtraCode[0]) { + if (ExtraCode[1] != 0) return true; // Unknown modifier. + + switch (ExtraCode[0]) { + default: return true; // Unknown modifier. + case 'm': // The base register of a memory operand. + if (!MI->getOperand(OpNum).isReg()) + return true; + O << ARMInstPrinter::getRegisterName(MI->getOperand(OpNum).getReg()); + return false; + } + } + const MachineOperand &MO = MI->getOperand(OpNum); assert(MO.isReg() && "unexpected inline asm memory operand"); O << "[" << ARMInstPrinter::getRegisterName(MO.getReg()) << "]"; |