diff options
| author | Jack Carter <jcarter@mips.com> | 2012-06-28 01:33:40 +0000 |
|---|---|---|
| committer | Jack Carter <jcarter@mips.com> | 2012-06-28 01:33:40 +0000 |
| commit | 6c0bc0b378790ca38a3d31fc9571c7f25c4a494d (patch) | |
| tree | 22111e776daa644ed2691aba1bc979af40b308cd /llvm/lib | |
| parent | fe251c88d9644203e490d52ce71fa8605635ea45 (diff) | |
| download | bcm5719-llvm-6c0bc0b378790ca38a3d31fc9571c7f25c4a494d.tar.gz bcm5719-llvm-6c0bc0b378790ca38a3d31fc9571c7f25c4a494d.zip | |
The Mips specific inline asm operand modifier 'z' has the
following description in the gnu sources:
Print $0 if operand is zero otherwise print the op normally.
llvm-svn: 159324
Diffstat (limited to 'llvm/lib')
| -rw-r--r-- | llvm/lib/Target/Mips/MipsAsmPrinter.cpp | 14 |
1 files changed, 13 insertions, 1 deletions
diff --git a/llvm/lib/Target/Mips/MipsAsmPrinter.cpp b/llvm/lib/Target/Mips/MipsAsmPrinter.cpp index 0609241df2c..1c5bb1633be 100644 --- a/llvm/lib/Target/Mips/MipsAsmPrinter.cpp +++ b/llvm/lib/Target/Mips/MipsAsmPrinter.cpp @@ -323,6 +323,17 @@ bool MipsAsmPrinter::PrintAsmOperand(const MachineInstr *MI, unsigned OpNum, return true; O << MO.getImm() - 1; return false; + case 'z': // $0 if zero, regular printing otherwise + { + if (MO.getType() != MachineOperand::MO_Immediate) + return true; + int64_t Val = MO.getImm(); + if (Val) + O << Val; + else + O << "$0"; + return false; + } } } @@ -335,11 +346,12 @@ bool MipsAsmPrinter::PrintAsmMemoryOperand(const MachineInstr *MI, const char *ExtraCode, raw_ostream &O) { if (ExtraCode && ExtraCode[0]) - return true; // Unknown modifier. + return true; // Unknown modifier. const MachineOperand &MO = MI->getOperand(OpNum); assert(MO.isReg() && "unexpected inline asm memory operand"); O << "0($" << MipsInstPrinter::getRegisterName(MO.getReg()) << ")"; + return false; } |

